From 430487ee63103d5fa3177990f0c29ce5739da981 Mon Sep 17 00:00:00 2001 From: esoe Date: Tue, 7 Jun 2022 16:19:09 +0300 Subject: [PATCH] =?UTF-8?q?report-=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=D1=81=D1=8F=20=D0=BD=D0=BE=D1=80=D0=BC=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ru/egspt/App.java | 2 +- src/main/java/ru/egspt/ReportPane.java | 106 ++++++++++++++++++ src/main/java/ru/egspt/ReportTableModel.java | 48 +++++--- src/main/java/ru/egspt/TagControls.java | 29 +++-- target/classes/ru/egspt/ReportPane.class | Bin 2844 -> 5846 bytes .../classes/ru/egspt/ReportTableModel.class | Bin 4134 -> 4471 bytes target/classes/ru/egspt/TagControls.class | Bin 2138 -> 2119 bytes 7 files changed, 155 insertions(+), 30 deletions(-) diff --git a/src/main/java/ru/egspt/App.java b/src/main/java/ru/egspt/App.java index e18ef9e..90fdd77 100644 --- a/src/main/java/ru/egspt/App.java +++ b/src/main/java/ru/egspt/App.java @@ -83,4 +83,4 @@ public class App extends JPanel{ } -} +} \ No newline at end of file diff --git a/src/main/java/ru/egspt/ReportPane.java b/src/main/java/ru/egspt/ReportPane.java index 4a263f1..20634eb 100644 --- a/src/main/java/ru/egspt/ReportPane.java +++ b/src/main/java/ru/egspt/ReportPane.java @@ -8,6 +8,7 @@ import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; +import javax.swing.table.DefaultTableModel; public class ReportPane extends JPanel { private JPanel reportTablePane = new JPanel(); @@ -50,6 +51,71 @@ public class ReportPane extends JPanel { public void setReportData(Data data){ getReportTableModel().setData(data); } + public void setReportHeader(Data report){ + //настройка заголовков таблицы + System.out.println("настраиваем отображение заголовков таблицы отчетов ... "); + reportTableModel = new ReportTableModel(report); + System.out.println("reportTableModel.getColumnCount(): " + reportTableModel.getColumnCount()); + System.out.println("reportTableModel.getHeader().length: " + reportTableModel.getHeader().length); + reportTable = new JTable(reportTableModel); + System.out.println("reportTable.getColumnModel().getColumnCount(): " + reportTable.getColumnModel().getColumnCount()); + int j = 0; + while (j < getReportTableModel().getHeader().length){ + getReportTable().getColumnModel().getColumn(j).setHeaderValue(getReportTableModel().getHeader()[j]); + System.out.println(j + " Заголовок модели: " + getReportTableModel().getHeader()[j]); + System.out.println("Заголовок таблицы: " + getReportTable().getColumnName(j)); + j++; + } + //getReportTableModel().fireTableStructureChanged(); + //getReportTableModel().fireTableDataChanged(); + } + /** + * формирование таблицы с новым отчетом + * обработка заголовков таблицы и данных в одном методе, + * замещаем методы: + * setReportHeader() + * setReportData() + * setReportContent() + * + * @param report + */ + public void updateReport(Data report){ + //подготовка новой модели данных для отображения в таблице + System.out.println("подготовка новой модели данных для отображения в таблице отчета ... "); + setReportTableModel(new ReportTableModel(report)); + DefaultTableModel dm = new DefaultTableModel(getReportTableModel().getData(), getReportTableModel().getHeader()); + getReportTable().setModel(dm); + + //отображение в таблице отчета по тегу + //System.out.println("отображение в таблице отчета по тегу " + " ... "); + //setReportTable(new JTable(getReportTableModel())); + getReportTable().revalidate(); + //отображение заголовков таблицы + /* + int j = 0; + while (j < getReportTableModel().getHeader().length){ + getReportTable().getColumnModel().getColumn(j).setHeaderValue(getReportTableModel().getHeader()[j]); + j++; + } + */ + //getReportTableModel().toConsole(); + putTableToConsole(getReportTable()); + getReportTableModel().fireTableDataChanged();//оповещаем об изменении данных + getReportTableModel().fireTableStructureChanged();//оповещаем об изменении структуры модели-таблицы!!! + + + + } + public void setReportContent(Data report){ + //устанавливаем заголовки + setReportHeader(report); + //устанавливаем данные + setReportData(report); + getReportTableModel().fireTableStructureChanged();//оповещаем об изменении структуры модели-таблицы!!! + getReportTableModel().fireTableDataChanged();//оповещаем об изменении данных + //getReportTable().repaint(); + + } public void setupReportTextPane(){} public void setupReportSettingsPane(){} /** @@ -58,5 +124,45 @@ public class ReportPane extends JPanel { public ReportTableModel getReportTableModel() { return reportTableModel; } + /** + * @param reportTableModel the reportTableModel to set + */ + public void setReportTableModel(ReportTableModel reportTableModel) { + this.reportTableModel = reportTableModel; + } + /** + * @param reportTable the reportTable to set + */ + public void setReportTable(JTable reportTable) { + this.reportTable = reportTable; + } + /** + * @return the reportTable + */ + public JTable getReportTable() { + return reportTable; + } + public void putTableToConsole(JTable table){ + //Данные таблицы в консоль + //table.getModel(); + //заголовки + int i = 0; + while (i < table.getModel().getColumnCount()){ + System.out.print(table.getModel().getColumnName(i) + " "); + i++; + } + System.out.println(); + //данные + i = 0; + while (i < table.getModel().getRowCount()){ + int j = 0; + while (j < table.getModel().getColumnCount()){ + System.out.print(table.getModel().getValueAt(i, j) + " "); + j++; + } + System.out.println(); + i++; + } + } } diff --git a/src/main/java/ru/egspt/ReportTableModel.java b/src/main/java/ru/egspt/ReportTableModel.java index 0ec51b0..fc999f2 100644 --- a/src/main/java/ru/egspt/ReportTableModel.java +++ b/src/main/java/ru/egspt/ReportTableModel.java @@ -3,6 +3,7 @@ package ru.egspt; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableModel; public class ReportTableModel extends AbstractTableModel{ private Object[] header; @@ -42,7 +43,6 @@ public class ReportTableModel extends AbstractTableModel{ */ public void setHeader(Object[] header) { this.header = header; - fireTableDataChanged(); } /** * Настройка заголовков отчета @@ -64,11 +64,17 @@ public class ReportTableModel extends AbstractTableModel{ int i = 0; while (i < report.getQuizes().size()){ header.add(report.getQuizes().get(i).getName()); - //System.out.println("Пишем заголовок: " + report.getQuizes().get(i).getName()); header.add(""); i++; } - return header.toArray(); + //преобразуем список в массив + Object[] h = new Object[header.size()]; + int j = 0; + while (j < header.size()){ + h[j] = header.get(j); + j++; + } + return h; } /** * @return the header @@ -88,8 +94,6 @@ public class ReportTableModel extends AbstractTableModel{ public void setData(Data report) { //создаем объект data - инициализация переменной Object[][] d = new Object[report.getUsers().size()][3 + 2*report.getQuizes().size()]; - System.out.println("Количество столбцов Object[][] d: " + (3 + 2*report.getQuizes().size())); - System.out.println("Количество строк Object[][] d: " + report.getUsers().size()); //построчно заполняем модель отчета данными int userCurr = 0; while (userCurr < report.getUsers().size()){ @@ -102,7 +106,6 @@ public class ReportTableModel extends AbstractTableModel{ //перебираем остальные заголовки (перечень опросов) int quizCurr = 0; while (quizCurr < report.getQuizes().size()){ - if (find == false){ //перебираем результаты, ищем результаты по текущему опросу int resultCurr = 0; @@ -120,25 +123,22 @@ public class ReportTableModel extends AbstractTableModel{ } } else{ - string.add(""); - string.add(""); + string.add(" "); + string.add(" "); find = false; } - + find = false; quizCurr++; } //пишем строку в d int j = 0; while (j < string.size()){ - //while (j < 3){ d[userCurr][j] = string.toArray()[j]; j++; } - userCurr++; } - this.data = d; - fireTableDataChanged(); + setData(d); } /** * @return the data @@ -146,4 +146,26 @@ public class ReportTableModel extends AbstractTableModel{ public Object[][] getData() { return data; } + public void toConsole(){ + //заголовки + int i = 0; + while (i < getHeader().length){ + System.out.print(getHeader()[i] + " "); + i++; + } + System.out.println(); + //данные + i = 0; + while (i < getData().length){ + int j = 0; + while (j < getData()[i].length){ + System.out.print(getData()[i][j] + " "); + j++; + } + System.out.println(); + i++; + } + System.out.println(getHeader().toString()); + + } } diff --git a/src/main/java/ru/egspt/TagControls.java b/src/main/java/ru/egspt/TagControls.java index d10f81a..e6de355 100644 --- a/src/main/java/ru/egspt/TagControls.java +++ b/src/main/java/ru/egspt/TagControls.java @@ -1,5 +1,7 @@ package ru.egspt; +import java.util.ArrayList; + public class TagControls { //добавляем тег в модель public static void addTag(App app){ @@ -7,21 +9,17 @@ public class TagControls { app.getTagModel().addTag(app.getTagPane().getCurrentTag()); //обновляем текстовую область app.getTagPane().updateTagArea(app.getTagModel()); + //теги в консоль + System.out.println("добавлен новый тег: " + app.getTagPane().getCurrentTag()); app.getTagPane().getCurrentTagField().setText(""); //Подготавливаем данные для отчета (перебор данных по тегам) Data report = new Data(); report.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); report.setResults(app.getData().getResultsByUsers(app.getData().getResults(), report.getUsers())); report.setQuizes(app.getData().getQuizesByResults(app.getData().getQuizes(), report.getResults())); - //формирование заголовков таблицы отчета - app.getReportPane().getReportTableModel().setHeader(app.getReportPane().getReportTableModel().getHeaderByQuize(report)); - //формирование данных в таблице - app.getReportPane().getReportTableModel().setData(report); - //app.getReportPane().setupReportTablePane(report); - //app.getReportPane() - app.getReportPane().getReportTableModel().fireTableStructureChanged();//оповещаем об изменении структуры модели-таблицы!!! - app.getReportPane().getReportTableModel().fireTableDataChanged(); - + //формирование таблицы отчетов + app.getReportPane().updateReport(report); + //app.getReportPane().setReportContent(report); } //удаляем тег из модели @@ -33,12 +31,11 @@ public class TagControls { //tp.getTagArea().update(tp.getTagArea().getGraphics()); app.getTagPane().getCurrentTagField().setText(""); //Выводим пользователей в отчет - Data data = new Data(); - data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); - //app.getDataPane().setUsers(data); - //app.getDataPane().getUsersTableModel().fireTableDataChanged(); - app.getReportPane().setReportData(data); - //app.getReportPane().setupReportTablePane(app); - app.getReportPane().getReportTableModel().fireTableDataChanged(); + Data report = new Data(); + report.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); + report.setResults(app.getData().getResultsByUsers(app.getData().getResults(), report.getUsers())); + report.setQuizes(app.getData().getQuizesByResults(app.getData().getQuizes(), report.getResults())); + //формирование таблицы отчетов + app.getReportPane().updateReport(report); } } diff --git a/target/classes/ru/egspt/ReportPane.class b/target/classes/ru/egspt/ReportPane.class index 9cd003defb0a37f377ccd8914117d34da564e646..092563d30328488498bcfa041a27c0f660cae377 100644 GIT binary patch literal 5846 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 diff --git a/target/classes/ru/egspt/ReportTableModel.class b/target/classes/ru/egspt/ReportTableModel.class index b103b041be1ccc6c1863411b4b507237a375c9ca..59d532e0c75ad494b919ae3d270582509991249e 100644 GIT binary patch literal 4471 zcmZ`-YjjlA75>h=ZZh2PNEqUfqy_{`LSSrK(n>-wBn1KqAcL_ys!Wngm@t_c=fO)0 zl%{Bl(N^24)C$pR`mn899jH{)T5W6J?dt04>i@2GEq`^b{;@pz?Q>@)Gn0|5+{Zb4 z?{7c8z3&O{Uw{1yfKTEt1{@0hL^@!NCgZ8VPAeWuq;`ddBGy1`#EKYjDJ&Zc9S$80 zB#(rnqk)v{1-gflsYGbFKvKbT&}nc za8jYJ|05%!CoN57Tqx&O^Pm^>*n|&@6e^QeYI8QkMdeJ`;y0P_W3hrk@m?KrZBu#U zjG<}9QIYMiO*EMJ7;aXWKbk|_aO}=>__)Pd%+e?mi+H_6+^CbpV1mRTbz~aD+$X zrN=}sKEohGBO~J4Y{=$471*TUj>Ja8(FzdLH698_yx58X1N{nB`Ls)-O>DzT?8LeQ3?n+vTB-ahxSC|o5_9Bj?iIfEB zrf46_dl*Lz9AVSUgxMEOS)*3M#4#La>JAIvwja=ZE2LXij3tWW0TZ8>Jc|SULIPPl zY2s8a`2(5`r!isRi$!1?VzG!7iVE151Y%DiM0S%9r}3bPhwx=~@Q|&c+dy~T9!bGj z6Aw!Yq(gRE$#f*eBs{|LkY}E~>cu3!YT|2>1L-(niqL!)lCt%66W_>fNy=nv5>J?T z5>MITZA$PXpmBS>_!hox;OQcg^v2R0*AmY&Le}2Gcf(rtqxI%w1t&W_1xW z`(v7y-yw+_g_tjxn3gGFq++^Lxz1*+NYlrjbb=ox4?kGsGO2qY9OYI`0h4lhq{4lS z*H-W*beim!%2cc;7EQ7im3SFHG4M)JP{Cu#ltq@kiq{x=EG>O#+YiSAJBXWNCt0EK z4g(k2%rjiF8*D>59O0MKiwvsd^16x3_!)iXY_-JMRpo|CK>$T&*sfO?W+VTJvA4w7 z+a)$^g^t4H7uyiccTD_3vo;m8H@$cdzcTR4++ZvY&cv_rK07Ba@k(uHIjBE1@8P#5 zekb2_LrX^34EN$4vHeHcpb2j6IIi^*+nV>e z+~Jvl*ExI(@Xp}{cgsbXFKe;6yn6JaiFtfBZ2`>30=|iIHLs$)o5lrXo+!7h%%G;F zHG|q2Gu3c$yNcJjRGY`^d~LGPR?C{C0qvvsF;9jP%?eCi7A8n(2lr|;jNsG@6z`3t zPy$#(z=ibDr=b?vs(Gjy0xYFr0k|a#usaLj&jT!*!QkU8m|DWzM3a7A7Z#i}gKZTg+bZOLHul@}S2gBi&syFuHrlkLgcQTTXS?Y3FkOUr7v<5OAeO~jH? zRSI@pTYcM0CGfXu19o95^I=rt)3}``sED2QVdcJSLCIqn=gXm);Y{3XWBcptd zV?YPpWrvebWfCDxyb2s*_(M$5&HQW(GpSD6X{5e~UJMe?;+h)==#Q|$mLH}3L9USC z*Ra&UI#quSegk1uMH!v|?KBqj^Q-76t#MF0R@%=zj%SsN>N!?g&)sxt&qvf#npWz` zGqr8Yaf!ij+^7-OBf?C3+}Xk$-2X0OjsaFutd@Og67dF%oPiv=DpcH;ut zwF?C%zIh4f@@^EYpO;0K_G7|OK11wkf}NU%-|wn^&Q`MTS$}P5kMeoMFD>1x-Co$* z(B?Dzt_+^{8ErvrP~OPue`Pr?Ii0%xc7EX61bz(5NRs`iCBgh8S3PO9oK)&0HFuCe zBM4)R1RO_%L>jM>NeK`!K)flqcb)T#k| zmppO6ueRcQx*3+M)%ZUBchS>-;|F+=yc@?q@k8!<=M8jn%w};>JB^jL z)8l2^>BqTmt6EM+WadsfJEyVi6})sA8IHC~9KmgMZ5jNu`i%_U%;4u4ygQ*(ovdG( zy76~PX7C$PTJKypjTJ?jdU%)UI#fM%xkK&0+S*xrtGRN8D`Gl>-)Ha#>1wAQc3U`1 zfG3#yCz;`=_%%F-6?_ihX^xX;_~|&$nSX)Ync~2EmZy;CSd}T(;&~+T0$Fk%Ct1CR zSuHsy*x!!HY>gc_tA`u^V5AipY4!k{56@M&Rb$On{@=;c5BarL_!G4q`1Ah(0lv&5 literal 4134 zcmZ`+?|T$i6@KsTW@ocZfFva83P`9GlMoV$1(iS~Bn5&APy&GvC`__Lvarc6yR(E) zRN5lgibZX!7A=B5icwTRSP&HJk6QIp_}nl0_{G1$w$%6BncZxX?UU!(xpU7w=RH5( zbLQrskM2DH@D%=Gz^4#NWt#1wbkb?wX(tmYXO}e)x4RQjJ8mGL@Wc`8xOJjAJr)}s zYIa1{+%}MQQr2L>Nrm9BZAI;rLS=uKXf($yp5H!j#2$276arDpu@n~c7nKIr#YSUJ ztAf9-zL$sFi5`X@WhP1yR+!fn8@0D(Mh5JZ_D-RqD=}!rd#zMVJn}XJ&TuTPu(0c6 zBcdk_bwyk#=2m@g81&dg6{;0V)3&q43$ePG3HSJ8CL;KRg2Ce*I^>$V;>H<6-ISwp zw#7BE*u*EXL}C6=4sql7Gnv>)o3)swQ6v`eda1avP!g9)FEG)TOlr(e<1+@9 zDVX`gl$fYPJp-W^ZXo4#^|P$`tz=SR?$o}RRG34hor$sbL}t{{MeP))n#JTwh3dNc zVkw~=sFS^c)H|gFTxX&LL4j^H@kJrug2SYC^oCl+sROQo#w zu2|X$V*|=U=uq&*qVlrI#Aa+^7OZGge4p)8{k{;kDwM<%L$T2iy4V0CRxBRIHtaC4 zU7;*r7xBQvGuY{7MAL$duVHD5_|hWyyG-l`o667Z2!64w7}#5gB4)$bgMB9YvESvu zHfw|gT#y6O-QDA)I22k!cvb;|b;yK;74$z%y2{3&iKvv%a1uI0oD(TMWavpzk6Dx$ zi#NTy$CJ4ZFB;~$*(q%$3CnsMYw&2dmDJNgY8y9UAS8JmHIa}chM1JyX*-qXekoFL z3^1MZrv_Nhc-pZ?Ok{AJDNJM}g)Uqy(Y%A2t=c$VUuweHC5KhS@mHoCU9HjFWxk}>$@ z8RYSjFEe8dUo~+W&ojI1M|+e!TQt4S?qSax(qarRnm8l14LJ!{7{*zA-N3mVt*6Il z;wACGNJ_|Yvh*A5=Z_8O;c13)Z)PY4zFEjJ$$J>*alyp5gfu0rMJHS4J9y2&tDIC* z$?P0;>>)d4;&ptNP8^pe-+ov(d0~%x#~9yveBZ_ zi92N3FF2F)-R$m$F@b9)ekD1OF(=(8qhk*)i0HbB8#$4rOhgm-t%+N>?Gku%ieFxh z+Y!bc{LaALX&mlIWcZDgc@Itt@)WejHmzc=v*JaD^xS4_ISVp_L%CD`liPqHhN zp(E{?6hHUDv?e-x{%}l)S6R@Exnxn{7=v;Z!YQ2#_eC9HetHs_)S$g77AIuY%sWVv zumDThy?)+VeEj2h)+@FwpJkNrj=Dvj`;(cVOPo$L8`ks5j?e9@nOO0P|7K zH&L$OuPFD?xPZ(P<%Z>1R5mnbQ8Q(x0s(CxK-5yq<=;GQves4eOwxe%QT&)E1BYe> zW}yeu!_z*>Dm9GYED|U_YiB~06R?6{mHb_xp{iZgJX9qC9;aae_>>3G=K)0W08dO| za5)R6nlLpq`56Bq1u&63Oau*Bu3;Ln!h>0<-2M>$g*{GYCVH##bSPWm!OTr*of8WpyX*@W!kWnHxX%p2G^y$}JNZ6Fd5xm&mMS-f%=-7B#R$k#0CEv<0?+l>|0fa=EFo5zZCzgf;oEp`Z9W_ANb95 zH!fq1cA>z;&AZ6v-6+_Y`2@LZ49mQo*^(|6!g2cQ=D&9hzpS%&=<9+Tu9K-uasY>4A>fop*jHxFv zqSj+vZNPJC3r?vWyv6k5wCcmKvhkuC#u;@KXVo|_KBu@oi@|>7kI=(jGjK_LfHL(y(&YEtD&GevSMxt&dj%^_2XZ<@Q0r2k{n;&TPn6i#FuDG~vVF{}0Nzqd@=w diff --git a/target/classes/ru/egspt/TagControls.class b/target/classes/ru/egspt/TagControls.class index 3a000aa7c41bc32cb261e31d250d78cbb8e0eba3..aa297a8d55f807e7f078a00990a44430e731936e 100644 GIT binary patch delta 1078 zcmcJONpllN7>1vgv1Eyc2vaPElo3G&8Dqp^LxK_(vl<5Q7K7Q$fCnKEk|NE3AOW%6 zI1blT$FxsKn z$s91-c+#Rd#l$$Jw^GnN$ zPJ@!>kH8rf=eLw4R5Uh@yM4i?gSWUHp(^JzPc&kcie-DqELfU5{Hf4RY09*%hOTH& z8S}XTeWrWdebYJ+eyF)m(p?)KSFLU}+!^CD3kU&E-G9OzwQ0I%NKdqHea-fb9?Lye zdGvey;_+)E-q(K6qy-C_}SjrQY;j&UPV0i<8zql*WAjh~z z4LMI?{XzPOsPE=5t3j308e|WGQJ{Eq1;d)h|H@YfTQ7ydj{?;xcnP}rNq*~f^0brN bw?d(|RsFVnSjt^R=iD3|-288Q*#gAd8f`ObIQdw=JA^W^V89|M@fPZqiqhFm{q%8k00 zTeZviTGexFm4=0sLf^K%Yv(F zn8JyIQ#CjJoekrz+8Y(4Fi@y%+Lfa1IFkfj>Zs9DjY8xkAXJ`tDu5#j=b->rYfbQG>LL6p6gW0O!Ew$wJ=Uf?P)@w8oihh zw1q=q!uK?u(|8_JtmM~Awnq`m3$C%LUz<8DdQr%<#tdGd{Qm;CYB zNnaw74QXmyTf{_l=5SHtE%0P@({HU|T%M1S7-!D+oJwxNb?s)sX?UUgI~ogEjMNX^ z7n`B_mtqwUgmgFukp`V|U)FdRON2stF_crC(~8)0xT^76+Tj6Dm6~U8c;XA(bz=UwtG>QU8jznZ#Y_8~2QWZcDO$V6eH?WTk$E_=7_vPIJ^Eb+NU z1v`-nQ4YCg9h{}}1~rX3zKAYDbhrl&RSF#&8lDWu(R+>?O+gL@f7A0_li%WmH6=;6 zt8rhvhFV^dGh*ch3V(RUi( z3+|rq;7BJT^r=#KLo+Ki-`zAzj!f`AM(=+Y&dWGpCSu_y1pHSr`1x;fmE)7s14pMH zq5BWMba9d(+!oj4eAkf!pFLcqIr&aR!77Cm{ej=61N8AX9AGTKIe8OHfXT?19heP} z`wMgHkML??hQ`caq^#1Gm_0k)G> zHGU1?w%+`N+XXTK$@h}WDA`VOJxgwRTGq*}#tHZkgZLT4_yr^Q6=R_e!x2~Pp~?7J zw*3LVq!MX%C{_f&$BGnLI8o$luKvFwf}PyH?Zjam-NbN~h|iJ3I5|uZ(Ih!c;X0