From cb76c5aa27176c5574696d46365e8f82ea60c880 Mon Sep 17 00:00:00 2001 From: Pratik Farkase Date: Tue, 5 Mar 2024 16:08:37 +0100 Subject: [PATCH 1/4] dts: riscv: starfive: add DT includes for JH7110 SOC These list of files add basic support for StarFive JH7110 SOC Device Tree includes for VisionFive2 board. Signed-off-by: Pratik Farkase --- dts/riscv/starfive/jh7110-clk.dtsi | 20 ++ dts/riscv/starfive/jh7110-visionfive-v2.dtsi | 211 +++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 dts/riscv/starfive/jh7110-clk.dtsi create mode 100644 dts/riscv/starfive/jh7110-visionfive-v2.dtsi diff --git a/dts/riscv/starfive/jh7110-clk.dtsi b/dts/riscv/starfive/jh7110-clk.dtsi new file mode 100644 index 00000000000000..2c3ab26b12f38d --- /dev/null +++ b/dts/riscv/starfive/jh7110-clk.dtsi @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2024 Pratik Farkase + * Copyright (c) 2024 Sigma Connectivity WSI AB + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + apb2clk: apb2clk { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = <125000000>; + }; + + uartclk: uartclk { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = <100000000>; + }; +}; diff --git a/dts/riscv/starfive/jh7110-visionfive-v2.dtsi b/dts/riscv/starfive/jh7110-visionfive-v2.dtsi new file mode 100644 index 00000000000000..2a42a5ebe72afe --- /dev/null +++ b/dts/riscv/starfive/jh7110-visionfive-v2.dtsi @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2024 Pratik Farkase + * Copyright (c) 2024 Sigma Connectivity WSI AB + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "jh7110-clk.dtsi" +#include +#include + +/ { + #address-cells = <2>; + #size-cells = <2>; + compatible = "starfive,jh7110"; + model = "starfive,jh7110"; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + S7_0: cpu@0 { + compatible = "sifive,s7", "riscv"; + device_type = "cpu"; + reg = <0>; + riscv,isa = "rv64imac_zicsr_zifencei"; + status = "okay"; + cpu0_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + interrupt-controller; + #interrupt-cells = <1>; + }; + }; + + U74_1: cpu@1 { + compatible = "sifive,u74", "riscv"; + device_type = "cpu"; + d-cache-block-size = <64>; + d-cache-sets = <64>; + d-cache-size = <32768>; + d-tlb-sets = <1>; + d-tlb-size = <40>; + i-cache-block-size = <64>; + i-cache-sets = <64>; + i-cache-size = <32768>; + i-tlb-sets = <1>; + i-tlb-size = <40>; + mmu-type = "riscv,sv39"; + next-level-cache = <&ccache>; + reg = <0x1>; + riscv,isa = "rv64imafdcg"; + tlb-spilt; + cpu1_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + #interrupt-cells = <1>; + interrupt-controller; + }; + }; + + U74_2: cpu@2 { + compatible = "sifive,u74", "riscv"; + device_type = "cpu"; + d-cache-block-size = <64>; + d-cache-sets = <64>; + d-cache-size = <32768>; + d-tlb-sets = <1>; + d-tlb-size = <40>; + i-cache-block-size = <64>; + i-cache-sets = <64>; + i-cache-size = <32768>; + i-tlb-sets = <1>; + i-tlb-size = <40>; + mmu-type = "riscv,sv39"; + next-level-cache = <&ccache>; + reg = <0x2>; + riscv,isa = "rv64imafdcg"; + tlb-split; + cpu2_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + #interrupt-cells = <1>; + interrupt-controller; + }; + }; + + U74_3: cpu@3 { + compatible = "sifive,u74", "riscv"; + device_type = "cpu"; + d-cache-block-size = <64>; + d-cache-sets = <64>; + d-cache-size = <32768>; + d-tlb-sets = <1>; + d-tlb-size = <40>; + i-cache-block-size = <64>; + i-cache-sets = <64>; + i-cache-size = <32768>; + i-tlb-sets = <1>; + i-tlb-size = <40>; + mmu-type = "riscv,sv39"; + next-level-cache = <&ccache>; + reg = <0x3>; + riscv,isa = "rv64imafdcg"; + tlb-split; + cpu3_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + #interrupt-cells = <1>; + interrupt-controller; + }; + }; + + U74_4: cpu@4 { + compatible = "sifive,u74", "riscv"; + device_type = "cpu"; + d-cache-block-size = <64>; + d-cache-sets = <64>; + d-cache-size = <32768>; + d-tlb-sets = <1>; + d-tlb-size = <40>; + i-cache-block-size = <64>; + i-cache-sets = <64>; + i-cache-size = <32768>; + i-tlb-sets = <1>; + i-tlb-size = <40>; + mmu-type = "riscv,sv39"; + next-level-cache = <&ccache>; + reg = <0x4>; + riscv,isa = "rv64imafdcg"; + tlb-split; + cpu4_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + #interrupt-cells = <1>; + interrupt-controller; + }; + }; + }; + + ram0: memory@8000000 { + device_type = "memory"; + reg = <0x0 0x8000000 0x1 0x0>; + }; + + soc { + #address-cells = <2>; + #size-cells = <2>; + #clock-cells = <1>; + compatible = "starfive,jh7110", "simple-bus"; + ranges; + + clint: timer@2000000 { + compatible = "starfive,jh7110-clint", "sifive,clint0"; + interrupts-extended = <&cpu0_intc 3 &cpu0_intc 7 + &cpu1_intc 3 &cpu1_intc 7 + &cpu2_intc 3 &cpu2_intc 7 + &cpu3_intc 3 &cpu3_intc 7 + &cpu4_intc 3 &cpu4_intc 7>; + reg = <0x0 0x2000000 0x0 0x10000>; + }; + + ccache: cache-controller@2010000 { + cache-block-size = <64>; + cache-level = <2>; + cache-sets = <2048>; + cache-size = <2097152>; + cache-unified; + compatible = "starfive,jh7110-ccache", "sifive,ccache0", "cache"; + interrupt-parent = <&plic>; + interrupts = <1>, <3>, <4>, <2>; + reg = <0x0 0x2010000 0x0 0x4000>; + }; + + plic: interrupt-controller@c000000 { + compatible = "starfive,jh7110-plic", "sifive,plic-1.0.0"; + #address-cells = <0>; + #interrupt-cells = <2>; + interrupt-controller; + interrupts-extended = <&cpu0_intc 11>, + <&cpu1_intc 11>, <&cpu1_intc 9>, + <&cpu2_intc 11>, <&cpu2_intc 9>, + <&cpu3_intc 11>, <&cpu3_intc 9>, + <&cpu4_intc 11>, <&cpu4_intc 9>; + reg = <0x0 0x0c000000 0x0 0x04000000>; + riscv,max-priority = <7>; + riscv,ndev = <52>; + }; + + uart0: serial@10000000 { + compatible = "ns16550", "snps,dw-apb-uart"; + clocks = <&uartclk>, <&apb2clk>; + clock-names = "baudclk", "apb_pclk"; + clock-frequency = <100000000>; + current-speed = <115200>; + interrupt-parent = <&plic>; + interrupts = <32 1>; + reg = <0x0 0x10000000 0x0 0x10000>; + reg-shift = <2>; + status = "disabled"; + }; + + uart1: serial@10010000 { + compatible = "ns16550", "snps,dw-apb-uart"; + clocks = <&uartclk>, <&apb2clk>; + clock-names = "baudclk", "apb_pclk"; + clock-frequency = <100000000>; + current-speed = <115200>; + interrupt-parent = <&plic>; + interrupts = <33 1>; + reg = <0x0 0x10010000 0x0 0x10000>; + reg-shift = <2>; + status = "disabled"; + }; + }; +}; From 3edbd19c9d6c5f57b0b683dce44b68eab016f420 Mon Sep 17 00:00:00 2001 From: Pratik Farkase Date: Tue, 5 Mar 2024 16:11:44 +0100 Subject: [PATCH 2/4] soc: starfive: jh71xx: add jh7110 soc support These list of files add Kconfig support for Starfive JH7110 SOC support. Signed-off-by: Pratik Farkase --- soc/starfive/jh71xx/Kconfig | 10 ++++++++++ soc/starfive/jh71xx/Kconfig.soc | 7 +++++++ soc/starfive/jh71xx/soc.yml | 1 + 3 files changed, 18 insertions(+) diff --git a/soc/starfive/jh71xx/Kconfig b/soc/starfive/jh71xx/Kconfig index 91ef208f9c1b7b..b98817f20c8a68 100644 --- a/soc/starfive/jh71xx/Kconfig +++ b/soc/starfive/jh71xx/Kconfig @@ -15,3 +15,13 @@ config SOC_JH7100 select RISCV_ISA_EXT_C select RISCV_ISA_EXT_ZICSR select RISCV_ISA_EXT_ZIFENCEI + +config SOC_JH7110 + select ATOMIC_OPERATIONS_BUILTIN + select INCLUDE_RESET_VECTOR + select RISCV_ISA_RV64I + select RISCV_ISA_EXT_M + select RISCV_ISA_EXT_A + select RISCV_ISA_EXT_C + select RISCV_ISA_EXT_ZICSR + select RISCV_ISA_EXT_ZIFENCEI diff --git a/soc/starfive/jh71xx/Kconfig.soc b/soc/starfive/jh71xx/Kconfig.soc index 48d6d506cc9884..c0266b180d9c7e 100644 --- a/soc/starfive/jh71xx/Kconfig.soc +++ b/soc/starfive/jh71xx/Kconfig.soc @@ -12,8 +12,15 @@ config SOC_JH7100 help Starfive JH7100 +config SOC_JH7110 + bool + select SOC_SERIES_STARFIVE_JH71XX + help + Starfive JH7110 + config SOC_SERIES default "starfive_jh71xx" if SOC_SERIES_STARFIVE_JH71XX config SOC default "jh7100" if SOC_JH7100 + default "jh7110" if SOC_JH7110 diff --git a/soc/starfive/jh71xx/soc.yml b/soc/starfive/jh71xx/soc.yml index 1d424c2f5407e8..257d775033b33e 100644 --- a/soc/starfive/jh71xx/soc.yml +++ b/soc/starfive/jh71xx/soc.yml @@ -2,3 +2,4 @@ series: - name: starfive_jh71xx socs: - name: jh7100 + - name: jh7110 From e4a4ba1f17409c6b80dc32cf51885add15f667bf Mon Sep 17 00:00:00 2001 From: Pratik Farkase Date: Tue, 5 Mar 2024 16:14:06 +0100 Subject: [PATCH 3/4] boards: starfive: add visionfive2 board these list of patches add support the Starfive Visionfive2 SBC based on the JH7110 SoC. Board identifier is `visionfive2`. Signed-off-by: Kanak Shilledar Signed-off-by: Pratik Farkase --- boards/starfive/index.rst | 10 +++ boards/starfive/visionfive2/Kconfig.defconfig | 12 +++ .../starfive/visionfive2/Kconfig.visionfive2 | 5 ++ boards/starfive/visionfive2/board.yml | 8 ++ .../visionfive2/doc/img/visionfive2.webp | Bin 0 -> 65830 bytes boards/starfive/visionfive2/doc/index.rst | 78 ++++++++++++++++++ boards/starfive/visionfive2/visionfive2.dts | 30 +++++++ boards/starfive/visionfive2/visionfive2.yaml | 9 ++ .../visionfive2/visionfive2_defconfig | 10 +++ 9 files changed, 162 insertions(+) create mode 100644 boards/starfive/index.rst create mode 100644 boards/starfive/visionfive2/Kconfig.defconfig create mode 100644 boards/starfive/visionfive2/Kconfig.visionfive2 create mode 100644 boards/starfive/visionfive2/board.yml create mode 100644 boards/starfive/visionfive2/doc/img/visionfive2.webp create mode 100644 boards/starfive/visionfive2/doc/index.rst create mode 100644 boards/starfive/visionfive2/visionfive2.dts create mode 100644 boards/starfive/visionfive2/visionfive2.yaml create mode 100644 boards/starfive/visionfive2/visionfive2_defconfig diff --git a/boards/starfive/index.rst b/boards/starfive/index.rst new file mode 100644 index 00000000000000..3cfcaba6a9c280 --- /dev/null +++ b/boards/starfive/index.rst @@ -0,0 +1,10 @@ +.. _boards-starfive: + +StarFive +######## + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/boards/starfive/visionfive2/Kconfig.defconfig b/boards/starfive/visionfive2/Kconfig.defconfig new file mode 100644 index 00000000000000..6a51eec0894cd6 --- /dev/null +++ b/boards/starfive/visionfive2/Kconfig.defconfig @@ -0,0 +1,12 @@ +# Copyright (c) 2024 Kanak Shilledar +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_VISIONFIVE2_JH7110 + +config SYS_CLOCK_TICKS_PER_SEC + default 1000 + +config SYS_CLOCK_HW_CYCLES_PER_SEC + default 1000000 + +endif # BOARD_VISIONFIVE2_JH7110 diff --git a/boards/starfive/visionfive2/Kconfig.visionfive2 b/boards/starfive/visionfive2/Kconfig.visionfive2 new file mode 100644 index 00000000000000..e451964f979740 --- /dev/null +++ b/boards/starfive/visionfive2/Kconfig.visionfive2 @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Kanak Shilledar +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_VISIONFIVE2_JH7110 + select SOC_JH7110 diff --git a/boards/starfive/visionfive2/board.yml b/boards/starfive/visionfive2/board.yml new file mode 100644 index 00000000000000..cc856efaa92bf0 --- /dev/null +++ b/boards/starfive/visionfive2/board.yml @@ -0,0 +1,8 @@ +# Copyright (c) 2024 Kanak Shilledar +# SPDX-License-Identifier: Apache-2.0 + +board: + name: visionfive2 + vendor: starfive + socs: + - name: jh7110 diff --git a/boards/starfive/visionfive2/doc/img/visionfive2.webp b/boards/starfive/visionfive2/doc/img/visionfive2.webp new file mode 100644 index 0000000000000000000000000000000000000000..f5ca68cba0da8d4bf9b2497d8d93476b0d225ede GIT binary patch literal 65830 zcmV)9K*hgONk&E<0RaG4MM6+kP&il$000080002<0RWEy09H^qAl?800FWXAodGKJ z0gwSc9Sns*p#^Tcd;|b-EbZQtDrgvZ7<>Rj!H3i=F&`3pZz&F6@mJ>FQuuBDe^(ug z^v&;?&wuiN$NuzxvH6w%FV`RSANPOx{m4IAf8+mx|3mu`@v-bP_iNQJ>@WRK_MgB1 z{Qj0dF_pa*i{62wyE&Gx7 z&+nh*KfnKJ|Lgv5?$7f7@qg8R)&H9GPvuYbf98K`ztH~I{eu2G{KNYX_utp=?w|Yr z&i!`%cl{ssU%NgOo0s};`k(AQfqiKC$M%o!U+90w|8xDf`d9jY_J8WXz<;v;4gde- z&$6HE|1H14|Kj`s{xST!`xo~Q*}v_-{{PwizyCA-ulo-vpS}O5|E>Oq_7na0|Np=* zY|9{o{zyG!V!}qi32kmeDPt9MVztoTQf3yGfe}Dh*BSawxLJ))@ z2tp8qAqYYcgdqq*5QHHJLJ))@2tp8qAqYYcCM+&J90)|N#E&8 zzA5tCiEl<7VX@BVcWn76@_#Uy=jfB_yjUp%>N+z%vbQn>)p$`|yM8|Eeg#XEnw76{ zK?v>AX(VB+NIc&aIz(Jt2W#-Wyo&N;cS8kIouUfiHk;>8hgOXBsr9Y_nX8`;zG+{lyAMK(NFsL~dL|Vmp~d+QNP>jb^P1^cf2$lT@>;p&EwL(Dl~ZQPx^h|VKW~~d<>l2A*nr+tXs`=`+nK-uu}xEA^nXq3 zVJxxgdwg18vG2Z-!>TtYJ)a<7sv{tadxbuF8JQPtxi@ayV^{^PXa1Ln;C4tneiXX9 zmPYH^(i>e1wj0(1US3TWp?los_z4m>EK@;QMbsH);1RRCUc!#y4}kx<5Nd!hQwL zke}U_U!LFLiVzcaIw!d+0*toqnr_?plR^$41(tF#UPXwHR;!$kLyX*35!^+xHw=j1eiP$-x=bPoZ1VK()iqA7+ z?S#!cj#%q!pS&j{IsVbEy=Rn(U!Lb2fDegA{ZsRb0AyHL_4@Dv3hVPh%gN2kSt*gN z{&0T>TT43#f3=PAvFUW9Oj$xeKWYrjGYnD^Y!_%X1E#a1+f<2lz{-CXy%|u{@MN)I%F8b` zfoomAd?n_-}XX1*F0m!h|)2T`XrJ$qQF^&vKdq4{#^AEVWj|fyUg)R z@K{}oY#h%tkX#_+4P|Ijy62lRSJ^L3k#mc%Ar|+!k9hNVbex+2!0G5X4o53LxiDi4 zR{KB-mpc5QKr6vC3ZXbQc`PAqoKspJbdDnj*Mg%=BZ`$1r8LbgyD9QJ%B9ct&7);{21RfeBL>dqK)^rDYnLG4^HGkiPoGvDR?>T`jb!moOa!GsD{pJX@1GSCJ zyh^L!^mbt(VqaybuAf(c0`@7~CpS(vy@gF#Bve`gi!1ANqvs&^^{snXDyEw8Z+mTg zDd_!Jrb08l1U6U7Die=*K&UhPbP_#RF>jK*{srNXYLNvM&Uic&0SpM_Eb(|5#{fRd z?gky|3qpUr+0(pPO&h1t#d<4g*sfspEk~@blD-Q`Cs^|zHUXCJd=W_lj=R-S-mw zQ{dE_+}kt?^m@XXB5p_o$&BI8#HQ9VN&;@vxw&f8BZGWaO>&eN%)hUkWkUv;`zmCp zcU$E`IbWHJAFXc$PwX>Af92`A{4eQWt8to1YhLTs+G)4q@#6+Zysu6IwWYgd+8M=p>Qg7Df1fOe#SNxpEw zD6PRqCaf!CR26D<^>_2HZfVwuZydW}=y|Kt-_$a&cL5jg(J7)NmdUG7nzW+qDJT1vSsKrW1yn!O0`ub(gFXo;eK9|#- zyG?wcv6*E9rg=srgT2fRnHZ621{HEo@x;KY!jgT|G@-RasIP_0>0 z?1=Yol8375m*$Y;ZaizKNy)NlCi*V9K)kL&6Th59+9S?3r$c*<-q2c|*Wx;dhT!L_ zAB(2`sq^1yc?EVfam)(#42$EqG>E0Cjyu&vDQ6@Y6>6M&&5BcoOjLL(4?ktu4WD_= zc69#~(K5Yv=FWt|<(no>N!WvFCUhZO#ft2HYi#n;^du%ys-ciQ&kHU@vYm_zd4%I@+!95Q6RyjvQ@+=v=cVGUFJUqtbaO+Fz#kvn)aSrnq(NP%(_ugA}Wtdp8Ql z4y#Q(M22bWh@?2+b82XVLL{z*3jrcoP~~@$(Vxx2355H7a%K4CC~*;Np8oSxeG&qV zaEQi}H+|-(w6(TM-1*!QZF)-(3RA>(uw%3KD)S{Bqf@DrTa~U~s!1@M%DlrpwO|3h8J%F?V(keuoc^7$oVUAcL>bDZ&8ItF2!168ToYUe6~tRyv0 zA&lFTS;O&^jC-b_JrgCt*;PYIkN@jaTdZi(4v!ux%AM-*jWpq2&6gBBI6OTR(0y0T zdN)^T!Y}bG?$fMku&;(sOLfuQk|Pox@7#BY-~>A)=Txoz2n`$!ofTB@@P13KK$qIk zE(CAH($MAHd7Dt_ys!M_f`Q4ASC-~gqyg_Ha!{msVmj@T;bpm6&?k4l7w9A=s}it8 z2ubFC-SbE?AAP;9fd}2Va9^m(01P#&yTrn@nOEW$xMY?&mJ`$*C;osmi!r%9J^yt!OA#A20~;PUEfwxrvh7dk4esZ2uM zI{N10k_DcO&l)Yzk2LP4?%zL2ONdC}8<1U}LsQg99N>TI8 zo?17Xl6BLE&SIr#8eo5bfkCn94D2ssfe1Xv~F zeb=Gg=cKW?>pu;{MGBzXjYwy<{Lsa0@RioVprbl}<_RcZaH`Ih*Wn8nva!cl-YYO7 z{ggELFE#~3_ZvMde zw^p%Q-KwFHqUX|ReHT%xRqOlDDBXmF_hjq)T+pH#anH}^apvE=o;0bK8budX9mUqp7fm6jkejE4aR zIq5W9kKP7dqfh-=OyV={n-i(jeUDry8jj9hfl^MHQ5YNquN7Cn&cq&1-1_I?LA?0r zd%KE)nXRPhv9*+Pv1%(b`9Y)Z@`{q8lstbem~aI1szM=n@BJ{fSDAGbhLo;?2h8eY zvFHbAh7xy(cU^G4p4YvAmvP%Sa zeBO>Kkh!RxwD0Csx?S4kd2crR&8R)E(*HCD^euOv%jWBk+|C3WnNM1<%pO3ZTQSf- znvOWbMMPD{Uwas`wUuEVfz1A+0xdt_jq{q?)UhCcipXxssRLP7ADLsXSs1z&p-S!y z0FQ=80lD!P!ogq}rF5=(Va&BNmRdjZ*VuQZt9dV@v~LHf{^)Uw2}SC?#iv-v6283D zF@kD|KvVix)NvVk8S-g6$Z3g6c0bG09|2Gk0>wwbjt zG`rOcX-(O-;8gAZ5j*=82TDjbm_9o}p>&67171d0>O+s?)qmM*asSxC_af|)c5Q?Jt!oq@p$NQW4CB5x{Veh*P1og`$!rNsl18x`5 zy3+WTuh;*?RVcm+I8bGWV3}dl{X;UYAJ_KZKJZJw^L>mJzgj&-giNg}bd=ZBph-n- zd$!#g8SJpgD*#ktCHyx5wRddLQAnHd~zku(>x!6zbS4 zsE=Q+H6YD2uLTf<(fBs#5{aiQFbq@YALpo0l)%h3xXJF3t58lHfnBm6by0{s0~j z#%}Nwa8pi>V))lzEZU}DU5De^Z}CaB=@d-gIy1hdqjO%L_iX$OMUYmyrMNyHw52x- zPv0kcN%9b?(R6u{6PtMREer$nk^`Cyb&F?xb)lp)Y{*h>X-i+Jf(U}J48yZ~U?u+o zk7{H9VErn3gvk&|r1sQJZS9%nzs*SYfY;wlquF9el)YfnS9F~N+$_qpEgP*JU?Qtr z`V9`SFabQB#d^UZ_)2exRKCM(8Yk!6f;bOz;&G_b#fbolyzuz^$9K2nCk=~{Gr_-U z+~9KsRms=4O;p9`ID!f$5!(Ah$a0Jilt?uPcT_FE=ge4N>Kz%|VVF^0KIOyChex+S ztyYZchnqOZr3$Q)PDNvpJJw^o-Ds^#?jKu`Q)Rk4nja_kt{A&SW}cX$dDX=*&~d?T zm?1h!BKirOmaZc4PBX%N8@s-LKjCW{s~J97Wn|rx`m11We$+~v-+8{;=pzL{#Vhtx z(}Tm0Oa)7Ir(N$hrc?DuJpN_a#a0X)eqr+|S6PCV%SbxWB5?3MoNElru(C8?Kpc^H zFxp=Zpe7(#J+P+J)Rq_;bx5Gmef&^`)Gm9*bRK}rD#&^Z5f|Ex-ui+-~9jYnPg9TnUTxbS1U?)D4kgRuak8n zo&}?-u~?PQ)wW-tbh#0dH81)32+l5A;D9#L3b_u5D7QU+K1vM5tQ`CMUg7clFEE9e z_zx%FofrJKxZ{Pj`OJHZ<1r5k@uza?`c8}{!q>>B!&w+efOyF5feOng39@3$O586* zjWxW6-(c@#^?XUJdJkl$LBh!bd5U^td4UZw42c+U*CD|gB{Yoi9Am+TZK0{5m+B5^ zdE(@KGrpOCv7L;UlQpT7X#u3+koHh*fHLsI7iSC_uNXqjk6Md*|3^;qcKusnAUpZ4 zFA+N{q%j9H>#HNzd}Hc}L|-HSS#TK^6*MPXmM)S$cb@jY=cKyH2Vi}Zi*f9qM*2E< z)y3s(q|=B`wVLn9ldu7BG@3Z@HYqmVx0|Cym6v8PnB_7>P?V=MM7CLlQQ+{t?9#&z0mVPcJGuJun5MQaq}@?RO~CI%LXPgK%kw;@0+8VJD{ zsJZ^D{_2h%4jBe=f2G~GG#aOvKB8mY`$7q}jKsY)MWO$=@-d+|pgnWD0;W2*f2uQA zE!_Rcoj6HF{oUW!zDLcPYH<+6FMxo1lMKS|OaXNp_D^M;8a@ZC3}*}{`wu8`+~6x; z2baCs7whoA@%a6FJj?~>*i;J^49w+xXds|bUefA27t^Jp!#ldd(Krn3AzG2C857@! z{o5*{bBEq)GUzc;SrJtnJMhxF_cbK{F(Q4^bPN$*xa~jiO=9?3knP5@_WS%BZ2cr* zHRZ&%n9rnYd>%}m&bP3j59q3bv5w+=AAv}}?*J+Ql6*hxWIJ{%Yg%5?x0;O6oT_$k zV>4#1<7e6HSiO4V<^oJJAM^IS2F&EZzmHwharN3}<7;2r7&6b(O-lwQWW!$9Xh?S# zws1KeRaQioJxadzX$5^o(v4ac4fEoR1lx^h_e64DIF4&4Q+1wi-R92}2Q$h$g#pp9 zQ5J>eJNdN_RPj=UH9BMl~TdGZ_D*4%xQ#l@{zU;JP5PL;;UoXfudJr>aZuUKHuF6CnIe zUMVaj2zc~}9|O}|vNRIZnw`aw@EsC#gh5@^StR9%4?PLS;R`_bg_XzU#Bc>s-+iVs zXc)t~K~7l(-q>0a#Fy!yFuZz+W=JK78k~bzm|k*on8l&5RdVyb5RdU&4ncG-WWF99 zAsMpMFHwkgbODz{1p%C_#pPo0T^O&As+vrdFM(8jKuPh`o#+(P`N)o64#J-xAgDtd zmpYv=NI6q{|78ctCJnj7dMEeBGe#e{OCrinf6WLC#sTc9TH(^Nk5VKH+<@CrJaGtD z2I{>Jt<|kJxly6dsso{e8`VN#g(Ae;H0_+J0lERr93*yG^RnuHb^WirEAR4>a#O<* zRxw?G*r?2#Nes0^akpzYeMk~1{+ytE9GpVbeuEgZE8z{$)+D{!3dV89s9zUE(GlD6 zrMSV}FBT??@De^zMlsgoJBTnX76)+Z{H!Y2Lcz>n9Db@C}2MlFK>6(js zOeomEb*)v}g&?980lCvx07<|NM!?X>D#Zx8C#MnXzvEx<$Ue4uu$S|!Y=Bd|6wt_t zeeol%gRWSMa#i?D#Kr#dn%9jR?ct|LN>kgKo18`=x%Ne+a=!^xsLq+-0xPMh7s~{B zc_R%MidNONqsOWRP?DZVx+_gB7c(8w#6>E(ab39*f0XayX6jxcw6%EuB2KW&?H2x6 zWX`b&f$Ftv^n^aW8t}6{ZdqJgwt^y1Nq(O!3sfsqcsot6Pi11;(I2ExvqW!o-2ka1 zbFbLCcDF~UJHi(-KKC7RjbLhNfQwpij*XF<1zfSq=oVXMm~YpWHK<5DkrDz!R#;{5 zpwf*0P6@`|IBDMF`!o%ChpJe~%CWxeBKcy$&wR70S&GNPYUD6WKf#~kIX{)5EVyOC zP)KiNF+acYgnqjQFU92Du+;M5&?=!A8I2HYM!ucO874_XxRl);QIq^psz5&X@wSvG z)A_Jyu0ztN;)2l3Pp_L9Rb_;HH^YyP#db>~u~3jr?t=R{8^&H2(8SGOb=uDcPPsgfyB+c+|Ew zO14eW%$ZPe+-#XrxMV{1iX5V?VTl22jmQ_#jqj2GMJjbpM*ZP{E#w zI58a+q7p^z6Cp4}MPe(FomHa;?q1p^l+2x}HIXFWF3mvVDA~06bH(BlO@92ajW!4r zqw^MuT12ei$C4am2k0iWbJo{Q9tbL9(A`wa=b&8O4q5d*m(OZ*B?tIy;f{B(d_%#? zd2LT?1Z#Iy-ucL*B*yNlImr18jK&=Zk`^>ypx2mx?c&m5q#{c8IMd03fKD<1-g4-o zC;nG(a=)qDA#KkwV7k3iH~Enb8#QCA%hfG@AUQab4klbvfVsoW#iYX~%R@|n@iur$ zB@p?+aAdg<5yiwk#bVJLclzjsKkSxrPy%EZC8PJeD=g~mTG5D7l|NffYI%$fk*ueQDms^|=Eqvg}M3h)d@ z%MxF%1(US<%U?71%-gCdW^((1v9b;iw{m5@gT_vE=v3ZU59uSgc&P`50|!Fyl3t$j z3Pyj;=S-x4!B>t zK}#G<>FJ<4wqxz&pnJ1){1tv?`HJIFYP$H>{b^&_Je1wSdMpw-y(Y2c_F?`KOzeF1 zqHswHD7-P#2`K@U3OwAe;kb5^WG%5>u{&%82qhi8g06fgEy}5;?j(P7`nDUpjOoX-3uh}vz{OxQ>$B3TV zg&DDu$Uo3L?I{;)@>W1U0#&c9gaiQ3+x@~Z^7IVu)zvVmOkr6fP!I1cB4~^7s5+zk zIa#-$!IS^Bq0gdlFE<&+bX7QazxJEmCOmfwPQhJUC-ThZ7$+$md%9-2QP zwY69PQWtMIeDj2dP|1Z+MW1xer zT@79ndVbaUt?~be0i5}O36y_~4{Hp0d^-1b-24zwqmLKA?rXy6NK3Q}L)PhojqPpa za4pB!A9-+QTjMn4T=Zx~t1M=VRrr#2r+eHy@58Sp!fsb#Yx|;!uD62QkqVZ{KVIb~ zb5-OUyty!zQ1d=sz{^ms4wLOx8)vx}RXS5&)K~%aXY{XY$CW0_YE3n^#}#S^z)_Y3 zr`wWaC0b7N`784k0Dj#U$w(&T?cmWoXldIj9txC-Uo_M8^ubEewys;^3Ehc}N9#tu zR}MXxmzBhuIlX3$o_SYmwGzb$Q*d1=8PkYXDPx?Wkl@>Dqi*;lfWR)pf@WSK45?Wf zce4n!XGzNDwup~-P(8$b*Lq{yHKiL*Fqys*l*;wgRj(LJeKr6=(EL{iZMOr(FTK&)a zo9NjhTFnH-XPz_t{Pix>urMdd48~(zEVCKyYgf4{w*a680ZgY%P&H@kM4(APP>&`S z{(a>j%hKf_j#f5pKXio=O2Xs%A_((!HM*Wap%p?Z6nchiLp`gF>l^5-qAgMn%xANj1s(t85&z=}TF9s-SYmqK; zq?*sKHWPRlGn5m_Cf&R{D?S&R0g1(8h8nD-HjP;iIaEyRa#^rLtzwV?1K?{To*U(g zXsA7&_A}^vM~x+_{%E456|iMVaY^O#LxYl*fka0W&b%RC8N*PkGRu!JJk$$sy-uor zW4I7K=2(v6pVwF?4`vy|%|k=Vir4sF^|TiZYvJzdN-uBSzT*nDx}s#qm2=(NWAPQ@ z#AafA6UK-ACBorH*)?u8xc;);js#A&HtSbka^yXo!v+zCZQkNaB*p z`Szereh$lY?viAksM|*T(Jd8NxrLGeQ>?2h*JT_l0QeoUn{5$Ueq4EF_XUojvDPaT z#H>!}>x>LmndEcY=)sLPFV#ehju9_vd2tX^g;mIOA=N#bj@}=L%l(%4moGIht%9+$ zF=JhcOBh%J9cR*gLtLFaP#~9k5vn##GFMgtVIU{l5E|Nk?0Vre9rYRi9E;fOkN*@w z#4uPtXGl}Hp0bBp2GAgGpry0(mjRlw858B&Q8``q{Kqp7-nZpXucHGINcGkd0n;&x zdk-jq`2gq_c7e?Lq%9&j1FH+|;@r8&AL+ZD9M_B!{DbfyH}9a$oXs@90yNtQ^|zV(fc zVRvK>w3=+|eBEg5O&L=S{Oqpd*_tYJwo833o-NXjkJ|@u>JAe(L;WiRC{fWZTRH!F zOKMSuCPPlhnd)nE*qPcS)B-2z3h#RMj;`#Z35XEGTc)kd=@U;b*i!la*8dt+N3b%9 zX?W^pwNP8#F@#Q4vjgPu%T0Wb4KbE?^~#akWj7!1dn-)$X@^~V86NR}%nskOU#UK{ zv;fJZ*L(pc?Jpjo4X~vU!&xw=lUfW9HN zpp0$C$9-ARx@|D5JQsHC=1g5s*m{sK|6`RAT}xnDH{cl11H2~ImV)@|QajMUy~3M(RXExB_wZ*czcDI-T9fAs zxlEx`ZuL?$p=ONlrGoV;J7`fvnIFY7k+Bmm47jJ0o4;OiFYDxXB;7DC zPs-`^3`-7Mn>7M~fZ}d0cT+j&ah{oRXpfz44fflqYfciE0XbiVPZUAU#>GXc?qTkV z4in8Kgu2OSl+W$oR=qY!SgK83qTV3P+;l^L>?~^;!%hsYzz>XIc%FS;k>6pCKwwry zrEEKC4cbfbP^2#=M4`t4#SIaF#3JXX5j)tbP2jjMJ|ZVGg0IlleVy?xkI=~u5ic*( zF$WH3|DEA3s1i4@iFQjWXa|ajKu-SJ=ocRs2s?ntM$2OdLO2 zp1r5T5t=MNh`#cW0w3@^6$y4*RZe)<=~2**O(4o>76pBg7h9sZ=kjy>WeI-Rs-Ybs zj<}i5gAIr15c0Z^%GW5mq66IpoboF`NzbUKvbA{*$Sy(2Wm#hW6ou4FVvD7- z9afgXrXe$uag|;0wPR7hEL0Uxx`W9*57+mvSE}lHR`n1m;)jGqTM53d?6w|tB^Ny= z$s!V6&GX-=F#qD(XZXq2`QE|PRyDR(+_Hq~A5=iYx# z22as5n^7e>1w$0P6d9V(aH&eKhX7S52nh4!knXnlkC^NMv`Z?+vy;4`)L?S8Bwxk! zE9#Ht$XQ;G{YyALPK1xrf`_a5s9NnJFJ*975IhjextC`V^Lwi|I7~mN=9uwc$F5yN z=P8kk+3F?dcn}{s#1m$74)>KUhyL5RVCiIoWuF)F<;b?AgZnE8_!fR^BYjq_?`T7s z7T?SMuKepkvp#A{o*`?+3g=gQd!p#J!Ob_lAn~BO?5a+4;u}u4l$c}b8%~Mgs_dJM z=6^B-**P?r>n*7R9XcQEwbanR`kyhb_*awx;fHz#X%t78JsMYFH_V2}Q=yP}iYgD^ zd>B)C>f)P1KAts>8;Eqjb5V(X1QIZmhOj)CWr zhI_v7qVoB%;*b0rax=%va>0M6zBs{y zglBO$V!H9henJUNtHv|;Ld!g%hl|YHg(X{g`h55iL%)nye1Eg8+lC1^&FEX-=Xbtb zs)oIV7~09C7q0szwv0K0CBuw0lAR+4!g~dflO-$oPohxT{7H^5E0t_e;%F6$8H;x# zx$a3a%>oahXxvpLu+$1Lp#{q|-v?LlM!Fu_Xn$woP%4^R|NPysYlj4hws&Dz>rHGK zX}n3!c@0BHzG86;7YrhxX4}LW(w&9`22nH-OgNtswC7;OChn0I6DM?|MoIopMIRQ% z4#BJp*8(v;A?Uq`2#bn%z|iEI3d@dhy-GevNpIr&hhagFU@ld|UFJ_k_bUz0)4;S_{mm{M6-P=H4jaYupV18dY(l*V zq7oOVB{zt2Ygx7(*KeBF8Tn3AwshJV)^2GA(O?gO%G?C&pLnB%_jh@W(DkiW?h!hd zW#u%?+36Mn7n1kcXT(KL1FFq5>>25B?i&(5>vN;w*Ghk-7{{$y-*%@3xyl61y0$bC zq(3Sd`(t#w48jC}g|LScI%L^MUs_3|Lf%h)8zeSQ*rwrGTDnu0hyg}7t!Mx|U;6Ah z|6ghh$Ke*XQ}fw;8JB_=?cOBhT+=TB<6jm0I3BZzn2xS0-cDLc9uu)L z9N;1NaZl;0Q$&f$JOcH~5!5Az@1Si7MpU^G0Q_&(v)$?AHBcj#bs4S%3nGRg)H-Be z;;No6EMoni*8ld&7BMR z&=&Dg?<_5)Xv259eymRN;@V?9SJA4A&@@J|zP7uE)9}!?E?h@<>s5$gxU4}f?UtW= z(4KBFu^q6J#!*pwqq$>_!ok7TaYZXkKN2C-%)VAWL~@XWw3|A|jum!n;qh)&jH2U) zsm>o7E+J9nw{^Hq$}{ScgcV6*BOCnfZeBhLcW`Kv^1*V(_ZNJdjb6-H3G(Ty+{rwM zwsrQ0$aq&-TE;z`T&R>yo0<6JA)$eE>I3~2u_Dm6%#>UQ?Cw2TNN0mdG>zKLz4{MFFDD7! zG6t%A%5Fj9YN=^O8}7y~-ae#kl^x^%RS|&= zzdJm|sV|W->x}5R0YtvXzm06!2N_#_31upT?q*bUBz5fFmbhmxk7enx&yCc}X)8TN z2kT3X%4Cz%cYXs#kumRwzBY#mNZT&Y{fN5?L49ZK5?7X{-100RJs!60s_LcAU-T5I zKeZUF0Q95lNuTvL;&k0~(v?_WsyVEROn4ThwP4XmJ#M+7is{7>Q44XI#?}Ia z+n#j=w&j0o6DyDMUU~{pKgP+l)jUp4m2yFMA83jQJ>31_X8&EH7S%Epm$r&|iLUT1 z6iMQUni0z4eh;y@5T=gACh{lxG$awgZ2$#-<60X5%zv`_n4U{aPr=Gl+U(Kq zeh)lH%myRhZZIQm`S)vRhzG{cifwnXL?LrvTHoM&ZJk(!6xow~pNHFFwbJ%Vb#rcE zPc{qA&SHnTH*El#zyJMpH_Q3JB6cY<{qtZOL{%(OxNIXoo@TUuxCWTNwo?_!say+4 zpP#=RF7ARs^LciNI{!N^Dc!4CN z1Q8a&o$jVm;uWJn55xEAhQ!>0#AYI)zu_x_b3KQ6kO^cxSb^nOW_dnXkQ5~MXnc+1 zr0!WF9~@W|{jbSrKEieoYGIVtbzTPiJ4`Ei!|>Lyyp{U?b4ZG1sqP%BI))-@1Yc~+ z5tgui9yRC{RNH~us`t$+tV5*7PjYkn8?hG}3Ghw7+>R@uY-8FIrRGany1OwUVP(+D3A3+_FyzIk$7}WLX)0&l_KwC;cacQjE{fs}TC;Ymh9$>JQU^ zodpcPzMmqfr1UzhUen(jo*R!`0+tPP*0qr)wyV@K3*TWn@<3!>p%{ zZC}m1S=TS~tI}1PSZi{WR|ie%-(ppBO+2ZKiwA9hI(?s`vm$_uL3EZ%9IUg|zG%6H zD{@5Wa!1=@dL3D29tWKHl%eQ3O_O~`tzQeL@JxnBafg1wuD)a826R$L_mo>B)1-z6 z)-GbB$EuEjJ7Q1;$4*o5b2ARw*HSLzHahL*jJ2K-OfD`If74H@wzP=Lr^sfr`HBmB z&x)EUY&vJL*nZO$en2%EFL61B5R)9*^8p%f$UK^~@cC(O_81h|)HVt<4U^-|fQ(1% zWuH6eBBPx{?WCt{$*RQ-_-Ki$@$u&t7smm|n z`dg_HW;G4a!Ax9)inOvp*L)V#a~_?;rK(mI%q*U%8}_DjkospqXK9r*mxX-L&p47O z5LkxYaBU^|qBb^GN=&{v!bhpe*bGsYlQf07^Dh~eQ5QL|6kVnK?BTDGIfpX+@QSkA zNj{R$2`EKBDxDOzXuszvXHY|(mRp~B!_D6*pB6X_jFWaNj8=?n!#s8_1EZ9R&igtP zuQ;{s2^D7kE&lmcVm8w(bz_aq<>&Pb&_YDj?;z1mV7pic2jh4l^Tz@J)5rc+twLWw z!XedL+3fup;aAhaQzr|aKK^1%sAlB?2Bkdv8t3m-fDc@|D-(lt=&rPFgg3G_22^E{ zalisDiN|A9GWlXA`Nj0^D?-}W7mnS{PPw$ixd35OVrlstHhUUM+W?OOJ}347lS#Kv z-g59Z3QrTYB!oZ)EZ-#?x3g~3w8dw?KKd|FO9dKHnbvU8_bI$5<+#pamx-G6!8?|JrftQLjqf?R zs)Y8F*0p~>f)s@t7rS1NJepD$ZH@~bB0xXR?}ZcYQ^i;e1$qw*rH!wa_JQiebN&z8 zH|dn1_#g=XA8o1#x(OnGszYHyVt?Y0ecyHKR1(pI0hTk;Vw-#mV5P8-)u?NBl})LD=apR|~S*T<70g z0b?jQn{FNe!tqvQc$+0_3H4S4#gX$`Uo@x4c+(XjW%_1K%l`t?0MA_X2u1gLDjRfR z%*cIVWyEYkCtW2YoSlo$=yEq6t7pvI|9P7(F|EZ&2=A;iCBR4d7JaPRbV4&HAp9$l z6RrwhAvvEH5#MH16fxYWNRB}D^6aoDy}O^JbyNARysaL zW4gg*E@eZY(Xj*f6&D$=5^Devnz%3g=?6f;9$^9zU#evXt~)C?>oWU@*zdL>)cfIn z)!IpO|A}vf4rjTmw~ceMIUM5zgb(JK z@c^7b#EBw`KmK+ih*4M8bDr}1)!5D8_qWyO$P%Hb`g%Q0##>K3zs8}S0(inffRaL8n{U*!UGMZIsj+x_V6ZtR6xd&!W){0yUXaEdKI!$W04Eu?K9bkT%nx)eU|h9l zBjop!3BL!4?9#Ec4EwYtt8(q-m?z?|s*Yd-E`}ulz{xY;YzldPKnN{P1Z-ev(Z|=pLT>x9p&Ok zrW9ZXFMr7kT#y0N!LA1|Kd4u3N{y)mKNc~N;vN(3YQ3G(1JvEy^v~rB`^YEb)svn- zH@(aQdHLJJoD%njS4cXPJ)_70Gq}R>Ai(U|5=q#@4voY8nJ#i>v_YDLMGl?M?XrY46jU9myPprZczauo}S z?W&MuWx({Z-ii6GV{1zie43Xz54{Opz63#~>Px^o3ZVEnEdNeA=>1B>zYd@uosz`y z+A8*V+}#3&c`TIx8bnyJ7gBG16a&>Gz0NpR3Yb_Nz<@vyOG{sd9BcBv)^GEhBvAeJ z!mQc^qcnWgyb{Da^-c=N3s*mEv!91@T8kUXiW8~&&{8nWhLy~kT45#V?)-EJ-d@_e zmZ!tNKsJez2VHw?O<*<;_s&*Fl0?-i{U9k(&@2<~_=6{Jr5Yw}Vs( zsZwcfcJb_Krx3#H6(@o0V~^SKX)B=a2`~XMIOIc{!Cn>0l3w1$p3DOCdDr`iywx4x zepAs!VfyP4CUQ*y%Sn@?bSIlDT=&?XKvR-)&Y~Zn+`jtq)I6?HLGOwvD5Lty+k7mMcNzC?uflu(O2?$&RfL2`dA=5C+kl8U=s zF9R9o@GXOIpn`xSokL(U#~-URcsNRt1<@6#(?1iiEC^4rgUDDckfv%2LWxf6g}>W4 zIQu4BE@^-cW417ucB~RZagG@hrv3<@v6}^Twz9N&Oz^&pIV^@qdqij;IUz_&so-J{ zv$}EC#*_ERiySGdT6Y6FBxC-sW(4S|4%1jN8$hv~vP47UPZ7)NRpO@F;$Q=cu)5`i zda;^NuFL?NmGDZP@Ao3s&y#Q_CIonLbX5AX-JLoz@CRwS4Lw?y55u}$0PCv5fD8(1 zjQ;(`B{0VPE5lw@4cKd9+g=Z0o6D`Th>^>dsa)ScEjHS5bmR-T6Tc@`7x+^Oh zGi>-^V8e~gFNv0JGAz`K+7;Me?t!jduzt6#`;4QH%ZKUU*vytbUD2b~?D}W4dpFRq z&3(-;wPo)y|MqUAx#H)ta;*(rCEHun!zx=dtXo@J^b5E_a);-?f)G9hy4Gg0+yX}8 zcEFV$m5qVCxrZ+Qz&SKNll%+++*O$LNhGmS#&mGt@O9i6YxL>%c}uVaS8ugIpuoyg zf)Uj5iNZmem4PESe@6WwAq5getSJ(3r;k84>lGI(x=f@(AVLvFAHcKUjQbsQ>CO{O2Tc)A& zz0!I1WqTZD&}4EC-+x%&TICw(9->|?#UjAM+suTCRfHc)IN6=Jk527oht@5mhZeRo zGoFJnnLjVe_Gk-L3wS)j;m0!6XSnHqFtP&VTPHI?m{R*I1JAp>JJSOJqOFp$fQ-CVe!47mD*%Qk7fZQq#vXj6P(~mFVyAEn zwulXXtbVM1GH=NrQG{ZYQdM1cYcVQ;5{%QpESdTY3FYQw=X~k88J8cknve6gAHTF;TVQd?J+Ra$y6&L%~K!t?KqNxd+^hH{UWqfaI0 z+3CxY(RuFcO$;2VLhxP#3!kEsp<(?cMf~Dg21E^;r`Px0c`yacRQ1eRY5%Z)Xffs> zc@QKD>Hm13edZVM)q>&5QQ7JESz`|xWeq%HGMvWRtT7r;U|b>8gw8o0c<%p&6mx5Y z^#SkJ4bV^P@Ac((B|wy>KwRjX^jYn?OZh4~TH_?^z$QoJagMDSYl!IKP`9nj?Fueu zRkX_1?rTw;v|XWBXj!JF9rn)cWQ4u%M%>dtV)>{LeIx zIp@9mb`-V8u!Wd>9q#l*3Io4S-K<@y_iDzDgwkA?Z$V3E(kW|{=WM*^=tFUTwm2P{>2Wov+#hFKjohGk)Kpu%?P zcyL7^(3T8Fp`G}6x|W+ZMI7r|G5xa_-*`f|@RU5L-QlBGEG35gxXUFf#^!WO!Q@oz z1*tL08(Pfc9GA^LpKUkEWR2J+ct3NfDmBgUju;X@fRy;oOWOnehIU*+*QkVtFrZy= zPV@-riruK21If1!=Uo*E( z%3Z44-L|mh;At}1bI zR}GaTV-m@Dajg+=un!TAZ7_|aDn?qw^>A*vT>0H`dM7}|?|}cbf4gda+VO#>x=K6> z`c$<2rX*MSC%JDn!%yF!x%VV%=|!OWGiZPrD|Llpz2GBG^UwBGg<*Ie3WCzPwljwz zlnKpqE4q`|X?3sa;B+O1<9>QE-$o{ZD= zepJ=Ln(o7RW_$vAXQh?&A&kWV=nKwcg;7$gMxiW@H9r#<+Zq12EGm3yw0bA9=^0Vf z4kBWBCdlL8VN=J0Mz6|v@m%J_zVGU;K1aV_O9OPWillKvrfdv~JdbJzel3+vONZ$1 zA`BLL(%&U4v{W=VeN4IU3f|FPE^K?K%J#gN0;*{a-wEk&Uk5WXX>mey5+TS zB^1HI+lFiqz=R#D5l%8W`}1$nt+12drlEXcxIA&G_$|Dj5>8id3|qlr#D&PXQ9{hc za-xjd=>i;Ob^yRA-CamGrUr08RtB2)B~fw_1@eP zX>t*Uw}I=v%_1BUJ6ucv9o-X;fQ@j{aE72k&+J^A1>S|mFR`q(45K@9gI^?9P*!dq z#M(1FO;au(Q}r4LkA)TxAUor2qV6DRXoK9_t3E3M(<3_sn0xnVnE_yrtP2LOJyGka z7WKadHcUoQx3;5;E~IQE#hoclVh_xV(ClyVsG%gouO#fKxp(Tbx^pt_Q|QzpFUG-u z3{?T602-3t{}G_>bIL!fPwf41_mXuX*10|R$f_L`xiKk;S-=#R$B@9yigrjuH>U<$ zmzL+YfF`nEEWF`7bZh>E&!}vOC!V<7NA2_~ou4J>McTyusCpu%Z-n0F3SvX9WWfs8 z%la*S^USJdF;JIr@qC686**86Ge{zPSoeHF95mPcpG|SLff@~jX*`ZV3B8Oy=9>no zF{HL+P$bo3^UUt<;Xy~Q_KC!c2B;Li3PNu58kKPpO-)_Sh;;Nm! z(s?D{Vl44jIF|p!i4A6RXZ(o4D8$gD?(TViN5RTPh}I;Z)p3roXHwCdLpo1a416I@ ziYyHNqem!Lr>*{ws*KFX%==>p$ANQ_pnb*uD6G$+;R@!N@Q39^DB}5~x9i9>RyW=1@6AYraxvu!er!o)atpiA?tNSS$%E*766{M75S z%xqZ?18fS^(P4Mp&ZHVoeu=GJ6w6w}5}2RrH!hJQIc2_>1pqk+yY<8Aa%k^kp}cGl zMh!G`?Jvqd6FVC8E1MZHceqpvG6l~jo|_OKNq4oLi&la`GnZc5RF5j6ZhOjq1j{rQ z;4XU*s!9ag4_?DpuHvKHYCo9wShk(nw)WK?`+4>z(GI)FBL4j zDiF&`R}O6FEny*D^XihcS%-2zgK^Xlo`i_0KB$q7!*@~jgq*^_r&E-TbWTBH#Tc5Br!k)c1BPvE~ruTbqeJRn>e;uo8ErAAtDsu%An0XH}{SDl1n_gNNk ztI|(MMH$WgcQgg72yf4PWw9}SO>E>+p=+zhFq*{J`<{P{$v2G2mDbPS8x*6%i7Rjm z_PF4pW~6N|0*kQ8{`r5R`ByH?AA+G$s5I?FC~_RN1uz9vb0z#;AVD@X!>==Yo@t6? z)nY4S^cy4z2CA|eAn_*1(w{AneKni5J@qbMo{C`v^%HvtHO_bU(znI89n)>3-Of#`lz;I0%Q3fN0oDiHcURBhO=$b51|&%GmG})O^~a*LcVNli4U7 zt*~52+sIo(d;JVdPg6OwC76HCWwwT7?HH#IPXN(LE%Vh)$9dX}iC=siRsQmqrNMh? zYUtg}KU1~`R^Y#b#Hq=>M;(}xLJbI*^G|?`&h_i;0CL(r?Z*?;{(AB|x<&G}y%Uw9 z;br8gN-4&yu_06CXJ`sS%Yet)4wJ80cZsBYhVf7M4+J?e;P3efw*>yHTE~2?9}h+Y`vDnHZXdfz_U+`<8BW&A zVVO)dfXM(M#I>|xVB_!Cj_WkPY0YnCk|y^Gl4!|vT7{Os6ZY}=VNIcRj}6Ln)+JlE z`AcbNT&9RQ?f;jVe<>d)LJTRpM;zOuc{Je-5}g_=U8Xx3URuz~z%COc6=-(=9g)m@ zwk}lR-g@;|Ujlr(%O~PPzZA8QLt75{9K68OU01JlO(W2dn=PauVw~_Z&KUc0XG9_h zW>P}utXFT)FPzn3R$p=w&Xv}S+Sc@^frhBJzCT%DdMVa9td7fanQt}34Mt!UbH!iT zD!(dI7y!vN)*0YwC9097i%d8WN654W+egY15AB=qpnP&bIQ2}A&ZFMXUzW*guTGJg zQ1q+Ra6tM$o)TNh9(A+W9tpk@aL=CT2w6Kw+rk6T&&LhuXZF|R3BqwE-~1n)kf=7? z28Sv0ix}~^k&OIQD<^VCzyxv)`~~G=2~?v`K+}!j_P~Jz4@3ROts^{H(YLZ0MDsmf zF|BMR+L{NY-K_e{gY@3)B%=F4X9sDvI0FSy^ZsI!?H$wO<^D121 z8$}eTFFUN^2_S}kP}82j=7=xx-y3c;AEPP*{e+Ez@(cGRAU)DZu}LnkRmD$)sA89G zq%_8XZzL%5;pi`ThP}I+ZmB?^qsH6WeA6STAq=$SzhOSH8R|e*0-K}Nk$VLlv(#y* z4hA4}%avWY6+)_dtS17^L zVpef+NV>;|Pf3ng(Ot8BQn412eFFlp6;bWCi9cUMYA)Cfvp=4&Z>8s~Pj;4w1-%)CQ;3)6~1(Wnp>(#Bf0tK z(#b?#RRj34=43tkPuRI0pmZe9x}CQZtq1iDi?<$%4Ug~7!w3*FvQ zUK=OENR1}4+Hkn6ll1@$g$`hOWE7^#0kz5l(=C8V$Df3n#Y4NwaSK31_^;BkL2|lv zJSHY;I>fbf7WLgG{|B2_bB+DevkT(&qcg^p*WBPqjasPGxPWj*NIU|Ph_Ersh^7gK zA&vao%fLOe8UBWC8QkZS?dof;YqXZrfb^i>_ZHOZ_s!bkmvn)3xHuq&?(nSOEk4Bz%`WZ| zQa7@U7(x(ncMc*&yYFpL5di~-Vd6T45x^l0I(aKbH$$0bHN zwwp|3%Duhx_V_)Q!+z&yy&BQAlh@1zir7-jLc!QZDYCNm>FiAz&vsuh(5wcnrvy`@jr zvlD^N;@LAtrRt9WLy*8o5-5L{8LJ?b4!xS7n$i(*PKdkyW^{(?mR)~4{_;xHp`-lw z`IMCVrhZYOK^i2o(d<&8&qm@%CGh$}H*E3NUP9scrctRfR*pFgCn+UcQ7~v|qlwBW zwrPAp3{%h4y?%Pud+zbcc!o7+7R>7dMxieBp*5~-`*r%U@?iHH)(yO8Qe#ZE6l%d0 zyshg^%h{=r2~%iJP#)r*h-wNwxSJ|B8TWhU>(ym7bV}dR=QC(PUE@(pOImsqZ1~Co zzSt6;1%?X#ABb&eSv!dR1^P0d!U?1Mbp7HaN+-V^A!Kh|pb9K`1x*T81&#-KZOl1g z2&f;)_-5YR=pqgSM`Dv=FW%1hj9eP}Klrmo0+Ye#XxP?jz)C=-@pCvt>)m^mCly1C zk9TP*ldoJDTu5>$_v8eVc9O-~rSl)FE{n1;YZ*sXb5o8Y5&Do7Eyl5^piO(xcR8;c zlzgvVS(~ZcsS;d-R&U@}BR>y-mXn-s#5Ok#pq@#8CA8QQUnsS7)>*RXx2vd&?i5@h zO5Zj!$H$2aq;Q=N6H0pMLS=F8yG+6Z<%q{C#?yr5gZcIOXcz*f{u{%feSNRh7CJYy z4gqr{6M&4M$KFV9B2+=3#XZMFOr-tD2PIJ?lKm^b+K57Pt2F>CKpk0*Dgo-o0{wJ3 zqea%ZhqMpmk-8CMij3MT*y1bN5$WW695|&<*yCUBXhr28lG;-el>!v%)X>n?3e&Yx z)FFqepZnaXO(11wlam5aBUDuBjBdx*o9TqmRjK^SiNd^@B(8q?A0-2fT%t)SWU04F zAdnbeqWsUFn$LZZHjt{SEH-1`|Mlkf*$>?P?~n~&1u;<>?eQi2;+Apc^ zQ3IEKOd66^$+c2X?qkuI5-lfp6Gt^*zfz{IK)AY$AQlD!ETRXi-cDl72W6u$_4xlk|7&uh?KlViGn?JO0N=3Mgyh|`)>DRF|9FDtW?4E#dUZaYNKAei_S7og~UPs!)Lb1MgqcF$Gw!6uN)Xg{t_!O+e;TBy7yKaSW4czgE z;5{PV$%lq3bJ&Rsp1*XUOCF*3* zhH4VIiPGJhf*phrHR2sny3N}+vkW7bVm-|?2cB)N^n$(Vn$t;@BrGF))di{qg>=rxcjj#Z_kWZuP7C zSm}bTUAfsj6a1MA)On?K1xj7?ifq_b%N!qxhBdEx`ftjpGGM%V?Dng1KD2#xb^}>Z z-{QF@slqAdG;ELx1$>_t@2P*;6)4NCk#154>_mhgb&y)0wt+6xa0isas)p z4=Pkd*Tn1Qn_@qjbpX+B6}mN|zbrxZ16E=XF;80pE?k7AJ~IEZiG4H348@HU zg#8nh60)>Z!qy%4rR*1A8O}I)9y{yWb?3?s2QmYs>FQPnZ83vBxmdcXl?Py+ZMaEz z1{Z-dY9@=zv|Aq8+#e418vW%awio@I*4DvLhe+m%@sYuf@^0H6oK`)xEJ z#ieRRV!YpY0&hxp3$Lo;1U&xFZKuB-OEUUe{9ts(1GfIxEa!`#jcBG%DN%zlOqKCV zP}&!o)=8*0+iGZEc_#bePbOgV3O*NGU+y=X^(K^LLVM{2h2)#rLH8#dlQJ?@)6)PV zcsY%T`^)qvA@qKo5Z3!`pO#vDx9oB%?f>q#70~j?)P8|0YQ2@x*~Qu zH7GgW{C~`3F%ZGMv|(~=6Cl-HcurId*Wl^T2{=~nxZ2~?=cDaMX<4453DX^PJ^%7w zwULL}HC6+!H=o+Lmm?GeKgPYkaE3zr%pjq=eli9cOeO~Ue;D*N;0JuGAZBA;r;^uP z(omDVQH>KWnAw|u6fO(Iles7A&Rtv9R#8->!74Iwdxr{S@CcTA>F?SnOQs*e!+2YT z;=LdMJAGkQa7VW5R;LBSO^jTYZX5d7e�KPe$_>dk_7@f=D`B=_oYvz}MWft!A( zWBrx1C^4F91WaN{RKn zs|0ZdL}tXSEI{^kt2Bknc4w907ElOd&Hg`QVXF`(X2E9RuUwyapyD3DPV)>N?_0s$eL`y7>-z}Rwlp~zPo z6>6nT?t0UE|Li2hgvG68#jl!bYi03!$hQXQY~)k;b=ybcsmZ>NS6l2Iv@*&KkN6JT&*0QRY6V(^fz8Bp-02H^6>p8i(>MH2lb zk7kquz+hTC<%}*`PH0Uis(fVb*H>Veb6g}p(yJyGobtu+kL^Cxj8+^hfm?(;(3&U# zyY+205};i*1QB?%%)mmqQu1a`Fm{b%%?GxgE**zt1X#jZEms;O>aiiFZgQ;~$w@#g ztv3>?diH1p&+7OFc5pz)>88h05|?1)A!nKBCkv&D2Jb6%h%pV#^zys!`xD|SfCW|pZ_Vl%o=!eNrw*+hb^!eR0D&H`=Nw{+S%_S-C zpTBCv7zUUcmzj_l-SS9M?If_%r4f92__*cbBMs;Ve8WSSksTD7&GuR{(+NLci9n)5 zVoEo@a)a0mB@fBSOeeNPM{{%LMzTyzNpD640QOP!Vk22-!}TRZ0d* z{*D1p48JTI&Va?coyIkPZlkOE1pzLf!%(ry@fVx!E4+3Q=C3gIN^!}0tT4|Pwa2ej zKD793R^zTR^YiJ9VV9J7SXUg=U4yII!2VOm@FXs(2^ZYm+W-3gXZM>KILZMma#amw~{*dfC9b0`ehRB8efTxpp9bpa)yyND*2;QIOQ;lN6Eq)ny zBtIiakQ^P_HFbP$Dk#dE?E!6w^Tar2`6GvdPOWVd(f1Tp9KT`bd^!14G3WZIP&=kp zIEB$fMG7T~qjjBAnelt{ssIWGoGk%!Ci8XETUsfXLFmC8b&fB{#=l7ESHbfJU_GednMNrL|M*;URC1rQMB5DtmEL>@md^! zQ(J^KYm~rp9JtRX{!+YLZA3lQ@Dq%V+R9p;k1<{RcjEw>y>W_J1AnN zWE35D{!Jy&KO+}{vBQv`{jvFBLP^?S)?JiQ@Q0f;*fS_<8z7|kdq7R-Z4^#UH(Qrf z-p&N-U5F}zk)X^bHH(3#UXl2E?5^yAToHoW<;}QIh;;b9ivjpRcz%^LX;+MHu5Q4u z{C{2ji5%IB{u*|a3g-g7a4D^@DgkLj*UVTrjfVm!%QDJJ^s!eo#Gjha}bbG z1_U3<3JEwLo|{)Koni!oI7GdsoA38xL>%(4Ip*L2FQL4Y0zZGHld=%^VGN^-AO z>c)F&R$V*2J5*c|2Q-)UuGvkSn4~W)+jbdIU2 z&F|9~9(3GAH#q89;qde&;D3u^II#zqXAJ-oZ7b!Bx{0O5n(}1)1KypGF^1M|>MGJ` zIdM>NQP(#TKX|^m7X!$uvpLCRK!t>h41%NCbL4!+j58@g&czbsAkfosBfr1xzeT4p zG^97=(RU5TLO$;okSD_{qxDkNH$3nPJqgs22#q;Utvp93y_Zgse{=@L!T4&hnJXtl z=NG`~_O_7M<4X_$z_+P)h&Oa4!EO>R*dMRKt%kGiH$a*#P^PMGatDC01z4R{;W>Gc zVFoZ7|2fj=3RT;*eN5JN0 zp`|bE3t)KZIgj2g3$u%SIWz5wNyQ&xr&M|`$K5tkN${%RgI=-s45rKxDk1dNf4T|; z4fl$*24C=zd_-zgDsfE`Uf^5<>oGQp87u8gWe?hNUJ@-~u3>OH;)VoCiOl4xK24Sy zS$?iBD1NobVqXtIM0hmXeJz`s+V&rOjO}iSERd2o#q*ZSEY(O^L(k$+9pX3^ZF=&x zXjcuL0Jxnu?&t^IUFWQG1>l>v$F&7Q_Tp_zuI9%<{}Np0)P><`dK=37xx!i*;Pejc zf$?PW;N23FY0qpAb<*85E{%l1B>Ek0XteynLo|nGtiWTji`5Cryp$;}i3A(+`yH6I za=Z&HAnl2~V9gZ$pdE(^toLzx=g8L@0k^bVr40Lt#3GY*OLOZL=(iIkav{W~&7_>` z+!mX08c(ookrE9CibwLk7s;iY-2+yY2b>wy68&%)&w!4SeI9>9LX7=NK%tZUP=LJ*zMf%l+~iFc}uPERb*W zymg~3C0cA6M9}wmDKb=($Cw>Pme?1R`o5GqU#|;VCj0G9#bojclJW%oxpkppFG(AJ z99e?IKK*4TcHV+J3E?yWz30ypF9OkaNkKLZx}_#}wsbv2#4Q+2FY@CW!%9yZC`rX| zdbUpg@1-VipxUXp3F>hWmJC}MHN0m9<{)kc z!pCV+_Bz^DtOfzwJ&`xJ6YIi73TME~Rr1E?#(YpN?FXVeYoakLkOXt$#to=G+vzU+ z@k_28aj)YVS)=&~Cun9F46iQGuqMS@(Kv#&jV`;SCx4>PKBG_bXL#-+O;9bXtvll>5> zdVG)W@y85vqy|?0$v|-mbBQMnG!Js;QTSP%oaVjxPp)0h(T5o<{6QCoiypivID`>t zE(Wb_b1e8F8{#PyXeCjdR?1|4BW1hCi%*>%M+Z1_#q4rggx;W%z&w zUXt;m>r*#{u(;_Cbc#Ma1I7iT8&TfvY`>kycE=f3*>^HlX}{|VXF z%WvhhzE@TY4aIRHFu83p+>j&Lxs6zA&Q^L#n0R2iA&wWp^+;WQpsGHGSGbJw1iV%& zQ3TN>b|Vy90)3cH%R{UUbIx~+`}UWR)$V_Iu;TUrLtj`6=v8(m7YaUiL;D#- z+HR+wo+eO9zcY6L`I%~XC;;ZN4gtz6f{Z$6e=WFf%Gt%00x{Vi&-V{8^I1M6g1M76 z4E7|_8~0u`qnj6*K4#LF&eCQj81 zw<(fVnWTehknep?;^#@d3%py}R-7MxF=_pDePLfESdzFZekQ_8UIpZbX8#uP8g+R^ zBx7KOIk1%6zapTDbY38%^@*FXv2niaN^`SU=#eWXmq6=&ufn0wO@Px^5;iO?3?H|V zuB7uDt8(QPQa(4$IT@b4X3QEtUH%BUyZip&gc0~H@tPw!vOm^&u(xG8ae4l9!N}A1 z9(Sw&mqZNlbD_jLg34;JyWXI^Q3DZ$uZ$Jiu|*E^;rMFwCseJe846*-!TxC>yd8&Q zER4tS%3c0ly<%T9Z9};$?e?d^*E6gm57gquKkn4+jn8mC{yz)%Yetk_*K3sn?%YC5 zzYK2ln&8F+2nu%Zd}kM3xKBMc#{q6a`J}I|Ig{OEyzN;8V#vG{ThT-gW+DwZAIGS7hhtY{geG{Y*Q|@5E7|qZ4G0!8 znMH$+5m*UwbS@(ur+8FGr2|r{y+7$w~Tlo3(-Lm?;ZOtFFO zm)0%1aqbI+G%F`#y$S5(21aF&my+*ul&~=B!DQWo_Z_a_PTod=*c$CQS;$>md%(S_ zp<_x5yzmZBIkRr{5V)k@m7n1N{d)agzD=1YLlJbzVH*5EX~?be55RCm^(-z#Le!?p z4*H2hVaX?7Ym-X3tXlECRs-f-eB3O)s#V`aCWOZ|OWOqkPzjZHv&XRYtOzF%lt=-< ziO=%m=#`8yK`1OYIOUx?M}K-(5^VoAA&8$-6^dUw8;!gcpD8UX-Rys((Z$SQatM#% zLd>Yk>qXO?Z-s1)M|axGc&?q#K5I7qAt)N#W$y$yEp1Qe?M=Z-V;N8{f2G)1Io!I5 z2$`=EVUd<{bO3HF*9d^5<&A19vDHE7nNIkAC7#+0Rz9bbF;!Y&({KY+E^u}eksuv` zo1TV<#vd{;#x4NEELpP_Ro`d$a+bs*dSJKYX>|K>(IPc`=itXok!OfR7|$;m&K}1X zekq!L`7EYt=ghT!R`w-^7E!Kc_cCL)wZ(Uow=3%w_T*!ZvI%tKhx(!$*rkbx)sD4I zNZJ`KjV?DYgu(OvM_rst5s|f(#!CKFm!zGO>l*i(gv&`KajxE2uZ0fQuhXjqr*F+Rs{2Xsf{&R{HKcb_VO8UxC{ zW}FW|*YuzLc&-3t#4B}23$T%)#>3Uu+j7Mo2#k9&q7Dj)WNE_)r9kam2{!?v^lKXfJjb#}AI6v=+LLzSTX z(wS}YodLhV?Rf`*9xO=TommZx81xBvu7vfQ5V=kB9=egJg&>%tSB`9DggFLO)oFJ4 z_yC$1&wAz>64q-P=V&C(n$Mf8bYx+-0}4K9?PnZh&A|dBpatW9OeZs2&?N`|X(11( zktBuyVe5YsHp6$uOpo0o0dGk&0gcc4#mRPI65~1~pF!8@1WIp^QA5~2ct{Fe!kAUki}2I!y$3iutJE z`eLjDg$BFw50nAzgOiWr0Lw1)!Y~Q16poGu0rM<%a>I;tUh=H_{V3#SHnK!!ke5P! zR%bCKpwF2=mkuRPYa+=G&YZ9yqlbnvNhf6HQCAeIJZRRge6Mpa5Kwvr1_(q_(j3M% z_1$j*@&#WypQKVwEB`w)9R?L<2^OylDpSc>Es-fSJ)QT(Qrnqvvkof&9GGUJIY6wuJ=da$Bhz zdyG!?)4}nYp3FXH2|vDc_gkiC!pNX_dQit?Mm}`{PfkUWhU$$@)L2-URcP**^w%J$ ztykDY$;Yp??lk8jNa(eiZK}oJu1;n|rxBXX)&abh48EO@=cfu~1Tfv8ULUODd%7k) z3gtWoXfWK)m7tleN4Q5vzIl*hEiP^O0pJsP6ALtG)R&0g#W8 z(U$@gneX`BMuf1BpTtyxw;}k)pzuSO0*4_W@m;P&wSi@!T~Ocl1yOj5g!m1eyhTL4 zNR*fn3X6;5LOA=K`qHyMqw)ha%yGS2oMRTOIXP zFbGL(;R3A|q>QW-8@-S$*%)n@4CH(B|5?eDF7Y=ie!1a{7M>4M18e(Q66-mSwVW4Q zLuKrbCO{8OF68Uq8ehL5?{?_mMGgu2Qx(vxqQ)U^5zp@6=N#IjT?38F?)t-TsF--x zEy>6ww~$O?>~8jj%cV+WX&`{It!oo(xvl)aE5oY297qfGNB#CAuT=Pe7A^!T-q*lc za-~g@!om5FO=PEU;pO~w&KLU6`QBGYid8^OCWot|);>LO)+EXjZfGPZ@-j@5mjYwb z5(@CGF9PD4j;^jkk+j0QfdrYh^ALP$fIV-<>C^g&q!nk2=O%}-TzVeVfz#q8uY^(< z>ckv|qgWYitEC(?7z6|JJmifP#NX&Ni&FfzZLwrLo?J)>I@i55Lb=pErUkK9H@)e9 ztl_{XBh{%4P<34*JY(J%zp1t8SPzY$PUccAVcpK{kou?B<9k|w&burcGON|up-fu0EhhuuQ+eC>JaSzDV? z9+E1|^G_z*NVHlJ288eYb*skNKCTwuh_EI-sJmeHnOgEGGgzgZXvoYs?ipXHc3qS5 zm_*DT>eX~9>uv*(a9;5kQmA*_0LqfZu=ksy4Xva{`7}Q$YX-tN1-@QlKhH2OQNom7 zZ8{cySk)A(H@`Fn=<`I#hM8?LZZlQ47XzOLSBhhEx3~s_o4;*X)91}l|HM$hkp?t^tTsLawo9*F)P~T z8|W8S#s~U@QR`6GkyD*oX!s#oMkAtUSrqoo2(@M8K5~!QF@3?#UEcY6iu$_E#rL20 z?!c^6q{|_WkgsQijynyCx2jrZ$vH_Hlyi~?S9{fm8p-pYmTYj9WrkI*&Q2-?Nh1%2<*313-8g&Wbzipdh(WdtU~Ti%3aP93kHTF`lmBn6LiHJo z!w>nN=d9pZ2Dp$C@j*fz3+&i|b)m2q0WddF8QP0_#~Y!S<6jNO8DXy0y*BWsUYiq_ z2}!+Br?KqEwW=aV`>L;5zU{!+KOzq*$mu(A$|65BJ-O)Yi|LAVuD1mqhr#ErGl$XA z?JCwLHgsXYSD-<*>b87^{6C#yZ~;sNZn;&mFsREFlHsrpvRH>LmisxqXT_}zH?Ngt z+GX+Y#;%mludEIYjnTrzU-m-+P_osBYHPK#zXYy!r-58(((s&1(+@|D8-df)+Mf8CYN12{jnF=X(@|HgLZ$d|&E|c8S+!T>D!?%-{n7hbv zaZ+)wz1n+nB(%&kR7S~zj`=?qv5?cy~(z7#n>d%HW*HJnAD^J)3ORgn=n ztW)DLSBz;0!;7yloMheN?A(mET6rJMX90p}{25m%itDvX(OSlfxEPB7jvKrejh}80 z3k-8hEnyJdZ9T|TBl1>$iXUjK=36CXHk0}6yU=nQTDeKkPzxE)RRhQR>Y9ZceLmLV7Nei=U2`~(#a>6?*fH1{De0?CU=Q>%H-3Z->i_vbrw&0WeF$* zuq6h&En_rAS5fDT`8ax8fkb>0;bpPN)bHVs&8U%_mW-H8jHbS{Ad7F!8g*g%y}|IQ zH2DbKeP<*9;I+&O@_w!4g=jAH_y6L2=gWCc*rJd-%0xsIc-#`GftcDlTBW}2ziZ9; zx^rLUVY^tya2@CLI42u^u*3`vb+^z=)Fx5xJ=Zkp8 z=?giL?>jd8(FxH%K22c)6|Z5Iqx)B2;SLL&E@O#>V14; zTyXm+u7Gd^d9n(i{R4mkxSohJ4=~}~s|VGKD#h9}j(iyz#T9F)*zR`iyO0C08SE#{ zFCwMlrY_cVvM(;T?Rv6F9v;#K(dz<_IPg&kn=b>E5bv7`xe_hjBrM=iJf1KuS@Hgk zLg?)z)eW=^)ggckrwsX4>bTk?nr*e-kiW=@hRsz4HX9`9j(d9v&XP4>nb$T3S1}i5 z9M^y)jmoy+lqD*i1fT>+?Dm4Kv3LR=Ab0*H?D+CZ+6q%SzpfYHZ{YjVVDA$i>X5Qn z2V@?vqYl5x{VIN=i*O4MaI!GiMY6ow9CbKW)$wjhqgm6ylbI8V)j<5h(({BMo6$r8 z*KD`GKU(8~+CV4q#iMD$d&s@MQ7Yv-Cxj(wDLP!wj5oM`sk*u^vh)6Ft)VaF%NiE> ztxEfW)hx%JYl{BMm0^y<`4tJkpmL^SG=BqT-SF5B21YV&=bc`}w)e#HHjG1MXWVz* z-D^{kY*_=M!}IW3ceink1!${nv`}kK@xaEo66%Z^cdqUUPxoYqy}Fg~tCoV?bB?*_ zEc~(?)UP){E&!*o?<+s_NLXo-ff}%a2kzmaeY%kgic}hKN*Mw5^%U+;?cwGUw)h9* znJq2L^;Z7xPIU5NEIz;tr z#@0tS`<+>Y(nz59i3R%uS11_-*Zf0&gliGIl(^burD@q(KcJ+}ODcsdNM(@N<-8Ub_PcbKwpTHdGAy|?u|F>=RYb!?! zrPZ$1F`MqO8dK!01%QDqvz}0@Ip5Mg47~}7=2t?py@VwFO+P;_Wf%x<-Z_b@a+fq* zSHkd0wo1|^I99#*%zF$w$a>Q{eLZ^pAMbQ72Zv7hFPU84;6OCj(34VL{n~Q1sUx`Z zhXdes67RY3yi>zynQSc>%}_ELD%}++i8n3h&*sMmzxw) zZ_;~%V{jhM4#)2<$o zRk}{iNK2h4{I+0~1J<2@5u$_BhXnt_ik-P=LBIk7v`===;z-WVB=i=9;zK(Mo=8hT zU<~=dbtIbuGWF#f6G@7eu3e!Et^zNMmXtz% zUy(1Gh+;yrk74LgV!K^_%W9sOSA*I3Cc_Uq!#MZpK5?EcXAvHs60Ii90)d9I)Fi|A z6&Q=P4x3`({A`+yL6bL)GI4YAwQ|i=@l;dMyP_B%2#c$z6#*^1KHzNu0r2~2b$GsP z&tWt^=i3aeA!AQuo!5}O>5irfmGB!0Rz%+~8~$WkMl;$#JRG!9t2UB>Q7dL!=OE|j zT~09BYF_Pa$pAS(#=kpG;JQ&EV|{&|Mk#dtnyk{-XH#A*dys;AEk=qA!FGQ zS`#hI12UM~W93BAxVH}7vKMJ<j6es%-fsa@zl*Dn=m~WLk zIPiUeMkybR%pyQNxg!~up55rZXDb4<7CBGS>O1>txF477fH4?1&W4{~RvZnYyd|5t zM(mdp|E!G$W=ft5Ao0y2n4}S*7zJ||H;<101IaAW0Znzcopt3Z?CiB>L6CB~JJvI` z3K-jMlNX^pl{0_)@h*Toi~@h?wbQAb%Jq(!q>L$CyFA}M(RbOP1rRE`O8&RhQCa_S z`)PBcg5SAQY{#=!KGbcG91OFoZMco17Xjp;=_M>Dw-R|joTdzYwNUNfwQv~ADd)xC zI24{>su%-&aaY4lz%?kOlP9P>w>?4X_XZ(a8-9U`5RSsXd3NBwgA2TG(q_{rXIf70 zeTwU_&=|BlE`*?JFkQ~un+g2lyFR|xirf7>d~Y4bDkCe&%3**B{f)R+q*ntl5A}%F zaBoMU{BV0xB*odsvJ-T!phNed-Ii1)S4KFm8BNl30E0Vbm7iu8z2|&Yw5gNz<%&Y_ zq%P!tS5-pl*YU@yQ40q}xlFKI;(ce&28f?yts&pIBcO~8{W1a;y#_o}v|`OSZ1tx! z<5+PGVnpLwqA!{~+H7jvLP2C_1K1ES1Zpkx#`wechA6bYc2lv5>bxbpUk7q@p4~Y; zXRUV$1ECx{i1iXXEQ!@jm@SiA^Z-waMXwmRA?-M+;|5M0#{ghdnSSq63|)6 zRRAfv5|yVxWj`9_s7phgeC{1t2fHjBg2k?$>Q^OEk;H!9(23j{OgaZ#L@af?0s-h~ zXv7BaWLCRmk7^acr*2@qJ*8 z{-6DT*rQvEGi;-+J8R<6e7ulRR+3|XwYIiexmP8Fv5t3o$s4UmRH>^3Pz3A6FPDEC zYHLIWSOSUz0C0>c!r`lI#0QF%C~YCXb%K5dZ9T%O1NGj3AknpF>t??h5ssjCzEPv2 zldmI3@cIJ!rKY6lIp_C@UA2eFA79;V&Kec{PyOup%%31R#Gg@u(t@q(#iS;kA!{g0 zM=#Etwi&r1)Fimp$3&fLcnAlc%!co57x}TY?ayU(zU#AEvISQ%-7v*&G~VWm9*{D{ zHJhg?cVBAvppWTTgh2VWreC%sp?w%SRba^={h-7`n0i^kK#TK@juNCuo;gYYIUIfv z|J-c_sd^u+*JD~iU=pwzgiNpu7eM@6y9RhZ+U}=KH5msJFQwQ5w2>xlx1o~6fZB6p zhA5;gIPT&c2fetD-|tcsMlPgBC9-GYxe)B__O6;{YL-BmF(Xeuw#Plo^aMFF!%2Lm zP z`>XM|X{=K0sRM}$nRVOtc5#*E9xXZI(2tDD7?}!9Jhf69`{8ZPBU^NVS#{*|sIGe% zcf*^QE>^Iv5!{+~Dw|fm`e2J^4ll6XzvQ{q@Wr@$>GEe^Bv90{G06bAs@#Ws^XQ?1 z&qbLv@^IRH(Cwk;N0soew5|?8(nJ)SQ3R9~`l&Xnb${{-v_~sL`dfDT`haioSO{t6 zm*M^nkpJnPfH05Zkd(bl`rwU%#kjn4b0Y&}lP6{lx!6&fiy;QNnKkTOz|ub4{rPmG zK9CMKOgSp#)%piphbm3 z^SXnr*8m3hpW@1}9Bl_N7d>u(lMsP8t}ejCVd5gB9rs9csPr_KpUm?D+#hFuIJ%Si zzp>_5^YbtJ=n~_%s>(}S*L#MT!^S2y+R)nmFj}*iVh4N=4vtP}*-G*PYsN8sa@qM( zr8o5vLuE~&@j(R8E2ac4I%aW!>RJ-O>`e5nG)pEHY)@!A(8R)OyXuoyrcXoU!>!H1 zI$EIuGAbsY0Et#|8}p5B^tLnU--8c*5c59lvqC?M5$<_wIwlH=LiQ32FJoaMnngywxgyQl!g z8N$T~gs5$VylH-7_1KFguB}SMB^46sU&}XgF}%byaw$4o(A8{NqU?TG8NFP>_H3aA z-;8aCLoE5XZ-F>t*d$%PmSB_>cyHCoW#F zExmB$87N>xQke^8MaIhvDn~1Q8N!OI@*v~97QcEH5nZ`l0i=@wW15i zUj_3M-%1LPk|=;nejDHD+ZVfHA7Tv`vX5i}EfF)BA@9zZWU|xYl_}ulg@P*BsdxRi zaQq9K98q=M!Qz)@z!`T_Eo3f%QCccs3wLH7Q^EzfGFgif&dgeijBc+^F~R3f-0ozD z_ZNyvWK3f@I39k9-@R@jCa0)$nfz6wwq;6EERaXwa@%8*ViVe^8NPjJ2lEv^+!y+- zrHA-4NmZY?Inx#lS)*D1h|0bmG&u8~KUBB914QkfS4ddP3JXUW;eTw313Tiu>jK#$U?CQ{QFhTQQ;?w^nrT15{4V0Vgar@4vVqU*qVZg2>>`dGB z0>|_sOV|sfdH5V#D|ssr2`JkXR*1);V#`SsQQ@|k!bJ`0lVxQkOxFm$5HNfbzJFWPfk5=A!8KA zx$IA5sd9n7iy_-sztaUY&$`y7xB3#I+!;=^i*#;MMy~$s_q0*KMC$|=Wp6)aq`LsuLcJP2eU|xORO}VTr>@<`pl1r>NJ~HSqEzeysHh1m z5*4n^jik4@h=n*8n;d^`ablrNQ+~z~z7=}iBK9wb=%Wi%AHJZ6haY(%rIhgvcjl1_ zJc-GEp$vpsY~t=CLWpL?>>r}6h@?3q4p^^ungPNZ`G6&z; zJf}eydSjh#1mo>q3N~vwmV5anDN;m1gyrlBp?hj|! zo^@5ABFGpI4b@ilOZuA#v*qdhKN>M)2;QNkLSNqi=65ajPWQeP!kKcmW7kQ(Dx^W< zh?EpG`tc?}zLFdc$KIsM6=uraE)0w5;5wr*3#l!{WlD-rYZqC69f-j#VnY>8nVY1ARgcq?L5BcLftct$SI9Qp3>z2-) z8~ zzK}yr>tbNnTS9y=Y(gXK@&o1Zv>6d>v!p4bTFvgk8Z zc-UD93YE4kH$<;l90sjlXXDlEMj7L@8(R`E=~%1a0%Ik>#{TW|h(duPPxg&QaHTuvAmQ631Ewb zDNJW+C|(E606b7~hHO^3we+p?k0V@NtwurJ2WB5C87P7LSZGD5y3$2jT0TDt^(Lu? z4dUE14a+mIU)m>hV%V+Sql6f1&=mSNN478jCevWHo&$jK8d~sHLs?}WhNgf|LNg=y zA4nKhGY1L#MR4^(Oc7qP9#az_TY2yq)0u`=C~U$R3C)}X1iP7?y5lp zRu>$qyWR+Bo2vgBoxc=|t$6N%)GzorgkZ3Oo%grCqU~emVL2Fd0J>$} zeMdx{o`}b!_axN%m#c+xigcI_+4EE4bBMV?y^X9WZTs%}$oz>BS}62xM0ttA-fIp5 z`t2c!6tP3YADk*2ksKVSUZT*oVFt_@VikLTuJrCDQ#NDS-jeU{)9AIYbE)9EQMrx+ zZT{V}2dOJZq+wW|a+sGSIvFn>BKCoHGq-HM^EC-PEI_hkDjeHQO0D-amU09>qDMe6 z8T!D$0l5}=!71q7y6WrdN;VDHHyEo`YzD0+H4DV3A{kn|Bg1Gw;itsYM^q4N7u`? z>q2Pn?&fDm4$*?0fRL5X8{6LCvkcjF!bhZYZfL!-GmUWE;OzpJYE{r7A0jZ&B%IQ< z@;0k&Lt%gkCnrk}P86|4!ROQ(=bllx3>#zT8!7;iNcJvZ9Y*&1Q21lu7<+y2sN!g7 zz?jx(hdmu3gC=6){pIBa2T=935bmes9i{K@Jui~nd#wnXd~=b|->46SEvFbI4~zlM zSI#KT#pqvifmMx}K3_-5jv)|G36EemotBn&(n3!GK<0Nm6-4nVT)@%j4_6N)SMv0X zz3zhu?iNxpx0=Z}qg3p8XJe)XN1u;;xy-TMcKrX$Pq^;!hLO^ku1h#k(~4(4)^t2C z=SVVVhI1?`sg-zLzSV*_NOX5x7uLCs(D#s)iUgZPB;wS=i=(JS{K<%I!0Xq(plu{H_$<=b~ty$L8Ph1PLtg088 z{2M)4%$daC*gTJj7eAb(1)+0fOhgS}^9wFhbtyetErrPFIp?d5}! z#e>SkBbK?elCBvCkfqSWTiMMq{k@v{w=e5VH1yogtIjH1^y*i_PhX6eHRO^5u#wth zi-)Ey!|9m9Z{Ye$#XYZaS(1B_FoHmFfgtL~azH2Sa{Cxa3}1qd7TTMY>R70|63_F^#oD_I_(wGaCFpNudcVnKgwIm8OKS`H}6^&=!_P!707F|9CiUfdLZ0orPG6 z85J14YQW?q)djB(ZM>sfLU*gr$!U$&S1cVBe*=uuQ|JoxZb+KzRk53F>qfEa*C*_S zbCHa_RRB?J;4JX9KqCQp%YEAs%kWyR*!+>tj~3(fd!d1Y()?K)X9t@ngYKEPr0V9b z!fDXg!Q;RL2D=~vIiIAl?x@U1%}mn4;bEe}&%|st^%eE_9wQzaHVf9nhv13YJ}kgw zyQ^9cY5K>wH{g%En7tuvEf)MXXWR>BHC$SmeHc)i80}S}k&Tfk97jmQaj)(h+IQ4b zDs*R`*Qi|MDo*X{7rbm3W$^rL)XT{w#ywVPQXO8Os-|>OO{CN$YTle15wiCHIpWl2 zpGI)tD?N(w!zz82??#d-D+G}H-+-oIak|eZe6U22U-l%OziA-$uNCZto2Ga9rx8ZG-fMvrOg--T%)B5F{ z3}ywl2ytFU@UZd?JY3uh#<~b8D5}6pZyenX6hV?rz|D@pqdt(>X>85!f4 z&m>T1eTvL@oiQ$RC=J?=Gt)eVDfLr6iH@ta$En7)rG@_Rk>^kIHVP-dMq0Qn#VZfW zZo+`J;w?rbSZ1mDs%jQdaLM^-63O+iI=FJS@+FOU`jVBLO7v}nyhGTZnJbs6MlCCg zYzD0dZ1$O&bs+6hkxnF6v~Pq5LV+_v2SU*XnB!{DSs<}Tdw@(Y=sKZ7m{j)muIUKz z27x5g*OWOXNZ1(&!RUEH!IEq0t4S{`o4*WBh0K|5LfL(Zcvgpo(Eynrn&-M$>F=kf z9;b$)FgNNvs?FjsU!@O`D#`ckbeh?3`EwLR0OK=Il-79*{X0D39!xHlGm|Icn#2b~ z&}iDz1*9RQ&%78{8*WB+^z=pcSNV+l4FbX*Dtr^PZtFjolLpQv#5D$&ds%;>!cOn& z>h_)kRg+Ff|2}$XKKc#6PMtz{R>Zr}MnKz!Og4OeE)qGM)E%Xu_O(W7&Rd@)WfABH zKV}w;ZT=A~Cvx`FOtM;cucVs{7Gh{M{F9AT~ zb?DZA*OL8W5pt?edm1|I!Q#W7Y27lmlEx+NHooC4)5gr+wNaV7RU zwR7PlxO+VS%!iv&YTw75&K3_5WuJ=k0znxK{HqQ^shVa6yibEpu-7>8E-fF!m=sC$ z0v0K@nQ6NUnE^gLsCw97L_U*v;RyUC#a=G^I~f7m3wFVMGigJ`afTa=0367827)&~ZNM`f5TONhilLv(#n~k&Q9_CpYh^%|fxAjq7BpDzc z2g|~tMR!EaWA|8-3cFoqiJvO!3Z}a}WsC&KJ}%>IDqIFFSmjZd+R=L&u1j3Q)Ug^M zi%s68gI!Wa^-42BA8=ba-=g$8g1W*n$1@)6QL?3_o^bT58Y=H~@|hxF+i}&FZw%|0ZD9~!KzIvs?}d2yUY1{kf;#Xw zt6edudAz?*T=4A+!tQ4|y30rgT<|N|s{~4zfb79FxPZZ>CCmEw$LjSL^!jsr4JSLs zWQK^goPKvlW)K%Qs+uqu;pvg?l2dM}AokHKerURiwoavFH1h|9W_%q6v*8_Br208R z`v8SbC*z31&XZQo~r6w$a-TO z0U4`v`R{hm9>n+qDXm&iV=V#2D7b@ix*(GTfEYMaoRed^dOwzTre2Gw8S2VJ@9dJ6 zV^t$>kLxx761Xoi)>b0Kpz9a@fIFX*5(kRp_3x%R|JczdZlLQlTN|`nQ0V|@!M?48{G$`N*J8@a_ja9OW z4t69>Ih}b8tPFc$?AJFMG&t5|4q2!lSFAxx0R}mX8H-&a!xl8=s%Q@2dwo=@Jd>?& zjDx?}`Q=x8*p-i@g^{|EC>u+;_JbHLT*=hKJyJPxJv5FleXm}UqSa2KL$%hf^+I%t z!fNjLF51*hW2$NKDkF%D(rxJDTCOX%zU7GbOm?8!rzK5C5w9e$(m-w{s|V=0Xx69S zrQR~nxQG`c#*LGwAG|xX_-smL1QFe1!hYbgmD^v&Jt4wva zLn^4|8v@|2FeZ1N)cRG)--T-2VOVgk!o>f>X%Hw6_85#gHgq`=X2Qv-6Sb>RgZ*-z z8^8b$5=|Y6dzL0d_)1w9e!oVB{+nNQv`A;EPpGfMW%RQD)zVOsmYISQm|x6Lg6u$b zR5w5Oj-5_(V^q{%bM!0JhUD5X77p1;k}J9Bv&JBBSiyUKzD*Ov`+i$9IUX4PC3>;1v3o+@G6^l|LFaYXoA@ZpA(fm98?OIU(U zu&oT+aon{cQ)ufFRIcEEi?2Feozj~MM<(2=R$1;&lNKm08(nVswO+^GF?se(LWXqN zB&qSvpB~QQCi?zpTZ5l~!zAjh2>H7wLSr?~h6_{A0*6T*sD(Cog zbx+WG0a?7ACtp}SEh$O>Bg=O1a6Pw-H>oz{kEGUH4Vk{GaT(HVa)S+ELBt12@_~W; zc))JJJjR^I{BmwteY{)#KtYM~9%69v{(Wwjj@(4;)$HMe3p$Xn(zm2ej>Y$s&fM9H^L-(Pia`P%O?lTNNXI-Vxs_3v00vdMG876 zinL1&SgAqg`uFO1j>T3m!6nmriLz!HcK%!tZ)!^9^(jWNuCH`1NpsSb+v$1siuz=#Q(|^ z8O=|~+v&BnXY4W&FR!7j^jF+2YDzHnn*!#k9lz6A{t@ns@_51EZtO8jcBUG9(0D#> z9{7=b3ti7R)eUU9E(Lt{$vXn`*!RkQ-cG-hJap2LA<88v#C57U{vQ)Fz=4NpChInm zqX#T`FLww?0vPh~hp!(3+-$cwEp($PVz(dEn@9{pFbvxPja@brzciDKKAV^p)F*z2 zCT$B>lLP#yQ9aMZ1vrR=&gV30||7W2x^Q^C_Jft%9PW9LHn-#k-x^cc1u5I-Mtgb zE6C$ib?1V(>7m%rSiP(6$w>?<0t9MAxKyp$=b{-W|vJ@^aKmI-}=nF$h; zlR1_SawZ+{y9$pA}U8oUz8 zQa;0s;G)-zz%HOM2y6$rW$y=mH!KvA7mkSd;nw9y9!I%XeeN7Q-Qv9%PEJB)CPv+G z2}@RcU4P<_B|jA8{=F;r?t)s)&y6_RdNyr%!`(e?az4Kl3s(+C?rYz5k2@_EpXmUG z+D)-j*Hnx$6;VC%UM~&0BNb)MM{R*YL;$+?<5EM%Pb~Xy5?{(mF=*^4j&mtr$K0Fu69Y+eHV}JYSX1szuCAhu23?12;(XTKqeVqnO9$J+slM#@XSa zl|mQa-(5xL0PCT@5S`h%2p*0R9Tu6%bP|MVQL5skf*w^LH2X2Ac1FhV3~x;vAPKY^ zY5(|9vNeiC7Zx?zrDYzv$CQQhz6&U1+%C1 z#;L!t?t0+o$3+)J-@=wff2G$<;?)cX2qB(HdpmA;l1Cz1y7CFi3+DAYVcV5!xKbt6 zq9x-%=h2Hjoz5JHctoDL>7DF8LkBEtXJ&uZ$<^8dl?MPqrjfcwIA%S(rlBN?fVO8*P4{-gfa&wK;+O>z|ZYppxq6Dv$F;tv5-e7=6~ud=$vgq-ek ze|!E2aF&U5h11AQkbFxzXyHQlChxhrmXbLBCHs^o$AR3i%UGuu6xK^>N=kWK0xGlc z?SF2)Yt4N<#rm8rT;+O9%yH5KJ74PS*u5 z#gZb?4;lt0yS^!m5?fV@e6#~tEW|acfs39hdEcyb12$1ewQw`A1Gv5wHKxo{;fEVy zO;J0OUf-H={#-&M8GrR;fk%5U0A>P=HnSpl2AqU5Viw8|C+Ekn?Y|<^Uni(be8pEd zhXYXzT@Z09t0=?!`V;Kn4pM44Ey^4J(5tM1Fxx1jOK-au0vkR2Sr8>k=-wgXPKybV zU&zBtY(}=DQU4SzRLGOzJzJ1r;RF!Q$OpQ;2-y>i#&jciFSgZL`9PVd^f^ym5(zeH z25%^GurT1(7%^Zi^gMV%!{ge`wu~-mcs2m!`E4K0AonL<&XU#Ke|@8b!DzJNtX{*( zO{MkXf4ZJ$iR#S0o}R)XgClxO7zz3JvWAuD04yozkLddOX7n|(A9#o{QBYFp>lMyJ zgbSg3lG2f@pt1r3w!VQw0^bWthxSROiKwysYoeyEVQ#vVY+dn_ zI6n)!YLf(yXFKKzjQ(3Z0w3RbG8XM#ZL1jps$Zz<6Fm~{Wnq*LMRC1sKLxYm6qZfG zTx;J8 z`pUe7DI9kwsn2hfa@fY=f60nzp$V(M0dxoVs(*4zoWlrqg!b0~dD%?7A*ET!h7GpJ?&6s+$gN zd7i%xKtR|mKgw|iMCYG_P?o*GO4sz&q^1@}XD#nfTi9-{!r)W~Km%e@d#uDuokEUh zTNe=h9T>E$RvpX~(S(EE1-=)T>7xB>^t_YR$Nihy!kY{6%w6*LDKv#-=#yE)(Nc$4hLjZC zpn6%uK>Gx-z$Nr{o)J8wOStVVP6*V zkg%p?`?)Lro<<=b6X#UJ4) zEijfSZuEs^k_I5SYCG=8wx?8A7{(e~f6Fd%H@BD{p3=2S=MV2e;vF>)nuW7TR!47n zq`}A66dV*Rsv-bP%;vu6y?OPV1-k2UiI~&6bQk>(bIKKYlwqYpTy*f*XmQJ)GP|-zlu(6T_8nHLm5S1F?N#22WO)emW%lp*!MfyKjoeIYy6T0rN8?C$V?PL zY40N%wh?fc9LkzF@;!hUlDk27ThDi~KzBz4kl1CZv?-KGUI^6LRJQrk!&U8G`7#8S zl!1b}Y4w3lxm#Uf%hNork!=xpki8L+RmSyZ`~mjFm60eXCpl{gBrR+;8Seaqg;#My zSxrz@acUBFC@--xWXjE5!C;1cBdd-fUr{6hq!ph)5l~61MqJpHXTP|1Noy|pc9Lme zkq$+4!r=3;ErsP}5Dss)ZXzjLpWAC*MV;s5oT}!gA2D9_t4&<`D;f`R=G`E$S42xr2;Q4|hTuc4I`814cU1!GH$_kia5QytmHv z&pwz!(TI85qwn>!aS)h24T^3(g1U13sCBaoOTMP0-)J*gx#B`JNNi5p9%H{R!>PSDl$-A2+G$R=V zijg2laao=8q^)BdyOH}^f04vu5mgM37Vg|{%~>~HI-H(6A6To#(W8B7M2IhZ#L?V7 zJiA}%yN!vLM^_IMy+^3C?2l+yK2lsdc?MbzLDc>;bsFtvLWMEiP-w>pePaFrtTY+d z1nI)km;+;lg-7)6&yYU?$(8)pIME^$CtSF`-i?lrnZ202tL_XBW3h(UO1ZN?M6j9@ zDWr(to&pbfS;hH^ey5xd^iVz`YlYU<4R~6F`45gK*P580eJ>UU$%0aJK=ekxOVegNvOX1BOH9 zEjd4OdZO4Vyk@<`%4DheLlj1dWUe8_>T`#5vo>JJ=rRWNJFbgyR!1TmCNpiSapA7E z;k{eTz!EJiFioBOJAp*cD_jk5_91dy3^a%%C7HW9$nyN{F6{Q9FSgK1!gho+)Xi9d zIA;RQMyn9kHKH;pjJLOrm{cs{n{5SVUp13tGM!(FaPA@O0AP{qYeohdS9R1)h7P$I zRY}0xs|Jzz;IkkzzX(xF_9PM_BQZ;~tQtmm6Eu1_cu<8)7UdO@TH~g|HaLvaLd|)| z_J02d7}t>k%>MB!*NK~F3xlNvH_HqYCse~F;*AssZB>e_>o2SYd$nAE6a@zpoMc#C z0>AHu==zH45p@MMh%;=(mwzmK(6_uEK*`H;ya_9VUJd&YnuMLBXm4y5Ilh+iK26H3 zD7|$%fXCI^&h;5)yS@qzi(Gv8fHbEEoL)fba3Ybm%+#{Fhgjx&nh1f*Ca<=xK4N;} z%ysGN*xbhNhLQ7dmK#yqDcoWN6v8}3_5K(WO_)MVh10pjUfyHvRDY8m(!DJBlH@-Q2!oKN9Rx1TnW?(w}Am^EHVu90%I>8A06IyzDxjrEeU!U!B6 zuNrU;u>n;X#G!H@ioIPHYg#ji%E1E$9ydmx>q8w=+YH%lXI|RHF&?#jSU}I+XrxZD zS|ijPID^P60J5QON4$<EXbO!6nFS zPlBO87p1;SLw;*;gTcIKPQNMM9DrdGiI@h zmf}bc)IiIjD;Dl;PnPB${7_l!Os4wG2^DGDs^7Gd z9?**a2Sv?lo=#RlhqrjLSYPh0OMj0nlE$U>Zb!hZ^Ui}d9ti5k>ztv*_V#RPhMXPS_0y0}l6llrSZ z&G5@o3}Jj$-bRrj(X?2nhr~85U?25fw9LS(!tZ$@Kc|Mm>5P9Qm!Bz0Y1_=uavbh= zCPWw&*q2?bIgkLp@SW-*)0YqOB~tK)2a4v85OSDnyi&W zo*YDUdN|lyW-a~gUsBw5?roTdZpmBz2GGyNPp2mXo|?B^SrV6Ta_mDLCH;=ot`Yx+ zl2z-O)G6(;F+9tNg-<0!7BBO3S>!7+4I%4;sY+X$AUvHPW>-N#?394%_-G1VZ3*$Z zcO5*G?HjB-0^Suxfw;AU!dYNAptG#bA-3!qT?O+eW^9f@kAAV;Zb%5ypv<4Z?Aac9 zG=V0L1f19Ow&2;tAF$EY&UnSTT**|ikk*__eHp2pVer+aVYv%yZ22Blzd|N|gdLsT z0!oM8Bq?5!Q22|xWs>1k#p~7MH*h17&$~kQ3E}$YUU^ z20l)-Dg=ox5a~N{68#sqnd0d)^%;#Eo2BX@$EjunJliFgtRU6uQqizDmpJ9Mb?Ioy z;!hP@<9un%CI>O{=0lFy@{6$qoPeO%RXF}2I_Ux1Rb8<~``oW+FWnR;a9(lt782t= zOCNlbPA>-de(JXMgz1`5|aX>qP!`e)F)q?nD8hel#30a=ugPrnG zz6)5(fRm}@4?dB|QYJ7kKp>FYm>e}Y9B<-pa7zF~@M{P_Bjgc36Ia6RV6e>@ zedLD=^8@{Ao3q_5U3mF#v^K+u14Kyj-dZCMS?!)aauZ#_&{0^43Y3;^OW&1do)RQJ z70tPxSgoStdWb9#l;FL6LndMgw@}Mq#qtF?S2tBF?=xhqIuI zsGg3mn7(g+TmyW=*)uFUY@UJc-V<%0qJFq$^`6=zoI}3GUgu^CC)ISKWzrO{2#^AF zu@=~GLE=JN$JE0a(q*uXL1*7s&n*t)9-U_fE<25t)NOduC|s0R&+3ye+{0}Z{dtpD z<-g$VYzM=$nrPj@G}Pg}PQYH`p4;gjB4Hk2A3vmD`s!ArGFpKcd#!Wb>Q*LIcr4B5Gm<%lzLjHeUryBa%p zs;0!Lw-14K?4xI@vVz;cJVaCS7kB%mP^xDTcY za5Mjd$ipdiuFGKY8*xNrNhjU32O+4lFMRfJBhfx0)lY&xSyt$z%0<`Z+k>=Dn{-xY zg7CdIcV?9T8;WC_Rk$1u|7@ldTQGg(o`UZ=eNO)~8%Y&X-x~bMdRI}w&x2V^h3qZq zfV-DEgkTOBws!T#(3!&(&0ZgFH7uhVElzeG8#8H`D`N5BLuH&q^r&mfZ!m&jnT0>@ zKE8Db-rB3z5kj?Xum*zuF($>dUE#)9xLnq0*T3^|jO$q=g*7M6X(_B^wb6h3&Y5;K zZX?0C@psroL`i6lzEtHO@={1a=geQW$nL@xYTbKJm1QiMCYsSq&W-*dL1M|aG_^{0 zQ&oD4+?N5^PO#*3uUS-DOuOkJQ|Xk_ zE0cRD2?=>ZRe>h=Vp*OHv8?GcxjiG=2KR@_{1*l?xQs|7TWG)K#&rk!{`7y#Aes&2-eD3!BH`teJ#BOjTZ)1_O+fT1SOoR!hFmwoS zuzYgN??C$f><|pA|cAgvU(6-5!Gfx?mFZa>uLToe<^; z+))D_ZbyksS+21bg4TS+rgj~69ad=OlK#@#UV~v-&2ML`iw4JKSC{Bk^zh|IGe2Ct>b% zxhP+Wvbj7wheCQ^UIa+Piyt@QzGY*KCZ}iHwFRMXcP;gIUHDpxd)s$rJejnmllWi9 z=NsE8`Z7pL1lni0zNjdebLY(NwEb^ns2gZvYodVXb18Xm9x7UX6cAHj)U?vX}H?L)=2t( zdVl!CPo;*OK^d<2Nv%P%xCRQq%-4q(Cpf?c5_T^dljaYtj3eIzisb+-lKO4BqC6=8 z3+Sajf`O<>KLQ0#*>oB;*gymc;xCXa;=<{KLq4Rd+%$?Q=lL+Nn~ifq)JrDD0C-Y? zO(XL4;MFPJJ3+wo?QbGgvx4&UO)HVI|6$mkGz&{U9*C~wl*Z!R3ioM1GS|6ulVjpG zRRqX}6oG&iCS^*2+Ne$-+zmvb$zaGXflfuuoq|Sx+k6H%L$4#q*?kW6qpLnor#BQO z*j(Y7Rd?=m5{=E28i^`6^t(mzP~I}YF{&{HdP^8^k8to_X*f?K6vjJvX<>_eFX#1? zUgNP(@gng!|DpQT8tJD?cTWhWd4S_p8hX+z;qm&!A%my|!$?52gM@$Kus?X9DSDPF z({%5L6rL(J=iXAh5WRac6y!%*0nZNcnOhHQp@O1V7RH2 zUuxiS=m1GOV_>0}GCG-alC9-hXXqao;)MQjR7l&D3Ra|2gV7WMC=#$hg9TXh^J3z$0QKCx5TkJPntrjiv==N@7ySf)hG115V zYkt1-0I1^WoJx{H^)58+g4*H&W20{FxF7A;JS093ua~98-+|?ko88Ay3cK_T4(M8E zYMd3r!r`0uE(zcAy8dv^Y3&>KF#*wbKgm-nVR$+7?1xmwuLDuZ&zimgyao+D=R)k5 z96Zu^j&)VnTuNvwX>b!v@e7ie<~sMlvOYg%gOW_@m#9QD_cXL@$Eh+v~7GP`MT>HkBq}! zG|EIPTuufwvn$7LlztZe4G^e4HB_(<&c`PAWzp9rmnJnEU)Cg3v5*zPL4#VG3ReQ7 zmTFNp5fyO?UH;P$Y^8!&BOE_W))CGfAZM{P%6w8a9MfMT(S}E1u$n@^h51c$CoH_@ z79^zJYL}9s|7GX+&se}5w41|UI(Pz$&JHg*Z0C_pr{#nCE@)O4rJmnmj++VA*ey_+ zZXIdTd@|*R{prs<`GDvKKrF!Rv&@PV?X|9=h}#iO22y@W`<&~%b%?bQE;WwVF>?e9 z)B5RB@LN#2mHPP1zuaY`Mh@BDJE-L8Y_ zgO{vqGkXzE#@x=cyrubbW9$gb^ZVi=ooOlBw(Ey$J%Nf{t&7ed5hLzDB7~i45WbzZ zlhk7}myT~I`eYJ+nB-_|Ylv=Qx4c3JxHEcn+l zZbXli*;~8`X?JD^lEO!CUcIKwA)2dap3%?@2GMM-c&)@rZ6!kevcDM&Qc&9Y8%@x+ zLj_Hn$Nuiq-cw7A+CFwe%cm=#4`Tw zA!cx)t(6sYIsOMU$-}saieQNT=ZMik^VjgBZRuBJeqUR^EME88w>9Iez8O@SPQjSI zotH=9Ey|H#A^xB+V~jPrB=c<&GP?(C%~-(uxYdc3y>?FYj%{Fo zwRUL+ed4b(tvdsGd`lmg6t$k(F3Kk*#)4TQMzePn_r))@H&$C0bF4R@~CWP9?qw8 zTyIG@Q&RDlSRHMcKJfCZ;2mZeR3pa=*GD9f!24+6&`yo-J30TU=2ZL+`k&B0=!)Nd zxc=pN5{pw=^dJ->jK;VDFH-Ey;dL0V$PEFi6~5%vE*oJ}m)Uehy&vo8Hl?d+YVZ z_w%_Oe>xecFu*`WOOpTB?p4LJ6`g))Er_b(WV5%1!s?0>R>*jX(7Z6m1E>`fa8or42%Zl|((xl^FJ$7Ta4=K3ceUlWX3`g?m9#DQg_7l>7wP|~0|Np#4XB??$Okj&{h{1@mX`IP5?E5@&-m$2fLRt60`v*G z+pzg=Az(vH{!(yw{TUDNAH{_?VXhQ-zvoS*2E7$JZ3i^vLK)9CQBkGZ#@V5JZl~)! zN+$A!er0FJSiYeV`A$Y%DdpZ5jvuRU={TQ_!TDEs;fNKX9CGGy23M>}xx1YD5FM8q zIrEl8zI7yE@ci-;O5NJc+xLr}-}r%I7I}@gsPhxhc1JKeH)r!#P0zfX97*Forn>&N zqhQf>kSNo%kx5=!ydgxc~D4m9OVX5*Iv+F$a-`> zvNdi*PgN3Vo*`}u+K}x~->SO;AOOKPIrkn08e)-Yi?F!2F5$E84xn5O$<07Y!FOFj zDR0ya=e z(T=$z935sk<5UCtT7_bI-*8kQLp!(%9t^YqRZ;O5O$?Kf57Vza8(n{3nln9_Hbr&K z7j-MO`};)M(I{Q>WX6d+$}5-t1@wxi&8zE6NpjQ#1ohPbKR#u$OxL(Msy4BeKu$&T z&|>piwmt`~l9-WoxqsGYKpAalPou0`Cr!J!P*B(cVdzqF`$AiuZ(q(aN1zhbgvf~PrWOf=8kCeW;{aRt_qFP9B_wOg!y8Uhx4Df5`Zx%Ny9RQ%a)d-Vw)kG-gvHCk`H>2JfTY-l~8{U1az#>+mIm}ebD1G1^t zmLC()ykE&4_jS`~8G~2s(Nt0=a%Ky<+s6yUsg^jQ_*dkBk<&>jefdi7nXyW8^_K7{qpiW~R`4w1 zH5c|13buKnv=>?Ad79f@_?<6kvPMw`2fOxXxLHZ9_li>x|*9HdgDgA^Z;WI#l5v5)}G7ymH0r zoc7wmPcP5L9CnagBanDXG-gd+tC+qKJ~ z(O8iVrA9S{bgv?k!Y;epJle^+f|?!mTu9z+njDiRMZeNHPnreS?%hM;a>5qGxB8yX zfh=S*c>*=W`+H^+zpeX6;sDfOSq}gT=>#X&0(G#!2~k_|Bt^c6XnJ4@oi5sZl1A!L zlq2wvt+^sF9*FHARzv{w~ai7w{93NWa4XO z1ixtx+oPwy;)IUlo%xE91XFanxORTxuNO3m_Fcl@+FBddP4)Hdar|ACq^((3xy-h& z8ZgNH?)(oHAZ^J9<#wwm2aVkYJ@`;-WF_h+{QSLytHK~>a>XZk2t?oWR@iR; z_@-*_v>~uzE&%1mX$i!pO0p&lwB`(3(}n%o?PEw=z7?4PN?IDba5ie(@-I`On=QU` zY(H_u?iTYG@}@?Xa;<`yq{G2qUr55_5JGD-04Epnhf%WK-VEhQZdhm!R*U{Rr_WWP z|7>p^=I(p;)H85!C`Db`<+n%@QOoi>)2b4hQS#k22a&4~oaqSpWY8$Mppo7=pw+Gw z2Qo}@N?IDuRwM$XInRTq%fIH|?gFpe&rUc}Rg9@J8_V;FgSswlJGe-?<>-e{&!E@$ z%g@vCv9oodO;oy50_#VwnISq~1s@dZoMThROgJ&j%`1Vv6yJggyXtbV=%(BnlNEn? zaF6Qv@~hg7J**Y{pRw!z)dIcs1xI(J0h*yu+p%!i{=*v4$2x^6G#KCW4mgWU(`t_0<>q2G$`=2_}$5n4ek!j&#}Q*{I!r@MQ? zWASf=VALLe7AN@pa2@|W&zmrLE}Ib%_f=p0GiF zP{oucEmW19=YI|E&Q~p!$lYHSycoZudA%u= zB=yK}>u;@lHg%Hb_#!NiDs8ifR(Freb#(`rlByF6@pexxS}c;=QvL!RFo@CN@UM;O za}^KdUZ6HVc^T4g@O(`&kD9Gq`yBgpzVWbm6E;JC$!q{ns3jT1CSEdnh_%@;MpIL^ zm7KITi?eCmX2HI*Hr-pYYt+*U*zXsL^g1*(i@_^u#g&$zI^p{Y9W}Yi&^uI9uju#E z4r-cW;%q=*)io=1lJ2h!+`nPGZuZ;3bP0#7*>B`%De`37z~9Su(0!==U=x-F1e<3! zhls3o24v#6AKx}^j3z@OxRN{6Zfrx@5NygNU zi>xU>^W%%=jFsV?op6MZU;WBIOKj)OV+BBMO%P+IC?X^jBdIqGJODTh{3L+Qz~R(L zbE4Wr#fJxAr(#|-7;g2e2sbsAyPD}@p2ClH%i56vo18w`zzBJ8hFyBfqNJ2Eig&tX zD$2(?xRR}S%iaeR*qbMr>DRiVK1a-&{X;-0Xty5EMx2Hq4Po4E-2zV-$F`!WG^g>R@#b};e3^a-R|}pyG84Kt^Ho3TO!-e8i~U; z-961Q(Rpt(uq2E1c^n$RH!A4wKCOFXLKQ#@ee3wb_5}AY@TNOyA_Tlb+{MV?1KyQL zc{&zQ)WR=fAD%-Bb7397GfD( zNCnhqj%pHz!cfy(RVc{f0!>@cV|}7k`;P@`sM1D&!RG~(x=o5Op;&$l2tIaMM1X($ zpwB3iYCjU7AbT$Fg#3rB^>9^E6GQhrCzz1ov(!svL-<_m%}Q4+Fcf{YkQcpeL^`|PQg^8eohiMoa~$t29-*o|M~c+N2L3LGj-HnDWS8*zj^{+BJBl= z$5}Rh4vCIC&V@l_pWm{zlt6sUPV8!a({STyDz4us1l3rt&+mhJ-2N56=94rb38B_B zVZ9IjZJY`kRz@Jv}Nc_SZ^yERW zQDcJ;q?>JC=@L&+oS0vWt_O=-m>IqB>&H`I6RlNyoy*D%PBIi`w0QOP!7mLzk-PdH zTIl7WY3Je$W6F(-3LPk#K+{tXMP;s9W{VLY(1rpnhWm^Y&9P$o1O z>cG>9Y57grVJm+^wClXCi^ZYzt#|EqYo1QvIwAfQ!KIsHuWU6H6AYq(^oE#eew3b( zwt8@oOMINV04U6**KF~h4jw*d&=JoQlB%fuvmmXBVz6XnAQItv)?2}}fZK?diwOeE zWgG-c>+!JEk|so$OOmu+Eg@m3pCbzf#oH^fySVq~dV5~^dv)X9LT79|ePLdqe;%dr z<{-OqQe|36T!(b^^CYGd`Q%8LnCOS04HeUW6lG4^RmxJnQ4);X*OtKxpXU`s+}>qI zJ+N`t)oC|4E+0I*xRL-h&p9HLIrllaw9PCfw`rk@N zZ)C*mO?^RXf>SIgNmYB~a~N_08zHB{UI*MszId2O%bfgJ54bPKvgEtYB9V#+*Wa9O z!JYMu2-ZRE3Sa2qdbk*2h`i%{E($MwHf?)K>c_wfMtR_MHMA6yoGb`ruMrP*!p*-3 z@gd(kUF_uPcWkQ_wYKV$+YmPt3>^K$@z%Q zEc;Hx+R6Vv6WQF+vs07EDRpKFs!Y8k?+c148OEqND}CLSSb+w_M~nVx5~PNO4AKZl zL{H=qF;M$boT6S?Dny~W(UqtKc+JMV`K*E(s>CbbrrTl4HF>kqWKY(9ZsaP>sN@YT zIIB`n>{D_CEb`26;Xf{1hEngs`;f|fKRSL^PJwmLtLSMB|e>O>bMt4BY_KC$ zDOeKWM8{Hp5@+DPRuDs`4U$j$KLf1uncPrCHD49zlMNMBTql#N{#rV7V+LnNAtHn*wn#qy3IWNddy^oT^`(CY7EjNiS_+#?VSkP{?6$3wQZJyLD>H0+8i zdm|7_Ru5_XYRO#O3~_^hRad1=U zvP7Ty7`@DGxkb3D1HP4sb=@G!9?=7g32}QHrgQK~!=eGM4Py;(`?yhQ0t18}R(;A0 z?xpmEoW=HJRRGK~cNY4;NXQqpSMjcQCTJ2WO$CpvjKjAEhS!W^$mcP1nl zcd@X1W1V4ee8O<^jFyM++SA+YJ6KeBc0H(r@oft?3oP?K=BUMUBDLik)(W;jxl5dt zJvlAAo@4PtN2HO27d;8wzqD0_7fM?Lf=-cU>$v@#2hx>U-JuLxE%My=oZ>Q~bB z2x}bJQg8X`t>sp*0pO6Hnd&pwe^#P}qguq= zVou$%Z8|A^YlCW)Ieo%+0+98EMObl>i}x*+zko6n<9D0BSgFrKO+*mM+);o*70?dmbO8Vv|IGPHMulZc! zY_(Qz-_8v1x%TwgZl#}{>6Hi(u7KL9e02P@X1r)he_?O&CmsJ-!)?e=c8EfxS3oV} z!emAR&;)=Xz5-KE2fr^(4Lii4a%`3CPuX?v>x({nEG-n~I3Xk@hjV^6o5u1Wmsq(2 zMM}0Ltztr_UZa9wsg`$!?2eii>8oEq53>X}e`0pE)}GXlA6w^WDqB|^6}>3ZkdRw z#%{bMXCb=W^*D*q#gjzIp^>&U>RYARh6g|dv=c>4QUHmhasj2w;NVQ#dw_N9s{IgV zMRE5lx+@hbjDHxZz4PIJ3E-A%r3-m{D>zi z(Lw4$KGN`7N{^3qMKDx8!iNm-as$B$ss6taFbay|B+)TfR#q1Kl9XFHU-My`FX)J3 z0SZR%|7!jd!aVuMYFxlis3NNHYbjc001Zc6iiN7C(o*)^l`Nz)H=6|D9kKiRK%(;R zPVKZlE*;VlhbkBg>FXVgbPz75Jl}0QDS5ROrDvU1h7Oypu_~Je61iT=h}}Cg&Q$`T zDBpduz4Wo$TWDLB(OV(}=i=$zG}c0zQe>OVL5@&963G>!J@?QpVxIzL(1?1y^~6yd z<{`A~jD8Ke1pVD{ zIztM8$U@mg=|`j>`VvyuYV~RTY+xYMn4sHT0K-0Q5?q!F7#Qb%|3He+ zP`*g@0a!0SRY0hH358jp=cZtx;pwnM#r3WeN~~ZX7UX_u!JRW(JJ`P}iSANorjZRI zyxQl|GRaqB6dc@H&pAv~9vxwpvSfFt!u5at$xZAgYkqwK|E+$k+G#0mvf&HXAs{lf zKL@jHd$^fx@7{MCfzxWZOB~xgHgX{Z7BmeSbI1>$_AIhRksntEA&T32X`yoIF##U9 zH+7#UHOZbd#!t{s)Q(?)D&9R~N<#JU?nij-!{lLZH-u;ky9NWqkVuzEa%I^N55I;` z?K>hUfF``V(`B$VUchsNyVNBF_EeH0^=B~ClM})uQoQkBtNTLh4+m1*jt$Jv4eoZ zE6~FeKG8zf%$FF;4RCnq(SGkx7YLxBp+TW1^eARHSw-9DC$P~GZ) zUrMpbijE}MCmNAUV^gLzdROO;xrh#=bD!EKxO={~ZFFNSNx$39G7yg(S(f`)9aBUJ ztDTuCe~1nDQmkNkv<3L9H!GiK+u=<}c6lo(5Q1jucagCU;Z<7B7Q%QacAf0GHJ7;! zB?ULd8RBzMg1Hwni(496J<82^$x$%v>PV6LSCCZ96%QpL_Y$s5lpS?e0HB;W5;twY z?qi)|4|3|<5m+>K-}h843Vctz;D0cU5gY{_mrI}s4RPC;+nnOW=HV(M*=5cLzL?-7bxc*?!{f&$|HmIGP*gH2I5 z%W9s^+6@<_dS8-vMnZRUalTGeDsDeP^J|?I=njX0z5qU&Nx3+GX+w-`jw4~wt5!lV zWp1|1=~0+7v8Tum`VUf8El0jJqVd@d#%TROU5S2aHcFb>V^g5;S*M`sq=d}YtN$Z0 zH6C3AwL`q!-+(&8;}R}xi~I0oC#1-!L~qPEfx1d;SaBZUSvHi=u|`YKVeF-D`_ad% z@O~-rh_}!^$KAEl;^76#yhodqvK11lb|k#D@7h7;-#QSzBofUc#1ccW7{K#l)z>h( zDmHu*yHffBuJt{iZjogf1{R+5FeaaHrIB)!6!hEF(^amnO_CAkv;HKbJH%j0VbES&;_oGpp()?TTz*{Lb^W1 z#4CNyhz_*(X9m+0#LZ9oiQ)=kxCVc=lxiK<8wg^P5gZqzvyJJk@!isRhDI9e!bld% z-J*CdVzJ?oyA>Mludkr^)z)9B_a!t*CsGvgz`mL=^V>~^0b(G!*b}hp?SA#goBiGC zQ!ht^p`Cb+i!TskgNvP~F>`??rSVj!EfP17_VFaL{k)-7522R_{JyrI7b76-Cp6N@ z2cy?XBdMH-Ry{XZb&h)m40Cc5W5&`z22Y{j^_=_O7($K=fApMpE!1lW{#Kt}GCk0LcKSXFzno3( z#TY(37${k@Nc`32pw8)#Yv5;$e8pBA5f_xurqY`o+^CIes|E%Byz>V(otV`JSMP?z zVHeo?^b}nwYaylCM@q@!bczVME@W>M%CWCXGC}81$=I6#)xAE{X=m~T>%j7%A`lMZ)lvd<>kt@r1h8Nz`t5` z(W2h4%9Apxvc7n6^48ZcD>z8!AH5~-N^?E-S%>5QL}NabojyE_1re=|7% z+6xW-X0^y;HD@=jKq0P9tGgZtTxboCUphtQ zbO_~paRt}f5fS+J-rEJuP+cV2a|6bVoqB{xl*d|!kVQNCmreI-Z756d;V5d*?%q}h zbMmc8NrJv$>yd@A8Kx3AA-|)#GF?fQW6@JBe=?SkNoay0CVGwChe{Hp`(gxZ1Ni(U zWs=vF^;o6t$h$B$mUK1@IP@8coGr{445?g4a?B!1P6{ zrbb9|^`!^X(RFb{Vl?ZrATjMf82PJ*nZA)I?R|ctC6r2)BY)9uycEJ^pt1%KqHP_K zit9eq{}cAqY>;G@ed3JASVHhB`B)39p@?Bb!;(ye((crP+<`HNd7c}<&2@&dLWNOf z0FtJ%L>bomYD054SfTEs%NAZhisK$L@{2T!J_IGO2hIOBU2&>LaKc8{!I}gb2b=uV z)0VOXD-v8WLvNh%e89uBN<#}zeU^W3kmsW%KjVL*kNiazb)+IfM#+5E1af*~TdUV4s(ZN;l`bihurOvjO9djrQK$j<)q$5lsrp$9ati(2maH&p+}Qi6-RM1i~2#DsarJiB=+GWLgT}NIi_2l0u-xu`FulcDaI_E-5`DVkc<*&+24!sD{%IF&dhs#Y#Cd zMPY%2mQkkgk-LTYrX}!C`fkfk5h&xeOi{i&JuXm8=upQG<95E`VF?47b|gk59?(w% zot~bYa3%vMAcw@eK^B1NT`mn#m%*Kw7anWcIa>wHzL9roS$;?oiUf7D*|ipUZ>tOw zM@`SpFYz=5Y-5E$JNa;AXP;weT*JM_-QCI}2kmvgp4&ht3EsvoJt zM|m?_6QUEwK6bS@!f=?rX)p8xIuJ6m#UcK~Zz@lr5%jU&3~7c%^zqNgN7P%(ofalZ z1!Be#Hu+6^4t~W>|M_Vq9wq7Pkx+3dOk;{7@pkP7z4PjRJ07;Eg8gv~zoM5;p*$W2 zK$SpJ_@H5$19ln|aE96V;x~=mPC8|VQ3Xq1P7}I3vZ+?*gEa!CP7Msi$Z0w-W8Vo_ ze?X#3s{}y-JHS3b&xJ}nxEzM{6=RFpG%b7(odEgFBTHRfy~FOmYJ1a1ylWs4tAr5n zAOo7C4X(PSFojzR5^4*@i~`oELm@40?AsHgiBH$ujaamHPr+ZVCpQBND^)d;Sicn| zS}rIH1yCx)y=#!=4{*4dgwYqbc$a`pU6yhBb_h{3ZB!w{hfNl@*qFRftJ$XEmFJe9le zJ$Y9I`Z#h~NsH>@YfaL^as%|uPrUf`I&)65CRaNjtTqMU-X%5=$W@7Xvvfi{($P1? zj~N4$y4_Oki51U}q`oXJ48{Z|kaWE6AH(6pui4BVk0n2VoUSa=h%*-=%f_3Qn#e(K zPig^wVRa8=>#zigHey-$Vlu#@lqrq6sZrzL!1&J%OFl`A4ywSz`;CE^911`N>!^)C zG-iwfuU~nbA@X(%>Rzo8439d3Q_jeiwy)A^*m1l04-+Rj?2kX=%w@j%L5)0U=hIpv z;zV&6Q+8aLyF9&k)gh(%$5vd$pyI}3OHQZ3B+qHpIP+=@k42Aoi&!%Jl*O3BQtPRb zB!-k%tDlz;gKAP3ONo6xl%cZZ!~wdW&7;PzSSuv%xH0W8Goc$5haEpSW>QU0p?;Ns zJ^&@d(Q`%e#e&K%BE1faqg;6%`Uhpvg_N{ppty(GOw&qghu45faR60GIBp`s zB~KQu_ewg0{CM?UHgHsJKT&IH5+&h=m^AXf<9tZ>GI=~8AI4Z>#_?9HH>m~PxuW3b z1+KK5k=9E9<6~s4@UQhK@wd^hcby)-~ee_+IX+2RPiJ$3X#cC5K zT-qu%P;*q$(7@ByC%l<3zGR43r5)RF^(S7m8Pw990d95LM6YyZ>=;}vJPmoUl>c{? zO-cmM^_9f~z}L=x?5qU5U2XUUmA-0LWET_)O!?%)F6^@8uREV;fNX>7@tdE)FlZgl zuZ%b)`C%p=X_k%*=p;lD-@l{a1k%&GD||w00$k-YKoq^?&l$LDO^CFS&2F|ta=D<= zX@e5r>xZcTt%M7;l*Uzc$1>yshOXp>?UyYLmoM)LGa)eRBP6^Li&EhHmfn~4!Udis zhQqNCP#yk)*nmXq%~@f@#B_S_9KwnO^;sY@!`DaNoH9ij8duiAZ3|wbt7IWGEz6R4 z;ptoZlqe)4jsjaf-#b_6+UwQW#In^o$(zYkwW9#QF%kp4(gn3Jqoolb5e#TiKL>iA zMEeDoTA=e#c#Uv1sH*%&pp(Z5eHJY51;ana;h!7a*bp{pSDT1a&s-K8b-CW}1tw7{ zum=u%Z%r5!gG(hSfB1p|B+-hz)MMkvTo*h|ntZw%{MESYL2EyibYr7dHTc3X35?)X zO1gtY#GwoOir#@q(dA29#p=Dzy{*jMlIs2J2q}lF+MSb5a^~$ZE~2+xa-*u}Iodlm zWdCNp2+*4n@tPf!{j~l2LC84{XCx>TGF*%3&?(ZoN)6X$6n zH{V*Zy5gQ^zmi>7@6drv{B5-zaXfZ^HN*dfvZ*39xK@F z3A^HjIb$@>X0|VgcZu~Bz3O^0Kq)JeH2p^n7XwYS^^dvyscO>pj>^&28*50_4+o0W z@1Kr-njNeH=f&v~>31u;b%JL$R#GXl0nYclKY<8Bu|SVY4Uuu2so(}uvW6@JCpi5i zsev<|V)r#eo%r7vW?|p6=D}ua_Mo*oc{;^OJ!(XE8nl=UPLVck_3qn0LUlHW?zESCoKH+SO*7{n>|0RK&geT*nWfHhQqd_SUO2RWwgO@PSH?N&2# z?GjCG?A};SbH2(4l=9}vzE4^5?G^0kcg(h!!+JBvE;{(Qa9~tHd6xOlAiY+=rvfWA z<$WJ|?lWDgS4MO#+Olwt;?o_jF;YjxkcHS=BCMsKllER1CbC-geUSF1Y8zBsBn)OB z>r(h@5u>yR|MYm-?*C5T)t@!a?&g1*tM+{`OXMoKO~$z>PuV&qo-JXv_@G#gLF{KO zz-zWyA+-8jp4Ah^Xk`N@2#NU*W_;de=2=^$;rzF)@RM{U)5Pp}zUD3~PwBcCH4v-# z6x)AZc)+*#W(0)yeZ#h4W~&zQ6dn|LIHz29cnb{Rd@sjcNB46BQgjBLcoPf$Sk1g>7`Pl249ja)u8Bwb`4AFj zx|mwS9Ax39axEuAyZGSImI>?pSiyuNybBxs5tyju4)E3)haSFY37bVscY$K^x^cXQ zM~V*8oB>?S7uBXnm0qjEp;PhrQe$+x^uLzfA6Ho^f047CKhRQj^N*PWYn53`>oGl$ zg{tcO$|t`MCpXwffC#Aw}^nf;vmb@x!!8j#HJQU zAvZ5pWv>r1)&l1N$jRh=E)6*%OFr>P)gM4=II89w$J0rRDq{;#@lpj4a|0?+5ZIY$ z{Sp>Vue?aGv^djcSRp)*+jlnF?R^(nkuX1-K24tL1=@13G-8y$`ZXcRhVZA(nI!5K zv<(OK`4)Yb_amVi82Uy+MRFM(Bzb<^S6blth9&+!!9Q|Fn4~yYMvp1!I`$#dZrb8f z$}y()pn)m?5}ys~+-{Yhhp^D?eT1-;QrWmsYgf%GAePghoa!a}wbO-dl@)vlA#vwi z+j6GEf;VGP^oOI$>U9ycbu;pp>}#cijn0hAb@(J8BMI#E{)9T$DaE)9e79aqn*6H& zDoTBYzS7-nAOatBl3ru0QTsb z#TtI1zH{U&aZZim(`Xv@uz|IeA|LR|osTTzy#Y4)AO|-(Q_pagZ8u=P&R4D7r z0ned^DH+{Ylk;#?jIOudp`sOl{zWM?7k{pfTGI*RSYh;c{^UmCcEPn=0z&%@S}jSN zL%&9x-tV`2X2X{3NW)OFpEVKT-b#fyDsN8tIym2SXy|t>1LZj~@dq~0PtFe$nJa5_ zT#1JqEX@KgnYc~XZLM7n9t$w{^Iu(Vh@}Wi*TLLXvn9CCEd~;?$JXD#2b>{S+i4Bq zJ^)q#7+Ys*1C^}^+n>$%#igeN(dM!`%RcSe(MpuXf=&g8a>eIHHY~vSC{eUO4;-9Y zvGrw6d!s%%Zd&GH>=zc=uB_z;$YzT5T;J9B&_`IC@jzjcM$zoCAE4e6*8E{MaoaGU z2V3CcU^-e^2&oRQqDVPlBme{&Uc94(;zE=4S8meje^{ABKj zxo#-49W6qDl`WH{9<+Ou3BGhWfmm0=#yH}-63a%2`ala}h%SgcjS*O^D(&l11q)Vg z^Qky%o@H|bxa}PxRt~5%<76tb=c!vvFcL#iQ{m_#FC+&67g|7`PF4B0_$)p-I&}w@ z9QWLm#qF20toDwNE2CNv@n!^-IvsvU-eaESE(o zuRY;anE`|?TJQsd)51>~#6LY9+Mgge%6$g2fh+F0gvf#e#!e$Oo;mDL|ge#XTC%In!apmxd;VQ&kV_Y+&cx> zcy|_>&Y{?3s@jfHGdML)Vs1S>nGDnI^nyngYAe&cRh9}NNd3(D+p#<-P6js#SGak5 z_`{9sk4TY)(wuXN7)wNiXjzd@s|^-R-9N9{yRGV4t9S-n4hR^ zE^it50mu)`UVf(qY%p4UApxO5;!C`1er}risoAUY2q2sQL#Bh}K^+@?ce-{L0u?e+ z{Sy&3m_vwXr%xATf+C?>s3O}bAK0{1bg5tOj(OJ~!tkch9KUuuUE>R$tun(8A~T>x z`eP8@dTgdO7lW=bS*l8D(@f&WUtv8j`T0uT&S~8C3lmsQb8cRsPTV?XUe(OrPJfV; zrfM(m*`p8gTW(79&Svq^C)e9L`o)wTVxV}Ng|>p4O~4N-MgG^BK!Eh+{v*F^npKCO z+1&3b^7zF5r|UM$nMN|XK8DTlg~iC7%hl}q0myvnvcI0zu4Hl`CIlwhnq%Krvt*LY)| z)-87d`tcUuMpKi~MGY%);NOWCug1|be87#!m@EMMZmdtx64=ctP0estry|WII2sb> zbq6m^FLLdce-!4;Yr(`!1-l&}Ls1Lv==#?e(Pf58r)WBl@pT9xaB5iyFn5uv-KPGmG8p*?fNLAqH{gS&O36lCOy%w znVpgb_Mm5@)gX6NbQ2j}1#2V=UUU6DPJ*n7s00T^@Q0X}&hk;vx2&aH zByxjUC{t+a(~cTfe(ib&*IUKLvg936;Y5`wzXXE;K_=y}y{h^)O*?Rz^X+jJb>zGH zoYz@#hgd?+3?W{@N~~x{RR(x{+1e?8f}DKrP6n*cGCQgd&3(f7Y9N`oVH7M|fhoH8 z*N|PrO({$0>bF6eHAh8!-87?-Ds5Mkm*WL2i@yHa9_A(GS$R{eohRg2)y;mOfjSWv zo6iV3!wl*lLKyd;+%r1%qPIH!=fj7CzlK0*A^#gj#oF`y9-fQjaz{NELM-KZ>3m!D zUjr~~ih|UC&J9TpdmPAhsIteGYMch70D5B{fxN=7@-jR`uFP>_IapXBTv(oWWTqVXSi2A zJ6x3_erms0Mlb_e>nF9DriiJNO)5O62kWLrD6QRK*pQs$U-HJ19UFAqfeGl=$FG&K zlJl9OeP|?`BvY<>_~k{vZLF>a4bqxy7YTim-=n zD(*OI=GpV`0=mFRJN`HOB1l-jjDmAXqO-VI~gz#`ir3S z1-gM?RQX-IcI+7{gwXC1ff>b!Qbq>D7G=Fl@+V@782@@V(+#~c5-D!NWNykpWriF2 zrO8s^A0>$EybKoS$8qq|Gbm{qG4W~uz-ps2D)vl?SX2S^=trZX$@1%2Z+E%1zK@@2mgKCR zNV!IrlcC8bS&2d=gwjUYHviA_783(>BVkSJHg+k=tYgN(p!$2+`Z|P>LxW%zf8 zOHJW`HzK_=XeQB`Qaaule-UJLg~AQM6+Yr*NQbxVN=>H*clVlo^I}2iA&TP41dM9U zNF}Z`Gh6x!rygzq>+{?FsHDj5(4~L&_h-M<88`jZwMXFg7q0o9Gh3Kij`k~IAXgOo z|K(#YxyzjryXcVFbo-#((#~9?X0~GzbkEm-;du{({Yod9QcT2n`D(#+i?nHTe?xv3 zBa8Heg@zfGA*C@9^+L)Yi1)T;gj<<|Jce42wnh9_`ZN}@A27vKs5dD1I`ct z7yuK1Yk@Ou(~BFllgVBF8z1EsoxW}{5R5pjGw);f+c$J?^{LCT{SE8|{DmunrXO^zSBL1zIPIILjSW+@cBu*yi<@^hsVU0I-YYlopuALSniX}N+X z06ger-H@m}m|X3Tx#0fF<2fb)q%#3_SZitQ03ZjrzbY?sY~G~O?ID$Z{I0L4`)JM8 zA`PK97ikgD!T^*m?@;hrY& zbK~JR>fs3mc1fUKHO@B1K949gLQt6Xi;7AR<0*S*q*U63+nn6DFaVc8@BLE<3-h$` z$y>1J?dP^gIuWi?us{>;Kmd=nU%i)={gf zy2TOGIEtb` zs&x_Kw^CYyGluIrHAlcnj=jl^a@D-eRcQ*b)uLzyA`#;2D5ma{Oi=Rx<7hGRdRm4{+Lg`4W@q{fwCXfgUXXe>pqD@^zyqNFe+~`S$POPyW{5@^p2M+k>e0ch|2u}~N{kO0mCTN5R1x}&4j6y~nbN$do#jP3pY%=ZdqgVg!?5A%@f0L`YW zeIACZis^UzrRjW$lbEan;h~mYe5dC30>s40EqRUp8KoJ#t_T8L0lF0)ahmG|FoJ@* z7&%?QF1mQ36?}+2|BcWin{5Ch0IU#L;9{vD@H7lj9zYeK2N@M%=U~CYaMb2SNd<_L zX{v9<&Ld33b@{?$zwodWif50JSU>=70y-TvG^7iu{BqSqNJw`Ms^eE;+J(=W1lTfm zZAE(o07t?w^R&ceuf_Odf+V?39`FD$Csb`=LxkJDYijQ0s>D2)ie3&DA z6x^9WlgI!Q9;1giT&ID5l>rrsB-GmRb+Tlx55~`NCkA%O#gm@vOmJaPJt6;a^NC`^ zxet!1`_ +is a jh7110 signature tool used to generate spl header information +and generate ``zephyr.bin.normal.out``. + +.. code-block:: console + + ./spl_tool -c -f build/zephyr/zephyr.bin + +This will create a new file ``build/zephyr/zephyr.bin.normal.out`` that can be flashed. +This step is necessary as zephyr binary must contain the SPL header info in order +to run it in M-Mode (Machine Mode) since S-Mode (Supervisor Mode) is +currently not supported. + +Flashing +======== + +.. note:: + The following steps use minicom for serial communication, feel free to use + any other serial terminal that supports xmodem based file transfers. + Thanks to @orangecms for his vf2-loader tool which makes the flashing process easier + +git clone the vf2-loader tool from https://github.com/orangecms/vf2-loader.git and +xmodem tool from https://github.com/orangecms/xmodem.rs.git side by side. + +VisionFive2 uses uart for flashing. Refer to +`VisionFive2 Recovery Quick Start Guide +`_ +to connect your serial-to-usb converter. Now power on the board and using +minicom access board's serial and press the reset switch on the board until you see CCCCCC... prompt + +Copy the ``zephyr.bin.normal.out`` from ``build/zephyr/zephyr.bin.normal.out`` +to previously git cloned vf2-loader/ directory and cd into it. +Flash the ``zephyr.bin.normal.out`` using this command: + +.. code-block:: console + + cargo run -- zephyr.bin.normal.out && minicom -D /dev/ttyUSB0 + +.. code-block:: text + + cargo run -- zephyr.bin.normal.out && minicom -D /dev/ttyUSB0 + Finished dev [unoptimized + debuginfo] target(s) in 0.03s + Running `target/debug/vf2-loader zephyr.bin.normal.out` + Welcome to minicom 2.7.1 + OPTIONS: I18n + Compiled on Dec 23 2019, 02:06:26. + Port /dev/ttyUSB0, 14:59:24 + Press CTRL-A Z for help on special keys + 6*** Booting Zephyr OS build v3.6.0-rc3 *** + Hello World! visionfive2 diff --git a/boards/starfive/visionfive2/visionfive2.dts b/boards/starfive/visionfive2/visionfive2.dts new file mode 100644 index 00000000000000..48d7045e075361 --- /dev/null +++ b/boards/starfive/visionfive2/visionfive2.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Kanak Shilledar + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include "starfive/jh7110-visionfive-v2.dtsi" + +/ { + model = "StarFive VisionFive V2"; + compatible = "starfive,visionfive-v2"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,sram = &ram0; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; +}; + +&uart1 { + status = "okay"; + current-speed = <115200>; +}; diff --git a/boards/starfive/visionfive2/visionfive2.yaml b/boards/starfive/visionfive2/visionfive2.yaml new file mode 100644 index 00000000000000..a3288093496f66 --- /dev/null +++ b/boards/starfive/visionfive2/visionfive2.yaml @@ -0,0 +1,9 @@ +identifier: visionfive2 +name: Visionfive JH7110 (NON-SMP) +type: mcu +arch: riscv64 +toolchain: + - zephyr + - cross-compile +supported: + - uart diff --git a/boards/starfive/visionfive2/visionfive2_defconfig b/boards/starfive/visionfive2/visionfive2_defconfig new file mode 100644 index 00000000000000..3d521f84c9a6c9 --- /dev/null +++ b/boards/starfive/visionfive2/visionfive2_defconfig @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Zephyr Kernel Configuration +CONFIG_PRINTK=y +CONFIG_XIP=n + +# Serial Drivers +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y From 7cd7fc9718eb816f9f235c6720e80b074cbe07e2 Mon Sep 17 00:00:00 2001 From: Kanak Shilledar Date: Wed, 6 Mar 2024 10:16:45 +0530 Subject: [PATCH 4/4] MAINTAINERS: list soc and board files in RISCV Arch added files for VisionFive 2 board and JH7110 SoC under the RISCV Arch area. Signed-off-by: Kanak Shilledar --- CODEOWNERS | 4 +++- MAINTAINERS.yml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index bd6bbf17e86773..f34087d548467b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -40,6 +40,7 @@ /soc/riscv/riscv-privileged/andes_v5/ @cwshu @kevinwang821020 @jimmyzhe /soc/riscv/riscv-privileged/neorv32/ @henrikbrixandersen /soc/riscv/riscv-privileged/gd32vf103/ @soburi +/soc/starfive/jh71xx/ @pfarwsi /soc/riscv/riscv-privileged/niosv/ @sweeaun /boards/arm/96b_argonkey/ @avisconti /boards/arm/96b_avenger96/ @Mani-Sadhasivam @@ -118,6 +119,7 @@ /boards/riscv/niosv*/ @sweeaun /boards/riscv/sparkfun_red_v_things_plus/ @soburi /boards/riscv/stamp_c3/ @soburi +/boards/starfive/visionfive2/ @kanakshilledar @pfarwsi /boards/shields/atmel_rf2xx/ @nandojve /boards/shields/esp_8266/ @nandojve /boards/shields/inventek_eswifi/ @nandojve @@ -437,7 +439,7 @@ /dts/riscv/microchip/microchip-miv.dtsi @galak /dts/riscv/openisa/rv32m1* @dleach02 /dts/riscv/riscv32-litex-vexriscv.dtsi @mateusz-holenko @kgugala @pgielda -/dts/riscv/starfive/ @rajnesh-kanwal +/dts/riscv/starfive/ @rajnesh-kanwal @pfarwsi /dts/riscv/andes/andes_v5* @cwshu @kevinwang821020 @jimmyzhe /dts/riscv/niosv/ @sweeaun /dts/arm/armv*m.dtsi @galak @ioannisg diff --git a/MAINTAINERS.yml b/MAINTAINERS.yml index 82b8a2f93445a8..8e2a398ef37816 100644 --- a/MAINTAINERS.yml +++ b/MAINTAINERS.yml @@ -2864,12 +2864,14 @@ RISCV arch: - boards/qemu/riscv*/ - boards/sifive/ - boards/sparkfun/red_v_things_plus/ + - boards/starfive/ - dts/bindings/riscv/ - dts/riscv/ - include/zephyr/arch/riscv/ - soc/common/riscv-privileged/ - soc/sifive/ - soc/riscv/ + - soc/starfive/ - tests/arch/riscv/ - doc/hardware/arch/risc-v.rst - drivers/interrupt_controller/intc_plic.c