From 7d9bac374c9a3ba9d0310e3d6dd48b1c24a92d17 Mon Sep 17 00:00:00 2001 From: Philippe Liard Date: Wed, 19 Oct 2011 12:48:09 +0000 Subject: [PATCH] TOOLS: Refactor GenerateAreaCodeData. Review URL: http://codereview.appspot.com/5246051 --- .../google/i18n/phonenumbers/EntryPoint.java | 4 +- .../geocoding/GenerateAreaCodeData.java | 119 ++++++++---------- .../GenerateAreaCodeDataEntryPoint.java | 97 ++++++++++++++ ...ild-1.0-SNAPSHOT-jar-with-dependencies.jar | Bin 696458 -> 699031 bytes 4 files changed, 148 insertions(+), 72 deletions(-) create mode 100644 tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeDataEntryPoint.java diff --git a/tools/java/java-build/src/com/google/i18n/phonenumbers/EntryPoint.java b/tools/java/java-build/src/com/google/i18n/phonenumbers/EntryPoint.java index fb3a0b1f8..709cf5125 100644 --- a/tools/java/java-build/src/com/google/i18n/phonenumbers/EntryPoint.java +++ b/tools/java/java-build/src/com/google/i18n/phonenumbers/EntryPoint.java @@ -16,7 +16,7 @@ package com.google.i18n.phonenumbers; -import com.google.i18n.phonenumbers.geocoding.GenerateAreaCodeData; +import com.google.i18n.phonenumbers.geocoding.GenerateAreaCodeDataEntryPoint; /** * Entry point class for Java and JavaScript build tools. @@ -29,7 +29,7 @@ public class EntryPoint { boolean status = new CommandDispatcher(args, new Command[] { new BuildMetadataJsonFromXml(), new BuildMetadataProtoFromXml(), - new GenerateAreaCodeData(), + new GenerateAreaCodeDataEntryPoint(), }).start(); System.exit(status ? 0 : 1); diff --git a/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeData.java b/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeData.java index 7170c604b..47e7fa8af 100644 --- a/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeData.java +++ b/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeData.java @@ -16,8 +16,6 @@ package com.google.i18n.phonenumbers.geocoding; -import com.google.i18n.phonenumbers.Command; - import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Closeable; @@ -54,59 +52,64 @@ import java.util.regex.Pattern; * * @author Philippe Liard */ -public class GenerateAreaCodeData extends Command { +public class GenerateAreaCodeData { // The path to the input directory containing the languages directories. private final File inputPath; - // The path to the output directory. - private final File outputPath; private static final int NANPA_COUNTRY_CODE = 1; // Pattern used to match the two-letter-long language code contained in the input text file path. private static final Pattern LANGUAGE_IN_FILE_PATH_PATTERN = Pattern.compile("(.*)(?:[a-z]{2})(/\\d+\\.txt)"); // Map used to store the English mappings to avoid reading the English text files multiple times. private final Map> englishMaps = - new HashMap>(); + new HashMap>(); + // The IO Handler used to output the generated binary files. + private final IOHandler ioHandler; private static final Logger LOGGER = Logger.getLogger(GenerateAreaCodeData.class.getName()); /** - * Empty constructor used by the EntryPoint class. + * Abstracts the way the generated binary files are created and written. */ - public GenerateAreaCodeData() { - inputPath = null; - outputPath = null; - } + abstract static class IOHandler { + /** + * Adds the provided file to the global output that can be for example a JAR. + * + * @throws IOException + */ + abstract void addFileToOutput(File file) throws IOException; - public GenerateAreaCodeData(File inputPath, File outputPath) throws IOException { - if (!inputPath.isDirectory()) { - throw new IOException("The provided input path does not exist: " + - inputPath.getAbsolutePath()); - } - if (outputPath.exists()) { - if (!outputPath.isDirectory()) { - throw new IOException("Expected directory: " + outputPath.getAbsolutePath()); + /** + * Creates a new file from the provided path. + */ + abstract File createFile(String path); + + /** + * Releases the resources used by the underlying implementation if any. + */ + abstract void close(); + + /** + * Closes the provided file and logs any potential IOException. + */ + void closeFile(Closeable closeable) { + if (closeable == null) { + return; } - } else { - if (!outputPath.mkdirs()) { - throw new IOException("Could not create directory " + outputPath.getAbsolutePath()); + try { + closeable.close(); + } catch (IOException e) { + LOGGER.log(Level.WARNING, e.getMessage()); } } - this.inputPath = inputPath; - this.outputPath = outputPath; } - /** - * Closes the provided file and log any potential IOException. - */ - private static void closeFile(Closeable closeable) { - if (closeable == null) { - return; - } - try { - closeable.close(); - } catch (IOException e) { - LOGGER.log(Level.WARNING, e.getMessage()); + public GenerateAreaCodeData(File inputPath, IOHandler ioHandler) throws IOException { + if (!inputPath.isDirectory()) { + throw new IOException("The provided input path does not exist: " + + inputPath.getAbsolutePath()); } + this.inputPath = inputPath; + this.ioHandler = ioHandler; } /** @@ -228,12 +231,10 @@ public class GenerateAreaCodeData extends Command { } }); for (int prefix : phonePrefixes) { - outputFiles.add( - new File(outputPath, generateBinaryFilename(prefix, language))); + outputFiles.add(ioHandler.createFile(generateBinaryFilename(prefix, language))); } } else { - outputFiles.add( - new File(outputPath, generateBinaryFilename(countryCode, language))); + outputFiles.add(ioHandler.createFile(generateBinaryFilename(countryCode, language))); } return outputFiles; } @@ -429,7 +430,7 @@ public class GenerateAreaCodeData extends Command { englishMap = readMappingsFromTextFile(englishFileInputStream); englishMaps.put(countryCode, englishMap); } finally { - closeFile(englishFileInputStream); + ioHandler.closeFile(englishFileInputStream); } } compressAccordingToEnglishData(englishMap, mappings); @@ -483,8 +484,9 @@ public class GenerateAreaCodeData extends Command { fileOutputStream = new FileOutputStream(outputBinaryFile); writeToBinaryFile(mappingsForFile.getValue(), fileOutputStream); addConfigurationMapping(availableDataFiles, outputBinaryFile); + ioHandler.addFileToOutput(outputBinaryFile); } finally { - closeFile(fileOutputStream); + ioHandler.closeFile(fileOutputStream); } } } catch (RuntimeException e) { @@ -494,44 +496,21 @@ public class GenerateAreaCodeData extends Command { } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage()); } finally { - closeFile(fileInputStream); - closeFile(fileOutputStream); + ioHandler.closeFile(fileInputStream); + ioHandler.closeFile(fileOutputStream); } } // Output the binary configuration file mapping country codes to languages. FileOutputStream fileOutputStream = null; try { - File configFile = new File(outputPath, "config"); + File configFile = ioHandler.createFile("config"); fileOutputStream = new FileOutputStream(configFile); outputBinaryConfiguration(availableDataFiles, fileOutputStream); + ioHandler.addFileToOutput(configFile); } finally { - closeFile(fileOutputStream); + ioHandler.closeFile(fileOutputStream); + ioHandler.close(); } LOGGER.log(Level.INFO, "Geocoding data successfully generated."); } - - @Override - public String getCommandName() { - return "GenerateAreaCodeData"; - } - - @Override - public boolean start() { - String[] args = getArgs(); - - if (args.length != 3) { - LOGGER.log(Level.SEVERE, - "usage: GenerateAreaCodeData /path/to/input/directory /path/to/output/directory"); - return false; - } - try { - GenerateAreaCodeData generateAreaCodeData = - new GenerateAreaCodeData(new File(args[1]), new File(args[2])); - generateAreaCodeData.run(); - } catch (IOException e) { - LOGGER.log(Level.SEVERE, e.getMessage()); - return false; - } - return true; - } } diff --git a/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeDataEntryPoint.java b/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeDataEntryPoint.java new file mode 100644 index 000000000..57acee16d --- /dev/null +++ b/tools/java/java-build/src/com/google/i18n/phonenumbers/geocoding/GenerateAreaCodeDataEntryPoint.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2011 The Libphonenumber Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.i18n.phonenumbers.geocoding; + +import com.google.i18n.phonenumbers.Command; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Entry point class used to invoke the generation of the binary geocoding data files. + * + * @author Philippe Liard + */ +public class GenerateAreaCodeDataEntryPoint extends Command { + private static final Logger LOGGER = Logger.getLogger(GenerateAreaCodeData.class.getName()); + + /** + * Implementation of the IOHandler required by the GenerateAreaCodeData class used here to create + * the output files. + */ + private static class IOHandler extends GenerateAreaCodeData.IOHandler { + // The path to the output directory. + private final File outputPath; + + public IOHandler(File outputPath) throws IOException { + if (outputPath.exists()) { + if (!outputPath.isDirectory()) { + throw new IOException("Expected directory: " + outputPath.getAbsolutePath()); + } + } else { + if (!outputPath.mkdirs()) { + throw new IOException("Could not create directory " + outputPath.getAbsolutePath()); + } + } + this.outputPath = outputPath; + } + + @Override + public void addFileToOutput(File file) throws IOException { + // Do nothing. This would be the place dealing with the addition of the provided file to the + // resulting JAR if the global output was a JAR instead of a directory containing the binary + // files. + } + + @Override + public File createFile(String path) { + return new File(outputPath, path); + } + + @Override + public void close() { + // Do nothing as no resource needs to be released. + } + } + + @Override + public String getCommandName() { + return "GenerateAreaCodeData"; + } + + @Override + public boolean start() { + String[] args = getArgs(); + + if (args.length != 3) { + LOGGER.log(Level.SEVERE, + "usage: GenerateAreaCodeData /path/to/input/directory /path/to/output/directory"); + return false; + } + try { + GenerateAreaCodeData generateAreaCodeData = + new GenerateAreaCodeData(new File(args[1]), new IOHandler(new File(args[2]))); + generateAreaCodeData.run(); + } catch (IOException e) { + LOGGER.log(Level.SEVERE, e.getMessage()); + return false; + } + return true; + } +} diff --git a/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar b/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar index 45296a8b4ddceb97563a3d6529f0c944a1f83274..febbe342d6e0f6bf32faf0f967ef45e61610bac1 100644 GIT binary patch delta 28396 zcmZ7ecOcdO7dVc4UiV&GnIS~7_ue6uy)#l~Q+7s1TzeN%o>uluX1Jt8UJ&}t{!d{A_+fAk5W&>?q<8>|m};Mta^Ng{wFqd!R}vU)h~-59rk4$dIvl$cFucIe zfu*hTF;mmKCcL(dBO&QI1`ftzc)+A>ayrl>fCBrXR2YMYS)WU~GQ;qswu~m~$z)L*R9qpLg#!brr9stVHfT}0`B(kxkq~_pG~tBYvD-{WBNXVs2Q+|^w18HM`c@kf z;F%$<)h@_`9Ml8jzn@@B{M#Ccr8~Qi5DyOaSP{s&{~Cd#2YfJm3~WRH*Y5({@D&L8 z@*RT2eGH(C5R|aMXT-|$+82dXkVB^sM~QYg-~`M-^uq%U2qHla1R+Qj1;B#_L2+K% zLk5yLkIHaU0qW=gYY?-$3p6l-4pdVEeu$_LEpP@wjE@1A5v2S$V2U7zbN~&EfV2$2 z9Bg=t0l*?7{}=%y1TkO+*bo+{6TmFYV$1@JA|pa<03Cv;o&?C?i6LI(1PTz!;wiuk zLDabcBqQMM)4)DCTus^156*!##{q3(JwX<+&;R_L6Lgn=GQkk?yan-QQ1PHQ2RMf|1>EjuJEy|y|!erVE7(Mea=1*Fk| z_fx-a3_y}KsARhyFb4aTs}KBvO@Iaf8RA#2A*2eXG#CM#2=dwZs9ye=0Q{)3wD`I( zxU}?;g+sh+c2ruwF995g43!1o2_s;zC9r{X4FQhE3xg@iYZt**E8rV!Am=h*h%m2M z1DdE_ywdv*#*p43RBz~2;3~o~VFMgTkTu(*SvhMDwM8W2Lo=7KWk}{jipI)0;(#Nt zi*SCp4h$nm-c3LkL6&X-^f=fjz!hkR9q4dHCyBW02CO42%N{@;f+XJs+R$F`YJrAa z4XpVATqNds9~ocv0iGgk5AFds(7BrtUY%-%=FXTQC3HfAsNoNMK&I|kFmM)OH6j4H z2(lIe+=mg+Jq-8?L%ncd4|Yd80+2;G2$6scg49O=O-NmN#6s%_iI%J2Vg(r#EjK#9 z^zi@#!pffjlp@IB13(Bt_8$V;2%?n)r584kkPN&>5Q~(f8NL4)DlFKC&rhKB1hG`6 z0(JGHrP9p^Q zcmwq@IR}tKIJ$Cy5|rb8dBEEUNGA`-oek-1%?A=;T_yzp7s^nAOZLcw7|x*#ZG}KF zVypDuC#WBH;gND* z83KF|;hUd;E2tIGQ|+e%AS=8t49>AfBs{vmEBV_sn7`g-{Jp3nc3LS_xq*nqV zi*jJi9u&{|0+0`@Nc{!v#Qs@VdapBA*vj+3Bczk;>*n=|Jb*Vs?Yc@gdiEv4NGkvheTeWB179q)q~AD zKsPKJy?fM&i}#Ki(A+;j3^B`m0H~rmXby_&D;-OAsJyzGX;#S$zb{rr0pywoD!y7)WJj{%ze6$6k@q@b&!w@S#AeC z?~uuW-1?YYTG*qYrVAG&q5aAo4@w4Oq=^^5 zA7ON0k&^Tj3@uE^%)|7z!W=G+q}ecm`Wk5(%t0)^PFl{6n4O)Yc3Fnf_Y}Ng zpTg1+Q$k7qVPU!CDAEj=T{N1s2tcyUrs|aU0cw|nSor2ln#d4KI)-?)8c#X{vwlt> z^*|!jP9)u>Kuj=E8-2I|<<0}1IcYE~ozw^B+({=@MzkwU8s zE|k|h>_&ee?S5#2fdNwJh5+Iq8zc=!v?UCaZgC*2{Vq}7{~%U1WVVTK*GQ=l*8X); z2Ry>@tm`013gS>ltI>0ZR0E;cAOEDV3DK2NBO5!Uq)3e0yQGDXF)(|N^bTy4@*im_ zno$>vf`2p69rfZ#xPGNTiERoT@$WwAGO`fn$*~{V3Qa#-*xHI^BTCug|*Eh$tm zK8Pu>Y6p^Qq`^YBJ&>JFTI>SiP+gw8iW%gPJ?iM%F{~p(KVH}H7~TacQTpTK*kV{t zg%0Zkn<=5gLbsw2p@$wN$T48gAvp+O#6CregOwEv7baN3igkuX7}>Blkbyu>EF3G5 z`xG<)BM-T;(&#EV9@oP-3Rz`@eU=7+GuWT7ip4Y7=P+YBFBX{-FozGj0uz$>u?(nW z`|<`gTtqRTMj>7XoDsw#MRY|7JB7HVCW381tpAn3Cc&byl33{06+*P7u}=^;CS_jL1zf1X_*`}_uyqHk0ESs&B@j=)KTGmI1$oMYdKydtdAehX6+{M!0`6M! zP{+Rmwh2MGnScg~PF7eAB-rOyut;}cyNYE(@*!!1g$~59p(b2%vmI1Hb|7~WR))A~ zhjm9wYmV`2g9&{O>*@xP%i@*_9oP_-jAhUEe zN&GqC9}r%fg{77_WG zg++Ec&?6gNXk*z>fxs+=c~~#BMab|OZxNvCVxs^7DyX_h3$PDS?fdq_-|s_dFF+@1 zs05pUXtgiHuA{|NCwWy`1U&TuuK=c0VpSl;;9wgq^%P zfV~YtV#feB0j;BFga7`4oZfh4@X05v6g<}T2@9Q9Af#mk`yH9C>~X9XLYe=Dg--s^ zkiY~~%P`_QiS0vdUYx;3B9z`)tSf@3%ws>I`MnWWbYcq1FFjJ$V9066S$%Ajury9{RwY*|MZJ5h22i|)HUo7jBBg!>j&8@3KM?O3iWr;|y0}`-DUa6v-&7N)ak#e#YY7GJXkAiz3yVC0JP8DWM_5^+EENvA z`-g%YrN%j9kX2_RUZewOO9_+^pu~Z3$8cgW!^>khX@qm-I8GXi^fHBCe?w>>T`2%s zZP%G_>}b3vJ`&nPp<3=hYq^aXmy9e&@iW>EXCMhDI1jSK$0v?-cCp}$5l2t5m6q>kjda3GSRfzvo-K{)f^EKn;JLxmHL(Bj@jTM332cNc@yRNKI%3rS$MB3^-5 z&yUMR^jHevcF?+dG>2vQ3WRE&?4!U87YUYDJloE(j-2gX*a^7I1+rA1_2=p`!-T{`Sq2Qg2a5s?> z8#Kk`A^J9DX$@aM`l?{xWQlcVxVMN)eipd*=ss5c=H%%PXofie&>;yg3x-?cKEf6+ zU%{mzDpW_Oer`ZHQ9@mkx{4!3RLI-nY7t|L4!9VE^RgTNt98g&7TTlh9B~+=78-Bh z!VnRa+qiHfpKVS!RTyb-#{EQCez_gZZh|N7=_69>@o75d>LQ+AK8EEYl?(Ug*ejDG7c@kRioR= zK}2UP4fLWVg#tdb$P&Gaa3^uFZ1OW4+U-}LAFX8GO57+C+hHvZ-A6m?a1W8NEr~cY z#NzWt+!e%Iie?F5L|1&my+Aprv(kQXK=ZP(v&t05b zA-t#_BDqR6gVvNFDIQ%@0XY0KBoIC_d>Nv0kOI$uxHm_GA4lg)!C2y@CZwPgoi9>4 zycxo3#ejE5kS-=X3)UlK5em6Oh8E!zREiX*_aktRRC&Z!`YN z;xkb9Za?5#f*%E_qV5gJ z@!>EOHNqoXN1hS>Hk@9N$_)Pjg2XRo_+dn((j1R8Euxqez7o;)-5PIEX>n{qcS1jd5|*k4a09Eq8<@=H%PQ( zG6Iht)aQ#e_xQmBS?Jin9fg-i3|U9xFCp$$$KwmoqaGFYfuB6InpDu$G;s&&$Qem^ z4cLuuNq7!~{oiAJ9XiRsvTsx0hGvW!K5@wrH&XGwh-T+B{29cdlS-FK+kp|6(_+_LCNN5(jj6=Fk@gJgwBSdO!&fJ<9FbZ z(ypTw4D{e{A(rm+;+qj~`TNmT4&4dhw-D!CmU$(eAg>>yk1$dO@qVx_nj!oF0*CSN z!!Kh0FdlmS2Mw%z#3OgYHlOe=h{~SNkTpaVi8*t-45Ug9RdsC?uL(<(j^gKF6-i(4 zOo%rnV`x!>!r$@D@W{{acm)EI0Q>aRNCMdBjZpv{Y{?$NgKM^A8i?hDLb7v2Uwbkg zSP9tXNQM;mn`>myeI`VB=R}r+97Db^i?D%`IixCJ=^a#sf-@N#I!CkG>Cq~9=r9P~ zV#CilQ(VY&VQJ#TT{7rR7lf#LlU+l+Eb=9jMxGvh4Iz_-GY-;4k`=-%#7Hs&gcl!8 z=7hNB8AFELARok#9YaQr#gPReS{^2lwNS%ChUsLcXf= zO-VbK> z#)D#)X79^_f8)a}M63mT<1OntB1jxlhWH$R70`}(UatKu(|pBo>ezbI*~!^9O9sN@ zwGR!94`y{Ty>D(Q&)=VD`tWai=g-Ly9~HTzjz4rFKcXIHh29v~pJraiM^!u8GvPR# zmE5EY3E7P;Csl8-bXUo+)QNs!q)vaf7;n9|t&SDn3DtUk-u&yh^J=U4gsO2o?YAUu zn=-Ze;9&+J{PJ25or}K;H7?z^yg{XbU68}bYI!%xy`Hv6{9l?<9Xq${7w@3XuS|>` zJT3egi^t{v+O7o&l>x6{ipese+L9rY< z?`9cAuIxu+;8N?d(}!b1Z%W_lv#<=B$Vf)hO|fy6v`d-1efdzCZ+R*^cF!+&Ixm(+ z#c_0pAkJXVqU>(BKdC)>2SZ@$Fg_qt{6$H0rHg7ZE&H!JX@#bgqbYkc7C_glBW-@1J&`Kt1TUyK3KSt*Q4x|KFN zFK0duYsF+KREYTBdcQ}>O~E^8AaPcdo|I?P`l>PWv}bQZKy`wo z>-LHN`#}{s2~@7VJ7l^51zfJr`5ftTK(0M93!oCbw@1c75HBcPblp9-eT9wgW9h`d z$waAa-}rd9?Z{)U{i>?{UfE+C;|Kr#?3@gtw+P6as-(pIy`=B>?AYHmb&azR!ou?7 zoIaHPY}3TOp!ALkz2;_g*JxGNDb8S7irO-9TXLkmwf0ZOCdR?^<%cBeT6ST-Hi?WC zYm?C%+80I6Th|lV*Z5q1Q@Ka4j6LqMC~8}>S-w2@@`*k^I<=n!UooZd_R5Q<6{_y% zmuS8WESi3H&AU>B)4F%8h$ky;aAffu+fZHB%LCox31p7-^`W53WC|~Rd1JOrgwa)= z9bL1^UJ7F>mACJ#%_{k6pEKYs9JI#@#j6V$be05e89PgD5~yn&F1+k~S^xBbaor!E z&gvqgQUf}6T{8`xb{>__xj&vo1%D9s%l{#mEoe1R9Wzfoy%aT;$6!TM6YNM%6r9gs zec5nfDk9xksLvpsI$iFj^Px6NXjp9&uZWiFZS5X#H;j4=Y^!S6pD`VDUQTORz0G{$ zwSZmzN!CXeH{%II6RX#+X=P!1O?vBI-O+hH)##v3%Jj-a?CRv&`LlOB?DxhjveZBF zL{dIYF?QkjFG}c=vJkn-$H)|cGU4`fExRkN-A~ic-TGCfBfq5mSvAQvoMFkaW%#-K zVgFv|P`gcaq|FEJU4Mzq&>K?8P7B1lP?b^}%V`d(R1_pw6SB_YgtLEiH#go)S{8f; zeCN@-C;HHw+5tPr{pR5ybGRM{{iX=BT8KdwkK_hL7dF^_iYj2Mwrs{yATajlg(da{ z>CIsGdp{GCOBe~~fqBo8t0@(q1mij+IPZx&V&uuwTYJ-fFuM&)>%=It6btAn%61ew zbt--+8hQg5>(Qa#{lR5wre<|$>Fo}^&LndsXmvg;sQ_tH!dVf3 ztIX|qVO=_=QRu@MukPkro_j4>i1!yhc_6Rlj9^vMVU*{?8b|NEvx7c3Z zI_Jq%QM!}Un(2Gxl%mKsOVr{uY-Rj~s17v&f@9itz^OIM5g>@jbvVmpcR zc0A!>HevZ;-@;W2Qo^--AJX{k|zc6bPXZ9g`!O~F?3 z;*(h;mRTIv0}&cM9=*qTX8I-ij$yBOy(RRB-^u>ZhnMICgp0|gCPKTJHx{~q*Zlu& zXHN{s&tgyV?TXhYlG|cv;kh!3^e5+Gg>HJ4!HIQp9*|2GLkVwvjGziBIUT`W%AcD% zsTCWMD*}CSS4S6ZkV+zWIf;ZG@O-cGXs}B^E1j!xWJsuDkJh!K-uzCz#nnglmkKLx z%R4XSySgrZ?)_|C{-<1c;&A-$&0eg=CBmzF6E^+pYGY6TZMR2r^5(OC_4M~v?DrYQ zW|wT-m!Dl#Sy239aMC}tkIKiEFvEAE-)qg$e?;$)-bvIarLX6@Te!;E@{PMsPx`ps z9VU14^^DK7TorT^ntS5L)>pA^HCt?GE1D=PcGmp6^Xy>phLf0W$wq*@=oHP6&&$k? z4Jjwr$DOQFlRYKQekpxRZW-MhGe1VYc$>+(rzX-m`TSz{81{CU)0gj^$t9eu^J!8j z^cpqr8L!y*;+DZXO(*X^%i%N3{%~P@y4e2}Z;tg&*8T6@V>6zWee+#|^F4AW8W)sW zBy#$G#9zH%Lq6rT-gurf2c#IAU5mVbaN16&qG#P>lGgveV9x!2H=c@ve~a$^cR|VS zN3rbN4z?CkP7W#GCw-Rl!%8g|327}B50$j$7q4qQZ?V1TcHCj&=UnFY%@Zr$8)64> zr!UV}b!Sv{wGqh|?Cz~yUiU0dBIN!rSF(9u zi}POBwA<4+i^Us?e5d}tpAM|;dhP!zdc|vP-z_-g6r;@M%SNN9y&Ha2)M_(?Dd2>f z$jsUNjRLptWI7JJ*Ypc4yrVSd;$oTW$Q+BZj+t+rdq?)V#PmP-60)x<$isr z$I>J9fvnz3pL-2KVEC`}&vQ7*!9R6$Dl#zkiZdg=Y>EJDdk z>uYo|PFpJf#7!yq&(zh`sE(VD(b3++_I_TaT7O!icVN3%GgvEu~Ad*Zi+7$1D@lO`=q5*Du!cUSr5Yk)c# z`LC@D`Ex>E&ia1WDEZP|kDousQCzk7)347Bqf4?Anlv%~wbuVa?#bwRU*SypEixdi zizz}s!bSTud8nk~lR=3m*Nf71RuaN*eJW`q5%DqWpXKk?;eY_RnOIj{7mqcuhRsn-o7z!MLQbYr-#iJoV(D4&d} zT_I)Kel#xm)T1#>H#yd?bhTKzcgyP6XZ>p_TC{9WMH!16?q9jbKJWFg!&Rc9PpGrq zMy;+~J2_<~dDt6!EqcuMnyhW|?Le#iWZ~OJogT`*3F)br zNUQCpY3Z!(0eX`uck1)k6wIjfud}5OO&n)<)PBxLBIjpIHYbI%y7dO_&+!+Z%BGRQB(Ent@fwOeZN|*elw12-ik95^ z@msUFdKqD+)a#nGQf$PEukReTMG}j&d4=^dJvYK137d9R|GslRilw4}y+s>)N8~D) zZlM^$PtADa`J>)xdu#TXR?kSDF_P*^!hc_Qq@qb{ZwG(AFOV#IKjOprJ5*BsyDWhT z>pT1JDdowO0!|BAe?1*;PB?$xBr~Q!_@WkR#CrY6m{8k*;>UkToBYJ1uKhah~aTz_nj;`&w1!20&B*i-Raj<;Wa7YcY+ zX2rB!!>S?STze_^ZJ-nd`trIoy>=n@A4})&I%TCG{wA|_TA~Lb<7uM8J}@h6XyPL-CLDW>=R#6!;Dm| z`Wb;Ob$Szn=$iTD0Xt^N=C@Zq>{c$1HWaq}E-YR*Ue(qct~N6Sf9^asQa>5)`*4%Q zR*`8)?89m}Ij$zcV^sfA+MUEF+EW;tn}n&m*L=UeR@b{j_%Wyd<%Et=z#r>WzP*I6 z^$HRK{E-HA;+PW(4@dA3cOmo%wtYJLtKqKW)^e>hK_OlcCh@i1$ZLE-bK^3;zXhIUHuhY2~4 z`f_@vox%y+g(^IWcI#CnYtz&RvWFd$w{{4MBzJE=4|i&^5z3kQn|g02EVDgXtZC>E zxW~PGXLam>6fVcCF9-9S|8LFm4eA5Y!@kLhjSc)^=%GNO8tXsIYnRpdfAqs2c;3)U zZQlsyHN5+oitERAKmIWC@XqRllzO$0qczdQE3sH5t?m5XZee^7xEwmlzawuLM$-^X zpp=cy+W4z*iRl>CX}SrynhK3o3)!wxZZXp91(u1A*3xUc)Tj^m-xP1Wp$>jZxV`#j z=YaxmneBg*hpSc8yA(iz`}!69AvkeUsf_<|Yl2_L-KKkjIgAFOro=y)8apppW%*sL z#b&c!C zotQ8wf2S?^qAnUYb!4O#Cr0qg)UgMXCXKKQq?pzx$*KPEr|FGd*ksy$RyoU-QQ4H# zV36ey#n<<-UPaT(dB=(Gh9Zxq^tNlb)~dFq@T6{dykBD;P57msI=jhvOm{Be6Q>3V z@1J}~%A)~8)rRfTqKcGnY6^e8$f6RJ&8e!qWhCo}tPRix&ycNeKd%h;h zUn#iE{2%s4AL`;#l9?{|&{>MO)JHd7O*#3Sd->_ef80!OwF683on|bzx&GRu=X918 zQGqZVRjk^hJ0Rl~W0w+j^>kr^wpcAe#RMd|yZ5~`c*}G0`kC8J8fQM7KCW%$Mq3~- zc5Tp%bm)mW#yH%~PTVmi4u84GJ=xB%sDP24rYo19(HWVJhA-PteoVad=gPbO zy|4u@v#BO?5jWZ`ZB`lH_=MUNMU@vF7wz=knd~>D2lroZJANT^<18M{KU?& zsx&3S&x5Z_F=ABP`+P%c9JX(32On!c^Uf&<-p_n88>7i1-)3(Ztq|Jv<@N_Tn>-`( zI=3?#FZI6hlvZa4JGt-cK8oK5Gsn*E#uO^rM~beSbbT8-c&zcQ_1#zHcO0j3UREh& zSZw^}l>X>e{7vL?Pv-LrFJAl}XPoGdN&BXeb4h`ae7pEM?Vo9Dv4?+f+(}ohLC=1@wVn7>c={*$%oB}wwjk?N^3mXTL}p9(Q! z(S7Vb$IRgSbjhIs2zeFEW zBP%2B1Q4q3rWg4spMUjX_k>8K;LFrE?V%o?hFKpq&sV!diW=nhtR)J7aYYj6%M;x4 zGh?0jzp^d8l{eL_i!XA#a5!RqSh0PPrfjaD?_J=T4!06ziH4JQ@=4({{XTP+TgeuR z>WZ#GGk!@~=C2<&$MaDqeV0=g^PXdB4ir4~4R8CJaA`oReaqZJRXg&@r(>proIaz( zHFhnf>|2gwJD0R?nF!(*u$03(9}PBsy1Zm4nEjl*$?-B?yFP-~LX_L0pn1?YSBoF~ zsLx!Zq8G$qqo&@jVIg_&;5O+Go_M|8vbw~Je+GZ@b-wy#yI$wdK_)QcxoMg{!d)e) zT-G}+z)2X>>-=3f{_W#WPsXPcdegtMcny~<*re5`$KrZ85(gq0vaanejD8MQs!Zft z-cY!!oAp|zD|6BFu>!}f&7td6wzFMJC4!tm;^s30TkPM1R=W$auVkqEmt<1KB4vDy zaY3VI{25%wewr#Eg!7W=tL%WXV^Syeu9W3$g=KiwMRL9sQ*>HCfAb-y z$-xu99?n@(8784hmuHo~i=F|`+{%9yWX%1_u+4}f)W5y*aH@jZ`?$;uCXJG$#8lmh zx>bgAk79}N(L|+gkF93IYm$lRF9Px zPJTSlug?DJ;m4e<21)iZtmWl8y0k2_bZLB&^E38>)z2#GKCYi+gS;KrBOGN9=eahV zk`Ab{*7Y+m*?cA$hMWnpAWIYzhDQ%5y~lmVpxZ&OQRP^|EQJf%ZRUu;MNKjqPSfAO5<=e>BXXoe&=Eo0hpsRZp7YC;Ud zm6?O)+d0Hb-T-=HxsDX8-qJE(wc|rFGV|V~ltmtdn$X=L(QY=mFwtMmq-flI;Z7u} zoNtRYx9&?qSI1*2!vk5S==kIKgGeT8j2bhqcnH1o=f%t8eQzYU@cW$)huo)CD9VM8 z6F@2j>kMbkTqY8or=$sgTVL=pGQK<>;8kH_v}|jQOAfsI?zUz7 z=dHpkY)0JtmPwhyPFTz2=yE5akpY?Pi~M&*KW$J$r`~kkh8~fCp9W)tRk_5+I7RNk zL!r?o?m^u%?SKD(_drUoN$Jl|G&yV)1*mrlQt+t0kS>`qY`Q&(RVu^1@OtxJJ!M z%slFmRK7vjQT;qqKzQToVelj{)W-Dei>8jPG~&o8t=H2Tp+F~9o)Gs{r7xM~pBBsm z7rYg$(lS-|&pVavoP6z{t)h+zAz^>zmN-0ZLDA=7#3?b!9P+c-A)f4174uRK_s`WX z3!?!6<%9qmmPZ`#*i^;#?)$saE8!%Xk5yI}X55r!Bb4dHYRWEoh(+8Py4?pT zjMt^|)sT907esnsr{3DU=N2~uK2VScg+A?OdF@RxkFio(FR}idclN};?|*(f%3qSA zj}mZxr?yOpPQTp!?HJjbR?+xt4?*JSO@GW*{gy(~Xn}g$ISWqh=l8i=9z{D86|J7r z&L^+zy!*#?lS(CSxnN88iRfN@ukF{YWOfg5YAno@E-SroQ>>|^-k{}*zgr0LH#3{L z#SCp*EPp-Pvp?Cwq@Z!`#`Eqd(O>1ocTPsP{8DhibuBW`O(f4HD7`jJ+#u;)Rd8l3 z3=phNc_{38>CbR_^ZQoLTd^}ymSq>-wJFTBWXMc9Ii94PdlXP>;O{0jD$uVBl3=<=F3Wnf4o`+uDm8mKb#I=#~0(lt&=$_Y7=vz}%O zSK48*?>HB!fOk&BM4nD3a7iAj-#?qEXYZhL@MHt4{Iy|9^iTIg;Oi(pxOrFLqX_S% z2bhcYCz=K+S59|k3*C74z~|9%Mc1`2pDEW=0mVQsUIJNpjaPN>uc+a~ekOw0obZ>& z=fAw*Hmb_rUjMnLVtD>R%=Rqr$JqO3cl$(tJ!Nx$LqSJ~=Ue6Q79nIl+cwPToXERy z|Agp|m2)5e4wU^*XAjlh1dt!ED%j zz^UjK_GkIS1oOUG5}KYT=duJP9ilNMHxoHpt%~0~C2uvH>T39+@_?AO^!C|Q>7(jv zMmLy$8tR5G^Evr!nY!@Le(_V;zDggQ!Ye%&?O>hACAS>zuZkyM)^hoGws-23`o+X+ zBc!obQcPSvf}^3d|6QVTq*{9Q=J7K#F203K**8%3LZ%2UN;FnX|EVx}UiM7ikTYbZ z%?OU0B9;vL&KOh=in8WKjub{PThP7pU8Ps?9_vxNIPYf@CYC6+ikZaPl8bV_1{;K~ zyJ=dibS)Nm4KDmD**NYz-Zgz@@dfW9m>QJ-Lz4a$lK@H1#GK&I0xI=Lhn(LGB6e0w zfP)3kl#9q;SMIWsbz&Vzb6 z(USl1Qw5FuX7r=w+o|Qbn+pO57+vNn&9xa4qxUMi3-NcJwcpI^upQF_ z^GDa1Z*2OEZT|N~ zzwm&Z_GT8}wtE|@S=3Y>FMkG7Dt_xv{`(Ijw!xaw_a=h$A5HK4EeDhSLAC=?*U5>& z^!Jxe|5JI|DLyc=bKzyYU4Gy;Q^ZTP;go+T0^$yJ``0HHaKTS(JN9S}$Zq?moSh^p zfQM9Z2VFb=2yCbNtGqZ4GjFY(%w02ZYumO?sL~9S{z?~|8MsZz-L`3on3(R_32KQ_ zBiSe0kvrd~EQ>!u)^uX2Q|197e^#LR*M&JzTkWAR%; z%b(NjSukXpv8e-g8n;iD4L6i|taNBIjc^rw@@J;eEGIAv7jK-)rmdQdaGBeno@s1K zvQTYIKL56TvEqD~xQ3M~a7*F8Eti$K8UAf)p<(e5_at^xO##~q-Q@8@%_d%*R z4!v0p{UU-E2c~L4JHdBOX@Gx+nD)JA_x}r|*ZbD}rw@pYZ~Ndf8!|WW$uHji*U!6; zMcrQFSDd|Uyg9y)C||96_~yNTlYbh|Vbf&oC&J;e|9wM4)cZzulM;FVva)y2vk!Vp z(@X`@=^wp+A^x5xTfrgUC8#{9(b|UIc9{R)7decC3vS+b{f*t7+`P~Hzn>_W zyF#BR91m`I-0(PD*WYZd=v7P+j*>F$l>pBA_7FM#44}sGx;~4O*!%5st5Ncs$rA>Q z^g5f(YTXKfqByEu+_3k(o42;oZ{76$8+@?4#nGy8*WtV*<3%im?3r*DTE{a97YWpn z63^xyTc0u;@?!~BG5s}toG)V_s*5XIAV?^tMB{^0#D&YL-FI!kKl7}NdKJ5N-=cP1Q!~)KLVdvN;1Q+$y>2Id{Xp!V+#j2Gi+q2RfeO)Yl22@HHhWZu zZ`|&#sQA_3;2Eva^F{7ns>nAV#dO;_0+pkhIb;6qwa1EQT}yNW-_A9VEfvRIWsGq6 z`tBoTiR;T5r|8AF_FAz&38GKieH^~t&1Kdo0u=>TAIU@-0Hp=Ln^z!SzQlw&)T>EcXkK+YeXLOIzJq_}a(Oyp(j}_Y< zF!-u96eRP;Fe`*N@yA|>f&q=z`|P)Gg5o-s7_j+m*CK8=#TH+SFdFz5F0(}b`ovRf zf|w%jBfG)f^vR$`oolDg$?yqWr|)Iq)8%0)m|%RJQY8_}p+Cj!?`J>gR;%cnxl=U}PiF%g>ztscSCW3l454YDUYN|Yue zsai#4Cz&^|h5V*ICSet+7XVaErvBloi<7RQ{L!xIo-j?@Yx3x;!~@P!@%PjL|MDjO zca@o`B{!R=-i5x8tR?&3uX_G>^&EZHV}8YJ_#)#0b5C+bOeP1Y?yf^IdB&dUXXKPR zMMqi){jfse)d1EXzXg81H@%pezV5s`dV-Vksg6=FwOYu6yW_TnujALaR}o}O*{ZvJ zKK+V&zy3^!16iGa@f{vw(Q%=tpR0iV8`tgL|Huy&C#)7dtn$9^%9W_6)FLSn*Mq-X z`s{{bClhJ3=ciU;WAWsMQsrVP#mtEeVwQa`m>kk{94qx~$B-!8jN$QpF<2^2l~qmf z%vP`v-@4y(%w~k@YR{Zlfsl!p?c_U4oYd@sIZ(k|sT11XaN>QD?R-swMONooMVzvW z^1(9(f5I;n`#Wndwe)D3IebOrscr16zwhXU*4J?2rL9#!mgW5RGjT z48T?X?i6LCtF!xc^xiBm=XV5ak4_;a?3>J#;|21Z4T zGvC)N9}6*bdWLZqX&8*FfBR1|VX@IEKlBPl?{(#LcMpTpHidJ0>_~+|-7EWo6IYyV z&y0DpsB#>T2d=$2_-Q5KdGa3i*`7A1vnRi+&|Rh!(SiHo=2G=n)^wNhtuy$RpA|Bh zEqDKSFOBfA#w9;ehe5cJ-?)7j&qXW%a39H%zoxt$Qa09jg7_m-)UL%n+Ym zdZPM4+S?0X%!~Sd$assg`tDQzoxhO%(eU?^IyM6jbe|HYG6e`Y-`p}>5=xG{@d5G#6S9+H4n-Wy5G_I{exrrC8|@C zoOFLp-f2z+pI)cCvmF|9Dt23OEhvhjbUpK};GHs)5vMF2(-%@P{PBF2y|Hy(6(RQtjkFObAG>%;UUZJ+m&;65GFr`3<-&m8zG;l5@^lLN1lyP2JFcX5W536$e}+Gf3FOa_p@k&!f4cC{{22K!W*8Y>hw}j;n}5imzpI51hi!6W z)YM$J`&j|#jKN6_e;mpKCT37F61V=5OW|NXAq)ldT{wh%!%|EhhYhhi!HjC5{Vg%cKgm`#S?4RyI}RORcDQ-#CPCV3BXfU$zEhkevvI|q zwp^}qtkL0GZz$6hd5-JXUN76@%V|voI;K*?$40A7YE5pwchlkRHH-2ll#Sb0H~3tU zm{~N9mEW)C&A<1GDd|>TWe}%~-nGkp-MI3w9_{FE>{+CZyW`Bl00-iHShOmv!_Y$WaBu_M`kZwv&BQoDP# z+x@Bg8t=V*mYRjrFmWugZtyUqnIV)TFX&q_Ym;~cJ)Qj2DPB?4}>S55;haaojCsE z*YPahtQ~J<>l@DQw4)T^OPj&fUL8vCE|wzM%ZNCkeUo9Ho>^zkP<-;VSaS9S0MwdH z+*B|vbk;1)c=Fq*Fmr+X`5Xyrl@m>JQOc66wC0Bar_U!_ccQ$m^yD~{ylJg%;gJ_p zjF#zQ%J{9sS&;TvEUUPa=_(tqO%cKB?cJfZdMt7M#Q)zSe$7ged<-rkV?l}3cQI29uy#!q8?h`3q{SX;b688g%#m744{RLzQb@p1@*age4DZ~dP=VqG zOYc$Wz@IU1+=HTot~LEA%;4)ZKME_DZ{3f=9)_3vDQ?5C#h=0vhNlB4Y+)D{fR4`u zP}soNnt>EoV3->SWeb9Pfv6ty`xH*_b?Xrn4nnU}k020?Ub`H@5eOo`HKX;nC;233 z5=+4Z+7c)XU>y|%l$Rw0h2ckV`3PPPMd|+?LGdv3I^zi9!qIDwBRF;hFGisBnj^>_ ziC#w^!Sy3(6NS>>A3^D8^g8E()D1G1vDkr1Y#Yd3t5qf?92+kit z(-f5c`Unauv?YJoEYtp(Q%lxOq^YG$I>|6f~Y9#>=b$MGhrdmn8|AxQ~ismRU{*~S`% z8M_+m*t&Ky#I+`+vK>prXl9H-AFh-PN>?+I*6ZxIKdLno11GV~NOlkD;}{Jo^lH_$QUKje^a;h!g)Zh_uRI(`QoLEa;~Z-t*uR{tJ4 zp3EahY=eK9Y_T2sThe6*^eplr*((M9VX{^#^a}DlIeI7jYh>$P(BG5pyP?hGQ?gGQ z{Ntqm9_ZDQ`Z2PsP3lu$k-1kMBUSd|7zy8toZrZH`=C=ukNwaK$Q*LO5AaWtf$7kR zq}>7NiDZVPz70)9cEe-BJ5g@Ku!Go!-3O8DbqHK6spnSccU<0T*||#QIv+-E=walX zAsZcm-bj`?3O$v~BD)@gzmKeX96FYKO%DAL{spqxPteJv(+TJqE4J&O+o`jt1Z%dEC;^HCZ;s(CUVY_jem#UMB3ki zo<`nPlz;BKWq|uh-`mhj$v5P%JMb@(%`=TdRee&XQN2DY?6ZvO6;3fHOMV@Yyptur zCP=or3ntx#pHDsb59mXr=RN2z$(#33*Ze-X_CDfosQdj1{|B<-1L%kc$h$!{c?iAg zA>x0NpFM)!`v`Hj$KYi0%45VEJOP(KLHq^T^C@&H>GTYFCh{U#_c{DHGW$8|LbAc_ z*@!#jfaA#Xq<=2_Sn^pe>bkywzm2qi3EyF%<|!7vGzP25Kl2hvwO@hJuaNYJ?D!Y- zx1{ag$QwbPBy0SGyanVvvh8c+ZzfB1Cj9#c`fqcC+0)vQ4e?z{{XnMlBSNum0tqCYoV%<79W7?$$T=@8vaqz zrxf&D@(;3IY4~50wl>fs$x~!4TlmrB6SAuv{OzQp0op`fA_I-^mr3gHV;Xn$zAWNL zYVN{G)ATn&duvG9L%NrNo<`mvo7ux(OXiUS9pE1#y&R!ulbK|&6a25pQqIuB$P;9Z zvhWv?56Mn0@VAm>T%pI3=gEL_@Z-oFvZovTU8Ji!^kniH*|LB1yYRe+yPR;ma+ zlguE4Jm4pRt13Z$P97(HJ>kzM?~@%Wb5C7)ajv28ZYlTFkCm~f3|=T1MV=w+RDmBu zJ|jcC;ir(!KF|}$U&sbk;jbY7lGI-SewOAOSyddXpt*^OzSxF+zR0am4U8afk{?xv zpGdwV2iJgqg!KLp+AOIbnEGlyCNDYM{14Gp+nPv8CT(g#k05_0Yu1Lpn0!ojsRMr- z>EH()PF^JI`NK~jUy!{5;HQypb)lz{*U6^!;IAS7B?kn;KS)-t4;@L~AzL?qzlpSN z2tAbiiLBlT{zCEr*|9Nv`2?$eZPJ>6W5{!)e^dBN$!xMmGx$46m*&uu$g5PedFmOLv@pI@IaeJf73vBqVofeeu4$oc_b(F$bk4pk^3(f~+wS{vz_BWU;kC^uL6| zC!vk4laO0xGB}nzPX&6c=FOTP5%*8cRKtyGMnrk0Y8Ow zngMMhFOqffja9^biT0jThs;F&4$^TJboeafohSVw;m1U3`j55TNW^>022)7KInd+C zb8}GVXNJGT4E==cGFKa-4*it5@SWx%FMJ;K1u|eheEGfKQ+zjHYom(fMtch50th)1 zo?;Y*{H^FIPE*JqGWr~jCC@I@^dFe57HRqq*R6}RG4fWKC?BOwQjCexhN*wYei5aO z{Xa`y|i^`fHprmd`kEjnoYsHmu%coUjcf- zTaB>jIUp;mAdB|A9Z;mdne7>^`Re%=4+dG}cXln7uioT#`R~I*`lRdaSUe(O(as+C z677ieb#e@HEWvV5S;u=63r9t3)z!{-h?S8!HB_X&7!<3O^H#TEV=LBQa#!w%>+&I{ z#uk0Fs-;rf=~vE9RD)*tewsJ}(l6hD$_DocS$wZy^V@A6OPRdj@aRr_on4q zU=}UiYOC_QsQMl8vi@2ZrTv8|L30v@1kFPq*a(AfU`u(#+B;ZTwYI1q-mNena}c_4 zwQU`_!BKJ^I#{Gy^(suY5v`YN2641=@r@jiY`A;TMRwAxp>KiuJmtCjJu6tN?oi4JLYt=LgoJO986&9t%Fn=KkR--%q5ENvDi)31~oT7FGd6LQIT$4(zwmdV?RyfZ! z*oe5%hBCr)g;qf?d>e4BY`DDL?Jke4HWr09C;qq4O{`wQGk9g&%XulX$JMgO78ZqD zrj{ri6mD?R3)R`=yi$&LXGF=Am0DF5HLK{ZnHEt8VVZ0(h}$bQdzJE3rM!wPkrKR0 zo_*@d^3!y4S{-?^tTmQA(E6B5)NCuLDS9}eWKG6`5;f%oF5mt_ZbewMMbuS93C@l= zH}UFpIXe~Qd8pRXD)=Ou^Aap-Y((l}d7*tQ3)SFWt7cEEC`xI)TC1P}{a4Gtq%}nW zxi3qLZ&u@So35f0?%`rkH^S&Dv^AQ#&nzmhk&!`ph~z~W%ZYI1$ViN0WPV}9P26Tp zu8KUd61nT;#asT5WA1*%k8?H2MUPm>mD~!(CYfw*X@fHP(1o|^W#?MiR+?7Wmb1uT zD-V1b@lco7kq*Too;F5SbHQEW!L>}xGk7-!+{;~@4+T*Dp!B^&)gPNGz7F&*sU!T0I!-Dw@cn yzo%o#>%bD^wikIax7gzZ&KotiQq>~$hT4eH8#NclJnKB`3Gxc+JX@YaR{sOs8OzK7 delta 25818 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