From 6acf0aa6d57370bb06426ace114492addfc3a9bf Mon Sep 17 00:00:00 2001 From: April Howard Date: Sun, 23 Feb 2020 18:51:43 -0500 Subject: [PATCH 1/5] Define instance variables. Defining construction --- src/main/java/io/zipcoder/Student.java | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index b543e36..907fc8e 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,4 +1,44 @@ package io.zipcoder; +import java.lang.reflect.Array; +import java.util.ArrayList; + public class Student { + private String firstName; + private String lastName; + private ArrayList examScores; + private int numberOfExamsTaken; + + public Student() { + this.firstName = " "; + this.lastName = " "; + this.examScores[] =48.00; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getFirstName() { + return firstName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getLastName() { + return lastName; + } + // public void setExamScores(ArrayListexamScores) { + // this.examScores = examScores; + // } + public ArrayList getExamScores() { + return examScores; + } + + public int getNumberOfExamsTaken() { + return numberOfExamsTaken; + } + } From c629ce7c61697b5d6154b1eea2b03bef72549612 Mon Sep 17 00:00:00 2001 From: April Howard Date: Sun, 23 Feb 2020 22:40:21 -0500 Subject: [PATCH 2/5] getExamScores, setexamScores --- src/main/java/io/zipcoder/Student.java | 50 ++++++++++++++---- src/test/java/io/zipcoder/StudentTest.java | 29 ++++++++++ target/classes/io/zipcoder/Classroom.class | Bin 0 -> 276 bytes target/classes/io/zipcoder/Student.class | Bin 0 -> 1527 bytes .../io/zipcoder/ClassroomTest.class | Bin 0 -> 288 bytes 5 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 target/classes/io/zipcoder/Classroom.class create mode 100644 target/classes/io/zipcoder/Student.class create mode 100644 target/test-classes/io/zipcoder/ClassroomTest.class diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index 907fc8e..159be71 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,18 +1,18 @@ package io.zipcoder; -import java.lang.reflect.Array; +import java.sql.SQLOutput; import java.util.ArrayList; +import java.util.Scanner; public class Student { private String firstName; private String lastName; private ArrayList examScores; - private int numberOfExamsTaken; - public Student() { - this.firstName = " "; - this.lastName = " "; - this.examScores[] =48.00; + public Student(String firstName, String lastName, ArrayList examScores) { + this.firstName = firstName; + this.lastName = lastName; + this.examScores = examScores; } public void setFirstName(String firstName) { @@ -33,12 +33,40 @@ public String getLastName() { // public void setExamScores(ArrayListexamScores) { // this.examScores = examScores; // } - public ArrayList getExamScores() { - return examScores; - } + public int getNumberOfExamsTaken() { - return numberOfExamsTaken; + return examScores.size(); + } + + public String getExamScores() { + return "Exam Scores:\n" + + "\n\tExam 1 -> " + examScores.get(0) + + "\n\tExam 1 -> " + examScores.get(1) + + "\n\tExam 1 -> " + examScores.get(2)+ + "\n\tExam 1 -> " + examScores.get(3); + + } + public void addExamScore(double examScore) { + this.examScores.add(examScore); + } + + public void setExamScores(int examNumber, double newScore) { + this.examScores.set(examNumber -1, newScore); + } + + + + + + } -} + + + + + + + + diff --git a/src/test/java/io/zipcoder/StudentTest.java b/src/test/java/io/zipcoder/StudentTest.java index a9fedec..6127583 100644 --- a/src/test/java/io/zipcoder/StudentTest.java +++ b/src/test/java/io/zipcoder/StudentTest.java @@ -1,5 +1,34 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; +@Test public class StudentTest { + private Student firstName; + private Student lastName; + private Student testScores; + + +// : Given + String expectedFirstName = "Leon"; + String expectedLastName = "Hunter"; + Double[] expectedTestScores = {100.0, 95.0, 123.0, 96.0}; + +// When + Student student = new Student(expectedFirstName, expectedLastName, expectedTestScores); + + +// Then + + String actualFirstName = firstName.getFirstName(); + String actualLastName = lastName.getLastName(); + Double[] actualTestScores = testScores.getTestScores(); + + Assert.assertEquals(expectedFirstName, actualFirstName); + Assert.assertEquals(expectedLastName, actualLastName); + Assert.assertEquals(expectedTestScores, actualTestScores); + +} + } \ No newline at end of file diff --git a/target/classes/io/zipcoder/Classroom.class b/target/classes/io/zipcoder/Classroom.class new file mode 100644 index 0000000000000000000000000000000000000000..e3e3105f62ae6cfc0804ea21349da326cbeab864 GIT binary patch literal 276 zcmZvWy>7xl5QJxqf5347MMBhcK*2TX644-0Sx^wUKbsRAGQQ|+Qt(z(ktlco9x7su zA}V&JPdBqWr@j82F96=r4bi}BfOdcm!T;2SuBL>>aFh_-nOQ4BC)R~p9QLWQUoy?v zd5cXZ^F&%*>wnX&wz?$rV{ODye`lPvVwTIYw8rc|2;s^cY^LVA{-XVuOm^}|MsVQ~ zdQY>2ZoMONS!~2I-Kng?01jVX7jbi#>9Z1d4S3^U(1{HP0n=w29B4A5``becAuGZQ H(?N6t{#`mN literal 0 HcmV?d00001 diff --git a/target/classes/io/zipcoder/Student.class b/target/classes/io/zipcoder/Student.class new file mode 100644 index 0000000000000000000000000000000000000000..55915b0ce47f5557e09952bf7687e8e8048b3478 GIT binary patch literal 1527 zcmZ`&T~8B16g|^!TUr(=Ek)(S4^V82QU&~?Kw?x9lLj;;_~6r0hPv2p$#!eN-{gZD z(ZmOTfIrH3W_R0e%lb02bLZZ3?m2h%&);9a0jyy&g(U7KF@k$)SyoF)E%%dnfRz+h zv6jHY1Re<_k4(Gm>=;cckf|ISAB|GOuNF3ey?gYMB<(%pgR}(1 zD}j_F+fJ7?`|e`3KzzfrOlM0VnlJ1NXwO@RWFN1XmfUes_YBe~fvuX+*f(rbo&BKZ zyfnXT~2pnm7cMgZfGwc zRc}itP?ihnLs97UfwalIZ~EXAM+w&F8)Z%Zl;g>>Y0!L{N&Clm8*D3=FNBEYn5wOg zU6b3UGFtcjTUHNBM-EduQW({tt0jv`9TUhT@L0zaJWXI-M;RLe*^n6sr2Efu_u!a* z4uq;_ZAUga`&Ne+{<9>`Yd&Cy1CvIRW6Zi3gJFThiArklr488Yv6Kt@xXHgJ$)75Q zh!ViBh|=KhW4HvqGWR>pI2F0yl*fI9cht@GGEZ-LFSySYe?kg;AK3Iy}V46l)1yJ;o zd;q0wj*3)wFX2!*z^0IpPao0Ki%$Uc5 zk5%ICGAb*+5Htd%JMIRr1$4%GI&XzH5*==2o{cR0rx7(eMSMH7k?3$Ei=mAy;tnCy xRD&vFpNCW|hZg5i@QXL8Sy?dtjgImG{6Io&{T{rztazSW}CtHHMG&@D;#yVFY=ToBWMkX06 z{n(^3+e)h|{uJHvpbNq<)<%5m&y>AZEHhaY)|k^q73CWtT${5^)w`}^{%mJQ`6VN` z@Cbu{GYGxvPGmCQi&b(|X^9aW{-P@4<^V>YnW#D7O@BZa790eOKFeT3lQF7i4=seu J2yI3O(F2lmKNkQ1 literal 0 HcmV?d00001 From 4055f935a2156c7d18766583388f1f05f10e81b3 Mon Sep 17 00:00:00 2001 From: April Howard Date: Sat, 29 Feb 2020 14:24:14 -0500 Subject: [PATCH 3/5] Update Student.java --- src/main/java/io/zipcoder/Student.java | 57 +++++++++----------------- 1 file changed, 19 insertions(+), 38 deletions(-) diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index 159be71..2d6d1eb 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,18 +1,19 @@ package io.zipcoder; -import java.sql.SQLOutput; import java.util.ArrayList; -import java.util.Scanner; +import java.util.Arrays; +import java.util.logging.Logger; public class Student { - private String firstName; - private String lastName; - private ArrayList examScores; + String firstName; + String lastName; + ArrayList examScores; - public Student(String firstName, String lastName, ArrayList examScores) { + public Student() { this.firstName = firstName; this.lastName = lastName; - this.examScores = examScores; + this.examScores = new ArrayList(Arrays.asList(examScores)); + } public void setFirstName(String firstName) { @@ -23,50 +24,30 @@ public String getFirstName() { return firstName; } - public void setLastName(String lastName) { - this.lastName = lastName; - } public String getLastName() { return lastName; } - // public void setExamScores(ArrayListexamScores) { - // this.examScores = examScores; - // } - - - public int getNumberOfExamsTaken() { - return examScores.size(); + + public String setLastName() { + this.lastName = lastName; } public String getExamScores() { - return "Exam Scores:\n" + - "\n\tExam 1 -> " + examScores.get(0) + - "\n\tExam 1 -> " + examScores.get(1) + - "\n\tExam 1 -> " + examScores.get(2)+ - "\n\tExam 1 -> " + examScores.get(3); - + StringBuilder examScoreString = new StringBuilder(); + for(Double studentGrade : this.examScores) { + System.out.println("Exam %d: %.2f%n:"), (this.examScores.indexOf(studentGrade)) + 1, studentGrade); } + return examScoreString.toString(); + } + public void addExamScore(double examScore) { this.examScores.add(examScore); } public void setExamScores(int examNumber, double newScore) { - this.examScores.set(examNumber -1, newScore); - } - - - - - - + this.examScores.set(examNumber - 1, newScore); } - - - - - - - +} From 16d4cf441e3561a33de7f53fa6e57f51e192ebf0 Mon Sep 17 00:00:00 2001 From: April Howard Date: Sat, 29 Feb 2020 19:09:52 -0500 Subject: [PATCH 4/5] add methods to Student class --- src/main/java/io/zipcoder/Student.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index 2d6d1eb..511154b 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,19 +1,16 @@ package io.zipcoder; import java.util.ArrayList; -import java.util.Arrays; -import java.util.logging.Logger; public class Student { - String firstName; - String lastName; - ArrayList examScores; + private String firstName; + private String lastName; + private ArrayList examScores; public Student() { this.firstName = firstName; this.lastName = lastName; - this.examScores = new ArrayList(Arrays.asList(examScores)); - + this.examScores = new ArrayList<>(examScores); } public void setFirstName(String firstName) { @@ -24,19 +21,18 @@ public String getFirstName() { return firstName; } - public String getLastName() { return lastName; } - public String setLastName() { + public void setLastName(String lastName) { this.lastName = lastName; } public String getExamScores() { StringBuilder examScoreString = new StringBuilder(); for(Double studentGrade : this.examScores) { - System.out.println("Exam %d: %.2f%n:"), (this.examScores.indexOf(studentGrade)) + 1, studentGrade); + System.out.println(("Exam %d: %.2f%n:", (this.examScores.indexOf(studentGrade)) + 1, studentGrade); } return examScoreString.toString(); } From cfe8bedae0522c9fd4fb9fee651cd55d19d004a4 Mon Sep 17 00:00:00 2001 From: April Howard Date: Sun, 1 Mar 2020 14:01:45 -0500 Subject: [PATCH 5/5] add methods to classroom class and some tests. Still working on it --- src/main/java/io/zipcoder/Classroom.java | 105 ++++++++++++- src/main/java/io/zipcoder/Student.java | 68 +++++++-- src/test/java/io/zipcoder/ClassroomTest.java | 16 ++ src/test/java/io/zipcoder/StudentTest.java | 138 +++++++++++++++--- target/classes/io/zipcoder/Classroom.class | Bin 276 -> 5255 bytes target/classes/io/zipcoder/Student.class | Bin 1527 -> 3201 bytes .../io/zipcoder/ClassroomTest.class | Bin 288 -> 1162 bytes .../io/zipcoder/StudentTest.class | Bin 0 -> 3076 bytes 8 files changed, 292 insertions(+), 35 deletions(-) create mode 100644 target/test-classes/io/zipcoder/StudentTest.class diff --git a/src/main/java/io/zipcoder/Classroom.java b/src/main/java/io/zipcoder/Classroom.java index 64566f0..520f73a 100644 --- a/src/main/java/io/zipcoder/Classroom.java +++ b/src/main/java/io/zipcoder/Classroom.java @@ -1,4 +1,107 @@ package io.zipcoder; -public class Classroom { +import java.util.*; +import java.util.function.ToLongFunction; + +public class Classroom implements Comparator { + private Student[] students; + private Integer maxNumberOfStudents; + + //constructor 1: int representative of the maxNumberOfStudents that this Classroom can hold. + public Classroom(Integer maxNumberOfStudents) { + this.students = new Student[maxNumberOfStudents]; + } + //constructor 2 Student[] representative of the collection of Student objects this Classroom will store. + public Classroom(Student[] students) { + this.students = students; + } + //constructor 3: nullary. initializes the composite students object o + //be an empty array of 30 Student objects + public Classroom() { + this.students = new Student[30]; + } + //getter return the composit students object + + public String getStudents() { + StringBuilder builder = new StringBuilder(); + for (Student s : students) { + builder.append("===================\n"); + try { + builder.append(s.toString()); + } catch (Exception e) { + builder.append("No Students Currently Enrolled\n"); + } + builder.append("===================\n\n"); + } + return builder.toString(); + } + //getter: returns sum of all exams divided by the number of students + public Double getAverageExamScore() { + double sum = 0.0; + for (Student s : students) { + if (s != null) { + sum += s.getAverageExamScore(); + } + } + return sum / students.length; + } + //addStudent student uses Student parameter to add a Student object to students list + public void addStudent(Student student) { + List studentsList = new ArrayList<>(Arrays.asList(students)); + studentsList.add(student); + studentsList.remove(null); + students = studentsList.toArray(new Student[0]); + } + + //removes student from students object. array is re-ordered after removed. null at end + public void removeStudent(String firstName, String lastName) { + List studentList = new ArrayList<>(Arrays.asList(students)); + for (Student s : studentList) { + if (s.getFirstName().equals(firstName) && s.getLastName().equals(lastName)) { + studentList.remove(s); + break; + } + } + studentList.sort(this); + students = studentList.toArray(new Student[0]); + } + + //can't mdify arrays.asList so wrapper ArrayList + public ArrayList getStudentByScore() { + ArrayList studentList = new ArrayList<>(Arrays.asList(students)); + studentList.sort(this); + return studentList; + } + + //getStudentByScore returns and array representation of Student object sorted in descending score order. + //if two students same score, order them lexigraphically + public String getGradeBook() { + Map> gradeBook = new TreeMap<>(); + ArrayList sortedStudentList = getStudentByScore(); + Integer binSize = sortedStudentList.size() / 5; + gradeBook.put("A", new ArrayList<>(sortedStudentList.subList(0, binSize))); + gradeBook.put("B", new ArrayList<>(sortedStudentList.subList(binSize, binSize * 2))); + gradeBook.put("C", new ArrayList<>(sortedStudentList.subList(binSize * 2, binSize * 3))); + gradeBook.put("D", new ArrayList<>(sortedStudentList.subList(binSize * 3, binSize * 4))); + gradeBook.put("F", new ArrayList<>(sortedStudentList.subList(binSize * 4, binSize * 5))); + + StringBuilder builder = new StringBuilder(); + for (Map.Entry entry : gradeBook.entrySet()) { + builder.append("" + entry.getKey() + " Students: \n\n\n" + entry.getValue().toString() + "\n"); + } + return builder.toString(); + } + + @Override + public int compare(Student o1, Student o2) { + return 0; + } + + @Override + public Comparator thenComparingLong(ToLongFunction keyExtractor) { + return null; + } } + + + diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index 511154b..07b86e5 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,20 +1,22 @@ package io.zipcoder; - +import java.util.Arrays; import java.util.ArrayList; -public class Student { +public class Student { private String firstName; private String lastName; private ArrayList examScores; - public Student() { + public Student(String firstName, String lastName, Double[] examScores) { this.firstName = firstName; this.lastName = lastName; - this.examScores = new ArrayList<>(examScores); + this.examScores = new ArrayList<>(Arrays.asList(examScores)); } - public void setFirstName(String firstName) { - this.firstName = firstName; + public Student() { + this.firstName = "First"; + this.lastName = "Last"; + this.examScores = null; } public String getFirstName() { @@ -24,26 +26,60 @@ public String getFirstName() { public String getLastName() { return lastName; } - + + public ArrayList getExamScores() { + return examScores; + } + + //public Double getExamScoresAsString() { + // Student student = new Student();; + // return getScoresAsString(input); + // } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + public void setLastName(String lastName) { this.lastName = lastName; } - public String getExamScores() { - StringBuilder examScoreString = new StringBuilder(); - for(Double studentGrade : this.examScores) { - System.out.println(("Exam %d: %.2f%n:", (this.examScores.indexOf(studentGrade)) + 1, studentGrade); - } - return examScoreString.toString(); + public Integer getNumberOfExamsTaken() { + return this.getExamScores().size(); } - - public void addExamScore(double examScore) { + + public void addExamScore(double examScore) { this.examScores.add(examScore); } public void setExamScores(int examNumber, double newScore) { - this.examScores.set(examNumber - 1, newScore); + examScores.remove(examNumber - 1); + examScores.add(examNumber - 1, newScore); + } + + public double getAverageExamScore() { + Double sum = 0.0; + for (int i = 0; i < examScores.size(); i++) { + sum += examScores.get(i); + } + return sum / getNumberOfExamsTaken(); + + } + + public String toString() { + String output = "Student Name: " + firstName + " " + lastName + "\n> Average Score: " + getAverageExamScore() + "\n> Exam Scores:\n"; + return getScoresAsString(output); + } + + private String getScoresAsString(String output) { + for (int i = 0; i < examScores.size(); i++) { + output += "\tExam " + (i + 1) + " -> " + Math.round(examScores.get(i)) + "\n"; + } + + return output; } } + + diff --git a/src/test/java/io/zipcoder/ClassroomTest.java b/src/test/java/io/zipcoder/ClassroomTest.java index 7bac1ff..3f338ad 100644 --- a/src/test/java/io/zipcoder/ClassroomTest.java +++ b/src/test/java/io/zipcoder/ClassroomTest.java @@ -1,4 +1,20 @@ package io.zipcoder; +import org.junit.Test; + public class ClassroomTest { + + @Test + public void gtStudentsTest() { + //given + Double[] examScores = {}; + Student student1 = new Student("Cameron", "Howard", examScores); + Student student2 = new Student("April", "Howard", examScores); + Student[] students = {student1, student2}; +Classroom classroom = new Classroom(students); + //when + String output = classroom.getStudents(); + //then + System.out.println(output); + } } diff --git a/src/test/java/io/zipcoder/StudentTest.java b/src/test/java/io/zipcoder/StudentTest.java index 6127583..8c8f69a 100644 --- a/src/test/java/io/zipcoder/StudentTest.java +++ b/src/test/java/io/zipcoder/StudentTest.java @@ -1,34 +1,136 @@ package io.zipcoder; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; -@Test + +import java.util.ArrayList; + +import static org.junit.Assert.assertEquals; + public class StudentTest { - private Student firstName; - private Student lastName; - private Student testScores; + String expectedFirstName = ""; + String expectedLastName = ""; + Double[] examScores = {}; + Student student = new Student(); + + + @Before + public void setUp() throws Exception { + String expectedFirstName = ""; + String expectedLastName = ""; + Double[] examScores = {}; + Student student = new Student(); + } + + // @After + //public void tearDown() throws Exception { + // return null; + // } + + @Test + public void setFirstNameTest() { + //Given + Student student = new Student(); + String expected = "April"; + //When + student.setFirstName(expected); + String actual = student.getFirstName(); + //Then + Assert.assertEquals(expected, actual); + System.out.println(expected); + System.out.println(actual); + } + + @Test + public void getFirstName() { + //Given + String expected = "Jill"; + //When + student.getFirstName(); + String actual = student.getFirstName(); + //Then + Assert.assertEquals(expected, actual); + System.out.println(expected); + System.out.println(actual); + } -// : Given - String expectedFirstName = "Leon"; - String expectedLastName = "Hunter"; - Double[] expectedTestScores = {100.0, 95.0, 123.0, 96.0}; + @Test + public void getLastName() { + Student student = new Student(); + String expected = "Jordan"; -// When - Student student = new Student(expectedFirstName, expectedLastName, expectedTestScores); + // When + student.getLastName(); + String actual = student.getLastName(); + // Then + assertEquals(expected, actual); + } -// Then - String actualFirstName = firstName.getFirstName(); - String actualLastName = lastName.getLastName(); - Double[] actualTestScores = testScores.getTestScores(); + @Test + public void setLastName() { + //Given + Student student = new Student(); + String expected = "April"; + //When + student.setLastName(expected); + String actual = student.getLastName(); + //Then + Assert.assertEquals(expected, actual); + System.out.println(expected); + System.out.println(actual); + } - Assert.assertEquals(expectedFirstName, actualFirstName); - Assert.assertEquals(expectedLastName, actualLastName); - Assert.assertEquals(expectedTestScores, actualTestScores); + @Test + public void getExamScores() { + //Given + Student student = new Student(); + Double expected = 55.00; + //When + student.getExamScores(); + ArrayList actual = student.getExamScores(); + //Then + Assert.assertEquals(expected, actual); + System.out.println(expected); + System.out.println(actual); + } + @Test + public void addExamScore() { + //Give + String firstName = "Geg"; + String lastName = "Geggy"; + Double[] examScores = {100.}; + Student student = new Student(); + + addExamScore(); + + ArrayList actual = student.getExamScores(); + Assert.assertEquals("Exam: ", actual); + } + + @Test + public void setExamScores() { + Student student = new Student(); + student.setExamScores(1, 100.); + ArrayList actual = student.getExamScores(); + Assert.assertEquals("Exam 1: 100.00", actual); + } + + @Test + public void getAverageExamScore() { + Student student = new Student(); + Double[] actual = {100., 75., 95., 100.}; + double expected = 92.5; + Assert.assertEquals(expected, actual); + + } } -} \ No newline at end of file + + diff --git a/target/classes/io/zipcoder/Classroom.class b/target/classes/io/zipcoder/Classroom.class index e3e3105f62ae6cfc0804ea21349da326cbeab864..e3204d5a6b8eb3b0e07597c3d3b2422dd5a21040 100644 GIT binary patch literal 5255 zcma)Ad3aP;75}~2-emGZ7Rb;63ZbPCk_=%DHY^1~HXA}|5Cm-XW%3dRCNt?QNN}kO zic2ll9ha)8rE0BIX&}X7Rf<}z`-;1@?*8xB@6-4@_q~~UlT5x!zIpGybI(2Zch32p zbKm2c|2}aAz8{Vnoz7YI46~w#bet!sFoYwK~ARY+fJt8_S zqW6aIKD=MY2SWHDJ`_R?&Q#*V_=sFSDwmJxXqWqgmH0S5A(v0ey0amC3ZItIXJqyv zS^1ETb0I7dAZ>V9B%c*Xp9|vi^6*F{zJN!A_+k*}gV-0uV-dU}Cv{xW5X@wALsl}I(GWh=7f-dGh>yimLsq(Vz@FHo zVeY7TygxTOXr*@#J5s98?K@%~Gg}j8a-_94nYBi&G<5@;k-E3Gw_nP0h2gRg_; zHB|S-la_6DuQ`~Yq^>U&GZXvFbX=Ytp)Y$l&duhRKsl`dcd*>pTPLNgix)Vn4+kH@UBY&?~eIRdCJ0Z@#MKA4Lq7%l>Ft+vhX zu%~FDY9MRIj_xwYlvgVJ_mN*@5#vaB+mBgkbHwUAZjKJbQfXo-g}F18V@PPoo5_t5 z&`u2@b7;tcq2Y$cvhc)vJ!9ulgW-%aeeq0ILye6$myIV{MMCT0(hQ7`<+HG2n(pSZ z+iew3)7EI}m{mZw!c7Aw+A{*RNq|-i$J3c?zd5R?P~=u2ML}lWnXhzQ5!^bys^cjQ zwZ$~=7)d;_|ehKfAjX1M!ihnaxScR+Zmu_QeJfcc;xE zYey<|RD+*om>%c7)4m(M$)uH5T(=YhRZJ9OGHIF8V#F&(iYBUE=&8fm+Ds~)wen1{ zGp`TElLPS+guJ^{fAh@DxD;MA99uW(_!>K)j<1t1o08cs=W&x$;!4L}Z)Q`{o{Xc`c<1qK z+Klm8!_6-DX0ydDUtDW*w5&T)5l8+Hz_Ttd@5tU8@yh>5cn06e8&|<75MRf44LpnQiFe;;-!bq5{LsLU&VL0RYt8erh>viZ~a2QyQMMteg@-25l5(+CISIKg1JQ&UJHkB4G# zZF(>vMbO2f;s!;r-Cyd8g5E3-HdSg>MIn*qBjA2};LAunncZh5a^w?_Zjv-$j*VH# zA=N|FdZq822s6*|;(;5?rfe-`iN~eO9s4k4hdL%(?H*ur4MQyM@`(?w`a%@goE3Gd_ZJ*HM{<8=9pK6mHvQr(<&)ZL$Ypj)5WvjQ%SMR&=EY`Ku z`_{Jmo9pxm1ot;b{1d2<(K#6Hf#$kOC9N~$cG9Pvn|hY%$&=J6f=egSU zc>$3Fjg0V0de%fQoB6a7tN6E_GY!;R$Q+4hqS@|v<{@WahJB7_VR)yQI`Pcw_!ap# zBcWkGUhbfNfR==zYc8YafIzu~+KZ^$)zUnPxgP9q(IzpE_ofyv=`x9W51vBUp`#5p ztb)6i^j?Sg{8X2;tY!)2fzo(^mTPc;kol3xq#eW|I`|51E+n%hcPWbAjaS<6v;e`0 zgQKPJ`lFMWuc6%+@lE0e4QJ3MqliXu-gduGZ2{S|@C+8pcu|WQS4Sg$+naL;oSV89 zZJNZ59yCSExaL#bTh98D=vK2rqhwkqE3}{0zlXDX>EIzcmLU7Y)%6TR)Wx>Zg43gT z6-+urH!#SNhxYD9jH|sa_eF9SCBn&Sc>ja>I)-#ux4xia!j}-2lH4A0@7|hVFy|@2^+&$YWI=T%^D`rLh6tt4t08Dq^J{Rh58)rx>amU zk-#KcHB4Z2-5TeSUq2IA$A`N0ys%^Oy8qnNg@{jeFR%-2W9ZsgoxpAe><*6hurTgq zQ4BD@;LH&SBL^G!9|iS^BV7V8^{MbK0=HM0%0@Hc@C(_shHM)t8* c<-qnj=1$@*0uFCQiuVxBM*07D$w0;b00Fn;6#xJL delta 165 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 literal 0 HcmV?d00001