From 88012c30d4b47d8175b542996ed9e43b73085114 Mon Sep 17 00:00:00 2001 From: vaidehi4321 <56602405+vaidehi4321@users.noreply.github.com> Date: Sun, 1 Dec 2019 21:52:20 -0500 Subject: [PATCH] completed --- .idea/compiler.xml | 6 +- .idea/dataSources.xml | 19 +++ .idea/encodings.xml | 6 - .idea/misc.xml | 5 +- .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 + jdbcdao.iml | 18 +++ pom.xml | 6 + src/main/java/ApplicationRunner.java | 2 + src/main/java/CarsDAO.java | 109 ++++++++++++++++++ src/main/java/CarsDTO.java | 87 ++++++++++++++ src/main/java/ConnectionFactory.java | 25 ++++ src/main/java/DAO.java | 12 ++ src/main/java/DTO.java | 3 + src/test/java/TestCarsDAO.java | 35 ++++++ target/classes/ApplicationRunner.class | Bin 0 -> 276 bytes target/classes/CarsDAO.class | Bin 0 -> 4035 bytes target/classes/CarsDTO.class | Bin 0 -> 2275 bytes target/classes/ConnectionFactory.class | Bin 0 -> 981 bytes target/classes/DAO.class | Bin 0 -> 375 bytes target/classes/DTO.class | Bin 0 -> 172 bytes target/jdbcdao-1.0-SNAPSHOT.jar | Bin 0 -> 1559 bytes target/maven-archiver/pom.properties | 5 + .../compile/default-compile/inputFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 target/test-classes/TestCarsDAO.class | Bin 0 -> 1354 bytes 26 files changed, 341 insertions(+), 11 deletions(-) create mode 100644 .idea/dataSources.xml delete mode 100644 .idea/encodings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 jdbcdao.iml create mode 100644 src/main/java/ApplicationRunner.java create mode 100644 src/main/java/CarsDAO.java create mode 100644 src/main/java/CarsDTO.java create mode 100644 src/main/java/ConnectionFactory.java create mode 100644 src/main/java/DAO.java create mode 100644 src/main/java/DTO.java create mode 100644 src/test/java/TestCarsDAO.java create mode 100644 target/classes/ApplicationRunner.class create mode 100644 target/classes/CarsDAO.class create mode 100644 target/classes/CarsDTO.class create mode 100644 target/classes/ConnectionFactory.class create mode 100644 target/classes/DAO.class create mode 100644 target/classes/DTO.class create mode 100644 target/jdbcdao-1.0-SNAPSHOT.jar create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/test-classes/TestCarsDAO.class diff --git a/.idea/compiler.xml b/.idea/compiler.xml index f006a55..c87e502 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,9 +6,11 @@ - + - + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..50a0ae1 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,19 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306 + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index ada92a5..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 803a716..d30d09e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,5 @@ - - - + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5c77ca2 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/jdbcdao.iml b/jdbcdao.iml new file mode 100644 index 0000000..e42d504 --- /dev/null +++ b/jdbcdao.iml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d97c43d..469b6c0 100644 --- a/pom.xml +++ b/pom.xml @@ -14,5 +14,11 @@ junit 4.10 + + + mysql + mysql-connector-java + 8.0.18 + \ No newline at end of file diff --git a/src/main/java/ApplicationRunner.java b/src/main/java/ApplicationRunner.java new file mode 100644 index 0000000..c3a4d3a --- /dev/null +++ b/src/main/java/ApplicationRunner.java @@ -0,0 +1,2 @@ +public class ApplicationRunner { +} diff --git a/src/main/java/CarsDAO.java b/src/main/java/CarsDAO.java new file mode 100644 index 0000000..86cc7f7 --- /dev/null +++ b/src/main/java/CarsDAO.java @@ -0,0 +1,109 @@ +import com.mysql.cj.jdbc.Driver; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class CarsDAO implements DAO { + //ConnectionFactory cf = new ConnectionFactory(); + Connection connection = ConnectionFactory.getConnection(); + + + public CarsDTO findById(int id) { + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM Cars WHERE id=" + id); + if (rs.next()) { + CarsDTO car = extractUserFromResultSet(rs); + return car; + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + + return null; + } + + + private CarsDTO extractUserFromResultSet(ResultSet rs) throws SQLException { + CarsDTO car = new CarsDTO(); + car.setID(rs.getInt("id")); + car.setMAKE(rs.getString("make")); + car.setMODEL(rs.getString("model")); + car.setYear(rs.getString("year")); + car.setCOLOR(rs.getString("color")); + car.setVIN(rs.getString("vin")); + return car; + } + + + public List findAll() { + + Connection connection = ConnectionFactory.getConnection(); + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM Cars"); + List carList = new ArrayList(); + while (rs.next()) { + CarsDTO car = extractUserFromResultSet(rs); + carList.add(car); + } + return carList; + } catch (SQLException ex) { + ex.printStackTrace(); + } + return null; + } + + public CarsDTO update(CarsDTO dto) { + + try { + PreparedStatement ps = connection.prepareStatement("UPDATE Cars SET MAKE=?, MODEL=?, YEAR=?, COLOR=?, VIN=? WHERE ID=?"); + ps.setString(1, dto.getMAKE()); + ps.setString(2, dto.getMODEL()); + ps.setString(3, dto.getYear()); + ps.setString(4, dto.getCOLOR()); + ps.setString(5, dto.getVIN()); + ps.setInt(6, dto.getID()); + int i = ps.executeUpdate(); + if (i == 1) { + return dto; + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + + return null; + } + + public CarsDTO create(CarsDTO dto) { + try { + PreparedStatement ps = connection.prepareStatement("INSERT INTO Cars VALUES (ID=?, MAKE=?, MODEL=?, YEAR=?, COLOR=?, VIN=? "); + ps.setInt(1, dto.getID()); + ps.setString(2, dto.getMAKE()); + ps.setString(3, dto.getMODEL()); + ps.setString(4, dto.getYear()); + ps.setString(5, dto.getCOLOR()); + ps.setString(6, dto.getVIN()); + int i = ps.executeUpdate(); + if (i == 1) { + return dto; + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + + return null; + } + + public void delete(int id) { + try { + Statement stmt = connection.createStatement(); + int i = stmt.executeUpdate("DELETE FROM Cars WHERE id=" + id); + } catch (SQLException ex) { + ex.printStackTrace(); + } + + + } +} diff --git a/src/main/java/CarsDTO.java b/src/main/java/CarsDTO.java new file mode 100644 index 0000000..552e059 --- /dev/null +++ b/src/main/java/CarsDTO.java @@ -0,0 +1,87 @@ + +public class CarsDTO implements DTO { //<------this is Data transfer object class + private Integer ID; + private String MAKE; + private String MODEL; + private String Year; + private String COLOR; + private String VIN; + + public CarsDTO(Integer ID, String MAKE, String MODEL, String year, String COLOR, String VIN) { + this.ID = ID; + this.MAKE = MAKE; + this.MODEL = MODEL; + Year = year; + this.COLOR = COLOR; + this.VIN = VIN; + } + /* + public CarsDTO(String MAKE, String MODEL, String year, String COLOR, String VIN){ + this.MAKE = MAKE; + this.MODEL = MODEL; + Year = year; + this.COLOR = COLOR; + this.VIN = VIN; + } + + */ + + public CarsDTO(){ + } + + public Integer getID() { + return ID; + } + + public String getMAKE() { + return MAKE; + } + + public String getMODEL() { + return MODEL; + } + + public String getYear() { + return Year; + } + + public String getCOLOR() { + return COLOR; + } + + public String getVIN() { + return VIN; + } + + public void setID(Integer ID) { + this.ID = ID; + } + + public void setMAKE(String MAKE) { + this.MAKE = MAKE; + } + + public void setMODEL(String MODEL) { + this.MODEL = MODEL; + } + + public void setYear(String year) { + Year = year; + } + + public void setCOLOR(String COLOR) { + this.COLOR = COLOR; + } + + public void setVIN(String VIN) { + this.VIN = VIN; + } + + public int getId() { + return ID; + } + + public String toString(){ + return String.format("Car={car id = %d, make = %s, model = %s, year = %s, color = %s, vin = %s}",getID(),getMAKE(),getMODEL(),getYear(),getCOLOR(),getVIN()); + } +} diff --git a/src/main/java/ConnectionFactory.java b/src/main/java/ConnectionFactory.java new file mode 100644 index 0000000..2ca8ee4 --- /dev/null +++ b/src/main/java/ConnectionFactory.java @@ -0,0 +1,25 @@ +import com.mysql.cj.jdbc.Driver; + +import java.sql.Connection; + +import java.sql.DriverManager; +import java.sql.SQLException; + +public class ConnectionFactory { + public static final String URL = "jdbc:mysql://localhost:3306/******"; + public static final String USER = "****"; + public static final String PASS = "********"; + + public static Connection getConnection() + { + try { + DriverManager.registerDriver(new Driver()); + return DriverManager.getConnection(URL, USER, PASS); + } catch (SQLException ex) { + throw new RuntimeException("Error connecting to the database", ex); + } + } + + } + + diff --git a/src/main/java/DAO.java b/src/main/java/DAO.java new file mode 100644 index 0000000..9dd6328 --- /dev/null +++ b/src/main/java/DAO.java @@ -0,0 +1,12 @@ +import java.util.List; +public interface DAO { + public X findById(int id); + + public List findAll(); + + public X update(X dto); + + public X create(X dto); + + public void delete(int id); +} \ No newline at end of file diff --git a/src/main/java/DTO.java b/src/main/java/DTO.java new file mode 100644 index 0000000..fde0fcb --- /dev/null +++ b/src/main/java/DTO.java @@ -0,0 +1,3 @@ +public interface DTO { + int getId(); +} diff --git a/src/test/java/TestCarsDAO.java b/src/test/java/TestCarsDAO.java new file mode 100644 index 0000000..86c4fae --- /dev/null +++ b/src/test/java/TestCarsDAO.java @@ -0,0 +1,35 @@ +import com.sun.xml.internal.bind.v2.model.core.ID; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TestCarsDAO { + + @Test + public void testFindById(){ + + CarsDAO c1 = new CarsDAO(); + CarsDTO a1 = c1.findById(1); + CarsDTO e1 = new CarsDTO(1 , "Nissan" , "Frontier" , "2019" , "white" , "1392BR568"); + /* Assert.assertEquals(a1.getID(),e1.getID()); + Assert.assertEquals(a1.getCOLOR(), e1.getCOLOR()); + Assert.assertEquals(a1.getMAKE() , e1.getMAKE()); + Assert.assertEquals(a1.getMODEL() , e1.getMODEL()); + Assert.assertEquals(a1.getYear() , e1.getYear()); + Assert.assertEquals(a1.getVIN() , e1.getVIN());*/ + Assert.assertEquals(a1.toString(),e1.toString()); + } + @Test + public void testFindAll(){ + CarsDAO c1 = new CarsDAO(); + List carList = new ArrayList(); + carList= c1.findAll(); + System.out.println(carList); + } + + + + } + diff --git a/target/classes/ApplicationRunner.class b/target/classes/ApplicationRunner.class new file mode 100644 index 0000000000000000000000000000000000000000..fd5e825993768fd48271c8543a8c5f28adf288b9 GIT binary patch literal 276 zcmZXO&1%9>5QWdg{M0mRtl-|AbzyL=2t{xeDyX=>i5Gh%y^)ysUakZeK0qI;bZ+R* z892=O<_yfw@BIN_g3w0;Ee~xE9fCVkT9tD`WB9%!*o%BG37uGJ`B{A@ve=3wWAYZ~ zsmOMsP{#j5yZlmTLNER}oide*QssJGX)TK>!QbRnk;N578<)%Cy7)7JqJvxcQLPWf#>Ra7H)Km4OA1)n#m=FRVd5J7~hM*(! zOS&)Vp04Ri+q4a|#6+P@(WAMk6^k{qdl0?tIJr&N+7(z5Ji& zUjVQVe-Ggh^bpQtt^xPrLL>5+S8*`}KlC69@?4OiC_||ci+HpV29`qHZK^1T(2Pqe z-V{QM9GH;B-fgLsEL-x*F#!A;TwR_@pd+Du_?Z%V*@~&&tf_f_PHUeqMln zL545N@Ff*rR`C@TPbmmxOU0s|HS?vSg7(CG=2B*0>CwW#s5?EZAaEpK%$r9Qcq832 z3VfrboUUL~B45-e%M0gpBb_-{;7n_xl+6@oGDcqBok^d0A-|-cAu*aUmd2t<`U{@V z7jq|8;yDFcB;IYWq-DjM%^2=pYsR-^E|?11YS2<<#?%+|qRIUpgRbk=ru3z9!A$Aa zn!c={qwd`4L~J>$FA7&Vn&qEh=NbR^gJzNhs9^;66R3Csrb4XONG zF=Lhu`s`Z2A;AbAaS0qH>rkpxHnRG7UNS^;l3=fR)^G$PD!!`WYxuf`!x&ca4GrJK zw-~qD)hW}+7w1lt^M#zw0!%;>(Nj;=PnFYWSI$t?SV%*ka+a zQYC5_nH5PA6+hST3;a^SiRn{g(R9panu?{v6VV4^Bggu}6UnhyLX6p1bV{D1$wbmJ zX5y10#~fASV)MS2g?C1Yy zZ0e`Wx(E@uIVj;=YiafF+*xLHk-d>hN4g)RDvPW`ljO4()9jb5<^Xk$7rCK*qkGs| zH`k)Zefpf#uX-s{DC^1dBI=qJI1%vg} z)}ofkY}DOVlD6@8x}jgUkJ=DqRU0Z?*P^S}2vhOpFs11*rB!80(_-4>B-FI?bz&+o zu6`~{fZErjW;H@|pD&s-5@uU7F7Qkw&My$|;2)4fQ1CkbAU&UBh&De39FJOa9&1hO zxelf0Ie4Ch_bTT-IA-nja16kQAdb`0?7fKM1m6_t8;+ls;N{;nAlh>c-U@sQCi-r` zKYJa4R&^D@+g8!AickfO9!&OEpec9~O+EeB(RA3i-FM|Of)jnK*rZ&st~f}r%?^k? zXrSXJ0&m7{Y(hUaV+gIJww1fuNUEJ+w^;y>66_G6#4t|KA@02oC+TN5wjhrCxiZZ8 z2aw<#!8%05n!qG)_Q*Gjqe$}%cYFDqzJV6<*gVnK+uB;e77ss9ZL4VK>(&Z7Jp5#B zqrKg+J89qM*gI(NbnM${?{e&L-xWHxHSVIez)p_0qXWBeC&CzDv*C zgl#Y`G-7 zutVbC?%VFKV7CWnF8}vmj882%J}Y~w!P(E80Qz|EUNjPS8wSZ`ANJq?#UEmj?qQG) zGT-i{sE3$0hb=ZIp>jQBA@}p-ekV|E=yn3NlZ?}trstz|Asch}`{+gTng1%~6XtOJ zCpGdB&soXB*1Ia$<6$29dRK9G1raa${4~35GeEP)HdUHbMm7X#_St3y{Zw$L?%~c)-tLtu;NT*dP zdFJIj=Zjn^Ac6(vw_yS8A)pW`+D#==2e03S*KfCymM957?7%y~;CgshLr?FEXj#Qj zt^5NPh=AqZZm$itD>|6Dse^lN&A}*zwgnn=5CnSIi4Xq2(*cKxhXIlvCE=21?thu9 BY<&O# literal 0 HcmV?d00001 diff --git a/target/classes/CarsDTO.class b/target/classes/CarsDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..e7a07246a6de34294bcab8a8bd52c3ca016f517c GIT binary patch literal 2275 zcmb_cU2hvz5IxuS?mF9TzGzYc{V;7)>}}GJmK4%7fixejTPLP zDj~%G;h_&j!UZA058y{3&fHx)%WD0`%go&CIcH|io$=rQ{P7onMeNzIaeoApSP}C; z%&M3*F<*%J(#AR-=CNU6)8=_g%(j?EVjhbri+N(>DJm9rEbJ;|%9{%BRbF|oy@jUN zI$9{Vy8e;hSy9OCtUujSn2h~c>vn?H5q~pws+(IC=G1+!!{bJ^QhlzF-7k~Vd=RvP z?wZ2)#Td3v9J`9>{;!+TJ{#I-ANmSom7wMCo*p0gojvcM$(zYayWutWy-pzK=rY&+ zHaJljscd+ilg+)VeDx3di?T&wGmiYO2sBkJ#hUDYiGs!7LzOQ4Cu5*fUJ^p7BsWw` zE+fHAhFUY@B&;-@CYiKiF(E896;FvONk(2WqFM~2T8#R&7>2c2w0y|dDwfKGb=x6{ zf?aE$b{hV6Ac8rOCbwla99+T;2Ny8qU>X-4yf0=(%m-pV#6=5L2VdcyLYc_b9~)k$ z5F8d(3$urFg=6nKU&0fHe4u6&i`G%tXgAya_;t|Iw?8S2pG{`<;FaI#I+(>x2Op#8 zpd`i>b4$z|iWZ(Zc#azNirVLA@?jMw&WNJ-IU@>cPZ71Jj@na7?WrdHIB}P7nf3}#KNDxs z-*kV2a&PsJap!u-y7N8c+?iYthC5^QV7fDA57sZ5=PKa1JAIFpBf+W|VI? zhO4YGiwP8%@i=5>$Jcmb9o?cYP!3`Yye27}E7w zQ?{nNOoA)AxDzHt#g#m9M6fU*_!XJAWXiB>=qg}(fpHSd(MSPjli=A@Fh?o{oJ)dB zsbG#`3fM@3=TpHP;S{i$1TUt7Ir=GJD+yjo1<&Jl1YV=O^3bLpu;hC!^O^5!hUqYC zFf3*?ED8(wB#kSZIYn@yVhj7Wj3fG-) zbvK>MOmdaU^<)T_ERAq|n$8tl;BZ%V$hA9!OV&=fmT-?&{w(h3Gmv+=HSdsr!@Kz6 zJkw0!;^YTg_t{{GUa*=XW@&O{-24-EJ?p;1xmrC(=hW&3-T7MGq#Lc(ExNHq5C>kY-v#JbKTPNzb0%%#{d8T literal 0 HcmV?d00001 diff --git a/target/classes/ConnectionFactory.class b/target/classes/ConnectionFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..a0def2f826d3f4e3b1e960f57292c9173fb78eb9 GIT binary patch literal 981 zcmaJ=TTc@~7(LUL?o!Idg#zMj!CR@yf*2pbm>7f?7cX6C!i&jtJ88FRcXT>M_*eP_ zkwoA9QO0k!m2E<_4>LXIyPWSb`|J1j9{@J+tbi#jTUaR|gXIG5;+}>3HXhh`XrpY1 zRSOjhk8C_HU;SxLyY6gkaucaMFtPaoNh%uhFPB^ zViD>{#(O-}Qk@#zrqC(Ruuxtdl-K**@lpeMX2c1ZQ)BSK-#rP%CzFrNg+TUIDE1;# z$9x(&lv*=A7cqwt!(u4AUiZ`}gl(_gsE6Kb6&(v@!7E}N8w}U3Bw$!Eo?A)WmgjX$ zr!CpjTbrBf&%H|WqtPfSHG@6Cl}Zse@RXsHjNB-Wmd&t~uAO+&l||%I;JrLS_h#F@`RlcY!RLv z!8Z9&LnzTXPZ1v7jP9|@8Q8ZZ#R8rAgtW0p|BC|$O0-01oR)Qy7!&*vxy0sPAaitv z>^X8y-mx6}9OGZ#TwvnJDN^3apNZEj$(nD`ENO{}&{ylh2k@b!lPDgH zr`>Ou?>EdGPk#pheRN&4U33WEmx;ph?<6Gja?4daHwENT|-uCQ?Zn zYl7gO#fpn==8dc+wB^N06J!0U*=3GMe?pb8@GOgwcc*xgbI;i#h;=TDP+Og)I6QVq zkZ-F&G48!sBGl&JX&mTJV_Ek;Mzhy!GeViagy!vv+nYv)Mp1r`A8jkWmW& literal 0 HcmV?d00001 diff --git a/target/classes/DTO.class b/target/classes/DTO.class new file mode 100644 index 0000000000000000000000000000000000000000..a4d4cefc6eacc1645541273bcba34909db3a11e2 GIT binary patch literal 172 zcmX^0Z`VEs1_nb0ZgvJvb_Om+2G;b{63-My24)RSPeumL;LP;A#FEmYR7M63n-D9X zti-ZJ{hY+SbbbG%tkmQZYdcIKMh33n{L-T2RJY6=pgsR${J3Jp3VhIw*avSvNB&s zKTkK;;1E4ux6i(3PWyQ4>RsgZ*3~+9=KSU$gDb`lo)+nNojal9t?R_W{$xqm6fx}s zDiu5Dco`RamCV&zE7B#@ZCqqrxpPi;kg#`9@PVX0*3OfXE4lV{rmn2yI#!id)g~aT zxhqcdrh>Q57oJDGJPnKX#4x~|hv^G`Was53mZj#w{er1j0aI~uey(0sWluC6DT#W;f_KzNFoIvGKu}Cl^okJz87*RA6CKn3H2v&^FP4 z*}SvPFI&Mc9KTe2uHOQl?_t}v>{^#tE6%aqbJC)#C7V8oa&ax$)TgDkt3{vf>!jcvw z<(GA2_7?(Us2GUNNQ|k1qWpr?qLR$i;@~p>v);O1I-b6P9;-q=`099{eH_H+rxW<$ zw0^LGS%87bMkYmN*6R-hSe2Qbz1MBJvgpy7KQ__Mw#;`E?2k7j@c$QB_hr$aOHAiQ zZa?`Gvv<{*rYC=Ba0@T*>dEG(1MsSub?8YBs+0n{$OMhVaA=$fj$8O z0fx7ZAQ~yx!?a<~_aMa}u%uBPNW!%tl>+!I24zhM5McQK{}_-7HvyJWVb){MstC=W zF*Re!xVTLNWnBmWImHl|715l6VHzSM!%W4Vm0{*CX)GtfRA|OVgdX4#c$_6rr9SEhF7#N-bO=4gG03Ddr&HD5Xb)~EhL0MOQ9e)1w|>>P!I$`v|OsyUJyFW@G+E74u%Ai6o)tPb@T%; zGUEgIP>y?=LW}azc6u(G-TnV|&q;s%{_zt)5=9kpjLVo%Az@q$lQO1MOhZ>NqadkZ zR>7Qt=PH^oFNOsbFR&-8p0XW?5j$XNFZV3x^Ed!ucN$>d|T99&>|f$9K71UjAPean}^z39>SDB^s$} zT2y%b)Ki{kx>UGkR2Q3{D~3fEW3&-FXig(z%_7uf(Xr}XiQR}b-jRkL@0@$Sc|vc5 zQz5~4P%?M)E$VS_>S|j{({-3{tRE4gLxRVY1C!L)yDUC_53pKsa}eroHeL znqzWIiM7PkSnDOU{Nx4Nrs#Kt_PS0t{a*lWl&77(5sVO;PWgrIc#ylMs~~}gctrZ` zc#I(`NFr~I*27fN6Y>|#BQ!HSy(RoaULmp#-Vk0RLZs2$#05HX-w`9K&cAW`2&W%W iDmPBW4v?(C8442J;>2q>QNn+QQ4+cfk)Rj}V}AgeizvVV literal 0 HcmV?d00001