From 02021ba8058745b950ea97f47ac60eadef5453cd Mon Sep 17 00:00:00 2001 From: Adam Bialogonski Date: Tue, 4 Apr 2017 19:54:50 +0100 Subject: [PATCH] Rendering of radial progress indicator Tutorial shows rendering of radial progress bar with use of stencil buffer and two renderers attached to single actor. Change-Id: I906141bcb508f4dced064fbd7532b1ff5c48ea9f --- com.samsung.dali-demo.xml | 3 + demo/dali-demo.cpp | 1 + .../rendering-radial-progress/radial-progress.cpp | 309 +++++++++++++++++++++ resources/images/RadialEffect-280x280.png | Bin 0 -> 33183 bytes resources/po/as.po | 3 + resources/po/de.po | 2 + resources/po/en_GB.po | 3 + resources/po/en_US.po | 2 + resources/po/es.po | 3 + resources/po/ko.po | 3 + resources/po/ml.po | 3 + resources/po/ur.po | 3 + resources/po/zn_CH.po | 3 + shared/dali-demo-strings.h | 2 + 14 files changed, 340 insertions(+) create mode 100644 examples/rendering-radial-progress/radial-progress.cpp create mode 100644 resources/images/RadialEffect-280x280.png diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index 843f862..603628a 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -181,6 +181,9 @@ + + + diff --git a/demo/dali-demo.cpp b/demo/dali-demo.cpp index c3d5a6d..7a43282 100644 --- a/demo/dali-demo.cpp +++ b/demo/dali-demo.cpp @@ -85,6 +85,7 @@ int DALI_EXPORT_API main(int argc, char **argv) demo.AddExample(Example("rendering-triangle.example", DALI_DEMO_STR_TITLE_RENDERING_DRAW_TRIANGLE)); demo.AddExample(Example("rendering-cube.example", DALI_DEMO_STR_TITLE_RENDERING_DRAW_CUBE)); demo.AddExample(Example("rendering-textured-cube.example", DALI_DEMO_STR_TITLE_RENDERING_TEXTURED_CUBE)); + demo.AddExample(Example("rendering-radial-progress.example", DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS)); demo.SortAlphabetically( true ); diff --git a/examples/rendering-radial-progress/radial-progress.cpp b/examples/rendering-radial-progress/radial-progress.cpp new file mode 100644 index 0000000..69d6e46 --- /dev/null +++ b/examples/rendering-radial-progress/radial-progress.cpp @@ -0,0 +1,309 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include + +using namespace Dali; + +namespace // unnamed namespace +{ + +const char* TEXTURE_URL = DEMO_IMAGE_DIR "RadialEffect-280x280.png"; +const unsigned int TEXTURE_WIDTH = 280; +const unsigned int TEXTURE_HEIGHT = 280; + +const int NUMBER_OF_SIDES( 64 ); // number of sides of the polygon used as a stencil +const float INITIAL_DELAY( 2.0f ); // initial delay before showing the circle +const float PROGRESS_DURATION( 0.5f ); // number of seconds to fully show the circle + + +/* + * Vertex shader for textured quad + */ +const char* VERTEX_SHADER_TEXTURED = DALI_COMPOSE_SHADER( +attribute mediump vec2 aPosition;\n +uniform mediump mat4 uMvpMatrix;\n // DALi shader builtin +uniform mediump vec3 uSize;\n // DALi shader builtin +\n +varying mediump vec2 vTexCoord;\n +void main()\n +{\n + mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n + vertexPosition.xyz *= uSize;\n + vTexCoord = vec2(1.0, 1.0)*(aPosition + vec2(0.5) );\n + gl_Position = uMvpMatrix * vertexPosition;\n +}\n +); + +/* + * Fragment shaderfor textured quad + */ +const char* FRAGMENT_SHADER_TEXTURED = DALI_COMPOSE_SHADER( +uniform sampler2D uTexture;\n +\n +varying mediump vec2 vTexCoord;\n +void main()\n +{\n + mediump vec4 texColor = texture2D( uTexture, vTexCoord );\n + gl_FragColor = texColor;\n +}\n +); + +/* + * Vertex shader for polygon + */ +const char* VERTEX_SHADER_BASIC = DALI_COMPOSE_SHADER( +attribute mediump vec3 aPosition;\n +uniform mediump mat4 uMvpMatrix;\n // DALi shader builtin +uniform mediump vec3 uSize;\n // DALi shader builtin +uniform mediump float uProgress;\n +\n +varying mediump vec2 vTexCoord;\n +void main()\n +{\n + mediump vec4 vertexPosition = vec4(aPosition.x, aPosition.y, 0.0, 1.0);\n +\n + float index = aPosition.z;\n + if( uProgress < index )\n + {\n + vertexPosition = vec4(0.0, 0.0, 0.0, 1.0);\n + }\n +\n + vertexPosition.xyz *= uSize;\n + gl_Position = uMvpMatrix * vertexPosition;\n +}\n +); + +/* + * Fragment shader for polygon + */ +const char* FRAGMENT_SHADER_BASIC = DALI_COMPOSE_SHADER( + +void main()\n +{\n + gl_FragColor = vec4( 1.0, 1.0, 1.0, 1.0 );\n +}\n +); + +} // unnamed namespace + + +// This example shows how to render a radial progress indicator +// +class RadialProgressController : public ConnectionTracker +{ +public: + + RadialProgressController( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &RadialProgressController::Create ); + } + + ~RadialProgressController() + { + // Nothing to do here + } + + // The Init signal is received once (only) during the Application lifetime + void Create( Application& application ) + { + Stage stage = Stage::GetCurrent(); + stage.SetBackgroundColor( Color::BLACK ); + + // 1. Create actor to show the effect + mActor = Actor::New(); + mActor.SetAnchorPoint( AnchorPoint::CENTER ); + mActor.SetParentOrigin( ParentOrigin::CENTER ); + mActor.SetSize( Vector2( TEXTURE_WIDTH, TEXTURE_HEIGHT ) ); + mActor.RegisterProperty("uProgress", float(1.0f) ); + stage.Add( mActor ); + + // 1. Create stencil renderer i.e. a triangle fan in the shape of a circle + Renderer stencilRenderer = CreatePolygon( NUMBER_OF_SIDES ); + mActor.AddRenderer( stencilRenderer ); + + // 2. Create textured quad renderer + Renderer texturedQuad = CreateTexturedQuad( TEXTURE_URL ); + mActor.AddRenderer( texturedQuad ); + + // 5. Animate the progress uniform + Animation animation = Animation::New( PROGRESS_DURATION + INITIAL_DELAY ); + animation.AnimateTo( Property(mActor,"uProgress"), float(NUMBER_OF_SIDES+1), TimePeriod(INITIAL_DELAY, PROGRESS_DURATION) ); + animation.Play(); + + // 6. Exit the application when touched + stage.GetRootLayer().TouchSignal().Connect( this, &RadialProgressController::OnTouch ); + } + + bool OnTouch( Actor actor, const TouchData& touch ) + { + // quit the application + mApplication.Quit(); + return true; + } + + /** + * Generates stencil mask geometry. Geometry is rendered as + * a triangle fan and occupies square 2.0x2.0. + * @param[in] numberOfSides The more subdivisions the more smooth mask animation. + */ + Renderer CreatePolygon( unsigned int numberOfSides ) + { + float count( numberOfSides ); + + // compute radial step in radians + const float STEP( (2.0f * M_PI) / count ); + float angle( 0.0f ); + + std::vector< Vector3 > vertices; + vertices.push_back( Vector3::ZERO ); + + for( size_t i = 0; i <= numberOfSides; ++i ) + { + vertices.push_back( Vector3( -0.5f * cos( angle ), -0.5f * sin( angle ), i+1 ) ); + angle += STEP; + } + + Property::Map vertexFormat; + vertexFormat[ "aPosition" ] = Property::VECTOR3; + + // describe vertex format ( only 2-dimensional positions ) + PropertyBuffer vertexBuffer = PropertyBuffer::New( vertexFormat ); + vertexBuffer.SetData( vertices.data(), vertices.size() ); + + // create geometry + Geometry geometry = Geometry::New(); + geometry.AddVertexBuffer( vertexBuffer ); + geometry.SetType( Geometry::TRIANGLE_FAN ); + + Shader shader = Shader::New( VERTEX_SHADER_BASIC, FRAGMENT_SHADER_BASIC ); + Renderer renderer = Renderer::New( geometry, shader ); + + // Setting stencil data. We don't want to render to the color buffer so + // with use of RenderMode property we specify that only stencil buffer will + // be affected. + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::STENCIL ); + + // Set stencil function + renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::ALWAYS ); + + // Stencil function reference + renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); + + // Stencil function mask + renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xFF ); + + // Set stencil operations + renderer.SetProperty( Renderer::Property::STENCIL_OPERATION_ON_FAIL, StencilOperation::KEEP ); + renderer.SetProperty( Renderer::Property::STENCIL_OPERATION_ON_Z_FAIL, StencilOperation::KEEP ); + renderer.SetProperty( Renderer::Property::STENCIL_OPERATION_ON_Z_PASS, StencilOperation::REPLACE ); + + // Stencil mask to write + renderer.SetProperty( Renderer::Property::STENCIL_MASK, 0xFF ); + + // Set depth index lower than textured quad renderer, so stencil will render first + renderer.SetProperty( Renderer::Property::DEPTH_INDEX, 1 ); + + return renderer; + } + + /** + * Creates textured quad renderer + */ + Renderer CreateTexturedQuad( const char* url ) + { + // Create shader & geometry needed by Renderer + + Shader shader = Shader::New( VERTEX_SHADER_TEXTURED, FRAGMENT_SHADER_TEXTURED ); + + Property::Map vertexFormat; + vertexFormat["aPosition"] = Property::VECTOR2; + PropertyBuffer vertexBuffer = PropertyBuffer::New( vertexFormat ); + + const float P( 0.5f ); + const Vector2 vertices[] = { + Vector2( -P, -P ), + Vector2( +P, -P ), + Vector2( -P, +P ), + Vector2( +P, +P ) + }; + + vertexBuffer.SetData( vertices, 4 ); + + // Instantiate quad geometry + Geometry geometry = Geometry::New(); + geometry.AddVertexBuffer( vertexBuffer ); + geometry.SetType( Geometry::TRIANGLE_STRIP ); + + // Load texture + PixelData pixelData = Toolkit::SyncImageLoader::Load( url ); + Texture texture = Texture::New( TextureType::TEXTURE_2D, pixelData.GetPixelFormat(), pixelData.GetWidth(), pixelData.GetHeight() ); + texture.Upload( pixelData ); + texture.GenerateMipmaps(); + + // Create texture set + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0, texture ); + + // Create renderer + Renderer renderer = Renderer::New( geometry, shader ); + renderer.SetTextures( textureSet ); + + // Set mode indicating we will use both stencil and color buffers + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR_STENCIL ); + + // Stencil function - expecing drawing only when function mask matches exactly + renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::EQUAL ); + renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); + renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xFF ); + + // We don't want to draw to the stencil, so setting stencil draw mask to 0 + renderer.SetProperty( Renderer::Property::STENCIL_MASK, 0x00 ); + + // Make sure the quad will render after drawing to stencil buffer + renderer.SetProperty( Renderer::Property::DEPTH_INDEX, 2 ); + + return renderer; + } + +private: + + Application& mApplication; + + Actor mActor; +}; + +void RunTest( Application& application ) +{ + RadialProgressController test( application ); + + application.MainLoop(); +} + +// Entry point for Linux & Tizen applications +// +int DALI_EXPORT_API main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + RunTest( application ); + + return 0; +} diff --git a/resources/images/RadialEffect-280x280.png b/resources/images/RadialEffect-280x280.png new file mode 100644 index 0000000000000000000000000000000000000000..b3423daaf9b619f7a41c749d7066e8eb6c87db83 GIT binary patch literal 33183 zcmb4q^-~=@^Y6jk-6<}`-QC@t;_mJo+?}Guy|_CZT#LIN+})v+`@BDV|A0H0O){BD zvf0TbyZhOVQB{^fK_o;3001a*vXbfm00jR32p;yok*LJ8`2QMMGX)t*z}NpuVQ)p+ ze!2m+Av>%TbwI1f1`DY!joXbed9c*ZI%0Dv4ICn=`svvJw$>tm!7 zc=M@ee-kL3S27VxGByyyk%BKCs)0z2eFP&8?;f}0W-uz=Q5IeS#d5XS_ws)Fyz{)E zu&K~ds?_0#n2xHB6h4Q}Zh~PIjU`KA?Xk}rW^T|HS;BF>_wuiCg@9@*(L$lg@@Ds; zMuvY#_~TdW%D?Ly=SW?%80w7w-^%hxis>;Sw9=<5!xm!rFD3Fi-wp%u^Vj-R`SiS3 z!rZaS0eu`{nuA=)W)R|u&|!sn*XFF5{7+4U4wiOxdek2j2Hv~&nEcpxDwR63Bt zWiIiq?Ta>q-lX66-xh@+>3kBaJTx!)o+Wr|$OQW13XLQo5*-nU4TN0C3S&gCxciWa zK#zb-=d6&N2XDR4$0mx#DN2Z&Vz%EViU_UXuE-fSu&51RRVtZ?}{U_qTf_vNt*%rW){TbzIjsl(IZ2^%r?bR z!Ro4KIM&eS1|e+sp6r#)m|2x)>dz^ZZN&VzF4fo8JlW~AoXJlAED`&TV24>aml~oM zWm_zoy9z<^L4a5){PCa#C8c#CLyw|HMWv2as-a=A04G;QTe5=D}2tg0@#VG#5gG#u*V_oL-3$ZAX!G$ zSO%1wpqCX+1)_Q35yhYgF>+Q5>?-7bKk4YXp!?4=!l+@d!$C5LOU?8YP&yWd;seC= z`F}hJKD$Eop@>z(mrcNDlDt#1hJ$*!%DQ6iNMj9wH=o@NxXKF&?=9@Q8$#|YphVUP zM*$>DWNOj7{9-UJR-{lHd|>E^VMr8^&@G^ej}13X0kNppYgIGO}i z(7x+o&*zCaP*g`k!(1*XH}peZgSc$+%0~d{ptF-Je?_Ymm;qxTjxC^(w0NiO4RT-J zU`vth@LgGvsgu}xp7&{3tgdpV;GcZc<1Q-GyKcj#zbTYs+t3cXGIS{8$SkWW!_+eH zDif?Sa%k+RRQ2Hf6#@zSiz!3m2-u0@m^V1aqnr1jpfn&)tMS+Au%5389de3|0+ffC z(;*k0o!dVhD8wpg`*QpmqL*R)}(LU^7II`!{~1zj#Hwcx5UQ zvXrJnhIHs_XIf02N->4m6tSd|d?Mcv`{1_B0oH3#A(aCda0b#P$A;LVZS0Z?N(t2e zF$`dhn%PUv@~0sI@q^23UfjC6jFqu#zuk6ME(^eaqEeI@;Hg2!0ws&ZW&Zg#tqY}B zC$S5&!TzLWVzljuCaOCiRMi+&ZMwD0w|s&LxpnEcrk7N8%Kg1;BA_R*0u+wQ=fX>w z$df7a;2()WfmXxBXn$M8F4O`Z{C7JjHiUq=yyHttvoUtNP^5t8H9kb9V9n-NWOKyG z5}%h*Kywa2`n!Sa6^uJ!1H_u7%5Jq>S0<}aZ@yb6ni!FJ6+2-}T4l2A&s$6^*#@#d z!ZZp=5`oA*Tfg}Z8j7G*R+k*Ae>ZMDmpBGYgyMBJ`rC{yRiaz?0;~WdR^j4UYs8|k zuqGDJ&`0aO_QSV^fOl#SPiJx6xMH;a{0i+0a^!_k4IG3GwP;j1TC~(Zf>Eb%1iKFs z)zU(aT2-l#KhU`#{R-Kv8;1eSh=5U3Kng}gFQd2kJ$31#4%SL=3|$A1b-bwb4|NSp znK(8?VjU)*0K&OQ*r~8TT#y6$I?qB6y5^80hqsW{$3|>p5pmb4Tj>=!YqS-|pf)wq zmIBg&w9G~b6mHf_Nn3nz8&ROVUcdX=C}0-kv%n37cR<4;;Vz7kL$?G}z~*mOKBu-) zy_WEaxxt*?Qf9($Zp(S6!$cv#;g0uqMrNh$LCyv>Fq=@izz9|JVx+iN%^p_4k%X)L zJ`=|k<-_RQ;yCQiFC_d7zuVr0$RC#MT}k-X)?dE1(lf=4oOX`>IyqON@BR^ z<{(8pnV5l}l)I~e9{vqGB7-CvQXFC%%>m}Ub1*^;&sWR5XSOHSM}j9R*#1lb+C{HOeSCx`xt$ zu5NI8^$t^fN}WDwU#TN77eX`W6KGhkNYh*pJ$4r+Q>A#*fE|>n78uF+`>0jT5kT<( zkomYEh5}8u4vY&HboT%_zIM|2c5Q_>wKsmN5ryETU3W!?@5HCNXVX7nzUfh@fe|G! zVkEN_p8@hhYPY^~45T6S7-O2el6sYhcy9|z2a)k7z~|?;Hm2;cV{BYD;O!1_ zz!_#C8PAj7!gc489Up}prPv^y1a7@xg)I9g@5E(0Z^MhW{XtG>NKRAa4=C1^Rct6l zWL5>??1f(%S~gBi-(Vt~z?Puy)5-o2`G&-XYYZ4tj19s>!qngRPz=Zbvj%MQ@1T726AWoSaR|rV`Yrw#iwH?O77e&-$Uf99 zxOhfM4&(@u@fC4oW;W1wp(q`|5Y2ZX$mPO=OmJ8Iw@iPSpsRr2t)!55HJhBnu9JuN zv+55wmR5EGw+$q-jHR%2h>|OD#Rrc5$P2N1**G(X05%?|<=cHDfCJ6$omwkNbfbd<^5^9c64p(~!lG@pY zJcY%w>~{oPv63g#WvS3qYZKMzgP>lS8~mZGg6xp|KD{=JPxFpxwSv(t(Rau4V>N^(;ndMGnCeQkor4anCePKz8sqG9; zOk7P>?#+p*YDO58#CkQV7w7MVDMiT$U86d=t0SZch}J;cxA zc=4)WECT0nc?KD2nn|WJ$7!eN1zScczot%#&^R6U!~fb{Q-B#}BCk`O8;V}s(4bv? za<9R@*K8P|8`1|btFzK&jn65A;H1)XVsZg?Xwd_im>t)^r1aB|xW|82{_H&IqpwQWbp)y;y8ZH&~nPZg{^Plsv) z)6|z!eh{AjTi0aprBW=$rqZBx>!hVu4vesSQZ^4u3w&-i2l7cdvVwq-Dbk%lp0ug{ zsQqaoK-y5Tl&Z2QJC}0jYasXmG>hG|yK{#P^T<``#2O(FvQQ?wvik3FgaKI9IdFSA zqta`!o$y-Y|Ab?XSaMELGE%M$AT$LNMuk993zOt|vkN^Xp$9?jXojIdmy`aP@Om2N z&WdCzF`b=ji;8IS!lh2e>d*zVlvQ{uVot~n+`&*6d(au1iO=}V8$ptx^G@}A5jv9w z?g)upB7UF1Z!l*Y!-js(JpGGA#3v1=uCB&1u;HR*9r?)!&3wk7iWNuFT z+0vqoch>#@3!qz6-tI1P11oM|x{RK(HaH5xN2vU|oyjC>aOwRTT3os#>>^}7$fN~D zPnt+NPRH~Y6ScoXiE&3%)yA6)9c%(3m)AWjz61F-D?^hsxOw8KCyCAnuPhq{C@xdz zndk8gC|l5pDP}PfOzLagi!u92qcSRO%-HstX3sNVKVc1r@nko-{1jd!eF0BvL~-_+ zoSp3)8Z2;I%3e2Wu8pTGi6i&QdpirlnOlXE!y80z31wy1{Ur|y!BiBnuaBuOSrZQy zaUg=xP`wT~-2mj#S4QBL45u5;6Eb+Ny?nn_YUspJpc^AG(WfH7&_v`#di;6#prcXM zm)ejaC0X(-S@GSM_{LvR=`WHCkE%oZWjutH7NlZ{hS|3mdPq+``_-V-i5R7&Fk%YC z)#_CFB+8l3bku*&;0i?g4Me-@n9lE*Chy>y-SBMoX-#tY+)TN}U}{J?w0qk%1866! zWCEiJ~v0NqmC7P z7)5XDgsXZTl3Zp1%qAf#@bY&2*4nv^SapTR51T<=vf~aNgZ$4mQUVW4g$?FUmIL*< zf)T2pd$9c;RO{BvuMz|Y+oC)N8l_NL*hRT~(K}#TJqSbGDVRlzMzZ{6JIJU~2n#j4 z)}~>=ex4Mq1%*LEw=7}f8h{~Wv-c6%5~_1K2v%Ax*!s5-gOE?eMZ!aMc9MP-omn`P zj&M@=4(04cr(@No)}32H832)AlQSyJ19XZ zRm~5%sut9iFl~scL*BP7%1hsW%^9(?}WPp(H@kz5W1;5QEFtX$R_f{Aa1<@rBJ?KtuzH>TrI zCD_lLSvekj!P+nsO^+c>V@M{-#k}}stVcM;Dmo`om2a8k`{czgTZCtcP}9?fXnU)y zFkz5W+Ue}Qazud{D)L-s6s(scMsSHDDpSXi62`{^cu4GOYuXor`*VX|?jgc<280ki zkbSeD@R6Ts9Bq|FtlU7O?>Qnc|8`X$@@cp4)a;hI!qr0IqePi2D%!)s;M^eFOR{+N zXv~*?LrK&!7Q1d5p&5$l{4>{N$W)_$DdeOQD4%!|9G*T*Ko1~z_eQ1oqZ}O}#ooEh zFnXy5#{*4*FA#&6@KB;wD84y%C9%1xWz!?g4~f&#yYier`lSp|wh>m5d3J}24j>;I zkG5o~0LHI-rM1C6m`fh9Xyp78XnJGo8OD}Wt$kGg?eJ~)K@BW#0)>43wrN<)tapTL zRXLAE1=W*1Gn2%wwGj`Enux1e9IyNtKN0u^Z=GN`npSpo{Mkmj|BYal);D2!8&^}@ zz`2^Kj2+QH(R^UCh4`3{?-4%%f-u$rst%vemezNrG=9#Gx(3||XkA})QJ+m19I5!? zAM?9kmM%xXHqGymp~+}Fo#qQyx(`{Aqxvu^b-7JSha`*u(lYb}oz6zl@crZT`fV0l z;ercR(`o;OE1q+wo*{&ZcxKAK33mB?aoierx3_k}MQfLr z4E$ci!-JoqO-<3^%9@e}+wlvCNOm?M?A`!E5)*}ZXSNlU0!i2ElK1JGLWYK_Wmw}w zGkekU$(;EZH3eeQh8&Wl%oa|NN!-IKk4@`0*I{ksw6Xn5C*$WZ>`LEK$ePReC zw}ojKNu=K)+C(SA!rPwH8%EfFjlvt$pEV?G6I=0ea}}}? zCV4JBXPdc^apbeHApgRAKi%W5H(RO{Ld@14H=0)bBr85;?iof#2d_4#TNx|LJnMt) z3jOiR!i%(cto?p6tK;IAHa|#cekw`w7KVG+#X5}jYcK?%rioG_b8eI5NPLhLJT7p0 zVna9q$#zlgo4_#>GLNi)In^Y>FM%t-JnPmBhlfc*pBFDgM+g_q$8(_PslrfFA4;j> zK6iyNS1qI@Of>8U$O?2h?6@KfpWF=%*)cA@%?r{ET_c+6zy zF!2QHKGT0Nm0wm0FN%|lb@*p{+c$GK&<{gO;6TNgINcg3eDk_iUtOuRn7^o#GpuOE@TlF-~OXlM_TR+?bpcega72@Gc2B3n>cFDSx5x zzj3j5TE~w_8(K|TFKoYj18=MH_HHB9B@&YoKuuGKm1CUT+qvbDagpF$kkFB&%Bh5q zmKpvfrZIKx+I|LI=5$tMAWsijd5M_c#~IpoCKEYXS{kkK+f*rBf$zkJTBVI-;u$yH z$pcxiPuvvzQRW z>D&9+SIH`&6<7a|r{{`b@(L}3T`zU%!qjke8yGT)#H?}iKRP>`sF*nd#!*ZF_!9IS zd?F=2VE2x*`aLQJc*NaV)!%*ThA*w4pYntcl@w|5uKP1*2-i~Tx+0Q1w+vnWB4V8Z z^iOuQp?A1adwJmoU2sjzq8M#KYa?a>RG+gviRrca0P(-O)e^`mJN|jBo z!UR1(`wN>ZcoBq#L!2(fGM8$UO&f++RXCik&<*rBiK5eCDbv0Zmy_h@O4Rn&U=Akr zaY3g?orX>8VE8fw+RE(Qr?K{-xm9T^#@nT1gZxqncM7GD9k00Svh>*x;0inPForb; z?Z1R23=TXAa+_sjM89!>!ZhQ)@Q${W7y<$4f9+_OC#gM3MUV~Y=Ga=~Co6wdB1=Qz zrCt1Ww2~*|M(~2HLp+t;p0s%5Kh5^=3EvaqI6Lz$Wm*?x-Q4?PMQ^cbe1@txDA^>BhwBo$Pd6IOJdnqfpl{ zs-zwo_D^eZ50>ji0V{Xb0F5kNL}PakERQP_N10L~C!uTwP4-$a5-T$Mz@_Hm+D?;h zuA)Fvr!`TjMsgE3!I&SgWo_&VfVF{7FgD!9S?r^cPp|mYD{$;a73&Cw{MFRR8V4ZZ zc%KJ}fp>X%|J{^g`77~hl+pj>Nf{5oew88@0aapd&N-e!cakcj<5Ue`Mqy(Mf@>dZ zKe13rw-m8`Y_1N<$`Std(^P(OV0+QG&A|N3s{Jl4MF@Bv5+y@UYEe4y-$6?fvJhra zckJwOjOjt~BGyxqT0dd#LGQaAc}s6NLO;OtFeq5h;GG%0l3!-TZ}OSgyXk;6op`Dk#B4##(X$C_m7}uAG5JhzQ3%l7vjsX0Xlp^rXLQDs2ypV2kyxuPb+0EkEiXioxotEPn9(*8#~m5aB+t) zy%vXpF=F-wKs4kQn;l^jHHX(aAqn*N4xfxpDx;21X0Xy+2JD=P6eXzKr!6URp}q4? zk_V9jE!*CN_Tza+R_A5*&rvD%(LRAik2j<<8#xCwa@9%%Tj{iCds7t*V+}P zt(qzUSpGgQShmW8%`|z`v$~XBAUpe?Jy-;rowPZfS~F!s%_RS%%p}wQ!HV}wiq#X; z#*ZOeUi87~^B3cFy@b)!nQvLMlycqbdzo4wNXw#IMB34cBcwpQn~T5sg^lfr9*l}# z$q?xnujtV@_`v?)Jlo~2+hMPl` zG)>)qoSG=#f&7I^DQ}hbfn)vt-&tEL^Yds1(kb2nm^~qM^5{~bnRHmtFPK`+p-leL zaLE{0qS#^6sT32Y`EB$4VY-VHAeA-=9W;;Hkb+A9xGD0j`b)KyG2;jlZ-^N2lg@-} zU`Yhy{pG+!X3HPM~=_8a+jY)2Yaw?z#3xh`C7(Urp!BC`BV4#~a`mzut0XNpH{ zrv_L)gcD{yn(km9-TEi8_7gtuV`t}Vi^xVOsB`SoU!Y>#MGTYN31S|SK7>cU?*w&T znTmY>w5djq!%C;A-Ze}#y#N1V0k#P|Fk3lS?+1sC^pe$;0=IG1dVm4fJak$!A7Tst zk^Jq>u?0l%W?hG;@qwC1z;{0S+T;Hy+*=GG=pCiDrRG{OXnn{`Yt!tQWLo{WVupK{ zE|L)J`niH8-nE#g&@8x*a*hDrW&d+h|`FrdbK*o za^tC@7?*AO*s{%#dXS4Rxw3IQb;gLH);)qMr7S|zj|$Dr$b)n>crFnYrT~IdG50H! zx>K(H1?16&%+is&;0f$bLfWjAbE%vWa^PB_H zGdWch!A=Scko^{!No~ze9)`?1%msNVap-)Tnv{EC_#ZMM1wdU$ySrp>qiwWX%T)TLARae8lC?x ztihi3B{+Rmn|`^!S9}|p(t5B1{?i#%qgNfy60kQ9siD-vHyk~lE&(LulA4nhDKn@5 zYm?vj(_L0N2w`lN{~0GkdJB!m{V|ygv2If7SkVU=&^xqq2>W^A-pM%D-woQb`gww9 z8&YA-?*bn>w6S6>O^fLiGsESTD)p=m;3EHMRu3ixZ;e{vPTIUj(B^ZTAa3f$LO<6# z%hX=^PT7Tu(yfL&ZkoZmPn&}hM-PHrVeTPsa7N$yP|B?gBFy<1U>gGkwp^fk_SlC|)7hC47;rj1 zoMdUfWrkc6A2ufkQEok()BR~7S7VbA#2VY_Ta1;+fV7@W;ZctLvw!4?28JZo?fgH(3z+=s8A3W`ESUR^kRz+al4TViSM56?H)f0} z)`13+z`x@ggr_c3tRR!D8M7G?4Ysj}6jS-`{2xH2iXU0o80Q(b%Yl1Uy<-+gu>{ja zdaI<-)(&hj-U@XeV)IT^yeSKL^(AbeM15*hviFso?4cmEO}C z(Iobn@w4=eaXrt+pNaMoRfsZ*9ST~0quKN0dHvn|63NPDi zBoFlu>JjCt*fpHn-8Q9YrC@{Im0!n2qA9o zppAZfqG!oX76Z^y0Eb0=Hg;m~M74c!r?zYgS^IuoEx%!A$%{d}H!;U@{s{KM647vJ+Zzx_gU z{_iZ@6!I!O`m&7u&B%nOHuR5O)SC$RJ!u&7BhfQO8|(gI{4zUkvE5_4?j+h6GS+-fyrp01_QxrOuyqRztWG~>F=)+<7;eTVgz1EeD8VNF^JvQ3P16=`lgxJH zgcs5HbHT?qQ?|I=+cw??{w^eH{P2b%FNZC%nKk03AERU3>$7lv$AaE1Jp*8ZI2oWU zhQje1=mf@OXjS@87G;p?Rbh%GudodjbLTG$b@Zcd$P31Yl(FEeOtRi0PKT1TZI)#3 zO$#N_Ln8Bs`Cr~A?rpxMOz}B!-os70e3z{+f+PD(rR;F3{F1{ZhC)a_d<|9|1Za!5 z3?wo@0!XewZA(!r#Q_{d-rSu&9WWf9=pL`7U29Yb8DQ~_pG7Fnb)gn_;i~-?lgzyI zaJ_z9q-fg(Oh>hy)VcKeY48y221QVaq;*frRHdql_-o+r0sKTB32fWHtSYlzIshU# z)k(=G)C=v=CszwrN)WmMCBAJ7xi6EcPYQ&1VTn0U*}e`C!SY(8@%vBRHu9^hmg1F& z?!XjB$uy&AUoiU$lA0&=`T$1Xw;sdi~4IVWJdu%aMZh}3-{@VOi&#)+XT-sKrq&XxFxJ1 zUT8P@jwN~xUdDh`j%w^k)$e3)pUZw>Ubzprh%zr4J3*bU33098wm%>6Au}`-x##t%tH)o`K4}7}hFiWEOT^M-#w(RmN|1q`d<&k$bkAz>+FTbN*S-aY7ti>+Y+> zcn#oD0WD6h>vBa#&zJ5pV@Fj%&Jjq$3gv9k6Ka-cR};ZdIU-P!`q6J677F~ zN?Zf<7Igoowo7X(Sp@6-kPnj%v>CwPaYx113VF2_$P4{M+`F9#WncU5FPP9nf#21d z9sbdD+&*i8iXL7f`X`b>Abyx0Vv1hp3qvt;+RO%}lT+~X5fZh9LCJcwAz8MNbPxvb z`(+Q=U!=6o1WT2RE^vwruGdb|XKa<&qO9v0N8|4$%GPn${Q&2P(NYY+68w3Ig#fCq zCEl;c5s-p@kK2FH_dh*Cbr&bdS{CbaAHRn@2!W6rsHe6e6?&XApUb-7H_X=%ly02{ zFQ&`fEOR{DkN$qL{C}ALVQdU|8s~c~U!Hqnew)tWn|-G29RsEK4jUGT@nmu&xm^TZ zP24NeVnV>?l@Xp;oSot|`^OK-dGkLyR;ySZuJ}= zaq4?Jo%y(RDzb{x=9)B>mr5prw(V}eB(i5LBiKmI*4kSk8=>Y%8e^5}7s*cZn6(~u zJCwH#b#E5q#J63%9+&H5rIxF1m0`y&=H5inifN4_I{y+1;^Xu=_8# zCX||p@C(n09k2E#m%%;Aa(6$ za>|Ho@0*pFNSj4pAcoBszL0P$4>mSYFDey!b1i~zmZiMWW|M%>;T2_J_)GoQZzrD% zlv$8-wH+zZ2xt3diOP$OIJb_FB#aW`?7*lWc0vFgz_6X|(&BckH*yZmv`^8k87 zDfF{o89mex-QWbq9r2EX4C_En=T8NpuhGCCHw}PA%4T)7%s=DZS{ulMgwOUSDDu6( z{Di_F1&z#iuhmSxYIf1v!;M_m-B1LZ$!0c9wr3L|vgcr%`4UaJtm{HHuR{%-^l~0{ z+>mZnvRYQX9)kQIBO?F8f1C8HH;-^OlP#c23yj_XOD85x%i~WeDmppPwSB{hF zt}=+}Ht+2?%lx(gQS7?S5ON9aHQ+)$`tyKx^E#}%K5UUc;dimaX)ylaW4c<*V8hYV z**S3aN9V2hZd6($TgSb8bc>Sb2tZ#q%x;3cYP@4mN-RCfIlw(1(d+Y$u#R;GkRC#d z;kEClMd6A*5%Qv5xcRJX_lT284VT4N)B*YE`kwQ{Mw>#8D(>~EfGE(Bysev9hG@E) znKKVU(11}G8Jtq_?PutY@whQe`?eLc560%_e8|IWl)yD#*P`&z zfCuVKu;>2Zb{b-+5L%U)O6c{feaw%*n)W-}C}i^G)OPHnH( z&-KS(JccAxF8mT-xqLZgM->8?v=EnN^)3Z2A9#M%rc}dzgl)&Qn0!^1Yqe>=^RE56 z)SspLMc$ArHpJ48obO}ida~V1G;>+9K3HuWWe3A9*Rij@8Ht9)(d^2!^*0d8Pt2w` z(FiW+Nj(gcu*{H}Wt>HzO0zF7ipf6SJ-*!yT($s7eyCa7E=UgwLNFLJ529)>y?nSJ6Do9KS#%E-tT{2muSIXy%>`muof-cg+50t_^k0qyeatRIl<@% z&pZm2cooV}#tzHH(#Ie-8@ggeRpoxh^vg~>(hRgeb$8Bd4>06dc zz+hKTZH3Jxz0Z25`_eD9Q-MM2$6lyOYJX$$yik9#xXfoCR($iQl#{GqLBAviJ%BZ< z>K!pC$@*}s{@U64q(t#dg~^ZU)pr#QgKX%s4 zFeq;OBbD|lOMW`G6QQYM6Ksyl>~Md5jE)%~q?$sb3ECq1utfTDfsS9`_COx?Cq9II z{$GM7*i&v$iU%8kzZ{_Jt- z2g{>UGE8H}fI|IHq9m?*YitINHjJEvlx#-4UR=SC0PJkhUh|)`LBxa7Mg$HW(ikx-DT}GM zawMS1)&g8+CE=G(rK=l6e<;2+DQj6^Dk6J1riQ;SJrXDP9}{CMRGvLNtn92|H6?icnoN z<2v6RgY6&GY?XKiQX1XzYv`S^?l-=yW=0$5kGv=I_I>~~+~ru?st4b+m&ek=y4=j~ zxf=4)kj0AzN-z8xst!8XoKb^w%(5mbEL z%0FszJq*6yoi-qbX0yUWXXjIf-WsUl>;6T?icGy!MX0{yPX6Ydv}c zFO56^Qd%%?(HXG-szzaT(6h+CT zq2JCzfRlAwSv=Oj_^AWe?_aFambIBHa|Y)Qn|zQ&{EjEJx)~CZ)9lgGIp6yJq}8%%KBx5XvR$H;(44IF;N0X*2HbCU$na&@DoYhKG?FVw|vv zxt8-;yt{_4#te!YO@rzU^K{L=vL6cJa(PCVB(KAccy4AzQ$^+RkyQ$8K-lw+9VbCY zbyy1G^8vy_XKkF9GDv)T1w)C}9Y=t4$cm*254fGls;82Xx&*9a&`r6=gb^m!o+XD* z>Ni6o;IK!R+uqXmvex;Qu$l$vj`YKRD}?>?hf_MXOebpT7u&`Ab`s<{^p2BwzYUWc zp~xx3O04=6Cfvb3&HJtWn{)!bVf!#puo|5#SyxKmm(K;%=CoWszGP)?` zw8;LagyZ)JNbI;;1Cxa?viMfbN~xH@ug!m39W>%>Pquvz4MMBMPLmIby2sXj?+x+J z*lMz+K2~V*Iv}?UyH==GqalhMnD4MA_Z>0BliJ0uzZlByc_|we-aF((wtBWJu~Lj8 zS}*u$>SuC)m~IVktfa5MCp|z7p7fb6<4^nZI6JWY8fj|iC*+<7C3LH!gNT?7I87p0 zSk3sbqkrhy{o{?1Tqcj;rAplvU3CK}qRG`)6YOWprqlg=9=-4k&??;}3lHOP{5~2H zV}QGp-T2L*j?IX?SF-w2q6)s?bF%0JTBC*mdE=6n^wO`7iOw10-oTmj+R3q-L@*FM z_b}3QNZ!m!|MMBl%OP3hsI+&?>jslp0-Gfq?WXjQoJl9vL2F!nz|tPLogsj3et9K3 zaJ6f^W&L;TD|`kOiJ9B=9?6^J4Knzz>%~A5*hQLU>#qpzj9^_aZn=E&L>B3?8uapc z%JzO^O$+pFnxb~D{Lhoakewqyma<@diEZ#*4?_csG4Oze>=p9wYmxRy&{#wOY^-I+ z9?V7xwo_;rToJ9cCZ)sr)cl8W2gc_J-p~+Qdwj3_kgX9-#c9q%Qq2Ym+EBq4p9N-Z z27?%U!B@Fw+{@U7U+DM)ukr+yn!T!1h7|N>XB@8@Pcl~w3r2@A4sYQ`v9}DaLcf_F zyVhCkZdhKh_4%2Z7)>qsQ)j?gJAtQC+iAI9scibI>(9?Q_*ndc(Eitwh`jgxI22J! zcj-T_oF3joPpd=L!cYw1g{Z+dA*cgN?fe9s_mzX=>2~=3;0Q6M44h0kOykz|O06^_ zW+FwFN{2=4lMZT7`N*Gp!jYAa18DY>Ur@V&bCo=%Hq0ioY+l(Om|a~;Kf4TPI$DHQ zL*r{NFkxu~mAzmFGl!d0SRpe;1G+{M8Bv=gzrK58_ge__$hO_ngksn0(zLFEytLCeG zp-lj5=?pb_uhNegbLjxmuZ+i@22^T-Y=;jjwVC`hH;rU-SRST1Tvqh%y7EBk)QIwQ z2G$Iz&~u%{$mMZ#4iRnpo(OoVN8A#M&N#>{R+ro^U3}b_ z+?u?(rcY_!2UeVG3vTAQ+2YU*)ar7Aya{Al=v-S z^#7OMdPId=pzm1jyB*c!fLu-#vvvGAnZO0$q$s^3nBt@4E!t~1n05KT{Mj@;soy#Z zN=}3^?S_CfZtvqtu~7Rgc9g~%*fZzP?qEzShP(9PCi2EU>1EXv&Ia(L#DDn!RG6(Y z9IwM8y*hagov^7J&jRO3CzKg5Rl7_Srm=shGZ0MXXtYGXgL>%yOKhXrB;yiHkLK0j z%ZP~1vfq|gBn0ZYT%?Ww6wS1gkZ<=$*g!S71dfa84px_2K{9b#t;d0N!69SAP4X7J z4v_Jwqt|+gp&A>d6;cb44ku%LGS#Yv-M6_bxv5BK!5B_mw$J`feFRRu%fO*E{L3|% zRb!sqr!AK_-yb3_7fFhaJ48F%exHqFCMWJLSM|g0efpNe>GwQb`lZ=c9VRSip%S=~ zeBTOF8pKR@;5Ps1&F|)K;YW!QiwOCeLYI>D1u;@_E?t22nuy+ShoTHR6-V3{7x_$Y zbkv}OAAJ{P2u+G@Qt_&(#}B9Xqc8-YpdGes+*2vim~W39Z&TVySNUS0;*!K+fu>8{ zVu4jvG~bGGWtDMPbM;G8%u8Od8%()%e!IUz> z(UG2&2JMAWXA{G2au-lnjaR#N8AHr)nrt8PS=kHkcY~|T7!XvMhdy?pHpzI#qC;g0 zB7gkjCH}>o^b>FP!_JbG=}+mIWMT%X2|8I>Y3){A;x>BqDlAlkYpq zoo)3l3Pm{upnEVB1GiImHPeH>_~}(d3I>$+H&_edSG?oqU9X?M1$d0J)x;*6{+Yc; zr%FnH9P*CkFmDxWR_nwOjyvK0tjR_x+O>@o+b)tt_)S~_!}+IC31OJ5UL4!?wl>>y z-C716{#)YpCw*vLcm!#9RbZ0qn(q`ZDUOXemuK z-R~e-BBh04bYpH{6{K48Vi%un4MnZE+7;uj z^FJSgsX)iX)L4hkKWzrG!uHQu&IRsxjUiM!^wnB|2fDLxpFC&69unj3*7e!iuCYzZZ&wtwg!L!RXkBrj(VM~zDLV|3~x~S83 zb>(1c?kfo}vGWCt&WpLX`zS|BQ3;K>?aK~<-={uDM-2P^3^y-9zFt}z(3KMFZlWwM z-fk$w6KbKEKEUbEe|06mJZ<*J_<}|>WLBTpG7gyKdMw(iDER!=0alnt;oN%&f^pAo?{N`a^y*y3`~+IKl*YHd016bXM;9S?~FPV{i|BkmKucv0$`dbBJXHDNGN zXRw{2w+%1$%R@+8=XfJty=J9eA(e_CWzx4ebylRt82)Fi6~qHRb}d1LM(-adf_Q|Z zVJ(^>{}&6;^g-VNrkp0aU*b}+T;b`RfJFI!0E|F$zaR(-Wpi(1%kV0d1YWYEL157M zz~u5UnE$`MH;=OGs_%S1`$TgEO31LV|D+wV9FL`q4;B;0x zo$k)-Ub^bHUZDHEkkw@9*wC?Y1`-u?Fa{fAh?L+M43dp)mrqjIEaeDvQxu5#m(ntpU@TRN=Y`{=6D}?~gBi!N-GnaIn=+W?%w=BT_h32` z*)a<U^)KjQjsRHY)@x+3&3$oXc*0u&Ua??N|Z8~6_oVBs66}WB@ST&TqV<;VsbA?uY7~b=H@U{(UU!3Q(8rLhtMtW&54;#$5^bZ5mnQGQ-J4|AhUir{ylXSq?FRR zL5a2Oti|gTyGI2A>ZgmrjN!Ud1~Csjw?L`5HdVb-O6i=VcrEw!uE%xr-2hwPuW@?Z z)a5B$x7s~Q>-l-|`Bisp>{@?P2_~hK&LP^k8H-GIB|#XUMQXPuPZNXLA%yNYx$J}i z{#68CVe_uyT0uF0VmOszQc7tVOD*~u0zp|jzjEO^P`w(9I}~!xB%yzt(}ZXzzzDhA z6qY3hMXwjfyOi|EKuRf{TdEOcskSa5473MHsenRm5*SnSKm?kH7pVeNM#$wRsnst6 zaR~eZzJCeu3>8}JHfqxFqBJ&0$2+A(r1N1uEfjS}n>t2NKn~x%gdjTTXbIWu7;tPp z1eE;{NiCjN1g-&!-SRe|*qAbzlu}y83?eG^MlE|CeWhHCWa< zL^4=bfW-uG(C~o8mtYLykO$OgxA$YK4q>1Tz2vS0`etlMDW#OsGNB<5a{>E%pyx^; zrvd)$Hi35lsAH0MEw&8j!0wc}q%=QLvs@{i zwV?pGntEeBVv^nqE(pL^Mp=9xWv&h7|LHK5&wM|P*PeL2yrpy=kiMgy8{cx=y-XD$k* z1gvYR)z+f~a6odSz|%mh%L(R4&V1f((&YHSVZ6>uI8GBUDB}A)4D??ulWHw&98>HJ z7keWb8-w0HXnW9Coc>$m0mwLT*SFxd4?#AsbMvh4pL_ZF9M~2No@EfwLPnp*_MStH_)M`DTz_DAn?jdvpucxSla$1bMF@=bMfm3^H}Z7%&i4jU$Ve8*qQZ&VuONQevJ0i z^H6Dlh|E)qwdV77g%Sm_Nnruc(laok4^~=$vj(^UD6j+Afv{uoy-D`$EDtO=W{zR4 z?1$n9;I)^S0WHtHjme2|a(Q^}-_NSnl_6tmNu}VNVo=I+sK;E|R-S{JIhXda2+x*J zao;?~s(WvF4yp!8ja~pyiZ)8#kU+CR7BjCuEh*9wJccIRflf zY)J;9~0f+-)FYqFHP1Xh97h0{Eai2o7 zDY(9H&prC{=#sSE#py7Y+-}ws8CB_3y4Lc%CpmuAl96ghpGa z+!dFxaicD?)zam(+rplgg>qT{zUO8AY^5ShHH40*|3=T35rz;tEy3>yz9+aH{keKb z-{W_Lz!$1j{hqcfG+MgMsGR$MAk=F5x2Qdz+h%?*3kQzrwtnt&!bDBq(`pGvkDl0f z(Y14@P_OGYbvi<=8JAgY=)QXNnZz??ec!=@`t$9d7pCgEPOht;88UUQRCIaOs<8j4 zeuwJ{+qUa5t2K2Uqxar%-}Jiu;0JmvI-ah_o;`ZZ4Az~C|H}GZ&8B|Wgc--##^y~hM40wNb& z@MVGPwYylX3StRE_Gw@+Vu_A}iI~kgfq$p7r6>_6+mdWym%s+0Vu9EUEh2-N6g*!q zwwb@R+tV3LtEKNfJgNuu$e7@I`sx@);(7X+dmo<8U_4Jxj*hD*OWTd#v*%@fpX-^0 zWXc#FjTxKg>&fPs_azxjba|fOxtfu9=Dky<4Byp^r_+h+<3;r-C)(%54955M}hXe?)&bHKiFy)aRW}T=!N- z*tSi0WOv*joy0g$PV{4z~?rD*9&?LS* za14I`FJad%2m<{~$D96KyA9uc9RA_&!4LKO_U_fcU9?&kd~5>V{%IIFuHRGYgWEr! z=u``ijKhKb@V~x!VpE>j2VSVBM9b5k|MTDJ-vTpL+8+Gl!|>&Qg3z@4u`lR*hW`a# zI0E@B{P~|jr=x8)>()(wj~~LW=OO=oeUAdRZ=bz;ANh$cGn<8f*r9D$wgneo3=i+n z&kiJv>!m&|K_8lcU-}Jj9Nm}S{l#HU|&Do|oY- z{}S%L3tV6K-{DdH%*WoP%V{>?&%XwDKdA3Xx+tz%50(wpDtzXTVE;Z{x4d(5JzEKc z0UR8Kr=Ea6`OmQ7QvL2$6F&2|@Z-I@@3R^G*g&sd1TXH>3c*Ot|nd{*G{ zMOTrG1mpRJ+eeohf0vYCd|xi$|(QRM(jj#Kz6S(zT6vz2K+3eN0ZV5lM z$Xag#?x)N_16-r|?hp$@x-&KP0~oJDPC>_5WmokPAGJ&xY_qU&v*!4|oM;yY7<6a2 z;^h>EIHiru-}?59uPx|tWAnQB^OPOS@jE4|TW-2Ulr)#`-3u392$rLF;`J9!|2>G> z;Y@Ga$xQCM?u3H}VbvNfDM`XjU>oVi4d zZLpP=j@SYFkL&jpi|~OrL9Gc7d;>OZnlbkzHrVdkHH)4w%dueT#GiYMrhUOIP6yFa z=0a$eR6`bUF^;+k2^~<7&D99`0e&zE8zfr&(&YhjbKuNJMe2sv>;`2pr=}3=5iENG zLI}m7HhCp*?Y7v1v}h8QGMwSU)v#)n{(Ir-*(a__EFRn8M8L!l!VnH0p7FgqV`0zc zF$m+~2}AH)cctcU z@X`UTqJjRr>v`xjb(!zF9tt`A|3ChRxU*HVU(AU#&x2|cO2LV30J!&FxZpytZSVqk z^jZBrNp5|!w8KyQXWa_ZUn=gmFx2Jv;in?*&{1F^Au=n{a zeDtI6y(eePi)ilk&i=h{V%sD;_eJ2k3tUJ;)0fFMU8QTNPF_J6=vq1U1XkhuKozz~ z++ADeHM6YwRH~xo7#WH?sY&4e5J!!oEP+5#t6xZN`y9 zd2p6R>S*aI>bJLkddB;+a|}C3G8{F%{`qX89ALNt7q8L%(CX;>H(a#1^SRkJQl!n9 zAT`8oB?>FwK)rq;;9#i`rABexM}fwI=G8ppsxAz}(=ikFff2?hcTwmW0UJbYa_Tj3 z=LSJ#%yTRTR*(w&aW4T!#jzz5HC<-ZmYd(G>!r+$ zX(o2jkxBjAMXRSX%*P+sYJ%(O{+(52iF88K&Ww>@IJerBOYUWTCzN(%}q3wLfHqh3RZgIJL78D*mS7&J$d z0;4gMh>>U(*9IerIlQGSg^Pglh45iYy=9usHAYsw5_pH!rf?H|x}d;2bt-8k5onjR z0Z@kO6!Z_8i5}=hVi{Y*y1|5v0LaL6)g;M*Umk-?R>SIkaK9Z#+yOQ? z#V5wwW~kPJ6}=Ez@X*fq`+FXQ|L}`iZR>Q5O~kzKufM9F>q-bwf0VWA_0zA9pCj6} zC0?xgydJleD|Ov0WAjS3ao=IM_7cb!w3kXE8;qQKv&zi){n^9thO6|rbUdwsDqHve z#@E2+55lKE3V;0{&75&`n>roco{k6kXiQ!Ge4!9~kzQ$|jK-((N%*(F0HuQV3`Tup zn|4cP;bO}UkcuuY2fPhSUD;itrQX9dYyYai(?;DhA;HYPLbQ)SuZ_a{9(QvhxJvnJKnvOOGHz##Z{@4EsEwhM~5$^*t=u<`j^gR8{ zkt6X4RGa$VXh*y1LVb`j3}Zv6ALtPAjWw94>(9v@@MPlos(vG4n>t17*!8uJ{Zb-# zUah9vK4lop(+9ydlV1d;Og$r)d#$POuTREh939s-2|t+K$b0OVwlyfF)xhzZzQ2{Y zfAxT_U#AVjf02+DJ_*mftnD_@!j@2f-uW-^+)KLbB(q`%yzeGBJf`a!xow+mZ9Mi8 z_ts6HE17N+iRkse38SO&_sZDDYOUG(zERWtb@b@;@85haymU;rQHhqK!cd1q?79=i z8(Q5~mhSt&jQ!fRx;?A;^>?lh)seZ6&tR{1&4*@{1~Zub0u_M}2#qk7 z!^xIuG*)(H>#*~b5e_&tn_ff`vYF`x~y08?7a`4JX-Zt_tEx+m07tctq-nb+sG#breSlRI}V$W3h}I8DF6`=oEhej(!u8DFnqHVX_!Le*?*{|qr0&13{@ zf%ix*w@aK{LsUj2SDKQQt3NAn#bU(4EOfH$e9lbxvL2u)GW7P_7oU-x_g8sw%X|9i znCadBgE;#4*s*iB4$d$+`%}aw_IKrgGmSmS4sbx|0dbegpd)ja}CMmb_u*! zz&ROnIb#e4L{ZTd7Pv9N!TwnpShY{EL$R_Vjx!KEA!H+o19p(4(=jQ}5c%wgz>YQ*6$?Lfs(3MaY0H z^Z#aBBL)r)#mr^nX8nD~c#09g`d9pw6icI` z9PRBbl^zrLIRUHEMXifMP(&>S31((&%oVb7@H3JtX%Wm)o>=ODz%K~oHXvDpj%5$& z|2xZy!IaO;j=zxiZF?wQ+#5H?WgIwWP}2O^Ly<(~8yeF1H<4>JLe)DyF}Hd=`sj3& zx(Lb6^EKMrR6UO4=pqd!>*5KA41DPEi5U#$)%0I^9(`Dz8-~v*B&wyxR5Bno6|vYL zS<$B>hQv|_#IilX7RmNb%F5NB5x8PLYy508m_C7bN~!-Du^m@H#Iib4DE$wCt0H$< zB>9{-63iLgfyc(QM9>A8GWL#W;a96#?0;mpUg%xy;d0DeB1q0IgPDu{XQKg+dMUof z$7AO4(9SptIRe)@KB1#yAAei}Ro!*hNf=D|>`F36#tbfWXIV)wRwTg)TqVWgpNeI5 z1SMi+Tq*TGBk)eWW|t3xu?=SL7o=D^sF|f1Q7S`7q#Tl zY@eJFM+~OjF@W9%QSd;bUn&({#*rhMnMN4IL$uT8#S)~da17>qFv6$EaTfmII+PAFtU z$rS5S=p7bHt4-it1|+xCRis)i2HAEE(DPVTi}J3Sn5|A63>Jyd6Xv-H96G5wjEtCL z3(v(M+YuyZq?#n5H(PD9Fxv6`vo20zxKG!e4rAFg(3_JreZFO6M0n(pQ%hS5VlZXl zu|090RT7c6lLi`d-#!gn`qHr(Sql;jCIa(rbz;!&!|*~by==ICe)dfxG- zmlFZJN5JuI_tb5QRKA_hEqw+fh$iQ7-;O2-7lUb*uk8Ne*IO`zXJ^^@R4`Gz#!aolRm+GT4)En_G10sjt`Ye{C!3P zGqQF){Nl~9eg)ikm9ER@woNa__u)rBgu*TQIB9)}}iiPSHqoUv+ROcQFQ$Q(R#Zk&Q-2}>{zNJfW`@H(+`Uy)+(gkXzU zjw^#JcMANxS)-@)7%f!^28D#cP9(SwC)+>}8jV4`)~&!BVN-EANG=ijoNspDWQ656 z9)Nef9tKyyC2OX4sBey~1~VcuB`LS5*+sY{wy&*|cyj%f8hprgAr~RP%@S_8VFPh4 z++>+b0fM4t9Bv z3_&=ADgkdK?A%JL*^gy|lWh>leZWpNE28z{O8uur-cd0I-fSOpxVu#-MeS+)JVJ!L%8!! z{oOU!7=R>T!-aFJN6CrHit_X*1((k_Gn6xoqCQI<#ejBI6S=u7!v-Bt&1Ht2I<#J_ z)58p`)4nY)9zCtMs2jQX%1@C|+eKJp^^0P)Ww!27*`1-%nEsQoWiY4j$Vrr2ML6p;xStFVc?Kin^aDtTxOl#Mt18x1$+%B^E9?3 zI{HiR0&av#E}_USS(>>pBdPof104R;zWI+-r==IwL@hBW+3AzNZnFOM_QLBvL>K&e zpUDPU9+`!~7-n+iYvb>pd(L3d=3wV@biuu&Mg50gT$n*ONgsNvfhP@TXRH&)bX|%) zaoUgn`~T1e+fZiFO3M16o`%>@2NItxSd;Z zojZxFm?sOQd$n%r%3X2z|H)k7_1Ws;#Rk;K$m@9tSF-7!eTNfnYCq1;9c4dsU7gJm zbc~EQBj@#abw(D>vKdcL2mK|peNGxf`k_NJGA=G*Bd@?^0$-J4X+o5(<6c&*d|u#p z^jeG#DPxlKhW=u$4U?@Lfbbgq87tfKI1Gq4YN3W2zYLE%>I3Jy(f7te>WDOfW&d)u3Beb37; z&#%w!`@T*H*K%jEHJQ5Hf1l1R9z=C*LE(>3>)c8^TK6~8=Pl#Fas zQO@b{@i>jjP;$-sdHoZ;5h5?7T0R zT>4K2AY3aULt=BQ zRK;=rUx8HuwmETafn>`16sWUo&LYioat~F67Y-*-91G zIl~UOEuvjx^w}6z(I+9~YoFHm>(2n`t{@Kl1l<#=j z<^0>X>x5oj2>;^`Uu7MPO7h^3b;N45vp98KinMkuafZC|B9C99yz#0I3phBkB)h>V znW_YQl%B$S2wWZOoXt+*WPS|pSAlWGnFXpl;~sqlP1yDvcF+0517ER1< zi0hmNhM6eu!|%|2dCe!5VlOBWQ~|i0(!ej%XkCVgg^1ACw~xuOVc7fv(2_IkEwaum zbBVa;PzZdB>iE}CR)FO|%kRhaZ=}%oN#HWdiOj8KtRbMh%10@~Jn#<{{x46K? zvV-%6{`7bB!e7~cezxBjFcfeZy(@m5j{62WUO%A&$_|*E_&V?%xHC8##@sW?U?TlZ z4PgOewA}~k>3e`owyI0{`a;+64$9lbxc_{{X)K5HJxNiYn)}iUhzgqL2>oJhidEqo?>X zj?*C!i$?1L`UXA#+ys@v5D2>nuLBt#CZw{cHL;iBbw1Ku`o%ey#%5@iD`qf&(%OLN z!0(@;Z{Sv1t&0i647SyxuXKp!VJ>lsDa zf+$7Xdo#U#zYDD1hOz;9I>H~Wq!LU@vq~1{!@P)?ie+5VHn4`CzE9I`|CIjOQWOef zj2-(11mA?p$k~+ot+UWWis>zG0$;?J2T_&}f#5X@Sn7J5(ysvP0afXyvOM<;y(y(M zN2x|(4kvEY|Gx;!`6QNl1Ae;~0)S=%~(V24f@{NigI9c$xO( z*Xiwj4BPG?I5ZlAu+G~1-}8jLr~UG zq-Uk{s;FF^CF5dBOO=_NOaltJ zuXtH3?Ho1>iay>PB{(yOAS(#Fw+YQLeeJwMi2hZg|2-?Trv$gI{~q5RnY&JXpz-KY z18P1lyzoNwZm5{DD+q^o3hhZjT%lbR#$V9yT+D=G=jathwA<#`j4fPL5V%GLR)1SE zxrQh^6e}ZA>^mS<<}dUb+MLl?yr*x?&fV%d4+e9Z)h2*Euz|k8->2RBAa17@3n&y1 z({{f~;QdeF1tsF4y6RFCh$k`)hGwa%hYO})UK>Ldg1o_IF+J6;Lq3VaQb)r+s~P6R z8Za<>f9^jD>jrhX5!{0S_>g%Vc$+rq*NzCKHF1$qFd;3Vcg|yVzIo47VysnUgWSR< z3x=;CQ}`5FXA_OaIxHn*a#eD<2dGZ`3Gn32h`$^LG>6}%OqHFhVA@Bw91n~t4%+-!nB)2I@D1^RI zV-RFge8H1S^F9zdRsFs&h|7@?^S(fkPO2iEG@p^6 z5IvX8A>n?3iuCp#5)Gs)V%ffAvIhh<%{VBWIQ)2aRiq`vU{G;R+znZQiv;UGN#DR8 zQA&4c#_7n4RgVj77Faz?e(Tw6EaxqQDVGH~Xqd*->uRDT<1LP*a4e+x2Y?2_TK41f-!C$A=xQrmo zB0!;Vh#-6j*anO!#NS#$ftn7vpQ=c&DA~MD`Ud}8EK9T`qe8JVZRuV04T1NabQc&h z*SWX5@oKKANP_Wwq*{%oiB>|gafRw(BjNb5^s#xfR)?DH*|B9_Iu=7-dY(~(5Tu?^ zwLD?!p#B>ebuI9PXP-?anCTaQsG%6&p>hqf@>*8ve4k_yvI*Pq(CU&PXsP zlWKq$sZQKOzWBc>7RLca7-aD~Z>6;2HwE<;L1hvLHnfB?oNk44qJoB{L}_15?>e2( z7b_Na?z~fK*j;|0eC=tptIilSXC7>FN0fwdUQxUY59|vJA#p8o={3>t7&~dz@@`3PjOr zu0XtZQt0_@;07618enH*0zYOr4a%E?2M;?3UR(EC7@FB`9HgOW6{xEfCH`Nn>f~pZ z(wMp5`Vp+WNC#XG4<$TQ_2~kMgz<73A5X`iJ70(N<|rCC>U#3MzeynPqTN}ISc*(; zoSx#7G-`JO&nT#Jh5@AJOU_bP%Zwm11w6>4T1j7D0nhs>B(P}I)|1J6n9^WKec~@< zSnX6uVC*qa=`zstfaEJswx~PFHvHN2V$2K@cAbcF1!$c zi?(Ua@5PgDOwJ$vVcPeA80KONn*!jq^!0s;w)+v zd*E#7d65-eqCD5D1b$gcy-!HSX$puaCzNc@xb*b=jlkOlvQ)&<2P2nt#O@if!2rk| zf^3gMF9b2JYw5a@;r7pKS9Rp3j&eJ@o(2$40(i$|3sRXLIozox+|=HA@20jA-XdEV zvITCEp1!-K*fSx@b_FXGJKK=n!6yZN(X0V0k^fySWgE6=hZTpkrC|{mOwA^==(eF5WJ4b%hb|f zlSJ&+geEG{7FE=_OV3`OH&xidl z!PQrvUwTjlqzr0fB3xoq*PzRF^sV?U!r&t`suy9Y5XbiEDePx_^ozjX0*CYz-XhZ( zaH=Am4)^scf!~&%f#<}|1%fSNIlef#n&eA=Bk&H)0kMSCvYb^W$Fv6)JEcllcx1QE zTsc|S*(PV+^XyB)R9$%NvH7Py*|uG0hMbzx<-CftBIk-q#9hJ-yEed|F^loFR2-tik!Z$L4BqT?*T{0j#>&f*qFtA7EhJr)bnJ$7^d( zQcv+HcIJCj$Nv&|Od(Sy2u~J68aT@mjCURyLC>wjj%5@(2u%>(8|dr*6hZJV8ufKL z9cQ*qPhlUElV1Sthw@8`?SU+*$v8Lf)pBGoi8?6-tOS06{xzFvRIelOvid|{ew=*n z5hlj|Kj0}~NA9RCt9ya}ld$01~r zGMJRXoIx_7|Ac7CWr*UMPta*>L^=gRA8-PCOV3c7{BvV-X_>H#=q&mYT8GOBu3?^r z-|liVaR4D2x#XMFCO<=O-;c=UY7kn4eg?nuItEsM3i#b^sEdW0qwOFZn!a$;puCh8 z)1oVhDJwuII-uoZ;CJa?{aXa>8wlJyp)X{!Rf>flQk(pLfcwzli9r%ucBwFzSF3R> z3kl{FO|gI#!220k`5U;MH_~bhAU0U4Loq)}JNOIy=Kluv1Kw6dDlD5|ylLQC=?Y$= zGz4rw*n&inh1%t#3czK+hv*-;oqBT>L68FxiurM}*(aEsyc_t2f{CTR-p*MS=@pt{ z8FBjk^bY(MwW*(hj2>b;fNWucj{Dby-d_MOD#S;7q(ZgyrI?h#EEmaTi&=b1qR@W} zxC%0#B9r?#etW=Ry@V))p3*m|SHA$$1;`4r*_4SBv z;beSr`QzjYKVkg%7lH37+q0lStesUR|eypLj$X(4|1gjTOOyWCZKs3r|@rZ)M|V`i`yj=Xy32Jm0@iwIkB&7ujFvAvX$^fgdoR3q?{{kaNUympYlwjE&wmm|1{BCr1l6@d- z9Y$@@$3x9L-XiDPqFm-Sn3FcK0IULjiWTer9rfCEc5 z6&L~9%W+80LnH4go9F;NK$-qkzeM1@on~Vlp>JbZ0amU~KKldeQx5>&1@>=6nx|ke zsk)Mq_84hkGZ9n{xEy#dz5Tb+cHctK=|w^t%kjw-kKow^1`8A&di#G&b?UDn{2DL@;%)`DbmK%NWiZQ`!9*QVL97ZY)Vqdq zfOWu|7#R2nUhr-@oz?h31{CBnQxx<2m}-27(0vftt&ow8VC`bsfyv~N-=*$_N@-Dz zE^0OKI-Kl#>Fv3NM(c81zfZ?pSswYq7`F9Ys+0EuKZMPPZ{`kJ4Pu1hP*MhSt}vKx zz>}yLSXl&B1TF=BlfhND&}d(T+v!Dl`pi$J&}8N6A9CcSF9X|w3Am%F*epyp@&?4` zWl{!nZqNy z7l*s*)$*MyDT8?hGC)6}VGIS}XDJT+63zOp;43U;fgOS!k}n>o+4vW5?*blI$V4Sd zS3A@N7zYC;wCgnH1WxJnk&#e+1U4$1UEK_JU3i57;Elj-6nox|>#igWGKjK}FhHq* zLjSjDR{tJ?Z=f@9hcQ1nm$+}rU`|O}<9ya)jK8aZtI6j-K&kgbOif*i=MR7lmgQ2& z*RkvuXfz%s?0ge=9H=Tps37c4Q>B~(6ed(%bNYEWgiXD`jaba}}mx4#YSfyyXU66$oyV9qNBV;bL8bF{@x<$yupeXLkLgzMfw%Uw;- zaX@K2+@79M`um^e@XLP#{0KM*j4K3&uoy;2Pi8My!%B$4Dude2Z3^z}2i5~W#YLBX zf{F2KX*SksnN@*fx5?*^lg<8w@zHI-w}DBJPOM&SJ*NWaQU)_WIY#MD*rL#>Yq<{8 z(;!<=SK<_Z5!?9$Zu@e?i=&>EB`B+nm3aWa`4!+npt=c>RESyDHW#Hgn@tuxFaZAh zu&s{~c0LH?bq*J^e^?oxOm-ih|0TlqSAe~GpW3RRqL)m(X5`%Ktdzmbfw@$oP6$D) z3eh)+Xdvd*z-#Cm{4lolZmPAb2>h)6*$K$!rpRZH;&z^<(fB6tDB7s!g9K_?e#DfP zG7SOSxZZ}{mjQ2~So{cf{u(;&dfa9|mSrI!*iMJuo`ZzpLrhJ5MXN)M0qx{+F*=c@ zXVjK+j>(*lXOUjLU>yJLdJYuQ7SzkYIMs`p>{~pbiO@$(yxwM8Z8e^S!A$b!McKnd2O7BnlV+Ejum7hh7T(F| z*p>L5LibtQYEtYug5~^#iLq}3|BS{JYU(264Qu)sSCnBe=WWNI$12hsWgSpkP&RM{ z@L>wQn+U_J@!TR|=)^faEDz);Jp=zlb>!>l^CnYJ_MseZVv8CEjTw>vARjX0Fr3&; zlb=(1W$EJ-{g;eS3Z=_nZn9yQ1M~y$q;KHoXf$tza1|2f2rZL!h=7dM!g2P{X#G9# zkHCHf-ub*HQWa^@84L;?1*{E!rT!06D1L;=sjKlj{U~J;0*Qx{Z&K`;pxt?j*5tjw z_kkDHkhlz+q=!mltm-V3iE$W8Im?1L&G0Gac^RZkNJZs=i-C7gDE%C{?CWqlD`>TI z5N1IvLPHZtHPs)yL82P+kDW6w)yHh+zc9j%g9WDJ@LpRVH>t3|~>( zwTEyGa5ZopeFGcGI&WmEb_t$W)Om^&*vciB9V456o>p@gozB0YLlQ=)R642>dxKI2 zlQNh^)+9v@gBk`lXirmw1AGJUG5QB@#%-^|4U0Me%OG)DgxK~JrT%A;@ViWoZ3lh= zbl@U)n1k-71anD+m<0;1UxD+%0w2yH}xQi5fmQH67-z^a0fM@HYX+S1hBU{)*Zp8zPz4!pI7pTEzZ!32MmDvtGrwk@#FpJM* zL|bIoB2m|=Zjc@djXASg3pl)yRcqgj-?^4XYc-xa`1LHdcY9 zx=YLw9Wk2C)^Kv;sBjd;2oqC#A>3_j1V@1hprMeqS&-8M%BCanEhP_CT$e~hF(;Op z9t4*)YUc`IEpQc%^E&!VR}iYTh_wp0J&5O(2!cGJkqAY!;kH;9p{MsSUhotX$G>N! z!k2*KKx-@FZJ7~xmrmW3!7K;v5@Cl#scivaM;W`kLrH?!T#J<{(_h+1z$$`Z0N?Ay zb&J{qg-KW`pzz6L+LU?^Qz{*%-Fc2n>vC2PUPI5ob<}GYP_JHq>*jzAqNLkTmKES+nq;yKYl zD*6E{mIAwyV9H=p2D5w^Oa;_+vD?{ro+8?!EreT9Qc)QwtOol{(0((vdOKlw14wW8 z)GnBvIWUL1Mdw1-=H)gb$H3l;B`*?&`=MtabPhn@!J9UZ9o=>3(!{6PxEX8bUthQm zuXZthcque42QEX|mm$G5SZXaIITRscD?}+&poO)r+##R{v8+0QJdSc6MP+|LP+3Qfem#Wi0vM8rMQZ=bu!5%*R2(#DSM)b)>`u|&$QV0d z)SOk|tf$nwo_uBnp%f8%2*LvR1p+^hALQ`8qIM@kEQDELS>V`p3dIRZ{YMem!{Ng} z1n(!trZQ#PR)>nG*b*H#?2dtn%LkFFe%L- zgR*DjbVYO$SD`}Dc8Lps*P=ZruSI2Uz;-T1sR0OtFtib|QI>^-Heq`IoS;(KS#E|qwV0trL9uAS}-6qE{4Xn0bk;?IgneD5GZ@FY4$Wv}^r z45X=TDJsyg2xSY(AzY{6X^B+PbXKJdCZ##3Tg0kV!AK1mqk5Ep3+Wxao`Hd@v7Ae3 zHCEAS_0wwi;dNG^jE72u*|TMsp|u1gJdr2aHiY4H`Ngsz2xez0VxgU9T?0}V%E?G3 z5#JKBxhnbG1clrLJ%i)4+b>Y9?xQyL4Dhm1cakbxORI4j+({WG5?6VvO4_>88I&@Z zlwM&V#i%=qnWL)2Fr7R)KToguyA~bjx0Xz14Vg?Y%Id?(^kb_Mmfed;0Y7vQ$q)t^ z!Z1S+I7nagBJh*0Q^ZrK~$xDY&*bmd@SW- z*&deiux%eygOD15S4UKhAgs}9O%ZmEYZZs%S~6i0sA(Gt9iyHZs-U{w9wnlE`?D~Z z-Da+)s?ynJFe%{F5+~`NQ81Pn16FPlrCaDMfi;18tPhFtuPE@m44yZDjwM+`*NDuZ z`EG^zfAoC`ZE(&5#aLRh>;!8O2&)yC?x0ld%bhVJ`;69QZ;67*42rK`W|Jj`+?=H91SzZkc O2L?}9KbLh*2~7Z8_?1fl literal 0 HcmV?d00001 diff --git a/resources/po/as.po b/resources/po/as.po index 40761f3..cc5bcab 100755 --- a/resources/po/as.po +++ b/resources/po/as.po @@ -147,3 +147,6 @@ msgstr "ৰেণ্ডাৰিং ত্ৰিকোণমিতি" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "ৰেণ্ডাৰিং শাৰী" + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "রশ্মীয় অগ্রগতি অঙ্কন" diff --git a/resources/po/de.po b/resources/po/de.po index b37e183..4b2e4c3 100755 --- a/resources/po/de.po +++ b/resources/po/de.po @@ -148,3 +148,5 @@ msgstr "Dreieck zeichnen" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Zeichnen" +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "Radialer Fortschritt zeichnen" diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po index 119ba3b..387f255 100755 --- a/resources/po/en_GB.po +++ b/resources/po/en_GB.po @@ -147,3 +147,6 @@ msgstr "Draw triangle" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Draw line" + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "Draw radial progress" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index 834e0aa..73ea790 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -148,3 +148,5 @@ msgstr "Draw triangle" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Draw line" +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "Draw radial progress" diff --git a/resources/po/es.po b/resources/po/es.po index b6ef319..516bd0a 100755 --- a/resources/po/es.po +++ b/resources/po/es.po @@ -147,3 +147,6 @@ msgstr "Dibujar triángulo" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Dibujar linea" + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "Dibujo progreso radial" diff --git a/resources/po/ko.po b/resources/po/ko.po index 78b466c..a6320ce 100755 --- a/resources/po/ko.po +++ b/resources/po/ko.po @@ -147,3 +147,6 @@ msgstr "삼각형 그리기" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "선 그리기" + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "방사형 진행 상황 그리기" diff --git a/resources/po/ml.po b/resources/po/ml.po index 723723b..1fc47ce 100755 --- a/resources/po/ml.po +++ b/resources/po/ml.po @@ -147,3 +147,6 @@ msgstr "ത്രികോണം വരയ്ക്കുക" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "സമനില ലൈൻ" + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "റേഡിയൽ പുരോഗതി ഡ്രോയിംഗ്" diff --git a/resources/po/ur.po b/resources/po/ur.po index c2460d5..2aa1fb0 100755 --- a/resources/po/ur.po +++ b/resources/po/ur.po @@ -147,3 +147,6 @@ msgstr "ارڈ ثلثم " msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "انچنیھک ریکل " + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "ریڈیل پیش رفت ڈرائنگ" diff --git a/resources/po/zn_CH.po b/resources/po/zn_CH.po index 529d189..9ae7ca9 100755 --- a/resources/po/zn_CH.po +++ b/resources/po/zn_CH.po @@ -147,3 +147,6 @@ msgstr "绘制三角形" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "画线" + +msgid "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS" +msgstr "绘制径向进度" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index d82c235..427a02c 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -63,6 +63,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW") #define DALI_DEMO_STR_TITLE_POPUP dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_POPUP") #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES") +#define DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS") #define DALI_DEMO_STR_TITLE_REFRACTION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_REFRACTION") #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERER_STENCIL") #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI") @@ -115,6 +116,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW "Page Turn View" #define DALI_DEMO_STR_TITLE_POPUP "Popup" #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES "Primitive Shapes" +#define DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS "Radial Progress" #define DALI_DEMO_STR_TITLE_REFRACTION "Refract Effect" #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL "Renderer Stencils" #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI "Script Based UI" -- 2.7.4