From 6b4f55d752ceb0d688cd290f5e11f2e6ec476375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Cort=C3=A9s?= Date: Mon, 1 Jul 2019 19:28:11 -0400 Subject: [PATCH] Creando orden de compra y aceptandolas Esta por terminar la funcionalidad --- .idea/misc.xml | 2 +- COSAS_POR_ARREGLAR.md | 99 ++++ biblioteca.vpp | Bin 1011712 -> 1249280 bytes create.sql | 20 + mysql | 504 ++++++++++++++++++ .../controllers/LaunchController.java | 39 +- .../comprar/ComprarComprarController.java | 48 -- .../comprar/ComprarSearchController.java | 92 ---- .../comprar/ComprarSeleccionarController.java | 133 ----- .../OrdenCompraAceptarController.java | 59 ++ .../OrdenCompraCrearController.java | 129 +++++ .../OrdenCompraSearchController.java | 172 ++++++ .../OrdenCompraViewController.java | 45 ++ .../framework/BaseTableModel.java | 39 +- .../framework/ChangeListener.java | 24 + .../xyz/danielcortes/framework/PanelName.java | 8 +- .../java/xyz/danielcortes/models/Libro.java | 17 + .../xyz/danielcortes/models/OrdenCompra.java | 96 ++++ .../repository/OrdenCompraRepository.java | 19 + .../validator/OrdenCompraValidator.java | 50 ++ .../views/comprar/ComprarComprarPanel.form | 186 ------- .../views/comprar/ComprarComprarPanel.java | 200 ------- .../orden_compra/OrdenCompraAceptarPanel.form | 158 ++++++ .../orden_compra/OrdenCompraAceptarPanel.java | 167 ++++++ .../OrdenCompraCrearPanel.form} | 122 +++-- .../OrdenCompraCrearPanel.java} | 130 +++-- .../OrdenCompraSearchPanel.form} | 42 +- .../OrdenCompraSearchPanel.java} | 75 ++- .../orden_compra/OrdenCompraViewPanel.form | 81 +++ .../orden_compra/OrdenCompraViewPanel.java | 128 +++++ 30 files changed, 2043 insertions(+), 841 deletions(-) create mode 100644 COSAS_POR_ARREGLAR.md create mode 100644 mysql delete mode 100644 src/main/java/xyz/danielcortes/controllers/comprar/ComprarComprarController.java delete mode 100644 src/main/java/xyz/danielcortes/controllers/comprar/ComprarSearchController.java delete mode 100644 src/main/java/xyz/danielcortes/controllers/comprar/ComprarSeleccionarController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraAceptarController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraCrearController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraSearchController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraViewController.java create mode 100644 src/main/java/xyz/danielcortes/framework/ChangeListener.java create mode 100644 src/main/java/xyz/danielcortes/models/OrdenCompra.java create mode 100644 src/main/java/xyz/danielcortes/repository/OrdenCompraRepository.java create mode 100644 src/main/java/xyz/danielcortes/validator/OrdenCompraValidator.java delete mode 100644 src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.form delete mode 100644 src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.java create mode 100644 src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.form create mode 100644 src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.java rename src/main/java/xyz/danielcortes/views/{comprar/ComprarSeleccionarPanel.form => orden_compra/OrdenCompraCrearPanel.form} (60%) rename src/main/java/xyz/danielcortes/views/{comprar/ComprarSeleccionarPanel.java => orden_compra/OrdenCompraCrearPanel.java} (62%) rename src/main/java/xyz/danielcortes/views/{comprar/ComprarSearchPanel.form => orden_compra/OrdenCompraSearchPanel.form} (67%) rename src/main/java/xyz/danielcortes/views/{comprar/ComprarSearchPanel.java => orden_compra/OrdenCompraSearchPanel.java} (67%) create mode 100644 src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.form create mode 100644 src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.java diff --git a/.idea/misc.xml b/.idea/misc.xml index a90d910..56865e7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -16,7 +16,7 @@ - + \ No newline at end of file diff --git a/COSAS_POR_ARREGLAR.md b/COSAS_POR_ARREGLAR.md new file mode 100644 index 0000000..b679730 --- /dev/null +++ b/COSAS_POR_ARREGLAR.md @@ -0,0 +1,99 @@ +#Cosas que quiero arreglar, pero no podre + +## Validaciones + +Las validaciones encuentro que me quedaron bien, sin embargo creo que pueden ser mucho mejor, +el problema es que no encontre ninguna libreria que no trabaje con web o con objetos ya creados. + +Mi idea de una buena libreria de validaciones es algo similar a la que utiliza laravel, +se pasa un objeto y una serie de reglas a aplicar a ese objeto, si alguna de las reglas falla, la +validacion completa fallara. + +Estuve jugando un poco con la idea de hacer algo similar, pero no logre hacer que las reglas fueran +universales, para poder arreglar esto puede que me hubiese tomado mucho tiempo asi que decidi volver a +como estan en este momento. + +Basicamente mi idea de una validacion tendria que tener un codigo como este: + +``` +Validation validacion = new Validation( + object.getA() => List.of(Rule.notNull(), Rule.string(), Rule.minLength(5)), + object.getB() => List.of(Rule.date) +).validate(); + +if(validation.hasError()) { + validation.showErrorDialog(); + return; +} +``` + +Sin embargo no sabria como hacer un map al momento de inicializar un objeto (porque el => no existe en java), +podria crearlo y poblarlo antes, pero no quiero escribir tanto codigo y siento que quedaria sucio +dentro de un controlador. + +# BaseTableModel + +Me gusta esa parte de mi codigo, me deja bastante facil el crear un tabla bonita a la que solo le paso +un objeto y con las reglas que le asigno al inicializar los muestra correctamente, me ahorro el estar +transformando a strings en el controlador y cosas asi. + +Sin embargo creo que podria ser mas limpio + +``` +this.model = new BaseTableModel<>( + new String[]{"Distribuidor", "Nº Libros", "Estado", "Fecha Emision"}, + (row, rowIndex, colIndex) -> { + switch (colIndex) { + case 0: + return row.get(rowIndex).getDistribuidor().getRut(); + case 1: + return row.get(rowIndex).getLibros().size(); + case 2: + return row.get(rowIndex).getEstado(); + case 3: + return row.get(rowIndex).getInsertedAt(); + default: + return null; + } + } +); +``` + +Como se ve, cada vez tengo que obtener el objeto y luego obtener la parte que quiero mostrar. +Seguramente es facil dejarlo mas bonito, pero tendria que cambiar todas las vistas que usan una tabla, +me tomaria un rato quizas un poco largo y no quiero perderlo. + +## LaunchController + +Me gusta como queda, pero siento que igual se podria hacer algo mejor. + +Seria perfecto que cada vista se pudiera autoinsertar de alguna forma en ese controlador, en vez de estar +llamando a cada una y creandola manualmente + +Quizas puede hacerse de alguna forma con funciones estaticas? o alguna especie de singleton? como todos +los controladores existen solo una vez dentro de la aplicacion quizas es viable +Cosa que se pueda hacer lo siguiente + +``` + class Controller { + private View view; + + // Constructor estatico + { + LaunchController.add(new Controller(new View())); + } + + public Controller(View view) { + this.view = view; + } + + public void goToView2() { + LaunchController.show(PanelName.View2); + } + } +``` + +No estoy seguro si seria viable, pero pareciera ser una buena solucion, ahora no la puedo implementar porque +significaria crear toda la arquitectura de la app desde cero. + +No hay tiempo :c \ No newline at end of file diff --git a/biblioteca.vpp b/biblioteca.vpp index 08a04e8d2e5e77c872ea98147a140715e4e2ad00..a78525fbb9dd236cbdd14c8ea4e248dc77b906fd 100644 GIT binary patch delta 150999 zcmeFZXIK~*-5(Fg;89|VolSojJoO90FBt^11%AlZ#ii#Off&z+2QV=m? z0#QMNC<2NCa;wL4jtu&K_kF(S{=9@WHLI(utGlYJcCEd;QwKMs9<$mj$bJ=q2)Dt% zB?Q6o5Ck3GC#M2mt@5Zq$uu%_f=uX;ytuG1EKHyFI;3V@-XWM1f)H)i|Hyz-=4s9( z#k`l~mYZ|}q+obqHPn30C8U`@wD=9Q$6VZ7o3)8RQj zg#4MK4&=BBvw^eu%m|8y(Fq8hKqqS0kKIE#xLtgeeVlwejTH3t^=<4!jgguOUOswy z2gDQPC8Us;#ERD<7?OmW489(;0zd}MhCHxm|i;kf8YS<*3 zQC*PPmY!-io_%%MvI<9 zPod@D`W=RAx@8~3Twu$|)nI>nad7NBVUSZssOIWAYd$Uv;(b;Lp-CS367)!BRd7afhKy&gbE@?2Ae&-LVO8Cz*w-OQh+cC zkMa%l53}@5M3(@oO$r<3p_u@w^`tlNB?KMNAgE?#P67fqKnDBAxM|*kgbbb$a{?)z zKQdZ?+NrK&(OJNX@S_?q{P8dQn1VyDSzcQWQ2m!H3n3VTI*JOQ8i-v~c#tpYM*@3| zvPnJ+8&nK(>yZ?Ha*H5>kP0^{j}VDY%X)T#Hvt1%_(?4pT;Q;< zg#ZB=hpd0?Obe1KWKlPmn}!P{DVa$A7Mch_q^8^=5Ju2x(A@nf3p=H)i~>FVqdY^A znrT~J0)l=6+a^&S8U#fl2E1n@Xb%kfgb(O-JvD4DO(=ec8#N?WfO`+N7TX1jABXLM15`y?6UdVRD1^)TJ`27ygz@OkT_&q!b zzkr{>eQ-D20pEg~;Ci?Qz5t(w%i$9EAY2G%!x``nI3A9KgJEA#o&SDF!pE#J^dm$I zIiA1$R*}lY$u(Os8NP1ycdi;6>8x#9;>xDL5qKkc2}b4hcBK zh#;4$(M7;SdQRFam&2H~{xB09!)=IEDbQ3kF~r1i&N^fPMe~9e)5CegKqx z0m%CRknsi};RQg%69B&l04{d|3c+qTY$xymbj6d~aM+5&793n^lHEe_ksc!8U!8Dp zzyYn9cV`gd;e;LV(V7N!KsF!_a1VSQz6J-A*iyJ^6y&5}j2BgbH-*QB`D~5~jIfP} z2@DTYNC*v)6h`&nAkR2Yckgf?-{{0JZ^ghcAKwJuD158E=7oh|aabB&2P?s9@OoGeHiFGz8`uGMfw#k6us<9E`br#}45z_a za6U|e55Z+{1$+*!g6ly4YK6PtUidNSb#LGi_#-?Ge}|V48e|p1j_@MFhy)^wC?aZz zwgRG$n1Xr30oj7MBfelZiA3U&9Y_X}jT9mWkrJdFIgMOEYLEt`4Y@&*Sx_X|F3|t; zPm7=sDLrkRnVSZM5CRVcc}Yp>rp%I*v@`|RkOtG0FiMh0L1hZ6Qc#_O8Whx`pbiD~ zC}>DQ6AGGB(2|1I6wIWc9q0iG1bcu{giQcL2o3=K2%7?kAP3U90V_bOayO$ zv;-e~;364hRLbCUDjU=VfeUK~uHRAQE;5Ho!8GuC)C%2$-Uf|u4i1O9NbJYT$@eP| zb!~Nph%kQ%RWuZii}3k1c0~txM)*c6uAKc9;v%9IeSBj)14E+m-m{wQUV*6AgzYLq zU;z@%o^|+#(jGyQ^`7I-N|2m_bE1)7$iI`NmkG)WD?vO;UM5<<=T@}{Li%6F<23jv z$ZK!0Y?O|%CZyJwWVa$U41`&f2U*JuP8Py#28iH{&ZA$^DRhFwCgu#Y)rDFyoJ4?` zfndN~KzyS?7RyKghPb(45Dvy!EDWR+LIB7G0gwp<`HKC)26iy+5%|G{C2)glOyB~S zo51M-fCDrF5(3%--2)nkKo8oAKnog=fVU$7bpn8ZMuwk&_C}{bGh^sy&>7HApkJU9 zwgAR$0E}4!7y;%8I%ok3R51ssFf#zIrT|*OY=~Yr0&v^_K*2@;rMO{oXaj&~9dNQV ziXi3A2H-XwfS2G3fLj6__!5j?5d^vnAtC@E66dkw%;`Z{k<9WCqz|ph)FE{g<*iaD zYN=?bYHDhztC03Z^O0GOqpQeIZJ5N#k>PZFY%8Zm@suADj}#6 zB_WKU>yiNQl#P4dT zN|n6Tw(eoNFqJTzd)&PCc5O+BP0gt9&PAGtRI8AF$1Mj1ud$7BjaM3YX=x^0E=32Q zE{%K=4ZHDUe0Fi9923k1lqw-kA5Do>*EKUYehcf6D5t zfz_2^)8l$NXUf9Eu%)Tf*Dt-^j_pjwrbk;Ee~5~ThKYn-8rU#DHvCGXH!NblRditc zj&DOR!f!189KcfMC(ac*i(Xu`V_lj%`FX_u#`oDvjhc=KmhydU^409e@STg3lOLTw zT?*g1bLp7!ZvF>}^W#0U13$HeUA3}d7}4FQu~7G z(dm()eM|L>X^xCv61{&0mwBK3`Ry6j6P;J)9ran%Dco#3{SP6PZyjaco_1>2?y$u5?kCw_1rJd5TxO2V5p`noj^?DTy-3wTk-a!S-rmY2g*?9cmzB?mVBC(IryJwc@mJW|F>G{7K z)C)QOSfFcjve#sxp8u@{?1SyDeZ5$RJ81UcOoIQqYCvhwVsr~w4}C^TQ33c4dUl%E_<2LC28uq2CeS%BNeYiPWSO3r;#xlSUXb&f3{6uT*Ff z6HYp-P>}(va5Bn;inL(F$v8`;&A)AgNFxTEw2zDb-OTnOKJ+*lsX;|RXOyqyRkHLIRz!0gobqdOtC#^LEjCJfy2EYNKT{5?c2 zBKMIolz@t$n&>t(0^NlkM(fd+|M$O$espxWHw!8b>$9N}zrF=};wuco&R>KP*!~Z* zV`Y|MWrv31IqB=KuyFH4(9r0LCMA4qSYqIy(#)nbZs}Qc-1zT}j|t7F7;h zQ=}piRuYLT30xV&cd_}e9g|mPNm)tkSV`<$Nnj+acdJP)@Azv@z2k+waf46dS1Mf?fa;(Ys0-?c#-QowUi2t> z9=(n}Ku1weG#)KNPomXm7y1YtK*!Kol%n%=44c)wdEW<9zT6!VfUWTqY=dLXr4IzS zdIDy0hh?EPP#OgOilB4QP3SQ+1}(u{K(j~%D#ls(2K)#fg@1x-$>1w)BoHib4SiZTQk5AuY(ZIM z8GgrrT@D$nw2}$<73BGY1vkZC*i@ie@z=cgE`?BZCDO-518MvU3&B?)L>XL3S0oai zMs_15@D=1T{2HML2EH)z9PT2CEeP6V0GmP)dW#wXd%+hihUU-~SOdC;jsqKH0DS@q z`ei``hBz65+W#ZphC5O$2p7$Gd;k9=%y8v(z@xtBE@9zi;G=OMo~ehD4kK|9WQ2w~C_>oNfgEW3$P<0!6@@E!iu0V>RVy^1HY*LTdN-=)S z<9(K``?aho*2f?H0595-x@ImELt&-zPEL!amZWPD{GEO$oqs1?ekZs5PHz33-1a-^`a8M( zchc>5(*1YR<5yC{6Sx{Yf74#Slit6RK2!p}D5{T;*~zp5qz|LFSdm7E^_R!O7QF+# zB)N@Ckk*WIkSxJJ3jVK;alk)GGJxGa&OtMWe1SMfyT?UH-D8~CS1@WVP`NRtQ5lGX zikbO?0g5H`j4IDp)M~|E-_VE^%-kQ$cMPqE)Ts*kfgV_~+dRlaU7>|Pm_<+_Gpcfa z0*1QeCBR57&qILNNvFqI5p=dz2EHI9vvT=BaD`t$JS$fPge`TCjbLTi01*Zosm)6> zLKrFu@vK~15&Up=J=WS1GV4Ajz%!B@ zE0>7`|GMcTFs}lFssVS39Lg&IE+E9ZQlRuE+xEhj;o#c)aHbeL)ecqgdXBqxn3lA)g7LKgIL%Ea6{u0a5nKnt*`=Ib&vxX6>!H@T|^ZICld`L zGIBuO;_;>`HY$t|g`eUdOAyPt4j3`yK>lYRYuyAdBEp0ah`2wIBrRq@=7@k5Ys8L4 zAQ&314&(=t8j$^#R6z<-0RSrlI6wrDp#(N~0eO&cPys+7ko^cna)A4>4x|d#f|RE$ zfbTNktM?j^nwJKta47)SBmp!?0H|LLpiUe>tr&o-q5!Ul0I0!)0agnEs1gKl88ido z5s+AxdQOmXV+W~YtN;>N0F*HS*trV80bul?2Z09|Ey9(| zV&DZvx6uGN0yIsu8wD$hM+hUdAL56A3EK>jSIHo`GQLz-I@*R145D8Xw?g~gH z1HRsQhmHX4hXKBWQ~~`)1gJcvz}3c#WC2xY3($Vf!>fT7)Q$=OJtzq(1PW0U@)`aA z#(txx%;x{U0r#IR8xZwB*+BB}U#*?kC?~VuHjL&kmE;dQg<={1s~S+5P=DA!Bu^s$hQ?-2S5 zeFi3>i*VhYBM1uu#!BQR81CRDFtouxfddA91%@_wkO7QfckrRDt?ow|!b(^t2>C!d z$O~i?T7*)N1#}JC2bQ0er~}jq>mp@{H?jsE2R@u=D32^!fhfxI{11L%ZdOzR4vz|r z@C@_C{cv0qM;=CTjHaQR$%1LUWGdW}z%BKXT zEGQbb0fgmd7%a1mSzABWGt7vU>prcAVz45y*IWX4^n z2{~^Us#M3g8=V7Y23zJf^0h@eCk0426Bn+evw-x3NM!-N2~o=e8WWhXBifi4&3{(_AJPagL$;(KBc>5Lih6Y8>QAIXWrwrBG;jm~ZHC0_Xe4PHP+(a=1}oKC5aR$ra(}RR9eC;{*U<9q zCDXoS5N0pj1hW8JL=ciXss!;92&{E#Rty~|rv^BWMqKz<3+@eQFLVlOB-1z2%F#m) zpbuce^dWCdAPA6MGijN~0gbfmaK^6ypLEIxd2|ge?=OP(*N4@w4;#uy9cL5m#{wpB zM}n9eNeEmFNpRotp)6V6$SQe3c~Bv!z>1YzmdoVI0rK3=@__&2O#n~F;);cbWkDghjr0a%**9(&xa$_t67JK^WFQV6FkgEmKbdU*zU`h-WV+`NAEuWbdY zd#v$t1R-Kc2wu)go%^3iuaH2msBri2C?DT25DpS577^vSGUxi$%QBILxfu-ER?aHq zNO1-~wv`qQ?)Q~tTdBH}J$o1g$x53TxPEzzRg|^Vm5F3~T_$cea~CSveJk1CiC*{5 zqowK4^RaERqsr?^p8CS*&q#4XgCe!m$b-IgW^7xjb9s@|bm`^E;}Q()+`di;xF`Xd z!k5w%2n~eLkb7mB`RgP$(+$Dw83~*5?j5=2JqKn{Rtl8eZ7q!W3J3?ZMuXv~1}pc1GOx&bJb&ZrL>iS9&mf#%g;0J)$O5cunXhM;dii4}*{;aKu%`LO>&al@iG0IRoh9WR6^L)0xpn~d!;%+ zQFir%mK$-w?&ioRXy;1BKpfc(asSdIuzz*U@EBf@b@NJ1Km)l9aj%pQ)`OhfD|G@1 z3Q4s>|HpA^8X34uvkr*yMnfUJfAj$CA0<1|ZZ%-JS5ESx6q35oUp`jL7{}#pAL53$ zs8ukP*6BwH@U_;bQmg&#ftWUT&evqu`n!JZKJ%2|<#;=aXxxo`hk zxV_8rJ{w|TNvX!)9LAeesG2e|7|w;bH&HDEq8(N6-8XNgT8t=TUhn{z)M1Mg)$&kZ2bCp2Ygg)F!XQqWdnDGl+Yoe58yQ>ZeaN7&uu|$p77a-~#p!Fz_S(_WQ&-#N+!1YG^E9rkZS{kS6xa z{clk&xRJt-=z>5#;4ioX{0DZxrw{`?3B@Gc5907kV0wIp2|!NgAT^E~{b_^HlIta5 zQ!)sZS0|TC!6(R)xJe=bOcGKTklZWAIg3h}8|YTiCTDW7;^B76b+b1a8DT%V_|0th+K~2uOSSo5ryYnn5tn56eEB|(oc7|EQD zAd^((ba}H6QK(;lMkDD3m3nJ!pI z2O{TTj;nYLj+BY|Xsy3B_I)}{$iG^&L0-&*e8#q|SFrYFyKnxX*k@`NS7k+K6}5c* z!geA}cVM5j_QYk&$+pS&ezYNN#owc=6Ly|{_+W5+EXeq^f@0RCvu9-@=XHo)wc)l2 z2_=-GyylJ(E(~W)u4nY??p#W2+8x(AW%8pCBcH8wRdw5^+iwA{kJia1F&X~4+pqcL8>efk{n(vzyQ6DCI z{@x6BtjCbd>T4j{pOtab@T%pTwu`=g8M^DxjTdfR5_$=waF# z(Gs+L@=c7OmVY%`-*cE%LB&<9Pm$l%|JrPCF-ClA??%q)Th(=0wc)+q)eW`#_`LOc zx1Dy@>3uRVwteT+i*auMHg6-5GYpC&vq4s$czC>rCG73<-5od2sQlE@TSB&BuP*Pr zekCSVk2dk#nGXw$yktI`gSFMw55A>EE;)WW%1axle`s)o18SKz6n`Xv#E5Iz@m<}2 zF}Xh(Yvri(ppRfaSq(jvI_==#V5qfSg64vZ9WlmicZG55{+0xL4~aRx?dooI>@1ny zM&*d)g34@pWv=;$&)ni-4(Nl?{rhb=v9dR_@17@AattRT1@okw>g^IiWUS` z+UqoICSEsBCD0LSU0I&NbPTk~S+2jv3eqJxnmS%Lx=|PddILN}6Wu8GU>zgR`nioa z8^z34bsuxz)Vc6^)o!xI?ust?B@5GGtVX|-qpdwzYk$iSbjjH}sV|^mR$N?L`}!Tb zJykRuBDv_sybSLhLxCwe;im|0@1o6F?;L+&CTi;LvU=D3UdF=NIM*3(W=P6@W7XG3 z_v*BpHRZ#c`VFLO*Sgf79DOqo?RT)Dim!UDW>|=sHLkZ z@bkSx9BXd`C6uNfd?X|oFtkg{RN^EdaSyt&{fNH)CCO)4e-ruR#6sAitd5eQorho# zqa8bTbl%ppaxE-F{S+Is`_@}WA0JO>IU%H1)9|pgu7+ z0;B09v|r}fnTefW;=T=BN>vm2`B^Roi%i^Gzt{qu*RhM<`beXct+!<&CE|$o=`hVPWVNj~q=$ zpbggXH1bD+x5(X1(LLko1Et(UyE2b5+NRKTwyP~~(& z$8cW6s)@M*NpL$s6sfs)chz+Fw*cCuOFo;=kY{dKe8H^O_AuX7^v;_tc+nYtdalB8 zG(GxGjbYSmebenw2DgYOV%h21sgjH`#l(@YZD_3jH^as6>YOJ6=kEqSi-^+TQgdt_ zR*}CSarJI}_(>2>3w@X$Y#7z9yP0;Q^!SVG7e%E;9B3TZ2ps!qpgocNmS4r2H*d?( zlTot`8)T+uF;~NCy?(uqJ6!!}#>1*&ecJb*|5j}n9Zqv^RnU-oIHd9+yIZ9$tRU^^ zDK3|7gQk|xp4xKVXY|;%ohjy%MVfQj7SG}Q3kiNAb31d&InP1r#wLfkj9mKOg*frN z&%I+zs-ktAxz%ypeCx)f@UR3oz5SW|mwHQ8r%$zR?x;gCSM*|H_tymG(T^Xd8MWKn zkDF)8)T3s{Q@tFYo+_NGZA@{O%H-u#{PM-K^Q9ZpA!ezV9pAQf5KB`Z$*()s=r8!F zG@SVQPVDu&Hh4GIwB#RH(-5ciZc;w$j(_|{-*EK6zG<1!=LF*{_0+JDpd=>kqQ3n^ zR&=g7G0!y|Yp+~9ltCMopg=32I^I*C^8NfF@#ywEkxdL1j(3t>XfEd_y#D&kMf1o$ z*q^>H^@W$$;GsvG>-Unp{W?pDwmx?zuLKyhi=4i+{W?$g5i-3FmXeb0w09loluUb# zU@$NEW{rt?w=zD9dm}cLpnWVa;nvx=%zBmnVU3Y7pRhNI_hwbXu+h(89C*7+^ojOp z(sK5;MVeJZyejm ztTyNvD(HE4pC(-j2w9VHp6x|UiReEDe^jpUlC7w#hU$N%PR2c_pVgFhc zLzOlc$03aehDX}5eXmdQ$r}Em zz5Di6?UWgn-uZSPo#?hbb!~gUdnyG#;8dEo*G_t2#D9HXGVMNpT*0Jqx-uP85*nbgdy({I$OJ~kyC-eT0WkJYRg*!$CF-IFFhnjB}DE5-O zsxI%?(fU;{-Z3}Ir`7Vv!7ROxBTbbjiMQQ%?b_8$x`%qrb5y~k4qC!J$>Uyz5& zYQu->vqg@x2&Jx;z${3kn|!Q%c@j?3l3D`AGs%+r{n<%xo8QYHw2e9|iOPO%>YU#x zI?hSQ;vf_l#6q{eSljrTu5Mup(K6tomat%G>0;t`zsstjXH)u-ADS0qwcPGs6Ymbu zvo#DV@Z~m=X}{Z=mpnc;cHE_pAegW7k=H=7!O*j`l>hvRQ7cSzjr-x|ZfSAaXoOGY z+w5$E@`kxA{%F$_9UaTY=?34sRyxtE7_i$<9_>>a)(#4RQ{B0_xf|rJeEZH7{^FjB zYyOFWh{6h&)MGw%5jwj?G+s4qeI#}2#XA{t`0FoLHLmJtpwXF*P2p8_8w(ym##jSijev})v8z_kMysdojpSvbL>A&>e{U~ z@6C;Rcb$eNbgIUmF6!)uZ@>WbnW=RVZ_5?9q1Sky#B=&)Pv+sCud zjM(|Si_N?HZFlC)pZD!PtZvV(TF6~5od4##i`%8A52c#hj~V{Z$Br<7PEG7-^>m#l zFK*Quo&e*(dxb;dcM@z4Z|IV1Z`D*+SAU`y((>TNmASzQ+aX(b(m8=#&YcRmUB^~G zO>oqk$;w)9M!&b5n0JQZs$6erZS&3UJ^PBj^gPM?u8`)=wMuQW>QiAwyUQik^3jIH zs~NKE{koHbY4iJwbX2e;{om=jn&gZY%D`8Q?lGkGm4u&$_ z74}xpI$g=MU*o-@aX8wOcA{}Ef_b~U{=I0M6X?NL*J5)OOrI4??abh|em>^)X0XU* z>`;FQsa!zi(o;q&+Dr>$P7}*EPR~=>nb>VckMr><`FEL~X4HsW9sgSG{!GxO^R_c%-*T$fASx!B6$C z19jRr_1%ulIbrCQ;Fc*r6Tixa+r7}^sMd*7^lJ-4v(6qhIrA}iH+S+A`$V;VlitS3 z1oY9-K=rBTcoVcTWe*G{tK63;3+qumbbl?6^?^O@jnN}Ea%+MUu|>pXB4qzrZ)1{n zc}p>Nnt$eN!qYyRBbrT}#Z!qf>OGTt_(hvN(r2o-?Wx>);mv`$>%3^#$eqsjsU0%h zE(=ERu1#7c+?HPi?_|RtcYSnbDS0(4|Nc)2b1(jFI z#=^Y1bAI=WH7-hy+()ov_fKi}Z0{Y)h9@jQ_9xAdqL$GQEq>25+?2i6{T?#q|;Y&xOO zqZcbHV;6Ke1RQPazr9Xz%VO^?etIQb$5N%r*)p#Y#n|T?Z%vy^De525fe%%$JB_4|puYcI(RG%#TXl61^ z*jc;MUm@^9Rhx>07PgHu z;6j~#Wpdc+b%(F)$}+6Ht}T>Za0-GS1 z&7L+6@opu-9dE_#9cv)Ba58gk)WAg%XALS%$D5*y1qD$lq<$2w&LxD3bW$dJg79S?MZA>1 zhc>UH1aSN{V)&0p402T*h#015Pk)V?_#sKhnU!x}e8X*1mP>R1sa{Lj{ z{Xa!b{59zMFHsZVshmHd)&g!or<9`jTp$gBiSBtXMz?)*UbV_|O@mUIH1B}aYOJKQOhM+@JaXC=BR%|% z8hMK_%C~jjmU&VYcJ|7#yy<$$$j3BpMZ$-76uG|ge~763s7hHoHki+uU0x`2!jmo- zz8cnTmUCUszhrPza=ZUPS0*!-$NNI%!}Rczk>rw(Zv!hdGTJ(UVxx3waQ)(O;_VOO zw3iF{6x4Zz3ktJT4jqaR*A^_;wB?>K4PVs>nC2 z_a=;^pxnRqK|rQbc6`4U)2^I$*T;3^hJ9wCzFqsa>Rt*+FWyB=C<*eLiN)L&@)mvO zE#ILZqD#jTbo&%5k9=%BZtfXSzNNvbGPt1WhU+(18`4pQ3;fd&w>CvLcWT&h8-6@1 z_RN%ax2eGXfG~mgWIwAbMLiy6g%g8;u3hJ5a>KS><2o!MQ8{(o-;Xx+HD4}|EhnnS z#cS$oeDr9HEMHArM}aWArncZGtk|oM;JYA4@=)IBvx~FAM1tRJfp%vH-`KMU4!8Jp zc3ev-u9`}TeplYxt2V$8xs`OLklUI^dwzf?SGxYAY7hT}$PvRSLOaeZ2G z^5o~rBUM9f61)g8r+lxJcQe+#cv0)kcTttX>f+1|8Qk*N`ij>t`m!$8EKXuyj~YuK zCR~Qabor(})CLH3_5}^Rxn`#F>F&-CBPO=Gp^rvNW-l;7S9e#q3Z2zDav&yu>DGXB zozKpak%7*^y#vz3nz^OGDrC=+c1fVuw_@S#{^finzUi^3ljc<17sp12=)H6K&ePMg zDeNOsM<&^}`3uL1^74Kf$<--b#3th%8(FrMbJIK#+mAFg z?I_(XXq6*>?9|6&8S=-X4g|u+W}OQQ3-=km*}9CE30RLTe&6rX?|Bv#u3XpF4V1R$ z9Gskygisxgg2I84_@hbAr96+THZIg zdL}(+JCi~L#pbV7-4M|xza+*_#XC1g+{%%zzsI;nL1nltC&>p0PBb1{2IOW`Z%Rsd zt&_C(ST}c^;lXn=m%|^cTpxMT7~-|d?2;=X);uGZItVmqCm3Y8&RucJ3#jXUMC9i{Ofr8*Y8G%MCKr#m5w(;V4YeK-CY#TOrLx)psflnh{O`+ECm-A+%8ScHudof z@34M})touwF5~ZTjJSr*Psr1|)a+8{It7)HrqNGhSWn`$=@M~~a>WF#q$Yt8&iHI$ zmG1Vuy+&!Up}L=?^KQrb-Z)HC9bdY1wJBPW?e87VV?)~wGZ*i!z6hWa0!Z7~kK z`*&D|UE@-Syu-zRrg>bcUw`I{w9-#iB5~+R&#B0oIkZSr$KB*y<_PO(Kx5vGgFRob zJ~nCcE5C3s(XM|fneT4@%w&#dd$+Hf>Xn%KyyQ!ZhQy zuC5aT$DW;Q1tKaB=x6A=>7Npg_e5A!n9KQ$m%*{WEVSYISIjvQ zd#JtP(^@9T^mg%<;+AW}O7GjR4IAxDsz_&{pGp)MSsx>95_*DocPQ*m|I3MxnRGez zrwO`~qX%nLJKCHImSz*SNe7!9zlngJoa*acTTv<>buxcTrIvf8tY{fc%PX~ao1!JW zy3cEgVk!Q%?>T3I;Q}nWuou6G!#(R&(%Y;tB8W;G$ z-S^c(lUyT*q@yYr2jAGvV~QFTm0zRA+lzC~*Y0`n$Z$xvbhXr2;>j`jq`m|DbFu6V zDyX?&UZ*fBm{+@B+x%|6NX@DqkM58sw9}e1@S4_q;<`%?y=$MUt>MU(KK<4I=F}_M z`_;spJ5aM)lAqwU;dc?N<2?b=w7E_EFBTT9lT^Yky1e949;E>RT<};OjTN2-;eGIU9gP{D-U8ASbu>nJItQdb*3oRl z)8OfTc(RU02T$t(vlgnO(FAE+`v$H<{fTI{x4!pOY<;fH`S*A}bscP!8nn?NE}a3d zyb+7HumGdNo`+psm-g%uc{e>e8lkj0-K}(}`RKD}ui1&i3$M6C1MKEr<{xi*ENyEp zkV4xrIKifBA&req-&NZ2dcrKF$>#L*Et4IuHQSn*DvmOlWDs)`11?;~HppFm-;!Nx zH{6n~?#*|ne{KuEw;!>$QBE~E_0t9R`QY6uy(!9C-_;l0GrPOby_>8S7fX#|C5{QM za~Am4mzYtsDf-Eo1BVU0d0rTYzG3RRCwbKC%gc{RF3}MxAv%wZ>aqq8VO%cBCofz$ zka+S!PlAHfd*jy*Q|~9@8CO|jjePF+ex}}jXrQ(2mYx^Q{m`OEg|>2s)dHVzm*(k2 zKj=Q!EO|bn>}`KX0l$LxWI^_KzTS^Y#9{Y!NxQorUUS3DK&rN|L_@RD zWv9n0mb{LLtqzeR(q^w+Jwn(lD%YiQ(>;A?x-*n7KshP#Wc240celb#C)m|7KJF`y z_8ZQ(?6D?$EfDh)51<{)Uyt8M?yEd}%_NtZx3SMC(9WMQ-TiDTK9f&AZt2Z-+6^kN z9p|pE8o&0|FNRey0(zG4_JeM-Y~^Io3-K!Z%I{6D7ejWuxO*hYzIU>&(0z#c(SyMQ zBd>4hOz+rie5$|uAm-WW#LOL`IG~1QsaU4JG&s{Yv_6@qW>a@#rjbt**2qCS8_o^zF%y9Z=5=vG_2mFmrMJ^`OX)(L=hD%{GrJ4BBjSgsV&k zt=^RE9j`oXd6eOz*4}YPmagd{!^#0a(vI1EAItV!+k9ruyzgit?d$#-+cWh2NNiuv z<#m;-zDkOosBV&db(t8Y5i^2q-~F2VX=PrO+Er&YKkgH&x{C*%&*k^oEp49K7rA(K zOwsylW&3%rM_xJZ>}vOB+4JuoSm0{3`&r)SpX+PUevZdpK( z2}1N;n4B0R1Hyuy5Mq#8h-c-CKM27%yYiI~1c$onHadF*o*}Ojrq^Qx?-bG` zs%mMfYm#Gx=~YNZlU(Gx!t`v*Hq^Zrrq_a5sUP~XA&YZ?Akmdq;1|2{DpFXouqgdo zvK$vZGdVDyo}Ij!i@qF09K*9@RsuZ_IXIS)y>5()o(E;X!^OY@uOX_x_6vE%#7hZ;e-ylg8QjOX6yOhE)_4BRX;WI(GD0e*gKyogC++JN1($Ug|RJ>W(=xE$#J+r#fg;{L*^u zRgupa259_TdWFdK%03r_n7Bnm?Mu5n1I)-uhne3V7h~UED*U52S@PJbn;uiHV)P6n zh-F5r;(4{*a8$aOjFsepT;>YnLoOq?E;-6tSh@w5Fk>?!+3ye~7cpLXgQ5DH5A3Yr z*;AtqEiwvD*H7P+&&Z7S5^V7OHXt0p{^nr)nkd_MN9&h1t?zI+yZ-3@t3?mCN8c~6 zJ?iH~2a8KctY>@Zak+Es+MPbv+VivEJZ^=y8$aUD-ScHVub$ItW*Q3}U%m>Ll2^~T ze)d}m@b+miVkUO!@^-I{$5%gpCzrnF&GY*LPj*)X7*1CE_S~6F+VrNVEB9dUJ6l*k zH{+nGVb4{|Th|SZtiA5W45peFZ{2%_H9g8&g@Y?_fwOp8cE?li&^Z4Wy{r#n?Z=#C zY&b$_qzxSp=^;yruRV2K!4v$B7vM*ZLIIX+4Jg~Cq0&0+(`Qx3QS;lHQ#Wox!Mi3cZ> z<3_~R9w1_rj^Hxb6cfMn-LJhU-@dcRx>$;=Bb!xk>fQW|i>>r6+lb|rBzYh6lam)? zCKGb5%6vle>?K-~;o!sc^{^c6y)w6>P!mo0U zSl)~0bSggWprySuxiMFBU5D^~ZOM2uUFGxYF znXJD@?$^TtycfmlV!Ig-gxs9RAoFKLKmN|Px}tjw0Wd;fsvV>w5MW_4%{w~qybMg1 zdq<~0c6~?Z2cDN{eMcuF2VaJGR=#kF;EO*plb}!a)V>uVy^i-i-2{Rytc^d*@)VL@ zcQyFtOv|-=V|^a0cD*zw0;S765&GaEysbpy$c1r7#(hRVQoBC&lLl7J=$(H-iXXN4 z0tO%jOLE0^)zPD`7;+eWy9K%*2rH^@6aF4CoiIPX*!n7uGpbuM$WFxry4QJit#2LZ#; zi4dmqT8(xyAU^K;I2R+A{sqq$Vl-X?q^G4P9ewZ3@NrMHAKbKF1bZ6k^qxW9*DB_+ z{_zaQ_-qKcjDiyTh=(!_EY4p%E!4hv z=fgeNB1k@lvtx&^)yVd%{hwJ7m9T`kRQf1{|FC|dDwoV>myz+~wM;^e10mze!8aB* zCAW2xV!5XDdWFX~3Hn50{$pp(Dh(*+I=;DbdK6i7KO}4T_M}UL6(1Lym;YY8vpzX< z({p{Tsqe==RqZdjUw=HXT)E$d_1ts)-rjxBQ@`6EW-Z<)3)GM013XCsYleKeGEYzlE)c$tdldn8JHjmNnS1ml?aq7`4P@ zv)_MW*|R(AhD7NB2{nQW>AC#FM#HFg?fzRgMZfhgYWopaLA;xOJ~eMgYClu4BJ)+U zuWW>7L8ztY3xg9)O>6aKPqG%jJgU~vw9&cc+L18w0q3PNa z7Fm{;^%dJ!-Rn(7u9`A-2N$HJvRx!{v4Nh!P$p_-a8}`_y@U~?)`!QKnzViDR*6vb zPOAX_BTCU?O?;G47USc%J_@9}f4L8pro*$O0=M!s*`9+WFLDJistclf${l|t!P znbO)QzIdS;)#u+^Wa}iEI2fM`oZQF}a8ZA41XqFeCQp*8b@nlfz0X*X>eX!qS;nAe zRBtHi)jH*0t~{+sx*oHkB$BP*5v>&#q?|}-H`Jpy4Z}|9sMYC3UchKQMfPk2Pfa0k z&eNcK&z%zvAB}nGc_36wRFgdLAj8KJsaS1eZtg`>ykF=$pHQWEG5Jv#d003@LPM7X zVjA?^lltN!tY192D0WWtgy=?68rbEdw=<(qy7%2p&#KvE!!Mb4vRaiXUEL5Il$^FR zJvRBJ!mC3^D(>RF1B)R`zpBw5wJXotlCkC5+qU73!R8IGQyK@bdorrkT5n&yREapV zMEo3YvUtv1MzgiNr^sw}Yv+2iSBqm4a;>*)it%wHdfTQ!iBOq%+kUyQy&V^iR^ReH z?KJq^TD+vlT_sV$R7(#76Amvs@)Nn{Gn_xw^;XzY=`-)Ismec<=wo@^+6yp29v z+z3~?!DOic<84)6KpN3XeJXvB^zCrvtIYhe@Qa58B-gvd`VaiFQ(RijMRcd*T+%(w z->ecJQzG*EJJaclw@N7UIBYaad^}6?rr~&66mdb2`JHUtHFo=BHy^%Qti51aemzd1 z+?MP5cV@;LF<8o!Wk5mOk+>6U)A#16d9okg>pp+#@I^nLPROEX4OZo z84|l>u_nQiQq*m7w=$bRN!ppXcPw>NtRBs$ubWCao%--TjC?YnA$0!hPfPf_N>gRW z8Fs#&=!>y}{|{$h0TnZ(#xp$P!m?M8t+m) zyoPdnbD&_Lzua^avofrVQs25k?9k3*d~t}lK*#3uLdkjKFVwt&M_WJE77q?o)}lL4 z{KFoo2*ermS6BPqH1{tc@Qd2!q3?*f-^vvnqh{l#l5ruuiIS=a+;S%Flelo@_kh@P zD~9eS54jH^zARGl;_j4TB`arI2jm*9Q)9BQ!m!cMe3`LOT@2EAbua&*R`h59XXpBW zkyP;G_oID{=l5kEtVeg9eEOE;uxul9C~z+Fu-$FJCg5duKC!k*oFpffXso{a_VedJ9f}CvZ@*Hj* zXEl12d~WfpU-~l+-7ynnEr*n5MuT!{gu4aR07O;aQnaw~gSTT2rjOFvK$bxj z|BiOX(~P@i1x~#7fv5Gc*1R1(>b>cMC7&*?evwzU?)k=>usKNf3%He5r=4d;d3Y1G zg7r3}An&>MRET=Bbq~7T~HC(j3yca-ImQ$xUH9ZiMgW?(`v*a!qR z0$A)?VB$nk3c|>%o`2EMuc1jpARHkCP%e-j*cI4*!TbR)*$lv2wixh}tpxmL|MHd9 z;7EeRLQ)}FKtSVsa3G`_h_%xQX@~Se1|U+$n#tsYI_RDb>YKH|3k&s3#J=7jV2&8m~0TE*DPo*7jJtI~b*r`6j8UWW^ z!Ab&W(y!tlmVhkA{m0_RUP^s3plPr)UbdLJ477|IJQF! zu|W6^hzXVokPcW{KssRo+bX{5fb7KrQ9mGHb6o0AB4(ggkV{w~NC;#S3&ab7Ok)AN z31kJ!0Z1(@5|G+hAh-y`6w3ujTPzPC-LSlX^uz+*kdS*=0YKJZ1p%px1p=2qg0Z52 z9zJ7%NG5-2^(IyfIF7V-5Ty2L07NG*}Jbm=>!E$kVQZ+GDkWV+ZUx;7T*B4sc9|)deIy zRu7OC*z3=E%0BJ&q z#ru*GVuMa)@TtVxuL-e$uQ(vXP9;9DAR!hQFMtFF495)ObaL)#D_3V~A#4eLbZv4$MS1NW z=IP3)@-X3}N(rf$x6#rgtl+CI*Aor-Dl$&UeeP&BEUGW4yn1`l&5a2WYNL-|x^-wR zM4D$)vR_>8H+F+hNQx%k7PIX2bM!xxKyqn9^b*yH9fne{r-sV~=F56r>;j*O*M1?I zoXY(3u^PrNC?xPmf?3VQe>$2t52s};Phtc$wcWW!@4# z_56T~Q=dBX_VRP}oAQ)`!9Myn85dx&GW8V>8Jw;H(3TK$>~cgNMsMgoQ$mz90TT=jFzW z^t*a4ahvE$Bzh68)Ngqb1;kv>=e%WtOx@WbDkvje>7_S)fUqdNoEH;#o*v>sRxV*~{dzov-VZ=6BHV9MslKNVf&nW|L(XBg!ta9nOub)rB!@a!z?PDw?C;7iPCM zRC^U320mi(kwK?Lz1L>pk;goR6l-^B1SW4%jNY%j@q&fu6MY*wd^PT)cdY!3;r!~W za(-DI$1}6P*4Ry}nm!qZ2sHDTnHkl}#7d%vnX2WTv|pYLjlJnE+YgK0s|ih+Wv^_c zPw82=)$B2UVP!INK)9G{(d;U0Dp5<0a8%Q2hsWpiv#CB(0WFncW>JY_WL)x%g(}?P zZyxo0ot9}4rgbN5*C%Di=vnicOFR`9F_*wf_`64-te|w$eM{7>WAs9yu-mgGzbpOd zu>P0QmDtpJKBnKh(HTI>W*D&l=|>Ladih9_%C>{5I_DAVaxt*Uv99fW1GUbMw#>&Q zyWroH!86^(0tQTmw%HXk{E3g%q6PIT#uxH{V>x)bDcsmSN8K1Ht$O8`#w{sfDc!}R zdCvoR4eUdJ4Gla@4$42VMV6B+C0-||dlUHfYUraa?~Hf*cW_I-T>W{^p<}+q$;=a8i`qKM zU9I4hS>k{ z;w|>3`hVL@%6&2CcUo}Bds}+Fd_@Wv*Il#7xz%tt7r9Huormf2%o)c14H`w#nXfL4 z3*(~Iyu_(Vk6Lf33|{8#8mY`c*;iAWM4r8ey~y=7it%y?xyj5=OjKH&_x62y6mO7O zGgr_vlJfRZ@iDOqy*pvAe}dgbY<5-vl83?J8sQ@C+mCX~Lo%zIIMgN4Y{LR#PnXL3D-)hfBU z=SPc?Pa)y1Cvkypo0zGQk|vr*(xG4_)a1LybmSVMe9Yau=@pXSJ2qiZj36QBqMeFd zD%3qA(Y{R$Vd_;;v>SSNh4%rG{ZJF;d7Q3h!LVbf)Y&Zf6&J)|yGQLkpLW3(yP5Eo z+Y`cmMdNRns=$jRIzJ=WrEyE_$=3Gr`RB;3Xyb2L(jzKJx-e>iQ+Fn+>xoq&wuolS zV~rJ{q&x$zMce|bl;l|sSAw0dNKU30mmq1_VZ7NIVir@M`B1O9KAfAHZMQ6Xvo2%N zQSfbNr)`j+mZ^&l>z*m<5U1Z~BpfzL?p|$2`Hf4zdh)5x&3rUWg%?N`PgNpEF=xO{2!tP*(@oeE!IL&VA{v$^%TN z$P8pc=T*Co78CLE7kwQ;-rsMl1He%o9$lAHMT+9mQ(!3hLdme8<9F6`u_Td1-$X>Z^`mDUTOx>>&!;ld4 z_1)Hw6N7%%PG1^xe<2#5NY_4k8Ra;zlVa|01Sd(8u+CLrSN1gsnKyyhZRBAxL#gJ2 zv7<*W*>2AK6^|WZTbk@g)Iym_kTa!OipRMd6*n0pekkG;cMSSByL^9`XDK@QOmB9* z80O1xOC7_^x{GOY<`D>FCKY;NC^So#AZ&SxP9%gQ5+JdN``+(U$<9bxrEQ4}R z4WGKD8ZIzOJA#p;XTB=mLXX~#PbQZyppivtrAM_6?`>r;V|34*@+EUUf?X%+JLKb} zoLKXQlQ~Jm1Wv0y7=&DysNHG21ysGSkOGXgI&x`o1?ql?#x}Q;!AA*b{&eexnRKjB z!->GcP*)J*&k*!5AN<*WoZSENafg}XC}`myG4M2IIZ~+~#1khuZ=Uw7g{3|h^Zdkg zc=nku2fLrj{hopV3ld4F*~@NS(}mCJVP$>~04u-`>$<%Ht{DJBO#z|`amNPEG`m~(cG7R&78S^ z^8vd}1SC-N4soNN>w8cbhDC?+71w4F;xU!6M?8Z59%rAPTqmuA z4834m5MLka2`7WU9nrD++r(AUV>_jtNO{5gHwHZi_T{O9^Ob4~a@ACyHo}R}Byhw< zI|jMJ?A#|Q{=2c*lws%hGhk`}2H7BBYZC7{ocS)XC^~iDET^Xg15LT#I{0KsW?0U4 zGVW%agOX)Ddtap7#8}cLmjwTT^n8XzlK6UcV{AkmL6&NeK?dC?5H7HhTK;JoYrg!< zE_pnOr{oI{&FOXMyFs4hvY)DMkO!>3x}?Oz&9ligTozajF_ zK@qCM8XGRKZ5tg;jIphDBYrsnIpJx1z85Kltur4JI5~FIPlwNSrPxVlOp#CWt zeGSrm4mfJt@9)+_(ipiy?zpAK#4;u+-#s+?Bt~2Lkx2H|aMFtmz9;R=5S|QWhm_0x zbo5O0?$vaawlCoqoo9?2hs|3mLO9%^ly(yRWr4bo}RIn`ORq99J`>a$MYvbzvlD9wDI zG4NGXgC^#AGK7kDgOqn*q))A?6Rzi^_Cob4U?4us(Udi>b;vnvIbc%hU3;Oy*vIbc zy6OYAj`Q$;Xj?b*5aE7J;`{BkQ4dxErv}x0&=BiZyd22@qx&1E8k0g`&P$@Q*kYqm zt>BigQ!P-XvSX@HVb3T6635yAx7t4p9Xtnpj~!=l3H|U zbze)H9Oh(LNBMwN=wkEdONHw1_03!jA>y>V9Chi`wm&{=R~S4k`Z*|3+?CvQ?>a-# z-5ABy-UlaNCm(%H{$7$_!*M@5Ph~m&BGduwxG|pyQ{R@UE}*F}B(?fp*JD#sg0{4r zAo>19;+7i;un*zK5ir7a;Sl(*m{vFoMz}Dr_XHvSOnw3Dz%jxDz^9?D{tS@>Gw5Jv zhHrr}B%bH3p{7Z}qgc;CI+{#dAqld#K8+ch)@@eyI{Ja|%Zacv=Zukpau%$;83grm z5Qw^JlD}rTj&q=kInA{|ai8}dR0WERf|duiAgT`}R}HS0H$LCAyo$Xan_?E+;2s`W z^Tbf~Jz6iBRD*sgmX(vyt!kI9=w>i_cn2S3KP{I2Ws#dyt?NlN8lQ)*0^oxcK zYU?^%)|O|`+8M=2Gay$RyQFo)!(vxp zPcedQpY*`yLfBrSxHc#IEtStO*J$vc&iGP<(8DiYfYqOB-Q<%s*LC`2}d zg`mFHTY=qg%J36_9h3R(@5y=nL_-Yr_6B9QV$0k)lf`EIf2bvdY|){4FSAQrrGLtX zD2qh>6raZ=6s*Sl_~QR{e|xPskr@ETFvf7s!vklqbsc8+T#auN~>WG5B+BqjJzQgO$UKgMiu z6Fm1Mj1krpD^d26kB++`_)58~^@9`UcVwz-<{xA#eKm>!`+Du`L0FJF;gH6~{2e_r zQCHAq9Wq0-JHL0OMvr)I8h;C`7)#m-SiUxt0;Vt6jvH%2u z5fG%}j7>AKa+1_dF!lxVHpz|b((8E-uO}CEFK%GyaBn;~MUhsN;^+)R#(?pbNoI2gv>EgERcRVsnsARF)%m)X|&r>NR z&cvA#^Hp;6D+qQ;V>8`_C#m@QymXS|4P}3&g8z) zOYVE$W5xA3P_H|^7vgAOG*3p<*0&$=qCM!ygx@60SKpnOFw4a)ivN;SXm&pP38l$&VA(Nf-4{Yz!%Ra?3JIi}~st;ns!15s9^5p;tFLZy%6*1pYw zJ!yqo$+I29k&+CBjU$HXlaUyybDzXqf^&WpULo1@!W4`lk z@w5yH5}nFtNG9A4Oib31Pziqgk{EF~E}r0j%n}`uV!$ZW5@|Sl&=wpJSK>HyMriZX zkL?2)jsuR`gX>kT0}^*_yLvhnjA0P6)Sscm z|35aA<>)vC`;Y^+vuh&%+RiWi+RocGYwS#sC_e6>EqcbBHsRM+6m3S^yhG9cS37PV?YenVnf*l;&Ky$zOM*^bl;gFC#uL0$?otv zNv&%smvahs71}>?vee%44vQK|0(O%RZ1^x?>TeTPiI;94rLM}S4XzIGsU@;;}mH;u_{Ekal0Q_@TYk-;r}-Hxf213ITLny7BlD+~Lq zKbfAwYQDQo-8T_D%;DcvxgwP4PV!~C(PI9^+|_0BLUIVd&?a_g8`uTzm|0gF7htlK zOWf{mC%@ZENb8gKD5x^hElLn1Sg9uPB=Bh`C#RTY1P!(LeA>I^W0evufAhnH!znl{ zyjG)o{Dw6YV50>b!K*NSXfT;qn;FV?#H-k@T z^xG`Fg2`~Lbk)_YskE3iX*pHEd_lqF|496WL9JtXr`;prD_z+FMafj!-$s$}Abt(w zzA7>Sit9Z(lhjmn5b*?Vh*s}dj=!$(*l25iRouk_8j|`jz(_stZH$U;+cGH!+bUKk zt9v7*JFk9tUpCuCU?;SAwAoyJ;o#Y5bk-21_ux{|3+1|lYt2>jMD5|)rJQiGRd1}x~@U(-Qj$nqZ1cP_I>N-J`9yZ<`2Ra%tr?YeFSY z;FojF*F-3o&L%+r`-D$CZIRgE#Yr$ZVHNKqc4mDi{kRFCu<=vs_50ZJCU9|GWk%MWmru|rcuzOk? zi7-X`SyQigW%~E}5>vMdg_b^aXrD7`QGBwT^D1-DJSgM*dX0r&qBrJJvRi2n|M9uE z>8l(!4>3+gkD=M*MDp-iryygdXc2QJvV^qjBmVm8agdv@d58jOr0m^9MNQi^F6uM! zxUytMOdF$@k$Lnvx*Gjl*JPhb!gh+%#uRS{d3&{3?f8Ga?aA8dH6)X8u~KZg-AT!b z*}T~)_4Atk<&_NQpZb27qH(V@4Uw~KQ*BANh;E~m>Ml_Rnr#O6h|fv$>Kj791-rgEKl}SJP=!m7Y&Pi#(GCAq&DA(l3F<{55}eIitrPP*fxLDIVc& zx)(hD8u;_%`=AeCTREs7TBoj?`pvdNxY)l^+GU8T@iDR~>ibJ!FR zPupyKeEm+?A-eVk$;%IrlcBEMYn6G;0cj-h54#Ad^Ty=PkmFZ)B;=G)M|t-5qk5vl zd%u5vyWOP8jbf;O%DyF|^ep=R_fO$RCtmeQZd|4wgI7WjH5SZL0wa2lKJ(?@R&C}T z_#`HP8E99L6ii7QGf5*!+w+wq{?-Ys{FZ}US{ZhsmK`$tvug{#Z_CZdfNlA&U3oh! z@axIz!TpY+?`|m&^4-~~2bADL@g&1ZEL4ghVZvAEh)2By(F`&TyCJX8(%4w#gn#vi z5LSDcrmk)xsqDj}*Aa`Ys#KlKLF8%y++L@IE3i8V?2aQ5h8Iu+_>SE#!WG*saeQb| zAQ>iE6fT65ShmA`pEwT!feEyu;1D2vG_60^88UOzM=u%lihQNS9GY#cxp*Hmia$zV z-Xo;TyRrb5gxg=wsbMij)JgO?;F8s;s9rLI1#o5P(O2F%@gY+z+>fdeP_3 z$)_J0r(kS?L9yD}+zYl$O9U4eD+vUI^z}mUv#Ui|dD>UxvD(`!QP_QNiY5$tOy|{| zQnGsPbD*CDtpRx(`gz>qFgSh9qy=33 zn~ywA<+@C1L(fG#Xr>J%a-b^0K*lN^wwFr;ehLn7O0_FK6rSc;>*t3jj%_lQiQbDn zNxw(=UNP^SY^7~zCwI%UGy{fPwkJ)k2W5U7Z_Ca`*GlIyN4tim9ig67S+P$cBelk9=r-s~i$)fkr3$;rWgcB72U( zi;|cVhxk}J*}~Y^;J4dnd(8?i^~{|_#DU&NX#3mMKAxm=XH$i$U@Q^6epD9B{jrzQ zZEfLOok_@*cm>~P`4x*k`JLAma=g-3qMC4P?n&^qEBhou29GP%W!{9}e31!##wO>k zPii`q|Mq@K0&A_j^C47SeWYXk9zuP(=Uoa$ffGNEN2%{d8N$(H@b4BGKQ6-`&xXPQlmku5%#b7$qxHA=JA6~?m*HGy) zSqdR)=wVKY1r&u$@%&q6jP}(zhj@0Rq#i&iO22GdUYO2Q6BFc=rwj4vwiH0b@-6=?7@VLVtYdb%0$6J{b2C6VqD4=a zSgg2KMrRlrB}OQF9*vaPH*(ci*fSzT<*P8kz!-5$1gk%~MvTnAO9NO3V^s>S8h%q_ z2j=^`RdFf>qZG_xqHZUCMEDh!8d{X!Mdzx{N<7|B!3Aaofpx(4;9!8rP!4Vfj{~`{ z#lgoAatJq=6^E3CpT(KT!rK5e8-(~X9wjUs&$|3G6f?}QLtG9%1EGK^M3WE;D3B1F z`)T<)9Kx`2)i{HZfhdast8Tggwj}zxl(*ryG z*L{B`YvK9hgqiZMDr>lVcsncc1Ktsl0soF|X(-R-;mjqk791St;TRI^f;%)PVo?Sn z+-sgDn^yYsdLwx*E_owUgMV)LbsaJiD4Uqr$h6XPePuPeUJF^9F2M9~D9a&uv~GVaqI0n4ajG zgB$I&$nBzv3?ziE#66$Ek`Dpc?wxMYK*=3LZkG5JUTOj(u){B-=$FSsV>!WZ6~6*M zGv{a>&@-2S}r&=x^LBm4_q#d$bC;D$x>#FC*8_Yu5;-!~ri=&c|rQR)WZaz0n-z-_x zUKnQ?N{HX0;V^v1x^J^r`Ia`0qS%yk{d56{kD`TCss~RjK9h<5n^-(~ zVAfU{RMLEEG5j(*W859^l(B?CH=$qLXxFXfwmzpy(fBS4_mnipLHz9cy`M2M65V{> zsk0O^xW|gQpD)sV=pBSc?h=?5+~~#rmG`T1~!=_$rFJ7w0uDv@M+BdH#uk2*>YP@458S`i*{lJ&~d@GE$Alv57_qy?y zYdb4`=`v*x@;sw?MK8#xJdJ-p2_RCActmQ6!C3)II0*0#vS5XN2?;GKk{T(KGl!E@ zY2r?Lgjx_2{o3h5{Y%fSQoD_$M81DO{`R8~R@nLvY00my`{%ch8?Kn2qt!!$uXH68 zW2Yz!KdhHfrn{-d%*M`X?osX}W z<7X=tv8HL%Q?h66fgww?r`l*T9O+lm>)C%nNWB1U2!5%i%*0FK&)c(15Wk>q*%p~e zCM<-sEj6%rgF!Lhr7)UmYIitwC@H{van8BE@4e^gza3K1S(A?doB{MTB*8#!;>TKd z(}KBipYDO}^mc{JH@2lz%R|5{%0qLjI|H&x)I}M{5%qRJ?h!>DZzxEbq@SAn^)cvz z_QlaBS5Y2w{_%@M$#E6bLRm2N94WrTO(i*cuD8&32pSJ74`@7rD76+Al)C+N0Z(22rJu7P_rm@ zxLI6SlPUIVW2n&Ta5d9FUr%y#vwB=gO@U0!r+wU|YtTn_gSSc>DfQr)V$|pT?G4I` zTlcIcb-qg6thWa1Toaew7-4XsqB}cQ-1h8%M`f>TkZ}=oKt!{8@=ig>=80!cc!p|y z!rWn|| z-83=`tS|0<_)*jTL5_+tl{@1pA*f5*Wev`q7Iy#P2q6KKRDn%lX`yD3;Su-qmeJ9* z16tqV99IWV(;g4Oa|Z7g++0mVjsQ-w<3*%F9CBM2H)%zMP(yQr=9WKbziyjTCy8sK zCLzoTksoNr)RWNW(ex;E;8_vpOv2YQ%(EV81W5Cba58O4D0hb2#9 z3G=wYyygP-4l-bCB4ZXW2N#8u?)W&@%*)*QwxGq4XcprVSENV6u+}zf?DLP;1Nw34S5{!OI69_D9o;+096dkq8 z>T$lHhFOjH)3vvdHqIyLkl4{MG9vby)xm(j;}Za*0gi5#$y9D_Su zs#ttHYix*Kpr_MKh!anzr=afIK-&~dDnyF-*}6{WGm&NTe4k}_Vy_-4EK0{^MLPiM zZ)k*H039#3tKONJt*f>B{*HE{ybmCxbXoB2VqOM8xtiAmJj39dL@r#K_E7YFyENm1 zLnDU;Ez9erH+)2&fzcsF=Yt@^6SKb0CMy&gneq>cpN>S|`}yhf_YG;op3Q#4?{gt> zOw*1zaqa$B3K*Zls2-BaxV@3pcR;bYicM+v@zsh6EFmHWKwf+WWeu=H5 zLcahkGeb3>Ztz>cvN~WEGtxmzw=GfReO-$TEKqVz80dZQlWsnQB3jKlZf`tG*h1}# zcqOU+B}5e&&zE>>c79u|qhrw05Fs~{3o?>&(&tS)6LH+S%ZHc$YYg%4`j^bSwYIV{Hy%u@+q&e-)}j* zcVTi>_S{pZpiOgyz?9O20bbeG(bKs=t-i;pq{PG0lB@zh7X)4tf$2V>AWD&D;c@~= z11xu0u2%vUUzpVdGS#ygU3!lfM&BvjZXRJn4h6$b6uGIAtlhzS<7!?NHHK2|+K%>@ z2w?meQgZ;0nSPMO&p#>!+f&ob;>ox*i&9<#rUCa=MdUeHn|2{gh+0zAG$3A-KBb21 zLMrb4Bhm1b>!izr2{XJk@~fzikK~w)vf=w8zARz-AZ1 zaAqJwJsmOcUL|Gpnq_6#d*0Qkg9XKW=(aotpZZFNc*yD(ch z8pG%66P%y+?H%`gLu{`{-AU~YO=oUtWv#SnNzwsg;>>lBWiNvIjARuDl8FN|NzW!| z!*M432EFCdws^^d#KWWenxv?u`bPuQpC^AaX=38>bTR)|K0j86>nzMtAL(D7WudVg z*(Ev>(I>_QwTmU+w_!k}d71t&qo%t{P};P3BFV6xF>hi`s@&M1@_ql7_u$NxAX{cZ z`at!!EaM#fL#1jMrL(37=Q>QAp{h}ZH+UL6m zWOXH7Oq_K65gFk`F5q{2i#6$8Gg?k^V{MoEol-!J<4rqfmSTc>tx>+T5lD_#&*1EU z&dU-%6ZZ3v{`ZC>Q60H^ZNrD3Kj^=RJpMW_K%ysv+P_`&8ADfnFZ`v%>)RcNH>}RO zn(3G`#8PELu5rh?u9OTKJGCnkxenJ|-g-b6pD%Gq(ruVu_$nFH*lUjE_M#!F08B4Q z7w?8bd{ir{=&khZ{EJV6eliFAJJ$s!`%=4nXC);ZIokFL&MvNen2TZ(F1s;6m(k69g5#j6XHx3i9K@QBBP5??`C}^?vLJy z^OCl!CF-n|gwAbs%bAIFr^+bJZCx&kDHP?_PE=3ah~oo(*Ir;7yFzzRIRzrqaRL&x z4oH2S>*%ql;hYo5OUx5CUB5j}!QV{2m>ziT-!@<2%P;rWgLD{$Q6iz_uua4 z0h9Z}dCy4F$@f6EqKkv{IByFZ7Lt(uEKl(5b${kc+7TbILtW z)f@m0wV`rhG+(iVHk6Qp92^I?Dig}3X8CmjjEx-b5qF#O*WRHDePUbCd03cthh9hS zrdfjqg&AA({m%=l3|(gfFWuq_KAYUBj2eBHBU*HYA}IIO1OR|~`)ejS{sn+$T(bE5 zvEXO+A$ez-oPORBW+mUFZh>on=ycy)MbNJ8i=oJ6dXs+8aXlcS#L?H-D`mHAFEu10 zt*JM5!CZ>Uu!(*CE>YjP@uzRxxVE+Ay1s1iVVUBXvH^ltTI)2W^W<=CeiLT~Tk7Q* zcQREg&WnUKqA$z(iqp4!uJ2lTB_A}FD!p{xo*W#sd;T6{hW^Gs*$2BpGpPMslEaVP zk5o!7yTE#-xcybU2{{sQI)E^OUR=Nhg}f`N<+iCr8HzsVo4tYLQR_|f%E^!=sHiX% z;HyT~L-f^1Ofu3t9z4T*`GH5Zdw^v;_$1(`&@1#c6ifY6@mvS)@N5Z|`nE}3Z)Ydf zSWpjTJ|@H#^}4SUoaUyQvoN?CP^xxHztsN%&@UO;LE}`}$ty)h(|%-tYuU;Tu40&1 zKrK(3v|L&i5^CRirjVq8m{_PXAS_SO%QF}Dga*yGtjxELj*YUDOW^}< zo~BJDg1Z^<(uxu});6WX##9;*CK3=vOry&oDgKav`8bw;2Y$Ut6HmV)J7cc>=6dd` z#5O92^7tA1!Hz;m(X>w_;Y<$#XSE2*z1$Bt5BObxlsX;xy3#V>VeAYF!ee1+=}wc zeRM8NDXQGUSi86cg4p~u4s}(UDn{#%IdA@F9 zbThCCV}w(_o;aO3WqyUQ2DLj`jf`MMF5r55)mD^N?F5n*scK%TFlFq{Z~THdEJ8YW zi7Yeg(V&%gVhkpPzJ@&ij(P9A%F()@XODzZecOhbCfyoUDlyhp9m-h?6G#Wxr~cJ3 zKiV#M2c{IT(r{|Gk$y7kRfV2OYWKBg~@&MeD?SPiiL{+ zf_MQy5CJGXWdyDdK84bg1A4`~!R${(Rkqwyp;OOc8MGwVA4LT4Pzk@aWH8gZFnZ5) zP2vtoSKnLIk-cEbCZ=r1{S<-ms;{%AN*J;>zK3ug=0knUEoc@pOvxR0Rs(T{5+Ke& zCZ&}JdUotDJlwvKe^S7s%m~B=W`<|^C_ag$6Z--l`DAIhWjyF;m$V{r3mpWX0yft@ zSNVJCHY6U^4|P+!|2~)c*#T=RObHILu=JM#x$n$hs8 zVn|H6!CSHGr|!Pjf!_g^kWcJPV5bv(#Zm)Byw6W(nPRw6rb_-@ zXbdm^wI+Q6Vv<^d2_r-Wfn*GXoQ%sFdf)z0eGaNX;_)O!p+9UJ_S4;*^9VF;nT~Q zMCFw@Nkj{$NgGKnmP*PpKsa&7>LX^kFy+CYl;)(7H#m9C1#=V$tVwr58q{9;k6cjw zyl2ggM8|Z<7H21Uq2#>uwnRkskenIC7@*$@+M9^TST0B!XA;9%X zf@cb2kY=ZQS4)n2j^QXp;TZ+*Lq;{z{0{Z{MbjQDvG`74n%cZ?d5(vU0ugMPh2iWs zB%Ngf*QE|48pt36N!s2#rG%$rnW(#FGT|_EcXM8^z|Vw~B{{9%SBARAfzGa4lbHmt z4Pe!5q9d&5vAG2tEgKMphZ7lUJdah50^7&EQXf7fa|UMz<1z!$QyDNgcJTpw5U1?)AjS)4>VUkr|!22 zL&1U&+Rt#MLe8$ef{gj)PjlCV?>*eb86^n}G53+_lt&8>$03ZLy3#2OCgt>+up;9= zfLorBy51ZCslB`bA6xlW$MY-Z%$cfv!0#(|pWss}wffhO+bbQI2blb(=Xv90Og;~9 z@p^qc4!h*b{^JNksW6Y~D&u+T?WaFlNN5rFYcy%NXi> z1mgTj=#dB444u}e31dNNb6E}QP(qFVg5+70P}f?4=;HD_0N4WIDs;#N8G_vX!u~;N%<;&I7=W2LKto_diz!;hfrt1Sleu#N<%GP2oyn;&Lcl6EB3G?a$1Acyz|w z%w5CBz*|Wh$8m*780ljcX6|ns9He9peCO`s;pQH!B!w?0%-_H<2)L>V4!6XJi=QGh z#NsHKzYZj&{yLD70uUcO)Q0~T=HVRd4pabN0KVEr0GxDMX)_NuUvzLtpv&oVyv)Kh zf(#tZf=@q%dIWhmdUyj^ky&sA9(MZcW?f&8U=Or6pcnFAc$Wp*I|L{I2eu~Z#vyA+ zm}r0pomNBjubPX?;vUBlxl(%g0y=Uz!A`h847p;?&n!jBA6NoqLxivo~#QE zz!Mg@LFB2I@q`7GiQaE8U$B8%P>`RK$7$XF{0fgP{q{AWAu!?}d`v=CHajy&__xn8 zIJ6v8K#4fmPbu<`qKxGYFX-$4UKoH@p2Bng(TS3@lmZD(jD>)KKOh9{eF~rbS3#$E zm&xB>XPdl7{ksBrBxh}|Nn8b;Hd%x`*Y*F>=!T@>fsWm#PvT_lsNhnF$Rb%cR?WV(OfW-+g(XPG83#^e+tjQwspxM z%C%h~xq6~A39yJ5>laSvN?vkMEb8Xg5K&rY{@o&yc~_kY^Or*}!uUSsYs?W4-r;BM z`D`uU{THpvT>;jaauAw2(kUAqq;sG~Ausi-){H0F-CyUItP&Ho)NTWm=fBVMm)^E#v064z#~dD_Skm^9Z^!Pt_*nkZw1ya}6A zb7Vq;sh5Zc4~jq_jDvcZAlr2!T-B>u%E1F06Dv;}T&HiYBM{v< zTTv*keL1I_9=TN{T_e8D^kEVY|v>?cK!Sh8k*H|5_ zq6hLf^D8xFgi0SAho?X$2Mmx@Vo*XHF%jH7nG*tyP=Ud|{7+FU&J2)b`vt)3T<0a?J2) z4(dDO7mLTL*bCqq6I75$`a6|Ry<9^G^orTUCw&@rO?rN3LWf&dAL}~&aKap1QB2=5 zyv~pFZ4qIzxFa{TJ@|caaDV7Jqt+LFUqLZ1n6d_Ch_+7zuVik!qR(xDDg@s5!%JjK zDg0gxTj{HdwwLiln!c|U9?dh{D5KwrG~C`ffAeVK|K`y&23LO6<0OO$JEY!AXT%U? z@Da46gMnqz+W<*v&Sb?jV48c(@$Tg;(S+r6Zj*hvpZ%Kso%6@6Zoknq4H^Df>$^xl zg@q2590wT{b4tL5eli;B0HeiIqmTzbT0UOyj+|dwN=Pi(X#hrxYn$Z^r{BtkESg>s zPO4_Og>mCUWlS4hhjZMQQ4~bqo1n0S8Hc_>I1GGV*mWgor9ies2E+2`sj_p2Q73k@TSudo}7NLB$%yR?gMW!s9 zs56v-+xqa6g`P$AU8{3bowR{`n}*@9Ftk!pyKfqM)dzJ+-lTxcbuNvY6GHpZ)B<=X z*9(hU6m%ym3I$q=?aYMtKir?>x=d?AsBNL8S6!icRg1NjjPvs=?MtOxJ40g=Do}qs zaoI`mKl?rdHZAV90g1twOZGiiI8HDF?m(XBnjDD#X;u?C za|?ls%!C)=!$Hc(Ny$jaNC49bBaWgHN{U-FB;&&MOcKlC9M*}bJMLz|4Z!eUu^aux zPm`15W;BR}asIwUUZ>#-#k0fJS)27t{67p}sLh_Qopf@l-k zo)0I45e|YtgCJXAUNpwp7Q@{-29ab+P*UJhAtx7KXAfUD+(tXlc0PTgB`AS2a9#kH zu}4JL!DLLd10?_gC_sd91W`l}ItCd@RiR*!4j36;1*i_#Q=)Is_EtC{f%2b8oME02 zAawbkNuXg)__L>JoPW#W47=E&*#&<9Ar*5mMhBvOT!85v2VNrL=n(OSFF?V(9k3bT zLA6707|AI&@mKEi@=5shj{Fh04?g#~?w`5ONr?BrAD6c7nqfIXQqPHzGp zM0s5XtAg(m7LY`dKZvPgq8Kg-{i|$3z=^wqWCmUa25yF2#9s#FRLAn*m}cO{9b_}` zH89U9Pee*mT;`P95*-*365{D$I}x>P$E2Nf`b?k=!# zJW!g*Kc$Jw{j0RY|CELRurm-DFcp94pxT8OfY}nvk|Y1oG_ZUDG=J{z&oG?8bD(hG zsgu8HUP9_$h5y7Cj@KFztbrqX1D7KNYe4Tq=W)jGz)U!mRd@tO*!*9SUV|iH`1l@( zKeG|T@Nqy87yg|=+Yn}bdhNf7NZv4u(`)~IRug85r?35)r5FM;?y%a2--HkXJ#sq6 z-u(|_Y!|P_T|kX&|EN(y_V<>)pU1bf{R6!I&n}=fB?UUvl=Sy5kd*xW-Veh6=>mKe zptK-;kbb5bYlrY>csQ6Q!4eDqbI>;u0~Kl{{#S*h|5d2SX@$N4UPN#(1PnyLfgp0p zh><`af?wfKpW%DB&#V-bIGSt3QTW1b|L#{&9H$geI9Qta#c!<@|NU*4Bs^_x9+sH3 zgB3=M1#O@PDa5{P!2-9r^836_61V!bvhgkW458lp0EjqoN|dk#_;k(lJX%?1}F! z@DRT0EFh*@7;X_ktV5o43CsD{scP#E;M5r~MAi$3o+Oq5)CUdAV~MD(iSJNbhX1ye@zH}Bb@(z7_kj5W|2?`zVfeT;h`@i1V}EVfC7cNhaSP_&r>p+* z9g1u*O@ng~zKPEwNFU4)d^XIQ|MBDa%Bstl45aVJ zGtI}*avr5FWzyfMXGOlYHkjYT%$Ox+3564(igRPB*J@c9-wTreFW$ZaAd2mKcy?!( z-GyCBKoJQ+MUieqRHP*Yr4{K?x&&)&Q87`*?iR6GpPkR{?(WuS*LUtL3o{o)pYQko z@ZHBSx6eIu@3|)z8@|lCr#enON_1w|PlB{NgYDeM?=V_f3C8i@PHd^(~|a+AA4oq;BaXJhFC@;8EDKh))Y*uTD_n9lg;m zY)Vspj_Om}aUTnp1fLgpoT&P7&X2Gd=r?p{ zjx=?^Nsga^Qs>-h_l7N7w$gXrD2MYLzj?kO7OL=VvHj@TDON=#SJc*}9)DmVhNUS% zOLGgBW}@pqn-Y?_5$(edz1_U`32$Ebz0^^Ca%U7xgf&?gJJ+I%!QtUP&zf8?-Sk%H z`R4r-%g5hq_sH^5pBI~g7cJ&{`J5W{eEKS>YGSj?{?YA{^FeXB&*yRaL2J6`+lg%4 zlv_o-QjK#qIZO_YNE?2A*trMK{PMrHxx2Mbe7_8GpZ=70F*_by^Xud1XOyz=lIkhL zLjUJ>S9Z@CHugb5_YFSbbMo3<`J#Tz?P5UsjMQ1AXJ+?B+TLaP-JbPn$K9bUZrir% zWa~Ae`BID6(MF$huIGIjvtaDB2W2AJvtE}IX6-FY&K|vNqlI^*Sqy z)+|r)OP`=lS^llPaPz}NOP}TAj&zvcuYU`5?xXY<=CVm9X(9WsZ0whLC0Z!1>V9`l z2=`<=-aPe%!}o4`Dt7i>aaHCMZ+vTHyW+pD7Tj|5wQiOo-D;t#tF+ilh4`UJBR_Gjike%kF;w;rq3S3cc-MfF40M)KUG zg8n;t7Ej(i`G~d7yEUfECf~dM?ZF9eu3uZ@P1}-^D>qkMF6j}{k$;7M<;UcbmMgo5 zaA$hjPZ~zK^xvmxv3HTQUzN4@B1`iQd0d~uXA=hP(cVT{pYYkVd$;O7wemUJ=9WHa zrXA$m|4 zA}e)|xhg+slN>ZD{921I7F*wO+ndFQYp!y8wP)Ve>hrTdTI&l&r5%tBi4NnP+Q^Bk zHWKl8TFtmB1lN@t%FTpm>nhwC+$~%^nN};&TaK0**^=v*8K0WmGc7(RnK#mq1drhJ zCkvZ%dBdnZmxaw_J==&jN(AUQC!3Iz#wAX3nW?>KDt$E79pKYjiGnvb6&+{L2G~A4 zoV^dj0ZG#auYfkd52ROUH+}^tWXsx3olS+kIgc8H&5xi0r-|B95BG4jsreI09c~S) zg)%wH(^92t1E;~(8J({*Q-aBZ@n)-wMxg>+p;;Ad6>4isOEVaPNaUHGmz;>WfNqGzHh3`n5Al_-p~QDEE=bNuPRY*7 zX0fW8{)D|${(8EOKZ8|c!=71EeO3)LRLiXah3}N?JYXGW`6rjqQ=`^Zh&udlpqlV& zsD?BM)nYcumGpa1MZCwsgUfT@YRgGpduL}SYr8sv0Pw~EQZS$#Atz;s4sdOfR|kub_122xQ$;gm@jLfhuT-fD z=-u&b+2(*(&$JH)a3_s?sKJ}Q*>uyQE7vwH)iBK(vHmbP*42u9dUu8`x3_kwN7VDU zcHX-m?$bK^z$$cv)TdQQw|K8TtB2VN=jc{xXXTv^-M3=c#eFhIeA@ii%&9|ltbNWV zK3n<4S9I-0D#UsZ<9>C&tUEJ2F8H#g<&{NiDlQfF2(jT`;$Qkv>e6zhhcqN%Mvr}e z^6#-jf#*HoK zY0$UN{~S60;BEJ{R-NWtbM5?>v#Ttlo%Hr-t2JYL?Azh`=EAhkU(fb8O>G*ncJ0gS zy|1^39r9k}@O9;vt2@SDvkFB?iZ-1_$Z!LGrtcFs}ilYca-Lc^xqV3?;) z==~5o*?GsI{kP82cy&f;`$>aNk4I3?#eIUp*4}yiAph`N=|_o&oA|8ffYC)qmzvIf zXf2zkL6j@)UcS8Z2jc6Kt8+O4_Ak2+pJ596+Lv1XGefWHjQFj`w))ULJ$Pt_|H*4bSM9moFWPbA&JiCcEN~-Yzon)U zJ?)7KUk7d5!)go0NbiQ4+&z``*FVQHohkxOJ}262<-8ivdDlzw<0nrdf4Z6I9;bb| z!JZz4(-vOOdpz@M)@-6<%t_(UF!C1l?AdbF-PuECE5}VWt9Vb$@t@Rn=FsVWCyy0f z72Y~Lz?(4FBW`y5{B8yL%5}TlP@9MmU&jWFGB@AcVWjb}o_}4P2i~09&AM7(K6jA@ zFmJAnn&#FlR_dbt_j}<-^G8RP`i={oHa2x@#<&NL*S(u{kFe+7t(Y+I!`CRozdLsy zWpjV!1246h%UU)S0aKic?)R{lJ$Bq%ycM;z{o0s_NxS~~v1!=r$M;{%jK7wAKd{$= zq%vKvdq(3l^M-nyP3~#G@o{7abuSa^EZwd0&94i=?b47WC5e5@$YF>|@GP{qGqN#B z3MkKjBt=Ccj*AT9<|j^fFNZxLz(8F~F%ISS2UL~<0ESV$+awi?zi)$*y( z#J4dy3RZz0XpI~N_$)j_8c)cn1UXgCo;1;iljO98o`nURo)g>Di)G_}P1Mv9cSVGk z>R_Cao{*Ovo1K@GoE1w+bHt^TXqX_DN?R(9piX)zf7ZmC=;TT*+yZ=2!8WlD*V&qy zuPU_WSX041${sC}qLdW_>VbDfp#k;ATfhw2lQuL%`-x&+k3crjZmI;cF1_H9_3lWLV-ModRQx}{b;D6Jh49AL&Ly2VRf2lwLmTdMl_&}GgX}} z@)h&Uj-lhx!6+?|x(u(*phEDqtDYlwiXE)We-g0?urYbey|N>uPbQ6&|8 zMI@#?28yX~%cLq)H7&@`zg@7i#73+nSI(M#F$Q6dd+G!O*5Ky%d41iS|mCFns%33}*Rdog4J zviEWIY}5k+WVj+e*uS%BmGkV;t-&7M8AY%i(h3R#`?9{XoUR>=v$8W2@)|X24Q1Ey zP<#an`(Ne_tk#_OuCS?QE0+}KzI7WH}c_dqSRI&zzN?oL7*X6dPaAn0apiyQ0_cL&DK}fK9(3#bOrN z{VpV&s9`*Di!Llkgr;XEgK2bTPD8+e5BF#A5HsOHeILs+sJmR+GjC^%%O#iNLU8#U z7b^EN&s^qQCgE^2#=7St85VGdr#44~hZ=SHlBik-oS*Z0j3~~-{HrC{vqkkh?E_jA&TN6IU(}EA1&i2!EVBb z!@cr%3oa|)cN|7l{$ES~cI)+n?!%zl8yV{fB-=d6A zp+!b^ZP+oUj3WwO6bAu~C{gTd zavp{#0jw)TegjvCTJot;b;H_gGE9uVCS(0lEf0!J{2Rj*tO7ky1*V8nAO;C}QI0H# zDhE{z(22T&vmOtxGZ$+KIB-%n9x+FTR#*2jG@PML}8MWXt8x}H5${;wmldC2yS8#DL>w#bdUn0qY*}9?J%c} zV>DhA2Lp}K-Pssjf?+iFRoJ37{uATJ(VE6+b*$e3^ycT%7)oO`=#h#5k-x)HnJwdw zgribpu!NhVKtl&^66pY#Lt~mIAQPve4$pG00G=gX5uH>cW9l#v;bzyXkmGPwbXbW8 z3>9vXj9-dqP_t#XKr9I_ie>!C@Pa=Uo(IVI)6faMgho})dk9?&9nRFK2rRXg_r-Ee z_wKnU9ZGUjQ6AFX@}x3F%E7WYk@9oK1=O0UpmcfFD)fyldnFR8qFzX19-?RO6Z5Er z5|K4E`GrWATD_Rmp)x;;Y&3>@79kqeoiH7dLDRPzk5)KvYzqwvQJ;z*H5^qEM-&%e zw6A`S%3}_{5QaNY#uuu=j90<)P#OObntdod50mllq1oR=3a-Rx26*09;sJs;*NVrf*B4r2lk%^_yNK#F~6!UbQ!)5$iXgoXNd8CYg4Lx6n=TS2LCG>m`o=400 z=g>1~c5%nZ_@~hGYQw5O)c=O-hru5f?>ccYHlol; zS#-Dd^wI)9 z1z-Dcy31jesdK|M3(xCVNsoNHH|X%dJFl0&Z#B3e&g0SZvw?nwW53*xR;?JZyL)ogVw*(6Gw3 z%X^1he1D!Z`1(7$-0zKo* z{L8A-2e)$A+r4UnwHpylA)S@C?q*rA<8}Jh*dS9vaHp=#SuX%hi7;VHlAr&RQW)V=-qMe zn$^Ma8rvZbv_a&85ik2hsdTUSyl>Bh+c{MZ+DgKZ3+t{JRvCiJ`oZekbDYN?QQtDn z?!g5~ylL)_v7;lM*PG~6mtVZP$Um`p%8WVlm9;Bg4IFZ}pr@uo+rK}Y(3+WH_x&z^ z$KmR!HsjZppEZ4QW=8Xkhd-?hju%A_@vu+nmA=~MYS#%XZTgw~Rj6%dzIXrIcG`jF zAuH21wAtr&yZmkIm*WohS`={F6Lx_c)z(OzdAy9j8+}|0;NzMo<8MdL-tat0#@~XT zXTbAh8GjQzbE2y~l}Dm4k4v9>XqSYrvwpBk-u6=lh3Gma8k0l#yw?tTmkdxAqCI+w zjK2;w_IO#OGOuE?kY~yzn!~n9G>0?QJ1;x4XL@E%Mskl4X{m}`uN%Ev$}DaPFLN{t zM--Imp)ri{M=J%57dSu*|-)M=Y#8OmZbirF&$0`y|v zvO)4;&6n}#pwgfM$6X}j&p?^Cs>_sxLXta%LuuIa`m1mS@(od!(xi@7C~uMNtWfR( zfuc2JUelFJI2ETzC7F`1XenD5-((g5NNJWbllfrBP$B63O0u|?`9PWyr0GVD1^T4$ zFGn4vo^OoR(0*3_X5QSE4`J0F(fb~#!g6)EN)RxazI(w!j7Ff4wQv^6DaATP8mgT$ z@ID}e$wp-|nR*|4E7wJ|2kmj{)Kc*$>d-jx5la27;MLS6d_E_h;KWnInu=OM*W?*F z1e(q>lVx2OwBg9&uM6gK#pK`gxHu4saV(s&qx{KyRM3PVAUG~iMtH0V20@5t)uZAt zDWDB41+2SY*vRdvq_o~k6pP5u>shZcg}kAxUuiZyLJML>_%B9?AIJ@kSj^)0$S)*5 zOlC*_AdGzL#~y3MpOSBko2!ecsah1fSE}Vkkx8T0Pgn(dn2hU4cBb1v46I;XmY9(a zx=M&!U3bw|z!tMr6NzHW|C!z-ox$hvVoyD+{?r>6=YWoszcoXW28byaLUTqEoRJM7 zAO`G6#<20MdN_k2pe@acspIC^QgJS%nH>MHw&Lrx1@kJ)Da}!!UK~O_tP*o)IF87$;J4rimj9^?WeYvu49Txjy{=;tzbudl> zkEF;1G(9Oh@7E~EbyY?RZA=8j0FYQ80RI{R<O^vDq=Ujx;+) zj(J#Px%C=TzzNP?+Pcj|arR<0nIpte4=+l0(!kl9$VNRxk1_=f9_)1}tiKMwhkA^& z_r9>HI@YVhueU#}20cy;2eBzsPxB_iwFKI`uR=DFS8chvxy+}FD4ruXYg};>xDXd& zMG$bYizt`F`DfWHZ?qF*)tJM>KL@<1q6bl}vjX`}930Q22a1ZZ&!Hz9Ab-qBWbDKt9aMCb zI&M1O2s-X=J z)5v3r+VCvJ4pO&)AmX!5f3W=aEz3Gm)Q)lY!CGoqxLB55TA;Z6^g){)R*N|_e6z!g z)(%yu@XR9L>}=SZT`soS#j`%AJj?p$-|wCMwSqvqn#&K?Z{Dv@f2;;QQf%MDCT(A% zUHY$1f2Ju9rb+2sfA+uLOmy17NgjnxdAa9Yo$pz$4GLGy*8j%F|7I!yy0e2`d z6i~5`#)!ck73{hKwBTwoO|Iw#M_Op$iV#8ZqlW2z1ST4EVC7?ie(yvB7gj#5Ops{c z%*w~4Wm3CD11DAiTqKuh;K<5PV&P4GPNIPWD<8KCPc*P+^h(^ESF?9qS#2=mAQ4a^XbV{Y;@adW`45Dqi4>3ak7;6y5bb;l~zQWXM4&^&B*L-`)H$DHDn`w5L(&nFnx z5NOw8WLxbL+u70DT*xO_DJ_gf3V^gvFm@ZP3FF5zUK9ra&6u=hpUr)-vpJKwMTO*h zD>i~UCiA~No8b-)wk+yczy0X5*{d;?2CN1>(wegw@MLx4c!F=m3`D@Qa4@kIVC=0C z$Ay76bv92}L*4!uPq2pk8^aUY=849WB6POY;tAG<4`aeOp5R4s0MK|6#>SIG3{SA5 zkoG^vzP@k>GZOji;WAL2MF144C0r zIE>f~Vf*sQ`3!Ypd#1`C)>6nHV+q#K@7#pcdX0B3?XSQS@S4QqVXZLdjN=Jj6o&zg zCr-I6#zr`XCm2Z;irV-SJgKGi0k*W#pD(*#s%5^4Nted9lZFP$B=v!!-nGm~MJSTv zj2FR0GUrmA%yiCOdmo{jbRN| zgB~eh4IDt5tIbtT@m07AT{bF-T41ZPMOJRB(hnG@s@3)?TrG$|_cXMX`Es@62iNb+ zex1O-n)A7B;r%NAWtVTC;2!P0*KeYx_-ta^#Gc`CJ8V4Prn&m=xbm*Wg(WYS&0VoJ zyVQ|C>Y&9cLHg`#_LonW=DIpZ?hFo0+;Q!bd-kkp^zcjG@C}Yi)SqtBW z&RM;{DgD%qbIo0LYPWmv{E5_j%E1sllbgQx2AZ9SIJCZrsb#nHqX`wIsW+D7uYT~! z^`3VVv!Kp5$_HK#79Z&Lc6a=?xUYW8dR99A{pDyCuk(^Sd-WIHF^F$zraHzdvQ>*1 ztCi0B+7a6%Dr+342cG_i)8~Uh`+<{>=!9PG=wO+bmMl=pDh*%!{MPjAD=gM6Ybtdc z(=+S%7LK;@VyEK?AyXzBW(>@Hmi1kA$Y!6&SF6pmMF&goJ~eHn8j}!~VXE3y@LXfm zDw|E+$E+H8uqgF<>+q5pPhwicM2)zuw`gvFMTXZUw}&g*yj@;&txS2!>Dg_rMMqqk z5SR6LXzzHz%PS_8SB@Sy8QH2*;;6m6zYW=5N4nT5wa1F&u*A<=Q;v+Ddw4@}X9)6X-0b=r!#yU$h?Zfn;(dRdpHdxM@;y&a}IugAA>XWO~1`#!_+VrZ*YNA@lm zeqe|0moTMLQ*G&;2*aF>9uCi^9=#j1ATFx2_}i1|)#R=xCuT)NpY=R>wuk0oYW{_- zNokZ$7=PEGnI(?l)4RVjn^;-7dtG3Yvd~sZuPs*(Hh;1I(rVi-EqY9uyjgGO$H+M+ zt}N~3`r|=_i*DR5i(V_{s$87owrb_R^*{D)%YRX+Jp0|Df`{%`-BYA5ZZ90R{QYg! z{NhQDqg{GG(U_96W!pTL`$d9PH{X@4wAHzBZu39(I>GS+uKQ?row%l>rtd<-5TE%v+kVhZ^=O>pwc zVuw8&Z>;b=bj)kQ?aIj``c9iUaH6KPz30W{W6kxhq`c|0VN>s2mgmFT9&kRt)_ML0 z-qR`Vnr8~OeHpGDcW2;T?cu$`TiOmdyDiF0^Trtq?bk(48RQn$JBu>wtNOCr`{{wsf8R z&3|m~tjU+0lh)_z3#EE3J_uFzyq>wYkKd&sAGF603|kiwq%|g}b8b%Yrrf0qryH+o zw&=~6x8sx?O9Ca6x06TOR5lr%_E%RGyGxqS=k(obBb*GM!^B*@y)K(#B;hx<4SW_e z$+h^RfrUtVw70+EDf5fx{b!pei=3M~O+KXIS=G-h=u5@?V&ik}I^&{@cb+QB z96KX>SKNnPSN44StEXAy1vQTkyOtZfu6t|#a9Q-VCDN+6_BZUcrY!9;3Xs4%xNvQc znB*J#pG2>$I=TLx?am2Vr4=2kbGN0AE%I|HoFFT_HWI#TJ>%+0TMvy|)PL+p-vjUZ zM^%3isLb2E;CbBGBidBVn!|2A)@9xv7eBNp*CwjR}i&oECLW`e$@$*cH{hj!A3C2AWKLRV zW^`|U&bFB&EqVkl>|`1>!r6Us`1E9tt7R*DAKE;9c!y=u$R((xUb~G(cF=iTv747Q`3+Z zV~=WHTz+R_|EMPK1uD|p_h(d-^9xTdJNRh#t+tm=berq=WKfLlrlWIK4Zq*9bME?8 z{~T-Q6CNISX>^*K*#=?iQQIhuBA0N&>-)oOw#fD9<-u2{^Z};78y2{UL-Uy>{HJ;`B~+KRIbxV^sp?koB!f-Xp7$_h400=aSQo>HhH8KQ^_h ziUjz#jOHBXI+KQQyXhvKuUXn1k!?*0y&YW$o)lBT+9Gw2;wa{&pdb>X@0{&e{ty*b zhIGG*Ya?a-L1d;RqT?P@!vrEd?%=`H!V;k#3EUSte)PW&1nox$g05dL$elUd+>}<> zi`1Xg!}SnbMX|Uic_BZk7tSh{pWX_4(f23y^4Rq(TVXF^shk@EJ%udLy23@&OdVT_ zD4OIoZ;a%{YD7}QItrUvMzYteFBbV4p$q64B18b%_)~QkVK;>?tCA|M%bGgKun>JL%i>hTI;d#@agpE}az1e`L3s0c;tg>TzMDPzy4rj@f>7&`U6_>=nwOr_ zJqJ0)uq@8ZNX*ot3Lc9x1#V6F1EEN{ySc5@(K071HPKO%p9yb@a+1>HQ^5gpK61C0 zZ-oQavM49tDv6E;o=>-EsKM_H_4>va#m6QBwDL=`60Op+l9G#)^XLMt)cJl;zytDn zLY{Ye26$L5NDBo4ws%kXOC#B`ptvA$*yk8ELFR~mLez$9_?#8zfX`V5*qCk|UP)FWuvHhR@GAwhWj7HAfC`nx8HxRHJGe|Ev zoG8m~B_6=^OU&RUgNF5z+HI@GR=l=S2fWE9ZN#t%wh=Q2XwMM2LTfAN0k#$M#qt4i zOQ`mlVl8TB7x7Mwv3ALF&b8i@L9{H53LPj~p#z32WQ!4LNeVfeLSNolbeRLL zKRm^JUJW4c0U&o%$9%=tp&O>hI9*Sew75WWgVRPaLOX_mJot%QUJF5R4NmNXhW?W6 z3l?`JMRJHn6Nt%WE$b94?uXC6omdq<6|w3Kj-H}*rl)6UeJ!*u`_WS@;899L1ufOb zgcD#p{kI2pQrMifqm@7t)!PCPRy(5DCWzc#bs=Le%%~cOmPm|xi7PcWB;^8 zO;qHF+p7p_r(i2{NE6RgOrdY>6e$0GVi^~N9P3|*{A8e|u>rYj$r1n1^GTS zy&HNN)6mO44ZVz&zm(cCd>3VU#WhqkUW>Hg;N2%Q^fIyLC7^%3@g_9%G7-2N^@}Do z^b!t*`Xy5udYRhL%e01GrW4SAy^;29sA#{2UV=4S{pzr%*MFJS(93LsXi~puPI-Kk zmh3i9GMOV(CZ7^5IgSLS$&+|W$x3n$d4YV&{8t}YGQrIUp@Xj%Q3h`#>%9dNL85ED zw_tlo)H~pbrsEoHcsv>}1>+5s%~FyibIKP-YL`!hR1&F8sfZ-s=rzvr>h4+Ry{2Dq z7iEq;i0_IxL=iEbSU_whZV~S|h8#amK1Z2T%9+b~4TjS;++N%q?kw(F?tW62v?M*q z;lxoI2p0el?0+n<0NelwP7#PI6DvH$6bBOHDLYk3s164qs$c&km+;zv1TKNSshbjs zuGA(nx1i3uOuqnsRMsKZx^G?C*q}b>rA@M5g1cPy4z9o)x(Ydc2yI;EGzgWncVfA% z3XA4!AhhiRnKWZTWfut-b zsqLJ|dg+uztyh)kQppmDhLr0~=(uMx^ZTb0qfoc*16Y&p+KoGk(C+HYEL!Lrhe~$s zn!=Dk7xwT(FFm}hbLt?GR??n(nb5{v$rVun0AK2+szf`*JGHM_q97O*xVgyMM+CFU9<@80P@ChpR_AXGYc1C76H6C^Nk19+ZDw+AR;ng<- zwd5PdY`-8r8@1$TpUN;z$%!_Gk(l|hhZocbUTSw^x0#xWs&|X*9$h!P%t$M(RCtR! znTrAx)%Iuev3-k`iGRSBZa#;YPaGj`att`WoH3j^oWD6&Ij^{S+-Pn#cO-Wvw~D)u z`<&#GO^MB91esB@HC!m~^0jGs_pf{}Vlmn&2(&%)WUqJ*F&e$aO@@f!=q=lngR)YS zXzLJYN>M2#o^>C9WpGUSiB`JOfMVz1x{0QHyMQ+!Gu(?tJ|~9I4rJq!7k#J%2758l z#-}Y^GM}{|C8?gDpAh3A3Qq>=g;^4R5t^JNClz^=)*i*=iCEZLm<(#`RQ( zPydn>*N09CwwJ3L8}oN@^i#0irxmS1NY1u(75Vo)zO-I92ZH2Y?h6rpAw(jg=p9x5GGnmV2JPVEL?KM7T-Bw{(u~qjxn&NlK)tI zhc%Sai1-c-pvE6ii9&cs`vbz-U``nq-r+@Y5YWOqeAC02I~i;yMcRKB-oeCZiEl1@ zvjvH-$fP4q{m@FiUoMOrd#d)23;+>03xBCEiE-$`q78r-Bh zN{3k)@Y@aVs+ODww{)7vg>LAE>pur>dZPyG{zD&%GZsW?zIu_m`K*w$b9@Cr#~67&UvAxkY(MkJ+z>JH1;GZJ4Y& zdh=lErNcblj5qoxoP^msV=PWfc1n4cSG;ajdK4@eu~#kPfcEw!+vY52edbg4Wi^9C zv-ZxN_Gu9@CciM98)W*JC;h(h z)iuL>4ey{^u`TYYPEs8rl&W8v*m(N%?ok!I8V)#AUe?jX%o-)Z@5;*Kgy z2gB`G_Nd)_v;WB#@}kBNsk!6*^G%O#_`TI+@UQ9IZZ+?F6z4;!28WW~WQs3A`gAL{<+IL?#%CGX$1!=0Nzw05Baa&s7u4?-> zbkC<@7uDXibq{IzCO)FH?1uX5@(m+3b6p1ReXpXm$U(d6=_U80q_Shxzc`}K;@ZT{%H@2#lsZKkWPJkz^xf%M+1BLHW=5r+nhK(NQ`* zWp?l$n=B7!S=2r)6Oq%RW6S?OZ9{&EX&qDc$alZmxX8F%Z=XGDx|~hOZA13mRWfd+ z>D12^J({{~PBk#F+dX9QAh)rD-`=}(qu9RVd!=E!fDLgj!HDlSOo;QG`qnX>Xr5CY z;-9@3A@sK}J8|sf#vayp&YV1SGVr|BDszkDN6vllx9ETLq@SO~og?j!AHK~cV*hcv zVTMq%Z%cmXVa5$}zRDNQcWf@II_CfWcz3_!?W#AP_PIk4y-&q>c0pC^JJ@ehBmss_ z5wJ^Y89L1H6u{7+J;PM{N|b=1QJ`#KLf%lEUXIa0&?rG3hZkc!TovcZL?x zV1@Ai_Xu*c1?|)W?O1ebcQmeO^$^@`FyeB{H8*W-9RRww!SXM_mPNr>B0hH~6MXvU ztP+7U&HVuFDEFX{%(PC_l=fsZx!3}~!eA$xM=Vopk)!bQU0-ZrA{SfKXh^5A?_536 z5e2f0mfghW3Ue(R7Ydncsbd4^K{M+c^^=Iz2%#q^kDRJ33eEnxti+vlOy~Kw!e03Q zL#cS$ys6fwy zp~T*kUA|aBc_=CIvg%c4fYZ?Tn79uT--Y1sN2e~TmPUs_DW&WZ)&jHTHDeZ?Ef?EejF^= z6v3GAH?{jQ2jDjU0XAL{VNBTMHVzvmN+H9C|FLpE0uZg--=Yqa7&0DUk0Yx!N<$2> zZ9=9BwJ7T#IJ$miooI_>CiScnu`juP*rnRJ+S$^dPb2n;e`ch|@_vsE2eb!kKan~u zcCRe$2IG3;rk|Lfia!Xv6s_{hz)N<&1=sq4ml}j?!^V$zRM$T?ew2TC3b`56_>nLr z2vcg|d!D}Pm~g&|B8Y>n8WJ5HA*mk^MM`aIJWV0`tL|q+nh#rYwz(|`&XA)iZ^io> zM^jCUB#)6qt)qy;l^ajc&h#B9aVL?FT<{GqD0dar*3{5WqQ6+LJgHHgMSbcVP_y0W z4{CyBMj(|VICSt?O1VI?R|b+g2hyE10@s2d8ptFjfQelfG7gOG7J$)RjiDVkj`+pD z@|M;{mLOwN{1^xkp{4jy!zrA^={yk?oGDmBS*?*M$@HcQZ*!!UK(iE*afFeg8c2z8 zEsjJ36;{Kz!Ui%pTfnG~M><3KLmByu&oKqar7TZWAdXR>gl$wCfbzRA@^O1(lyAhy z$Af|;Ru7WYkCHkB5&J`!#6E2-tiVEH^lDn(*IUJ2+)hP7=4-0S+5a`BxUIMZXbj&JpQ<`~s}G5S8IqU~PE6 z!}0Pz>~~BlJafOJ?%E_R${` zA6Y9J55Vf#&|~g|z5VH!6)t(?H&nP@xu7qcQaL1wP_GwYCpSsZLVj@B*}AwmP`9&` zoT*cXME$Mhl!~>jy)z;+>S*5lf<%U#I|F>h)PU-Sw>XtH46$>vw+6=_x03}vO3rj? zDpsu8oH}75(r<~+qLo*Vd}e$3lt!8;sQxVz4OD){pyt8Gd|0JqtqSd>Ts}sczLIM( zK=<-dE4CzEul1nN^trmND#;V2$V0+s*i$XFgw3do>tYR=BTsmQHb2=!&g zTEZJ7-xFS>frCaNctS*(5U!yudIqsL*;mGI1<#y*%PJ*8(2Y>CvLy&xaxr9~vUTFe4TtK~WH5ai5qS*I}H2NYOmR}g3m!6I1bug~U z_+O|O;<7x1EsT4hJ$qc~H8g$wdwQ*Up_(eKUWl&b3PU6GvCwR1tTWo3U!zxYtODDe zU)`0w{uLQFz;A`U2(Euc_F_*J*UF=>$ekFV>BlZ#>;9^dD>5}qO|_}CRll^*=2Y;zrQK+E1Mfb!8u8z6?fmi!*()c>&zDR*h0v%co(vr-0c?Dn18*-Xmeq3 zGL(W~gM4n$PKK~*%;Dk86TGOR2i(b!Tw_A9M#X{HchQXv5O9j~-^{8I7--vGtluD- zZPlpfH>?IdQiW&+Jn$ozm)NBJ{>0^F0t5An*|TrJVzqIq26uUx>j56n$#)eWl_ufN zRxv;aGcXU&QYzezHW!E9QCl)>U&!)%P&n;U>$8v zj@4ie4aYjXC~K%Zq#`T#_EJpi>C|GKH->c%Y`FiimsJ6M@`8sW06{Y)d8d>??k^l$ zH8eO3(Xe?o;?k&Lk49X%cT1*kt7!I||Fe5lIj+g*{SGcK+=l*1;U(+GKohOJ;z!Me zeN)RzG|*t>hqLoD5)IT@`SosU26VW$+V-XBst1?nIK>;dp4Mv<^1Cqd>x~KWjTrfM z>@hh2X~U_@Ce+*+zB#0DJ*6G0+^Q>~7RD$L6p|eT4G_B-`FOBJl)r$H-<4gz0Ob#5 zGy!k|h%N0Om&AFln zh&O_QQ5!H+ixH`YQQ_23k+Oal>?LiR?b+44HgfogqS63_0t)Ze4YpFBz#kSMwpPbu zbW(c)#3t&vCS9E~OSlWz+t#>>z)FSFqMUklsa%ez88z{=uvc69;(!=I_Dr2_ngsVA z4V!e4yE~}($wQvDqfU81Von`5%GOq9psI3*BSxPqm;9R`|0eHJL&`*Y zUj>w zY+;ygY4I%92|*taES(u!7j|eQTNk;X1o>HpHTE;Vxn-H9=?Ezi9Yx1{!Rj%`ho5M8 z(VFop*Rh4=Ct4O;eTtUAFenKZ_U``2ZgUk^4Fm^7M=3?p{Zh>y3LE#<*wFZ}Lk*iM z@|*jw9frp<=A6WybM3{U4s`#PdV){ueMMVw2fgT80lYGf|5S*tq=g~APhq8~g#pTu zI=1%K<}UWMn7-y0=$CZ&Bb<9{ePXkv6?SyO~Mp8d|DTBp=Io#4! z(cUqL4$0!+T;rWvX3|l3o%EA?m>__B>_FZnSCVC9Hra!8Ae)Wx6)SGx6UAya!D&pb zLw~e2kMU5cEx}cj`DG}}iC<9!; zE~f7xYO*du$o`GSSMLFNN0cT zmMn)|2c(_9>y|7fC4!-ynHkV3H8h#|BBF8WT&-g!ki`CPC6`VZSfbfe1mWy&N-iDP z6>I&cHgc7(QAnrG9yq+Fj?q9Wq^ZcLCG;9mLlu=Gn?xQiyrG7P zlv}vtZxQNZ#8nWBxWX&Y&D7^gHbPzD1Okh?a&fNlfnv!fBU0ql6<(L7u5j%kTWVgR zBtWXLAhSUMm01i=@6p4xN`uj~S`zI?m?P-m5~!ZFHpSou$S4?8DaX8vgLq-Yp#c)8;2a<&i#C=;hQ{ZHV_ro}oKo70%OoAD~nY2yp;NnV) z2fCEFIZ{WBh4ULbmzMLiRCy4d2MAk6p4$73R=ziV-i$94bG)jt7D(++#eD0c`5&KYP0ey5=$H zykWf-|C;ZH)##7LiBXQ&l)>Bm&pbRg$_`-$T?l1Q|9|4}o@XJ)zn_Ksz(CIQ;f`l9 z7gfHdtZR#%HSGehmLveF6$AgU#(v^rURea;KKd!{Ep)gKtRi!OI2PhXAPNzdgBSs_=dJVCw8YykJ@-v!>Cuw{q0EUh$CfrG&a2icW#nM1^J5HH#xNDVY->*Jse z+uAe%!@*eAGUWLvZj*J(P^%$K>!nC?>ZnsU8>+LZiUHN8o7hyrx3RN!mdn4eeiMI< zgjfxFq}W!-o^&2)_5Ay-FpaSlrm$!KueEwG`4`~e8aWRBEXWI{P|g%^;#t4KK^r#X z(9VX*IK&$Jx%@RtfqyjL1FOay9*%!_QN?g^`73VijNu=qI{%;LuLumZ{56w}_cX)Y zxKa6QLnFoT51TZ|Ukmc$6XN^E|5nJi`ZBQ)w!y)FmcIf5&O->O2ws|*jP&Lm99`^f zT%4Rnq;-LtiwZ5fkb7gH+&&7gQ6F2Vs!^KbMK6$cX=j{6)&rtCOX<52m)J{iZxegT z=Fr9e>{9zX9=ekA^Xt3lg2~d@>uzB(M;+~+IEvD&ogT?xQw(z1{IrpJW4Q?1L3A_5 z9+j_W@q?HY^+Xv|yo0DC)wi3nt{u)fL08e(%y{Gy475G^`+=1L?t-E2oB)Q69qf&c zVjXp?5Um@~34a?X7v_|zi2SJbD$2&4XwHw5i;cB4LtX*0iX=$V;d)~^XmS9I5ws!_ z4h(A26rovLhSVJ|(7~9IS>BSet&`r^Gq)PxCBPLPE}Pa;#4JEcrhpE_n^(t|ADHmz z(uI>wJc(91<0N^TE@#20B07I)AZ`9rSh6kinM6Qrfoh zN^24~Dr#%ro^f5?zKdA>>EMAkFK%b-=zTJ)&;0yy*UB5Ny{^Ta{K3iIlln46_A2|! zLFxCa?`~G5-rPAr`u4%`?$SO#^nFuTe>zq^XpVII+?#7oUI_2?>eI~>r{m()V*XFRhmE z8#;ahr|IR1oY+`>!ak zU4$B#s)(#vHm%r&Fr^Vf2`==!y zpBl4N-!~v>soTRrA9T*fZ|$47^^G*|U_ti4*;OfhpANjb+4kXY zI~i570wxiEap=o|dh4!7eS189l1}*Lx1H6j#!Pw_dgavBh4;#Ib{?oW8^1dtarcL9 zN?%W19s1m6?xfhS_ai5IcH}=A)5PwI$@{7^s;$~=ICC#Dp+f+b9q{4hwq?>US9k7= zn8<%3nGaL_6xnXg=o_l7O*h<__io3)qmQlQs%>r^9ivZvPnD9Es&@w7FCWoi&WzJ@ z?x40(>~HEt1&n!|qIdS&rhZ#9VsG{;yYG=yVdy^5ZQ(MxNwUpDpIw)XwI9Z@zFAYB zb~NGOfL&M54sg*sKE8!VS+n+koj!GC;XTjrtN9nU?V3~cba18YTl~cVKenuWsjqf+ zQcLfN=g(e1MatgaQ|}eD?Oi9Gt2drUzufim(>>Qd?^8dF{UR{;u?X#!W50IE+n;t|WXulzZb2D4+^$ycl+BsA;XtD7 zMAf(NC0#CLn0~SRdz^d0o{24eCcK+*1}(Ygh1o3vgSLH3(fjf({o;_D&!Y;<6R#_U ztk^f+C0K9ou>GFlSMvF?9S7_!WZ(BxnigIhzIXOT|Bb{uE9sZpc_nU6U*?2q>CJN+ z^z8?S>-_fE!ZIb~(v`Pb7JWppj6((Q6(~_RP6`Avjoku2E)O>ADYEDjD9ie+K$Cje zQ=m@u>LD7?TZ;v?))|&+GUs*TLy)N= zLFt0Bi(N1@0Ffq=JzAa=lwW244IXE!--Pxh$O8vs=)-d;w2D4Sp(6+2}Ok0GB!`6Nt;>_##R- zSdfPRH%~S`SWrk()K;iz8X!oj9x4=Y)jDA(wf-ZJWvR%ynB-l8yt`3j!DX_g9FulN=_^YlsVox2_GQFsz>u#a*#kHfsH>;yWa5B0@brDr`!tD=ef=iB$EeS1naURHrC`lFTMea+2g*!|az)?o)-W z=va?3i1qk4sZ8r>TRU00M;%hg>6=VfOXc&1ZZ)(W~&`#qF2x#V)$*mZ*b zu!5C>Q3z>PPY$eEE8J|zJJSu2T-8uyyYT$8! zSSH&d@FS_^g9Un&;U+;})W|B?*zM4$k|(WyN)0PCJJ!HPegj+~HI2|L`QtJZ+TC%z41c@a2lr$*q zQ-T6ibUk&vr@&aY`jQ}wR0gk+;FdBO=rxLSSzt(6oD=lsL!k|WsXa3I5O+*cmQ_7M zA40_tfhwhWNzfm)v5^`-NZ`T)*|{@yaF8IToeikw$ZZh7VAavu88}Mt(+)9?;U_yK zB|o_!%FWKsS{5)^u!&3Y9?2JF6aKBC);HsyH(H5L9aG=M_hnHv%hXx`3D=2C}0=IJHSNIz$@Jiqr z{K;|E;kg)|$HQ+UNG9<77bI|3$1{Y4;v`If-!O4r7Cg^`I+gH@I@}G2dm*6_Qjq4uGgRiygfs)5qagha&rp^e0nY$2-W*7? zAuWKv0eZZ-kWlBy+XX<8n*^yDyxR_Sy2I~bkov5fY9s&tfgr(sD z6nLeO_Z|L*f$;zeyi9m*3JE~ULo)|xkZAc}#yprk`3;_%!*d3te(?8JNH93AF8mG0 zDQ_hF4gHX4BGNtZ0*+7~bjG~^sR<+?1>m?KI4~g27f7%STrMOM5_~{hAyk$@s)n=~ z(k4h7A#H%P9uk6N6(j&R3E(GJLs|uCC8QOQmO~q6klMlebKAp%IV1~6){txjXDhyr#e?wy=fR}?hhj-iq@Eh{UE0C^1S^{Yy zr2UX!vLq}y84K%A0`k!W#7y`-2NFWSMUdbtA(uhg25BFp-jLQoS_}z5&9#Hyw;(-& z^bpb$NKYX>gY**8D@bo4y@o*nWO)EV9zc-Cg9K3Ii6AMXwMXC_1F00A)uCauZkmvq zK!T;K{sh}PL5oD5+cP8z0I~FnS$&`{WQ%ove_uY45>$@ihKVOd0Syj@q zO~w|B?s~ntMVy}Z*7xc2XxXf)x$RcY-Cm&FXX}tdanrTK{t^t-I9V{$d|nwfKH-aQ z$VD@pcC_@I`s8Y8Z2G{v>)xhKX}NOVocArylthQ0T5D*PAf2`L z+JHN44^$j@(K~X(%2{hq=4Yf2Ts%Nq&&uze#VXmAA%l*zIbVJ@=t%n8=SEWwN;IRE zRUeC()=Otw{*(~MS;u6{KfT#de9ZiH*ZlzxbKkb;lkB|8aOR3L`Y#Slvun|5Y3FtW z78mF|b(ys3#=^pIH6hMSYzoy%d34g)>!5Bak!TIaCo%m;X#7x((ugA??#oq zI~Ob~wf%O^IJ$ME;kK?at7e<~P5$)W@#d=0F_)*Do76Pqn9Ta|L^DCiw+#I?C8y3G zSFySOJtcP2`lZsR(XY*BT{YU#|540&_df1@O=IVdTU(W<*)j3_*)GuUf#SDj52y8d z@KlR)Xb}y;yo4wL<%aQpD zvL4D;VV+afC0 z(W~kGX^GnNZ(cf6xTe_B_w|?_gO)z^8520pwEx`U+rryC{V_bZpZ8Yf$HkSY83!^) zcV6A=&{5M7=lR)v{vUI10TyM`#Sib2yTsDnAtK!&-AIG9bVx`^_firnQpyU_Aqa{n zv4o(23JOSvQU)QdARr+4-Mio;@c6v%^M3#TcU>P|*4%U7Gjrz5IcMg~`5i-t^P<*C z3&FfY%d@Xtbt{`)+@Lo*ztJaydoM@2y%e5P z7;ZCM`<1(Pdl;W0pxeY{E~<}BIKy*lHoB~^*gWjKb-d}b_8dlNE@iNy;hAiFS;wB; zC+`*q9d*o4$EBpVan{nSK5@tA3gH#Md*R_o#eKgyyLTaivgMmQ=OSi`{Jg2}Nf3@`byMz ztPPws$LNL@O}nj%g4gJAztRs`oywH4eBR}fJ~n${CNjp0k6h+)$~LUi#d~8qto&O1 z>;<==so)vg8Lt37E`Xs|tDYeXgDJmO!%#DY39_ysA7D(guznuuF>v8o3H(0qT(Li& z^BIneRr&P?JF%D6jZ&H(j>DwNWEfnpP1Gk(hXI@>i!|c2T5Tk*|EcYPG%&2apW&mQ zqCFHE*5iKRU4>DP;WQ2_@O{`$>^H)Bx_1@Z`NW<3d{$Tc4{d!WU8dNP!?aU7X{Q~mvSjgPY zpqGf7A7@&(b9H>v*+DXeVApJqF?ZrytJ72_cGS1jSo1mao!6+Z?4p`U{!8#){_xaIULLP=zF-)2BO#Psx68iubC>rH=~s=j3AB zA`dF)>|dtr?|=J@KmMwd2Qr!8fG~eeogM2GmNsMV7h&ZD-S0H4S&L*!y-l^9Gy8=q z_8y2vlD-Bq58{-r=-N)g0>R>!jB?hz!2d6kq{EAbGR#s^zn5xL=Lwq~CoKBX~nX ze$UcoJMKdgBXHxZxdv)w_Uh;xj6t@B)niPypZmZwSTqI7oai?bY(M8=7xcvB2~x!e z7ijj#*0CtJR>cqAqEc01;cS`fdo&GH#yX9zoEF_9-NW$x+tw#oY)@kRX48~RiX-(c z-;v})swzMg(%RubW&Mw2XtF*h_WgXZ{xN-6mBqYS>AXiYo$Ab(fw)`9Wb&#Cvj%gf zv@$>-(gI-M5+kQ^3fj2y@1&Kf-H+K}ZL8!QC|;vq{g^_nI-|i(eTrI}u?VOK1;&jc zP;{Td3q8sGSNZ)_0S_*GCMaB6(pW{+g=_qcny2IPa)L{*j_XX{li~_kHP`i}QJr~v zYm!ay`s-Wj5DiGCG-{$qQ4;|4BQ|e$DSffMue5Qd0Wv?vD;}>Alhr}04s?V56umZM zF>0O;yV2Iyn_9}36;tuF$~o}d;Q6I*aE3WESm7G|S5(hcvQ@AO+uLuFImDBqdXE}q zVOwn{Ls(d;`15aW2s-5#O2gqe2Kvkzkl;`WNrhO>uTVLq7@xgqVqdaBcZ4#Vr^IRk z-L1x3PcFV`xFx{V(?F5*T!71jm4%bVdF^{lE(>F*kWOcCg{RGp?$u!qIF`V!>(lqM zk#sqY<=2GbuB}&1Q3Z@#YfO@Zi(RMj3i~e7n7ehAKk(xB48QGX<5m!#>9_<+hxG#1 zv9{AP_f0x~X2wYrscGzPA=fwDF8hc*Z43_*ZN#;alxs8_@3!7=uo%yPe}B7dCu808 z#O&D=j=#ni)6HmpxV6O{_-VLJ_cq(e)jRd~t2eInVP~wW&vt6q8{SWTd7}*9LyYXI zU9;Am`DbhWLL)=UwzI8Ssl#=p9UY;sLU#kFuA8lQUuQTs@Y2}&xq!94`E32hqakdn zAFn7@Esn_JoIB|-gS|*V1@AuSQs0=a9`JcLWdHJIXrYV`e30_aJn#AgMq$_W2|(yM z0CM0dt@l3dCfOQq_;I73HJwDFcRgY$NmW_Jx0 zi+JRFkPwq%a12f=Niu0NBa@L%GKe+mXnIRlxKB-l@!`A(*Ziou* z609S(4k2V`1DHidwls@b=_V&2I9lt&gC!Oc)Pkm$DMJOB0!FgDWNvFU7#Vs>)2af! z`vYqwk|RrAn7y!TtbXglz&E#xi`PUjUuo!$FOdAhnBe^{Htd3=78z2#hr2dc z>MstGZPL)_Ec}Zmn<-PCgU8ex22zweM5(YpBpK<}ZmW%n1~^mROi`o8JfAe}0$X)ViBL ze3}g1vp~%zKEtSyV3=UOCi3dU812H~fcARIY zm-^GcV)_H0Hn2ElC&$zw=E85uND-0Fp%S~R=^65wzjC45S^n=Q>P}L3b zPm#;W7NOceDN$4#>gBm*s zT|3;HcmZD}dxQTg(&~$7SMa7GsGub!f&mMW%WjDo%S9D5~CgOK&(o0c&~V65a3 zq=AeK=TJ+>`Ecoc8BAnTUjIJRn;5?=(8KGq6V<}ZrJFK{?n7sD5G?aS(Wjw(1 z-Ve?NEC#JYM3S=FHk3nh+@lS7YsGK*S5^JP$`K_dycb>84^_4wQMg3HK%q0?Mv7Oo zW+Y*WS~|F=2xMgQQ1b*iWHtf@LtLX5pZ)Y^R(#*zyBw?U5^yQlnw(Y{uu!nzCrn9T z>6kC{UCZxJ3pHGn5rndp3Kcf=R>WpsR>ZC4QREg-tHNi>ebJw1)SwOyl}Cvz zl0!zOK3l{{D|3gA`pVf`Z{)djbB0kgEYMTz{nYjfrB@D&U!cdCbJ|#bHx$N@jON!y zUkW3iwo_T+=$~6j;A21wA4TAuX_TS#TVyqvg_`;mUCw}e#AYG1sz(%qR?qkN3fG3% zI!Ii2O4V(6Ng(4J{exxTumQ6LSY02`W>%OT=v@lZProYu$>ac;K?Aqs;xfi=-%S+| zBTlcxV~8+RI8BWm#Wf}XTjEtW3QAgvIg;0ADc3?a3AZbgE>R8Lq}CW-dKre} zh55jQ~ZjJ0vIDoM4@zr={tSQ4b{T^*|8QQJ?pL!EX4@n9HPS16@{?_mP84T z6LMpzB2MV-{cwyJRauO|4lje6mHC`zkZ`hAeO%dhz$B{w(>fot;DejIkCA#N!k^Vd zUI*vx{8HpGsdcwG@aEUS)wax%0<80|#w9-toEA#%N;#*lp`IzNgVOdThwM}YTnZ?! zU}WntyVwf9xrw6^Kdbp$`s>?+d z!20mX>pEM!i91nR$e}oK-CcsyX=cI(jkK2%rMy3*na+0N%U<{v60{nox| zeLOg@C=TsSZ;1s-8N+QNA_juO6@_d%=<-)bYNIzYhBpAUpQQYUMU?%(_}aGRNJT^I z+wIj&}Q!tqkJXOVZ7@4 ziv#-+u#+S*rBOE8Zwd7j*cMrKT4b$T@OAsk$uf7x^3hRrM;|yxRZe;w&O+zGL}*VV zCJL0#38V%(ouWXa#fXc#HuLL;=%mxmo)PER^OJFx_6R)e10M#}13pBU8?F^1IS>j( zj&(s_D36;NAnHT))r20x16$EAdGL zdBk=oF8Aqw=k-GSya1OuF!WbQ^KihUj|ALb#%LFRC*sjC;EW4hz>NW;U2I6e#iot{ zBLwJ=3H}QBA22Y$UlA;vFsi>0p&G&bL=bEy0675-Igic|J6T%Pl z@!cgfj5ZQLFv!Eic0nzFR9d@mg!U~c5i%7E-{Y5~AKMi0KpqGV42*jqj8_=YEoV+7opUR1e>@tQ3g9%U$ppXB`aejC+;~WTd z4nZOhk!1wMiCFxK(@S(dajj4r6)DcZbOP4=ZPp$o#@9ghc( zR}zKQ9w-CA8KI)^&YZj}c_a!?P(%c%dJq{7fWCt>aT^iL3P7eWULlc#!0;1;7d#Re zj!1DPQOeolG9zNi@GTDjeb0e?Q=BK7;_lKN6;jAbW|*fA|tenfF^piX6cMw&)6-IFyl}PTX}s zvHA2r+>HR-W|*`8>UPBxLV*NIi7eKFW`Pm!MFAL%lUVOac^zmWnC34Lj?NGIJA7Oa zfklij_FJnQ(2WAsyXAkr{&C=-2TOu5u)&f5C-Z_y5)`x!lo(AaE!q)}P#uHTQUdD& z^K*2d<_U^2_yT~lDESI3nwAwHIFdLGLV{pU#e*P%CV@*G9;JAxsC0npNc9p>_IL+3p#YC2 z1~AAiFiCWn&aZmD2e%C*zCqpql;4Fg|Dm$(@ydu(qR??f9tPKv(%Y=}-&d;qQ+8A3)Rn<4JR zf$rWw-06WZ{vmc(64^};D>#BmBP@vsW`rsK=02bR;7J7p9uw@=-%A&nU^ECUYS`7k zKYB+E%l&)l3mRDV$x;@?4O&?F$h|_x#X&I#ypzeNdzAj#FF7__IK{BiYe0*G}kPoOb z3Vs)L5ntvQF!_nD0JxOCj&6<@Jw1-cH&UVT0)fx?yZE@+xwxUeEe2?)lhEWRAX(i0 z9?tZiAz2WWAO8hR@4uodfIIn*FujLV{WDDONl>wWM^!<9$YEh=m)9wr(dt43xTi01 zWW@l?gF?60LrHDaMYRJ!!IMe0|0hVClf?Hu7R}=0@xK$F5`ZXAw1yJ@SI~V?lo{|h zzCJM;G$7BP`5FZb^?$_I2WY(iz|<%D0dS$eqld5UQQ+yrIB}9cax_Ai4x0kO)(L}BK%*O?hs}gCFqW!t{e!u^g5_Gm=hsU2YrNG z5Fw=eb=SWRDhQ;&{so9nK!jAbAUwR!j=Gl)NbKs=_qvMA!6#HT;#-7nbwlTXjGqNVQvqCdJS zinCF%c#fVZG#sD5!6P5!w!%Z-)3$a;WN>2=ALO_?nez4o@idPU?^l%O---7ZcJ?CV zZ`j!a;)h6%CmM4`2S)!bV>Nm$9Oi61@rDzsdr;ugBnC0++zbqyWrCc*E&xMbfF}{g zqpfHv5KZ=36irWpb)q}10-y^yc%FO&@FTkX|1~?RI3RMlG4T#)dNOPC37Q%lN9y{8 z{_=O49%smtFkL7z{da~mInI!3>?aD;Q4C3UV3Ui82?_%F)6g-*C&mCoZyG~b|CUDl z=v19}LmUw)4WVWVJU&<;N!ou-+I0dJ4nX|)cMxxgYz2bb^$xK zXq0*QD^=QoiKu*>cmPJ7ou`}QAFY``8Z$?;Xc!*<)?b;WexnWiH}m`=F8e`7L8jM` zf1$Kd$2os96Hkl?jiC1rMiT%+_0MMFQKVfI(C#1f*MBq0VV@|h@j%;=nfdLGSdITOguT_-}{o^>KeU&`U@oOP+bGCmjoiewC)WY zBBYuxUi~knjY?D_jFb(80a1B4UUZ zs1rwT;KcEF!X=?2ri(?_w=<|sK3c4U--E#Kfs?CYFi8x9*iN> zFadA`vjqZ+fi=N4U_bCxa4z^2coMvhp@w0BaTy~P;|@k8#tV#hm{^!Jn0#OW@D0-) zvjuY)v;`zqrv!9HF&ve+JJ?-E<9EjFi|&EoY7m9XvDNDB&xfjc@*p?}Rp=(>CH(t! zCl_^eq0^-!#)GroMO2}?;<5bdD)QuTRH@;yJoo-KsHz^uB1hhL3N}U+dKw?g5N?hE z1bR@M0Flt+Le=y#(L9n%+||PzRd~|9hf9v>1eB^@K2r6PrZ2`SNbcm}1|Cqz<$X+& zd#Ta_g%rn)Zy!EMR7*bRoQ~#KH@l2rAt5A#OS+>Unj0(qPLk+ph|V4FtL`OW{Z}># zXJIo`O3v^9aCB5H;F8XSi zQ6P$wM;XLuW(!h2Ms5Wl<^v=bbe!3Q`GKe$ijy`U45&$Q0uRfd1J!)6rtlFcQ%_}2 zbm2v1@!x$C)7BwpMpgAtIYK>WRaw+>!vJD+fWysHU`51|q&i$ctv5OlOA#8Dj0mYI z548kSUIcn$I2Ilvs|UjHPe+f!nAib8Qy|0_YM2UAgBn%~fDQtm zBsfTg<7q3(d^o%eCA=_V&rHA;WCzFz~U(`FAc-0;7sQ_8#s1EfzuqBd|K%H$0 zA&A(Z^oV5|7z80!hR=t9GQkKDbB=%(-FGJ-`0vdq9J77hg%6q`_-nf_DZz>`V}gmC zY-a)0P97iR3}T80g8SdwaXQ|P=%3n=rH09#Z09XCj1cPK=jLV$5Rwql1H}3MK3f$L zMDREhsvIjo`y8G)6COFP1*$y?1xUM4#`5{i83#4<+?$4RK!_J)9Ot^cvx+{r-|L+AAi9v^B;x1s}`+ zs%>HM17z4UfAvQA$gv-wQgHuLDL`Nx1`Y-#D)AnY{yiiN3~>H2kJv15>W(uDIqDG; zKIU*+>p^`C&BQ3r4^mbd+KP7dz?P159moi~1%)mC?mAGgj0e*?RsfI@O%*1@6?~Z0 zZ_)@JJ@x)VpoAt3+Bac+a@~a=BtAqxv^nvRmjL!xG(30%1l|Bt=^~&?A-0DVU-X4$lE_V5*JWpTL8%RTdf~+R&=fP9*_-- z8f79o1|X)Ep_GU#(hzc_s2czy0CrFB0Fbh|-3iE%8S(^9n1^BfU?&jR3Fwa{nBW$k zJ*q!|!{r_TNvcB-iQHI*;$l!j0lr5C-Z9y_xj1A%qB*M8Mq#q~_8G9F17CNd7aB zJ|M)I9`foUIwqR+q`Q~(p!fttxzS06p4+=>PwZMteZAlg|1>+8jh}v;0ag!>4yxE_xg+ zKnKx953vTu0jQj7MFe#S#YkKZgmW>036Qh_?=ylK2024|(jxjRJ60tZ`Qecu7sw%$m{8@vXOu$#8RZgDwND}2uply+2mDJ?1bKYu1jht{ zv%#2v(%*tdQn6zTM?r`TJpDWz482{v4q{MI_l=mY0pYLcAIs}auqXlI2&bT{v;Okp zu?AwN6QM1*b-ji4MdK;PH``09*0=2A>=S1-&s1p;A!qSo9gKTOg9CN98lqc_{0A+6 z+zbqH&$Y|M)fg4jJNL|pYWKOMi&%~@+so3YDbl<=*!~QeFIb{XIK&uB`=XfsZ)3<-+pfu)j ze{L0@%oPu}ztNNPR`EOSJPjS7*K%N|w7O zuQeX+US`)ID-nDGU+X^iM)GHp`ZqZ>X=d`!5>R}WpOAfvQ*a|4h_Gkn3*7DJmy{yl zQYjw%l_`~{>H2%NSM@SyMPAl_mux?!zO;jFTx;@y_^!>^qv#8AAvOih^_xXKD6rDh3}W#>JVN(tF?&xhtE;_ z-btaZ7E^M!#@sG^j1xIX8EHM)6uDm7lcaUFAQ@h+p>&rOf4-0=`3GN1M?ZncwO!wM zGv9TMM(|Ez>}hta^$N)JC4)WntI~w89+Q(Va^+W!HW@m1xk|cyG}r4HZmHu{z^7VN zGnkq0i8sxRi6Idz`|1C^R4++?<$-`FA<6X z&#CArS18&`{g8o(_&~Do8we0{)|hhtOY_XaE(fL}1PQ3#0sKo>+^w zWr` zjDCnHdJBC*3|t^VMSo*)0H_$p^&SGyduzY#0U$rIkUPP`(E{XY4}!O7q05bUlnJQI zh&K=cq(&E{7PGbkB8dt8ORyuJ*+bb6FAH@-tmuD@^Oz3qhN5-w!7T^ZU#k6J$BwwH zM__<}6Tq~QwHiKpm-^?ca0kKz6olF_1OdcxC&&zPJJilKI7lx;NGO;B_=IqD z;HBd&A*mh%X9Fle3oHRH-_N;t_pSRDMnBH+UWR`Q>g@U%w{J+j|AYef=jHXQ!}-Rt zo^)F!jh00}X}*>;NEDs5Q@#;edG77EE_J`|_@JZ(kCe)vjO(8z41ZqBWMgvqB+w*o z(63*Zy02d>hKV2gtgx-Te?I@2KG7A4WMhTa_L*jLr@yOGYMYc98<@nEOZ)EGQy-bL z3^FlJYO>@X^X{I43(DkCO%|#xChi3!sFmC+Dvi}qli9H(i*reI9gQ6-t$-VvNml*z z*y!6H6z0A>-R4doi#kaqPtI)!*3UParM`n+1m*f~FB8=UiQdmsjWJD>*;Uik zzp@uFuU7Jqo$G)gZuzPiriA*tYPT*VvVWMeXJSZ7y$yFjb%Z#Ua1cUX{^8Qk(jT2K z_t9g94oQ41ReO5rqX4g2qW&Y=*3G2XCA4v^Pj?v^tZpeMvL}VqCAL+Us`C4bOct)a zW&IwoTG(2yz+r6P{fW_SK!jH*(dQ8@&KBym&R?%387Bo7C1MU={-y|9V{DRuD=ncv z_^_*zjmh<6Z&0t` z$_Fu+oA<-%eAV8)LLdTe{v9SG#U#&M3LBH#z@WL#x3X-jCyR`(&7wlX*Ia`o`F0^> zigU#bfwT;Y{5|(B!=3jPIAUI>(N4`U*(rX0p(6W5fJ|}5Fp*+C>D4`2ZBkL3PC1Se zExEw=f|5q|+O40T*?YhKroqV+sHHRXIiWPgbRT%|Nul7S*>?N%%|%=yX^s-t7{x*7 z(?4%#m0hOQx6k+iyt0v6Mvr=hGpdy29PkRoP75Z`0-QF5c*uH=Dee4FAz2G9W7_$A zs>~UnjWShS}dBZRX{k==yZ)e@hL5O$*eK(Y0(Qk4Ep15s91ND`L%1MXfW|-i>zdA{V z>}Q$M28=IYPNP~5)+*TTSSs|7Ofw--H_eQo zkuO}Ln^>;YH#6%`i&~rm3MyGeYeBBxlQQ4Zh-#_T2aR~qigK?GR#J(sGr0y{^$9*^?vD>E9~L(6IJwrbLxUFcSa2$>>a{2~iXRw@?`I3I#%$V@;NWuL-3<=7_fnV(7O1o_^Ok&k ziOgk~?D;ZcQ|f-3hP`+ufOwyLa*BHqtfyhk0VRRar)_+&r>tb-^04 z$9M zq2KG*L6-=s-&j-b&EIkA3jNN1KD}ql^J&n<)So}NH@3H!!d3a^{_b8@|4{7$8n0XYq6ILpkn-oYBXCxb!dOPs`0O?zG9>ByfQ`4y%k$OiWHN z6)ao5&o%t?bD^Z1NE}&KIyGT2F?mMjd+7SphHSd0ElE>41udM5D%sqq95$rY;C1>e|ZF9OI<*_N7Nqntegtq|BOW0dYy8obTxsl0e zvSL+klEHjZV^o;b|MUlq(NEAZePtppTYk+^`gV50T$Qm$)mtf_ilKKtk-qDfZQb`0 zu)VWp+?tb8DFroYWz-$L!5XXw4KZuQ5!*aRD=Yrk-et8A`iRqZksLXd9-Ce!7v9_q zuM6M$G}M-_^1wpIIJTV0L)HQwUbpkb<$55uKGDGuBoNCge$wwiC-EDt>*W5)!dpaG4Rg(cQ0ZiP@CWWzBHgMqxF2`M844HbyPZ}NOjW51TK)7R%khAaUFINfO=5>(=}!w?(gO(a=F!#ZhVCb7brZK9uuK{Madv{G82g!RS z=yBnBBbZe$Q$~@jHHfHS*j#@46QUqi;=N9T z#lG0Y65Uha6ZcK-@hfRIqHmVsXKv(}@>ngO{$8O3)kR|RSk1DAjfA)$pJ?ntM*PNE zleqNKKsNYvJRtiHO!02=ip48^YB%z*6VK7WWyQ1EihkLyFo2OLGpBlPJK$9z5*WYIa zkrqu zr&aN~4ON_E8^xF6!gg2Xyf1%*REa#LDgMI`U+Q1ETnq(QUO_STv|x(0w(YkRw$FDH&%F(W zQGt}sg1gTKYP#nYtMk}nAh zhjKgt)+}4*lJf?p*}I~;y;_kg)`a9W1{+%8qD_I^x=HKhkDh>{KM;dNM{U5=ZRBLz zL*y?hFvINHTV+ba>^92pg^OPK&S5xj44+TunsD~r*j)IqGuOC#2h-xxbt9On$%Ji0 zd*HAsS)MTSTJ_VbvTIQ=%<wJWi0Nu}iEt2ufjGKfQ zla*`g247}S5L+UMK3)PkB=dK|_vp*fSfYr?a40uY;0s|dCfK1i847@9ep)4DKyOK; z5)oJBCx^ML4@f@{k9Y03;X>fb);NgNPgL4sxbFkabAQ;w>- z(LBSQ^JC&(^KhWpzjdFrE{!6AnkR(6{9Y!Thp~k|;f-%EzG?<%ZrHqdOf{EArnwhb z*ea=igG!nIejA^a|Kr6p~4EjW;KOJ$^?&G z#9A7M3PGi<*XXSZn1(xh&TstLn_e%DX)d(T1L)-z`RaIX+AMq@j&MHOySpo9N zJ7e*koRQ^6+bzv9;VIn3J+q(4uGOz?OIS0x{P5>-8BOsAMTnqRQ!*SH8iqHU{6Usn z*2{5PgH`e$1^cwfa8LJtGbInHS7xzA0zup`v4B|}+Dbf6y zt*B}_X8dsh(~ynFku!}(^L*WDNJgOq4>9c$PqKu6LLRICo#dCM&~|MNGO`kx(XY=R zU`)Q}$&K2xlGnQ5^ZpGSOfG3zbf#mt2!tT2(K|aFZE21d*!GG|rv)(}a)Zv$bH6UR zGB>G>LRr@NJ)b><67)8!?v)KAQ(l>dQ>n%fuJgLAyz!L4+PesFTIrtjX8aBcQc6iIVSSnsk4@*KyU=tB5EWZrwlNM!=okB*Bzt zy3l@y{*C?u$vv;AV8##C=RjZLQ46g|D3VC8r8@PrcV{m+05f6$=3WWX6QM|9vJtH% zEh&{wVETYLji^oC&XSdXRKy*bv;}@#oEL68PsW(+*%6-MIHxW%~m1#U1AB zm_6HV@NV>;tb8~eJwKS_==ot{_E>UB7g>6L7UVxql7e;JHW?Zkfu5ehtC<^loB2by zr8^*s88v;BPAc=YXJQte4h{%VSL69G$Rs-LI{gSHKZrc%oemmv!Jf$Ysl%dF;eN@> z4^&2yE_8#&_wL;2it&)V2<;NR^T$i6slsqwcNtyIf-q5N+(Gwz~#Kw{&shJTc>$_ z=)Q17@Hvxx*&Sl$_V)X@y1w$wET0^6pk0!>+hdbyi`nTskng|GVT45yn7oi>bcz|Y zw+XS$3t2ew-z7eX_Oa@}{5nA77C*#_>(^n-F+b9xIn|*KhRlfe}n=xSXUXd=El@9cM@5QeX-J;b~0K zxO@mrdxCmIgfJuuiB*cXceFVP1VP!+xLjdGi#=2hkyVD5{X3KiUC4$yaRN@(%JHlY zk}{&nbL=)p$nxPRr9Vl%e__6S5A}O~S*n$OxY;4Z12w1IpXp}yY zy)n`b>y%P3F=v{`9lT8;*U8`?&j5N4L)jVeG0f84X7VZque?lNH<1N{1}l8CD-46x zK3{=9vxG5|G9%=4dy335_uHk|nnUZFO`7J1dc>I?$}(9kyi0pCmF6E+Av6D#jD7yX z@^tm-Cq~9hZ42oYn5;-~W~59CZbSegi>G6Om#-v|uyUuZyA3fW!{-q0!hMIoa&qWg zL;v<=GPd^wQdDb^GuK}RYX#bnM{0=+a-}H3V;l9jU5BIJU8(55($FmUSrkm%^NtBa zBxC;Pd%i(bpVYqX&+qRncTXg3jmTL}S;IpcSH+BNKH&LEQe04gLI!uqrMug{TiYKx_iBv8g~Z$7 z0d@}wq%H7NGENES7)XOYY~#j6@UHUM^z#(I(Dtz>Ca>?`>k`M=u&ekM zKInSek+2a&3HlI(6JtYgMXQ$9m_30YprFf#45TO37i^&}!&g+wMs;XTi7YiV1^K{l z-=p%|XaD?sH);uX5xJMak!{=y&)!}o7n*)oi!<^`(KV*{y1n<@3iv$nDlNGOf6yZj z^H-<%d72row4LIoZ*2=wDZ-V~NhPCpfMaWB0vaH2Vl6n;V3wT8Sh__?`~a~svk z-MN%@8{IiNIw1lH3xp~w5#Q#SK@%I$I|fY|Z%#QeXx>}HPY2zQ7h(l-jIyWWgg?t@ z?b6cuJemP$0RbBq0pUkY#*R;)oMzN$&cRB54K_O)}*L_o@) z1hqjD<~jZnTqUh>{z~wmI(VbpO@FN*?&bR$QkD#c?)C9P3S zo{o3+J;D~F?>0#<&#T_xn&6r+D87?TnW_Iyp$&5hwn4RK%ALI&Sosu(1{5;Et_iM) z+cDvuNUMx=mup=nxQL@Rpcu$zmLNTL_4%$lH|bU_MS{#2Uc_~G>`6E%UE_S^6kF13 z=4dJ0%`s!FRd?>$s;UQ|j#1J@7S3d!vz7 zcB_JzJ3D!j3nyZJSW_s)x`AVUAo4&y>i`dOZ27PrINipNw3yUz>X)|Tczl&s%ceMb zP3MtC^HnUd$A%&BciutPxZ39zZ49`xKcz*u5F~d9cVUB~c(tUKFB>=T_PyzDyaSkH zGL1wgaceqKw=!0;{PvY6=NIzU-Vj_ot0`{GxlG3BZ!A2a$~yj@_VWDQLlQ{|@DH|C zN58~*wu;lB%+`DNEPUc+6*@ zKL;O6Bf{DuRISn2&@{vmR8HQL@Dj<{BZI!)nQj%3;xvwP+N&Pbbw|7qHzxgwBZiC!cD!< zkrLZL`1Q>gck$*<#Al`YIIWB2QuZ}+DIpDKOUH$;J-YGTn^`w-$t=;2F2O4r|3xvK z^x-=6_Z}r2g1s{tkqBX+UeOsf8Tk$`Pm!%`GU-Bs z->|$cyzY?tVQ`wz+dhKt-cldmdFI_z3f;`>{79EBK2vXdr9QF%OA9SBc5{pjxHyXv z7RzbmM-tT`@}jVNIfY$;MlEGgMxU(Cylm204D4mS+h8)C@|nR~d(1#7A~3+d>#m3w zBVBGjf#pRgsk7--EMz~)8M`#gj`&UfIwkBTp@bWmZTBCLMDN91Fi@lV0 z$ogp7@w(1;yCoIZ3nbyn(p%P>7B8sD>r(epsD$=67WS8S%Xh6yt6}WlbtZ4UPiius zpishkL8Tie{V->w&X#|us!zY^(`xb<-IwV$Mr0gBk+1ukw#x&Lh{?7kyr2@Sk+yX>K80_9uQk0H#mmQ!3Rb-VhG>pT0Oa-rBw11s|DD*A#5auApe>ysl6)U|BWbhpti3zj{$AW~^=O zxkGk^PIU*R;NW~X^}u{)|AnSa9zgD$pg zKFEaQ%e;5<6>sMarli;v$G2b!#MxaY4$38(nxd1c49|2&Jg2PpzJG-;JSfv2l7%h# zx@^!(<`0CGycB1fu?QJEAADgXE_RQbx$~5mL;OpD&X^|mM}QoV9bZ%T#8(W+5G>uS zy|h_dK}5J~BHzE&lR#|Ua-p5w+~Jz~-3z%7SD7lN_5%HGkHE;E_*bj>R}+adRmjO% z0AP;>qcupGVx(V~^XOAJ#$yXKDXO$a$0$2_lfKnTcMv>eJik$t5Ztev(YR55a3l~) zKl;GR?riTBU=tnY`z_;3#Z-QCn5g3Q(=vmOU#wW7AGu%hmT@jnHGK`-S+{tw+PplU zAKA3YaP~btXk+!-3O#_-?E?bMya7ibc&v+G`O1B-#*u{k&4JW?pGks9GoC1T6#0nU zlzE+vX=DBP|_bMAzmf39NB^bamlW*hl+I@6P zxA+FDzw3UFMV{E(hgPCoQt5J()3bQujR|bl7!wKSR`%d7<%^<;63cl|&Q*5f>qG2% z3kqaSOS$uty!I6chSe3&<)M8#Hcl+XM-_#Vxv{k97wd?9-{#A`Hrx`_T?>(o;mEHLIBev@Rvnm^VQ3)nc4lQt;od?13tTMt=(qO^1CJl17t}}Jdb?z!Y|4~KADiUjU z_m253G)uB~5ZvRF+9-++?pMfYd~wK<()5i_gMBvU$^!zn;&_AoO=zl1a{QR1tESmv zg8J1gaaJjW=*MdLMyg;a%gQ-cZJ1yi)BGZA?VTTFGu{VqE!>7*8#neHUIcOGGkqWkoC(ka8Xy_oK^fj9M1VaEr72o)Ht7KYxzTTmM;V5J#DW zRb)W1Gq&ffO=QzqxFYa};(*yhBDuu~hD%LW+H5*fixJvRkF2yYigWyWJDX>WHcJ@& zo~5+&J#aRdCSW8MQU>IJoP8aRc(<||!_7`HOhYEqayD|{cXjM?Cc`CbbIb2)z$t|q?&Lzm8n#E&|hW~gjS z$hkGVfD^yJ(^j&(*kdBcc(&FlE!+Q#$oIK{iMcrbt&s-a;ji=kypyx`MkS87@kei-Gyui-a+Ze2s=4mQNvf+K01|b zanI&)`h`kYX(Jo?SRG%}nm2;kK7=|Um6ZYbliUvSweIc}uyWvB@})?|Bhh?%)d7KV zY%KBZWqO0Otj`8)uM>9}KB|k|_M%V@sV3oKmVOR@5dqLzTyKx z&{Atq8fzyXN;7zMW5LQ^RCR-fq%eqHO)z`twninh*j>x9UW}33aeMUuBKI*HX@W$C z!2I#ATD%SSry5e8y!9c;SKsf2Gd${}uD|obyMEqhhM6ThH=ZeZ<0{wbZm^ht>opvM zZGTQ=zO?wF*U`dS)?#W^l1G%&XJ)6kE=RX=Vkv7{rfcJdmRsa$DPceN`Si|>8!bxy zxDE`l?j6Lu4Xa%>ZGF3MhKH}657Uc|GHJ~n!4)O(cid$Q)q|dXUPx*hlaLHACIyCW zAMc34H2Cq}Ov;;KsO7g(|Jotknw`A#xptF-QyMa+!QDlqr{{_+W9^&Q6VCTr+Rx_s zhx0_zX~!$y@zqDPgj~7)vi8C2A#e?#fg(7>D^(LYutKmSl)Sp^NE~A5SnHgS*f1Ce=~Lnl{TpVTz1=57!u8t>N^E2aEJKs4(YDp&qxdJ z<(Y8wU0zSWC2IF9xNj=x(Ux>^-sjWr_>C!F3aRaM&E2LQ!BTa9a5b&WE+UO*Acn^Q zkOT7inqic9DOp_wXQR@lovYf#B=21?JbOEJ8jEA-9qeviQ3VIrscdtKr0eF6%rx7B zY7b2FMs8OkOp|NcE1ckU{Z@0)aeOEpvR!&OrdC!Z7K93CrXcW-7u*!tQ#>C*Nn*xJEh`s> zwik?Q@YC(6$gkr*u>D8@=ynEI%qR$nlw4z;P4g)M#a1MiYWxEmDv<<6VNWw{wpbW< zU6VfH$DLk^K+Y|8?l0x%?ASV+PggwK679=r0Kr#81)r%!IZ<~MyhLKCmP*-po|7e2 zdxwR5sa6PgkJ4LvtxjiyA`@HpMN(gBW$AA>aqkbY*QG$j>p+$bX2lvv4W!{bOpC4k zEoS%YJQ~3-=a(Zr&ZJHge>!L4NAm=Ei$tjg*Er-o*$po#%sU^zVifyz=`2$oZN$_@ zb>xc7T`I0f+tI2q>fX2RpkjZzT|63%s6fffH*w(gzW#KtgF;8)S&*5WiP#32OYTVq zjfr8{gr`1qUNUGTbZjo>P`>^>J(F0WBk>((xmET^)ypL?D3b7kEEe+Yckhr zgK|5Z^1M%($#EdT=`k>1W+5&X&#ITd-!ye8G9uQnI^%+Qb8twxxM;g8>PCEgT+Uiu zO(wQD=?9#Vd`Zm%Z0^w>W~tM9bDCKS6Z(!9sKpG& zY-$K)KR}Se4X>_0ek6hmBg=!su5pf9o+YO<9VB9Xx2T*T7G?t-CdD||T)lGsMEOLS z`1R?5JsaG~(jH)U6++F1cyh|X;3c2XJh4xBVK>aSw)C-DqgKL_rm<{>Z|Ey+`|g&0 zD___qU6E57Nx@C|73~hJQJCK30Oj-uAeE`c zPCu60_pYwG71kxntH#(^U2rbNkqRZz>MllITfXLW2V53_#h5C^ERjESg`m%Ou7=SI z^Df!`=XG-=>yPiX@K23Io-149ZcI0U1EwV;!|AmOa`?1+dj+)+=e~neMFsB!2A>W6 z`{4HXERA#yChTq<03#IFH}gIi$_^g8toKFZ`#K;86ej(%AdQdrNRSMl(n*svmO7;6 zZ)h+(#H*5YVj&r*ba|6}Ygfdu2Mgc5HAWUM)Eee2s@?K{-}1QEpQvj8|FHEHa8YgD z+YC9xkkTOy(j5}gUD7Gtjf8+WbT>$MN_U5VfOJZSf^-TB2#EgA;Jxql-tXhbGiPR> z+Gn40)?Rx(Yp=ENP;|{0+WolF;ADcwIZpIlUV|g@v8SUkq@=QFn7d;l^~kAVzCyC z0f>YwFLkZT2A#@-q(<-DB9+7CJl;mUs&Zjmzc33iY$`4){?Y($aC$=6HmO7$tl z;f>nBY~)4Ae(D$bKr|n^qr5J%7=amvM~tTtnZY{1O%s&|x>A1A`>qrR8vWvk8d2eY zH!WA>GhA-b=8~2F0eL{!*7{A09x$|{KGxKP`e!er8Z+n@eKF51Vt-hDdMa~&%Yegm zG7mi5PuhwU4}?!D70vq?pYHB|NFEe+w0^@M0_>h~QeA*!_~d7Gfuq}9uc*9uFZ0Ia zVNx=1zo2&!4$k}i1dDkimvfIw9uFk%>Z<+j^FD9%TpTwY3}9y3f1N*;oxU4MD7_N+ zoZ-BJo^aUJmopBniJ$Ii=56yC_yATUp2Wyacyv6z>rWzpQ7q}}Y~g&wyR&nYIB3K{ z>zlmZV`5AtDUZ$0a3aQK>m1o4chZ$$baw+S=m_ZbuUUg&_|K3M9WmQ5q8dL-TJNEh zc0uv=CvlAazP#3kO$~0F&J-!X7d@qE$3g=FRiDM})9j2-Y5o#EOIZR6tRs(*C;C!j zpsBLqB!{M8m}P@dRPrP3W2g1{dKrw$oQlPD!@Fy{{w@l&Z}OPa#>zxcQo**ne#vjQ z89jR+I+`ZCn9j4d(&#OyqQap`vcZqBJ|YPY)9P!kVYwz6X*^C&$oup+f*(1IMDV%*d$V&RLXv9jPEpt5vl?`NoeZGd1{@;IF_0AvZ8X!ioCk(k2l`LM7L_DyWxgb$5N$D|Jp_^^r}*?pc=tn6a2TOu@( z@|g-*u{c}yMQD^&?nNm2yn%BoZ@3s6sCXU_=p+h#sS8E(q?qp+41ATt5w~-?=%qS^ zl)Qtqd&_lpD|F_VbR)ImN9k=KiSf;=rx|cg6u(TvoDQQq{Xt9|ENObqPA0 zEGE^0{x*%B^su-k^G;QwXMhl#RT`1oL*x=A>*amQM?ZB{VGxz`*6JhVx&*HfFJQ#g z=zZE9Z1+>~pYffh(Lk~9>@uu8yK>`f`NhQbW>IHI4Yz+ZqL63jG6Y0jI~|FmV7tPR zqVGs_cIn2sdAe=3_NwU(WBpheoGI~baSDtJ`c+Y`WN=Y~k2R?UP?4RFo} z_LPOfHW0iHgWZBtwb}>)iElqH!CVKYXwmTCpuH1!gl( zC!~lIkOdM@?OxA%3Fg9vTd`m<DxYqA)l@SUr5=0b4I11wFSqQv!q-rP;nah+g%|I?E>1=j8vi<04m;TJ zAlB#&Oc{NOmkta=hJ-wW&U2ax-Zmpfc9`=gh{!18|Flg#GAo&6IoJz9O{bJ)2gam@ zL&z=X9~3>KN;8EQ?oEi4tKSVDQU{l8`gqoUQ7({1dqSO)TfHv&vhD4%JrpuxBnW*A zopwf^ISnzE{{`O1iu+E!w76MVD!RF_z*W9W=ak_Xdn*)*we%1hU-UK%tlA93(l+*g z?=)p>z+U2lgMnr&6zuUhSmk?@WLmRiZM1n*TMnIrW^gmd`;h|h33aPheY#N zG$FoUT@r(4E81HJ^ZEd_FOWp49h57CjL?j<<91{e))N(n6G}^^CDDPfJS!~BAmZ=> z>0SOqWSjc4DV6+1@~LjAX|=~Egy9p^;Se~BAiNP;nCl~T5=N)xxmnbb-@0WaJd!PP z!PORTLIYJ6`?(^f<%ijGY!h*+h2O5~&i`>BC!Yc)s{b9W&*k4MQ^{XK7E(>XnBbO6 zH*~bWXSKm~{gt1#rHcnc903Jk0yb*^2z6(P!j#&hic0ejv&ohEG86TWIfq>L0r8%s z;`3l;{o!ygo`gz~TFZ+`l6uaAsh3K_hxz2+YoDZITVf!k*6?9Q{(FT~YA8RZ(Qm?3 zfSZSp=g*+T;~0@ZF7t9g0Ls!EhQIROTyIY|)T>a>Zcx{{nmg{O(T~9cXmkfwOU84| zFaE?5?wdo6jFVad1brm&pMHeHEe^1O3Hv>Zt(TIU-!(b6%iPBfD zr461=uEE_@8rC^;tVSqOm}0nbLkK-f=atp7ET!3yTIda6mTBSldh)9Cl|b~0V8!Yy z+Lk!-La&1A53kUg43GmhNz}^xSnXP}$ZG}t3A`OB;N(+EJ>?bbtR)dH?Rk@boKYsV z=^Tt4Kfj5P39KG_h1OsI58ErV|9#(d5rJkS0VzPB2+thVS0<}pfp1J`BiOQooFfWd!Fw$ zj?jvg79othrMaj;w(WDsv7)DrGmLeS2i8EyNF1;pV8&B^s)WGwl9t_X#xM!F2B$WH z3|H!*JVi|}+Q~==3PUJs2v*tfq9(V{QKod&t!QoJzIerZwHLA<1Lds$c5hl=`gG}PKe(~0llqTM zS?N2#uGIIX7t>Euhdg{ZvOh@c zOEAA7#cn_)FHvZJASlrE)30#w6|kGgQaoyH>J}Tg+&P%kp;4&`Em$})$v(-$dv%Oi za*UY3=OT}fMKeL!Z?@0XRN=S^o?;2tB0W1D9E||FB=~y6L?jCiJTibTR`aIg2)p*|W z%DfT818BgUjo9V7A7uA@2Yij8&@p{hh8Ug32{_D>Xex-(9wF zszKjZI3gr1)rL`@!eOORN$o=2<3JauoF+d-kjI|DXWoRF&*GnO=E>&pbeB+*b-4C2 zA4UvD@G2UwmxRcjI2vrf8hM4pCc;;@eHqY!rCU!FolmfunAF0Qtiq*z8F&e+f+}iuraJ~(7&@@jW$94<# zF}okD?RE)K<9Zyc#vQ2|$r8Kg&zR!^f{#;)%LuAZpNer+su?Mb9V z2Zb(Fp{2}*i{f#ewdPQCM@nDQ_f*wX&+_e|k4uHzY4?^hDV8$Zow)YIir>=!UVr8< zEZWx_mFS62l(TDBFh8ujSFL|2_nHc*|CIQE#4u4prxIK)-j|Ai7gx;ivo0 zpN)9#f7Hqv7fe|2)T>BozA$B&?wv?Ep4Upia^XC5P0E9R8Zlz-jt%zM6nf$H)-j=Y z3_8&j?mLwVxpg0^GRrSpBX#NhlA#I$Jhz$eWe>Tdx4i|^ zIIW~CB&4LP#2`kmpb$UQOJS=-*C&gMy15#_?>ylpuf%7`;#9<~s_zD^PM7x-G7N{I zAa=d8BA6ET4H;cLO9xw7&76S*(0{Pqd~YKF;ufjGH%ej2V5>0}g*8yMshW$dOHx_x z0Vps&bGAnhO9~I8nxkGeFGOyUIT{$Ar*%x(^fId}{Vh^-io^hsg5n4hDJzUAA}RG~ zzdo?a`e3QbvS&p;(1ZHa0lX;Se~OJ~l%USGhT+m>{w015#QVYe3L8}vf8pV)@5S4L&1B-pIARTetan{5I(6e#6UfrJ-U$V0^7vLHg+jma!9-@B(q9q2Q}a$XQ)0 z^IWdNMT#QJ94S<@?3HqPDVOYtf2(tT48W>B6AC=AEkjQJp7FI~63grJ{FnTr*I!dN zU+RxH0dhcI!?l|ZfAktzYr;6`D|u2F3&2pMEQ8O6kD9|i8r$Qtmd`1BW(z*(Qvb>1 zwRqWAL*7&5wfMNZZVgnEvewjrApe{kE|1`rTr7OcA_ckz$W4|i2&OW~X>Re?#?7a0 zF>Q?#AHRUg%Qf#C_;!7 z-%eL8^YufogZS>;&d<1Cdax4y5|k3U+|zzL+is&YT~&CG51$@89->NJAQqgfxWY!Z zP=E}Xc5ztMreBU31bY;6x>@LuQxsv7SM(&Y9dNw>YyykTT5S}vu!mkOiC7mM@lZQd z5RM1=h%9{41&2}aQAuxxMlI^cv^0|CAfqG-JoA5f1!JErvD%`kr#)Z{4x8DaIGR!K zA=RdkN9)ci5hM$3fv)PtjoEU<2x8E~#fYk%94Z3-q{FJhg!Ira*aXM+5}B#3ma^o+ znp*o9T4fZRjn_1xS>3L0Axf4F6w#~jE8(m_Hs{~Ir7AGrQodIfJBBsjMlxC&zz3bgF0j#=}0(b!P<@Gl1p1_IK7GsQQZyxI|%tGXZH&Z4TuK0cV8gD|X3`KWC zwgE>|XxtT9eX-45VvFhvVHF}i8KnycH_a2>$Df?x9{5^Nz;zbwGB&oC6!Gzi?X>Va zpFmG9eWGu+t6p}e)!49HDx8!)j#!3=FI_D7TxKZ6JQr8$Gr9rlKrpF#e*)TbC`MNo z8Q5-Y1(h#gMxLHv7TrwHKP!7BUw+yTEU3#%bBa;Lif=sLth>GFIe`oQwkQJUFgy!& zAhj^Z`n5zc_weZMl(4P-&f(Rsx-{mFIOy~5sfpi;K+HQ-a5J?q4^Ht~snVMp!ZE6M zevIMER>8_1J?h7j6+qgRglfz^n2`LudRz1B<=w{Y@!Xww3FowOSzNdIq9CS^#xS-V zg_la|PoWSDKm~g@R|8YQ4@P9G97%r%lId`fKcbgY%>3)jZlJloNJOP;P$fp7{!Pw9j&m#q9r)4t4mGU>p^p|SM8Vz0=eF7&+*D&zSeM3_x z=e=GEb|dqZcU3#UQ{`U{B#T@z2IPQ3{5+gY6B>P6ZR>WG>f|Q#}=jsLF})>_1->YlrF#%rht&LBa|u9;Wa|`!25ek z@7gF)a_1%PsDrIy@iU>&&v6PKG=8J(PWss5qwH)hi0`MylN*BTQFrT9mLlF>m>efB zoF*GRA-(7$Xm*@Jmxb2$hP5Q_Ki)=8U6mC4>)d~ z{5nHdz&uVCN?%a9Zp=I~6f`tm@u~GhI`l${U86Zc39tLs_9PJd#aVS8xu5+7fu_Y? zaze$5AHNRbcJ*2h;u;)5m?uK^m_5Hs-zo-~Iay2VzBZV=Wf9tgLnh6u+syFM@{DI_ zrw;RXE#q}g<2yw84gy$<0-j4_oE7Lqt?-$tv$n*L`4wua{a9vacdgN+K3`_dU1jwW zar}T~U_(5J6#I#&FTK`)Ez6B!KSk)Qg`#rJZ7p7(zlfl{tmZfEBJ-}1J@>8Q+Q*{~ zrxE3BXq|zC^FW=DdPgiuSjBrBTH)hjws&6W#D$Iq*@x>NfEf`%8Dm5SO}gV?NNt#; zORs9!rjhRfN<$Q;D=ldy`@wX}+wvMn2agLUOG2ltP{>$l*KhI{3H&H2__lYD4#xdT zoT+s2;2=hbsl>Au?oG3?qICkCD*Xm@)IOujKiK~L82VD*`jh9*e!=>F1^yH5sKnG@ z!MhU;8DsOAZq3Q39jX;(*jhFAqK+V|AIH`~Me3aqX8{Esfc3{a=y+A}- zMVv~WcECzJG2z;iqYhYJ#`k#N!wfHLMdIG74fd6+0h^Zz^Z?TU9&docsD?zUI3rqT zb&I8eP>g9ty!ZP$+W3=z8^9@8nAS@y>t>6B`tefeG=kEy%6IppSJS^aV6UsI1>gC@ zKrWs3T)&U1)Tat(vNr@BW>a}R-^#G|V(J?29kxt=D-`la4Zh*u6K_R~gth=(K!ZFr z5XRv`7c3wBCUIYf(*h)}5EoX$-yCk>>{(Q4itJ+p2KQ+g%`jPXkgl2I1<(vImO;cc zAHh`Ufqks#qqhwX$f0xCra9kKVdMe^KrXzWql1wPHuU`EGCPRQwj#1Do1e5c)Hde> zGN#u04BzH=^PR+BjzBRbEC9wnM1}k>iqUO9{(`KI(c@4K7sQX9iKiIHmpb&ClL@Ue zFfJxUsGyLg>;6r8!{R}`3C{aGIZoj`>oNpP2Yf1AM*Ux~z$1 zjKH1LXMnFIx#w$l_a=7BAN-fEO)!dWf$e!X238?CecYg|5{O?MbZvunn!XG!`BVsS zkPl&0Ery;gWz_ylC%(rP1Mppg!Cn1vaVA|Coc7!1g=>4SM>}m z;?zfD{6aA3#5(~K{^y~V)mnlvrf4;VmC(8mZtwIb0ep0Ox7@is*bQq?=r(WJb|`Om z6}^>(J#Q=h7jFwrF~ivkhw--CuL0h66KFedcCNJAbV$oO1=Z#X98IuxEjU9e zF1@9)1V^&sw1vN1-0)%h56tZxi)%k#c?XN}tN!h)Zh8_udoyJFJoEJU02Z_EJ9de+ zr7p#D9KjhVNvohJi6tc1Oy}`3964aE-M8U0&!f5L0raZ|dtlbux!r#VZ4*qvK3to5 z#Bmq#EIU;9sCe2S!-t_y1JUYeA<`Z%64^BGcD7> z;cg#g@Bmf%siMhT#n-tCJ5-hdTseJ;#?Xib?Y}u&aGM|`YYr&>cu7dT?EN(YQ5-P- zum8{Z|N6>{zr5UO{bd_*oe(zKli?fat=;D0Q2A-Z;i;eUn`worNaCY_SbGVI`tTcq z9eBDQ4js@3qL5E^| zN)|tjS)rY`*C?sNTiVzcTuM(LEg$Deq(L?SfBNR(d4xMKrn1Q$&6ZS`N_nlsr6j?H zxbCkW3FwwHJ0+zrr5IKQ@NC1FU6$IOV0Kf>)OrTEy)&Tqj0PFx?2%rD}a7FN$001!ypAG;x z8GHhOcmTiw;DOeHj{*Q36g~n#IDjw!Kr_RK003?ad?0`T0R8}c0r&s_S_$4008lA- zW8i+k16KeK+zWVp0INVH_5kbyH~?@6;0VAmfD>T-8{i6H0Di;C0c98f(1Gv2|AJn) z{@W1VLjD1;lHbp1RF0`Ursx=>Sdduxpr1CjNjRe*CIAQiy2t=0$1)*GKkiok(%-N8 zFU|VZ0>ay=*U>3XF1qdArcL7~erd+J9=>|h~y)h~VF$yB)R zy&#eDlB@#pC4#??XD9Zj?HHf?rXne%c+h@6+5Tg8L1H^sFWM)?GmG*|5=EGH;eGq) zyX}W2{MA0tZ2H)`{d8W@#mX?1hW#bp0Vn0eqC1_brfX+M%QQ7dpShBIKmBm47n+d6 zJGf6Xs`k(X#N(#7a(-#uz-OPxEqY$o9nyN8)NA_9S3Ro_0~84}#S7M)p*Vq8mxLhS z*OmElUpnuQ{?|Zv(qHInTffVxPiI06;o&x#ZD%VUdz3uZa`XvV{1)sGlrp8#o{|`K zS8tys%Kw-2Y1~H@FnL#9gp%jj_4*r}yR0KiYvuZbJb8CQvcbesZcm^fity#orA>Ehst14IZwSVCP}Bl^|40G(m3?)?6b$ zX6JzB@*eYXq)fS#$C9qlbEd&@auIBEpOyQqSdnKuimf|Je=WLL<@Ig*rBgPCZYc(i zyQ%o;&fBKf2@*|5TBGYQ*CaqO?jgZ*!rUIP5}&5Fo2r&PyRbS4d+{EJPB&91oWmJA z9D*s0*r>q>U4LR}yy-wmd=+%hM+ydiisWYVRxB#I`Owcp9!N=!RWpP+)39Jd1R)!G8FIjp6D;$=ijG`GL>U zrDVq~=I6r$c)$B8o&w6Tfv>Rv{Bz}9D+3o*i@51&#S?4hA88Im+Z0_K+(hB=#rM8A zL&*H!p0@W|i~Y}~+oe1Zofy!O>B6^MHfHNmDV?Oh*L7WdeK*%3qO*r+39Wt!-8(nx zglqzGQ1zdA4qLE!4xh1bztc$ikURjqzNxx=o>jn@${5VwCNw#-+;vF{2{z@+&PHv1 zp4wmEuWx>C+^ogvV9}sGBmN~f2yMO2>sY|bl|k#6xhr#bzV0XZn5S@MKhs5X7XJyv zTc!Gi3Yz$WsogqkwyQs+seRVT2sP4Z_|@BoAIS~{v%dg#BdR;uc6ef*wgGEbO233_v_B%M_>S4@&%pu3k2V-x1HVSyF-|c)|@Oh#d z_wA8X-4$nN5a%ev%$v5qmp_tF&ifJQlRsx=34pGhS zpAf(;g2$QrSuDD2&Y$2&bmgx=lIwL4kiW@jwniZX8~ymxhGZ>#QxoyK%boE%sxXTS zI?;>x41CMlgwIc7pA^wUE0L5eszUcwhS6;3D9PZ0eU9+pc+z(-dymX#SV~7w7T+7Q zK8_CtyitPZ>GA=IkE#sSB-n3zj|wlcKW!tzWDk2urQ6&QDAu!e%IoYE`Hl?F56f$IolJ84U9^X;2A{TnKWKX6F{gV&fbnW(8mkW(@Mwmbk!nE zDgONCJz0J}JnlQy%qnIr$GbAQkz9@0mt{2AM*PTiIp~o-srii=2ssAq-=(O-gX(XR z$?Y}(fnq#d>f@^4Egz*yr0FBFlFRHDv^NGbwQWk#;tWX5$&<+C5o%)3%Pl2pqn<_| zMk0EISXDBYl;>~Yy0QgVhrJo6^>AxDg`i&sD?BjEcvU;L{OV$6&P`nt)i_YyzhGW4133cPfi1Smq!4o9BO7cme-JQ*i44e@(U- zIP3peV`2^t`ez>Se`1Xq|1}TT;N-FeGrU~0tVfKd>^4yxbCLwz03|76I^}xqqM?o>_Bu+g zr6I7pb5rtyz)rfOCZw9gkfdutPgcAE({u;#GRM93HBt|41Jufv?P-v`7)Z`)hhJjl zp(I={U*22v3*=ffFKt%Sb zq5}m8geTm5xhqatUq?_p<=xx8L(_kq&yOXJ?;=ONG9!ZnH-WZ|9Z~{Z&Aio)2qzvj z`cc=J73EJfRnIr71}oENKRodp2<+_spSp_lSh&8&9z`hq;gJc0-lvQD_-GFBmFjwJ9zMeHaBZZ^AT)hEw4WNaYol39~ zk3T9wsWe%~o6-v!+x1!^<(q}1&D=IOE5zcmT{2Bo7QU+QNXFQL9R+j-Y|%uzl>=vabV(7q z#LuHLBl@g#>}S*54l*okZh=+$fph&M5)d{#oG(Diz2Zoqu3*OS=U(sx1 z)y*%z@d#K#rXzOnC0@vWM)(9jA@6XDkc-Xyo_m*J#DS%8x^7x3NpHJs_R7=6l1 z)RKQ9Ch+jWf{)Msw}3Bozz_A$Xym-GXr4gw$XBR;B##7k{v+H16!ot}xv)qCJpYQ@ z4PAgqpynfp;2#k}x&Mg}3IuC7g*^LTgi!83)8LL{dH)t)f2VtmKS3od~8rI{n`QzLpPX5H@&tpbaKtfLQUuv8XsL3Sc0FKhAxgStK}lIQTBO zGPnph+f?iiAVDaFFD$v$-+x##{|^r*(bT%Z4ief?Kz@3F6@fAz6OS8jdSw)9-4 zGc!d2`ebn#T!IRkS7vIZUc|N*&r}C8hKE4-nr4dW)+bNr+RC3#_Z#n0AdQQBtEP3I z#{T>aB}Wa8zHYeJomj;VdCF`)a|51oSK!Sx>X=BQw4N)}m|4)-znDY;S2dFdyO(=W zB(i)O->^v2dBf|G@@oC&JtG#Z*=C`^2;DJr>RwnNW)o1KKFIH-!5ZVNju3a z{gfLXJUfZ%>TH?3%(as~pm|YsVDO-Bp-f3$gV^e{gD1%>YL%y7k`S|pM@spk%QifY z4HarTR5XhnXz*OFA%;S2)O5Z7Y2;$r!lP7vh^a}HC7HQzd~125$)G6{VQhn$^5<%S zNQ7)JKURKJswzSHryPT}ALlL|8L}l#eBTwkm!vZ~kqS$FVDNcVSwfDK+$Np$S3IBa z7B@Fs0iysT5BJXq$;A!Ta}TZ?d3DvWC$^8ET;@+_`mS>jh2`siUy4eS*Zx%*+~zk8 zDhf5?;^ydddMYiyiklRvBM)5l8Ct}nNAQ^JwFD2ugdPeS$RX-a=D-gvX&{#7hz#VN z@CNw!MuM_Mkm3#6ka#wdb5?@NJ)Xy-r}0V=ztJwxSx!L9$f~un^bZ^O$;1ScJzr zR=HJDp1~rwTM#kFlayXbUy44X2MXTb4Q_4WQg9?zT+%4N(Y{#Y_}%>JSt8PEA9Kv& z8%n`DOBxt^N00nhms#_c=%E*h-)FyLJ6fq5A3w63TkyF|ZaqF~Dc#avSyyxKwQQlb zdnxU!pijIX=#ERT=S1NCF_7ntSUn}{;yTj46oi|(t*o3LeP+qVjCZYr@;EZ#WiA?} z$`kxe(Cepmqq-wG>T@mSr=byDDiR7A!Tus4Pdm)Y`33bFzb0h7dY;7&=Lg^19P(ms zhT5(=XX$#c0D&)d5QHZiw>rX_hg$mW!8KbV83d5KAUJL~IPO#&G4LbuFa;yDzf(Rw z_#Hm~pXm9iPvszF5C1EG|FczUf+1L!n3a=-i$jQ&lb_>%OIA)^4k518Us)*jsSb1y zc61I{g5wt=tX%vYsrl(B{7nBnGAvJ+jis%%jk^f24e-Ou*23LJgqu?^6~qMT0tu$} zu%VaZ{3nzVkl_Ug!XFHUnY)c|RT2QJ45^K>{jvrTgiv=(lO8Wx%3gX_$!esk;ev(f z>8)*Iqtq%wk~|#UFKy?uBL=)h0=gTY3t?CiuxtWB@f$WDaBr4qcoM* zoDD^p(~B0ik4c|aR<~hTYCSf}nuwwrlh97PttkE=Q=jZzYzK9l+v3{mR&i6v*zyO3 zAf*uSi=RzNqo_ICy5c=}*rv6%PtWKX=xh)uy~;-Q4)KXprY$PEzP=d^n)x@Rgi1%- zS+seM5@vqB_eB8{9o_Q{js1=c+-<8@Xd@Z=1!}gFLi>q^0Uq52Rdhm_kqc4J5%O*3 z1o<%|gBDHI&OM-y(G972wS~xETZG0CEciiXyDy}8+Q1AeEPlS+hGCUj+G6`1RkP1gtyPPQ zmAI|jc0{=-&cxFhF>AewQPn4gigtaHk1lvEsf^ zR5Hq(>BrRtC{K3)JK(2=px=4$sCO@3BhXT4_fhZm++t)YB1#oQ6`*pxO}}h@@}V(V_t6u0AE^{FBwV12r%b&IXz>mvIvrtbWK&UvXmTe#3pMcW z@NMsW5|y1Z8U9vfdsx;nh+Tx9TE8Q z#ZX($(C`@F#OmVB%G1O|bxy?;ElrGmS^Sd>`!zXZ=!($C3xu@Pcm(8-rb%tDw9V?^({U z3|__ldevw((eS?{b+KX3-%>9^T^^6Fw&_dCi;8yt65)Q#>##-CB_F&Wz(hTW%~?h> z!8(OoU~M-v&$AmZc(kJK!h!Yaq5J_|Q^D5q%1^aAZ6)6+3vXW7b6XYdUiTO^iADNr z%CTN0GQJ!^#Rby5FF^%N4xhv1u=YQ4IBM?Sa#;WG8ajzWAMOMBuvxdnycsM3FgwJqHsir5W6qsRrIDdzOjj_RM(dK}Z1L0svvHyu6 z``?5j0K0@}A{x-4>Par)JH`NCxBk*h%udwRbV@Dxjp|Z{Dz=r6B43j?U3j>*LiM8D zULC2WqfTdb9NPm*)E*a-^f)%wO-K9Bdw>KOgK#FFI|+Yh5_6*RZf{FBFcqt6>4Q?@ zR6cUaDHxx67npg6#J6&pAQXjD+7d)-D)*A|hxfv~Pf2#`c2UEDpL2YrEd$!?Xo(Ud z5KGOV4$tvcXz@-Zvx^=+V6OCgq&kk*TjtFpz{?KnV1d`jbnr** zyXd9LFyd4l>qBC%g3BarCA*ek-nP4ZE77(3&d0{nok?Xe?g7G(;hEaRLFtna2yE~73J zNT#GQq#Vcg*u;U>?&YEXy2)p%mfq0m%Md&JqHSGpk!rcm_OBVe zsAya8b9v2KTaQu2O6eO3?2}4quEn)_hVaA(E#%6zOyJRu><-FD6F%nM9a`MMZ66$y@|Cs?3q9yJm8KH&3p%WcKvAv z9)6eN`%stESQ`qT6}&YX;vVkj6fc|ILUbi;d2#d2FVn@+7?~xfg;AJta8(HOu@q$j zF9=-{FIW2n(M#gLq^BbgvvCdxh+C|Udt{2l>es{}&6c5Ggygt16<7{J59{ZA(t_0$ zs&}2jsbhJttb6B`VDvS6faCH8m#>T#5-}d(gwF2I(1ddg;E8oyr%B=~3ev{?5UfOYHpy z)mn=Oh`~;I@HSabgNqVW%Dov{9A4$1ua=MQS+QZF>=suc_=h8G^Gd23MGqOh5qB{z@1*pmQd!69oen8p_Q0w?^V0?QZ)s8VS|223;;I?< z*@-!&+J?g2ps$mcMF}$DwSX#idL-6pYksjJ$Rn|GE;E-A-ixVYfCF4Svpe`+ z=26%BmX!VgZg@oVFHrGWAA54AnnM7-9vJVJG@E!LJ@`5XT1!V2Dfwb|+@W6a>ARwg z)20Gmb^8J%7KNp2=zyK>>{^%Qv(~?9wm34AG0aK=-O=Bn+Av#7b6?jp>8fdMP1BZX zXG;o}*ET8=4cnadAO^+>Ml#LE-5%*u_}q%bW$pBbTuV0U(&H8kHREj_=~+a5hFel? zZxs|AA1bo4X~Wvs8))OW^Ad_a6&LAu#+ovnDr6#g@$N1vEd zsStY09_<{8k#dY!FG{c%f^_32{!LGAJ(G>-VPx9X{#*Fq^yKiBCb4X51zUTzWe$5^ zWu2bvxYcq~M3N4hWtt8K_Ul(!S3xB;wR+wJ79Q}c_2jU z(Bldr6K#gXrlQJ)m-TEODHrWAdPW~c+?b)Ex9h!<4ecCc>ATeHZijy3dPeHR=^$4! zdh!#y4CqTSC09=|rOyWWvmea0#$u@OJd~09|9AaMAXgcTr)*pWtHyN2&2a-(9$FC< zxX#&Ihn3ZNdfBu)>S6*sg#PKf$_4NG)(dQqrQxEhU->QNA&S*L-j}ljL*HM)?~BX_ zNE<8|zVv?j+l;s$>L|9FHKn3IsKh>ParnNmepGgSZ)KAvUws=}Wp7u1B}$o#tIv8P z|Hk;#&9pBHnKsrLIf|Pm*U8@ey;?&8agJz(k#@3ttWWMCj?VLbbh{0&l83f zD$58ZNjgU#Jn<8x>8FL_-7**U%WzJP71%k=t*Y;JsxY8ssJxlCH5?MG41(_it6GiN z)N=gfa>*i~gt@GkWyA!qE^14FO%FS%tC(<%q^7}SlguBkre71-=5bdo;71e7Tbcx` zz3i3KuSr*Hny@QXS1L8DiFrNa&V(3Hx0(m&2VgS+P~VXw8g!~y(g&mHGhl}xX>#T1 zN*5J7Nf|>O|K`G-0nER#jS*TkE&}|x@_4Jf{i>29K>UOXWA)pGizEi8=gV&{Xy=o@ zX)gn@)E+X;N6Mda!4$sEc0Th{#p)F$$g8vB?6M|yh-pXg-eLblYDo^!4Pb3>tT_|O zYy(D^;}%f*is60f+<)m60d3>_J!v& zO6Q(eU~Uky%C>I11O#?LMHgOXeDNQuDA+njPD; z&u^u;3*C!6tgSgoW&5hjboz6?mD@CP3(!bT{QQ_PHBj(4hE!pc4EN_Lfnf4bdSiyd zDcTEnqKp)3Zies^Sd3)V=^dIMzpY_hc1wLL#3ER%DL8QDl}tjCuqzgBmOi z*OnMDKTq*s({wZ02MkL-o>gxyK5fxn`#B3VGH6!fC$T{ZbU!mMH_eR5K@jBAES7SU zzJL16gE&HrED#$ftfCP&$I(!bQ*LKQG$egrUp-|N2*ST^>Qd9+iZjf9l%8c2#b0H; zzy$>i1Vt_O#8XR6aAg9~NF}%9l0sn?X3aQ^wTP~uokxDftZxKjd|z@2IdC-~m*x4B6JK~e_J z^`;CP>rJ$}!JztO-QPD#U2moc_sARrZ&DQ5W|zi#1q}q<%<;pBZ-{$(bb8ALw8eTi zJHq2zBFYwA)zXz&j3}<)?}|K?j(5`OfE0x^mhc{%+x;Z_0>}ZYn)RwI^w5HL`1H%S z`VQGu)>Ki;Sevc`MT0elNh=Q(`Xf2_)$L$I^%xcn(z4f7kYpkpMohn$dhz;OYsN^! zm=|_7P&vS^AeB44*#9B^e+n`Q>A4xWAs&C{r`@Bb1QtuSiVQ>EHjMU~q^v}G!3noe z;nDQWyce+Q#&Q7mg#?4SY^OjohVRXEWE^WBl@xVnXJ#5vboCR(c8!b=_4GHJliZog zaOf6RFGCf4*X2{U&?>*;JF+ghLe)B-Ws!oVD<;}p)yNR7ubywoh|42$y~}H4Y@4=i zw8(-fu!f;-OxbMuyZ=&Pmx^HuEKGk@LCeTu451r*X+6l1me(vP^w5Y=Og)c*6BzdH ztBpF4k-OEnnt$tU-NuAH4`s_mdsDO;eiokEPoZBt8^Y1KY2H03y_a&Ve7(KF8++

