From 94394cf0567978691633d2b09fa4576b1c3233e8 Mon Sep 17 00:00:00 2001 From: Jidong Xiao Date: Thu, 30 Jan 2025 17:21:25 -0500 Subject: [PATCH] adding matrix class hw --- hws/matrix_class/README.md | 215 ++++++++++++ hws/matrix_class/README.txt | 60 ++++ hws/matrix_class/images/matrix1.png | Bin 0 -> 5105 bytes hws/matrix_class/images/matrix1_array.png | Bin 0 -> 10565 bytes hws/matrix_class/images/matrix_addition.png | Bin 0 -> 29124 bytes .../images/matrix_addition_formula.png | Bin 0 -> 17009 bytes .../images/matrix_equal_definition.png | Bin 0 -> 8201 bytes hws/matrix_class/images/matrix_general.png | Bin 0 -> 13475 bytes hws/matrix_class/images/matrix_m1_m2.png | Bin 0 -> 5319 bytes hws/matrix_class/images/matrix_multiply.png | Bin 0 -> 10450 bytes hws/matrix_class/images/matrix_quarter.png | Bin 0 -> 27390 bytes hws/matrix_class/images/matrix_swaprow.png | Bin 0 -> 11915 bytes hws/matrix_class/images/matrix_transpose.png | Bin 0 -> 8970 bytes .../images/matrix_transpose_formula.png | Bin 0 -> 8442 bytes hws/matrix_class/matrix_main.cpp | 310 ++++++++++++++++++ hws/matrix_class/rubric.txt | 35 ++ hws/matrix_class/sample_output.txt | 86 +++++ 17 files changed, 706 insertions(+) create mode 100644 hws/matrix_class/README.md create mode 100644 hws/matrix_class/README.txt create mode 100644 hws/matrix_class/images/matrix1.png create mode 100644 hws/matrix_class/images/matrix1_array.png create mode 100644 hws/matrix_class/images/matrix_addition.png create mode 100644 hws/matrix_class/images/matrix_addition_formula.png create mode 100644 hws/matrix_class/images/matrix_equal_definition.png create mode 100644 hws/matrix_class/images/matrix_general.png create mode 100644 hws/matrix_class/images/matrix_m1_m2.png create mode 100644 hws/matrix_class/images/matrix_multiply.png create mode 100644 hws/matrix_class/images/matrix_quarter.png create mode 100644 hws/matrix_class/images/matrix_swaprow.png create mode 100644 hws/matrix_class/images/matrix_transpose.png create mode 100644 hws/matrix_class/images/matrix_transpose_formula.png create mode 100644 hws/matrix_class/matrix_main.cpp create mode 100644 hws/matrix_class/rubric.txt create mode 100644 hws/matrix_class/sample_output.txt diff --git a/hws/matrix_class/README.md b/hws/matrix_class/README.md new file mode 100644 index 0000000..6ebdeef --- /dev/null +++ b/hws/matrix_class/README.md @@ -0,0 +1,215 @@ +# Homework 3 — Dynamic Matrices + +In this assignment you will build a custom class named Matrix, which will mimic traditional matrices (the plural of matrix). You will not be expected to have intimate knowledge of matrices, but if you are curious you can read more about them online: https://en.wikipedia.org/wiki/Matrix_(mathematics). + +Matrices are used in many different applications, and over the years many optimizations, tricks, and numerical methods have been developed to quickly handle matrix operations and solve more complicated problems. + +Building this data structure will give you practice with pointers, dynamic array allocation and deallocation, 2D pointers, and class design. The implementation of this data structure will involve writing one new class. You are not allowed to use any of the STL container classes in your implementation or use any additional classes or structs besides Matrix. You will need to make use of the new and delete keywords. You can use array indexing ([]). Please read the entire handout before beginning your implementation. + +## The Data Structure + +A matrix is a two-dimensional arrangement of numbers. In this assignment we will assume every matrix +contains doubles. We refer to the size of a matrix with m rows and n columns as an m×n matrix. For +example, shown below is a 4×3 matrix: + +![alt text](images/matrix1.png "4*3 matrix") + +We will represent the data inside our Matrix class by using a two-dimensional array. Because a matrix may +be any size, you will need to use dynamic memory for this task. The same matrix shown above can be +represented like so: + +![alt text](images/matrix1_array.png "4*3 matrix array representation") + +We will denote ai,j as the value in matrix A that is in row i and column j. So a general matrix can be +described as: + +![alt text](images/matrix_general.png "matrix representation in general") + +## Basic Functionality + +The private section of your class will be fairly small, and the main challenge will be working with the +dynamic memory as you implement features to make the class functional. You can implement these methods +in any order; we start by mentioning a few that will make debugging easier. + +The first thing we suggest is writing a constructor that takes two unsigned ints: a rows count and a columns +count, and a double fill value. The constructor should create a data representation of a rows×columns matrix +with every value initialized to fill. If either dimension is 0, the resulting matrix should be of size 0×0. + +Your class must support the equality operator == and the inequality operator !=. Two matrices are considered +to be equal if they have the same value in every position. In other words, matrices A and B are equal if and +only if + +![alt text](images/matrix_equal_definition.png "matrix equal definition") + +∀ is a common shorthand for “for all,” so ∀i,j means “for every value of i and j.” ∈ is a common shorthand for “in”. + +Since a matrix has two dimensions, you will need to implement num rows() and num cols() which return the +number of rows and the number of columns in the matrix respectively. +We may want to change a previously filled matrix to an empty one, so you must write a clear() method as +well. This method should reset the number of rows and columns to 0, and deallocate any memory currently +held by the Matrix. + +Naturally we want to be able to access data stored in the Matrix class. To do so we will implement a “safe” +accessor called get(), which takes in a row, a column, and a double. If the row and column are within the +bounds of the matrix, then the value at arow,col should be stored in the double, and the function should +return true. Otherwise the function should return false. + +A complementary, but similar task to accessing data is to be able to set a value at a particular position in +the matrix. This is done through a safe modifier called set(). This function also takes in a row, column, and +a double value. set() returns false if the position is out of bounds, and true if the position is valid. If the +position is valid, the function should also set arow,col to the value of the double that was passed in. + +## Overloaded Output Operator + +At some point, it is probably a good idea to write a method to do output for us. Unlike previous classes where +we wrote a method to do the printing, we will instead rely on a non-member overload of the operator<<. We +have practiced overloading other operators for calls to std::sort() before, and this will be similar. Outside +of the Matrix class definition, but still in your .cpp and .h files, you should write the following operator: + +```cpp +std::ostream& operator<< (std::ostream& out, const Matrix& m) +``` + +This will allow us to print one or more outputs sequentially. All of the following code should work if your +operator<< is implemented correctly: + +```cpp +Matrix m1; +Matrix m2; +std::ofstream outfile(output_filename); //Assuming we already had the filename +std::cout << m1 << m2 << std::endl; +outfile << m1; +outfile << m2 << std::endl; +std::cout << "Done printing." << std::endl; +``` + +Let us assume in the above example that: + +![alt text](images/matrix_m1_m2.png "matrix m1 and m2") + +Then the output should look something like this: +```console +0 x 0 matrix: +[ ] +3 x 2 matrix: +[ 3 5.21 +-2 4 +-18 1 ] +Done printing. +``` + +We will ignore whitespace, but we do expect that your operator outputs the elements of the matrix in the +right order, that the size output comes before the matrix and follows the format shown below - one row per +line, and spacing between elements. Note that even in these examples, the alignment is not ideal. We would +rather you focus on the task of implementing the Matrix class correctly and handling memory properly +instead of focusing on making the output pretty. + +### Simple Matrix Operations + +To start with, we introduce some basic matrix operations. The first is the method multiply by coefficient(), +which takes a double called a coefficient. The method should multiply every element in the matrix by the +coefficient. For example: + +![alt text](images/matrix_multiply.png "matrix multiply") + +Another common operation is to swap two rows of a matrix. This will be accomplished by the method +swap row(), which takes two arguments of type unsigned int: a source row number and a target row +number. If both rows are inside the bounds of the matrix, then the function should switch the values in the +two rows and return true. Otherwise the function should return false. +For example: + +![alt text](images/matrix_swaprow.png "matrix swap row") + +NOTE: With the basic functions and swap row() done, the tests related to the provided rref() function in +matrix main.cpp can be called. We do not explain the function in detail here, and you don’t need to know +how it works, but computing the Reduced Row Echelon Form (RREF) can be used to find an inverse matrix, +which is important in many fields. We use a simple to implement method called Gauss-Jordan Elimination, +which you can read about here: https://en.wikipedia.org/wiki/Gaussian_elimination . There are +other techniques for finding the RREF that are better, but we chose this one for its simplicity. + +It is common to need to “flip” a matrix, a process called transposition. You will need to write the transpose() +method, which has a return type of void. Formally, transposition of m×n matrix A into n×m matrix AT +is +defined as: + +![alt text](images/matrix_transpose_formula.png "matrix transpose formula") + +![alt text](images/matrix_transpose.png "matrix transpose") + +## Binary Matrix Operations + +Binary matrix operations are ones that involve two matrices. To keep things simple, we will write them as +methods (not operators) that are inside the class definition, so the current Matrix object will always be the +“left-hand” matrix, A. You will be required to implement both add() and subtract(). Both functions take in +just one argument, a second Matrix which we will refer to as B, and modify A if the dimensions of A and B +match. If the dimensions match, the functions should return true, otherwise they should return false. +Addition of two matrices, C = A + B, and subtraction of two matrices, D = A − B are formally defined as: + +![alt text](images/matrix_addition_formula.png "matrix addition formula") + +Consider these two matrices: + +![alt text](images/matrix_addition.png "matrix addition") + +## Harder Matrix Operations + +If we want to get the contents of an entire row or column, it’s annoying to have to extract the values one by +one using get(), especially since our implementation is a “safe” accessor so we can’t use some of the coding +shortcuts we normally use. To fix this, you will implement two more accessors, get row() and get col(). +Both functions take one unsigned int and return a double*. For get row() the argument is the number of +row to retrieve, while for get col() the argument is the number of the column to retrieve. If the requested +row/column is outside of the matrix bounds, the method should return a pointer set to NULL. +The final method we expect you to implement, quarter(), is not a traditional matrix operation. The method +takes no arguments and returns a Matrix* containing four new Matrix elements in order: an Upper Left +(UL) quadrant, an Upper Right (UR) quadrant, a Lower Left (LL) quadrant, and finally a Lower Right +(LR) quadrant. All four quadrants should be the same size. Remember that when a function ends all +local variables go out of scope and are destroyed, so you will need to be particularly careful about how you +construct and return the quadrants. On the next page are two examples of the quarter operation: + +![alt text](images/matrix_quarter.png "matrix quarter operation") + +## Testing and Debugging + +We provide a [matrix_main.cpp](matrix_main.cpp) file with a wide variety of tests of the Matrix class. Some of these tests +are initially commented out. We recommend that you get your class working on the basic tests, and then +uncomment the additional tests as you implement and debug the remaining functionality. Study the provided +test cases to understand the arguments and return values. + +Note: Do not edit the provided [matrix_main.cpp](matrix_main.cpp) file, except to uncomment the provided test cases as you work through your implementation and to add your own test cases where specified. + +The assert() function is used throughout the test code. This is a function available in both C and C++ +that will do nothing if the condition is true, and will cause an immediate crash if the condition is false. If +the condition is false, your command line should show the assertion that failed immediate prior to the crash. + +We recommend using a memory debugging tool to find memory errors and memory leaks. Information on +installation and use of the memory debuggers “Dr. Memory” (available for Linux/MacOSX/Windows) and +“Valgrind” (available for Linux/OSX) is presented on the course webpage: +http://www.cs.rpi.edu/academics/courses/fall23/csci1200/memory_debugging.php + +The homework submission server will also run your code with Dr. Memory to search for memory problems. +Your program must be memory error free and memory leak free to receive full credit. + +## Your Task & Provided Code + +You must implement the Matrix class as described in this handout. Your class should be split between a .cpp +and a .h file. You should also include some extra tests in the StudentTest() function in [matrix_main.cpp](matrix_main.cpp). +When implementing the class, pay particular attention to correctly implementing the copy constructor, +assignment operator, and destructor. + + + +As you implement your classes, be careful with return types, the const keyword, and passing by reference. +If you have correctly implemented the Matrix class, then running the provided [matrix_main.cpp](matrix_main.cpp) file with +your class, should produce the output provided in [sample_output.txt](sample_output.txt). We are not going to be particularly +picky about differences in whitespace, but you should be making an effort to try and match both spacing +and newlines between our output and your output. + +## Submission + +You will need to submit your [matrix_main.cpp](matrix_main.cpp), Matrix.cpp, Matrix.h, and README.txt file. Be aware that Submitty will be using an instructor copy of [matrix_main.cpp](matrix_main.cpp) for most of the tests, so you must make sure your Matrix implementation can compile given the provided file. Also make sure to name your class implementation files with a capital letter since Linux is case sensitive. + +Be sure to write your own new test cases and don’t forget to comment your code! Use the provided template [README.txt](README.txt) file for notes you want the grader to read. Fill out the order notation section as well in the [README.txt](README.txt) file. You must do this assignment on your own, as described in the “Collaboration Policy & Academic Integrity” handout. If you did discuss this assignment, problem solving techniques, or error messages, etc. with anyone, please list their names in your README.txt file. + +**Due Date**: 02/06/2025, Thursday, 10pm. diff --git a/hws/matrix_class/README.txt b/hws/matrix_class/README.txt new file mode 100644 index 0000000..76eb4b7 --- /dev/null +++ b/hws/matrix_class/README.txt @@ -0,0 +1,60 @@ +HOMEWORK 3: MATRIX CLASS + + +NAME: < insert name > + + +COLLABORATORS AND OTHER RESOURCES: +List the names of everyone you talked to about this assignment +(classmates, TAs, ALAC tutors, upperclassmen, students/instructor via +LMS, etc.), and all of the resources (books, online reference +material, etc.) you consulted in completing this assignment. + +< insert collaborators / resources > + +Remember: Your implementation for this assignment must be done on your +own, as described in "Academic Integrity for Homework" handout. + + +ESTIMATE OF # OF HOURS SPENT ON THIS ASSIGNMENT: < insert # hours > + + + +ORDER NOTATION: +For each of the functions below, write the order notation O(). +Write each answer in terms of m = the number of rows and n = the +number of columns. You should assume that calling new [] or delete [] +on an array will take time proportional to the number of elements in +the array. + +get + +set + +num_rows + +get_column + +operator<< + +quarter + +operator== + +operator!= + +swap_rows + +rref (provided in matrix_main.cpp) + + + +TESTING & DEBUGGING STRATEGY: +Discuss your strategy for testing & debugging your program. +What tools did you use (gdb/lldb/Visual Studio debugger, +Valgrind/Dr. Memory, std::cout & print, etc.)? How did you test the +"corner cases" of your Matrix class design & implementation? + +MISC. COMMENTS TO GRADER: +(optional, please be concise!) + diff --git a/hws/matrix_class/images/matrix1.png b/hws/matrix_class/images/matrix1.png new file mode 100644 index 0000000000000000000000000000000000000000..588ee5fdb10dc4364e68337b807fa7af7116fb40 GIT binary patch literal 5105 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 literal 0 HcmV?d00001 diff --git a/hws/matrix_class/images/matrix1_array.png b/hws/matrix_class/images/matrix1_array.png new file mode 100644 index 0000000000000000000000000000000000000000..8bacd9cb101a0f34975463dbd21b3419d80d0430 GIT binary patch literal 10565 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 Hy@3A(!;7K^ literal 0 HcmV?d00001 diff --git a/hws/matrix_class/images/matrix_m1_m2.png b/hws/matrix_class/images/matrix_m1_m2.png new file mode 100644 index 0000000000000000000000000000000000000000..102f774bb978b469290d452cbdf64a444afa6e4f GIT binary patch literal 5319 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 literal 0 HcmV?d00001 diff --git a/hws/matrix_class/images/matrix_multiply.png b/hws/matrix_class/images/matrix_multiply.png new file mode 100644 index 0000000000000000000000000000000000000000..edbfad5309e63865d65a3349cd30b39bf07cab42 GIT binary patch literal 10450 zcmch-Wl$Ym@bHPd1Shx!my5f*yX(aR1b26WOK^90cP?ClySoNSaCdll{#$R=?zIX%^9s(X6Q>FWMPswhdLA`u`#KtQ0%%1Ed|KtL&cj#UugKJOn9&v{tebq8gq?XPbxy zihl{=FO9{*O_5aTb>(Qu$<@QZgf~pCq?zJp^tnmJTHsrbBsEMa+*gao{1`B&qe_Y@ zv|bjQt?X2*e0iU)aXCq~e~>DfxOwxPQh3-n$@ZD@y70>L;Jv5<@sNdn5knwXTipFn zMj-zj7v~2?{wI-uLrVW2f%*T>0@$J559$(tC=p3GHAPy0p$rCn4Zm1l2Ifa+DR4wS zPQ*k3?n6%j@gFgtn7(defFc5UF;``dm%3*8)@vM8sq>#FhhR~3eu?WkA z4A-absQAF&j+s{*ybrx?U4X3Lqm)i^3J(7Omj41q2La8JQy&j;s`2cSA~%7DcpoBE(P zXuSYE(eS>ORbq)7&H1%6enomye5d67d+ZIitY5BhVM)ENwfza-n+O*i$>2oP z%G?W7Ld?|q1z@m3=gLN8;;a^1EDEgPl12PoQ$+(@b`Xk_kkyb~atO&ac7>a>2j2kc z`;tC`oo=ao+qHVD6CFOM&Gat2q278Pf02MeQ^dcWCVQGQ^gBH2!qGBLd0h}%DXP=d zD%S3z!KehJ`j0sotelBv$Qmsb7FMz}ihp#A2k&_yryKw3N~u1hgI<{gQygjsR@0i( zcCZf1Hq=tDQUpXPQKIGGFa4i-J^!I`9IQ__NywrkB&PBsc96Ch2k!BV&+5WD@LCW>hyI;NPW!y&_@zw%+H5as2(# zU3*PaBbOgo(K_z`Q@oFdeAN;;`)r~>Po1zBkv!BF5XBc#|MK8fzwiaGGG%sl4yp8m z$8<4+mQJ}6LlzsbXnD#ju*?GHYQf=YGDG5z?(khtT)xMNR zAa5bX3f+s+c7+{Y8@BAzyufjuK%R7}a33SN z4DJFI2>O&5QCZRVA#Q2`3BHdN1fTCY`9s$42frjh6ez5X5-O#d@`q61=0VE42a{4O zK`*?d(@a(xhnAMsaU7+6Q1fWU?n&lOCnyf~Nz&YRp^L63A8ZehnkueUs5}QoL4>_A7_nj4R+L-kC|N_ zBaBqf&N%_5vk@6R0NHQoUh2i>eTtryKJLDluFYp zPCS+&tG+JI;TxZL(_9w)NI;5JWDPAm|_ zaJ82}2Y;olw3EMPP@QG1<18|6a~Y(R*zGd9VD|)MPNzZA8d3~-E07^`X19#boPcF< zssC$`laWCm;%uXGI1t%V6d2B z`SI;A5c2T@He0%++U-5

