From ea1432f7afba22e723327841993662237ca6c5b5 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 16:44:46 +0800 Subject: [PATCH 01/27] Update sequence diagram for addCashflow --- docs/diagrams/AddCashflowSequence.puml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/diagrams/AddCashflowSequence.puml b/docs/diagrams/AddCashflowSequence.puml index f6c25559ca..bdb766a5fc 100644 --- a/docs/diagrams/AddCashflowSequence.puml +++ b/docs/diagrams/AddCashflowSequence.puml @@ -1,10 +1,10 @@ @startuml -participant AddCashflowCommand -participant CashflowList -participant Income -participant Expense -participant Ui +participant ":AddCashflowCommand" as AddCashflowCommand +participant "<>\nCashflowList" as CashflowList +participant ":Income" as Income +participant ":Expense" as Expense +participant "<>\nUi" as Ui -> AddCashflowCommand: execute() AddCashflowCommand -> CashflowList: getInstance() From 1e066d1878ee714f41fae180d1db53325dcb975c Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 17:49:05 +0800 Subject: [PATCH 02/27] Update sequence diagram methods --- docs/diagrams/AddCashflowSequence.puml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/diagrams/AddCashflowSequence.puml b/docs/diagrams/AddCashflowSequence.puml index bdb766a5fc..f6c472e373 100644 --- a/docs/diagrams/AddCashflowSequence.puml +++ b/docs/diagrams/AddCashflowSequence.puml @@ -10,19 +10,19 @@ participant "<>\nUi" as Ui AddCashflowCommand -> CashflowList: getInstance() CashflowList -> Ui: getInstance() alt income - AddCashflowCommand -> CashflowList: addIncome(amount, incomeType, recur) + AddCashflowCommand -> CashflowList: addIncome(amount, incomeType, recur, description) create Income - CashflowList -> Income: Income(value, type, recur) + CashflowList -> Income: Income(value, type, recur, description) Income -> Income: addIncomeValue() - CashflowList -> CashflowList: add(toAdd) + CashflowList -> CashflowList: addToList(toAdd) CashflowList -> Ui: printAddedCashflow(toAdd) else expense - AddCashflowCommand -> CashflowList: addExpense(amount, incomeType, recur) + AddCashflowCommand -> CashflowList: addExpense(amount, incomeType, recur, description) create Expense - CashflowList -> Expense: Expense(value, type, recur) + CashflowList -> Expense: Expense(value, type, recur, description) Expense -> Expense: addExpenseValue() - CashflowList -> CashflowList: add(toAdd) + CashflowList -> CashflowList: addToList(toAdd) CashflowList -> Ui: printAddedCashflow(toAdd) else invalid command end From 61ef715e27fa8ca9127a2c8da109c1a043556e30 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 17:49:20 +0800 Subject: [PATCH 03/27] Update class diagram --- docs/diagrams/CashflowClassDiagram.puml | 60 ++++++++++++++++++------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/docs/diagrams/CashflowClassDiagram.puml b/docs/diagrams/CashflowClassDiagram.puml index ca5c41f090..7211ac0448 100644 --- a/docs/diagrams/CashflowClassDiagram.puml +++ b/docs/diagrams/CashflowClassDiagram.puml @@ -1,28 +1,58 @@ @startuml 'https://plantuml.com/class-diagram -skinparam classAttributeIconSize 0 -hide empty members -!include style.puml -skinparam ClassBackgroundColor STORAGE_COLOR +skinparam classFontColor automatic -Class "{abstract}\nCashflow" as Cashflow -Class Expense extends Cashflow -Class Income extends Cashflow -Class Ui -Class CashflowList { - +addIncome(double, IncomeType, int) - +addExpense(double, ExpenseType, int) -} -Class AddCashflowCommand #FFFFFF +Class "{abstract}\nCashflow" as Cashflow #MistyRose { +#balance: double = 0 +#amount: double +#recur: int +#description: String = null -enum "<>\nExpenseType" as ExpenseType -enum "<>\nIncomeType" as IncomeType +} +Class Expense #MistyRose extends Cashflow { + #type: ExpenseType + +Expense(amount: double, type: ExpenseType, recur: int, description: String) + -addExpenseValue() +} +Class Income #MistyRose extends Cashflow { + +Income(amount: double, type: IncomeType, recur: int, description: String) + #type: IncomeType + -addIncomeValue() +} +Class Ui #Cornsilk { + +getInstance() + +printAddedCashflow(entry: Cashflow) +} +Class CashflowList #Cornsilk { + +getInstance() + +addIncome(amount: double, incometype: IncomeType, recur: int, description: String) + +addExpense(amount: double, expensetype: ExpenseType, recur: int, description: String) + -addToList(toAdd: Cashflow) +} +Class AddCashflowCommand #HoneyDew { + #amount: double + #incomeType: IncomeType + #expenseType: ExpenseType + #recur: int + #description: String = null + +execute() +} +enum "<>\nExpenseType" as ExpenseType #MintCream { +DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS +} +enum "<>\nIncomeType" as IncomeType #MintCream{ +SALARY, INVESTMENTS, ALLOWANCE, OTHERS +} +hide ExpenseType methods +hide IncomeType methods CashflowList -right-> "1" Ui AddCashflowCommand --> "1" CashflowList CashflowList --> "*" Cashflow CashflowList ..> Income CashflowList ..> Expense +hide Circle +skinparam classAttributeIconSize 0 @enduml \ No newline at end of file From b6ec44989d6bdeb46e7e164eddaaf72d22271596 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 17:49:33 +0800 Subject: [PATCH 04/27] Extract method of addToList --- .../seedu/financialplanner/cashflow/CashflowList.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/financialplanner/cashflow/CashflowList.java b/src/main/java/seedu/financialplanner/cashflow/CashflowList.java index 22dcfb34b1..2a40b9b995 100644 --- a/src/main/java/seedu/financialplanner/cashflow/CashflowList.java +++ b/src/main/java/seedu/financialplanner/cashflow/CashflowList.java @@ -29,19 +29,23 @@ public void addIncome(double value, IncomeType type, int recur, String descripti int existingListSize = list.size(); Income toAdd = new Income(value, type, recur, description); - list.add(toAdd); + addToList(toAdd); ui.printAddedCashflow(toAdd); int newListSize = list.size(); assert newListSize == existingListSize + 1; } + private void addToList(Cashflow toAdd) { + list.add(toAdd); + } + public void addExpense(double value, ExpenseType type, int recur, String description) { logger.log(Level.INFO, "Adding expense"); int existingListSize = list.size(); Expense toAdd = new Expense(value, type, recur, description); - list.add(toAdd); + addToList(toAdd); ui.printAddedCashflow(toAdd); int newListSize = list.size(); From 20cfcbcb8901a0f76eb102390d81565265eb1fb1 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 18:12:05 +0800 Subject: [PATCH 05/27] Remove getInstance methods from class and sequence diagrams --- docs/DeveloperGuide.md | 9 +++------ docs/diagrams/AddCashflowSequence.puml | 6 ++---- docs/diagrams/CashflowClassDiagram.puml | 26 ++++++++++++++----------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index f439f93ff8..20b2dd583b 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -130,11 +130,8 @@ Example: add income /a 100 /t salary /r 30 ``` Below are the steps that shows the implementation of add income/expense. -#### Step 1 -An instantiated AddCashflowCommand class gets the instance of CashflowList. -This allows the AddCashflowCommand instance to access the methods of CashflowList. -#### Step 2 +#### Step 1 The AddCashflowCommand instance then calls addIncome() or addExpense(), depending on what `category` is initialised as. addIncome() or addExpense() instantiates an Income or Expense object respectively. @@ -153,11 +150,11 @@ switch (category) { break; } ``` -#### Step 3 +#### Step 2 The instantiated income/expense then updates the overall balance through addIncomeValue() or addExpenseValue(). The income/expense object is also added to the list in Cashflowlist which contains all incomes/expenses. -#### Step 4 +#### Step 3 The added income/expense is then displayed to the user through the Ui. #### Diagrams diff --git a/docs/diagrams/AddCashflowSequence.puml b/docs/diagrams/AddCashflowSequence.puml index f6c472e373..47f89d6775 100644 --- a/docs/diagrams/AddCashflowSequence.puml +++ b/docs/diagrams/AddCashflowSequence.puml @@ -1,14 +1,12 @@ @startuml participant ":AddCashflowCommand" as AddCashflowCommand -participant "<>\nCashflowList" as CashflowList +participant "CashflowList" as CashflowList participant ":Income" as Income participant ":Expense" as Expense -participant "<>\nUi" as Ui +participant "Ui" as Ui -> AddCashflowCommand: execute() -AddCashflowCommand -> CashflowList: getInstance() -CashflowList -> Ui: getInstance() alt income AddCashflowCommand -> CashflowList: addIncome(amount, incomeType, recur, description) create Income diff --git a/docs/diagrams/CashflowClassDiagram.puml b/docs/diagrams/CashflowClassDiagram.puml index 7211ac0448..c11060164d 100644 --- a/docs/diagrams/CashflowClassDiagram.puml +++ b/docs/diagrams/CashflowClassDiagram.puml @@ -3,32 +3,34 @@ skinparam classFontColor automatic Class "{abstract}\nCashflow" as Cashflow #MistyRose { -#balance: double = 0 -#amount: double -#recur: int -#description: String = null - + #balance: double = 0 + #amount: double + #recur: int + #description: String = null } + Class Expense #MistyRose extends Cashflow { #type: ExpenseType +Expense(amount: double, type: ExpenseType, recur: int, description: String) -addExpenseValue() } + Class Income #MistyRose extends Cashflow { +Income(amount: double, type: IncomeType, recur: int, description: String) #type: IncomeType -addIncomeValue() } + Class Ui #Cornsilk { - +getInstance() +printAddedCashflow(entry: Cashflow) } + Class CashflowList #Cornsilk { - +getInstance() +addIncome(amount: double, incometype: IncomeType, recur: int, description: String) +addExpense(amount: double, expensetype: ExpenseType, recur: int, description: String) -addToList(toAdd: Cashflow) } + Class AddCashflowCommand #HoneyDew { #amount: double #incomeType: IncomeType @@ -39,19 +41,21 @@ Class AddCashflowCommand #HoneyDew { } enum "<>\nExpenseType" as ExpenseType #MintCream { -DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS + DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS } + enum "<>\nIncomeType" as IncomeType #MintCream{ -SALARY, INVESTMENTS, ALLOWANCE, OTHERS + SALARY, INVESTMENTS, ALLOWANCE, OTHERS } -hide ExpenseType methods -hide IncomeType methods + CashflowList -right-> "1" Ui AddCashflowCommand --> "1" CashflowList CashflowList --> "*" Cashflow CashflowList ..> Income CashflowList ..> Expense +hide ExpenseType methods +hide IncomeType methods hide Circle skinparam classAttributeIconSize 0 From b773b807986a68a39c8528ac557f16a06a40da49 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 19:56:29 +0800 Subject: [PATCH 06/27] Rename variable for clarity --- .../financialplanner/storage/LoadData.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/seedu/financialplanner/storage/LoadData.java b/src/main/java/seedu/financialplanner/storage/LoadData.java index 9a9810b014..66a12b5b9c 100644 --- a/src/main/java/seedu/financialplanner/storage/LoadData.java +++ b/src/main/java/seedu/financialplanner/storage/LoadData.java @@ -70,21 +70,21 @@ public static void load(String filePath, LocalDate date) throws FinancialPlanner } private static void deleteFutureCashflows(LocalDate currentDate) { - ArrayList tempCashflow = new ArrayList<>(); + ArrayList tempCashflowList = new ArrayList<>(); int indexToDelete = 0; for (Cashflow cashflow : cashflowList.list) { int recur = cashflow.getRecur(); LocalDate dateOfAddition = cashflow.getDate(); if (recur > 0 && currentDate.isBefore(dateOfAddition)) { Integer integer = indexToDelete; - tempCashflow.add(integer); + tempCashflowList.add(integer); } indexToDelete++; } - if (!tempCashflow.isEmpty()) { + if (!tempCashflowList.isEmpty()) { ui.showMessage("Detected erroneous cashflow entries. Removing future cashflows..."); - for (int i = 0; i < tempCashflow.size(); i++) { - indexToDelete = tempCashflow.get(i) - i; + for (int i = 0; i < tempCashflowList.size(); i++) { + indexToDelete = tempCashflowList.get(i) - i; // deleteCashflowWithoutCategory takes in list index starting from 1, indexToDelete starts from 0 int indexStartingFromOne = indexToDelete + 1; cashflowList.deleteCashflowWithoutCategory(indexStartingFromOne); @@ -94,14 +94,14 @@ private static void deleteFutureCashflows(LocalDate currentDate) { private static void addRecurringCashflows(LocalDate currentDate) throws FinancialPlannerException { ui.showMessage("Adding any recurring cashflows..."); - ArrayList tempCashflow = new ArrayList<>(); + ArrayList tempCashflowList = new ArrayList<>(); for (Cashflow cashflow : cashflowList.list) { int recur = cashflow.getRecur(); LocalDate dateOfAddition = cashflow.getDate(); boolean hasRecurred = cashflow.getHasRecurred(); - addRecurringCashflowToTempList(currentDate, cashflow, recur, dateOfAddition, tempCashflow, hasRecurred); + addRecurringCashflowToTempList(currentDate, cashflow, recur, dateOfAddition, tempCashflowList, hasRecurred); } - for (Cashflow cashflow : tempCashflow) { + for (Cashflow cashflow : tempCashflowList) { cashflowList.load(cashflow); ui.printAddedCashflow(cashflow); } @@ -109,16 +109,16 @@ private static void addRecurringCashflows(LocalDate currentDate) throws Financia private static void addRecurringCashflowToTempList(LocalDate currentDate , Cashflow cashflow, int recur, LocalDate dateOfAddition - , ArrayList tempCashflow, boolean hasRecurred) throws FinancialPlannerException { + , ArrayList tempCashflowList, boolean hasRecurred) throws FinancialPlannerException { if (recur > 0 && !hasRecurred) { dateOfAddition = dateOfAddition.plusDays(recur); - identifyRecurredCashflows(currentDate, cashflow, recur, dateOfAddition, tempCashflow); + identifyRecurredCashflows(currentDate, cashflow, recur, dateOfAddition, tempCashflowList); } } private static void identifyRecurredCashflows(LocalDate currentDate , Cashflow cashflow, int recur, LocalDate dateOfAddition - , ArrayList tempCashflow) throws FinancialPlannerException { + , ArrayList tempCashflowList) throws FinancialPlannerException { while (currentDate.isAfter(dateOfAddition) || currentDate.isEqual(dateOfAddition)) { cashflow.setHasRecurred(true); Cashflow toAdd; @@ -130,7 +130,7 @@ private static void identifyRecurredCashflows(LocalDate currentDate throw new FinancialPlannerException("Error adding recurring cashflows"); } toAdd.setDate(dateOfAddition); - tempCashflow.add(toAdd); + tempCashflowList.add(toAdd); cashflow = toAdd; dateOfAddition = dateOfAddition.plusDays(recur); } From be00b218ca3950819a4704bbb187acd9c0f43636 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 22:50:26 +0800 Subject: [PATCH 07/27] Update cashflow diagrams --- .../{ => cashflow}/AddCashflowSequence.puml | 15 ++++++++++++--- .../{ => cashflow}/CashflowClassDiagram.puml | 13 +++++++++++-- docs/images/AddCashflowSequence.png | Bin 40300 -> 0 bytes docs/images/CashflowClassDiagram.png | Bin 25368 -> 0 bytes docs/images/cashflow/AddCashflowSequence.png | Bin 0 -> 43896 bytes docs/images/cashflow/CashflowClassDiagram.png | Bin 0 -> 75612 bytes 6 files changed, 23 insertions(+), 5 deletions(-) rename docs/diagrams/{ => cashflow}/AddCashflowSequence.puml (78%) rename docs/diagrams/{ => cashflow}/CashflowClassDiagram.puml (90%) delete mode 100644 docs/images/AddCashflowSequence.png delete mode 100644 docs/images/CashflowClassDiagram.png create mode 100644 docs/images/cashflow/AddCashflowSequence.png create mode 100644 docs/images/cashflow/CashflowClassDiagram.png diff --git a/docs/diagrams/AddCashflowSequence.puml b/docs/diagrams/cashflow/AddCashflowSequence.puml similarity index 78% rename from docs/diagrams/AddCashflowSequence.puml rename to docs/diagrams/cashflow/AddCashflowSequence.puml index 47f89d6775..1b69eec33d 100644 --- a/docs/diagrams/AddCashflowSequence.puml +++ b/docs/diagrams/cashflow/AddCashflowSequence.puml @@ -1,29 +1,38 @@ @startuml participant ":AddCashflowCommand" as AddCashflowCommand -participant "CashflowList" as CashflowList +participant ":CashflowList" as CashflowList participant ":Income" as Income participant ":Expense" as Expense -participant "Ui" as Ui +participant ":Ui" as Ui -> AddCashflowCommand: execute() +activate AddCashflowCommand alt income AddCashflowCommand -> CashflowList: addIncome(amount, incomeType, recur, description) + activate CashflowList create Income CashflowList -> Income: Income(value, type, recur, description) + activate Income Income -> Income: addIncomeValue() + return CashflowList -> CashflowList: addToList(toAdd) CashflowList -> Ui: printAddedCashflow(toAdd) + return else expense AddCashflowCommand -> CashflowList: addExpense(amount, incomeType, recur, description) + activate CashflowList create Expense CashflowList -> Expense: Expense(value, type, recur, description) + activate Expense Expense -> Expense: addExpenseValue() + return CashflowList -> CashflowList: addToList(toAdd) CashflowList -> Ui: printAddedCashflow(toAdd) -else invalid command + return end +return hide footbox @enduml \ No newline at end of file diff --git a/docs/diagrams/CashflowClassDiagram.puml b/docs/diagrams/cashflow/CashflowClassDiagram.puml similarity index 90% rename from docs/diagrams/CashflowClassDiagram.puml rename to docs/diagrams/cashflow/CashflowClassDiagram.puml index c11060164d..f3f3fbf033 100644 --- a/docs/diagrams/CashflowClassDiagram.puml +++ b/docs/diagrams/cashflow/CashflowClassDiagram.puml @@ -41,11 +41,20 @@ Class AddCashflowCommand #HoneyDew { } enum "<>\nExpenseType" as ExpenseType #MintCream { - DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS + DINING + ENTERTAINMENT + SHOPPING + TRAVEL + INSURANCE + NECESSITIES + OTHERS } enum "<>\nIncomeType" as IncomeType #MintCream{ - SALARY, INVESTMENTS, ALLOWANCE, OTHERS + SALARY + INVESTMENTS + ALLOWANCE + OTHERS } CashflowList -right-> "1" Ui diff --git a/docs/images/AddCashflowSequence.png b/docs/images/AddCashflowSequence.png deleted file mode 100644 index 56a6148bbbadef1d5065273f84bed87a21e2aa0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40300 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 ZsQez3n}m2RUPb&n*+WXwnUW^w{|`F@B`5#@ diff --git a/docs/images/CashflowClassDiagram.png b/docs/images/CashflowClassDiagram.png deleted file mode 100644 index 8a4ea7028dcb498b14e6116d8bb311feac24a715..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25368 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 Tu89Alf}pqGaNiTnqu2femfzb! diff --git a/docs/images/cashflow/AddCashflowSequence.png b/docs/images/cashflow/AddCashflowSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..7d0c4997b3b75eda20d044dc370f5de9b7388f19 GIT binary patch literal 43896 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

Nf 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 JAgcfBe*p^6XNv#; literal 0 HcmV?d00001 From b5ba1de282b9c2a5191fd57f446583d93f397509 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 22:50:49 +0800 Subject: [PATCH 08/27] Change method name for clarity --- .../seedu/financialplanner/storage/LoadData.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/financialplanner/storage/LoadData.java b/src/main/java/seedu/financialplanner/storage/LoadData.java index 66a12b5b9c..7cd9b5bafd 100644 --- a/src/main/java/seedu/financialplanner/storage/LoadData.java +++ b/src/main/java/seedu/financialplanner/storage/LoadData.java @@ -99,7 +99,7 @@ private static void addRecurringCashflows(LocalDate currentDate) throws Financia int recur = cashflow.getRecur(); LocalDate dateOfAddition = cashflow.getDate(); boolean hasRecurred = cashflow.getHasRecurred(); - addRecurringCashflowToTempList(currentDate, cashflow, recur, dateOfAddition, tempCashflowList, hasRecurred); + identifyRecurringCashflows(currentDate, cashflow, recur, dateOfAddition, tempCashflowList, hasRecurred); } for (Cashflow cashflow : tempCashflowList) { cashflowList.load(cashflow); @@ -107,16 +107,16 @@ private static void addRecurringCashflows(LocalDate currentDate) throws Financia } } - private static void addRecurringCashflowToTempList(LocalDate currentDate + private static void identifyRecurringCashflows(LocalDate currentDate , Cashflow cashflow, int recur, LocalDate dateOfAddition , ArrayList tempCashflowList, boolean hasRecurred) throws FinancialPlannerException { if (recur > 0 && !hasRecurred) { dateOfAddition = dateOfAddition.plusDays(recur); - identifyRecurredCashflows(currentDate, cashflow, recur, dateOfAddition, tempCashflowList); + addRecurringCashflowToTempList(currentDate, cashflow, recur, dateOfAddition, tempCashflowList); } } - private static void identifyRecurredCashflows(LocalDate currentDate + private static void addRecurringCashflowToTempList(LocalDate currentDate , Cashflow cashflow, int recur, LocalDate dateOfAddition , ArrayList tempCashflowList) throws FinancialPlannerException { while (currentDate.isAfter(dateOfAddition) || currentDate.isEqual(dateOfAddition)) { @@ -130,12 +130,16 @@ private static void identifyRecurredCashflows(LocalDate currentDate throw new FinancialPlannerException("Error adding recurring cashflows"); } toAdd.setDate(dateOfAddition); - tempCashflowList.add(toAdd); + addToTempList(tempCashflowList, toAdd); cashflow = toAdd; dateOfAddition = dateOfAddition.plusDays(recur); } } + private static void addToTempList(ArrayList tempCashflowList, Cashflow toAdd) { + tempCashflowList.add(toAdd); + } + private static void handleCorruptedFile(String message) throws FinancialPlannerException { ui.showMessage("File appears to be corrupted. Do you want to create a new file? (Y/N)"); if (createNewFile()) { From e7355e47d8a1a41484cfba5a93cb23752e7491a6 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 22:51:21 +0800 Subject: [PATCH 09/27] Update DG with recur feature --- docs/DeveloperGuide.md | 62 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 20b2dd583b..1c7808d9bf 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -132,7 +132,7 @@ add income /a 100 /t salary /r 30 Below are the steps that shows the implementation of add income/expense. #### Step 1 -The AddCashflowCommand instance then calls addIncome() or addExpense(), depending on what `category` is initialised as. +The AddCashflowCommand instance calls addIncome() or addExpense(), depending on what `category` is initialised as. addIncome() or addExpense() instantiates an Income or Expense object respectively. @@ -159,11 +159,67 @@ The added income/expense is then displayed to the user through the Ui. #### Diagrams Given below is the class diagram showing the class structure of the add income/expense mechanism: -![](images/CashflowClassDiagram.png) +![](images/cashflow/CashflowClassDiagram.png) Given below is the sequence diagram showing the add income/expense mechanism: -![](images/AddCashflowSequence.png) +![](images/cashflow/AddCashflowSequence.png) +### Recurring Cashflow Feature +This feature is called from the user through the `/r` argument in add income/expense command. +If a cashflow is set to be recurring, the program would add another entry of the same cashflow to the Financial Planner after a set period of time. + +Below are the steps that shows the implementation of the recurring cashflow feature. + +#### Step 1 +Once the cashflow is set to be recurring, its corresponding `Cashflow` object would store the date at which the cashflow was added to the Financial Planner. + +The `recur` variable in the object would also be instantiated according to the user's input. + +An additional `boolean` variable, `hasRecurred` is stored in the object and is set to `false` by default. + +Example: +``` +public abstract class Cashflow { + protected int recur; + protected LocalDate date; + protected boolean hasRecurred; +} +``` +#### Step 2 +When the Financial Planner is started again in the future, the date of startup would be collected. + +After loading existing saved cashflows from data.txt, the program will check for cashflows that are set to be recurring and has not recurred. + +Example: +``` +if (recur > 0 && !hasRecurred) { + ... +} +``` + +#### Step 3 +Once a cashflow matches the above criteria, the date of its next addition to the Financial Planner, `dateOfAddition`, would be determined. + +`dateOfAddition` would be compared to the current date, and if the current date is after or equal to `dateOfAddition`, an identical cashflow would be instantiated. + +This identical cashflow would then have its `date` variable set to `dateOfAddition`, then this cashflow would be added to a temporary list, `tempCashflowList`. + +The original cashflow would then have its `hasRecurred` variable be set to `true`. + +#### Step 4 +Each cashflow in `tempCashflowList` goes through **Step 3** again, so that multiple cashflows can be added if it has recurred more than once. + +Once the process is done, all cashflows in `tempCashflowList` are then added to the Financial Planner. + +The added cashflows are then displayed to the user. + +#### Diagrams +Given below is the class diagram showing the class structure of the recurring cashflow mechanism: +![](images/cashflow/RecurClassDiagram.png) + +Given below is the sequence diagram showing the recurring cashflow mechanism: +![](images/cashflow/RecurSequence.png) +![](images/cashflow/AddRecurringSequence.png) ### Budget Feature From bedd062b6caa3ca7d421fc13e66a28684908dad6 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 22:51:44 +0800 Subject: [PATCH 10/27] Add recur class and sequence diagrams --- .../cashflow/AddRecurringSequence.puml | 26 ++++++++++ docs/diagrams/cashflow/RecurClassDiagram.puml | 46 ++++++++++++++++++ docs/diagrams/cashflow/RecurSequence.puml | 31 ++++++++++++ docs/images/cashflow/AddRecurringSequence.png | Bin 0 -> 32996 bytes docs/images/cashflow/RecurClassDiagram.png | Bin 0 -> 54180 bytes docs/images/cashflow/RecurSequence.png | Bin 0 -> 38665 bytes 6 files changed, 103 insertions(+) create mode 100644 docs/diagrams/cashflow/AddRecurringSequence.puml create mode 100644 docs/diagrams/cashflow/RecurClassDiagram.puml create mode 100644 docs/diagrams/cashflow/RecurSequence.puml create mode 100644 docs/images/cashflow/AddRecurringSequence.png create mode 100644 docs/images/cashflow/RecurClassDiagram.png create mode 100644 docs/images/cashflow/RecurSequence.png diff --git a/docs/diagrams/cashflow/AddRecurringSequence.puml b/docs/diagrams/cashflow/AddRecurringSequence.puml new file mode 100644 index 0000000000..e6cde521c2 --- /dev/null +++ b/docs/diagrams/cashflow/AddRecurringSequence.puml @@ -0,0 +1,26 @@ +@startuml +mainframe sd add recurring cashflows to templist + +participant "<>\nLoadData" as LoadData +participant ":Income" as Income +participant ":Expense" as Expense + +loop current date is after or equals next recurring date + LoadData -> Cashflow: setHasRecurred(true) + +alt income + create Income + LoadData -> Income: Income((Income) cashflow) + LoadData -> Income: setDate(dateOfAddition) + LoadData -> LoadData: addToTempList(tempCashflowList, toAdd) + +else expense + create Expense + LoadData -> Expense: Expense((Expense) cashflow) + LoadData -> Expense: setDate(dateOfAddition) + LoadData -> LoadData: addToTempList(tempCashflowList, toAdd) +end + +end +hide footbox +@enduml \ No newline at end of file diff --git a/docs/diagrams/cashflow/RecurClassDiagram.puml b/docs/diagrams/cashflow/RecurClassDiagram.puml new file mode 100644 index 0000000000..9da06ba216 --- /dev/null +++ b/docs/diagrams/cashflow/RecurClassDiagram.puml @@ -0,0 +1,46 @@ +@startuml +'https://plantuml.com/class-diagram +skinparam classFontColor automatic + +Class "{abstract}\nLoadData" as LoadData #HoneyDew { + -addRecurringCashflows(currentDate: LocalDate) + -identifyRecurringCashflows(currentDate: LocalDate, cashflow: Cashflow, recur: int, dateOfAddition: LocalDate, tempCashflowList: ArrayList, hasRecurred: boolean) + -addRecurringCashflowToTempList(currentDate: LocalDate, cashflow: Cashflow, recur: int, dateOfAddition: LocalDate, tempCashflowList: ArrayList) + -addToTempList(tempCashflowList: ArrayList, toAdd: Cashflow) + +} + +Class "{abstract}\nCashflow" as Cashflow #MistyRose { + #recur: int + #date: LocalDate; + #hasRecurred: boolean; + +setHasRecurred(hasRecurred: boolean) + +setDate(date: LocalDate) +} + +Class Expense #MistyRose extends Cashflow{ + +Expense(expense: Expense) +} + +Class Income #MistyRose extends Cashflow{ + +Income(income: Income) +} + +Class Ui #Cornsilk { + +printAddedCashflow(entry: Cashflow) +} + +Class CashflowList #Cornsilk { + +load(entry: Cashflow) +} + +LoadData -up-> "1" CashflowList +LoadData -up-> "1" Ui +LoadData .up.> Income +LoadData .up.> Expense +LoadData .up.> Cashflow +CashflowList -up-> "*" Cashflow + +hide Circle +skinparam classAttributeIconSize 0 +@enduml \ No newline at end of file diff --git a/docs/diagrams/cashflow/RecurSequence.puml b/docs/diagrams/cashflow/RecurSequence.puml new file mode 100644 index 0000000000..c0fb71b6b0 --- /dev/null +++ b/docs/diagrams/cashflow/RecurSequence.puml @@ -0,0 +1,31 @@ +@startuml + +participant ":LoadData" as LoadData +participant ":Cashflow" as Cashflow +participant ":Income" as Income +participant ":Expense" as Expense +participant ":CashflowList" as CashflowList +participant ":Ui" as Ui + +LoadData -> LoadData: addRecurringCashflows(date); +activate LoadData +loop for each cashflow in cashflowList + LoadData -> LoadData: identifyRecurringCashflows(currentDate, cashflow, recur, dateOfAddition, tempCashflowList, hasRecurred) + activate LoadData +opt is Recurring and has not Recurred + LoadData -> LoadData: addRecurringCashflowToTempList(currentDate, cashflow, recur, dateOfAddition, tempCashflowList) + activate LoadData +ref over LoadData, Expense: add recurring cashflows to templist +return + +return +end + +end +loop for each cashflow in tempCashflowList + LoadData -> CashflowList: load(cashflow) + LoadData -> Ui: printAddedCashflow(cashflow) +end +return +hide footbox +@enduml \ No newline at end of file diff --git a/docs/images/cashflow/AddRecurringSequence.png b/docs/images/cashflow/AddRecurringSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc106550d818a6e42b81dfb3f36a18f2cd2df85 GIT binary patch literal 32996 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

