From 24a874d41be5c99f1ad9b88696476d6cfd3d410c Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 29 Oct 2021 00:24:28 +0800 Subject: [PATCH 01/23] docs: Update DG --- docs/DeveloperGuide.md | 85 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 11 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 7174ec7e0eb..78586974067 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -214,27 +214,41 @@ The `delete` feature is implemented by acting on the current filtered`TaskList` #### Current Implementation The current implementation of the `undo` feature is through storing the command history of the user in `CommandHistory` -as a command stack, and popping off the stack whenever `undo` is called. +as a command stack, and returning the command from the stack whenever `undo` is called. The abstract class `Command` has an additional method `undo()` to be implemented by the inheriting class to model the correct undo behaviour. Commands that have previous states, such as `Find` with a specific `Predicate`, store the previous state in the class. -`Redo` can be implemented by maintaining this `CommandHistory` stack instead of popping, and calling `execute` on the -`Command` object again. +The implementation of `CommandHistory` relies on a doubly linked list to efficiently traverse the stack and store the +state. A simple description of the stack can be seen below: + +```text +Stack when commands are executed: +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand2 <-> null + ^current + +Stack when a single undo is called +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand2 <-> null + ^current + +Stack after adding a command to the above state + +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand2 <-> DeleteCommand3 <-> null + ^current +``` #### Example usage of `undo` 1. User launches TaskMaster2103 and a new `CommandHistory` object is initialised in `Model`. 2. User invokes any valid command into TaskMaster2103 that successfully gets executed. 3. The successfully invoked command gets stored in the `CommandHistory` stack through `LogicManager`. -4. The user can now invoke `undo`, and when the user does so, the top-most `Command` in `CommandHistory` will be popped. -5. The top-most `Command` that was popped with have its `undo()` method executed. -6. The `undo()` method mutates `Model` to restore the state before the initial executiion of the command. -7. The successfully invoked command gets stored in the `CommandHistory` stack through `LogicManager`. -8. The user can now invoke `undo`, and when the user does so, the top-most `Command` in `CommandHistory` will be popped. -9. The top-most `Command` that was popped with have its `undo()` method executed. -10. The `undo()` method mutates `Model` to restore the state before the initial execution of the command. +4. The user can now invoke `undo`, and when the user does so, the top-most `Command` in `CommandHistory` + will be returned. +5. The top-most `Command` that was returned with have its `undo()` method executed. +6. The `undo()` method mutates `Model` to restore the state before the initial execution of the command. +7. The pointer in `CommandHistory` now shifts to the previous element in the stack if it exists. + #### Implementation of `undo()` @@ -245,10 +259,59 @@ Each `Command` will have a different way of implementing `undo()`, depending on - Add: Deletes the object at the last index - Delete: Adds the deleted task at the original deleted index - Edit: Restores the state to the pre-edit state + - Purge: Restores all the tasks that were purged 2. GUI View Commands: - - Find/Sort/Filter: Restores the previous `Predicate` that was in the `FilteredList` + - Find/Sort/Filter: Restores the previous `Predicate` or `List` that was in the `FilteredList` + +### Redo feature + +#### Current Implementation + +Redo builds upon the fact that each command has its pre-defined function `execute()` and its own inverse `undo()`. This +allows for commands to be easily re-executed, simply by calling it's `execute()` method again. + + +The implementation of `CommandHistory` relies on a doubly linked list to efficiently traverse the stack and store the +state. A simple description of the stack with redo and undo actions can be seen below: + +```text +Stack when commands are executed: +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand3 <-> null + ^current + +Stack when two undo commands are called +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand3 <-> null + ^current + +Stack after a single redo command is called +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand3 <-> null + ^current + +Stack after adding a command to the above state + +null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand3 <-> DeleteCommand4 <-> null + ^current +``` + +#### Example usage of `redo` + +1. User launches TaskMaster2103 and a new `CommandHistory` object is initialised in `Model`. +2. User invokes any valid command into TaskMaster2103 that successfully gets executed. +3. The successfully invoked command gets stored in the `CommandHistory` stack through `LogicManager`. +4. The user can now invoke `undo`, and when the user does so, the top-most `Command` in `CommandHistory` + will be returned. +5. The top-most `Command` that was returned with have its `undo()` method executed. +6. The `undo()` method mutates `Model` to restore the state before the initial execution of the command. +7. The pointer in `CommandHistory` now shifts to the previous element in the stack if it exists. +8. The user now can use the `redo` command to redo the command in **Step 2**. + +#### Important Note + +`redo` cannot be called when no commands have been undone, as the `Command`s now have a boolean `canExecute` to +determine the state of the command. Executing `undo()` on a `Command` allows `execute()` to be called, and vice-versa, +executing `execute()` on a `Command` then allows for `undo()` to be called. ### Task filter feature From 24d7ca7a81ae5791643d8d78f4e4e0740b60ac4f Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 29 Oct 2021 01:44:04 +0800 Subject: [PATCH 02/23] docs: Update DG for Undo and Redo --- docs/DeveloperGuide.md | 6 ++++++ .../diagrams/RedoSequenceActivityDiagram.puml | 20 ++++++++++++++++++ .../diagrams/UndoSequenceActivityDiagram.puml | 20 ++++++++++++++++++ docs/images/RedoSequenceActivityDiagram.png | Bin 0 -> 25327 bytes docs/images/UndoSequenceActivityDiagram.png | Bin 0 -> 25358 bytes 5 files changed, 46 insertions(+) create mode 100644 docs/diagrams/RedoSequenceActivityDiagram.puml create mode 100644 docs/diagrams/UndoSequenceActivityDiagram.puml create mode 100644 docs/images/RedoSequenceActivityDiagram.png create mode 100644 docs/images/UndoSequenceActivityDiagram.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 78586974067..07eb290ed33 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -265,6 +265,8 @@ Each `Command` will have a different way of implementing `undo()`, depending on - Find/Sort/Filter: Restores the previous `Predicate` or `List` that was in the `FilteredList` +![Activity Diagram showing the process of an undo command](images/UndoSequenceActivityDiagram.png) + ### Redo feature #### Current Implementation @@ -313,6 +315,10 @@ null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand3 <-> DeleteCommand4 determine the state of the command. Executing `undo()` on a `Command` allows `execute()` to be called, and vice-versa, executing `execute()` on a `Command` then allows for `undo()` to be called. +#### Activity Diagram + +![Activity Diagram showing the process of a redo command](images/RedoSequenceActivityDiagram.png) + ### Task filter feature #### Current implementation diff --git a/docs/diagrams/RedoSequenceActivityDiagram.puml b/docs/diagrams/RedoSequenceActivityDiagram.puml new file mode 100644 index 00000000000..79020015c6d --- /dev/null +++ b/docs/diagrams/RedoSequenceActivityDiagram.puml @@ -0,0 +1,20 @@ +@startuml +!include style.puml + +start +:Request redo; +if() then ([CommandHistory contains commands]) + :Retrieve task from CommandHistory; + if() then ([Task can be redone]) + :Call execute() method of task; + :Return redo() command message; + else([Task cannot be redone]) + :Return error message to user; + endif +else([CommandHistory is empty]) + :Return error message to user; +endif +:Recompute task filters and update GUI; +stop + +@enduml \ No newline at end of file diff --git a/docs/diagrams/UndoSequenceActivityDiagram.puml b/docs/diagrams/UndoSequenceActivityDiagram.puml new file mode 100644 index 00000000000..3892173cb33 --- /dev/null +++ b/docs/diagrams/UndoSequenceActivityDiagram.puml @@ -0,0 +1,20 @@ +@startuml +!include style.puml + +start +:Request undo; +if() then ([CommandHistory contains commands]) + :Retrieve task from CommandHistory; + if() then ([Task can be undone]) + :Call execute() method of task; + :Return redo() command message; + else([Task cannot be undone]) + :Return error message to user; + endif +else([CommandHistory is empty]) + :Return error message to user; +endif +:Recompute task filters and update GUI; +stop + +@enduml diff --git a/docs/images/RedoSequenceActivityDiagram.png b/docs/images/RedoSequenceActivityDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..49a758074e83783346d2f9e262228d77549dc22f GIT binary patch literal 25327 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 Date: Fri, 29 Oct 2021 02:02:10 +0800 Subject: [PATCH 03/23] docs: Add InputHistory to DG --- docs/DeveloperGuide.md | 26 ++++++++++++++++-- .../diagrams/InputHistoryActivityDiagram.puml | 24 ++++++++++++++++ docs/images/InputHistoryActivityDiagram.png | Bin 0 -> 23683 bytes 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 docs/diagrams/InputHistoryActivityDiagram.puml create mode 100644 docs/images/InputHistoryActivityDiagram.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 07eb290ed33..abea4b6be98 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -249,6 +249,7 @@ null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand2 <-> DeleteCommand3 6. The `undo()` method mutates `Model` to restore the state before the initial execution of the command. 7. The pointer in `CommandHistory` now shifts to the previous element in the stack if it exists. +![Activity Diagram showing the process of an undo command](images/UndoSequenceActivityDiagram.png) #### Implementation of `undo()` @@ -265,7 +266,6 @@ Each `Command` will have a different way of implementing `undo()`, depending on - Find/Sort/Filter: Restores the previous `Predicate` or `List` that was in the `FilteredList` -![Activity Diagram showing the process of an undo command](images/UndoSequenceActivityDiagram.png) ### Redo feature @@ -309,15 +309,35 @@ null <-> DeleteCommand1 <-> DeleteCommand2 <-> DeleteCommand3 <-> DeleteCommand4 7. The pointer in `CommandHistory` now shifts to the previous element in the stack if it exists. 8. The user now can use the `redo` command to redo the command in **Step 2**. +![Activity Diagram showing the process of a redo command](images/RedoSequenceActivityDiagram.png) + #### Important Note `redo` cannot be called when no commands have been undone, as the `Command`s now have a boolean `canExecute` to determine the state of the command. Executing `undo()` on a `Command` allows `execute()` to be called, and vice-versa, executing `execute()` on a `Command` then allows for `undo()` to be called. -#### Activity Diagram +### Input history feature -![Activity Diagram showing the process of a redo command](images/RedoSequenceActivityDiagram.png) +Input history works similar to a terminal, where the up and down arrow keys can bring up recently executed commands. + +#### Current implementation + +The Input History feature uses a doubly linked list to store the string commands in the stack, and the up and down arrow +keys allow for traversing and returning the previous and next command respectively. + +#### Example usage + +1. User launches TaskMaster2103 and inputs a standard new `Command`. +2. If the command is valid, the executed command will be in the `InputHistory` stack and can be accessed by pressing UP. +3. Upon pressing UP, the user will see the command that was entered in Step 1 in the text box, and can quickly execute +that command again by pressing ENTER. +4. The user can also navigate to the top of the stack by using the DOWN key. If the stack reaches the end, it will +display either an empty string, or whatever string the user had input before using the arrow keys. This input is reset +everytime a new successful command is executed. + + +![Activity Diagram showing the process of retrieving an executed command string](images/InputHistoryActivityDiagram.png) ### Task filter feature diff --git a/docs/diagrams/InputHistoryActivityDiagram.puml b/docs/diagrams/InputHistoryActivityDiagram.puml new file mode 100644 index 00000000000..176c7b37078 --- /dev/null +++ b/docs/diagrams/InputHistoryActivityDiagram.puml @@ -0,0 +1,24 @@ +@startuml +!include style.puml + +start +:Retrieve previous command; +if() then ([UP pressed]) + :Retrieve previous Input from InputHistory; +else([DOWN pressed]) + :Retrieve next Input from InputHistory; +endif + +if() then ([Retrieved Input is not null]) + : Update GUI text box to show retrieved string; +else([Retrieved input is null]) + if() then ([UP pressed])) + : Do not update GUI text box; + else([DOWN pressed]) + : Update GUI text box to show current input; + endif + +endif +stop + +@enduml diff --git a/docs/images/InputHistoryActivityDiagram.png b/docs/images/InputHistoryActivityDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..ca5f6029879ef46bd4b7f093af551dee10ee678a GIT binary patch literal 23683 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 literal 0 HcmV?d00001 From f47872fe57aab30d696c97c070c4020fcbe9cfec Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 29 Oct 2021 02:50:36 +0800 Subject: [PATCH 04/23] =?UTF-8?q?fixed:=20trailing=20=E3=83=9B=E3=83=AF?= =?UTF-8?q?=E3=82=A4=E3=83=88=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagrams/RedoSequenceActivityDiagram.puml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagrams/RedoSequenceActivityDiagram.puml b/docs/diagrams/RedoSequenceActivityDiagram.puml index 79020015c6d..1de07c7ea8f 100644 --- a/docs/diagrams/RedoSequenceActivityDiagram.puml +++ b/docs/diagrams/RedoSequenceActivityDiagram.puml @@ -17,4 +17,4 @@ endif :Recompute task filters and update GUI; stop -@enduml \ No newline at end of file +@enduml From 1fbc2cb6dffbab70423450e20daac09701523916 Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Sat, 30 Oct 2021 11:07:59 +0800 Subject: [PATCH 05/23] Fix undone filter --- .../java/seedu/address/model/task/filters/DoneTaskFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java b/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java index 682aa0eb399..6c5119f0c88 100644 --- a/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java @@ -10,7 +10,7 @@ class DoneTaskFilter extends TaskFilter { } private DoneTaskFilter(boolean isInverted) { - super(Task::isDone, isInverted); + super(task -> task.isDone() != isInverted, isInverted); } @Override From 82f3871adaa7350c8fff6e6460083a3dc53eea70 Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Sat, 30 Oct 2021 11:10:28 +0800 Subject: [PATCH 06/23] Remove unused import in DoneTaskFilter --- .../java/seedu/address/model/task/filters/DoneTaskFilter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java b/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java index 6c5119f0c88..55b4a5a72c3 100644 --- a/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java @@ -2,8 +2,6 @@ import java.util.Objects; -import seedu.address.model.task.Task; - class DoneTaskFilter extends TaskFilter { DoneTaskFilter() { this(false); From 01a56d83bb03dbcd58a1e5371b1eece92a32e394 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 12:06:11 +0800 Subject: [PATCH 07/23] Bug fix: DoneTaskCommand undo/redo Issue lied in the fact that this.execute() in undo() calls super.canExecute(), which negates the canUndo(), making it unable to be redone. --- .../logic/commands/task/DoneTaskCommand.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java b/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java index 4a345044697..2eb4cd3666b 100644 --- a/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java +++ b/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java @@ -68,8 +68,19 @@ public boolean equals(Object o) { @Override public CommandResult undo(Model model) throws CommandException { super.canUndo(); - this.execute(model); - return new CommandResult(String.format(MESSAGE_SUCCESS, - this.completedTask)); + List taskList = model.getFilteredTaskList(); + + Task task = taskList.get(index.getZeroBased()); + Task completedTask = new Task(task.getTitle(), + task.getDescription().orElse(null), + task.getTimestamp().orElse(null), + task.getTags(), + !task.isDone(), + task.getContacts()); + + this.completedTask = completedTask; + model.setTask(task, completedTask); + + return new CommandResult(String.format(displayedString, this.completedTask)); } } From 078a1a5d27cc7a1bf6a2f7ff6ba1b63d5a8c9bef Mon Sep 17 00:00:00 2001 From: mingyi456 Date: Sat, 30 Oct 2021 12:49:59 +0800 Subject: [PATCH 08/23] Add test cases for `commons.util.StringUtil.limitString()` --- .../address/commons/util/StringUtilTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/java/seedu/address/commons/util/StringUtilTest.java b/src/test/java/seedu/address/commons/util/StringUtilTest.java index c56d407bf3f..c57f134c9ac 100644 --- a/src/test/java/seedu/address/commons/util/StringUtilTest.java +++ b/src/test/java/seedu/address/commons/util/StringUtilTest.java @@ -1,5 +1,6 @@ package seedu.address.commons.util; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.testutil.Assert.assertThrows; @@ -140,4 +141,29 @@ public void getDetails_nullGiven_throwsNullPointerException() { assertThrows(NullPointerException.class, () -> StringUtil.getDetails(null)); } + //---------------- Tests for limitString -------------------------------------- + @Test + public void limitString_underLimit_returnsOriginalString() { + String testString = "Abcdefghij"; + String replacementString = "..."; + int stringLimit = 10; + assertEquals(StringUtil.limitString(testString, replacementString, stringLimit), testString); + } + + @Test + public void limitString_overLimit_returnsUnderLimit() { + String testString = "Abcdefghijk"; + String replacementString = ""; + int stringLimit = 10; + assertEquals(StringUtil.limitString(testString, replacementString, stringLimit), "Abcdefghij"); + } + + @Test + public void limitString_overLimit_appendsReplacementString() { + String testString = "Abcdefghijk"; + String replacementString = "..."; + int stringLimit = 10; + assertEquals(StringUtil.limitString(testString, replacementString, stringLimit), "Abcdefg..."); + } + } From 0d2684e56f8ae510eaff525d1eb97a626c4e659e Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Sat, 30 Oct 2021 13:46:09 +0800 Subject: [PATCH 09/23] Deconflict task filters --- docs/UserGuide.md | 16 +++++---- src/main/java/seedu/address/logic/Logic.java | 2 +- .../seedu/address/logic/LogicManager.java | 4 +-- .../logic/commands/task/ListTaskCommand.java | 1 + .../parser/task/ListTaskCommandParser.java | 7 ++++ src/main/java/seedu/address/model/Model.java | 2 +- .../seedu/address/model/ModelManager.java | 35 ++++++++++++------- .../model/task/filters/DoneTaskFilter.java | 5 +++ .../model/task/filters/KeywordTaskFilter.java | 27 ++++++++++++++ .../model/task/filters/TagTaskFilter.java | 9 +++++ .../model/task/filters/TaskFilter.java | 2 ++ .../java/seedu/address/ui/MainWindow.java | 2 +- .../java/seedu/address/ui/TaskListPanel.java | 14 +++++--- src/main/resources/view/Extensions.css | 4 +++ .../logic/commands/AddCommandTest.java | 2 +- .../seedu/address/model/ModelManagerTest.java | 27 ++++++++++++++ 16 files changed, 129 insertions(+), 30 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 1d42b0dc1b8..10b9cbee983 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -203,9 +203,11 @@ Lists all tasks in the task list. Clears any existing filters. Tasks can be filtered by completion status and/or tags. Show only completed tasks with `done/`, pending tasks with `undone/` and tasks with a certain tag `TAG` with `tag/TAG`. +> Note: `undone/` and `done/` flags cannot be specified at the same time. + **Format:** -`task list [done/] [undone/] [t/TAG]` +`task list [done/ OR undone/] [t/TAG]...` ### Editing a task: `task edit` @@ -213,7 +215,7 @@ Edits an existing task in the task list **Format:** -`task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG] [c/CONTACT]…` +`task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG] [c/CONTACT]...` - Edits the task at the specified INDEX. The index refers to the index number shown in the displayed task list. The index must be a positive integer 1,2,3 … - At least one of the optional fields must be provided @@ -347,16 +349,16 @@ If your changes to the data file makes its format invalid, TaskMaster will disca | Action | Format, Examples | | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |***Address Book Commands*** | -| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` | +| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]...`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` | | **List** | `list` | -| **Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` | +| **Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]...`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` | | **Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` | | **Delete** | `delete INDEX`
e.g., `delete 3` | | **Clear** | `clear` | |***Task List Commands*** | -| **Task Add** | `task add TITLE [d/DESCRIPTION] [ts/TIMESTAMP] [tag/TAG}` | -| **Task List** | `task list [done/] [undone/] [t/TAG]` | -| **Task Edit** | `task edit INDEX [t/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [tag/TAG]…`
e.g.,`task edit 1 t/CS2103 Week 6 Quiz` | +| **Task Add** | `task add TITLE [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]` | +| **Task List** | `task list [done/ OR undone/] [t/TAG]...` | +| **Task Edit** | `task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]...`
e.g.,`task edit 1 t/CS2103 Week 6 Quiz` | | **Task Find** | `task find KEYWORD [MORE_KEYWORDS]`| | **Task Delete** | `task delete INDEX`
e.g., `task delete 3` | | **Task Purge** | `task purge` | diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/seedu/address/logic/Logic.java index 2c3114255ee..65fe92c87b7 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/seedu/address/logic/Logic.java @@ -57,7 +57,7 @@ public interface Logic { * Returns a list of available task filters. * @return The list of available task filters */ - ObservableList getAvailableTaskFilters(); + ObservableList getSelectableTaskFilters(); /** * Returns the list of selected filters to filter tasks by. diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/seedu/address/logic/LogicManager.java index c9abe4f5fb0..6d4c2c8e287 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/seedu/address/logic/LogicManager.java @@ -91,8 +91,8 @@ public void setTaskFilters(List taskFilters) { } @Override - public ObservableList getAvailableTaskFilters() { - return model.getAvailableTaskFilters(); + public ObservableList getSelectableTaskFilters() { + return model.getSelectableTaskFilters(); } @Override diff --git a/src/main/java/seedu/address/logic/commands/task/ListTaskCommand.java b/src/main/java/seedu/address/logic/commands/task/ListTaskCommand.java index 9c6f02362bf..7e634b6db92 100644 --- a/src/main/java/seedu/address/logic/commands/task/ListTaskCommand.java +++ b/src/main/java/seedu/address/logic/commands/task/ListTaskCommand.java @@ -20,6 +20,7 @@ public class ListTaskCommand extends TaskCommand { public static final String COMMAND_WORD = "list"; public static final String FULL_COMMAND_WORD = TaskCommand.COMMAND_WORD + " " + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task list updated"; + public static final String MESSAGE_ONE_DONE_FILTER = "Tasks can only be filtered by done or undone at one time."; public static final String MESSAGE_USAGE = FULL_COMMAND_WORD + ": Lists tasks matching the given search conditions.\n" + "Parameters: " diff --git a/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java index 8ef2c50d600..458fc023399 100644 --- a/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java @@ -1,6 +1,7 @@ package seedu.address.logic.parser.task; import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.commands.task.ListTaskCommand.MESSAGE_ONE_DONE_FILTER; import static seedu.address.logic.commands.task.ListTaskCommand.MESSAGE_USAGE; import static seedu.address.logic.parser.CliSyntax.PREFIX_DONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; @@ -45,6 +46,12 @@ public ListTaskCommand parse(String args) throws ParseException { Set tags = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG)); List taskFilters = tags.stream().map(TaskFilters.FILTER_TAG).collect(Collectors.toList()); + // Both done and undone flags are present + if (argMultimap.getValue(PREFIX_DONE).isPresent() + && argMultimap.getValue(PREFIX_DONE).isPresent()) { + throw new ParseException(MESSAGE_ONE_DONE_FILTER + "\n" + MESSAGE_USAGE); + } + if (argMultimap.getValue(PREFIX_DONE).isPresent()) { taskFilters.add(TaskFilters.FILTER_DONE); } diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 8dbacc4649e..16948323322 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -141,7 +141,7 @@ public interface Model { * Returns a list of available task filters. * @return The list of available task filters. */ - ObservableList getAvailableTaskFilters(); + ObservableList getSelectableTaskFilters(); /** * Returns the list of selected filters to filter tasks by. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 61a7070e3a0..531a55193f0 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -44,6 +44,7 @@ public class ModelManager implements Model { private final FilteredList filteredPersons; private final FilteredList filteredTasks; private final ObservableList availableTaskFilters; + private final FilteredList selectableTaskFilters; private final ObservableList selectedTaskFilters; /** @@ -63,9 +64,9 @@ public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyTaskList taskList, filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); filteredTasks = new FilteredList<>(this.taskList.getTasks()); availableTaskFilters = FXCollections.observableArrayList(); + selectableTaskFilters = new FilteredList<>(availableTaskFilters, + filter -> getSelectedTaskFilters().stream().noneMatch(filter::hasConflictWith)); selectedTaskFilters = FXCollections.observableArrayList(); - - } public ModelManager() { @@ -74,12 +75,13 @@ public ModelManager() { /** * Returns a new ModelManager initialize from the given {@link Model}. + * * @param model The model to initialize the {@link ModelManager} from * @return The initialized ModelManager */ public static ModelManager from(Model model) { return new ModelManager( - new AddressBook(model.getAddressBook()), new TaskList(model.getTaskList()) , new UserPrefs()); + new AddressBook(model.getAddressBook()), new TaskList(model.getTaskList()), new UserPrefs()); } //=========== UserPrefs ================================================================================== @@ -160,7 +162,6 @@ public void setPerson(Person target, Person editedPerson) { } - //=========== Filtered Person List Accessors ============================================================= /** @@ -229,10 +230,15 @@ private void recomputeAvailableTaskFilters() { availableTaskFilters.addAll(tagFilters); } + private void refreshSelectableTaskFiltersPredicate() { + selectableTaskFilters.setPredicate( + filter -> getSelectedTaskFilters().stream().noneMatch(filter::hasConflictWith)); + } + @Override - public ObservableList getAvailableTaskFilters() { + public ObservableList getSelectableTaskFilters() { recomputeAvailableTaskFilters(); - return availableTaskFilters; + return selectableTaskFilters; } @Override @@ -244,12 +250,14 @@ public ObservableList getSelectedTaskFilters() { public void addTaskFilter(TaskFilter taskFilter) { selectedTaskFilters.add(taskFilter); recalculateFilteredTaskList(); + refreshSelectableTaskFiltersPredicate(); } @Override public void removeTaskFilter(TaskFilter taskFilter) { selectedTaskFilters.remove(taskFilter); recalculateFilteredTaskList(); + refreshSelectableTaskFiltersPredicate(); } @Override @@ -257,6 +265,7 @@ public void setTaskFilters(List taskFilters) { selectedTaskFilters.clear(); selectedTaskFilters.addAll(taskFilters); recalculateFilteredTaskList(); + refreshSelectableTaskFiltersPredicate(); } @Override @@ -388,7 +397,7 @@ private Task updateTaskContacts(Task task) { /** * Determines if a name exists within a given a list of {@code Person}s. * - * @param personList List of Persons to check through + * @param personList List of Persons to check through * @param nameToCheck Name to check the list with * @return Boolean indicating whether the personList contains nameToCheck. */ @@ -414,7 +423,7 @@ private void updateAllTasksContacts() { * Changes the {@code oldName} in the given {@code Task} to the new name. * Used when a {@code Person}'s {@code Name} is edited. * - * @param task Given task to update + * @param task Given task to update * @param oldName Old name to change * @param newName New name to change to * @return A new copy of the changed task. If there is no change, the task itself is returned. @@ -431,11 +440,11 @@ private Task changeTaskContactName(Task task, Name oldName, Name newName) { return updatedContacts.equals(currentContactList) ? task : new Task(task.getTitle(), - task.getDescription().orElse(null), - task.getTimestamp().orElse(null), - task.getTags(), - task.isDone(), - updatedContacts); + task.getDescription().orElse(null), + task.getTimestamp().orElse(null), + task.getTags(), + task.isDone(), + updatedContacts); } /** diff --git a/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java b/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java index 682aa0eb399..f8bc63378ec 100644 --- a/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/DoneTaskFilter.java @@ -18,6 +18,11 @@ public String toDisplayString() { return isInverted ? "Undone" : "Done"; } + @Override + public boolean hasConflictWith(TaskFilter other) { + return other instanceof DoneTaskFilter; + } + @Override public DoneTaskFilter invert() { return new DoneTaskFilter(!isInverted); diff --git a/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java b/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java index 5eda30943b9..cd69e904f43 100644 --- a/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java @@ -1,5 +1,6 @@ package seedu.address.model.task.filters; +import java.util.Objects; import java.util.function.Predicate; import seedu.address.commons.util.StringUtil; @@ -33,4 +34,30 @@ public String toDisplayString() { return (this.isInverted ? "Without " : "Contains ") + StringUtil.limitString(keywords, "...", KeywordTaskFilter.MAX_KEYWORDS_LENGTH); } + + @Override + public boolean hasConflictWith(TaskFilter other) { + if (!(other instanceof KeywordTaskFilter)) { + return false; + } + KeywordTaskFilter otherKeywordTaskFilter = (KeywordTaskFilter) other; + return keywords.equals(otherKeywordTaskFilter.keywords); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + KeywordTaskFilter that = (KeywordTaskFilter) o; + return keywords.equals(that.keywords) && isInverted == that.isInverted; + } + + @Override + public int hashCode() { + return Objects.hash(keywords, isInverted); + } } diff --git a/src/main/java/seedu/address/model/task/filters/TagTaskFilter.java b/src/main/java/seedu/address/model/task/filters/TagTaskFilter.java index 81f2166cd31..bcb94758946 100644 --- a/src/main/java/seedu/address/model/task/filters/TagTaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/TagTaskFilter.java @@ -19,6 +19,15 @@ public String toDisplayString() { return (isInverted ? "Not tagged " : "Tagged ") + tag; } + @Override + public boolean hasConflictWith(TaskFilter other) { + if (!(other instanceof TagTaskFilter)) { + return false; + } + TagTaskFilter otherTagTaskFilter = (TagTaskFilter) other; + return tag.equals(otherTagTaskFilter.tag); + } + @Override public TagTaskFilter invert() { return new TagTaskFilter(tag, !isInverted); diff --git a/src/main/java/seedu/address/model/task/filters/TaskFilter.java b/src/main/java/seedu/address/model/task/filters/TaskFilter.java index ebf9e08ec82..f072651041c 100644 --- a/src/main/java/seedu/address/model/task/filters/TaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/TaskFilter.java @@ -36,4 +36,6 @@ public Predicate getPredicate() { * @return the string used to describe the filter in the UI */ public abstract String toDisplayString(); + + public abstract boolean hasConflictWith(TaskFilter other); } diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index 104a0523ef9..a8337206a23 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -179,7 +179,7 @@ void fillInnerParts() { TaskListPanel taskListPanel = new TaskListPanel( logic.getFilteredTaskList(), - logic.getAvailableTaskFilters(), + logic.getSelectableTaskFilters(), logic.getSelectedTaskFilters(), logic::addTaskFilter, logic::removeTaskFilter, diff --git a/src/main/java/seedu/address/ui/TaskListPanel.java b/src/main/java/seedu/address/ui/TaskListPanel.java index dd520e503d3..02601c9356b 100644 --- a/src/main/java/seedu/address/ui/TaskListPanel.java +++ b/src/main/java/seedu/address/ui/TaskListPanel.java @@ -9,6 +9,7 @@ import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.layout.FlowPane; import javafx.scene.layout.Region; @@ -39,24 +40,29 @@ public class TaskListPanel extends UiPart { */ public TaskListPanel( ObservableList taskList, - ObservableList availableTaskFilters, + ObservableList selectableTaskFilters, ObservableList selectedTaskFilters, Consumer addTaskFilter, Consumer removeTaskFilter, Consumer addTask, TaskEditor taskEditor) { super("TaskListPanel.fxml"); - this.availableTaskFilters = availableTaskFilters; + this.availableTaskFilters = selectableTaskFilters; this.selectedTaskFilters = selectedTaskFilters; // Initialize task list taskListView.setItems(taskList); taskListView.setCellFactory(tasks -> new TaskListViewCell(taskEditor)); - // Initialize list of available filters - filterComboBox.setItems(availableTaskFilters); + // Initialize list of selectable filters filterComboBox.setCellFactory(taskFilters -> new TaskFilterCell()); filterComboBox.setPromptText(null); + Label placeholder = new Label("No more filters"); + placeholder.getStyleClass().add("italics"); + filterComboBox.setPlaceholder(placeholder); + filterComboBox.setItems(selectableTaskFilters); + // Workaround: Close menu when mouse down to prevent mouse up from selecting another item + filterComboBox.setOnAction(e -> filterComboBox.hide()); filterComboBox.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { if (newValue != null) { addTaskFilter.accept(newValue); diff --git a/src/main/resources/view/Extensions.css b/src/main/resources/view/Extensions.css index 09b06342946..d0d729e0e87 100644 --- a/src/main/resources/view/Extensions.css +++ b/src/main/resources/view/Extensions.css @@ -16,6 +16,10 @@ -fx-background: #383838; } +.italics { + -fx-font-style: italic; +} + .tag-selector { -fx-border-width: 1; -fx-border-color: white; diff --git a/src/test/java/seedu/address/logic/commands/AddCommandTest.java b/src/test/java/seedu/address/logic/commands/AddCommandTest.java index b11ef6436a3..b81d64db52b 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddCommandTest.java @@ -165,7 +165,7 @@ public ObservableList getFilteredTaskList() { } @Override - public ObservableList getAvailableTaskFilters() { + public ObservableList getSelectableTaskFilters() { throw new AssertionError("This method should not be called."); } diff --git a/src/test/java/seedu/address/model/ModelManagerTest.java b/src/test/java/seedu/address/model/ModelManagerTest.java index fe1ec4a22d9..696ca995b14 100644 --- a/src/test/java/seedu/address/model/ModelManagerTest.java +++ b/src/test/java/seedu/address/model/ModelManagerTest.java @@ -18,6 +18,9 @@ import seedu.address.commons.core.GuiSettings; import seedu.address.model.person.NameContainsKeywordsPredicate; +import seedu.address.model.tag.Tag; +import seedu.address.model.task.filters.TaskFilter; +import seedu.address.model.task.filters.TaskFilters; import seedu.address.testutil.AddressBookBuilder; import seedu.address.testutil.TaskListBuilder; @@ -96,6 +99,30 @@ public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredPersonList().remove(0)); } + @Test + public void getSelectableTaskFilters_withUndoneFilterApplied_doesNotContainDoneFilters() { + modelManager.addTaskFilter(TaskFilters.FILTER_UNDONE); + assertFalse(modelManager.getSelectableTaskFilters().contains(TaskFilters.FILTER_DONE)); + assertFalse(modelManager.getSelectableTaskFilters().contains(TaskFilters.FILTER_UNDONE)); + } + + @Test + public void getSelectableTaskFilters_withDoneFilterApplied_doesNotContainDoneFilters() { + modelManager.addTaskFilter(TaskFilters.FILTER_DONE); + assertFalse(modelManager.getSelectableTaskFilters().contains(TaskFilters.FILTER_DONE)); + assertFalse(modelManager.getSelectableTaskFilters().contains(TaskFilters.FILTER_UNDONE)); + } + + @Test + public void getSelectableTaskFilters_withTagFilterApplied_doesNotContainTagFilterAgain() { + TaskFilter filter = TaskFilters.FILTER_TAG.apply(new Tag("test")); + modelManager.addTaskFilter(filter); + assertTrue(modelManager.getSelectableTaskFilters().contains(TaskFilters.FILTER_DONE)); + assertTrue(modelManager.getSelectableTaskFilters().contains(TaskFilters.FILTER_UNDONE)); + assertTrue(modelManager.getSelectedTaskFilters().contains(filter)); + assertFalse(modelManager.getSelectableTaskFilters().contains(filter)); + } + @Test public void equals() { AddressBook addressBook = new AddressBookBuilder().withPerson(ALICE).withPerson(BENSON).build(); From ad7be5b311b61f4d60094bc8c24ba30bb8bd3a49 Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Sat, 30 Oct 2021 13:51:15 +0800 Subject: [PATCH 10/23] Fix ListTaskCommand --- .../seedu/address/logic/parser/task/ListTaskCommandParser.java | 2 +- .../address/logic/parser/task/ListTaskCommandParserTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java b/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java index 458fc023399..273b32b3c82 100644 --- a/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/task/ListTaskCommandParser.java @@ -48,7 +48,7 @@ public ListTaskCommand parse(String args) throws ParseException { // Both done and undone flags are present if (argMultimap.getValue(PREFIX_DONE).isPresent() - && argMultimap.getValue(PREFIX_DONE).isPresent()) { + && argMultimap.getValue(PREFIX_UNDONE).isPresent()) { throw new ParseException(MESSAGE_ONE_DONE_FILTER + "\n" + MESSAGE_USAGE); } diff --git a/src/test/java/seedu/address/logic/parser/task/ListTaskCommandParserTest.java b/src/test/java/seedu/address/logic/parser/task/ListTaskCommandParserTest.java index 80d779a6929..4dc7ebf69d7 100644 --- a/src/test/java/seedu/address/logic/parser/task/ListTaskCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/task/ListTaskCommandParserTest.java @@ -32,7 +32,7 @@ void parse_showDone_showDoneTasks() { @Test void parse_showUndone_showUndoneTasks() { - assertParseSuccess(parser, " " + PREFIX_UNDONE, new ListTaskCommand(List.of(TaskFilters.FILTER_DONE.invert()))); + assertParseSuccess(parser, " " + PREFIX_UNDONE, new ListTaskCommand(List.of(TaskFilters.FILTER_UNDONE))); } @Test From e33e2467448c273910891f4651465338fa3c602d Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 15:14:12 +0800 Subject: [PATCH 11/23] Change execute and undo methods --- .../logic/commands/task/DoneTaskCommand.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java b/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java index 2eb4cd3666b..749efda274d 100644 --- a/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java +++ b/src/main/java/seedu/address/logic/commands/task/DoneTaskCommand.java @@ -35,27 +35,11 @@ public DoneTaskCommand(Index index) { @Override public CommandResult execute(Model model) throws CommandException { requireNonNull(model); - List taskList = model.getFilteredTaskList(); - - if (index.getZeroBased() >= taskList.size()) { - throw new CommandException(Messages.MESSAGE_INVALID_TASK_DISPLAYED_INDEX); - } super.canExecute(); - - Task task = taskList.get(index.getZeroBased()); - boolean isDone = task.isDone(); - Task completedTask = new Task(task.getTitle(), - task.getDescription().orElse(null), - task.getTimestamp().orElse(null), - task.getTags(), - !task.isDone(), - task.getContacts()); - this.completedTask = completedTask; - model.setTask(task, completedTask); - + boolean isDone = changeTaskIsDone(model); displayedString = isDone - ? MESSAGE_UNDONE - : MESSAGE_SUCCESS; + ? MESSAGE_SUCCESS + : MESSAGE_UNDONE; return new CommandResult(String.format(displayedString, completedTask)); } @@ -67,8 +51,17 @@ public boolean equals(Object o) { @Override public CommandResult undo(Model model) throws CommandException { + requireNonNull(model); super.canUndo(); + changeTaskIsDone(model); + return new CommandResult(String.format(displayedString, this.completedTask)); + } + + private boolean changeTaskIsDone(Model model) throws CommandException { List taskList = model.getFilteredTaskList(); + if (index.getZeroBased() >= taskList.size()) { + throw new CommandException(Messages.MESSAGE_INVALID_TASK_DISPLAYED_INDEX); + } Task task = taskList.get(index.getZeroBased()); Task completedTask = new Task(task.getTitle(), @@ -81,6 +74,6 @@ public CommandResult undo(Model model) throws CommandException { this.completedTask = completedTask; model.setTask(task, completedTask); - return new CommandResult(String.format(displayedString, this.completedTask)); + return completedTask.isDone(); } } From 7bc9401067c00f9bcaddb0353492d86479eeb844 Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Sat, 30 Oct 2021 15:35:32 +0800 Subject: [PATCH 12/23] Fix KeywordTaskFilter hasConflictWith method --- .../seedu/address/model/task/filters/KeywordTaskFilter.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java b/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java index cd69e904f43..c7c821e0fc1 100644 --- a/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java +++ b/src/main/java/seedu/address/model/task/filters/KeywordTaskFilter.java @@ -37,11 +37,7 @@ public String toDisplayString() { @Override public boolean hasConflictWith(TaskFilter other) { - if (!(other instanceof KeywordTaskFilter)) { - return false; - } - KeywordTaskFilter otherKeywordTaskFilter = (KeywordTaskFilter) other; - return keywords.equals(otherKeywordTaskFilter.keywords); + return other instanceof KeywordTaskFilter; } @Override From e0479f1c4b0671a245ec49300452a456bab3a6e6 Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Sat, 30 Oct 2021 15:38:03 +0800 Subject: [PATCH 13/23] Update Model javadoc --- src/main/java/seedu/address/model/Model.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 16948323322..aad03ec4bed 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -138,8 +138,8 @@ public interface Model { /** - * Returns a list of available task filters. - * @return The list of available task filters. + * Returns a list of selectable task filters. + * @return The list of selectable task filters. */ ObservableList getSelectableTaskFilters(); From 99bcbf15f39142f851475665d98480ccaa438534 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 15:50:49 +0800 Subject: [PATCH 14/23] Fix clear undo --- src/main/java/seedu/address/logic/commands/ClearCommand.java | 5 ++++- src/main/java/seedu/address/model/ModelManager.java | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/address/logic/commands/ClearCommand.java b/src/main/java/seedu/address/logic/commands/ClearCommand.java index 07004c85e7f..a684a433e59 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCommand.java +++ b/src/main/java/seedu/address/logic/commands/ClearCommand.java @@ -25,7 +25,10 @@ public CommandResult execute(Model model) throws CommandException { throw new CommandException(Messages.MESSAGE_UNABLE_TO_EXECUTE); } requireNonNull(model); - this.oldAddressBook = model.getAddressBook(); + + // Save a copy of the previous AddressBook + this.oldAddressBook = new AddressBook(model.getAddressBook()); + model.setAddressBook(new AddressBook()); this.canExecute = false; return new CommandResult(MESSAGE_SUCCESS); diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 61a7070e3a0..6b264b8fc22 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -122,6 +122,7 @@ public void setAddressBookFilePath(Path addressBookFilePath) { @Override public void setAddressBook(ReadOnlyAddressBook addressBook) { this.addressBook.resetData(addressBook); + updateAllTasksContacts(); } @Override From 45f78ec6a350d92d10b5e9f0b4e0525bcc683c65 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 16:45:38 +0800 Subject: [PATCH 15/23] Fix #112, #110 --- docs/UserGuide.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 1d42b0dc1b8..359e1ecf2cd 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -5,7 +5,7 @@ title: User Guide # User Guide V1.3 -TaskMaster2103 V1.3 is a desktop app for managing contacts as well as tasks, optimized for +TaskMaster2103 V1.3 is a desktop app for students to manage their tasks and contacts, optimized for use via a CLI while still having the benefits of a GUI. ## Table of Contents @@ -79,6 +79,18 @@ use via a CLI while still having the benefits of a GUI. +### Notable command prefix formats + +Some prefixes require the user to follow certain formats in their commands. + +| **Prefix** | **Use** | **Format** | +| ------------- | ------------- | ------------- | +| `ts` | Timestamp, represents a date | `DD`-`MM`-`YYYY`

