From c2b396347a3dcf887d8951e4c425e4cabfbc1207 Mon Sep 17 00:00:00 2001 From: lxr-tech <1838593642@qq.com> Date: Fri, 13 May 2022 11:49:44 +0800 Subject: [PATCH] update tutorial-01 lxr 220513 --- tutorials/fastnlp_tutorial_0.ipynb | 42 +- tutorials/fastnlp_tutorial_1.ipynb | 732 ++---------------- .../figures/T0-fig-parameter-matching.png | Bin 0 -> 95576 bytes .../figures/T0-fig-trainer-and-evaluator.png | Bin 100764 -> 71418 bytes .../figures/T0-fig-training-structure.png | Bin 0 -> 80282 bytes 5 files changed, 80 insertions(+), 694 deletions(-) create mode 100644 tutorials/figures/T0-fig-parameter-matching.png create mode 100644 tutorials/figures/T0-fig-training-structure.png diff --git a/tutorials/fastnlp_tutorial_0.ipynb b/tutorials/fastnlp_tutorial_0.ipynb index 26675ecf..4368652a 100644 --- a/tutorials/fastnlp_tutorial_0.ipynb +++ b/tutorials/fastnlp_tutorial_0.ipynb @@ -86,9 +86,11 @@ "\n", " 具体`driver`与`Trainer`以及`Evaluator`之间的关系请参考`fastNLP 0.8`的框架设计\n", "\n", - "注:在同一脚本中,`Trainer`和`Evaluator`使用的`driver`应当保持一致\n", + "注:这里给出一条建议:**在同一脚本中**,**所有的`Trainer`和`Evaluator`使用的`driver`应当保持一致**\n", "\n", - " 一个不能违背的原则在于:**不要将多卡的`driver`前使用单卡的`driver`**(???),这样使用可能会带来很多意想不到的错误" + " 尽量不出现,之前使用单卡的`driver`,后面又使用多卡的`driver`,这是因为,当脚本执行至\n", + "\n", + " 多卡`driver`处时,会重启一个进程执行之前所有内容,如此一来可能会造成一些意想不到的麻烦" ] }, { @@ -167,7 +169,7 @@ "\n", "注:在`fastNLP 0.8`中,**`Trainer`要求模型通过`train_step`来返回一个字典**,**满足如`{\"loss\": loss}`的形式**\n", "\n", - " 此外,这里也可以通过传入`Trainer`的参数`output_mapping`来实现高度化的定制,具体请见这一note(???)\n", + " 此外,这里也可以通过传入`Trainer`的参数`output_mapping`来实现输出的转换,详见(trainer的详细讲解,待补充)\n", "\n", "同样,在`fastNLP 0.8`中,**函数`evaluate_step`是`Evaluator`中参数`evaluate_fn`的默认值**\n", "\n", @@ -177,7 +179,7 @@ "\n", " 从模块角度,该字典的键值和`metric`中的`update`函数的签名一致,这样的机制在传参时被称为“**参数匹配**”\n", "\n", - "" + "" ] }, { @@ -216,8 +218,14 @@ "\n", " def __getitem__(self, item):\n", " return {\"x\": self.x[item], \"y\": self.y[item]}\n", - "```\n", - "***\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "f5f1a6aa", + "metadata": {}, + "source": [ "对于后者,首先要明确,在`Trainer`和`Evaluator`中,`metrics`的计算分为`update`和`get_metric`两步\n", "\n", " **`update`函数**,**针对一个`batch`的预测结果**,计算其累计的评价指标\n", @@ -230,7 +238,9 @@ "\n", " 在此基础上,**`fastNLP 0.8`要求`evaluate_dataloader`生成的每个`batch`传递给对应的`metric`**\n", "\n", - " **以`{\"pred\": y_pred, \"target\": y_true}`的形式**,对应其`update`函数的函数签名" + " **以`{\"pred\": y_pred, \"target\": y_true}`的形式**,对应其`update`函数的函数签名\n", + "\n", + "" ] }, { @@ -639,11 +649,11 @@ { "data": { "text/html": [ - "
{'acc#acc': 0.29}\n", + "{'acc#acc': 0.39}\n", "\n" ], "text/plain": [ - "\u001b[1m{\u001b[0m\u001b[32m'acc#acc'\u001b[0m: \u001b[1;36m0.29\u001b[0m\u001b[1m}\u001b[0m\n" + "\u001b[1m{\u001b[0m\u001b[32m'acc#acc'\u001b[0m: \u001b[1;36m0.39\u001b[0m\u001b[1m}\u001b[0m\n" ] }, "metadata": {}, @@ -652,7 +662,7 @@ { "data": { "text/plain": [ - "{'acc#acc': 0.29}" + "{'acc#acc': 0.39}" ] }, "execution_count": 9, @@ -710,7 +720,9 @@ "source": [ "通过使用`Trainer`类的`run`函数,进行训练\n", "\n", - " 还可以通过参数`num_eval_sanity_batch`决定每次训练前运行多少个`evaluate_batch`进行评测,默认为2" + " 还可以通过参数`num_eval_sanity_batch`决定每次训练前运行多少个`evaluate_batch`进行评测,默认为2\n", + "\n", + " 之所以“先评测后训练”,是为了保证训练很长时间的数据,不会在评测阶段出问题,故作此试探性评测" ] }, { @@ -773,6 +785,14 @@ "source": [ "trainer.run()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c4e9c619", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/tutorials/fastnlp_tutorial_1.ipynb b/tutorials/fastnlp_tutorial_1.ipynb index 93e7a664..c378b54a 100644 --- a/tutorials/fastnlp_tutorial_1.ipynb +++ b/tutorials/fastnlp_tutorial_1.ipynb @@ -153,7 +153,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "2438703969992 2438374526920\n", + "1608199516936 1607874531400\n", "+-----+------------------------+------------------------+-----+\n", "| idx | sentence | words | num |\n", "+-----+------------------------+------------------------+-----+\n", @@ -183,7 +183,7 @@ "id": "aa277674", "metadata": {}, "source": [ - " 注二:在`fastNLP 0.8`中,**对`dataset`使用等号**,**其效果是传引用**,**而不是赋值**(???)\n", + " 注二:**对对象使用等号一般表示传引用**,所以对`dataset`使用等号,是传引用而不是赋值\n", "\n", " 如下所示,**`dropped`和`dataset`具有相同`id`**,**对`dropped`执行删除操作`dataset`同时会被修改**" ] @@ -198,7 +198,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "2438374526920 2438374526920\n", + "1607874531400 1607874531400\n", "+-----+------------------------+------------------------+-----+\n", "| idx | sentence | words | num |\n", "+-----+------------------------+------------------------+-----+\n", @@ -296,9 +296,9 @@ "\n", "在`dataset`模块中,`apply`、`apply_field`、`apply_more`和`apply_field_more`函数可以进行简单的数据预处理\n", "\n", - " **`apply`和`apply_more`针对整条实例**,**`apply_field`和`apply_field_more`仅针对实例的部分字段**\n", + " **`apply`和`apply_more`输入整条实例**,**`apply_field`和`apply_field_more`仅输入实例的部分字段**\n", "\n", - " **`apply`和`apply_field`仅针对单个字段**,**`apply_more`和`apply_field_more`则可以针对多个字段**\n", + " **`apply`和`apply_field`仅输出单个字段**,**`apply_more`和`apply_field_more`则是输出多个字段**\n", "\n", " **`apply`和`apply_field`返回的是个列表**,**`apply_more`和`apply_field_more`返回的是个字典**\n", "\n", @@ -311,14 +311,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "72a0b5f9", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "", + "model_id": "8532c5609a394c19b60315663a6f0f4a", "version_major": 2, "version_minor": 0 }, @@ -328,42 +328,6 @@ }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+------------------------------+------------------------------+\n", - "| idx | sentence | words |\n", - "+-----+------------------------------+------------------------------+\n", - "| 0 | This is an apple . | ['This', 'is', 'an', 'app... |\n", - "| 1 | I like apples . | ['I', 'like', 'apples', '... |\n", - "| 2 | Apples are good for our h... | ['Apples', 'are', 'good',... |\n", - "+-----+------------------------------+------------------------------+\n" - ] } ], "source": [ @@ -384,57 +348,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "b1a8631f", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+------------------------------+------------------------------+\n", - "| idx | sentence | words |\n", - "+-----+------------------------------+------------------------------+\n", - "| 0 | This is an apple . | ['This', 'is', 'an', 'app... |\n", - "| 1 | I like apples . | ['I', 'like', 'apples', '... |\n", - "| 2 | Apples are good for our h... | ['Apples', 'are', 'good',... |\n", - "+-----+------------------------------+------------------------------+\n" - ] - } - ], + "outputs": [], "source": [ "dataset = DataSet(data)\n", "\n", @@ -459,57 +376,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "057c1d2c", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+------------------------------+------------------------------+\n", - "| idx | sentence | words |\n", - "+-----+------------------------------+------------------------------+\n", - "| 0 | This is an apple . | ['This', 'is', 'an', 'app... |\n", - "| 1 | I like apples . | ['I', 'like', 'apples', '... |\n", - "| 2 | Apples are good for our h... | ['Apples', 'are', 'good',... |\n", - "+-----+------------------------------+------------------------------+\n" - ] - } - ], + "outputs": [], "source": [ "dataset = DataSet(data)\n", "dataset.apply_field(lambda sent:sent.split(), field_name='sentence', new_field_name='words')\n", @@ -528,57 +398,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "51e2f02c", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+------------------------+------------------------+-----+\n", - "| idx | sentence | words | num |\n", - "+-----+------------------------+------------------------+-----+\n", - "| 0 | This is an apple . | ['This', 'is', 'an'... | 5 |\n", - "| 1 | I like apples . | ['I', 'like', 'appl... | 4 |\n", - "| 2 | Apples are good for... | ['Apples', 'are', '... | 7 |\n", - "+-----+------------------------+------------------------+-----+\n" - ] - } - ], + "outputs": [], "source": [ "dataset = DataSet(data)\n", "dataset.apply_more(lambda ins:{'words': ins['sentence'].split(), 'num': len(ins['sentence'].split())})\n", @@ -597,57 +420,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "db4295d5", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+------------------------+------------------------+-----+\n", - "| idx | sentence | words | num |\n", - "+-----+------------------------+------------------------+-----+\n", - "| 0 | This is an apple . | ['This', 'is', 'an'... | 5 |\n", - "| 1 | I like apples . | ['I', 'like', 'appl... | 4 |\n", - "| 2 | Apples are good for... | ['Apples', 'are', '... | 7 |\n", - "+-----+------------------------+------------------------+-----+\n" - ] - } - ], + "outputs": [], "source": [ "dataset = DataSet(data)\n", "dataset.apply_field_more(lambda sent:{'words': sent.split(), 'num': len(sent.split())}, \n", @@ -669,7 +445,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "012f537c", "metadata": {}, "outputs": [], @@ -700,20 +476,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "a4c1c10d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dict_items([('sentence', 'This is an apple .'), ('words', ['This', 'is', 'an', 'apple', '.']), ('num', 5)])\n", - "dict_keys(['sentence', 'words', 'num'])\n", - "dict_values(['This is an apple .', ['This', 'is', 'an', 'apple', '.'], 5])\n" - ] - } - ], + "outputs": [], "source": [ "ins = Instance(sentence=\"This is an apple .\", words=['This', 'is', 'an', 'apple', '.'], num=5)\n", "\n", @@ -732,22 +498,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "55376402", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+--------------------+------------------------+-----+-----+\n", - "| sentence | words | num | idx |\n", - "+--------------------+------------------------+-----+-----+\n", - "| This is an apple . | ['This', 'is', 'an'... | 5 | 0 |\n", - "+--------------------+------------------------+-----+-----+\n" - ] - } - ], + "outputs": [], "source": [ "ins.add_field(field_name='idx', field=0)\n", "print(ins)" @@ -767,44 +521,20 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "fe15f4c1", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'sentence':,\n", - " 'words': ,\n", - " 'num': }" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dataset.get_all_fields()" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "5433815c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['num', 'sentence', 'words']" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dataset.get_field_names()" ] @@ -823,29 +553,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "25ce5488", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 False\n", - "6 True\n", - "+------------------------------+------------------------------+--------+\n", - "| sentence | words | length |\n", - "+------------------------------+------------------------------+--------+\n", - "| This is an apple . | ['This', 'is', 'an', 'app... | 5 |\n", - "| I like apples . | ['I', 'like', 'apples', '... | 4 |\n", - "| Apples are good for our h... | ['Apples', 'are', 'good',... | 7 |\n", - "| This is an apple . | ['This', 'is', 'an', 'app... | 5 |\n", - "| I like apples . | ['I', 'like', 'apples', '... | 4 |\n", - "| Apples are good for our h... | ['Apples', 'are', 'good',... | 7 |\n", - "+------------------------------+------------------------------+--------+\n" - ] - } - ], + "outputs": [], "source": [ "print(len(dataset), dataset.has_field('length')) \n", "if 'num' in dataset:\n", @@ -877,21 +588,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "3515e096", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Vocabulary([]...)\n", - "{' ': 0, ' ': 1}\n", - " 0\n", - " 1\n" - ] - } - ], + "outputs": [], "source": [ "from fastNLP.core.vocabulary import Vocabulary\n", "\n", @@ -914,20 +614,10 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "88c7472a", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5 Counter({'生活': 1, '就像': 1, '海洋': 1})\n", - "6 Counter({'生活': 1, '就像': 1, '海洋': 1, '只有': 1})\n", - "6 {' ': 0, ' ': 1, '生活': 2, '就像': 3, '海洋': 4, '只有': 5}\n" - ] - } - ], + "outputs": [], "source": [ "vocab.add_word_lst(['生活', '就像', '海洋'])\n", "print(len(vocab), vocab.word_count)\n", @@ -950,21 +640,10 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "3447acde", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0\n", - " 1\n", - "生活 2\n", - "彼岸 1 False\n" - ] - } - ], + "outputs": [], "source": [ "print(vocab.to_word(0), vocab.to_index(' '))\n", "print(vocab.to_word(1), vocab.to_index(' '))\n", @@ -986,21 +665,10 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "490b101c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "生活 2\n", - "彼岸 12 True\n", - "13 Counter({'人': 4, '生活': 2, '就像': 2, '海洋': 2, '只有': 2, '意志': 1, '坚强的': 1, '才': 1, '能': 1, '到达': 1, '彼岸': 1})\n", - "13 {' ': 0, ' ': 1, '生活': 2, '就像': 3, '海洋': 4, '只有': 5, '人': 6, '意志': 7, '坚强的': 8, '才': 9, '能': 10, '到达': 11, '彼岸': 12}\n" - ] - } - ], + "outputs": [], "source": [ "vocab.add_word_lst(['生活', '就像', '海洋', '只有', '意志', '坚强的', '人', '人', '人', '人', '才', '能', '到达', '彼岸'])\n", "print(vocab.to_word(2), vocab.to_index('生活'))\n", @@ -1023,19 +691,10 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "a99ff909", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'positive': 0, 'negative': 1}\n", - "ValueError: word `neutral` not in vocabulary\n" - ] - } - ], + "outputs": [], "source": [ "vocab = Vocabulary(unknown=None, padding=None)\n", "\n", @@ -1058,19 +717,10 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "432f74c1", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{' ': 0, 'positive': 1, 'negative': 2}\n", - "0 \n" - ] - } - ], + "outputs": [], "source": [ "vocab = Vocabulary(unknown=' ', padding=None)\n", "\n", @@ -1096,92 +746,10 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "3dbd985d", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - "\n", - "" - ], - "text/plain": [ - " SentenceId Sentence Sentiment\n", - "0 1 A series of escapades demonstrating the adage ... negative\n", - "1 2 This quiet , introspective and entertaining in... positive\n", - "2 3 Even fans of Ismail Merchant 's work , I suspe... negative\n", - "3 4 A positively thrilling combination of ethnogra... neutral\n", - "4 5 A comedy-drama of nearly epic proportions root... positive\n", - "5 6 The Importance of Being Earnest , so thick wit... neutral" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import pandas as pd\n", "\n", @@ -1199,60 +767,10 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "4f634586", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - " \n", - "
\n", - "\n", - " \n", - " \n", - " \n", - "\n", - " SentenceId \n", - "Sentence \n", - "Sentiment \n", - "\n", - " \n", - "0 \n", - "1 \n", - "A series of escapades demonstrating the adage ... \n", - "negative \n", - "\n", - " \n", - "1 \n", - "2 \n", - "This quiet , introspective and entertaining in... \n", - "positive \n", - "\n", - " \n", - "2 \n", - "3 \n", - "Even fans of Ismail Merchant 's work , I suspe... \n", - "negative \n", - "\n", - " \n", - "3 \n", - "4 \n", - "A positively thrilling combination of ethnogra... \n", - "neutral \n", - "\n", - " \n", - "4 \n", - "5 \n", - "A comedy-drama of nearly epic proportions root... \n", - "positive \n", - "\n", - " \n", - " \n", - "5 \n", - "6 \n", - "The Importance of Being Earnest , so thick wit... \n", - "neutral \n", - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+------------+------------------------------+-----------+\n", - "| SentenceId | Sentence | Sentiment |\n", - "+------------+------------------------------+-----------+\n", - "| 1 | ['a', 'series', 'of', 'es... | negative |\n", - "| 2 | ['this', 'quiet', ',', 'i... | positive |\n", - "| 3 | ['even', 'fans', 'of', 'i... | negative |\n", - "| 4 | ['a', 'positively', 'thri... | neutral |\n", - "| 5 | ['a', 'comedy-drama', 'of... | positive |\n", - "| 6 | ['the', 'importance', 'of... | neutral |\n", - "+------------+------------------------------+-----------+\n" - ] - } - ], + "outputs": [], "source": [ "from fastNLP.core.dataset import DataSet\n", "\n", @@ -1273,7 +791,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "46722efc", "metadata": {}, "outputs": [], @@ -1297,55 +815,10 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "a2de615b", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Counter({'a': 9, 'of': 9, ',': 7, 'the': 6, '.': 5, 'is': 3, 'and': 3, 'good': 2, 'for': 2, 'which': 2, 'this': 2, \"'s\": 2, 'series': 1, 'escapades': 1, 'demonstrating': 1, 'adage': 1, 'that': 1, 'what': 1, 'goose': 1, 'also': 1, 'gander': 1, 'some': 1, 'occasionally': 1, 'amuses': 1, 'but': 1, 'none': 1, 'amounts': 1, 'to': 1, 'much': 1, 'story': 1, 'quiet': 1, 'introspective': 1, 'entertaining': 1, 'independent': 1, 'worth': 1, 'seeking': 1, 'even': 1, 'fans': 1, 'ismail': 1, 'merchant': 1, 'work': 1, 'i': 1, 'suspect': 1, 'would': 1, 'have': 1, 'hard': 1, 'time': 1, 'sitting': 1, 'through': 1, 'one': 1, 'positively': 1, 'thrilling': 1, 'combination': 1, 'ethnography': 1, 'all': 1, 'intrigue': 1, 'betrayal': 1, 'deceit': 1, 'murder': 1, 'shakespearean': 1, 'tragedy': 1, 'or': 1, 'juicy': 1, 'soap': 1, 'opera': 1, 'comedy-drama': 1, 'nearly': 1, 'epic': 1, 'proportions': 1, 'rooted': 1, 'in': 1, 'sincere': 1, 'performance': 1, 'by': 1, 'title': 1, 'character': 1, 'undergoing': 1, 'midlife': 1, 'crisis': 1, 'importance': 1, 'being': 1, 'earnest': 1, 'so': 1, 'thick': 1, 'with': 1, 'wit': 1, 'it': 1, 'plays': 1, 'like': 1, 'reading': 1, 'from': 1, 'bartlett': 1, 'familiar': 1, 'quotations': 1}) \n", - "\n", - "{'': 0, ' ': 1, 'a': 2, 'of': 3, ',': 4, 'the': 5, '.': 6, 'is': 7, 'and': 8, 'good': 9, 'for': 10, 'which': 11, 'this': 12, \"'s\": 13, 'series': 14, 'escapades': 15, 'demonstrating': 16, 'adage': 17, 'that': 18, 'what': 19, 'goose': 20, 'also': 21, 'gander': 22, 'some': 23, 'occasionally': 24, 'amuses': 25, 'but': 26, 'none': 27, 'amounts': 28, 'to': 29, 'much': 30, 'story': 31, 'quiet': 32, 'introspective': 33, 'entertaining': 34, 'independent': 35, 'worth': 36, 'seeking': 37, 'even': 38, 'fans': 39, 'ismail': 40, 'merchant': 41, 'work': 42, 'i': 43, 'suspect': 44, 'would': 45, 'have': 46, 'hard': 47, 'time': 48, 'sitting': 49, 'through': 50, 'one': 51, 'positively': 52, 'thrilling': 53, 'combination': 54, 'ethnography': 55, 'all': 56, 'intrigue': 57, 'betrayal': 58, 'deceit': 59, 'murder': 60, 'shakespearean': 61, 'tragedy': 62, 'or': 63, 'juicy': 64, 'soap': 65, 'opera': 66, 'comedy-drama': 67, 'nearly': 68, 'epic': 69, 'proportions': 70, 'rooted': 71, 'in': 72, 'sincere': 73, 'performance': 74, 'by': 75, 'title': 76, 'character': 77, 'undergoing': 78, 'midlife': 79, 'crisis': 80, 'importance': 81, 'being': 82, 'earnest': 83, 'so': 84, 'thick': 85, 'with': 86, 'wit': 87, 'it': 88, 'plays': 89, 'like': 90, 'reading': 91, 'from': 92, 'bartlett': 93, 'familiar': 94, 'quotations': 95} \n", - "\n", - "Vocabulary(['a', 'series', 'of', 'escapades', 'demonstrating']...)\n" - ] - } - ], + "outputs": [], "source": [ "from fastNLP.core.vocabulary import Vocabulary\n", "\n", @@ -1368,60 +841,10 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "2f9a04b2", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - " \n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+------------+------------------------------+-----------+\n", - "| SentenceId | Sentence | Sentiment |\n", - "+------------+------------------------------+-----------+\n", - "| 1 | [2, 14, 3, 15, 16, 5, 17,... | negative |\n", - "| 2 | [12, 32, 4, 33, 8, 34, 35... | positive |\n", - "| 3 | [38, 39, 3, 40, 41, 13, 4... | negative |\n", - "| 4 | [2, 52, 53, 54, 3, 55, 8,... | neutral |\n", - "| 5 | [2, 67, 3, 68, 69, 70, 71... | positive |\n", - "| 6 | [5, 81, 3, 82, 83, 4, 84,... | neutral |\n", - "+------------+------------------------------+-----------+\n" - ] - } - ], + "outputs": [], "source": [ "vocab.index_dataset(dataset, field_name='Sentence')\n", "print(dataset)" @@ -1437,67 +860,10 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "5f5eed18", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'negative': 0, 'positive': 1, 'neutral': 2}\n" - ] - }, - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+------------+------------------------------+-----------+\n", - "| SentenceId | Sentence | Sentiment |\n", - "+------------+------------------------------+-----------+\n", - "| 1 | [2, 14, 3, 15, 16, 5, 17,... | 0 |\n", - "| 2 | [12, 32, 4, 33, 8, 34, 35... | 1 |\n", - "| 3 | [38, 39, 3, 40, 41, 13, 4... | 0 |\n", - "| 4 | [2, 52, 53, 54, 3, 55, 8,... | 2 |\n", - "| 5 | [2, 67, 3, 68, 69, 70, 71... | 1 |\n", - "| 6 | [5, 81, 3, 82, 83, 4, 84,... | 2 |\n", - "+------------+------------------------------+-----------+\n" - ] - } - ], + "outputs": [], "source": [ "target_vocab = Vocabulary(padding=None, unknown=None)\n", "\n", diff --git a/tutorials/figures/T0-fig-parameter-matching.png b/tutorials/figures/T0-fig-parameter-matching.png new file mode 100644 index 0000000000000000000000000000000000000000..410256ae444e97ef0a800f63edc8a041daa7a10e GIT binary patch literal 95576 zcmeEuWl$Vl7bXybdywD`!4n9s!QI`1yStO%7Tn!oaCdityGw9)mmMOnefwwsZ`IUP zLw8>}ex7sg1WHQ^!NXv|fPjF&iwN_}f`EXZf`EXnLV*GQCE4y1jykpI}`1XS1w2L|m^0cwwJ% zq&|#6MAJ{CeRPrdieK>HL=i1s9bh0Be4ZVB%^I6)0}iwFN@oVv_M@sCdZnYNLqbA| zinFzTE`#~uGynTOsAbeh;h;FrHl!am>&eFtUm|a}uTzcz3v+YGi^5*u|NW$cK|kb! zndkPC@PPgILja9K2!TQX`t#$xN08pF`2h^TmTCY$oGH0vVzr)34;|hH3N1Z>heTjW z{` (qWv}O@u=~* zMWOb%_4%n+Xt0w-_0#X=3y`(p$Ou4uKN9)1+4LK5Bzrh~nvaJ{TJD#(+i9L>{p8*F zQN-aq 7NnBS09<8MzdO1AmezJr*k8Vjfpwg3I&iA(*bktEiY1B-ykY zd31Sviiv92A6z)y2t407*e@103b>7zofJUvyfP}8$Dq@6J0D_}uF1hl`0;WB_-P}2 zlb*}D0ok_pXI0YRA60_8t7c)Q$nOcg$KPllSnnp-@}uM%0r!jccw@xz^F @%Q5XAtjVSK(YvM(qf7Ik924g@JN_?wQKwlkiVw#4kF@_ zP?Px<-1BRNf6oH~{T51k0!!N}?tkSl6L?2)@<(R*f2EKI?Ei1+C&&IDxTG(xZENBD zA=X&S?XIbpv5BJ@Wu(bq_q%BN(Swg6ZG~}xeFS!QtVU>RLr>r?H3QArX!lV|5etTE z#X%ZSw1c2<3Nq`hDF5QcJsHTRvzWNn<$NS(7sfW18_94oo65?9N*V_hf0yl(w-K5- z=aT06Ep}G>+?aMFy`Ag$SY!iX3m&@ZS~?Q^)>R;SaOWFGe!0T>7RR-UaR63jT@_`A zjv`0hd+h^7OGA&P5CIFPZQ|m`3=#iZQD>ZDaCJFyi =#@VhEyUGS?4(AY4n%qI`27^wQ1gUPj!Aa%NQW$fAULMcD;wPFVwXU#WwE z_TI^efQ$1%TZ22Vx#sfSvgCQeIBqvaT+K`e;Hu|De#gX9JTZl(sWXmK~xctD6WZ z9VvirF~k*Ki!>#Qa+Fuum_L4^t9ei8T#rbcRB|H8B>d3Qj#V z2>N~}b_9*(l7E+RaWdCr@U{R`OBoL0p+Ve)P5%tNCofOYdLmuwnn%<>+o}qtyu8^D zcKDFJ)0^GTf*5;!erb}&WdvF32VB*u_O~tlP$}21b 5V(|bO;th z^3KW^W(cneO|ek?b{0T;sm%>ekdPZ4=6mpkNy mQ=Vv<+04?iy33MK&)q?$h)@l=oFB3BtnWDYs%;z19P_xvyu) z)3Hv-z41^E#o^NJ{Y*`37PfdB8ZxX&9RaT{KdHUNV{>TK?C4^K?dhUv6nfEuIIt zBA5%7O1e~$YT;@4n9J56J^Yrh;1WH@Q=-TZ7f$_)x!>BpRKb4K0_`=n ?Hv#>+ZZmEYUw zBRR37DWi;QDpb2yj@3`T>ozN8@~-N!f!!bL9*{QTF&fmV#-2{+)gPsc#AdaD-HNWn zz;xNPkv95KZtZ?sG9NXxh6oQWyz~BxWkk~e2|{Sb@Zl9h@Hfj#(&pYo+%t0YEJ^V0 z=|nqRL$)Bf!=N&ymE(OVN $II6^4>vQ=bDTbbKxWfwY^JtJUtXp^GmvpIk>*d zdVSVAK7(lL*tph#r=$Ix@F&zd4}0y)hpqb~4_|mR7?PPk*uYyYzfoi&1JWK0NPC47 zB-YozY0n}KMnm8EKBzbUHt1F2d1XtE+;=GvUyj*{DV^YBi sRn|O zsc}YO7mjSSBn1JDUSDt8V?8|2QXCkv6cYjc88RO}S2$hvXar0@Q|=$k{y(r1QJrV} zjG3G)xEjH@4+k`RIzl4@PXYeIf;pLQ8n2a!lN}-3(O(pg4`>BlQb`SYe_KI+0T3?D zY}9F9-<)q3TMS)9fUr4(a+0|E#2M#~@8+OFrm7Fc#rs#vvs_qBEROR?i3 OW@Z_(lJvRrJP;P*yK!7q@W_*_vdqU**&(6=xN^Ef0i~KkWR!9_ zq_(|`9djJUFYJ~70J_ClvhF`v@Y~I_wL@o5WekmHeBaJ4QAfMBm|}D}D8WoK+L6lM zTuK!1RpvB8-{+|2n=A~}+ZCyTyFlcv3-hRZSK2X?SS%A}t1Ja@Y-ykk7Zw?5IIt6% zavPK>xR$ocUr7==-rQ+Q&s+0MjaPg_fM2BMuQe QfD{4iwJ zU?VVuqx1)Af6RH25yfx8i}vF&o3pPZ{8&KlIj=u@^AH`Y1LGkxc64Bs%x=3zeTF?F zG(tp%Ss%8qh9c9o$0mim5^ZQ>erf(r{>`!n>YL`8o2*dvp^9YYk~|6Z8hZ`7FZm{} zx;cX@2?L?gn_IG}L7Z?M-XR0!Esx*!SQ27&D92({A&pFFU?h^7y}9(@t)}w^lu!t~ z3(0x7&8N6^B*TA4fLHtkT!-)_ukol&x;1Qj@AgurUEOgHgIqt|K|f|R!o(I{i3;U^ z$FlEa)UixHDI!_)+rNHg&tmJL5_{X |!HWk27DUSx`;c9mBxr_|&)tQkv83(zV^PBW4wUgs9sPAR~^ z$K@po9jV+9|DA5Eu7XbsPJwsJ>Tt#c%cx=7+{<5%g%3Mch)tFEN#Y2R;*BJumM7Vs zS6CDqnaD*6e=a>d!1O^6wi@M1#&h8SI3d-l`zN; `$Z{O^jpoJl`vU{^OAfJNpWg(A;ZN6Hvrw`# zMr($@%D+u;IA(64xFq4 lJn(9ns&yv z7Y=L(-!?x&c7F{nN#Hu>+i)_gM@EIYf5t$ zF%Pwp%_WrdKcO24v@!`&S}VEOF;s%N@NRdc>QstThV9G(@x(TKwP6ab zT+5M%8cq 4Z?lPK3o~oDi_JS$Ns0oC0K6@S3{eE;+)M=nwmF6)YZ&2 z4wIEJ`%cxwmxk2z?zYSRvbCA@OM#m$pImjF-iK?>PFwLsIKoTLcL^t+IX0Avr-lV7 zP(M~9G9PRV1>uAa^nL_ y%uo^&uW$Z zOP3;S@@4&53{b2Dp+=?Dh!GPfNPZ{D58!+EIi6B*5G5|=dy%RIC<>054qB$Y={CH2 zfkyWEbAd@R0!%@q)sAR%loKvf-2ln!!%F3OtX}Sk*+3_4I71fCiWX)HBVFVXXVXEg zF|>92DW9IOD2h+PmsJy;Z|wWp;6CjiC_`z$FX3uQzh6gRthe8m6LXXBL%SwOq2yS| z?``y>L(W}`D>+V)XLxJqRA!6$+P{YVE@S^8K$StH4_qV2b R2 zcqC~(9FS&9tIZ(=Mj~AezLQrxFEkkV#{{NA5p3A6>1Ef-Q6rer7rZj%y2RUSj$$=! z;0+NVk9tyAB;4P*7@-k@B$y&f6;w#s!!<5_OXZ>%?^f6kVTDYtIMtBl%o!V4Vs@!2 zORCbAD~A=LQ}3Xn2BpUECA^fRDH %(V1Tg*(&^@!sgQZZ! z*5XTGjswslGD4qp&0E@M#x8*i*gY?tP)N0~V8FzzCw| 8uwTnDTODUJK0E=Iegw6h`H&wC{8rUNV;cr3v%N@P>3>0J?X(-)A$8 zjBqRGZgYDD^F7{!1S=-u0!w+Q>g`E18XRV4>TYMd^@g2RPUC=j1-e>02jA3W&E)%& zu=kizO|=2+Pz^2Y9-jsB tt zYqel;H!o_p2%(Zxp_`$BbsFp(`pR|qX%cQ575wNWK!NdYNJ&XiO`zHq`Rz@CaqSd9 ziTmNC^L%@R`~INPiQ{QEFU{k2GtP73wh3!n6~b1uj(JM8kqprUb5@at?BQgh)%CD? zW^Zq=P@gv$5=bv=XrQpGw;TZN>2C<85UMToAsbL=(AEC}2Jra4(GJUp@$~u#%r*Z3 zHUO_p;(_K1p4(0Gub2Par%VRk@#W@81Pb22p(;jkU`*hL&y^?n-#ciMz&joI1Vg{E zslOo#EHWTO(TSKQ_dj=F$lFx8(4Ihyxqf?3;ELs6dvm+rukV+(F0h_GNqMNEov)Dq zS1T$29A7@072)qk!@Ux`a&=oho|crfJnzq@0FEo{%R4t(K>B P9!>Ad K_)=W= z2j|@F_(^j!V~)%2fYVY!BhQO0e3?;$vo%cMLmWVW>bz}@^q((wAURc6p3|jq_Kti% zTIRa5Sdw~rToC%!{B*ZJS(V`C {@T}gRW7LBm4yRqVI3Dy` zHebf(8pFPS+X!4xJ}GdG)fZK)Kp+2y$SfpaTF<)+-y_yC+%G*w%71XPx?JpFTQ;4} zo0bxu#FzIbr2m`^5f~?PSULRy-hNBWd+-*I)DmOHPp%J-+@9A 4=gq@{*?9&axW+z4>=&-WxAd$P#X|kVvZmXE5D&wypV_< IJzy!?si5^g I>ZcH4T5%hwP4xmatYIc&h6;nP_#JA zG!5N!d6guz>;%u9F @8h3S~XgE+
BCrc%r zb)2x@Mgm3* aY_1i{du+oWJ6?zfUG zc_(z(T`t~nR-uoTV*(*qE}+^Sy~462{OyA2i9jTR;fb!)-0z?6k27ql&-L}*NfdyB zos8 Xi``gxI=Msb(ReaM{{EhGlHO nmxZ1@JUEaqJgiFk@1lg$YhE1A!bn=>{}^-87c<{4^{wVNM*sIN&0j#m z!|jo||G7i@a%Uq?XyL#62hJlsF@1HueegebB42duY$EIMuPx?~B0U%#G5_H19T`U$ z9Q(Bu8z5 fvV|D1^*d<$izXn@8zejuNpIlk{wot8(9x_vV+DHV zi2uuL;XI097ZV2E9Z`R;`p;_7cvgj9&kDbJAz6AKcvS#ePcbScLnAq;82H}gkgOaN z(Qg?b1WFezaGm+~VBr;|n$4n5Zs(N?)sjBv IKb!#a2ADwG@+%BiX668=6Cm))*S#^yFmAou1B`G#KSW7! zQFIU-0JRGU`kll~cvw)KakhWk@?dzfeV{&LIY|8}p>33)CaQq!S)lbwzx$tJQj4*T zAc=Gac-6`%3}dRnFCmN$0dl%u+Li$5yKP9k5Qh>0SKYxFKm!LKZO*DHlJrlxu>nS< zL!f?nK*E{?0&PlpJh~dqP?9aFcLkYrYI(1IXh_cshj}Dk^tr!xSOhr9TPTtr*o ol< zF#pN920R)=IXUnXkKE3h+*B5FV7 (UUE9J*8Kd*<9FCzg9>IKhs_2PyU zm% `0axnk(jegIvEU)#Z(Yr@+ui?3!g)d<37IfU z3U19zw+sFR1VA~wC;rQzJT49Y^etZCFp}xHjKzXc2qj-y0kgp3$3K)AcpdEr &{zS_2Xk;c#$w8_JHqN9jeH)6M*nx=R$X@?7aMIYyFR#DJ2 zgF})T)aTuVg~M3>Z^$FJ&@<{J&7Q1{&?BNPlB!*DE0YWvVfia~X|1&l(=NF)cCxKT zoA#vAGf=J@b;c%h155XoUvHUQs;mXf=IEOr5&PJG+vD^HXdDX9H^#r{&;| YT`>79en_Z%b;WD{^e9t2WSeGM(r_^iI+rV(*feP!Y@_UmBoxF27UA94GCAXZyN) z)~WD0iYPOr&Sy=0o~JxuyX6FtWn=dwwlnW29shX3bRtMTyFAad!?|%n+e#Ht1yL9A z>)KX Y z-Q9CycV_I&sIX? >la(p<}Voa!ZB@2aGa;n@RQ+@-UbxO$!U-0jZe+d ziV|L>Q|t`b=!d#|82oO?)*au{mIApXmXEB0=El@3rmgjh=D4cea?Y!!J*=I&X4tBt zPDpz3KP8(EFX%ZI;DSRK3frlN(rDo<(Yx~hkoIeteoDsMl222)BGAIfOl`>tXswhN zmQ$Q`Jr27Lc7d5kja)yj_hj|*?8f&e{-r|7q` jb5qd8|)}z;&u;=hV80BC>Z!(#u}IQV9Uk5XQw*4n1o*h zy2BT1?7at!?bL8bA}W9Wwf=_Z!YsDBy3y}|=w_}In>=UUEL}vMi4IiYt@%zBYiN}E zKoVE-dcqVt7F B!$un{DbYAQ13pkw97 z4T|5EC?E4BXFAVkm3jGxFbdT7Nldr+{t2QbwfKg}*$K2P4^WhSZ*|2)cd=_Vm|YcL z2*nBZoTW@xtq8$7f&DVMIp@s$;_UD!lj*tg^c=rP)+q7=s}eHKD6(#&12!8-2Kzlj zNjAt{Nx+95jf^(Axb*@#{XA=mqWO<;*^~F}70c(u`z;rf(*1)1OMx6=u$>ipH~tv9 zm*Q^} (B>WME(ydp?n2{-TpsAYdk`YkIu8QLrC^9TafAIDJE;B!izMhP&c8 z?G#&6X_GSW3=Pn(Ck5ZXtGQQy^VM6-L+znwNAZ3(C)?Kk{FF%)yn4r-M2mTQE9Wf& z js4WHT(AdZ7MLv=*LTAx0mjBU=!{GziPl=C~wX*B#9 z*IXF;FZ)0ujSa4xR>PEP`=n9=uD<;$xcng$#@XIh-`RyUQgISFhEmK-kT9>SMK~P} zy05A33HR302 YvR5zGf$w~Qq&LsNpu=XSe?ls`n z_5X+w8&Hh=PlZpb?{4*}($bjzayapC$7?rMwBfjnt5eGXX^w={oVJZikvm9fjO6OJ z6*W1=QI$z21l7hz#R43c5}XXBDV;(iQ`OT9_lRkH8=r{}B7Wo+Y%cntuET6C?1;E2 z`pI=uHuJ&_aS5-2fQP>=Kvb3V>>bEt8A!<7B{C9LNGx CpRqUTM zv(YiyviWpR=qeW%Zk)U!QvEP8T3tDw7P8J~dW~1;iKq{z*V_*#0U(QL82wr^yg*pH z_tg&pt`1B8F2B9pdS_b`bqN}tmB}ETNu%?ofyUzI73_*VuLGG~fya&tvV&{otdoHe z^^n-Y_rm4YH# eC8__zRX$(C2e*jdEIT{ zM1}d`Eoxr%Msgtf4NE+!M6ieJo$2xg&8Y587 OHNHDHX%mw)!bSEbN#V9GH| zO_A+GP5(i!lfuyg7S4&+Zh0{Bjowi`Mz}ZG5_zl#{x^};GAJWj2^F48>cWFQM>9KB zb;MQ6?oXbew%>(^YQeRrz-e0Y8d;AQj8vgCx{vz|s1ZW3;Ca?1i@s@`kyBofG#Hns zSiL)1pg&_;kBI2WHwS3SitXx@ZWdL#f24**g}#OCN_i5)IDH4G11Pz@v#hk&U=6fv zsq&G i{CvV^P%D~UJD^@_+PNbYF;Bs;s?y4N$jB9% ztvC=~&TFX}T;%U0I~Ijp@1+O`B1y~}c92@ahE5%P^k*{_;`oEYDge{ttM_=+T-=
b=mWB%B<9I({`8aQAL)B9mdpY=Y$Ho4 zN+a4nBTH)}a_(6+Pul#z@UxuLP#aavu#<=%;>F~|{-|YSF(Eb|Kl0;UOa0lJfE#39 z9fk|mmOr`MIQx9*ql1waL%YfzzO)1HjR*W*gYLl0;nXt`%`)6DM3)&4K7!WUP%=Sb zk~cLe4(wms?@v9DHEr1}lMc0T6y2Lf`{~7%EDAl2&{IyaLmAv@ZEN(Lam8dGT~Fi( zk1M}8Dn>6;gD%uhkonu{ZAU`nm(TT#njU6XEfO|Q6R>XK!THNL&afXMm^dd@hLo)I z{DCp^;a}{_Wisy1I7JNc>lJHJ^-3D!Rnc1r6RoQ(oef}DW>Ft6`05Ws$4sdxKGtL% zhmUbZ_Uf3XHBvNMyU~LSW&PnD(-|o~Uj;nW@g|dN=k+I~z#;N3Z1+UXZZnH=K7S`D z^dK@jlxh=UtgeE*Z9uxbpb>aT5jbPt{P1d5w)g(^fUym+cLfQ7E)iQvj*oORE@9Iw z*m-KI%MWICl_DupqG6j4KcaK@_3~+2G!nTyO&`@gF9NSL5P2gk3GW;!H{x1
gVWg6SDR-$EzXIHjiIX0I;IAJ)o%X&g0`{#Gcq)y7!gxDvs<>vdf9e9yGKD|HCn zF~XgM`ZTEX9{}p5iSTfZlXjPoB5b__YyQC$a6*XkWqOV}6Y+?^24QTtc-WNF5QRG1 zv+iE>U`=3i`eKgSV=&fRYz)+h$&EHz?RfLl$cDxKa-MhZN5wSBDFY33;ohOQZuWfy zb6sv-DUC!Op4PZdYWetxKP9f~R^_AcHAcTwr_HP#8V!{Kgt%ftvSg24(Qe>pTXxOS zw9_8>>+k%DI_=H$gdp47iS*g7#PB*I!cql;btr4;=zx{uuD$9Gj^#$B>Zfp`qaJxH z#X1aLlYo{j4|%^6r9pP*DOc7OV+K!BpH|9~^u3itLN_IN^6Ak1gH)TaK5mRah&yM- zWM%Gm)25bE{?d5Vl5BRV^$@aORU*qLOsFnPlYL)f1Ul(%OpA_qQ0qo^`@k&-5*aPk zrwoFn{^_Nqe8I2Q5S8xG>4|sf)sc29ql3FHY-J0FAQHRu&rzg(#{49cCRjuqMenSF zgr@tYnVod!%T&b!TDpR&yPOkt LUGA7r$dNr~$(6<(*7(-!X`&^;%TDay zTTMND_)wZX=|2#l8B3uMiri-uAE4TWm&;(!TPdO4o=SM7EGWQxm{bGTE4EH)k&KL) z6>qT#3LX6#RHB`1dT4K+zP O09?VKCZ&G3@%#DTr*2aWTs+mP3Pa! U+)%iHE~hKt!}9fruSrvUr-Pu=XgmKgRipu z!SGQdfr&4nF
?s7-SC%f)^Ew3&Yg18uimGQ?|UKhnvOr`$F3E}G&qR_G} zW8{K9K8lU(M0*Enqk@d^T^Kf`<;V?Qttg$3s&DFFNl_HK7%hlwug)4@e#NCv=d!0r zWm9m-g_f!JI4D^GtVACw1TEWZHGCPGt~lAIACS)!6?I3?_Qg-&jP$YxyKIh9%8L7O zV?PasK0nbF`9KC}|KW~=W(;UonrO`*U^O_G9~K)aSy^zn>EVO^rqdx%BuIw+(d6!M zd@Ds{gU8R&F&FV{Y8UmLS=M9VS46oXn_Ane&n?s-yY6@=Z-agChv|H0T+4K{G=d|F z(1YQWJ0d9L^i#h`zRn_wd3<=h-7iTO2i-ZSGZ?)2noLjgrLal(GWiaH*1o@rJgop1 z`o!SC+o11>>Xq@x@MJvXpC~g1h@FYuD^HOs^!xOXVd$VA7P5i3!eFK)qdz7ka}1E& zMM5U9?^a;$SsN%?OPPaz)oC1I{1DK`toGn1F786HtG?vc6pHeR2D90Gcu4F+h&V$h zJi8U7y#whcKoc!XC6{h_CN_iSdP*!cNxFDDw~pvdd16iVhQDgEB!~XjCg$oFd5h&a z8wvYPL(PcjcbtOrO_Pa5CJJ3&>&@rGA!^7-u89L|a0byc?ci<<%jE{V*~pau{YNI6 z!N=1bStoRa^SR9k;aof`=pVB#b8;(dz@vl jcb?Plx~58PbbUMiEj$Zh66~&^}r?O%g=~t#08gk zc+lS=v!{HIk6BJwQzmO;59XGDN3DXO{N0G1Pxu0=xX;qlmE09b2HQzo=O(7OQX%Sn z?!hsYyEb&Bzf)?~2;G{3F%yOaYhunvBLv*Xze$Mq7o|N) #j zk8AZoVEEokqD5gKQyw2!-4FK}A+T^%!zW5CIagh1YnTZgJQ5abVn`0`siW6I)UI>H zj5*knqPQ2)Ehzz_MbPr5&-#s$9C#sCmg{TTU>!;6$xZhy39o2{a{bBgz|Jt>SAt28 zA|wsEBs(?cyxXG04GZe`LtbOqeD 5L0Wt3y&9$=b+KhqIY Zw`ei#dWiK&)u_xMagka%q6w *}7*C1Xt$T_tt-;D&2n zjOlzK*YFsU9R&*;2p20y-%-$tAPVhn_2-ri>t{mR@?GTTVs_z1lPX4hPW%e2{~QY_ z4B}ZD4ok$XDI}}D*VAlvxdc}DIDjWHDo412dw-;P-0j9`dE7Fmj5xMdYSW|-$xca^ z*Bmx%m5aN4%Ig+TnoT)^llPA+nam5kt5TUR%G`#;Kxwzkm4U0l=BPTWoNThp5>Z13 zIGZZ0AkbH+%cAA3wa9N2PsSo^c<{wpm`s^YuJReze9uTUZuOYyN37lu?;8gvk7VPC zeb+Tq-_|`gRejNCxRm<69=m_1_^hQ6M>^o$KICbWW5*@Q3ABQ%rp>1_(ly3t?0#3v z542Bzw@CzzIip>xKzPCw#?$5rf >J19r=Gk9kIgq0VbqT#&t8un zmenT*mtm82MBHy_h=Og9eyztuVDReBiayj($H&KY&SCx#4&u1?UchN+x5>Q5)B3G( z&SWGuRbXQ{8!6V#pD I#&AT6*gmm; zrp2xu&ut@*&3DeXf~}Xz59pI;Oc)>4Ic&)|`2LM9hriU9_^qATE6{ tLR{Y`Hng)rd!v5`uo^SF-i;M$tE}!6 zMGXjts+mE8%`-D=auyn>^jguzpNy$(g#2JBjj^f)$UcP{s))tvJ1>;j+5w~26 D9to7ski=>V$rF`wq2O`@s9X6&7Ksejirej;k`K)mtM(h(i3--B6slu#Jj z oQT_17 z_9 1CAT=lKcE3&C*v$HAV&KswNgD2*D81 zFF)9}_T)8xlJ6GJRTmU1GK|#^g&SO}SP65|MN_&63>qATniI;>?buE{DMCFdz=T+( z{dW<-D*@OHYJiu+HNNPs97^#RWCGfg9x^O3SvzZL4?{JLUFg_F6nu@Z4n*7iU@*N; zajT88V_(DQ&_$m#5*>=tb4N{kx>-Xr($w5xm9N%3e~G`&AUo9H`$D?wAUHU+Z@bjo zFIg0?7|zreKzz}FRnN{3!nB?@1>QIGHR!x!bK+{YGdQ3TA>U#znVD={g^*f3czW0j zN~IAgWk*hs$aQ!jc@A^rz`M=xx#_}a^Q>0OBgB>KW^fGA<8+~j+4JFB>*GyYPlaYj z|MjFN{&TJ8b9*ai8~}a u4{Rt<+ z1?jQ^!gvz%TR_Gi61yW4dnSNkm&C|s u5iZ_T);!xDuS#{fxX; zzc{>PedK^{qF3mYp7C*)I%Y*b;Oz%GaFfdWe#Ku!itE7m>#OHf`iO*qpmYpIL26WB zfdmFT FGnfc`SMFjDkC3n*Y(t zQ~y$&x_l!$xS VqVU1F+!{h>{E(eE_)W)Jf%&M}-f&h9 x$Z!y?1fjjs|DmaBu|ZUKmFF-u;h^ZVU`BYyiKesCxJrXiwE61BL` z=%)hqV+UC|w4cES=^WPa@~2&hjW=t!GCYn2;a(d&)M7s@*&;EyYx(slJsr{VH1j zs-Ty#1G}S^FwtrRVA0(u$x)8jlR|zRrbK5{GRJOxO&p*Pomo8UvW{AauM^&4V`3a| z*8VCy5mQz^_T#oi#yb`Ff1G;#dhLQ8hD$hWXoO8aP92~}lCB5Gm}^9$PPrReZpJ2Y zYiPO|2}u>g=#kg`xt`3rq*Y78JSXk@6{Q$>V6dnaI)d^mwz_u9Ix7^(B{IkKXC|2M z28&DMbDO=~DmB*$53z*XiYruHMSS!$7r7VMRTjh8PTv1++elvp-*a#{yZs2mrI}zC zKgD{^oMJZ|-G82e=}LCeDfN6*J);Q#02a ATOn!csiMBn8DdtuW1RcKAHPb(Wi{=^Q zKlExnpI)~PaswDVAJbNzgSGU{ {`D7@l{E0g|568NXnU z!eB3I!O$}e`t4g~;~-%rj8?vsp)H&NE#k+~;bavhx{ {Xi1CvV)b;{$7s6}jbvd}rfM_#6qQ*d6HV=6&^m({ZrUzXAxe(m(&L@Gek3Nq z`)}*^G|WLBrQpgVgBF(wn8()UXZH3L$U}q5=jLy&qmnuWy`HXG@wh$3pMJ)3Xth81 znpXW-Yz-Db#e{cc-&$5{NV7@^ZhCugSzg8oG}r t*R{Puik#3If>Jq&mbqzo2#y14P<>ZUvLyQbV1 zU!e^h+nsAX@1D^6yJbRDvdy_e^XvoSN9}G*xAZwO3k%jc65vUP%&zO(OMb!-ZG3$Z zo~R1$orS?Tx)o|Mc4JiNNdnLZm+{YPA=|^3Ro&?WTt6c;dgxg!9E#3;sp|FgdULHv zV_VWy(c-3*lkWoKipxjyAiBrPJ(=z0`WVw7X @K=y;syU_Gm=q&U;j?`$y?mWYBygCM2HR97BpM(0>mh1?O@o^;(w zPp-(~)XU*x-1HUqfK5M`p@M1u>l~1@DPA>gFo{=y(v~mjkHGGTLie6zd}w(%P`6F_ z4>gL>8UHvij1$1)c4~mMSCVg>CT*6BXq=xc%=cP^`dNVQ=u?6PrPGH9URE3OGE(e( zCH 8MS8U>q%F~^Gc}ENJXCiEM{_mSFJ7x%AZCs8b5YN zIPBe=-nv$}>`mHHmf8dt4{{&IV#XYE$`glIhYTz@Dqc{2s<~V42WUnqD9rl-))a zQ)SXGyYkO!w#+o}rR4<>!dyAoLa;rUQ} zWvS&j( wd;oxS^_-^9jx1NJi8 z2~}dKaZ*<%9MN4jm7)%11jO%^qAF{-c3nzKUlkL73*IiA$~0tH-YEC~bYrQ8U3DOr z*iDn70c3jsj9;BOhSdTDJ@8bGv99}5w{g8cMJEUqL&dmYSL*u0czY^8Z|S;tXtN>{ zsEZHf{q2|wu(mh|TsBP>8&Bs|`O$LKdk%Ti_{PmBWEYDBLH%)W!~{Hjw6AawJ*E%X z*Cu4Tw(9M7%oZe80pKVrm#8COfT^%kl;v%cx870aP>g<@*j6sqLHi0Dp&m~V#d2NF z#M^|Td4rtLOA*xC*l)fR_ya}7=by#?)HL H^@iHFh)V^EU_jl`NNh~#W-2 4CEl`bznfwGgC$!5DH0*by`M!ehS5iYIw0hr|VX(usBsG{sN~B*3Cx)$7g#v9PK0 z?Krsv18N=b_Iq;Oxp=V8pP5Odp~3f>9revq_8dSrlpj?&9`=1X2ldl~Q$nH6O5IPFBffal@ODXs z6N+^b7rMrUSMAk$MAB+AjHDr()rVKnX*G^EZYH{2{ywyv9z(4W0fUTn?DB7LpU6F0 zEzFKdz9d|}>f8tAM2ijm09RkSwA9ykvNShVy!u!-Q^w_NYvG}I>58qmuhIdAjmXo} z@ZnykJxMry5z3B|T?!Reuz#MTdF~0x_*$nqAOHExK`%#Q837JMKd6Yd^AyjKX2>Ou zLRa{wR91SNpE_KX(p|H#GW{t7h>}Zda~DrmwcgM?Jr*5WQsGJv9(7EYm2YlltdZ_%rp!C3|ASa zDrb)oz25s7q3*BNQ79R039)QwFjZ<(;&H6ttMbzglnVD#>l?m4sD^n*uGLdsLPzSw zCCk`BAH@Uu66J*~5nl#_Z?BRP#nNh6UCR<>6}Hytt1I2Ckmy|*A sIFE^cmBa*9_1YO=df~k9Wye{Rs zU%!2JI-4UO@stJK8t4D1P~P+}%`gxCNSr4^Jw7n1De%NpHUp( k XGhJpb&ypD3)GpBDk0jAC3NSphNKZZrqd#QC>O!K?{9T`Jak;q zExPtREB(flazFNMLnxX)y85pURS5K}Uxnr}L?9-8?`7~9>r#q%#BVKqSc_7oyA(}d z^?tgEiA|Qr*UX))Aa+wHL=nm65}}1o8Q3wBm`A%$p&(ZiYi3E;)0JANz;=zzqglaf z{j(AD-AB-!S#FQpycO<8H{v`0=j~PzPczwGGJlujk*BGMw5LX5p)j6_*o<_E`F`AA z3_1fI(NNnk%pe128-1&sNCo)hKrPPZB6B$w=q7Wo;Zy${#CQisja7+al>t6>+xD@r z4Bgxmb0==DGB!3ZP7$#o|Da6|##nqTpd5IH5EO-lAB;}(0R*@4awM&X`*BZdrKQiL zzp*#TA?*3CxOUm)M<{c?aV62Z$gc&61L=?;KCma=^@CS4f2$z8CPZ 7H=##2BPjHFdko2;@ zP2gwtr6)5+bG+i`0TB76xi$oc0s~c1!PR}sihBdbSJ~;DR{-GA4O~u_iy>fxD)6ut zlGFFuACa862tPATG>KK=&&AJIgWsOZp00P^_?oC>UbUI6#ay~FxbDh3q_%ykzm_m4 z*_*#NpT~8j7i6O`e8pSEgv#t2*uZ4}OzIX%jleH>+@1KrN(Xjq(Ls5)$WHfG^k)Q1 z7TzlbfS&)+`>pkSm>sD~U0iKlsB;ZL6hy2fx2xJXr&j*C-m-*xB-qa*DXaVa`WCRG zqB%0rTH2y14ID-&z0E__X#U%?G2HXh$%-Y$a9_}|NbWYx*1)*UtEzgGI)qPDUD{H} z=S-hb&2vtxy*nw^bh|93;^PxD=bXr|f5z+(P}(18p7c|I^+)%|%bEH}CaQO-;>2Yv z%xek3dOlwXi@yKB8s T15aOF>iMn`a-Ncw_Q^%)MCt#S)AJ5mpaQKli) z|A(xvj;d b>{ zDbz1LoA#xtM!%;KvEgmZOvqmNcX6s2JH+{%U1d)Z}Hokz!}4!>$QDnG2egU |p18 zgnMr@ZRfrv1*hTg3)A*7+K!f_TAqtb5070vrrEb_mJZ Y1)C+dMVn)X4ZK zA2jmn<`a*rll2t^YKFsa((5PWxAe*HsO;O Pi zO7iPO6+fEbzZ=_blolCqtbe4uf+7u13y3L$x74qF)C*QH`YWkN$}JmNh@n+NE0nQ% zq}^6JqL>|oHXcZ}wQ7V69?oZ~C9pia9-dhTM#A=93oM3vv6SZCfboYXu=6-rotXcL z_EPbg@UB~NslyCH#redw&6S2aJ4N3;%$3`qEnB`px>2=23%@nz)xOT@o2Yk4x^IC@ zT^0+5<*o{o#-z{J2!so@L^ft@rlFHb@S1`*TgV8k_{lMii6?MBDb;ph%`tYHcTuTe zn9_K-*rQIbC*$R(M (6hhiN0iS*sG;6iOMPDxg4(eLs6-xV_uN`K}u%x>HvF- z;8G~8t>qsbt^5W!!|kcn+xh#St$YxBB=aGgPZjK+10L9mA4H#cbygiLepQwmrjWBS z4hM+9K%`aF#f0|OIJ(F-|78H~AaAvB;QfBYM$;LU@)irG&nua5IjnVd#KHG)>c*8p ze0AueF@bv$g(vDm@tue@u8o^5Xl~AO^=uyO!HHEL7Uk`qB+!@Z*IXPskLS=%#2|Yt zg$3YA)iU+82=vmp8K7hnVx`#gA3vMKxTwyCpIniGyyjqg)@ZP_uZ_8Np80KfwyQbn z7e1F_!xwG5a~w+ngo&4PG?|$=3yj}dNM%1bs#?dNn>8^zz*mlaQOl9G4Tq_CXz=+G zKq =t)YIuwnMlws(nG?Wz$=4PgzFnS6iv4j(`3wYpsz|$## za_}W*OPs%28H<2wL6SosNAHtNR^E4tN+okq4@v6fKbJCyH&4}+oSC5QbeIeZF~fq& zI>dRY+4ZU;Rz-e$k0m26VET@BCcC0zHH B-LWosOEU=eEr+PaQ2ZISKU7D09K{maiP&@^uEO`73z>^`$ 8ugB=M;zGu$XZUq&u* zNSzjo0}Rw=e)E0VodTd`w7%p@$0T=Wmzi~Few9BEKl3cTDRL=@;=nYaJmzG0+4psc zP&;Je4M@>v6D-03kdcqRasBKiIXs(OSmRLjq 8nWWdj0-SvV4RK7?zPY`^xUQ%Wn3%eCLUv<7H(z_ zluh$onV;R}pugte%3yTcEb`QHs@m?ciPzsMbu%Ny!I<$V`TV_&yp=u-MrF?+?kjpE z?4HI@)#k--zOXq5-Z<71peOu+H8Gv{|Fb4o;#0z;Vw>@XyWBJK`~~MXwj$yr1juC< zudA{EXKZ5wt;0W*Yg&yQ00aX-Yvg94b;}jdi>pUYk3B|!$KwWsPE^l;zEwy8YSq8t zBExw-kI&TcnSgi(tB1L8@W4{?Zp9F2oXz#r3w?|k>SFiwOObpdfi@=P3Bubt-o#vn zzU kG-_g-eX2?BT-gcoP#%?HBbk0U?uYtS1LJZ)iwcF)BEIX1B74 zM|U`}y*Bx}<|Vth@%cWXE+%iBMufFt!fL1r&%vbjSq##Wg%vUpGS+Q3 JI` zK$E3_8tU+`wCuY**N6DQB%_ExVGRder|Gl1gs?16gN!_6-mXHD>ds7zq)x#4r$Tr~ zi%F{rg@&1x@VngEM0+>xWVzzdy{eg4O?;EdjIvxKF)1 zgSZ!Zi1v$tlj16qA}5PebvoSfjgEu8{r%@+KGmK3fM{3pPu6zV{*TX4HV J!X6@h8EiIxVg-4sSiF`oCn$Qf}=qU`U<|LyJMHzVB<*5+j=B zCxW8lMNP>^FqzBaIgCyytT3BYq}(Xc7B9})Q_|`J@UJ;Rm2>y5XMGdyQis(-!`&of z92*|Epais;kS;kqs@HH+TIf3laf$))4W(U&StuVGTP&Fo66te}Qhd}(y;3aqFu-s$}*pp}s(*W+soDn*P>y;E6-#uoQ$K^$3_ zCZFj8N#Pam8 z(FG>}8F~Ca&F}ri#hae)yr9&Y|=1?zI`LsEpVuw0bekSCbU( z8D0lQ`nc-(gi;_S6!2l&)9B&5Tx1kyW^kkn8KeOG+7^r*ea>27yS;n>kFr7S&M={4 zRl7vMP9krlKr#BI=SFU6ST!NP=WVjn{C7KeR}=F)MBCx3Tr~Xrcn7wHqJGMdcW)bp zEmJDqe%a1)5D%^XXrVP3t-CM~G^rR!F>T=faSbS@)+@~-@FJdcptpGA;O&Sb5^oBa zqM;#48Ru7^t2@@qzR!E4&sGwC|M?adrP4=UJQ{+9L>Mbi@3(nN1iB2iabFwojV>T~V2TihNZX(?l!r5u_PZD}$h;CDC!-E2D zSzwvRA)}vX(vPkZYu$T;WF{S47fW_2m2^}-9enA0p(nwk6DU*fAos&vj=~Gz3m8A8 zbvP4wcMYSFrTdBJb$#4GwatXpnKG6RJ~qZkTyvV-_Kd%Xju{1IVE(i4-dwg~I!kbR zXx(Ck^2}6&Rd~Q2S9?w6InV_gK_;sUO5BZmh;?pABkF-3en&4d`uXfDBVv;y)Z4w< z1<$i>OhbCl{oP&FU7rCUsQ(I6r9*X#Moin7V@hmJZ4%{Pr(gq}NE>;TZJg_RK4RPH zrzv8vGEH;AdFvBqVXmLP(|u!brmjbDFb9|o_4+h5pMW$oOwED2yqEAA%}&P!7k2Jr zv6_Pg^FD0l35`kwKM%D4M(WP{puv6WjUZ%EkI_-a!lh2vO#SBbb9=b8@5@;R90ykJ z5ZWzr1%{5afqIRKqLHfpniy-TPF&JjxzA;0_zW&2N`^9^xHVTSj3T+Q;7HoA8vlP=R0URN<%BXfAVwchzAxFyg>a!-O!|` z6jPBQN=WHQm~m-*IhgiHJe;s-VI~F98lL&1ZDxn<{`*$vhMp+{GQyPjfE!j22Zixy zJ{=W-;xwx1piCr6RfXOo*YwP-&|Gh;eol_<+ar5HiI)mAOp-k|S_5Z&_J?d5cYIbN z*xFV06|1>aT}mmYs!o6>+4xyke~B>Z6WpUQ7N}#BleFa~o2x3`^Fxy5lBWfU+`06h z?Uh-I%U>5KPoq>g5_6B_hKNL`&u~Eu=eynjgqFSwpwSZ5r>YBx>d2kh)sx6r_kct{ zFnsP3F09QUNW+30Cs{Z`fDN@RPUIVsXD*R>x&g8IQDOkTgysu~nd@*MPn@{I$xiVg zLd!k^AVnv7BMd2+jCmd*nbXuGt6ASWn$??{a|0i$u#=3Zg96kx>ODUFhbl^vq8$33 z-9*tK*RHk2>3DlEtBBp+!0b0&l$p$3e&%~%zH7MCAYZ4QW*n2r%BklI=Md3$ s!A|I&;aK!OrTlrs&-(jbftI)Z^^Hq0kO%2kjiJO!`j61vzgI*RB5vdUtDDk# zj}q1rzU*VrHpP>xFQ60fG9^2nS*!U3v+V`r^TSf^b$OpkfzwigqZ`iDE1Qdao%dq> zp^KDF6C4e&XVo?w9(o1! 5b){O$D_=rGEwqTESHEKk2c!czr&(?H zYDahX*3JLYKDXM@vsKV%P&UkXQ)DG1)NrdeOQNgw-i-1)Wg!<5lJb8%WuEOSJQrir z!z`Gq;V#W@X!wxkWuxdc(M@m}{XADU(KGXkjX@vT_o7BN*`(J=j82b))WjQFNX }mLi4?ppa#qNWnL)q>>=q= z6vu7V>2Pew+vf$!(3i=h?4Vw=n+a~U!NMjuA{@?h3#}k_Q)NR}=_Kx}_ne{Z;29bA zYSPp)bw#i 7j^@ZXxfIrSgD}QEUa)es5TQ#Mdo4wiyd@@#yzyYf;QIQwcLMIr#!! z{6d+QrYTC6T+B_KRz19G1(eh#OEIC{DRXMBG@XuQM3f9k1AdY+4!IqPhy2fP7A*(g zYkb&Y=@ @`$ODav%m+Zcgy=J##$|H)9nSHT*obVklH7%! zEze8n;Pe(Rlm?s?JS`NgbYp> |-EZvgb0M<(Rj>y_*CYk|raGXvQrY z5O{wibxYJ6#>UBm+3C9Rnm k I*?2G@~}T_#XNoxBbs&oW-Zz{1HeKcpx#vwB`gPOu*24vaFZIdLi~2?(^Sn z4(T*c+TLE;g6-&{D23kq#<2e&*{MLpV|gXRIUppVw)#m>AIIXp>=;QtC5LU17#<_s z`}|xu9br72%W-$==AhN xbswO>otD`d*MJ7TY)JtWtre` z1{Jv?j6Gd6eTA6d7 Ag2xti;WOyfeM+|$) z4}*X3v=rsQ|6?jgg*B9ig1Y~Cp%DUta7{X1+g`sGT6#8`?>wf2RgX)Xc;NWOQ0xSE z^K+!l6vviPmj__(p48&Zs~(O4zW}n{c^8i`?+?k5RI_ZA4`Jls;s4dMU`F9_7~Cmc zuO{L4- Mv)7m2i;?L6megOi|F%oHQ3FpNIgzkrNnU@!pULVWRY=@2hfa$=N%5#A}>RN(V z$;>SoSxE? *%!Xe%we<3&0!l|d{n~vvvIsl2zT~l z3Su-qpgA`+W0g?#_4Vim$4=p?bSKchu#Lf$0%@!ve;fPLOAfpoq6dm)>#KV%Ppq<` z-kn~6NuwsFlJvcCxwz$(5+qtfnjOBpTHB6)uO!K=5{k{zlFw-{;a|SjxpW(NQDRQf zs{r%)fTdV?Ny90sTxlY0U&;wfU-YdLUzy4ECShtfxdVO1%d>F^tF&|fRbD^uduQbe z!$SEP6E3$^0S^{4NYkEK8Tf4t-2i86lS#|Wc4W4i#-2r-ql;0rs?&CPxK( y8wW8 z6DHDGSL2I4{eev{=c0_QFr=SGm?w%Flsw-(?sDArF9*jsyRi0+%fY;3(SWP9hmpCZ zso1pD`(%YN?`)(c>*!bE{_v%)Tnlf6#7gLNNO0URN$y?+RK68I!B-0}lCCEjVlISz ztF{iPF4CVo7dZirDjn*u-IL|qZ15kY8zAX=Wa;dCo2G(^Op-s-De%a2=Ni)FPwW_R z6v34W4cE{L%NfqPEQdei9yZyV7mk-;uW?6B=~hHGdq-f8_DzQCNi} J)wEg$k)S*WAVA~SLzBMo!lFh0crX~0~EUH zpJK2NTqm2XU4ZMfhyrKA_2lRTrF$J eAZETzXj4Vz*KHYwFx`su<0?dCm%8PK zX&udcOR*$9>ToR2sxoFHua oY953KB|oVm&wyyZlq;pkfT~2zIi3XxXJTf$`(%d9oG_? z&is~-e5C2F)RSWTnr{;?x1ppmvp2vIO*9QRAK!;6#=C(oQ$)pzKk`^W2TWEG-jCr> zoc+?d{gQBAM##|fAL%S}m@L0SDLBJtua97j-tzwPYcMND>{AXDBw992isxNyt0^&m zSH|caGg{c4^2|dkr}Rz8WPyc_m~v?e_5P-zWbVrg;-ny5`1~%k>Yo>iK-^HFv;Xh; z0`wGL`vBaXj@%+Kf*w(toQt+7RTm;mMe`2raik3Gvk&oV-6{$Ufwh1J2EkH@SR{`R z9SC`E+|x+wg#jR)u(o2;fSuF$^|Xl0odq{{)RA3EJX;xIa+-N<=R5~sVtIwFGtllx zgtiduQs<|^rt{xk%y`}29h5yqCSkKYrWXdf5WWM|XP?*PWtmoN+%D3IFuh*|k{e>O zP22DKpl)epW?mS?yjE}>F3C6oMFK8WVp|lpq-j0BFF(5L>gHhYQ6Qhg#;l=nGM4uR z#L8N%MjH^!zc0bSgizgtLwDKftJom291uyF75Bfc4vwB+`_XDj9w|Z1AN*8P^g08f zCfW?NliytZJ>|zLhECIcdcq-fv1E&|5)KFQHG@|9=UBX L9U|qtf z{Gze721i_$4uPDTfWR#b(29|L29sv2vxR&9Acl9K{l)87oONFtYk~kY8)$JM$vHP? zLuV-}E 2=? kq<&!iLqk)xez@pMi zAmY$g&bv3!2XGw2FT7o08z+Z!weV`kZh46>@d5WwmK0`4pWQhTVqBFgs4mS;99K O*}Hilz}z!OcT~28yu&_H(iQ z%n}gnn+~45AG+Tedl3&cK;~0Ge%N}^>bD?!X BS(Cav> z6N1bKMh73n+!+mvn{p(nZ|**`evVmdvB*Vxx2{|59)iD-;2`uR)6}(_Ze{NIe9!h~ z#G!LXWjD?DpW2aS97GJ#clW!=@a~FA3Fp@AXzf@qn4*=sBn&1!L<|Cn*@0Cgmb8fP zJBHC%3~)>=1;kx#pr(y&Fyx*;Px3K&lSMh2#|!5<4Dv;+`l2hQ<}V`uInP@U(SP?U z#Z6|SSVO6nrg|0-7TZzba@glOa2dL%_(plabwFKR^h&wCc(f+u=RyI9n~_N7% 9$p&0)wt^Sx}zsU5D1gP z;coX2th-C8Mn*;m&h!m#E5Q(m>(*%Y8)IOiheJV0$$onPf>)f=&!;TC+aS~L8FS%V zjMsae<6&oVQTM)M-c7snpU-5Q_kI=)@TgGok1W-4T0UX=tcFqCQ!bNm5VieuY_*j| zwPOqFkW5urvH7a>)d{)7l6Rt2m9`oVI{HeV&JIy^r>D9EJsbl^Pw1u5t&V8tqa=6( z4AfW;V^G{pC8pO1x*+7!r%!+mZ7QF~_3m`#zJ~4tMXnXC4LSdk>uiULwM0sQFEd;H z0*TgxM3?VS?CY0(Cnu+JnU$-;N;Z6z7>6JQr3uXEt7Y|b@B(10NQDBv!)5oYPHJsp zA#d|=;Z?z5MBo=w;er%8bxF=ruxB~QJPokY)&1E}1_azQt-US~%g7%BQV~3;nK$YU znw=9~LkgeQUYvAL@}sVclOwvQPB-k TpquD;VMxc{O|mKxkF^0zF X;M-k{=ISY0SJSi}M68%M?cDS K*ir8MV zPT#2F6#8M~+b(*{yFp8bUl3^f-T0HZmaF~#^vngXs|j0$y{)jRLO0DDZ^pu~>T|Uk z(l*Xwd=yXMG;V%@K`F!R#j=HzaC!~KKg4bpaGGar#|wOAvpKzU$SzSlEs48UD?z3k zgGFPb>1zvrGAEi zimp~?5sS$;4JDC$z(kio0!6||2VBE$e*<@)CurVb#jR7$NAhD`!63xYfd deOooj_?p2ph!SRSNmiQl>f GA@Icf >Ac69@^)ou*o~P8<8)iMeEm{bEvLDAjc@!By&GbpInA_mHoPpw&66d6k!cE21-T z+c@2t<6&lI=Ht`GliIm~tU%Rbh>*P}r0i ^2_1$vdOt?jI2AwqB4yAob@6bjHktUM7; zANc9;CCsI$)l* bar-LEO_ZSM8g6rhYdpkN?2WHu>R-e0854= zBmmr`v!Hp E$AX} SHI;BJEUXX3qZggq*9?8PDds~5d)sYpEd+9r||cmc#^jvQhRnut!TwQ zVF&b#KS9QjKXcNj=_1p!kLfQl8(MmJc;xA2@c(-e6b6_yqkyz7H+%a$7^e0Bf;%#( zNf>qR5{m=gCYe+|fJGJ*9v&VX+#wTx`T65qq|==^ks>R-Q4k7xG`%4`nBc~`z3O2d zBVpbXwi2y(`I(U(U)jk6mq UFL=JD 62-47sEAD~_T z)0~Qe1#@`A!2qXD_qnrl?lSpBFBY{_nrTP77q=udvBVR~kY(c+30V9J5!IYYu>8uh z^_q5g+{m;TY?hnD>3>^nfY+2p&P2>JE|Y_~LzZspcD5a$(|AP7iA5khyF4oG{{aX% zrQsJDMNIrsf#SylBy?+-{se%8W~iG5*wb V{`L`k{95yt6eg1)#pKIYf i@LU1Lp z1l|kvM|~WeK~B)Xw-1w_coyl3G~HMYm?J#3O8Lslggf_2aGZrzb<7M@`B&+X0JW|` zrdFeLFWu26=&n?2p^)%^V4SC1Bjh^r_Zbpey|Bh6IK~1FJ~qs=S@}iL(x3w&5bja< zH}r>*3O;4THXuTC94zStn-5MC4*oVBio^O2<&Hi_w5|P{3vZ;8u^*kq<5}WEi ks^$nrCanV{Ms7wvP=g`@z+yOE{3Ew+pu$rGpJtMa{I_W(Eb2 zMnOi>NeuTxdwD^pM5I6YkasJfFn68EwD;go1mI9*v0J{_x5$P-Kn2M2^9NA|*i{;; z0Xy?~&bw1D5*PM`tRX9Z2Iw2m8nOWel2Dn6PrDlxiDc(vmx=X<8Y#wN6?}T9YPm z=DmaEIvYs+b=-1V$VEnPYs@M53aAckkG%*+Yrb!88|f}ok{8A<5%d>SiZ$~@$u~Z{ zzQ+%$jCTV2G9fdi1hkf~H>YTk)cc7#Nd^x?S-V!4V&1&(vx(Ofouc<{)3p#+%jrgK zb%g!sR-VadPbCs{?L;zjb%&*+Nq)^1()zeE@2Lv2?Tz?5!j??_ #brHleG-3i!`9k_!e>UG!ou~kvU(<%V{O#p0A+T_%Rv*R=t4&>gN8= z3G^a~4Opo
@=NpaWf%9MwT=VC6=ru<=ZsWk2l#HZ` z!RN!)aHB|NKPJCGg2Tj;;MJ?is~9j!ujS~| 9ZRK!m#Juq ++?at6Xh*Q$SJC^)cazHAZyw%VQ7qxk3PXLwU=RfBf3TCC zT}k_6xKX%aUTVA1nL}i-bX_GU*A7p!hF$tkABVu;!3+Gzr?rd3q0ZLvZNSI)&~u*A z-KafSRG)Xh9^!JvyxcA1?)gz!xqe$&V+0!_Gxq{vVSKGlw$)j$g9)S5B!3_yWUBNv zbeC3)pNUJ&ce>YIJ!wq~F<_05U`gJ)!AW((Uu6e@`J|<&Z25P|eAJfMvA<(062B+V zfhd~a5VDj38};K`^g$&Pr}R#vaMka PNpLV- zJ~W5mdLNCCoi!1A!7)7Q9@}wc0{q6JTz`5bNVS7*H}7bp@mV}3>9)BHhZ)zD8XQ<$ zDUXLC5d5rg!sz>P)E~`Yn6GW0JFJ0VAWpW%2ah|thlNubw^t$C`uEDILpy#>W2pUB zolz5N0Bq$j$Ju lY)7>u)M5J&I!eVEwSn%tnF=$uQxvtify$FrsE2& zW<|-5rKvfDH$fBghxsxWs$?3D>q#`1$!xmKOE46M{GZ~Mj7%T9_axfPff|^0CJ=7` zC^Zq3A3T|3r5dkcfw>}EaYHk>E22TX56tniKBsen9&DjQ3p#I_A=hp z! BffBT^YQ>f_=xBLPSFgnJxzJ7 z+Q6j4VWU)E&A5M<_3sS@?0O+U4j=HRs1Htb5fKWHn4)1RTHX4(GW;ICA3xd7;lN7b zrmFC`X>L%p=R2bs*2_Yd5d4|W9 $1H&g3+2q&D8nfxexT-z zu=)3a3diu0M6D#YF@`|);iAeV)xQ%z^guw?)^U9_;sPw-8>q;qvPtA(RDgq43qx@h z`KrAej_ *Z%z<@sY1Q z@a{U|%fn*A*fw6PSH&<|-iY17T{UbUSSjuaB%3`iD5*3OEg9Y&3^4I0!4#9NyLg7b zFixzP|2YAh;2q`}oZv#_tdymJ#L~@2<>Ft9dv{gw5lT0*yW55n@33w`Y4#h5E7)@Z zPF~0&H@~;471|=ifJ5+Mm;vA`yyIY8O&qIUphK!U3PuX)pYP?dH3Z~ Og`f=t!|Vr2SkQmXCsO>{35g}-^sX uhS0G}^_(N;Xg;>mza!aWX zh!q0kE`$7njqY0Ho6q_id%&P(NgRJ=@yev{lH1cw5-9Y`LmDk_iyig;_HzSP*$k4# zdx1(S*4fiDgSY?&J1(^cTwh-o6wowkJo9YYDQW!r^{eaoZoTOk#nXXjlZqnJG<6bO z-0(P}PiRfW=SEcuFQm20o)LQx!s #dL@|Xjb2e+5V~1%6CAg z9=zg`p6YOd=4Dji1eU7am0M~a+97DkY~3anDH<*(c%}E)00Nw_Am;~j?LVKN?= cCv0bmCB%%xPF}Aw zwdAWnE=-l{5Q8DaRL2;xq3Z`%MrS}Ch4SnB&Fd7$0_5^Bz`2-{R>cya303o=>)Tmx z7b0fp5A8kIN$R%JHg3n9BM#paDm7y?V56UHL$JF`$g(P^P`VR`N}r2L*z1I7{LLZ- zCW#lHgZi>E#oTYm$jGv?vNS!;CL%H3u|dDI1m5 p9iLOC0+a+&sbculI)0aL@yNpVcOr$OqJDLhYton_ms`$m02RM@x*H4HVnknu# zh%Mj9ISLMymm46ia?|Xcj|ue(Me(p3AwKRY0Yh{go0I4)pXqO;q(PA9mSs5;2}aW% z&_E8Z>JV}sQNhd%&cryf-JL3ruHKI_1OOSI2yzr0#Pu$!5{J?^Df4G`M#W>U#$Irn zRiwDTEsqGA&qMY*Y9Eq-z*a0r=24-brF94NIU}HNZEbPP*()5(H+PBufHXBV;qy3h z;x2~q?4#7)HX~qXI&;J_HbXN}8|$k5V+G!&WeQ7YQ_OeRzpzh)A^9wz7~P~M)+9dK zBxKAmUX^}A*PlYfgHiIFz&XuY=cF7 ww%z;L>7q<%p~1sYbB z7LcB0-Q~sN?;sQM6&09|^pBM*u3TMR$*uz_qJp`s00kvXww6c=GoG@h@Xx|#mN##P zlDJm#w(*m(weWWEDYIW2|2+&OAy2aCO3u$6<=RSL007%1j^5a+y#$daoIvk#V5Bd& zbSO9hT aJqT~hId*%ImhS*z)^ss((p6&;7Ok~9aotC*itVeHzkfSDcDRtc71aBhSR zfC0&?wFit|GP?i+tZ}nVm2URKvoWg%1_m~##>b<-eS_;!q*SUjgGx7bXu0%aYOk+@ zg`%rsei2 ^ZS(+D%cy|C_1ue3;O^rX& zoNsz3n3w=2R17Vj9v)6JdkZI2JOU(uDSRI4xb UU_ zPaA!64L%qf7ow`?O#?ah!XOb|W#M=6-Fl@-b>V*N`6e~Xr_{7Ujm|y2hG*`i#V0A! z@7M-~I#Ez^gGBr7ZB^~qsB6eGP}D9AJQSi#PlFL;OXRR2T8$`9Ex&Kazp`7as_BpG2I zTI0^#v0$ZJ 1r*co+eqnB1VFn@6|; z1Nt)im909AX}al=vHsQ2^3xz-0FyTiNxb(z$jOtA&yxMDdn+7B&{ If zEb1#DZ9Tp`27 bZ$nd!;w7e3zfx `k`eWWb5f z_2aDvaq=BbT4xRKYH&N|i`mVmfRiMKk;e1fnLV=mCiDQ tLdT bDc0!gT}1Pq zAN!=?b-DC>f>3EVLyQ(y)GsTGtU8+qHcuIQAOv6P;yn>FcV}^f9uBJ3q;|cH>g;j3 zTkiSve{SyK7K!ZPn51#hhMx=2Z_E}| zip9S-N}AG_;q5;{NI7kOW*v8Oqh9|$(P0qKl_FkuJK>yW$EDu0y$p=%5Yj--b^=;E zzuZ+h6LQ<<4S!L8Rb+Xf+6~rpaH4&&(jAI^q^;^_!|Q%oMnlnzi?Fdw^5bPFA{)}Z zsAD0ZGH1%$Y3t%RiXk`KdN 2oBLj^YA?OjB&Lc?opFo8jHIrypZd9|giqy5Vm2t1^E($ju-XFW}w^lupSm#*fI z3iU6l^^3|MHGs)MY3_2n`hH)-rZw9}Y+`EuYJJNFBImwUSlz+$cwc}2I6`0({WoSc zoXY-y5dL!v9^K?23De>_wdB*vr8f^Dj`3rN^A}_IcWv9Kpr2Y%GxaKxP3wi_Nw_8? zA^h)Ep1|AF0~wvx|BQ8OL7|$vTE7%^TAITq-34aY06RmM2 %6GX0MH-#;3pR=XQry2%yA}+E+Stfz^q%HnCFa`w;CS =)lzn;o;cKFZP?b4*ukx57-tHJdt}45y@NcaUm4uZzcYtQ$T<& zoABD>5mu~)Ghy3{e`A~g4D!;la4e+61pxEQ(6$(l z~2*G?! zjVk#SvpckP9}{+`08HIgk!V8(?D^f37z*GL?Oy~G6{8PT=>21E>| Hngz8Q^~hwA79C>IZh_X7wqJUfeGoFay;YUkPA=gATb^fk%vhU*s^_gS9?n{=sMK z{Cinj0i)Y!*W}>O=&4ViX}|KCdg+;Y=$zILV(B}k`4x6*y@=Dv!shJ*N6PoIaOxvZ z3G+?oKJ|QBdiY(u)Yl$>r(^o&U0{J&BlV#C0({cN(%c%xIfk||?AJ#~c6w+jCCWXD z2odS#v`ERxa7~6{@?#a)on{!P-B+KZ1#tq~6!k)aix_S5>u*SYuS>8Rqe|;o<5Lup z1N7zhmjicI=}2L}9NrNfi6v4r?^k$=z)i~dg1N;6-UU*=YYt2#w?CoYY7>Tf72_8n z@X)mW43YQw!>vUC0O8ALyb}QX{TUx@!UL-6!$gEK*U|m6GqH&9CbTBDqxn?wi$AMe zx#W8k%zc@!zZ!ul-eCNPp2B~&DvQr(vUSVJNaD(Y!TE~Bm1kRvg2R< S=IHh&p&i3qJtDIj-7JRON4Q`uAD42^83IIeBNWYS|tT z&@)%^6+yL#_C>}hbK~d$xx9P|AYY4kjh*kAy82C)X6C1hV%XV2lOeinfJoCX>giXS z%iuk)*z1roBhPm!v>x|4SxUtahK$T>D`U;#T3Ugbi=VM*@ *x znJiEKD03U)^yoRZ-5|qSQf$OB1Z V(b}>nxbBdCFD`iQdLSUcL&;Q9x1(m z{H=Xvu})Q9h95|%d=QtNDQ`A1U8;YLW`{7w%d@EN|FJJ^#?VKT@t~vy%P?l4N@9tb zIkYcto4X23_r!43^)RdUKz2{iRcZ?dd_ZtqUOyn_1eGW4x2T0VrFY^6ti_o|U_yC? zLd>e5HTHz8*fF#zF-jPQ=E`n-tVT{KeiMkB_U7_?uKyWkg+l&hBwO1ok6lvjW3Ve- zLYKZlQHn!TSzYZ$c>e^VxMl20K>|tz7Hw3dqpBtkn{kTy({zYykB`0i;#6(v&)`tK z`vRSWL=$vP{2R)|i9X1ZJz_yj&|CA40_=Mk?i $X?vh?Gbjw;2uE9s4n)Mxn%8nE>U3Xs{6frTyB z(=KxSk3|(|I5tu~XHTWDphse%TmRKHe6WHlBsNtNz5-pawp1k_KOC!=sM`|D=4(&2 z)0A|-t{&7JUXK(CBR61lh8rkqejTpHzf?t_Q{suN?nb&?Aoi`eIyt6{^3_$LbEJSQ zJP?B^-s1fpRrBaUB#44wh-4=OfZC0gH}lf7O7m?sw#yL2D%I(oUHP^0%4aEHgUJ%* zH<>q|YsoC0VPVJO-Pk!af+08U1m@EYTY*liNvhicEG%3GyysnaqxH$>^92KdjcrAR zlLIA2M+4Qg!>H8TPHXgBy?_12;kPz_iIigL*jie1t6mDr$Pf0={={~P$C|0R@Ce|eDGH0>1da!%XJ^Wd8o&q3b_$TG; zZEm*tFE20a>+6@asGk_DkFiewubYnk=v0M+qM}$my@g!mWYKHeJ5tTAgnIOSCyzy$ zTKK6!czFYv#v0Uz#2Sf`o>41pG87bO;w;mE1jHXjTyVh4$U=R{3n4|Egufrf3tiv` zvx864<)rOWx#MPcDf!O|$oVePR YJJpOdoH$zs~kS}0e>_q^m1rn zVxkzC%{lX(fIaiqFjtz2h2R#KTr~8lJGT1szsNIBxAiP_okb;SoATdXan!k()9ot( zwdsOpoWI*I%Q8nScanv(fC|l&--dnM7_6?YPUiDyFz3e~Oo5ptx0z5<$@jvwt3`gC zVfDE6D0JhH-eCtM2*E=v7FX6!f51sxd-{g)WbQN=TC8Q?S27TM!kZu{+36CvVOcYj zYmy*Z{OjPc00+-GRuy+&v44C%sbAVkfAq_%y>UMp$ea%mTn#eUWyBlyRR1?wvO;SU zQgdQRs^6{yRV~q)qa0s*eYFV+Ge9}+W|P13G@q5{iDf5oJu4L=4;b|c%p&Aa4`*oy zFZ(OP-+T#J6-&c}Zke3>szrr6*11-vg(a`!rd2ZPsXvVZ4M#{41gG$jOTN~B104d? z_veU5)z4H|&F|Lx5Uiy?x9;V_U+|NYpND?=B9!gy)C2dQA;1EQ@X`D3C&}UScwU5+ zgwIo&QAr(Toci8r_({KkAy&Ey9PgRrC)YYbPKdI&ks!&m+mYh-kjn;@y-ep^PO7)I z_if5NON_I}sAwUktmf4IAr}~2V}r?PyMzLfv5*-qcAHEfN3gV+r_+`=UR`cS73XZ- zNa!K6=;=b+&snk4D4XE+_8DjU$?*OtHt=tjYX6v}24KU05}7K}&TdHYL(gn7w)*ZT z-RtN)4F$)wqN;qAHIzL*{Dqu;n|NQbG^6t9<0Q6%t&wy-35=xZT*)7XBW;3-As=)( zvBreAFW&SS%d`lEu6&5YfAK8MVK2IpQh7QS<}EqOp6T<2nVt_X4^9$6LBlT;@QVjR z*UVqvdsvK@^F~xGAA4Y^6Zw>gJ>lokvg}=ATYwyMV1@OyddTYZ(Rz7+oCn$ztP3Z@ zI}CZ^*Gr5~uuBTh$E#{QEU$LOQ|C&G^&XGyOHyy5g7fw-v#n$jfbBN39#z)pgOhGh zwF$;-+Qjw6Rwh#6FFn8=738^|wd>s?8zyi`-viU|SPtNl>Av(K>NH()wjc83?Pd&a zHJ0xPy#FNnBX6tDp5odM)}yp#&Ar#e@EePfT@@e+3B*W1>w?y=Z=!C(9dRhf(5gn! zyD=4fbl c;Gu|&MZD6kt*{46 zy)!7U(bJ;Zxbuy%7sOwUbcur =qvRTPOTqy4qU8?HcU^Emlvj-rUEn W$&>r?e%{oSgcxKiPW31#Jm?U`FQ3n>Zf z)jYe8!FUR)P0qz^`LdLb)9%e^x126d<$BmBCve;u5EJ-p)^IDV=-kgx0c;cN$??6$ zokLubm}uf>ra*C!Xc_(+pQm7xkZlf|lHGbwQ8q>uI9K7MJ2Rl`E33tzR12KCp7nTB zMK)Z5B3%O3R$qPbt?EBKW?6WV+R4d$LZPf-l!XJ?UefZdi%&uP_I|)GpTaL yxr<3AHC4%C|d$C(k$ z!mD14b!X2_n-|zkMI(O{GTZvXzuNw!Ldy78Mt?Oq7tgp3cqzcwWSSt(nTGtJFy+#Z zhw;J0ZoY#tt0~nvS+=uaP%7y!^390ze8bXZM7~#Id^1S(iaqxwcbV&C -`XE9yvhE`TDRVO6L{ znNsa>&1>N-bb>%BkXUkbE5;G`8Z#+Lq4jy8U<}0sqOFmT+2#HX2aX^s9ZsuuF(rn5 zM(q?g*{=a5(Mb$FG=&9) R+P`aWF%U=~_=}NS 9iBcZ=7fq%X&~;d}sm>kAXO2#iXKM1jS1 z?;3HNOt1L4EN&iK2 _o9Rx>BpSPWhpU|p_|-oIA2)n0lQO*JR`+C&^w-y)xZj5Qx1YYA;A@&` za8KBlYoBJ=&9~7;t65pzgpE}aTd4tNnWp&^fugPR3W{{+fvhwFipmacR0O|-tBqp6 ztL>FE DzzAWq$aukg6juEC@s5VcAIvQb30tPS^IdPA=}K51*$ z ?E!HR3+Dip;>e1z5_kPFk!Ms!lEuni$5EaYZy_EZf6ag6XJtHGWf8@Y z&U}=4fFt)%c~361o?M$4&!fKLZAtNr95k}M?0wsGz8>K}Kw*;zqm5X74nq8I-m@Y4 zv4eQEsRXJrp=oWwyY7|_li;HoW5Va{B3KhnrOyD>6g2~2T#QpP3piZU&Eqh KW`GW6tAhm)3 z@Sxpg=|L8-;IV#L!Ge7l^Ize}pXRv^=3lV>cmeqh?mOZNMPjg{R~m2Z3bA~?$nDZ_ zn?Me!u2WKPN~I=THT!f7JCukH0c}orPy*WfNm+X3c-ce#{OUK*NM@72Xvg!fku@X3 z3r_`des=p?Arr&=_MxQl^^$f@$u5Y#RfVH_5GA6Tq=89XJM7nHU$hDl?Z}WZ1u-_` zLG;YQ>5`!Ma>U*y)i$uU;VTj(U+Ure(s_yME;fDNyc~VIY-OctL0tY|PH<&DX(;9I zm(OW>xQ+wfGXG9j{`1`yf_sFS;P>SlYyKv=X&4x^%5s_(&
(b{qq=g z5BE~QGJnb^Ya8OYAWbC+gwpeGpq~isgUFR;;U8-XdA6o2N(cutlNXikfYQ_kL0(dJ zM$(FOK~0c18@llkm1*ic)&p;-^l`&4D|2!!!>i_5OY0(`W#oeYOR&CTz-rM*Zi%UH zU}5)r%=a2K*aIPX(Z~@3O)awrZ65Iv^xL_ J4cTwCuw(OU)0wJ#)H--6IH$)u9k++Xx>9Sxu$RM(a+`-1L_-eZ2 z1kQ)X#^I<9Ull3skM?p#-vGvVsIw4^DBU^Nikid!suZwi3?3%JME$|$e)hfEhP+?y zLJ!y+CrIt#G5V&H+G>ACmWowkAWB=!3mYLe@N-y^YOr%1JFg|1oHJW2<);*qG&15? zvUu#(tW+0E3(!54rA0!(6=}$?+Th8aMkta(r3zD1#iPPi=}VvD2?5?-%~qIr+>}Wl zNCo* Lb fEFb}6g`VvVfOWB@ew*YFma`W z{X*@B)PVIFcDsQ`l`-^~9B_SA;HRJkGd1>5!YyYi2l|0N>;>f#(qX7cT;7CP9_8k} z*uqhh^No`Ajw5ynIB4Wkl^~9!zOU%>x_o~5AW>q>cvx6JG=3O<+Ysz7tF^w4O~{le zM?@R=E;Vt(E8jF#9=f;)tK9W8Ha031$gL9NlDO?;!N!A+ihIwe!8aoLY;0`Q*4FOq z>=YIjGO`%16f8_kkUyRjm6!Jk^3uqs^LgGnzy{8X89i;xU*UPy$)k)S! Aip8Z$a~Zw2M)3>+rVYN|@9bK)`mr ze$A^gmd<~6yhr_@V};} ThT faO@N4_*)1eB|q-+lhv^zXtF`hiSl^YKIQ zbPeDX_Dx_FXP+>WSe|wk)Hp*?Ll`$QqFo_Rz~jB0->FP2uY|&hBOgtvG0TIzvFD(N z^St>vh`neER+H_ !0QJuKpDsm^28(um?~C!1<&s3o2?Gn$s`xghWJy# z9yJjpq1n+P+hp>EH1g `%_U`hO3IzYih?1#Fj_L;SF cx2;LBrh&@VxJPl_s=l;-#Plv4<0bT z<36v5F>WLoH(^5p8DS3?-CYsZn>SCjoH#|R;=5noW~(R4o2rKlvw92YYc7smWW17a zhO!|YSbW|O4dS%ODV)*M xmjuW(l`0qjUysU+UU>fZ$a 8bMflj5oZbsy7vmxx4Z5EMyTXuFfZv6hB@2c4C wZ$@Y)^8AA?U%DI)>YeLHfou*)y?)j~LW%HR2PS+ZzHjb~+KUK8Uj1*n< z^}I6xCzmw%**nCW=H!{;+X>C(7o3n5(`~+cU6AMYorm4B;)(dIos@&h=Nq}rO@A93 z(T&>NG9}uh 8+tH6gT&QQUot^%akoI17Z?q1YQL;I;1#zOpFV&64Q)1M@ zR}{`KH0n8Tbsrslo3s>hXjES;ddtY;%x6Hzge26Rogg}_IOXOOsU<-+jr_LWRcf-` z!esy{`%(eF)D)cGWT#=lccIMuIy%wSywrFoxCK~2)Ng7_kNJo9rG*~0{`CjFha)OP z*gM Hl2Jln#V8Ww2iSkH zAtN&Y6_%Bh#2_4M+|<8%4v;%2$DeA$!xO*rU^M6}O}X7#3~l9OTU6}UWRdk~W@%WY zHd$=nQ!JodTB?7m=wOte&h bU(Lzf=xNiw7p|#bc3VnC!=^aQrVv{Twe8Ylm+h zGy8lK$PAGGcmUe?lczgnc|*752}0~$>F36?Vz%(0=}`R!9RKpF!k!5}*k-v%uvl}+ zE^(E0R)8Sbdl26SE4pc=x5M-eYtref3FDQ*!_$vMFJFvyI!b)RFjD(R?I1Cd6Hjfz zsv>pYzL7s6sba A4arPm8yqF K7 <~xOn^B-tS1N46IU)NO*8}IRd#9ZihOz#dP-$pX2 zdY`-5_B^hM=S|in{CeYRZHU U_)8V#_%f^7gB{dfwRVm_X%2i_oq z{Tjs;f}*tZ<6B?&ua2c2mx-bnH84rzEt7C4a<1&Mx|_wge;5@OiR{YL dPxNv z@`Y@CiC=JLz?B(x3V!y~t8-V_Pt)wR77#x0n)$7hzfzYCTzlbO=X;)H9sxTIz6Qpr zFyM+G10(tChKr>0!Sb}skhRgA206<=uaU2lUOZ~xF$qRs$!&= DfY{nruo%O5M|3)xhSz5tCDl9j3%i%`Qt*AFAF3^-gKJhcyR zLWxH3-THPvd<~Ug{8B?+jXwXPmYV zTYnNUN^G)Fs$_EldTAGjH%vD($I$l40DC=acx==~VddP|u~w~c#NxT-%?8hek_-b4 zMP;Q*RY|F}a1=T-Q6Fe1@N~Xbl+(PVS8PktTNN1Q z?s364!zurxzqLOhOjxFNCl7}LykB@>Ol~Mguhsn38h5jtaRt2(Ccb>!vRt8GJh0V0 z12wB^RF&5q9v;##BXoxm*8x+kcYndc+KW{5s`z8?{CbbZTdfTc;(<6Ux{`yp^D=$B zT9GZNq+VF4GH|A^XyT1^fbQh%djnIj35ki9c2`m~>G?&jF@(Rq-TPwJuv4}V(#nfi zIxI!l%7Hl(Kg%`ohtS-lE^-je2fj>(Gq5a+`I(2yXdksXC`qFlBczTgajR=}P^W?@ zw?rUVLz#bf@iL?9GGLwB!hZ*I?s09i0g) Y=Yfvdb z(8`zoY x6S$M}S%G>1b%fVUA`{=f#m8MD?2wB(@B*iNB5LK^=)ee2nL~y_g zS0a>M_g5}!s1`Jo`KZ3{LX9{=v&wt)9a7I4{#bY|CPs?2;mGbE=a-yY b83 zSQMdkJqBErcmdSzny|b*K!>A2YjZqu;ijkXeXkg$=q)qrnX)LqFF;odgEE3`;3`K{ z5?41_5yu{O#qqA>c1^5Ly*jz+DiTy& imD&|O*Qes2Rl6ag mYf^shb Esjt42?8WGn2A&EHyAQYrV*%_=IiNfi~EZ1b((kZX+v+8`X?%b-g` zgHbte#;ajkhvl})!vtb*@7olmTqcc}GZF>Oi!EK(-H%N$tN}ja2h!~grY&mvF;Nmc zoG>iV#fas84GY@TF-(58^&A+Bi%(s7^Ho#b*v-)SoO>(+zH0VlFVqY~;Ps1;7AfY* zolfIOT(hx=YMG{T*!{#9MwHbqKuP|X@rDAIkVf7U5Vf+bUIL0v=n5k=)H+E?WidO& zYywZ6`Y$$`2`uK*V=h~qphgWuNvjU==xE!RTT@^~ndNpW##7O3mwwA_CAz6GRa2sR z>iMuQrbbt?2`a9tSW)L9?DU$eHqts=dE3REV|Z}4@*r`CF#?~u4eL%KsPkANeiCli zeD?3z>%%BZ#-V5AefcM(TF3DeYP^zSbkX8kdlb8%g%=8tbfA4>NnXFg0gzYc@Nd6) zM7ia7vOY+P4zI;s`0j4sm4y)2r+Ptft7_5a-h=Ve&)d9TJzR`zxU@;$miJH$evOt0 zx-gxK9&MN|8;3}0lO8t0qJIpcDi{);4hy)Mgv=mto0d7`5I+7itV=>)wl?o;{#{$# z2vDrs?F7tD_SBX*ZT1^W+6I*BsysxDG>97}`b}9{LfrKiiUEB3i^BM&{2%Tv#XLw< z{@hoD_21MO-5Ct6+k6q?1pxNGlajQ|Vh;TmCT~3(#Lf^Uu3#bGTdHx0wc_kF>&ct| zrKl)!*I}4o>I(nuec2r}MJ_AikSV)?yHdZTP9>auzw`|G2yl$O>-4w=25D(@~p>am7N`L3-_(4YLU&d{o) zU+;#`&qv(`jN55_lni&Rg~IP`)g|b0N${{2%p7^g;@T)Asyes-^A~ER2yJwmHeK3p z97vL-B9Zal<~1_$@<8&!Ihvho>Ktn7)>>LX8lQ5;U6dYyEr^Rbyd^OCJ>&qX(OERl zD#X +F?6r%!b5Kk~7Xzf#Ya|pJS%;5Y_9isJ7^k#qNco_wGP4$|B-Rk`lEm-3%t;&T z>6bO*7nb5TAyM4Xl&7rw#zCiTtj|-@{z-bngf>h7^t4X3W%Fr4o&Qf@eEu$tSH#~a zWhc=;v7V$VIUql7#-h|EAzSa8m33%%ykD*W=!3ATP+vn+26@E^A$LmTjqkjQ0cd(+ zS^Z3P>SS`6f}@Xmz#adUTijTB7FPg&T{6{Re;zh%79c6GIS7}jsMg5+L`lL`g>Sux zkP{l1yyQcz$}-esp!J$IEeVrcW2xy9CEAfdW3(boy`nPrJ)!v-k^Gm*-A(qU36MTV8-UZd4>Z%oWR5EdwQu;YOzfmdPJ^gKQ zAegkm8)UMM&)Z1-Y0~5u0(_aNL+L_O>9e-H{SiUGd<@EiTcNQP4 zsl){lPjLfS2E#pOk}-vNoi7|}4=b2UFowz~*iD*J3EIb>9emqLpUJ2Ah)S6I;PiRr zO%~I !t~8f2BZLUPY~4UT$q|!TcoaI``WFjX9{Os3#{U z1D{NdM>8z%jYPz!@a_FoncqP u$v9fxl#JovI>&z1 epw@m7J z8)nf{QVBAVOA>RT??Z7q$Cs(FLd4S?xl#w5&PN5q22(zgvosqm3iBxi-K&Q`l!Ole zi>zfYE_nwhvIWg5ZWc+6{LHcXCQl6@zXjmJ qmZ8ozSLRFK};+ zudBu v0JSnhq)1UR_ln;BSCy4^#Xhc-&U6fEwW$nAy zk}d86+7jb>rG@|spE8*r`-iX2&YReeLd%m~ve#BheK~j-ZT~E`3WCm6$7#d2OXr)N zcI)YHek+kO_BShrMd>DCNpmJx(h(f^Np>~n%X$?#jCSiLsruPi?-o~C-cCq6{~$ZG zPb!mDu>l}X#lp04qVs~uF9Pd`x-;kk(?D8_WwFpMcMG^??zSlOo}LWMbhob7gw4;u zp4xZTTNK7rMX 8>H?{c=B z&X>m4)cG>m?2+Qz4`QsLCr0gNbu~5Tz3ETQT|PlDd9&%bb?RbczG(}r>PJ#EVc9N) z8T=V8&1;N?hNccoUZ>~~y9u9+MDaUf*JO@lJtHlKMqWy1OT1`x;bRe$UEgi-QqkdF z($Q2P)Z*ep IYV(*o&%yKl zx}f=dPsmK05Sg4k5+BO5gZ2f=FFHh)V^{J&XglF1HmR!4Z&e8-GA)kgVT@6w{ao@} zHiFaq&*pfnXd2Yi3&&NF1%w1>R%sl1-8CQ;VJB*-U!+t$=Q79kE8;Cj_h~tqEgl;> z-E{q}b}rUPWa-V=9R{upmB-%iKntyZii|fNhMlsstchaorpr>OGdLED*v|+|Uz@fd zjCegC;TWT^!ID{&Czu*vI$deSZslanDP^rKlLlwM6o(&b79`KM*6NaqE!63rp~X~B zEY@xf3kA=l%!V_}|Muw38tSfjC2uYwoI3<5jtkdQE&`gCe6zKXAKFwpEjg)qsCy5I z(566j<)YAPRRY^VYT`N+>bCF3%#T^kzAXbKUETHX7LASzP8(MH+d>kKv{VCmUY_~t zT1cn244Lb^qb8ody3{06g+~rybs@fb>u%QQHrII19E#yJv4mU-HsUrj0X^QDSt|YO zyp_ldg_#IY0}!=ZEPXzx@Lo`X|NN8`nK0YQWp*tZ1vFWXB>6-ZGo_@oe9vHWcpQ}t zxMfAtqAm(Z385MA{_)XfeGG>jVF}B)ww22~!XXqR$E 2iam>f)0+wZm^Ia^^nmS81@X>?}wK7uEOaIS1f4as;U5`kg%b9wF9 zS3~`oMkj!GPL-^_*B`w96`>y3UmX6UQoBfy&30W{kQl%<3~|iRqg0{$5Nab&eCZtX zUig`*qKT|a-7w@dDhQ|0`g;KEI{MZ1x6Q47F6bB(6;eCQ7OHTDq#}+k(M7{&0{jGP zcwA3n;)7+PB41o9m%?(}9?1|_oZbUEM^rs7Yc~8U){9hRSC?iAra__n{mLgwx)v0D z>iny5g`B3^UCdt9!`33eU3SSbE=lFvxnjX7*RwJm&VQZa+UT0HMEuWy+2_rB@-OOE z=-zgGG6%pss#gvY^whyOZRRFLM@pO(_=y2xE8 `TkdU5iczU0UBIJ{;1KCwkv^( zqbC_Y;OatFv6ibmSXPLzafowF01`mhEcU2s^Gk^?orTj1 )mm z8&lM5a4Z;??Bx@W*>Yv|8Js||@v9G ADXEWLDZTSESyH zkIrn^EHJQuO*wH1>0}9V4DA_~P&oQ$?r;r&w6W!ogD