From 0eb2a722f6b44a9d5e267c7bf12fded27346ea21 Mon Sep 17 00:00:00 2001 From: Shuaishuai Dai <2111319672@qq.com> Date: Fri, 30 Dec 2022 10:40:35 +0800 Subject: [PATCH] add JUnit5 --- java/spring/Junit5.md | 77 ++++++++++++++++++ .../522c319566a243e193a47070d58d463f.png | Bin 0 -> 32126 bytes 2 files changed, 77 insertions(+) create mode 100644 java/spring/Junit5.md create mode 100644 java/spring/assets/522c319566a243e193a47070d58d463f.png diff --git a/java/spring/Junit5.md b/java/spring/Junit5.md new file mode 100644 index 0000000..762072f --- /dev/null +++ b/java/spring/Junit5.md @@ -0,0 +1,77 @@ +## JUnit5 + +#### 注解 + +JUnit4包路径:**org.junit** + +JUnit5包路径: **org.junit.jupiter.api** + +| JUnit4 | JUnit5 | 说明 | +| --------------- | ---------------------- | ------------------------------------------------------------ | +| @Test | @Test | 表示该方法是一个测试方法。JUnit5 与 JUnit 4 的 @Test 注解不同的是,它没有声明任何属性,因为 JUnit Jupiter 中的测试扩展是基于它们自己的专用注解来完成的。这样的方法会被继承,除非它们被覆盖 | +| @BeforeClass | @BeforeAll | 表示使用了该注解的方法应该在当前类中所有使用了 @Test @RepeatedTest、@ParameterizedTest 或者 @TestFactory 注解的方法之前 执行 **仅执行一次**; | +| @AfterClass | @AfterAll | 表示使用了该注解的方法应该在当前类中所有使用了 @Test、@RepeatedTest、@ParameterizedTest 或者 @TestFactory 注解的方法之后执行 **仅执行一次**; | +| @Before | @BeforeEach | 表示使用了该注解的方法应该在当前类中每一个使用了 @Test、@RepeatedTest、@ParameterizedTest 或者 @TestFactory 注解的方法之前 执行 | +| @After | @AfterEach | 表示使用了该注解的方法应该在当前类中每一个使用了 @Test、@RepeatedTest、@ParameterizedTest 或者 @TestFactory 注解的方法之后 执行 | +| @Ignore | @Disabled | 用于禁用一个测试类或测试方法,当前单元测试置为无效,即单元测试时跳过该测试 | +| @Category | @Tag | 用于声明过滤测试的 tags,该注解可以用在方法或类上;类似于 TesgNG 的测试组或 JUnit 4 的分类。 | +| @Parameters | @ParameterizedTest | 表示该方法是一个参数化测试 配合@ValueSource使用 | +| unknown | @RepeatedTest | @RepeatedTest(n):重复性测试,即执行n次,表示方法是可以按照指定次数[重复执行](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-repeated-tests)。 | +| unknown | @ValueSource | @ValueSource(ints = {1, 2, 3}):参数化测试提供数据 配合@ParameterizedTest使用 | +| @RunWith | @ExtendWith | @ExtendWith**用于[以声明方式注册扩展](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23extensions-registration-declarative)。**@Runwith 就是放在测试类名之前,用来确定这个类怎么运行的,用法:@ExtendWith(SpringExtension.class) | +| @Rule | @ExtendWith | Rule 是一组实现了 TestRule 接口的共享类,提供了验证、监视 TestCase 和外部资源管理等能力 | +| @ClassRule | @ExtendWith | @ClassRule 用于测试类中的静态变量,必须是 TestRule 接口的实例,且访问修饰符必须为 public。 | +| @FixMethodOrder | @TestMethodOrder | 用于为测试类配置[测试方法执行顺序](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-test-execution-order-methods);类似于Junit4的 | +| unknown | @TestInstance | 用于为测试类配置[测试实例生命周期](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-test-instance-lifecycle)。 | +| unknown | @DisplayName | 为测试类或测试方法声明自定义的[展示名称](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-display-names)。 | +| unknown | @DisplayNameGeneration | 为测试类声明一个自定义的[显示名称生成器](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-display-name-generator)。 | +| unknown | @Timeout | 用于测试方法、测试工厂、测试模板或生命周期方法,在其执行超过指定时间时失败。 | +| unknown | @RegisterExtension | 用于通过字段[以编程方式注册扩展](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23extensions-registration-programmatic)。 | +| unknown | @TempDir | 用于在生命周期方法或测试方法中通过字段注入或参数注入[临时目录](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-built-in-extensions-TempDirectory);位于org.junit.jupiter.api.io包。 | +| unknown | @Nested | 嵌套测试 | +| unknown | @TestClassOrder | 用于@Nested注解的测试类,可以配置[测试类执行顺序](https://links.jianshu.com/go?to=https%3A%2F%2Fjunit.org%2Fjunit5%2Fdocs%2Fcurrent%2Fuser-guide%2F%23writing-tests-test-execution-order-classes)。 | +| unknown | @TestFactory | 测试工厂 | + +#### 断言 + +| 断言方法 | 描述 | +| ---------------------- | ------------------------------------------------------------ | +| assertNull() | 检查对象是否为空 | +| assertNotNull() | 检查对象是否不为空 | +| assertEquals() | 判断预期值与实际值是否相等的 | +| assertNotEquals() | 判断预期值与实际值是否相等的 | +| assertFalse() | 检查条件是否为假 | +| assertTrue() | 检查条件是否为真 | +| assertSame() | 检查两个对象引用是否引用同一对象(即对象是否相等) | +| assertNotSame() | 检查两个对象引用是否不引用统一对象(即对象不等) | +| assertArrayEquals() | 判断预期数组与实际数组是否相等 | +| assertIterableEquals() | 判断预期的和实际的可迭代对象是完全相等的。完全相等意味着集合中元素的数量和顺序必须相同,迭代的元素必须相等。 | +| assertLinesMatch() | 判断预期字符串列表是否与实际列表相等 | +| assertTimeout() | 它们是用于测试长时间运行的任务,如果测试任务花费的时间超过指定的持续时间,则测试将失败 | +| assertThrows() | assetThrows()断言提供的`Executable`执行会引发`expectedType`异常并返回异常 | +| fail() | *fail()*方法指未通过测试 | + +Junit4断言静态类:**org.junit.Assert** + +JUnit5断言静态类:**org.junit.jupiter.Assertions** + +#### 其他 + +**引擎** + +JUnit4:**junit-vintage-engine** + +Junit5:**junit-jupiter-engine** + +**生命周期** + +![file](assets/522c319566a243e193a47070d58d463f.png) + +**Spring Test 注解** + +| 注解 | 说明 | +| -------------- | ------------------------------------------------------------ | +| @RollBack | @Rollback是一个测试注解,用来指示 测试管理事务应在回滚后 测试方法已经完成;注解value默认为true表示不进行事务提交,@RollBack(value=false)表示进行事务的提交 | +| @Transactional | 不进行事务提交 等同于@RollBack(value=true) | +| @Commit | 进行事务提交 等同于@RollBack(value=false) | + diff --git a/java/spring/assets/522c319566a243e193a47070d58d463f.png b/java/spring/assets/522c319566a243e193a47070d58d463f.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6c9f4fda1cbdff2f40e2aceaba0b0e84dc8a73 GIT binary patch literal 32126 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
    r_HK3>pkKet}Ir1iiZOi)-Lw_&7_ zn$WE6V-BB)< zYIb@f#KWLpCzmfE3vDIn)LJhU%%UW)Ug-qpG(~fgy2hw<>v##kbh97PL{H&6l5AcN zWI}>JndCL8twjlcKX^;d&DTE(vPl0n;v@Q4TS$Y3hX`7m@_36GRYY*9hL6Gd<}eRx z3+tz5YosFJbgN6g_}O_{mvH!wg?+%9X<_E9iF@1fWR$#%K!(&Wyd9xNGh%T=?fL$n zf}1W&4Uif_6FVB@iJiBf8APo0F~icO1^_6Ul!CZu=+Ob}8D80%I>5HKtHNFM`}^C{ zx`M%vcwQ!(9`{P7{mMEJn|kk5_l>59pmWc$mrK8M@-G=HedGmyKdXU1hXC7)zs;{^ zQpqUQtiH*yCASy0y#T@k$7u$cbpuCb1%uksUcX<^8IB-_*)=Dfp^Z#Ro@r=?Yatu_ z?nxEjPFsqMU-EaUmFjESllE%a)%xnS8F1@qniuwx&9a0alSmPmKD(eA8qp-a%00E$ z_9{qh;bz=fi5Txp+3|0;I6~)LH&5a^x-5cVzO5gZ`|M|z%@rn_hi6ffy9s7Kb!{ZK zO6caX+o1#~sxq2nnZF5`-Z*0_Z7ruhuX-)~`fYqSuTzt_a|?fV2|=xyh41mCUs+*A zIqDEJ(UsTU)?kt7Hf?d~kA1`_t@k@~GyKodueV=Nw(;%nwLge(4h@yHeB2x8^d$n; zp|_6^DU;W!3~sFu(8iQ*Z_gfIml!MKN>^e4bgZ0)kWytK74dJdi z@^Q(Y(WM(|!*Guy&^FvQPafrh=|jlEOd8lyHZHU5$bhe{l|OYH$i&ZGEm61`~8PQ=9A=F@$o- zn_ipx-1GhOGToEH9(6^Mx#HL9)Ko%4~8 z)0P><_IRab%`2z@q)<|89<2EE`UeQX5;#Lw3qfwL~PMtS-kBj!;;9SN2UrxYH4l>M<^4!ZRa z?o-_qhVO-Fn#C^%stWl%TR>;M+E`8(hd;E)0sttga}e4Uvz6jITFR*hZn&Q$nf3D1ovYVB5;;TN1`#fPV$)^IH{-`HAdKv6=Wk~w3EP|P36{+>VXoRieIY(# zh;oC4%36YuI(~2Jg}nF;AB515>Li(TEch&G8S{<-G5rd##_A+l|KuD+>NFl-fLuw+ z+_3Q)p5wrI^6L=+I8~8L>+uF#$Jv1hsp=9XH~nsPyq6HZ77N_oJVO2-j)wns%KiYb zpPShEG1QkXF8xRrnl`o@Y6EOIIq?GE?=^55Uesuky0zo|d70!0F*bSdnsx+y!bY>i}4Xw}up1QwM1X63U_Dhl zM$BMwlh2iQ&i-jCE4zJz`kS-G7uEmC4l_XEv!S z=9|Y%Hu)1-n<|r}1t|IiO$>S%U0p&w0yrh~H9a1--ah;lG-qP~!C7n6YQ4?jpI9cw z02f3C#fsV_l)P#OU;i!)a3|)uO*TKCCM+9KbtdD-w|--iNd6F}dV}AR-ar{pu0V`J z`FAT%vEtq72*xQVzQ}1It8L4($xT57u$CcW?qo7`?$;lJTzQYp-r#{8Vj*Cg8Uk)e z0z3|ZvF7!l7Pj_2uXWi@w;u$a)vm7KAx9zCL~|6kkPSGzyZ!m z;7<%FVU4n(sOkv~JOfs0!&|+4S#Zf!rxFWp(|qu~S=AoubVyLejt-UG9J8Ue zDF-|b2yHYw3N#B~1m@ih&em?=h+CF9&;`+-p{Vmb0DwHZL9Sbb+0aqVADErgPay+s zA=s$$r@XE=x2RF%)!OAsdiBh*1M(*Sp5ZiMVh>~+z=XTH!Gz<5f;2Y104BGQsO>*) zB|ilq&CiD6WcC-gaz>(zKjD4{ggKRi?RWGuDvcLI3wrE2`CI#Q^T8gCA!M9ZE5#RA zf+vT{ITw6(eiNB`UIWKv^${Si0c5TU8{oJjz-0lqwvjA*lR<>Q_gIpx??nSlgBpAB zXf+Ma@3HQ!?XS44V|ll4pTHof29PstI_<+2U2MvbLTWxf46LEi7u z2z#yNaNIKyZ7_lppxv1R{-srf1=$VgC;yi}uHlFl8)<*LluB>XL11QjczA4WJ_EEX zI|%lq?7eSCgJ}JVvsG;IKIMv+B^tD#X2YsEjYQ?SPuGD*m5V5cfTKt&bGVR=;t2pp zlegnLz9z_z-fB-yV%rowds^17A2Z=kpgJtx6Zbsg!Hx>`li<%n*+;MBwic`o>{MmQ z*ptUJm_JyUs{RyArDL8o6#RYy=2GGrQ{o2t*=H)NALzoAiyXjC44jt+HgVIm0qtdT zQj7s3+PV#pAdh2HBsu>_er~2P;%|7of8xGwuwDQ6d9DAad|J5}MvM{2MZo&OYv_Cp zXZs1ELe%Oo`Ei8^!g`(_TA`o+cU{XgM+nH+xL1?Qlcg#Ky~@YqEOGf2_#^6dEW;gO z0mP41T*v>87v4HLlx+mNe@7bgh*S8`-@W(m6za^wh-Z8v_h9QQqzHcR+`Qr!2FVIi zfpJTz9C&GecFn*pu!eti*SEhbf{;`bgkGh4W0I=ps%FxiRc=FnyfaMZ1jkzh$Oy`P_ZJdp>Z``wWHZF`?;ORfq^B8rs4H%Eb)DL1*DQDo0P z+gcDw+VnMS$eR63eua(aoqNpj_=@Wp+Rbj}1mHamaLBxGXa&%loLEI$x7Pne6$fHH zA87eDDX-EStF9Q>6Sf3&;=fUUXtqKzmus0*0F#A3X0{Gr)(JE?ac+ zlHP$h@Nd6ZZ5l7?X=$@qvQmt9C?{W3+Ra;pA8&1FKXbFQ4=W!3+pps}zDYPJPxhSO zVzamocG>P<75_KINUmfA@EuiZOH3F5ioJNWr(bR_3I4CYsf({krIh0X-JHGVz#(i) zn!8HghJ9>|^`@GPCBc7Ffx$(TB8ye)OiWOnNU%?LK3(@;t7sv3?6poxcqNbG;911E zOTz!Pv_IoBv?GhldTj<0Q>v%3lGB|_{#Hx>TEryBk8=C4rAJw;?70f|Ty+Ub{SStH zS199en06Zsc!B>|qQ;_MHQ~9w;dkg76;`pEU#t+N{-?qxOT(>+|C!6*RpNKQ?%7zq z)vEz8S{)Mg2mgOKzbjPnZz=$E@p%BJqv*3G zSlq+yJ7&8~jLNKi`x{WKZumjIOTFgKLTme({6>B9y;k<D34 zsh0Iy@uKNgw!SUv%`Bft@bbvyfs>nE{9OpnzuGGx)bPD4#Ky>yno!OGA-_R80jv9u zmL}Wl%5koe>@jf-3C`G5y|b^)n)73O{C=yDG~LV|Agqk%dj2$9jW{;BQ(1?Qr(uug-CX?sRT%O_G-k4EtTp8-o68HK@fi>`*>XVR?D^yb8Et$TxZDejQIw zwI5iOHJMRYg5U5YmOkA#$A{sP#Vd;~1I|6SntBEtBnR9F)IHd%K{$X0+6TuX>kOwf zx}+iZi&tHi?^KWMqB@n8^?1j{`|>{*{arY}Ail%r>-#x5%z@xhCz~Ky^TP!GlWcEV zgyrtO8Umc4??{*c&a+9#889N4M@g$f`5J4crN-K9JO;)}$w#g!y2nsv_opqzlsiC>~^2fbU4_qJvk{%|6uq z50c2czGYk}C^4V1mmHX$$pZ_zuk9G{YFhPZvQ7CVZOM08xdPy3(~MNt*TQ{Q3)ch0 zd*T$#K*|H2yXUSY_^B7Cp4uuAGc=y6aL#XKp-Bh+anBDU-zbff!$}$cX+)`}_vxE; zSgc-**j8aJY{Iz{FDc5lTP3wNOYxY;0Z#rZl=A@!61XJO7ih~a_n_CQyAMF4iq)f* z?fvsB(&E(}kZX$}zWoFO%`inO!X3R{6g9KdYfD*4jRjP&<=PDV{0V*pC}vFt1I&GB z5D*~|8YaR$e=ghw_%LUT;~&$*7&Xf&?EghMfsO0YD5uQf>U^gbI8}%J%$_RVQmQ0$ z`mPad%G{o<^{Srh8JhB$(ItWV0AJT{`0dL^sP$*(I8%VY_`QF8rCx7%Y`=9{$|gJXS$RvWkt2;|eY2f}}Y1xD(D zoH5{LsO@>@R3FpjBRzk@3;t{XH2)=zE=Z~Ry92FC3->{tB7G42c1sC9ii6*kPerbS z%K3kTD6l{(3V@C&t2XC3kKVtqoV4wqTh+6qhl{689vxn-VvzC8g@NCKn{20*IGwjO z7N&mwEvN&zA;5??+SFk8W8ItIoNUiECyf6d@*h{gw5fj$2&InEf{GaBuk7iA1A*f8 z(3~8%91ON(__F(Aa47*S)T^W;CGET-@jSi7^ z^+Op$NOb(tABY?n3!rYyUn5vuq_ml#-d#W+tn-ja^}tN-nJw7-n*{%AAP!PN5mM#%c~_*N z?oa)^@@%}O4eC5*tb?bNnwWzmkTaA;YhFq2H{8Do7-I`)ykbMat24Gi46r7Ofu!^! z0;uU`l6ilErt@^577kD&?T?xCrfhaGB9a27G4Xmufh`MWJjDhT{jHwSB{dv^x7OEI zGtk$54=`2Vg2ukSrq_wAwN)E&FD}7Dh9@;-8>T=MX*@ zjtX4ZHeccv+^%}q6t2AZ7>(mdUjL%}JhEhCfn&S2D8LNrHPHd`V(%i82~Kpuf_d<2t(^M^5fkZtwb@TT)L%Bde_MwzzMofuLybi z;scz6Xze-~=s0ry76SU#5eNfn2;f&uQ*N4BcROKH4kN41|C1tt0JnH1=-XQfOwF*i ze2L~{Wny)6DJF@M!;XO9^O#{fC3oJ5k9&~t?ELz zt}-KSp?r0%NhQQA<$#%0d+<7&FyID99?aja;V%ATCGv<0VDHLEzfJ!hel>PqA8DM{LM=VkiE@qndnv%21rKjS|q#$P>)Yn;$vzg)n>&seYw&Cplg)o_;m#G{;?h9Mks zF6%Ze(O4PbQwUyJzU%Se%MVozY2H6Lm=?rhsE;33_Hv+^Bt?NCH`~=7U(9yTlvp#He!v6V5|nqn@fp--xU#jrZ(Unspa&WS z!Lvhzx6XZqcI`$!U;Z5QlZO84WD zas1-b!c_k+8;&G@c9pQc)*HAqJw8;iyl+sx`sfw{{0)5ld)vWNnenssBJ5iW4;S1l z$&;ylu30(pAw&Mg;qonuO+--8>%nY#1)4krd+XdP-&@)c zA)uo%^%sEmuU}FjLhJYHC~-z-Rj9Xwy2b%qOz4LAhlMh8--S6G7OtKRV~mufQW!7f(l6( zBnbo(g(6$6qN1Wgz?mYW1j3MsK}A4_jG0Kn93_N=DFH%~^DeA4q5He`cm6onch31o z79`iTVzSorKKJjw^Sow}$Mumh4zhdO+a6ZtNr55wlJ4D$;7U4-`t;kLXW zJ5e-y`{<+xZq(4*Gy1SVW0qv=>_x3Haq?^j%s%X=H9yK$*|)>4x4&@^7FcmDbqU9F zVuPZBeP2v9p=pL|u9*uAKAve%`No>TqA7+g6iNMFhpY0Zgk)KR%TX(aY0SF^{F9)# zX^t@k*CF$W^`{|+?{no&^3Gn9pN6@_Wb|h_D*0uL;6u8VIXPT&>mg?dvs-b&CWg!(z=b#3+Gq^2W3F z*0Is^vOMub%z^NDQHyUx-Fn;bo)@R`DhfXo@6=%_O)2BTQ`~H?uU3yTOG$pER~N~3 zs|a~?=}Ebbzj~Sp2kU6}7Hvkc0BNMv&3PY@7SN%#x1%ZhU~jPiD8 zRh@@J0UM|o!pY}a&{3ansnr$~74y|o419V*qgdv|xqI_#M2x_xL+1FbG>=;Kv?*p^ z5NOj$)=l>79Mdj{KlCx1^d(&t5j1k)LUt^dI#isNsUPB8wz6NQFtaFdcy}MnP`RZI z{){NTcQmIlKCz&Hk;3YpdBRbP+@C334%z9CtW;_6k}<2$#1+mxCdKB4>E4m8Zg%W+ zhscK|geBZr4Gq?k%$UKATu@3V6Vv4-v_M@#N5SD*Xk_2jg;IRHkY?D-W+$H7^Hh{13kS$EusC)lY)X z3fxv3*PO$tF8i0@7;#-c{quUP!@v#QA(+e5Aq@3dpKII}P~YX^q6SN1U5fec5W3DE z^|GZXGkV~z)Z%yAk(s_MFCuS=ORFUgbL9DjggTVK?HGy`plkg7@g2nnT|RNR53dIm zpotuB<&V;UswL<&*I)$$KW)1{7y)$DV#YsbdR_@4IzqOXsV8g2Ui9f(JiJ=jjjfc; zPMMs%t%Qiq+9Z>nJgP_T^eRQ&+N?US$%HiLSRh0CCg^IVByy^FbUJ^&*1cAAR9bBx zDQwydCjN3boDcKixLj_H_Sny@@$#9eF*tRi!(z>ExL$=z)RH5_i0N}eYO*0QBh{c7 z5`do5?`jD;szBS$uf33a?9Sz(+_?HCoK=>=XIj;EeYscQQJW|BC#Z z&qjgry(@{&q``IN6?F>7@5x=NJu>16t0l|>5l*S*Wn9r7b3!0^-&`J|cLgXQz;6+) z>+j$+`1>P@O-W0wCy9WIzCl1sEcU0Kwu@r{rVJlqJ%`HSpOaoO7ISB~`o4Dx@7dvV z`bkSk3yCNE*5TU3`pGXsNAJsW1e_*ZWHXh|ym8e8`*NL3$ulTP#?2TuRah{XbX63r z|K@>N!AowN$AzxSdpwwZFS_#FJW_)t86ygQdCU0>Y-R={ijyBknoc98m-Z#&XHJY8 z9~L-k4m6%S%(#N106mG-n)?gwY(8(2jheQ-nrfB4l=T-N#U`v*Y=CRTFK8YZ{MEDH zlnu0>H+5$`u*+nW-S)Df^v(}pxq7T%W#9)S?LMwR9s|+yvw#}cz3#( z!cXmr2|1c#39E`K9CdGllh{Eh&gm?6VL;78bpDo5&}i&+!s;^9$^jGJ&$yw#JpEz? zkG7lZT}pkI_xvmHQ9->se6TIM8EH}V5$JrtI&)p8wrW_kl-!X@UzuSlguQlxx`O(g z*osL`0d67(1#BQAHQljl0W-ncGq&Mt#Iw7i zCpvtRm<=(iDPfKL>kDFt92rTDl{5YER3*65WeA~bd_g{f+F+F@JZTUu+HiM!Qw6)@ zDDs5&uJ4}vzJFyg?<0`=gBi{li@rCHV#hn%+B0uxgMjV51eILgH&6H#I*Wi>E@^(W zo10IbHoxgi9xxIEsCJyWL|L#Y?QzzAdJlR5)jV1w0IO3BX|T^6}64wDBZ z5uW~WQRK;<%Z~&Zi@6sy{hk|Ww$=*1-$G)?$J98F-DUjU;1s@)x$LEmpo`;Pm%!^< zbkmWa>^yyHvZSGp@rr$H%#3y2Xr|qva>LXC@ebcGLY|pQnzXW0IRQbA&3+X7nAC0e zErDokT_x$F>*y{i?!5}Lq`;mb6~B#5McEaDCC7RqKZo`>F45-oFS|`w;KUi?7qhP5 zp9pBK>y!ON4%{JbkE{5Sneq-nUFs!%mNmes^;89pj6j%vgWJ7>x8wk&olFZY+7rI2 zF0`T%ftop#K+)xW;~#&qVoh-8DFIi!)F)0{fMG^Pd-_H9OLOXknRq~ihlp(_S78)& zA|+_;*^u4vcDq3y=0uWxnlj7)Mv=p38EI*_|3BgqqkwoW1VC_8Q2=bCt_HU2691c* z{r16jf=;JX@}OykYijJKJ8$&f{e}jtL~P+d;<09dQH;yP({6r3*nVGk#Tbz!7)j*} zaEDKtDJRV-BC;dY6~GIqvLafXf>RdW`w-n|5S85p?|vKy7+RzkI`%e^jA*{VmJFQR|* zW!dB!XkP?vd^USpDMOEgO>FmpIaLg_h zbLC}L7{!5MC2)Ay?BGl|7hXz0!}bms=HNO=o#ATfy_70;22E^Zaf?>HI+mw;Y2<%) zrU&pujipzni?k~l)kZmI#L7yYVPEeQz2VPR6N~xhy~2K`4?fF@!Gk_qz>M*eU6cQf zaMl^H#Fc&`B!r{eJB~2O!>vVA18H2K^n$#Oh9?3{rmip9+`*L*02Q5YSOV^qM-xNr zR+@r0RLAdH9l;f2i%oe#XYyb+n!*jtI5_=<2tgLFkNMN$=C zPBYi7tnxm%2lRG5FD{}$+2-ta9$hv?aJA)(?nb?1>*T5<_fd4kf$t-le614gZnMA& zStD9B%}>}n#bMHd=)e~n8f~yLF#i$kbzw{;nzr@I2)Y#5nX#*|;X)82VB=kZQ%tmG`Js(LXI4G^V~IIp|^xjg)^MwiwbxHSY({uhA8?}0#AHS z;OpJ)>uK>s5NY6X+>x;6O88nf!! zl(u?^#G!`Eg-`kRJ;Y3ZyL88G5}F=AA*LltFW(EjSN%XXmXcp25yuoldWJ9m#-jt& z8R-SXsy+r-_tx;&+Lk>Eb^w!>^(CO3I8&x-0i!qt$PN91&y)EnrQG2$FmWK=M|`99 zDYi7TsjniKuMfTvEYC^9;w8X-3msU(p&32S!RpM%*aQKZ;a z+31$Cj$aOI>4yweQ9jv{Qg;rSHddv2v0jFg^U(0|cg=v=C^u8GYayKslTacto{uDP zzu)wTL%4B!b}Lx?-I>T*|A{-kwx^z=xrgr^b;9^zf`*J}l#9%@W&D8evW*WQMKCMP zrgSb8YpBP9&b8Y${5$WS6W%cbpiN1jsJ@75Wwhj^jJSQNac(x70g@+)TgSfkIl)^@ zu@vPJ-7%#8_yzh8=@kjXpqE`802?{4CCfnOLz_D6lXP(o082Pv9B;`3bGXC4D)TwT zX$MpXe15MF)F6b0;?_4PH$gj<>D> zU~UC}k8N3w^ii_&YMk=>vg|7GK^P)jCj3&(Vx_Ja(~`>QkDfJvI);8aqdk|cNQUnA zYttX|15?}ptjkdin9^d8w=-BzxkD>6R>;XA>gNa12lFmlTVWKLPHAFSETtA7uCy)-QHKJ zl2u^F_L;l-X6Yt=)>|f@lq2os|G{x>m6ajT&~}^``@ok*OzQp8)v|oV?{~TF#K>>Wq7x@Z%Eu!i0t|bFR;nL z;B~{<=%i!V8axlkzPuPf`KznNzjV+dL z-$I9>>w$sBge_Yd_#_$EN#eX0%0!WpLVyV6?%!T}dM{aqk3&CKp-I! zRxKJ`5KLZRh&Ug~Xwc3KC=#K(j(wbjBusYjY zmY|KHT&@ggy9*eLTenSP_o8b}(X4s8CdVxDZsK@FC3dW>l%JLFbu#4cj!S=-nNnt| zPID#r(3fd3q0e8gMDe1S?1wuqKde6+;POs0lJ-~MFTNBA1`y-^q5!#~Gq2U|{8IDD zitc&legQ&(3vl9Gf6OtrZ~bnvA}p-Y#eeZjHjtxv{&d_dYdrKWNqJuzXL-yqkwAF~ zp3MwGsvZuEbN-&huPkz<%M=|l1?NGqU^(t2!)}l3j~4x`1~ZaGg8Mx#wEqyr#xM{V z*rbFd+g_`tne<(UQr#X&JVrH@&RirNUkac!sL>CcfF4J^dyvG*a#5a^1a809g}Cp+ z68%g1gOavK|A%`vpjHH9l>?57o?SkekabN4IH?Y~=aNMzXcq$D&$VyJxh{s(6Et$5 zoOXLjabSUtF*obUl_gqnZLubZBss0oGJ1Tm%Qpl)W zf~0H#obdNcd*|Hte?7~YZl|C(Uy69-QaEjDfWPOWy+v%`PA;I!p`EzJ(;ckuf!6o#5R;5=bd=Oksp7-#^>e^r8xU@>F) zsN2DBh=5E4xo{+%rW?`S#*#G#nJX!f$*CIP_3O{E%sSvTLPQ81K*WkKu*RO}&w$=X0~Atd{dmK970 zWX)>1Ql32&GBu5Oy;cTPTcS;+YL1wk>koA0olQcAt-FW^{V)nNuv{Se#01v29$`T( z9!s3t-OIaINgnI1EvetB<6jEdXb|pD^kq2&&n@|Ow(7N4Mi}zVk+fbe1yA=Qg3=*V24y0uIHPRHV2}7^-RcD|A<^KE9qOA^! zCOlVVeiR{?RC&N5$jw{Qn_Jd%31V?9po&7*?fOlM=yhdf&XqYP zJ1$3X^Nyt6`s8i>`^~yQM6}By0fZl(6HuHwh;~WlU$TPk5hzH)v2;=$t35h;&Uc!% zND{dCH2puMw~zk{&IeLk#vH zgR~}GHpFgTd22D?4u9+v_3z1LSKihfIbN;sH?|GE;~Uv%gL=I-i3I|PeS|yNHxD@z zE8vAw21B}7(*T7jKHC&KRfFQk8Bz>)1hV^jlCs!!$_p&URVs@#+3YO4+s>5H(5I(f zm^%l!s78{-z;PskI>7*G0TcN5Z6{Z2S%6@P`D>Ovug?k2*=lSbcApR@V|Pc1JiVV( zSm*X^qE~+b>M?S;`x52&+g9;gBJz1F0@suuGiWOLb$MMTa8;JNpId`(zc0P82I|#G zY!dc@2n%rcV4TZ8PJ-35M90AKZ9Zjmukp6Cr|eIs?Rtb1M1O#%AOFpslLf8vIUObW z{=_R5a1c(>RTBkbkw1fWBG}V;qTEId!FW*B>`;{#y;vh&PC-VUE_JYF?a#`CUdO^j zvS!ryOFS{t6uqY`pGKNUjubq8updfmKqg%%*&JGXqD{u=O(a{ivY7>12HmI;L^C#DiE3 z)_Syu6=O}XBuP7199GfL{eL)PpKhkVbljjHr=4WnwXV&;tD?yOC04}tG^KXs5OZ*- z#XgbLD>cT4LP46a8kW4!&WWXXHzxMVQf;K@RZH@fNrZ?RYZS;r)sUMO8lDK|$sR(c zfH<8_3l;LM`Au~Ear@JtJ3C13YqlFIahEjw*Elk!op}hR(^v+S5f!OB zZ%FA?A;8ewo;n1nQ|T#)S?I*^mM!rggVbv6Gr6i!n# zC*uNvSy)EEtEM_YRscKl(&!QT>8x+?DWdRKkp(@rw}fBCG*9h+;Y(a^uVYzuVvvuO zz|9F~Z}?)xB{Bf1*^?u^@R6RE%||S&WLiNqXgvbGmK7Kp;Vzv>=u-zj(HME^^eLtJ zXIFlu#|acm>8|-Y3l|ka;rgrgJ)eV&9xe!ia`2+M4J43+!BtvOrC+L27CLu)bR1I8sSQ0)taLfFXIUSkq)?J?%`Gj~^b95Nw6Aql!u3^b7%XSp?R6Ht-i~1hv{G4pb258adj<^3!ksyU){%uYU@%e>$3L zVtsl<`{@7S=V_))X4Oc;g6eSK0$&3AfBqNA<3F!y&8Fwi-F@eVgf%sT=J8yoMDsDt zoKli-Pe12+ szMme^KKk!J@Bhkenm2QY)bq|(