zfGW&&wV^D?%FHt5k>@ zhW7B&6F!wOnk9qmePjEosDf+CcfPr5%vsErl#a%0HrgkCMuI${?)KNI5`pM~fkbaQl;k zt0f~04DXb8$HLcZ`$37{o!p*!$1z!j78+ooKNk|h&x&+RKZ|2@;yn=H zmv42>$JjJTm^t$%K)KQUG4~5~Wv*4R9Lya3kwBw8Mm;(ei8KnzoB5cuPW(-Qv$6O` zkEEO!R}Mxe0!jPoIR|_)MyLI`PTigqxyhX;;O&Cu)UD9dt@$+OTFYG%q>LH3kf6#I znibO{g{PgT$9(>tq6ZFaRPi}$$ngy;U@4J~81WNcQ~LFJb#pQ67ElpksAU+v9zlofd?HrpPt0wqo;inH3vUn5RrsUw4`;iclhGgEyJfWk}zGJ z_MluRj}+=ENT@9HboL0t<}2HkB24FSD_Avv=^RVZyfB?3Rp#8oO=D_nP~Wzvrdzrb zK?uvRF|9urN7q)^1yu~YcIMlsKEKcfgDbta>j)i;7$)rlpou%t0T3|@CgT0QskANb zMbWj*Sj4)jw6~XLR$g>+al1b3<{$D;phx4KBo8Q_zw+VBXrxbUI;NHDbYYcCVZ?Zh z!SJ_LAr={{MV1lLhLHLz42*fP_75Bn51Km$?2k;84k0sogEbPz8{0b~ry1uC!(WWEQ(lf!et8^XK7hr-vw z55OK0tc))LL8!G1SV_5(3glcXw`)PDNr9DxriTpwyvL5R?uTB_*Uor0cg2ppW`} z?(g3FzV9C|ehx=w)~uP8Gkf-0GxmR6T(5NvS!HW$;%;~I=OFAXZ-A>1EISlMOy>AU zrykO#NO&jhKj3w*gH-46*~!pB6f)-SXad zOZfPa*xeNEe!t#b{Suf#j86r!5aW{(yZQcc^Za$W1VdITaLNNl44{8NVfU2zy?2k> zE|74^yj*@S^t|SU?8KY@mgzq?%L_TfkdWTGzeBp~I3pqdd@E~dPYlhhR{rl5NEi?$ zT+U^2k2viwE`UVjf|Uthe@zql** zoXuLpq>#aL^xOu)5;R+okN|CWFxMMdP;4Hv``t0-<5CZBtYIAFps&>W*ug5uONhX4 zzxgixjs{(3R~e8YRLIb=r_hc2@Fn(RH-|zSOq|a*#E3_?!!Y-yTOV&GDqGGBZAWQ8 zaQ~F}@*8VQuD9Z4Dt;DJ9Y+>XDt4Aj7iDq;kLM?ZN+Z%EFAnuw5J4Avq_23B0LjDF8#>;0g3oQdVV-oAYF$#mu6@PBoe2_@;I2)&O6QE&{))o=m&U6>)C?Y3 zxi(UN5rBJz2J_Fljm)IJQ1vKo-9*$yj&b_yOK8VHDHYQk3h%Q@UCm( z@H~_@C-tyu(`>5bptzNtS4D%*2F(UCmbYCW-G6y``?hi_mwE26vewj#HWreA$L*wo z@vqYt%S#`)Q1NY8K<^ik%Mz4urv15o#!I#1Y$QZx!A1|l)I%)12orgU7Zi6xCCv;E zRi2Ht++Z_1BovmvOFf!ab>YQppnNYdCtBqVD>}vf>9(0fu`l-bN9;Q3#yP#Ec5xqg zHl%v)g~q3DPLgNC-dtXierlF$QveKF2LEoAORPdoazoACtRYjtQ7>aIcbE2?4Z;$NJ($ zXNBNRBgC)QKc=EPwM+|4)t50;tzV{jy!co!J(f-Dqe|R&vAXvM4-;flVqab+%umrs z@34R3tOXWuQz-3v=xO(t#WdslHNPOq?5LPEQ!>#uHx$7){bYa=O*P_844K9g@`jqd zgCp?v_V(@Lo!L}!9Fcp_>6QQ#`J7LOAyB3RF!;F@bmi+o+hu4Jn6UZkE~ z0N*{iyt-NTLLqLHv4RkbEE@AWEqT*4eS_zUnR>?MJeP8K_~`bOlCE}PP|*64Wj>Z+ z(=|HxGWO%LUTH0Br*9_eUV!ZwX`xZ@Yi50H$PZY{g)y;SbG+jI91AEZ1VsoT@sXfh z{E7j++|)@MLB8803U~Q(H?-$As)oxe?g_!=CzxgmS35m7V_m!n`#zhscWu=_e5>rw zS@-NaKLuwUxWQ@X8A_LO(XGDnacgwh+16kO|GI2xv*}_$Rp?c^p1y&1Y8bR!Mi)%D z-OKkl7($xw1p%6mx)LV@7+(r;>{64n5BAu$#hJUs=h78?y`D=NS-qfmR0V?{3Y;?lm7A7iZMhRB7M@>;wnSY|{hP!6OH= zA2Xbew)YCQKZ-~-e9X1%jCnn*mm0aQG2}Ct1>J49znB3XJR5klaCR$Zna^zf{=)23 z&0<4A@pLIrENK*=mb1Tlyn9rW;aFVnx4w+1aXLQaA!MH$I^5K1>jn-t!WZuo8cR_6 zJb!cS>#@(Q5!vu6~ie-@T+T`i7O7P0UIr&m9o{kW^S^sk&CLT#r?1Rd6j_gF3i|v*t&Jd zN`kvDQUnj5yxBb^h2ycBqjHYG_+66)_boPF58Q(R)#Ld~YvBM@VWVZb$+*Sbp>C-r zhLznjV4%IKA7`dQQ|#9J*skPmI!xA^LC1&tAM4Qo$@n1A>}cL8jrj=AB6sO3uB7fk z*Yl0FN`aAO{!0ow>* zgKVckRr5}%jX!Fu9y_h5zRX#F4hli4fa*6FOxD6%6A(v%IkKIBFSn>Fbt9-Kl;mH9 zlGpjeJk2gEml?4`aZRncIEytaFkHo zcI@+ldcc!$S&x%ZSYJARj$GN=wh#Zs`aI6E`cyaTb_0F=al`mg-}7}<#FT?;BFuv? zqbep^izKZNg)-{*j&}zL==S9`iqmeX1^zT3k$MWfaX~P5@@GWO+-MX(DNMj`H%A_8X)W z6>3|SI;y!n_2rnhr%eS5*huuO@QJe4RCN)WEsVPum`o6(0^X?AiKzyr6b#O74R=O=4aV(kq5@ zgRAJ=cA0WOsTDT+Yw|TgG_?)xza}|~+pD1_IgT_)8(o?wsqYQW%PkQNuR$hAX zSZ~}aZUd+q-V+opJ<6c#VzE@dD8MY*pQGd5y?2UmU&0f(BXvBYI^RYgL2|3ZzCad< zvDd$w`b2Ler#7Zfw8nP(JK*Rkb(b30KWu1_@+ioE3cL$CYmPmJG++GY*JstK(asE=2Nb=-9BlA2L*gx2RzDz>(LI2dd5vt{* z`HaA3V0Uc(JNR)5jP&`$*Zs|a(jiudGi&#tlc|p@xz|2jf>m|Sg=@v$bKL0oy-aZ{ zaP+n#_uFn_^vlFv`=_7|QrJKSx$5KIDZP=@CCTH}V{g3!aQ*zMDMy!oi1Y`=h@Njp zkslP1){wqrIre%`cWLFwd&X`Zc>JQ(TypV}?nOqir`z97h0O&C`)zrpz^A%8|Kpl* ziOXE|hmK|Bh{GzX>dj3_pIbfZyoM}{tIko8=WtmNkjue~10bI>MLjaSG}hp^Y_~?Q zI(TP{Ge<|6<-#Zav~nbfqe8H%s#Q*L+N^2|Tr#cJ?Cyr>$t8iTw))#w?^@VWnbMB9KESobm;sHGa^hZ12hem4_ z^*7gR7Q+kDzw|Wh0#pQRmlcDs(NN5iBVdYnTt6SRW39p4A=o+KGABMB0+SJY9}UL? zS~A#qIa;_T1Yy#GJPj~HL~T1v79CV;hGBtYJunzZ+z9hShPK)xVj5xY=n1_saFD1L z=8r6MK*ZESWmvK@_9kv_U{Du~0%WX&*+I`P7>*K5C?H=Kj17UPgejtfc>%EVAblCk z0ol+A3{r7$3Vw(=G6ePSa9BkL6Dx~b)+Wvtf7ggHF^T>NjlvdCWFe z1J$*$C5it=#sp5D$DmIjD#f~FNTo0XeO5!TBGHkwuyEmr<05JKJH87H!oj5>{HqjH zzlY5R+A85v3H%k<1>I5iA2j_He5Uq`1QAg_QDMdhF2;Q+lmJEAYkx>JD4~i zl^VDzItW%nEibCT%#np2AW;VnGonZZrhyJ(_`|}Hg`QxvKTH%=5Pa(o zGrY(rz%P1ow;vAlBg}gl7x|5I31SoS$H~&t&B9$*f)}9@04qZSG3H=VNE}`XO&H_} zb@y=*MRQ2p$$>BekmS>;@_U1mDll3^!6%p&IM(SNAJ-tv1c|{1 z5jO~PMMsiE43hQ2e2|5{h`3&4q3#@v6l@HHVSqH9r{wv8sPACs5LultV|0*r07e3? z-hvT<`Wg_mitVuLNXGg9H`W@EyaSgoHNxd$*`<_H9p(fg zKW@mN3&R|F0_@4O!u!XxB8yjbnrRZ0Fo{L+Z1|F5SETx3KeDvB@)if{sPCMQ9-ywJ}< z#NiSmuCu{wpcfB*1Z=2$2sVF$5or2w$Gr^a{sn|ah*0FjLqI_3FeNzW&+?O4NEO@{ z=qD?vd$V#24n=NgRAJ?~-}J+}o$LQqpf@gAhQOy1jrubzt>mp1x8O;LRv$0KywM7I+qb z35wap0g3Bgs`MWUW`M5InzX}5hYyxVdgPV%y@s6qg&S%DeS~U&fG3YLMmbkzc>qIh zm5lGZ!^@@;#&xy2jpH7G(`FOsk?ypm^hnCJuoAy4`3l}^bTDdV#M_HNs=Bk7V$o{@ zc-iw|?d{?QnAvjdQBkQ6td0@xASA~KH%j@W%yia_Stk{*&nuhh);K-RI7D|0RUeVM zmeo8~@0<{2J!!TtbNegZmic3KPX$TwYE`3meocN5&sG*05gV-~DEeGKW9m=(BGkMBjxa3n&WT9m7ItaJ;+z zUCQz<;HAtPMnCy{YRaGN3pMFQJB2oC?za_T2Ju3fh%n>X+ZmQpT}2aFlwXO=@W<~N zz7fVWd~hjKB(!z3#lQTCaRcA|m{oGbM)>B^mSn}H#26LS$Cs{9galHEzliN7QXPq9 znmU}#^OCCf*`G>pIM@LO2#b5@i`$5|R%#j={2Dl1whLX}JoHqoQM5szmL0p69`(ma z9s2uh(OaU!8+9kX^UzN^P#&Uw3^C-MDDh9ok0wfLzwOr^6KHnb{(N=1@f6HfKlU9E4`lXBhJuLm5Pe;8;5o?hW&pJzQE31X0%3=?x_xguX(E)xd+LLUHD_VhgW!)zofo>U342d%G1}@`O5u#7 z)D~m#aO(E)x!)*Qx;T0M?sn41^q$Y#J7k6bfl*s#!h^-z7{^E_>SX{WK&`AlL^OeH zF%g>cfL3O(>>q%%e!0b7p~9gD&!babL_7~mc__Ddg0esPib{FQpy2noEL*(-M*X_G zPH09tY0c7Kcmrfkiwl-=;9EaZ$+vmzUvut;;?V9g(*o&e-jH6v-2@UjSHv zbzxre$&gahZPmv3G;i1mVf;n&KTY&J;pzi=_(30&CIVQzO`b=`W!XU^SgR&EVL{V* z1fh1Ho+?+fCZ_wBmxsefG6xT!^P9B2h}ief50$p8cuXoFTM` z>dZ|X5r)U+lvDGUTiv=RTyAzt+L1OJ!obgBss95L7={4E+#wE`7qqU4c$;8C{CE}h z!Pgd|2^vAwC8uw+kREEwR6TcZ5kcj7*?1m7AY*nSRrX&*%AN{szLsvwnBYifKAVor z>j7qpVSKGZAaOHUbf=rfe{SGatKV9< z=uYb>10@b^j=E~QB-Yvrioh5lDcK1Yg>L0E9LYT~ESBX0)t=>36B)!mEyz~`P|FX*>wN9U1^6vwhv;c9!%;mfj&q^;5q z0@MA0A3PJL-vxf?-ZvQTVc*xakka1_U_*WvL~Yyv&_CDA_8=?@}l!vqJ+YUUPH3e z*2PC96}W1ioE|<`YnG4H?FaW!QTQ8gVZHh+cA^Vt)8;6d@XQ#SVSw*MbZYNV)TypA z4qShGVxXCn=)7ikW8n-XNL^r}M<+E$34`B>L=`J1)Pl^9j1`OTHAXvk=@!x>4G}Sr zpx-gQ>js}FI<+ODSkza1jf9qJFFfX;{__Q|#YH-)aJGnJm6pv4%${Sl4Vu7Ii$JF? z2Oxa7`-<3RD8`q)9lJ|T5cUzlR3!5m6m76pnHHzjSFv+rshQnx^b1c^m9*j`GyrPf4KpY40>YhxF6nLpzF6-r)Wt6K_L;F))~7_S7dKo$&YmY3HlR zSp(@Zv-+O}sO*ISO%t@ix_XWh%DiwMG%ve5(b2+ z9I%4D;FhP4b~jK^ZlFU438L3Sp9bjD2z{EMPc!5vpc4u)o}Ydr|2`>4)+6DN@DFV4 zE!^as?CqV7oSCp3f(`-+J)O;MOst^2JU8Udu^W#Lp#}eMdpZu+LBm9RYG66Q!R?E} z!`bb9GTck1QU;$K2hZbHI&O#Mjpuq5K6y;nGqPl8aM?Q2q4YKh8R@7*X~R(oZl-Lu z(p6N>2fBAWOYMV{Ec+v0`aj^&+8k;)n%bIOLhLS>ysq^N=r*$WX0=gMFthn}WomJw zp??3!!sV#g`1pQt{o`V*==5-)xMA--bzoiP?)nNiGrV~)X z5BbO9p5uenijr|YG0t2{1gpHRGtq0pu)lP@2t($uTiyKTF!m9^|n?69r?yl5g1~8tx zw^tCZTDmWK5H0zA(J2{$D6Ltf*M8r#ZFM_6diXG}b*SY_D>`;f`vlZInv~!Yc2$F6MCS)Ng8R-3VxkIyCzH zomlRUPg7|j#a#SqeF_jj@6NXEhtmRkgDRlrT)){*QTxf)X5Z3>v82wZv1v`6LG2Y@ z6T;}LbbBHA%IO7O{OYzw^8ME|Sv<0@H`#g2wHqd^yyZ*qI=21z-Vam8VkCh2JRXd0 z3D5QfV=@))wnXHWdEmF4S<4u+;<*NYscvGQAKTg z=}Dh_Sc#?4kDTh>T<6a4!BIw8VI5!1;iNZHsj6>}F1+oNC2))vh>4MAXk9-Zt$VGl zqO7tPNv8WLnOV_DGWl3@nx0zf^Q^`AFSahFf6acdUl%g@G**jjA-f%6G_e_72v#@& z$rKh9AMq|zO17mad8&Ue1S{EQJ}7?@8M>Z&LMUIRhH+x+2k1JoS=u!YhC5U!dTsKQ zo$nA=LDYVW56hkaT}|*I4plW*oiQL2FOp7 zDjmlhL&U6JR$9p$@XFGJn@f^86&6uT)zX#3S|Jh0MsYbP{w-F_N9hW_JX;> zqA6t(Gw(tezwYbua~<8Gs8MepD|m8q>Y~wJbC)4>mr)lj!x&le@85VFJqMi&~cvq-Sd6U)@PJiS<$v6wv{=smA#F4z;M{(L0s zy8`^FD@)rYv>7pxP*g`%;@*+E_NuD<4u~MC>KAmQz<}AC40rwfSSY`SksmHgU~7VrV$d}aJ?oA&o_$; zayVI+-mMrV5>d-*cWMPzdF#joO~29mX&p0 zPH5yX*~(GHwrnUhc*$25@vU8Y=YUod@x=`QR<_R5XZ0mJUdgsKbV84K#gG8MYwHf( zV5Fk+>qutiJr4X&sjM#x?tbc1eU!*^`uKlujiwZ@rPYcW(yBF&s@2r`X&r zA{*|$em$({vi$aslx|FBay4CxNocbKi0%vX=Kib;r!RP*bU2v^$ z)C70g?b=L@vU52Rwc|lhbhZ&f-X_;;t5XCcd-xO6)s1Y#J;v&lNW90W^9K}-(D|#c3 z*ib;6^N3~ZRHMXug&H2Qa(-xQ@55Hix{&W09X^MK3r||W{Y7kA7i@sOSDs_xhe+^P z6Ll&onfrqpwUJ4O1>Fn%+%_Uw%Wa%H9DUtoMI&WR=j>+ux(pTw~T7qAs8f2?9 zq8-1*J6>FHz4{=_{(GL!6F1g(*`$)^*3|lLJf*&QpE~Y!?d;U<%6T8g?SjcGP9v%$ zpJQqsv*%L$P>|h;pwnpI#rzaj)U)7(R);RgAJmfGcxW3~u2bItq!)uzm+y_)mA2!? zSz<@i%Xn+#OO2aKwf1EYN<^S=c{g1!>QHJPwNj{c;rjQ7Q(8fZU=m;JWsAZAAPh!IC+ zKs<%M9i|sI#=ADc>b$qL(2fueT4C!b{C;CJDQ+0aoa1(!P!8G!( z{V~iya-!$?qa~+}n$5e{>jH~&%sVd!)sk!ZM`plqT2G$j&V4d$5G5 z$5xPPlByQq=2#yY6kd2~T>-RJm4K&0!@c$(Ye!7p;2fom1Nz@;Vs?aFXI?{@;2sZ@qzN*;HTeC3MwLM!X33d=bhIHPW- zhPwI*2F9f2Y&oh^Ca%D{HS$6$1*h7943?bHFsc2P@0Mf3yTnTsnr|L4RdFpGWOfsp zMo4wkmlPxYE%fR26v!$|CmPc6!Ur9-x;1I>Z}n!mVy zkD0!7Oi@5dNU%=x<^f`+>svwV_m#r~le)^shCOopQAdT0=A>^$qK5oE1s-1e;Y7?B ze7W-4NMOA#j25l;_-NY+FKZuI+Xu@1b$AdN6mq;FM-q(Y*pWYAn-!rCnTy{ zn|PJ4D;vxHnA&{%m6hodF~R5RYC_tnWGJms8igz&y31WCm_d8EGGH|C8}-n=j(Vh zlI{d=_9oEe^V~%F$l0X&r0&}(`lWB@H(fmAZugA@t z2YUS7pYXV^)Q5JMXtIyz?0qlf;0b9<0?6|^WUVY~NaBaFFjkDFD{QWbOX)MY7s|Nv z+;`zo_j-h(8|j|@P-1&LC%Z;2K)P-(#9bf=uzAUDnXYzaif#b2x}QiAgq5RkI!V2p z4Z1!)=GEZkFXu%Mm=q((emG(?ab()kx$eAq+^-y#XWh@pRhBa>SI>EAS=fKrYoexF7!BJ~*LF=3Wx6EaTfSA?G)1qIvT{vi zpeF9kxD}Bc%SbGK026u#O{zLYl$EVrz=S8u2o6+x)e8%$C;|6HsoZ!uB`#k+7B@oM=l2o33{ zvZZt?cX{xpTB$M>52}gXwtpnnr)-q=E~vx;gP^G6;O#pVJl$#OvcufZUX_-w+)Si` zi?|iMXtxdJ4Fhn?^9*2AQOa_Nq^PL%sHiq!Wxs?{jYtD!>~pS8D!i5XlphZWzuq)_ zjV%*Am(zMw(JOuhxS+4_vhmY6t1ks*2Wx(3ipHY|@u`Qtwh3o5%KI3}iBL8v+thWG zNCLvE;a>yp%gXDuD+}B|Kx*Djxs&DMuKX>hn3<-|tt{dx#qW1CJ)e~@^QkaDf^$+j z&+4Y zLJ2zl>OxIVn(`%Ud&i}cDd!ET81Wm7f|q57U$>BFheVp=*(A}5+cPN*$J^g~7pD_M z?$yS!NqX_rxyW;ir?CM)O3bEZ!(o{+>-F;4%v{qssq%qbkY*ixzW*_L#^E?^N?^qf z*s0H*uFs!U5Rx}dapt6g{J`^Sg^p6zF9VFkax=rx!yE#Mj?WHx7h6>}<)WTos`VVV zy-WiP@XOtT+>W8!kRqH!7fLkq`F6KVoV&~uN7d(ZH44{vCEv8~=e7wReY;}gw%r2# zCNg~S<$|2?IHk{`CVvPs724&J^LJ_ie?k${`fB|+OA?o4k%x*jy%!wig>lF%M)6Z+ z#ptME(Z8ZGBaQ2+Am|^Brdc_xQ5cAvBXN0OiE@rjhe0vUZGEw&1 z@ToIsbv0mLDY0@j7!0^N3VTBofI{V2#`Nup(IqeW9X0;>qStFU_!r!O(6%eF1Kb|N zG*gv+S)T^@;%X@1Guf8aujLzF=SO#Eu}$r~L0h z1*|Ic`;9~GHn{X+Fu*jxIgJU*5w(%Oi4=~i;h{&MA0V*E1`G2m&JQnoxSf5Efea(k zgv8}p9(HC)*nRJ&_x{_DdB)jwceM*Ovy`&5DC4cGFEO~j!6dHw`c*U9+y)`cm2-)O zZQcOegn~!gT%3Xo@&*i}-OQsm2Qi;9$PlN(PnV@+z|kK05wtFSG8Ajl%6V|TbXA=; zi-TYi-B%$s@8jOY5u(BCnH=Ic6LB24wYIkJYQcIO4itSm-ac-HUMFr!@ZW7o-nSB2 z>~joU^=NS4SpT@QpMGt1sNNh)b6Ec9AVwUK>dP2(W=$OXbT5T2RpuuhsteqwlO<>d zwi-Ll^zJAp#2O$MXO$%llKxK$$=~a6zc-ICV~K3HP$$la+Id6d);@P>)<#`0Ako?r zJz!UxVwjgbC*9~BGjBwD5=Gux!F9)|pk{8I!BD?=JU_+}Fcmo-&X8LT4O4&ojfVi|<~pyBU4T;Og4yA(_!_bQizxF0TGD>>m93bE4Dr z_dTQg_ny42m0NslD-l-gb&V(6;r(US=5HUg zXMT4O9%%onY&*~&p!*@fpZ2OPJwRg8+#vj_BU>s*;;Y10fRBQy+NwaTRc6@84&;*iOVEdj>CCdb{|@>b5CD z7o%=E1|dAX^;Ufpj%G|r#pq(fK(%dQZnz{+9dV)f|$K^H)jh?VYgR2F%frB1Y%yWT|vz~?Q2JIC-sULvM;0#Ap6P~ zy{_(ry)ZuKO4dP0?$=36NTwgshvq3S@PU)+6z_ zer@L{tY>q{pnTeqh{`5O$%E`kd)8xfT ztM79m8H`HqkboxvgAB?*0*=Twql*i8+@qTr^`=%tNmiSA#T+6LQOOY`A$0VrHy zsz{){{bn2)9GL`pwgb326GSBTx4k#KWd-C5ZJD7`7_>&X9@2Hq6#Bw;kFLpH!Na{8 zoNo{m@;Kyi2lF|IBk?CjbXfLk;Jlyk_~&z10{EWf6BIA!vW653j*lnwDX3*}05~?;c?9s#J5~glLVRI^*kgSlb4rZimh|gq0DQ2#o58MjPkCq-?CIS4TrGxYR z`*NUwq$pu6hJ!1TDUTRr5|I)@TEoGT5$OW{HD(@M{DPZdT4EBKRW&06AEVF9{=0Tf zehVvE@4@%@2<~*_<7fAGF;~@Hyocl@&UKvY32%{HG(F>@n!7b0FqqL9s|Uv)-WPtL zRC8EUZ)#1H#1YS%$Sdd*g7g5=XBI6JPD4%YV-daTe3PQfzt4h5YqDe8mjLSH-x>JI zG~Yhk_P{j%#|15kXqn*rY)6%8h5s-J;9PL;Vrz?U`OcaTpScg)`!xB?WlJ|^PQn0E zbpAk*(R;OBRz&v;+YWQ&<6I0?)tKAIK65N z+amS3S05X3(K%6h?y9t!bno;!qz{QZXUxT*RRiD_M_jXJD$C~VSJwf$5$Mz$Bq0kQQzp;<&j%$ zzuW+D<_8R`R~ZdVO;lE0(a>*G#?bVosFee{Yp)ERft zi@73R^jW1Fi=|Hqdp0lEM32ke(|)0r)4One@}<1GG-2jC7rsXbCUmPGwm6P>f;=nI zhM~bCZTOXd|6&OKMNSD+>*0EQ$JN+#1`}TtKHV$xJ>Clxe3F(6vyh3PvBAj1$n0o2 zhfIKhll>93*$aOGMRP_&nJricaPD|DIDWVU`7a1hP&Ebi4Do#sP5?pOhgwtos5EAS?+Hx2NIHe~yO@ zE(kyWv+^YKWe$!!7~{9W5`;_8{Dg@0Bt)n#!J!DgQwVolVL0v2$~a`?>KYswxe7JM zkU~L`f+Apr2*M@leuBh$6C!T@fR{iZ;`mqK^gqkvFbEL}JMhY%cq#FD;?-~n!lf8~ zLd5zKB5oYOOCbm(D;R&3n-iAn;3GNlC&f&^0FV@u;{T%99tyT){#6-Bh)|})FaM9` z7k)t?o70>%mxYu5Dt9MDsCB|$ody)w{9ELI?f)wBzYaV{i+vjz;4dO72<5d1AS3@z zG6By1{{JrEzaCL|3H#RnKLY;g{t5VJ!ad23F|oI?a@2H^ceOE>&;)yFuw@9LHFkrr zD6gQ%<;y|>B20)%7Hox+RDkEFsQ`$%7@Qh3kco!i5~0c;`4F0*ixcb;k-Fy}rRK;| zcEW4sza3E`s&WeYSH_bnc=aX@1K4~YN1X69wW#SdeZyMq1RgXp$0G(u)p0}-W`;PA z(Lkbi*o5G@7@Q#}N*PL0=#YmCfK=8vazuaMeE_*ex$rqnHPSs3nkn*1QjFUT({icE=+C%W+`m?jt` ziOmIOVB$Fu{ReT#G5o?Hz{?8;y~Mu;8k@ol;3uO%rdWyaF@Z;s7u*t>yz<1i6WSPLd{N-dPL#Se~Kz&OE1RUBsClYWqweefYux&EQn zTg&=4@d%lVFU}MUWSS{L`VajQsB%nu6WhFxq4@7|B@| zCoO(mRYHAQDhwgw7XeL@ae2UFZ5TO7o{d9JBqV728!Ax^=z?sx&53OzMGe7EPU0vK M{t0voDJSOt0|$n2#Q*>R delta 72724 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 diff --git a/create.sql b/create.sql index ddf6047..130bc56 100644 --- a/create.sql +++ b/create.sql @@ -32,6 +32,7 @@ drop table if exists cliente_correo; drop table if exists trabajador_direccion; drop table if exists trabajador_telefono; drop table if exists trabajador_correo; +drop table if exists orden_compra; drop table if exists factura; drop table if exists boleta; drop table if exists compra; @@ -292,6 +293,17 @@ create table boleta inserted_at timestamp default CURRENT_TIMESTAMP ); +create table orden_compra +( + id int unsigned primary key auto_increment, + estado enum ('En Curso', 'Aceptada', 'Cancelada'), + compra_id int unsigned, + distribuidor_id int unsigned not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade, + foreign key (compra_id) references compra (id) on delete restrict on update cascade +); + create table compra ( id int unsigned primary key auto_increment, @@ -329,6 +341,14 @@ create table arriendo foreign key (cliente_id) references cliente (id) on delete restrict on update cascade ); +create table libro_orden_compra +( + libro_id int unsigned, + orden_compra_id int unsigned, + foreign key (libro_id) references libro (id) on delete restrict on update cascade, + foreign key (orden_compra_id) references orden_compra (id) on delete restrict on update cascade +); + create table ejemplar_compra ( ejemplar_id int unsigned, diff --git a/mysql b/mysql new file mode 100644 index 0000000..8a2fe9b --- /dev/null +++ b/mysql @@ -0,0 +1,504 @@ +#--------------------------------------------------------------------------------# +#-----------------------------Eliminar todas las tablas--------------------------# +#--------------------------------------------------------------------------------# +start transaction; + +set foreign_key_checks = 0; +set autocommit = 0; + +drop table if exists editorial; +drop table if exists estado; +drop table if exists autor; +drop table if exists categoria; +drop table if exists idioma; +drop table if exists libro; +drop table if exists ejemplar; +drop table if exists libro_autor; +drop table if exists libro_categoria; +drop table if exists libro_idioma; +drop table if exists correo; +drop table if exists direccion; +drop table if exists telefono; +drop table if exists empresa; +drop table if exists distribuidor; +drop table if exists cliente; +drop table if exists trabajador; +drop table if exists distribuidor_direccion; +drop table if exists distribuidor_telefono; +drop table if exists distribuidor_correo; +drop table if exists cliente_direccion; +drop table if exists cliente_telefono; +drop table if exists cliente_correo; +drop table if exists trabajador_direccion; +drop table if exists trabajador_telefono; +drop table if exists trabajador_correo; +drop table if exists orden_compra; +drop table if exists factura; +drop table if exists boleta; +drop table if exists compra; +drop table if exists venta; +drop table if exists arriendo; +drop table if exists ejemplar_compra; +drop table if exists ejemplar_venta; +drop table if exists ejemplar_arriendo; +drop table if exists usuario; + + +#--------------------------------------------------------------------------------# +#--------------Definicion de las tablas relacionadas a los libros----------------# +#--------------------------------------------------------------------------------# +create table editorial +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table estado +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table autor +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + apellido_paterno varchar(255) null, + apellido_materno varchar(255) null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table categoria +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table idioma +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table libro +( + id int unsigned primary key auto_increment, + editorial_id int unsigned not null, + isbn varchar(255) not null, + ano_publicacion int default null, + numero_paginas int not null, + titulo varchar(255) default null, + precio_referencia int not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (editorial_id) references editorial (id) on delete restrict on update cascade +); + +create table ejemplar +( + id int unsigned primary key auto_increment, + libro_id int unsigned not null, + estado_id int unsigned default 1, + serie varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + unique key serie_libro (serie, libro_id), + foreign key (libro_id) references libro (id) on delete cascade on update cascade, + foreign key (estado_id) references estado (id) on delete restrict on update cascade +); + +create table libro_autor +( + libro_id int unsigned not null, + autor_id int unsigned not null, + foreign key (libro_id) references libro (id) on delete restrict on update cascade, + foreign key (autor_id) references autor (id) on delete restrict on update cascade +); + +create table libro_categoria +( + libro_id int unsigned not null, + categoria_id int unsigned not null, + foreign key (libro_id) references libro (id) on delete restrict on update cascade, + foreign key (categoria_id) references categoria (id) on delete restrict on update cascade +); + +create table libro_idioma +( + libro_id int unsigned not null, + idioma_id int unsigned not null, + foreign key (libro_id) references libro (id) on delete restrict on update cascade, + foreign key (idioma_id) references idioma (id) on delete restrict on update cascade +); + + +#--------------------------------------------------------------------------------# +#------------Definicion de las tablas relacionadas a las personas----------------# +#--------------------------------------------------------------------------------# +create table direccion +( + id int unsigned primary key auto_increment, + calle varchar(255) not null, + numero varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table telefono +( + id int unsigned primary key auto_increment, + numero varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table correo +( + id int unsigned primary key auto_increment, + correo varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table empresa +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table distribuidor +( + id int unsigned primary key auto_increment, + empresa_id int unsigned not null, + rut varchar(255) not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (empresa_id) references empresa (id) on delete restrict on update cascade +); + +create table cliente +( + id int unsigned primary key auto_increment, + rut varchar(255) not null, + nombre varchar(255) not null, + apellido_paterno varchar(255) not null, + apellido_materno varchar(255) not null, + fecha_nacimiento date not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table trabajador +( + id int unsigned primary key auto_increment, + rut varchar(255) not null, + nombre varchar(255) not null, + apellido_paterno varchar(255) not null, + apellido_materno varchar(255) not null, + fecha_contrato date not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table distribuidor_direccion +( + distribuidor_id int unsigned, + direccion_id int unsigned, + foreign key (distribuidor_id) references cliente (id) on delete restrict on update cascade, + foreign key (direccion_id) references direccion (id) on delete cascade on update cascade +); + +create table distribuidor_telefono +( + distribuidor_id int unsigned, + telefono_id int unsigned, + foreign key (distribuidor_id) references cliente (id) on delete restrict on update cascade, + foreign key (telefono_id) references telefono (id) on delete cascade on update cascade +); + +create table distribuidor_correo +( + distribuidor_id int unsigned, + correo_id int unsigned, + foreign key (distribuidor_id) references cliente (id) on delete restrict on update cascade, + foreign key (correo_id) references correo (id) on delete cascade on update cascade +); + +create table cliente_direccion +( + cliente_id int unsigned, + direccion_id int unsigned, + foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, + foreign key (direccion_id) references direccion (id) on delete cascade on update cascade +); + +create table cliente_telefono +( + cliente_id int unsigned, + telefono_id int unsigned, + foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, + foreign key (telefono_id) references telefono (id) on delete cascade on update cascade +); + +create table cliente_correo +( + cliente_id int unsigned, + correo_id int unsigned, + foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, + foreign key (correo_id) references correo (id) on delete cascade on update cascade +); + +create table trabajador_direccion +( + trabajador_id int unsigned, + direccion_id int unsigned, + foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, + foreign key (direccion_id) references direccion (id) on delete cascade on update cascade +); + +create table trabajador_telefono +( + trabajador_id int unsigned, + telefono_id int unsigned, + foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, + foreign key (telefono_id) references telefono (id) on delete cascade on update cascade +); + +create table trabajador_correo +( + trabajador_id int unsigned, + correo_id int unsigned, + foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, + foreign key (correo_id) references correo (id) on delete cascade on update cascade +); + +#--------------------------------------------------------------------------------# +#-------Definicion de las tablas relacionadas a la venta/compra/arriendo---------# +#--------------------------------------------------------------------------------# + +create table factura +( + id int unsigned primary key auto_increment, + folio varchar(255) not null, + precio_neto int not null, + precio_iva int not null, + fecha_compra datetime not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table boleta +( + id int unsigned primary key auto_increment, + folio varchar(255) not null, + precio_neto int not null, + precio_iva int not null, + fecha_venta datetime not null, + inserted_at timestamp default CURRENT_TIMESTAMP +); + +create table orden_compra +( + id int unsigned primary key auto_increment, + estado enum ('En Curso', 'Aceptada', 'Cancelada'), + compra_id int unsigned, + distribuidor_id int unsigned not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (distribuidor_id) references distribuidor (id) on delete restrict on update cascade, + foreign key (compra_id) references compra (id) on delete restrict on update cascade +); + +create table compra +( + id int unsigned primary key auto_increment, + factura_id int unsigned not null, + distribuidor_id int unsigned not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (factura_id) references factura (id) on delete restrict on update cascade, + foreign key (distribuidor_id) references cliente (id) on delete restrict on update cascade +); + +create table venta +( + id int unsigned primary key auto_increment, + cliente_id int unsigned not null, + trabajador_id int unsigned not null, + boleta_id int unsigned not null, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (cliente_id) references cliente (id) on delete restrict on update cascade, + foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, + foreign key (boleta_id) references boleta (id) on delete restrict on update cascade +); + +create table arriendo +( + id int unsigned primary key auto_increment, + trabajador_id int unsigned not null, + cliente_id int unsigned not null, + costo_arriendo int not null, + fecha_arriendo date not null, + fecha_devolucion_estimada date not null, + fecha_devolucion_real date, + multa int, + inserted_at timestamp default CURRENT_TIMESTAMP, + foreign key (trabajador_id) references trabajador (id) on delete restrict on update cascade, + foreign key (cliente_id) references cliente (id) on delete restrict on update cascade +); + +create table ejemplar_compra +( + ejemplar_id int unsigned, + compra_id int unsigned, + foreign key (ejemplar_id) references ejemplar (id) on delete restrict on update cascade, + foreign key (compra_id) references compra (id) on delete restrict on update cascade +); + +create table ejemplar_venta +( + ejemplar_id int unsigned, + venta_id int unsigned, + foreign key (ejemplar_id) references ejemplar (id) on delete restrict on update cascade, + foreign key (venta_id) references venta (id) on delete restrict on update cascade +); + +create table ejemplar_arriendo +( + ejemplar_id int unsigned, + arriendo_id int unsigned, + foreign key (ejemplar_id) references ejemplar (id) on delete restrict on update cascade, + foreign key (arriendo_id) references arriendo (id) on delete restrict on update cascade +); + +#--------------------------------------------------------------------------------# +#---------------------Definicion de las tablas de usuario------------------------# +#--------------------------------------------------------------------------------# + +create table usuario +( + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + password binary(32) not null, + salt binary(16) not null, + trabajador_id int unsigned not null, + inserted_at timestamp default current_timestamp, + foreign key (trabajador_id) references trabajador (id) on delete cascade on update cascade +); + +set autocommit = 1; +set foreign_key_checks = 1; + +commit;start transaction; + +set foreign_key_checks = 0; +set autocommit = 0; + +INSERT INTO `autor` +VALUES (1, 'Howard Philips', 'Lovecraft', NULL, '2019-06-12 16:18:57'), + (2, 'Stephen', 'King', NULL, '2019-06-12 16:18:57'), + (3, 'Brandon', 'Sanderson', NULL, '2019-06-12 16:18:57'); + +INSERT INTO `categoria` +VALUES (1, 'Terror', '2019-06-12 16:18:57'), + (2, 'Aventura', '2019-06-12 16:18:57'), + (3, 'Fantasia', '2019-06-12 16:18:57'); +-- + +INSERT INTO `cliente` +VALUES (1, '21786653-7', 'Cliente', '1', '1', '2019-06-17', '2019-06-13 16:01:33'), + (2, '17181388-3', 'Cliente', '2', '2', '2019-06-13', '2019-06-13 16:04:02'); + +INSERT INTO `correo` +VALUES (1, 'HOOLA', '2019-06-13 17:25:41'), + (2, 'skrd159@gmail.com', '2019-06-13 17:32:13'); + +INSERT INTO `distribuidor` +VALUES (2, 1, '14166920-6', '2019-06-13 03:08:17'), + (3, 2, '8425080-5', '2019-06-13 03:08:23'), + (4, 1, '21629388-6', '2019-06-13 03:08:25'), + (5, 1, '13510176-1', '2019-06-13 03:08:27'); + +INSERT INTO `editorial` +VALUES (1, 'Editorial N1', '2019-06-12 16:18:57'), + (2, 'Editorial N2', '2019-06-12 16:18:57'), + (3, 'Editorial N3', '2019-06-12 16:18:57'); + +INSERT INTO `empresa` +VALUES (1, 'Empresa 1', '2019-06-13 00:39:50'), + (2, 'Empresa 2', '2019-06-13 00:39:52'); + +INSERT INTO `estado` +VALUES (1, 'Vendido', '2019-06-12 16:18:57'), + (2, 'Arrendado', '2019-06-12 16:18:57'), + (3, 'Disponible', '2019-06-12 16:18:57'); + +INSERT INTO `idioma` +VALUES (1, 'Español', '2019-06-12 16:18:57'), + (2, 'Ingles', '2019-06-12 16:18:57'), + (3, 'Portuges', '2019-06-12 16:18:57'), + (4, 'Aleman', '2019-06-12 16:18:57'), + (5, 'Ruso', '2019-06-12 16:18:57'), + (6, 'Japones', '2019-06-12 16:18:57'); + +INSERT INTO `libro` +VALUES (1, 1, '0-765-31178-X', 2006, 541, 'Mistborn: The Final Empire', 10000, + '2019-06-12 16:18:57'), + (2, 1, '0-765-31688-9', 2007, 590, 'Mistborn: The Well of Ascension', 10000, + '2019-06-12 16:18:57'), + (3, 1, '978-0-7653-1689-9', 2008, 572, 'Mistborn: The Hero of Ages', 10000, + '2019-06-12 16:18:57'), + (4, 2, '1231231231232', 1931, 100, 'The Shadow over Innsmouth', 10000, + '2019-06-12 16:18:57'), + (5, 2, '1231231231232', 1933, 100, 'The Dreams in the Witch House', 10000, + '2019-06-12 16:18:57'), + (6, 2, '1231231231232', 1936, 100, 'At the Mountains of Madness', 10000, + '2019-06-12 16:18:57'), + (7, 3, '0385086954', 1974, 199, 'Carrie', 10000, '2019-06-12 16:18:57'), + (8, 3, '978-0-670-26077-5', 1979, 428, 'The Dead Zone', 10000, '2019-06-12 16:18:57'), + (9, 3, '0-670-81302-8', 1986, 1138, 'It', 10000, '2019-06-12 16:18:57'); + +INSERT INTO `libro_autor` +VALUES (1, 3), + (2, 3), + (3, 3), + (4, 1), + (5, 1), + (6, 1), + (7, 2), + (8, 2), + (9, 2); + +INSERT INTO `libro_categoria` +VALUES (1, 3), + (2, 3), + (3, 3), + (4, 1), + (5, 1), + (6, 1), + (7, 1), + (8, 1), + (9, 1); + +INSERT INTO `libro_idioma` +VALUES (1, 2), + (2, 2), + (3, 2), + (4, 2), + (5, 2), + (6, 2), + (7, 2), + (8, 2), + (9, 2); + +INSERT INTO `trabajador` +VALUES (2, '19763899-0', 'Daniel', 'Cortes', 'Pincheira', '2019-06-13', '2019-06-13 16:04:42'), + (3, '10768789-0', 'Trabajador', 'N', '2', '2019-06-13', '2019-06-13 16:05:17'), + (4, '9717478-4', 'Trabajador', 'N', '3', '2019-06-13', '2019-06-13 16:05:27'); + +INSERT INTO `trabajador_correo` +VALUES (4, 1), + (2, 2); + +INSERT INTO `usuario` +VALUES (2, 'admin', 0x243168097E0BA82B896F348BABCEB600A8DCA30488C6F238F97FD8737BD00B27, + 0x3564ECCCD85CF0583F9C090602E998B7, 2, '2019-06-13 16:04:53'); + +set autocommit = 1; +set foreign_key_checks = 1; + +commit; \ No newline at end of file diff --git a/src/main/java/xyz/danielcortes/controllers/LaunchController.java b/src/main/java/xyz/danielcortes/controllers/LaunchController.java index e897773..c903096 100644 --- a/src/main/java/xyz/danielcortes/controllers/LaunchController.java +++ b/src/main/java/xyz/danielcortes/controllers/LaunchController.java @@ -30,9 +30,6 @@ import xyz.danielcortes.controllers.cliente.telefono.ClienteTelefonoCreateContro import xyz.danielcortes.controllers.cliente.telefono.ClienteTelefonoSearchController; import xyz.danielcortes.controllers.cliente.telefono.ClienteTelefonoUpdateController; import xyz.danielcortes.controllers.cliente.telefono.ClienteTelefonoViewController; -import xyz.danielcortes.controllers.comprar.ComprarComprarController; -import xyz.danielcortes.controllers.comprar.ComprarSearchController; -import xyz.danielcortes.controllers.comprar.ComprarSeleccionarController; import xyz.danielcortes.controllers.distribuidor.DistribuidorCreateController; import xyz.danielcortes.controllers.distribuidor.DistribuidorSearchController; import xyz.danielcortes.controllers.distribuidor.DistribuidorUpdateController; @@ -65,6 +62,10 @@ import xyz.danielcortes.controllers.libro.LibroCreateController; import xyz.danielcortes.controllers.libro.LibroSearchController; import xyz.danielcortes.controllers.libro.LibroUpdateController; import xyz.danielcortes.controllers.libro.LibroViewController; +import xyz.danielcortes.controllers.orden_compra.OrdenCompraAceptarController; +import xyz.danielcortes.controllers.orden_compra.OrdenCompraCrearController; +import xyz.danielcortes.controllers.orden_compra.OrdenCompraSearchController; +import xyz.danielcortes.controllers.orden_compra.OrdenCompraViewController; import xyz.danielcortes.controllers.trabajador.TrabajadorCreateController; import xyz.danielcortes.controllers.trabajador.TrabajadorSearchController; import xyz.danielcortes.controllers.trabajador.TrabajadorUpdateController; @@ -100,9 +101,6 @@ import xyz.danielcortes.views.cliente.ClienteCreatePanel; import xyz.danielcortes.views.cliente.ClienteSearchPanel; import xyz.danielcortes.views.cliente.ClienteUpdatePanel; import xyz.danielcortes.views.cliente.ClienteViewPanel; -import xyz.danielcortes.views.comprar.ComprarComprarPanel; -import xyz.danielcortes.views.comprar.ComprarSearchPanel; -import xyz.danielcortes.views.comprar.ComprarSeleccionarPanel; import xyz.danielcortes.views.correo.CorreoCreatePanel; import xyz.danielcortes.views.correo.CorreoSearchPanel; import xyz.danielcortes.views.correo.CorreoUpdatePanel; @@ -131,6 +129,10 @@ import xyz.danielcortes.views.libro.LibroCreatePanel; import xyz.danielcortes.views.libro.LibroSearchPanel; import xyz.danielcortes.views.libro.LibroUpdatePanel; import xyz.danielcortes.views.libro.LibroViewPanel; +import xyz.danielcortes.views.orden_compra.OrdenCompraAceptarPanel; +import xyz.danielcortes.views.orden_compra.OrdenCompraCrearPanel; +import xyz.danielcortes.views.orden_compra.OrdenCompraSearchPanel; +import xyz.danielcortes.views.orden_compra.OrdenCompraViewPanel; import xyz.danielcortes.views.telefono.TelefonoCreatePanel; import xyz.danielcortes.views.telefono.TelefonoSearchPanel; import xyz.danielcortes.views.telefono.TelefonoUpdatePanel; @@ -292,9 +294,10 @@ public class LaunchController { this.controllers.put(PanelName.DISTRIBUIDOR_DIRECCION_CREATE, new DistribuidorDireccionCreateController(new DireccionCreatePanel(), this)); this.controllers.put(PanelName.DISTRIBUIDOR_DIRECCION_UPDATE, new DistribuidorDireccionUpdateController(new DireccionUpdatePanel(), this)); - this.controllers.put(PanelName.COMPRAR_SEARCH, new ComprarSearchController(new ComprarSearchPanel(), this)); - this.controllers.put(PanelName.COMPRAR_COMPRAR, new ComprarComprarController(new ComprarComprarPanel(), this)); - this.controllers.put(PanelName.COMPRAR_SELECCIONAR, new ComprarSeleccionarController(new ComprarSeleccionarPanel(), this)); + this.controllers.put(PanelName.ORDEN_COMPRA_SEARCH, new OrdenCompraSearchController(new OrdenCompraSearchPanel(), this)); + this.controllers.put(PanelName.ORDEN_COMPRA_CREAR, new OrdenCompraCrearController(new OrdenCompraCrearPanel(), this)); + this.controllers.put(PanelName.ORDEN_COMPRA_VIEW, new OrdenCompraViewController(new OrdenCompraViewPanel(), this)); + this.controllers.put(PanelName.ORDEN_COMPRA_ACEPTAR, new OrdenCompraAceptarController(new OrdenCompraAceptarPanel(), this)); for (Entry entry : this.controllers.entrySet()) { this.frame.addCard(entry.getValue().getView().getContentPane(), entry.getKey()); @@ -362,17 +365,17 @@ public class LaunchController { private JMenu createComprarMenu() { JMenu comprarMenu = new JMenu("Compra, Venta y Arriendo"); - JMenuItem comprarLibroItem = new JMenuItem("Comprar Libro"); - JMenuItem venderLibroItem = new JMenuItem("Vender Libro"); - JMenuItem arrendarLibroItem = new JMenuItem("Arrendar Libro"); + JMenuItem ordenDeCompraItem = new JMenuItem("Orden de compra"); + JMenuItem venderEjemplarItem = new JMenuItem("Vender Ejemplar"); + JMenuItem arrendarEjemplarItem = new JMenuItem("Arrendar Ejemplar"); - comprarLibroItem.addActionListener(e -> this.showCard(PanelName.COMPRAR_SEARCH)); - venderLibroItem.addActionListener(e -> this.showCard(PanelName.VENDER_SEARCH)); - arrendarLibroItem.addActionListener(e -> this.showCard(PanelName.ARRENDAR_SEARCH)); + ordenDeCompraItem.addActionListener(e -> this.showCard(PanelName.ORDEN_COMPRA_SEARCH)); + venderEjemplarItem.addActionListener(e -> this.showCard(PanelName.VENDER_SEARCH)); + arrendarEjemplarItem.addActionListener(e -> this.showCard(PanelName.ARRENDAR_SEARCH)); - comprarMenu.add(comprarLibroItem); - comprarMenu.add(venderLibroItem); - comprarMenu.add(arrendarLibroItem); + comprarMenu.add(ordenDeCompraItem); + comprarMenu.add(venderEjemplarItem); + comprarMenu.add(arrendarEjemplarItem); return comprarMenu; } diff --git a/src/main/java/xyz/danielcortes/controllers/comprar/ComprarComprarController.java b/src/main/java/xyz/danielcortes/controllers/comprar/ComprarComprarController.java deleted file mode 100644 index 1e0106c..0000000 --- a/src/main/java/xyz/danielcortes/controllers/comprar/ComprarComprarController.java +++ /dev/null @@ -1,48 +0,0 @@ -package xyz.danielcortes.controllers.comprar; - -import xyz.danielcortes.controllers.LaunchController; -import xyz.danielcortes.framework.BaseController; -import xyz.danielcortes.framework.BasePanel; -import xyz.danielcortes.framework.PanelName; -import xyz.danielcortes.repository.CompraRepository; -import xyz.danielcortes.repository.DistribuidorRepository; -import xyz.danielcortes.validator.CompraValidator; -import xyz.danielcortes.views.comprar.ComprarComprarPanel; - -public class ComprarComprarController extends BaseController { - - private ComprarComprarPanel view; - private CompraRepository compraRepository; - private DistribuidorRepository distribuidorRepository; - private CompraValidator validator; - - public ComprarComprarController(ComprarComprarPanel view, LaunchController parent) { - super(parent); - this.view = view; - this.compraRepository = new CompraRepository(); - this.distribuidorRepository = new DistribuidorRepository(); - this.validator = new CompraValidator(this.compraRepository); - this.setupListeners(); - - } - - public void setupListeners() { - this.view.getVolverButton().addActionListener(e -> this.parentController.showCard(PanelName.COMPRAR_SEARCH)); - this.view.getSeleccionarButton().addActionListener(e -> this.parentController.showCard(PanelName.COMPRAR_SELECCIONAR)); - } - - @Override - public void show() { - this.fillDistribuidores(); - } - - private void fillDistribuidores() { - this.view.getDistribuidorModel().removeAllElements(); - this.view.getDistribuidorModel().addAll(this.distribuidorRepository.getAll()); - } - - @Override - public BasePanel getView() { - return this.view; - } -} diff --git a/src/main/java/xyz/danielcortes/controllers/comprar/ComprarSearchController.java b/src/main/java/xyz/danielcortes/controllers/comprar/ComprarSearchController.java deleted file mode 100644 index 89aed35..0000000 --- a/src/main/java/xyz/danielcortes/controllers/comprar/ComprarSearchController.java +++ /dev/null @@ -1,92 +0,0 @@ -package xyz.danielcortes.controllers.comprar; - -import java.util.List; -import javax.swing.JOptionPane; -import xyz.danielcortes.controllers.LaunchController; -import xyz.danielcortes.framework.BaseController; -import xyz.danielcortes.framework.BasePanel; -import xyz.danielcortes.framework.BaseTableModel; -import xyz.danielcortes.framework.PanelName; -import xyz.danielcortes.models.Compra; -import xyz.danielcortes.repository.CompraRepository; -import xyz.danielcortes.validator.CompraValidator; -import xyz.danielcortes.views.comprar.ComprarSearchPanel; - -public class ComprarSearchController extends BaseController { - - private ComprarSearchPanel view; - private CompraRepository repository; - private CompraValidator validator; - - public ComprarSearchController(ComprarSearchPanel view, LaunchController parent) { - super(parent); - this.view = view; - this.repository = new CompraRepository(); - this.validator = new CompraValidator(this.repository); - this.setupListeners(); - } - - private void setupListeners() { - this.view.getComprarButton().addActionListener(e -> this.getParentController().showCard(PanelName.COMPRAR_COMPRAR)); - this.view.getBuscarButton().addActionListener(e -> this.search()); - this.view.getSearchField().addActionListener(e -> this.search()); - this.view.getVerButton().addActionListener(e -> this.view()); - } - - private void search() { - String term = this.view.getSearchField().getText(); - List compras = this.repository.search(term); - this.loadComprarTable(compras); - } - - private void view() { - Compra compra = this.getSelectedCompra(); - if (compra != null) { -// CompraViewController controller = (CompraViewController) this.getParentController().getCard(PanelName.COMPRAR_VIEW); -// controller.setCompra(compra); -// this.getParentController().showCard(PanelName.COMPRAR_VIEW); - } - } - - private void loadComprarTable(List compras) { - BaseTableModel model = this.view.getModel(); - model.setRows(compras); - } - - private Compra getSelectedCompra() { - int selectedRow = this.view.getTable().getSelectedRow(); - if (selectedRow == -1) { - JOptionPane.showMessageDialog( - null, - "No hay copra seleccionada", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return null; - } - - return this.view.getModel().getRow(selectedRow); - } - - @Override - public void show() { - this.reload(); - } - - public void reload() { - this.loadComprarTable(); - this.view.getSearchField().requestFocus(); - this.view.getTable().setRowSelectionInterval(0, 0); - } - - private void loadComprarTable() { - List compra = this.repository.getAll(); - this.loadComprarTable(compra); - } - - @Override - public BasePanel getView() { - return this.view; - } - -} diff --git a/src/main/java/xyz/danielcortes/controllers/comprar/ComprarSeleccionarController.java b/src/main/java/xyz/danielcortes/controllers/comprar/ComprarSeleccionarController.java deleted file mode 100644 index 8e291de..0000000 --- a/src/main/java/xyz/danielcortes/controllers/comprar/ComprarSeleccionarController.java +++ /dev/null @@ -1,133 +0,0 @@ -package xyz.danielcortes.controllers.comprar; - -import java.util.ArrayList; -import java.util.List; -import javax.swing.JOptionPane; -import xyz.danielcortes.controllers.LaunchController; -import xyz.danielcortes.framework.BaseController; -import xyz.danielcortes.framework.BasePanel; -import xyz.danielcortes.framework.PanelName; -import xyz.danielcortes.framework.ValidationResult; -import xyz.danielcortes.models.Ejemplar; -import xyz.danielcortes.models.Estado; -import xyz.danielcortes.models.Libro; -import xyz.danielcortes.repository.EjemplarRepository; -import xyz.danielcortes.repository.LibroRepository; -import xyz.danielcortes.validator.EjemplarValidator; -import xyz.danielcortes.views.comprar.ComprarSeleccionarPanel; - -public class ComprarSeleccionarController extends BaseController { - - private ComprarSeleccionarPanel view; - private LibroRepository libroRepository; - private EjemplarValidator ejemplarValidator; - - private List ejemplares; - private List editing; - - public ComprarSeleccionarController(ComprarSeleccionarPanel view, LaunchController parent) { - super(parent); - this.view = view; - this.libroRepository = new LibroRepository(); - this.ejemplarValidator = new EjemplarValidator(new EjemplarRepository()); - this.ejemplares = new ArrayList<>(); - this.editing = new ArrayList<>(); - this.setupListeners(); - } - - public void setupListeners() { - this.view.getGuardarButton().addActionListener(e -> this.save()); - this.view.getVolverButton().addActionListener(e -> this.volver()); - this.view.getRemoverButton().addActionListener(e -> this.remove()); - this.view.getAgregarButton().addActionListener(e -> this.agregar()); - } - - private void save() { - this.ejemplares.clear(); - this.ejemplares.addAll(this.editing); - - this.getParentController().showCard(PanelName.COMPRAR_COMPRAR); - } - - private void volver() { - this.editing.clear(); - this.editing.addAll(this.ejemplares); - - this.parentController.showCard(PanelName.COMPRAR_COMPRAR); - } - - private void remove() { - Ejemplar ejemplar = this.getSelectedEjemplar(); - if (ejemplar == null) - return; - int index = this.view.getEjemplaresTable().getSelectedRow(); - - this.view.getEjemplaresTableModel().removeRow(index); - this.editing.remove(ejemplar); - } - - private void agregar() { - Libro libro = (Libro) this.view.getLibrosCombo().getSelectedItem(); - if (libro == null) - return; - - String serie = this.view.getSerieField().getText(); - - ValidationResult serieValidation = this.ejemplarValidator.validateSerie(serie, libro.getId(), this.editing); - if (serieValidation.hasError()) { - serieValidation.showErrorDialog(); - return; - } - - Ejemplar ejemplar = new Ejemplar(); - ejemplar.setLibro(libro); - ejemplar.setSerie(serie); - ejemplar.setEstado(new Estado()); - - this.editing.add(ejemplar); - this.view.getEjemplaresTableModel().addRow(ejemplar); - - this.view.getLibrosCombo().setSelectedIndex(0); - this.view.getSerieField().setText(""); - } - - private Ejemplar getSelectedEjemplar() { - int selectedRow = this.view.getEjemplaresTable().getSelectedRow(); - if (selectedRow == -1) { - JOptionPane.showMessageDialog( - null, - "No hay ningun ejemplar seleccionado", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return null; - } - return this.view.getEjemplaresTableModel().getRow(selectedRow); - } - - @Override - public void show() { - this.editing.clear(); - this.editing.addAll(this.ejemplares); - - this.fillLibros(); - this.view.getLibrosCombo().setSelectedIndex(0); - } - - private void fillLibros() { - this.view.getLibrosComboModel().removeAllElements(); - this.view.getLibrosComboModel().addAll(this.libroRepository.getAll()); - - this.view.getEjemplaresTableModel().setRows(this.ejemplares); - } - - @Override - public BasePanel getView() { - return this.view; - } - - public List getEjemplares() { - return this.ejemplares; - } - -} diff --git a/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraAceptarController.java b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraAceptarController.java new file mode 100644 index 0000000..25f6281 --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraAceptarController.java @@ -0,0 +1,59 @@ +package xyz.danielcortes.controllers.orden_compra; + +import java.time.LocalDate; +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.ChangeListener; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.models.OrdenCompra; +import xyz.danielcortes.views.orden_compra.OrdenCompraAceptarPanel; + +public class OrdenCompraAceptarController extends BaseController { + + private OrdenCompraAceptarPanel view; + private OrdenCompra ordenCompra; + + public OrdenCompraAceptarController(OrdenCompraAceptarPanel view, LaunchController parent) { + super(parent); + this.view = view; + this.setupListeners(); + } + + private void setupListeners() { + this.view.getVolverButton().addActionListener(e -> this.parentController.showCard(PanelName.ORDEN_COMPRA_SEARCH)); + this.view.getPrecioNetoField().getDocument().addDocumentListener((ChangeListener) e -> this.calculatePrice()); + } + + private void calculatePrice() { + try { + int neto = Integer.parseInt(this.view.getPrecioNetoField().getText()); + + float iva = (float) neto * .19f; + this.view.getIvaField().setText(String.valueOf(iva)); + this.view.getTotalField().setText(String.valueOf(iva + neto)); + } catch (NumberFormatException e) { + this.view.getIvaField().setText("0"); + this.view.getTotalField().setText("0"); + } + } + + public void setOrdenCompra(OrdenCompra ordenCompra) { + this.ordenCompra = ordenCompra; + } + + @Override + public void show() { + this.view.getAsignarButton().requestFocus(); + this.view.getFechaEmisionPicker().setDate(LocalDate.now()); + this.view.getIvaField().setText("0"); + this.view.getPrecioNetoField().setText("0"); + this.view.getTotalField().setText("0"); + } + + @Override + public BasePanel getView() { + return this.view; + } + +} diff --git a/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraCrearController.java b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraCrearController.java new file mode 100644 index 0000000..2224eac --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraCrearController.java @@ -0,0 +1,129 @@ +package xyz.danielcortes.controllers.orden_compra; + +import java.util.List; +import javax.swing.JOptionPane; +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.framework.ValidationResult; +import xyz.danielcortes.models.Distribuidor; +import xyz.danielcortes.models.Libro; +import xyz.danielcortes.models.OrdenCompra; +import xyz.danielcortes.repository.DistribuidorRepository; +import xyz.danielcortes.repository.LibroRepository; +import xyz.danielcortes.repository.OrdenCompraRepository; +import xyz.danielcortes.validator.OrdenCompraValidator; +import xyz.danielcortes.views.orden_compra.OrdenCompraCrearPanel; + +public class OrdenCompraCrearController extends BaseController { + + private OrdenCompraCrearPanel view; + private LibroRepository libroRepository; + private DistribuidorRepository distribuidorRepository; + private OrdenCompraRepository ordenCompraRepository; + private OrdenCompraValidator validator; + + public OrdenCompraCrearController(OrdenCompraCrearPanel view, LaunchController parent) { + super(parent); + this.view = view; + this.libroRepository = new LibroRepository(); + this.distribuidorRepository = new DistribuidorRepository(); + this.ordenCompraRepository = new OrdenCompraRepository(); + this.validator = new OrdenCompraValidator(); + this.setupListeners(); + } + + public void setupListeners() { + this.view.getGuardarButton().addActionListener(e -> this.save()); + this.view.getVolverButton().addActionListener(e -> this.volver()); + this.view.getRemoverButton().addActionListener(e -> this.remove()); + this.view.getAgregarButton().addActionListener(e -> this.agregar()); + } + + private void save() { + List libros = this.view.getLibroTableModel().getRows(); + ValidationResult librosValidation = this.validator.validateLibros(libros); + if (librosValidation.hasError()) { + librosValidation.showErrorDialog(); + return; + } + + Distribuidor distribuidor = (Distribuidor) this.view.getDistribuidorCombo().getSelectedItem(); + ValidationResult distribuidorValidation = this.validator.validateDistribuidor(distribuidor); + if (distribuidorValidation.hasError()) { + distribuidorValidation.showErrorDialog(); + return; + } + + OrdenCompra ordenCompra = new OrdenCompra(); + ordenCompra.setDistribuidor(distribuidor); + ordenCompra.setEstado("En Curso"); + ordenCompra.setLibros(libros); + + this.ordenCompraRepository.save(ordenCompra); + this.parentController.showCard(PanelName.ORDEN_COMPRA_SEARCH); + } + + private void volver() { + this.parentController.showCard(PanelName.ORDEN_COMPRA_SEARCH); + } + + private void remove() { + Libro libro = this.getSelectedLibro(); + if (libro == null) + return; + + this.view.getLibroTableModel().removeRow(libro); + } + + private void agregar() { + Libro libro = (Libro) this.view.getLibrosCombo().getSelectedItem(); + if (libro == null) + return; + + int cantidad = (int) this.view.getCantidadSpinner().getValue(); + for (int i = 0; i < cantidad; i++) { + this.view.getLibroTableModel().addRow(libro); + } + } + + private Libro getSelectedLibro() { + int selectedRow = this.view.getLibrosTable().getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog( + null, + "No hay ningun libro seleccionado", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return null; + } + return this.view.getLibroTableModel().getRow(selectedRow); + } + + @Override + public void show() { + this.fillLibros(); + this.fillDistribuidor(); + this.view.getLibrosCombo().setSelectedIndex(0); + this.view.getDistribuidorCombo().setSelectedIndex(0); + this.view.getLibroTableModel().removeRows(); + this.view.getLibrosTable().clearSelection(); + } + + private void fillLibros() { + this.view.getLibrosComboModel().removeAllElements(); + this.view.getLibrosComboModel().addAll(this.libroRepository.getAll()); + } + + private void fillDistribuidor() { + this.view.getDistribuidorComboModel().removeAllElements(); + this.view.getDistribuidorComboModel().addAll(this.distribuidorRepository.getAll()); + } + + @Override + public BasePanel getView() { + return this.view; + } +} diff --git a/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraSearchController.java b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraSearchController.java new file mode 100644 index 0000000..0fe9eea --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraSearchController.java @@ -0,0 +1,172 @@ +package xyz.danielcortes.controllers.orden_compra; + +import java.util.List; +import javax.swing.JOptionPane; +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.BaseTableModel; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.models.OrdenCompra; +import xyz.danielcortes.repository.OrdenCompraRepository; +import xyz.danielcortes.views.orden_compra.OrdenCompraSearchPanel; + +public class OrdenCompraSearchController extends BaseController { + + private OrdenCompraSearchPanel view; + private OrdenCompraRepository repository; + + public OrdenCompraSearchController(OrdenCompraSearchPanel view, LaunchController parent) { + super(parent); + this.view = view; + this.repository = new OrdenCompraRepository(); + this.setupListeners(); + } + + private void setupListeners() { + this.view.getBuscarButton().addActionListener(e -> this.search()); + this.view.getSearchField().addActionListener(e -> this.search()); + + this.view.getCrearButton().addActionListener(e -> this.getParentController().showCard(PanelName.ORDEN_COMPRA_CREAR)); + this.view.getVerButton().addActionListener(e -> this.view()); + this.view.getCancelarButton().addActionListener(e -> this.cancelar()); + this.view.getAceptarButton().addActionListener(e -> this.aceptar()); + } + + private void search() { + String term = this.view.getSearchField().getText(); + List ordenCompras = this.repository.search(term); + this.loadComprarTable(ordenCompras); + } + + private void view() { + OrdenCompra ordenCompra = this.getSelectedOrdenCompra(); + if (ordenCompra != null) { + OrdenCompraViewController controller = (OrdenCompraViewController) this.getParentController().getCard(PanelName.ORDEN_COMPRA_VIEW); + controller.setOrdenCompra(ordenCompra); + this.getParentController().showCard(PanelName.ORDEN_COMPRA_VIEW); + } + } + + private void cancelar() { + OrdenCompra ordenCompra = this.getSelectedOrdenCompra(); + if (ordenCompra == null) + return; + + if (ordenCompra.getEstado().equals("Cancelada")) { + JOptionPane.showMessageDialog( + null, + "La orden ya esta cancelada", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return; + } else if (ordenCompra.getEstado().equals("Aceptada")) { + JOptionPane.showMessageDialog( + null, + "La orden ya fue aceptada", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return; + } else if (!ordenCompra.getEstado().equals("En Curso")) { + JOptionPane.showMessageDialog( + null, + "La orden esta en un estado imposible, corre!", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return; + } + + int result = JOptionPane.showConfirmDialog( + null, + "Esta seguro de cancelar esta orden de compra?", + "Confirmar", + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE + ); + + if (result == JOptionPane.YES_OPTION) { + ordenCompra.setEstado("Cancelada"); + this.repository.update(ordenCompra); + } + } + + private void aceptar() { + OrdenCompra ordenCompra = this.getSelectedOrdenCompra(); + if (ordenCompra == null) + return; + + if (ordenCompra.getEstado().equals("Cancelada")) { + JOptionPane.showMessageDialog( + null, + "La orden fue cancelada, no se pude aceptar", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return; + } else if (ordenCompra.getEstado().equals("Aceptada")) { + JOptionPane.showMessageDialog( + null, + "La orden ya fue aceptada", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return; + } else if (!ordenCompra.getEstado().equals("En Curso")) { + JOptionPane.showMessageDialog( + null, + "La orden está en un estado imposible, corre!", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return; + } + OrdenCompraAceptarController controller = (OrdenCompraAceptarController) this.getParentController().getCard(PanelName.ORDEN_COMPRA_ACEPTAR); + controller.setOrdenCompra(ordenCompra); + this.getParentController().showCard(PanelName.ORDEN_COMPRA_ACEPTAR); + } + + private void loadComprarTable(List ordenCompra) { + BaseTableModel model = this.view.getModel(); + model.setRows(ordenCompra); + } + + private OrdenCompra getSelectedOrdenCompra() { + int selectedRow = this.view.getTable().getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog( + null, + "No hay orden de compra seleccionada", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return null; + } + + return this.view.getModel().getRow(selectedRow); + } + + @Override + public void show() { + this.reload(); + } + + public void reload() { + this.loadComprarTable(); + this.view.getSearchField().requestFocus(); + this.view.getTable().setRowSelectionInterval(0, 0); + } + + private void loadComprarTable() { + List ordenCompra = this.repository.getAll(); + this.loadComprarTable(ordenCompra); + } + + @Override + public BasePanel getView() { + return this.view; + } + +} diff --git a/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraViewController.java b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraViewController.java new file mode 100644 index 0000000..bde5f5c --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/orden_compra/OrdenCompraViewController.java @@ -0,0 +1,45 @@ +package xyz.danielcortes.controllers.orden_compra; + +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.models.OrdenCompra; +import xyz.danielcortes.views.orden_compra.OrdenCompraViewPanel; + +public class OrdenCompraViewController extends BaseController { + + private OrdenCompraViewPanel view; + private OrdenCompra ordenCompra; + + public OrdenCompraViewController(OrdenCompraViewPanel view, LaunchController parent) { + super(parent); + this.view = view; + this.setupListeners(); + } + + private void setupListeners() { + this.view.getVolverButton().addActionListener(e -> this.parentController.showCard(PanelName.ORDEN_COMPRA_SEARCH)); + } + + public void setOrdenCompra(OrdenCompra ordenCompra) { + this.ordenCompra = ordenCompra; + } + + @Override + public void show() { + this.view.getDistribuidorField().setText(this.ordenCompra.getDistribuidor().getRut()); + this.fillTable(); + } + + @Override + public BasePanel getView() { + return this.view; + } + + private void fillTable() { + if (this.ordenCompra != null) { + this.view.getLibroTableModel().setRows(this.ordenCompra.getLibros()); + } + } +} diff --git a/src/main/java/xyz/danielcortes/framework/BaseTableModel.java b/src/main/java/xyz/danielcortes/framework/BaseTableModel.java index 0ebe935..96fd276 100644 --- a/src/main/java/xyz/danielcortes/framework/BaseTableModel.java +++ b/src/main/java/xyz/danielcortes/framework/BaseTableModel.java @@ -24,7 +24,7 @@ public class BaseTableModel extends AbstractTableModel { * @param valueAt TriFunction la cual recibe por parametros: - La lista de filas de la tabla - Un Integer indicando la fila del que se necesita el * valor - Un Integer indicando la columna de la que se necesita el valor Y esta debe retornar un objeto con toString para poder ser mostrado en la * tabla - * + *