C>bYhaBhq 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 EUmRKyp8x;= literal 0 HcmV?d00001 diff --git a/hws/matrix_class/images/matrix_quarter.png b/hws/matrix_class/images/matrix_quarter.png new file mode 100644 index 0000000000000000000000000000000000000000..3653dc685997e1817b1c1406648960d32a24cebc GIT binary patch literal 27390 zcmd43Wl&_@wk=5E?(T`ZyB6+F;qLD4?(Xh|7hZ+CI}~2HyBBVqeCNLV-no7IMR#;W zNBuw7 z=7|XEYFe^EcBMhGz1MYQgUj6yB_tlV7EP`Qq8z|kd2&hN`fPm`YHiQpg}25pf`I(P+M$zZ zoL9L0n9iV&XYytJRY=~r^Wc}wVMkUwL2)uW(R_i%EgZF8-*e~tOU|>oypZz?hK$P= z5bKV6qYd*sYy%D$?H~+WIuH@@E5eEFCnUXY3~CD_kqD=vfk0q47D_C?4Cg{Q%zlt@ z#Mn<`r3qdaqdD*x$87V%1JL)PF>A3|y`>vh4GVtU;}c5s;8~HCr))I8pYsRrun-A%$lgnW!w+bGFthy9 zkx6L(nL7Y1B}{Yt#W0S>PP+bc&sUVGMa@L6&RGcgM%&rORU5wCW}yHq)HqOm{22ef zNpg65gqGf30!lpS?ik#r-r;amnrY2`Cn#X>Y-SY0896xa+v)gF?2M0VLl(t*0h}Tb zc&wGN$c6V}QK5uWrpP>o%>tQ+?6)0=Du=tpY1CYg;MeKy)*ZB~Ijf)4VV;PU*yQQ7 z!poVf>V3*#^4U6i-}t?+^qt=Me(clXMfy!0m2M!ft36`2G!mC<;<=I`DT^TEXbVLj z0w9zUnW0w>ptbSvmakS@h}5=-A5LyNyL+dG5byO2n}XN?EMI{g3_(_&6;*KXi=_>E zX6)~~Kxjcv8Qwv5;3KU3Nps?o8+eqB<-p7i$ypl$5Tfx%DeD+w9R-t9$v9e=pr-Y| zGuS?Yba#IMU7aE)y(WJ+NheJ=D0`8&!8e3&BN7@ZEB*{T=n6?Xm|j8|<~sxEi}vYZ z@Cw>Pjzz@ff<@%Er%X}Ls!+2xTSIdeWM?dd5GB3S?9RSeFg>nddxQ3EiN7;7bp&J~ zDWt&Ys)!N2hW?usZa2gLo#4H+D@z7`){9@&Ti1XS{BDa^B-LEuz)ujT>WP?vKDg6O zaN9bRN}8jSW}KD^!Skne%R>Wo%s!{olSz2*_(oiGVInraHK)1* zj0{EW09Q?~-JugiWb0)TD|3?X((Vh4KY(ltoR6Px3()DA*E3GhHnX#-`wp&X`^v8q z{~Ccy`0HrVAO68JHuzh!Jht}_h&B1k{-OFwMWqKk*m1<$ApU0mVuEIpAaBC@6_nzN zDpUXqsX>x_O9=9JVpxYjsa1#S$Tu(%S6Kb+aq*qh*hkY{CGgJj;OAP#UC|r9$8fGb zSvxGS#>BG^%2Irb2va!7f_g>r!;|CAA1bq^PE3%V9(}es__!En7_a{MvHTQp^`-v( zYjy-@)NvncNMP?Afvf(jOs%a z$zcPcrL-r`_F^?23TL*XVV;;!+(+a?FX|Mz=9pzhypQ6*0I6ZHZ1nhb&YKXA`VNDS zY5NYb%J`9_@?DQ+kIhU8WC*B1JQjuzw3zNbF}iafJ)_IjYfhTd9Wc`vt95qsKCft_ z3SzX6sAl}{P$gc56~hQ*hiPLci>DVJDDe-{J{*{OD#(DP(%pH;p7R1rt{yw>G;!TVO9gh_6YmO(;eTb{OdQl-}aPfIGRpJn$=bzD7S-(tsH5j$uNuc1Lkp&Q#&>(Y22bne-d2~f9kE}pW)nSo!(-lz56Bc3TRZ9^bH)7JKW zU9Z(va8mMdE+1}G88@eC&bR>PJ0p_+d<6K4B*I3tr^*B1xeMw*w$9g`eZ!3JjMJo` zzJ?C(3ianqbvON)ETqvzQ6STpb$O$Di(?O*`4xf<=W7Jv@40?dVSzws#*1fCx>UO| z6y*gN>~Mcs=tSf}(iv}lGrIYpTVII`YQ+~7^excjU)vgJFHm789o@z&hI$STJdt~U zEp*oXVNhlQH3enZYO4a%(9-*6iwHmDais2hixA)H=*UtTsYEwn`~c3^g6x{{uv@5U zbt=mpQwWqsCk2M)jA`z^LZQ7!Rp2d!^Y$RanO3x9zZ9s+S z87!eUbGs3*eo?%TqzZaumT$oqipu2vlabZ;7=0oc+ZuhkoGiI>zm7cHk~@Q+j3pepF=Qlz4457wmTB`{ zC)`@dSsU>uo_&i)4UQ&W8z0j#MAN!iSqI1t2&xQt#iOuJC#z>uxnIhzAjYHzlI-jZ zip`0PP^gR6NUp6hn>^{}1~?}cNi)75rqP7a`5)LoLt5Koj$?IFUh*e>;eN_az*)I4 zdboKXy6N*xd-$bbbnw)zJ@H%Q!!UXEm^nE#T~qm@ohFPbqSf`_WB@cj`LEd!g||dQ zR8?w&#;Yk7hw(T;8p%O)%QPeHy*@|#A^HJ|R+=$mG_MJzqrZwNml;eV|4F5&Bw`oR zOBdW#_g2(3{m(}yVM#`OHu-7&oG{7;V)L1e|BZ1*`{QzgFAjl5&K=kTOLd*cF!F4 zCE0Jqe`m&KEkkm-r4%a%xi-AIMG!aeP@bYsaIY-%ip7$m1AoOlyux`~^VCbYN2z~TgI{+BKidx2(x%vqka~FF?4YAwg zR$>jZfH@bUXqbz`9oK9cH&{>Qo`mk4y$`XrR{=44>#PAg`6a$L3QmC-l|OWPNHc@Q zn_DNR)KHNV>Xm@b6{7in-MKW#|83`@LAh30`>Pd4oiyD)`b8}mzrO#2+oaWJD?AdJ z$O)?J5taU@io?o2R?WK>Oqr(ftp8tFd_-Cw3|$lx(%A>b>L1LIf?1Z|UV|cND6kLq zpvMoP>Rm*!TyS4_<=3wVH&#v^?B{7FO2qJB5(!4X0?}~NBR8+0Jp}I^3#mI(wwVHl z)rOiIJx8$r8{ihZWLoQ$DR|PE=iTnBc^Hv)P3<(KcS!x&T9R;4X7f+OOh^fH36Hwo zzMNZc91g=wDE{AD7UZgh!Np={`%eot7ZqF-Q!7X!i|+II2VUpYf(h)wVqP(Z7KW4f z2d#C+C{lFpHpkWn%^j?0i1!94Vnk$o%-*|~eG`SFf9Tr=^!AZt>7^l~udv5M#0cSt z{_r%03NSwAD?xrIz_*=Gr{}@y_a`(;^RtJ;E9cH>-H_T7g!7a!e4o;7?N%B2D@V~l zFI4-qncbU5m^~^R<7cpXxt~fM!O5B7ETMgX(!2B%77#r6a%qx0c?0R_%*-ugMeJWO zyJaCP5OTqVyr1fUM>#-XP;&?Q2}>YinJs>EWgNiA}a|^$# zh8kSl_?PS#PcZ`Eh}0NVgyvkBlppmvooY>-Ee3q>ftRl|!9o7K9qbq!zLK1OinopstsM;aAAtH{*=G<}77i^?JSMV$7GjD_?H^%KT_ zyXQI5f>L&1l3m1r$ANrmcorH;*d!Dcs;EgLmI9k~1O8;C9=Zz~RPGdTv~sm>WK1Uj zzjQe-S{n&At4CU^z#($bugyj9!0z?y5q6*39u}}4w;;O9Ogf{-kEYb?j$FKgMCvU) z>DRAEy!Y%|umtV1saH8Jbzr>4LjaqbM{l6GCe)YLYreo|GouwDf;XIYODFoB*e~pg z>|%2`K004Xq5z?>h5`agM13wy3Cg#GP#{cZ8^@=R?_0llAJ1C1m&IlgVBQ(dxndzm z9D(6Gmk+LbF?z{$Hbzu&Hd3*Cx|u}@6@5g^%T<$pjJED!zv&nge0CQO)C!qfwxeSQk&j7% zdgsdh1IjPw`W=)X=Yb(lqQJ~tqv9%@yl3|vsu?q+_dMa-I4&*7yB zp@Nmhk4QoT0JuN|EP@F)k0f(lRIabm1b1BiIE{wRkL8aBay6`D@o@Og*5`p##FJjr z*+a%D5XZgZiOfSFLyt976d#iiF{A=SyEKHMYn~!z>cgpV_lU?YFS_pRil^E2Z##s0 z68o>_j-z`CPQfZ>Jv6q)tSO8Xs)vHgg&ed6z=yb{!1`BTHXcvAk>rN6B1gK1g*r!! zw?(ocFm*jgKj3ks+aZ?p5DGV}NkQkLD#6CA)2J}!+3jNE)(#1A@q-b+ESnKikRkv4!xm^4SRGBOX>M{BpHZ0}H1CoHAB?P7 zFc3)9y42!6h!t6SZum#?WFU(mHe2Gg(DII6%X%-g75Z8L>RLk5S{DCL8tXqGsV(vs9mnnjiD^*zhIuE_W|=nxl< zl0(Lhcgdx?{u*qG`*5_%ka-dk*YOx)az~jNPM!u_M$sc5*bg|R7VbhXuXoJQfczj} zSg+kY8$H;8k^Xc~&(@HCAP2N%;7Ggb@8I$$7D~>a#^u?b5I;RDJ!-)RX#VI+uZY+| z+aA>Q51CDA`>r^#&Y8CA3!^J*NVniCg^v|^8cEOGVGdVL31tv(4;RCf{P$^8-0Dhi zBD)P~_JNxUJKyaPpb&w3JK)gx(dP#Nk0QT9ge-K%UJ@c;jAomQf>RISJURS(jWml14%R|an85%G2@KA>LqMMctR1Z$P^HF#APOO6e7+kY3~&-+%u=o>6T!z7wJGDjQU z?C%e3{K*pBi+%AM&ATDlb3sSlXGHZIE3YT%qA!&@81W6J%Gi*pDyt9Hd|&ip zo6>gb3M*AI8t-o`Wb!#-j+0Nc#XD>R5~5$cv}Q&wp%_J^6j00>5EKSOU;3jH2^-*c z{WW7k!M>Lgq(-vwU2Q~NO|8!gdtnxycpb4@BBLH&_D^yqb%cI0Dmg$#r6j3heF0Hs z(LVfT>P~~jl#34j2J{5q@Oy8;c!VAey$wELS7c?!u*`&Ql*R&*6C}=`?1F&a zz47CDHzamu-(D5cWI3t!LX2&lXNOcTY|Q_}-U|1{Gy!c)+exY3GL(jEJ8#gkBiTi4 z2uRa}5>0O)P3d~1|B#X<|8xOmSU-Hpeh!GY$#d||mnF61A^s6$KsM-&)+Q?ND zs_+UKvHHXo8qcl9FaBZfgITUJ%+6hKe9egc(XGaY-M4m6WJs3Hb-q&~@B}N6xK1`5 za3{Xe5PBQS0DUEF~|2JD{CisYC!h3qEv&XpApiZ zy1i&L3DMXkh9Y*wZ71+Oou?S!s(4YwMtGL*zIZQoR z>EjdzZy4j>cLX`$m?H*FhqT`AHrvC3xgMXCKw4Qk#6HfCUv=Rovr1I1nS|~f9rTya zeaFEa{V6UZmT{=VwZ<|Gn@)|*WdrG^(-L%>U0Oi!KKOfEW{ZISk_;$LL051Amxl5R z5Ltzptldn$c>LA+wVtYa!v58H^jXr?s@N=$LD*_$k#*}mwzu<8D&g=MSPS^pzt}+H z&SQ)j7Ph);ypmUE=SIQ^x{m9!DH5}ZHdEs{_Fgi^^uU~PJxKbwyMA^J_LGcE1r^cS z6921gAE8&%oG_G*nE;ey8ti(PY=iCzTmwct$S@yQG9%(W2i~gUe|fnAx;H*DBM`4b z8JlJ_+T-y3k*gDDxgd=jEmsM8ROxf3cZ~Use%Ru5<0)8yuVxVwUT; z-s^o}n%a$qPH>m6vD$@_zV9&{$(Aed7HhAF-8|u z`q4L268djnj-Br|s^a_toF~=bd*pvnBy;9|UI7KkbsVxiQecTKNe-B?2&cZ6b6hgz zd)9VDK*(l3+N_~1eZevAr^Z@lXXLWbQUmYf$Y`*|tIn$#2>4>$g7z201>X~QlK0|yD02_x_Lt={Xsxty|F zn^yFI4CVr5;*6DGNsF=1uGut$+n<0h4QG2f;CLC6t`^dP1GTm~Jog)C(>XiLt-Aft zpb_Ly-9VKFtJxRfHeSP*EC`33%b0WPc9OkeYK`3oVfolia2>}?c-nFKqq|$5YCYe| zM@QaB^(~_Ze!5k}p6Oe4nk(yFi^JUh4%X$!QAz5W=Ch!0y?`Uj`q0&`^@|JheXTWXV6F-Er&b@ z`6N3sWCL`!akQr+Z-RsV-57tHk&DPa1&5FXnsENx;rchg*SF_#ZS7}OD$%zg9?3ON zQb7Mkb%7b3mb^oEA^ z&ec{$+3DXp%!d8}ssA;YaqK&2EaQm?Twx2EX5dTNOl9G(Jd}x0VK%1nVMf_e6`)|d z_mVbD=NzK?<#Pjru5h}+Vube!dL+S1xc0bWtM6OfACZrdAp2;sm_~WsOVwGDRMPuz zHQGJ4aeTlxkbgB1AH!GWuO$FHX;WC$AmtiQlpp%wJyv9(iW4J^tM0F=9g+YUierq3=#JPi-hF9L^uLK+8i$IxKfxH`AQpY89!!QpAZet3b2$}$wCp}h|wK%z7iPDH#8D~-VuarOL^xzU-QyM|Fj za{nK>RCNCoh3n`N=>v52%fw~TWOuMC9mf3WjdkIrM1$=>M6KZNrU<$SJ$9T{)LS=M zujl?n&QETqMF8v3r`prP!Soy5*jEwo1#5KNRmBWsT=q(p-R2aHKGW(3_wdCq z-DQiV%B>bCVaW<$Y)7D?K;O-bO~9K${90ss7moFZs?Y#c{pc(IRDiXhDX|gF0qfJc*mFbMm zZTt`(nm9L5!WU@}d9*F{*wcm=e+vxV zmi+SX@-0wP-n0Er{T3Wh(gdEgU;H%uk77sszlw*g)*R?P?0vgFb(Y6!Ix>WZb z4jg|z*x(QsKZ505pV-G5`#ZL_Tu?`kXIt7nP)S-kS^uq)+1;dG8Ma>TGGnc&@QY1z z1y&cNaJq*Ry`s+R?&>q9G+>5$(c3OJ)W3^sjX%DJ>mVA3`2}Ye+uhkSIsV|MV|z-( zSTVeE(uhnRrH<(G!c8YpZf(Br-#Tzr>f9Htc5MncMP5Bj8}G%$T?6y^G0t+hY0q8&w+`UUyHDiN}JTNoaMr{cXL1NgP;o*wjP zZI8s)6cj{Nx18svp8O%W?NR1OzK$$TUd>t|sGMhw(39_xM&@mG+;W6)d|;aWu|oEB zIUCv;)Au)6w|6_@J!Z;_+(mKfM_OX=GJdnia|Gh zmad}Ex+y*~jN14&LD%M$ad>&Ix`?D=uk9~ErMnb2b;D#r869)>WYW~MDG&D4ukg}a zQ~VmgJLi+ZkTmO+NpvYOIwL90rN+YU*YP}+P?^1e-?J=026&Wyd2WvR}ioc5@u3cxz zMx3|IcDab5en1+Q>{~K48*a}4bW6(}6PTLZeQr9h?oxZFaGd$cv{)fj4{dA+GWh+przQ9Ysw0V8^Wo zvX~27@NZpI>ZpY42w-g)eHtpEz~KnlvOcz0`s@7eDfAE94Lv(Jft=;D@}gR>&?@*$ z#1&=@la!VLYCzHwUk<3_y7ruejef(jC z;7(+Y*r@FJ!Rm~w=_BMXWxI}zS7`)d^5^9M(g4Ms;E^+lzMR>H{ zbmUd);%dnN93zEP;27Dm?$O9hIN1;RZX!c_HwP8EB=zcTU8Ld#NU6Ip?J!+UF`pE*PqaCYUGC6mVMi#9(%n|O<`B82a-<6W6z00KxF>Ki+nf?`f(vA3 zna&}BX+N^o|Y`G_uH*IE+Z0edWgzYRtw@YFT!7D7dgbs-X9zE1g8Xe+{oQYLAQg`EbOZX(;b1llwrSkj>QAsuRrb~koxfRLbvjh4m)f7WH;m? zDSAA8Zw!T6`Svq)BT+zdh#DB)Iq0iqBT8u*`()z8JrW^t=h+1e`ed!f`0j>yYWWs1 z7}}JDjpBOA@&SJ)Cuctf$k*gmuVnVfL#c?j3rW4Ut8nCujj8ENBq{>oZyd(5EODWm{hA%S|g zGn2~@Uz|3N|9i8PJVuhJ5B6&if`MYUL5QEv83o|+gq;D#BWOIY#=+4s@V2M|d)^w6 zfm1VJe51RsD9@#@Fo?%XZsy1XnULBC#F=vUV~u&(4AhMKN8ns_qQ#~os7_pXianj_ z+TekZ2znQ-^pi&sb zIKi>KO>(3aNnaNjUbFb#f>F5bvkqhxafRTjX_b9$^--~F+b|u|NRcqkUO%pkjKK8t zk0Gs^E>}mr5X)dl;~`V9>Xr^XXZjN?S%DKDh-7hhl)qHDjEahkHO4CW92V>6-pk9& z==CeT8?>^Bx-6|;?_(SjnXhPOhx50_%oZJRapC0O65Csd;!&Y2iENI{h&fo$wGg@z z+M;Lx;$y{7EdZNv#7o!X1RW*lz`6)=O+?J_cB~-4**d1&0-P^Kk$QwTweHGNK&hLr zD7Y9PkWoo?MY5xT&`oW9=GPM0gnlOu*5Ip*Q*x}y2ff3xKAhmi)sVo$I+q_SbhreW zp(7FPviAmKeuV_BGK^Ff6$h&N&y!s^gk#oa%7L0ayMepmnVfgLMfzL_iD8@!7Ds5h z`F@87Ik|c2BBZvcQVv{+5K?KSHeYlpRGDmMSAAXC)h-0DogQS&0zfAG1S1FTloF(a}J>5^33nJ;INe*Z*U;+4mg4^q2)cX3_SM=d=6 zTs}*hz=G2+w18@`YdAai3cRA=G(Yk1d)S zaQgiFS1TZV%BDiiHBelUMVdn?^j)aa zT|8p9mwp5$*K4-!r%DeFGI;wDsn>i7)=ZoNUE?3JG zq2LGF)OQ8cg+g1iz&wwbVws1XtTj9lc${AEdYf~02H*0%|LTP%%1lfB&hR7U&W>Th zPtbVd?{(d;+&Ho9`(DZ$RJRy=i0v284%s^O^t#sOQw6?OQViCEj^gUw6kzh&Vs{1_8jwq zzRa~}@=-(TDnOlU3fP?jYdP{q#T#lqgo`Ft3|1^F-~NtjS|LO0-l^SQMUYm#iTIFv zT5mGupn+{M!W^dJxa3TrCisL|?8WBE`S>r(#6Lv#kMASH&%@929KoVEyG-=3?o-`g z4?&H6SWsL)5DEK1y#5S|9h%Qn>kh0#hbD$%DSWxb{1dvP>U8K1l@{h7&i#ffJqb!h znpD%?)e8;JxJF-rTe(yoIKRhsF-JZ~ja<7YGOxH<0HfFGKK{&#?TQy6)NHpa^sbt` zA{omU$!?dKab<08fvM?^$%;S$lxH_YisxUO=FDq^Kn^;FN6}Qmu^>M^z@9;S zyF+l7wX5Dz%v6!CW=}PIgNv205!M)!qPs|1GSApXNT<>bL8e$-pKWt!2F;Wf84zF` zh{q2F7WzJYjOH|V1_o(*vdz)JJfeCzCOZ`Zw**3}lHns(|J=3n2OiZly8o=)KqrPd z(9~J?qB@NdLqV9d)!+K-&o+>v5&x|g(vWVMvC-oVbu0?66Q4kmN|@bi8Rm_aEdq$N zqv)Tf0XWWdO0^@-GnBtM!aNU&>3+VTL_e&H3+uVh{HO1R+B2<+CI&TJStYQvp1Mt^ zBl?Q-H+LmS<&g2#y}9pMzE!-~R8`%`wmBVNO;qBoM3HA;m<@yD1jOrc1FZGOd%QPh zkbm=!aU7kK9X2?Q^*@D!A(Yq~-KM>*w=1k`58s6H7ZFNm5R-zt`vwWCh3#!CtkHHT zq51G&p;wDk8r^RdRi(1Rm`+inc(+G=0!1~A(*dWmI5sYheJ8d8I{Pos=Ib5E37pp9 zZ8+8HtHtZVqz=wnkPlXGhNda*!Xu&+Z(n^DhtZ$MFnfw5@i(_aMaNs0Z%&(Ml7=Jc zpdOyY@rRx>2r~@S5OrTu#txY{tV5#R39*iZ71P?9Xy)5@9#5~HZE^82e}p9WTfk>+ zBYuE$>+(*vT8)!C(Vvo>-ax+Y)j?0mcN>}b^Kua|97ckpE6>`7u?!ljk;&V;3?(fP zUhU_J=eiDG1f;)ybCPRn&I=qpC)|q2M#F4@GcY$z*(^6^e%OA|glbw$Z)+)r*8ufd z@-7N{)5yTUPNo$3-P$rE1JM8@>1*@tCio!FKzL!-UDj>|Kl= zlP1o@TLJ+{Zq_~p-H`g7OrG(yGktKvHlUlN2|9D+40IR^HdR`|eoG9XqHr)DY_m-)(U~k%-WBy+S-Q6dJ2pduPODTjfGK#-f?Wc%GMn zX)bML7o)IzhX#-be)pVpnqDP<@~(p(C0TY#?cI5EZx}VpO5%%IZTZz#Ekak+a@p2r zq<&3hzC-LcH8ri>E8jUW!oOm1Z&G|dy{Q@ z8RspNI_UU%Sq;?~KZnx^%;%0Re{m^kY5bcA4e5E)12gL(cqnOHOwU*rP4E6b{)2`= zf$Oz0^1_zL;KzM#4*Lts8pMfM?#Zr2o4ivD2Bnd8XU7sKJaFgx;C`J07dpCbq0H^W zfxn@~nG&K(`G%vBU=Pum`N{0rzVF;0IHTE43&1esJu|vG1hXTxdkcPA^8Q1y@Rqy$M6SF zS9&fN{6r4th@)?4*9fhsTZRC~J!dve7?9B1nXU1cg_pkc6ZvQu7o z-O}C5P81zCXVgrqVFfs4uuNJhYBNZh<8x_c!3!R0=~Fm>qmhccPJU!<;4GznrN6Nu z+vtFFjOUn<_KxAjA`M`CG5nn(KeKHvnF#&ac8J%gdx z7arKNH+g&tk<_NNi3=7%%)65Xc?8j0(SVsI!k|3mIoExLT|Kl;3PjPDR{^KB$kT25 zoVXWUer=z->$h(Z`aM32J{pg9y?IUi4{Ql0%y@j`oEiD> zR{obut4jzjIR4U^e&#Ghv%5L;GV2X`JVBqe`uBXh)z1O|PP5Og0AXjEZNqov+Ar$e zPDm&7;*+36iMUO7@Gbtv4ws&&=~ikTm2+kZ)e3bOcBB3EW0ff|wSAJqBKiJ~n666d zB6;3Z3rhdfSC(Hd1tA=4m$Bo9@0UFc>fPbU(DA$W{qJlFiz6~L!t78vBC;=Dna|Ie z;WZ5_@D7u0no*Vu`k6UZ^%Er7q0Z<-l=2lE%)uX3idqYJ1utt5*v51f?E5l`wX_G- z_{9zg27@X8c6edReCR(8FEE!H|F~M-mp|cIC#Z9hWkt^!7M2IUn>C#hUOt$-uGu1M z^sGKwL_S&1f!okTE-!SOB9TFIBxe!&68R6pww~9Z6rNMj`jv>*CB~t&;EVXva zeU+3|Sh?dssZp%Pgc^lRumz`Ih%=EbJuP^Hi&V2IT50K>!I6|j!a|RZh4d`qtSHg+ zSfW`$=KSNKXDyY~P^a!Ejmp@!OO_G{J5k2Fu%mr1I7=VPFPip%+sOSB4xyJgp06f+ zup1y_qCOL(7y7kXEqM2avlG$JAfApI#A=HyY1P3oZ4wr!0P zJ|UJv97sIxnyEjIj=KYw^u>=fPjwYjyB2xn9{>RjEU?j@BX22cqV+W+xp)<)Lpq6* zgY({V&j#7pu?!$eQpK=r`x>>5G%mWgxm%$3nbsS7if9?1@~<5SW}6+hjNp~+A-9Br z=8FP%I6dBEf0OOvVo}_gu40dAj`t8;T>M_eq{De)f7n^VZZ&~>@WBvA&uXX>uE&Dz z!i07?3$e$QB+$-`cRY2Wa`9>oRC@O!Fd~D>8E_NyU52-d_Rdwn!?|6BQ*gR`feaZ=N+H#jc=svX>*zd$rVgsZy7UH| ztnWmSeheYskr>?uXY*t++-%30;ds7)&ISSvcAk|m{AemA>#!0wDEgG+vLaD#SWTSD z8@zirr2~=u)@$uM(F1+zzZ!}iZzBZResqbQzWNoD47}hE5CMKLJ6dR40B|YQ@cVX~ zU&mABQt@^ZV&}IyGdNv|iY~nkrogo;Xq$Hpy8&Rat{COBV)fcVQFyxrzpEL|R$W8( z*DA1+1XFD|lI-yZf3Z?CHRJ~4@RwkAR#hqsJMNDdXWZL_iYtE;cMB1W1IO*F)V_81 z&DX^DxySz+F-i>2z65C`Z#ei4UE`@as;bdRdmLmDO74thJXn5kS(!il;F8g0~riJ)G%~J%y!${F4LdX<#QS)!l_$l!q_~fQ8ve^bdN4ZHpbT*BspXL z(5U&}+3Zxu2H{La4!%jXQs0bWJ`5hNMWGi(XBN)?7?B+i3nNjg<@Nei5xjRQv2D!^ zVup_Glt^#@;Vo6XK8D-KM-mY6GlR_oekmd!G@bU6G4yscsn%%nL8YE{k3!zVtEXSY zYc&{+(Y3JZ`&V5=DmRSuN|b7y=G}B$Z>FME;+XNsT|x`idm5e=f`N+In{yJ<)>y&= z_HbS`o9&jBeD90+$+#p@4W%|3sgBbZAdx4qh8<^28{1kZwOI^$s#%?rYleg4qMI)PD@4d{x$5apK?Ac3V7vCm_$;jN0;6nd!6w%5eICDdmBrkUiV*Y$z6c z@V@uLf8CJ0;&2$DHz4wZ`0XV$BftBRk{UIgo2Km1*e0p&>Tk4B+VUWP!eYhs4-mu1kYNrU%+nt7 zLTECVF`qP=IyBxmZ=^~&&$SvKJY`y3P^4=8I~-#6wyeQWYMbl3O#5ydB5`*yT zoN7k^1tC6He}E?Wo}4X=tPEKM(vtBSI;8&IqexJ(kd-R7CbX;}YNQoGI+5b=Fj^)p z7BDW^!r>PDqR8JRn;Fr9oCg~{LWI0yF*FS?Ov4YuSHms?aN)iaOqKW->YysBx&C!KNEEW3v&^ z{tx}pW%$$b2E0-x`8;j+Pb10ybqf3c+nZl@ff}A^pE3#>dekG`yC>nDI1~Fj=)zN3 z6eSvCA0aUfdA9$Q%EHhR{T(s-)wI-t2(uhbs7=Wb-&YGCiVwbcNZd@0UaSRLp|25o z#B@xs)UR`Vm4Eb$zvm&N-+W8>y}0RAa5fzN=~Phstm{I^sOefXKWi8IDC#UvZM?4T z&9JEn!DxTDiY%&9sqYDWuet4AL`WIH0+3ef>wp*Q>BGAKlZd&$I6z;F+V+heO4`py zQT@C0WCAZmG5P3r`=l?G%cD9*GGSO-xXigTrco#5buEf8u%$58_6`UX6)np#g*>Ty zZBEm)7MMZM(HuhAtZ%0tiEh$*j+{|LzcHXRX0hA=JOcK~H_0?&xPf`P)ZaZ%v{ ztOJ)*xby(kE?GTnQJD8-eslO|?b!a7ciX~^63)_=JRuXS!ocE?6iteqcjsaJY?zGw zCP?{4@gm=07zb`bUT@U7U2Q150Nq zr-#(>qJ2z(LzzgoFK)${$>K(sij!S{K>$Zv2&D0%!NM`eo2vApuXa+<*Jcev?KvN!1LSDJsH zMHs$+i|vlrmss20mek>c_dRRbx($i78}a70R{Hh(5mv&CEz4~8VJI@PxbGLnIvq4E z=jC+6W!=ljFA|7)dCI<&e&MS8TL^sNRmY2Zj;ZLA4&Y?$nywK0XiUXG3!q(5#K6P< z#I&GZ6tM*CG_vUd$75b-TpSAupvA+ zAidOf5LCq>sh7Gd+Nw{dNJM+gFG5Dadvy6G#DjstIQwt8YiJTY{~<-Qb8E+$1`rG_ zBB-kEP@@ri&A(h>|6~n%pT&WaLqxYtiR%oU)4z_jW-pY)&cDdbpMjei6{Fe?2g+DN zu%0a%WY%=(9p-A}ncbgFL;U5OkNm^?bLG%;-jGs~koOXjhyPaR-N$Rf{G{a2>fu3G z$w(}CB{~0bOOwtgHF&r`HMxw?P|C`dTT2$hgZ+i=t)XHKGa{RqDHsWMSYb`myPIL_ zvS4kkt*p`RM*gowLsgB^e`S_j;P)bN>VLt;??TO$RxCPQ9+kp*SX?B1Y3>bz84Q|=nulvj3!lkh|B|E0x`@wGwuy+fEdplKXxq1^Q6KA^`BG1=`)ZTYGBq+o zA|91TyFcPYH9;xbk%2mO{MUN3jSdoD7$$$%I4tu0T7LUD*~V^Mc^We;=12w=HDnq{ zx*fI8De$2Mmqo5hZ>oxwRxr&!EXXul8pyXYKI#_Sa%iB>RRH8<+z%0{9i+%xKwfG) z{}e)07jhOg)wdO4S>doFQhclKQwC8fgnX|XJhsN_k=Q8Q@*RVFBv`?fYPQTMTz_k%SM4fs=y36H7@zBl3< zqW)+pf`WD(RUlfKul7{hkhgA}679xllm0O?RI9>f+gN2c|L=q8RkC&in}e}s3^X&f zQI0UrH_{UGJ)8Ae+;Ea;#Q~6pgS8z-6n2u3p4|-PmHkkS+@GBywPSj1#9;;+9*Bnj zTqNp`LQ=M^p%qNY6BFz->vEpQ%O5)LGXi!{@*rPg(cwf~YPtI;K6LGNIiU9~5w6JV zhnv%Ac4fljqiv;n@hx>}ldd@!V9)}Ll=odTB2RVk7cU}YEKgb)krMlhw z-se*0uzBy6qRg%^C9pCifpYI3d#@D0;CM2{a-zdwE=;z5KXCx~&D~QFDbdz>d0d9o zKeFh+(PynIH5!8i(#o)imu-CaWEF5Mqja--W!No?L-XV|nYGA_foa+h z>5%V17ck^qw-IOKkR{DQ zQlJ^ZIBqumR-!<%;!ervM5X96&J=W-YWY!C&~%u${$bDW$`&L#xA5%m^6W-mw~vPy zHG6tE%W$r(S|^*;e!*6quZjxHq2lQ>JX9k?=g(ke!EM-Fe#gN4e|wXxUV3WU&BgE0Vpu|=$qmyz@yAic4c>0C$r@YH$oe0*0oRa|>|raxn~ zNTdQRt|Fh*L$hiz0&3jlo`vN+(GBCsvJ-HJ&Gqi3P(>? zShpT%&7F*g?}d$(zsc+}YI~*>RiEOT)pU(NL(O|1Cw+^RXpoZlb%>E)B&|xy+Q`jR zx3K%~s3!-VVW1}r43b=GyEiLR<1v*GP{IkUbBA308CA8U~gffiO}_W^iO3kWZtGJPR|yu7yxoN*wVyD-0=vvAkO{B=A@4vFQ~- zv42ByV%=;7NCjUAnOm7G)^hL}&>w9-)Qmg`Rh9qg-J5<999{Mrz>Ch>zOmM+62N)l z;mc|oZ7Pa9+Gi$~FVwk8%V4DEe-t_@GeN5g3@9D;au8^fP;UqRGPJ~>8{wakZjC~o zCvTvvHQ+nqmmV?CHDYIuYz=_HGmLiQc!Q2r308^(qv{ArZ<1CE%g5eVT5WAHW$mFk zJMUW|CxkyHyPsQzYgGogw<1v?$qnhloftLm2& zXCkMU_&WJ6Cw}+Heg<8u|n3~!Z$NSik4{MlV1 zPLESjMrjmj<&*m+F>77&4{U+nS@_CVGUFV_P@RUW7c@%v&fz(Gdg>1n@$V~21w#Cc z4(jz_@TXZ_lng4+*NEovTNd}S&-O!s=pAXaBNO@k@)RUdC(9D4avb@wpGMNQ;Wx z<F|>$ zngo~H?hv)(u4w89Hv*Bx9(BQ-W|NFBejOO_#pS#~vQ4LFe!~sD7FT>nU@DkeqPz`$ z?VdgEED$xae^1x&FCEN?zRGU4-#_P8Y20wb%KIJ-VJXH>LJ5j2^}4K2&c<}Re7k;P zIGJ%Y3uc6p@#8F~h%YdBZIHV~`Yd1S&#WSGZ{BB@G}_9MRZhjg{w5wu`XE;%*h9lvIbBij~O9riviCRv~gyzipR&>6JIT@hC`}qpVmNnNjHXlm%_&yjR zR0LW#>#VYC&Dgq+>yMg zn*)Hzl&6N>=lLVEAz&G_cDx`%p6l!2DD&7C`27nPVraC=7tSu>I?@biH@?D9m)Zb5 z$Sl?*!3xFpXc0$=U)rVaD3X8kV_2;1IN1M;g3lJXmCPe$?@*x(cPWrilyj z_W^UZmLhPe8-rqoamttJt)@<>ZDHdSS!zhbOcE#~xCNvomTN9wj5=*d6oc( z{sG|b^^H$+J+WUXam`eUVTy^s?na6OpZ@1(P8ivOO+M$@pSPy!;CYt>kHFX@3`3A) z&NLG`f!DVN!O)}uUxTk+^m(ga67Fkd969J_Q#1^*E+bXq&>svl6Eiw>*C7FLX)&hhL4d8+urdct4Nu2N6EGChqDLX zvTf}~Cul*L!!|YC?162N^U6N>sS9@D*=W?sorp3(=g%s@9C%0mkn%h^p7pfm&;AmF zEXr;qh}4-Y=IOvT$>O3(`!CL>@GP9$C(qr@A$lfhF!4Wc8s-8|gfHpi+=r& zd?o*qAi{(Ml~Dv|oP5k}g&NkuZ6$dk2yaB~{-s%WPVW7o^;?cadN*O6j10J@-W(?^ z>Eb611=w2ch;!dxwI=69a=;4wiIe9JsV9w4N<}TfMOD<(kJjaS#cC%i+|=uj5O8S6 zEY3R+lj>TE_ecGg$mBw#w^?kD$6%h$i`y`RTD&Lbn1Mxw*RP=>5eXH+#*=AP7I_PaS6i{of!}VBjvV1?b zJQiv2DJy5v^7&M*P`)dB$}vZ%Vu5r8u>b?o{ySX)SWr_Ywuka=Ebjc%_Oh8Cu(oP- zxJIdwJ7Es^)>tDNhA7Y0>^=0O>ZRPY{Dbsl|w5;J5hXxnCb?Y4d zkp!;vsk6N+)p{n|UT$4s{sWvPCwTIhHt6CNFKSi!*)Bh-?>1k{$!3n=I_b+Ket~Fd z?yo>B(w+~BjvRBJ!Wzhe$L>KQ8PG`{g?|x4um_s2>YI}r6H2N!#S6ah5yJJ2v_6-v z#5m@_f@j)LDf0cYZlMHBsk)F&_4|egFpKR~bP0EBrn{X@K>O^pYHbkC4}C7wn^Iaa$acAKVOv z?LGzJb0uL_BZAF{70k117L;g&ix!_Q>Z-NYkBSj#^&Dm5A0(bl`kgf=X9!Dywh{LH z2o+|m;RM%j+tQg=-Qo_cjlXpCNos6|J4Dl*+dFx!AUPcvOPs6`kEDN_ZZ0|c$|RI8 z`55hrGHJ@}1?t%0Bk|^Gr#Jl-B}jCHscKfPpkJ2MW>3blP+=72v4PCw%=&NY;XW!;m%C zuUSh$W(cpx;jX(HvKv|cA86tdnM2*bPo0*DQB|nk(FEC3=S(P@)6B-<4yz(@SFNhy z_Xdd9^j9;*A-@HhealVUY9b0?pFJ=$fXg1V+ZicNea`-ne8+q`?C%Fu?}mrb8D0T5 zvDuqdI)$-Rs7+?ldJR0L7B3uKj^#$exMtsL-YH*qOoY_giY!6xe6_~#+GSB2$M>U+ z@N-=;(A_|3c1`kkzdbN)pB6Mrb>3#=KpjY8#fS$bV8@Fa_9NVMPST9&H+ce0oJ!T! z7=47Zfq6_yecWog&ra#hQl(329Xp!9if={}MVYO?lQDZq+^D7I2Wx>~Q~+V+OXDX* zMy7O?UlSc@VVr2~Gd$}sLZY+udGA^Zv8H|&4X2QGS}b7T7bff!7QJe4h#16s4&YyL z1w|I=%9yANXde0C@vdglNeHk=saE94XGWO^I=oPGs)~80#jU?ZxrUq1)HOsEG^vVC zNR6D%7h|EdLkdm!o4^l1Xi7US62u@RY`BO9255O{%H==PUeH}yr~L~E7)9Tkc%=bQ zS4VDAn}*$FuabE&jxXo5^!hzqkbiHsN{j(?aTn>LAOR+$yR(_qd_aU#3DQl$NG7zb zz5C;LTO!MwrJ!b0`NX5Be**%J29$$&BAXg#u*0S!K>??LBSd#^W)0V0pwh=eF_|jU zGuv~q3xB?H3$1h#wUADIt_hc6gle@hu~&xB?53+f{r*56e>fV_4u^VSl6B z4{B@yvZHnW@^0n`9dJ3SmBSMb%~j2i2jAMA06!MJn4p~?)ZWW z9Z4LRA*YLSqE7ZHqPNR*vWU-=@}}E@DVXqW-L|M+>Xd@1i~A~(_fwyIUm+7@_8C+E z?q26Q(LNW?dSwjUoarg~33;NxqEiQ&)uX3GbRx}TA0II%39*A}0|52dm zlw3DGd}mrgcYm&ji4A$uFO81?VW(8Q*nW7ifTUK|-50-3=Bvx$9SV1iDXh;q+tH;8 zxxl-he?Ue+;^J=h@*eI6;*=?v`JgdcV*3xJ%rfCFT4%ok^?{@07`J1z#}mB=Gu)OO z1#JWFUIoq<^uV>&2M?L@3SZe3lVcxL3)IXM?*vLQIr{W?Xm?w5wXUD!t2*8BZ+kck zltLR~d+nN7Gs76da~oMhHYsg^6*Pgj-=MCy-W;7<`C{@--I-8vxv=iYE(h&Bkb*cm zZnT>h!-JjzQ8;Jgo$1U)81WPN26Z0Uxuw)yLO-w%ojIH2Nqk9i#t}N!MPnZd1$F_h z2?z67(?*C>$EqM5J>A9&OarFu9P3Vsl_}y@_d`#hD|t$#&&l^p519O|Zor4#B}YIq z`5lfp6U{w zn)aM^fB?3-u|Vw3U`Gt-(BWvMv+%6{Bq zUCxYCNa{Dg?Y!SlO zJV907NV=-wScWR3pZ^G*fP>ox1Wcn$p6cx<=Dkd0%;v)^H&eZMYOdYmEI+8;QKRK- z#5+XqH0#uFV85qY)IQRw=y=-iX7K&iWJPAu1dPtznl58ty2{uuUUrWF2_TL4Q--el zu|EaEHlZ@&j7<{ZEylKJ#1#|iZ16g{?hDk?>~T3a_Q!S@$TJ%Ot$-S4Zi;PDuTP7@ zwm;NpC3Xa~6Wpe*prf7o8e{7B!ZpIa=gVm&#&qAVid;aeGcrl=(`d8i42zIIFM2mT zQ2EZD7tq6FS06YzWjLJKBfR6l{PBP{I!_CgiV~itMoQ<7&2&+}xJW~uyLpvID{Z+3 z6zIBdsFL@&!Fwa;1$4O=aHR0;MoyW4b%jTi$zZOF>nxXl0FldVXZ}IIxy{L+e|zg&0HP408G;*P&Y5@d$I19h0LebI56rEM0^= zHOt9LjilRxjyFy9jyt`~K&xaL+?8a+y^l5=C}tEucgXA6O~X)YgWF|AW@`w6A%dx! z)UmgFq#a!dO(Lwhu|5wGZqczP-ZjPcJ@>mhnY{mO&Y0d9LYD6868)~8#D`Pcas@tT zdX<+TEs|AM*j+0M4FB9Z@Q;hhgC%w*Z5Mxuoo8zW>Z-?0_7;Z6TfF?OG`Cd(p9QTS z76WPmYYHsY5EseyZfT7unZ)rb8`m^-nhdxdIjlxrOM7)9g!T5wXMzXtS5~e&J7>n& z_2Ov4FLpt*KKs?8pQQNw&GQI72q=uH<+`V;P0SSA6fOpII$olLFa=GJ?)N{VLMI?% zZit?=->R~8#v-$xD3fqmw2Ip$3lO^IOd8mNPv`llvq)PD9|&~mAuU$dL?S}xyaJ<= zDq3As{8)HS&&V@Qz2ij`o|Rw}H{BHB>wZNo7Z6V{D7tWm=0x|pYaxk>ZS<02WrR=V zuM(XPe``Du4O&iW4%O1BKxqfU3&%u4;|J+r6lIPM@CY{>i$b3@gb03R_f+@zOP zl(qbZ851VMCpgs7r8}r&j0Y3aFD2YDB)~Wh&JwJ~2<49{yL&HENJw#&oMiJdcXR*$fm7qP4EsBWBB^7?2>ae*VfgX!u z=?I=}VVm8iK6$)FH{lO3oaT0SNYF70jsA%+O+FnnY>FE|cRqOt*BlF8W6)6^zq(rp zIS+od0r36EXjZxp#H1h#I{nyDs&8ejUC>Pd69Y-tp**kluDIenFH9h%-^yu)?wPut z-fM`g=lO$6FF^jY^nV!GAB>RZQ|U zGeC;+%2#>~jt~d$kY>4*PqJ*2o&vw_u%-t})RvRMWN*7I%qr@A(dcpCczXYQ4L&lO z_~&ax>aER+`Ae{U03)2kc&t55V#G8X8F779AfjY*`ARL7f4x7KsGHu}Mpf{;aWGX5 zwWA)l9i@c1V4$@g=SoDhR4;J#oy)Kgl|Ox$@>}=ENE+7GzMHi8O%_fXG?jQ^A`@*{ zB(%WNJk)Ho`%gd*l*CRBun56G8?5yY0Ng=?G2dH-A{sH&lQ@_82O%*<{xFY99v2%2 z9;aFJ2$RVo${}J=iFuuQ{aurJ9Phi?W#2md2vm2D;o3@VBfog5-~xQ z8!GToD+1^EkHGNXy39U38%vF{{i%9EIv+fKP>%b2tYffgI%DOIdUJDB?{70m{3$8_ zILf6rGs20`x@zP(jk|%GD(eJRB8#d+c$_lV93aE?1 zPkWDQ_Canr7ZCe8

    fUbptAh+^8^N=)yoVj`F$CWht^&|N=W(Fji7~w{wrQawYAEKKIv2(;>}uiua2DLIAbuqO7EmD+6{sV^IJwV4 z$iM+rIA8iM)fNM-mJ}DIFP00)+ zg~;#^oqDX}wl218BU-!Ox}kr!O&b-NsL5BxmCmS||S^$ywwHf}7X1Ab}NS;|oe&-V^I2`2s z7Mcn(g@NSyFU7|GH622MMSTv%iNGuqy7-H1rn(FJ*PCjOH z8nAn8?L-=}+^(6fiXpT`l#GI|B{DGx_C0zCRO7(+>3J8vUNJ!A>&ihN@>=odvG~K% zo_c!4I8q{@q*!^*$ld4x7lY(5Vc09Luvm_zi7aEtM8M|xc2q}K?>Oo>?wR`IAokqe zC$9jI^0RrQOt((fuQ|Hv9?_CK0_!5b2TX@GvyvmE! z%eC(>Dj1J+fX^){pGoSLyf4~1X9AmVE`UV@4Dvfp_kYpw%5Y~wB@7KoCjfh0b2=3K zKKhNI)LQtl%Y(A^8$L>j>r>(AQN^YR%S#c_b$4po`XZ8Y_zlBfAQLM@ml-(q$ zNXr_sYh)V;92P+;+Bj1=N}nM3;G1gHN=b<1eD5qbUK0iFkGg@XG^;;vGQ$(D+65+~ z>=QHkprgk)$-f02|B%eQLV9tp4z+(kdY}Gjp840spwGrW=-H7Ttx(xz-anugY{XSOC&17M z37V|lvD#pnV-;DQ`5=s(qaMcj>Clkas8`V)>*98s^tLMMt-GD>UH#j(sj|$Qf z8b1tAS5ZMqhaZqH))QCzdc)%)e)V%_r$nTw-Qi}(^Cg;DfOrf9w|9g<5M&R>iQcLGD!9KnXgv+X3Nc=Ytld}Q-Z-7ju3;E5I z-4q~<Z*{;UTbB7RR-S>}u!Zo77t3n9DoW_*HN7jKAb&$oh%*|H3CPCzmmv6IEVMqJ zAr199p6nl^#S(UK+qV2d3ZInXv4V~V4G~^_NG8VL9mNG<7dCSLn}GSBRL1LzXyb-* zxa`b3^KZd-+Zt{Mh>zBtl?E<1fl`ynf--oTx#!m2VewlOt=0&D<};*!3y+9e<8e4- zAjrviuw7ntLhh0dwoXE5r&3oKOPZKqlSPu>-j@f~w(*U6DRusa3T%}{za}mb(6H_Z zd|6e;U$?&B)560meLJ3N~7O3JrhD5md^-oyNstqURFN|rmcIsLeIw-t9r z96}ELXckEEujy2>PIy=}DK?Jpx?0~7zQOjooBSSH)$KrRF~1P_QhqQ9eQr-&LI}pnVU)^X zgECEN1cxWicGVWiW^NNA)in@y=0w2pdkuWJ%3vlpHN>o4FC^^08Y<$+NdpkgP$BqC zKf`|#92olV;9E}E((rG26l$uX0oZ;w{qHm&0hWmAMXN*$QM8ChAdtrC;{`uAOrvYY z{@ryT#mBQ7W?=D{HpeSH6AU&vYZE=U=k;ltVUpSAL3L6x(dLRn_F<3}=bv95il!b$ z-`qh9iq0e^W@Heg@UqG24$F9jxNSN4C|?Lpq_v4r7~(yxE_{-EreTFqOto~ zKkH*9T+sbfk!g6gekHAlF@L+Q>Wn!rdbNPPvv`ZK>v=;_`Ij=s|9SsO_z)w0r#+{f z14ZJ?Xw4&v2w~qYDUYk20aQh!P?U~*F~W%ZpXrMOzKQ1fI$=J(09?qq0aQ z?zL^~z2GOk{viZrVpdr%H0lsJLS?<_gMBvW!Y>RWLaf(~qaYvH>Sh;~^z#wDTAIzq zuZ*h4ERoV|$&ka$E#uhAn^XwDzPazAq;Y((Eh`rwew>F$rsF+-nvtWM3)>BD)_F01 zzqjzmxG%pB?HNOuI=EGY`76SFmz^C&+3Gp!KEE5^^b#vxZtAWMo34FCme4p!^AQWZtUVZBgkXy;<2bM^<#d$5=gD%1_V8c=c9_ZDDu&c0kNX24`Zz$whoNOJg$kM!X(aG)0D z>EV$ua9|}4Qn-V9yfkLq#@i%~9#-VVK9krHCr!hl@QhH_hK>e&!M}?4u@DpOZZYdw zp`0uS5rm2NfF~6P%f2T1bK)!_fR?=}@rIP%uPUp1?ioa$Fb;o`YboTqIS3?{97L7^ z=J%48U4#dXA$hpY`>w@9#hPMiQxnw^{5hjV=|Je6x(YNEh%&UA=5@BZcle^eIwtu8 zs}0>`^km*XP-K<0_f6=vjHj~Q;_WFybEvVgu}|Dc_TR53bE-QT3zMjAEd)CkhB2>^ zNLezSlFfAe%_>{>8#mvVWz1m;r`bil?Vt4~KOJG?nPI-D^VN2HjV!xmw6ZOBGWA5l z@G5Is_~mxLH*7`WYWFY$Oq?XrV@tiC9q}kO>hAP!R4GieY2qhr6occ&Bt=`ejNz|U zST?2&>0*}p7-A^LWU&wXF`8Df54flOXcrEqI7WE@Ax4UyQuh}@X4S0{6(=(Os4c%3 zx3!7lPEezSTO*rq>P(+yoz^|-D2^>AlWxtKe`!wgWz4jJ7FECY{xLsj7|Te)LfqW5iE$DsyK-)&)A&$rH@##s?{w zA;wTD=EO+*3dOl{=FM;aWcAtizs%t&S@nM>wTQd#q*D_lB!|Gi_<96e04-`N9H1ZI=)f}7u@sLepAx5z|_{|E7!AP z5H^za(fURDBC)JtHkHoa&yS|tC@JOW;3bQc{}q*wR~;P@RTzPm~Fjz7vz_YK%7jfv$Y#Y6}D&+J+CHR zO39jC&DNWtgRQME(ln|cO0O>0?Y9R-QA$j{B}_35O-5r4LG)5Kmim**Q%dcti+r}7 zG*2g3d2fL~l1OLP+~{Y9&};Kzh)6v;{Yj0on9bDU;0C!Rk$qPiFOy9q+Ro{y=XXQ! zB|f=%ZBa)-m9i;1zW_j~dOYf-6n{iP*K5OOkGD56RS)yqv#=Ep$&Z@2NY5JlyJ&if zmrS=*r!+ARF3;qu0ktI0RL|Iykvn3QekSw9&5qjarK_hFu*`0WJ*YoZ#?A!6yWC75 zv)x9v+P`sLh3)>A%#YfE8mNm3%= zgwy*Yap}(3jh9@&3iZsG8Nzs?I`+bDOAk0n_&Jj=EnYst#c?$pUEcr11fyTzZwdC@ zaj79@z%$AxOh%D~EV*l8ReM?Vt%e@J_b%=5haQ9x2t7+h(PtVBt|u~%au2gW|1v#& z-t{j)O2)!uDMdGayj=aR*DfB<-9I}&z0vjizx0$eKTno9M{?<{yanMf| z*K(fCTK>*U&dqN&P>%sr5@b6hA&S;VANpa5!MRpJQjQcG;5%tk#^&Uw!8Ws>yRx$p z`zo=6L5hqHlqt7y18;ZpT`V>rekbw^%T8j41$?3)$y~kZS%FezzdEv#XfZFTQlxxY zgPfc^r`UcCQ=#2imyP_@=?lwWoUh`q=qoJlF?({^#8XzHLJOndV(F4*C-FFg_m$rI zv|;zFDKEm+cx@d|o1an+R_ok;GKlAB`GVS2`&WS*U!fL9G}KOHpo+vxCMx zkM$p4ML#22hzKK%!$+9cd(+y_>!!ugC9_a!R=ER?p|7H?K4{+Dy;d`MKo6~=qGc5J zoAaK5d(kacs~d?fxn^UgCKr@7<~BfsVlMW@#~qrxzoejG>UO}KS}`Kd74?rGeF^O; z3sp;!BEIX$?D?gX#}1CPe9=8>>bTd3v>yHgn0*ll@lNg(Qc|dKC=?RwN zroK;84UhrOpZ+GqU>`!r+&v`q6+}m874EKd%sd`us&_kCXCUBklFJMv9S2Y;##BQER4 z?MKtNC)7bnF#~zNm&1DQYvK!ME4cN@_A;)4HvMcGJBReNCmW(3q)DT{qi$bCP+xC5 zwtH8}{V423EVay*MoAqTGD1&rA#uIC_veL|`|AJ|`;OMGzWB#4fl-#-$Nphe<1eg& z-sj!px9L^KFkD+FF7V(W<|CfQE7rP%OD2MChGmbsVZ#EXdvvuCRul5*>kQXgFxG2& zCU}$S|2hAv zM(ftT%(-h+3bdfP5(xBiwF~*@V^a+Qc3Eb0J6)ZJtu(T$=oOjqV;!H`o3&ehYIf(g zB<<3vE#Y2i-yH_=&4$(iDZ=Tm*)I zx-~-~IDX=78aTrv@}1ziD<706!j#T$5S7}+TIH&Nn)iF+O99sR6k`^Z=%xxj`;@xB zIcr0NK8U*!={pOiorg1-c_t?Td@q^yyct!h*U;CpUA}Bm81bu?4f;D&ho@eyT(c#- zesDNb68Q}@uWqkh289hWEwxonh&=m#wQNTd#~n<2shiB%zrif z+TIZ|?;*&3imJ_z?IYudui7O=RAY|E!~U|ix&V31gsQ*;PsH9j%(ywI~PHW({|63GNS_?&XK60s2 zDPZ*vGYc!8bkWOUa@8q8^ddUecEyrc!J%58~926 z=#HW+FPsBmHX5lgMR{zVHvT?|2jz`}3avbR@PKmxy?&yA=#r?TR9kr0 zJ>(%Jf0WXa$DzDGdvBo2@OA62+G8nm%07$~x?U=wU-*s=8A1y?E7cQky4rCUP1E;} zOjAkRjcDHn+$4z4=?&pvJ)YBu7z>XQ@_l}=T#gz76Vdt(e;qwCbggiC%*wVIe6pWdsu$$D>54z~QmY+EdXc*gtrY2BCu`>QOo+?C0V+L9()m6Pxy4Yb(o#CH7 zUZSa=(UL>6ieo3Ak=BCWO_15Q8KUV7@<{lRk8=kLy4*!lS^F??Zf{>_Bcx>EOB z`~n| zJq3wh1@=&2k03GY#r0W^4bJf}`ggOlA9Gp-%;Bo#1tgld5QLXxCzXTNB9k&3#b|P~ z$fXd4aKR6#r&Hibb@Nu_B)k|_fs)+$rgsOR!ULKv#3inICz@tLuLe6B$68;$g9aGE zQu1E5ch4T6HX|}o8yK_-YX^LN57eBjI+tGfpe3Vqpm5S;9vT4_z6x|FdTDk=9qM}* z{PVv`w$?gqFLHsFP$GSm`Y33*N8z_6hOVICN4n-dJVE`;H z>!5h%LJ0MLkZ<;fJf=q8XlwD;saD=YQf~X?`gSAAbzRQ%lLA)Z6R!hHz7PIk^5&Y;#5Swm6bl!5Lb7*l;9*Gb<6bb_P3!5ooN7 z!n4~n4uqe^laUZ6p$}r82CJ;zSv^MxgJnWn4-6dB$ztsllRMo4#0qSmsq8Zs15h*a z1Y4|VR-Vt%j5fDePP<@kfnq!kS+sFA^QgG5p;?^A%pc!fGCGC~lN>La9qG-Jb{wl^cZubtqZp-GMk?&) zG$fobSfP1_si(Z)PFRyftWDGXJx5871;qnbc>h>S>M&jQpomC){Cr(sk!IVD$L!xJ zaOxAH2emwB?GqNp?+7!W+w`|17_&6KVjGGBPm0?G?Znyjn%h>XmrVGT<0AC zO$$b-lH7xsnewLZiXdeH-lst);vMgM)ni2t$GDC$*oQEFgZFrCP9{w2p>BRF9ev+TvNzK36$J{fh0l>%N4XqBF-{=q{ zFkR*}DY44;j1~KbEJ2(=-M|~*hySpTN6oq;$S>#K^@F3Tq*#ZQ_)?%^BgviEb(iC) z&-skDMvKu$>&!E$R8#JxH(Ikf#r5JgP_B>Gflx32aU9*LWq|v4I7&bz_);VWjn$hZ z>dRRN3?_i`4*i_QabGvfT5JXvHnoJOgQr}%7VuO(exNyXHG~KnD>vArxDdA`M|*0% zB{xNc0GnD1mhsV5&IUA|MJ|kL-@T}fahY@hNC=$~%M29{jzuR*=|yAqO9DSxoJehg za|E(7S;Z8kdiwxbirTJLC0Bjd+fL8Y1g_p5!6x-N_!9lI-LWPk^uB^vyiy1ij`_@UN=RvpY_K!&LhQkmL_M*u+V@OS;w(q) zO&VPj!6tf=Ke4`3`GF{S9Fty5-&|~W8DP#==S^vS84k%!QHh#lK7K-Al3A&;0{|&v zg2W!6qU5QUjTwGF=r||YlQj{JB>^4ptBJ{+{AF97M~@SoR5aEc^sOUmf4yB*leL3BVZ7=Ur8>UA9fSf;v*iXmdLn2@&qoJZD?wXopN0qHXH{C0^sVc!xWqpPJJb@x zMrUk4*@jk>8y#@IW|ridH@=WC#mar7X^b%)ZWo&{#<28u;q_I>{2>5(mq8Sj9)Wk3 z$S_3Jf*~t=IM>?!9wb5nZ}(U^X*gBJIRL@NU8LMbN_V2xgOBA{g}@qti@QDBa#vEj ztV7<{ob~otxz+>mEbH%RxYB&N-s3agz}aZYM0_^#!pqtI(48mKv!zcmoTW--!7k3h zA*%b&jXc>0@q2q>?$=W<0MoM$mG)Ef<0Tm72&JX!;g0-Ww)O}s?u(5S(VRlkiYBq1ror&IkfSx z;TP&ZUQZV$JC4jj8GvnSuFrY4R^<{1gc zo_b1MYy%Rw$03mtm|X+c-b-yFN2M!JUxn#nHcTh&t!#l_GK%lwU5Vm7CPH;vXI1_b zr^+PtlL)NIOSwv8Ikpo9t!KY`vZVs1mkvp0T2GdC9*bsL#fjMXg3gg%_a|VA+m7E# z#Y;q*)l{}dvsWC2>mg(y@8XwK|>sgrJwEg+E|G_dwvY3kX<*O5?{-kQ6+0x$}_ z=EKl*@p?`IoNJ;EF{chMbFonfj3aI1a$kOo!Cq^so6MlL5*x?Egmq{aKM<4H=%ZHO zQ?arlv*D}xmv;?cV`Cyu$S$6O)%p+FEz9&PH}BsHZ4XTqzd8sz%#?4j^Wh`bm#CVRpBKsBq2i7x1PM6zfe2czSe zUHR2M%%U$O+eZ{mMX+2kFvJOS=HN86xKG7=hkD83T@tx>z)CRdf(u7zX>oeadMAI8 zQ8Pk+xii>2%=HG^#bDIIT> z#{gS0&h-xHL0)h`Mt0~Mp7*)At= zM7l)vAD!O)IQZ-Xe4^aTxa;27(nq`s+T>Qf0~o`^6T99HTK z5!-h}{sTC*4B@{$&RT7facs2B(t+e>_H<{D!_@tSVqYyPTZ?K4f^F9VGEg-q^EevY zp2AQd6`_?NM$;SO7)67uCiqLJ??uWkcxR$rdO3*Tn=3^WYJIF}@iJOYUZIug zd1Uoo$*Y!bRe4GSA@k`{j>+GAvs@e??oCu`rC6Cu)RLY1^ZNbZN|6UrVl z2NgPG#?5UA4=&|09N5Aad0C+1-AEi^9SIaN7QFueHOYOvGKBx)jP5O(WaePV>T3Tp zDttrwU{NJ-Syi2v$*sev`3&Cn3%}%gLnkQTkWtfD)3)@B&BQ zz`hV__Z+6wI`TU0mE|$9p2GTx;4tTC3s?4pAgou%_%x>Nt@9~d=M|mhiEz2QW&Gl6 zO?1)Z`rf5o^)Ri+2XS-{Qm6 z>?>OX=G?aW2o3gyU)Lve72~0Iu75mhMq|s?keDW`{(E* zHZUA#&D>PzD(9YjpVnIZu}kE4n=Juu4s-FzD5L;`XpL=)4_V3(qs^xH$F~#RUfDTy z4YvcgrHb;U>1vk{^7=YkFj zZ>>{r%WkJu9ADfWFzB@B>N;a%H>dqU5e4@R2iZYT!$+dsH%-$OGlAw%J1Bf8;P_tk zXv<5YC^;CPagl0g@YFjRmQUu|qSAvmf>O3l{CJn^rp47Q e42=RM7)9IIaI_d#9 z$#{xtN)9gP{s-HvrHaC(M&{pzp7ZJzs!A^zT=sCIi4Jxk|F07_Qn`8ZEu=vQ+T*4Q zZ<3qO!hhTc0cdR_K~7%wWFDhCmww1XdnxY?Mx-en$&+?w;X85YvYrBarT{2t^5|4k_73;Yok^0^i6(fvJyyjP}?G!H+QD!-JkG2H72(Tws=s~s$1XNH( zbQ)dn`(=&&{QThV;!w>lrL+ilUZrh&EykEc8|*W=W^LNM0@xG#1nuff2r057s?YiU zsn~hdQFPh)7*%~))W3%DWG)GHbmb7+T~TdrSjT?GXf!{8k|)zU)0}1A3s;Hlp6cfV z+*E)1hPR+SksMb7JE&IN!iR{_!rmSEca!gV=@=1RTvdsY=v_!Iat$^O?if z;c;kju7mj7{P5cy6fmEb*%+?L<_|#@4!zZRjg;6w-y#?I9(P&GbassQrA>HNQoNCh ztIwMEcL7^xsDVUy%UKMU-BF44&aPx0^tM|-y@tzvE^bR=?^|p3fpBerk4+Lt3a($T*ckz-iVeItRgJNY;u?3Spqzg)7rB}E+Z9~q4{ z?mi_&kGzRB2$++3ewaWtWpuX>d|hI@i%z(LrU zCEs?!W6Yuz&s>utH#C<6t=GFs0)!B^qIlD*b_|RU%ZRtY&Qb%D6Z4a1 z9k?FO=&2neet$efs@)PC(yk6O&DnU^oQ45@&TMa?yE@nU5i=Hhjof2}*{0hQ3&;6Y z=TCk91<_UbB}oSz4NOx5yR$yA6&2=|9`*iHWO;Q;?mBk(hqC&qr7aU^*(;fGiKeMo<0g1o+ z_)C_8*G+%lyYY$YriA4+F`ezxzUNp8T>xHJdrh&8>Q*DB%Zhffr5|2I6g9m=d5cs5 zoWff}Ny9c`;#P4j4TpS0@@A11rGy_3`Mx4ZozY-p$r*#2G!)VDjFl1qFS) z(j^L(qH3y*D0*WM7-yp64J4>%3h%0zeQV(9VzRezYEq1q?QJF>&P}o(wP>%R%r(dg z@_J+5t!vJkRpRYnlf;_XMG4nyNtu$CDR^>~Z-czY5 zLp~-Jd>nN^c!H)HSNSA1V5+I8vu6j#y~c^soh(N*Wye-$X9Wh!evkq^{n5bT)Dt7}&fMSOkQ>^K+bv923i0{B13Qh>LpM)$y z_`cuK4tJuWhc*WKL{qg*++^oAH>kcXGx#@UO|W(Qk6Dcj0_K{%Cn+v5a=04dP?P&L zW#&b3cTp&kQo6*;{PA3g)>VtmY*=P0@P6wZWxn>P2__SaiTFVt1ydGqlpUgMP{hN} z`6aryI1QR(ZpMMZA@QaxgSni(y5xPnnsqf&4Iah>N}b1ZIC? z+lT2r=>_A^V35|F_idZ(5Pfm`N-DI}MW}ec`i}Cn+sD!^nl2-x$_=dAa`&+eePnC; zGs_^Wszz&YZpc5`(<#KmaK$0Eheq_bl2F5@+S--ljEsUcb*$P4+|YHD_P_s)A(VOuA}xYY z8t7*Op)9{Xv$J#A7#m1S13xi93*w+)wu-@d_l7|8X%-*TKFK#tcu?}IEBD*vq=i=j zr~4&3BK{vFBL`p`RbQmf*HJnk44can;#>G3-5J@|d!Fa$3=v(IQv1~IdTRG!Ew~ zkU2UOn$ANm*JQR$arT^{h zyyVA$i;1;_EjLlR3T7|Z^X}k$0|hz#jKsZ_-Usp&ttM;g*A^*92i*wqS6YjDpKbVT z!rw;tl;GE8yc#K-<0r!?bJeb3WlM}W5!d4=P~MaphLhv@SCx|_-A-EjwRVAD2ckmn z!0t&!{$Y7D$P$HSRf!LXj8XspOCE=9_<;?!S#Tnx>64NSvu#qOc8!$D&?=MY?-S%T z5MxgLwzWS7$JML^RvOfPHAil&yOCrftjiyy3a#>TGU96hb9TsjW)&K|Pk{6WoL;mT z-ogFh6JF|>{X;6_UGfbTi2<%0kK literal 0 HcmV?d00001 diff --git a/hws/matrix_class/images/matrix_transpose.png b/hws/matrix_class/images/matrix_transpose.png new file mode 100644 index 0000000000000000000000000000000000000000..2f66d2c6beb0ed0a0bc921c0633aad82cd7d1427 GIT binary patch literal 8970 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 ap%}eh593Wt|Czr6CM~WYRx4r@^uGXnhv|U; literal 0 HcmV?d00001 diff --git a/hws/matrix_class/images/matrix_transpose_formula.png b/hws/matrix_class/images/matrix_transpose_formula.png new file mode 100644 index 0000000000000000000000000000000000000000..2e76b92f18400c2ca728ead1742f4fce8b80ff5c GIT binary patch literal 8442 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 literal 0 HcmV?d00001 diff --git a/hws/matrix_class/matrix_main.cpp b/hws/matrix_class/matrix_main.cpp new file mode 100644 index 0000000..f116217 --- /dev/null +++ b/hws/matrix_class/matrix_main.cpp @@ -0,0 +1,310 @@ +// ======================================================= +// +// IMPORTANT NOTE: Do not modify this file +// (except to uncomment the provided test cases +// and add your test cases where specified) +// +// ======================================================= + + +#include +#include +#include +#include +#include "Matrix.h" + +#define __EPSILON 0.0000000001 //Need this to compare doubles because representation. + +void SimpleTest(); //Some basic tests +void StudentTest(); //Write your own test cases here +void ExtraCreditTest(); //Write this if you write resize() + + +//Function to test a ton of matrices at once. +void BatchTest(double start, double step, unsigned int rows, unsigned int cols, + unsigned int num); + +//Quick function that returns if two doubles are very similar to each other. +bool double_compare(double a, double b); + +//Uses Gauss-Jordan elimination to create a Reduced Row Echelon Form matrix. +Matrix rref(const Matrix& m); + +int main(){ + SimpleTest(); + std::cout << "Completed all simple tests." << std::endl; + + //Uncomment this to allocate a lot of 100x100 matrices so leaks will be bigger. + /* + BatchTest(100,0.1,100,100,50); + std::cout << "Completed all batch tests." << std::endl; + */ + + StudentTest(); + std::cout << "Completed all student tests." << std::endl; + + //Uncomment this if you write the resize() function. + /* + ExtraCreditTest(); + std::cout << "Completed all student extra credit tests." << std::endl; + */ + return 0; +} + +////////////////Test functions////////////////////// +//Some basic tests +void SimpleTest(){ //well behaved getrow/read after + //Default constructor + Matrix m1; + assert(m1.num_rows() == 0 && m1.num_cols() == 0); + + //Copy constructor + Matrix m2(3,4,0); + assert(m2.num_rows() == 3 && m2.num_cols() == 4); + + Matrix m2_copy(m2); + assert(m2_copy.num_rows() == 3 && m2_copy.num_cols() == 4); + m2_copy.set(1,1,27); + double d0; + assert(m2.get(1,1,d0)); + assert(double_compare(d0,0.0)); + assert(m2_copy.get(1,1,d0)); + assert(double_compare(d0,27)); + + //Equality and Inequality + Matrix m3; + assert(m1 == m3); + assert(m1 != m2); + + //Printing + std::cout << "Empty matrix:"; + std::cout << m1 << std::endl; + + std::cout << "Zeroed 3x4 matrix:"; + std::cout << m2 << std::endl; + + std::cout << "One after the other:"; + std::cout << m1 << m2 << std::endl; + + //Set & get + Matrix m5(4,4,2); + Matrix m6(4,4,12); + assert(m6.set(2,1,7)); + assert(m6.set(3,3,11)); + double d1; + assert(m6.get(2,1,d1)); + assert(d1==7); + + //Addition + std::cout << "Adding m5 and m6" << std::endl; + std::cout << m5 << m6 << std::endl; + + Matrix m7; + m7 = m5; + Matrix m8(m5); + assert(m7 == m8); + + assert(m7.add(m6)); + std::cout << "The result" << std::endl; + std::cout << m7 << std::endl; + + double* r1 = NULL; + r1 = m7.get_row(2); + assert(r1[0] == 14 && r1[1] == 9); + + delete [] r1; //Remember we need to clean up dynamic allocations. + + Matrix m9(3,6,0); + m9.set(0,0,1); + m9.set(0,1,2); + m9.set(0,2,1); + m9.set(0,3,1); + m9.set(1,0,2); + m9.set(1,1,3); + m9.set(1,2,-1); + m9.set(1,4,1); + m9.set(2,0,3); + m9.set(2,1,-2); + m9.set(2,2,-1); + m9.set(2,5,1); + + std::cout << "Attempting Gauss-Jordan reduced row echelon form." + << m9 << std::endl; + Matrix m12 = rref(m9); + std::cout << m12 << std::endl; + double comparison_value; + assert(m12.get(0,3,comparison_value)); + assert(double_compare(comparison_value,0.25)); + assert(m12.get(0,1,comparison_value)); + assert(double_compare(comparison_value,0.0)); + assert(m12.get(1,5,comparison_value)); + assert(double_compare(comparison_value,-3.00/20)); + assert(m9.get(0,3,comparison_value)); + assert(double_compare(comparison_value,1.0)); + assert(m9.get(0,1,comparison_value)); + assert(double_compare(comparison_value,2.0)); + assert(m9.get(1,5,comparison_value)); + assert(double_compare(comparison_value,0.0)); + + Matrix m11(3,4,0); + m11.set(0,0,1); + m11.set(0,1,2); + m11.set(0,2,3); + m11.set(0,3,4); + + m11.set(1,0,5); + m11.set(1,1,6); + m11.set(1,2,7); + m11.set(1,3,8); + + m11.set(2,0,9); + m11.set(2,1,10); + m11.set(2,2,11); + m11.set(2,3,12); + + std::cout << "M11 to be quartered: " << std::endl; + std::cout << m11 << std::endl; + + Matrix* ma1 = NULL; + ma1 = m11.quarter(); + assert(ma1 != NULL); + + std::cout << "UL: " << std::endl << ma1[0] << std::endl; + std::cout << "UR: " << std::endl << ma1[1] << std::endl; + std::cout << "LL: " << std::endl << ma1[2] << std::endl; + std::cout << "LR: " << std::endl << ma1[3] << std::endl; + + for(unsigned int i=0; i<4; i++){ + assert((ma1[i].num_rows() == 2) && (ma1[i].num_cols() == 2)); + } + + //Upper Left + assert(ma1[0].get(0,0,comparison_value)); + assert(double_compare(comparison_value,1)); + assert(ma1[0].get(1,1,comparison_value)); + assert(double_compare(comparison_value,6)); + + //Upper Right + assert(ma1[1].get(0,0,comparison_value)); + assert(double_compare(comparison_value,3)); + assert(ma1[1].get(1,1,comparison_value)); + assert(double_compare(comparison_value,8)); + + //Lower Left + assert(ma1[2].get(0,0,comparison_value)); + assert(double_compare(comparison_value,5)); + assert(ma1[2].get(1,1,comparison_value)); + assert(double_compare(comparison_value,10)); + + //Lower Right + assert(ma1[3].get(0,0,comparison_value)); + assert(double_compare(comparison_value,7)); + assert(ma1[3].get(1,1,comparison_value)); + assert(double_compare(comparison_value,12)); + + delete [] ma1; +} + +//Write your own test cases here +void StudentTest(){ + +} + +//Write this if you write resize() +void ExtraCreditTest(){ + +} + + +////////////////Utility functions////////////////////// + +/* Function that quickly populates a rows x cols matrix with values from + * start in increments of step. Does this num_times times. + */ +void BatchTest(double start, double step, unsigned int rows, unsigned int cols, + unsigned int num){ + Matrix* m_arr = new Matrix[num]; + for(unsigned int i=0; i=ret.num_cols()){ + return ret; + } + + ret.get(i,curr_col,dummy); + if(double_compare(dummy,0.0)){ + //Swap with a nonzero row + for(unsigned int scan_i = i+1; scan_i < ret.num_rows(); scan_i++){ + ret.get(scan_i,curr_col,dummy); + if(!double_compare(dummy,0.0)){ + ret.swap_row(scan_i,i); + break; + } + } + } + + //Now we know ret i,curr_col is non-zero so we can use it as a pivot. + double pivot; + ret.get(i,curr_col,pivot); + for(unsigned int j=0; j 1 line are in .cpp file. Organized class implementation and reasonable comments throughout. Correct use of const/const& and of class method const. ) (5 pts) + - No credit (significantly incomplete implementation) (-5) + - No documentation for Matrix itself is provided (function documentation and section headings don't count). (-1) + - Function bodies containing more than one statement are placed in the .h file. (-2) + - Missing include guards in the .h file. (Or does not declare them correctly) (-1) + - Functions are not well documented or are poorly commented, in either the .h or the .cpp file. (-1) + - Improper uses or omissions of const and reference. (-1) + - Overly cramped, excessive whitespace, or poor indentation. (-1) + - Poor variable names. (-1) + - Contains useless comments like commented-out code, terminal commands, or silly notes. (-1) + - DATA REPRESENTATION (Does not use STL vector/list/etc. for the implementation.) (4 pts) + - No credit (significantly incomplete implementation). (-4) + - Uses STL data structures (lists, vectors, etc). (-4) + - Member variables are public. (-2) + - ORDER NOTATION (Readme contains correct analysis of order notation, including proper notation and use of provided variables.) (5 pts) + - Does not use O() syntax. (-1) + - get_column incorrect. (-0.5) + - operator<< incorrect. (-0.5) + - quarter incorrect. (-0.5) + - operator== or operator!= incorrect:. (-0.5) + - swap_rows incorrect. (-0.5) + - rref incorrect. (-0.5) + - did not write order notation part. (-5) + - ADDITIONAL TEST CASES (A wide variety of additional student-written test cases.) (4 pts) + - Does not test transpose. (-1) + - Does not test multiply_by_coefficient. (-1) + - Does not test get_col. (-1) + - Does not test corner cases of some kind (rows or cols = 0, quartering with odd dimensions, etc). (-1) + - No test cases, or else trivial/minimal ones that only test things covered in SimpleTests. (-4) diff --git a/hws/matrix_class/sample_output.txt b/hws/matrix_class/sample_output.txt new file mode 100644 index 0000000..62efb22 --- /dev/null +++ b/hws/matrix_class/sample_output.txt @@ -0,0 +1,86 @@ +Empty matrix: +0 x 0 matrix: +[ ] + +Zeroed 3x4 matrix: +3 x 4 matrix: +[ 0 0 0 0 + 0 0 0 0 + 0 0 0 0 ] + +One after the other: +0 x 0 matrix: +[ ] + +3 x 4 matrix: +[ 0 0 0 0 + 0 0 0 0 + 0 0 0 0 ] + +Adding m5 and m6 + +4 x 4 matrix: +[ 2 2 2 2 + 2 2 2 2 + 2 2 2 2 + 2 2 2 2 ] + +4 x 4 matrix: +[ 12 12 12 12 + 12 12 12 12 + 12 7 12 12 + 12 12 12 11 ] + +The result + +4 x 4 matrix: +[ 14 14 14 14 + 14 14 14 14 + 14 9 14 14 + 14 14 14 13 ] + +Attempting Gauss-Jordan reduced row echelon form. +3 x 6 matrix: +[ 1 2 1 1 0 0 + 2 3 -1 0 1 0 + 3 -2 -1 0 0 1 ] + + +3 x 6 matrix: +[ 1 0 0 0.25 0 0.25 + -0 1 0 0.05 0.2 -0.15 + 0 0 1 0.65 -0.4 0.05 ] + +M11 to be quartered: + +3 x 4 matrix: +[ 1 2 3 4 + 5 6 7 8 + 9 10 11 12 ] + +UL: + +2 x 2 matrix: +[ 1 2 + 5 6 ] + +UR: + +2 x 2 matrix: +[ 3 4 + 7 8 ] + +LL: + +2 x 2 matrix: +[ 5 6 + 9 10 ] + +LR: + +2 x 2 matrix: +[ 7 8 + 11 12 ] + +Completed all simple tests. +Completed all student tests.