1. Single-digit dates or months require a `0` appended at the front. For example, 3rd July 2021 is represented as `03-07-2021`.

2. The day, month and year are separated by hyphens. | +| `e` | Email | `local-part@domain`

1. The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters.

2. This is followed by a '@' and then a domain name. The domain name is made up of domain labels separated by periods.

The domain name must:
- end with a domain label at least 2 characters long
- have each domain label start and end with alphanumeric characters
- have each domain label consist of alphanumeric characters, separated only by hyphens, if any. | + + + + ### Viewing help : `help` Shows a message explaning how to access the help page. @@ -87,8 +99,6 @@ Shows a message explaning how to access the help page. Format: `help` - - ## Address Book Commands ### Adding a person: `add` From b3d59fd5cff39d56aeec80cc487b11dc1d83bb32 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 16:47:49 +0800 Subject: [PATCH 16/23] Fix #128 --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 359e1ecf2cd..ec5e39009ba 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -301,7 +301,7 @@ Format: `undo` This command can also be invoked through using the shortcut `CTRL + Z` or `CMD + Z`. -### Undo previous command : `redo` +### Redo previous command : `redo` Redo the previous command, returning the user back to the previous state, up to a maximum of 15 previous commands. From 394deaf41df98e1b194d13a8bfe754f223346668 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 16:50:27 +0800 Subject: [PATCH 17/23] Fix #125, #139 --- docs/UserGuide.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index ec5e39009ba..0e7c5d741dd 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -254,7 +254,7 @@ Examples: ### Completing a task: `task done` -Completes an existing task in the task list +Completes an existing task in the task list, or marks it as not done if already done. **Format:** @@ -262,6 +262,8 @@ Completes an existing task in the task list - Completes the task at the specified INDEX. The index refers to the index number shown in the displayed task list. The index must be a positive integer 1,2,3 … +- If the task at the specified INDEX is already done, this command should un-complete the task, marking it as not done. + **Example:** `task done 1` From 8b4ce7c776c97757874645b286adbb45aa172d8d Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 16:58:34 +0800 Subject: [PATCH 18/23] Fix #151 --- docs/UserGuide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 0e7c5d741dd..a084c55835b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -76,6 +76,8 @@ use via a CLI while still having the benefits of a GUI. an error message will be shown. - If an extraneous parameter is specified, an error message will be shown. + + - Parameter or argument values cannot contain the character `/`. An error message will be shown if `/` is present in the argument value. For example, `task add 1/2` is invalid, and can be replaced with valid alternatives such as `task add 1 or 2` instead. From 9b9d0874201d317cda610ab18b6e1ecc0527143d Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 17:00:03 +0800 Subject: [PATCH 19/23] Fix #158 --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index a084c55835b..995d4d32435 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -350,7 +350,7 @@ If your changes to the data file makes its format invalid, TaskMaster will disca ## FAQ **Q**: How do I transfer my data to another Computer?
-**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder. +**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous TaskMaster2103 home folder. --- From 2e9ae8ba8d465aeffeb07f7b593336becb113fec Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 20:41:16 +0800 Subject: [PATCH 20/23] Fix #134, #135, #136, #143 168 technically also fixed --- docs/UserGuide.md | 82 +++++++++++++++++++++++++++--- docs/images/guiAddTag.png | Bin 0 -> 3462 bytes docs/images/guiAddTaskDialog.png | Bin 0 -> 38176 bytes docs/images/guiFilterDropdown.png | Bin 0 -> 13133 bytes docs/images/guiFilterHomework.png | Bin 0 -> 13493 bytes docs/images/guiMainMenu.png | Bin 0 -> 69887 bytes docs/images/guiTasks.png | Bin 0 -> 20217 bytes 7 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 docs/images/guiAddTag.png create mode 100644 docs/images/guiAddTaskDialog.png create mode 100644 docs/images/guiFilterDropdown.png create mode 100644 docs/images/guiFilterHomework.png create mode 100644 docs/images/guiMainMenu.png create mode 100644 docs/images/guiTasks.png diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 995d4d32435..307ea9e7ca6 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -75,7 +75,7 @@ use via a CLI while still having the benefits of a GUI. - If a parameter is expected only once in the command, but you specified it multiple times, an error message will be shown. - - If an extraneous parameter is specified, an error message will be shown. + - If an extraneous parameter is specified, an error message will be shown. (Does not apply for tags or contacts) - Parameter or argument values cannot contain the character `/`. An error message will be shown if `/` is present in the argument value. For example, `task add 1/2` is invalid, and can be replaced with valid alternatives such as `task add 1 or 2` instead. @@ -136,6 +136,8 @@ Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​` - When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative. - You can remove all the person’s tags by typing `t/` without specifying any tags after it. +- If the edited Person's name corresponds to a name of a contact in any task, the corresponding tasks' contact name will be changed accordingly as well. (if applicable) + Examples: @@ -194,10 +196,8 @@ Each task has a compulsory title field, and textual description, timestamp, and **Format:** -`task add TITLE [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG] [c/CONTACT]` +`task add TITLE [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]… [c/CONTACT]…` -- Note that contacts in the AddressBook will be displayed in green, grey otherwise. -- If the contact's name in the AddressBook is edited, the corresponding tasks' contact name will be changed accordingly as well. (if applicable) **Example:** @@ -217,7 +217,7 @@ Tasks can be filtered by completion status and/or tags. Show only completed task **Format:** -`task list [done/] [undone/] [t/TAG]` +`task list [done/] [undone/] [t/TAG]…` ### Editing a task: `task edit` @@ -225,12 +225,12 @@ Edits an existing task in the task list **Format:** -`task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG] [c/CONTACT]…` +`task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]… [c/CONTACT]…` - Edits the task at the specified INDEX. The index refers to the index number shown in the displayed task list. The index must be a positive integer 1,2,3 … - At least one of the optional fields must be provided -- Existing values will be updated to the input values.When editing tags, the existing tags of the task will be removed i.e adding of tags is not cumulative. -- You can remove all the task’s tags by typing tag/ without specifying any tags after it. +- Existing values will be updated to the input values. When editing tags or contacts, the existing tags of the task will be removed i.e adding of tags and contact are not cumulative. +- You can remove all the task’s tags by typing `t/` without specifying any tags after it. This applies to contacts and `c/` as well. **Example:** @@ -345,6 +345,72 @@ If your changes to the data file makes its format invalid, TaskMaster will disca --- +## Using the GUI + +The following image shows an example of the main menu. The task list is shown on the left of the app, while the address book is shown on the right. + +![main menu gui](images/guiMainMenu.png) + +### 1. CLI + +- A Command Line Interface is provided for users to type commands. +- If not focused on the CLI, pressing the `/` key will allow the user to focus on the text box and immediately begin typing. +- To retrieve previously typed commands, you may see "Retrieving previous commands" in the "Other Shortcuts/Commands" section above. + +### 2. Filter Dropdown + +- A filter can be used to filter the list of tasks. By clicking the filter dropdown, the following dropdown will be shown. + +![Filter dropdown gui](images/guiFilterDropdown.png) + +Clicking on any one of the dropdown options will filter the task list based on the filter chosen, as shown. + +![result for filtering by homework](images/guiFilterHomework.png) + +- More than 1 filter can be applied at any time. However, for the `Done` and `Undone` filters, only one can be selected at any time. +- Using the `task find` command also adds to the list of filters. + +### 3. Adding a task via GUI + +Upon clicking the Add Task Dialog button, the following popup window should appear. + +![result for pressing +new button](images/guiAddTaskDialog.png) + +Enter relevant text into the text fields. + +**[TODO: PLACE FILLED ADD TASK DIALOG HERE]** + +To add tags, type the tag into the text field and press the `Enter` key. The tag should be displayed as seen below. + +![result for adding new tag](images/guiAddTag.png) + +To finish adding a task, click the `Save` button. The task should be added to the task list. + +- Pressing the `Enter` key on text fields other than the "Tags" field should add the task to the task list. +- If invalid arguments are provided, the task will still be added without the invalid arguments upon clicking "Save" or the `Enter` key. + +### The Task pane + +Each task pane represents one task in the task list. Below are examples of 2 tasks. For your reference, relevant components are numbered from 1-5. + +![2 task examples](images/guiTasks.png) + +Legend: + +| **Number** | **Name** | **Description** | +| ------------- | ------------- | ------------- | +| 1 | Task title | Mandatory field. | +| 2 | Done checkbox | Checkbox will be ticked if the task is complete. It will not be ticked otherwise.

