From 52a154fa4407f155cc84d5a7498ff145c22d67d6 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 15 Oct 2014 22:24:38 +0545 Subject: [PATCH 01/39] Update README.md test changes for pull request --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 947a7c6..a72d650 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ sqlcmd ====== -SQLCMD – консольний клієнт баз даних. +SQLCMD – Найкращий консольний клієнт баз даних. From 590d26ab5571a7e97e3a16ce6a851725eb960e7f Mon Sep 17 00:00:00 2001 From: Dmitrii Shabotin Date: Wed, 15 Oct 2014 19:44:16 +0300 Subject: [PATCH 02/39] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a72d650..3a044c5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ sqlcmd ====== -SQLCMD – Найкращий консольний клієнт баз даних. +SQLCMD – Найкращий консольний клієнт баз даних написанний на Java. From ecbd17790ac9d28c6517b7b383980c27f5d85ad3 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 15 Oct 2014 23:10:22 +0545 Subject: [PATCH 03/39] removed dead import --- src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index d2f9396..100111f 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -1,13 +1,11 @@ package ua.com.juja.study.sqlcmd; -import javax.sound.midi.Soundbank; - /** * Hello world! */ public class SqlCmd { public static void main(String[] args) { - if(!validateCmdOption(parseCmdOption(args))) + if (!validateCmdOption(parseCmdOption(args))) System.out.println("args[] is correct "); } @@ -15,7 +13,7 @@ public static SqlCmdConfig parseCmdOption(String[] args) { int position = 0; SqlCmdConfig config = new SqlCmdConfig(); - while (position < args.length-1) { + while (position < args.length - 1) { String curArg = args[position]; if (curArg.equals(SqlCmdConfig.SHORT_ARG_USER_NAME) || curArg.equals(SqlCmdConfig.LONG_ARG_USER_NAME)) { @@ -54,22 +52,22 @@ public static boolean validateCmdOption(SqlCmdConfig config) { boolean error = false; if ((config.getValueArgUserName() == null) || config.getValueArgUserName().isEmpty()) { - error=true; + error = true; strError.append("value arg user name is incorrect;"); } if (config.getValueArgUserPassword() == null || config.getValueArgUserPassword().isEmpty()) { - error=true; + error = true; strError.append("value arg user password is incorrect;"); } if (config.getValueArgDbURL() == null || config.getValueArgDbURL().isEmpty()) { - error=true; + error = true; strError.append("value arg db url is incorrect;"); } if (config.getValueArgDriverName() == null || config.getValueArgDriverName().isEmpty()) { - error=true; + error = true; strError.append("value arg driver name is incorrect;"); } From e84b533f13a4709ea390a0518418ce10ba68c3bb Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 15 Oct 2014 23:37:25 +0545 Subject: [PATCH 04/39] refactored config fields, moved to package --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 18 ++++--- .../com/juja/study/sqlcmd/SqlCmdConfig.java | 54 ------------------- .../study/sqlcmd/config/SqlCmdConfig.java | 54 +++++++++++++++++++ 3 files changed, 64 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/ua/com/juja/study/sqlcmd/SqlCmdConfig.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index 100111f..f3ceb55 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -1,5 +1,7 @@ package ua.com.juja.study.sqlcmd; +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; + /** * Hello world! */ @@ -19,25 +21,25 @@ public static SqlCmdConfig parseCmdOption(String[] args) { if (curArg.equals(SqlCmdConfig.SHORT_ARG_USER_NAME) || curArg.equals(SqlCmdConfig.LONG_ARG_USER_NAME)) { position++; if (!args[position].startsWith("-")) - config.setValueArgUserName(args[position]); + config.setUserName(args[position]); continue; } if (curArg.equals(SqlCmdConfig.SHORT_ARG_USER_PASSWORD) || curArg.equals(SqlCmdConfig.LONG_ARG_USER_PASSWORD)) { position++; if (!args[position].startsWith("-")) - config.setValueArgUserPassword(args[position]); + config.setPassword(args[position]); continue; } if (curArg.equals(SqlCmdConfig.SHORT_ARG_DB_URL) || curArg.equals(SqlCmdConfig.LONG_ARG_DB_URL)) { position++; if (!args[position].startsWith("-")) - config.setValueArgDbURL(args[position]); + config.setDbUrl(args[position]); continue; } if (curArg.equals(SqlCmdConfig.SHORT_ARG_DRIVER_NAME) || curArg.equals(SqlCmdConfig.LONG_ARG_DRIVER_NAME)) { position++; if (!args[position].startsWith("-")) - config.setValueArgDriverName(args[position]); + config.setDriverName(args[position]); continue; } @@ -51,22 +53,22 @@ public static boolean validateCmdOption(SqlCmdConfig config) { StringBuilder strError = new StringBuilder(); boolean error = false; - if ((config.getValueArgUserName() == null) || config.getValueArgUserName().isEmpty()) { + if ((config.getUserName() == null) || config.getUserName().isEmpty()) { error = true; strError.append("value arg user name is incorrect;"); } - if (config.getValueArgUserPassword() == null || config.getValueArgUserPassword().isEmpty()) { + if (config.getPassword() == null || config.getPassword().isEmpty()) { error = true; strError.append("value arg user password is incorrect;"); } - if (config.getValueArgDbURL() == null || config.getValueArgDbURL().isEmpty()) { + if (config.getDbUrl() == null || config.getDbUrl().isEmpty()) { error = true; strError.append("value arg db url is incorrect;"); } - if (config.getValueArgDriverName() == null || config.getValueArgDriverName().isEmpty()) { + if (config.getDriverName() == null || config.getDriverName().isEmpty()) { error = true; strError.append("value arg driver name is incorrect;"); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmdConfig.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmdConfig.java deleted file mode 100644 index 3583edc..0000000 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmdConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package ua.com.juja.study.sqlcmd; - -/** - * Created by kuznetsov.danil on 10/15/14. - */ -public class SqlCmdConfig { - private String valueArgUserName; - private String valueArgUserPassword; - private String valueArgDbURL; - private String valueArgDriverName; - - public static final String SHORT_ARG_USER_NAME = "-u"; - public static final String LONG_ARG_USER_NAME = "-user"; - public static final String SHORT_ARG_USER_PASSWORD = "-p"; - public static final String LONG_ARG_USER_PASSWORD = "-password"; - public static final String SHORT_ARG_DB_URL = "-url"; - public static final String LONG_ARG_DB_URL = "-url"; - public static final String SHORT_ARG_DRIVER_NAME = "-d"; - public static final String LONG_ARG_DRIVER_NAME = "-driver"; - - public void setValueArgUserName(String valueArgUserName) { - this.valueArgUserName = valueArgUserName; - } - - public String getValueArgUserName() { - return valueArgUserName; - } - - public void setValueArgUserPassword(String valueArgUserPassword) { - this.valueArgUserPassword = valueArgUserPassword; - } - - public String getValueArgUserPassword() { - return valueArgUserPassword; - } - - public void setValueArgDbURL(String valueArgDbURL) { - this.valueArgDbURL = valueArgDbURL; - } - - public String getValueArgDbURL() { - return valueArgDbURL; - } - - public void setValueArgDriverName(String valueArgDriverName) { - this.valueArgDriverName = valueArgDriverName; - } - - public String getValueArgDriverName() { - return valueArgDriverName; - } - - -} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java b/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java new file mode 100644 index 0000000..022b43d --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java @@ -0,0 +1,54 @@ +package ua.com.juja.study.sqlcmd.config; + +/** + * Created by kuznetsov.danil on 10/15/14. + */ +public class SqlCmdConfig { + private String userName; + private String password; + private String dbUrl; + private String driverName; + + public static final String SHORT_ARG_USER_NAME = "-u"; + public static final String LONG_ARG_USER_NAME = "-user"; + public static final String SHORT_ARG_USER_PASSWORD = "-p"; + public static final String LONG_ARG_USER_PASSWORD = "-password"; + public static final String SHORT_ARG_DB_URL = "-url"; + public static final String LONG_ARG_DB_URL = "-url"; + public static final String SHORT_ARG_DRIVER_NAME = "-d"; + public static final String LONG_ARG_DRIVER_NAME = "-driver"; + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserName() { + return userName; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getPassword() { + return password; + } + + public void setDbUrl(String dbUrl) { + this.dbUrl = dbUrl; + } + + public String getDbUrl() { + return dbUrl; + } + + public void setDriverName(String driverName) { + this.driverName = driverName; + } + + public String getDriverName() { + return driverName; + } + + +} From 1d141f60344121cde64f8649de9c28587953c202 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 15 Oct 2014 23:52:50 +0545 Subject: [PATCH 05/39] Added database executor --- .../study/sqlcmd/config/SqlCmdConfig.java | 11 +++++++++- .../sqlcmd/database/DatabaseConnection.java | 10 +++++++++ .../sqlcmd/database/DatabaseExecutor.java | 14 +++++++++++++ .../database/mock/MockDatabaseExecutor.java | 21 +++++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java b/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java index 022b43d..3db0c62 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfig.java @@ -50,5 +50,14 @@ public String getDriverName() { return driverName; } - + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("SqlCmdConfig{"); + sb.append("userName='").append(userName).append('\''); + sb.append(", password='").append("*****").append('\''); + sb.append(", dbUrl='").append(dbUrl).append('\''); + sb.append(", driverName='").append(driverName).append('\''); + sb.append('}'); + return sb.toString(); + } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java new file mode 100644 index 0000000..825f14d --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java @@ -0,0 +1,10 @@ +package ua.com.juja.study.sqlcmd.database; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 10/15/14 + * Time: 11:41 PM + */ +public class DatabaseConnection { +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java new file mode 100644 index 0000000..752bf02 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -0,0 +1,14 @@ +package ua.com.juja.study.sqlcmd.database; + +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 10/15/14 + * Time: 11:39 PM + */ +public interface DatabaseExecutor { + + public abstract DatabaseConnection connectToDb(SqlCmdConfig config); +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java new file mode 100644 index 0000000..fb19c8b --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -0,0 +1,21 @@ +package ua.com.juja.study.sqlcmd.database.mock; + +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.database.DatabaseConnection; +import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 10/15/14 + * Time: 11:42 PM + */ +public class MockDatabaseExecutor implements DatabaseExecutor { + + @Override + public DatabaseConnection connectToDb(SqlCmdConfig config) { + System.out.println("Database connection established with config " + config); + return new DatabaseConnection(); + } + +} From 3b0dee43db4b022ff0e46bddd3071a10a0411213 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 15 Oct 2014 23:53:59 +0545 Subject: [PATCH 06/39] create database connection in main method --- src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index f3ceb55..0a725bc 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -1,14 +1,18 @@ package ua.com.juja.study.sqlcmd; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.database.DatabaseConnection; +import ua.com.juja.study.sqlcmd.database.mock.MockDatabaseExecutor; /** - * Hello world! */ public class SqlCmd { public static void main(String[] args) { - if (!validateCmdOption(parseCmdOption(args))) + SqlCmdConfig config = parseCmdOption(args); + if (!validateCmdOption(config)) System.out.println("args[] is correct "); + else System.exit(1); + DatabaseConnection connection = new MockDatabaseExecutor().connectToDb(config); } public static SqlCmdConfig parseCmdOption(String[] args) { From 6adcbad023ce193c63f4c5b4194fc75b41a948ce Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 17 Oct 2014 18:58:02 +0545 Subject: [PATCH 07/39] Changed executor interface. Added method --- .../ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java | 4 +++- .../sqlcmd/database/{DatabaseConnection.java => Row.java} | 6 +++--- .../study/sqlcmd/database/mock/MockDatabaseExecutor.java | 5 ++--- 3 files changed, 8 insertions(+), 7 deletions(-) rename src/main/java/ua/com/juja/study/sqlcmd/database/{DatabaseConnection.java => Row.java} (59%) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index 752bf02..56d6209 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -10,5 +10,7 @@ */ public interface DatabaseExecutor { - public abstract DatabaseConnection connectToDb(SqlCmdConfig config); + public abstract boolean connectToDb(SqlCmdConfig config); + + public abstract Row[] executeSqlScript(String sqlScript); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java b/src/main/java/ua/com/juja/study/sqlcmd/database/Row.java similarity index 59% rename from src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java rename to src/main/java/ua/com/juja/study/sqlcmd/database/Row.java index 825f14d..52eb9e9 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseConnection.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/Row.java @@ -3,8 +3,8 @@ /** * Created with IntelliJ IDEA. * User: viktor - * Date: 10/15/14 - * Time: 11:41 PM + * Date: 10/17/14 + * Time: 6:57 PM */ -public class DatabaseConnection { +public class Row { } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index fb19c8b..06be105 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -1,7 +1,6 @@ package ua.com.juja.study.sqlcmd.database.mock; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; -import ua.com.juja.study.sqlcmd.database.DatabaseConnection; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; /** @@ -13,9 +12,9 @@ public class MockDatabaseExecutor implements DatabaseExecutor { @Override - public DatabaseConnection connectToDb(SqlCmdConfig config) { + public boolean connectToDb(SqlCmdConfig config) { System.out.println("Database connection established with config " + config); - return new DatabaseConnection(); + return true; } } From f8fef6fa7802a780f6f47be8841215bc0eacf9a9 Mon Sep 17 00:00:00 2001 From: danilkuznetsov Date: Mon, 20 Oct 2014 09:29:27 +0300 Subject: [PATCH 08/39] Added script to work with github.com --- script/merge_upstream.sh | 48 ++++++++++++++++++++++++++++++++ script/merge_upstream_windows.sh | 48 ++++++++++++++++++++++++++++++++ script/push_origin_master.sh | 9 ++++++ 3 files changed, 105 insertions(+) create mode 100755 script/merge_upstream.sh create mode 100644 script/merge_upstream_windows.sh create mode 100755 script/push_origin_master.sh diff --git a/script/merge_upstream.sh b/script/merge_upstream.sh new file mode 100755 index 0000000..f0b35a0 --- /dev/null +++ b/script/merge_upstream.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# Update source code from main repository + +# Pop any stashed changes +unstash() { +if [[ "$stash" =~ "No local changes to save" ]]; then +echo "* No stashed changes, not popping" +else +echo "* Popping stash..." +git stash pop +fi +} + +# Pop any stashed changes and exit +rollback() { +echo +echo "Something went wrong, rolling back" +unstash +exit $1 +} + +# Stash any local change" +echo "* Stash any local changes" +stash=$(git stash) + +remote_upstream="upstream" +remote_upstream_master_branch="master" + +upstream_remote_exists=$(git branch -r --no-color | egrep "$remote_upstream/$remote_upstream_master_branch\$") + +if [ -n "$upstream_remote_exists" ] && [ ! "$upstream_remote_exists" == '' ]; then + echo "* Upstream remote branch exists ....." +else + echo "* Adding upstream remote branch" + git remote add upstream https://github.com/interview-com-ua/website.git +fi + +echo "* Fetching from upstream " +git fetch upstream || rollback $? +echo "* Checkout local master " +git checkout master +echo "* Merge local master and upstream/master" +git merge upstream/master || rollback $? +echo "* Push changes into remote origin/master" +git push origin + +unstash +read -rp "* Done. Press any key to continue..." key diff --git a/script/merge_upstream_windows.sh b/script/merge_upstream_windows.sh new file mode 100644 index 0000000..58c2fc6 --- /dev/null +++ b/script/merge_upstream_windows.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Update source code from main repository + +# Pop any stashed changes +unstash() { +if [ "$stash" != "No local changes to save" ]; then +echo "* No stashed changes, not popping" +else +echo "* Popping stash..." +git stash pop +fi +} + +# Pop any stashed changes and exit +rollback() { +echo +echo "Something went wrong, rolling back" +unstash +exit $1 +} + +# Stash any local change" +echo "* Stash any local changes" +stash=$(git stash) + +remote_upstream="upstream" +remote_upstream_master_branch="master" + +upstream_remote_exists=$(git branch -r --no-color | egrep "$remote_upstream/$remote_upstream_master_branch\$") + +if [ -n "$upstream_remote_exists" ] && [ ! "$upstream_remote_exists" == '' ]; then + echo "* Upstream remote branch exists ....." +else + echo "* Adding upstream remote branch" + git remote add upstream https://github.com/interview-com-ua/website.git +fi + +echo "* Fetching from upstream " +git fetch upstream || rollback $? +echo "* Checkout local master " +git checkout master +echo "* Merge local master and upstream/master" +git merge upstream/master || rollback $? +echo "* Push changes into remote origin/master" +git push origin + +unstash +read -rp "* Done. Press any key to continue..." key diff --git a/script/push_origin_master.sh b/script/push_origin_master.sh new file mode 100755 index 0000000..cd6df9c --- /dev/null +++ b/script/push_origin_master.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# push to master branch remote repository + +echo "* Checkout local master " +git checkout master +echo "* Push changes into remote origin/master" +git push origin master + +read -rp "* Done. Press any key to continue..." key From 47f9302cf4cf19bde88b814cce0408e388fc0855 Mon Sep 17 00:00:00 2001 From: danilkuznetsov Date: Mon, 20 Oct 2014 11:09:46 +0300 Subject: [PATCH 09/39] Changed link on main repository in script --- script/merge_upstream.sh | 4 ++-- script/merge_upstream_windows.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/script/merge_upstream.sh b/script/merge_upstream.sh index f0b35a0..90321b0 100755 --- a/script/merge_upstream.sh +++ b/script/merge_upstream.sh @@ -32,7 +32,7 @@ if [ -n "$upstream_remote_exists" ] && [ ! "$upstream_remote_exists" == '' ]; th echo "* Upstream remote branch exists ....." else echo "* Adding upstream remote branch" - git remote add upstream https://github.com/interview-com-ua/website.git + git remote add upstream https://github.com/vkuchyn/sqlcmd.git fi echo "* Fetching from upstream " @@ -42,7 +42,7 @@ git checkout master echo "* Merge local master and upstream/master" git merge upstream/master || rollback $? echo "* Push changes into remote origin/master" -git push origin +git push origin master unstash read -rp "* Done. Press any key to continue..." key diff --git a/script/merge_upstream_windows.sh b/script/merge_upstream_windows.sh index 58c2fc6..98aa936 100644 --- a/script/merge_upstream_windows.sh +++ b/script/merge_upstream_windows.sh @@ -32,7 +32,7 @@ if [ -n "$upstream_remote_exists" ] && [ ! "$upstream_remote_exists" == '' ]; th echo "* Upstream remote branch exists ....." else echo "* Adding upstream remote branch" - git remote add upstream https://github.com/interview-com-ua/website.git + git remote add upstream https://github.com/vkuchyn/sqlcmd.git fi echo "* Fetching from upstream " @@ -42,7 +42,7 @@ git checkout master echo "* Merge local master and upstream/master" git merge upstream/master || rollback $? echo "* Push changes into remote origin/master" -git push origin +git push origin master unstash read -rp "* Done. Press any key to continue..." key From ba7413ac3fbdc1441befc72cef4cac656ed6434e Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 23 Oct 2014 17:07:40 +0545 Subject: [PATCH 10/39] added history interface, saving query history --- .../sqlcmd/database/DatabaseExecutor.java | 4 ++++ .../study/sqlcmd/engine/KeyboardManager.java | 21 +++++++++++++++++++ .../juja/study/sqlcmd/sql/QueryHistory.java | 15 +++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index 56d6209..50e9822 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -13,4 +13,8 @@ public interface DatabaseExecutor { public abstract boolean connectToDb(SqlCmdConfig config); public abstract Row[] executeSqlScript(String sqlScript); + + public abstract String[] getDatabaseList(); + + public abstract void changeDatabase(String databaseName); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java new file mode 100644 index 0000000..da1f7fb --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java @@ -0,0 +1,21 @@ +package ua.com.juja.study.sqlcmd.engine; + +import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.database.Row; +import ua.com.juja.study.sqlcmd.sql.QueryHistory; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 10/22/14 + * Time: 11:28 PM + */ +public class KeyboardManager { + private QueryHistory history; + private DatabaseExecutor databaseExecutor; + + public Row[] executeQuery(String query) { + history.addQueryToTheHead(query); + return databaseExecutor.executeSqlScript(query); + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java b/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java new file mode 100644 index 0000000..60a164e --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java @@ -0,0 +1,15 @@ +package ua.com.juja.study.sqlcmd.sql; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 10/22/14 + * Time: 11:23 PM + */ +public interface QueryHistory { + public abstract String getNextQuery(); + + public abstract String getPreviousQuery(); + + public abstract void addQueryToTheHead(String query); +} From 20c281c2cb5f77f0dc10ac5b86348c7401e8ed66 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Mon, 27 Oct 2014 09:32:04 +0545 Subject: [PATCH 11/39] removed old class --- src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index 0a725bc..543d0c5 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -1,8 +1,6 @@ package ua.com.juja.study.sqlcmd; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; -import ua.com.juja.study.sqlcmd.database.DatabaseConnection; -import ua.com.juja.study.sqlcmd.database.mock.MockDatabaseExecutor; /** */ @@ -12,7 +10,6 @@ public static void main(String[] args) { if (!validateCmdOption(config)) System.out.println("args[] is correct "); else System.exit(1); - DatabaseConnection connection = new MockDatabaseExecutor().connectToDb(config); } public static SqlCmdConfig parseCmdOption(String[] args) { From 9e9afdab102ae5e25c2507cebdc20d49d395812a Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Mon, 3 Nov 2014 23:25:10 +0800 Subject: [PATCH 12/39] added Buffer size constant to interface --- src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java b/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java index 60a164e..b348026 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/sql/QueryHistory.java @@ -7,6 +7,8 @@ * Time: 11:23 PM */ public interface QueryHistory { + public static final int QUERY_BUFFER_COUNT = 20; + public abstract String getNextQuery(); public abstract String getPreviousQuery(); From 113bc9594aeb6e3eb3d911e4fb4ff3f3c5ee0d3f Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Mon, 3 Nov 2014 20:36:42 +0800 Subject: [PATCH 13/39] implemented interface methods --- .../database/mock/MockDatabaseExecutor.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index 06be105..f661f81 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -2,6 +2,7 @@ import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.database.Row; /** * Created with IntelliJ IDEA. @@ -17,4 +18,19 @@ public boolean connectToDb(SqlCmdConfig config) { return true; } + @Override + public Row[] executeSqlScript(String sqlScript) { + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public String[] getDatabaseList() { + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public void changeDatabase(String databaseName) { + throw new UnsupportedOperationException("Not implemented"); + } + } From a45a52341e6e55b20484c206989c4ff9191b5077 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 6 Nov 2014 12:53:29 +0800 Subject: [PATCH 14/39] made project up to date --- .../database/mock/MockDatabaseExecutor.java | 2 +- .../study/sqlcmd/engine/KeyboardManager.java | 31 ++++++++++++++ .../study/sqlcmd/sql/ArrayQueryHistory.java | 41 +++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/sql/ArrayQueryHistory.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index f661f81..01c9f7e 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -20,7 +20,7 @@ public boolean connectToDb(SqlCmdConfig config) { @Override public Row[] executeSqlScript(String sqlScript) { - throw new UnsupportedOperationException("Not implemented"); + return new Row[]{}; } @Override diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java index da1f7fb..e53ed30 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java @@ -4,6 +4,10 @@ import ua.com.juja.study.sqlcmd.database.Row; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + /** * Created with IntelliJ IDEA. * User: viktor @@ -11,9 +15,36 @@ * Time: 11:28 PM */ public class KeyboardManager { + private static final String QUERY_NEWLINE_SEPARATOR = " "; private QueryHistory history; private DatabaseExecutor databaseExecutor; + public KeyboardManager(QueryHistory queryHistory, DatabaseExecutor databaseExecutor) { + this.history = queryHistory; + this.databaseExecutor = databaseExecutor; + } + + public void startListenUserKeyboard() throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + boolean exit = false; + StringBuilder query = new StringBuilder(); + while (!exit) { + String line = reader.readLine(); + if ("\\q".equals(line)) { + exit = true; + } else if (line != null && line.length() > 0) { + query.append(line); + char lastChar = line.charAt(line.length() - 1); + if (lastChar == ';') { + executeQuery(query.toString()); + query = new StringBuilder(); + } else { + query.append(QUERY_NEWLINE_SEPARATOR); + } + } + } + } + public Row[] executeQuery(String query) { history.addQueryToTheHead(query); return databaseExecutor.executeSqlScript(query); diff --git a/src/main/java/ua/com/juja/study/sqlcmd/sql/ArrayQueryHistory.java b/src/main/java/ua/com/juja/study/sqlcmd/sql/ArrayQueryHistory.java new file mode 100644 index 0000000..a0117a3 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/sql/ArrayQueryHistory.java @@ -0,0 +1,41 @@ +package ua.com.juja.study.sqlcmd.sql; + +public class ArrayQueryHistory implements QueryHistory { + + private String[] queryList = new String[QUERY_BUFFER_COUNT]; + private int currentQueryIndex = -1; + private int queryCount = 0; + + @Override + public String getNextQuery() { + if (queryCount > 0 && queryCount - 1 > currentQueryIndex) { + return queryList[++currentQueryIndex]; + } + return null; + } + + @Override + public String getPreviousQuery() { + if (queryCount > 0 && currentQueryIndex > 0) { + return queryList[--currentQueryIndex]; + } + return null; + } + + @Override + public void addQueryToTheHead(String query) { + addQueryToTheHead(queryList, query); + if (queryCount < QUERY_BUFFER_COUNT) { + queryCount++; + } + // Reset query index + currentQueryIndex = -1; + } + + private void addQueryToTheHead(String[] queryList, String query) { + for (int i = queryList.length - 2; i >= 0; i--) { + queryList[i + 1] = queryList[i]; + } + queryList[0] = query; + } +} From e744c134916df893f201b6b10dbb8ed6537309cf Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 12 Nov 2014 14:07:06 +0800 Subject: [PATCH 15/39] added jline library with sources --- lib/src/src/assembly/assembly.xml | 55 + lib/src/src/main/java/jline/ANSIBuffer.java | 405 ++++ .../main/java/jline/ArgumentCompletor.java | 439 ++++ .../CandidateCycleCompletionHandler.java | 28 + .../jline/CandidateListCompletionHandler.java | 189 ++ .../main/java/jline/ClassNameCompletor.java | 148 ++ .../main/java/jline/CompletionHandler.java | 20 + lib/src/src/main/java/jline/Completor.java | 32 + .../main/java/jline/ConsoleOperations.java | 282 +++ .../src/main/java/jline/ConsoleReader.java | 1823 +++++++++++++++++ .../java/jline/ConsoleReaderInputStream.java | 108 + .../src/main/java/jline/ConsoleRunner.java | 90 + lib/src/src/main/java/jline/CursorBuffer.java | 104 + .../main/java/jline/FileNameCompletor.java | 133 ++ lib/src/src/main/java/jline/History.java | 299 +++ .../src/main/java/jline/MultiCompletor.java | 80 + .../src/main/java/jline/NullCompletor.java | 27 + .../src/main/java/jline/SimpleCompletor.java | 194 ++ lib/src/src/main/java/jline/Terminal.java | 184 ++ lib/src/src/main/java/jline/UnixTerminal.java | 433 ++++ .../main/java/jline/UnsupportedTerminal.java | 98 + .../src/main/java/jline/WindowsTerminal.java | 520 +++++ lib/src/src/main/java/jline/package.html | 9 + lib/src/src/main/native/Makefile | 8 + .../src/main/native/jline_WindowsTerminal.c | 57 + .../src/main/native/jline_WindowsTerminal.h | 68 + .../CandidateListCompletionHandler.properties | 5 + lib/src/src/main/resources/jline/jline32.dll | Bin 0 -> 16069 bytes lib/src/src/main/resources/jline/jline64.dll | Bin 0 -> 48128 bytes .../jline/keybindings-mac.properties | 62 + .../resources/jline/keybindings.properties | 68 + .../jline/windowsbindings.properties | 68 + lib/src/src/site/apt/building.apt | 39 + lib/src/src/site/apt/downloads.apt | 39 + lib/src/src/site/docbook/index.xml | 608 ++++++ lib/src/src/site/fml/faq.fml | 26 + lib/src/src/site/resources/css/site.css | 311 +++ .../src/site/resources/images/collapsed.png | Bin 0 -> 222 bytes lib/src/src/site/resources/images/dotted.png | Bin 0 -> 190 bytes .../src/site/resources/images/expanded.png | Bin 0 -> 198 bytes .../src/site/resources/images/external.png | Bin 0 -> 223 bytes .../site/resources/images/ico_file_pdf.png | Bin 0 -> 280 bytes lib/src/src/site/resources/images/logo.jpg | Bin 0 -> 4121 bytes .../src/site/resources/images/newwindow.png | Bin 0 -> 224 bytes lib/src/src/site/site.xml | 40 + 45 files changed, 7099 insertions(+) create mode 100644 lib/src/src/assembly/assembly.xml create mode 100644 lib/src/src/main/java/jline/ANSIBuffer.java create mode 100644 lib/src/src/main/java/jline/ArgumentCompletor.java create mode 100644 lib/src/src/main/java/jline/CandidateCycleCompletionHandler.java create mode 100644 lib/src/src/main/java/jline/CandidateListCompletionHandler.java create mode 100644 lib/src/src/main/java/jline/ClassNameCompletor.java create mode 100644 lib/src/src/main/java/jline/CompletionHandler.java create mode 100644 lib/src/src/main/java/jline/Completor.java create mode 100644 lib/src/src/main/java/jline/ConsoleOperations.java create mode 100644 lib/src/src/main/java/jline/ConsoleReader.java create mode 100644 lib/src/src/main/java/jline/ConsoleReaderInputStream.java create mode 100644 lib/src/src/main/java/jline/ConsoleRunner.java create mode 100644 lib/src/src/main/java/jline/CursorBuffer.java create mode 100644 lib/src/src/main/java/jline/FileNameCompletor.java create mode 100644 lib/src/src/main/java/jline/History.java create mode 100644 lib/src/src/main/java/jline/MultiCompletor.java create mode 100644 lib/src/src/main/java/jline/NullCompletor.java create mode 100644 lib/src/src/main/java/jline/SimpleCompletor.java create mode 100644 lib/src/src/main/java/jline/Terminal.java create mode 100644 lib/src/src/main/java/jline/UnixTerminal.java create mode 100644 lib/src/src/main/java/jline/UnsupportedTerminal.java create mode 100644 lib/src/src/main/java/jline/WindowsTerminal.java create mode 100644 lib/src/src/main/java/jline/package.html create mode 100644 lib/src/src/main/native/Makefile create mode 100644 lib/src/src/main/native/jline_WindowsTerminal.c create mode 100644 lib/src/src/main/native/jline_WindowsTerminal.h create mode 100644 lib/src/src/main/resources/jline/CandidateListCompletionHandler.properties create mode 100644 lib/src/src/main/resources/jline/jline32.dll create mode 100644 lib/src/src/main/resources/jline/jline64.dll create mode 100644 lib/src/src/main/resources/jline/keybindings-mac.properties create mode 100644 lib/src/src/main/resources/jline/keybindings.properties create mode 100644 lib/src/src/main/resources/jline/windowsbindings.properties create mode 100644 lib/src/src/site/apt/building.apt create mode 100644 lib/src/src/site/apt/downloads.apt create mode 100644 lib/src/src/site/docbook/index.xml create mode 100644 lib/src/src/site/fml/faq.fml create mode 100755 lib/src/src/site/resources/css/site.css create mode 100755 lib/src/src/site/resources/images/collapsed.png create mode 100755 lib/src/src/site/resources/images/dotted.png create mode 100755 lib/src/src/site/resources/images/expanded.png create mode 100755 lib/src/src/site/resources/images/external.png create mode 100644 lib/src/src/site/resources/images/ico_file_pdf.png create mode 100644 lib/src/src/site/resources/images/logo.jpg create mode 100755 lib/src/src/site/resources/images/newwindow.png create mode 100644 lib/src/src/site/site.xml diff --git a/lib/src/src/assembly/assembly.xml b/lib/src/src/assembly/assembly.xml new file mode 100644 index 0000000..c7c35ce --- /dev/null +++ b/lib/src/src/assembly/assembly.xml @@ -0,0 +1,55 @@ + + + + zip + + true + + + + README* + LICENSE* + NOTICE* + + + + target + + + *.jar + + + + licenses + /lib + + * + + + + src/test/java/jline/example + /examples/jline/example + + + src/test/resources/jline/example + /examples/jline/example + + + target/site/apidocs + /apidocs + + + + + src + /src/src + + + + /src + + pom.xml + + + + diff --git a/lib/src/src/main/java/jline/ANSIBuffer.java b/lib/src/src/main/java/jline/ANSIBuffer.java new file mode 100644 index 0000000..c2e3318 --- /dev/null +++ b/lib/src/src/main/java/jline/ANSIBuffer.java @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; + +/** + * A buffer that can contain ANSI text. + * + * @author Marc Prud'hommeaux + */ +public class ANSIBuffer { + private boolean ansiEnabled = true; + private final StringBuffer ansiBuffer = new StringBuffer(); + private final StringBuffer plainBuffer = new StringBuffer(); + + public ANSIBuffer() { + } + + public ANSIBuffer(final String str) { + append(str); + } + + public void setAnsiEnabled(final boolean ansi) { + this.ansiEnabled = ansi; + } + + public boolean getAnsiEnabled() { + return this.ansiEnabled; + } + + public String getAnsiBuffer() { + return ansiBuffer.toString(); + } + + public String getPlainBuffer() { + return plainBuffer.toString(); + } + + public String toString(final boolean ansi) { + return ansi ? getAnsiBuffer() : getPlainBuffer(); + } + + public String toString() { + return toString(ansiEnabled); + } + + public ANSIBuffer append(final String str) { + ansiBuffer.append(str); + plainBuffer.append(str); + + return this; + } + + public ANSIBuffer attrib(final String str, final int code) { + ansiBuffer.append(ANSICodes.attrib(code)).append(str) + .append(ANSICodes.attrib(ANSICodes.OFF)); + plainBuffer.append(str); + + return this; + } + + public ANSIBuffer red(final String str) { + return attrib(str, ANSICodes.FG_RED); + } + + public ANSIBuffer blue(final String str) { + return attrib(str, ANSICodes.FG_BLUE); + } + + public ANSIBuffer green(final String str) { + return attrib(str, ANSICodes.FG_GREEN); + } + + public ANSIBuffer black(final String str) { + return attrib(str, ANSICodes.FG_BLACK); + } + + public ANSIBuffer yellow(final String str) { + return attrib(str, ANSICodes.FG_YELLOW); + } + + public ANSIBuffer magenta(final String str) { + return attrib(str, ANSICodes.FG_MAGENTA); + } + + public ANSIBuffer cyan(final String str) { + return attrib(str, ANSICodes.FG_CYAN); + } + + public ANSIBuffer bold(final String str) { + return attrib(str, ANSICodes.BOLD); + } + + public ANSIBuffer underscore(final String str) { + return attrib(str, ANSICodes.UNDERSCORE); + } + + public ANSIBuffer blink(final String str) { + return attrib(str, ANSICodes.BLINK); + } + + public ANSIBuffer reverse(final String str) { + return attrib(str, ANSICodes.REVERSE); + } + + public static class ANSICodes { + static final int OFF = 0; + static final int BOLD = 1; + static final int UNDERSCORE = 4; + static final int BLINK = 5; + static final int REVERSE = 7; + static final int CONCEALED = 8; + static final int FG_BLACK = 30; + static final int FG_RED = 31; + static final int FG_GREEN = 32; + static final int FG_YELLOW = 33; + static final int FG_BLUE = 34; + static final int FG_MAGENTA = 35; + static final int FG_CYAN = 36; + static final int FG_WHITE = 37; + static final char ESC = 27; + + /** + * Constructor is private since this is a utility class. + */ + private ANSICodes() { + } + + /** + * Sets the screen mode. The mode will be one of the following values: + *
+          * mode     description
+          * ----------------------------------------
+          *   0      40 x 148 x 25 monochrome (text)
+          *   1      40 x 148 x 25 color (text)
+          *   2      80 x 148 x 25 monochrome (text)
+          *   3      80 x 148 x 25 color (text)
+          *   4      320 x 148 x 200 4-color (graphics)
+          *   5      320 x 148 x 200 monochrome (graphics)
+          *   6      640 x 148 x 200 monochrome (graphics)
+          *   7      Enables line wrapping
+          *  13      320 x 148 x 200 color (graphics)
+          *  14      640 x 148 x 200 color (16-color graphics)
+          *  15      640 x 148 x 350 monochrome (2-color graphics)
+          *  16      640 x 148 x 350 color (16-color graphics)
+          *  17      640 x 148 x 480 monochrome (2-color graphics)
+          *  18      640 x 148 x 480 color (16-color graphics)
+          *  19      320 x 148 x 200 color (256-color graphics)
+          * 
+ */ + public static String setmode(final int mode) { + return ESC + "[=" + mode + "h"; + } + + /** + * Same as setmode () except for mode = 7, which disables line + * wrapping (useful for writing the right-most column without + * scrolling to the next line). + */ + public static String resetmode(final int mode) { + return ESC + "[=" + mode + "l"; + } + + /** + * Clears the screen and moves the cursor to the home postition. + */ + public static String clrscr() { + return ESC + "[2J"; + } + + /** + * Removes all characters from the current cursor position until + * the end of the line. + */ + public static String clreol() { + return ESC + "[K"; + } + + /** + * Moves the cursor n positions to the left. If n is greater or + * equal to the current cursor column, the cursor is moved to the + * first column. + */ + public static String left(final int n) { + return ESC + "[" + n + "D"; + } + + /** + * Moves the cursor n positions to the right. If n plus the current + * cursor column is greater than the rightmost column, the cursor + * is moved to the rightmost column. + */ + public static String right(final int n) { + return ESC + "[" + n + "C"; + } + + /** + * Moves the cursor n rows up without changing the current column. + * If n is greater than or equal to the current row, the cursor is + * placed in the first row. + */ + public static String up(final int n) { + return ESC + "[" + n + "A"; + } + + /** + * Moves the cursor n rows down. If n plus the current row is greater + * than the bottom row, the cursor is moved to the bottom row. + */ + public static String down(final int n) { + return ESC + "[" + n + "B"; + } + + /* + * Moves the cursor to the given row and column. (1,1) represents + * the upper left corner. The lower right corner of a usual DOS + * screen is (25, 80). + */ + public static String gotoxy(final int row, final int column) { + return ESC + "[" + row + ";" + column + "H"; + } + + /** + * Saves the current cursor position. + */ + public static String save() { + return ESC + "[s"; + } + + /** + * Restores the saved cursor position. + */ + public static String restore() { + return ESC + "[u"; + } + + /** + * Sets the character attribute. It will be + * one of the following character attributes: + * + *
+          * Text attributes
+          *    0    All attributes off
+          *    1    Bold on
+          *    4    Underscore (on monochrome display adapter only)
+          *    5    Blink on
+          *    7    Reverse video on
+          *    8    Concealed on
+          *
+          *   Foreground colors
+          *    30    Black
+          *    31    Red
+          *    32    Green
+          *    33    Yellow
+          *    34    Blue
+          *    35    Magenta
+          *    36    Cyan
+          *    37    White
+          *
+          *   Background colors
+          *    40    Black
+          *    41    Red
+          *    42    Green
+          *    43    Yellow
+          *    44    Blue
+          *    45    Magenta
+          *    46    Cyan
+          *    47    White
+          * 
+ * + * The attributes remain in effect until the next attribute command + * is sent. + */ + public static String attrib(final int attr) { + return ESC + "[" + attr + "m"; + } + + /** + * Sets the key with the given code to the given value. code must be + * derived from the following table, value must + * be any semicolon-separated + * combination of String (enclosed in double quotes) and numeric values. + * For example, to set F1 to the String "Hello F1", followed by a CRLF + * sequence, one can use: ANSI.setkey ("0;59", "\"Hello F1\";13;10"). + * Heres's the table of key values: + *
+          * Key                       Code      SHIFT+code  CTRL+code  ALT+code
+          * ---------------------------------------------------------------
+          * F1                        0;59      0;84        0;94       0;104
+          * F2                        0;60      0;85        0;95       0;105
+          * F3                        0;61      0;86        0;96       0;106
+          * F4                        0;62      0;87        0;97       0;107
+          * F5                        0;63      0;88        0;98       0;108
+          * F6                        0;64      0;89        0;99       0;109
+          * F7                        0;65      0;90        0;100      0;110
+          * F8                        0;66      0;91        0;101      0;111
+          * F9                        0;67      0;92        0;102      0;112
+          * F10                       0;68      0;93        0;103      0;113
+          * F11                       0;133     0;135       0;137      0;139
+          * F12                       0;134     0;136       0;138      0;140
+          * HOME (num keypad)         0;71      55          0;119      --
+          * UP ARROW (num keypad)     0;72      56          (0;141)    --
+          * PAGE UP (num keypad)      0;73      57          0;132      --
+          * LEFT ARROW (num keypad)   0;75      52          0;115      --
+          * RIGHT ARROW (num keypad)  0;77      54          0;116      --
+          * END (num keypad)          0;79      49          0;117      --
+          * DOWN ARROW (num keypad)   0;80      50          (0;145)    --
+          * PAGE DOWN (num keypad)    0;81      51          0;118      --
+          * INSERT (num keypad)       0;82      48          (0;146)    --
+          * DELETE  (num keypad)      0;83      46          (0;147)    --
+          * HOME                      (224;71)  (224;71)    (224;119)  (224;151)
+          * UP ARROW                  (224;72)  (224;72)    (224;141)  (224;152)
+          * PAGE UP                   (224;73)  (224;73)    (224;132)  (224;153)
+          * LEFT ARROW                (224;75)  (224;75)    (224;115)  (224;155)
+          * RIGHT ARROW               (224;77)  (224;77)    (224;116)  (224;157)
+          * END                       (224;79)  (224;79)    (224;117)  (224;159)
+          * DOWN ARROW                (224;80)  (224;80)    (224;145)  (224;154)
+          * PAGE DOWN                 (224;81)  (224;81)    (224;118)  (224;161)
+          * INSERT                    (224;82)  (224;82)    (224;146)  (224;162)
+          * DELETE                    (224;83)  (224;83)    (224;147)  (224;163)
+          * PRINT SCREEN              --        --          0;114      --
+          * PAUSE/BREAK               --        --          0;0        --
+          * BACKSPACE                 8         8           127        (0)
+          * ENTER                     13        --          10         (0
+          * TAB                       9         0;15        (0;148)    (0;165)
+          * NULL                      0;3       --          --         --
+          * A                         97        65          1          0;30
+          * B                         98        66          2          0;48
+          * C                         99        66          3          0;46
+          * D                         100       68          4          0;32
+          * E                         101       69          5          0;18
+          * F                         102       70          6          0;33
+          * G                         103       71          7          0;34
+          * H                         104       72          8          0;35
+          * I                         105       73          9          0;23
+          * J                         106       74          10         0;36
+          * K                         107       75          11         0;37
+          * L                         108       76          12         0;38
+          * M                         109       77          13         0;50
+          * N                         110       78          14         0;49
+          * O                         111       79          15         0;24
+          * P                         112       80          16         0;25
+          * Q                         113       81          17         0;16
+          * R                         114       82          18         0;19
+          * S                         115       83          19         0;31
+          * T                         116       84          20         0;20
+          * U                         117       85          21         0;22
+          * V                         118       86          22         0;47
+          * W                         119       87          23         0;17
+          * X                         120       88          24         0;45
+          * Y                         121       89          25         0;21
+          * Z                         122       90          26         0;44
+          * 1                         49        33          --         0;120
+          * 2                         50        64          0          0;121
+          * 3                         51        35          --         0;122
+          * 4                         52        36          --         0;123
+          * 5                         53        37          --         0;124
+          * 6                         54        94          30         0;125
+          * 7                         55        38          --         0;126
+          * 8                         56        42          --         0;126
+          * 9                         57        40          --         0;127
+          * 0                         48        41          --         0;129
+          * -                         45        95          31         0;130
+          * =                         61        43          ---        0;131
+          * [                         91        123         27         0;26
+          * ]                         93        125         29         0;27
+          *                           92        124         28         0;43
+          * ;                         59        58          --         0;39
+          * '                         39        34          --         0;40
+          * ,                         44        60          --         0;51
+          * .                         46        62          --         0;52
+          * /                         47        63          --         0;53
+          * `                         96        126         --         (0;41)
+          * ENTER (keypad)            13        --          10         (0;166)
+          * / (keypad)                47        47          (0;142)    (0;74)
+          * * (keypad)                42        (0;144)     (0;78)     --
+          * - (keypad)                45        45          (0;149)    (0;164)
+          * + (keypad)                43        43          (0;150)    (0;55)
+          * 5 (keypad)                (0;76)    53          (0;143)    --
+          */
+        public static String setkey(final String code, final String value) {
+            return ESC + "[" + code + ";" + value + "p";
+        }
+    }
+
+    public static void main(final String[] args) throws Exception {
+        // sequence, one can use: ANSI.setkey ("0;59", "\"Hello F1\";13;10").
+        BufferedReader reader =
+            new BufferedReader(new InputStreamReader(System.in));
+        System.out.print(ANSICodes.setkey("97", "97;98;99;13")
+                         + ANSICodes.attrib(ANSICodes.OFF));
+        System.out.flush();
+
+        String line;
+
+        while ((line = reader.readLine()) != null) {
+            System.out.println("GOT: " + line);
+        }
+    }
+}
diff --git a/lib/src/src/main/java/jline/ArgumentCompletor.java b/lib/src/src/main/java/jline/ArgumentCompletor.java
new file mode 100644
index 0000000..5493ad8
--- /dev/null
+++ b/lib/src/src/main/java/jline/ArgumentCompletor.java
@@ -0,0 +1,439 @@
+/*
+ * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved.
+ *
+ * This software is distributable under the BSD license. See the terms of the
+ * BSD license in the documentation provided with this software.
+ */
+package jline;
+
+import java.util.*;
+
+/**
+ *  A {@link Completor} implementation that invokes a child completor
+ *  using the appropriate separator argument. This
+ *  can be used instead of the individual completors having to
+ *  know about argument parsing semantics.
+ *  

+ * Example 1: Any argument of the command line can + * use file completion. + *

+ *

+ *        consoleReader.addCompletor (new ArgumentCompletor (
+ *                new {@link FileNameCompletor} ()))
+ *  
+ *

+ * Example 2: The first argument of the command line + * can be completed with any of "foo", "bar", or "baz", and remaining + * arguments can be completed with a file name. + *

+ *

+ *        consoleReader.addCompletor (new ArgumentCompletor (
+ *                new {@link SimpleCompletor} (new String [] { "foo", "bar", "baz"})));
+ *        consoleReader.addCompletor (new ArgumentCompletor (
+ *                new {@link FileNameCompletor} ()));
+ *  
+ * + *

+ * When the argument index is past the last embedded completors, the last + * completors is always used. To disable this behavior, have the last + * completor be a {@link NullCompletor}. For example: + *

+ * + *
+ *        consoleReader.addCompletor (new ArgumentCompletor (
+ *                new {@link SimpleCompletor} (new String [] { "foo", "bar", "baz"}),
+ *                new {@link SimpleCompletor} (new String [] { "xxx", "yyy", "xxx"}),
+ *                new {@link NullCompletor}
+ *                ));
+ *        
+ *

+ * TODO: handle argument quoting and escape characters + *

+ * + * @author Marc Prud'hommeaux + */ +public class ArgumentCompletor implements Completor { + final Completor[] completors; + final ArgumentDelimiter delim; + boolean strict = true; + + /** + * Constuctor: create a new completor with the default + * argument separator of " ". + * + * @param completor the embedded completor + */ + public ArgumentCompletor(final Completor completor) { + this(new Completor[] { + completor + }); + } + + /** + * Constuctor: create a new completor with the default + * argument separator of " ". + * + * @param completors the List of completors to use + */ + public ArgumentCompletor(final List completors) { + this((Completor[]) completors.toArray(new Completor[completors.size()])); + } + + /** + * Constuctor: create a new completor with the default + * argument separator of " ". + * + * @param completors the embedded argument completors + */ + public ArgumentCompletor(final Completor[] completors) { + this(completors, new WhitespaceArgumentDelimiter()); + } + + /** + * Constuctor: create a new completor with the specified + * argument delimiter. + * + * @param completor the embedded completor + * @param delim the delimiter for parsing arguments + */ + public ArgumentCompletor(final Completor completor, + final ArgumentDelimiter delim) { + this(new Completor[] { + completor + }, delim); + } + + /** + * Constuctor: create a new completor with the specified + * argument delimiter. + * + * @param completors the embedded completors + * @param delim the delimiter for parsing arguments + */ + public ArgumentCompletor(final Completor[] completors, + final ArgumentDelimiter delim) { + this.completors = completors; + this.delim = delim; + } + + /** + * If true, a completion at argument index N will only succeed + * if all the completions from 0-(N-1) also succeed. + */ + public void setStrict(final boolean strict) { + this.strict = strict; + } + + /** + * Returns whether a completion at argument index N will succees + * if all the completions from arguments 0-(N-1) also succeed. + */ + public boolean getStrict() { + return this.strict; + } + + public int complete(final String buffer, final int cursor, + final List candidates) { + ArgumentList list = delim.delimit(buffer, cursor); + int argpos = list.getArgumentPosition(); + int argIndex = list.getCursorArgumentIndex(); + + if (argIndex < 0) { + return -1; + } + + final Completor comp; + + // if we are beyond the end of the completors, just use the last one + if (argIndex >= completors.length) { + comp = completors[completors.length - 1]; + } else { + comp = completors[argIndex]; + } + + // ensure that all the previous completors are successful before + // allowing this completor to pass (only if strict is true). + for (int i = 0; getStrict() && (i < argIndex); i++) { + Completor sub = + completors[(i >= completors.length) ? (completors.length - 1) : i]; + String[] args = list.getArguments(); + String arg = ((args == null) || (i >= args.length)) ? "" : args[i]; + + List subCandidates = new LinkedList(); + + if (sub.complete(arg, arg.length(), subCandidates) == -1) { + return -1; + } + + if (subCandidates.size() == 0) { + return -1; + } + } + + int ret = comp.complete(list.getCursorArgument(), argpos, candidates); + + if (ret == -1) { + return -1; + } + + int pos = ret + (list.getBufferPosition() - argpos); + + /** + * Special case: when completing in the middle of a line, and the + * area under the cursor is a delimiter, then trim any delimiters + * from the candidates, since we do not need to have an extra + * delimiter. + * + * E.g., if we have a completion for "foo", and we + * enter "f bar" into the buffer, and move to after the "f" + * and hit TAB, we want "foo bar" instead of "foo bar". + */ + if ((cursor != buffer.length()) && delim.isDelimiter(buffer, cursor)) { + for (int i = 0; i < candidates.size(); i++) { + String val = candidates.get(i).toString(); + + while ((val.length() > 0) + && delim.isDelimiter(val, val.length() - 1)) { + val = val.substring(0, val.length() - 1); + } + + candidates.set(i, val); + } + } + + ConsoleReader.debug("Completing " + buffer + "(pos=" + cursor + ") " + + "with: " + candidates + ": offset=" + pos); + + return pos; + } + + /** + * The {@link ArgumentCompletor.ArgumentDelimiter} allows custom + * breaking up of a {@link String} into individual arguments in + * order to dispatch the arguments to the nested {@link Completor}. + * + * @author Marc Prud'hommeaux + */ + public static interface ArgumentDelimiter { + /** + * Break the specified buffer into individual tokens + * that can be completed on their own. + * + * @param buffer the buffer to split + * @param argumentPosition the current position of the + * cursor in the buffer + * @return the tokens + */ + ArgumentList delimit(String buffer, int argumentPosition); + + /** + * Returns true if the specified character is a whitespace + * parameter. + * + * @param buffer the complete command buffer + * @param pos the index of the character in the buffer + * @return true if the character should be a delimiter + */ + boolean isDelimiter(String buffer, int pos); + } + + /** + * Abstract implementation of a delimiter that uses the + * {@link #isDelimiter} method to determine if a particular + * character should be used as a delimiter. + * + * @author Marc Prud'hommeaux + */ + public abstract static class AbstractArgumentDelimiter + implements ArgumentDelimiter { + private char[] quoteChars = new char[] { '\'', '"' }; + private char[] escapeChars = new char[] { '\\' }; + + public void setQuoteChars(final char[] quoteChars) { + this.quoteChars = quoteChars; + } + + public char[] getQuoteChars() { + return this.quoteChars; + } + + public void setEscapeChars(final char[] escapeChars) { + this.escapeChars = escapeChars; + } + + public char[] getEscapeChars() { + return this.escapeChars; + } + + public ArgumentList delimit(final String buffer, final int cursor) { + List args = new LinkedList(); + StringBuffer arg = new StringBuffer(); + int argpos = -1; + int bindex = -1; + + for (int i = 0; (buffer != null) && (i <= buffer.length()); i++) { + // once we reach the cursor, set the + // position of the selected index + if (i == cursor) { + bindex = args.size(); + // the position in the current argument is just the + // length of the current argument + argpos = arg.length(); + } + + if ((i == buffer.length()) || isDelimiter(buffer, i)) { + if (arg.length() > 0) { + args.add(arg.toString()); + arg.setLength(0); // reset the arg + } + } else { + arg.append(buffer.charAt(i)); + } + } + + return new ArgumentList((String[]) args. + toArray(new String[args.size()]), bindex, argpos, cursor); + } + + /** + * Returns true if the specified character is a whitespace + * parameter. Check to ensure that the character is not + * escaped by any of + * {@link #getQuoteChars}, and is not escaped by ant of the + * {@link #getEscapeChars}, and returns true from + * {@link #isDelimiterChar}. + * + * @param buffer the complete command buffer + * @param pos the index of the character in the buffer + * @return true if the character should be a delimiter + */ + public boolean isDelimiter(final String buffer, final int pos) { + if (isQuoted(buffer, pos)) { + return false; + } + + if (isEscaped(buffer, pos)) { + return false; + } + + return isDelimiterChar(buffer, pos); + } + + public boolean isQuoted(final String buffer, final int pos) { + return false; + } + + public boolean isEscaped(final String buffer, final int pos) { + if (pos <= 0) { + return false; + } + + for (int i = 0; (escapeChars != null) && (i < escapeChars.length); + i++) { + if (buffer.charAt(pos) == escapeChars[i]) { + return !isEscaped(buffer, pos - 1); // escape escape + } + } + + return false; + } + + /** + * Returns true if the character at the specified position + * if a delimiter. This method will only be called if the + * character is not enclosed in any of the + * {@link #getQuoteChars}, and is not escaped by ant of the + * {@link #getEscapeChars}. To perform escaping manually, + * override {@link #isDelimiter} instead. + */ + public abstract boolean isDelimiterChar(String buffer, int pos); + } + + /** + * {@link ArgumentCompletor.ArgumentDelimiter} + * implementation that counts all + * whitespace (as reported by {@link Character#isWhitespace}) + * as being a delimiter. + * + * @author Marc Prud'hommeaux + */ + public static class WhitespaceArgumentDelimiter + extends AbstractArgumentDelimiter { + /** + * The character is a delimiter if it is whitespace, and the + * preceeding character is not an escape character. + */ + public boolean isDelimiterChar(String buffer, int pos) { + return Character.isWhitespace(buffer.charAt(pos)); + } + } + + /** + * The result of a delimited buffer. + * + * @author Marc Prud'hommeaux + */ + public static class ArgumentList { + private String[] arguments; + private int cursorArgumentIndex; + private int argumentPosition; + private int bufferPosition; + + /** + * @param arguments the array of tokens + * @param cursorArgumentIndex the token index of the cursor + * @param argumentPosition the position of the cursor in the + * current token + * @param bufferPosition the position of the cursor in + * the whole buffer + */ + public ArgumentList(String[] arguments, int cursorArgumentIndex, + int argumentPosition, int bufferPosition) { + this.arguments = arguments; + this.cursorArgumentIndex = cursorArgumentIndex; + this.argumentPosition = argumentPosition; + this.bufferPosition = bufferPosition; + } + + public void setCursorArgumentIndex(int cursorArgumentIndex) { + this.cursorArgumentIndex = cursorArgumentIndex; + } + + public int getCursorArgumentIndex() { + return this.cursorArgumentIndex; + } + + public String getCursorArgument() { + if ((cursorArgumentIndex < 0) + || (cursorArgumentIndex >= arguments.length)) { + return null; + } + + return arguments[cursorArgumentIndex]; + } + + public void setArgumentPosition(int argumentPosition) { + this.argumentPosition = argumentPosition; + } + + public int getArgumentPosition() { + return this.argumentPosition; + } + + public void setArguments(String[] arguments) { + this.arguments = arguments; + } + + public String[] getArguments() { + return this.arguments; + } + + public void setBufferPosition(int bufferPosition) { + this.bufferPosition = bufferPosition; + } + + public int getBufferPosition() { + return this.bufferPosition; + } + } +} diff --git a/lib/src/src/main/java/jline/CandidateCycleCompletionHandler.java b/lib/src/src/main/java/jline/CandidateCycleCompletionHandler.java new file mode 100644 index 0000000..a0bf208 --- /dev/null +++ b/lib/src/src/main/java/jline/CandidateCycleCompletionHandler.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + *

+ * A {@link CompletionHandler} that deals with multiple distinct completions + * by cycling through each one every time tab is pressed. This + * mimics the behavior of the + * editline + * library. + *

+ *

This class is currently a stub; it does nothing

+ * @author Marc Prud'hommeaux + */ +public class CandidateCycleCompletionHandler implements CompletionHandler { + public boolean complete(final ConsoleReader reader, final List candidates, + final int position) throws IOException { + throw new IllegalStateException("CandidateCycleCompletionHandler unimplemented"); + } +} diff --git a/lib/src/src/main/java/jline/CandidateListCompletionHandler.java b/lib/src/src/main/java/jline/CandidateListCompletionHandler.java new file mode 100644 index 0000000..d9d43c2 --- /dev/null +++ b/lib/src/src/main/java/jline/CandidateListCompletionHandler.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.text.MessageFormat; +import java.util.*; + +/** + *

+ * A {@link CompletionHandler} that deals with multiple distinct completions + * by outputting the complete list of possibilities to the console. This + * mimics the behavior of the + * readline + * library. + *

+ * + * TODO: + *
    + *
  • handle quotes and escaped quotes
  • + *
  • enable automatic escaping of whitespace
  • + *
+ * + * @author Marc Prud'hommeaux + */ +public class CandidateListCompletionHandler implements CompletionHandler { + private static ResourceBundle loc = ResourceBundle. + getBundle(CandidateListCompletionHandler.class.getName()); + + private boolean eagerNewlines = true; + + public void setAlwaysIncludeNewline(boolean eagerNewlines) { + this.eagerNewlines = eagerNewlines; + } + + public boolean complete(final ConsoleReader reader, final List candidates, + final int pos) throws IOException { + CursorBuffer buf = reader.getCursorBuffer(); + + // if there is only one completion, then fill in the buffer + if (candidates.size() == 1) { + String value = candidates.get(0).toString(); + + // fail if the only candidate is the same as the current buffer + if (value.equals(buf.toString())) { + return false; + } + + setBuffer(reader, value, pos); + + return true; + } else if (candidates.size() > 1) { + String value = getUnambiguousCompletions(candidates); + String bufString = buf.toString(); + setBuffer(reader, value, pos); + } + + if (eagerNewlines) + reader.printNewline(); + printCandidates(reader, candidates, eagerNewlines); + + // redraw the current console buffer + reader.drawLine(); + + return true; + } + + public static void setBuffer(ConsoleReader reader, String value, int offset) + throws IOException { + while ((reader.getCursorBuffer().cursor > offset) + && reader.backspace()) { + ; + } + + reader.putString(value); + reader.setCursorPosition(offset + value.length()); + } + + /** + * Print out the candidates. If the size of the candidates + * is greated than the {@link getAutoprintThreshhold}, + * they prompt with aq warning. + * + * @param candidates the list of candidates to print + */ + public static final void printCandidates(ConsoleReader reader, + Collection candidates, boolean eagerNewlines) + throws IOException { + Set distinct = new HashSet(candidates); + + if (distinct.size() > reader.getAutoprintThreshhold()) { + if (!eagerNewlines) + reader.printNewline(); + reader.printString(MessageFormat.format + (loc.getString("display-candidates"), new Object[] { + new Integer(candidates .size()) + }) + " "); + + reader.flushConsole(); + + int c; + + String noOpt = loc.getString("display-candidates-no"); + String yesOpt = loc.getString("display-candidates-yes"); + + while ((c = reader.readCharacter(new char[] { + yesOpt.charAt(0), noOpt.charAt(0) })) != -1) { + if (noOpt.startsWith + (new String(new char[] { (char) c }))) { + reader.printNewline(); + return; + } else if (yesOpt.startsWith + (new String(new char[] { (char) c }))) { + break; + } else { + reader.beep(); + } + } + } + + // copy the values and make them distinct, without otherwise + // affecting the ordering. Only do it if the sizes differ. + if (distinct.size() != candidates.size()) { + Collection copy = new ArrayList(); + + for (Iterator i = candidates.iterator(); i.hasNext();) { + Object next = i.next(); + + if (!(copy.contains(next))) { + copy.add(next); + } + } + + candidates = copy; + } + + reader.printNewline(); + reader.printColumns(candidates); + } + + /** + * Returns a root that matches all the {@link String} elements + * of the specified {@link List}, or null if there are + * no commalities. For example, if the list contains + * foobar, foobaz, foobuz, the + * method will return foob. + */ + private final String getUnambiguousCompletions(final List candidates) { + if ((candidates == null) || (candidates.size() == 0)) { + return null; + } + + // convert to an array for speed + String[] strings = + (String[]) candidates.toArray(new String[candidates.size()]); + + String first = strings[0]; + StringBuffer candidate = new StringBuffer(); + + for (int i = 0; i < first.length(); i++) { + if (startsWith(first.substring(0, i + 1), strings)) { + candidate.append(first.charAt(i)); + } else { + break; + } + } + + return candidate.toString(); + } + + /** + * @return true is all the elements of candidates + * start with starts + */ + private final boolean startsWith(final String starts, + final String[] candidates) { + for (int i = 0; i < candidates.length; i++) { + if (!candidates[i].startsWith(starts)) { + return false; + } + } + + return true; + } +} diff --git a/lib/src/src/main/java/jline/ClassNameCompletor.java b/lib/src/src/main/java/jline/ClassNameCompletor.java new file mode 100644 index 0000000..3ef5802 --- /dev/null +++ b/lib/src/src/main/java/jline/ClassNameCompletor.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.net.*; +import java.util.*; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +/** + * A Completor implementation that completes java class names. By default, + * it scans the java class path to locate all the classes. + * + * @author Marc Prud'hommeaux + */ +public class ClassNameCompletor extends SimpleCompletor { + + /** + * Complete candidates using all the classes available in the + * java CLASSPATH. + */ + public ClassNameCompletor() throws IOException { + this(null); + } + + public ClassNameCompletor(final SimpleCompletorFilter filter) + throws IOException { + super(getClassNames(), filter); + setDelimiter("."); + } + + public static String[] getClassNames() throws IOException { + Set urls = new HashSet(); + + for (ClassLoader loader = ClassNameCompletor.class + .getClassLoader(); loader != null; + loader = loader.getParent()) { + if (!(loader instanceof URLClassLoader)) { + continue; + } + + urls.addAll(Arrays.asList(((URLClassLoader) loader).getURLs())); + } + + // Now add the URL that holds java.lang.String. This is because + // some JVMs do not report the core classes jar in the list of + // class loaders. + Class[] systemClasses = new Class[] { + String.class, javax.swing.JFrame.class + }; + + for (int i = 0; i < systemClasses.length; i++) { + URL classURL = systemClasses[i].getResource("/" + + systemClasses[i].getName() .replace('.', '/') + ".class"); + + if (classURL != null) { + URLConnection uc = (URLConnection) classURL.openConnection(); + + if (uc instanceof JarURLConnection) { + urls.add(((JarURLConnection) uc).getJarFileURL()); + } + } + } + + Set classes = new HashSet(); + + for (Iterator i = urls.iterator(); i.hasNext();) { + URL url = (URL) i.next(); + File file = new File(url.getFile()); + + if (file.isDirectory()) { + Set files = getClassFiles(file.getAbsolutePath(), + new HashSet(), file, new int[] { 200 }); + classes.addAll(files); + + continue; + } + + if ((file == null) || !file.isFile()) // TODO: handle directories + { + continue; + } + if (!file.toString().endsWith (".jar")) + continue; + + JarFile jf = new JarFile(file); + + for (Enumeration e = jf.entries(); e.hasMoreElements();) { + JarEntry entry = (JarEntry) e.nextElement(); + + if (entry == null) { + continue; + } + + String name = entry.getName(); + + if (!name.endsWith(".class")) // only use class files + { + continue; + } + + classes.add(name); + } + } + + // now filter classes by changing "/" to "." and trimming the + // trailing ".class" + Set classNames = new TreeSet(); + + for (Iterator i = classes.iterator(); i.hasNext();) { + String name = (String) i.next(); + classNames.add(name.replace('/', '.'). + substring(0, name.length() - 6)); + } + + return (String[]) classNames.toArray(new String[classNames.size()]); + } + + private static Set getClassFiles(String root, Set holder, File directory, + int[] maxDirectories) { + // we have passed the maximum number of directories to scan + if (maxDirectories[0]-- < 0) { + return holder; + } + + File[] files = directory.listFiles(); + + for (int i = 0; (files != null) && (i < files.length); i++) { + String name = files[i].getAbsolutePath(); + + if (!(name.startsWith(root))) { + continue; + } else if (files[i].isDirectory()) { + getClassFiles(root, holder, files[i], maxDirectories); + } else if (files[i].getName().endsWith(".class")) { + holder.add(files[i].getAbsolutePath(). + substring(root.length() + 1)); + } + } + + return holder; + } +} diff --git a/lib/src/src/main/java/jline/CompletionHandler.java b/lib/src/src/main/java/jline/CompletionHandler.java new file mode 100644 index 0000000..6f524da --- /dev/null +++ b/lib/src/src/main/java/jline/CompletionHandler.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + * Handler for dealing with candidates for tab-completion. + * + * @author Marc Prud'hommeaux + */ +public interface CompletionHandler { + boolean complete(ConsoleReader reader, List candidates, int position) + throws IOException; +} diff --git a/lib/src/src/main/java/jline/Completor.java b/lib/src/src/main/java/jline/Completor.java new file mode 100644 index 0000000..ad29cf9 --- /dev/null +++ b/lib/src/src/main/java/jline/Completor.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.util.*; + +/** + * A Completor is the mechanism by which tab-completion candidates + * will be resolved. + * + * @author Marc Prud'hommeaux + */ +public interface Completor { + /** + * Populates candidates with a list of possible + * completions for the buffer. The candidates + * list will not be sorted before being displayed to the + * user: thus, the complete method should sort the + * {@link List} before returning. + * + * + * @param buffer the buffer + * @param candidates the {@link List} of candidates to populate + * @return the index of the buffer for which + * the completion will be relative + */ + int complete(String buffer, int cursor, List candidates); +} diff --git a/lib/src/src/main/java/jline/ConsoleOperations.java b/lib/src/src/main/java/jline/ConsoleOperations.java new file mode 100644 index 0000000..16aa0e7 --- /dev/null +++ b/lib/src/src/main/java/jline/ConsoleOperations.java @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.awt.event.KeyEvent; + +/** + * Symbolic constants for Console operations and virtual key bindings. + * @see KeyEvent + * + * @author Marc Prud'hommeaux + */ +public interface ConsoleOperations { + final String CR = System.getProperty("line.separator"); + final char BACKSPACE = '\b'; + final char RESET_LINE = '\r'; + final char KEYBOARD_BELL = '\07'; + final char CTRL_A = 1; + final char CTRL_B = 2; + final char CTRL_C = 3; + final char CTRL_D = 4; + final char CTRL_E = 5; + final char CTRL_F = 6; + final char CTRL_G = 7; + final static char CTRL_K = 11; + final static char CTRL_L = 12; + final char CTRL_N = 14; + final char CTRL_P = 16; + final static char CTRL_OB = 27; + final static char DELETE = 127; + final static char CTRL_QM = 127; + + + /** + * Logical constants for key operations. + */ + + /** + * Unknown operation. + */ + final short UNKNOWN = -99; + + /** + * Operation that moves to the beginning of the buffer. + */ + final short MOVE_TO_BEG = -1; + + /** + * Operation that moves to the end of the buffer. + */ + final short MOVE_TO_END = -3; + + /** + * Operation that moved to the previous character in the buffer. + */ + final short PREV_CHAR = -4; + + /** + * Operation that issues a newline. + */ + final short NEWLINE = -6; + + /** + * Operation that deletes the buffer from the current character to the end. + */ + final short KILL_LINE = -7; + + /** + * Operation that clears the screen. + */ + final short CLEAR_SCREEN = -8; + + /** + * Operation that sets the buffer to the next history item. + */ + final short NEXT_HISTORY = -9; + + /** + * Operation that sets the buffer to the previous history item. + */ + final short PREV_HISTORY = -11; + + /** + * Operation that redisplays the current buffer. + */ + final short REDISPLAY = -13; + + /** + * Operation that deletes the buffer from the cursor to the beginning. + */ + final short KILL_LINE_PREV = -15; + + /** + * Operation that deletes the previous word in the buffer. + */ + final short DELETE_PREV_WORD = -16; + + /** + * Operation that moves to the next character in the buffer. + */ + final short NEXT_CHAR = -19; + + /** + * Operation that moves to the previous character in the buffer. + */ + final short REPEAT_PREV_CHAR = -20; + + /** + * Operation that searches backwards in the command history. + */ + final short SEARCH_PREV = -21; + + /** + * Operation that repeats the character. + */ + final short REPEAT_NEXT_CHAR = -24; + + /** + * Operation that searches forward in the command history. + */ + final short SEARCH_NEXT = -25; + + /** + * Operation that moved to the previous whitespace. + */ + final short PREV_SPACE_WORD = -27; + + /** + * Operation that moved to the end of the current word. + */ + final short TO_END_WORD = -29; + + /** + * Operation that + */ + final short REPEAT_SEARCH_PREV = -34; + + /** + * Operation that + */ + final short PASTE_PREV = -36; + + /** + * Operation that + */ + final short REPLACE_MODE = -37; + + /** + * Operation that + */ + final short SUBSTITUTE_LINE = -38; + + /** + * Operation that + */ + final short TO_PREV_CHAR = -39; + + /** + * Operation that + */ + final short NEXT_SPACE_WORD = -40; + + /** + * Operation that + */ + final short DELETE_PREV_CHAR = -41; + + /** + * Operation that + */ + final short ADD = -42; + + /** + * Operation that + */ + final short PREV_WORD = -43; + + /** + * Operation that + */ + final short CHANGE_META = -44; + + /** + * Operation that + */ + final short DELETE_META = -45; + + /** + * Operation that + */ + final short END_WORD = -46; + + /** + * Operation that toggles insert/overtype + */ + final short INSERT = -48; + + /** + * Operation that + */ + final short REPEAT_SEARCH_NEXT = -49; + + /** + * Operation that + */ + final short PASTE_NEXT = -50; + + /** + * Operation that + */ + final short REPLACE_CHAR = -51; + + /** + * Operation that + */ + final short SUBSTITUTE_CHAR = -52; + + /** + * Operation that + */ + final short TO_NEXT_CHAR = -53; + + /** + * Operation that undoes the previous operation. + */ + final short UNDO = -54; + + /** + * Operation that moved to the next word. + */ + final short NEXT_WORD = -55; + + /** + * Operation that deletes the previous character. + */ + final short DELETE_NEXT_CHAR = -56; + + /** + * Operation that toggles between uppercase and lowercase. + */ + final short CHANGE_CASE = -57; + + /** + * Operation that performs completion operation on the current word. + */ + final short COMPLETE = -58; + + /** + * Operation that exits the command prompt. + */ + final short EXIT = -59; + + /** + * Operation that pastes the contents of the clipboard into the line + */ + final short PASTE = -60; + + /** + * Operation that moves the current History to the beginning. + */ + final static short START_OF_HISTORY = -61; + + /** + * Operation that moves the current History to the end. + */ + final static short END_OF_HISTORY = -62; + + /** + * Operation that clears whatever text is on the current line. + */ + final static short CLEAR_LINE = -63; + + /** + * Operation that aborts the current command (like searching) + */ + final static short ABORT = -64; + +} diff --git a/lib/src/src/main/java/jline/ConsoleReader.java b/lib/src/src/main/java/jline/ConsoleReader.java new file mode 100644 index 0000000..18339d4 --- /dev/null +++ b/lib/src/src/main/java/jline/ConsoleReader.java @@ -0,0 +1,1823 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.awt.*; +import java.awt.datatransfer.*; +import java.awt.event.ActionListener; + +import java.io.*; +import java.util.*; +import java.util.List; + +/** + * A reader for console applications. It supports custom tab-completion, + * saveable command history, and command line editing. On some platforms, + * platform-specific commands will need to be issued before the reader will + * function properly. See {@link Terminal#initializeTerminal} for convenience + * methods for issuing platform-specific setup commands. + * + * @author Marc Prud'hommeaux + */ +public class ConsoleReader implements ConsoleOperations { + + final static int TAB_WIDTH = 4; + String prompt; + private boolean useHistory = true; + private boolean usePagination = false; + public static final String CR = System.getProperty("line.separator"); + private static ResourceBundle loc = ResourceBundle.getBundle(CandidateListCompletionHandler.class.getName()); + /** + * Map that contains the operation name to keymay operation mapping. + */ + public static SortedMap KEYMAP_NAMES; + + + static { + Map names = new TreeMap(); + + names.put("MOVE_TO_BEG", new Short(MOVE_TO_BEG)); + names.put("MOVE_TO_END", new Short(MOVE_TO_END)); + names.put("PREV_CHAR", new Short(PREV_CHAR)); + names.put("NEWLINE", new Short(NEWLINE)); + names.put("KILL_LINE", new Short(KILL_LINE)); + names.put("PASTE", new Short(PASTE)); + names.put("CLEAR_SCREEN", new Short(CLEAR_SCREEN)); + names.put("NEXT_HISTORY", new Short(NEXT_HISTORY)); + names.put("PREV_HISTORY", new Short(PREV_HISTORY)); + names.put("START_OF_HISTORY", new Short(START_OF_HISTORY)); + names.put("END_OF_HISTORY", new Short(END_OF_HISTORY)); + names.put("REDISPLAY", new Short(REDISPLAY)); + names.put("KILL_LINE_PREV", new Short(KILL_LINE_PREV)); + names.put("DELETE_PREV_WORD", new Short(DELETE_PREV_WORD)); + names.put("NEXT_CHAR", new Short(NEXT_CHAR)); + names.put("REPEAT_PREV_CHAR", new Short(REPEAT_PREV_CHAR)); + names.put("SEARCH_PREV", new Short(SEARCH_PREV)); + names.put("REPEAT_NEXT_CHAR", new Short(REPEAT_NEXT_CHAR)); + names.put("SEARCH_NEXT", new Short(SEARCH_NEXT)); + names.put("PREV_SPACE_WORD", new Short(PREV_SPACE_WORD)); + names.put("TO_END_WORD", new Short(TO_END_WORD)); + names.put("REPEAT_SEARCH_PREV", new Short(REPEAT_SEARCH_PREV)); + names.put("PASTE_PREV", new Short(PASTE_PREV)); + names.put("REPLACE_MODE", new Short(REPLACE_MODE)); + names.put("SUBSTITUTE_LINE", new Short(SUBSTITUTE_LINE)); + names.put("TO_PREV_CHAR", new Short(TO_PREV_CHAR)); + names.put("NEXT_SPACE_WORD", new Short(NEXT_SPACE_WORD)); + names.put("DELETE_PREV_CHAR", new Short(DELETE_PREV_CHAR)); + names.put("ADD", new Short(ADD)); + names.put("PREV_WORD", new Short(PREV_WORD)); + names.put("CHANGE_META", new Short(CHANGE_META)); + names.put("DELETE_META", new Short(DELETE_META)); + names.put("END_WORD", new Short(END_WORD)); + names.put("NEXT_CHAR", new Short(NEXT_CHAR)); + names.put("INSERT", new Short(INSERT)); + names.put("REPEAT_SEARCH_NEXT", new Short(REPEAT_SEARCH_NEXT)); + names.put("PASTE_NEXT", new Short(PASTE_NEXT)); + names.put("REPLACE_CHAR", new Short(REPLACE_CHAR)); + names.put("SUBSTITUTE_CHAR", new Short(SUBSTITUTE_CHAR)); + names.put("TO_NEXT_CHAR", new Short(TO_NEXT_CHAR)); + names.put("UNDO", new Short(UNDO)); + names.put("NEXT_WORD", new Short(NEXT_WORD)); + names.put("DELETE_NEXT_CHAR", new Short(DELETE_NEXT_CHAR)); + names.put("CHANGE_CASE", new Short(CHANGE_CASE)); + names.put("COMPLETE", new Short(COMPLETE)); + names.put("EXIT", new Short(EXIT)); + names.put("CLEAR_LINE", new Short(CLEAR_LINE)); + names.put("ABORT", new Short(ABORT)); + + KEYMAP_NAMES = new TreeMap(Collections.unmodifiableMap(names)); + } + /** + * The map for logical operations. + */ + private final short[] keybindings; + /** + * If true, issue an audible keyboard bell when appropriate. + */ + private boolean bellEnabled = true; + /** + * The current character mask. + */ + private Character mask = null; + /** + * The null mask. + */ + private static final Character NULL_MASK = new Character((char) 0); + /** + * The number of tab-completion candidates above which a warning will be + * prompted before showing all the candidates. + */ + private int autoprintThreshhold = Integer.getInteger( + "jline.completion.threshold", 100).intValue(); // same default as + + // bash + /** + * The Terminal to use. + */ + private final Terminal terminal; + private CompletionHandler completionHandler = new CandidateListCompletionHandler(); + InputStream in; + final Writer out; + final CursorBuffer buf = new CursorBuffer(); + static PrintWriter debugger; + History history = new History(); + final List completors = new LinkedList(); + private Character echoCharacter = null; + private Map triggeredActions = new HashMap(); + + private StringBuffer searchTerm = null; + private String previousSearchTerm = ""; + private int searchIndex = -1; + + /** + * Adding a triggered Action allows to give another course of action + * if a character passed the preprocessing. + * + * Say you want to close the application if the user enter q. + * addTriggerAction('q', new ActionListener(){ System.exit(0); }); + * would do the trick. + * + * @param c + * @param listener + */ + public void addTriggeredAction(char c, ActionListener listener) { + triggeredActions.put(new Character(c), listener); + } + + /** + * Create a new reader using {@link FileDescriptor#in} for input and + * {@link System#out} for output. {@link FileDescriptor#in} is used because + * it has a better chance of being unbuffered. + */ + public ConsoleReader() throws IOException { + this(new FileInputStream(FileDescriptor.in), + new PrintWriter( + new OutputStreamWriter(System.out, + System.getProperty("jline.WindowsTerminal.output.encoding", System.getProperty("file.encoding"))))); + } + + /** + * Create a new reader using the specified {@link InputStream} for input and + * the specific writer for output, using the default keybindings resource. + */ + public ConsoleReader(final InputStream in, final Writer out) + throws IOException { + this(in, out, null); + } + + public ConsoleReader(final InputStream in, final Writer out, + final InputStream bindings) throws IOException { + this(in, out, bindings, Terminal.getTerminal()); + } + + /** + * Create a new reader. + * + * @param in + * the input + * @param out + * the output + * @param bindings + * the key bindings to use + * @param term + * the terminal to use + */ + public ConsoleReader(InputStream in, Writer out, InputStream bindings, + Terminal term) throws IOException { + this.terminal = term; + setInput(in); + this.out = out; + if (bindings == null) { + try { + String bindingFile = System.getProperty("jline.keybindings", + new File(System.getProperty("user.home"), + ".jlinebindings.properties").getAbsolutePath()); + + if (new File(bindingFile).isFile()) { + bindings = new FileInputStream(new File(bindingFile)); + } + } catch (Exception e) { + // swallow exceptions with option debugging + if (debugger != null) { + e.printStackTrace(debugger); + } + } + } + + if (bindings == null) { + bindings = terminal.getDefaultBindings(); + } + + this.keybindings = new short[Character.MAX_VALUE * 2]; + + Arrays.fill(this.keybindings, UNKNOWN); + + /** + * Loads the key bindings. Bindings file is in the format: + * + * keycode: operation name + */ + if (bindings != null) { + Properties p = new Properties(); + p.load(bindings); + bindings.close(); + + for (Iterator i = p.keySet().iterator(); i.hasNext();) { + String val = (String) i.next(); + + try { + Short code = new Short(val); + String op = (String) p.getProperty(val); + + Short opval = (Short) KEYMAP_NAMES.get(op); + + if (opval != null) { + keybindings[code.shortValue()] = opval.shortValue(); + } + } catch (NumberFormatException nfe) { + consumeException(nfe); + } + } + + // hardwired arrow key bindings + // keybindings[VK_UP] = PREV_HISTORY; + // keybindings[VK_DOWN] = NEXT_HISTORY; + // keybindings[VK_LEFT] = PREV_CHAR; + // keybindings[VK_RIGHT] = NEXT_CHAR; + } + } + + public Terminal getTerminal() { + return this.terminal; + } + + /** + * Set the stream for debugging. Development use only. + */ + public void setDebug(final PrintWriter debugger) { + ConsoleReader.debugger = debugger; + } + + /** + * Set the stream to be used for console input. + */ + public void setInput(final InputStream in) { + this.in = in; + } + + /** + * Returns the stream used for console input. + */ + public InputStream getInput() { + return this.in; + } + + /** + * Read the next line and return the contents of the buffer. + */ + public String readLine() throws IOException { + return readLine((String) null); + } + + /** + * Read the next line with the specified character mask. If null, then + * characters will be echoed. If 0, then no characters will be echoed. + */ + public String readLine(final Character mask) throws IOException { + return readLine(null, mask); + } + + /** + * @param bellEnabled + * if true, enable audible keyboard bells if an alert is + * required. + */ + public void setBellEnabled(final boolean bellEnabled) { + this.bellEnabled = bellEnabled; + } + + /** + * @return true is audible keyboard bell is enabled. + */ + public boolean getBellEnabled() { + return this.bellEnabled; + } + + /** + * Query the terminal to find the current width; + * + * @see Terminal#getTerminalWidth + * @return the width of the current terminal. + */ + public int getTermwidth() { + return getTerminal().getTerminalWidth(); + } + + /** + * Query the terminal to find the current width; + * + * @see Terminal#getTerminalHeight + * + * @return the height of the current terminal. + */ + public int getTermheight() { + return getTerminal().getTerminalHeight(); + } + + /** + * @param autoprintThreshhold + * the number of candidates to print without issuing a warning. + */ + public void setAutoprintThreshhold(final int autoprintThreshhold) { + this.autoprintThreshhold = autoprintThreshhold; + } + + /** + * @return the number of candidates to print without issing a warning. + */ + public int getAutoprintThreshhold() { + return this.autoprintThreshhold; + } + + int getKeyForAction(short logicalAction) { + for (int i = 0; i < keybindings.length; i++) { + if (keybindings[i] == logicalAction) { + return i; + } + } + + return -1; + } + + /** + * Clear the echoed characters for the specified character code. + */ + int clearEcho(int c) throws IOException { + // if the terminal is not echoing, then just return... + if (!terminal.getEcho()) { + return 0; + } + + // otherwise, clear + int num = countEchoCharacters((char) c); + back(num); + drawBuffer(num); + + return num; + } + + int countEchoCharacters(char c) { + // tabs as special: we need to determine the number of spaces + // to cancel based on what out current cursor position is + if (c == 9) { + int tabstop = 8; // will this ever be different? + int position = getCursorPosition(); + + return tabstop - (position % tabstop); + } + + return getPrintableCharacters(c).length(); + } + + /** + * Return the number of characters that will be printed when the specified + * character is echoed to the screen. Adapted from cat by Torbjorn Granlund, + * as repeated in stty by David MacKenzie. + */ + StringBuffer getPrintableCharacters(char ch) { + StringBuffer sbuff = new StringBuffer(); + + if (ch >= 32) { + if (ch < 127) { + sbuff.append(ch); + } else if (ch == 127) { + sbuff.append('^'); + sbuff.append('?'); + } else { + sbuff.append('M'); + sbuff.append('-'); + + if (ch >= (128 + 32)) { + if (ch < (128 + 127)) { + sbuff.append((char) (ch - 128)); + } else { + sbuff.append('^'); + sbuff.append('?'); + } + } else { + sbuff.append('^'); + sbuff.append((char) (ch - 128 + 64)); + } + } + } else { + sbuff.append('^'); + sbuff.append((char) (ch + 64)); + } + + return sbuff; + } + + int getCursorPosition() { + // FIXME: does not handle anything but a line with a prompt + // absolute position + return getStrippedAnsiLength(prompt) + buf.cursor; + } + + /** + * Strips ANSI escape sequences starting with CSI and ending with char in range 64-126 + * @param ansiString String possibly containing ANSI codes, may be null + * @return length after stripping ANSI codes + */ + int getStrippedAnsiLength(String ansiString) { + if (ansiString == null) return 0; + boolean inAnsi = false; + int strippedLength = 0; + char[] chars = ansiString.toCharArray(); + for (int i = 0; i < chars.length; i++) { + char c = chars[i]; + if (!inAnsi && c == 27 && i < chars.length - 1 && chars[i+1] == '[') { + i++; // skip '[' + inAnsi = true; + } else if (inAnsi) { + if (64 <= c && c <= 126) { + inAnsi = false; + } + } else { + strippedLength++; + } + } + return strippedLength; + } + + public String readLine(final String prompt) throws IOException { + return readLine(prompt, null); + } + + /** + * The default prompt that will be issued. + */ + public void setDefaultPrompt(String prompt) { + this.prompt = prompt; + } + + /** + * The default prompt that will be issued. + */ + public String getDefaultPrompt() { + return prompt; + } + + /** + * Read a line from the in {@link InputStream}, and return the line + * (without any trailing newlines). + * + * @param prompt + * the prompt to issue to the console, may be null. + * @return a line that is read from the terminal, or null if there was null + * input (e.g., CTRL-D was pressed). + */ + public String readLine(final String prompt, final Character mask) + throws IOException { + this.mask = mask; + if (prompt != null) { + this.prompt = prompt; + } + + try { + terminal.beforeReadLine(this, this.prompt, mask); + + if ((this.prompt != null) && (this.prompt.length() > 0)) { + out.write(this.prompt); + out.flush(); + } + + // if the terminal is unsupported, just use plain-java reading + if (!terminal.isSupported()) { + return readLine(in); + } + + final int NORMAL = 1; + final int SEARCH = 2; + int state = NORMAL; + + boolean success = true; + + while (true) { + // Read next key and look up the command binding. + int[] next = readBinding(); + + if (next == null) { + return null; + } + + int c = next[0]; + int code = next[1]; + + if (c == -1) { + return null; + } + + // Search mode. + // + // Note that we have to do this first, because if there is a command + // not linked to a search command, we leave the search mode and fall + // through to the normal state. + if (state == SEARCH) { + switch (code) { + // This doesn't work right now, it seems CTRL-G is not passed + // down correctly. :( + case ABORT: + state = NORMAL; + break; + + case SEARCH_PREV: + if (searchTerm.length() == 0) { + searchTerm.append(previousSearchTerm); + } + + if (searchIndex == -1) { + searchIndex = history.searchBackwards(searchTerm.toString()); + } else { + searchIndex = history.searchBackwards(searchTerm.toString(), searchIndex); + } + break; + + case DELETE_PREV_CHAR: + if (searchTerm.length() > 0) { + searchTerm.deleteCharAt(searchTerm.length() - 1); + searchIndex = history.searchBackwards(searchTerm.toString()); + } + break; + + case UNKNOWN: + searchTerm.appendCodePoint(c); + searchIndex = history.searchBackwards(searchTerm.toString()); + break; + + default: + // Set buffer and cursor position to the found string. + if (searchIndex != -1) { + history.setCurrentIndex(searchIndex); + setBuffer(history.current()); + buf.cursor = history.current().indexOf(searchTerm.toString()); + } + state = NORMAL; + break; + } + + // if we're still in search mode, print the search status + if (state == SEARCH) { + if (searchTerm.length() == 0) { + printSearchStatus("", ""); + } else { + if (searchIndex == -1) { + beep(); + } else { + printSearchStatus(searchTerm.toString(), history.getHistory(searchIndex)); + } + } + } + // otherwise, restore the line + else { + restoreLine(); + } + } + + if (state == NORMAL) { + switch (code) { + case EXIT: // ctrl-d + + if (buf.buffer.length() == 0) { + return null; + } + else { + success = deleteCurrentCharacter(); + } + break; + + case COMPLETE: // tab + success = complete(); + break; + + case MOVE_TO_BEG: + success = setCursorPosition(0); + break; + + case KILL_LINE: // CTRL-K + success = killLine(); + break; + + case CLEAR_SCREEN: // CTRL-L + success = clearScreen(); + break; + + case KILL_LINE_PREV: // CTRL-U + success = resetLine(); + break; + + case NEWLINE: // enter + moveToEnd(); + printNewline(); // output newline + return finishBuffer(); + + case DELETE_PREV_CHAR: // backspace + success = backspace(); + break; + + case DELETE_NEXT_CHAR: // delete + success = deleteCurrentCharacter(); + break; + + case MOVE_TO_END: + success = moveToEnd(); + break; + + case PREV_CHAR: + success = moveCursor(-1) != 0; + break; + + case NEXT_CHAR: + success = moveCursor(1) != 0; + break; + + case NEXT_HISTORY: + success = moveHistory(true); + break; + + case PREV_HISTORY: + success = moveHistory(false); + break; + + case ABORT: + case REDISPLAY: + break; + + case PASTE: + success = paste(); + break; + + case DELETE_PREV_WORD: + success = deletePreviousWord(); + break; + + case PREV_WORD: + success = previousWord(); + break; + + case NEXT_WORD: + success = nextWord(); + break; + + case START_OF_HISTORY: + success = history.moveToFirstEntry(); + if (success) { + setBuffer(history.current()); + } + break; + + case END_OF_HISTORY: + success = history.moveToLastEntry(); + if (success) { + setBuffer(history.current()); + } + break; + + case CLEAR_LINE: + moveInternal(-(buf.buffer.length())); + killLine(); + break; + + case INSERT: + buf.setOvertyping(!buf.isOvertyping()); + break; + + case SEARCH_PREV: // CTRL-R + if (searchTerm != null) { + previousSearchTerm = searchTerm.toString(); + } + searchTerm = new StringBuffer(buf.buffer); + state = SEARCH; + if (searchTerm.length() > 0) { + searchIndex = history.searchBackwards(searchTerm.toString()); + if (searchIndex == -1) { + beep(); + } + printSearchStatus(searchTerm.toString(), + searchIndex > -1 ? history.getHistory(searchIndex) : ""); + } else { + searchIndex = -1; + printSearchStatus("", ""); + } + break; + + case UNKNOWN: + default: + if (c != 0) { // ignore null chars + ActionListener action = (ActionListener) triggeredActions.get(new Character((char) c)); + if (action != null) { + action.actionPerformed(null); + } else { + putChar(c, true); + } + } else { + success = false; + } + } + + if (!(success)) { + beep(); + } + + flushConsole(); + } + } + } finally { + terminal.afterReadLine(this, this.prompt, mask); + } + } + + private String readLine(InputStream in) throws IOException { + StringBuffer buf = new StringBuffer(); + + while (true) { + int i = in.read(); + + if ((i == -1) || (i == '\n') || (i == '\r')) { + return buf.toString(); + } + + buf.append((char) i); + } + + // return new BufferedReader (new InputStreamReader (in)).readLine (); + } + + /** + * Reads the console input and returns an array of the form [raw, key + * binding]. + */ + private int[] readBinding() throws IOException { + int c = readVirtualKey(); + + if (c == -1) { + return null; + } + + // extract the appropriate key binding + short code = keybindings[c]; + + if (debugger != null) { + // debug(" translated: " + (int) c + ": " + code); + } + + return new int[]{c, code}; + } + + /** + * Move up or down the history tree. + */ + private final boolean moveHistory(final boolean next) throws IOException { + if (next && !history.next()) { + return false; + } else if (!next && !history.previous()) { + return false; + } + + setBuffer(history.current()); + + return true; + } + + /** + * Paste the contents of the clipboard into the console buffer + * + * @return true if clipboard contents pasted + */ + public boolean paste() throws IOException { + Clipboard clipboard; + try { // May throw ugly exception on system without X + clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + } catch (Exception e) { + return false; + } + + if (clipboard == null) { + return false; + } + + Transferable transferable = clipboard.getContents(null); + + if (transferable == null) { + return false; + } + + try { + Object content = transferable.getTransferData(DataFlavor.plainTextFlavor); + + /* + * This fix was suggested in bug #1060649 at + * http://sourceforge.net/tracker/index.php?func=detail&aid=1060649&group_id=64033&atid=506056 + * to get around the deprecated DataFlavor.plainTextFlavor, but it + * raises a UnsupportedFlavorException on Mac OS X + */ + if (content == null) { + try { + content = new DataFlavor().getReaderForText(transferable); + } catch (Exception e) { + } + } + + if (content == null) { + return false; + } + + String value; + + if (content instanceof Reader) { + // TODO: we might want instead connect to the input stream + // so we can interpret individual lines + value = ""; + + String line = null; + + for (BufferedReader read = new BufferedReader((Reader) content); (line = read.readLine()) != null;) { + if (value.length() > 0) { + value += "\n"; + } + + value += line; + } + } else { + value = content.toString(); + } + + if (value == null) { + return true; + } + + putString(value); + + return true; + } catch (UnsupportedFlavorException ufe) { + if (debugger != null) { + debug(ufe + ""); + } + + return false; + } + } + + /** + * Kill the buffer ahead of the current cursor position. + * + * @return true if successful + */ + public boolean killLine() throws IOException { + int cp = buf.cursor; + int len = buf.buffer.length(); + + if (cp >= len) { + return false; + } + + int num = buf.buffer.length() - cp; + clearAhead(num); + + for (int i = 0; i < num; i++) { + buf.buffer.deleteCharAt(len - i - 1); + } + + return true; + } + + /** + * Clear the screen by issuing the ANSI "clear screen" code. + */ + public boolean clearScreen() throws IOException { + if (!terminal.isANSISupported()) { + return false; + } + + // send the ANSI code to clear the screen + printANSISequence("2J"); + + // then send the ANSI code to go to position 1,1 + printANSISequence("1;1H"); + + redrawLine(); + + return true; + } + + /** + * Use the completors to modify the buffer with the appropriate completions. + * + * @return true if successful + */ + private final boolean complete() throws IOException { + // debug ("tab for (" + buf + ")"); + if (completors.size() == 0) { + return false; + } + + List candidates = new LinkedList(); + String bufstr = buf.buffer.toString(); + int cursor = buf.cursor; + + int position = -1; + + for (Iterator i = completors.iterator(); i.hasNext();) { + Completor comp = (Completor) i.next(); + + if ((position = comp.complete(bufstr, cursor, candidates)) != -1) { + break; + } + } + + // no candidates? Fail. + if (candidates.size() == 0) { + return false; + } + + return completionHandler.complete(this, candidates, position); + } + + public CursorBuffer getCursorBuffer() { + return buf; + } + + /** + * Output the specified {@link Collection} in proper columns. + * + * @param stuff + * the stuff to print + */ + public void printColumns(final Collection stuff) throws IOException { + if ((stuff == null) || (stuff.size() == 0)) { + return; + } + + int width = getTermwidth(); + int maxwidth = 0; + + for (Iterator i = stuff.iterator(); i.hasNext(); maxwidth = Math.max( + maxwidth, i.next().toString().length())) { + ; + } + + StringBuffer line = new StringBuffer(); + + int showLines; + + if (usePagination) { + showLines = getTermheight() - 1; // page limit + } else { + showLines = Integer.MAX_VALUE; + } + + for (Iterator i = stuff.iterator(); i.hasNext();) { + String cur = (String) i.next(); + + if ((line.length() + maxwidth) > width) { + printString(line.toString().trim()); + printNewline(); + line.setLength(0); + if (--showLines == 0) { // Overflow + printString(loc.getString("display-more")); + flushConsole(); + int c = readVirtualKey(); + if (c == '\r' || c == '\n') { + showLines = 1; // one step forward + } else if (c != 'q') { + showLines = getTermheight() - 1; // page forward + } + back(loc.getString("display-more").length()); + if (c == 'q') { + break; // cancel + } + } + } + + pad(cur, maxwidth + 3, line); + } + + if (line.length() > 0) { + printString(line.toString().trim()); + printNewline(); + line.setLength(0); + } + } + + /** + * Append toPad to the specified appendTo, as well as (toPad.length () - + * len) spaces. + * + * @param toPad + * the {@link String} to pad + * @param len + * the target length + * @param appendTo + * the {@link StringBuffer} to which to append the padded + * {@link String}. + */ + private final void pad(final String toPad, final int len, + final StringBuffer appendTo) { + appendTo.append(toPad); + + for (int i = 0; i < (len - toPad.length()); i++, appendTo.append(' ')) { + ; + } + } + + /** + * Add the specified {@link Completor} to the list of handlers for + * tab-completion. + * + * @param completor + * the {@link Completor} to add + * @return true if it was successfully added + */ + public boolean addCompletor(final Completor completor) { + return completors.add(completor); + } + + /** + * Remove the specified {@link Completor} from the list of handlers for + * tab-completion. + * + * @param completor + * the {@link Completor} to remove + * @return true if it was successfully removed + */ + public boolean removeCompletor(final Completor completor) { + return completors.remove(completor); + } + + /** + * Returns an unmodifiable list of all the completors. + */ + public Collection getCompletors() { + return Collections.unmodifiableList(completors); + } + + /** + * Erase the current line. + * + * @return false if we failed (e.g., the buffer was empty) + */ + final boolean resetLine() throws IOException { + if (buf.cursor == 0) { + return false; + } + + backspaceAll(); + + return true; + } + + /** + * Move the cursor position to the specified absolute index. + */ + public final boolean setCursorPosition(final int position) + throws IOException { + return moveCursor(position - buf.cursor) != 0; + } + + /** + * Set the current buffer's content to the specified {@link String}. The + * visual console will be modified to show the current buffer. + * + * @param buffer + * the new contents of the buffer. + */ + private final void setBuffer(final String buffer) throws IOException { + // don't bother modifying it if it is unchanged + if (buffer.equals(buf.buffer.toString())) { + return; + } + + // obtain the difference between the current buffer and the new one + int sameIndex = 0; + + for (int i = 0, l1 = buffer.length(), l2 = buf.buffer.length(); (i < l1) && (i < l2); i++) { + if (buffer.charAt(i) == buf.buffer.charAt(i)) { + sameIndex++; + } else { + break; + } + } + + int diff = buf.cursor - sameIndex; + if (diff < 0) { // we can't backspace here so try from the end of the buffer + moveToEnd(); + diff = buf.buffer.length() - sameIndex; + } + + backspace(diff); // go back for the differences + killLine(); // clear to the end of the line + buf.buffer.setLength(sameIndex); // the new length + putString(buffer.substring(sameIndex)); // append the differences + } + + /** + * Clear the line and redraw it. + */ + public final void redrawLine() throws IOException { + printCharacter(RESET_LINE); + flushConsole(); + drawLine(); + } + + /** + * Output put the prompt + the current buffer + */ + public final void drawLine() throws IOException { + if (prompt != null) { + printString(prompt); + } + + printString(buf.buffer.toString()); + + if (buf.length() != buf.cursor) // not at end of line + { + back(buf.length() - buf.cursor - 1); // sync + } + } + + /** + * Output a platform-dependant newline. + */ + public final void printNewline() throws IOException { + printString(CR); + flushConsole(); + } + + /** + * Clear the buffer and add its contents to the history. + * + * @return the former contents of the buffer. + */ + final String finishBuffer() { + String str = buf.buffer.toString(); + + // we only add it to the history if the buffer is not empty + // and if mask is null, since having a mask typically means + // the string was a password. We clear the mask after this call + if (str.length() > 0) { + if (mask == null && useHistory) { + history.addToHistory(str); + } else { + mask = null; + } + } + + history.moveToEnd(); + + buf.buffer.setLength(0); + buf.cursor = 0; + + return str; + } + + /** + * Write out the specified string to the buffer and the output stream. + */ + public final void putString(final String str) throws IOException { + buf.write(str); + printString(str); + drawBuffer(); + } + + /** + * Output the specified string to the output stream (but not the buffer). + */ + public final void printString(final String str) throws IOException { + printCharacters(str.toCharArray()); + } + + /** + * Output the specified character, both to the buffer and the output stream. + */ + private final void putChar(final int c, final boolean print) + throws IOException { + buf.write((char) c); + + if (print) { + // no masking... + if (mask == null) { + printCharacter(c); + } // null mask: don't print anything... + else if (mask.charValue() == 0) { + ; + } // otherwise print the mask... + else { + printCharacter(mask.charValue()); + } + + drawBuffer(); + } + } + + /** + * Redraw the rest of the buffer from the cursor onwards. This is necessary + * for inserting text into the buffer. + * + * @param clear + * the number of characters to clear after the end of the buffer + */ + private final void drawBuffer(final int clear) throws IOException { + // debug ("drawBuffer: " + clear); + if (buf.cursor == buf.length() && clear == 0) { + return; + } + char[] chars = buf.buffer.substring(buf.cursor).toCharArray(); + if (mask != null) { + Arrays.fill(chars, mask.charValue()); + } + + printCharacters(chars); + clearAhead(clear); + if (terminal.isANSISupported()) { + if (chars.length > 0) { + // don't ask, it seems to work + back(Math.max(chars.length - 1, 1)); + } + } else { + back(chars.length); + } + flushConsole(); + } + + /** + * Redraw the rest of the buffer from the cursor onwards. This is necessary + * for inserting text into the buffer. + */ + private final void drawBuffer() throws IOException { + drawBuffer(0); + } + + /** + * Clear ahead the specified number of characters without moving the cursor. + */ + private final void clearAhead(final int num) throws IOException { + if (num == 0) { + return; + } + + if (terminal.isANSISupported()) { + printANSISequence("J"); + return; + } + + // debug ("clearAhead: " + num); + + // print blank extra characters + printCharacters(' ', num); + + // we need to flush here so a "clever" console + // doesn't just ignore the redundancy of a space followed by + // a backspace. + flushConsole(); + + // reset the visual cursor + back(num); + + flushConsole(); + } + + /** + * Move the visual cursor backwards without modifying the buffer cursor. + */ + private final void back(final int num) throws IOException { + if (num == 0) return; + if (terminal.isANSISupported()) { + int width = getTermwidth(); + int cursor = getCursorPosition(); + // debug("back: " + cursor + " + " + num + " on " + width); + int currRow = (cursor + num) / width; + int newRow = cursor / width; + int newCol = cursor % width + 1; + // debug(" old row: " + currRow + " new row: " + newRow); + if (newRow < currRow) { + printANSISequence((currRow - newRow) + "A"); + } + printANSISequence(newCol + "G"); + flushConsole(); + return; + } + printCharacters(BACKSPACE, num); + flushConsole(); + } + + /** + * Issue an audible keyboard bell, if {@link #getBellEnabled} return true. + */ + public final void beep() throws IOException { + if (!(getBellEnabled())) { + return; + } + + printCharacter(KEYBOARD_BELL); + // need to flush so the console actually beeps + flushConsole(); + } + + /** + * Output the specified character to the output stream without manipulating + * the current buffer. + */ + private final void printCharacter(final int c) throws IOException { + if (c == '\t') { + char cbuf[] = new char[TAB_WIDTH]; + Arrays.fill(cbuf, ' '); + out.write(cbuf); + return; + } + + out.write(c); + } + + /** + * Output the specified characters to the output stream without manipulating + * the current buffer. + */ + private final void printCharacters(final char[] c) throws IOException { + int len = 0; + for (int i = 0; i < c.length; i++) { + if (c[i] == '\t') { + len += TAB_WIDTH; + } else { + len++; + } + } + + char cbuf[]; + if (len == c.length) { + cbuf = c; + } else { + cbuf = new char[len]; + int pos = 0; + for (int i = 0; i < c.length; i++) { + if (c[i] == '\t') { + Arrays.fill(cbuf, pos, pos + TAB_WIDTH, ' '); + pos += TAB_WIDTH; + } else { + cbuf[pos] = c[i]; + pos++; + } + } + } + + out.write(cbuf); + } + + private final void printCharacters(final char c, final int num) + throws IOException { + if (num == 1) { + printCharacter(c); + } else { + char[] chars = new char[num]; + Arrays.fill(chars, c); + printCharacters(chars); + } + } + + /** + * Flush the console output stream. This is important for printout out + * single characters (like a backspace or keyboard) that we want the console + * to handle immedately. + */ + public final void flushConsole() throws IOException { + out.flush(); + } + + private final int backspaceAll() throws IOException { + return backspace(Integer.MAX_VALUE); + } + + /** + * Issue num backspaces. + * + * @return the number of characters backed up + */ + private final int backspace(final int num) throws IOException { + if (buf.cursor == 0) { + return 0; + } + + int count = 0; + int termwidth = getTermwidth(); + int lines = getCursorPosition() / termwidth; + count = moveCursor(-1 * num) * -1; + // debug ("Deleting from " + buf.cursor + " for " + count); + buf.buffer.delete(buf.cursor, buf.cursor + count); + if (getCursorPosition() / termwidth != lines) { + if (terminal.isANSISupported()) { + // debug("doing backspace redraw: " + getCursorPosition() + " on " + termwidth + ": " + lines); + printANSISequence("J"); + flushConsole(); + } + } + drawBuffer(count); + + return count; + } + + /** + * Issue a backspace. + * + * @return true if successful + */ + public final boolean backspace() throws IOException { + return backspace(1) == 1; + } + + private final boolean moveToEnd() throws IOException { + return moveCursor(buf.length() - buf.cursor) > 0; + } + + /** + * Delete the character at the current position and redraw the remainder of + * the buffer. + */ + private final boolean deleteCurrentCharacter() throws IOException { + if (buf.length() == 0 || buf.cursor == buf.length()) { + return false; + } + + buf.buffer.deleteCharAt(buf.cursor); + drawBuffer(1); + return true; + } + + private final boolean previousWord() throws IOException { + while (isDelimiter(buf.current()) && (moveCursor(-1) != 0)) { + ; + } + + while (!isDelimiter(buf.current()) && (moveCursor(-1) != 0)) { + ; + } + + return true; + } + + private final boolean nextWord() throws IOException { + while (isDelimiter(buf.current()) && (moveCursor(1) != 0)) { + ; + } + + while (!isDelimiter(buf.current()) && (moveCursor(1) != 0)) { + ; + } + + return true; + } + + private final boolean deletePreviousWord() throws IOException { + while (isDelimiter(buf.current()) && backspace()) { + ; + } + + while (!isDelimiter(buf.current()) && backspace()) { + ; + } + + return true; + } + + /** + * Move the cursor where characters. + * + * @param num + * if less than 0, move abs(num) to the left, + * otherwise move num to the right. + * + * @return the number of spaces we moved + */ + public final int moveCursor(final int num) throws IOException { + int where = num; + + if ((buf.cursor == 0) && (where <= 0)) { + return 0; + } + + if ((buf.cursor == buf.buffer.length()) && (where >= 0)) { + return 0; + } + + if ((buf.cursor + where) < 0) { + where = -buf.cursor; + } else if ((buf.cursor + where) > buf.buffer.length()) { + where = buf.buffer.length() - buf.cursor; + } + + moveInternal(where); + + return where; + } + + /** + * debug. + * + * @param str + * the message to issue. + */ + public static void debug(final String str) { + if (debugger != null) { + debugger.println(str); + debugger.flush(); + } + } + + /** + * Move the cursor where characters, withough checking the current + * buffer. + * + * @param where + * the number of characters to move to the right or left. + */ + private final void moveInternal(final int where) throws IOException { + // debug ("move cursor " + where + " (" + // + buf.cursor + " => " + (buf.cursor + where) + ")"); + buf.cursor += where; + + if (terminal.isANSISupported()) { + if (where < 0) { + back(Math.abs(where)); + } else { + int width = getTermwidth(); + int cursor = getCursorPosition(); + int oldLine = (cursor - where) / width; + int newLine = cursor / width; + if (newLine > oldLine) { + printANSISequence((newLine - oldLine) + "B"); + } + printANSISequence(1 +(cursor % width) + "G"); + } + flushConsole(); + return; + } + + char c; + + if (where < 0) { + int len = 0; + for (int i = buf.cursor; i < buf.cursor - where; i++) { + if (buf.getBuffer().charAt(i) == '\t') { + len += TAB_WIDTH; + } else { + len++; + } + } + + char cbuf[] = new char[len]; + Arrays.fill(cbuf, BACKSPACE); + out.write(cbuf); + + return; + } else if (buf.cursor == 0) { + return; + } else if (mask != null) { + c = mask.charValue(); + } else { + printCharacters(buf.buffer.substring(buf.cursor - where, buf.cursor).toCharArray()); + return; + } + + // null character mask: don't output anything + if (NULL_MASK.equals(mask)) { + return; + } + + printCharacters(c, Math.abs(where)); + } + + /** + * Read a character from the console. + * + * @return the character, or -1 if an EOF is received. + */ + public final int readVirtualKey() throws IOException { + int c = terminal.readVirtualKey(in); + + if (debugger != null) { + // debug("keystroke: " + c + ""); + } + + // clear any echo characters + clearEcho(c); + + return c; + } + + public final int readCharacter(final char[] allowed) throws IOException { + // if we restrict to a limited set and the current character + // is not in the set, then try again. + char c; + + Arrays.sort(allowed); // always need to sort before binarySearch + + while (Arrays.binarySearch(allowed, c = (char) readVirtualKey()) < 0); + + return c; + } + + /** + * Issue num deletes. + * + * @return the number of characters backed up + */ + private final int delete(final int num) + throws IOException { + /* Commented out beacuse of DWA-2949: + if (buf.cursor == 0) + return 0;*/ + + buf.buffer.delete(buf.cursor, buf.cursor + 1); + drawBuffer(1); + + return 1; + } + + public final boolean replace(int num, String replacement) { + buf.buffer.replace(buf.cursor - num, buf.cursor, replacement); + try { + moveCursor(-num); + drawBuffer(Math.max(0, num - replacement.length())); + moveCursor(replacement.length()); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + /** + * Issue a delete. + * + * @return true if successful + */ + public final boolean delete() + throws IOException { + return delete(1) == 1; + } + + public void setHistory(final History history) { + this.history = history; + } + + public History getHistory() { + return this.history; + } + + public void setCompletionHandler(final CompletionHandler completionHandler) { + this.completionHandler = completionHandler; + } + + public CompletionHandler getCompletionHandler() { + return this.completionHandler; + } + + /** + *

+ * Set the echo character. For example, to have "*" entered when a password + * is typed: + *

+ * + *
+     * myConsoleReader.setEchoCharacter(new Character('*'));
+     * 
+ * + *

+ * Setting the character to + * + *

+     * null
+     * 
+ * + * will restore normal character echoing. Setting the character to + * + *
+     * new Character(0)
+     * 
+ * + * will cause nothing to be echoed. + *

+ * + * @param echoCharacter + * the character to echo to the console in place of the typed + * character. + */ + public void setEchoCharacter(final Character echoCharacter) { + this.echoCharacter = echoCharacter; + } + + /** + * Returns the echo character. + */ + public Character getEchoCharacter() { + return this.echoCharacter; + } + + /** + * No-op for exceptions we want to silently consume. + */ + private void consumeException(final Throwable e) { + } + + /** + * Checks to see if the specified character is a delimiter. We consider a + * character a delimiter if it is anything but a letter or digit. + * + * @param c + * the character to test + * @return true if it is a delimiter + */ + private boolean isDelimiter(char c) { + return !Character.isLetterOrDigit(c); + } + + private void printANSISequence(String sequence) throws IOException { + printCharacter(27); + printCharacter('['); + printString(sequence); + flushConsole(); + } + + /* + private int currentCol, currentRow; + + private void getCurrentPosition() { + // check for ByteArrayInputStream to disable for unit tests + if (terminal.isANSISupported() && !(in instanceof ByteArrayInputStream)) { + try { + printANSISequence("[6n"); + flushConsole(); + StringBuffer b = new StringBuffer(8); + // position is sent as [{ROW};{COLUMN}R + int r; + while((r = in.read()) > -1 && r != 'R') { + if (r != 27 && r != '[') { + b.append((char) r); + } + } + String[] pos = b.toString().split(";"); + currentRow = Integer.parseInt(pos[0]); + currentCol = Integer.parseInt(pos[1]); + } catch (Exception x) { + // no luck + currentRow = currentCol = -1; + } + } + } + */ + + /** + * Whether or not to add new commands to the history buffer. + */ + public void setUseHistory(boolean useHistory) { + this.useHistory = useHistory; + } + + /** + * Whether or not to add new commands to the history buffer. + */ + public boolean getUseHistory() { + return useHistory; + } + + /** + * Whether to use pagination when the number of rows of candidates exceeds + * the height of the temrinal. + */ + public void setUsePagination(boolean usePagination) { + this.usePagination = usePagination; + } + + /** + * Whether to use pagination when the number of rows of candidates exceeds + * the height of the temrinal. + */ + public boolean getUsePagination() { + return this.usePagination; + } + + public void printSearchStatus(String searchTerm, String match) throws IOException { + int i = match.indexOf(searchTerm); + printString("\r(reverse-i-search) `" + searchTerm + "': " + match + "\u001b[K"); + // FIXME: our ANSI using back() does not work here + printCharacters(BACKSPACE, match.length() - i); + flushConsole(); + } + + public void restoreLine() throws IOException { + printString("\u001b[2K"); // ansi/vt100 for clear whole line + redrawLine(); + flushConsole(); + } +} diff --git a/lib/src/src/main/java/jline/ConsoleReaderInputStream.java b/lib/src/src/main/java/jline/ConsoleReaderInputStream.java new file mode 100644 index 0000000..22a7b6d --- /dev/null +++ b/lib/src/src/main/java/jline/ConsoleReaderInputStream.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + * An {@link InputStream} implementation that wraps a {@link ConsoleReader}. + * It is useful for setting up the {@link System#in} for a generic + * console. + * @author Marc Prud'hommeaux + */ +public class ConsoleReaderInputStream extends SequenceInputStream { + private static InputStream systemIn = System.in; + + public static void setIn() throws IOException { + setIn(new ConsoleReader()); + } + + public static void setIn(final ConsoleReader reader) { + System.setIn(new ConsoleReaderInputStream(reader)); + } + + /** + * Restore the original {@link System#in} input stream. + */ + public static void restoreIn() { + System.setIn(systemIn); + } + + public ConsoleReaderInputStream(final ConsoleReader reader) { + super(new ConsoleEnumeration(reader)); + } + + private static class ConsoleEnumeration implements Enumeration { + private final ConsoleReader reader; + private ConsoleLineInputStream next = null; + private ConsoleLineInputStream prev = null; + + public ConsoleEnumeration(final ConsoleReader reader) { + this.reader = reader; + } + + public Object nextElement() { + if (next != null) { + InputStream n = next; + prev = next; + next = null; + + return n; + } + + return new ConsoleLineInputStream(reader); + } + + public boolean hasMoreElements() { + // the last line was null + if ((prev != null) && (prev.wasNull == true)) { + return false; + } + + if (next == null) { + next = (ConsoleLineInputStream) nextElement(); + } + + return next != null; + } + } + + private static class ConsoleLineInputStream extends InputStream { + private final ConsoleReader reader; + private String line = null; + private int index = 0; + private boolean eol = false; + protected boolean wasNull = false; + + public ConsoleLineInputStream(final ConsoleReader reader) { + this.reader = reader; + } + + public int read() throws IOException { + if (eol) { + return -1; + } + + if (line == null) { + line = reader.readLine(); + } + + if (line == null) { + wasNull = true; + return -1; + } + + if (index >= line.length()) { + eol = true; + return '\n'; // lines are ended with a newline + } + + return line.charAt(index++); + } + } +} diff --git a/lib/src/src/main/java/jline/ConsoleRunner.java b/lib/src/src/main/java/jline/ConsoleRunner.java new file mode 100644 index 0000000..36356de --- /dev/null +++ b/lib/src/src/main/java/jline/ConsoleRunner.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + *

+ * A pass-through application that sets the system input stream to a + * {@link ConsoleReader} and invokes the specified main method. + *

+ * @author Marc Prud'hommeaux + */ +public class ConsoleRunner { + private static ConsoleReader reader; + + public static ConsoleReader getReader() { return reader; } + + public static final String property = "jline.history"; + + public static void main(final String[] args) throws Exception { + String historyFileName = null; + + List argList = new ArrayList(Arrays.asList(args)); + + if (argList.size() == 0) { + usage(); + + return; + } + + historyFileName = System.getProperty(ConsoleRunner.property, null); + + // invoke the main() method + String mainClass = (String) argList.remove(0); + + // setup the inpout stream + reader = new ConsoleReader(); + + if (historyFileName != null) { + reader.setHistory(new History (new File + (System.getProperty("user.home"), + ".jline-" + mainClass + + "." + historyFileName + ".history"))); + } else { + reader.setHistory(new History(new File + (System.getProperty("user.home"), + ".jline-" + mainClass + ".history"))); + } + + String completors = System.getProperty + (ConsoleRunner.class.getName() + ".completors", ""); + List completorList = new ArrayList(); + + for (StringTokenizer tok = new StringTokenizer(completors, ","); + tok.hasMoreTokens();) { + completorList.add + ((Completor) Class.forName(tok.nextToken()).newInstance()); + } + + if (completorList.size() > 0) { + reader.addCompletor(new ArgumentCompletor(completorList)); + } + + ConsoleReaderInputStream.setIn(reader); + + try { + Class.forName(mainClass). + getMethod("main", new Class[] { String[].class }). + invoke(null, new Object[] { argList.toArray(new String[0]) }); + } finally { + // just in case this main method is called from another program + ConsoleReaderInputStream.restoreIn(); + } + } + + private static void usage() { + System.out.println("Usage: \n java " + "[-Djline.history='name'] " + + ConsoleRunner.class.getName() + + " [args]" + + "\n\nThe -Djline.history option will avoid history" + + "\nmangling when running ConsoleRunner on the same application." + + "\n\nargs will be passed directly to the target class name."); + } +} diff --git a/lib/src/src/main/java/jline/CursorBuffer.java b/lib/src/src/main/java/jline/CursorBuffer.java new file mode 100644 index 0000000..120d705 --- /dev/null +++ b/lib/src/src/main/java/jline/CursorBuffer.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +/** + * A CursorBuffer is a holder for a {@link StringBuffer} that also contains the + * current cursor position. + * + * @author Marc Prud'hommeaux + */ +public class CursorBuffer { + public int cursor = 0; + + StringBuffer buffer = new StringBuffer(); + + private boolean overtyping = false; + + public int length() { + return buffer.length(); + } + + public char current() { + if (cursor <= 0) { + return 0; + } + + return buffer.charAt(cursor - 1); + } + + public boolean clearBuffer() { + if (buffer.length() == 0) { + return false; + } + + buffer.delete(0, buffer.length()); + cursor = 0; + return true; + } + + /** + * Write the specific character into the buffer, setting the cursor position + * ahead one. The text may overwrite or insert based on the current setting + * of isOvertyping(). + * + * @param c + * the character to insert + */ + public void write(final char c) { + buffer.insert(cursor++, c); + if (isOvertyping() && cursor < buffer.length()) { + buffer.deleteCharAt(cursor); + } + } + + /** + * Insert the specified {@link String} into the buffer, setting the cursor + * to the end of the insertion point. + * + * @param str + * the String to insert. Must not be null. + */ + public void write(final String str) { + if (buffer.length() == 0) { + buffer.append(str); + } else { + buffer.insert(cursor, str); + } + + cursor += str.length(); + + if (isOvertyping() && cursor < buffer.length()) { + buffer.delete(cursor, (cursor + str.length())); + } + } + + public String toString() { + return buffer.toString(); + } + + public boolean isOvertyping() { + return overtyping; + } + + public void setOvertyping(boolean b) { + overtyping = b; + } + + public StringBuffer getBuffer() { + return buffer; + } + + public void setBuffer(StringBuffer buffer) { + buffer.setLength(0); + buffer.append(this.buffer.toString()); + + this.buffer = buffer; + } + + +} diff --git a/lib/src/src/main/java/jline/FileNameCompletor.java b/lib/src/src/main/java/jline/FileNameCompletor.java new file mode 100644 index 0000000..19c4525 --- /dev/null +++ b/lib/src/src/main/java/jline/FileNameCompletor.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + * A file name completor takes the buffer and issues a list of + * potential completions. + * + *

+ * This completor tries to behave as similar as possible to + * bash's file name completion (using GNU readline) + * with the following exceptions: + * + *

    + *
  • Candidates that are directories will end with "/"
  • + *
  • Wildcard regular expressions are not evaluated or replaced
  • + *
  • The "~" character can be used to represent the user's home, + * but it cannot complete to other users' homes, since java does + * not provide any way of determining that easily
  • + *
+ * + *

TODO

+ *
    + *
  • Handle files with spaces in them
  • + *
  • Have an option for file type color highlighting
  • + *
+ * + * @author Marc Prud'hommeaux + */ +public class FileNameCompletor implements Completor { + public int complete(final String buf, final int cursor, + final List candidates) { + String buffer = (buf == null) ? "" : buf; + + String translated = buffer; + + // special character: ~ maps to the user's home directory + if (translated.startsWith("~" + File.separator)) { + translated = System.getProperty("user.home") + + translated.substring(1); + } else if (translated.startsWith("~")) { + translated = new File(System.getProperty("user.home")).getParentFile() + .getAbsolutePath(); + } else if (!(translated.startsWith(File.separator))) { + translated = new File("").getAbsolutePath() + File.separator + + translated; + } + + File f = new File(translated); + + final File dir; + + if (translated.endsWith(File.separator)) { + dir = f; + } else { + dir = f.getParentFile(); + } + + final File[] entries = (dir == null) ? new File[0] : dir.listFiles(); + + try { + return matchFiles(buffer, translated, entries, candidates); + } finally { + // we want to output a sorted list of files + sortFileNames(candidates); + } + } + + protected void sortFileNames(final List fileNames) { + Collections.sort(fileNames); + } + + /** + * Match the specified buffer to the array of entries + * and enter the matches into the list of candidates. This method + * can be overridden in a subclass that wants to do more + * sophisticated file name completion. + * + * @param buffer the untranslated buffer + * @param translated the buffer with common characters replaced + * @param entries the list of files to match + * @param candidates the list of candidates to populate + * + * @return the offset of the match + */ + public int matchFiles(String buffer, String translated, File[] entries, + List candidates) { + if (entries == null) { + return -1; + } + + int matches = 0; + + // first pass: just count the matches + for (int i = 0; i < entries.length; i++) { + if (entries[i].getAbsolutePath().startsWith(translated)) { + matches++; + } + } + + // green - executable + // blue - directory + // red - compressed + // cyan - symlink + for (int i = 0; i < entries.length; i++) { + if (entries[i].getAbsolutePath().startsWith(translated)) { + String name = + entries[i].getName() + + (((matches == 1) && entries[i].isDirectory()) + ? File.separator : " "); + + /* + if (entries [i].isDirectory ()) + { + name = new ANSIBuffer ().blue (name).toString (); + } + */ + candidates.add(name); + } + } + + final int index = buffer.lastIndexOf(File.separator); + + return index + File.separator.length(); + } +} diff --git a/lib/src/src/main/java/jline/History.java b/lib/src/src/main/java/jline/History.java new file mode 100644 index 0000000..aefadc3 --- /dev/null +++ b/lib/src/src/main/java/jline/History.java @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + * A command history buffer. + * + * @author Marc Prud'hommeaux + */ +public class History { + + private List history = new ArrayList(); + private PrintWriter output = null; + private int maxSize = 500; + private int currentIndex = 0; + + /** + * Construstor: initialize a blank history. + */ + public History() { + } + + /** + * Construstor: initialize History object the the specified {@link File} for + * storage. + */ + public History(final File historyFile) throws IOException { + setHistoryFile(historyFile); + } + + public void setHistoryFile(final File historyFile) throws IOException { + if (historyFile.isFile()) { + load(new FileInputStream(historyFile)); + } + + setOutput(new PrintWriter(new FileWriter(historyFile), true)); + flushBuffer(); + } + + /** + * Load the history buffer from the specified InputStream. + */ + public void load(final InputStream in) throws IOException { + load(new InputStreamReader(in)); + } + + /** + * Load the history buffer from the specified Reader. + */ + public void load(final Reader reader) throws IOException { + BufferedReader breader = new BufferedReader(reader); + List lines = new ArrayList(); + String line; + + while ((line = breader.readLine()) != null) { + lines.add(line); + } + + for (Iterator i = lines.iterator(); i.hasNext();) { + addToHistory((String) i.next()); + } + } + + public int size() { + return history.size(); + } + + /** + * Clear the history buffer + */ + public void clear() { + history.clear(); + currentIndex = 0; + } + + /** + * Add the specified buffer to the end of the history. The pointer is set to + * the end of the history buffer. + */ + public void addToHistory(final String buffer) { + // don't append duplicates to the end of the buffer + if ((history.size() != 0) && buffer.equals(history.get(history.size() - 1))) { + return; + } + + history.add(buffer); + + while (history.size() > getMaxSize()) { + history.remove(0); + } + + currentIndex = history.size(); + + if (getOutput() != null) { + getOutput().println(buffer); + getOutput().flush(); + } + } + + /** + * Flush the entire history buffer to the output PrintWriter. + */ + public void flushBuffer() throws IOException { + if (getOutput() != null) { + for (Iterator i = history.iterator(); i.hasNext(); getOutput().println((String) i.next())) { + ; + } + + getOutput().flush(); + } + } + + /** + * This moves the history to the last entry. This entry is one position + * before the moveToEnd() position. + * + * @return Returns false if there were no history entries or the history + * index was already at the last entry. + */ + public boolean moveToLastEntry() { + int lastEntry = history.size() - 1; + if (lastEntry >= 0 && lastEntry != currentIndex) { + currentIndex = history.size() - 1; + return true; + } + + return false; + } + + /** + * Move to the end of the history buffer. This will be a blank entry, after + * all of the other entries. + */ + public void moveToEnd() { + currentIndex = history.size(); + } + + /** + * Set the maximum size that the history buffer will store. + */ + public void setMaxSize(final int maxSize) { + this.maxSize = maxSize; + } + + /** + * Get the maximum size that the history buffer will store. + */ + public int getMaxSize() { + return this.maxSize; + } + + /** + * The output to which all history elements will be written (or null of + * history is not saved to a buffer). + */ + public void setOutput(final PrintWriter output) { + this.output = output; + } + + /** + * Returns the PrintWriter that is used to store history elements. + */ + public PrintWriter getOutput() { + return this.output; + } + + /** + * Returns the current history index. + */ + public int getCurrentIndex() { + return this.currentIndex; + } + + /** + * Return the content of the current buffer. + */ + public String current() { + if (currentIndex >= history.size()) { + return ""; + } + + return (String) history.get(currentIndex); + } + + /** + * Move the pointer to the previous element in the buffer. + * + * @return true if we successfully went to the previous element + */ + public boolean previous() { + if (currentIndex <= 0) { + return false; + } + + currentIndex--; + + return true; + } + + /** + * Move the pointer to the next element in the buffer. + * + * @return true if we successfully went to the next element + */ + public boolean next() { + if (currentIndex >= history.size()) { + return false; + } + + currentIndex++; + + return true; + } + + /** + * Returns an immutable list of the history buffer. + */ + public List getHistoryList() { + return Collections.unmodifiableList(history); + } + + /** + * Returns the standard {@link AbstractCollection#toString} representation + * of the history list. + */ + public String toString() { + return history.toString(); + } + + /** + * Moves the history index to the first entry. + * + * @return Return false if there are no entries in the history or if the + * history is already at the beginning. + */ + public boolean moveToFirstEntry() { + if (history.size() > 0 && currentIndex != 0) { + currentIndex = 0; + return true; + } + + return false; + } + + /** + * Search backward in history from a given position. + * + * @param searchTerm substring to search for. + * @param startIndex the index from which on to search + * @return index where this substring has been found, or -1 else. + */ + public int searchBackwards(String searchTerm, int startIndex) { + for (int i = startIndex - 1; i >= 0; i--) { + if (i >= size()) + continue; + if (getHistory(i).indexOf(searchTerm) != -1) { + return i; + } + } + return -1; + } + + /** + * Search backwards in history from the current position. + * + * @param searchTerm substring to search for. + * @return index where the substring has been found, or -1 else. + */ + public int searchBackwards(String s) { + return searchBackwards(s, getCurrentIndex()); + } + + /** + * Get the history string for the given index. + * + * @param index + * @return + */ + public String getHistory(int index) { + return (String) history.get(index); + } + + /** + * Set current index to given number. + * + * @param index + */ + public void setCurrentIndex(int index) { + if (index >= 0 && index < history.size()) + currentIndex = index; + } +} diff --git a/lib/src/src/main/java/jline/MultiCompletor.java b/lib/src/src/main/java/jline/MultiCompletor.java new file mode 100644 index 0000000..e3cd4e3 --- /dev/null +++ b/lib/src/src/main/java/jline/MultiCompletor.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.util.*; + +/** + *

+ * A completor that contains multiple embedded completors. This differs + * from the {@link ArgumentCompletor}, in that the nested completors + * are dispatched individually, rather than delimited by arguments. + *

+ * + * @author Marc Prud'hommeaux + */ +public class MultiCompletor implements Completor { + Completor[] completors = new Completor[0]; + + /** + * Construct a MultiCompletor with no embedded completors. + */ + public MultiCompletor() { + this(new Completor[0]); + } + + /** + * Construct a MultiCompletor with the specified list of + * {@link Completor} instances. + */ + public MultiCompletor(final List completors) { + this((Completor[]) completors.toArray(new Completor[completors.size()])); + } + + /** + * Construct a MultiCompletor with the specified + * {@link Completor} instances. + */ + public MultiCompletor(final Completor[] completors) { + this.completors = completors; + } + + public int complete(final String buffer, final int pos, final List cand) { + int[] positions = new int[completors.length]; + List[] copies = new List[completors.length]; + + for (int i = 0; i < completors.length; i++) { + // clone and save the candidate list + copies[i] = new LinkedList(cand); + positions[i] = completors[i].complete(buffer, pos, copies[i]); + } + + int maxposition = -1; + + for (int i = 0; i < positions.length; i++) { + maxposition = Math.max(maxposition, positions[i]); + } + + // now we have the max cursor value: build up all the + // candidate lists that have the same cursor value + for (int i = 0; i < copies.length; i++) { + if (positions[i] == maxposition) { + cand.addAll(copies[i]); + } + } + + return maxposition; + } + + public void setCompletors(final Completor[] completors) { + this.completors = completors; + } + + public Completor[] getCompletors() { + return this.completors; + } +} diff --git a/lib/src/src/main/java/jline/NullCompletor.java b/lib/src/src/main/java/jline/NullCompletor.java new file mode 100644 index 0000000..aa6cdf7 --- /dev/null +++ b/lib/src/src/main/java/jline/NullCompletor.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.util.*; + +/** + *

+ * A completor that does nothing. Useful as the last item in an + * {@link ArgumentCompletor}. + *

+ * + * @author Marc Prud'hommeaux + */ +public class NullCompletor implements Completor { + /** + * Returns -1 always, indicating that the the buffer is never + * handled. + */ + public int complete(final String buffer, int cursor, List candidates) { + return -1; + } +} diff --git a/lib/src/src/main/java/jline/SimpleCompletor.java b/lib/src/src/main/java/jline/SimpleCompletor.java new file mode 100644 index 0000000..2d488b6 --- /dev/null +++ b/lib/src/src/main/java/jline/SimpleCompletor.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + *

+ * A simple {@link Completor} implementation that handles a pre-defined + * list of completion words. + *

+ * + *

+ * Example usage: + *

+ *
+ *  myConsoleReader.addCompletor (new SimpleCompletor (new String [] { "now", "yesterday", "tomorrow" }));
+ *  
+ * + * @author Marc Prud'hommeaux + */ +public class SimpleCompletor implements Completor, Cloneable { + /** + * The list of candidates that will be completed. + */ + SortedSet candidates; + + /** + * A delimiter to use to qualify completions. + */ + String delimiter; + final SimpleCompletorFilter filter; + + /** + * Create a new SimpleCompletor with a single possible completion + * values. + */ + public SimpleCompletor(final String candidateString) { + this(new String[] { + candidateString + }); + } + + /** + * Create a new SimpleCompletor with a list of possible completion + * values. + */ + public SimpleCompletor(final String[] candidateStrings) { + this(candidateStrings, null); + } + + public SimpleCompletor(final String[] strings, + final SimpleCompletorFilter filter) { + this.filter = filter; + setCandidateStrings(strings); + } + + /** + * Complete candidates using the contents of the specified Reader. + */ + public SimpleCompletor(final Reader reader) throws IOException { + this(getStrings(reader)); + } + + /** + * Complete candidates using the whitespearated values in + * read from the specified Reader. + */ + public SimpleCompletor(final InputStream in) throws IOException { + this(getStrings(new InputStreamReader(in))); + } + + private static String[] getStrings(final Reader in) + throws IOException { + final Reader reader = + (in instanceof BufferedReader) ? in : new BufferedReader(in); + + List words = new LinkedList(); + String line; + + while ((line = ((BufferedReader) reader).readLine()) != null) { + for (StringTokenizer tok = new StringTokenizer(line); + tok.hasMoreTokens(); words.add(tok.nextToken())) { + ; + } + } + + return (String[]) words.toArray(new String[words.size()]); + } + + public int complete(final String buffer, final int cursor, final List clist) { + String start = (buffer == null) ? "" : buffer; + + SortedSet matches = candidates.tailSet(start); + + for (Iterator i = matches.iterator(); i.hasNext();) { + String can = (String) i.next(); + + if (!(can.startsWith(start))) { + break; + } + + if (delimiter != null) { + int index = can.indexOf(delimiter, cursor); + + if (index != -1) { + can = can.substring(0, index + 1); + } + } + + clist.add(can); + } + + if (clist.size() == 1) { + clist.set(0, ((String) clist.get(0)) + " "); + } + + // the index of the completion is always from the beginning of + // the buffer. + return (clist.size() == 0) ? (-1) : 0; + } + + public void setDelimiter(final String delimiter) { + this.delimiter = delimiter; + } + + public String getDelimiter() { + return this.delimiter; + } + + public void setCandidates(final SortedSet candidates) { + if (filter != null) { + TreeSet filtered = new TreeSet(); + + for (Iterator i = candidates.iterator(); i.hasNext();) { + String element = (String) i.next(); + element = filter.filter(element); + + if (element != null) { + filtered.add(element); + } + } + + this.candidates = filtered; + } else { + this.candidates = candidates; + } + } + + public SortedSet getCandidates() { + return Collections.unmodifiableSortedSet(this.candidates); + } + + public void setCandidateStrings(final String[] strings) { + setCandidates(new TreeSet(Arrays.asList(strings))); + } + + public void addCandidateString(final String candidateString) { + final String string = + (filter == null) ? candidateString : filter.filter(candidateString); + + if (string != null) { + candidates.add(string); + } + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + /** + * Filter for elements in the completor. + * + * @author Marc Prud'hommeaux + */ + public static interface SimpleCompletorFilter { + /** + * Filter the specified String. To not filter it, return the + * same String as the parameter. To exclude it, return null. + */ + public String filter(String element); + } + + public static class NoOpFilter implements SimpleCompletorFilter { + public String filter(final String element) { + return element; + } + } +} diff --git a/lib/src/src/main/java/jline/Terminal.java b/lib/src/src/main/java/jline/Terminal.java new file mode 100644 index 0000000..6eecbe0 --- /dev/null +++ b/lib/src/src/main/java/jline/Terminal.java @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; + +/** + * Representation of the input terminal for a platform. Handles + * any initialization that the platform may need to perform + * in order to allow the {@link ConsoleReader} to correctly handle + * input. + * + * @author Marc Prud'hommeaux + */ +public abstract class Terminal implements ConsoleOperations { + private static Terminal term; + + /** + * @see #setupTerminal + */ + public static Terminal getTerminal() { + return setupTerminal(); + } + + /** + * Reset the current terminal to null. + */ + public static void resetTerminal() { + term = null; + } + + /** + *

Configure and return the {@link Terminal} instance for the + * current platform. This will initialize any system settings + * that are required for the console to be able to handle + * input correctly, such as setting tabtop, buffered input, and + * character echo.

+ * + *

This class will use the Terminal implementation specified in the + * jline.terminal system property, or, if it is unset, by + * detecting the operating system from the os.name + * system property and instantiating either the + * {@link WindowsTerminalTest} or {@link UnixTerminal}. + * + * @see #initializeTerminal + */ + public static synchronized Terminal setupTerminal() { + if (term != null) { + return term; + } + + final Terminal t; + + String os = System.getProperty("os.name").toLowerCase(); + String termProp = System.getProperty("jline.terminal"); + + if ((termProp != null) && (termProp.length() > 0)) { + try { + t = (Terminal) Class.forName(termProp).newInstance(); + } catch (Exception e) { + throw (IllegalArgumentException) new IllegalArgumentException(e + .toString()).fillInStackTrace(); + } + } else if (os.indexOf("windows") != -1) { + t = new WindowsTerminal(); + } else { + t = new UnixTerminal(); + } + + try { + t.initializeTerminal(); + } catch (Exception e) { + e.printStackTrace(); + + return term = new UnsupportedTerminal(); + } + + return term = t; + } + + /** + * Returns true if the current console supports ANSI + * codes. + */ + public boolean isANSISupported() { + return true; + } + + /** + * Read a single character from the input stream. This might + * enable a terminal implementation to better handle nuances of + * the console. + */ + public int readCharacter(final InputStream in) throws IOException { + return in.read(); + } + + /** + * Reads a virtual key from the console. Typically, this will + * just be the raw character that was entered, but in some cases, + * multiple input keys will need to be translated into a single + * virtual key. + * + * @param in the InputStream to read from + * @return the virtual key (e.g., {@link ConsoleOperations#VK_UP}) + */ + public int readVirtualKey(InputStream in) throws IOException { + return readCharacter(in); + } + + /** + * Initialize any system settings + * that are required for the console to be able to handle + * input correctly, such as setting tabtop, buffered input, and + * character echo. + */ + public abstract void initializeTerminal() throws Exception; + + /** + * Returns the current width of the terminal (in characters) + */ + public abstract int getTerminalWidth(); + + /** + * Returns the current height of the terminal (in lines) + */ + public abstract int getTerminalHeight(); + + /** + * Returns true if this terminal is capable of initializing the + * terminal to use jline. + */ + public abstract boolean isSupported(); + + /** + * Returns true if the terminal will echo all characters type. + */ + public abstract boolean getEcho(); + + /** + * Invokes before the console reads a line with the prompt and mask. + */ + public void beforeReadLine(ConsoleReader reader, String prompt, + Character mask) { + } + + /** + * Invokes after the console reads a line with the prompt and mask. + */ + public void afterReadLine(ConsoleReader reader, String prompt, + Character mask) { + } + + /** + * Returns false if character echoing is disabled. + */ + public abstract boolean isEchoEnabled(); + + + /** + * Enable character echoing. This can be used to re-enable character + * if the ConsoleReader is no longer being used. + */ + public abstract void enableEcho(); + + + /** + * Disable character echoing. This can be used to manually re-enable + * character if the ConsoleReader has been disabled. + */ + public abstract void disableEcho(); + + public InputStream getDefaultBindings() { + // Mac bindings are slightly different from Unix/Linux. + // For instance, the Delete key behavior is different between them. + return Terminal.class.getResourceAsStream( + System.getProperty("os.name").toLowerCase().startsWith("mac") ? + "keybindings-mac.properties" : "keybindings.properties"); + } +} diff --git a/lib/src/src/main/java/jline/UnixTerminal.java b/lib/src/src/main/java/jline/UnixTerminal.java new file mode 100644 index 0000000..83f5194 --- /dev/null +++ b/lib/src/src/main/java/jline/UnixTerminal.java @@ -0,0 +1,433 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; +import java.util.*; + +/** + *

+ * Terminal that is used for unix platforms. Terminal initialization + * is handled by issuing the stty command against the + * /dev/tty file to disable character echoing and enable + * character input. All known unix systems (including + * Linux and Macintosh OS X) support the stty), so this + * implementation should work for an reasonable POSIX system. + *

+ * + * @author Marc Prud'hommeaux + * @author Updates Dale Kemp 2005-12-03 + */ +public class UnixTerminal extends Terminal { + public static final short ARROW_START = 27; + public static final short ARROW_PREFIX = 91; + public static final short ARROW_LEFT = 68; + public static final short ARROW_RIGHT = 67; + public static final short ARROW_UP = 65; + public static final short ARROW_DOWN = 66; + public static final short O_PREFIX = 79; + public static final short HOME_CODE = 72; + public static final short END_CODE = 70; + + public static final short DEL_THIRD = 51; + public static final short DEL_SECOND = 126; + + private boolean echoEnabled; + private String ttyConfig; + private String ttyProps; + private long ttyPropsLastFetched; + private boolean backspaceDeleteSwitched = false; + private static String sttyCommand = + System.getProperty("jline.sttyCommand", "stty"); + + + String encoding = System.getProperty("input.encoding", "UTF-8"); + ReplayPrefixOneCharInputStream replayStream = new ReplayPrefixOneCharInputStream(encoding); + InputStreamReader replayReader; + + public UnixTerminal() { + try { + replayReader = new InputStreamReader(replayStream, encoding); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + protected void checkBackspace(){ + String[] ttyConfigSplit = ttyConfig.split(":|="); + backspaceDeleteSwitched = ttyConfigSplit.length >= 7 && "7f".equals(ttyConfigSplit[6]); + } + + /** + * Remove line-buffered input by invoking "stty -icanon min 1" + * against the current terminal. + */ + public void initializeTerminal() throws IOException, InterruptedException { + // save the initial tty configuration + ttyConfig = stty("-g"); + + // sanity check + if ((ttyConfig.length() == 0) + || ((ttyConfig.indexOf("=") == -1) + && (ttyConfig.indexOf(":") == -1))) { + throw new IOException("Unrecognized stty code: " + ttyConfig); + } + + checkBackspace(); + + // set the console to be character-buffered instead of line-buffered + stty("-icanon min 1"); + + // disable character echoing + stty("-echo"); + echoEnabled = false; + + // at exit, restore the original tty configuration (for JDK 1.3+) + try { + Runtime.getRuntime().addShutdownHook(new Thread() { + public void start() { + try { + restoreTerminal(); + } catch (Exception e) { + consumeException(e); + } + } + }); + } catch (AbstractMethodError ame) { + // JDK 1.3+ only method. Bummer. + consumeException(ame); + } + } + + /** + * Restore the original terminal configuration, which can be used when + * shutting down the console reader. The ConsoleReader cannot be + * used after calling this method. + */ + public void restoreTerminal() throws Exception { + if (ttyConfig != null) { + stty(ttyConfig); + ttyConfig = null; + } + resetTerminal(); + } + + + + public int readVirtualKey(InputStream in) throws IOException { + int c = readCharacter(in); + + if (backspaceDeleteSwitched) + if (c == DELETE) + c = BACKSPACE; + else if (c == BACKSPACE) + c = DELETE; + + // in Unix terminals, arrow keys are represented by + // a sequence of 3 characters. E.g., the up arrow + // key yields 27, 91, 68 + if (c == ARROW_START && in.available() > 0) { + // Escape key is also 27, so we use InputStream.available() + // to distinguish those. If 27 represents an arrow, there + // should be two more chars immediately available. + while (c == ARROW_START) { + c = readCharacter(in); + } + if (c == ARROW_PREFIX || c == O_PREFIX) { + c = readCharacter(in); + if (c == ARROW_UP) { + return CTRL_P; + } else if (c == ARROW_DOWN) { + return CTRL_N; + } else if (c == ARROW_LEFT) { + return CTRL_B; + } else if (c == ARROW_RIGHT) { + return CTRL_F; + } else if (c == HOME_CODE) { + return CTRL_A; + } else if (c == END_CODE) { + return CTRL_E; + } else if (c == DEL_THIRD) { + c = readCharacter(in); // read 4th + return DELETE; + } + } + } + // handle unicode characters, thanks for a patch from amyi@inf.ed.ac.uk + if (c > 128) { + // handle unicode characters longer than 2 bytes, + // thanks to Marc.Herbert@continuent.com + replayStream.setInput(c, in); +// replayReader = new InputStreamReader(replayStream, encoding); + c = replayReader.read(); + + } + + return c; + } + + /** + * No-op for exceptions we want to silently consume. + */ + private void consumeException(Throwable e) { + } + + public boolean isSupported() { + return true; + } + + public boolean getEcho() { + return false; + } + + /** + * Returns the value of "stty size" width param. + * + * Note: this method caches the value from the + * first time it is called in order to increase speed, which means + * that changing to size of the terminal will not be reflected + * in the console. + */ + public int getTerminalWidth() { + int val = -1; + + try { + val = getTerminalProperty("columns"); + } catch (Exception e) { + } + + if (val == -1) { + val = 80; + } + + return val; + } + + /** + * Returns the value of "stty size" height param. + * + * Note: this method caches the value from the + * first time it is called in order to increase speed, which means + * that changing to size of the terminal will not be reflected + * in the console. + */ + public int getTerminalHeight() { + int val = -1; + + try { + val = getTerminalProperty("rows"); + } catch (Exception e) { + } + + if (val == -1) { + val = 24; + } + + return val; + } + + private int getTerminalProperty(String prop) + throws IOException, InterruptedException { + // tty properties are cached so we don't have to worry too much about getting term widht/height + if (ttyProps == null || System.currentTimeMillis() - ttyPropsLastFetched > 1000) { + ttyProps = stty("-a"); + ttyPropsLastFetched = System.currentTimeMillis(); + } + // need to be able handle both output formats: + // speed 9600 baud; 24 rows; 140 columns; + // and: + // speed 38400 baud; rows = 49; columns = 111; ypixels = 0; xpixels = 0; + for (StringTokenizer tok = new StringTokenizer(ttyProps, ";\n"); + tok.hasMoreTokens();) { + String str = tok.nextToken().trim(); + + if (str.startsWith(prop)) { + int index = str.lastIndexOf(" "); + + return Integer.parseInt(str.substring(index).trim()); + } else if (str.endsWith(prop)) { + int index = str.indexOf(" "); + + return Integer.parseInt(str.substring(0, index).trim()); + } + } + + return -1; + } + + /** + * Execute the stty command with the specified arguments + * against the current active terminal. + */ + protected static String stty(final String args) + throws IOException, InterruptedException { + return exec("stty " + args + " < /dev/tty").trim(); + } + + /** + * Execute the specified command and return the output + * (both stdout and stderr). + */ + private static String exec(final String cmd) + throws IOException, InterruptedException { + return exec(new String[] { + "sh", + "-c", + cmd + }); + } + + /** + * Execute the specified command and return the output + * (both stdout and stderr). + */ + private static String exec(final String[] cmd) + throws IOException, InterruptedException { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + + Process p = Runtime.getRuntime().exec(cmd); + int c; + InputStream in = null; + InputStream err = null; + OutputStream out = null; + + try { + in = p.getInputStream(); + + while ((c = in.read()) != -1) { + bout.write(c); + } + + err = p.getErrorStream(); + + while ((c = err.read()) != -1) { + bout.write(c); + } + + out = p.getOutputStream(); + + p.waitFor(); + } finally { + try {in.close();} catch (Exception e) {} + try {err.close();} catch (Exception e) {} + try {out.close();} catch (Exception e) {} + } + + String result = new String(bout.toByteArray()); + + return result; + } + + /** + * The command to use to set the terminal options. Defaults + * to "stty", or the value of the system property "jline.sttyCommand". + */ + public static void setSttyCommand(String cmd) { + sttyCommand = cmd; + } + + /** + * The command to use to set the terminal options. Defaults + * to "stty", or the value of the system property "jline.sttyCommand". + */ + public static String getSttyCommand() { + return sttyCommand; + } + + public synchronized boolean isEchoEnabled() { + return echoEnabled; + } + + + public synchronized void enableEcho() { + try { + stty("echo"); + echoEnabled = true; + } catch (Exception e) { + consumeException(e); + } + } + + public synchronized void disableEcho() { + try { + stty("-echo"); + echoEnabled = false; + } catch (Exception e) { + consumeException(e); + } + } + + /** + * This is awkward and inefficient, but probably the minimal way to add + * UTF-8 support to JLine + * + * @author Marc Herbert + */ + static class ReplayPrefixOneCharInputStream extends InputStream { + byte firstByte; + int byteLength; + InputStream wrappedStream; + int byteRead; + + final String encoding; + + public ReplayPrefixOneCharInputStream(String encoding) { + this.encoding = encoding; + } + + public void setInput(int recorded, InputStream wrapped) throws IOException { + this.byteRead = 0; + this.firstByte = (byte) recorded; + this.wrappedStream = wrapped; + + byteLength = 1; + if (encoding.equalsIgnoreCase("UTF-8")) + setInputUTF8(recorded, wrapped); + else if (encoding.equalsIgnoreCase("UTF-16")) + byteLength = 2; + else if (encoding.equalsIgnoreCase("UTF-32")) + byteLength = 4; + } + + + public void setInputUTF8(int recorded, InputStream wrapped) throws IOException { + // 110yyyyy 10zzzzzz + if ((firstByte & (byte) 0xE0) == (byte) 0xC0) + this.byteLength = 2; + // 1110xxxx 10yyyyyy 10zzzzzz + else if ((firstByte & (byte) 0xF0) == (byte) 0xE0) + this.byteLength = 3; + // 11110www 10xxxxxx 10yyyyyy 10zzzzzz + else if ((firstByte & (byte) 0xF8) == (byte) 0xF0) + this.byteLength = 4; + else + throw new IOException("invalid UTF-8 first byte: " + firstByte); + } + + public int read() throws IOException { + if (available() == 0) + return -1; + + byteRead++; + + if (byteRead == 1) + return firstByte; + + return wrappedStream.read(); + } + + /** + * InputStreamReader is greedy and will try to read bytes in advance. We + * do NOT want this to happen since we use a temporary/"losing bytes" + * InputStreamReader above, that's why we hide the real + * wrappedStream.available() here. + */ + public int available() { + return byteLength - byteRead; + } + } +} diff --git a/lib/src/src/main/java/jline/UnsupportedTerminal.java b/lib/src/src/main/java/jline/UnsupportedTerminal.java new file mode 100644 index 0000000..2d87a18 --- /dev/null +++ b/lib/src/src/main/java/jline/UnsupportedTerminal.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.IOException; + +/** + * A no-op unsupported terminal. + * + * @author Marc Prud'hommeaux + */ +public class UnsupportedTerminal extends Terminal { + private Thread maskThread = null; + + public void initializeTerminal() { + // nothing we need to do (or can do) for windows. + } + + public boolean getEcho() { + return true; + } + + + public boolean isEchoEnabled() { + return true; + } + + + public void enableEcho() { + } + + + public void disableEcho() { + } + + + /** + * Always returng 80, since we can't access this info on Windows. + */ + public int getTerminalWidth() { + return 80; + } + + /** + * Always returng 24, since we can't access this info on Windows. + */ + public int getTerminalHeight() { + return 80; + } + + public boolean isSupported() { + return false; + } + + public void beforeReadLine(final ConsoleReader reader, final String prompt, + final Character mask) { + if ((mask != null) && (maskThread == null)) { + final String fullPrompt = "\r" + prompt + + " " + + " " + + " " + + "\r" + prompt; + + maskThread = new Thread("JLine Mask Thread") { + public void run() { + while (!interrupted()) { + try { + reader.out.write(fullPrompt); + reader.out.flush(); + sleep(3); + } catch (IOException ioe) { + return; + } catch (InterruptedException ie) { + return; + } + } + } + }; + + maskThread.setPriority(Thread.MAX_PRIORITY); + maskThread.setDaemon(true); + maskThread.start(); + } + } + + public void afterReadLine(final ConsoleReader reader, final String prompt, + final Character mask) { + if ((maskThread != null) && maskThread.isAlive()) { + maskThread.interrupt(); + } + + maskThread = null; + } +} diff --git a/lib/src/src/main/java/jline/WindowsTerminal.java b/lib/src/src/main/java/jline/WindowsTerminal.java new file mode 100644 index 0000000..d036088 --- /dev/null +++ b/lib/src/src/main/java/jline/WindowsTerminal.java @@ -0,0 +1,520 @@ +/* + * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + */ +package jline; + +import java.io.*; + +import jline.UnixTerminal.ReplayPrefixOneCharInputStream; + +/** + *

+ * Terminal implementation for Microsoft Windows. Terminal initialization in + * {@link #initializeTerminal} is accomplished by extracting the + * jline_version.dll, saving it to the system temporary + * directoy (determined by the setting of the java.io.tmpdir System + * property), loading the library, and then calling the Win32 APIs SetConsoleMode and + * GetConsoleMode to + * disable character echoing. + *

+ * + *

+ * By default, the {@link #readCharacter} method will attempt to test to see if + * the specified {@link InputStream} is {@link System#in} or a wrapper around + * {@link FileDescriptor#in}, and if so, will bypass the character reading to + * directly invoke the readc() method in the JNI library. This is so the class + * can read special keys (like arrow keys) which are otherwise inaccessible via + * the {@link System#in} stream. Using JNI reading can be bypassed by setting + * the jline.WindowsTerminal.directConsole system property + * to false. + *

+ * + * @author Marc Prud'hommeaux + */ +public class WindowsTerminal extends Terminal { + // constants copied from wincon.h + + /** + * The ReadFile or ReadConsole function returns only when a carriage return + * character is read. If this mode is disable, the functions return when one + * or more characters are available. + */ + private static final int ENABLE_LINE_INPUT = 2; + + /** + * Characters read by the ReadFile or ReadConsole function are written to + * the active screen buffer as they are read. This mode can be used only if + * the ENABLE_LINE_INPUT mode is also enabled. + */ + private static final int ENABLE_ECHO_INPUT = 4; + + /** + * CTRL+C is processed by the system and is not placed in the input buffer. + * If the input buffer is being read by ReadFile or ReadConsole, other + * control keys are processed by the system and are not returned in the + * ReadFile or ReadConsole buffer. If the ENABLE_LINE_INPUT mode is also + * enabled, backspace, carriage return, and linefeed characters are handled + * by the system. + */ + private static final int ENABLE_PROCESSED_INPUT = 1; + + /** + * User interactions that change the size of the console screen buffer are + * reported in the console's input buffee. Information about these events + * can be read from the input buffer by applications using + * theReadConsoleInput function, but not by those using ReadFile + * orReadConsole. + */ + private static final int ENABLE_WINDOW_INPUT = 8; + + /** + * If the mouse pointer is within the borders of the console window and the + * window has the keyboard focus, mouse events generated by mouse movement + * and button presses are placed in the input buffer. These events are + * discarded by ReadFile or ReadConsole, even when this mode is enabled. + */ + private static final int ENABLE_MOUSE_INPUT = 16; + + /** + * When enabled, text entered in a console window will be inserted at the + * current cursor location and all text following that location will not be + * overwritten. When disabled, all following text will be overwritten. An OR + * operation must be performed with this flag and the ENABLE_EXTENDED_FLAGS + * flag to enable this functionality. + */ + private static final int ENABLE_PROCESSED_OUTPUT = 1; + + /** + * This flag enables the user to use the mouse to select and edit text. To + * enable this option, use the OR to combine this flag with + * ENABLE_EXTENDED_FLAGS. + */ + private static final int ENABLE_WRAP_AT_EOL_OUTPUT = 2; + + /** + * On windows terminals, this character indicates that a 'special' key has + * been pressed. This means that a key such as an arrow key, or delete, or + * home, etc. will be indicated by the next character. + */ + public static final int SPECIAL_KEY_INDICATOR = 224; + + /** + * On windows terminals, this character indicates that a special key on the + * number pad has been pressed. + */ + public static final int NUMPAD_KEY_INDICATOR = 0; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR, + * this character indicates an left arrow key press. + */ + public static final int LEFT_ARROW_KEY = 75; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates an + * right arrow key press. + */ + public static final int RIGHT_ARROW_KEY = 77; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates an up + * arrow key press. + */ + public static final int UP_ARROW_KEY = 72; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates an + * down arrow key press. + */ + public static final int DOWN_ARROW_KEY = 80; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates that + * the delete key was pressed. + */ + public static final int DELETE_KEY = 83; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates that + * the home key was pressed. + */ + public static final int HOME_KEY = 71; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates that + * the end key was pressed. + */ + public static final char END_KEY = 79; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates that + * the page up key was pressed. + */ + public static final char PAGE_UP_KEY = 73; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates that + * the page down key was pressed. + */ + public static final char PAGE_DOWN_KEY = 81; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR + * this character indicates that + * the insert key was pressed. + */ + public static final char INSERT_KEY = 82; + + /** + * When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR, + * this character indicates that the escape key was pressed. + */ + public static final char ESCAPE_KEY = 0; + + private Boolean directConsole; + + private boolean echoEnabled; + + String encoding = System.getProperty("jline.WindowsTerminal.input.encoding", System.getProperty("file.encoding")); + ReplayPrefixOneCharInputStream replayStream = new ReplayPrefixOneCharInputStream(encoding); + InputStreamReader replayReader; + + public WindowsTerminal() { + String dir = System.getProperty("jline.WindowsTerminal.directConsole"); + + if ("true".equals(dir)) { + directConsole = Boolean.TRUE; + } else if ("false".equals(dir)) { + directConsole = Boolean.FALSE; + } + + try { + replayReader = new InputStreamReader(replayStream, encoding); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + private native int getConsoleMode(); + + private native void setConsoleMode(final int mode); + + private native int readByte(); + + private native int getWindowsTerminalWidth(); + + private native int getWindowsTerminalHeight(); + + public int readCharacter(final InputStream in) throws IOException { + // if we can detect that we are directly wrapping the system + // input, then bypass the input stream and read directly (which + // allows us to access otherwise unreadable strokes, such as + // the arrow keys) + if (directConsole == Boolean.FALSE) { + return super.readCharacter(in); + } else if ((directConsole == Boolean.TRUE) + || ((in == System.in) || (in instanceof FileInputStream + && (((FileInputStream) in).getFD() == FileDescriptor.in)))) { + return readByte(); + } else { + return super.readCharacter(in); + } + } + + public void initializeTerminal() throws Exception { + loadLibrary("jline"); + + final int originalMode = getConsoleMode(); + + setConsoleMode(originalMode & ~ENABLE_ECHO_INPUT); + + // set the console to raw mode + int newMode = originalMode + & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT + | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT); + echoEnabled = false; + setConsoleMode(newMode); + + // at exit, restore the original tty configuration (for JDK 1.3+) + try { + Runtime.getRuntime().addShutdownHook(new Thread() { + public void start() { + // restore the old console mode + setConsoleMode(originalMode); + } + }); + } catch (AbstractMethodError ame) { + // JDK 1.3+ only method. Bummer. + consumeException(ame); + } + } + + private void loadLibrary(final String name) throws IOException { + // store the DLL in the temporary directory for the System + String version = WindowsTerminal.class.getPackage().getImplementationVersion(); + + if (version == null) { + version = ""; + } + + version = version.replace('.', '_'); + + File f = new File(System.getProperty("java.io.tmpdir"), name + "_" + + version + ".dll"); + boolean exists = f.isFile(); // check if it already exists + + // extract the embedded jline.dll file from the jar and save + // it to the current directory + int bits = 32; + + // check for 64-bit systems and use to appropriate DLL + if (System.getProperty("os.arch").indexOf("64") != -1) + bits = 64; + + InputStream in = new BufferedInputStream(WindowsTerminal.class.getResourceAsStream(name + bits + ".dll")); + + OutputStream fout = null; + try { + fout = new BufferedOutputStream( + new FileOutputStream(f)); + byte[] bytes = new byte[1024 * 10]; + + for (int n = 0; n != -1; n = in.read(bytes)) { + fout.write(bytes, 0, n); + } + + } catch (IOException ioe) { + // We might get an IOException trying to overwrite an existing + // jline.dll file if there is another process using the DLL. + // If this happens, ignore errors. + if (!exists) { + throw ioe; + } + } finally { + if (fout != null) { + try { + fout.close(); + } catch (IOException ioe) { + // ignore + } + } + } + + // try to clean up the DLL after the JVM exits + f.deleteOnExit(); + + // now actually load the DLL + System.load(f.getAbsolutePath()); + } + + public int readVirtualKey(InputStream in) throws IOException { + int indicator = readCharacter(in); + + // in Windows terminals, arrow keys are represented by + // a sequence of 2 characters. E.g., the up arrow + // key yields 224, 72 + if (indicator == SPECIAL_KEY_INDICATOR + || indicator == NUMPAD_KEY_INDICATOR) { + int key = readCharacter(in); + + switch (key) { + case UP_ARROW_KEY: + return CTRL_P; // translate UP -> CTRL-P + case LEFT_ARROW_KEY: + return CTRL_B; // translate LEFT -> CTRL-B + case RIGHT_ARROW_KEY: + return CTRL_F; // translate RIGHT -> CTRL-F + case DOWN_ARROW_KEY: + return CTRL_N; // translate DOWN -> CTRL-N + case DELETE_KEY: + return CTRL_QM; // translate DELETE -> CTRL-? + case HOME_KEY: + return CTRL_A; + case END_KEY: + return CTRL_E; + case PAGE_UP_KEY: + return CTRL_K; + case PAGE_DOWN_KEY: + return CTRL_L; + case ESCAPE_KEY: + return CTRL_OB; // translate ESCAPE -> CTRL-[ + case INSERT_KEY: + return CTRL_C; + default: + return 0; + } + } else if (indicator > 128) { + // handle unicode characters longer than 2 bytes, + // thanks to Marc.Herbert@continuent.com + replayStream.setInput(indicator, in); + // replayReader = new InputStreamReader(replayStream, encoding); + indicator = replayReader.read(); + + } + + return indicator; + + } + + public boolean isSupported() { + return true; + } + + /** + * Windows doesn't support ANSI codes by default; disable them. + */ + public boolean isANSISupported() { + return false; + } + + public boolean getEcho() { + return false; + } + + /** + * Unsupported; return the default. + * + * @see Terminal#getTerminalWidth + */ + public int getTerminalWidth() { + return getWindowsTerminalWidth(); + } + + /** + * Unsupported; return the default. + * + * @see Terminal#getTerminalHeight + */ + public int getTerminalHeight() { + return getWindowsTerminalHeight(); + } + + /** + * No-op for exceptions we want to silently consume. + */ + private void consumeException(final Throwable e) { + } + + /** + * Whether or not to allow the use of the JNI console interaction. + */ + public void setDirectConsole(Boolean directConsole) { + this.directConsole = directConsole; + } + + /** + * Whether or not to allow the use of the JNI console interaction. + */ + public Boolean getDirectConsole() { + return this.directConsole; + } + + public synchronized boolean isEchoEnabled() { + return echoEnabled; + } + + public synchronized void enableEcho() { + // Must set these four modes at the same time to make it work fine. + setConsoleMode(getConsoleMode() | ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT + | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT); + echoEnabled = true; + } + + public synchronized void disableEcho() { + // Must set these four modes at the same time to make it work fine. + setConsoleMode(getConsoleMode() + & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT + | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT)); + echoEnabled = true; + } + + public InputStream getDefaultBindings() { + return WindowsTerminal.class.getResourceAsStream("windowsbindings.properties"); + } + + /** + * This is awkward and inefficient, but probably the minimal way to add + * UTF-8 support to JLine + * + * @author Marc Herbert + */ + static class ReplayPrefixOneCharInputStream extends InputStream { + byte firstByte; + int byteLength; + InputStream wrappedStream; + int byteRead; + + final String encoding; + + public ReplayPrefixOneCharInputStream(String encoding) { + this.encoding = encoding; + } + + public void setInput(int recorded, InputStream wrapped) throws IOException { + this.byteRead = 0; + this.firstByte = (byte) recorded; + this.wrappedStream = wrapped; + + byteLength = 1; + if (encoding.equalsIgnoreCase("UTF-8")) + setInputUTF8(recorded, wrapped); + else if (encoding.equalsIgnoreCase("UTF-16")) + byteLength = 2; + else if (encoding.equalsIgnoreCase("UTF-32")) + byteLength = 4; + } + + + public void setInputUTF8(int recorded, InputStream wrapped) throws IOException { + // 110yyyyy 10zzzzzz + if ((firstByte & (byte) 0xE0) == (byte) 0xC0) + this.byteLength = 2; + // 1110xxxx 10yyyyyy 10zzzzzz + else if ((firstByte & (byte) 0xF0) == (byte) 0xE0) + this.byteLength = 3; + // 11110www 10xxxxxx 10yyyyyy 10zzzzzz + else if ((firstByte & (byte) 0xF8) == (byte) 0xF0) + this.byteLength = 4; + else + throw new IOException("invalid UTF-8 first byte: " + firstByte); + } + + public int read() throws IOException { + if (available() == 0) + return -1; + + byteRead++; + + if (byteRead == 1) + return firstByte; + + return wrappedStream.read(); + } + + /** + * InputStreamReader is greedy and will try to read bytes in advance. We + * do NOT want this to happen since we use a temporary/"losing bytes" + * InputStreamReader above, that's why we hide the real + * wrappedStream.available() here. + */ + public int available() { + return byteLength - byteRead; + } + } + +} diff --git a/lib/src/src/main/java/jline/package.html b/lib/src/src/main/java/jline/package.html new file mode 100644 index 0000000..c807431 --- /dev/null +++ b/lib/src/src/main/java/jline/package.html @@ -0,0 +1,9 @@ + +

+The core JLine API. The central class is +jline.ConsoleReader}, which +is a reader for obtaining input from an arbitrary +InputStream (usually System.in). +

+ + diff --git a/lib/src/src/main/native/Makefile b/lib/src/src/main/native/Makefile new file mode 100644 index 0000000..c620814 --- /dev/null +++ b/lib/src/src/main/native/Makefile @@ -0,0 +1,8 @@ + + +#export PATH=${PATH}:/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3 +JDK='/C/Program Files/Java/jdk1.5.0/' + +native: + #gcc -I'C:/Program Files/Java/'*'/include/' -I'C:/Program Files/Java/'*'/include//win32/' -mno-cygwin -Wl,--add-stdcall-alias -shared -o jline.dll jline_WindowsTerminal.c + gcc -L /usr/lib/mingw/ -I${JDK}/include -I${JDK}/include/win32 -mwindows -mno-cygwin -Wl,--add-stdcall-alias -shared -o jline.dll jline_WindowsTerminal.c diff --git a/lib/src/src/main/native/jline_WindowsTerminal.c b/lib/src/src/main/native/jline_WindowsTerminal.c new file mode 100644 index 0000000..4e78a66 --- /dev/null +++ b/lib/src/src/main/native/jline_WindowsTerminal.c @@ -0,0 +1,57 @@ +#include "jline_WindowsTerminal.h" +#include + +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_getConsoleMode + (JNIEnv *env, jobject ob) +{ + DWORD mode; + HANDLE hConsole = GetStdHandle (STD_INPUT_HANDLE); + + if (hConsole == INVALID_HANDLE_VALUE) + return -1; + + if (!GetConsoleMode (hConsole, &mode)) + return -1; + + // CloseHandle (hConsole); + + // printf ("JNI get mode=%d\n", mode); + return mode; +} + +JNIEXPORT void JNICALL Java_jline_WindowsTerminal_setConsoleMode + (JNIEnv *env, jobject ob, jint mode) +{ + DWORD m = (DWORD)mode; + HANDLE hConsole = GetStdHandle (STD_INPUT_HANDLE); + + if (hConsole == INVALID_HANDLE_VALUE) + return; + + // printf ("JNI set mode=%d\n", m); + SetConsoleMode (hConsole, m); + // CloseHandle (hConsole); +} + +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_readByte (JNIEnv * env, jclass class) +{ + return getch (); +} + +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_getWindowsTerminalWidth (JNIEnv * env, jclass class) +{ + HANDLE inputHandle = GetStdHandle (STD_INPUT_HANDLE); + HANDLE outputHandle = GetStdHandle (STD_OUTPUT_HANDLE); + PCONSOLE_SCREEN_BUFFER_INFO info = malloc (sizeof (CONSOLE_SCREEN_BUFFER_INFO)); + GetConsoleScreenBufferInfo (outputHandle, info); + return info->srWindow.Right - info->srWindow.Left+1; +} + +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_getWindowsTerminalHeight (JNIEnv * env, jclass class) +{ + HANDLE inputHandle = GetStdHandle (STD_INPUT_HANDLE); + HANDLE outputHandle = GetStdHandle (STD_OUTPUT_HANDLE); + PCONSOLE_SCREEN_BUFFER_INFO info = malloc (sizeof (CONSOLE_SCREEN_BUFFER_INFO)); + GetConsoleScreenBufferInfo (outputHandle, info); + return info->srWindow.Bottom - info->srWindow.Top+1; +} diff --git a/lib/src/src/main/native/jline_WindowsTerminal.h b/lib/src/src/main/native/jline_WindowsTerminal.h new file mode 100644 index 0000000..5078b93 --- /dev/null +++ b/lib/src/src/main/native/jline_WindowsTerminal.h @@ -0,0 +1,68 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class jline_WindowsTerminal */ + +#ifndef _Included_jline_WindowsTerminal +#define _Included_jline_WindowsTerminal +#ifdef __cplusplus +extern "C" { +#endif +/* Inaccessible static: term */ +#undef jline_WindowsTerminal_ENABLE_LINE_INPUT +#define jline_WindowsTerminal_ENABLE_LINE_INPUT 2L +#undef jline_WindowsTerminal_ENABLE_ECHO_INPUT +#define jline_WindowsTerminal_ENABLE_ECHO_INPUT 4L +#undef jline_WindowsTerminal_ENABLE_PROCESSED_INPUT +#define jline_WindowsTerminal_ENABLE_PROCESSED_INPUT 1L +#undef jline_WindowsTerminal_ENABLE_WINDOW_INPUT +#define jline_WindowsTerminal_ENABLE_WINDOW_INPUT 8L +#undef jline_WindowsTerminal_ENABLE_MOUSE_INPUT +#define jline_WindowsTerminal_ENABLE_MOUSE_INPUT 16L +#undef jline_WindowsTerminal_ENABLE_PROCESSED_OUTPUT +#define jline_WindowsTerminal_ENABLE_PROCESSED_OUTPUT 1L +#undef jline_WindowsTerminal_ENABLE_WRAP_AT_EOL_OUTPUT +#define jline_WindowsTerminal_ENABLE_WRAP_AT_EOL_OUTPUT 2L +/* + * Class: jline_WindowsTerminal + * Method: getConsoleMode + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_getConsoleMode + (JNIEnv *, jobject); + +/* + * Class: jline_WindowsTerminal + * Method: setConsoleMode + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_jline_WindowsTerminal_setConsoleMode + (JNIEnv *, jobject, jint); + +/* + * Class: jline_WindowsTerminal + * Method: readByte + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_readByte + (JNIEnv *, jobject); + +/* + * Class: jline_WindowsTerminal + * Method: getWindowsTerminalWidth + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_getWindowsTerminalWidth + (JNIEnv *, jobject); + +/* + * Class: jline_WindowsTerminal + * Method: getWindowsTerminalHeight + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_jline_WindowsTerminal_getWindowsTerminalHeight + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/src/src/main/resources/jline/CandidateListCompletionHandler.properties b/lib/src/src/main/resources/jline/CandidateListCompletionHandler.properties new file mode 100644 index 0000000..18ee221 --- /dev/null +++ b/lib/src/src/main/resources/jline/CandidateListCompletionHandler.properties @@ -0,0 +1,5 @@ +display-candidates: Display all {0} possibilities? (y or n) +display-candidates-yes: y +display-candidates-no: n +display-more: --More-- + diff --git a/lib/src/src/main/resources/jline/jline32.dll b/lib/src/src/main/resources/jline/jline32.dll new file mode 100644 index 0000000000000000000000000000000000000000..a0d3b117ce19afe904437b62468253902db276c8 GIT binary patch literal 16069 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 C4G91M literal 0 HcmV?d00001 diff --git a/lib/src/src/main/resources/jline/keybindings-mac.properties b/lib/src/src/main/resources/jline/keybindings-mac.properties new file mode 100644 index 0000000..6f13615 --- /dev/null +++ b/lib/src/src/main/resources/jline/keybindings-mac.properties @@ -0,0 +1,62 @@ +# Keybinding mapping for JLine. The format is: +# [key code]: [logical operation] + +# CTRL-B: move to the previous character +2: PREV_CHAR + +# CTRL-G: move to the previous word +7: PREV_WORD + +# CTRL-F: move to the next character +6: NEXT_CHAR + +# CTRL-A: move to the beginning of the line +1: MOVE_TO_BEG + +# CTRL-D: close out the input stream +4: EXIT + +# CTRL-E: move the cursor to the end of the line +5: MOVE_TO_END + +# BACKSPACE, CTRL-H: delete the previous character +# 8 is the ASCII code for backspace and therefor +# deleting the previous character +8: DELETE_PREV_CHAR + +# TAB, CTRL-I: signal that console completion should be attempted +9: COMPLETE + +# CTRL-J, CTRL-M: newline +10: NEWLINE + +# CTRL-K: erase the current line +11: KILL_LINE + +# ENTER: newline +13: NEWLINE + +# CTRL-L: clear screen +12: CLEAR_SCREEN + +# CTRL-N: scroll to the next element in the history buffer +14: NEXT_HISTORY + +# CTRL-P: scroll to the previous element in the history buffer +16: PREV_HISTORY + +# CTRL-R: redraw the current line +18: REDISPLAY + +# CTRL-U: delete all the characters before the cursor position +21: KILL_LINE_PREV + +# CTRL-V: paste the contents of the clipboard (useful for Windows terminal) +22: PASTE + +# CTRL-W: delete the word directly before the cursor +23: DELETE_PREV_WORD + +# DELETE, CTRL-?: delete the previous character +# 127 is the ASCII code for delete +127: DELETE_PREV_CHAR diff --git a/lib/src/src/main/resources/jline/keybindings.properties b/lib/src/src/main/resources/jline/keybindings.properties new file mode 100644 index 0000000..9585e3a --- /dev/null +++ b/lib/src/src/main/resources/jline/keybindings.properties @@ -0,0 +1,68 @@ +# Keybinding mapping for JLine. The format is: +# [key code]: [logical operation] + +# CTRL-A: move to the beginning of the line +1: MOVE_TO_BEG + +# CTRL-B: move to the previous character +2: PREV_CHAR + +# CTRL-D: close out the input stream +4: EXIT + +# CTRL-E: move the cursor to the end of the line +5: MOVE_TO_END + +# CTRL-F: move to the next character +6: NEXT_CHAR + +# CTRL-G: move to the previous word +7: ABORT + +# BACKSPACE, CTRL-H: delete the previous character +# 8 is the ASCII code for backspace and therefor +# deleting the previous character +8: DELETE_PREV_CHAR + +# TAB, CTRL-I: signal that console completion should be attempted +9: COMPLETE + +# CTRL-J, CTRL-M: newline +10: NEWLINE + +# CTRL-K: erase the current line +11: KILL_LINE + +# CTRL-L: clear screen +12: CLEAR_SCREEN + +# ENTER: newline +13: NEWLINE + +# CTRL-N: scroll to the next element in the history buffer +14: NEXT_HISTORY + +# CTRL-P: scroll to the previous element in the history buffer +16: PREV_HISTORY + +# CTRL-R: redraw the current line +18: SEARCH_PREV + +# CTRL-U: delete all the characters before the cursor position +21: KILL_LINE_PREV + +# CTRL-V: paste the contents of the clipboard (useful for Windows terminal) +22: PASTE + +# CTRL-W: delete the word directly before the cursor +23: DELETE_PREV_WORD + +# CTRL-X: temporary location for PREV_WORD to make tests pass +24: PREV_WORD + +# ESCAPE probably not intended this way, but it does the right thing for now +27: REDISPLAY + +# DELETE, CTRL-?: delete the next character +# 127 is the ASCII code for delete +127: DELETE_NEXT_CHAR diff --git a/lib/src/src/main/resources/jline/windowsbindings.properties b/lib/src/src/main/resources/jline/windowsbindings.properties new file mode 100644 index 0000000..d599c69 --- /dev/null +++ b/lib/src/src/main/resources/jline/windowsbindings.properties @@ -0,0 +1,68 @@ +# Keybinding mapping for JLine. The format is: +# [key code]: [logical operation] + +# CTRL-A: move to the beginning of the line +1: MOVE_TO_BEG + +# CTRL-B: move to the previous character +2: PREV_CHAR + +# CTRL-C: toggle overtype mode (frankly, I wasn't sure where to bind this) +3: INSERT + +# CTRL-D: close out the input stream +4: EXIT + +# CTRL-E: move the cursor to the end of the line +5: MOVE_TO_END + +# CTRL-F: move to the next character +6: NEXT_CHAR + +# CTRL-G: move to the previous word +7: ABORT + +# CTRL-H: delete the previous character +8: DELETE_PREV_CHAR + +# TAB, CTRL-I: signal that console completion should be attempted +9: COMPLETE + +# CTRL-J, CTRL-M: newline +10: NEWLINE + +# CTRL-K: Vertical tab - on windows we'll move to the start of the history +11: START_OF_HISTORY + +# CTRL-L: Form feed - on windows, we'll move to the end of the history +12: END_OF_HISTORY + +# ENTER: newline +13: NEWLINE + +# CTRL-N: scroll to the next element in the history buffer +14: NEXT_HISTORY + +# CTRL-P: scroll to the previous element in the history buffer +16: PREV_HISTORY + +# CTRL-R: search backwards in history +18: SEARCH_PREV + +# CTRL-U: delete all the characters before the cursor position +21: KILL_LINE_PREV + +# CTRL-V: paste the contents of the clipboard (useful for Windows terminal) +22: PASTE + +# CTRL-W: delete the word directly before the cursor +23: DELETE_PREV_WORD + +# CTRL-X: temporary location for PREV_WORD to make tests pass +24: PREV_WORD + +# CTRL-[: escape - clear the current line. +27: CLEAR_LINE + +# CTRL-?: delete the previous character +127: DELETE_NEXT_CHAR diff --git a/lib/src/src/site/apt/building.apt b/lib/src/src/site/apt/building.apt new file mode 100644 index 0000000..a091378 --- /dev/null +++ b/lib/src/src/site/apt/building.apt @@ -0,0 +1,39 @@ + ------ + jline + ------ + +Building JLine + + Building JLine requires an installation of {{{http://maven.apache.org/}Maven 2}}. + + Source code is included in the JLine distribution, or can be checked out from CVS as described {{{source-repository.html}here}}. + +Maven Repository + + If you are using Maven 2, you can add JLine as an automatic dependency by adding the following to your project's pom.xml file: + ++--------------------------------+ + + + ... + + jline + JLine Project Repository + http://jline.sourceforge.net/m2repo + + + + ... + + jline + jline + 0.9.9 + + + ++--------------------------------+ + + + + + diff --git a/lib/src/src/site/apt/downloads.apt b/lib/src/src/site/apt/downloads.apt new file mode 100644 index 0000000..de90db9 --- /dev/null +++ b/lib/src/src/site/apt/downloads.apt @@ -0,0 +1,39 @@ + ------ + jline + ------ + +Download JLine + + JLine packages can be downloaded from: + + {{{http://sourceforge.net/project/showfiles.php?group_id=64033}http://sourceforge.net/project/showfiles.php?group_id=64033}} + + +Maven Repository + + If you are using Maven 2, you can add JLine as an automatic dependency by adding the following to your project's pom.xml file: + ++--------------------------------+ + + + ... + + jline + JLine Project Repository + http://jline.sourceforge.net/m2repo + + + + ... + + jline + jline + 0.9.9 + + + ++--------------------------------+ + + + + diff --git a/lib/src/src/site/docbook/index.xml b/lib/src/src/site/docbook/index.xml new file mode 100644 index 0000000..d884ba3 --- /dev/null +++ b/lib/src/src/site/docbook/index.xml @@ -0,0 +1,608 @@ + + + + + + JLine + + + 2002, 2003, 2004, 2005, 2006, 2007 + Marc Prud'hommeaux + + + + JLine Manual + + + Introduction + + JLine is a Java library for handling console input. + It is similar in functionality to BSD editline and GNU + readline. People familiar with the readline/editline + capabilities for modern shells (such as bash and tcsh) will + find most of the command editing features of JLine to + be familiar. + + + + + License and Terms of Use + + JLine is distributed under the BSD license, meaning that + you are completely free to redistribute, modify, or sell it + with almost no restrictins. + For more information on the BSD license, see + http://www.opensource.org/licenses/bsd-license.php. + + + For information on obtaining the software under another + license, contact the copyright holder: + mwp1@cornell.edu. + + + + + Obtaining JLine + + JLine is hosted on SourceForge, and is located at + http://jline.sf.net. + The latest release can be downloaded from + + http://sourceforge.net/project/showfiles.php?group_id=64033. + API documentation can be found in the + apidocs/ + directory. + + + + + Installation + + JLine has no library dependencies, aside from a JVM + of version 1.2 or higher. To install JLine, download the + jline.jar + file, and either place it in + the system-wide java extensions directory, or + manually add it to your + CLASSPATH. + The extensions directory is dependent on your operating + system. Some few examples are: + + + + Macintosh OS X: + /Library/Java/Extensions + or + /System/Library/Java/Extensions + + + + + Microsoft Windows: + JAVAHOME\jre\lib\ext + (example: + C:\j2sdk1.4.1_03\jre\lib\ext) + + + + + UNIX Systems: + JAVAHOME/jre/lib/ext + (example: + /usr/local/java/jre/lib/ext) + + + + + + JLine is not 100% pure Java. On Windows, it relies on a + .dll + file to initialize the terminal + to be able to accept unbuffered input. However, + no installation is necessary for this: when initialized, + JLine will dynamically extract the DLL to a temporary + directory and load it. For more details, see the + documentation for the + jline.WindowsTerminal + class. + + + On UNIX systems (including Macintosh OS X), JLine will + execute the + stty + command to initialize + the terminal to allow unbuffered input. For more details, + see the documentation for the + jline.UnixTerminal + class. + + + For both Windows and UNIX systems, JLine will fail to + initialize if it is run inside a strict security manager + that does not allow the loading of libraries, writing + to the file system, or executing external programs. However, + for most console applications, this is usually not the case. + + + + Supported Platforms + + JLine should work on any Windows system, or any + minimally compliant POSIX system (includling Linux and + Macintosh OS X). + + + The platforms on which JLine has been confirmed to work are: + + + + Microsoft Windows XP + + + + + RedHat Linux 9.0 + + + + + Debian Linux 3.0 + + + + + Macintosh OS X 10.3 + + + + + + Please report successes or failures to the author: + mwp1@cornell.edu. + + + + Features +
    + Command History + + +
    +
    + Tab completion + + +
    +
    + Line editing + + +
    +
    + Custom Keybindings + + You can create your own keybindings by creating a + HOME/.jlinebindings.properties" + file. You can override the location of this file with + the "jline.keybindings" + system property. + + +
    +
    + Character masking + + +
    +
    + + API + + This section discusses some common usages of the JLine API. + For in-depth usage of the JLine API, see the + apidocs. + +
    + Reading a password from the console + + A common task that console applications need to do is + read in a password. While it is standard for software + to not echo password strings as they are typed, + the Java core APIs surprisingly do not provide any + means to do this. + + + JLine can read a password with the following code: + + String password = newjline.ConsoleReader().readLine(new Character('*')); + + This will replace every character types on the console + with a star character. + + + Alternately, you can have it not echo password + character at all: + + String password = newjline.ConsoleReader().readLine(new Character(0)); + + + + The + jline-demo.jar + file contains + a sample application that reads the password. To run + the sample, execute: + + java -cp jline-demo.jar jline.example.PasswordReader "*" + + +
    +
    + + Frequently Asked Questions +
    + + Can I disable JLine if it isn't working on my platform? + + + You can disable JLine by setting the System property + "jline.terminal" + to + "jline.UnsupportedTerminal". For example: + + java -Djline.terminal=jline.UnsupportedTerminal jline.example.Example simple + + +
    +
    + + How do I customize the key bindings? + + + You can create your own keybindings by creating a + HOME/.jlinebindings.properties" + file. You can override the location of this file with + the "jline.keybindings" + system property. To examine the format to use, see the + src/jline/keybindings.properties + file in the source distribution. + +
    +
    + + Can I use JLine as the default console input stream for + all applications? + + + No, but you can use the + jline.ConsoleRunner + application + to set up the system input stream and continue on + the launch another program. For example, to use JLine + as the input handler for the popular + BeanShell + console application, you can run: + + java + jline.ConsoleRunner + bsh.Interpreter + + +
    +
    + + Can I use JLine as the input handler for<ulink url="http://www.beanshell.org">BeanShell</ulink>? + + + Yes. Try running: + + java + jline.ConsoleRunner + bsh.Interpreter + + +
    +
    + + Can I use JLine as the input handler for + <ulink url="http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/jdb.html">jdb</ulink> + (the java debugger)? + + + Yes. Try running: + + java + jline.ConsoleRunner + com.sun.tools.example.debug.tty.TTY + args + + +
    +
    + + Is JLine<trademark>100% pure Java</trademark>? + + + No: JLine uses a couple small native methods in the Windows + platform. On Unix, it is technically pure java, but relies + on the execution of external (non-java) programs. See the + installation section + for more details. + +
    +
    + + How do I make it so password characters are no echoed + to the screen? + + + See. + +
    +
    + + Is JLine a full-featured curses implementation? + + + No: JLine has no ability to position the cursor on the + console. It might someday evolve into a plausible + Java curses implementation. + +
    +
    +
    + + + Known Bugs + + + + Clearing the screen (CTRL-L) doesn't currently work on Windows. + + + + + + + Contributors + + The following people have contributed to improving JLine over the + years: + + + + + Marc Prud'hommeaux + + + + + Damian Steer + + + + + Dale Kemp + + + + + Jun Liu + + + + + malcolm@epcc.ed.ac.uk + + + + + Simon Patarin + + + + + Amy Isard + + + + + Ryan Bell + + + + + Marc Herbert + + + + + Christian Salm + + + + + + + Future enhancements + + + + Add localization for all strings. + + + + + Create a BNFCompletor that can handle any BNF. + + + + + + + Change Log + + 0.9.93 2007-11-13 + + + Fixed backspace handling on Unix/OS X. + + + + + 0.9.92 2007-10-30 + + + JLine now works with 64-bit Windows systems. + + + + + 0.9.91 2007-03-11 + + + Added ConsoleReader.setUsePagination() method which allows + configuration of pagination when the number of rows of + candidates exceeds the height of the detected terminal, thanks + to a patch by Damian Steer. + + + + + Better support for UTF-8 inputs (issue #1623521). + + + + + Improved list of supported keys on Windows (issue #1649790). + + + + + 0.9.5 2006-03-08 + + + Fixed problem with "stty" on Solaris, which doesn't + understand "stty size" to query the terminal size. It now + uses "stty -a", which supposedly outputs a POSIX standard + format. + + + + + Support HOME and END keys, thanks to a patch by + Dale Kemp. + + + + + 0.9.1 2005-01-29 + + + Fixed problem with the 0.9.0 distribution that + failed to include the Windows jline.dll in the jline.jar, + rendering it inoperable on Windows. + + + + + Implemented proper interception or arrow keys on Windows, + meaning that history can now be navigated with the UP + and DOWN keys, and line editing can take place with + the LEFT and RIGHT arrow keys. + + + + + 0.9.0 2005-01-23 + + + Changed license from GPL to BSD. + + + + + Made "CTRL-L" map to clearing the screen. + + + + + 0.8.1 2003-11-18 + + + Fixed accidental dependency on JVM 1.4. + + + + + 0.8.0 2003-11-17 + + + Windows support using a native .dll + + + + + A new ClassNameCompletor + + + + + Many doc improvements + + + + + 0.6.0 2003-07-08 + + + Many bugfixes + + + + + Better release system + + + + + Automatically set terminal property by + issuing stty on UNIX systems + + + + + Additional tab-completion handlers + + + + + Tested on Debian Linux and Mac OS 10.2 + + + + + Example includes dictionary, filename, and simple completion + + + + + 0.3.0 2002-10-05 + + + Initial release + + + + +
    diff --git a/lib/src/src/site/fml/faq.fml b/lib/src/src/site/fml/faq.fml new file mode 100644 index 0000000..b9902b0 --- /dev/null +++ b/lib/src/src/site/fml/faq.fml @@ -0,0 +1,26 @@ + + + + + How does JLine work? + +

    + On Windows, JLine uses a native .dll (which it automatically + extracts from the jline jar and loads at runtime) to access + native console features. On UNIX systems, JLine will perform + the necessary terminal setup by launching the "stty" command. +

    +
    +
    + + What platforms has JLine been tested on? + +

    + Various flavors of Windows (95, 98, NT, XP, 2000), Mac OS X, + and multiple UNIX systems (Linux, Solaris, HPUX). +

    +
    +
    + +
    +
    diff --git a/lib/src/src/site/resources/css/site.css b/lib/src/src/site/resources/css/site.css new file mode 100755 index 0000000..771dc3f --- /dev/null +++ b/lib/src/src/site/resources/css/site.css @@ -0,0 +1,311 @@ + +body { + min-width: 600px; + width: 600px; + width: auto !important; + background-color: #fff; + font-family: Verdana, sans; +} + +body,div,span,td,p,h2,h3,h4,h5,h6,a,ul,li { + font-family: Verdana, sans; + font-size: 11px; + color: #5A5A5A; + font-style: normal; +} + +a,a:hover,a:visited,a:active { + color: #5A5A5A; + /* text-decoration: underline; */ +} + +/* main layout */ +#banner { + color: #FFA500; + border: none; + margin: 0 0 0 0; + background-color: #fff; + background-image: url(../images/header.jpg); + background-position: right; + background-repeat: no-repeat; + height: 100px; +} + +#bannerLeft img{ + margin: 10px 0 0 10px; +} + +#leftColumn { + background-color: transparent; + position: absolute; + top: 140px; + left: 20px; + width: 180px; + margin: 0px; + padding: 0px; + border: none; +} + +#bodyColumn { + margin: 0 0 20px 220px; + background-color: #fff; + padding: 30px; + position: relative; + background-image: url(../images/dotted.png); + background-repeat: repeat-y; +} + +#footer div.xright { + color: #fff; + margin-right: 10px; +} + +/* end main layout */ +.deprecated { + text-decoration: line-through; +} + +.comment { + color: green; +} + +.source pre { + font-family: "Andale Mono", monospace; + font-size: 11px; + background-color: #ddd; + width: 100%; + color: #5A5A5A; + border-width: 0px; + padding-top: 6px; + padding-left: 3px; +} + +#breadcrumbs { + background-color: #FE1100; + border: none; + height: 15px; +} + +/* + workaround for bug in the Doxia docbook renderer that opens + anchors (e.g. ), but doesn't ever close them +*/ +#section a,a:hover,a:visited,a:active { + text-decoration: none; +} + + +#breadcrumbs a { + color: #fff; + margin-left: 20px; + text-decoration: none; +} + +h1 { + border: none; + padding-left: 0; + font-weight: bold; + text-transform: capitalize; + background-color: #7FAABB !important; + color: #FFFFFF !important; + font-size: 19px !important; +} + +h2 { + border: none; + padding-left: 0; + font-size: 13px; + font-weight: bold; + text-transform: capitalize; + background-color: #7FAABB !important; + color: #FFFFFF !important; + font-size: 17px !important; +} + +h3 { + border: none; + font-weight: bolder; + padding-left: 0; + background-color: #8BBBD1 !important; + color: #FFFFFF !important; +} + +#navcolumn { + padding: 0; + overflow: hidden; +} + +#navcolumn ul { + margin: 0px 0 3px 0; + background-repeat: repeat-x; +} + +#navcolumn h5 { + border: none; + background-image: url(../images/dotted.png); + background-repeat: repeat-x; + padding: 4px 0 3px 20px; + font-size: 11px !important; + margin-top: -1px; +} + +#navcolumn ul { + margin-bottom: 8px; +} + +#navcolumn li { + margin: 0px 0 0px 3px; + padding: 2px; + list-style-position: outside; + font-size: 7.5pt !important; + padding-left: 16px; + padding-left /**/: 2px !important; + /* warning, don't reformat, there should be no comment between padding-left and comment, to fix IE5 issues */ +} + +#menuDownloadable_docs li { + background-image: url(../images/ico_file_pdf.png); + padding-top: 3px; + padding-bottom: 1px; +} + +#navcolumn strong { + color: #000000; + font-weight: bold; +} + +#navcolumn strong a { + color: #000000; + font-weight: bold; +} + +#navcolumn a { + padding-left: 14px; + text-decoration: underline; + padding-bottom: 2px; + color: #5a5a5a; +} + +#navcolumn a img { + margin-top: 0; +} + +#navcolumn a#poweredBy img { + margin: 0 0 15px 20px; + width: 90px; + height: 30px; +} + +#navcolumn #lastPublished { + color: #999; + margin: 0 0 0 20px; +} + +#navcolumn a:hover { + color: Olive; + padding-left: 14px; + text-decoration: underline; + padding-bottom: 2px; +} + +#breadcrumbs div.xright,#breadcrumbs div.xleft { + color: #fff; + display: inline; + font-size: 7pt !important; +} + +#banner a#projectLogo img { + float: left; + background-color: #fff !important; + margin: 20px 0 0 20px !important; +} + +#navcolumn li { + color: #000000; +} + +#navcolumn strong { + color: #000000; + font-weight: bold; + margin-left: 15px; +} + +div.source { + background-color: #ddd; +} + +div.source pre,code,td.code { + font-size: 8pt !important; + font-family: monospace; + margin: 0; +} + +td.code { + font-size: 10pt !important; + font-family: monospace; +} + +div#legend { + display: none; +} + +table td.source { + border: none !important; +} + +table td,table th { + font-size: 8pt !important; + font-family: verdana; +} + +table th { + font-weight: bold; +} + +.collapsed { + background-image: url(../images/collapsed.png) !important; +} + +li.expanded { + background-image: url(../images/expanded.png) !important; +} + +/* +li.expanded ul { + margin-top: 5px !important; +} +*/ + +a.externalLink,a.newWindow { + padding-right: 9px !important; + background-image: none !important; /*ie5*/ +} + +a.externalLink /* */ { + background-image: url(../images/external.png) !important; +} + +a.newWindow /* */ { + background-image: url(../images/newwindow.png) !important; +} + +table { + width: 68%; /* fix for ie 5.x */ +} + +i { + content: "\"/*" +} + +table { + width: 100%; +} +/* remove banner: comment the following lines for the full layout */ /* +#banner, #breadcrumbs { + display: none !important; +} +#leftColumn { + position: relative; + top: 0; +} +*/ diff --git a/lib/src/src/site/resources/images/collapsed.png b/lib/src/src/site/resources/images/collapsed.png new file mode 100755 index 0000000000000000000000000000000000000000..a02c1e67c9d56d299c6116d02edf96cf547aee41 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s%)r3-vUGbBki%Z$>FdgVg`16=SMyEh0By_5c6>4<9~UymO@y(mp+_-sT_3Fi?n-0hWl`)nC`2{mLJiCzw%Zg#l`uV{olTRW)@Flh+T613mec7 N22WQ%mvv4FO#r}6PN@I@ literal 0 HcmV?d00001 diff --git a/lib/src/src/site/resources/images/dotted.png b/lib/src/src/site/resources/images/dotted.png new file mode 100755 index 0000000000000000000000000000000000000000..8a4d443a4a1ddc94e4d26dd2f5444c53860f658c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$6%)r2ScH1*YAcrO0(HBUsKVi<=^%BUJEOCt} z3C>R|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Dcn8Q>G*T346*|Nnm=PeR6YBamV$ z3Gxg6&+v4+fftac>*?YcQgJIOfq_GT&8>kUDItXg!~(IIf_fMjS<;#W92y!e64(TQ Yu9?Fid8Ph38&D&Ir>mdKI;Vst020bFHUIzs literal 0 HcmV?d00001 diff --git a/lib/src/src/site/resources/images/expanded.png b/lib/src/src/site/resources/images/expanded.png new file mode 100755 index 0000000000000000000000000000000000000000..8a19dbf1038200fe53658868f8e8350220f5147b GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s%)r3-vUGbBki%Z$>FdgVg`16=S6O>_3{)lr!i<;h*8KqrvZOouIx;Y9?C1WI$O`211o(uw{{R0!?ToSUOa|jL1`XB? zaX@j#k|4ie28U-i(tsQTPZ!6Kid)GE4oqhfCUKrhPGMsbXz%P~=QlemFU|^zPU}?NMQuIyL1*|@o_>~c%b z0EIXUJR*x37`TN%nDNrxx<5ccmUKs7M+SzC{oH>NS%G}E0G|-o|Ns9-^)XC*dG;<) zgs~*ZFPOpM*^M+HN5a#^F{I*FazaW%0z)F3##xS3gQS22pej=a?v|8wZ-HtUJYD@< J);T3K0RY|TJLmua literal 0 HcmV?d00001 diff --git a/lib/src/src/site/resources/images/ico_file_pdf.png b/lib/src/src/site/resources/images/ico_file_pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..9ceb00f2dd27d8467114e3cca9477ee5a26ba0bb GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^d>}RpGXn#o%-5n@Kn{C}r>`sfWiDwxOTz;~Yo-8& zI14-?iy0W?4uLRZ-i1;-pdd@Sqpu?a!^VE@KZ&eBzFdG$h^xgrhGRfB1H(B9iJq-n zv$M0$-Mjby|NnDdUdM`yzaNU~0?IL#1o;IsI6S+N2ILfYx;TbZ+)7SJeUQSDs*%DG zl$a2dl)#%1pp}qdl8_LTz`@H~o{*rC&n%Rb>7ZmHq7t_5z=9B%$$kS zP@y}})3dR$ajOhRmjn|lE9=$Ma~%F0`etHqH<57}w`vb>tAxZ1*O-`?ISj8YMW6Al RU)ct7rKhW(%Q~loCIEb~SPcLG literal 0 HcmV?d00001 diff --git a/lib/src/src/site/resources/images/logo.jpg b/lib/src/src/site/resources/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f1da5c8f270f3caedcad4d7898dac192f19fd33 GIT binary patch literal 4121 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 literal 0 HcmV?d00001 diff --git a/lib/src/src/site/resources/images/newwindow.png b/lib/src/src/site/resources/images/newwindow.png new file mode 100755 index 0000000000000000000000000000000000000000..1374c228afd7fbf0f75bbaf43c98cd8597f80187 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|R%)r37Kve$?kfUAV8d2h0l$uzQnV+W+l9`*z zP@I^gV5E>=QlemFU|^zPU} zfI^%F9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstUx|nfKQ0)|NsA^`WPm@JbM=? z!dMdI7tG-B>_!@pBkAel7*cU7IU$9?$$)W*grtOofP^cT7b62xB7@|1hX^mAA_h-a KKbLh*2~7ZExj4}P literal 0 HcmV?d00001 diff --git a/lib/src/src/site/site.xml b/lib/src/src/site/site.xml new file mode 100644 index 0000000..3301d0e --- /dev/null +++ b/lib/src/src/site/site.xml @@ -0,0 +1,40 @@ + + + + JLine + images/logo.jpg + http://jline.sourceforge.net/ + + + SourceForge + http://sourceforge.net/sflogo.php?group_id=64033 + http://sourceforge.net/ + + + + + + + + + + + + + + + + + + + + + ${reports} + + + From 8ca6d27fb3a8698a0919c1a8b29fed2c1adf7825 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Mon, 17 Nov 2014 23:48:46 +0800 Subject: [PATCH 16/39] Implemented custom console reader --- .../study/sqlcmd/io/SqlConsoleReader.java | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java new file mode 100644 index 0000000..de04008 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java @@ -0,0 +1,90 @@ +package ua.com.juja.study.sqlcmd.io; + +import jline.ConsoleReader; +import jline.CursorBuffer; + +import java.io.*; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/17/14 + * Time: 9:42 PM + */ +public class SqlConsoleReader { + + public static final int SEMICOLON = 59; + public static final int NEW_LINE = 10; + private ConsoleReader consoleReader; + private Writer writer; + private CursorBuffer cursorBuffer; + + public SqlConsoleReader(InputStream inputStream, OutputStream out) throws IOException { + writer = new PrintWriter(out); + consoleReader = new ConsoleReader(inputStream, writer); + cursorBuffer = consoleReader.getCursorBuffer(); + } + + public String readQuery() throws IOException { + StringBuilder sb = new StringBuilder(); + boolean exit = false; + int previousKey = 0; + while (!exit) { + int key = consoleReader.readVirtualKey(); + switch (key) { + case NEW_LINE: + if (previousKey == SEMICOLON) { + exit = true; + } else { + sb.append(" "); + newLine(); + } + break; + case 127: + consoleReader.backspace(); + + break; + default: + sb.appendCodePoint(key); + cursorBuffer.write((char) key); + writer.write(key); + } + previousKey = key; + consoleReader.flushConsole(); + } + return sb.toString(); + } + + private void newLine() throws IOException { + consoleReader.moveCursor(0); + consoleReader.printNewline(); + cursorBuffer.getBuffer().setLength(0); + cursorBuffer.cursor = 0; + + } + +// private class ConsoleWriter extends PrintWriter{ +// private StringBuilder input = new StringBuilder(); +// public ConsoleWriter(Writer out) { +// super(out); +// } +// +// @Override +// public void write(int codePoint) { +// super.write(codePoint); +// input.appendCodePoint(codePoint); +// } +// +// @Override +// public void write(char[] buf) { +// super.write(buf); +// input.append(buf); +// } +// +// public String getInputAndClear(){ +// String res = input.toString(); +// input = new StringBuilder(); +// return res; +// } +// } +} From ecbe5ef4d11381d9c320a234df8d7303b98f329b Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 18 Nov 2014 01:05:15 +0800 Subject: [PATCH 17/39] Left, right navigation --- .../study/sqlcmd/io/SqlConsoleReader.java | 39 +++++-------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java index de04008..0700d73 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java @@ -15,6 +15,7 @@ public class SqlConsoleReader { public static final int SEMICOLON = 59; public static final int NEW_LINE = 10; + public static final int BACKSPACE = 127; private ConsoleReader consoleReader; private Writer writer; private CursorBuffer cursorBuffer; @@ -33,6 +34,7 @@ public String readQuery() throws IOException { int key = consoleReader.readVirtualKey(); switch (key) { case NEW_LINE: + sb.append(cursorBuffer.toString()); if (previousKey == SEMICOLON) { exit = true; } else { @@ -40,12 +42,16 @@ public String readQuery() throws IOException { newLine(); } break; - case 127: + case BACKSPACE: consoleReader.backspace(); - + break; + case 2: + consoleReader.moveCursor(-1); + break; + case 6: + consoleReader.moveCursor(1); break; default: - sb.appendCodePoint(key); cursorBuffer.write((char) key); writer.write(key); } @@ -58,33 +64,8 @@ public String readQuery() throws IOException { private void newLine() throws IOException { consoleReader.moveCursor(0); consoleReader.printNewline(); - cursorBuffer.getBuffer().setLength(0); + cursorBuffer.clearBuffer(); cursorBuffer.cursor = 0; - } -// private class ConsoleWriter extends PrintWriter{ -// private StringBuilder input = new StringBuilder(); -// public ConsoleWriter(Writer out) { -// super(out); -// } -// -// @Override -// public void write(int codePoint) { -// super.write(codePoint); -// input.appendCodePoint(codePoint); -// } -// -// @Override -// public void write(char[] buf) { -// super.write(buf); -// input.append(buf); -// } -// -// public String getInputAndClear(){ -// String res = input.toString(); -// input = new StringBuilder(); -// return res; -// } -// } } From 255aa9deaf465bf9ee4d3d9ffe176aee783225e6 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 18 Nov 2014 12:22:49 +0800 Subject: [PATCH 18/39] Move end, begin --- .../juja/study/sqlcmd/engine/JLineDemo.java | 46 +++++++++++++++++++ .../study/sqlcmd/io/SqlConsoleReader.java | 20 +++++++- 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java new file mode 100644 index 0000000..f63b6b8 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java @@ -0,0 +1,46 @@ +package ua.com.juja.study.sqlcmd.engine; + +import jline.ConsoleReader; +import jline.CursorBuffer; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Writer; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/12/14 + * Time: 2:08 PM + */ +public class JLineDemo { + public static void main(String[] args) throws IOException { + Writer writer = new PrintWriter(System.out); + ConsoleReader consoleReader = new ConsoleReader(System.in, writer); + CursorBuffer buf = consoleReader.getCursorBuffer(); + int key = 0; + while ((key = consoleReader.readVirtualKey()) != 27) { + System.out.println(key); + switch (key) { + case 127: + consoleReader.backspace(); + break; + case 10: + consoleReader.moveCursor(0); + consoleReader.printNewline(); + buf.getBuffer().setLength(0); + buf.cursor = 0; + break; + default: + buf.write((char) key); + writer.write(key); + } + consoleReader.flushConsole(); + } + + } + + private static String convertCodePoint(int key) { + return new StringBuilder().appendCodePoint(key).toString(); + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java index 0700d73..996e353 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java @@ -16,6 +16,8 @@ public class SqlConsoleReader { public static final int SEMICOLON = 59; public static final int NEW_LINE = 10; public static final int BACKSPACE = 127; + public static final int LEFT = 2; + public static final int RIGHT = 6; private ConsoleReader consoleReader; private Writer writer; private CursorBuffer cursorBuffer; @@ -45,12 +47,18 @@ public String readQuery() throws IOException { case BACKSPACE: consoleReader.backspace(); break; - case 2: + case LEFT: consoleReader.moveCursor(-1); break; - case 6: + case RIGHT: consoleReader.moveCursor(1); break; + case 5: + moveToEnd(); + break; + case 1: + moveToBegin(); + break; default: cursorBuffer.write((char) key); writer.write(key); @@ -61,6 +69,14 @@ public String readQuery() throws IOException { return sb.toString(); } + private void moveToBegin() throws IOException { + consoleReader.moveCursor(-cursorBuffer.length()); + } + + private void moveToEnd() throws IOException { + consoleReader.moveCursor(cursorBuffer.length() - cursorBuffer.cursor); + } + private void newLine() throws IOException { consoleReader.moveCursor(0); consoleReader.printNewline(); From 71fb23b6e991633b9ccdd23f4740f2364041d11e Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 18 Nov 2014 13:21:03 +0800 Subject: [PATCH 19/39] extracted codes to constants --- .../ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java index 996e353..394fa73 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java @@ -18,6 +18,8 @@ public class SqlConsoleReader { public static final int BACKSPACE = 127; public static final int LEFT = 2; public static final int RIGHT = 6; + public static final int END = 5; + public static final int HOME = 1; private ConsoleReader consoleReader; private Writer writer; private CursorBuffer cursorBuffer; @@ -53,12 +55,14 @@ public String readQuery() throws IOException { case RIGHT: consoleReader.moveCursor(1); break; - case 5: + case END: moveToEnd(); break; - case 1: + case HOME: moveToBegin(); break; + case 98: + default: cursorBuffer.write((char) key); writer.write(key); From 53c896c3a0a2db19f27fae4a6f08aaeb02ac13b5 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 18 Nov 2014 13:21:58 +0800 Subject: [PATCH 20/39] Removed demo class from project --- .../juja/study/sqlcmd/engine/JLineDemo.java | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java deleted file mode 100644 index f63b6b8..0000000 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/JLineDemo.java +++ /dev/null @@ -1,46 +0,0 @@ -package ua.com.juja.study.sqlcmd.engine; - -import jline.ConsoleReader; -import jline.CursorBuffer; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; - -/** - * Created with IntelliJ IDEA. - * User: viktor - * Date: 11/12/14 - * Time: 2:08 PM - */ -public class JLineDemo { - public static void main(String[] args) throws IOException { - Writer writer = new PrintWriter(System.out); - ConsoleReader consoleReader = new ConsoleReader(System.in, writer); - CursorBuffer buf = consoleReader.getCursorBuffer(); - int key = 0; - while ((key = consoleReader.readVirtualKey()) != 27) { - System.out.println(key); - switch (key) { - case 127: - consoleReader.backspace(); - break; - case 10: - consoleReader.moveCursor(0); - consoleReader.printNewline(); - buf.getBuffer().setLength(0); - buf.cursor = 0; - break; - default: - buf.write((char) key); - writer.write(key); - } - consoleReader.flushConsole(); - } - - } - - private static String convertCodePoint(int key) { - return new StringBuilder().appendCodePoint(key).toString(); - } -} From 1039f4a4621a78d86d157a49cef1a51c0af524db Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 18 Nov 2014 13:28:12 +0800 Subject: [PATCH 21/39] Added JLineDemo to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9724de5..ef701bd 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ pom.xml *.iws # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* +JLineDemo.java From c48b53eac5bcbd7302ce405c8a9a62d6fe28c228 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 19 Nov 2014 13:28:14 +0800 Subject: [PATCH 22/39] Extracted code constants to class --- .../java/ua/com/juja/study/sqlcmd/io/KeyCodes.java | 13 +++++++++++++ .../com/juja/study/sqlcmd/io/SqlConsoleReader.java | 13 ++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/io/KeyCodes.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/KeyCodes.java b/src/main/java/ua/com/juja/study/sqlcmd/io/KeyCodes.java new file mode 100644 index 0000000..fb2c5c5 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/KeyCodes.java @@ -0,0 +1,13 @@ +package ua.com.juja.study.sqlcmd.io; + +public class KeyCodes { + public static final int SEMICOLON = 59; + public static final int NEW_LINE = 10; + public static final int BACKSPACE = 127; + public static final int LEFT = 2; + public static final int RIGHT = 6; + public static final int END = 5; + public static final int HOME = 1; + public static final int UP = 16; + public static final int DOWN = 14; +} \ No newline at end of file diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java index 394fa73..903001f 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/SqlConsoleReader.java @@ -5,6 +5,8 @@ import java.io.*; +import static ua.com.juja.study.sqlcmd.io.KeyCodes.*; + /** * Created with IntelliJ IDEA. * User: viktor @@ -13,13 +15,6 @@ */ public class SqlConsoleReader { - public static final int SEMICOLON = 59; - public static final int NEW_LINE = 10; - public static final int BACKSPACE = 127; - public static final int LEFT = 2; - public static final int RIGHT = 6; - public static final int END = 5; - public static final int HOME = 1; private ConsoleReader consoleReader; private Writer writer; private CursorBuffer cursorBuffer; @@ -37,7 +32,7 @@ public String readQuery() throws IOException { while (!exit) { int key = consoleReader.readVirtualKey(); switch (key) { - case NEW_LINE: + case KeyCodes.NEW_LINE: sb.append(cursorBuffer.toString()); if (previousKey == SEMICOLON) { exit = true; @@ -58,7 +53,7 @@ public String readQuery() throws IOException { case END: moveToEnd(); break; - case HOME: + case KeyCodes.HOME: moveToBegin(); break; case 98: From e81a19bef993742960106c7675f0d4e0d5649fdc Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 21 Nov 2014 12:11:04 +0800 Subject: [PATCH 23/39] Added DI interface --- .../study/sqlcmd/di/ApplicationContext.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java new file mode 100644 index 0000000..ca66c65 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java @@ -0,0 +1,20 @@ +package ua.com.juja.study.sqlcmd.di; + +import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.engine.KeyboardManager; +import ua.com.juja.study.sqlcmd.sql.QueryHistory; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/19/14 + * Time: 2:14 PM + */ +public interface ApplicationContext { + + public QueryHistory getQueryHistory(); + + public DatabaseExecutor getDatabaseExecutor(); + + public KeyboardManager getKeyboardManager(); +} From debdc8789b49e983dc183c63b7d9f300a43ebe87 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 19 Nov 2014 14:07:46 +0800 Subject: [PATCH 24/39] processed exceptions --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 42 +++++-------------- .../sqlcmd/config/SqlCmdConfigValidator.java | 39 +++++++++++++++++ .../sqlcmd/config/ValidationException.java | 17 ++++++++ .../sqlcmd/database/DatabaseException.java | 28 +++++++++++++ .../sqlcmd/database/DatabaseExecutor.java | 8 ++-- .../study/sqlcmd/engine/KeyboardManager.java | 7 +++- 6 files changed, 104 insertions(+), 37 deletions(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfigValidator.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/config/ValidationException.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseException.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index 543d0c5..fb248c9 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -1,15 +1,22 @@ package ua.com.juja.study.sqlcmd; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.config.ValidationException; + +import static ua.com.juja.study.sqlcmd.config.SqlCmdConfigValidator.validateCmdOption; /** */ public class SqlCmd { public static void main(String[] args) { SqlCmdConfig config = parseCmdOption(args); - if (!validateCmdOption(config)) - System.out.println("args[] is correct "); - else System.exit(1); + try { + validateCmdOption(config); + } catch (ValidationException e) { + System.err.println("Invalid initial parameters. Unable to continue working"); + System.err.println(e.getMessage()); + System.exit(1); + } } public static SqlCmdConfig parseCmdOption(String[] args) { @@ -50,33 +57,4 @@ public static SqlCmdConfig parseCmdOption(String[] args) { return config; } - public static boolean validateCmdOption(SqlCmdConfig config) { - StringBuilder strError = new StringBuilder(); - boolean error = false; - - if ((config.getUserName() == null) || config.getUserName().isEmpty()) { - error = true; - strError.append("value arg user name is incorrect;"); - } - - if (config.getPassword() == null || config.getPassword().isEmpty()) { - error = true; - strError.append("value arg user password is incorrect;"); - } - - if (config.getDbUrl() == null || config.getDbUrl().isEmpty()) { - error = true; - strError.append("value arg db url is incorrect;"); - } - - if (config.getDriverName() == null || config.getDriverName().isEmpty()) { - error = true; - strError.append("value arg driver name is incorrect;"); - } - - if (error) - System.out.println(strError.toString()); - - return error; - } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfigValidator.java b/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfigValidator.java new file mode 100644 index 0000000..d667349 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/config/SqlCmdConfigValidator.java @@ -0,0 +1,39 @@ +package ua.com.juja.study.sqlcmd.config; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/19/14 + * Time: 1:41 PM + */ +public class SqlCmdConfigValidator { + public static void validateCmdOption(SqlCmdConfig config) throws ValidationException { + StringBuilder strError = new StringBuilder(); + boolean error = false; + + if ((config.getUserName() == null) || config.getUserName().isEmpty()) { + error = true; + strError.append("value arg user name is incorrect;"); + } + + if (config.getPassword() == null || config.getPassword().isEmpty()) { + error = true; + strError.append("value arg user password is incorrect;"); + } + + if (config.getDbUrl() == null || config.getDbUrl().isEmpty()) { + error = true; + strError.append("value arg db url is incorrect;"); + } + + if (config.getDriverName() == null || config.getDriverName().isEmpty()) { + error = true; + strError.append("value arg driver name is incorrect;"); + } + + if (error) { + throw new ValidationException(strError.toString()); + } + } + +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/config/ValidationException.java b/src/main/java/ua/com/juja/study/sqlcmd/config/ValidationException.java new file mode 100644 index 0000000..0169a61 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/config/ValidationException.java @@ -0,0 +1,17 @@ +package ua.com.juja.study.sqlcmd.config; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/19/14 + * Time: 1:44 PM + */ +public class ValidationException extends Exception { + + public ValidationException() { + } + + public ValidationException(String message) { + super(message); + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseException.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseException.java new file mode 100644 index 0000000..2da7089 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseException.java @@ -0,0 +1,28 @@ +package ua.com.juja.study.sqlcmd.database; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/19/14 + * Time: 1:50 PM + */ +public class DatabaseException extends Exception { + + private String query; + + public DatabaseException() { + } + + public DatabaseException(String message) { + super(message); + } + + public DatabaseException(String message, String query) { + super(message); + this.query = query; + } + + public String getQuery() { + return query; + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index 50e9822..9253227 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -10,11 +10,11 @@ */ public interface DatabaseExecutor { - public abstract boolean connectToDb(SqlCmdConfig config); + public abstract boolean connectToDb(SqlCmdConfig config) throws DatabaseException; - public abstract Row[] executeSqlScript(String sqlScript); + public abstract Row[] executeSqlScript(String sqlScript) throws DatabaseException; - public abstract String[] getDatabaseList(); + public abstract String[] getDatabaseList() throws DatabaseException; - public abstract void changeDatabase(String databaseName); + public abstract void changeDatabase(String databaseName) throws DatabaseException; } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java index e53ed30..0475ddd 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java @@ -47,6 +47,11 @@ public void startListenUserKeyboard() throws IOException { public Row[] executeQuery(String query) { history.addQueryToTheHead(query); - return databaseExecutor.executeSqlScript(query); + try { + return databaseExecutor.executeSqlScript(query); + } catch (Exception e) { + System.out.println("Got exception when execute script " + e.getMessage()); + return new Row[]{}; + } } } From 610e95f97cd0ce77a632d81deb01cb9cb8e8f66d Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 21 Nov 2014 11:40:23 +0800 Subject: [PATCH 25/39] Dependency injection engine --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 17 +++++++ .../sqlcmd/di/DefaultApplicationContext.java | 44 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index fb248c9..ae553c8 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -2,20 +2,37 @@ import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.config.ValidationException; +import ua.com.juja.study.sqlcmd.di.ApplicationContext; +import ua.com.juja.study.sqlcmd.di.DefaultApplicationContext; + +import java.io.IOException; import static ua.com.juja.study.sqlcmd.config.SqlCmdConfigValidator.validateCmdOption; /** */ public class SqlCmd { + + private static ApplicationContext applicationContext; + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + public static void main(String[] args) { SqlCmdConfig config = parseCmdOption(args); try { validateCmdOption(config); + applicationContext = new DefaultApplicationContext(config); + applicationContext.getKeyboardManager().startListenUserKeyboard(); } catch (ValidationException e) { System.err.println("Invalid initial parameters. Unable to continue working"); System.err.println(e.getMessage()); System.exit(1); + } catch (IOException e) { + System.err.println("Error with input/output happened. Unable to continue working"); + System.err.println(e.getMessage()); + System.exit(1); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java new file mode 100644 index 0000000..82644b9 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -0,0 +1,44 @@ +package ua.com.juja.study.sqlcmd.di; + +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.database.mock.MockDatabaseExecutor; +import ua.com.juja.study.sqlcmd.engine.KeyboardManager; +import ua.com.juja.study.sqlcmd.sql.ArrayQueryHistory; +import ua.com.juja.study.sqlcmd.sql.QueryHistory; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/19/14 + * Time: 2:20 PM + */ +public class DefaultApplicationContext implements ApplicationContext { + + private SqlCmdConfig config; + private QueryHistory queryHistory; + private DatabaseExecutor databaseExecutor; + private KeyboardManager keyboardManager; + + public DefaultApplicationContext(SqlCmdConfig config) { + this.config = config; + databaseExecutor = new MockDatabaseExecutor(); + queryHistory = new ArrayQueryHistory(); + keyboardManager = new KeyboardManager(queryHistory, databaseExecutor); + } + + @Override + public QueryHistory getQueryHistory() { + return queryHistory; + } + + @Override + public DatabaseExecutor getDatabaseExecutor() { + return databaseExecutor; + } + + @Override + public KeyboardManager getKeyboardManager() { + return keyboardManager; + } +} From 67988eb8475f2ef5e2e20461678a23fc5a8c701f Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 28 Nov 2014 22:00:37 +0700 Subject: [PATCH 26/39] Templates for homework 7 - parallel executing --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 2 + .../sqlcmd/database/DatabaseExecutor.java | 2 +- .../study/sqlcmd/database/QueryResult.java | 50 ++++++++++++++ .../database/mock/MockDatabaseExecutor.java | 5 +- .../study/sqlcmd/di/ApplicationContext.java | 6 ++ .../study/sqlcmd/engine/KeyboardManager.java | 6 +- .../study/sqlcmd/engine/QueryFormatter.java | 21 ++++++ .../io/ConsoleFormattedQueryResultWriter.java | 67 +++++++++++++++++++ .../juja/study/sqlcmd/io/ResultWriter.java | 15 +++++ 9 files changed, 169 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/io/ResultWriter.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index ae553c8..b03ef6b 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -33,6 +33,8 @@ public static void main(String[] args) { System.err.println("Error with input/output happened. Unable to continue working"); System.err.println(e.getMessage()); System.exit(1); + } finally { + applicationContext.shutdown(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index 9253227..52b3826 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -12,7 +12,7 @@ public interface DatabaseExecutor { public abstract boolean connectToDb(SqlCmdConfig config) throws DatabaseException; - public abstract Row[] executeSqlScript(String sqlScript) throws DatabaseException; + public abstract QueryResult executeSqlScript(String sqlScript) throws DatabaseException; public abstract String[] getDatabaseList() throws DatabaseException; diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java new file mode 100644 index 0000000..7606bff --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java @@ -0,0 +1,50 @@ +package ua.com.juja.study.sqlcmd.database; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/27/14 + * Time: 12:30 PM + */ +public class QueryResult { + private Row[] rowList; + private Future futureRowList; + private String[] columnNames; + + public QueryResult(Row[] rowList) { + this.rowList = rowList; + } + + public QueryResult(Future futureRowList) { + this.futureRowList = futureRowList; + } + + public Row[] getRowList() throws DatabaseException { + if (futureRowList == null) { + return rowList; + } + try { + return futureRowList.get(); + } catch (InterruptedException | ExecutionException e) { + throw new DatabaseException("Exception with async execution " + e.getMessage()); + } + } + + public boolean isReady() { + if (futureRowList == null) { + return true; + } + return futureRowList.isDone(); + } + + public String[] getColumnNames() { + return columnNames; + } + + public void setColumnNames(String[] columnNames) { + this.columnNames = columnNames; + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index 01c9f7e..c90bef0 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -2,6 +2,7 @@ import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.database.Row; /** @@ -19,8 +20,8 @@ public boolean connectToDb(SqlCmdConfig config) { } @Override - public Row[] executeSqlScript(String sqlScript) { - return new Row[]{}; + public QueryResult executeSqlScript(String sqlScript) { + return new QueryResult(new Row[]{}); } @Override diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java index ca66c65..138d873 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java @@ -4,6 +4,8 @@ import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.util.concurrent.ExecutorService; + /** * Created with IntelliJ IDEA. * User: viktor @@ -17,4 +19,8 @@ public interface ApplicationContext { public DatabaseExecutor getDatabaseExecutor(); public KeyboardManager getKeyboardManager(); + + public ExecutorService getExecutorService(); + + public void shutdown(); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java index 0475ddd..371470e 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/KeyboardManager.java @@ -1,6 +1,7 @@ package ua.com.juja.study.sqlcmd.engine; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.database.Row; import ua.com.juja.study.sqlcmd.sql.QueryHistory; @@ -45,13 +46,14 @@ public void startListenUserKeyboard() throws IOException { } } - public Row[] executeQuery(String query) { + public QueryResult executeQuery(String query) { history.addQueryToTheHead(query); try { return databaseExecutor.executeSqlScript(query); } catch (Exception e) { + e.printStackTrace(); System.out.println("Got exception when execute script " + e.getMessage()); - return new Row[]{}; + return new QueryResult(new Row[]{}); } } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java new file mode 100644 index 0000000..4ad9ac6 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java @@ -0,0 +1,21 @@ +package ua.com.juja.study.sqlcmd.engine; + +import ua.com.juja.study.sqlcmd.database.DatabaseException; +import ua.com.juja.study.sqlcmd.database.QueryResult; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/27/14 + * Time: 1:06 PM + */ +public class QueryFormatter { + public String formatQueryResult(QueryResult queryResult) { + try { + queryResult.getRowList(); + } catch (DatabaseException e) { + return e.getMessage(); + } + return queryResult.toString(); + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java new file mode 100644 index 0000000..8556ee9 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java @@ -0,0 +1,67 @@ +package ua.com.juja.study.sqlcmd.io; + +import ua.com.juja.study.sqlcmd.database.QueryResult; +import ua.com.juja.study.sqlcmd.di.ApplicationContext; +import ua.com.juja.study.sqlcmd.engine.QueryFormatter; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/27/14 + * Time: 1:00 PM + */ +public class ConsoleFormattedQueryResultWriter implements ResultWriter { + +// ___________________________________ +// | ID | NAME | BIRTHDAY | +// | 238472398234| Viktor | 25.12.1984| +// ____________________________________ + + private QueryFormatter queryFormatter = new QueryFormatter(); + private Writer writer; + private ApplicationContext applicationContext; + + public ConsoleFormattedQueryResultWriter() { + writer = new BufferedWriter(new OutputStreamWriter(System.out)); + } + + public ConsoleFormattedQueryResultWriter(Writer writer) { + this.writer = writer; + } + + @Override + public void writeQueryResult(final QueryResult queryResult) throws IOException { + if (queryResult.isReady()) { + writeQueryResultSync(queryResult); + } else { + writeQueryResultAsync(queryResult); + } + } + + private void writeQueryResultSync(QueryResult queryResult) throws IOException { + writer.write(queryFormatter.formatQueryResult(queryResult)); + writer.flush(); + } + + private void writeQueryResultAsync(final QueryResult queryResult) { + ExecutorService executorService = applicationContext.getExecutorService(); + executorService.submit(new Callable() { + @Override + public Object call() throws IOException { + writeQueryResultSync(queryResult); + return null; + } + }); + } + + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/ResultWriter.java b/src/main/java/ua/com/juja/study/sqlcmd/io/ResultWriter.java new file mode 100644 index 0000000..ca56110 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/ResultWriter.java @@ -0,0 +1,15 @@ +package ua.com.juja.study.sqlcmd.io; + +import ua.com.juja.study.sqlcmd.database.QueryResult; + +import java.io.IOException; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/27/14 + * Time: 12:57 PM + */ +public interface ResultWriter { + public void writeQueryResult(QueryResult queryResult) throws IOException; +} From 2b655bf9c385e6403847c1932c759ddeb797c887 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 28 Nov 2014 22:02:57 +0700 Subject: [PATCH 27/39] Default methods for application context --- .../study/sqlcmd/di/DefaultApplicationContext.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index 82644b9..dd0b7e8 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -7,6 +7,8 @@ import ua.com.juja.study.sqlcmd.sql.ArrayQueryHistory; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.util.concurrent.ExecutorService; + /** * Created with IntelliJ IDEA. * User: viktor @@ -41,4 +43,14 @@ public DatabaseExecutor getDatabaseExecutor() { public KeyboardManager getKeyboardManager() { return keyboardManager; } + + @Override + public ExecutorService getExecutorService() { + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public void shutdown() { + throw new UnsupportedOperationException("Not implemented"); + } } From 74e2aef92ab388779e7266bbfabfcbe00b46eac5 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 21 Nov 2014 11:40:23 +0800 Subject: [PATCH 28/39] Dependency injection engine --- src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java | 2 -- .../com/juja/study/sqlcmd/di/ApplicationContext.java | 6 ------ .../study/sqlcmd/di/DefaultApplicationContext.java | 12 ------------ 3 files changed, 20 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index b03ef6b..ae553c8 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -33,8 +33,6 @@ public static void main(String[] args) { System.err.println("Error with input/output happened. Unable to continue working"); System.err.println(e.getMessage()); System.exit(1); - } finally { - applicationContext.shutdown(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java index 138d873..ca66c65 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java @@ -4,8 +4,6 @@ import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.QueryHistory; -import java.util.concurrent.ExecutorService; - /** * Created with IntelliJ IDEA. * User: viktor @@ -19,8 +17,4 @@ public interface ApplicationContext { public DatabaseExecutor getDatabaseExecutor(); public KeyboardManager getKeyboardManager(); - - public ExecutorService getExecutorService(); - - public void shutdown(); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index dd0b7e8..82644b9 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -7,8 +7,6 @@ import ua.com.juja.study.sqlcmd.sql.ArrayQueryHistory; import ua.com.juja.study.sqlcmd.sql.QueryHistory; -import java.util.concurrent.ExecutorService; - /** * Created with IntelliJ IDEA. * User: viktor @@ -43,14 +41,4 @@ public DatabaseExecutor getDatabaseExecutor() { public KeyboardManager getKeyboardManager() { return keyboardManager; } - - @Override - public ExecutorService getExecutorService() { - throw new UnsupportedOperationException("Not implemented"); - } - - @Override - public void shutdown() { - throw new UnsupportedOperationException("Not implemented"); - } } From 573fe9b9bd983351d2504131a22a44a5b4366156 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 12:45:04 +0700 Subject: [PATCH 29/39] Added async execution query --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 2 + .../database/AsyncDatabaseExecutor.java | 52 +++++++++++++++++++ .../study/sqlcmd/database/QueryResult.java | 9 ---- .../study/sqlcmd/di/ApplicationContext.java | 6 +++ .../sqlcmd/di/DefaultApplicationContext.java | 19 ++++++- 5 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index ae553c8..b03ef6b 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -33,6 +33,8 @@ public static void main(String[] args) { System.err.println("Error with input/output happened. Unable to continue working"); System.err.println(e.getMessage()); System.exit(1); + } finally { + applicationContext.shutdown(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java new file mode 100644 index 0000000..dacbc0c --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -0,0 +1,52 @@ +package ua.com.juja.study.sqlcmd.database; + +import ua.com.juja.study.sqlcmd.SqlCmd; +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.di.ApplicationContext; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 11/27/14 + * Time: 12:17 PM + */ +public class AsyncDatabaseExecutor implements DatabaseExecutor { + + private DatabaseExecutor executor; + private ApplicationContext applicationContext = SqlCmd.getApplicationContext(); + + public AsyncDatabaseExecutor(DatabaseExecutor executor) { + this.executor = executor; + } + + @Override + public boolean connectToDb(SqlCmdConfig config) throws DatabaseException { + return executor.connectToDb(config); + } + + @Override + public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { + ExecutorService executorService = applicationContext.getExecutorService(); + Future queryResult = executorService.submit(new Callable() { + @Override + public Row[] call() throws Exception { + return executor.executeSqlScript(sqlScript).getRowList(); + } + }); + return new QueryResult(queryResult); + } + + @Override + public String[] getDatabaseList() throws DatabaseException { + return executor.getDatabaseList(); + } + + @Override + public void changeDatabase(String databaseName) throws DatabaseException { + executor.changeDatabase(databaseName); + } +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java index 7606bff..7e9bc7f 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java @@ -12,7 +12,6 @@ public class QueryResult { private Row[] rowList; private Future futureRowList; - private String[] columnNames; public QueryResult(Row[] rowList) { this.rowList = rowList; @@ -39,12 +38,4 @@ public boolean isReady() { } return futureRowList.isDone(); } - - public String[] getColumnNames() { - return columnNames; - } - - public void setColumnNames(String[] columnNames) { - this.columnNames = columnNames; - } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java index ca66c65..138d873 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java @@ -4,6 +4,8 @@ import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.util.concurrent.ExecutorService; + /** * Created with IntelliJ IDEA. * User: viktor @@ -17,4 +19,8 @@ public interface ApplicationContext { public DatabaseExecutor getDatabaseExecutor(); public KeyboardManager getKeyboardManager(); + + public ExecutorService getExecutorService(); + + public void shutdown(); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index 82644b9..eb41beb 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -1,12 +1,16 @@ package ua.com.juja.study.sqlcmd.di; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.database.AsyncDatabaseExecutor; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; import ua.com.juja.study.sqlcmd.database.mock.MockDatabaseExecutor; import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.ArrayQueryHistory; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + /** * Created with IntelliJ IDEA. * User: viktor @@ -19,12 +23,14 @@ public class DefaultApplicationContext implements ApplicationContext { private QueryHistory queryHistory; private DatabaseExecutor databaseExecutor; private KeyboardManager keyboardManager; + private ExecutorService executorService; public DefaultApplicationContext(SqlCmdConfig config) { this.config = config; - databaseExecutor = new MockDatabaseExecutor(); + databaseExecutor = new AsyncDatabaseExecutor(new MockDatabaseExecutor()); queryHistory = new ArrayQueryHistory(); keyboardManager = new KeyboardManager(queryHistory, databaseExecutor); + executorService = Executors.newFixedThreadPool(5); } @Override @@ -41,4 +47,15 @@ public DatabaseExecutor getDatabaseExecutor() { public KeyboardManager getKeyboardManager() { return keyboardManager; } + + public ExecutorService getExecutorService() { + return executorService; + } + + @Override + public void shutdown() { + executorService.shutdown(); + } + + } From 444b304c99afe9921d5ff438017596ec5f8213e3 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 12:54:27 +0700 Subject: [PATCH 30/39] Added async execution query: fixed problems --- .../com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java | 2 +- .../ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java index dacbc0c..08125df 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -17,7 +17,6 @@ public class AsyncDatabaseExecutor implements DatabaseExecutor { private DatabaseExecutor executor; - private ApplicationContext applicationContext = SqlCmd.getApplicationContext(); public AsyncDatabaseExecutor(DatabaseExecutor executor) { this.executor = executor; @@ -30,6 +29,7 @@ public boolean connectToDb(SqlCmdConfig config) throws DatabaseException { @Override public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { + ApplicationContext applicationContext = SqlCmd.getApplicationContext(); ExecutorService executorService = applicationContext.getExecutorService(); Future queryResult = executorService.submit(new Callable() { @Override diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index eb41beb..e3e2b1b 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -27,10 +27,10 @@ public class DefaultApplicationContext implements ApplicationContext { public DefaultApplicationContext(SqlCmdConfig config) { this.config = config; + executorService = Executors.newFixedThreadPool(5); databaseExecutor = new AsyncDatabaseExecutor(new MockDatabaseExecutor()); queryHistory = new ArrayQueryHistory(); keyboardManager = new KeyboardManager(queryHistory, databaseExecutor); - executorService = Executors.newFixedThreadPool(5); } @Override From 762af3864aa900eef3a2c18d6b18a94b3f1a71b5 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 13:29:28 +0700 Subject: [PATCH 31/39] Outputter --- .../ua/com/juja/study/sqlcmd/database/QueryResult.java | 9 +++++++++ .../com/juja/study/sqlcmd/engine/QueryFormatter.java | 6 ------ .../sqlcmd/io/ConsoleFormattedQueryResultWriter.java | 10 ++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java index 7e9bc7f..7606bff 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java @@ -12,6 +12,7 @@ public class QueryResult { private Row[] rowList; private Future futureRowList; + private String[] columnNames; public QueryResult(Row[] rowList) { this.rowList = rowList; @@ -38,4 +39,12 @@ public boolean isReady() { } return futureRowList.isDone(); } + + public String[] getColumnNames() { + return columnNames; + } + + public void setColumnNames(String[] columnNames) { + this.columnNames = columnNames; + } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java index 4ad9ac6..e3d7f15 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java @@ -1,6 +1,5 @@ package ua.com.juja.study.sqlcmd.engine; -import ua.com.juja.study.sqlcmd.database.DatabaseException; import ua.com.juja.study.sqlcmd.database.QueryResult; /** @@ -11,11 +10,6 @@ */ public class QueryFormatter { public String formatQueryResult(QueryResult queryResult) { - try { - queryResult.getRowList(); - } catch (DatabaseException e) { - return e.getMessage(); - } return queryResult.toString(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java index 8556ee9..6f22fc1 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java @@ -1,5 +1,6 @@ package ua.com.juja.study.sqlcmd.io; +import ua.com.juja.study.sqlcmd.SqlCmd; import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.di.ApplicationContext; import ua.com.juja.study.sqlcmd.engine.QueryFormatter; @@ -26,7 +27,6 @@ public class ConsoleFormattedQueryResultWriter implements ResultWriter { private QueryFormatter queryFormatter = new QueryFormatter(); private Writer writer; - private ApplicationContext applicationContext; public ConsoleFormattedQueryResultWriter() { writer = new BufferedWriter(new OutputStreamWriter(System.out)); @@ -47,11 +47,11 @@ public void writeQueryResult(final QueryResult queryResult) throws IOException { private void writeQueryResultSync(QueryResult queryResult) throws IOException { writer.write(queryFormatter.formatQueryResult(queryResult)); - writer.flush(); } private void writeQueryResultAsync(final QueryResult queryResult) { - ExecutorService executorService = applicationContext.getExecutorService(); + ApplicationContext context = SqlCmd.getApplicationContext(); + ExecutorService executorService = context.getExecutorService(); executorService.submit(new Callable() { @Override public Object call() throws IOException { @@ -61,7 +61,5 @@ public Object call() throws IOException { }); } - public void setApplicationContext(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } + } From 67e11758818f33612b4e6b0d48d263773a2a0711 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 13:48:06 +0700 Subject: [PATCH 32/39] Fixed output problem --- .../com/juja/study/sqlcmd/engine/QueryFormatter.java | 6 ++++++ .../sqlcmd/io/ConsoleFormattedQueryResultWriter.java | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java index e3d7f15..4ad9ac6 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java @@ -1,5 +1,6 @@ package ua.com.juja.study.sqlcmd.engine; +import ua.com.juja.study.sqlcmd.database.DatabaseException; import ua.com.juja.study.sqlcmd.database.QueryResult; /** @@ -10,6 +11,11 @@ */ public class QueryFormatter { public String formatQueryResult(QueryResult queryResult) { + try { + queryResult.getRowList(); + } catch (DatabaseException e) { + return e.getMessage(); + } return queryResult.toString(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java index 6f22fc1..8556ee9 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java @@ -1,6 +1,5 @@ package ua.com.juja.study.sqlcmd.io; -import ua.com.juja.study.sqlcmd.SqlCmd; import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.di.ApplicationContext; import ua.com.juja.study.sqlcmd.engine.QueryFormatter; @@ -27,6 +26,7 @@ public class ConsoleFormattedQueryResultWriter implements ResultWriter { private QueryFormatter queryFormatter = new QueryFormatter(); private Writer writer; + private ApplicationContext applicationContext; public ConsoleFormattedQueryResultWriter() { writer = new BufferedWriter(new OutputStreamWriter(System.out)); @@ -47,11 +47,11 @@ public void writeQueryResult(final QueryResult queryResult) throws IOException { private void writeQueryResultSync(QueryResult queryResult) throws IOException { writer.write(queryFormatter.formatQueryResult(queryResult)); + writer.flush(); } private void writeQueryResultAsync(final QueryResult queryResult) { - ApplicationContext context = SqlCmd.getApplicationContext(); - ExecutorService executorService = context.getExecutorService(); + ExecutorService executorService = applicationContext.getExecutorService(); executorService.submit(new Callable() { @Override public Object call() throws IOException { @@ -61,5 +61,7 @@ public Object call() throws IOException { }); } - + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } } From 60b072ced6516bade94b80b4ba74526187a4a710 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 9 Dec 2014 21:30:28 +0700 Subject: [PATCH 33/39] Prepared last task --- .gitignore | 1 + README.md | 2 +- lib/jline-1.0.jar | Bin 0 -> 91353 bytes lib/postgresql-9.3-1102.jdbc41.jar | Bin 0 -> 592322 bytes .../database/AsyncDatabaseExecutor.java | 6 --- .../sqlcmd/database/DatabaseExecutor.java | 4 -- .../study/sqlcmd/database/QueryResult.java | 2 +- .../com/juja/study/sqlcmd/database/Row.java | 15 +++++++ .../database/jdbc/JdbcDatabaseExecutor.java | 40 ++++++++++++++++++ .../database/mock/MockDatabaseExecutor.java | 7 --- 10 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 lib/jline-1.0.jar create mode 100644 lib/postgresql-9.3-1102.jdbc41.jar create mode 100644 src/main/java/ua/com/juja/study/sqlcmd/database/jdbc/JdbcDatabaseExecutor.java diff --git a/.gitignore b/.gitignore index ef701bd..623e5f3 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ pom.xml # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* JLineDemo.java +!/lib/*.jar \ No newline at end of file diff --git a/README.md b/README.md index 3a044c5..b20ece8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -sqlcmd +sqlcmd. ====== SQLCMD – Найкращий консольний клієнт баз даних написанний на Java. diff --git a/lib/jline-1.0.jar b/lib/jline-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..42a0d90681043a435e2a16be3356e562bec12a4e GIT binary patch literal 91353 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 E4;seMZU6uP literal 0 HcmV?d00001 diff --git a/lib/postgresql-9.3-1102.jdbc41.jar b/lib/postgresql-9.3-1102.jdbc41.jar new file mode 100644 index 0000000000000000000000000000000000000000..4fb1f5bee9a4e6c87ac2b91f14fbeda2017c31aa GIT binary patch literal 592322 zcmaI71CTD!k}ce}ZQHhO+qP}nwr$(CdAd*AwsHDD_sz`x-@P;QD!z=U_+nK>B`SCB z%9RSzz#vcn01yBGS_Ky(0RPtk2>=2hE2<($D=8;N|7QvSK;b{35CEEgp~|Sc68?YT z$$tgquly4#D<~%^CaSDLCo3i!-3v9ufDrI1utQi3$Ek!swY>=uq~PL|+MLIVkmQ99 zzPsb%{OuP6 z!y(GV_n3q!{oSq=i;?t|=Z@Pi} zePDYhbNc@u@eh^${`t=X{_oj85DxavF6K_A&W<+!1Vj9v+r=w6DU1RF000650O0<2 zu!xhTo2e5CBb~90p|i8AlC3nME?*-(LON$0KRDkFCwfZ{l?@R^ZeD!EOWnKeh!dFoExs{Rt#gDHe*%? z?!H_|HzFD)*;k!YEoxY2U85!!!<@NVSG{MK-D+P;wTNeB%R@Z|+9ol_G&jsD>vB5G zdY9C+`)GPz3%&=p>L5RObs-HfMv`o8sqS>Ab5g>|9a3%iio_^dmSI`% z*7o5i&ur)1QteJ2N?y?Y7&{@j9_BUC7V%FnWle&;3I+T7X(~Bkyw}zO5xd;^Rqa!E z8UDUs5V!?tgo3of_%KL(g9tO`BDC(#3n`5OL*(Z8zFWMlJOuCHe z(rj%s#_-jG(Nlls)8zv*y;HyKtbkViP{GMhT;Uy+{Ez5R&Zb~O1~ehAWw+2p8F4B0 z9|$x{<1xuR$ObXunNT##7&%@IN*jBnB850Knnjw}$%i;9JlsiDb##6qgtr82TQ%8%~DFB8p_ zaDsxfA|pbH0jcVPYJ?ymVF3t58(Q5YQX0B$$L9UQ(KT`H&$nN57Untk*!tGufo;sC zwak8J`9~|8&g?w44p-n#x18Q{y#0^dr+L%*KVJ{n0mN@=BX}ZT6@v6Xkx^&D{Q-|U z7!)G}MnGX52&eq$9nYeO!yP0;!SEnHXTzq5_=Y3#@r4n;!W8k5bR?VvkKv4gl!(R( z@ADx6)qNI3Rg9Ga2nSFS%p6QCR3S}r~yNpV*z-^_OmB=x8ET?76F{qsIo7>9R zUz4R;ZDeN?0@sz8HMh+u<~2>~E@lar8CF7SGr=%z<}pLek*u<+*JyGD8Xc!|)Wlp< zX}+f_j7VgKWtkeJU7jRo7p|6JVxNCP)9~ema|UsllBq^xEyA#7<>IQ;V!-zxvmiy| zsnf=eQA>a0tyA$QGe4rOJqv&buNmOR<*E#^e^cP>jk+XDihLXZKKm zrl*#I=sx3s6Dwhe{_2#Q*?XVBf;YLAOW<~_(Mq#K3=`Cr)HzpOf@8S=22@wCW)XQR zQSmkiy_)*S3!{CbTc9ZG32d+%E(6$TsU>3vdnHlT%_NQBg$b&atujl4d#Pf!oXsjN zGelUQi3D_9n9+i4l|C#%Jz0W(AV31LNF^v%8{)e{H;|kNh@+ZTHidk)C}<%uS(M66 zNXLW(S0LXf*hyjtRRdf`GGn0L$Essq=~If-fwp-v$G~GDSEZ^+OllTmOICI9)R~+x zBT8(gVWs?CmZQ*wsoFNK%6Wb?562pz^-Umq7hPr5a#j?{NTqgt;G zZvyLg6{d2@jzb_Huk5J?cz5Ml#Azak_k$hwZND%9GkQt*DMo$< zz~a-$j}sNjEj|Pc>Owi>O;4vHEh zhJ{4aOVWKWu;@K8o#?M~Z`rUz`*SP2ty*3!YJS`MG7P z`8(pcn7lt^slGTR=zeiKUkKfjTj98-t{fUJ1sTe9f(E$hLMRfN5as0v9GVy?cevGB ztkzmE7n&gPyzv!}Tq9shGlthjLb7YMa0~V=LMdHK!ig@9tAdDnMgqkeqtGzK zx;KZM8>j`bF9J}n1G(M+?H-A(o)P(O-jpPeTrecZA>9SZIj7_3M0c(ar}sK#m4rEu zPEd>bIRs3*Cx`AIbBZJB)YJ3$mZ*7$40`_ocYITy_JAU2pKsj0WBo?k4wp})D1Ra` z$@Yk)V=XRu-izA1kAClfsen(&o;b}+<2GZ&_6;}mY1=uk= zCP&3b&m8MUKRINoCAzRa(Az){`u}w?nNxwj&cO!&*yaZS!2aJBlmA>kw4n`DRx|(n zFvoi{cP20(H~=`Rge0KDBeJ{!B^fZl69C3kaAaWuD7@HX=~xr z7J+G1X|#4(xBtFrvuppo&F9{(_PKT4wpMiYn(s}{42i4~=sf>D@Bim9|HpR@clYb= zk{)q!(#k)ArcWuWTIh-3mP+u}DwrR&2tXhC!1|plxSsuOnUHE98>Vk@FB{~TnQRw_ zDA^wJzSbvOrhj{n8>DIaXqIdj^I+Zx;np3~r(L0seB|}Pm#{A%9{~tH>#GxCdlVk? z>m31?d>Jq8lz54UYStKxAFn9cW`yd{$5Uh`GJfkoHqpzrmw@gxkY!(l6FOUJ+?`fP>#*Ec94kNt589Z%qaM%SY-m zeyUydm|wLBtaq1S{e};_p%sxodRgqCZ??%lf-iTt!9R;fw^?7j$v=~O{%MiB=_lYz zJ*Y*kU-V6<_*h@{gqsumOmDkFE2I2$gVX)ekN9BUl6m}$@8x9Q-3))2E&b?b=}X>A zCx0v-{4>9HA6}?~ci|L++$X2&Vg1DQc2d)KC2rfve&q7{(@)Zuz6Ou@ryd!Tf5wk~ zSl{Kre)J>4-sXt{`ZK=tB7UZBKe6dZdwys~!ry`c&VPLDvA+r@!wdOE%ZwxxDJ2x& zg)F`ZyTbfQlsa%@p)#lD)>N8hTyrXm%D8q^$TR-d`m=1S zl4V)ORh?y3EUP@qs+m=rDy(Hytg5+{C)rkkm1tR3iIs9}t47MXMpdL`T2@ucvaVT` z7qYE0D&^T1Fv_`>Rex{UR+*M<6M|hSTDc zz;5)&-p<-8osao_Gdrs!+H=sPtA2itVb(^{{Nn_^B-ciN%#BWRF20=ku zja;pO^l;!#8*QpyV$}#P(`7PrPE6_NS^L`^C_sQkE8V^>-|et5SKQfa+oouwK-Tuy zp!W1jjSd}zn^c)pEfqah(R4>j(hG!1_&-;x!imh zk|*E*2^)D6TRyMyj_+-Va;>&7+rdkKee|7}%~ViqY8_mR;!jFOm$Pk(BVfo}OpNbs zYa0Q3X-7;(j5=U~(1q#?*O)@ZB7#1nOt{vRP1L6V$;Z*?_G}GM`hzhW7#BySHa6Zb z*INNm70^czRHEpl*5U> zZu;HWW}0GVP0#^b&qVT0&W zG>#$VRrhL?Wm?VTX|b;3Bq(BI+2Hhf8B*rih5p^Ua;Bs;t?F^GmeWxjVmk`^J+f{z z+!>9(mp0-C0TElal`Gbfj;c$_SducKBZ&21;L2LWyAaD)8k^sF_UmoZTr9}M2}*rK z4>x&@F&TD~s&U1RSt=<89Q)iTurWlw)>H+}XEwm{Xfl>2J~1p~2hwZN*rb{~d!mXg z2-fo@$dDyC&sE|NK{3ZOdkqGG%HC5CP0sFn%};}PVnc<5B}rK2uy3^yrsk3i#_ zkeRucf-^g|Qxd2OS9ELS?r8Z!98UF4+rId$8z3;H+9!Jg03Iun}dU z7^hj@jMt#ixaM65;i{0l3)F~eHk_$HwONBnD)yAlsb|Bu2A0yPplkMsGCdvdu8dTb$va7_G+N?%jSy%F{S}*!9`ZKfE$CRF!757G}$g`lu zMt_sJ_Qk)HF)v=BabHw2L)Ax3A;{2Qr12^K61Fe0Uzoi~+bkM*XdwnxBibNV)A{X` zvaxs_xj3zDRlP|D3$i>q<}_msl(Pn^c#bp-57?R0WGPycDcsP$|74rW7Z& zb%h|`wDQ^tJf^3?W-0QUV(Z0h>HB%lu^g*urSyVHSl6zS`fOh2ILZIw5ocBVLQ2nS zk?;e6^N=_iw9GU%6Gnue$cp__98svr!~JP#(Xq|4qMD{vdgjbZ+E+@KSj?}MWnJ^a z>)CSOF2*fG?daN9RJ+hF?A3;37`MO&aAO^vna!U3dz=cn#@-JNU8Y*+a4rO(xEfonhGy?~b;N*C z+=y)22TV~=m*#d*K`wn(Q5%B}{fRgA@>RTY5u-*6a5P*=a^#zWi}Xw+oXOry zl6#8_6vv|1Wt%8Wqs`h4K7gDq3zSes^3B-20Yz4msUFv6y5O~v1Ob)J>LAA@*V4W1 z1iV`r|2~ITxTU(Oo*jsC(oJ#FR57DRs|mfqNYf%AO)K%fO(G>{*MFw&9 z-T`w$|JnR_fj%?U;i$Ib+E@txWzj-6SeP#Fp z@tikmYCmO^oIdG~ahjJ-{?=NJ)^cB+viqFn?O6(u{M=HJPXi-(6|WX08IYII!yG!o zpM-FvO1W1KlL~q*tM(71kR~SHjH^VHLh3UM!Zd8ii{h}4rqVnVK^4C(tf=!4wG5Rm za<7db>Y@h7NjhOSwyX(sJJ&QXDIorJNg3}=rFnva%KAH~==MpYJZau(V43Cd{`kffy=NRE^+l=?rFrR`e4VF<5+9lwCHe}(GF4d4 z*OV6CO~7=~Ph;T-7)5X@$tSWsMczo5F$4r8%4-#_4nn&j!;`x3V0=jv7nlgngbhB; z4po=h#pPbC@_~tMiTla4ev8-+N2zRUM7X#DJkgDpNVEaTSx2`LW{BJ7br0P_x_i@c zG;Y*bSR*m2?1*ua(iO?~OI?vz9N5o22}f=D!8&83t^s_RF{VWvJD2Y0tEHIuk_yvB zk@}-eth=*`)L7@E6g`xm?Z!8@nrq?SAmY+=0w-!Wmlhh~E8L`-Oe`6)-jvGV65`^f zLOaN)bQmEdUIG-L!W|8s?76*_9sorf?;>z76chFX_Re6t*dr(2GYJVWuoL--`SHlO zbC;Y)u+exD#oGu|uO1Fs_Vi4_!AA^QA>1P@C+?~6r_MNzeuzTuYl8DtarB78Hg?uk z5p*eeIsxmV=#pxBX~8hXEoLiky$~pDCFxrWnbBpX^_ndp{6r}4NhiQd*OHo5nF~ht zZ&Ku6!)Cv;K?S?gLkf6Nw`$}^lP$+@Cd;7|dd!Urr2w6p@rgp?m?m5#)*u`C+?(*u zqfNVveUt2yC37LHpX@@x#qI8zGBIeRP8|XXCrd)`=PRM0;W&cEP&txj+bW9ZsrNc? zS^;Gi(;h}QlH`U)F0q`Bb=lHZ9qBI!&!W)vGR; z5#WpH6jWlr3Z_re9qkg0kN|~Xa17@qJB)IevJ8x;di`|!nYMTFfidrp zlDh~ZowV)UEdbbJbT_e>+g;YO_0erbV!?Ua*x5Y{fl`IU!g(2Mq86uFJLJZmR>bR0 z-w(;P88+d(X9rSo*1>aiM((Flf-bb8r-YN#b*s^k<#M;Q?IKN|WPLx!7Vm{QVk6VBW$&3X6;C(1Cb;v*$7d=Q8ioEWgFtA zt!PkXrvZ&Zv{m%2i`bW46GyLMw-SGq#GbSt!D@b)`Lr=J(^d|SlcopzuD zOz*vYR}_(0o{k~ThB1_(%S57*73Wf~$2>%f@ZY(VEFqRNyWek8MVmrXL#+p}s;N}D z-?P1L9s8i*7ucH~0-tWa3_Os$#QL05$;uF!3l43t8LW(fh^p^u-QB#4!NgJ4b_%J7 zTXEucgXSC|X{f2yz_2=$(uE^Roe(iaD$eMl<#K0WO}aQ2b6s$D)g@L0lk6Q`k{-{T9;FEb)nH;j!70T zUpY{UBZd^bLGor`&pgBH0BQ7_t#V$kJ=16xq|(Z`dJ!SZUAnI%06CPvb54Vwm@|6+ zU3UT(?>WvI9&}**{BVq`Xg(oWfgC#Wpv>!x?K+i4aC>fJ%EkFB|01FkX(ObMgNLW{2YWD@r6n=ecp8p&-V{J=nv9kiX;t9nlp(4&>*OX%uIg z#>_4B2w%DeQ{t{ix4eUW=#WVnQ#;CHE@WByyn5z`RK?@5i$l|@z9Q_^@yWqZcg^l+ zXTCiYVKda)z1@#}JJ_7f#W@J8etVGZgSw=York#D0joy$HutW7AB13NAHcYA>k(vV zZEWeV_{BR8e#LVt5IjZdgW!-{+c>VBqJHB_P!<`ragNK(j>ov|n9nIOYzOuhS+yNY z|FURPzu?-!1$`)*x*v;c8j6`p700Aaw0GZGD@QZb^`HJcnzR(*0PQS?+^41vjWm(I zEwy;CnA)Z}v5s8Rpel2=&HSWwJW7Id1BlSh^aaU2EJHGEuI+VpcD~F?8(SM=17T&a z_8O!s;1`I>&8_dZ;ku`Fn=eR_LS}ZuhjZdM^F&=unMz~KvA(3k9^lga*3O)Z`O_HE z@4WpX266>t*7IBY{bjqQr?faRjyxKVqzqq?QuK`fjQs3J#V<~jfB17AddENTRUfVA zhg>%OR{t#gh&jjaPu9+&@!xX#E{E=Q+C%K@74-2>z$^b>5d2A@+lmK`KJMZlQNQ9y z@sR-UHxvK|3uP+lGf45_VaJ#xs_FUs$J zSuNRLwyX6wWeUChAFB~R1!a-0G+CgEX$ru((zYmNpe<=!jc(+*<@tQGpP4FQZMiU7 z!I;<#r$#ef2s-v1hi1xw6^|8QT;#N6J#H9O*FK5=)FaN>zbbdAb*ah> ztMod)?z>xsSB~vAlPDm1B+S*-Lcl0rPphco(-iRFrw|V!E-mRQ*sF-g7-~_>7Fh#_ zyW{^cd&aw(E1_hGjk{lQMEnrp2Ixh(qrP{;9J4E+*p_HMC#x#St_-s)9Ce{yaRLwV zrME5lEU5XU1gzhX%rCz@GwjO6DA>b3xt595!h>^sS9l-%8;ydwmomv;b_AKi*wnP1lM*p*=u_u$eI zK+%y^xMoq(YGoFwXWj=f1;gjw2d-lANE;l-b&i1X%TGhE$mE*WB z$159!R|t3=5SO$3ExUa24Q?T+?s4wN_WLSMs{32~PY+Lcs;>kn79Fb)-Lk z?xyOsU$7bKsTYU2YFkr*9UW^UN>P}}_jqYwMPO1FUQt5%kQcn7uv*J)QNtdmpsX$e zQLii)<~4yKEU=o*mY<&KfL`PxT{leo>)Ja%XiSL6L*GW zVV>k~p6FnPU?;vr@<+*r=FT@}c>k(*le)zhZ)(|*EXhJ8_z^!qw)1gaaUA&Zsa7dGoIzFXjaxbEtkvE&;4 z<|U}0tnBa?oU$(F7Q6|zk^MRiKu<_}Rqet&y)B2O>6ga5`sIzP zdw9h(d8mM*eWF`V#lBD*zG8I~4QgNZeO>gz2hch-{0v-Sm*43Z%782cPWlAUJM8H} z^9v*fEf9*)4{o7d7Fz*#eBZ_*{O2di&<&kO@RcC(%a}qRBa~RQ-z^KF6pEpi$V?Ta zGFeKb&e&qMYiVdRoE!Q>T@cr;n{x!y<3N@_#X?;5=UNt=WuaL-GTCa4_t>D{UFKW% zg7A~9sm$+oCp_^_v?w;1-)ZW3Dxas2^*tw-i)n>qsVQW9@Q`QB<7H~^%c}N%Ws;-K zsO-!j>A|sfF`J(uD!|(B6#HZ6=R+0sBw>%y?PGV3G!;p+I3-&%{_#w}twQk=r76Qg zTh>}d>+9IjSM^(C7#-1C8CFp|PS)AlR#Qd1)8~=7_wu*pb3LTN|8loc@YtE~r0Tf@D`{*?04@KE}Kccc0P=?jscoMT9gmr%f~nZLH8!zVQqQ>TX1C z{(?c&mK22?QBy-^97gXhAwK)0YOrx1siDA3JZuHy*w!WnozH&a{oo_z#s7q)4P8=K zj^J)E2k3fSB3i)G(G2K zohWf@sC0Acyg07BP~sER9do^Ks#8~YNbX9?URCXpyFQS;u!^g`E4OjOEA^A-U&O72rRl6y)|d8fVmyX(uLNG)R!c8>RMp* zkgGC@o1r*lsa0(pN2r%94RA)g0GjjVub#_wlJdZ(7q5s<^?d39?B$m=CVwv$sh(2; z>w~ujd%^L9Nute7}B%UXgu+TjKfbC~FoJVYRd+{UHOT*V!PnJtsKp=iX5RV^!YB;_L*Kp! zGF~BWndTKkwR-46mIr$Qt@R$=_;9b#Ss^^~tE9Ohq}$6b+#yk|B5u8?T%aCFM_+=E z_6~xwUMGW42#HfSq_;o5Sxv%^mDP#D^-)3+6;9}`eR@m<_#!jtPV1l+FG*hqSF)g; zA`m?aDPwpWFOa;Ev9Y04b$^<0DeYq263!}_dPv=__dRnh$mp#~arDk_({&rAi|amy z?hpB4Pck&raw9_}`lJFqAw`dj@(O#UP_LNl1?;R8iU(@Ke7FNerC^$u3})Bn^eREJ zsGsr?3KOxp8sZ)PDPH_7h6?erHT(jr?!GlIougk598XyNJaczGUvIh{Mj7_&qO5V~ zV{wpHMVjr+>PAD_r;8VTqW+iHv@R$P;_}Q^qTk7r;YZ95XBNS@dvoi@YF6+(5IMwL zxm6b8w~Hy0Dvic>RM3TOR)L>v@(MSLaIbbjR%Q<>o7j7AFs03ALhhl!H8}HcF(kiq z^&444vpH0=u=A5D^?bWZuhx$OGozwDObX#|MYbkWU9hU%;7EP~r5{ClRWT*J#R;hd zzogIJDksLgA#Dk{<9+Ry=I`R^I zv&Tge{Q#mqgTSKlN79_d85wi%@#w@NccsorO}r;J{{Fo_iC9LQD(W8UgX>~8Jt!t_ zv8W#}dG*06D^7Z}(!&STqielJ{G(jsDBt98r=llTK@FlWecXa>gGYCMac18J;V=rg z0lb$*-p_NrUq_t^zrT+Y(a!_v^zTHy8m7^2uFoEB{}N(cK!@O63+y}gC_V2^xx0d5 z3Io`UyYaj1Jk|kdOhEqf!cZA9zEZn zf%5kT!yoT_f%4A=Ur+b-kv%fOf4uPg1on>czOX&tqJi>{t}jY?z6jh@?K*yYX|_Gf z2KE72ys1j?e_@&6{z;Qy`|8@U{#ESjnKy?}h;wL)c4cf~yZ#({F2o3=O01*E7roMvs zf0Dy2?d|@fwePDaEk7iHkSAIK6hv?kosDHn&o)L(4oXO(YE7WWQ+urxCEISNPV7G$ z{10+qP9402^;Kar^RBU(`wqX}F2Ej&7M6{5gK)tKqvvQT{|hdaFWwl)i_78M!4NYs zp0s?!8zaN@AEHXx0+;)P1_?@*U!yp_Ts&F18^A!HU5RWC2+YVsq_CCaAX+PmMvD85 zm!Fi*B}#cFse(fLQATtNr+lhU=ZhL*Dsm~4f@>yUvDy40E2)*2Zj~j)nj;W6=W8i^ z$~Nd;CkjyfPn#Q2j?wDZO%e<~kS9nSU;1m17C6+Z#AZuqG(|zNWE?9Y;1u(hz@T3K zfzn-p?Ue*>a=GAWT`vXE*Wq8195tul9Io3p?j9Hi-g{(m$$cPNncK6J9e3{z`tXtk zl~Rzd9>(7{tpWi8a7pzUHmYjU`>q=5 z62NRKHe`s6vR|hLm&pI>FEJV`vWmZcTK+4<|C7Ju>|HF)ER79a{^>E**haV@28@tf za1c>2WZiAU#^B=W#RLqNeMqWGSx6?IqMh`ehx5l*Dg!z*EBz(ml_r7!_l!Gw|9# z+pbEgZc%O1eXtGbU{BI@H7`ZnY&Q5uFucd!#J5)1NDz3O&BJfe0S&wZ?5`K|aT}ej z44?fQb+Ix3Xgcq&g7bgnf1oZZh%1?z3A;Ku+dCv(ILGU}p2*_hnRB2-GxwoB8``c-Cfbz5QUy_a04fY&)%6rh}mrY%z zNvL4r#fSGfd6dm6nKI(~Dkn09?$1e&L}+zTlrJbB`kUZcntGD`*Dil1NNY9Je=WQx z6$ufo5j!r`y>P-qQ$GfOUQ&i{ip}1K5$h_IB%AdP6+V(_cOb-`-kCJ}`$@&@R=78F zo;I1?MPh~K#rP|^qo8P6$R$yDOXe}&pU?egiECVqt z@_s%5G6Wg)VN57WUtsR7q47TOuZ>T#xIO$82&3d#&d=QD_VmGJW&j+a5nyk;U*-rh zq|id7`N^X}8c0+|Y_w*hL!iKJLk9O6_Srg?k4Z(Yi@w}AaNy$c-}x$P6C~tHH+-qh zM$r*>CiOm9DJ1(}=`LI2y9=)7$!_Z??}fc$csuqHPgN77qeq;KqXU?+i*UU|uBhBS zf}c+VfWZBcJr+eVV(_s&fw-drV09LpYD65NxWLs=<5r#Bg&RW%>ws`hbyrF^;>?CZJ+zqEqHczDt;1I1UT4-3G`xPo{fh#{rm2&Bk7FPhS~&1idU}>4Vos z4N!beU&VZ2)<+-&63uPEmj>TVzY2O-!wfFvjj-Kn(!=j6++Y8hw*EV>{U1d9e`Bp1 z+dFvv8+D!A5D#GeFOuo6%l`*=|DP*_|6V5fpX(C$v;8_B7#Nr_7@->&pBtE;8yKJ% z*v&)HOwvk%&*@i?lo*&>tOdEe{49eQ7~Oi*(MnL#%vX<*8L_vgfufL#`BGH6m3`~)MEy2c~0Dgz@1_mYuW=22; z=9#h?niv=wm>NMm?1VAk(v<)r9GDynA|05W2_nG>;NSj|2jIVE|9e+ZnUB9?5JIQ` z0Hptm8UJAvSwlNRb5p1PNEWT?m;NZLn0{p5oEx(Mj1X7^2sfRA3sg&@v6EeaqX_~? z12$ETP27;s*}10fXh9Vc(Y^YuZLR1v&q+ejs?>uJpue>)N|(}hKGEN5^*cy$< zAn;HvQ+&S5aPrcCkA0-~e(U*w&vO(2AU)`E`pie)9)bgr_h>|#ll}=uz1!pD{E~o^ zpWe^l`RGBX-xCc?2N^?|>1SWq>8dVvFR)ej_Ac-)Ajg2BPzZuLd5iU!S~)neqfJ{w zO}V^pK#Uv&Tu+>(&b>?= z?AfHA4dYNsH5_rxsJqofrOzBa_hiRHYVhHF2{}Cb8>h|M(N?4V3O*+6Ib=mRKpPKY zDG}Bc_p>Ef%ULEGp8YjL60`6FvlO&cInF^NU9m6halA!ks=jn42g)->!t$Br9%?Ek z#CD}ws|(3XX<90C+1P6T`*&-|aYHIPIf&oPiYfs~5w$H<$FcuI5Q3DRZSZ7`NbCvk zWW{8~s=e|a5gS9*UfE1p%1U!H@vgG@3dB~ufgl|2)zmH>Gc0K8Xc1 z%!I5Yux2PwIjE~SmCON3(AZKP0*XYo&MIr-G-BxMb`U=%X@)LW+9cR8X9~-hBk$yG z<%Sb35|B~|`fa?WWZuPa(?4O&f_Kb#jJc4VB`Ob)SFImw@~A8+OXxA^U3~*?=4k*Y z_@&1{<(5A2iE?4jFBLR>Q$0Z1^omqB1JgkK%J)!us*cchs`prabxriUWe09HD)(G- z5HZyp(d;NRSsSWgMJm3HASyC@rfGhOF)f&}thW>M3Q-qp8xKllc$Kpf^|&(Gt;1oO z-X_DvR68S_fsa&vfzUwcsy(6lP+wA`_4jR0XY5dD=@T+!c7+~ws8hECZm8*Z+JWvW zJ<+cj<5WB2w<IQ%Qsx2S)^?FreXm2+YHnHm@S*7rXB`CDbzi-Jx_(@x3u>Zcf_)7L)BqcmVBgRv7CqX?&{`hhjD4O zg?{q}_xg0Z%eK&Tlz|dV!D?ZyV5t};)2)q1Nv%Y;JXKAItZS~*+cA=sGDYs^B=Y+8 z(Wa@fzH4^bahXtqoYuSTD%Yx7Vp5G3Kk_8e?l@sza+o<{6iy#srj>aN9_c1|{~#@e zW!d|2`94bV1_O2+_WMJv1*UP4n76V4=A4!325}=z5Q-OXvPM%XNMlZZ&GqZf?ZB)? zoVnkN{jL^fT7mR8|EX%zySDs`KOZlTGdSD*4Ea0TggIuuH1?d3rA3ZFW)QQ(M5gkb z4s5LXp5JQH`C$hFU0m$SdPwIAP3xM%t(od?mg9^!aBBU2n5(&>YvRLH z14Q(D;cY{WHVFH;cBdD1ZD%ewc4Np+T|xiS5SW#YP`B2i7>Mhs>TqH?3zjf&h2E zc1IV$6iFxtNE;LgXqzBnNBscd4(O3%-JlE5yBr;BVT56Qwj>mIR~VbYs5 z_d^ZIkurW^)FH{XBl=(mj6_N|0BJg;k3b{(+n#C~zdl||hTEeIY%paf-h|UPUw+c% z;<=7GOX6v%aq`c{o21^TiLOwT5J|*{qPt@2kSmjQj&RhURk?AXbctHmes0x(JS>$lc5#eBNU;In@oAB zIQXRf@(&|VJ@tDBv@b<(dPQ!>A~+{`I7CMz)BaFS|JbPwam_Top)FuFjwBXZu*tB z1?u!SOdZzq_w5#0{ooSP{$O@AznC4;St6!<{98pi;s%ZN__t`%`dd+w|38W+c?VOc z|9kr!Hz)_hh$3q5m;;EiqR2OZYj-t7&mclH7D5pT?cTa9BW1jluZL|`zl=Ia!u^ml;fSST8(Q=EYf(u)7l#}S9NfIT@^b{^M0PEO8F_p%2MK`u!gCuePorL?`-HdN2~27pgmMq~$< zoXLLMJCl8S`3HbORGk390y-pQ0kc(~%RB4$mDruw;dKlGP2Hx+=wMl=K=}Pwnq2lV zA)`%YiK3=V+(i)t@TF1aMo&cU<<>xp^9tD!p|=% zw`RTXp*Ikr*y=g|gmK43gCpjL4(K|vdDfPle^nPqGGk8-8~_0S?{qEo|Dx_cK8yWh z>*3()qU`c_YSQ*UD(zS`U1jW3Ox}7D4d0qTBVfls0`gd55-2tWtMHLV#euZxaNu7U z+_pUu(KOl?ku4AATP3l-TO@zC$eMF?o{9Pn$8s;bL`7!D`KHf2mA!rgf5T_CoO`;F zdV)4B8+yEMzaHkC^5|Flf4$nn1H|mPBl_U;Lmay5KoCO_$M|YMI;N!&5(i@rGHax2 zstt?6b`sEqI%2*v5NSXc5zwb?>80<(Vn$&}3H~BXaU_l5?V!R~H|f9|f$j8A*4s(h zPlMr4*{6lIw|+|u!>4|$aSh$Etj@sIYL{|rvq;;SfG@3mz7&>(b2jzX8SGcmJ6?Q5 z#(~imEbT~RhlZM^KY`->j2LpT;U23zl&n@@SazGEijmi6s>2ZWEKb1HYKZO>a_jkt z5hAcOl?h!t*BQ*At*^}(6*VTEPkphZwmq817|rQXM+1Ht)sftP4;zE}{qd|~*lUwK zz_MoH#-Ynx5IDy5SrKk6)HAGbAfqRped!eUw1_KonM2x?)ttsli1#@DF~4YsSM;t+ z*RrMI;o1cz`K1fpme|K*T*EDd=@TmPQIy%2Goww)e7J|eHgeh7a|vC?00szk?52G6 z71CqnQ>Mi9s9i0jKefFlVU6O#$)(z|HlnZ-^DNDx8i%OM=s{tQ*gDM0XbxL?(gVh( zY{6-7{cFC3L|^ObKo)bzvN(b5k4x=CVn^}9rs z&Vf6F8rPViPU5Z8b%?^`!OU!@OKYS2D7i$tVQRF6GZmTMU;&=v(xC>9T{kaDoBkng7&Nw9Qydi%pdraKW4H%u`FY=z5xHBqUtXYh2)=x;#X6JS7^cZ$!!8knb(G^d&wVz)H*^E$P zYcx#SpM56~(4@Mg{20~?nSEv0ZfsC9_o8dTvRA^e2)xwJ)aev|8LA&L;>5-pZ=cv$ z8vq5bj+Db-#?rc^r)K8l$dt!u>26ziNa!w{w+yjIp8eD9$dB(t{A7TvwO2R8cW43( z_@kR7dWX^_dF?)f6E^1NJ zO0tW{D(8nQYu?(U(Nx{~t)i-vZV3Cz4mGoUg8r3DWb@R*8Ku=Phz*fM@5#G|0}xj7 zPgAB#h3jikc!GjA4-XXmp+%^9o;+t?I^jpyWt7@|l?VG_SIN||nP?ONIWLblFOTe< z>nf$v)skwNsoivF#c)gLOZ)<5$i1mjF0_t;ikQUNZ#fR>8cuk_mb|-j+z@2cp>(QD zq$u*QNbuK&PdnQ8EZh=M`K3@RNpvSG3vP=hAg}N`yCnVUq9J~?Gl-|1K|ggl{i1SW z2krtooAlO>`_+Cfp!g71E(GZie(4TVu^XI8edifW*L~}g7?qjC4Qd**eCF(w4;Mg^VoK}WkydOp~90a;F_uwV!pu>horjudl~G$ z@$7^DkFRrzk}TTNb){|Fwo!?yv~AnAZQHhO+qR8LXQZ=IH*a^J?s3jNeIMc_V(f?5 zW9>EP{{L_OE5mEpUV13q9+#r#EaZvoFYDANgf;Fm#-C4MiOf01Rh89FnPq6Z#syM@ zPB6@uwJRoBDz6~Ztyi63IH!*3lgz5gbpIhDm>P%j2XRoeswB zAVuphGJYt_mDjG7N2+)8Oy^!(vu*d&CCjgWk<4px)h5!u%d->Wj~}%E-|{T$?DQ}7 zIa%e+5oHzaQzapumSF_a%FqY{06ErR`O|+TNwp4+6CNCv-8QQsMWyA}CAPV-p_o`= ziL`kFx%oy3o%=&SEKBwYgb8p+2?)PS$zpH$m21t)MKf9A6NL7*=gj)O_ip>?&bII8 zo2@L+<^`)Su0}86u>8sU+TVKK zptbvT%+z%d;GS^@=Fl4s$Wue`qE0*QGN&bS#;BiGXV$g!>a6`52wreS2Tor7DYZep zu@8d&$;}iLDB2M*Re^&2S@*=U8k;DbKe)dX)3RyS_B-^mM zCQ7g?ukKy@2T|nUDq{Or^Qds3dl+G4v4jvjw$dE7bRA zN!uExTg+VJbMHeHZTyO#IcZRg6P1O3+y4DCGuh(Ura_x+skn6NVcEY+o0Wx?0(}?M$NP4?a@!2wBi=Dla9%vE*L=#-o9MM z*s65PE*0)al4B8^`A&Z{qOB1iuX7AMZDv^M0!Z;$XajNjS?bR;1>EFIv@gH?*v{Km zRfk1p+wt+^PKZ%A1w4}-ZL<7X2ZICXV5EYH?iICYm|5Fut#c3&@fo{PeiN$-z1fKt z`teq?;~wQ?Rj|%}(@Yv}^5?1*O4O+KChm%IqvDW!YVsY^wJBHagqtImAjG)D(N!lY z_}srY3SU56Det+t$Zf;~QndP_ZDP z?R6o1*t}jdX3AZXxoN-C7XX@HW_hh%!2iCko!iR!^6|y8#m+OvHqR>PlHf-9@}wvv z&XEiSsmzI1<~D(=oe8dm3|74&Enq$<7pxX8PqyJJa1~MGsx|IZHrGJnyFfjamnhPq zUb>wN{Ehsej`Uc9*tg9m*>bQ}Klsf7SZ#tj#w*}ip5J(aytpRmp(rZiP`Js-NXbC2 zu;SiSxW5DzUYGxv~jV38q;k+(Y5H266~sR03rVmd^FDF8>3 zA@*8!-j9dBj7P7W4p%9iu+Fp`sF2SHJUYm^bGe8d$B|oU40@i46}^?V;hXnc+{`Bm zuE8?WQ>j+tkf%{QFG4aRTgPY4*gbS`KuKEnprh+j3><( zy=y-gSPli=VMsTHh85L~uJsS08zz1~BckwYYPqi+;Z+~Rt+kB4$eedc(X;r}D^E;& zCq~;xM!#^!-dS6?Cra%asPCHGcO7<0jedKF&)Du;mPhuwB&&pL>swt%I>(_Ao+#G} z93-eLHlyTlzK`&4)W`0ttBvv)N{O|&9D|cl=wsaDh`s?rdBnq>J)H$JhuWit^M!j1 zZqkjORN2$mDZ9J`4KREa0^*(?(PJlo7?QPv_hAwa(|~+XuuCzJWKMuJOT5p03G3sKA23 z;=mnag5|h=gXR?zInGW;MpoiDZUpo|G`rD=3t+ThdCx#zG-p(NUc>%ls(E6WHhSzbf*A%d(2DYq+U}}ApQ^{_G9Td zJiFOEzidsuzFGn3-Wv{J{v#159;?Cy*3_tzccVHkB$GnyJnYaU#)Lo;=D=uoteOiX z*`GYP_wbFQyioB5+y&Ncmk!I;pia=oiH1ij0Gs%ptGKZ60Lw^0hypeH*y1%(b_kd`TQc7!a z*F%G71@*zHO5%{KisD3X)A+>rt4eq* z#T?pmW`6k0%bQWMqG<%h>@!ZsbcF{_LJR&uFfDv#=OX2ng)Yo}iJeQsRon@lLf6Ts z<8JXxyKIF~7!>ul$SV8&NdEu+ z|Gxkm$?@IaPz!2stYlgKdlTqH-$)9*k=~RFAtV)Y608_wupOFKdeNGUGWkxVKg3=> zB7OXZ+=L(P#YXPTBUcMQ-|h|&ZsFwo{@T7BmkU-$dBMx(gxKVVLk!VzKBP@h9%yM5CZ?dU)s5m3BqR}9j+abLG>sY4 zm90z0atR(#pNV?qP0ZX>$@ELQSU*|wn^>JlrVJ?)rC2UKlaf~NVg~CXN{qca8l9&ToSV?cz}bD{tGVkPH*0XreE$UsXtkDP0{IRL zg#QKu{;gp7z1;q1=M&L4bh34D|1ZH(dH4UuynWKI8zquK6X%x?pu0oVUhhNR|) zj(`J#n-k$4q@5(If?ID}XS{OyyV6_0kbM?et8AL5SlS}X_aN)=_hOR_EOv_v@<~h6bZFIMn2ZAw*fwf7GHG&CFJ!&-Xpd$hYd!Vh{K;Y0rVOR-u5u2}H3bwJW zm?&hE`b23f{6G(SW8puaPs#X~BS; z9eX8!roD>$mNrF^(Q~={*HjAK1U4V}Z{q?zq`8ee2JNDq3s33|l-aHQWAxO-+}9y~ z=iN&qGR2`8X{F>El*2g6f#P|b0 z;9PIV;VPHXH&o>FO&xi-3)ZgH^w2+A8w#F3Vh3Jar!3*U*3nzmY|VX1YJZ*FwFXkB z9IEx3QuD8hy(${1Y&v?SxLURVv@gJGasl zIj6?yM3xZ71>Lf$95;m-&s z{UJBM69-fO7Z15Tf}&c9HyVo%Q>IiK4v7~%VmcJ*Ezsn_bJT3;AAR>}wISh$23GVC z)CE6=$9ch*1u_Zgo~2lzlLPTUA%%Uc1S~B=H3IoezdMW!W!P~3`N=b~4&4RTEkb=E zq#ezG1^*BTEv`KB(d1_wsIQ2{VZ_lCgR<&oIi;L^DSHHKun4#-b=^%F>jF79=;M0X zSE591+}gjFI&T>NymbT1BzaSQhee`&14hLEPF?xlON4C%rO#k6|KxrkOVtw_# z0=q-)M}#>*Tc9Dwzuj37`3VWi4KNwuz#$T$qmYJMZl83_T<>UgDxTKVWb#%G!epsz zT4&o_U02q0b~szEUSD6=RD18-c-|uc9Ip`W@V`!dc22*)m`|O}f{+_b(X0m%Rg8;Z zP&ZFQuQW7p&N>W2gRx6EOafz3DbiaBSPWpL31NVlVNt2-Q-^tint>R$n+do#@DYPW zfElS(yH%z^-?uby8w#k^j1Pq|Xrol}3Ovk2=a~Rtj<$k+wQ}{41oc|>KhwVS)Y&B+ zLg4Zry~MA5q#aV=#yV;pyikpz;PM~7aE&r>`iui;Vko$LrU5uHrJO#KfS)m?TsiwM zyrYe{v-a=)hq1W62QMt6x}2XA0FIbbuFn|&LX5A&d*tCR?$`bc!zc{y*P&bdAz4f+ z7ri6+45lgh4C>5O7MXp@RC+MWj5@Tb%8UY6qkYPVI=3lSma#+1aC&wl7<$Td-1^4K z&ep}*_q<0(hsO3!G^}vW?ULHC5hpTUCbW=?v{F=1DKMIKe*CQ&BWp_v5gFksQV3WM z-skpbgc>WS{QQ1wlbxnGHw00ddkpyb;y--20wG*nNhjKag;3t3Fp zv8RrMEQ!Z)tT$1~G&KcFK5=;og?E%PqaVFNDx=z( zBNmjru-`6>eY_Az+Q|M)FLKkmj9pssX9W-}c|H|am$xS=V)3vLAuBo_h6scv>~W(I zF|bC`Hqe)uUW9(}10!aQT`0MsyaD`+YYp9^d~|$~bUz|mFi~p>cTV4Dxt>xPeYWB@ zS|s+_3a7Xh)F@>DuAxsw&U~MXuN5)3tI%+9tqy9x*u9Ofod6B+phXF=k&tHo<`tZ< zL1N;5xtShojW|E4f_bDa6+<@PBV~utd|gRY2ktVmved%_GY3ojaCf^-faRlaDrTZ0aD4YB`&J&4JCaC^;gkX~xt4liO;J@*UR_#Q=3r%Czokclzj;iqypms|$rsVHGf{d`ZPq!T?y1fp zQcl86Vu=-=_$XkuvZB%)(K~zWC|_@#?|x)`ZtGSiJ$Z6wV_#u|Qy%U=2d(3VUm^8l zv#(%U|W{cn4-Imb~b>H zSvEJ*CY!DicUECy-Bwjzm5)mC;Z8sA_{*tO zE0}CAMhj_SRi^xC(P*iVjYd55`bRF=L^f8WibD8gTH7XGgbD6(1Y_I6-0I2YG0{lF zw6@fG?CQ$=;)&h!z`ZJ#At+D-prm8}))C?gDl!y_xQ2EwD|EufA6>!DZ!E=wOA}S5 zDyTF#v{UfNgZa}y%`2KCL=4_Ap+0BJl9y7*Q76!(${fkvQc9kD zSaQiME@3r^G-(dv0{(9t`{F6BGo{9HxQTe9Hmikm3A?l-I6$r!Ofbr2n{l2%9Ww@E>!-z!QE#icUA1iRC0OMqZkGhSH1mY7sDacH`tyN%3a(+=iI>;vr_U(6vZ z=ryc{Sse^QnT${J=?_qXw?u6|DmJnC``c zdQn8M^7zIeJy>+mc*$3F3G%F?kbH0O0(dT zm_sqwDZ)d2qlMm4cc4|O3z)3a8-e`BJdHWn;t-l>|pb?#*BsN&g%+0e^a> z>J7bfVJPn)0~jNN9c_v#N1q6@-?^B-;w*OZsph9s_dt@&N@|`ams0iwn-r8%%U&+; zc{&6=nsi=hDwg+^vQACoSolk0$w0FTG^OIvQIdDU5hRNT70mO|$s2?j@N&ADXNW^z?9GL8dYQ*y~CXXB1d zYxQ4IIQ6W!guN!m2WaIQg_8~`vs5l@=tE}*se7o&PNN&3t)GZH!k>KZkzyT$j!{%y z!kwfqlvDMI1fW^^C#E_)RsMQo=gJ#fy;S+!jAv{H%p&=u`si~X1&=2z+c5CKO1|Gw zI?6O81x+TB6=F!xF|KQ&d*xW|RJ#r?9%bLwuIU`u&w*)dP@TIbd#}@`cxE3jEegpI z(<7PFvjvl#Yl*2ZM$s3W{od_{o-BO1i=T#$8-%=aS zeFX|VYcSkLtCI7J+gZZXe1R)MvOe_{e99%%7JSABs5Zf_!LJ?O(Xef+s=v~?NPsw* zTY)Uz0gJWki?R#K}K{%(kL)SiyDIPxD=}(wuiFKk_re-Jyg=L*+Uv`f_X{Tzbvv@rH@6Cci&0?`u zKW~8|(b7kWPH*l7hWOR9F+ZV}v#~tZ2akLJ9QV7(IA;+Fhs01V$)JLhP*}{l-7g}} zp7oqIEXl1X3Y!4HG*fpYZc!+Pnv||&u$ow_IT~*VJ?$uahdzqXW@PdMaFPNA<)F9+ z6aC!t0NH^D{IMHSr8+nDpAh8+3#ED$rAEG`I{T#t-ZDeiyc}LX@Fz&@^+Yp+S;Oe@ zsOA#fDwbr!?lTW7M(bg?68knOrlxco!A^62_6+#^K_`Z-qx>iThd!Er?lWDm?DcuS z)w&;W-=NL^(r1d88(aNX9J#ZSq$7?n;&t-Mf`rC;MA+p^I;cV1DgqD`0|jY)_88=m zDDCjj2;$0uh>mIVg;?b+bk;yL3`SW13@&AbAGMgW(R~>-L`7ai?||=*4%5+wE_}Qe zU6$R4)$PXn=iXjEV86y&c~o%y>>(U^%z$V}4O{A4^s`LT9rFCdHBxzEd2;=@HsJyR zgUBGPkSj{uKsYd)#1_;tk$&*dEIeda)Ux=R(0({U!2mVDdGx{b<-){(lsqsM#c!{f z`imNy&dQEu#sD!CM$SylEOqrm94bn2#0J>T0~>Kfrzz%%ia=%+hbocfnTyO2vfs?T z)w|0qDK@IiV67$_$@j=Y-E@&2%YA}2T+J2N5_xTZON?pf#d&|qY&%Jh&a4YVOCah; z;uC8ySYs(~JEC^#tMBBr?bu~!X;)w=4~~EoJM(-5m}g!KL&+4yGLIiS7*-;WIm%$| z^SUpxqvI?~7mg&7-^+-%syt?h^C3)Jr>LjuG2SduV;!BTScrVYBvWy*ktDLgRYsvr zu#>FPNJvmofWip);19|T+od|F)(xN4XPwf^)ppLOS=v4W9@5J8k+xD#8;O5TYT}m@ ztT|*9N9;S)vxSj*On#~lAvUj_a|6M5f!0jp;s<8wlm?_a@9NvV2e0+oV=!p+n=eU-tQ1WY zShXk$Ne7$iWehcv?#S!Iije+5Bj2M!BNvzI4}->X(+H**mrmpqtfvr*N|+OiLTQ-Q zy|Ef>nh=4bm`*5BcEi{igyBUBc~++EgFtN)JrInFk^hqb`hjOl>heW6yl~PY?|=~e z^wS?Cf3xJ~5|cfETsV;v`M?N}@fZ$S=b1DxN!F1jSn$&CFL>5IGiisd+ePFR-jPob zq7SNDp7;lB5A|>9=KCm-xV7j{aTYy~B+D%L&BPOrs8P0>(RBDZqx763kBCwGp)yY< zj2-YK(|HI|+F3=U*OuExCeN!qT$65j&1%+4t;&_qV{^&1T(U;-n@> z+dmr1{0JMvI;N0&hERG!DCRVTa0sBmp9uG4U7)bEO~z&1aWuz?tBsIyqTq8*Aie^7 z0z7m!1M|?W0;T>zFFda8=w(ON+UeL!-^eaRd8%F4gR)58~ zJ!7J_O$2(Fehhmd(f;{dFFi@f9@;6~XH%EpJuD)%r@$Mi{zk^p@83Dtc#Gf;=m5LD zZ(*-#*>e|H7I5@KpPUk2!eT|EvPURH@s$F00|=i=kTVgLa_`DsA!)Nem6(Pr(=d?b z--UWmk=?-@h>4N-<7*M`ogs)H2;~n{0m_^bqz4pt(Q#tZ#JfZ%Z}373 zm!V0wrs&#NXe$BgkYa95aiLqA$_7+#UFX)AT(K`~fF(pd6+WxXUw6p`X z|7^A%GyD=qMT$$?4n`UGiMk&6fdt)x^tUp44x2)0hym`-1GDB!bT~*K4fs#czVjwQ zp@wZ8@#^QljL}7a*Ud|P@4VbF|I1v}_Zz;Ht?7SH4<)OZ+kQ)gyeJHZoG1`e*vL-; zc&7I1(AL0EadE*WAf^6w%_yD+uxmMbvI2j4K0+iu)?~fTQpKXnBa}#~n-zQ&mQ{G4 z-K}8PiYWn_H@weV_t%~o{GYF{7(Xa(r7=Yr3k}(WCiPkOC0KTTDU51i{_bK(bjMR2 zG#iPMsu6EQ9B@9f{nLgef@31kM)qNC&Ih?Kcs9*Qhh8i$o|rO{U_uoIn*uh!Vowp( zofhBcYD`80$Lly2y00fZ%8LgEx8HQ8Q7A)X+JVhYag%0gGSIxTEwnIGZB!k9e(e{s z@?b&#thYk7QFHaJJFce1Zm6(puNPR`**lw$8~AM-7gnXuk|x;n&zRDe;cW;h%JA71 z4;dO1b&U?EUYcW#X;`YL1hW4=VsY7Vfna+v(7wlhAC%cxm}56Ttv*}cDo{>i!DvkR z!9~UL(-z$--80h1b)8^lQ-H#C^GrWr9_YXhSXTR$49I_{_Ht{{z z?eZKj6K2B{ye6hHsYwdGV5qxXmA7;$sdAFF@M&`GQ`1KiREapccq%5~Sv_d6dsrXu z?s8IdzRD9!Yic3)X?L61*%VY=YxGLW-mlfRn>tSHqi(K|dY*xVid(oMBt9x~k}Et` z$lu7RG@j_@j_&GsXV$Ubae*ifWAlay3eAbmJwd<7fwMp{I9E834%*!Jk-p1X_#3X;>fvxrt-FBQ;_Aex4| z@LmYpUx+@rc`p`nF{^n(JW0QU*Nn0f{|G(;eMJ9|?S{U^o$>S&bV5aXaBEc=n89d1 zr#Sc(t>U3fgNNZpZ(OI3aEadU6`>8)*(2!K)ma*}jic;>)cjLym#Aq$)(#FKWgG>+_>kNl+jI1-NxUuNG5>w)nXMAp+-W1t@y z{_#CTPSzGGbQ7ePPe{@?&fD`=yi<4D>FMfkBHReUpmo}jo`LuylF@52#HZGBY9jv8 zDhZ?b8x?cT3C2Dx9fRT=jTGzn1^Z}HEt0iA%_>tY&U+_Rro)bDP~v&TE7@v=*oAWZ z3UB;-6qk&+w?xec4E>>Y5rh^Nt?xAsJw|U@th^*iX5n7<{J3UxP34wgzSWJLa5Zu6D6`*X6I}7`}|@ALD+c86rbgAV}}50 zqw(;XqOrd-bB1?V^~~THx)^eB-0lD59AU){V!%e9sh=A^@E|aQCzJck^nnj~jvMCm z8klWzga_`V{dUjJO0;ntJJfUH$_8C8=Lj!SJn)=fn`}#qEKcw}U2T%VE5xMfR7m z9r8U(-!|I${aP3L828YR&jAkh+w@23d5}~Js;olwuaKC{Tq|;nEP0lLgjve=DIKnn zd!_&ONZ~37^`iYYmz*(vsjUGSt&;1LcW#nu#}9M{+X*!aEIZW5IsbK}lre>0cIOUl zxieG59YAytJ-3cqU^j>4H|^K`t1ii3d5f}*x1ntAiSZ0=np*Lzdsr#> z5s0z~i+hcRs8V-zOtkput$1dm<33U0u1CoE3;3UxiV4c%pSACEoD$&w?Kxim0XWE- z|JTb>u&TKeiZW*RVo5q{G%b}J6(JS9lYD_(vi2hTuvx|udo*1cXOSROP!Xx35R$6U zR-d;jI~s=4FFG4PnCrK{tGXUqF{6e2S~EzGJ?TyNen0r{PIjKXZ@ecv?-RUkZ)iM! zNcD5rDCs3eOxsxX7uxWIj1Jc+52H}$I0+7uW8@&umJZiV2b&Jvt8?TGx}g2sS_?lN zz72@L(Ej6Uh@nG0Jn1$J$DpGO$OveN5%aXHV_L$6W~Y)9fQ~VrDsl`-VL#BQkYz9- zm)nE<)>6Un%lqhV-+yUp=0&m$_o}UU=vUWOJ+?fmPI4=&iK?xXw>&av81~Pk)y0%3 z>uvtc1ZG>9N4A1tOW-CjwsGhFbNHg<-^hgvmj;MbiyJj~qJM+n5rP-)gy1Qn{WM00 zn>SN4Vv16Sw9@p=YoxbI3#gDbH+t{!v4A@^ty6P1FEiR}^i-`yZcPfy$hW0VmGXi2A zeG0k}{?e5vf_WNqhieD$yP~i9xf6~0tb78zSitoa}C1s5#C();>DSAUY~|%54-B>l!i39V%OalxYB@=W@#EpmF+y0Y&RG3cqw3+ zgax(l98pk^4SYwN&60Rl#FXi{%w`|2SE6~^ADU>+yU^<7pA&5kqmTs%VS%DUTWt{U zzfXiWlxHs0bK*?A0z8{Ih{&qU(n-Feq*qkjN2E;GtXWSZCx1Y$G zpW*kiNn?c3B_3hvlv(cJ(Y_$ehbeEHI>ZF-}lB>c_qvqlRDPLhIyR3+$%WdESHTI_uY5 zEA4Y_+Gs!Qr($~`Q{47Q$w*sI)k&Dq%E-Cy-*gj&y=f?IAyILDhtV0 z(Y!Wg`V5_(^2iavY^zUF&BTa1O}|BcvL3Rur%G1x7+#T~7f1w+dz*`?hXfprt@+m$ z@Ehv+V%y+&$W2xM6tw`7PEOaJ28eZ6qI>EL#SNrFF2pW71pV>OWAFm^T|owCh1`%X zS05H;wBhT%wvb8?(~uzrGDK#Kve7(N^Kl0KwJ#ux3@F=UE3oAg3^u#U_h`C=6g5r#v$ zBeq2fAhd5BIz`MS0U!d}k@;geX#wa5VMB#O)yVw0ZPEuT@d{lW!h}Vc%fcp zc0tpX1kkcOrvJbgh5sxLH>3np6z^9;k}bltpo-&$7C2IefoS{*f1z%J)a~5{*UGZU zy>Z=_ZGtA<7OApl1E4`9dy}s?z%M?q{Zvq~uPwXg+nQZ2=Lk_9hMz6UV zt-FV>YMP*q1;-BEjcxEc-kkF2Z9ac=ai44-4$H=Dhber@@Jy-e$e*%j*0rHv2sb}j ztZ+r1;3OaGJewc#FqX^#h?{Ccf*giazPS zp|OKe@?0QD+l_KJSpHqJ=wSZ?lbD;yrVb@`?j)}@H5aagp8XTypGzVn^`r~iclQMS z4H^BLe4zg*iE^R><~BycZidEo{}YE49XBm8_zN|7w#eMj(2C7^!$vsh)34F4yiKkO z@;6wqrubrh%#xI}0-zohwLchPPcWP#kyw~|tZ#}p)v?zzZMOCq;YX+0I-@*Ip~Y >n;S#`w;YM6q9(dvyF|Gr#e!JanZ4GKY-_GNfHKT0GL2%1~Rn06t! z8Ft#`G0gAx-qS5j{mv$|CiA0Qh)dy`@Z)|-<>Pz|I)e2iT>wgNZ;3< zf85I+!mTLQO%xsSFyB^syXj1pr^)sE%j?xoKk2II!XQx~9@>rl`q++GvXF)|sBO2I zy0w%FoX28z?cqmrY%&Fa+093fJP)6{@YE_X$_d=y%I1sFrsGf}%jlCUf{=pc+&rLSI7j$d3>^ipjPO3BzhGqR0409ELHg z{iqtH&P}L5*QAq$+_9 zjIj=awzKh=*keSvsvyci1g4N>M3%H-SG=oaeIK&~Xsj9=P2)5yo9oM+HX}96;&Hk8 ztvKFwB3D>R*H%k0yXbVw&sy`c#a_T4n0kw4ooE%|2&O1SU0{uF;eMjzl@Ta`F$qeI*9S{dT^ZmzgCQTc)@5&JI@ zgGA=ZJB?M!&v+=UM@Mcud&!A6(TXsL>nYq5yeCAMG^f)uLGIm`|7LX||AW;nJpO|a zkM!e5-gg$+|Hg~_V2q z$!Kq;F8}Ini`AFFAcOHo3_=)6X?_Yqfo9dwLJLG=rz^NQ6HtfEQ~`Q6eB_`+^E1TuMn-N$SrL5ceMz|hB>3#iM_;r20{FLLhYVA zW6HP-MI*{3yW}ZhY_v%&;z1=Y6umsw=-~pt)DlZp!9oRo_IW9OuyU!kZU)mywv1y@ zm}!%EO42X^>}kM)78m=h=)Ji=f#x^pcwh79SX+Lg6WcrDN5BqlBvyEdzZkPQDb&uV z8}l-gkrRqZ^AL(Rn_$ry<+T~Da;s@u>fT!Oj0S_ErLSw& zxJzjP05iYL*w)Cmh}@*eg8N|mEh=dX@BDC4aFA*sVce_Z5UQ|*B_rw@i*W_+`3W1U zuvC484muIA!&=K8jpaz zWYDlwOT7ieYIc_KCs?s1jEm*gFNdXz*r_O8 zlODMi5pTa~kO-z6dARzLu9!;2WoiJJECN&sZR)1eK@N-pPsmspytK&HPtjnWj7f+r zq8dLUnK5NvgaAQh={oyYdaoION!~jv1=M%i`I-A1#(h{4FIkYC*C&m=lu|%lhijbA zBO-_pYNepZ|1?`!s#mZHyEE+2h`#6L#s0^-|GMipCh$7-J+GfsM3q9kU ze4<(=hcKIm&L3(1yfl%}20|Z7a`LlQG_+}~ngI$d+)R(_lFz#6TZ+hfhNk_y85#;6 zHKP&V>5xi_sLI1P#wV9zA8y#u-MWk!MFDRuMtVSf3+~b=@RDV#_pH}YE9l(`?lLMw z6t8yYhdEjf$(^1TGRoO3bJ8J&y3w_GbP-Oz83M5;F@%4H$UVb5pN0+bx|L&Q!I-c$ z`j>Z(;OhF6?4F$;p*XG8L>~Qj22C&_-d=CfnzOD`7zGN0^}ZO2WF|n8vbqkBlBG9Y zBzELgg3vo}8{T5Yzw;*_E()ese(Cu8lZYWo5D3><#bF?ljHbad@F8I+gQ!;|(uL%s zrP4TB9Mv;CEX7+gh`2$W(B@o^d|}-!UKj-&5((c_e?1d5Qzn0WJUWaj-rH?NjP?uc z+e**S~WNTrehqb7pW21>Mb+{AoBS3Rr2`G0xy@MhLnseO1jJye$cTY1Bt+BlI#g5TsXhSt>X6(5~`}1Q?ZP8lcL(C z0Y*<6j0q;qVk1j8Q%XIKT&DmT&bAT0x-{^qSYhF8qo)wZBD;Bn;F zQCt(qPp~`GlDO(qEG$y;<~kM{hp&PlhA|sH$VtamHkaPC%#^r_wja5;a599c(CI;M zepzwQJgh|->E~G;J-_HRs7hw$jf;GrN)Avy!Yso!adSxJs!PH>vw28Tj{I~f=B?Ou ze@?GB9RTfB$ThE5O05~<8ddR%v|3D>rgbaVm<%VgO1cfFNYL*Jk6(*bjla)VWx5!S zAeJ0Q_)BlLmx_tEOy|dG(-S+mcMpyyDl@GHrKg#nJneH=sDaX!jubAq+3@-m2E4y0G1-Gzw01 zX0#7frd!rzcvkPWzgMKwFwQoC{7n&jOkMfPA+WBUl`XFQ?*Lf#Etn|77TBd!=_I7k4(0Bv#ez%*$#AimWCNGgUv z*hnMBWy2af-;+xy2VT@x4x@-QKuf7&;^#E}q>8i$9NrORP6lbN+V7h@Wc@xnNKo{L z>-~-BH4ZTajBtasEt`A4I}O;Tc}yA?XjRM`AeQ*{3E=^hLzZsnjMulV`)&i|SMr&g zsOsB1dhujhkrxhH^ci05ET_j8_G`>iq0a4D3>dL_M>?p`=}1y|zxVjeY7*_Z2o6DJ zU<ihtV>(y2T%{g9s~ulJ3&vyax(aD!d!q)ibfiZU26N4+;G zZ{||82A3_2T0LeUW}s#19HzoqqFrIaOvr>wo88Es%+Q{JwlG4oHd0?ySvS%&PGn}M zTC{;FGMc&GBw&j z#0SXR6aV-1M1Z@zXNhvs z@E-)b#9=eK*#hreF&y0ff$@G8V1`XjYw}#Wq*$~#p%zi^adNM;=c9KrDYpm~HO|Ao znyr(iG-_&Q-W`F#Iv0y5N{uh`Nl0GQa05#Zj$?!OuzO%KA-??@pOQ=a!?1FxYkBnJ zK<5b7a-(!|nSsKhfFJMu1vn!FBee6^nADu7%IKk@a>E{aiK?3C^mZGZFk0qWVCXYa zv2Mw5ci4w-_=i77&2OBajyag^Y+CGXTI}%UIq|?)8WDG+7)~2xl~XLF-nxdLUdO>M z??tmd%#rssX$LfEpPwCOj=Fl>n74HsWV;jhr*txFRtso!TPxnPruW$+2W7b~g{YjB zO(#6gwI%!-{3_pnyMZKhaLO-%YCT^2Www%@CULEQ#k8Ltz0{J^Jb~cPl7u0&M?@87 zoN5pU*Tnm#N0+}qli0&>;FxAdH^R5lWZjX4WqX-2UGFiZGWQkRMH_N&VSlO(S{O{o zz`0JGwvom@v`lW4+~3Z<;Xb7&><&ZqC3(dfH<_Cp=rmBf0lOQjO~AKYS}|tVM;713 z!!sNUo@y~Bml&xz5C?Q$Dves3?jO12Aeh+qoC;)FGR(M>JHj)cGLx%)ejRuXoV

    u6VT9ql~a+m}9wd5W(ai)$#-wgqgIRLjW~ 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 z

    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�P+*YMg);|FhBi8q8!JJ5qwpWr4 z!@*lZj5YLksGGlswgP>*N0mv9-YgsbQAv%b6FWjHJMI}fy_dsIlmJSh8j1hJGtxYv zR(e?iN?+iqBM@k=O7FTSy43t*6=?P+L{uCAZh$aqsmO-*$~};Xt|8*yO9yM3_EFSDz=-X3nyPvcKYBCgap&|4C3J=A~nYPkIDxEu` z)XtxowM-Xq;D(36e15$~!$eC*kI%A$3BKs8LFSc}=x`@PpRjU=A1R?tmU1-(vClAD z6&yB2pPdqON7fXHy;0kiXrI`u$xc3CHXFF0FD(b4wE%;zpZaje@)yy+5uBAwTi_fk zM~Tn7;*0aRBVQh*KY(BCdGjaJ@31|PZHefcMb_-d0TM`@*{<`f-7$1WTIZMR$IoB! z0RhjmlOMF3V*-WiFRE`4J#yOzZm014GTVU=S85QOg;J;MR`i>t?6aR|T%IbQf%xiw z=Jg)kJcaN|d_pAO^NUNPyx-z?^9gW@AF`Noe4(TH{>YSI8v4`UR%nX0p!yo{4L6L0Lt4F$?$7ZZq}^W!o1WXQ>iI8G4)I0S`oPE zhf*OREIOl~r3N-RnTH@q6H>F+WMp9l@d?Gs;fzw+zANDO*Ob3N$bH7=!Q30IFBE;= zZ@&_gTU*30KbC3#nl*wyzefq`LFj?wjR)-b*}V< zItU`6NiT{=;=4rXtztJ%_$HXwQ>F_vn)ffMi(r?WI3Y(azY0Rb$6kX!J=<`dP_1%; z3UR=0BwUN6(m*O6OVZa^Uuu32t_|_)s5(7Qe!cB*XVBLHO-+x^zTVUTY$81~^(wd) z{YSzJU4~Cj=0}f#+U_+RpiO{mSJ~HvV*g!*w zu|kpQUgN_Q&eC zww-$<@m_bL{r7dWMLj(S)N61Y0b~Ukfbg$A%u8~?%v^YtDh0DNGM0OFk|XRjJHp&` zkT^4WGXe*dlR{_}s-zDC_z)1LM-G0w>hWmNQKluUtCkcwt1={=hdXbw5GaZVvFz@s z%BZphoP1$pTULfUce6d3XneBk4J{z5GTui{^r$>v+nwGg^mrcBo1AY9<^)PlL>`zf z_sDe3XnZe2W)HQiAB9UVzo+0<+%h9CF~0{a+XkSHI0HZU!G5>Pl2mA`E-}?F>`ac4 zgo=@5A5hN6@k>U{a+?ndW|>@t!hjmAu}kT^*p|ShAF0F2Myz?$xK@x$@v?qf%40^o zEVm!0s|7mNr-X^+>+(u&-X^1Ee9A{Wr&cD#Wxc5C@0fTy$!Nxmwu#z0_0u{}PLW0Q zCZZoA6ODrQ;R+8mFW1gh%%gIwfLy&TQU=}c`<1IcIG?z!S0uFKfmS34U5-{jYD&8bG}f&H?kW%MGUgkiMGz-7ncaPmS#Dh z2KL}sBbVoOwgjbr>kpaFdX#wxZGc7o$&YNudK86ubfEc!ygY8t))Nu)3GO&ygP;Aw zC3Aht{)X8+Dsc1p=PDq+wGqxG!u>bSUMH9$ujqPH7`p?Od~o)3si*9CfL{`Mw?R`; zYaQPyU7qBUY6dyKkpkr66zfFYEIc4(yd6Z4oS!*hV!CXwFImSiPL5lmICOUhJ|||O z{tfZtgD_eac#E1-7A+Uo4f|b6#qFPd2r$A5m3R*>-YR^oFmdLB_8TWw>}CCnc4$vF z=A5>z=fqx4VnFn}g$K!X{yoA)Aq@67UrAweZa3l3J;w7)Fk5>#v#0l){|(t~(MCWH z>F@K&O<@eYnThPT^y5)4puG`=55M*o*WvZM5%mCe9KRm6;_oRR8qxdB%Mg52vP%t73+If3Bc?^#t7eMtfR@Gjum+ z_n(k-DE1H*z;{^W&xP?uVB zU3e6=zXBK6;Z>&ZqZ`x6d8rD2NAn#0eo`VPzl9Ib+~z$YJB!ht(=51d+(0$KEn(Ra z!ze)Q1aoMDv3$iYI;WRkZ87J#fX9yehzX)%FkN_e3jyfb;c7 z69|L!hCKW?(0j58IVt`hTLIY*&WH=&tue2*%xA}_o@t&JApL*xw}&6B&$ldTue9I( ze*FyhFdy7K|HNO8$EFx6iNAueM{CRKKPs?CdQ?zeIIOV0)h2hg%eg+h*mAekDqrxL z1GZJo?+H|SdP)H=K4`lL3$9-Zk9Q+y@L#2XOaayB``?d{1WFyRVV*+qp0ZSr^~`Wk zOaZmO6brhfp6_5u1u=3(&fU?w@A8wqUQuPeu$oqdlyTyODucyX7NsQ;rt`AwRD5_t z<%MVTN?V95rEYx-*CG~PVaGm&9>e7v-~)10e*YoON6^1V2Jgz3_7e6ZgYhI$oH?%e zD=|PohI}~0dKQ;-0v>7sa+VeUl6k%}FHpQe(iEoyz<)4V`m2O+`YnwyMc9akisuk^ zwEIXU%PFFI`_%8g&Qjnl1)S{+1|GzPoBP*3IiUO%cHx&p(q;(@P(DEj0A1gt~$~Rli5<32K1Iz1-NgcqR5`>s9_b7XQxH?cQ)r&%}INYb1*0<9w{+#mF!~NIG43JM++|HqQjD;x>oeD3is|w+==oEFzzK4hw}@> zTX`ur=*?N{3((y_67JzzlWrAkA9-5i2$hc?oN*4hYySjPqCZfY!@oh2K2)+n4|vo^ z5$MD#{4=UD7G)MIj>_4aMVc!YD}=L)15Y+90II3n`oW9z-n!K-<(VoXoB2j(UU~dA z^a>2+3}qaP!Po-Vzk6%d)o(yjq_cgj3Wj@eFGxZ$tPZ@Ck(Qy=?w~$|qchrhQC4~& z%T5p2x57!l>k=4t(DgtvVA74L8NlgspMj}TfnT8+@4;#kD{(B|T%ya_fip-;Dq0iM zpfhwfDP`vmi^L}N^LZf@9B+v-hEZ_gM}D_Y_IkXqa7VvFDy-*-bRIf}kaL5KAHfyG zXHm+hc5hVe--kxYPg71X??(-W`|ZH;l?v*&wNV^J)6wHx*Y6$Rs!Hv9| zy3*$5=VhY0x!ht)Gb(z)#=>^&sy{=-1}fBVA{73Jp@P)EMaaVpOvP*9Vh&cGZ{i^*B~!1h7G663*z z2?v8p=Qe-Kp3=4AG4~`QkVBvld;s}U?zihEn}V$hPjfvVEPuald#&sD_E^#g2Rgo+PCjViso2^VU-5bezy z$oM!`oRVvoH5=n_UzrSR$QJWaMmf1ui20##<*9eG*t1-)9y1K@Iib~{4&}$>2Wu8& z0~NRRt=Z?}Z8;pE+CSOYiFoip*xDmLr@@@|Cr}jk#u?dfq7=@+HeV=}5e+-^>mOy! z+)UIx_OffURq4eT{G8==VaU?Z&oo#KwA+HoVCLQJ@*^;U)|$Vd9={o{N%D0r8)DTM z@)a58iDfK#V(hMMTEA>#8GYx_Dq0=LJMD5kvUBj zuy4(SddG2mnwz-by2HRGH~$n)x}{#Mf43>F4q0GXNyP;Urb={U%?=Ou%_(Zu(xdE;3W{eM0yj7tF@HpW@9A z&VumA5aWMq`~DxHg}sNoy{V(&e`GNKZQcBkvwjqYzU-u$4K>Jx-YSZP&6vnUO-pML zYgW+MILKgw#I`PyDRqF+kWDzFo-grhp8e>qI^~&i7H;Kh&-w59$hl*i6d4|BH);!w2QMEGZo#u1u#a4pFT#51b%Za1v#a9~tH(C4_zrY~sE z4Oz7o^W$97Bc<_TrOF-waCh)`rjVWrY zqbf6;y-f^=O|pSkgfgtkr#6Lo+ex;n3IsOFJxNT-PQIQCZ#9F&lyJv-p?yO2Vbut& z=CVv;X#HWeNKaWXN0X$q>4vMANZJ>Z(O5~&I;zbHHO6?fySP+Fa;1%T_3RL*<`Zlh zfVp=neW`Bsi@i{##{-A;$hmOzf?1VR@Gq-&m;Q6P1AGe_t+j=U!-pnooW;AckpY7> zJbkLA8WQ7pN09beEyjL>(Im@CJB&vM;iSA$x{-nY{0KJ(ts%)QB?r_`>X_ZO2$ZmK z%1Q}i$>4xr1zW+RTo5X^h$RuwQxxUUAH+nhsV^wjU9K>%=J2D%i+xIt+E%S3_37#ch~<3xZtLBgpx10U z>9rfO$WTexCS4zfJ(d~w7(^=m3W9H$KWn6fAb%erZ1F*bdE8f!sS%UK(cmn*^aN|9>w3y3LX={mqBvxjd1hpm<=cPG3<4AYVPNamQ~#G$GH=VyoFG_=gon8 zt+Rng-=l5pcOvWYSbs!$E-Yz&gZS`Pr_Ow-5-X!I81H{SwX1mZHQip2H)l+`Ll6kB zMN6lj=Z%EN3DVjkZpi~@QSgeC^ExoLaJ9QZp-7wf+A}4M_jqt3d^*0g)Saj_nXC|P zX>oPChI2C+=#)|7tf!H#!8^`3C9<}I7~KUsMkK~aDRTtLc}IDRFh}veFH5bD{>S$h zA0?_rs4Mdl?kCc$oX^b%=RlwI2FW>T-B;Rqyo*q?eBo8^q8Qa_MT5s+F zyQ?OLMFICOW^bWb>NB|`+h}JN$rnUEQm9CX@S0A}n@)nQ31>`2t7xVF5WYVawl8dq zh$tenD4Xy;D~P||t!?1`l-KiRs^A zEBHHX$^Xy8R?gY!|AU&p<`awj$ltOrie<)qNBbajzW7_^%=UOJ+;&pZteAn9P;x@9 zKqOnTY1VOHYUyqgUbkSc1(BxhC~O3!aE{ZNH9K#|84GWB4;!uk)|DKk2iw3F>hycv z0bp)s2XRp%SW$oH_up}g zVEg1Ig=-3Vp&f!^#k74EE{HJTR5(R30m?A-hBRQN_VAQ60S_*DZwMSG8{6nV!uHmJ*@MGZ9$IOAKR=&86| zf4`J7q0nG$+FSh~&|>Ng43~yzxCy9#HVFGZuqcu=(KCq7`%x@7KWRi$nRI~yZf=}u z>BLjHCyH>dwMXe^5=mcIWNd6R)uwMaUDa9xS#Es1B`P9FyeXXFt#p$yu=t7~Z`{MN zb*h1;2iuN)K>i&@1xZ9d0X@#{o<@VG_A{IA`>~}Nr?+rq*vjPa4&3wQ?fVEMH9YMp zmi2)F&9we-tXvp|Pbu05t0l#0OgpC1MOoYR7-zo9X?(;m{VtNVx*fCWcy*FA4INV} z%qi_kkDFg0|Gg%6**_1K4Z#rR=Cd);DG&bOEhq(39nk^ zF&kP=V2kaUj1;)ZNuh<(qWbb$%umB$_Jkj4WxG{vAN<`!^fB1Xy-}l?MDFxON#N0X z1N`B|=U2Ghg&%)lzY%kx_34|pDhm1L*JN+@p&(!2!%a+Cg1lzD;#zP59Wkt;tfQ>3 zZai8U3mLr4vT|}^Zygh|@tjSj0v3IBwVp?{Ts0-_bjpf8{G(zkgqzVw5sk(i8p|pi zr%h6y1y^(FK_yc?UJ%6^axYqzAm;AhC2eIPW*Qk^TM_YXL#mTT_?`3~Z+UB0G<5`V z;KK^_rlSyRmXE9A&+hbEP8B_uP@0ZH;dIE5FC->A!tz+2x^f2$#rbZhBgSV_s=j!q zte;#vN$*h>0R7LjUH1mZo-ChgF06hCs}8Md@GlWK1}K++3*kyZvH4ik#+t50Z|%11Bq8|>3qtFj3AoX zusNTMeeWlzi7ZFK~ww(!PonKn`*9iFj; zaxO{^tJHpUzXStR5kN)qfA0%t=JgJa?*%1-D2E8 zIz%V{fG70-Zt!qt@~eCn4|{fre%!bEtkw{?$PdY)$WYe3=LX%*4!VQOI2ZY zH4M4dK39j8pG|6dg`pvvGSQq5?mxOj;J@E_QT#_hKcF~r3>_L!L0O((;Lcy|me!v< z{N^QRfmuclj9cRS!}X{8<>z7b=b8st->*2R7Tgo))dHONvaI*)HJ#b>Pb){DgXs~f zc{lA;)%+&u6dO=0Pax$cK>}CN8rjr0yzHP3W4l&5;9eY@zWlo<&}qWA@8u>|zknB$ z?}uP&G>-sw{I~ZS2Xz6MzneU%n7^C&@lN~!9N2B>t&eiLt<*y*^G@7x$2>P~?~DIy zcjlJ>yxiz~g21QzJ6_N&ayIJSOyI5IXCdOuK8HE1_=8g1Qv*OY-0lhBr=U<&(s(+L zN&D7lx@9GeiD*D`+(cVs+n^-I*|)Jv`+}rh8)x&{stNN+y=r~i#ALHs>1n-(q9|($ zE6XHqn`b+d3}#vOF|3%N6qQ6dqlrgGnyzIrQ*ze4yp~fnRYtQSPd}SY;l7DOQc^A> zPSD$$Nl!3ET4kIh`k8P>*1AziOKg8$K`_f&W866U9kqt5v3YFpt_x9?gUbbuLRyuw zowHR|gRJ?{U11gjMLDIhX_buXCj9$fAmjOcr}fhq4GadZRWd>u!-(MDudRhmQ`34L zb0zkXtH!m?b7|8Y)2~OvbYci1OD8OhxzWwP!;Tsm6$*0a)==qcCzDP;iZ9wD$=!ve zX^oy9fh$gO<*DmOZFlxuNsI>?5XD&&@wZM?#>QGKm!a4?8*_Q+mLhFND(lxw3mOxX zjlcft(ZfwnLK#`~BteylZHz5N8`3ol?Fq$$JJDEUO`_}ZZ5^jG&zg@u59-%>hm|-j z3D(g?k;xZCJwutZ^kZ65FiAWnE*x*pPigird*X&=z#@!J{=k5UnH7ZWaUnd4D(uZ@ z23i9eE2F?Uv{Hs8m#yMN6;;t8%aP+c*Us$RYSGe@hD1>(NfzDbllwx8m6NfFMM<{a z%#BWBo0m$He_o3W7uyB5q;c!Ll#ddJJYlGgO4$jGS+M!mTPQt9O2`L=WMc|2J;*%d(jFuQe}~R@QXfc{m`111evgVedt}5- zO8i?m5<1ef(^iq|6R6-^r)YVt=NO61SY}nDwKUA6S?LwNE92b1=5kfEE<99J)Hkf) zsVg>IJR&V(^dQ~3r*>|OJ1a86iKr7Ek<1jpzJ7q_+bj}Q7ap7(gMYOIr_*XLWw}H?<2YWT_ zSA!>$D|6=VS*gO~V6FiGg@e=<{R~T&xo3xCo$mP;5c-GYKPtH3mIrkCqqI8OLR!Dd zuGO|Y!ng;6B3d)^M|CAP8%*huGQ$aci-)2`8<&&N%p*}fJcVF}yZ&iRrzEA0NZeKqbsCAnRWNIM!tSX}B%aumVWtXyeM^U($f$3BT7v$Nrt-)e?3cW~NOyHqRd?9X{w ze1h4SNFK^Nd(Wn254-|GOGtalJ@ZFG*s45v>Q6f1a#aBJ=MXjJWULk50sBlzJyGm2 zn4KX7Xz;sW>Nq%os6601!2*$3zI@}wkq-{jfBt}rW`N2gWHI^5J6!`%7ATE_<~sIR z2sN6A`$(?g55whZmRjUL9sNnIl`He$-FOQ`(g*!?gIIFIK)Qo8xo66_HXo#(9H?Ul z8JU9_SvW*8TMTofqe$io-}~prmn&*eS}bZ%E*CYpYHwkbo55&A44P6Fm#Qs`sY_Gc z_pk;PqyK25e5l}QDlp^FgsW2Td=g2e6%Zyv`>#PtPxM`$;;xf$zaGdwhRoiW;?7HM zUsrCwU2$KDC)BjB-vn+yeM2%-i#v>te?Gv?fZ`4#dr&KOpMrolrz_9`HEigtkNf;) zppcssPxMa@gQ>OTLaoGsitxrg#7{L~YW7C{tT~H0RgQIHs ztjUt${B?lh=zSm7r6_{Ie9YsTj?alyPmb%*t&Q5P0l1|i1obP7Zk$us&)tQxV&WqN z8S3SS)MhBMiBtUIhSBJB=>hl2a-L-jJhFo|>=S!0Tr%vzFs#i+W46EWaq3Dk zGPqGPNS|`Y2-fNJ=GjiLDZ`{8LWWAXGM`g>w$-SX9_Ug=jc7Df&-;xiAjaiJ${XBd zF$r!a!Hy=3GmBM++OEgOP+yKWJ7PE5!BloENZTP1bqQa(o8cQ`3J1?&Y*m#7w%M4Y$NMerXae5lC7x>J&_9C z{#0sAj4QP}W0-BxYwZzl?HM1QZ9Y^hwkO{>moJXiv6f&Qyn{^xmw1CXmk7ojrKr_ufEe_e@39R^`4;NW6)YflNMQFHg5siAj;YVw(UBQ{<$+>)7E4`G!1 z@p?nrq;hnCqAu1giRM)k#PTxqXJ&cggD)_`>ve8#sDQ=P`Z&@g@FCD{GFZ&K?flQ1yTQ;sw&Wqj{K#e9bs;FWvw2>))qOa zK2E!ku&2p##(}yxVEzOZyo?H}H!s?tEr=j~Sm~fe98vDYt7I9(+1&3~!19x$pefAY zMtCjAmRD5`7tMJp6`akc(%Dx?LfbmB}lo|PuW!DgLfmU(sqykocTNZRFu4OO@ z4UxatS7{}w{RBYB!xrI0-p?`A+@9wx@D74htgPZJJFKV^c8=*KX73y;Nv;2tnD=O? zqBwB{;oidxT9@t4Ki=!jX^%DI;5eqHli3}YMiN(#;K9XxJ77<7e}w1mhiP&&?ixqV z;HS~kZXK|5Aw-c@4mpjXTYuQiOSVmT;N&hS|1v@8ss9FGdkBmbOa`oWHpIEe{S}$$ zg?ZvJjqv#i+m1j^?x36MyXmWVW}W{+aQ7yYk}M5fmke{ zZon%F(om*qYR&Tp_}!8={ThWGA|~6oENsEd+J6!}N8o*|Q5LP%dD~~!F>w~~joxi$ zp!fk#(qC?;IA))4oMbz)*?xcDvG`ifYR!dl?Z-jnLNOUU+QV;+HtVzcavXl9+V%+o zM5tQ~G4ev>f=~f6c2G_7qQrRa6O_Dsx$TaadV5XJ8dPW{be3X3U-AmA6qm!HwoXTs z58RZB3Y?%03{{$=AQ>;Xgrm0LU4(U--whJBP_-Xml3=7~IZxqY8;35j>~topm)c!O zcx0SVMVlK-8tb^}tUyn-_0i*5Z&m^F2vI?ICu;0MUujJ3Iws9iwj?j9WT|pCnCLF4 zDN7+ay3Ub3GWiOOp@X(4wp(mus_w%;VRcF(1T7Z@mS>7MM!-M5*Gc>w2DE!BVXi=p zT?V(8ky1t%lhvnRWg@$k8?2eITraasP)pbaelbO~j?1K>4CIAR%hNIs949ACY!<&k->JP_mnRF*LYL@}=DC^^TvSgmzqfp| zoR?V&IjPh(8i&1pzzP+$Jak@~6%+KOyDgQzpl5uw=Sj<#4`BwdQELDBP;JK3oAny2 zRCnhs3i}MQ47U@8mtQK0>aL_uf>V4XE`O=#;@E zTUbcr;8R68RM2PlIpjVno54$*vg7E|Id%_0BYZnY5G@Boj#IxApK~JAi}L2#2UDvJ z&d0leWVQmo7lVv%t;Y9L0J$;L?h|X3co93e64m&qfpnWe!*-gRV#@A)6ln`5 zBLg3*8@5WSz6SNWM(eRE6~?LhE~h4xv57rT7H=C5VwwPIgPXO~jqI1SZEV{;{}R zy^6dBUXhDj8{z^NUHr`kyox1(R-Jym00Qy(2gqQ5m>rZ}8S0e_@Y^1GH>8yS@N7Dd z2auiiedeY1vRbzTTo;CpU;&lmcO8e?mbOvB&3cn*oLerL1h7+s4q|jW8eo04hj^g zxKZvb0bA?5Ci9|bhy5e|!~dlzrYUCnm@)n8xrkw!dG0xF(^fnhvc;3~@-O?OE3=`e z=k?AMpkUQZn97DUR#-REWYCf|x(ygIRqf6mdk7e{b~O|+8BxA26F(w}eH=nsUuB2} z#gfv7X;9~%X}B#W>Yt7YcxSxy%)E+MexE{9^LQFMw1*B9-3RE6afZQ8nt?04zoW?3 zrc7E5I<^aY{j~;M+#hDl9hZ(L6`!;bKz~jIi>L4XF7#L9Cvl-Gi7|*-u+L7p&48~leMkwLhj{Rwp^{w8NkY7)s)qm zBeW%xS}I!I;O1=MRUwE_f?mZrZr)q67>|1HD$K-Dv>N4R;TyLQlY(-$_N?XKq>Mk` z8|{V&z(TI?;w`}!j8W&)QU%fNtipJ{M>t}GI|<$*2T--3xacG=2PJ{wI>F+a=)})g zIw(1_omL;RK{M!r&L?52Sg6X28}1bb>$GDUyW7b+D)wRnI+2#A!YRQv3>HEi!H%c+ z2ug2j{rTaZn7l)#&?(U*ZfvCzSk4e9%nf^#`4^X z9#zw6r2$Ge>e^l^Iz#SAFFW&+=1t5xl-qh#iQx$qLGy$tXRmiW=OVR+Psmx<#GG7b z4z_VO9v^F>;ooEu?PhvHz~QHI?{pOTB7R1SPP9{ok4^{N8c(xk!Otk~*%Q#$e#Y5C zW5UnyW3@cOIg&TJ9xd>=t9WKcKKVgkK~Rmw2taRpgmvK)Ux>6Jsm30dgX@6&(&!C6 zMF;A&7@XmASf?ra(6;+D6d}=I^ZtpVe@5{ocLaXf!5u{Z-qcC2m{G$*uno*?f@gG{ zw4B^+^9ZG)108wiVf0INlltN~hol6mNvh1` z5)w-o>Q_obx47G6(4^B|p-s33&Pt&9J$Vw!bnk)P%p{M=0ln*ic11Yl^M0yF-0g|m zLeyIy)LX5x*8PRA5_rrc&ZT_mLjDTo z6U<)ZcNoS*{xL?dHuC#}>&V4(WDf!>HH(2i0RJ7)in4rv9kYMkd464b=>PY$|NpwC zG5sf^S^qwy|HqoPTB{)e3G7w&1Y@nz1H*dc0dOp<;D~2_$mOa!clpFE=Ci=&Fb_S zN``sP$-L;)z7ac;;owFY5*%!bnQgghkjh=VxrXZMz5)4$G-27MO}}aOny+*HF0hKq z{klZ6(YRClBNF)8^9s%#I?Ww?+T}- zU>5C3R?WPMJsYW-@wI4gDVY8T+VMn}!KmCjg6R+|dL&0IONUlhvx7EEn%Qf^K~JMU z?&FZ2XzLfv6kfP#%d1g}5^uxT%;pbRZtKU)HKpIvp%)V$9;TlVZ)RLnc; zU@IMvIc?hZfcMPp%R~upgYG@8I?XwREVuPeL{ zgP<#AySa3GMOsz#O1?-3+EQT&bGd$hVkrGS1yi45*x+A1qqji=#m@asW&v;;|?VpCU0x z{+Lh3F1l-05e7j|DII?jq_)|GCbqeSHohUG?VNH4K}m*isz1}x&acN>_O}Pt;BR0a zarf<`=i$Y&`G{F~|Gg7D1}7q7_nR{pb-_4T^MthEK$XiqJjbl2dgZp!SCw2iC$%A{ zQq?OE9%h{ElP0eUtT#h6eg7l6mNV=99ZLP-TQ?JSV@UbIkB~8bvd>_T@SrX~C_=s8 zOh}s_$t65#G)C&A(jMo^akPic=E@@JwjdspR@E}%n@mrs$i;#D_`XBd-~O2Wb` z9ODP*zxVxz)`^$lZ{NFt0RTw+-}JqRgM+Puvcq3POLH4jMPo;2D<|>4Hbz#)4*xG8 zR3)z2Ebt=-|BTJg4w?%=(j?X=76l^HOKA+?DyCC5o(m%2`)wMD!$ji@vj(~DgF*z3 zgTVC)5llyhz>AY>=aL`X-KE{|WqdttoX`PG7o>|~770M_r)yW6#`eLqZ6;38v~4C& zWFcP{%S-%C{@dDzv)u^9YuW}A0u@ZeBF8+{d;%uZ_oWuC@dC`2(uT+B=R(PFd0RCV z4v&kYAA*uIdF$$2_06yvRkOvpwkWCyxgYVw2V`KXsNs9uuT1T!qZwB z7^``PzM5DqNX5szV@fX|jhrj_#__)D5$5p8-I3yO-}(rqCd7}dysFvpaYlKZ zxh1bT&V6lzxN(6`0)&?5?89pLShhgf^KV!4Bz-MTgUN@0d4^_^(4MD48E6hvP0=p& zN3%jPD|ZSb^4_3}LaZKqGmb{#<_*GJL%X60`{&Ckx@i7+VwY+JE0rHgU?2{au=a>U z#<3)RX=TxQ=cIA(3hkRNT(I=2%`A0t*DQ=#ZFyqH)w?!u#8QV7-%M=OBd%tD5fQX! zV|=8oaar+IxmDQ|o@~d*d#pC_f+P1gRr!7K^oHM68)Wif+`=lJ7pJ3OQtrGYmQW{t zOfi?PH{=U>5zK^IeD{5B3t88GQ2w;3HOF}Y&x5P)81zxh)d>4PVs?wY z%(9sD_QSchz0#15&__S??}>9Wur$>@yUrG4hkAN8Z9fwH(B&)SwzDLRPpP zqr8|n12&g{i?ZXhkz?%^>|*iWh~I#BX9*?Gq|LG7`()fS1ed%5Xvj{a4mbYS1HgTU zHhi#VV*!bJ+E=9Zsr`oa5t{dL$&-|0VPiDJo**guze&*QiE9d*e83It!4xE^L-xpt z`lw{1bh4`HNHj{z#uMaeG|+<{!npWT%k7d$XQ4)RkR>W*X2;C6#eQuDg3tK*#qDK6 zjHaS*btC8|a_ysSupA)`>?NbjqvbEX#?EpI5~rvxwb|l1iiSB9*$D0y+aT`~=emU# zBtvoBN)Pda5nUI#poMW&u7Be(kp@tjbca&?7oen{uteUu{(C1A#!dIx{JKTu=Kmjs zaR18$|DWyJ1*VU@^vv#MlNLW!XqrGxT>BUcBng2Y&JT`G9Av{Eln5g%$V!YAj)LNO z3MzjGTDvx%v%ow5Ns(y zyE?%aYH0Zy0{Sxw((nDcx|`F=--5?mG-2xWwz;d_7V|VBC@YAXe_pR6dDZBJ*G=@j|voQ3t z&vo!h+r0tu?+q8Nd(HCxA9x)=JH3#d61W!yaW^uiKdDm+ec+kD6T%51ErJ|c1TBP< zM4=R7mrU_6g_A^)6y{RV!jMc1hSON#2sNcU^t1o3Xh1*y^bB#0a0I?fTYj96Uc|N& zicaS}HJ@(lBQ3v&0#x1}p9L2g%=|Y!IN;!K@MwV)uYi_*s36)Tf{@*iK`8-j-nh^i zVd%Fx|Hp(!jYR2woNz$^RnXzw(akSJV%EPGx zvQBxK4X+OB?7^H9M=xE^1I6d#tRPKtMt&0R`YFLK;*|kNl4`m^5`k*QzME2}ekhXpU;?x~ql{}f z#d7Mta{rWhF?$xPT@}SN{ZJZht8Aumc!P|6G{rQ_kUR7JTXAbIGFtjRp-1~Fa!TsH zqLQ}gg0@XKmDx0vjC~SCHL1VW3F5^N3p?VEuco$T_=U867ZfWz!6v`ZrdfD~bRA&D z;8bzz5HeQTv#OF)>OQN|rYykL-*B!o?-Yt_)*+ta)|BjPrXfAPAAT>G%9eFe0|(2@N;^17(eGkYa&fsH%j`V6;lTDgTI3?*(U;npl% zm)1eYefNMaDLA^>Ba!w_qtFzYyKo9!=f0jH!(z9n>za&x7^O}L!*1j7mNJXnJ|^fp z*eCauA<&2y>AP+UyEVM@eIkq3QVQPX-fua@208FkIh{-NJB`}xivGQi=PRb6li=6> zA;rNI;Y~e-hMKc`n5u6rB`+}{FWYcD=sTiukUJ!vAFFUZ>AMPwZ{zSCvsWLbD<8A> zANjK$r?)KJA2Hh>`k|cQ*NEONiJ6Ym`V3l6=(?4mVDLl|!F+0o1n8oy!$QUalIBc)<_70M~@;a$f#P@{B$ z1(`F^@kER}My0}3#)(8+p=Wwyx$`8M6zubriNr3MGZte!i>;N!FEiioVC-Fkha-L< zvseO084h#?(g*1@+fg92inyRqZjQl3p|UT6U~c507-92y{E!R>;B5tb0X>fSM3G?Z zBZG-j_VvV&wEERVLun3F3Wewa>$rm@)hvH45tR@u2Y(8(bcc8fso3H}qx7=HL?vjB zrC2fgQ-$^QbK9&fO{JE`I`=ziJuOeA-O%*ocTzp7KNXd2Yb%=b$_vZKmWBYo%fhF# z)W0XC&sSFGcY78pi(u9zW;$F=4bRLPTKZrCkGH`BRM~VUW6870`7tQdNs25DRn7=N zD#KX$eOnu-MP{($W#*<2V3-m7x}xHyDK)-=t(Ern&f*|}bRG-O+&c491Qu(l-x!jq zNHf*>!wPd7+dhYm7=apaa?O7*LZ1-N%$Zmbt|eGO-BW(YO>K z7Z(T+D$GerC(*tp29}mn=VwvYjgv+tSB1mJ9wp}KN-FK+YAd+lu(1b=vd>LRO{~lB zCLk6--NxO=z7O4EDKD)0(^3^{EtK>nZT9XRHCBuUmY4yB$*MlRF{xIfUTp6f7|>bQ zwmRI6Lp!MIo9C8V+suvAJLg#K2CuV}78)nEkZiPC%kzP~88i{5Ae#SJCcr)GIMrmD zb_}(;#(LZs<^)|PlNXk>)?d<#Nq@%Yk2(3Oij5#_z~Z1YW_p{nuhM(EIDEmYo@i{W zL_I8RDir9;XpCojI#ebtgmeFuqsSuZY3j0cXwIpy0I@aKwK33V_nEi-z(auPx(pT@ z{-Ekv=FY94cEkku_BmpVBKq*yXwE+loBW>0*K6usT&Ay+;xUBxR2Q4u$XF8b{0b*( z3lR_!S8#SMhFEFdw6dZSqNZTH3wKv<3Cf6^muN&N)f~xD>6i|gg>cPB&sMWi(OU3b zeTGS1Wqho2LH~|Sxg=GWKQzHN!wYwHtzDPW-LWlItWa5E{z;lzP^lU%n(jncIgCPY zt>oCXw6?Z|cs&;ih!Plx@vAE=w)S|5#UCnM++zjyLePpa!d*jsfhe<@+)W*Ynh) zdIk=o!ulg6sIUJJ*qrN&FA+e9&z|^|3hy139ArI{)-nhKdxJ*>U_NtY# z$Ng;87{D?b%gm`K?@wiASyOa|6(#^i&CWi|^a%rF-R+C{$GFXgFTce%JE(7)d39rT z*ffF{G{W$qfJfbG8)}~)Vl`DJKXDaO zGV#lRQB()+GD_5Uo^jGIcY_%|p~14yQy&GsfL5x- z2sMTyQJYs596C_$sw`*hxM1O=JFD_{HWe#_)~eL7=fh`9(AE`;)zuANVk`WmZQw;n zHngz;t`T_S9{gqS`3ufO*RZ7Zq!s_9B`_pxs7Gv8!gR z1-(chv{6UWUDp1&DzBJkRuM^E(Z4*UZ+Ejk0Kn&a7bHQRk@a2T4+}Hfa>Agwt$81; zb%L24a_ZB!##Iwd^tN(RFg4uRB*k=PoS>z?4V%nZq6fgeWqdT;K!)R-4c>gZi2Ozx^rkWq)%?00786SeQ^^8iE!wUdAJ5s z@k~QS*w@9aPDRc1N-JR?z9$#LR2%EG0pcct~66XNAD zBxA~zLF_Jk0)A`=9qP`aR4)<mc3VF+Dl#sxrO9`a`Yvr45X_gpkN}RUfNYcmsV(`+7|Xiy`dC>$r@A$y zK1Y*G^qnJW>a83SWwi2K*m=ku3MyEHVHDEU`32)~#OBQI>KjBEThSZ8a%w8HdKBLF zp6lId;tV6o|IU8cw(qL4d?0M5FE5QxS>sP-?NhJW7}l^skYsJqlHWXnmdr+-<*&!( zs9~9VV|Gr%`w##&w!B^5&DO+3k$VC-)G@QDxDK1!5$=&e5hStVbMp7;kN?zE+1ZJ# zI*Uc)5<(z1D(hiBk{5sLNtYDXE-$uLB8+n?j4d)G8CO^jQ{Bv&RI`)FXF4?S5!XDK__W0=!o-Q#1xb`2{EjTg^c2<) zHC82jsj-65^2GNqHliw&t6tW?VoK}~L%Y?!DkfINi_6^&X+0sQU0;7UmD4@o&k4ag zZih9TB4!L{J#=v6oS`Mdtn>+ZPx}!6TGe2nf6(tPcm$9M1{R0d<(OiwOCi~#=CxXZ zvzt-(R~EMiyTOQ|gK`8hmi6^u`GmlE{1)LoP4@O^5E9J_NdWbE1-*m}}u-?75op zHx_A@{HzVIG|9(vG_AQ<$DNR9m@AG~MbBilL?T-!QGJ*+7_&F~w%Wz#ONQ%!yu+`+ zT!)mS`8nQzKdvGOGc~%GQMy%GViq76+|5?~i1;tO{=zeM_`w?~eo7wR1eh5bzffZT1QXbs;j~L;X?_iD%#hYEXz+^8DjngX8lO-*TYS25f&`WlpGO+mr%y z10L1Fpg(FMHJ#D`)7Bd=Hem=}Ye@49z7alcW>%O zU=yw_yybzzZZ@-f8)^YY&k2C<+s?l=Wdu$X-{;aCAlVd5-C%^XFTO05Lx4ryrcPUD zRKPtQFLgFAoMP-`p6o5vTuVmXtwP&kRAJR%obJ zgsJ)^sSE3TuOE(SM9Mt{YEJaS!^0a0^gE8QdS+iN$5f#>vdBJ`E&2Yr3a@tt+EWPI zAvSE?VVd~tJ+*r?!32$aG&kGm`5c3@RJNECmzP09iPid?`_LQn5Xd55T{8FC?y`r1j(gUs{UNJfXyEuvZcvVtmK_2ju3n!SVGGV9 zDz;>5_v*eN!&#r!7b=^3=FkGWChnWDwe?jaK1pGw?Cjuby@Wb*FGYiZc zSuG6FDsA3GQK;2T;=KJqm(qF$%8sHwE85l$Pz?!P!bDv36^<2_)!4)lN^+;7uJNdO za;N69rUQ=7^1>0Ohig^mbo>g^xDCE)Pu%S@dEOnwcj1uh?FqGe!e(!7$bqX{0OX3) zao|g!kSr$R=D(p-Cw~cw>v&f!FKV%Gn#|4~`G@sn`uL2RwF-mk zMy^JP&PUo=5*sJu`U_C~~gIi(87!(@Oh9#!$;ncfA=jM@y-<&!rDb1rq6M1etQ-1+9NPkROecpTvo z;wC64ZLKT|(7IJo%_eXd$sNX-Jt{Gl)eB7!)UYCOVOg%4zB&ZT$Y9DjH;^|aE)#7VloIVVcWJaXFUdF} znhgw&*K1o24u2SiyPXPqW zJ0XkD^EczQ*fsY0j^O_UO?~VMYt1FGlCCG_>{i*5Mc^CQ zWiH0UjfKFxg_5+yv&@IQh~PrO#b_hp`Uu;7hOYNy`GPYsV_)GxREZ&s_4Sor+oDbD z&t@LO56p4ZPv?`8!BnC?rgn09C^nV3=e^y|t!0~3Iy93zkW1MVT#eU;fKxDLSjCP8 zxniHM7Pc3QE8P9`O}SkTG~tWR3zWf0~zp1bzV9B)4fKDF{)idd6wo zKnX?th79Ot!R(u-`csn|1SZcx&-pBiYLN@;6*(G%qOfi+G6Cx!VF!vDg<3*nk@q)%U#^0K!IgjEp!qtjAc#0 zxVrBeZ*XS%f}cOETbCh<g%S`9qg9T6ifZOLh}Y{%e2~&?4{IgJl1l=mF$)Bi-0_D zyzy?A2XIcdS9dCIj4d>^)VWqZD2_NGi2hF{eSE#`-5{shEm2&67qO+hiE4X`WH8b9 zd{_LrBz%M+dxngF30HGt!?18RA;lwcNy~V22gCcZ2Q+UGJv;jm9PKJO%OS+q9OWVcis+YkTo2%G`BBqh7 zo6)haHbjc#mNw>atL{#J!!3luWuR-UIj6-wj}L-&fJJvCednIqe|Q6mV7oI$eR)VG zcjZ*gS?hn*l)HKu2H|2dqeA=`=^W<6`Lj=UwHTlBi{Q6B!c9S6(j4HG$4vXi5auKCF>qZP+>+y z1R_bRc)@OfucFajNm9EG@#@w-1#ggBrme(`dq^vFos31@9kzpK%&;!{l3E=<2hq(| z^}PI{(3#L(h>a!e+frCx&PhEIMiXB8!gpgf#$$wTI`pd?KCQbV8Rl~nvtvhC=9T&r zPz@JW{X33x`+jG?d^LdqYwC?MQsf6Q9pl8xN!&v>7GHbtybM77#M2|GfmMc%hlF$Wkujt zhZLrrp5-mkPSz#(2vg#b7!B+Xl#Lj1&9?N)g56XoOb1Pm3eAg18qidgr*+j;>+F`T zhLS&utc6{LmFdF+Vk{{p6*Sgo!UMu26CIwgFdX%roX|2Fs3; zxM+xyDSDe8wY4$G&V!9`>#UG}9Qju#>?Wwl~7j?gLyk7}5}Yu0y{HiD^8snn9o>K~<1WXR1eASR7Mh17-;* zm-y*#B1hGZUh2ATA?j_-hsnt7jcYX0Z5>iw`;ew-s4}?jKh}@!NucdNU>l7KZ|;Wn zdJk$`cxyb~xrlGqL3$p#I8s(JdYz9_iWKA**5?C}2xu4&^-~~C6wjoEDUog*BnCQ> z{&KtNtSq$us{PTTGS{5Q3Hj0?yg#>xY(fpIuiP@qSGQn6IfDHu^q>C(lAM#qCP->;iFqd zj?2O+zp9F?8%e;D|7Av(jY7-NCAFNEuLL7Qf`l8?lap_lC)hSB&aoPN*Ts^IVQGjS4 zYC0L8yfBlfyA*R#2WZ-RM_I#VMql)Hw&!YEb#eSpw^)>Riw*#>hC9IVkW~9qfh1VK=B*Igf6nO{|+w4wb zzuJvHOIIC@>PF(whb;i)AI==`C)G_glZxzL!0Of0QKFlh$2}zse!0OCf(|Jq&Wj=z zW0z>uvq_P7nLt$8?-`P7uQEkG67dsHi>~T6_U^y!?O|x{@1=&d3F`WZ#`t^T{Bh7; z{O8}J8$Rwu`r_+Lnor}baEP>tlFi}fUZYNc%CVQ=QRW&HRS7jU9ZgMPO(ByZy>MFo zJg_GMK~;L8cJY1rShpNeaps-ME;RE^>j?# zBO_TFCmX7+0T~rp-W38ydw7zZHVaF=$Y@OVwI26Yi@%d4bx{q#7~d(k2n#vonD4kG zi5%Co%gE>XMWcGWZTh?Ts(Dsa^Bf?tyXMCCFx}%{OMNLJZSf*%Ug{FX;_P<4LvFoGZoPh5m6wUkkE7`?$P@3PcE|B0rJ0LW59gj>or>#~ zx{IYRP?rJ=SEOmV8LZW*bMJ_DIH6S5dab*4Kwl;-e!h@9hiz1ScPpmb&MN%!7T-;1 zOjKuT%#1$hmEj;u9rehO{3Z;<{-HrT1`2IySTv=3?F<5xoQ3iu!&qG!#jS=_)X`Pw zw74V<*&;GJAEw7qs#R#72X1hFm%kRWWRL5x8161-1gBdN+f%b8fA)~wb^@UgFIhXM zLD+OZd;Y>>ez8fbYYhG=tr1u=@;XV9IpxIQ754`G^o;kuc@F~5zZKH9 zLf`7teh)$a`(eNq82C8u*&sp=4=*@F0W}d!m;_l+0@*MbmtU#?&ag)d0o<2$BBe3~ zk^q*4=q3=5aS?!rx&dRO14eEH7>aB_cE|hisfMuVdfu(-kxYHZ=KLpz!fc*wuh|NQ8U`njWCzwHj*|VEwW9=4eQQ zW55fGLJ%cE3VW12ruMIo4V!|}mE4{cH?- zHr7Bg#z1Wc9Eej=sy&cQ!ybv)d4j{s6?9Kd+5$t1r6|%wk&amC(FunX8Tp-XXt61Z z;@oi_bK3@1<}uxIBkoW`voW;o^m9r0cct_Eh<#UOl3UyH@1<~^s^8$;?}@JeyFd83 z%kvuqjN5n!h84wiz-{#O5DcgCwRU*~l`po-BdNUBE*DXG)mj~~(YjXO*8xr0>tKmT z=DRg_Tqlg`gwgZdadJ_S)&Voz`g)ii>zzk-!eR1eaC@ZagyJV4y%WZC!r1G)7}7R+v=niSxL&K*@a}_Sg=G;`MlBvlCEvo`h6*GK$AFNFAp^F06&& za3(wf=fI0_F1!L4z`JlEd;pigmvAY316RPWNI(CEb+8N8qXxc?F}R*dxQQ9Cfw^EK zON0)V4Y#oYa5u|?d)a8XkBx^-tQziTOW^_525Z@Bc$A$1kD=Dw#_oqF*u(H7+Xhdw z?XaDF3@@;6;6?Teyu^M(A-)G*c^gEFF*qOFHBH%7I99Hzp(V8;x8(_gmZH+`Dpes>UaTZypX+uB?%ckkG+b0HSq93 z>@_Uu(3kgOuVW7ba(NbegS`nR!Z@G3#omTEgmfl*hrJ6fgtwBthdttzfSCvB`%ogf zl+t;h8SDf6#~2nqL?Cv->~qyL0rR5WZ^#S zWA=$HqtGC(wn8b2j47#8JK+chr z!YwejSXl$}^75a6qo|QvA}8t|a|=`>c=M@wCoJfIJZu<#E>sHT7^P5-^_ZQo5S7Zq zu!utk^eZ-P0at6cs#C4%X-K;XUeWQ{gqs8^UiJeLlT@W26-iR*Cqj=oX})wI&LxFT0^5rOWcM=Y)KB9CkUX*j1nk zGm7Iq@jJjoN-d7h^SC_m5tK$0v}7IV9S}zneBa}$Vm;amktBG~gvH=2_!9{uNKnT^ zFT`9k8kT-ECzeAMYlnqwCDgN3(9Dj9c6I`sisiG=H@S$N2J6`AC?U^4iFg)D!LyNo z&Vk3#J9!3uk+;wr_=sHupW^$kQTqJME{EUP74Rn-v%Ape*u&N{iKcB&c0KEZUIr1^ zg-FJW!K>t(iSP|U68a5XsLcl;3H=+%?oAC#3$m40Xc zBl5$NLw;Ct$PY^n`C-W>zlA8R!{j#<5_UlqQr{jFhs=Y*Y!7%0_6I)qHQ1j9`|B_0 zfwem!wJTY2`gFuGI5*?KMD2&;PBr4+aoNeqC$EPDd!v@F11RS zOr!xJa<)LzR#;Y@hxTZ5Sl10C(TF~nWVfKi?f?&BuqUoPhuwv`;%*qk?uC);eudXO zd+HEt9?o_n9+)c8nmL-(ec2u?iJ+P4L2ip@p~ci7kL_jqoW(qZ_#%cKNj#Rb9!eZ|rt!6*upWK!dB7OLeQA+qbMw(cWb%E!2rPr+hef*Uuq2P&d$ z_8l(g`;d>6jj9XSS872cLkk+o8M()*E+}h8a*ms5FUUZ9813#~BQ}T8*CEb&KEcf) zp)}js4YagElEb1>Y8wiGtq>ql-#$IOHyZAZV!eE!IL}=kx!i)F12GWBqZbui?hvG7 zK+Q@zH65us2kCSm9{?lxKp4#j!FXN(6Zv46#PeYmAF7t_MffH`ids6y@d_0s(}HJ5 zxEC29a`vH<$w|#}TqiDhC!|EJTI0H7$WL@!v4pMAQr*)wv{rO6=lQS*b3P%2?*yEI z@XhIi8AtGD<8bI1vG@?`hC~Y8l_*Vnl2~1Zg@R64P37aU>?mif883>YEYjRs&do5O zfQ0Y~>rl{1l(@-mX{eeL7cDB1Yc-U8AL8gelc#jTNvhz|a+WO87P%!}I^krh>*?Il ztv@9=ZZE1(BdrO_a(t@>{Gw~y5kVNp9qY+)v<~PI>VG0WV}YJK;Z!xkOZ0$RR{>!4y6jDtRf);Zva&pO^3>VL6`;XYg{kfLFj3yb`YG zRqz1bALcXQNj?)^;IrXPJ{LaW^WjIn0Di~1UHn)k_(JC5wi7xNS!x30Dp{$aE!oE@ zJp-eh5^hvTR>lX}2TLxrH8~WcMQV{efN}5&Pas*TC~OoYjNFTq%UHUFLT@(=WpfR- zX&=!G5*;&mBEBO6+{AW*xf`2$GO(c{K^+Iakwghk3bGzM++n>-9d&IBL%GSu;OXn2 z!7i;G+f%_ho=~cY*LM0!@ozBxRS;w07-w|Ap?Eu!!Wn0k(||}>XLk@CB4eJj70#{h zdFd87?;$uJIg|np9s90C#+@F?xFOF!3GJp+LX0~NQgIXOKyn`>@&-uajVO(d!}TnM z$$S|c!JFYo-U3y;4L39Z$MAO4wku&ZUkxX69El$fYxoIp2|p<$mghi!p3GAaGkxGF zo~pKCjl<}~-j_zOcN)Yc?S>Idmq|Mzi<7#EHH=*pKm}O zy#;RI8{u)@0nhT=;YEH2yvy%|5BOd1G2aA#@CRWh-vWF2L&zDAsI70n-FXoS$jviQ zkI#V(Jd7E9fqq zmncH>7|PQt(VS3weN`7bA_X1MqeA>ytinmp;pRS%?(Yj=@t2U3UPaOU8gkhiP{`jz z!TS~}*0*6Ae+Opp_mJn_hxz=2kbN;9QbYDdQ%K)6IpHfTDXW6x%nQ`!*(go`VeN)Y zL{(d~mC=_zRdTG1uWSVgQye~+=WygW`+oKKoJUt+5zxF2$S>B{3Widlw?{8FJVqznR9$Rt2baezHahnG<}pxH zT;S2mZ2w+|;D;5k8u6A3ccF6)`1hc?XQQNkF+}87!T`kPpSat9 z;ZE;@9(*@s<7V_jt(Yqq3=~k#XXu~e%`J4j!FNYb8WrQq| z42J@HpaipJSvJbff{tE!LAyN|T zV-cR~bU=%k57`L@Pax%)*3%OiMBqdDAr7m4i~y3AQ4>Y1w?~{(L=)#7L9tfn5T4;s zWS9VPpgZrj-GjR#+yk6C3pH+Kw09s51yc-zEHM)LiXzAtqhW+N491FLC=p{}nivO_ zVmx{vhljj_s*rbpV23!m2Jv~Qb0~mbT~=ycw0!ErhwT%hS5WYB^fYI&b>mxw1bi#0XLCWnKxpy7pWEe$sL^IGKU;JsatJ4$KvEp++2q^t}L&J$cIJV2yS9LKLz5FmP0sevgfbWeU2Z8T}+z(uCAjQ|^P<20;Gz!$k`?_UH@Rq{&ncpfoP81 z9_cuCePn-fu&?MMd^(BY$UH|%h<>xhX2l+4oRd+`KgH5R#b*8vaI0;6*kdXsr1m(U zf{BlGKpd*PxMC^Cb?|$Yy|0S5bQyaqj-9_9da7|AMY4IU6Sjp0Bh7dniigLilhN{o z9N)p~x(x7ST8|w`g$0M zz5A?(-jOl4H#}CzA3{LJW4AX|x53!$txkBmOZ#{BZ~v}pUxw}9QzeRn^gu!Ieg}-e z$`8VoLRChM_hFauI#8RUOQ<9aogLz~e#E9zeOVVge{2)v+3e7Rw1^rnc_({TRg?)iS6td@d8^YUSzf6 zRn{b4W9{M%wpzT&E)j3Db>ba%y?B@1DBfc?i;vjd;$zk+K4p)H&)6H{3-*Edl6@+^ zVxNnz*;nFw_KWy|{ULthT>Q)v#4kKW{K^N2fAIqG8=orv%d5oy_)PH!pCfkhg<>~f zBKGn&v5&8kz)zE$pCbjoO6nXXCBIg>_(mDe?~xYYA`|$NGLio%lZ7r*MS@HdUYRcX z%1lutJz|{fA*y6gF;n&uM@z40kbT5**;kw(`-wB>?mL-v%jWG^{K_LFnvKzUT?ymS!yJ>(x7tOB(+S)6g`m+#@@vChTsf&cQu z(T$5oU;IZt0ZSGuG#AfHU<2}+NB07LeI$!r@nW$+&80G6t!ChSI2k-dKeR-(ZwU8y}& z=-)mlw2xMmYo+=yN<-NL&<8zsoF@7ufrXtsUF*q}Pw%GvKD0U$_OE6L4*mlu8rloH z_Kek)C+i5io|60*=-i0%_&EJ;m19r-7i-aOgE#XZhA$Zu8wC%;S9mwwS_-TQAEm{4 zj2$Qgsvm@Ta?xg(=Z>@W_q-H_hDo}LuX}U~xh_ygXB1#svK|de6xL~U=8!`tWLu!A z1CA3#F1O2LY})_}yBn}~jjc}IJhoTpb`7HwI0NsV_~0CCUFeD55O%&B z5bGcp;l|fMvaAKKtcL-z0fx%OFkUvoBzYW6lTA=5TM(M%uvE6g3b_*2$W?HWJRUBS zC%`rGWVl(L0=LRj;ZAuj+$Yb2&GG_xR9*xxVf#1arHaIlM|9qY&fZiWk4{1})GHU> zMJNs#Pj9LtGp0&(WX4tL2gk5|Qyq3mRr<+s|KC){XgZo&FRDX-1Kt0p`4PMfYrOCP zpN1qJr--;8#P5L|IkeunM|} z^sj^N!mRyWr!bmT(v?K#TcU9)uZ3)R9rTyiL%y_64lR4^h+wHe<1FI%iqo$L*r3R> zaAlM}F%cd9Z;E9;#Z$hepfjqb@92CkpLN3b%9w;vL7n^q>R%$M)MH#Vn<2Fmenf3t ztmTuY`AH4&^Aqq3{_BKaah!h@>v;XG*a$86k*)CW>fmVqA-%4VUjMJH*SEm$!2~Cw z-r?@J>mkQu2HXFSoUFLuS@a+CJSNg*+%PJtgWwlEX6m2xBxwjbOt~3Gy5r;xfYhA& zm)#{eSQeeY&}ciu1FBJ;!?wHViGU_+a5tG7#x`w`@ z8*Lf(2~WI2&&jICw^)^+JqCNLMgFX6i5t6b7NtRj>GKO1jf8bG=<*gwk{eMJ+y?3L zcF2-`?h08zJ9kqvRKClKhHImEW*B z`7LXf-?8QLM|QIOiJc>VX6NJkOXa`V{qlFVRsN4XBmZE}%Rkv0@-Oy*+{wO{yV-Ae z|3mI&`{X|E(tu}ZjQ7L)U`_A|npAvt7o@;tFxokTe+R}mrHkpLidUhED~6*~T|E03 zde|kN0NHklm@bsFG!aGB%}Sq4bWWY9G(%}rosZ!&DcXo`Y9BreHM9oDvM>2;)X+K# zzK>Nll)(;V$$SoXUS+XuytYCVe1s<56E z9_%q-qQR>Xn1MSXnU1Y8c0#|MkhTxf!Rn?xn@VS0P_z@gWpp+U@ds##vWE?$fp>yu zH_FMK&@)Or&F2ej@uc-bd?q0-Rui3}gi*qz5ZMCX8ik#tNkc;A)Ci%H##m6Qq%rPf zwgg2>gj_f*Bni@(2+EZ-inA-J!0Z9^pugeBhG$SV+}l+)#Ers%QRCVJ7Zwml(s^ly zna+%wQDz6EsiJyu;u$qqr4;CEC`Ix+SzK|v8wL7sPyBYYwJ9mk6OSz0FV7S2wuWtC zu62;2in5c%<0}*tl>GOhK^B88B@B`hU4(|Vh~UxaIQWbVvnHKcHEx%-*^ zdg!wij;T>ik~4QJ#1LM;=n)UsfM=7o(~AJ~M1{D{^cp4A4z+xYyURtTSH zL*OfIDEy)w0)J_TGEE!C61CwhO*@2nw9#yqR?3dnrn2L;Y3y|ENOplXon5Mxvum^p zcC%K=ZqusRCT#|LSVNJZ&1SD@bJ*8-|52OA{--Tse`&Q`)9QJm=Hni12_L8}<%ei3 ze7LrZkJSA9FnoWw7T`x{?R=)Tg4f`Ev9_AGXeaP??IgZRJ4K1P7m({K;c!Q|O^3O* zaD&@mxMOqu<{YkDYzOqWOME0qel+_6645p)QFRIYNJsP~5JQJV-|CR)TOAU8tNAhf zShCWvv=D`$L?PJbh(3!ib3|VczK}1%k^vjpTPWtPMyNhv*YFwz)mQ8aUd!uH`2GcJ zcs;^mDIxe8^xgyMwm>Suzr9dIq6r1wP8g3;ZV$RJEIVl@XnRpK8QjPEV7aSMGk60F z3bj3wnvqaD@}OGng2`St$-QbPUBEg(hj0SH9u(c|7nY5^e$iCIK|D#$2w016N+IgWMWK<44Z{)|}s2VzsOVt4wryq)P z9GXew>S3!hVg|y~Sf-uXQWg=bDR9Jg0gCMkv(Oe(S|LfPBB`Xz!3=z9;&q)pjNvP8nm0BS=#_B zv|Hd5Z6mDJZjJct()6v6yAwZ=S(r`FQNdyU{uvBe}rnY4m$ijUHixz2$*jvK8R;oQIjNTJJZ*lfyjB^~c zE@q4}jpaDhp2m7%DJS{>D3b1rW#kSy+fy1mzICH@Psc;u?hK`5(FP`I5jzxZeXH{! zZ3iO%c^IL+1e3Ivk@{al>VF+6{|#8Gy$J#BEjUqo8!7)?xLSKJ0^#dI2wxXM_&SIB zskB@<&y!%D;sc37rYr*C>7b8Le1NtcUMC?+2SlT^mA5%Q@Ln8;obNz40;IQ1=20~6 zAd-?P$_pI%QLt^iLSjiU`AyGR6e&Fl9O+RIfypqo)Cr^ZDPrq$lowy2y!aY1_8lCl zeGhZBA7G*OBh+a>A=Z9|Htm;)4AMXdQvn`O2@#`UoWcr6{0viA5kaivIao3AIuWrl zI2tSMA*^gitdJO9*bP>^F|b0|h(du`uq~WN5{f0nMu1A4)qY0={DBDA2}89#Fd8*q zskRR)kRs;l435=#goaocTKGbxkr@nyLlpn&Gn&}nOmb&VT(drPL<28r7#GO67Sa6 zK^)qj9nhDW#pO^jGiMznxn<5R&a>gh7J2z-pl@M)P;2%rLc^2wD@vrvJZ{%|$Z{vH zgEV)-I;B1DAyVLgn*mjjBERY)a86s5XTJt=6*_wuB;Q-`dF&^;TwG% z{G^YEKlDkkPcLDXKAxrON3cx2jP=&1vHtpzY=B;%1zt<~!l-TfP~U^NK7N`30HHdMMiRQeVADa$eyzJUU?DBp!-_z4E`IQnNU8PuXKJngiK2s0!}=@7-37~8y0Tv5;TrhCf%JCxh@Xsg32-mG!%x9dBD@X{@-50vZoMHbtlT31BS%~%CuRQ$ zS}J9X@P%`qR(!a9<3eNoWLOU@+QNS#9|k4-B?&NyUVKDywCc8N^t zr-9T@2TeZ%QuQ;Dpw5Cm`q>eZGx7t~ppNOQLBtUT34Fe5+RutCG=I1zAyV$|np!^*whRTY{gQ#;k zsEZ4uZd4dPl_sFygs9tqsJjJR`bNmqZ$;E~z(D=B2=omKp>L3)6^4|Sqv)GMW-Rob z8xwu5X!ONJqHlCJ=(`KicMqcPUPRx0h`vpTzWbxl7l?tr^A3zYN&lxFHh{@xI89Fg zb6R#-Ka9^#o)DJgl-Gb-AryQSMHagBLdj^;9i6oR#tfHLZ$AiF9>Bks4-RJj@cwmzzOp`7 zAL1hmI`VZe=XQp^;7@Z*6PD3KHE3YZGiV4K7aY1|x?PMpBhO5Q&l0 zEo?%EwyY~Yv;{UkCQ{~&R?!{0CgJO~7DJOj%d^pjz=biF=1H?LmyYXUam8+rdpm)o zJ}0NMnRJiaqp^osi3Z3+9rEk$CYo&TOOiWrZDQ;R(r{~V`EGlr3__|q2Q3W``W;r( zlo=k);||ZcT;<%PA@|0Z00Flrz;W#fGCXdYAk&i>a{^E14lpU5p>IB}Ei+tI~F-_4kpAt6G*fh$PVMlu0 z!S4j=U6<)KPx`}bI)@Mj#U-Bf9Vi8h+#OITirk_o!=2$tN7Ju25@p7)9dx*w=yt1z zZHtQBYcrgHXP9=>mzM5m53)myR>?ie zBJN=}LjzA1VJ3?(!(UdPFJ$C5{XP z<>c&)^mv?{9nz0|)5yI#s?hL`ccH&NSr*~p^va@$8u+x6o zJBMNAe%U+GgMJue&<=J>-WE2iI5R{K6cce<$fD{S{Ai=ihiaHl_edUP6V-}6zI>vQ2lurroRZI^p|0R z{t8>9zs~CQH`rqRZRXeCWvA=!v-9;2*cJLm><0Z~_N4wPdtU#Hy`+E1-qOEjpXlGP z@AU84U-}Q6>p${%{U@HO|IEGmuY9on8y~L!n~&B1!%MMzq`r$Er|;$`>HGL;2Jo{D z&d)O>ztAxFl|~%zFkF0-5zpT=68QT@BLB!p;a?f4{1+pQ?=mulFtS8~;SrfePtn83 z5xtFGVz|*;j5Yd*5~H6u!WbZC7z4$z#voB+3>NjqA)?7RRID(Di8aPZak)_>t}{l7 zTaClS-A1w4YK#%j7~{kn#su-UF;To{l!{M`sp4~En)ux~QtUOROT(y;iAJT&Hmc+R zW2PKx%$8$~Ir4C0o}6qPB`b`hP=uafvqGxLliQT%j#6uGH#{t2DoHwH7eeX{(KEwG)jS zw9||mwR4S|vpw|aO1^j02r7W)e>%k5 z=smAdK6E0u0oM81ydjM1R+^;Cz_;%R;j)+M3Lc!Xbz zb;&3>Hu38yF2Osr8~F7&TdMd(E>TH%X>y79gx|pDLb{eIhN_f0w{{wTMtu^Oq2I}_ zu~(@-%T86hkY$_)TUFYg2PT+t!L&VdTF_s_lJlW7mh4a6EpxnzX$a_H9>Q-_Cv7=q zA-{>E7Ybf8Pkl~jLO*j5zga~$2Aci(E$V!2u-S)iREZ1)W-orLif#-wd-4u-!Z*y! z;3(0nVtF%U>_^&@{Wbx>3gBtV24pygT4PJ zxO(n`68iOln2o_{Nzr}wzWswLy{wc}7lr=2n}P3x$xi4b)`+};G6l_UyZ7q33(B|x zE3>;nLU1+ESs)IV*6ncnU^?z;_v5@DJycvTolc+957dJO?SA?DAO+mrcE|ox>64*5 za#G^b_t5`QN2+TlX!MDFcLOH(Eau6STiK)gQ6VDDa?A)yv-EbqKf9n-KV(4mE|{2_ z?eS#qznCy3Ma5_C3`IaHogeHbj%;;a8O zhnGx``4*Mmu?A-Ghm?Fj2d43dm3*HBS1FxI(Z>%%9PlQ8M17&33@`GnN}IT0 zyV6O)V=uWE4ky0!QDW>axH$OR2SK)cG{lyFAzXC$zC3!fFLFKyez79Bcj}i^wz8V) z!faxr+D;b!l%^;O>GeTU_{+}zIzkobKsC}A4M#ZDM`q?JxCLu)3r>YB^EBvVo({v! zGmu5jgckFxh%ABSAv84d#~d`&@NLd_!qq$iWx|(7YU~%qt_J&efp>&)`p~1*gFj{n@mL-V?EaBSH(9VCy8@nUTtdj99=FWd=nq z;AQ@b^Gmh!5l8fMW$VTGxKT1cjkTz_N*^pOSEWoWwW?AAmfEni4t)7CKiS*K0w~-L ze~7h@(lhjQw&L>ZAuf6E_zo~K^s~o1W37W8PU}^R>`t99iu%Y7$SKwf?0CTO`Oz_! zO$GTm8B&F(NXZpKE3~uKQA!SVh4}zz=4K?=hhe<=C`>gUgL3n6m|;GN0`nP~|z_?y@_$ldxLC}eUs^p;{LcqbYBEf3=P?a+5p4qVs^?Ba@83&rVk> zl4w+{VW)wM&37!vfOB7F-~K;PO9KQ7000OG09BysL~4t=bs7->08b?< zFK};jbZ2s9b8&1hV{dY0FLpC8Q)z8*Y-Lbka$#*{bY*f(X>)WgV{Bn_bEQ}dd|Typ zKS!@C%Svo3vK?DCC~w(O>;#7-h#!dwB`C6N3uMWaWGCT~GRW4o6xOnJ zTVN}cbKGw;w4%3?;iRleM_eQq0zTJS4RKmp`X#K0`KP@+C#t4=$G>Re-Et`4Bw^K zgm^i|;pgo<+=Ax-we>6EBx5ER>Wbf|lm7$Hv8QEt{>`ac{&O>TUOs=-bzMTgK zWaeNh9gAk7ql!nCY0=@XTcQ)u=43QA+}wTimUt|;g~_AV^qv@#CAPy5?i@-+hcVIO zsaSe2J_yN&54SOujb+lgG?1mRGm%a)HFu>m!_8yqY;HIc&%Qm`97|{7%@Zxn`(sYI@osU;M7i~Jk<#maDQPc9m}b#HXcz~JdT9*d8O59^@&^@K-`L`sIK(T5ME%AjHiZkBTTh;7hJ|2FeIV@KCIUF zO2qYC-(|)D7&ujkF?mO#**1hrHW|%AC%ysK7~*4&(6;d*fWyujDI9~*%pj6uD4iL_ zJADNpRc6P>#?qNwwo@ndoJi%O$Mvd&x`~R2HL;O+?AD#hf>*OWaXpw|x4Kw5H4)F` zc8#Z0-dO_+0!nqW8t&-`70s*tyA3PPemkB^B%Aej2Q$&JG3cWlJ~rHAcF3LyA1AFpNSspKu~ME4Cs*tlB3;`4oSsOgOo#0fhe?yq?8X{=}UoaIyn&^G>Rt- zbc3EW2P`iTYKg2KNU|9#+=*c z>5HYuz;s2Zq4?TaRZL68kF~2E&R8-Yg~_~t&@+Big&q`Yh5_DMVRUbeC5`Is=}C`g zV)0!GiSxxpmN!WRdufE8U@D(o>%8e+rI?qZG8!cCT2jod`>pB2)Y>}| z58`|nA58^S{S79v!Sr}8m>voujfdl#gSW4}GaO8*145|!;w4;g$eX>qg|}+FO(v~gY~7*pPMNgH zt=-EVG|g01yjXbYKDxupo%FO9wW%Euys2rOmv{5EUNj+lG``NuUAz}1p=gzoMd(*n z>`MpLkrd31#bb$~M0_xax)U7BJ6lZMBxdV|Vku;Tm-qAaUOphgd*}|0d%fHTJ8(ZA z^ztEYM!Z|>pG?Mwqsg6_;qlRUDrfO>^<1?Q$wA5emF>~gs$4KOBEAmh^E8-4J{GWT z4vGc?azj?SfUP6eYu(W9WEmv7{^F@^Ny*3_ME zeIFyd|CT;FBlh#BO5^1xog`2~<0D?anNh@!dO5~}azm!9oQF++%M2Dc%FQFN+hSfR zSEwpg#iDpOx;I-6mcAx5_xLN)XBIsq>*vd4G)Or)9V7etcXmZOj_lugVCUY>-p&I@ zFz@SRy0U0(H@AZK`Xab~%O+8_Xv)fI)~+9WstHP@a_glb$+sRgq51oaHE*edg)7Fh zas71ImChW9$Kr{JxGwT4#HfgDKwD8}(QO3hxilg@MQyBaiRdgg<>%-~78VwFrS(>3 zPjL=I$#hf{*0=7OA$^y;lfAp%WUnc=lY zS$BfnJ<6md%40gII`7^&t+z)O=a;RyOl4K&$L6|X9eLq(QLiIUJ^IIPU+*qNYgMsD zqP-JgEUT?G`vkuIfU_i;$wW`+9av*%u6^hIp3`}$LbFp?h^>bb(l3TWMJj0#&-JVP z5^fZv>&Qk-`>B*_>3TYVagY3FK)smvS?2wiAGFL5VLo7)-+=jH%lt<2Nl%8cPueo| zj2cgLXzGdn49{9=h48!r7Y-+IxCNt=;2}Rtgc_%a8w1ah?L65V1J8KQlS8J?^W@T} zT4VS;xz8!7w<_6#^=sFuidnif1s z3#X{;Igqq~WAMf%=Uv?b)~>+%0F!7fEu?j{m0IXpT5kauF#$#>V*rd$79$(wpjk>i{q)LXP{BoFQzq2(rMxtX@(zKgceUTQ^t+c0t{i#W-?aLv^glQ7**cNj6X7EfW~QktGIBgUnuT}rf9 zUtx%5y3^eKNBM}fZxsbEZaZbWRQC|nuY)z5C!LR6`spd=$1nXT@E|!ITLWiI_4SC{ zkNwwE8S+CiD~Rk_j;vXUtjRmvO^Xrt2b6mG*tB8AJCyRGUMbmsMQ-NTsM-nAT_(6w z2Dl~mt@dqo3g4qtsY831TmW{;25djDpsIzIgp9NyFBc#qs}T1!7+;Aj%p-CjbMlCm zn24^NjmW|5e~kpu@0m$6g1N-DUwg*AZ;icfntY9cHRaXX6fG(ws~-PJ+(!{3DI{xJ z32)T*ni1ePBfyUc5I_zpr@QGMfV4XM6#c#-zt50g(ijNW+h+*%D19=pch(}T#1vLy z3M+xIKTxYnjBv9Gd*|f~n}D!mzmu>(q<0k)rWFx(8-(3{8N%+FSJ=DhUPIU|h+RoW ze`DYR`3J)Fm5wQ@EUzdg_axl+4od``oy=t{jNu8w|y6_a(XR#gUWaYDtyK3 zX>R)tB$c2n9oGx9J#f{h$>m#oRv)YK>+;o{RaLr4JE=WFPwCb92_>99tV*OJ=LuRgP)8ayC7< z$yM!|rX{oKORv!uYtyvstf|W+E#Dh1zj2aQ*d8X$@i;l`truwJfGa#ntIA79%00=O zrzo`9Vc+1iZ;*=aeu0+CW0D#+IQ2oJZ}lXFA2RlDaMhot%1Y;hR9@-AaaH3e@0_GH z2k~5`Kf{&IX=>Vx)!xk-rjxYR@^+Heoh9a8zKNsoi|+gTX&LVC!|VZ)-&@Mys{p+p zHUH1x`-jj?d;q?D7&-YUBIB3jh9m!ZeQsuaD7 ze0qdFNOqRu{3!4{fa+HI5NJ+d8==3($R!b(k8q4K=IL-1Rg^7!ojNNktE;PRZ&0;H zkL}<~IQBJ-9%syOeVCCBJD4kbHToMjc76nQ(X;RYppjf{wQmg=huYPu`@o^LGM@nT zs;9Y1bu$hGg?E}-%>D(3-e+cK>PtAazDf1;Ewm&rp$+-AvRakO#VyKKlAo=HMmbeq z>~D~b*UKSi&CD}Enm>T;3Te22beWFy5u-z@aDT5`LH4chQMkTdz@?wXF9X;2k(;jo z+Yf04=Bw$)7HkbBw(wkRO9h)pej_q$cM2$_x-Lf!T)j8^0#!7IG2DP_<0Nf5*NDM2 z`egHLBtHYMS5awx0m;8ab$A_7{)VM7U5oW3XvfCx?*A+pPH6_i@C( z&MKqqiVm&dHKU!C9`1~C(<}Bu&!pmqOR1E--;&`aN(r^N;SUU0H^CZhgJ9rxHdb{=7X%e8PkRvB5x*Li$_q6rCB zM%6Wp&gA#CVc9EhmH69&9IZKxvw=F%=O> zh*7?@S8`HzPjbTIjWNP)ScqSb#g`D|z&DGDU)aaAGoUJ4kRV}mk z%faH~#OL>aW=KHg2y7<$;W;^m0{|fV@3~I?8E5%7o`iqKSF%(s9WYhVy`zaF>!{xT zkXBy}N~dci8&?blg2a;$MQdYWjYMSy4$jubuZ)x2SJ!Kx_g4XL3gjhD&iPbNxdBY=ciDG^ zvaCYm;~zwZ7lBeeFzahV3%47rrRlc{2#UX~j;KBGR72Sdl^~9W_7ri>LADbdJQ4EL z8AKKGq>rZE1BRy^zCA+gMi@{<)>yHss;$nDQO`3q{w{CMGmc1CAEjY$)<=P%bWF6G zs4J#kSbT`qPlH%_ZslPOfrlEse zZ?B%k23oAhaI;j_)o%Z5ZFUqW;5aoKQE|xDhycbzxk95p;oP_{-j&%BmDydMO9MY0 zQqvK7647p=B4PT(92CbP(A=G@-I<>j-89X)MMACZNw(%L-te?^gh|{*)p_jNYI}UY zf7dV~J3}>-sjV<-g_=$r5I2j;oWaB1&TW&3y&j1}FEzkkPL}`?`t=v>xb6WW&Rir` zKb2L=E3ZC#;mVj=)sgVeQPaNL6w9H@4c)#L{plDYEXkLaaEnc>mF)I1`tXOR+-eR6 zq>_yz^H}3?P1dpm&NIwNd3)Kd<2gK4BydtB!|MRkpybQ;e3nur zfEQL_-SW3Q+p}_?b7Tui3uBqG=)S zJS0OVfa;l2dSCc>a4aG)otAKP6lWYvt^=}3?d}UTz zv&OWK_zZ(v<~Vte&ZLTtzhlnOmL!O`j6gsY7p9`Fn7jKAV6$-NeI5J?@DUeNHw2-9 z__G`$2`0F7zHqWNv$+R>K-Q92*1vY=9YT_->r4&X$KaLc(k6d>Pxay9MgJkE{>GoD zUK(O1DsxsfS<_B4bTLlfVm_*pYVN3qYrT%|KWtCnRp%1Ez}>wjxEavmoOj8aKX8GQ zFulg}+)(D)?H3^fCBqe@1aC^1Mv@gNw|K>a0lbzmqi`V=65R9wll7pZTukYRd%S^j zXT1k8upzX+z;4v4#Hq9g-w}R9*$LF%bYA(!F^I+!R|RI2Z`#wxvEL~tf?Wf_nau$s z3Ow27pKQYBu|?&S5silF;IlEX|KuiO%o=H)b>E}@IbIR+*Vh$H)2t&lj&uOjr~_Ta z=Ig{Jjhe_J^4S3ND8Yzj-1Wz4Vsb%e$mo^7mSL#uXOITWI&?)7)xtggM4Q?}?^bHG zMH{)5A3lw}FhA5ijofQJxADkH-=7Ab$tu}o1DtDI7r0N(NhYPnfsrX&gIhJOwZ*hp?yo{^hLel^1{f zCXd*Y@pE#PP13{F)9gOvG#^PuFrj8*%Oo`E^JP@JC(`9X7jf5Ze8Q?4t3CDvOZ^CH z%ub>5ZE8z|oR}&v_10XmJCk<&u8$ai5EVYn0BO(bGuonP`pj zV)roS&`~jNgSS6wvsyuiu*K=I-zY;J>-WW>>BpG)0Ug30g#5X7JKGp}*`zskl6>}E z?WkWnU{J5Xo&=>5w_izWozQ9?T4MD_b4O*(BaCIR=Be&acV zCFz}LodMe-wB3?fH`WJ1o~l5vZ+rw^Q9|BuVu$v0aor*WR8XI;m;~f0V7KOG+0+9K z%t8cTKKw0Inyc#C&f2koPdm>O6+2boIklZSC!VeWJw0Qz>#`TK!JduyFArtcUdHcj zho61#<*doDD*7%g{S^J-r*Lz``J~t;i^7jfuZ3rfw~Y61>~Ej`Sl;41Jq8C~=|K;e z+dBrOHVF$GPW0Tae_w23bBa1=ta?74e#hTiLsNPy_(X)_mA6BErP(hi? zjE1|LZROq14(sv@0D$Vh-)U7C|BGyfQ*4*a03DJ@&ju1y5ntTtaKHaLFf4i++B&%c ze_T6V(Xz6b-N7y!{LFCg?_0T0%wU3YhS!tq4{Xinla&upUo=#R5(ra>lfXJRlLvd7 zE5YLiXwYY;aX&ceV#$8JXOmWlAWF+1_`UJgdSl#UX>*Qtv;G=Uv}3G!6J;kc3GOr= z;^~uid#6$El^PYy6ZMulnFwiPH%d}r?CZnsMdt0>&RVHftzn<{mW#?MFxJ1BtqCNN z?VZi)X%|BlQzElZJT9V`f6cU6y`-9Nc!9vU(c?Vz7fB!O@RIb_;1gpB@nfIRemkBa zrg@-w|BI1A6D)a}`y;ZopZg~t1Yl!tN^5K5;Am=Z>|kd_YiMI{OzX@@tHSvIF;F<4 zY*u(cKtK#Z{y2lcID^PIgV2b8Y(Fl>@6H$Y&oAarE*gk{I6+UD<$UHle))gy$3NyT z?)PJT9e(C3eK8n*?M`m`XD;&n5PeySfK=~(&gUO0wM=FziGXC&8P>Mys2Hdd5C&ku zAm)~%p#$-qKRO^h%s+i4)GH)NqM;Mjo&BOTHPq8H(gQRw$$daqM?+UbQ{$%s$pwfbMfpSOSMp^*dae<;&G+6x#Y4!``gEB{d@hX1;~sG!ZCKgNcR z<~D!iY;3HA^d0pTZJg{4jsI!DCCN=m{H90Cd^A;ESz7Mqn@b310_{={Qjm`ohLE^f zvnnOG%onHVPA2UOfZY`g+xgQqhC@W>$vEk$n_6=dBMU%^Mr3A4Dncv5J4_?Uv@G&N zG56fJmzl@d6l8E}yk5GoWLUk~H7cn9l9rU830XqURBzFye>pkK(@(<3EIFZ1f+({HOS$6t*ld_>sPcw_2So)0b7O zqsod4@i9(y7LQ5z!Qzqn6%e4}-CL>!Ir2HjuF*Uz4<*domvvC)rKA za~w=gR&H*1e|ZjaVwzWOsP(l6)kFWrMA_CTRV!sEgcZV5O2}(Gfa%1X39Al~kp%hm zk`&wL-J*FxmrA{M0%chZ_L_26Ix^r;!&)dYoz%^G>6#b%;5MhUBQ#ihHGVta79ZCR zQtrTws3Hx^E&F0yqTDwU~1Smd=itmKE!j* zIdTvy2CJ``CVEeeVCZ-5o;|E*0%Z4Yj<5z}owIG9H(Q$#X`XG__D&d z0t%2+VsWX77os?tQe2cGWYI3`|dDcHvTG&e*Eo?ziz?P z1E3+%L5TkBBXc%y(b`-IMQ{-Sr($+QKAU`o2^Ci&9*bQRnqYdUh)Js_`@T-ZS=q-h zZ^Wn#_(t_cG#q;oCL4>#L!V9G*mf5#1laP0Ros1$XsCHY?%dYJb3v5%S-EEQ7qgxWqEe{vlnXy@uNdUE(I)-Ml=%unKZ=qoUBd&@$+o z!RFes&3*XIZg3;PvM3cP1ZWo+oqAG_$9cv(4T^Ho1XKvkopyT+MtIFdS0^H|Biih| zt&%*dh0X>CuHAXV5a&}&Ld-~Ixw;OH>4-#gt|wOw1on<{!S8QvREfD(8>%N zUw0-2^*~mpVFs4y2#0=-t@20Q3`E@3g+}=FqcI{fgSLm<a?>p%KrS2Qr{IEU!`Iqg77Y-yd9_dHei~s=C|I=pz`VPkbD)TIL zaL+{L_!@WiZrUtb)stf=2z*CS0x*a@xPD>;yjTE|-MKTSyu5`iXBW0kS+3#V=*V(N z$Un7UV0bvWFcc8mFJ4oV*O%>#4V(>}gp5{8FJ0Z;p3s-yi7z@!6{b9^d6>O;=_?wHi4l?Ubq_WwEb8>%z?Hp)W2inm4rrb6&XQssd zh}bDkOqu-|wq;Dtu-nw?opSv{vRYbpV3H3_x@UAOEpJ;6{Z5w+*_KnhFT5$+qR%}o zXImWJpk$@DY=x;6=HMz%$SS=#scf4K4RYX#Oncm|K7?|OTG}c%B&pP?G&G^qsU@5e zUPaNaY^69?uup)zp>A6ju7jLX+Nva+6OK*st_*bxg%7rmOc88_HXItBMM2ZBXRnpF zFJYox)^A9`RoyR0p;Ockf?T7b-vNfN+dO!_PUGIl!V?3}~yn98lY5JRXyKhprtTvn1y#xZbv{og^sq%{knWg-; z6k@~57JGYYihHxNxsRe#wU7CS;U(h(sdEQpC0DQyRLy|e#|S%Sner8HhRY}*!#2Pl zw&9hKt4n@J6n)hYf+ssD;}#s*TvoQ8wVA9{xz8Fbt((uIgEUZ1t7oujQuzRSktwkA zd-OAwbss!Rq&A2<&p3NlN;L$u?+@6U*7tMzFxXgALg4aoc&moCehhxXHoA$I#Vj%m zEo|Vrm@pk&_~hlKnK6%y;3#Y`7r*N0LL=KDI4#Vp7)i-O&mykcb@YdhmZrO6Hn74={$WZT{f8wEEp*7d~+u<`*e#oe!tF0g5 z+T&RaF%f@vPs8{WOx#4dIt`da-_5&X@mF9l#Y}S3&x%AmoOgN0=pT?6zC6GCZX9Kt zK)9tPPd<(s*r4gldEqVUAVLKaULE>TdNNz@VXTXY_UbB%MrR7aSVK7mZ{pb7$aIi0 z(C@x@Y{Gk?7AXfrlI=R(fx{$?QEq1AAwGu9DQ_7TagrvLGqL)Vvkg(r%SaqJL^WI( z>YDUM!KZkfL8;2^H27~k+3E_ChfWG*l*xue)Ds9B>8wu5)}#*~3)8Z1su^L00sVI5 zq|{&&udN(ch+Z-QJ%Ab*i~=92Bzq4!3`jqo-u$LV=agNf9%}{D`wl$CfF) zWLnXK(ehaJA1lsGbi7{+9m~{8z6;#Kx0waQ2|{ytqEqRggC8&tC58+}EODiT244$k zi5EjXADtW{8o)k%On{9rd&;~H=_Ionn|^Gmj&vn+gmiQvI`Q+jbe7GaMVE z>gnQ)cp^R_tOpbJ(p-&Yl{Ts8D#?E=M|rN>pG&~?qHWNgmLqBz#ShMg;4Ilu6)~RZ zq=`N8V!VYiRQ#AldZ@7_0q)qwY9-NVPmbQ2Il!UJU@{Xt`bw}V0nnZ$N~k5GXlK|e zmm+;}m>iBkMvvks(#azM@0Ux8bm!jhxcIP%A49pHc96G((~|-B9LugR4E+|*v@&=s zf{9MS&q95ujwEb|FDo43&v{BX!T#5_KWC{uFrHFi$90%Nt$~BEPo_C>WGU|?nTZ?2 zBTGW6FU#@Xd^NeWJx2YB$*10Aujq630ZE`R(T1mHLbSw2f^61LPTOf1bq#Op_j@Xg zd<7-nNu|xDrIX`5X`n!Lk~rtyRXtYNL)BVIhbu#OBS1u%;U5%ZYAF$(KxMOABrfTYwGo$hgY{~Vm%cBs+`iwoJs=l*{Lnc2 zCcjx>2M95^h6_g8)&{2#H?5AtNZp1|aIBB!Sh82Ar({T6?gsz-S!QU9&Y)q-)#t!c zwMB(*)eK<1wd5$;8rZt9JaCxv$;aujMy`hN>E&fZ1DlmEw;iFm3m5j23ksISx2EXo zN6x!rto&Ao&IxcivuNntga?teb5mC&lGD$ORrL1tFIV|HjsyK-kOIQ#%81$KmRO}~ z;H9;;DoO@VV{YlRGHh7UTpa9lRZyTg5%9%SnwQ&&S2u|zIa1D0HcJ%UHLrDhZXixf zYiE^II5zS^2M?T7{2u43o}?5K9TmvY)>;+0QplvNwpNu+{Kwnao?EhVbA0gLiOS{> zz%oL$?tMg>)wi0mZIVRAxk$c8BT2(-1ruw3>5!8p#cO(S z55IjG8doCJ&XscmvGo9lrNt{pciwIW22Ricm@@f;%zzT1lQg}jU|*n(d8t0k(Jj%E z$mkp>Nn?}Uh}N&bpGQa;R2r0>Al zk3?{3g4*eg$X!Ng$U3os8TPeD4&~;BTgcD&6i;DPqw&lsKwV3<;3LPvF$2MU6ifzk zp*z(1Tg*?CynRPEg}xi6PaL1z5aEEl00co{E=d)~^SR-$K2+N#Wg;+brm{ZNxjrzWel-1wr|?+oLf@3ghsJ8dW-oD8NzKd**o<;AoYB)J#O(7D!)F2M-xan8{p4=TbAsSv0z< zkNsgZR&zIBjQ!=Px=PBkn%7DV)Fr9ZEW#0cFkdfGa;uCkGTi;Ii8S=6&H)Nb9>OY~ zZ%hnk6f2_Ny4j0kvLpU%HtD?k<}o*V7`%y8y77-x)m(&}q!%>@6|2HJD~@0E^Y@sC zl1aK1p2y_T@!MS-36}bZ6RyG-X&#GzUzp^W*={E%$AoJtqIP~MZ$Vg0Z?+57DF@m; zstuvsH9XC8rYlhmWHy$!Ctl-El`a(wH`=*jYiEBt_-VoBXIn%)O$pMZE2*eh2@J)3`@+{AT%sz7e4Z z=>mE>nBjgQ3)(&#ec1>6{5W zwr4){FUlXtKG_if! z48C-9&kcM<%hJJC0f1^kn%YtglB1413~{*rkGMCMY(}TU-Z(Jx;~MjKfSqE5>p`28 zF>KlLxOPI2yS$K30gZ^Z-GH~tURa6}jciADTe;H1cIPK|moCCvZG`@UoekJ)8*JZ-ucl>d^OgJ#L1$3mNfg zM30y5GzeL-5_*p#+pjx zg7Nn|WYwD`1fQkxtfx76;U?5!A#rR?rC(x(Z!R4k-F;OP%~0ipcze0x>ATGN`?kFz`>}MEWm_3;rQczyUnB{hp#s30 zJmA|Hf><^BsE{OHPZLPIB?v>7?_v(f=na)0nF*c)wcqD9hFCJX800VYSin&b@IzfH zKch51Et8+ODnBz5yel9hI|w|VSibKmgisR@gj%5co7)EDST4p`O7Kx-a^FwTrJ>I~ z-u@ga-@`P&O)K!jndLIP9jHSbzqb$Ei=9z&_Rxay-?pZDISQul!fDU`jeLuGl zLZ_e(k$?K4)-h}ja?kRMJsEHm{4Cu^t$o%ao7xxRDfDt%$ zOT_msX8=mufH)}~%IAt7Z8LMH88^NLy9cG{D)2h6n>xZj=3c0B}PNC*`w4rLu2|Suc{Y)Ssr+*Z5L2H-_<@2WMu+U|%?AuKmvl zJelJ&rOmPp5j3r#KIG-ivMnnMuDp}Gx)J49 zj2(I?e_fTVZ9-*@5ZO6pEQF@(SVhExMvGsqP~sd8jPTjk7jat?C2>P&{L3=Q38 zn+4MfL4FdU^yUl+u#wZuc`56!a-^e?5gMJLQy_jvv$zX}2I4}_zs>kC+(ni+4vLo@ z;=KmB69MM||XNCCUbI;zuP7&a2UwFL=@L5Lsg}_QVzsJvqL1PCXN6IzIQ! z)7+w)mn`nO&^6(H4kz|O+CGPkC1d*$1mGG`4AaKk)#y>k_hHFMkQ7O0rb}_5;@*D2 zg`YVNI|iqP-&GiXf+>b^V6d^LKTaPbneU&4(cEdi(PvFb5sx?9Ml)9Fj-pQwb_70X z<;!?TofJt8y$;cTAN~9g)AKso$Fr2>jIeVIGcpt@IiM?s)mLS18pvhdJvy^yO5@ih zUen+vhQgdu1JWsJ{c<7@+Qacfse{ro01g~fu9eV&h7GsWYiUJ!4!_t7ZH12x%hhgNs1rMG zX}cfip|V*rmN__I{9ss1naHMDJ(4--U;Ln2Go8>$@X|r8w8d!2>826AcQDq)JGrv& zR(lSz?-qN88EX-DD=Dln)+Kmzq^t@hEftoN8Mw*~$Bw0S7D!tKMmAto3M<*gx?_q& zn(1}DqtYVF4gjeOL0Hyl&9r|vsDt%4;H`uM-F3g?+9ZMLx3~kWM5OI6*e714& zB9GH8=n3=^5woX%2X2Lu6aU6b_}~Lm6HdF^`ij7VqC29kDP`# zirhmG^4Px}%y_Dcara9EJJ7PUwcUA`zqL9|;oyleE1+W+rENZyI=D=VG=)YAK#rO8i}_k{EG+nKHEV6 zeP}@~Y*efY>`=EF|2jl2#D_dkQ6FFJfx0V;@Eo07Ew42(p*bZ5Oz0PS1#%>>A@aJ- z4y?=M4&eHu>7LAowzlmHb)Qx*ApSi^)MCc#xYGoH!1VKkn)37mY0rZ}o$vCmm5GpLo1GkLgKOPz2g z5}VUnk&L=X+OIyT@$v(PMvjt*X@>nZB{E2m`} z#1`&v_}(w7(pp0^|AM}#J#Q)twRv0oU|2o%f$-o6jO@fEMU3oaTk!$L`uD_O*@;gp zDD2nB@Dn4Q*gZFWAC&<}dQTWyh!bMy6k~7op%cSZa#e5qV9vVSy$JeFe_Hd``bpin zTjjK#;=P|o^EI9Y=?^N5Wvn3y4O)Y>^^0| zVYgIr!D7>E8TM;54$XAkJypXztI|)LUc-i7zutjd5y%!XU`$N90%Q9d5U}b_W?1qw zh0S~UNn8Y#HApAU&HxMKd)ZSf8-+tC_)%C0V=7~_WMVLx?q87FR9*J|J?hAYt}wnw zrp{1rXfn$X9$=B3xgV@dnxRcerTQ-0E;xG2O>6dIwul_U|&y3}%}aKJNmW7a=Zj8abpW3#1m5*Qw)#2G?I zk%h~Any-@Ygpv1>7+D!nq%1#3@Her6OZSbJ{cD5vi!}a%&^&h8PNUaqT7_-C!|{-= z z=r!)pJnx<~vdzUSmqS1uhBUO>%{!e%d1xTMCsMKY;_tT<2V-w?xcut@RLp#2$D9A@LWG(UPala9Z~ z-r5c5t*K%7-Y_5Gk(qX7KRBgUSH7Rpl~t;b+M(3Su`?>sCc@N7VrIcD{*Vf|i=qci z63$&p=vEK8&?&U_RG`{ku66pbUf-@&bjud#Osry~TlJfXh*|i!j6Yp0)@0AIMeV7@ z_4S9nXVf{GED1gc&?;i5%p?q}klV(a3xu_cbf3gVJ1qSGe5J$LuiVwgDn^2(Q9KMT zv++-VC3wA7>0d-Snr;)SuWAZxp4+xG!@cMT6Wcj=a?I=rpRViPMrcRy8bfFfTXhb9 z3h5YN&3kbQsmbdI#5UT&w`$)s6y$qmD|qKD^M2tt$33_k*-`v5Of=6=^Guw$>l{rIDWe<{vf0pv z5(jsIbc+$a#&1eV1ZrhpI{`M&vATI_J`i|zHS$-g$2c`&pY1YwQU0Bk$X6mEmf%%W zt8U3!N4_>i(Gk=6yI-+GIcCJ2GqsXrko-FbM2g7}Lp!yPW^(_}B)%Wl55C~ChExPW zKud2fN8@7ABLPHf?+(L-3GmFmxE9G1MD}on>+r)0`ObHEPcfY{>-_G8XrE(stTpgLMnx&3uvy^CZrS z@#%v@#IcDfRyL6g&C92A&acv*zUa0bj={LSF$S%aW6=kqkOQFRH{0AVn;kFsA2mIH zUlDtyJu3*pG!fZiHXwLZ=z}%wD#x9qhp;^fikyI5lm#{w>HVO|t;bb$gnzvhH5Tpv z;!&=x(i80y41QqtHgbh_8E_ERVah0;=!HQyaFLpDTtOdZnD~I2>nybkF3UH+)2>n9 zdp0bX$CIunD;F``sg-VnO_F~BUC>`8gXpMk2|QS~zW!XDwT$-Gs!+1oTx6w)w!~C+ z8QD1wGQKOfgs31AD$r{cQFnDts-Y)3-=wxJvB;oyo2E-pr@_ILh3?Wo4oF;lT=>WqYh&cYaQ7?8daE5aSJ!N4rIAK3ym;zn|b z5oE;?)OV=ZP5#9g-TBVRxNo-R@aqFGYh+6GWdO0ITGYy>YK)KNfYIJ{SWY zV~eT_tayuV95AR6!m=dWVVz|hm72IWr0R=wiC`)>POZoya=o+km43KL7vcuZm};DQ zGjmvM%3{GVRwj>iMyScOfblG+a4R-&B4$oTIAm*FODPHaK2f?y-yMs8DS0Ldt*bBG z=NBw!#LU&_1gvZM3W6To@wZ_DJsAYOT**%VEF*ZpBaSi4DurEIYv7X{tyNu@T6!WT zd@H#a<)XLc#l7)t!Ri=uF}kCF3n5$i!f!BAB|>wtP&EWDEB-2szaiWC1;$Y zj49`1)7kU6l@gFMSbY9P=F-!&v*<3ZOk)&^`xeyTiZ}8K?;(*_hG8jdyNAwQ0j&{$ z26H$!6w%(yJqlGs21vRZ7Dmc0jb~I`F6lIERHWp_Gt=nY!@WnmW24Ztv3w1&*6Ptk z$h$}z2vR|m@|GrFtsgkP5g<%ht1xMgx=uzFCEK<@EH)IYa{gUym91P zsU^3SgLbo|7@|adRlKMh%NGJ7=o-t=GbRBk+saJC`T!&Ly;iZPM$Z*vHzGqaolK85 z-@NH$RbyV%?&dxF!Y_`)#ChcL-w#DEV&R#04S`arpjj$m7%7*$FY+nw{n$4;9_VYc zu357Tdv%xlu?$%8Q;0eGG<;405pO|Bz|;D~owqWhNu$T>sgq;2>tdPqB%hGpqM18} z2qLgH`4btv$`r^KI?5#vFLqw3A>?oAJcv%aehDFj_j0&T4B5B);+-=Q5S_YM-@cKs?t23vT(gj=X9EVWp`gDRc+UGqI$znc?{^V_ z*`j6L>%emE_suiO2F1AufBcr$$W&g+%a6>}k507i-9A)fPw~{h#`-s^MqHE!iIFw# zYb`Y%chH&7yBQ4G54)NSB7!C_8hF#S+QVy`m08~fz`4zz(bL&*#Digk+y|O01u#7l zit~b}J}PHmv}4TU$osc0^6yI5_*QXR&B@)as@KJBSV(PJ^wL4-?W);gL~GF{B$FE}P0jS^Gqa=UJz()rg+|U^}QD#lM!T-H&q_XsB7LAs0JVh~${C z;DTF*EmkR+2&^}CF?)#4N8iRWfgh=J6OS=M6?lqK`Ie7 zo0kiofy6{utw)G~%%sQdQKW}OOTiWbE)cd`0pC|z7tohY;fl4R|5dzgj4|hm%b5(G zCT)QgIZQxMC)jM@!&bHCvnq!Oetbvz9+DtWlW-{wd}7BBg^J8Y0cC3$08{bfxX?~a~3 zZ|H5%d+RpiE1kCt#_ap-$~_l@uP z4;9m4eiq7YG`0GC^EQ=Cv2h`Os}YCz;I1sgw%o1hXOLVfU1OkynY5>!m2$Djo2IWo zvNAFGGL=Gb&%kzsQQKdVZwa$Dc1aJ-VyOsbE1F1$(M(WeG+ z$PuN!#P-2@zUKvfc=RWuW2=KolggZWn+en4a4y(nJ`PsGP!!Vw6%hNFBMFH-`7fq# zu9$U4Z&SS%-*u~-^)}Wv2JTrekpPDR+lSF%bV?$Pd-UhOAV&3nKbv*qMfvn$iKE?gYVZFR3zR)OSWo~_8V>Cm@`hS zJB;B>)DsV}4zztOt#P`3Bwl)W<4I@qk7|`E8<5)&57_7(N`%wiB#gtAI?9r+S3YKX zHrkx(PLi4n_h0fNi;u%byoBz>NcNNITFvL>OY*Pwd4t;qb~B&4fn>Tn6!G;8s9K8L zy5K$E%k{+BOiQk*6UD4_0Vy8#zK`u)F2~#Vz2ipSOW{U0?Z`f{#f}fkoO>sK<1YAG zQDwyPdk%dD;!hDO(=udo3xyiZx7`J*&M;Lju%`2#+ zJYOPMs7;ay6sR3>#4K?~Gb}nju}#QrF#9q0yF$EY8n!xM*)#}mI{hZN?(Pot_`^52 zo+d2Sg90C!0=K(?7|F9j3^Xi%;-GyP$nHxd^?K_PKNbkor6dD=Sn%YCX`Or27-vx$w>(R7yg8}0 z;kqP~wb+;JJde02Jz@^3ovZB_(=`tWA^9s@4cG|@B6#%! z#wsMih^7O^v45!R0><%fTs*6EKYy#Q;^1s)X)H-8TH_1+YdP`uwO9T;1Xx$T3RkF-j=fq+YJ7oVhP0 zcXp81bt6zqP>aAFz&^Qp2Q?KCh48U%FzG4MYI?OB{^s-syA{N!uM`OqM!ywDBs){4 zv4ye3oZvD#f)I9CV)k(2fG`W%8kidg^_KIeT5@APl{pPfA@pXrW;^CYHhfr9#PHpiC z@Xv>l9K#1RwL{zF!>fM~tHn>9^)oOzBBfGK?Fzs)v{&)rIEf$I=@DtgUDu+tU4{EA z5Ofl5Ir?zs_Yt=7q{`>^?U;>3nqDo4aiYsO_+jY8Yr@Eb^DqLLpVGJYZkC}M1XZJ~ z>3vpjU4l0Rks&`PHlP(%1x&Jp-OxPo1f`%F>;JKtrDJN8j0)1`-$Iu={U zJkU*uERbeMsc>q<`i#VxaF|ozqu+<8j_|kHwxmy*;joxB)QF8%L=P+kWmP-ML6e@* z6uF)>#KM}$+?6VC5U~3h0yFV(1gFa}TdE7(z&C^sHkzuaYSvN~Ig1B5KclX)JPRp; z@+&kAr0#2!r$SMx*V$0GT&TjlY#1)a$T|B$tFPc#52g3J>X{e-D;31xF+h>K1eq;e zf)}qlx}BXb)~9v!8<^%9+NrLf6k(`BHmXAgr}395w%-P3Eu?S0>(~ zl%V!;7e@CH>9AUIyNhX~BkN?i`M@SZhB4rX22BDRwL~H$PTU&uM8w{)Y{%VJN50(h zaO&_)1lb>n9}#)t5&FY|(O zAnX!JB&0Ex9Tt66gYq!4LfF@a9||So@ozkYG ze7Fmx#M0{?ykv;^wIIHnx|`m{136eHSG!op&C8zvhZd+!n(rRFi_ggMp24?-O? zL{4#b)Nsl9qGc^<8WMB^XMxGhdETISg^4d@EUn(t?;Vgk^-Peb+@mFAW{XOpTCP5n z+sG^KK=LztD`hz))91HK(0XLZ4Cfl9CZW0!%!&&OOMh$VsJ>=CK}`o+x7uVnFUJ-P zx5zgdse)b~ECgo~V*-~uQ1CNe!m|Ovl_1U42tl!jI!w-xVkuB%TC914i9mT)k&-^R zqFQnlxQr29j=vi?8{+7#7duP7(3+anLZ zBz6&?cU{^8c~2p}3oTp4c@I#uN37q2tR5-b&REk0SgAy51wqzgV~V&O_E~U-7F>rR z!u|PA9<12Q*Y*rl0+0!yTvZ~HDnBSdDg|YPzp;_}@%5VmeFHhbE%hAof_#49itGon zH}O17;Hy&Pc;oEr9o!tQcF6u0Y3~#zTC`+|p0sVBv~AnAZQD9&+qRu2ZQHhO8=d#v zs;;_S)o*ma_q9LvSbu9q#EOVH=UyDS8GMME5h0XieZDi!SfyLzt!|cf>hL!Ehc@(j z_rGSM_0?hO=bvT)GU~5i-2dM*(LY-QRjTevO3OH3TT~tTZe-8|{{C{%eSe_$XhbC8 zy9e(8KaA>l{dG}YcE1ZP5EF;&)E3VKy3CZKBt|MDZr1UjMEb(0%kuP?iXG6F z88_CwfOwXp)#wf!9NR?vSMeYuN1|zkuAy7w;k6p!*-3U;T!qf`lX_Q9LuI$|nH0U<^`^hc+clE5Q0z2l&jjv9~)};p8#Q2iv=5e4aCOO~Ql&U6| zQT8JHac7`<`3PHKIwi@%A~@Lim+adu0$13- zPJf5j0PqWR6+a1sE|`PVy$QyVL1ah{S|f_GixYdWw4Q@~T6Fi4Wo;d8ZylU3Ck>Rw z*+(}?TIKc4c`m5k(fB7NOYe(9nj(^dWI&`Zao0Qh13O$B<25~6#`S7D@10a$<+23p zW&K9piI(#(L_Y8(6fXyQsA-+2j8;_>?870VI_UuY9CJ%UpwXXlLtp{_aT06@W!WMh zu0wd6da|Sdas%uLESkq{%fFDIE7z?u1<6m5flXlmO<~5=b(KPqR^Kl}r@G+j){PQD zQ&LtIS5x%Z)W@%8g;5~}KvPwgY_a?N!%7E}v^kS#f~l2hq)xqX^vbIyb1l%s{1qGb zeUUu^J6U4`9uBSIWjrF`SE@()hEgfo=^te#XNR?hA!|q};MR@_e^tE`P^xSPb%t!k z7Z7<(<_5B@e8W9!#oz9)YOm9435f40VNZ;#%{)Y`)I@)eDudiyyNpKt5QI+cryZnS zj!Cm{uac`U^o-IGjW_a=_m2jFf4?lU5O7TnWEstlDWp%du9#Ve{t-&bheB`7jU`BT zFIFYRDBoNJO21inCREZ;zndb|KaAMWU|?RpLZx24DbQViHGHXjP(;`IL2@8}r7n}k zN~1A+5|rMeBuiDRL}Yk$cCIn%FCvRhjXO!VUw!vvNfOcgPqKWL`9gMY-9@Q%}dQM)+*x2j5aCF?6 zrey2kd_$*%N$33b)mZn{w`hUc*|Y}i7=6oIUPpm0MK&+1fTmJeFW}{eFKl)l(+6tb_qO*&%Ca zxEp$gE)nTF(Yt~z7=$CKPv9lIp4lDk+Ynq`0S79D3Ui)pGV06BzTuKoLf-E}QI%el zt-6G*nmzK_z31y0CVM90!eCE>PAW~MWYh>7i0~Mubb`~RzY-;(pppo_B#Sr4x{y-& z6!u1lLE_iy<13s(QFHH69=2$sv7gX4DNq|$886PP6ScKD*Vul8?vN_i;0n=#F3ETy zlkC@Q3R$ni`nYp`8LLOP61kBfkS~stVd`X}G!!q5;M7|7L%TEK(tmgm4aDEXz>Vfa z1&A0;d4Xf_M?9)SnFrmW9bU;UNUX%SES8s(@nOavHBE+}No?e2g5i+F`;N>J=8O5X zBnO;T`Hl3C)A_ijwJb> zGI0o`aKq&VP-uiuR1lqrRZctA(Q4xT{Vd|m|6(+#;s#NXG$MvK#{w$vx|Hw3X18QL zeT(_`2|VdIoj}$wk2swAK4FWvtO~skgd$4zDdC_k%K~!ZKgLtt z4{HH@QULoN2LyAk_6>D%%esrpanZ@;%sYL#JGvQ}8sc_@kpA%_^Zp}8c`~%W5>4uM zCcY6;@*_Hk+r!8fXzJ`;V@!4czd4K)kLzeZ=}MU8Xpe=>Vr7R%eRhl+2JQlkj!3de z!-$Vo+DF$^sku@VLk~kH)V@28*0M?ArGe;?H26&xPMkU9FTY{b$DVjoGupw@y*J^5 zta6}Q)0CKFdLz-Vb~4pC^C>C4Vx0{8^*krnH!2Z3_VlYRr@#RA?%iGF9?C9mk0IQL z@%YS6h_pTNIfXIJNl_RTc@D#KrlNh^BOqUlkKd|b07PglI+mXv>*!gYtUy*I>;czg z6#P2_)88!@^MS^pLW~kdVIJj#IU_~0o;pIT)=a*s$fL1QfUXdX+G?y(B{Dw}n%cW8EZw8|aIt4S5q>d9{isxR2!VqhPepu}vH=sseI^)j-zz<6) zo=GV)n)w;65+4PL@mhWO_DD}Hk9?3y0#$5@gA-(LhwSK*0oENFzu|t@eZ!$$Ou@KH zb({$-(PA!KG|_0hWzpwQGoqQ!mllAAHNA{IDm*_XCy>lUU>QhzU}`MF4~JTtS!KY= z@!Fi=aZ48^dRKN-&khyQ#^H=TwY}T1=px*j$-0UCNilmWQ%X*i+D3MjdTHm%yN*x? z{69=0f0o@INuBbpN@^e{GirkcwkLREJ~@7N`v0|}WT)p@HvgGb8~v=X@%`Ubl>fqT zC!+snQCXy{Z3``r?jz&cHXmJ9Jxw7oZqTk>eEC*saq3dBlKcWa8?m}tm!-kT%&7T+ z+}-1hbhZyT`&%e5l#(VabVo<1<9NbFl3afE!hQPKG5gqi`+jQQw%G$swX#ja4 zSDhc5ngQ|tw|;>?%*p^(6l)da+RRi2(RQ2q5GsbIv6UhCdw(*TweiUan~e^ZGZ*i5 z`qry|@_j>`){>d5g=c;C^;vMYE;JmwOmF>tXIl-PeR#G06;Yzhc+&?>uy$Q*KNFs5 ztb)vxQR$>w6T2E$3iD=xM-v|-6k~KATJ(AK;Bb+6Sc2)VfVSx-X;$SK?&-p`DfYji zO>vo_yYQL2n$cMlY}sjsYAEB8Cx&mrQ3XX~FRruFhNECmuhYgT({NskI((8(1`Fj0O&SCPQEyKG_5{v+L4US_#8g)j zT5l>=f2_2on;X+Pfd2$pvTBK68aG8e`zPt)m?WbCwGw(a6uHUn+$7;H7TT=iwerHJ9!|{|%Hn8M88^Rwu zKh(3JHMkG`WvkH3U3=L z2|?c`>W3iL$)^SEF&D0caQi$+gyqch;61$-DShxjV<;RA{}LoG#yn{`I649R&&26O2MmNWbAXOxUpmg_bux49bY9_Sg)8)e5 z%(f5ZJPu)W#0jZXE2oT?Qjd($E2=Wfmo92R(^H8b+`TA8C0F;JO) zIf+eL$#SV|qr`<31``Mi<>935ECWIaHgW_gfP;k#THc;%vL;KD2<$84ycBKBzMZnq z^%{^c)&;jQ?|AY`hZHG_WwM>%*@r~2Anp$vN#&p}wYH*gx;PZ4T(l*IRS#ogIfEoO zRr?TM&Ubj%3!@>0Od4$f6U-|FqIYCFp55_pkM|&f1aUF;nic)PjV1+$-c~ayeR>!~ zDswt%?W&ts;XU$D72W25%1r_j>sTU&npUw_b;V7rhzHp^#1>uqDmVJ#WXQxvVWP@_ zo&bT#rS!o;(jSNYrcUpCflV>hkymslT0NB^UYj;5has($8ygeu(6ctwhwczJA*-#Q z5Ast6w|J`9D4gZ8%(O0M!;T_7efzlZ`ktz;ynnEw!bZ^Ir3|goPvK*r7*&$XsTJ7| zsr*vn(uZkBD&%6yyw_sPPaRDn0B_Mck1VPbGVr1@hH0O?iwpvZ(5AAlq8_Mr3pFiY zF}`d@RFPt4VXI3uGi;(avrc1oX3@Vyqe`{*!%qsHAVe0>M|5#mTx+xh;f}J+;!lUX zEi*N+RvF|_p8fn=F@pbyv3suEa=m1?kSFi!F^z*@9IVXC?@%$uOz;0mLS+s6+khar zCCqzgAeKd+j-BG33VveTHG}Izgp8_wkEgdOUR2!Z^TOxbq7EZbq}DI0nMjC-jWEpXrG)C zNUwM4NsbCt7Gy-G>EaKe7Zn2DU&OM|B#VICiNp$)d#uXq32Y{NzpogL%cu-R(01f{?>Z7{duNV|F?;hl)xy;J{gku{ z7DrE2bSw`z&Y4LhWV?>b_SY9Pox6jq?yzMu-0BBi z*?(XX-^ptj!6fL>G??z054d|H7s@GW6ip70IuGUxgqSnl*j12Q&f8QGicZQ{7FVWV z0ZVRY{+3?NmC)@Ojid{in0p~9vc|%dDQ&|Nwpdb_P_caM;`(yT(#rA%3n^KxWegjk19!g=g(Ym z{@^}p^`Uo9;@weEvY*`*{j`a*{_JwGw%8tlondQwg$sE}rNq?vT3ihX-thTAa>-zC zUhF}p=4iLM;&%6oGA1sqywz$zn+7dvaQF`D4cZ{N5Y9OHI!lUa`=dfEN_%B%eZF7M z`RVCmb8CIJySc>mc`MqJp7n=Z>k1Y+{i2!4ErA?S7X?*%*16?!&q&cgU@yd`7aRVj-*ocg(I{^2BUEQch&p zPweC@euR*t->k_w{DbD2gP&HaJ;N^CAltzTR{S7M`Jn5y$jt>1mn*+@`TQv-8Vrcy z40Ov~+YJ|_6AK*=Y4ht}v5(wuAj@TpkrP)EGPDH7>{p_r^Z?=51lq9iDU0Q$JuQEn z>*SX|5YJYXr%fGEp;lxJ^t%pdQVvj}-SZp62;K3*TX0il&4=g{WefCcJ!X+nb7% z?EN+KB+^}=RJzlR)BQiK-a# z^NTBC(MIw79_iT=MEbJ_dSgHqY9W|#IbFg$MGmPWa7-_qPz5{Snd#NE_I+_jy|N=P zX0o` z{U$JVTCO!x8n`u496$<29%bYV*3L2{W>Cdo1XdBSYZ%<~Ttui@m1cCI(vE(alklw= zNx106IRVa~MWWK8E5SsPEXiuEaj%Luh)hM>o@YEwj3vbLPYu*HIL(mH)a)-CV7v*sV$6#@UIW&ZVZ z0;M}EtlHqON5emFpd(R07}uKeLyQ`Lg2{Ob$%b88A)xAh!u5#MA8cz>(kJn#7m3Vn zAq^%SIs! zgHmo^Z_=)rX&tib_hN7Ozp|)5pjoKKfreyLvR`|I7uh~zU8db+zR4%XQgt7 zQ+%W6WWzeSq6%u7;{i?IF!F5vmNny5XI;eX^tyI@xS| zJ)STV_vqGFa;rEb;IVu3ShQME83Q4nfPgzh1qaj+^E2T05F^Z((c{~|%;|&MK$vLR zRnezHBrQ1eOJJVMjbAV~pWpyM(~Kj2Yw0vV-O3G{>~5}moqrN!YDC<5-LidrJy9rCe;uC7J*mf=J&z} zN%))h6b26rUtXz&Sh=2EQDOQfb^Vzgz}tyo*jnAxAR7yyeV)o>f1c=cz54igyafB> z%*8Sr!w%#sbwIZq;(m!HMU`KuDoG-h*r?88x7-u%rySg;hydO=IHRb+VKj0r7Q+aw zBHZ)5Z;};Klhr0WBB$II?Ryd^aLq_pvlSM)E3O<2(@spd2=4x{)!aG4b9Z*N*7n(f zTQ+0AIBukgG?_e28SP-f0IS_KN;k7p-bcuaOigUmL#Looj>|qAeaXq+UtJ~#472y> z3m&uw_DFa|5uElT;4&wZ7ogT?AZ&HT#OjRC%|NnsV9W%1KPZ|)`YZx!wT5)nc%6FH zWk}2BD=Z_|hLjQuy+JtHu%MlX#p3GDtJ0VpRDrICer?m|Lgf_`qO{Njt@1O0M^d{0 zM%xaqS8uSxvjknD=ISX83R&aoYYBppqPO}u7Nn=riF7jlOAh3@9yUcUx&~8bkBO@5 zC1GmZ0&|V?ampcBr+65BEi~Ju)Xo6g!IOUHRXhfcuUq8n=;aYQ@O~ zi)`vuO~O1StA~e356%wsNKV-dYGTMk3M$39s;p#+!J6v!NKQOqW!+^urz+G5XLr0x zCG-hps3%tbcc!V*d$!-8|9*l0E2jqif7_{G`d=tDNAzf%?LT^rqCc%l!T*<2|Cv$4 z^dBqn|1F_LLE3hn58ivd*q)BudOmsj&fDIhM`2zQ61+$WP~BQy?%LARm}Sjv(nI^U zxh1h2tmRo0-z4jg#IG{MWEYWpm!ruGEL|_&Z^+!35}x#xo4T+J>Ww>lELX0LN4uE3 zR!T>6T{ zrviH3U47#sNR&K=>Aq8Hl$RP_;(R-;q7drv5~cUKsKs`Lb<^lB7&vOU=XJL~A<&kN zj=7v-q|npf=W&H|+vm;i-3V6C-;?kQ{w-^>?Pj`mni%%Em!%Yt)|Fzu=6$sq zB@{C0I75c{hGw(t!Qm+lwU0S_OAyRr={8d^Ev5%ynuAeV>#PX^VGyST3c>w5F=vuJ zBbXYCdP}>I^RQyu#BcnY&A*OV1fDR3@!dsy%AP?k9KA0Ste0{_&W+aRf$zo-%+)I8 zk}0>!Mt^m?h6hdUVPI|_p(oSQzc2oHw-@T6b7T7Ex z;E;Xi?l#ug@C7cF=E`8=c0|7E;z_|`O-*GD-=39wc-`VzwPJRavAo2oLV?`d8V^0+ z6^?$Fq7&M?>s@eGzMd59$6S^jxqU^C+;CFvXNGPgq$*_M%NIdvNJx-}!4d+KO&pj4 zwrEw8W|yhZ!4aUJ2G*NnG1VBvezay#zS$&}r-a+I$jaa(C}6zc5>nFC{K=^MU{zp` z2{&q6+VwQ(*U*OgUB0d;neih##e{1tFOa6MpYKzaDMB1U&1JIkS#vt0MmxP;{gvFJ z-I=P6IsNx`h!cL}p^;6gc=q}+k%a*Ld5SJ4FgUY;-NHHa&yhgqf*|gEO5=;<0MTy% z@%E2_K^+VB+W2Xav5vE+J|jK?JvIvM5gst6$l|z#v90c{rsTCA=C|I91i-&YxsM#~ zqz5Ht(@IT{6*)aTvD_dbDj_bvW$Pqc_*IP2L#S*>xG*LRqSY#yV}gh{0`R&2RolMAG%$hM|4hf4L=5ylSSbCME zTI%~t5thfqYT6%A<6jnY{yo_J^J;QkAO@2CgsiBa?NP4(o2&URvz33ln@Z~nKX;QG z2m&h^CIvk7`L~XPyeha(02y$B8bX7B`RO{5`u?7Y>tKdMV{%Pmea)oYSk-obImgU$MP}D1>5VV*Byo<1P7os&>l4=w;w0MVSdtkqbx4 zfp*mX=M*+O#r~R*HjL0zsZHdl7;i|UrqFqriuC9rkj2)OipR2|RCWG}M@x)X zX%5>A!2_1_rY-7r9pzUXU8Nqu-%E3pU0v$rNym>x@w8kzs4)juVf$*u+S^E!oB0RxQ@+(_AdJSF04HUtO>t)#3>((Eka2*7_EM^T9pIJT^ME!wWF z&L`(90o_kcdhd&+IPRaTwc_M3Md*w5`1^6FC|W9Zaf{JO{F&+p2TOuJ1r#n}Ur>WY z?Z%zw%f)OA*=^RNLs=!!(PXsx5tEq@YV&uyv_#@ayQ4LU;~{a)+(MOu&%ar9m{L1| zju}D-jv2TGkSJiZ1U8vS5rtXRQ5)=&{9#Jf$whLc-*vd`F)T z+2)K6xJyJFN%4ZU^;W)4`_i&j$@b5FP-8ejo2Dto{|!I zu=AXM(?#oLs#Kl+fsl$XY#l&;3)peKyCP&ym0_M)=KD5XduRrT1pAdBU4r^&A$pfB zD`y2PB{`um%i_TWo;@;FJ znAy$f_-t#+vNeg05cjyRupZu5tbaw|jT5#E(GLQ{eh~P7oE-i))$+ds&<|$Zp*z%- zZ&oWXDWjA>Q4^WMUxkdyD}%^VYvZE29ce-JyU+KAU)P^l`R+W#%C34^KqWwSUTdMyD`XaOVYo_Yc)|u~q&==a!m=r(CS?_TsPM+P-NM_r$eti~-(9-C5)%4I!PSm0|t z7AQ0~6NL+MkBO_t-zx|cLpMMNZxjbJ#WRh)94Fx_z)Hy_(WS&vUayq2c4R6jtva zD>ed6mw%uy@9JzbYSS=uPTRkl{$X&>G}1~n;2-FleLkd`Q!C^y5fUWT4bs*_ugM9v zaF>sc_>R$HdW#Mb%~LEt2wD*3S|#4- zL@Z8u;3${tEUN+!bYv;G%GDzo zj2aq@!qb~$5MOH8(JvtwxMe-iZ~T`2nR$@+D~Z>tz6VG52ggS*Bq>!9^YnFyf2-}_ zeg9A5#IIjU|BFw>e^cw5=sP;u={uSIr&|9XrwS{RehL3j=f{5(bx8he()^#NME>pg zzs)RF&7FQM#ySZlaW!!{qX{|f<2m+;WPVIX%*m^8G&-7Kbr9F>&w<5A?}StcVvx-f z*&3v!&CT;DnW+3`((40>0ZN!$v;#Dk_`dDgGW&gf>|wFLQvS5snlL3B7v1KG&SkLL zzIMHD+PceLe?DIl|8m{q=GCAh@4x8}7&Txbq)8WokijSSC__vYd!G%RH@Jv&%Zj&e z0?$dhEyXi-n}`{ETZ041K^o6~*uQs^7@GG{GN=dFg`YMRy01)q&CiMNCQ3gR zy6=F$_dn@8A*2Z79XX-xm2_(b)*Vt6x(_#-im0nW-L(|hTpl#ws_W>W+Q$OiHDsU} zc_|Le_Y?dS1@mkVCKh`qPIMWHN-V=TDn*q%N9-7$7g6gA?m}8KuOhY{+s8M_=j_UzwH+`^Ml{R0X;W+K2C&vVLmPHl0kt61I5-) zEMP~F7GFuD{A@{PKuTwyo!fT;AEJcL-A!YMc=zuNiP>pQj=O@Rrids51rH@s`r7Gb zVQjD6MG!TKX8ZfxQi7b$<#*ucjRfB<_zM*36&O$%S%(6HvBJl-HX3Pr;tm|KwkrOz zvC_B{_hd-W9#qo1h1F>s5QIt)y*poT&LZW$Y}qowkJ+Uoy>k;%RD=AXVRwi1q0)PO;|a2S3kKm# zh}4#T8||?Xh8E#xCLxVQ8ufxvpx%o|KkiWvTO%Q7+bAL6ZUdlpUffs|E`Ks~V)2Xu zER22K@i@vi34NkWibxJ#4YAw-rm7RjUf;A*7F)M4NIT|Q%i5j2;n6{lAX{jdxF@sm zu%X$xIQFH0xgtZCbvrs*YHr_8C^X8JmjFPN$FtH7>mE{7z7M0}P;pl@3q(i-Kytg8 zP{LDLb@%uh{%*}WE}P9yGVaes=hjf+U8vm`tu;}RqOhd>s^@h>qOVEMejXuOiBxn% zGOIVOIJ}fGeWw5)A=>s}XkN^pmn?PyI&P@gwbp7fGU{Sqz_9-WU*SMUYush8DZEuK zz>pO+Fv}8>|dD&cZ^P1-AJr6_3UWwOS(P4K)(t3HP*9+=SO6?y+S`F`Y+T7AL zSDc{5u2qZe_z%n`Y5|N2GHs#Nl_qy9H>g8fy?ri?G=)xLkU5%>9p@3rgXtWS0pCjX0vSqGdc|ps$agV22E#MbGly zK%7Pw4-0YycCA8H{_FS|ni4m6Kn-h3*70r{pfq|V?`@$HZ_VWf_t;HLH>@FN>{c*A zE89(-=CJFkl{EWEVl%@f=mz5B^|92OjU_1k4eIqCA=sW8IG&(X;tKZ^rCez^rPFM3 z=K?TWL+l$*G-IIY)r5MUwfck3LduS-!pi#A93hBbCF_68gI^QWN6xg2oN4MgpkhKe z14VINVo~_p0F;MTDBMEq2mD;q4f|Y`^FZ_0Z=FP~Z(k$Gs$uvRIV@@pcHI5$bchUT zXEkX}cgq}Zm0I1(vAKk`zR5`{qe|p=_NjeX90jlH1iWpxR~?;x}fajC0#sg@^nQ?x5O7w z?^r;!tO3rTpW{Bo)QzmT5dAPVY>l*6sdoW8X%pSilgX|K_SBLVEWHm?gy9~sA##r|w~oXPI!`|;5RwF61P?o^N{ z413J3wL_OwAUCy3KttcQA^lv;K7rn1v6If%_C%8$$9HBd{JR8oybfsy&_F&{(^{!$ zJ5&{<&8DpjYa4YYA|ip7Y!gOD+;6M=e7tB$LppdmD_xZH)k4m-15M`SuC23dxPk^D zN;RNX-Ud{D1KjvwiL!=Ge#2>R@$QpF4IImn$ZGRe<3YXcrM}My^iWv1Vo`$1wSdlp`-)y(?M|`DZ}r_;9$&Ax3WWbt|OzCG_taN zcq$qa!eR6mYaq-!t6zCsp1Ji!4wy_z8W7k;i(n^W^4ZO*W@VGhA}MGXRHjd-cXao@^bco>yf7wR_zfP_=%3~5QU}YY%y6(Np1$U_iFH{e+{ zCwgp;n?70dv#*TkzyH7S3^FygwKjHgFgN^9kAQzz*0FM_>TdnK*`;CsTNA(kbWGI1*6rV5 zr}D0 z$Xu`_>P@>`$;?>&C8sTuN-SCOwFmbF_C-1M@-o%RiiTND5Rv(JdWy%>_juhiC*j)X z?auPo^WHu<;Kh;f-Naxm^yJ`<6(=375w?^=5Uu{J!Dzab;e-lv0A7jrT1MQ z^M#^Zi{>=OOB)c4${1fx5oBP`Ds#c!HhxA^>`ZQEbL8Op1a%7wu&OdA7b0!C!8K*j zON_szzuz=_Nvha`At#*4G|VfKhRnH(lSoSV$=Gt=H|=^2Abv@;vF#UT9_LNZC@qcIE90%# zIY4ozZzM2IjWt-frBy_V_EdRt?OD`|&=^ib9}J9!s{Ex^g_P!SBr=~wEsg{#E-edv z*d)O|H506f26m|*Qjx5r^AQ%sQ=6vXK5;=B!vA z%c6%Arpa$YX*|9cdHCQ)%O9Q>;{CLH@EQ(c0Xe5^oxjC=vT)NL#%d|wmBz8%wMKZy z!CAhkj%{=13LbWjgd%hOauGdcizMXO>i^`}LhAQ~uSYtc25WabU@5hHRqmoS;H>w4sRdrjvR?v3f8+)G_Z{lVTX%%Xgsqgq`P| zII4$&#J#&^JepVc5%w9bNrKJTKwUQ7?%MUi-1IP?f*loXB?g5p1zh`ut2*p0kt1zH!Z_6l|XvOZkVALzwN^+1ju_8xWu!9huIYGE}> z?n{$E?t>CdkL?pR&n-eXV9!%~yu;texTl@V+#`P?kFX2NnIBLVd zNk~k1m%)t4HbE`}6$U;}{dIop0qmxiT4O91 z;9?a7(ypil@Z;v^*x?niKp%deEQ|~}B)b)~QEBVrgY#BEXAx7)#o7}dLZa@HnN21%avQ`L_7b(dMlA01L8tqYnY1DaSyH{8!iQXNN^{Jw(FE#VqaxN=$^5Wmy-lsV? zn7sQeKKBYWw$GN=mr1U7yy_m`1eQ58mggolRT-;SGMcQO*4*UWQlEhTo>u=kSps77 zt>*d3kE77Pev$sy+Vnr?M?-T5L#u!HaaB2WMfwpN=_I)fq?=Iy7K(t0V3wAE0)#}i zupC#g8jn{C4P}!Kags=f7%h~8=eOT>9rPCE_JW5i#AdhA{n*Jl*me8Z6c>{OSCXCj zQJVIA{<`|o`FcA()&;2Sg~PT(jf9&X`KW}O9{uPDMq}zI-6al6Z%K2Qi0rH9;Y=`-TvsQJqyH-! zZw)bz%a|33V!Pf*ZLLXOlC^D){>BU)Ll zssKzu4}=Y;X0+TsIQGm9#}<4hgJVk|P`s23esxoI47H+mT_!3cjS3B57?usmoYBr; zakK|NfCk1EI#bQNUOBItOM_!eq$JqYsUzZ-i1q?`W%8vgqC2ne^64# zHmY)|1A03Qirtgy$+!dyRjc}I-8D`twr5+uHdsNOwkGV;v&dU}{^q(maT0B`r9z;# zW^W-z;6_Abv}lp?fyrr=*-Zn*b)BOPPous0cUFiAtT(@aO`LuT#THh_pBJNtFW-z3 z2q961C;2kk<+wILpM|Tx>IcdF6?0e@=0}ezhK2Jc7Hay3z7z=t0Szg)+e}4@A2189 z5r#R2Xic?=v|i}SX1x;85?8EWA#x6b_SwQ`I$s5PGOZrSn7(}4Cy+`P*+=3^n>ySO z(;!#M`Z%JzroRWe0rfYI6?AroKh@w`7C`qXQr5)A_7yG*%eAF5!qW}75JuN#h&u9a zh?PS8Q{)(nO1HRm`t7Nsv_e{yNFjk}jI71=safXn4;Au@$CT%L)fcP|sX*VMEbeBC znI@d$I7)W`EKZze(NJ3?PkgeS5$hrvQtkt2JX~kPCaYQWSZ2NR-qhV+#&??)tg!T( z+HXAkI>BoWg2*vFlI+n!NUQaJwyH2Zw8x2#9-0s6o8K6z+WptmytN-`Q_=1NY4Ujx z?}G_b=)XxfSi(TMTTd-+59;g?BZ!izb>>p+J#iy279G{-?Vtja5?bz?p_oi@@>e1_ z&05%gEK`29pN!ZH8N)q;)&(8QCy(lo*x^0xqr)bS>ESv44T6nWM=AoBK_+BF3&9Az zbZSm%cid?WcgA!<$HaxyLet@)8ocS6;0CaS`SuI`3m)t%D(E{d+%`-bLu^W)Q-N7+ zvGom~{*2v`eV=`wcq2uLpAaWacSm^fXI25?6dTMezp%a0$coZsPM_J>K&<~t=CL`0 zs>@Nh-{o)WVC`W38^hHZ75c)9)qdJgThAyXZ6@tG8WvAs3ChY|z6jnCeI^`|$|#gZ zWl){LEK7YQ;QyfPo1!#}x+E*@th8<0wr$(CZQHhOo0Yb0+m)G7q=_Vhe_Z{K;i z_pY^LpB=Fy9@}Z9UU}(hv0Rp@KCvU%VZYUm&0_2hE&~eH2D+rkEvd*ghp?(?J5B;S zB8Z)ShO%hAqG<~Ov7TYn!x&uw#`WSkh%JJpD0f3^f@I#h@t7K*{W+ zYc(4F_jKfVS_Es?Edj+)8yr0{BF-rVO&D^bjugI5l=-Bad_d4`8uFMpatNBDz$C<2 z6DoRh2&t7l5>%rnsmoRV+sJhE$%&04 zCvSMgbf_Ra-;9IixMj{*W|$Gu&4`^rTQa+{~eYTqyRiC`g{6V0Dy-{5D4|?2MezhKP}3TVb~f^*SfY z238nRy&*phq--qX4p=aABq}FLcX!6RxI z29a~vZ{+o{uzd}7lUK@!A|t(_V|3D^9n}DWa9my8d+lSE?n>q(kGXw9%>Ho2Fy5ytbbg9l>yQ*HiJn}T zvQnq!&&EQ7s;?Shwro)Mt}=tIY?XN>bj%@>$=r!)_J!m{4@D&VsnvlR9T*jgmyi=0 zG}VAd@+B_S4>)v_axBRV^Cdj>BU9S8Tj&(Ad}&q=w8c;AhB~}9RAj5#r(VeGvdAD< zoWwM(24PnyFHu3YWJ;d0X<+L_=Alr#QAljk!47WM;vb=+OGvG{s-kU%R9NU-^vgS# z=QrT4IYu*3xlhT;LELh9#V{!2oWa4N!#b!h{I>l;kp<;RIazXbFXd(}uFG@IU$R9; zOFM=bDG;1*Ay*+lo^ms);_#xWzm4dde+49YvNP`HgOu55g&?dg)B%UeRctC#ED^K$ z?u&vw%X_c~$SDI`6uA7dsfYWRgBGg}uB|0#23pKg;1rv>_l(b=2*hm&%q@()rLfit zsJugM%l3~$)9RnKP{Y+qno6Qx6#~cY7k2AyX2R`3qTQ>5){P)s#9~;Kk0DTE6^-vv z4S_tAYr@DEBEU8bQgN6gnWLn-;p#};(F|V|*&4nx4&Syxou@2R4=#(o-pTt5=~_6G zD0ufS&_UKJI0!M_X-qaHvkqAtHnAl04*P~s4nsSL39&g+Qr%B%_Suic(&@{0#UMe@ zLmkz^yia636GTwMcgo_$Tj&JwlMg5$%osS0^(R$M-=311W`m%?@y}&Tewc%wQI^47 z;N=GTBVG{rfaNL9G$Ml)qQU^>JsU^5J!&-$*>8I}V`t0oeQ68CW-C`Ordu$IT0=6s z-^ri+@n(@yt;C@f7i6d?sZDJ`N1m7JPxk6OOO-s&6id!PG$+z0Q(n?22Zcs=Tt9Zp z(+6)FL)AVB&1^-Z63T^EN0gJwiwz*xp{up~OB|-1_k1lOwf@>-nD{~)e^e04bjGXS z&!@a5B8z5%nXPFiTGM~*ypN4b$i>iiuh&Eb-T{L;VxRrc9NnIAEM8}@kF2WUOFDTC zQqe3mt_!s&mZ?HduK6Lf9m!a~J}K=eWd*4>04L>0)RYpAFgH8Na|+p8M)Z`^xu~1F z2tn;N<{9)(&huB$El{X4_x@rw7YUbp_9b@DpTPO*XEmRpH=IGx7WmaFxoE@U`Yet=-lw>^Bx<@-;QFKy(^M)ghaQ;S{IwzbGkxIG>ZKiU<9ZR}6 z%7eP69Y|i$PGiUBQ_ke z)~Kh|UP!#tE`ud>~r_0R)EkRM=p{%jARy(M-uCZNgw1yVX&ix*TEz@Jq-mm;SMX(Ov6 zDP5snF;Ny!d&`_?YlfP46A)l)uOndSZsr6}xg@o^_^2mTEG})XI>}$H@w0rOtuJ92 zlvG_MY~dRIoM$6+pB|ONyg06GA(QKFI>rPjFOcX#UO9d0Xc5apt8d%>MzJE>Y>ea? ztZgw2o}77uuHVz5b^R%iVHU{8sW38amTpdgI`~}r^gFtuzg1V)waJqU1CxUt2PZ73 zv#`6g{P@V!`wc0bTaBd188)0V7$Mf7_Q9J@j%7E(jij)Il=#w@B&~Y-oNCUOf{5~+ zMvzr_RoHe_XSMD(k4G{QjzZ7oq-;LsX~YZ#m24amOH-ru^Tzkp|TD#{lG zSk=9K<}add_P_*`Hr#e_)`S>Cpbp3Qu9w@EIMf}r1CeY5o2q+c_AGl9i7GD65h}1d z)LL&)WombI;%XcMI57w)*#jQc<=RcxKLSV6NYXIZ+4qFHZDV2vysq@{vFhm^yiZ8e z%28!LV{?Knp;mtW-&dZ&l*5qgPQ-Ud79ifSxBIgqDZ4RmHwJ?#eFRB%d4AE;xU)?` z()2SX_btRGq^miRLs(y9+HO7~O9U0ZsD2LgK+k{{DDsvDlti$S19NM_PMY%kkI??` z1&4!5t&OLna0YCxkk|19c!Vf;RXc*|tFxjCs70e}LZoRcT9T$@j()$&PE#Cx%#Y_9biE#M}tQ`73=AhrsE(4a&4&vvpXS zgHId7398`PkD6~IYiIxjDrDf(hjf>UtKqjxgT9G zJrle<-w)isKJMaUM7k8FOtdmootyTO!5JF3@TZJ`6*;7`BK0)h(XpND2-1G?;h-Ba zXoTVx^a*vNBgsz7gyjPXGacu(=5I3|Q=OT1BSI?YdugUzhc=k8cZQi^JdJ}tF*!8s zhy!lKzrEGFXbLYdY|PSDZh?a1vRNG=&!YsCw_6-!q9lC;xgj;{(Bwdo>J8^_HT zdh|FzEE(9H7Msrt+*^|yvj!nO*Lwm!)1T!zE*eXvf~CnRO>@#Z>GV-V7!cKKgcP5R zNH{ad)fiq-1*fBgSvY&)xDF=cBILwT0ReT4NiKFA<*_}ksxGJ19Hqs4g+PJ+i)8D#JW{*WH)GV$xQ|>Ms(3`HBKBzPz`haAZo-1u zI6XY1JV`MUWI9PRq;;(rYEaATY+W0Y3F;H$%G71K%l%g%tf#i_K$3xf(#L!k2un50 zTU{PaZHStE?v3sCorv|8>m9}mY7_=~AJ|eWzvrG=J{cCMcc2!=D-0DmgTk?83rnA% zjVvWwDwC?W%6X}>XR317JHcSvBD<4Y2E4rKf6EW4y~?+%q(UAs8B@s%UZ!KG;tX zIk(zRJ>QGc-TcdUZLGCF{^k0OkWh3)bR^_`6bx)WP*mhSh8~21myxm*+%pfMkd}w& zM%O#o(7Pf3j$Mq=x;s=~C_ya=w+u~DnPi4TKibucxcZYca5m|yurpu3-%K5rdZpj zR=E49-LIKn*J8WLoCu)+D^vVC(y^RiEVI&NI54Sl&F2P%P)|(Smw__3pFENoAGd%@ z;+Fm%{@#Aw*Yq^}nz4(*MK%dn_VMT37Yy>)Gy9lATtoI@-l)CT$WF~*%HWQs`0&w5 za@}Fo;bl4lA;OCzf=DEHq-f=wtGQvzRaUl-t%2LmBsR9~k?ZxRD{PTp0GX-vN42i< ztSMzzY9gO{q7brJF|6MpFiMxOQm%sNT7oCGTE?&KHm zDyRo}Pr~dfo2BiVL2AC?>JScE4?{0FrTFKNW>dvDaD`zBk9YQuic`gCC&>md%!;Dt z*gG1wQ4P|`VjGen+@mOYM~J`xjg-n&oB<5{ZYw-2?f>nP!Oa9mbdP{vd)OhbEkc?mI{8$fI?gI`zBzMnElj23E?fe zz_u{iTlT%>fng4^$Y)jbRT57!UUY9EBfd8T=QZI7uXtxpNziDkyoW1+lk2vq;5zZ& z+@YI4L9L2byD+!BS}HHj^PT+|xut%rWCxkX`_x_@Dq$}lLxfEnpn zQyvcnoRC-eP{Q;azyt{Fg7Vv3r&G*bkLUv!B1^|$t6BSeRDeypa_{mQc1K9sZU#hK zSwI5_6AEwnl@6%9S`SJg6S7BYZ+5l5Z6dHc0Vo}Tvl$Zid^WWJ<#+rZ+I@W?CrKY9 zRbBgFe^tBwcweaGYHukA6CAW!_Er3enpWWhSLRbA7#Kx{@43?G`OEw7VK|fHO$X@* zhC6;>_`eWY|6BgZ&eq(<=^r?3`A=y=TLpnNRXXh53GfQ;f z!sTytuGig;I3Je}abI`2yx!oujIV}h8}x|#43raDSXXo|h9qI`?1#`)LGVI4DZ=X0 zLGpbGRKh?p{t9rWFiFDQ2qBS2a4L2*QPga>BNQ}fZDa$w40hyEo<=*n!~XbjHbwg@W<-?e3bUI1|!I}Qxr#|ivB#s$B{ zL!-<16z6b+|BczKVF5zb>a~%wCB_Vhixqs1=nOO$TVKgJJEc$kl zd)*9;X0U|z?WifrmAY%*4REkT)Ofmj7o(S~pFfRSat7nf1^I1@w~CS08xBx!6w<1hI@&!iirv1**h)`^M~#RtYGGwY#1M zCm$p}ez+KJOGB}@8R08;pv|o0zmB`}KPQLGq9;EEW$cG(RNcZlWEQol*XANUX@yUy zLzr55J?wXieMEF}NfB-L^?_{DU+H}ec1uZoLUN%Nb7QG`U7hy+!Xu=6UMmV&Qf8 zsK&wQLdN+Byis&_+gU8!cm^8BB3~gtMw687r~qIg#AL;u&a=egSX`lb3>9<4<6s$= z&@PrdRmFH-_x?a5s*K07IU2uWkSyV1FEg0aSpie)h^EB)^gVNuckwz*Mz(mP_mO=7 z)BRU?3kIA15kH2+jA81PmM_tN#5JhXr>O1v$UGup%F8x<#}8%alP6=}`$n*Lx{~Db zVBP=MicbxBP}%(S2ADfyF~QR7$$q2XdN`)^)lhuRCYKQ9{xRK-v{z_y<`4&9D|Zv6 zB+#Rs9}bSLxz<5?^9m=GCxuq0=DE;KC*-^|64V#^4daYpkt2pphBa(<1*brpivux2_?~@ zHy|$qiP+xIm`NqP__e-e*Lv$27^kl{j;*G|)FeQnzUyL2y{HrW%OT)i>3ho%x}4)F zMo6YPi zhuLaZ5u_cgv&8O3z zk95>)YL@8jQ@&#-tcoOH5V>=1@HS`zsj!7sA!Hp%v+2gYRJ3`Dr}-{PuG2gGWt}h8 zL|fZ*N2g;vD?PQJxi@PG-(zk%h0nCB$am9p`*d#w*9Tj@76{{;IhIZ=l$>>)&kK*@ zPHXPxDl78;h}(LzbImxk4LG!UtQ^?^F65LJ8fhO2-eIeD)K(qzY>W(2B+@31s#-vY zdJW>gwdO&G9?}MyzAm$6J|nE7=NbTanidzeFMOC_B0XX{J(INTRbz-|_Y}(b<~hFu zT@~T-XPCyb?sKLUe_Y)4O8=={N@MnF42j*jy~};PlXW|2Yn~&kDewseTsb@5!g#3e zc~il4u8e(O9KHYIlfMoOp4jrTDhCr+WZT$D(gBTDr0f8ig)5` zLlzYQN=snYm8^-qk`}a>=TnCj6~}2%;WfZ)IBhUtCcuEl@UVR%yyr1?y$%FUo1Lp& z?LslW!(i!V-Dx`g;&yGc$`{fvY4`Pg*>s$~ac%A8{W6E?gWm+t$2M)P8~-!s22P&^ zV;~?iO`ZnL-|xPr6(=pzpLDtNJ0E5NlIG7B(Awl!V5&e{lq96b5#$FYz7WxRXhSc? zkf_6_23$v$t|DC}UhQrNpXC~Zq>HlN&QX;zdC`Q*5{**Sd9*=?o| z)di3G5fJ&~8))Aaz8ez+<_)TQpA8KriDT?S0lwnLq26kC%^BL53u94;2hqkTOy+L2 zt)Yj_%YgV&)>OAhameM%fkvyXU&m>S$4}>8gZvJ}^?q7#X5*;U2&k?k@439>c_~qv zIr5Ol;7YelJf0&DB9oAp9ySL?);2K`>heysrb`s=2TA0NOV@k2ai&T`_I$#>J(P>) zWKB1`P;*(uYMw=x6OJ!k=2z zr05VSCF$A6DaenYfprnDYXu&)$>?G;El8X|FFVb3Es&kXL`#Yo&0|!;n<^I^PMdaD z7#-P0KeyWyPna!a=6{A=Y2x7$w5wJ@q~N{CU555PtkPJuP)bIsgeHQ0;J zC@vM9R{q^5<&ZkS4qNBD#m~FTfMe98wyKz&foA&_o#iP|&=`(4jR1lJjHC$k@{xVf`6dgDh8NB6gcnEyeOI85Wt!U$5jrievnIU)yANl6?;!gUSJ|1( z8A{$K8ijQ58~zjK+BW!xz5^Kx(IA`LdmV>|cO_>BjY?m%S$FOWgkjygDYkUXTN+aB z1B3d@^DC;*WJ(#CGs|I}qs5!NHT6^JNp&~pJBO4?oYkK($u-3%#*meS%qAgV`r#PL zE%QKMYLBP{JD#DR9%W4v)*X42jCHTbeKC>qkK#>SbJDVZO6aKq-7TDe(8^rH^&%24 zSxuGkz}VvR8`$4K`P9!Gvs)ShZ3h(MkE`6@R3AnH9V}t491uN|m9=-M0SP2OlxsuW-qi`!2ivqXY0(tuFak{LnZYu673>kXZ*LmaW(M&jcYKh+1dmpE} zxm9`nWy`yrx{hf)d_(AFG&k8Vb19B#-}&Ab^sx`cfS^AqTL)lWU?i1>{!evds3ruF z#InL!A-wYRdllde=R~3d)!5&JL*{j>qORTR=zF$EhBf2PD~I*ULMAG+=}QB(i}e@# zAqRJ-s^I2(TMo*e`yV*$j<4V4!JS#v90iyX@2~Uz80cF?37V^c8U8)L}=*{~$Og zQ-Fe~{BaOL`-xYf{I3s)Dk=)VD2W*|Toa%SfZ=2n1^)MKQ|hl@ifGFaTk2c5woFqqI$7Q#9r z91Fgxi2$JxQAwyJ+(HP-j~u}Yx_L=^mI*Ipq(_i&jnXN8LgQ;XZp~1Wj>|FVrG>DL z*%2$4skhCuh~|V=6PcEwu}b00SW!8eifGC>!cWXMKV}`H8Td4*9adw|wBxpBDJ`~W z(H_~o@N;B1Y@MnR&{q{NOl0)-27$i(!82Py!8ETQMe z9v=^#awU=`e@l-V-qGW$etbbwVq|h{V+sydotao|IB?}Cv9?`Ukk@!hojt1s+zBr`Qydholtbw-|K<$tke8D>H3t!I$YV+1MRHgM zv;8JN36;a#RlzP8Q)oR`jApKhQ6elLg{?b09AB&tZ-VDAjk(uEH79_ZX+qZ(^J`!~ z>Ze98n&`R_-pukNP zWq9W;rp}oS4#BLzG(P7GSFQodTpujo&K!jyT{jOOia4^tdUHlG6}7_lq?{6RiMq2) zYwWBN_Gwr>NW3@jyxW@UeQlXbpgPxDx~uY&6u6;mYlK=?`32m%r-DW%W7n1pk!J7- zkj5%dU2Af`*;?tkK;NHgFq+eB{ez*eMVAXz3(ULb2ELV#P@w6Cf?`jYV&8e+Ipj5~ zw4hz7CDiB*S$WrT|5J3|^>?;g2+d!Ao4?^?UjrMjnA~nMy|~}|7|2Db$@%fhiKOza z{7G>;qe15dWiw!mIOw>#Q{`;D}!LeJdVyK=b0ZBq<4zNp^|_YIQeRWUNSN> zU+l?e?S3f_Jb5RPe~^v9Fi_&7CO?V}%$}q+e*cFd&}^wR&dE=`BmSw71piIVb9Cf4 zbTa=(o0_c(<(0UE{JleRm0E;5j{+&ge-5=#RHT4oA#9=v8B$E05KuX}6z5gsA2-AW z*;f9V#^KC%Y*aAquXq8ZZOj59-@<;v!un!&(_ZR%vAOBV0rGwFAwX@tp1bke(T7NTtI+ihBiH_huUI~WdX2|w69 z4YYnQBG_$E7S`fzQAjBk8&S~=)EN{;PuZS1jIM%RQ9-}eI=Hn08-1LVD5k==6iWsR zL+S|TzD!F;NmD3M@$6L~{`hoti?B~&TmC^H3qZK3wzdLgP#p}mgv@NTS& zjc@VvzV68LWxCyEqaXlj*dYWFQ5!_UE6D0d%!C{xHY8m{iBTh6y!FQJdZ~CMQO5L; zqjV`pHcUwpG*@9;GQ(l)$zp|{ux9Rw2sRU=6;>;{x4`~qIRc`bMS5n65#HW_mT>|K zEZ&}9jOpY>&VR^irqzN*i!-C_Xt}dHT2AkZ^jMI#S8*iL?dwIEoEl5lTY{pKg80NW zIa2eythd67TxvG-f*K9Dw+)A2ayr9`7RH@CNh;`$WgOSky80_JSrRA4j81uxSEbB7 zT`VKio#Qx#3x%G-;=_xh#X66AD6wME!>g2?7DkT+VauvF4J?cCf=!~25)m1O1neC; z83-xTGwm!H;+b2FB2BvNMChqgP9tc@W;pXoq4xlNF2}V>ZwSU%34ENFp{3a z>9Kvhlt&S|L`U7tmgflal=~C_tkp^k*{4;@uoU5`!rXh_dW3u2dxHP2kahHk@H%mY z)?U1V=B(UFdr6K;X!T{Jomf6*H}694bh$sE(rE1_S`&UQ-C1ju9dNqwkGkG*>#Ux- zSd9!4Q0_cv@1=$!%5=rFWlNh0i8JQ$c_MF%ELveGIH)Ur1*dc?02q5?^)RtB$slskq`{uBu~tiud6G9@ z48uxJr{8WeAAbi(fiNA^j}-0viYb?V-0ZmCdeYG4eTFdosPTYr zpVeg*K*&Q9v))YYFvc;9=)7HX~rIV*X$8Z%8r%EKMC_edR- z`$RjLdMk~2+v&uUg3@|>eQj=TdHv|-@>G3mZWF=m;_UpA9FF}V5|o}w76@v@^7$^9 zXtx61C6)ODs8Y3F^zV0P4LqQB_t~L|JNEo9i&sr^dZg*#5DIt0TT!)SF2>2`;<^@; z<>KIESy;!T%D~F#d!H&iFIrdG0$|vhryP8;SXVgWoOk|JE=Mr^m$s`wvZpplF!^Kq zR2YE=CCflNE|D(;VDOV$RjjflnP{1Ft{9He+o5QeNf9s^LDDX->ZU}?WaH39nZBVR zUtdXcol8pKL1<`=pFCAq5iygvb%yTrUWD1%fp}_PrOJpvKNW%t7~lq%*DQ z*5g(0f-iX;J}QN*vErR_7CWBR(oeYV!!0XPp}-CV$pG3)Z5WC6_$3G4Y!F*)!EV?z zEI_w%-oz$!ad~G2sedcmJI2~WysT6wi?mp=JHj3zS78ek1~p)ARFiG#f+EG66K|xx zynk^oBd_M1j1%#3H{yionhgyio#x*?OJwr&CqJ%Xc-EtSAs1K+j^j$C8(`|)9AvFT6I3eWr9dv zE_NhO7i zG0`lB)0|S=f$x^_s9#wMt^!^kk;*YueIl>RyaE|JjTKb8QT;n#-|t-YYGkbti>Gk6 z&isz7K+}X0tBJE#{9+VIUU8`n_u)mq9}Wff5!Yv`XKc;)^~h%u+zkxy_)Y!zZEYK$ z38oByTozd=Rxkcsp>xVP)g!a6f zF05To^(9lgXtyZ&$>fGg-hO0fqN_?S6>kJWKkmVu4=)^{q zF+GzAY!dcpq!CW;g=SkS~eY=#w5O;{2@iXnLiSaX&BRi)v zoFzo~W7Zt!dfW3kYv=8KEAjK77S{*Z4n-4^sjGSyTWX?>C`TPV)p$~@jX+<;KdKUv zXfpgryS|GQzcdef1?iBUR-b>s89fpbQcYqXGzA%JNE+fsQZ2rYVh<=}2&B^r3>95t zfp7x4zDjc+8k@ay@?mL;;3XxhKrlgRni)!h_qrTr1Dp(wJsSMPz3v0CmK5j11sj=hCLrXV}8W@L_<;S#qL|f1`s-ZY>h(_}} zo9K`2bTiepbWOyiCRQRoHpcdfw~Y!n=c^Fv-bIY%nsL5WYNHMN?hDYLs-;>KbWj2q z$fbP_)?k$ZI-m_|M(8C0kCN8iHCO9U%`PTvi#VD>Kxbwl9><--RVh!k79Sn%C28LqyWt) zDW74KA;pVJ3{*7=k2%skL1f%L!;tNKD8*EhkdkkFYyhfzY6Vq$s8;fnh-Mv%i~``N zTlA1`?FIB0QM>HC#*hOf^3Y0=_Cq__AtX>0CH(?fVF)A_-=ylBl@8jb8?id2s(x6{ zhEQN=(G0i>|Ep7|;EQ%p?C1e=3E$HgerHN?HPw0m(Sec(2Ccn@`^Ds|bH@i5I&J2L zgv66Q&zIgyXt0dTPSsw2(nSD@J7b+HjlEw4IYW}oimD#8&cn#u@c6OIlh>tdo5qdX z9Np!i_!3-)zvgE4`9CEXv1DSq4yS$Jd|}#CqnmnAhr|o>4rLJEYDH(dO3%8itfGaq z&#uWzrfKHlV9IU=<*%YKRDeFj z+sPcdR?GVJ%%>c0!o`J=`r)w(crETM0T2trmVG$R9*rKOayJ1yk$Q0QnBgIR>&K}y zm-r2$6__UE=@3#gnDowz6R)+TxJ9Le$~6g9JkcBc5bpIm_{IC_X(*_fLL@y<=E9Lz z0y^l}8~hGn5+vosxP{VG79wlHAAiOb3k@~2B%Q=L-G~=T$Tc<)os14`=Mu%Q_je^I zo`AD=4wR!WJALL4b!R`}#HGK`xAw|Qea`b2Y}p>OAi{rxSBfUh&~KK6yZ)-yZ>c;j zarWy`2A$(qFCiPm!73)eE?ltJSV-#wFR_D6rH{x&Bm7thqJxzo?h0jmjp7OE>BD@5 zJh^4w9s=qLzOmz}+C6z}XXHl{g&-FP{|sV>4z^2REu+Y(x?y*vu{@BO3S&AxO{LoK9o{X+Mx{5+57O zl}Nj^vR$#mzjTFK$_w?94#sMGW&KBq`}IrhKRDGP|K}2CVPs&)@NWi&sy{~->_Jg# ze*XIM^P~Omj{I9cY6gA>2YvT{1m#6X@k0*K!3lqxHEV!$I$j9Cv4TDU3nL*71(S*y zmZij*A%N5#4*c4mQSd;z#!i> z7L^I`IwcW!NyIGbP&J6VIJw4ovUsPWdWxkRO)y{%0;P=d78$b@cyW@*$XwrV1>I!^ zf#zD7;^!*sl604-R`B8#3CdPcw2jqExB!#&)XA3Ql+iVF)eP5yOuN!;8BedYUBdPr z3()JphM;lQKySk#VNG?HXbla?1*xFs1XkT9MaD4Rl4Y2vrrd_^f^b- zoKD_SmsTm*izt7z(9Rx7{d*nB129Dv~S|FTR;$>LD(&ToFp9SCKGgCk1`rwJkL z)9Zhr2*Q_iD`v4L53O`$66&VZ@eo8Je^Cg3@q%oMLg4crx#>vX{t-NM@1GgsRIYJp z+ea03zu<(_>}QSgo=VTSu?NPud_{0&iwq$;PxA+(Nb7ZQAD(LzcFFezE!LVH8*UWT zBb#pY^b)4k9D5VqJW@NM>I0H`pl`&I$Nc`+!8-V_fBN=Sb+u#PKf|J1>0iI7|M%bi zpF4vqO?N$|rS|V0$D7IQbgcw9hCVSs03-pF0Du6{Fe(6O&;Ve5;3RzX0keegap2)< znzrTTWg2h|p(g3d=3#0$`^suHYHMu^)aFR*=5-az%9aSco0n`(&4lm~o*m!cX`VCO z6RoxR|yPH&AUzv2y4wSt*np89&qnvW}?=XJXCWBl6pQfYa5?d~Rlm!K% z*xt&cvx>m&=LJ(l$P%ig23tYva{1b6}Y+qU^tV(*3m zz|k30cW~vsETuLPMDp<79esHI;tfitsmJUNhDT$n*x@ZftB2~r_VHHr@Jm_!o*Cf5 zx!tPqm4uf0)&=0+9rtE8)7!0U7;3w9;()aauGi+O=~bou=3W4@Z7Szpw6}3o7cAmdVxj%!0dxIM%aNOkW5c@0pH~+X`u{M{9e7E~%34pUNlR zTYi`OIF|c>IFj1dOUOC%7H8|U7Zh|~+l0ZMd)5DlkCoOJoHdg;who7kw3y-| zd8x9qWYZW{Qe#7Fu^_27VmJ}S5X7rz*~HLTUu(c$>>+5&XD6x>#t4|A47}2Jk8#eJ zlh)VEWKv5Ao&-5z4O$1*4;|*!tH8pt{sf_1M1irn%W!8{TR@7iph$CoA}#*qlmxUM zf=W{(&bbTO$`Udi`ixSz1$Sl@oO8+6mXXq8QgRnOJuq$7)@~(UXKkXvC-S56F52*< zSg`N=$?+6CFYFI-q{C9=Q}HBQWux81u-ZW|w06^%_P{|yu?!+qJ9G^hjBm*32x1Xp zj^0a=vkWZ*{hfadms8+ua0W^QZEdKvfpWR+H~if4f<|D^`3^upJ3zi!NC+8R12|s}owzv_)|c)iiyV?%8|CBXXU?yh1ym?qU#IBKfb(fj&k^29LL(_OsIcF4mMRAkUH7=m|rInFwDg(a%7rTLBA$2xSUdY(--2P3fbz^aC2 z>^}iF~S1&PRF}U?<97#HazcrZx+^7DNF> zljT6aFQlN+%m=#viXNHU{KoFHy|26a7w}tw!`FC$=e+(5M*j`7Y2jGc5ms?YuPzCx z>HJ*G!%$?$-~WI%2fFg=q9x#sl?6LLmda=DIQ7*yQ>S=^>Z^LH_h3i!FIcAT9`B#Q zT&s6_?%<(B5@E(})rAiBRV*8-I5@B?fL@_9K%uIDXfjC*QdFcWK2XF2O}vSK<6HLp zV`>l>{>8j#5X=^&Q?Jd_DuF%BAJzy#N0i@5kq+`%P;a}xnSMTIS`JdiE%F+kY@ZRs z7f8VvDQ~bkBP>pkPq3(%cwPgJ<43RNCY4?EX0;u~MT60ehB$Xq=qr&y*9x?T5H`?pnx5|u?XK<&-d zN0Fp!Nz!mBUPeiUuuua!?OFCRz48=NoNN+Qd0(hw3F z-A9CnZp#}T?wRfVCu7$X?w!2QLq_oulnfYqgw^n0P!E;qYHn))DRFWnfEI=%bMn;c z%|8uivX3V^RP6YJDmeBde7Oz9aNOsP34nwFJ*4A#z3f9jXWl1(eUl2;^$ z9|+=)i)+{nIU@PU2 zTQc%x>K4OWDh>sP*1xPSGD6DrcKg)qbl5t|`Ggo3j`iW9Gm1?j;ri5*ImVBF#R}MO zvhqHI8Z0-Qfk8Nz&qAFivkY zm!+y7z=qOTFVM`oGLCA|4?dI7@Wq9!+!)LphGftr)Noxt5L~rhLVniF4yjpJf}j<; zyt4XD9W8Xhxv>t1Di~eP$=PUEj|4rqaI`8+DaRX!`QfpKWVm-j5Hk~?ld4DE3?@4?8(69hz)AYFcKMOmN8iAd~2;n5{i`01*Fi5 z4yYWR<>4Ru)nafK!W^D5qpp)BXl|2%NSSr9Nsr(n(C{*Dx?InO9?xwZb!2=VLf%ew z*OA01!1uXd-vUNb0Q>%7pi2HYA;`pMytgcr0wGxa#Ks*?i>Mn-w!*ly#@o@%sOoc;V? z*3E>Ats;4^&wPB6OC^jRY$UA>N#K1!T)w7T1aFfnEymVX!^ zxEw%S8S%>t6W+_KjR=Lj9NinCCA zC^GNzc^G53&3YDwrm_LWWBKW2yQdT&ylnxN+(o9Q~0NwuL29 z9tMy9Dd%Cj_jG@eyr~n&noz~Ht6h6D0F|Jl# zAh|5z5~!w6qY{(&=0Pki_Irnd6U{b%QN%bADLAh=<)52{*DQ0cn?H`LMYnBdU5QFa zK7A>!`@S%mZ40*Ac4JGY6a9LHhfyy`==Z?IM}{bNM5C(o07JX@?b3%(jv28AY@zt6R`$~ zso_&+L65Zo4x2s>x&YbeK&K*kKxO6m?6bFv+l<-AM~jalQuolz5oa1Yy7sAK|8p3+zybR}W0Y`eyyVGu>1oA-7s6@>iu+G*j z&W3XSP|n|mZP??dZ^KE`f$GskZ(%aP&xiYO2(2I8?E`Q9)KbTAw z)F=QtVght#{2x^Y?$HEyqxP+(2971i53KL{kX2Kg)47n5I++RoaTz_NrHaoK_n3Q4 zppMT?e<0AMq7)`B&8H*W@+;pN9+@VDHpGppN)Z1IQVq$lQEPv|e^BX+fts>AzAgRo z|7$k^(g%%v(b_5fZsxGIz$f6GA>!*q9|N3x@AcrSsM>FHw9oE=kE?YG1G@Ej)-G8^ zq0b|Vd^cwYls|>hl15g0QHYp=N4qESSq?D>?f#;8Uj!)iW>q?6PK`QR+=dYl+24WA zeL6@aIyn0<@C8@q)vk0n2u2&bP886wVq4Flprf2tvRktF{ogHv`_R%$^9J zs>2U27>Fk7Sbsu@TVN|I{$aZJx0KYUDYY5s1^e89_EEbNYrajOoA?~c6NMK2tOI1- z7vR&jlxgpikRVF5H1U%{-h<`?aSA^w7hqn9g^c-Jj_<=}_mW(@0;{)GNn^R3*- z8C&Q~FH?J4sO9XYQRsE0n;CdR?c!!z`04IYLT9_c`(GovQ+$mLg@1(i7q2M88M1# z;M-x;;Zc%)#9jz_q5sQ8T`W*@%7v;7M*$1i;AOpVDNLh-Xz78z<)FZ|LeJ`=gC7C41B zdi$v_Mh8N5=;0Hj`kTe-SvOP1f^bt!#gidBsvh-@L}*o_YIr^r%Mai3t0?RQW6#I7 zgnbXz9Y_^^hM5BM=2YNASWF*Qj1rv)dqVoX+8hWwzDXj*e9nM92gXfrKv#3@fl(EV zRp9j0iA)E+CyMOv-t7cG=q&R7d8x2_CnaL8t$1)*O~jqE1rfIn2DIFzIhpkxXunnd zdHt}SK;_zyq%W-1lci1!F|*G&mTT~+)>9#9)-`T{t}Bc27T8VC-NmoDy z@)QHB{>QfcBEnOP__Dq_yvKzDH9N@khmW(PL;qhP)<{)Szz>l8xd^v0&~9_11m@^6 zMc8TpEg0kuM#h=pr#aEd9XGVg9i4N>P`4+V-D&d%q&-A* zL&?Q(C(Z3^cq7i8RJBL;jgsHLdcfiLSC=)MVAih6KC|E)9jUuNDT>gndz@)2>-C8s zycDu!Rg3wo7qD;@af4(LS-iI=_7=w!F2Y}%D!q0;qLt=q}Q{xQyN zkMpVuY~Z{(oOtY7o7=ev^!O@`YK)A0eEcfyz$^X3MQ=fa%(6sIe7YQ;hrYzY8v>Qk z6X`)IBd{CcO-0L3hCGrDgETrXPwUA}q?mwKoctAqC%d zBQ5ly+G3( z4Q$!I)mh;SNzY0py)MNa(g`YE5<;P4C_Say6!k^wJJ)=*(UzzNzU=1k>_ye>Yd1mM z^?pj~d)s`~(#3FgOxOF@?k1nhWjCbjtku5@Jh7jRo;-hm)1f}9bc9ma3ES(8 z1r)d`*Woc3cc!`|v(q=Q zb7yP_{Z-kD{$q5BPIkov4mend`P3Cr_y7yFw$4-Rlkt>0&H?pe5;aeeEoy}R@kkrd zl_11{Jv>LfZArs@K|({vMhW;hT}qg(W>e*pgtEDgaf<7bW?3aIy6l=y5V!A|D+%k= z?WO=RA@!~+7S`Qy_J)j^&6<^Vtax)N4jPVfm$?A_e)ZboVjP!+v1Z5pVlA(8!~<`p zqugNiKXLN@>NbFT&~ShB0+`NVvWF6uj5_}M%}B>@$;=5g1yntus5edbu{Hgdzxoe< z4Q|+rP(HwNX4(|U{gUYR?G{vj;I_xz2%WZMemSxyfL$rMN1rF0T{(Iu_Q`$lbK;#j z%rAtveeidVAHcMS!*P7@czoY!=r>AUOpiU3AI!V}?fO{10O@o2X|uz&r0 zM|=-eZ=alfqjrzjUx5E)-rs0brtGRDzG5?{@yi`~i%lPFEa`x3x_?g+BA2@a)cAsG zaNoE!Fdy(ZpE5b%Hw97Wv_~lTEkw5eh9@{7ME~Wt?fa2a(0?cWfL6>X+k%v2?MJCh z=DRI83NVEc+@T}DrQLO{V_XS`YmWXa_PdM*jf?s7Bg_hgu^ad2hm>X02}NL%8Z}!4 zU)@=}k^{vSpUBa)aGq_Q&tTGkGc*iV$oL61XJ}Qv&nz%x+2M@=cE|;m3?H;RnuWn$ zj8g#G?NBH)?#&WE1sOj>YMFWrrywqyBB@CS+@+E8(T-5A0jI;hL<43wQQBySkab6h zw;e&P^ZAiOXW~<*YXoeee$Vjzz|f^L@*i}ll97^SJQUSM0c>Qk?DUU5I?rs1ZY>DV zqif=KUQ14?C5}-J_$`Cw8PRLca=9E$HZ6WO%|8Q6b)EC7U^BBLKI7WjC)Lb#%x2V6 z8VOJsCP? ze@fnN!zzd7%d;4rn|I$h@PVb<2Cxyy3{w*&KGn&@>Nj3&)yaeE;GFL-{_5aM!|L|g zFhO1%6!ebFsHRVcgsdZ?!=`;A_Sum?v-d*ublnnkvl?iJgWYSl4%dZj3|-#8RP=?K}vodXxdhMfs;vr zPJV2G)N#;s2RQRjNZO)`_6bTxfy}MrH%9W>(reny&xeMdiO`o#`-Yy`QBFCJ#k$(Y zWE~uC9?{S)dAmlFxywm5w}sD?s`7v1wl+CpP=i{5iY>%0!Ml`UfBk+o69bES@MB*% zVmk#6F>u>h`jGz|^D$UtU6z&yef84uLL6Cn5#L^gbw4tT^!^Fxh8tgd7WLKTJ393# z9iNLME;}WO$#>@C*9&hsc<}^JOi){U=n0>QaXGmyx|hvkQ<7IrYMx2|GfFYVF+YYP zHhRrMy|+TPCZvV(hvnH>Aw}pGRC?Q)5UOYR(6J>$ycK0z-{4eyyl45vZYBS>!hMpid;^GX!)~c0#pTOi^NJ*(+cNG zv{hB7OiLB`!fX14GN1BkMcFc%i@Z+$Pc5CIU6s@_;q#v&WgTN_l{8G$3n-)3&c*bi zTBegKt7wx8&O^m#kwdI!lS9vE)WgdQtI=!Atoy>w4R>%K{PLVpgO(|lW!t41TlSud ztP}ec6FOzL45^jZ>0`^d4%Ka|(3S5Kx|X>sf!!j@zV~*|^{)=kWp7y?(;q1w+aIlO zh?RNd+WQNKHInDzDq)`E%u3&bN_lV{>XkWdvvM=-mDSwQaLX_ARdYosyrE z-d}35SL=IdyXNQoM&Y01Kb4+SU#ai0?_ST{%<7${(hB$*OfU^-*j6^o&=uSE5_b^^ z-hfC-de=>__|*l455mZ`nPuQMeUwVA@+?%IASPEW@8r`-3fFzz+Ss^CmwN^E)M{3J zt={1?!puoBQJ)I}D6jKJEWNlohLbZ?x~G}nkF`-TnKnF^q_w9}F&*JUT=x^F=E;Cl z%VG`LyegoKjdL&31vkC!IUm#RIUdr5SKd~V#kBn!(R&*5L)|M6I_G+c39MZ`t(z$gVy!deCx>! zv-@~LibryFvF}m|zz*CFQy;1hQ&`bjji3ap zRsG}4;86|WNmfYMB<0F&V?U~&M(`oM7yY*>JQ_a<^K2f1-*>w4@LLmn(14r)2RBC( zhcswj%^$dLzwYyGyGW6`A|nkPm(K7vPra+4^yK@7qyv_2c&t))B|eUWf^1|jAqH%> zKeJe=+&Y3D+d^s-iRd_#yUduFl)E~xm;bg?zQpn{=E1g($9)UE{g(f&TdEdXDZ|^S zB!AgU`pKIbCt1LhAd1RPf-55%L5Rt-eLkQ2QC;kF6Mc^vslB{YOkv#L+)Uts(qP6`o=klq3duVK;F9@+}AO# z20>W)gpi8{t0C`4*sSA1aaW+Y&**+Sn?d)b@#YbbyjbetgWgI$8ibZ2FYpni z#brsIml{?4sA`DbVN6{jEXqx32yBX3dQ&$donunH7c|0L!>a0-)kXz!j6ggqAiNZV_>_VV|)o*n6|^9-7I%gV#6)eoK0%`y#!HS%6j6m?rnSq zGvO-S%yL$}@_82MOn!U@=gKQG@eB#8D@}TaqTdy7%CUiKBR(1CJN2Nye|hg|XD&qj zOhlkPl^Ueet=yIAI@=K3kX_BV6Y&yk(O! z^Vi)DZ(keM#nlc%xW;x5C1j=v$d$R-NkV{zTjHSMlW>*nNxNJDKe!8n+4ABCVhWMrQP#P3{4*A>bX>#K&Pq2m)~}sq@{#v$N6Uuc7^0o zyDg@-ZaK*Jl5DI;Qzg}DVY7%%b*zMY2!v&*EetwJs%)q&xfDHhE_?{ZInkb28B?_f zz1ELjTS9i|X*rZVGYae6aBnhWgUXSK_E);goO{KJI;q*-gNQxo{x z$e-j@CzHhx78cjsYFZLfK&9wX_0L3pw1^62=M)ThyX#}n94F9KH zfP#+H5CaO&#zm#euU~Q=p*$ycm>4q{`Fw=2xd>HKTh*9)rWan>vW1xDo%3i+<5$@^3OrTWyWbdnqI&j6 znu9I|UF3YDMCBo44}$Tyy*w#`kWN)_KnTpvN>semuORX%LhgAI!lTAI`iHM93DoaI zhC|(mqZ%#NKv@PO`5@QjuEyFE{X5j@MWKkkKFU$c?*P`2Js7w0=FI&L>_xI3EKN3! zYMxL5{W2Kr*a;omIS9$7P@;%tbC9hMer{tL4A9~Bq+eMqF`B%Dng4V>*9|MLgrDC^iEi=pr|b-i$!>SXi3L4?SQ zm-hhTK?xDGW>Peq>cv znyrEnZGta`^)SC0-TZl-UibU?K0x({oIXkrD~U7Zj?>{Nax-hmm_O0RpFI@BLwAtK zlCzfHY^SNOdYPG?eo|vU!Gc}_DkPLI4-?29C&)>pt>1qLwh|G|+Z97bG2uPY?(5$Tvb!fz?c+1t((6IC{qgJZnh$v2*wyZk|tKsA; zG^@JK&(TK2puaxav-Z&KuMCrt)OTybEw{?)qDA$g)#4=vo|#Yj>5ksqyalD5ktf*g z-Vs+ONs4dch#`w(%((JXKfj+ z)}Z>O3SMsBI@4th=n{5v=#MU}QU@+2E3?yb%M2$uWev#Ph~`~gJChnl;odvykv%L+ zYXU-l9=Fa>J@hy!3a<3&!EmpJ%HSf;+!*`=gLo*`+Yk1bwObgE^Fup><_5x?e*6-U zDJ+L0>4T0ZpI0LvIKK3;7G+L)t$PufQA65pdifAeUxWhuAWx^vH9{ygODbM&J1i*yu?`GgUxXu+ z`b7S?18(p&zM}N_j%M;TfD>kPHp3Z2B-n;!w%aShi!%C(H7XuELNr@=R%yDhMQ{b) zxQ%bByu@%i#~3~}%qVUO;bn51nX%n4T3_X4UJ;se-;wUX4UqZF#%1UDMtkqs%lgDE zyF*HHZ;8=s8JpAhMj;4PWiw1)TT?POrjB@|#ClXmjp7Lq zBv*ubQpf_?Y#LHP82zQJ2~y1T>EI6br*?tYxJ!Sx_|iTm*|dUT^|cPf~@WXXE)2i6F?2qe49_q4dXs|b;;BHCOw z9Tm-B#EH_I=cB>L9IZtI_)?@vSZE?j=e?Z+$%ii`HfDZ>bg7bmU0_p<*dMlHJMNVo zgF*v^C52XmH-l4dnv{6FBvjE;JhC#Adgn1OB3c!sJ)G-Y`YW*=4*{=waJC%wR>{nv6XsSLle!pE!yB*F3WWDl?=5Qeri?=l!V1PVFlWHQeZY| zFH}lq45rnecMHb)*!CI94iE7DwZU*5=?YPqNx0B~AX}U*+`@7A8=obITO8d^LF4Gg$^wm66ZS8;?}cr;&zwek zLIuBByLP;p9|e-5HpSIK*N$t^EB;{IiDF>e&`rO7Td1J0FYdk2z*7aS2?C808>KZ7 zG7GCzQn7gZB^xiG($wTszIr$I`mZ276O|xtMS=754pQ1(CQk)a%iu;oSu>V;94u$A z)t;BT?ie(f?(i$D_3$TzRbn=SJ^Kx#y{@e;f2c3JJz^S+_NWvV+O8%Fmi@eBSzVQm z#U7MzzQIp$l%%=Wn9qWCvSqll=};6jbIX`=_Y95GSTvU@RR#vzA#f0+SHEnhYaOOs zX0pEKgf7w&CRvPIzbsb^r?2@QmG0_&WB~qtruxAcRwec?&Ull%0s=R?l__W8fo}u&a{6Lfh(=og=7b zbo*D^nH_7)ayoUXIG@|-=<7(sN{Un`Fu6?WP$5VaMPPtik?4SNnT`puL5?3(Aw&o=L?aJxt@eI%6q8nfUe4e4S^Y`GisFX{GE6> zMOr(Uu-$GiF}Ud><^CJV5}&x*I(s87<<(qKQqj_6(G)rv0fy}t!mTDl^hK6d>^>Xb zY+Dy6%I4O#W>;fpabdl=IrH2~c5aABsLqbLi(UPvBGZ@rN4~X6)Y#zfXR)~$iWc9e zVx49s+IZUR9)r_yYLR>{psL+1h+0fxK~*W!_#>8SYugFC2pIoLSL>7sd$;?~S`x|M z&}#K**KCogRNAHbAJ?1H*JVpAqsjKwG1cYO`K{&kjhe#3mad|v-lhq@yxWNu@9B@d zG`i6YJuLJ-(8ZEB*8GO86{qd~6@%QV%h%dF5%c{_Xo~U<82p5fp{6fWupelM;JW$laGkS!RXDpO^87^3AM8!`VlPI!f0fnA?ozS z#$XmRu^l8P(6zF?P(;N(3g_xUJv`OAjDJ=G<}OAG1%y9ZrbffffH z0s?N4le=QvSHvsTTERORKk&}jSdGKvvtc&52rHH(3Pfl#hLmz>Nh!L+SfK2|C+hT7 z6-`gbB|YH{k>oyY4d;XAHmw3zv+`}GY3_TR8|BZYI(=ES^Bi=>SELgU5X02TLrmpZ z%C2-gz?!SF94U)KP!KhdsoEmWEQsDH051pylp6Vq5l7!h11>w073lu9{4Ja^Os}G{ z4KUx493}3VGwjE+4sGvXlwCUAt%@TI4MRCuUMW}2xMSdC3I%2^?Ti8M67_N3n<@Q( z=~L7CyLX&_6_eH5-S+^*6O(^rh@6zuHr7j=6E@(kPAq!2;P-vyZ0Y4dYW|c?7M2IA z%YfZ(C>$b#WYgg#=@ulG#&v&GXy6>LPtC8VnJFv@8RScYCa}r6vMZRG+`c;NrY~g- zYKgolBK9iN#1H6bE6bqpjXUtkWS(peaJPGis;4s#3eG_&iIeh=Vh7M?(;(O|I~Apq z^B6RpTr9v;ep`L@vIZ~(uc3Xcfz;_ssI9|npf@=CEL0c5Sjrh*R~Jf^Yavs?uOx%3 z<_>f}^i!T47xN;`PXe>5&FNcu+?{O>HZhD}gzIr}IrbFZY17HK&AWW<#}N26pdTXS zc&2A~1dGQtRO6Vb@{V$NWea?QxOgQJexpncEuHl z3)iqS$=Rep@chww(udC}tB1{?1kl4V%#PXrUK>|YGtxpkaZVogPmH{h?VLu-;W@rA8Bi!!#CRH>TX3p-vdlN zWtg23T^f4@)UguXeUbi4p+kC(_P;ZEuYPHX%1gXG6{x$5d-cYaqrB#UJ_g`_vsG%$ zJnvelHEhIk%7BkD(OkoDL?HrM z<+LPiQ-olgM1)66n-0`KSQ8@wbb|WUoa%-HD&nZdwDjXY`*hmO zoKvi1x_SGpfP0gId$>7^;#Iue^D7Mf)ck(D&GQ3n4^1PJ-HVJk{EtlR2$bHV5w)>1 zm+j%Tx6yuBJiE;C{Bf@~Y451Nm|Khv=vJ7?Fv+l6$myNOpt{~#{jF97wtub}BDFL{ z_}*f%Esv9pizf{bDA->H^VMhgkj2x6N|DlQJpwk*u2_?OiLiM!99!m7ewZtGbYG*- z-N&NB{nCBgHtg#-tzsxv7h|frsXh&g#L2ahP&i%*;UJ3z>nI5-flj{hbyiHBjQ4u^ zTT2dF#(!_Ct5dd+Ic!d?x*lSjyXPxFu4T8j2@-JxrnnM$6h07gvHkf}8!K1{X$4og zUWGL)vyy2ljt8g>O zH{Bs%1C51kH`hndhVnJuVYmRx(Qt#ZPEQ+rxuUmUgb7gF?RA8pucL9S?3(SWCdoen zQRA;N0)_koPlZ?qoqJMJ@l(EZgE@|e(s}@@@Z+rhm(A0v^#)~Zf|j!NUB!bsOw(WymyKt$ z<88xmcquuGTf-*UDRS*v9#N(jZ0H%$t3ux2M+spoC%uPKLnXe1&j5vv4o~1)bPi&A zX0r&9P4$SrAvm|hEt5J|9}GI^28z?jVA)t77oqq0 zq!e*)EokEc$a5i(NlNo-UYo>SRNW?S!@L5xIAkpaY`u!nI_FS3)+%I)^XzC~@N??( zaP1~d`;};WGvppM%|?Iv>Tm^c;uT|^=#L8Z3UoY&CqC)OM>)kI#~5MUD%ig4_hfVA z^`XVm=$lIP9*#%-dXGQ;!;}0q72NTgqI!L4tk6FqOdhq8aP;@>Ks@K1k&_+5=}|mK zO6&}R>KFd<{Xgb2%|V^V=HIyt?Dsl~<-awb3EA1&n*0xAp#LRkh4}XN}T@U?x`Mb6cz>Z zUF$x|{yLcMcHUi1jQ&D#1+x_e>-j2l{to;)NPH?>J{ZLLrioYe!2zqlU}9omV7hY$ z0*%aeLW+t~io(PM;UB#`B{?a%{3JI4RAFK|i#M$F2bz~A1B1{969glO3kg6KZ(^ti zl#nGj0je|rxd-6@_^4ufM99v@#=zG2zj(ye zsOZ>Xi=glvT6ecL*`_A5*h0>yHn+=0Bq0okNm*Qw3=cG0>ZE|@j$T@H8Z=p%nn}Eo za}$unza;`dLYDu^WECp-Di3C_RxPsH$B`OcPiLolPPe>HWsPAEpxGNUVi4DQS(7z!+5x? z#hs#IqHQK@)xH*~+ej7Qx_Ro@b@Xn=q#WgLE;gB>gbsS4cuc_ixMUbqaB7}~{Do0v zzJLs!XvL4Tny^(H*XqWepH$|0aJSEr(wl1%ks_b4e@Hztn1+>P-rPPmuuID2mk*JR zx-((kbD$Y_aVkze2?bKhxzRD&L2*DT&sxAM01u;jA)>rsMYd#ojr*dXF8;w&3qcEs3T< z?TZ0jQQNj^-a8^M`_6m7RE!WR`5du2yBcHtvO`>UPV5s-2dX7UKT&ZJuT?kzRj@ww zHK| z=sgwX2>*Sc_pR?^UeyEL zaen2k9Yz2EO#hFq;6JadTDU#Dl~-0ycRtB(O&$ajCB_ATV7$Z!3u!FXNk{+&YgDybh$h`;ee8C+ zGo%6jy?y;AczE9YIn90EVgLF01jh&Tw}>2qw7V;n9zULWGA|f2^rR^eqvqK>Tab+_ zc~U<)ntG4Gy0w2m^)5l4JtnXCGET`Wd{9~Tt3-Zi50lJMe&B3a7E#F?J+bm;mAPD1 zS3k7M-kOsu8q>tWBspjsm!jre`NVFicwKmdS7-97^N?M6#=;+e`-$$&=!o+t9+Qs zw&%86d^>*X4a8GZoReeqMOCR?ePhM?hbi#cG3r-vueW$)RdLA~W4HQ-M&3PGM_$iv z{w12STYR7O>z>p{nzTFVcO1;-n>A^-_J#{$m^FIqJQ(q{#`43y?3gy%W_I88&a?cW z6?2>a+H;T{1P*UmEqDBC@#PEj3Lvm4!EDG8Eb=$doV< zhfr3h{H`0rcM;6{gTaGWHij(wL*gfS{F!YJ*6<+xQ5c)}tELcZ}q%)z|IvE4<~qKY>sAgCFO<=}*EWpX(s)R}sw*$CsL9_$+T@Oty8b{C5zj=@=eaA!VskHK^5 zl>lZDVAjyIQ3a8qZmRfMH)ik!{R6FtgitHVSX7KH2P-0JWX>wbSBDW)j?9VFP(3p3 zD~R-vK`SvTBLr1Y3YMb|XcUM-7mAcoO)@cJ4T(hOjf$zZGBHXb7uxF#VG4;yk!tYc z2_)#eAPO908Fi)eV_)wGCs`R2LRHNR6_Hhb4VZ$+mW(2)N;&t59Z)6{I5d%$%(t8` zG6do>GC4vuV^@Y9GRs$oX)JScNKe8$o;dLEo84=-;27cA<(7>j-wRXgYnFt0deF@c z3&_wc3I&kK=iBiu3KNV+iXaum7pf!BlyMr;2?*QShmkVZE>LU=b0no$8=}eR)J7td zZ}T;%%S}R*s!_-*4vb~81=DK_@rwT`?-wjedpaXI=u)}-36ZN-6>%$7C;pOU)65p7 zwNgQ}Z@ecVGK<8+!cZ0wN9}>}57K*IGW*i86QhfeGCdZK;C{ zV{_*O=EX^0!iEzOg4D)HF4OU5gnbMJib&wtIEQ_HA|iu;B6M+~dki67U)ow*k}x(l zaEs&XES^K(8O~>+)!vB6ZyYM%&quyz72{G9VSoOxqm z>)SC4z(;z1eIrtkle<+64uCyW)Ns>OD|kV_-KAS`HT z*9wEp$qlcAB$R5*Q=BGU0W+`D~3^sNCEOY>X2~CsZCh<1=7OksG3&#DE z!T2}MkTp%9-rM9tGEpO{erNUaaTcpQKB#5fqg=D6*M9jnsu+{q0TZ}{ZCM0r^$h+4 zX4~>rJjIDMv^y6-vNZ3)vtoe9scUftqp9KT>h|Fk(}TdV$rK#K+N- zu<|@wc%f5RE?+azU|iei0f;<~8>Y=Zg}0(gGpz%7{Xncov_*D~v^bw0rytUs9^2>A zN8Q<@<`}zXlrS_J4NM3-Fs4_ZeZqsxb#y9ZLVNU{ ztgNXdKm<3z1xjPX;w(a?A(lv;5et}HC77{a(4E4qo#uiii1FB>)x%!{fshZ23Nz|9udr${#sB5wz%dvuyV_4WA=Mmg^*y-f~w@_1hHZtdp0*EVpd*{pu3Fxw{ zOcNscOGps7E;d*qk5*ugtIBh-KM~L6v@%C350lq{W^XClI0V~1-=cZwIt-Cd?EzXz z5Xc8Z5UpiZQ;q{8#}+>IEIHWqfs0o|73(Ho=*M9v{8jXe=;2tF#vg+T^6eW-K|{>lje)q^6S$zq7A{o4VH5L7-RFwU+oNZM>QQ2V ztWk`)xLo$kOCiw3g{>U?vOJc1%R`~Ci=&wWVlG&4FxDD>c4hMz(_Xfs#5XvNrRAK9 zKKlhwN=qKiqtLM!GeE~0Qppk%{)RJZB}Q-N(7f7^$WfP!H0&Us4Y`?~mX_OPD4bBA zCUND5fP)O441#IR>-xq-R88vkv!J{VG3eeiWC-|t%;y%*ob+HXTIJJjs*Z1z?hA67 zhsKlG+rt;`vE6Bu|3&e~{9xV>cU6>hlaJhg6Ovf`4*L0lmW? z9!RJldue7E>z}|oDeH-}WLbH3rDb#FZ-J69UPuCODyPvH*b5usu(9Jmhb+6?G;i6g z*^!{w8(2RXX(nZJ2}IQg1KY%xh!LD#$1p7uLpwx7ZB&=`R;=?1E1j;ew-i;Kz={ME z>k=yARt@J4F$Gfx$qLOZcDt!*Xn=0wV(J+o05xG`NNHh4T50YYnfQrCRNy~09_hhh z2+CMNrWfbF`iT^+$UcmlM9d#hPPIyWG_D_?@&HCOd>qFHXq@`oAAj*h(dAty1V_4(TX&^(UQVH)Vq?6b> z5Ut@2G7%a#*~`HWwM0vI-NlzYzWG%^2}}E{JYv9A7?}W}J9vK5+?x#lqOgo4-wF|R zVYnEf56sekAbH&{ zE%(kWaEJoW9yk(PY`HKGvR1)Vn%9`|eylbXCn*saf-Eg6=4IZqK07a|uIDB_ArV1- zNDc}N5q)g887BB^j@u6V2uj&r1N~XDH|Zb5d5qUi;xc-kPD&2yXk?B(?NkJ6o-1tw z{cM}aIGgS~1;^1~PfFfkqZl)8TFpRn?#*Jk-kJ`FC}rQ5B-eit?ZlX^7&u*leUvPn zbq$*yhCSOVkMHOfkcYI@D8TeJF|3l4GtIlW!L3@f{A64f;Fr;{VirzYz0?B3`lf7WwdRwcVG z3VJw%lPeUrDl*FX9{HlebV*?_Hj7)vY)oOHVG}w0&G`lN6JGN%n1Sv=cs2iV-UIfu zd32-_;_?8=fpV7D^+7o&ZokOcAwxq9mr5Kh$dfXj^OI4Cg$`XU|6CkT-?oLW7Der> zI^fsIjm$edFS5$nf%OxMXR*KdFa8;k!?@F-Uqq44D^43-Eh692$XtT(J#;Iw5jhsp zuCP--{le965T$izkpt_fuQJm`VLQdaP1K&HEwG*&NJtt${nYv~j3_JeV*MN}=~nnoFysB+E|9NqF4Aa&b@{2q;+qk558**V5?=$RUncqPz}b&R>@ov6sx* zlg2}r7dS8U9BioJ#r$Z^E+i;S2}P^R8$hS;VT@NWxnY}PY8_j-Wtp+qn;ir?4H;9@ zvRTvmjLvo;Yat=FvjX%BJ5<jIu1PPsw{F7!M%OC#UQF936b0*-TVp@F>}oL#9ls~c#pMYFbsS}v~f z(o=@5AWP0VSH^B+0z@(cy^t zIN1sNylpWdGx;@p%u|Mwky?JKa-5;bpR}4oB(l^3ARt#e_=Rwc0~riUL4*#6U`F%`_pI zrBYuFhi^|^?tvBuex`Rs$I|xnt@Prf3vG@KT5<^*=&mkb#KZ>}Z4;*}Qb#{UB+-Ph z6Ot&Q4|fU#AU=D^tA)(62dSnqvhviT=7lwaSAZd6~eI0 zqwU2%8Rc!0M6raHcjWbz*c~WSt|x+K1Y+@)(K;8T>5)zAM8TMU_l)?mlYTHKf4Uz6 z-N9--bowM%&k$oK_7!b|amiQWW+MvXIz{(8vD}~|+#Bw|f$S0{O@adGU~Zj7&2b}0 zB#uVNo^tNRr6j(hoj1uF=2%W@$h7uiJ$l`xk-T~SJBceRmG0Uo_Tel}Gn6gX%*4=K z*7cYwvPNC@95iVtP~fbs`yvEqYR3^gKQ(kB1kLN0bu)qrKQfnc>nc09ww1OP)@GJ2 zEA*A-)#cW;Hn!##_T|%LCJm7`z#A;&JmHp;i~ZPu0_;iT19) z6Z@n$^;=f+C~hAJ{`)cxqh0?W0DnM$zmg4cB{okp4z-AkAuw`uw=HT}p2VPrwwA^k zS!%3bR^LcI>DQ`QkKT{O?>%&K>~k{veb{6Sj2_8no>`!%eJO5M#aFucTKrEJ-w?L@@xiC^qg3&&E)IzA zZ0jvX;}l&U_D9K=f3J&!3ZPObOjo!f2HNS=3|ChaajDK1lHo`-zG=>rk>@{1agV~x zDczAS=FUksikN2)yq}CynS4+hckZd@ws8iUFXwtk!qH~^%u&*byo^I-JSPk9bCf!ujqBk(nqtThhXgRI`#V6@YA>-Qz z*MRH%WyYaQov*X6o7U;=l?P3ej_9VrJUNgzAJ!)WjxGaMS-NxS#0)wdH2F|Rw^ft} z)1(!Lnw0BX*XIdD8oGlay49vzlEQRSv#^~3kA@GcIB{O5Q=H+09SxW_2Sp9d%h0dY zty+vOq^TZ#$SSNaMISdZ{cT-*D#D(g4y{8^qMgbpU$H`7zogA0Q?AtW%x@U{J-q>+ zdHy>k?Y183`@Du9j%nI24&|NAf||y*`sB|=5(Xw4W1l8mI(`+9Ngqqf3i3J~iY@e^ zjOMqDc45+|2DXn)RD|4&!04(_zLM{^t$SOF+)eXVb%gRSKUcwwpuF}Fy%_=P>moGj zW|J65&Uw=HdKZ$lvFJ-_r5M{wy&n{4y1@&gdjO{KYf#f|k%_02M*OwH1hu8mC(x-kCH;kd)>Tl`9&t~?upktkh`Af1u; zR~tIn&BPUaM)}J5@|I4+cC*b@+tS=zFXO{i3u+n~m$uf+FH4T-iXB0ztK*+pOgaox zQmtRM{T^9fTiXTRewB=TG_}c$AtRFHjZw2I&q+PuXoQ4~ZB zt)s2IzG+o`Yimm@W-W&g*=(Oi8NpB6x}XVSX0EltbP?*p;fjBo`Gk; z&K&w9#ve3#>`_wYRa12tbRX*8I(@7WKY69k{n8IHwA9QzXEiiPF)Bd?AB^S_n~2u6 z)VHl7rK&#>a~$IWEbgkE@~hZL1OxJTwl76Ve)vdVpe${(zB9LVkp4tNOEFXk8$Nh^ z`M@!01w{1+yL=m4%x@FwtnWUByoOHqz15)3B!dp{Yof-TSZ&f-b1nAZUXk5W{gFC< zw_gscCCgcu_*^d;wM=>OLGEV|lasjq%`onEk$+@iGa!KO*sS@I)qJeLk%l35k))**+6V z&hcg?A5CqFpxV;cNqtfK?X{eM$oV`ybbVTGb+q(Fd;8)&GKA41Ny`?Or(IRrUT-KE z_4tDkWfbJX8^Blvlz@}2^Z>v`7kctNjZMclrz-Mpvxk?S~N6LJM*riNomU1f62@EDAksZmEJ!H>bn z&5%u{UEq$vsEW#}NhOL=AH5UCRA6z;ZWzm8Cyb-D#=9mUoSjgP<%zBe3+858G6t1< zpsJ%ECRJw+)i$$v#_Y+cy|=JwC7HQ-yI{(0n95-}R)*RuMfOU8t&+zdN~%3c+Gk0%|0UJFOR9Z;h}zdlwa=4iI5DZV(q7BD$f{Mij*7w2 zTVPg#&}m7eO-mweS`ul~B!KA>KqNuqv?Lm*CDAx7iNsUO z26$ACMg}oxGDaYOn#oK!OPu@QxDuzUB?gN(Ll&8sCEMUAY-u%H6xlLz543f-+Dp*N zEWHnw^~3VL6^7VgH!|_WjtW;t3|3UQR?;)R;1*DoZJ>yLIB6%GT!C7Aifh$wIF+N8 zdyHzQS@pWQW@aH?KEg{c(f7fq5}nLf);1`r&X((U?}9bBdP#Oa_;LM;p;<9FZ6~b7 z{qBbVPVT|UaWheXXazf5p?>Jy3G1XC!x7>8AQFS9Wlqq--itQ39vYzqa^OVR2xp*W zJ_F8`@2lY+xEI@F@HG4$avX{y%P|C2qs=}Qoy2RKb2#!fxB}jVtKi=_<2$&9IpG(q46bFP z;Cl3?H=rlHku|_gY#H3lys(w^!Y%Am*GzKF8rE( z3cq0o;4V%-fGvi*`FOa8Plw;~`LKg8hI{!ba32pqjQ2r5KOc7St6?|486M6P^^s@RS%2zZ0|I8L=3i6D#3)(G4$%FuW+vhS$WE z@VdAj-W0dPU&Q0^mUs)^7W?5Hr4-&(X2W~RDe$4v4gXXE@R70}K32|#Pn3({U&>YR znQ|+9p=^h*lviQD@;CTa`2xOEzJl+SgK*G+j@OaJ6vq(89l1<6Ml;PZiDf#bu`EX| z(;bUhwxgZpIM%W}=D}Uv4tcmYz&ep*8gd<2mn=PJmNFf==>2_cHDr^&X5DNJ&Z3f^ zorZp$N^3DD;j$FKl8~hy7DRcWQV81|aExOH>&2KP1LirZ*g9-eA*RGw7~>F)RVedW z1S5`2rJFfe6nmXW(R$X0GqRAb9=0CabhZJP)+u(9;~OE9ZA3hWLCHZBGEHThRCc<` z&XE7k#3#c)z{goAp%Wo9{Qwn(1mEZE2UQz2-xypt*kERW%l{VU9bhM@>|88-3md;> z#~gr>*q@h|c@W%?HOOq7Kqxt|TT|}Fe+(Cc!wt`{4af1vL-rxZ$EiLq|0rAh#p!!1 z5EOsG4s3Jad%Ectn)X0nN2P0hKWu286oZYMp%h=6s+Fn|Wfz=oxzKF~->=$%^90!i z7=e2TtN{0KDCDz37{-dg&5B_PD}kfgFezWO_io5x7vTOWRF6v#mM+9LjEtd*U4(nj z(WZ=IKVcUm^o??#`FD^nDY|5YMMs+%lU|B{m!W3McoP1LQb+Wx*aK%EJ!dvm?uN4% zG*8+MXEWFg<$w`C$35)6(fX30{E#cl} zz-10>L-PV%6=fK}T=FPfU9FTTmASdQ;Ti!m9YY;kU|5N=8-B(BJ#r2ef6lOD+rba0 zFJFdIzmTESFDa0t0oO99&L}~)VC;->>UGq%+2FCklM385K*yHF)*?T8U;?_aX&6Wx z%htgn)(1=2dRT@EdJ@|tXnS+|45uFH+fkthC?&*}nUenDYQ;!3NXs$2PL2vry``AZwbcDsu}ZV>X+F zUoQ#2fe5dXbT?1hhZ2BR{W`4Q$RHsHqtWyLI|~ik*=VZH!Q}J;G*lO&8NUdP^u=h{ zE|IiW7)x5T&N6A$kV7$~i$f*kN@@%PJ_Ilt8jI8%AhVTBO20+Q9BkpzV4(uto1#3| zq4I3836H~C+`)DY5T4!aK@(_PjWP%*OI69+5bEtVHOfe%l6x#zc8lsvmF)WmTGS*k z4-G)c)a;uEYWCiNnwc9sd!$P~ z#vV78nvVI52I;&Q!ytUGvAa2715zXLy z*PZyNqQbB3iR4-Y{2LC{juOW{m|NnA!CjBScKj!eP7Llw?HN&`JO=k{hQbo%QMiZf z$Rx2Fek))b=5Pwa+_4Rc_rP{s@80+{qrF7gL6G-WJ0!mMSIYGAff5HLcqo#m!V~Z$ zQcv$^FibF**og@i@H|j?J{0l-DCI>^$xC4}ACB4k2+Su(Lx5MnI$i~5^GR?4pA1*= zDR3>H3S0S6$f%<+sW}dI@@m+_XJLXe7oOzvU>~oAXLvn4%NNQ`S&eE@2t(Num>4N= zEqbV@*gllW0G!C4#x@7+LyUgMp25>cX#oXWZ(GXvHhb2zdT+DmjAQ^y&$AbB zdndyV_9FWOiUMu-WKb&)z;ueuS6Q|<8%kwLMl?;dXqss8ej@5M@?P>;1>T7KE0s9DZR+qcoJx~( zO&wlaiLT&b0ST)+g!;J`6y60n+-GBAuC-vUwP3Ck51y1`yn|V_;lQ6nB+#+I?h4l< z`LGu`QsH_uA0Cs1$MfL{S$HxZo|1)q`S7$X{4O7!k%iyq!?UvRTs}N63oqoui&#L# z`a=_<{t|`uCt=}b3hiHMp5%Hp27lZP3nt}e#^AMTrE(ITvY_VSj#OuCgK^cWRKV9A z55pTBqQueGfqL4u3*NjB{#>HUwGVXNru78s$(|PEF-BVwBajsvhvWgi?w7nC6t4b#OB;_4<7#Sag_C{)ISxUjHB0PIiN zTSlMLo6=rGs)O$w!){B9`Y_t>O$l*NisMm&$%Qy%-5%&rm? zjiO%~m?)fQhRqeGZXi|fF=(Xd`Dx6DD01G0Z!?&tcf#8Z!z}^+2;#CAiG37?^2cB} ze*(twr);rHg^AM;^nd@h0_sc(l7?e=q$VNuIkMV7>;#k51xbi4mlq`Wrm*8BMB!yb z;T6c|uiAKCkS3b=g8j!_;T6-Gu1Ku#S7rs0f0NGjeR&ir&ptQ9Z~MEzhYkxlC3$mLsDqSzd_9Q zA0}J-pT)VTDKsNYa7yV`Q0}F|7I~%gPoiE)P%jTm1V;HHA9PUw*`g2%L=hB=5*RLq z*@R_;MehiCb!TN?+0GC51FG7MC4&NYXfc)NO)0muvyP$LAK#p>umAs7yI` z4xMFJvOVxoM+NJLkA*1P4WFpCWI{SIF%g8oR7zCB5HT6XiK#Z-9B+{}o*iJbab*Ex z*mvZPC6VZF55SP*$o_jv9X6VA=+rowaXI~$l+#b8oF-&Ai*5}({qR`=L#eIec;rS6 zWQqAuD(Yc^SO8PRLK}Cc+G12>due`BD00xkr_IEt81eac9GA}}E?*EXiFKt(6eoZx zegs9L$+lMUA>v_F{=<^~pTSA@rXl?#B>fa5eHD`4iKKgx^sXZ$ozbr((w|k}q6v|c zL6hiCcUHj#LNG#v3sEpBXu3(JX^j=G|4REZw!-yg489^4|Fxu~3e)ueacIPbZy1K# zlW_e0CVYG=M}A0Enct$nKhQ|+Rg~d5USKbHT#o+tKO4q@dJT9QNe8$X* zLKSXSRH_K0l98)zmo~!S-+CC1#W3S-u5x-#~_xgDkbOqFSl%*#wqkim1Rm+A-z+PgbA1#>C$I(KnBmI7%A>%M;(CCbU1F)WBT!h zDa?1^6k_2FdEK{SPN`!nWVjCQD9zQjf{FsMqii$irHZUDqoT?R-@#JOkHizG`F(={4XgTel*Ks1rkWv79ZCc>!bF4t`WRr!3x8W^`@FE-t&uwt_=!uPDWi++8pv zVQ{23Rf?cg83r?z;V?@X0do|$O>`FWV&jV;sOKe8bcRC(A7**eYzqH5D?Wgz79%yh z)Uw|j&6C?6&4YQRfEba zlT1;Sl@=~A&4!Cr8Wfc>*u~0{@<4;GUK_hy)=DmOB|G#<7%->hR_TE7Md?e+t;tr% zodRL_KnUj_`bd{gu}tK=fo69EOFfxUE(S%p1hSP&4{3TC{o2h+Q4Ak3TEfNXeK#A) zz*xYI32x;h7}+xv!OE1=Tjfez>!-NZ)u`y#*!VlzAmW8EsBJ`ewr zaG7DLy4}VWrLyY2bO&sFCWa%%8RccjP+mpr z`uyv1PSJ22>&K%bam zQ>q^P9rfTJkfnTpdhp>9-eT~2zQDwHzPZJ85j(4tzNBE~d;ry-*tU6ywar7=1*YsS z9E5{x;y@05o|c1)(sGcePX0122OH8$KTnm|{V1{Drk7axWirDM;RH+643CWKDEEVl zK(PcOFd8_QA2{$vHc4&s_&LbAyQmgfe6JXit*j2Hw7Az&m4kOUD? zATHRqNCF*tj@*{q^ zo~bu@)Sc>$OudPzH#7AXrrxTnKlUI~-NDqK@ZX;@^)~){J1=;Lsotsn%vA4Eck$HS zx_S>&cYD-()%y(fe)Rzl@~aQ>?1%W}Zl*rW)Sol;5vD%M0grJUkMqkOetCkaPcro> zo_w0A&v?{l)#sS{3#R^(slQ_C^Gtn#slR6Gi%flqslQ?B%S?TRslR3F@0bF>SDE@6 zQ(tH58y@J)@A>6TbrJNIsc-4(A3W$tbq7cOHdEhW>bv~@k4$}!gZ{*CZs#@LXX>As z`WL2t;6ab8e`V_5IP~vK{gA02G4&rz{g|o$Wa__|`fsLw!qorp{7?DiGhO{$SND3* zI?k>DO{EU<^GMbSwj06}N3#=pK7#YuhConRRkx9@85@e*5gC;W-Fdf3k6rD`=*pjTgRiIHYTS{PZu$Vx_5G1AIN8zb$EtY+jGM%FNLEF)_fIgXKaj2sWL zN=`7*W8_4gbm-(HM#7A&XQUHGfpjqvVWgXp4UBALB+AIijBH}0hml@JVvO`L($B~# zobWhDGK*glCP|V3lWZni_+=}{w2hHd899xS(;4{+BWE!3RYtzX$k!P;laaF++0Mu} z7&)7fZ!+>NM$Td6Tt>dl$afg|E+gM#nN2T){baCBIz7FIO{i4I|ew@;FmfFqqaQJHJtH^pYC9RZk&&AixtY^=3nRBO z@?%DR!pKhfi;=q-xrdS6y!gG0+{e3nzfK-tNZ2){haFOTudhK@@qz3 zWCSGRH;lZ@$SXSetp_hqckl*($H=RUyvE4ujJ(0f?-_ZM)AJU;{DG0T8F`11cNzI3 zBkwWtCq~|9>!`70xTW909Qe8~Cp5hMR#8oQ9q+4jE-h>45I-?$1*yO(eaElt0bXal258C}NcQH(Y+dNiZU8Es;;nb8(TS1{!-yxK}&7+u9L zt^Cr)FYS!3_RwSK8eMtLLyx6v7+uTgag45G^ms;3VDv;rI~YBQ(J-Uy8SP}Wi_r+9 z-HdKvbR(ltMo(sR6Qezh_A(k{w2#q#Mo$4Dp>cjmFq-6z4KTWy(JhQ_Wpo>(r!smP zqo?x{U*VTC82u`vUt{#^FdgZcjGo2lc1FL!=-G^ZlhJQ6dJd!KGWu;szr*Nv8T}rk z=P`OdqZcrGA*0`C^dd$tX7mz9FJ<%xj9$j*<&0jz=#`9K#pu0MjQ)_(9gJSb z=#Ln^p3xf^-O1>UjNZiP&5Yi{=&g+Yn9-jw`cs|WrqkOoVw)n{w)Dlj5*YcKP7ZGl z&+G}uHq2~G#-p(f^D)Y+?~5gp;aKvRaL+&lBTr{vEEefZM*CtIRWC2W^=e7@MuRwW6|V7jAoY~7zq`} zU_|Qsx*{BFG!|(Y=v^O)xAP`B1Nu6{J;#LOQ9*(PlH|rH&@gud?JNlc?cqeEIg$+X zG!RNSyP&NNkz{jtYh$b{vUPc68{kvRE1>r(V1h#3@xEU8NhEud7!}Lj@;2I%;bf#Y z5=#OmC7wvjYmFoZdXjAso|gv&J2wGq1kGSA#OU6k(>r0n8n$*u`g!LQI{g{&SCY~a z?u|4>VjGehF&Y!@=~)@?>x^^_K;P=(k$M2g-UFG(VN?S50yWQUi}V09Wwr*$R<||* zVdWLsq{rm>iAbEc2Bbt2t&wooidfG!V0LVvr$^xHizg#pM@2UPC57q0roJs0`O{%_ zN$6}G_*9e$Z-{jPsnDW54$!BrfzG6CJTN%pm`FS!aC zGbC$?CGoy~yGV&$L;~u1qTz&KhnNg2dj=9MeX$luHYWHL6ili@3}g|e2Q6=G0@0>TjSx?4Y6c=TT^6nqz4MQMoi{5#z1mGP=QTFOqseUzv5nzar?4tZ!=2F{0Kp7#25JBhAKe$_eRTT4vAHt>DTen( zVSwCuT$Q$UZjAJX+krx6(8|8K-$}))LvU2E=#_9Q?s$gzZi%Gc`*~(aoUTH>Bfo zbgk8)tYilV7s{kN3!cG*XDKw8@@d%`%SO60wN~~e1T50E1ZG__k~M2}e^;1ijdmC# zX6VwsxSiuvYU4JcE9G>!$8BK!DFdM1BS2MsUoQ-PG?6|b-6a~fMiYE8kIt6a7#j-l zs)4YyHeGH-U@JJ7nNC>{X*+v$Obk^)+I<~YzfKz~`XjOWfq0@Xo~Y}L_ay*jFU%2_ zKn*I<+Sk*w9^5zA*zq!s@0WpS%5a5JxB}A6TO5srL65*JjfZ<|e{ZzR<5nvpr^Lz; zYR>HZ-9#3;yzC6Z2=RJps}P{rg5VQNUyynbQQB_#3AYB8aKqaZfVSD*c%a^ zfp9Ll3M?PIUdg(I!BAL9tOwmSD0lGy_m1Z4>K~+FxYb!x7W^ZDRAgV_>77y*xi%7_ zyfU1GnahW?-z~uoxVgOXze<3~*SpT@rpVn}$0<7TAp1OGA__Yl#pHCf<6t{F;#P4K z+*O#V{h;dW;v2XN&1GWU(J&j51N~x|yl&lM@UO%14J)EuB1ppNY!-2bJbA;biA+P@ ziR>vdBfp|>1_W7wB2^f_Ev_^V3 z0cIi@cl9FyO^lpwZ&M02X#i7q|*Gf#tPwt>r+`x~w52yFgt$9^U5Q z;A|EU3kT;`LY5XutF#^)=mlya#|*pqU+8YDsZX?2;3{EP@3f^8cY~#0ml?+C1YI$6 zX*AN)#YcKG;Eg6?mbbq;wkg)PC8jGM=;Q&NOx5XKFnoO7DAX~Ry@M09ENmJ=_Oyhh z@%27#LDxf%JfH?Gj}xeIqGeFF(^~cDop$6*2Gi2!3r$M?c^pTbo7D0l+MhqN*)>FM z51%z{mMEJkm)=?@wA-}v(TONn#x}lOGd7yA|DH*Z`nIyOISa zkM1}#O%D$wVO7!zsiXtrDUdIjN=nA{Z?HJn73tm_hIyIS1rw|{+_NOQAgt=U;!}n;!fp+N zVFYnK5DNUY<3a?|Ko5(?Y>SS;JMpZKY>3)EDC>_$HghMJD~7HvXx816Y;9-6nK|K< zj|Eq4DV8nXw#*qfkUU-h@(1{+@HkFt?4h<`7tq!3=3(TNfpCvSq$kl6PHePp2uH#R zx7Y-3)`&DrMF!!VY@mYk2iRmWoBNE5BZ(xqs;O8TMlA=a!y1npV$#zs8zXU$4w~rf zQp-DmJgAd&BB#{$rj%xBjeopZtU$BLEVO}@>k}Z`Cs!dzJyLA@c|L}4qJO5 ztQ&~44Do=-wie~ zx*?V-ZvmY0*1c6;6HZV)cw(`!)sp9iXqCZ%9KW->_ z*9KzIQ~1`H8SV#1Z7Z;nhdNl&@}MxPIp9fbDLyK2z=(h>iBMbIQWP{A>mL9H7*2-J z?wlw-@nj55jqnYTJg10Uu{x1Lrw`Kh5ors@56XtMcjrKy4;2WT+3CJ32E!slJA5DJ zm}nv@IL^T`Of(4G7y}KLOaqVZOM=2kWWi(QWI<)+WWnYeaPTaFTAd<(?CWw+xPVco zb_(b$kQaxOof|EhxP6W!S1)N#9K86fYaBv+^1Gw)L~<2a1WO^0N<@IkU2X^;nlvX) zS=T6}qpqtEJ7UD?rYXD)5~)gSNM0tPX*A%hjgY48-6JL3`PzrCI5#49rVMfWZx zJEF74+L~3%x&2f&a`V^LHxTcP@Qp8wCJ(!3TE)?NmC5SWUS)zZ(W^}2mvPE?Ksc{z z7IXkaZ!%H8e59#zyFMU{<@1;Li zug0h}V>uk%>Fqz^Nzm^R%uo%s>DN3hD5Mi~Gh76;*DTZ}}s0zUqJr{MNu^=eF48|m?xZxBn za7H}sRTjX&DM#|lB4xgi@@klfE9FqZ0D0*%3e3_mDM+v-oQ!Uc1m$+NPM`JC=Xeo3 z8RKQ)^`I3);7x|Wl@5hBK$Q(J?L%Pmz|4fWxrJKdw?l0BhIkx$OE}&YS}$VIq4j-z zJ&|xM)F~8AsIzAPIuH+mlejI^WodzsW2{oCM5wDT6cIaS@YCNDj>bYDH3IdkcK7T|gCF`v#IB+5OGo&Vhm6 z5O8vRA9QT99XdNTygmVZ?1KvkcnCT!FV&&W2zYcr7|-kMO9BUg$&m!_bf~+huP+Y0 z*uej0&kFVSb%pw)p?<#a9*T#%qG3)~-vIC^0iIciqfVRxBgWAu;{&ly;gmFm6P?j0 z9|F#J4h;2la=!OOx*;jT$e|wSZZGdWDF0Ag+=vMfN(^w#%}E^Kl|b9uJOUHq3}Lie z@KY{j%(S~ca2>cs4Z$zpXNPg$CRh!>ecio%F=$;Rw?rbFWNI6Da-of2K0=^22B4}e zC9a}stZz#Q)>CmVGtzQ~L~ULXY-5PG0}fGdf0)}!d^|=7Wehyi`nvW|N`s{5wbdWh&+-fxusR(<``VS6;ge7z$ z*eNP?Rf#)Zv(wSnomKHjkE5D7C1t~)OLd|@CU82{r5)%`8G`=oN*|C*&F*m2Z9%;B zdHMp(m~^WVY-(KI5cDedD7)>v)Od(Ij1CK~XkF6K8eF_~uy|xjgy3FnZ4xvm)VyeT z$r}v*-w53zM~JeDM{b$GXi3I69+WJ=tj-)Uo9ENA@jM%gzx}^qv5hAOXA3ep>s7B% zuk+Rmxb|3aX~9aYYOGG))aH%i52E#ZFs&T@z%|*19E)$AYTne5hN@LAu2X zaBnR9OB$B)Ly@bRI$TW@SoaO>jm<#t>cy}GtUs!*wPQtnJB(Y0-BJOJcVkOkQ^(2` zZH?`M3bV1TBh_ABnkodNY7M+Il|#;u$`tqw+;fvR;rIp-fe%S9Qe=o!obS%S$W>b+ z0R@HTNZt1GZ4vvnr^m(=gh~qrRkGzIt*RU7LV!_yW`%>o@=a?_1hd%&DTl*&-Pu=E z!>Uq8OIj>mkQ88yLaAAs8kQ7}%(?rEjJbP21DS0czdSn!vC`sScE)7(zckhVAv>*G zz4X!-=}T~H74y>Ha1(?(z?p&KUivc6^`si{(pTtjd4S96E8kB@u>-Wrkb8+-Z~V?n zU*(Qce){g6m%heVny+)qXu5djrEk#R>+~-E`=*m6IOnBrajz^too~Vgo8zT_pu2f< zZ$nSk!yotk`k}t`;l*KgoxTI>Tl%h7J(>Pdr|)^`pXgIw`aXRZ%1+@9+@B%Q2Y*Q~ z{R?=3^aJ`=V67!9;i_;lDflW<&^T~j3>GIdCCL~~hC3(`kFEy?7FND;+(a!o=@&qi zDMFYf(t+OK!r-jb5IRsE(6^f6+gq~z!K-kg&liIq>x5>!^l$X+9MYToumkgNU1aAtNpnDTvN?Ul#;#PK9+uFAFhGyBBGADa;M)om{4Qo=l z(TrU22m{Y<08=123TYV4?43yVg%imGByUAsTYDyvnPkX9LlYwaxf%pSD_6AEwXPkq zwNweGDOsXzaEZ2tRjV6X>a%e+Rmf)UV1gYMc87Zsk?b7Hq~D@CgJ_%73`$+}WsqkP zC83=TcJL$|Xtxbrx}vqAaal_+z3pB*yBU0r*2cP~#^V~6*qwFtH8nP_duM*}7Kiq$ zvl`lAOsef2AHXV1dd>@iw$Clpl(M#~CYv#R4=BATuYvnskl<%D_|w)Fpf zRWbCWOQST>+uz|dG7P07P%zWGWfF~*hk4+kqi-Nt?o$17+c{~u zcZqV||B8x=Ab-9oSaw>ut&rBunsN9E(k!T2zJ)2oKm8L;?F2`j9v(unY+=6fo>)CR5=$mHVHOP4mZ zI)R=1B@OkB&2>#3OB$CowzmPGWp#504>omJL8U?`9+V0PdE4q&tQ54uKs&e6+Cz)- zwp~Vs3ffkzZmn-fi#j#7b=0kHhuK*Vv#X({U93+*C`Vb`tCWHR19bMFIFd8}LfICZ z7EtbAiOJL z+AgAD&U#cXT?egEoi+w~xdJw9cnB*$OP?JZBFT=(*8X^TSERct+_gRm?y5`*)Dlrw zBHkJ5N_4u_wv4mzeVSC%Mf5s{Hyq5hd63;5tjJo=y`blHQ#_Hu=Iphs(2Y|;MhzAO zlU2iSad6zg8_u81)?6%04n^kA#w&A#jT^D^pF-*wy#J2- zpRqmDl?n~!a{tq!Exba@3M;M?O?1Wk`uih%EikGA#KUcKl`@xulG1$#F>ABWKxfKi zpClujBa$|2^DftPv6qE5zYjpT4@jc_%VPXrm)$QTuvtV3<1_w8k|J4jKynZ)TVH0u zq%?dfarj>kb2wv|hZq3#$^U2oY`;(rf_;}c5IM&nV+cZ-+#eJ>cI|9t^j!LKRk!wz$Y37WL1x40DMq@LixCxl!-zy<$+`SoH!yQ^xToAp|3jY^kE+C@{3tHZpT|$+ zMmI>1mwrk=^U}}xWiR~Hy>uTxdsX+U(*1DGV6|HuvLGCU#9@E&=unf{(aLz=AaNlsv zFb-I}D&E(Vf{BAroZn7DaQWcEahYIfDUt}rGr?KpV2JotYVjtX{NT#~H(ahYT~1u8 zya*gD5J7{%GBu=yEX+8{0814-;~<#%|79LNJ3>V@P&JT<48^-_>VqG>3J!#_cV1vi zY)gpVxOzKmFVi}dwcoZ#qyh*FoS;IAT1zMST#E=RhpU}FOYLZ~mtJ*=+8|W`zoYv# zWN#umN9Hkl;((;?zbk8BPM|Uwc+Nq~!!S}X!eP&(W!zw^5wr)^t6}=IS5uVfUQN}A zSEHKd)pWYst1*5tG!H1_1zyeMMgq@-AzZn7aZ_VGBpO@V8d_mRtjWGYV)aUXLIV;@ z0KyZjy>)dEX2Jr7NS;@8_-8<#C>;2OT+*oOMmyc}KKR>!rw1}kn+ z(UgfG4+TTP)h)|gR;+0O8BIygQQ^eK=5W6kNYCRttMM&ety_~~tzIo2?A_AEZ$-uu zp2DZW-&efqOm&u5JzT97CsbDO6@T8!wuaS9R&>Z%1jg45+Aj{eT#TS&YO~3rHG;|D zh?bz8$w3pgB705uqS&fA#L8FJF1Pv+trBN#ts@TN&Yg}XtS5;=!L)yacW0|QfC^aG zgkxPI*jFy->IC1ErN((v?3T4B^(!1`jLQ(BdDm_n$kD+K6{Gfiu5q* znFpr|2Av|e;L%|WPiB_Y8-Dy>&cEz~0r~SYr?%C+yUomoQrIhV2x7{=g~GFKWhP{5 zL5gpZ#Apg?i35K+A%ouwWHHAVO?Av=4$=h&z(rZlJ&?{MKl7j_`H7T2fhtj&59S0z z&`m_fZb8a0L5Azx8n5NZl-M&^-mtc#tzlJ&^TCB|<#M@$@&8Zc|LsH`F0L1qY>8S7 zb@w|%1I#@bc}hLrG1AQ{ZcT@lL7qFb9P(qT4u9No$md>mS;VL|+cZnfG4a56hjl(| zla&CrcO)XGfazSh-02WEZOhYw?_T>}hTkDO{kZ4Sw8~2}Dlbj1yfnSCZgmdONT;Af zntxMz2G*Uvbh%xArJc%K!X1Rxy2Xu6jqPi(x-F|G3A<wa#=cJgfN-acqG$F({y*Xrn{Y{yEB{a&eC-DmhFbS-3?oL_9kI>nFF;> zAVm6kMAhkMw9}Olk923`xmJo%iHesKtQNJ((xjrSwl*HwAabpcv{eBRXVei<^~~bj zIh0MO#hNT=cUGuddArM|L+7Lnq6n$gZ6TACrH*CHP7`knSe*u3lqp&+2gEH}8F063 zs=EM?B!xAj-RJqcegb$uFC84_&OtG4P* z6-qfp6F)(uO7bf>Y*Bk{>#RTvPLFG z2~+7v!vY&p?SdGNMS!$3t;B1%?R_+(-v#b>zQgUw5Tv*XalPSz@A#BkWirlrb8*A7yz~`qlvgXDPkFUM7$wceFGb27FqpGpFm>fQ zuU1UogkMZf|8GaWIC++|%au}s$b}>%&stYx2@j^I?hMDon;NtAGR2NQv7x=rMc|C! z>=T01BqQvav#q1mOUi<-{+89rTiNBo$HalUy0-d`6|Egh8rtf`z>6W0Z|M@m*GX2u zdNY;XAKoBySJo|SXv@wVaS%y#pkJ6Bx9#Wa>Bc6|AszKAT9(M8f(IN3{l65>lDd?S&sFF~aH1_esL_W#^g zi6qkAD6!Y9nNosL&oDR#wP!oEL!CGj4q~)F<;w~HFty)y5o=_8I+|LT+XKFC)(NgW zdqv)9Kc+io=)It`4q~rIuqQJonzjv;*2&yG>-#cR;~;DX4`gSz8vK<88TynTFwbT* z_}XZY$>0wlh{70A>rs^abc4a8Rqp8eV1t3tR@s)op3(-v#x~hm(NZclE85F#W1K@| zmVL3P$_V{;yBH(JX^jk-W@|H={wkMp@hTTfK5bw{*$@pacLpxqjtp-`vRe`U1kIPX zBN)vK9(2{QPIt0ot~=mu&g@&9R%xL(7f7w?#G2CQ2u6peqDJo7B8AXB88QVh=%xSB z{9cX1(g3US&Co${_#f78+}q@QcKd)fSXiY{%42pi+Ov$-(V0Zx!)F(Ga zV!`TJv#Ns;{tytPW(Rr1l`kJ*lsn|PM%S44tv}g)g0nm+{i-s{L*_?kp>7<^W_(j3 zYrEFd45H;=xz%r8&a0Kse{;pKg=g8FTOj7TD2>splFZrgPmn2|7P6gl@uu1!AL6tp z3MynB!4<1(JWJNG5ggF_gRIJ!`JL{P2ow>v=3LZ+-D}wsn?e zgLVOQyr`N2b8iZYhaj_p3mRXEnEZ`;#i@dVgr4Z8NYDnSD6_zoLFxXk-{uyFG%2(N z&r2WBMuRrC9-e8=Ja?3Srm)m`j5Zz4pQXz3^gl*r+3=+zEe<|dVeuy#F=|VzusK^p z?twWdGByuG1{HHZlM&JXG9#kHP{8bmK4D#+R;i71Nj}h&PF?4JnYzwlsPnp?xy7h8 z+xV7$nKwpMU=$u+Xwo`2m`MB4?ICi-b9UgI41Q7@=FRZZpFZtFBcjrxCbL0H$|{GK zvf&yWBtn@Dny#mxhnQDiZlFNXOdEb)4Hg@#-)-5t@};Q>kBpixB{!oo9-ALR4hFr2 z#d<7s#A0I?AC>V8{t#j?()Naw8oPLY`lI@p^#>{B;hP(344mS=!S4^q#L;$OO}6D~ zGB52-A(=|H8^*YB(91$HOZ7sj>I454ZQ3K*E7qSZJ}TlH{0?U~(0NTYEVNQ3)86fy zpZ+NqyLQ?qJb+CH@{L|t6>ki0j@TbojKtGE!w7|j^bcb%-)CeIhI zX}2FxA0=OR?P7&DvNh5Pi|ADYkvR0Nd}!Q*z7oJ6jscV2+0)10CR&p1HOb4`F;bGi zo(V&}L|KpmBe%Mx;n(<2E@{{s= zUyVaByitA~WXWP{T;x}jp>PI%`6glc`4(pg$BR$3iqKdWj5=4RfK;MRfUJyg0L7=b zoX>hWFBuTu)<|T~E#+MZN=X*AB0v#-l(n7<*O zzsGC{jvYM&92(Bs7)~_z#Ut(3mmUl*I_>hs|EhRtEhjDa7gOBdQ%e6Fv(IzW-}!{u9_BU;rY zzeT|LymFaLkI&YmYyL)^Pm`+~gr-U_@ATa-XSWndmu6dBKHN8?i z;Yoc234~RA6$EG~EO&qW!TP3m8i04yQKuzo#houDfe?ZywFt$di-^UFZYex%onijw zeep@)M)^gImHhqH)~BlZRE{S4d&1k~Cn7kJi{;z80h4%7JIAE;4Y(>w|$K9Y&H=!O{o@B+6FvB*$b35IH{GZR{P+<-H}nkD?}tSJtre}{pTDkaKj zgb+nzl`%>HVP!1bDX0<^^KU8eH2=DS_?;wv$MToC!0%2dJ6Smdu2bOdSg51GZ*k?_ z2v@3iA%$Pm%IS9@a=WNK6|N=F4nm_5L1oB5TC${16}Ag|y3%;nSOTqS*q%EQry(6KOtA^L@x%dpGj> z@^+#85d8T@!DSaJXyT=Jfh!f7z8m=z)G}i?D#GY;6bS7`#Tea({A+zB_n^^tpfPu& zz(bWY$ZqIAf{sDSabSW(F;2{_K$R-`xEK|{bvn{f74&T;3ZQB<70m_6Jb=`qW#|aB z0xdvm&_Z+)T7PpRj zP>FIFlq4{s^MLDz+gyhtlIva2QRQ;9HjT&Qn>ddr49UtO!NiGfCi*7rMnTR+C4-9! z=}Pgj8hPQm9JtT|d|U~9Y)9kKG0>AWCa6L)zZ7#@Iif`jl zot2t`4!3v|LbDwnb-8%tM%mtg=>WH@{AiaVN zugta3yKx*b0vy|N;8>t6v~W~gIG7xO(%UjHZFgZ}Suhf3`~b) z_U`f=nCcu%b78o6DUXo3DIjy1xUP5M@?^oacrdrsOdPl6;CB58aNL&z#}Ws}GOJHM zr%#t7o$N%!r9>poJuaL+m!MLl6fDAN=o_42oMDlu`le=%;0rE%Y8D!o4kZiIGBLfL zV+5CFA*U=8$@@9TIm$s&Wg#K=pz=&C|8ij=S+F#M9>eLR6d0MKw|_7xQ0Zu=sx$7H z@`sJV;|_I}=av}k&ml2QBfwFb14r`+a8%{M(J}%Yhv&etBDc=NOLE{?IRZLX4u`>sb zAB=!6cjdrw*$8kvnghq>&gRq5efdQW99N70$M16BxYEHf)51Y3ccJ;2Xx??9p;^#e zH3CvT%t6Z4SxGq}6V2y2NVz6ADOAfr%C#fFQJ4eA4;>s%aKBJnl!;|>j^O@|ELegl z6U&?&SgsqGSo@<9u%#&nTdp4&DXVgja>K~b9G?Tt&XJ)B=Rk9#gQmsOltqrF zmG4 za$9cGL!Zxq<96i^3&$2Krd~F#fL(*wIC?FjDwre zzJm^-@1m*nJy&GC%!!MZDR=U?sE`y55fl5*H~ApEQ67LJ=>X7Lzv!+q$;wRfXM&2q20?s8Nj#%Qq^BTvXzzY8r{6Y@2P zAD%UR7h39u?Lx~^TOt#Y4rEM6Obelj+6**Rn~6f&EOfXw8!ghRUBT@JXAm2dd&L~ooiOMRX{9Kzkl^%1>hCwlBDw)nyGM%Yp%Bdt$ zPjE8RCe`CGnM9*`cLV0h2;5d$JereuHJ`^TkAWa zkQCjGPHYS4MBH~c_f*`U0o{~pHeUdGoMuLe`(Ee1K-|Zi`$BQw z=iK|meSZpJkpP@x0bGjfU0=M`a4Gol_LMRBlu1}q#@LA#x-4~ip=7F1AT49S&Pao9 zwxLzz~X~)*JAOGntps z%7E8*>TYxz0P`Sux=iNtIyOoH{fdG(<}=^|fUnvBXk{1rTJ0!+eSJ4NQ$gRVDS-4@ zBEPl}lG`n?57OU|U>MJ{*9KrPzgb&sPY-{fco+KCWoT@`e;+z$Ex$YWZuITl=sOBp zvvdDDxV8ike0Mkc9v~PU7`+Gi0;6}M^DufCoe%$OOK|NNC~<)-5eNi$iGaJrn1Fvb zx)7t9vAA{|6#c#|IzBLd59$yCa?vhy@nyja(1pe2K+lh{FAeX}b+6jRP4?cj- zsU4@*O!QBLn;k&*IR8XJ_yqsNnRlZfv~8b=f$YGz2W!R#3VoLeL74`r%SCEDq^=Mt zAEd5?)MeJblye*6IVlAJ>qKe(lmv^i^X&=g=8VmQd3#JfQSDS1xB?6 zSYU!2Ftuiae}aGP4jh%;nHZSJyE9RAXQJp%$sSY^m?%gKl=vr9b96h=6bob@)4mR5 z%s+vgvyCj+zUu|&483O3PBhB}zf8g@hmYa#A_>1iz%>R)CJGk% zC)r&Yw+9u#C~``6)&zH=;(*@|-MLYLVLwN}0u$5N986>L#B??XQ*53n*gR3Nd7@zR zM8W2X8El?tvl*Bm+01*M$`zcRXmfg^rck{SfP9GK+$i8aZCa=1$arF^(c z#c-F3;V#vn*iVIafg8bk&F)(1Fl;RylC7nJt)+skrGl-cf~}<)Y%NVmZ)t|~mP($M z+B_|_)y-7iyKxwCE*E38^RpMY!sGx`9#97->|u0UKo79p=yo;bi7A((8^FbQ3VQc6 zGPGyFBYO@NX}>_@wO_%~;dyj~_5y0sevOXTUPPO;m(Z!&Z_u~3m(dm4E9e&Ox9C3Y zcjy`IRrIR%8u~zc9et#|ffeod*r&aTCu?uvYV8krvGz7@)84^d+MjU0_Gg^bKEPko z{)#Wt{)VsD{*E8iKEf|*|GvT;yRcFfi zx~W{O=P6g~`N~cDDCJJQP zP><7t>Ir(Ox>293_UebIr|VPIujLK-JeTI6MUZviv&r$d2 zbJbV$8udN>F!k^HJoPjEaANB7NTGfNDbW{^dVMiDTCXQ7^d)4q-ayvrOUXuk8QG#A zMZT{$k{|0wlRNe0WVhZ#9@3l1<9Z8uNnb%;)mM@?^;P6Uy_I~Tw~;UO)s*RLsZU== z1N!lFqJ9FMqMt}B^^@pKJxmwtowQSr&~Ck(Zq+x?GxUx0d_77p(NCr~>YL~-dM~|C z@23yzr_ks01bssvpr7fRwPJmXHdf!N1@&#(H2qX9q@Si8p`WfT*1w`H)6dY3)4!^P z^{;6g^)t1&zE<0+pRHY>e@nYqKS%qaey(=6{vGXQ{kz(m`uDWI=;vww(l5}lexc6v z@9TN`MS78bu^!Mb(WmK`>WAt-&{ye~>6`S+^;7gK^ey_8`d9R;^t1Gc7%&)L+(b)_CD1Xs$Gm1E6+n~6SOzcC&~-TOjt_)1%06WTA2;4KS%@0 zi^@wVPkD;wE5CtMzVaz~LwOleqf|;>P+kFi1!@6#LisIVDOAUk`;^}S%%_%-+mu%U zR-{&w>y_7(*HN)LpIoWDq5K~C)f336%A3kts6^dJ`jkH?Z==!bSIM!;I{+J_o=cjQ zcL5eqcamAk9|7N3^=2|dc~AKh8mHbxCM)kl?s)Fh+e-vUSt}VxSt}VxSt}VxiIt2< zJt0;>ME{raXQ-i}BK?obUz87!j>hY+D}M$0m~srgPL6_dG3`?R2L1IYSJQRk!4y-u ziLMk6rg-^!2p@yW_98Fdhu7%J-*x4~y@)@tGsW*LkILZI{{=AM; z;C(-<)pnv=e0M?3UA4@2cdh1%MI37TIQMX$nsE%f`Q=`IxsPA&=a&akp@y(46f$eL z+7D(_EFWC>A*ZlYZs>r{!`T8l-$*O+b303|VSW}M;1jppfgTAEKdau29_3EdW3ZAj z_Mq7TBcNNL$7?-lSoU!GJUsP;jc+>xKl-+`Qcq@!kOVXf%0z^OWkg6~XdKMU-y*O6 zDk{)lL&c1sQl_CJ8AD5%7ah&=Pz#%lT3IzZke1g=Bl?^z#{t%i zC$bhim#x4@vQ>B$YsJT~cHG5QLCy>(7cL64I_c*B*bgl9qNHN@ng370m^59iyj`EpOiVS=hY7@Gaarty&ERWd1 z3rJbP3rKx##aJFu_JYnM=x^vntBqFNZ_#oz-YRLqyFk})eZ)irW*zc;fsW*l1;XEd zkhUK+f}1TK6tw=M^O19d(7gR<3St=rT=|uI(FD*1O`jo}9=h45e1Yr-jfjZ9uu6)7 znx``2HtddJA2cF>X}`pTUzR~m^qFe{|H${W6$*St-0Qw)VTL|eOU7xg*d5{W^$Saq zNE-B)T*!p{{mMx_Zg#bJqoCeks#l!;jgKFJXLqd^D} z%my!e5EZb8(0KMR3bIGg6!s{pV2{BBcpOF99<-S~i7sMKqnp_?=*R3A=yvu?w2S=; zJwZV^>hV(ds=# zON6P%V1|wmrd~m%s9ZQhYFY;ry92ltIsomUOF?7qMz3J>0D8Phq<@RiZuC2hn$?9s z+N*rM<)1!byNcoNH6D<7ylv}z0Uj2g-eE0Kts#!zhQM>T{vMn=;SiahFUG4 z2}Vqp%kBUTXx3^{1!enNdv!y2oY}p)K?}i>!?Ff>4IPa&7#eRFXsThN!;CyM-x!7J zi~@ADQHYK+d}zHy_puO1%Nj_O3SRUZI4qUKP^hj ztf=j~sR{*YVOnN|ZS62E=iyR-%HZuEQ`Kbf_PrFKSOET%0{8{seaRd?F2w*W5x_qW zj`{8v>A%PgJ>LgBNUHnhWCTF}Y6n1Fh127{e;X?9`}eF7)ejFc?i=#W;mR5crw4E! z9u&ZJQMxp(=tn6^XSm!)kMAEGG}h%4dVC*CcKp*q$HW80vk#1r0F|X_meT(crRh*{ z=YP99!vjX1fX5Cwn>=*F14ha-GDzeNm`>a%57M8AHv!b-2fRFXujwG3OsCks{robo>+%pUH7itQ2q8i`jDai92GR1d=1@RPkIiSc6E9Hrp6AxX> zpkRR&A#&yKknwC0stObewdoZRDAV_;B*7Q(?LkKe3Vol6HYNsqzR!1|y~;J{P^+GA zpNw)&g+gD5LgP|}3hYAr(^~fD@8(Ze)fA;cFhGj^#g`+08d%|Api8VX{Ka;h%Ud8Y z`-@TlF+@dJ6}N>&Sjt8|Pf|gdFI7mh>WH0$fLVm~-Iyt0iga}+A|!>>=9xuW5%~3o%-x47|)bR=A zMdDg4u71D&a`0_;qH*phqTd~2;I8%a@heIV2!p0-Ia+asAmA5-={yi9f`t2K zbBX3LK~Gvtknz=x+iK!JpsipvCn0JC!E%< z@kR*s7&FjmMiu(DF%w;3%tE&sv(f!VHG0;VgI+V{qQ4r4qA!dZoNpY4CmQqcOyh8T zq*04k8b{#O#sb`JEW}%kBk{M4Mfe9sJ-*6Vf`4Khh3_?5@gAcMKWD7Q&l_v-d&XM) zv2mQ@HI7#%8z(CBjHuFJY*IRnm=ZVol?#l7a+Q%(b{SigM~rRCQ^uLfOU8EPHRF5A zo5uH*&y9=KvBsrpg>jjBlyQZ6qH&eF!MIwD8`r3(8$VRfGIprv8P}zVjVH;q#=4Cit%UqhVd8rj`4x!G5)TNGCtIbjgPb`#y_+Qk8PVZmNB3hzT3 zWWmyXs20Nlb!k3-C60fjc&tJgR5S>#QWt2*9~dcR!r%9m+gEX3w!jT{b- z0V9RO_Jc!yFqI|w=&H{Ul54%sP~Lu65_ogrN@P`-Hx^NIu9$t{#re>2PN$A=E=5mr-NTtgiA8woBB?4 zl*=)P`lChtId=WZob`bfWB3sncdF4F~^aPoPw(|pdyYR%?Q7%?a<|QV{ z5(Slk0$HLkFe*^E8-te<7-g^WYYTYVUgg&osx>|+BNzH(0tJ5Gb|2;dXRZHE0DRNe zp_tznD0pxOo+f+~D9BgxwMEbbPdgFU;y|&}l%J=arb^VB(SZ`DDZhX8_R*LFQcbBf zWBg+*1Ut~K0N)WGW8uc7wE=NkJ65e3=O4$9T3pDBode);*0#Agb}>GX7Z@wIUiZPRHU4PzECFs=3?by^bd6+VD>B5p?B0tDnTX64d^X32sK9I`|t~D zDc@?td+-zLWJsC#d3?Wm2&BCDb$pvT1=`5N@8ch-Qz4a)KgO4<(*W}*r4o0lWq`Rr znTJ=409BzfAGeACm5(cZ+k`;MG9i$9QJN6-r)s%0ApjF51XfQs3YUn2!*`8vlQcX- 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

    >{6_FibV^s1$?Za75+i6e6@5I~H8U2K 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�w2F4=x-lY+`Im+qz<>jfu@-TC;v4S$B+dZ}2v2`ll zDm?OiL~w4fac(49(sH4%l7Qhw*dHbuowUQC5{Q0@Oyfh^_5?ve{MbAr^8$sSfVl#6 zM!+cMam`o4?ABCUZ!;s=w)|s()@+%|%p7j>H0SBfknrL#xOR&UOHzZHw8PZ{99Poh z6RW=UD&q!_*lhBCv2vx-q9b3XL#Zx&lIvWc+Mwd|L9q;I@lfETn%_Al_nx`!o^++k z%8_PwM#!3GIlX$DbG^NTL*%*nspZKD#^pH%3g+f&GV{ZlD1k%1H^!R57;c}(t3{P5Hmt~skQ=mH3(SPx1xV-y$i)%s5c4t>i^=7nJZ$q!7y?AJW zurRmR7WtXLQ%$)j2bl+T8^R!u{@OGCZgIOc4(*3wl^>+y+ zralwfkT(DQZBycp^<7%8yGW+b6ldT|e`1`p-M_}T>WE% z`11|8BZ1z}6o^r4h-@&N*Uc;k8#ER`amoe3Q1O#u)GpNH=}Agy)>2vbF^m8{T@ZPv z$$sVZn~x-4ZOSVV`vIOqfnAM~(KJLiVFs-Z5V~rHJ7sLjHv-=D0u`#{6`k|T8n3b3<++|YgVbVa}~;Cp2Fa)i#>uE`T&RcSmBkf#z#JH^J3ZwtoeGuU5s zaIA5$*?aY1;|+MpVQza}OMuYvMril4l8rO4C$@*aFzzXyE!|js(r7_8{~%+0RJ<~e z?0S}o)G-~>wMw8*=F;+r0&b*ZWWze?{m47R$C>~ih4808NCHi<39lZVf4_Kz)~xZ0 z@lPyWF+H{J4xFb@VwKH3*0*Z=wVs^}PIacu8PvWfPLqZuD1XJj5dgZEOa60_yE$#1+GxlA@);=&Sr+OUQj5)gXdRBo zR4V3USEGJ8F5F+ojJ=X^-;vS;CUJ0V8SoBHHVj?ofS%?`oagr<+2DEDaK$_+HSiP+ zgFd1|yg`=#mW24Cvm8HQ2e?vs0fTN>dg3@wE?kn<2V%D7ijiJyBrhnNFPFjHdy}_# zL#tRB(bh;loV_QDu{NDh)+lSODQsL7cSwkuC0=w#bl&#Lb{^rlQe2e+u&rx((du13 znJu3;)2x}`GFfy9I+IRlJu=@MN62?8sTIb5Z+2v<+@MywsnydCx{^_8gEeO?B9^xe zkzP8_Z~rx&jUr6%m(>L$88Y86F}H9uZ|J>xC6mKtRqvsVNwYig3Sr|qKP1GxB0I|} zJ6Ey@am;MKylc*MfbQTOkA1Fq=$TyfPB3xgcv+QGTzIk;p`)kJHA>VfMAsvv&QS>Ge*)>=SnOz`*}UnbPEQu^F15E10*)+M24{H<-6XTE2J~U1E&T zm3r<`|BpwUoDY_1+dG8o7lf}h@pO{YzEGQ7#?-#6<*V4xd24WtNy+pGSSr%# zJr%yO`7E>P6BVXKjl(Af^d|@ZC$#DStz-qwz)n4NxTIwETSh~HaqnAk?k7@Xh`e!- zaSU>a4RR9cymsI8l5N9^SICGD_0P&I8@Y_4^RUG7PMZA;YZ)bIGOt1Tr3Cq*8R3}Q zKnhn{eX?Df!VA(_PCp)Iu22bEX0FU3j*gmZX+;^m91yaOsb?cIO`7bXcVs5oz4l+w zb3UT0B%*2x#EZm{+P!?Nb=<23?NM(me)!E9IzLa!A+2$%4P#o3E%hhX+xx*c;pMo= ziESGQYvx#NdbSv-0-8~b!Op`^HwgUQI8UM(F5DN>`3aUE=tZ8P{bjgo?mnSECOy{c z++xLkY!`C&OsIL~JPg3Da{Gvp^X6w#Vr5m=&wnM(`%H!%lP0lB*ob3II`g5%;ow2g2`Jj9CZ>i~v)J}N+0|pfOA2}pM+fMW1NK9H{ z8W6TsE|G#$TNv4M56RlXxQ-^cy5sc#EJ?%n+AztONWBVbJiCBsk_!5uvnqh%*i7o- z8fBtgOp`qOMgeaLDkwhTMIuq7{eRe{uCl-W*6QG4VDI|NgnaN@|NMVHZT#EObCrs< zDyA@!PjF`vb090BL756!QfK2G2s2C4dN4s*9yM?sAFoqGL^Z?E9h7W2NvPjJ<+PYVK)iC$ zV*xpv{SjU54Qg(=#%nKJ*JOL1MG{5vYX+gopWM@Q8pt@ltD7~BZRRW5^-@aSBQ7mg zw`@dZ{-+@`}y-@0*ImpvQDtxREf%cmY!dK!Ezl!SLv_`3s5hp3`w@HE-A1 z+NjlXOfA>A93Ol==tQ@%d(*$vRdrW+H$YaNF@n&``30}43|rsU&uZ7`=orM$!CkAIcUmDMnQj>hF!;Iw9b3{N8zF^|9* zq<-4YLk-~gqNl&v7Efmu_jB+z7j?}br&wyOeUq8dlV@sPxH)&Rt9GiKkSa(aeh59m z=(Vzl(cM1>(X7qVT&YwXvlb1g25uuJY>n&|4@(&!*jmz0(6REhi*xlK5G^;Y&gK^n z6{94)@`O=Wef}a9x3aYUDU0TSI&w9p60&wBSv2*P-|Kqe7vEek?IGJ}xv4LegRxR^ zRUjE;Y1d?eYx7E5mKYZVwdBCWl*X-!*dxb3GCE%^1)CrZs=aXPZ;#=7&`5Qd!D+#D+GGsM4X)WLp_^bY*K-r=b|zq7#l5mHJY?Is==MNl?f8c4(wHif)=*~D(h zP17x>F?5axk6L0CBVkW4-ibt`HAHL{sIb0`Yp>Yw>=itC+F(X6(7^0+X|^LOt6vL} zGsrTPb(>skL==?M_*E#X`1fGs_lNV9jtXyK|A8~U5fn)mzdmc?*j7rkVPuw2giwZ% z|6m?G*mkJ6X^dl7Q$!rc(1_z%G~;(*Uly^?!zg0GOjyFS9(m->bZ#h>14#hE?=3oX zBzr`V1b%qj1H^D9(Mz5pU-&wj?Fc01!!8LH#Vb`Y>yvv@G;U)A*0~4JPm2oDlCF0^ z-DVHfLDfeQ(+^D&ku%-@=!*dW{H2}x-3t597v}fXe>-lV{};*aZ;rn%h=U8@-xEV! z-{|o_c$PEK{_{a)WpSZ@@Z|U%9nBq`^lhB}*@UB2TI+zdf zSybC11?_Gsb6I^Ut$@B-tOL?GC&McaoU~dw#TI8oXfBi0&l(?kqy=O~D{cO}K^dTm zvdY$S6z0k+Pg4TCvB$9ai0lQtQk0eUMY)O%UeV*m}vvhB3zbwm0@wR|p2WvEzdQ!0H5MQ*gCm2zP`iOmH{aAC|;M-9@#MkZRV^ z+QQ_0K85~F_eVLSUS>-5IW)1>O5q?!GkHa4;q=>57qT5I~a@)EgsOlfGy5U$u?mq~**U}x3U z(j8Srk{V)a3x5*@V^^YLR|r%t8WQPlmr42_5-ZXl+pb+B7y30%PeSVOBr#Oht^zd0 z3~fE6sbcRfA~AlHB1k02>Nzc=_h!~G8>=+G&5?N6RJvw z!oS>$hr;B<>nsATJ#NdH_M3ReQV(8I;ZqujRw7~ojlm9Ng!vIXy{P?SKzzN)Xl}q7 z=i@mYlhrc>)+O&S0cm2txfRCo>YgG^B8thTK9RP@1Vcy1!1cUG$62*nnL>Vv$`V`j z_kQ~;k02OWN+X~^$-I%$8ISA>;TNpTL zY~j)Z+i3C((0F`sI)&>b<;lHNtVi#rU@z1)o>{SLZpJ!{z&$z(>j(fr;=!zb z{kD3eq5pvt!W+9lrh<1uRJhO1kD3}a2900Oc)_J%e3EWJ)(HF&?znj&r@0UjzjrYo z)0v$92)oRk2Y6t?f;0~z%#6L3xRQLv$ZU2E^wi9)%R0NxYvrl-Oke(~x|}i76u;?T z6}&`sS+NJbIJCvGl=!(+Sprv(Y5WLCdrA;&4{lDi$F$;vrAi;tQtRJx$5Y)m+%f3| zORV+6o_Y{Dkf~a*(hDg@4#UE&BeDn`vKY&ARivk5d4duxUZUbi~NpTp(Z9|N7{X0T=qmZ+t5qMI00?B)dUO3-;jSf8- z9)JvAyhYm6(ZsJ!562NB%|3eG>qkaQJuJM~-jct(`o|wCD6EOfbFw7?Y|U3e%+5sloy`G%yq zZ%)vEGvfJoNRoAS`Wq%CDQU}MiXw4eXg3T~k)VkI1`o$FFsZueuzZ3frI+J|mlrE6@!VmNqmft5x2T*;e#tK}9y9?Fm7fkwZ?-v} zWIJAGt@ZqIf5z%%vk9CFyQ9lbH7jB!4|X(QqYZ{McridzOkK7YAKB1v+;>3J*MjF% z9h#0rW5Az0Z!I>I;mF$4xVNX*ZXCyK&gij3?R1h^jhN3?$vv*P z;A%>ihnrN*{MighT){W-(CD8mDKmCQLn(&Cesl{VJJar(T1t45c==MU>E6+4brkU^ z|+X$UB87Z0;}CZe^uJaZNQDt4fA^b`~AIVXven7DGQB$VF2CZJ)K? z1(v}$?Xw5!>i0k-$6kSk($6N>As6INdE~U==vaNkaQmqq_o@w4K=2MH1!P``^oVVO z;7W1lKg0f;x4j^@!_RBh``HZJa7#^7z9;tNzEW{rZ+y_MOIx_2F|OKktt@+RVtWr6 z>OM&5_b3yv(5D%Q(9_|h!g!nNG)E~Gee|c+6yFidtOW@t^CiDKf#6TJ;GK}!pP60mc)WfBjhQ~O7CJw0OYdw%tmtWM45xHg8`9~mpxEgHPgeMPD zE-i9AK|cHG4O+ zFa>xG{WS|A?_tjyp;izvh;-~I+jyun2S@32^pgU zAIVN0?SrSgzF!?GLk2XWASClxb)6`C9;G{VhFzNSa^5J!kgC)asXA-=1fgKcsMG2r>c@{EB9gb~X3UCK5>3d|Wg zbKIH>9V-6zE5mshxhn`{Ixl(tK`(paClNW;^1j^jAGtgjz+YfvETv3!`kng_AOZkT z{nuRnU%^J|uOv$LA4$~zJ?U0`S5;a;{sZ&SI$)jy?zw z?_cMFMmumy=bDM0Phy_Xy&(D~wq7iaE4~mSZK)v*9Lcmk@@=Z|!t=+!+vmozs=9fH z$FWOGL~Hhs!wkFY^V<8y&hKX)SD(+D3s!*3{wO*Fw|s<(+d{7F_>uR+J0Ev0>KIcf zFT65oCS98}G7d!Iw&| zE=?sRX3jNMMHTw`Fhet&k zVe$^kj20ikc&_$aLhj``N>G*kg9hUzr$1EhHcdf#u?`kw<~Vk%53ZzI*WH|9VP=!J z-@BnoYfFM8!ZA+o8?m-BU$s@1$Y1Xysm+i}XYHtq#h2yAJ(CSs^L*1e&uTO3l9Nw_ z@CHlw)QZO2PmUC^MxPjhe|(hW-&&q$7b)?rAL39k{2AZKmm-Hov*P-m8|dI7o(wj| zS%7m|L`UZTa6ohUz?MQCu1ZQ2d_pF?Ab~0@vIChc$-tMCw2rLG*tA(mr61%>JRw7L zw(v-)KTPBr^nkloF9-p@s`OImOin{s{wVL=Y(;MmL`3?y zYr}^tzuX4%Ax}k0yW?z6?qqVF;4(Ry{`|woY?s&G4XDuR?bZo@QB3Asq$F$%T|vEJ zIE>PY_KsCW+H^Grju-K1nYs0@_-0&LpD;^?WhK3!*q?OdFA9?FwoI6NlBwXarV?o} zLmx0b0~LfnhE|~AF6JiV4Q?j0-9|sQ5AhqR)2Jpvy>!aDkuW-`?4EQOf`T6;)_Ji? zy%RiNo3P_uW_OFP7QrK5qfmCc30=Z)@v78&d~y+75|8JJ?4agc^}$h4V@(=72XkEW zR8m`N8gXv^z-y7o@0ZQ1&Vpe5nC4(L2$#%@IHJOwNf^JTW+7NLz;N}5&2`})H~ zX$>1?e54CmIAoCb7hl#aDbFcphdj9^vbHf{j+}PO!iR0hO#3j^28C9Nch3xV#>)lb zo|-7i=}b7QPvkny7Pi@uM~Uf1&jU~P1MR$c`(B4AXEyH2{k>ZbE>+>vaa^ZDj8%|_ zmwe4P5)B)5M(cC0O!T*g@;5UlG|Gca0U>5aFx@IMtZ(BYUlhOf^cR$>7zeEA8OR(x zEg^Am&)+qO3zkz@y*UYXZ<6IxhFgRRwMy&x;uO=sey*arlPh zUlnmle@MQWxq5;251kp)>OQtWu+t)MP9Ra2(Tsn$)qAIBQ0e*)=s(a+6ZXMa0AM!C8t~SZwj@SfQTTJf1vNv3<;IaUUWj+4n(JF)=DNY@%fdd=%tQLv{UXO~;OE zt`*pU+N%<#AyiI}tct`XxT&h9d}=`STXO6A4#o>&U8?hIHUzabAflU9t#;ibtvDMR zKO!rf@BS?%FCTj9)<*epuE3^YDpzqV8n{E-kH8?6xiZ;f1^%;KuCdO!2F7VEj zd7BQi_cERcO%T*j+`@;j@`+XF7Xs|q(1&yFbA_HGs{bpR1xzFzP?~`&xnIZjHA*{? z-u!eiqMl5bD#EDOMl$|a(o}a`U3WsAZ>`JMi9XGtU^GW8$Z{8iC52=j=rLG{g46M% z_$(@a`BMr#i>OK63u?K?7h$b3kN}D>&D*RhO0TTSiGF=w(83Pm%0Di83}Q3Cw%U>F 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

    tc_)11^46u0ZQu* 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�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 literal 0 HcmV?d00001 diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java index 08125df..70c65ae 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -1,7 +1,6 @@ package ua.com.juja.study.sqlcmd.database; import ua.com.juja.study.sqlcmd.SqlCmd; -import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.di.ApplicationContext; import java.util.concurrent.Callable; @@ -22,11 +21,6 @@ public AsyncDatabaseExecutor(DatabaseExecutor executor) { this.executor = executor; } - @Override - public boolean connectToDb(SqlCmdConfig config) throws DatabaseException { - return executor.connectToDb(config); - } - @Override public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { ApplicationContext applicationContext = SqlCmd.getApplicationContext(); diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index 52b3826..a73c4a8 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -1,7 +1,5 @@ package ua.com.juja.study.sqlcmd.database; -import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; - /** * Created with IntelliJ IDEA. * User: viktor @@ -10,8 +8,6 @@ */ public interface DatabaseExecutor { - public abstract boolean connectToDb(SqlCmdConfig config) throws DatabaseException; - public abstract QueryResult executeSqlScript(String sqlScript) throws DatabaseException; public abstract String[] getDatabaseList() throws DatabaseException; diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java index 7606bff..f7a28fd 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java @@ -44,7 +44,7 @@ public String[] getColumnNames() { return columnNames; } - public void setColumnNames(String[] columnNames) { + public void setColumnNames(String... columnNames) { this.columnNames = columnNames; } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/Row.java b/src/main/java/ua/com/juja/study/sqlcmd/database/Row.java index 52eb9e9..8c8ca3c 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/Row.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/Row.java @@ -1,5 +1,8 @@ package ua.com.juja.study.sqlcmd.database; +import java.util.HashMap; +import java.util.Map; + /** * Created with IntelliJ IDEA. * User: viktor @@ -7,4 +10,16 @@ * Time: 6:57 PM */ public class Row { + + public static final String ROWS_AFFECTED = "ROWS_AFFECTED"; + + private Map values = new HashMap<>(); + + public void addColumnValue(String columnName, Object columnValue) { + values.put(columnName, columnValue); + } + + public Object getValue(String column) { + return values.get(column); + } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/jdbc/JdbcDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/jdbc/JdbcDatabaseExecutor.java new file mode 100644 index 0000000..a1edf31 --- /dev/null +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/jdbc/JdbcDatabaseExecutor.java @@ -0,0 +1,40 @@ +package ua.com.juja.study.sqlcmd.database.jdbc; + +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.database.DatabaseException; +import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; +import ua.com.juja.study.sqlcmd.database.QueryResult; + +import java.sql.Connection; + +/** + * Created with IntelliJ IDEA. + * User: viktor + * Date: 12/3/14 + * Time: 12:05 PM + */ +public class JdbcDatabaseExecutor implements DatabaseExecutor { + + private Connection connection; + + public JdbcDatabaseExecutor(SqlCmdConfig config) throws DatabaseException { + //TODO implement init db + } + + @Override + public QueryResult executeSqlScript(String sqlScript) throws DatabaseException { + //TODO + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public String[] getDatabaseList() throws DatabaseException { + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public void changeDatabase(String databaseName) throws DatabaseException { + throw new UnsupportedOperationException("Not implemented"); + } + +} diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index c90bef0..3821b3e 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -1,6 +1,5 @@ package ua.com.juja.study.sqlcmd.database.mock; -import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.database.Row; @@ -13,12 +12,6 @@ */ public class MockDatabaseExecutor implements DatabaseExecutor { - @Override - public boolean connectToDb(SqlCmdConfig config) { - System.out.println("Database connection established with config " + config); - return true; - } - @Override public QueryResult executeSqlScript(String sqlScript) { return new QueryResult(new Row[]{}); From a37772fac84a6eec4a34659296da6e51f3a2126e Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Tue, 9 Dec 2014 21:36:18 +0700 Subject: [PATCH 34/39] skip asynch implementation --- .../sqlcmd/database/AsyncDatabaseExecutor.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java index 70c65ae..20596f3 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -1,12 +1,5 @@ package ua.com.juja.study.sqlcmd.database; -import ua.com.juja.study.sqlcmd.SqlCmd; -import ua.com.juja.study.sqlcmd.di.ApplicationContext; - -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; - /** * Created with IntelliJ IDEA. * User: viktor @@ -23,15 +16,8 @@ public AsyncDatabaseExecutor(DatabaseExecutor executor) { @Override public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { - ApplicationContext applicationContext = SqlCmd.getApplicationContext(); - ExecutorService executorService = applicationContext.getExecutorService(); - Future queryResult = executorService.submit(new Callable() { - @Override - public Row[] call() throws Exception { - return executor.executeSqlScript(sqlScript).getRowList(); - } - }); - return new QueryResult(queryResult); + //TODO implement me :) + throw new UnsupportedOperationException("Not implemented"); } @Override From 03aec7e1e0ed0a12648450ba276b8b2948b4fc75 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Fri, 21 Nov 2014 11:40:23 +0800 Subject: [PATCH 35/39] Dependency injection engine --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 2 -- .../study/sqlcmd/di/ApplicationContext.java | 6 ------ .../sqlcmd/di/DefaultApplicationContext.java | 19 +------------------ 3 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index b03ef6b..ae553c8 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -33,8 +33,6 @@ public static void main(String[] args) { System.err.println("Error with input/output happened. Unable to continue working"); System.err.println(e.getMessage()); System.exit(1); - } finally { - applicationContext.shutdown(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java index 138d873..ca66c65 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java @@ -4,8 +4,6 @@ import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.QueryHistory; -import java.util.concurrent.ExecutorService; - /** * Created with IntelliJ IDEA. * User: viktor @@ -19,8 +17,4 @@ public interface ApplicationContext { public DatabaseExecutor getDatabaseExecutor(); public KeyboardManager getKeyboardManager(); - - public ExecutorService getExecutorService(); - - public void shutdown(); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index e3e2b1b..82644b9 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -1,16 +1,12 @@ package ua.com.juja.study.sqlcmd.di; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; -import ua.com.juja.study.sqlcmd.database.AsyncDatabaseExecutor; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; import ua.com.juja.study.sqlcmd.database.mock.MockDatabaseExecutor; import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.ArrayQueryHistory; import ua.com.juja.study.sqlcmd.sql.QueryHistory; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - /** * Created with IntelliJ IDEA. * User: viktor @@ -23,12 +19,10 @@ public class DefaultApplicationContext implements ApplicationContext { private QueryHistory queryHistory; private DatabaseExecutor databaseExecutor; private KeyboardManager keyboardManager; - private ExecutorService executorService; public DefaultApplicationContext(SqlCmdConfig config) { this.config = config; - executorService = Executors.newFixedThreadPool(5); - databaseExecutor = new AsyncDatabaseExecutor(new MockDatabaseExecutor()); + databaseExecutor = new MockDatabaseExecutor(); queryHistory = new ArrayQueryHistory(); keyboardManager = new KeyboardManager(queryHistory, databaseExecutor); } @@ -47,15 +41,4 @@ public DatabaseExecutor getDatabaseExecutor() { public KeyboardManager getKeyboardManager() { return keyboardManager; } - - public ExecutorService getExecutorService() { - return executorService; - } - - @Override - public void shutdown() { - executorService.shutdown(); - } - - } From a2a4093aec0c6207b22027c9cc083fc94942c841 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 12:45:04 +0700 Subject: [PATCH 36/39] Added async execution query --- .../java/ua/com/juja/study/sqlcmd/SqlCmd.java | 2 ++ .../database/AsyncDatabaseExecutor.java | 24 +++++++++++++++++-- .../sqlcmd/database/DatabaseExecutor.java | 4 ++++ .../study/sqlcmd/database/QueryResult.java | 9 ------- .../database/mock/MockDatabaseExecutor.java | 7 ++++++ .../study/sqlcmd/di/ApplicationContext.java | 6 +++++ .../sqlcmd/di/DefaultApplicationContext.java | 19 ++++++++++++++- 7 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java index ae553c8..b03ef6b 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/SqlCmd.java @@ -33,6 +33,8 @@ public static void main(String[] args) { System.err.println("Error with input/output happened. Unable to continue working"); System.err.println(e.getMessage()); System.exit(1); + } finally { + applicationContext.shutdown(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java index 20596f3..dacbc0c 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -1,5 +1,13 @@ package ua.com.juja.study.sqlcmd.database; +import ua.com.juja.study.sqlcmd.SqlCmd; +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.di.ApplicationContext; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + /** * Created with IntelliJ IDEA. * User: viktor @@ -9,15 +17,27 @@ public class AsyncDatabaseExecutor implements DatabaseExecutor { private DatabaseExecutor executor; + private ApplicationContext applicationContext = SqlCmd.getApplicationContext(); public AsyncDatabaseExecutor(DatabaseExecutor executor) { this.executor = executor; } + @Override + public boolean connectToDb(SqlCmdConfig config) throws DatabaseException { + return executor.connectToDb(config); + } + @Override public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { - //TODO implement me :) - throw new UnsupportedOperationException("Not implemented"); + ExecutorService executorService = applicationContext.getExecutorService(); + Future queryResult = executorService.submit(new Callable() { + @Override + public Row[] call() throws Exception { + return executor.executeSqlScript(sqlScript).getRowList(); + } + }); + return new QueryResult(queryResult); } @Override diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index a73c4a8..52b3826 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -1,5 +1,7 @@ package ua.com.juja.study.sqlcmd.database; +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; + /** * Created with IntelliJ IDEA. * User: viktor @@ -8,6 +10,8 @@ */ public interface DatabaseExecutor { + public abstract boolean connectToDb(SqlCmdConfig config) throws DatabaseException; + public abstract QueryResult executeSqlScript(String sqlScript) throws DatabaseException; public abstract String[] getDatabaseList() throws DatabaseException; diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java index f7a28fd..7e9bc7f 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java @@ -12,7 +12,6 @@ public class QueryResult { private Row[] rowList; private Future futureRowList; - private String[] columnNames; public QueryResult(Row[] rowList) { this.rowList = rowList; @@ -39,12 +38,4 @@ public boolean isReady() { } return futureRowList.isDone(); } - - public String[] getColumnNames() { - return columnNames; - } - - public void setColumnNames(String... columnNames) { - this.columnNames = columnNames; - } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index 3821b3e..c90bef0 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -1,5 +1,6 @@ package ua.com.juja.study.sqlcmd.database.mock; +import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.database.Row; @@ -12,6 +13,12 @@ */ public class MockDatabaseExecutor implements DatabaseExecutor { + @Override + public boolean connectToDb(SqlCmdConfig config) { + System.out.println("Database connection established with config " + config); + return true; + } + @Override public QueryResult executeSqlScript(String sqlScript) { return new QueryResult(new Row[]{}); diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java index ca66c65..138d873 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/ApplicationContext.java @@ -4,6 +4,8 @@ import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.util.concurrent.ExecutorService; + /** * Created with IntelliJ IDEA. * User: viktor @@ -17,4 +19,8 @@ public interface ApplicationContext { public DatabaseExecutor getDatabaseExecutor(); public KeyboardManager getKeyboardManager(); + + public ExecutorService getExecutorService(); + + public void shutdown(); } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index 82644b9..eb41beb 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -1,12 +1,16 @@ package ua.com.juja.study.sqlcmd.di; import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; +import ua.com.juja.study.sqlcmd.database.AsyncDatabaseExecutor; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; import ua.com.juja.study.sqlcmd.database.mock.MockDatabaseExecutor; import ua.com.juja.study.sqlcmd.engine.KeyboardManager; import ua.com.juja.study.sqlcmd.sql.ArrayQueryHistory; import ua.com.juja.study.sqlcmd.sql.QueryHistory; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + /** * Created with IntelliJ IDEA. * User: viktor @@ -19,12 +23,14 @@ public class DefaultApplicationContext implements ApplicationContext { private QueryHistory queryHistory; private DatabaseExecutor databaseExecutor; private KeyboardManager keyboardManager; + private ExecutorService executorService; public DefaultApplicationContext(SqlCmdConfig config) { this.config = config; - databaseExecutor = new MockDatabaseExecutor(); + databaseExecutor = new AsyncDatabaseExecutor(new MockDatabaseExecutor()); queryHistory = new ArrayQueryHistory(); keyboardManager = new KeyboardManager(queryHistory, databaseExecutor); + executorService = Executors.newFixedThreadPool(5); } @Override @@ -41,4 +47,15 @@ public DatabaseExecutor getDatabaseExecutor() { public KeyboardManager getKeyboardManager() { return keyboardManager; } + + public ExecutorService getExecutorService() { + return executorService; + } + + @Override + public void shutdown() { + executorService.shutdown(); + } + + } From 097b2c4355b83c688ba1ae05e3053dff8c7ad1b7 Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 12:54:27 +0700 Subject: [PATCH 37/39] Added async execution query: fixed problems --- .../com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java | 2 +- .../ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java index dacbc0c..08125df 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -17,7 +17,6 @@ public class AsyncDatabaseExecutor implements DatabaseExecutor { private DatabaseExecutor executor; - private ApplicationContext applicationContext = SqlCmd.getApplicationContext(); public AsyncDatabaseExecutor(DatabaseExecutor executor) { this.executor = executor; @@ -30,6 +29,7 @@ public boolean connectToDb(SqlCmdConfig config) throws DatabaseException { @Override public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { + ApplicationContext applicationContext = SqlCmd.getApplicationContext(); ExecutorService executorService = applicationContext.getExecutorService(); Future queryResult = executorService.submit(new Callable() { @Override diff --git a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java index eb41beb..e3e2b1b 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/di/DefaultApplicationContext.java @@ -27,10 +27,10 @@ public class DefaultApplicationContext implements ApplicationContext { public DefaultApplicationContext(SqlCmdConfig config) { this.config = config; + executorService = Executors.newFixedThreadPool(5); databaseExecutor = new AsyncDatabaseExecutor(new MockDatabaseExecutor()); queryHistory = new ArrayQueryHistory(); keyboardManager = new KeyboardManager(queryHistory, databaseExecutor); - executorService = Executors.newFixedThreadPool(5); } @Override From e0e0e1cd6eadf153047aa7d9728ae4d88d0fdedc Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Thu, 27 Nov 2014 13:29:28 +0700 Subject: [PATCH 38/39] Outputter --- .../ua/com/juja/study/sqlcmd/database/QueryResult.java | 9 +++++++++ .../com/juja/study/sqlcmd/engine/QueryFormatter.java | 6 ------ .../sqlcmd/io/ConsoleFormattedQueryResultWriter.java | 10 ++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java index 7e9bc7f..7606bff 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/QueryResult.java @@ -12,6 +12,7 @@ public class QueryResult { private Row[] rowList; private Future futureRowList; + private String[] columnNames; public QueryResult(Row[] rowList) { this.rowList = rowList; @@ -38,4 +39,12 @@ public boolean isReady() { } return futureRowList.isDone(); } + + public String[] getColumnNames() { + return columnNames; + } + + public void setColumnNames(String[] columnNames) { + this.columnNames = columnNames; + } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java index 4ad9ac6..e3d7f15 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/engine/QueryFormatter.java @@ -1,6 +1,5 @@ package ua.com.juja.study.sqlcmd.engine; -import ua.com.juja.study.sqlcmd.database.DatabaseException; import ua.com.juja.study.sqlcmd.database.QueryResult; /** @@ -11,11 +10,6 @@ */ public class QueryFormatter { public String formatQueryResult(QueryResult queryResult) { - try { - queryResult.getRowList(); - } catch (DatabaseException e) { - return e.getMessage(); - } return queryResult.toString(); } } diff --git a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java index 8556ee9..6f22fc1 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/io/ConsoleFormattedQueryResultWriter.java @@ -1,5 +1,6 @@ package ua.com.juja.study.sqlcmd.io; +import ua.com.juja.study.sqlcmd.SqlCmd; import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.di.ApplicationContext; import ua.com.juja.study.sqlcmd.engine.QueryFormatter; @@ -26,7 +27,6 @@ public class ConsoleFormattedQueryResultWriter implements ResultWriter { private QueryFormatter queryFormatter = new QueryFormatter(); private Writer writer; - private ApplicationContext applicationContext; public ConsoleFormattedQueryResultWriter() { writer = new BufferedWriter(new OutputStreamWriter(System.out)); @@ -47,11 +47,11 @@ public void writeQueryResult(final QueryResult queryResult) throws IOException { private void writeQueryResultSync(QueryResult queryResult) throws IOException { writer.write(queryFormatter.formatQueryResult(queryResult)); - writer.flush(); } private void writeQueryResultAsync(final QueryResult queryResult) { - ExecutorService executorService = applicationContext.getExecutorService(); + ApplicationContext context = SqlCmd.getApplicationContext(); + ExecutorService executorService = context.getExecutorService(); executorService.submit(new Callable() { @Override public Object call() throws IOException { @@ -61,7 +61,5 @@ public Object call() throws IOException { }); } - public void setApplicationContext(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } + } From 1b0ec6f850f2096dc9d9640d595b498c100105bc Mon Sep 17 00:00:00 2001 From: Viktor Kuchyn Date: Wed, 10 Dec 2014 11:53:07 +0700 Subject: [PATCH 39/39] removed connect to db method --- .../juja/study/sqlcmd/database/AsyncDatabaseExecutor.java | 6 ------ .../com/juja/study/sqlcmd/database/DatabaseExecutor.java | 4 ---- .../study/sqlcmd/database/mock/MockDatabaseExecutor.java | 7 ------- 3 files changed, 17 deletions(-) diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java index 08125df..70c65ae 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/AsyncDatabaseExecutor.java @@ -1,7 +1,6 @@ package ua.com.juja.study.sqlcmd.database; import ua.com.juja.study.sqlcmd.SqlCmd; -import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.di.ApplicationContext; import java.util.concurrent.Callable; @@ -22,11 +21,6 @@ public AsyncDatabaseExecutor(DatabaseExecutor executor) { this.executor = executor; } - @Override - public boolean connectToDb(SqlCmdConfig config) throws DatabaseException { - return executor.connectToDb(config); - } - @Override public QueryResult executeSqlScript(final String sqlScript) throws DatabaseException { ApplicationContext applicationContext = SqlCmd.getApplicationContext(); diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java index 52b3826..a73c4a8 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/DatabaseExecutor.java @@ -1,7 +1,5 @@ package ua.com.juja.study.sqlcmd.database; -import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; - /** * Created with IntelliJ IDEA. * User: viktor @@ -10,8 +8,6 @@ */ public interface DatabaseExecutor { - public abstract boolean connectToDb(SqlCmdConfig config) throws DatabaseException; - public abstract QueryResult executeSqlScript(String sqlScript) throws DatabaseException; public abstract String[] getDatabaseList() throws DatabaseException; diff --git a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java index c90bef0..3821b3e 100644 --- a/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java +++ b/src/main/java/ua/com/juja/study/sqlcmd/database/mock/MockDatabaseExecutor.java @@ -1,6 +1,5 @@ package ua.com.juja.study.sqlcmd.database.mock; -import ua.com.juja.study.sqlcmd.config.SqlCmdConfig; import ua.com.juja.study.sqlcmd.database.DatabaseExecutor; import ua.com.juja.study.sqlcmd.database.QueryResult; import ua.com.juja.study.sqlcmd.database.Row; @@ -13,12 +12,6 @@ */ public class MockDatabaseExecutor implements DatabaseExecutor { - @Override - public boolean connectToDb(SqlCmdConfig config) { - System.out.println("Database connection established with config " + config); - return true; - } - @Override public QueryResult executeSqlScript(String sqlScript) { return new QueryResult(new Row[]{});