From d07ecdbf56ee731da16bf5e04b0131b17aba3f6a Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 13:43:45 +0200 Subject: [PATCH 01/23] First commit, domain model and class diagram --- domain-model.md | 43 +++++++++++++++++++++++++++++++ gleek-VdlCz2dQg2d4mnczqiReLw.png | Bin 0 -> 68329 bytes 2 files changed, 43 insertions(+) create mode 100644 domain-model.md create mode 100644 gleek-VdlCz2dQg2d4mnczqiReLw.png diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..73dbe83c3 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,43 @@ + +Basket Class + +| Method Variables | Methods | Scenario | Output | User Story | +|----------------------------------|-------------------------------|--------------------------------------|------------------------------------------------------------------|------------| +| ArrayList basketContent | addItem(String SKU) | Basket full | Print error, return false | 1, 3 | +| ArrayList inventory | | Basket not full | print cost of item, return true | | +| int totalPrice | | | | | +| int basketSize | removeItem(String SKU) | Basket contains item | remove item from basketContent, return true | 2, 5 | +| | | Basket doesnt' contain item | print error, return false | | +| | | | | | +| | changeBasketSize(int newSize) | newSize is negative number | print error, return false | 4 | +| | | newSize is a positive number | print success, return true | | +| | | | | | +| | checkPrice() | | Prints totalPrice | 6 | +| | | | | | +| | addFilling(String SKU) | SKU corresponds to a bagel in basket | print price of filling
add to basketContent
return true | | +| | | SKU doesn't exist in basket | print error, return false | | + +Product class + +| Method Variables | Methods | Scenario | Output | User stories | +|------------------|--------------|----------|---------------|--------------| +| int SKU | getSKU() | | print SKU | | +| int price | getPrice() | | print price | | +| String name | getName() | | print name | | +| String variant | getVariant() | | print variant | | +| | | | | | +| | | | | | + +The classes Coffee and Filling inherit from the product class, and have no unique variables or methods + +Bagel class + +| Method variables | Methods | Scenario | Output | user story | +|------------------|------------------------|----------------------------------------------------------|------------------------------------------|------------| +| Filling filling | getFilling() | Filling exists | return Filling object | 8 | +| | | Filling doesn't exist | print error, return null | | +| | | | | | +| | addFilling(String SKU) | Bagel already has filling | Print error, return false | | +| | | Bagel doesn't have a filling,
And filling SKU exists | Add filling to bagel object, return true | | +| | | Bagel doesn't have filling, but SKU doesn't exists | print error, return false | | +| | | | | | diff --git a/gleek-VdlCz2dQg2d4mnczqiReLw.png b/gleek-VdlCz2dQg2d4mnczqiReLw.png new file mode 100644 index 0000000000000000000000000000000000000000..79e90ad32bc0cb6e10c77123d359159d38ad2634 GIT binary patch literal 68329 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 Date: Mon, 19 Aug 2024 13:46:43 +0200 Subject: [PATCH 02/23] Created empty classes, first test for additem --- src/main/java/com/booleanuk/core/Bagel.java | 4 ++++ src/main/java/com/booleanuk/core/Basket.java | 4 ++++ src/main/java/com/booleanuk/core/Coffee.java | 4 ++++ src/main/java/com/booleanuk/core/Filling.java | 4 ++++ src/main/java/com/booleanuk/core/Product.java | 4 ++++ .../java/com/booleanuk/core/BasketTest.java | 17 +++++++++++++++++ 6 files changed, 37 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Bagel.java create mode 100644 src/main/java/com/booleanuk/core/Basket.java create mode 100644 src/main/java/com/booleanuk/core/Coffee.java create mode 100644 src/main/java/com/booleanuk/core/Filling.java create mode 100644 src/main/java/com/booleanuk/core/Product.java create mode 100644 src/test/java/com/booleanuk/core/BasketTest.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java new file mode 100644 index 000000000..e74f6c330 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Bagel { +} diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java new file mode 100644 index 000000000..4aab45ed7 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Basket { +} diff --git a/src/main/java/com/booleanuk/core/Coffee.java b/src/main/java/com/booleanuk/core/Coffee.java new file mode 100644 index 000000000..08b04e421 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Coffee.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Coffee { +} diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java new file mode 100644 index 000000000..b25b3ff10 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Filling { +} diff --git a/src/main/java/com/booleanuk/core/Product.java b/src/main/java/com/booleanuk/core/Product.java new file mode 100644 index 000000000..0e06f892e --- /dev/null +++ b/src/main/java/com/booleanuk/core/Product.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Product { +} diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java new file mode 100644 index 000000000..a405e187b --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,17 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BasketTest { + + @Test + void addItemTest(){ + + Basket basket = new Basket(); + + + Assertions.assertTrue(basket.addItem("BGLO")); + + } +} From f2321e9e0653bdd82df844cd91751763cb638233 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 14:30:10 +0200 Subject: [PATCH 03/23] First test addItem GREEN --- src/main/java/com/booleanuk/core/Bagel.java | 15 +++++- src/main/java/com/booleanuk/core/Basket.java | 49 +++++++++++++++++ src/main/java/com/booleanuk/core/Coffee.java | 8 ++- src/main/java/com/booleanuk/core/Filling.java | 9 +++- src/main/java/com/booleanuk/core/Product.java | 54 +++++++++++++++++++ 5 files changed, 132 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index e74f6c330..d897b55fe 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,4 +1,17 @@ package com.booleanuk.core; -public class Bagel { +public class Bagel extends Product { + Filling filling; + + public Bagel (String SKU, double price, String name, String variant){ + super(SKU, price, name, variant); + filling = null; + } + + @Override + public String toString() { + return super.toString()+ + " filling=" + filling + + '}'; + } } diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 4aab45ed7..86b27a0e8 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,4 +1,53 @@ package com.booleanuk.core; +import java.util.ArrayList; + public class Basket { + private ArrayList inventory; + private ArrayList basketContent; + int basketSize; + + public Basket(){ + this.inventory = new ArrayList<>(); + this.basketContent = new ArrayList<>(); + this.basketSize = 3; + inventory.add(new Bagel("BGLO", 0.49d, "Bagel", "Onion")); + inventory.add(new Bagel("BGLP", 0.39d, "Bagel", "Plain")); + inventory.add(new Bagel("BGLE", 0.49d, "Bagel", "Everything")); + inventory.add(new Bagel("BGLS", 0.49d, "Bagel", "Sesame")); + inventory.add(new Coffee("COFB", 0.99d, "Coffee", "Black")); + inventory.add(new Coffee("COFW", 1.19d, "Coffee", "White")); + inventory.add(new Coffee("COFC", 1.29d, "Coffee", "Cappuccino")); + inventory.add(new Coffee("COFL", 1.29d, "Coffee", "Latte")); + inventory.add(new Filling("FILB", 0.12d, "Filling", "Bacon")); + inventory.add(new Filling("FILE", 0.12d, "Filling", "Egg")); + inventory.add(new Filling("FILC", 0.12d, "Filling", "Cheese")); + inventory.add(new Filling("FILX", 0.12d, "Filling", "Cream Cheese")); + inventory.add(new Filling("FILS", 0.12d, "Filling", "Smoked Salmon")); + inventory.add(new Filling("FILH", 0.12d, "Filling", "Ham")); + } + + public Boolean addItem(String SKU){ + if(basketContent.size() >= basketSize){ + System.out.println("Basket full, cannot add more"); + return false; + } + + for (Product p: inventory){ + if (p.getSKU().equals(SKU)){ //Found product in inv, add to basket + if (!(p instanceof Filling)){ + basketContent.add(p); + return true; + }else{ + System.out.println("Cannot buy filling on it's own, add it to a bagel dummy"); + return false; + } + + } + } + + System.out.println("Couldn't find item in inventory"); + return false; + + } } diff --git a/src/main/java/com/booleanuk/core/Coffee.java b/src/main/java/com/booleanuk/core/Coffee.java index 08b04e421..a23d5fb7b 100644 --- a/src/main/java/com/booleanuk/core/Coffee.java +++ b/src/main/java/com/booleanuk/core/Coffee.java @@ -1,4 +1,10 @@ package com.booleanuk.core; -public class Coffee { +public class Coffee extends Product{ + + + public Coffee(String SKU, double price, String name, String variant) { + super(SKU, price, name, variant); + } + } diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java index b25b3ff10..6167aa246 100644 --- a/src/main/java/com/booleanuk/core/Filling.java +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -1,4 +1,11 @@ package com.booleanuk.core; -public class Filling { +public class Filling extends Product{ + + + public Filling(String SKU, double price, String name, String variant) { + super(SKU, price, name, variant); + } + + } diff --git a/src/main/java/com/booleanuk/core/Product.java b/src/main/java/com/booleanuk/core/Product.java index 0e06f892e..7df4c079d 100644 --- a/src/main/java/com/booleanuk/core/Product.java +++ b/src/main/java/com/booleanuk/core/Product.java @@ -1,4 +1,58 @@ package com.booleanuk.core; public class Product { + + private String SKU; + private double price; + private String name; + private String variant; + + public Product(String SKU, double price, String name, String variant) { + this.SKU = SKU; + this.price = price; + this.name = name; + this.variant = variant; + } + + public String getSKU() { + return SKU; + } + + public void setSKU(String SKU) { + this.SKU = SKU; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getVariant() { + return variant; + } + + public void setVariant(String variant) { + this.variant = variant; + } + + @Override + public String toString() { + return "Product{" + + "SKU='" + SKU + '\'' + + ", price=" + price + + ", name='" + name + '\'' + + ", variant='" + variant + '\'' + + '}'; + } } From 98839ce9cb528c63c6dce932f71d142b47b38290 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 14:31:48 +0200 Subject: [PATCH 04/23] RemoveItem test --- src/test/java/com/booleanuk/core/BasketTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index a405e187b..5f1e6bced 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -12,6 +12,13 @@ void addItemTest(){ Assertions.assertTrue(basket.addItem("BGLO")); + } + + @Test removeItemTest(){ + Basket basket = new Basket(); + basket.addItem("BGLO"); + + Assertions.assertTrue(basket.removeItem("BGLO")); } } From b1d79c97bd356493d702b1791c647f76ed4b55e8 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 14:39:59 +0200 Subject: [PATCH 05/23] removeitem test and code --- src/main/java/com/booleanuk/core/Bagel.java | 10 +++++++++- src/main/java/com/booleanuk/core/Basket.java | 12 +++++++++++- src/test/java/com/booleanuk/core/BasketTest.java | 5 ++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index d897b55fe..fdd9f5fb7 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,13 +1,21 @@ package com.booleanuk.core; public class Bagel extends Product { - Filling filling; + private Filling filling; public Bagel (String SKU, double price, String name, String variant){ super(SKU, price, name, variant); filling = null; } + public Filling getFilling() { + return filling; + } + + public void setFilling(Filling filling) { + this.filling = filling; + } + @Override public String toString() { return super.toString()+ diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 86b27a0e8..ee71294c5 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -42,12 +42,22 @@ public Boolean addItem(String SKU){ System.out.println("Cannot buy filling on it's own, add it to a bagel dummy"); return false; } - } } System.out.println("Couldn't find item in inventory"); return false; + } + + public Boolean removeItem(String SKU){ + for (Product p: basketContent){ + if(p.getSKU().equals(SKU)){ + basketContent.remove(p); + return true; + } + } + System.out.println("Couldn't find the item in the basket"); + return false; } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 5f1e6bced..dcf35c872 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -14,11 +14,14 @@ void addItemTest(){ Assertions.assertTrue(basket.addItem("BGLO")); } - @Test removeItemTest(){ + @Test + void removeItemTest(){ Basket basket = new Basket(); basket.addItem("BGLO"); Assertions.assertTrue(basket.removeItem("BGLO")); } + + } From 1ad21fe2d5b4caf29a91b958d775b78e124ef051 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 14:42:16 +0200 Subject: [PATCH 06/23] changeBasketSize test --- src/test/java/com/booleanuk/core/BasketTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index dcf35c872..a2aa7926b 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -12,6 +12,7 @@ void addItemTest(){ Assertions.assertTrue(basket.addItem("BGLO")); + } @Test @@ -23,5 +24,14 @@ void removeItemTest(){ Assertions.assertTrue(basket.removeItem("BGLO")); } + @Test + void changeBasketSizeTest(){ + Basket basket = new Basket(); + basket.addItem("BGLO"); + + + Assertions.assertEquals(basket.changeBasketSize(12)); + + } } From 4bcd0cb4cfae11103d45454684885dd2435c45dd Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 14:48:42 +0200 Subject: [PATCH 07/23] changeBasketSize test and code --- src/main/java/com/booleanuk/core/Basket.java | 15 ++++++++++++++- src/test/java/com/booleanuk/core/BasketTest.java | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index ee71294c5..5b7826d3b 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -5,7 +5,7 @@ public class Basket { private ArrayList inventory; private ArrayList basketContent; - int basketSize; + private int basketSize; public Basket(){ this.inventory = new ArrayList<>(); @@ -60,4 +60,17 @@ public Boolean removeItem(String SKU){ System.out.println("Couldn't find the item in the basket"); return false; } + + public int changeBasketSize(int newSize){ + setBasketSize(newSize); + return newSize; + } + + private int getBasketSize(){ + return this.basketSize; + } + + private void setBasketSize(int newSize){ + this.basketSize = newSize; + } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index a2aa7926b..d787b1bec 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -30,7 +30,7 @@ void changeBasketSizeTest(){ basket.addItem("BGLO"); - Assertions.assertEquals(basket.changeBasketSize(12)); + Assertions.assertEquals(12, basket.changeBasketSize(12)); } From b50236774899c6ba34777212c4984f5901c88adf Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 14:54:05 +0200 Subject: [PATCH 08/23] checkpricetest and code --- src/main/java/com/booleanuk/core/Basket.java | 13 +++++++++++++ src/test/java/com/booleanuk/core/BasketTest.java | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 5b7826d3b..9e66c281b 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -6,11 +6,13 @@ public class Basket { private ArrayList inventory; private ArrayList basketContent; private int basketSize; + private double totalPrice; public Basket(){ this.inventory = new ArrayList<>(); this.basketContent = new ArrayList<>(); this.basketSize = 3; + this.totalPrice = 0; inventory.add(new Bagel("BGLO", 0.49d, "Bagel", "Onion")); inventory.add(new Bagel("BGLP", 0.39d, "Bagel", "Plain")); inventory.add(new Bagel("BGLE", 0.49d, "Bagel", "Everything")); @@ -37,6 +39,8 @@ public Boolean addItem(String SKU){ if (p.getSKU().equals(SKU)){ //Found product in inv, add to basket if (!(p instanceof Filling)){ basketContent.add(p); + totalPrice += p.getPrice(); + return true; }else{ System.out.println("Cannot buy filling on it's own, add it to a bagel dummy"); @@ -53,6 +57,7 @@ public Boolean removeItem(String SKU){ for (Product p: basketContent){ if(p.getSKU().equals(SKU)){ basketContent.remove(p); + totalPrice -= p.getPrice(); return true; } } @@ -73,4 +78,12 @@ private int getBasketSize(){ private void setBasketSize(int newSize){ this.basketSize = newSize; } + + public double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(double totalPrice) { + this.totalPrice = totalPrice; + } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index d787b1bec..efffb2e27 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -31,7 +31,17 @@ void changeBasketSizeTest(){ Assertions.assertEquals(12, basket.changeBasketSize(12)); + } + + @Test + void checkPriceTest(){ + Basket basket = new Basket(); + basket.addItem("BGLO"); + + Assertions.assertEquals(0.49, basket.getTotalPrice()); } + + } From 477308b29106de2351c027baf8a6c46802184951 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 15:03:23 +0200 Subject: [PATCH 09/23] addfilling test --- src/test/java/com/booleanuk/core/BasketTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index efffb2e27..4c0161f6a 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -42,6 +42,16 @@ void checkPriceTest(){ Assertions.assertEquals(0.49, basket.getTotalPrice()); } + @Test + void addFilling(){ + Basket basket = new Basket(); + basket.addItem("BGLO"); + + + Assertions.assertTrue(basket.addFilling("BGLO", "FILS")); + + } + } From c015e5418541d256001b6e9b9eed9d5950ef0272 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 15:11:16 +0200 Subject: [PATCH 10/23] addfilling test and code --- src/main/java/com/booleanuk/core/Basket.java | 26 +++++++++++++++++++ .../java/com/booleanuk/core/BasketTest.java | 2 ++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 9e66c281b..a8ff21bf3 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -71,6 +71,32 @@ public int changeBasketSize(int newSize){ return newSize; } + public Boolean addFilling(String bagelSKU, String fillingSKU){ + for (Product p: basketContent){ + if(p.getSKU().equals(bagelSKU) && (p instanceof Bagel)){ + if(((Bagel) p).getFilling() != null){ + System.out.println("This bagel already has filling"); + return false; + } + + //found bagel, now see if filling is in inventory + for (Product filling: inventory){ + if(filling.getSKU().equals(fillingSKU)){ + System.out.println("Adding filling " + filling.getVariant() + " to bagel at a cost of " + filling.getPrice()); + ((Bagel) p).setFilling((Filling) filling); + totalPrice += filling.getPrice(); + return true; + } + } + System.out.println("Couldn't find the desired filling in stock"); + return false; + } + } + System.out.println("Couldn't find the bagel in basket"); + return false; + } + + private int getBasketSize(){ return this.basketSize; } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 4c0161f6a..a25a452a5 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -46,6 +46,8 @@ void checkPriceTest(){ void addFilling(){ Basket basket = new Basket(); basket.addItem("BGLO"); + basket.addFilling("BGLO", "FILS"); + Assertions.assertTrue(basket.addFilling("BGLO", "FILS")); From 62fc09751831c3f3c0ae70f91b8ca611214353ef Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 19 Aug 2024 15:45:02 +0200 Subject: [PATCH 11/23] addfilling test and code half done --- src/main/java/com/booleanuk/core/Basket.java | 36 +++++++++++++++---- src/main/java/com/booleanuk/core/Filling.java | 5 ++- .../java/com/booleanuk/core/BasketTest.java | 6 ++-- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index a8ff21bf3..5dfcd235c 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -74,28 +74,42 @@ public int changeBasketSize(int newSize){ public Boolean addFilling(String bagelSKU, String fillingSKU){ for (Product p: basketContent){ if(p.getSKU().equals(bagelSKU) && (p instanceof Bagel)){ - if(((Bagel) p).getFilling() != null){ - System.out.println("This bagel already has filling"); - return false; - } + //found bagel, now see if filling is in inventory for (Product filling: inventory){ - if(filling.getSKU().equals(fillingSKU)){ + if(filling.getSKU().equals(fillingSKU) && ((Bagel) p).getFilling() == null){ System.out.println("Adding filling " + filling.getVariant() + " to bagel at a cost of " + filling.getPrice()); ((Bagel) p).setFilling((Filling) filling); totalPrice += filling.getPrice(); return true; } } - System.out.println("Couldn't find the desired filling in stock"); - return false; + //System.out.println("Couldn't find the desired filling in stock"); + //return false; } } System.out.println("Couldn't find the bagel in basket"); return false; } + //Sanity check + public static void main(String[] args) { + Basket basket = new Basket(); + basket.changeBasketSize(20); + basket.addItem("BGLO"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + + + basket.addFilling("BGLE", "FILC"); + + + System.out.println(basket.getTotalPrice()); + System.out.println(basket.getBasketContent()); + } + private int getBasketSize(){ return this.basketSize; @@ -112,4 +126,12 @@ public double getTotalPrice() { public void setTotalPrice(double totalPrice) { this.totalPrice = totalPrice; } + + public ArrayList getBasketContent() { + return basketContent; + } + + public void setBasketContent(ArrayList basketContent) { + this.basketContent = basketContent; + } } diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java index 6167aa246..e2784d7c5 100644 --- a/src/main/java/com/booleanuk/core/Filling.java +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -7,5 +7,8 @@ public Filling(String SKU, double price, String name, String variant) { super(SKU, price, name, variant); } - + @Override + public String toString() { + return getVariant(); + } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index a25a452a5..1c8aeec87 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -46,13 +46,13 @@ void checkPriceTest(){ void addFilling(){ Basket basket = new Basket(); basket.addItem("BGLO"); - basket.addFilling("BGLO", "FILS"); + basket.changeBasketSize(20); + //Assertions.assertTrue(basket.addFilling("BGLO", "FILS")); + } - Assertions.assertTrue(basket.addFilling("BGLO", "FILS")); - } From 1e9f27b2c69736a320b271974ac5196a433eba10 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Tue, 20 Aug 2024 10:31:56 +0200 Subject: [PATCH 12/23] All core requirements met --- src/main/java/com/booleanuk/core/Basket.java | 15 +++++++++++---- src/test/java/com/booleanuk/core/BasketTest.java | 12 ++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 5dfcd235c..da9ffbbc9 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -38,9 +38,16 @@ public Boolean addItem(String SKU){ for (Product p: inventory){ if (p.getSKU().equals(SKU)){ //Found product in inv, add to basket if (!(p instanceof Filling)){ - basketContent.add(p); - totalPrice += p.getPrice(); - + if(p instanceof Bagel){ + basketContent.add(new Bagel(p.getSKU(), p.getPrice(), p.getName(), p.getVariant())); + totalPrice += p.getPrice(); + System.out.println("Bagel " + p.getVariant() + " added to basket at a cost of " + p.getPrice()); + } + if(p instanceof Coffee){ + basketContent.add(new Coffee(p.getSKU(), p.getPrice(), p.getName(), p.getVariant())); + totalPrice += p.getPrice(); + System.out.println("Coffee " + p.getVariant() + " added to basket at a cost of " + p.getPrice()); + } return true; }else{ System.out.println("Cannot buy filling on it's own, add it to a bagel dummy"); @@ -75,7 +82,6 @@ public Boolean addFilling(String bagelSKU, String fillingSKU){ for (Product p: basketContent){ if(p.getSKU().equals(bagelSKU) && (p instanceof Bagel)){ - //found bagel, now see if filling is in inventory for (Product filling: inventory){ if(filling.getSKU().equals(fillingSKU) && ((Bagel) p).getFilling() == null){ @@ -103,6 +109,7 @@ public static void main(String[] args) { basket.addItem("BGLE"); + basket.addFilling("BGLE", "FILC"); basket.addFilling("BGLE", "FILC"); diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 1c8aeec87..319693269 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -45,15 +45,19 @@ void checkPriceTest(){ @Test void addFilling(){ Basket basket = new Basket(); - basket.addItem("BGLO"); basket.changeBasketSize(20); + basket.addItem("BGLO"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); - //Assertions.assertTrue(basket.addFilling("BGLO", "FILS")); - - } + basket.addFilling("BGLE", "FILC"); + basket.addFilling("BGLE", "FILC"); + Assertions.assertTrue(basket.addFilling("BGLO", "FILS")); + } } From a1c68053867e5aad65f508724226cd0aeb6aa7bf Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Tue, 20 Aug 2024 10:54:42 +0200 Subject: [PATCH 13/23] addDiscountTest --- .../java/com/booleanuk/core/BasketTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 319693269..9d19aac5c 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -59,5 +59,27 @@ void addFilling(){ } + @Test + void addDiscountTest(){ + Basket basket = new Basket(); + basket.changeBasketSize(20); + basket.addItem("BGLO"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLO"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("COFB"); + + //basket.addFilling("BGLE", "FILC"); + //basket.addFilling("BGLE", "FILC"); + + + double newTotal = basket.addDiscount(); + + + } + } From 6649d5367255062d7211d2d072cef19e10871a78 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Tue, 20 Aug 2024 12:07:05 +0200 Subject: [PATCH 14/23] first draft of addDiscount (Not working correctly) --- src/main/java/com/booleanuk/core/Basket.java | 62 +++++++++++++++++++ .../java/com/booleanuk/core/BasketTest.java | 15 ++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index da9ffbbc9..1e87f4815 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -99,6 +99,68 @@ public Boolean addFilling(String bagelSKU, String fillingSKU){ return false; } + public double addDiscount() { + System.out.println("Total price before discount " + totalPrice); + int bagelCounter = 0; + int coffeeCounter = 0; + ArrayList discountedBagelsList = new ArrayList<>(); + + //Count bagels + for (Product p : basketContent) { + if (p.getName().equals("Bagel")) { + bagelCounter += 1; + discountedBagelsList.add((Bagel) p); + } + if (p.getName().equals("Coffee")) { + coffeeCounter += 1; + } + + + } + + //Figure out how many discounts and remaining items after discounts + int bagelDiscounts12 = 0; + int bagelsAfterDiscount12 = 0; + + if (bagelCounter >= 12) { + bagelDiscounts12 = bagelCounter / 12; + bagelsAfterDiscount12 = bagelCounter % 12; + } + + + for (int i = 0; i < bagelDiscounts12; i++){ + //remove the cost of the 12 individual bagels, + for(int j = 0; j < 12; j++){ + totalPrice -= discountedBagelsList.get(j).getPrice(); + System.out.println("price deducted from " + discountedBagelsList.get(j)); + } + + //remove the 12 discounted bagels + for(int j = 0; j < 12; j++){ + System.out.println("Removed bagel"); + discountedBagelsList.removeFirst(); + } + + totalPrice+= 2.49; // For each 12 stack discount, add this price to the total + } + + System.out.println("After applying 12 stack discount, there are now " + bagelsAfterDiscount12 + " bagels left"); + + if(bagelsAfterDiscount12 >= 6){ + //apply the 6 bagel discount + for(Bagel b: discountedBagelsList){ + totalPrice -= b.getPrice(); + discountedBagelsList.remove(b); + } + } + + + + System.out.println("Total price after discounts " + totalPrice); + + return totalPrice; + } + //Sanity check public static void main(String[] args) { Basket basket = new Basket(); diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 9d19aac5c..48c29c83f 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -69,11 +69,22 @@ void addDiscountTest(){ basket.addItem("BGLE"); basket.addItem("BGLO"); basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLO"); + basket.addItem("BGLP"); basket.addItem("BGLE"); basket.addItem("COFB"); + basket.addItem("BGLE"); + basket.addItem("BGLO"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("COFB"); + basket.addItem("BGLE"); - //basket.addFilling("BGLE", "FILC"); - //basket.addFilling("BGLE", "FILC"); + basket.addFilling("BGLE", "FILC"); + basket.addFilling("BGLE", "FILC"); double newTotal = basket.addDiscount(); From a841d4add841a0c926922d9bde2ce4d37428ac98 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Tue, 20 Aug 2024 15:51:20 +0200 Subject: [PATCH 15/23] ADddiscount working (missing coffee + bagel discount) --- src/main/java/com/booleanuk/core/Basket.java | 31 +++++++++++++------ .../java/com/booleanuk/core/BasketTest.java | 2 ++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 1e87f4815..3cac1a293 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -35,6 +35,9 @@ public Boolean addItem(String SKU){ return false; } + + //TODO + //Replace instanceof with just .equals(p.getName()) for (Product p: inventory){ if (p.getSKU().equals(SKU)){ //Found product in inv, add to basket if (!(p instanceof Filling)){ @@ -137,21 +140,21 @@ public double addDiscount() { //remove the 12 discounted bagels for(int j = 0; j < 12; j++){ - System.out.println("Removed bagel"); discountedBagelsList.removeFirst(); } - totalPrice+= 2.49; // For each 12 stack discount, add this price to the total + totalPrice+= 3.99; // For each 12 stack discount, add this price to the total } System.out.println("After applying 12 stack discount, there are now " + bagelsAfterDiscount12 + " bagels left"); if(bagelsAfterDiscount12 >= 6){ //apply the 6 bagel discount - for(Bagel b: discountedBagelsList){ - totalPrice -= b.getPrice(); - discountedBagelsList.remove(b); + for(int j = 0; j < 6; j++){ + totalPrice -= discountedBagelsList.get(j).getPrice(); + System.out.println("price deducted from " + discountedBagelsList.get(j)); } + totalPrice += 2.49; } @@ -165,17 +168,25 @@ public double addDiscount() { public static void main(String[] args) { Basket basket = new Basket(); basket.changeBasketSize(20); - basket.addItem("BGLO"); - basket.addItem("BGLP"); basket.addItem("BGLE"); basket.addItem("BGLE"); - - + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); basket.addFilling("BGLE", "FILC"); basket.addFilling("BGLE", "FILC"); - System.out.println(basket.getTotalPrice()); + + //System.out.println(newPrice); System.out.println(basket.getBasketContent()); } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 48c29c83f..fac373f29 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -82,6 +82,8 @@ void addDiscountTest(){ basket.addItem("BGLE"); basket.addItem("COFB"); basket.addItem("BGLE"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); basket.addFilling("BGLE", "FILC"); basket.addFilling("BGLE", "FILC"); From 2c42d22dbc2f3eebc737ab5823b7c76880ccabd3 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Wed, 21 Aug 2024 15:36:19 +0200 Subject: [PATCH 16/23] add discount tests, and updated domain models --- domain-model.md | 43 ++++++++------ .../java/com/booleanuk/core/BasketTest.java | 59 +++++++++++++------ 2 files changed, 66 insertions(+), 36 deletions(-) diff --git a/domain-model.md b/domain-model.md index 73dbe83c3..090def036 100644 --- a/domain-model.md +++ b/domain-model.md @@ -1,21 +1,31 @@ Basket Class -| Method Variables | Methods | Scenario | Output | User Story | -|----------------------------------|-------------------------------|--------------------------------------|------------------------------------------------------------------|------------| -| ArrayList basketContent | addItem(String SKU) | Basket full | Print error, return false | 1, 3 | -| ArrayList inventory | | Basket not full | print cost of item, return true | | -| int totalPrice | | | | | -| int basketSize | removeItem(String SKU) | Basket contains item | remove item from basketContent, return true | 2, 5 | -| | | Basket doesnt' contain item | print error, return false | | -| | | | | | -| | changeBasketSize(int newSize) | newSize is negative number | print error, return false | 4 | -| | | newSize is a positive number | print success, return true | | -| | | | | | -| | checkPrice() | | Prints totalPrice | 6 | -| | | | | | -| | addFilling(String SKU) | SKU corresponds to a bagel in basket | print price of filling
add to basketContent
return true | | -| | | SKU doesn't exist in basket | print error, return false | | +| Method Variables | Methods | Scenario | Output | User Story | +|----------------------------------|------------------------------------------------|----------------------------------------------------------|------------------------------------------------------------------|------------| +| ArrayList basketContent | addItem(String SKU) | Basket full | Print error, return false | 1, 3 | +| ArrayList inventory | | Basket not full | print cost of item, return true | | +| int totalPrice | | | | | +| int basketSize | removeItem(String SKU) | Basket contains item | remove item from basketContent, return true | 2, 5 | +| | | Basket doesnt' contain item | print error, return false | | +| | | | | | +| | changeBasketSize(int newSize) | newSize is negative number | print error, return false | 4 | +| | | newSize is a positive number | print success, return true | | +| | | | | | +| | checkPrice() | | Prints totalPrice | 6 | +| | | | | | +| | addFilling(String SKU) | SKU corresponds to a bagel in basket | print price of filling
add to basketContent
return true | | +| | | SKU doesn't exist in basket | print error, return false | | +| | | | | | +| | addDiscount() | No discounted items | Return the totalPrice (Unchanged) | | +| | | Discounted items | return the new totalPrice | | +| | | | | | +| | printReciet() | Basket is empty | print error | | +| | | Basket is not empty | print the receipt including discounts | | addFilling(String SKU) | Bagel already has filling | Print error, return false | | +| | | | | | +| | addFilling(String bagelSKU, String FillingSKU) | Bagel doesn't have a filling,
And filling SKU exists | Add filling to bagel object, return true | | +| | | Bagel doesn't have filling, but SKU doesn't exists | print error, return false | | +| | Product class @@ -37,7 +47,4 @@ Bagel class | Filling filling | getFilling() | Filling exists | return Filling object | 8 | | | | Filling doesn't exist | print error, return null | | | | | | | | -| | addFilling(String SKU) | Bagel already has filling | Print error, return false | | -| | | Bagel doesn't have a filling,
And filling SKU exists | Add filling to bagel object, return true | | -| | | Bagel doesn't have filling, but SKU doesn't exists | print error, return false | | | | | | | | diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index fac373f29..a90473823 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -3,6 +3,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static java.lang.Math.round; + public class BasketTest { @Test @@ -63,35 +65,56 @@ void addFilling(){ void addDiscountTest(){ Basket basket = new Basket(); basket.changeBasketSize(20); - basket.addItem("BGLO"); + + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); basket.addItem("BGLP"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLO"); basket.addItem("BGLP"); basket.addItem("BGLP"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLO"); basket.addItem("BGLP"); - basket.addItem("BGLE"); - basket.addItem("COFB"); - basket.addItem("BGLE"); - basket.addItem("BGLO"); basket.addItem("BGLP"); - basket.addItem("BGLE"); - basket.addItem("COFB"); - basket.addItem("BGLE"); basket.addItem("BGLP"); - basket.addItem("BGLE"); - basket.addFilling("BGLE", "FILC"); - basket.addFilling("BGLE", "FILC"); + double newTotal = basket.addDiscount(); + Assertions.assertEquals(5.55, newTotal, 0.005d); + } - double newTotal = basket.addDiscount(); + @Test + void addDiscountWithFilling(){ + Basket basket = new Basket(); + basket.changeBasketSize(20); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addFilling("BGLP", "FILC"); + basket.addFilling("BGLP", "FILB"); + + double newTotal = basket.addDiscount(); + Assertions.assertEquals(5.79, newTotal, 0.005d); } From 277e6e62b39f7c031ff29e63e1b3fe6c10f06eed Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Thu, 22 Aug 2024 11:05:12 +0200 Subject: [PATCH 17/23] PrintReciept refactor --- src/main/java/com/booleanuk/core/Basket.java | 164 +++++++++++++----- .../java/com/booleanuk/core/BasketTest.java | 41 ++++- 2 files changed, 162 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 3cac1a293..3718d04b3 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -27,6 +27,9 @@ public Basket(){ inventory.add(new Filling("FILX", 0.12d, "Filling", "Cream Cheese")); inventory.add(new Filling("FILS", 0.12d, "Filling", "Smoked Salmon")); inventory.add(new Filling("FILH", 0.12d, "Filling", "Ham")); + inventory.add(new Product("DIS1", 0.39d, "12 Bagels", "Ham")); + inventory.add(new Product("DIS2", 0.49d, "6 Bagels", "Ham")); + inventory.add(new Product("DIS3", 0.99d, "COffee - Bagel", "Ham")); } public Boolean addItem(String SKU){ @@ -84,7 +87,6 @@ public int changeBasketSize(int newSize){ public Boolean addFilling(String bagelSKU, String fillingSKU){ for (Product p: basketContent){ if(p.getSKU().equals(bagelSKU) && (p instanceof Bagel)){ - //found bagel, now see if filling is in inventory for (Product filling: inventory){ if(filling.getSKU().equals(fillingSKU) && ((Bagel) p).getFilling() == null){ @@ -92,10 +94,8 @@ public Boolean addFilling(String bagelSKU, String fillingSKU){ ((Bagel) p).setFilling((Filling) filling); totalPrice += filling.getPrice(); return true; - } + } } - //System.out.println("Couldn't find the desired filling in stock"); - //return false; } } System.out.println("Couldn't find the bagel in basket"); @@ -107,6 +107,7 @@ public double addDiscount() { int bagelCounter = 0; int coffeeCounter = 0; ArrayList discountedBagelsList = new ArrayList<>(); + ArrayList coffeeList = new ArrayList<>(); //Count bagels for (Product p : basketContent) { @@ -116,33 +117,24 @@ public double addDiscount() { } if (p.getName().equals("Coffee")) { coffeeCounter += 1; + coffeeList.add(p); } - - } //Figure out how many discounts and remaining items after discounts - int bagelDiscounts12 = 0; - int bagelsAfterDiscount12 = 0; - - if (bagelCounter >= 12) { - bagelDiscounts12 = bagelCounter / 12; - bagelsAfterDiscount12 = bagelCounter % 12; - } + int bagelDiscounts12 = bagelCounter / 12; // 20 / 12 = 1 + int bagelsAfterDiscount12 = bagelCounter % 12; // 20 % 12 = 8 for (int i = 0; i < bagelDiscounts12; i++){ //remove the cost of the 12 individual bagels, for(int j = 0; j < 12; j++){ - totalPrice -= discountedBagelsList.get(j).getPrice(); - System.out.println("price deducted from " + discountedBagelsList.get(j)); + totalPrice -= discountedBagelsList.get(j).getPrice(); // Deducting the price of the bagel from the total } - //remove the 12 discounted bagels for(int j = 0; j < 12; j++){ discountedBagelsList.removeFirst(); } - totalPrice+= 3.99; // For each 12 stack discount, add this price to the total } @@ -155,39 +147,133 @@ public double addDiscount() { System.out.println("price deducted from " + discountedBagelsList.get(j)); } totalPrice += 2.49; + bagelsAfterDiscount12 -= 6; } + System.out.println("Bagels remaining " + bagelsAfterDiscount12); + + //Calculate coffee + bagel pairs for the remaining discounts + for(int i = 0; i < bagelsAfterDiscount12; i++){ + if(!coffeeList.isEmpty()){ + totalPrice -= discountedBagelsList.get(i).getPrice(); + totalPrice -= coffeeList.get(i).getPrice(); + totalPrice += 1.25d; + } + } + System.out.println("Total price after discounts " + String.format("%.02f",totalPrice)); + return totalPrice; + } + /* + public void printReceipt(){ + int bagelCount = 0; + double bagelPrice = 0; + int coffeeCount = 0; + double coffeePrice = 0; + int fillingCount = 0; + double fillingPrice = 0; - System.out.println("Total price after discounts " + totalPrice); + System.out.println(" ~~~ Bob's Bagels ~~~ "); + System.out.println("----------------------------"); - return totalPrice; + for (Product p: basketContent){ + if(p.getName().equals("Bagel")){ + bagelCount+= 1; + bagelPrice += p.getPrice(); + + //check for fillings as well + if (((Bagel) p).getFilling() != null){ + fillingCount+= 1; + fillingPrice+= ((Bagel) p).getFilling().getPrice(); + } + + }else if (p.getName().equals("Coffee")) { + coffeeCount += 1; + coffeePrice += p.getPrice(); + } + + } + System.out.println(bagelCount + "X Bagels = " + String.format("%.02f",bagelPrice)); + System.out.println(coffeeCount + "X Coffee = " + String.format("%.02f",coffeePrice)); + System.out.println(fillingCount + "X Fillings = " + String.format("%.02f",fillingPrice)); + System.out.println("Original price:" + String.format("%.02f",(bagelPrice + coffeePrice + fillingPrice))); + System.out.println("price after discounts: " + String.format("%.02f",totalPrice)); + } + + */ + + public void printReceipt() { + int bagelCount = 0; + double bagelPrice = 0; + int coffeeCount = 0; + double coffeePrice = 0; + int fillingCount = 0; + double fillingPrice = 0; + + System.out.println(" ~~~ Bob's Bagels ~~~ "); + System.out.println("----------------------------"); + + // Loop through basket items and count the products + for (Product p : basketContent) { + if (p.getName().equals("Bagel")) { + bagelCount++; + bagelPrice += p.getPrice(); + + // Check for fillings within the bagel + if (((Bagel) p).getFilling() != null) { + fillingCount++; + fillingPrice += ((Bagel) p).getFilling().getPrice(); + } + + } else if (p.getName().equals("Coffee")) { + coffeeCount++; + coffeePrice += p.getPrice(); + } + } + + // Only print the line for each item if its count is greater than 0 + if (bagelCount > 0) { + System.out.println(bagelCount + "X Bagels = $" + String.format("%.02f", bagelPrice)); + } + if (coffeeCount > 0) { + System.out.println(coffeeCount + "X Coffee = $" + String.format("%.02f", coffeePrice)); + } + if (fillingCount > 0) { + System.out.println(fillingCount + "X Fillings = $" + String.format("%.02f", fillingPrice)); + } + + // Calculate total prices + double originalPrice = bagelPrice + coffeePrice + fillingPrice; + System.out.println("----------------------------"); + System.out.println("Original price: $" + String.format("%.02f", originalPrice)); + System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice)); // assuming totalPrice is computed elsewhere } //Sanity check public static void main(String[] args) { Basket basket = new Basket(); basket.changeBasketSize(20); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addItem("BGLE"); - basket.addFilling("BGLE", "FILC"); - basket.addFilling("BGLE", "FILC"); - - - - //System.out.println(newPrice); - System.out.println(basket.getBasketContent()); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addFilling("BGLP", "FILC"); + + double newPrice = basket.addDiscount(); + basket.printReceipt(); + } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index a90473823..b5a846baa 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -79,13 +79,12 @@ void addDiscountTest(){ basket.addItem("BGLP"); basket.addItem("BGLP"); basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); + basket.addItem("COFB"); + basket.addFilling("BGLP", "FILC"); double newTotal = basket.addDiscount(); - Assertions.assertEquals(5.55, newTotal, 0.005d); + Assertions.assertEquals(5.36, newTotal, 0.005d); } @@ -117,5 +116,39 @@ void addDiscountWithFilling(){ Assertions.assertEquals(5.79, newTotal, 0.005d); } + @Test + void addDiscountVariedBasket(){ + Basket basket = new Basket(); + basket.changeBasketSize(30); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLE"); + basket.addItem("BGLO"); + basket.addItem("BGLO"); + basket.addItem("COFB"); + basket.addItem("COFB"); + basket.addItem("COFB"); + + + double newTotal = basket.addDiscount(); + + //Assertions.assertEquals(5.79, newTotal, 0.005d); + } + } From ac6d08d99c51129e3e7fb7d000bd306597b8b36b Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Thu, 22 Aug 2024 11:47:46 +0200 Subject: [PATCH 18/23] PrintReciept refactor 2, with accounting for variant --- src/main/java/com/booleanuk/core/Basket.java | 134 +++++++++++++------ 1 file changed, 95 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 3718d04b3..1c0ee99ee 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,6 +1,8 @@ package com.booleanuk.core; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class Basket { private ArrayList inventory; @@ -164,7 +166,7 @@ public double addDiscount() { } /* - public void printReceipt(){ + public void printReceipt() { int bagelCount = 0; double bagelPrice = 0; int coffeeCount = 0; @@ -172,43 +174,58 @@ public void printReceipt(){ int fillingCount = 0; double fillingPrice = 0; - System.out.println(" ~~~ Bob's Bagels ~~~ "); System.out.println("----------------------------"); - for (Product p: basketContent){ - if(p.getName().equals("Bagel")){ - bagelCount+= 1; + // Loop through basket items and count the products + for (Product p : basketContent) { + if (p.getName().equals("Bagel")) { + bagelCount++; bagelPrice += p.getPrice(); - //check for fillings as well - if (((Bagel) p).getFilling() != null){ - fillingCount+= 1; - fillingPrice+= ((Bagel) p).getFilling().getPrice(); + // Check for fillings within the bagel + if (((Bagel) p).getFilling() != null) { + fillingCount++; + fillingPrice += ((Bagel) p).getFilling().getPrice(); } - }else if (p.getName().equals("Coffee")) { - coffeeCount += 1; + } else if (p.getName().equals("Coffee")) { + coffeeCount++; coffeePrice += p.getPrice(); } + } + // Only print the line for each item if its count is greater than 0 + if (bagelCount > 0) { + System.out.println(bagelCount + "X Bagels = £" + String.format("%.02f", bagelPrice)); + } + if (coffeeCount > 0) { + System.out.println(coffeeCount + "X Coffee = £" + String.format("%.02f", coffeePrice)); + } + if (fillingCount > 0) { + System.out.println(fillingCount + "X Fillings = £" + String.format("%.02f", fillingPrice)); } - System.out.println(bagelCount + "X Bagels = " + String.format("%.02f",bagelPrice)); - System.out.println(coffeeCount + "X Coffee = " + String.format("%.02f",coffeePrice)); - System.out.println(fillingCount + "X Fillings = " + String.format("%.02f",fillingPrice)); - System.out.println("Original price:" + String.format("%.02f",(bagelPrice + coffeePrice + fillingPrice))); - System.out.println("price after discounts: " + String.format("%.02f",totalPrice)); - } - */ + // Calculate total prices + double originalPrice = bagelPrice + coffeePrice + fillingPrice; + double savings = originalPrice - totalPrice; + System.out.println("----------------------------"); + System.out.println("Original price: $" + String.format("%.02f", originalPrice)); + System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice) + "(-" + String.format("%.02f",savings) + ")") ; // assuming totalPrice is computed elsewhere + }*/ public void printReceipt() { - int bagelCount = 0; - double bagelPrice = 0; - int coffeeCount = 0; - double coffeePrice = 0; - int fillingCount = 0; - double fillingPrice = 0; + // Maps to store the count and price for each bagel variant + Map bagelVariantCount = new HashMap<>(); + Map bagelVariantPrice = new HashMap<>(); + + // Maps to store the count and price for each coffee variant + Map coffeeVariantCount = new HashMap<>(); + Map coffeeVariantPrice = new HashMap<>(); + + // Maps to store the count and price for each filling variant + Map fillingVariantCount = new HashMap<>(); + Map fillingVariantPrice = new HashMap<>(); System.out.println(" ~~~ Bob's Bagels ~~~ "); System.out.println("----------------------------"); @@ -216,34 +233,72 @@ public void printReceipt() { // Loop through basket items and count the products for (Product p : basketContent) { if (p.getName().equals("Bagel")) { - bagelCount++; - bagelPrice += p.getPrice(); + String bagelVariant = p.getVariant(); // Get the variant of the bagel + + // Update the count and price for the specific bagel variant + bagelVariantCount.put(bagelVariant, bagelVariantCount.getOrDefault(bagelVariant, 0) + 1); + bagelVariantPrice.put(bagelVariant, bagelVariantPrice.getOrDefault(bagelVariant, 0.0) + p.getPrice()); // Check for fillings within the bagel if (((Bagel) p).getFilling() != null) { - fillingCount++; - fillingPrice += ((Bagel) p).getFilling().getPrice(); + Filling filling = ((Bagel) p).getFilling(); + String fillingVariant = filling.getVariant(); // Get the variant of the filling + + // Update the count and price for the specific filling variant + fillingVariantCount.put(fillingVariant, fillingVariantCount.getOrDefault(fillingVariant, 0) + 1); + fillingVariantPrice.put(fillingVariant, fillingVariantPrice.getOrDefault(fillingVariant, 0.0) + filling.getPrice()); } } else if (p.getName().equals("Coffee")) { - coffeeCount++; - coffeePrice += p.getPrice(); + String coffeeVariant = p.getVariant(); // Get the variant of the coffee + + // Update the count and price for the specific coffee variant + coffeeVariantCount.put(coffeeVariant, coffeeVariantCount.getOrDefault(coffeeVariant, 0) + 1); + coffeeVariantPrice.put(coffeeVariant, coffeeVariantPrice.getOrDefault(coffeeVariant, 0.0) + p.getPrice()); } } - // Only print the line for each item if its count is greater than 0 - if (bagelCount > 0) { - System.out.println(bagelCount + "X Bagels = $" + String.format("%.02f", bagelPrice)); + // Print the bagels, separated by variant + for (String variant : bagelVariantCount.keySet()) { + int count = bagelVariantCount.get(variant); + double price = bagelVariantPrice.get(variant); + if (count > 0) { + System.out.println(count + "X " + variant + " Bagels = $" + String.format("%.02f", price)); + } } - if (coffeeCount > 0) { - System.out.println(coffeeCount + "X Coffee = $" + String.format("%.02f", coffeePrice)); + + // Print the coffee, separated by variant + for (String variant : coffeeVariantCount.keySet()) { + int count = coffeeVariantCount.get(variant); + double price = coffeeVariantPrice.get(variant); + if (count > 0) { + System.out.println(count + "X " + variant + " Coffee = $" + String.format("%.02f", price)); + } } - if (fillingCount > 0) { - System.out.println(fillingCount + "X Fillings = $" + String.format("%.02f", fillingPrice)); + + // Print the fillings, separated by variant + for (String variant : fillingVariantCount.keySet()) { + int count = fillingVariantCount.get(variant); + double price = fillingVariantPrice.get(variant); + if (count > 0) { + System.out.println(count + "X " + variant + " Fillings = $" + String.format("%.02f", price)); + } + } + + // Calculate and print total prices + double originalPrice = 0; + + // Add up all the bagel, coffee, and filling prices + for (double price : bagelVariantPrice.values()) { + originalPrice += price; + } + for (double price : coffeeVariantPrice.values()) { + originalPrice += price; + } + for (double price : fillingVariantPrice.values()) { + originalPrice += price; } - // Calculate total prices - double originalPrice = bagelPrice + coffeePrice + fillingPrice; System.out.println("----------------------------"); System.out.println("Original price: $" + String.format("%.02f", originalPrice)); System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice)); // assuming totalPrice is computed elsewhere @@ -269,6 +324,7 @@ public static void main(String[] args) { basket.addItem("BGLP"); basket.addItem("BGLP"); basket.addItem("BGLP"); + basket.addItem("BGLO"); basket.addFilling("BGLP", "FILC"); double newPrice = basket.addDiscount(); From 38a36e749725bad9c29a22d97324d949d335059c Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Thu, 22 Aug 2024 13:42:42 +0200 Subject: [PATCH 19/23] refactoring print reciept to use helper methods --- src/main/java/com/booleanuk/core/Basket.java | 37 +++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 1c0ee99ee..b651509a8 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -214,16 +214,14 @@ public void printReceipt() { System.out.println("Original price: $" + String.format("%.02f", originalPrice)); System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice) + "(-" + String.format("%.02f",savings) + ")") ; // assuming totalPrice is computed elsewhere }*/ + + public void printReceipt() { // Maps to store the count and price for each bagel variant Map bagelVariantCount = new HashMap<>(); Map bagelVariantPrice = new HashMap<>(); - - // Maps to store the count and price for each coffee variant Map coffeeVariantCount = new HashMap<>(); Map coffeeVariantPrice = new HashMap<>(); - - // Maps to store the count and price for each filling variant Map fillingVariantCount = new HashMap<>(); Map fillingVariantPrice = new HashMap<>(); @@ -233,7 +231,8 @@ public void printReceipt() { // Loop through basket items and count the products for (Product p : basketContent) { if (p.getName().equals("Bagel")) { - String bagelVariant = p.getVariant(); // Get the variant of the bagel + //String bagelVariant = p.getVariant(); // Get the variant of the bagel + // Update the count and price for the specific bagel variant bagelVariantCount.put(bagelVariant, bagelVariantCount.getOrDefault(bagelVariant, 0) + 1); @@ -304,6 +303,34 @@ public void printReceipt() { System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice)); // assuming totalPrice is computed elsewhere } + private void addToMaps(Product p, Map countMap, Map priceMap){ + String variant = p.getVariant(); + countMap.put(variant, countMap.getOrDefault(variant, 0) +1); + priceMap.put(variant, priceMap.getOrDefault(variant, 0.0) + p.getPrice()); + + } + + private void printReceiptLines(String productType, Map countMap, Map priceMap){ + for (String variant: countMap.keySet()){ + int count = countMap.get(variant); //Amount of products in the order + double price = priceMap.get(variant); + if(count > 0){ + System.out.println(count + "X " + variant + " " + productType + " = $" + String.format("%.02f", price)); + } + } + } + + private double calculateTotal(Map priceMap){ + double total = 0; + for (double price : priceMap.values()){ + total += price; + } + return total; + } + + + + //Sanity check public static void main(String[] args) { Basket basket = new Basket(); From 7036c1bb36c0db82380a46426bf673c5b1c137a9 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Thu, 22 Aug 2024 14:11:48 +0200 Subject: [PATCH 20/23] print receipt refactor DONE --- src/main/java/com/booleanuk/core/Basket.java | 130 +++---------------- 1 file changed, 20 insertions(+), 110 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index b651509a8..3d049c0d8 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -104,6 +104,8 @@ public Boolean addFilling(String bagelSKU, String fillingSKU){ return false; } + //TODO + //REfactor addDiscount() to use helper methods and reduce code repetition public double addDiscount() { System.out.println("Total price before discount " + totalPrice); int bagelCounter = 0; @@ -161,61 +163,13 @@ public double addDiscount() { totalPrice += 1.25d; } } + System.out.println("Total price after discounts " + String.format("%.02f",totalPrice)); + System.out.println("You saved a total of " + String.format("%.02f",totalPrice)); + return totalPrice; } - /* - public void printReceipt() { - int bagelCount = 0; - double bagelPrice = 0; - int coffeeCount = 0; - double coffeePrice = 0; - int fillingCount = 0; - double fillingPrice = 0; - - System.out.println(" ~~~ Bob's Bagels ~~~ "); - System.out.println("----------------------------"); - - // Loop through basket items and count the products - for (Product p : basketContent) { - if (p.getName().equals("Bagel")) { - bagelCount++; - bagelPrice += p.getPrice(); - - // Check for fillings within the bagel - if (((Bagel) p).getFilling() != null) { - fillingCount++; - fillingPrice += ((Bagel) p).getFilling().getPrice(); - } - - } else if (p.getName().equals("Coffee")) { - coffeeCount++; - coffeePrice += p.getPrice(); - } - } - - // Only print the line for each item if its count is greater than 0 - if (bagelCount > 0) { - System.out.println(bagelCount + "X Bagels = £" + String.format("%.02f", bagelPrice)); - } - if (coffeeCount > 0) { - System.out.println(coffeeCount + "X Coffee = £" + String.format("%.02f", coffeePrice)); - } - if (fillingCount > 0) { - System.out.println(fillingCount + "X Fillings = £" + String.format("%.02f", fillingPrice)); - } - - // Calculate total prices - double originalPrice = bagelPrice + coffeePrice + fillingPrice; - double savings = originalPrice - totalPrice; - - System.out.println("----------------------------"); - System.out.println("Original price: $" + String.format("%.02f", originalPrice)); - System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice) + "(-" + String.format("%.02f",savings) + ")") ; // assuming totalPrice is computed elsewhere - }*/ - - public void printReceipt() { // Maps to store the count and price for each bagel variant Map bagelVariantCount = new HashMap<>(); @@ -228,79 +182,35 @@ public void printReceipt() { System.out.println(" ~~~ Bob's Bagels ~~~ "); System.out.println("----------------------------"); - // Loop through basket items and count the products + // Loop through basket items and count the products, add it to count maps for (Product p : basketContent) { if (p.getName().equals("Bagel")) { - //String bagelVariant = p.getVariant(); // Get the variant of the bagel - - - // Update the count and price for the specific bagel variant - bagelVariantCount.put(bagelVariant, bagelVariantCount.getOrDefault(bagelVariant, 0) + 1); - bagelVariantPrice.put(bagelVariant, bagelVariantPrice.getOrDefault(bagelVariant, 0.0) + p.getPrice()); + addToMaps(p, bagelVariantCount, bagelVariantPrice); - // Check for fillings within the bagel + // if bagel doesn't hava filling if (((Bagel) p).getFilling() != null) { - Filling filling = ((Bagel) p).getFilling(); - String fillingVariant = filling.getVariant(); // Get the variant of the filling - - // Update the count and price for the specific filling variant - fillingVariantCount.put(fillingVariant, fillingVariantCount.getOrDefault(fillingVariant, 0) + 1); - fillingVariantPrice.put(fillingVariant, fillingVariantPrice.getOrDefault(fillingVariant, 0.0) + filling.getPrice()); + addToMaps(p, fillingVariantCount, fillingVariantPrice); } } else if (p.getName().equals("Coffee")) { - String coffeeVariant = p.getVariant(); // Get the variant of the coffee - - // Update the count and price for the specific coffee variant - coffeeVariantCount.put(coffeeVariant, coffeeVariantCount.getOrDefault(coffeeVariant, 0) + 1); - coffeeVariantPrice.put(coffeeVariant, coffeeVariantPrice.getOrDefault(coffeeVariant, 0.0) + p.getPrice()); + addToMaps(p, coffeeVariantCount, coffeeVariantPrice); } } - // Print the bagels, separated by variant - for (String variant : bagelVariantCount.keySet()) { - int count = bagelVariantCount.get(variant); - double price = bagelVariantPrice.get(variant); - if (count > 0) { - System.out.println(count + "X " + variant + " Bagels = $" + String.format("%.02f", price)); - } - } + printReceiptLines("Bagels", bagelVariantCount, bagelVariantPrice); + printReceiptLines("Fillings", fillingVariantCount, fillingVariantPrice); + printReceiptLines("Coffees", fillingVariantCount, fillingVariantPrice); - // Print the coffee, separated by variant - for (String variant : coffeeVariantCount.keySet()) { - int count = coffeeVariantCount.get(variant); - double price = coffeeVariantPrice.get(variant); - if (count > 0) { - System.out.println(count + "X " + variant + " Coffee = $" + String.format("%.02f", price)); - } - } - - // Print the fillings, separated by variant - for (String variant : fillingVariantCount.keySet()) { - int count = fillingVariantCount.get(variant); - double price = fillingVariantPrice.get(variant); - if (count > 0) { - System.out.println(count + "X " + variant + " Fillings = $" + String.format("%.02f", price)); - } - } - - // Calculate and print total prices - double originalPrice = 0; + double originalPrice = calculateTotal(bagelVariantPrice) + calculateTotal(fillingVariantPrice) + calculateTotal(coffeeVariantPrice); //Recalculate undiscounted price (Not ideal solution) + double savings = originalPrice - totalPrice; + System.out.println("----------------------------"); + System.out.println("Original price: $" + String.format("%.02f", originalPrice)); + System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice)); // Totalprice calculated in Discount - // Add up all the bagel, coffee, and filling prices - for (double price : bagelVariantPrice.values()) { - originalPrice += price; - } - for (double price : coffeeVariantPrice.values()) { - originalPrice += price; - } - for (double price : fillingVariantPrice.values()) { - originalPrice += price; + if(savings > 0){ + System.out.println("You saved a total of: $" + String.format("%.02f", savings) + " on this shop :)"); } - System.out.println("----------------------------"); - System.out.println("Original price: $" + String.format("%.02f", originalPrice)); - System.out.println("Price after discounts: $" + String.format("%.02f", totalPrice)); // assuming totalPrice is computed elsewhere } private void addToMaps(Product p, Map countMap, Map priceMap){ From 17c7db54fb55fec36ab291099903c927102e7069 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Thu, 22 Aug 2024 14:17:13 +0200 Subject: [PATCH 21/23] print receipt refactor DONE --- src/main/java/com/booleanuk/core/Basket.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 3d049c0d8..a4a081fcc 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -239,8 +239,6 @@ private double calculateTotal(Map priceMap){ } - - //Sanity check public static void main(String[] args) { Basket basket = new Basket(); From ac738e3143edacfa776520a9da220b95a0511a11 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 26 Aug 2024 15:39:34 +0200 Subject: [PATCH 22/23] updated gleek class diagram and some basket tests --- domain-model.md | 117 ++++++++++++++---- gleek-VdlCz2dQg2d4mnczqiReLw(1).png | Bin 0 -> 83844 bytes gleek-VdlCz2dQg2d4mnczqiReLw.png | Bin 68329 -> 0 bytes src/main/java/com/booleanuk/core/Basket.java | 57 +++------ .../java/com/booleanuk/core/BasketTest.java | 17 +-- 5 files changed, 116 insertions(+), 75 deletions(-) create mode 100644 gleek-VdlCz2dQg2d4mnczqiReLw(1).png delete mode 100644 gleek-VdlCz2dQg2d4mnczqiReLw.png diff --git a/domain-model.md b/domain-model.md index 090def036..441d80704 100644 --- a/domain-model.md +++ b/domain-model.md @@ -1,30 +1,99 @@ +User Stories + +1. +As a member of the public, +So I can order a bagel before work, +I'd like to add a specific type of bagel to my basket. + +2. +As a member of the public, +So I can change my order, +I'd like to remove a bagel from my basket. + +3. +As a member of the public, +So that I can not overfill my small bagel basket +I'd like to know when my basket is full when I try adding an item beyond my basket capacity. + +4. +As a Bob's Bagels manager, +So that I can expand my business, +I’d like to change the capacity of baskets. + +5. +As a member of the public +So that I can maintain my sanity +I'd like to know if I try to remove an item that doesn't exist in my basket. + +6. +As a customer, +So I know how much money I need, +I'd like to know the total cost of items in my basket. + +7. +As a customer, +So I know what the damage will be, +I'd like to know the cost of a bagel before I add it to my basket. + +8. +As a customer, +So I can shake things up a bit, +I'd like to be able to choose fillings for my bagel. + +9. +As a customer, +So I don't over-spend, +I'd like to know the cost of each filling before I add it to my bagel order. + +10. +As the manager, +So we don't get any weird requests, +I want customers to only be able to order things that we stock in our inventory. + +11. +As a customer, +So i know how much i'm saving +I want to see my total cost bfore and after applying discounts + +12. +As a customer, +So I know what i'm paying for +I want to see each individual idem on the receipt accompanied with the cost. Basket Class -| Method Variables | Methods | Scenario | Output | User Story | -|----------------------------------|------------------------------------------------|----------------------------------------------------------|------------------------------------------------------------------|------------| -| ArrayList basketContent | addItem(String SKU) | Basket full | Print error, return false | 1, 3 | -| ArrayList inventory | | Basket not full | print cost of item, return true | | -| int totalPrice | | | | | -| int basketSize | removeItem(String SKU) | Basket contains item | remove item from basketContent, return true | 2, 5 | -| | | Basket doesnt' contain item | print error, return false | | -| | | | | | -| | changeBasketSize(int newSize) | newSize is negative number | print error, return false | 4 | -| | | newSize is a positive number | print success, return true | | -| | | | | | -| | checkPrice() | | Prints totalPrice | 6 | -| | | | | | -| | addFilling(String SKU) | SKU corresponds to a bagel in basket | print price of filling
add to basketContent
return true | | -| | | SKU doesn't exist in basket | print error, return false | | -| | | | | | -| | addDiscount() | No discounted items | Return the totalPrice (Unchanged) | | -| | | Discounted items | return the new totalPrice | | -| | | | | | -| | printReciet() | Basket is empty | print error | | -| | | Basket is not empty | print the receipt including discounts | | addFilling(String SKU) | Bagel already has filling | Print error, return false | | -| | | | | | -| | addFilling(String bagelSKU, String FillingSKU) | Bagel doesn't have a filling,
And filling SKU exists | Add filling to bagel object, return true | | -| | | Bagel doesn't have filling, but SKU doesn't exists | print error, return false | | +| Method Variables | Methods | Scenario | Output | User Story | +|----------------------------------|----------------------------------------------------------------------------------------------------|----------------------------------------------------------|------------------------------------------------------------------|-------------| +| ArrayList basketContent | addItem(String SKU) | Basket full | Print error, return false | 1, 3, 8, 10 | +| ArrayList inventory | | Basket not full | print cost of item, return true | | +| int totalPrice | | | | | +| int basketSize | removeItem(String SKU) | Basket contains item | remove item from basketContent, return true | 2, 5 | +| | | Basket doesnt' contain item | print error, return false | | +| | | | | | +| | changeBasketSize(int newSize) | newSize is negative number | print error, return false | 4 | +| | | newSize is a positive number | print success, return true | | +| | | | | | +| | checkPrice() | | Prints totalPrice | 6 | +| | | | | | +| | addFilling(String SKU) | SKU corresponds to a bagel in basket | print price of filling
add to basketContent
return true | 7, 9 | +| | | SKU doesn't exist in basket | print error, return false | | +| | | | | | +| | addDiscount() | No discounted items | Return the totalPrice (Unchanged) | 11 | +| | | Discounted items | return the new totalPrice | | +| | | | | | +| | printReciet() | Basket is empty | print error | 12 | +| | | Basket is not empty | print the receipt including discounts | | +| | | | | | +| | addFilling(String bagelSKU, String FillingSKU) | Bagel doesn't have a filling,
And filling SKU exists | Add filling to bagel object, return true | | +| | | Bagel doesn't have filling, but SKU doesn't exists | print error, return false | | +| | | | | | +| | addToMaps(Product p, Map countMap, Map priceMap) | | Adds the product p to the price and countmap | | +| | | | | | +| | printReceiptLines(String productType, Map countMap, Map priceMap) | | Prints receit based on content of countMap and priceMap | | +| | | | | | +| | calculateTotal() | basketContent is empty | return 0 | | +| | | basketContent is not empty | return total price of basket items (WIthout discounts) | | +| | | | | | | | Product class diff --git a/gleek-VdlCz2dQg2d4mnczqiReLw(1).png b/gleek-VdlCz2dQg2d4mnczqiReLw(1).png new file mode 100644 index 0000000000000000000000000000000000000000..32f6b64f98cc5be7704c6e8329824b3e0716be6b GIT binary patch literal 83844 zcmeFZc{tR2_&;1sOqNVZB+NLSlATUMmJz2Ep|XtZOcF!LzD}diVyTlYYfgwe!ltEb;Ar?6}9PEko~rb#ghf(@n~keow+ccNNZZkDeq_qTy7x^+}W~~2?B*7)UJK|19u>J1iC)IUrH3TgcE!oLsU zzp4DUEB_hT4=47&v+{Qr@!4tq=fVDS#{b2YA3?(ZyQ2N-Hj8EQG$(z2#V!OpdwrUt z-+#tymEC~pFGLYuB`J+tvg>&)mvpy<=EBWQzmP3K^{e5^EgWd3e@qCe45TTAkou`((WXSg*tVc< ze!X(xFOWrn6^Es+_w%XFH`a$ZZ(K3n$){cwtC~?Zfv2yNBawND8pPYbZhl)t6c$)o zhkPDPFP|Bf=b#Von-bc%kEJ!;pI3;~Wrs9t7(V!l-x78%+tF7`Yp~1B^eO7?*!7px zQsmltWC_S04HT$FLC;h4zgc+wA0xuw^wrxviE>d5f5nabrB_^3soNfI)&j}6ki)$rce z(R9O>yPN$zmJ_5W_wl9d>N}Y`AGEnr0=ZR|6~mN}N>^HnV&4vdQw`gKSP#SEkADd` zF5XPo;g(u5mNw~JR&eayqZgs_$4q`_e4KuW8iVw2pnkwoHuNV}{|wjzm3osY^L3Xb zx37J`F7|U(`gq>GDgF81129P7Al{Z{iKR(%Nmu$#yb>-LTkZmAwL-Sl=Ic*Yp#IbS zYvW{I`Y5(2G~VE^;S_9N`{aGEa%qI_?M(|uwtL>my3NFNocsFMXrOj{V3aqPW7>Po z`siO_0k?gP3rT}>R(iLNb7dRWw+r9~T*G5Kc70jqiPLI`Vv)=3n@0!t0D#&DR>5E$ z)N@x*=Z+^*j18_j2#k8Y<`8T`{)_d4f3j?Y1nmB-Rdd20e$1TQtj|wAT6Y!Hb ztIE_}U-9_SLkL*Uz{9a!j8o^Ru7>DDhA~wKY8?3LJRHx0C8<8%et@wfoj0zjti?|(v{w}#k85wJCnKS@Z4ro?ha57}r+*6}}J|2XF@A#n|M$oiK?$~4ZSe*1}Jb_amL_$NQ z%*#y9h{Dd))Gq}L&DA{WuXJBnHIdmXeUrovK_y%fQ{Boqmb8?_eAR9#$>SMaCIM)n>FmXF328Yheru8Q>)Gfe;5znFg3 z_A`Vo?R_!uLx&gnT#KbG4f&W$ThJ8;t|`O9#A#ZQztm&qWMpCzVh@15d6Vfq#PAAR z_x#(mWkg_aQCmCslaMC`P;<3v&J({66}&z2vUEJnw0VbI=A<@XO})v!A+eXs&}V8c zMA7uYaCTrWtj7OpE)Dx@>@O=UW?Ug~&m{A`7$!x(;UK+KlPRw#WXda$wj!ul;~)Lc z9;FQo7*&!}SRxbRDf?KPxiX*U*2?Khdj#K`vZWDrJ6*hHgtiDTV<(KnRIM31G4Ss@ z!3oh|Mt|C~v@0xfbmX|j1Y=*7OiX0sa<+uwtR#^1>4I!y)cD2?BWTXiVS_SP#`CuP z>+?Dfz`|0y+k}PDB1{y)2y4rd%7ISNniUJ&%GQJW51Fb(g^?n83BZ=+i{_>N*&Tw@ zPrzAmylbhtA^|&tq6ce+&~y7&Vi~5cFm4xU;<{|1JdYNGNf7to+J?(IQ%tpWU**X65yZ{KPey?8CPW%{8y}0x1|27mvNl zj5l%Xd0E_kZibJK`)40-FNe$5P@O$FTx~hoHsE4eyx3hy>-lgTA^Y)8)|UEX2{}R% zDu)H8bh;BQknOQY9N*>=Ca)KFRRKS7kKwRbb^pzDstj)K*%veYfw$7K1ZiPv8o-BI z#wRtQXu&D%Ox4t9k$tYsa@J@QBQvMCz}&Wt`Q2#oZK#AGvA#IQnNjH^;Ngi(IbGW`hJhE4~ff)AyhaXU>yk!nCR2bnwy@eAr$UtBRZS$-@uptPT*&hdG@V;P6#lJ6SP4155oO_2-8x#j<0`# zMl~vy^m%Ff_UfceIErSHao+ZfoL=OYMK5L3KVh-W)B9CkI z`#Uaw^s4Zr{)Q#-1Tj@#hnsNz>e9jhBV^v6!AL6y1W66?;+PKT?S6u@(IT7%gmwlXOJoa&|4aAoJuzxPEfqnv5?QSeN{q#iG-1&@z1>KTrt#Jmxo z6z04B++=+w*_bYpyfVf};K>unezykGP_DkfB{{(`@r^X5>MjF4_+DMq-k6+Rf|LNp zO~URiLU@_O1;SJ7@_V3Zw#|xaczIZ&!`vS@D}}X-5*du8*4|ud zb;eRZ{CTOZ6k#0wI;hp!JgE>TS-u7obKQ80rjvG7ug$5roIkahtIuMU*Nb+u)X`db zoXN>$J^3oLgJRVNR%1KKnHnc-9-u?x&JcZKV=veTTR|bM(b4$A4;n7KPD>!elm>6D zEciL-$1qp74CUxs8y^zw_mgJPC29t?cD1U>gy4wne!^SCgRi8Py=!u=T<-ah`9czh z+JHJc>W{vs$X?H^PcZE+YiP*c104xm@sLz4EvQ!k(b$-g|K*#&xRN8Y#ET5vNkr! zR1h)i2Dyq;Ho-A_TM$t*1C6B=fCYP?=E5rnR>|cPWAk_J`g!v)tR51uFxp(O8Wk0| z8XMw$`9#Sd(%6d%DTjSdJ?Psv-o#w5oS67zKjGOPXkp@@>C;2of@VtcAA0B}c=Z#144gcbiHlRd`nw-&u);AR#yeFp_PJVG`Jd_y(9 zAc?ccc(ezqOZddT6f^d!TiNsGsj2?15%W47MDd+?KX8oQ8MX!e*|r9V*W*X?y(Z;IEp+-=z^;Dd+@30WcY&2*J(RJYmCDE%G*A5u`xbBjQ;7?XTA@%A8?-IbU*QO`G{`OPkcTfKj$;(d%a~1#W3b zJX*vOo|Vz|SG(B-K!E4M4>-3JQX@Fg#r{lM8eshvPkwdmo7Myxne z599(~M&KR;cjkfg^*`R`|2A(!yuSKCzS6IFyv{V#uVQ1AoXMNqJAO08u6L6l0jama zM00|L&z#Fl6Kl@O2S8x>GPZHCi=KZ}s`oB_+;>8fYe!M9ODna)*}r0}%pLA2I;~Pv z=CM35>BR+K9YNQKRL&9K|6-FO1&EeX0}oHV+_|q*%jI>I$%O9wWs{YjXL>uh%u5uO z7B7&Nx*DIntz{Kw983P64XVcz!N(kCQpKzBs;jL}Q|4HE-2qEa$~hGDit0w4SCX6? z{P?-Z`U<9Me4;6nmiGP7FIs@=f&54x{;?05h~g;oW@XoDGJ}VySO58#=*a^DqDuMf zX{=|Tc;4dPYl)iX@baN#a$kZphp;ZOfKdBX^80j zO}wY{4#+`yiJ0ks2%I4B4m~Mskha)66}Uzod>dii@HI;IT%w;RpVMY;ew4#N7SCj; z&-!T#BlWJPUA{sj0bc}P*HQy=VGc$4Xn^1gi}5aa-tOC|CNn>W!j6*;!WXVg-WiY3 zVDK)wKXZM?ToC%06L!{d7`6Olo1HMnn@TO(t6CRH3sbS&g3tj2mssR%LWq~_+Uagy zlu7Mk*rX3{O=Qbhc3I!ry^k=98@a40YZG!b?h*2!@ji5E{VE@G>VYvfwBnw-F%}#7 z>#3G0t5ZXE0R)v~!5Tsy{~VcpDQQxXuR>~L(V1gu?PGJI%3^#VGNQ3fK)d@cYmv`2 zIT4t|HYdrsV%sxr4envBvLKC~Bk43M`sz0J7C2=FcnhrUkFE4RS~v5aYQm>@H1=vu z2gxy8yudkJMOA)zeELwyufR|a{%j~^o@dd0u~sSuW#8lSayeNSg4I3Z|0V|ML2rt;6|1@@u>&s@!C5k@fP zK;AL(p=qbKNI9LM75{EtT2_FuZf|oaU&|jg)*ZJ9UlCw;itN{JxS503JdX)=f4pPV zKjpW`dZy|a(%G&MbKSi;K7~!a`4x3fy)FoY1?IYE%3ST=G&TE*CN@3n+a_&JxIcZth@I6mS6t<&aeRC#SLqEWqP?oeL-i6Z$*JI2r9zeS1*pey1cxvUoMKNt1PkOxx8H;(E<}Zz=9R#-85snAI%uRki5d?{!XoIKHn&& zYGtdv-H{Sl|J=fKi;^HIPP4(ltN3U$w---Miez@#Y{c;&5PbC zZsAtwHRJ;cl8ju4_&|(vqLSK9dz}V;W$kCb;yw8=Vp|ZtO1vj2=X^Yy(CppAdbQb$~8t!A^5NxG=t))aueBSN}7eRU^pZRFZVJ*LH zBf`#-^I94oV-#ale-Y4A&Pf_mUb;u_v2_%h9_(>@Sw!_$+>6WN!G)C5Jy7HfzEU{;8vywFs z=St!!k+(wr@%(r$8NOomu2(W`VTBq2zq#yn-{7N%iW=9bgkeY51(VL9NGpJ3flv z*GfGu1PzI4-|_Y)X~gL!?nJh;L|o>ATwB711m}W@o`bnfy9EXwn}KQ4F0~E5Bx=xg z0Ot4rZQnh#97=nE;^-KZD+P8u;+laWsmZ`Y4=`7EJWpt%&wH32vsGw%?|$IYXxsSN zOOsJ#?*Iw3XsM!G7cq1*9`F0nKK}xErGOkJg?n?qB(jZwsAHj;JGv z+|UqD-Ef`B8Pa8=F6P|A+)MVl9Y%REeJt90&~rHp1oziq>Hwz_lS0>5vP7BR3Uu7D7M3AH*k_GPW;8r-#$X2TUAzNWo zJ#}>-dWy}zKK@At7ryySgMWVJ|0Z=yfPXtpg#@mYlGDg9P^z9s9<4W#dSsPX*R?fU z`wCLu(*pXJ*Q%GuKO@>FOS{}Myv}^3P)<@_s#2D}VC9fz71~GYJNzArD#~xYsT?PU zcn8X{jyL$9|HCds%EQ8h8@_<+h%25U??#54{Ye)}mw0wBASU<2%pA^`GF4l-Hj|Jl z4EL=fp|dn44l{d`o2f7LOCBrOGvw2s&0A>tp^)G5%zLG&y^NF(#?)APrEFmUWecL1 z%5M&tvf(%@Cpol3Wuy$KMFQOF_lA*czyAliXh^UP|Kbr5!l(l_zo=>soF*j*)tYA| z<@agqfM|3FuA~PBG76T>@k%_<5DWvFdYtJ1A6a4-iUOVH&rNq!6h~C4GJIaw&n63E z$cXUir0d)ad&`K7n9Qq(8ah**bT9ml2z1%LcLHcN^OEq4Wyc@`K6FN6kb} zi?zvqzNwYhDT;1--SDMfIh-0Q2b)`tK1T1&kzRNv2g}~(2Bk|FNhD0`}GrcuK1B{e?d=Zwd*gm2^6QujaGhiIk;L*K{ z;d0V{-V@+*@MG?`S=sb6gul zmy+XQ62YnzoZ<3?GF27G#aJ~Nu19rD?FD^hNy3h7IV(#w4tXwHPECq)a+uOSa6?C| zjk?h z2_c6@$=su3b;c(v24!>N&NL*^o*q&eQ!X@-=7iMHQwlRXHo8V@Wxc~#+*ZL*W7Jz) zIwMtBl0$E!S%c1O3wo|0P?NcGH#B`EQ7qb2NjVK{#-taY#)~5yP61)6TvCzbvkA|0 zerZ^Eln^7m=y~x_41ERsUGbMS0Ig1%K#nau=s$L6^2l%4Sv|nIH+MN9(2NG8P z7Q2V}p>oC<)X}-1Oryo6HnC>u?q7;nf}Yc)vdkz=ekAVB6F^vTr;E7s54hMA5f_TV zZxQarPJ(P((8lVXYSXc!!8U>f@pLV6eH)o`<#us?^hKYl3%+LFv9T}Pg#1>9a#JHr zl+uk})GiK3-XEzpD3(Ir-S1qVgR?rM)bE$OXNOcdfSIbqRc!#;$8zZ-NC5`^vp=-0 z4u9BWWTod??t-s4#LH*6#Eui}b7jeomf3j~VcexJ!9nh1E9w#o0`_j^v1!zzs*e57M)*uJJZBdBg;riO*^rzkS##_X|s zQXl}bn*12t92H?bw#B|6tuO=?|9pFU1xX}uFxO%4+aIE1z>vq%Qvq7 zKB!ex{D*jdsbsGmbwfl*5p%{FQQRO}LmW6%C|#iBzmO=Uyzt5XP^IUV`b4mFhg;fj ztvD3L1Wxfo>jEhrF)wlf!M8@R7yCpgk8YpBBfR z$Lie|K6YvmI_d6mgNeXF8e*hBv<&6yuV+u5e$cTqs6Fqz^o{CFx4?{3fqG;2B6@Qo zFBgSjUSA@q>_uD7)f}@Cw6+~6m$xh)$zS=yjxUy>1$@@sLVbQTMLYD71i7fX$k+VX zzrveY;NXY#v+=_P9~41mWi-F< zInGLScNqB`K~R5vVmm~`Pm3lp;&&iqysoZbK{CVEOxsqcH@3OIt0HbRIe;7=X|^%A zNu(t_vbRK^GF58B6Q>TWnIxHO4wNy%;)|dC89;L8#o7d1|BLpi@?!l_N}sjiscZjh z^-tTj(zeyO=^(?L^KF^)ZaikuyAXNL03l^}48Vk>Zwj$O37`<0{WR5AG=HzTMb)V^ z*5BAGSqsUfZH|G$E`x-*P^&%nnfgBo&v-wbFR?WBRj6Y+0XNv0-qL(soy5lki3js& zG-zl4u_OTA{=bi|E{1g>DfcG?qT^z>4Xbmd-_w_!%>hfPcFH13!%UzGXu#0_>1+JxNT85h!8ZBwS-_(uadB7% z0_qhU(+4VpdYf`I=)kN<)CS-~c07 zmjO@kqx5iSI|Rv4xiSt82N3%ZOS39nj&Sj;?)bxzY~svhEkXmBm^+)X0A4bl0_(3-EWOEjN2JP9LJiVq;{jQ`ncm?tykx2Tu*04WH_2W$D`KHqwr+@&Tk8qW z-M7(})i2XC7oVco1(dZ|Wp{kN(HsvZ#b>TGlz~*obVeW5N-iN+7MCpLQGH9{&6dwB zttao1^V{9>%}3ESuG7`j@=)m>uR>|-)#zy@J`{f)Ms?;bDwGR5&R+XGNhvCaGoXBJ zFq%A74^Q?Fkk|{22tU_#H#7h8-saa4&lw6=LEyV~lp%`&b?f|DgQ)<+(Z@{bmzPbO z*Se@rV>xT|%I2|^OEvxQ5V+8(p(EF;GNEPjtL&E2T)EZcrO?WG&5f5-oc!7-nT!4s ze(V@1(nf|lifs|wc4}q{mJ{BKBx+jlvrX-S#sF$SP3A_7>`RWV=F3`KlH2L#Kle z?TIauvgG7LJ;PUb_o(F=ocv_yd(5@us*H4HA*(e9spTk;wejF)Xav74Bhr6l-pv_F z&bjI+_(&0L%~k!#SE<#QDPdE!l=(Fj|-Ph1U#4F8+qy$nb^)IRPhIKU?ou(>vNc!gA`XA~W>>EHU1AMYKj1_O_-}8J4{u z8R9;=PVVa3{x-FTQS;PI|4n))v@qgaWB!pnZuM>sVQYzC8{NS2xD~u1eFL!KY-`QU z8>`e5%T-osq8fkkpiD-5Rk0d$%+mMPMtC>8$vtxBIQAjEepj^4ppRX6|?OMzI($|S`1;NQ8ACHJX7C}HoxA@$R7tE;n# zXf}YaZ;k{wLATnR%5SI2_}qZ>`f5MC!h5(|deUIz&K8^oZ}AWwXwM>%8?igeAE3I6 z7)0Ng<3wKA`7H(}iZMG}I3P8Th_M#SlMV=l!b)?%-z~ZJfZ!xKafase3OA4_>kC}e z6TgEY8)l+@@G}^`u$23prudzwQLZU5wG^BD$-~saD}q* zj4UUOwH;C!w>StZ>!{qlMJHH&bbDoLK?_@Tv6%FlviW;?%02QN2LuzjH5M?fRF|o2 z26;z-kMiL~r1ZjT+d7*k)5k%hpNuAu(r9M+6TZFqk1B3y!Cz)6^c8yX`N<~-)U0CE zI!{qUkpde{!L$(M`dGJJZ%IcjgQ=4xY*Qo9TEn;9#v>$i22C-+Rx(c(2yL;7BCO3b z)0~j{)q5Kf${m7C-5vQbXw%*kBoNgKKrztr8wX*0dH_q`aOS973#WVFy9~9jRY@^n z=hEpDRNjqO@c!YB^8Wp>vY0hx-MtaEBYx|(n&BGkEzwSH0M+Zn$7qJsloRzs&`K?u z*+W{TWzw?mFc<8N9j15TtN?oYT%^tOkbngFVYSZ-Z)Lj0C`KOphVsP$DS`?@N#b?@ z*T~wpwI_aRAvPt?6l39g_vGlt{5|sdy%<0bsSwvWwOM1rCWGUW-IeX+$h&X@#>f}V zgM5v9@07jGUl-xB8gl^s68kn!SjOMh6hzVk-tD_S0a3W;fM6BD)z*C+s3J|WCZMPsoj)4Ou=zZm{w!9{W_u)SN)khjL^z^&R9JafI8k!QdN9%Jh z0TjX;&&*UEjNs8={DZ~|gHH9Eg+qM7Tgro`KKC?0vSAY`;9Gx*(W|t82aX;v)PBfF z>u?k!h8`WEHgJYPZ|wxH{aotBMS~%TS7*hjg@R>gZYFGg>l#>)R7Egk=y};q*&!DA z-i^lgQx8$#=i;9NKR>LBt$G7|>x&LQ`@c#4U)V`0^ag_;^9Pw%yu<`Iqt}F5R3YQj z>tjw$Htjp+PhBhxl}6I%UFh7Ai6}WzGz}+ThAsxm<|PwK-?1X~6HL`S?+j0G+RD*` zR>45u^f!MEPERb(8Hk3RVlB%K_pC41G#Ds9ivqz=ZY=TjRrgqSNaU4QN8*5C0VO~p zeXB%Cj45(orM@K{6a8>u-j~ZqUob1+mj0}+B=~_Q=OOhZZ;w*>|x-S zQ{V6l3}mON^Zhn+tV!Vpf^+>RvS;15ne*r1tu2M7h6y{Y`x#~Wto{gL%RqDJ zkh-A#p&}4(h;}xPk!mgvR-$8nfhogL_|0}2oc<=cRrtME+PmDLCd1-K%*!qCmFo4A zq5G7mOXs}Rt|@U3w)S;$M)08&M<#EHvt4(nU}||&WjkVW=merT5&y^M@&4FavFTtq z{IwBrIkVbaJf|yDRIlta-GidGGZFdbYwLZ7u(3O&Ziz4YGF9`f>JUXboVluPM~qEw ztGW2-ANXse4F4Hf{MSf@WS>QS(E|M^(yxeLsiy#y@$ds#wc&`Ko&BQB* zy&&#|^$W0*Bs+yQ*^@QT$eb8!9!O@%yGraru!eH3F+5#oW&ic&+lxDo2R{ zc7h&UbcZ;HG{X?n2Ze&|xwJhRK@n8#f=Q!sOX67n;r%Wqcw=F2lOaOUXP>9caI;T- zv@BDhy*ceic;af+@^({e54XN^0m7%r37?DJVh`Wa6x%CpPYx7l?Sv+Gc#lhdHf}Cp z+?7v$+@b(T5Ru2n%?Qc{iQPL*1m__~h3T(OvwCTU;6meT*})3r7z2l?l)ccL=b={q zi3&o-y9y?Ri{B=Wik?7pKB8EBcC848h=PLq@l^mdP?8TT7m8Sof-=&(Q~awZqP+uF zpJnQY%xT_GIb8NuKpVVY%K6D(>*>JY5O#j!o$?*!s>`Kt zT8}B>xOMSSNf8!LGHoG3uH?hZ-AwKW?gAqUJ;L9m{!qti9A}jfl=ZnQ3?~GPBC;=Xiug6B-#i500LAma zE{0HGoEtsJ_cPF|z%iTV)~u?i>^^Ek%<1xA1iG5P44K;Q*S`|4 zl(RTwwhwvE`*J-)nY>w0TX@qMxz^EEVc>{K5&DZoao0(r9gXX*=PDx$*7#X26_US7 zm(AT;X9wl11N;2uf-xhGzUYExieZL$Pi#}HxxY;UW-0JXO~_N!w?idVrtca5gbfor zBhtx!rJR1iiPMQ!0=~B3ebIU+x9%-l33WV}>YM_8AU=4$(xc|`I{$%bM^1nMI|Mxt zom)H(`q%*HZyT{tDfe@r2E|ZuEUz{|3aHMmw6zR(kCY)Yo5+g`P1< zC}9MR4Bc&~h?-`RqOcxfB$4J|Z53zAs7xcH)+c#Wx_u6e8dwfJ>7EO82VG{Xxi5Q=@idCcb`%Pj{4g`noj`{=efN8&H#}2|0Ydx;;*7Mlw^AspA8jEEW9u_M< zIx)R?ufbBeyHciq+^NX}Fb0MSqRI5dP6;aTAfoGpL$vU!wX-kKeO#8s(~kXB^Wq(XUHqHsaJ!}%j6{akWQ_+y za8@h(rn^iVuCW(S8&qgpjF|v2HfdB@a#HhxU%;6Kpb~ydA$MXN$GY;>@@y+YH;83{ zUJo?&rzHb*Kc@)_9DfhFpuI#~&X5R!uHnEjD1r{xzLB1yb{P@Qj=dI{fJ zfd%jQE#W2ugz>nuP~GF>1`7Vatg~$$3dmjmfKjid&MBL*dkhb!t!phg2qbWVg33Jm z@C~aY{`k<_kIA+cD51Et$h9<5NdERc1lGzMex@|OoW>d=-(q+>X&>N;(xmnR6-kUz zSou`T7RBNMGgEem=?E>6G@a<<&NuC1;>yN|nCHHA8h-CG%iM~I6t#PNyFO-Z)y^u_ z>ept@;M)Mh7Hxs0FM2z1L^{yk;j4{Ho`|s=u~%y44u536TJG&+zs+J4al7NLBo|-n z)7cs;Eu2+Xo%ggcAHSZzuEwLx!Zfml(4mMVL=sC7=tj4Q5%zzp7txd+2q4~@J6V06 zimt`OXYVPyggZ6S_E>6WI*$|aYIzP!$@@c9RoTOwUy29`!t?muJKV1=#S-N6>H@potf4Jl^W2cf$93j15fcS!_s^W_*LH+B|BX=C& z+Wi`SJPh}$^U3r1_l=cH<#cC;-piwRe{pIzu||{8_khk*wB@j|ITgivnW*{OoZ%&X zagvrsoNC_(-#65@;{rgEGJ3n(7%Ox!V$uhtM7`MLE-;P;V7=M}RBT!nqTI9-(0kp4 zoFf8~yEJ4h@$w$tx?M46HSH}MjlF!GdXP^G;yoPwwNfumF6?`=*YAjrgB&H%XVB!I zNV4xKi=ZN@{7|dQO~#6{Fah?2mWLnVme2h?WloK{b_cKq`B)tW9TfWxw;P?)CBWV? zKkH(vZrK35ZHo5R9)q~{W0IHv36&R#A^HazfLHC>s(@aPXM@baoWvfUp>a=fR(m(# z#42Z7E8QED@3}EkV@SEcG(t+R^aEQCbp1ELVM^@)1<3h_xE594&;s>5TY71gsb82o zP-cdnkz_TB8td~y7_*_%Ut}vtdQGAw&9WvR@s1_1eXLXe)Y&&@CLGsS>bGO}UQ@Z4X+`@mH1q>rGo-?o_2EZ1}zcGj3(=2-`7)RRV6)(y>I4vzJ z)#hDHAVXW1IsQv67?3^ne(0~V24X}vl4b~ob|5XXD#nQ19+VrfEhtmJq{OjFw5D{? zRl@AfI@e@FO*vouaPnyK4YYOtu5=E)N!Pe0LdX5<8kVNHlAu$9c=TvLy{poD-m%su zP-k)h!&M#J@6S_o6AUrs+l>W3FhO95OKSJ#@70`dZIStv)3XJmvFy&k)Kjq?zUDwv z)vpZ?*1i5`zUJdrl`&rwwC-q>5T{N}%pWKxLsX`oHe761m;SRzCnp~ck62Y*LSfdV zNE|%qUP1(6M_523Nb*%?f5&16Sz*G5ZiWVMOlE| zBt3_)%_H+er@wQ+Iva#HaL%yj7ly^3{5Okt8$Snqspcs0QR#NX+VTCE$m4K*_-tXw zwQ(S4knf?t++W|r=_K+~gV*;lK)FaLT&)5*lq#=m-j4EfmqRM9yrUUlEdATO#n%-( zT;E+`DhK1RsJ8xh(xn#Mm>@gM7%@TZ@1gjA zObnLRL?)dn_R9?Ll6s$(_X`EI@Qq<^mNtV+2)uL3*gg}FBAd#(OWzN2imH9Xxs+s4 z@hn}(RbvhCR|Wd}V};^^8$hFQ&nZJz)r_TvN&W(6+dG&ga!*p}r z>fLy&_l!eCtYXQ-dEeB^YI-QBc*$>GwGd_$7+}%&rF|e(;YGgSOeh|c0z_J&pu@oa z*!%qXS1!vI%f8gt%{zFf{RbSBT1xu9cH%kpv}DGKmzOmWOvEA0;hvNr^urC%$+0me zlt?ZgSjhDzYEs3Y;Fk(DKGYPrm$(WHl_`zJ#g=q+r6)_mJ(G(+guBuBu*i-;%g4jD zn8E2+@umgzznVF`iNV@QR|LAve%nV&DvxqIM1j@$z1}!9uE3z2hyGT{`qgC&XSH1A z%5W2{T;zU6O=WR?nJhd(;8lM~|yo})vcmjc_27w!gf8X3z$IXNI;^Igo3o$4A2aChe8_m^UvRHN_qhzr8( zSE41H)2WT*cnlYs<)VQr5|AIGn99qNy`3s{2?t_H?LHvHq$Z7u)g1X)2HIwtF7@|t z<%;WEXs=-0+*oE0vnZ`}X>~%OX6s0;Il03%D^pa8O}EEpOghg|6wl zM!k#8c%6F(&NiocbLdU#{DzB@(>C=(OTe2HwW34NKsj8 znxnQo78Z*7Sgd!?}b@{@CYw4wI?crzGtR0OBeG!EhRZPe#@{622xjw z*TrJ&lU#iNhlZv#c=SP-GMAxk6W{}ycuF^Xe^|r0yV>*BwqwkC&@B{ysy50djMGm@ zqVUYUd^H(qJw)d(zHuZdgbQuv5V=kv?DJd8E7Y_%OKN-CeA!8_%{?naeAA>B8ZRk?trbn9i@`xirww;s@R3CDGMAWwt z!8$egN9Lyb10nW4kVAyd?8xGwF>dG)|JGX|zTHt6CJ{hoOOy=tiBd0GtEmGD=P?b` z_mvh( z?PFDA05AGEm#8aD^8l6ax)mc6LrXu3=z6u&SQk(?9qz}_r*3(qr4DRn6xk;Edcbj2 zeoyRD(WKWDxX}pc1=x3wBqVKW!)7d8d}ELtD-2W4mK{?(`?yeZG%?_0Yy0oAai{3i zyHjxf?)X6Ij_8z2Lj8I+)bngMFHSvP3SHMST{`ImNXwKR_IVFdI4qCd{8R2?16I0V zN_*dW`XZJSebyv8HsqwflTJFl z2N!6xed%WO+uP9;HJ6Bv84GbRr~L7+a~h&u7(G`FdpF$Q+>dpjrLYXI+2IifV|d5n zpUFFDBZ~DxTOMVsocWx42&$dy*80=KvTHf8?-?DFjS=hArYWXJ=C8q+($YVqP}r)E zZ0WVdgvY4KIMWkJr$A!VPjVaa8#T|HXRYt>aW|fRV)9Iyu?gSWg7f~U%47|~sjTN2 zu8#XQuvMSc1;YH6k+J+_{{tt?-oJm^l6SUS#EMTji@E&PN*CE3{vALG^`XDn5v4Poy60_zlE>@$)|jx= zD3Ou5wDCYA%IQ#usa@eXh+}SGKF*(YBcT4=##~Lc9 ziK2lJ7E0ZK(XD1k*g1Fvi!gpC#$33VD>VOZ=5XX;ylkfzqVt)$3rV#j5ZSTV!``Hi z>**A&bQMYh=5|)|*mMmx)DTOIrj>&GU4+4zZ@sSGf`x~v9Ci#IuwLs^C@=y*Mf3N+ z%|Z>aJSwcbIC7^-7G#H9b_Kp5^tfVuMJ}krwK?@_Khq^>gxirdXa99#MY4n5-ZSf4T^!r(?8{71@r9kwFZnUhmn_eB5pl~{emXH1b)cxdY+<4M##~6!&9ye!OO;<5|2`>EhXFH^)KaWfRi)7 zv$I94%!EqJRg*DZOg>zOfrBoxPWrowHP?~Nj7V%DpIIYD!PeU$vc~6}hl6vsg5$-WU2W8R!Qf6s}0{3sPC>qZ>?Rl>uk+s0J`E*853pFoyh z<>UpOMsTygMc}Qthaenfrgwc-E4(NQ;o7j5*;x~k->zfNoyHU$6L2yX`a(Uy^8>x0 zz$ORZC~I|EBQam)jOiP*7s4Sn_?fKWD`>J|rXFP{v`#Ua_1p@&SHBf|1)e_Qd@R?5 zixlrW`BB6?cBI7^na)(5Z{-?GI_0P>^rnNUx&@QpmZrQrjPx;5qIr8v`bcPsvmV1Y z0E*;qzJVW_^O9h~bO#ifc&!bfxN(RL;^>}PL2lDY*-z*(5CmZ^0km352rb3?V_a$K zBxDEUt^?$Egx(KX1UJ)4#of>yF*#%6Nx$yvN`XgR{S@$oD6Q&H7QG=bu5fwDlTn64 zi~hS_;2i=cRH~e27_{;z+n(2Sk;@UGcvJhuSQUd*1|<35@dC~LP=QiLjT-X3X?!EO zfP{e`GWe)apY}m+H?c@tD>O(zKSOaF&*BE7pQ@%e5~=KwnZo@K%_Bb~-CyJvjJv{V zB0+zvd@y1Mk(&oYPJxU3zJ_k9c@UD+(_(9^aiVv!K3@!TGW|{o#hb=f3XV+uv z0CLBhAtykEFM%boTnqZNm+OEp5RKaAd2P^IPhT(oQd5 z+l))#u0FHJJf^fNWuB9ef{t|^KV0*En1Crx#cOk*YcmHcLYLaGZ^hqJB3eO1zOmjk ztpN_^)@?^_<1c&S5zOXNcMNJ zj$|4(y2`mu-dGfBSnCU52@)|!9{-{RD4kd;xoBzn<_*QIL4}Bkkb^1DyWXB0_X!Ya z!MI?iomFxl1oVOW4(Yq(YFJI?k9w}468dW!yX?3tjEKoV9_1~MfeBt z_3J8u(w6oQRHu{|aWa4k?bb9!bY3Cmiq~MI{Cfe7V@EH28M;t5`FR;%BKam5_b0Lh z>96NZT9@WNFLRFz$i@w%M(W3LkyXfyd~L1}q94#h*&G_pw|ucmExG8ZOqcK`m|3&doBx zS@HJU$fxIK<*S9j$j$@wGVF7V z(+Mw8SlF}<-Y;#nwqv^z5x*!ygyU3TuFtF88-7>bwH+49 z*CTf+cfPKPKXSK8vSn!nbW_AAUSPlWV###m!m96Wale}K{Ki!H%m6{rk2BrKtv-{e z_r7eN=Jr}GZ;@XBW4C-^HGZ#OiU4~O#kinCq@byLZmrz)vMtCmzr$(+2H??HnOGy9 zHr1*+u4H`luljJ`^bMx|V{)FOtrfsoYaJAam})N9lfWrTNTLX;u-<;T6rp@gbTWk( z`Brz5v^Tc_)eyZn<0$FYB=nFNjhdmY*pHym`m6iZF?6lzTR!`2dI7&t!K-)1+1$`b ztjIR&M!_^1yW8F;@##Ek*4e;u?;DsQ+Dx10PQu*5C`Hh;-SO0vX2{k!Yk19mAa-La zrBvGa({!70d!7B1aqV+%RC(>XHl>V26c9V_%h|Ef$W0TXTpjl~P}DJ_Go9qyj7c(e zbmUzO--pbHB$+_pYGSz|HDJk}F9*^&;}Zb^6; z0p|J_i&JkFcwUxc0F{a<-dS1u6MY?)getiO^;Q2h%K{VU`f&6<<61YA| zH{>a0UYx73g+yYMv$N7gNpGA4)BiAB6*_WM*Nqm{+`Fdoc(~k|M6#L;5MLBtbH1#{ zn5g2A={RPCwO(ZgBfq?4mg^DV9ZCif^gF(5nyyY>Al$ z_ z`p3;nvX1GkvAvH6oRWDB!yGh7ZMS zDVa-of;TCNYnSzY>h8lih!bilNppiW>JJHJf^YD+&8NLl{1;(mNp^FcDMXjKWXr6s zb!5}RVYPNd$F?aSfloM`B73lcoWn_HSg+r-Miuvk=*%RWr$%ssn~kyWolacZ<{Orf zfWC0yMPa0Ap`hH5iCi>lc(@9)kdIIfZhg40iSOyP^WqH%Q*oV7b0!^i^d}$fbacFM zG*Q_dyuK9MQ}<5&uN~;mK3ZH3mOXf59PA+s)LLsm!#ou`?|;1qYx)A2PzGF9Y~JzM z$3+sdOj4KDMmt!0FfSEUk#=U54nlH0uSkA0@e+I;>Dyzq5|b+bAc zDzaM#JlDHv#!k0HTrGag4&O0E4LIK!wbi0K5XaOp{3C}bHg`p3*a`^;Z{IN3W z7w5mN0n4-d4(fxXEd`)2PN5->r_D&dcZA7WqyF}7gVmb&3cEt+X4+zLA*jzk0}zut^(wOzpfF^_4#`awiv; zytUTQ<0Ke3-Hn=;HJyu}9eIr0&%g_Gqg<5+H;q!P{dw^{6Dn%|AOIT9ACT%B%j61a z)yUI63~}z@2k^>{W7RL~HX;=9wyTyBse46Zf7e9S5pbGoOj*{kx=Y0ydACG@X{u_2 zt=FaYA`5gtNp|nLvGG1FRuA!3j9kw#F!K_YD^$yMUnQZ@r9X5y<3dQ|_%NEP^vcde z{1<*HYIzZAk>iUP|>}_O|9Zr@k{> zckZJ9K&nW6-c(}UrWXhmw~vPkycl2Mi=#SoS)Qhstai~CSNuchKc#G5j`+2E+J9}{ z|M8=HXFe|lB=vX>_#6~HI050>a?`C=epiSp*pMl+TdJFnoff@(EJ2{?b7&4 zcrS0C*3KT$6`$4hZ%c0N{l&5tb& zt+@6}=6XZgz!=hpQ#Vr)PT3Ek-Epv);iAR_OsP)r;=8um7`Gn(4-<{vl5GzC<)E?= zWc-g*edd_@ZsiXG^eNN$EtWGcPA4ghT>j`DC4LoR0tSz?yOq*1{ejP}^p0m&_-p&O zZoZmm^|W;A>JPV1m`>S!3YQAPU$1#pwZm@zPmNa3IS@3D4+MsLp3{!i9E`V32i zsoX6+FFSFCteCLvFTWUpyv--`2w(Z4`lqJ)?~aHJV_(_|k{|sKRUTUhTn<Ujg zXLWiwCbIzsYnjM#?R`oqZzREw&SWM#@$vr>AG+g9XPMCBYym#cHz=y}F`64@x?!37 z2~02(9sh|S4SFrnWC1Gc?zD+7{*oJp;5W$#*!N$9i~dw4nr9=1=7StWS`Wa>7;txG zJ@52bJu%$BUwD=Pjw35kbXVwi{PV36#=mEZlpS;6;Lo$~${8?VLe6|k08=^p=GzTg zVFy6iH83eX{u2_yDYGrD`CIx5YlVFi;a zgOkeY{yh#}S@M-opsWP>_#A6(c9d*@dQY@X$NC$@1%wxvu5c%xOcTuWp=eu5sHb3l zhg)+BqA{TA-27+l(S+`9?y5Hh?hw41LxJI~Q284(`Qm#(OcC8`P8OwLA1@Xs(im1e4G=1zV`xkjI8`TYD9{=gKcm7o%_<_xS?4|^9^ zjc;@%VyE`IJOLyKe-|=Ij~{aWW$5A+{mUT-mE$^s2^0oor{+i&sZ2nk8nzNrgEhle z+rcdN@15OO`+8-%%T1FdiHT!q6DB`AeI6Pv-XS06E*wBKDoW+-t;y`9iDi}}3Q^Dp zLg?*qDIJ%9mYni(s+R%F-3w0oljxd&zV|lEih`0g@90XuENx7s95NYNUG_IH#!NB4 z1D%@2U4?o<117!#px5ObI8>SARiHFKAYQL{QOv$M!x!|d8#AR&_#WiUmxt~J3Q?&m zm(`SAWcto?FxUM-_FB~RKzp~;*Swlb54ax`2SV@kbQ8YRVHulC^Iy#Vu4lYtco|y@ zxNipd#wA=>s%vwTl|-wLpIP-|fl+9e6@w2c#3?X#-L5p^0?Mmq%Y)3j3-hb+>sS|J zoZ-jLlmac3X8QA)EqF~vI~t>b{QE<#!}LeK!Tp6cT{HrC@D+wWz>-UE_<1vQ4y zBE*>#L{UaV+Z5oz0>t-gRcyBkzcgX=SK`$$x18l{8tOPL`KZ!7WAbuU3YB2sd^POn85hHJTsHPxZsLR zqbo@y&p;Jm`Ah8>F%Km8fa404$uhY}u@C5`)Yp_>nqT3WY!(sc3Pufg^M<|V+gXBZ zH3>KzW`L;$Bk1Z>M4~9VKDTcc(MVCdQMWB$qsJmC9vgxJ^3A3$6ewgbV+@*FI>(r* ztPgWBTT<5E7uQc2Db4KS&))j)L9qBnsDm-F&0NYy%W7$&g2i&e6AaJ{m5pzka4|V{ zsXta_sDR!I6%9Dm#hUVBPzfkR<!W}>clI`FtvBV;;t7PlK=m=xQ%t*&uKDfD z)NutBu7TVSO_e4AS|}cyEd_dms({dLPiXCs^>!)tRsZ;ln%cwPc^xW#X6W>-T%p_R zu^0`M`lV^k_9M;YK96g1=hNyN(M;3AZI0_6Vn^>Xy)aa~F0~cIT^W|mPW!CGvE(_?b$>Zo>eM8-vqx&Rj5z*EuQF{QUk zT4?&`wST@b^O*!JZZjzzSC%i(tSMe|`~Dat+U2ESKd}ejm`GhgO?BOP#b2#>eBxyx z`>GQuxf69U&C5HCN%14T%VE=HU=*GI1eg_9>rt|kYg1y>rOMLq$@tZE=qi2`LGs$q z=;Mx_01iAaj^#oGSGe6WtG0RxRn$U#NoO(xG`#9-=&2zt2|%ftqNqbd6DXg8DO{qw zy+}0ZrQpwKY8vXX-2qkhVoLaZ!h|!BeEq%_$ z9yq6e9%QcW?5^L|SO%-ck0?5rcKCp&rf+dNm`Rg!#V|tq(~(}CKi$E9yZ*mgEWST;6q>_B zw`Gy@5b?8c3wS*{;y;rondf5R!OIz$r9i;ia@%-i0Bnp!H)dF79gy;=#^?twd+o~0 zECnOUkC^hw2FB-oqJaW4?K*O?cU<3V^c;&IkddT`r!-w>k!1hAgs08jE5H+nGN!zC zGCWLrcxG^Ocb*G||Ccp@ZD2zwp}x$^esTnTd*h}4uVPG7N6gPaoFW+0L1hw5CBEz! zyWY9MM{d7V=E#HU0^?e@DcN$dUsb}@%Oh(PYL##HTT{Zv5=I*37Aks__#?LXv)LgO zzkBS&|9Kxklc+JxHO2s8O#4r+L44K~uRQZA{Du%&k3o}WEf_AWeq|R-4;db1(W1ygTLSh*15A-9z0=&13l)q3LSa%DVlC6-UfcwuM71(*5WX*fEb3 z8KBVA4bpt_9yAxbBkX^kfz8Cf1T`4YQU?dc5K13=(I`crDzo>bGBjf;BjClIyZY2& zI_Os;zE|RYs};WW4BtCtq44fM(BZ%Pb{pTkf2P>V`Jh2m{u1L|L*m=uMNp;qHYybm z@&8>+{*MM*i|Z`1#2IDhk3sHLa5xoQc*yPkpJ4J|O~|0XMg#hhI-=by#B#dT->p>; z-&Z+-|3xYMFTVUQzxcb@^1n3ZNOmX+X4H&%`nf!M$QzK$slFzyS4(}}mk(4dDn2aW zrFZ<&u2q?IqP2Vc;#uT0V4cc5T+`vCtW4k1!R-z-GY^hs~7N z5{X4ehVMol^A+9s9`F3whKRzSZP)R$#glu5U9kCqt@k|PPnX>ncz#$V(dskHgXv|n zbquaewhy*t;AP?>)|Zv{>98(Y6y-eH7!O$)ir#qBQ`za75D+q%J@c@>UFS zr5t>?-W5$;NZ0R~XWH^UJS`vlbAgzvvBKxVrS^?&9E+^a5dh|X51m5F)Hq%HF`K+C zx72Tb#1ss%;`T5`Wl{t3z{BdotWEPPj+Q6nHCxK_7doaHJyxC}S}SW6DEPdky_~&V zD015f2fQ-Ir{-k6-?Zd`h;0sfRQ`Q`@z3~P&d1`miPA*{$eqBKnhLzR{xsn#G3^G> zxeo?VlKBXfluaikYp%n2g$6!)FcC^Wy)GY2gU3?DB-d<UYlQMX+Ew}mqo;}OUA<7u;|6xC&{dwhA`3ufZY zd*_8DHQMvH2{o7~a)750p08a#(>64FO#q=zVl~Si;v{I+suCVRwi^H@MZpyOKG7Cp7ry2T+|^*m8bNo9PiqMSv*RA zT8^)tuLdVVm3*|aG3uuf!|g+ClwhcqN)v~12PKY3g1R|Rk9MM zN1IzStQ3Y6e(c0Am=Q$$&fUrXV|9d&$(o0OyI=4YvA`hUA1vFIP|TbXw}6OvP%W{A6ShlkC`YkCUnVN0z3R95qF(l zv`EXL7LD_07HFEjrbff1EunLjUFSSk+#lC+^(#lwKRxfE5Lk1615`_!7$u6Mcx0j4 zah(ZQ!#~nDnOJN1ghpImwNB<*9jCJxMu9IsHgDQ;Agr&(C%OifRr(coHb)dw9gTHU z+VDD$k>d4nn+R^3mya#8F~Slh9^C98gnoolfq5mA1WGMe*jb*OB7i<%)1rh~47VDp z+LArRS$;TBKv@R6Kf|^MgMm~-!do=Z6oYU5y`;o+9kx)~v#PJrBK%_&E*9Yyx6HX= zjw_GDEiS<Xp~XmpIOD4%?8kh)SyzLNG@088l(1_Z zfd-C*@QU?$Q9^h@%aeKeR8lT z^d~vj>C+G@MHW`rElLP^Gd7~TKtZti=x!53NCzLi=B1!yaT*>G2d#vWxLLMfi|XpD z6AC8xWT?o_1}0xg`jV)6qju*q6v6KVXjN>jr_mVzH7#7|jG@f2A8r`uUf1WJ7AxZt0C zaTRTozwR8-OjNw&ai+aF7UZp((AC*zb(W_Z0S<)O!epg_<*gAIoVW3rDFku%M$>=< zC`GQpu4;?8yuHQZh^`_xT{UxgOb!wA&mvYBwN%#*b&ak#a^MQAvE?}Mv~$+?49}u} zUC}11w$JyPjf$*px}PE{)zT?AaeJ!bh?o;6du!)jwYj^F!kThc(kYmQQ1)CK7@+R@ zkr9f&98woRHurV$$TshDtaOap1|^+#u)S~MexrJnIw>Ty`urc=B|a=a_&v^~!mN?h zHWy4h(?5O;zhuc!9}yOtCLF+$Kh16Ks?Q1uNg=!$0@EChDlN#ZfhWF)Fm@2YdC^oF zn~nT7Zi7}LqaWli8HN`?Xm+91YPGRrI3-6 za5ZP%3MhnGRPNz1bIUc49vY6TuN|w`t5h7s9VAth87eNLyJWG&lhgcQ0X|1oNb>>$cn#((|6=F* zx!c@|EJ=FY`|`)__0LDhjYKS6yLbkn$lLJ!n#1k|TF8wz_tjV~rV(v^ou$OdCxAa^ z_s8}62Krl;JDg%%xtVBI>Vwb(2joDLrh1&Rjqv_hVevw|rI;l*QO*S@q7!0AaRF&8 zT0~vT1mzfK5aljV+mtg{!Dc2Py9(B43j((%j>K;TE_L<&tXa2foOOxY@00V9y_4m@ zFR~)=^Tw>_dUVQ_r0)V5YU7~|X-C9)n>M$ukngKW^=;y*!WVIv-}sun-vD7Wr*;M^n7vg&a4$CyIiskBaV*Hi*!LGISvo zX5LiG-uYI*Ew901cysmYy*K_@&$vdyN8#fd=q32Z05Pb{AO|}Wbc)WG=QViBoB8(%ZN#OeN884@_7=0`;p_(?OrKIF*%?$^g8qoHg1Z67Rs?FdpPQ= zuxZDe*JAD-)Oy-Mwe&3TzbY>kwcKu#{zg%Fubb&3FMa=jum9Vc zr(mas{^w5JxyiCh*`eAVqj%}0_7$)kc!ZwQbuNk3iqp3yq6#g9EZ058PE(>A**K{q zPz(3Z!m?1-aV<)v#!0`uy(9Arq7YX_#yU|s-Y9-_22wiI(mO79Jx>l;euHO7=Ie&G zYur9=dRj{<_kPI2w$NxO z?H5TAnT><(f`f;F1NC-K%kJFb`6#Si5v(BUZ-GD;0Gch`9=^LkiVRfW$J5D zECjJ8x2^+S-J{#3jH_K3Ly3iF}~<0^btxzVI`ngUo{h zu$av+Tb6AEUU91li{g7z@7IUQ2f4nC;O@Q-#rrtcl{3u)X~fvKF>hZDJbknG3(kCd zX;Z&2S2wVS@sw9cCF6hv{n~P;Lt2rOY4G8U^wYR`> z1AAcR`Fq`Wz&1ObwuSzTh&XYdFZgXoFvNZW9yFLMOXzg(-tw2Rm;BL-Y~=3Uq!1VE z#0-~1Mf|PlD(-e8(?@&Pga^g4(-@{4x{%@39^RKIv1J#U1?&?aPQy!e^3&F^@5|xg+^V+z4yo~?@1LKAyhS)D=X}{)zCK-pDh*o# z_6GkY9#|zpJbC|*-0g284jIo=_b`?7%h=W|gs(8Q1$<*yYZheY2l~b?-yesN@ z_Fo=$_^Ie(6<|AOwYd5;F3rSKg9xQ3{e(NW{9BU*KULIO|2t2lg%$3hg@3V)_%yob zCOC5jW)_Lj4uebeh8kQ$ntzH*YJ9aQ}*CbzCk?7Q>{YGYC{BNLEbZkgCe#hKI#mBqUF8?xBRO;(9Q+`V;TDPJn2%q9AX8XX+1P^|d%13={RsWcD0!HZ{LYE>=|*`*yai zyVY#cyoP6p16;8o@cZ$`W2ZShI_oBM2$j58)W&R-+pJ(&4!U}u7{r^);uQyLc-G!i zF&q#Pb`^{wYAL1PY-Z%_R%TxVAQ5luL4v?@gvbB3LcH}`+}hB4@#H!PYcKychCyNl*W0vc5gGr1hdooN+pRhTO2&DlNgoIrDh7MPpITP0guqhB;UW2=sq_(+ z)dv~{c35LgmLCc9K1nLWah5BL5^ulsU$4QcChT{2gw-h7Ihpi+3U69l9?X5mnTv*D z&naesm!d;<=5L&2-0#lF8a*ex>AXRcwnJA(HcEVZ&2zvCgL}BEY<_i_3=ZODxSc8m z({sd8e|VAWAZ@)t2DaIg06vq=2+!gJdSB!7mjiN5iapKh3!21k!4(BvdnYiTTR9iD zL+t?MKLRGQFLd=Jr)EaPbZ1NP)r{voAb0Q6@JcK^OnsiZ2_RKM1-4p) zEa_+|Xk{8l8B?rCjK`8aIL5G9OU-lr0o4mPPyn|~71Sa8<~7gzAjL%`?vF5ldov@v zTdfnNAu}-}x{STSVmPw#i;6&u6_04RPc+%wUHeP^(3HiGZ>&L{Gj3VO<0|;j$4@V4 z#9MktagcoU58LnKnIz9$3hwc~_sl%o|B@_Wnb@ms3{7{B5)vvxHi>2@C4bQpu3de4 zGIu2RV&HbbE|9+rVV)~ijNSg_4{Bhthz zq%1g=P@p(CL~JL82zn!;EckPS!ne*uuAiz#sS?#D=8duDU8GOb{zL|+Q8=IpQ%uJv ziX?F-dIv6rBA|kE?KE*`u5XZ=c4mk~UHLI((9IMgZdhfB$G7YhQw+5N7KRPEo4Sz9dm%-&z@Qi$WqJsD0=J*Dm zWU2sfe0AX2DW{%?7;by#Ddb-iT$1*kEg`Aa}%)1kD6_?ByMrZ1^)jG*h9zpYtg3>^FpTjM~TM3IYS{somV$F<&D#%9B_4DeGzV?OnAs%zd@ z%XaCnns)LOWMgX=nZ<_*qfv5`o{?%`EEL0_}Qes!LKyE&KW>faB&j~7P9f8mN zO_Tg1*v6`y`^`Tnz6ZZP+y*`VbblsB|H9VVf8sfSaW$41!57jvtKR^x2t1i#pqJwf zMSMPYLE~s|?E-4kavihKRUa(CEXR!I*=;MQ=fh8V(k;I;OgZ_qJJ@xy+ zJb(`f;^X)zr66bYODiwF;@Vgs0~3H<1#|G+gw`S4Wmz=!-dG0u- zP>Fh~!7>ZDP>yl;?x#07Zipt5=Jn#Ecl+B4pma=n4GDoa^~U`u2qIA~DZqXRDPptf zBnt5enl@~ioSy#DVnU+pt7p$3j^uY>u@4OG=|rt+GsJYZsJMP&kd^GL4idc z4=QwN2ml!kg1F&{26%5qyAO7Ctyj>OHU-znpf|2K`0&c3N2-P_Kl-h_+HYWn=K+(Y z?L9vJ5S|=_UJ^g3I%2wTp7^e{xTSri@H~N%_4y^bZvz&RbZEaZ`b3}LPdVjU!$YP{ z)(EV@3VKh;-Mup#RZPAU8J3L}wL~(1y+r`eVeJTnik9Jz9lQeIzvI6dfz^#y7SIRE zO&0F7?*4?vb?c-s3osW92Nli0ub}t;Siwh>$WlKW_QzhuSQh8S zpqn855G+em94zfg52Wp~54l|(VLCDO9KDxglhO*L7na!V#-Mhuf$K;bQHqts7S56w ztMb>)bn}A~ISsHM(+bNkCRYYZN7v{bxvZgk4xDo%@;0@U)Y&@{HHx!U9Y2^yTLAqL5iKr=J+m3G00a_UwNy8u} zTPVUO6GW2gflL|o>ZI2){_*r7TtV(!XHG-T;2~@x>_pG@8_awZ%}tYoR2vC9BT~1Y zP8PKM`f$A>$7W=XDWtPk&K>yC%M%J;CaA^RD<|Y2D4Aro2Y2@76+J-uZjJx@r&&*g z$lbAy6f_=$N?UD{HpSxC9xA7oB$73w$eC;{m9I6sSpYSP_^_9<5OUPY2LCwy0xxvK zQN^})N-2lQU$Z8Cj5zza+SkmY(}dGDNz%aFZ!f&7J9Q$*BCvo@QXqul)U-qbzKe$J z1WLM@&D-O|-rC+o>y&k)ODq770t_r-S$aw;A8PuBI*8SND%ncM>W0|@;~1B&9|tuG zU-{gC)Q|TL5)}o1S6e%_%SOLtWwYTAEXf@2V8;F%mP(;_!_!m6^epV;fpHUww^(*p zDtk5oA82*BCqa3%Yd0q@S%X>Ndhp_`XLR4E1HC^M1~2&asqu?{PD(VnMhVPp5}&k0 z{FgLW-Z9|~M`I*krkKssHy19%H)2xm!`d#(&99qZOuLe_EniRR0n2Lc9hIeCO(fs% zE%~%whGaEPs1NHG6k!F zWydLa#O!N-L6wOCa;oC~Yq)TvR2LsTzg_R^ckL5^OWWbXyE%gsEf7yRz_Q4{{E@N{ zZsSvDuwh2so6O!MPNm^zZkVnOYKZ18j~0nTkSPY(+53X0yzFMi{U_u(b}F)ym%YZ| z*IZjXBJv@j3SS2bPDwb|nGPuq)>dNAUka9aJ=~wCF?X33>ewmU5evBq620i(nR(QS zwtV4{o>$g0a^H~Z?-TEPGA>_6i!fYEb{$s~Tn|KZ-}!J|2Fd9g+hrk{IL!H(=R)nn(Yp4iBlA+^QbcM; z8mK1sC2=|^V8Ag3;_3RXH~(cxHRl0m=FTm-BH;YEh~! z-?V;fI4Kc9xdu4I{d4$ioc&}=+^|mp5izkB0r)L+iVSvjT4RDNJ=v}){ri*W7WVg6 z>1Epcc)#E}f1)<4%f4DEOZ%dcDgzN`d#q9GuOaT*OdkH5L@VTLpADRk-Zv;~P8?G7 z-AULMA3sDa^sdcv2Os4KJY>FY3^QKG1OB^qb*Ej1e8C%)b7tpkA(!yvp+fI}Md4^F z(Z1(AoDG*HR==A`)X2!l{fzMJSW}l)7L*hb__P%6CX+H60EX_#Gssr3a#Lx{os-ZN zaOLu>z*+i}hch0WBU|j2q96Bz5bFL0TsRhqM}iuLpvI1-11i2r3!z6vUX_Xx9bgzI zxJl&rVM+qEY@Gy^k_6*Nv$^HTg3jX850rh=2ru3M2sJ{J^Aw zPoJDzZN3FH>p5FDB23T=BxiqJ_83#hTA->O6rnY6P(3UM=@SuuP@R9e+5eD;5UwK| zw|2#lH_aE zxB3rdooTJcJe`~_Eb4aiEQ~mP_*B8(lcF2mL%*ei7-#`O!yJzmf3f{Hv`9(gkw_LH z)<^!x`N_q11O2UMGj5x#w&uXH8UYQ+s?*~oMsoUQoH*f#E45&8Q#O=x3h+AvQr(m6Ua1twWqRHq0 z0!zkK@quz##X_z2JrZRl-vPNTjS5~2n78Y`p%|HiX+%Y)o~9!k3E2Vphjx$u+k_t+ zzuYnW2mgY3lh4jaq4OABxklPPONM*xs0xu(1M?JW@*?61Elm9n$S(lEe{0UMbH7w2!q4iE)^ z0{Xuzk)}{RVJcBYTdszGqc`n*kx?SYHqZbm5L>yy62XxsJo zf7Km-eu&Y;7Zm@G-0S~yV(I(izX&Lc@T@~XK>c5Z%qPDYw{s_&@xK{2uxCRu;LCZo z4*YXL^~`}jZ+~(4*%SOD@+2K@P4XZX+NaigV%?6+4Rcoe-bTsKJY*Q`!i_1#-t`8bn5Y`zyw%UEVFHp^f zj?>hvk0la3yS;=`b$%|GL8xvUJfRQqyL;l1-uv-|*;V$c!iqHC^v|PGvc5a}wMi`B z54P=9VS1PPiuF&uE$j-{r!$l1mJ%!lg&Bvtaf*>sg##L|1K~JyF&G{i;hYR?`RpQF^KKh6E;}L+%fL8!Kp7t$e1la z;yXa)rrC0>9@H7>b93vYeg*--3L6&*Y#&c9#tNNy)c_W~f8BwKBURY zrnzl&`0F(QPz0S10RN?yapk^q6cqA;6qGrrD)4^F_rGM#0Gz=%8smDU&+>=jcE)V> zQX_)N_~c8>eDm&`Xc?4b6xiKKf4lY7JOxJQ>sB%Aie24w#AM89s5Pskw{Z5iPf$xJ z3mWRX%f{8@n|Q4-)@9C{yWvs}3g&+#qSMK|_|Y+qE+SasL!d`$%d~N)gj-RJ2ss~p zwrB<^_)$;4?^%Co;^|in!s?9kRul(Jry*)!7kDRmcOfV41E?mJDhd{*S!7Yunlw&U zW*c)Ur9Yl3RiTD*xR_U-;_qhVH;g_5neY4*{?G%ZipZC&FYt-z`_98oRWm?h?w~vU z{9bCCXqoC|eAU?$E)KyAk%dPsM0rFqn?_zg1rxw?*yRK#u7G=^U{Ud$OepWgOXKg^ zoEOdAr=?`Rb`$$s&gu>MiNdl1>kP5IR5$qO>riC<&>DqU#A_koB?oTwIX?^?EI_lN zbdyp|#hE0UwW~3f?i10)rC-VY)IDxXAFi#+`@TaBOk$)AZ5ypkV6pr+uMTeDPtpJw z+6l#+zaZmbh`O4~Cqw7L5(a_}q7c;;)l1N1zt?M5?3IhyPNzB84M#OK$YDN&)E3C6 z){z7o{LBc4%ZJ^6%127k8YHfG)>!8plK#IBL}7x2hJ>TalAsju^KrS&c!Qx zmN=w?Vx*#acy(wb=ay>U9jptZ2PY{B^40cERBGT4w49@YlJVV&!<>0$x(CEqR6-&B ze2(}8;4MBAK_Rb=Z%(Qn&+dtrIKEG>9GQz0r8|PM>t)zc<5KfxkgP7vaA;nL!3_fmg=wv${Mre4S+CwY@S?L@B zoGmcYI1ja!PbYf!{H5?{-3c-sOv}CmwFI6G!`YEUjS0_xkg1<4P`(*=IRQuvqup44 zDrU)o3c}{ZME)_?n*IJuaa+Q2m;rs=lcIBqEU(@p>#wROe9CQCh^x!(d(QNEpMyZ@ zxd}n)L;Vy+WrmWZVBf?@TH{tDHMtZ;K?iIkIMa}x8GlAGWkJWiN`JLAK!tqI2v^0@ z&_Ne1!!2|oa^}m^uNd}Uw8NR+!a;}M;wd@3W0YL>`(WYS*v;`_<;N>HW;z1scZ00Y zPKdfivCS{A;8)YPh>i3IU|GvW;DT=j3?I6}sRUfbE!_ti8j}6t^rmpXIf|}l(rNAS z_tmg}5Gbvjs}nG*q-zBuwiAZ(Wl>k`r$5)AscK-=GW_B|Jt`Br{tzHPU|W^GPo`O) zC@zDmoSRCNc`P=C6SM`3vmNcFAN8a@{w@}xA=v&Z%MmgM>5cGueo*W({W7?6R;y3z zn?Fl|l-5TwtKsD~@f(#9kvABxT4qYvjNiBLsQwlr(h;&VmenQK`*8}d)|{dSuQ*p6 z9AW0|3ODf}iAnOjE7S8;UCLC#nKpOiol!nnGY3L9{B=y5e|JSQoAm1U`5CO?+Qre{ zL?-f^S>eCSmN$=GFrvf#sUx1YK)*@zm}|E8ui`gP?fv(iqcw!-=5&2#LhB*2s?_QA z>cmuXv3R&x-V`Am7=lOXALxP?XJ-B&mIEx=09zsFBl~djOZB{NTgBdl^#xxayr>;G zoN|d}Q0zpF)73JYkAb4UeCjljoqBj}m#OgOk#e?0?JIfYmqP>ZO8fWAGdm|H)9(U3 zhX9JKPvb{J1 zd5s>Qp!=2q3`w}Ynr5D2+MTdsW|mP^e!>+SWj*})gKDSz4=S<4HKq{PM$1{d_&bHx zX&*!U0d*z{tZ3-nhc%ABk&Gs!mznJ_LS>28*gBDlnr!jGL;G9p&_}QX9k;r*4|LVu zeI<<4`bn9lE6j1fI0w$qU@>d){dZQp)OFWk7Ot}nhWwCK-quWoUBe)epapdoVWsiE z*uzG9o@fC2I)Cd~j)6W;HVcZ2d-KDDjr*P&{C%f+*l|2vou5ZB380ZOKr zy*A+<)4nQ$vLT3Bo7qcs1Cj@hex1SY&n3Jz#%ATJeER0(-5xhVAzPxCYS?*>muugE zs$tT-*9CN-?n?#m4R~Y9zolo=bPWiJYj-&^ur1C`F0XXE{8!#}Jrq#0u-XihXh$U+ zt=!||S(toH@}67S!Uz4vWb?9JOU0x~Pa@xzGF*Rs>rMU(MZvpom5i&-SL7e1v_Sec zgT1ICnwhQjQGWpVX77xLRJ(ses;n5IHH84)(0XPXzelSZW)9}5ZOIzmvXI6V1hae# z@7c3wgPNy)eVBb0X4pvh!v1CQl}CF&`I3Wih_<)6Her`#YE<+~?ECM~K_OluG@_8- zS~-{io@X(K{tXj{3*Xn!8K$+2ng5vVN2OOebtOon_$Jl32Yu)3qN4Ba*Zcabch&o= ze`@Te7W5}gp-*&clYH{P8_6y8vyaB4?xDkDqPzndm_>IMo;}C&%xb`$`Q84<|6q4R z4}Gtu3tAs3aeYIrg8AlfcUhl{;B9PXcQnlM=#@9Bc%eX|IJ!6h_A7tjJ7OpM`sv5Q z>{PtLCXdhmxpXyrV(+9jPE2Cv;MZaM^ zWO`(>a5hTT@2Z5`Bp=OSWu+;_+O%m9j7v`SZ`986vI+zQrue^sgg3{=K}U^ALqPRl z@uW^Armfz4~c5 zTv1Rrh+E~iI*~;O+~Ffnu=2l}4YK+n6BV3yd+1i88uOax`&q;+vq*^=w+VdLVm@uO ze7UZKY+-3dp8a0kbcvm6^`FYcj)jfj`Yq$C+{QaV=g=Iv862=dGSv9)UN33gg4rUC z3DQ+JT#6KWNWVnIK7-|LP0?rbM3o&)+99eblrD!NIRWbcpnvYGBC zk*T<-1yoD%aDz7g{~-9YVj!;mu#cvkFCQ&^JndjwTNUGX+hB<5k#{!&EDyfr^<4WkkGE6&0NK5qjj4&-|ToHRw|9F-Ez=)4xkrE zF&LXX<`Jk*d(AE9788a|t&X?cX{z%XR$c#b3qg>X(Zb>7ReoR<3ntt-jn?Fv-fT}8 zU1vmWev*0DVdn2&*E7-|eGg*~WOKd5vVXD6(Jqg)oo(-bBVp6B1oOR%aA+yrG#MV@ zmBV=B;CSUB#fk|(9-PTWi|EcceQ2$?D*Hu)8 zc->AL>9L(5gu#)N-w)fng6^iIqoR@O=9=93YHWHc{?;bJNSyll;%K^fWsa2I+uZ* zo+grPjnqEzSBlMN=IwydX^Fv>RUF5v&?qJG(U5pD#L>7VHw8Z>F4ZMB2#BC zddH%4^;%p5;qoL%`}I3Iw(fflI!MWgoNT+Xq0yXqEj8x87Nu&SLjBM?EQqXVVMmQM zRzv!*m+vJQmw9_9b|I%pdZ01J8`V_x55{l-$$zQ?f-^yP_vd;F49iOmpg>91oiIJN zA0DuL>VXBdX^U*S#Rs}xAGqiUJP0@{_LuJRM`9?C{MLt+9Io8Z+{t~s<7mcj-pu}0 zzz*km$1wO{!|Z;G-@T%p8y9Y|Tx=W2AlK0NG#d^Z`ATl;{LK3L1?sCQJrK!7Ps$6G zSJcOn8ct_&P}PXA++l=kag|I}Xo+%bkrT^nV=kOcj6>*yhW7Bf5sr&B94Ko+vWKOi z@Jucd?kI{>mqgH|enu4~W2rpZ@P2~4Jd|Xvq36rw;W#Ekv4Y!tQg4U_pYp(t#eMR# z?;daI_nS5Fi&T3B2}p~Vy$;3teshnt_Y)(UuqpL#YLVltuULA3I25q6#c8>_x=sl+ zH9l^FkP(v=J2T5}3Cof}_K;Ig>c+kRbptei z(`*!ZaY*&S>cAvb?;-C+!*Qz5M)5kf!(?y^dwSbq0LsLa2cy(0J+9@(T4tLjxe2D7 zWl)g`{j%nN-?;>}{x)F^;geK}E%wG9Jdu%{ACw-)aP;<(d!o2TTuAg<3u*-wA;kZ^&cU;q2*_ zmT??ZWT^|ZVyt`(cIo7YA=L=yhM)by>PEJDEJ+{h;$Rk)9?w!gFEx#ea{vKn9h>B? zly9P5;yxo4El1P3!SHU1-^4Ug7jIc?-Ccm=RJG9>8f0ngOTP{YBZI`{yJS zmW6L)!HrGO8vs>QLV+AeGT;^LIdH*3AW0zm>TC+nY!+#ln=<*DS0Eia@J1)^u{hAc zB3JnBjX#6Zz-2X*wfo&xD=bN8I-4{3hk(dHYy;9t2ofl!eflj5L{OKq71b9L|s-by5n5d&h^1{DN(W0@3oj9aa4R==B1=YHqB zJoMM1(HqK*{ztE-qxjMpY|IDHC8>I&JF!vnuTn#O&jwBmS87tMBJaJD2TY2L9vg2> z_dJ=>R$POUsk^N~+(KGzKb3|~9z*=Ncn9C}J|r1DC-9*{4!m7!Vmw6kLn~Xh9x^S*gJ@PmlBMsM}7PfSY_+&#E-mxH~Lc3me!h_VOp|7Svpe2 zW;BMc(5DjQQ^5ZaBPOZ)O*iR%h8)cj$WncfGyMl{NLS?IOskLhCl5-J=h8M~#Kz(# z+_}9CK#)6bTl-)vkR-BkJUJPztPi}>63^rA3S5Z$ida5Z1mFFUG~reBYu#{NoKc?O z|5VF}f%N5^P{i{jr+YnW!G#-f?COpMB%)%m1Z(FXQmZAqM}lF`5+v)NKmB-={YS>6 zX_d=L-Y|C=Mp4Tv>$V`7FhDS#c8T|{Qi<*~`d>k?@E7sd2cnrI8lEE!gjQ=NE9m$x zUS;PK;ieK@xKJJK3FYr0cPdZ5f)S8lJQ^~4wAgClzglf6Lhu?b^r+w&GDAl*u$&qQiFta42nF8fQr&7(k9O>;ED4y`CNvRq$9G^rVTXBMPAo!>ds|piUq@^ zA$PJVUJY%tFI|}|lvW#@ZqO>W_*rv!ws4U{sQf`}GJEw=OL;J;cT>1HKj$#er1V0( z#GEGLpVKg|*cf*ka2!lE>r~_olnCA1&d9iADx#2vi<1LC9B<{J4%<5t^Es$CD@-6`h!6#|vZYiCTla2Xhxp==M%Z*XtPgO;<_mdas z_Q90Fh5k`$PfwZ)xq10@$>U{$ZDwJb@-UFKHvE`)%=USTD^L4+T}nC;5ptrv3&-i& z=C`(2aXwph#amq|SHT1G>w?av@yg>as68;;n@o!+vmVNPKHGkEcW?h^ zil&&_Mbzx<#Uj^5_0b>GpV8kI<9xR7Ha1Wh;gEwN>Y&ZBuPbEWcfUx)_AIcNZru~W zvn}L5qY{&V4>~R$Kxu8|Kh?>fFyq>`i5&I{Zz#a6GVj|AYKN)M!>*DERK*nC$h{i= z%XQ1OffRSqJ=PL^w(1G`{!RWTS)JhfL8{k4O&rPvV=#`$5Kd zf3mOEh-cfc5cZiFC+BG|7oCtsPY_98M;W(lx_Lx`xYOSK41ER;yF#}`Gm)ugO0Lbz zWL#?Rz*Gvfc#=O56gu>;CW=rxZn`73 zzHZx|B%gn2{IqK~Z&Qvoc&t+?CSr3*L zw~P~(42{har0E7l4Rw01&h~YEPEr7YD5Q`8n{1~*e0Kdm>cWhAQ%`+_f^A)QDFnk% zg=9%Vm2p4O54%t`@hOu_dK&5ZLUIyIX#a%Pk{1@_wquUj;L1YCz)%6SA|nmNjf?%I z-E6K{Z{4bJXqbOD{DpYFr(yK;5JVn5gQGOoGbaOEGbxMr@-k^ZOg07y-s-U(`bkr; z)G!mr>MeA2w-LPcqf5%}Ck-uaY6z*=$Unztg&Ak^<(PyN1@TyZbns_*|Cuw~wp}#r z*In2Yg2pz>ugH0O@l!M1JWcX`(c*mG(ZKbir{CJjPw&5|Pw=<@u*gEzw5Z(92UQJG zXE5FEr~W1qb*Pif=B)>0w4VU)w7$-CeRmJA1^{ zXa%ZEPmIaK`+hv42CwwizEj843K_{T85_kv3u_ua8ubHA3~vs=^72BKx~zCx%MFEU zs>5|K6&2n|fUYE~z8T3+ZfN)mU6;++lU(MW721ENsK9H*-PYMT5qS&E46N!fVf z4*Q9DpQjw4;Hpk|X#bMn?Af6}A7tC`{29`NBJvr!2^Z4jlh9a`H@(_(i>Ech^ z9GU%LThuN*BOKpF6pmgs&aj!3hZs636#%Ez3!EE$ws(Bag#sqdVEm3bX7m4F^+4SU zCt3Ocg`K=i-CtaZiW?2z;^q0xh`TPY7@-P~!wpg%HusvOnm2*bx3_IY=mR0T-`_1Qxm~s!9(#aB+Hu!RZ1XEOBal)a&gb;cHwXJcfGdGgBvot#h&_~(^6{Z`5O0|u1nd5mh}PF;4_PSkZKW?st@8h zj_un;lj)3I;V_Mj`DKQ{goK*I*}^qeYnPqa!Ls9|wyf@q7rOybhta#{Y}~gnKM+#| zu_nBbyFHl%PGK`tv=mG%=%1g7rPt~yPk756!vUA0xZyGTx^zV`SFq%Q-e>Q{^JoA>va)^-?R<1rk`*<6BSx6*wSa7|4Lj;=dnyOJB-& zunbz#)3NQ4yyS%lsazZ-M|Srm9j9V5fEO_~Jb?Z52U<*qKjj)>N{?YR$1(k2{|rp4 zohx)*47z{6e8pU6C|?e6kOuK#$!Ab&xKR?(AAL2>9Kf2M^%^)$EAM)*KJ9|@7|?u* zH5qRrOAEU}1vS!wmJVG&R1~RoM*ejJNnVwQJ^@B6TQ6@Zu=+0q3Yu%DD)Xx`#!&A} ztf#J-xubdO;C)xyrWy*MOl<8}SL#|IOY}rZY%XXt!MH5Qvyh7Zl`97qpP&TuG|v{b zSzl3^%8SL`hojo;^r#K^9^UK8U*n1HsHq{rWj>7~+$BYY24Osp@Z;C*x3K1Y32-UO zQX~ItFw0ZR>RFIpnE7Iukcj(Jq__E3M|eAx!_Yu*i!QLWhBtBh?dhKF9G6#2 z-L=cRw{PBQNKnSENX7>BNw|vbU-@T?Y<#Xr)ull?_D<_L$4r2~RI_B>$}qa2dWeYD zRuhAXa6LAMs@n%k#Sh=IT~h-k5LFTOv)BW7LWt_qKRbL6kpVWNYt6T2F_Dmu8kWaq zJqze@*L+8|mZLJUueKepwHIWh^Fk3>v9H5hFf;6(?}0M9XF+y#VoOY@^ac{_g2}{2i7BuYq<29@YE( zP)m|0q-aGh9=XbEC9EWMDQcXY$`p4lE7Rd@TSvsphfe^@NmZ=re3*X_Ny9Jod|H8t&0gxNBk@l$=pp5W(nAEOSS$qhc6MG_j+prz^qKQv8tMyK zo#IG+hl$PR-uq$CZZ+sP6`_eXXZ%Jq+njq7FRH+Vu}0iKvD|LN0>k=Xwjz=@&c z%ZYDFV|UqH8e$I@PS*%(7{{Mbfr>}2FP6fF3xRX36E1gdI%d^40-Cfgd^HyzqwfD> z&MbyZQ&V##n6R~_Y)!r|_jx33Z-xAW%K?|)d*EzeS**q@Hmcss+eO-)&Ifq{4qhY= zmQ{NNX?w`u)5VY#KA+EcC+R#EoCOGdryjuZ9MyXxB#6!qIWcb2b44YTb&1_D$#n1} z`TyIKazf>JHbIg5y5i_8+6|-`BteA1_4Q8#ukh_!$nogWt>_GXv+*uoIH2Gy&N&FLOmpAd&Vz4}JzB$}6;Znmv-9__(iQdt&yrEc83kj4V9SMgXCjKQ6 zL2L2-ZAOoQpzpd(iiE-A=h;66S^Y=5tS5rv3$ z_%hc^&6<**n+D8)SL@rAs=z@ngc}h^rzUSHyRY@SYYpY6l#A&~moby2#a4Yu#wKMf zP*P^~Hz}hezpxraIBXY0$RN_oJl~UEMT`R%N6iZ_*8y!FehlS*PX>&2Z7zeZzd%&X zMa(kzaLChV{?nZG7;fDBaFnRW2mpGIp8WLiuO<%E#`ugY-jy>?kjQ3KO_|_8Pkw!N zwM%yW8{q8~&v+SQ(IQxQ59%otWyi(Dq(WHF9UYfh2Y0@zteYtuq%GChS^Om}@hu}V z{(C7OJ{%X+@R)cL^!KDB3q1<#EG+QY@xYadT!4pRK#C{W;2r3NmA6?BF*C%KO$!kb zC2hP!$n(L3$mM>np^|(U7%5;nDPlf27S<6JZYYmhyzzhR2@D$7fzxS{s}o`js?gc( zZj`v&l=KPV62s_;cvYD*-C?uZpm1EksUgs)ffjkCMgk;k%ZD$3d9Mw6@#SslX}A~F zqj(5XfXGJg|E|8W?GW}INVK&2oVu_OVVP{qf0YbnZt&@{LwK_h%#Px#tq~YB4oR2F z!@fjA#!^WSGMATsGZ%kPEe_YI1A8YBXO2~Z2-lrKDJf>TmhK`=^a^qbU8I(e9Ee!B zxs(FEY*u5+egW%|KLbztw$&r#-<3*K9ibYzlZBKdzXzKXu4p!j$nV@1fS zhmZ6L;0+Xo5(mmlXpaf0Qu{`kzJao`QZGjiDhQ@sU_a?S=!5{s*FPJ&r0*I3o%opW z)ccQ>fDkIOv#;b$H<~1LTJEg+B$p6k1Ma->!T3e2a5$i*T;V^ZueLTAKR-J8JN1!W z$_l1$0Z-nWW-mTwodYH1>U{6~dGwA^smq#YnweHIM}SWwMz;Q}Sm7jn1sA3t{QJ5P z(nPwOL4;C|lC7mHPTNW9q0A4ZuOCf>8q7p3S+?iJGY=86ac6@of6QTZ8=JhOfU9%< z>pFc0zC@f0Ad42gFK{RV@Y9bEry#P?!1V ziGmm=Tw~*D3{+V+e*SD6G#-?xcoztL#f_9h-yhNVmyIj=^beD);$qmy!b2!f!~^!AyVA$;{e+-?JtG!*n~?}rvMoEgwep|A=9I#Gyu)$}SJKM6cofnSDb@-!zUEl-e%GC-c7@7Z{GYWIshA);rN0b3S4@#<11(risBucb6bbDSZ zPTMeBA5PIZi3^Pu{EV2gRNS0O0rTC4n`y}>{NY2O2lBrNEB@M;9#LT;VL^sA`*Oq$ z<(|WMTl|T8z$vN}UE^C2u5W4(%&{#>0mO!;gt^%XK|l%I$HQEpP}-PuOdzBZ5P&x0 z-9xuBwKxV1c~1>B>l!X~mAX1lnZ?pU71U>DW(}o!e(k4VRWcW!?Y+U^4|C|=$e+AE z;TcfHlp*UugwaLTLpmG>waddo%c`UFic}em*$FDU=Wl>=RziZwfegK58#hgNX0yY~ z`6PR|m%TuU9WLbVV=^Eeum0nuV|Z})tOh@1uhx_`syoSh4;v+0>-qCXHdIu$MdH~k zS3RkS)zcAusW`o`mRka>Qs;}M~bp>b82+jd6>no!oBjYKg^}Tob4BMHs(K_ zEa0qrWfTewPORZ!jZHGw69KwM1Kby;y^D#-2ad?rSY*bE6Hc8rVM6x0urejOSv? zDt(s>crM=jNrWj2#(>A6SoZTzbqJw{AHwq8I5|t}xFLN7Ds{K`LYrq?uJ2X)FCJ;7}*b`IM1kO>;nifKN<@r|Sl{#j0t zmk)#u-FXI%jq#DAq4wY$JOE1#TN%xuUZA_>jo=Hez7>ZBZ2x=H zVN3!p+L<*tO2k7C#DoKPizQ87&^yp=7i}sI+hpTgn|U)>YTvWmzh`egQCAh^ykMNM zcbhRJbu{K0)|FF2cgcJDk1q~8Unpp2K>zODuA64LMJVvZ8eze_nX{6=9N}{hDqn3y zN6)X9ba&?7E??~$-|TJH-2`8U(5Sxo1iL@zO#|rt7V^L^kkV;WIEt?7W^53j4=eLn zCYc?~jqNVJ=|XOL0mVPPKQY-fW`TYJN=5tqUBn&RT%vM}A>N|)*vA5ub-}dC|K8WxLA&9_Rnw=9Bznwe)X2wXtPP=t6KY9HbATmm%O4#JfjNX59`aBdj?RSZ_^(KQ99qsRTo?bn;;lPjpDu=&%(GBFQu2U|0D z7s6WkG>pJ~agNJja}#`1fR^&SF8}fDW^$m$l>};BV+Bt2=RPHp6P(E%MS?Cii)Wa#Rg(cI<9fy??30k#>884~H_I4VAmIsK z0o0o3eaY}Ooze`qJX(p|#MjzND&&Yt{8FcV^`n(~7SLDUp$nK$GCY{tOcw}YWLz~^ zO^5+xr7FxhfM5D#jsu~9A41{XT>pLRB&9d|vM2yrK+CzTcl)`K2_rQx4u{E^HNU80Wy-$ zO+^li>lle4q*L;SVok6Y^)!lpWO{m735V8J#Hv4S<}vt0z4X83XsnK|m?2WRR-3 zyuO}!NYh+(dCHSK!wy`2$L3c7tU9$rnZ5iUrl2mpaxm3N#I{@sLb;X#jjx(*prkO# z4F$UGuWvnVU#`RA*0?RP&pGsf#I`_~l3+Jw0ByI{B)K9+RfC-Yd7kOGJ#k_}E?TLX>p? z(OfW9^vNhuG#sVV(k%YpWy2V0vKt$Je5z#!xdTvE(M!MI{4B1bBz<@&-iSk;CC zJ2^HK3P4Wp?Oz>W<#XIe4SMYKA~kH+ZJd@Ta3G6a>c97r41r+%-4{eOi_TL6Re^4* zx()*%?Fny8F&M!Z4Q_Pr`5(;po)cAX!V7BuI^IH?O9SlTV%^gzeh_QYP7dDGyKOaC zJWrkf=ulh4HAXDbi@gS<9TRu{uWS7#m%~pQ_a;-^Fl$jbittZIU$M$CLUWCDEawCm zIv2yeo@qZkf1+8C;}iU=Su%fILt=9BJv7K=K zge9jvfk7+B73^^Rk+?4YeTCM#BHu&re8BjAwA2xv{9-8p!+~?KT2~LqTIXg37zP&v zFh=j^<`Td=K7OS=(M%r5Y}6c~tMgV^Q*+rG=Oiz@JqIk*`tjq*LQo2n`3K)Is{D!F#3#8&!eXoq zu(xu=aq}Z5fvwKWLKo_N`~*RuEYI#eJh8M{=#nJ;?WDcr;`NU-u*_s(=;I4c7$71ABV2Gl`5inSBwL^qkA*zr1|1HIHmL7cO%rO zLqc4cf-{FWItNOSi2$Y;Y`#!t0&_sJF&>ozvMbp`veu~<%l#42wOyw2_;7Q(5mO;Z zj}b#q7Uc7XH9>UYw&*PcCxe0n+TU+}V&q6q4SAXh`0H}G41>f6&;hXL*PrE{PAl0K znR%w$&>Spg-DY|nvzRpG*nIvpZXncfUoZPLM3ykSM?(2>MuDp1^tzW0#Sdc83@``KXkkYfBd5wMTolyvkC78_1yePkkmd@1$Efn^E(?0 zYN6rb+cZvNGm=_4#e&1cEl%@*sFFkokYdpEBZ%>k{!?;^F@tIBotXqx>WcC$L0}wp z=#(ynJAfYYKpllUO#JG7HLQH}9q}*sjfgo1ZAk6!hR82$k`NV+(p@slq(HNOF~4yq zmt#xS3z3fh&T$_f{gk1q^R>CnBSl5M!=B{NvNy42#`xa9^0<6k>OFI+Xghn_O?f6V zi#Al^0N`hJV42kCCz^^Rodl2jk%b}>xh_53{d4g2JEu@@iAp0v*SE+Q*5|eI?UEzh zk4hKg!J`*eS=Usl=9BLDTcuHw_x0eBAN&p=3|UGOt!mg|98 zSCoUI(80^wK`RWEDZ47t3@`1I(qzvkZ-pZG)D#IJlB)fW8dADiA6w1#_C~qi`2znBxH9Vj7SYQ-aZP?=wJ`( z4Y@;(FEmxyVGa!aZyC^67~7VS65HLO3jR;NXQ+aOF;#f#6X_D#g(1DgtDSmoQnUvJ zYxSL{wcZ!l_Xvw(i}v7txb)hu=!6eU9QPeF_-Y9?#X}=iyQ=~~@01?^(tx3Uan#41 z&iGB17KcU9Sz9Q{e*jbI;I~4)!aCF=s@~1p7KJ78^>_@YQ?=kuGL#NgGe|< zoM>_2OL}Q{fA<0aae=I`bOD*Xi(DBfSj%+qkUe_b?B5VQd)OBGYi z6uJj0grSD^KRx>~8gWUwa_H;$z@o(3u%!eyO|Y%9c37MeV@SePBS?De1fYm7H|#gy z-R@6^W?nScNK_TA0V-KWR5(Cvu{g*ECP8{!f>ZmYD9-4+iCpb5uALk`P*t1H2yQSo zF{mG3eRIp9JLB2sJoEm!c$baSkX<9#vz}}D(pt^Fm*%E1GU~W)^h}%{45!q&Ku;@7 zD33Jl&aZ*?MPy$$H=1FpWVhOt#OKXbruRB0=%J>gen4AiqH`5JnE&~;U`FN8ejHk| zh#A)t(@gl{Xf5^mFupUke4+qY5Hm9sFj>j?9#MHPT6e%y4+hJ412ZE;+2n(H6jrVj zKrq}FMubGyF-R7vj_iP0oP%Ww9{Ac-ECD#T*f^sHvFXWR4CLMM)TCvIDJjO?(Saz{ zJsQ)_0xm!gXWLG>!`BUcy@DHU14uv+byZPB!N>+sPCt6$Lu%Iuau<1SuYK|)Frfgo z{?5K`YOUCs@5fdhQ^z(RLT{FW-9WX|-WlYnLlA6r33N9}V2*1wH%}S&ebSPwf$FrM zm;o{?AN05}B~=V+Dt%?P<{~vKXJJ&-7uL7VEtEV5-@tBN;_1t`SE-qghk?BSE58K3 zevj-|_IAhJIK879BYs*w-gg@gHc+ZJg_BDr|RLvoOL<0A-kcf`0SqEycdP zC-O#|@pdOC2UK6yO}r>8Ob2OG!m+XXtFn_mw)GB#Hi%w=oNddN(kpcX{*}5eFF;K@ zolbCo`V#sAY@0zms7j2KFj7!{sQIG42B|k$FOx4t|gm8uhH|{Uf%MhUkiJBZ62U|h#_x2Wc z*D0{-V*^a_bor0~^aw9lO&ehHwD@0N(t)ScfcfIR*>J*pQ@XaFS7x5$@V>6Qc#b*p z<|)(yuH@0ew^H}A5#folK)m>PqdQxEUvTk3UC#-Cb9Avz;XIa>p%eZsgL^;*EO+1D zgk(VVr;3pe%?UWn#Rza~Jv6&E2wsfD|3UaW6?Adlc6Rw>^*G?6erP}0N&cjHu>4iH zdb4v?U#r|z%Tgdp9h>032d^4dMUav;gU4z1C_|#6KIEWn*jyHebEHLukx8vB?VLcp zR4Wf^UhWd%+gdJe1nF;OZCvlbiCy~vGd51$MaDk2HeRlhDiwctPp_?ZJObzS_iF7908cNREeqx*(!0HFbqgDC`kB)KZEomg6L;3h;^WEp$o?7 z=w>oj>3@M|eIfPz2DGiIJGvh{YfuIMjrB5{YiFi@C>hTQ^vWX~$m{m04huL=aICR8C4s$mjAXOyU|Kh#*_|{WyUmI4BvLmZ6oEzNDCg0=nF7UaF)g z{9<8OI8zyIWWs%|l6)UT2`bp%&jJ{rQ3v}# z;keOL{Fg30>YZhV6`kYT&kS|zZL&`)0A)hW@YJne7vLWW3tb+Exj7DlR^zbnU{<$? z{S$#!0(3JW2nm;iYX!7h%racy>3n=N^3ANPfv`tz6?p5)VB9lEsrUP&)Y}I9K5s*+ z?|{DIJ1Ai!xwwiq+dPlPyE!$67fNvz&<}a)A!lp;rwUl`V1j!y688y^q~;U5i{d%c{GqV4F?h-$7BW}Oz??iWe(ISKx0oxyuwufK#pGi3oEWv zE_x^!w39(iENh?()}Ye`ZJ?Z+ru#uA`x6R*N%ubRPiHoQF`J5`mS)iW9Yq(K>n(Ru z#uNm$+1*0JHmMlr6nxj(AhFFl(!fy&4UwTW8cap(oS4ly91cw<)<9HwIK7@yTYi zfL`-Q@}2`9C$&TIo3#4$4EMhn_ayeKh-uoSrVIwp4oRQyE!#Hi-5!lKrjlRMBU9%p zGpVBzkw6{cq6e~hX+>>Hi`o|Y_^ZcBGZ#G`aALm?+64N;LP<4U;P_`{M}}%&?gt3a zj~KYVWdyx`Zs0qkd={uDKb2lN zFFHoA^xl9EXg~nly`YC+oS6e3T}9Nu7@}{`36-rM`Kd8Dnc5c~=J!!W*MI^x*^GXS zV|RaJW?9Ft$EECuug(%Bb4L{kd0@!Omv{!GKPk=jRzU8pXlNweA%hDR#gaSwP zyB6#)_#S2N+ERw~L0n+7T6ens`K2filW5L8QPd6iTfQuO+{S=;G5?|@FU%Gx!4^fR z)yNs&Csmpw%V}Do_P=T!eys7s+u~iXJi0BLYys;dTsRz2?#)>?%&DmHo$}e&7!0?} zyp$SU*)p_W?StnpKvQ8qNS zsTCqcS;P-__W0sg-|;Yjzx#1Td4YuM1;P1fF{@}gdUtF4`;*Du2m_c#rap0IY58WY z7#iHM!<>XnfHX1Sn}u<4=&_6 z(rc{hVnx8Q(vm+k+Pg~8yrw?vVW637Xq6V9;)_s%nY2U^WmasW{g#VcTpn+*K!UB) z1huPG>pU6H${+X(`zzMKmJsVtYiPWEg^Bhd5g4Por3#j`1bEZ5v#(6qbjif9qQ)jg zYUJ(SDy@2bNW4_C4cQBH?s*vOrUndX>mFI5>#iJl?z6;oQqJ~s7iaLRJ4Dl)*BaT-fDqPDoh)3%}&`^QtjhY*r7=!xnK7#Q=AL0|} ziO`1Cv{XJ$R9Fp_a4~i~7|nYo7^4k?o3Sg4OJ(89y=~1+R;kWWlF*dLQ<&zpUTMqD za+}6$mhm;&m)z_<{Yd6XK@2Ho(WDZ9o0l{^j|hN&iRq=d$eRuc+oW({5=6O@;WOQ}OO-ztNEZ6q!D=CnC}Cks(nQ5*%cz~$&21mC=|Q2@ zJ2#k71Y|dkR_n8j<}+waoF`(tMz;oxl`2CcF;<2DgOic$or4eu;MO0bIQ@oDHR0Zk zLnw0%USguDVXEgfa?A+N%4V3@rGf|arh|%FuIfBGv`c!f!k2-ymF8G#j5qhQh95SU zt#4(GqCWR+rCh_9RNEUM1`3v+;O=4+VjRsMWlLx6^wQ0&flI%GaYfq>ZoOP?qh3Xi znh&?*dtZkU*j=%nTG(CL(;2X$EpcCb%ZFT|qjT%I37IH@Q5FYf=&#a6fde~DRp`8_ z{lsBpil!CKadb}az^EVck?aH!H=M4PmKn+BObl2>Qqd0;UX5Stl8Z4%T|UL@wK6s? zHD%vCO$4p?J`}+49F&>QDO42^C6bB<&7O!S2HLoDeH!;5GqPbTHI$Z5zahJ7hyzfmq#+@H-whEpzJq&Q}NK_zJ zk|<}oA0?hF1Jh=~Tze0QBpGlZQadJPanA}zGLKdEqcPnBT+E4+2`!vWOm=pDBpdJ2 zbf@FnF0b9sQ#DCmYQfca8y~V>I$&+)<*GnFC`8tOZ>dbL4&^ z_)mXlEl(9|w-0+DtE^@+cw8AAyK)4$rk6Q+*KuH>1hf(_E?c-E9dc5WRT5vBM6p@% zuTlTkRGUTz%R6_&ZpYDa`OvL7Y8m)^%>rkw^t~PnHz1eO!{7GLzmAtb-$gBr`Ovzu zJh*r6pBc|!aA$Hy^L2mgwa(BfjpY)Do0{btQTjovbl_08nXTtG`c|eA7Mq=oh4nvf z6b4_p!%yRVR()jUL%{cZI+t)(_9N!ujsW2o1d5^8djqv2F;4F`_&D!7(+hIoqbT~Q z0Hr9B@cdGbxXMJDlG7&lqt7F&fN6Ll@L<6-NFBGMc!g$WR)sK1$W>1rZ!#(4p#Wq! z-x2{n9%TP)T*RyKQY*#AiNTTsgEea3yMl<}MUAPCjs=a5<(Q6^W;suOEbm@70=xck zd1Y;W`IVAnQ7>0wFO%j1 zMSkRfmHInpCbBHM_6beTD;;EHS5Fuedr+G2{L&Im+T)q0IT2%^?wtcbN9Uc9&4OVf zla>hc{Q2jM_Myd+zzHE@KJQ) z?Z8u^CtY`aV6y&#F9^yD5}oXxm$|MOhy9Q$0ctid~&)Qj`V@RuSc*g+#V9#J<0_=RD)_(1elfLnTc(nkZ4pV3?)w z>8e-O7s%vS>m| zUNtuTjFDE6;M;n*{`6Ah`Bno%78SiLI}3rN&OwHHyl31%1dWja!+e*Bby9&z@vclw zEsl03=QQ(XXyzAY+m0+PQLhq1`ov|u*`K!}%v)+7_nlXKKTDWcR-8AUSZ2hpHV3Zc zvBy<4W?5acxGsrxP9{J}TROVH(4iXvrN=e4BQIt5D7U#-zUBeE{p*|Hvd1VLck^n) zU-RmEbgTphNRk=1M39@rrd;M@L`lm^5-uA=tw@kq9785hV>I9Djpl ztCODBcr7-)LuBLN zPLp;gnML3 z;gxx{>jDOjMz$cf?|GcnEil$9bU{bjKWXEI!fNMj(5Mx7(>(ALYUz)1ugfkbQDiR zEkEBIDPFNmd>=R-CpN%;IP&8t)c;I1>tamg^v18%r84k~6lIAyzMc81ued zGuAYU&gHqa2EXG zCO0^k5QZ@T<*NA#r=4dI`*KFka`iU+t=O5jVt8*`!}gbnh^U(szSJuBM1~$$U*og;hoQT$HkfR{|d86*?D({h-tv2|9AMln45o&#p{W9aO9Fyj=0aD+D zvPnM4$7rK`gL!^%UwuQ(=x$pA^z<+EJ3s>X6$ zXC+3W!W=2$FaOSIN19YdZ+uFpv(e+kw@fd!sAn-g!`mvR@()hK@HS2;W z0fGc5Gi^c==%?o(cU1NMD)q*-C0I=RCnJQWENjPX^10^*tbK`fvmIFGah zAt(xY-u3vcOZC{D^$vFZc#I1*q{KnR$iDv@;6UpSkUa1kTSATTz@R)0V6I|dCz}K*(Wg*yaP&|)E3L@h zbKCUKjmyN_=<$jp4VXDO4F2&PlqvS^SH&7P%Lj9vZCuj%q_rQ)u-omUycdMm}>VG3?!qt%19Q$XT}Oq>b-hx%G{@Z#Z02wm z&=DbP8=asz z1=RDE^}@~@C^b`fdlDB<0e1#TA{R(vc9k78%W}Zq;>}Q#w)0Bnm<*kx_jsyD)u;{0 zyPhCIZ2O+$X0t=44?RCk?9aGc0TZv2MoG&1ywrCe7Rr`~|97C@zUbR91>9A2x!-%|Th z@?Kz<^gZ7~l&ZmV4~i!k+ibJ7{cR9h}6#xbMR=TI=9VmgnViDh;cp2;1`QM2&9{_2Nb#{Vj(s-B- zdWg#3!|q$rRIy-VSP6!MQP%j2-Hw0x`2}+g&9TVam!01@)I#-KD(H;19Mm2@aCqJ2 z=V21EJbY1?6(i9EAkpTcWDsr$0bZRv$_DzOW73*tZ7&Z{5FNQ_W?}X$B>aJxy}JtD0cF3lW|OYwLV<5OB#+!TLkzcyvoU)4CU* zzd5TA3T)|q%%;e*?aV@9E`0$H!|88)s7`oGB(l_T+Ham0&2B|~G}u8Z7*!x5k|)%O zwNfuc+Z}*e7jciKybHc}fkd7p+QT@`BRlhu3I|joakU)~Lk`PcS-{V1p7|w#5<+zk z%rTgXn>{U;^(&MCYJ*_B37nmmvzA^?%D=#E!xVD6;_=0n0j zx?EO~c`s{ZspNaVn*4lItOG2XoXzSYkJtKCYu!O@Yn_=CGY0m-R$khqX!_yY9GnEH7{B zEgKwf8u$Qz@ptifkV6uI95U!e{3@IGSUdqR*g>u=^H$VK)lqe`L8%Ey3d|-hu;HgSTzB>=3b)sGXQPj1S5hnXQp;Ss93bP4s3bLT75fyRvNPC0 zLsJz~kaSh}HZG~^$V4*#XnM0)*mTG>H*LqgH^iqUqH7?y4|*d&fJnKM4)*;Cc06Wq z;JYGLu`VXjqdsU;>bkoYRk7>~UDdsj$sRO8v~FQ9*KWNm13te=3kFJskp0n8@t$hZ z3_^!N_xV>5JxGLl-|t?4dys%U5mexpI4IL^dLquj%9hUMit)W!<@gAh4Z6QnB0}6= zy$w9h6Te2$i*}^huBz23@@)mlpEpSUrh2~mLyIu#0Ab|EbzQ)LEn?Sb%LBn@2o5kF zC#{(Kx4x~@=0QHY>ryc@hua0-ODOFBzamIe769 zi>ZSl%ffk(@?Ar9M=I4co_ia76)k;SXN5Ecm$vgf#p^`o!A3U98l zgYBoBtf02m4OU=5N$iunE@PlI3(_4tqcun}EA3fnf_nna4!4|3p6P)vsDsP;2v&%H zmJCL>du6coE$1spkskswAwhsU58#wH zh{O{3B1zh-fy;3GD{R&qy+0q#ySRjX2H$IA70>F{>87BK`^btI`BBe5y2vdSX2OB4 z)hqpc!XbYJCUO6foEgYTZBVN(2>R(XMT&3<$nM^a5uAWna40|4+-w40o`&I z(=D>eb7}|g)p(tVk_^yWd|L#`0jE$X{C5TNZA+D?ES*oMP`80wsvy&Mdt#oWT@rQf zV%T+`t67sndZRnCJ;M!Udq?}%xcvipl#Twd6k`Exh=xw`MaA0xxxyxWLZSfGZJP*qhh+=XqUj>=t z`t9*M1UaQ_Rq;0sRZ#^6r3{J@;zI|An|=j0t>&eXC%5&33m{-8Q8N%#Z^7LUetL*U zh}v`X(%oPhR0K%iG7M?ePp=p$Igpm`*l4|){|IQi3{bxQ%* zq#Si3{{qDaaOe9R$4)wcHyxBbSnfG+^m|%kHBtLMeWp3y`?~(*T_Jvc+D?LdEd<@v92aJXYP(7kQcX zCqEBBReJWFEONr5WqEh5gC;%mk*8eNGj*#gXn(h665naO^R487;Q|G-F&6QfM#r}S z)V_reAqgPneJHU?YH>XSuKG*3j z96hSzP$fa_!1bLiH60nl9yf1rN=?SHdk1ATS__?8< zM{vO$?uU}2dsiHuu*=e&CcEJ_rRzApxE;nhEDA~n3!{0bZ}_qhOt2^qUe_HI)phMo z*8&wS2NQkbxz~{Ld;@%-F@FPt;AOHV>m=>VV9lrCx9ZMZ_q1t=Jib!8S6kBj*`&D? zP|!2QI1x1;;cMsE^na+7zE9k76m!te=>oF?a2pEHUN7`ZMha}xCj~0A+y?o`I}66s zY>AsrrX7h&M6Kf4k4~9nUqO|gq#z!LM&d+E<(z4Hc>;Vaf1M35rJLlqLz$J2g z;~T2b85ysG`+Iu&B0>c4K?JQ8xyeOqCnZDy&m7H<2z?loQj{P9=@yP-ag6Lg}{Ld2= zzYC-53UKL!AV;MHb*$c>X6162l>7`c2wd;xl{KjFNj?wP1B|Ck1WwIeON(|ac|JcL zI$t0ud6NFm|0?7m*kH0A0oAJ~pn64ho;!kCJyW;+|7A7wnmc4pIa;l^Qhzqt_f=G` z1}MJfUS2Zev73$ELi;xAIGaz zcPd62g5NmM4G= zle|HUJ^zG6XLx|lpI+>j#f!uKNkB1+Y?|r@L-j$sT@W88o13W;?uXJ!Zg157KS;lA zFTXP{HRv_2!?0RFt^K_iB@{#X#*0FmNi*Be(^2k#6T2SYO67*F8>oUvkk-xrwhQj{ z;N4BYYLeA~@@dGXBT`@+y}$oGw)$uIacRQ;YVXU#sa(Imi>n)BWlUv=Oi>a-=Gjh2W@?jJj>N_`ZR5tfo~_R5obUU+e%Jfg`@Yw8 z`lHG7+{3!pz1C-a*1GR!2U>y+O|Y6O9yj?DP@9g_)$*fd?4PzSL~|fYxtT_P8yc1N zDd?g&&T`LPU4$Bx<^XGPxF>=TAoqg9UQ7H)8jt;nvXtqXv*4O)I185;du@5_zsJe0 zMe-e`YQjEUa2&W!RwohMz_H^>NEAGV46=6IWwKA;$YF=%FXJDF7yR5wPc44T@2hxK zb+=z&^RkoZyV8=$?~ZB~`>EskjEsjIbU_wp$!4W{OpQjxd8KWtaaiTxq>X6*+T9zW z-1D22^9hF+AVlOJp8hfZ7!BzMt!y3>SW;5-M^pj4Ge6D`O}&scc2rh=3O< z8*B*+jqc4XUoX$PitmX&ah1v*UI6y6M)B#9v7P97+(=q0{Vg6ehwpmL+DKJFh?#eq zMUVi_GU&|dGnt@U=EH5veQ};!tNNIkWCP8e`=4jss(Y8qqbrURq#y6fQSr!HU!Lq5 z4whOya(?;YzQJ7T&WncORoTK9AO>}9d-S-`{KdBp9WEeu3!R|!wMqI(HlF)JDT{L1 zwhd+LA$X;;7%@U2Eqd8XS)E`iCT;KG>Uk59Jns-g&sLUHKeYC6vQ)tn8#NhO2t-i~9j!-`J0;mj~$z&1@EyH2#yoN+-ps z%~ri;Ur;wmdq>3+afl-tkwBb(QA0z{xBu|eyHgiLFE`NlTdV}epXM9w z{F*@6M5b$?6u!VYsn%m|Zz=J;X`Zv}-yYr)8n(zvEY_P%l9%5450^H?~@lWjUcEUDo1 zau{2-K*Rja*diYM4ltyeYm52&HQHb^?UGE=O_4q+(^6}orh%#rk?oVBXb+vLs!nmO za+rRJAX^X$%VSu;m)2*`!cC96HS3QFwj9S8`FTy0%otl}w(&Hu2M5o&SKMsQX*9c2 zokBiUdFi1c#myaKv}V48%gc(iU>_Bn8-bMyIC)|RI~a9QpCFH?F?Q~z@=$+Jv}YzD zTm!>|W8JUg5171P>@v6j-(cR!&?G4+jX|uK4tNi4^KFRhH6Ds6zFqII!k|`D99)RG z-mh;o$#jjG*~DdY{uZB0-#hrXL=1^|S5QK*Sv8zD{W2I(GJIob@m=z_#Kt?9j?TJF z?f}d1y*T~Yz^BoiL7+@yY?am>jFC~6?m|(=N_^X z2!$`S?YQk283P?iCbft9_YmCbNt#cpUFOXWvzHf9_W!;jLsvi4?XtpNainW@i-w{` zw)<&}(GY_|6@ku&o5|^31UTQQ9Emhed6%`{UCF^2jlMqt&zQ~yHR>X_AORF}sZoUp zOOTWF*qBCYJ8wLAD-Slm znoIT|3I`c}UrvkOw!^b?qwVixbgpsz&aQo&YMIrMRFJC^lmqeE1e=V(M@DFir)dgj z7FIm{1~dzVLw|caJ(fBhl^2%)^2R5Ub!P@^nDE!*Cs|BeIt2>}On81a&liwvk~CwI zEWf$BV_*AApxlovS?=PVqZS+OfMO#de(lT`^eFf6*)lFVMMhM`Ark(ZctwUJ9k=Km z(NIY@3EDFAe(A$qftnv3T~jrK3?rhK!RpS7M%66P`B*m`51*ztwL$qvdhnpN5kht0 zlj<~k>Taq9$U|)BG@``F9QLqW^E9v|n%t?slero(I7276*LEqEU}0azSV$fg%ph|1 zORCn+>pCP?wld*)EIx4OQ!SZL?ybeEfaB)N8vD;lRb;C=kl|Zx2*}xHTJEv;@cPWl zZz44KBL_F!>_%8lbl?PZ)6xGWjh$J1WJ}vy{5JL-M7aU~BWK3g(m`C1p{ej|2SdxIhO99C`ZgO(T#m^}%^3vS* za|im(IfEb0IEEHq7mRhV`fo;8n)QI{J8cWhqjM`=f>YdJ7nCKo!EfKv>&NKcm=<+) z3NAW34%R*1@87Hfw@#UV2|#RSODJq7filesQI?=vQXd11EvthR23Ksov(F8EELb0q z$%`miQSW}h<>VM3B(({!=_Xwv(>C#{9ZYJ+kE1&UquxicfgaTYL5kt72) z57yB}Imzf0;&<2pGU3vppL3xL>W(ycw}x|(pJ9G!a(TNEhxcF69i0!ED^p_Y0RY{Y zH!l!IHDM>L#NMDA;=5UbZ24b9?FYo^kb_HE{t`F-|Jg8>f)=iL&tIwPD|275``%B9 z@n+?aH1AnZ&&|4mJGoyZhnq2QUlSnNtB@;xkX{cg#JBYBJ{4HkH>6s$Ne*RC%L_zSF0 z3y|D*F>Lr*JAg^OSNGmb$4Z4A6@Cl|nI2Y$mEYWCbbT&M`if{MGsMR7?tZ*{pFs6 zSG>MmakKe2SsB;qAuNP5cLDY`s#Pt49rSe%D5RFd)uC`P7CxO1Br01}0pswZ8(Q&_ zL>S{B`w)?6*NwO2r*m$qBSw8O3^D3yiILc;2MUhTPg-^&%705}YU}~)E&&Oa@hFj} zwC-OJa#ngs|N9*}DtA6`XX}OA$m?8)U6nZPwsmeNS|V0Krc7O*>Wsp-jVpVX50Ozm zyUy%&vXn#m*RshC*p-DXK>p4*g%#65<~#&pM(y4cq&wztqQ3a-L8SNXXP{B7ReWqo zjG2$~Rwg?p1MM>j?a1F>Dp=^l)G%_ep@U6E9i@gmm9v)ulij1$prY9QN$88|N!#~U3&NC zT+9Ws3%3VGc04GRwA;jmUc$6cin0{He!Jh+_zskrQC~FjPbG%II#~l&ZjUz9_}nGf zx#RI&YIwp70}ybf_snxb*m8PC?bOp~N>B5uX=jNdc64Nf|gxh@QFKpFA zW6WZsp@bi)%w1SoZTQns%gOZPgYm09=@*SxS2-o_RrK6Yc`@)!Z8`GEbK8W zDop3Y$%{*f50{s~==X>@hR>XVBdH2g^wBBoFU;#&)lQ-x2tP68CL7juBa`Pq_A81B8*KdBqC?6}G!KJO`JRI7#Jr%Q~SBAU29fsB= zy)!9!^WG9ne4`zH$_tr|?oyPluOl_$NipSmqn~FuTyQlqa>U`gs zoN~z8^+QYL^x{AGsq{K};B~aoIgddkLeP?56$d(G7n-ADrH5c2>Zx z8IMZsQ0`--&y+nzaFzN|Fj8AnZ6`cHic1Z8`>VifFuBt->DtW3hgcb&BJj?$Kz$?ZZrkZ>G3T-cfTuF37iz)@c~L`qIxxD;h-UI0Ba;} z{8xGF7AmTk%!&XxNLWmM6Sd=>ytUPIhpW@uz$_=Z{>+})Yl|o zO~k^ct(Y~-Y2gAf)5UQ$Xdz;7KGshGs_-9M(X+gQzKmjDgx`b_e>-eeb}AjV&xNws z;7vFRm;&x5hV~=$|RMPy_d?;U@&oPy0$^wPacNE|dOG6v2T8 zPcXZuMmK@8EDE$wzQPbuuyX-~x*Re1+6B#&vmoN_oUV2UI|8C>%HTVP6i&vbWG>ji zfIhn!BSleQDl&13D4(R>-AaVO!vUw6XCel*RkOo>FS)s3If)yZx1_JX?feUW+~!FbUTO2g`DS!8aX3CX?OL>}Sz zR4zwM=P8o@+F@kuc<6cSkj>|xCqb&f@-sE}J*8*)0M0XN(3H++8YqZMYMmX+!ak)I zCKS`Fp5>NyI7_**D~ndCduhJF9CCP5{eGrBZH2+i40p<&x>LCc1Vj6N7om*?f4*+P zt8b>7XQ*s%(SpqTl}5z{e$v^q>Xsg$yNl`}7#1is(f`R&KsNkNr4zD|`vr#Cf7SvR z`e3D+67&0{OJ*ii3R6GatR3iZ@s^|veCm_u{hst%aiMQ(OyM8F>kJS7F7$FvF2l74G6pvq2Jneq97J zbBuZA<+mRodR&&Z@P*3^N_=LKx&;29$6vr zRuPzY$Fz$fZ0LP5BEArNV9tTKrZfr`L+S<>yxcC=`cfJSnhu4omgs0PtB@;mr{2ZY z55`l-zEdd{F})PBJ%u=Xe!VWOalK--qpPBQ`nauk0v4jAgwh%lVz<|v&7#HHSC1Ea zBUO}!pAR?pUac@6t&=g)!bE++=0W{I3#_54z)>>YUlC0YI1;`!c0u@Udrc;2YNBhM~;I{e9YI~sfO?YuOndEEO4H}VUbpt7C$rs8TW5GO=MHu{Yofz^U`?>HgwG` z`rOHFl*S6mp3=3!@R*M)6OxVF(?)dc*1A-@hc7I;kj%%@DCKumk$Dhx{G|Q%s88i;+q@;u9 zR*CVKxO@yI<~)9wS(@RROUz!)ADSn6CY$)y-n_~zY~muq(a&qo=}=HxEA`mi29W;q zZ%PQF0n-&V_*w98NOq8UPXsm#EvoLeuUk{F=4!LOsClk#kFhW;o)dXR(sa8@=WSur zqBXClVn_6QpDUTS81`L0+;?N*)g_F4pX1SPd&kN7#ZUgiELxsEV^9b2UlL(e71#^( zD24}wUD_EX*~alz1UJ!dn)bg*5O$!M){8$LWD#>|37+ez)UGzED#&)8%QNrpg*5+> zp)3#98|S)RRg_}+`>ivx`62uPt_~_9^+88oKjuvWWAh6xW%9-hO)!aw@`;Nb@Gg5C z8Iaq5*)-kEZ( zXsTFc$VOCHtOeb2_b6DcaRn$}llls7vwi~VF05n!q-%pv0I?z`yW}aj_dC(~TSI)c z+>H+Q+0{sE{hSq_@Z6+|egFq^_HLR)7SO3Lr&3gtxC$g|7B zX~VZ*7ludaQ8Lfs5IukBhv>N@kK{$(jCZdsM5OiZcX)+Ji*a9f(O;QN86+C$<01pj z?)}oNs6WoaCwcZ7b$Xn3Eyhmf$vIK!NzvxA|u=EBi6>&pXn7^RWMXza%X_yHBsjOG^$I-(Kx85u5Mxi`s`kQh0ZtJ>h#r{vNRk01dY*4;w=TjWBKH13>trj!bEth> zQuOF|!4+6njZQ#}gnbUSc97Yw^x^f~ZT{2S@y|Kzx%t;*+mF*JZ1GX+zjWtN*LC8H zQ@7pSr<*fM$os~`tAxt(N?yHK&0m=rDQq87dg?h|i$+<+KU@ah0nVOAb-h=7Wr*qA z{0OdTf<7goPYaK54~0Bz)^@3`yAgy)A*h+z8>wy)_y;7K4rDa<@>=gV=jP$4&9?~5 zDB0evT1_AYv+d5$lPviL40?Apq>Vg_Dg_+S#QCPT$XJjHX`iU zucq+0IE&bOb$1z?9a-sdDoZkg4O8JO8I>}q754PymDtiCt6a-s*(l!BH}em(V&X%ylsGtzVmN>#J|*d?yXOLG1?voe97zgjTi%!>}m_nIbFEJeoO>rg3` z{>m<`*K&j~y~FgfayTdm@Dw02DI}Fw6-dpM{kh&@jC-bUejG?{=M+h9f3wSHwBf{y zY={f~C%NaX%(&X$7PlX2ur~xU-b+y23UrQI)-fgJ%xcD(Eka*2+jCrsb@4~D8!uez*iutvq;t^J1sO(`Pc_N)Y zxBdJB8az`XpSqO!;!St0Oxrfavqej{ltt8u521vZo_R$xxpogO6+FLR~k z(z$qmKd9ZDt`qMcgov`CowbH55f;`~*{jhI8c2WAegTXf8k9oP2Pl*mIhQXTNZboM zo#nf_C8@}9gTwiV%Yy)b;6{ng1P5v)oKg+z3lf{=`3@f*Ydxw1&ts(IK{x}~GM*tR zwiN5JOGtuaa9K%dGtCk`kih*~cVU%&Ey=ilb2l(n>WW;K_HM9GC!mJe1}6V$Xf#6} zXK8O&4o-D5O)QL9so>_tSeUv~TzOv_yk$VNMozTAmMPr=a2r_QA4VHFj?0QDL>vBq z=wCI+r=g7`ejWR2NN+gKic@C@L1AZ6xDXMEkZ0$}=G3rSCk-qN;!W5f{kHJbH%=!t)zef$U zJb~)wjY_+AlN&Vnz8(*1>6jwqfSm1yKPbXXh=)DP45{@4?KUuPBsm1%*80VIfchWU zuLoTv-#u;M0}Fxje|eDx^&FN_T{*5VfE7Le?VAa*Y#V4(RD%F#2aHBWiDky{R$iO| z5Ru5PvPDGkm%R>SJf;u^vlrSG^mZrk5&PtS+Y5J5~jS^P<; zu&M{)EV;GkS8@)TV~n1SG&=fk<^K@MmTxfacs;lYwtcLE!fV8~7h7yz&ioOy!{X{v zHwY7mkE3L>Ky2Am&6^bIWKq@BqalR>*sKmkjV^B4@m{@&oC8%|&)oP%-FTYI9{0xH zE!8&ZkZ^IxpL{hj-vf}a%QR58aBsOJ#Qi75gTyugnOwVe)(~SKy2j!iM?fWT;|{ zCb2yB9XR6W45%^Ih!*)^C6R{B4$@J6^D}?nbZQrPzBXV)@S$dOD4`#Nz5msFrA|}suioY z*9SyC4w|zrqs#5F{^DiYYP*9H%;u91-yR$~w$&%LA@x;i_qpKQoV<^KK{}1&iRZe4 z*}oO|y^7_R(}P8F(I`2hu`*Odkx5wfJ(y9u;HE@Dt?9h0)ZR;Vl{r+Tq20J$AH;dq zYd_$6RjN5c#2Jzi&l&K1 zLeGT2-PqEz7n2jxd(;%Wdg^Uow+{srcZ=7P04@z@77#v<#%~_J5!>+Gr2Yw@=a+|- z^K_82Enm}PgyM~*}!kWG;yHiDKgche{qFpjb?}-fWXnx=H+6NvI zw~x?78!w6O@UV-Qbw>q*ckb8yDvl?YuR0Y>vhYn1M(4fM8IEeK$XMo%usJ)%kX>I2 zuXzRF1}sY5g-uWHFlju_&?D=vxA@KQ^4|6;Qia1o$}p3PXx;X7ZC~wegZ0D||I8zY zGPKQz;b6FE5n?FF*_ELK5~5=-c3Wkf+2Uj6Yn35bYkP&+7a@iWAh0U%3}G7&;*fX& zE~?9F9A{bJ8N~6`d1ikHWEZm4-R~bVkpIFXvOYQ3@oqh9VEP7ZrjZqPK?_MhI^J7= zVk;NX+m2c{6JnVYlxn4!g?z2bNih}*b1=5W9~(qt(FZQ_hJ+2oho?Xlq8)j2Y;Xgi zt~G9{n#4dFWBb|b%o5`)9)mB5jZFCFwME7mZXaO?ca7G3Nq(d*jG(vVo2?X}6D8||!=_BK=`PEej;TI;q#N{APfZ)>($p%gF4 zK;s&i&gu30iVqR&21Xnp1tS<&Zl)p$oTZ8+8@Ko$qV`E*5`kfTh26`x2(?%WTeOj@ z>h1G#yFOE;J`+F3?*|FktZvYqv(piSt>28-`0_|I#JLH4EWhDg8$ThuSd#NsTXb7pF0 zn-rBLe4#wc{KVb)ZfOm-65EDm7O~~;`L(TUg)@cj?*Dm62q zvaE~gSLX93`Nro8vz>Q`{FX_GR$PTiAAt0g1v`>d+L*MiBVw31v1T;*-BMQ>fBX3G zLayBXkl)7Uu?ao;XZ?0e*yi!~yTv%T%MPkIJ#Im= zEaT1w!_6mbUgFJgW~vE~}V zHZ+_3>AJx1o5rwjoF?{T4@>|IEqI*O_^T~3L?9jh2!>`#d@*k#VRG_ng<3IrA;3iE z%$L2LwxOzAwNWYKFGDZ54DiC{oVnhSO@1DC3v>qwvo=%-8Cn;>DsFRD1c50gM;P}P zn?^{PcN+G+>}t&6^Z#T%n_D&~-{7X9^meiOg(f- zU8t)_O}eYXe}K=8qDHFna)J;fvh)L1M@aQ8ovKi`jy2v3;-q$;UAF|3QT6nU(-A6{z%yz^2?DICd} zZ#472$K(HsfHeXvEa`>aI=*bBK>Sc6$c1t<6{V^5jlEJXvT^6sCd|~6> zk`2e!g4Aiuxh)PWuOFdQq#QvxIRfVfoAm=JY=jC4K&E_@vCa+2iUxXAT{_teq z;SPjOA=7b-73Td5_tx`~t9Fnd;za0PYDKesI~B{lRux^rdim5-gW)#9pZF23(enYP z&WchFYNyz*cyp~Sc1EzgF=I%a=9J$k#n<(%6cAg{sp2FV8C2^L{_GN7MFV0GOwjox zoO#c7@JhkDb*IPL_hYebx2d8zgZo;9i_A1*T>sodj@uPA8k9$+2@!y!D*z~f@$#w; zQ#s#SrjWf~-Fdx2#Z;)NwMiQNy8dJE2kG|t3J0%~3)>b2LKM!}(^q&kI}WOpII_$9 zBI%t#xa~Vqsa@|qJ-0S>w|(VZgri24$q2JQgJIdV&wbO+O%m)`|)E(&%#u23AX>35YiYn7)Bz?lW*{g?*5z^+zdkd_a>j(|L&6i=Zx6DOY-lM h{LOCa3gOlTR-U{Uq)6qz-2}gmt7#v5^ShW>57cfMd>XlGom0xks=+jL1;?v1_f+@jUq*4G$1uF5_*q< z(hVg@4+u!_gr0LhFgiHDnRlH(&Ue0Vee3pi=c%ZKsLuX+@}jrZWN%QWWUZ~>auojqxwNDDxEmLK z=P~m&KA91HrC5)256w(1!jmgx#^G2`ZxgaNJsDZeN&Vo}?F*b7nZJKT(ulzj7Qazd zy)rh$I3{0YTIb;W+as;(q!myv*Cm2>HvoSuA9cD<>0 zp$H)~-`Bf3_d;oO-hXDYVWONeP8@hhMNI>PBZM?=|MegAYlL^A#_Z9WOGg-g{sj7N z0vrz0h5e5oQPXH07DA~0Ue#gr51-MTblWw+_aQ6yFv4MxH*!3p{u=!IXSX$4_>BhQBQZ`hf4rZH?J`^yVi2uoyV3@%w!+pZ(R91NcjI&wC~vCO-iC{%|-@NR!K>v8-5e}-|pYR zC?yr8Rd)_Bu^#*m z4;2riXUcrZYILKvXOmKZ}DF4P}nMTf@mZ=|e z?cVP_9VL!mf9ZQAKCxANdm^r(bX&DaYXxCR6?2l;3mG=!r4W-ydb97t3Ax?|0F{<+ zzwXXXVwvEu?o_l!POkyuj|cPaN5Gw34Lt5cMkaqy2;nGr8f{aOy!Qusl|L$k=oxr5 zz8BgV$5UYU)gRGRd1{LMxN43D8bXCtC)-7!X?5Pct&tPJO&2^Bs{I2rcfPu<;d!x zPpx|OcrUolv_@uI<eiO&CGHy-=mGQu>6)X7ckY+gOC3sxqKOt2DNW{!QGmw*AENYuzl z)cfmZm~(=g;p4vK)K7y$+gOO0b~VrN6O(wQdIJ09bOpQDX9oR{w;FMn+9$O%Rf{sC zCFRRsNH1cnOVdlat!i9GG6V&Kh?{sxVy}0*ngD+vxxujC7+C0(Fe>C9Z`cI|beD#! zV~EX~;?1;u_AT-S)+8>gQbkqov1-(Z=QLHa{u{Hz3PsiBULC9@lJi^*^WYLqm2<1^ z2Q4A!=3e>dn+u*Br*SMaa8n&1z& z`Rcvio+%Jb9Smm%w}-*>pKni_u8niMRaef2#*?(#d-#CW^lI+TD1ik@>aSp@zL@y# zSF(x^L+AFCN}z52cb;}uC>Be@hjQQIzG>0OMO&7(FTC}5D`F;s*F{~a?TVvyHMe>M zPA2=*qsU{-;LMabTr40*RQb=22;)p67s-;EOlo^wY?pYC{2n1yk$v%6;V<;TV@r18 zR66T45x66n?vUZ!66-63?DzJ++b>O3OCiC-E`!}3VvhLYw) zZqF9y8uQ2Lq{$!QU8!Pdq*rJXM>2*rBl*R(iIKYpCH552%vnq<9N6Z}^~j##T)e6#$1$eH%dWt!{fpaZt~ z*8?^T^Zy!Ncc&uP@D4tJ)ODRQfO&RD zCf?RR1|9H=ewgLdRBm(8PA8^xZ#yVxQFHt^X#F>e|KEo-zz=Ly$M@x(WZXtS)HJE$ zv#9>nrr()h!4C@`aQ)qZpe+HII{s}N)FBiVAt&<~c>Mn&vj5*e)KXsqOuRoEettFTZk&2=axdSSa>Zg2(J+3us!-l{+&O5_N%IE8J0kUC>I0nUZY8ez?F!i-QpQHNb88>=i#k zovQ{-5QSVWqq;><2n|{(8x8AU>6>9O+4>em>yVg&=q%q!+x&tikAx-_ky1$3et7e+ zlD?H^*YjIxs)kr#$h8hKD|^r4%g>e4^r6iZSw=3Cz@8@s% z!+h65_N=&6ETQm0lnpF9)(@wKoG%tUur<3LB+JrI*+S>(oq+S*ugt)fnOJ+{Bew?R zR=5H;tPiNKbs$wXn33~Gn)m>oRYh#*6l}a83Z(IOCrM?$(a{mjDy$c5mW(p#(mY1* zX17%9cX{&%I)4_l`5juDcpS@KiD!n@{&H*WqibN&BYgAE#bL9-VgOOeFDcy;h(!y!gDmJ%pibH(S%AqWyl-^m=xY8!5O{v<(Yw zt?^6t;iGw@3wIzE2ESv#C(*`Y^G5Ws)F3 zhO%T<;I&JB|6%AY=Le)WIw;Eit99@286|XpKpCi{bM{+$LaJDA4I)*Vui{4-VfE;N zw)D~q2GPjCxa_=o+Jdf4s@m-M?h@(cql>mNmEr-J3hbvrN>iluI41AUaU)-AxN=#7 zQCoBXER*^R-n#E!c@eZi4C|+89%1z2qcPg|cK^zdQK|Ln3yQb*P^6W$kA8oBJ|8?{ zY9R*sM_hyk%ZxVK#{a7VZx*4n(Jxn%t;x zJM=)Oa9eJLPFHEY_$i^nhjD&@FmZ>%6`b)$xJrb*3|vAyK~my_-Wg7%i)h$9(daxg z+iqAvsaf?4MXraMbM9Anz$8&63777LG$mnn24 zGDP?&Dw$}RjhYIXx;=3D^!t8z%|uFYhlo?(Fb)tQzcs3XGF~y{weJ3P+4X2Bqh3LN zD;O*#Q4f~^Y}gXE6<@G9fe)G;LYCEM`Bhv8`z{shb2KJ;j|nW)D8M$df>KyQhvsQDv>9AM zmd3*~5@z=vwIKhV<6drguEsITG*h!LTmVmNCE?RQn4WG#izZ9socgYU%jk99jh&h% zY#Zz!{L4E$1G})V)PYeJFfF{Z%Kbc=8Hl^R0n;0DS@$DnBBmI*UCz)}<{J9rabp5# zjK(qc6#~8Plx-~iy)h5_l^FV1k>v|5G1-WO6Y#4e3^@|^ZcZ)S<6q#wMf-PXQ!ohgJb!7EUbkQX@*0Zk`lE<{L4weG5i+xt7oIt-865^VScCs@OqO*Sy8w5f^W?Hqx9Jn+!t4qc^-bA!QH$48 z%V7ypynAW#`60!F)y1rw<2fB}J>#x70 zjL*)w1f=EjKE#@ftEQ)|$c`7U^hGAzMJG|3T#S$r=B*vAg(EG11uVB-yPp)`q}N0j zTy-N{D;|~Q2S}8pig}d^_4T)2PSzG)@=$~wI{bq^ao>x8XVWIB6Xc8r?Sp0$Cv-P* z@@F8BXoJ)OX{6ZUj655lPVa?+oSv7g;HX*wIQyq3zjx!Bm`!Pd-&u!dcganMsFW$aP6BK#eB<svK6hRC_QWcl-pPmRu~m$^RU8BFn5`hD)sv!oM>IL4Vt7ZeqR zDS@V}oNQDF*0o1FO{q909uf0l!MFu)=W}*J+7&Siw~K#4G>p#2x|uSXpYYOL*JhY{ zPc-(H@F!}xW^S4GC0K@E>Q;GG!VUot)r*J6mVexWD9vY3CqwH^Z~nkoasDUXS~@vaNLciq&+RV6DlMNNdf zj|%6O^2@-Fs{LaAE?ufT>^=MFoTgu6-8)&tBijK})8ic9LOj*i>vWEoQ)TkQYi2Jy ze7L-FDX*^EnkmZD-ma@wZrn`WFw|BeGtN9KhEgROZMYux);|JMQ9?NWJ8JAnTdt<^ zg)sMW=@+#C_%x!9I^m^KSt5NpntId9YyR-MbWqVaNZ=5WK6o{uclZg}a-_^}Ssb_+ zGUpE-OBpDmh-mA*iytUAngv-|1k=ms7%IHlg)LTxbXQ-a3=e8--7r|W%~@V8e0ePW zL0b6c0{f97<8qS=D?V$~Ws7eU%kFoLCIIuzF=3pOJAo6!=FM1b`RbWWe8u8($st`6 z4h0(UfKCxd-gikV1_v!MoaE|yeiUt$NPxv3+9+ZU=E`y7na-_8cGQDCVuhyUHa=$J z*9_`~+7P^)q&N&UI(kuvJ21Z<9E{Q>U&$!dn1FWsa<|F*TSkW4n#x2LvX{-o zVSby@oi1g-_FR67-md&B0CldMl(#&|waoUwdW_*o(dPU4c5XXAnGb4j%xJ5M*jsbe zXsSF$OspPg%(`2|L@O^BCz#!rvx|sc?r}`8 znCv#DtI@_O7`vzRwh-`Cg+y`SJh;CGS$q*eSRAh<;ALO>tbRbzRCfTXK4R|JbN9)G zs8@2y#*KmAI9vO!Xo8x~$aGTRCa?b1F)tqQW4kg#Pq}M4{YNZ=I)S5Jp4;=cBg3-7 z>~0_9T#hns#sp!SgI)$!MheCfD6gca&U5pV$eW(d1ucIwMX?e1S^dj~?)i zmK4e2hey+3Tgn$VFH3oU?0(+I+b=!edUe6TDLbOg(K)C*%`j9`Y3xCH(c>clUwyJT zg5{{Sr^K>al8V&ZnhMfrVm1Wc^ z-t3^_vY%99Nm%iz7EwG7+vH?<1f-w(e?JvayV$&K*ySe5`k7!H?zCS3`$^$QB*n@s z071D^A%ZxkZz{ph{g~*&4vxmu?16@BKx;r$Y}hUPvN2B@fU_@{%8|K)%&Y{i3?FIJ zi!v&)2F}ZP;U#x}_dM-|Q-Tg;M2|;^jlgNW@SsQyR|jNqO9w&SQ-`K1P0J#6DS|(C54N%UamCBj;1{{&DVvS7&%2(P5#eJF>xHK+bw*4YnHn#= z&C?MwJyA=@Pp!aKlkIXiu>gEq9FNqrECC)tG4lW%I12ZzRBSgv6pum9M(LHYU5(hB zJ7y(FIa3(j`&4PF3(o--6dC>x!O6q4vh($6Lu%`_s-qij-scov3YeMM8ZwPWgWQk0 zI`)l*Yobzg^dW>rzq_?aN>x8#h^!5r{Cjs&hkj}8u=V#71T6&}kg`s=IRq8C>lZ8* z`(K^6Kx)t2H(VM~mlKEG`2aloTH#?tLPo}j?6;Mds^m^5M-y3#z3@=artrp|nKuNn z#iC7T&9YU2cQ;v3qc;<}4S_3ID!nEY8yV0S>YhEq;Q1bfudAFbN0`8)Rq=(T!^H{- zJx>|_uv<_{@#;lDu>>jm!~Q(ZUom!8*lV_}brG;;Eo?Cb&7Fc{fP znCMp)cC`S<);#T<8us8Ts98h~L?((^`RX5?Qi>6LZ@>h*^R+F#Kkk{e-P^r&VrnC* zoDR?P`R)nF6IDF#X@d~oUQ?tFXp7qM^Z=HU5jCXZaO5&XV;s;KF;$me-C#nxFv9Sg zatn(2cFuk6r8*!|q+nA`DQ)UeX+ecj*=%|L&BMB36WymDm0d$kTD*h! zgLTEf>hKVlov54v97@0nQPPua+e-q*k7(E^0BwS^^B4#ZyHYfOSD^JK zTc&+jwSPYL%h$1`IT&8`Bd?0n@q|OGmAW%UBd=~38Ai2I$y9hcUL`3D-{b?P5NVgN z^mJR)kdOjEzNN`exZ8qZE04CSvo3evL7lRX`hG0Qwky8hI#j|g9F0jj$8C&$f4oNT ztOVVC3|^mbn=o{3%1!Ub1B6^BArEr^#P2_45fFU#3^tKO(}T07eQCabtQ~m>pdT?xLI?}S3o_ffjUccMTaE2!UKxSY7yA~ttwPbLWU5*Q z-}>hftwzm<%Hyw(z3Ir&8V9Lc+a>3M@z-9y!E4SUiCdO8n>#ihzbze+8!?!Ojo`P4 z%J)ce+xSssXRt}^c#B(0G%k6rW0MA^lh%nN{#D8NAIXKu$9Us{P}q5FDU%uGac>@U(KnBeJfYo0@W2yiFEek6s|6nj#@1sklo(Ni9(Kd;UtP;?;?~1h_`HfH z8u{ia(rYF6MkZ8ThYAE*>)e3`OrC_Tb~bCrAlHp{7o^8!m8EYBrYh1K(=O~@n`ud^ zH}$&($%k2->MI7D3G#33lscM$#6jZ5!;JaMeuD}3C{`y@e5?sFdi5EMFda9~2Bo<6 zhP0NNHZ@hYt^4)X<$!vXNzGk-zCMht60I;bxzT+o;C=ZrZn)S9z|!to!++UakhKE$ zBzu^bd7!5H_dQop*pQ{G${aAOc;wbo(+N70u5577H_B?KZaUq)rna?vCYmB8UcjW}f9u)sY(6 zzGu^A+!Zl`br<#l;8c{mim0B9Q{tc<>QRf(FE;u56l6csd8JAfJOxcI$n+zw;ZSye z;Xlv_xgdikw}SM#WjnTVTOZoZa|ye4O3ApuGSo_lYK?TsnBMITomPBz@7HD$NWoy7bv!PU>6 z1>AGM7_0h=(y3x{B&@iMd&1Syxu^Y>qhdn63pE|_7KwHwEf#IhtviF7gNM} zhlcWU%Qw0(n(~~+x>>S(sL@VxZP)&F4%$~Dn>~O9bjC#8^HHg-aUTl|DtUQab>z~C z)M|g$$Uyz9!k()k1E#$gM3FqAq1WruaIt$|$;-|EJ@fK<{DDse6OOlUrK!zmN9xvcys+DJ1ZpS2+U3x5CczyrGdVv} zJ3Xc-V641LiGwX{l|5*~GIcM!L!F>9Y%-KT*d6&hJo6Cnwt*C^_SphnB_;SZ1pW8AP7GBW zhN0eQCLyKD+(T@5$}t%vZIZDQ(i{Z33V*AVDRB1Z}X1;v^s$$t+o=Em^Ql+g?tyW9C!BL9fiIF^@ut)ifi=ccpBC3r$L(Ii{d>sFl0 z*v&o>P5JhGgQgxUG(e510yo2lM@f#lNFo!=5bK{ALmzDaaRu_UMAhX4zsB(Pwyg+K zUs`}D1nNEA{NOc}@~mfTM;e}Ls49j%OBDo_MQvOp$urres;0XYVtaWjSP~aK|2F`aTdwjUpRket_)g&}O@ZB6r0)p1{QZ z(2M#5au7JV@*nmS1q;SR>F1iur8Y`2f)saOowORgAK;5CelhF9=lr5rN9Jz`dn=Df z@Uu{iHuuf+vKQj6tJAFF76`}LWhY6ZZEon>Q{MYy-@Ep<#degdI@I7UcJu_SZt!<= zoxrgZ{Rih`!k7#Cy&Cy+*LgI%ay2a-Camz-jxQcCJ#%1@QWCo?vQq@H5u#9*W{5J< zv5BXtSWcXg7?0I(-4pYW-Qtz}tjer&gZzx?ni4aK1{82kL)dx$t~d>8G4yneB&lhT zpoSC2WWMKZKm$3GOg3Hf>8L%s&d3)J#f$ep!{xu&V7G~r@HdhE(aZKK_fBWG+_M`S zWxDu4NaGcR=J+lDB|@qe2;9{uwl)v!nmZ}$iaE`vgESeuz(P&q2Nlro{2R;~HQs@J z1HVGc*z+^jwQEk|JE~j&AMM#d6(sl~crwTVtbr0O$W3nV4Jd15Do)x4!ibzxIRW5X z-{mJi1H1pDBQ94^zN;TRozK*7MpjI0k)kJ@`3A?z1p_A5Lm8ZXo3EHhC%_V7D%_5k zl+JxG95h99uNTdz=RF#AOtpXn#(Sv6fu1__-!E4{?b2u{up$NjVZUZpvijz?!H&E> zL9reY1Pi%$3D?ZlT)Hvn7*FO;X_Wug&ddgKZ#z}g+6)iaspk-OT=+Na2;faVy+#&U zpDy@&J;Nuw<%mlOs&Kt$HBqyn>Fbg9S^zsDeR#J~o_ z#;r@2lZAJCgd7C{KIae_sz%ZnZ_ip@AO;9{k zq&e2rLIha!z_kDPlP~8jPaqO_UgsTjvpav{1I+f2{22_yq zqf=TAwU?dM-4oK&f6*8?104$Oe~3o40;}N}qw^dtGWQ-sT3Q7%xAD=Arj83NK47b;L>VNjutT(ECD&PnybRU)WCKJVb> z7Xp=N=}ROOqvg;87C{S!p>{&CVP322EvEgK&&2czX7j6{m7cFpic3$qD=z?Qaf&-! zDZ1wJn0Hh7lcaq>X>cFpUiXbx&3>llyjJ9@3wlw~{a*;b2%aMfgtv<83witIr&`_` z^Wdy7@%5L_JCc2l8Evsr?7ANC?#R{%wW$uMKj~Yuz!r@B#@1V&lB2j|8^ceE$|jbi zdazfC*ey2HOIx)kq~)3po*-%=L4~yP0?0crk2(pVfQ>hZP!Kudz47_?IdsfJs z+fFWj+;KeT5n&=T@0P@rEej0)8W&@=)%zJxdO;;|8m?nQg&=h0=A4)sJ;)HOQ}Zo% z#)_x+gv_D>ZnoTy8+$cN$TbrR=1=}@Bsh%S*Pw$5HfrTJ##ll9Chyd->^f$ozR9Ab z&y^KfS^#}+>!59Py$jthXW~w|W(tmRV~$8Qhkxkll%7hR0O@xQ@SBCdX833A@*4xD zv{fr4NmXA?lm7PyKMHC+%&@5*@*QI+%bi%5Pcdfx;Q9U!ZK9OY*>{T{U01ADiYbGm z`oVWESn8EbF4FYm0#@7WuFCChJv;WQwAxEU>n2!^V6?yEOxe>9Pst@B_%A$gy(Qtz zODk%7`mXCFU$Y0LMV-^1aWHtMB*1)Jf2mfL8TtH#xYhHv>-cM9Bdc?o7N!Sof#{lK z!D}3F7Yh|u&(OZl)mqjTWUI|?GlD@^({8=GW z6;9B-;(gwM1}(fT=_=p7W1X~Bl>*DdOn&Mi*cDsZ&6Wem#n7bGleSyQzLT0REL#NM zLEP$t%9Tw_D!(f1#f~_KI(V!qeeOf z1qL_Agz=c;zMw9tW*0;y%5Qoc$8~v4p!92`2*4eNn{ebqySytB^T$(-p9{9^?*Q#v z@(^qmJhSU^ROT`SV+NcYm(FdSl&o-`%q?6wDN7kZ<`YD=?-{GiTl3>`DWGlOj{628 zE|8lGF7;&E57-1Y2sJe(cwoLAzba2-82K{P^SJF)nE%K6d56*_Mqg-i4Bp> zeQ>GI$|V5FH&1ukD{UhW#r;sEJF^>9M5rNHCdbr+WsaURnQ2!&&R2Ip<*H(+`&ja! z+?W2E8!IadooHdV)?bAbkK~1ensR|mgzw4i1^7aI<V-j5tLnDiY@HFDE+maSlR28zU=9fE-b?V`2 zY$dvj;YJdOp3d9jY};%828jc-3Qm3R@M-}S?!OP8!Yx}!GvzpKb zIqp7CIE*ehG3BKLFR&g~Z|6VT&h;Q$+6O9|e|FtLEEedTi1ST%+Lj!B7pQkrJ=7)2X&<7{%5{Wu>;763LF@r?9(FT{K0MVao{b)X5n`U&Hi6zGXDd2 z3LNH2#6&YImvhAo&nA1&=0ixO;@(L9p&KRH_51sKgANDms*jmf>Bx6J@tE<*dcSw~ zEYP*utW-bbg3{_6FBx^#_lvPO9bHmzY4}NwJK`y3;{}4@wCD8U9p%uLDTK@R?FI+6 zeDIoA&X2al`~94^B~fd07DC=Y#H&=ab)q@QV`ZhF+wI~=z>Rf5WP^&A5ijfahKJ&W}*jrv@3FJy=$j=nQ6%f;L`-4PfO*pvIF%qd79$H zouAHroMmzYL6YY8L(qMB6$u_x$~Dk=Ek3sXD!gEFOGPzv-kRr8udqrAF{i&tsoK}ol*LtaBNeXj9{_7u^m0JU6C@@q6cOo zGoz%gPGPTG1?D=y z=368~0}O3D%4w=F0qLL?(-(YjlEwO9EQ|GO@}Zj^R~U~4d{qv3qf{o}8KP+d3pO&G z{dx#(Qx+xuCmj!MRlv2MT$LPxrAMZx9-o%>EU;B$cGRVG`0&R#^D5$AxKtvi&bsXK zM^`gFp4ez0S?$;12Vu)r1QYe#{-`J-Q_yMG!-2WjH$wk>5{rTMSI=@FmbU61@11nM z68FwCEXAi*qSR0OK?ov|3KtLuHnBD^m8Qxcb9Jq7q0K7f^F<+3WEV}9ueizH9owL( zYK25?txt`lAXk!53|?wtHs~H%0*DB_<-y7|P?xO8cd-g|lJH3q2Lj{<)1(oas#1Lr zYl^WpH?%b||wA-Y? zL!NQ&=fjb-F#;jF6Vg*!-r#%R+|u;d*Ed0=m3}Zh$behrhyDs4(L7g>AoG zDFZ!7%X*hd=Y#-RZ1KuBlzmdAsgLP}Clx)IXr`q$-Z)Mm6le#+M zH!GRAw`9@Y8m#%DVQ5Umw-wO;wAG z4d{W3XXH3r8mAbz>mG@dw9%J&%0C=TGCNQxi*Ot>EK~@+mAVIBvo%6rwFU|rj>@o< z*7{U)oH;uzh@|T>el6qj&S@Ld1x~5-Uuttl4;;!K{P5G{*1VhCnFYVoJOauRAz-Xm3{yX#OO@mkQ8_LNBGQSn1V5315=ts)+w@=Iu{E*;|f z6V04}V7};~T_g@vCqq^{483l{WOpN7zuZN@r50|ElNu6rJpEv0UG>!WpX#dA@9k{*PkVD-2=JIxT zGzI)>Gd|;q2Gn?K)Ux?!wT>fr3VdsKl>SS^_kUzWa^~ER(wy$Lwi4<@eXZ*U&L@7u zr*v-4s~6dGt2Z1EWR(}2ot?{_(E}r4rVQI|t}>0;^kApnZsH8u^BIGw@3h6|xQh9* z(NMpnz{T{WTB_W|cNb2Am9k`NxFVYzcG~EnuH5{{>|J*TESWK|xjmF4Fez}ILC--l zi@p@nA8t&354zTpg+pdlGfkzqsT>efRAX`jn^{Okqx121c@+j{^ve>wY4_cOTkB&<^$WapAMpiwJ*LJRR%w>WYBAPD$9q=W zgx|fpE`^Zbm`zrw@bd;$VC>p?pyjSFnLs7+3n&FOe=0|hne=Gpv@0#Hn^bJJed5;j zX{2$Sq(KkV&|mc0c3T<@V2&!g%MDNfP<{VE^D$E1oT)}T*@k8Alxx&XJ6B!ls4miD zFL#Qy-AQYE<*(~2l8mrc{I93(kwI48)KmzhIC-MWqIaK>#MLeyX4P0=avNRD9a-%9 zCW_cd2Fe@Hwdu{^6&@YR8N}AH*=S+~DXvV3=xmYcH!XME({ilr&9YE3ZvANtS3eiw z&VvY&>l;i!!uo4{Gb{g@@Ss8-m5UCJ!`^SjHzG1t?b_Nl?l}pRTpMS1M>VPV^=GH0 zWxo3bO15NnM+cB>jWLz1kPfr=4TgnmXd3cRh1NQ@8U@VZQ9QRW9v^ZfK_fNt)v(~* zLGl8^=~JF)z)CtR;?}dgOj(--r0Its?9C=M&3=Nxt?VoviKaCO3h`Dcnk*3U`%I*) zm$t6law&`De6kL!7Au)WvuGvc92)4DV@r>vNicFMdL$tC(*Fi+)`CE-Uz3Ae* zoR8wN#<2hvNtTnkLa|6~01>$JhDpTEu<*hPEB{G{$tPd@9lkm_Cn}Hi-NOMHVZdWv zX4q)LYx}W1xw*9+X6pgbGhA?izHcGKpp{}E$JgHq3a@;VA7jn}(?O40+|CQZKk=Lz z>hZfZR))J8ViOym74#-FgE5nL@E5u)RE82e*)B#?v!+xcziP9bHNscj?> z68uN^hDor)7G@_PS#jhFNhRp6k28>P3FXrVW7;p`Y_(Ej3}OHrwd};ExsL}NEGrzz ztu4}gNSG&}@axS$a9iX(+w^pz8bvV)93^V8?|raDT_jwlNt{;icR(WgFrKO?OJ@842m!3VwXAzI&w@T z=&%4lv_c<96$yeUhd^Q*eelilsQd(OKc^Vu*UgqHOAOV7vN3<_`8CU1A3N+TyhM{U zpyrBZy508)pe@U94kmEDEWLVizBrvjvJ*}mhR5lspOYLTcdCclAHWooIpAHIuAgqO z-O+G;LA1B-z4hwMRPt}h>=+K~F=N_QhhbS3G0PZ+VB7WJT;kwU+DJ2Y(+5tHo9Ka^ z*^W7sBn5d$*Sj*gmJg}~@#oP8&ymenD3*GB*-94=TgwS_Cy*t}BM3^?eokXv?o)qF z`?_cnASBBmZA$Znv)kH~>tJgaLFrM;zSU4@$N?=!Q)PO3%k~I8n_Q$obc#XogXG17 zC5yIV&);Ez0AbR#&UKabq)_3gLfwmTy&;V!{&e%5e&=tP0itSU#Z{DrN9EO#O}olY zRNyDHRu+Rql)!I|VbIjg2(>pjYc@gV?;k!PYXVQ1=`NXcGT#RunTpJy*I61yW|Zac zhfBSf!4!lM0;6+Z7HQ_QP4w!b@}+D-K;P2Om6dvd15&K5aiESIG%oXg@y>ff`(68c zm&R*59iHZ?$(&2*u2c^+&9J=xA~e!YI;7S6d2wrfb`hXrPmt2-GJRfs>`ea6Fk^%e z)j(PB+NvP6x=<<&n6_$-Rh#L8b=XxM)NJgXht2F~A!nPWoxWEs(5GS)bCBtBoHEeJIJhvxS4j^TjVWAyN^;S~kZP2@bR9k$=K@o9gU zTwwOWoKOHhEdP4F3d9N|fJQ&c<4F8|{5yBLY97E=t*+KRzF=A)i%4MVtx-P~>Nn3G z$8J?@&{J8yh`t`fuHhrZ)3prRGB{}?^rYjb0c%vkUUinXqf^s0JAwPgIsTl-^dgjj zy5Y~n`f}PTOR{0F+!f_e{F9nB?*7!;EM^gi%1+B;L0u>3_0YHOXv;3JE`>II8S?q2Ew$c*c z9k+&;8*^x#ov{U-M;!-BtW@$(e`A9aha3>e{= zT&>>yo~v|q#xLlC!%qAm$?!lzDer~@dsS!X;`z^n^ufjA9D+h%quO!4Z1cTl;NIBz z!3FT7GbPJ6#d>(Vg*_eBzuNY!0GeM{~32kW@`*FAZejCFCV>9Z1lbjeemEpW^17NZJxRr+cebm?2cx< z16GnQSZ-lcnlecR0!N>!-!dIH;t73IrRVDeZ6S4?cqPN1v4MExZ;{#;G^DD7e=j0_7NvK9ZAvt;PGydq5+}#BS-m zyrj=&m*%W%UjgoG7&Nml{|49l>Iy=s4zvDx`J)UjUCiZ_fY@_3N$r`lSbf2LO(uj6 ztC%oF%$>WJH{}=vfM>5U$o#6v>FqqW4S|?pc#t#t@-q94j<{x?V4dt>0UCubjiaPC zvH2oYZE$g$L=)vgyn{73wy1u8j)Di^oDzS&f4lMiOGY&JJ*TT7vz+W&Ow`18*iu=j zOX~V%J^RDdG(^b$u7~V`B@m4M(NgEEc7kSg>rq(WterBSsJg>sPO4^7RF{^G8I)ma z?xve|wOM3H5pSu-ss83B0lX>;G)FZ6H_!8+Zkr&MqN(ME*Myg$ zj1%9t$}bqQc^$}13$OPQbs2v-dvFaDcO0ZV9qrbOYTr9d^rxOZQA5oEUJLuGs%7Vu zYp$p1K;zx6H-Wr*Rw)C5(3SUC|CypsjV(h0XWfYHY`yB$Snh$W&m#n}m^>^-Il7~Q z{aM$Xk`74bn+Z4UcPibA=b%)eaQEUOWI+3HnQqp`L%);lnTIE3{fQS#WFPaQy!_8e zZ7^t%2_-U#%`43F(FS=y@9!EhBfKC^gB@dR+7%?$?jN4N7D(d+Fsf zv1}&g!BV02wo4>HksWX@ny$$>t-#KWs$+@l2!)h_frX%Ohm9hC*9t1Hk~>H8{*Y~9 zUIH(D({4XK>xQU<}G2r#55M1S_6uChU$km#%W$o6(p@G2B z<06exr_un)R({9u7rD(x9x0J>sZ;QiHj30h3OJ@KlCfN5GP(s`l=k%)kK2Q+d)OC? z>@Zuwrh?Kf)@OcEFE2l1EB{6i6m?)ftUT2erKg}Csu>-%u5_meHS)uKQ2~c43L?)Tp)N=)SoX=YdH&LQ)%qSR~gz@1gBRS zV!8QJNQP^+!o9DLQ6ec|@~BphKn(tThyRs=#bkS_E4&#&X`d{R_y|Qa9wYXs?uR!quCA&>qY$bRzEo%+@l1O7V&{tu#!y+F&8+b^ia6Kl*cm9n%e?E;{&261bnC%m9^ z`And{WCBL>{<4}K5G*v*0>6Lh&wK;f+)p;Asp@RXZ4Z%iE0lllnD#n_A4kzOFpNe4 z{WsuhjHbiLyVVB~N(h#(GLzbO@(JX5(kH=4$t*;}o!do}l_W8@$v)5!>C@k;w(g*R zKwzCpKHuSwyynZr4z6N({C+)|+ZKj9HG9!Co{4pamox!Y_f{!#!4FgD6VdVPGNALW z$c>u7xjjR-nJEl169)^nH4E$KZ7!cDG(`?JFL`_tq%*g==0?$NxsdP2*akc!3R8pK zjSWDdi?913_F9Pb7;*z2)=yB|-4Q@q$yXQirpquJaWT z#xpwU#dmhk*(U__FDP7%_1$ottV}Fa7PU?`_qBdVyep&@FnJCM;gEpA`*#k5bRDSOSfsk2}Dk)0_0 z$W97Ik}nwovK@7JYP1IjGQmdwNNlqI*04CQ*9)z%xo%DIW$0CZCcB%wpt3LJj&k5E zKXV*`z11Erzx2`7X@#Tfn8`IKgZvI*yqsV*fxZ9c+O!G~k_sDxB=p3AG-DyfGQlsM z2Y>Y{_eIp34k&WAeW3LqB*SMk$)#hdRw@lgwj_e4&V|IUo;opY3x=mK*#u3kCz8>jH z>z}}IomZA7sz0C12}Ip!RENk(Ku`Zr=A%KfnB_i)KWmybXF^$A*H>3e&CpCSPKa90 zi1)iI_Pi{wA%G#+j^X8-4h*{upk`Bp_5I-a<%c@Tg6h#W&mEKuu7G1&DVNQsnDNwM zGVTxhnG_$f7`wT?=$D)A|G~vy@E)nDbKTfCNbzi0O5qm7>fMo~#~6`-N7qPRm$)e_9&zHZRx*W@;@~y#0zQAI=0b0T;l|KOZ+4c9jL~ue z5%4mF`eBP|E}zE!sCE5FxG31_Dp@)j_+96BoV7-;)5 z8AQDaZCj{ya$nc+7+CNsLms4?9UCHO9P2s3SsWhFq9ch%*0TSG`$cE%fc5cJE8S!# z((T|l&8x~~lW`dyb*?8!Vj#x&3*R=Mgael|7x@>^ZS=xfJHO+io1-o6@n;L^utMvlcqm!7UJgP785fH|4A z4(yhe2h9+I+VbSCr3EJ@xLSyN@OLc$(AWRZ6vc2~Y!}01n^><~6-|}eoydz`T|hA; zMkG)pecnFtOwK#yI(fdIFphVnfH=lZie#N*XWbS=ABT(X>BvU(glY1?o765_j@Ms8 zUP&8aKaEk32tnDcf1@h_nbi36{u>o2Z*#+-!e0`}q<(yQMI7KFZe%^ebKy=!B#zZPwK$T&c^cp@tQ2t-Q)SNrFyQ(ryXNu%QFYUIn=>4=#* zH=H$UX<)(pbMMm4p^3nTHk$Bg_vZ4Id)H71V?Qy6NneW)UiPQ=B15FWn=ph5-!vG9 z<+gu->@_BtiKds0jXTVkUcz^7|jhrC*8CW`Bi14^XpIv&XgEdi4>MbpbQ=GR5!R z|Kjc~!=h}vuu&NX8EH|ZVFZFzF3x+DYgu(^S?hF5-xI>uBjlYJSAn!7Wrtbb{)9PQ<=960We%suyp5CkPol7n}V~3WiCNAFK zAEN-(yGpwKy;5JDEM`|?qj(#MxE4DH(6^I{VOf&8?(8Ml2*)? ziq6f;U{+iXi2#&{Qpm#68ijw(_Q59ih2Fl7?H>M@=949oA7d~eZyEWwck=ge2T+E3 z4#r9JwMA-zl_vkZcdoIXv&qwtwl`g%tQ8Cm8T!UH%=F(u>z~G}HpKV+8#ICgoYeW} zX?cd%67KqmjucvHK_TVpzm?pBPAq2ld-_yklkm|zs{He+*rGO*YtZm1lEfKe7<>wN zd3HC}#Yhnylx5yfdY3>Mg>;I?Ow@owDX3&@bPvhXkim{cW5@C=b=AGkgc>-mKcLz! z>uIHstB-AXFkp$$7MlMj-u|=o`Pj7{Xoqx#B*LcW1yX6tqcsWE}igw zkPpeL0r@YyUv&fCfgWUjsE|9B%JxCay| zsLRjqw_dC|?b^1g6fJ0+{18YzmC}v&hnq{U{-iTR8Op@-do34we%b^B7oX|b`{=TLzt=|U4 z(BQsStC>;UHb}b_{SR{goNgkNq$M7IzIuG3&dg1{^G$gXVVm7O3GGK^A(DQeYNTUR zs3Qi-$rbe_Nhco;-rG9)jQ6j6x1T^tIjvG?=RP!TW^J}?C9P{Gk^`z6=l_#+{ZsN> zGM;5~xnDb!C!}gBvM z9X(AQ{{AU-Id19g^tSn&7(OKegPb>m`4fkBhtI@1w}%4{+ooNrjYqq~qtg1=CeH8i z^rsAL^G9~~KXTFuY+oO8vt;W4-Ah7^!}F%uAoXI#dShg2_*_IsR@wFz>wz|Kx}N=q z)Ad)0c9zq;CVEs|z`5yy7>6I>x3N=!iUa4X)o|{0oAs<9@h{j#aU;lad2dkG>pD4W zHSWDUeHz^QReG_R#9~jS{hG-!1sX(hf`W&I>`1bAZsEe9xD4=T0sgKM_IE7aQx~#w zz=zk52_)qRM`z6T4+u-^$AJ7(jf0mNYDQ|MoD_J0smDb{AKXgbcq7R*=ON6xGD z=H+_~zSOfP_11V*-7E3MZ6MR(w^G=a7p}ItzbjRic9AKoBYjbiiLCi6(YzdH-AYxd zX1;@pM%qxCq@lE*fQ$&8_By|z3EPwE-eAd6-qSU^>1Ev@@EvS#|EMt4E$M4E{lKC| zDnX+fhXenho5V-Dk%5_qgf` z$qE!EDqAk{w*zZA!L7PIaPVw|*7Z{PRF-9b|0oE27Q}acaHyH(u#~ZqkK|QPEjt(4 zWi(i_^aF=XQt>Z>=kKbAN~O|A{g^i$@TH_ea^t?h&?4kxkdU2&(YYg*I3v5 z_NKsi1+9xO3CGlbtPvTvq)rW9cE`2Q7OXaTMSLWn^O^@#RnMLMo@5a`WrzN*?kY95 zq39Qt@3^Rj=WOtlcDo}m$6tME2;{{RGk1#&7UNu%-Av-f=aIo*UNlBcR8>@-mS$n= z>3?9}iP?EzRc}1JYDKb5ir+uIsJoW>XirqpMVi)CKJ~R$$_mSPd;qY_gdzVXg)GB^ z<$z4bp07-k7HyL&vgk+Uo`3P(U7gsp&F5^w4<&aR$`-{RYi8>!mq76xO^~x^Q1Nt)>k=*AkJ)xHF-kBhri_Ou)44O_ zwHA-1R{1S}3{n3_WYBMC`d~Mv&LoVp{ca@A<$=>8sH6(n`~2i=Qjh0^-(J+w$FUAI zyvYnK0};+>Mv*yw(kI`Q%&sCboIeP8;@MwqdfFcpgHu)5ZfxPB-!2?5K|EByxoWdU zwv&8u24WY-4Mr*gdj{t1Eu%p-#+|tL?kQzAI9`f5jCKt9zXw&lLytJ!KvtmWLecUW zSe=3O)7q8%l-?a?pD7;S1Vc6!fLP6{zpGOf z7U4gAch|$4Q~R4?G#FI4$iLW~QmALJFD+L!30<|zNQ>v^az8Lj$D-NwM!V}wOAQ@C zH5ezoPxNm#v}7#{2ZF)ZVx`F}HKw9%!6FT0^JgAK$X$xXb%==OqRMF(Yik_6 z{8^0j)=P8K{q6o(*Za^kerpvy@sUP?N3S&f)dkTG*;WbJ(6qiRXj)&RGjnN>VK4kj z(M0H8FKCeEvr49F(0#_UE{y-)w1G~Wc3P`c)a|2^^ZGfz3Fc2a4NNcJ6ni#9XHwT2 zjJs@Q1N5P1JF7?7u+(Arb2S5$A_&tW>aC237>ErA)#Z!yppM}mtCK*wW634{_F!P1 zWJsf^d8ZG@?1Wv?(h@P4iEu~P^6246??f-BeulspcW>D8wCdNIys&%XuXm5UphL$Pk{^7@Rub?2HhBi)(f7HPToG69A4t*K+Aq=No&1 z>2;pZuPfN8Q@VT$52YJT`bCqHD>4x=u3A(=Hm(cR8zQErOG*9V4OI@q9RiKJl@Bc2 zUz<-(1OGPk-&|}f5NBY2-l%uND~k}Vj`UMYsw#+Zd(|$6Y>cP(d}4Lyby6;!sD}oQ z^OW3D3>aOjy3o6obAIOK`yh~J+M}!yyMSz%<^KG+Fl6^tuuo=Ey;cLPENwPA?z}J` zOCZ5n6mF8;o4wMO~czEk9Ux}kN&&E13qeqgQ6qRJ`XavQ_S%WQgh?N3vzA zyt54k-yR@t{;$L$c; zw~t#DFkq^ngaQPQ{}p2YwCDeCeq!C`vghxv!ku|NDw_SJq%fTKX_Z#ahm=t1oP9XX zudkip-vD9Gua3OmvlRKi#971UF!`#C*P;eRH)iZy%9jRH%6#)D4h9Sr3y0#gvIXQ4 z*hLylNyWjySI{N^f)(R`?IBLFpZ6O+Sc0ZjR5EkmVl+df4@mLnN@a;)Miyb#ol-o< zwl%Z-{1L?jlQc>H0u+2pEocCS{L)Gu`{4x$N|4mlR9OovyoGq zQVlOTLoBj5fv3x?%9EK0*r&qYkxkHM`9HO-|LL-n^T3V9SVU z`A4RY9_Z>;G6>%~IPRd7lBtn$CFm#;7}lF7Y6Y`RzeZ*g<4weES8>yhPkf*4w0%<< zG#i~(R>MuYP7(yl1=z?_?A^>7(;cECI=)2p$C@FCUO|T+~bgDKEX8krOJy%zy$WFr6 zeg_6q!_o$M*=?R?P&cY-`Fi*iKglVT|NbHk)YDs;8&r35Yza{WeWT3*ylq4vm!5PgqU|8YHQ60IQpzZHyZBVmsu}N~ zO~f}kBJ?w9HLdqR*&*Y)&rMK7-zbbdxXw`yk21~mgD_DUh;OY~sw@EhE(YbFZkw)&p< zg8v}!qq{oDxu&NlxrfAEnuc7o9gyw7Tg^4<$lh5~IgbJR@9)rpI;{Sxn_w9k1Z8j! zThwz^aRPt?sy@|AU&VCY;&7L#o^yl6haXIgV&lvZ!Qy}Ed;yGh)AUiJh)eQ&7FeZh zs%H1OBP+?yVKOpz96?nCN!ZT6F(g{MP>6U#sX^|3(3tG3Lg;})fbh<6JK>!eOZVoGe#>RM!LcD|MD|+ z2+!Yn!?`tML$lGFO@wDCFVYc>?ZmSg39D1AC7TlkF@w@!YkP!XpvX8yeF=BGPCks& z%1*aqpiriMq>z2}Xd`q?kz54i^d}1KJF*YBRH@L3&?Ept@O@{$GwT0!r4%=!xQG1j zsaHR<${sv8Khm8Dwec#9ya+>2&#_~9n^4c1)`CQF(oxXjb+vgSwZiZQwk;-nC7`~u zv#rir(+55AJO_5OxzG6>yHFY&I-ryhxc!gGbE)i zfy{&tq|@0-jBTlEwtfrwtC7XPP8=@HrT)E=uo{$;o&? z--q^#U3Hdq2W2Bs9Demotp=8#jzBdI6-}l6SP@shV2nVqGv4&Cp1Z;U%UOIsj$!Gq z3obAo;4*$@l-2vsX@Y+ywGA_Uqo^ILW~hlys?+&>bGRRT1!E=5jzH!kA@)aHl~7O?OVzUQ z4+f^tmyApMbfM=z%HkIFCTlLp5MF5>xGvuqhLm%>|A6=%gL5eIj8WI=7q3sH+3#7v zjEUgiV)4vV7P%Wx6ub=${ND^NO=>D9g}=D{Y`^-c&`0;4Xh58P?#ps@j+~BmEnemf zOsDH~j{ULj+@V6^>DJ+VzdfZd?pn(9*SXa$8rVe)*!4qKG)iIQ`2`}>DGWFjF_Oq0 z5o>w2iwH^7TU#)zND@87m>OE*T5Y&Rg!5`Vt06xvFmf-L6fxI(o;r}9`lUpLpK2!4 zQ}v9&8wqNK*VEDQG3$}3i}sC9pb|f-afZZE5G2GqBr>={D6R4@Cd<+KSN3hkRCk7@ zh1wC_mh?h#P!~n!TqNq{dxr&wcHsv{z^T1cwBX#}H#{rmrZyG=S_v5Z~cbOJQ$X;=I$GNxK`K2moMXFxiB4cHBZ+32_gs%R%dI**u zthQ_W1wK5?Sxi5FI`w`H*M|GLNI=3wDG@`rYRq=bN1FA)CdWRXA-WNpSB$7LxNg`nsTUcpozrI)biZ7iG-tb zL7Sy0jy*fup=pj!WsO+gjqWt`)9jz)NI$Vqs)(fxOZp!jjO`<+7*NPmPfsGm9A!5Q zhCq6GiGwUBL0u0k42&`Hrf|BTYkCvuG*mH4_c&YO%jzDU549yeJn?a1m($z&=BCDb z^eIwUs-|`UO`}p85`My=lm-&jovWoL@>htI51-snCoxK+x2+FX&_AC+8^hUP${xd+ z?(nw0sH=*U9Z$J`2DIvHCQi4fqc}F4pT^Elh`#w0m+_z@h!k;UPnfx0VtFYL4@;>m zrJ`v5Or@SD@I_>ptwjKpR|%8XC^30~aL z3)zk>>Du+DArF=$qVB#_vB&-;<|+MGLLa41Xx&T_vrx1YqdE?jU!E#?!{F2L(k^M| z57z?BSzPL0siWh=4TP6eWsL(v(W4m+`)n$;QH-y8@Zo)AH!_BAEceSy(!Xj;rdt(d zSY4V{&yYD6LpfjYd|{f?-eSYFR(;!LX6V6EqB4~LDcT8K=HB*cbbR$iRwT4@{!1w2 z43Y3Ry7-GLmhE5HSo+ksHJgT#>>5ndOLWZ(L(6opeN`%_eD>r^_cyqjn&vUj(mYumsA70O5yNI)~eR5u#)s}{f_ z`~D=a3j$19lms*&~la59K(r)pRT2P2TP#i&n*)L>fTJ93)ZD}9@-y$ zTOTID(trQkm(UQ$D;2HQZ-e;hMlL?wBpj>S%xpB)=pIM zUFAaEx$L##f+S;!en#NZjsJQ)t3?JxdF9DYplH4-j*Y8Hz|tU6;+|?gZHJRV;N~lb z2mB-~xdmKAfkj-`KD{Ew@(zuoHH>4752Oky-mD?aEsNf93|xI*q;UI!8J6Z-)KaNR zOu}9dzE$6*|DM|PlPM*vs5ym*G4|^?myVxP7XlA z?f5Uk?RPmx`m22~6%CEAR+)A6^*J*Z9?ha@MKNq|DH&t&(1{NdRRvdHH=eGdKxnQK z)HzY|OK3LY^m2ijA6yMi+mhu5!fe{OMdZ}hK1<6^b!wIP)^uhia9gEI-i_)Y4;}ely3dS$w2e1B$XN8Q;DW&lrBIcFm`nhWg0IJA5X` z@5UPiAzgfUxc?GceQ3s2gDlYY?`FtMBx4x3DjGB!yb4g4+oR9ee&+&C`&$wEkvmR9 zz86&&xT0sM{X*jsoLFcK+THV~8*t!ZyTV6rR%zd`Tu2lvNbm@Ee6W~FRCqLUz0j!= zVA&D%4P>g-ZCrrKr(gtUh!BEs`4YrKL@H{fbuuQuqJp97Ffl*BoW?RMJzrT+lk#$_ z)5`&TzY)yqG59y>>J!xMNLb(kOF9oim%Rdn+0TEc+CC~*KWxNdc;W1*%Qc;P6s(m- zx;z}Dop!-0vcDfs4{v75N7{7c#0J(1-*0^QWl^+7_*wk^GWqCTh8< z`!F-~-hHkRVZXiGMv?a(S!U`uPka;4QysZ1xLq30He8etHC{!}ZBLDkr#zA+0dNK1 zoR0lB;Z3-*x7YZ<(t~N}zRf4{i7M}<0rbE!Iv$6Qu0B}7%Vy|V+Duvq$r4owy&0F# zImu`r2vMTT-%O$Ym(x=3-J@+rqKi9fC@09S>#vsJdND@g#Vax^aJH%hP z@f9PHvinD^&E#rQmOwfCIKRC>f{ZZd4V}%`j6}lOF*BXbHrLJG+D!nxG)gFYrlMre zNG8az7iy@AFg*wemF@wqjZDB|QUEx~|4I^i2BpBm!^O)w5oR~0y1s7P-hS&Dj=b5% zJI^%m9PSr2Z{I?0kUe^^LxJ<*1wMb+Y-6+C{h&|HE}1i0SlZWI=hp%-J*{rq6{1hU zF5m)V{FwM34KhH8zM+jaZ#+EtCt9i@_!;5e;ggpss%CYhkg3z8?=tAsDnGhruJcKH zFpB9?;uc8M)PGvkoeli7Xz)x;Z|3gAjKKPwQz|8f7=ZG*PUe5KM?~yI%Cc;1Sy69- zs3aCpL)}A2{6`%NC>dlb=O>Ix?!8a#x4oT0+|nD_stTnzVmMt^RTVNYmo3|#xoF2= zV!(%(AS(^NrRg86bgd0K-qgX}pcR27`M_?zhx#eyT*kYkG~LAh4K^?hzLT{{?W0S| zxD6U?_p8KmfnAtMx`DmYVsr1?;lu5ZFD^J&OlvhqcL@A6{-VPFc!=lV$z_)p7o|h; z6s-+6HA+)jo+*|+6uuGN{20X%Hn`yfxes2bHGo~sS|5eN{!u({gR#RrBYgS`sDll# z)c_paHU*B(0sBkmu+jQgUe1EU0;dz*3w%Q*zJO})e_rG=k@B~|z|N+f59XzkB&X9A z6nq{#(89ePaC=0dO`L+w0{u>&zTiyq&u1}3rj|#=@;D%A_Uy6mZ}O1fq&GfY6h^=o zdy_1V-ClS%DUi?+Hv7x}yn-B9K}%cr8Xu(qKR@2~aJRPA0!lmSZu@E^F=FtRbp7!* z5D&pVOjlo%p8H4fn?3EF-fBGmrn_IvXaQA8osGisW+p3~KoS*-hx492b_lw_K6?2s z{iAKQ2jaW9G#pEg!JT>+f<($mSJ|?pMrvOzEYm(=5gJiuFrLrgVI~1V%=pCplh-sq2W~Ot z@;~0<0s^igFi)w~U__sopSL?p@L{tk+;+@Oe6Wugku2NjbMlk}%s>e{rT@`}43Hqw zUu~R+Z?D6y`kASOuX&ip?oK$DQ za~l8caAF-j9H*UJj&NyjJbP0lq6q+hHnD>9p{Lf+r61L^HIDDtiZJtVu=tdQz>{=^ z&c0PTS&A6)!7oWU!O;3Q=;Tg(@QT{cW7P-gt1~Ny?PZCIAs6UvkX~NW@Q%p~0fRE{ z*!Xt0w>5P3j*hA~gvrAv!;Qz1Sz4su6=X3j5qyAqt9HT`FCIrz`a#g?>HnO*6g4{g zKL4Qc@cORU)Do4-IhQA|^t-SM#Lu9KIbgd~21QGC0e$5)sx~)|QkPiQ%`Ew2@q$|y zhVGZXe19$FW|bPpXXqm=UvZiq?-ey#aO^B%{rL?3t6f$HUSb9ZUV55}jGYu~-zTy( zoC^im35#P}T8@hA`#y=l>WKNnVi+Rj)tdTxRMz%hYwo7Kx68)7?SOqBcD-Mg8tdl) zAhR}t_)GEQQ5%F?kwTr)&Kh}-Nj~wwBw-2hnuqQ>vOa~y(LN0~VW#2nnyh5bK%r%j zGjGo%o=%@vyM-oB3^>1yqcT8CqpAl!Cm7- z#~?Xe{RJzu72dlKca06KEX1^tR;uEz9Dp9t@Z2q6w4jTwgb0!vlE0h@475*@it~^V z)lymhTM4#eJ|PA0Rlr1gqhYR9V=)#&f$c2mEYf4PuWNnFFjrrhn_K#@n5AaCh?sJ@ zNM!%z!CitA^@4jxe8U94-0dbhHgC!B&#@LwkNq%hckcIikH3YLxg-Sz`CQ|{*a$1E z-T59J7%2N@Ix_r1b9eyj9lcin*XIVVIUtv=-Ka~NEV51sCrMKLtbNgH`^aJnCxPMQ zYKU%2d69VE;iPsY{_~6v6!cwPC6_2e?kz1WL{+87T+h)l2_G5?BhU2CCb})B|Fu-! z>YE3Z=?4=HoxryqFriuwZ@-@2aq!pg2hvJ}eDac#b^c0nH^~@5xww|deoOoEGHugq@MPm4`~cr8Pf*Xl9>)}?FdUD)Dcrv<1BE)Y&i1%X zNNqvdamV73^J$l4T=)joa7`ceaP!vOq$(4WXyOPX>i~1S$L>lUs^-Ash+1nu!RFTu z>i}x&QNaw$Uov8Z&hyu}8?x#XJk=m5(63-&m%|<6^$7O3K8%a!nia3QlFF6Etf0?4 za?-_T@N(E%b0=7dh=;OkQ=ld@X&hguc;s3 z8zFFC=HxH@c?b2YxdjCb+d&-GuC9&dyUHH1Zal}t z$idy%2x>YQev`=Bq*eq#QI|z%l2M${zCZmao@J|ycNKJpH2p9%iHMH`%3rM2xMkn`E8w1@B z7fa*afUTuofPYvUpThsKcM~g*lRbR1Uov#9C%o!>&D~Wu+Y&#voT(FyN(j z6G^s0=`}_Vp<<~j6s(*6k$9B2zKw|r%_f1LmclZw@-qH+RBb10yL`W%a$1{z1PS~e z51MS_##_jlFKLO^$0861g-`Mve?;INQ@pCwH_rifY-~RxTvLXzY-!R<3=Bf;7s~K3 ztPnEoZLOm#4|b|+hWn<1-eanQzO33S(PMPbj+|~mJ4*kvBP2dL=9|c@2RGvzt*=vk z&JDpC{cI&t9v+qySvF^2!^8t({Li<=<_JjLCrm5O#|kWFU5CeO!s<@RaEVJmapjVp($jRRj#JOiDXhu=azo?Ar zAzF#6o!J3Kr!5LIgOQzAwKc!K_>IwPRF`bQb=DK>=mvSNo_ydPe{#|&VpxGZ>11=Q z(@tB|oUKWXHJd++02am%oK)FIqGewxY2sbX)kQ?x#=s!W>yB-hD#un9NyG{*B>&e! zFm%!+kMqE_^P(AX^zLl2mMMZLNW_i|ZR%-rd6vQSD6cY-H&d zw6^gFZ!Ueso9hHOLAZ241Ad8qdHOhDxB+8^E8mO9!Rkw(@u_s#^^O(|CnScv1b%+u zmq3~#raR-_=#>rkUAgIlwNr`$lq*&k>deV)eIU~Ji9fQq{zn6C;N`T0Eo&_WD~>8; z>WbP=Nnr?yGaLAU%|ktx*E4|Dymc6vvepI5>ey4|lE=0M9I)6G z{KBhAaSQx~Hv>maDV>Nr{TNzJE#i)(mca^=j1y*pFt@a5WpH$@SF1J==8ZNJ27(j~ z4q~^p5qKO<*4n@_fpClc5$;+db=Ts13yi`x$mia*k0mhyDQBts zse4FY*i`TJ`@U$?BCuHB+d{wN#k_c+qXqxIXt*x$o79#luQzmbWSiK`DaUGGdtVDw z6kURG3atz`G9rEF`S5+^yOlPRGMgfi@K%BT`#>H8uA2}X-xWpx1m+iiTLeTQWTD!_ z(WXA}g0{B#;CIYzqYz60Cmi`P!Oz;do?y$U9E1tZzcY_W1z3jJ{L~e?gv2%{y-|{h zDl`=WsUK5Yuqj)%KkENQAAozMdx3O*K|$8MSHug5QGDhf_Va|L&En?x!d?@X+SSN^<|}Sn0<3RRdHPi)ot{oyupP^j6zKo( zZ}1zVyX(_NWTji?^;A~DXJNX_raU+5l+a{ik0p>juyYNrf_{3HDPiHIuRn{;g`m2~ z9bHc1Yh)3|a>3 z1iY>lgyFX1E9$A4Soswmy*PzN^1)ADa0wEtIMUx%%8ivn;85B3R`PoTb73ud*=bXE z5u?+7URu9Y=W0r7Zmp9{O*?B6)>{Ht9ZKff;}cta;=um4#iLs2-H#-*vy^8->rfI*VygsJNrK)GB&5!;Xkf_%-$)qP@t_a4G$fzt7O#c?DQE7}K=cj`b z5*An926w->F zhMAR^+K#1I^3#@9%dZTC9x=;j>zITMg)zACsh)n~^%d(vV0d|mUS_XK+{b<^ZF|?| z>NN0nd`iuz<12T&0@1JuzmaA~ZnQ2DLqkJ{uQ5C(#^MP&OVMenaJiw`i)iJU*Rci7 zBp~S^B_(l6vX}3_gPfV2O>{awB<-K{`pAHD zse4X=G9VTIR_|RsEhf?qJ|_!AY-S{?E3D_%r{iN{9Qzm#{=6PN2bU=Q#JPg8)zq%* zK7>GNMl)+$=B_!fJnXu9L!|u2)Vx|WDc^;)(^WvGeRor;VsB_b60JP0&H5T*=xW?g)iN2ts;H~^-S1wR3m)7%JC^3ziC>-z zH1Fv9pSN=cR?fKlaOdG>s9-v?R8m1z^ZLa7Q;3~A`cC#zSCV6+#M85x!-7BG62tEd zHvrN1WTC?O6VU{2uqPNx`O|M1H9@l)FpRl=JIpUBu?iNqps}sWkj>A}7ZzcACRu9* z>-@|&x%8M}Di=5o-(%kBcu>BbZxBb$lrtqDPh?950vXCbH5Q#X!k$M%c$g|(@xfsY z70ua{La$;4!>7M+-sOjRT-f<;nFEa38}Z8Cd*(Yz9ll}?9ekjsqP#HZ*!H0IfaK18 z^~wIt&(;>es^kNyeMm*W-7TH(#$sY++E{R6q{67d1x{KkAP5B7(xoOo9Ti`xA^h?Q zd`Ycfi~RIY&jSd4Z;ikoaeaq+kQ;xx%V8|KS2fbr_Uic{lmZ+8)prp8*_D3z@}B+vhz`mLpsXYmPOIYl=SFt+J(Fy+6-=@L9fwH^~yNP&x zxHqHqzHW}WIgJRfTV9n0GmDgW)ALZya|oj+ujPIM&2a#i->D6x|0I9rl>(25=>LAN zQ=!y|MrfmV5LNxRCc(S8*c5;Jozw$+6x+dYCkgMN zzI+uMyjz-@T01211h|Hk^tpLumrItZMR+qEFg^E!*bMr|%$M5`+V`z8+zX4>*%Z#3&cX!KTQ{(8)qDGa_6@;-*9I=-Hw>+25 z33eA|nsTp* z^SK~%tMvE#VOIAme$@g-w;5-&U(+9SDCZ!z?29jeG z4(A;XEAJv*^r2*xCZ3et&vigeLn`5&-|J*x0p}&j^P#Y| z!NeB|6G654xhN*!v=HMC%`Zh38BJ|VQ8ET&F>&H%8tp|{KcZ1&mq0N$; zU(QBIga2e+X_;JUnQ{VHiDg_FnfB(DnNJ4wz#*~Sy&tfRJ(+(NIPK;)7_m=WNK)w9 zOJKhxD*ODvmv85aR%^3Y)gGNExj^>jX<<~w3tOa@*EUvhu_I`J7a2oW+9@sawi(o` zc3cJZA5n!TX(GU~fW;zyLusiZDhp2;5CAsaP9+1I8H<4G?hG$d1UT@HfoONYTJlZa zSL@3a_$dtJ`^>QGEIcN-C(hbDgj`@Q>(4OBItKM)v=o4s?|k`vVJUSZVMT}wJ|YGl z4vzz6EGM>##$9I8uWt@`P=1mC8&=?5A}3&D1Fd9*|L3AE6Yc79s;EobJ?8FJDNn!k z3|y!goR_y`a;qxwn{Pou0RR~_XI3wsLL-(pe*3myI_S;bHy2{H1~_C-_){;hh+4uy z&pU(b&RjRJfs{#xm_c$EdFJZX?3Rh@F>94aJS5$Nwx11E6anR^&J+*3PJ;K#1{CM- z)|PA*xc|6w+A#ui`P8v;pMqJQZ3?HFt=h}^rWkBIk0jby=ml_vK(6F_;lP(3iG@CX zEWS>eblIo-(JV{`7yvu;r&SO+zT%P8Fj%-W+#xp}(XsPG@aRYLw%TdKAG@F8vVfg{ zB6MIZQ2n#ayZfJieELG?)+L0FC%h7R5&E~zII+kIfW6h#CilNjPqu7k^ES7OoB_Mu z(bix5;=9`FU8 zi)boWZgjixD4n_%TgMstAZX_uXCy?~Qqvz+ zSj(Aaw8pSJjXjG(PQV`11D;RBYOA$EJZoBSVB|%d`fuLxaWD~`&H`GT;7nUP`yIU>>ZRK!j(bOf>C6QTcr>xP z1{nAma=LA4Jy7lRklW@9rKFwW5%l8a-4Z3*Ci%|{LDYUh7JdZ-4g)1&?X|~f8%@gZ zBFOJnI2qXz$L*%8%bxnEnl}ziF_;PSe?W!+b>!%#ZQry{YN{`rK5k8oUgrQAE)Fcw zgPnwhrNuX%oo1K|6--CD|#p>Hphj3T@`|)R2**qy;q;IRMs=RcGx0O0}2CWlOAN`eVzc_K1b|c^d3m|1v z*ch$~Nxv4BOQ5X8l%6@=+Z!k-e+#{$H%o45A#;d}pR89;%G&oLO47#xbxqV~$;e_~ z&c04`)JUJu7BAxFTcg00yz*G?1ifzqq-|pL27>D(qi=p+wf7c?7YefOq%&*yjOCfU z(}tU$-D#HmW@~M&UwlF#jg`z5qk0}{qZuAga0!)=9aZDNRX8A!IM#qAsOYlaO#vVL z(K@sC;Qcd@<2e&&w`3l~9XIi@d@Nz+>{6T6YVA8<aB)O|qL$K_1k;B9&pm?gABLB)LN6ME0LV{TRFEqu zH#z+}1T&UDbmG^FxmLn#2i2A{Avp8+n9Hq91ZGsI~0JAcID zJM;7C;EC)zwH2U05~(3=w-p|B_qApzD!QHK1oAU_4F;@6Q_I|^j*>;d!plAqkV5d& zSzB8(eha~_uW3`fsXfQfPBQs1xK}*oC!DOLokAlWF~N$Xw&=83XL737cxqovg&kBH z4b<4;cv{2(NelQ;a+(-k+|+c&aF9iWINDm=g~i3z$C8ip^U6qyOKtORwnzoQtT2Dx zfE+*#!8G|1@F^%5#%5}`rp{SGWujErb&#P%A!BPB8X|_OM~pr8CFFuZl!$v3PDL^> zI2`I1;wN#)W3Q)M)y-^-BPXCq8gtB*B8eVg!0M2lq6UEKP{UoI$YAchLMJ3tVH5+{ z!|ze6nCAgQf_#2^bfQ8e-_Ts*U2sMuJ6R4Hqm2ET5y@IrbWpnm{duaFfX*zS-DJ~# zWHmK8IXK83bh5k`${d*CB|NaZ+9cSV;R47L8$E)+l2T{!MO-JL99s-q%Z*wU7^e6+ zE|CiT&%FwImsw>uv(rQFdo$&h7h8&oX7Wmm3D^h>bf^&&+DY7p(*cDFEWv9QK~Ih+X$?ra(W z^&Yzo1x4NV*$vrC4@rMQ|652ME<=lwp84qr8QsK6S)Xj^b7=19aJcL95+H=`*{9k* zDyo{70EZ9au{pe_wY4knWIEgYB)<;Ys`i>5iw=a8xq1K?Jq%pHg76o_WE8JoG|#4t z+2uGE-MM@3x?;aA;1U5BnrpG3;4!~7u@Wh^J;gIYif2At8#B&^Zgi*5&n+cpld6(e zs8aiFpca64U)Ue{8G595@TsYw?bBPHd&9N3?F|#|kA#OK&(kmfQcxQ$L>Sw&x0k$o zC{5ikB{69(_hE5d6unP~EwPBoBq*B59duS-M78|_tS!I_3>r(fLaLw$dox#s{wDu@ zbhJyjro6?;N}pvJUj`=x&?2Mi=qBn`GqaYYtVyc-h*CLyM@RW3F^cC|S=0r^l|x~+ z?dq4~;v(nEHJK16H(LX|+C9T7%&>+nmRkf_;kx=lGjqP(79fk%`QJa#jm#JVXm7&3N#q5`UH9*NdB(?O?abk0&FA^ zsN=HT3>MToTuJmmj6?sPNetoj*z-wX0B#?K4^U0C$ z9J^OLz<2M$4r?L;i@t%adwLeR~M4~$Sq<|;w_G@Q<@qo8)>6?M{D+T-h$cUH=cY69;Wx=m+UX;Cr3LDTb z;k`?frlfX9nRony!l=(HY-f~PiA%c93#6qnJLb}rpP1ZQPZ-?$=#A2?C#PUEL^B@3 zjIAu4ZBp`S+ov6hTK&%n(4R>UNTn&99dPD0wQEZSva_O=_kSp#;l+$N76?h1?XCe&$w+g(|_S~uvKXc z%2WlW zP456QJOi=N8OLT<%xh`#df;nI+(?~0NIalTFJ z$C!A{E}&bC-%?fWL`6#r6bi_r>CHkvZD zcH$b+wKIr`Hq#H!Fs$VUPXx63Hn0LHIibh5PN8LRC4O+&m91C4j3hBG$J-M>g+7Jr zW?Q1hTT(2G&S_HvlH}*iA5ldqtX{L5-K~ zc3s%YuBpmn&2P1k>ON46_k4H*#B*(IKRH(!2XMy^afP{QsCBt$E~-jq=e<92QLFeq zJ#AVd4ILEx7#!3>aXc;Pcm+JzL@0G<2t4mE#&_?bS21O@ZtbUB1D}XG)5e~8yE80N zHt1PEM^h1tc}H!`7%N7R(w4{ssd)l*fwVME5@08+@V!k>u-^JlN~JaqMsLu=B`QEl z6YXN9KlZxki0W$MjT5tYuf;D;7^gpVm_Buwp$Y932|q?_4twriwL73RBhnX@b+Xga z8$eP?dQfM9>6bj=fSfpl3y-rF8EX>? z4pWkEcj#kh>}6->Ct7)18;0h5?Oy&MA~rnSusZlL$&POH9n)ilvX%ndWOCjE7D^9S zV#(KOTq3yAB};s5&1tnPhasl!;wT3CBd8_m6*5;%e}8V10uxG|uN>^!m6=s0I({1{ zm8J&9CTPD*98l4f{8T6FLIDQco17s<97uje?Rfqwreo(P!lAi`*JupWC+}XVkr$c} zuRRCD_VZf{Bcy#|=00r{xk^(Sss^vUk4; z_~)5kdkNo*SA(;=65oTgl5JiLt=x;v31P^Jjb`UbXW%II+Ds}2ybM48WrRrtsUKE5 zbns$hGsH)$=A?N1xTfG(Y*#{nefFGs5en=&F8s6~gQ2O>aOM+9A03X1FM;sILB9C& z+1FU>^MDjiS~bU)LO5xnEI8isQk0I$6N!pp(#@`FPd}f}wJ0?d%LhzyT+HH8{mE58tdfJgi&Q?{H*CQT@t!Co! zx^PkYcwW*n17QMM!GW7^-oTIT8F~U_v&zIFu*ZcrTro1VcWW?bVi3~Ot@zZO{r*B} zH(Rj^C}&h}-_yo{&Qo>~W>kO5(x=wYL1PK`~us182UODc!EJ zfxE;7w)FTIu2+m#{0hTY@=pQ38Di+;nO1U*Zv(!qO;zfoOe2c*I9%4x z`BiTelggps<4uLwxvme=rw5n6ZFOV|P!-)!$U6W17a&DKXQzkGj*os_c5{}Nim=2Q z(5KIEaJe(xuwCmwbpMIfpZh18>{N`a|=yX6IJ_C`*@%ygm6(V(^OJ*y)%z^ zqBBqWKwv6qH}Ug#I2~WtUA0PwDkZtN4*8|~9ROFMyN70BipFaD`ksPqApkejG*KnDLt6!$*B;B>|{g1#Udc>scW;XuL-N zKez%y4z_Jtn#J_2;LjieRZ|)(xyMBV{yW&PB9v_N4+sNBXa?3(fXl_feUIz=_Xlq% z{iB6#=w_}4(qh1cnY#=s^(=;+I->*!*`vcir9nvWll-&%x=7ppdqs4rB7)J8j>Nnt zOTqw4Og4~aJPPzaxK^?xsE=F7btZ8DMf!z~OlQ z771bic|u}azF}2UiI6hZ3d67Jx^$wR!+`DGXb`@88MuNdaseLoEvucRIslAE4fC0r4h-se3X@!-@d=)=dDcb5kR z`T4ooEw0gIWlVl5S0)z#$JV}*YhixXcK%}n-7hXIABPDW!wl;uqMCDe?o1BP^9f!S z68btQ_YhP}K$l7gB-BO!1>;#j9g!-8^rn$`&nd8fQ)3^QhOYboxpE}=?XAabLhzd$ zorp^9;fyIiXG6R^ECK?;$*pg?UqFIWp8urhX7og=kk&w|&~I!{gS2}Z&cZTf24;{W zwy!F-Lm@>7nab+ZyXnEv0BV=cD^%p9>!|nHOx_2U;zC)0Li!C*2lXWd6dvgd4-IBC zoTdjhj@2~A==lAKR-nQJzA1lZ;JjW(H#uVG3wG7{$D0AOa}%`~o$a8Y=BLS&q$*>B z9Cbu5H9pR-Tx+8;y6Nn%J@;^H|2aAB$?LF#;Kf!PQp-jJ6-CGeckB6tRLQ{JI^3o* z9iSFgFlIdEg!uoby|;|2a{K;Ab+eHTqJXpk8#qdbB3&CvMM6PRLQ#c0@9(<{g3NZq~ii!zJli1+LRcp zsk?r@hC(sx(a7MhKE9oUm4|peWlxB(3AiI?hnCA^ySw^MWn0M%V%_p0xs6-ukgL~A zdNAaGlK)j(zUPlJ_`+K%-1=vZYqO%BVy0(j>uRb6dXv-k7{*McBxlt>&bJ~eoV^7A z=NJ3kc|`@qytMlIhLIpCEVel{hLL2Clm7am{)VH-;rgCPI)lKQE;`nXZh40HN$^-q zh-PzLZI|on;8ONrAs4U`=0htp2SPSnCCG9Te-a^IH1%DAUO&! z+@Ie5e97fTDQ`!paO1N_w1s|yo`=nTj#~v5_fY)27nl=Bv?qpqfN+DFCrK3d;9Ymo z?Sc7}>D{Tc2Pl4qXQuk$37j0?bxljYaHnaG z81?OM+8t5=hV*D6>j1*3p#hV#R-kdy(T%A8ynG@`M;VEF2QHx&A1GtLdeGekhC`BN zzj>T_fGO0+E~E#>ymq#7kQw`7&Aod!{9rs{g=8Z6E5_-7`Cl9o($c3@zPYUhMKCa~ z+eT0#L5fu!fY($YfyvyTO>pI9pYO~msOdOocHPYw@`*8_(H>U&tk;?OfQbKT=>J5Y zNK345t&Q+H2ga`RPirYNWQB920~_=5tBh>cw8uqt=eHt+E4lDB)jZv#=6M+q%2Z3q z$t33>N-tlKUgN##*WtsktjeumlJ@}En3&jY;##Yy&=VJ(kAbnPI@ElV6M@fleTj-! zT1O^@JxMT$(4S2>f_0sjXcbE#rW~vQzE$jD|B4bAhZ@1HLg$Xkh^9R%7#x30%jtad z)hz)8M`(nEE&BFRib=Dy?~Ofeu|9uHiku{(RXm;WQ?de0u+*qshwf2c&uUKg$5r7l;A#r6 zJnQ>5zwlH!n|IDMOcx*f)Ejsbfyl}s-|hDnoiGk=p>AN!?I)2xz=)lHfg2Wh^I3`1 zdFEU!YjE8&YE`bc@7_U-aOHMOiM=nw{g4(kBFkX}e^5%l+iXuUps8CAJriPKWbyx1 z=%@rR>!fsc2MZ%Ii^-v`?(WD?dpS|H<|Y|#hjRCBwGnMz)Kdy+W~L`lYGDyOEpE%r z|8R$q3l%}jAE%WEh8-$}Q{Aeb{cyyBOILMUeG@Ly9Ve962zRQQU0;fp_B?%q;8!)_>$T*~c^Z)!Lui&IroFWb7xqA6mjO86D9g$~ z8Vvc4={Q+iU;kLlw1SUQbH3rsEcFgk2Y^CaH)mlcMPY7GK!RaCqSn7`@jf*pf2E){?kE-}CK2S#GhAMAPzW>cg4!s6oa zLp=fOg0qM#9>_@Aeuo__S+`;43Z^2f&7fN(_@vz^YHppDzNewRYaUtrtzQV+Vg3WD z!fBfMJ1KduD>o|FH{2fqJyy1_=rBmH`B#BGPFuiGtXYIb2V-F|Z3rsVqBb_j7OFDs zy$Go9-g>bRXGKTfdiTE!>g%kbT>Z#@aZpR|IN0gl2b=-@!VX=*8x^oNAPzwgB;40e zXs@xb97y3Xd$=1Xjd}QP?U_hwE<$z){sDvL5Pm<}gA$p5Jnxss zA^gv9gpn;UFcED+_`VYK>!U+*;+-0ReGnk+j}sL0NY}h`iO1bolRWH+AFtyWffjPy zPuJ84Qu|3YQGz6-#)Ry_o0+A?;MoIl5C^OIIpF!Z>xy{du{%XZAaV+Kb0gc);)D8} zmPcMA0VJBc)X(Dlc@#LbNA>RCrx;$36y1gU=8?@>rak%qHVh9w(YKwSjEu~}Ws)Wd zBy5Itj61>%E#!)KSeD!(os)~IT+AV1Vwzej_CcwGt-v8k`^$DwP?R(C?P`Y8pIm_P z`@3~}Z=v9z)%~g@j3KsPaqiWcwu7mMOHn%*_?Rw%Bo;=b-1NosQbkBA?j7Jfh8?2E zmlIA#$C{pMxb8xe-FVn-C;s>eq}p&fj54@CBQq1=Y>h^z*MrN0<()SEbD!#H7bf!_ z6|yKPDLsyg8uJm{2MHim48+LeBT-E*p3^K3rhmMvH5;S}k-dnBhF@z;rz>2)uFlO@WKn$Ev`s4Sr>a<-KU$~iCfW|jV+rYx>A>s z9L_>xq&UUCf8u0AV@pG%m`U02^5b+Wd`u@$@C|ACa$a_wSjC$9%;Acy83#3^BfQsh*{tC9UFLW6^yHfJTdmCavTA(Sm%wk5 zGBip4qA+B?qJ1g!Q52ZT96Mz~a*PP4_ zXRfS<@vG}c4n54ET<*gu7`{y2_{7IPykTJ zi+*f;ymk`Dn`;GzNGZ?Tw}m{R8+V!(ctcjmOim4OAkkdG{TW%A4Pc6mGA=r6);Dzu zDC|JIfq|BQ&B_R0qJ!F2UGl$5&duuuEa{D`1Z=NlPCg~xdQ3)!>=UxkNA4Da0z6?h zdOgzGQn%T|&f=-${JBbeHY}n#OL|_udW(J1-v-&>hTg0 zJb2K|^v23axLd}LXp4tIos3zJ>t!Im3B%ojbAV6z5;luA=Y!=UKpqNGh4&zqWG*R^ zLsdq_`mEFP`t`c8!Q!XxMwjmfCXz0%Pz@tF&TQpt>-2RpULRT%ENpjnEDQ1C-*t+o zAgHNoj2%GMnQC8059^e}BU$#~BDPrLaZbZ*InluxE z+z{$5gTYHo85_EaAHNioanSYGwF^*_aqaTZ3rIP%wCtQ-0rh(pN<*q`k`&OTSRq*n zP5`Pc(swgx_Fvcj@9t5M0Cm~9unxR@1qTzrb+^#7(w^*7Q?a9R1BE>Tw=FepLTL0P zT35I8p>Yve<6NAqo$Uvgcy-Uh3p-+<58@%?1c~Qo;3O_!og7c*U0$E+FcMzdr6xQ(usvkWNb@a788CQ{PBXtE7UA?cw#4o3J2|#v{YI?cFOik ztv{3lv-Pg;(i_vrd-urKiV`;@)*?;U=v5Is2G?;`_ZI1zg_cy>>ti|{RX$&Wd^v@d zuMxp^2#xl}ro4atS9F6oF*j>(4Y2gF7cI6m(52wXw)JL(kBf{6hdi8}Ctup;^^tvGm!101VZ-(ONKb<}JZBbhT}W=1h!6zxB?^;|9W$hos(Z&-Pbc4r7tB;<>p za?RQH9){pS9(lJ&KGh#BV~r2+Sgr^cT$Gi6V_@7duuw1jGycX+3w4MOeszn!l$;fV zz3&wN2Rn94Ct}At9!en+UCb1IVbFObw1Rv8Mr=%`Ba)c~7c`MxD>h_P?Wb{2K+n9F zr!U{zWm|<=x0P59J|4cXDPucX7JdZ~|9Sb}J z53_t-H{NxBy+_MAJR_E+-^!y-9Ni2FT*zcS%J;T3*Y&rWmy! z89!7WiW~Za8M@vex>0zsy+m6ADHEKHW6XqFy1dmwrk$lB;gY|?d>!lMnDIj{985Yj zAjVG^7#PSh(JMe@|1Rz?CbgSqvmyE7I?;F__IB&@=Ef%(S>7o|F5fod{aFfx9;t&= z{hg|;kr}b#kcWqygHAds-^0bA!b@BdW#a|2jpxqi92eM0{>D|Bz&ZQ)9kYUxR2p|l zB<%wQ_CHg|gl_EpS4~RoRr|=Rp1CNeb2>VDa>=dD%NK^XlzBCI4ktwBdB48AlU8jO z499uw^}zzjnBPs$q=v_Qpyu!W$xoWIOZB6p`4akhU(aTGLdpO{bpY|pjYQvrKua^-GGKtbdK@T_rYe(? zuRM_IutT1}JC&`qFVAb_w7uQO7PTW$uHgVaCaH~{4Z;bv{rHU(FQGNzM@%jQTb`;< z^}aP$xf>T_!8xsB5`UoxwVJywFvFxZ@5`l4gNNS=ciTw#04L2jx#eC$$*ZhQAbg3r z1>3@=8bEDl!;i18CAu0QEK-`w#YAEm0X>fRm_ql&y-6)I`B~?Q_JQEly2np zvqSB1V$_>%_NX0i8*7#cY?+skb>rcmxOQM*HUMCLGG*VZ4iI6GwH9!_ziR2xhv0?J zp-+>}y00|kSRS$9C7O%493=r_DP1K}rfnl*{N*q{i8mF`j%?i&EXZ|l?~gZ+5Nm`N z6Jw7|4PRDpBhsJFvrG6dByEh>I_gSZuh1WLj3g|!+3M>+xx7-?>7Nw%0Nr*jQwPGC z4~B*;n{FRm;$*LkPddaN-*g=utebDX-!{@JhcW~KV(6PtC=AT5={Cx4zyFms^58iC=t^Jd#W0)@M*(I0 zHE5J4q|kcMLwL7{oku4rIp_eG(5if38S-+Nt6Y&xjQ?a3hh$q|!@NL%G{*K0aNv_> zKDma;XCb^#P^!YIfqvckd$Ylr_)G zyb;?U55#vNP)aadEvTimjcG6z=VJU%v4z=UnGBDwiY@jpShlg2>h!FY9$E{2WJ)*> zH5ZpSm9oTjwlfCSRsm795&z9Pp!C!mzM4$ICIa=7Mrd1^sZh-Ld8C$t0)dxQ+ zRBL>kgadXL81FYixh$$7y@D8wi8XWshxc?4trev9G*}z@ZG1d?U_J~QV*bp8mW3jV#O`mHw1nQq>1kKi~8hQMaa z@P;2Huh(~x?g~`M0V4}ISXj8ruLqxKH6Y z_)RL3u_u4)pMqCDSN7@^gYa+lbGfRb1VA~=X)kJQWGn#fExNxPuwx&R!as!ie!q&A zqk8gH++ItD!E@EMfrywumm+5I%-RD3nVplWR5&*p{=K$U>$cCJzUS&={b7!ZcU&DJ zKTB*DmPQ3te@l@njHzTVYeVzS@+y75R~-+~L3_)?{luYv6kOyGwx+}Qp(k+j9>VK` zP!(qWgE=L?5|pg3b9SfgSbMs(*H*RCj40y!BMaaKp_ke2de#U^m7_8BZxyl8I4w82 zsZ!53`xQc0@1SI$9n#OxsX+~H>hpA`l~GXB;w;sA7pbc?KFuup^n*sa=#Q_t*`&J_ zj-yPA#8OpX8328e>pCO@;&HCY;KO}#H0>d$pkOrcbVt~ky~g9lLCGrKKQp1FB3hwS z#UAH;l%E$ZjmRQ{@Um-^}aZDM!6Z z7*-VDzt;myqhfQG>8v1nq~%z-Dd}4CNHNdIK`dQwjpw zH_u(Vp6;42Lb|K)wzf#Twsi}->+5Khv8(W`vdCGYaau{tU+ix^3XK9S@P{)FLBF*S zUp=#7fy(4S!S(R(t^3%L4=Z#k`pYbw9I99R7)ZMW|pGI=_cI2 zBNkNz=rTAXmP!^t0cnG^nzE7bStMMTL}mx}y!iqr)Qdq6LZO|=i1!W~+8}JW z!?)rZga-G8f!y)eWuIZEu+C$*j|vT)bUZ@ka*4Hcq4nv#TEUv&f_bth|i<2WH# zjSTF`;uBE!ZBG&7bQ|`}n_9KZo*=*!N-4)IvXTB;h=tkS;eDB=B(9PQTIB>U3hsRuF?YN6N@+g3N7`J zb_LR$l@#(V>dd5wL4k*`^Y8Bw(0s!2BJ<-J)Y#&=VOB~1?&-9VD${_}iq^?;PhJ{3 z!LWmneGSWNIPodf*)upv{q5-~AAFP^#sa96z2@IYNsU~~N+V$5ftc)RgkHT)ZZ>ikL3{FwnA!-BMQT`XM znhM}vMDOSM^|aC{Htbcn;;i&^X7~ku)HkF+&0(^dfgIg0&f7jr3Of{RJS2jsp(+3d zet(CSEXa;7R-@Tjj~#TYudfXG)fOHMiIGl0_V?E?#l>}!;BC|z_bSIbx+ck+Z zl{=4}9Id_h!xmY`ZU?}{AM^m3#)(+F6PXeZ#Xum09_^5BOaAXx8-d8OjYZi+BcU#b zmal0Y(T6MAjeC$7RSPWH+n+*CY7ZjrcoYyk@$v}}q3_Axr61i%MgFz|#4As{ilFBh zPvql8ZB-bZ`x?^7BX9~YqlumW0qzJ7ArbpnD<}hURP+$OW+YgVqqv)aH(rKq{ zRNy1n(W3;9tmD+bn=fBTFM-wdi?Hed*aSsd$faQ&fQ`w<>D)me$wFw)2hFUWUud45 z&X}H?tFgTTZCapYuyHOjivFyci$Y(5wYBx|r+c)ABOSS+D~i6cainES!e>51(jbr7 zrRc$i`sT--SsvBLE;~8Bqhnz3wwc#KvLUfUVE4$kXnwaOgAMOCCiz3H!y}s?1UG|1 z9zL|nb#$FrDPNIEfAglzK6oG0FIRS!FN>^=idCc=&(0BM=jyY!da|tw6p-K-4Ez$n z;b-@ssx-qEYZWgbRm4L`1_qU;iO$3>{H*GO+g=Ub<{~8}?U`u>{E=pruu>ryu)rDc z+;}!|do8hHOm;U3s-XX`2Me<$bE$qZj5`(=g!#c@Ep`?t2VwB}iGmfvCz`N+zf<9YcYZ|$tVJz6 zbnxZKlz%5F#4jqaaIbQvw_v0oV56XorKzA|%g)NiMs34eV5e3JhcyP>V~G1QX^vmzom}OXj4y6@7FgPnE}@UuR$BGqCAR z7*unS5BpB;FuFZb6V-5DU!RP3H+uqv(=(WlP=4}}5fX$5Xpwo*Moaw2yL=bH_(Ruw zxK4zO@Psl3t3|M-j%0C|{eJ)hWo{qN)WpPzlle>OyB+isEKX#aoq8N9Cs zZq6H$Os5q39a)c*&SvJgs;hwlji#WGhx@Xd$Kq#Y7LHJzDMZ3D;u}UW8<-|ZB#Rg% z{@+(w%7C$-zAxP?@q5O%O9YZ~Mb;+uDtM5hQPb@u(C%<4%%ctdb=gmV`O`x z-zA!T1TCNR9IHmy5=>Zb)Y_iBX}l&#;;Snyd}S~1Z?!0w5#H=L%C1+;0>E(pE7CE4 z6}w6TMjOlB?ki#Thq#1MRoOm#)SKDL*jmfa>K-(C&rk;Jrp1cb+I~dr=>wQ`Bl6{g z9%xhW<(d}K17%2iui(BQx#`{~3KtJ14usnu(|sC2e-~caW2Ks@+pF1CvXn|;YupW{ znjk1WsclLCY%(BWBX^+v7pT!=i6{z0RQV!U;0Cuv;8VEwh96WpFigN^eftpJ$%8+A z^Dcfa0xr^d5~ZEXjVRlt->1Zh8vA8(C8)W51cp5@6d(LsE>rt~CK?Qj+T64dq39s$E`@9P^OAefT9Fb05*Qd$Jn#h4#5BA`b_%lvV zO2IW9ROcpfMwHY^Z%IhMO+@@G$E)P%pPG}q4s?Yp3O_^>toKoi)&CarAyfjAb@}P^ zg_lSY{3Ff1q^r>RYqyg|<#G5KI1aoGSn81M=o@aPr;?vVx?I0xluREqr%@&dUd%Jy z9Ft={hBrspk>De=ML6*ij{~~wyBfoMO&R!B_``Wl$l}7n>R2^I@k77xN$az{GK2TM z9_uNbgdh5c!7>DZ%&u$b3khoQiSa3#i0>rG2j|%pfZ}?fxr?nOGq~^I=5rp^l$mR; zgkPa&fBlnJVK6FSe09WeEI@dWKR|R#zVYm_;`Ls^-S;F|Gbrok9&O!RlYuVI1Im5# zr`~_pA*s4HK=o|8$oYNppIiV5_mKV=O;jcvAOhFAPkzl0fOTvMM}>T{f_0=>1`;5S zI@vGy5XLB&Yd)Bcz9akJsc&$ZcU&f9N%%z$8>-(26q}H=nja(75BF`ypOMZox-3`;#x9xa40tjJHsV+53Vt z9`y&aUb%BC5Rtmu+sm_Zt|d8HB&%MjvGz}Taz)Yj**wA<1gVPo6JV^x1^Q-M#I zOOekW6a%UR2C;RqkvkEVEiuUIeEyYf*&a}eh^X>=z_maWiYPK_`PFeR#u6dlx- znGwPV{44EOCdiAWzWlAN1D+(pQfD|)DPqty_Tl}%*+bpigG;Y_T62lg^`x}j%p(g5 z9xwaAdWD~c>kJO7|LGZBQE?#7afya2=`cKHB=VvivlkT&Pk0G4e|mf!gAN{?js>&j z)=>9i_loQAV>ziTrNBy8cz@BAmzM(`I^)nZook@Lpre*tp$Qgz$lFIkgQ_yF$sZ-J zGM82m>NL7T)xDABQ#FR6?$U&aMW)L)0{0ER%cyx#XbVK>4mrd28P4GWYw|t}b?tdDiMw%6xm2))w|-p7 z3OC_7<+?PxNJ6zZGi4&;JU3Op;r@R_29`;;D7gx+?@D@cmxkM;@WcJx%aiOY<;FD> zsO#hybVE#(b>|^!OxE!^pDBc#V%o=Ouy3<~nT)q@`j+74u^9sA0%2>%_5$3AGrJG} za{sXiIu&>%jmtnGa1VY0_A#ORIfD+vAk1_75EhrD4>VkVQ8KO4VwJVAw8+W0@P2Ae zGH1CUOEP;cFD_$q{ECB zlYV8H`?j){Jvg}eWuv0tM%{!Zr}62nzK2_D&rMCbKcj;p59mmtF&UuSFZ-bzKuTX8 zXs0Kq#^Q!-kyS{Y!4?uI^YyUQefF+>^Z^?S`(tX19k2e3Dqk7(iLKb~N-x{*^QEoX z&VPfkMQTcNCU1MAnQY&-@4dOclJO8=?M6@Wa~!xNRp8xl^WMw3z+uVO_kbkPK)_B` zRSI;4(+Ww`+~&`IDaO+yw}zS-skY_uW*SCGK0NaeS=ap+?@9SP>Usq%e^`v=6_glj zOx)_PNVFbU>GoOS*``X|cr`l7DYKB=Ryc9hJfOTYigfiYU>ae0s)3akfZ0?=WSgVN z(V;)5jX*R|8^HA={3Z>WYBBR6MODox*BFF7$bFX)~#yh1@(=R8$t zw;+Kxi#R*=WDnjPmK%E9@6#OUa++Q}8n~{n;54_Y<_=>7mME*}taCZjHT+iyqf0G5 zzZJM*HTY9oQa;b*>$)n1-X~g2|BiN1v7N>eM=IJ*P;%igGyelQNn|1)vz1-*@Jkq+X@|r;P0n^ z=d$F&E~BbMGnl+j^lIHbxxAUbth9e7GZIy`w9*mlAlcF9*-+L*#o}9Wo_?Fp?ZIq* zl3>3@shu&a2x(An!v3C$Ca>A`ufg2Zd{FlUIiX^3Quee4Ni6sw)Lj92gnN&`yi*Ry zJi5<)KBW5`ezS2je>U@(g2QS1Y!2$n0j3>Hm{eL%81aj&_L;DaKH9T>{BFIV{@F52E^&Av-P*X8|{1iR}H1tJZ5r zK0eg|*^w0Xt=^Dco3yv)<9`ilQ9srovzHwC>(6{;od>2y&!x%8EK`1Ck>i7z8^W}rhE!(X|`t?ZElHHMNP@ubK2O#3I5MpA}*+^ z-`(79c_NL*awEk>*)*6@S+*q_tX2#N`rLc!uk^6ud+VT#5wwyTTnolQc2)+Azz5Hv z2jXm=Wy0_H?I( z7d8L;0(-6DW-P5}zfP*A4N@prv_Hh^EnoXCflYjg?k5bi*zMNFLxa(9d4C_+OdHrt zJB7lKlbY{_{<-7863GZH$qII8`Op%RpXb>yzwTpkj#Ok{kli3R?nsH9O!v#)-rns2 znM{w20!pf~ypqh6fL_0KiG*VR`e_$<%C6Dx%p^#l)4cR1f>!{?n({aaQZcR4XS z_T_AmW!owpQ@P=(I}!cGV_AbX=GW%0K;%k63$+(@2}H%4!(%s_K%E_Z4Q>QBEE*9N z_y`6}{#A1aWjm6mh#7QrmW1 zRDF!@rM;Bx`K_p_L(}^uEWoa#-S>>puScX-z4n|MiF0JV<^?m&2hcTHgM_ssa=*7m zX+1X09D^xIXJWruzHM^nk;fL&#!|t^X3+XZ|NAH?{(ojNvmoIvjiZY@@0WZ=Vn&ip zzd1uErUWp#74me*1o;Y@IYr&}Oc|<*T=gmFl)y?8IM1@x4}PA#MkZ}`aZB;mhcI_~ zrw_|M3&hQvtG<}=rL{THwu@k$q%%=8-tYty?WP@eB6M|bwxl^2P^>g;GcsP>|4z~1OgsN7p_ ziuK&169u2`!6PGyqVe3YOYU>usGosV7We$x0g%+G@Y`ud^f?!?`i-yXz$Cz51!n*J zNaMQ-EQBSpH|i3+Eu7(98pDAzBZWhx7!M}Y8>6aBi&uXrM2)N?{2EqNsZz1lR7X#N z=F~P|GK9Pb@68xfIGIAOv9Y`ElTcfvh2|Y-`rlvGl3eF6% zn2RGL!{L|0)3R5t!~Yw+ix0!Bh>k)I@gE&!Axb@RjR(eX6{_cfCFu{fM!-=MO}HE* zCsb8`pD!W-cIjlm3`&~GYu(#a7xtEs_6GKbupi5RXTN_J`~Pmr;%`7elhy5l%SX*^ z<;55yxz@hb_}-TDzl$3Z2c^H4)|~G2|K3j)@3=m@5-|02G_PP#Xx&(0%4EsB8RgInxW2gRB4}Gp*k~7ln)w#eiUp1+F^8=>#<=vHZ!E!gzxsZyP;-fq zj3W519Q`;{W4it6O)R5{tCCAolf&TD!i<}VUtP;Xlb?2`+pde%*?qa49_P2_PxhsL zJ7fnhWcGYoDv1TI786TkpLYa<-587?Jdv?2obqnq%_!m%wu?MOO^e5jsBT*(mQD>< zhuPn|LXKw5@@xGJvhWneq`eT5^(vQpJpk-)WH1u-(~ND(n#AIK=@E2 z=Q_!K+m$;)a`a=cO9I7h6IX@wLz-O$Pb2T5HI-ad5bkoO* zFBNnwfbZTATYU8)jCnZib($N9gQ>y|T@-o}1f8yUF9vTWiO;q3)wVY}TKui6E_JqN zxdUMXDGtW<>Pzq(I@`k7Cq_LzcvWWEMe=&T zKDKLnI@Qs+cP`M_;@ymg_JM5^to}#3B}Y%7`S*u@3Uok_|6%PDsC~emnz_x`|MstV z|EbV-W&Rt}g>)DV<4zOHrneb>5_PR|{YJR9vkipe{7%u;BNXx*19?lH(>TZaxSp8N zX6x~5Q;&grx{6zt&b!Bc*tEYZ>DI4>6<_Xtw0YPi7&{m1sTkom?J5PMMHTzfN_DPrajB)L){G`Bx3|05_4_sa?k1R=4;aX_ znVbvEwXf$JHGEnM1YG#t?k^1l{FULSJp;?@;mnXjp&xdI9KkJ=WNWSW*vb?r&}JyQzooWe!_hydhXM#CTukrS3bOWs*>Y=8MCwGRqu?_Hnu`; zCz)4}R3~VQkBLs%r5-1293rV&30NK&#UFataXGirTu}N;=~B=B`xD=r#Nw@Gf0N4b zex~HRn9Lb7nj+_7vRFSBcO>1W41j_mGobd(FIgVnG5Dd2g7n?4@jw8Inqsz^nmNht z((mtWUQ?ih?Kh56xL1EjIfSZ8hleFG%`@hFpW+u{ZH%y8CNEf@+fi_qBrlly&HQYd z64<&8cJKC@zg=yC8diM70~pU!56o7R?O)nW6~42w_@M|^XB!6k!qp(!Cew=PO{HwF z+6P-rDw-l<{$E<^*&Z7Eh~a6|NU9j+w)#ftTNp62C&snGd=WQ7#MvWi48ieLtO?Io zzYDk((LsO5@3)53Ew>`X*;eOG4+s0+F}uf!HcEC?bC$#xPJA1kU3Wd>*c%(%<`%4h zIoO{i{ripo-s;KgJMUECuS;w z{qGF5wpa)FyZDn~(4;|YgooMC&v$1on6v~0w}(r^y7mQBm7fXMDF$%mxqA0fl{pn` zSjG;V0vB7XwecjM%~b5-Xpfx(b5?TAWs<6*oO6DBzn*@7SCpFgg1}vo?m(4LoHdie z`Ypw;mx@%IE73Y;Q3{9UqHbIl^!p5!4`QRjtX=Y83y~Pkvfev{ncX-OK06bnAUt!2 znOk~1+eUL=`TTQU7Vm-XcDLi`AoH@nZW8RG6&yU8)|i9rSY3RMZgiV2-Wn3{ds$v0 z$R52I6vFMmY(I6_`$}D^<+7XRK@H=AiNAidmKKYsZym!@1AIhSDPRAySu~~*#CJ12 zubE#2?(G4}V!Sd1cl7{P@^rC3HcW#)Md*1z=Ir{c-G?nl+xp_ZkMD;&s4RN4uP6v= zo=qz*w#Zw0W`h;?(4DYMIr4~~8Dn2^T@0|@{ZVa+ng(JF->e5Z5@@$K3#_9Jq(Q+>4_!NEGjkOLS*`d@T&Bokj#Rj8 z81QY4Nsij)+k_S^oh}Gl~9lyv|6WJrRm{;<<(4x$IP$ngGxf?&D=9pEqHY1Url==ZQ z>+J*Qi~d=ZB%&M&{=55g*ZDsVks1!MlIMCl?rp@`^d~^$5x`s<;^XTP%#X-u$i_(i zi!a}3i>+t-!-iNP1sqnK3fB!GuuTT!23&D7a ztF5GjGo{S9_>=;z79Al8lWPHJ`nIn-J?`({*`W(E&_C!<@;d*w8fU&@#V@;PQn*vED;j}raacyYrLm{gVvDAimB7fWn|~{)J$MA_ zXVyQ??>B2X_@&QjvgCMV26(y<-B28g8&zD4jgo%hwMCmP@bc<)FxYnuIczK92^X`P zcx)VKBCGJTaTz38(d$XhM`kml$CGIUOx;UeTWm<|EFFHHmUS^m5U}t+)0)YF>h$;T z_FsSE5pQck_`Gt>DDeaGY0`PHyW1+$;y9vd`=WB9;#|!3_M72&z0#LOlP5L1ew~q3{(IuU${yHm9;f5b z+;&;7Y}e-0gi)~6w$yCp;P?Wf*0o;Xd``{d+qPH8LMvWF+uTHL^9SA#+1Xt>wK6~) zX6jBL&t8(L;5DEq3AfH_NIRy9ynO71CEt>J$U8A9is|_0a z>=hR0{;^Q#AimFMrm7a<35h25gqdcknC;??siri|?Xlr94*@5GPK4O_`=kl$;}2pj zP3C_#wImQ)9te7$`y6lm@DC{iabQ}SWq3_J{re|>{(vn6Sb23{E4;${k9~y@`QLB; zrNO^^uzM-~y+8lTgMVcrQ9=BB7ykcs7b>^+lHTV#UcL0Oe-He3R!KuK>x@~@{{ discountedBagelsList = new ArrayList<>(); @@ -142,18 +140,14 @@ public double addDiscount() { totalPrice+= 3.99; // For each 12 stack discount, add this price to the total } - System.out.println("After applying 12 stack discount, there are now " + bagelsAfterDiscount12 + " bagels left"); - if(bagelsAfterDiscount12 >= 6){ //apply the 6 bagel discount for(int j = 0; j < 6; j++){ totalPrice -= discountedBagelsList.get(j).getPrice(); - System.out.println("price deducted from " + discountedBagelsList.get(j)); } totalPrice += 2.49; bagelsAfterDiscount12 -= 6; } - System.out.println("Bagels remaining " + bagelsAfterDiscount12); //Calculate coffee + bagel pairs for the remaining discounts for(int i = 0; i < bagelsAfterDiscount12; i++){ @@ -165,7 +159,6 @@ public double addDiscount() { } System.out.println("Total price after discounts " + String.format("%.02f",totalPrice)); - System.out.println("You saved a total of " + String.format("%.02f",totalPrice)); return totalPrice; } @@ -179,6 +172,7 @@ public void printReceipt() { Map fillingVariantCount = new HashMap<>(); Map fillingVariantPrice = new HashMap<>(); + System.out.println(); System.out.println(" ~~~ Bob's Bagels ~~~ "); System.out.println("----------------------------"); @@ -201,7 +195,8 @@ public void printReceipt() { printReceiptLines("Fillings", fillingVariantCount, fillingVariantPrice); printReceiptLines("Coffees", fillingVariantCount, fillingVariantPrice); - double originalPrice = calculateTotal(bagelVariantPrice) + calculateTotal(fillingVariantPrice) + calculateTotal(coffeeVariantPrice); //Recalculate undiscounted price (Not ideal solution) + double originalPrice = calculateTotal(); + //double originalPrice = calculateTotal(bagelVariantPrice) + calculateTotal(fillingVariantPrice) + calculateTotal(coffeeVariantPrice); //Recalculate undiscounted price (Not ideal solution) double savings = originalPrice - totalPrice; System.out.println("----------------------------"); System.out.println("Original price: $" + String.format("%.02f", originalPrice)); @@ -210,7 +205,6 @@ public void printReceipt() { if(savings > 0){ System.out.println("You saved a total of: $" + String.format("%.02f", savings) + " on this shop :)"); } - } private void addToMaps(Product p, Map countMap, Map priceMap){ @@ -230,44 +224,21 @@ private void printReceiptLines(String productType, Map countMap } } - private double calculateTotal(Map priceMap){ + private double calculateTotal(){ double total = 0; - for (double price : priceMap.values()){ - total += price; + for (Product p: basketContent){ + total += p.getPrice(); + if(p.getName().equals("Bagel")){ + if(((Bagel) p).getFilling()!= null){ + total += ((Bagel) p).getFilling().getPrice(); + } + + } } return total; } - //Sanity check - public static void main(String[] args) { - Basket basket = new Basket(); - basket.changeBasketSize(20); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLO"); - basket.addFilling("BGLP", "FILC"); - - double newPrice = basket.addDiscount(); - basket.printReceipt(); - - } - - private int getBasketSize(){ return this.basketSize; } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index b5a846baa..5a7d0368e 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -3,8 +3,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static java.lang.Math.round; - public class BasketTest { @Test @@ -53,7 +51,6 @@ void addFilling(){ basket.addItem("BGLE"); basket.addItem("BGLE"); - basket.addFilling("BGLE", "FILC"); basket.addFilling("BGLE", "FILC"); @@ -108,12 +105,14 @@ void addDiscountWithFilling(){ basket.addItem("BGLP"); basket.addItem("BGLP"); basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addItem("BGLP"); + basket.addFilling("BGLP", "FILC"); basket.addFilling("BGLP", "FILC"); - basket.addFilling("BGLP", "FILB"); double newTotal = basket.addDiscount(); - Assertions.assertEquals(5.79, newTotal, 0.005d); + Assertions.assertEquals(6.72, newTotal, 0.005d); } @Test @@ -130,8 +129,6 @@ void addDiscountVariedBasket(){ basket.addItem("BGLP"); basket.addItem("BGLP"); basket.addItem("BGLP"); - basket.addItem("BGLP"); - basket.addItem("BGLP"); basket.addItem("BGLE"); basket.addItem("BGLE"); basket.addItem("BGLE"); @@ -140,14 +137,18 @@ void addDiscountVariedBasket(){ basket.addItem("BGLE"); basket.addItem("BGLO"); basket.addItem("BGLO"); + basket.addItem("BGLO"); basket.addItem("COFB"); basket.addItem("COFB"); basket.addItem("COFB"); + basket.addFilling("BGLE", "FILB"); + basket.addFilling("BGLE", "FILB"); double newTotal = basket.addDiscount(); + basket.printReceipt(); - //Assertions.assertEquals(5.79, newTotal, 0.005d); + Assertions.assertEquals(9.95, newTotal, 0.005d); } From 442ee8caef04a3bd26250dc091279d464cf56394 Mon Sep 17 00:00:00 2001 From: Jostein Ruen Date: Mon, 26 Aug 2024 15:42:51 +0200 Subject: [PATCH 23/23] toString update --- src/main/java/com/booleanuk/core/Bagel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index fdd9f5fb7..7234464d3 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -19,7 +19,7 @@ public void setFilling(Filling filling) { @Override public String toString() { return super.toString()+ - " filling=" + filling + + " filling= " + filling + '}'; } }