Checkboxes can be clicked to toggle the task's completion status from the GUI directly. | +| 3 | Timestamp | Optional field.

No highlight by default. If the task date has past, the timestamp would be highlighted in red. | +| 4 | Description of the task | Optional field. | +| 5 | Tags | Optional field.

All tags are displayed in alphabetical order and highlighted blue. | +| 6 | Timestamp, represents a date | Optional field.

By default, contacts are highlighted grey. However, should a contact's name correspond to a person in the Address Book, it would be highlighted green instead.

All contacts are displayed in alphabetical order, grouped by whether or not the appear in the Address Book.

If the edited Person's name corresponds to a name of a contact in any task, the corresponding tasks' contact name will be changed accordingly as well. + +### Editing a task via GUI + +Double-clicking on a task pane will bring the user to the Edit Task Dialog. See the above section "Adding a task via GUI" for details regarding the task dialog. + + ## FAQ diff --git a/docs/images/guiAddTag.png b/docs/images/guiAddTag.png new file mode 100644 index 0000000000000000000000000000000000000000..d270da66798dbe8abe925e4225f496b35e95fd93 GIT binary patch literal 3462 zcmb7Hc{Cf?8V~JsQEI8u*wc>aOdAwsXwh26zSI_kP>LZTt%@aT=|YR5sF+d|r4!XYI`QoE>+zoVcK1aj=h&EMq||e`0no_0}!1G%<+sSP^sGuHe%i?>GC;k_pU%^8;&}~iZ>}#f@@H+) z=(sJRpw5q4m=<}K?4!9DB=W?@1!?SAlZc(jSv{jwN!**~Wl>dxbb)m2Fy7b!4p^r{ zEETL9IP)5aHJ{`JAd>LnQ&qf^0m8L@qwJHtHc5n#e_w7c{S}4L27^0z|d~?PR*PIB&BcF*)Ge zg!5FfCl%Yo*-1)n!Q9L#PHRh1GT`mgBxH39H1}L&-!G-%?()g0KH46}6D=_Vd|S+e zM5B@dkqbM_vFH2q+Od1zHiQh|yig2Yr_TCxSM~~<(+n}_2Rz9j5RY22W^{hP`<)s~ zji^34V=}6y;k7hLnQj-mP<}C>2BU9Q?Act933%J4Mr>T>%1ic1)Rulp(*!&cKMDhA zOMQz_Xd1pFfJmh#MMXu413pWoLujX2N`NZ4bco@=P@jl@SQ+!fnAA)0lmNS??~;LP z|6hnBI~lBDYQpx7Sl1?G^yjHi`_CuM*ChP)9tCn&2_?rC_@Qn+mcV)xpyH7il6B+H zdH+G3D{MfgZZOg&qIRx#r`FE8!6IRWE&MRlD(b#4y~_O~!=K%VfI0mZSC>%iUTe72 z&enU;*`Ub-hbWI=(B~u$OJB{ouLLV^wZccAMSymIgP6OkVz=E`I62zJG?H|z}MA-sFIuI*h@ z4Wp;Q`jfekZF5zcBIESFHXi+~I%V}oZ-&^zQ`eDkd(AI63G|ljjR;E*TZQE2wW;87zyC9$-Y18K{VyM}R~&EN3d+L2PyE1c@eZf~(v@qk_}D6$#xJjI$vfy9t>8-p?(r(t4_hJ|e^B>3u` zMw{UOiBT}I(slYqIedlR=FiypDS_?Qg!8C#a-u);gt#B^EZ8abbRB>9k^9=+nfJJQ@=VRm6eqj<^bA_&d9~3CGJ-VB6sL( z2H-Q%ku*bjXa-=eLY)NgkNDpx?c4GH2MhkkE#M?%ctk`53bnMjsH~)ZUM#dl~g)i)4^!N8q zO_gctkaNoNL`DJ&CFwN8M-0felu3@9?V;B|(U+y2QZMau%|rES*4XY-p(9rcPjzpq6OxU<=%OE!5EIvM-9B?dEyisLK-z~(*K-3hRBOh6}SV;S7TINeitf!WVx%(2NyMn~GUo$W1E)5I@` zxXm?ugzQ3Rrs5KtT2Lamf5>W|-@6J;qERP}mgZaGRBA#~gEq|Uj|&a9IlGtxygK% zPG_4AodddY*Im=-(lY8YCvnGhPG_r{>R(^f&JCv5&KmJ}vey-%Pd{kE|9G%NCI+Fz z-9-y$aJeIVhhX&xLvsXPUPr8h@#@u0O-FG95|*1uXZ_x#fkMs^)o<5vFBNzy=gShF zAuwUOKhzYT26tacSA^;O>DPLLsL?Y}|9eqHzR%s7sTYhxz?6Vf%g~?yAgYfOM}Z}# zNt#8~&2rk;Y^Jjc%IC>>wSYQ{EZSo~%uI+>|%|1=znuM3zacJUqs6F`Ki6PMSwC z8u08L;j=N$&IWgVcEiz`!m;}scKi=-3lZr}6TPX-T-#=ZF*~&b+=IXbl<( z|1-HtX%(E+L|m6eE-2A-el3T0|1!eFz^Lj=5iJfac?nnb(@yN_o^EdlrZlxQL zc*7y_JU2~#iu=-0$aixgi( zFhnt+w`J{WE-AuMy6X8~xO#lplZhXHWN>c6JYobAcjElJ7EWtz@yo>gXzEkJaz{JI z%>XZYX3E8UOuYdsL7Xk|XmOQ|Y5RyM{AzexXia638@I>0kx%H8L8!X5T>wHF3j|$k zR'N0r5RL+Y4z5oMnCBo3b!GZ~ue>AGBVKde5M3)D zx!Y<1w?X7yDVXvOZ{lCH&0C{vhGLWag>}=Fb4?r{M;155$2$OVVneaU=Z!DU-cO?s zIuhfeTiqWd=dN{SPzClS&m+(%>&yPy=lw4NxGAT{0ui^(h4(N@w01oXj>=mV$qKEJT1pl9Hl+zdC4JWS)n^~ zYTzFsnk0RuL1b@>r1RgDpM}p92oA)!)IYfVCJ}!TovLd=d23$E#O-?Vi4u>}iMpLA zX^CD@Aj9tsneKMrPU4G;i^~tAWr3Q&7t$r`Wkz22J+z_6Q}Gy!~U+! zh~nU)6_o=b{TTVv7>hNlbs>)STlahW*!C);OW->B*YzD(P{-utB(`nj)vH%iQ&Z~a z`+KdhlA5Z1`!1#ic)(2mu9>R4t?7ebM)(gXsCG(n02h9)4rg9-|fCWK-FiqbpMJ6I45 z5Rl$MLk~?tZ(+{_bh+O5J>U7pIb-iJ_SxqbBjI^wx$AXb_nblAQdKzq7yVyUR8+?m zZ_3`LqS_CmqS_~YcrW-y=E?~=Dyqj+in7-=T@9xPtP0L_RL*(Tea#q;mEdbCHmIaFfS)TQLVRJ|bx^7`H`m_x}Q#X|r2F=rGv;s;S({le#M*QslUrFm11f5BDs zu*bgUl)_gU@+-uK0XVbI=6vYwRP6eMc|BDNu@(Zt`kU}uD=m0k^OGoNzm;cKgEJ)M(h zdu|_i?Ve>K`YQV@zel}IQv;0md_dr7T)5XKXX~3>=PVftA9#*|=iAE~u7hW`WsJ757N7H~GIMs5kH2tvSr-X@7QTaKGpq7oUeU-XjF5JFW61XL>X2VM!?*5DoG@-3Js#q>h zty`)xzqMMj(X<*qJ_Kt~;T|R{lPYNTCX9~hxUm|(E8F01KDFTa4ZqhZF3+ZHTQiJs zcCmaKo5x)ZlzVkQlb=>|N=65T@Tyd-40?=-7(Jlwdp`|P6_+&NY;1!ZV4ZnD2xOl( zr1L)ro;?X{>U%`zBl3IgzKB*v$`-2yZJ1#dFA2%Qe`On9coQBu84&jq52b@bBlPOL!B&Fyxo@M;H$?$-%Ba-K>CO)g-`6)FZJ_ z#U}r67X%@i*wD1=-c_tb@l-JQi|b8#7wx@GUglqP+>6`)fVfZZf>bNfftrfy)bq^qv5Y7otz>mLZ~t z;$t1p;Mg3A!{!~QTjU$5x1-71;dqn%isqU9?MH&BZ^%&NO^#qI#eVrlwGCR-bFlw2 zk6*>t@LbXn4a>h&a1_U8j&~^W$wN=*5mOwbRSsY9JBfF?%x?G=y%GTnV$WbjA-zu# zr+F8Ki+$=LPy!4NBR><+rH(@X`0Ve{lelUQ{UIRjF@H#a6p^l$=}mZz0Hgbz%t?sB z(pIm2S?w!ptw)NAhr`$lm~m|SV`gfCs8wy=oyj~yF^!AM%LIlpbEup=>`3%l56lYL z18+Bb^?Mkkn~aX+sBBa0H+MnQBcz_O2xQAe*&IsV#=MxN0PJD+`w9_9EE=L0ia4EJ zfDkbLSBhVf-vYxqLC*I8&c`#lFI~=zc*3UhA*?(fX~iPre&_6B_kyP(*Pv zI_VAKbTq^vgl$~SJol3@MCi7|!KWIVVS(Fx`#TW!Bc(%Ivla7BA}D3*t!YICmeSSd zw$_GDTU-p;8EBrVv)N*!KE1tfgX{M2f(6(v`{ObH6HBsVwao+X%wqlmF1~DU@rV|i(37MihvX6WDXQ5iESnqo4<4La3kMYOj zpCKJygud#&8>{eHTyJWIXIkW4jl{+(tH}JP@~%wXeD@`SR)%(#zFVCeLY3L?H7gE4*ZAaf!oX zt?(KCMZf9#jsD;{X`h63-L0Q7X13i+pK#^g&I=pOLy6vlYtt7C ze6xl~+bx45b6|Iq6v*n!BtuFCB;Td%jo{$gS7 z{$}PB3|I9=DD~ia-E1+*`++v(QD-P7gA~uDwB8%>jqEUI#DoGBaL0RD%=X#wGMbu0 ztIV&%?39|mW~CKZ_KVV~^$79vxzPR<9nn&MyQ`O`ez1wa7nxL>Wqf>Y;>AWqXjx*$JO^dmFSaJr2oq7bUDYB?r_&ts)7T7G*27diAsXyKJQ zCoPV7yJ<|>MarqCDTPl%I#r_NZ5MM&cs}W_5l<d&aI;Bv{ z872$kU`i@8St8|@3u{LaltmCQq>XT2WeYPJ_{gNDa~CJGkjR84Ubr=WXAhoM(6mN` z@ytX-<^5W{saF5WcN<>j2w3h=;6V)bc>e9G7_Ke{C_Ce-+yK1O+pNh$&2VuRLQ5K} zqpjW;d1iICxg9qWE;>Ba=Q%GP!+R@Z(2E#9B;|zNM>}g0su7aDfAslzK8*-^IelhF zhtxAcL0Zm@2;#g61J_EBoR)FiH^Pb}m(l#Z|;T4JwWsacz|7E|LHO7nKbZ_nrmY zWoF{;jNT;lmYfmg?TUywQV2rJO@57h*Y^ImzVFc27P8QZ1NXH?ds{d>3W5q-I2S}V zTxVB4a-QReDT$8qagMuVf=d*2aZnMv_sRw;UG^ifm<7Et_&ncPLcnFbHov%ErwWlb z5t}o8M_MPVcWt$6$lEcyUeavtL8!(Hx7-_>mW9tOZLxPoUzkIaf=y~i>A#d1Yv>U} zsoSH72Vvx}e0awY(;kV?8XF3sB6Qut9TZZgTW)uCYV7TwlYwCr>n)I9nsOBa5%w*T z)I69`bEsR~V`;>;JTG@l%pQ_m{AxNLVPKP?HkE@^A@j)pOmY$mN zPoB9WzSNg;BDXI0sQiO>Q!NY05_|aO&So65?~-4zDv6KFQ2U@T>gQ2L4u4!b;V(Am zV0dnN?l-t+%Toki`?W|)GX{d1s=1fOCCIPtaw1MCB&uJ$R9ic~g`+OR;L5?=gsbe8 zYq2r(=Fm$Jz6uW}HvwxKBEqtf|E-N-s=$N8Isd6BtF(6s^m z$c?)8cM!D?(OTI**s3mP3f}lg@?!TpdD@k8TRNM2*^sGmXs{R4BB?Ywl9jbgti1u7 zmqW!I@jT@-f~S5*f)kok*5A(FHG-|>=*CId581 zI<}{@ARRe_Q3f^-pz*C86uJNO&LHvRAbf%C z<<7%raAe$a;fdeQT6RF`5jK#yzrpv)?Eu8{J3GC+Gwj|Yz>Eb^*IFn@^Yl%SECE7) zK|#AOuK|&hr!2)_$>pPM3*0lT1FkAM8c{kSZxk3yCpsJiQw{Z8$}oBjGi#de$v4Ac zoO&%%aIg4H))yz+l2s_BeNGy-(XNh3=))bqTENMwh zNWNwioJtplp`R2Df5XRNfAQJ%mtL$K8R&{lVncb00ZDCyWqY;GXM4qGduz^TyKjiJ zJYUDMz1HkQYKtQ+#%-^~`K*3sAq`8DhKIJdhFoTP3mwLrjJDUi`iiW7ucO&}IX`ZD zbKKH6-)m#pWzbCl=P(F{q?X?NnGhaftqaZ^loXU z{Lc0bFC5kiy+8M&S#G)4Du=S4wMH|ktx2^uKma`MYBwFzh+A)e<1w2C6}EI===o}R zN^$|oeq(Gpm7No2&W=$mX{4r5G>%+gWy>#V)lVK=P`c#eu!rg~Z|#8o>q~K4H|roj zpWu(Ul9&JH@yd?n{fE5(6Fo!bclLuAL$-hN^3R|AWpSXceexE)da)4wHHTKdi@!QM zrrHdMr;Ns@Iq|CL=*@ad=z7DOmdNLHRkw20zKkaf#!JN!Aj;&r-%tZZXK)jL+W0KB zDelTuUu)?6D32qZ*Ni}wi}Fxa658jXx|fs%MQ%PXNUibNES0rGcLe9A zTSZ*HthiVJv0XR60aH)-N;C171bP0wA041_*I?HO{~iy?cQC{;|_Lvvd?8jP-JjpBda}Lt#X6v2rD zZP3u@hL|*_x|>~36KJ#0-O^SFSc?#Am5{P^+FwDEZ!PR(g&;N)d#TRf0RxyT!_aO6 z^~d+|v1e7yMnvc?&UZ;ySrRi*@*+-o2K0_CnJDP12K|&IYeQnN#ny16_0$hBdEt#? z^y2o4q=c>!6EM0=Ca#1z{&{bila-N?(WY-dP{;nqpc=NefR1wyRje<|MaPMBT`?iv zKg7Z&5~LZUXq+c$N7{sKY%o}JWV>ywVpAH$Dm}%DrK(25F3oc^p*wvhO8Cc$mL4&& z#w^w9+szF(OKsQtre*QSkf$|(shb)51V*oG@n~i=KI31w3yNOAdp(tdaXb|kLe)hZ z3R)3A+LzufL{y}@;N~7*5JVYYzCn?-zi{=*A)MfLc1q2Fe#^l=snzc@ zK5NlNRSyRbBl?eDnmgfe3?pRg@+STq>+D}+_JxQgCo?r>=_bO#q%7^B^kp%P*P}!Y zRXYjMVF|*-ycxHf{gkgrlV}yuy)mZhw(Ux*LiKu6kV;!Ea&SD~wyJtF-q3wgq3eyn z8rRlP$<{~qHy-m}cM8|se7;v$8;gRgZ54#`rZJJOsXuL(lD;;(* z1@2z~Z0g%QA|BBo?LFe(W$68`>h)xJpZ4~M5oyNEp-FIVjMG4|#Pmy43iBODoSXxf z$kRwDDTcYi;m6Yn!&I)QY!70URd6l-++sG&K?sFhu&sLV<7r?s(l&qn<5EgwZJgVH z40S(EXqJ4OPi-RW2?o?dC}DcGdTNZTDXs-*av`dEbNNGmX_5}x)et=ao3Si4X|K6U zDNN$3D=~zIpr+y6B-*R>NU`-!9iKJSMhJZ*K6~}!7_G3x z(&8A)plgquSzMaF^U8Wklz~${zkd`48)oLSafo`*WkGKIwOy|T3=!)x6TXoxJwEXi z5UT_FAl(VIz+b#o!HqoA@m{N)%8A-;Ub+;i%m}kJSoz>`Hg?d+ZOl}EyT?UxV;SZU z?^Yq&5iP=nt8iOj<;oUasUa?$Pudc;DVg~+nUv;S|JDVE>wwoTsY$tSejKe+sa@jp zd^Fs;mX!CXiHKV`_T-uSgE8%<*}=lUE?gJ zpfGZuiLvh|Z&CFo)s_wVbvZ6PgKA81UFY;b{3kY(+}E_ft@_n_OPVc$fIHu4$9 zP2{3pbPa92uDZ`<{f%K9P+dsArC|TA&@>~Dxdb)II8Xfq#}`&C-t$Yvq>`<7T=92v zE$x`K&?S!sG*%3gwMz_@>aD_PBkKbfA>uv5cgmT42A)R_VchUxk)i#mSe=}^cDNu8 z|Ik>EIyFPr$s}6u^>z)l$#HmRmWSuUg7iZ(Sc^}ttaNYo_FlzWBfb7FLym{2sGLBa zx?UH9tQ>2+#3v!aGasvHk=6mvY`8KX`KsW$Ep{Om>B?&|+s`#SMEuIrA$5yX|3lg4 z?pDqE+@y27s@)W1Wyp1Ovs7gJC-%WnE;U!v_aW&j6^=_98QI&t5%VTZx};AShUQpj zS>wWu!aGYBd*FGsxz0FC=v0+YTO@7MYay#ni==T-=fz2R^%fwc$eHzq zH%s*}o=$h(q+nL`|StNLcQ+3oPmxoEOTA2 zP$int{o}w2pO{r|n2FwU)<@vKGYTNOpAbRWZ5`D)u{o_EQrAU`FkJZ-<+5!xh1Q1A zxqRG`HgL0cvSE^(QQsn@nGd01b)hVAQWHc*oGhcwm=jl=*Hq};S#{RNSn2H%5<$mA zCDvycj;yg$#)nbVA0A(1|>h~ z0bJ;9hiA@>y{L}0+8oia(HFh)(|8RTM$1y_@Z&{FC;ZKY804F~)jusa52+}rd2s8W zm7G>Dnk>pshJRad8-E*!Xdi+vJ_vR7Q&}cQD>3Lx)Gg5x zvfRVWp=e;t2ticXA!fUN#pwR!51&JI-oSK=7h~94DL|B*N}>?Ay`iihUwOr3jKim- z3$|CWhnVyUhmqBLa#$p!VY#;U_Z)7_(K~+nI5`w0tbkM!TOi9PG^jaWK*K_xpCB^$wDG5{D1f-@L#rf;!v`+K-R3ufsU@VvgJ< zH_^yQo`S5Lg;DQh{FfIOQ+-ajgFrz@hEiMp^$vR4-X;tJ^y6*;z1dcTh$jh!Z8rjw z8{z+Ie*;*ZA?8SHK^A&(aq+8<0r;MHtL=#B=dZp1k|!0}AlRm7A7g7tGGN zeFKRm8u3)n+6qdHI|~-GIdY7Z8eqZ2R`|>3sS2}rS zvhO9K&mSiPPFLBcD@1aX;KS{=plqGh{(0D;-DS&=!7g(cEJ%W^CS}-ldWzKr#NHnP zlA!G18(E7A|Nl~`e*S+*D!}&CxBvR;qxT=pa&mGqY`ctX$?uXOe^?7JaskJQTWdL> zKYES%->g<9-oCZ1?Xxwo_4BksZnrc7u6Kr$aWL5!Rm5XJJiB%Xz^TWGrgSna{f(2emIMmNSsAK(BIFL5|csqhpVb(U#@)DZV*AEn<3h_(b&sUupfc`7f}jUt9w!2(uHlw%klM3Z6i_N_o#4ZKJMGfC8;zXx zSzB&x4#>rIvkmx|++wq_(ZD18?Zhsdfif*_{?Mdao$`P^9PFUay<4Yibt8;bhi2%i zIgeN>dPbVqu^Ec9ah@wHn@~QB->cl{289-Cg9)@{(wL2Ha=f*b@ondf8Fe6hrU6c4 z;IxDFZg@8qhU7jGD|3}HZKk<8c-WI!T6Dgi%KDG5w40ATQ4K# zJI*5-fVs}>3ef2~>{Mu2O{1B5r@Wf`D;=2NI69TyBm^?ok%@?}O#$Xe!9svP&~gz( ziOq$!hNj1KsntAj#PS~v>JcP|WY=JF8`vB=q5b)oQEGR}jjgV^$;lpY_GJZdJD_{( zVJ*CX;IunmsNcUL^c8`xuxnT&?xDJt0Vp*ysRcBJ{@LgsUk+K6m11c@#kq=^HidyM ztuHJU@pLv>8igT6aK;6u-iVi~B)~Q&)qKj{<4gmlj;tO-Y@IxmSEu{X^9blL$R4}1 zO~VY>kaN8 z4&72d%YElc%{ted7j~{oAh7P_RCy7=+S(GYte{-sL-Y^hfcDH8X2*zR8fl;fz8JpB z$1^KHvX8&ROFEoTs=ab(i~B_~r>xOp7tK;_un?rsG;2Qk>`Y8Kh#VffOsE1z@oFs7 zF^VDVl9qbp2y)Ht7yFr*L>B6qLx9utnAko|x9D@l5xsS6{qtJVUj{eb6Kv1!Fl@)) z0`1&l1Sbos&6QUmTgQt&vzDcr+ZiCqjp>KfYg&efpRXmk&a8Fb15ssp_^z+l#{vB( zc=BnPlZVM0>4JZHK#JR6LXKc%G+ltyQ&_6y^{c7y&+BMLA7c{J^eP(e6C;C$cYlC} zWv@_)brF1o;Uuf7-W`0$C~44d^R&RZSWKxjrs>weZ0=H$ycp*0}D z%JPq6s|$l(L~af#`zry98~(To}sXUogt zUg0jxa*us_wyz0cycACVug`Z1qLlbcZROoq6U1spKjjWh$ik2wicSsx_GA=z(&v^H zr?hqk(k(8!(y9=B)m;(yT3zH%Mapqu6ag!#65jllP3H@)#);()o5R2E;wj={lz2Ka zx8S0omE?C`f0oy|FoOIaP_oM08)oP2rj5*yKF5?$A;w%#R^Os>ak(j#;SWr@8b66+ zD}0sMacKTlIlp|P9z^@0M2<7VsNpArJb+ItanrhRa0Nz`)|90 zia^Zx`7@APFK_BTIK!Vh0TptVANT|B*3hb0LnouJH0Dqh&8-Lo%B{amx^Ff8FS8v4 zC%5v8z`2o}$2$&1E%f>&1s#)JBHbF7n3AGEngX8j(jTKr!P*q(0UrAwkkPJhVqd1l zf+FD2U0UGIaw^R2XN+GKnjQvSXV7vf%qRPymw+6}8@xnmJ?-v1Q3YpO>oqsa z>$XxwXRoCg+>wxR_wv4@3Ve*Io2HpcLv+GqgC%b#`dBjhob@|xuGAK0f_~Otx~eU5SsrFLkaNl9guHkRwmnV5Wx6}J;jOpU(NSmXcOm6=!}6tq)P)`? zssI=WK1P7q&7qM-*a)=B*nD7i@CD`59c)W^N^U9i83!^XO+`>6 z6D^aP<)L@(&oRDe5{6h?%kuJsS5-+lJ)g-@1K~uyd3;vl>MYKE57!tjbo+gvpg4e?Dch=i5}8A_WGapaVTGAeyPp#(q1)dFunXlZ13 z!cNrA5XKMsJS`7d@o-1>Qw*sBh$0XbzFC4+8Sop;>liFPU@Jd)Y^zM}D#O#{v&oXH z?*gCnm@VGON2kVpx!!RwJ$8clUBadx9_z2|ADA<~s7w3oxh$VX>}i0mI6x;4cviYO zu12&Wj$Se=+icDG*|$dP{rM)Zj(!n>ly}tV*yqI{7rqg63YFz^)mg=j06sSdQrdk{ z)@UeIszd$0lv) zHN&s+G7gYij^Dw#Cq9b`^mKl+R2+b^Qb(m{3cC!)a^mu;^@U3&8INf z-jM{>`PT+Z0plxlk+r(VrV$rUST0{0KV16eaj^>pb0dI2TW`X8T!y?R*$h6|u-dUB zt+3MD3)02$Xm~K`U_c2?I-h%cO>AMtrK4xLZ%KpNsE?ZpVAqP<4qoF!N9@k-Yk_OC zRSVsT{rqUE?}h&z0AZQk)0eV7E*~N9%p68uaU%Mba+!>HjN)eTVW9;z&sUC+_acyn z8Rm;8!sa6a2H@?W4^mxl+5M&jv1o!?sJ6VDVZyqxYgA$nIgDA$1Me@5!AfmRvznFs z)ab(~hKa^K2Gs5VXx}T_i$Hi^IUWa{ck;t~Kod2*A1AA7`-A6?uYdwdfE|)U8EB#5 zLCpO@iMb~MAOrs%MK{6!&V;%$stmA<>B4P(RNY`)ga$S_=SgOIo zwhKU>8)2s~SihI`{pb#0{k3K)qurbe#-c>K)f*K0ifm+HkD$d$OW`BPCiRKZsjb>g z&tS3O_%1-C&nVm#Ij20L013Wb^!yIJvw6=QuI+z|C4`rwr-2jLKR+t{kG)_A;LC#^ zwxXY(#r;DlBQ{XN_Jgl=#{&Cc( zd-v?Z+u>cY(`mwi) z*yTchgNj`$lx%Jk#PPed`2|OQl`iCPMG@L=ZA1=EWcc>5`^uWyKZq^L*no|dl$0bI zfhhf0qTTUtb9~#|34eZqiSu8pG;;X0#+lyKR0W<@k_AQ_i6@tS{9pA1fJ>{9&-|E? zw>)v4;!Xb-FzA;cC^!c!@z=2gO1LGjpMqL`ZH|lpf9;$CI{tfD>wmjRdOjPlWIHQ*;!dcz}|CKEXG34`qO4jk*gM zGC_vl|3F%Nc|oI*q8h0T^rDBP$nrjga=)jt zvxlpt_{q}J5q7)LeX2 z-IC11GsiU%NC20Nd|JBM|X%#v&Qd z+;Fnn^wN9cmV?SIxyv&Z#=({accwtc3qrIwr}>5jKu1xTUdwj1E%+ZJ7)vY0dk6Eq z8*y(O;1vb&93&kQFe1c@R(K7HEnV+nUlFbX5kJ@dVx~J+CiDt8+2U|n=qY_lQwA3> z*~`1Tm9v1#gb&CFK|1)OxOL-ovVvbRWEAe(w~yenGz80K08aCGCr4drLnFciUB9!{ zE&y4aCxe7Z5+ZMN&_io_^heFo3D<9M&8_#x88U0@&pkebll6J`zC^-!Xb5m8FN1;F>20A4O_DAf z%QMA3b0Pj+S@~UKFD#+X)auHb(z(g)rNfwLf0{1w@7G~;rwuOfvq05LLdh;J2NVKg zrdOJ*+}3w)8aI@10H?IL%dDo=jMh?}5Fa&Hw#x^~-J>huCJ`B$@T0Uj?Jt>}EVKl( zwW*5r=%@0fn3tXJ5wC4ous5*BS56ltoOpNQjP3bkqU8!$3#=H~tYl3$H|j|<)`R(c zLSiG6zO(;!77gpfaBX#`LwK18;rL=hK@7H5CC0EjZ!{IDKt2q1tqY*E@OTl3WOGQM z-y2NK!o#I}1B1qi$tvA@i{}xd>e3m5r&soGtkD$`qH`*fPqW)O$A*U(elhzB$(=m6+bQ)_;I|MR~$-)f?P{_)5{2j}eQx;8Iy{EH_cx)<78 zhQC}^UhSJdOii4m ztC_rNZL!L>RAreuvR07uAKHC*Wzb!-+jBFKeTidj`nrIOOU{xj)nhb7sztOmH2X5j~M{Qd+wq@4zc5|^N~}0=|52I8w7T1 zP4D>zBYBge9Q1BK2em_3Bu?N)IEU9>6dW{O-Xq>5S}BTDi}@B~Hrfv@N1Mh)mTpbw zys@d`_2MqP70klY;MAxD>+*I>?L&i)4sdVcuc5x-Oy4X8-)YFQEmyj0o{h7C zZeeXpT2CE)jUr7W;ziz5^ALZQIRU3R;qYk5w^yA<&`9$$yJ)BTAz_=|f`@DN6l}K3 z7GC19fVO2;i-j|JoRl0VeO*TdxR;jNd1i#4YwQ0Y1>r}=MQ>IaY+P|iIS^61OEn~Xnx6;qP_{boxD2WlR>izzV=We#XE9Gz=1uWh|q3!&=M_KLWvM!O-&1UN<@xPS)) zCp_JJXr}Zd8-xa_dJo^(UX-g>lZ8TYG0R;A7*ZtAf9vbI`24cdyMkvX3}V>aY?trT z4oz;u!6H>swv;24uGe>9YxqZD2;MBc>oWOV;@j1~p(rIa{Y3u8s#hqTSgD;(EE#zt zC>VwPH%$6;j9mP$?sRj>AmA0H-y8QgUWQRpALKWnzMotIn3VV>-i9$2-eS1R>ZY8V zaC1_m$v&#bf`5+-e;0#|r?bDW3OhT>DNtHq{}9AN`QNDf)g%F7zq=tyV1UK%XoG9TxUtAu4%~Yk|VelgIJL?UH^bP zX81wDsesW7jVkr~*yIZj;XDJ$80hci)=nYf+1PPOJq5X_jWT&b_8c3n^^X2@L3CVB z)B|RT2h;Yau6Rev#8fwQ+-AyoAHo{-{E9I0;LR$jQVm@3VXDU`cGm_t1<~n%Dj4s? zM(vUpEjOVkmDZ{D0O3G=wEkwaQ8Sty?*y~kWZ8gtl=jM4h?GY6WBIec2o>?&qY~*bl-^(`q>5qPU;3^RrSUojw4+?Go?(>n zI@;iwCiD#i*FQxGAic+pey?1kLO#ABsUH#hyW#!dJo+>%oBNHyarkscXDhuz!ShFz zx$)={UDiER-}d~r2FBlS`E|h=#V@tzDk4o_k|}C$3Os3$Za!mE4$L>Wv)p96P7)(( z1iC;Y};*Mv%J6{*~K69$MmSFuHE0YV}WjjJz+gMYViD6U51E6b?+NNS`HzM?^b%75$P_A zR;893mt~LoaNVOqyvsKKc6oxZAN&`?=7du({N4K(kZCM~!t)7YE|j`lE*QubMf@@1esw_WX7xWP)N*Xn7Wi3rE(8J0Ls zF2txAEQjantBf{OZy9ghuB#f|Gy0VwO6!FC=dt6XOj?rfpTFpgQt&XzH$Q>2i|@`U z8;q`=PBKq5-&{RV>omHy%JglcN~?GEIj%bOp^h6G*#_fns3~M0yuQq`;iqwX0)aoR z=5Bzp@vyMS<8|f^^JQqW7ri0oF--`s|MWSy+RxkxP5e~wxwM(BRB$7p=>owVIx2Uh z)*VFRx4yp?ZVgjMkt`)|!Itbrkz<{a*74}#VX0JNO(ij(c|31?xU@v9URjyTS4Wk# z$}&u%%o1uFq44#p661ze*9I{Im$<%H*^H+0=SXc*{KcvI}9a z<2<-R!xv$D&rwz(@`VYo5Ob(?xZbtfmu-s*#gKm>~1l}Z$D$zN$@|Xro=)ASgGEP%>!6P?mYE=BW ziv9(4+ot0&(Pi{uOQgiABcortVw}dX-{8F*^A+w#vH*`4`^z3IU|83^RS1~kY(~`3 z$p=7~$zh*{eWYi)A80)-*~ znLX5Nxwg1$4o;*vD(#3Gyjnlpk#)%u09Cf=FiLk9+vSx5&6#(HGn|2g{BzY zYetrH5DxU_^ae)9d5vKKfINn*S5#A@E(YD-$NKFf*HtbY)Kz}|4Zf*3ix60T&$`}J z@^+5lOQqvC*Y-fM;k`?HN0oU=4LReD5DTl{!~#etH%0s?Y~OAPOFBTCVvvG#bpKYj!ii8^aWR|o zKbD}#g~4u)YaVf1Dw-N44tG|jYiCy9BLD~q9BKl3D$1@w9q@+>RuFykZ$RA zx#L`^Nkx%hY3LyiYu(p)wd$GUx(Ag~7W<#BHFsD-C;d;3Cm$?We_oojwpV!^wVWZv zFZyYXtft3f;7V6G=!0&w`hiQ3*0%+=O9{_tg^+5CbRON7XEQ~#wVX90-_~A-ow)x- zF`_r&QY~`I-+czj8DDFsuTMD-AV_BG1&h&Fd7)Q1{Yrvf(kD=Nt9&p#&E5hhbW2(L zx*{vn9p5FtiM~}o5c*{fSs7iKc;+A4Yi&p5-K*SkMS?EOMoufJJrsK0XPamm8z!XI zw(y2y#r(XuT@v1(meeyDJP57h_fQsE?i-x`ZG?$v9NXHJ=egh9&u-4voo;@4)kL+& z;K679hGsp(474fBMYm7swiWBO86oobAKvoDA)_b74w232nliYXrq~dJT+`B=7pz3U zPU-07S^0+DHha&$o>Zdu1g+rQNUK(cyB~DiXx2oI!;3*(9+%lWXImeYPI?e;a$UF!}a%wy8}r zA=v5u$61=?aC+;yUc=f!AiX-baEr7M6C;b<=m_KL8Qcl79ZHbr8ARe7E`Nt&SWLD5tk%;&o;pYth z|LZ{jYkpJbzZnui9G zA)n?&F7wDgS@XMs`;Ujd}Viectm56@@+FVSUS>(A7u6BuE#RNMft`dUpSf<+i99hF6j6*J;%`h6?I?b0m z_5*A=Xomq!j=^BniS&M?Lc#o;#@^7f1#JC#Yiw1;9i69yHyw!EykMuy zSfxJSv-GN#en9I9EkvPzO$gRdoktfhh&TD_i_|+vMa8yDP4ZenYaJ!653(4fT?UOe z(X>$SA@%$yHih(}fPw~Yq!nZ20e20nVAl(^kLPp7esJZfouhjEfgBJPVzBjE8S9}^ zwT7xMB5bUn^PyO)6Qgt|u2E2&g8Ix%_#iz4)3xhp`kXtFPUq>z|6BOEv?KB>ukr?fRQ06qB$5zptQ zY4v1-AmeC|AP?i99(_d;m*?EFC!yxmU+W0Q|KL)xy>Q+6Rq3cXWxbsnHnYF)EQ!i16DM$f`_g-oD`~Zw>9c7)5>|F*4IDCjEe+b z0-`gxfaR&^fI$M@8W*F5Z-82MW{U_H(=p)YIyei_=Ty{s>Yxpedq40pTZm)ShcoQ( zaUIA>hk(#*oiwARTzp=l3HbT0Q9dINo5<&^!l{2Ujd-OSke@;iK<8X2U!k z)RuLwTAocN2`kr&>9;cUm_sM0y}^BOkXXqOL=m(;MWwa**?UY9+=?)>G139oWlfMK zQG4>`Y83nUS?8~R!A_XMXNOT}T7z@Q=$PTuxDG3k<~9kL`Jz{mh=)WTnwhT>e!aDx z<2XpuRX3gAc&GIq3~9@_{dgpdb@5dkP?fq3+*B)Ny&gJ(DJL4&Q?_s34#`NxP-Qp*Q&3xob4l+NpX0y>px z>Dk`GTZLyFaz+|Wx5}5F7$Ib9e!`-N*0$5x$ zsT)b^$=vTO8E}Zs6PDZD6Xa#ihrxcwUI+dHj+V_|0zXY=IRrTAm|}ahQ~c0s6sN;k zUS2QLIdfh?zUPgwDsd}AVqis-f?AYXhNp~9MJ2t)He(!Ievi2ltVKG;r}XxNCLOgd zX;XlZm~N_VV32v>SIOq8w@E~)EV0ze_A2|UK-qw*tx6og$rc=t#H_*PDwG;OMKk!Y z%d$vXE5O=<>V(_v_zd4)i$3JAroiEI{!8YeF>JsvX6QgaXt4MTY)dKjdR(kUuH@Z~ zjVuy|jK+~BjcZ4~<{H zmL8h4{)pLWnr-R2R@|MX7Rl)V)}6cDJL!&}0tHU&Bm?l{Yv5oBINu9;w>New5noEi zxeQ@)Nv@*1Gi_~NMwwmD->Nl@!_b=)t{dj>I@y*x&v*cCh)c_ zj#!=~?mPV{_G$GlHyQpMwP%j2E>yykka~nYcs9=aLk*oth}6;t6IJn_-MS|1I4N^t ztZ&GM<cX-QDXuD2%mM^_-9m zo@6Ao{8$DWDmq=VuiF086C<>M^Jcs6iMURe8l;!Po2#>5QMD>p*BT(nK5MCyhgh8I zKW=ftG*6&iIW5#Qb-)3M-+~PU9cRk*AwM8kaLDP&Z^2#!XZ3yw*7X!du}T8=b9&Bu z+at1g$lGkT!eQn($oBiGZd`G=H(oomIX@`kvpvbOH8nd>-m#q?x90S-I>c?Hi%=P9 z>+)jdn-XzG73k|?un07O}J>eG0rg#i;Q5y_k(;q|EWu=QM@ykS!_q`9c$# zuFP$iY%8dbZ}+VX>EK2{%R_3ZQEeLhmd{gL8#lYD%(mtcaJGG7ukH4HPR`~=Tt}v! zN`hj3{Gi%W_E;q%9@=St;Nb4GZ5V8#xsAcNwYqcrbZOI3+WF;qN#%J@gZ>87Y^A_i zHlc<_SY(~@ba`SUOtBn)YA7LcnSRQGsZ6$~As@BOaw!YVU2Xd%A=LW2D1>U_1niKr z)b-7sg5-~7GT z^PcNm=RD{5597?27{O&;Hyl&_b5nC@5Sz*f`J?A6QG$^ z@TPi(!|Zr9{u*`ZY4f`*xeuFs_^_E(RWmNa@}meyL)0{Mpm;xtJI{2kA0<*j=DnZf zJ(Dql0I_#%qAEr;VM(zU@;|h0W`4KBwdT+x{Lp;M;vy(J#5Ky(O^g$s(EiYqD=Z z)eBy3)5wiUHD(0GBtY8K%E}z&b2;d1)Y!? zux|%Z-2M7Jq=(Ed)m|Sb)R+eWY|_n1Go7CTdF~|eAT|=y375@>_Nm*)p>Efyu|#fvsaAXy<%X5jNm zzS73FU|&>5n`=(T|JsN50G_NZ)4ISO%+=24GtkFrP{B;IG4rA?Rv_+Z9iSgl%X4B{ zC9%HgM7F~Q)En8}0?fwe^w5f#4o_phCloOPJ&_H^`XMLsm1u|Uj=~pG3`K*lx$^jL zs5>qK`if~(Rj02vbymQH2LUPO=u->UaX1#E(Tq?(%IhYTdR5(lB>sw|l~k&P;+>f-VtJI!Bl1`tFO%IX(P(yomRt9N9>$w>dSY z17W}#02{0Hkgt+MiwTZ?{c7gA`sRM4M?$Kvs{OM|Y)$(~*ZPuuJB>?UsjY9BluPe+ zYLA31b$XC@&Ds0VC^x-kE~?II4P z)9|GLZ2x9$`F*AdfY<<3niM#=gVKy^?zenBN2mj#caC`R#6^JtTRIylFR%-gRh$dw zIcBwAFl{e+th83UFg5O{O?~SlKCmes@A74=$R{2OH+{JmWcuI@U?~aw6r9#@PIAy6 zlD`M#L^9%g*Nj~ZFB5O$xarC87&wQNZp0K6TPQIBo&Es}xIGL%0GXq?Nm*xF=DkZ@ zw|qA=)lUzI1JNjTW#D`mIPV|kTW_#7zmm&T7Rty`nelM;G%{9$UMbFq@H-f(O)3LCs=%p4V(5OD9M7~ql15;Kf`E+XT3o;Tk*nyFWY3UEwUXtC`ZvQY*7LF+7! z)HeHVb$8d%Mt#!)bCs}zn_l7w^ng6dlO1>?McJh}otzco)<)WHL`Vg0^M|25+^zxpP{K%%Z0Cj(o*M>;5-`7$%3>(q(PO7&p6AmWcyvmFiy= z*G1@Mu|AQB-HJV$kD-Ex`taI?xGO_>^wKqo3do)?Al%JGQ419XRpWDqn#^n!JyiQg z8rAMU;Xvjm`Af(Wbi$CHX76Q@UE%_6W7srXY;-XTYKEBN!=UVR)OZSnyq=;Ffz#q$ zRJ7Na1B2V{5ofQXN|E0)eG5|#WAS*z-jP&&iZq?*0}n5Q!ED48?vCubkF5YSBLb; z*_ozeX|rDi3VIXl4QPlCxKPTvVKFapZ%<(hw+cJH`QXGxE!x^e>zu>;;!vJ`*4_J< zEwE89zV%*_jKlF($6;W)_W05}+22HTBZp`mLBFt2Fnxg-*nrIAK&#Kkc_SzKaB-$c z=`Ul=jod4VEmBp>~8h%Od-^a;Z~)z0%#vXI(Bk zVGs+|_hlB+Fua?~Rr#R8?s!YXo9phN;F2NN62LI8AMHHXpxk>t$|nX!Cie0p+uQCvE+YaLC zl|GRKKz{pi$433jC=Kh+j%yemS%S?!MKLi(zhh)V>=0D)H95o?2=RCgvE1jMyD5F7 zmR>zApAHQ>tgwfV^j!TL{C!WZuGAOCAUP zQYH7s@Epa@5HK*BLKVt7{uogxqV7*0w;86KV zF)$hLxh#lxTxHDL*ZcPY|;u}){^Ka%`o2m-y%iOar?`XIj zwx+7lgX1`2a)8gGbLBzZ$cWJYP|Efx?lJ0+$*jPtapTFWI3D~dDmczMu;^H?TS6I# zMvxKdmkdNH*x5`(Gd)0uCl&&4dnx%21cb{ChxYPo0Hr7hs2upH-zXvrvIHgs0^rB` zA~7ffk{wNP>qIiKxuRhH42Zlz(dU%|Oo)92{$GCTU@dVl8Il1Jq>Y63(*C~1tAz<6 z35Tl3K)wK%m^TBk+rHH1vXgsV`u7x8VJMh&0@PGN-#$tKB+G~_EJG~-FiSHa zpAWqO<0K}Zz`%~*9s{}n3k&)joTOD_W$kq8dDQuHzf}^%fKY;f&2t5iaZmjWYLB{+ z!+)%YRT*qPu~~|Gu?&?(A}bAQje`v+dV}+{EgY7#3P!5*`!KSL^)~d?Z7!c!$W=r)#&_C9czb){9#u0G*0ic{6#L-b`=G|%b`J2c`e#Bm(Bz8F70BmHq@TzB8Bh8 zZoyy-T=@z(s_{7Ssn*_Ce4ihqA5MNsrVH7$k9TnJXNs0IZgo}9T*)1~FP`mhpC8>= z)~i7IPB$)#oR*x|?RF}lMon_kjadm7b14OFUDH2B#2pMLkQD5kk-OSlc9SkdY!y7; z`?xK%p+grhEjX>=%5I?S0)hDAgz#xbcWqjwXnXtBIQ8Jjjrb(k6Vog`BD(2l(=f%itU zX&FCVP+xqdeyUe@FlHQm$o(X$(W(n4C%sV5vZn@;4F$dZMv6tdTiKtnI4%fpphVf(e^~ z&?ge<2_)=POY7-s;WP7gxK~S7JXE`sVUPDA1SFmS8_?ZUMtrXb#b;U{soqB=SF&f+ zXc4C?s~749h7c|LqWE{)h(>cT!P)#w3euBOZ0 z>A3_FOOb~4t@F_|&%9~!t+K-@Pqe@Chq@%U;hZY(RaS%Y$;K;S=i}YU>+;O>jGIS9 zMDp)K{FO7Lb#NGpnhW?m_YTJAtRTzry3-)2^dI!mqZm?n>Gu+zQ84rd#rysjmvQJ70}E{QRln>(b*~^}xP^&EUA6eY#??SI^U$ zOlRP6T4P~WTr3E}S>L7QLPOU(jd0j!D-X}sF@3kN(aw$_HVOrf3}%9MXX-K_KFWa2 zD~Jv{DNnSBtux72^92QL%R(HT!JfG`n`0H9aBe^i3D_YFk|=T`Zq1cByT2_;Bgv zFv7zxdyuPW9;6#fTvbnC|E1V24RH&8Bm}t{m7OnbYj~O@Rr?Br%IbfWBiGHPXUJ!d zU`q8GNPcNg$fy8-{etR!x!dkME(UCL({ZCMu;1YxDftI=Wy!Az2s?6^uTt!covIi+$3YGaz?}~By3A9F1M#i1L)3(-h zGSNgJB}rA)Tc8dB&EXb3^2wsAZL76kD~!inhX`B`ELEkl5+ItD~G zxg6+}ORwGT0W|I86yYL)Qn^bfpCBSFJ#(V?m>qdBM}0Nd-Q5jgN*zMcNj~)63zr=+ zplkJecY@qBaNn8hm|AW`d(UPo_{eWIUiNynuqlg$<+1U49~Rqnk(n8=INQ|NIo9;A z_tJ4UU+i%da!{P+S@;j8X~@&YkHJGU(>I^Ph3kh=3^w^~-{409kf+Ebd#({SRMu*O z-1`+fqy13dCRS;TAW@}radSKCKUP-mlm+u&9t@JQX)jnRrg$CV%J$Y3az9NfFX*e? zIQKn2PQPsF*;@C;-)Np+vuwR?fL_w)oHFW4@$8R3zgn}+$`51HAAeGx^>&((X^*Y6 zv-mTkGDOl)qOdDIP;4NL$=n3qBCb1J8UO=7fPmyQ7!lupql9AmDuDrrX#t}fTYs~e zl<$EQt447gY#yNHVwqRIM}LOuVfR;V@~eX%_&zo0*zHrcQT=9>s_!nx&im=USHVEq z3SaL6$3U#=q6gu-eoq45X}I&@@oB;&`aQ>z%XIC!h;xlfRefe#{kG>5p%N?fxU6Vm z`6N7q@47}HGK*W`fsT$c6<`K4V_<%2a|~$;EvE>fPc-ukYyNFzCSAP>;xcJ5j0oUG z5vg8#sMM#*u-ya>4&if!Nn^j6M$6-BgY)zf!RqN9wMvbulSV21i}7?_hj@VzDkJ>+ zT>+DsW(Ps>UG9q;{Rv)PT}O$&S6!cb->4AUE4sXteq#x5>qAK7$jp}p;9%_a*Mz(| ziA99hLrH8Bi4+3TrGq$V)&(_smpa}48yOr5XpHvsv(5oWk!1XP1cbrneB$t1@Mnmd z3U-9D-+CS+P_x39-ILo5nQ@U-3{kr8p{jiSrwrjw1b``Jt@^hy=cG8ic&zMTmP`_O(yD1~ZPWm5fZiEQ*SpA} zzE|C)@q5LEJKfhQ4N5{dMK;G|T4)&J$C5w2EqazuVY8kt#}_zy_?Gpw8NFyAf)3<( zbx&0T46_D9I+K6^u=4JoL`T_7RmXM6@&U5lwx| zv!BUM+n2LG2ldhCktTIm^o*?!U4$ib>%^Fk!Zm!zMwT9PY?2kg!0##K>#~U@Qi#1{ z_<#eYIiTV)GN;GQ=u0>h*kLpP0Fzxj?%r8TE{Fl4RA4NTHTWJoIWlK}Dnj6>%R}R#Vonw(Ag~gfS&B-t09d zBC;Oze7r$E>Lxku#`Bj$&yZufhShGFr5`gI9DbrCdM%kWzwscu)q{wX@6LPeWu+{3 zB^tzGz-325<>XEu6U(CK3vzr`!g}9e5!$P|3`jG?5XgS(#Efk*xyZxIy~`KW!pGOl(l!0Xw-Sx?mML2DZVN_n$bw8Jv6G;k@`NKa@7na7$4w?!ADeBy zy-m3M4x=4w_#y#)Z7PT-CP7i_A{Jph{|t^Q`nq0q@vPAjti;9ULO~sgy?0ofE@Vrc znoOw+&f}9D3YJm7m}E_+**v*T$kZ>%FU&~9jDCmj^@Wkhz~5-q%$6QWGoSQE>I+{Q z9v@O7eJSkBbzIxAe%d^Jx=ben#ZZ^gY7Pj?qU|+xj-w)Z&>Hc3f6|*>m6LnrrQiDG z-M}x}PCw#508Z0R%%Wu^H9^6q>zrj1*#Q?W!TYFcaoM`cl~O{Y4UC-v&0zgmG~8~} zGpkQx;TSlroa$nA3TA~v4w*Y6(vo3*A@rlzp8|ChxY->#pS{tLo9^ zoxYF|J_AZSFjCHw-cAzv<|$In&C+hPn;;TfsS6GnRf$8T;Lt_oh)55`K%00HVGh68 zX1&%oefOJ=3JeTtb_c7H4t0)&Y8D*@H;#a}7f}KJo6EU3z7QRoQ+h$4+ev$7D4Uc- z8z4W&P6)~nPg~#x7VG8HEv@2=zUKX#YXY4m#X`@Mp~~`es=l9;qQb7oP7dx85?TW5 z%?Sm8&+wZ;L5Q`K9|a6VfQk?RqK@|_SY+W+IU+D)rz8;_uXMFHd|tj!e0vhl=+~8V z1UiG#YZ(x2DtxW+OeF2npb$O>@0dsXFtFbJ8zkz>0s25N{z9V7$r6aB7CGtdy@lxL z@Lo_ed=o_m=-^%b93Q_|d{EzVL9i5XkJsm{(%^DJ7~ch$$Q6N(yVeE-3YxSzNgks1 z-q{fJy%cuU&y$hqe0N1yxk5%r_})qn#ZY0ShC@derTE8~hBTbWDVOC&5r*$`4sqwY zdhTyzz_ESJr^~ZvhmP!v^PlED*_LVJEk=R1e20{ zq$F*Lg*7N7WDo-$Xx+c<5eN~c;pJ54?)Hv`<+5A%*w2LvA*=eUuvLpmbk7Ct3W14C zaJLPg>-0ptrFxNOxkcTz;+XJw*^$(@@oPe{&}r1dPyDp_+}G8t9bCxoKd*MerDi?O zXB!;&tHvJ50Gg?PLILbP+uku||6t^!Q{^TageGtbDXSA7Db_L%+TPc#g-zmXe(WVe z#XvjbJbd>1n&X4=B1Y9L?#kc4eZx~>d^4l%L8y+g$QBczUEct?;juZwk(^C*5SpNhdL;(D zncIjn;q&FLbDDJa7L3lFKE)-5v(XpKk|Jx5l6WBLR1#4RcuJMC7yGuE(W($tw@r;^ zmwLQrw}TPE;~ha+Cb7o>^rM>a$9$uYZ5+3nRjNF}6{5+>k zNw81->58h9cAxd(en-#vN#UZ^)B?l=1fIh>bbyrwgTEM40w$U@BA^n9`Dm5arbf0gJtvzew1+X2(_QjssqGKYY8EjbfTyueXBKz;%8qQSzRyO{2H%P7i(Z^p!jt*O*=w@;B_A(Pjw~?~kOmndrj+{aGVqSG(Xe3*QT)ZIg^5(Dw3#ek9_2~2_$BQ( zg-LuTX{5{0%uQ?2*MR~G3|tj3qu~6xhxHn->U;<`f={l*(7Ex%_i{kl{!ioPK)1R5O;+(${Q^yIaES&Me>Cj};6PA$(iHogqhAmgtMQmc1P*#Q;2)O-}HT~u0HvQFK4~`=7j0Rde z98ViLq*~%Pu?rQKLt#Nk=tjc}K0QS#@Gcj*%XZ|~Goq4>yV$da;M!+NL_0-|&ol$) zajAvgbMN!?`hT6rMJuW+7<<2mR^1%rZt7?u${SQm`940VV9Hu5ic81SA%K7^&wBXl zrA7vFjvO@62X1PC#}AyYqU%Lop0qh^_FkT6)8EoXwus(;A7s+QHz3eZhCQ>~I6Xvc@Y12{ z7th<7{oGmwq$E9!Ul_Ueem_nTdo&0)@+lJ>OfZCHkp z_!vo3hZS1WT8iKE43)1F9wJv>49jSGC8g?))CAuBS?+b86ogp2j_lvRZQ}PxMM!a* zyWJKlu{aX zdICZ}95bB<4?Ronaf_oI2&HCgT_B(s3#Bd<$9tt7bRwoK4f=$;-d!wVgnA5zL<6?1 z`v>4BRFeuHCPLX$T7k1HHS&JQ$2+N|zHFH9D}K-OkuidLPUrL1J^j+*K}}I1I|0jA zC&b8Y&fz|r@JZ)qZtcj%yJlw!>eJd1R>|Cqh#d%%nFs}b!hRL{6Tg7RAU|z-(;Wn) zLTvpS%Pf4yvBU0()+2ROYu4Twn8IoR;S)aFBQN>gT3_Kb_QKX)1O$bpN<9h8R!>x7 zF}Kc%Mn6e?jbgyvZIx1VlK`)#U@0k zAkT#gQ$9;2uTZ;Fsj$zR;+K*dttuz$@W-lDJ6)=}UJf&f!dt^q;8XS8ZDc?xtZvM> z{Oc?ijvy@*G}vBn$5Qs<&!w$`J&5XS2wZG9rM)2!8ZSN>>ouR5P`z+nnHLvKy?giz zW?g>GMVXF6&|ZLR>KGdBRg*cHA)6HP{0X zc1auj`$78`cxW5^1JtQEE6Z>Kc>md-KEZu{Bs7flVUE$aA2^$u5>_F=I?SqscNv>p zd@flqFMhKl4FS1sROD=FQuv$pe3pxRp64xj*03osS<6VFu+Gh7b0M$*8yLjr%zfuJ zzK3(Tqnu?(i6MkYFpK3kAzV?m=4nf1j)b7biW{g8aLBmFgTv<<03Gv0Ci4F{H>xVQ zw#epk5pAYwW5QCL5g_Y*?ZXa%s^w{oM?_}{`OHCu4{baSmM{a+G(01A*C2s4dwYx+ z?}<*lLA|+34opP4r>}lB$}T3^K*P-5u{3bJP<9lSAxJxjk$|=jx91Io$5Y_cA;D~+ z+}-KLO|S>T+mBqO6E({|l!+hkiKvvkZJrZ5=`7?X=V;DIV)rB2^p^n{3eV+xG!Kbz zjeO?V#AQ-;v)sYL2(>l>WrZ5BNT~;WN(wVeSx}-0J=Kt3$9PL+?lR&JPNpUdh zRYGcT<=q>)-f`vJCysL;f86E`Q9WGXChi@`;}UKAl(-{Vs+YdRLbYCbX)yU4N4IbE zMZ9ZE8gZ`LJ_*vT4(q_!l6`{Nlo?kY6whli0lW6NOb{rasp%@ui@$7ITx?9lzc4SJ zXAKopVLUw#+%F#s3gjS-V#8FcR+Unj;CUR#8XWBUiW}H;fQ#HQ{*DpBX|LV(ER)z9`j(-#QP6_n#DC)z-u4VT-E{i<6G*Hqw5KXvNqA7C$wvWM>i;y zvneb8b}nN82j2c?Z#C?JNW!2)i!sWt(>{l73UGgZ(3(src@kAzz9j*)#(j)~j=gmu z3)+{PMB}1qt^UgkY=A}x;Y9Y&t@MTB7++iN3gc@#2ao-KN5Wj_O-gMnC9N4eFkFRx zeE0`$7S#RM*jhq$z4 zm_p#tH2|#Ak89*F!I*Mi?hQ=XBtFa=0K*g&6|pg~Oi;e<9Uw9QHhJM;0xev%Spqnw zDk(4&5 z&RRi96OumNB%E!eKts>_kleOmu7Cv33w>^Q?NqzebrZSnyLYi~;wgT-G0kdSHEGSL zJdh9@+4Pn;LEMV0fY|d4X}0iqv-m1b1V}w|;C^l)WYO4-6x=SGj9>G`8ui`1t#jL6 z8B@l`3OGoCPJPjnBqYm|&CEB>0FFwSgh;$l%}DAZ7+14ojZL0j88o4dC%Vu-)}mz3 z)FdaL3Z?Q|`S`|0$;>{`THtPhGc6NiQtcFpu&r-z4venZ`1wr_y~p=6L)QD&G6_1g zeotSz50wQav+Fa7coM9EKYpG&yBKEobbT;9V$~#3SmJK3X>NbBS4;^@FhiAGnD?*V z`h^B&&TMlT?CgV&%09Z}B7{tmzeoE11rG70mo@7=Q4Tuv7OGQ8Aj?3tfym6<%z5gd zCiaV~W@&jg&4QU1yc0@mt2Mmg3bA=oNnQphUlWZaM=N35rM`*N7EeE^{voSq-S70# zB9GPQ?*&MWQz=HOlGZT2pHPloJN2oG-Wk7Q=K8cu*rEQ%gI@zCAxWe^Zb&JCGoP)1 zKN;%fra0O9lelQ7As{E;i>B1yJn?3Wg~_&o*HQV_{xz=m4D}f(35x`emetgq^$DwZ z*^|NvRTp!h^u_gZE-Qw0XT>=Bl&5A^ps>w4?+H!%r`~5?6S7gatBSWmZvlID{$LU? z(9U$+aaoVIp3{9dhPVqJH2aBXqWfoc{ntA3smW{?T+_LCRiC}s$@MjKTjC%f7dz^a z!aaZ9Zf%zClgt*yxv)S=lV9&Fj?%`IDV&F^c86b)2k~kB!Hs87kd5w2T4QO~h-anI zPLWWIFgT8ns_4-M9zQZyspf2Ly&7A6v=9zS;!FWD(B#xd$`#mnN#ps?+~U;8c|d34 zV{XP>n#VWs<3GhoQJ7(PAB)x-giz%5NRt(TD1dqk%CwT#xbzKbT}-~CBus7#647~f z1x+lQASC-OOHmTT&vIcI>}*!PT7`EDBD15e;E-Hd=0>VOK9N6&yd48g8HRkAh|8%h zwE0feb7Pb=Q9&~p3Dp(6Y(DVZh?&5x%w%&l+~}FNbW{V^vKXd@T3<{dLbaQ>@&u7k z6SmcDU!jm+G#LFw1AC2PpeQ=BX#dG2|GvFvyPNrP>Tn^-zcpS4Z0UIL2nrc2v8q>9Khb$a6aO~BkwxpC1rwLYr zLp!rYj&8CxwD##w-nZ4FdLo!uUdMH*smq8cb5z?-H3sL|wNj-G`kEGtW$MGCa5n$QvCb1eIo-~NyJ8N!*J_m8H|p4!SX=2*p3p_Mv{BA znUQBqgJL*yq>&H%W3V&?#OZ`pr{!?P=K1WP*dV1c&vYrz$vM@G@F}&Es{t$cZRJyB zO~k?t|Fg9z6))`Kv;2xyj}q!xUqI?qU+*YMRdvnSY49;;!9yo?bl3Z}Hk1s&p;uFT zo~MqID!~F8qo`sjDsNTp8NI?HvVSR(?67b$3X2UY%KYp%*droV6i==w59~%&sc2QN zNjWv>BtTQ*oYkiBaHQvwt^>m+uSH&fkxZ|a z8M6UsjW@P$zboR=`hou7MRIiZ^4S zEk^g-c3n{eCbHQHM?VKls^B6+|JXCcX{H{1uN4lRdhUOig@0MK|7J7vZ*$tngcww3 zo2+pj2a1A|XYr*f+LiVN6^hmF$`hheD(uvRoEm>yS3tcd_*fNC5kw;gUQTY{SfDA2 zn!F?=O8&O=E5b-Gizzd5OotND&=tS7_i0Fo{@rJLY5&Vm z!>BAu9uxNe+qffEiuFn;X0mx*Dl{TP-u&YR_(MRGY2M|n<>wQV+x%1GC!HU|Cj*a# z4P}E4b0c{v&&>5NLOmZ;nN0v)a_IREyzM#&Wz#m!;Ac(*;BVYe{CiT}!pI8vHwEg+ z;cqdYfh%` z$|wd%xd@v=29?*Jv684Wm53|B+y;}`<#vo2$wVJt%QVSIJ+1oFN)N!Pu}ZznM2!lFw)nKzfoiQ=))o}A(OsV#@k{b%+gSxRWqbOV!{)QsQ@5Or2oA;=9Sv-@w7>GvS zp2*g1{0Ad{)kQ!o4=B#V=_GZ~-?lqdzrjmZU;_fr&Rl+$_5J1>10f6vCJ*M93b_p>vH|0W?kvx<3A&OI-`pj}>|Dv9ySmuVjYnc@ti^BaZlV zN>W!EBsE08lFZHw@YEMx4x?aN5Ai3Qu8S#ynJLJ5l-bNiyCh|1A5+9J^N5WqI{$}6 zJ_9;MT_#Kw)X$f58!aRx3jP*lpetAWe?da`75|f001?+Z%j1~*xbwT4JMF_!U;kQ{ zl*GY5JUfFxbyQ9C|Nmc*hCmIO7bI9u)me3E_6kWC@YuvZT;oxYIbVL$xkyj9^zX5N z+Dh-ee`%5bgXrP^qMrSqhb{l_9=s+4!frxe^5T~DCjiyo*ne!!?R03bAlgsE!26J? zPqg`{`*6 zT}y29y{bBZLa5X~isL72{@d2vTOE;t5|__guBSUcjUohoY~!~2v#t)dsA(9m)h{$( ziH&C2PPvcXz!zEJO<27i5m&+H#1!vQ2SSu(*OeHG!TSP$Y(xA%BKif@CNGx@d%#Ad z_G(|bTdv`|Stzxk_Gh4f;ox`wLV?iUN@kT^Zi;+VJXa@nJk%>ACb<9saaQ?+%ffwX z2~@?({uwR?CGl-s)N}Qd-GVSlI04YNG!DTr;j^f&ZL!%6LNR=504GBm^bn!KN;Q&{ zHuvc1@Z|oP<98UHu}ytL8;I!eLJc{WI~^1mHXiiGO}Y=u5egcX6XtN6kP}`B4B>SPrw{#d`nBhuz}u##OJ!g4x1|Ra+P11JxD@AT9y8`kN3gI6jGgQ zwngkN-n)%;^6yzU64ok=yAsD$z@-yJr)>Qc%CXr5gqHtkbl?`~r$)k>4CwO&sEP4e zn8vQWb2y_)=@&(yTmz9*u?ClxKM4sDSNZ2De8_WK|Q-JZaJB?q>pSb~C;rBOJd`N&j&@Rmf zGB;AWe=EgYVIT;fcl+mNO!WO&eyVHFAD<%rXo$wbiU69se}DDg_94v&j$%yIby)fF5tp22 zh4R5Fh&tbHHn639(%K9h1Owy|t_?syV2^|b!VQ*B*)Te1 z8S;aXnN@*T+uE;xMnJ%^=^Ij_XG)_+zv*nvK|o<+EaPIzQlEL{6;QCzV!cpCleVX= zmW`FJby5BG40&F_dZ~aSD_L<&&$uzSs9;%qNCNT6Rj`{B4-s zTK=Nb5iwW05eX?+<>GY6*vH{#llQq*N014I5-g957-)vV`F8?-3heq4<););=Y|#J z`sXG6{6xID&gqM~Qqfen%|YCPES>dV?cM4!$t-sCl*C+wFLqkjvesC#KC8~-Db)w` zkQHl=@fZT<9~WygbJVx&Hp<}Tr*1u+dmes9(gNaFonp}eFNCYL zm$OPUGj(RyO#AT`M) ziD?)qUAil5U-U?Vc8->dk<{VI(V6LSeL(u}ECJRtF*+a=$Cm17oBJ{p+1?5sM%Oga z>)fKk^SbPQ%S1t@5ywIPqfZzq5nWbOB^mt70cS45&NBh|7>?@Cl&ZF!rAqbL&4tY? zlD@WUmOcp_baQ<%u+)S88D!T3BhQ5WkRL9u0 z?VItfYHmq58A{HlMdRrwI|kElM0A5@D#e_Hydg&++BJGrQ$FXLT;t(yTVuVGsD}*d z@e!?271g)Tx$0PP$!WL)qJyoAye#d;HuJMM)a_}xwD54=o9SToqXAfbeV_m$@1|Fn zdud0OBmyx0Rg7K9kPGCj4 zOGV?Yu0rJ7+?KxNcPi69hG+Zaoa$$tM5aRcbV s{yCcanHb34U}1eD`rp#BX=wcP0)|TeObg(MPb@5mq`XA&%h!JY15M~pDgXcg literal 0 HcmV?d00001 diff --git a/docs/images/guiFilterDropdown.png b/docs/images/guiFilterDropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..901771541bbe90736c006d1e0a1147060330e545 GIT binary patch literal 13133 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 KL}n_O`2HUx_BK%f literal 0 HcmV?d00001 diff --git a/docs/images/guiFilterHomework.png b/docs/images/guiFilterHomework.png new file mode 100644 index 0000000000000000000000000000000000000000..d05d4452efb5e169d92ba07958f3eda2558ad722 GIT binary patch literal 13493 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 QkAOgGO4^DA4=vvO4`HUfRR910 literal 0 HcmV?d00001 diff --git a/docs/images/guiMainMenu.png b/docs/images/guiMainMenu.png new file mode 100644 index 0000000000000000000000000000000000000000..f937c83fe8db47c2bc25a50f7f355ef140d360ec GIT binary patch literal 69887 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 literal 0 HcmV?d00001 diff --git a/docs/images/guiTasks.png b/docs/images/guiTasks.png new file mode 100644 index 0000000000000000000000000000000000000000..c390819542645ce8bfef1a792dd2112386c74695 GIT binary patch literal 20217 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 literal 0 HcmV?d00001 From df55c5f15f4b184dab20a8ed2ff182637550b324 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Sat, 30 Oct 2021 20:59:35 +0800 Subject: [PATCH 21/23] Fix grammar --- docs/UserGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 307ea9e7ca6..6318c73e04e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -229,7 +229,7 @@ Edits an existing task in the task list - Edits the task at the specified INDEX. The index refers to the index number shown in the displayed task list. The index must be a positive integer 1,2,3 … - At least one of the optional fields must be provided -- Existing values will be updated to the input values. When editing tags or contacts, the existing tags of the task will be removed i.e adding of tags and contact are not cumulative. +- Existing values will be updated to the input values. When editing tags or contacts, the existing tags of the task will be removed i.e adding of tags and contacts are not cumulative. - You can remove all the task’s tags by typing `t/` without specifying any tags after it. This applies to contacts and `c/` as well. **Example:** @@ -256,7 +256,7 @@ Examples: ### Completing a task: `task done` -Completes an existing task in the task list, or marks it as not done if already done. +Completes an existing task in the task list, or marks it as not done if it is already done. **Format:** @@ -391,7 +391,7 @@ To finish adding a task, click the `Save` button. The task should be added to th ### The Task pane -Each task pane represents one task in the task list. Below are examples of 2 tasks. For your reference, relevant components are numbered from 1-5. +Each task pane represents one task in the task list. Below are examples of 2 tasks. For your reference, relevant components are numbered from 1-6. ![2 task examples](images/guiTasks.png) From 21888a5c767ebe64129553f34f3d6618e406a2a6 Mon Sep 17 00:00:00 2001 From: Koh Jia Xian <39460640+koh-jx@users.noreply.github.com> Date: Mon, 1 Nov 2021 13:59:00 +0800 Subject: [PATCH 22/23] Fix grammar --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 6318c73e04e..80dbf69c82c 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -136,7 +136,7 @@ Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​` - When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative. - You can remove all the person’s tags by typing `t/` without specifying any tags after it. -- If the edited Person's name corresponds to a name of a contact in any task, the corresponding tasks' contact name will be changed accordingly as well. (if applicable) +- If the edited Person's name corresponds to a name of a contact in any task, the corresponding tasks' contacts name will be changed accordingly as well. (if applicable) Examples: From 16d0ad1100df25ac5e6e64bb54f479af3b69cdf6 Mon Sep 17 00:00:00 2001 From: Jeff Sieu Date: Mon, 1 Nov 2021 14:53:28 +0800 Subject: [PATCH 23/23] =?UTF-8?q?Change=20...=20to=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/UserGuide.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 10b9cbee983..1bb47d39f7c 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -207,7 +207,7 @@ Tasks can be filtered by completion status and/or tags. Show only completed task **Format:** -`task list [done/ OR undone/] [t/TAG]...` +`task list [done/ OR undone/] [t/TAG]…` ### Editing a task: `task edit` @@ -215,7 +215,7 @@ Edits an existing task in the task list **Format:** -`task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG] [c/CONTACT]...` +`task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG] [c/CONTACT]…` - Edits the task at the specified INDEX. The index refers to the index number shown in the displayed task list. The index must be a positive integer 1,2,3 … - At least one of the optional fields must be provided @@ -349,16 +349,16 @@ If your changes to the data file makes its format invalid, TaskMaster will disca | Action | Format, Examples | | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |***Address Book Commands*** | -| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]...`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` | +| **Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` | | **List** | `list` | -| **Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]...`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` | +| **Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` | | **Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` | | **Delete** | `delete INDEX`
e.g., `delete 3` | | **Clear** | `clear` | |***Task List Commands*** | | **Task Add** | `task add TITLE [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]` | -| **Task List** | `task list [done/ OR undone/] [t/TAG]...` | -| **Task Edit** | `task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]...`
e.g.,`task edit 1 t/CS2103 Week 6 Quiz` | +| **Task List** | `task list [done/ OR undone/] [t/TAG]…` | +| **Task Edit** | `task edit INDEX [ti/TITLE] [d/DESCRIPTION] [ts/TIMESTAMP] [t/TAG]…`
e.g.,`task edit 1 t/CS2103 Week 6 Quiz` | | **Task Find** | `task find KEYWORD [MORE_KEYWORDS]`| | **Task Delete** | `task delete INDEX`
e.g., `task delete 3` | | **Task Purge** | `task purge` |