From 27ff4a3f4e820a6628bc833fec69bc92a08755b8 Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Mon, 14 Mar 2022 12:18:38 +0400 Subject: [PATCH 01/10] #7 -- add mvc for meetings --- data/db.mv.db | Bin 61440 -> 49152 bytes .../configuration/SecurityConfiguration.java | 2 +- .../ru/ulstu/controller/NewsController.java | 2 + src/main/java/ru/ulstu/meeting/Meeting.java | 55 +++++++++++ .../ru/ulstu/meeting/MeetingController.java | 88 ++++++++++++++++++ .../ru/ulstu/meeting/MeetingRepository.java | 9 ++ .../java/ru/ulstu/meeting/MeetingService.java | 47 ++++++++++ src/main/resources/templates/admin.html | 3 + src/main/resources/templates/default.html | 4 +- src/main/resources/templates/editMeeting.html | 33 +++++++ src/main/resources/templates/meetings.html | 40 ++++++++ src/main/resources/templates/viewMeeting.html | 23 +++++ 12 files changed, 303 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/ulstu/meeting/Meeting.java create mode 100644 src/main/java/ru/ulstu/meeting/MeetingController.java create mode 100644 src/main/java/ru/ulstu/meeting/MeetingRepository.java create mode 100644 src/main/java/ru/ulstu/meeting/MeetingService.java create mode 100644 src/main/resources/templates/editMeeting.html create mode 100644 src/main/resources/templates/meetings.html create mode 100644 src/main/resources/templates/viewMeeting.html diff --git a/data/db.mv.db b/data/db.mv.db index 49a6a54388a3b0c978a5bd5d7c4a5f5f1c7f537f..1c534f284e2845a2346862a6ae7b9e030cd401ca 100644 GIT binary patch literal 49152 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 literal 61440 zcmeG_ZEPIJbw`RPOOz;yvMpJ%q^!@DEhXpk?%sZ~3G5^9PCSVp5|5;%v}?< zBX!?=?am$Vj+8{jQarN3y_wyadGp?zH}l@SnKwS7#tWs2`<@YtJoEmqc_WG}%W?O7 zqx_x`*E8a7)pP1zaYQi}4aag8J;RPKR;tTReME_0@TxVxQpO)Hmb|)q-m8u{wxM}W zQ6G$me*yyn0|EmA0|EmA0|EmA0|EmA0|EmA0|EmA18+D6#)ba>hSNX*ATS^>ATS^> zATS^>ATS^>ATS^>ATS^>ATV&XF+ex@i;L6?K#iBY@<=ki?5vD97CasrNouwnFMAKw zM~d+kXUVI9dqBKesnkc3Nz(;S0oih0Eg7%-%iuX+>89Z-PUsc@Rj>Hvu}Y&{ACaZa z{Ri#^d)|BKz?LHsMNMkDVMez_w?_w~JEA+IL(yH)-O)YK;ppDzjnSK;H%IqH_eXDu z9*7={-Woj=Jsdp}86LPzy7O#4Gb@eFWKy%4h0(d(L|Rg1d3Ycu#fIMBNAjh)d}c<< zWu>X;0(p|QuS%#}yo}${ep%m_t##8xm=`PcBRnIaNWl^_P zMbR`(Ng9QsS11%st57stSt&ZQ;>eDxIcCArRK2KKnq?Qvq-PZ5yQEZlGB-6maJwW8 zU7(ZXnFtmR;A8ErO1Y_Y<}6pVwI9O+cLLg9W-QPJ?^Buk14QT2F{pDka{@YnIE6#( zd}bz}o1O~ZQ+%g^U@>VnH<`)LrY29*+*zPPOd6Y*9%UK1*@-sF(KkSj6FuH6WOEal z4s=I!y$k4?*)UyGY8zom$79fEsOuPzuilw@_`3~}3tDI)7pl4^jR24kg{=i;t%+5{aV7gpGvAI(VhN4cMNS{h(%sE-R-?XfhBB#e?E4hH@jfEcFB$x+o z8@LgA`tja_wpUksff17k?8joXxy$PW0C^MO<2)sA`<$3PH7-x(#!qUxmOYz$r%sy`4;ztbErM*|Wh5E(2UsyFJ3W)hotQ$alw)fI=^8Bcs4DE? zOeUL|!K*4x{RLzGr(URJG6I%Q42QRXto&mC#%7m%CXZHG zS0FRTr}MD%>a|49onC;o=M1#e`#U@+7tqpbx!LxwsC1^iSwND%7es98 z2F`9>d!qHpzyaXFGaHuO>1=1=4O#_5EfeAgf#)7shv$M)-A6LFUPp~znmC6N(8XJ! ziz~E?-Q~GGGdG)`Gjg_)PV3|MpHa;da(-T$p9opA<8TZ5fD{Of1Vj;p+CzYW&s{kN zK*)E6Efn&6+iPT4uPTD>0mO#^Q(kw0q}+d2IhoP(Q)gz5uiu96u|^`nG=UUIWQ1mwuW8X21+5*F3V?-yB(utnPrP)zqcczNX%MJN$e{Q(lcU

