From 553ae2a3f7f0b48fd430f1d634de76c18baba15c Mon Sep 17 00:00:00 2001 From: Robin Davies Date: Mon, 15 Aug 2022 18:14:49 -0400 Subject: [PATCH] Initial VST3 Support (disabled) Disabled until Steinberg licensing compliance can be sorted out. --- .vscode/c_cpp_properties.json | 5 +- .vscode/settings.json | 5 +- docs/Gemfile.lock | 2 +- lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.7 | Bin 737408 -> 741848 bytes lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl | 4 +- react/public/img/VST_Logo_Steinberg.ico | Bin 0 -> 254170 bytes react/public/img/VST_Logo_Steinberg.png | Bin 0 -> 113260 bytes react/public/img/vst.png | Bin 0 -> 12657 bytes react/public/img/vst.svg | 328 +++++++++ react/public/var/config.json | 2 +- react/src/LoadPluginDialog.tsx | 20 +- react/src/Lv2Plugin.tsx | 28 +- react/src/PedalBoard.tsx | 2 + react/src/PedalBoardView.tsx | 212 +++--- react/src/PiPedalModel.tsx | 82 ++- react/src/PluginControl.tsx | 22 +- src/AlsaDriver.cpp | 3 +- src/CMakeLists.txt | 287 +++++++- src/IEffect.hpp | 14 +- src/JackHost.cpp | 244 ++++++- src/LiteralVersion.cpp | 74 ++ src/LiteralVersion.hpp | 45 ++ src/Lv2Effect.cpp | 167 +---- src/Lv2Effect.hpp | 55 +- src/Lv2EventBufferWriter.cpp | 2 +- src/Lv2HostLeakTest.cpp | 6 +- src/Lv2PedalBoard.cpp | 9 +- src/Lv2PedalBoard.hpp | 8 +- src/PedalBoard.hpp | 2 + src/PiPedalConfiguration.cpp | 1 + src/PiPedalConfiguration.hpp | 3 +- src/{Lv2Host.cpp => PiPedalHost.cpp} | 285 +++++--- src/{Lv2Host.hpp => PiPedalHost.hpp} | 319 ++++---- src/PiPedalModel.cpp | 110 ++- src/PiPedalModel.hpp | 10 +- src/PiPedalSocket.cpp | 49 +- src/RtInversionGuard.hpp | 69 ++ src/SplitEffect.cpp | 2 +- src/SplitEffect.hpp | 17 +- src/Units.hpp | 1 + src/Vst3Effect.cpp | 885 +++++++++++++++++++++++ src/Vst3Host.cpp | 689 ++++++++++++++++++ src/Vst3MidiToEvent.hpp | 159 ++++ src/Vst3PresetFile.cpp | 86 +++ src/Vst3RtStream.cpp | 358 +++++++++ src/Vst3SdkRepro.cpp | 49 ++ src/Vst3test.cpp | 149 ++++ src/asan_options.cpp | 1 + src/main.cpp | 2 +- src/vst3/Vst3Effect.hpp | 83 +++ src/vst3/Vst3EffectImpl.hpp | 286 ++++++++ src/vst3/Vst3Host.hpp | 70 ++ src/vst3/Vst3PresetFile.hpp | 53 ++ src/vst3/Vst3RtStream.hpp | 109 +++ submodules/pipedal_p2pd | 2 +- test/Lv2Test.cpp | 2 +- 56 files changed, 4840 insertions(+), 637 deletions(-) create mode 100644 react/public/img/VST_Logo_Steinberg.ico create mode 100644 react/public/img/VST_Logo_Steinberg.png create mode 100644 react/public/img/vst.png create mode 100644 react/public/img/vst.svg create mode 100644 src/LiteralVersion.cpp create mode 100644 src/LiteralVersion.hpp rename src/{Lv2Host.cpp => PiPedalHost.cpp} (80%) rename src/{Lv2Host.hpp => PiPedalHost.hpp} (71%) create mode 100644 src/RtInversionGuard.hpp create mode 100644 src/Vst3Effect.cpp create mode 100644 src/Vst3Host.cpp create mode 100644 src/Vst3MidiToEvent.hpp create mode 100644 src/Vst3PresetFile.cpp create mode 100644 src/Vst3RtStream.cpp create mode 100644 src/Vst3SdkRepro.cpp create mode 100644 src/Vst3test.cpp create mode 100644 src/vst3/Vst3Effect.hpp create mode 100644 src/vst3/Vst3EffectImpl.hpp create mode 100644 src/vst3/Vst3Host.hpp create mode 100644 src/vst3/Vst3PresetFile.hpp create mode 100644 src/vst3/Vst3RtStream.hpp diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 28cd883..998791f 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -4,7 +4,10 @@ "name": "Linux", "includePath": [ "${default}", - "/usr/include/lilv-0" + "${workspaceFolder}", + "${workspaceFolder}/src", + "/usr/include/lilv-0", + "~/src/vst3sdk" ], "compilerPath": "/usr/bin/gcc", "cStandard": "c17", diff --git a/.vscode/settings.json b/.vscode/settings.json index 8f4a4b8..e151156 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -90,9 +90,8 @@ "span_ext": "cpp", "string_span": "cpp", "util": "cpp", - - - + "charconv": "cpp", + "valarray": "cpp" }, "cSpell.words": [ "Guitarix", diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 769b5c6..39f457c 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -265,7 +265,7 @@ GEM thread_safe (0.3.6) typhoeus (1.4.0) ethon (>= 0.9.0) - tzinfo (1.2.9) + tzinfo (1.2.10) thread_safe (~> 0.1) unf (0.1.4) unf_ext diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.7 b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.7 index 207df41e063436d9f086dde7f834152cebc1c3ae..4a691c819ac58aa22f04026d58667b1e2fe03c87 100644 GIT binary patch delta 232047 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

Ln)dx#kN;bvMEq#%Dhl$ z%DhneY06ZutDZ7f4MHL)2Qo~LrkwOb`H+(sKY_ALT7CkBS1Ue&GD$X(GKy=;y-#dw zLD>%FLWWsWQ`%33lEDFXQ=zn%)l;GDl`B)B)RyYgpsc*EH0nQ1Qx?=DB7$;1!`%P7 z(rC*xD5Lq#!Zez)>wn3U(`m{E%WKoY9F#fJ!F1J_W7BQJ)FLDbEJzI>VGhxlnxBFh z$GNnhA`Bz`PZ1_Yc7FUWwLzRGWwhO8F6HoTkhbC=>Y-pg?KJw}GK- z5_1L=S}an=Tus?9!&T3keQ~@zeP4QdAhR!tp8PYly{Yv_m|HF?)r!xAHiedJCNx^E znb2stW*>Q6p;}!wH;yh)RfH6piIk^HJ?ElAy+lEz&TKM$nH5%u;=GcaHG$uAk`JcTP(w>AT_KCk|$F>*A?Up z$l#!YR8EF!r;&#~r>n^G*N%BKtaAYm5OXfzt1@^lU_6Udsl5d2)^t^vA6(TB{&b#Q z@t!6ef;)SJ`R92hYO8tHOj524oCh&N7R`e=T~5rSNw|4c;^)&O3{gnwPQqW7LnzB` zL8>g%>UmSMMwq-j;BR5RnUCg6IRAJ)I5s+e0qz-T_XPsZlu4wFI8EF6g>AoNq9TOa zI>KzIDG3XpEazJv3!t#Rz5vPz*|Y!(^Gl?REmu`pHe9GFXP_*Ba(IM!@;4>RN@Z!c z1j@2MluDi@wqY6&7C8%2ON}&lo>MBFTmoeyEz(jbm!#!VC3KI9*E9$RkD6g46Qg3@86x%#ZqD0u~x?R4@h zpwN)5fYMbCu7HC3e2qsxqbS~zKC7xcWqEX#q<*bkI>{sw0@-_{`LaeX{@NOI_^Zk; zzVi1qVA{5Ci1Y7VmS?}A%fzKfmO63SFQ2!#pIlRs^S-ewA><2?hmJHKoKeC?Wg%={ zuC&U6NlTZ7uybW~7M11ECApPFWf`HEQs-OSa*YX(Tm`8UN1F3BCi7b`2WYCk1w#|} zEtuv~;X8E3zrMqA6*OhRcbbycgzyN;ypd*0O}YIYl*2StE1|q0udRe~UZ$^vf`5@R zc3e{Sk67huX7zFDsV=6y8+lS!jWjQuRx0&h#c=32ez^(?P24IdN#OYAF3R z#j{#d##xklp49Cl%?X-vW;K+2g8uKJ5cGc!g`od?ChY0g zHBITh2Fh7tr8Q96$Pa6v?3M>>pi~!gtt&a|o8MK5Sw0XFF>+rhC1*{Gd)B&IQIGbo z1#p4paUC`O%0+3sjv7Bu2Csv#M^>*xj*f~T*Vkz|9ByS3=O}Z~DP@y3>%m;6eym3h z>c@KIpnj}}LjBkP<@!Zs+5Q_erIJO#CefqJlA4mc0m?N79~+?1({F^bQr_4Ig?5&d zFaSvEoGA}2OMS z(toqxCM!3)sxii}!m2xrdN+e%)VswR^M8*e7eY!U~Wp zTVaio3O~SNf#L^j|At~I+dnsQpZkXL$CW>@a#mSx|L_=7#3xmM1hY_j{s@LwbAJTG z2#b^vtVN32W{ZTy(-CRyD6^6lssFaetZ<*q-3E(lz6}=L$acm=Rphztu$KR()XUs% zvoQM>nJ7Ce7?0`jQvIEx7vW}F|L9=e}uvwUWEv$Shi)OX? z=`kzXC&Pb&MV0vp7FFgaSpVV;LRdG>DY^RYv{{%vAJ&agW+~0uu=6pij8Craghj`) z3l<&AE?A{yCaI_yilxlncjP{!=%@Z>;QTJX*{kk$RV(86s=(lp`y7crN!tyIA>?jQ z-DK}>P;9pQ8Lw}sQI^-ITBDTCKNs@)TEPXWWk#Fbk1M;){n^zZu)L42R)S;DzlU0M z_pCg>$JM~v3bd!^ltEKjW!<~Q@p4=SLNbXy|t=mco}4^;Tn45#%-QKsCo&)<3&`wP*^)Ph#aCr$Q4>mh^pLpvoa z_CsqbS4bJTXCC^)z^VsSi}nSt`{w2a7x>;9ZJs`=>(+rn$nXXr>-uEF0gw*)^8m<^ zQu!cAHfJ0J*&C#_j=T7vZY1vnt41L@9s!a3N%PH;^elsd)q>Ey@v)Z^)b@Ab*e( zq>NS?8Fy482U$pZh>fGoJ{tM%(L%`3ULafeWZ6-Wqvh05kZy@N2C|R5d<^7;Q%XuX zrj=iS@-wvZd8183W3L`7gpGX*Y-^uXJPwv&(Q&X0i;jaOW*}vZ*I1N~mFg#4mHYvR zPg~&ZXmiP7Wr6-D3UR~#4Y#dN7My^~0>}xtEP(t9mj#etiP5SkuD3XTc`>b~2S3e| z*}tkfm3~2+{h37byCC2Tqkm#~SHQB=zsbVfTss>QW(q1XKS+}FP?$N^5R)|EH9pg_w`Ao`|z`BW5t%U?Cz>8htArF z*d-uR=@ia^pi?*pf==Na2u2vBjP@Ea@OMf&@;9w#me%vtG3ML9DEoE#&4z}52eh|O zJih^*DA~UOEhYuO0exGZIS=&OuS%{V=e3@PwVs2-41r!0*LzoY*gDJR>x6UxRGoUwvS{}vNMjd@|rp^Y)?=||PMN_G6uC;hMTfX*`i zDi8QYj$GvdEEZqG3TuxmD|Ef4t+3q^n3{fJjCp9kvcfml5IE1OieYyUIKwCBuMy(k zJSOpf65-Q<0lWy9)u+s1*`lS0!cx+a@ z3GWrzaT6XB;kW3;8!4Vrx%ensW$Aj$-;2+^WuxK}K~3?=p6&}n^}GuI30$TWVX|$kd3Udt?T!r$uL5uyvfTm5K;RCtF%Y<84FrxzXn{2l z(7;v&TG_RhvbcHbSaX&J&MmNkp>+YyK*9om1Zj5xHk6ikQFfM$A!U@c1-z@hyxgdL z>G>9u?)$y5W+TmvyJs_F8^fIKlTPA$WuzoeVZ5F8s0nxEcbE3dxypS04E$K<^zByWY`0MJv4B`0}ZTY0a1GPSo0$d zjCjZhej#I(hls_(@sT{qk5Vcqz^!BD5`9o=xlbAf zxStNl=hZ29azHOx8UT$2BvM8Tg_DYbnzzK_;kAdynrWIhJkaKa4T6`&=qV5$6S9Hu zn2-&EmnLrnxszkh9rBB(v}^fTJJa!_s;GN|+*U=s7i1&j{sVHAPwF^9vg^VLl3f>0 zknFl3WsFrwNpNWq?`V}BndYLOmC8e0Hm}5Jcx!#~jSF6`oO8izDP`U87RhUFcoj8o zmRs`@iz$^$Wtz`w-gURl3;P(}Mn-xDyx!8&fcKlsG~hieM@U6&|D}-1T_39~6@%T@ z1jfK%8x=PLl+P!NgF&%^5e$kIj1W+)V1yuAKZTO1AzHLSmS~i2qfB$$Zl&s_5Sv%x z3wT?7k`xM${Y#Y;GWBJg=FTO1tBvN-=juf0TK_f>Kw9W}5vpv~MwYy}&%i$;Cir%E4lw zSjQ|5s-Ltg?oKXs>3}MU;tuf#mMPZYZ$@#qf6600yf{c|>%>emR3pz6cULZMRYa>B z3jGOD5BMZ59DXI~7!Lm{86OTmRCbUuCMv!dCA9h$fRH_g%^a99yV!Bcwi%51U zkRMAyDR;xbtNWy0q`RK+j%L0asZB5m6J%)<9M3eTXztF)LfqKD;GXqKP-(bd%QL0n z){=KhBdS+ckTN1P789su?XcGVTBiAwMmCQsgbe5CWyb{~rznserHNQbpSnDTdyGY{-g+HZ(1gba0$W?Pw0u1C9{4*YAcREcrdvo_$yz+@IX z24+{yJQkz1pNsaDEG`ZZJ+DT}WXmBdrU8Y!eVB*m&?l|59kJn0)WQXLi@mm>W;cy-)ui50(fe!A*pcC(kCh{qy!DjT3pw1j{PX3jCU& zTY>G`1nJ|<``eVfafvi7{t;YweS~#nOQ%Gru`)gpVP{KrqPt1p{XG&`4sZQPQ=632 z2DqjT@ZmUfjs{9O8yMOQpfj5{kN`4g`2;}bET2Go<}67W37WUz30?lVC>&ivl|NsD zY^<3PNj5XKEzIC-X_Ex=RT+^4^H*7y1hcUekTQIG9%~*e9n0&&PqCmBJ|Ap6`J>W& za(NpX{u0n4*|M!Xp8DWtc~~A#9WGB-fXZTP1*knWb!7#udAbF}`}x*kh6aW`X#+!3 z0fuKw^Cyv#sO3qdBx-pQ9#IP^BT(~dR&@J!?+>i#wg#D*6>UW9n;=SM%a)2Dh+8Ux z$d>ArK$MdKl|U@``LUv^j<3}^=8rRTeo#6FRknHI@4<`CmWGw#5xP`{N9a-+9-#{< zqlM;GtfE!S*DBr^XQpZ1@G3Sh^dop>vSm#bc!Vxh;1Rl1g-7U872dhsO1=eEH7~d% zCTr|T4IXbgHSb<0_x7K*G zrH0?GLA9%tEj4R`M9G>U&&iycAnDyn8QXR#mE&q@e=fkEGb|GAS&Q-JZ@Eg$cWa@x zf2neBNQ`hg#=j+;t*sUPy^ZxVGAc)SM2Ej4&PlKQjCuOwJ z2=t7V3iWioO^i@_P8)B&nWK!CR?mip{|vNIw#=#rln|{RP~K!n21*B>4D|9(O0LXg zt!HbCN3kv$Z-!~!$z+N(C0nBEL#Zt7>O)y3W9mZ*lOISKlQbph8C|SpNAF7?WRWP= zjpNPb*-EnR&p>LCEmNO?^pos(22xuIXaH%sG;IK>h9;q;sI{!>45F)Cfx3Z1FULLhR893b98c zTJt})O9PYEe2~TrF|}GXQR{+M>&|#{vPSJOF?g1LlFu<_pQA&z7>$9h5VJARnliXC zqOqVsDzt=RdZRPs*H-RmDb_?gY$A^;NtQ0pqXwI;NEtDj zvj2Ha>0nXlIF?T^>uXBYHc;Nnmb5ldUXqz@ps@SB4HS02w}rC)2c=T`wwf~3qR?IV zCYVPyDwP(ug)%f-PPWBkZf}*+?eLiQrCmEPM`ThvFx@p~XFGQTHPyqAZ(bx5coWPI zH74!_99fNd-o}wXB!+qcu|AXWFCZ4*Uw8rDhZ4}9UgzOfj00v6{L*0iYGO@&}<&;pq=oVF24H{%*`8= zt`Qy4bu^JvM^J3-?+EI3S=SL1t6rpx6pc!LQClp!v?{%DkJ&?0Ccg+}9HG*SP=?8a z7xAS>xl*qazQl4@CordSmEl+Nn?H&jPaR9KP}H&V9@C*wVVyxuBuMHEDqi02j6n0` z+s+8YDiZA_L#gY%dbHDzFTDD$#qad#+0 zCf%Vh@9-)V<{e&zvNT&2(bQLM3JcA(pv?A|JJu>$&cEtr=8bOgH7FOQ-D^<#%b3@o z?35o!MYU5DFDA(gSvh*2`?mO(m?K{Io22XOjD#$6Sv^PmaU6L`woHB<8VfhCLn|r| zUWdjWy&mr5@T)#$;EQ!q{6rbu!(H9-pY)6Y#g|K|?s|Ug5(`_;Q+|5D($vEqbJZH9cf+1oFNIErTle+iPq&$mM0|A{&Q!jhWZkn`=>w&AXdKuh z@?x610h_cZk&HUF<)K*Sv$i9K>>Rz%2%F(I;juIfQ(5AALs(05(i;LpvfjwTkgPWo z2oE;PL#`UbAy{j_4d2khBt|1lV}uD=np$e2Iq!R=mWS(s8?z<%4Nz40H$bt>-3PU( zCw)*WNt2fK(WKTEDH#KWElsU7(QKhf_qZPDBU0}Rsh9NY3+b%P?+XcMBV}yctYnHy z*Q7xfsU|WNTbkNvqIqGplBqw}1Gf@arbBYek#tDoq(nb-zaSm^VV^f4J+{x8ziZvx ze*U?@^Zfv9C#rlCz+&n0CV*`JI%#q|~$t4hna$hcyY(qYtFy6w4O=|ERDbfURym6HG1TTt?{C1L;+RyhYi zc}qqNfWkI*Ql(x{6o&UR{KI>6$&w;(tJc2B+y2(R>)W*UYB2EpSZ2(qByYo`lDrL% zO7b>5D#<{ky1G$Gb@g3Z`{@I9YhRyNbFF4^-bAyQ7H$7P8yemj=wXhZ83dFi&OtzV zQFjnfUST6;OwrKWgS4ut77tZdO*Fq*sZ?$M4yqo{mdtmcu*&%k6!z%91BE^M|AJCm zQ{MfTZuX5a`_ji*B%1y06U`2qwDVt(@~NrsLSkw2U24U(4f3yd=|PxyB5CZ~@K{UL z?q_KQk54rJ{7wnf>OC-LIfLXqFsx|4hd^Gr@*dI1pX;T@V5-Ku8q)J%~ z6OGB`#=r~Na&Isg7BT+~<|*m-Z}j>^mXb0`Y0CM3Yl?$+XRT<&ImxV}DNTkzxtuLS zhCpHEatM_Dyj28+*|VWgR}vY} z%I$SZnC>5_N|E`2yDF7p)?IakKoa84!0W4wesR{T%?JSa)emj=oACvoKLIhk5x{N@psHgVY$wZ#}-)ng?ZFw4a`m9Bs{7Gi4El(ztXynO+Ld-o5%6fTj929yg zQpRje**4Cm)bjMnhjL?*xqgMxDrr2FGRQI>3NxhRp)f-_9ttz06QDG*Wtm`8s(AVY zmnldM{@8p)Qx;5sl87u5ps*h8!C~&MmghY<%qudUq;Y(;QfZsV#!$kwz?Aveyt`Zr zGttf7H5_Fk7#w9H!r&+qEk{`;#U@#fqA_hI*_fw1eY%0E^|3iqV-|B`U?m)75*Qri zV=y?%$LNHkkcy5|6mL-qC&*Xad!8!num%FhKUULE`MeO+Cj)GYkIiQ^w&G-aR1o}R zCX+_UIhhA^mFbgtz!BL!nFl;0MW^5i8&>(X^*V>+3Hh9~2;A`f?Fng9{GPCQ3X;}B z(ka&XXQh<(s_~B(65}5)cI&Q4veRoTj4R|J*;^l*?=Mq!tN00+y2$eh@-T?|1bKL4 z<`XE)PEUn$Z>6$+o2fPhSGWTu<6|>MQx;E!QXgTaLP?g$X;9b_FbztKOd@5>(v+Rk zYznTBShgT_+Q;U)ue2=Fp)^94=}->I^yyGumfh2#uu}dhl!mq}pV|~Wp*55xADb_0 z%HmIs(5C`=bA+yw7~*FYk)80JTM)S%7eyS%7eyS%7ey*=V)lTU}7IZE+~>3y5>)WAn%o zrPbouP&y#aY|Cr1r1Tu+HFLn=HFLmp*O;AiYz*Zc9?u()lg;-vrsC(s@0Md)$07X6<$T+`A~4Q`A~4Q`A~4QFQ7Eklr~@36g*@cl-85Ymo;Va7f@1>m_`k zFka_=Tx4FN!q>ipgs**xTKF0%BhHrROIsdX#F4;T zl#|V8Y zt&q}7m7^^MgQG14(_LeBF10Zfeg`niaWsvo_!XG<5aug{!MDCb7<}t1DEQVgDEC%q zVV2pHhMqn{q4;niTbN}~h9b-|D0t0sD0t0shCTFmq>R~`vTeCNs;0c>K{+tl+_+Gw z6t@D(haBRu0t(&s3MjAgflesAB}yu~iK2LmQZ_-U745zuOWJ;2sBhQ~_QGWIHI0?8 z?QlQ%4$hsCBYU`;L-}0a;7|{iOXF`Cbh6i6S(xoZa`$lxq@oq#W7X%@l<$vINSScR5^Z*4>3 z8_~R|8=he<)RYgtB{~|HBj0=rWviU}7D_9L{0<5mTEBx*RZ~3Q*_7IzJ}FSjXPD1v z%K7i0Oyq#9l~CBPuo4Q(^(&z;OHRtjTc!&2_DY*Vy-9~sKg0av3#Cz~RVq@;Tm^;U z&?+d5B34mv{`^X6tad+Tyr(gJSF2!o>S~Itvh3tq;Itfhw3?g@9KI(fy8^$*sff8r z8Krf`li%CV$Enux{L~Dyu6};QHBe^c$iOvF*!s5y${{(p1_~~=7RvgslosvR+7z5B zAIf_f=HdBDi)Cw}%*Hj>GO)a}R7$RMKSkNMTnFZuj9G_ozNRs`>ugMQqA1><9hYH# zpfL&S!OX)q*W)^$$@ujs%H-vGC`?{%fbwvu5~j%pwf`l(Rse@WMSYbzJHw3Al(`$+ zHNqF>m~nL{?8^v@^Q6qnF!#y{vRf)`gtAUkI&HLNsZR`rELj=mp?ONBZ#E*!5{3X9 zsrt8;NbDx6{!r<-31J8mH-ULYWA<#aF|;5VV76wMLp7%AX1De7OeZ#9E~f$5jAAqZ zn~{YEU^6TlfGt#sdrMT6D3U^z$gfM4sAg3OjwaY*SGua6K1+Zf&M;#%eDRjY@GN3a z?zG}yA8_JeA8^_QQpRirmu)^<(8h#Nur6nq>*p$cld{owRgQGchC=ajCD+E( zB!=SM+)^XV`=2Xe;$mdD6g5fobtq8+w7F($m55AO#TM1i+YfQr*Yz*ygYcQ2Y zm~%8negNakk)1z);fSIi!8DdNn!VHAzFv7e!N9mNj9bvZTNdN5! z!|KI$gkkk!J38H3B(XctX{g3@-C^rQnft)>9$|i}F)Md~*_9*bcYt9&@Fy^=Ui^ek zI2Ngd7)9|q2ad&+Osk(|5cYRJd+8^CKU;GrpghjV+X;vTjGcg3z}N{0C)$Np>lZ1l z+V8T(q5TNwmD!0S%)_&lR?BulIY7FWBpOFM5ent{%$Il?B9eb?WvCxvFI&WgnWEQK2C&(AL z_q2oI%By?SOxEN*%w$!U#d{v}j#DA_z(bcjcvOfycvJ{d#%#rtZF%ly)>N$Z3QYRA zpn@moG+vszeT2DwmZe>FN!p8c`BaL%kWgnYBr3&TNK}e_kW5HDxwH8`cQfm~Yd+7Ip40&7yCy7bu3bEj|w z*?z|F)n$#9yucxH`w@eAkptvlUgQ8`FfT&Nn4vQsI-oL!9rS0cd648~%J?7|f03C7 z$;hi!2g$frO8i2`20CN=UsT3XzxXpQwvyK{;V)zyDkTn4kMDjV&mU6bS(3)_FO;m? z4yl~?4*7E?942{#HvBL-G528}$&B$~-2DE02|R+Ee?(5px=oJQeno8=%3HiCBhA?} zmE~t00dt2a;s_XQeH08^ca9=CTX#qq3HtdPj;iNhJ?ejc#4(chbEMTVGQK9mj*;=C ztUg9YHnEU0vgfPE*Ey~V-?3)wzCPQXD%eOLX`Y;+M3{UWk|S4gkK@`8=gHmUxORrr zJ^_mTDUVP|M=1P?WOHTkuSix-R{RQ% z?JK0BgA~qN!bc~-7jw?1)%K7xPa2)HI{_>e%`3)JMw;a`Kl5Z^esHdA;AUpl|2zpl zM=IyTXFE$i;x3%0G+&%=i%a{G0&d|*lR&~>C_$&tx(H``oPu&n2AqPDCW}r%Ve>61 zqot-Ko!0i-gZ#0NZ}l&bsEx0xp*3qQ_7uz#J1Zrkbax1ZI|HQ@Z}y*sk|b}Og|dimH$id92~tL;ro^4IDHv%jl>CwAqED4p zL(V~o=E$6LPzd?XL3vhUeuKh3+uxv6(iHj4reK?VC^tr$&uYr`-=LJqm5S$~ydkfh zhr-+3=b`YLC#i%TpZhiPI?vPgriOd1(laPcdjhQL1=`-~GVlUHcp^uiTmXa`7XYzw z_@cXN!cb*h?*$f|f-*|@3D$9_R>NW~_w~5wt_flCMR$Yn^0}O{%1NqLTaq}+d{K^E z1VqjL9fcYwQKbFvwnFr?-FO|h)+n>vbY+%hzoSqkPJ;LyIfh8&C2R0EM_#z327e@t zV{=p)?Yv}T=w~y)wBSYKX$n*EGMH+-XnYw=w0JKg#b>hPGIjp$Yze)>;O|3)@t#jk z@do9W@~ibDE12=8W-7I=V8rS&_X?z19J6!<67z3=K;lfwKe#wsMvzK~FAU;?YgjnT z0!9C(K!>b*t4q{XdV)NEm8+X8ZLWeN{es5a9_~`WF|e6Qm5M&RFrfno`fVrVm>4((RH_X3|t;;o;Yzq)?ZxLun=#uS4O* z#v4$0vGE3!FK6kxbVEIU%?-b&-Mc}b(<0Z5+v-uluy2$(RGQu-%s(lEZ(@O-Dx)fy zd2x>|5dBD5VCPN09$~kTpf#=6EhM1zx`hO^Ubh(Tpa-c0XJL@9%wtdq=V$&RZgSfX z8h#s4TU5ENRJpBGxdW(zymklB;?D||Nq*VKprRoPwDOK0bo~yX4%Eg1KOLTLaoq>RF0T84*!@Jx_*jAD(S21! zQ4jnXyFMV}tDLCtfQ+ncKOkc}d0<^+htoqOsHr9JJ89|@mIPC*rQ{7%3W?h(t&RlZ|qtFsaHpvS0?*S zGrg-(FTA(a#6;1=1bb3aN1OAf&oPn%jOhoBjg>Ik{lo_MV^B=3i9_WNJ2w9v^Xm_1ZXm?#u*b?Z1 z(oa*Sx@?Lyodae0Xfsn&uDYPShb(R=i+BeGN=2FOhJpi;GD2)w44Yz2=Rom|HY?h) z7*K{HivgvjoG_qllgMBwY?26uvh-7>(bQl=Z`iP=bD$g;ZSI()G&&y)<-=UQ-vb35 zLZGm%F$4Ri{WKKz8dtAH9S6R7|^1a;a|w>&t0^+nZ*oi zI}{Zm_){vvM2;6K25h+8ECwtkTPml)_5Y5{4cTQg&0Iv>jv4^(ajz zmw+;jBic$pVe+j66pm;s355o>B$RTRva+OYFUoE$l+-b16HO@|0c8f~-9$hk;EjMn zz#9RDfR|K4_Ee>!b3PR{rHFaf;;nGxsqKlzhAG>}nD3FTJ^etmBaHn+a#X}y`7LZ>k*#<0S;l`)8u#raGzh|`LEVFztan5VfGCoWcr(>~TO zPXAb=L5)=^^ec0G;=Wt#1;_|2<4L(T#*870U!#*sqezX|58}T}(bcbwnsp3nC9&2s_ z6L#IkhI!VJ_79)S{6oIpTE0qS&0oi6CZk``2TDu?oX+sYkYbN;(U0a4H7}bm0YK1?6T6v5r6O5Qj z`@xp1VCzxRvxjul*Os|z`#pV>BVeyzkNXKmSxb+&M86)%iMYf8Y;*4)wwW^4{1Qf3 zO`93!`9g^C z-lZBXwVDEJ6qUMatT{simT|qt@m#a0F-}+QB2?|_o|Ls?&F5egYid&8mu)(HnS@<~c1N%~Q=weSh<^EQzXETaLl0 zaRIx>*y?GYyg^k26V}s~jjBkRa+K!fm3qU=`_&VYH7;wfOE2Vg!I|dAS~5p}<#iKC zBb7WV|Bs^U9Hv^E=uGpQv8w3WSKu+%a>Y}@h>7b##*%|=SxS1klaBhuucBm$EA1c-2#X_=$4Yx62o*G)7flvNJo)5J=DVb&`EzcH0Z(A;lB$~^%IXO`n9fE$*A5ipRnKG(tJjhbok6r(|(RF)weRuB{0M0*v|;_ zEF^6eiBwXe?yTe&^?YGoeDiUjHEoDhhE7DOnRCyP#qRP8s6~E?Ps}$CJ zEs!E;-u@q&FUd6HVT5h4nPHw-E$Nmj|B&>CmUL~V*+ffPylSC`#CO3Q;o2NIh0L)r z)4VoWo8t#%j?1Ji^A4%1%)6|rYPaEaf2{c~gf8VXOLVt|F60(@nPxVOl6!2yOL{hu zjtZKk>o;zZSn_||qJ1^LafVkbBzMR!JSQ6C^t7L&-QsMfISppm5&Icoo+(=H^VO8x zan)5jUA+*`3UwT1d}eIErE9FG%$Z61;`)xG-)Z>&v316AdCvR)-`4EjYF1meSgh@Y zOstW~mTNU3G%_JHYTATM2qDxK+IDSgw{RUYZTiw7gbtk}=d=kO;>6-~=+G`5;)G0y z6Z*Yg*ZY0%bL;&6=)wJbe(u-xxjy%GUH5gpSD%la`eUWF1{s0t?d6(Rd+eCOK6R>` z`I9$Tm3Qey`&i$Sv*zxyBGzs|Zn!;+U&rINQm1aPPD0M~uh`F-URmn|yq<~EN3L~? z?AY>|9E)dX%&5Wlag_IcT)e=Sh-+Q_0^ibmzIow{;^wH{#+GXwpNu+kq`i#uhO2*KM#aKw@Z2U<;x43f)5A*e$%QTPVk0UF#MSkLMO9_$3wd zg_$uwax0FVadzrm8?2*{7&1Swg%JC2-GXzxUht=+M5m!MYKNAu9q~2(hozEfg%0p{-fu4Q(^Rf`)cE zrUhJtp*?bMX!DLVLwl(VZOCG8Xp(DOWXkCG@h%JF`Mc9{Xw`v!U+40}&j<3Yu|E|*u`~EFVz7JbijiK!dY(a-M zZ=_w{YD?>k{2U-4gGp{XmEIN;9-`9^ug9uKUJ~)>I^h z>tJMysn_hPHM87AC!nE!?=v@(u9Ya}vHeqn;eb?@y&ZyV1HEiIZCcTbOLG(=EhW zW47?KZeiC(>v7#evE>czJ{{Uy%+QW|U60yVH(D1VG31TF7DDXvbqn2=@95v07ZKCs zlJnk1t5mlTv($Iu>9_B)qTXR%ls&s^>z+f)YxW#GykSr3KQ~&(AS-Z8&zD?1rV}{u z+q^HiyJg^OmU;uk|jP{qV~mg1XvR2SY9+8+oBwL3LrDnoYg`OCX;*yjAKAu*|5NOCGh z^Bvx-d*9<5a2NG8_ZoLm`?l_hp0W{3BH}LUpiS0eNR+)k)P7Xbo!ZnfpI4ra=HZ*H z_A))$u!ZxzErkDwBVse|r@}YtjgQ<@r5?4(x)q7jM*{tyZr_C0v(R@rs87T}o#>72 zj0esARM9f;eyVO+U>7D&sKP(s;B1~5*npnRCvUQrBQW%Us{MCXXXq~YPVp`I%>l7N zcVYP^t5A0#_Y`hnLbRk}f->{H(7@vF(f>&g%JA?-9pl3l3;#k5xSTD=Nw2Jw2lH~iS$E$l$H4GuzN6$Q zo0GV4&$$2Fg(AdKuS|OA2^>Jw1b5&smc6}2l`}~O^#s{tC;N1{9NMRQovT0Hx9}ow z4}0{cDr;4BqUWgcr!}KdE75XN)<1jtZAc)|Z>C&O2m)JFx{hej-+) zyO`B1>`XkqmLXzBZlHfN>{7gr>hK1@NjcLu%cs8x zn4jFZmoeM(StysrB4SQ)Aaaf!qmd0~$%yuzg%MrkjNskU$MDw6rU)9(m`O}F>qbrg;b_OT$tx8OJD{Vm$ZlWl93_OU4=(8tMlVJn#MY%l|T zY)4FJWgs@xZo_LvMlbhyOIomY=auz0Yvj4M)qgubs6|fEavlm3wpQ&4xeABE-*#cG z*9l%Zj>GUneyp8(zKyEiug*k&U<(uN`*aK4%YDa7IqrB3ZY#Gqjvr#=;gkOT=S= z-bC0-B*On`GV7H1SFJP7@y(ZRC7Et*wyiwvmVJ(I$?5Omx?CCvpNw!kc5Sn*=?DvL z41|Z;2jcarR~Gp{LwM}miQWdnhIrAJqIOs&F8Yg{luX}}lz;wzM(_V@>)-ca^!^-( zoM`XGYkWTb1AgT5>=E|vaB$O{Z- z6aIgHck?EB-JSD`>2C44UU%!y#mDX?O?wkZ(q0VomcUr(K)+>Mn-CW9cA(=C_C3;Z zCwxWVV-K#v+SXI0a!}>0@GU&oOP~B6(*KQ-t`4N@Nbj|+OOY1Z9Y_zgFAnbdj>$68 zzK8dZbk7Q}>*43I>k~f45&IyH*w6nzWB#3OEkxKvHxNG2K1RZwlJmx#W~mW!@tU~V zI#0XbhAjjQ^Ou-o!||ClW>uI{^=KaJ6v*6 zppR2dLc&z+aOapE{=;VL0R)642Li+Fd$o_f7mexTciP84ZMK?kl|Ck19N5B~_c00) zItr%*jl#>Dtt*k}9R#PzD6G~kI2X&1c3kWYX+OgBAXtv>9<I4A~5XYzy`wX z$=YLIj`TP=$Ln!+4#OtoZQB#lkKI3X_y2wu{rw4n#ihPu&XkMxo!G)r zyR9id1-76U?Gv_G=OZz6U0@5L_PMeJtcCY5>a@|`a~-~e-*JAtR2~kaFZ24JbQx~w zkHMd|U*?;c5r;QTv;!d%?N|+&RF06nha%)i`+!vsdtZ(WHA9R?m*%PsldE_Wk>Gp~iO#xS*_&BUI-dnVc~`kv&~@}8pA z-h1rT*zCC&rcZR3KE*IC(qZ~}i{;1L0>iXbBL)%in@hzRx;s<1T1_|0@sP3xx#we; zk^{S=!xXXAT7#U3!9dp{>{Xguw`NT4O3j_S)w)M>hnRa2hG|(KSBL5Ft=37%3H>RM z8)~1Rx!G69F56dlyIg+-hG`|{-ns(A6oxhvL;U&;KGF8+d%_CjJt+m=dvXe}**pwW zs9(;{1O0nupRL2Re5>_Qxf!Mp@&Dcx6%oG~rr+!CtlVmi-lSL5E0Mbz!;}@+9UZ2; zt=4nMiHHhxEy8|UbBnJWllzqBUbofSqq%L&y%NK8aUfTR>Bg3e$gJ>ge-?}@(}o4szgHS2f|(=2=T zBLAL4cRjr4;5D1}q&~dWnvb{1(KOpWQX{IamfM8-t5FMC+?55A@IZ}3jmnj3t_N9>UMZ11m8Hdk5GosTH-S0%+LXZ}>ma^@l@t2j{3 z#9w!N<;*H;mhMPXF@NV11JuMnw3NY--}$Vv-nat;)EwB6Q2RB!=DA8!kLiw z%3>$xCImgT+sU~Jk35BVD+>R3V7lD3Evp>db?n)!x z!-xTi@ZExlm-S%F$6qynqX*l;<<|3fOUO_lBE)`1BZ}}IuO4(?=o5W-kM~P>N0nQ9 zuIJ~o*lC03d~Tz+U|84VP27#BUl<%^--*}JILp|V#9IRen*&YI$>mm^29@24&b^9p z?hEXnj&o|cbv|;!eD~@Xe3*T%cCH`qk;cw+HHAn-8IR7XzKPovj_F2;mUIBdz>5l zW9It&`|vt?J})eb<-|iYPdup};PQv)vQj)a;?pTb@7|GU?}|BYvfulbyuIA|TX1aN zWdEyp%~6cHJ@CtiC@Tg&j?LxP=hw-{Q3$`_y`aq0Dad45vD|tvI1_)Nct2jFn@-p5 zV~*B;;b=v69{%?JCC!b!1EYd@;BxQ4X;>H>gvwKa2HAJW5!-r)cf|JG;r*k8H^wX# z1_m(ss5AjI?4(RB1$BUI5F=)f0%U9AAv2$mWSb^S;#NXZO+s(`SMIC^ZJ}o=398C z7dIsmasLh;$!Ri@d&@2NwxADv$29*(c+C$yjOjb3B0XNxUq$+FzB!MXDMR~BxivwD zHl!Rwi%H~C$}zM}!O45W{f(0B6qd`-)|PwSY{7fZ`7$t|5i+1LI-rx+S$74;%$@Ep z$LpvSK?AyX8js4~3~1UqZ$OLJp*xsIu5lf28H023X85zTJ3Z^9JK^iS?!>RhQTJW& zSVhWMEnH{K502Oo=|4gvs@IP>>TcJe!C&Z~RU}7qA96XTTucS}GIDFspyRI)hw+++ zZ$^dmrL4m1OHBoTkuxwfGcm<7jq=^p2v$N^~azQr=eR6q+`up&jpIl9)bf>e@>&^h)v*4iMp*c*3=ACucpMxWI9Oi#PBeFJ(8Ja_9 z$q9x(&;M|(d`xv4(3gX8Mc;tF*ug=2=lCl%C~TwjC1s=6mz<3lnnQ#7vMUCCIUavD zvVBkLkL#?J!7+2^`Y*!ks4YQ5gWVi^g7t0mh9+_o{xol{j{3NH{?w`Kt>c}GH{pH@ z)9K+qzS%ePervJQxhZhJg+Fjd{VDIz^;VMZRD$hW%Gu_MYz}Zq&;alFoxcySy#cm$ zfNdFI8#kLr1?^OMEOu(CoqEE0>!sj`y|MlmH6nBKm;o-=0X}uT)pLyuaP4N_iRT=n zd$j9tfAp^Hdk!w+afDxJKV!YMIXHXn5&jK$J$q+hu=v|KbAtv8#WH+H#%}QjD{Bk7 zyfCQC-jHvw{Mkih}x}QTnpk*qeR?fKjKab>KkT5`T;XZ zrrx#QniQPA_bC4aO%G*y>fuN~TGAI*jroRnN5}U*EN!pjTT~U;n8uO-uiE$e5A44@KBM8Uw+tz z+q#C}u+y7|6SUva|yI4sM8-?!r!f2s7yN%qSJROI(Y z)b`^uJ|k$S%8$iP9b>1yx86E0IAZUy{&O^95D~xmVx1c$=l#FeTgAE$Dfc3Gc~CC? z>d^aqK3{Jg5u7_W!9P!P>+T(sdxGZvh?xX5cZj*?2IY=hC?CSl>#ZMe3i=T87W%)# zYo3YO)w0WWwYSUl)flGpaY?Gi--x^!{2u&X((8CVyDRAQn0t($N21*Q$mtP(pEuk& z_n|8n1$CwTcytA)$Ke&$Bf+tIkM}>MU1_~<%r0K1yLdu{)q1sj{NeW_cV$rSu0;7r zPO7l356+!?f`6^%7T-T6_b$ynqr$pZbK8)6dR|cOxJAgt?dkFg>(t=fyhZ+0$@PDh zf`9ccPw<8y^poxT|1CD<0sO1sVyE~4M6M2sOg#~iN8&G@E3AWqBX^wWKPWhI$3idC z*KZ;RB{J5*-d`CMS)PPQ{2IcI71ozG27SONSA34w{D3Q+G5@H$OZWb+3Tv9~eHU_1 zza}Vm*Gb65^>;&swJSJx?qdJTk}G?UPmc${_dkgj{hY5BeHkc8^s zjJzfOs^E-qCj=ct@*EQKpmz`@KIl6!^G4~`xYT6-tO30Rc(%g2GB|QavVS#RM~&#Q z$q#1kqM%ss&tAM~bevQRzdiHTgZS;4#ZDhKu=JLo{VqQl`+c09`f7!Ba_|QBp6owK z`^^1~#YgF4Bm6$de#qNj`yqTZw+BV-vJi#J;y)`;6bkxi<}US5lPG8KA-P2PYP^W# z8bp)_MT|>9M7*8)Wrg)waZp5FivJV5=BHa*BN5FKF;IiE8B^KCJnWm9(8Bi==!4{r zasFm`k9=}F7JI`J8ve-s<2L_cuN%(8_~bU=ACH((6`Zkmyx$Ja*tNvV@Ev3_BDZ@P z>D!U984r}(akb44&X^nG&y@_PVY_d^1dL$McJID&1I<=uYbx1HGeapNZX zQ%}CjTD(6b^2u>|6a9^H(KmXyv}=+jVeS{n5e&!4Hrr5XptBDXR-lhL&E;(tYAbVRhOzBQBRV!E9(^Y7+H(5 zHeoxQos6iVs#Db<>H#uGS*rh;XVbRXL(U$nvLR(7YrV1kgsflLps!C-AfjyEJ4^7vS?+o!ZtYL>k&~w6{0Fk z)SYC**XY&b8gGnmB^yvSBWUux|*zAS*NfyWG%|tgylIq8IeO(r>a5J zg=CJhT45{5Y-QELmOJ|xkxo^ts#Me|WChBKgjr-c%JPMsk{_!TCi4S?ZSr1nv}H&`{cILg|@dveN0xO ztW4MkWQEF#g}vvz%ZN^@ELAz8-Xu#`mMQEtvSejx!ge|HoX9Xh?sJc}3h&r0AU0J8FBgk5mwF#T+>|{hVRh_B^QM1S#WwpYlliA9ug-vz# zA)?GjRjjI1)C95uWkte%xdtppS-!9z$ugB?3mYO!QQgmvrT1C9PS&lgSJ-Z{4rN`! zUUrUq1`*9vO{!W%Jx^AztWnt0WHrj_g#E!;$A~(r3RSkKN61Q)l?i*0tWa68u=|{M z8Bs-*r7B0%CbD#8nZoWSOIDU9tlXK`h=@|ESXJ?&ZYGOT79;F>vM^Y=OC_6?%`LFOo{74|Nft*lzuTh2a4v{MzU zDi!q#S%I=5VSgdZQI;?4PtLOE5z$1IrYb|!Gh|81QiMH07OyN(*#9|xM$}S8s)`o% z5SdR|xUl=lM%L)nL)bRQWrR)Dr)pr0_gUOS)~&2p*gCQfWnIEP(D>3IiBJ!y!RN0~~BP&r>ChTIeLS@Cm&UfBrL?%_1svJ>gk)URVu3z z_B~mtvI=3}kQFH_5jH@UudGnmXJpyRa)r5M8LRcA%Myqx2>N7o(!C-AfjyEJ4^7vS?+o!cYZiK|}>rh^jDAcaja~>D438 z8{=Ea29ym6LluM(MO0m?dPH4K)~>8m*c!4HWo^Px1z|)ERh_B^Q5TXq%4&tJAhVTK z3quuz5$ROLs!BzjLRO%xNSH;Iqby$-svs{TB9SUhRfebqWJ$_Wgv}?5SC%LYRS-tR zP(`YW7B!p9rz~99OtO(&y?O{k6$BAwVN`vp26Da8pG4NJtXJ50vJPck!hXIItW{aN zuwk+$Wi7(KC97A~DC{e;np{0&>I9++@)zt@A6rLzl_8 zk6h*r?xSS=$_9mPC+ktxCk#~(MpRR^sp=55m8@A=tFVn^4a%B?p$gK9h%%~bRW+h+ zBdb(aCF~}$Qe_pwPz7N`AyvMrLQz+cWh=`Swu&r6S(Y$VK^T!um8dFN)Oloa$`XW~ zO%|;zRv4-vyAY8^6{0Fk)KaqHOZDn;sW-%n$p(}S2}2cx5eZaXs(M5nP1dfgQ`iw? zEy~)2p$fu?XsS9@4Wed|VFGjhqm)}KY&w~(tXdeVAc!dQQ5CBy6*YmZKv|KnUkbo- zl;sQikt|bLwy+_xG-VmWz9vgjmLlv6viM8&q)QZtD#&i^Rxe$owvQI|A(>BExUl!h zMpo*zL>Q_djOd{1Q#G*C`z&53>sHn)Y&ThlvMyn$g1mx=W~wGtEux+$t5?=2>}j$Z zWp%<(1z|)TRfQ^B)FWgi%F2X2NLHwA5JqHC zwW;b5bq-mxvQ}Ydk~Ju65{4?stB6RUs#aAaY6)4TvMOPV$V!z}2tyTw5%E;{stQFN zNtUfFSJ*tV3}souPz7N`6jh?CWKlE7;*=!_JCH0|S*$QrL0-d27eW=HDooU`SAY#) zqF0YgydnOHY(UwNuK|l|vRYy9lG)0tg`o<IhAc^0 zim)fh;*})|LluM(wN#O+qD4JK=2I3f?0&M5i}mUu3{?ISlUWsSntlGP}y6NV}XBl4*#RN0~~BP&r>ChTIeLS@Cm zPz7N`CRLWI98qVHr7O!6b{bi-vNU0+g8U5;$yBkb;zgZE7Nsmk*l}cG$|8lK3c`pu zs-cVY>T!`boWCRMS2if@FtQ$HeZo)$VMHWVo2m{`)5w~YwF;X;)}X9O7^)y|;G`Q} z168f6M$~`FDwS0U`<|>+S%t7~$cmJe2pb^FS5_$OGqP-Dxx!qsjEnT7%Myqx2>N7o z(~AQC24G5VAsL#llbpVMI7pmZ}_4p=9aGGKC#LmaHsI7^)y| z=T zsDdz}fhu2Bp{U2nvX$iu+ewz8EK3-wAdGOR5>+LOx|b|YS%R=FWYNlEg`o=4iHHiS z5LIEK?j##NU#}kLdt-bn*?_VkVW@&IqKK+XRgb8v$=a253R^?gqO46AsvwNWp{i5W zAnHOgM_H|~6=b%uYGJ5?Fe06*SXHU0Q^*RG6$!J*a+Ku@Llxv5L?lwBsmc(wfGkN_ zim>@)@yZf~p$fu?7^+BB(V}LP`ILnVn@Kj3rB@GOsDdD(ER3p8)j*av`jg1ImGuf6 zPu8KVOW4o(V6Dp9g$rL+8o3kDTWX?xSS=$_9mPC+ktxCk#~(MpRR^sp=55m8@A=tFVn^4a%B? zp$gK4h%%~bRW+h+Bdb(aCF~}$Qe_pwPz7N`AyvMrLQz+cWh=`Swu&r6S(Y$VK^T!u zm8dFN)Oloa$`XW~O%|;zRv4-v?;#?MDnwP7sHJ4XEA;BI!W-hnWCO~EgrN$;hyB+FEmEo_J^O<9JpugQ{>r3m|iEPjQabcq5{1$iI4)k_zt?W09~ zNaj-(F6@1>k#qH0A`Dd!Ms!g1sTw%f`z&53>sHn)Y&ThlvMyn$g8Ty!%~VaQT0}ih zR-#{mKS~T}sxY ztWOxKAdJYOYE#uA>Kw9WWv#-_Bx_LCBn(xMe_D<;WwF9g1^ECcT?kc( zsxVQ%t^ylAN3R~|ctiXX*?_VkVc(JUD(e?ENYvK(dk!cYbI5D`sO zX{s_rJwukHEJfH8Wbw)pg`o<x zpT#|7-O74}tt0DD)+G#8kRC*oP&KJ)5p@Guy|PAOYsqSq)d@otgc12v6{>7emywky zD-(7xS)sCGVW@&IB9kghRgS2$$kLT%3OkJ~Sy`GeR6+iQh-9i*Rq>)uB#TlOBkVY` zFlCX#Pz7N`9M#Zry?QM7hVyr1{mKS~9Y)rptWOxKAdHBlYE#uAY8qLyvQ}YJ$QqP2 z2}2d+Bb;=jc~I4=YDE2)tWsH(u8m*kfcZ%G!jX3c`pQsybB-q8=b~l+_CJliA9ug`o<< zh)SwrRi&cVlNBf{5_Sh!jwS+B5VWF5-7grN$u7ZFKRO{!W% z9Zy!TtWnspWHrj_grN$;h*+u$Rko-(WF^YVgdIXwsH|8RsvwLAr^-^5BPx_EU0J5E z1IUtQx+-gOR~{3Wr%&k`pJfrjhyL??I&dY z$_9mfMAmbro^*WzQ3XMttS-7XZQmj4?_|x&T7|tq)}X9O7^)zjAflD3T2+mxm&huW zRSA26tW;TrFjPSp(Lj~2s!-J9WZBAch3zEEP?jYORS-rvREesRMcqplrz}C(7P4q% zvBFRV=|e;XRfwuEQFoFJpP^TeGrTdrm25!SkT6t17*RykrK(5N)nx6;I)$wvYf;uF z3{?mw~k^YZo?5)}*XO*tcZ$${K}zMOKrpXH1sK}?Y&%(xvOZy`f-s_*s!dggsI6qp z%36hOBx_LCBn(xMengZ}RjaBIbsJfwvMOOWk(DZ|5QZuUBMPbVRTYZ5f-GBEuCP^P z8OpMRp$fu?Y^p?6$)e69i&K^$>};}VWwF9g1^FBiX;dMq!bB}48$M019;bOjyqIi2 z*^n?)K^T!h)upOO)X`+^$~uJ|LDr(IO&F>mjEJVHQ`I197MY{0R@ihhTUoU*R6!6? z=A$ZBRVr!%S%I=5VZU4omZL0R*pFnH%CdzGk)pKRn*y_N_=6@(ETRDG%jPW3*E*U7q-^$Ocf)}gFR7^)!u zK}0iEld2X`&y&?FYZUf0S&gzfVW@&IqK>LUl`ZNKvJz!w!X6|mR8}kuRS-s0QDv#h z5w(ddU0J5EyUCK3r3ph7WB?JRRI#e!Mcqsmr7T9+^<-hnB88y}!iWN@p)|dEqsu8t>tWsH( zutj90$|{7R3c`qZs(e+2qK+iXR+cMl9$AL6EMcgEFd~X7QB|_28Dw$F5`-N{7OgB+ z7^)y&;iLerQE!>8!g;}ma*eN2ttWo5!HCM#4{EDTi;Mr2ZDsmc*`7FoKoOkt;yB`Zr4hAPN6h)AZ2RTVGl zM6xJlF~W``3sV*;3{?eVCF8_wU6^(z|`b{JWYvOZy`f-oYIs!dggsA*)) z%36g@A!|_9Bn(xMeK_exbD*kK)rk5pS*5ZnVc(OLDytCo4Ox-05@7>m`N|4~eMXk8 zELWIImXWF_U6w#pLC~j=Zn(yWLS{F+`+P?o6g&?}9ws{p%tI10Y4XhGKTevwc}m&A zS(y6wm&oulTh@YwW3Byk)ex~4OGJbscnS`GM@G}uV zA^4eqpYiw^ho8~&eszAu&oB7-89yWV`7eHc!cR)Xo>YzS;b3cX}_T!@&A#|5e$s6L}+lXZf18#a@y4Xnd3JT4%jER3oFs>!HH zWVK-RhK(ny2CFgbXY3|x=dRYx*|TA?Qm_is?pv}VuoA<*BFoR5_LEy^ARZT{W4HR~ zGSEKDsE^4~z|sx-fGiO#*)TjVFrt$x8Y6H4Tj-yff3bI zHdM7yTgl46Dh=C6Rt#2Z7#Y!z7~ShQhyTwp{t)yUaDxgkcKM>YsHtR-Xg>};|=umQvHxNs06(x^J1 zx{O*%)(X~c*kZCKuolDcxWI@6sv4*|qmCx40&@&If~*3}HVlsojEJTxgeo?Q7m~fX zU()FNypHUx@b%J#p_C8q~m{!plfyV_# zbWovq?rPzj>UFYOuzC}*n+%n7x5h9$F3dtiGgT>6g;CFwp?L0U;heEgljVbH;hYSQ z3yi3v%7D^RIn^U%DPZX)_CYe#&fR3g@VLN;DynFxSfe(Pg@Z*Ib~jlFSeRjWT!=zM zDb+v*t{zg`WiM_f>jmpK?0T{;upYzkxWI@4sun0Ml{4aUvPQ6G)BI90)Xv=o!|=Gk zh%71_s@kY?$jZPf4Lg&p7_8JVJT4rJh!m zRPj)WMjc5O0~Tl4JhDizXv6Thz=$ZSk+X31Flq+bAlR_fcGIfwdU+9T{rpuGY=DsX?+DusYN3KV(&4j$xmYRh)&B&NdK_ z3+R*8Lsy9Q#YX*uEElZ6uy@I_z;X=3;{qevsgj|zaL%s1LY4rQWSakl43%^@-Y`5a z%tk~LRTxyHQO}T}cVfJr>LIdDux`WdCu;-iFbt0i zjIgO1pqh-jhpZN?-mrCK)nGM-;c+1v5hYZmP!&eqKvo1+V%S=;e6T{p@VLN;e5wqn zETb+XO94wa>|(M+uw=vVxWI@^s%WTKqs}4=2a7W7G_nw|FvIY;a3~^@sRqu#)kA8# z9O)Cudcpb)JC3Xitj91sE-)gFss&0*<&5|pStD4pX?_?PYUgf)VR&3%L?o3BRc+KX zvNEtr!={iGgOwVF$A!ai(v6-Al>?=va`xiCWSL;urup||sGYkRhJ8bZ+PSNBbG~<+S6uz17pkESt*D5eU7 ziZtq4veDCV^)T!zvLUb$DfDtIRy%%1uStnSxVHc3Kfpr*muH!NygQ@|l z$*9xGYQgFaTSit5R%6)7&T(@QkwjGrRbkZeWJO>lh8;_m4_0W{QO-I>#8PEIWf?Vx zECnpxutUfa!IBL-$a$9$;Z)I3u||cGg@Z*Ib^uujSeRksoO$zb(v4(7p0i|WkeBG4OE>`SCdtNIfktvs{peN%X4-z zB8RFFs@SLt$#TI83|m2#1(svja%UeS(y5Z6(u_KVECDRZFpDe}EZ#8uqv_#@NTdpb ziZp5g*=QQB9)`^)8v+}VLNA9HRS-tRQ1w9d88w@%6Rg{?nPhEX9fqL_f{3y(ss^Yg zqb8Bng4G)~o~#?=va`xgjvP`gS)BGkf)Xv=u!%zibL?Kl? zRH9K=ki~$-8McZn5-i#=?K^T!hRRdLL)X`*BV2)u&kX3-$hM@|=h-j)psA8jLk>!FF z7&e_O3oOSlR6!6?=A%l6N;7H#Spry+VZWRW77G?{*pFnWox55$=chSD76uk++I>wn znu<$_VPB99p_J^7NEw-LMipc}cB_{T#dB8+=Tsk(b%J%9=I@iClJ061o$XKsVMGTN zis!Bt&Z%A}s|Bk!5xdDyNq4o1&UUDR9F2%(DiqIMEu2$5Pln>TtA%s2r^!$}ceQX% zhAIdmF0G@=fYMSq)gxpnVCkk850ZsMK3R(^+fc~3Cpig*s}o@GJ%0Mp%P@d4DFzwt z9ofrDDoldm>I4{6>&be+`ebGYvOCB+!MY8@y<#J2Iky3X@>CIspdN<76FRU8ea?vR1Hm!*K7&2!{%jV7NK~1|#kz!z384 zPJltSg{%t9F%h_TOh7~hRSA?%fWhW>l3@}IS0}(AyOk^#tiVLz-jNYSRG0+A)d?`z z{Aw~xg5l}}7-Vb662Ov71nwOfkwX;)6=T$eWS9iQ)d?^dv4U(g2Uic%4)>0XNT!s%noE0StnSxVYqi(h=@cgOoHL+1Q=|-fDDshxHV8kRcOoHL+1Q=xF z$x^`5O~lU`V3-lZ)!8uEZkQ|%EWxzjXSg$k2kxH7da42_odAOokCI^$3|A+>Alpus z36^alaPP>7YN{lt6r;A1VG;~iC%|CDMzR>NIMWXIj){mUqw+z88+9Am$i=vN73X@>CIspc^cm-JpSeI$OimVl^-7wrcG9sG_lVG?y0R|(^Bf}&Z zu1DJk4~6Nr1qMcA!gI!uY-RvGmn8K%T=D-3&|tO!h}!(cA%9U0LV8kXeOoHL+1Q=v@lQn`hn}~8}UJ@co zsW1tKs}o?b`ORdQ1jDU1&95gb1FJL)|ANMd0;&QiodAOomy=-<3|A+>AiI<-6D-?A zT;%L#L>5&NREkmOkYN%GS0}(=#F=C_TT1BjTwr35Kf^U{D=N)&bUKn$II^1#36#Q0F;DL{Zg4=>!;zm_dd~Fx)!R z{6MlQFvqaT&iKVR=|ZSVpmYKZM*Mmv7$(7Rbpi~spU85-3QWXzWS9}d)!8uEZjdY; zOlQL&`wtmr#Bg;s46;wj5-!9^mt+F>Iy=!PtA{QM?PHAk2N|ZsaCJHiX1q&=DKT81 zY4?`1j}h%um<7Yt88F!V6|x?%KAG8p>@Q@UVBLoO$yv4p5lvK>1jE${FxdPVGE9Qu z>I4{MPmtAu)tiX_bNq~`rNSf_u1Bp9wvfWe5hWZ_^@rrnj!I!5GE zVG;~?RAy&j^UKHvz=jOFn5-A9->~zYcNvjM)efZ-U@+n=GE9Qu>I4{Mr;#;+HJgZ3 zXWq$(NT$Lh7_Lr$!R9BDVG<0t+B83otPHHuF#HP|BjTtEpmYKZM*NNplVG?y0S4J& zWSL;uCgNacHzOjclAuzInns36FkGDggAr56V!+}|yNS+p3n$&^8Bji`aHIZ9hDk8o z5W~JF8w4Acc^eq}4Ot)9fMEkYsIVI@iEd&p|Q>P*JlWL02}VSjVRFGWNfRSA?%fWe5rk`;pK1Q=w0Cd&mYFcE)r zRxqNG3X@>CIspcoKS_p3FkGDggX}S~1h6C%vBTNPh#IOWD4hU<%^x7cBp9wvfI;Rb z8$AzK4-AiIjJ7OdVxpbEl>T&hYaodAQ)FCoJu7;c4WegRn#Scze%f-oY33X@>CIspbF zPA9`87_Lr$LAH!61uWe}pbCqC&MHdu1r8mKS{hN}}`Fye8t4zMoMd?#5eSi51Uf-u6Ns)y1EFc@(! z879GSbpi~sEo4<-j)_1OBn=T2R3%V40S24jNmd9}Y?|LnmJ3#37^)zQD56S-(g`pa zaWxqx!Eki~46-$331CSk0#y)1jL&I)A#HNng!yltjwV>&%+4+$!>V@hz z>Nc`2upYy1BE$M-uC8sySUeUpqL8W)s@XKZf(+}Mxw^I)o3A3n`ev@KZAOO2Vn$?B zl|faSi1Wy>zL~3Qo3Z)XWCdWlwiy{7i_btr8dWA#wux9uhV{){UE7S!7n3D{rI>bj zEM`OkRSZ;|QAd+ueKS|rHezlc{ zwi#pbSd54=9~G7~b9Fg0stIIR(#+N6%*cK@4Gc?~xw@Pg*^gv3V0C6wLu6H8j$vPu zRe;%seL+@&<hh$ja%+UEM`Op zRRUC!iFln1>zlc{wi%o6CW``#G41eJd=?^_sYb8HH@H#HlMR85T)lt5pC;=E)3wbQ zi^pO{)KPUpb(`jokhOtz81^6;);Du?Z8JvTv6vB6RJBm`ruil^tZ(Ml7zlc{wi%mWPlol)TwU9Y43EW(D4RnJ5m8iSP?aWP z1{u~jb9HSqHb0Q80IbNg!(;K;d@QEQgvvJR*Hgi;q?xPBnK9xgvLvt+)9yR6crabf zjO_-=V!+}|yZ?}3c{5j+He5qKzlc{wiy{7iy2{4B|s&a zhAj`hQLM&_7Cw|GOTar>e^N>zlc{wizSvSj>n_s#>Ue)BG$ltZ(Ml7BvTbZm6+xyl3{%_SJyUU^W(^{zL~3Qn~~wMm=SSQDNyMq;&)_N-^|su&Di`f zvN*5=(+-ctjEJNPhl(<48X49%b9HSqMob~Y`eyFv75j%6kHstaSeyohCC%J^qy9_Q z1*XfHG2(l&b}(JejO-h-7BF4SjBJ3c5v^SL5no)bV6PU?Z#d5Am^NSl`Umwapld$6`jr zQguRgo91)K+Q4*eGd4ej4C|Y@y0#e^9*Y?fPE`w4Zz4j;u)djFW7q*?Sl`U8G7OK! z7x1z86sRI7UCxZ@KagQbGgp^0Bil!YCCyx2&W!9!vJ5a?&5W#{ECnpxZ0Zv-EN|xO z(q?S;5m_9TLvs^MLp&CvPgWOQINC=U^>;F?Z|3USX3Thl4C|Y@qxt&>9FN5pBBGV5 z7pmW=m&m%ndJKDk4C|Y@y0#f(@mS1=2C7D=X4Cv}GOTar>e^;(zLN~=o4LBS85tgn z8R1ZsK~T!$&$cQ zOglUlGopwp1}e^|tI4pwnX7A?F=7pw4=miY!(%Zca;OF`$JOKV{Ud!LSs&PdVJpb6 zzL~3Qn=y8|vyTz!RIO0$ruivkSl`UmwawVvBE$M-uC8rHc9OH~B19xoRY5r>VgVV} zH*;;n=986x>Dp$DINb3wB8Dm#s=zd#O@{T&TwU9Y&1aIOgX!94WD$;wh_W!M1gInv zF^LT8o4LBS8JmwMivo)=?S5VchV{){UE7T9hRLwLnd>v{z9kz18(Fn~yuTvrUxhP9 z7dPXZKX=w$jNR&^>qPr*)Ba;xK`uc=3sn(RiD~{K8P+#*b!{^?e~t|6o4LBS85yb|jHstdfl4BTTgkA#nX7A?F=8Vb);DuU^Y)K1svtRt zD5L6y>Nn~(vM#V5!)_wO`ev@KZN^wsK^Rd;)de^;(el}SFn67O`hAPNPM5Iw=LS>tXrDRy&%+FAeUmddg*e}zQDBqkPPdaxw^I)o4-$%4yJ3Hk)aC0 zhz_a*s3a5dIvLhCbK?!$O%??fBW&E7U-^rrmrahI`2tnqbvQe&+kY728|*TqH&8`G z#TxZESvXjfVLQn}z`_i}Hy9%vs(~WZ>5KNK-%HjD)^FGrvM#V5!|)B3i--!U7N|C( z?j&mjYc}jwvO2H^!|)Bph$1Q*s@kZl$;!Yg4O>H23|49wzQGugLzM%SZ`6fknPAz5 ztsqMS%PJ+jVusFjkvPiIK!|)B3hloU~k!w+zH);XdAlUG=`-gZw zSs&PdVfY4PL=062RF_e+$y&kM4Vy{U1lD30zQGVt7DiPARcF*BvMMmgu<>LSV76gD zr+}4!l^HfnRtQ#X*tcZ4U3m@+xO!7fKc3snzPpHVN8b%J#p_8eIoSchTw z21CTmda4GfCQ&Njos(amF#a27*Sg7P9P)aSG}#e?ZxI9*pEBM*Z``;J?8^Gd zG2>CMSwFdE{N2t+>nF#J4|5Kvz<;dfV=E>nkDu`EBIoM6CNG}*&F66;Yp0~<%{l6% zygA?JOnBml*a`kGlMYxrb6oj($6mLrx$UmW2aG@Sp+%SgWkUI$|Ht0jhc{KE|HG3s zEjcMKffiZ{l(bYV1tCB|M1)W(6a)-Vr6Ov|i(7fKyr>nsCMYTbYM_-tM2uP$kk#mR zwYaPsm9NXHyH;csmDPagRzS8YYD){}_qor^&?Y9=^ZcIcxi0_tp6hBq=X~a#d+xdC zo;h>oyyO6IJY$XYRC!itazP*|*+Wo_Wthp@Y4wllZLKT3WwA(TZawnauwk^(dy4`)VoFZ*##_YZW5)1kkZkpLQD_?NQ z|0!|xWq}V5W{;Z0Us!L=Fprt^+TYe&JDE)%@PBQzE;beO@ed)$rtupdvi36-@-+`x zZ@Spw+dRhMtHNLPm{7t^AD_GHja@kwHUrhKKbOEZ6);zGf@>0QdB}Q$>972{hpm@* z_wAw-bGd78!^P&MCckU%WHvAJL@##k$62ObdDwSop3E$*G?S$-%FM!_i7nsJkKM8( z+rmDaZ(*BmVhJaAnpm-=($#FX-<`R}Zrb3mc$a2bk;mfdYj@1coN8gk1(3~hu}xlP zK55qVVs@Mj@p_Zk%ONu>HX*a;bmd1Ylh~$w#x^+0JgsYzT<7e=@g*O`fG=tM(oWbn z_4H&~?4C?2D8arg(_@~$BimZoH!F93=J<3JI0}E(MKJc3%pYfs-_>w&!O|1GT<6Z+ zwSOnM#0*_OCYX2s8}ZlIk?=3C3B=#>&l?9soV)9*(SaFvy| znt^6usl|0}0{%9^AX4bS-+26WM}RZ(^<8i7H2Ei-V=zdxL#^Ru>W@8^xb~7~f0>`K zt9h}-yQ^hoBCJeW`lXpI{|;_UN_RDznD1a>xvQC6+7HIORq<3^7Tm|2u5$%AeyZ%) z7>7S}wXf`%F<+WZi%*@`i!;hxdrfHIn-bXaX&qQ`e{}e-(N!lWBqcW_B;}nj`8HDp z)3e^mNbs6cyo@dXLt+st{#~W3iVD9Zkrf|<@-NK^iwjuddv71SH={QUC~&b4)4Y{c z%?XLS3r&gd^@3tjG@!%y)}Io3VNGbCY$jIjJ|FzRBwJCM@32suw?N@37$= z3+wtN(-yzktQV&u%ATZ>(BNsPUiICTRoziSb2i(Qf-2Vm1B+I+nij8YJ$i44UB4fO zQD)Kb)^Ur6H?1sSo1QeMoIHB(q+Lf*UFEJ0aF-c*lb|ngovXPJHTcR~@pK)98~JNK zh&Ri=GW-=NtAW4FhQG*9o#3Y&RA*ub*7ZLLmb?b|sL8QE!wmo2WcY^_U)jz*`waJ( z7jI86z4z9^dop^V!0i*1drZ3%Os4lTppUQGY_*$K@%uJghnOdJCZFW-@Mf#UdlSo8 zyb-R+vL|j>Yq-W@xTgEznY%tVcYp8W^AoDJm{@HJG@nW6zWerWJvMlfTuZ6?;c=|F zA6(+QpS6AoSI}!hS?EY6|MUUlm}T+1R#rR#;b%67H)p}>0*p!v3MZXQf<+1FFWJoJ zotbD~l9|L8o?$xMqMLg)onm$nw@`iP4#W<2%T!dAPZH1kvfLNbw! zAUXJXCds}J|1&7`I1u}Yno@S>j&X3;KhVp~7(x13*^DeJ>&j48DMpY2{Pn}%kF&hv zcl~sI!7l2l1?lrMf0;i4ouCkX;7as?iA&Gj_5RK*D@J_$?HztT4Tf}8hD>Fw_zUz} zV>rS7=h!Eu)B(p^7iN;N3&2y{zlXGf+Dd&7@tyS|>yn%^9Ho_})}Mn;6i@q1l+FNV5fRW8W6n!}Gw zhK#HEZm4gs=UeFc`T^^%uO5e<6x*(2eUo>+B=vj?9q5MM&0jt4+M5eyUq4W^E1WU~ zLRamwLy;JO{%i~uG(e=Y#7#6lSMXGoB)2Facn+WMk6ds+wfOJO^A6}@ll++k0qq-{yj#pHBZyrC2fPL18WW^ zr0#Yh#70`!pA3hgv5ZFQ=W0H8*Z+ti6yZtvmmx0|;zNEif(om;8)!Cf5QUjfdd}&^ ze=?ijyNz|<;9}^E82<~r_~&7LTV1}JT0OqLt$#HqoHXKC8sH!UTJ_p{R=D<(L2EYC z$%)}iIu9|76B43>rO(Ukj<7q5K9UZ3I!F8w=MFNA@}z)E&+=r}AUvPKIf8WfppPo$ zB_&z8Wtj{};Yc;i!l}L)wQRW9b#CI583qW}@nuMBy zYEN!IhJtev(l&gR&~rDr*@6Cap~jIFE^YNPi&0~om}?({vd5lg%~{B7N@mSZA`VL1 zSxg2QwZ;s{1cMn2r4!3zkn4$o?--E0GYLUP@k4*y`KYz1`a(W2qZlIE7{K#~#H54wHgEKWcr#G=*Qc#d_%&ng+0P-(D)$#OCjy{-{o7q~C-z z2AM3RnIWTEggO=9xW(!*74g4pv8MM#ICzdFY)Y_TiplNrh5S;B?nbxAyvTYFvfw8hA|U<+JaIX-zFv%Hs8X-X+*olr&N+c-=l8Z7)q zZtd^=uk$>gw*u( z3|BKv34Cucqw+L0AlLC_Y;RU;0VdEqEa7AU(o31?y&BZuo@K7RH(4-f_vN>5wLWM5aX8O>%sSZn zhi)`hu=0~4f!<* zh)s;OS=L)HRV>S_Mofk~bXaEw*w7|+n#VCbJ< z=wD%Irv(0SMnX0Z^h&UJZ;=+Qx!1J|r>v8%WLE5eMGk2Z=ASbhWD&+9uetl;qZq*2 z8?+P#sk4>t?XXLqz?v^jW`F8|o`^I5L0o1X^v!WKtF%WKCGT1@&(*wT9&2VM=B=f% zq7m*7U+%)Cu^2mC7zR!fhk@%~L(X#?*Jr_%2{?bgwR`QC?9 zy@JN5EDVBb{G!t+v(C?SunKh93e3D&GOKhYXIExF&d_OmtJz*xtHbjVt6XyxtLQt+ zcRMpi!*h52-5A!7qK9l5%Evx#&GshzM=zd?zh~?T8=gemgul^?6A)J;5cTbwgL+`- zXEYJK^)S-Nd&d$oFar19Jr$!3dC>HuUc3uw)Yddwi}cjpg+_Ys#o^Ps5l0Ika}+Tg ze%s{TL{VP@0ftOyV?T}518OIo`)To{T?23l@H0Hu7ZbRp7-ebZXoaUd2tDJ+sH0G?c@z6jE@FF4Ut>0d;O&6pV`!C@mHiWU(FL(+ z9`k!RvDJog%}{AHQOfRnV3;w=hPGQhUJow1Jhx+&qoH`-HX6l|iaS;2&#d zW=};Z;_O4AMl&&*anZFoV|QlOLea4VmWOk29w}0uSm6{yBhT3Zf4Sf<7yRXdzs92| zB}M0sc>X$xP7&>|Z-|TX*HPl4{B?x5Hh;}B{O}2pQT{qeT$I25L0pu-4uB(ny?%-C z*ZV_x_LJ7Zd37Y4ff)h(T$(NX`$yt1ei>X3!M!+yuYMAj^v@4@ZOfC^6OY-8UfQ?q zhfh|I-S!x5pN`{=muacqC3eO-ni+EsY0{n38LI($u49ZjoAjJs=o7%|K8yu`JAv+D zO}aIku`sapV#e&ln{?kG1U7KpV8%kgK|_&0zez6~!I%r^7=vMDT$9emBOkCM%5k`w z^y9NIN%UZ+@fu_p-=qhwMTUYVed}z-%7J^9Fct(3T8e@TaSUWvHtDWqC=hu3Rw$a- zq=(BH^8gPo$MK{leJv{G25trVfqQ^qU_G!AII1h;i<Ggz|L9_`+@HR-B&m1 zCEZXHcaz?L4E4ZPQUJ6gy%CrLWHaC?k_YYt27z_R$7Vtg&;oR(FqSi`NiPF>fDOR< zYoI3;o-2XjUI_ZI(-8@cz>Prn99ReeKX59r8n_YYyB;+L2Is=1-C-awALzRQhJbGb zhJc_(tF!VBiiY28Mu#fb~FoI-0Tq1_G<^f{I0~^rRJ>kN~(N=`d!JrJJ1GfWnfI(nAupa1p32lr5{lEq?1lUT3 z02d%wUBM>32tn)t&IQ&3{Xo~tP5ORd@MUk4-h>^;D=4@(6ahUz_D9qhSPnb@3wzBN{-4nlK<6)LbD+Hm zZ4Gp{psjOIaBGvE3p@iH157=Km;xRGt^)ec!xO*&a33%Ttj|IJ4`JsxhtLosa>ql zupSr$vTi5{nA*KrpF03G?SW$;>))(b$N^biv%Vjg3e5Emguc?goZ{KA>k&vmOSr3g~m9#x?K+(D@4FhQdRyG<)?0*a?ED09syc*0%%QuQlrj zfIi?U;Gs8Q*f1Qw1=j=pz;!^!+wcG|^iR}$IBIqTd_FLYV_@J!v%U)HL0~J%pMs|$ z=lc%%fT7b~xCnxw|H6frGPbG_u`mV-eg=+!A;3zY2j~Zu18aajU>z_7d>`oe1wje) z04*cI19O3_2{i|LfF57~xQh7ZW_>Hr<;Bh(N&w1$4GF z>kEM8z>S2h@DQ*bXdi`w&o}E!fI)UvKLBLrv%2*%7?5yQF9OzE&g$!c;iR+r`#`Tl zJFBOThCuRJeJ;@1^{l=V7z7>x2D(AP{qP80-m0*fZVkfCRFAJ7jBTnYJMXZ4PgFaYJB z)zWAQ& zde)-%o(MhtTl59M#;Gm(9-wPli+&gw09&4eF;3# z=x)*10_$hA=-Yw*nJs!PkQKM+^}sN&0T{TZMQ8AseRhkU4r~NEfx(g%y$D!82L%H| z*SF}cK)0twFPRF1O1&+5C3fl;LI4=L83I7}Vkm~IeL(kg!~}2^Ft`MU0BdiB9MDnT zqUT8Gue73E5g;9=B|jvs+X>Db?* zpCZFHwdi(~R}QomqyL9Cx9DfE>L5%{1Y-`v6(VKwfK*wAZ z44ewI?}a?j@p_A12Xy`!O$rPEb8mn_KsV684+hXNuny?{E9AV`31Fx9jZp9wTnhBR z4Hp9I{|1-c1ciTx>w&?4pea0P0$?%l5U>om_5*kZ7yupy=6nbbmg4vzq8}In&IS4o zp^4{#2ReZJKW@>zN3i4g1PSvY02~864lD<{54Y$wz##At(EcfcYylJiM*%~?slf6h zFmxdd0p36|5Np+4OQ9E70%TrOtG)y~Az&D2H@E5?mq8(LBakJu>IZ|; z7CUT)u8&y(PXOIOHdEJE5zf-}JwQ7!1Y7_N16?J$UbqsjpQGzRVEB3{UIqENy51Y; z06Ky7H|V+t7@Vi;t-#~+bv^esxE>2}Q*UD(n17+J+gI>{DOz@3^+;T`KnHDh{0+ii z5Zo9dusQJO!rzgR{9(v@t(P|G796XM@>JrF78|URB+ie&_oKKPa0kGt{3KV0zx`3% z`{2liav*Ia7sg-5OPf+IWOjf!gTJlgc)?X#w)yZ#eluZU9A8h^IFi43m3C+E59>^< zSFetJ8O8^rHjQI&rD{TerOf9OrfS#ZHIBt4D-vm=qC94}p`A&&;8ualy^_B*Rm(Fk zxssors%3Y0ANd?6#y^;@W$>ZXv@~<=I6h?>%AR{AUp7sfV=f=Z-<_uQH`k5lKLGRW z6LFpfve?>5yvNmOEjAe!#o%b80$CzF2~HJATq?N3?KmFHk2j2a`48-E>+RQ%K04 z&qvSH@)Bz1OW*irYF2Y_K3_jm%QT1Q^W8{IN?m{zh0c7(b#UH~Gqs-PB`fe_S=!U) z+%^1_S=y^J%dx1_-ZrO=u_fSAr5#k4LdoqR?i$g=GvRS+UN@+%h^Z#z*$K3q=C2oP zQ_P1_`HAZhhmLDBYv0D|Hm5j|AqSpq1-AhEmIvqXm#)z+>QVx7)T5GIC`cZ-MzbWZ zQtWtx9grMUL?0p6`3&-&Qe-oK@fxjv=UiBwyG82zm%;J!Yc-2)fg)e#cVDaJ*#heL zA(3%EG9FRfErM$TmyYH!EWVPsY(8eTW=$;KjHMf1TB3F5H_q02WS;5P*2O3Y%ad^$ z0Jn#_;lKIj+1lW|QQIP8XwhdV?%bU*3L$^{xLW{@%293WfX)hV`P=wAq${|MLMhuEeu8(t4q@clA;QQ;y~Eyx zv8g-wjn`?T&5b+ww(HP?*6pUi*~XX5L6{Zp<+sn#KF$lg*;WEYacWmY1Gx6llWTDN z_UpAwTh3dEdg@lk`Ht%mB`!NfN&g;oSU^+OQ-B;sp8fCg{&TfqdA|4B^idg(ZaA-j zqrro=LHNrDxAi@K&s=S=tqEzx;4J^;ug}%`+j8H>x+q3U%X|C;((_V3z}gvQ#76qU z$U7CB(w77747jonc)<-Ak@G*|i*A6YDnH^6<2X705Keid&o+zy^#*Nd!KhELZb{>j z+(_xZ6g1!ANW<$T=a6!Q$HDD8%!l2G0!lvR*WRcNyO~xINe69&Zg}%Z6t@7};V7;G z+@UCrR;KI0r5oB9BPRz8ef;!|G){cVJKuy#T0i3>Z$g7qd`2NRC24JUbe<#p;7zcr z<_rGwOwkuTbuM0Pbm=1e<|9M=lY{w1H{fzF*@@)aJfz`XV-f7PRn?XmxOTfNAR zeLXN!I?ipSu%qy6o<~^!HJ?IQ{0(1382*N@FV$vxkJ!+N$U_^IU6aOGNds0_iNHo& z9k~7AECwUE_rcYIQ^7@YVQ~Af?nwKzIq-J|+)l_95+ToG6RONp<>`c9KTp%l2O9Xz z^Uzn)zm-Goo_XjCIp6YE=V|wwgD3ge`P%K~{ij4naW6okuZ7Q9ppDEMrAKy@k_-eb zI5dT^Q9v#M=St$QFVLnZA3u*JZJe7df4_>(KLhxfg<6hztBucFh!70fu;4`l%A%`y z)k5tev!f$_eIc4^Oh^93Ld*iJU3j;fF>>G`3dC*(ue@37*dv(Hd?5}f*xhi-z6`$O zW-YG=>xD%|VT$1oKRK)y|KesXJNYn{MjJ4xu~???&(a5DO)oz4 zciLd{p5FW(!m>X672w#Z*;p!*vgB~OOH~N2V>@miI9EHa2x;};#$@x%G6ZF#g?C=8 zWsIaOq@yqs(5pf)V@YaDr zeAq1*F-Bd2g-wjNmN)pKTeNG<6{GoEw_r}TZxYX3gdwncC7-iMd&RubOm<}F9rj_# z7W!$UvYQ-e%r%h#)iDd#8*BI+$eTTD`Q3{#NAulBHe?t>EZr8^cpv}gV(72g$Zbmy zB7PmCE85$p4a#nOVHZy*YUwiVR!vrzJ94T z)>gj_3%69SN`7#uw#Yp9bv||(>F4JZv)Smx^cUi3U zS=5TIRv(INIQvDIrAKi&;0{D_qrmNt;--QNfy;;Ov^ntS0e33IU%XYz?vaZJL))iq zMOyKjl$M#X5BvV8^m=gn-sG9($lDZ^X6+BBy(RJv!oCNq(d~89-H45E@rNnzfvB_! zq@9s@w`1Rl73}tTgW%@A&CesRdF$Ied%2dKxF0eu-t{Ieh0k5C+094Z=F65N;96hf zI|wWH^M69lR<|E(#|T)<2mI`EZKiGNJM!31$5VJ&8sjedLPFPbo>^7XBDdJ|Ae1d zh4PvXV-20kzm4bJhQ3q(sXTVmabA~-0qEnONp9d3{PEkgOKiT+C6Poz{kzd9+W^7z zreE}pm>^lc;)Ftc5O)FDaeFr zcOZ8|PoiTmW&nK69a>)=xD(3#BwI^Fzoc@c^*%}}=9nGF+AK(7Ll8#>G0fa_%qTo@ zE;tWgTA}q#cA<)Ead_aXW`60z+GV`sYFv=j9>-lOYMsw{=4$l(;5U5EYOTQ5+R&^Q z;=E;9#h(N3J#hY)3#TzCGDev_PRu5;T;6^(4S`z{#T^270Jl=8l~mpaaCNw?f+8+( zt>A*-XjGxiPJctuvA%20i@46u0eKjLkT*65{*MB823$Vxx>)Pwor}ZpC0NiF5{9mF za7UuJwWKPF+Y0UwIMva}jy>R5RJ}srTBGC+fy*6y_VNg)G=R)O=JpC(!MWQhbU?p- z7`X3fNXFdDzzn{4%O?=gu!EQ_i9z1A&t(F0g+z-j{m1%ITV;S&Dz?=h7KU(NIG)^?i@p_ARMJ>88w zUp5@+Cov{d=lh7S_hKNgew@GR)h3$vyw1-Pt_l;5wdF$Ih12DjB>u1uo!OIwg)?xL z7x`N_Hg7!1Py4jn6SpEv7T|}Jwch-`HQK#nJ-Bbx{={5=DaJc+?VI&DxT)aO1i%5k zP2g6w@QL@plg>oG2-ssIWK_hIK&BWM7CT$`)Awj|F6o_!TNU7FBM0wCTAc-J-Ufpc zJn%5MT5w1BQ_Hnfe#O1o5cAYTzU*FYm~A`mleuULevt3J7qg|c9dN%4*Tk0fPBB{= zv{rMNTP=M0TCGRM0@VHpX)fq&UxiDcRO~uOzZ>Zb4|TwLBy|>~n~QC9RcpvB zfK0CT>%5iV8^P}*o#Q*(mr9-0;J4b^>AJSFp=S@t^Ox6ZDVh7RTh}o%s|#9=fcJFb zdG~1r$wxXNs&D~j88?LAaUTZ3#?Jip`)~%?*98l-XbQ`h{G0o5+HXwZqwgm^Rq~wQ zd_VE&{B`ij`+7?L>LL6;_iHnf>29Bg+%|9spYVWoNpcbH>iJQ;W%v+&*8`YG?##p+ zSX%!CPoEZAaOsmoHwEASo}Yd|%f2Z6=r7{J>LrYcZF6KJa*snUw-1(A`SORfG(L45 zg1)2=zjht213G5%yVq$qnu8Ah#X3Y^ql4QX#3a>|#m7FV--|P-??J7% z8PmQU58}+Z$Ho8oAR?;4#eV?Win6hSPUgSHGuI>i)J1&ydgv+Z&+l0ey@CGxMdJ75 z@-NmSUtKOYZ=mvW`Cvll06u2}E(omy(HlsQm#^P|vyN*p*00G6^9S;eHfUMNwID)7 z6bFF?`uW+O-M!r;MppPab{bT0w$i zY74)0nl^*K|FCB5xBm((fs@$m&h{tFJ4{otd#C`Xrm^rj#e``9|K(xrN}Hnqw-@LX zdW=te1ZS4x6LEKd&N%z{=0`9zl%4oR4vTSB6OPlb=GOu<0x(ADp{z7w7fxbq-PL^aCJdJzH-C2%B51pt|3LYUyLpez z;K$71(>G(HUNe(Fw;6LO&n!d+@>(9@<|=J$_Lz@lq|UkMLZo7qkQG5Dbuz}5S$tj< zE-ZRq!(Sw{U(3%{VL~0amS#yabt8vAYK|R}Xn3XUWxFfUq!_^d# zCH#$QIJp%vd&r*MJn2zHLH%`n^rNUp?>T%PVfh@s9++5%JD*GV(JfjpUjHZ-li2m@ z*cifVuVSp|dT!o=;N5;bAG`&s*3ISfwrC@hJvU&uq_*ju&7aw#U1lD1BmaT~%Wvd1 zjxyHW$cJ&96B=*itGSk$=(q{@qqu3Smc`$|v3Y7K|AMfxl;aJ70(0GbUa(cW*&JHH zcW;GH@HwoXw`ya}hi>5`AJb0cl`X|>DAb8I@VvC zNUNQJg{&3ayj^?U9A3%a*bcvUT*Xflj#uwXSQhXt$o*Z@kdSj|@u)~@Ey5r1Yi{}`B)peT zV^yxPrac==e|Nn${VA=7sYmhe+Y+hZLGZEX_k8u!C^+op)1QH2yN};Z=<@LwpP_<% z{1{=akN2pdf_;1IwEq~$HK98|#`^Ws@=g}aCtH|NmJm}LbT@FF86@p{T=y~0-l_HX zx<5W|G=b&cC})Bg@2{lQc5GC#<3{w3>b7B#7Qw7nhp>#-p-SE!Q9%9`N&owHbKj#y7YpWAR{Y#z-kL=bu zntg})iQO1x>ObXqFW?kW@&&*71x#XmhxqF+Xd_J({QDQQf!=*zoYy@loi+#lj+f#x z@5}SXsZ7;ja+SG6-3Q8tjCCH)LXc_2K4e@^Sa)5yEnt#>tc{aAkp_pnQ;=HAsfX5Y8BEek$%`>q=!sTr0+;8 zcrNh>nZAaIFDtmR8!bdxA>Ez`dw{V;CNci!`Q zK5AoGXjo^|Xd-o!*%vCr9H_~@1vn|4KCe@g!45;NkmQO*b#pyG4y4}*GDRJ z-PFbD!bR0<-@d5*u7i2w^w(y-s;$V*>l!ev#UwOjwbW|tum;CLR9j-HWI=P}!E0}R zu6^9m>${&C18XD81iEe&*jO&mw_IRQqGN?P_DBp!EWcaIOAJZG^ASS7#IR2s+t(O4 zoVmpgP8L$|UV)Ca0z(qned5@8KR2~#DX-Oku7x^PmE-#s{%2Um$7abk@x9Q|t^5j67+TWULRNkPO3j`QJmaL6nXsCf z_~j?Hn|arB!V^<1UY|7ZH$pF-BN0abHi*Z-ew%`2xhVfPHGs|L z1K!^>`tcapZ&q_r@&E1rziIcwW4Qm@|9?vl{BQsNZ3iI4|8Hsl^}qkG22j_fEvVr> zC$>g8w=@p$ujE-V*9=Q^JSUEuUJ!WrMJwx1!kC2`Tj*t(;g15{uL=z9d(C`S8*G}a zW}{Nx09>6jHEWIJ6B#C)?I|grgd3TgTCgD00TguQWWZUOXU>Z}?=}6vo!G)20 zGHb*O{Lxzi>&T30xR`siB`2^>EEMHKN=;y$SzxTzCMfq3SQlo$Iu>tdy>T5Cy(Qp_ zMeL-S$>YJxQ>~gUp&JYGqpe!^gcMdMc2e;W24?8pr*&t6mNs#vE&*@uHpmMA#Std3 zvi1)7|f+CZD-7X?qGIQ+4)n>a*@vaYI^MNRSJMvO>Jnsv6?-8j?DY|fd zDftg%2E~t&{9^`oWhL#}izvaTvz;A9pOfP3KiDy`HeQBZvdqwh)oZRv3Z=j;dv&zpvX>$i3whiG-1=xY+h7yExSL>0 z8|wd4WJgh2gHc+Q6;2}?UzcFBdrinnP7l8-bQH_+MCtI!@kd#vbf~oh#rKkW6u(X; z2t8eyHD+6Mn#bz)#HwNnYy2*<_b7u7$B}2JW6LxA46H4!XL_7u{GbIT=f+8P@$WCS zrF&zhrm&JYe0dyxT^v3TlkbGLrG#&Ioz-UN!9lk4DfPD4v8#9$3Bp}zEG*A2s+|Pi zg^j|kEi*zWY{UXyLHH1nWGWXB7U1S43&@ZGUg!5px6pMV65{aoA7ab<;_!`ec+Y7= z4}U(v*468jOI4~mmm!V9S1n=DEP^8asprCPyLx^6>u za*yP_Y@JL|{z;GNpH9pjbKptA2M1#HvJ_SnlkdbL2Qc_t6pYa3FAuV%O(~0N2jy19 zD|d-(X{;emI2YZ(*C*Kqd!1LPWi?UJN2CKnV+Ak$$(~lcOYi}iO_>*tsy~g6=qjUnUbo-MX^em_F)+IoHrmw(bd-@bOKZY-z(9B7DFuoX-^xj~JWK+l4t6 z@ot)Ji1(GqPN&QaJQ~}4`vb9gwLC6MVe4hJ6dye;ams4pZmHN*&{^fwJ(5pnjyUrb z#YfjKw3uhuY=aa0Tg|**SKCFJD!|X*wA<3WY8_vd^Sm@z@zDm4iqj6EKSerF6qCXl zqC!mZ?0X~hx~Xz637j$BQs2PjMna*>MSYrbYbqLd|NVxiTcLK zrWEO&SW{Gu)Hv+^UdXF)ScQsffV%vOY{_`DCby7R6Lq`*YUE31p}YiRrs!3KV^E}K z#d|J^%?IQ?8Rgq|WSc5Jx=mfN+tkYr%j-s^NHv~EG@ha_v>kgbb`Vs=luu#)IDF9H z+Xm1J1vp|Bkj|WOVnXrJF=34p6OFgF8_4*%PPTrS6dmnsOXKz~wsg#l#&^La$S%Mk zz#||efbr!d;t>!KfEg8$E&%}nm{@_F>>3rj5q)v^a2(#jH=#e9d;;nX@Y+X5Dp#=` zeRX^xq6SCGpHQQL%bMh!wQY&?aAAXXUfH+Ai_>u8b5=C50wM@~R+Tyn?1g$}2tfS4Z+n z&pM$e@7Gm#M`lopTzq^t#8Y@??BvE-v3Yh)Y~IdIDYmrIaMV~rZ?(~RTJam@R799< zXXSP6dJt?^)rmI>I`~i&gRm_H40T)=+n7)s-pw~r?yvwCe^VS8;N#!psMLOAY?XmH zJU+B@!R550+#86)yZD+^TUtVWY1E+YnHO7+e|~Jfeqn6hQx?fr;E)ss9MmnsEboTV;uR$ zIP&brHs2cME9biY9J|Kp?J`g_D*1JBwYay<>O*4PKL%`XE5YFapax*VppI% zj(o*FZ|n@~VrEETfjInuIDA7K-g-thfogx%4_qpN{ESWU6><1r9KInAZ~dvQ?Mc5^ z6_6X1pmcXt6=p51R8uq{3 z)Y;b8?0k_Q?1dS5a7pBlr-oqni?Ml69KJjb?~B8S1g`?4ZS1d)lfnK{Y=azecuyR@ zJc390s>Z&Egf`wEhY!Tz8{_cqV2lcQ(KPi3VX%@#W)U^S*@^S$SEC%HZD+J3}}Q@8N6u&~o_3$ZR6Se|>vM6%(Lr7hk5tqGv6; zWOXeMiR!A^rjo}ZL@wqdcK$L7@9BRevT#*MIX_Ct&P}nC1H5adE$u2_RqSL}b!9RHm)_a67wmZ{%D}36wt;sY%stCtsuExl_-!$YhnRaYt-E{A6st zye2m9c{VoRxXa)#ES0qN67{U1jG3@(C7(?w{Px|qXUCw5pQ*T+e2 z63Gp5lI=X}a$9%Iir6o)M%_*02o6HW5K6m-xaM33YKYG{od-wGZA*_eQPEiel1PAkGO%@sTH_G-i*v9FWG+ zWAa^ComX@mUY2dkO|X9&H6<=SA)qLqJ80A+X--U%YN1f2G;>)w?7RS*@ zLzO*^arjU;wtPT7-KXpyBkfnbOE##ozf9O4y|{=4Y<|>?D~~khh-%qepb@`CbAcZv zi@H_v9x1PQQBpb!M|tEnL%xlVUMUY%!&B;+Vk+ZlKI3AW!*d+@+HJ~F>S<|}M5hGf z>f0x3oFfxd#mi$hTqlN~f9#J{a@?~q9Dto7v4dq+6ZJZT&GPbB{?> zMi{6pWCJ64k*^br7whu5?+dzWWsMXcJyutU8nw;IQ~^8x7TGxzAB@ST;jPOCP*URUOe(?pSX z$5e5hSU6^Vu;dwK_m3zS_j-n3NN~zdVM7DaO(0KaQBlPUgSz0eoP0{IZ7_G`;Sm7k z#lvxip1`=s=2l^#p59mO+6Q73sEXey6Oq)|f8p#2om&x%QioPr+?p8jO2k<`YK%^JEC%R**BMKqppyB9>;{B(p~bi|W&g zmpwy{0k|Oj1Gf!A5V`J)r4Kh5uZZmO$~70>O_9~R2yc5()GI!EFbl--P*~i3#)W+#w$MB_?<8Evx9I4Gft0H@6D(dD3LZQzD6dfR@@oW#&p&cWtQrI6+z(}9vE+P z@KCZ%^F}?IcCYeE6n~%O8>4uk`Pa|DZI$v)`O1>2(Tm_|fWxzK26bVwAQa)byr?R@ zZe;j1e^eHr-icBLDA%wkJ>MC6BA*3Bo}3GDl@s+)p-?2A;`?zhZZ3G}nS^$m3as)t zye|&#kH<&3O6d;>`L?sFN@$EyBrN{*^|Im}QICWP9#23l+1{9(m-w+V(VMlxHYoEDp(xb zWApwfUezm}gRK0hu6194sEJvT6jmRT#}#>;3f4zdP&u#*J3N!WI}GDIdm^^s?mx!n zJ+-lUUz~?6qgy=60nyhbomd0!nq=G&amIPl(H?VJl)_wbv zw`gK!z(Zj%3&6ZTCZC3PQ6o>u!X;f;)2z0TOQeyoh+@v+iF!Crgqg)S^m8fo^!eA5VW=W%Pr5DptC%1M_&srRZMvt0VQP#tYsWn-4|ts&@Ym-ROctlzgt7MqP?&R8MEj z2ah@-zVN_UT2EJ;rQ_kt|I0=$do(hHjvJ9b zCH!@4_0els%Kq4wyLc*V3tv6jHe_g=r|2CgV-*;x7z>W}knNcTEhVx{A%Jx+PCA7H{Y(*8*MM&i(f*H{!kR@P~n zj2TT4*$=6F>J%&aPSW&@^QTzvzcl-}_u=O$i=P>rY zOmIacv<(WQw(}EXY=e8b>67X0Hq|no|FP23ZUd*r?<@hSTIE)CRlKUJ3i_-KQJ@eF2i@kvF8GWhV*e9kx+?9clD$6!a)B9}5)@zDmmh5YCXo>U$# zk7IDtvyr3LbiQeu?ZWxmxlTm8a->L)7pWL*U*ey+Y(s|CL}t6v z$e+vtk3{lH9ZqycALxxUchvi7%A#P9ZyS#RDLv|aw0lr56W(7-ujR*(?u~xG?HMEe z*B8@t)lLiE>Uv2T_C9#Cda+Jb8+cI4t6L&U{)8ca;r+6K;k#eI8Q2T**)+o&DQ?B)8;W@63AXGE&rf2yw^b^ygKRg*IzxQQ z1T2-vC!y51(FapgQstT}R8`AtQzfq+{Zjn>;7Q$?i$(N%r2H%3v)VmVqZa>9N zjuGt}hOuX*p8XSy+IX3&?JtI+6s8_LQ*OJcvry!ey=j#!zy+QRsx1?4p>LqmwoLLK zd8SDfGJTtmwY5$ z#lt+wt4G_*rTiwz`?gud#a?fj@Rm$)EsONTDakvw$p96=dSlV6E0)|2%Oy9b)H4aZ z;kiph&p=2S+ak%U6CBE&ZX|4y3F`gcVwvGB@KodQe?^HZNSh_^l94V#57UvV8NJd> z8T5bQAY5OQ+tqt~DxR(dPsW9oib|@=ub1-beI_Lzkn#>W1y^2w7kt;MQvAAoEB44r z^{B=^Y5iDSP*O>b9>NXE`o)rOd`Q+xy7LL}hMvoWWp1g5ej$Ron7aDUmi#fH2RD4> z3}>HI)CDn51qVlpz@n#hX&V5Z3Q!9fsZySPoS5Y6Pe(@jO2u~&6<8&b*)GW!|A&Zv z_&k@Pp0Rgjg1W%Pp|SnIyH2J@UGS3+RF3N(LJ=ONH@4YTUHhhaZ;`1EhbT=c-6DCG z7s>w*_^vp2satvoQe!(U<<&b!%8lvx5ecfjdWO?GetCO@ zK37NEvyu;dDs9HNK-=4rcb^md0m**@-f*>iN`}71OIu(5<`g`RJO?kN7#^3m>gmI* zw52K}+D=H`{bymZPli^Hp29%&JiJTT!@S_(+^YGeuHFxgeKf%9 zLT9c}$-a|(@E5_W;i5Cn%oO+PA=J@Qekypf**`@TQX~0t$vd7GMtP)d|0DPUrY??) zL^-Sx3FH*@hMh+$(y$mx1+0Bo)LO;qC_a8FmWyT^P`U_Gl-nt%Ht>wGt&_ZZ6zrx(!l7B|Zt5+i|lF#oe^t<{-jyt8`asHu@?)j3GIV0D) zDy0p7uR5BZW;#v(M`SvLo_x7B5|A?EBro4)W)+g3PCPYWm9w9vr!nx$xs{5fdzFOu zuh^ry%4b$Dyo-EB@*a6NH)OEL@HA6TNImwL04pp0@P!RM+D6_fG300W7nf3{}y;^ z^nfwzTP!}jN@*u$LT#4W5LJUn$9^&z$Jtec%>+*cd*n02gM>Kq zg7;F5)y)0-`R*SQ^@n^jPp?543rV|M+PJ$>)4* zq59*Cy@?`au1pBZ@lwsU9*}$p^LyHi53K_Cf~T6Phoya#h%I@5DA;$ukgt(Ve23&6 zrUXOI&iWe2j>rV{=>?IEv7uxYa%$AM=v67N-mA)yw%P{@dB*_ZoHAi48w(yosQ1F-C(?Ipl97PxTxpO)W|#q< z3{r0ysQ9fAiY|Nx0h1bIdl)HAuIKf_f?iqt?T$!-O99Q=&#{nm9=C1m?MJU2N%-FV9Eywik4@fo45+8fPXUW8NLh|Yvl@iHYQBSI#`k+cs z@`J#W9`%HrOY&>M8z(UNY&raAY-tm@J}U8|gZlDxQFl@-aA5(i~T>RyJb&o@$| zdXr1Va~2|kEDOl5+cyaRvnwQDoGSvvBlRzmyytOrBo|2f#W~s@mkG{kqK6%kk#k7$ zjh6{t4K;})P<7){pfC2w)#`;obV*}#gEwOICE?zklCO|FGe$2wBP02jBp=Qcbttik zgs%<#I5)~S0aTYw9%<Pj_k>@fbP^&}_vmWr&D(V$UrRa~~sgJv5A6NWe z40&AR$Zr(j+-htMQoqkw+Q;yxW>VHmMU8`-gh9nJ!%*;Kka}_2B7M7G%GaC`zE#(b z-$;2DwQ4vTt!@Ohd~*_x5x;7&5(!j*FKTsXGk9tOUuI+!{DpsbJ-*EGGm@#|9{FUp zL)zQzGUD4_S`f8iEDt;t)0i)Nxs<<6^6GV)2FdRLPsOV*hN*7zH^F;Zjf^IB@%0lD zsDkR*lI~Jb=g~q@wY(Hk4!;sS85DgnI8X9EIc%y5JSg>qjrkf{u0|F>KaNC-BA5E{ z;d_~Z$-7V+rF_53g`w&>DrM*x@T5n*@~&F?TggYP^OIHm#-L_KH=06w$QnKLEt9==0CY=EoC8ChvV$BY#P24vI=GZ|Yh`QSj2@s!lNm2!FOkV@vOH^CZY>QTx2 z9unh%U-Co736C3hI>Ggkyc;~}QLlih#jpp#lRKSqf~nl_j^KN+`jNsv^lKcneMJdI zOAK>~td10s)Z0kMZ;ODZqSU7Xlxgdwyt-AXlq(C?9F>5rs5Gd>{E z4?ndaeNt2)YM{Ot=aGu$SH0XTZRj&dB^R%iw{0+*7~A_Qm%N@-^*ceiye&v2_ikhjHy&W>cM1#i^d9T%AZkBuyJcU8MoQopn#o~BL>qNV_S>_ za%s7|>!OxAny*rvK^_(X?G-OYkewEN@|5;S7LP{)^ykFkV&XN3M zl4pMw!J&L!L%eYk_?wh){vQrVsX6=b{m5S8i$mxHIe22`9&Js$AX ziuP+oSgDzUX__Jb>$puv0%cGy+Rv4WMu4YDoO*jg6+BxgVzpN!8j>}#BW;y@^b-u9 zOTOH=l0w`pkp-Mb0<~gTwj!=XjBUhp+3fNn$}ahZ;K?BQ-V#%B`v`dQkow?=GW27~ ztB+BPB0Uth1Fn{?lh3qxC;{74$uE$LSsRlCzXUvaDEhI0TFI*y4B>fWI|QB#QXi=> z3Pwsd43S<^|K)$ zN#zO445{ZA6V+e*L=j=OOt8x!auSJclFA?#n#%>veg~dvrrwdTOWr4W^#-{rcnf%{ zFkZwmB>mVowm%}lnCmS(NqdNb{ZVVLU1kcKtK}2E4v~=!2Tv+5d>>4P-(MuJzP12Y z7+aY17(MR?sZl-nsG2JW=P1$`{Vc^?@Z|mIb?y5kpE^Xe;sMbQ*k_UtM_m*pVL*od z!AyPO%Og$Rj0B_EyVcPx`!h{7~MApl|Q&sRu zCxh@yjVmQz9(9u2R`qgL+O!6lD!)>2;prCpwW5@OT-aBi4RnF0%Q*Eih8nN0Cwarw zk7AGFM14=yBkgzrykXzf!akqmb;+wQ%H>P`(%C|u$=jmUlD`E!c}~5P(^K;IgGZBL z(j(tWu8|4PN=4CE1^+Y@r7-pB9u>IVOGMSzMm+{mAo=KfCbvu8b)H6bbh1j>C0{@S zc|v_qDqR}X{W?)I^)(UtU3c0F!IQlDq|Ycpvlqcr*S1Ej7k&ob2vT{2&ypCR1nmIH&#x=cM2CcI*O7z zT`w}IPuQq79tECi;QU^k5LL{UOWq@&EDcJJJ^|i{t*Bere^&Z`kb~R;S>x|z2K9j{ z)dbn7q7jVp^JN=l0UN-RL9Wii6KiF6tpiVCufD*jYW%sBua#%+T;n8z!aLj`6b0qO zSjwQGl8?TwyH4_r@&;S3tUv&~;cB@Aj6uQJ8YHj2RiH+Pv;{W`7pd|$?rAN(E zgNjcQ{#FYSUxBC6eI>#i)%m-5gdT@nvtK1o(_W*QRVa|q3tNAdgrI3l;{VZ z93Pg~9KB@~u9Nc7^N9*6ABuWXI3#)X5i)iE@r=-eIiOsEbIAg_-y#fBkMlbue<|@a z6!e*bJ;SsOqEbF7u^qgKvU=>%Y^Xwh$Z&#`NLwUyvt1%?)h(G~$)9;x@K!1Ble|;* zRC(fNPf0#{Rs93Ods!eTOj|1zok4;T#?qS($zQTq7;2SQd}<(`51v}Zew#2z-3#(b zK1ZI3RaEW(Px{4|GcZI1TlT0M*n6a+puDqDC^P&+^7ZeD0@g|XCs}~? zIZ=SBv3;3vHNNa^NUCQYMl1eSvp6rvD@C@Nm)>DZTlk(#k6ui&+$ub-enUhx>0t0Q zzb%iNJ`{r|M|mC>JvAily@Pn;TH`@OBi>7lx_EvGJOzpROtM;FwU#T5k-g$F$-Cqo zUo`}*08dS;UUyWz=s%4FqyNfh=jAu_KuUBhVlD|dr>MdL!6@bkT zo;*<(HP@*HUrMe}AF%Hz;)Mt@1q@I^Z-sltm#vb)1U(^lQX7EPnxDt&#VVN`QcG)ZCyTBgFj|NYc z)yj#gTk@5LJl^qqR`iDMl7Cdl^z|15dGeDX~-V8$IX1m#<9 zsxyw3y!w8F3jJ%rcavpdVt>AmZD^T6!Q1bPj-$qWzf^&5-x(Q{>OEE8_et} zPRI=EZR&KHA@xpC@Per8^>N^-iKD00^QHVM`D~7w`MfOopz*|TyV2wesYv}=Sg|a) zRc5gF5;2r2`JC0lpy-FnrhzAe><^0?uacepaqtwQx$^5gJ4w$1{QZwq6#hSLoqKRs z#TCbwNFcd4Kz;#2fTSigAjLs~Jad{>Z)g?AfztU-z+h z_v~792T8|#s@%K0_4^reyj>DF2ZJVos~h!Z@Y?9k+#z{8D3qJ_ptmHJe&0DtTpp`Z zo|Y<9A5VP{Kg02XMz(smHs^6Han2|_)O_<$azFH_XYGffXFGAWpbOJl+rbYyZlcvW zu?NpXrX61owf3`~;ldkY)Ln>lLu1AfXB+(0GBb$Fg{(%;8vg)U-Pqt`RLu9D6}uX+ z5#9%|>oM@mPo>0qLw+@Jcj5D9eD8*Q9FLO{i{{)3r|FH}cks^<;W*y2P9x!=)G9es z2`eh{rCpdk;Pv=Y^$z4Os5~71>25NT_djqcT6K9R;Wi)Q&ca=D6OyZm7Xz;@2!YAN;>ND`E#96=kpU}(B zB9U)22|O2R1K0#b>WEq^=`BqF>sVTmzD8IW5f^K4XbTQe4apqQGn?&ZW@p%@6uLac+6K z`QA_$%b34APHQ&cK0F_M$V$<#irsyszK;a__v8$FW+g2VyJ@xP^Ixy;2KN{D z%?9r|DE6Md!I^EAgC{WdG)u7Qbjb`oNx^*e)7``*GPx&q!4q#>Bc;&gHNc07b2N3p zrG2K3xRm#^bjIbRzH{=C?lzX7@-`SGOM+hok7Gb}GS}Ox4X#(`H;A(-g=j+e{_k#Y@4}gG~eEEx7vcDFpwG@GR3C+ZpadKyO>QmZpymdr{Icm*o1d_x0J}{%4A( zh;!+vha=6$Hpn-_-a$y_UE*A6x{d8D+-8cYsZ;*4jlVK(1_$u{zPggmII90mqFJJv z11+LU``upRY?^L6rlx%eJ-QFtMVJ<}7?aN_RgR)F*Rs5B(n8$T>1)z`NRj(>Kwdp^ z>p;yZ$onh#uGs18sI0R#iGjNBtQuGhuG_?9BALbD>V!(=EpawiJ?Wo=d>3&xH;HvU zx#0hC+}I)OgV;n9i4p3bUX>OScNKM)AAJ+YpOwcsVu*Ny()f#9jc zIY+t^LKT``Gvp1Xo=9rO>?h6_D&3<{?fNtHsH4ZZ(0@Vn(4Z6^x@RF^^ky+AiD%+L zNccJM1aBouzX^RM!VcwlVXqf#-UaWvEGFsz<;TRiV8t69J%DS2NwJb+f09@MaV~Lx zj{051`AVx^lQqW+AYb8qGixEv3Fln@IhfKnzoq~#YWS)&+96ItQ6X|R8acZN?)w4A z-6DqSo~)X&dx^85hj5QqL#v37<(&2OND*n1UqJzEkiR5(uf6jHx>z4Wuo|t57lcN$B^zucW^0(#ZeGxHLSOG&%6Yf_|oK5ye zAf6)b-p$6ZL(JozcZ@FLT(G)}m=^3M8*8D)_ucIr+>bhy;$h! zN@npOZVof&8czL(p5=|)Ax8W2tsfxnvYR&t64z#tNp_zjF6||vGwzGJ%Y)kYI&pV# zz{8_la2P}YQNDZn)zZ`IzLP;{L) z8N1kLnxxM~@%A*}i=w_*FFKzx|@jtNnw?^X4SxRxYld zRvX1$-`siWXt1=8-S9<_JGl6X>V|t4Rn}F_ub#HJVP0)zL-n+(&iU^JPo$+*HdNN# zY75fBA@*;lf+NvmOPu;%wNcCJL7km{4fYR<9&O0Y{=Yh^qVdlRjmADb(6;rVOyqx= z)A{zLU|B(QtSv2iadQ|wuz5gddrtW8e$gXKzC#&&d|utmC-2c*k`bFmh5b{a?w7JV zuZ#{?X4WPHB#hy{Lof1US_1)^?26qBpg)q62Sl<-fqiF!pSlGt4^J}+w88A@Rpc5pwr_5dxj!sWy1fq9y6-#h*A>Ig+Dtz zl4IV|uqa)bigTpSQ#Apin%tG=FK!`QIynE6d~+yOsXU{967! z_jS6%UG~f!;kd8^epfrv13SDdoEWM)5+kTKr|%iR?NTQ{Kx*Q aEWA00zal~Rx7!i%a8kd&4hL6 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

lZeItV>ysuqd*2Wu3wz$Xb-O3EQ8n zQCYLF31oHodd4&eL=~hRyS4WUIKQ^HMSVwBrmRBPS7gP?N`;{c!iWK?994OuJ|@dl zmM!dkvQ%Xm!cYa-iHL5hcvXp_-Xx1r7ANdAvIu3-!cYZaL>tw}#WL=r7kh*IBH5s_ zVPVga^(h+=hAIdn8mT%|b%}b6tW{aNu3bG3kwN$mL>O^fNt5Q}iY$I8@ zGQTiXK^Rd%Rj8_1)U9N>%JPNXNS386M;NLgj3}l`R+TF1aDA*RZ-~zz8&WnR3{?JxPeS*NmYVJDKcDeDl1DhMNz zs2Wr?i8_+ZQC2T(KAEkoRv4-v9XRP?sY+Fqi<(JRq^v~PG_pKpg~FzgWh=`S<|E5c zmL+T=S&FhWVZRiCC0?W_U9vz_LC_~_gf3d!$BO!z%%?0;*cW7@7wWY{7^)zQ=%*S` zHFTl(S$sg&tE^wxdt_b8dW4}0@>fK3QMIUQ6ZJY-qq1gUyU6O4H3&l$gb}S&epR-p z=gG>HRS0{AtXNs8FjPSp(Lj}>Do@lSWSPpcg*`}?sw_hosvxf+qM9mRRida(WHHL( zgxy6Jp)6V$svwLgry9xAt4E$UoHvmTDjODd9a*2U0b!_uFrtX6LsgfkOUPQ4wF|q5 ztVvmmFjPTaM??-)t*SavXOdMZs}^<|S-CR5FjPSpkw#Uhs#w%XWVy=ng)Jh>QkEkO zRS-rbQYEWO6?HgSg0duG^T=YA#S23fq!TAy3{|MA2vO6?_FkY@j|;pZK7edU*@&<( zvVLWQ!a~VVOIW!=JlB5S)qPr43)sDhwR)-YXzwr>*kZ!$+&y|7QoY-P2= zPzCuvMD$UWswx-t53(XZM|l`ZOevNB~A!mc4JR#qwuRS-rLQst=16Lm3J zrm}2d=aZ!>%MgYt$eW1BrixdUDC%^w7-ez7mXk#&ix!3|2qRLdM$Xf#$9djxE+!jP zHZ1H|vOZ-4!cYZaL;_WZsxDE7lC>&p7j_6)ld=|JsDgCiq>HAiRaGZyDp{4XYGISf z%9Z(rO(H8%RwiuhGO$8r#ln6j%T<;y?0d4T^Yo<45r`@X`eY5!C2RXsQJ;||C`%IN zlEo^E7ltax-w@GD6{;#i)NZo9xq2WD-?z* z2qUVfGE`-WT2GduEKS($WQod>g`o<y~_H9ttRVI)*}p6khc+$Mb)CJP1FjqMrF;ymXOscYY>Ji2qRLc{HknG z$B~sOs}OcHS+TNGVW@&IBAzNoRi3ChWSPpcg&jQ*FrtL2K~N>^};SAvz65f zLltBMb@jVU)T(?E@eH!qR85nbqb3h zYf;uFY=5#wWzE7Skk#er8PgyTRgfO+*4{!mzqYqUeMeTNtU}mVWW~x#g`o<PRw2S-r6NWVW(eVW@)i;-rhEDpgf3Y9?8cvJzp_$numG3Y$Wf ztt?lVk1Ru3mavIrDaz7>{c;Id;wnAqk_Dm)f<9RzbkW*AR@B#IK4p=@z91VtORpuu zPz7N`Kh=P$p|iZt;sdf?W&Oh5BkNMuBMeoLeU6%T$&v>_M_rWf{Uy1$iG4)l~7S z5=Ctyi%}LQ>@KnhWzoV=1z|)v)kwBpJ+i&wyoqd3*|4zd$oiBG2tyTw5k*uTs=7p7 zLe{FRUD!orP0Ct?p$hT=B66r|Rn>_)ldMWvwXoC3%9Z(rp$fu?G^#>X#iC9k%T<;y zY!O+OvK(Qkf-oYHDp^&ksKdz;lqCt9M;5CrUKpw%eK_f2s6tgmh?-8e_e{Ndoaqhm z0c1nUMudft^(z|`7E0EmtWVglYrr~{bqo86tnJLHvXKsfsDhwR)-YXzwr>*kZ!$+& zy|7QoY-P2=PzCuA5q(sps>((EgRDqdiLiIc@{|<{LluM(om3gBvP8W~mZB_8*ehg- z%94el3c`pMs%TZQqW(bUQx+-gDYDTs^y(oDRS-thQw^vZI>Y-c9wO^i)-UWnvMyyk z!cYbI2oW|_i>fwJcat?LYZkVStWH^jFjPSpQAXugWsAC=tV~&juxrSQm6ZxZ6@(Fm zR5_~hL|sglsVrOA`DCfeGK8TD@-ZT^sp3^7iaMPvMp>M&r*x$3{?JoJ*S*x;kVTX`4DQgjiDo8(0x@f9eRdu4K zl2s|I7B-ozT$x|kB(f4^Wx~b^zzUTW3;UTYS6RNW@5!=OPL%Ny{w$cB`S2tyTw5gk-Ls`^Cz zg{)Iqx3E8xwJGZmhAIdnnyDI8HHmtf%u!Y^>~S(%S*QMIUQ6Sab@QCYLFC1iEV8ib(= z!iW?qzbaeQab#u6Duf+PR;;X47^)zQh^NX?l_zQrS*EgVVF#0?D$5XtD#!p%x=5;c zRf(d)$zqhn3EPh>LRqx15VEn;WQcvjM)Sc&l#QO|jqML)gUW`5eM{DNnx1q60#OA) zpR7T;4sG8h>Jze7W$nT~B5P9CA`DfKe<7lWs#aBQ*FrtL2K~N> z^};SAvz65fLlxvRMC4JGswx+CE?JSX5@D;z@{|<{LluM(nN%67vP3Ny~!zpxo(UCMfd zMUk~D>l7A2)}pLU*#2aV%9@2uAgjyNGp0cxsvv{dt-Tk+`L(?*>N~PBWfj7{A}dx_ zDhyQ+MhsBpsLB)dF({r7Fu1hAPPCi0Gz@SCuI0O|lqeal&3Bi%=FV3{?PRw2S-r6NWVW(eVW@%(;iQYDDpgf3Y9?8cvJzp_ z$numG3Y$Wftt?lVk1Ru3mavIrDaz7>{c;gl;&MIdk_Dm)f<9RzbkW*AR@B#IK4p=@ zz91W2rq>c-sDdz}pK3tW&@%6{_<*ceS--IN$hwsE2tyU*OGI>0wWw+n^*ULjvSwks z$m*0e2tyTw5v^2yRko<-$;y;f2z!RCSXrqsR6!WgK$W8^Pt+r1naZ+-JxG?SEJGNo zAYUP(nkrsZqNq(|G0NhE-9;9mELs?i$YPbn3quuT7$;o}Rj8^6QPaux zF4e2YQg4V4ARAIPA}oxoU)i9rP_iCneZqdd5Uf*Kx3Hhc+Lr1`*C7y95cJ6!rfbml zO``ry<|wNd_9>aItX3GRAm1ROkE&Evxu}1T6)7tb_AXhTvO-~~f-s_!DnnJ4s8`8S zl%)xKg)C87vM^LZ7|}u%ttwX3AIN;lB85FgHo8Qw9>P!sVMIOEfU2P--e>U;S+BBw zVfT@BDeDo2D#*8pu&G*9wTZf$tWjCBuytg0${K{B3c`poD!(dQ)b(U#$|{6iLsqP; zR2Zrtj3}haQI#j^VzNwS*}~2zOI4O33{{Zt5Rpw4uPRa0>0~j=;)E?Hi%=FV3{?(wLO8_vaKgUW`59ZS}yY(N;QAdE<$>QL1s>QJ&)W$nTaA!}0BA`DfK5u9|< zRJE$=L`@~DQdTW&GFiDYzpzPUCCbW#jpczADk~QDGg+>(d|}^{Wu@y$mm?5W5cDZ@ z2(JC%&{?hDj`)r^FnAu40?eu$n1>`OENn(a-RfVRhw$?tejdP&gP;5Hb02>0#ZN7M z?!iwDezxJK8b4d{vjsn!@nhp>6Mi=0X9Iq!@N+kQ?!wQV`0?XsJ$}~VrxHIE__+f= zx8vuw)xS<~T9<`|ZJz9$H9hP=EAt%e6AI?87R%Ey8_H6$vFx8*pA^u^EV2=>Q7QG3 z;ela#7#MYzFar^_RC!QZEN3sal4XPCn&unHP(63E48sEhBPys8p^}Zdl`IY{!LS?2qQPPf z!vg~&im67=_{j}5>TWNRWVelQAd*HgB2MzpDYI~&oDeN#Nech zrAmd$Flr`Q5?G31)5zk%5)GR|hU&Sim2-ZYKC%d~Xwz;Y+1N^4N(}quY_Jg&lig7% z_43VlU_hU&5xPFKA28}`vTm?m!@eNv0Mj};Bk;h$h<+-R&s{B@Q++^I57uZR-XlXT z-K{eW4-5w(qKm2=%5T)`WGJ7zS~_R!F0w)}EuE9$fq@aNR9R43ET?*&EDbEv#6ClY z>baY07#rodWRYMohCN6Y3Kn4)9vBWrL^ah=7Ooyr-DNK}k@bTO8g>_1 z4_KdJcwk^eIaM2!7RwoN6InA@t7(268LH=QlVNyZU_=p>4OMH@C1e#~Rfb(eRti>b z7#X;g_&$wr+-76+DK*dnrMuvo+J zz`%$^s?pPN^)TvivSF~jQr%_G=8+A64H;SSBur|ZO z$WT3ZwQ|l)g_6~QHJEn4t^%tDa}4{5%zrvgI@>@zFrZJ?FkLa)mm2kNvV5>2!#*X; z0n0NC4-B&r(MOdErKNLr?H^=GU@4~gyJV=PyNQP3fq@a7R1r|oM!iag^0}*}bH=_x zHUc&(rCu^TFfgKpst;)50TY_H5zswSuI$d zVR&FT1Q9k>Ih5b1yU9wx$_!gaRtQ#X7#HA? zgVJI-doh(P8!Xo}pG=18xtnF!Br;UbU9Ft+y<=yAC4wcJc0ZHFfh8FBJz4arIO$>y z!~+BRWDU`weC~!C^%>bP*j}mla$7Fh0N9XWA3D?KBBGb73#!Mc-DD`AyIMMD#9L%7 zU|KpS!#|rcqJydqs=-A3g{&IPG3?J|elXjxKRVAbqM51~s??~b$@0O9411g`2Q1I9 z9nOS#h^V7Vg~~AMezGL66vJxB;=vLP!#|rcqKYa4D%z;^WMeCE^)T#qvJtRRDfMzJ zZgw7JL@8At)PPafl68ai8g?aF2UwS3mpb1vBA==Ws>P@a$m+ow4O>lC3sz^?SsAc;;CYx z;*FX^76}$(*ui9>U=fBL=o}l5lP;191#@>q>bV^0aI$`|LBsYV>jCRCEQAczb5|?p zeD7#BSR0sD&dGitYX)mI@BNmn0rhBC>*#FwrSmTOWDU}xeD2no_MebdfK?gx5m_l% zxnciw<{gHJ9;!SjEuAy{Z8DV4T`irHy+MZZxvQmfvcEdlF`}I+5h~fFzeE-XmSETm zWYJ);hCS=-Vnh?w=rUYAjCz7>7;LXpe7VI($p*lN413s_HXjiVRTor`QTLFwgLN9V zg{%dv%`p74DI@$;bx;jP-9c6j<`{MhnIFtH>;~sKMwCz$LzNnJ60hjL4*lfQmM1DcM*Ct{#S2WFugsQtIUp zqYA=^WU4->0i%u~>jvvJYynvZSeId_f*_(Ij;aZ&#i&_i^tx&oSydvNW(v!@eR*21_*z zRS-rDP{l&U8}%_+Bv_1L?~{dsMHq%E$PtL>rW#s`Yl&2Mxp!}pp?vOY>748}vK}xk zos*#o!iYAiHYhEYQ@u#m4AyF5pCd!{+-))pRS-rrQrS?oMmGys zS%8RIsyrwyma`XI$+E$6P4kUpsGhr7hM@|=hzhDisAQvVC5r<~FziOMXs}qrPz7N` zG1cf2Ts@4soNO3uuU34~vo&M`U_*wX3UVYOa;dtYdW<@otR1Y=urtV7z}gH$6@(EP zRCQ1dMx8=d4dxhjBAFk|HVjn|MkG-cLzNnJBw0RKkzw=6a=`KoLlq(4N2QR=H=_!I zK3OAlD4)ApI;Z-YtQ)M?H2;DOwRBhO=xm272qXHbP(F9HbWZgFSv^>ziFl6;wRBhO z=xm27$We&sqC)xH)zUfD>traOyIMLY+eL=*xvQmfGE_kjaZxK(7L*ptsh%fG1IskM zc!n%A`sr3&iAF+0p5`fgW>8F7;L_t4AWq^It2#V?PT>}jV1#3j*KX!!ZaAJPJzMZ z*OFlx4A*a(UrAO1R%RIP9T|~Ng=sKcodSaq7m#5Z3|FVXAX`nA29{|eaPN2wBC@Cw zppuMQL568C+<3#5kVS&U7>0XCMx;<-8Vq+#W@O+Nk0Zl0819H+N0aq~4H|}fM@Ga` zVHylqr@&yu95PIU;p!9^WCxQqgSDCn+&d=m-jT|I(kU?5Je&;EV7RrW`F>;-U{!{N zkd=bzd>DN1=t{66uoBbm2Qtiw;p%)CZ1*i$_C+`;b4^3sJEBk4AYBUDry2DLSt3}n zVIPsjfh8D*d&h-{=%MmK=@b~;#J2Il33e#Y?It2#R zOJrSOJ*N2!WbI&`hT-0k5lvK>2E)}UFc|R!8K%K-bqWl!N6D(e920?i$72!UP?bUH z6c}uN4;iMxaCHg{vMpr!U_~YZ_l}J4Q(+nmSEs;W^E=2e4Th^zV36HHmIRh!B5?1> zh!Uz8s5qmpBEvKou1v@^JMq?QrjS93t|lFb#&QQ(&<9xnzA{12VS**($Pb zuwKJ(@5qQuDolgn>J%7kzLX5pV7NL32AM@x57uZRaPP>7WGYO9;p!9^Y<>(GronLi zruhQ060kDEaPNqSia07vgW>8F7>t-jhG{TdodSbw23Z73RTkbq)-wkICA=bP5cz_sN>UT1_nO9gjyuHx;JAaCHg{Hh+^0(_px@ zrul1R6<}3{;ogxEZB#{2It2zJUL?ab7_Lr%LG~P3HdwBSz`Y|Q8mUsC(u{hH4AWq^ zIt2zJwv)wyC75=&cU**sS}Gq@q)}VRM$gC9!?2BH!(e-L9tXtY-jNX%RG0?C)hRHz z#aqd`z8F7-VOV<%1QO2;4g|B7+LkV7NL32AiKkhG{TdodSdGM6x8X6cd4a zM@A%3#X!XwbtD<4!EggpU?5^X+1PowdYE>&cTC~EBNe8>aCHg{ZgD1AAJ~A*=0G-$ ztQ)M?uqk96U^*WL+xf^aCx)x@VUSHE!<-nd&WAzv%jsbCn3Te8G=aExM4zk?I!ub; zRvYy-879SW{f2!(RsyCIVlWr?j*RH1!aNwR&VfPo0a+H9PJu!89$6Y#risP9;|Yl9 zqDp{DGU|0QOoQRZ8@7uq5-i3r+&eO&l?u~fxMMOu1Go4**$~)>Vb75DgAE$?q~kK8 zfeO=LxH<&}BOW2cG#IWo?7xA}awaGwgTHw~VN#!ZaAJPJzLQhsZDuhO1Lxklja?29{|ewmC~IMA%db zP)SDJO@?VOT%7`g5$nhz!D39i+ngFklu=* zg;bqTIt2zJE+)e?7_Lr%L3Tb_GgzyMILA5m6hvfGVHylqr@&zI)5$OmhFfczFDI)2 zt1=A#g2sqcsv;$y+xJ}R%9an&soEW4ysHjodSc+|3ZdoFkGDigY3^_Nnj}^ z;*ZXAjA*8cfzl~3*!*cSOoQR-6c}WWlZ~B?tA~j|6=Vq_>Zk^xbP5bMzn`oRY(VCA zAgdwk2J1BpRS-s0QDGVkSEs;W^Yvty2E)}UFvxBvs|RZ|5vYPNqLiu%N~geJ^J~d4 z4TkGC&95XY0V^{MRS-txQ(+nmSEs;W#06xS2E)}UFvwPurGaId2vk9qA|i__0V>I; z6=awO!__G;7_o#b5-i5FLluM(DO8vS!yS_u8QA_{SwGmIVW@&IBA%)f zN~geJ#2hkAgW>8F7-R>NHG{R92vk8baMDFmIZ!$U2AhYIVHym#)->ObtOBgcun@9R zFr5#B?;XtqD*`Jq?S3G`oEWaohrxE=l4Y;LNtbIHq6&gOS%Y*bXrE@(CuE6W$%cJI z76+DK7^)!45Ya>BgVHH5xXHK4M)7N?p{Ds8WW!*4&99-N3c`qXDolgn>J%7^c!{hF ztj9Eefvg>@(=b#)7|}%42&GeCFyaX^OoQR-6c}WWl2wB_CIVHE<%n>o%Aj-#3^u=q ztQf4+G~Ys&4_0ItsvwN;Q)NQw6c~)SgACJPxH<&}*)3#AU@0a7RS-l>C~19dd0588 z1s|_K6RdFN>gr~E+xui#;mp<5&B*Xrd@8owO;rL_c8&LI+*EIpVTChSS2rVjjSMTC zxw^U;86Jxn(MFX9m1!bgB*O}4uC8vz=FgE~g)>)IHzUJiF(VqOBB5eT#A9Sw;mp<5 z&DeZ98CE!R$FAPjTRaw@hKO3KeyBmCwvzRL^%=I23@egr}}ej^!HICFJ%Gcr6DGoqNP0;Sk)IH)AXwi?jGxOoc_wTwTzNY9<*LHFI@AGqP!9 zSk%nb1Lp7S_kC0)7Gq=vL2g$0ybagXE;Ia4&L{w9iK$V&1o5--jnX9XtvH4wOSmDgo z)y>H8Sj>oWsx+uf6LAw6RycEYbu%`T+7>~tgA|i*XA8OF3Gs$|u`V2db3@eGOTds z>gr}}zKF~L)78z$@L0@P8gOuJu~fnk9&R~I*9yPwE>SK_3LG!5}s zj6PYzbi-HRT5`p{asM~j0N9XWpORsPGgntPV=f+x&q72WRXbFtY5or~tZ?S)>Sk>I zE*Vxhb9HqyGCUSDqLZo`$}thIl3|52*EZ}GvNAAT-HZ`Sk>I6d6`Hb9HqyGCUSDqMj-VD#b)RM1~d4TwUFa&F>?N0gE&3@L0SG5jNFW5w0Fa z-Ay(EHd?fAh}V%}g)>)IH)AXwiy2Wy)eY5anqN=W0oG;MHDp-f%+=M+7=g!PMif%j zLp7S_7n5OyGq=vL^U1KnnX9XtF#?apXCoq;ssyUcG(VjTE1bEyx*3}Sl~MgbXX3 zxnq~_8)7^b=kT$Z3X7V#gGNmy>jBdR%@{G6tP@NZG$Wft)&{2QnURfUfHi})n!KOM zu)vwCi<`0C_hb$hM00g@GeSHTqfgclT?N`#nT*fKu)>*JZkS6}1g5K-F#?ap=OCh& zDjO=-G~Z2z70z5;-HgrOBEt%2ZklO_$6`iwP{lzd81)x2tZ?S)>Sm1iGno%8(zL^4 zF(aC(hA+d_H8Sj>ogswAis6LA3K!yd*TwUCZ?Y<>Tz=CLQl4*#?V)V%xq>DuR7^6NR!wP4v zu5QMRkI1mXnLAdvZ@}?bd>$ftsQRG>je47`2dvMqH^{KUnX9XtF&2--jA*B7hH5p< zUn0W_XRfYp#^x`OVTChSS2rWWV=*I|s4AeUOvDppSmDgo)y>%aQL-X1UEPcfkHzOB z!lBBB$~6)9kYR;0S64S<^DSg4U}>fu9*Y^_r;3A0FzOC6tZ?S)>Sm0%h0F&QY1-kj zm=PsZ!gr}>E1gx0$fT-=6s8Yia4qys1y@1iwrBAxw^U;o6jJN0gE&3qR6nqnX9Xtv0Vfi zRycEgrrrKzBVeOz_Ko)hvcWYtV{~~lzWKjSO&)e@?-ICfwC^?Tza#4a>oV*sGOTds z>gr~U_}p)IH)HcPWJO@Qx)~X& zAQvMdmns`7*F>C6h850SUEPe$&mc)IH)F(!WInJ+ z(+*V-MkG-UzbKYUb*KW>hoDTEKKc zGqP!9Sk%nb1+EtDCX;7i5`Wy1E$|svwN$r%HlKF%ch-VTCg{(XjW(V!+~rVLbr;VrfBG z?2I?4lGozwSiA2q#y402(%Y$Gq2i5ti7XN<#;_O2Lct;o!#5Zsny7|KP^T~1m;MA< zKiHsQkCOF(^%;h5ur-KqsM?@9jJk)c8LZW?Eo2Q~O@`qcj1hh+8>-f*JIE@)stmh@ ztQ4%=FnohCqJ%0Bs?eyb$g;t54ZDmi11!rhe1lzrh&-x9sAQwgC5r<~Fl-fBG+3-* z_y%J{Ce`S*sLUI+lx!Gm@3s4e*diMM8!`;vV2ntn>VoPq>KL+iuuj7kkhOrd8HR5# zL{!94)j>5FHH)ko%rR^RnIFtHEQ+iQtirGevSP4O!}cf32P-mc0$I+rQ*m|}h;Oh$ z?AG2ixKy;yFzP$9B(N02z9NeUOEe7MV2l``ihznX>SMAol)rt3y-zj*HfqY`_y)Ta z5#3aMPy!fjq{~fXZ|$r_nANa1-*Cq zo9AF7p%b3IU@^u7|Nk#%-iENb6OUi+WNZlge!mY8cdTP=3`?3Y&$(t}SnQFrKt3HC ziwRv)Fee88KM7r%kDnf}UHI<~{Ln=$a-QE9mN;?kGN*rI*o+xv*x>0WUNMKel0Lb3 zPRJ1jbFOzLZwlKy@rGrNvnlN2i8n8E_HGJ0Wme^~Uk(c?dIT5YZzf#u>h9zPIdN+a z|NOh~JC`}xcG#?$w=MgHZrALyCO zMY%X2DvQXBh>D6hNVJfP1~;ogQL}Db!DZLzvM%doH@bXRR92%#je;6ncFhIo-*dW7 zC7E{Sec#_-`_H#OpXBL&>eQ)Ir!HMxRo&CS0O+YGJpB)Mu%CBt;c4P8Et}Cl&$zW; zL1p3TGWU{xzCfV=fGQO>Jo~Et=cW|&FWfS-|A1=6rG8!F?=Q;Vdw<}*LixK*u58DF z!dE`nn&j*Lar%xw?8$M88I$y=kY^TL1FA&M=Hcf3(48VgTTO8td*#ekF!{7J>P$sJeMKhqWNsI0z& zG9=a(xxuEaj+LR({wq~9KXAT!6@t7wKn&h;1{E@1#SMa|icWFv!7*g^H*J zZtbWvIC#r92tS7Kjy3-{WT@ufhOicdHRJE}9lzOAkJdpR?F`TTYgW=8YI{E|Oy1MH z#JQ*SmXtjW=X6?T3bEo{hX@ysLZPIK$om;3{^qohzq!9R`G3kg`Ir51&8kxl*TQ~- z@K@-X-)|BAoSupOQ_2?fk9ZgL8$4JPmvs_b7WEX%UM>(@Zo!`^(w7W9V-`QQ)W82z zhgi`SMR{+Qzga;4JA_z)MUU5nvE=n;vzQ!7 z`P>S%U!$_Gf*&58dCr3lA=1lm9)vIJ(mL;XXav6R)JZf49pdzpj$X(9m7M-;UD{=P zK0`Li)bCK^?t`zA;H!J#t9zht5KRAk_3nKGoN!YZek!p1^tt7yn#I3_pOP#;k$<|v zKZB5sNu5QHualGW8sM8I?;o?1;Fn9-FK2h~%K^(TNlSJni??5Y|E}yENOb2!_6vOM zND^;ncW{fGTIO;k70WBjT*JD*nJS9C&aCC@9W@tEI2@E)%UlD(mx$~oo8ThhNqKM~ zT=c0(wp{e+Mt`&PJGV4<@;6_Y-0SVp=ESYPO%c^wk>bhZUeB)XneiaGiKZF=6IKUL3HZ@J>-v>@(W}GvyT$5$ zb;-_WKTpnl_KW0X%aCEXOZ4w6R$4~5&=u8-VbULQWQ9-P@opt`JiCz!X`YIHgzhaK z?*i-mbDS>{3;H>5&zOJ~L^7q282}59BCNnwYFYas&XaJ@@#62RTg3h^?hyOyCJKy- z#QyqJW6zhfMDv%!&&aQC@$aVs{o)S){&PemJoB>${Sfpw*QZW~kiYqn4vM~nqHmz+ z>${=wZr7gAcR<-N_ny!Cr0#hi%D#lMZ=i@;&)0YR_vgZ>&v*DCTePQs*c8ZJz9$Fz zBIuDnU+6!5m*0O{AT$4(H35A|!5)z{b3wnK7EVNmQiu-aQgkSjmXSvWWCi<)G4uP8 zXTF9J)IZc;BAQ=DqF*CX>L-GogjLYgSJdO>vP~bD#c!W6Go|-&SK-;eLDAEFw#I>8 zWA!bkUc|Kv*MG$I0+Ifp-|0X7ti1nm+~{#5dG2x7F5E~aZ+BfFYqq=QIx3xV`VLoS z?{)s>;OEI(98Q1p1T^~rrwX?|=}0LH4g@D02RP#;<*I<~YX zXXc&jnQ)qHzje?D*)Ok4N_&mEDs*>`VWe5)a$ar(R0`}d&tJLYwx z!xG}Ow?q0~q+f2OpRwe#(`HQa%aDBQ5OVvZWoFpeW1=Buxy8%L=w6)o!x;Ac$Q*yO z4tum`>Ylq6;1;()G>aq=t{#BV^0RQZ{iVuZ5r@8ihtC@B)(%L9~Gys2hJ<#pkS8>Cq2B_O!q(Gdeigx;rx2@hNDLLuwE0OW_%VoE6 zSHJL}2DA7^{Qc6C{NR%!`Ix|YvQspVr^?#Fw^ZTlelm-9!x<7`R5+g}XJd%n>)Gx| zGwjG%GT@|H{1S(KmYjiplETxU?Tql(9BE5LBkudC6w4s<8R}u(L`QhbQUnSis=gi8 zd6`IF_=J1prRYfno(wuIL#=t=NS|#4^b09DtC>(7xGwJLi3l@cWbtp^b_VKSbK zTY#yRx@5<*!>kfad-g(PP6l?ng5gzQR5`q1mBRvbEY!f~KSGaUj<)eeTekM~kKIIBtO!Y#u)ZZt{^RLN9Tb}pI0Z+NorawbLwroB{oGqKXh?|bA zcgW>7aFol(IG5!k=9Q}!m3k*lD)z3NziLrFDrQIimify7Y}Uz@q;zv zH$C&pMLTwT{C8hpkahI_A1|pKbj{PJ4*C3d&;H$A*Sfm+{~Vq9&9*^}m)y1H$baT; z9O_?jvHOExezb{kr+jj}krFQS2+`RgL|{ad>6$J?1#ryONag${^HjDFQQ*?EgeV6_ zfPqm>W*w?S9q{luLU=|unI%I}tARmSUjuXwNBj$#%)X<9@B^DJLTf8%GLQHX4_H4< z2=Bxu^S~?-7D1dGx)Kozo6Oa-5#iD%Gjx>@A>f9kXv#q6G9-K%u7RSc$;?`g1c3)` zhN8($=Dv^+L15JiTu*5-=OR-9U@B4-5ip zfVCyi1N2-2!^04a;G`bd2rNZF;96Li4$FZ#z%pPdFftE023B1MmjY{mU3!5J!Vp|H z0=EH!^N|7Y#S5CuLSPVB0xSh?13DKrnR|hu(k3%}1SjP<$<085*P{%92bVROCxK!) z$}kiB?WhBgi>yY@DdI1XGw>1M2B2>Z6axdmy}%%_0ay#{k_8W}gF(O=;9OuMFaq?4 zo5E%}PRheg<~u;&W|VbrB)AJ@MOX=gPzlR{tAN$Ojlkd@gabVAp1k%XE|2ira(DN=@2{3dNhIt|XCCV1funJfLJP2G041LvPZURPrfT07C zAh0hm+Sp_UfEB<}U@dSpFdRGqi*Ql{JOZpgiOM$!hWs0q4;TcF0Twr-D1bG<4Z!ji zlr^yKG|CznGMh}1Bg6(^I0T4l8EieMC z2UY-`XA5x>I22grXf{_9I-AWyz(D6_^Ej{?m^B!N0EYrSu4dB@tOYIxHoBY5y}(d6 z$O9ulfsQMud$Z|1Ck#QH_(81lG@C)7w+Ac*inM040T=mPB1*}3q)tF|p z1iZKqh5(~u!2@f7hY2rkHeKj)8z&6YwK}pW_4;eOy@lK&o_ zhMcDn@qmF7VYmo_fgj<*3(z(G3w2=}6f^-x!4M!OtVAPlF;Fx&n`?m{U=$btRsgGj zhk%X1qr|ts;L*rAFdf(k90T;V!XV;-Az*D7CmSf>6v_k`0v@0MU>(qNy4gHQJTMCe z)&R!=#hGTal+c8SfI(mbFp$(@7LGxVlUvMkVAR=S)&Uz+T1@YSkn7xH27w`?#jF5^ zt5RFc<2Y&T+G36ziv-eI%m~n*-eOh*eZ8OnSewyeW?cl2WVVecl%H)WvB3wK(yON5lawW+_k% zgd$)RSPg6()M9!r!F3LD2K1c`MZg+hIWRD|#XJOzoYP`<@q<4X2?7H{Tg)E0cEeyAs#W)Erh5#^dBLskT%b*yp_AGBTbEl(D z0H*@|H^UHM;Y!E>tAOGP+#PReHAe#LfI(n%RjXMBOux0&>=HoTS&a+<%YV^ot_C{S zw3-z_e|Rkv;UolX0v-nD%s{}Mt!97_2CfFytcO9s;N7j}aiDhtJT?;vKG zY90j!qA+L{JhBBj1O^^~N9lTNt9g(N12zCfS*uwGJ{)+o)qJNI3V`*%^zF#WmAE}V z*=k0B;;B|M3%nON6d3qrs~G}TRkWI8X2XTQg5i*>19ri+_vu!%99Rgf29^R30YlHg zaA2eo9=!_s_rRl9QTxZqMi6z+B8R}j=U^eQ3fQFt9@q=l0mTcg=1!pJMU*kH5m<6H z6#g2n1lGI+9vJ#ftLd48YoHHUSB*LZ6feVYpcl9SSOq*e2kk%jTUZLB<`qP^2F-9E z6a%Y(5ukTJDjP5gtObf!kz-&4m@^k;`a8%2s}8i9QDDvQQKUfMA5aw6!XRKS(EAz; zple_hSob>Q!Z`800ZV{Y2jS9r5PTCZ1P0%N%YZd+!}Zs}6SXLcAc_Du6j%!M1JmD! zXMjFn6|nm6@E~3P4{HB>$OA_LJs+Tmfj(dpu=vAPGhDp@3FD+5==rGCOkaqR5U>bX z2V4vEf81*B1(pMk0)0o};!-FE<^aW~Fcg>$6pN6<&yh1=Ezo&AO3J>Q}I10%pL zH$fk895DEOtGSe}f$spLjp!Gaz@xyvz`DjT62wU(h(e$^fwBaa{tFR-Az%bp1}p6G~nFaj*O8SuQq!yg`WBgH!wTuX!Wfu$;6gmqz`1mI z@HZ5HN5G9E0*4oWe*8Jd%Gr<)`^Ms72-o_cIBW6Ogt-G3lf*^wchbgHfNKP&s4LO?o5t`2`A$2O(4MfQR?iNBfx=?)kJ9b&A^Cp=UjXA)+OmA3_qU-Z5I z`6SV&PnZ4z&ECpQmLHEI&fq~F1Wr6 zn#|)AcS1MsF6R@;mu_`j>Hg%OfA1zHq|UQY<)Rp}2a!%W$>N~+i@^n^HT5(X!`u!E z909qd*vNE5r_21SjO@N7yAQH!ZD|#3b*z$g#YUDRG+nk7!^yb;IpRv=k@F8>x~8KK z4|YPSAvWcNjsX6;K;u!!Z7|@g53iLU-)NjGy|WE(c-!{ay!$)D4F*q;F5mtZ;A?{KkuD{xt;y9Hl|9Z7C zuwSKY_ks`ca^TNuaHTkR_LAM^7-ijYE{yH_IP1HZ$tcJYP4;Ge<<}U_)H2QfyF|Wtjd5;jttQ?p zAp-}vhr;?MxTwpcvfErEzhB>s_VzOpVWCtZvcT=7mUg3@1DU+Wow4<1V^?%t;NUdt zpkmtzZt>%CN~tlW({Y?sa4P z!BLvJB)!nT8r<=nax-)~7Vn}e)KAu4Yd9U-%H=<1g>L!$+bADFa1)FBFsbW zDpai6RWxXL9gEYb#$?NPf<~8&5GKWRW~ka6LG-on%I|~5h`cd>ZC6dnd3y>$TrSS( zpu!mmF7Q`5WxkQ`u0mKbIOiR5{d{AvyAIbm=pvn0$(InG_s)CVW*|fQ>JZoYe!D*E zicf;`zAxPi&=nv5ADOoVhE81oAC3HnoDDMd_&;#dBc+ecl=m$#h8Hw`i0M7*x%eQ> z2hvcyAIDl>%bb_x2Bwfp`_ zb#}U=?i0Da6h_beO#Y$N$jdAHtlf>|fQDYUuXNxjF`9Nh^qK6r2(Ar&F2^o13LN9= z<+?@2`0(1V+cQl@9>_o)23LV|7#VTw@;=f324y9MA4T}7|3mmGgl}v}9G|AdyL{6Y zo*9!s011qPz_xGX%u9y|0&g?%^rmRrz}gkt%U5UoLCPW0N2!kD}r1t zxRW{ZtEI-2Z2w(`Q`Rm+*E({T{KqmX!eO!nBJRdvm}*7e?wle=EH`F5d>6|HmK$>%tER}W zmZP_wdYc@0v++`Lb&6%kS;OkRaM9hERYY2JkR454lp{Dgr^AcCE(6fO?rxT!Vt^q1 zAtar3pPUpj@{-4FWUDrX&}9{Fl#hjw(AN<$!ch|Ji<%nC1d2ZJWm}ADx**RNozr~oDd^E{&#DMEJ z{xPVAso++F8%Y_$;l*DNT*V*d3#*KN*&A?PXA9p3uFF9R zADB^eFg9*2!d6*f{jyKuyvi2t8Vsi%l>Kf++$_v(cTAVoGz$Nu(k;b##1_69+}=OQ z%@nu67FLC@^fxJPwye7qr5kutehWdz+Bapl+t8(!y(vfEX5^<-qeQFaiTjLndFO3L zX7b2CH_N}>g_>G*o8fYY{*0v=)N|)Gvfu5-6xro=kj}p_*_X(fsoUPd6gLU|bG*Fc zc4Jg(<=dE)Ct~k-`8yEqL+>=3ONqEcw%l%vb~n9?YDBGhiX6Mz80$XxH%z|Mb%tEG z+8CdD0JHnn^(Pn0@M>d}Jhj?zrB?qP>qRM$dirA7{TIdr_m~ecsgDA3-X`b#!pL)P zz;y#%PnVm2f#FfnN0{T6yZ0CaW3bF%#e8I(+yN=Kzx5|`6Gn5+o8|j!$l~8(Ie={YVw~)AhcO{( ztz5CzxGJRrJwZe!-DwOle6Z{YE|1gYu#_(6q1%<$-f8rg{AGQP*qlM0p?n!qU;{9q>o$ z0eH_jefiokk8rZTwQsyAxwQ7~t$Q7ev-qiioZ=T*;BIuv6y|EEvHgDHO2*=rb$6LWYDy4%z-GfzaCW|N+6j{4+Z3Ag3h8){w z$|vqNo^n@$qaAdcR@3#f?sBZexv247CueRzw?6d=xo(3o$x-@y+3g;5|Aml0h{`qe z3%Z`BFiaIafNMwL_wu**U`P}ALFV6UJT*QG>tgzrMES?oLXi%x zW0}^2bAr!1l-cj^85Q>KW<~AHyR_{#faypCxCf!92C>yiHhlm-Uh%kZ3*h0`L0Z*t3d_Z!(s zb@KK5jkNGuP?cR`MM+f|_&`@I3Fstdt0eZ4d^gPQl4>Nq3aUx|Aox)CSUrC5N5N-# zFujZ-f+@jWU7koSc+~Y+=K|SjTS}o!eE<){WggV0?#SEQ`SOwnj0uj)9&-Hy#z6O~ zo|pkgi8zSX2y>7hlPj zshiME3oIT+VT$v$d^vFwMxMa|@}^D3;N&cCYlop$)h2X#Cr`@nZ^4bQc9Y>6=v zM2dJ3dPbfOnYh&1erdgY{tjCqd5gXGf>q5f44lJ7r+ zk!@Cv?6euzt8?Ut&A7%u@%qg)_?##o+l=_-6XmNww>TR!)nxfZ`4xp%IF(EZ{ABz<3p-Y8$=L-2r z8Rm9E(@{04cX{m`nf9nL$`ScaPI(j)qpJ}q$BLqwZD+B=nlE(Ofr5|#2{0iE+I%0~FmX$^NWZZUU z%e-xPls#kE2kkAw%gqN6WuHj%vJdu5@fi zz7Nlpd4##w%9(_rYvmfkeHQk^-gyj4#60=dcGT(OdGbHo5!rv8%-dm%PR$CUAEnZ( z93YqMFfL4~2N9BYZa4a%Tf!g#e+QW@-}qt^4Cvc?&Z{Oqpu_9cA5PYd^`7cIsGZfZMt2qBRp`s zd;xq$78a&;x(A_~)`W9b%l|xOyqVEuO?%#I5q1C_WtTPb{a+gIJIdCQzC2l5fgbhX zT2h+#*sly{%E`6lWEjv#=KRV?clhpGTJSMV7{>)H)S zheO0wxY4eACF5x$BPpXxq&<)<7z!6>MP$J`NSR!TqE~j;T9Yn z9{e3a*iLY|Oo=-Vt`eM!gm4fiuE7%`xQ=xt9b7rMQo3Q{Ah}#{jrYaI9S5!f9P0S= zHo*YMCXgKyE(Iqx#ztNZ?oyM~AW9T`w&bqB~&2wm-hsxyB&l&ksDvtbQmQexWpc-#2aX;4HbrNrRWG+V3 z;B~DU2Yw`sC;^ojP*H^y8ckDn?qHZ$KieaPI6X z*F2Arg%7&c()D-UTv08LQ|GJw&0yi$7Ykul`K7R2kXf5?qf9qWyn<#tcw$ zr9<0p6jxZCdqHX;V*#V;^ncFd#&Y@J3*1{BlTzs(BcK+0gwg)LIAhL5wZILiHfdM( z6TK&I%__@$G~=;eGA(^u+T%U9_t@dt**&GGTgv3Fjuu&UqtR=SVcI!*3WbmJ%g)Mj-P@^?>Td2aE?WZH?;wn@zE=`%1k}|c^r76=> z1D&Q@F(-7oywj8kou+k~TCk%FltQr3iiyht$W7q1l%5GnfmPW8$Z^T{XRK*K=RJ9C zxtz4sQHEC+IM! z@s-WLGgc0q()VzZv&wk*D83dCh;-C3dhb-% zK}NAoUHiidLkiCqRZIl#QUPMU!U&`HZgm}GjBb!UQr&5<)E+Zxx^4|6rOIft;R<&x zvyvw-T1S@c`W)N!aNG4Id~G#nXqe2`x{E(jqBM79{S{BTth3(g8l&uwWp<0vKj~vR zw#CRF&~&2;Kw(%%W2QnkU#H3YTMVz~2X*aWwodMcj-E{ysl+gtw~nID@>?i%G^EJv zR-<2X7gNZKS}~CM#!ba|tux%n=KYs2EdEOgbGl*NXaAcXK>Ghx11SCfrU6#^|3w41 z5Baavf$)E`@}cPexBdSYDlS;y$zt*)D%R(NEOLJT>rqh_y5U_T3n-Y=+tz^@h7yz)vv*6tjC^8Uj4^& zuFzxDSUyEyc=@v9-J&Xi=xi)c$eT|tQs8XD9OSQdN8dy!errY>%(LD zR1u)XWZRJ}x(Gc8?--OUx{8_@mvZ{a0%QBJMn_reJXv%XMN{JO9=J3f-vfhvJ&tcz zmn?dUs(AcJktX)V3&1Q(^qY8!dWmwmrHi{)pA6B!PYCVlkgGBwu)Ebr>zs`Bp?xiG zc~MvQrBj^xS&oH^fDVx=G@s5q=FxHdyciTuZk2C!b?0Z-bEm@5gbv^Pr0m(vJuLjH zs%NpmKQAp6Eme3b@dVo8(7f;6_wgu&XHfeSA+feiNH> zEx(Ujuw^Iy=?n&GdZfdl#yZ7xX7C#%CoD%CU#%z@XJuuUAJhnM$^^xDi z@>+cr_dGgfE$>aB$7kb{pq2`*w%XDk7RB6m=>#I&)!7r!lMNv3 zK)Z^4&vbMM`U4dqO*H;9wxqQ|M`9wh%ZpFq%M04`+~Lsrv*O8z(L-e=h>#mE0_6P( z0iioR8OSsWh+#^dI(S4I+`VNTiYCDshWj&)afuk zvu$RJR`w~t#}RbR(+(ZOJg3{%NqMh~y_ao}!#(c);o6g0P~||`*;Q=gVTR6^Zp4BA zDEa@_HmoNSwVqoM-Ri~F#9~<38*x@#2Xz&JxV>7M@O>KVI9;QQ;_~+15vyT3$MLIl zmMF26jCQody$^sQ%-o8T~IYn@lCAZDb0^pd^tzc2G-d; z@LQJm6ez(O_OY(%Ja>x)EIw*Ef}YgPVO}NBLwMu5K221{b!DcgvvL|n>$bUwnjY0r z&Fgh7l~9^+)y0-sCuATA!z9h?l^)uCMtl~_$Li^h52m0_%TZbGA@i$NvbQ)-+6j8% zTKixL#HjvhezDC5xp95aRaD6>J<%!D$lX2My+&qYNAva! zHC-?BvfcT;Bag*es1=7uab`HmPbE5Cow2qB1P*wHGoX2U2F4^Pmzt_rhw3WUpsGxs zPPgrzFFuQ{d)i(u;Bq;?z}@ToERmJKADWN#N2X}h&3@xz`D`CF`KpVwDrojY7C**sVxicrPjvJgNq6zq_xO`XPm9LL;XAbu!r~sO`SAZs6 z0dki}M?X}6+7a>nRF{BnOu&otwk-Ninvw?FIz@M+bK$G2RWG+)huI&EyUR$&=fgb;KOaAB8#CJukBAq~OAU%yJKS?s{NSntykGVhg!)pez$aIzD}vskYvSt?ayLmuE$H2NZG5Syd=FBSefZ{b z$3y3%#>VT6C+fEYGARd%M&xjU8o329IdFZf^3}Ms9?E&aUe7EjVh|t~?x{62w`6CJB_x)U+HlJYvBteA6pGUCd#TW4l z9c|+*G=r=J!5gjMWZxHVdHD?Y5Y(Qc1d@#;nUzS7Pfnm@LJ1m>1v zPZNg{@C^xgSABdve#N)fELFUyR|z6iCEyzp@UAc8C!8C@BYmB4Fead#-JuesJ(SuNJe2arW#qtuDbW8FsS3GSIr$c8%^wT$~SUz}hd_J_$;(uNg zk^AFEs7=5J9*8d=vGKY)j~&u>D2k{pg3ej!!Po?}BKsrW9`?}52b71fUDZ0Ye9bGd zHy%sB6E4LQ(olD%^quGS7&=k>tjc-lOuY}srmcgc@^uOhZHXU@fj@%7{FYn8DcTesrD&>1#cUE{?tP(9;w=+IpyDL5)d@4R4 z_+@;)?it0m4W-)>=E0RJB`nc$`RQGf_6Op?$8zA=?tI6-ujEW%xHfKg*;O>{i!Ep6 z-89jVK;E-IzP$K4PXCSNhFm3&?@#cd6Uh2nzC?!QCWyE=K|=ln^3eqHC2{4`L`d=N zOiB&u-lG!F*bRG64khk|uT0Zd4`1&^fY)s|eji*5=qg z=W==12wExmG}caSPhA4O>XZ2LdMh-WDaNt=n)h>2Yx@@~``aC-0x&CX+dQE7OyRNB zfE$rO5^9X*$8gFwGaq1i%_}`w_(W~THUh`pYDH)duusP~Jsj(}r_O>JsNfBfTFmL>x!?C$Ll7uL_>@t zbi&<5?iQIn8coVSHbp04q0V4qZY;0T$KzXq^={r2-=?dY9in;r?P9fZNc+^5PM}im z9_8+Z`(l-Ka!sb#XsZ)S60_W=JC?B!dKp9WG2IS!%9K~c7V)QYz$mvjoWKEkbHC0} zEoVsc`gJ2^O%D-CP{Q$dG+?#)4OL*Wa+JH<)GXn(<>p^VkJh0y@8j&aQ7*&>&ZyjL zUfI!IR6Z@|jB)3W2wfb%0FS7?OlPZYgc`kAuD`%N_` zeCV4cB4%u{Xv2KZ;CBO2;{xMj4ZGAzAXStn;PqP-+TuxUpypTE42;G#FiTV^yX*sl z?$}}>-DBPP$$`6E@|H2~v%||dg~%n!QoW?7Esfk2+txH6wefebo+#_lmi~@;rynOc z)^ZM54?a6jbF#HcS+?5yi%vuJ>`o%-91LsB`{v|cH`^zNcY89J5A8)^s7PI z#uBzs^A#MRORh4mjp*iWX6Z&(^_=pJ+;_1%S9&gTd%|~XH`un^-NSsq#w%6Ww#S=3 zwW-@!K5CPH0X%h3*xP4`#(Jb@_-8u}U$r9qdqxQvI zYp3KOZNI)3wp*%0y2xJ_;>Pfhwp{VLTGb}t>k{ydiFljew0^N!rQ0@W(g6Vu&}OQ9 z*|&`9Y;_f0+pSv3|9nHI)-xtner(%w!XcZZwW7MXd?ub~vHvL(8>o{rdfZD{NqMSF%5jZGSro;HVa#xQ7#&2d|X{YT^7!tjI@m&fx*Ts@g$ zUrdvcn@74`Y28J1YHWWsME1A@V{|Ni=#sTidnd9zKHq5L|8L%L@n&qDh%Uu_DpPF} z0Bv5VO_19o337{HWmenXJk#Yz1t{;}j`)^Ge;uEXycC}gCD`0)FK?R%em=HrkS8v| zypS)!)=3WyVKRIB69kX3f+v^64aW0*0zMj-$EGlAz=VNrM4e=cLzV+kLwr}n){r7q zL#k~1-E-S$k(wws1KUCZS$GV zmvTJ(ePnK|U7Ia`_YPecKjENNVE>2R%J_Il-eqV2Vp^;MU0~(Q;`3EDzRl3MEiQ4- zpUWebXL`7M^!C{{tZAi1GN~t)s}h7Rrp;oR^Go6eqp~O9H^$`?O&xU=SY5`RwB$_D zpgWI-`SPP8jK&-9cF3(g-9xaAHgdfjJJ~%cTl^KzL>&%Y;B^nl?US*c%Uc&OysJ>< zH6)Q0cruK}mVdof{!?ndh_8>QgW4?79*zH~*IjJfA|III9yZ+etgmZ>C+=2y%z8Z{ zzny|?)trcLMy330xI3$N+{%qUTi$lsXv*5CvOzK3cZCz$u!cwKiwQnpM*Q}xqxb%#TjX^`XTAkEvS95o-m z4j_XzJ=!76rwQ#5ZCKWJ`RX*3kFR@t!`f~iTtc7%ug)C7dH)oKAgB#{b3GN~`NEMd!`QXuoQ6HE%b!%4U`}SMW57&W1ME^Mt(V z3b-%Q|NqINFsd?ZvRkBiyF~$8%G#okjn@|WcE>t!dPfJ!=cl{VvIBAFY%r_)jC>$~ zJE8YpRc6{mr8;rHR`;y@Hh_muYE2!EORe)%5q&6@*Xkk{##-9Om&cb+)E4%!p0Pv@4Wre3jg_|XchBSJl@u3z60J7=ViP1 zSzfO$ABYX4 zNw<+|Rdl4KNOqd#9+(~Ymm0-wW99oG+Y_?hKgfbvC|uqmr~8kyFu6jid~=klGLANt z`RKe@{$B8;uKsM*P=YM~68HhM9fEg~=n3;A#f%1v14-2P-KYTqEH z-F9|2E*5T!t2hBacrvKsdgT`SbU7W%nGf)NDP7TGH}n2I$}diE!tAwJ{3ag?np~=%YZo&=8ax^54n4W8unt3+D< zW|sGCP^F^1{5bd?lxFyCoRPJ9m&5_iURTVJQ%WA|CvouAE#}8EAK1jXW4A5^Z|S)} zSr%aV2f>QyaNO6&MN%j=hcv>U$$Pwv%wsz$PW zPrNvf5|m$G?d~zZ$httA;uQt@7#tm|n2&zIMx*DW;}Pclt%^Uy{LA1eu>kKzp%3BG z@xA;Ed7XbQmhLT&^YS)*BbAQH;HeVoc{5!J7l0>qdf%6>_>%QRr7GzSN)3Ki=e;@Z z%#_ZEZ?%i?B{(C+dg3j}f+ZvY#laS3|54`e*ZdcX*NdY2nfLEk7Du>heF>fn)ce@| z${sPjx8>Ze3zK?;%dK-1z&@ojm(x1HeEGi>ue*(Zf~R`l_*<1-)i(&y2X|<)IZ~t& zsbD>qFz@-5GAhWnl_|bJ=*Qk7m5z7~0pt|@YFm&M9brYQHmQVlMeV$GOLk_`VERA* z!agc4uP>uFRL51!>z8jezY07V-B_rMUdzTk0p6;WJoThY_V<*^sCPM5;2q`eBb>@l z%!k+oy6$J8H&X?khcj~C5gyg#am*6%lwR})<%Ck^AEcPzbDm%e*heq0yk1E=#PT1p ze9Zx6**50si;&PiN9Y}ay7~3RgCse-k!SI=$rpkrg8~;RkJNL*<>1L6y@SHb{M%c% zoRt~=mP2cK6I>1_pN{8bD|HGc)G8g zH5zADzt6jfbXA(ECBmC=M!D77M|I`-BlB2@6?EiU|M5X@uS!$U9zq;hTnSsiQ`zXv z^*SZr0Ht5=an$;+0}uJIpjXK)Mb>{I?m+;#x%Ls|M}E0gJk5%tb5)APDp+(Gs1ndS z2#>O!IpE14y=i(3^IO1^{-`y`TcW;EN@1^ZKt+FtC93<7kHM3N{4c14*W#Lv?t_$~ zkw2>XpuL~ZeCc_r+;xtx+BzdEGrS6+WR`xVU)SL%#|rTj&|+nTILN&HPX8axPf&uT z$|&JQHKy!^2CCH2maJnkc+1~GeumHq-^URemnB<*x}cv>5kwa6eADu;vV7rQrzKyi z^oyh5$xZq_dd>GZTk&dtXc%J{F1YIuK%UUsyXY23Y;RI|?U*ap)Q+kie zfYy_WG9~@#hnyk%C2 zs=~T!Sb#eg<=cKkx(7VT2l)1$!{&a<@*dkTvFi{@w`-X9WC+3T6B$+jo@{yZh1bfQ z5MJ<=}su%Y%@7zTeqU;v4rRAJ}el<3N&={Ie{6kva{{emOt6*PO!AXnUcm;eSOLb&3N9jZg^(suiK# zI~hC~x{tTA>qU+wTW9pk46j9~Wfp&RMQ3zB^LiUc37h)?r=q`RQpJ2L%j;cbe&%Pv zFVrLH-P`b*b=(fVC&qX;oYf=zfOU>%R(?LpWtrW~>(vgOqnBByej7{I=th>0E>KOQ zL6v~$g1SOQQaD(3OF`Cuq2ecrz~d?c{Y)GkH*o~-<%&PbF8(F+br&d}Z-e46_<`0m z#rHTPXK&=kDYQN7=s!xCQ1`rYa3%AXF(0(mvvthZ_EmYH-)Ezv8oYIb$;- zF@}HEp(c%15%l|nIzlmcYR!Ib&6=NQ$>WiRH>u->X&v{2r+T6{YU)wb9_H06%jf`| z?5lAXs2rF5sC=cL2j_t&MU63&$3naW-m0eTIb_H>jJVoUHY2=n*WY@{i;d>>&duKrLVu`r5nN} ziVq7XZD7EmpQ)B1fHF9SXPA1iqI+4<27bcPp8Y*|GRXdn_Yw0U?g+J^Nn@2kwbmdE zB~if%`RovHTA3WT@V6qz$cRJ^J-?UDER}VnaL5)ss~_5TG8E z-=H&?VDHSnV&3AkJO8vcrVm9qg@T8}_mn!s)%^vncZ`!IOu@ODfxEF~61N_3Ki4LhBvylx;7M5_PtXODw*ps2QpJu}Xm$ELYr& zHgKy77oHx9@5|{t0iNvDFW_st-eq~c45{V+4W4=(y}u%h^>p(qyMoh|`?TA06_2gK z^h4})a8EqTuOisHwfmV5q$)xBxk@_z;8%v~-PUzP;`qw1^!R2e{XxFTW=v4>jn8MC<9YH#2reFv zU~*+-zOtM?q(sNBz>_-tWWlKvCKqar=xb|{{`z;>BT>j+1_00c^71i)~QhOqMl1jkSSvgu)xyzWZ z(OnOvOX<%;0OeSJ*JLUi^a}Fm7uuq=k4Lyj7IE)icQYk6L{D z%bGnc|0D26R-|93c5#H>la)clW!wG8Ay?drPlU{zqV$QADr>7bofXVSc#%1W`CZI6@}$1@c%`K-{5A)B z=`9=_OF7yx=4*LNqBgtV<;suxGfujSUjm-88P!#p^^}6A^3&g!(Kr4S*a7*luvgi> z2%rdcT*c?Iq6@*(m`v~g*9l*v6p4z9QY^^|ZYn#Ow{I%=l=-0bsDsM3loN1FQw6BM zBZ3D4>$ng+8Kgg?>S6vy@MI9bZPQj`w_18I2Wi_*@DcO+a}QR5Q)NGII=hZHspz&6 zVE!OaIBn{rQVxM9gX}By`D`A9WT!F?;iufBtZ9|V`2(YR$ z&ub54MO(pB8CP+?n$G-w=F52p(jnEh#n<4;Lm~;~k3$!k3mvbe=if=Hv2SBVgE>HO zCDNV1+Y)tg<<3+Z?b{oI z;K^(Dx##qy>m_v1LDx}v{08f1+xg12m(rfiQepFCUfzR`*w z$^1pk>(4}$F~1Bvc~8Gv(wq4Qz{58f)$j|p6&$dK71;;=?^}w}#70~H(fcZu^;JBN zUCMeUF>hbnSi`*U6!q+AXluDyzK8(wg#M6{ZXLZ#RF3tRI_PK6=_mqE^8Do-F-Fni zCGga|n{2yGJ^^o4R9?!nsy;Pz_th#uZ`Ad(q9M%N7s-p5uS!!@THgv*F|Q_W+vjaJ zgSU$EAyuPwB{&S;8r9U^u3X^lqEhZLM@7(IebHq+4m{<+`-8eE>Uz71`2cVJ#E*Pg z$8PXe-Qt<*EY8?#T7M&Vbh^y`%@OdeB}-IC7<>)qV462QDE zf1%3D@>xOlo%NNubMRx3suG9?5kQ{s+cqffA>MN8eti~xk7aA6YF>@3!vs$^&T89@ zbI^R&%@1ilp^nSJTi%?gGOIVFRI_~fe&w!B-IV-M#lvg1ojP*_4UTdGv%yoQ zM)DSzam?S!^7@MqntvQTwWUT|TY81{R9G{>;r6WtU$P?6s4UfOsn z_NsKn1>ngbel@Rch&YqwtGLQ*`IXE^`4vJZ>)B@Ud?B{pl;ocL9E+;^U;FK^4m>4U zVw(o+tZ`gF<;1l4< zejp5&{z!yU=;o0-?2@6tL%XFi?pv%0=71yB0b7ahO+YyP4V*vR}J!COVM zTP2`#{0VrgqVspK_2Rp08S~2=>W;wkAEIdMiL){nJ5QtO18n)4_%|=v8Rh4LDO}@2q1%s)Vq+v%lvNeWRU(gR1O<-S}77WKdBN4 zv3wt#&>g(Wb_bsTp7f}f*E`$*uR#D6dF>LFV;?J8#}Vv()tk)M+8(KfuTTltmpa1C z>)##@Ko&l3aseOe4UOt{{+s+D*YXrsVvcZl}bHYt^AfgR0R|;Z|@ba15YV! zv%P?Gr(E#>#?j9qn3__^wp#jU@RYoL0pH-DtHtcV15dCO5V#a zW%Xiyp^^`aQeFTr=YR)TQPnn;Kg}OxKEiLH=+bKdPlnppr(L%x-v0hZ4)~s&7PcX* z>+K#s+M?iU{@E+t-_K(e`g?A=k+0dhqBovEI8?v(?_s6C2Tz@r{x-7an>dvS?cIZm>vLgNCT*YkZTO2|3RxLf9`5&3L@9FCE3uTblq;kB9 zdw?6kQytBMQFK(&zs305iU6w*yN}y~N=NL|ysdBhm=n-nt85@eIGk%ZVctL+RkXMW zyc$+5qcbG$tX8J!)xO8Ut6^0w&a4*wCv{8g#5z8*_%xw^3L(gRD|o86`a3FZ?fVX; zM}Hss3YK3Ao-C;1&7~F0KWg!KO?tDt$K?GiRK}}+Su9iso^DGuw%gKa@MMJjofYra zUuR_|jiLYH=vpNcMX<~unZqF;t`Rmn?eLtfY9G$)`hfz`5azwDii7` z2TvK$UkOs46ygKs?Hd<7cPV-G6{7A!=!EAZz-lm~9%T{#_o{-Fa#DxDlQ%24@#>_$ zA>Q)lnDs0%LzVC*r9dnNPe$rr1<`3f44!J9{*k)goYG#4$4e9Z?QJjfUxFtK^oz&3 zKXct}@nKQT8yWX@TRtC9IMywwW$!}hw5*`)Q@di!dnCtt*j1YzC@PT*%x(f4wu78TGLOt3$HU&p-t6}(?C zU-u`cmHng1$_qQ0_w%&WTz1a;#8Z{({Ugq(gRJ8YQpHE8JW+=EgR%E1UsT!Z>P_G& zTBWUDz2Ax!ejLH%D*d4uFQ@woc*<8jFB+CJpSe--KAun2^<@lrx&iuZgS4x_QxVx; zqP`bA(hUp!OUhn-QcrvKUdgo9G-9LTBy#9@>ajd87{Yu{6O`Hq92g~60 zjG3J9WKd+IpLd{Z)e+_+4{=#>w7;_Ibgo7mO`K+VukF>UF%Pg0Y|kb4qPk<8XT2L2 zf(#YY5nC~B1aD=VzxY+eHoV9>?K>>KVEG6?ChJ<#`9anA^p9E&WIgABhyHn@k)IJl z98iJ)D$p7@h7PawUx-EE$yv3wsk~iEk*MPPx{KvsC!Q+sd}EW!ikElbk73&`0Z$t3 za~b!5r>d!c-cq;Xa*M}jpLlvZk5l@qJR#kgXMM@Zgm^-@l!MbAVnf0g;fxgXuY)0z z>bQz|{rTr0^UEkE3@qEA`n<)=mocwDE3=CEmzdXI(aB-{u;MesNqz#U=79d2wP~a1 z3`sTerwa5y;1|r>mn*h{r>y9&2Bxh{2+A5W(0ixA6Grwn(z2q`8zj^cK zy|*(vv%52IT%F|{;mR^?Z<#wLCH3z!(6h&BexLIv=-u1yG6!JmmWL>&WVBp+*lL0E zu_$S%sSmgx&y}oGm~bVrd&(XoT(|s^Ur>@gxpT?8j^b);H##Mo_GP_9xS2;>Rx#r3 z-hsb_l6>S4TVtbRbmF5oN+Ek2;fhZKS{_R<06c!xbVlwhQG;)?{8-J}07gHez^i?x zg9p%na*xsNLQj1H6jN1A<3uz-Rlh$jb%| zANF;~y>Tt!R4={1!YrMK&?ilX)erx~D^PKm@t^^UlZ>QSfcx=y-v$NdfrtJwBJ!)u z<;T&Ew68Xr{&IsUpbVw4d#zZ2aAhI)^79VD)h(C({<6lypby~UG5;yTRRd-h;F_N5 zx4xqcRWaN(THGfRrKxxYG}{2p?gQ@LwqFUH&o1SP_YtlHjbgB8K^?*ilxFeYjEUBu zf^o`F0=YL4&#DSkt6BRGDB95N>rk>}2ozNziYaaR{3NdQCq+TL-K$npUpF{A1)BlK za)s-b+6oE_tKqrj^%Jh7b+4_t0G$0rHiP3Age%GTB%e~?i6@K%ZWk%V2G6vnMocGS zMvW>%i`I^!A*`w%GJ~)cB3xA!#TgH5gfBtQ$E&mX5{F@gKg_MA4sE;yxO;PT1L5hI zk{qJAZbdk-jQXSgo#(Q>M*5Fnw^`tRoK|`U{p@ex&31w=9|E3z((re`yDBD}E@-CJ z?^-ihOBs5QD0tS8SasO4LPNg(y~ZptTiONuP1zW>uYS2|_mXbL|}k$76sr&yD&ch4IMSDLtIXZ66{ z8=X2epX|fd5Z*m=#V094Hya#eX$)goSHZ~b1V#iwub&+0RR#pDCtR8QIed0l34A}{ z8Hk$+e8NS7%oFfiZd= z{Rt7OD)`tGuHq^f9Kna99FGz5&QYUZ|L3Nkv_kgnge!x)mqND!Z*Y0uIH_^{v{3Ld zXr?jL<%8!U;Yv34tje-w$ni6@u`o{ucI}vvC~z)Pc-9_Gb8=d}&XrGdo&3%`SuaF# zr1Kp+cE1dUZLbshHp@x9oFp$jBGx( zByrY0kSLElD!h@&AM9tm&c)sgx#fm^$%*u)Mz;KFPpon#&wHJegUOL?UJ<@m?w_|) zj(bI_+!M1?JiDC_hF32usxNm62D6;6j;A@JV>=>GJSg5yi4>HIlslYtx7IvRRNU0q z+SJ|J*wwPLqouvOWpC4g?ah0-JG)+J+1s_Vv8n6Dj`Dqxty{!Mn*8Q5(de;cS*6HJ zznNw1#GzLnQ1HU@2Ig?NoKSG`zXs;;Yq?0UeJ#OU*lP*0aF=-4u1GTJiX_=V>GXxI zCe2}7PVAy$Gg#&`^OT%dWH*uKutAnpiM$MUg~VZ9k?bMdho|8)r)9WGY)(g#{Wtqh z$fYW=DgA#pZ*cdvLzYz&(+cgcn^xK(9BP(5)kGeL*EkOIiNw%~O+Psy}7Tifv3oKJ^QSr!m^f*qg-7k#obAW8&# zeTy#n^nCz*cYf@Nh N#>-@ne792E^B)uU&XxcG diff --git a/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl b/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl index b636728..d94421a 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl @@ -77,7 +77,7 @@ A straighforward no-frills digital delay. lv2:minimum 0.0 ; lv2:maximum 100.0 ; units:unit units:pc; - rdfs:comment "Attenuation of the first delay"; + rdfs:comment "Attenuation of the first echo"; ], [ a lv2:InputPort , @@ -92,7 +92,7 @@ A straighforward no-frills digital delay. lv2:minimum 0.0 ; lv2:maximum 100.0 ; units:unit units:pc; - rdfs:comment "Attenuation of subequent delays"; + rdfs:comment "Attenuation of subequent echoes"; ], [ a lv2:AudioPort , diff --git a/react/public/img/VST_Logo_Steinberg.ico b/react/public/img/VST_Logo_Steinberg.ico new file mode 100644 index 0000000000000000000000000000000000000000..a31b6293884365e5cc314433d304a6a0e2dfb0aa GIT binary patch literal 254170 zcmXtg1z1$w_w^mRyE_F00qM@66+{|IX=&-40YthC5K)E(=@OI%@ulMC0F#zE896Av5Ok0f* zj}8y4h)_cv`uzUs{R;;RyqLW%vIj4?9_l7u06^4v|AHXhi);a~1`Vj9zWT8T&6yK_Ru~YHZ7FvQ+e5-LzxE8fQbS6YHWRf6Gd-(MvO1}wn) z3!{Qtz;{;+7ssW{9qh^!27UhWq)eH4bim`M8IbiD&8071q4M~R%~9rrYD3!@Pz~f8 zd>=`yK?mZo<@ZU~`b*8=;uN{AmSjA1fkh zbCuASbjnkeg1^Ypnm(KdYZkC&c}P8}=G9k{+y7NucuM7Mn7lj#(dybJ)0$C#eL@>W zI9Mlv-FRHCc}N560Ol=bbobXi7bcfRsOj;a--C%EX=pa}N+|QC&@}N8aS0ef* z_HraF+j?_}G6jC)JhHTId5oM=aQLmfBkN9aAs7~j0oLcLVvW^Vj;SsT&V~{1B{XZV zapQaU09bZEDmoR;ymPbdw7@{9*o_!^9>pnKki9#_+StVsVHE^8g=3!b=44hs99Sxh zNL^G@4)ebZMSbTc2jYKT-^gLi31inmKH1*?h3qKvFkvY0xm_T39k~subOu&F zFvH486}#gxF&oc%MrD18!$m-=ct9HI^(x2V3f*&vyy~{?0!Kj;)q^7!YF~)Ky8rkS zDg9s2h-Tih$bxI6p|t$vvm-q2oSpRYB8y*oJ}vsX;vMYGQZ6#U0#5cOW`p2j5;QX3 zE|vjs6Hw#^YABEC8Rpa89JU1kY+~}d=ZJSOAzuU+A+3L>RTs{12x=+%DMbM(Xevto z4U~R&j$Mg^O!Nc;XqJ{|LQ5XpP>nD>OZRt^53y*llf`q*@puh(g(AD?wY9g0phUKF z_Ya^(STKuu2QE{v-XovM$FQG89n$pxkBb_dKM3CX7!*5#U2yx1J^&(u0sJCVgs!n< z4XoEFYRe;s&e*Dlqa8(rH&hT+F&#Z&t^gkv=XJjl716LFa^K+vig}i+cYSnH#5N15 z!lR5zhb{oJ{0&Kcf5SVMp&Vq9g{2Qo^?weFVeo+afv>~ATTVFZP1X)`7WLt?v`pC3 z`Jj=X@ici%IFZ~0*^6O;*iA$)1trjQOblvE1FKwd_}+F}Fo;}Qtz_CNa*&~s_^}8@ zd*2Y`Kpq_lUU*$XT)R#S&q=>>;Rk)u#_q){%>CO9Y3yo4n_^OUr>p-{@LR+pjz|I3 z&qeq|f&)oPSgioisv}Z_e2*8e#_}A>rt5un;hHndHZ=~{z+k_Am!Qt^@DvRy+(63R zjts(L<;;oO4ycF8yg->&_rGyGqYkkQGRR%)JOkdnIeZslPbwhH(mSiimP`cI1db}W zgf_kC?Kws|nhga(R38Tl z$pWFw=!`cve%Zgc0D{O5#@9zq7T#YaUIt;TzS)I50pfS!*cY_u`nfS7A^QrUt)+L& zLlay!!^cCUL+DEgu8|OQ<<7Gsdvdrd&=mu2P#*T{{tkj^RcskTX2(r|=5kuJBp4Pg zPj`9WVy7dbTY7ol;hcqr*#%vYh+^|}g@sJO{-bDhd0*|OcK(b_ z6-0t~&FHG?0(yw{3)3$&pfR$PlAPy}<%CA4{#KA7BgBMSW0J_bY7i!;7%4QPpDkFR z<``VahB^N6m&OqhVU51sL0{Wc%vJ19L^oxEr-b!z+|jHAkesA%KE7&>FYiQ5%F{sa z!$JFrnYXz33^W_4!?r?uGWT9P0>Mi9GMV|prLB7=sKv`|*$UKwAqs4QpX%~xH5Fz$W99A-&3i6$q5t(VFA*I-1j~+2a>_TX) zs(V_XEJtWXef`L_oQLvlKgK`d!~|kiAHb6qFCCtq$pOWz>TBl%hEq&%0DsE}+8BiO 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�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%0A4|v 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%0A#^%betEHK{3rAm! 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 bF4bWO5)rdREHM(z0QhOCKU9O=vkLt`6Ss}@ literal 0 HcmV?d00001 diff --git a/react/public/img/vst.png b/react/public/img/vst.png new file mode 100644 index 0000000000000000000000000000000000000000..637cd4e6e18d197463bc24adf30f13dfeab45e90 GIT binary patch literal 12657 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 LrzTq=Z5s4HLyQo6 literal 0 HcmV?d00001 diff --git a/react/public/img/vst.svg b/react/public/img/vst.svg new file mode 100644 index 0000000..1a473e8 --- /dev/null +++ b/react/public/img/vst.svg @@ -0,0 +1,328 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/react/public/var/config.json b/react/public/var/config.json index 80d344a..bf8d4ce 100644 --- a/react/public/var/config.json +++ b/react/public/var/config.json @@ -1,5 +1,5 @@ { - "socket_server_port": 80, + "socket_server_port": 8080, "socket_server_address": "*", "debug": true, "max_upload_size": 1048576, diff --git a/react/src/LoadPluginDialog.tsx b/react/src/LoadPluginDialog.tsx index 7cd4291..e1ae1ed 100644 --- a/react/src/LoadPluginDialog.tsx +++ b/react/src/LoadPluginDialog.tsx @@ -228,6 +228,7 @@ export const LoadPluginDialog = let gridWidth = width - this.margin_reserve; let columns = Math.floor((gridWidth) / this.nominal_column_width); if (columns < 1) columns = 1; + if (columns > 3) columns = 3; return columns; } @@ -388,6 +389,14 @@ export const LoadPluginDialog = // let selectedUri = this.state.selected_uri; } + vst3_indicator(uiPlugin? : UiPlugin) + { + if (uiPlugin?.is_vst3) + { + return (vst) + } + return null; + } stereo_indicator(uiPlugin?: UiPlugin): string { if (!uiPlugin) return ""; if (uiPlugin.audio_inputs === 2 || uiPlugin.audio_outputs === 2) { @@ -436,7 +445,13 @@ export const LoadPluginDialog = for (let i = 0; i < plugins.length; ++i) { let plugin = plugins[i]; if (filterType === PluginType.Plugin || rootClass.is_type_of(filterType, plugin.plugin_type)) { - let score = searchFilter.score(plugin.name, plugin.plugin_display_type, plugin.author_name); + let score:number = 0; + if (plugin.is_vst3) + { + score = searchFilter.score(plugin.name, plugin.plugin_display_type, plugin.author_name,"vst3"); + } else { + score = searchFilter.score(plugin.name, plugin.plugin_display_type, plugin.author_name); + } if (score !== 0) { if (this.state.favoritesList[plugin.uri]) { @@ -668,8 +683,9 @@ export const LoadPluginDialog =
- {this.info_string(selectedPlugin)} + {this.info_string(selectedPlugin)} + {this.vst3_indicator(selectedPlugin)}
{ this.supports_time_position = input.supports_time_position; this.port_group = input.port_group; this.comment = input.comment; + this.is_bypass = input.is_bypass; + this.is_program_controller = input.is_program_controller; return this; } @@ -75,12 +77,17 @@ export class Port implements Deserializable { supports_time_position: boolean = false; port_group: string = ""; comment: string = ""; + is_bypass: boolean = false; + is_program_controller: boolean = false; } export class PortGroup { deserialize(input: any): PortGroup { this.symbol = input.symbol; this.name = input.name; + this.parent_group = input.parent_group; + this.program_list_id = input.program_list_id ?? -1; + return this; } static deserialize_array(input: any) : PortGroup[] { @@ -94,6 +101,8 @@ export class PortGroup { symbol: string = ""; name: string = ""; + parent_group: string = ""; + program_list_id: number = -1; }; export class Lv2Plugin implements Deserializable { @@ -223,10 +232,19 @@ export class UiControl implements Deserializable { this.scale_points = ScalePoint.deserialize_array(input.scale_points); this.port_group = input.port_group; this.units = input.units as Units; - this.comment = input.comment; + + this.comment = input.comment ?? ""; + this.is_bypass = input.is_bypass ? true: false; + this.is_program_controller = input.is_program_controller? true: false; + this.custom_units = input.custom_units ?? ""; this.controlType = ControlType.Dial; + if (this.is_bypass) + { + this.not_on_gui = true; + } + if (this.enumeration_property && this.scale_points.length === 2) { @@ -234,7 +252,7 @@ export class UiControl implements Deserializable { } else { if (this.min_value === 0 && this.max_value === 1) { - if (this.toggled_property || this.integer_property) + if (this.toggled_property || this.integer_property || this.range_steps === 2) { this.controlType = ControlType.OnOffSwitch; } @@ -276,6 +294,10 @@ export class UiControl implements Deserializable { port_group: string = ""; units: Units = Units.none; comment: string = ""; + is_bypass: boolean = true; + is_program_controller: boolean = true; + custom_units: string = ""; + // Return the value of the closest scale_point. clampSelectValue(value: number): number{ @@ -452,6 +474,7 @@ export class UiPlugin implements Deserializable { this.description = input.description; this.controls = UiControl.deserialize_array(input.controls); this.port_groups = PortGroup.deserialize_array(input.port_groups); + this.is_vst3 = input.is_vst3; return this; } @@ -501,5 +524,6 @@ export class UiPlugin implements Deserializable { description: string = ""; controls: UiControl[] = []; port_groups: PortGroup[] = []; + is_vst3 : boolean = false; } diff --git a/react/src/PedalBoard.tsx b/react/src/PedalBoard.tsx index 44f7d8f..41deef0 100644 --- a/react/src/PedalBoard.tsx +++ b/react/src/PedalBoard.tsx @@ -67,6 +67,7 @@ export class PedalBoardItem implements Deserializable { this.midiBindings = MidiBinding.deserialize_array(input.midiBindings); this.controlValues = ControlValue.deserializeArray(input.controlValues); + this.vstState = input.vstState ?? ""; return this; } deserialize(input: any): PedalBoardItem { @@ -183,6 +184,7 @@ export class PedalBoardItem implements Deserializable { pluginName?: string; controlValues: ControlValue[] = ControlValue.EmptyArray; midiBindings: MidiBinding[] = []; + vstState: string = ""; }; diff --git a/react/src/PedalBoardView.tsx b/react/src/PedalBoardView.tsx index ea43750..c62c708 100644 --- a/react/src/PedalBoardView.tsx +++ b/react/src/PedalBoardView.tsx @@ -62,6 +62,12 @@ const EMPTY_ICON_URL = "img/fx_empty.svg"; const ERROR_ICON_URL = "img/fx_error.svg"; const TERMINAL_ICON_URL = "img/fx_terminal.svg"; +function CalculateConnection(numberOfInputs: number, numberOfOutputs: number) +{ + let result = Math.min(numberOfInputs, numberOfOutputs); + if (result > 2) result = 2; + return result; +} const pedalBoardStyles = (theme: Theme) => createStyles({ scrollContainer: { @@ -210,10 +216,9 @@ class PedalLayout { bounds: Rect = new Rect(); - inputs: number = 0; - outputs: number = 0; - stereoInput: boolean = false; - stereoOutput: boolean = false; + numberOfInputs: number = 2; + numberOfOutputs: number = 2; + pedalItem?: PedalBoardItem; // Split Layout only. @@ -227,8 +232,8 @@ class PedalLayout { let t: PedalLayout = new PedalLayout(); t.uri = START_PEDALBOARD_ITEM_URI; t.iconUrl = TERMINAL_ICON_URL; - t.inputs = 0; - t.outputs = 1; + t.numberOfInputs = 0; + t.numberOfOutputs = 2; return t; } static End(): PedalLayout { @@ -236,8 +241,8 @@ class PedalLayout { t.pluginType = PluginType.UtilityPlugin; t.uri = END_PEDALBOARD_ITEM_URI; t.iconUrl = TERMINAL_ICON_URL; - t.inputs = 2; - t.outputs = 0; + t.numberOfInputs = 2; + t.numberOfOutputs = 0; return t; } constructor(model?: PiPedalModel, pedalItem?: PedalBoardItem) { @@ -256,27 +261,27 @@ class PedalLayout { this.topChildren = makeChain(model, splitter.topChain); this.bottomChildren = makeChain(model, splitter.bottomChain); - this.inputs = 2; - this.outputs = 2; + this.numberOfInputs = 2; + this.numberOfOutputs = 2; } else if (pedalItem.isEmpty()) { this.pluginType = PluginType.UtilityPlugin; this.iconUrl = EMPTY_ICON_URL; - this.inputs = 2; - this.outputs = 2; + this.numberOfInputs = 2; + this.numberOfOutputs = 2; } else if (pedalItem.uri === START_PEDALBOARD_ITEM_URI) { this.pluginType = PluginType.UtilityPlugin; this.iconUrl = TERMINAL_ICON_URL; - this.inputs = 0; - this.outputs = PiPedalModelFactory.getInstance().jackSettings.get().inputAudioPorts.length; + this.numberOfInputs = 0; + this.numberOfOutputs = PiPedalModelFactory.getInstance().jackSettings.get().inputAudioPorts.length; } else if (pedalItem.uri === END_PEDALBOARD_ITEM_URI) { this.pluginType = PluginType.UtilityPlugin; this.iconUrl = TERMINAL_ICON_URL; - this.inputs = PiPedalModelFactory.getInstance().jackSettings.get().outputAudioPorts.length; - this.outputs = 0; + this.numberOfInputs = PiPedalModelFactory.getInstance().jackSettings.get().outputAudioPorts.length; + this.numberOfOutputs = 0; } else { let uiPlugin = model.getUiPlugin(pedalItem.uri); @@ -284,15 +289,15 @@ class PedalLayout { this.pluginType = uiPlugin.plugin_type; this.iconUrl = SelectIcon(uiPlugin.plugin_type,uiPlugin.uri); this.name = uiPlugin.name; - this.inputs = uiPlugin.audio_inputs; - this.outputs = uiPlugin.audio_outputs; + this.numberOfInputs = Math.max(uiPlugin.audio_inputs,2); + this.numberOfOutputs = Math.max(uiPlugin.audio_outputs,2); } else { // default to empty plugin. this.pluginType = PluginType.UtilityPlugin; this.name = pedalItem.pluginName??"#error"; this.iconUrl = ERROR_ICON_URL; - this.inputs = 2; - this.outputs = 2; + this.numberOfInputs = 2; + this.numberOfOutputs = 2; } } } @@ -677,18 +682,18 @@ const PedalBoardView = // let classes = this.props.classes; let x_ = item.bounds.x + CELL_WIDTH / 2; let y_ = item.bounds.y + CELL_HEIGHT / 2; - let isStereo = item.stereoOutput; + let numberOfOutputs = item.numberOfOutputs; let color = enabled ? ENABLED_CONNECTOR_COLOR : DISABLED_CONNECTOR_COLOR; let svgPath = new SvgPathBuilder().moveTo(x_, y_).lineTo(x_ + CELL_WIDTH, y_).toString(); - if (isStereo) { + if (numberOfOutputs === 2) { output.push(( )); output.push(( )); - } else { + } else if (numberOfOutputs === 1) { output.push(( )); @@ -712,18 +717,18 @@ const PedalBoardView = let topStartPath = new SvgPathBuilder().moveTo(x_, y_).lineTo(x_, yTop).lineTo(x_ + CELL_WIDTH, yTop).toString(); let bottomStartPath = new SvgPathBuilder().moveTo(x_, y_).lineTo(x_, yBottom).lineTo(x_ + CELL_WIDTH, yBottom).toString(); - if (item.stereoInput && item.topChildren[0].stereoInput) { + if (item.numberOfInputs === 2 && item.topChildren[0].numberOfInputs === 2) { output.push(()); output.push(()); - } else { + } else if (item.numberOfInputs !== 0 && item.topChildren[0].numberOfInputs !== 0) { output.push(()); } - if (item.stereoInput && item.bottomChildren[0].stereoInput) { + if (item.numberOfInputs === 2 && item.bottomChildren[0].numberOfInputs === 2) { output.push(()); output.push(()); - } else { + } else if (item.numberOfInputs !== 0 && item.bottomChildren[0].numberOfInputs !== 0) { output.push(()); } @@ -741,6 +746,8 @@ const PedalBoardView = let firstPathStereo: boolean; let secondPathStereo: boolean; + let firstPathAbsent: boolean; + let secondPathAbsent: boolean; let firstPathEnabled: boolean; let secondPathEnabled: boolean; let xTee: number; @@ -753,11 +760,13 @@ const PedalBoardView = // Third case: L/R stereo output, when both outputs are mono, requires a third stroke. let thirdPath: string | null = null; // for L/R stereo output (which can be stereo even if both outputs are mono) - let hasThirdPath = item.stereoOutput && (!lastTop.stereoOutput) && (!lastBottom.stereoOutput); + let hasThirdPath = item.numberOfOutputs === 2 && (lastTop.numberOfOutputs !== 2) && (lastBottom.numberOfOutputs !== 2); if (hasThirdPath) { firstPathStereo = false; secondPathStereo = false; + firstPathAbsent = lastTop.numberOfOutputs === 0 || item.numberOfOutputs === 0; + secondPathAbsent = lastBottom.numberOfOutputs === 0 || item.numberOfOutputs === 0; xTee = xTee0 - monoAdjustment; firstPath = new SvgPathBuilder().moveTo(xBottom, yBottom).lineTo(xTee, yBottom).lineTo(xTee, y_).toString(); @@ -767,10 +776,13 @@ const PedalBoardView = thirdPath= new SvgPathBuilder().moveTo(xTee0,y_).lineTo(xEnd,y_).toString(); firstPathEnabled = bottomEnabled; secondPathEnabled = topEnabled; - } else if (bottomPathFirst || (topEnabled && lastTop.stereoOutput)) { + } else if (bottomPathFirst || (topEnabled && lastTop.numberOfOutputs === 2)) { // draw the bottom path first. - firstPathStereo = item.stereoOutput && lastBottom.stereoOutput; - secondPathStereo = item.stereoOutput && lastTop.stereoOutput; + firstPathStereo = item.numberOfOutputs === 2 && lastBottom.numberOfOutputs === 2; + secondPathStereo = item.numberOfOutputs === 2 && lastTop.numberOfOutputs === 2; + firstPathAbsent = item.numberOfOutputs === 0 || lastBottom.numberOfOutputs === 0; + secondPathAbsent = item.numberOfOutputs === 0 || lastTop.numberOfOutputs === 0; + xTee = firstPathStereo ? xTee0 : xTee0 - monoAdjustment; firstPath = new SvgPathBuilder().moveTo(xBottom, yBottom).lineTo(xTee, yBottom).lineTo(xTee, y_).toString(); xTee = secondPathStereo ? xTee0 : xTee0 - monoAdjustment; @@ -780,8 +792,10 @@ const PedalBoardView = secondPathEnabled = topEnabled; } else { // draw the top path first. - firstPathStereo = item.stereoOutput && lastTop.stereoOutput; - secondPathStereo = item.stereoOutput && lastBottom.stereoOutput; + firstPathStereo = item.numberOfOutputs === 2 && lastTop.numberOfOutputs === 2; + secondPathStereo = item.numberOfOutputs === 2 && lastBottom.numberOfOutputs === 2; + firstPathAbsent = item.numberOfOutputs === 0 || lastTop.numberOfOutputs === 0; + secondPathAbsent = item.numberOfOutputs === 0 || lastBottom.numberOfOutputs === 0; xTee = firstPathStereo ? xTee0 : xTee0 - monoAdjustment; firstPath = new SvgPathBuilder().moveTo(xTop, yTop).lineTo(xTee, yTop).lineTo(xTee, y_).toString(); @@ -804,7 +818,7 @@ const PedalBoardView = output.push(( )); - } else { + } else if (!firstPathAbsent) { output.push(( )); @@ -816,7 +830,7 @@ const PedalBoardView = output.push(( )); - } else { + } else if (!secondPathAbsent) { output.push(( )); @@ -828,7 +842,7 @@ const PedalBoardView = output.push(( )); - } else { + } else if (!firstPathAbsent) { output.push(( )); @@ -837,7 +851,7 @@ const PedalBoardView = output.push(( )); - } else { + } else if (!secondPathAbsent) { output.push(( )); @@ -1011,126 +1025,130 @@ const PedalBoardView = } return true; } - canOutputStereo(item: PedalLayout): boolean { + getNumberOfInputs(item: PedalLayout): number { if (item.pedalItem) { let plugin = this.model.getUiPlugin(item.pedalItem.uri); if (plugin) { - return plugin.audio_outputs === 2; + return plugin.audio_inputs; } } - return true; + return 1; + } + getNumberOfOutputs(item: PedalLayout): number { + if (item.pedalItem) { + let plugin = this.model.getUiPlugin(item.pedalItem.uri); + if (plugin) { + return plugin.audio_outputs; + } + } + return 1; } - markStereoOutputs(layoutChain: PedalLayout[], stereoInput: boolean, stereoOutput: boolean) { + markStereoOutputs(layoutChain: PedalLayout[], numberOfInputs: number, numberOfOutputs: number) { // analyze forward flow. - this.markStereoForward(layoutChain, stereoInput); + this.markStereoForward(layoutChain, numberOfInputs); // mark items that feed a mono effect as mono. - this.markStereoBackward(layoutChain, stereoOutput); + this.markStereoBackward(layoutChain, numberOfOutputs); } - markStereoBackward(layoutChain: PedalLayout[], stereoOutput: boolean) : boolean + markStereoBackward(layoutChain: PedalLayout[], numberOfOutputs: number) : number { for (let i = layoutChain.length-1; i >= 0; --i) { let item = layoutChain[i]; if (item.isSplitter()) { - if (!stereoOutput) - { - item.stereoOutput = false; - } - this.markStereoBackward(item.topChildren,stereoOutput); - this.markStereoBackward(item.bottomChildren,stereoOutput); - let topStereoInput = item.topChildren[0].stereoInput; - let bottomStereoInput = item.bottomChildren[0].stereoInput; + item.numberOfOutputs = CalculateConnection(item.numberOfOutputs, numberOfOutputs) - if (! (topStereoInput || bottomStereoInput)) + this.markStereoBackward(item.topChildren,numberOfOutputs); + this.markStereoBackward(item.bottomChildren,numberOfOutputs); + let topInputs = item.topChildren[0].numberOfInputs; + let bottomInputs = item.bottomChildren[0].numberOfInputs; + + let splitItem = item.pedalItem as PedalBoardSplitItem; + if (splitItem.getSplitType() !== SplitType.Lr) { - let splitItem = item.pedalItem as PedalBoardSplitItem; - if (splitItem.getSplitType() !== SplitType.Lr) - { - item.stereoInput = false; - } + item.numberOfInputs = CalculateConnection(item.numberOfInputs, Math.max(topInputs,bottomInputs)); } } else if (item.isEnd()) { } else if (item.isStart()) { - if (!stereoOutput) - { - item.stereoOutput = false; - } - return item.stereoOutput; + item.numberOfOutputs = CalculateConnection(item.numberOfOutputs,numberOfOutputs); + return item.numberOfOutputs; } else if (item.isEmpty()) { - if (!stereoOutput) + if (numberOfOutputs === 0) { - item.stereoOutput = false; - item.stereoInput = false; + item.numberOfOutputs = 0; + item.numberOfInputs = CalculateConnection(item.numberOfInputs,2); + } else { + item.numberOfOutputs = CalculateConnection(item.numberOfOutputs,numberOfOutputs); + item.numberOfInputs = CalculateConnection(item.numberOfInputs,numberOfOutputs); } } else { - if (!stereoOutput) - { - item.stereoOutput = false; - } + item.numberOfOutputs = CalculateConnection(item.numberOfOutputs,numberOfOutputs); } - stereoOutput = item.stereoInput; + numberOfOutputs = item.numberOfInputs; } - return stereoOutput; + return numberOfOutputs; } - markStereoForward(layoutChain: PedalLayout[],stereoInput: boolean): boolean + markStereoForward(layoutChain: PedalLayout[],numberOfInputs: number): number { if (layoutChain.length === 0) { - return stereoInput; + return numberOfInputs; } for (let i = 0; i < layoutChain.length; ++i) { let item = layoutChain[i]; if (item.isSplitter()) { let splitter = item.pedalItem as PedalBoardSplitItem; - item.stereoInput = stereoInput; + item.numberOfInputs = numberOfInputs; - let isChainInputStereo = stereoInput; + let chainInputs = numberOfInputs; if (splitter.getSplitType() === SplitType.Lr) { - isChainInputStereo = false; + chainInputs = CalculateConnection(numberOfInputs,1); } - - let topStereo = this.markStereoForward(item.topChildren, isChainInputStereo); - let bottomStereo = this.markStereoForward(item.bottomChildren, isChainInputStereo); + let topOutputs = this.markStereoForward(item.topChildren, chainInputs); + let bottomOutputs = this.markStereoForward(item.bottomChildren, chainInputs); if (splitter.getSplitType() === SplitType.Ab) { if (splitter.isASelected()) { - item.stereoOutput = topStereo; + item.numberOfOutputs = topOutputs; } else { - item.stereoOutput = bottomStereo; + item.numberOfOutputs = bottomOutputs; } } else if (splitter.getSplitType() === SplitType.Lr) { - item.stereoOutput = true; + item.numberOfOutputs = (topOutputs !== 0 && bottomOutputs !== 0) ? 2: 0; } else { - item.stereoOutput = topStereo || bottomStereo; + item.numberOfOutputs = CalculateConnection(topOutputs,bottomOutputs); } } else if (item.isStart()) { - item.stereoOutput = (PiPedalModelFactory.getInstance().jackSettings.get().inputAudioPorts.length > 1); + item.numberOfOutputs = Math.min(PiPedalModelFactory.getInstance().jackSettings.get().inputAudioPorts.length,2); } else if (item.isEnd()) { - item.stereoInput = (PiPedalModelFactory.getInstance().jackSettings.get().outputAudioPorts.length > 1) && stereoInput; - return item.stereoInput; + item.numberOfInputs = + CalculateConnection( + Math.min(PiPedalModelFactory.getInstance().jackSettings.get().outputAudioPorts.length,2), + numberOfInputs); + return item.numberOfInputs; } else if (item.isEmpty()) { - item.stereoInput = stereoInput; - item.stereoOutput = stereoInput; - } else { - if (stereoInput && this.canOutputStereo(item)) { - item.stereoInput = true; + item.numberOfInputs = numberOfInputs; + if (numberOfInputs === 0) + { + item.numberOfOutputs = 2; } else { - item.stereoInput = false; + item.numberOfOutputs = item.numberOfInputs; } - item.stereoOutput = this.canOutputStereo(item); + } else { + item.numberOfInputs = CalculateConnection(numberOfInputs,this.getNumberOfInputs(item)); + item.numberOfOutputs = this.getNumberOfOutputs(item); } - stereoInput = item.stereoOutput; + numberOfInputs = item.numberOfOutputs; } - return stereoInput; + return numberOfInputs; } currentLayout?: PedalLayout[]; @@ -1145,7 +1163,7 @@ const PedalBoardView = { layoutChain.splice(0, 0, start); layoutChain.splice(layoutChain.length, 0, end); - this.markStereoOutputs(layoutChain, true, true); + this.markStereoOutputs(layoutChain, 2,2); } let layoutSize = this.doLayout(layoutChain); diff --git a/react/src/PiPedalModel.tsx b/react/src/PiPedalModel.tsx index ea30295..e7b9654 100644 --- a/react/src/PiPedalModel.tsx +++ b/react/src/PiPedalModel.tsx @@ -22,7 +22,7 @@ import { UiPlugin, UiControl, PluginType } from './Lv2Plugin'; import { PiPedalArgumentError, PiPedalStateError } from './PiPedalError'; import { ObservableProperty } from './ObservableProperty'; -import { PedalBoard, ControlValue } from './PedalBoard' +import { PedalBoard, PedalBoardItem, ControlValue } from './PedalBoard' import PluginClass from './PluginClass'; import PiPedalSocket, { PiPedalMessageHeader } from './PiPedalSocket'; import { nullCast } from './Utility' @@ -303,6 +303,13 @@ interface ControlChangedBody { symbol: string; value: number; }; +interface Vst3ControlChangedBody { + clientId: number; + instanceId: number; + symbol: string; + value: number; + state: string; +}; export interface FavoritesList { [url: string]: boolean; @@ -634,6 +641,16 @@ class PiPedalModelImpl implements PiPedalModel { controlChangedBody.value, false // do NOT notify the server of the change. ); + } else if (message === "onVst3ControlChanged") { + let controlChangedBody = body as Vst3ControlChangedBody; + this._setVst3PedalBoardControlValue( + controlChangedBody.instanceId, + controlChangedBody.symbol, + controlChangedBody.value, + controlChangedBody.state, + false // do NOT notify the server of the change. + ); + } else if (message === "onJackServerSettingsChanged") { let jackServerSettings = new JackServerSettings().deserialize(body); this.jackServerSettings.set(jackServerSettings); @@ -1195,6 +1212,29 @@ class PiPedalModelImpl implements PiPedalModel { } } + } + _setVst3PedalBoardControlValue(instanceId: number, key: string, value: number, state: string, notifyServer: boolean ): void { + let pedalBoard = this.pedalBoard.get(); + if (pedalBoard === undefined) throw new PiPedalStateError("Pedalboard not ready."); + let newPedalBoard = pedalBoard.clone(); + + let item: PedalBoardItem = newPedalBoard.getItem(instanceId); + let changed = item.setControlValue(key, value); + item.vstState = state; + + if (changed) { + this.pedalBoard.set(newPedalBoard); + if (notifyServer) { + this._setServerControl("setControl", instanceId, key, value); + } + for (let i = 0; i < this._controlValueChangeItems.length; ++i) { + let item = this._controlValueChangeItems[i]; + if (instanceId === item.instanceId) { + item.onValueChanged(key, value); + } + } + } + } setPedalBoardControlValue(instanceId: number, key: string, value: number): void { @@ -1232,7 +1272,7 @@ class PiPedalModelImpl implements PiPedalModel { clientId: this.clientId, pedalBoard: this.pedalBoard.get() }; - this.webSocket?.send("setCurrentPedalBoard", body); + this.webSocket?.send("updateCurrentPedalBoard", body); } @@ -1288,6 +1328,8 @@ class PiPedalModelImpl implements PiPedalModel { deletePedalBoardPedal(instanceId: number): number | null { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); + let result = newPedalBoard.deleteItem(instanceId); if (result != null) { this.pedalBoard.set(newPedalBoard); @@ -1301,6 +1343,9 @@ class PiPedalModelImpl implements PiPedalModel { if (fromInstanceId === toInstanceId) return; let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + + this.updateVst3State(newPedalBoard); + let fromItem = newPedalBoard.getItem(fromInstanceId); if (fromItem === null) { throw new PiPedalArgumentError("fromInstanceId not found."); @@ -1317,6 +1362,9 @@ class PiPedalModelImpl implements PiPedalModel { if (fromInstanceId === toInstanceId) return; let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + + this.updateVst3State(newPedalBoard); + let fromItem = newPedalBoard.getItem(fromInstanceId); if (fromItem === null) { throw new PiPedalArgumentError("fromInstanceId not found."); @@ -1334,6 +1382,10 @@ class PiPedalModelImpl implements PiPedalModel { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + + this.updateVst3State(newPedalBoard); + + let fromItem = newPedalBoard.getItem(instanceId); if (fromItem === null) { throw new PiPedalArgumentError("fromInstanceId not found."); @@ -1350,6 +1402,9 @@ class PiPedalModelImpl implements PiPedalModel { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); + + let fromItem = newPedalBoard.getItem(instanceId); if (fromItem === null) { throw new PiPedalArgumentError("fromInstanceId not found."); @@ -1371,6 +1426,9 @@ class PiPedalModelImpl implements PiPedalModel { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); + + let fromItem = newPedalBoard.getItem(fromInstanceId); let toItem = newPedalBoard.getItem(toInstanceId); if (fromItem === null) { @@ -1389,6 +1447,9 @@ class PiPedalModelImpl implements PiPedalModel { addPedalBoardItem(instanceId: number, append: boolean): number { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); + + let item = newPedalBoard.getItem(instanceId); if (item === null) { throw new PiPedalArgumentError("instanceId not found."); @@ -1402,6 +1463,8 @@ class PiPedalModelImpl implements PiPedalModel { addPedalBoardSplitItem(instanceId: number, append: boolean): number { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); + let item = newPedalBoard.getItem(instanceId); if (item === null) { throw new PiPedalArgumentError("instanceId not found."); @@ -1416,6 +1479,9 @@ class PiPedalModelImpl implements PiPedalModel { setPedalBoardItemEmpty(instanceId: number): number { let pedalBoard = this.pedalBoard.get(); let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); + + let item = newPedalBoard.getItem(instanceId); if (item === null) { throw new PiPedalArgumentError("instanceId not found."); @@ -1768,12 +1834,24 @@ class PiPedalModelImpl implements PiPedalModel { this.showAlert(error); }); } + + updateVst3State(pedalBoard: PedalBoard) + { + // let it = pedalBoard.itemsGenerator(); + // while (true) { + // let v = it.next(); + // if (v.done) break; + // let item = v.value; + // } + } + setMidiBinding(instanceId: number, midiBinding: MidiBinding): void { let pedalBoard = this.pedalBoard.get(); if (!pedalBoard) { throw new PiPedalStateError("Pedalboard not loaded."); } let newPedalBoard = pedalBoard.clone(); + this.updateVst3State(newPedalBoard); if (newPedalBoard.setMidiBinding(instanceId, midiBinding)) { this.pedalBoard.set(newPedalBoard); // notify the server. diff --git a/react/src/PluginControl.tsx b/react/src/PluginControl.tsx index 5ebe0c3..b5c5d70 100644 --- a/react/src/PluginControl.tsx +++ b/react/src/PluginControl.tsx @@ -603,17 +603,23 @@ const PluginControl = let uiControl = this.props.uiControl; if (uiControl) { if (uiControl.range_steps > 1) { - range = Math.round(range * uiControl.range_steps-1) / (uiControl.range_steps-1); + range = Math.round(range * (uiControl.range_steps-1)) / (uiControl.range_steps-1); } let value: number; - if (uiControl.is_logarithmic) + if (uiControl.min_value === uiControl.max_value) { - value = uiControl.min_value*Math.pow(uiControl.max_value/uiControl.min_value,range); - } else { - value = range * (uiControl.max_value - uiControl.min_value) + uiControl.min_value; - } - if (uiControl.integer_property) { - value = Math.round(value); + value = uiControl.min_value; + } else + { + if (uiControl.is_logarithmic) + { + value = uiControl.min_value*Math.pow(uiControl.max_value/uiControl.min_value,range); + } else { + value = range * (uiControl.max_value - uiControl.min_value) + uiControl.min_value; + } + if (uiControl.integer_property) { + value = Math.round(value); + } } return value; } diff --git a/src/AlsaDriver.cpp b/src/AlsaDriver.cpp index 8ac7e9e..5cc9be8 100644 --- a/src/AlsaDriver.cpp +++ b/src/AlsaDriver.cpp @@ -29,6 +29,7 @@ #include "AlsaDriver.hpp" #include "JackServerSettings.hpp" #include +#include "RtInversionGuard.hpp" #include "CpuUse.hpp" @@ -967,7 +968,7 @@ namespace pipedal struct sched_param param; memset(¶m, 0, sizeof(param)); - param.sched_priority = 79; + param.sched_priority = RT_THREAD_PRIORITY; int result = sched_setscheduler(0, SCHED_RR, ¶m); if (result == 0) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 75725f0..946cfc7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,6 +7,37 @@ set (USE_PCH 1) include(FindPkgConfig) +################################################################# +# ENABLE/DISABLE VST3 Support. +# Disabled, pending Steinberg licensing agreement implementation +# and approval.. +# Do not enable unless you have non-GPL3 access to the Steinberg +# SDK. +################################################################# + +set (ENABLE_VST3 0) + + +if (ENABLE_VST3) + set (VST3PATH "../../vst3sdk") + message(STATUS " VST3 Support Enabled") + set (VST3_INCLUDES "${VST3PATH}") + + if (CMAKE_BUILD_TYPE MATCHES Debug) + add_compile_definitions("DEVELOPMENT") + else() + add_compile_definitions("RELEASE") + endif() + add_compile_definitions("ENABLE_VST3" ) + #add_compile_definitions("_GLIBCXX_USE_CXX11_ABI") + +else() + message(STATUS " VST3 Support Disabled") + set (VST3_INCLUDES "") +endif() + +########### VST 3 SUPPORT #############################################3 + # Can't get the pkg_check to work. @@ -60,19 +91,27 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) set (USE_SANITIZE False) + +if (!ENABLE_VST3) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-psabi") +else() + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-multichar -Wno-psabi") +endif() + + if (CMAKE_BUILD_TYPE MATCHES Debug) message(STATUS "Debug build") - set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wno-psabi -O0 -DDEBUG -Werror" ) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -DDEBUG" ) if (USE_SANITIZE) - set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-fsanitize=address -static-libasan " ) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -static-libasan " ) endif() elseif(CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) message(STATUS "RelWithgDebInfo build") - set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wno-psabi -Werror" ) + #set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "" ) else() message(STATUS "Release build") - set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wno-psabi -Werror" ) + #set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "" ) endif() @@ -84,8 +123,19 @@ message (STATUS "Cxx flags: ${CMAKE_CXX_FLAGS}" ) add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_BIND_GLOBAL_PLACEHOLDERS -DONBOARDING) +if (VST3PATH) +set (VST3_SOURCES + vst3/Vst3Effect.hpp Vst3Effect.cpp + vst3/Vst3Host.hpp Vst3Host.cpp + Vst3MidiToEvent.hpp + vst3/Vst3RtStream.hpp Vst3RtStream.cpp + ) +else() + set (VST3_SOURCES) +endif() set (PIPEDAL_SOURCES + RtInversionGuard.hpp CpuUse.hpp CpuUse.cpp P2pConfigFiles.hpp AvahiService.cpp AvahiService.hpp @@ -104,7 +154,7 @@ set (PIPEDAL_SOURCES WifiDirectConfigSettings.hpp WifiDirectConfigSettings.cpp ConfigUtil.hpp ConfigUtil.cpp - RequestHandler.hpp json.cpp json.hpp Scratch.cpp Lv2Host.hpp Lv2Host.cpp + RequestHandler.hpp json.cpp json.hpp Scratch.cpp PiPedalHost.hpp PiPedalHost.cpp PluginType.hpp PluginType.cpp Lv2Log.hpp Lv2Log.cpp PiPedalSocket.hpp PiPedalSocket.cpp @@ -152,6 +202,7 @@ set (PIPEDAL_SOURCES AudioDriver.hpp AudioConfig.hpp + ${VST3_SOURCES} ) @@ -161,16 +212,25 @@ include_directories( ${pipedald_SOURCE_DIR}/. ../build/src) set (PIPEDAL_INCLUDES ${LV2DEV_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LILV_0_INCLUDE_DIRS} ${LIBNL3_INCLUDE_DIRS} ${LVDEV_INCLUDE_DIRS} + ${VST3_INCLUDES} + . ) -set(PIPEDAL_LIBS libpipedald pthread atomic stdc++fs asound avahi-common avahi-client systemd +set(PIPEDAL_LIBS libpipedald + pthread atomic stdc++fs asound avahi-common avahi-client systemd ${LILV_0_LIBRARIES} # ${JACK_LIBRARIES} - ${LIBNL3_LIBRARIES} ) + ${LIBNL3_LIBRARIES} + ) + +if (VST3_ENABLED) + + set (PIPEDAL_LIBS vst3_lib ${PIPEDAL_LIBS}) +endif() ########################## - + add_library(libpipedald STATIC ${PIPEDAL_SOURCES}) target_include_directories(libpipedald PRIVATE ${PIPEDAL_INCLUDES} @@ -226,6 +286,217 @@ target_link_libraries(pipedaltest PRIVATE ${PIPEDAL_LIBS} ) +######################################################### +# VST3 Source. +# +# VST3 support is optional, because it poses unfortunate +# licensing problems. + +# There's no easy way to get the VST SDK to build without +# GCC c++11 linkage, which is not compatible with pipedal's +# use of C++20 features (strictly a link time breakage). +# +# So pipedal rebuilds the VST3 SDK using pipedal-compatible +# compile flags. +# +# The current build supports only Linux builds. Refer to the +# original VST3 SDK build for details on how to build +# for other platforms. +# +######################################################### +if(ENABLE_VST3) + + set (VST3_SRCPATH "${VST3PATH}/public.sdk/source") + + set (VST3_BASEPATH "${VST3PATH}/base") + set (VST3_PLUGININTERFACES_BASE_PATH "${VST3PATH}/pluginterfaces/base") + + set(vst3_sources + + + ${VST3_SRCPATH}/vst/vstpresetfile.cpp + ${VST3_SRCPATH}/vst/vstpresetfile.h + + # base files. + + + ${VST3_BASEPATH}/source/baseiids.cpp + ${VST3_BASEPATH}/source/classfactoryhelpers.h + ${VST3_BASEPATH}/source/fbuffer.cpp + ${VST3_BASEPATH}/source/fbuffer.h + ${VST3_BASEPATH}/source/fcleanup.h + ${VST3_BASEPATH}/source/fcommandline.h + ${VST3_BASEPATH}/source/fdebug.cpp + ${VST3_BASEPATH}/source/fdebug.h + ${VST3_BASEPATH}/source/fdynlib.cpp + ${VST3_BASEPATH}/source/fdynlib.h + ${VST3_BASEPATH}/source/fobject.cpp + ${VST3_BASEPATH}/source/fobject.h + ${VST3_BASEPATH}/source/fstreamer.cpp + ${VST3_BASEPATH}/source/fstreamer.h + ${VST3_BASEPATH}/source/fstring.cpp + ${VST3_BASEPATH}/source/fstring.h + ${VST3_BASEPATH}/source/timer.cpp + ${VST3_BASEPATH}/source/timer.h + ${VST3_BASEPATH}/source/updatehandler.cpp + ${VST3_BASEPATH}/source/updatehandler.h + + ${VST3_BASEPATH}/thread/include/fcondition.h + ${VST3_BASEPATH}/thread/include/flock.h + ${VST3_BASEPATH}/thread/source/fcondition.cpp + ${VST3_BASEPATH}/thread/source/flock.cpp + + + + # sdk_common files. + ${VST3_SRCPATH}/common/commoniids.cpp + ${VST3_SRCPATH}/common/openurl.cpp + ${VST3_SRCPATH}/common/openurl.h + ${VST3_SRCPATH}/common/systemclipboard.h + ${VST3_SRCPATH}/common/systemclipboard_win32.cpp + ${VST3_SRCPATH}/common/threadchecker_linux.cpp + ${VST3_SRCPATH}/common/threadchecker_win32.cpp + ${VST3_SRCPATH}/common/threadchecker.h + ${VST3_SRCPATH}/common/memorystream.cpp + ${VST3_SRCPATH}/common/memorystream.h + + # pluginterfaces + ${VST3_PLUGININTERFACES_BASE_PATH}/conststringtable.cpp + ${VST3_PLUGININTERFACES_BASE_PATH}/conststringtable.h + ${VST3_PLUGININTERFACES_BASE_PATH}/coreiids.cpp + ${VST3_PLUGININTERFACES_BASE_PATH}/falignpop.h + ${VST3_PLUGININTERFACES_BASE_PATH}/falignpush.h + ${VST3_PLUGININTERFACES_BASE_PATH}/fplatform.h + ${VST3_PLUGININTERFACES_BASE_PATH}/fstrdefs.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ftypes.h + ${VST3_PLUGININTERFACES_BASE_PATH}/funknown.cpp + ${VST3_PLUGININTERFACES_BASE_PATH}/funknown.h + ${VST3_PLUGININTERFACES_BASE_PATH}/funknownimpl.h + ${VST3_PLUGININTERFACES_BASE_PATH}/futils.h + ${VST3_PLUGININTERFACES_BASE_PATH}/fvariant.h + ${VST3_PLUGININTERFACES_BASE_PATH}/geoconstants.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ibstream.h + ${VST3_PLUGININTERFACES_BASE_PATH}/icloneable.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ierrorcontext.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ipersistent.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ipluginbase.h + ${VST3_PLUGININTERFACES_BASE_PATH}/istringresult.h + ${VST3_PLUGININTERFACES_BASE_PATH}/iupdatehandler.h + ${VST3_PLUGININTERFACES_BASE_PATH}/keycodes.h + ${VST3_PLUGININTERFACES_BASE_PATH}/pluginbasefwd.h + ${VST3_PLUGININTERFACES_BASE_PATH}/smartpointer.h + ${VST3_PLUGININTERFACES_BASE_PATH}/typesizecheck.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ucolorspec.h + ${VST3_PLUGININTERFACES_BASE_PATH}/ustring.cpp + ${VST3_PLUGININTERFACES_BASE_PATH}/ustring.h + + + # sdk files. + # ${VST3_SRCPATH}/main/moduleinit.cpp + # ${VST3_SRCPATH}/main/moduleinit.h + ${VST3_SRCPATH}/vst/utility/audiobuffers.h + ${VST3_SRCPATH}/vst/utility/processcontextrequirements.h + ${VST3_SRCPATH}/vst/utility/processdataslicer.h + ${VST3_SRCPATH}/vst/utility/ringbuffer.h + ${VST3_SRCPATH}/vst/utility/rttransfer.h + ${VST3_SRCPATH}/vst/utility/sampleaccurate.h + ${VST3_SRCPATH}/vst/utility/stringconvert.cpp + ${VST3_SRCPATH}/vst/utility/stringconvert.h + ${VST3_SRCPATH}/vst/utility/testing.cpp + ${VST3_SRCPATH}/vst/utility/testing.h + ${VST3_SRCPATH}/vst/utility/vst2persistence.h + ${VST3_SRCPATH}/vst/utility/vst2persistence.cpp + ${VST3_SRCPATH}/vst/vstaudioeffect.cpp + ${VST3_SRCPATH}/vst/vstaudioeffect.h + ${VST3_SRCPATH}/vst/vstbus.cpp + ${VST3_SRCPATH}/vst/vstbus.h + ${VST3_SRCPATH}/vst/vstbypassprocessor.h + ${VST3_SRCPATH}/vst/vstcomponent.cpp + ${VST3_SRCPATH}/vst/vstcomponent.h + ${VST3_SRCPATH}/vst/vstcomponentbase.cpp + ${VST3_SRCPATH}/vst/vstcomponentbase.h + ${VST3_SRCPATH}/vst/vsteditcontroller.cpp + ${VST3_SRCPATH}/vst/vsteditcontroller.h + ${VST3_SRCPATH}/vst/vsteventshelper.h + ${VST3_SRCPATH}/vst/vsthelpers.h + ${VST3_SRCPATH}/vst/vstinitiids.cpp + ${VST3_SRCPATH}/vst/vstnoteexpressiontypes.cpp + ${VST3_SRCPATH}/vst/vstnoteexpressiontypes.h + ${VST3_SRCPATH}/vst/vstparameters.cpp + ${VST3_SRCPATH}/vst/vstparameters.h + ${VST3_SRCPATH}/vst/vstrepresentation.cpp + ${VST3_SRCPATH}/vst/vstrepresentation.h + + # sdk_host.a files. + + ${VST3_SRCPATH}/vst/hosting/connectionproxy.cpp + ${VST3_SRCPATH}/vst/hosting/connectionproxy.h + ${VST3_SRCPATH}/vst/hosting/eventlist.cpp + ${VST3_SRCPATH}/vst/hosting/eventlist.h + ${VST3_SRCPATH}/vst/hosting/hostclasses.cpp + ${VST3_SRCPATH}/vst/hosting/hostclasses.h + ${VST3_SRCPATH}/vst/hosting/module.cpp + ${VST3_SRCPATH}/vst/hosting/module.h + ${VST3_SRCPATH}/vst/hosting/parameterchanges.cpp + ${VST3_SRCPATH}/vst/hosting/parameterchanges.h + ${VST3_SRCPATH}/vst/hosting/pluginterfacesupport.cpp + ${VST3_SRCPATH}/vst/hosting/pluginterfacesupport.h + ${VST3_SRCPATH}/vst/hosting/plugprovider.cpp + ${VST3_SRCPATH}/vst/hosting/plugprovider.h + ${VST3_SRCPATH}/vst/hosting/processdata.cpp + ${VST3_SRCPATH}/vst/hosting/processdata.h + ${VST3_SRCPATH}/vst/utility/optional.h + ${VST3_SRCPATH}/vst/utility/stringconvert.cpp + ${VST3_SRCPATH}/vst/utility/stringconvert.h + ${VST3_SRCPATH}/vst/utility/uid.h + ${VST3_SRCPATH}/vst/vstinitiids.cpp + + ${VST3_SRCPATH}/vst/hosting/module_linux.cpp + + # source/audiohost.cpp + # source/audiohost.h + # source/media/audioclient.cpp + # ource/media/audioclient.h + # source/media/imediaserver.h + # source/media/iparameterclient.h + # #source/media/jack/jackclient.cpp + # source/media/miditovst.h + # source/platform/appinit.h + # source/usediids.cpp + ) + + add_library(vst3_lib STATIC ${vst3_sources}) + + target_include_directories(vst3_lib PRIVATE ${VST3_INCLUDES} + ) + + + add_executable(vst3test Vst3test.cpp + + MemDebug.cpp + MemDebug.hpp + + Vst3SdkRepro.cpp + + ${VST3_FILES} + + #vst3/Vst3PresetFile.hpp Vst3PresetFile.cpp + asan_options.cpp + ) + + target_include_directories(vst3test PRIVATE ${PIPEDAL_INCLUDES} + ) + + + target_link_libraries(vst3test PRIVATE ${PIPEDAL_LIBS} + vst3_lib dl pthread + ) + +endif(ENABLE_VST3) + + + + # Build machine tests. Run tests that are not dependent on hardware. add_test(NAME BuildTest COMMAND pipedaltest "[Build]") diff --git a/src/IEffect.hpp b/src/IEffect.hpp index fe85b66..9472b91 100644 --- a/src/IEffect.hpp +++ b/src/IEffect.hpp @@ -23,11 +23,12 @@ namespace pipedal { class RealtimeParameterRequest; + class RealtimeRingBufferWriter; class IEffect { public: virtual ~IEffect() {} - virtual long GetInstanceId() const = 0; + virtual uint64_t GetInstanceId() const = 0; virtual int GetControlIndex(const std::string&symbol) const = 0; virtual void SetControl(int index, float value) = 0; virtual float GetControlValue(int index) const = 0; @@ -35,6 +36,7 @@ namespace pipedal { virtual float GetOutputControlValue(int controlIndex) const = 0; + virtual int GetNumberOfInputAudioPorts() const = 0; virtual int GetNumberOfOutputAudioPorts() const = 0; virtual float *GetAudioInputBuffer(int index) const = 0; @@ -43,13 +45,19 @@ namespace pipedal { virtual void RequestParameter(LV2_URID uridUri) = 0; virtual void GatherParameter(RealtimeParameterRequest*pRequest) = 0; - virtual std::string AtomToJson(uint8_t*pAtom) = 0; - virtual std::string GetAtomObjectType(uint8_t*pData) = 0; + //virtual std::string AtomToJson(uint8_t*pAtom) = 0; + //virtual std::string GetAtomObjectType(uint8_t*pData) = 0; + virtual void SetAudioInputBuffer(int index, float *buffer) = 0; virtual void SetAudioOutputBuffer(int index, float*buffer) = 0; virtual void Activate() = 0; + + virtual void Run(uint32_t samples, RealtimeRingBufferWriter *realtimeRingBufferWriter) = 0; + virtual void Deactivate() = 0; + + virtual bool IsVst3() const = 0; }; } //namespace \ No newline at end of file diff --git a/src/JackHost.cpp b/src/JackHost.cpp index 2e7254a..57186fc 100644 --- a/src/JackHost.cpp +++ b/src/JackHost.cpp @@ -106,6 +106,73 @@ static std::string GetGovernor() class JackHostImpl : public JackHost, private AudioDriverHost { private: + IHost *pHost = nullptr; + + class Uris + { + public: + Uris(IHost *pHost) + { + atom_Blank = pHost->GetLv2Urid(LV2_ATOM__Blank); + atom_Path = pHost->GetLv2Urid(LV2_ATOM__Path); + atom_float = pHost->GetLv2Urid(LV2_ATOM__Float); + atom_Double = pHost->GetLv2Urid(LV2_ATOM__Double); + atom_Int = pHost->GetLv2Urid(LV2_ATOM__Int); + atom_Long = pHost->GetLv2Urid(LV2_ATOM__Long); + atom_Bool = pHost->GetLv2Urid(LV2_ATOM__Bool); + atom_String = pHost->GetLv2Urid(LV2_ATOM__String); + atom_Vector = pHost->GetLv2Urid(LV2_ATOM__Vector); + atom_Object = pHost->GetLv2Urid(LV2_ATOM__Object); + + + atom_Sequence = pHost->GetLv2Urid(LV2_ATOM__Sequence); + atom_Chunk = pHost->GetLv2Urid(LV2_ATOM__Chunk); + atom_URID = pHost->GetLv2Urid(LV2_ATOM__URID); + atom_eventTransfer = pHost->GetLv2Urid(LV2_ATOM__eventTransfer); + patch_Get = pHost->GetLv2Urid(LV2_PATCH__Get); + patch_Set = pHost->GetLv2Urid(LV2_PATCH__Set); + patch_Put = pHost->GetLv2Urid(LV2_PATCH__Put); + patch_body = pHost->GetLv2Urid(LV2_PATCH__body); + patch_subject = pHost->GetLv2Urid(LV2_PATCH__subject); + patch_property = pHost->GetLv2Urid(LV2_PATCH__property); + //patch_accept = pHost->GetLv2Urid(LV2_PATCH__accept); + patch_value = pHost->GetLv2Urid(LV2_PATCH__value); + unitsFrame = pHost->GetLv2Urid(LV2_UNITS__frame); + + } + //LV2_URID patch_accept; + + LV2_URID unitsFrame; + LV2_URID pluginUri; + LV2_URID atom_Blank; + LV2_URID atom_Bool; + LV2_URID atom_float; + LV2_URID atom_Double; + LV2_URID atom_Int; + LV2_URID atom_Long; + LV2_URID atom_String; + LV2_URID atom_Object; + LV2_URID atom_Vector; + LV2_URID atom_Path; + LV2_URID atom_Sequence; + LV2_URID atom_Chunk; + LV2_URID atom_URID; + LV2_URID atom_eventTransfer; + LV2_URID midi_Event; + LV2_URID patch_Get; + LV2_URID patch_Set; + LV2_URID patch_Put; + LV2_URID patch_body; + LV2_URID patch_subject; + LV2_URID patch_property; + LV2_URID patch_value; + LV2_URID param_uiState; + }; + + Uris uris; + + + AudioDriver*audioDriver = nullptr; inherit_priority_recursive_mutex mutex; @@ -146,6 +213,30 @@ private: std::atomic lastUnderrunTime = std::chrono::system_clock::from_time_t(0); + + std::string GetAtomObjectType(uint8_t*pData) + { + LV2_Atom_Object *pAtom = (LV2_Atom_Object*)pData; + if (pAtom->atom.type != uris.atom_Object) + { + throw std::invalid_argument("Not an Lv2 Object"); + } + return pHost->Lv2UriudToString(pAtom->body.otype); + + } + + void WriteAtom(json_writer &writer, LV2_Atom*pAtom); + + std::string AtomToJson(uint8_t*pData) + { + std::stringstream s; + json_writer writer(s); + LV2_Atom *pAtom = (LV2_Atom*)pData; + + WriteAtom(writer,pAtom); + return s.str(); + } + virtual void OnUnderrun() { ++this->underruns; @@ -582,7 +673,6 @@ private: } } - public: JackHostImpl(IHost *pHost) @@ -592,7 +682,9 @@ public: realtimeWriter(&this->outputRingBuffer), hostReader(&this->outputRingBuffer), hostWriter(&this->inputRingBuffer), - eventBufferUrids(pHost) + eventBufferUrids(pHost), + pHost(pHost), + uris(pHost) { #if JACK_HOST @@ -758,7 +850,7 @@ public: } else { - pRequest->jsonResponse = pEffect->AtomToJson(pRequest->response); + pRequest->jsonResponse = AtomToJson(pRequest->response); } } pRequest->onJackRequestComplete(pRequest); @@ -802,8 +894,8 @@ public: IEffect *pEffect = currentPedalBoard->GetEffect(instanceId); if (pEffect != nullptr &&this->pNotifyCallbacks && listenForAtomOutput) { - std::string atomType = pEffect->GetAtomObjectType(&atomBuffer[0]); - auto json = pEffect->AtomToJson(&(atomBuffer[0])); + std::string atomType = GetAtomObjectType(&atomBuffer[0]); + auto json = AtomToJson(&(atomBuffer[0])); this->pNotifyCallbacks->OnNotifyAtomOutput(instanceId,atomType,json); } } @@ -1275,6 +1367,148 @@ public: } }; +static std::string UriToFieldName(const std::string&uri){ + int pos; + for (pos = uri.length(); pos >= 0; --pos) + { + char c = uri[pos]; + if (c == '#' || c == '/' || c == ':') + { + break; + } + } + return uri.substr(pos+1); +} + +void JackHostImpl::WriteAtom(json_writer &writer, LV2_Atom*pAtom) +{ + if (pAtom->type == uris.atom_Blank) + { + writer.write_raw("null"); + } + else if (pAtom->type == uris.atom_float) + { + writer.write( + ((LV2_Atom_Float*)pAtom)->body + ); + + } else if (pAtom->type == uris.atom_Int) + { + writer.write( + ((LV2_Atom_Int*)pAtom)->body + ); + } else if (pAtom->type == uris.atom_Long) + { + writer.write( + ((LV2_Atom_Long*)pAtom)->body + ); + } else if (pAtom->type == uris.atom_Double) + { + writer.write( + ((LV2_Atom_Double*)pAtom)->body + ); + } else if (pAtom->type == uris.atom_Bool) + { + writer.write( + ((LV2_Atom_Bool*)pAtom)->body + ); + } else if (pAtom->type == uris.atom_String) + { + const char *p = (((const char*) pAtom) + sizeof(LV2_Atom_String)); + writer.write( + p + ); + } else if (pAtom->type == uris.atom_Vector) + { + LV2_Atom_Vector *pVector = (LV2_Atom_Vector*)pAtom; + writer.start_array(); + { + size_t n = (pAtom->size-sizeof(pVector->body))/pVector->body.child_size; + char *pItems = ((char*)pAtom) + sizeof(LV2_Atom_Vector); + if (pVector->body.child_type == uris.atom_float) + { + float *p = (float*)pItems; + for (size_t i = 0; i < n; ++i) + { + if (i != 0) writer.write_raw(","); + writer.write(*p++); + } + } else if (pVector->body.child_type == uris.atom_Int) + { + int32_t *p = (int32_t*)pItems; + for (size_t i = 0; i < n; ++i) + { + if (i != 0) writer.write_raw(","); + writer.write(*p++); + } + } else if (pVector->body.child_type == uris.atom_Long) + { + int64_t *p = (int64_t*)pItems; + for (size_t i = 0; i < n; ++i) + { + if (i != 0) writer.write_raw(","); + writer.write(*p++); + } + } else if (pVector->body.child_type == uris.atom_Double) + { + double *p = (double*)pItems; + for (size_t i = 0; i < n; ++i) + { + if (i != 0) writer.write_raw(","); + writer.write(*p++); + } + } else if (pVector->body.child_type == uris.atom_Bool) + { + bool *p = (bool*)pItems; + for (size_t i = 0; i < n; ++i) + { + if (i != 0) writer.write_raw(","); + writer.write(*p++); + } + } + } + writer.end_array(); + } else if (pAtom->type == uris.atom_Object) + { + writer.start_object(); + + const LV2_Atom_Object *obj = (const LV2_Atom_Object *)pAtom; + bool firstMember = true; + if (obj->body.id != 0) + { + std::string id = pHost->Lv2UriudToString(obj->body.id); + writer.write_member("id",id.c_str()); + firstMember = false; + } + + if (obj->body.otype != 0) + { + std::string type = pHost->Lv2UriudToString(obj->body.otype); + writer.write_member("lv2Type",type.c_str()); + if (!firstMember) + { + writer.write_raw(","); + } + firstMember = false; + } + + LV2_ATOM_OBJECT_FOREACH (obj, prop) { + if (!firstMember) { + writer.write_raw(","); + } + firstMember = false; + std::string key = pHost->Lv2UriudToString(prop->key); + key = UriToFieldName(key); + writer.write(key); + writer.write_raw(": "); + LV2_Atom *value = &(prop->value); + WriteAtom(writer,value); + } + writer.end_object(); + + } + +} JackHost *JackHost::CreateInstance(IHost *pHost) { diff --git a/src/LiteralVersion.cpp b/src/LiteralVersion.cpp new file mode 100644 index 0000000..5d4ae77 --- /dev/null +++ b/src/LiteralVersion.cpp @@ -0,0 +1,74 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + +#include "LiteralVersion.hpp" +#include +#include + +using namespace pipedal; + +LiteralVersion::LiteralVersion() +{ +} +LiteralVersion::LiteralVersion(const std::string &version) +{ + Parse(version); +} + +bool LiteralVersion::Parse(const std::string &version) +{ + int ix = 0; + + while (ix < version.length()) + { + char c = version[ix]; + int n = 0; + if (std::isdigit(c)) + { + while (std::isdigit(c)) + { + c = version[ix++]; + n = c -'0' + n; + } + this->versionNumbers.push_back(n); + + if (version[ix] == '.') + { + ++ix; + } + } else { + std::stringstream t; + + while (ix < version.length()) + { + c = version[ix++]; + t << c; + } + suffix = t.str(); + } + } + + return true; +} diff --git a/src/LiteralVersion.hpp b/src/LiteralVersion.hpp new file mode 100644 index 0000000..dfe094b --- /dev/null +++ b/src/LiteralVersion.hpp @@ -0,0 +1,45 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include +#include + +namespace pipedal { + class LiteralVersion { + public: + LiteralVersion(); + LiteralVersion(const std::string&version); + + bool Parse(const std::string&version); + + const std::vector &getVersionNumbers() const { return versionNumbers; } + const std::string&getSuffix() const { return suffix; } + int compare(const LiteralVersion&other); + private: + std::vector versionNumbers; + std::string suffix; + }; +}; \ No newline at end of file diff --git a/src/Lv2Effect.cpp b/src/Lv2Effect.cpp index a4ed1ad..eed9efb 100644 --- a/src/Lv2Effect.cpp +++ b/src/Lv2Effect.cpp @@ -216,7 +216,7 @@ void Lv2Effect::SetAudioInputBuffer(int index, float *buffer) void Lv2Effect::SetAudioInputBuffer(float *left) { - if (GetNumberOfInputs() > 1) + if (GetNumberOfInputAudioPorts() > 1) { SetAudioInputBuffer(0, left); SetAudioInputBuffer(1, left); @@ -229,7 +229,7 @@ void Lv2Effect::SetAudioInputBuffer(float *left) void Lv2Effect::SetAudioInputBuffers(float *left, float *right) { - if (GetNumberOfInputs() == 1) + if (GetNumberOfInputAudioPorts() == 1) { SetAudioInputBuffer(0, left); } @@ -343,7 +343,7 @@ static inline void CopyBuffer(float *input, float *output, uint32_t frames) } } -void Lv2Effect::Run(uint32_t samples,uint64_t instanceId, RealtimeRingBufferWriter *realtimeRingBufferWriter) +void Lv2Effect::Run(uint32_t samples,RealtimeRingBufferWriter *realtimeRingBufferWriter) { // close off the atom input frame. if (this->inputAtomBuffers.size() != 0) @@ -441,7 +441,7 @@ void Lv2Effect::Run(uint32_t samples,uint64_t instanceId, RealtimeRingBufferWrit } } - RelayOutputMessages(instanceId,realtimeRingBufferWriter); + RelayOutputMessages(this->instanceId,realtimeRingBufferWriter); } LV2_Worker_Status Lv2Effect::worker_schedule_fn(LV2_Worker_Schedule_Handle handle, @@ -600,164 +600,5 @@ void Lv2Effect::GatherParameter(RealtimeParameterRequest *pRequest) } } -std::string Lv2Effect::GetAtomObjectType(uint8_t*pData) -{ - LV2_Atom_Object *pAtom = (LV2_Atom_Object*)pData; - if (pAtom->atom.type != uris.atom_Object) - { - throw std::invalid_argument("Not an Lv2 Object"); - } - return pHost->Lv2UriudToString(pAtom->body.otype); -} -std::string Lv2Effect::AtomToJson(uint8_t*pData) -{ - std::stringstream s; - json_writer writer(s); - LV2_Atom *pAtom = (LV2_Atom*)pData; - WriteAtom(writer,pAtom); - return s.str(); -} - -static std::string UriToFieldName(const std::string&uri){ - int pos; - for (pos = uri.length(); pos >= 0; --pos) - { - char c = uri[pos]; - if (c == '#' || c == '/' || c == ':') - { - break; - } - } - return uri.substr(pos+1); -} -void Lv2Effect::WriteAtom(json_writer &writer, LV2_Atom*pAtom) -{ - if (pAtom->type == uris.atom_Blank) - { - writer.write_raw("null"); - } - else if (pAtom->type == uris.atom_float) - { - writer.write( - ((LV2_Atom_Float*)pAtom)->body - ); - - } else if (pAtom->type == uris.atom_Int) - { - writer.write( - ((LV2_Atom_Int*)pAtom)->body - ); - } else if (pAtom->type == uris.atom_Long) - { - writer.write( - ((LV2_Atom_Long*)pAtom)->body - ); - } else if (pAtom->type == uris.atom_Double) - { - writer.write( - ((LV2_Atom_Double*)pAtom)->body - ); - } else if (pAtom->type == uris.atom_Bool) - { - writer.write( - ((LV2_Atom_Bool*)pAtom)->body - ); - } else if (pAtom->type == uris.atom_String) - { - const char *p = (((const char*) pAtom) + sizeof(LV2_Atom_String)); - writer.write( - p - ); - } else if (pAtom->type == uris.atom_Vector) - { - LV2_Atom_Vector *pVector = (LV2_Atom_Vector*)pAtom; - writer.start_array(); - { - size_t n = (pAtom->size-sizeof(pVector->body))/pVector->body.child_size; - char *pItems = ((char*)pAtom) + sizeof(LV2_Atom_Vector); - if (pVector->body.child_type == uris.atom_float) - { - float *p = (float*)pItems; - for (size_t i = 0; i < n; ++i) - { - if (i != 0) writer.write_raw(","); - writer.write(*p++); - } - } else if (pVector->body.child_type == uris.atom_Int) - { - int32_t *p = (int32_t*)pItems; - for (size_t i = 0; i < n; ++i) - { - if (i != 0) writer.write_raw(","); - writer.write(*p++); - } - } else if (pVector->body.child_type == uris.atom_Long) - { - int64_t *p = (int64_t*)pItems; - for (size_t i = 0; i < n; ++i) - { - if (i != 0) writer.write_raw(","); - writer.write(*p++); - } - } else if (pVector->body.child_type == uris.atom_Double) - { - double *p = (double*)pItems; - for (size_t i = 0; i < n; ++i) - { - if (i != 0) writer.write_raw(","); - writer.write(*p++); - } - } else if (pVector->body.child_type == uris.atom_Bool) - { - bool *p = (bool*)pItems; - for (size_t i = 0; i < n; ++i) - { - if (i != 0) writer.write_raw(","); - writer.write(*p++); - } - } - } - writer.end_array(); - } else if (pAtom->type == uris.atom_Object) - { - writer.start_object(); - - const LV2_Atom_Object *obj = (const LV2_Atom_Object *)pAtom; - bool firstMember = true; - if (obj->body.id != 0) - { - std::string id = pHost->Lv2UriudToString(obj->body.id); - writer.write_member("id",id.c_str()); - firstMember = false; - } - - if (obj->body.otype != 0) - { - std::string type = pHost->Lv2UriudToString(obj->body.otype); - writer.write_member("lv2Type",type.c_str()); - if (!firstMember) - { - writer.write_raw(","); - } - firstMember = false; - } - - LV2_ATOM_OBJECT_FOREACH (obj, prop) { - if (!firstMember) { - writer.write_raw(","); - } - firstMember = false; - std::string key = pHost->Lv2UriudToString(prop->key); - key = UriToFieldName(key); - writer.write(key); - writer.write_raw(": "); - LV2_Atom *value = &(prop->value); - WriteAtom(writer,value); - } - writer.end_object(); - - } - -} diff --git a/src/Lv2Effect.hpp b/src/Lv2Effect.hpp index add4390..97e64cc 100644 --- a/src/Lv2Effect.hpp +++ b/src/Lv2Effect.hpp @@ -20,7 +20,7 @@ #pragma once -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include "PedalBoard.hpp" #include #include "BufferPool.hpp" @@ -82,7 +82,6 @@ namespace pipedal LV2_Atom_Forge outputForgeRt; - void WriteAtom(json_writer &writer, LV2_Atom*pAtom); class Uris { @@ -167,9 +166,10 @@ namespace pipedal void BypassTo(float value); + virtual void RequestParameter(LV2_URID uridUri); virtual void GatherParameter(RealtimeParameterRequest*pRequest); - + virtual bool IsVst3() const { return false; } virtual void RelayOutputMessages(uint64_t instanceId,RealtimeRingBufferWriter *realtimeRingBufferWriter); virtual uint8_t*GetAtomInputBuffer() { @@ -182,10 +182,6 @@ namespace pipedal return (uint8_t*)this->outputAtomBuffers[0]; } - virtual std::string AtomToJson(uint8_t*pAtom); - virtual std::string GetAtomObjectType(uint8_t*pData); - - public: @@ -196,29 +192,30 @@ namespace pipedal ~Lv2Effect(); + virtual void ResetAtomBuffers(); - virtual long GetInstanceId() const { return instanceId; } + virtual uint64_t GetInstanceId() const { return instanceId; } virtual int GetNumberOfInputAudioPorts() const { return inputAudioPortIndices.size(); } virtual int GetNumberOfOutputAudioPorts() const { return outputAudioPortIndices.size(); } - int GetNumberOfInputAtomPorts() const { return inputAtomPortIndices.size(); } - int GetNumberOfOutputAtomPorts() const { return outputAtomPortIndices.size(); } - int GetNumberOfMidiInputPorts() const { return inputMidiPortIndices.size(); } - int GetNumberOfMidiOutputPorts() const { return outputMidiPortIndices.size(); } + virtual int GetNumberOfInputAtomPorts() const { return inputAtomPortIndices.size(); } + virtual int GetNumberOfOutputAtomPorts() const { return outputAtomPortIndices.size(); } + virtual int GetNumberOfMidiInputPorts() const { return inputMidiPortIndices.size(); } + virtual int GetNumberOfMidiOutputPorts() const { return outputMidiPortIndices.size(); } virtual void SetAudioInputBuffer(int index, float *buffer); - float *GetAudioInputBuffer(int index) const { return this->inputAudioBuffers[index]; } + virtual float *GetAudioInputBuffer(int index) const { return this->inputAudioBuffers[index]; } - void SetAudioInputBuffer(float *buffer); - void SetAudioInputBuffers(float *left, float *right); + virtual void SetAudioInputBuffer(float *buffer); + virtual void SetAudioInputBuffers(float *left, float *right); virtual void SetAudioOutputBuffer(int index, float *buffer); - float *GetAudioOutputBuffer(int index) const { return this->outputAudioBuffers[index]; } + virtual float *GetAudioOutputBuffer(int index) const { return this->outputAudioBuffers[index]; } - void SetAtomInputBuffer(int index, void *buffer); - void *GetAtomInputBuffer(int index) const { return this->inputAtomBuffers[index]; } + virtual void SetAtomInputBuffer(int index, void *buffer) { this->inputAtomBuffers[index] = (char*)buffer;} + virtual void *GetAtomInputBuffer(int index) const { return this->inputAtomBuffers[index]; } - void SetAtomOutputBuffer(int index, void *buffer); - void *GetAtomOutputBuffer(int index) const { return this->outputAtomBuffers[index]; } + virtual void SetAtomOutputBuffer(int index, void *buffer) { this->outputAtomBuffers[index] = (char*)buffer; } + virtual void *GetAtomOutputBuffer(int index) const { return this->outputAtomBuffers[index]; } virtual int GetControlIndex(const std::string &symbol) const; @@ -254,22 +251,10 @@ namespace pipedal } } - int GetNumberOfInputs() const - { - return this->inputAudioPortIndices.size(); - } - int GetNumberOfOutputs() const - { - return this->outputAudioPortIndices.size(); - } - int GetNumberOfMidiInputs() const - { - return this->inputMidiPortIndices.size(); - } - void Activate(); - void Run(uint32_t samples, uint64_t instanceId,RealtimeRingBufferWriter *realtimeRingBufferWriter); - void Deactivate(); + virtual void Activate(); + virtual void Run(uint32_t samples, RealtimeRingBufferWriter *realtimeRingBufferWriter); + virtual void Deactivate(); }; } // namespace \ No newline at end of file diff --git a/src/Lv2EventBufferWriter.cpp b/src/Lv2EventBufferWriter.cpp index f5d905d..7027687 100644 --- a/src/Lv2EventBufferWriter.cpp +++ b/src/Lv2EventBufferWriter.cpp @@ -19,7 +19,7 @@ #include "pch.h" #include "Lv2EventBufferWriter.hpp" -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" using namespace pipedal; diff --git a/src/Lv2HostLeakTest.cpp b/src/Lv2HostLeakTest.cpp index 16bdc16..6f86217 100644 --- a/src/Lv2HostLeakTest.cpp +++ b/src/Lv2HostLeakTest.cpp @@ -24,17 +24,17 @@ #include -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include "MemDebug.hpp" using namespace pipedal; -TEST_CASE( "Lv2Host memory leak", "[lv2host_leak][Build][Dev]" ) { +TEST_CASE( "PiPedalHost memory leak", "[lv2host_leak][Build][Dev]" ) { MemStats initialMemory = GetMemStats(); { - Lv2Host host; + PiPedalHost host; host.Load("/usr/lib/lv2:/usr/local/lib/lv2:/usr/modep/lv2"); } diff --git a/src/Lv2PedalBoard.cpp b/src/Lv2PedalBoard.cpp index d19cbf5..038ae00 100644 --- a/src/Lv2PedalBoard.cpp +++ b/src/Lv2PedalBoard.cpp @@ -21,6 +21,7 @@ #include "Lv2PedalBoard.hpp" #include "Lv2Effect.hpp" + #include "SplitEffect.hpp" #include "RingBufferReader.hpp" #include "VuUpdate.hpp" @@ -57,7 +58,7 @@ int Lv2PedalBoard::GetControlIndex(uint64_t instanceId, const std::string &symbo return -1; } std::vector Lv2PedalBoard::PrepareItems( - const std::vector &items, + std::vector &items, std::vector inputBuffers) { for (int i = 0; i < items.size(); ++i) @@ -142,9 +143,9 @@ std::vector Lv2PedalBoard::PrepareItems( } this->processActions.push_back( - [pLv2Effect,this,instanceId](uint32_t frames) + [pLv2Effect,this](uint32_t frames) { - pLv2Effect->Run(frames,instanceId,this->ringBufferWriter); + pLv2Effect->Run(frames,this->ringBufferWriter); }); } } @@ -197,7 +198,7 @@ std::vector Lv2PedalBoard::PrepareItems( return inputBuffers; } -void Lv2PedalBoard::Prepare(IHost *pHost, const PedalBoard &pedalBoard) +void Lv2PedalBoard::Prepare(IHost *pHost, PedalBoard &pedalBoard) { this->pHost = pHost; diff --git a/src/Lv2PedalBoard.hpp b/src/Lv2PedalBoard.hpp index 9ac0f38..d3d8a14 100644 --- a/src/Lv2PedalBoard.hpp +++ b/src/Lv2PedalBoard.hpp @@ -19,7 +19,7 @@ #pragma once #include "PedalBoard.hpp" -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include "Lv2Effect.hpp" #include "BufferPool.hpp" #include @@ -81,7 +81,7 @@ class Lv2PedalBoard { std::vector PrepareItems( - const std::vector & items, + std::vector & items, std::vector inputBuffers ); @@ -95,7 +95,9 @@ public: Lv2PedalBoard() { } ~Lv2PedalBoard() { } - void Prepare(IHost *pHost,const PedalBoard&pedalBoard); + void Prepare(IHost *pHost,PedalBoard&pedalBoard); + + std::vector GetEffects() { return realtimeEffects; } int GetIndexOfInstanceId(uint64_t instanceId) { for (int i = 0; i < this->realtimeEffects.size(); ++i) diff --git a/src/PedalBoard.hpp b/src/PedalBoard.hpp index 7dd8513..9075d16 100644 --- a/src/PedalBoard.hpp +++ b/src/PedalBoard.hpp @@ -82,10 +82,12 @@ class PedalBoardItem: public JsonWritable { std::vector topChain_; std::vector bottomChain_; std::vector midiBindings_; + std::string vstState_; public: ControlValue*GetControlValue(const std::string&symbol); GETTER_SETTER(instanceId) GETTER_SETTER_REF(uri) + GETTER_SETTER_REF(vstState); GETTER_SETTER_REF(pluginName) GETTER_SETTER(isEnabled) GETTER_SETTER_VEC(controlValues) diff --git a/src/PiPedalConfiguration.cpp b/src/PiPedalConfiguration.cpp index 604532a..5fec21b 100644 --- a/src/PiPedalConfiguration.cpp +++ b/src/PiPedalConfiguration.cpp @@ -36,4 +36,5 @@ JSON_MAP_REFERENCE(PiPedalConfiguration, logHttpRequests) JSON_MAP_REFERENCE(PiPedalConfiguration, maxUploadSize) JSON_MAP_REFERENCE(PiPedalConfiguration, accessPointGateway) JSON_MAP_REFERENCE(PiPedalConfiguration, accessPointServerAddress) +JSON_MAP_REFERENCE(PiPedalConfiguration, isVst3Enabled) JSON_MAP_END() diff --git a/src/PiPedalConfiguration.hpp b/src/PiPedalConfiguration.hpp index 862a647..c2fe24e 100644 --- a/src/PiPedalConfiguration.hpp +++ b/src/PiPedalConfiguration.hpp @@ -47,9 +47,10 @@ private: uint64_t maxUploadSize_ = 1024*1024; std::string accessPointGateway_; std::string accessPointServerAddress_; + bool isVst3Enabled_ = true; public: - + bool IsVst3Enabled() const { return isVst3Enabled_; } std::filesystem::path GetConfigFilePath() const { return docRoot_ / "config.jason"; } diff --git a/src/Lv2Host.cpp b/src/PiPedalHost.cpp similarity index 80% rename from src/Lv2Host.cpp rename to src/PiPedalHost.cpp index 4ac7683..f7ab849 100644 --- a/src/Lv2Host.cpp +++ b/src/PiPedalHost.cpp @@ -18,7 +18,7 @@ // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "pch.h" -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include #include #include @@ -85,7 +85,7 @@ namespace pipedal static const char *LV2_MIDI_EVENT = "http://lv2plug.in/ns/ext/midi#MidiEvent"; static const char *LV2_DESIGNATION = "http://lv2plug.in/ns/lv2core#Designation"; - class Lv2Host::Urids + class PiPedalHost::Urids { public: Urids(MapFeature &mapFeature) @@ -96,9 +96,17 @@ namespace pipedal }; } -void Lv2Host::LilvUris::Initialize(LilvWorld *pWorld) +void PiPedalHost::SetConfiguration(const PiPedalConfiguration &configuration) { - rdfsComment = lilv_new_uri(pWorld, Lv2Host::RDFS_COMMENT_URI); + this->vst3CachePath = + std::filesystem::path(configuration.GetLocalStoragePath()) / "vst3cache.json"; + this->vst3Enabled = configuration.IsVst3Enabled(); +} + + +void PiPedalHost::LilvUris::Initialize(LilvWorld *pWorld) +{ + rdfsComment = lilv_new_uri(pWorld, PiPedalHost::RDFS_COMMENT_URI); logarithic_uri = lilv_new_uri(pWorld, LV2_PORT_LOGARITHMIC); display_priority_uri = lilv_new_uri(pWorld, LV2_PORT_DISPLAY_PRIORITY); range_steps_uri = lilv_new_uri(pWorld, LV2_PORT_RANGE_STEPS); @@ -124,7 +132,7 @@ void Lv2Host::LilvUris::Initialize(LilvWorld *pWorld) appliesTo = lilv_new_uri(pWorld, LV2_CORE__appliesTo); } -void Lv2Host::LilvUris::Free() +void PiPedalHost::LilvUris::Free() { rdfsComment.Free(); logarithic_uri.Free(); @@ -242,7 +250,7 @@ public: } }; -Lv2Host::Lv2Host() +PiPedalHost::PiPedalHost() { pWorld = nullptr; @@ -260,7 +268,7 @@ Lv2Host::Lv2Host() this->urids = new Urids(mapFeature); } -void Lv2Host::OnConfigurationChanged(const JackConfiguration &configuration, const JackChannelSelection &settings) +void PiPedalHost::OnConfigurationChanged(const JackConfiguration &configuration, const JackChannelSelection &settings) { this->sampleRate = configuration.GetSampleRate(); if (configuration.isValid()) @@ -272,7 +280,7 @@ void Lv2Host::OnConfigurationChanged(const JackConfiguration &configuration, con } } -Lv2Host::~Lv2Host() +PiPedalHost::~PiPedalHost() { delete[] lv2Features; lilvUris.Free(); @@ -280,7 +288,7 @@ Lv2Host::~Lv2Host() delete urids; } -void Lv2Host::free_world() +void PiPedalHost::free_world() { if (pWorld) { @@ -288,7 +296,7 @@ void Lv2Host::free_world() pWorld = nullptr; } } -std::shared_ptr Lv2Host::GetPluginClass(const std::string &uri) const +std::shared_ptr PiPedalHost::GetPluginClass(const std::string &uri) const { auto it = this->classesMap.find(uri); if (it == this->classesMap.end()) @@ -296,7 +304,7 @@ std::shared_ptr Lv2Host::GetPluginClass(const std::string &uri) return (*it).second; } -void Lv2Host::AddJsonClassesToMap(std::shared_ptr pluginClass) +void PiPedalHost::AddJsonClassesToMap(std::shared_ptr pluginClass) { this->classesMap[pluginClass->uri()] = pluginClass; for (int i = 0; i < pluginClass->children_.size(); ++i) @@ -306,7 +314,7 @@ void Lv2Host::AddJsonClassesToMap(std::shared_ptr pluginClass) child->parent_ = pluginClass.get(); } } -void Lv2Host::LoadPluginClassesFromJson(std::filesystem::path jsonFile) +void PiPedalHost::LoadPluginClassesFromJson(std::filesystem::path jsonFile) { std::ifstream f(jsonFile); json_reader reader(f); @@ -320,7 +328,7 @@ void Lv2Host::LoadPluginClassesFromJson(std::filesystem::path jsonFile) MAP_CHECK(); } -std::shared_ptr Lv2Host::GetPluginClass(const LilvPluginClass *pClass) +std::shared_ptr PiPedalHost::GetPluginClass(const LilvPluginClass *pClass) { MAP_CHECK(); @@ -328,7 +336,7 @@ std::shared_ptr Lv2Host::GetPluginClass(const LilvPluginClass *p std::shared_ptr pResult = this->classesMap[uri]; return pResult; } -std::shared_ptr Lv2Host::MakePluginClass(const LilvPluginClass *pClass) +std::shared_ptr PiPedalHost::MakePluginClass(const LilvPluginClass *pClass) { std::string uri = nodeAsString(lilv_plugin_class_get_uri(pClass)); auto t = this->classesMap.find(uri); @@ -348,7 +356,7 @@ std::shared_ptr Lv2Host::MakePluginClass(const LilvPluginClass * return result; } -void Lv2Host::LoadPluginClassesFromLilv() +void PiPedalHost::LoadPluginClassesFromLilv() { const auto classes = lilv_world_get_plugin_classes(pWorld); @@ -378,7 +386,7 @@ void Lv2Host::LoadPluginClassesFromLilv() } } -void Lv2Host::Load(const char *lv2Path) +void PiPedalHost::Load(const char *lv2Path) { this->plugins_.clear(); @@ -390,13 +398,14 @@ void Lv2Host::Load(const char *lv2Path) free_world(); + Lv2Log::info("Scanning for LV2 Plugins"); + setenv("LV2_PATH", lv2Path, true); - StdErrorCapture stdoutCapture; // captures lilv messages written to STDOUT. + StdErrorCapture stdoutCapture; // captures lilv messages written to STDOUT. pWorld = lilv_world_new(); { lilv_world_load_all(pWorld); - } lilvUris.Initialize(pWorld); @@ -443,7 +452,7 @@ void Lv2Host::Load(const char *lv2Path) } auto messages = stdoutCapture.GetOutputLines(); - for (const std::string & s: messages) + for (const std::string &s : messages) { Lv2Log::info("lilv: " + s); } @@ -491,8 +500,35 @@ void Lv2Host::Load(const char *lv2Path) } } } -} -; + +#if ENABLE_VST3 + if (vst3Enabled) + { + Lv2Log::info("Scanning for VST3 Plugins"); + this->vst3Host = Vst3Host::CreateInstance( + this->vst3CachePath); + this->vst3Host->RefreshPlugins(); + + const auto &vst3PluginList = this->vst3Host->getPluginList(); + for (const auto &vst3Plugin : vst3PluginList) + { + // copy not move! + ui_plugins_.push_back(vst3Plugin->pluginInfo_); + } + auto ui_compare = [&collation]( + Lv2PluginUiInfo &left, + Lv2PluginUiInfo &right) + { + const char *pb1 = left.name().c_str(); + const char *pb2 = right.name().c_str(); + return collation.compare( + pb1, pb1 + left.name().size(), + pb2, pb2 + right.name().size()) < 0; + }; + std::sort(this->ui_plugins_.begin(), this->ui_plugins_.end(), ui_compare); + } +#endif +}; class NodesAutoFree { @@ -532,10 +568,10 @@ static std::vector nodeAsStringArray(const LilvNodes *nodes) return result; } -const char *Lv2Host::RDFS_COMMENT_URI = "http://www.w3.org/2000/01/rdf-schema#" - "comment"; +const char *PiPedalHost::RDFS_COMMENT_URI = "http://www.w3.org/2000/01/rdf-schema#" + "comment"; -LilvNode *Lv2Host::get_comment(const std::string &uri) +LilvNode *PiPedalHost::get_comment(const std::string &uri) { NodeAutoFree uriNode = lilv_new_uri(pWorld, uri.c_str()); LilvNode *result = lilv_world_get(pWorld, uriNode, lilvUris.rdfsComment, nullptr); @@ -547,7 +583,7 @@ static bool ports_sort_compare(std::shared_ptr &p1, const std::shar return p1->index() < p2->index(); } -bool Lv2PluginInfo::HasFactoryPresets(Lv2Host *lv2Host, const LilvPlugin *plugin) +bool Lv2PluginInfo::HasFactoryPresets(PiPedalHost *lv2Host, const LilvPlugin *plugin) { NodesAutoFree nodes = lilv_plugin_get_related(plugin, lv2Host->lilvUris.pset_Preset); bool result = false; @@ -559,7 +595,7 @@ bool Lv2PluginInfo::HasFactoryPresets(Lv2Host *lv2Host, const LilvPlugin *plugin return result; } -Lv2PluginInfo::Lv2PluginInfo(Lv2Host *lv2Host, const LilvPlugin *pPlugin) +Lv2PluginInfo::Lv2PluginInfo(PiPedalHost *lv2Host, const LilvPlugin *pPlugin) { const LilvNode *pluginUri = lilv_plugin_get_uri(pPlugin); @@ -664,7 +700,7 @@ Lv2PluginInfo::~Lv2PluginInfo() { } -bool Lv2PortInfo::is_a(Lv2Host *lv2Plugins, const char *classUri) +bool Lv2PortInfo::is_a(PiPedalHost *lv2Plugins, const char *classUri) { return classes_.is_a(lv2Plugins, classUri); } @@ -686,7 +722,7 @@ static bool scale_points_sort_compare(const Lv2ScalePoint &v1, const Lv2ScalePoi { return v1.value() < v2.value(); } -Lv2PortInfo::Lv2PortInfo(Lv2Host *host, const LilvPlugin *plugin, const LilvPort *pPort) +Lv2PortInfo::Lv2PortInfo(PiPedalHost *host, const LilvPlugin *plugin, const LilvPort *pPort) { auto pWorld = host->pWorld; index_ = lilv_port_get_index(plugin, pPort); @@ -785,7 +821,7 @@ Lv2PortInfo::Lv2PortInfo(Lv2Host *host, const LilvPlugin *plugin, const LilvPort NodeAutoFree unitsValueUri = lilv_port_get(plugin, pPort, host->lilvUris.unitsUri); this->units_ = UriToUnits(nodeAsString(unitsValueUri)); - NodeAutoFree commentNode = lilv_port_get(plugin,pPort,host->lilvUris.rdfsComment); + NodeAutoFree commentNode = lilv_port_get(plugin, pPort, host->lilvUris.rdfsComment); this->comment_ = nodeAsString(commentNode); NodeAutoFree bufferType = lilv_port_get(plugin, pPort, host->lilvUris.bufferType_uri); @@ -800,7 +836,7 @@ Lv2PortInfo::Lv2PortInfo(Lv2Host *host, const LilvPlugin *plugin, const LilvPort ((is_input_ || is_output_) && (is_audio_port_ || is_atom_port_ || is_cv_port_)); } -Lv2PluginClasses Lv2Host::GetPluginPortClass(const LilvPlugin *lilvPlugin, const LilvPort *lilvPort) +Lv2PluginClasses PiPedalHost::GetPluginPortClass(const LilvPlugin *lilvPlugin, const LilvPort *lilvPort) { std::vector result; const LilvNodes *nodes = lilv_port_get_classes(lilvPlugin, lilvPort); @@ -832,7 +868,7 @@ bool Lv2PluginClass::is_a(const std::string &classUri) const } return false; } -bool Lv2PluginClasses::is_a(Lv2Host *lv2Plugins, const char *classUri) const +bool Lv2PluginClasses::is_a(PiPedalHost *lv2Plugins, const char *classUri) const { std::string classUri_(classUri); for (auto i : classes_) @@ -845,7 +881,7 @@ bool Lv2PluginClasses::is_a(Lv2Host *lv2Plugins, const char *classUri) const return false; } -bool Lv2Host::is_a(const std::string &class_, const std::string &target_class) +bool PiPedalHost::is_a(const std::string &class_, const std::string &target_class) { if (class_ == target_class) return true; @@ -857,7 +893,7 @@ bool Lv2Host::is_a(const std::string &class_, const std::string &target_class) return false; } -Lv2PluginUiInfo::Lv2PluginUiInfo(Lv2Host *pHost, const Lv2PluginInfo *plugin) +Lv2PluginUiInfo::Lv2PluginUiInfo(PiPedalHost *pHost, const Lv2PluginInfo *plugin) : uri_(plugin->uri()), name_(plugin->name()), author_name_(plugin->author_name()), @@ -919,12 +955,12 @@ Lv2PluginUiInfo::Lv2PluginUiInfo(Lv2Host *pHost, const Lv2PluginInfo *plugin) } } -std::shared_ptr Lv2Host::GetLv2PluginClass() const +std::shared_ptr PiPedalHost::GetLv2PluginClass() const { return this->GetPluginClass(LV2_PLUGIN); } -std::shared_ptr Lv2Host::GetPluginInfo(const std::string &uri) const +std::shared_ptr PiPedalHost::GetPluginInfo(const std::string &uri) const { for (auto i = this->plugins_.begin(); i != this->plugins_.end(); ++i) { @@ -936,7 +972,7 @@ std::shared_ptr Lv2Host::GetPluginInfo(const std::string &uri) co return nullptr; } -Lv2PedalBoard *Lv2Host::CreateLv2PedalBoard(const PedalBoard &pedalBoard) +Lv2PedalBoard *PiPedalHost::CreateLv2PedalBoard(PedalBoard &pedalBoard) { Lv2PedalBoard *pPedalBoard = new Lv2PedalBoard(); try @@ -953,18 +989,18 @@ Lv2PedalBoard *Lv2Host::CreateLv2PedalBoard(const PedalBoard &pedalBoard) struct StateCallbackData { - Lv2Host *pHost; + PiPedalHost *pHost; std::vector *pResult; }; -void Lv2Host::fn_LilvSetPortValueFunc(const char *port_symbol, - void *user_data, - const void *value, - uint32_t size, - uint32_t type) +void PiPedalHost::fn_LilvSetPortValueFunc(const char *port_symbol, + void *user_data, + const void *value, + uint32_t size, + uint32_t type) { StateCallbackData *pData = (StateCallbackData *)user_data; - Lv2Host *pHost = pData->pHost; + PiPedalHost *pHost = pData->pHost; std::vector *pResult = pData->pResult; LV2_URID valueType = (LV2_URID)type; if (valueType != pHost->urids->atom_Float) @@ -974,7 +1010,7 @@ void Lv2Host::fn_LilvSetPortValueFunc(const char *port_symbol, pResult->push_back(ControlValue(port_symbol, *(float *)value)); } -std::vector Lv2Host::LoadFactoryPluginPreset( +std::vector PiPedalHost::LoadFactoryPluginPreset( PedalBoardItem *pedalBoardItem, const std::string &presetUri) { @@ -1032,15 +1068,15 @@ std::vector Lv2Host::LoadFactoryPluginPreset( struct PresetCallbackState { - Lv2Host *pHost; + PiPedalHost *pHost; std::map *values; bool failed = false; }; -void Lv2Host::PortValueCallback(const char *symbol, void *user_data, const void *value, uint32_t size, uint32_t type) +void PiPedalHost::PortValueCallback(const char *symbol, void *user_data, const void *value, uint32_t size, uint32_t type) { PresetCallbackState *pState = static_cast(user_data); - Lv2Host *pHost = pState->pHost; + PiPedalHost *pHost = pState->pHost; if (type == pHost->urids->atom_Float) { @@ -1051,7 +1087,7 @@ void Lv2Host::PortValueCallback(const char *symbol, void *user_data, const void pState->failed = true; } } -PluginPresets Lv2Host::GetFactoryPluginPresets(const std::string &pluginUri) +PluginPresets PiPedalHost::GetFactoryPluginPresets(const std::string &pluginUri) { const LilvPlugins *plugins = lilv_world_get_all_plugins(this->pWorld); @@ -1093,17 +1129,38 @@ PluginPresets Lv2Host::GetFactoryPluginPresets(const std::string &pluginUri) return result; } -Lv2Effect *Lv2Host::CreateEffect(const PedalBoardItem &pedalBoardItem) +IEffect *PiPedalHost::CreateEffect(PedalBoardItem &pedalBoardItem) { + if (pedalBoardItem.uri().starts_with("vst3:")) + { + #if ENABLE_VST3 + try + { + Vst3Effect::Ptr vst3Plugin = this->vst3Host->CreatePlugin(pedalBoardItem, this); + return vst3Plugin.release(); + } + catch (const std::exception &e) + { + Lv2Log::error(std::string("Failed to create VST3 plugin: ") + e.what()); + throw; + } + #else + Lv2Log::error(std::string("VST3 support not enabled at compile time.")); + throw PiPedalException("VST3 support not enabled at compile time, SEE ENABLE_VST3 in CMakeList.txt."); - auto info = this->GetPluginInfo(pedalBoardItem.uri()); - if (!info) - return nullptr; + #endif + } + else + { + auto info = this->GetPluginInfo(pedalBoardItem.uri()); + if (!info) + return nullptr; - return new Lv2Effect(this, info, pedalBoardItem); + return new Lv2Effect(this, info, pedalBoardItem); + } } -Lv2PortGroup::Lv2PortGroup(Lv2Host *lv2Host, const std::string &groupUri) +Lv2PortGroup::Lv2PortGroup(PiPedalHost *lv2Host, const std::string &groupUri) { LilvWorld *pWorld = lv2Host->pWorld; @@ -1131,47 +1188,45 @@ json_map::storage_type Lv2ScalePoint::jmap{{ json_map::reference("label", &Lv2ScalePoint::label_), }}; -json_map::storage_type Lv2PortInfo::jmap{{ - json_map::reference("index", &Lv2PortInfo::index_), - json_map::reference("symbol", &Lv2PortInfo::symbol_), - json_map::reference("index", &Lv2PortInfo::index_), - json_map::reference("name", &Lv2PortInfo::name_), +json_map::storage_type Lv2PortInfo::jmap{{json_map::reference("index", &Lv2PortInfo::index_), + json_map::reference("symbol", &Lv2PortInfo::symbol_), + json_map::reference("index", &Lv2PortInfo::index_), + json_map::reference("name", &Lv2PortInfo::name_), - json_map::reference("min_value", &Lv2PortInfo::min_value_), - json_map::reference("max_value", &Lv2PortInfo::max_value_), - json_map::reference("default_value", &Lv2PortInfo::default_value_), - json_map::reference("classes", &Lv2PortInfo::classes_), + json_map::reference("min_value", &Lv2PortInfo::min_value_), + json_map::reference("max_value", &Lv2PortInfo::max_value_), + json_map::reference("default_value", &Lv2PortInfo::default_value_), + json_map::reference("classes", &Lv2PortInfo::classes_), - json_map::reference("scale_points", &Lv2PortInfo::scale_points_), + json_map::reference("scale_points", &Lv2PortInfo::scale_points_), - json_map::reference("is_input", &Lv2PortInfo::is_input_), - json_map::reference("is_output", &Lv2PortInfo::is_output_), + json_map::reference("is_input", &Lv2PortInfo::is_input_), + json_map::reference("is_output", &Lv2PortInfo::is_output_), - json_map::reference("is_control_port", &Lv2PortInfo::is_control_port_), - json_map::reference("is_audio_port", &Lv2PortInfo::is_audio_port_), - json_map::reference("is_atom_port", &Lv2PortInfo::is_audio_port_), - json_map::reference("is_cv_port", &Lv2PortInfo::is_cv_port_), + json_map::reference("is_control_port", &Lv2PortInfo::is_control_port_), + json_map::reference("is_audio_port", &Lv2PortInfo::is_audio_port_), + json_map::reference("is_atom_port", &Lv2PortInfo::is_audio_port_), + json_map::reference("is_cv_port", &Lv2PortInfo::is_cv_port_), - json_map::reference("is_valid", &Lv2PortInfo::is_valid_), + json_map::reference("is_valid", &Lv2PortInfo::is_valid_), - json_map::reference("supports_midi", &Lv2PortInfo::supports_midi_), - json_map::reference("supports_time_position", &Lv2PortInfo::supports_time_position_), - json_map::reference("port_group", &Lv2PortInfo::port_group_), - json_map::reference("is_logarithmic", &Lv2PortInfo::is_logarithmic_), + json_map::reference("supports_midi", &Lv2PortInfo::supports_midi_), + json_map::reference("supports_time_position", &Lv2PortInfo::supports_time_position_), + json_map::reference("port_group", &Lv2PortInfo::port_group_), + json_map::reference("is_logarithmic", &Lv2PortInfo::is_logarithmic_), - MAP_REF(Lv2PortInfo, is_logarithmic), - MAP_REF(Lv2PortInfo, display_priority), - MAP_REF(Lv2PortInfo, range_steps), - MAP_REF(Lv2PortInfo, trigger), - MAP_REF(Lv2PortInfo, integer_property), - MAP_REF(Lv2PortInfo, enumeration_property), - MAP_REF(Lv2PortInfo, toggled_property), - MAP_REF(Lv2PortInfo, not_on_gui), - MAP_REF(Lv2PortInfo, buffer_type), - MAP_REF(Lv2PortInfo, port_group), - json_map::enum_reference("units", &Lv2PortInfo::units_, get_units_enum_converter()), - MAP_REF(Lv2PortInfo, comment) -}}; + MAP_REF(Lv2PortInfo, is_logarithmic), + MAP_REF(Lv2PortInfo, display_priority), + MAP_REF(Lv2PortInfo, range_steps), + MAP_REF(Lv2PortInfo, trigger), + MAP_REF(Lv2PortInfo, integer_property), + MAP_REF(Lv2PortInfo, enumeration_property), + MAP_REF(Lv2PortInfo, toggled_property), + MAP_REF(Lv2PortInfo, not_on_gui), + MAP_REF(Lv2PortInfo, buffer_type), + MAP_REF(Lv2PortInfo, port_group), + json_map::enum_reference("units", &Lv2PortInfo::units_, get_units_enum_converter()), + MAP_REF(Lv2PortInfo, comment)}}; json_map::storage_type Lv2PortGroup::jmap{{ MAP_REF(Lv2PortGroup, uri), @@ -1197,21 +1252,19 @@ json_map::storage_type Lv2PluginInfo::jmap{{ json_map::reference("has_factory_presets", &Lv2PluginInfo::has_factory_presets_), }}; -json_map::storage_type Lv2PluginUiInfo::jmap{{ - json_map::reference("uri", &Lv2PluginUiInfo::uri_), - json_map::reference("name", &Lv2PluginUiInfo::name_), - json_map::enum_reference("plugin_type", &Lv2PluginUiInfo::plugin_type_, get_plugin_type_enum_converter()), - json_map::reference("plugin_display_type", &Lv2PluginUiInfo::plugin_display_type_), - json_map::reference("author_name", &Lv2PluginUiInfo::author_name_), - json_map::reference("author_homepage", &Lv2PluginUiInfo::author_homepage_), - json_map::reference("audio_inputs", &Lv2PluginUiInfo::audio_inputs_), - json_map::reference("audio_outputs", &Lv2PluginUiInfo::audio_outputs_), - json_map::reference("description", &Lv2PluginUiInfo::description_), - json_map::reference("has_midi_input", &Lv2PluginUiInfo::has_midi_input_), - json_map::reference("has_midi_output", &Lv2PluginUiInfo::has_midi_output_), - json_map::reference("controls", &Lv2PluginUiInfo::controls_), - json_map::reference("port_groups", &Lv2PluginUiInfo::port_groups_), +json_map::storage_type Lv2PluginClass::jmap{{ + MAP_REF(Lv2PluginClass, uri), + MAP_REF(Lv2PluginClass, display_name), + MAP_REF(Lv2PluginClass, parent_uri), + json_map::enum_reference("plugin_type", &Lv2PluginClass::plugin_type_, get_plugin_type_enum_converter()), + MAP_REF(Lv2PluginClass, children), +}}; +json_map::storage_type Lv2PluginUiPortGroup::jmap{{ + MAP_REF(Lv2PluginUiPortGroup, symbol), + MAP_REF(Lv2PluginUiPortGroup, name), + MAP_REF(Lv2PluginUiPortGroup, parent_group), + MAP_REF(Lv2PluginUiPortGroup, program_list_id), }}; json_map::storage_type Lv2PluginUiControlPort::jmap{{ @@ -1234,18 +1287,26 @@ json_map::storage_type Lv2PluginUiControlPort::jmap{{ json_map::enum_reference("units", &Lv2PluginUiControlPort::units_, get_units_enum_converter()), MAP_REF(Lv2PluginUiControlPort, comment), + MAP_REF(Lv2PluginUiControlPort, is_bypass), + MAP_REF(Lv2PluginUiControlPort, is_program_controller), + MAP_REF(Lv2PluginUiControlPort, custom_units), }}; -json_map::storage_type Lv2PluginClass::jmap{{ - MAP_REF(Lv2PluginClass, uri), - MAP_REF(Lv2PluginClass, display_name), - MAP_REF(Lv2PluginClass, parent_uri), - json_map::enum_reference("plugin_type", &Lv2PluginClass::plugin_type_, get_plugin_type_enum_converter()), - MAP_REF(Lv2PluginClass, children), -}}; +json_map::storage_type Lv2PluginUiInfo::jmap{{ + json_map::reference("uri", &Lv2PluginUiInfo::uri_), + json_map::reference("name", &Lv2PluginUiInfo::name_), + json_map::enum_reference("plugin_type", &Lv2PluginUiInfo::plugin_type_, get_plugin_type_enum_converter()), + json_map::reference("plugin_display_type", &Lv2PluginUiInfo::plugin_display_type_), + json_map::reference("author_name", &Lv2PluginUiInfo::author_name_), + json_map::reference("author_homepage", &Lv2PluginUiInfo::author_homepage_), + json_map::reference("audio_inputs", &Lv2PluginUiInfo::audio_inputs_), + json_map::reference("audio_outputs", &Lv2PluginUiInfo::audio_outputs_), + json_map::reference("description", &Lv2PluginUiInfo::description_), + json_map::reference("has_midi_input", &Lv2PluginUiInfo::has_midi_input_), + json_map::reference("has_midi_output", &Lv2PluginUiInfo::has_midi_output_), + json_map::reference("controls", &Lv2PluginUiInfo::controls_), + json_map::reference("port_groups", &Lv2PluginUiInfo::port_groups_), + json_map::reference("is_vst3", &Lv2PluginUiInfo::is_vst3_), -json_map::storage_type Lv2PluginUiPortGroup::jmap{{ - MAP_REF(Lv2PluginUiPortGroup, symbol), - MAP_REF(Lv2PluginUiPortGroup, name), }}; diff --git a/src/Lv2Host.hpp b/src/PiPedalHost.hpp similarity index 71% rename from src/Lv2Host.hpp rename to src/PiPedalHost.hpp index 5d8197c..b29a0b0 100644 --- a/src/Lv2Host.hpp +++ b/src/PiPedalHost.hpp @@ -30,11 +30,15 @@ #include "OptionsFeature.hpp" #include #include +#include #include "lv2.h" #include "Units.hpp" #include "PluginPreset.hpp" +#include "IEffect.hpp" +#include "PiPedalConfiguration.hpp" + namespace pipedal { @@ -42,19 +46,23 @@ namespace pipedal { // forward declarations class Lv2Effect; class Lv2PedalBoard; -class Lv2Host; +class PiPedalHost; class JackConfiguration; class JackChannelSelection; +#ifndef LV2_PROPERTY_GETSET #define LV2_PROPERTY_GETSET(name) \ const decltype(name##_) & name() const { return name##_; }; \ decltype(name##_) & name() { return name##_; }; \ void name(const decltype(name##_) &value) { name##_ = value; }; +#endif +#ifndef LV2_PROPERTY_GETSET_SCALAR #define LV2_PROPERTY_GETSET_SCALAR(name) \ decltype(name##_) name() const { return name##_;}; \ void name(decltype(name##_) value) { name##_ = value; }; +#endif @@ -62,7 +70,7 @@ class JackChannelSelection; class Lv2PluginClass { public: - friend class Lv2Host; + friend class PiPedalHost; private: Lv2PluginClass* parent_ = nullptr; // NOT SERIALIZED! std::string parent_uri_; @@ -72,7 +80,7 @@ private: std::vector> children_; - friend class ::pipedal::Lv2Host; + friend class ::pipedal::PiPedalHost; // hide copy constructor. Lv2PluginClass(const Lv2PluginClass &other) { @@ -135,7 +143,7 @@ public: { return classes_; } - bool is_a(Lv2Host*lv2Plugins,const char*classUri) const; + bool is_a(PiPedalHost*lv2Plugins,const char*classUri) const; static json_map::storage_type jmap; @@ -171,7 +179,7 @@ enum class Lv2BufferType { class Lv2PortInfo { public: - Lv2PortInfo(Lv2Host*lv2Host,const LilvPlugin*pPlugin,const LilvPort *pPort); + Lv2PortInfo(PiPedalHost*lv2Host,const LilvPlugin*pPlugin,const LilvPort *pPort); private: friend class Lv2PluginInfo; @@ -276,7 +284,7 @@ public: public: Lv2PortInfo() { } ~Lv2PortInfo() = default; - bool is_a(Lv2Host*lv2Plugins,const char*classUri); + bool is_a(PiPedalHost*lv2Plugins,const char*classUri); static json_map::storage_type jmap; @@ -294,19 +302,19 @@ public: LV2_PROPERTY_GETSET(name); Lv2PortGroup() { } - Lv2PortGroup(Lv2Host*lv2Host,const std::string &groupUri); + Lv2PortGroup(PiPedalHost*lv2Host,const std::string &groupUri); static json_map::storage_type jmap; }; class Lv2PluginInfo { private: - friend class Lv2Host; + friend class PiPedalHost; public: - Lv2PluginInfo(Lv2Host*lv2Host,const LilvPlugin*); + Lv2PluginInfo(PiPedalHost*lv2Host,const LilvPlugin*); Lv2PluginInfo() { } private: - bool HasFactoryPresets(Lv2Host*lv2Host, const LilvPlugin*plugin); + bool HasFactoryPresets(PiPedalHost*lv2Host, const LilvPlugin*plugin); std::string uri_; std::string name_; std::string plugin_class_; @@ -399,139 +407,151 @@ public: }; - -class Lv2PluginUiControlPort { -public: - Lv2PluginUiControlPort() { - } - Lv2PluginUiControlPort(const Lv2PluginInfo *pPlugin,const Lv2PortInfo*pPort) - : symbol_(pPort->symbol()) - , index_(pPort->index()) - , name_(pPort->name()) - , min_value_(pPort->min_value()) - , max_value_(pPort->max_value()) - , default_value_(pPort->default_value()) - , range_steps_(pPort->range_steps()) - , display_priority_(pPort->display_priority()) - , is_logarithmic_(pPort->is_logarithmic()) - , integer_property_(pPort->integer_property()) - , enumeration_property_(pPort->enumeration_property()) - , toggled_property_(pPort->toggled_property()) - , not_on_gui_(pPort->not_on_gui()) - , scale_points_(pPort->scale_points()) - , comment_(pPort->comment()) - , units_(pPort->units()) + class Lv2PluginUiPortGroup { - // Use symbols to index port groups, instead of uris. - // symbols are guaranteed to be unique. - auto &portGroup = pPort->port_group(); - for (int i = 0; i < pPlugin->port_groups().size(); ++i) + private: + std::string symbol_; + std::string name_; + + std::string parent_group_; + int32_t program_list_id_ = -1; // used by VST3. + public: + LV2_PROPERTY_GETSET(symbol) + LV2_PROPERTY_GETSET(name) + LV2_PROPERTY_GETSET(parent_group) + LV2_PROPERTY_GETSET_SCALAR(program_list_id) + + public: + Lv2PluginUiPortGroup() {} + Lv2PluginUiPortGroup(Lv2PortGroup *pPortGroup) + : symbol_(pPortGroup->symbol()), name_(pPortGroup->name()) + { + } + Lv2PluginUiPortGroup( + const std::string &symbol, const std::string &name, + const std::string &parent_group, int32_t programListId) + : symbol_(symbol),name_(name),parent_group_(parent_group),program_list_id_(programListId) { - auto &p = pPlugin->port_groups()[i]; - if (p->uri() == portGroup) - { - this->port_group_ = p->symbol(); - break; - } - + } - } - } -private: - std::string symbol_; - int index_; - std::string name_; - float min_value_ = 0, max_value_ = 1,default_value_ = 0; - int range_steps_ = 0; - int display_priority_ = -1; - bool is_logarithmic_ = false; - bool integer_property_ = false; - bool enumeration_property_ = false; - bool toggled_property_ = false; - bool not_on_gui_ = false; - std::vector scale_points_; - std::string port_group_; - Units units_ = Units::none; - std::string comment_; -public: - LV2_PROPERTY_GETSET(symbol); - LV2_PROPERTY_GETSET_SCALAR(index); - LV2_PROPERTY_GETSET(name); - LV2_PROPERTY_GETSET_SCALAR(min_value); - LV2_PROPERTY_GETSET_SCALAR(max_value); - LV2_PROPERTY_GETSET_SCALAR(default_value); - LV2_PROPERTY_GETSET_SCALAR(range_steps); - LV2_PROPERTY_GETSET_SCALAR(display_priority); - LV2_PROPERTY_GETSET_SCALAR(is_logarithmic); - LV2_PROPERTY_GETSET_SCALAR(integer_property); - LV2_PROPERTY_GETSET_SCALAR(enumeration_property); - LV2_PROPERTY_GETSET_SCALAR(toggled_property); - LV2_PROPERTY_GETSET_SCALAR(not_on_gui); - LV2_PROPERTY_GETSET(scale_points); - LV2_PROPERTY_GETSET(units); - LV2_PROPERTY_GETSET(comment); + public: + static json_map::storage_type jmap; + }; -public: - static json_map::storage_type jmap; - -}; - -class Lv2PluginUiPortGroup { -private: - std::string symbol_; - std::string name_; -public: - Lv2PluginUiPortGroup() { } - Lv2PluginUiPortGroup(Lv2PortGroup *pPortGroup) - : symbol_(pPortGroup->symbol()) - , name_(pPortGroup->name()) + class Lv2PluginUiControlPort { - } -public: - static json_map::storage_type jmap; + public: + Lv2PluginUiControlPort() + { + } + Lv2PluginUiControlPort(const Lv2PluginInfo *pPlugin, const Lv2PortInfo *pPort) + : symbol_(pPort->symbol()), index_(pPort->index()), name_(pPort->name()), min_value_(pPort->min_value()), max_value_(pPort->max_value()), default_value_(pPort->default_value()), range_steps_(pPort->range_steps()), display_priority_(pPort->display_priority()), is_logarithmic_(pPort->is_logarithmic()), integer_property_(pPort->integer_property()), enumeration_property_(pPort->enumeration_property()), toggled_property_(pPort->toggled_property()), not_on_gui_(pPort->not_on_gui()), scale_points_(pPort->scale_points()), comment_(pPort->comment()), units_(pPort->units()) + { + // Use symbols to index port groups, instead of uris. + // symbols are guaranteed to be unique. + auto &portGroup = pPort->port_group(); + for (int i = 0; i < pPlugin->port_groups().size(); ++i) + { -}; + auto &p = pPlugin->port_groups()[i]; + if (p->uri() == portGroup) + { + this->port_group_ = p->symbol(); + break; + } + } + } -class Lv2PluginUiInfo { -public: - Lv2PluginUiInfo() { } - Lv2PluginUiInfo(Lv2Host *pPlugins,const Lv2PluginInfo *plugin); + private: + std::string symbol_; + int index_; + std::string name_; + float min_value_ = 0, max_value_ = 1, default_value_ = 0; + int range_steps_ = 0; + int display_priority_ = -1; + bool is_logarithmic_ = false; + bool integer_property_ = false; + bool enumeration_property_ = false; + bool toggled_property_ = false; + bool not_on_gui_ = false; + std::vector scale_points_; + std::string port_group_; + Units units_ = Units::none; + std::string comment_; + bool is_bypass_ = false; + bool is_program_controller_ = false; + std::string custom_units_; -private: - std::string uri_; - std::string name_; - std::string author_name_; - std::string author_homepage_; - PluginType plugin_type_; - std::string plugin_display_type_; - int audio_inputs_ = 0; - int audio_outputs_ = 0; - int has_midi_input_ = false; - int has_midi_output_ = false; - std::string description_; + public: + LV2_PROPERTY_GETSET(symbol); + LV2_PROPERTY_GETSET_SCALAR(index); + LV2_PROPERTY_GETSET(name); + LV2_PROPERTY_GETSET(port_group); + LV2_PROPERTY_GETSET_SCALAR(min_value); + LV2_PROPERTY_GETSET_SCALAR(max_value); + LV2_PROPERTY_GETSET_SCALAR(default_value); + LV2_PROPERTY_GETSET_SCALAR(range_steps); + LV2_PROPERTY_GETSET_SCALAR(display_priority); + LV2_PROPERTY_GETSET_SCALAR(is_logarithmic); + LV2_PROPERTY_GETSET_SCALAR(integer_property); + LV2_PROPERTY_GETSET_SCALAR(enumeration_property); + LV2_PROPERTY_GETSET_SCALAR(toggled_property); + LV2_PROPERTY_GETSET_SCALAR(not_on_gui); + LV2_PROPERTY_GETSET(scale_points); + LV2_PROPERTY_GETSET(units); + LV2_PROPERTY_GETSET(comment); + LV2_PROPERTY_GETSET_SCALAR(is_bypass); + LV2_PROPERTY_GETSET_SCALAR(is_program_controller); + LV2_PROPERTY_GETSET(custom_units); - std::vector controls_; - std::vector port_groups_; + public: + static json_map::storage_type jmap; + }; -public: - LV2_PROPERTY_GETSET(uri) - LV2_PROPERTY_GETSET(name) - LV2_PROPERTY_GETSET(author_name) - LV2_PROPERTY_GETSET(author_homepage) - LV2_PROPERTY_GETSET_SCALAR(plugin_type) - LV2_PROPERTY_GETSET(plugin_display_type) - LV2_PROPERTY_GETSET_SCALAR(audio_inputs) - LV2_PROPERTY_GETSET_SCALAR(audio_outputs) - LV2_PROPERTY_GETSET_SCALAR(has_midi_input) - LV2_PROPERTY_GETSET_SCALAR(has_midi_output) - LV2_PROPERTY_GETSET_SCALAR(description) - LV2_PROPERTY_GETSET(port_groups) + class Lv2PluginUiInfo + { + public: + Lv2PluginUiInfo() {} + Lv2PluginUiInfo(PiPedalHost *pPlugins, const Lv2PluginInfo *plugin); + + private: + std::string uri_; + std::string name_; + std::string author_name_; + std::string author_homepage_; + PluginType plugin_type_; + std::string plugin_display_type_; + int audio_inputs_ = 0; + int audio_outputs_ = 0; + int has_midi_input_ = false; + int has_midi_output_ = false; + std::string description_; + bool is_vst3_ = false; + + std::vector controls_; + std::vector port_groups_; + + public: + LV2_PROPERTY_GETSET(uri) + LV2_PROPERTY_GETSET(name) + LV2_PROPERTY_GETSET(author_name) + LV2_PROPERTY_GETSET(author_homepage) + LV2_PROPERTY_GETSET_SCALAR(plugin_type) + LV2_PROPERTY_GETSET(plugin_display_type) + LV2_PROPERTY_GETSET_SCALAR(audio_inputs) + LV2_PROPERTY_GETSET_SCALAR(audio_outputs) + LV2_PROPERTY_GETSET_SCALAR(has_midi_input) + LV2_PROPERTY_GETSET_SCALAR(has_midi_output) + LV2_PROPERTY_GETSET_SCALAR(description) + LV2_PROPERTY_GETSET(controls) + LV2_PROPERTY_GETSET(port_groups) + LV2_PROPERTY_GETSET_SCALAR(is_vst3) + + static json_map::storage_type jmap; + }; - static json_map::storage_type jmap; - -}; class IHost { public: @@ -552,7 +572,7 @@ public: virtual std::shared_ptr GetPluginInfo(const std::string&uri) const = 0; - virtual Lv2Effect*CreateEffect(const PedalBoardItem &pedalBoard) = 0; + virtual IEffect*CreateEffect(PedalBoardItem &pedalBoard) = 0; }; @@ -583,8 +603,24 @@ public: LilvNodePtr&operator=(LilvNode*node) { Free(); this->node = node; return *this;} }; -class Lv2Host: private IHost { +} + +#if ENABLE_VST3 +#include "vst3/Vst3Host.hpp" +#endif + + +namespace pipedal{ + + + + +class PiPedalHost: private IHost { private: +#if ENABLE_VST3 + Vst3Host::Ptr vst3Host; + +#endif static const char *RDFS_COMMENT_URI; class LilvUris { public: @@ -619,6 +655,8 @@ private: }; + bool vst3Enabled = true; + LilvUris lilvUris; LilvNode *get_comment(const std::string &uri); @@ -631,6 +669,8 @@ private: int numberOfAudioOutputChannels = 2; double sampleRate = 0; + std::string vst3CachePath; + LV2_Feature*const*lv2Features = nullptr; MapFeature mapFeature; LogFeature logFeature; @@ -678,17 +718,20 @@ private: } static void PortValueCallback(const char*symbol,void*user_data,const void* value,uint32_t size, uint32_t type); - virtual Lv2Effect*CreateEffect(const PedalBoardItem &pedalBoardItem); + virtual IEffect*CreateEffect(PedalBoardItem &pedalBoardItem); void LoadPluginClassesFromLilv(); void AddJsonClassesToMap(std::shared_ptr pluginClass); public: - Lv2Host(); - virtual ~Lv2Host(); + PiPedalHost(); + + void SetConfiguration(const PiPedalConfiguration&configuration); + + virtual ~PiPedalHost(); IHost* asIHost() { return this;} - virtual Lv2PedalBoard * CreateLv2PedalBoard(const PedalBoard& pedalBoard); + virtual Lv2PedalBoard * CreateLv2PedalBoard(PedalBoard& pedalBoard); void setSampleRate(double sampleRate) { @@ -719,7 +762,7 @@ public: void LoadPluginClassesFromJson(std::filesystem::path jsonFile); - void Load(const char*lv2Path = Lv2Host::DEFAULT_LV2_PATH); + void Load(const char*lv2Path = PiPedalHost::DEFAULT_LV2_PATH); virtual LV2_URID GetLv2Urid(const char*uri) { return this->mapFeature.GetUrid(uri); @@ -736,5 +779,5 @@ public: }; #undef LV2_PROPERTY_GETSET - +#undef LV2_PROPERTY_GETSET_SCALAR } // namespace pipedal. \ No newline at end of file diff --git a/src/PiPedalModel.cpp b/src/PiPedalModel.cpp index 60a14fc..c2abee5 100644 --- a/src/PiPedalModel.cpp +++ b/src/PiPedalModel.cpp @@ -43,9 +43,18 @@ T &constMutex(const T &mutex) return const_cast(mutex); } -std::string AtomToJson(int length, uint8_t *pData) +static const char *hexChars = "0123456789ABCDEF"; + +static std::string BytesToHex(const std::vector &bytes) { - return ""; + std::stringstream s; + + for (size_t i = 0; i < bytes.size(); ++i) + { + uint8_t b = bytes[i]; + s << hexChars[(b >> 4) & 0x0F] << hexChars[b & 0x0F]; + } + return s.str(); } PiPedalModel::PiPedalModel() @@ -119,6 +128,7 @@ PiPedalModel::~PiPedalModel() void PiPedalModel::Init(const PiPedalConfiguration &configuration) { this->configuration = configuration; + lv2Host.SetConfiguration(configuration); storage.SetConfigRoot(configuration.GetDocRoot()); storage.SetDataRoot(configuration.GetLocalStoragePath()); storage.Initialize(); @@ -282,7 +292,17 @@ void PiPedalModel::RemoveNotificationSubsription(IPiPedalModelSubscriber *pSubsc void PiPedalModel::PreviewControl(int64_t clientId, int64_t pedalItemId, const std::string &symbol, float value) { - jackHost->SetControlValue(pedalItemId, symbol, value); + IEffect* effect = lv2PedalBoard->GetEffect(pedalItemId); + if (effect->IsVst3()) + { + int index = lv2PedalBoard->GetControlIndex(pedalItemId, symbol); + if (index != -1) + { + effect->SetControl(index,value);; + } + } else { + jackHost->SetControlValue(pedalItemId, symbol, value); + } } void PiPedalModel::SetControl(int64_t clientId, int64_t pedalItemId, const std::string &symbol, float value) @@ -291,6 +311,8 @@ void PiPedalModel::SetControl(int64_t clientId, int64_t pedalItemId, const std:: std::lock_guard guard(mutex); PreviewControl(clientId, pedalItemId, symbol, value); this->pedalBoard.SetControlValue(pedalItemId, symbol, value); + IEffect *pEffect = this->lv2PedalBoard->GetEffect(pedalItemId); + { // take a snapshot incase a client unsusbscribes in the notification handler (in which case the mutex won't protect us) @@ -300,9 +322,11 @@ void PiPedalModel::SetControl(int64_t clientId, int64_t pedalItemId, const std:: t[i] = this->subscribers[i]; } size_t n = this->subscribers.size(); - for (size_t i = 0; i < n; ++i) { - t[i]->OnControlChanged(clientId, pedalItemId, symbol, value); + for (size_t i = 0; i < n; ++i) + { + t[i]->OnControlChanged(clientId, pedalItemId, symbol, value); + } } delete[] t; @@ -379,6 +403,23 @@ void PiPedalModel::SetPedalBoard(int64_t clientId, PedalBoard &pedalBoard) this->SetPresetChanged(clientId, true); } } +void PiPedalModel::UpdateCurrentPedalBoard(int64_t clientId, PedalBoard &pedalBoard) +{ + { + std::lock_guard guard(mutex); + + // update vst3 presets if neccessary. + // the pedalboard must be a manipualted instance of the current Lv2Pedalboard. + + UpdateVst3Settings(pedalBoard); + + this->pedalBoard = pedalBoard; + UpdateDefaults(&this->pedalBoard); + + this->FirePedalBoardChanged(clientId); + this->SetPresetChanged(clientId, true); + } +} void PiPedalModel::SetPedalBoardItemEnable(int64_t clientId, int64_t pedalItemId, bool enabled) { @@ -475,10 +516,35 @@ void PiPedalModel::FirePluginPresetsChanged(const std::string &pluginUri) } } +void PiPedalModel::UpdateVst3Settings(PedalBoard &pedalBoard) +{ + // get the vst3 state bundle from lv2Pedalboard for the current pedalBoard. +#if ENABLE_VST3 + PedalBoard pb; + for (IEffect *effect : lv2PedalBoard->GetEffects()) + { + if (effect->IsVst3()) + { + PedalBoardItem *item = pedalBoard.GetItem(effect->GetInstanceId()); + if (item) + { + Vst3Effect *vst3Effect = (Vst3Effect *)effect; + std::vector state; + if (vst3Effect->GetState(&state)) + { + item->vstState(BytesToHex(state)); + } + } + } + } +#endif +} + void PiPedalModel::SaveCurrentPreset(int64_t clientId) { std::lock_guard guard{mutex}; + UpdateVst3Settings(this->pedalBoard); storage.SaveCurrentPreset(this->pedalBoard); this->SetPresetChanged(clientId, false); } @@ -517,6 +583,7 @@ int64_t PiPedalModel::SaveCurrentPresetAs(int64_t clientId, const std::string &n std::lock_guard guard{mutex}; auto pedalboard = this->pedalBoard; + UpdateVst3Settings(pedalBoard); pedalboard.name(name); int64_t result = storage.SaveCurrentPresetAs(pedalboard, name, saveAfterInstanceId); FirePresetsChanged(clientId); @@ -697,14 +764,13 @@ void PiPedalModel::SetWifiConfigSettings(const WifiConfigSettings &wifiConfigSet } } - static std::string GetP2pdName() { std::string name = "/etc/pipedal/config/pipedal_p2pd.conf"; std::string result; - if (ConfigUtil::GetConfigLine(name,"p2p_device_name",&result)) + if (ConfigUtil::GetConfigLine(name, "p2p_device_name", &result)) { return result; } @@ -718,17 +784,15 @@ void PiPedalModel::UpdateDnsSd() ServiceConfiguration deviceIdFile; deviceIdFile.Load(); - std::string p2pdName = GetP2pdName(); - if (p2pdName != "") { + if (p2pdName != "") + { deviceIdFile.deviceName = p2pdName; } if (deviceIdFile.deviceName != "" && deviceIdFile.uuid != "") { avahiService.Announce(webPort, deviceIdFile.deviceName, deviceIdFile.uuid, "pipedal"); - - } else { @@ -820,16 +884,16 @@ void PiPedalModel::RestartAudio() this->jackHost->Close(); } - // restarting is a bit dodgy. It was impossible with Jack, but - // now very plausible with the ALSA audio stack. + // restarting is a bit dodgy. It was impossible with Jack, but + // now very plausible with the ALSA audio stack. - // Still bugs wrt/ restarting the circular buffers for the audio thread. + // Still bugs wrt/ restarting the circular buffers for the audio thread. - // for the meantime, just rely on the fact that the admin service will restart - // the process. - //... + // for the meantime, just rely on the fact that the admin service will restart + // the process. + //... - // do a complete reload. + // do a complete reload. this->jackHost->SetPedalBoard(nullptr); @@ -839,14 +903,14 @@ void PiPedalModel::RestartAudio() { JackChannelSelection selection = storage.GetJackChannelSelection(jackConfiguration); selection = selection.RemoveInvalidChannels(jackConfiguration); - - } else { + } + else + { jackConfiguration.SetErrorStatus("Error"); } FireJackConfigurationChanged(jackConfiguration); - if (!jackServerSettings.IsValid() || !jackConfiguration.isValid()) { Lv2Log::error("Audio configuration not valid."); @@ -1223,12 +1287,11 @@ void PiPedalModel::SetJackServerSettings(const JackServerSettings &jackServerSet } delete[] t; - #if ALSA_HOST storage.SetJackServerSettings(jackServerSettings); FireJackConfigurationChanged(this->jackConfiguration); - + guard.unlock(); RestartAudio(); @@ -1280,7 +1343,6 @@ void PiPedalModel::SetJackServerSettings(const JackServerSettings &jackServerSet #endif } }); - } #endif } diff --git a/src/PiPedalModel.hpp b/src/PiPedalModel.hpp index dd2a7cc..3e1b3ae 100644 --- a/src/PiPedalModel.hpp +++ b/src/PiPedalModel.hpp @@ -19,7 +19,7 @@ #pragma once #include -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include "GovernorSettings.hpp" #include "PedalBoard.hpp" #include "Storage.hpp" @@ -52,6 +52,7 @@ public: virtual int64_t GetClientId() = 0; virtual void OnItemEnabledChanged(int64_t clientId, int64_t pedalItemId, bool enabled) = 0; virtual void OnControlChanged(int64_t clientId, int64_t pedalItemId, const std::string &symbol, float value) = 0; + virtual void OnVst3ControlChanged(int64_t clientId, int64_t pedalItemId, const std::string &symbol, float value, const std::string&state) = 0; virtual void OnPedalBoardChanged(int64_t clientId, const PedalBoard &pedalBoard) = 0; virtual void OnPresetsChanged(int64_t clientId, const PresetIndex&presets) = 0; virtual void OnPluginPresetsChanged(const std::string&pluginUri) = 0; @@ -104,7 +105,7 @@ private: std::vector atomOutputListeners; JackServerSettings jackServerSettings; - Lv2Host lv2Host; + PiPedalHost lv2Host; PedalBoard pedalBoard; Storage storage; bool hasPresetChanged = false; @@ -155,6 +156,7 @@ private: // IJackHostCallbacks virtual void OnNotifyMidiListen(bool isNote, uint8_t noteOrControl); virtual void OnNotifyAtomOutput(uint64_t instanceId, const std::string&atomType,const std::string&atomJson); + void UpdateVst3Settings(PedalBoard&pedalBoard); PiPedalConfiguration configuration; public: @@ -173,7 +175,7 @@ public: void LoadLv2PluginInfo(); void Load(); - const Lv2Host& GetLv2Host() const { return lv2Host; } + const PiPedalHost& GetLv2Host() const { return lv2Host; } PedalBoard GetCurrentPedalBoardCopy() { std::lock_guard guard(mutex); @@ -191,6 +193,8 @@ public: void SetControl(int64_t clientId,int64_t pedalItemId, const std::string&symbol,float value); void PreviewControl(int64_t clientId,int64_t pedalItemId, const std::string&symbol,float value); void SetPedalBoard(int64_t clientId,PedalBoard &pedalBoard); + void UpdateCurrentPedalBoard(int64_t clientId, PedalBoard &pedalBoard); + void GetPresets(PresetIndex*pResult); PedalBoard GetPreset(int64_t instanceId); diff --git a/src/PiPedalSocket.cpp b/src/PiPedalSocket.cpp index bc4bf46..d058eea 100644 --- a/src/PiPedalSocket.cpp +++ b/src/PiPedalSocket.cpp @@ -277,18 +277,18 @@ JSON_MAP_REFERENCE(PedalBoardItemEnabledBody, instanceId) JSON_MAP_REFERENCE(PedalBoardItemEnabledBody, enabled) JSON_MAP_END() -class SetCurrentPedalBoardBody +class UpdateCurrentPedalBoardBody { public: int64_t clientId_ = -1; PedalBoard pedalBoard_; - DECLARE_JSON_MAP(SetCurrentPedalBoardBody); + DECLARE_JSON_MAP(UpdateCurrentPedalBoardBody); }; -JSON_MAP_BEGIN(SetCurrentPedalBoardBody) -JSON_MAP_REFERENCE(SetCurrentPedalBoardBody, clientId) -JSON_MAP_REFERENCE(SetCurrentPedalBoardBody, pedalBoard) +JSON_MAP_BEGIN(UpdateCurrentPedalBoardBody) +JSON_MAP_REFERENCE(UpdateCurrentPedalBoardBody, clientId) +JSON_MAP_REFERENCE(UpdateCurrentPedalBoardBody, pedalBoard) JSON_MAP_END() class ChannelSelectionChangedBody @@ -335,6 +335,26 @@ JSON_MAP_REFERENCE(ControlChangedBody, symbol) JSON_MAP_REFERENCE(ControlChangedBody, value) JSON_MAP_END() +class Vst3ControlChangedBody +{ +public: + int64_t clientId_; + int64_t instanceId_; + std::string symbol_; + float value_; + std::string state_; + + DECLARE_JSON_MAP(Vst3ControlChangedBody); +}; +JSON_MAP_BEGIN(Vst3ControlChangedBody) +JSON_MAP_REFERENCE(Vst3ControlChangedBody, clientId) +JSON_MAP_REFERENCE(Vst3ControlChangedBody, instanceId) +JSON_MAP_REFERENCE(Vst3ControlChangedBody, symbol) +JSON_MAP_REFERENCE(Vst3ControlChangedBody, value) +JSON_MAP_REFERENCE(Vst3ControlChangedBody, state) +JSON_MAP_END() + + class PiPedalSocketHandler : public SocketHandler, public IPiPedalModelSubscriber { private: @@ -940,13 +960,13 @@ public: pReader->read(&body); model.SetPedalBoardItemEnable(body.clientId_, body.instanceId_, body.enabled_); } - else if (message == "setCurrentPedalBoard") + else if (message == "updateCurrentPedalBoard") { { - SetCurrentPedalBoardBody body; + UpdateCurrentPedalBoardBody body; pReader->read(&body); - this->model.SetPedalBoard(body.clientId_, body.pedalBoard_); + this->model.UpdateCurrentPedalBoard(body.clientId_, body.pedalBoard_); } } else if (message == "currentPedalBoard") @@ -1377,6 +1397,17 @@ public: } } + virtual void OnVst3ControlChanged(int64_t clientId, int64_t instanceId, const std::string &key, float value, const std::string &state) + { + Vst3ControlChangedBody body; + body.clientId_ = clientId; + body.instanceId_ = instanceId; + body.symbol_ = key; + body.value_ = value; + body.state_ = state; + Send("onVst3ControlChanged", body); + } + virtual void OnControlChanged(int64_t clientId, int64_t instanceId, const std::string &key, float value) { ControlChangedBody body; @@ -1544,7 +1575,7 @@ public: virtual void OnPedalBoardChanged(int64_t clientId, const PedalBoard &pedalBoard) { - SetCurrentPedalBoardBody body; + UpdateCurrentPedalBoardBody body; body.clientId_ = clientId; body.pedalBoard_ = pedalBoard; Send("onPedalBoardChanged", body); diff --git a/src/RtInversionGuard.hpp b/src/RtInversionGuard.hpp new file mode 100644 index 0000000..295b9eb --- /dev/null +++ b/src/RtInversionGuard.hpp @@ -0,0 +1,69 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include "ss.hpp" +#include "Lv2Log.hpp" + +namespace pipedal +{ + + constexpr int RT_THREAD_PRIORITY = 80; + /** + * @brief RAII Priority boost to avoid Rt-thread priority inversion + * Boosts current thread to realtime priority for the duration of the current scope. + * Do this before acquiring a mutex that the RT thread might block on. + * + */ + + class RtInversionGuard + { + private: + int currentScheduler; + struct sched_param currentPriority; + ; + + public: + RtInversionGuard() + { + currentScheduler = sched_getscheduler(0); + sched_getparam(0, ¤tPriority); + + struct sched_param param; + memset(¶m, 0, sizeof(param)); + param.sched_priority = RT_THREAD_PRIORITY; + + int result = sched_setscheduler(0, SCHED_RR, ¶m); + if (result != 0) + { + Lv2Log::error(SS("Failed to set ALSA AudioThread priority. (" << strerror(result) << ")")); + } + } + ~RtInversionGuard() + { + sched_setscheduler(0, currentScheduler, ¤tPriority); + } + }; +} \ No newline at end of file diff --git a/src/SplitEffect.cpp b/src/SplitEffect.cpp index d666cfd..4ad5524 100644 --- a/src/SplitEffect.cpp +++ b/src/SplitEffect.cpp @@ -20,7 +20,7 @@ #include "pch.h" #include "SplitEffect.hpp" -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include "PedalBoard.hpp" using namespace pipedal; diff --git a/src/SplitEffect.hpp b/src/SplitEffect.hpp index 5adb299..cc51c5a 100644 --- a/src/SplitEffect.hpp +++ b/src/SplitEffect.hpp @@ -22,6 +22,7 @@ #include "IEffect.hpp" #include "PiPedalException.hpp" #include "PiPedalMath.hpp" +#include namespace pipedal { @@ -60,6 +61,18 @@ namespace pipedal class SplitEffect : public IEffect { private: + + + virtual void SetAudioInputBuffer(int index, float *buffer) + { + assert(false); // not used. + } + virtual void Run(uint32_t samples, RealtimeRingBufferWriter *realtimeRingBufferWriter) + { + assert(false); // not used. + } + + const double MIX_TRANSITION_TIME_S = 0.1; double sampleRate; std::vector inputs; @@ -283,6 +296,8 @@ namespace pipedal virtual std::string AtomToJson(uint8_t *pAtom) { return ""; } virtual std::string GetAtomObjectType(uint8_t*pData) { return "not implemented";} + virtual bool IsVst3() const { return false; } + public: SplitEffect( uint64_t instanceId, @@ -297,7 +312,7 @@ namespace pipedal } - virtual long GetInstanceId() const + virtual uint64_t GetInstanceId() const { return instanceId; } diff --git a/src/Units.hpp b/src/Units.hpp index 01db7fb..2dfe5d0 100644 --- a/src/Units.hpp +++ b/src/Units.hpp @@ -44,6 +44,7 @@ enum class Units { pc, s, semitone12TET, + custom }; diff --git a/src/Vst3Effect.cpp b/src/Vst3Effect.cpp new file mode 100644 index 0000000..e0a2ccd --- /dev/null +++ b/src/Vst3Effect.cpp @@ -0,0 +1,885 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "ss.hpp" +#include +#include "PiPedalHost.hpp" + +#include "vst3/Vst3Host.hpp" +#include "Lv2Log.hpp" +#include +#include +#include +#include + +#include "RingBufferReader.hpp" + +#include "public.sdk/source/vst/hosting/module.h" +#include "public.sdk/source/vst/hosting/hostclasses.h" +#include "public.sdk/source/vst/hosting/plugprovider.h" +#include "public.sdk/source/common/memorystream.h" +#include "pluginterfaces/vst/ivsteditcontroller.h" +#include "pluginterfaces/vst/ivstaudioprocessor.h" +#include "pluginterfaces/vst/ivstunits.h" +#include "public.sdk/source/vst/utility/stringconvert.h" +#include "public.sdk/source/vst/hosting/eventlist.h" +#include "public.sdk/source/vst/hosting/parameterchanges.h" +#include "public.sdk/source/vst/hosting/processdata.h" +#include "pluginterfaces/vst/ivstaudioprocessor.h" +#include "pluginterfaces/vst/ivstmidicontrollers.h" + +#include "public.sdk/samples/vst-hosting/audiohost/source/media/iparameterclient.h" +#include "public.sdk/samples/vst-hosting/audiohost/source/media/imediaserver.h" + +#include + +#include +#include "LiteralVersion.hpp" + +#include "Vst3MidiToEvent.hpp" + +#include "vst3/Vst3EffectImpl.hpp" +#include "PiPedalHost.hpp" + +using namespace pipedal; + +std::unique_ptr Vst3Effect::CreateInstance(uint64_t instanceId, const Vst3PluginInfo &info, IHost *pHost) +{ + std::unique_ptr result = std::make_unique(); + + result->Load(instanceId, info, pHost); + + return std::move(result); +} + +static double NaNGuard(double value) +{ + if (std::isnan(value)) return 0; + if (std::isinf(value)) return 0; + return value; +} + +static uint32_t GetRefCount(FUnknown *p) +{ + p->addRef(); + return p->release(); +} + +//------------------------------------------------------------------------ +// From Vst2Wrapper +static MidiCCMapping initMidiCtrlerAssignment(IComponent *component, IMidiMapping *midiMapping) +{ + MidiCCMapping midiCCMapping{}; + + if (!midiMapping || !component) + return midiCCMapping; + + int32 busses = std::min(component->getBusCount(kEvent, kInput), kMaxMidiMappingBusses); + + if (midiCCMapping[0][0].empty()) + { + for (int32 b = 0; b < busses; b++) + for (int32 i = 0; i < kMaxMidiChannels; i++) + midiCCMapping[b][i].resize(Vst::kCountCtrlNumber); + } + + ParamID paramID; + for (int32 b = 0; b < busses; b++) + { + for (int16 ch = 0; ch < kMaxMidiChannels; ch++) + { + for (int32 i = 0; i < Vst::kCountCtrlNumber; i++) + { + paramID = kNoParamId; + if (midiMapping->getMidiControllerAssignment(b, ch, (CtrlNumber)i, paramID) == + kResultTrue) + { + // TODO check if tag is associated to a parameter + midiCCMapping[b][ch][i] = paramID; + } + else + midiCCMapping[b][ch][i] = kNoParamId; + } + } + } + return midiCCMapping; +} + +//------------------------------------------------------------------------ +static void assignBusBuffers(const IAudioClient::Buffers &buffers, HostProcessData &processData, + bool unassign = false) +{ + // Set outputs + auto bufferIndex = 0; + for (auto busIndex = 0; busIndex < processData.numOutputs; busIndex++) + { + auto channelCount = processData.outputs[busIndex].numChannels; + for (auto chanIndex = 0; chanIndex < channelCount; chanIndex++) + { + if (bufferIndex < buffers.numOutputs) + { + processData.setChannelBuffer(BusDirections::kOutput, busIndex, chanIndex, + unassign ? nullptr : buffers.outputs[bufferIndex]); + bufferIndex++; + } + } + } + + // Set inputs + bufferIndex = 0; + for (auto busIndex = 0; busIndex < processData.numInputs; busIndex++) + { + auto channelCount = processData.inputs[busIndex].numChannels; + for (auto chanIndex = 0; chanIndex < channelCount; chanIndex++) + { + if (bufferIndex < buffers.numInputs) + { + processData.setChannelBuffer(BusDirections::kInput, busIndex, chanIndex, + unassign ? nullptr : buffers.inputs[bufferIndex]); + + bufferIndex++; + } + } + } +} + +//------------------------------------------------------------------------ +static void unassignBusBuffers(const IAudioClient::Buffers &buffers, HostProcessData &processData) +{ + assignBusBuffers(buffers, processData, true); +} + +//------------------------------------------------------------------------ +// Vst3Processor +//------------------------------------------------------------------------ +Vst3EffectImpl::Vst3EffectImpl() +{ + buffers.inputs = nullptr; + buffers.outputs = nullptr; + componentHandler.setEffect(this); +} + +//------------------------------------------------------------------------ +Vst3EffectImpl::~Vst3EffectImpl() +{ + delete[] buffers.inputs; + delete[] buffers.outputs; + terminate(); +} + +//------------------------------------------------------------------------ + +void Vst3EffectImpl::SetControl(int index, float value) +{ + this->parameterValues[index] = value; + ParamID paramId = lv2ToVstParam[index]; + + double normalizedValue = controller->plainParamToNormalized(paramId, value); + this->controller->setParamNormalized(paramId, normalizedValue); + + { + RtInversionGuard inversionGuard; // boost priority to prevent priority inversion. + std::lock_guard guard{parameterMutex}; + + paramTransferrer.addChange(paramId, normalizedValue, 0); + } + if (!isProcessing) + { + Run(0, nullptr); // pump parameter changes on UI thread. + } +} + +void Vst3EffectImpl::Load(uint64_t instanceId, const Vst3PluginInfo &info, IHost *pHost) +{ + processContext = {}; + processContext.tempo = 120; + + + this->pHost = pHost; + this->instanceId = instanceId; + this->info = info; + + size_t nControls = info.pluginInfo_.controls().size(); + + inputParameterChanges.setMaxParameters(nControls); + outputParameterChanges.setMaxParameters(nControls); + + lv2ToVstParam.resize(nControls); + parameterValues.resize(nControls); + for (size_t i = 0; i < nControls; ++i) + { + const auto &control = info.pluginInfo_.controls()[i]; + ParamID paramId; + std::stringstream ss(control.symbol()); + ss >> paramId; + + assert(i == control.index()); + + lv2ToVstParam[control.index()] = paramId; + + parameterValues[control.index()] = control.default_value(); + if (control.is_bypass()) + { + bypassControl = i; + } + } + + std::string error; + this->module = Module::create(info.filePath_, error); + + if (!module) + { + throw Vst3Exception(SS("Vst3 load failed: " << error << "(" << info.filePath_ << ")")); + } + const PluginFactory &factory = module->getFactory(); + + ClassInfo myClassInfo; + bool foundClassInfo = false; + + VST3::Optional myUid = VST3::UID::fromString(info.uid_); + + if (!myUid) + { + throw Vst3Exception(SS("Invalid UID")); + } + for (const ClassInfo &classInfo : factory.classInfos()) + { + if (classInfo.category() == kVstAudioEffectClass && + classInfo.ID() == *myUid) + { + myClassInfo = classInfo; + foundClassInfo = true; + } + } + if (!foundClassInfo) + { + throw Vst3Exception(SS("Vst3 load failed: effect class not found in " << info.filePath_)); + } + + plugProvider = owned(NEW PlugProvider(factory, myClassInfo, true)); + + this->component = plugProvider->getComponent(); + this->processor = component; + + this->controller = plugProvider->getController(); + controller->queryInterface(IMidiMapping::iid, (void **)&midiMapping); + + paramTransferrer.setMaxParameters(1000); + if (midiMapping) + midiCCMapping = initMidiCtrlerAssignment(component, midiMapping); + + setBlockSize((Steinberg::int32)pHost->GetMaxAudioBufferSize()); + setSamplerate((SampleRate)pHost->GetSampleRate()); + + ProcessSetup setup{kRealtime, kSample32, blockSize, sampleRate}; + + initProcessData(); + + if (processor->setupProcessing(setup) != kResultOk) + { + throw Vst3Exception(SS(info.pluginInfo_.name() << ": setupProcessing() failed.")); + } + + if (component->setActive(true) != kResultOk) + throw Vst3Exception(SS(info.pluginInfo_.name() << ": setActive() failed.")); + + OPtr state = new MemoryStream(); + + assert(GetRefCount(state.get()) == 1); + this->supportsState = false; + if (component->getState(state) == kResultOk) + { + this->supportsState = true; + state->seek(0, IBStream::kIBSeekSet); + controller->setComponentState(state); + refreshControlValues(); + } + IComponentHandler *handler; + + controller->setComponentHandler(&componentHandler); + + paramTransferrer.setMaxParameters(1000); + + if (midiMapping) + midiCCMapping = initMidiCtrlerAssignment(component, midiMapping); + + component->setActive(true); + + for (size_t i = 0; i < this->lv2ToVstParam.size(); ++i) + { + fireControlChanged(i, (float)(controller->getParamNormalized(lv2ToVstParam[i]))); + } +} +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ +// void Vst3PluginImpl::createLocalMediaServer (const Name& name) +// { +// mediaServer = createMediaServer (name); +// mediaServer->registerAudioClient (this); +// mediaServer->registerMidiClient (this); +// } + +//------------------------------------------------------------------------ + +//------------------------------------------------------------------------ +void Vst3EffectImpl::terminate() +{ + // mediaServer = nullptr; + + if (!processor) + return; + + processor->setProcessing(false); + component->setActive(false); +} + +//------------------------------------------------------------------------ +void Vst3EffectImpl::initProcessData() +{ + // processData.prepare will be done in setBlockSize + + buffers.numInputs = info.pluginInfo_.audio_inputs(); + buffers.numOutputs = info.pluginInfo_.audio_outputs(); + buffers.numSamples = 0; + buffers.inputs = new float *[buffers.numInputs + 1]; + buffers.outputs = new float *[buffers.numOutputs + 1]; + + for (size_t i = 0; i < buffers.numInputs + 1; ++i) + { + buffers.inputs[i] = nullptr; + } + for (size_t i = 0; i < buffers.numOutputs + 1; ++i) + { + buffers.outputs[i] = nullptr; + } + + processData.inputEvents = &eventList; + processData.inputParameterChanges = &inputParameterChanges; + processData.outputParameterChanges = &outputParameterChanges; + processData.processContext = &processContext; + + setSamplerate(pHost->GetSampleRate()); + setBlockSize((Steinberg::int32)pHost->GetMaxAudioBufferSize()); +} + +//------------------------------------------------------------------------ +IMidiClient::IOSetup Vst3EffectImpl::getMidiIOSetup() const +{ + IMidiClient::IOSetup iosetup; + auto count = component->getBusCount(MediaTypes::kEvent, BusDirections::kInput); + for (int32_t i = 0; i < count; i++) + { + BusInfo info; + if (component->getBusInfo(MediaTypes::kEvent, BusDirections::kInput, i, info) != kResultOk) + continue; + + auto busName = VST3::StringConvert::convert(info.name, 128); + iosetup.inputs.push_back(busName); + } + + count = component->getBusCount(MediaTypes::kEvent, BusDirections::kOutput); + for (int32_t i = 0; i < count; i++) + { + BusInfo info; + if (component->getBusInfo(MediaTypes::kEvent, BusDirections::kOutput, i, info) != + kResultOk) + continue; + + auto busName = VST3::StringConvert::convert(info.name, 128); + iosetup.outputs.push_back(busName); + } + + return iosetup; +} + +//------------------------------------------------------------------------ +IAudioClient::IOSetup Vst3EffectImpl::getIOSetup() const +{ + IAudioClient::IOSetup iosetup; + auto count = component->getBusCount(MediaTypes::kAudio, BusDirections::kOutput); + for (int32_t i = 0; i < count; i++) + { + BusInfo info; + if (component->getBusInfo(MediaTypes::kAudio, BusDirections::kOutput, i, info) != + kResultOk) + continue; + + for (int32_t j = 0; j < info.channelCount; j++) + { + auto channelName = VST3::StringConvert::convert(info.name, 128); + iosetup.outputs.push_back(channelName + " " + std::to_string(j)); + } + } + + count = component->getBusCount(MediaTypes::kAudio, BusDirections::kInput); + for (int32_t i = 0; i < count; i++) + { + BusInfo info; + if (component->getBusInfo(MediaTypes::kAudio, BusDirections::kInput, i, info) != kResultOk) + continue; + + for (int32_t j = 0; j < info.channelCount; j++) + { + auto channelName = VST3::StringConvert::convert(info.name, 128); + iosetup.inputs.push_back(channelName + " " + std::to_string(j)); + } + } + + return iosetup; +} + +//------------------------------------------------------------------------ +void Vst3EffectImpl::preprocess(Buffers &buffers, int64_t continousFrames) +{ + processData.numSamples = buffers.numSamples; + processContext.continousTimeSamples = continousFrames; + assignBusBuffers(buffers, processData); + + { + std::lock_guard guard{parameterMutex}; + + paramTransferrer.transferChangesTo(inputParameterChanges); + } + outputParameterChanges.clearQueue(); +} + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::process(Buffers &buffers, int64_t continousFrames) +{ + if (!processor || !isProcessing) + return false; + buffers.numSamples = continousFrames; + preprocess(buffers, continousFrames); + + if (processor->process(processData) != kResultOk) + return false; + + postprocess(buffers); + + return true; +} +//------------------------------------------------------------------------ +void Vst3EffectImpl::postprocess(Buffers &buffers) +{ + eventList.clear(); + inputParameterChanges.clearQueue(); + unassignBusBuffers(buffers, processData); +} + +void Vst3EffectImpl::SendControlChanges(RealtimeRingBufferWriter *realtimeRingBufferWriter) +{ + for (auto i = 0; i < outputParameterChanges.getParameterCount(); ++i) + { + IParamValueQueue *queue = outputParameterChanges.getParameterData(i); + auto points = queue->getPointCount(); + if (points != 0) + { + Steinberg::Vst::ParamValue value; + Steinberg::int32 sampleOffset; + queue->getPoint(points - 1, sampleOffset, value); + + auto paramId = queue->getParameterId(); + + int thisControlId = -1; + for (size_t lv2Id = 0; lv2Id < this->lv2ToVstParam.size(); ++lv2Id) + { + if (lv2ToVstParam[lv2Id] == paramId) + { + thisControlId = (int)lv2Id; + break; + } + } + if (thisControlId != -1) + { + // realtimeRingBufferWriter->NotifyVst3ControlValue(this->instanceId,thisControlId,(float)value); + } + } + } +} + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::setSamplerate(SampleRate value) +{ + if (sampleRate == value) + return true; + + sampleRate = value; + processContext.sampleRate = sampleRate; + if (blockSize == 0) + return true; + return true; +} + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::setBlockSize(int32 value) +{ + blockSize = value; + if (sampleRate == 0) + return true; + + processData.prepare(*component, blockSize, kSample32); + return true; +} + +//------------------------------------------------------------------------ + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::isPortInRange(int32 port, int32 channel) const +{ + return port < kMaxMidiMappingBusses && !midiCCMapping[port][channel].empty(); +} + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::processVstEvent(const IMidiClient::Event &event, int32 port) +{ + auto vstEvent = midiToEvent(event.type, event.channel, event.data0, event.data1); + if (vstEvent) + { + vstEvent->busIndex = port; + if (eventList.addEvent(*vstEvent) != kResultOk) + { + assert(false && "Event was not added to EventList!"); + } + + return true; + } + + return false; +} + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::processParamChange(const IMidiClient::Event &event, int32 port) +{ + auto paramMapping = [port, this](int32 channel, MidiData data1) -> ParamID + { + if (!isPortInRange(port, channel)) + return kNoParamId; + + return midiCCMapping[port][channel][data1]; + }; + + auto paramChange = + midiToParameter(event.type, event.channel, event.data0, event.data1, paramMapping); + if (paramChange) + { + int32 index = 0; + IParamValueQueue *queue = + inputParameterChanges.addParameterData((*paramChange).first, index); + if (queue) + { + if (queue->addPoint(event.timestamp, (*paramChange).second, index) != kResultOk) + { + assert(false && "Parameter point was not added to ParamValueQueue!"); + } + } + + return true; + } + + return false; +} + +//------------------------------------------------------------------------ +bool Vst3EffectImpl::onEvent(const IMidiClient::Event &event, int32_t port) +{ + // Try to create Event first. + if (processVstEvent(event, port)) + return true; + + // In case this is no event it must be a parameter. + if (processParamChange(event, port)) + return true; + + // TODO: Something else??? + + return true; +} + +//------------------------------------------------------------------------ + +void Vst3EffectImpl::Activate() +{ + processor->setProcessing(true); // != kResultOk + this->isProcessing = true; +} + +void Vst3EffectImpl::Deactivate() +{ + if (isProcessing) + { + Run(0, nullptr); // make sure all pending events have been processed. + isProcessing = false; + } +} + +void Vst3EffectImpl::Prepare(int32_t sampleRate, size_t maxBufferSize, int inputChannels, int outputChannels) +{ +} +void Vst3EffectImpl::Unprepare() +{ + if (isProcessing) + { + Deactivate(); + } +} + +ssize_t Vst3EffectImpl::ParamIdToLv2Id(ParamID id) const +{ + for (size_t i = 0; i < this->lv2ToVstParam.size(); ++i) + { + if (lv2ToVstParam[i] == id) + { + return (ssize_t)i; + } + } + return -1; +} + +tresult Vst3EffectImpl::beginEdit(ParamID id) +{ + return kResultOk; +} +tresult Vst3EffectImpl::performEdit(ParamID id, ParamValue valueNormalized) +{ + int ix = ParamIdToLv2Id(id); + if (ix != -1) + { + fireControlChanged(ix, (float)valueNormalized); + } + return kResultOk; +} + +tresult Vst3EffectImpl::endEdit(ParamID id) +{ + return kResultOk; +} + +void Vst3EffectImpl::transferControllerStateToComponent() +{ + OPtr bStream = this->streamPool.AllocateBStream(); + assert(GetRefCount(bStream.get()) == 1); + + RtInversionGuard inversionGuard; // boost priority to prevent priority inversion. + std::lock_guard guard{parameterMutex}; + + paramTransferrer.removeChanges(); + + // assume that parameters are straightforward and uncomplicated if they + // didn't provide BStream-based state management + // Vst2 used to do this. It's not clear that this is still legal in Vst3. + + for (int index = 0; index < this->lv2ToVstParam.size(); ++index) + { + ParamID paramId = lv2ToVstParam[index]; + paramTransferrer.addChange(paramId, + controller->plainParamToNormalized(paramId, parameterValues[index]), + 0); + } + if (!this->isProcessing) + { + Run(0,nullptr); + } +} + + +tresult Vst3EffectImpl::restartComponent(int32 flags) +{ + if (flags & (RestartFlags::kParamValuesChanged)) + { + refreshControlValues(); + transferControllerStateToComponent(); + } + + return kResultOk; +} + +static std::vector StreamToVec(IBStream *stream) +{ + Steinberg::int64 length; + stream->seek(0, IBStream::kIBSeekEnd, &length); + stream->seek(0, IBStream::kIBSeekSet); + std::vector result; + result.resize(length); + Steinberg::int32 numRead = 0; + stream->read(&result[0], length, &numRead); + if (numRead != length) + { + throw Vst3Exception("Failed to read."); + } + return result; +} + +void Vst3EffectImpl::CheckSync() +{ + OPtr stream{new MemoryStream()}; + + if (this->controller->getState(stream) == kResultOk) + { + std::vector initialState = StreamToVec(stream); + OPtr stream2{new MemoryStream()}; + this->component->getState(stream2); + stream2->seek(0, IBStream::kIBSeekSet); + this->controller->setState(stream2); + + OPtr stream3{new MemoryStream()}; + this->controller->getState(stream3); + std::vector newState = StreamToVec(stream3); + + if (initialState.size() != newState.size()) + { + throw Vst3Exception("State changed."); + } + for (size_t i = 0; i < newState.size(); ++i) + { + if (initialState[i] != newState[i]) + { + throw Vst3Exception("State changed."); + } + } + } +} + +bool Vst3EffectImpl::GetState(std::vector*state) +{ + OPtr stream{new MemoryStream()}; + + if (component->getState(stream) != kResultOk) + { + return false; + } + Steinberg::int64 length = 0; + if (stream->seek(0, IBStream::kIBSeekEnd, &length) != kResultOk) + { + return false; + } + stream->seek(0, IBStream::kIBSeekSet); + std::vector result; + + result.resize(length); + int64 ix = 0; + while (length != 0) + { + int32 thisTime; + if (length > 0x10000000) + { + thisTime = 0x10000000; + } + else + { + thisTime = (int32)length; + } + if (stream->read((void *)(&result[ix]), thisTime, &thisTime) != kResultOk) + { + throw Vst3Exception(this->info.pluginInfo_.name() + ": Failed to read state."); + } + if (thisTime == 0) + { + throw Vst3Exception(this->info.pluginInfo_.name() + ": Unexpected end of file while reading state."); + } + ix += thisTime; + length -= thisTime; + } + *state = std::move(result); + return true; +} +void Vst3EffectImpl::SetState(const std::vector state) +{ + OPtr stream{new MemoryStream((void *)(&state[0]), state.size())}; + + if (controller->setComponentState(stream) != kResultOk) + { + throw Vst3Exception(this->info.pluginInfo_.name() + " Failed to restore state."); + } + refreshControlValues(); + stream->seek(0,IBStream::kIBSeekSet); + if (component->setState(stream) != kResultOk) + { + transferControllerStateToComponent(); + } +} + +void Vst3EffectImpl::refreshControlValues() +{ + for (size_t i = 0; i < lv2ToVstParam.size(); ++i) + { + fireControlChanged(i, controller->getParamNormalized(lv2ToVstParam[i])); + } +} +std::vector Vst3EffectImpl::GetProgramList(int32_t programListId) +{ + std::vector result; + + FUnknownPtr iUnitInfo(controller); + if (!iUnitInfo) + throw Vst3Exception("Invalid unit info"); + + int count = iUnitInfo->getProgramListCount(); + for (int i = 0; i < count; ++i) + { + ProgramListInfo programListInfo; + if (iUnitInfo->getProgramListInfo(i, programListInfo) != kResultOk) + { + break; + } + if (programListInfo.id == programListId) + { + Vst3ProgramList list; + + list.name = VST3::StringConvert::convert(programListInfo.name); + + for (int prog = 0; prog < programListInfo.programCount; ++prog) + { + Vst::String128 progName; + if (iUnitInfo->getProgramName(programListInfo.id, prog, progName) == kResultOk) + { + Vst3ProgramListEntry entry; + entry.id = prog; + entry.name = VST3::StringConvert::convert(progName); + list.programs.push_back(std::move(entry)); + } + } + result.push_back(std::move(list)); + } + } + return result; +} + +void Vst3EffectImpl::fireControlChanged(int control, float normalizedValue) +{ + normalizedValue = NaNGuard(normalizedValue); + float plainValue = NaNGuard(this->controller->normalizedParamToPlain(this->lv2ToVstParam[control], normalizedValue)); + if (parameterValues[control] != plainValue) + { + parameterValues[control] = plainValue; + controlChangedHandler(control,plainValue); + } +} + +JSON_MAP_BEGIN(Vst3PluginInfo) +JSON_MAP_REFERENCE(Vst3PluginInfo, filePath) +JSON_MAP_REFERENCE(Vst3PluginInfo, version) +JSON_MAP_REFERENCE(Vst3PluginInfo, uid) +JSON_MAP_REFERENCE(Vst3PluginInfo, pluginInfo) + +JSON_MAP_END() diff --git a/src/Vst3Host.cpp b/src/Vst3Host.cpp new file mode 100644 index 0000000..c10740b --- /dev/null +++ b/src/Vst3Host.cpp @@ -0,0 +1,689 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + +#include "ss.hpp" +#include "PiPedalHost.hpp" +#include "vst3/Vst3Host.hpp" +#include "Lv2Log.hpp" +#include +#include +#include +#include +#include "public.sdk/source/vst/hosting/module.h" +#include "public.sdk/source/vst/hosting/hostclasses.h" +#include "public.sdk/source/vst/hosting/plugprovider.h" +#include "pluginterfaces/vst/ivsteditcontroller.h" +#include "pluginterfaces/vst/ivstaudioprocessor.h" +#include "pluginterfaces/vst/ivstunits.h" +#include "public.sdk/source/vst/utility/stringconvert.h" +#include "public.sdk/source/vst/hosting/eventlist.h" +#include "public.sdk/source/vst/hosting/parameterchanges.h" +#include "public.sdk/source/vst/hosting/processdata.h" +#include "pluginterfaces/vst/ivstaudioprocessor.h" +#include "pluginterfaces/vst/ivstmidicontrollers.h" + +#include "public.sdk/samples/vst-hosting/audiohost/source/media/iparameterclient.h" +#include "public.sdk/samples/vst-hosting/audiohost/source/media/imediaserver.h" + +#include + +#include +#include "LiteralVersion.hpp" +#include "json.hpp" + +using namespace std; +using namespace pipedal; +using namespace VST3::Hosting; +using namespace Steinberg; +using namespace Steinberg::Vst; + +namespace pipedal +{ + + class Vst3HostApplication : public HostApplication + { + public: + Vst3HostApplication() {} + //--- IHostApplication --------------- + tresult PLUGIN_API getName(String128 name) + { + return VST3::StringConvert::convert("PiPedal", name) ? kResultTrue : kInternalError; + } + }; + + class Vst3HostImpl : public Vst3Host + { + private: + OPtr hostApplication; + std::string cacheFilePath; + + public: + Vst3HostImpl(const std::string&cacheFilePath); + + const Vst3Host::PluginList &RescanPlugins() override; + const Vst3Host::PluginList &RefreshPlugins() override; + const Vst3Host::PluginList &getPluginList() override { return pluginList; } + + std::unique_ptr CreatePlugin(long instanceId, const std::string &url, IHost *pHost) override; + std::unique_ptr CreatePlugin(PedalBoardItem&pedalBoardItem, IHost*pHost) override; + + private: + Lv2PluginUiInfo *GetPluginInfo(const std::string&uri); + + void LoadPluginCache(); + void SavePluginCache(); + + bool havePluginsChanged() const; + PluginList pluginList; + + void EnsureContext(); + std::unique_ptr MakeDetailedPluginInfo(const PluginFactory &factory, const ClassInfo &classInfo, const std::string &path); + + void MakeVst3Info(const std::filesystem::path &path, Vst3Host::PluginList &list); + }; + + Vst3Host::Ptr Vst3Host::CreateInstance(const std::string&cacheFilePath) + { + return std::make_unique(cacheFilePath); + } + + //-------------------------------------------------------------- + +} // namespace pipedal + +Vst3HostImpl::Vst3HostImpl(const std::string&cacheFilePath) +:cacheFilePath(cacheFilePath) +{ + this->hostApplication = new Vst3HostApplication(); + EnsureContext(); + +} + + +static bool hasSubCategory(const ClassInfo &classInfo, const std::string &subcategory) +{ + for (auto &category : classInfo.subCategories()) + { + if (category == subcategory) + { + return true; + } + } + return false; +} +static PluginType getVst3PluginType(const ClassInfo &classInfo) +{ + if (hasSubCategory(classInfo, "Instrument")) + { + return PluginType::InstrumentPlugin; + } + if (!hasSubCategory(classInfo, "Fx")) + { + return PluginType::InvalidPlugin; + } + + // kFxAnalyzer = "Fx|Analyzer"; ///< Scope, FFT-Display, Loudness Processing... + if (hasSubCategory(classInfo, "Analyzer")) + { + return PluginType::AnalyserPlugin; + } + // kFxDelay = "Fx|Delay"; ///< Delay, Multi-tap Delay, Ping-Pong Delay... + if (hasSubCategory(classInfo, "Delay")) + { + return PluginType::DelayPlugin; + } + + // kFxDistortion = "Fx|Distortion"; ///< Amp Simulator, Sub-Harmonic, SoftClipper... + if (hasSubCategory(classInfo, "Distortion")) + { + return PluginType::DistortionPlugin; + } + // kFxDynamics = "Fx|Dynamics"; ///< Compressor, Expander, Gate, Limiter, Maximizer, Tape Simulator, EnvelopeShaper... + if (hasSubCategory(classInfo, "Dynamics")) + { + return PluginType::DynamicsPlugin; + } + // kFxEQ = "Fx|EQ"; ///< Equalization, Graphical EQ... + if (hasSubCategory(classInfo, "EQ")) + { + return PluginType::EQPlugin; + } + + // kFxFilter = "Fx|Filter"; ///< WahWah, ToneBooster, Specific Filter,... + if (hasSubCategory(classInfo, "Filter")) + { + return PluginType::FilterPlugin; + } + + // kFx = "Fx"; ///< others type (not categorized) + // kFxSpatial = "Fx|Spatial"; ///< MonoToStereo, StereoEnhancer,... + if (hasSubCategory(classInfo, "Spatial")) + { + return PluginType::SpatialPlugin; + } + + // kFxGenerator = "Fx|Generator"; ///< Tone Generator, Noise Generator... + if (hasSubCategory(classInfo, "Generator")) + { + return PluginType::GeneratorPlugin; + } + + // kFxReverb = "Fx|Reverb"; ///< Reverberation, Room Simulation, Convolution Reverb... + if (hasSubCategory(classInfo, "Reverb")) + { + return PluginType::ReverbPlugin; + } + // kFxPitchShift = "Fx|Pitch Shift"; ///< Pitch Processing, Pitch Correction, Vocal Tuning... + if (hasSubCategory(classInfo, "Pitch Shift")) + { + return PluginType::PitchPlugin; + } + + // kFxModulation = "Fx|Modulation"; ///< Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... + if (hasSubCategory(classInfo, "Modulation")) + { + return PluginType::ModulatorPlugin; + } + + // kFxRestoration = "Fx|Restoration"; ///< Denoiser, Declicker,... + if (hasSubCategory(classInfo, "Restoration")) + { + return PluginType::UtilityPlugin; + } + // kFxSurround = "Fx|Surround"; ///< dedicated to surround processing: LFE Splitter, Bass Manager... + if (hasSubCategory(classInfo, "Surround")) + { + return PluginType::UtilityPlugin; + } + + // kFxTools = "Fx|Tools"; ///< Volume, Mixer, Tuner... + if (hasSubCategory(classInfo, "Tools")) + { + return PluginType::UtilityPlugin; + } + // kFxMastering = "Fx|Mastering"; ///< Dither, Noise Shaping,... + if (hasSubCategory(classInfo, "Mastering")) + { + return PluginType::UtilityPlugin; + } + + // kFxNetwork = "Fx|Network"; ///< using Network + if (hasSubCategory(classInfo, "Network")) + { + return PluginType::UtilityPlugin; + } + // kFxInstrument = "Fx|Instrument"; ///< Fx which could be loaded as Instrument too + // kFxInstrumentExternal = "Fx|Instrument|External"; ///< Fx which could be loaded as Instrument too and is external (wrapped Hardware) + if (hasSubCategory(classInfo, "Instrument")) + { + return PluginType::InstrumentPlugin; + } + return PluginType::Plugin; +} + +void Vst3HostImpl::EnsureContext() +{ + PluginContextFactory::instance().setPluginContext(this->hostApplication); +} + +unique_ptr Vst3HostImpl::MakeDetailedPluginInfo(const PluginFactory &factory, const ClassInfo &classInfo, const std::string &path) +{ + IPtr plugProvider = owned(NEW PlugProvider(factory, classInfo, true)); + { + OPtr component = plugProvider->getComponent(); + OPtr controller = plugProvider->getController(); + + FUnknownPtr midiMapping(controller); + + FUnknownPtr iUnitInfo(controller); + + unique_ptr info = make_unique(); + + info->filePath_ = path; + info->version_ = classInfo.version(); + info->uid_ = classInfo.ID().toString(); + + Lv2PluginUiInfo &pluginInfo = info->pluginInfo_; + + pluginInfo.uri(SS("vst3:" << classInfo.ID().toString())); + + pluginInfo.is_vst3(true); + pluginInfo.name(classInfo.name()); + pluginInfo.author_name(classInfo.vendor()); + + pluginInfo.plugin_type( + getVst3PluginType(classInfo)); + pluginInfo.plugin_display_type(""); // fill this in later. VSTHost has list of name translations; we don;'t. + + if (iUnitInfo) + { + auto nUnits = iUnitInfo->getUnitCount(); + for (int i = 0; i < nUnits; ++i) + { + Steinberg::Vst::UnitInfo unitInfo; + iUnitInfo->getUnitInfo(i, unitInfo); + Lv2PluginUiPortGroup portGroup( + SS(unitInfo.id), VST3::StringConvert::convert(unitInfo.name), SS(unitInfo.parentUnitId), unitInfo.programListId); + + pluginInfo.port_groups().push_back(portGroup); + } + } + + auto nParams = controller->getParameterCount(); + for (int32 param = 0; param < nParams; ++param) + { + Steinberg::Vst::ParameterInfo info; + tresult tErr = controller->getParameterInfo(param, info); + + Lv2PluginUiControlPort port; + port.index(param); // used for LV2 purposes. + port.symbol(SS(info.id)); // Used for VST3 purposes. convert to int to specifiy a vst control id. + + std::string shortTitle = VST3::StringConvert::convert(info.shortTitle); + std::string title = VST3::StringConvert::convert(info.title); + if (shortTitle.length() == 0) + { + shortTitle = title; + } + port.name(shortTitle); + port.comment(title); + + + // guard against NaN value (mda Talkbox) + port.display_priority(param); + + bool isList = (info.flags & ParameterInfo::kIsList) != ParameterInfo::kNoFlags; + bool canAutomate = (info.flags & ParameterInfo::kCanAutomate) != ParameterInfo::kNoFlags; + bool isProgramChange = (info.flags & ParameterInfo::kIsProgramChange) != ParameterInfo::kNoFlags; + bool isReadOnly = (info.flags & ParameterInfo::kIsReadOnly) != ParameterInfo::kNoFlags; + bool notOnGui = (info.flags & ParameterInfo::kIsHidden) != ParameterInfo::kNoFlags; + bool isBypass = (info.flags & ParameterInfo::kIsBypass) != ParameterInfo::kNoFlags; + + port.is_bypass(isBypass); + + port.not_on_gui(isReadOnly | notOnGui); + + port.min_value(controller->normalizedParamToPlain(info.id,0)); + port.max_value(controller->normalizedParamToPlain(info.id,1)); + + double t = controller->normalizedParamToPlain(info.id,info.defaultNormalizedValue); + if (std::isnan(t) || std::isinf(t)) + { + t = 0; + } + + port.default_value(t); + + port.range_steps(info.stepCount == 0 ? 0 : info.stepCount + 1); + if (isList && !isProgramChange) + { + port.enumeration_property(true); + for (int i = 0; i <= info.stepCount; ++i) + { + double normalizedValue; + if (info.stepCount == 0) + { + normalizedValue = 0; + } + else + { + normalizedValue = i * 1.0 / (info.stepCount); + } + + String128 strValue; + if (controller->getParamStringByValue(info.id, normalizedValue, strValue) == kResultOk) + { + Lv2ScalePoint scalePoint((float)controller->normalizedParamToPlain(info.id,normalizedValue), VST3::StringConvert::convert(strValue)); + port.scale_points().push_back(scalePoint); + } + } + } + if (info.unitId != 0) + { + port.port_group(SS(info.unitId)); + } + std::string units = VST3::StringConvert::convert(info.units); + if (units.size() != 0) + { + if (units == "dB") + { + port.units(Units::db); + } else if (units == "%") + { + port.units(Units::pc); + } else if (units == "Hz") + { + port.units(Units::hz); + } else if (units == "kHz") + { + port.units(Units::khz); + } else if (units == "sec" || units == "s") + { + port.units(Units::s); + } else if (units == "ms") + { + port.units(Units::ms); + } else if (units == "cent") + { + port.units(Units::cent); + } else { + port.units(Units::custom); + port.custom_units(units); + } + } + + pluginInfo.controls().push_back(port); + } + + auto count = component->getBusCount(MediaTypes::kAudio, BusDirections::kOutput); + for (int32_t i = 0; i < count; i++) + { + BusInfo busInfo; + if (component->getBusInfo(MediaTypes::kAudio, BusDirections::kOutput, i, busInfo) == + kResultOk) + { + auto channelName = VST3::StringConvert::convert(busInfo.name, 128); + + if (busInfo.busType == BusTypes::kMain) // aux channels not currently supported. + { + pluginInfo.audio_outputs(pluginInfo.audio_outputs() + busInfo.channelCount); + } + } + } + count = component->getBusCount(MediaTypes::kAudio, BusDirections::kInput); + for (int32_t i = 0; i < count; i++) + { + BusInfo busInfo; + if (component->getBusInfo(MediaTypes::kAudio, BusDirections::kInput, i, busInfo) == + kResultOk) + { + auto channelName = VST3::StringConvert::convert(busInfo.name, 128); + + if (busInfo.busType == BusTypes::kMain) // aux channels not currently supported. + { + pluginInfo.audio_inputs(pluginInfo.audio_inputs() + busInfo.channelCount); + } + } + } + count = component->getBusCount(MediaTypes::kEvent, BusDirections::kInput); + if (count >= 1) + { + pluginInfo.has_midi_input(1); + } + count = component->getBusCount(MediaTypes::kEvent, BusDirections::kOutput); + if (count >= 1) + { + pluginInfo.has_midi_output(1); + } + return info; + } +} +void Vst3HostImpl::MakeVst3Info(const std::filesystem::path &path, Vst3Host::PluginList &list) +{ + + EnsureContext(); + unique_ptr result = std::make_unique(); + result->filePath_ = path; + + string error; + Module::Ptr module = Module::create(path.string(), error); + + if (!module) + { + Lv2Log::error(SS("Vst3 load failed: " << error << "(" << path.string() << ")")); + return; + } + const PluginFactory &factory = module->getFactory(); + + for (const ClassInfo &classInfo : factory.classInfos()) + { + if (classInfo.category() == kVstAudioEffectClass) + { + bool found = false; + std::string newUid = classInfo.ID().toString(); + for (const auto &existingPlugin : list) + { + if (existingPlugin->uid_ == newUid) + { + found = true; + break; // first instance takes precedence (e.g. ~/.vst3 takes precedence over /usr/lib/vst3 ) + } + } + if (!found) + { + std::unique_ptr pluginInfo = MakeDetailedPluginInfo(factory, classInfo, path); + + list.push_back(std::move(pluginInfo)); + } + } + } +} + +bool Vst3HostImpl::havePluginsChanged() const +{ + + std::unordered_set modules; + + for (const auto &plugin : pluginList) + { + if (!std::filesystem::exists(plugin->filePath_)) + { + return true; + } + modules.insert(plugin->filePath_); + } + Module::PathList pathList = Module::getModulePaths(); + + for (const auto &path : pathList) + { + if (!modules.contains(path)) + { + return true; + } + } + return false; +} + +const Vst3Host::PluginList &Vst3HostImpl::RefreshPlugins() +{ + if (cacheFilePath.length() != 0) + { + LoadPluginCache(); + } + if (havePluginsChanged()) + { + RescanPlugins(); + } + return pluginList; +} + +const Vst3Host::PluginList &Vst3HostImpl::RescanPlugins() +{ + Module::PathList pathList = Module::getModulePaths(); + + PluginList list; + + //pathList.insert(pathList.begin(),"/home/pi/.vst3/mda-vst3.vst3"); + + for (auto &path : pathList) + { + if (path == std::string("/home/pi/.vst3/mda-vst3.vst3")) + { + Lv2Log::debug("Processing MDA plugins"); + } + filesystem::path p{path}; + MakeVst3Info(p, list); + } + this->pluginList = std::move(list); + SavePluginCache(); + return pluginList; +} + +static std::string ParseVst3Url(const std::string &url) +{ + if (!url.starts_with("vst3:")) + { + throw Vst3Exception("Not a valid vst3 url.: " + url); + } + std::string strUrl = url.substr(5); + return strUrl; +} + +std::unique_ptr Vst3HostImpl::CreatePlugin(long instanceId, const std::string &url, IHost *pHost) +{ + EnsureContext(); + + auto uuid = ParseVst3Url(url); + + std::unique_ptr result; + + for (const auto &plugin : pluginList) + { + if (plugin->uid_ == uuid) + { + return Vst3Effect::CreateInstance(instanceId, *(plugin.get()), pHost); + } + } + throw Vst3Exception("Plugin not found."); +} + +static inline uint8_t Hex(char c) +{ + if (c >= '0' && c <= '9') return c-'0'; + if (c >= 'a' && c <= 'z') return c-'a'+10; + if (c >= 'A' && c <= 'Z') return c-'A'+10; + + throw Vst3Exception("Invalid state bundle."); +} + +static std::vector HexToByteArray(const std::string&hexState) +{ + std::vector result; + result.resize(hexState.length()/2); + for (int i = 0; i < result.size(); ++i) + { + result[i] = Hex(hexState[i*2])*16 + Hex(hexState[i*2+1]); + } + return result; +} +std::unique_ptr Vst3HostImpl::CreatePlugin(PedalBoardItem&pedalBoardItem, IHost*pHost) +{ + std::unique_ptr result = CreatePlugin(pedalBoardItem.instanceId(),pedalBoardItem.uri(),pHost); + auto pluginInfo = this->GetPluginInfo(pedalBoardItem.uri()); + if (!pluginInfo) + { + throw Vst3Exception(SS("Plugin " << pedalBoardItem.pluginName() << " not found.")); + } + if (pedalBoardItem.vstState().length() != 0) + { + std::vector state = HexToByteArray(pedalBoardItem.vstState()); + result->SetState(state); + + for (ControlValue &controlValue: pedalBoardItem.controlValues()) + { + int32_t index = -1; + for (size_t i = 0; i < pluginInfo->controls().size(); ++i) + { + if (pluginInfo->controls()[i].symbol() == controlValue.key()) + { + index = (int32_t)(pluginInfo->controls()[i].index()); + break; + } + } + if (index != -1) + { + float value = result->GetControlValue(index); + controlValue.value(value); + } + + } + + } else { + for (const ControlValue &controlValue: pedalBoardItem.controlValues()) + { + int32_t index = -1; + for (size_t i = 0; i < pluginInfo->controls().size(); ++i) + { + if (pluginInfo->controls()[i].symbol() == controlValue.key()) + { + index = (int32_t)(pluginInfo->controls()[i].index()); + break; + } + } + if (index != -1) + { + result->SetControl(index,controlValue.value()); + } + + } + } + return result; +} + + +#include + +void Vst3HostImpl::LoadPluginCache() +{ + if (cacheFilePath.length() != 0) + { + std::ifstream f(cacheFilePath); + if (f.is_open()) + { + json_reader reader(f); + + reader.read(&(this->pluginList)); + } + + } +} +void Vst3HostImpl::SavePluginCache() +{ + if (cacheFilePath.length() != 0) + { + std::ofstream f(cacheFilePath); + if (f.is_open()) + { + json_writer writer(f); + + writer.write(this->pluginList); + } + + } + +} + +Lv2PluginUiInfo *Vst3HostImpl::GetPluginInfo(const std::string&uri) +{ + for (const auto &pluginInfo: pluginList) + { + if (pluginInfo->pluginInfo_.uri() == uri) + { + return &(pluginInfo->pluginInfo_); + } + } + return nullptr; +} + \ No newline at end of file diff --git a/src/Vst3MidiToEvent.hpp b/src/Vst3MidiToEvent.hpp new file mode 100644 index 0000000..f6af30c --- /dev/null +++ b/src/Vst3MidiToEvent.hpp @@ -0,0 +1,159 @@ +//----------------------------------------------------------------------------- +// Flags : clang-format auto +// Project : VST SDK +// +// Category : AudioHost +// Filename : public.sdk/samples/vst-hosting/audiohost/source/media/miditovst.h +// Created by : Steinberg 09.2016 +// Description : Audio Host Example for VST 3 +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +#include "public.sdk/source/vst/utility/optional.h" +#include "pluginterfaces/vst/ivstevents.h" +#include "pluginterfaces/vst/ivstmidicontrollers.h" +#include +#include + +//------------------------------------------------------------------------ +namespace Steinberg { +namespace Vst { + +const uint8_t kNoteOff = 0x80; ///< note, off velocity +const uint8_t kNoteOn = 0x90; ///< note, on velocity +const uint8_t kPolyPressure = 0xA0; ///< note, pressure +const uint8_t kController = 0xB0; ///< controller, value +const uint8_t kProgramChangeStatus = 0xC0; ///< program change +const uint8_t kAfterTouchStatus = 0xD0; ///< channel pressure +const uint8_t kPitchBendStatus = 0xE0; ///< lsb, msb +static const uint32 kDataMask = 0x7F; + +const float kMidiScaler = 1.f / 127.f; + +using MidiData = uint8_t; + +float toNormalized (const MidiData& data) +{ + return (float)data * kMidiScaler; +} + +using OptionalEvent = VST3::Optional; + +using ParameterChange = std::pair; +using OptionParamChange = VST3::Optional; + +OptionalEvent midiToEvent (MidiData status, MidiData channel, MidiData midiData0, + MidiData midiData1) +{ + Event new_event = {}; + if (status == kNoteOn || status == kNoteOff) + { + if (status == kNoteOff) // note off + { + new_event.noteOff.noteId = -1; + new_event.type = Event::kNoteOffEvent; + new_event.noteOff.channel = channel; + new_event.noteOff.pitch = midiData0; + new_event.noteOff.velocity = toNormalized (midiData1); + return std::move (new_event); + } + else if (status == kNoteOn) // note on + { + new_event.noteOn.noteId = -1; + new_event.type = Event::kNoteOnEvent; + new_event.noteOn.channel = channel; + new_event.noteOn.pitch = midiData0; + new_event.noteOn.velocity = toNormalized (midiData1); + return std::move (new_event); + } + } + //--- ----------------------------- + else if (status == kPolyPressure) + { + new_event.type = Vst::Event::kPolyPressureEvent; + new_event.polyPressure.channel = channel; + new_event.polyPressure.pitch = midiData0; + new_event.polyPressure.pressure = toNormalized (midiData1); + return std::move (new_event); + } + + return {}; +} + +//------------------------------------------------------------------------ +using ToParameterIdFunc = std::function; +OptionParamChange midiToParameter (MidiData status, MidiData channel, MidiData midiData1, + MidiData midiData2, const ToParameterIdFunc& toParamID) +{ + if (!toParamID) + return {}; + + ParameterChange paramChange; + if (status == kController) // controller + { + paramChange.first = toParamID (channel, midiData1); + if (paramChange.first != kNoParamId) + { + paramChange.second = (double)midiData2 * kMidiScaler; + return std::move (paramChange); + } + } + else if (status == kPitchBendStatus) + { + paramChange.first = toParamID (channel, Vst::kPitchBend); + if (paramChange.first != kNoParamId) + { + const double kPitchWheelScaler = 1. / (double)0x3FFF; + + const int32 ctrl = (midiData1 & kDataMask) | (midiData2 & kDataMask) << 7; + paramChange.second = kPitchWheelScaler * (double)ctrl; + return std::move (paramChange); + }; + } + else if (status == kAfterTouchStatus) + { + paramChange.first = toParamID (channel, Vst::kAfterTouch); + if (paramChange.first != kNoParamId) + { + paramChange.second = (ParamValue) (midiData1 & kDataMask) * kMidiScaler; + return std::move (paramChange); + }; + } + else if (status == kProgramChangeStatus) + { + // TODO + } + + return {}; +} +//------------------------------------------------------------------------ +} // Vst +} // Steinberg diff --git a/src/Vst3PresetFile.cpp b/src/Vst3PresetFile.cpp new file mode 100644 index 0000000..fe79443 --- /dev/null +++ b/src/Vst3PresetFile.cpp @@ -0,0 +1,86 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "vst3/Vst3PresetFile.hpp" +#include "public.sdk/source/vst/vstpresetfile.h" +using namespace pipedal; +using namespace Steinberg; +using namespace Steinberg::Vst; + + +namespace pipedal { + +class Vst3PresetFileImpl : public Vst3PresetFile { +public: + virtual ~Vst3PresetFileImpl() { } + + + virtual void Load(const std::string&path); + + virtual std::vector GetPresets(); + + virtual std::vector GetPresetChunk(uint32_t index); +private: + std::unique_ptr presetFile; + +}; + + +void Vst3PresetFileImpl::Load(const std::string&path) +{ + OPtr stream = FileStream::open(path.c_str(),"r"); + presetFile = std::make_unique(stream); + +} + +std::vector Vst3PresetFileImpl::GetPresets() +{ + std::vector result; + auto count = presetFile->getEntryCount(); + result.reserve(count); + + for (int i = 0; i < count; ++i) + { + const PresetFile::Entry& entry = presetFile->at(i); + } + + return result; +} + +std::vector Vst3PresetFileImpl::GetPresetChunk(uint32_t index) +{ + return std::vector(); // STUB +} + + + +std::unique_ptr Vst3PresetFile::CreateInstance() +{ + return std::make_unique(); +} + + + + +} // namespace pipedal \ No newline at end of file diff --git a/src/Vst3RtStream.cpp b/src/Vst3RtStream.cpp new file mode 100644 index 0000000..6a0bdc5 --- /dev/null +++ b/src/Vst3RtStream.cpp @@ -0,0 +1,358 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : Common Classes +// Filename : public.sdk/source/common/memorystream.cpp +// Created by : Steinberg, 03/2008 +// Description : IBStream Implementation for memory blocks +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "vst3/Vst3RtStream.hpp" +#include "pluginterfaces/base/futils.h" +#include + +namespace pipedal { + +//----------------------------------------------------------------------------- +IMPLEMENT_FUNKNOWN_METHODS (RtStream, IBStream, IBStream::iid) +static const TSize kMemGrowAmount = 4096; + +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +RtStream::RtStream(RtStreamPool*pool) +: pool(pool) +, memory (nullptr) +, memorySize (0) +, size (0) +, cursor (0) +, ownMemory (true) +, allocationError (false) +{ + FUNKNOWN_CTOR +} + +//----------------------------------------------------------------------------- +RtStream::~RtStream () +{ + if (ownMemory && memory) + ::free (memory); + + FUNKNOWN_DTOR +} + +//----------------------------------------------------------------------------- +tresult PLUGIN_API RtStream::read (void* data, int32 numBytes, int32* numBytesRead) +{ + if (memory == nullptr) + { + if (allocationError) + return kOutOfMemory; + numBytes = 0; + } + else + { + // Does read exceed size ? + if (cursor + numBytes > size) + { + int32 maxBytes = int32 (size - cursor); + + // Has length become zero or negative ? + if (maxBytes <= 0) + { + cursor = size; + numBytes = 0; + } + else + numBytes = maxBytes; + } + + if (numBytes) + { + memcpy (data, &memory[cursor], static_cast (numBytes)); + cursor += numBytes; + } + } + + if (numBytesRead) + *numBytesRead = numBytes; + + return kResultTrue; +} + +//----------------------------------------------------------------------------- +tresult PLUGIN_API RtStream::write (void* buffer, int32 numBytes, int32* numBytesWritten) +{ + if (allocationError) + return kOutOfMemory; + if (buffer == nullptr) + return kInvalidArgument; + + // Does write exceed size ? + TSize requiredSize = cursor + numBytes; + if (requiredSize > size) + { + if (requiredSize > memorySize) + setSize (requiredSize); + else + size = requiredSize; + } + + // Copy data + if (memory && cursor >= 0 && numBytes > 0) + { + memcpy (&memory[cursor], buffer, static_cast (numBytes)); + // Update cursor + cursor += numBytes; + } + else + numBytes = 0; + + if (numBytesWritten) + *numBytesWritten = numBytes; + + return kResultTrue; +} + +//----------------------------------------------------------------------------- +tresult PLUGIN_API RtStream::seek (int64 pos, int32 mode, int64* result) +{ + switch (mode) + { + case kIBSeekSet: + cursor = pos; + break; + case kIBSeekCur: + cursor = cursor + pos; + break; + case kIBSeekEnd: + cursor = size + pos; + break; + } + + if (ownMemory == false) + if (cursor > memorySize) + cursor = memorySize; + + if (result) + *result = cursor; + + return kResultTrue; +} + +//----------------------------------------------------------------------------- +tresult PLUGIN_API RtStream::tell (int64* pos) +{ + if (!pos) + return kInvalidArgument; + + *pos = cursor; + return kResultTrue; +} + +//------------------------------------------------------------------------ +TSize RtStream::getSize () const +{ + return size; +} + +//------------------------------------------------------------------------ +void RtStream::setSize (TSize s) +{ + if (s <= 0) + { + if (ownMemory && memory) + free (memory); + + memory = nullptr; + memorySize = 0; + size = 0; + cursor = 0; + return; + } + + TSize newMemorySize = (((Max (memorySize, s) - 1) / kMemGrowAmount) + 1) * kMemGrowAmount; + if (newMemorySize == memorySize) + { + size = s; + return; + } + + if (memory && ownMemory == false) + { + allocationError = true; + return; + } + + ownMemory = true; + char* newMemory = nullptr; + + if (memory) + { + newMemory = (char*)realloc (memory, (size_t)newMemorySize); + if (newMemory == nullptr && newMemorySize > 0) + { + newMemory = (char*)malloc ((size_t)newMemorySize); + if (newMemory) + { + memcpy (newMemory, memory, (size_t)Min (newMemorySize, memorySize)); + free (memory); + } + } + } + else + newMemory = (char*)malloc ((size_t)newMemorySize); + + if (newMemory == nullptr) + { + if (newMemorySize > 0) + allocationError = true; + + memory = nullptr; + memorySize = 0; + size = 0; + cursor = 0; + } + else + { + memory = newMemory; + memorySize = newMemorySize; + size = s; + } +} + +//------------------------------------------------------------------------ +char* RtStream::getData () const +{ + return memory; +} + +//------------------------------------------------------------------------ +char* RtStream::detachData () +{ + if (ownMemory) + { + char* result = memory; + memory = nullptr; + memorySize = 0; + size = 0; + cursor = 0; + return result; + } + return nullptr; +} + +//------------------------------------------------------------------------ +bool RtStream::truncate () +{ + if (ownMemory == false) + return false; + + if (memorySize == size) + return true; + + memorySize = size; + + if (memorySize == 0) + { + if (memory) + { + free (memory); + memory = nullptr; + } + } + else + { + if (memory) + { + char* newMemory = (char*)realloc (memory, (size_t)memorySize); + if (newMemory) + memory = newMemory; + } + } + return true; +} + +//------------------------------------------------------------------------ +bool RtStream::truncateToCursor () +{ + size = cursor; + return truncate (); +} + +} + +// namespace +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "vst3/Vst3RtStream.hpp" + +using namespace Steinberg; +using namespace pipedal; + + + +void RtStreamPool::ReleaseStreams() +{ + RtStream *freeStreamList; + { + freeStreamList = this->freeStreamList; + this->freeStreamList = nullptr; + } + while (freeStreamList) + { + RtStream *next = freeStreamList->next; + + freeStreamList->release(); + freeStreamList = next; + } +} \ No newline at end of file diff --git a/src/Vst3SdkRepro.cpp b/src/Vst3SdkRepro.cpp new file mode 100644 index 0000000..7efad66 --- /dev/null +++ b/src/Vst3SdkRepro.cpp @@ -0,0 +1,49 @@ +#include +#include "public.sdk/source/vst/hosting/module.h" +#include "public.sdk/source/vst/hosting/hostclasses.h" +#include "public.sdk/source/vst/hosting/plugprovider.h" +#include "pluginterfaces/vst/ivsteditcontroller.h" +#include "pluginterfaces/vst/ivstaudioprocessor.h" +#include "pluginterfaces/vst/ivstunits.h" +#include "public.sdk/source/vst/utility/stringconvert.h" +#include "public.sdk/source/vst/hosting/eventlist.h" +#include "public.sdk/source/vst/hosting/parameterchanges.h" +#include "public.sdk/source/vst/hosting/processdata.h" +#include "pluginterfaces/vst/ivstaudioprocessor.h" +#include "pluginterfaces/vst/ivstmidicontrollers.h" + +#include "public.sdk/samples/vst-hosting/audiohost/source/media/iparameterclient.h" +#include "public.sdk/samples/vst-hosting/audiohost/source/media/imediaserver.h" + +using namespace std; +using namespace VST3::Hosting; +using namespace Steinberg; +using namespace Steinberg::Vst; + +PluginFactory::ClassInfos GetVst3ClassInfos(const std::string& pluginPath) +{ + std::string error; + Module::Ptr module = Module::create(pluginPath.c_str(), error); + + if (!module) + { + assert(false && "Vst3 load failed."); + } + const PluginFactory &factory = module->getFactory(); + + return factory.classInfos(); +} + +static std::string HomePath() { return getenv("HOME"); } + +void BugReportTest() +{ + auto _ = GetVst3ClassInfos(HomePath() + "/.vst3/adelay.vst3"); + PluginFactory::ClassInfos classInfos = GetVst3ClassInfos(HomePath() + "/.vst3/mda-vst3.vst3"); + + // right size. + assert(classInfos.size() == 68); // succeeds + + // wrong classInfo (from adelay.vst3) + assert(classInfos[0].name() == "mda Ambience"); // actual result "ADelay" +} diff --git a/src/Vst3test.cpp b/src/Vst3test.cpp new file mode 100644 index 0000000..183490b --- /dev/null +++ b/src/Vst3test.cpp @@ -0,0 +1,149 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "PiPedalHost.hpp" +#include "vst3/Vst3Host.hpp" +#include + +using namespace pipedal; +using namespace std; + +void EnumerateVst3Plugins() +{ + cout << "--- Enumeration Test --------" << endl; + Vst3Host::Ptr vst3Host = Vst3Host::CreateInstance(); + vst3Host->RescanPlugins(); + + + vst3Host->RefreshPlugins(); +} + + +void CheckSync(IEffect*effect) +{ + Vst3Effect *vst3Effect = (Vst3Effect*)effect; + + vst3Effect->CheckSync(); +} + +void TestPrograms(const Vst3PluginInfo &info, Vst3Effect *effect) +{ + for (size_t i = 0; i < info.pluginInfo_.port_groups().size(); ++i) + { + const auto &port_group = info.pluginInfo_.port_groups()[i]; + if (port_group.program_list_id() != -1) + { + auto programList = effect->GetProgramList(port_group.program_list_id()); + for (const auto& programGroup: programList) + { + cout <<" " << port_group.program_list_id() << " " << programGroup.name << " (" << programGroup.programs.size() << " programs)" << std::endl; + // for (const auto&program: programGroup.programs) + // { + // cout << " " << program.id << " " << program.name << endl; + // } + } + } + } +} + +void RunVsts() +{ + cout << "--- RunVsts ----------------" << endl; + Vst3Host::Ptr vst3Host = Vst3Host::CreateInstance(); + + cout << "Scanning" << endl; + const auto & plugins = vst3Host->RescanPlugins(); + + PiPedalHost host; + + IHost *pHost = host.asIHost(); + host.setSampleRate(44100); + + for (const auto & info : plugins) + { + + cout << " Running " << info->pluginInfo_.name() << endl; + auto plugin = vst3Host->CreatePlugin(0,info->pluginInfo_.uri(),pHost); + + int nInputs = info->pluginInfo_.audio_inputs(); + int nOutputs = info->pluginInfo_.audio_outputs(); + + plugin->Prepare(host.GetSampleRate(),pHost->GetMaxAudioBufferSize(),info->pluginInfo_.audio_inputs(), info->pluginInfo_.audio_outputs()); + + plugin->Activate(); + + std::vector inputs; + std::vector outputs; + inputs.resize(nInputs); + for (int i = 0; i < nInputs; ++i) + { + inputs[i] = new float[512]; + plugin->SetAudioInputBuffer(i,inputs[i]); + + for (int j = 0; j < 512; ++j) + { + inputs[i][j] = j / 512.0; + } + } + outputs.resize(nOutputs); + for (int i = 0; i < nOutputs; ++i) + { + outputs[i] = new float[512]; + plugin->SetAudioOutputBuffer(i,outputs[i]); + } + + plugin->Run(512,nullptr); + + for (int i = 0; i < info->pluginInfo_.controls().size(); ++i) + { + float v = plugin->GetControlValue(i); + plugin->SetControl(i,v); + + plugin->Run(0,nullptr); + + plugin->CheckSync(); + } + + TestPrograms(*info,plugin.get()); + + plugin->Deactivate(); + } + + + +} + +void BugReportTest(); + +int main(int, char**) +{ + BugReportTest(); + + RunVsts(); + + EnumerateVst3Plugins(); + + + return 0; +} \ No newline at end of file diff --git a/src/asan_options.cpp b/src/asan_options.cpp index a32a26b..58d3c67 100644 --- a/src/asan_options.cpp +++ b/src/asan_options.cpp @@ -25,6 +25,7 @@ extern "C" { "detect_leaks=0" // undesirable behavior on abnormal termination. ":alloc_dealloc_mismatch=0" // Guitarix components trigger this. It's not actually a problem on GCC. ":new_delete_type_mismatch=0" //GxTuner + ":detect_odr_violation=0" ":print_stacktrace=1" ":halt_on_error=1" ; diff --git a/src/main.cpp b/src/main.cpp index 8805600..84b27f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,7 +27,7 @@ #include "AvahiService.hpp" #include "PiPedalSocket.hpp" -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" #include #include #include "PiPedalConfiguration.hpp" diff --git a/src/vst3/Vst3Effect.hpp b/src/vst3/Vst3Effect.hpp new file mode 100644 index 0000000..0b3271c --- /dev/null +++ b/src/vst3/Vst3Effect.hpp @@ -0,0 +1,83 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include "PiPedalHost.hpp" +#include +#include "json.hpp" + + +namespace pipedal { + struct Vst3PluginInfo { + public: + + std::string filePath_; + std::string version_; + std::string uid_; + + Lv2PluginUiInfo pluginInfo_; + + DECLARE_JSON_MAP(Vst3PluginInfo); + + }; + + struct Vst3ProgramListEntry { + int32_t id; + std::string name; + }; + + struct Vst3ProgramList { + std::string name; + + std::vector programs; + + }; + + class Vst3Effect: public IEffect { + public: + using Ptr = std::unique_ptr; + + virtual void Prepare(int32_t sampleRate, size_t maxBufferSize,int inputChannels, int outputChannels) = 0; + + virtual void Activate() = 0; + virtual void Deactivate() = 0; + virtual void Unprepare() = 0; + virtual void CheckSync() = 0; // throw if audioProcessor and controller are not sync (test only) + + virtual bool SupportsState() const = 0; + virtual bool GetState(std::vector *state) = 0; + + virtual void SetState(const std::vector state) = 0; + + using ControlChangedHandler = std::function; + virtual void SetControlChangedHandler(const ControlChangedHandler& handler) = 0; + virtual void RemoveControlChangedHandler() = 0; + + virtual std::vector GetProgramList(int32_t programListId) = 0; + public: + static std::unique_ptr CreateInstance(uint64_t instanceId,const Vst3PluginInfo& info, IHost *pHost); + }; + +} \ No newline at end of file diff --git a/src/vst3/Vst3EffectImpl.hpp b/src/vst3/Vst3EffectImpl.hpp new file mode 100644 index 0000000..a544cd6 --- /dev/null +++ b/src/vst3/Vst3EffectImpl.hpp @@ -0,0 +1,286 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "Vst3Effect.hpp" +#include + +#include "RtInversionGuard.hpp" +#include "Vst3RtStream.hpp" + +#pragma once + +namespace pipedal +{ + using namespace std; + using namespace pipedal; + using namespace VST3::Hosting; + using namespace Steinberg; + using namespace Steinberg::Vst; + + enum + { + kMaxMidiMappingBusses = 4, + kMaxMidiChannels = 16 + }; + using Controllers = std::vector; + using Channels = std::array; + using Busses = std::array; + using MidiCCMapping = Busses; + + class Vst3EffectImpl : public Vst3Effect, + public IAudioClient, + public IMidiClient + { + public: + //-------------------------------------------------------------------- + using Name = std::string; + + Vst3EffectImpl(); + virtual ~Vst3EffectImpl(); + void Load(uint64_t instanceId, const Vst3PluginInfo &info, IHost *pHost); + + // IEffect + virtual bool IsVst3() const { return true; } + virtual uint64_t GetInstanceId() const { return instanceId; } + virtual int GetControlIndex(const std::string &symbol) const + { + for (size_t i = 0; i < info.pluginInfo_.controls().size(); ++i) + { + if (info.pluginInfo_.controls()[i].symbol() == symbol) + { + return (int)i; + } + } + return -1; + } + + bool SupportsState() const { return supportsState; } + + bool GetState(std::vector *state); + + void SetState(const std::vector state); + + virtual void CheckSync(); + + //- PiPedalHost Interfaces. + virtual void SetControl(int index, float value); + virtual float GetControlValue(int index) const + { + return this->parameterValues[index]; + } + + virtual std::vector GetProgramList(int32_t programListId); + + int bypassControl = -1; + bool bypassEnable = false; + + virtual void SetBypass(bool enable) + { + if (bypassControl != -1) + { + SetControl(bypassControl, enable ? 1 : 0); + } + else + { + bypassEnable = enable; + } + } + + virtual void Activate(); + virtual void Deactivate(); + + virtual float GetOutputControlValue(int controlIndex) const + { + return this->parameterValues[controlIndex]; + } + + virtual int GetNumberOfInputAudioPorts() const + { + return info.pluginInfo_.audio_inputs(); + } + virtual int GetNumberOfOutputAudioPorts() const + { + return info.pluginInfo_.audio_outputs(); + } + virtual float *GetAudioInputBuffer(int index) const { return buffers.inputs[index]; } + virtual float *GetAudioOutputBuffer(int index) const { return buffers.outputs[index]; } + virtual void ResetAtomBuffers() {} + virtual void RequestParameter(LV2_URID uridUri) {} // no vst equivalent. + virtual void GatherParameter(RealtimeParameterRequest *pRequest) {} // no vst equivalent. + + virtual void SetAudioInputBuffer(int index, float *buffer) + { + buffers.inputs[index] = buffer; + } + virtual void SetAudioOutputBuffer(int index, float *buffer) + { + buffers.outputs[index] = buffer; + } + + + virtual void Run(uint32_t samples, RealtimeRingBufferWriter *realtimeRingBufferWriter) + { + process(buffers, samples); + SendControlChanges(realtimeRingBufferWriter); + } + + // Vst3Effect interfaces. + + virtual void Prepare(int32_t sampleRate, size_t maxBufferSize, int inputChannels, int outputChannels); + virtual void Unprepare(); + + // IAudioClient + bool process(Buffers &buffers, int64_t continousFrames) override; + bool setSamplerate(SampleRate value) override; + bool setBlockSize(int32 value) override; + IAudioClient::IOSetup getIOSetup() const override; + + // IMidiClient + bool onEvent(const Event &event, int32_t port) override; + IMidiClient::IOSetup getMidiIOSetup() const override; + + // IParameterClient + + + //-------------------------------------------------------------------- + private: + bool supportsState = false; + IHost *pHost; + Module::Ptr module; + IPtr midiMapping; + IPtr plugProvider; + + RtStreamPool streamPool; + + void SendControlChanges(RealtimeRingBufferWriter *realtimeRingBufferWriter); + //-------------------------------------------------------------------- + private: + std::mutex parameterMutex; + Buffers buffers; + std::vector lv2ToVstParam; + std::vector parameterValues; + + // void createLocalMediaServer(const Name &name); + uint64_t instanceId; + Vst3PluginInfo info; + void terminate(); + void initProcessData(); + void updateBusBuffers(Buffers &buffers, HostProcessData &processData); + void preprocess(Buffers &buffers, int64_t continousFrames); + void postprocess(Buffers &buffers); + bool isPortInRange(int32 port, int32 channel) const; + bool processVstEvent(const IMidiClient::Event &event, int32 port); + bool processParamChange(const IMidiClient::Event &event, int32 port); + + SampleRate sampleRate = 0; + int32 blockSize = 0; + HostProcessData processData; + ProcessContext processContext; + EventList eventList; + ParameterChanges inputParameterChanges; + ParameterChanges outputParameterChanges; + IComponent *component = nullptr; + IEditController *controller = nullptr; + FUnknownPtr processor; + + ParameterChangeTransfer paramTransferrer; + + MidiCCMapping midiCCMapping; + // IMediaServerPtr mediaServer; + bool isProcessing = false; + + Name name; + + private: + ssize_t ParamIdToLv2Id(ParamID id) const; + + class ComponentHandler : public IComponentHandler + { + private: + Vst3EffectImpl *pEffect = nullptr; + public: + ComponentHandler() { } + + void setEffect(Vst3EffectImpl*effect) + { + pEffect = effect; + } + tresult PLUGIN_API beginEdit(ParamID id) override + { + return pEffect->beginEdit(id); + } + tresult PLUGIN_API performEdit(ParamID id, ParamValue valueNormalized) override + { + return pEffect->performEdit(id, valueNormalized); + } + tresult PLUGIN_API endEdit(ParamID id) override + { + return pEffect->endEdit(id); + } + tresult PLUGIN_API restartComponent(int32 flags) override + { + return pEffect->restartComponent(flags); + } + + private: + tresult PLUGIN_API queryInterface(const TUID _iid, void ** obj) override + { + if (_iid == IComponentHandler_iid) + { + addRef(); + *((FUnknown**)obj) = this; + return kResultOk; + } + + return kNoInterface; + } + uint32 PLUGIN_API addRef() override { return 1000; } + uint32 PLUGIN_API release() override { return 1000; } + }; + + ComponentHandler componentHandler; + void transferControllerStateToComponent(); + void refreshControlValues(); + + virtual tresult beginEdit(ParamID id); + virtual tresult performEdit(ParamID id, ParamValue valueNormalized); + virtual tresult endEdit(ParamID id); + virtual tresult restartComponent(int32 flags); + + private: + ControlChangedHandler controlChangedHandler = [] (int control,float value) {}; + void fireControlChanged(int control, float normalizedValue); + + public: + virtual void SetControlChangedHandler(const ControlChangedHandler& handler) + { + controlChangedHandler = handler; + } + virtual void RemoveControlChangedHandler() { + controlChangedHandler = [] (int,float){}; + } + + }; + +} \ No newline at end of file diff --git a/src/vst3/Vst3Host.hpp b/src/vst3/Vst3Host.hpp new file mode 100644 index 0000000..f4b1049 --- /dev/null +++ b/src/vst3/Vst3Host.hpp @@ -0,0 +1,70 @@ +/* + /* MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once +#include +#include +#include +#include +#include + +#include "public.sdk/source/vst/utility/uid.h" + +#include "vst3/Vst3Effect.hpp" +#include "PedalBoard.hpp" + + + namespace pipedal { + + + class Vst3Exception: public std::logic_error { + public: + Vst3Exception(const std::string&error) + :logic_error(error) + { + } + }; + + class Vst3Host { + + public: + using Ptr = std::unique_ptr; + using PluginList = std::vector>; + + virtual ~Vst3Host() {} + virtual const PluginList &RescanPlugins() = 0; + virtual const PluginList &RefreshPlugins() = 0; + virtual const PluginList &getPluginList() = 0; + + + virtual std::unique_ptr CreatePlugin(long instanceId,const std::string&url, IHost*pHost) = 0; + virtual std::unique_ptr CreatePlugin(PedalBoardItem&pedalBoardItem, IHost*pHost) = 0; + + + static Ptr CreateInstance(const std::string &cacheFilePath = ""); + + }; + + + }; \ No newline at end of file diff --git a/src/vst3/Vst3PresetFile.hpp b/src/vst3/Vst3PresetFile.hpp new file mode 100644 index 0000000..6b4be94 --- /dev/null +++ b/src/vst3/Vst3PresetFile.hpp @@ -0,0 +1,53 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include +#include +#include +#include + +namespace pipedal { + struct Vst3PresetInfo { + uint32_t index; + std::string name; + }; + class Vst3PresetFile { + protected: + Vst3PresetFile() { } + public: + virtual ~Vst3PresetFile() { } + + + virtual void Load(const std::string&path) = 0; + + virtual std::vector GetPresets() = 0; + + virtual std::vector GetPresetChunk(uint32_t index) = 0; + + std::unique_ptr CreateInstance(); + }; + +} \ No newline at end of file diff --git a/src/vst3/Vst3RtStream.hpp b/src/vst3/Vst3RtStream.hpp new file mode 100644 index 0000000..c1ef79b --- /dev/null +++ b/src/vst3/Vst3RtStream.hpp @@ -0,0 +1,109 @@ +/* + * MIT License + * + * Copyright (c) 2022 Robin E. R. Davies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include "public.sdk/source/common/memorystream.h" +#include +#include "Vst3RtStream.hpp" + +namespace pipedal +{ + using namespace Steinberg; + + class IRtStream : public IBStream + { + public: + virtual void QueueForRelease() = 0; + }; + + class RtStreamPool; + + class RtStream : public IRtStream + { + friend class RtStreamPool; + + virtual void PLUGIN_API QueueForRelease(); + RtStream(RtStreamPool *pool); + + public: + virtual ~RtStream(); + //---IBStream--------------------------------------- + tresult PLUGIN_API read(void *buffer, int32 numBytes, int32 *numBytesRead) SMTG_OVERRIDE; + tresult PLUGIN_API write(void *buffer, int32 numBytes, int32 *numBytesWritten) SMTG_OVERRIDE; + tresult PLUGIN_API seek(int64 pos, int32 mode, int64 *result) SMTG_OVERRIDE; + tresult PLUGIN_API tell(int64 *pos) SMTG_OVERRIDE; + + TSize getSize() const; ///< returns the current memory size + void setSize(TSize size); ///< set the memory size, a realloc will occur if memory already used + char *getData() const; ///< returns the memory pointer + char *detachData(); ///< returns the memory pointer and give up ownership + bool truncate(); ///< realloc to the current use memory size if needed + bool truncateToCursor(); ///< truncate memory at current cursor position + + //------------------------------------------------------------------------ + DECLARE_FUNKNOWN_METHODS + protected: + RtStreamPool *pool = nullptr; + RtStream *next = nullptr; + char *memory; // memory block + TSize memorySize; // size of the memory block + TSize size; // size of the stream + int64 cursor; // stream pointer + bool ownMemory; // stream has allocated memory itself + bool allocationError; // stream invalid + }; + + class RtStreamPool + { + public: + ~RtStreamPool() + { + ReleaseStreams(); + } + IRtStream *AllocateBStream() + { + ReleaseStreams(); + return new RtStream(this); + } + void ReleaseStreams(); + + private: + friend class RtStream; + + RtStream *freeStreamList = nullptr; + + void QueueForRelease(RtStream *pStream) + { + pStream->next = freeStreamList; + freeStreamList = pStream; + } + }; + + + inline void RtStream::QueueForRelease() + { + pool->QueueForRelease(this); + } +}; \ No newline at end of file diff --git a/submodules/pipedal_p2pd b/submodules/pipedal_p2pd index 5b037c8..862a029 160000 --- a/submodules/pipedal_p2pd +++ b/submodules/pipedal_p2pd @@ -1 +1 @@ -Subproject commit 5b037c80b0eab465f5635cc45fc4eb1ccebfe433 +Subproject commit 862a02937db00fa0fb582dd362089404c46ecdf8 diff --git a/test/Lv2Test.cpp b/test/Lv2Test.cpp index dcff663..e89d014 100644 --- a/test/Lv2Test.cpp +++ b/test/Lv2Test.cpp @@ -19,7 +19,7 @@ #include "pch.h" #include "catch.hpp" #include -#include "Lv2Host.hpp" +#include "PiPedalHost.hpp" using namespace piddle;