rkx8c@an|KFufI@H z`Ucd>54S-Uu23;$=rW&@gUOA*Pj3c-D~uQG+#F?JD*SUBKukq_-yI)YQWgqi1e&^T z8Z6QBlrSr|Tz0&pI$Q+TGZ};B3Iusy2!62InTb8PzlP{X)$%WDVnFmU-QFh~DRV8( zQR^OU3(+5HeFFsZ{1FgKd7vO0xO!L*1+w!Mm?}|FJNCXalN`Ze&z@ ze-jvwfoB9%=tq6selv<`RA0(T=OOEGtUwG+EC!6gvR6mM9@PxCjcNuX0nK2oR=Cp3 zpr>wQU&RUzrPI44@F_n^P4YaGmA~<0%1xyU(q5A~^29>$pZ>1$;SrSDWK7`ayt6FH z|NWmj6EhyuM!1mg%1G&3o*0G{Z1zm;^{!&ZW6pCTZoynLdXtFVSRSwBjRno z1+`b@wJC(~ev26y=Gd%nmbdJWK#0 z?biq2%1}Oh{PU!me`VXM)P5dDlOj!W;@Y?e^1Z2q0Xl9@A*A9&ox>AL!BsnuFr5Xw zpSjS<;lcNdN*fs)_k?(T#4MuVkYUsVu zF!R&mWvf2i@>eBG&SVuNQg-T~kcA4o)N25c{na-PI>=B+=SufmPJ*lfCw7bj@CLH1 z&S;L?Ybn#;88lBo`sF5dE7nv)cY(GtZKYR`J!A1m9Tr6z0xR*!E zo3wrMi`A@ns6{Bx&goBvPg!GaL{9mpxxvOitI`hqtf8>pJA*U9cyoEyMcpa;{IA!_xo6Ktpxve zN~~MC{d&yCJ|P-f94!dtH&{?(oiL zk5@WUo)iJ5K@0npVL9a=Pe|VWF6#k0tWvwohcZ-hhKo!Fk|YSzL#U~#A3S(at1SZ7 z_Zl@}@-9Zu9T;tOx-r0fq?nP9Z?v(|V4*91tlYLBKR;c&=B!)$>^y@SJZmF2V7?60 z15~tKMG*Pc^Br00C3_ni4qG!HH|%eL1>XU)DYVG5?b!22G&JiYCFbBE*teOYxGZ0< zk5_>Pg2{1$wPeAnDO`-%oHk>M-xL$n> z?@kaA5)x{U

x{*qE+Uq8=$UBIJ(-&FZe(N4uHL!CiES`K3V5G%>u7je+299^Uv=JHLU?(J0OJqo>+8=A=II37iffsNjwE8P_R8Jx7HVa)}zTBCl#k-Z1rjW9?&^^6gb57jx_BuawVt!+1=hLT8 zL^5?W%F4>XTi~OmPx_O>Sq;F_u=ddcfmt;x?4-HC2%;PxaLf>xL1#=+UY_ImS(U{@ zF+01xra;OxiYk{w7#GGvl^iXz-el>QFDZ5{02iQF$-ch-Mi#hsM>Ra~#fukTA|o3c z8?o&#+OLg+<`H_4nXak zk&zL&0>vn%z+FK%zU5#XQjSdZlI-~SSJ6DS3r>mNGNtr09la^C@~xN9;;y4C$#k1Z zUbR>wE{6O$jsV|Qw zx2t}##>dBtf(DP}ft0l>yVYS}6T9{CXgH@)&m$I=EpP<2ykEmWS#)T4xFehuBY+&t zbYUt&-}F3u@Zej2e-St*d3pI9t*V5;{q+g=?qfqTnIl3WmI2TS-D3>Ha$IkEr-A1`*%6)*CoBZy{KTo$Nx5Q zX=dtt^AV>w9yr3yU>aEmUJtov&z`Lg7ai{|?@!iY9BI3R$P2|cva+!i>a~Uf1K#Wa z!)mF7z?D8C!owvx2f#sK;E;rbgglDs2t*+C;P4pGycZEMT{hgZ zYq`llwujKoQkz8rr4}#j+dZqt`|FY6;hHsWnx%v@x7h8$HmwQHVptgfSjK$>P=_! z>9j<3wq`|)fU6o8R&1i$c%0A`H*XtzdpsPR*;Uk(EevEUa?kDwx{bECxA*k0u&}`T za{|t{I|aRjH@M5(`I^PrM+XP*I9p703Z?bG4Z z$?uJgygWR^Lqqiq4GBG|b%|mDZEbDU=V#7TcCZZK7Xc&dVkp#80l5rd*F=Z0xmDO z!gOliVUlu~-t@1XUwGEv-;dlIOp(1WEL^wPn_{g1t}(0|H)d9`ug%Rg2V>ygyXg-$ zON462SajT)kq{UEP*!%hFF_=cpY#r(NA|?!Qtfh?w!mu6Hc-bg#zCKp~I|I`Q=<-u&JqO zsK5Z*{+i?2e$6?*!^Te#{b9`7#2wALF)=aK)z!7~wAaCYtSl@x_V>>>COs{1fx+*C zOv|U@`}gN6Dg!^V)Wt+ZKzKsAaJ)+gd7q8TbC=}heVb0B26qC8dp8vJ0-I9gpq3U5zBSt#rmm)j zOTtDAfk<%Sh|B;J0oa~(kAFB1HeLIm$y*|r`tac3x)=!NxEId=UWft=WHTSpKMk0}V&!0cn*H5+}@p;Q> zK0Y`ya(=X&Q;R8=V#NI}F%JDe!3+(p2@jw^f>7rq0NmMy1w#Xa+oYteu5}NHgwM{- zfY%cEdqkXq;LB1g;&IwZwYZGc2dEG#h)!s(qoHlx0L#qP)6)|X6Du+5ZK$uOdhkGq z3#YyfxP2t2`PqQBJ0{K3QxIa*4++F5%@gtt-G=xAD-X+S#8Rc~X_i{N`u+hQP=IgWz5ynJFC+ZK?&sG_bgTzm-4E?g4mODy)qd7x^!bs$5)%_U zVn(2x;VA^fuC0WWl#Q(|QikBxt=*-5dT^xX?x(vd08(Xtxn#md9iE_61e*jG*0oh& z65yD(QISuJa?Gz_D#;fR~-c0H4tqc)TOWpMMAn9^n1Iwten0$spBQzkLJ%s~=prfNp z2Mi!PI~x-dv)1TyDY%#cmNzyuV9~^V`8J}B-3z!13dii%wNT&uN&`%zy$9g<=g*hc z*4y}$q8gc9%xXYow*5h-BV4wZ-r|uMFnZ%7YDqm*%~D zcU472W$6y!J1E*}L~BV6PF<(r#w0C~bBb(i1K4gm@HN0hyb{58z)qupJq8C~0DKk` zYdknO05OQU|0c)~WDLc{#mw5(;5|eKM@LSMj+nnd>n4EtCNN%4NlAHufxHh|t~o!= z0esrZD&OMrBaf=nTd`kJ)bgDiBwo?^U?V;@HumGkk0mAc#>VLuBv2ks&XTS!xk*}a ztYbrD&H0)7FR=2uj39tQ=ss&{X(>|Aw@2G5$u1f?VfE}5b90R)n%rRrqu8s-} zd~oj?+8Y=qc$qKQa(!c?{bCQe3g7^2hlYk~`Q!Q=j`z&=*Ty(a2PvY^nt7b}OhNbp ztYn_Nn%W35I!z6Y@fvp&X?oKGP#IbcSht9XND;`L`ulH9yvBIMz|hv-4mdl(JovM? z2)TD{H;zT(Ttu@#-wzeKP*7>4ZH@r}aPOWe94_$s`v;J(T~CQugi1){<>op7iVAGW zL{Faq_&>OM3Bj2srKAArHaRv8-V4Q~BIIvHarV5tynujCaIL@Vl~V(5@1xcTd;^62 z!zf<+j-H+^05ZT;1Abw-LFMT!w73vq{ zg5qUgs(h`yTmasEft|H6=l*o1TF_ZQD-BL{MqFIn!qU}p|P>Xd0(a!#>QvC2D*ggoiMpshNMvN>$mVpTS1%ghe~3f8 zho>h$AKyEacgLZphEPbL7QVfWVzPUCGAN9@;sPJY)&w`R`{_}U#bszJhyXwo%qFTe ze|g|F9I(9iSV>`Fw-L>b+jIO*JK|h86k7+II@s90zPFhHa6GTDn)N9w<36KD-Q#fZ zp1Tqf5+H5OFDwKw{GBHA=^73>9~T>&A{Q3&se{A8n@d-IElMs9SgzE0e@)ZHr4o?G z=;$$!Eda##az>*iCMA`;jmH$(vj~ZVMYLsoX`D?kCt`;5WZiw?*>me063te zsHnIMhDtRx2?+?^^`dE8ou9b^#9AK6!KR7pD|OsX4i6uya^8PO7>BM%U17UitkZ~# zGGvHhYKYuDesHsLaeZm|`T?JkNu!h^3ccx?lidgaVgTac2_dR^uSH@7TsL}DC%J(8 z`w}y1RXI_i96kseLEsY&l5#+II-cgxWipdWmEP&;sN za+=BsyMzWsOsPXySy{v0zhl6SxKDiNO-S+8&TT?GVy!uh_YBveP$+>`h_Poz)z^Y1 z^K8rBxVq zD7gG!3bt7>6t{S@kSB6;rd9PGkNaX!{lRll3EFA|3!g(b=v~r1FY~1k2^t$I!Jo8E zBQG8956mo#occx(`m72X#^ACyK{T{HLLmL4AY)2s#&?LUh8=I<1wj8oquzIk$j%OJ z`<3xBnUmCq*MnO5jwkLeQ7Tb!d zt$_MUBV7&$W(7Oe+e;6RE5bOx7nC*UQ(4y$pHh$;aNDlj?tB8z=CAnv+>3UiASCHu z?_*#x8fj76w$6c1++2T8qz{&-C{Z;GI)Q-z3PhsIQj?miwOL#xbZ$`8GMpAiF7JalL!(){~$SsNI}vcj14 zr?2rH6)Kyi5;$~uh;XLbHC9oC+|rb>YMjMwiAGcye5`T8UZ-PRf-X*thPRA&U&)(- zFx}6G%g^|4a~_JwKW29yC*o7|G!5{nJp)NIO?)Hc(LzuH1eLf-(87>? z4kkE28@9$^O~9%$G|n$H}AL#KLP&b z>ckC{M&&Hyr?!DO`3ZOSx6^@tu?e`g&~j8i(zWwjQc8olZQBysF}NXJwogb_Rco}O z^Yv`iUW8Mvfg#*g)2w+{p4Thyk;&BBWP>Gd&3d-`FsJ!-vFK)-UY(Aim*?2k}GQ z;V0_21`htndCr}caJVcOiH*4j^!e6go+1-M}QDa1ZM)$RKLvyix zWTITS#z9>hXo62O%O8U__p3Xo7zHY~^h)q9+;ffo*rdfNn>XQ-$5>aOsl~@2ZfNGbZ}u*k#mDOxTf3 zL7TNTTw-Ya;U&g!;}y1fwO7gU?OchK3G-FjU(OLqp`>5p_g{95-A|GW3K( zFjGV7srnXLHc;g}KLdlL?rkfl1S!g$!Y@bU_P3p0YyRrslFe%eKfht7_M+Pl%q<(q zF2$OT)_(s!-tfKxn_v1I3@VpP_lMvTfvNGxbj?I`eu%r{GEYf$kS$bV>-;%g7<8$h zDK*3@hu<#zE+@RLW*Q7xldSYsk&d{4pTXgGT?ap~q3+{G83ek^0m23yOSMaB$&U(#bte`(Ih{NkktKXYxuFKByMxV~R;$ zQfxs%N%P^OnlZ@l^n|>BpbH~@ddx5aL%;zJz}li3{1&q|DF**)p|Sn zI2MiAkf42&GVy4t0?bs&RG@y<#0*^~Ry5MqWZ>+{OY&n~3aaIhpqcZJicE;U3{5%6 ztd{c%%k=nIyVXvZ8QUGy;NX|Lq}D~jHGRk{$3~s28Opis;MXi*Zs3zZ~Z4?zyK?Ri}AV?AEC{;lL5v3&5(7Q_S(xod3NN*ts2q+MG zla4eMsVXIO5U@}TReFar!QX!O-sk<+I^R0^D+`k6xu3bGTr>AvlWY`|1m(_B;;E!Y z#^`n?!nBVhAUF@lk*_Zr73Jxt*sI3wu6(F|n@+l9{9MC`Ycj*{+nfAZrr1? zL(7-Oq74qia7oqOg>h8LH%0MW?KejyM*h%GeYixc(e5Zi+9TpM zcXKw6Z1hR5hmuCIJhYEK>s8wJ7fVaH?b!Tk-rIIrp}#&@E!QIFuF{<{BFZO}uP$Wz zL9wEdmItdi=7D*MP^hh~B}{TlXJ_O#69~fwoZMSpmiw)}7DQ(53X$R;kd)hYJs)mGq6c7pctHl*a`^2p|Qjp|zEjM4gjD zn>h9|$?{$9>tIqKhArkTUPE(#ia;eeX?MFY+;C~c+i@kaqQZ@~X8k7?&h&B4Ycyk; zdKqysA*s~~Z!0SL%aJF44s9B1^_Wqfr)J$*mDS?L_}A2&cG=oAt_YeY%pt*FkMOO% za(v^#ud69WnX!0W4&%tHYh&p^eU@E2t$j6BCCMdM>#Nj$!?eAj#3#2_B`i9)qqNdy zK=$-E3K-Uj>b z_@m(m-$jgIf(=7UL~XrusE@{#jh5KePkM6tUQav2ZgNEKs3hO%tgfbbw)T4+<=Gdx!Icv;(6?R$9uM*!2w25ynz1Y zXV8;!4fq>>kICWGaV|`cji5{DxWs=spAr?nM4f`%4}rhCZVp6d8Y$|Ovc9Mrezd+> z+x6mzHGAgWeqN_(d3K26D&WW z8df-d4F(a-f2)sC>UR7*@%j!jDYiDK+m0J!tA$bLVi3)SCIngj$c2=jG}&b>@={ZuP;w6oFs78Er?prNRf+y(@8P{O0_G<;J3j?%R(sQA6K?>vm_Is-4XAE3R22 zdASv0eY`C^9B+29&XtJ?sIh$e8PXy2Yie<>uR}ScK>|yOvK-K9dj{ZJreXPfU0{jv zb<`Vw{sX1cyT%?FFNx!p4+d{i6mv!#gr~nw(=ict3nx+2C}#P<-#jM5{r0TMqHI&) z+fO0X)Fd`@SJnrSbCz=twW)Y$K9%y2?KXVd{dOSkb@O72qmjq>^va*PjxQY@9o`lW zMho_xti(vG5AutBw{GmEPPN}NdrDCWm3Pk<``o22%Tvvocv{57}52oZ?cfDS% z_Z0kSiF_+31AfR;H{m5`zNDuTE!O-#7hN=kO7e}`6dz%Yj-KNjLp2@~U9Dl=#u#Pa z$T|;8DkDh=l{lnImjJ8vd@ZfpbFXvx!2-Hrx~ccMzS1PNX32;e-zcA-UkPnDxUcmd zrT6?k7vF`28ua_$FKt-@ERU0#yyFyMK%P_#YkT-*n;3cWHts35?8FC@-Zi$JHM-uq zJVC|_xZPGLd_1=}~&P#BPV4+j=KOZiwK-(Oh#u*dUli5sn3K71x z#Wws@`lT>}ZgNrF&e`RmuNp| zId&frRuy%Qy!*_lW*4;(cep8Avkp|>ufhRfmR`{xes&^-;}{(1z{w}vvIg?O|HwH2 zTc#Oy!9-G05>_~^UZ7o!Cc4b1g9xSMWhctL;K;&Glg4-<44+1Y!D$IR41+=u<01^C zJ4f%@k=&`Z@k<0~9Nw?vx#SCSZvEh#Ka;5-Koz z9`60`)n3t;{|{NlHoaUsi8=Qq;~3KFte_1t*m&lc@!8n@pO;{r&lS?C8jx187dAiw zN}GnT&nJB2aVXP%3~KA(F_B{MzqO+FUyFSl|IgL@vBbBj|68rjn%K5PFw$N%n)v?~ zO}WFkFVxn&bJxiJwZ6kEvhinp`i}>My@Z|-IFSidDL49nIvV8y>VF3$mi_Qk09xli zH1UOiR)y^lL33c&|1GlRS!eIr%xokr8qZukROz<1qkkQZKS$V9GoS8=Y*89>DlDmP z`%sVEmI{5Y;`J~|iJP`MH&s%ccK>W=zvyX?F^;~j_J&s3j=aJ5PfwCfyMYg-yI$*? z1}_)8o{a8DB(3t<_}*BboAC{Pj=Bl_5ArXBhKGNRzd8=b9h;|S)fpA zmOt0bXc~3MbBN7!%Dm!u^xr+t6Wq&Vi=5HZ%+pxrEaEjudHEndQ4LLR%2k)=wWs<9 zI^nP3G880={Wz@RwODjZOa)V$zEvMoVEEKo?}bpg>51JKyh*!dq{}N!ob0wgA*JER zklK7iNcO6+ppq)euQ_5yyS${OWgr)+V$$?dHl0haj5F1`PcR&tuUU#>FLG*k@u~9g zXsE06vD*0A&MWqaRu)A+;6K;t)7rqkGXPsKG zGZPSE5xk6))u2b-Sc4YMIWzPi?9-dI>E${^%8*WI1_T7r&o6NddsdwF;%5j}4UfDM@BQ&(6Hs#Y8`9MOpkfHaBj=TI4mhG2Ygsqrf z?W-6ls<<$*7b;m`^wK(9*fAo+jh-9riR_<)My|&N{8Fsexz0J>KkJ;|3dZ46d&Nx_#NML`{e~Vvj%*vpDbKEbz zwARO0O&4`%n(I?nn&|BH1gYBEv@an-DOf05e}nE6&<8{pDp%>EnEw%KQ!eMYBPt~I zSEE|mxcEr=UXP2DTdQu%I$}Bk@wYyuahzGWW1w&{Ig665iX4K|bKX9bY*3KeZR4A( zSK|wNIt_*!D(`lu?cH>LSOdn8H-i_eRdJ{oY0Gj=%2e{tQs!UY+fc^ix`+2B`#$r| z8V;^Ob;36mPRGLNc3ijPwAPnpMES_v-1(HNpS^RB>u~k$?3h}cK}nz`#~fZ)rC3Wn zMm@mmBsYDjSlVZkLv!ig5!d=y68OC%n361`07;7s`g|CS=xFAh4%mKEmaz8rk*rKY zJ3wbL+i_h{!{qp6%MgFxe-g zDZljjdfz&~=z8h9L6u8ZwfLf~1^XsWZN2M}^kX-Dwq1H-em0R+u37QMoq8#dsCUCu zwQ^WWYd^=sFlWDUXF#9oqejJC9mr!@m# zuMX?1uvt=;3SG+lh(mU&VF=B`XPg zGD`v#EHALmhr#Zo9-=(BF-_pcqdUYKDeQk|c*Sbe_o)VdQql#RCUDqBZuKwt+e|dwwtbYd|raiDftq3k6 zeYq?neSZ9%OD1*FDu0MOHUy8${F=ay z^waYPQD@qs#)7%=_>ua1d!8<>O9e?8q+Pj=D?bB5vy?_lOru|?T)$q3TaQYS(4i}T z=x9E)d1F3F4W>t0j5zUHp7>d|cmk`C{7&xpXsU$h(4F>T%lMs3(m_$FZ${m|CaF0P zhcVRHOgbUvc1t6nn=B|*kN1^$0Pp#_Gs&A4r5e<_$#di8ShZ};axzAw1D>X@MEqcm!xPJ26j;k@%w5yP=e62*mOUXFUQSI;Dt+4bDf613B6 zxj1f?Zf%t_fBiK%b-jm&R9;ZOM_E;5PyJQ3B4rVL?Wx>YGL;KAqmc2cHMeIj>KWSY zdmRxm`MiBlfbAXjo*B%{47cfC*cJPgEu+&$TvMqVJA5yhyhLzLDQw@zH@N2v9Up&A z?u~hUGAmrhLU(z1?|m@>-iiHyiIEjGd{~p=hNI%?KN|mnd*rTWIsEli>n09#-m&_fld;=y%UWIK6;||g-%qMEj}8n zHCZm<&Nf^5pf2mH7VC5F2jmZG%n+DAyy}UftQ{$7F{Zvco;eSjay>l}L0!X+Eg@!Q zO7$<4S6jYI^YX}5*p{I(0?IWS^dx#8i$~QpuyE2?V8UtdOUu0H)XTo_vq+CCyaXBO|I_SHI8AK`47K_oPX3e>%8h2xz}uW9*J^Lxc_HC5sk_4vJT8^_5a zqd}#$uJ$X+JM;8u)z5FA6;|bG#&G61rK+QBgAbdD?Br$EZc_-YYj3MIozQ=A3IS ziIb(-e^NvD;&d-AlV7%+*TJGZ^pe^?pBVlk>9nrwtiYXce}n(!%`xQ~Z|{SjC9&$m zizR-uTDcdni`y1lanX`a3gq?Mu6du6SRRyID3xSyLQQ>%-dp(EXj`dhrS0?(g}J4w z8}bd6OF}{Whst$=&T>sVG| zxZ!EQ@-zq8)MvTwgzMV;6(a?P`dUwDipthmoj*oN*{r&?s_FH0tGVWC#tv{9FQ3zh zgZ{&*_NKkre$@vh;$;ABnG4^KJU)Dn@?AC+Z~TsE3)N7Oh0Y6nCkc932wGgywiBxZhb(~FP2 zT%Mr7MgsUw@Cz%#RTrVB zPsRN*l5^9?$l7o0me`Ozxc<_kIO}IVpX@UaPT+O)Ss2kHI)d*|AFSdz5)la+Z5Zv+fW zx&EZA@Ordpt#w<^Zf@Jc%A1x%IVyrryTbJ8t_Oq?J&l67CA)s!hPC+%7q0a$tmp+5 zL}B<6xfxjt?m8IXyscZ-{1ETuzDqamRX|Vrb?2G%XS2d1jv)bR{-M<#rN1uOKDHdU z)?*g6T1~$d$~K4C-C3C*5!N(s$}wg(8Eq$WuY8!l$9u2Kyu9hvYcJ4`or4^YQKQij zAi_MuWN0|ehYVFanWqXqDAq_J;~5t=KaAhj7}P;<>q~%#8 zQ*eRD%Kp%=-u6C4kuLbm%SGF~DZ%Njy=vL)FF(N6k%flb&G(x-D<@TKH`dm8&YU?T zrInMPkNA3!?aD>lXJBWJlRsiUh;^JgkA26Beg1vL%eMRj#<+eyv2+yz2jj&#D>dXu z(t!~Ox*}o+I?1s_0Sen6uQ5iT(B1(O(BrYn{#a3(dteoKI?7SdYc6)S#=aX*s28!&QE5?({XP zJAVAfbh7r$ws>^~CqF0IeE7ChhEy`6b^V2t)OvzRg670xo{`CGgz8W)FZQng`5?6l z#gl@^#7nEFr2n)Y+cz4Fh91Z5)4!djn^~HN&g*lL>U=qonZk^;qbK_t{wPO85EjiR z7a@tJVc{u5lPpg`T3r4qcEy6z$Fe8|Ahz1pMx}l6^mWAexAZkwrr_F5|g=VzhE+a4P(>xpMrO?&|)qI@+;xnH@mVL5w#IYOMPRfF=(6 zI;B6HK}{3&t1l$M;#cKfwTsT8k*$7&+363}qf4_pu_Kj;`FN9(0Q7_I!pH-bR=pnk zJlWF}g~pYh_U|+AeL(9J$*z5&6Cw>`@Uq^KLYr~yl;uk9b12s#tF!xCP|XRo(bnBI zDTdbkYKg)~1vrA?gRB73*;Mh0V2MlqKIU@`Yz&q)HXNyTNi_ZYZw2i(X2v2IQFXZ- zjDlt#zuzOjLerYsqP)%=)z8Q9_;ZTg;2XQr%`t{vzSY%rlj8?5W9QEDhFu8@KZx30 z{~Bu9_Bjr1Ih4i}*A{y-X!Vb*bw|5@gnsT2Ltg&)DCnSVjw zl5FOUNSaBau$NX56_wCPGsVo9NI^Q=2*yNLMzzwj9O@OtcI>jc@_4q!w9(Qp2RoO_ z&#)L7RQHxVIM&YrK;29#fBE+uUK~cbI;gXTH?4Lbj1zfi(ylj4F+7otnva=oOX8s& z(IVtkljR92Y<+11w`zI~(t4SZx}~!B@HGOF3rt1odF==9V5%8jegB|F)6Rz;sOqnq zl+sDZH103t3!r@`#>)wrl$(&bVgo>DxfWp@07&LSxE!bN8;urw!12yz#GP z(&B)#d|gBKn`_VJ#wTpmIInUofiZJmduXY`W!B}8+>_}#5hAd@sHc|k=*Z22--4mE zJiI<4%F`schlMYZZw^L_5btcaZ6tYkEmtm?kPf!dID5J+CS`XCTcP6l)cxm6Lg~fw z<27E}&*zp~YsI*Ug`G1Q8ykZ*%qjH(Lxs0!)4JAE#gKZj?wxuqs5%KQH~RQ3zR5T? z`0X5n_GD2p-%RpZ9%SNuK!83>CfU%KR=#z&|^@Y&HLxa`qv~mik!WU zsu;*=W_FX^lh^W77`~&bRLjD~e}Y70}(w=|atPe$JYuN~?~!+>86dX)EVqCCyyLpBQ$fG+G2&6AIQqQsB8484 z+A*}QHI!*wfBx}Y{~;h|O)GCP?aM8}mF-&eBz*R$VJPi`NZ)P+oC&X>V2NdS8g!xk z6v{V*JX0jY-Ir68SjL3t=aYE0m!AIlH{z@~B`%KT^jvAaKo ztc(Mee2-b3&Q%-;DjIv7{-?aq-*X?pq1n5;I9ilvyJ@$*V9dF`+Y#`D(Y#nkx`Q2u zGB>qM29osyFMI*1O~AHlt)7x+7<62>4GhGqlpkRqMIBu^?*1l&t^Tm)ai423Y;M3p zb)&G|CG>q7!_@~B+R>{4=oCTSvSYK2E^5{ojG%6{qm}V9PZ2kJ!?Z6YTro^0$Bv&l zb>_^Jy4`J3{r2ca&(qrlrGkuu^i||dP)T_K1#(q(JUN%dKUL~-3FOHO3XuXTDxJ_j zy__S;{EUyC==RZn6|~i}lqY`)dOZJoc0edI$6O#ZjW|0y|5CS;QGWo{c|k&SSSd%V z%Z7tjFEo%ka{n$(qjBfKvz_;vNAF+L zzs?V&B1)-p=9SnjJp^vsb#|9SndtpB-`Sp<4r8^|PLtd-b8~vNkK4`_vLn%)TKPKr zKslIbl^$UWJf+3dq(gb(0wd#BIa4RHZhQMvm*(W&pg#7k$vG^F7U)yVj5{oEI<`MF zjxM6a`W3CDihuBHza-i;D8NQW)vDqbr>oV`dy;&rQ^*lwcv`v?@5@W?Hwq@Z8jOqR z`|_sXBrPapd7@3ou2iiIf8rO@jq z*%5PNbxBvrq{&D~NT_*rqV8lHR6DUFF<+pSKaN|I^wfpo$4fuqH04(T14B17mRm_E z`E8v#Q9?Ib<=6;nx+kMm_)5$S^hyc{na8aT=|5ZW$d--V2J`7q#qq4V)S1 z9`)KE3HBn?|XR*P@$0s>Cd8ERw26!ZJ zgz)G1?Jf&w7tT|Cb0;Q&*YKSSG&Mt$cMzOa+%0>;ua-s}F1d%blVtF>Re12=0gzNz zXWI6=Wn+IrL##K;34dEuF*-`=h1LPk2(M@-K!5t)&W3tB$fdu?c>Jx2oTqC>yuv=w ziS2ygV$y=_`c;705qm}HXDLgbR#OP|5QE@qe8rZnd^VU2w7@=B3E)))<_theb_)FB zqH&FzUE*01GO8-Kd3xhB{>=K+@OV5S;o*!o9x>NZ!lWvr{rz(u$o3fO=dZ6)oj(uF z(n=9&dga#8g)DWjy8e7RV;rP!t%BF8LxPgjf?m-4`a4o;|Fw1-7)Yvw7v{4abns&l zaet^0C;V@GK;5a}^h|)>?O*EDo(KB`u8`;YoWfWM^b3JbP9blLroVjol3OzuhNvaX z<3g-kqo9eM#TetCF9%uyZIst{W<+!m+sG009lW=i{2SQjnyM<`P=s_o`J$s;Xn-H7 zyn6Z@^gjb#qtT+J3HY-yPD_OQqY2NivFhmoo!XL`_by3#50=|#12r!7$WV;^SS@~T zF3i}slH{JOEDo2j)mGJs5mcV#=3=}QtfDFen@=^wUpGi9!c;xNM_^ zU;nt@0T5aBB&q$G;rP`*hI5xRScwZ7yn%EBo8y`YzxMLhq$R_!4Hd(g?1VLx&rwO0 zgneH4*%S)OV;&L_aV1nohG$s*&w&{*BBo=RPxzO?f|(ns85s2Iy|;jHLrh8<((vk} zZqUPr53hA;6~V?vFkJ6wY2mna>lL<@j~x$lgO=gi;Mi9bqQvlEFF^Nka&}I?A@%6{ z?N_36)19eTDZH>ibN|F4O-XD;f;=g$fCC{?Kx_N`_e8+NgL6DmV&dPsWMrn~Az@*w zYisw2bjmC@p{E`+`5rXRzWa1e48DiS)33BAaD^e7!{)?GI=>N`1A|_rB+tQ(+6d>xlUHff#n= zSe;i({3fps?DQ!bSV6)aavENs8@7}V*xd!n(RmJK7iZ@Y-~y)}*Y&^8#ll0djNjNS zPr@Z2<9lKN=n#&yFoz_dC7P42lxYTQDSLx zW*x*a7dXQL@%_n(vT_BI1Tg-nt{QoNc_{$=hKbSu!sfT$hsAUaob?@}^#7t&j3&(n z)(AB1|5Rs*<-Bsm9DFTYVfD|S6J%tbd)p$$cPRe7`mj}S7YF-0ktzYqts1Za;cy;Q zVn$w20Ic{sBaX#r&)=I%zf8^3($lw2aV8LG&_Iv^I0Cx13rxVkJ(rAs?}Mot3JY6bG`FrR<1cRSUf%rpqAs0s_(g+Q^T!6`<4_N;*0+#u*U zkoLB~KYF`8%n+K}x&xa!LwLSY0)GnN^8yfY7ZxOePY*Q7dScVJX`1)*vl z)wWKxek^~y^bnL9BJCf#C|xoPirFa!7%wBG78I#R==6bPbJK0ka=6TDsKgA6Bl38y zG^ME|VQnY2$;imbK}C!prn0fJZr*DBLX70Mlt4E|MS2YQCg~baQ>*Dd+@l`D%F5atd1-NG z1_+xCKaGw^M-9O_yFV`qbO5lVJuV}-wA2}xTkiA2Yd|8eCzu0tF_?M=1O|fA^fWb@ zO|(XXcz=|F>3vZkh+qiZa5q>)qKJ)bb4=$m=GF^vGsVoo!9k!C;rIx@4Fb~+fW7-2 zc^l*gEiCX|X8FrtiNv0OFyXt}@Q)<<7#rwfIe`fM?U{SiI7*Ns&jikFDUy|Tq zB0|~gPw|;w5XETKk{KW#0&VY+tLyyWTec}lVrdK~=zod1-B1Y@I#i%z2N+(!m>d9! zZk~(UvVzW)g@py+e6^Iuf4N(Xeg#uEoPmrfNsXxGH>w@X)4obe8xLH)=RrX$L-5=* ztb_~t5*+%jY0w$QR(;$!c+n+xW+8P`(}}AMyFcgWeegJTNeaR0`&?q-OcM0QW6B{9 zO-w*~eZcd^VUe9l*C~u&f@R?dTO^tRgqL4+B;+^(`^(U9`bz?kb{nUquTb$~4S*u; z>g*gE67o}sSpuk1HBdtWp!pV%55sl)PqbH9PL!M>*c;Ub=r$pQQwts&ZSVs^U>kUS zy$>h^`1L}ybW#r%$zurl$V*ZwK)nPX2y1l$E<1oC=GGX(LR7!Om;{K!5S{B?@F=~F zKSPwJBmP)4As)m1mU5z00d38V)>MXueg=xG!+8Byg3{~O6E-ho02(Sl31BkG)nyEb z89^BK*>tJob zc=O|BV(E&*m=lu$o?=NM%Bmb(G@u1=>r2p=)J9E5CkB}&m=sJ|Sb&=l{Qn_*_h*EneDY%$S7Uh+?a$dyMV*KNmw%hx`GQB0NxU} zM)r3+UhKig=inScG^T1LN=P~eh7lOM07GS#=tOg#9jB;(<(Rg`K(zE*pQB4X4ekx} z>NzuKH5EO*I859Ciu&^8XCMkDbOy$#Z<@!SHA})cK{j=oUU+kJi7oX3GR>pRepKAS zVbQuT7wF++4ujyq@t_yP(rtynqz8Ukib_C?68Nc|A3>KaxxQH3CT%0-n}mb|f#LO7 z9Fvf2G|%X^JbLu#x6x664SO&sWtp&>QJ^NEd?Jvja07WzB_Qk#Q1|=5t(&w&Y(^R3 z%xo~r;A)tdn7~ng7qXQBz6uEFDva@f8HA86d?BcmG#SATSNnwRhK1eTH$YwB|UUK4^*o9Sk8V5T7JidX(;O0LMp;9D&TLbh5~SJr)>v_sGp8sd4%h z=3I7iAj~slWXpg4SoUUj1490zdlL4&5p)SIAo z2;aVagV5~^Ao6h61Y-_Y#KZ_o0xaguok5rb0m}3Xh7*K?A76RhS@IC+0RbKC5i}&M zv-lC@&=xQh08&cWvKmlBf{hTXb7g+8aX&ft2a*}`$6x;U1ug{X2c(SB=*J}0XI+ZXw0p-tGin(nt574 zDNd|qFW`kl?L+(%7cQ8GAS{el2`DQ;Ah&?nt5u)};{jqiixpv{3C`4^H#-_KI~bn< z0b=tU=z(ep6af60XVJ3hkUV|$Cn4WFbpnx*k3$vemAALF1ckAuKCmJrS>Ox_!Mwi! z*rHlIRji;)q0oy68%P{%8ix@S7464KU1S0`1xX(OaA1Z*l=44RDMfaIO4%v{keP^O zHiXMbq?*RU8m;hY-vLdptgMielmA))?PKmiRARlCeg+(zI#B4jqO_U{LnGdk(n)#j zcFz04NH%6uuDIauc`_`yiojQm@>Wa~#DhDmb=4?E?+fiMS}$1t6b6p(-`Cp*vw?v6 zouqMlnvc2ao^bUvz$cejT?yLM!LrR~I>S82N}cl-l?;`ZuS5;?c1>YC0@3HA(0ohuggU0^ zcKy@F)B=WMu+#gm@7AbLB&{(^y>nt+-zKKUpODJPP!Mssp#3MC@q`Gl=PPNyVS zf0};VdC~*U(4BO}&oc1LTXE7Fykb&8s`I2!eyluy0`YxANdale=hfWs`l?0;P z7)Ld8U2-l~JE^w6vzs0K5n;vH@Og=GtIh6s#YyG6Q?YLPl{QM6(IlhAHqS~bcs7bu z6VwNk6~2=GdjmHFqwWqsB((oF0<;Z2}tyxF+BnkMDBBz-;d*15Hd3kxQf9d=2 zD^R@+B&VDx!o__hgj!V(v4EEpS1EHn&>CLoZV0N)C=m@`e=4EjwEC&r00!R?y|;Zz z7<_x*E{bC{|94wGk-}Zyuza0z)`Tx94QsEMZW!L@@|%ZWCmi$e4VvdStSrm$Qb1V! z=<&zC;KL3Fi!P2Tjy#h+6@!?`pZAzsfn&=ry25hv-I8$eCv=CF@t$l8J9~AFe!yfT z?|RV{Ioc}WsEQ)VD#Xadh7Qg2$CODP4ts`ZTFA#BG>A?O7rBFc|y@8h{{H-xrZJaCZG6%kCB ztteP2oL3q#^mKioJ8@DSix9E?n7vZjLBS~0`{BdWy~N3t!RcgA7rj!~uhqrQF7g#~ zLrnF)@_3DyGY2+1#uP>p_k%w3VZYy9vE!bW=@*!nlNnJ@Ol#ikuA|*({aHfRlZpH+iT>P2 zLwz15?A-8JH}wc0$T#5_!SlQ)vl_}Yo1BSLF_z-PK9@Lc;y@Z>c=>8eeUZGfif2%i zM4X)Rr=$~z>2txKH~5`Z{NvJB?uG>wT|$Md7GLtP1823rwUN5MzMiyUuhma*W-s~v zc`Tvp9l{QywQVX&Xx*u{9Gfhsi7x`)-yZ#^3xm%S5nZGFUmo$YzrD}9g2CcD2{4q2 zXzg{P`so*>gZE9}_(sj#lb{D8kEIoU9BUji-HcG7_U#{EGeGjaIx{ouc@ zRrwPJwLijS@UDZGE4mcDto}SOh=v>W!eBDmS&o=m)N=TJQ{TOmw9*TNFP;78OD=lt z9G6m7>3TWb$G$-s$c^V$h2w@Sm(5s=hsbR2mzP{7peli3OsrTb--9Zjto4La(~f;Z zH-t(YcU&U&vX+C95~f5wQrVjN43o$pSKayKQSifg6$QN^1P6;bdT8CVckvr9&LrQw zapT6O%b$}v7gTX|rXf^Z>&b&HCEhigZuma4t?kLLdLnH40Lbp)DNCXo+zwpZhS|Zj zsAJxvWSj0r8|I_ZL-Yb_A{Mwc-)Te`h)waQ)Yy-Rmp_C%J;4$kYKXYncHL}bA><$> zYAdp~8|$Sbrd$vP-ZMU4o>3@qGu^V>(VE~}j^*>#E6#6?jGnkaf{AHOk}5(jU6mZ* zE>cZj{-A9p0GE8v`sC1KBy;YKRU8{>EmcYsQ$VoTXb)Cj8}VIT==Pr^7hn6Wk!Qrm zEo!oVDtuk(-f+qdlQfqX-)qpPvR0Krh8lUQ>BVU4Cb%9^DAC`YPFwY2aI<6XymF8n ziJL@B^F*nn`|P}Z*cYPP@O5~lGNtEO7P8;|*Ft!igx`=ip7JgB)XCFtmPfZ;)bmtV zuvjXpV{kd%qlbFfABHhutwx?C!dSdei>13*w{drT+G522P^9<%5h+VU zJOpFDoeFt_&?>DwqXNYQA*GWqoxb-TS-H1NB{l){i8!@cX+e^n>A0^=(YdL{qc8{90d$; zvE~u4@U7LMEDNBJyu9UAa{uo7^ErHPy87OgH2`xVNcw=fmW@EU0G=Lc!3X{V>=kn( z%bR;9hfWRd>{OqLRfO}Y#iw;~cms^Zy-u{An7DX9sKH~i;*#2v*=l)#7VIi!o@qCn z7G8MiZcuTd2CXK)e^(u>E-umW*H|l@S$Y;En0&)?pR;egMCmiv5p@6+%$!zKt&dGR zVuoJvVX34tT$J&Mck!xi zSIFyNp(}3lqauKea{N437vJ1cRaJQSCYI)^u0eu5)r3i+x3)XaGELJ=hHflc_wO3z zFQ;R@L3O(lIz-VJlm!i6BKEp>U^t^JkNJYnh4S-ndCk%;OtQ37?Kw~O+89LAH_X2m zHN!j~E`Jp4r2fGy{DPE!$MWxaHZuZ+q3igL7}^OihMPZ=qFrW!%X&18S3&r1 zNEx2|W@!1?@(pW1c4#Z^vkj$onwH|}w^%BTv@fU>bSb*c-PQDFL)-ROK)qEl|5{`y z_En{+(N}R1A@lZ^kP@(@2g&0j$EEDYb9|Ao2`iAc)w&)6u_3`&VPf5sVih;h6aFavq62f*c|G~hRq3%=t z=t_f-8eYA+7xTEBA&z^_(_csZWYIgzNWIu3OmwdKeyt;X%&gT>V#E9)UEbUS=(-dZMK zl=zw4X*a~;U0Qh#Yrs^p58l1#OVU=Sb)D%}NXN~$BYG31pCKiZR!546t0kY0G*RxZ&&jPut69MrA%^(fW)YN>!ASI3OKaX!8r z@}FUKf`LRg276fs^&#(QK_IsB`>>lWa`wA|5XV;dDl$QEa`io)H+h$|uj`%RtcZSp zl+;kM%`x_O7^i}fY<`|cd)=A@8prPSCa@O#vbyOLxLUTq z@U7JO7fpChE?9dBuQ*rrQR~4}zXOE`-^AOOH@oe_* zpQ<0H7q+`yBQ(|dI>nS7Yp%`#*x@g9xNV4_aUT!%p)Z)_L6x20X&ghCrM~i}-$Q>p zp@}V}JL|xj-I=gta#^l2@AO+eiaGIjdEoQKoF-qp6^>Lyl)n-(gcQ;=JGVDGO%3m6 z#%}$Uc~KjJxX0wFNd=Lay&^Tdc(Ps3WmB&3$F7|wsaXoKfz|4NHPryT=B>1LkX*tEbe3c5T7(gw#Kp}NgW}u%zkWz z1^>&o-R55#kv(GA&-;e!=j_=zlfzEOz1i;_3WEf%TWxMnSZUd%W|*=x##(}T|2q$x z!+z~V)FhWdCFRS%g=9@Pihiy9gO#Ed4%*>Y^qx% z_vv(8pVAFqcXlDiT>T9$zQD75u59t8RoP;A*ZL>A^H}Pu9*TM58K`1SIgEq25O%c$JnLXme%dV+es;m_5 z`QJjYwnKKI=$B@0@px$c$$j5PaVUZ(&wpT+tyX)!$9=dsA;cyns|Dd=wo=z?zu(#O zyNeae=UaWdW(NnNj24wH=2oVcypzQ(xT)D38gbVlnXCZ>`h_g9>4e_d%UB9}0r}kU zXex(BZ1z@y565~N?E?K!z$@~ba=Ha0m6!o8a6@6(SqzGzIMj^G`gB*eemndM#h}lY zY5HFb8EHq$rI!Ke%e&PXRMvxJo3jJi6EWpTr-^m}w|1SJTLWR_l~)JbcAcFF`|iws z-iAx&j!d?9rQ|5_D1Xu2u2Ujt4(ip0j>7Y0O150#Uaq}&*0s0~pOr{l09XkhQqG*K z5>{Q=Iv+fjrweJLd@`tL1_tT|0PU~Uu(#q`c?rp;l*T>_6dI4KTna1N{m}=pnNuoG zjsxqm-mN5tX7x#n+`|R#j|C#tR)os->?$0R%B`DA27?TT0#vo$o@@I3Zog(ZwN@`s zFH5282j56pS!HFz-du%j-4S|MWZT8>1gN`8$m>jU4|I~}V~(}GVs}pQ_AuvvsZi6~ zi^3w+wjiOCx4St>E|~#Ach)-)Li>K(eoh)Q@auT(Hp$y~off8vpQY=izRRdX_-K1MS zRi^*Wz{-i-V`Um^hd&}Zmlr&4x)(U?vERRSK3)a%=^netOtLKhJ4niGDhkDD-6C*M z%aYZ)`;ABh`h|0~L&ZH1@6pGy&J<6V%U{yRt_)i>`JT=2YFH>!YL1!A6-oD)ozgVx zELMuJ*JgMqO%axOEyV3$cz@uTHihu;=9?G8B@Um#qOv*?W^}t_oq{6ha@7_O9qH?1 zuKVxPT~NWGe8hW2bK=q?H;@ScQzpKhqSJpT9oF8ygNBKY({&FB9lzhV5Dr9f0bQJg$pY}0rJn) zlo6;JBv#la3YsAhDoOl&JKf}ZEwpa@id++`{kFO?3_VjyCX;!6`OQ8L6koB9oBIax z{S+B?Pi>8i+u&9CyqX;3j$+7AnXxV#*Ef-3kZ1K$7^^a=jNnCDWJSmG=;d?PP!6C9 zzhne6Tw9Keb`wN$UG>=OUQ2Yf#(CsC0Y7%KheQ5!=;QO!zMXaXH%AP2I`z1JUB^Yv z=ZZZ0LK==<4P|TVhA7Yb`)Su7)pZ)4(i#oLk?|$Q6b@sinIkzL=;Q3QwbJ@eg~+s& zMWF1?;S|_O_)k+2%uwAXX?HkwZN@i$$0S@&BxCrmDXJ1;Q2HL7>^kX*>a%(c2&p&9 zc?V$IP|(s~Vr@OQGSL`YdcBj|FDm&PW3u?n3Y*=9_(eml{wPJ_qEi(;zFg7B25Ju* zh@x|B`A)s!;k!&;D_xx5{5*_@__kk{(uHbW1z_V#zXwyy4z=Kji|m3xwRN^@P06`q ziEr+99kdg?gbK09iz55U<~aUBes>Y~I9EbR4}wFq0S0Hj#DE|8nAL=S!UY-U*KNCg zZ<6JQij-v5)LyqCRJ zj-Bhz8VNbggT~7~P-#t3mJsiAK&9?I^5>&my7F@{z~s%3H;~b)Pt7z=48@W><5@&G zDx?>0Y>xfOeq<&te?{?HW?T5?ImL_bPw^zh^(#5mULNiHCILBu7q4j0hpQ-mH?op^ zB8IR>-)`HICDAVwjXf#ym#nl*-w5mGx%{sz<=x#9op$&IHl8ky(e+$Wl8GSOv% zBQ5?9__{LN9w#s{lFzi9dWc3L7z{&n$RC>1f4sR@ua5tW zCud?Jn0b{hzNfc&6*u)n&HknJg$?%LqwmYnJPbaGa=o@&v@x#r^2v1`{bOTB`x?&4 zCx*E?&#lHW^8|lqGUMglAWb9i44gbW&>1HFHVtK)KB056 zMNt<--E^9AsYz7SlxUFn>$svKV`H;-vJENJln@K{g`O;*-|Ae;67%4nd$r7Ya%TM2 z)-qH^Te6<1Y@dSht`K9;O)(782fy3i2n7MFL@EB7Lt8D39mIuOed~2JlW6BgUU|Vh zSH(|_RuqR49SyHRv2$lfdw$UgS_hY{|Eh$Qq}Jh~zPo%|nmsr`S+CaA(d?aCR3u)z z`dtRw38Xq{aWlOIHsSU3>7HWM-f4D)&csN=8&fa)1@zZ#c|`M>ImDo(QX&C`ta=*9 zaO$otR*}cO_bXm!G{(6i2oj3fi2FW?tJ2w!;0_L&jl4I0+ok!oKTCXeeV=pYWybRc zq0JwIM(&685mBt@e3=dYzQFe&KPCE_X8`?tr>3fdN}`BDLX$iVGUx6#{-{|e3iCbd zY*jv~5<^whJI+w6GK%bsgq7d(2fmSN9K8)Vsnk|Gb&mzVSN_e}SaMaSG{tTyZRNV= zwd|#lGq&pH3fYF_@thPl`9o(>$wzWmsJ7oT-r%vsz?jr!ImD@KV~-cN;MYpg>>?qL ze;HZbX_Of%3d4myttEA2w{Gg~+FHKCl6^M;dyA{mKxnV8jY2Jx^L!k8gBB6bTYp_H zS)+pCfJaTMpPtAFhorj%rqScxZr5JM=j-a`1DJp;$nnprG?!Ulrlzn?9qH=Bns!>Q zT$Y24tu~KgpZ&LHXB=<#m0S={`pUB4;aK?Gb^QM+?5v}*+}3ulB8ZfLfRvRCbRme7z|Suxar$m%8m$tqR?)u@jNlotH!=g)#YY zG%IJcd0ox(4cUS<>eXMLy9-BxWBqK?K2Ez5@pcUKCV*PoP0omF2a*{7nfZuD#Vc!B zczjvr*3%S;7uFPko_!DSb(WvF;z7jZp22_d)@@$$6sxCUNi3Pk^eKT>j8sv6DV0w( z;vpoeG>-7G*_4^9Hh+QIxI@)G``)7mjJ8p73~lnRcVyMWpguk z08V60gARk^?N9-ra3&66Z~5RMki-TZ(y2INWuz45S_c|F>eXtIRjIPeSd6>GB*W1WHEJAF z*BZYlYygqoJpc+@l-w@5ORm2xTVM-mGWkE0w0w4|U9h5;ovu#E1{Cm-HVY*M+;m71BkQrq9uuhCegRZa7at=V{ zu7oQvH;H7de4jm9@I&#F)zfhv>q%?@E^);gs~NYUI3_eP0FcuKL2KfOGi3-}%F`$X zeYVEYMUquCGX510a%{DVCHt>ekATqD~dM}>4& zN}5nGhOXf(&+2SmbgD2(Qm$(f<++fFrvN_$TYo5{6JxBbG5>|(JM z87Y=Ziv>%t96rmJia7q+YS^)*6LZW%@%n|FQ7C0nVS+VESZvs5tKzNy!*&~hkh*j# zfYjs@|1L#8yI9ruRrwQ423G`Ub~CaZZBG|PHm70=H!PwfzTCjdb@*p|9MGzA+T_V4 z()s0j?CvUA+`Rqj0heg(0z$@H=B?*kkcZBK6vh|}L!~SwL^Ix(b*KiUBGR}ig!(Xj zVKNn9usR-mUYF4(TUCIm-luwvD9FaBvC;2Daic{2jjH#>e}8`#Yp@+>4Ayy}h2=+wMu8lT!49asyrYOp0H6#m{LY9&_9CI+Gd#AR&nlWvjc@a`*vEc2+vefN$hiNPLe)za?|nxb@j_?ot-FrV)A>H5v`DV;WyJ@ zI6xKBT>~J(`0AvH_t9nYpZVe&2GE^Sh1{5YY96@1xW8|@%xAZ~@@2$Zm0b-F4{wvc z*31gyZ)}JMvpFeAdwoD9_El=S%N;h}e^oJ>lTy`qZQ1Vy%85j{x^3h&H6WY zSOd^QA$pT=At#Zy%;sWT9joHGPo{%%Mj%Y5Uq#FW67$)L{JB{q!t`o) z1%E}q>-k7v{50Kz9+xR%+!=qNL^kv-B72L)gxSYh)3-W#nuq07k6R<@!wuwMLk^ju zI6>`IQAV>PtW*XD1*(x_#Q1}a8CeO#EA zOi3tC2`f{aH`Ev#<8j5roRsHgu`sJVW8>kwezcdak7-A^0b{om;9H|RX3COHpk9bS zSnqTWrT@w`R0lSIzOg9FxMjuH1SW;P-0}OmFd?or_CeNTX8B84&xuKT_0TITl+5#R zH#C)LB|x|pXtpscLv{W`T-xtfh&B64vzqeB84I$rvLn!}m)c@0^Iz;7!v^<0j&Kau zluz^MkuIR^;+swjrclxa# zLb7DcqPfY<-ZUAmV9e)s1L&ez_XoOo@WruzQep;^M7l)M)dONWpRPRlO~&~d#|%fVV>Tk(@Bf{^$l+S!HENmW z7Xo=@Hre!Fd*P23iX|I=cQQp%Thre=1{?4p@tF$QpTcC1SAb}kxmk>Ty-3RxJXiR- zT|8RYGxYT3v7|e=t6-8%zJa0AnO{niBS$t=b2OO13B!$zEMH3PTSXckO0|4s&Q+!N zq!tZyM#t2*vvO>ZD}JDvWn@lYXeTq@jhFddGXS!tP^_M2RjsyZR&}}>CopUe zTnP@aiN@rcQ^<@=vj4*th*r*@mI`xAgZCH9x-)TrE`tLX33O6#Ol;@1Q+{Tf9gI@z z%pH2fOKF$|#*aKnb$!hkdPr|n^K&eUM(DhGwlJN2?ohID69>{kI$kl@$>OJ%w_0p1 zzvO9zD8!Y`5ybHs^&%aFh2=6M#bujR&dXR$KQdL8asXyfxvdD%$`f4g=?zw-9A7-V zQXkp*G|>Pt>5%^yfO_AkK+&K(1Jm@O4MDR}V+W|aiUT5{5XP$lF<@2MWh@q8F`;NM zIEV)Rlh71;C5jQIwT=ULC;Er4xQ{J~hL~-$>wD0#@(b)&mtpx>#VZq;_+$5ffxFf= zo_RS>+UB$o6n(Rcx}X+D^e6UPpD5`;SILpN4HKsb6o{>VRTN0W$rYwkcO-HVLk*4M z<{O^Y1$8-=Lm!|@Q$yYl@z`CnieMI+!oME||99w%fY8UK@WE3OaNR@x%5R(x%l@#p zoOQ~hu`G2*O#+P&+kA2xp0mOmBR~w0`@dJUOErevXIWnTJ?WiV@A{x7XFNNter{-I zH`3a2`{TO09Iy5PwQHcnIrxZqr`tcg^yOwhsxE@ z>;UbwVV;(58x4`W?M=UKeGVEy&1QSi3otv1YrS>bxJQ5S;>C28GQO5%6p`OBi!}6` ziE>qes|U0Vl7__Bc<54DDuoW@5DkDF;@%6b{)652^(oB48m@JI`pdTb+w8CyMt_^S-}ux`?p879T%88wJ0l*Wf&8T;3A!@sm1 z8SiwKjA2KA^n0q{4+&4Ag}6us6^BPM_eM zXPjGCdI=nGdhgu^4Uic@4`oKj)I7A^DICX_wiPeb4mZ`ZSUT@a31y|Y{No;qNu_pY zc7jJ{2SHihn!~)!KT$5p{sIAJ1JZ48!#|ne+@Pg#`ao@~ zH&)>KxX$;!L@@-n{TGP{u<)^q^xGNd2z!1!O%v(Qn0#k9T2Lv<;ed~52(Gus3Z&y|naw1Tvg?@MZqbsIpH!|7 zu#feCXj`}DY2~4NOe)wjj)P7<|-uAF)_H2nH&*aRP@iBPo>4$!6-O{B}TS5;%EGE>^xgRBDDBRK!e~ zDShEKX*%hZI(Pq$MQ;SFg2@Z@;fzYMx%TaXT#qb`W6pZXMnF}FZW$K#K|shXk9eWk zK|u36cQ~I#xzao1lBM_~2YFp~jrq3>uAxg?E39(ng8-;*hYPTLc*Lm(um{AUroZ4g z-sGaG(G>$jAv35a-Tec}+0wy3^h`HLC1{RRQ!_tdP)@?^40(o~uZ``KHHbRsXYPO* ztw`Kdp(W*u5)+DPONALJ4lxrW3~Hqq%|LTsQ+il=11mep) zKJnsw`LJ#(mLH36@N%{u`-Uc)L8PD_whFbH(M@XIys0VmeSmOoT+v6MRG<6^pB+brUmXMSCrNOoOnyF(3oEC&L7oHD(8sb6blQi?n0C6kAz< zSwfJ^M*SAv5Y9ike-WjI=32?z-;}4A6j?rfeU> zb963LsOSw_6KmCnw{(9dFDf5Xf9L)g6~HhG1f@U3YLb~Gr^1?v{@OK(x5_eOd3vW_ z#9)UYJo-tj9o0C;CTY zyWXG3i>(Oov4VuGe)I~@Q_9GEuu*Zj`Mz!2*Qbg;+~<*(ogBOkGhF69e6S%py0YN_U;NDvej_fCdAPDyV4veHCSOtB#DUeBMu;= zWGQv9bsU@H^e3m|{&@ z83IM>gEIHJG7n6H&XOlzX<)yndHH>xtCfY5LL(6=`Xwc-@^2E4*oGjSaOf!9GEV^U zBT{+#@mfa+@i`1jpFFlqN*@u0S*-||{mu|CK-R`<^DdTnA-n}#Ka8g1`FGcOoC8&v z#*h*);4+^sz-p#fQC)sMnXlMc6`e=VC5y}E{2h!&+<$!NYj4jex7RhSc#h)Hl@^Dj z;61=ho%dWqwcO)VdiMRJod)qK*_FW8SWG8{@r;jAUge@4A6K&$WI&rSG$#j<{|spO zTg|ga@1$P0knsgJylcHzY>_y-4^}*`y?m(OvdthalojbUv5P9>6SyY;kXW3W;>lKR zyi)$r9Zr(^2ZnREH&v&n98>XWzpRXgJ(TV4u(Kv$*Z)>en71V%#!gy~;lF`Ym++SX zNcJJ1?AhmvC*opHv@j%JIWI$I0dUV9SUXu#x5dT*yi&ftgg99nfgd z2uUte)b=c|Xrn*TBG#35 zSp?sEGCHyJYLhBS-|N9*H)S#a&nsWKP0McRMWB#qXtl%~eUSL;EMq~DW^}$IzFm&` zvPGE*G2sfuvOHSpnHThpgITJ!%PPs(9?qRt$zKkQ`0H8Fnc{^$b*5h6uiztN%48Y@ z<(S74MSpE_q3K9XC*m_MP0fJASU{Q0@5>OhZ;<{ZEM*_1s*F+bwr~uw@*G?+v^o5H z2l2ZTQZ~m1eYSc4CCSNRKm{hZl@-^Pb!tyNX^&)F2h|82c3hPk) z&LL;1Tzo+O^-13I6ziorMH>3aB{Q{xZc2z{1k)5k*FB}a=@hWNjP7Rq)Ys6{;N|^z zOYtrYlVY7T&bANT!W=s~GA=4rl#TC5vb*cs;^)@aicIKkXJ+hCA?sh%7He*J*zI4l zi44b>bLZEPe}QJk<=V7TgsM=m55$o~D2P2!P#~P2*TP6SrBXJ(fh>Sme0p3B#S<9= zBP?y4OMP3H)1;Um1RdG+ddc0o9=hdgAyJ2t1-#qPo;b9sdxTw9Lqo4FQ)dqg@*OTR zD_t11=}rlntmK!h@l@!eu#MR({h#5^Y0MYnHR9my17ut9$eM4cl@z=rN!C=GQRRlU zSer~wa{b`mP{>w(|5ec`bbscp?M-|e29}CMJXX*Poc{0f6OliyCeM~oiT=1#?{cPh z?Q&3O&PC*o2CN1)GONHl70A&>XYC)3tM)r1`0-AWw{qC4Pw5w$7fFAXz!uuvZ(fax z2yB%lNaNd@T@!L=YxMqD{mjI+d0o#bK>Ky6IYXylls7p3efX#JX9b5EyKEXu6<&gp z@Dw?^Db2I@Li-x5C`!bJ>eh$WCM`ZAS#XePQ$@FLVnkIYSQy5W7B zR;OF%%H2umN!-Y1qiJhxX?)@r!oo;_XdSaK0fkm)B?`5~OEjWtPw3LS^T%YBy&A?_ z?Qd?Ok7vAV?+>k=lZ%FKZAfWWWsoQ|?yu<4=MLM9PWmX`G8C}qJ<rDpu%WvyXSJ^S8!>V81O$z#!>5Xdf`VPno9&v_96AV>lbE{KB3STzagSm zMn^2}7e_4yL#Pr;Dk!ztw^l8Ut9lc_tK>)dhFkH794!bwB6oYoosfj{W8>MLUP_=f zYvcKL@D)3o6Me1tVBU^>t~@sej@$OF+g5g%m`b;KU8#`K8TOQV^Q;fW*A^!X^yRcO zZqM)4NU#X+(KX;sqFb{ohEU}3dw|pL8`5%-c3C`ovu~*r?joNMD>;og@_tqX55Ec# zj1L?u9)l@@;ul$RM6xc_4nMPLA63k7t&f@k&H$ie;~NjAJe8D_BxH`+KRQ~;QI7{N z&y^u}icAS`!lq#`8Qw9t zT02nCzboO4La4cFu4A^Oj%8xT#oF5IosPj$tEvsoN!rnZUoXh#w?C+=iCU~GfiZa& znoK`z$KD%syH43xd5}+O(H6*sjF!=h>ukC{iS|;nPmd#!LSaa$(|?}#cshf}??9nK zvGsTQ#rv%x9K*xEw~Y8!<=09p#n*$QrD(2XQT7%!EVO0>;SskszSp0^khgH~utR@lFHbczHDr$I7E$mr%a7ux6;O~UOd@3W)TTbT>V||+qoWAse5uP&9GF~>xebVKGvE`a8%jb zI_MLxg+lVpn8sKJT-ErKI4&9}Si3<-g=d&QTYXlFFVJ;*jpk?;8$Y6lY=o`N`l`$m zmp7~rq?H*IMAx4a;43RlqIfsc?fVEw)+H%XEMU=m(zR+-H6KW&Hkk$L=31Mnky<(9 zYd(es`{iUr-nRY_nOR3{#+t*0wt8&R5h|O#={D9_SMVF)1MICQUmHC0Tv~jd%d%J-X-5c~fWjQY zF$4QO2OQyG*rLVjxr;m=Zv$sdHTs@;w)yP%P^!AD{3?&r^(y`F4q>K_l(pLzgDcQm z!z37C#*RX**d(GCFM&jw^USxtOn+i4c@(aRuvYftI9x16pvTpRV>e@dDk(Cy&9#LG z_nQdKZ)Z)n-6=S>oQ9idV-N%b;KF)8e#=86Jfh3)R=im>;32ChZHh((OY~*MG=Nl;nc=?$!>dJ(}fKP_H&a z@!Y=^-l8`g=$(2ZI221c6VV;v|M_l4DQEM}`R3C>e!0aG{q=Sj)`koe#+n)pYAvyl zvScy~(A1eU* zW)k*LFHK75{d`_!)EBWo3kXCb6=V8i&)cgK zPW<;^=0O(kKf`+U(@QkbjVu=Lhbauh*`~J@v&rO>+I^Pnl~cBfuJtVPkZt}`otJeM zAz)!MakOn61(^nQ`d7;Jp}3v4#|dfZ!oRVU5+B3)U=)NVn z&NN&TfeGB(hN(g7;xXtVyHXC1bhcEeR$yUV?@qWsmq%u%CDCNUI_r(d5u0?evi2tY zCb1R!S9hpg{?nE(6cMN2f}p%g&Hau3BOYf9rHGSV_m6{`xgJ+-R`OlgRdXXVwLuu7 zNcSpxB~wmRJ5y1IhI|$l* zBDI?Ze+NyF2ETrKI(=QnGD`Otj&jgnIVzmxssB;NA5O zt7B+bxsPr2JWuMC23J=%|(6Sv)_6l=mdO%+Z(9W_21`fcj&GRs|Yq%k^ea4DkO^ zBExVHdwwUO%@>uKJ2upRt@j%xb2?uW>a6YVUY+o>?i<|QCdC@LxnY|New89A>V0R2 zeS-(4cd@mu4PlpFZ|;?JT6urB)UX)E2q3D2nq!Pd3J06RI7w_j{3!UGgk^XrNbC=% z+LFYkQ^XzyVsGW)F{l2tuKXXDZ@{cZ$o^nrws-ZNcje(1&|83;T4X+01aF>>Su{<= zOMweb>~$u;eR(5|>K?w&XGov;*mwO_zEeT_Y4f<4MDUM|R`Q0!+Ml|~`C>2yp3&+f z+#Q5&e^{??%;dv{69nAMVoF8Hqbin&hYRn4^R>u9)KtZ_WAf$ChIg%2R-Nb<-6J6) zZzpjXOhYfnRATs>`8r_|8L%SOt|E_5%D4k^nnWD5Yg`q-7)jbJHhEi9xNTk;!@WSq z!)Lhve1#uVrm{S8O6DawHjzu#ipOowNPHnDGnc;=Ol&Jwj#8Oe#9_TfH(6|4@f&wpBDkP2W_RvyG zrVzh6_0OV@JaK%NJl^{wNs)Z|F{}p^6v9Lu59H@W4^?wMfhJi;U$DIT?weD6VZy8W zchJvaJnYYL3Uz9iX16PBVyJ%-D)EudiIU{C_7>xZ%p&Cl3wKgL86I%;>w@q;1l86J zsv-p{(?0eq#?ri0xr1_W^A{C6g?Zw6M~eVlOwrrE0b+eRC`*x%K;fYuSz>7QK~UKcbA>gQG& z&QIS^DbRXpary|@g20|C(XInMXy%EneD~FoI|_0fWCl;umS|l^9ZlO*<9ddKO1#)+ z{lz9c?uJ`6UG7e&BEB#ZO_3PR7aLm3bH>64jfpL)3za?l!JcZJZ3?~mR*iNC@4{vI z*=<{)0EC}Xnw@7OFWjurQI$UEt>Hy+<@YL?s#Hwj6$nEWXl1dx3b{Sq-htQaN-|Gv zajFHXll23|`iDsG@l!GW@}f2^zt4&w(68%{zr^OhW@3jZ5Nvv#ir9!oI3b%fPE~_k zK=tc>?dDG6DD)FVpx2P3riCzYz))kOtwt*Scr7?*Yu+n>;@t+ z3$6s;pQ=;K39?d*I&`4drjs*Cx45b-_d%YO8GPUHIu=t!?-#d_^)vM|vrW)#D^w=- z98Qh3jQ)gP?|p^qOjBY;WIDK&Q&UhGvpRqi-p@Nc6IDXaP;I0b?C3&WE+I4($T-8T zj?>3g#Hdq$zpYYWN7Cm05@)kr{)JG%oYSun>;R_P-ddoN6cSi1Gc#i4p()(_r9V?8zUm;Aw z8)r&0>R>fJL?#0r&LZ#E^k{H6lq(S8ZX09^TU4I3PKwRR8dq$5Xt)>Wr}Rou(z^Sz z3uX3TtzcOA?r4sHgong;b(F_mR=c8^jZ~M@@5<}t5#4T!?CjFINB2zo@&3cey&d-n z3*jEt`@OKh-xL?d9gAs{@P$D#0gzRg0sjtX)MC`!}l5Br|4+0nD zfxleeykoP|<@DJSfcWcT{`Ezg{EI-KzxQdB_zX?#$(hic@7ov7*^5$9Cr3~~7B)Uy z-oGX%`wrDZ-yf4G&-mI1G?=TNo$57~OvYolo|2o~-!_LilkOn$@7C;VXY1|P0Ii8X z!Fv4ZeM+3Yk>j`g28y!4lV~?ja>AfvxM&{hy33SLw(Lw~f;(Lg*od7WqRpgF@bjgI zNV}u4mYUtkOfoCNtD74hjWgW_wMLWs)C$o0p050^38(u__fi}T7#Mu>7|T|BUx|P_ zn>G%}4Hn}okXy|UZ~O(aIOh6KFY~DZ-yTbsg_?RT_~$q6BfVV`=oc!&@T}h#80E_3 z;4IPA_aEy4$vaN{<>QA+t#v21oZQa;Bn!3C?*n*h!ir~%8`)V#0RHY&S-fSz#q8a| zA>cX$*l8^`=Y1h$t7}pT>>0xoj_XM~nZK1*oLjVRw;Qr{rU#Mn#+va4iR>-_bNmqR z7I{O9(b+R}z>GB&{pSNRUY1f1uW-JqAp3(3|2!;i7rJbTrevd=QOhWD4)vtWhL8uB zy47h<^`S&N0eB$uehU^HROBXQz`__%m8jL3zg6Q>@CX$Tg@=Vjeq~r26O4xo*(k?0 zxsns#HajUDvXiuby?{iWXkIi_v|_EyV}Vdk1j#j!PcyfzMzzh3YA`XM(8%CC$!|^ z{rpz~{>dmm#e6wjrhaV({iq2!-Cd&J6Wo8A|n;3LdeR3pGX&la0s}`og zunRwsy%027fItJyUcr^%5U?C3iYu0s-Z_Z9LQLySja{F>) z!--`Ii)dbLKyHQ)PTurtKg?Y>wJlkeGM{uN#uh2~HwD4Pd$&pm)wVyG%G1AW|4{3V zQexxemUawk)F{t-j~IvJf$vxU5hlU6gCazorh^u8Ej7*^+g1%+1jB^(zMi;ZCXSL7yL zpRJZS+4Duuz_-cBA)D=nK0_ZQGpoLT@8Lae?|iYaIcruXRz+&5ZAy7PS7{9Yj?HB^ zU8GxY^=5Acu?E3)G;@XhEm&3s0L!n zd1smgRA7zwE=C}yO4KQWlDldl8J-ea45fkjtn3+~dG)D$v#PjxPL7%&xcbubPmK%$7=- zxQ7!sp!{=__}M7TL3=G3Yo?fwbeB5eY@^-j7(jb#;UJ`EAP3~%#VQc*aZ<4PZ+C@a z@RnI{pC#zO`bt7To33C(t`g>D68*o^p%|Y(bSR(z&>@s15-PELg$7i9g5IEys-mTQ z)6ozZetm}_uN?Bq6rEP9km@E=*ON`ZVBc?#55LoZ1;A>!R;hbzEm%&x&a*Nc7qz#I z4(XZ64-GG!BfnBhM)4vcjc9R%BtUM{oq^(T;kQXXEg9C}`mA*4f0`9BWv*a7n*a1| zXAl4B*#?U?c4=DZXgN50bh`f1K^>@GS?YR+Uj_KmV?9aIlfG-BJv%T^HhUAg2 z(~(!zvS(g}5n#2h;ME*s$P7XMpp+F^>S|7MVFD8JaPnCOfKq6#LIsRxo&~POxt=U6`nf@TUe$ZbF{ zw#nYOP=gfTapNCQgK%Q+`N68*i|8AjhsN0F%lN2VQP7?{sL!v@_7S}p&fK62vMZ8I zv*t(Yp!lx;WY`1@Ch~jtYmPW-Urk|@s0re8w2d`@p^+WaC~>7osYZhrqZcFYb0}i6 zP{Fz!0f=;XGSy)gLsP@TD+>`nP?v)?H|36AwplGS^28K)4f>ZzB6bB18uO7-1TJhT zc$IV~k;zG=n`{O!{EOApS8d6S@VVH=4Vr5S{2Uj=ruT4ra@X0?dOUzmQIkK(ERxg0 zE-n1r9S0oaKXH;dvY9j6ea96KYoo>e9`%4)8O`2doO`f zxfH&R2D6lhDhMA3B_9ZqY#u6<$9?iD>Jc!!{{;X;G>7t>f(}*`j#tTYQWO-?=iukD z)Y{Cm>GtI&OuXumO&wND{hZ}Y-XO%~=o?cOWYd~V?WTIf^Vy8XF@I-O;8n#j(r^F0O+1z`XrB*ro6Hhi z_deET3Fhx7gd1Dho=5>%?t&MJ$;wQo)6aWaZZ2{&jZ?jI!KCar-5O8A1K(Bf#+}5g z(or-NI~&*zHUA7n36H_j&Zg}-^i6eP#gaycy=V9)zkap9kiwk>T=!C}-BlqD6m*x0 zo?(1<<3$deHZW|12$>+QvK%hHXSF{I-DWk{khtLhZTZl!r>;&Xa*CH zl-j1pZFpVXz_LFp(*W53w?!e~FoYhm)s2EQ2kJGo62m*{0t3;R?ZTL?diPUFqSOIc57D zk$%^6k>&7vx9b$;lZI#mGP^$|j5G=oKE;noASokwOr#FuMeQ+$P?kF2i_b-wTylEL zw6d;`&jt#nf?{5ucJT;B+YHls{4Vzr2W5dp<6+7-PbxZ#@pNqTj{u&|EksH5BW%N1 zrS!z*vaL?*D`T3OR5{r#QwA>sQ2%ea`zvtsMKc!x0WI&T*f)18-09iq1|S-%lYnUa zJwu56IIqhO>^?rvuM;wi2o-`Md_hDaffu#bw28-VxBV^u6PS;`VZ+ce`TZ=Zw+yqw zM2tkBQFvxwIf-cDr7&oM)6G-u%dj?Go0-Yf zBu7DQj(@ygKwj&~s8nObaA-gH2|ssAXln5AeBA)QBILOK9ITJ&QM`&*{ii1s~( z?w_yvK5!6>x;=|1JJeO0^R>^vzfE^oi!C`J!Q>_0fk3~eyHm-0HRSN0f9~@qNX6yW zy976}T0MRXBs*fpgLC7K{9iwq7J-39_Ym9|U2L00n!Wxnf%vylJPi_n{FiY2xo-3` zGWstO`7brukjVOf|3@oQByzTYk7@?(o;ov5vugo}J9ziL zpX_xLB)&|Es97+b1di*jJvznDYRr>A+iI_H|9y-$vDAl!$jG->&MSDMB+pVyWYR<_ zNy$AWK23q$O31E)$l}a910Q1;lxxcM^zrt3ml(s0ZuJd_WhPhmF^3L*x*v5mui@m4 zXV>aHoDWXW=*yK&7hJI;TnWFJgc7Sf!EH8!q33u=u^^ z&eWw4PSih3T*Qh=AG3{PI<*jT_g=Es3bTGS?rr^dWu}iw0umC9fUn-TLA?5Ti;>5aQ5 zleo2Q9yMfsHlKP$5qMHt>B;Oe6UV(e9MUO0cM81k8o8dT=ud`0pPN^dY;5@ts2Nnd ztZpz%u}s}wFnfK`Q?Ka7iIsVyz1PXgx!fhygIYoKp2&5v=LX{fI(g5em-P!nv9O+E zNeDkse)4cW=1jC)_u-*&xP`t?HG_dM8>Q)6zD6dEx3>c=5X~A5S40(Yx0M9@gII(E z4YqM<(ao_LS8K%$d-p3n;yMR&?U%S#@5Z%lyDshz_O9BJlTXFkFLF)o^KaU>?M|!~ zKdxqjm^%7baj}l*ug^s?@!7vWSE>E`M*_O6)hQ(%7t3nzi~3&p9*pCiS$P#4cH@2L zNjO#>V!mCKF2ndgn&o&?>@dSRl_^0(u zR|h;AdI4%0ddy9q&)#WxB|#qH8T7|U=qO^ao0{6rG+}bV+j#DCXx$(&qklf}DSE~J zIU183DAVy?ScH!UB51g3`B1)>c;j!L?9Ezf=ZeqXi~cq7Xa4VB8rt%w{vE`{@6ZsKC*0k(gE3g zjv8s;REn2xZwIq5u7m%w>hn_AxK7@%RZzf}iw1`4-(RSVjWtI#yGbL^1`9nooXwpV zB03rZZ{eKh)UD>3RN4#uJ&a+m2U)6?bUFtI%gf7m@GoAx`1y4h8>bYfO5Vd##gwK= zJIO3H52<~DgC|+-Njh=7$XCfJ%rL>onYWUmnYHyJ#!Q7OE3Z@P8vJdi<$a4I_=0tK z-_DP}9%1>Ir;=qQD5zqu&m62%rjaO|LCijDbGuF8@OZP75e-Gmt%fFF)E%b9hxWw* zjp^AY-qX|Jg(Ic38jU$#Hmohb5JElc$^ zJ#w*lk%2iP0isQlKI<~IVykENAX<`nJS5cCn^ALvfL`@^E@g@IZ88pvz5<7td-^_x ztbfJRlWV8C^G3os=03kxi_BW190)5G)Ng1|IZt}ePqe-AQvNw6Mz5kA%7B(K2XAqN zPpUD(3SojU?^hhR;oJVKh_nf}LPsaKPNGy21)J^QN7!#Fw#v2mbB&v;H09iXW@;fM zf?OTmT&Ky>t$9eVmV3Ne)A?|^opq>m)5pi>cDXF$RGUtwTA)*&Qrg2@t>UE;`oq`E zc9%A1W-6@mo!Qxei#X+I9z5pEtb}_4vp4=gg zRB6OMr&uyhrfQBX3N2*x`Q@1<%u=exO;&mw=4DH=+56x#=G{~f&{`S7maW`k3=2R; zO|-7E;S9r1vKnV->Br6$Q$jGGZt~?Hcbw}nMoKLeTJBm13)d>ieL(K7(>joSo%rCo zJy4MOhK$E4=I&UMQEO~`mTohu{FTz;lgWrLOBFo3&u}iKOD1MRK=Lw@+vgg3NrmOU z38>6_^eLTlIGn@yi=F~&^9jR~F!kbZUp{bt`Oc!hx8NHd`Cex6d8tIV2o5*gFGj5z z;yhb86byQv1T2#+5y8htjpG(Nifrx856)h$9x|G*C~U3j28h(a`+zQwyNQ6G)@2I>m5HX%kj!g29WRXlp*78 zzqZuXR*-MjThsV3+fmGhYnpjONOZg7@_!{??Di3{B0tx%y8&luze?KKf@Lhpb8_U~> z>1V=(3gxVqRE0~`3{fT5@+3EBTPNug`^Lw4RB371eyroaBA;HL#l@rkjgUim5X#W2 z^f5)+MDm9zS*^lF7Y$hrtfr*_M?V9V)k(ShO#OOy>K~K}sv&y%XFC&pxuvgo&^EHO z{#8RL&vjfDX)E|98@qSdqM|jrF|oIOHi+)tljV^7^Pi;&sNA=HTxwEckX^tzPy8jb z4?hu)LbhEKJuP|3pOQ+}=*N8Etu*`b2HVY{li}ZQoENhEXf0qu8hIOOFzGK8B-7N? zag#VEwY7ZqzTVk6UxF?o9gFzAw7A^FTw*p8!31SA^_9dY5=*Gsb37>){acwTStMRx zgLN2EZl7jd-uT9f;PPA=KM~0o`qkC%(^Z5*{Qa(;oZUX%Vmm_eC)aNvxa|Y+gL86k zO8gzQ*w#r_`O#@K%SM=KD^*1>J}e9Bu^4YSbQONnvvjdwFPOS*`s)wmrFdQPn3#Em zk`Ri!dS&ju<6QKpo40Pwb!AY`-svx>N;I1M9fQkM=OP6>Xcs;viJsB)-IzFr{i;J( zS(z;+t8%02DyxES_>Z&a6>MmIL_b>e3#nYDDqC$Ai!*9Q`LhrxEe;|JU{kVOi9n9M zH3&wd3ryM*+iIlqW`g>v9X~j)7k1h0tZ~gRH&VyFdGn^d^!ALP@AFG16+F)p-Nj3w zu2h#?rBz5IXrx5>F`pVNLvqs6N1l5oD?x!_6!tMPClGlJz`reTbYVd{)wDE~Dj z)nw=X$eG)lLu&c*2`)i=I-)8$8hknxr6mqCToAH5pKF;u6%Oyn4K{~%N3v_CyFt|! zA)^{8sS5gY5(WxPsTV#H^had{b$$zzxLR8umL|Ag&v5ND)9rR~^ps(%Ok}}yU%q*{ z^Z7z+0dd9=x5rMOo-5>)v1nLZORqGvka$tLq-9@W(h}X~cRNKa7xHb?AFVeOByjoi zh>^r0xsQ~4eiv!+jA_lQ1unbs_{O)Z{u5g2do8Rn8Lh+R)Re45+i!0#(gm&6+#cck zzV>>=ZoB9tOB*W|q$GX=@BEjkL$IS5D9}x2tCK_H(D!iYpX*9Kt zeX`m*(`c$=f~F`YzqkC2?6JX2R|W}>;kS?24!+_DG6DBDR|1H$wM$jHbkS2@$vcOl z;*k-TLkJ-qUH=qy$6K%pwt9zAxz!Mdy=BQROU%L6SPqNvmok^lpX29Fh6S0tRD=m! z9WQ3(_$aS8YQUYGQCB}Aw!mpMn9%kK;8p}Dp2UVMB9ODXrlwf!bd%*zQN;do&7mWt z6KwrLR3kGg@`Vrza;RoPHTFdF$jHZq_iS?e3W)|v>e80tE|gNnOe+boerkcq6inNT z$I^86P|e0YjDx)X&kDJ=7gZz!_y=enFY=a@?{3@<*4D3=)$^LXHY>r;Ep{QKJDThD zI%iMtdCKQRj2gMrL6wlqshhUf?$RJD8k$s8TJ=4e`@i#0G zufDGTvMP44A&PTE(|W(sx^if}m2>1aRYmJTGopYw?q1+PLe1)XV`fZ@g^oC?x#Qvn zvl3`2UJ|)w5vxnyM?%2;c<})e_bwub3+g2^83azEa627Y$4i0j@z)tj#^r|x&kZsd zhiT{~<@mZ^J^xPh@QH0}B%@TAyWw8K+q-}+>}|Hj0>skGjN8KO#vAh8_wmKvL>pO` zbW&tz9(c%I9(wSJM4OIaOrbWrl0%*iHkF84U^>k35ejK-7RxUmE;fm+tI}MO1S~Q; z-pE?b8*tHmXC^Z_nLQ+7t~N?w>h@8E%yil0??)TzZv%FGH_?8ButL8+f!lG`)8$~^ z!N6cVEALHbo7<>Q&qZ<*6>(?97rhT%UNi~pS`hADuHv$vbcSk*cyGi?ljY$Rk0+t4 z)V6c>=4~>oezcdw@@y=pg74ok`QXy2Yqwq+wAC=q%gLi<%9JyTHWuRaRZzPuCoOMF zp&CPIFO#7dN!o-@rT{LLzf-lsP-JlUNz(Ld{14q%-#hvgFZq-5KB1FBWkamB;X$ht zKCrgHBW_)VN#rR)kZK>Osa|@$v2>VX+F2iQ8ExG5W!Q`{|8rlrnvP}asl%niRzt7k z+j@F>h}hAgo}6#NH5tcDukMqagUN$=7gtIY5Af^oNEF@iJtrZa-h@Z1kz^8EAQnEQ zh@8)-UQc^340~JNfzW5?N6>FvUFJ&gZ7$~ZWaCLdAg|RL_oia!zP!R)b>;Tc*}T>| z^}8A}cOL9l28DTW>~}B3@C2}MNtp|sUlU*xW#qITZXGtV*OchGk+M|rEw8dfxT7Wf zcS8_#r-5Z*z|mrR<-qxx&!#!2Sj9+NiZoIqKHVjUiN$Slix` zhd@W=BpvFwHLcVR5njO>?5!x0WFC7apWH-;-Jf|lg5O6Ar4y0F*w*?hNotMh%oTmh z-D*+()}n#b+tZ{QDyn$Dq5aEmxGw~6HQstJZzukaA#^WXqL;YF>FN$G$u!c~tn_YhwXkMqi>E zc`&^umZ@|M_r4beUgYLic^QJU{$xC{o6n!Uwe@ykAiVwLz6frvS|?eIPy%{qHp|g| z($ykXFP%!G>lrqVPPudF;}e*BbQHO6OO8}vcZmo(Nl~~LJsGR>FC#kl((jKZIC62C z6gQMG-=v)y8t)QHnJA9^fe+?oXE8UhftEolhGjx~RhHPnn_-3!E2^|Ji7V zC6Op(Wk3I1IO5(+gy{gPJ{R$F*raVQ7I5nq)vHM|o|iH7Bw9QAm3Ol~_T$JU*(}yq zF0LtEibw4^)=Pe-fb)Z<6+Ag#t}gxzRg_9NVl*!7{NqNRM}7GH>9Li*s+h^r&RM@7 z8l{0JpuF01(WkC!5w zBxjN^3?P;b=|5gcNC~k$=jc1t7B^D*m|2I8=`o=fJ_SE=g;Hns$7E~NTyNe;fobPN zbJ*=x*Qt&aDJ`ERDgDLEz&@P*p4V5E@aJ0zA{xW*>WiwY_d(&fMJp#QP5NE8`sJD3 zjfF9dO#O~z3Haxl(W_PV#CEXAHb=8CS1C=l{ta2Z-!=RBzPlBHA$CxGX1iZAcNc_& zga~@#ey*(*77+<7y2QRpw&GOt>U^z-L1lCA!1p|~DA6vC|-m=zL*e~x~pt!<0p;UxSL!xLtn?LFI_g-^`p&Ak2w8wZboQG-n` zmbctxlS;>NrsFm@w=;afm526bBb&>{d^DH+a2Ya~%r|noA(UQCGL%ll3`I}G81dyX z`IaI!38z&HfQuhBUfUS1MYc{S|Cx~O9}(h-4!VKc$z`~{x7ubNt1duCmnj>=U5A>q zU%3C`)Om3n;!53HHypNC426Q%E=r_AwR)DhCZxbhaYIIA^sVcc(AOyGsRS=_=Z${j zV!_;fXi3`3koNj#;BjeV|D1jZij|f2g1h>4${C8c&3m#phaQhWbF2OXb}WoLjL&5Q zZP?7e-lgOm&P3N6N~q9}-Fyfyw?5a~2G!vV)_$*H<-v}5mTJz*RGZujnB&MZFNoRA zq$5~7*~58}b_)X^5EW3AguL)9J5yz#iskFqw|KF6lurQTvb(vY^X}0nTtYh6{q^4L z=*WDo`p=)+DNThVR}+N1Ojh#BR&dR0bZ3GI=~cV35v)=uhWz||9DH&EPs#}Awdqgi zxt-?wc#$jeQpDz?wLaMqx!La96Jhlf9=v&8)N!sWupg7E&AKyZCW9SIwjrLzugTou zUKg+$yoVxU^zTPOuISK(rhj@ZfPY8)GDGLi`W&nA7uVS?+NR)V3*QQjCt&uXUx(#C zNFSA59Wr&SvkAxx(IAd&YLco8pr|xx407AuP&je8T!U{OyTnANnk}yP9hgOpQYS`{ zaRzCkP;=9!Sr~3Gl}uu_X=kcwY~E9G3;CkM8hnAZ#UUO#I$zv8ol5t^{mrT7umFw4 zkxCB$0)YMESEi?@FWwS;M++2Xw#|=f2DutfFR#bbU!Ns^PLT?0@hZ_va1|C7hVbCu zUsDQlN>)jK%N-C9z^s(o(iBS1X*nRgYHWW1i$*K->YY7T3x9&UIIh!N&%)NvG0He5 zt)eOo4ZO(c=)Ky@av=-|yKf&YDQ_WIIpk)&Chw1WQC>E^+N7MR>_gi9(NfcCvDkj9 zn)jW~XyDrHz=y1f>Ex>!*Zi}5!dg16aOb;julSR2rq0ChyA9YyobFKWYAi#p(i}pc z(h|x3Iusjb5)g59ca!hWULB9}y_M!-yNN_zkv;;&%EN=*Y{^5@h;*%08v0ZmZ$LNx zgaBSV@o3T1h_WX?^_rFji-QUAuHN}R@~rbM4gDAiaf_Fzp~`!sR`cFm1$W31&>{Eo z`bNKs;g?nbT{agft^Hd2cnhtDB*!|~ z)VJ4WI%k%5mntD59{@QZq1qb3>P1XMBmcCER^}-;C9NUX4#dXHpmwQ~>FDiF5)#XH zt9|zP36}iKhK2@+Yc%iC_^@V1%?#HUOP7NDXw~06f((HeZ>^pKcH`Ztqm9Jd1Wl`| zawuR8Dw)W4r=XrBp6ar6C5G_U^`uwLeq`xD+0?Z4GHCp3xW`;hVR*y#c(9yF5k%vA zJGU<|*pzdvUZM8kZiz?&@tKa4ne0@Vs8}xhSA-gPnLeR}tU7V{rgYrN5<#gq4cR>o z_8>I}Q^X=CBkIXr{D>ia$GN2$lec0JfOmGcQ2e@g zkk_tV<1%QtpsL4}PNk|Ujpw%Y!z+951wMbg(8`$!$WHx)F(A+uBNZ`xiYn0ac4w*S z6x$h2eTku#jgA)#B2`dONM=%0R75fB9BhtwbRs@Ll2Oee{(yv*CSB8mmOc^k|H-pg zC>eVpi9%@z`l>epibC=;Zii``y{(_kVa$0jjH;){fOUGe)(G2K+~sZf4T&oxBvRE9 z{ORI|Knh|Z-oJVIT|0#8iQ{4^YC7}e7S~qgiIk;^a!TsYL}|6?hQR`Zf`74 z67|R+ zCYR17i`pVLVJXwFHAQw!}$VxG8!>apgc9k==UW6w)k_PtQ7jpcJmPxd%G zn18D!jHfGblEA;>$z^1Bu8AE(XP9abe*TyWGuX(hgRwk?cCIKSem? zAq}qg5@PTI({Syn8-9P_g$$Qa!ZFAe1kaTwM?b&z*!zh?U*^0{=W^qoSGv~mb>zyp zMDFr@|9k06(^{oY{`5b2Abj$aGlKG8Ql6Oc1^6)Q(H#a=t*c9!Z|N3@9ozexBio9! zsHA|acN1ZIGcaoqOKCPNkB=Lq4qmM@jAS*Ig|%G+Oxg>1zSCI>)(-FUZr^pvKiAH& z6pd>+@X_*HvPAHw7dX_ElrO!!JXRX1UC(;e92lTHBKY07cZaU)f3JEr2c%dYF#tkV zTcpMJKMEVJAz@QC1lxE+AQ`vARW_5i9TcG$G|o{!k^k(Ec`!Ahqfb8#zrecsk6S=( zq-!!-Uj3Etv0h$D$jG)hc|?c6)i>}%Lhb&N=uRW!vqP|dL(=;Vmw#c;!m~#gUvRJ> zBsoF;2UPC(s;nxhllG+a{t?aopk6iq!S_F>z!R;A_rLfq!0d_t_1AU;6qS^wTBE{( zf~wWFu#X`5_31$?iwk;xVpa@jI%qFgs@TmH3m`XaMh%rAS#_qUkH+&fe$36{LeM|1 zmkjIb>H^kHHCKy^o4Z6j@aC*R=&9dBetOm>2E7BtqQr4d6?nd)qN2XOJ^;@2p(@0G z%@|V^W0T}zP$s}C5nqBEAC%JN6R;ZS&L3%ZFr!2lZo-5QFLz@2Z}*F z2J8E&kP5T@gFi=AB8#}YmiI0(Dd{y4GoCHxu`f9!YiM`J{s^R5MZ=W$fLYRFoh4^R z{(2~}Y(K>x3#wR1PcLd_HVZfbvgsBE7-PLW@y}b~9?jO%uVOR$a~t)4G(7}=O#znc z$^Xrd2>~7TJqrPU1TyWfc^0Hd$ikLS z3r}I@2kZKGN^0uWANOnsSPVs~Z~dy)Sn;s{cBAm?pCyUwAlNMj9JFX4j)>5?ka4Xs zTk(1q^54Qh^MTFHP~_&gD-GIp+YW67wY97t^Q6;U zf2}b+1mhkopHoE&u-z4TyQjJlkb{zDt6!Bf!|))XC}M4yh+3TyS-vLJmD7G-A?n)%tQ@eke0Jlfb$$p4E3Jod%@2zD z6VKe9Ar56X?*UNxeh&ZwCWTz5p>eYq!h{qKg3Q5i;=0bZx1tmwT^0qDnf!Y4q@clK zdx!}n%x1QK`W`fUbO`h~2Dawweby?rgGyt4c(Cu>=3Y-^*qx!2203HMww~;>FX8Ua zTwaC&bf~trwjh1eYL~3R%`(QTJ=Jc%j*{W<@ZH&N-Z%#L4vCZMgVmP zJPR%QgTAD2z;=HV5ReuGISSTfw2V3xGi0bGjgD(etx=rCR;_8_rMFYuN8C0QBmnvz zZjIqLTXA6{NVI*!{mIzPlzlGUPWM>3bnRRG18lm%LTifiwu^&YZq6;#`#bBMtAMT@ zQCyH)CqhEoXETSwdhBO(y2(kIHED05(2eY#hk9F+Su3#Wnb^E6%1KI5Q?3W z4Fg?oTWjDgF<27NYAayk_plC1z=#2e*GH& z%iNx$)|V&=-h|OA837cJ18Ns~$~8O*f8L$xBntxl!bzo;A##4#a27U+%oGmTjUVPw ztZzT)D%N)NB_~rhy}d9{;z)0peys5`bP;wz9en{4MRj!>Y+fflo-y zW&4#y)Q=ew62s`>wbIU!p;z$8xL+c>LejMa9)Eg%GDN4y=EekU?#Q0}H~_9h>vI_j!b^7DB5S^$ba8NO^2EZODqH3Hi8@F{%H^_fnuS|N!2jAdw} zyAC5iL8sV{(?Zjz?!}OrmQN#KJx9NQu-K* z0MN6;d|#lMR0z!jPYSm+1wp~;bcLj~2%CNHy6*fmuDXNP@`x#+w|DeMoK1gazIVr) z=-A{_vQOcYOGjXK#R}($YcL)(L^O1qu~OR*8lK2|&TA$bBks4b(UQS*Sr1;EQoz^{ zXeu3M6q_oyMqf{zKgL=A_J&aU>`Ypmdp)-2!F;w+Yh?cYIM**b(d_0ZcT~O*_w5!+ zkrs&5lxkp<)~DNFxM^;Iy5LPN?YR-fY=Jy)DDZ#r%Ue#UyzJCI}%`` zMdlJ&^M#O>zLkxlH7R>J8dD>&DDNXYPi2O5htMj~C?$(uRF%y)3ZK#>Rw(|d)ufax zg~XNXr-J8zmK(C+OuiU;{!X_MOb2 zq@^{5%R-RA=^*0RY9YrflBLiVQurm)dv<{Uq9oT zwjgFDE--}ff3)%dD)L1(UJ2UnZJw)eMhXlL+PamAW-$=rcHTw;n!g`TT}K!?H`SA= zG6&p|e?S2KDsMt9{&$jVD3wSFgov2f2qbN14A&rm^9tGZ9r!-BPPJ>KU@wt{)*%Da zX;Zjw>8@NoIRZusfX2C+g-oFoyie}jy?a;e4QWV#w|6+t`i4SaakD6eJO;x+Z0kNpw7l-}E&u`rF zR}WA{enJ~@tnzII+KwC2{A*v|(Z7F#**PqR?7+xrj6E!O&Uw$by)rTOns*Nfwa6*! zYd=2@;r&H8&$0q(qE+d>4|{}3r=q2|II6}AADmY~%ybE<8jf~1M_erPG|?Tap{n9v&z*>8N10P2bG|^&6ciM+r6?11 zSO3)Zk2sHmAM{q2^$%%jX`#mW`uHRix1(ImYdj?W+os1BN<~4GCostN@*m z!+}#J<#F<}rc8m7oIJIy7~Cn`>grWC^iEf(g6+w)T6O$`7c`Z&W1As!(ls zTXU&_k&)cMY64jU+~1SwuL*VU`c}wS05o+tqV1<-%ddHv=+)UZlHFG{G$wUWO2prS z^wC1N)4bpw@lf6=#i5<~J8Vt{?UInZQ&nf~(afH@6rX*N?KrcH3HYpP8vUcDn zfQ*DoR~M4KKYDyIO*G;M`aM)JMN(m~O6|mj#ij)MXJrG>Hvox@7Puz%CIw0S<@*ok z)0ByhXIfVJUpiP54>Np)EQ0CZ>1E^Up{H*jiogHtIJDdPA5fbYF5$CT0sZgqDJp!K z6-Bay6%-X-xm-tB@jW~0l3O2-<7_Qq>YNj^+jQ8>NkcVBqW$B;MYj5o6YwbbTMC!s z*YX`PO$fl-uSr%o+f8B^lorZAsa{JOroQr32%m3v{=I947lu3M;Hp?tHNkf|*q&mS z%a)_+%229TpPL{(E)8_5Nj>|44%KJU;X`Gg8v_SiX+DwLr%ma6YsO1%*E}gU8w}My z_Yr!lp61n(W-xBfoo`Wp=<@K*;;o~>`keM#;GT>+<;8intH4xghizsg7cgEb^h5Z( z%UI?{6<*PNE*!7DAkn9#rV?j42w%P&s`;g}QXNk>R^pXyk4&Q?BIR`oe(RQ@^Mk=q z%6$^%@6@qR5|OKuu4nNjbv{`9&d|$bhB588i&0$LrQmV0 zh~-7nU?paPE}-ZIB%rbOMaWk`OXV5$)p$3Ns}I}Z{iy>e7D`|3N>|Wt3Zc#ZG~O5t zj7IAUTQDsAN7GI!7M7qg-3Q%tbC=3KKne*Is)KW zH?MXPCG*fIn(gBzL_bLC)BsE60){gQ? zdatt|X_y#vD$3kdqR7k_KiN54M5#uJwV%K{*SF%cT(^qia4tq?fAyPA)pd&DJnH}q z*z7Ys;js%)q*AMaj}PC^Kz_uXb%I*mWi;EBv4cqT@o8G;d5Vm!i+VAUna?qqrSTGZ z`aM0HT-+^DziDu8fxXXhseBVd^%vX?{KBA`-M6>By3PSfEKRN{=JBwE$~aEzYI)py zD@jyS)3np-S_?mcuBoRJkNfGKT!a3~>EjP8-QA#mLG}6^dF`)8^Lo|`az~!OTC>Bi zoFXMWYT4?6c$FZHLY3+;sBEV+Z^tQ9Fm~^Z@KnHEmSmCy7VvHe% z+2sTZW`2tp1@!=UpM5AG4Y4OSubY(E|4M3NpECWDL;HW~7IEJ4A)O!0)tcK)yVF6p z*zV5q*k2DrcK6X5NwuoI;p!u1F*w~CJl~N`+PwY<+3I}(VM+eE<5^@CO(pY4W#@;R z+HJ2b*6a)q$tG2WInTE?ISw;i*kx-Czgu$;SLP{hnp~XK1~qV{KveUfQ{)o_4X)D@ z$Ve;aUPINn(x#T0W&3X*zwpB!6BG{m$@g}fnJbe6uyeEl_yM?@5yt(n&Jn?4m}m|b z^3RU5T?tXMP>W`=qk@dqb$hKAdU*L(S$y6V2$qrwoG?^F?-58bJ?c;niQ}{;pX>Mj zyG12iOaJzuV&!5AN)WN{RpHXU5Oof~*e0U*fb|8V=Es*vchB{O!jXOoKYD}%~+3RX+ z<*V`;7uqkrnus6Bk=6et#t<8MKcHPqt^v!VJ9IPS>b{R4*oFMh642bY#R4HFS^bmU z8YqyR#idRQ9UWQ=M0pyy#OC^@8RNZA{h%S66+T4WFYV4B$l>!AEfh9juig5fhuGFm6_(zg?-V9V9>#t^FYB2k7SJPoFbLH-d}@xNDVR{#G)}m^R(N6{=P_2h zjC294+QiB0H?`GFV)>&uESpk$i|vhr-ViZAOy*s^6kOUh8DSi&yFWiv8U~J>c~;}0 z5VkD*Qln{AHohf~^CqSzYe!j|B{t%IMhn1;%BfgFYJr3Vzol(+*Jp?f zPuD8#et5JfbsPgZL{GgPv=fE~j6uj-vmT%P5<_Anuj-6(A{aM?m;#7;Q%V~lFh7u! zq$%6xVrXdUx#@no36o04kEePx7C^+5bCRV5MlK;%3))Qc>#*^BWxO&%dR@tf9 z=+J&+*kx(RF7iof;*jj20Br0+3TB;(Xy;V#A8&XTzj~169wx?o)XhwZ{ZMdNJ~sId zxoSk0e5YDH9l3F5|JVzsg#qMyFIz8EY78%ug_qYAfLOLGQ1UGT#%-}Frvi9aPSbN% zSDe*5th{GCD(tq}!&`cN0fHt_=+!yh+o%_2RB1D<;iNkNkP+KB6t4HZ#xFPZW+UE< zyuQ*^1E8eApUn!kb3>am_24v+Bo2#uZ7wx?(<;p>owX=CH9R7V{e#^lfP1N1qL+Dk z`d*kgNHOGG@lT8(h4oR)cSR-7A*D#z^VE7SwaW;N!}`#$vxgGf3#5?Td2}D_+d#1t zXzn8q_O^kW2~2h7^9Q+ksxf#9HtrQnz8f;jo2H^du($u(H-#HB;M?qxiQ^x#{P3$RHxqZro(-SBVG_BC0VKpRMG6tL}flXjcMa;8Dy^TC6nk%c^nPo9__ zf4Cv?jH2AE*i4J0F;qycI#`Y$37!{jTS$t^p|A%xw7gREi^+wPHkU>!A)Q#9CX>oy z6uZbJZxG@UCU?0-XSEtYjM>AyY!j{Ks8=a-Y)e-#2a)3CdS0HnY~s9TdehptH8Qk( zShTb|&LNCSAh=@ZF`cQLLH^;vyXf%bL6g5%5QMngI~%kLsu;y1Umr)C&f#pLZGYUM z-B%e2R@c63gJYVBGq%l?b{|p*3n#qd=Ot15=A&oBQQ`cwbphB|Z>k?=PSkCE<6yw_uiy(a0V8-w8Mh%BMnKLNNEW zXA7fG2SGolC;*%(5t9~;YW7u`0H;r46mH6gXjwMEpZcr==3`@H{qbF|_-I4`&3j4G ze0k(Ge$(#sZnwY58Z=D7R=Uhy%NXP-V?g_OV!Dk(o>a(4F=Q2J+xIBQj+>9ToPnT~ zAb;=f7oPKxRAl^qpu&MRzYMR3HLvwYg;i%mkui;7HU{l9Wa0f<;FvItS3kBRKagQV zu1Ny4FDGuA?of8@^}p_Apr)eb9H1}u@llm=IOe@K=}+(H7KBdBRgYCt#q=I-PiAVt zGBZ75bZH!2fm1Rrk$P~6tP;RmS)Ez>2%Fl7VsKGhiq`2V`l ztr*}w)H0PD)df{MMT;IUJ=~zfivjYolSwuL2%L^Rgsz!cX6$AlfXnHi8Yu=bu-Cu* zxnS?UmN}7$7~Ky|Izwu{_>9C2SV{KUJZ4T!OD^9OY}UF3ra0FFQdBJGx9Qd<$vVOz zn4+-7<9DZp;K0}?pkf=FUw^uUDdeIpt8AnDnG$VPV8Tk}@te)fr)*ndv2xcs-`G6ORR@aX;HC=hQL&uHjkf#tW4 z62Vk2aPVct#ZTko8_VT-UD_ErjjIcZB*lYsRQNgj;UoV!2jyM=U9N~Ig#|MnR<|98 zjTf3ye~@c`v~CukV6xyapbE}DlPio9tOE026KVjShdhkGPd1;X^X0bsDt=Fqtk{PU zfX5&0CL}AmLerf-*emR08vf6w7sKX&V)i#U8NCKl}1FyF?y;6O^?hLTsOt6~Y||ge7V#E16UZ4MAp{lG6oZQfm?wPa`SW9bSt_}vjp%_b{ zDp!1wdm?c3o?B;AeuQAeP&_pEv_jzv*NIz_jGpKtQ5ducG9n@(GBWLK^}CK}$yGfT z%tMxW{sq0wIvK849`5HsY(VMhN(K4{800+YeuR|AE44BTBfVR3zR!b|ogGlY@N~}jdm^l8F(j?jD0bV}>h38xH?8HAM+y|;Se6vo!$nn30;@?U+sCRz^ zDJJg!qY3{P#QeV-J!@_@=$S*E9OH0kjS+kB22S_N)aE>#%(+)VhIwg0PtZ|+ida?0 zOn&=13)z`Jd1D#HHj9TPIWqT%K13tZ)=wOb z$1KTz3CCDi@lU}+AU^dL)Jg><&q!HSLOY+|1}Ye0a+6tj#a5vDEeYd(pH*?eW2C5DnPc5bKAHUBfAaq z^NPRpJCq+7^MJdCUFc~&E>IR1P7wiJ^7)+~UKGS~$`#A6P3)1P~HI5GVOGPeq- zhBP1!T&uvG;;u|wQ)$NN{@HOsF+{`cv0*oWKDetJ*j8OV4;#YK7#3v0 zdax)T&c#6LUiO!c-W1;OCuWCZVD7*l(^O*eb>QK$yPkV3RTCXpv7m>Y!o{BV;1U%B zt04|%%8oz%-M;^0kl2~o?jT@*c`qCKG=S|u(5(dBmQvpaLQ@%-5ujWufg?*!f>K-P zap+D53W^Pi0bznMMLW*-{X|vl;ka;K-z4EU1Fo$f)t+!Qyg-0TyCSG5ZUp_%%0}-F zjF(ZPJwPj>5ddV-G$-)(R!v4QfSO=(aS4fpAOJJ<_4P^uklQdeDLXqB_9yGzY8k%O zwoSo!211V)2P0~Y0XH+?_t&ad0PhE;ZK}4;N?`4i?O2}mJU<05NW`vQ;*i0w*~+Rr zO9$rH)OH{#&yq9jCd|Fup;gNr1guM|s0x0SJF$j~TEWh8Y-|!CMMd{Y#DSIMd%UPc zH`AGhe;&A{kH9`(b2xZApJisyDtf!rPO%08 z;ZAQ#ASY?5SapWHo+$APn(^!8E0i(OD)BklsQT`e0jx*# zI*PyzBlHUgxY85?lTnGS6QpKG9# z$<7u(2M+wZNiA)4`KZUk$SDXf8H~pFEEKHsTrI1{pI~Byj$yD|#5Y>*-nLNTjbsu3 zeS5I-Vq~=@(89u20QG|o^NQbhB5%tZV}4jD5U9N4zW1crUH#P+wXT2(#N?OqpX9w~ zOeve*v1%FFEL2%+`RJSA#TOYu z=Z#ftPm+uwvM21@_zI!#YKdS4L&i2(^OX6)z)I(_Gm|#*^ZwmUfNtpqKz!{KGoaIA zX$5RYYwrjd2`b7KL&|~#d#f*6{~1Z$RhF&=b3?{<1wgC z1-JQ>wTdbMjZ$p2d5<4$7SOi5IV6W~brC5(p%_;#ZG`|vI<9!0agwYjh;K@0Oz{9n zzEoa`(@kI?v;g*{EtU_=s*ttWLzUCzpHZ@h?tzZ!U(RuFJxpxzxNV3I<{)s1kca_EM(>C>KZ;i+TOkLD`U2(py6(MtGlYQB0n8Nx3>d}&j*$CapjqQ}a==*OgtJ!$0QN}*hJeTNp1b5m$I{$xu3WMi<`e)Vcn06)uyK37TcD)ibZbA0d50Q*gSk$f_6 z6r=3;OGMq>w};aSxn57VM+S2m6ppaRQd98b&k22)W8qb5fSc1AYFK@rMo zr~>ZMNrY@O$Ta{=nF+xXt+7;3n19A5;t3uu0#v4@Zfi%zlOT)M%)jK42& zdZ@_u1#_rgKk`(W*jUh9U)FKQ1F#^0BVb7VrdS~4AGXqhCTn1x+QvQ9b^Z7Y^4O64#=AR)oS z=68{YA>G@nQxId#VZP1UpTSoRskAZ7xd^CUSPnSkfjJZ;!5VL0YQ2ud9dx#ZuUGfc zqPVEXisNyNu893=-0s6S70W`Guzv>_04T>l9D8+H%5H%&Z#@?B&s&_9rPr(|YAPzc z_*+&lrR%YZxs9LxSm+;Tpg^!yjHFg374#MeMs!F~ZcK+7I!`A-P#kC(D zl;c^xnU-}dO-@aHL(W$Mg9(9w2ylp*A1qd~uDcN#p0BkM7^vKT zEp1Sn-D9v8>I{(CiXgcEi5;W=#EvX)ICbH#ZQREA>;v!ac8bmi+&cLbFpARm<}l}a z2yI_5Qc=sr4wt(GXDzn1$*@CqgZpTsFPVKNI-f1tW6SOLs1dVn=!S`!qeCBU1VNMNzJ84Y;ca_&d zVwElWQ_cDXabcoxk36BMTO~>}Pu|~$(hFybuIAj+u7U$?N#8V{9X|;Gx6X{qgGHS8 zE9O)P=N00MGA-&>dkr?L(wm(j$I5IyneR<6W^RvBeFQ-dC|WYesXbI!MFhxkh9itl zH}>T6m9JmcAeEcPUWlm6QA&H0pR%pR15OX@j%Rh&eI{8O2Sohm+EWhz3dx7M)0jDx z@`8Mxe1A*vZsLZ!*2U&{N^NrI=^K$z?&6WYqj!p}8t*(LZkA~@=>^TvWP93-LcqOj zxawRlc1?4;o3O((+7i5S$~zzDycd#?7CzP{yryvOeLBr9^Y2IT2q5?F}K7M}5HubLJtG$~4LrHIK%D5I~ zucbvQ6C|399Jh&_aXDm$Yz!ejwZ07Je-1XjSu3mOXs{2tqGdS+fNtikS&0l)M9<6A4-VUj zG&ufGk=fys(tSj>dOoC&Im=i06tX|-k3{D8#%)Fus0Ti_+AZ!R_iV0jb3km4$H5Ue zZ%GqkB4S(V?3SZR9Z8$! z!1P2DT97r7C#WCv(668kq~qWQ`U}D7wkTXqi@rx2X_MQ8JdRQnIA*M%qwF(aIJq6M zI$pW4v_`vbb&^#T#%kV|{e+SDg(vHWwD;{UYyK^B8_u7=dVKRgODy2N2fYvQ_+l-SDMf!n5HrL=^K z|1Dda99Vn-y_U#rueo8S>Bx2MWpJZDI!k}3Sg?Au31o=x!Q!XGlgm!i2h4ft}P>`4mctV|cIHCx*n z4OM*j7)Cr!N$!>q7gvYlG*G^2J377@fRsS>9!|Qz9}kd!`{`gl&rn{kpm&}VH$);u zerh}p!@b_FXQ|eR(fF7LzbJ*Du0A5(oFy zLojwgm#q-Hp~iwaB4ezwBd01n5ov6!$8+UKd#?T^WZyp$vMWd?x9J;yNzr)GuPCcn zD*CEiO_Wsu50yDBL{1`;^uesb-qz{DHVCjCLE`oWRI)_BpDMmae*6ha;DR)X8%Ax^ zo~-$GM38{vT2wv~fEs(tg%X7#Q7??05f};@?*xAjknOsPpxH~7H9g*y@Ut?G3$r@b zRUZnqF1E6k14oNinHwx-{p|f)CVp+6(F$(Nnw@@(Q_%wqof^&$d>X9lC_1urDr23$ zeJ~G0aR^mvkzdkh43l0lzb~q%chgaCPxb2)Pm{vm8tOTchh9b<>tzk1%plG+lKI${ zo~>niQgVHr{IrHG9RQ~SqZN#qyPEg^EA6}EvEJji@Ah6sLxVE1S|}A|rHr!OcFG7j z5i$}{sZ_|`BXJXM%F3px5XvZtQpnyi%6P8tjZWv(`Td^P^ZapMuX7IW`}_Tj_vih- zuIqh$bd40lsS9OuD6YgTnC1Cd1n6Za6xOOACvB;)zWVj)na38kY6I7Ga!Nzivhwj+ zcGe^pdY_1#7Euv7jOE`2)72EZel)5m2`Hmy7iVCqqsN&ff~8(I*rltIblxTg$+n^@ zAiod+lP65PnrW^~3K@MSkOI3fCaEW1PJiPySKa>6W)Xp}Ce<~2#{MRwzlVbPl3f?P zf~RHYk3$2`m?1WcN#(5FYxQ+0Pud0*`kwJu4vq)YIx06G^R{uU{Xysf(b?QTXCBY( z14C4^}*P>rYD(l<=f|gpjRS;AWSK56}%BKxKkjp}Jy; zjKHN&Zem3QYu!6u_%vSdDLnPAet1nNhD(Ody+m3plmp!Pu9alJ6pe&K=m1 z@}|Tu{gCC6lyf@SOVZ5h_j7O9eVW1a=?P0$$2E^fQ;{dBR1^68nGbIhwF3I9MCs+H z*id+vkxOe1=X{&J(kqEafZ1$`M@~*KnCUYgp9$P1MXlrD;Am$TJ2WjuC6dFJ8b6am zhT>wTA?sN`M5>UdrZ}1*8$4-JP_`vTE{y5x`-!P$%-Xzro}n?6akbV9J$Wx``HAxX zDley?_$>d4oH1n3H)it|MK6BDe`N1_uO=I z+W;vHPcm)rk4ifHZ|#^2uUo^6IVfyx?vIHL&^08%X~TXr;-JpJ7S1=+vBP3FCUomT zMOS^GQPFni?euwLse@c5965v<3Xv}3bhQkBbDD#SvSg7<6c>o#Gz+ zj>q&ys|TAU#@#nKSjIgoqGH+Foh)0nd_hH1n>ZotG~oboo0M{1_+ijv15HH(fW>an zmVSCb4ny8gF8W~I>J7HG-^Mv&&TnFk{w(#N4Z}VSG6MrSQua3nqCkF2s41zkGBS4$ z#1VuLztO3J;mnrs3$48$%nR6$iC?&pKYpv&+E7wqFbLi$M3e4T9spH9IoqMmKz2It z>;}DxRLGW6_n`v#6yPjXW)U|60CH75C6h9 z$*Kwv7{fGw-tQq6J=` zY9Yg*ulz(g%$l-e@fb04REwfat~Q%DH_#7yCmsqm{tn*zE0Y$yX$82}QF6`Ls`b$amuU%8C%zVCS z72i&PlSGDvnEBItH0f0U?oM~ib z*rNWO=(_>w8`bva<0$%A+jltAEvubjx8J!v92*(2+rycDvV6@dcuPdm-E^thoaMUV z$@tt`$}+*3g4eS0ns2U+J+fH^pP~`IByy8o!z`sW=ky@f9GtY>ankOY2d8q3Te5`L zC&U5mXelpO*M&m`??Ac6gugG@jG2r!ot{arYUd@3BQwUVYv4xQKQWQ~tR-_t|WSD{+F$?OOeknQK0 z5%AnL#r-Jj8akD=#j<9y!8^d)$EW#rU10Ly`tu)as$EyHx|v4|G&X6QYS_t z^Nm`frmDo)cgs`=nAE@X>(_Pru||kor(h`TQ&YSxByHJb-%)Zzmu8niojQWl@cj8* z>RX7a#r1sn;auI_H$J_RP|p_k7<;&q$yV)J^WZsVXi8!gqYj^1F?Y$d_=vz7yi$K+ z4e%woKq#NUNuVQ!P&91XWajXAPVc719aapHlkRs`#sCxkZp$ji_LCW&eOBx2Tx4QK z1$*a_jN2s32u$b>wXTGKXgoH&hXxltGhBW>k)`lyK}%{;z~v7v zOIVH0pCLW)yYGum!2oWad``O>8l@?E?^jL*mFNtog05qODbAQhWm?nv+i<9QCRY>u zuCs#Ve+6r?X_i@>@fQ{V8RZNMAg(cQoz^j;i*ljr3=jWX#Gm;PSYUh3y!B~vPfq{WYtrE~Cw1)O^&OQH$T})hYlvc&Q<6MC!**_?uI! zuF|e!k{~o#Nhva^!88JJ%;OhO=offICz5(D&p_TynIEN6L*b@7 zwbMP$_mAi0F5s|(W#%g99yByU0YLimA1*eumhA%d^e)v%zCs1z6)f51OagoppYxv^ zLNalJkqn~TYm4MGW9_`-B^KMZvx^nTDVjr!{uKpAG`5)}zUe2@5vEx>!1(sp7Gn}A zS9E5UWMWqn&q*RN|D2DCIN~!z7tXX3{FVt%|IKFSUtq$2Y+cp;>BL7aob_KX?K^Bi=`MgQCWctiQPzvSBxq= zVI6iQ1(jag;IzGU%XP)>Dm+%J?8t>Op z{P#;};8gI)4g))@`&kW*k}41X(%9qqhLd>iy&I>;{&5OZad8;{*udiU>5f{Ihd2u- zfXyiuA(h|cI0z@Dfz`a~y;&{cLh!p{9Ks&L!CZAlMTH?9bSdX2FA)|ELfv1%iS!fw z5uyM6H8-2+cYC>l-UbHbyjs)`1l1duwZPeJ_bI+F?p0SzIF`Cv(@ z@lXVu+lwSzg+$81_tC)HAB$)!QN$Sm;H!oAC zBoP-Oe@d^B(n#*1N*(ihl9e9GZFto@f%YlRPM1Pl#+NPA1}FSzu&Ot4pm!rryt{wb>YC_fanrRyw9IMtAyj7U0mjpKLUcB zuFwMLCNV7yBa>rw_fk&JD(Wk?&VBpDCQ2+q>U6Q_XXdkhi;+PO*C|KDkLB% z467GDrS0j}d*^W`oI5?WOM5rXeA4V#k|7ab9&sHF+<6jQk3(FhaMLMHN4`vIW2Jxsb<~pfBx*n3oroa9P4+6k?tk%%mbA6q6m?K^V;63Fk-=L zcSC@D;ysJO>%&kf=|cD zhNI}zDgK=DmhtQN-?zZVX!Jm2uY*udNQI`;hjk znp=utPrqNVwI1<|)lKhoviH~3RJ~rm;(GnQ^`RG{?xelt{w|#8YoIE%gA`#0iyWd* z^Yq+#w&4-fi}wnl3rxp9C={VAP0%gK_qx+rE1`3tE4_cXW|?5!Yjh8Z_WGg}hoP?O zakPc2yBC#~=C#FyoPJ9s7!o;{d}vlwR=N+bE@nrBI~7*^-4aaz?G0Dg9B-|REoW5I z-evI86LgnUBijFX2UPAK*D+I-3qqT0aNUW#>knkT!os%g6YJLfs<@4ATa0|fCi^V3 zj)~8IsRBcTQ8-k(cP69Y0m)Z#AeurMA9k9|NIM6MV>Gz>&e2%BP8dDj`z9ch;p5{2 zS81B(fAUq}E=Fz@Pc6Sxpxt_5?@yksVZOv099jb`8C!4+#y#-!+F|I|7nc zfQo3;qGV^|p{V`(BU*YMpY8JmwO$tZUEkybSu zLe&R+J0C5Ti?+4jug4j<+xYbzghBJXZ*PIe80;}Yx7QdLoa&`1?*dA*t+_j7)1Rw# zp(gaZqc^6?bzvMpU(py|Ckb9XZRDpPuUK=j=}L=x7I?y-Z~$_d1gpdV!bSn87pF!C zm|E|kYWJcnH63d|7r~%j^niGIfhI27Xj`|-uD3ySr@PdxT;E1SHTZn*?Mz=vsAlx^ zzGPZ7Hqn7qN-O(Ia0JlDTV^p9^{ZoZo6p^l=esiIzAYep=gG@e7a{oGeFxP{`N1F5 zrJfP4ZUS-w{yKgp*=H)Nt2JEp!_8vHe5JK371PtysV3)mj!oLaCbd3{m0^Q)Oi(EC=>NS_=~KJl6}5W8Pjs zM>oI|i}kiJ-H>J^)1JRLHy>I4q-@M5a`Tm^6ANcQ4)NWxF zFFaglb^1YQ4cc%TpS?C<9D3-UAhFWxEc5d<(cY3x(H1BmBaPm(C%j(4`#x{!8S|=pUWdX0bT4Xb|9m## zWY6Pl20dUhd`?L8*%{(icQnub?CqEBVzFY*{H2~nurXnEhYMj*`NbjrMHiL6fwVBp zwXfCBBXhDQxrB{wm5`W!eSFni@%X(?6S+&((XO+>30f3Gac@7x80tqqwc{rH-|T(x zaZiy9Px!^Z>L&+z3)143=P)nNvD&kD_^_BsqUzvzO|GJN&*P+vEEn_^$)47NK6pLj z)~5SRqf1&K-d4~@I8o(IHWge{?^Q59^uh9`{rxbpJ$)4;uynb)N2X9c^K9e>2WUcJ zGqL?-N^O=^thOFX&k9SJDq^ZCp`zH_sl>_mwDnCC#r9La27ff`Hf z#;jyJO-@*P`up49gV4aN?t#q3w*0`bl(Cmx)U}`_Mwu@+zsEi{`>Igb@Id6U=q{gX zGy|umq#WIPZTZgnhZfePvx+t2XKTVzA7`yezDx_UBA#Iu5R?)2Ef5?2fnnvK$;?uZU;#!Rk zj|v>)*stkip2b@~psi*}S+XO{+if}nbA6wq1^8jxp{S!BXV$B!#gd$Pp3EFzu8eF6 z;`Xyf9;3CGpP#?^et?^so9@_`HHBLJ9P;7X+Y#KvDh$~;bA}XRbgj}r^1@3H3@7 zDm;1F)X=y|*>GPoUB-hV>4BRzs?avRnFoN3byoEQ{twHR|6tu|ro_$@q~JlULcW0T zZ_;PIANNam(W8|wKL72O!9&(7haO7YPtqjaY5Hv}uJ_fWKY2r@UEkgPu$(mz6MI~+ zKu7Og_tEVH<*wWa=@Ifx(_CMj5kN)~-({b18lWk^e>k?!ubU(0!onN|;HcjrEpp%W ze2Y)#hm0MAbY-FUt)cjARFh)dZ`Io1TzdP_C3`k@kySamnvBKvA7T>bh!$O)$pBXI zNRh7&&UTK4&Dw=Vcflbv-(Vqv;p4ZB+8Hx^e7247cun^Ic)m5n!O0}AuW&v8saJML zM5yNe5|Lyy>jnfEna$%B9*;MitV|uNh~M9Nac^hY`-Zyp^C;=$H!UU<+M*zdZsG*=ds?W0Vm79bWBjYaDJDiZy_#Dx|8Xqdq38NmLsj=(Uv1qo{wHp zEsKb@>?R6nnV08VI_qw!ixJrv{+n}iOIWJa4!wD_sD(dw3AHUN%bQ;F#On>}cTB_@ zjpoPK5`VdVUcM%e{7jT1tz0lYL=L*DUAa~^-R`q>6a8Xm(z3r_-BC4tpzM8?;9`e# za(MrAc7a#5%MR;D!Z@s2T_$AI@{zN*TJwByrHnK&vn1!e4Q)2Xh_j#6RE2s%!!ATU zQZsGllILO9V5~sy{>6DZ-~98RlSu4M#4|}!S*CuU_@B92=NgZ@>RgCMZ@!2Qz5*J=yvX-+)B9*uk0~bKZOT=O`50ox-YEIXpAzJoxb= zt(igb(-0FAv$3(ccricg>3U(pH_r9K%nz#znwy%IG6`_9vPvv}Uh|@Pp6XB-+tdDMQKHxN(^04P!NSNL3q3kk1ILg zboSeC%cpv~Mk1^_DRBz$XT3K`Z{CX;Kyk zJ3ISYYI~7|Zvlal9rF2)Ww`qox%~u`0AOMWQ(;gR$axkKEg&;fAl_j>!LfDkh&rXe z-Wfmmb$ri2frj2G;VgWIbI#8xO1*sfa%X4f*qDPA9N6HfI;jetsY zvI&&M`0-TaT9r{$tkK%Q$y1+zHXfGm)8oT|+YDz8L`PWB(bn-h6Gl4TE(T%4k8spT1yf4*nycaw{k( zc!q_AMMRi)_g;$?Bf6muP6x2p`!)Ws+epuNrsn>tM^XHpJB0JY@7s&?-C}BpTm7hP zhYSr3tI_sBRJH8dlKTkzAW@0wEv@72XD>zJ^LzQ~6>p;YbAAMayXBR)6Msa6H~)w~ zO?;I(!^r7G;bs#`Uj!9R>j@Pq_kcD7*phzfrO#-6*M@o=VcWQ3?33>ALA_B#W8URF zFd_wCgH2&EsgmN|$mvA1G;vD)dF@qrb0olNV&csLIy$-uGkN>!2gt6{%|9LF;)*-o zo2&{I9vDThh%)r0d{H2i{j;RE(gxnJT)Q>DHc4=?aOwK|FD4ZBW8~y}5U>#TuTa-D zB@iZ`RP{H)SS_TpAp^huuGiKCvD~t5OM5p10$oBmX;79d>5(b z`RkTBv%M@d*GdZ4HJkdg3U(>|MZ@tzJYO=Bu+$G6 zfDO}Ej<8mZi%V6z#&G%3%$KbWr|llQLXE|{>6UpFD6?6aCBvy~cD^*YPG`JL-ifbYQQD{aOh)~leVYzI{HRn9 zle`J6D-ubh8f zWCfu@U9$f5EY^0ph=XAvA#gqTIM7la^5d_XZI{<9p)fdRVdX|noSlH_z}JKL(nHa{ zKB~xjn|*-G}e8cCe*tLqf`Y$~s< zHWrM@yeV{>n$@)0%Ctx-xE-!Suze|>t9no2bNajE{3{l}=>A%-$!Xo4nDO!SX^X&8 z^$2v6#G)mQZv<82S25BZcgQ7pT&0B-mfmz%io`N_P>w71IC%HoKJz#L^{@o@QAIS(p>7pv&IJvyrZK(m+BR^v?T^59#Y$Q0k^*v3OIP>|mexbxEed zGuKso1<6L+ZoW47<}^9%1j^BSjtH0sq&A_U8{+Ol7?zTej~)fX8px+?1u~0P10~0$ z16C5T`|Wy9pp-^y+$Jt{?V8sE5fT2Ic9W|D~*-s(9{v0GtA?0abwt z6)%COQj_TRCw^n-NW+%$pOYos=C=#`beT|MoapYu^R7L3zFi~b&~mnSNW2u68#uc} zpm#WEi(#wq$@}Z~tJlXHmlL;^n`;b^vq`kS5F$d>eMb%y?wUXL{ape1Qy|x^ z-YRAJqQ^ZKhjU&pnRj_zOw}5hu=T-Iaii3a@~z+J5`)+N```i3FS(Sf(gnaqH|Rug zim6~(n21yUhJvA5Q_IlcV0#liLCKW~v;A%7yoE)e-C*B`PZQ+qDv3qbEh+UPOm(Ye zWdu&`B)~Ys%LSZ&0VDRlnv^%BX;PPMozRy!3b~!4$jjGKF&rvF=2`w5jEs!d=UtK& zxuATL{}_*uWtLU?*Y;!gh>&ov@ZPqIHG1%^RD_i+;1elxWU-V!0s?!NR1XQ2yU?yu zecO5kI^inijU6}RDsjUgTVDSW6_0m`T3cUOeuLm{!S+(87aMI~CP%N?myZ&A>(M}# z1qjnk^4sZE+LtiyFRCcfzEk~f`F&^C7{`eEU(qtl zl1!icyu!&dAf-9obj1NR5A2rX9IZgQa|JSlw%k&k^}+xE|F}%{ai?+XedHd&^+1K+ zc%Dfv(!YIxLkB}r9&yFsN>UkOTSl!%NpQlx$^L+XwMJLvIAeX253TCpdW)3i(WN;l z3)@XTg8=P{Nnf(`$~o7zWk6Ot>)ej7=R1?u%bZeJafiwi zBS-9-!HJ3Cf`CS>!k2y6S{s9@Rb$*5Mf-E{>Xxs;SVm|UGB2T&rOT3MmHhqMA`ds+ z8swcmT(i{UbiJ$H*6}wr#3v*vb#a&1*?c%-(-qlLoZNY&S$&UJ0Ef+yXUW_Rfm8@a zxO5P!KjmGpMdGso#y4a498MBHT}43(BV!-cYH)B#Gd3v^V7Ot-Psxz`mBuyNaXyHNT}qQ}$o=+K3qY+F$H=Z&=v@m&zlK~?=d?EC z{N{43l*86IJK~Z2yX!1%_B5Lpj6clU(TcnRbDD8cH)3OuLLo$@7XVnaR8l-xmFx6aZJ?aPK_|B{g#7CL8&6ODS0_CCF=Ukf8+7zb z4D*=N4+6={87LDfp=GXh%Ed*+?bwYfpG?(^bNX^kG5OsWbK{$mW!9}Sa7>%cyuW?q z)y^`gj}MK17I?B5vn}(|wkW<;T*Rn(ONJh!UI|Vd!nUxZlA9!&YuTsY@sD7T9YKYp z?vkP6E-+(+fi97k*!ntuw|?{tMD~~PTe|5R{;`dI6mh>@l|UlBzI5wDocgahLH$v3 z`8AWQKSs@piYcS zuo%U44;Oy^h?{^O0K$j-AQZRvoK#oLw8Wc`oXw~vQXK}?rMut30I(Q;ijF5QYXXC{ z4+;tS0KsC!@*6Joc_4n!+K;Xj>6_kX4F##Lg>LK6gP> z3b2rbpK^=iQN`+xAKH?m>*N)2A+gXgLB))u6+xBA1fs&s&;^|`&Yza=!z0LDS zIe2(FZr%ZG-18wrJ{|3RmALW(DWMX!3zCOKCaA10R2~yl#RXXi$FTR>>8%Pl1=Jn2 z&;c19>>SlVuQzL(s9ErI{)IN#9>fnYls-N_gb!Rb=kOlAXRfFps}r>Z`S}OX4eeKm z6CUDU*~7&y_$=k8p|Y7sI*eWgM$TWlcIO@Bq3w2vov8hMuMiMBu9(3o5xoQoEC)KB@XSYgELnnNm{LVq{nRbt`^ZJl=&2YR4(_1h%BW9tj#)B zv^|c7d>V@Zy>5x9e5%b6xwL9PpV=e4e9>b(5Ty?#hi4;LllA;Ai^Gn|9hH&sW?(zX zbgrIe5P}F36O#(W5xqDIEOu|L=nTlHVXPL= zw~R@^Gl1?qE@RnhA;r#PVqP6zjr4EM<8lq@39k;Bs-p68T`2umh>WeYd59;;>wU7s zyO^;33Jv9bTy)O-(p`2uWwa>{b4#5zKm9Bj6qilS&>B}Q1r`H-zXB(+`#z!&-=mGqi;9F9dV0bCe5aMHLMG#Fk&h}ygv)Us(3%*k^lMvahe!B*uM!j zS9Rh0_bgkYbs4{RJGH(?gb^BZP}Qn% zEy2h2v5AO?2nlHo1$|wf`8fER6uDcuz=WIQRrmp|yni%pxBLZMY?YeIzRpQHqA@{0v{$ zDdE~!5K=bJ>5{W;x=!1>P|7utiB26}qGMJ+_gUAyv(=C)+l$2j0pf`||e-KYvLB$6>{S=k@WJDf(Lf(c#_88~y8K1;;891BvMo&D;;Xz?PA zse_p0D!*^vKHOp^9Nm9;`UrO3>l+af5f)Y|!F^l(e>t!5%6$p`QzK48!loi24Lbf) zi2Q&3!NtE0{G)`Pni{-#-}DobNH<>)gF$Hn*AID@Kt^rGbyezP$z&{TkP0DMSN@$V zB!}*|F0NB?ST5N3Z0q$5^!>fMc;0rIEF+1Go7O!^yA~2F~ z6=v#hAi<2m3L!K(Sy3aMW`*?^2uo%l9>C1bbdyLU;kTHzZvP{pqwTQF?(B|k;Bl}0 zVfU=IG#;uPKd>LIB39kvGUAFvK|deGPi1cCbVCAkd^{Zf#GGb z?2bHxG$Ob|qH>R%SgWS%$i4$!c_vXE=*Zh3Xr@iD+5G&N4jmH*T&BQ-+ahp+K}3}g zcka{CV>Qu=Uwu{Wp(s#|!mSHE#{}!yEO@39BylgDAJDuzmTb#VNz&F3ckLsmJ-7k^ zmDRqHE^{YSZ604=0C)?sC@4vij^}CahLL|RqBz|odNHPwrapauH8D&?%uOI~TgSCq z4rkReex+iXorRyZqyjE{8SeV9)tyk+qjaqzX}m%PlR!wVaPJ6!lz1$tghJFMLrFQ^ z@j5vV>mt($+4D{ zdGK#>IlTiaeyq~1AtQL;t7b2nGvTjrAGE!23 zxIO^z18hOKt-kk$H;eN537j%AO6ZtP(!2Wass;;e*kCu1G3#8&hq+n+)hcyG>L#3! zAw$_k=q#G;P}gDkD0aoz&LJ*S;R_j4^B_Q(7j*7T>JvOKaE;Jirc=3I1 zTIjCxpNZ`I`0z|feM7-m^Nzx+op1x~7c3Y(2IcPT$1eW9zHB$dFCS@Lo5RHH&?_cw z5s8=m3jkUYPex=dj>2s_V2UAtHhv^nvWH;$6}}XA2bZDrXr6B%zKFQ7$mb-G*#Kpg zAoz<2a;#{MxIn&wEN2fI#`Wb$qDRmEJb?%Xf_5~ug;U*Lp2GnGr1}6hP>fAw$!mR$ zSvdyK8nS4F&ccoY43Fc;l2^;YM6Jyjb;RkwRX00p3EX3!F{pw8+11;%jRozHQdqLg zQOPNSZ7*o4_P2>Vsd2t^3l9flpA~Cl)Z2VOuZ~KTj=K$)WPKBap43|Qh?gbU0m}V1 zqJ6Pz({Zmc-46C=AK}Wvmx-(cU9n(%^AxWJpTr6;Y`XcWd*4bo8@^H0Bt){a>+$p3 ziGQet&b$yAZKCHgLUS};Nj7I=E*no{-#es8papn?+J^(u;H(SKLS(G>O7>0rC82i2 z-sem)Ra;?o-0t(d>ZF=w5EnnFlZQ@Id;w4UEHC?4NN5FEDRVC?irs~^TJ@$2ox7^_ z)S`4`6xX%=GacPvi$o3I!1ojxJbThhYn(I(97cLYdlT*Xjyjr0F7?-EG+lNuw?(vf z-~^vi%3BH-lA=4T$cYYU7#bJ=s+Z&|qHRo*Z>9#UQe?nJrz@gwd|xiAL2nY^K*^r{ zc!!Q>dN5YP20>`2p!%c>Xr>szD=k26H# zgWMas$ZxpE<`bY{;0CfkU_rp9`0@stIgx^mAO~klm44#YkHW87Io;Wjm^L#iM3a1H z0F>7eq(+Fpe@y;mJ-n;oM8eNF`1CP7J4irj}%V%Gy5D08yg#g zcwc()x0VAX-nf>FYw$Xew=L7C^z1H*N9vCBe>?7l0g&VtD+;T$wdnia#XD%&+6P}M zHCWkMhx+(fRjaBIjLP#hy1t2HxD`ny#}eLeFw6WVX@z(c;8?(`1C*7xpox{?eY)&n zZ~A6RT@$oz$$;puKepUFnpK4rden0RdWIzKMjZ-3LLBFh^RMU(2nk#cK~NNYiHEMz zlG}Wt9Ht{~YrTSk;yjK$WeY_vt*xU{cu!vb2Fh8f5`gqoC0MDrne0ej;`Wse=Fz+p z0D_wAP*GMSoRUJd=71pWFWHToR1nrw3BAym=tGb9@88=Lw7z70D-eAl1+|24v=?d> z{T$|9?`_stghRC(-!rmZFJ}b4*3|<7SDv28qA$`X@|TMeNtV40VmEj!aqX%_kiza_ zW-+A100ak7jR$FMJQlc9%&{fha-{bpW7^XE>=x93-_TCLDWZojKcq}cf4{?-=HOVb zgjIwfkqLh5u^o?8x%WwcksdBy+hEhf3n+x~ZU#c}Yh%o9~CL!=ToOo1aZ4z2R1 zWvFk9P9y)B{82DzY6j5F;>Gj(njX{X!i|u0@3Vf0;GenK*(H_U;@mK`cWEX{IUGw! zY=VD@OZ4)lhAs*AVi1%>-hMz!V$acFO;Q@Wg(+|ewuC3uJiOq8ku1w;*U3Gf#zCG{ zYJ%BEPh`A6HQo!=Wj3lg01wSUs*3xJwoWm#zm$_l>!^OK64(@q9>e(XXhiDIoE}`~ zdAbAyFubM&v(kB5>WEPz>4kiEB)`3`@-Z1DAd*#*^ICseGTik|f}8%=tW!bSM-__F z$<{ewWSla#=6!{l!C7t-u7#qp$A81rO)LRE#7B`@i^2^20s@A&eu4^3-ALZP6bcGb zn1P{TP{_HvKe@PXGVJv0MmhTpnt5ilXcpzqbyqO`UBUm&EN3VainD1Jj}U_q%yAw# zuwQvxLPSP;0$&DN2||*&`3DA?ps%N-Ak)mkPZ`y;6z1RmdrDpPPgeU&#I$JZ|B{~m z!xth%(im`P&XlH@VoomTEfgZud?pW%X5y>}FeA8TQHPrm2Fe_f#Kav>qcE@Qj`NG6XnT25t|vtK6dn@=uawzcwym|gpgSzQTgCWE9yT6HoVaa zgX_Crw`>qu)KSG=g^T=$G)-gjS^i?msf}^78+bf{~o( zf8p0y$9(JuNcA^>2b!9i(7F#U_%6{r<)I37+KOpW=QQ=$pH?w)lw2-6;ASu7=j*Go z;~usT^k0OqO*F1@EJFV$-WX11x?V)stsTC@hYeQ-C7QpINA=~yUFvxldy3S6lgGCi zD(1YV$p(%D(cU0}jzMS1dBpEH18WpQM@DY}NOg9aRsl_enfUOCqGI(FAR)vB9N22fc6x_4yC-3xg>y-}A{|SCi zOFF(pe7!K|*D=IvR^E;Qh7cI_&vk}HL#Sz-jsGP5_+{b8O)gk{uz=Ll9`P6PZqkx+ KhmyokT>d|n30x)s literal 0 HcmV?d00001 From 0aa5efad56469ee8dd46b90d8ddb1ad12641c290 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 23:18:40 +0800 Subject: [PATCH 11/27] Update DG content page --- docs/DeveloperGuide.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index ed9e3282cb..e19127a4b5 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -9,12 +9,12 @@ * [Visualization Feature](#visualization-feature-) * [Class diagram](#class-diagram) * [Sequence diagram](#sequence-diagram-) - * [Add income/expense feature](#add-incomeexpense-feature) - * [Step 1](#step-1) - * [Step 2](#step-2) - * [Step 3](#step-3) - * [Step 4](#step-4) - * [Diagrams](#diagrams) + * [Add Income/Expense Feature](#add-incomeexpense-feature) + * [Class Diagram](#add-incomeexpense-class-diagram) + * [Sequence Diagram](#add-incomeexpense-sequence-diagram) + * [Recurring Cashflow Feature](#recurring-cashflow-feature) + * [Class Diagram](#recurring-cashflow-class-diagram) + * [Sequence Diagrams](#recurring-cashflow-sequence-diagrams) * [Budget Feature](#budget-feature) * [Set and update budget](#set-and-update-budget) * [Delete budget](#delete-budget) @@ -153,7 +153,7 @@ Visualizer ![](images/vis/visualizerSequence.png) -### Add income/expense feature +### Add Income/Expense Feature The add income/expense command has 2 compulsory arguments `/t` and `/a` and 1 optional argument `/r`. @@ -189,13 +189,15 @@ The income/expense object is also added to the list in Cashflowlist which contai #### Step 3 The added income/expense is then displayed to the user through the Ui. -#### Diagrams +#### Add Income/Expense Class Diagram Given below is the class diagram showing the class structure of the add income/expense mechanism: ![](images/cashflow/CashflowClassDiagram.png) - +#### Add Income/Expense Sequence Diagram Given below is the sequence diagram showing the add income/expense mechanism: ![](images/cashflow/AddCashflowSequence.png) ### Recurring Cashflow Feature +Cashflow refers to an income or expense. + This feature is called from the user through the `/r` argument in add income/expense command. If a cashflow is set to be recurring, the program would add another entry of the same cashflow to the Financial Planner after a set period of time. @@ -245,10 +247,10 @@ Once the process is done, all cashflows in `tempCashflowList` are then added to The added cashflows are then displayed to the user. -#### Diagrams +#### Recurring Cashflow Class Diagram Given below is the class diagram showing the class structure of the recurring cashflow mechanism: ![](images/cashflow/RecurClassDiagram.png) - +#### Recurring Cashflow Sequence Diagrams Given below is the sequence diagram showing the recurring cashflow mechanism: ![](images/cashflow/RecurSequence.png) ![](images/cashflow/AddRecurringSequence.png) From 8ef4691d972f4f593ad3edcddf721daf2e1c3118 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Tue, 31 Oct 2023 23:18:52 +0800 Subject: [PATCH 12/27] Update UG explaining the meaning of cashflow --- docs/UserGuide.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 86880d167d..1e5ae59135 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -62,6 +62,9 @@ you a one-stop interface to access a plethora of features to manage your finance e.g. `[/r DAYS]` can be used as `/r 30` or left empty. +### Notes about naming convention +- Cashflow refers to an income or expense. + ### Add cashflow #### Add income: `add income` From f2077fcbe8bc0213368d25eaf9fd3ecffe55457b Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Wed, 1 Nov 2023 20:08:12 +0800 Subject: [PATCH 13/27] Update DG --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e19127a4b5..9685c90032 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -220,7 +220,7 @@ public abstract class Cashflow { } ``` #### Step 2 -When the Financial Planner is started again in the future, the date of startup would be collected. +When the Financial Planner is started again in the future, the date of startup would be obtained from the system. After loading existing saved cashflows from data.txt, the program will check for cashflows that are set to be recurring and has not recurred. From 53cc8caf53e9729ffb2d4f3b0606033a68974d3b Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Wed, 1 Nov 2023 20:08:50 +0800 Subject: [PATCH 14/27] Fix typo to be in camelCase --- .../java/seedu/financialplanner/commands/VisCommand.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/financialplanner/commands/VisCommand.java b/src/main/java/seedu/financialplanner/commands/VisCommand.java index 9144b2c8fc..d02c1dfab0 100644 --- a/src/main/java/seedu/financialplanner/commands/VisCommand.java +++ b/src/main/java/seedu/financialplanner/commands/VisCommand.java @@ -42,12 +42,12 @@ public void execute() throws FinancialPlannerException { assert !chart.isEmpty(); assert !type.isEmpty(); - HashMap cashflowbyType = Categorizer.sortType(CashflowList.getInstance(), type); - if (cashflowbyType.isEmpty()) { + HashMap cashflowByType = Categorizer.sortType(CashflowList.getInstance(), type); + if (cashflowByType.isEmpty()) { ui.printEmptyCashFlow(type); return; } ui.printDisplayChart(type, chart); - Visualizer.displayChart(chart, cashflowbyType, type); + Visualizer.displayChart(chart, cashflowByType, type); } } From c9b08fc67025a01ca04125c77fcffd5553d4f849 Mon Sep 17 00:00:00 2001 From: NeoMinWei <> Date: Wed, 1 Nov 2023 20:59:10 +0800 Subject: [PATCH 15/27] FIx formatting error in UG --- docs/UserGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 1e5ae59135..e55232ef9c 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -255,9 +255,9 @@ You have removed an Expense Description: groceries from the Financial Planner. Balance: -830.00 -- Note: Balance displayed above is just an example. Your actual balance may differ. - ``` + +- Note: Balance displayed above is just an example. Your actual balance may differ. ### List #### List all: `list` From d90ccc549b1c618eeb27f21155978291dc4ca2ba Mon Sep 17 00:00:00 2001 From: hshiah Date: Wed, 1 Nov 2023 22:08:27 +0800 Subject: [PATCH 16/27] Finish all user stories for v2.0 --- .../commands/DeleteGoalCommand.java | 50 +++++++++++++++++++ .../commands/DeleteReminderCommand.java | 10 ++-- ...inderCommand.java => MarkGoalCommand.java} | 20 +++++--- .../commands/ReminderListCommand.java | 3 +- .../commands/SetGoalCommand.java | 13 ++--- .../commands/WishListCommand.java | 17 +++++++ .../enumerations/ExpenseType.java | 2 +- .../seedu/financialplanner/goal/Goal.java | 13 +++-- .../seedu/financialplanner/goal/GoalList.java | 14 ------ .../seedu/financialplanner/goal/WishList.java | 35 +++++++++++++ .../reminder/ReminderList.java | 3 +- .../seedu/financialplanner/utils/Parser.java | 24 +++++++++ 12 files changed, 163 insertions(+), 41 deletions(-) create mode 100644 src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java rename src/main/java/seedu/financialplanner/commands/{UnmarkReminderCommand.java => MarkGoalCommand.java} (59%) create mode 100644 src/main/java/seedu/financialplanner/commands/WishListCommand.java delete mode 100644 src/main/java/seedu/financialplanner/goal/GoalList.java create mode 100644 src/main/java/seedu/financialplanner/goal/WishList.java diff --git a/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java b/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java new file mode 100644 index 0000000000..fe9615ea1a --- /dev/null +++ b/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java @@ -0,0 +1,50 @@ +package seedu.financialplanner.commands; + +import seedu.financialplanner.goal.WishList; +import seedu.financialplanner.utils.Ui; +import java.util.logging.Level; +import java.util.logging.Logger; +import seedu.financialplanner.goal.Goal; +public class DeleteGoalCommand extends Command { + private static final Logger logger = Logger.getLogger("Financial Planner Logger"); + private final int index; + public DeleteGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { + String stringIndex; + if (rawCommand.args.size() == 1){ + stringIndex = rawCommand.args.get(0); + } else { + throw new IllegalArgumentException("Incorrect arguments."); + } + + try { + logger.log(Level.INFO, "Parsing index as integer"); + index = Integer.parseInt(stringIndex); + } catch (IllegalArgumentException e) { + logger.log(Level.WARNING, "Invalid argument for index"); + throw new IllegalArgumentException("Index must be an integer"); + } + + if (index <= 0) { + logger.log(Level.WARNING, "Invalid value for index"); + throw new IllegalArgumentException("Index must be within the list"); + } + + if (index > WishList.getInstance().list.size() + 1) { + logger.log(Level.WARNING, "Invalid value for index"); + throw new IllegalArgumentException("Index exceed the list size"); + } + rawCommand.extraArgs.remove("i"); + if (!rawCommand.extraArgs.isEmpty()) { + String unknownExtraArgument = new java.util.ArrayList<>(rawCommand.extraArgs.keySet()).get(0); + logger.log(Level.WARNING, "Invalid extra arguments found"); + throw new IllegalArgumentException(String.format("Unknown extra argument: %s", unknownExtraArgument)); + } + } + + @Override + public void execute() { + Goal goalToDelete = WishList.getInstance().list.get(index-1); + WishList.getInstance().deleteGoal(index-1); + Ui.getInstance().showMessage("You have deleted " + goalToDelete); + } +} diff --git a/src/main/java/seedu/financialplanner/commands/DeleteReminderCommand.java b/src/main/java/seedu/financialplanner/commands/DeleteReminderCommand.java index ecea2d4c4e..5466124ff9 100644 --- a/src/main/java/seedu/financialplanner/commands/DeleteReminderCommand.java +++ b/src/main/java/seedu/financialplanner/commands/DeleteReminderCommand.java @@ -4,7 +4,7 @@ import seedu.financialplanner.utils.Ui; import java.util.logging.Level; import java.util.logging.Logger; - +import seedu.financialplanner.reminder.Reminder; public class DeleteReminderCommand extends Command{ private static final Logger logger = Logger.getLogger("Financial Planner Logger"); private final int index; @@ -24,7 +24,7 @@ public DeleteReminderCommand(RawCommand rawCommand) throws IllegalArgumentExcept throw new IllegalArgumentException("Index must be an integer"); } - if (index == 0) { + if (index <= 0) { logger.log(Level.WARNING, "Invalid value for index"); throw new IllegalArgumentException("Index must be within the list"); } @@ -33,7 +33,6 @@ public DeleteReminderCommand(RawCommand rawCommand) throws IllegalArgumentExcept logger.log(Level.WARNING, "Invalid value for index"); throw new IllegalArgumentException("Index exceed the list size"); } - rawCommand.extraArgs.remove("i"); if (!rawCommand.extraArgs.isEmpty()) { String unknownExtraArgument = new java.util.ArrayList<>(rawCommand.extraArgs.keySet()).get(0); logger.log(Level.WARNING, "Invalid extra arguments found"); @@ -43,7 +42,8 @@ public DeleteReminderCommand(RawCommand rawCommand) throws IllegalArgumentExcept @Override public void execute() { - ReminderList.getInstance().deleteReminder(index); - Ui.getInstance().showMessage("You have deleted " + ReminderList.getInstance().list.get(index-1)); + Reminder reminderToDelete = ReminderList.getInstance().list.get(index-1); + ReminderList.getInstance().deleteReminder(index-1); + Ui.getInstance().showMessage("You have deleted " + reminderToDelete); } } diff --git a/src/main/java/seedu/financialplanner/commands/UnmarkReminderCommand.java b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java similarity index 59% rename from src/main/java/seedu/financialplanner/commands/UnmarkReminderCommand.java rename to src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java index 5851790d61..f005708712 100644 --- a/src/main/java/seedu/financialplanner/commands/UnmarkReminderCommand.java +++ b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java @@ -1,11 +1,15 @@ package seedu.financialplanner.commands; -import seedu.financialplanner.reminder.ReminderList; + +import seedu.financialplanner.goal.WishList; import seedu.financialplanner.utils.Ui; -public class UnmarkReminderCommand extends Command{ +import seedu.financialplanner.cashflow.CashflowList; +import seedu.financialplanner.goal.Goal; +import seedu.financialplanner.enumerations.ExpenseType; +public class MarkGoalCommand extends Command { private final int index; - public UnmarkReminderCommand(RawCommand rawCommand) throws IllegalArgumentException { + public MarkGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { String stringIndex; - if (rawCommand.args.size() == 1) { + if(rawCommand.args.size() == 1) { stringIndex = rawCommand.args.get(0); } else { throw new IllegalArgumentException("Incorrect arguments."); @@ -19,7 +23,7 @@ public UnmarkReminderCommand(RawCommand rawCommand) throws IllegalArgumentExcept if (index == 0) { throw new IllegalArgumentException("Index must be within the list"); } - if (index > ReminderList.getInstance().list.size()+1){ + if (index > WishList.getInstance().list.size()+1){ throw new IllegalArgumentException("Index exceed the list size"); } rawCommand.extraArgs.remove("i"); @@ -31,7 +35,9 @@ public UnmarkReminderCommand(RawCommand rawCommand) throws IllegalArgumentExcept @Override public void execute() { - ReminderList.getInstance().list.get(index-1).unmark(); - Ui.getInstance().showMessage("You have unmarked "+ReminderList.getInstance().list.get(index-1)); + Goal goal = WishList.getInstance().list.get(index-1); + goal.markAsDone(); + Ui.getInstance().showMessage("You have achieved " + goal + System.lineSeparator() +"Congratulations!"); + CashflowList.getInstance().addExpense(goal.getAmount(), ExpenseType.GOAL, 0, goal.getLabel()); } } diff --git a/src/main/java/seedu/financialplanner/commands/ReminderListCommand.java b/src/main/java/seedu/financialplanner/commands/ReminderListCommand.java index 8cdbf44385..dbcbd67d23 100644 --- a/src/main/java/seedu/financialplanner/commands/ReminderListCommand.java +++ b/src/main/java/seedu/financialplanner/commands/ReminderListCommand.java @@ -1,4 +1,5 @@ package seedu.financialplanner.commands; + import seedu.financialplanner.reminder.ReminderList; import seedu.financialplanner.utils.Ui; public class ReminderListCommand extends Command{ @@ -11,6 +12,6 @@ public void execute() { Ui ui = Ui.getInstance(); ReminderList reminderList = ReminderList.getInstance(); ui.showMessage("Here is your reminder list:"); - ui.showMessage(reminderList.list.toString()); + ui.showMessage(reminderList.toString()); } } diff --git a/src/main/java/seedu/financialplanner/commands/SetGoalCommand.java b/src/main/java/seedu/financialplanner/commands/SetGoalCommand.java index 57db61b5c8..d7456f3ceb 100644 --- a/src/main/java/seedu/financialplanner/commands/SetGoalCommand.java +++ b/src/main/java/seedu/financialplanner/commands/SetGoalCommand.java @@ -1,11 +1,11 @@ package seedu.financialplanner.commands; import seedu.financialplanner.goal.Goal; -import seedu.financialplanner.goal.GoalList; +import seedu.financialplanner.goal.WishList; import seedu.financialplanner.utils.Ui; public class SetGoalCommand extends Command { - private final String goal; - private int amount; + private final String label; + private final int amount; public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { String labelString = String.join(" ", rawCommand.args); @@ -21,7 +21,7 @@ public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { if(!rawCommand.extraArgs.containsKey("l")){ throw new IllegalArgumentException("Please specify the content of the goal"); } - goal = rawCommand.extraArgs.get("l"); + label = rawCommand.extraArgs.get("l"); rawCommand.extraArgs.remove("l"); if(!rawCommand.extraArgs.isEmpty()){ String unknownExtraArgument = new java.util.ArrayList<>(rawCommand.extraArgs.keySet()).get(0); @@ -31,7 +31,8 @@ public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { @Override public void execute() { - GoalList.INSTANCE.list.add(new Goal(goal, amount)); - Ui.getInstance().showMessage("Set Goal Successfully!"); + Goal goal = new Goal(label, amount); + WishList.getInstance().list.add(goal); + Ui.getInstance().showMessage("You have added " + goal); } } diff --git a/src/main/java/seedu/financialplanner/commands/WishListCommand.java b/src/main/java/seedu/financialplanner/commands/WishListCommand.java new file mode 100644 index 0000000000..883e484aa0 --- /dev/null +++ b/src/main/java/seedu/financialplanner/commands/WishListCommand.java @@ -0,0 +1,17 @@ +package seedu.financialplanner.commands; + +import seedu.financialplanner.goal.WishList; +import seedu.financialplanner.utils.Ui; +public class WishListCommand extends Command { + public WishListCommand(RawCommand rawCommand) throws IllegalArgumentException{ + + } + + @Override + public void execute() { + Ui ui = Ui.getInstance(); + WishList wishList = WishList.getInstance(); + ui.showMessage("Here is your wish list:"); + ui.showMessage(wishList.toString()); + } +} diff --git a/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java b/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java index ab9f512fa9..e614a49fca 100644 --- a/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java +++ b/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java @@ -3,7 +3,7 @@ import java.util.Arrays; public enum ExpenseType { - DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS; + DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS, GOAL; public static String[] getNames(Class> e) { return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new); diff --git a/src/main/java/seedu/financialplanner/goal/Goal.java b/src/main/java/seedu/financialplanner/goal/Goal.java index fd819e3363..e3541a933e 100644 --- a/src/main/java/seedu/financialplanner/goal/Goal.java +++ b/src/main/java/seedu/financialplanner/goal/Goal.java @@ -1,8 +1,8 @@ package seedu.financialplanner.goal; public class Goal { - private String label; - private int amount; + private final String label; + private final int amount; private boolean isDone = false; public Goal(String label, int amount) { @@ -11,7 +11,7 @@ public Goal(String label, int amount) { } public String toString() { - String status = isDone ? "Done" : "Not Done"; + String status = isDone ? "Achieved" : "Not Achieved"; return "Goal " + System.lineSeparator()+ " Label: " + label + System.lineSeparator() + " Amount: " + amount + System.lineSeparator() + " Status: "+status; } @@ -20,8 +20,11 @@ public void markAsDone() { this.isDone = true; } - public void unmark() { - this.isDone = false; + public String getLabel() { + return this.label; + } + public int getAmount() { + return this.amount; } public String formatString() { String status = isDone ? "Done" : "Not Done"; diff --git a/src/main/java/seedu/financialplanner/goal/GoalList.java b/src/main/java/seedu/financialplanner/goal/GoalList.java deleted file mode 100644 index c741688742..0000000000 --- a/src/main/java/seedu/financialplanner/goal/GoalList.java +++ /dev/null @@ -1,14 +0,0 @@ -package seedu.financialplanner.goal; -import java.util.ArrayList; -public class GoalList { - public static final GoalList INSTANCE = new GoalList(); - public ArrayList list = new ArrayList<>(); - - private GoalList() { - } - - public void load(Goal goal) { - list.add(goal); - } - //TODO deleteGoal -} diff --git a/src/main/java/seedu/financialplanner/goal/WishList.java b/src/main/java/seedu/financialplanner/goal/WishList.java new file mode 100644 index 0000000000..f00083f66b --- /dev/null +++ b/src/main/java/seedu/financialplanner/goal/WishList.java @@ -0,0 +1,35 @@ +package seedu.financialplanner.goal; + +import java.util.ArrayList; +public class WishList { + private static WishList wishList = null; + public final ArrayList list = new ArrayList<>(); + private WishList() { + } + + public static WishList getInstance() { + if (wishList == null) { + wishList = new WishList(); + } + return wishList; + } + + public void load(Goal goal) { + list.add(goal); + } + + public void deleteGoal(int index) { + int existingListSize = list.size(); + int listIndex = index; + assert listIndex >= 0 && listIndex < existingListSize; + Goal toRemove = list.get(listIndex); + list.remove(listIndex); + } + public String toString() { + String result = ""; + for (int i = 0; i < list.size(); i++) { + result += String.format("%d. %s\n", i + 1, list.get(i)); + } + return result; + } +} diff --git a/src/main/java/seedu/financialplanner/reminder/ReminderList.java b/src/main/java/seedu/financialplanner/reminder/ReminderList.java index e6d9b4d3f3..d863011c52 100644 --- a/src/main/java/seedu/financialplanner/reminder/ReminderList.java +++ b/src/main/java/seedu/financialplanner/reminder/ReminderList.java @@ -18,11 +18,10 @@ public void load(Reminder reminder) { } public void deleteReminder(int index) { int existingListSize = list.size(); - int listIndex = index - 1; + int listIndex = index; assert listIndex >= 0 && listIndex < existingListSize; Reminder toRemove = list.get(listIndex); list.remove(listIndex); - } public String toString() { diff --git a/src/main/java/seedu/financialplanner/utils/Parser.java b/src/main/java/seedu/financialplanner/utils/Parser.java index e403cf70e1..24dda0484d 100644 --- a/src/main/java/seedu/financialplanner/utils/Parser.java +++ b/src/main/java/seedu/financialplanner/utils/Parser.java @@ -17,6 +17,12 @@ import seedu.financialplanner.commands.SetGoalCommand; import seedu.financialplanner.commands.BalanceCommand; import seedu.financialplanner.commands.DeleteStockCommand; +import seedu.financialplanner.commands.MarkGoalCommand; +import seedu.financialplanner.commands.MarkReminderCommand; +import seedu.financialplanner.commands.DeleteGoalCommand; +import seedu.financialplanner.commands.DeleteReminderCommand; +import seedu.financialplanner.commands.ReminderListCommand; +import seedu.financialplanner.commands.WishListCommand; import seedu.financialplanner.exceptions.FinancialPlannerException; import java.util.ArrayList; @@ -41,6 +47,12 @@ public class Parser { private static final String LIST_COMMAND = "list"; private static final String SET_GOAL_COMMAND = "set"; private static final String BALANCE_COMMAND = "balance"; + private static final String MARK_GOAL_COMMAND = "markgoal"; + private static final String MARK_REMINDER_COMMAND = "markreminder"; + private static final String DELETE_GOAL_COMMAND = "deletegoal"; + private static final String DELETE_REMINDER_COMMAND = "deletereminder"; + private static final String REMINDER_LIST_COMMAND = "reminderlist"; + private static final String WISH_LIST_COMMAND = "wishlist"; public static Command parseCommand(String input) throws FinancialPlannerException { RawCommand rawCommand = parseRawCommand(input); @@ -77,6 +89,18 @@ public static Command parseCommand(RawCommand rawCommand) throws FinancialPlanne return new SetGoalCommand(rawCommand); case BALANCE_COMMAND: return new BalanceCommand(rawCommand); + case MARK_GOAL_COMMAND: + return new MarkGoalCommand(rawCommand); + case MARK_REMINDER_COMMAND: + return new MarkReminderCommand(rawCommand); + case DELETE_GOAL_COMMAND: + return new DeleteGoalCommand(rawCommand); + case DELETE_REMINDER_COMMAND: + return new DeleteReminderCommand(rawCommand); + case REMINDER_LIST_COMMAND: + return new ReminderListCommand(rawCommand); + case WISH_LIST_COMMAND: + return new WishListCommand(rawCommand); default: return new InvalidCommand(); } From 2ecb578bea3216838de3e927fedde68016d069a0 Mon Sep 17 00:00:00 2001 From: YFshadaow Date: Wed, 1 Nov 2023 22:11:24 +0800 Subject: [PATCH 17/27] Add help command --- .../commands/HelpCommand.java | 159 ++++++++++++++++++ .../commands/InvalidCommand.java | 2 +- .../seedu/financialplanner/utils/Parser.java | 33 ++-- .../java/seedu/financialplanner/utils/Ui.java | 8 +- 4 files changed, 183 insertions(+), 19 deletions(-) create mode 100644 src/main/java/seedu/financialplanner/commands/HelpCommand.java diff --git a/src/main/java/seedu/financialplanner/commands/HelpCommand.java b/src/main/java/seedu/financialplanner/commands/HelpCommand.java new file mode 100644 index 0000000000..4b5b910b0e --- /dev/null +++ b/src/main/java/seedu/financialplanner/commands/HelpCommand.java @@ -0,0 +1,159 @@ +package seedu.financialplanner.commands; + +import seedu.financialplanner.utils.Ui; + +import java.util.ArrayList; + +import static seedu.financialplanner.utils.Parser.ADD_CASHFLOW_COMMAND; +import static seedu.financialplanner.utils.Parser.ADD_REMINDER_COMMAND; +import static seedu.financialplanner.utils.Parser.ADD_STOCK_COMMAND; +import static seedu.financialplanner.utils.Parser.BALANCE_COMMAND; +import static seedu.financialplanner.utils.Parser.BUDGET_COMMAND; +import static seedu.financialplanner.utils.Parser.DELETE_CASHFLOW_COMMAND; +import static seedu.financialplanner.utils.Parser.DELETE_STOCK_COMMAND; +import static seedu.financialplanner.utils.Parser.EXIT_COMMAND; +import static seedu.financialplanner.utils.Parser.FIND_COMMAND; +import static seedu.financialplanner.utils.Parser.HELP_COMMAND; +import static seedu.financialplanner.utils.Parser.LIST_COMMAND; +import static seedu.financialplanner.utils.Parser.OVERVIEW_COMMAND; +import static seedu.financialplanner.utils.Parser.SET_GOAL_COMMAND; +import static seedu.financialplanner.utils.Parser.VISUALIZATION_COMMAND; +import static seedu.financialplanner.utils.Parser.WATCHLIST_COMMAND; + +public class HelpCommand extends Command { + private static final String EXIT_COMMAND_USAGE = + "exit"; + private static final String WATCHLIST_COMMAND_USAGE = + "watchlist"; + private static final String ADD_CASHFLOW_COMMAND_USAGE = + "add [/t TYPE] [/r RECURRENCE INTERVAL IN DAYS] [/d DESCRIPTION]"; + + private static final String DELETE_CASHFLOW_COMMAND_USAGE = + "delete [income/expense] "; + + private static final String ADD_STOCK_COMMAND_USAGE = + "addstock "; + + private static final String DELETE_STOCK_COMMAND_USAGE = + "deletestock "; + + private static final String FIND_COMMAND_USAGE = + "find "; + + private static final String BUDGET_COMMAND_USAGE = + "budget set " + + "\n " + "budget update " + + "\n " + "budget delete" + + "\n " + "budget reset" + + "\n " + "budget view"; + private static final String VISUALIZATION_COMMAND_USAGE = + "vis "; + + private static final String OVERVIEW_COMMAND_USAGE = + "overview"; + private static final String ADD_REMINDER_COMMAND_USAGE = + "addreminder "; + + private static final String LIST_COMMAND_USAGE = + "list [income/expense]"; + + private static final String SET_GOAL_COMMAND_USAGE = + "set "; + + private static final String BALANCE_COMMAND_USAGE = + "balance"; + + private static final String HELP_COMMAND_USAGE = + "help [COMMAND]"; + + private static final String HELP_MESSAGE_GENERAL = + "<> denotes required arguments, [] denotes optional arguments" + + "\n" + "Here are the available commands:" + + "\n " + EXIT_COMMAND_USAGE + + "\n " + WATCHLIST_COMMAND_USAGE + + "\n " + ADD_CASHFLOW_COMMAND_USAGE + + "\n " + DELETE_CASHFLOW_COMMAND_USAGE + + "\n " + ADD_STOCK_COMMAND_USAGE + + "\n " + DELETE_STOCK_COMMAND_USAGE + + "\n " + FIND_COMMAND_USAGE + + "\n " + BUDGET_COMMAND_USAGE + + "\n " + VISUALIZATION_COMMAND_USAGE + + "\n " + OVERVIEW_COMMAND_USAGE + + "\n " + ADD_REMINDER_COMMAND_USAGE + + "\n " + LIST_COMMAND_USAGE + + "\n " + SET_GOAL_COMMAND_USAGE + + "\n " + BALANCE_COMMAND_USAGE + + "\n " + HELP_COMMAND_USAGE; + private final String commandName; + + public HelpCommand(RawCommand rawCommand) { + if (!rawCommand.extraArgs.isEmpty()) { + String unknownExtraArgument = new ArrayList<>(rawCommand.extraArgs.keySet()).get(0); + throw new IllegalArgumentException(String.format("Unknown extra argument: %s", unknownExtraArgument)); + } + if (rawCommand.args.isEmpty()) { + commandName = null; + } else if (rawCommand.args.size() == 1) { + commandName = rawCommand.args.get(0); + } else { + throw new IllegalArgumentException("Unknown arguments, type help for help"); + } + } + + @Override + public void execute() throws Exception { + if (commandName == null) { + Ui.getInstance().showMessage(HELP_MESSAGE_GENERAL); + return; + } + switch (commandName) { + case EXIT_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + EXIT_COMMAND_USAGE); + break; + case WATCHLIST_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + WATCHLIST_COMMAND_USAGE); + break; + case ADD_CASHFLOW_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + ADD_CASHFLOW_COMMAND_USAGE); + break; + case DELETE_CASHFLOW_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + DELETE_CASHFLOW_COMMAND_USAGE); + break; + case ADD_STOCK_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + ADD_STOCK_COMMAND_USAGE); + break; + case DELETE_STOCK_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + DELETE_STOCK_COMMAND_USAGE); + break; + case FIND_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + FIND_COMMAND_USAGE); + break; + case BUDGET_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + BUDGET_COMMAND_USAGE); + break; + case VISUALIZATION_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + VISUALIZATION_COMMAND_USAGE); + break; + case OVERVIEW_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + OVERVIEW_COMMAND_USAGE); + break; + case ADD_REMINDER_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + ADD_REMINDER_COMMAND_USAGE); + break; + case LIST_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + LIST_COMMAND_USAGE); + break; + case SET_GOAL_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + SET_GOAL_COMMAND_USAGE); + break; + case BALANCE_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + BALANCE_COMMAND_USAGE); + break; + case HELP_COMMAND: + Ui.getInstance().showMessage("Usage:\n " + HELP_COMMAND_USAGE); + break; + default: + Ui.getInstance().showMessage("Unknown command, type help for help"); + } + } +} diff --git a/src/main/java/seedu/financialplanner/commands/InvalidCommand.java b/src/main/java/seedu/financialplanner/commands/InvalidCommand.java index 68860c4c1a..d560dbc741 100644 --- a/src/main/java/seedu/financialplanner/commands/InvalidCommand.java +++ b/src/main/java/seedu/financialplanner/commands/InvalidCommand.java @@ -15,6 +15,6 @@ public InvalidCommand() { */ @Override public void execute() { - Ui.getInstance().showMessage("Unknown command. Please try again."); + Ui.getInstance().showMessage("Unknown command. Type help for help"); } } diff --git a/src/main/java/seedu/financialplanner/utils/Parser.java b/src/main/java/seedu/financialplanner/utils/Parser.java index e403cf70e1..e3fe94f921 100644 --- a/src/main/java/seedu/financialplanner/utils/Parser.java +++ b/src/main/java/seedu/financialplanner/utils/Parser.java @@ -2,6 +2,7 @@ import seedu.financialplanner.commands.Command; import seedu.financialplanner.commands.AddStockCommand; +import seedu.financialplanner.commands.HelpCommand; import seedu.financialplanner.commands.OverviewCommand; import seedu.financialplanner.commands.AddCashflowCommand; import seedu.financialplanner.commands.DeleteCashflowCommand; @@ -27,20 +28,22 @@ import java.util.Map; public class Parser { - private static final String EXIT_COMMAND = "exit"; - private static final String WATCHLIST_COMMAND = "watchlist"; - private static final String ADD_CASHFLOW_COMMAND = "add"; - private static final String DELETE_CASHFLOW_COMMAND = "delete"; - private static final String ADD_STOCK_COMMAND = "addstock"; - private static final String DELETE_STOCK_COMMAND = "deletestock"; - private static final String FIND_COMMAND = "find"; - private static final String OVERVIEW_COMMAND = "overview"; - private static final String BUDGET_COMMAND = "budget"; - private static final String VISUALIZATION_COMMAND = "vis"; - private static final String ADD_REMINDER_COMMAND = "addreminder"; - private static final String LIST_COMMAND = "list"; - private static final String SET_GOAL_COMMAND = "set"; - private static final String BALANCE_COMMAND = "balance"; + public static final String EXIT_COMMAND = "exit"; + public static final String WATCHLIST_COMMAND = "watchlist"; + public static final String ADD_CASHFLOW_COMMAND = "add"; + public static final String DELETE_CASHFLOW_COMMAND = "delete"; + public static final String ADD_STOCK_COMMAND = "addstock"; + public static final String DELETE_STOCK_COMMAND = "deletestock"; + public static final String FIND_COMMAND = "find"; + public static final String OVERVIEW_COMMAND = "overview"; + public static final String BUDGET_COMMAND = "budget"; + public static final String VISUALIZATION_COMMAND = "vis"; + public static final String ADD_REMINDER_COMMAND = "addreminder"; + public static final String LIST_COMMAND = "list"; + public static final String SET_GOAL_COMMAND = "set"; + public static final String BALANCE_COMMAND = "balance"; + + public static final String HELP_COMMAND = "help"; public static Command parseCommand(String input) throws FinancialPlannerException { RawCommand rawCommand = parseRawCommand(input); @@ -77,6 +80,8 @@ public static Command parseCommand(RawCommand rawCommand) throws FinancialPlanne return new SetGoalCommand(rawCommand); case BALANCE_COMMAND: return new BalanceCommand(rawCommand); + case HELP_COMMAND: + return new HelpCommand(rawCommand); default: return new InvalidCommand(); } diff --git a/src/main/java/seedu/financialplanner/utils/Ui.java b/src/main/java/seedu/financialplanner/utils/Ui.java index 4c40dd97df..57c9435f8b 100644 --- a/src/main/java/seedu/financialplanner/utils/Ui.java +++ b/src/main/java/seedu/financialplanner/utils/Ui.java @@ -22,7 +22,7 @@ public class Ui { private static final String GREEN = "\u001B[32m"; private static final String RESET = "\u001B[0m"; private static final String YELLOW = "\u001B[33m"; - private Scanner Scanner = new Scanner(System.in); + private Scanner scanner = new Scanner(System.in); private Ui() { } @@ -38,11 +38,11 @@ public static void printCorruptedFileError(String message) { } public Scanner getScanner() { - return Scanner; + return scanner; } public void setScanner(Scanner scanner) { - this.Scanner = scanner; + this.scanner = scanner; } public void showMessage(String message) { @@ -59,7 +59,7 @@ public void exitMessage() { } public String input() { - return Scanner.nextLine().trim(); + return scanner.nextLine().trim(); } public void printWatchListHeader() { From 3f80f218b3dfb6837f8f4e552b36dc2298d07e27 Mon Sep 17 00:00:00 2001 From: YFshadaow Date: Wed, 1 Nov 2023 22:18:02 +0800 Subject: [PATCH 18/27] Update EXPECTED.TXT for UI testing --- .../java/seedu/financialplanner/commands/InvalidCommand.java | 2 +- text-ui-test/EXPECTED.TXT | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/financialplanner/commands/InvalidCommand.java b/src/main/java/seedu/financialplanner/commands/InvalidCommand.java index d560dbc741..428127d638 100644 --- a/src/main/java/seedu/financialplanner/commands/InvalidCommand.java +++ b/src/main/java/seedu/financialplanner/commands/InvalidCommand.java @@ -15,6 +15,6 @@ public InvalidCommand() { */ @Override public void execute() { - Ui.getInstance().showMessage("Unknown command. Type help for help"); + Ui.getInstance().showMessage("Unknown command. Type help for help."); } } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 1962194fd4..7cd2a194ad 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -74,5 +74,5 @@ Your remaining budget for the month is: 800.00 You have a remaining budget of 800.00. Budget has been reset to 1000.00. Budget has been deleted. -Unknown command. Please try again. +Unknown command. Type help for help. Exiting Financial Planner. Goodbye. From 27418e49f5b3a254b6560c11660442460e52934d Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:35:31 +0800 Subject: [PATCH 19/27] Update src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java Co-authored-by: Neo Min Wei <110591123+NeoMinWei@users.noreply.github.com> --- .../java/seedu/financialplanner/commands/MarkGoalCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java index f005708712..3b1fe5ded0 100644 --- a/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java +++ b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java @@ -9,7 +9,7 @@ public class MarkGoalCommand extends Command { private final int index; public MarkGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { String stringIndex; - if(rawCommand.args.size() == 1) { + if (rawCommand.args.size() == 1) { stringIndex = rawCommand.args.get(0); } else { throw new IllegalArgumentException("Incorrect arguments."); From 410558c34c6c140a99f19306231f1fce24088b1f Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:38:34 +0800 Subject: [PATCH 20/27] Update src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java Co-authored-by: Neo Min Wei <110591123+NeoMinWei@users.noreply.github.com> --- .../java/seedu/financialplanner/commands/MarkGoalCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java index 3b1fe5ded0..71c6c3bd9f 100644 --- a/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java +++ b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java @@ -37,7 +37,7 @@ public MarkGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { public void execute() { Goal goal = WishList.getInstance().list.get(index-1); goal.markAsDone(); - Ui.getInstance().showMessage("You have achieved " + goal + System.lineSeparator() +"Congratulations!"); + Ui.getInstance().showMessage("You have achieved " + goal + System.lineSeparator() + "Congratulations!"); CashflowList.getInstance().addExpense(goal.getAmount(), ExpenseType.GOAL, 0, goal.getLabel()); } } From d9293b556806fc2a5a9c96d549157683ef65a430 Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:39:52 +0800 Subject: [PATCH 21/27] Update ExpenseType.java --- .../java/seedu/financialplanner/enumerations/ExpenseType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java b/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java index e614a49fca..ab9f512fa9 100644 --- a/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java +++ b/src/main/java/seedu/financialplanner/enumerations/ExpenseType.java @@ -3,7 +3,7 @@ import java.util.Arrays; public enum ExpenseType { - DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS, GOAL; + DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS; public static String[] getNames(Class> e) { return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new); From 01e764de1267e8671925d5c965505d8e81b5eb8c Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:40:36 +0800 Subject: [PATCH 22/27] Update MarkGoalCommand.java --- .../java/seedu/financialplanner/commands/MarkGoalCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java index 71c6c3bd9f..7462b2a4a1 100644 --- a/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java +++ b/src/main/java/seedu/financialplanner/commands/MarkGoalCommand.java @@ -38,6 +38,6 @@ public void execute() { Goal goal = WishList.getInstance().list.get(index-1); goal.markAsDone(); Ui.getInstance().showMessage("You have achieved " + goal + System.lineSeparator() + "Congratulations!"); - CashflowList.getInstance().addExpense(goal.getAmount(), ExpenseType.GOAL, 0, goal.getLabel()); + CashflowList.getInstance().addExpense(goal.getAmount(), ExpenseType.OTHERS, 0, goal.getLabel()); } } From a026d6c8e196f6f727484a9b737022470a8b0f09 Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:47:11 +0800 Subject: [PATCH 23/27] Update src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java Co-authored-by: ryan <94791461+ryan1604@users.noreply.github.com> --- .../java/seedu/financialplanner/commands/DeleteGoalCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java b/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java index fe9615ea1a..ed22fe3919 100644 --- a/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java +++ b/src/main/java/seedu/financialplanner/commands/DeleteGoalCommand.java @@ -10,7 +10,7 @@ public class DeleteGoalCommand extends Command { private final int index; public DeleteGoalCommand(RawCommand rawCommand) throws IllegalArgumentException { String stringIndex; - if (rawCommand.args.size() == 1){ + if (rawCommand.args.size() == 1) { stringIndex = rawCommand.args.get(0); } else { throw new IllegalArgumentException("Incorrect arguments."); From 3eab7c3e4dea48a019272fba0ef2c69848704894 Mon Sep 17 00:00:00 2001 From: YFshadaow Date: Wed, 1 Nov 2023 23:20:41 +0800 Subject: [PATCH 24/27] Resolve merge conflicts --- src/main/java/seedu/financialplanner/utils/Parser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/seedu/financialplanner/utils/Parser.java b/src/main/java/seedu/financialplanner/utils/Parser.java index 243f4b7fe9..5c419372a9 100644 --- a/src/main/java/seedu/financialplanner/utils/Parser.java +++ b/src/main/java/seedu/financialplanner/utils/Parser.java @@ -2,6 +2,7 @@ import seedu.financialplanner.commands.Command; import seedu.financialplanner.commands.AddStockCommand; +import seedu.financialplanner.commands.HelpCommand; import seedu.financialplanner.commands.OverviewCommand; import seedu.financialplanner.commands.AddCashflowCommand; import seedu.financialplanner.commands.DeleteCashflowCommand; From 3590c878ba8c19ef6c9e57a7a6258be250a46b06 Mon Sep 17 00:00:00 2001 From: hshiah Date: Thu, 2 Nov 2023 23:04:54 +0800 Subject: [PATCH 25/27] Update UG. Fix some minor errors of reminder and goal. Update the saving and loading for goals and reminder. --- docs/UserGuide.md | 158 +++++++++++++++++- .../seedu/financialplanner/goal/Goal.java | 14 +- .../seedu/financialplanner/goal/WishList.java | 7 +- .../financialplanner/reminder/Reminder.java | 11 +- .../reminder/ReminderList.java | 7 +- .../financialplanner/storage/LoadData.java | 43 +++++ .../financialplanner/storage/SaveData.java | 10 ++ 7 files changed, 244 insertions(+), 6 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3d9ba441d8..208749fd39 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -28,7 +28,15 @@ * [WatchList](#viewing-watchlist-watchlist) * [Adding Stock](#adding-stock-to-watchlist-addstock) * [Deleting Stock](#deleting-budget-budget-delete) - * [Visualization](#Visualization) + * [ReminderList](#view-reminder-list-reminderlist) + * [Adding Reminder](#add-reminder-addreminder) + * [Deleting Reminder](#delete-reminder-deletereminder) + * [Marking Reminder as Done](#mark-reminder-as-done-markreminder) + * [WishList](#view-goal-list-wishlist) + * [Adding Goal](#set-goal-set-goal) + * [Deleting Goal](#delete-goal-deletegoal) + * [Marking Goal as Achieved](#mark-goal-as-achieved-markgoal) + * [Visualization](#visualizing-your-cashflow-vis) * [Exiting the program](#exiting-the-program-exit) * [Saving data](#saving-the-data) * [Loading data](#loading-the-data) @@ -539,6 +547,154 @@ Use watchlist command to view updated Watchlist - Note: Your watchlist information is saved under the file path `data/watchlist.json` in JSON format +### View Reminder List: `reminderlist` +View your current reminder list with reminders that you have added. + +Format: `reminderlist` + +Example of usage: `reminderlist` + +Example of output: + +``` +Here is your reminder list: +1. Reminder + Type: debt + Date: 2023.12.11 + Status: Not Done +2. Reminder + Type: loan + Date: 2023.12.18 + Status: Not Done +``` + +### Add reminder: `addreminder` +Adds a reminder to the Financial Planner. + +Format: `addreminder /t TYPE /d DATE` +- `/t` is used to specify the reminder type, which describes what is the reminder used for. +- `/d` is used to give a deadline date to the reminder. + +Example of usage: `addreminder /t debt /d 2023.12.11` + +Example output: +``` +You have added Reminder + Type: debt + Date: 2023.12.11 + Status: Not Done +``` + +### Delete reminder: `deletereminder` +Deletes a reminder from the Financial Planner. + +Format: `deletereminder INDEX` + +- `INDEX` refers to the index number shown in the displayed list when [`reminderlist`](#view-reminder-list-reminderlist) command is used. + +Example of usage: `deletereminder 1` + +Example output: +``` +You have deleted Reminder + Type: debt + Date: 2023.12.11 + Status: Not Done +``` + +### Mark reminder as done: `markreminder` +Marks a reminder as done in the Financial Planner. + +Format: `markreminder INDEX` + +- `INDEX` refers to the index number shown in the displayed list when [`reminderlist`](#view-reminder-list-reminderlist) command is used. + +Example of usage: `markreminder 1` + +Example output: +``` +You have marked Reminder + Type: debt + Date: 2023.12.11 + Status: Done +``` + +### View Goal List: `wishlist` +View your current goal list with goals that you have added. + +Format: `wishlist` + +Example of usage: `wishlist` + +Example of output: +``` +Here is your wish list: +1. Goal + Label: car + Amount: 5000 + Status: Not Achieved +2. Goal + Label: ipad + Amount: 2000 + Status: Not Achieved +``` + +### Set goal: `set goal` +Adds a goal to the Financial Planner. + +Format: `set goal /g GOAL /l LABEL` +- `/g` is used to specify the goal amount. +- `/l` is used to give a label to the goal. + +Example of usage: `set goal /g 5000 /l car` + +Example output: +``` +You have added Goal + Label: car + Amount: 5000 + Status: Not Achieved +``` + +### Delete goal: `deletegoal` +Deletes a goal from the Financial Planner. + +Format: `deletegoal INDEX` +- `INDEX` refers to the index number shown in the displayed list when [`wishlist`](#view-goal-list-wishlist) command is used. + +Example of usage: `deletegoal 1` + +Example output: +``` +You have deleted Goal + Label: car + Amount: 5000 + Status: Not Achieved +``` + +### Mark goal as achieved: `markgoal` +Marks a goal as achieved in the Financial Planner. This operation will automatically create a corresponding expense. + +Format: `markgoal INDEX` +- `INDEX` refers to the index number shown in the displayed list when [`wishlist`](#view-goal-list-wishlist) command is used. + +Example of usage: `markgoal 1` + +Example output: +``` +You have achieved Goal + Label: ipad + Amount: 2000 + Status: Achieved +Congratulations! +You have added an Expense + Type: Others + Amount: 2000.00 + Description: ipad +to the Financial Planner. +Balance: -2000.00 +``` + ### Visualizing your cashflow: `vis` Using this command to visualize your income or expenses in a pie chart, bar chart or radar chart diff --git a/src/main/java/seedu/financialplanner/goal/Goal.java b/src/main/java/seedu/financialplanner/goal/Goal.java index e3541a933e..e7eac78a6a 100644 --- a/src/main/java/seedu/financialplanner/goal/Goal.java +++ b/src/main/java/seedu/financialplanner/goal/Goal.java @@ -10,6 +10,16 @@ public Goal(String label, int amount) { this.amount = amount; } + public Goal(String label, int amount, String status) { + this.label = label; + this.amount = amount; + if (status.equals("Achieved")) { + this.isDone = true; + } else { + this.isDone = false; + } + } + public String toString() { String status = isDone ? "Achieved" : "Not Achieved"; return "Goal " + System.lineSeparator()+ " Label: " + label + System.lineSeparator() + " Amount: " + @@ -27,7 +37,7 @@ public int getAmount() { return this.amount; } public String formatString() { - String status = isDone ? "Done" : "Not Done"; - return this.label + " | " + this.amount + " | " + this.isDone; + String status = isDone ? "Achieved" : "Not Achieved"; + return "G" + " | " + this.label + " | " + this.amount + " | " + status; } } diff --git a/src/main/java/seedu/financialplanner/goal/WishList.java b/src/main/java/seedu/financialplanner/goal/WishList.java index f00083f66b..b03ae4704b 100644 --- a/src/main/java/seedu/financialplanner/goal/WishList.java +++ b/src/main/java/seedu/financialplanner/goal/WishList.java @@ -28,7 +28,12 @@ public void deleteGoal(int index) { public String toString() { String result = ""; for (int i = 0; i < list.size(); i++) { - result += String.format("%d. %s\n", i + 1, list.get(i)); + if (i == list.size() - 1) { + result += String.format("%d. %s", i + 1, list.get(i)); + break; + } else { + result += String.format("%d. %s\n", i + 1, list.get(i)); + } } return result; } diff --git a/src/main/java/seedu/financialplanner/reminder/Reminder.java b/src/main/java/seedu/financialplanner/reminder/Reminder.java index 1ac0388a04..d32c683823 100644 --- a/src/main/java/seedu/financialplanner/reminder/Reminder.java +++ b/src/main/java/seedu/financialplanner/reminder/Reminder.java @@ -10,6 +10,15 @@ public Reminder(String type, String date) { this.date = date; } + public Reminder(String type, String date, String status) { + this.type = type; + this.date = date; + if (status.equals("Done")) { + this.isDone = true; + } else { + this.isDone = false; + } + } public String toString() { String status = isDone ? "Done" : "Not Done"; return "Reminder " + System.lineSeparator() + " Type: " + type + System.lineSeparator() @@ -29,6 +38,6 @@ public void unmark() { */ public String formatString() { String status = isDone ? "Done" : "Not Done"; - return this.type + " | " + this.date + " | " + this.isDone; + return "R" + " | " + this.type + " | " + this.date + " | " + status; } } diff --git a/src/main/java/seedu/financialplanner/reminder/ReminderList.java b/src/main/java/seedu/financialplanner/reminder/ReminderList.java index d863011c52..e54dd13153 100644 --- a/src/main/java/seedu/financialplanner/reminder/ReminderList.java +++ b/src/main/java/seedu/financialplanner/reminder/ReminderList.java @@ -27,7 +27,12 @@ public void deleteReminder(int index) { public String toString() { String result = ""; for (int i = 0; i < list.size(); i++) { - result += String.format("%d. %s\n", i + 1, list.get(i)); + if (i == list.size() - 1) { + result += String.format("%d. %s", i + 1, list.get(i)); + break; + } else { + result += String.format("%d. %s\n", i + 1, list.get(i)); + } } return result; } diff --git a/src/main/java/seedu/financialplanner/storage/LoadData.java b/src/main/java/seedu/financialplanner/storage/LoadData.java index d5b89b2c54..ed8b2a0f21 100644 --- a/src/main/java/seedu/financialplanner/storage/LoadData.java +++ b/src/main/java/seedu/financialplanner/storage/LoadData.java @@ -14,6 +14,10 @@ import seedu.financialplanner.cashflow.Income; import seedu.financialplanner.cashflow.Expense; import seedu.financialplanner.utils.Ui; +import seedu.financialplanner.goal.Goal; +import seedu.financialplanner.goal.WishList; +import seedu.financialplanner.reminder.Reminder; +import seedu.financialplanner.reminder.ReminderList; import java.io.FileNotFoundException; import java.io.FileReader; @@ -32,6 +36,8 @@ public abstract class LoadData { private static final String FILE_PATH = "data/watchlist.json"; private static final CashflowList cashflowList = CashflowList.getInstance(); private static final Ui ui = Ui.getInstance(); + private static final ReminderList reminderList = ReminderList.getInstance(); + private static final WishList wishList = WishList.getInstance(); /** @@ -61,6 +67,14 @@ public static void load(String filePath, LocalDate date) throws FinancialPlanner case "B": loadBudget(split); break; + case "R": + final Reminder reminder = getReminder(split); + reminderList.load(reminder); + break; + case "G": + final Goal goal = getGoal(split); + wishList.load(goal); + break; default: throw new FinancialPlannerException("Error loading file"); } @@ -232,6 +246,35 @@ private static Cashflow getEntry(String type, String[] split) } } + private static Reminder getReminder(String[] split) throws IllegalArgumentException, IndexOutOfBoundsException, + FinancialPlannerException { + try { + Reminder entry; + String type = split[1].trim(); + String date = split[2].trim(); + String status = split[3].trim(); + entry = new Reminder(type, date, status); + return entry; + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Erroneous arguments detected"); + } catch (IndexOutOfBoundsException e) { + throw new FinancialPlannerException("There should be three data members for reminder"); + } + } + + private static Goal getGoal(String[] split) throws IllegalArgumentException { + try { + Goal entry; + String type = split[1].trim(); + int amount = Integer.parseInt(split[2].trim()); + String status = split[3].trim(); + entry = new Goal(type, amount, status); + return entry; + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Erroneous arguments detected"); + } + } + private static boolean getHasRecurred(String[] split, int recur) throws IllegalArgumentException { boolean hasRecurred; if (recur != 0) { diff --git a/src/main/java/seedu/financialplanner/storage/SaveData.java b/src/main/java/seedu/financialplanner/storage/SaveData.java index 17e49e4e86..897f592432 100644 --- a/src/main/java/seedu/financialplanner/storage/SaveData.java +++ b/src/main/java/seedu/financialplanner/storage/SaveData.java @@ -3,10 +3,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import seedu.financialplanner.exceptions.FinancialPlannerException; +import seedu.financialplanner.goal.WishList; import seedu.financialplanner.investments.WatchList; import seedu.financialplanner.cashflow.Budget; import seedu.financialplanner.cashflow.Cashflow; import seedu.financialplanner.cashflow.CashflowList; +import seedu.financialplanner.reminder.ReminderList; import seedu.financialplanner.utils.Ui; import java.io.FileWriter; @@ -18,6 +20,8 @@ public abstract class SaveData { private static final String FILE_PATH = "data/watchlist.json"; private static final CashflowList cashflowList = CashflowList.getInstance(); + private static final ReminderList reminderList = ReminderList.getInstance(); + private static final WishList wishList = WishList.getInstance(); public static void save(String filePath) throws FinancialPlannerException { try { @@ -26,6 +30,12 @@ public static void save(String filePath) throws FinancialPlannerException { fw.write(entry.formatString() + "\n"); } fw.write(Budget.formatString() + "\n"); + for (int i = 0; i < reminderList.list.size(); i++) { + fw.write(reminderList.list.get(i).formatString() + "\n"); + } + for (int i = 0; i < wishList.list.size(); i++) { + fw.write(wishList.list.get(i).formatString() + "\n"); + } fw.close(); } catch (IOException e) { throw new FinancialPlannerException("Error saving file."); From 47187ceb82e2de382e24fb010cb25952cb6f1967 Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:30:12 +0800 Subject: [PATCH 26/27] Update WishList.java --- src/main/java/seedu/financialplanner/goal/WishList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/goal/WishList.java b/src/main/java/seedu/financialplanner/goal/WishList.java index b03ae4704b..612a501cbc 100644 --- a/src/main/java/seedu/financialplanner/goal/WishList.java +++ b/src/main/java/seedu/financialplanner/goal/WishList.java @@ -30,7 +30,6 @@ public String toString() { for (int i = 0; i < list.size(); i++) { if (i == list.size() - 1) { result += String.format("%d. %s", i + 1, list.get(i)); - break; } else { result += String.format("%d. %s\n", i + 1, list.get(i)); } From e249eca9e943b9164677c8351cb0e338d387f358 Mon Sep 17 00:00:00 2001 From: Shi Haochen <99376359+hshiah@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:30:33 +0800 Subject: [PATCH 27/27] Update ReminderList.java --- src/main/java/seedu/financialplanner/reminder/ReminderList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/seedu/financialplanner/reminder/ReminderList.java b/src/main/java/seedu/financialplanner/reminder/ReminderList.java index e54dd13153..94ebd7e19a 100644 --- a/src/main/java/seedu/financialplanner/reminder/ReminderList.java +++ b/src/main/java/seedu/financialplanner/reminder/ReminderList.java @@ -29,7 +29,6 @@ public String toString() { for (int i = 0; i < list.size(); i++) { if (i == list.size() - 1) { result += String.format("%d. %s", i + 1, list.get(i)); - break; } else { result += String.format("%d. %s\n", i + 1, list.get(i)); }