mo 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 T4)_06!-SEehPvJ6{2Kg!v-~pM diff --git a/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java b/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java index f893257..f479e11 100644 --- a/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java +++ b/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java @@ -45,7 +45,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { log.debug("Security enabled"); http.authorizeRequests() .antMatchers("/").permitAll() - .antMatchers("/login", "/index", "/news/**", "/h2-console/*", "/h2-console").permitAll() + .antMatchers("/login", "/index", "/news/**", "/meetings/**", "/h2-console/*", "/h2-console").permitAll() .antMatchers("/swagger-ui.html").hasAuthority(UserRoleConstants.ADMIN) .anyRequest().authenticated() .and() diff --git a/src/main/java/ru/ulstu/controller/NewsController.java b/src/main/java/ru/ulstu/controller/NewsController.java index a2f2859..139daa5 100644 --- a/src/main/java/ru/ulstu/controller/NewsController.java +++ b/src/main/java/ru/ulstu/controller/NewsController.java @@ -59,6 +59,7 @@ public class NewsController { } @GetMapping("/editNews/{newsId}") + @Secured({UserRoleConstants.ADMIN}) public String editNews(@PathVariable(value = "newsId") Integer id, Model model) { model.addAttribute("news", (id != null && id != 0) ? newsService.getById(id) : new News()); return "editNews"; @@ -82,6 +83,7 @@ public class NewsController { } @GetMapping("deleteNews/{newsId}") + @Secured({UserRoleConstants.ADMIN}) public String delete(@PathVariable(value = "newsId") Integer id) { newsService.delete(id); return "redirect:/news/news"; diff --git a/src/main/java/ru/ulstu/meeting/Meeting.java b/src/main/java/ru/ulstu/meeting/Meeting.java new file mode 100644 index 0000000..fcc9266 --- /dev/null +++ b/src/main/java/ru/ulstu/meeting/Meeting.java @@ -0,0 +1,55 @@ +package ru.ulstu.meeting; + +import org.springframework.format.annotation.DateTimeFormat; +import ru.ulstu.model.BaseEntity; + +import javax.persistence.Entity; +import javax.persistence.Lob; +import javax.validation.constraints.NotEmpty; +import java.util.Date; + +@Entity +public class Meeting extends BaseEntity { + @NotEmpty(message = "Заголовок не может быть пустым") + private String title; + + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") + private Date date; + + @Lob + @NotEmpty(message = "Текст заседания не может быть пустым") + private String text; + + public Meeting() { + } + + public Meeting(String title, String text, Date date) { + this.title = title; + this.date = date; + this.text = text; + } + + public String getTitle() { + return title; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setText(String text) { + this.text = text; + } + + public String getText() { + return text; + } +} diff --git a/src/main/java/ru/ulstu/meeting/MeetingController.java b/src/main/java/ru/ulstu/meeting/MeetingController.java new file mode 100644 index 0000000..f85eea3 --- /dev/null +++ b/src/main/java/ru/ulstu/meeting/MeetingController.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + * + */ + +package ru.ulstu.meeting; + +import org.springframework.data.domain.Page; +import org.springframework.security.access.annotation.Secured; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import ru.ulstu.model.OffsetablePageRequest; +import ru.ulstu.model.UserRoleConstants; + +import javax.validation.Valid; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +@Controller +@RequestMapping("meetings") +public class MeetingController { + private final static int DEFAULT_PAGE_SIZE = 10; + private final MeetingService meetingService; + + public MeetingController(MeetingService meetingService) { + this.meetingService = meetingService; + } + + @GetMapping("/meetings") + public String listMeetings(Model model, + @RequestParam Optional page, + @RequestParam Optional size) { + int currentPage = page.orElse(1); + int pageSize = size.orElse(DEFAULT_PAGE_SIZE); + + Page meetingsPage = meetingService.getMeetings(new OffsetablePageRequest(currentPage - 1, pageSize)); + model.addAttribute("meetings", meetingsPage); + int totalPages = meetingsPage.getTotalPages(); + if (totalPages > 0) { + List pageNumbers = IntStream.rangeClosed(1, totalPages) + .boxed() + .collect(Collectors.toList()); + model.addAttribute("pageNumbers", pageNumbers); + } + return "meetings"; + } + + @GetMapping("/editMeeting/{meetingId}") + @Secured({UserRoleConstants.ADMIN}) + public String editMeeting(@PathVariable(value = "meetingId") Integer id, Model model) { + model.addAttribute("meeting", (id != null && id != 0) ? meetingService.getById(id) : new Meeting()); + return "editMeeting"; + } + + @GetMapping("/meetings/{meetingId}") + public String viewMeeting(@PathVariable(value = "meetingId") Integer id, Model model) { + model.addAttribute("meeting", id != null ? meetingService.getById(id) : new Meeting()); + return "viewMeeting"; + } + + @PostMapping("saveMeeting") + @Secured({UserRoleConstants.ADMIN}) + public String saveNews(@Valid @ModelAttribute Meeting meeting, + BindingResult result) { + if (result.hasErrors()) { + return "editMeeting"; + } + meetingService.save(meeting); + return "redirect:/meetings/meetings"; + } + + @GetMapping("deleteMeeting/{meetingId}") + @Secured({UserRoleConstants.ADMIN}) + public String delete(@PathVariable(value = "meetingId") Integer id) { + meetingService.delete(id); + return "redirect:/meetings/meetings"; + } +} diff --git a/src/main/java/ru/ulstu/meeting/MeetingRepository.java b/src/main/java/ru/ulstu/meeting/MeetingRepository.java new file mode 100644 index 0000000..e3e964d --- /dev/null +++ b/src/main/java/ru/ulstu/meeting/MeetingRepository.java @@ -0,0 +1,9 @@ +package ru.ulstu.meeting; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +interface MeetingRepository extends JpaRepository { + Page findByOrderByDateDesc(Pageable pageable); +} diff --git a/src/main/java/ru/ulstu/meeting/MeetingService.java b/src/main/java/ru/ulstu/meeting/MeetingService.java new file mode 100644 index 0000000..fb92aef --- /dev/null +++ b/src/main/java/ru/ulstu/meeting/MeetingService.java @@ -0,0 +1,47 @@ +package ru.ulstu.meeting; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ru.ulstu.service.NewsService; + +import javax.validation.constraints.NotNull; + +@Service +public class MeetingService { + private final MeetingRepository meetingRepository; + private final NewsService newsService; + + public MeetingService(MeetingRepository meetingRepository, + NewsService newsService) { + this.meetingRepository = meetingRepository; + this.newsService = newsService; + } + + public void create(Meeting meeting) { + meetingRepository.save(meeting); + newsService.create("Очередное заседание семинара", "Заседание семинара состоится " + meeting.getDate()); + } + + public void save(Meeting meeting) { + if (meeting.getId() != null && (meeting.getId() != 0)) { + meetingRepository.save(meeting); + } else { + create(meeting); + } + } + + public Meeting getById(@NotNull Integer id) { + return meetingRepository + .findById(id) + .orElseThrow(() -> new RuntimeException("Запись о заседании не найдена")); + } + + public void delete(Integer id) { + meetingRepository.deleteById(id); + } + + public Page getMeetings(Pageable pageable) { + return meetingRepository.findByOrderByDateDesc(pageable); + } +} diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html index 22e05cf..a76d673 100644 --- a/src/main/resources/templates/admin.html +++ b/src/main/resources/templates/admin.html @@ -10,5 +10,8 @@ + + + diff --git a/src/main/resources/templates/default.html b/src/main/resources/templates/default.html index 99f7ed0..505c93c 100644 --- a/src/main/resources/templates/default.html +++ b/src/main/resources/templates/default.html @@ -36,10 +36,10 @@ Новости

+ diff --git a/src/main/resources/templates/organizers.html b/src/main/resources/templates/organizers.html new file mode 100644 index 0000000..4b518ec --- /dev/null +++ b/src/main/resources/templates/organizers.html @@ -0,0 +1,29 @@ + + + + +
+

Состав организаторов семинара

+
    +
  • + Ярушкина Н.Г., профессор, д.т.н., профессор +
  • +
  • + Мошкин В.С., доцент, к.т.н. +
  • +
  • + Романов А.А., зав. кафедрой, доцент, к.т.н., доцент +
  • +
  • + Гуськов Г.Ю., доцент, к.т.н. +
  • +
  • + Филиппов А.А., доцент, к.т.н. +
  • +
+
+ -- 2.34.1 From 0a7040d4c075bfb9fa676c3a4b466991da9498bb Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Fri, 18 Mar 2022 09:31:32 +0400 Subject: [PATCH 09/10] #7 -- fix url, add plan --- .../configuration/SecurityConfiguration.java | 3 ++- src/main/resources/public/docs/plan2022.docx | Bin 0 -> 15852 bytes src/main/resources/templates/docs.html | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/public/docs/plan2022.docx diff --git a/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java b/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java index 19a8a6f..5da4970 100644 --- a/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java +++ b/src/main/java/ru/ulstu/configuration/SecurityConfiguration.java @@ -45,7 +45,8 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { log.debug("Security enabled"); http.authorizeRequests() .antMatchers("/").permitAll() - .antMatchers("/login", "/index", "/news/**", "/meetings/**", "/files/**", "/docs/**", "/organizers", "/webjars/**", "/h2-console/*", "/h2-console").permitAll() + .antMatchers("/login", "/index", "/news/**", "/meetings/**", "/files/**", "/docs/**", + "/public/**", "/organizers", "/webjars/**", "/h2-console/*", "/h2-console").permitAll() .antMatchers("/swagger-ui.html").hasAuthority(UserRoleConstants.ADMIN) .anyRequest().authenticated() .and() diff --git a/src/main/resources/public/docs/plan2022.docx b/src/main/resources/public/docs/plan2022.docx new file mode 100644 index 0000000000000000000000000000000000000000..fb2a0f786cf02eea111f28c9aeaedbd8e0c34f34 GIT binary patch literal 15852 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/docs.html b/src/main/resources/templates/docs.html index 7a7d63b..6d13917 100644 --- a/src/main/resources/templates/docs.html +++ b/src/main/resources/templates/docs.html @@ -7,8 +7,11 @@ -- 2.34.1 From a936f80a1dfaba12c14023914b329958b9d808fe Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Fri, 18 Mar 2022 11:10:23 +0400 Subject: [PATCH 10/10] #7 -- fix docs section --- data/db.mv.db | Bin 65536 -> 69632 bytes src/main/resources/templates/docs.html | 18 ++++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/data/db.mv.db b/data/db.mv.db index 22d3d8d7536fa95612db6002fc8d5bf104b9cf0f..60c2a02c59086ff5d21a88e1721ec0fa4c810a01 100644 GIT binary patch delta 6677 zcmeI0du$X%9LIN#TM8}o`br;%z=3VGa5TGjyLY#znAR5{3ed+-XJ&V2dv^+n|M=)1 zz5DL$&F#(nzMuKdjE;s!4~2JK2;lD4js|GOtv+)YZZ(IpiL{i=shTpbpNy1mwe^}K zk!F~S=lTZV?b$@U&n#rsc)vcFm1T&!#}>8c5>S#PSx%>6GCsVm-^?auRZgkNRQyhJ zX#2K-LRL;dl#gv$y!2K8gz&@(LC8EpU(M>~*4j|GR=iXYgo(NX=$qI$*lh1#Bmz)x zA6nd94kt zvh7JSGILs^&8^O;RQ$61i2c;cpDVy)_P%u=Rz*&4VYfy)KEk)6yL%Jh1^fBllVLDv z59-6=p5+3&qxOMD(plZ%$(D|}1-;+w+*UBm9i4Jg5W-{Yx`Y;?5^fzS+}??&Nb}$7 zBA($+xq|%1^W62(-m2#Txsy!hq!kA_1oE*Zxr8!(_9aU(Bt?pk6h^k2hF1+}{FC}N zsPjdk#Rs<)t{5083}>b1xbDaDaRAYa`GvUq4DMc%l9J*U7w+CvRi#w-kzn^aIy=-2 zpnYnrGc;2WX0+V2+1`EIFJLE}tI(>IBt4~>o>J3kDd8(i%}AcoO#B#}N(I^sg=@2t z0i|V9-sg15gwjr5%6RlRrE?$DWmA#8HcQqrX-}z^p>jXM86B@pgEI8{#6Q9Cl?K!J zv1{F5uR%Of&Ij%N{ojKQ&gPtRb3QXPQWH32DLv*<(U%aKS}6JOb0E zjW9t8Fu_1uW1G+`gR^_uNX6P+*r@ydq+;)CToUnc}HW?op z7#PmtdOshiOk1a4^LFNcp}Qf6H^RN zOffuB<>HAch9{zYJW=W5i7AFBrWl@x^6*5IhbN+lK^)2u<>86m>EemCIe4n`Z)JE= z>;wH@gYnUd8EEwP*%$jo&kZE>9imwoLrpS=n9L#CwCEDs6~mZv3ZXc<1Tke2ha8Vp zEbb)v#U7>k#d)2UUk;M|(o6G8Bh4==$uA3NeyJe&rGw^|&r9c*w@T)h6C}S(6y=xo zW%J8gl3!q%{1PpfU+yFMCI3QjS3{d;9Kk7n=C=1OL~3_kceLnd=eQ&Bsxe|g=Tcx zYM?6vW>DD-TLR^6&@=s;^`y7r#CzRv5<7* zUY|n5A6`hJ%B2ufj6zho6mk`%kgF(#m|_%i6{QeW9)*}>6mk`%kgF(#sB$Spl}jP2 zTnbU;Qi$EjDCD*|6xyj!I!JCvVvR0eeTz8J(EaoOU(0?yM zrcXf*nWm3SUDgd%O)Df+SPYqFAXFGAcFIY1j#C1G9EYBC%943YSZ=7uUqr2Zf`$tF zgaD3B&MOWT-!{D?%;Q2u87up)HUq9U@DAm_?ds~FtI_eV8Zp~${;>s}`KrkYth-{- z^2?nQP$SUfr_gk`5Q3)t#n>{sdukFX7z|wJ)C}(KiMfdFo|yW#f&s@9h61*GN@iF* zd6~u&-#(nzxRV!Mku^1?;{ZRfvDuKA*{tbin~JqltV@dJZGIiE8Ir|KlpztXy*f1u z+<@Mmx*B|ks?REsH;C_!;V{1$A1E9{J!hkZgX~; zf9$_7I)W?C|ts)<{yj#x4tlsdl8X~+n^x{yWwr$o>+*GXg=Y$4l{iP7D^`mUu?BrGl|rYd z7K*FuC&Zbk=4^E5t{H+Dsh$<;181T@oa4Q#_TJUR$REZ-NByG|6Q)M3?B>|z%h z#Y+~4DqP-Z(NIGKyNN4ushCukl_eGZ9!#o?Ln^8iU2?ePvI(bDPW>xM^#s7ATEer3 U8&BCsm7apSrdldS)pelq4+=126951J delta 5521 zcmeHLUu+ab9NuZ~>_6%CO4C1A#VfXj!qM#R?cUy=8Yv2eD9{=RAPu;?w_6JBwY|1N z^nqf1GBE<9RFM!QB*Y-J<<$6~f_>rDkP3zvLD57bfmR<>42iQdySKAYFN5BV=^zgW5Jd8RH|mqKYy>edr6G1Q~<#W+reEhBY}imtIN%W;yVg+qf~J$j6fM+9Dtu%Q?AvYF z;BKuEdpDW`QCG=>){BMkTI)LS7HnBr(faG=Sv!@*COhyn{N$#GW0$vBD^uL?HeQ(r z>jTyG=BgCjeBxs2(8@mxz^&AQwy#QjhqhW>eN7ioSNKu~4=$%pc1(J}u~eTj=xJZg zSUvo&RN}$Pk51Jz%}FRddUIDIuJ3B*!VKdXX=9lhrdZoHl-SXXwn%pVRlI12o4Eq~ z7wz-X3vZU31h^;O%qb%Tq7ZZj7b&`sz59Gb7WL3jVrW2*r`Z4}zMk8tDl{qNP+wQ# zsotT)V2u618D1H^;RTC<497bkK@W(c2e53I6&!l;QJD|V_5h#z0ScT+wg5GCWu!Up z0fx!1+1!-cxBVvAEzc1MZ&_A}$a)%ylEm^3GQ=pGMzW5kL7|ANEiO=PM%abqXe51~ z!Xmxwb|8n=k3tG{qr&L|mu@pSIVz=*Xv9S=jqvKEk*sl=GbVb4xPxR(Leuu!Z!c?c zRxoc&9qhRdnkb=D+EpFbka@unxrhuWdN)+7amyAYYzv%i3#0w{VBP}7Fqx6DamW`W zj;25yZVPUNpY;{Bug9z%TZ+Vb;5Mw?Ss8S(R&`jbWwREZ=r0B;EE{1Fose4va=Vqu z&jz#rt`~RsdBWi*eB)vW$oMT6DF%K?H$BN)y7(_~=J=(mMvo7tlgli2!bcVbQtK9Y zi`lfwoYkeK6sPt=h#F#8g8h5j_V*Q5qoIjOM`z!Sob#kc*X-TsSVwllw9fQy1hPED zTVIuA0y#Xy*%&o@V@i%w>-oi=CCE;0?5VkTc5=)aUV#(8EnX%gcJ7L4VK&sKbm{}K za46Z^I~YUMzZ-vP$nY1+z>Ydk{KtIrW$-O+SMTS81(Z|SN)oYCVI;DwhMmen3UMQh zqB>7Z#X?b68`7nzc+zHwE~FBt!fi6gT25ub2sNn8Y1EA}&l0D?J#|hcPKA-k@x-Z2 z#IcgBg`LO8BgCmln}OP?HVsX?)|x5DMFb5y74FJO$YCe?uX^?e3l~z%r@2fiB^*^n z-cgEfDMikRGr_$H0Ezcrn!zYO^9R~gJhcJ zIMXCZrrC)z%_fp*PR*WaKAttxjN?o*nU!hkb7q<+ai*D@Bhzfpm1*YSOtTkfn%{F} znsXVM<`T{{Xhm?QLBDjSIZrapA2`#Ly@N9i>Vh-P*f4y#g9DdHsCf^EnvRvkkcJr? zYEakmFQ;ZPq{rG{cNr309vnl8XBpCATqUaEHKT%53S>n&bFItSqdch`ahe}0WeoSE zax}Orhc^58qciz{Dot2_cPvfh1$?NQQ|gJQt;kAF&;Q`~5tc|gIT2(hCkt80i6A>U z*@z@38AuBoAh$JV1(#gq!R&uftNlrE*$%!C4IT2(hCxYzcM39}Fte#eKvfIq$ zv|Ats!P?2mYK*I-j6{tr3r#zk%>8=@U48c!dK(Ab*FS&^v`KXgk)nW38K{WPih>j- zvCpvVQ+EXo1qQE}sn1kRX6h68h|4|=J7;umAhJG7a>m$M27EYGo1HU$uKJXzrE*3N zSvv~XT?$vw3Fbeq@KU$J;hC$IKpj2o0X6W()hgtAsQd+Tmp{|xe26JDLrjy%Q}xt$ zBTLBns%nV1gn~#Uj3z2g$8cYA&W6T_e6x>-b zBvDjIwlAt;EyWp`ikl8LV!5%bU{L2{L6+1AwNo041^4-MAy@&=O|JmAVCjtDo5JE7 zMj(B%o73TKD%+&CjjoSM&A -- 2.34.1