From 82869f0ec1b2a84a6c475c4552bb1b5259f7e9b9 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 7 Oct 2017 19:46:51 +0300 Subject: [PATCH] SQLite now uses single connection again (Fixes #309, #321 & possibly #319) --- .../djrapitops/plan/database/Database.java | 84 ++------------ .../plan/database/databases/MySQLDB.java | 16 +++ .../plan/database/databases/SQLDB.java | 17 +-- .../plan/database/databases/SQLiteDB.java | 99 ++++++++++++++-- .../plan/database/tables/Table.java | 23 +++- PlanPluginBridge/PlanPluginBridge-4.0.0.jar | Bin 92334 -> 0 bytes .../litebans/LiteBansDatabaseQueries.java | 6 +- .../plan/viaversion/ProtocolTable.java | 106 +++++++++--------- 8 files changed, 200 insertions(+), 151 deletions(-) delete mode 100644 PlanPluginBridge/PlanPluginBridge-4.0.0.jar diff --git a/Plan/src/main/java/com/djrapitops/plan/database/Database.java b/Plan/src/main/java/com/djrapitops/plan/database/Database.java index 994a7af27..360429955 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -3,7 +3,6 @@ package main.java.com.djrapitops.plan.database; import main.java.com.djrapitops.plan.api.IPlan; import main.java.com.djrapitops.plan.api.exceptions.DatabaseInitException; import main.java.com.djrapitops.plan.database.tables.*; -import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.lang3.StringUtils; import java.sql.Connection; @@ -22,90 +21,23 @@ import java.util.UUID; */ public abstract class Database { - /** - * Instance of Plan used with this database. - */ protected final IPlan plugin; - - /** - * Table representing plan_users in the database. - */ protected UsersTable usersTable; - - /** - * Table representing plan_user_info in the database. - */ protected UserInfoTable userInfoTable; - - /** - * Table representing plan_actions in the database. - */ protected ActionsTable actionsTable; - - /** - * Table representing plan_kills in the database. - */ protected KillsTable killsTable; - - /** - * Table representing plan_nicknames in the database. - */ protected NicknamesTable nicknamesTable; - - /** - * Table representing plan_sessions in the database. - */ protected SessionsTable sessionsTable; - - /** - * Table representing plan_ips in the database. - */ protected IPsTable ipsTable; - - /** - * Table representing plan_commandusages in the database. - */ protected CommandUseTable commandUseTable; - - /** - * Table representing plan_tps in the database. - * - * @since 3.5.0 - */ protected TPSTable tpsTable; - - /** - * Table representing plan_version in the database. - */ protected VersionTable versionTable; - - /** - * Table representing plan_security in the database. - * - * @since 3.5.2 - */ protected SecurityTable securityTable; - - /** - * Table representing plan_worlds in the database. - * - * @since 3.6.0 - */ protected WorldTable worldTable; - - /** - * Table representing plan_world_times in the database. - * - * @since 3.6.0 - */ protected WorldTimesTable worldTimesTable; - - /** - * Table representing plan_servers in the database. - */ protected ServerTable serverTable; - protected BasicDataSource dataSource; + /** * Super constructor. @@ -179,6 +111,16 @@ public abstract class Database { */ public abstract void close() throws SQLException; + /** + * Returns a connection to the MySQL connection pool. + *

+ * On SQLite does nothing. + * + * @param connection Connection to return. + * @throws SQLException DB Error + */ + public abstract void returnToPool(Connection connection) throws SQLException; + /** * Removes all data related to an account from the database. * @@ -318,10 +260,6 @@ public abstract class Database { return userInfoTable; } - public BasicDataSource getDataSource() { - return dataSource; - } - public abstract void commit(Connection connection) throws SQLException; public boolean isUsingMySQL() { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java index 70aa34fef..e6efbc70b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java @@ -5,11 +5,16 @@ import main.java.com.djrapitops.plan.api.IPlan; import main.java.com.djrapitops.plan.api.exceptions.DatabaseInitException; import org.apache.commons.dbcp2.BasicDataSource; +import java.sql.Connection; +import java.sql.SQLException; + /** * @author Rsl1122 */ public class MySQLDB extends SQLDB { + private BasicDataSource dataSource; + /** * Class Constructor. * @@ -50,4 +55,15 @@ public class MySQLDB extends SQLDB { public String getName() { return "MySQL"; } + + @Override + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + @Override + public void close() throws SQLException { + dataSource.close(); + super.close(); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index eb8d61e1b..7dbb7f0f8 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -10,7 +10,6 @@ import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.tables.*; import main.java.com.djrapitops.plan.database.tables.move.Version8TransferTable; import main.java.com.djrapitops.plan.utilities.Benchmark; -import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.apache.commons.dbcp2.BasicDataSource; import java.sql.Connection; @@ -191,7 +190,6 @@ public abstract class SQLDB extends Database { */ @Override public void close() throws SQLException { - dataSource.close(); setStatus("Closed"); open = false; Log.logDebug("Database"); // Log remaining Debug info if present @@ -282,9 +280,7 @@ public abstract class SQLDB extends Database { Log.logDebug("Database"); } - public Connection getConnection() throws SQLException { - return getDataSource().getConnection(); - } + public abstract Connection getConnection() throws SQLException; /** * Commits changes to the .db file when using SQLite Database. @@ -298,7 +294,14 @@ public abstract class SQLDB extends Database { connection.commit(); } } finally { - MiscUtils.close(connection); + returnToPool(connection); + } + } + + @Override + public void returnToPool(Connection connection) throws SQLException { + if (usingMySQL && connection != null) { + connection.close(); } } @@ -313,7 +316,7 @@ public abstract class SQLDB extends Database { connection.rollback(); } } finally { - MiscUtils.close(connection); + returnToPool(connection); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java index 33529559a..c354f5bfa 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java @@ -1,10 +1,18 @@ package main.java.com.djrapitops.plan.database.databases; +import com.djrapitops.plugin.task.AbsRunnable; +import com.djrapitops.plugin.task.ITask; +import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.api.exceptions.DatabaseInitException; +import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.apache.commons.dbcp2.BasicDataSource; import java.io.File; -import java.util.Collections; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; /** * @author Rsl1122 @@ -12,6 +20,8 @@ import java.util.Collections; public class SQLiteDB extends SQLDB { private final String dbName; + private Connection connection; + private ITask connectionPingTask; /** * Class Constructor. @@ -31,17 +41,74 @@ public class SQLiteDB extends SQLDB { * Setups the {@link BasicDataSource} */ @Override - public void setupDataSource() { - dataSource = new BasicDataSource(); + public void setupDataSource() throws DatabaseInitException { + try { + connection = getNewConnection(dbName); + } catch (SQLException e) { + throw new DatabaseInitException(e); + } + startConnectionPingTask(); + } - String filePath = new File(plugin.getDataFolder(), dbName + ".db").getAbsolutePath(); - dataSource.setUrl("jdbc:sqlite:" + filePath); + public Connection getNewConnection(String dbName) throws SQLException { + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException e) { + Log.toLog(this.getClass().getName(), e); + return null; // Should never happen. + } - dataSource.setEnableAutoCommitOnReturn(false); - dataSource.setDefaultAutoCommit(false); + String dbFilePath = new File(plugin.getDataFolder(), dbName + ".db").getAbsolutePath(); + Connection connection = DriverManager.getConnection("jdbc:sqlite:" + dbFilePath + "?journal_mode=WAL"); + connection.setAutoCommit(false); +// connection. - dataSource.setConnectionInitSqls(Collections.singletonList("PRAGMA JOURNAL_MODE=WAL")); - dataSource.setMaxTotal(-1); +// setJournalMode(connection); + + return connection; + } + + private void setJournalMode(Connection connection) throws SQLException { + try (Statement statement = connection.createStatement()) { + statement.execute(""); + } + } + + private void startConnectionPingTask() { + stopConnectionPingTask(); + + // Maintains Connection. + connectionPingTask = plugin.getRunnableFactory().createNew(new AbsRunnable("DBConnectionPingTask " + getName()) { + @Override + public void run() { + Statement statement = null; + try { + if (connection != null && !connection.isClosed()) { + statement = connection.createStatement(); + statement.execute("/* ping */ SELECT 1"); + } + } catch (SQLException e) { + try { + connection = getNewConnection(dbName); + } catch (SQLException e1) { + Log.toLog(this.getClass().getName(), e1); + Log.error("SQLite connection maintaining task had to be closed due to exception."); + this.cancel(); + } + } finally { + MiscUtils.close(statement); + } + } + }).runTaskTimerAsynchronously(60L * 20L, 60L * 20L); + } + + private void stopConnectionPingTask() { + if (connectionPingTask != null) { + try { + connectionPingTask.cancel(); + } catch (Exception ignored) { + } + } } /** @@ -52,4 +119,18 @@ public class SQLiteDB extends SQLDB { return "SQLite"; } + @Override + public Connection getConnection() throws SQLException { + if (connection == null) { + connection = getNewConnection(dbName); + } + return connection; + } + + @Override + public void close() throws SQLException { + stopConnectionPingTask(); + MiscUtils.close(connection); + super.close(); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java index 24c60cf4f..b2761cfb1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java @@ -84,13 +84,16 @@ public abstract class Table { */ protected boolean execute(String statementString) throws SQLException { Statement statement = null; - try (Connection connection = getConnection()) { + Connection connection = null; + try { + connection = getConnection(); statement = connection.createStatement(); boolean b = statement.execute(statementString); commit(connection); return b; } finally { close(statement); + db.returnToPool(connection); } } @@ -181,23 +184,35 @@ public abstract class Table { protected boolean execute(ExecStatement statement) throws SQLException { boolean updatedSomething = false; - try (Connection connection = getConnection()) { + Connection connection = null; + try { + connection = getConnection(); updatedSomething = statement.execute(connection.prepareStatement(statement.getSql())); commit(connection); + } finally { + db.returnToPool(connection); } return updatedSomething; } protected void executeBatch(ExecStatement statement) throws SQLException { - try (Connection connection = getConnection()) { + Connection connection = null; + try { + connection = getConnection(); statement.executeBatch(connection.prepareStatement(statement.getSql())); commit(connection); + } finally { + db.returnToPool(connection); } } protected T query(QueryStatement statement) throws SQLException { - try (Connection connection = getConnection()) { + Connection connection = null; + try { + connection = getConnection(); return statement.executeQuery(connection.prepareStatement(statement.getSql())); + } finally { + db.returnToPool(connection); } } } \ No newline at end of file diff --git a/PlanPluginBridge/PlanPluginBridge-4.0.0.jar b/PlanPluginBridge/PlanPluginBridge-4.0.0.jar deleted file mode 100644 index ae0b8cdd17039e76f9ebc6ac43e72faab04d72c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92334 zcmcG#WpG^GvZiS=-22Vx z+cWj2Dk}C`JE|h{%{QNwTR|EO9QMl>=r3RFHDc1BK?Cg!Gpv+~>j%Ss0uL%Y9O&i?N# zH#BiGv@jp(L6GxB@2i> zVAkKQ%QsK0qteUurlTUUcC0yp2JGX>k61T5J4cMw-TpjKV+Ypq#$!yc;xO0QZq~wI z!4K4(MD1PXm_y60;(W`)0jAO)VTC3hMUhJqOKKk<@w&se)j$X9P3L~Ee#vH@K-7Hv z6@*8VI#g*$$1O%qV=+*LUGr4gx5o~t)KKie-O%50a5zO1GbZ3avP1c(hXSUV$fp7zz;llC90tL;likaJ>aY>eO<9vtoQLM zy~TFpI;57cm-AOvLH#KN@}d}jAkjFyA7Yy>^a#IE4p362;te?VV0L!*?1|d zj-l?&RBe3duvx9vB@ulub`&?d@eL_AM5{l+EUV}lL6%z+701GY$5GsF7&q6@GCZ*= z9Lc>!*qGzxs7$?bS7uUvGix0w3ughC1ZC85B2-lGN&!?igUW~*!ay{r^@eGvZO}`9 z-eu0(Bb)*XGK@ymZus#NmWgrra{EIIdX*IiBO^(|sh_?N*;baH3>aeUb5`xdMk3vy zxF*OZkJL7FhtFUku#n(K95+V(xPbvX_)``+bKMrna7}h!6kpDk^CG=DrHFc%Riok) zV~>6Gk#n5ByBJl+cmA41O2x+*ae5bXC&Qg>f-V34TB*oIHLv3HPAqIT0Z^i8d)MC_ z3+o!d&{O3!PODh7%3nDM6oP`;YQ}EIBf5D7w^YekzK&vZ1MuB7PNn;(a@qxpHIlTq z_2K(^6)Gj>qubexJKS@v#}kBh7RGd5YvXnOUT4Q9qsn5zuSRe%b4*L00O;wW%wtZU_gtPnEqPOlx!ff1zV?6g}c~yH^TF{_Yk!;L- zME(k8kzVXAhOlF;YNMJfpY#n1>ldbBgM$kaP~Rl~-*;PoY#6*2z6o01e_ z+7bm5hV>(;IJEc`x)?L)aW0eEFoXU2OXRYOkVI5t67n)}6ZirQe>IX$^zw`#O z*?x6ZAc#DStsRRSZN}KL#^wh5xF@s(-^Hwjp>YPU_}FNzopU$Cx%dS!jx9;f!_3C; zM;^J>b4bl&f^&a_6dOdxmJ+D%=ocD$mT8mJjsv5c5^+zg@N_ToCr|^mx-|rQq1QC$ zfnw^=879>&AQV69`~`27glgc~HH`V?`m#$5D6B`XbdhRP`nkpJ_Rgz|4tT4?eCIXH zi~PtXSR**7LHxw&3vc@9ZdnwjW)^qQSdo4r@D2vP(2_#0nt}pJg0VdW$-{JU0x>Tjkw{>O<8V`oyU;9JAd+VZ@YK%dAmGZysmtJruHwe$`Igaba4VI z0g?nM4w~YyTmHBx(BTBc;l?L*o*Tc;c?WYy@l8&<~QIAwK1z&H@Eh( zNpvn%3Rh8GcSZAbE%4w7#K2iDpAMhx7v}a^ByW{v$7+Xz*HDA275O4amw#2r6#JFhaN^2Gr>~KIW5Ta) zc)&r7H{*9kHV+=S-}kFH&2?AJDA3d7o{|UEKI?wv4mX@tWxzK9%8iUED^)SuWV$0! zT(x~RVS7yx!eb6@h@r^eYNr+WDzD-ZCSoCSMEh3esjM9!+V2FhXR<_3gBZTq4` zxBzS($go<}t9o&wZ{}8n7srB`VXd}V<&rh)Q(?R5YfT)!Z6&%Kk5P(jY~Syf`4P*z z)!>XCm`3=-pO)(-$gaY{Cz z(FtVspQcj85IO)fu&4L%`IK#HPW)u&Ka3viN&QD`$eV(*KjNrm?e=Hc8xPp$c}}(h zv){o6csM(ge8Kj|ic&c1V+vTWlz;oBe@I3qd=Qo0ks9;upA0+Uvf9rNuI)i=rBKzrh|1zrodD5%?f130vhDJ7~|H^s|OAWjg3_h>~v2c(L z&SCPheX>CmW}*=|HV;ciK)wdF5lHNQp-UVjwl*$RItrWQx{EYkJI7YSrR74qw=HgP z9iF@W0_)Zz`_`kc{mcF9{6iqlQjS>TYAb&7+}z&T0f=^zKF94^_ zsMo>Um_rY=pR|CMQ4edbvuk!7d#vqO)6Rh~$WG;Jft`VlYrAjzsjJ>U6!t+J7rae7 z<%eI%T2-5xC`b*JIe}7;;t7Im?D^IOT1qUHx#`QnRX2)D;g&bcYrcv2Jft3OX8^kk zVC|59-K6Uqs*Y`0E4iVh21la=J6EZx*HRz2dwG9ZYWj&fOS{G~yY6zhom6Wd5M3a1 z_d<=@7IGotSFIhq+1*p^aHtjdQsyM6?qq)CDhC|TD0{JK$j-o7DeeK;KwoL{T#R8h zb?Bpn27jeymKt-NK8d=_xjLGr)yhH6%-Js!IzE(N=WrKWit4`}#!aZJkxsRWDGCry z#mS!PHTiy;o5<498=khgBZr~DrYNvn)$?icp{y{IIwo=%!h~dwh>#E)sg60tsfckk3I#2uvu|e;W&EBd(8imFzrvbe26U-`)HoZAho&6 zDHsVVk1C~%IvW63nX)WerF?W+(Rr<4h`OM0-;>sdjF80viI|>r0qKRjId-X*bY}Oa z;k6m>)6q8@mp;jHh8AhfAy(`f$^WW)E$SmFNcce0DhRJX ztgd14P^bj7L@A)3!j&AFBKzv&O4Z#gGQ5(qhX>moVNdnM-d(WM@$|JovhVSxHfZD; zY&bcH5H>=f|A!`FR7i7BPI$q18%Qn@y<5sulsbd}2K76F%R$)`#p-Aa5b3;3FxhS1o&#C%D^5y1=TS)(f_DFTnDeFQGR= zf0rsB5Z{y+Ek&0_93Lp$aI4<=-gB}^3kjnX9yw3)=j+iN+A!6;iPlt~*lwZO5r#iB zUtSTcPNqyOR;H=@h%#C3xjK8SlXw%nSh$TA>-TUH%NPcaP3{pe%SeaRh9E4S{n5z} z{FVW|$X*QkoIW#Q9-9UPvIaBtAx}2kmfNNbp78Sc`q*k#rc4EB&H_i<*Ro}_joos$ zM1*aV`tu|@dYf+cyrhF9Er$?aH6d_zl4BgONIxU7i2G==1#xAhF;YL|nF2^{2B>vo_-~5VU!JNcqMEpB=uy2z5;yNWv zDa{QwzIM5XvTVy7<$9B5A)|hAaP!!+dL#>R)S5%xt?BOUIbDM<%&Axn)>ce~C7+;4 zq{PhssMrM2Tu4&%!P0n7$+&oiYF{tpLiaH)WIfa?yDe?YW$wQ0hju&y&x3xklsNnOl~Qhg0*2ek2Zl9 zj%mGSij07p80)wy!+*V)992<_uw#FOOvhL7p;lTq6Y)ItT=vh>w7b5`k4#Tadoj2X z0v*0#`pKayf`N`jpk+2_|2ns<$aqja;QQt@iBot007N21AL9M|U&Ap#-!@K37w$B|2O6Ykhsg z5#@JmQg5oBWIV9@k}~{aM^%^*FezJC-$F3e(p-GQ1vQvhL=%U+c+=-f3hVWgL=Ay+%}Zy*=D#CT-lla`PD~VY{iqPdeXEJ zpSn^p0FbITe{*B@81*d3+Jlu&`?5KNhimKJ+QwrvF?Y&Xo0?Rcv>7Fw&HM-Bqjy^& zSp6{nVX3eSs;1BS1L`lw=kpy+#~$X(7iWyWayn~iUP z(_c`XR3tq(>9Q%_#RDXEP9yQ3E#PH3Ubp`CPWFCeuFk5VM9ovI!Kn5;ns$|#Dma7Z zQjtW@;l}3HZlKD!8zaHRSln*iy?B|Ltk=?aZnpTvL&LY)vlq85o$5uT9I8U86rA?Q zByhkjP7=$BwY}|}N{$c$IhArHJe4q8GBGjWRO1lut62Xw**Igu!?p{Zy*;X-KG~kz z8<%~v_7aUBP3=&7G}68Z8d*`AVdRN4#i_LTT~Pr6SLTQfqPv6oKo`F5J6L<2!PUEPO#&c#}#ehK%j-(bD(a@LYJlG z4@P^XgX*v9SGpNZI8XtDRrbpLBq?->8aK>fYAmaMWi==4Rck=Me@6T_ZM3;!EV0do zF&`GOT@^WcoDvCjA*j-bi>Dp6vZBF9czLaDFQ*LG$=eZzA)_ z*KPjU5f!P}Dx;~R``Mwck<#Wy&96fay#Q?jE~1)}h}eTHSV3`3#9sT_Oc-v)%{aEY z`ik{mX7V(>V^Oj7@eOXSW=4Q5^p||Iq6MbwISXL|;f{WlR=C zUC@l~AM5RZ)Oz_ALwNtDjC*|d=8SoK6UA><|Af(?=|o$^R6>XaKZ(~m8h1c9rck*Y zT>LvuTnapc?uVVGyGP^F+I7$iP`TRHmEN+fQ;UiTeo|7u+!Jv6hhh+88Ak~&kOo_< zd>(7!;s^k}@&pjat-xJuYnc`<+vYQs+DbtY=7Mx23=vU!>~!+3q7Gnl|Q5IiEi6;Dy4J){(kK7QD4HRgvH@d$U6-4rng3u zovEeFiO5*G^$%ju;7g+58B1|h&HHKvKJMd*(gk?5`Vs`hi5FrL8OOo4g z!DthJeWkQDTQoKLhN%^PehnvAP6C{sS5|%>sK{OJB=HIz;~3lLv-n3>R>6V*DZXo* z*gL~~KIVfup1IH;KiwibW(w>&EYBZiu5@uhaIYWVMzwt4pCw88qhwXRSQfkgiB}LZPB(}VKf==##aUR(8&%#-Bks55ye$2&hknL2TVSq z$18U)V34RTST<3b5sT8KSEPg_svCVE9Z%?BZcb1D+amY4x~gA@kRN2n;IZ@12#|XV z{VhrK;ysQ&VaB8ToR)$_jz;xI0UEdzpm(ywIs1H1JrQz|mn;ux@G|_t&q%{wd$XOo z`2MlG=GdMlSXIFdCa>~OEOvSP<1EWSku<~b}-Y4ea8Kq!m{;9*o2-U7r-nS|$m5R`AiUzf&;RLZY~m?8 zpaHAyNEhLQx`MOrp~`#^2~=lV@kEBTFFTv1r%QyYV89}n(PE>Ju3)e)TR8CfHZ$v| z+s=${jy?4U%+4e58~@>2kfFR{yHT~8Ci*)`_etC^r5C0ljGCpwsoCEg zWWwrH2g_%)HSDO%l$~NSX_JU35;L?g)QKeeRLFIOQhHM@g9K%iFWTq^Dj+!A&DGf4 zrY^6OMb-pet$D_T4~hKHzTf)e*{GIXqm6@tD$$CPPn#NJGg2jtlt$=ePE&_%%P(72 z^tWH&CH7)tJ5uKqd-l)pqCE3Y2ULh#RMb?VL7%d3QRO zslQP^SS@knu2zrDV$v5(i28#L+u*zC7{~L2Y5iP%Jyr-oc7dJ>@?ph}-am2_x-6m7 z(Y~%*qP}O=XZN@!h3XSJ15S@qw>u zW`pc=z$sr5UTaeJxoozCjM<+Hw(xI_58njO1uZy3=<&(BNk|c9D=vvKy%53XPN6-G z@8EYV23ELtH!NmM1c?01zzFPTbEeorlIAQ=@J`mhKX%wmuNFK|Y8|%m^dsb>jl>Tt z95Cq~uivKjG0oSVuu8ZwWtN&(Bnfk_LGMvtP%n!7Li74*d$|1do3m^iX>%$XO3wJ9 zii!UV#b4F;s1zTPG>d({j z1y6vvM&zCy`s3co&>ObbHBqGFVPU~&DI1!RIk>9m=Xt3Od`Z5q-o`;$0T+e5+!I1Cuvbd@Z>V&yF`WV4>9@0hQIacbR) zsNYfS-9*m5=9|ag%@kqOse<`v(r;l0$50!@Y)Kzv&7!}&^|e!woT7ZLZnS=0mRm>x z*0pJBOqoxYFy1W_D617YtmrBx6RMC9)b~#nv*NtW2r-LDPDcP-UO>f8vB?CXjK_YQ z>6B9IIi=f)b|#!9iE%gcmPz3lT@Xno3i@mypf=Mf-n)`stB4c6;IN(r2=Q>oETRv5 zhof5xlE$F&rY|zaRmROePwlG&a1nS;o_hpB5HQq@);{&94>2kq&$9^II1m_9(?JE^~v)@5$fB zHWKob+=GB`;h*+2%JzrZ=_;?5mgY66`B=6MZI#Y^#n>9|kjZcn!xH#_#3{qx_;2{K zvR({$yt8>M4xTCql<6CYAGD!fI}Y~QVMV<&STW2yc7j$8}scD1prxQQK(d6GGmWjG5&p5P&2UHrC_7VSlnP}CcRTG62^y9| ze5$w5@Iz|qpeR_1jEv!WuPK_k!_pvpDf+L}2C*E+$Ok|Y=4-P z$sG0Bld|bY6hoKks?L%vQd_<0OJ{_|r^5P(KA)w|36#t0(;90E#Arvs4-u|;1(mN# z_p}SX$j=unUPx4sR&f}^#fYx+1q6amK~;j%kSblpcV_rRs2F2dR@~y^R2WneTVps? zjP?-qfH%);h@=k_gtR6;bTEo+`@tJ)`(W-H@???dU6ATo9k13*yd(SRgVdY#^5>N{;gg0`1D#o|hfW8zZ9KYxM&tmlTV1JBwsaTxYD2`4_o7cQ0tL3D`?h4E2Ge83L|Zy-@*h;dN- zhhgdoG{jY@5f?4oX=|F+RWGX1eU8l!L==;)Ilq_Mko6`D^y}wx8nic&vkwVU$Ep1O zc{h1}dOCOa=jHf!$``x6yjXXISq1$5gjf)t%Dlo|Gyx!OwOa7WRw>DF?RiPmD{ zXh+=<&V4{E%y0+yG_&0q=ZJ^=i0AMtH$9_Y`986+<_P@diG;EAKr?^<0g2UzJWkVz zmx3Aw{^*Drv`lqd4b*%*wxoGuDjn9%bc$?3WUZx8J3esW&DfZF-CZcKt^SY$;gu+k zj^b83Z_a7Mb)*6!R#$y7KD%!IP&DD!tDkUg(r3fBj{{Xt660ScX)qyyJKvl&dc${$ zn?bsflzma2I~v%%;w=lDjWp8FeG*VZlW?AFoY}jGI zh>Xx|JH$U)7Mmr-+X1I0sJMR*qqx) zjfJURMtrIq(>VGRr-2*YIP=un%r(2sM%cU-pIN5C3|1QxS?$zWo^c6R}t zz|iAUd;)MsJBd_oSjIir*&|w;RVlZQ43})v0iEF)Jl{WWQx{Rf1XCKUmrL+~{d z*|qNhl_sGA!;eLjZc(iPSp>p)c?GQ>j1iMmQ2J&6p|rCY{rZ&-h6gPgI@ zW8bGXaQ^H3{Xd^QrTurb!PMFLb41h9(B|)^G{66E?j-s@H~kMlHtALF6UYwtNnO#V|BR;q=CkiwmhRK=l}@LQVDs zgKR5Z!bcPvRv=*$?qaGzAtMFH>jx{i@H6PI!F*M0CE!o7$UoS{M)ZBEE{&_m{^q&K z!B8kQ%kG{HT{ORO`s@C+4 zT5}q6222f@qM$VL7cMRx+&ORB*Il`yFn9}pU&vXsV8FDTFU_=B&FkN^zQP!$^1D0E zyYqY{7`J}VtG&Eo+(fQv4gy};QDaa7d?!vD@kOLwnxf#dvRQ?nysSH>1&$j`exc-v8X=vHo?sa(aZyhA6=B( zsD+WdTVleqIbUaO15v#6@_$h&sershaj}2E@Llc4;`2?l@*{$^FiOoW6(XfLk}aQ> zjI${jw#MS!$yIcTa$joE`+Ywnz;rsDIe7y#D)S0%!_9N>CoI4)bF(LUd>_$_Y;vV; z{#x*gmP&Na8;A*Qgo;^wGM>dHjFaaB&oP$$Yh7W#4pf`i2pMJy%lB%KC;bWLuY_U9 z=CJnsw71QFYj1`A+hHzcXlY|=@;{nETV*^|bU${yRau=}S?$s$mB=MK_TFX<8q`5Z z32iHhIB@i{Xy-A#`KXMoNi*dk|2>8i^$SW)?w2~kKeDm+n_HlC;My0zCfgW}Gmm+X z4=;24KVF~$@Sc>ys`k?X=TxPsNqcXs(|cmD=GTF-8MoJY=*ryu3Fj`jo|A<)OlGb= z`TJ_=v~ZS_hI#`*fczj<`<6B=*rR3)9jc|b;wepJ{!|;MR|Qinq-IZuE|z|@-O8Yf zqY6%w6?D>L-!K|%N|+xhJX5k?7gvj=InomJ%`b7`LU;u_WB^Fub7?WNSr-9KA}1~D zZW9-*AuTx2C4Hy8otG$AOuJ5D;n|kg*LJHe>YO+$&$!M!A$|+AwhdvEj|LE?WqB#Vg*l zeLLBTRe>$eknwN}@vcNt@d^u_G>at>+V!4nf+KZX&)40sbOeiPHQ!OD0w^#$AO^!O z${yip2(5jGm`GBTG4dMhHK(-JU{Vl`Nnopm#l>~aLdy|Z%e+3ezwD7ycrI;XN5VSq77tz`%WcFait=rVJieTjX5=U&7L7a%u#d3E zi0=MFC{$~rTqT9-hqtucPv+=p}DpUmohWlO$rx9uoN*QUD<~fChamNYG4}re8WV~(BkH=XSuphIDTuo66 z0vc@|F}HEMEb#>q==CSTqTs{%wQBGl$n4U0^vaxVcw}BMx7gnzuTZDGU3ehwskq45 zbe0UPMyLekdH!rJ|} zH22?Xga1Qe{a@u!*45>I$%OUikqx$=9DA)~dqA~N8HQ*hnauBfnt{*aRgV zqo#`M4cTJ2W20_9wxK~!JmAn{SlKNc0I_W3*xNjbn18>n&+XL+kyZ;{99IamX`j68+9-P7g_l#w&>@*ZD&XRIQ6ZJ*61>^MRi zE+f2x7Y3Z##dU0;I^{U!**qLLEY_tnU95eE>NgJlc-1>>dl{se{A8pFq{tL&9gki!T5Z#5Rn;OI zMqQR`DBMte3WXbs1o@9X8l8szvV`U*MQ)-W5s@1YR)3n~O!<6EMbPHMU2YkozsoC2 zVHalr9VTbbjm#z7hO2Id zwhH2X;O5Far(k)R#S7J56&rbkWvrgNX(e1CvN1-N|4EP946Uit>+O;AM~D0pJ?Yp4 zTQy!KUdgZ&TfFeMmz)~|TvC_16p$rm(vF<|S@i@zJ}p|AJnEF&e+tIv z|4)LUZs_FjKe(CNvpbq9`g?JfOYy0Sg#{c$pi(odEskd8EM{Y2SyeGrf)cIjd1G3! za)L~%OhA1pCB14NglM1d(AInb-RN9F&r`5}uzy5Y!B39FLh0fFr=!f4P4_F`?YB$c zt0_YNk2|;k+g93qagl-m-yuqo8oc{e{b+7p+T0lg5U9wxAL8J=)O$=E2vDiljwrC_ zP@?b=;fxr`nuraGNo6s$WkoEhING#iy>uHb?9NPec$-#Dw{}E+X^=q=32EN zovBl4rs>X#F_Y`);vM)x#5szshB87VTh=o4;NEjLSEXLurcFSy^BA7A8O$A*-DU!k zJC-LELdN)PA3d2R4x9&Y7MW~$vW7xtJ$VV>4wT2tcE00{^0VUvGFL?-kKmWzR=Slm zX^60;Yrai2If2WRNcB47M-FJQ=A~K&?``oDW)>7Vw^J_4jCcKnK&?D=(jZGPUS|@6 z)odH^TE|w}U>kOO?wsEkjFzBaJhxyQ!l3)6{qr_5{fsj|HL_BK7+%btWPESZCM z#6@6AVNtS>rg-`?G&Z}MC=9ss!GK@BFdEddY9sk^VbfpzD8yjRvAqfh7sp#lm9_=$ z6y{2h)Z`xK1*!E2)xV`17%1oO9zL*~(d+0iX!lxZR9M=5-uX6NvV8M|MKxA9t``Ui zReVclc1bFT1pzR=EtjScO0`SngaWj*wI|DJz>wd$Bau+0)$E=1bX51+aVFCMlgOtKB z-CwMGmbClyRvZhz?QJ7j~to1;Hq$OR$E4;)s!qKK{#-N_1PiZE5Ry~6U5 z?NUi7Q{Hb1PN8GE9$L~)TP3aGe%mJHrMIr)-yGqn{rv8m?){Qk6MWoCalOoFUYQ_QBa>@45J z#jKjF1~2nqGH`}FeDIc7NJ(&WdEQUEYTFHKYGN)L6V6#1(HYMTm46!dqQ5IdlQc_g zQ#@5$l6o%Pwk?D9jTEI%SG?-`3&bzk0-(_zH49VBif&)J3~~Eebv|GKVsTmCsLG%~ z-@M?;xvrQJPyF;<8am;{3o#E+vD#ayWlwc?SB!PM*xWyMq4ru8JL4AGEdvn)*M_ zbhOFMLWqGAQi$T)deQ=a{=u0|pt4q#KN)iz!rx8yQU5!wv6-Q1BY-;tz$%R2wh zeZ>B`p|HKJgQ1h5i@npoI&5X_zh?X1i(8UiX&~Ate}0E(4sD%FeNrI(#!5OU_W7g_ z?-t@Y>xCQ(Pt=XTO+OqiVf4%&%KbG<7zHBBy@AY)%qyPb$!xyY*K>}577f>3gFaD^ zA3D6lXi)OHN!OEo`N3pRGdNOs%s{imZ&&I_*svSrblBt>%$S4=deSGpKhKm*+RKD~ z^6hAuy)$Ys>YMgocjJ`n&0bpkOcA?J%-xnH!D(r<5f8%u3Kho7sx%~7%fi^KS~J7O zA+>^&IqN0zG}NNPmrZ&r5t2@r4p$l;!@50#bGC1;=3b`S?lYx;N66OOX{d3ZLEtwC zmQDi8-^5MKdVd~YIXajfZDcoZlk~Rny)1rf$LKxghG)Gndy_BuOySq)ueamsuA_>| zkT96muX;O0!KO$Um5fjOYGb!0*k>O%k~q`_4J?zJth@tR5~(w18MAI+crH}{DHHD?VOql^=V|erpx?ju zh-bTaUZA(Ratp+BjF6Bv08Jd@I7!DUEjL>pO()}$D{N41e#Jczm~Q-8UnfLgKF!SM zl=5loaNff|s>~b#s~~&_`>XfDgswK62l?`4?$b{F*GG^7|676huK;rX*ZV)iCrkOC zLo`54RH0UEWKo5v$fTe_IAVoCxRVo&IF#MK7P777Asy~hAc}v)JDd;52$X-ohver3 zjRIgII$dUZjW6X&=l9$3iv5@3>%qa&hzZR0PY_w`**DmFgobHnpoF&4FT2U?xG_io zr<=;`u+qyaywM3?q-8LAFv5;qAEl_t=#pYWsfOEE9IpRc_7g%=-M04h8JAs^F;@H> z=N7Iz5DnD+8R;ooUaID9?N>lOFr@*k2%_h8q1jYshCRPrxQn|b7PeO{HK)GThpE3C zgnYyU=gVTSy|KMaa9+|?u7j@_DlW_`ysEAd(5H?i_#B0S&9ASNK&ctdC*D4vl&>9U z$E}~7bw*FBo$?)?tT6zLZPn zJa=&ah+>rS_vg4v%xinxfmaN(V@Tj}Xx?EgF(ph3O575+?z7woyGcW*J0UwGl6Lt* zPLDiG^uj1YXuy$mdJ(2q>dct~>QB0(wnu`dZ&1CtD*USBM$`dyj`k~PVRzO0WV0w3 z=z2-+dHVe=LOJ$?k=r5EM4f6;0@bD*CKYm_1Vk!~tVFQh>YFbjmSaRMw}f+AH?8D% zjt4MdNB}~R3AiWSRJ{nV@Fs2vZ3+eD#MU;O_Fy1rU@XP1v+Tt7ZWSpdiLW(kW9T$V z#N+)xPV`r*v&Qy5k!SJWB2V7`RyzF$s;_eK7uDwzmTu97mAI)GHAkTn?I6eQDIWy4 zcv6%|{2a9A*vbM1eroX+afJNdC)Af@y#eu|+|Sw~OMMzZXJ1QmzS{JjNz3ASJ%4=6 z`I5aSi7CxqT$?#Ssz#e+Q&?w}=(ydVjsRDI`E_+P?Kv+7h9!lrlEp-C;yXYaUi(n& z$3!pJQOTyG>dZ|n+tq}^J(S$`ap3+<9M9%&6H3)yUvv4gM82;c-Lp;ipG?2`7JR@( z7;?{G)f(fok}5EiYY^-)^ne*idqOAb{3k zMn4m9#>MKq43|`D__F%7eiNF5%Q5~d3gU|`7WF$4B{+W*%HGM~Q1HR7Z-T1J^!x)Ux-A76A1E^UL22 zq|dO8W9GhYO)Tabul7dxE!b>eYr4nZZC_o!^5iS45A<#krz5Rk4TAEvHmoMV3;Zt5mv)?{VY~q2{k< znBEa^f-w7R;GMxQu;q{^(O4(T!aWgjaE~KA1AmF)rYH9T>-ojOiqeusi_^WXnlfhlX~p1P;j))v zgM3-KKle5^$z7K8)bs8to&n@a^GzJ=K-lN_26A{^Jp~{JRlgA>wUc<5U#u!~q)A%d zF)LZ{E{1M5jSxU5GiBs2t_3nbRg@rYQ)_KTQk6s#KzgjoC z4X)4>ySuiBg3XJ3<6MZ~f!P^RY6IJ(;Q*W;i7$MB!+)=twQQLeXEsiwV^o@wy6`@C*`I8d-D(?#XY&g)E}k+yWM@>|A`1 zE}$f?^7c1Stkc~TEUK_0*PIYU5@mDjcFcbLU#z`VRGs0HuA30t-QC?ixVtlPx8UxC z0Ku8KySux)ySp=SC%6O-YjyA4ea7gsMxP#i_g{T?^;gwfZ#~sZy8Y91Q^xWx-k#u& zV8ixBJ3k%#A~S#A+Km3eG|P=mZpY@_Jjcjqzle>}!X-O=ROgrvIUnldpPplm8t}n| z&j_mdm%n!Y|4{_}r||i|D>M;0r=*&LkKeY>)4n;?k%ZfesvQd^y`c-Sm1Cz7j)1i!TaTk#bR9M*bL2~CwIOsIkz zYMro`E~F4GT)i2Q@QxZ=V}`|b$MT7iZ(9P&AtexWO;$J=zm-yAvkvA`1fQ!Ne|i?f z;Rkg0mc{Num-+sn)8_VfQV>e>Uvk%<1_5!ZG%{wIHxEL&3SrZ0H}B$t;jLm_@B$$D zYR)#4S>cVn+vZb|48ltWYRX9#_z%31AO?Ai!@Oa>8ZZEoo?)A58jYArq#z?z*5j#9 zRwE+V4(4Wtkb?<)kH^~3XMM;||0L=^QYx>K$1;k3RL8&v3trtMg<@B@s0u`zw323o zE-yaHhYCqA)>*9ACM4zSxg_b++tn)Jtic8B-|kyi5}F-g^^rRbG{`}`OQ$;X201Ke zz;DW5SYY3_!k?o%{yrsd7{_RCJ(I~C`m|!n(IwsF15{I5qFB%%66Am&$P*OxdB_bRBBL^za^Tx@Pl-VC!GaLC@$da{6%< zx_TXYt+zf-Cyf0b2iuLr&zlSp=aSR&pJptLGA2x`NiBp9%u#)xJSzCK6vsY4Bg6Q_ z<50qIO}hQP>?AThvoeX`Fe2gdMzdXN+QDx6)2Xmokdk@Joi~NcU_5NV)OVmy6{e+J zQ2VB|nilumkr%rXy}hqvI$!vp8aDNwRK$L?f`w|u`&E}yN&!=1ZJxbFW0%p_3qRDT z+3^;%mvKKvGPl@G`FsoJ5~z#@*ov9Nzkw5=iSMRZfLU8JKdu}CWd76{otk#4_vZJP|I zyYBNf5?9!X%=`d+&;MQI4HXt&$UnIz9@{yIqqiU!Yo7fE`Hy}j1P7@U@3U7a{Fer;|5+6NC)h!u28@rY zJHf~MJUNrRK`uBoI5yasW|~T$pJT&}vbGhSWkf*_Z_!g)M*@_zzMMX9IB&J*_Ogp= zN1}YO$fgLKN!AW$@jTB>*OfD`z3IgERcC=^dPBo){Pa=w$IbWdZqUasBm;rJU;OTk zOW~xk^r=bIqgV?zS0MW%@nUF-jdJjtcS6&Hg$20B#<6bB2T}F+Bq;1$L4_VTNKDl| ztQ`Rs)%&ZqeBKyH)r`Z|*V|m~9 z9YXNN8T!6!op@7pOb3}Tc4S9Be$aq?3hWM1 zIU?Er3J+0izro4aS(WArzShFJG?RX;?bbT{KKM-;!6dLSJIO(!?=M(Y2`VQ$e=KGR zETIZyg3!>6v42hyCoaU8sP-=r7FHT{!|^~6LvIZs(mpE@wBz8PSz zPG0h+xuiW$g6+?6*dp+cZJwapiS&k2?raCqIBu9vhE8ratM zV+?7cz6wW1RuJ0H8M4{~J)iJ;BOjD`OX@0IBKf+y_!+usxl?(yqkr0@s?GA zb`2+~Vq!vK#f6ktj1aU{k_{yic`8rLGlfC7YQicLvE<~x&>$t3IJYRpSOGH z_C1>V5DCWIh`PYCPqnP++>A2}TfH;PF&OmFFRj%}l)Ai)-?6M9g0ix@$Ag61Lvh$bW6 zL2GCptPUBS(Fn~fu4cTCB%>}SP!{!|&LILeep=H!se;~=vT}eTJSBx9Y*kK$B7&!d zxaJ1O&Cp+-O?E)9Xa}%XSimHf+pjeFqyUvW<&y}IhsSMxH+ZFh2Vd?1pz6IGi)D|wte$85l}S_3`~jJs5{{h%~* z0;h%|)7E5ZVaJj)M#LdlG=^*rn(QhKlDkCZ(RE3XMdKG&cED{5+MQEr0jm5_CADFo ze9{!t(#c>Ns3>$Fh#$&%E;&4Bv8G>{Z3Ojr`SWhS&mpD6ah$8gNhcE7+!w-ngkvSi z;@OTaf;uLftvK&;;x1L99aJbLx^E&)7jm6sdf(Pvvj=3QSbBW{Ih|k-qbJBj|JS@xRtJ5!S zzth3SfMw^Hah>NVlUE$XAhS>w=Qe35Gh(Ppd3e^AElcEqlp&oHiT>KJwnD;OEVL5K zyx_|zj=K}$?4AJHVgaZ{1vvN5++tnQ-@;nXqCuukoy!+$@5qq~90KeY*$(kc0u+}x z*HN18iYQnNFc*zuf&Dp}71T3UpYFOEThp_29`Pv3Na#_Gi8OW`#l>fJ`=09A!GVj|9F-(ML!FdAEg;-%}q}Y;$ed#YO|4X zEiyZ4md~QLc2>Of!w4&oLOnx7D0kZ;ba>jkIXpj!W}a-;W{GFvp`ZBsOzN}6wd_}s z&vR8Bp8jfaU;W-E3ZRSlqv|kU(U&nwC2w@W4u}`Z!6baDg?26JrLBm0PNUOKaXkseQ3f$Rd#e#v4EaiJ!3YQzpwl;h&Zv;f9 zt3^$WsfT3ENN^hpeUXA2uB;!5u30~GQq+zX=Sz*YTL5}eszkK}MC5XR5JF0Hq^7^T z>7lue@VDKCP(Ai`9G%=87?!kpwsHF3&QmQpd2}J=M4RmOC|LbQZOR43*DULLX#9}= z`XXW6K37E5NDbT}?YaF#P2b<;hF|KdL1-@qg21y;)GRyfA&I)-GujoXd#OKpCkfdT)|#RO zHE$C2g(>fq6rfK|C`|aHb?vN(<4BFd%+=(mjJ^rpx5PY zGjfqV;>w{-emV@yJg=UI{A-{lF=j;2^`3mI)i1W$4hZ|f_4j{j9jDcO)~%n|1a!=Q zrFC%scRDo*BWp87b8{O@J2NF4BhUY%aU}j@7NU%tHSaBJnM+K(2LWLVSEp@f>>skG z#)83~h#HEN)fDp3Q>XKo*SlR1MvjUq{r2^p8kDiAGUkSMI^H@l@i@uFcJ%iAIScth z-=huQ7Xu>-eK=T$95@L5WJm)&jsh)22|XQ9gBo}Q?o%{s4GtL&b;p({_j`Qq;Xy(m zf-s1X1q^1LOtp|P5k8X6^$r5i+85~xHZM(8^PNv!q7KUnVRTQtsz&~{q_5$zfmG+t zDsjxL%+b*v=cmN)GjPms^?Ru@f*%c|2#uw(@~aijg?TsHnY%%>D*l9Zm4AQYSZe+G%AVxsU1N<+8|lUYZe*SA9Ck++Zh-p8v1S;GplN-|uFfLj7t zwU~AIShhDtxUPi!$cX)$+!^_a>t`t^jcSq78|xj-mP?9yF;-ah5M|0 z`%_5wM;WP-wv9BNn-j0qw9^5|4Ykb}HfU_I;|_SM`c1ZWDD}v^S7-f@dIojBn~`u>kNIKB|Jm(ZW0ox6k$0Pjxzlc=IZr=^pD<*%3lqL`q`T~|GO>czc$FT z{CDEc!pYLi+`;LSweV?^xBoXj@_!92QT(4gC;5-(mHzMZqBcgBw!%(kM*lXds?>P? zg*S-t5mnu|&j0`?M|R>!5sMS$#9|+41&V|QgsPrnLrZGPl6l83R@Jq$a&I(%Q*-fi zYv%+dIc4`E9@_jmFaCu_)KwpMmB`W{_~UT0k$+Z)7>0qs<0iUD>C_8+NjHMmRYY1a;Hs;rF%kf~F&von_ zEb}-l5c7oW{IZp2=?uN0;yGOVaCWQIS$7lR7%dpvB`b?Y<2ZjR_GN9q; z))Y8uY(Oiu8~#~$A}IcFV|KH&T66i$ajwzf5+oBS}IN4(0fqbnlbtv*55j>?s*V-Kw0;76B^ z=z6f$kM%_KmFM}opX@G$FRkcFvK3+Ibkc0lk|&ib zFUod!?gwtZ3S=ZF(>x7>o}h`~Onu*I(oWQdDBLM9vl+lmWfk+vPWOwC8>Yy4~8dB@o35VmI(w_Fv~wH&>sNHD=} ze~w=M*wg1@#GQ~8+@Gbd#b#TcdG;F@+uIdvkZ zLY}VOC2?ChnVnbo3#>Bra(Xt&GRrSXx=E2ZNqUHC<_0Dxy~ZCT)8MEp-)~(LUo03lV(&kFC<0t<&9Jva?|zE{su`N?x;U~O0=8D8POK>G>FwAWQdyCgC)go zG*6ziI4aFc=9-(wsIo99kDmm0KIu{|5RCz9*#~((ab7FVN*GJedZ+oatxPNLjxX>j zg1!UgTjE;K8*v~j&n5A7Y7(&_nvA>&ZsYe$M(Q>rS=<%(=Ab9&EKCHV#}9vRiqz=9 zxZ(BMQB4r64ByMK*3TQ(lZbuN9IZ8=%mYUu6z%ZKx3W1mG3_p)CyzP4>P8xTRXZH4 zq`NAW#29zU?mu;`NVPY7rN^(G`7UCGy%|F?49Kk;48!fv07H2(p5ZB*0JK$k>+hc!qDWX|#@^wLx>#EJrjGr^OV%V#d(G?wnKt0nt5ff?o29E1OT8y-Z|W8X+oRKEGR z<%_gv2%dyDf_MOYCS*P5qZX2Q?XfHY{Zs6#x3#a1RrW4T^gIH_cJ#N8Fj8cVN?AdY zC7kwm5j)us2fQh58<&-mCJyO}pGT|pYbuRC3*v^5!`i4}2N=V~sZ!7IruRW-{`%- zKV+acWC@{w`y5O3u`+$?^1E1YNJ`Du$aI*5M(R5!A1s7m_5KUF@k!^n78O-J{MZO&?l36V#x4(LWq)&A zsKUdlUwRGaEVL{gqz0BY`*c31;@z*FQE z*I*B9s;CJ)Xx~|=&4kknW#rK(RB$zL8#Ux55MK(6Hr+CG zfD--XmKt(QevJV8l*G+c44k*EV9b|Kf*TlUkHF54hj=l_Q~hhoBTU6aCi+QMT?;$n z{mXM|vyGRrL4_wJJO(v4<|bW7!(QylaNoTBPiIv=Z`+ILXEluVFHP!l|68H_?|$`4 z!1L#V3;qXRC_Ri$ugA8UvUARvKUN8YNMZv@1u?+JI(eUhZ{>Vw6Csq}=Hln}eBc*R{j^4VNG@tIYWcTX+u1K$;B`_;wL@VysJxYgbKaRt+L7%Bv|e$kxqbBwR6= zp~^tJyR)X4Be2;cM3|6Vx~v*jZKsu``o6}xs3Z<2OC!WJ($qtj8F>bVO7jT7xRMKY z+X#1{k7ruDp4||4zchXCt1FqL8)D#I|4T_#Y*E9~*;=1m^8pQy2KL%&eeG1!wJv6G zAr2jlO2E1)Ed`@27p=py6OZtX9kqtEznn*p%++3>c9tG3vWz`wHji+D%JtdvxVAdFCm)S=*R7rW<+GC4(rv zCFbL$Nz7bDt&6)ICAnDzX}MKsabp3sFzM>>!b(x9!C70DrPxEz6vRkHjmkm(C=fUp zl=Ki<7|Dio4r(nU%EI`~^vjN;Pc)Z^TGGW`kogGM`3FwlKDWPn<6*N@ZrHO(*3_jv z0KLw%RlA-TOgrLbQ**q^p9Lx4Iy_wCCM|sV1`?*LbdRBes69v#U#tT`_TLeh#w- z>ZyjFasC<#?6dr26SMosqCv#U9w)HcA3{wp%{cL&lOm@65|yWBpCQXoY_}C6j3Bg@+bSxY0&NG}3z1&U{6Uri3k{KvH@i$&C2W0Z@UOO;)A! zRV}2C#p^3Nj&afWJS%HsRU(r?YP;savI(G>V9O|#u`w}$r=f(iB1abTR`t&hHN>|p z^iBdiu%*QQ7_KN!i#(bGgtz?=kbRWfVP!dPnIBN+@JP-|acsF6L+ajbehe`0E z-G$B4p_qnAlLT-J<3)B-#du4Jm4qX6*5M*|f$7tics{l2~4M zE~N_pR|?dMOg}+Xc)6TQEaR#^z>7f$?#s4ZI9}}10vA6Unz*(DycnInad0_KlP9st)5Jn-0Jr73>Em5$VYT&%yDoo&Sw7ikIQPsNjPVK<2KzS57+RwYMq$ z!k$;=l3aXF3ENM|d(dk@rhj5=?c#eqOH+{w*Y(Bc;=a!Cl49W%+7&K$OYsSDhdDE% z*CtbV^VG-;;p?gm1fL|F$6M?%LPdMnz2Ia?^$q@pplsr{>KFUwY%V%SvuK8@o{l8xxrOeaz!EjQYWqH=nm=h3&%e)#ylaX}efo(xbJ|DnCFr-yG73jzaY=(=y z6}b(_$wD^1LSA>5_;IYa$A;J2o-58AA_uN@yg5QbR0tB`qF+&#YC#vr(eD1B1mc|@&;#p zzc`L)JHTx!B&>!-l0EhrsDXDE>&sfPJw}+2f~Gj9-?Wv%NfJ20ICQblPG=hpD>?_7 zPyL7@dHBkr$^Sh5-s1z^{0*HnopO6IEI86G)wwPTl^gsUD*TW+I9Eiy;< z$p;G9%q8x?R%11a%NGW9q`49FkKOXAu`o?qfpy@-E&L1uPL~mWtzFZO*EFF2#_*v^?iwZrB+cS4+U7ZgtruwjoMAg z%NmeSWBr>KsO9V;ACO>!v91p@j9b+`8^b6ST3|apdQ1hc9Q4>oU&P<{t-MviuhB%a zFfYr|;&1t6n~0_`K9LG?zh7V_gCQC#QPK?x1koTH>ZMJRm4wDjcspELJu!OL;4r!m zezu|DV{t$q;98nb(l97vvhi1f2h9_Dmh!cwk3_Ep#65kM>NQU-!O*8EKbmR8L%$d6 zh62X`aE;-kKD3PPL$DolBM-6N*Q`}((sYre>$VqoIkmnzSES%mjHJ=x(~PvOdj0cF zXb1`84O)=$iYnk{Uf>OQ2lw--HNape8MbOq9A_E*4R+bAqaX)p2EpZ^+RK2lGR{p3 zT87o{#ej+a`{8BK7aL%%Sr%>eTT2`DoAP3vmguo%k=NQI1toTQy&0(bFx1N~I_#?J zUN5Y!;M1rU{;sO{EZ_1xu&{r3e%yLdgNjcI!Fo zg6U#4m}lomePQRcDiOIB2;J@$G?*62!LiB4&zppsEw31zm729VZOm|D=Zd$KE!3RZ1vJliN_ke&Kz@W8;C1!1cNEN zu+dH|k7E(7ah3(H|B+*3skXo@Y2ckGZH>T3whn;RM1|yh%a?)5@bL|E-rv?6+#>RV zS!cJ5{?osxtTJpdv^w54wCg>My9le1GhoIYpmCGl#;)GqjofR0^Bv}f%NJ&0$a-W^ zwkq(QL%=!f0IE=h!rCDwjHt1a!Pt18r{6`qDQakmt8S~)ZSN8Fq3I>ph5(>SZ64Su zxPgeymUqC4(|OEUxoh={10m$V;18@X%NWl(&NAyQ*sQB~P=5#~I-Yfyt7{xH3W#OB zzAmjkp@yJ)vx(KdDPH5KBM72jy}X+jSl}qK*fL%?XrdiSB=Iq1b?BHR=i?TxN&^#qKu&vz|5P${M#zyv7l z`h$hRUTd!9?j=N33VHUsy30tLF!b3 zdd*d@aeqz@P*k621{E;rLGY`Wa{?*{`>j0`BIT<(JT(+W%Ll|i@;8tF zEQ!cxBUp_5ukyFd|3d!$k1c^p_5TB7mt7`Zq1}T!*u=be5mJJK{)1dgEDaOpo9-6E z+OTO`q?0E&xV=M#mM4J*viOJ#yP2}{EWm}Kk#{@VNUcB0YOi;HxqV!|`a;RP9Hxxs z2oy&a?Gu_4g9V`kIZqZy_K2|ReS0ut&3^u49>%Kt-}m<>vQo{{o_mFXGwq-ljNW=@@DKl zxGDzhw)#1gvwIo+68S8qc{%zsOb^cpx>C@P>B@R6NASV9LFuXZ$$nx(1nG#5nu?7^ z;tE>Slnwv#&5%)rtts}JdjmnR9GrR#U1cA#%y9r|TKcW7xZ7|&hEb{e#_De3T9jJe zYH*{65M^pr#xPtVhrTVkHDf13Xj#!Byqrpg^H~{jQlb9&tE8~yMRspl=-o}h38j@Y z{-C&=_ziUQUyBd>78=fL@^JW~{FX4C2A0apago$<8Ts#NVaAw>IQki3`yHrv=A6@F zXIiTa30Ak>x=FtytyYbvHXoKwvubbv(*wpJIBmWNP9tm{Wy+oV*T15Uv)b;Xl9f%= zP05>WCQLL3w84>L5210l2`=H4E?IV5qTFo&FXwZFe!uc?K$kwPboDN)l78WOFp=tS z%pi9^s%X4F1Qv0tXdERP^I@tDO%FK5xB zJCpNx0)Idr%MGqPSv35-!%04|d%5L0?zxgA%H8q{p=&ukbJ@eKiiagr5UjLpM7rb3 z)xsp9}MM0AKA!h*KeAlY6d zK7dd+K@K+wor*I8nt-cf4}uL{!;XqJJIbBa2jj=(2VZ?{TkG{jaf~rc!3;UZeHbTv z{->VeaFp*e{^`Gl{Fi#l|He2_)!y9YKQTip)y|y$?c5#dDl`~u!7eH+dbmk^Nkf82 zhDydjAo?I;>?r&lRDJEzl#13LDW|n-M7}SIJqBY9fks6?{RGr@E9B(T#^Dp9%mEhD zzDF5Xx^5ruNB0I_s(NOX7aXPg#XeoUWrJfz*al`sdv$SLOE-}(2D3MnF9wsl-*x9d zv3+V$LWTH6H=V(FxW0xXZG49c_<;erKbnIu>>PeYHs^ETz*-9=C#mK(JN_wsi&U% zkGZsea^5@UDf)$}4kNR%JgG)`PA26M%pfy8y2z5JuSCTmlgLU;vwSKlM)js(+Kfau z;>vtYUK5Q}v{dojGU7eOVnS?#j8d$ePjsYn^bm5=%5Q30&ScES_{-(SCCKw%BqXsv zVYL1{jldk^9qK5YmLN|^6LpU*vHhDLwxrAscyRDgFB3&m*iR^MxR=;9wIeZIOh3R? z)B^y@^EIYBj7d0{@6D-(Ef0=ij1;*GhN_b8oavN%+nsrs(+i)pF5RD+)r;et{SAM& z;ba*&n>QHLlPu^Ky*#`6b}qknuX70glreSv6+(()Ph;KHEF7QtD+iICHz#QZnqd8R zn20G%t*hja;L~ExYRqgC0O6_&7O7;PfKbAi^V&p4F>qlPiFP;(>t)1yQx4f9KviL_ ztu3^XvLCw8`bs3hAt`Iw$g8N7-)c!(CY~=~`UgSbCeutzUbi}PYAWti{2}jOFq|Xb zLkP$Wd3en5UqW;RT)9{i=afzmw>^}=?Gf@IP(xM^apmynDhzO!d}Z6MjtQ5KU?^!O1P{J^(5o89#1||A8#EUsud>`0NzB~ADhcmMHzF9MXS;$c^bWu-% z`T7%Y!oi~glQ5SgW*Q&iKV}76N|%-hM;y8{*Ay!JHwePbmalsda|Q+IUJG_{c!_?w zp%`H+boicIid~XNdre}I0t93vxu^t+*FnwyNSezd@_4SF3M$LLjQIc7`IG<1iiK+H zP74yq{PpFHq*|OqkW|6o4mP09FQnjdHIZo76o^_(YN>nv&8vwk1l|m#rVP?u)YGM~ zfn%Zq#6*evz=F;Dpfc`#;k2xi%lXY>@5AYC-;ZxSdh9m9U0FE9%e9se3cSag#CQG~ zi*ZVTTt%A4597(9<)@(mGPGz2Il-98sw(4da}g8*<3tVvmGzi*s43e#1iHhJ$LWp4pQd2GO)x77(TjXRp_>c%}sKE@aqS$ zhCVd*S?&>BMtOOU{T*VO@0+d$39}ZGPTi}>kj&MsXnUppYp<6EAt7vrV4R%SfSP2! zU3KLPW)x-bV^*OBnDafeUHjzLdzZ|{1hecL%&$}w5^#_%AK2dxv=G7L>jfNXNfh^5 z-!ip}4PfH(Lw%cTW?CC{G{0vWkN*jX;~o9}tiz$MVeu6A;wqcBDl?b-f~P5cWa&K$ zIQQjbq#}KVxpp*B{5Wd2~SFoCz=jo*I-lF6+U0@BjV|bBXg89m`1QJXJ5i3 z!p9j!QKDOsKQkUQGAABGW6DW)ZwEl+{i1){@E$ET&YvQBs!0N9|S+|M{s-K>v zKClH&MQ2u}{gdzg!zjL%6Mqu%L9*I@xp?xUGx;%99U&=uA7I2oKUn(awePt?Pb0ag z7q)U&T3T%;u&)g1lgro&o2ff{N2Y6V7fFK*ppA?$Z<%lJ^L-lsEEWxl2LNckYP7aX zOdiRZM$t@w(CBBXwTpms z0}`})WLZ)adZzxhLIWaEoLoZbRBIwduj%P|VP}+>@`t2yYBIrwj2xt!BVnwnbyhf9 zniP3a#>J*)xJ>LYroDHA~B0jN{?4*6+^AJZy@F)z>fY|MC{Mv!L zOydzrRE-ellbPYuNd#r~0V!DZ2!a&cIv!4c^QhnFCokM4E$xr{sC0U2B97V_BDU*W z|Lp;_g(HT31-rZ1!ZY#L9&Y#VlMph|KnVH05d;y85sJX+@P*3c@Y|CI^8Hg_fTB#V z^}!wi$wrvs=;1utX?{d zn}rtN8>-MP`W)+ZWG@!#g7J^2I^D93U={}3Ctc`UxytYHnpW)xUsPN5$>tL|;yQVu zv?-gG&+CkJRu?Q97IMrq3kWD0H&P>zxu5<2k>XiB2I{&5Ca%IppqO^Lo<1TmtEIg*VRrtIr3Ybs1YFOhFgfe=O7an2Z)jB8 zdRql)?iE=FWYyOHK2P7&w;eUTvoVpWr_Yq38-AWGyJvE2q2^?>rHuTPYwe~_`G>xy zWsl>G&Jqm0ne#QO$*k#jU~|#yv?*6~10eNq#g%3JW3vHKT*i)i%i~3-iXTn*=)7P77+C3gMb-`CLeuMAM&}zq zH-F$cd0;+^^2=_S{LO)z37!^=BYO-q9c!V?ChrYQ9d|oRN5GkrDwWeFqwrL_e4bkP zGwyBkh;22O*2|Z$MrBHerba4IL=hiso00&;Xc+&kb_3m2m4~v8%l{o6H*9%ln1k~Eg*g=|HJ3hyRH8A?L+M! zYaYssLq*{qJCTPuV`wu-RC^s>ZBU&}=XIb_7bR6^$k6op`!CMe$NM1FaoJ|- zavc_}9uu7mTK(GA&Po%-zg34~-qyESNkb2uT7RZAV>@bI8Y>3bv~f1|+UycLEPrbM z>dxAQXlxS$Qpy1JSbW!Aic_>_uI|0VpYSt**dh38+&DSfm|F7bpx!4;7PM7rKlX!n%-$Xgo_%NB~*`=cXeNsj{4?n zY5*z*KX>=4>Ba1PE@F#WiLc06Cm4)>u&dH^>hx7NDJ?3d7E?zQR~14WVuZETvo4%l z{occ8QQUdEDW2JCOy&)r;uEA`aXp1IbJ~Q*VM*MJw={}{;BN(*7~42!l`!ZUq9tBC zF2v8-6f4<;E0mhjiXO^qj!BNW7}OTIh#Lx*N<})2C2Kc-M{XhJ#jqG%p$T5hxNL^X z)cA`5Mgp~WlhkCMiq4i2gs(N=G$s(yBkP9muCrF%M+fuAv86e{4OSU{wi^&=BTu>MK)=P(>=aIw=thx zuXw{#ZJ0K4H^YA7S#%9dN89AhV);lzDp)zp%CR9O>L8_iCzz%=+{@JF*KO zWHpI&nH^!2TXn~(5=>3@CUaBBiJxBdRfX+wxCWZq(Uh^W-6AKov80%@pcc!^ah9({ zIKOy3Aud5S5lPZTF4ke=T3|)-FuWRvaM~`-8QN~o1B(*A))Xm(z%gTAS%q;T%;3^z z2g1|YFV7(V7<;>>Nk2_Eh=Yuu4&s`D;~kHE^Cvv8_Iuc4iapDo@MFqPJOsygfxp8@ z0)umcEoyN3CZ52fv>>8Z870raqr$-?R}OxpXP88dD}(eL(Jg4E_Qu4D-PQBz`S#>p zUI4N~CMEk$i^x*~!L9D|v8*=c?a;nWaL7X<6`~w&tY4tGz2PuH+(|oM=?5bYK0I}g zY9Sb=j-i{3@kHy0STAW-AW&$sVWL_}FA%)3=|2 z=K-hw;M)6B7r((4H8Jhs^~#hUOGsCus&%zVgi(uXs)CaBY($CoBA+B3gmJch!%BMx zJMKa={xM9(Z!Nbj)H(~U+45dov3lm_ne#WY!ParqAZU#gT~Wi~E{Uw#e&5)7^PdyB zf@Z`73L#t+egY33rN?TUlY&)LGYgnXVWeJEq^rweoT7z{qSKTHxNu9Q{9?nwDIl?P ziS{3 z?U3q*H6BwSBO3n$?`78~u@Nlag2v&2-RObu>Jew21Y+Hl>?{%btr;z$98EbJZeEL* zE{@5t=k*YRf+Yz}2-DD?BK`9>V#nJ;+MuihPbGKgS&R@Ay44R?z_$feMIAR%DO>AW zI41E>Zg?6#uoE}N$yX)cDXFK8Ljo40#n1~fyCjiHw~^TeExroTCVqgsd7fqi&It;Tg46pvEt3=Rm@LX%fGGlQ}8_z2g*NO{!Me9n%I2)do;}SC3=>6rwI;AwmxOB?sr-Q zA3zroKv2=@P_wra^}9VV)k3D+CB8<>9w}&UOUMU3%RX42IaItr1&u-<9rgl(6e9~7 zERi-}{P+ULxr53Dd90<;QEbFMRS5NPO=kS}Yz-ZVD-X}9XoIs0I$Es4hEMu%zDou= zdhJ6g(o4qO1mkW$#oe$i>@h8p!Um=2H7RALEl~fknL1E+Q-;Y^WtZqG;s@!}=JWpe zNR=%92B^hEqL#@$ks(Q;k)44fw{L$k3!8QmZ>(Uu!7II~IFwG4X-|L$^81m==+bozg6C`G5B~nE)M) z&jXe3h~%lrkW9+TWu!j_{bWw{{O2H{IXKCGAV;hf#hXGyQL#CiiwJwyHa;$G*{`kV zS1*O+Tv%yruPy#s5LmfnL$jlxWvFmveD(3ZvcIaI&U$ma8aDWXKk(=a|8k@D#g>~f zI3*D6tH+HC!5(&8%rzNK&Or@w)*UDzMb#Jhm|`MH1J^a<;X$6&*Db+ zizS}{5(Ey5=~?V=+F(Z*&s=tt9!v)oIY@`EX+%L^+(eQMpOh0ElmkY0&USg5y>YBW zFY@8De94MgE25nB0JKZ5SU%SwxC(b6L`g+u@1R z=`P54R$0hpjh8nl-(45P*7i~T2t5HPPp&n%*to=-@S;6XCDKsHt@v=8rRz@5$7-k+ zt3?{=={H8NLtG@t4Aq^M$lWg7ruvxJEX-Vumed3C!6Rce(KI|$mN)pR&S@^T^8{$8Juyw6L()i??JYe!Q>$43>G3)1qTU!+&?w5hAZbA%D!%=$3 zx`h_xTH6MsW8Laehp`{?fU}qNkQ{3FQ0#kUt=j!2lL$n*i3LXAz?jJm6&v5;2w1Gt z2Aq#SiL^Ycv^>KuQ*6ZCaC8~@0qt)HL~li&!s3b$@N}Ei*?2S6BRIKS!kLXi9V!%p zO+H>dS@0RCGp2&-%>Ys?lDhpejKe{y;&4dci^Rdz+GNY4wvGdcB}_5ab0F)^x~d&& z#qN?8ldL31MuCHs1yz$X6#oxr-xQtsmoD8M+qP}nwr$&1cl5@#ZKGq`wrwXJck<;w zGY4y(b7swa7g;M;`)a?n>sQZHRl!r?fxhrZ6gWuyi%=0y7<^YeW4{7N2PC+h$kL_Y zMCa>1OagWV-ubbSWQ$8v(M+w}Pjr6g*Q^QqNY#~|J;Xk#h5cw95*of)2T<*i|c3pDf27KEPiAD7vE+ zQ@l<5wN)xVH{r`ZJ-zjYdGhd$Qt)6_Hy#lnSn=x7XIWC-dXt(z1}8Q4)EX5U%`~qJCKQ@0JwhDADV*)Z=05`=Nvk0XZ zu1puMbVC%zZLS+S&%Bh2@_Y>4*Q_M9tc`SS(D(%QtP%u|nvAvBfZ_k+V%eh>BE8R_RTHv+L7K5U^XeD1q)Ej9=?nqTXA3CET=JMx%V$5{77 z$HutP^8)om2QQh9(bgfm)$S3r%LNy-)D;i%uXpO3}1Ci}wN~eTkv~LegmZ~(j z`}m_RUi)iQ_%^xj&yuVMQe%!fG@le#uNr#iAGA1ND3m!kkIWu!gxosVJ>(Yu>cX^< zr&tzQLURh0ETDD?|8$gm2_br2HF!(+y>C_Nj57RO@Nu+hGa-%xlC!_0!UxVu6Nu`# z0CZA{>;uQ4syDnrKQc*VZ?=Rpg7hHeB|PrvT|UEJ`5+OcNM0%C?TT;;S^;MEu%tUn z?}slq@F6&UQFI2`{>!)HCqH_6#XtWRcP|l%ixB^{%S8?S_gV1&u9H#yD|Exg(#6!s z@SkRXa{gQA2pQVR8(DolB>xC)R9gS5HI5g1-7z7ZjWut^$vRKKh|cdD2?+xHE|H?B zXgk&NQ*00FzxZ1B#AF zp%=99MtOyW#CY(YWQ(mb=`Y-0JD6_;4+HSSm^mXnSu%elbwrpTnJ~oy;COD0)1c>g ze|z(I;zkZqlw_>LjevVW+Lg4o0l<>B6EiHPu|GBkxqdyMoh$rAw<1Qt&Z4U-^vpzC zmFP&6x*Q64%f>o1KxW6S%-hWka|MrPGOz7*_~gG5{&82+;~B03Qz!ppvsm1)Pt^vc zHC(~FJc6Ss zw71C8{M6bQ{CK1S-14-VEh~?>DCktevg}l%jM1g=Ays92=tU_?UhlW|7W+aMP3Sq7 zr(gm{2`njO!G#>?iUyc|ImoqIz@+Jo9_cd?Y*wH(bnS0XNFN2ruFCf6_rG1v_jh)@ ztFJuJ@h>6w|2ClfOM$Zgc{ydiZt2&>a{lY@zbUX)>XshZ>ZrWN(&=$LlE|!0h`~#e z3Arn-NduAz9MQcII^0Qz1NHlDU=tEp>j@U)7A6;HYe0FlruJh>1c~*aW68x;7mbBq z;XLv6*Kdy**ZcCHY?Zn!Rp!G-+SQRr3IA)rNq{vq)d2L z0t@Ue0F=b%{xIWFIAo?By1lU>^OS;_Y7WgFTLn9~P+Mg?dZ15~E&9FfAn%((W8MQ7 zsRo`k8hp7sg7AlYB!DN+8-}gxUhtbOS!sMMfT?{T6WceMSG*)PR_XL2?wI zxxnEYO3)lMA^!bdNS~#^;ag5nd5D4IFFlo~yL3kys_UXx(nqvc-IV9F*S1A`XxYR^ zS4fnHDvuaNnjHAHzc`t((uE9rgv4oIjLHh@)-em37F7Zx8E;W(RUkCMO^%CII>Jix zkAWOJEN{DdK*gX0rdmZ1-RGy^R4(@3S-ELcK++2UFi3&S-qeTFUJq7MOQV7dD z!a32bp)7_b+`CT2MnoRV-PtJMbU6@SN~ce8o{*(fl->6Rc2542@7Fywdp*i z6*;zMHU4sy9d+8tav5bY{u~mglKnkBx0i%d$dNXylVF#fcov^s`G&szc3C_F^=&ZiVXOEAcOF zvA3|8+l>*IU$Hf#9Hje{OSvHOBw5VHUMYk$rJBj1%}@y#3v*z;^1cOXy?aN6W`#ga zi{mmyu0(;rT0C|T#};7%*deEtaj52Mj#%;)7QM_=>4F*7>Nlx9Jk-QBMqmvxkxr0> zdobC`w>({wD5ciT6{3ThIEgzr%Ve%%1Ii@JznE3kL|LiAPop%&gwT2Z4BlxHLzK0c zv1y4ZO|unyKDHSUmZ^07)clfMIZ?M!8<;st_q;jCzf-}54nBQRIQ-IQ!m07+xN!V^ zAl;fhBE9@i)prnn)m!Fw9ie&E0kuK;8)?+;z8X>zEt-a3gW=7O;P63fTmjnJKsq!8 zHri4vdPEDR^Tnp(4lK#zTBiqyzFyk^qH;@N$nJul@Cq^E+dItt`Up2KTigA?Pd6^XQri}WMcKblc?A*5y+zTdjRxUAQV{L=N^ z^`C9ZGbpTK=UAJcMK@FI2(O9@zig$LERTEq(N zGDRu`!&7J+@SAdcs;XUNycs=$9>h6Hivp*yhA09Rjh@)fF2vIm0erh<&eo*v2}HWq zqbL`&Lxn}xPRXrkvd|3HNfulsX0_sb6QbL`30eN|9MNX^pSN*++f*_4n{c;5RE0V5 z_P5_bW|#?H@>CglKfq*{R*%M|?02Oa9MltMT4POj$1Sg=9_oQAphkO&slBS#n`&lE z)u#)DPZv0r?h}mQyFD>P9Wi$%dOe{Z9c@TkGw@mHl=RD=q_&`jHC5o$vjN0Rz~;XF z4Gz5Uo*rOhmMyKvnAHzzqIU}S8i%@*gfZt|zo4Z=1Z(Kf8>XP&nW16I&Kg+$YVSh7w=;GDzvzjMH5ae#DX{rC5q^#=0MIl>lK=2wR zR8-Yhyujn5es)ot*c&PW0&eO_2QrY$okt^H@ra-bE#m+S-t$k1(1Ty(2Uf>p|Gnh| z=DM)#0d`L6=fyWV3I=)X;M~xEJYq~7xZ`|OSGIb%xj_RxhwVnm8vZtmtkCh1u;YWK zoz4r(w>s{?!g1;FqSJstc;5=eX#23m)h&+czt@zSjG#Sem62*oKWa}kwoO>d?Tg2k ziX}`=FDhpwZQt+Xc2F0w*TK#pJg~E;FjABUMm9&uCD`k!v%_BB@21bc1k z_EUFds@}4=TbmOs4a~jXgiM2FSb|fqy5#ht!R3x~PT#~U)0|6(;Eo9SfL{gzF`UtZ z;uw+po7|XZYI*>S8a19k5OZ4h8^cdQt1e_noV_*S%NWB@YjE4NUWO~96FMeY@f$Pl zMtXGNik4|EgU~ zM*L^2MEu{Py8ppSL=0UFjSQVl6WS-`<}}?N(1&Jl`Oj76->B zT8}rpr}*Boy{~SDx4S>!b_lwjb}R8WIgW=(lxSDNDDkJpdtIpMc0~DEnW^Z;o=8#Y zUuMHov~Quzd_DBK^nVMBuZ0NWGx3=ejVU;;#=sqDIf53$J3Ec3p3>DAZG{BjuPdl1 zDmlvbq%7L#Ld--WK%WzgxqP~S|qG3pxgx}v@WQuOP)u}|M+$CjdN@$z0nLFg7 z??v4}LIt9nAxx>ljI)f1~RFF2r#5oAbXA8Uf3iSwdvM{8rZ-R$N1-s zIjahbJpnRiXHCF)lETwuN0l68VB#W5Y{qF04jv`;&n`KC_}OTvrJ9}`8u|a0U;riN zZXtjk&NSCD(iwF1Px(X+5TEvNe->1ct-qh|4=|K$2*(Cu{%kv${r<~rB+Pape1|Ns zBpj96I5NF{qp8MO>~Zv_uYLpD%wk~%QL2B-7+P|O4wu~gfZrHXUzjoB>TxskdN5ge-#?Z$B1Gqh3 zO3O}|shpfvau-2ZTu-)%Cio2>AHx4xE*XC>X}ZNehohRgNKfJbu4qWTx!j)0e6uK zk)Y-zot34qG5;v`sxQ)>I}ka3yKH=(=O)bnE`xQ)tYGKiux+dOp+{AqYt=TYXZA8) z*J~Hoi=1vr`x-9dYfVSIy192y)8YvtecIaV%4*ew^x9HnV3Ex!0> z{`i>=7y9OMs^+LL*g!=Lfg0kl;!kRE>b?PcGh9(BrpR4pljnCtr)7?Ym`cEj4dU0M z!Lrg66h%kkeVyB>9|p$G+3zRMf>9~8WpNWmYU8#Wi`5TA2gV9fRv@lr7VuoTU2c9+*w)eM_R}tRq8GZIap5WQnB4$ zJ*!<+Lm`G~m-tN#Tjr4w9HBIV0M*U{o1JBVc5$SC{(x928!nD`bdutba?CsHM*&Zx zJGTx6Qy7>sW~5_wuJ~pd8>Z)y;q>NCWm|nrGVm0p$*(9O$8y_uL(nInLy(Hi!_3>j z2a4&6Pr9Z_kY;+L;m)DcN3P^~YPnzCfZ8kPfbK%(&k6p&Ua{0#6ClN}a0l#vYU2Bs z$^rhzxAlL`o4(eS|0)OgD5iy}tkR(prE@~{64X=_sr@-t)LV!E3ljKQyjiEK;g+#k z^-9(C^Mg#0G5+}*U!s?p_jmfR@3zd`=0}l++4A{ zse3KGjtR!;!pk!Nl3`j{EHf6SmPto(VHjqd1{`-xEp*xShZM|Y88yWTdY6Bh|eRoUvsMP(ulo^ zrqF1d&vFm%TSKibTly_4RzQvqLVOe7rRmXY|Vx37d zp8{&=?UfybiiAQbWI;*o1he{MB#f}>GGec{xD+HaFnrQ+gE#;xn=n(!Gb9qI{|vOH zTJa{}=3u_uMfOxt!1j-;q8bXil>WL~xt-#XjB0gt1EgGqPyR_C#jppRh@vbCYMbFQy+YR$k)tGZ0)qD2L`_wtQIzg0_%{gO2@X@K}=CL8YD z3*!O=oT#cHWwhe|=D1{>?T;`nkcFn1;@}~=h2PA`Wcm<^9%ACGjqS>&tA3{?yrBYN z5J6%TZW4O2hDfrDtsyR&Nf_Yp7UB}F(+NrBrt~Q(=!ohIl%xN_Adm_q8Ag1St0s)L z&g{V$c7QGugP=fhs8&Ka%pU6ye})~BpJ{TBeDpa2S=(A*r1KR?JV=eFPw)|GVvUD{ zf|Eg7Bv~XDC7dUb1wB9tS``c$3Z+p#adisxXP4gNf<#m*V?;!8y8By<-&JGI{@~Y` zO!A*bJxlz5k-mS7%l?NV_2&GgNPR3NH&S~h3|ZOi3u&>!mhEXM21=)|5hAQQ?TaKM zkIN}Qb5NhIt%}rCs}0c|%1Y1!K?S1;=Y`sH`5XeM1n7Kg7JNn=Yz$BP*1>Ta5~fTgXFUQg zfkx6$nn&_u9P4V)z_Qe$w#Y#BY+C9pLCHhT?wEB0J$F!k^zh>wU(__njiygEY|bz` zi;v=mUl}a?j$o^g=AiKRjmR2{XRB}U`_^+S%d9*|Jq6Ez4IkzH=E8wyU=Nt>xCM7r zANrpVV^m!=dyb&At&st}B26lxM{=5CtBul!QjM84Q>lZIrblKV>|%`R?6z@?;Yk(& zB9Q~JhS-<|MA2%&rr~2hfwuV?EY{voVM0FPAKh@2cQ9!Vg96Tx%oIr~f+K6mB4x5O z4e}FN?}lN<6W_SzjdNJ2p#asrFA{Z1Xqwvb(TrvVhiBgr3nn^TJjYU5^Hp-fioZD9 z)JP(&p^B8~YcUIHO%CFtV0$b+`a=ThaHLPt2Jh~#Ho6k4jF*#xgOQn@=-(6eG>J|} zjg*zd$*F9|C&gN<&QNSsOJ9NMI_~Ij?2LBF`IG_H2a|7Sl6JYt3AG}rE4J3fZB(|5 z>TI+D`8Z0sT-arsQZlGMH&i#|JH~0sBH3cR@eNGPL7H*ov;k%At?y%~g=(~uEFS=4W)T^lE9?P{Lu?y|ktDGJ3l#NJ*D6x_+2NGd#e zd*B@fRDLHLP2{TY5`!_E1Rjv6AWB8$NvQqBk;c*uavP-k#-7;6Hc<1ZX+{X5ar3hw zB`z03;Gv4hAcYh1C%VJ(w~Yal=dOW3*O83WcU;-M(=P8g<`_m4N6!$0N3QQc=4qy1 zX}Oi5Dxu`A3o{;nz-;0pjizdenlurTB*Fwk_Ux=ro=LNpZmD@H_Bkba0~@&fqRdeR zh8eErZm~0!Z#$yzpR2;rT{=RszAx1M6fMrAS07Bl4AO%7&fMj!F!@JSnZt-o2i`<-FJw?`KI0PWQ&g{EhmG^fhQjoHB=%7 zHXKjmx>qioZ*IR@d%&=bX@|7&nlMF?vbqRGbPm#`wtqJ;d!Yn8H@WL7+boL{O1c*o zXW~;X@83;yF_d_%F^%4P!;PhUdk{;VQ!dAShn=+mCM}xL08 zA>n*h>7y}J%qiYaJpStpNrn5S8sDdF*Z3g1rD`%e@31DoN^LK=p7*+OY*S=I=j?py z#_2_@TRJO2jFj@o1D{9q*xb}Md5ef&IBa>FL+hA&*}aIDU8f!jz&px|e46U!hMXDd zg9mk(IFf9_?ivJN72&sBpPh=8DI*&hg%@2?;>LbeM4Ux2T79Q*#?U?j8l}uQr17Nl zd(r|#ig};Ne&wjL6h2=vg5C2C^_MR$;}hkMx>@3O{kM>4pJWM7iKpA~G<zms^ z43B*BQV?ylnYD&{Q4c);d*`=p&(du5+#>D34;5H{thE5H6fCyL>bRAa*p{gziLZYa zVlCWBUwL_t5g#~1HnUaM<};+ciIptAFW*}@!{S1p_+-!iGJs#MnrX4y^&)25Au~hk zQ#7-LTINuy5WkNSR5@T&l$H$>u>k~{ZfLVT$Y2EL%z0{@l~1}ZGp%J~@AMv}Yoxfh-cNIL*lSrax*gwekbHN@wH-7e z>Cy`Q~FFyLhS?397;!){Twp%g3eK-*EaR)1NC}83@gp{!6FY z15JKWfbAMC0Cvdwc}Vk|e6tw;G2$Z^((ju9?h|FL3(Wz!=0_zJCKG|OM)|o;>0Vu` z?B1q>Ll`2~3#|-c`pHaU0<5i`43O!40nSLb>h{q~VpncE0s~+WHdz6AggGehT|=jA z<3IHEcb^9z`jv0km2(+Eue1Sw*v?6%8Re+S6$S;}B4W}p9|!sF=34MW;tVX;Zn?zb zOyD~P>B&ssHMru{keF8FrVF<*` znN1V#=zlR?!~qsx(Jvc-(LZ9${`V0l`M>gX+Zx;2+JA{az##woT9(Maeu(T}NBxHz zK-t>T#^%3Gqlz><4RB0RKRZnt8dhc2P1cKp&>%Wj3T??w)5t6dWtG}Z*~>N?i&UZ# zHoqcgt|r=;v9VNm1Um+yd*1|Z0O6KOAh&8DD2j-p1IYG+$Z`EolM_c9L4^k~tL)d_ zPcO1pUat?h-%f?L`LS#OXQQdn)?g zLGv>O+(GnP4MI>2%#P~!4z8ceq0P%sg6dEwRK2fUw_dIYHN)6rGe5uTke^shJ-D|J zfp)dNcajGY=^z^sSHtf4dUW^r3iN@G*W%$r?eq&Ri32@bAlN>q24M%RKv0KXewhQ< z_s9f4AR%*54swuU7dA_T9SJ5RG7J}PiRPyC7mxvZB=GpEI*5~Cb|%1u_dK? zG+|j;t;|(D=VnWB2BbrhCVL=TMOO%y_tE^3+L$^MCt>eo`^+P@h$O|BysF=Au24A7A{l}+oE z()wis*P0|tp$yEzDlWI{dCF;Gxr!0etUt~rsE=%0x-CW#m8Myx#r`VeR#?Q|t~~_r z7!!%V`yG=XZKktDe<;vHpikc99R+^$858daZQD4#$<&$8D4o}Utcuj{y#puaW}1HN zRvPoKiPyW>ko~O%r{D0&cFI0H(?=-(=ri+&Qgk;RW$*UbZE8^W_%rwi<-YziJGh;d z{n#@+9=X8KkFTr&uF2b-*1E)7kdI+u=YT5K4Al_bE%MvMppxLx=@FWPU7u*&Ha6y@ zIi!3S6C$ekvQ(dqex{@y$Fz46L^is@%j9QD1-YUNVo*}51j%AiCfcDtNVIWfI`3*D zDEUQ5wEJs$hfJz-P-#>7RAE!emZVkjCpc+SMfW7-$)`SAvMYZ!mJsqB4QX9^;u<4%5z{XjyHI2FN7Y=yROqnmba@%3_RNJbzq&?9=yr?WL z_EeF}bFAwF`LKkW!_wlOY^&bdrzvbbnj@$x_#NcjH!C@00jOH<-|{meavYqeX{z=L zPw&dy#mIN~7VjnWOEj%Ibr6Ovc^T&k#L(Qsjz5wQ4YcstxDQ{B8|9I3w_Y*jZPwH{lrAuV%*e9|5OO{vSr%5)kXtuJ|{Z& zeBmUE4W4NJ9o8|cF!XdPq2n);X{#s1CKKRL}CuO zN5!*TITU&}3=ztAU!U))a-)KNjA1vhrD`Q^0iv%k$L41!6YR)q7Qlv|9cNbADF-V+ z*T>UK4%1GTSu1QWZ}mvZm;S<$XoFUVbBKYP`l`7=ogfP$96CIi+>4FL@+XB*yL0>D z?DX^Xw&fZI)&m=g%vMGM$Y4dX{pm7SlyGE0NklYjjk9d(lyuoWqOy5jo*q90g>nud zj+PLHDy}Zmhc!5m%64@dO}iM^t`mmtmC3i%h5Lo5sflLA(%2LOMKVm+0>nwysOH($=w{*4 zuq;a={a_H(Z{TxT{&up!qVU~(SXoFnur8sIP zT2CGL)@I;tkAcIk9sT&=bN|FD^sR(g38PTmZAR}E43h6g(MkNPD4=_;~Bg3iPfMh_GZty|l}) zv=2hp0}HXww{R2UPD`}+*<&YDi;vE2&rTSQA%4M7EkrIXI*}xTE<8BV4h)Wg z*XBqI<)9OYvt3l6!3uDOC~>4?0NjUTl%vhO0BP|?Ywz!h)w#i(hdYojx!Ym&g9e?~ z7PF!7g<&nPD^!Kbrv5n$*}nl~*!PRUjTe*YC)uO87AOoU$R~)fMjARJMtjU!QIn?9jSnc z)kV;j!{|(QvAKWm1FD%1k~)+vNt`8f$= zD+nFZ3B3Nb-UsHkCu=d(j^R!1wrh7W6xf0gvq!`OP~#b-^7Yw`Z5ber-uO1pLKJNW zuseJZaSTQ7JH1h&%I%kv0(AjNagfr!`4+vWBv;le$vYGq!>Z?xz7wniM{iU-=2)KX zSdPw|G-gh%@J_-4*(qNTmxF|a6fbY^Q`O?cxgubb0PTAsN>u*uqucriXzrD}(2_vN zJ2xhh%7VLG4T|hkT^Zt1DfWeE1NrZY?POt8u9+dgryNtqgBUI+$|}>{f(VO>$dsjf z1ns{*&5Avtx5Aq_XSg|GuJML-k9Vtwy?Ia2GT;BEA)7=%{w(;S(*l_PY!b@$Z<6Bw zQjd$2t*!rR@0>5(blK#Sxg=gItkRMtHiVo#A9ZvwJI%?fX0nZPY+l=a92k zjb%m8fmF=#sV+0`z+8#s-5_t&SF9qLpL4}VTr=-^xdYaO%hMwaI8ON5@s`=^k!}Y@ z1f&rKHeTdL1Euxt}iPm59EK^hY<$+Y1_EiCYV9R z3LHkJ6d!;<$G#PbrSZ1)Eu>T$XIEw&E}xXE)(UJ%ZH0(#OgKnU7>6lf*cql-fnDO} zF}^Ng=_@`*O6`M(+t)Dsfn`3>I!GR2#R-lqkZH!!AdjYcVXe==Oi3t+Y*DNCQyZk> z6s4+~)gBGn`g>1!n1v)i%9j|+^iMqt!vE&I`-cqsKfcA(A=NjQP(KEkkc75w;^ic9 zk(zH|z)U(8K`%gnt1SV&W0^RF<`pS!A|tMb`0GZ^=uNYg}-)n(=0* z>1>-%o&1F*C8wS8SZK_T{>mKUUgNsmZ=G)}^q)^@$KNmdyHPTg9b%;V75zFy0eSgo zr(7nnNrqGy%9g47gN~qR-P6>m3bE=629(K*P+|1JM!bj-ol|a6IJD-UaQ;^Y^lb$@AFb^MLgY}5Mo}}41?bY`uUXN z;SY&F-_}NoYaA+~;tvk1e8t}>+)DaL4VK(uV&){>aze(@jW@mbBb6K9CLmdPWmZxe z3is7dnv}(|Z5k41l_UXz5*Y8uVVCzjTQv4#w6lY_kuXbg&8OSNX794{OVIC&GEGZ# zsWX@@jaIw}l_@x0zwy7>)>xRmF9an`Lvv>#S@CAqrQ8n{<|T;9$-h*a9(yp`%cVDB z*5PiC#ja0s&hsCk-wBhgPNkAZ`Gl##52#UrQCC#7dR!OzO3o8hYTEa_ z`q=bZx`F*sZsFAyIx!#UU>S_Egq~T+YL<58xQx?4hXhv?pOjR4tL5IYpH>~T$?hVk zDU(K*$IQUsp%W>oj2s=){v|XkTx&)J3vezFV#g6YAI6c=OdpR7K?*|7qK4v7YQ9uL z7_Q%?CzRA)x$7BMTiZh5eO1;fb;YG&FogFNMovQu`3Vl8oBBu&rJQDtK8J$@Tj8Q{ zptZ|!(u&Kcp_pv7u^%L)J4x9M@lfSjSIV@rEs?rGu7s(m5in5o;r`YX>G$(d?Kgf- z56Y+xL>|Y9y>*36xorueO(G&{I*zaVhq>~|r0ql37Z0EynJs1%cIvr=G zsjl>5Xx9Pob+p-(pZBW}HX0rcDv@R?EI(mj?oI*y%lQ5g^#< zUC;7CqpWt_du^^zP`>0ITKcw@RYk=vmw3iuC`^M`RiulMWVT<4^yaL9dpO5pK;|1;jW0IQ^R~r zSakF0iGhc4*$t-(1))gKW-li~kssqiorZ%-F zxx_h8R+ouAK@L?EH9b2)Zg zkjTYr@}70K!MSLDkOsbRgWf{@aGfs^kT-V=mzx?@V7hT?e?u*OQ~8RT&Srwo>1@^v zUPO-WIr!L+^((nPZT5A#n7@}uS|!m@?}Mim{~=3|7{SQuOhtpwZPf;mklCq&wi_UI z2BSSLYzS4`(A!N1Zqhw~uC6ma4pg$9*gOD|wP+=ZWS^S(z&T~o?Oxo>rR-{tcNUXh zm{Jq^(sI4tV$3$80E4}w&~p}jd!kU;IAZjUxpha4jEN))h%qnw&V?@3E~Z!37~FZ4 z0xQiiL0hi3uCs^*i?AdpDt(u405({~PG7ZuhfjbH6u)me>~Uoc1LeBpzRRL{`%%^r z$W(Bwml3SwN7=DLeu7`oMG-#ByE<%GcjU>7m%thfCTruXigVzC0&B$C(V6A~PsG}M zL#T{!wI|%z=^3DH0cHVnf!*REHP5d}$jDdINSJ^TL5jtu@P&nK5zGj-Y@QW1W4vA) zXw}4-VuQ-08LYltqLDO_Bu~@EI(tZ#*<+C=UtW1cl|y2BJ$Hs#Y?@;!50lGn7evbe z|4)w>jBSe$wLL-D5rM2rZo(E9o&Y)=A_TbuJluR~ILqS>92TR1dpe(m z(ajkr3z@cl-{TP=qvST7q3AMmZc;F}S*HjkoeQEzn=)se%c|g)^9p0g^3=X7(via( zkDJ=A=)e(TOCT{ezMGO;xv}abH#h{Y{-80=zC$EK zr!)kQcm%@@P_p zOKG`WC`BS&{%ceLJ7++YUyz6wH_#+tK=`1ASS#{r9{is1`M1d}<=IM1$Cv!8@{hE` z|6Ts2_*ck+{a62!t?56}fB&T#w||@>Z>REg*ncCtD(7}cf2~Rgpf?dn{aUg*m8B^f zQ!8!G9Vjd+11yPQMSftfP|84an`lPX82LaU8zam5eA6Et@GwgW!v9b>A!|71e!4c9 zo|@j?_WQOn)K9S_Q|Q1ApdP_!F(!(1O-QWtheZZkf<2HKXxw07EI8CfhNQhtldwu- zH~8`!B}G4s!5rHB8ZR==x_jENDz7%pY3m^8T|C$Bgmb6K@ZQ*KqU9~a*{XX?;#xnB z-bA#sESN&rQfxAiP%9#a1K$KV#CR46C#$HkdX`M-mi^9Sy!d6BW7z(xULh#W1*^VB zi};`#P2S$;b%>KNBP$IP*JL-P(Du!IFSmjrs6O2<|LFE;_4_p}WO@?3?CiX!FR*su z@fj#^C<-Q&&mS7JXJg2|S=|^VF&{s7 zXF*=wS|lEjj4$fvQ8(-ofEy4rOY8jZ;562f0fo3jS%N-(j9`njojF5;Jd2? zco_uSMWH+}gIf7lJambzIR}jZi8xa>c}AB_`wif9%5M7w+NFW&kh7o<7-rkt%mUdd zp#rouNOGzl!^#=s>7DfvUPGm>xcls<5nsYB1HgJMz8Ql|ew#vw1ZNPuQTmnuLXW)Q zBgB`ZdIoW3LLi$!gQz8zd_)yr63N;jFm#Lwj{)OZd@9o87v~*jkeWH}qV~?H{`Z#n zOz>S;`7fSq{blg_zlRq8k}2yyFYRBy03}ni|0o|UQngjb7De$RTdkFB3uY5&Tv`$k z6!y?8Y(xq8MQL9IAR+r+r0Na0Kq#?ub7srHyTyOrl*juaawxp(5&iM)GlAZnEw2%! za%qzDX=-EH{Hl}r<3o;M9~p$1cP?tl| zH|0LVWRgVJOD&y)yk(ENc}G8JwPD!rSep&CVtBU_yVh;eWZQL9rlQHK+HzstWtMME zg;NKACJk2K)WiI7-QB*&cGHZNm9=qfmld=xzK?l9wu{%^tbERPIa`e`yp&$w*wE3R zithZXl3sV9ZKV!YzZr#Y8W-EYe*Zc;<4z1UgIP#d5MY#rVa>9(eX;F4CTGLaBfY;+tE{7Zb%h*jKNXQJDaw9IjqK+VoN zs+Y@|OFxn4o&RNl_re;idMxxi@6!|-l`w+PD=R@kA0v|PVqJuOb}B%Qnjk^4R)pe?x^I2g z*CNT*7C&z6yBE_g@JX7;!?!vaBEO%`{0XiQ*9fviLJv%XUg+v4?y%~NfF}tcjI2_B zu*NQ_JGr5p+`N!y53@bY$i4%|3&BYLr}T&}#h$$V4@Yci8zFz9y_vU08eszAzW?g)W7x zO!&kLxP{vZTERF|k;rpVVQ_Qp!nm1^Mj;p;T!kZ$KNAwIpgI{W`DGolrHpn1>Qj6dLf3Lh@tfc;4iI63j-JcD3rQ zmwkW1dA#+0ySKdkoo45pp}0SFmJwSJ!VIN9Re5~aaDv*CHWHMSKgk#e8=bFK4<|7Mphw$+O8D=hCT7oBfrkt`>5}AGguhM zs~o&Typ=Awr6zxnWWY$P4OV3=4&&KNY}>L-0yfJf&6g7v)Bk}cx~VS$D1+HI^@U!E zW*C)_Kjv%JMFpc#>-sOz2=(PP{sI&wn@O6NY!|E3rsBgdK-rqAEGpS@F+8bhS8XK^ zR=*j@ewRbM-Yfd0RX^r%MM9#9qgV2-DDOzq&ex2&g4VwpKTW-D=1KhQg6odaH_#!> z9>)=!=`tCgo4$JIjVcbAPuhH_Isi}s#o^P8)kGE59pyGH^AG{TgRhxHTrc8EiN@^d zQnaUXOnTcmSS)`iI(Jyt$usSy%sBi5V5kje1t!*Duk~+-0V7-hC3UxAuKp@I#sC0e z;WcMCMzH_kAk_`WUJ)AVIj(gvfkn9qj?VW-8dFKg#QuTGY;Aze&DF(ngL;M85(5sy zzU9h5@zCvSODLd6O#AD%$#B`38lU@C5q$crya@I z?_q`rr|7JR*AQNRyhEDDm#wrOb9}O-Va>uJD%X79-A_aYVF>%KL)cRhN{m>j17TAp zC-vJc&4$JUyPqTOsvs0{E||hC5uq9(slp`Y=bx~a=ol6!d4ux)2XH3pkz14SRI`$G znd``3o??U}Lf1+&;G^#gxQ5aF=qH-0x zQsyoS_m*E!9!QE&TEu<$I5*S3|1Eo5(c;8@>kCPG{wb31{{JC~x~Zx4e*nqfW0Kj_ zh}J_vGNq*<2U`Vjxx?mI1`m`74uIgovxel9a+S@DZ8yHMd`6h&A7Ed*ySaQJ#^B>m zW!}E|mgr55!TIk9NFS#0t~tLI@^MFo+q>pH!vs5=9y6 z7flpqDL*`M{OZBj!QUKajLR?X=V3;AX=r=TK2@NEe%*OzU`_ zxvB|v)+hn4qa`&vPrnOUbih@)`8Y4-JFNc2=rzhUo1Rtyp)J6foN#pSj_NSxE!=1n zx~0Eo31bQkSkJG1%6d2Dyk!!B^oX{tY=QEi&>RgkX(DdBf

{-V3&yMy;q^e>==e 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 diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java index c8091e2b4..ea09ce80c 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java @@ -31,8 +31,7 @@ public class LiteBansDatabaseQueries extends Table { try { statement = database.prepareStatement("SELECT uuid, reason, banned_by_name, until FROM litebans_bans"); set = statement.executeQuery(); - List bans = getBanObjects(set); - return bans; + return getBanObjects(set); } finally { close(set); close(statement); @@ -59,8 +58,7 @@ public class LiteBansDatabaseQueries extends Table { statement = database.prepareStatement("SELECT uuid, reason, banned_by_name, until FROM litebans_bans WHERE uuid=?"); statement.setString(1, playerUUID.toString()); set = statement.executeQuery(); - List bans = getBanObjects(set); - return bans; + return getBanObjects(set); } finally { close(set); close(statement); diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ProtocolTable.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ProtocolTable.java index ca7fd2efe..e3aae8f92 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ProtocolTable.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ProtocolTable.java @@ -7,9 +7,12 @@ package com.djrapitops.pluginbridge.plan.viaversion; import main.java.com.djrapitops.plan.api.exceptions.DBCreateTableException; import main.java.com.djrapitops.plan.database.databases.SQLDB; +import main.java.com.djrapitops.plan.database.processing.ExecStatement; +import main.java.com.djrapitops.plan.database.processing.QueryAllStatement; +import main.java.com.djrapitops.plan.database.processing.QueryStatement; +import main.java.com.djrapitops.plan.database.sql.Select; import main.java.com.djrapitops.plan.database.tables.Table; -import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -52,38 +55,38 @@ public class ProtocolTable extends Table { } public int getProtocolVersion(UUID uuid) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - try (Connection connection = getConnection()) { - statement = connection.prepareStatement("SELECT " + columnProtocolVersion + " FROM " + tableName + " WHERE " + columnUUID + "=?"); - statement.setString(1, uuid.toString()); - set = statement.executeQuery(); - if (set.next()) { - return set.getInt(columnProtocolVersion); - } else { - return -1; + String sql = "SELECT " + columnProtocolVersion + " FROM " + tableName + " WHERE " + columnUUID + "=?"; + + return query(new QueryStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); } - } finally { - close(set, statement); - } + + @Override + public Integer processResults(ResultSet set) throws SQLException { + if (set.next()) { + return set.getInt(columnProtocolVersion); + } else { + return -1; + } + } + }); } public Map getProtocolVersions() throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - try (Connection connection = getConnection()) { - statement = connection.prepareStatement("SELECT * FROM " + tableName); - set = statement.executeQuery(); - Map versions = new HashMap<>(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - versions.put(uuid, set.getInt(columnProtocolVersion)); + return query(new QueryAllStatement>(Select.all(tableName).toString(), 5000) { + @Override + public Map processResults(ResultSet set) throws SQLException { + Map versions = new HashMap<>(); + while (set.next()) { + String uuidS = set.getString(columnUUID); + UUID uuid = UUID.fromString(uuidS); + versions.put(uuid, set.getInt(columnProtocolVersion)); + } + return versions; } - return versions; - } finally { - close(set, statement); - } + }); } private boolean exists(UUID uuid) throws SQLException { @@ -91,36 +94,31 @@ public class ProtocolTable extends Table { } private void updateProtocolVersion(UUID uuid, int version) throws SQLException { - PreparedStatement statement = null; - try (Connection connection = getConnection()) { - statement = connection.prepareStatement("UPDATE " + tableName + " SET " - + columnProtocolVersion + "=? " - + " WHERE (" + columnUUID + "=?)"); - statement.setInt(1, version); - statement.setString(2, uuid.toString()); - statement.execute(); + String sql = "UPDATE " + tableName + " SET " + + columnProtocolVersion + "=? " + + " WHERE (" + columnUUID + "=?)"; - commit(connection); - } finally { - close(statement); - } + execute(new ExecStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setInt(1, version); + statement.setString(2, uuid.toString()); + } + }); } private void insertProtocolVersion(UUID uuid, int version) throws SQLException { - PreparedStatement statement = null; - try (Connection connection = getConnection()) { - statement = connection.prepareStatement( - "INSERT INTO " + tableName + " (" - + columnUUID + ", " - + columnProtocolVersion - + ") VALUES (?, ?)"); - statement.setString(1, uuid.toString()); - statement.setInt(2, version); - statement.execute(); + String sql = "INSERT INTO " + tableName + " (" + + columnUUID + ", " + + columnProtocolVersion + + ") VALUES (?, ?)"; - commit(connection); - } finally { - close(statement); - } + execute(new ExecStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + statement.setInt(2, version); + } + }); } }