From 514e8bf741c96eb94ef44a4977631794af947253 Mon Sep 17 00:00:00 2001 From: moralok Date: Wed, 4 Dec 2024 18:06:59 +0000 Subject: [PATCH] =?UTF-8?q?Add=20"=E5=86=85=E5=AD=98=E6=B7=98=E6=B1=B0?= =?UTF-8?q?=E7=AE=97=E6=B3=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2024-11-26-memory-eviction-algorithms.md | 339 ++++++++++++++++++ .../Pasted image 20241205011824.png | Bin 0 -> 19384 bytes .../Pasted image 20241205011847.png | Bin 0 -> 44329 bytes 3 files changed, 339 insertions(+) create mode 100644 source/_posts/2024-11-26-memory-eviction-algorithms.md create mode 100644 source/_posts/2024-11-26-memory-eviction-algorithms/Pasted image 20241205011824.png create mode 100644 source/_posts/2024-11-26-memory-eviction-algorithms/Pasted image 20241205011847.png diff --git a/source/_posts/2024-11-26-memory-eviction-algorithms.md b/source/_posts/2024-11-26-memory-eviction-algorithms.md new file mode 100644 index 00000000..7e2b59bd --- /dev/null +++ b/source/_posts/2024-11-26-memory-eviction-algorithms.md @@ -0,0 +1,339 @@ +--- +title: 内存淘汰算法 +date: 2024-11-26 20:17:37 +tags: [memory eviction, algorithm] +--- + +本文记录了常见的内存淘汰算法以及其中 **LRU** 和 **LFU** 的 Java 版本简单实现。 + + + +内存淘汰算法是**操作系统**和**缓存系统**中用来管理内存的一种方法。当内存空间不足时,新的数据需要加载进来,系统就会**根据某种规则决定哪些数据应该被淘汰**(从内存中移除)。不同的淘汰算法根据不同的策略来决定优先淘汰哪些数据,以提高内存的利用效率。 + +### 常见的内存淘汰算法 + +1. **最近最少使用**(LRU,Least Recently Used) +2. **最不常用**(LFU,Least Frequently Used) +3. 先进先出(FIFO,First In First Out) +4. 随机置换(Random Replacement) +5. 最近最常使用(MRU,Most Recently Used) +6. 时钟算法(Clock Algorithm) +7. 有年龄的 LRU(Aging LRU) +8. 最优置换算法(OPT,Optimal Page Replacement) + +以上算法各有优劣,也许有人会认为在一定程度上 LFU 比 LRU 更“科学”一些。根据时间局部性,一个刚刚被使用到的数据很可能在不久的未来再次被使用,LFU 相比于 LRU 的改进之处在于它留住了真正最近更频繁被使用的数据,而非对所有数据一视同仁。但是常规的 LFU 也有其局限性,一个短期内频繁使用的数据很可能在未来很长一段时间内不再被使用,也就是说短期使用频率的急剧上升并不代表该数据的保留优先级也应该被迅速提高。 +总之,在实际应用中,不同场景中的缓存数据可能具有不同的特点,因而适合不同的内存淘汰算法。(当然,更多时候缓存数据集可能平平无奇,直接分析缓存命中率可能更科学) + +### LRU 的简单实现 + +LRU 可以确保最近访问的数据被优先保留,而较久未访问的数据会被淘汰。LRU 的实现通常基于**哈希表**和**双向链表**,它们一起实现了 O(1) 时间复杂度的插入、删除和访问。 + +#### 基于双向链表+哈希表 + +- **双向链表**:用于按访问顺序保存缓存中的数据。链表头部表示最近使用的数据,尾部表示最久未被使用的数据。当缓存空间已满时,链表尾部的节点会被淘汰。 +- **缓存项哈希表**:用于记录键和双向链表节点的映射,以便 O(1) 时间复杂度查找缓存项。 + +以下是 LRUCache 的数据结构示意图: + +
{% asset_img "Pasted image 20241205011824.png" "LRU的数据结构示意图" %}
+ +以下是 Java 版本的 LRUCache 实现: + +```java +public class LRUCache { + + private final int capacity; + private final Map cache; + private final Node head; + private final Node tail; + + public LRUCache(int capacity) { + if (capacity <= 0) { + throw new IllegalArgumentException(); + } + this.capacity = capacity; + // 初始化哈希表 + cache = new HashMap<>(); + // 初始化双向链表 + head = new Node(null, 0); + tail = new Node(null, 0); + head.next = tail; + tail.prev = head; + } + + public void put(String key, Integer value) { + if (cache.containsKey(key)) { + // 删除旧节点 + remove(cache.get(key)); + } + + // 插入新节点 + Node node = new Node(key, value); + add(node); + cache.put(key, node); + + if (cache.size() > capacity) { + // 如果缓存已满 + Node lru = tail.prev; + remove(lru); + cache.remove(lru.key); + } + } + + public Integer get(String key) { + if (cache.containsKey(key)) { + Node node = cache.get(key); + // 移动到头部 + remove(node); + add(node); + return node.value; + } + return null; + } + + private void add(Node node) { + node.next = head.next; + node.prev = head; + head.next.prev = node; + head.next = node; + } + + private void remove(Node node) { + node.prev.next = node.next; + node.next.prev = node.prev; + node.next = null; + node.prev = null; + } + + private static class Node { + private final String key; + private final Integer value; + private Node prev; + private Node next; + + Node(String key, Integer value) { + this.key = key; + this.value = value; + } + } +} +``` + +### LFU 的简单实现 + +LFU 可以确保最近常用的数据被优先保留,而最近不常用的数据会被淘汰。 + +#### 基于哈希表+最小堆 + +一种方法是通过哈希表+最小堆实现。 + +- **缓存项哈希表**:用于保存 key 到 Node 的映射,Node 包含 key、value 和 frequency。 +- **最小堆**:用于保存 Node,将 frequency 作为排序条件,以便淘汰最少使用的缓存项。 + +以下是 Java 版本的 LFUCache 实现: + +```java +public class LFUCacheByMinHeap { + + private final Map cache; + private final PriorityQueue minHeap; + private final int capacity; + + public LFUCacheByMinHeap(int capacity) { + if (capacity <= 0) { + throw new IllegalArgumentException("illegal argument: capacity = " + capacity); + } + cache = new HashMap<>(); + minHeap = new PriorityQueue<>(Comparator.comparingInt(a -> a.frequency)); + this.capacity = capacity; + } + + public void put(String key, Integer value) { + if (cache.containsKey(key)) { + Node node = cache.get(key); + minHeap.remove(node); + node.value = value; + node.frequency++; + minHeap.offer(node); + } else { + if (cache.size() >= capacity) { + Node lfu = minHeap.poll(); + if (lfu != null) { + cache.remove(lfu.key); + } + } + Node node = new Node(key, value); + cache.put(key, node); + minHeap.offer(node); + } + } + + public Integer get(String key) { + if (cache.containsKey(key)) { + Node node = cache.get(key); + minHeap.remove(node); + node.frequency++; + minHeap.offer(node); + return node.value; + } + return null; + } + + private static class Node { + private final String key; + private Integer value; + private int frequency; + + Node(String key, Integer value) { + this.key = key; + this.value = value; + frequency = 1; + } + } +} +``` + +> 考虑到取出使用频率最低的缓存项,想到使用最小堆是很自然的。最小堆执行 offer 和 poll 操作的时间复杂度为 O(log n),但实际上,由于更新最小堆中 Node 对象的 frequency 并不会自动引发最小堆的重新排序,需要先移除后添加,而移除任意节点操作的时间复杂度为 O(n)。不过,不论是 O(log n) 还是 O(n),对于缓存而言效率都很低。 + +#### 基于双重哈希+双向链表 + +另一种方法是通过双重哈希+双向链表实现。 + +- **缓存项哈希表**:用于保存 key 到 Node 的映射,Node 包含 key、value 和 frequency。 +- **频率哈希表**:用于保存 frequency 到一个双向链表的映射,链表存储所有使用频率相同的缓存项。 +- **最小频率指针**:用于保存当前缓存中最小的使用频率,以便快速找到需要淘汰的数据。 + +以下是 LFUCache 的数据结构示意图: + +
{% asset_img "Pasted image 20241205011847.png" "基于双重哈希和双向链表的LFU的数据结构示意图" %}
+ +以下是 Java 版本的 LFUCache 实现: + +```java +public class LFUCache { + + private final Map cache; + private final Map frequencyMap; + private int minFrequency; + private final int capacity; + + public LFUCache(int capacity) { + if (capacity <= 0) { + throw new IllegalArgumentException("illegal argument: capacity = " + capacity); + } + cache = new HashMap<>(); + frequencyMap = new HashMap<>(); + minFrequency = 0; + this.capacity = capacity; + } + + public void put(String key, Integer value) { + if (cache.containsKey(key)) { + // 如果缓存已存在,更新缓存和频率 + Node node = cache.get(key); + node.value = value; + updateFrequency(node); + } else { + if (cache.size() >= capacity) { + // 如果达到最大容量,删除最少使用的缓存项 + DoubleLinkedList l1 = frequencyMap.get(minFrequency); + Node lfu = l1.pop(); + if (lfu != null) { + cache.remove(lfu.key); + } + } + // 添加新缓存并更新频率哈希表 + Node node = new Node(key, value); + cache.put(key, node); + minFrequency = 1; + DoubleLinkedList l2 = frequencyMap.getOrDefault(1, new DoubleLinkedList()); + l2.append(node); + frequencyMap.putIfAbsent(1, l2); + } + } + + public Integer get(String key) { + if (cache.containsKey(key)) { + Node node = cache.get(key); + updateFrequency(node); + return node.value; + } + return null; + } + + private void updateFrequency(Node node) { + // 获取节点的频率并将其从相应的双向链表上移除 + int frequency = node.frequency; + DoubleLinkedList l1 = frequencyMap.get(frequency); + l1.remove(node); + if (l1.isEmpty()) { + // 如果双向链表为空,则从频率哈希表中移除 + frequencyMap.remove(frequency); + if (minFrequency == frequency) { + // 如果被移除的频率正是当前最小频率,则最小频率加1 + minFrequency++; + } + } + // 将节点添加到新频率映射的双向链表上 + frequency = ++node.frequency; + DoubleLinkedList l2 = frequencyMap.getOrDefault(frequency, new DoubleLinkedList()); + l2.append(node); + frequencyMap.putIfAbsent(frequency, l2); + } + + private static class Node { + private final String key; + private Integer value; + private int frequency; + private Node prev; + private Node next; + + Node(String key, Integer value) { + this.key = key; + this.value = value; + frequency = 1; + } + } + + private static class DoubleLinkedList { + private final Node head; + private final Node tail; + + DoubleLinkedList() { + head = new Node(null, 0); + tail = new Node(null, 0); + head.next = tail; + tail.prev = head; + } + + void append(Node node) { + node.next = head.next; + node.prev = head; + head.next.prev = node; + head.next = node; + } + + void remove(Node node) { + node.prev.next = node.next; + node.next.prev = node.prev; + node.prev = null; + node.next = null; + } + + Node pop() { + if (isEmpty()) { + return null; + } + Node node = tail.prev; + remove(node); + return node; + } + + boolean isEmpty() { + return head.next == tail; + } + } +} +``` + +> 和 LRU 的实现类似,关键点在于自定义双向链表和缓存项哈希表保存的是同一个节点对象,否则在链表上的查找操作的时间复杂度可能退化为 O(n)。 diff --git a/source/_posts/2024-11-26-memory-eviction-algorithms/Pasted image 20241205011824.png b/source/_posts/2024-11-26-memory-eviction-algorithms/Pasted image 20241205011824.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc211d2b40b7316e08d8d67cb002853db7faa7f GIT binary patch literal 19384 zcmd_SXIN8P*EUKOX@Vf4w4frWlu)FXsEE=L5s?~fphy=)T0%z<=^g1!K)Qm|(2*up zI)o0PC6E9iBybkGxBGeaIp;dp`~5h7-dwPUc`}`RE7nJv3fR+G`Pw5Naa!a2w3*W!}`jr1;``Zw( z^8IDvRr<`Y`~@KNEr0$?2p}AD^9B&gEr1`t!lz#OR)5_2efck*x^|Fb4rLa~rjm>- zbVO>(tFjlwlrM`w_##q_zTXqBH<27)A^uz$0@SQS5da_n)jHB5e^cJ(jrG7%-_Y_v zNK8g>Y|s@!a8>Kiy0I^nKRzAIHp02s}?2hP!CjWtj{?Wz# z3w#&!P4(#+==)q2`&uyO%%;Jg>#j4t>g;gDC z`BiM}=c~J_6>g}6)wqOIzgE-I@0j>r)>LX>`n;lP@V2V9q>MuM`1%XS7bee)+1S}! zyx-LK)`usDmm~UoLVfJscz2GV+Q-_I)szR92J)-(p)a8IofDrbb1z-K+R%@-w(J_L|5wZGA1?OZ+eFTpc|eWR+xlC(&*`ADV}n-g*W5hb9_7 ze);OPr{UvAklRW=!Ld&6{_tR!w1!}1dqsGvQA76>JiU;w?U{z1Eywz9A`yDZ z^cgvj$xm6g6-p6|$Q!hCyu?@^t-3(5%WI)jypF;Nbu@x)(f33+tL=uf;=QzXazPBb ziRN-O=BYZ3d2dq__G^<-YwNA2yBdjPWU3}=w{JdpJHFoN4LBw9N+ad5=K)ja|MX$L zJCko69FmBNP_mSJpOJ-yoBjr zop_vG`~M#ddE{M666Kiv9f&H6)-+g(^3E2V1$6SHk>4%5xy^x^Yo_1y?v0;uVqG2l z68UiOUQ5E&jVvNu&_G1#$NBpBb06CVr~`=Kdnxw+dLlP%ABae$2HrIG|9T?NEp_s~ z0NF0T0sHIe#z?Y>++}ytr@cj7RBiQnXBY~`i?DiK$1J8&W$b*^M~EP9-_A`+DCk*)bF678JZo zApwszGA_#dtA$#D?r@ozj4b(HZPr6g7ouwX_kV z|G*l2VWj&b@yD)^jY=zVtVYmpU@ha?l{y|=;TJ8vZS1wW=aavKsxab6#}SD1ZPt2I zNs9dF3z5i#InCXGBt!7S_j2{JSWBA+blD>v_~3!HS)^yO;n|mpDZ{A(3(IrPF`Pa#^$N0z#it->-NawjF);7#iPwqyM{N=t~#rGOD^tshwZmD zkMlav{&nRqb-7M9VL*(Yj074&v}XNg8T*A`-Vjg;O@GvSV^R}UJ9!<$B|P+O<*UL9 z7Z<6qXpx*%#SfVsv+4N<8^x<|2q-dyNB;13#sPnF=)mnfu&-;82EUQg19eR_WIHLP zd(^{i(c9Q&)5O>{r&yIhAq{q3N0TD3SndtAPRg6zfp%gG1XN zT69#pWIpPS!LtV0#yP#+_GBf>y-dP=v1u8WcqOl#^Fv*J+2Bg+2yS?Zrc1ANafean zo&5-Yt^V%86ct|hM7M?8D=a0oeCq&ic$o$oD627OoC-aYUtW=-JH(Nt0$vs$)QCWA zes|6UDFEC#`KPW_P2;DN13SNKx2Ehb^FYOon}-Fj*FBEdlBnC+7Y?0hwlCQQ7h6gK zNU81+x?;t;GerB>%HM3nB2vSXNOg9|Z#*89^qdAtx=Pli? z;;W4KS3euf8bp9nS_pF*ME!;3=6!avoVa&L_2eDN2X|&IE^Ha3AfJ%c1%wWKrK1Uy z;vCeNf}dHvdlsSuq~?xVE|c~Tl=K1iN@M@C8HRS~MlhwT++a$3FD?>uK)Q{7c9odF zom4pM9MJ+*fms+d-vJ_cK%`sz)cQ2r+Y1z`zwD56W2|Pu&K0(~C~nA`W6*MMG4cnK zgV<=wbK-R7;41rNp!Wkn#0{&S$9*@(4rg@&^u+2e zhF*(ug84{$dv~vP7P)(ZUy=`=f2h8X@h(SQUJgvzo6yATFT31>u<^(>6>~u*)xP!D zYJzEj`Qr7&G4mWXBF8M#eQ%ekQo-Z;EN`0X?G&dgHMP!|^+^lKN?1SrWBZ`ZH)t`b zx@ck_c3bwHN^fyp-!w~XBK@pEB2wc7R^ziKm>W@RSN4YUm7SaBnU4?_ST_FV_o{1r zhu13LgQaRu0h+PblAT5yXJw5HdcBj`aDleNHJ7$D7sN;wTR551(EOu}ob@r8qJT*?Pu0xq^lbcoEU)AXN5z zZsmoKCbl;+o#C)g6g(`j=lDjk&wA?)l66B{Bc1`deo$K2iybqtMC@ma&b&Fhgm`2y zif!vbOqOyK;c!fqwJYle?6QVfofA>co?#6)?RRHQiKqnO5+8;F>`3joDZ$I;J5iE1IbIP`DMr_7{k}T)TIU`h?E+DmrI^r{i`-r z(&5%}y;8S75{Y+^1|WdLbz*hz?iDt>7q1R?nal9atEUPqOy+?A`B9O&3T>XZ9@%gA zlrM^;;jkJoF==2**xM<~prtbVs|6s6Yiuaq1XDyk(qqs#3G{kU;|v_!-+qDniwCgY z$%P)`uRh=?x5EsHQ3+pRMWu5G;K`dfYJ@)jLazRGq(;4da+c!_^&l&`SX~0z%X=WHEB5joc|4z|v)(|Tw1}r=oO3*=LUu3Rtz?Vx~d+e|$ZisRh znt~vzn`8k{r`P>Hu|0- z3CX-gwkC#_&g~v6$~5M!A_W7$we;0W+!(igz8j(?kF!y2dHq@!f0G91BBo@OB-6HZ| z1#V*C?8tyXyDaXtg;{;?!(ttwI(1SC`&Dq=wdLZ~YF1Jr)+G<5QB2sEe=Cd>%W6@&tB(Ci-}Hxc$;HEWTuGT0$GC@E+1kaE&# zCD>)z?)&a${!gccNk?Ku&#k=!@JKm8=|D`|1EntqpQuzDsT!Wy)1WlN*&)NS4XU7E zP~}HX#UHCaSb-IG2KyuDy<3o%5V*~JNH%-NwsNj;t$}ECn_@XG6M2Y?73iFb^97;~O z%v3T`NIHl_wL;UP?YR=XFM9Cy_5#jwFfbH`V@*pH`=#MEn#VLX6(#@3QtMw>xpGdk z<&FY%ZA{#x6@eR&r@t7GmtvK3Uo7n!=?~-6Gmp_N8Ga4(z9A^b$)k1TUmf=KAG47N zICcYKmM5hb@OP200W9bKo9v$53Pbt7h=!*BLmL40!k&}+?f37Da4Y|lhu(7p@?|ln z-@*TJ7ZCc#IS?b|kEbgk=}72*U59Guj2A=aC z$m8*?0YJ)BB$530Z5ZGl3+8{fp~9QB%a_Bh1UIdav*lmjJ+pp}S)3dct|sH>i%q?) zI`F+2pPPSrEZ3^=g2%_MDMI5*9#bIE6E_f|1XQIrOf>m!F7gDyAIL8wjy@CgajF0B z^HdmcFJaKtiC~ik{oACGW{v#XBc^+eZeDc5ln+XH(tLKv*gn%-8IAh;^pm;b4eCEy zK8mRSnE{2iOpOejv`L)%d~d^7Q4t};6t-7vHwjS^0{80p9~^{j7R9c0jX+JNMWkI? zkw#NOm59n}v!X8pOcq<-*D4ZFHU0p6vV3n*@^2!?qv zJ&d3Yl>`J20l}L{n3vAO4~C&)o>NdCMJA}P7DPq{RLG*Y?hcUQa_6c)kp%PVedzzV zUJKca)m?eQmS(t|{s!(Vyy{v&vAG1KL5zo_k$;S0aP^nfsqGoieOb>9C=*-LFSl31NZdaM zM-H9K&er=BvS2C4K}+?JOBVnYNTq+Vc|i-&i@d#Rx%knZy)j`N(h0~UAT!cJjcZj2GOPRm2voKL2(<8YZG%nA zlR;?7g^QjW$m?;RFPgzM54d_Ap^Mf8hiljA53-6v!-nUwPee&xz?_;M}I-&9`p<&_he zqSs{fPSc!q*vyh>pqEDi^)=42}y#W6RB1Yj1qy z5Hp;Q9dZ%#+z5;K1*sYhir$xgCQ<`ZXt2Q7ADVU-94khzf9kI1#uC(#(kP9%X4z4m zBT|?9VcVX)a-i=FwTKa)&}+Lky81l<&oQP7o4qCj427=vyg2sZ=Q&GwZYC4Y3R4Bv z#Ei$kc!v7^BDKZzhesV~(*AHKyBM|v!^+2!#s_O^NG4RxyEi4Y&_;T{ zF4~@tNhKMDBsD0(M+;A9mgW~S+Wn2XU=@ixD8!j+$&dO0m~>Szd$XexpRHfP2jWQP ztN`K_%ayzEvO&YC;lnJjdn3OGHTd3xJ*K1E0?oUCWaGC|;aWR9Qg3$qFblmp{!2;J zdx|W6=JpG;4xy-!+xj?^!54RKYz>;j;R7zukL_sDH1{r2@qyJUb_F~~zOq_3Nw1K| z=vuuNp5L1#sUba*0VLmPrZi1vRkIVCB@k4SmFTFSUEcxunRgT&U0y-EBkD*R)WqX@ z^8&78IA-n>k#XeyvBI8$YIGIBvq?A@S-OKgX~F!t>_Jrhr6r~c_1PpmtU*BjP58hK zX1~YRjaAAxC{MTezn?q`X#0?clF`dj&aau4Z_?@axQ?Q@pyPN?w;r%vTcw&fIh*7P z@wy!m4wn7IhXxqFTBSB#!f-!^c%4ZPmzMp+djtrPt0#=xFx)R8UP`5+4vwPb4x2gz z7^`(clS>PUOpdB~y`wRttp>4%I=JB3MP(d-;RaBXGShE4ibgpA`J$^(#g8+kxyw9I zJ7pny2tckjR$TVjpuu3?o`cAq8&d!pvt(nzH7g|xWHR3cMN#K zSRU}f%*+_P+Hv#F&StSKLCR+%TfOA#u{C+=r*N)?`+JA^*>-}Xu}^-xn!GB+N8|bp z5rZR5YTYa;^e-lnZL+XO`f^P|{c&v8#>b{ECmA{#=c^F=gL_=oG>vCz0gg^#3>`N= zF4Wy3*wRf)H&$E)T=z*{*B0ow8M0t{!IRo97h`(%fE@RpvE$~ug{e;-1T!kMZb_l5 z*`Xicgh18aJ6|2gWqrxjH#nzwrcT%+%!mC3PMp3&{uP04dSb5zzcB?$nTEP}l)ALb z(NgK2yF+htTVv?Ot>-G1Pi(-{m(fSpGCnAWCws34xLfwRdR^s*Z?RF*&$v>KsZJ{m z?m1k3d$$fTP=}$$C`&~~)G7jgxQ`Bp*8-Q>XX$6aUEe$A=;pK0%T*}BxAW(!5v}*} z6nGhGTEmG{r2zwswky1ey}|OGTE{@>b8Tp&{5~mW_TZWaxrq8Hv0IcKN%w_4snI)( z$W#pVIbm5UT1GxQs{>q}d_p}GWaqQTV8CQHOK-31_>P4`by{QyfPCmrdn~eWJjn`( zijGAo%p!07!8cwzzB?9)`~*ZiCpl}I*wZe^QqcjBBUS*ty(XGsz>DUoh+8UNBwaC2 zf-MZtZ2RTmqO2bs+s)m(nW#aRt8X)pHD%OKmEKZGBlSNc;Mi)f`WWCT$_@Af&C@TA z9?CT1P&GB4<8;$~je;KD=LMsbzuY@*4>xIlQd2d>*5ia5jw?AHF_cq1HQQ8@c93Z` zZXQ)n>kFVr=<(l;j*4e0=vYCT8cki_sfe{`9uL^<5X#4Z=$;ePCIjhMt`gV2V6v)a#C54imD77@2_ zg-B6X8+ul+L=9PY90J=k|6P>9%KUSucpojo=5e~B58}C6p&5Y&{pNI1r~~4mMHBnC z$&rOCM;!aL?>vr8vq&HO!1e`VvS&RaOw5$4=K-&}2b?FNGfHnUj z`NL`E`UVlhjtEIcunCc3s&UtY@CJ?c$52;%*9ff*!gqZgnP9PQN4VfbCBCZg+iT~zTD zHrr8`;I~XFkv5G|*~KL8)AcvPLKjxzS>kM*?Mk!&c$z~vUg>b;VgrR@N590?qVdH_ zb57s`$(<(l@53=%rh{`Cj8qdkz=w(xP3)>ao1~NaJw{DVL zb<>G@qb&T5QUm-*gUZ)I^aWKJ--<2*O{F=guP}deW(xP-{J@MLj?nc3lfhRtL*<~7 zZw2Zuj4oxP*L0SoeK6EBYIPmDXh9lu1``#U0@X#dz2HHvaAVxfQPX|rWuU`4l#dGC zggV&WE_e!4@dJD5U!H(DYRYu^A;X(p_4Hy+x68f%(}W=!lnsz}gm)}Qn z?IpMIiO58k!a46^iewQGh$=D&7<{i5DWvT<`T8R3Pvf>joAZq|n?zOQ@+A-N296EG ztc7o$*P>d!PE+jm7Vw|0jp+%)B{zBEr957cZ6@prJ#?IuOHi9LvLioOe!$XbybRdV zngkZV9ltzdQs8n{Shh{al7*d%ZWNLmDc)#|1;%Tt7?GcCX&OqiDBs6%Jr%gFTSvW~ zs#iF~QoGX&+*(Z{q#aEfiFmjxNs^6la2vKPTuB|^b0~B?F)upPVJN$xObddH1Y@th#`tn#me>(_z(6{BC5Jc|rK#zM`Dx#7wIc#3O1~Xq$n2 z#LcthQ-_#`QPj5?Q9sh_ypHj%BA-J3`sKZEIIS}ilb9Y4Lkj#)RLdNHdtZ>&12pq) zZ*~^t>vPunpPs;&)R00~v1C5yXJ5IsD|3;Bad?(}?{M(6I?j>cda6cps8MC(lCc)n zSk}`$NF%Sjsd9vz$$^YZ+_P-7!@HggkS3NXwSQXjL9wX6gAfTIibmHw#R7eEZGOMU=UEC-njAKx( z=;~$&?AR2@g`g{m^UfiohDGp5)x=fUV$J!x5`jo&LZMKW*u}pw7oQrI*@{7+4uRQ z`$ogA^r|#3;Y85BhYrSBee}Z#%>?}#X4%+L_X|72D-hod$JsO98|16f7YSxxXF8{C z8uuPL0!Ts$(f0f{4(gBA>N1ZQwy)t?sVn%8wd5kk+*Yh0?BuJEiW1?P@DKViGTF>HoY zriZfP_OzXiHZA?B%Yw@%E}12QzDlw`#5*!F`F}pYeByX6ctR#?<~4(Dt`pGYvh^DHodV z#As-Hq7HoHbp1m|L3dY^(L*lsxyF)%N-t^qHIQ_|i`%bks!t1J>p z6FU;V+k}ojEamiSRHYPEJ-a$!iEw&3L&FJEH&i%!fQyGbI=VVk#1nr}W$ETu8)g{( zB^wMnFOaL-0DeGxSa)#cT~6dyk|7ghDeR-9+`&cVgXDml_}N@Fyk{PCegE?~#&`-0 zM!s(~4ncOi;l+h?Fg0Oen@+HOAc2JGZ_m`Cv>Vgfw=Id@AKEO1Co$)UpHo_bpZ2MMX z1iR7DZhX&%rE|?`n12{Da(^QM8#dnSDe#)KydP-$y7!7RMEV+jHcpO+%YOkmA9FAx zOr+Z`KabcaeYWM>8hlKQ{a!4GSm?-HTj=!s*bS~RDImF!>T4%I%>+WLF@vAyNDD~u z;&F^%4U!`id9*$yrpej?BSq)m-7a~r*u6;rt$ErtWHJSn25cQbAzM%3W|C{-8*?pGPL3A_ zS9|!TIr5SjVfY?)SoQrGmvFUeF7Rk-TrnS&kw)Qo) z{kxZ?If)o|kzX!&W^;vz7{R>IQ5a71>W)b3u-e6L?wG?=AbQ1LJ|L;Tuwn+ZjjfkW z_3lr-F8%5fiMPrMvjo`e&*lmeG1yo}I*5ZYBk&mG9^o&U^KuFVJGrApJKje!S$viIBQ3v01yyehky z{8h$3xuKX90I+RvX$aATvxTGwfZrSc5xmsciXuWPp{O^z@(HF{=i1-(Vn2xpu`psH zSkP~=^KLckT=|ayKkaNOIkQSRZH-HRV)>29$^EoOB5!k{H*qE~RrNpE(Q>Q@gJmL@lH-op|w7{yQIeP|C<}ZthKYn=qvUo6VMJ_)BEfEr&S(*WVc@&#*IxT17b<=}u>gU}8 z^BO+h9H)mNOu5ewKzkGREtaO`DQ0veW|$7C8d5D9Kt#2w=5Dl^isbxHd5e111j>I# zXuTjkUJyJhRul2K+c&+t_u^|ZVq+>9evkq03n9nkp2yI@pYVud*FL?ewO9&_kR>~u z(IF$gJn=^hA?i{IzazP@?4bZUh9ZL}lEX0qWQW%&0oCqH7Ka=^!;8C#S27dW=Ihg3qX zD|Yc10R{NyiQBu?Respwc*jJK7WN5fZnXe|i(r?nF<-Zk1Th{8*z^-8MhZepzlhYVyeRk@I4pFgde?J@rRHn-w!o${CP1He#>gY;1>Gg zfkr~beW}bo!Ce73ce{Y1GCJ4wZC=o}i=LKc!ujp8k6sAobNViJpAg~JT!Yk~AQv=D zx0&Sw5qZjBB6V&gKhv7L%wfm(s8swMLBcBcwggjM`OcnC0#ap%p|0Phn|LupvJkqx2sJ(3NGHZRWc>b{+pnS#NmkWH0mP3yjj4~GCQjC+ALa_*;e)t( z%<8hf0O&G3Nj~OAF!(bh+d3!RrQ&c?0&8rlj5fBY2laC-q5~2|_PvYlOU~%{^?!NE z?4}D(A2k+;qaxCZYHmL@n6b<6t3i4r(ztA+!ZaC4g62<2Rx75D;3H?;EZ5K?5{Q0D zT>ayvn$v~4hqhU$p(_MJ6`Sx<98Cw~Az#)HN2l`u%8P}iZ^td^9jmpGn0z& zlt$$BbZJun`BBnP^O%D8{jpg0UMiCO&pF03&_{5`=jpeKhf+Pbuy+BrcS(1B1mV&{ zPWn5yAM~h=7B!~YTi4UoeL{%xiC@DtrIKN{m$Ir&VYTG&*=6ZxiJu@SedUSmkbA5A zvpQ}Qc}Ya@cGtQxdYx3a06E9X@=|=FBxoS%70uz-%asGSs~!>iwjrzCF7&b&tu`u2 z6Q_oy=ueG(u(onsk;F5BFL6k8B4t26bcyToW7#~YZOpR_e&UC{T+vR`z}j^79f7Uo zfiVL*Rt)drySG*OSa^^>ZXP;~OSI|tdN`aE7^g0K{|t*+-r`e7 zwULk@=_rH**7seT3BF)ddH(2URhJnjT3NsEr=vRT9wcnLP-JK=??oz=sd*EW7oHE& zUr`~^67w1vgQYpk3*ABKF8X_@F!say#w6SEpi}lo*}7b_$^%aGo_5a)Htu}>8G0&kn*Z3vExXzU z7};_DOwq!y0brH_85~yhoxuy>q^){tH5m_|9TL&Y>DP|6&)V6aTCRlW($;mzFb)a_ zFw~7Kqs1f;Aa=J(<1CDc3cJSj?uWWPbGs30Z+kz`2`FC0)mtvLpZ@0-=GjQfG-?n)UFR&y1q^Gum8ZHh$ zT$bz-#ISd#8r7ydE47n2m2e#T+k+KN{?lvNy>|(S5ZXG}$IotE^!3Dp(4|NQf89N@&+g;0; z$>OFhum{N%5+TwIm4OetPC20cnxLX^tF3^+*RK_iS4c-u_zt@gu4rsQz%)f1_hS+g@8|=qYntU8H;}u&H^f&Mto6 z_4ZT3VMspVwL5>Vwb3tjpY0&-2bFQn!g#jC*@o+p<#)Qk*W-otNH<&ms+B;6tuJJh`F#+ zwJ7rmSKjftgOq3VHh8?*vixFC(qXZ*QJqx=%Cl1z5u;Jc2N|2GVK+LxHrB7etQOb6 zNyR#_O1&kqRQYjCdxh!@{5$?YAudKoa8QHTjrSgTtGJ_h_66+bmgNr}B-i4aB?sgl z5%;Fw*6s#Tl*pl}_todLSG+mJ#iVVfx<>ICcXrfTz2+Yd|tysSC%3U z=TP9-1&2MvZY;)#GYmiaH0UMaE!cA1swNiTgjiCoaMNAG{pihb<&6~amOg2f;~9v5 zyx&NB<)co z>ZIOdTWo(=&1#iuH2M=aH_wDj!mC81s427IL3dUoIkEmP;mry-h$ zO)7#m9FU56ONpxn(Z?e%rqha}yEq_UP#YPWrhlx^XD2VBb)+i8?kPZbAih= z0%>^VEqTSrR>ofp5GyuLK_DskE3=a7cWq%Cc-rU527y3s*1nA9)H{i{p_$^R2QbRq zDV1m|x4jOu(lSx)Bg+5qwd6~;3%qn*6su>mJ`T2Bc9Li96k2QX3A>yyE$|V0P<2LQ z+n9|Ml8CW;q>;bfAYgjYZVIc-^%sX`%xe$B$+UR0Im=GFL0sph7N$7FBGb)t19mBpFPH&{^4tkME{WX0k`Maa$ zZaeal9uqgX`|~CA8M9L?N?n6SJy&d(?thjd(=#rT6l1w%;i z9BCw!O(+hWo=%GyRYE;+Z9Y?1Z?vyPgf*jQw9trI0r121rE*)hBYmQCeM#S9b&<#Y z+eA$)yMoS^><5r4teV47l^-^-RZhoZK8&}qbd#586Ss7$ykh4ich;2fd8M;h7-W|? z?JHy#p82!=J=rPTr#{!TD3RF8p&M@->Eh|<0%u)h78#EMKnyh1R9h0khyl%wm3pbh zVvQE2C`5BuBjExE#GZI#{E7}Soam$zB?&W5Fl!GCWxLd`6p@v8Sc+aXSc6Hzn>5m6wRp| z^ig8SPYbSfmtWwzt@7{0fp6W*Ob`bh{%7NW z*uE$chWY-dGM~0WM*|D*0bllo1(wUULgxZS>sr7Gz(!r~+1b)v=OFy~Ej=A~C-prD z1LQ3WHR%JpW3&K3K~8v-q$LJ}<|fPsO4fDJ1hiQyCu%#F>Ws1){Da|XLnI*(yKm@15>oN){J%WtnAXkFPO)?lv~ zQu+>b5&p_C=f)mH2(f+HTIz%rb5U$dZ%FFA@>8?RaLerOt>#2Ce3}0a6))!mGji@D zL?zLzq=5SF^y?y{s5_NU8;hO4+NYNn-kJPNMZ>Cz*88zvXcEkZ(PLHb@qWbPMkTx; zf5Cs&{0ur(F6wp9)vabMW#ibp)T;;?;O#{d-^eMj2xX6_D&{x?k0&NmokSf5E(^fe zVVV3}5(^{d_aNlLH16jY02x=q+p`m^kSu`T|;ZLvhZsg()~7VFJ<> z*N*+UBk{dgm33dk%MAg3lP*2End5S_?;iL1@RXe!cHaD#9x z{%Vr9^vKa=B#B0a*cWa{haYHQp<_nyMES7fo#SyE;O=TH{>sHr&!+I=Jxja%s$mi@ zEPyDb1#Sh!rrNp%fqYWu%Nez}j@O*IADqCVJI}t;m*sqi7_z@J7N8KJ2IFU8v9Iz_ zF!|Y5(m7hHq_YaQzgtnaUDGZL50a?Uby;1d?hbOIjgJsim#PEHF7G*Bja|s)i(fx` zg{_w|@)UnQugtkt&P~JP1z?WGr(Bo#cpnA4?>@%cZ0=n@(j;o`H-;N|XwSEwCFU$^ zM!9Pe-^{jK^k{BN=n8+KRRKS7SxVMIo9&w}e?&ATOusv_(s?BMn8MS~`Fv8UoFmX7 zfp%*%>))2km&x4s5tIkkF@XcO0?n)!h zh#1HNG=M0g{Pm-NCk@J#hNqaFRrY21Oc~JB2ZaEO1@`BEScDUK_MQ3l_j1p`RbjVI zHC>0L?W1Ow_x0ui7e|N>0%d)#SjMIX$$@UgfHq!JCkRo6>u^D%lUn3Iwnwq`Zb9z?a zJ&bX^d-yH7S9w4M8=E^3%?qO?X8hBUiAdatWYL``z{14`5v{upo52I5DhPUWm5d1O zrw<-OATQ&}yL)d_9yGH(-Q3UJyixyIbScy-+nFXr-Cba?1`d;k?R-|vOL6#Nw{Ty0 z?kgx^(D!kH&q8(!X5Q$20s!wip9 ztSYx-l%{e-*#BTDvNBIexCT#9$9;TRJ} zp>t3N!At5K`1|;c4I?IaK=v?G0r<-JK(Wx@$M-dqk9wPi$z1+D(B)21Z}Aw~F!)L5 zZ}7id@OU8&N5L4;)qlGXoUuE*OJnkZ@F%R_A){6W3qS(c8y6b9=>= zdi~2{lWugl4ry!`=OCY!3ezRTWT(Pz{yMs{H|z*#IU)0-EVQBL z(QN{XJqv31=jd`5dALZr2zxWEgTUtg4Rn)`oV8Z3yF_WPcsBCywEj+UYaPY9g|58U zNNM=Lc%fNFyECL379VN;LI3TklAU{d_a1ozhygAW}>-*&1q;zk&@4iFuK2uy3fqDRZ9K0QmjBTXTWMz6*Dl8qR zaojq;2W(H;k7un!8>FnnyFkB zm@H@+u3*aU#0Rn*EuS2+%w>VW3fDj&dH%nFj{yuSk=8~OBJEmRZE+0)^a4?CSAZg2 zAw>ce^gd?6cF>b=6NHYTh8kd*NO?CmcgFc^3oUFkp3>90tyoh27Z%rGSrI&=_MJg*L9LLK0h3*`kk zK%HUSUryLhpIPTJ-`MKFS^kTh^S<+-#Vq2A67{Hulej0xv9-oO)+#X5ucz!KZ0RKH z$sZkgiYs#d3tke&Ek*Usmd=?`l;|u@`u8w5Y^s9Ve)J5A*?evG89^o*h&mRC8u&vE z!etEv9Z}AXZ6^O}A6vs}Zxjl34;Xj^4E$99!lpr5^8PLG;}nW+G*Kqu@YKI@hlKfF z+z_GsD9P<|qJ)@jGhxP*-2|f{pn#@_C;#^2yuWdZPBNq6V1=K|!v?xJV-rSr(2Xwo z3AE<#3J-$sslY-`v~o~zITP{(?vhp7uua8o)w~h}I{TkapxbY>zgNO2cj$i*5?qh1 z*svi-98{$IRmWcu75ITl#IB4hB`ftPP@5MQ=G0KY_EIOT{)+b(+GiHnIul)`PT-M= z!wx0^(*3m?jA{d~+0L5meBSF7jmt}Y9SDN)000{J zePCNxNH_?(V1(pDEs6_$>0(zS40rO!yoC2tL5L=PAXqF03+y%-8l6RaOFkQ!l~mGT z%cs`*a<^W5*3Mu)Ff|I;*k%6Br)!@5D+wK$RdY?~)2enP&J%KwDGv3?`-Sov*r_?+ z)N6stxD~2xa}q4U^1KwC*^-W+y#5>Yx9(cFr@ek)zJ~eqr8IvG(A(sW9dhBG@@+8D^ zHm(TTB6Z!?>HN~@qUyX0{A4B1S(&^RJ}`Kmf58i)b&?gEMB~>>&rS+E_Qb~tF*G7G2y=Q>V9c`LZQcB$^N_J%D=p+&E8WC4XB*@ z(K=HrM?d>n4rJm~UD@29IbG?zzJFz|_n-X#vih12do>X#?({902yW}u`%ge%DCtAy zExiX^k}UNFz;?IgKdp^k+Cfmaq1AJ*Bkz1EN;Kk_?2<}(sQtwf4MgPU|aee z{7?@6Tao;K{vUM!3nq7a-d~0bN8=~+|IZ%-JX|ctI4225kc{r4B+y6)nVL~blg;GSa6VlkqmTXx<_FW-lH}*+(*^(G*_ADt`hh$gAF1zge zzKmJ??!otYpXdGScf7~@-#dq6j&aU;e$LOiT-SY{bKP&%p2$NepcEhw2%@MUrvU;{ z34uUo>&Zz0Nx%m93a0b+o8z!$)ym0!N?2_>SW48SLH3o0kR|LafSA?L|wKw*=b`~*|ZNJPyZ#wE`7 z)I|pPmS6TJ1M5ZqPlg(=q|TlreV6hK5CX3rY4!vVsLJf#Ir6hDYCNyg_4Irc0l9=a z&+r1Sf1wZf{2~%{5>C_5PYG#>xA7q_U0-l;bM(xi`{sMgo63Jp{-UI!)PAm2(O;O` z@xHRDKcgi&JU%08@u+RztIxp2-~)x~^{c zTlG-s=dQG%a+~&{rO@w=HA7#1j8W)9o6#sZX0Kt-npK%{7NV9SHDNr z9&0LJXXlhtc%rDHWniu!5E+2#7?o9&ar1YLPKkDK^@m<%Z0VazFHUP7uP^P+N@)tc ze)Ia5pJneeN)qb*x$biPp6O^BNBu=KlkmH`tp%crl|hE|5w_U>X2#6DNGhb4wK_W#h(F*3C?F*JW!+EC)+6)Yes8XWn- zGa$m zJpO7YImH7-#3CFcOrJW*Haru&Ku2L7`b5uEui=BMEeQ0>M22edk||I^YZr|tnxIHW z+eN>py%VulE>BnupfwYuP$7q9e1Q|{qxCMVbO~2KMc&L3!b#a{J7s*5lcRh>ZD%ag z=vT|XI66?PLe(6yyW%h;F3Fl}j6>?U6Y}n-HP+PTr=;|T4q|P{uwPde7djLrUR{20 ze+dN2b5@j-e(FBF(%=se0Qsfi^XT({MfpE{8ShO>9ox1ZeWiV>^*??Er-+xo0)?8g z9&|`9?si2X9$J1A(EJf_4g{L4X4(iH^V3-Y*O-bZihRQg|Dd`Py*!mGl%ir)bCC8j^#)=3BG-S>@h#jv0N492e;TE{q#QJSe|1f zg%UU<(R{3YEI;w(cN-u{l%K%YU;5v7I{}k;{TSGC8~MUv%O(qniXuVGj0^OcEE_;j zqG(pXOwL7sLc9=4eaDTYj z4yhrr{`lsF9HX=e2E3on{}t0xw>5EFQgsISa~DHnijE8!s>=`vH~lBsGMYyjQZDw6 zEh;h!D;^{(UjB3e>A$+Bk=`+GQW?M z8z|+8$M;OZ7O8g;n<~qcIF%=X4`@dQGgC1tN6NTh<&33UTXhYxnvKY7-me*%2ywcD zoNp+7LxlpWRLiMU&Aj1Sj`=&hrm=Vu(3+V`Z##PRhR`Lmt3C1Be;bh38zDEOCsxx4 zp%?jr5NG6q&}nZH?{pv0KtUjC6PMn1E|x)PwV>u0^#qZ+@;v@^O~gy;U7hf@I2tHL zG^@}8Kh^C<)9^!CYY@mgv|B~_uRsvu`o`7SA&HF~shTXNrE5#Y#!K?noHLMgX-X^P z5h#;D1V;kkRTp{Ar>B$CX5L5LKk#}#=jX(%=G#O;3&?6oWCAZtZv;N*W04^RO$vtF z>z!HqMxHLc9&_7-7AM&$F`INj-FJyth0r0YM1`!ebR8XSuMZp?qgV5G2j6$9 z?)q$r20Z)LleVfl+27WVPFq*Sy>HS+fPH-VGvmx2Qt7_zdT0EyLn*Kh71ie31Stl( z_e|GIy+~g#$9#TM_SW*U$*sSN7kYf?^i?gajoX^*0FYwFt8Rg=M|klXEpEs#!N~>d znqq_APaOOBGg7NVCh#-N!{goh5Cc?c!|i%Z<)muPQJYIC%ZD{;P+C1*azag|72lQZ z2<|G2Ws5lndZ%9panCd&c}c;BV^skBI_YN>D`@*3hY}xiCgBpU?RNWTi*)G`YZtz5&8CqaPbg5 zw0$GdYC*G|gm4Mp7F)wZzninrb$Om+l>%}T6ULd{yl_T8LftnCYxk{5Gq7dkLFwY} z(py4tc$~s-Uho{26vVkv^QpB; zFybBVwPl=@*c%iX{_VR=73=2((#B%Vq1!n2<#tkR^>L| z{xUQRcP{-9v0iUP>$~HYntncAx$J0D=Z6Ted8CDY+Fjdz^7ALt^BpVM`ULx&>;d`b zhsI9UH2W<{CPQyfTZD_d!6`eF#qVKoDbJ!`6cAHFMnt=DYh<$kA$Mjg{8lbX03XHj zYOej1GvnHOHK&fhWN{Ac_JzJ<63x08B^U@0Y{xp^8V;Qkaz0C- zz)~i-`1a?bfO(=QMx{5>8i2W;u~jt z6Y-m59~k@e(MR8rKa4gBEqQ;nZUA#?zMWo8^b?=k)a!cX(>J>%U*7aXvo5GQEY^NM zm>0#59GbaTXAM@tu3ev7pDL*l9zY-v%ggI`Lu0#Z8+-ZkD1R7{_%cJiIec)#f_+AL zgu!H%ul=S-N{}DJmWti3G3}G-$GsU^2XkL6cCYnwd=5sl&a1A!_`s|Y_{rDHw=)5L z);AdUwXxCdRzhC7bQNJuZ-@JUdoqeQ9!VJI7q!iPlux*RbnrX~43he)62`lg`77yD zli7GK3_~ju_z`6&V-&fB-f@^-$2nd+;GS{#L};KQwD++Hif{`VEEkW>jzwy+nTAhS zJjJit{5g|O0#eiJU5eDQEOV~*`uuzwAy9faQ)=aDO|z48Td;iTRn9^JVe5PI{c*=4 zSg&m3SHfdzhycLrPu#@Xhb{L+UHqm?_E3Hkh7`o==ia-O(x%XDJ-<`GDH?{U0}Xo< zMvzq05Dmh?A9gQqov2T~%Dz>wq2JYT7o7L$>cm^0ieI{k2A z8J~0&I=!a|$z{swn(b|*unXD#fDY@h-DWxs#7 zkfcC4Cj5|lp?Lqjq~9<18nvHBgud$Hw&P@b_x_EcO6DA^)8QYJ=|B=(7h^7vL(UM~ zwZv7&jAkxxwN%_%-R>Wk3POh6T zeArj>rN^-ekz;!8b|dnT8h?LffdE|LeJaTZ0KkZvIaD1nys@B|j(?T?lS58T0F ze44|lcgP<8RH*3M4ZzMy)>G;a6_LmUAh%n5Pku2eYb+al2;4}0}q68m@NF10^1*m za@rMbWvMg7Y1 zZ`YRAGhjhrb>G;pMRh||LQBO#C>%-6u;+$Ok5R@0kAjXJ$>W_snIqKoJ=@xqWo)EI zn*MZ=MCVoPglwMa&*FD0=@3xSY zOoWmiaL-1yJc%N1hi6ojFQjt&Tol}6^n)FAobf$k1n!P+`k`PeW2Gvj(hNb}t~?b| zljvI+Bo}r3NYBWT2BAr=-%3BrZl3I(^+m`FYk1y>uPtSdY|gcyTihEt;i-$UUOX9J zfiac({YcTHWqUV*c-2;S&&iMr46`hJ6-*HW(*!3EtJ%!#lTjG3ff?I}MGZ_%eXmSC zIPx~c{wL7i%-5(10(Q92=ii6#&X=3r;&l$iPl^jzc!=Zp$)ruNkL)&AFwu@*UzHXx8O17g!kk_s=-hKRla44=o-I&t_sp2?4= z_2c1_IFlofr}g9ElQ_=j98c@V!zXc^|36@Q&vofN7z9F?F!&BMqIqLqkc*x9zx*S{ z|HltDVtcEGIr*IAjT`JVHdU>9_`kSy0&QtI3?2}M1+hgX_ft>NFlK4)ybn3(pD3YYHj*Jt?3 zca+ip4S~cvZu--Km({#}!}b>$RMZ}3c5%ZM*D#WklgQfy`z~p3Pl=sA`d<0H>V92y zP1X0?e*9EE#p5>*@%&_spusmqvtxE9zPN-il6v(1l1e%~6!0yChhk7PJBtfk#? z=DV}Sc(}7dO;1{K15u~rfJoVQ<}2J{6!*hVnSxw@0t_Lg6M$v!HsdgWUazyaIuv38 z3L=>V|M49)0Fzs}oxw**k!X(Z%e5;DU$j7Kwo?%?0{G0os`mk0{Ip zB=tQk3bl%NyHrhD=l)TN0aO+Mm2>|>iSdjbO-BAG3I4|s2jEC^Ta!V1^B*n>OAsdu zI7Q=we{hii?gha0P@7;mHk}`&dnlME+PVg?3-ds@!i2yeWncE)ThAn5!6p)2=(RV^ zAT`vE6#yIo06#emvS0bg|FAFF{13oK;)IXXYLD+H@!jS>g0SGJD<_ud${iz4mD(h2 zz~Q~t6NfuIcsB}7hmsu(o}y9yUt$*?{C<^&L)9d}B*z2s83iOt3b+o@eDu_5{fPXr zVKH&R{t~$D^@Z4wEhpz`r z8Syc<@VmJAa)SNPXr%dQv0IYjItPOcv#jW;vdt~Lrzms_9+2M5@8WQ(Xx&=uRy2V^ z8Y?(ajSaJelCTQx0m-bFPan#ZoizrZe$N?9*BWJAGqNaK2b7poJ}6OV;EJz))gW(#P7 z8Wku#9hG9suni9&X+dY7a63AiZ}Q{VZ_cS-&0K{3xGJCHFaDi^zb96{7yBJM0Hx3O z5bzrnC%%x6ghzo4`Ey668+|33rml=hKWUVrlInip1^!8*>vYtS4!W$UAb4JPDI7me zYiY7y@Kq^29T{Uw?g49%iZxp(k|73v33~V}4-pN-%Ir*4o7qbA+56OT!RixK1|Wi- zVeriSK@=iwsqiaLWm^Fzdd#v8Srb4SCO_Asi=~8vYLLchP5e80Ys9dwlu_fk{-s#V zJ`N}v^X#IF<&G66qs9`=&M$}Gz}GeUIa zA1;gH>ZjR+i#F8rx1cH8h(WvG8ABI87RGgr;DB6QX+gsTR)K0cat@-4p9rsPsCMmi z@VoF5eU-CA4|Bl{^~TJy`z1gQ>(4(!JjiFe#W1(;l`@4*GSsjniXl=VRYZX8w}=Y|eO@;Kq3>S?Pm$xwKBs|5ZshHo^SQ&SHX7=#j>yrR zmA(`~Dj@ZPl~RsyzG0Hp#ks{_cDK)q@r82cszbTiLh=zYzU$pI4Fg^h4C4<18gQ*s z42Q!tXtJ9ch>>|C-V%4+ebigl|m4#FHh7M z0aF689nW`1XIU@%c=!yT4aD#Rx!iTSOq9}On=Ox#0U{MV|Bh!Z02pN5>VzAprUq}D zW$gia0VjHMGevGJRC6r`vn}Z5@Xa{znX#=*q}~YFKUw-(1Ng36F^w!-UQ;45jv|p;Tag1ZVJEOI>*1` zvkNSvAZvvyHM^h4WDjxfAKC!StrJWh=j9@D#3W`@A*=qe|MI zt^`M=uhX9h4SELjuTZ_(p8i7=UIrQ&;8_)2RKd^iZmz|z)@;G+JkYTK&-L|+@nK`~ zBo^+u$nR4dfiWbe95=hAFjL0Rk#I4hV{~UcOAF zxNX)u#J^KZbxb{XV{Cw%=%u6x@N)Io3wkQ7NQaO8SJZ2X7WB~(mm)uiiWYM7!5`0a zvS^&~9K-Nc(t74@^xtW~G+>Sl&;qbxtaCRl0etE0z;v^P!6wHOtZ9p5pMlwC3vNd( zlM~c_Y}fGDdG(8lQQ*wxFTB1E4ggW<&`^b*)%1rkM|JmYvSJBWpx7)dD@edvb z$gceE8Xr~bKu>8Zu2K8N+}q(^)GRhWI6|?6f2Hy_C)c9e;7HAt3gsl|dC z6(HNZw_|rAGk48Cm9dHKg#9CnKb5JA?G*eY3qFeu#IQcyXe3H=9s34g%&u;G;sNvq?&Gs`nJVA^XZs!5H>QrhAS(N3i7;yX z>!j9V)!G1Q;b@%*B16LB*?OU_<*ns()bDM%b08)DJdu+Kzw0tm5QEzYWCGu0&cMQImo*rKD^4MeN)?L83gpRBpuh}TZG@R%x;BL+N zL;l@UQsEf`BIz(85V2dd{<{WQ+4BIVn*0wUW}OeU-@<^1m&gm)O50?5y59|k z3)IDQ`Tm9Pc!-SR$3Wg?ZY|#<8l^xFmnF}Tkc@1Bs{&}V#`QM{tKjqRhG>gILT4Q7 z_bJ@$b$_+EPgXtsT$Wzrt_%)Cto4gf`97}A_y7Icg{qble6&qk|Gd&$X`ST?B&Fbp zy{)eRN}dK>KOgcRIIDrQv$x_O$__3y7%yo-irYqIj3;BF9~-;3@IhRQ6nz=l4ov@nfQBfm?u zDGda4L*WV}iZ4-sg`VouI8(mAuE;gnmfJ*&0KfvIdE4T_EdWax@bQgVR-TLaO^|uF zuEFZ6NcUBcCYYXIEqe1E9{;3nuwpf!j=w#-`h zUV8f{ma~C*`(6Ot+Ev+>J486di*CnHIa`+FjDSr9K)Nq7z46#auFU#g*Y@?F(13=% z5gEYGpxHue6Dt%1j^Tkm5sY^$0tmeP1SOxDV-R=e4*~nBvxgy^4IU)3eI>ft_kgV} zU>T~?i76{8d)RpUZl3r1inEQVL}R{P*B@B*!A*V_O~4Q|d@~FovdSakKnd1#fYq=F zk6n`$C6X|H1JJ9zM4$#I1b6ouv88=e{5!?; z#DL|$S>GFaYX2Ala9l;~XMWB!TeucF1@m(I((~w2vx)bWuUB(z0%RVfT~fINK3mNd zfK0n9ca}GOP=9NXA9>q$x(T!0p81OafBj0%x1l!j-m9VV*fguJAjuDAAH#RGW1_vcuz!iqlL)3dKEVA6k zh8aXde%uR*`R0cy=Lk@igLqX7-7uZb#*7GZV>* z6+ir~awAdZTm(%jj33Ju7tn$h4+Am?taW5Supl&HUi+7({O-2p?7^p3&$+w|D_zFE zi+u*RJNdc1{z?bHkp^~b;%L$60$EHkxM^PXC!Cz;h`;=|DbVQ|(rLjv9~Nz%YjG!9 ztTWDbDDCE3cnw4WwnTVA+60dHmG$&=2c9U6*DG;+)uan)VIHe{ zT#Bs1uN~DoMQ=71L{%6*$DSAWeM))%RrsuruzV6%pb=1-x}kaZboWg5tCiDhbpz1Deq z`ME!O>{{|UEh2knsOvd~dznx*GTu-VpGAy?^($ib$k!S}ld2@tZ;Dk4YI47JzsnW% z?a57kY^jm|G4Mtwz94IVu>;*hY-XC_Z%N{*xffL;fAzVtYsw$R|6FN-V^nKbfKn!P znI5cLSlb-KF0Uq({(h5h-so)hvJEGIDmqd$1vrczbC~>T#ot*&#Y06TE6tOf*Wu4K zHreyI4Y!Mqgui-W2HWfKTCxC2b^&);wz&gccI>Tx)gPmaU!-#4Z4Wc*+a3PGr8d(E}EXViQM{}r2BzaJqX zK0VY7UrC(r>wrHcWp?KQS0<*vC1%t7kFF@`?4QX;3$Mq&{f;JPN9+`?!j#761ddN6 zLRjN61EZbbyHA;4*nwmtv8U8DsCsy1>4=&BnOgc;>*nW(T}(V5nYjMNFD%$!>yAf@ zFgziB2fufn3~-F$MSu+uw}2(e79?o~(Rzqzt{PN{@iswSe^*TTbz-_4dhNC18K5|6 z&2zUAmZ!RYDrPBp?H?JJrA3>Ikt>N4jRAOkc0a2RtWHe^->FFzQAwo&bg=AhLd5HQ zE*IOv=VMf;^*_aaW5HM~_ZR4om6n&*edrhb=04VaStqG{YTrNAslJsr-D@X(!Q~sv z{)%W+;NeG)!1cs&yXZO=R88pN`y2+S>q!psS9h4}UUFh6-=t>gw2O-?Z>8WVR`*}B z?JFO5Q`&Q!^VuM^>{${YImf(|I)*q2|kSj<`*lBm>s`8UppKxtDyaq4mo=RlG z##~C`-6~_jUX}o^8vTBUmjVj`ij6FLYZG7FSTB$s6vQg4Q{~1UuzWYaa!yoK^fGfW z)`@+f?wg*H8l8lT#tRi|w3H@isHUu*Oanzq;cK3ddl*Xbdt3ue)iYburijsk(dRYu zUqXvF>KnF$_6<<>vV@!noM8izV@5-79fsBQ8 zg`0yDJ7W?J7{VUOEJd{=aM2Se>)KZ80+O0%R5xBTLNiG~nGK(&4Zce>FeiQQ2%hdH zSJ>D2#*T@Ijr&#NoB8NRh2%_P-%sjypC3l%4kUBJJ{lDw(jZ?L2-prZ0|dkX5lNZ- zamLxwpVBImHoAv9ITe}QBT+E|g|zbKwPzG`r&Snk;~e3oP#KX33%}E&uZE4sc4vroGpBZvIhA~kA3sd} zSZsB>T~xM+5#y?5f(S#SjsEucm#y=``aM;)8Zk|_2%48#^tMHSHv^6NJKb^h*s^GL~=A8%V7PQ2Z& z-E6-8_0oQ{(eVPtiKB#T*%_DcQxV zbag2%rr__XD(zj^Qoeo^FueD2)@s~y_ar`x5(b%nJa+K^#sr?98~sW88&le91vs_A zRC3mCZi&1$pI}3=J4LKnmwZ5aENh)OZFA&5>vCGhcQ*{a|GMv(OeufeH`~HOu$@

K$_H^OLLCE8Bt&wOq&Xv)+70 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 za