From 95136cad44c4b1bcde948f861c80061d58fedb54 Mon Sep 17 00:00:00 2001 From: Lugovtsov Gleb Date: Mon, 31 Oct 2022 14:07:36 +0300 Subject: [PATCH] Start working on generator class --- project/Device.cpp | 3 + project/Device.hpp | 94 ++++++++++++++++++ project/Makefile | 13 +++ project/device | Bin 30464 -> 0 bytes project/device.cpp | 52 ---------- project/main | Bin 0 -> 33248 bytes project/main.cpp | 39 ++++++++ project/main.o | Bin 0 -> 35656 bytes .../hard_standart.md} | 0 9 files changed, 149 insertions(+), 52 deletions(-) create mode 100644 project/Device.cpp create mode 100644 project/Device.hpp create mode 100644 project/Makefile delete mode 100755 project/device delete mode 100644 project/device.cpp create mode 100755 project/main create mode 100644 project/main.cpp create mode 100644 project/main.o rename project/{hard_standarts.md => materials/hard_standart.md} (100%) diff --git a/project/Device.cpp b/project/Device.cpp new file mode 100644 index 0000000..d712317 --- /dev/null +++ b/project/Device.cpp @@ -0,0 +1,3 @@ +#include "Device.hpp" + + diff --git a/project/Device.hpp b/project/Device.hpp new file mode 100644 index 0000000..e24f4ad --- /dev/null +++ b/project/Device.hpp @@ -0,0 +1,94 @@ +#include +#include +#include + +class Device { +public: + Device(std::string path_name): root_path("/dev/" + path_name) { + std::string idn = query("*IDN?"); + idn.erase(0, idn.find(',') + 1); + idn.erase(idn.find(',')); + + name = idn; + } + +protected: + void command(std::string comm) { + std::ofstream out; + out.open(root_path); + + if(!out.is_open()) + std::cerr << "**ERROR** file is not open to output." << std::endl; + else { + out << comm; + out.close(); + } + } + + std::string query(std::string comm) { + command(comm); + + std::string buffer; + std::ifstream in; + in.open(root_path); + + if(!in.is_open()) + std::cerr << "**ERROR** file is not open to input." << std::endl; + else { + std::getline(in, buffer); + in.close(); + } + + return buffer; + } + +public: + std::string name; + std::string root_path; +}; + + +class Generator: public Device { +public: + Generator(std::string path_name): Device(path_name), channel("C1") { } + + void buzz() { + command("BUZZ ON"); + } + + void basic_wave( + size_t channel, + std::string type, + double frequency, + double period, + double amplitude, + double offset, + double phase + ); + + void set_channel(size_t ch) { + if (ch == 1 || ch == 2) channel = "C" + std::to_string(ch); + else std::cerr << "Invalid channel" << std::endl; + } + + void set_waveform(std::string type) { + command(channel + ":BSWV WVTP," + type); + } + +private: + std::string channel; +}; + + +class Oscilloscope: public Device { +public: + Oscilloscope(std::string path_name): Device(path_name) { } +}; + + + + + + + + diff --git a/project/Makefile b/project/Makefile new file mode 100644 index 0000000..5b34e72 --- /dev/null +++ b/project/Makefile @@ -0,0 +1,13 @@ +all: main + +main: main.o + g++ main.o -o main + +main.o: main.cpp + g++ -c main.cpp -o main.o + +clean: + rm -f main + rm -f *.o + +.PNONY: all clean diff --git a/project/device b/project/device deleted file mode 100755 index de852732b4b4f7da1fdb0d6d7e63aaba7a84bd41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30464 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 diff --git a/project/device.cpp b/project/device.cpp deleted file mode 100644 index a40942f..0000000 --- a/project/device.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include - -class Device -{ -public: - - Device(std::string name): root_path("/dev/" + name) { } - - void send_command(std::string command) - { - std::ofstream out; - out.open(root_path); - - if(!out.is_open()) { - std::cerr << "**ERROR** file is not open to output." << std::endl; - } else { - out << command; - out.close(); - } - } - - std::string accept_command() - { - std::ifstream in; - in.open(root_path); - - if(!in.is_open()) { - std::cerr << "**ERROR** file is not open to input." << std::endl; - } else { - std::getline(in, buffer); - in.close(); - } - - return buffer; - } - -private: - std::string root_path; - std::string buffer; -}; - -int main() -{ - Device generator("usbtmc0"); - generator.send_command("*IDN?"); - - std::cout << generator.accept_command() << std::endl; - - return 0; -} diff --git a/project/main b/project/main new file mode 100755 index 0000000000000000000000000000000000000000..6bb0db000d8a69fa78ffed325575bda00fe3ea49 GIT binary patch literal 33248 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 literal 0 HcmV?d00001 diff --git a/project/main.cpp b/project/main.cpp new file mode 100644 index 0000000..4fc2754 --- /dev/null +++ b/project/main.cpp @@ -0,0 +1,39 @@ +#include "Device.hpp" +#include +#include + +int main() { + + // initialize generator and oscilloscope + + std::string generator_path; + std::string oscilloscope_path; + + for (size_t i = 0; i < 2; i++) { + auto path = "usbtmc" + std::to_string(i); + Device device(path); + + if (device.name == "AKIP-3409-4") generator_path = path; + else if (device.name == "AKIP-4131/1") oscilloscope_path = path; + else { + std::cerr << "Devices not available!" << std::endl; + return EXIT_FAILURE; + } + } + + Generator generator(generator_path); + Oscilloscope oscilloscope(oscilloscope_path); + + + // work with devices + + //generator.buzz(); + + std::string waveform; + std::cout << "Input waveform (SINE, SQUARE, RAMP, PULSE, NOISE, ARB, DC, PRBS, IQ):" << std::endl; + std::cin >> waveform; + + generator.set_waveform(waveform); + + return EXIT_SUCCESS; +} diff --git a/project/main.o b/project/main.o new file mode 100644 index 0000000000000000000000000000000000000000..25190233ef18ac77a59cfdd24f73ae91db0ac138 GIT binary patch literal 35656 zcmchA4R~Btx$d4!(-wrL(DEa2B^J;YN|;F|e-t$#89JeVA!+z6OsA7+GnhXnlTx_C zDTHdr5G@|-ML?;F=k(rtuHrf3t?0o}6pGKeo_Y>f>yfKGDq2jv)+0XTC?4+nuD#aY z-|X4DB$J-Io@ZyT{jTqCed}9)d#`E#BEI&TiclzQ=@hcwZ-vZ*xF-hPhZdD>vGUf4 zqJ0mZ-;0ZU%k_N)?w8`aOg~?adkwBD^m7FFD6U%lT!(uMSG|62z`arDn{aQ&b)|k@ zh5J>w-lw16kNXF3wdm(o+^^R8Hr(5F{u+H>jeA1pJ8-{N=hxuAR_E90`+D3r=zJ&c z*Xev0?%g`S5%(UQzaIA+bpA%%Z_@djalb|9H|hJWxZkGpN!&NHF=te-PL2tKRj;o#aoL zg`>bMJia0yU)Xg3k1Tm@E0_}#@tukBy~GlQ9|)%Ew}4Fa>`Y9YuEZ3+=N5v+k-pa^ z+|@#QDPgZdC|;tP&e(?1iL-3^j`9a4^XDffj9j}ePT|ymviNP7>>9gFO^Jz0Tg&rK zPMa|9RsRim#cKT~$*1PGev?m1rLJ-7*qfozg*MJ|(!s~d3xcF-R}Z~Aro0_WjQu@5 z9IE>8gLL%7URA4!GM%jYU%o{q%DffgSD1wEYk=xc8$YX;>C%*N@TE2-Y}5< z`iAylu~ns!;>28WL>I?<;Yeb<=V))@vZbm|R6X!6w8Lvl@rOMpQFu-^=4<~9)ec^y zaq0pGcf);Zfddw~^tJI|IV1ioQ`ZFGLd6LjA}sMY&+Y=IiHnB>_(=QG9wP4hHph`$ zS~uPL9F5}ek{CO-xNy&#h0*D;dl2xe?z?B2qsC~hxBr-qbnHptr?FWS5FJ^G&UKUx^g`J zx&SJsRzUHQ#H#r8h)oinI)}*9v@-F==rn{L8H*pAH}yrgO5Jeba$1%sj23(rz;qHwVAlSJVkRXgti z!k%Hz7WuZRtDF!Na^2uCrL4On*2&tT!?N*Pr(b*yqub)^EB_{B-509-Zpivh=pw8G zdNbRvurBRrU;hExW?gz|ysK+N*QJ+MZ_V~+s+0^6)g9NZ;JRf?Y9yOZj^uOM!EIMwnOv7l4-MjJG@Y*= z9PRH{wcVcT&-OaAID=#df@C*>WT!Vs#^Zo>4`zNMQH>VFd@B2zZd;6Mk2}N@J&)sg z(s%0Khv1q_jIV=eIisUrn6W|%itkea_{>Vw&ZX!KLHxercmv==iYP=u;)R3g?N}bT z8dZII_7$xSK&XxIL~4F&z{Db}rHSMa=+u2`iA(8-gV%N^#wM#vIi-u;z}KOz!}|QS zl{>>$uJZW`s}QREN`>_gq18XGus$8eC`V-+F1Z$4UO^xI{gFSjrcWKl&D)?@im5`= zrn?j^o7FCPda-h|>!o6bvEv~OiIF;|e!7B#{-Hx0iQvUXK)GLU|1D)CdIu=kLUyT%pjXZl{{$MIdNYDLRSKLlHrY*Tdz|b{~Secf+OFf&8{Ni&CJ;%Bm!LT1= z-9B&E7{7Ht)@>M^*uRCB`1pLH@Kd`>irx<``x6s4wt(YXreE9nqS4V|bcj5z-7uAK zJm-!r3D-StsUt$^4s@g*HkLHNgYnAGg{*rkvE+F=bVX4=7(3PnUpx$7>?!rd!_e?B z#(UNdKGEG;j0>=Iyaz$EZl4@fm3#cXMLDKTAY63rE2rw*D#F`#0J?D_IE7b=hsY(Z zsOycD|2<@FtNc{R`gW+e&yO8Tpsoi{*C$KsdH^+fa^~&sX}(LQ-sNL`prNPRjncG{^@LzQpMw+@6V|7pJU$I!N4 z&$oUUX5nwbm5(g2_Rgy;EVRBfukvpfSg+3O_}K#MTa}gHU0}Vq5Qag}X)Dgd3x~>0 z)~J4dFYZ@Xwpusa&r7es{iezvhOEB|UGayIb({+>@GYtX-z_!cA?pd%3U57nN$9*y zc*F2~sPe-Vq2Chxbj7J(sIZ>m$jk+^O7x;y__IeBMvt@ZRbN|-+wrQeSxpD4J~?@7 zkq07Z(j&4tr}6ILh4^two2pEV#gB)ckN?&}>tcn71$GGiGX7iDn}4XHM@?s=KTw6^ zJ=4yXEnlgMXW(yRvsr2%h2gIhu;^WPcz66|tV{KNLQjv*l34W_dt|73rU!)UUV#r?` z(dODnZM3$wwyri-TVLBy+gRIF+gul^i`LcF)z!u7>gyWn8taMOY zLeC-WmBx;S3h`sF?MHRtszZswp~SOCD-usX_lM=1K7Q~I%M)+>Eb;8GD-!Vhv#(Sn zLWdI*OLx&X%o17gY@+bp#KgQax%q;pefY@>nFW-w(@i8o<2}caJ)+_UfofS*Uz-=& zUBN9H>^bO^*{`R_6gq@R-CZ#@aI7LRcF&=7)koHG)rssW+gp{|5XLuzBEu0Hl!yr~ zW`%q++NzK}Z1;d8yBAMYQNY+_#MZof@t)G1o(ezs4DsHh1InGr>}~)O2YUM$LrALm z*u*);ooe(tyMGpXP};-F94%gn>j8<|1T}s+3i;^n#o1{RkcRdgg$mE$6179E?pq3f+_Bs3#WyS3Jqp8N_!^Ud0SP2{lpa} zW)`+-6DKm5fqA3nkTk{a1c2>!!rto)NIQ)8K!@@RRAZsdI5MH6%Gs4UjmlsEv)d0; z%c6D1rmMEU4{JBHv3Z9if?N3=_PBg18u$)IK=PFg!mLLt!{X0=*JFoJ5z`*16YIWJ zQ!$2xsU2-Gc{Tsqh0m$H|9VP9)naE@vWKMUVq;|pG7`q_nYPq|!Vv*f#D*E;7@C*G zQ9>{Kq}6S0S5`0Y*)lqqAFYl?YwBtumq$m{WAxtI+L}mgg@zULJpAPro5TI;^*t6g zqLakJxR{pOH!E~^mlfKvICTDL3l{D{r@R0-FD7h&u&iIS_`?-#r_Ub+0UlX)6>+4! z{A0>19#jN|H*|OBS|xeGqog|D$iEm5yqMm=MVlNM@v(5lYqlQJ@Y@yBe}!FMy6~eR zMM%25qOz>BymX1NaCn|e_n4;pk{{h?Y&zP10m_-Ui*an*>e}@S;z+OK^4eALOPB66 zE$1aay60WGn5KKkk8aGSqg`J;fn6+rNta)UykqzEuAawqc@jn!*?sMU;jww)wevu# z>W^Syx`cmB`)+dWxJs7~$nuI_ML_;dx;)5^i*@-<&=%Rj_RqO`p3rnPwA4ihy#ys>`F$K>vJ5m-GFvQ=W18AJgS$%JL4k{F}O*-)|lMiq($%mvwo)Ebq7ZS>GpgdEBqQ zjcz}(`syDmRlmalW|?A7IqWO>{ze?XUG7w6XFI=B1@UCwXNZar-U z^y9a6`8#EKr_E2uFENznS--=#nbH)tmX(4)!gfz6DGOUXDNvfi>ePTA&Qk=XDXdNv z6yy9#5)yi8w@G1(@2E>t*lwwkg0MZ3`QVWfj6hhOVkj*NTRhcJn!@UogCEXQ52Yz= z@dQL^3ab+le)y_V5J*^^m?$j@+cQ^5LD*_3!3cz{)&RUM0FMXYJdshF!WK_xl%}x7 z(;B5IY^jl>q#$hZ^hRk4TWTaIDF|CU)lr(l*2Yp0NZ3+6t)wh$@#IHo3R^dqfkY4iId{Qv7`dy0Ov?1;}NzL@u%dN1I(_G z2Fak)c-NHKx%31EnS8GN*eOck|c*wON(~H30 zUBMGTb~2uNH9-EqDmiX{*{S&&F~|AY(;k4|AAobNT_*aST8lu(YXS7r0eCG!#Lu3? z0rhGF{W3A0a}CV2D?rY-6usN8xt3vCgblzlCyFiWIUBY%D%>5w2!2f3e{@Vb&5`pKZw{I2#&Xva4L@ONMcTPEgx z?wy!A1Ms~HcjtZXp_qQD@J{;yf3rGQkD+jxn5Wigd`#hH^s+4Ov6%iL06*(=%4xNU z@YmGqy#aW$!rL5rwdcXph5(#1>6y@Al9^{Rir$^C*J*;kQ@A_NsyzeCu&DNHms11q zB?0($;LEIQj5*GV^Ro)?aBx$vUk1qeeE|I`OhwDYdS<7VxD&Xa{VxRIXMxy{eiOjY zS;kwKKeYT$2GIZS0Q{UYXs5ewQF|}Q`VeqGy^X&Rb?6ZWDlIvS za<)0R+T-ErPK9S2+^jr42i(s;&jjEVVDzJJ3&3{=;4cQ?=bYm&|F!^pH~{}@0Ddq4 z|EB=_X94&hiDM1nO$*NTxBtQb+!{z_2W!&9!&dUg!x&?}Y4 zc`qVaoa(w8PeX&r)L?J2H)9|B;&UXMwUVpXZn(O2Em%gkBs-E63mNMh>{DrN_3`!H z`Nm{2y<-PI8p>m29qI0TG@9;9<&ybaDw`kaNXNTV_!Ex{3GMaq?R;!rof*vJQu(3W z9ArjoH;kmS{ry8DX&lX)gCN%$V_&gogU-J0(b{Ay3`{5cvb~vH`EuIoJG$$V@%TWx zYYj4V;p~kuLORz-Dc(kF=+6vp%lE}WrCKVP+%`CBw|H^uN9eZ84HPA*1c z$z*;gNv@G3iaQ44@!K~h5oOZ)W{`j#ClTWVR{IS#xy;rY=-ja*Ih@Ij3=JY+^LHh; zM-&$Wsx4~AP#F%0mU@vA+qJ|svlkf~$=;nQ*PiSSR9QL0^%-)G&!UlJc3`-le%s!e zhU=_k&)}U|^xLk?$ml?(*pV~sk9KW2D5O7##`$1!E82>pOfRo3yO+=2f4VWd^QdOv z2ofCY8mz24Gi__{x>5H?gqQZ4E2x1 zJFn^L9_mhV#_rC;vcMkcW1p7Rh)x*nO@tNdpgJscfNn<4t50K&cShM6v6vyftP#lx zf7ib3?1Juu%ePN>KebdB3G`Tp!+W=74L)nVs0YZ@RrR3KUTe?1 z=21`M?sBfJ{HaU`DSz;Dg+yydGWn$WApqJQXY!9M!n8}kVzF6QZ6gzT6SH!+s6`D6Os@J6B(Z*zV zawOBAN#~Pz--DMXcX6d3wby^Mj$hOP+~vNEXv}5MP}{LhnRBGfQ35JqZ+2!MZEboS zkekNYODXPi9T0~7{>CI`iSB%D1i$pWGnMO2X7lz7vt&NCjV>!AZny~>PUSLg_lh<+ zQB)Kx@w!GCD1&&NgZFhRWZd71;-w)YAYxBuO}&^$QtThB0DDfoYqI@D5FIC4-<#d4 zJ5o}0B1DiKMBqRSJ3I*O%(kK2T_+aTSVHdvCFDgo8qL8f_`e~CUF*<5GL^=!az|YA zbSsEnhoKgmJpO(*IgGcjXs!;n%~+*~3&BBS5b@nRr*ZJN-t;P*YE*dev7(pIyCvJ5fdQ1 z+TB>@u%@PEF4pyXP>e2k`bT*_G|aDK%$dN*pEH^$o&xR`DeI3wK9ZxwQ+KL<4K z_2&*jFa22%@<)aIhXnn0f&VvwOFv8soPEXE`HupZe!wr8RiZy7&T~^t#D{SiIsY#3 zL4lth#siX9&IJK@M*!X%fZrwX4D=X#9ul~;|8D~DZwKJ!Otjbj*8}LoBt-K1=UjnH z|3m~X?fgIheyzaUp~uvBgTQ$z!{B2YXY?h<$S@@I0kx04{^42_g}1 z!DVnWP7`kx`2EN;5x*Ljq5l*?B;swj4E_y*NM8BR+pxmhkvH@|61Z&lUkF^%zb0_m zzS2K(yrRua6}UKF8NKGj3+=pC;2d+9h)X}4dDY0_oyp9w48u!k3j|zG@-+fKswAtA69f98>@RtP6 zQ&@)nPXYM+0Drzi;L@KRLXMnIw+Q??q4y4f%XZ%>aLP1xeq7+U3H&Pp=jka!KPm9d z0{@=IO?$=k^AUl|_IgF*-uC*H#=Y(JuYz8-*XhDKTR=6C8xwd37?Q6#Czp!CNFUR3=fwv%U^gbzYSuZ(%N&lF*qMcICzX&}wr{FlS>%m;Q*YXHyTHvnMO^kr<2T~6zB}>Ee!zK9B z0r+c#FV)C-8QG&lB^7 zY!|tnl=K$~dfD&H{LK2wIOp1ciMWh&GcFRB?IQigG2i&%5#*UjFXR7<3bpZet`NA4E4C36^~$)qNTD|VAo50Ut-vP)P8*mgN7^IDE3Tc49BB{NoCcTi z%vdrw*FsF}r>EdL#s?(!O(yF71TI5AOc06q$8Z_^Qv{KS|0OPi?h_X&7O(Sj|6_Y&hs`c@I?X-X@63FmB6b7 zzF6R9e@gl@1l}R&&lGr{z?TU84uLNfIRA|gCdxlcz|H$! z;^zu{TF7CUNg@5f+dB=2d$qvN6L^cj&lmV+ftxXe#XAN5p9H;p?@GO9T;4C}-zDe| z3H(BVe_!B~bCWJRF7RqWzc_3^u=w2qf2Y7HC#%bv1innrw+fu}_vy0D0>4Pm?-cmO z0^cX_O9VbC@b?J(6@i<%Llx^z%X*o$5b;w4PCGePGA$SQ3L8>?69PADMHci4{4znm zTi`1NzF*+9$^4$~kOz0hrJ9ku2J)#bRt-)k+V?(_%VqjgHTcApw`%xJ)2i7rGGgJ^ z1RAZekDGdap(207pqOnk_q0pUPZ+#{%{iN*Uo+HfOXD-|j&x=?kFWOlcbskM{GDoIdhKy%5#&zrqpl*p zxt}q{d66dkOa#BPDE83YCA+7WPqN8Mu(G?@2e1r7bl zJq#(N{s$k4wB5*GnkQ4aT=jt4nL*K<&E%6Uvg_Mg`dOLY|9Oens-EEn=$L`g?MQo_wPnPi_VyL3U}a{ z?*a98#kmLZuhsku^_~2yX2HKv^O<)Jd}lXP`}02h*Uf_e0Uv()WTyJf zzEt`@G7J8FKKi4x;D6GGzi$@&lRo@>_d3)1AJ+V`{&ln9f7ypWHVgivnqS5*zcbC$ z{^LISn`goQrVoGpEcng2PU*jfS@18_@5f~Q`JHN}^*7(+rT(^A@GsZ;B|qOm%~XHP zhd(z9e)E1)>c4gt{A+#mH_n3pMj!s$XTjg=!#^?${$b58+yDMq@bB=^&u>RFZNCS6 z`1u`Vru^ppv1~tnubL_UV?O%%y=bQV`+fZP&@A|$^x^0Crk{0#k{^>IxW3*t-|I2Whcr@?w`7W5M z^lM<`?DUA&AdPFY44L|U0A&X8d+EK;98-zS=Sy9YjDDV}k;%(%=4A67!O-@tvvUy* zu>P#8xBj;R^V5Gs*Pq|~Wb*1~O!@H-=#NrwNM=ndp^xH0wV$W{4{Q6YwL;p@_v&8z zzYL5d6(0UxO}G?gGI{O)F$xvGBtm|N<~QFVO|j8$o{u6!esBAI;uM?0{Ck#$-eacq za}@a1|G;{i!~C09tpDY>jD8cp5hz#odjzl2ANl0B9ZDpvOa;yFwf|<#Z~om%!{bq7 zah&zD|4^sR(Ww>Ee#WBLe*9-gzV;94fmeP5q(m)_S(O@K5HYX)_iKLh?|o`=%WHoW zfS>*6cG(=}J0I=m`q69u{aU{_{v!J0sQl(eiC+7E8eso=&CflDOkVr{CBXj08*MJx z|2fup?fTk!uNfNLBa#aA4qniIEGKu81|55P!wf~MDo9VdbrTyH0dhLHB!2a77+l+5#KfmL#PG0-BYyO99 zG0tDF{WpW(&;GvaZI(TnllF5i@!HSdJ^1;5!5KEAzG*3?{^!5D>u3MDn(^)8_Z0B^ z**~rAk7&)bzZI9){>uXNC$xU=_~-TCdjj+?zrj{)##!ob^U=Rr>-Wm-)B3+@i*f$4 zt}@*eVE@H>;JZW;BTrw;^k4x0wVHoG5+m=m^CRH*^M8x3zw|$sR9^p22IxPa^}n6} zzY(B+*vJ1JKKhqno#GdNN3{N(;E~B&|3%>UtN(7Te}`sf`>(;}t^aLWzjyrFtPiQY zD3v2$?Row}fc-0$+JrTp2KPK#pAE3z{1d^OwLaRi?Yq9Gf*G^>^a(>aWK-kutsG-=x;Bmw{SJY5YgP@7I2lT7N=wQhygNul|n(=s*2z zo6-FH;#y2e|0@LOUwD(vVa_d4Kc_^m{-Xi<-+zwH|D1hu{(9s0=K=bMZ?;+XYfkFt zkm}Xn48YI-AwBRh=4JA>e+>M7{y+B?n=7H2sh>^a)&GeA{cE-U8qIHRUi}jR`ZsI+ zT8u^gbct90s{#7&){J@>G3ra&pZ{LDpZ^}z{ET^-y!Lm3-_L(LwEc4Y5yhL^)-d&+1x)5e&s(ypzp&z{_8`T;WK_c zpzRNP2DZa*qu;3eJEPyjzuQOu?LPW{q4k@7X5=2x`d1o2-%b0O`)@SAhs>IHz8A5d z4WB9fGx#xtm#oVcYW`|NsPD#q20jb>T*~xR-&(HuUt!~j