* Se sugiere el siguiente tipo de implementacion para la funcion (row, rowIndex, colIndex) -> { switch (colIndex) { case 0: return * row.get(rowIndex).getColumn1(); case 1: return row.get(rowIndex).getColumn2(); case 2: return row.get(rowIndex).getColumn3(); case 3: return * row.get(rowIndex).getColumn4(); } return null; } @@ -61,6 +61,30 @@ public class BaseTableModel extends AbstractTableModel { return this.valueAt.apply(this.rows, rowIndex, columnIndex); } + public void removeRow(int row) { + this.rows.remove(row); + this.fireTableRowsDeleted(row, row); + } + + public void removeRow(T t) { + int removed = this.rows.indexOf(t); + this.rows.remove(removed); + this.fireTableRowsDeleted(removed, removed); + + } + + public T getRow(int row) { + if (row > -1 || row < this.getRowCount()) { + return this.rows.get(row); + } else { + return null; + } + } + + public List getRows() { + return this.rows; + } + public void setRows(List items) { this.removeRows(); this.rows.addAll(items); @@ -74,17 +98,4 @@ public class BaseTableModel extends AbstractTableModel { this.fireTableRowsDeleted(0, rowCount - 1); } } - - public void removeRow(int row) { - this.rows.remove(row); - this.fireTableRowsDeleted(row, row); - } - - public T getRow(int row) { - if (row > -1 || row < this.getRowCount()) { - return this.rows.get(row); - } else { - return null; - } - } } diff --git a/src/main/java/xyz/danielcortes/framework/ChangeListener.java b/src/main/java/xyz/danielcortes/framework/ChangeListener.java new file mode 100644 index 0000000..3c538ec --- /dev/null +++ b/src/main/java/xyz/danielcortes/framework/ChangeListener.java @@ -0,0 +1,24 @@ +package xyz.danielcortes.framework; + +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +public interface ChangeListener extends DocumentListener { + + @Override + default void insertUpdate(DocumentEvent e) { + this.changed(e); + } + + @Override + default void removeUpdate(DocumentEvent e) { + this.changed(e); + } + + @Override + default void changedUpdate(DocumentEvent e) { + this.changed(e); + } + + void changed(DocumentEvent e); +} diff --git a/src/main/java/xyz/danielcortes/framework/PanelName.java b/src/main/java/xyz/danielcortes/framework/PanelName.java index 53b0017..dd17e16 100644 --- a/src/main/java/xyz/danielcortes/framework/PanelName.java +++ b/src/main/java/xyz/danielcortes/framework/PanelName.java @@ -97,10 +97,10 @@ public enum PanelName { CLIENTE_DIRECCION_CREATE, CLIENTE_DIRECCION_UPDATE, - COMPRAR_SEARCH, - COMPRAR_SELECCIONAR, - COMPRAR_VIEW, - COMPRAR_COMPRAR, + ORDEN_COMPRA_SEARCH, + ORDEN_COMPRA_ACEPTAR, + ORDEN_COMPRA_VIEW, + ORDEN_COMPRA_CREAR, VENDER_SEARCH, VENDER_VENDER, diff --git a/src/main/java/xyz/danielcortes/models/Libro.java b/src/main/java/xyz/danielcortes/models/Libro.java index 974b429..77f5ef4 100644 --- a/src/main/java/xyz/danielcortes/models/Libro.java +++ b/src/main/java/xyz/danielcortes/models/Libro.java @@ -66,6 +66,14 @@ public class Libro { ) private List categorias; + @ManyToMany + @JoinTable( + name = "libro_orden_compra", + joinColumns = @JoinColumn(name = "libro_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "orden_compra_id", referencedColumnName = "id") + ) + private List ordenCompras; + @ManyToOne @JoinColumn(name = "editorial_id") private Editorial editorial; @@ -170,6 +178,15 @@ public class Libro { this.ejemplares = ejemplar; } + public List getOrdenCompras() { + if (this.ordenCompras == null) + this.ordenCompras = new ArrayList<>(); + return this.ordenCompras; + } + + public void setOrdenCompras(List ordenCompras) { + this.ordenCompras = ordenCompras; + } @Override public String toString() { diff --git a/src/main/java/xyz/danielcortes/models/OrdenCompra.java b/src/main/java/xyz/danielcortes/models/OrdenCompra.java new file mode 100644 index 0000000..f1a8cbc --- /dev/null +++ b/src/main/java/xyz/danielcortes/models/OrdenCompra.java @@ -0,0 +1,96 @@ +package xyz.danielcortes.models; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "orden_compra") +public class OrdenCompra { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "estado") + private String estado; + + @ManyToMany + @JoinTable( + name = "libro_orden_compra", + joinColumns = @JoinColumn(name = "orden_compra_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "libro_id", referencedColumnName = "id")) + private List libros; + + @ManyToOne + @JoinColumn(name = "distribuidor_id") + private Distribuidor distribuidor; + + @ManyToOne + @JoinColumn(name = "compra_id") + private Compra compra; + + @Column(name = "inserted_at") + private LocalDateTime insertedAt; + + public Integer getId() { + return this.id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getEstado() { + return this.estado; + } + + public void setEstado(String estado) { + this.estado = estado; + } + + public List getLibros() { + if (this.libros == null) + this.libros = new ArrayList<>(); + return this.libros; + } + + public void setLibros(List libros) { + this.libros = libros; + } + + public Distribuidor getDistribuidor() { + return this.distribuidor; + } + + public void setDistribuidor(Distribuidor distribuidor) { + this.distribuidor = distribuidor; + } + + public Compra getCompra() { + return this.compra; + } + + public void setCompra(Compra compra) { + this.compra = compra; + } + + public LocalDateTime getInsertedAt() { + return this.insertedAt; + } + + public void setInsertedAt(LocalDateTime insertedAt) { + this.insertedAt = insertedAt; + } +} diff --git a/src/main/java/xyz/danielcortes/repository/OrdenCompraRepository.java b/src/main/java/xyz/danielcortes/repository/OrdenCompraRepository.java new file mode 100644 index 0000000..7197f7c --- /dev/null +++ b/src/main/java/xyz/danielcortes/repository/OrdenCompraRepository.java @@ -0,0 +1,19 @@ +package xyz.danielcortes.repository; + +import java.util.List; +import javax.persistence.Query; +import xyz.danielcortes.framework.BaseRepository; +import xyz.danielcortes.models.OrdenCompra; + +public class OrdenCompraRepository extends BaseRepository { + + public OrdenCompraRepository() { + super(OrdenCompra.class); + } + + public List search(String term) { + Query query = this.em.createQuery("SELECT o FROM OrdenCompra o WHERE LOWER(o.estado) LIKE :term"); + query.setParameter("term", "%" + term.toLowerCase() + "%"); + return query.getResultList(); + } +} diff --git a/src/main/java/xyz/danielcortes/validator/OrdenCompraValidator.java b/src/main/java/xyz/danielcortes/validator/OrdenCompraValidator.java new file mode 100644 index 0000000..db23bbf --- /dev/null +++ b/src/main/java/xyz/danielcortes/validator/OrdenCompraValidator.java @@ -0,0 +1,50 @@ +package xyz.danielcortes.validator; + +import java.util.List; +import xyz.danielcortes.framework.ValidationResult; +import xyz.danielcortes.models.Compra; +import xyz.danielcortes.models.Distribuidor; +import xyz.danielcortes.models.Libro; + +public class OrdenCompraValidator { + + public ValidationResult validateEstado(String estado) { + if (estado == null) { + return new ValidationResult("No hay estado"); + } + if (estado.isBlank()) { + return new ValidationResult("El estado esta vacio"); + } + //Lo siento, me vi en la necesidad de hacer la validacion asi + // se ve mas cul + switch (estado) { + case "En Curso": + case "Aceptada": + case "Cancelada": + return ValidationResult.NON_ERROR; + default: + return new ValidationResult("El estado no es valido"); + } + } + + public ValidationResult validateLibros(List libros) { + if (libros == null || libros.isEmpty()) { + return new ValidationResult("No hay libros"); + } + return ValidationResult.NON_ERROR; + } + + public ValidationResult validateDistribuidor(Distribuidor distribuidor) { + if (distribuidor == null) { + return new ValidationResult("No hay distribuidor"); + } + return ValidationResult.NON_ERROR; + } + + public ValidationResult validateCompra(Compra compra) { + if (compra == null) { + return new ValidationResult("No hay compra"); + } + return ValidationResult.NON_ERROR; + } +} diff --git a/src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.form b/src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.form deleted file mode 100644 index 968f76a..0000000 --- a/src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.form +++ /dev/null @@ -1,186 +0,0 @@ - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.java b/src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.java deleted file mode 100644 index 892bd02..0000000 --- a/src/main/java/xyz/danielcortes/views/comprar/ComprarComprarPanel.java +++ /dev/null @@ -1,200 +0,0 @@ -package xyz.danielcortes.views.comprar; - -import com.github.lgooddatepicker.components.DatePicker; -import com.intellij.uiDesigner.core.GridConstraints; -import com.intellij.uiDesigner.core.GridLayoutManager; -import com.intellij.uiDesigner.core.Spacer; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Insets; -import javax.swing.BorderFactory; -import javax.swing.DefaultComboBoxModel; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; -import xyz.danielcortes.framework.BasePanel; -import xyz.danielcortes.models.Distribuidor; - -public class ComprarComprarPanel extends BasePanel { - - private JPanel contentPane; - private JComboBox distribuidorCombo; - private DefaultComboBoxModel distribuidorModel; - private JButton seleccionarButton; - private JTextField folioField; - private JTextField precioNetoField; - private JTextField precioIVAField; - private JTextField precioBrutoField; - private DatePicker fechaCompraField; - private JButton guardarButton; - private JButton volverButton; - - { -// GUI initializer generated by IntelliJ IDEA GUI Designer -// >>> IMPORTANT!! <<< -// DO NOT EDIT OR ADD ANY CODE HERE! - this.$$$setupUI$$$(); - } - - @Override - public JPanel getContentPane() { - return this.contentPane; - } - - public JComboBox getDistribuidorCombo() { - return this.distribuidorCombo; - } - - public JButton getSeleccionarButton() { - return this.seleccionarButton; - } - - public JTextField getFolioField() { - return this.folioField; - } - - public JTextField getPrecioNetoField() { - return this.precioNetoField; - } - - public JTextField getPrecioIVAField() { - return this.precioIVAField; - } - - public JTextField getPrecioBrutoField() { - return this.precioBrutoField; - } - - public DatePicker getFechaCompraField() { - return this.fechaCompraField; - } - - public JButton getGuardarButton() { - return this.guardarButton; - } - - public JButton getVolverButton() { - return this.volverButton; - } - - public DefaultComboBoxModel getDistribuidorModel() { - return this.distribuidorModel; - } - - /** - * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! - * - * @noinspection ALL - */ - private void $$$setupUI$$$() { - createUIComponents(); - contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(7, 3, new Insets(20, 20, 20, 20), -1, -1)); - final JLabel label1 = new JLabel(); - label1.setText("Libros:"); - contentPane.add(label1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - final Spacer spacer1 = new Spacer(); - contentPane.add(spacer1, - new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, - null, null, 0, false)); - final Spacer spacer2 = new Spacer(); - contentPane.add(spacer2, - new GridConstraints(6, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, - null, null, 0, false)); - final Spacer spacer3 = new Spacer(); - contentPane.add(spacer3, - new GridConstraints(6, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, - null, null, 0, false)); - final JLabel label2 = new JLabel(); - label2.setText("Distribuidor:"); - contentPane.add(label2, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - contentPane.add(distribuidorCombo, - new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); - seleccionarButton = new JButton(); - seleccionarButton.setText("Seleccionar"); - contentPane.add(seleccionarButton, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - final JPanel panel1 = new JPanel(); - panel1.setLayout(new GridLayoutManager(10, 1, new Insets(10, 10, 10, 10), -1, -1)); - contentPane.add(panel1, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - panel1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black), "Factura")); - final JLabel label3 = new JLabel(); - label3.setText("Folio:"); - panel1.add(label3, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - folioField = new JTextField(); - folioField.setText(""); - panel1.add(folioField, - new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); - final JLabel label4 = new JLabel(); - label4.setText("Precio Neto:"); - panel1.add(label4, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - precioNetoField = new JTextField(); - panel1.add(precioNetoField, - new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); - final JLabel label5 = new JLabel(); - label5.setText("Precio IVA:"); - panel1.add(label5, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - precioIVAField = new JTextField(); - precioIVAField.setEditable(false); - panel1.add(precioIVAField, - new GridConstraints(5, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); - final JLabel label6 = new JLabel(); - label6.setText("Precio Bruto:"); - panel1.add(label6, new GridConstraints(6, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - precioBrutoField = new JTextField(); - precioBrutoField.setEditable(false); - panel1.add(precioBrutoField, - new GridConstraints(7, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); - final JLabel label7 = new JLabel(); - label7.setText("Fecha compra:"); - panel1.add(label7, new GridConstraints(8, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - fechaCompraField = new DatePicker(); - panel1.add(fechaCompraField, - new GridConstraints(9, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); - final JPanel panel2 = new JPanel(); - panel2.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); - contentPane.add(panel2, new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - guardarButton = new JButton(); - guardarButton.setText("Guardar"); - panel2.add(guardarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), - null, 0, false)); - volverButton = new JButton(); - volverButton.setText("Volver"); - panel2.add(volverButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), - null, 0, false)); - } - - private void createUIComponents() { - this.distribuidorModel = new DefaultComboBoxModel<>(); - this.distribuidorCombo = new JComboBox<>(this.distribuidorModel); - } - - /** - * @noinspection ALL - */ - public JComponent $$$getRootComponent$$$() { - return contentPane; - } -} diff --git a/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.form b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.form new file mode 100644 index 0000000..4e3e479 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.form @@ -0,0 +1,158 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.java b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.java new file mode 100644 index 0000000..872738a --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraAceptarPanel.java @@ -0,0 +1,167 @@ +package xyz.danielcortes.views.orden_compra; + +import com.github.lgooddatepicker.components.DatePicker; +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import com.intellij.uiDesigner.core.Spacer; +import java.awt.Dimension; +import java.awt.Insets; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import xyz.danielcortes.framework.BasePanel; + +public class OrdenCompraAceptarPanel extends BasePanel { + + private JPanel contentPane; + private JTextField folioField; + private JTextField precioNetoField; + private JTextField ivaField; + private JTextField totalField; + private DatePicker fechaEmisionPicker; + private JButton asignarButton; + private JButton guardarButton; + private JButton volverButton; + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + this.$$$setupUI$$$(); + } + + @Override + public JPanel getContentPane() { + return this.contentPane; + } + + public JTextField getFolioField() { + return this.folioField; + } + + public JTextField getPrecioNetoField() { + return this.precioNetoField; + } + + public JTextField getIvaField() { + return this.ivaField; + } + + public JTextField getTotalField() { + return this.totalField; + } + + public DatePicker getFechaEmisionPicker() { + return this.fechaEmisionPicker; + } + + public JButton getAsignarButton() { + return this.asignarButton; + } + + public JButton getGuardarButton() { + return this.guardarButton; + } + + public JButton getVolverButton() { + return this.volverButton; + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + contentPane = new JPanel(); + contentPane.setLayout(new GridLayoutManager(14, 3, new Insets(20, 20, 20, 20), -1, -1)); + final JLabel label1 = new JLabel(); + label1.setText("Folio:"); + contentPane.add(label1, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final Spacer spacer1 = new Spacer(); + contentPane.add(spacer1, + new GridConstraints(13, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, + null, null, 0, false)); + folioField = new JTextField(); + contentPane.add(folioField, + new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final Spacer spacer2 = new Spacer(); + contentPane.add(spacer2, + new GridConstraints(13, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final Spacer spacer3 = new Spacer(); + contentPane.add(spacer3, + new GridConstraints(13, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final JLabel label2 = new JLabel(); + label2.setText("Precio Neto:"); + contentPane.add(label2, new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + precioNetoField = new JTextField(); + contentPane.add(precioNetoField, + new GridConstraints(7, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + ivaField = new JTextField(); + ivaField.setEditable(false); + contentPane.add(ivaField, + new GridConstraints(9, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + totalField = new JTextField(); + totalField.setEditable(false); + contentPane.add(totalField, + new GridConstraints(11, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + final JLabel label3 = new JLabel(); + label3.setText("IVA:"); + contentPane.add(label3, new GridConstraints(8, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label4 = new JLabel(); + label4.setText("Total:"); + contentPane.add(label4, new GridConstraints(10, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label5 = new JLabel(); + label5.setText("Fecha Emision:"); + contentPane.add(label5, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + fechaEmisionPicker = new DatePicker(); + contentPane.add(fechaEmisionPicker, + new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JPanel panel1 = new JPanel(); + panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel1, new GridConstraints(12, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + guardarButton = new JButton(); + guardarButton.setText("Guardar"); + panel1.add(guardarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + volverButton = new JButton(); + volverButton.setText("Volver"); + panel1.add(volverButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + asignarButton = new JButton(); + asignarButton.setText("Asignar"); + contentPane.add(asignarButton, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + final JLabel label6 = new JLabel(); + label6.setText("Ejemplares:"); + contentPane.add(label6, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } + +} diff --git a/src/main/java/xyz/danielcortes/views/comprar/ComprarSeleccionarPanel.form b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraCrearPanel.form similarity index 60% rename from src/main/java/xyz/danielcortes/views/comprar/ComprarSeleccionarPanel.form rename to src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraCrearPanel.form index 6acd316..806dc8a 100644 --- a/src/main/java/xyz/danielcortes/views/comprar/ComprarSeleccionarPanel.form +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraCrearPanel.form @@ -1,28 +1,28 @@ -
- + + - + - + - + - + @@ -30,59 +30,25 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -90,19 +56,9 @@ - - - - - - - - - - - + @@ -110,6 +66,16 @@ + + + + + + + + + + @@ -132,6 +98,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/xyz/danielcortes/views/comprar/ComprarSeleccionarPanel.java b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraCrearPanel.java similarity index 62% rename from src/main/java/xyz/danielcortes/views/comprar/ComprarSeleccionarPanel.java rename to src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraCrearPanel.java index eafe37b..7571dab 100644 --- a/src/main/java/xyz/danielcortes/views/comprar/ComprarSeleccionarPanel.java +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraCrearPanel.java @@ -1,4 +1,4 @@ -package xyz.danielcortes.views.comprar; +package xyz.danielcortes.views.orden_compra; import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.uiDesigner.core.GridLayoutManager; @@ -12,25 +12,27 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.JSpinner; import javax.swing.JTable; -import javax.swing.JTextField; import xyz.danielcortes.framework.BasePanel; import xyz.danielcortes.framework.BaseTableModel; -import xyz.danielcortes.models.Ejemplar; +import xyz.danielcortes.models.Distribuidor; import xyz.danielcortes.models.Libro; -public class ComprarSeleccionarPanel extends BasePanel { +public class OrdenCompraCrearPanel extends BasePanel { private JPanel contentPane; - private JTable ejemplaresTable; - private BaseTableModel ejemplaresTableModel; + private JTable librosTable; + private BaseTableModel libroTableModel; private JComboBox librosCombo; private DefaultComboBoxModel librosComboModel; + private JComboBox distribuidorCombo; + private DefaultComboBoxModel distribuidorComboModel; private JButton agregarButton; private JButton removerButton; private JButton guardarButton; private JButton volverButton; - private JTextField serieField; + private JSpinner cantidadSpinner; { // GUI initializer generated by IntelliJ IDEA GUI Designer @@ -44,14 +46,22 @@ public class ComprarSeleccionarPanel extends BasePanel { return this.contentPane; } - public JTable getEjemplaresTable() { - return this.ejemplaresTable; + public JTable getLibrosTable() { + return this.librosTable; } - public JComboBox getLibrosCombo() { + public BaseTableModel getLibroTableModel() { + return this.libroTableModel; + } + + public JComboBox getLibrosCombo() { return this.librosCombo; } + public DefaultComboBoxModel getLibrosComboModel() { + return this.librosComboModel; + } + public JButton getAgregarButton() { return this.agregarButton; } @@ -68,16 +78,16 @@ public class ComprarSeleccionarPanel extends BasePanel { return this.volverButton; } - public BaseTableModel getEjemplaresTableModel() { - return this.ejemplaresTableModel; + public JComboBox getDistribuidorCombo() { + return this.distribuidorCombo; } - public JTextField getSerieField() { - return this.serieField; + public DefaultComboBoxModel getDistribuidorComboModel() { + return this.distribuidorComboModel; } - public DefaultComboBoxModel getLibrosComboModel() { - return this.librosComboModel; + public JSpinner getCantidadSpinner() { + return this.cantidadSpinner; } /** @@ -88,60 +98,44 @@ public class ComprarSeleccionarPanel extends BasePanel { private void $$$setupUI$$$() { createUIComponents(); contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(5, 3, new Insets(20, 20, 20, 20), -1, -1)); + contentPane.setLayout(new GridLayoutManager(8, 4, new Insets(20, 20, 20, 20), -1, -1)); final Spacer spacer1 = new Spacer(); contentPane.add(spacer1, - new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, + new GridConstraints(7, 1, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); final JScrollPane scrollPane1 = new JScrollPane(); - contentPane.add(scrollPane1, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + contentPane.add(scrollPane1, new GridConstraints(5, 1, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(400, -1), null, 0, false)); - scrollPane1.setViewportView(ejemplaresTable); + scrollPane1.setViewportView(librosTable); final Spacer spacer2 = new Spacer(); contentPane.add(spacer2, - new GridConstraints(4, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, + new GridConstraints(7, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); final Spacer spacer3 = new Spacer(); contentPane.add(spacer3, - new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, + new GridConstraints(7, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); final JPanel panel1 = new JPanel(); - panel1.setLayout(new GridLayoutManager(5, 1, new Insets(0, 0, 0, 0), -1, -1)); - contentPane.add(panel1, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel1, new GridConstraints(4, 1, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - panel1.add(librosCombo, - new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(350, -1), null, 0, false)); - final JLabel label1 = new JLabel(); - label1.setText("Libro:"); - panel1.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - final JLabel label2 = new JLabel(); - label2.setText("Serie:"); - panel1.add(label2, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, - GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - serieField = new JTextField(); - serieField.setText(""); - panel1.add(serieField, - new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, - GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); agregarButton = new JButton(); agregarButton.setText("Agregar"); - panel1.add(agregarButton, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + panel1.add(agregarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + removerButton = new JButton(); + removerButton.setText("Remover"); + panel1.add(removerButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); final JPanel panel2 = new JPanel(); - panel2.setLayout(new GridLayoutManager(1, 3, new Insets(0, 0, 0, 0), -1, -1)); - contentPane.add(panel2, new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + panel2.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel2, new GridConstraints(6, 1, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - removerButton = new JButton(); - removerButton.setText("Remover"); - panel2.add(removerButton, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, - GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), - null, 0, false)); guardarButton = new JButton(); guardarButton.setText("Guardar"); panel2.add(guardarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, @@ -152,30 +146,53 @@ public class ComprarSeleccionarPanel extends BasePanel { panel2.add(volverButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + final JLabel label1 = new JLabel(); + label1.setText("Distribuidor:"); + contentPane.add(label1, new GridConstraints(0, 1, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + contentPane.add(distribuidorCombo, + new GridConstraints(1, 1, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label2 = new JLabel(); + label2.setText("Cantidad:"); + contentPane.add(label2, new GridConstraints(2, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label3 = new JLabel(); + label3.setText("Libro:"); + contentPane.add(label3, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + contentPane.add(librosCombo, + new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + cantidadSpinner = new JSpinner(); + contentPane.add(cantidadSpinner, + new GridConstraints(3, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(50, -1), null, 0, false)); } private void createUIComponents() { this.librosComboModel = new DefaultComboBoxModel<>(); this.librosCombo = new JComboBox<>(this.librosComboModel); - this.ejemplaresTableModel = new BaseTableModel<>( - new String[]{"ISBN", "Titulo", "Precio Referencial", "Serie"}, + this.distribuidorComboModel = new DefaultComboBoxModel<>(); + this.distribuidorCombo = new JComboBox<>(this.distribuidorComboModel); + + this.libroTableModel = new BaseTableModel<>( + new String[]{"ISBN", "Titulo", "Precio Referencial"}, (rows, rowIndex, colIndex) -> { switch (colIndex) { case 0: - return rows.get(rowIndex).getLibro().getIsbn(); + return rows.get(rowIndex).getIsbn(); case 1: - return rows.get(rowIndex).getLibro().getTitulo(); + return rows.get(rowIndex).getTitulo(); case 2: - return rows.get(rowIndex).getLibro().getPrecioReferencia(); - case 3: - return rows.get(rowIndex).getSerie(); + return rows.get(rowIndex).getPrecioReferencia(); default: return null; } } ); - this.ejemplaresTable = new JTable(this.ejemplaresTableModel); + this.librosTable = new JTable(this.libroTableModel); } /** @@ -184,4 +201,5 @@ public class ComprarSeleccionarPanel extends BasePanel { public JComponent $$$getRootComponent$$$() { return contentPane; } + } diff --git a/src/main/java/xyz/danielcortes/views/comprar/ComprarSearchPanel.form b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraSearchPanel.form similarity index 67% rename from src/main/java/xyz/danielcortes/views/comprar/ComprarSearchPanel.form rename to src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraSearchPanel.form index 268a712..409cc76 100644 --- a/src/main/java/xyz/danielcortes/views/comprar/ComprarSearchPanel.form +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraSearchPanel.form @@ -1,9 +1,9 @@ -
- + + - + @@ -57,14 +57,14 @@ - + - + @@ -74,7 +74,37 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/xyz/danielcortes/views/comprar/ComprarSearchPanel.java b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraSearchPanel.java similarity index 67% rename from src/main/java/xyz/danielcortes/views/comprar/ComprarSearchPanel.java rename to src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraSearchPanel.java index de3dcad..9eb11d1 100644 --- a/src/main/java/xyz/danielcortes/views/comprar/ComprarSearchPanel.java +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraSearchPanel.java @@ -1,4 +1,4 @@ -package xyz.danielcortes.views.comprar; +package xyz.danielcortes.views.orden_compra; import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.uiDesigner.core.GridLayoutManager; @@ -13,17 +13,19 @@ import javax.swing.JTextField; import javax.swing.ListSelectionModel; import xyz.danielcortes.framework.BasePanel; import xyz.danielcortes.framework.BaseTableModel; -import xyz.danielcortes.models.Compra; +import xyz.danielcortes.models.OrdenCompra; -public class ComprarSearchPanel extends BasePanel { +public class OrdenCompraSearchPanel extends BasePanel { private JPanel contentPane; private JTextField searchField; private JButton buscarButton; private JTable table; - private BaseTableModel model; - private JButton comprarButton; + private BaseTableModel model; + private JButton crearButton; private JButton verButton; + private JButton cancelarButton; + private JButton aceptarButton; { // GUI initializer generated by IntelliJ IDEA GUI Designer @@ -32,6 +34,11 @@ public class ComprarSearchPanel extends BasePanel { this.$$$setupUI$$$(); } + @Override + public JPanel getContentPane() { + return this.contentPane; + } + public JTextField getSearchField() { return this.searchField; } @@ -44,21 +51,24 @@ public class ComprarSearchPanel extends BasePanel { return this.table; } - public BaseTableModel getModel() { + public BaseTableModel getModel() { return this.model; } - public JButton getComprarButton() { - return this.comprarButton; + public JButton getCrearButton() { + return this.crearButton; } public JButton getVerButton() { return this.verButton; } - @Override - public JPanel getContentPane() { - return this.contentPane; + public JButton getCancelarButton() { + return this.cancelarButton; + } + + public JButton getAceptarButton() { + return this.aceptarButton; } /** @@ -69,7 +79,7 @@ public class ComprarSearchPanel extends BasePanel { private void $$$setupUI$$$() { createUIComponents(); contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(3, 1, new Insets(20, 20, 20, 20), -1, -1)); + contentPane.setLayout(new GridLayoutManager(4, 1, new Insets(20, 20, 20, 20), -1, -1)); final JScrollPane scrollPane1 = new JScrollPane(); contentPane.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, @@ -94,35 +104,46 @@ public class ComprarSearchPanel extends BasePanel { contentPane.add(panel2, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - comprarButton = new JButton(); - comprarButton.setText("Comprar"); - panel2.add(comprarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + crearButton = new JButton(); + crearButton.setText("Crear"); + panel2.add(crearButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); verButton = new JButton(); - verButton.setText("Ver Orden de Compra"); + verButton.setText("Ver"); panel2.add(verButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + final JPanel panel3 = new JPanel(); + panel3.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel3, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + cancelarButton = new JButton(); + cancelarButton.setText("Cancelar Orden"); + panel3.add(cancelarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + aceptarButton = new JButton(); + aceptarButton.setText("Recibir Orden"); + panel3.add(aceptarButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); } private void createUIComponents() { this.model = new BaseTableModel<>( - new String[]{"Folio Factura", "Precio Neto", "Precio Bruto", "Distribuidor", "Fecha Compra", "Nº Libros Comprados"}, + new String[]{"Distribuidor", "Nº Libros", "Estado", "Fecha Emision"}, (row, rowIndex, colIndex) -> { switch (colIndex) { case 0: - return row.get(rowIndex).getFactura().getFolio(); - case 1: - return row.get(rowIndex).getFactura().getPrecioNeto(); - case 2: - return row.get(rowIndex).getFactura().getPrecioBruto(); - case 3: return row.get(rowIndex).getDistribuidor().getRut(); - case 4: - return row.get(rowIndex).getFactura().getFechaVenta(); - case 6: - return row.get(rowIndex).getEjemplares().size(); + case 1: + return row.get(rowIndex).getLibros().size(); + case 2: + return row.get(rowIndex).getEstado(); + case 3: + return row.get(rowIndex).getInsertedAt(); default: return null; } diff --git a/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.form b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.form new file mode 100644 index 0000000..fe6cf2a --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.form @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.java b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.java new file mode 100644 index 0000000..fc3f194 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/orden_compra/OrdenCompraViewPanel.java @@ -0,0 +1,128 @@ +package xyz.danielcortes.views.orden_compra; + +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import com.intellij.uiDesigner.core.Spacer; +import java.awt.Dimension; +import java.awt.Insets; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.BaseTableModel; +import xyz.danielcortes.models.Libro; + +public class OrdenCompraViewPanel extends BasePanel { + + private JPanel contentPane; + private JTable librosTable; + private BaseTableModel libroTableModel; + private JButton volverButton; + private JTextField distribuidorField; + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + this.$$$setupUI$$$(); + } + + @Override + public JPanel getContentPane() { + return this.contentPane; + } + + public JTable getLibrosTable() { + return this.librosTable; + } + + public BaseTableModel getLibroTableModel() { + return this.libroTableModel; + } + + public JButton getVolverButton() { + return this.volverButton; + } + + public JTextField getDistribuidorField() { + return this.distribuidorField; + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + createUIComponents(); + contentPane = new JPanel(); + contentPane.setLayout(new GridLayoutManager(5, 3, new Insets(20, 20, 20, 20), -1, -1)); + final Spacer spacer1 = new Spacer(); + contentPane.add(spacer1, + new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, + null, null, 0, false)); + final JScrollPane scrollPane1 = new JScrollPane(); + contentPane.add(scrollPane1, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(400, -1), null, 0, false)); + scrollPane1.setViewportView(librosTable); + final Spacer spacer2 = new Spacer(); + contentPane.add(spacer2, + new GridConstraints(4, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, + null, null, 0, false)); + final Spacer spacer3 = new Spacer(); + contentPane.add(spacer3, + new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, + null, null, 0, false)); + final JPanel panel1 = new JPanel(); + panel1.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel1, new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + volverButton = new JButton(); + volverButton.setText("Volver"); + panel1.add(volverButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + final JLabel label1 = new JLabel(); + label1.setText("Distribuidor:"); + contentPane.add(label1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + distribuidorField = new JTextField(); + distribuidorField.setEditable(false); + contentPane.add(distribuidorField, + new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + } + + private void createUIComponents() { + + this.libroTableModel = new BaseTableModel<>( + new String[]{"ISBN", "Titulo", "Precio Referencial"}, + (rows, rowIndex, colIndex) -> { + switch (colIndex) { + case 0: + return rows.get(rowIndex).getIsbn(); + case 1: + return rows.get(rowIndex).getTitulo(); + case 2: + return rows.get(rowIndex).getPrecioReferencia(); + default: + return null; + } + } + ); + this.librosTable = new JTable(this.libroTableModel); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } +}