pax_global_header00006660000000000000000000000064150473715770014532gustar00rootroot0000000000000052 comment=31609718cca15633814660b4ad85b97a397f1912 libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/000077500000000000000000000000001504737157700205275ustar00rootroot00000000000000libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/.clang-format000066400000000000000000000007111504737157700231010ustar00rootroot00000000000000BasedOnStyle: LLVM AccessModifierOffset: -4 AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: false AlwaysBreakTemplateDeclarations: Yes BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: WebKit BreakConstructorInitializers : BeforeComma ColumnLimit: 100 IndentCaseLabels: false IndentWidth: 4 MaxEmptyLinesToKeep: 2 PointerAlignment: Left # SeparateDefinitionBlocks: Always # waiting for clang-format-14 UseTab: Never libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/.gitignore000066400000000000000000000001551504737157700225200ustar00rootroot00000000000000*~ *.bak *.patch *.tmp # doxygen generated dox/ latex/ html/ # build directories build/ cover/ debug/ tidy/libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/.gitlab-ci.yml000066400000000000000000000025341504737157700231670ustar00rootroot00000000000000stages: - build mac_x64: tags: - mac_x64_cloud stage: build script: &macbuild - OPTDIR=/Users/Shared/Software/scg - mkdir build - cd build - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$OPTDIR" -DCMAKE_PREFIX_PATH="$OPTDIR" -S .. - make - ctest --output-on-failure - if [ "$CI_COMMIT_REF_NAME" == "main" ]; then make install; fi mac_arm: tags: - mac_arm stage: build script: *macbuild windows: tags: - Windows stage: build script: - cmake -G "Visual Studio 17 2022" -A x64 -T host=x64 -DCMAKE_INSTALL_PREFIX=C:/opt/x64 -S . -B build - cd build - cmake --build . --config Release - Get-Location - dir # debug-only: - dumpbin.exe /HEADERS lib\liblmfit.lib - ctest -C Release --output-on-failure - if ("$CI_COMMIT_REF_NAME" -eq "main") { cmake --install . ; } native_Debian_clang: tags: &native - Debian before_script: &debian_clang - export CC=clang; export CXX=clang++ - cmake --version - clang --version stage: build script: &native_scr - pwd && ls - mkdir build - cd build - cmake -DWERROR=ON -DPEDANTIC=ON .. - make - ctest --output-on-failure - if [ "$CI_COMMIT_REF_NAME" == "main" ]; then make install; fi - cpack --config CPackConfig.cmake -G TGZ artifacts: paths: - build/*gz expire_in: 10 days libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/CHANGELOG000066400000000000000000000012551504737157700217440ustar00rootroot00000000000000# v3 Now requiring Concepts from C++20. - Complex.h provides concept DoubleOrComplex # v2.0.1, 26mar25, for use in BornAgain-22: Minor internal changes. # v2.0.0, 14jun23, for use in BornAgain-21 Repairs two problems with 1.1.0: - hard-coded version number was wrong (still 0.2.0) - major version number should have increased since API was broken (removal of unit()) # v1.1.0, 27apr23, for use in BornAgain-20.1 - replaced unit() by unit_or_throw() and unit_or_null() # v1.0.0, 29mar23, for use in BornAgain-20.0 - changed sign in R3Util::phi() # v0.2.0, 27sep22 Added component - Rotations3D.h # v0.1.3, 18feb22 Initial release, with components - Complex.h - Vectors3D.h libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/CMakeLists.txt000066400000000000000000000034041504737157700232700ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.20 FATAL_ERROR) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) include(PreventInSourceBuilds) project(LibHeinz VERSION 3.0.0 LANGUAGES CXX) ## Options. if(NOT DEFINED BUILD_SHARED_LIBS) option(BUILD_SHARED_LIBS "Build as shared library" ON) endif() option(PEDANTIC "Compile with pedantic warnings" ON) option(WERROR "Treat warnings as errors" OFF) ## Compiler settings. set(CMAKE_CXX_STANDARD 20) add_compile_options(-O2) if(WIN32) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) message(STATUS "compiling for Windows") else() add_compile_options(-Wall -Wno-unknown-pragmas) if(PEDANTIC) add_compile_options(-pedantic) endif() endif() if(WERROR) add_compile_options(-Werror) endif() ## Subdirectories. include(CTest) add_subdirectory(inc) add_subdirectory(test) ## CPack settings. include(InstallRequiredSystemLibraries) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_PACKAGE_VERSION_MAJOR "${LibHeinz_VERSION_MAJOR}") set(CPACK_PACKAGE_VERSION_MINOR "${LibHeinz_VERSION_MINOR}") set(CPACK_SOURCE_GENERATOR "TGZ") include(CPack) include(CMakePackageConfigHelpers) export(PACKAGE LibHeinz) ## Config files. configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/LibHeinzConfig.cmake" INSTALL_DESTINATION lib/cmake NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO ) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/LibHeinzConfigVersion.cmake" VERSION "${LibHeinz_VERSION}" COMPATIBILITY AnyNewerVersion ) install(FILES "${PROJECT_BINARY_DIR}/LibHeinzConfig.cmake" "${PROJECT_BINARY_DIR}/LibHeinzConfigVersion.cmake" DESTINATION lib/cmake/${PROJECT_NAME} COMPONENT dev) libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/Config.cmake.in000066400000000000000000000001631504737157700233430ustar00rootroot00000000000000# Config file for the LibHeinz package @PACKAGE_INIT@ set(LibHeinz_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include") libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/LICENSE000066400000000000000000000012531504737157700215350ustar00rootroot00000000000000Copyright (C) 2021 Forschungszentrum Jülich GmbH Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/README.md000066400000000000000000000007431504737157700220120ustar00rootroot00000000000000# libheinz Header-only C++ base library of Heinz Maier-Leibnitz Zentrum. Generic utilities for use in several products of the [Scientific Computing Group](computing.mlz-garching.de). Contents: - [Complex.h](inc/heinz/Complex.h). Defines `complex_t`, and a few elementary functions. - [Vectors3D.h](inc/heinz/Vectors3D.h). Templated 3D vectors, and abbreviations `I3`, `R3`, `C3`. - [Rotations3D.h](inc/heinz/Rotations3D.h). SO3 rotations, internally parameterized by quaternions. libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/cmake/000077500000000000000000000000001504737157700216075ustar00rootroot00000000000000libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/cmake/PreventInSourceBuilds.cmake000066400000000000000000000011371504737157700270510ustar00rootroot00000000000000# - Prevent in-source builds. function(prevent_in_source_builds) # make sure the user doesn't play dirty with symlinks get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH) get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH) # disallow in-source builds if("${srcdir}" STREQUAL "${bindir}") message(FATAL_ERROR "\ CMake must not to be run in the source directory. \ Rather create a dedicated build directory and run CMake there. \ To clean up after this aborted in-place compilation: rm -r CMakeCache.txt CMakeFiles ") endif() endfunction() prevent_in_source_builds() libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/doc/000077500000000000000000000000001504737157700212745ustar00rootroot00000000000000libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/doc/Heinz.jpg000066400000000000000000001444621504737157700230660ustar00rootroot00000000000000JFIFHHC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"D!1A"Qaq2B#R3$b&Cr4S6Ts1A!a ?2!DѹT YL}Q7*SG!D (B BBBBBBBBBBBBBBPFSis%rye2 _rV:-.9%r:L&>>C^|j8jp} VlK]Qμ\fv~%Ts{-b]I%TffU&O%"P$b!p..@D--eΈP^\U +y5HJCiLuuaeBn$u;+[Kʨ8ZpPRZ)2Z#\)A աj՚ 0\˝>0N, 왴H$ܮrڎ2I,t*Éb}Prk؟UTjJ/~etwJr!.akKC[Ȓn&z\!GdIAӣsfs膴mNZ`nfr@aCh6t33AKf a;(\H 8Vi-GWԶNfPe}")!X`:DX){[,Aݣ+EZ1#Mވ$>A#rGbWFwcd=NoMd481.6,. 2bd5x1Q svkC>\Yv }WEkĴ!F PBBBBBBBBBPf~h,SP4KL5q3o0Sk&ͦr<yU|V9:i0C[N? s>0{}b1xQ/PO!E(l1ŭ5qt@/ +)v?UJ 'A4'L@U4#ʍak0 i5th;eZ956;ޜ qh2 qğODa\ vwZ]Sgw`x<yꁱ0!+!Ld,Ba. ] q~%P:.sUPs7W]p hhۅcMlD^r.` g+}0u%05C@7HsAhyYYKMfX0. k6:<}:MX< ؕ'2yfޢzTOK @0Tho`߼EƹxVsz{lEø6oU 0C4kStMu i+U5A.l!IsUs*X<*sC͋".T Kw𤟈Ah8A:C䃵sfۂkH7ϪWsc67-'*ֳqBt!#Y#u5-WԸB|*q'wb]45"%Ln]tJ                     %ATqpU ٟ_\XP_4GkEoy|q#[}Ic?w~ U+=Sxq{P&mʸ\Ej>QG@ѿ4{ 읱N@u=36Lɘ!핚 GTÀ7nȊH/296J":Cp"L ;{-LMJYVouG6&mB$@WFeYSlJqi던c3*XvV*}ءa(0`ꔰJ^33RKA."}Y~NGE2Z;z6k=e*IZ~eTE\N MbKlVzC1Em-2k6Eg0aD6* Pp-S$SLj;Ф(QDJx?c*4˚IuX 27VgMxAppzx TI ' . `m;U0S#N wP !=T]{\(baup )p{KIհel3;1Pچ,ϲޣIBBBBBBBPs3lގ_OO4~1\5DW3ǝ/pQǽ$陂oT>",}Vb%MZ!o[M:e.kNU`:/$,qpv9u!0& ƐKKyVC0tSt58]3)4SjӁ9: ǯe}:-.AKMAM:N_^Į-XJ{)F9YMgm8!is۹?k9%#G LVQ'E屵XTx|-OD~h<n^['Np.":\q8Y*VsXE W'sƒKd,,{p t0eF |gHop Ktח!W]d1厣]cP=Ph:ϯU&Z q}b_t7A:(4A1C<5KLz$ZAkc@H(.o\ާ@t淗Au6nG,[L=@$[<ϲ]7lAVTIxa s~ 2Kwlk:mgPic @U'|cӳe})X.V"Ts_vbQeV:{D} vH긔깎JaXIDz]#MܟH7U.~Kcv >,-"IʓZ&m$#@jlG㺀kKY`gJфTR?T8tݼOu@7qE}% UrIs!K}( yo}{4VoEfdq}fT,5a겨,ReF6}9A/0X}S׆wI#ٝƕ"%oWgk`V*E{]NU[AuGa^ SU${ô`NqQR4\D=R0XA MQ%7֋8[{ J'T{ I$6 dUݦfѲw6>РAi HUA'a Z$Au S@̐DZym\uDx%CõE,YqTmF0'^3)Οjibb #Yn]^ QB.fq薇R7Oo 9sf\^BL˸*ʸ>Rw0d @֛wVsCZ?@x-dO` yCLLeVI?rb-N\,G  ,:];X[$mi> +0^ 2_`rc굁R@$awmϲ1r|j*3n]n;s2Ϯ( w>.WوLmoܯa,`N4@`nW2)NSgp]{> -.mz560MZȍ&XYâIq܅SV#y-/`ϺMz4ŵJ;"ǏT&_N"@q8H6 GcPܘ>y @".sH2/:˷tLPƱiײW:@&Tf$Ը7" )a&bm+/&A;Il-f#KuL A8mX5:$ .tu'tj>8J oHkvюu>\U?3aE0Gt5j Q^c7 mPɁ?qcztFuc]' Kk5lNU H<$Lhtcl=y1; L\(uE݇6Iq`!s1$pxfg`?t %x%;QL@kt CAsv"8EzGc\A_)ckczza͍JTFYI0֋q4.Iͳj7YvT湽ZJ-UYE=;[VF-K)/3ę'S;mF H✒; XMdlzot;cOHE:zpǛ 90D.\~yPyVAo =$6H"7N@n"9.&I憀yUhg/:V.7-̯G*˫f>Xч;.w51xӈ?'tU^m* N1Q|;LT2Z-qs=M,?qP%AY'gK]k`gTЅɩX=G<6eʩ@̝j◊1mФ=:j'?~.k\;ŖΨۍ!{kF[Pg\fZ zȋjc>*S{H!yԱ'ImS'4[Xө5{9n$W7T4h| VjW#C3ج0i1; qYSqTb0d-*e`v TP.O*.+k|[]0M@a1@5z@&H#uNgH`3*x1bmS\\<ÀBᏪ;ĻVPuH[.C]$ 5XAIzN7VxfI!bn:['6q"=AbCy]<6 ۑr?[~(ndEqC;-kv> {]DOD=|Mf:KHBP!! >?Kuz66qRp7^jI\6ycjxĸ铡hzKIfsJZ^Bbɚ\56.4kY3eZцt)_,qbV2d;cs>Hp#SI+x 7'6 php~ap0s·p] M8O04r|aܹz?zxu&/%Qu g4 k6?RI$N;|xQsfT=8\y%p {u=ռ6}'8s*̓ I=t>mG:Ԅa H3/N VO[dڋ@Ӹ$-:mJH܍ɲ-+^~mRIhD7~}Tj]E90؉$X Ԇ`[$h@tx<i$Dzx ur}L-Iw`D u-vJ>QmZfAտlձH+Є"!B{M{kZ$^ ~.$D Hh k4\Ͼ$|Ldn2MJZ:DJ)ǥ$ q&Z !OY1 .hA[FѴ%&v;ˀ;&7@-Tʹ2[Z$f* MH2 tql%j T 4E8e,qzAH"T֓ U}{9A@.Vpt8j!=E˚<86{Nvt|˜ :Bb$rfw ]nuET8DN+u8&ctGYq0_IĐ˧}UAt@6)jMana;ZKۄt]{* g\6mo# p|`6wl4i! x2D!jT >X7#@@ ` PX l4*1x",;:[]xXVYf? ڍ=_xv+bC;n0GumZm{LAXtN!!@!@!@!@!@!@!@!@!@!@!@!@!@!A f,4th7}C8z0f*We4ua-_iJķ_?lkCdSYڋA'v HZs ețE C. Ee z䓤-2ddN\* i Dz 0N1( m^I)tWpQmp_ӥHhh!pIh€:taS\[gj&Udt[̬T[W5YO׵U٦{^zȾ;y-6 s [N GO0,8:c5Xp%w+8 f_/e/og+u dC5ɶuVPV;0ָ{m/CJlKE@꭫qv @#lmPz@[HbVSKٛեJ[ Qkl$<;YrqilM#Ԫ- ogQmTIkj6#Z[~:M?𠹦t荧pV0@>eP%vK#~ƓvmId{k"qv O!_ d@X*8^s.o(UO!vŭ1ֳAf#.uC5C59:[`~ے?`EJJxEBx8WZu5 ENvÖjajoE."7P&cr鰙iHaKz̔Bf.T8 pFP;[8\A!zf=0"$mb mb-s D9ma}UIItˢo2On^#@;K ^U%+V$wK\{+]Uqc,൬:%a$k6`< f_yRisRZdR0\G'Rѡnw$+4FǪۚ 1qi\6."J'Rgi*Z"i&"PKfyA YHCs@8ȵ)7C l&{p?–:2dHk"l Ŋ8]` ǩ& CK ]+2K`K`܏IDYuGq8<7k:LLx 'ML(3y9&M1r81屡;YM=$9rhTjh>^F uR,b9M]Ęqu-Es* :sv9+&2Q&pFA粣RΘY Zj} 4WS$ t|t4@:PSq1*īZz#p5% iX>MB AT()$LA>vV6Dwuilð $i0iAhzZ&{{ KpiCPP֋wJk"{pc|Tgj:v%bp ;S L eӔv1#+7xkYtBBBBBBBBBBBBB CA&!s|Si--.3AqM qo_>s,2jbj7MJ3l ;u aCap vR~It:G`C_at /'djuDT\z v)K@CI3ϲP.sXf>49 t%8Pip.x 6;-Q$k\( 8FU% Z f8c)%rr .D~&>^SeV"7!)yx&5'˧qtٽx¯xB[Ip 6N I_jqx\<eNL[oUŐ.P 4L@ܢ֦`snb_hU ; sGCGV-̥#`6 WS`*-!Ύ`%Dk\\7Txvid$46_W[4R` p: @e6CO'hX-E`A~7Uhi&O:K U*YLsL;ØF@Ti$A2 tI2u''} QU׶bn[PĐB 3WP'w57P?UZ]H6:8|6&ctϢC0^9wcG+CXzber+?Q/-)gtn駨L܅@.; 3K E԰ʼEv֪i}G˚^ #R"Lry@p%nMGߤwSr` 9A[ȓ&N{nG@6)*6z˅in;zJ aAbi@5~i:, > g'敯0"I%V&H"-&-:Dma` Ϻ3mlY`z[KQmج_mVli$h;zƶfq&8JmÖ?8BcaKtF:`TM>ʆTM@~BA?sυ|>#+mWjUCD6I<&v']jMb{ Z<qx~Dm=cS. 3'F3qҩQJ\<Ik]=51Y`SS洃p#Hu^)HhޑfwQfG.&Ӻb&atQ& qc1T*ejm{cYpժ}*IAѢPLSM㵓;McUWKbP X[MW|#dDjݰJ&`).lƑo jh.l i\#p^mPù ie: UbjW{ΑJ[ےP? H<4OJKcH#>ElX.X;8!\F5`T^{ Ǣ8DmSCDXz{ѦHJXfiT=3ȁ褹iE)^X:[=PylH08:@$L~AM7K8i#4lw[Nmm 8E Un`s- 6"(Oꌳ ں\o`]f7lufRhyǰVDQ uߊ|N暄GE>5ck6SvƧnǎμGEF?Ϣ+%8sIŗ+R.s4cr3?T~׸7wi۲GحDGh*Zji1YxaQS u:~?pIo/#E&=.9UgD0utZkT I>l˱a0$X1tΰ#y]_Vx |XjI.t3H;h;qx '^%sqy%u kEA-1VV yǾ-9W}0t;A)*S'hY_SŻ4tϢ6[TiFhթw@s=kQ6J6L|I\O< p!Tݕ(RumV,9?ψ\@kR 6LwV\qhcpi3ʣ ;UeQΪ b|B,J[-VZl_hQ[N2N^">豷uəU -  @"fh-f[ӨOo@$S,,0/؁<( <O#QKǢG.I z}:Hn'@AHSrO٣1s:]q92J 4ȨkZ%(n:ꚀE̠95NDS4hӧ$͂R:VhMVIaP%z cjytF\ٗb:%z|Pž6e7^_(\I$GXc$º 'o5üxuW\>G^J@nmq Ne$tK@MʳcNMO^}쩦gܤZp$}>J~ 8 Gn$+O)^}Q_Cم $s9n7^u4}-d:v+[zAv+0u /5)\++|* Gc/58X:$owk y/|iÊ؊. "1!BszW2=m°5kmfgF/V1X;q?G0L5p`l;%wWސga̦ ŏ#cQ׼*d\ŀ Du"׺Ivb BW,Zlc! O0ș%KAIsE@zG=PXx &@kf,5Ł0~ NNgfu^ D ="dlɁ% &3ukrvkt: ,-|| @A@x<5U).y!QfR@Ӡ&&T:#LZhhvyT؁&R>dX8qȟb !A hn41~9PiL}J -LI7Zp){F=ELfO@x3\wpAvoC; .{hxwb1 ;\] `Z;S^j01N*;AL:YXcp*UMT}Jl&gĸk y Ŷ7ۉ}qm&=oY3|{Z4sZMzz0c}5KDn5ry-%D+?ʩcX<>O/EMX$MIӨphآ01fT:\r~i{|mSp730P G`207Uw6N纣j{|0LCiI xWXʚD^C-^ӯm uYEA7uGe^f# sL>%}Tb1b-.i4Cih15n}<5JC_5V]N0K&$B0O14;[`8\l[J3sl=uEX¶^LW7n&<2e7H$=тp$ s ~H$% i#kzL8SfY.OWu)m-N{4HnےV\av GiY]8zzuɨ$m{.a6V+`bnV熗GQ ׆xf"_5R?' gxUQũ\ej6 ]PѥZm957 ^f.2;p$M6X2i c cL遱U: #[F ]r IisI\)]cP7^It_{ 6@Z0AA`Ģ.-v#aKwv@2O'oHi%FSQ.m6_L1h5‚\TryI$ j-6zET. &ZiUkD"@.nDž0FxoM"oLvW,X /jP!!!!!!!!!!ό'17.1>U#= da5\s@6gH K ail,KIomX("ދgx7&O~V)V0a,&Z p^1& mUğ@ NJO]pO?P:iˢk@O# <\ d[TZfgH@He2{ -G_ h'lQM]ذmŖQ3"<nX[~!t:ewDӘ~G!lOk'{luT[ίW#舟09 cP6pa009#eƣԉ˙,(^0b>s_l=T}Ѽ$l;*kɝ<0 qq0DD"1DDT7no(ȱ GPd&璘@7%V ^nHPCd.h!~ e"nl9{zA}@.eD,[DBnK'ˉ>%wDFQ "Q$s7k6 Ml J\Az> ZdƻSP `nxHE4}wkZ8hq vD.Il>\ ٿ+}疽7&}0g'et֤lA|oag4'PwA|;<KK/{ :t7/銵2 C^b R.[M8"syZMf==F|=JUX lFQeqndUaU܏Р_ l`a18ڮ_JO})x}NVpi\ʹ?Zw9ğrQW$,rOeϦ 5d?*E\[/,v 1`i ;`Au,*\$IIL ]W">R2ꅳ3\v>ҽ3g f.'y,+˰˜vt׈ͩQPB!e*rz fQ*i4dM]ؐ0M.&9>&{/A8jiELW3 `˚Zq^) `H:| C @ҩWns`}n s4Kiz|EJ؊nC_}ZuN.`)9cM@@"Kw0>'ú^ةU1;4~5 ;+U33!hfYέ%KO,Č6< oCDׄqv,7}T8cq"KIq;nQL(k=[.a)U@``E^H0'a N$Ʃ?qUj=u0 #JZGڻȍYuGȂ˘fNY4rꎍ[j[MIsOrXj.aϢ賓$ & 3N8 &Mw_dhF9u#ugTMT̫TkCDG# I q<GH=MߏRcC@!-l,Ll .wT8u (. ǰPA%״mvP ~_skê*i-GLIiwR2@& k=8!ۛ4ZL1"{%|"@X_w;9ěmp9@NLT4 ujۉHZd%<\ $ 7!Aʫ9\Ӵ8fMUq^h ?zlV5$i>J! 4          |QXfPOBx\v`[$9mKzu8` J͌ŶK0ؘŽnSәƦC[㺗5pmuܒ@%@ aP;ז:UbvPNߵ)I7iA's=d ]-mn24)p˽HC|B J"gñ*Dٍ'@P6hKAr;A%ߓU. I. ]= Y?_2\ClsTo7 X ?18Sep,[ˍ˨TG3SsWS8l83[ ѥM\lIm7]>h}{{ M԰mAu/pcxݲ⣫@ LW1ai88 n9' Zmn 遧žo]ua0*L`2R I ]o-fh?d{BfSUἿKd#WY9F.ug@8LaΛAQ%浐/ʚRGAa׏JKRq5L h ^k׫O|Vo;<3ST6N@5Wl O3J:a>6^Q[SPQVFwRaFƲ5{[Yݞk]dR82*ſ2E6Tp,Sdm{q3M À+f8K+ZtƁq q8jE8Ojp5ͤK[[*u8[Նkf@2 *;OP˴jip.v5\CXӍ.nh!>:Hs1$/Iur6'A$*hL%p @'0, @ &鵁$4odBJ/JwCE&8UudmiO;D4̎%i'6e FXٙsNkt>ANZm$Mt ƱcxAZnJ%86 4LXA"}4GWiR-1$'i@_BC@X̠O/`ei-wPkAtܝCE2.t$zG6JDc?\Qhk\MŠ+^\}%pasZ OF8ui ى><׍eb*ӫHi{@^~5:`L}=|&c)ƛuEz߳1I0GefUi9ͩNHWB)鵻&A8$Ԥ湠\e}V4Ug[Mq.|'eQK$Q k4Q\,6]fkѧ=Nw}e\ `m60uT}U-gh.F36x0:o gNfk"ǹO X& ~\,ت{I p ڳOr\Z/:j 43r;/5yuzl* nG+f@i@~__츐&Gvq`1N{*Q=&+ax:3$zScCִĬJԤֺ瘅M@٤*f1:;+S8Ni<-H?.}GZd19e|O;(FT7R:4C9o9Nu04Wm67Js /_崨KGQ.>@/gfj(m9&&FvDVCE4H+W\R r).F[n]Р-˹iԨI$ n9IN-[ؘ"Vicwbqn$pk&-:hGWi69Z `vQ[r̮JN fx!Λ/gx]/IhcܫR;XGܒ0[S,Hn۳[$+Xil̑^8UTC 0>qj$F,&GQpu=V؋JQ:uj2\IS5qn ~%ruZn&/HN7bg`[˖E3O_ y.cR5 q&CI- i#LeKL O,=d4q<7xLH6%d2@h7EKGP"^x[Α^ 0oT;ZBl!@!@!@!@!@!@!@!@!@!Aدf.kG3~dP{kc\Mz+l"@h!];$@JA?.0\AT0'./. y A:ZP@y-pO☈Hlc@9ڴv'Vc;Hf]DM;: TC@>t!~Q2"ZLfesË,ELYRHs!X; Km^8(\pP-6%[q'D>em<,$w H;*/$!ClHw;**1sAVCIQiFH--' K&mSb=9hd  wc%0gPǸANX,I,7T#EP3Өnsĥ$P 2.<& 07>s` w@0lA9$vāب n=ͬ Au m@N^|258J\Un%d6p/A?4`Tz$L^Pz`t8;Ptu$9TIdaeZ pO*gܙs>I&M +a݀Dppb@3S O~/1xWLm}Lqa!@1N-,;@:i8È^v; Tw6 .6cGlIi: p"q~\a~텷Iդ:&_݂!!G)~Csߔ6,7P4𥥦iq7C 4AnG%G4[L%1[p {fzcxzok&ZYͼtަzۉܤE>0Fm0HPXsZLnrj g_rZ>#b{`h2TW2M_ U>305[7 1":bOϊ%n,iUGf7xwl~eV e:.*|#J*5g@he'=U4=TW)=J]SlWpn-:`ٟc)PDx<ʰhiܕFG6 =+Fi&GQ]ΧZ}yQjZhsnk"[c!5 6]ufIUdɑE厩Lxp}IĹ1rS-0-6ww#-l:w0Ml}9iDU/sIųܬcK[˩KTm5m2NT0qhe5kUyxoo%{ ,L5J 4S 6'5ESv*;~&%< ;/p}G%ay:4E&'r粱j<ʊ N@}RL@SQ _gum/!yV8Z[UYMĘ/r|ڬmuމ4.nt:v_+Kt kH$j'C\NZȉ&IJn&=w\,EM 7'odnĂI(hף}]84ؐD/4>xaṫ1/;}Je!@!@!@!@!@!@!@!@!@!A]į *?_?̺q,p2Mec:Ox(pvPyKLQ C1VtKbߚeAs>8q/]SJ"Obky pٍ|..>gnϰ8% 6?kh/T]PW =|Ƕs5_9-wcpyNk] )Yb#y?2J׉F\8mU12\UV/ΰTuCƭs,VhTCvT8%| BO?U@LwVQOF^m3}.~c;bt0l|Pp!RYn[qiܠF+e&<;nce8=T;ߺUqlZ`pJ &P tl'AktW*;[G؇<*|ǀDv'¨'SgH'om3iobCUੜD Aɧ5 'p9yeq͙Qt7hf28s"ik4M3$x;.8Z*`gS)I[`lxUVd8&gS )Qq 'D1.H;!!%3 KbJNWt'˨::6::PjԐ ^¸*aԂf];4$JWpu_6VxPh*S61ד9#1mbIrKM0y,&9PH)Zz_Axq{Z1m#`/uȈvj9&@\$iۧeZQ:{M7ꃍb}J[T]_ TWѤ&a<-<(-fn+>W\Vqgca`:iJ;mv`vU0UpbR;[45x f`˜3*cXR`[/ՙ MTz Ӫ{^.U:jmp":9`m:} !Sa-.c>+7YRT<Pఘ}Z!Ut;!Uu-@l9K[Z DC O ֵs/2@Tz1s(>'//u<Nzj:x V"B0C1-{ K DE .2Ѩo'!9%4 3eԮk멹&:QR\{6FILN;:pb,3MFDJ?Z֩b=H -#KZИkS1oa䇊V$UsH6PTnB ]Y[imziCm 0 > lTo(5 ;l9 YhF/^'$p +(RdŷI~凴[]bR:$%Suz`ފlm,'quNbXءѴ>"LS4/"V}l;e'\֘F;.hN"_*a^$hGLH9WXzts--48@Uh{mpa21-TV K0u0.o2spuLƙ|RDa<&;i{iEuUO/>zY^CFL5a)e8ZCEJɝ^ِ oUa>Cg7DGuzV Ot] ?xH -K];%gulN?)h˩Yj9YDz`xTO-r.3CMVHiVe{g1Hwr'(q-s<&-7#tQ04h, ?5Σ@ahS)|jLf"qMW:L:.wP0Q tRh-s6@z-ŸʢnN&,i#ߕ\ POLdj'y0#69*2An;.&m0Pd"n-R`&[bFHH]D]PNOQsWŤ˜5K=O!ZDRꎗZ5G=! N{W5Ө@~Άݤ +Hkz\m?NNx ?kijl4h @7xAPIl= 8DkD:a6 !:yd:n trQ9\-Q]7^-DY'$ܘ'%G9&vRFѻ7EyecSZX Y! 5My =!$ f~ ^ ~P MBqO74ⱞU&>TǼFkCZ-" `5a[4ȳuK^w1+ц.642beqz8赥Ry?!qIt'7*Ӛ6\ˤXcIyuS.'fgñ՜ 5Wb `˻;DD|^;lq\IIYbè\Œ`jx1i-u`gwrI&Ǿ(p7bq*sq/n귍-iӿA(3TE)tIES.um)7G!s t|e-v'h[qEJ"K:\8!b(F :*e`Xg1!OQ}ZB\b1݋HccMj4/O,Z'tZEfw.C$`Dzژa"L\skر6;\f7MO%\߈ݡ!l,%ҡćN ۋ ) yt| 3pKE9EqQp  \Hi nΦc~ʲ;VޟIT 5 &rH=B7Reϗ!0P&K_RaO9v<ǣxi]k $Zb/a@lF7q9I.lX*r]S nƀkb$R;}l@JàBBBBBBBBBB ] /3?L̨#5br9ky$2͋L\wPߊ !A$Im9$EtdPIt{}AAD< k3hsL1Y;*>&$8\`oK ~Tn@R'ب1-ˇoe2o"M,oߺ0U4Z`s`G(ߝ-$20L  VU)*DlEQ  2~DJLIdjR[Hص?5ˠI =FzRt_Vh L U#F~Z\84ۄE ^l%1-qlq~%IQk8;;)y$q%@9(K$5ZO b <m}NJ2: ExRZˠRE ueGp-}8o"P<_BI n[u~#[ Z'SV'feQPd` K(tHn9\%fPv7TQ`bF d Ω l2>/obѫO AE/vAXp4 sV%gSeCJ.bs^.CA;XwRD9%iՠHmk4ŹĤ"vL@ܙ$$ET<É߂O! qK4MpZp$:Dʆ'Hd1rS'khVz8[ߴ*+ʡ׻o=CLi3O*c@=ҰT֓ 汀#eѤ:x-ioRIaqfE[#?a+HcP쫙? tZO ^D&ÁP]I;̠lHM~I:&МCZxJ49Ӥi< i{7"n?'k,iUm7k˜u8蘽Sˠfͅ_>]V[IYLy%Z;U4{Dg gUp=&!p$iI 3V`:{ W8$ p#eN.HہNbf,Χ+MRםI9\4۳m0O! Q2ע _vHT36 3.+RiԥD8 PuiөےxƉp==UnaƩuGX(zE/QVu]̣P4pd^cq@w`4FTfp\<3_NH# xqyZ #a1❇G:Rp$L<!S`7LiB *T{XCwݣ눭A/%$y\K8.KjpߍcW KmeP!k4c䱻}3N9*'*d*jهPdԁ7jZ`9E+Y]r1uY)_Qw/>Z4%sq5˶YT`pf}-OG/J#V[D>4zV `%qwXxD5KZهPH\I-%-BH3xx%H$ĀMIg84}o?fbQ'eAs褴I3y% #Hq?x.` ^nk.$ZV888uj~Jh\[cDδ=I3AGʝw;l+ {FߪkJ0D@>ӚSq? \<94$+쭀xҥ<¸`XU No+c}L{XH,cLB`F+j2/8<38\ڭ[OwŅ'U;wᳬ6=4ۨ6  %@_T:z6 ~=}R7&xG5WI;,Uf0tՑ<\ 6̳?ie*$C ,(ѡ<$ѵ˕[+1Y5>㙋aIu3(9s,P`} MD cWE1 {tIYr@>=Ww/fm & Vŭj7s5 $~^=$pr|M:ej )jf꘽T4kEjq_Rg!y1UpqCKI*akY$KdLZ˃MzlEV؂~aTt1XCuX]8?-0M e L`) 3pTE [5Iƶ Rn`FcO7{wMoMIG-p iT2 'ZqnUX$#+P mK0wPgmA2 !;p:?DB'M'* eGX46ZK@& M*<nS=[.q>ATn5,AIdw=2́ &0i.s@^ Bl sOs<%D \CE74K @뻪-tch~) _Hp5Ml;)$i.MvK ]!0l`ZGѩ쭓`t ^!hvAI[2Aw\ \ex`*h16odGn+OI@*yt\kw49$[̼xdB9jT89D3,U/bE8 I$6] ;::[ُU4Sk%s긒4 qͅQQķoTx5H*k٤w**0&ӧ{Ī0U"![H qYzr8r64X $ǥb-Gn? ,4Dm+|ΖpBmGXI(s o $ͥ#ZF4f8q!sdZnyU 3j$;KQpq]`=,8|c)M?Š?L٣V5]!pI mo꜂b' Q$Z\@6bnJ"7#h'K\M `wH윸G*:~CIsbvQSuA1㼩mBA n|@1%40Eə\lcݹsMdɑod OH wEBp6~)j5E=-{O Q-vkCDWd>s` Zx_AO..fBBBBBBBBBBBJ4D&Pg 'vLMڹ.%ěY{^ACe]a͹~Zv~#Q;VHte%-iH7tt=3T, E 3d4;n?2 , o@f )CKQc.ԝAױ YhHr;!vfi`'y-oCZ ʳ*X])"$,lM8A+ جEPX9ߞr ]K^)'T۵t 0h6 o4Y~K},a -w ;F.+r#b1CC~溘?s_O½S[ܕ}n+XΐOv|(QPs;葮't6$ɋP' 0,cZu&)9 *ݧkl,ؓ# 0WQ`?Pay3ƃkѫ vV1A)C[7o;B`Յ)VQWί-imuU;[Z~$4.{|h&Sځ 2lέ²a6ZiR^CA-})70-|T"nqԫx~UMd  {Z粂e `\1p{pOMBI31ki6< ka;qX`  0{Kl欳a BY؈,bHCjOWŏ7 ɻkA$͇k ɀAoAhaZ"GsyEK8l22=P _I @SR*S-lHn֖zcm6Wo*2Qp ظؑ@v"]t瀫ycBg`4ؙQMH!B u5 hWUytTqݜ >.lnvV<48;s)^@3 uX?Ef7>.."dI0S c`'ӏo'ox)̹kC.זeG`.avfqDO>`uK Ii=FO*.E%feQOiqVym\A65"7;{? \L}2|3k-s=\~yp2nyL]lq&4ˁ~S86u能S-mlʭ0[g31߷u~2w,UM$i[9 `sci?S=CmZ\u5#pfPMkc):$,'C$܅ H #eGm嵢wCgLv*Zu9 +O3}6' eTA}H7= dn nX6O~^Hqt[hN仙MO^}ϢQYqmr7MU!#/R8$YE%6qK.Jf6IVS\VGƸ $N\gց0A$vV2 ڢ=T80D4vWSs@m-U[OKwSwd@ޞlSj0lxeDw-]Is87 U3 Z8:$DLva/F$> I9Bi 723̢û ab YS3&*?IsiGp|(~8iVԭa'VFUx^]Nzj B CVq/!F"0۷.E1Ƿ؇&'uù:c*vttG>?Tߎewuqi_R-!4ߕȫa][ʠ\3?]Lm$Ϳ#kHqr˗m$t`D57QOOS? ,'N4T-`V@ 1;+]" F4ms[&Aۢn9=I&D$cYڀU@$AH~[61mZuDHF xr։p:{P8" ].k2D[oyRL;D#Q&$ɓwIq .DxX5;#YnC_;HuG.$li7  U^fhBdCxNft$d:d7>F /H%ARKN5U{E;LP N/T=w!>oY-@iCZ pM-WSqk&$w@\Mm2KboD{5cNw{Ui XiRi1TbsE3 Z^bQDE-rl 1:,ct [0lWm$rKAqu elxpŠ\+nh-/Y*4 ;]{.- erttn&u|-%0yDwNޫS(|gU23.asg z-cp:wpOmkqwA.yckrIu/3Jhk@R/ 8 ܕb3 nZ )q;5Ϊ^zؕ5J*I&>Av`%uxQHI&Zjd]_ʹ_NAH< [ayu0-$|'U^oLC]eazQpL?PWq ܮvI_P5ø+x˓qc1R}£|#ٞ?HmMQvQ;:3K FˤqlʪWu=qƚ,C亵r oekx:h .GesZ#?|OǚL-סv egц39~3u:4ib\`qiC3&:nf N#1cxE!Pon =&c7r8E<3<鹅Fy.p{u=p"em{pkkf,8?&oxv:~+8zZ $ >-2:=!(qp PX:m 0gPG~ȹiWay.?+># S u' OI'yŔU WӅ tbgʂF zXOSy6QC&iKUh採V+Xj6󰲍ZqpH!߶oP{|< X1\st`sXe͸ XˉAY3#I v4GL]cI9iZ:OHN)dsw۔h2o0fu*ΠD3Xia%Ē_k~rf>`*\4f[1-k|BXA"`  *bLdR;)Sctlܬ.=3Lt/;Ap~8;_Ntlo"/+#:KbxV⛞݆u7a)XUv[q6lVSki my@tWC/ ʕ.lDwno+GX1HIu0%b+o:s?I:H=rGT$ߔ VԬUq1VUsQd&-\'A5Aج,Y"c ͭuw6lH *5~d%E]7sǺu,=T-VjE^U!'!\+hdr 7 g |8sV~Ipp5\2t}P`4XJY]+F8pAe!o~RľIl ewV3R.kXz춠ѼO+}. otɒo$ؗ pI1 r36$H{\G:{@ Z:n8s}}S4{ IS-se\T#x&#eSZ Im$io R @b D P5VviP$$>tS g;UF4xH6ē<KX7p'HqZ)P\~8R:^4AۼiYk7>J[pq-vձL`1ɩN.>?YI8zBRn+T)XtBBBBBBBBBBBBBWZkRu7ḵ|Cr8/xx` m},s"dF7Mp·v6onuu4Krndܠ7D:&n{m3;;$t2E}ZtKZl77bϪg8 d:$ùP $ܪ%:^m}noOK];a+Ēaܢ1bpypi%..fPKKj̉?tzJQq^}jwn-Ed8L'lA$yL uF|%*#V%q 4jU \Dqe}<H E>lŒ7ˈᢓ2#NHq.!òg4x u*UneQx e,O1a>LZPH-h#A 4jQjtF5l3S;lU'm@vR$Grψn.qcN8weMj5*ǚMW4]0xSr7sÄa0؃*s{SQn"bqT8ʕ.A62E{zzl 'q^|Z5Te76G3P`܄&:fIvP-0Xy t_ValɺCfm nyLէP@#"'fE-tVFj6ua~S .343eY2\cW~aب"Y&w 䡰KI'e\LnJW890"{۲)A.`h>FKdgJwabW2E?U-Y5L8n7qU,F=XG᱕pGU2[c 5 t&+xXy9 c?yӤhfQ=]#Hi<_8aaXn- !mnҴSo3F?%:>'7U)MAGQtӛ{zڀHrt%Ω'W5iV.<]W8d40c#ߤ:t ȷd;Sw'Rs\ImM;A. $Q.v@k&jT IRF]-*!-`D|-cH"Om::`7SIew(,huT&׺4e7@@ΘClA#.li)'MUk ik](*K`l'e#<ָznAuH;4m|9w}Ju;)VBE" rUhkprKT@՞]ŭRcip&{p2cŁMĀT=}?5j;E:nq;@Vp[_7+XꎙWSCd7ZaYqQyGVuƍFBڜ/ O@U@ɳF? b-ɔbk2|;xTS^1;rӨ 2azM%tkp$zD2ݔ4~ʰ&f`ʊA-$zHGU̎Ht;pnR~jҴ!K#\U-$T߼}"-W43{4LllE 6E5KG0|RO?Tui]OQ#T4!"ihΙ젗 P C#NVɂ}Qh]M ;CֆKtAFKfNX}PWh`WE6@&na Y%qh.8 pS5">&U?φ2;*Ku3~?uk! 4             )B.u7UkdpufgS~kKDN4ii?cl @'Im2Lƹ'd4âmqu $ly*] l(nxZH@D0py [v$D6I * 'AXA'G847PEVi 969#90F4iiMG_XQQa§y3{tOwy7qy[SW?\41,#ˬ)`va] b6#|wbL;qoŏG&|ΪN:^70ؼ%\:5 ao}0Č! :-U^ p+E4 to7UGIa؎MnN\&@{ N)kA'Vt҂Ci% e7W1 5*5 2l՝&CAqd&Tjun^ ӦL `L&%B"a(UlKH^q(V[_{oBˋ<oRlԤ:s?q<X  T긁S!*LM\\I[s-twᠼLD$ d@$R$8N@[p~~^nڠZ9%LtV.l9̎xi@vM; 옸:'İk|s@c{B OI/iIt$-cOu&Z_'e]mFH1=1ӵˉZ$t2]sTp:Ih.?ߐ pOt8eujR@4gìpXzsΉ{dG& kTxZuktPG~еĒ,lN>`nMEIMĝW .'xmtZ,ZL5:Otp oTũ-ugB8NaGnpLyn$&+0E^qoKGT0GRƈnJaāϲs6畭 Z\fTltpxE0$ m5q ߟ@c@fcOHcihfsrv5Jy%F cXH |JXʶC_"K ܉& Fw !ZU|"3k w5 CD kE`3Tq?tLG@m-.e-)@e80ߋ+MLI(T G)\i$EtkӢ,UXsl-u @.ݒگq6Aˣh1Lpy&\7:.H7TAq.x?Wufx&y.թ: ʆ| oH:ٸkucMHxn7\]#i{!m뽎ak5"E4yG8闘 7+b_ Tq:l!]ڬ|Zg;ǘؼaOnq.*5a0굪^4m>lOز`X7ac1c!jq53`hky(5 &[vp{|xKy5-;r#s\5 `t5%Sh0:珢,`kKumEG@.s5DW .DL ΥX,H.'r9pmv{.S0vnC[7$و\ bևL%wkbۈ:b!pxzEY OU m]R4n~TjdIzL%\ گkun)e"s@.i`r k 6G=:j1;v _]^I F?2\zY\j B\nT.q$C<JI 4U-w(j3bXفD IpZ'۲OHv::lp`PeXZ?U&bn5΀U*IʭXwXZKILDdH{:LX kZ0,<i*o!:eW{3c3 \dsZá-h;w<05H#RFˎ |NPIy=Gb5El'GI%$ nc8P08;wNK㧛ILs^gQku-x\;u:mwA%ābOwJiSm6,ـ†/7qVՋuLBP!!!!!!!!!!!!!!!!%Jr3L@kȸ#WSs /,ܾ1]K5H&1~WSU8:G.qoWD@t`?x6CsU&&Ħ i-kb!mG$+&mmŠ0MP d< FH&d!qlT8͉$ r7 pH$&=Tu6 ne' :"ď"-eQyp{4m1 Dy@鰍6VkHl KLO%KWP;& kEot llGdI$ry@I~'=Sd@@76)w;>x~ ]%7g4uCDrLA>&$mɆ`šZs;WСRM4]Lv6KOk9+v,Z;l{2P>eCU?xKVqc򆱡)2dS{]pa!@!@!@!A psn"q؎Z}溪|ʣʦZsO8]8t'eS*bLOQ2/yZ"`9rah|DB5± Ne] ~]06z; h,I!jĺ^@@skqm#jia {BقT~kVaW˙'yy*+vQS@LJi$izCEc$uQ4\Hi1]HiiTHE]En+jp!>vw_oz,kNԙ]WG˺0 \Ia Uw6pZ97U$bDMi"+ g~ 70d6v iP{,-y3'kpOdD@'oD íA)v!2ʷ-1׎Ur ꤝFA2- t9ŤH\I;fL`a®!7A[ezCdʸ8 hd{wT$ Î8wV-kLוzoW`ܯ{Aj7X|"mMvuUV-nL PBBBBBBBBBBBBBBBBBBB#鶣K^x+x}~OWuB_/5.?E@"@1} !jk\|gYR]~p/&@1no HrK.+'a6XӨc+6en- t38 Fט)@ݕc@nna#EmKQ`nܦamcʂ\cA=PH RAy`8AňP0i "C@vP$5rn% +u[n4-na°0w@&ۦhONը7k` VDjlʘ-Dd$"=֚ V*:(`5}cz4jVa$a To].[[ i˸Ցģiq˸*{ocOQ+I6!(ЧAN 4      KcLLդ^!|iQ'T xæ]3i5(os}}Db=ì>!-M=R2awdC XDzAtgGt5ᣨ;iP@'P&vRfA^}'yvAY$ FU u6{}W2[XkLەK>],aGuȡ! wx%t1+QbSR`./E/6V6#S`,;&:_O}sjx#yu1.Hnrd^˳T/IɉqkU!w6]®d7pUܥVJ+;}EwrII atuy1u_KK:ZhDΤǂ`ֺg1;i#d@6>u x7\p'v^=I:xqqX}{Eu?:z=ZףE&G)@U 7Xs iUsDɀIUG=.!`:G+0{ n"cn-ahqSwLT@37N"$ǧd H3Y 2@Pi>Hnlk̝ ཰ab=D般lF4$ m'IJ\z@݀T1$X8C۪-01ue@6!$"{JzC"%-:O*ypxxLZ ~s`mnLUݪ?fѱMO\ ~K çS3ʱ@ SO"Z(a14PE왐m mUR;?$yyN$][EΪ1'}J%+ghp0yMjlxZ4?N`j:f]*.EtӢlk@P        )B^w818Sndt۱^BzhU @I/{䴱/k@UVP:2bRc0nyx{n8Ljw(!$Mdi.p'cL"bϪf5I2BLDbH;藂 mB;Łԭt&"Vl4 U ;',:F? H{9 3n{*y1+66ZK q&`;Ebꔘ ;x|?c$.BH/ܓeܸRc<)#H2mah\hf2~RnlUT, 3i1bDm)CYsO!3A$#PZ }E;1ehh85GQ5M:\Lˉ1),\%O$8x #aT\*vÒcQDwsbu#h-[p9E|«@c,H(2PTU, %{lÔR/i[r_M Y˨k(B                         )BBBB              %de1j4O-jxl!$M1%G⾜5-p 9M:MWYZI-M o=/-K07+LzDI{,x D6֌]*1#SCLA?'T|K{Hئ؍P-+C>'샧J<3D4n? crq%炸h~hgSY@AC̨`pJsꨇ Kmm$ˍ)H6 Vld {U@:oE@ *KA߂ 6$ĦmIۂZ</SScn.mxHL8²@ixt .ĘT۸\܁p {ig@ ,$4Ԩ|mV @pi~MC8Hc*8-FGRmM!6Yd&JU #ap:8:z(4ry*[!!@!@!@!@!@!@!@!@!@!@!Alibheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/doc/Heinz.xcf000066400000000000000000005776551504737157700231040ustar00rootroot00000000000000gimp xcf v011BB gimp-commentCreated with GIMPgimp-image-grid(style solid) (fgcolor (color-rgba 0 0 0 1)) (bgcolor (color-rgba 1 1 1 1)) (xspacing 10) (yspacing 10) (spacing-unit inches) (xoffset 0) (yoffset 0) (offset-unit inches) j Pasted Layer!? "     %$#w33[c"1#US~+RBr9üɿƻȼҼ¼žƾ˾ȾýǿǵƾŻǺԽƹǹ̳̳ȿƻĞȿĽ’|ù¹ùѳۯŰ֣ƿŹɷƽſƼ¹ѾȲĽػžţú׳½{˿ٵƻڮҰѼȱ÷ʩ²ռƻøϿ¿ΰƾƣϿĿ޼ȪŸĹĿշǸɫǿ½ůúò˺ǯŲí¯4Ź̷¼̽ǩ翰ƶøϹǺɵȻκоƺϿʽþõ޶˾žة;þԸпƮجɺ˶ȴлöҾγœ½ź}ʹŷvjyspkjkmz۬ſĻ|khogdqjhghknonq÷~smrvjaimilffimsuusrƽȿǴ{yrvuuovq}yiw{ѳrorooþɽsuzwk¿ľ~~zs־Ȩ|}tu˻xnx̯̳ӷ{wzɺ׺Ӳ~z{ri||xsqwzоǽ{rʸvzu[rɭ{}ylockm]cogus}|ufݹpgmx][ttZYqpdigSYjfgdjlfjmbkm{}ܫncfaXf|x{~}slkf\_iiX\hfTTbgPHUfeeosΐ\K_qrm{ȥ{||{ojpqeemk^U]f_\ccneNZmw俱zv^b_fiaelg_ÿڎSL_lmgʣmt˛q}npv{|wpkR͏^JSiyoO]Ѿmpzyx͉NDR^t}[kȹyr}yȩ|XGYjl}˞cN˹~vqtJIUistؖXXoĹvuonx}~tGPRYeoxЪxPTҹ|p`[bcmvru}nkljo9ǷľĪļíƢDzǻɾ˸˷ɴĿ¼ɮĿ˩׾¿·׾ƹϩРǺ¤¼ƽ©»ɼƮľǼ£вƷͫϵŮŤŲÿüŸǨǻļǿݻӼ´ïܻûҸʶƿ¹Ѯ³ֵʻ׹ȿɻέǺ³½Ⱥ־ɭθͺŷ:åõʼָοĸ˨ĹƼʺ˳¿ĺĹѹ̹ȼƯĹپƻĺ§ž¶u~{vuvx݅vszro|usrsvyzy|ſĹ~x}ultxtwqqtx~~}Ȩн{~~z|uƿݼɸ~{~{{ɻ®wǵɧťѱ¸ʾz׺ֽǽݼ~uȾ}ǵ~©g~ӷvymuwgmyq}ræzqwge~~dc{znsq]ctpqntvptwlwyᰋxmpkbp}vupfissbfrp^^lq\Tarqq{ӔaTi{|wүytz{oowujairkhoozjS_wɻƬhnkrumqxskŻ\Uhtxrծxեč{z||w^Ź֘gS\r͘zZhȹw|דXN\h~fvù~ֵ҆bQctv֩nYø}½~TS_s}~cczýyz~QZ\coy۵[_àzjelmw|xwxv{9˻¿úȮ·ŰDZĿʦ˶˿¿ϼϻųĵ͸ùͲİ«ϭƻ ʽӭ»ӣļʽŧ¿þīƿ¬ȰƧҴĸʻϭҸĿfǦȵÿȻɪʾñ«ῺƸƲ޽ǿԺκüĻղƷٹοڼÿº̾Ѱ˾³Ŷ̾¹̱ҼѾɻ䮫ƨƹŽٻǻýΫǼıξſϷĿùȾǼսнիʳȽʿȾ׫·ƺyzyz|Ļzw~vsywvwz}~}Ƚ|ypx|x{usxz̬¶|~u·ν~{~{{dzw̺άʬֶùèzټؿɿ߾~uĭɿ}¸ȶ~IJg~Ҷuxltvflxp~|r¥ypvfd}}cbzymrp\bsopmsuosvkwy䳊wlojao|utoehrraeqo]]kp\Tarqq{֗dShz{vѮxsyznnvtjairkhoozmVbxʼšūgnkrumqxsk[Tgvztװz֦Ŏ|z||w^įƸ՗fR[qќ~^lɺ³x|֒WM[g}jzĺ~ٵхaPbsuڭr]Ĺ}Ž}SR^r|}gg~ľzz}PY[bnx߹_cš{kfmnx}ywxv{~~y}}~}||~wvvxyxxz}|~~}|~ywvuyvv}|}|}|yxyzyy~|~}{stuzz{|zq{|vx}}~}~z~}wrt{~y~~}||xsuyyt}}}vp|q}}}}~}}y{}w}{{}~~v|ro}z||~{y}~{A|u|{rny}}t~xx}w}}wtw{{|w}sr}v~~|z{wz||}y}vvqy~~}{|~}{~}ywwz}}v}oy{}{}xszyvxr{sqz}xosu~~}|wv}~~~{wz{wuu~~u~~|z{uv~~y}~}Ά}|~}||yz}{z|}~}|~}{}xw~}}|x}y}wu~z{~yrv}x|{|~z}szxp~{}~zz{~|x|v~~~v{~{w~||}yy~}yyu|{vvts|wtw}~zxz}||}~|x~zr}{wz|~yxr{~x}zy|{|~|~|}~vyy~}|~~|wvyxw|uy~y|qrvv|}~~}~~|yrwvv|y|}txz|qq{|~rtvyxtw||~}zwdqqx|xv{ytz}w}~yy||ypttz|vsw~wuyyz|x{{}~h}{z}zswzq{ytts}|{zttwwpjswrtrt}~yyxyttwvqly|}~vn||x{xttvvrovz|puyzvy~|~~xvututsqipyxlwq||wxzuuvusrssam|~wy{|svxvqoqtfo~{|rwyvpmptnh|y}rwzwolotp]r|vz{{t|xxpfhsgcpws~|&znfjtwqw{|wzmjoupnw}|z~{~o}vmqusagwv}~}mvwpowxqfly{v~{ytryyxrrpnqwvrmnrw{¼tokgglv}q{{rytqrqoqvnjhly¿xokhhjlmluss}}{}ys~wvxqglztnijv}}|yifmiiw{cixupz{vxvqielrabuyͿεsupjkqibkpcpxzzqyx}}xwspljsl^x{{}qopumfogcpzrpvsv{y{zwuzmljjtjauĪų~wpjono{mjmporwx|}yss~xkiebiknwiŪzphnopzstpr|}{{~~~xx}pld[]izfpIJ{w}tsjusvwqwz{xti\\czjyoh{ywrp}{yyvnccbj~òymuzxyyttogig[˷y|~|xqxmporUfZ}~{uqtz{kpows]}zxzaibzü}}xoigijbsikiupm^{{~iffqxIJ}koj]Y^a^ZjZdYsouj|{}ygaaeu{vpxt_e`SR]b]dxWRBdqnsw{veg[a~xvthf]ab[ONX]Z[}eYQcksqmsoorZhx{~j\SaZPJKOTW_hgbqql\ldzyz{|xpZq{x{}{ubV\_QKT\`kxvPVRyyzaYSolktoµeZw{tqta[NNgbQRh{]aN_\sad]K^~fsԵ{ml_t}y]zpYT`faVky}pbY\nf^_b\PZyz^{_s}xqfl{]XkiS]ΰ{v`yUbc_eQ@j^}ȸztusdvaffbfwݼptLjj[cgVZpvuszyzWYspWmˏmQhefgvvUS~~qnywxpwrZdY_o^]Xrtw~]Kk½äy|yssnd`ngb¢|mYN~|}~{|}zA}y~}|z~}~|z~Α}~{~}}|}}||}o||{~s~|~{u~}}|wy}z{~|t{w|~}~~lx˛ū~|z|qz}{x{ys}zwz{h}Ĥ{qs~rn{~&yqu|»xuz{yzx|~lrx{z|qw¾}}}{y|}xy}ǿzvrrw|}|}|z|yusw÷zvssuwxw~~~|rwytuǻtrxutot{|tpw}lm}|vw}unw|o||~{wu~wiʻ}{|yr{so|}{~xwuuulϵо|v{z{yvy|z}~~vtpmtvytеŸŭ|tz{||~{wofhtq{ʾϽv|tggnuǼ·{t}{ynnmuêνyzrtrf©}y|z}`qeʼʱ|w|{iltmɽǴztrtumuwu|yjtqq|źϽvzuhdilievfpe{vrllpʿʹ{jpk^]hmhoc^Np}zȮprfl̺Ƽsqhlng[Zdifgqe]ow}yè~zz}esɳug^lf\VW[`cktsn}}xhxp{e|̼magj]W`hlw\b^me_zwvzpeʮ|lfYYrm]]timZkhmohViq~xwj~gzc^jpk`u|nehzrjjmg[eiƹj~{pvgbus]g׹lannjp\Kuiè}nkpplpʗ|Xvufnrae{~ac}zaw˷ԛǡy]tpqr`^Ƚ|yz|dnciʻ{jic}hVvί~}xnjxql˫vbW¥ij~A}~~Ηöswy{~Ǧx{p|úęѡ˯~u~êÞ|}w~{~lʪƭuwvrǿn}uy|y~}~|pv|~u{}|}Ž~zvv{~}yw{ɽ|zuww{z{v{}xyvrzuvovxt{pqĴ|vw}unw|o|{y{mο÷}{|yr{so|}|{yyypӹżª|v{z{yvy||zxtqxz}xԹɼɱ|tz{||~{sjlxuv~xkkryƻ{t}}rrqyǮy~vxvjƭ}y|~duiε~w|{ipxq˸|vtvwouwu|yjxuuɾx|wjfknkgvfpe{vŰvpptúνlrm`_jojqc^Np}zηtvjpоwulnng[Zdifgqe]ow}yɱ~~iwͷĺyk`nf\VW[`cktsn}}xhxpĺiqeil]W`hlw\b^me_|yx|ƴtiβnj[]to]_timZkhmqjZmuĮ|{ni|d`krmbwſ|nehzrjnqk_imʽn|qwhcvt^hܾlanrnt`OymǬ~olqqmqϗ|Xvyjrvei¼Űbd~{bx̸ٛǡy]ttuvdbĽ}{}eodj{jiglZzҳ~yokyrmа{g\zwuuwyztru}}xw{yyv{us{z~}~~||{zspuxvqpfbekf\\d`yxwxxwv|vw~zx{~|w}um{|tv}zzz{|yzyz~srmjt}tbl__kj\V]bvow~{{|y{}{wu{uv|zx~vyz~~wmnwthkwp]ljhgeb\X_yz||~zyz|}|yxy}y|z~}|ww|}troosvrllifdb_YU[v}zsu}|zy{~wy|}~~{~}y{rou|~wlhquqpujgdb`\WSXt{{uqtzytv{~y|}}yzy}|yxqy|xtuvuvniikjkmheb`_]ZVW{zxxz|}~wsw|||}wyw|}~|ywwxpz|zxuuyrb`ii_gda`a`^\U|wtx~{zwv~~}~|}~~zwvvwxuz{wvxyvwzd_kj\hebabb`_R{yvy~x|y{|~syszxyzyvxyvrrwvry|wlgiidkhcaa`^\U||w}x{z}~zuz|{y|~ypyroqmfflnjda_][Y[}vuxz|xvxzww~|m|xvjvonpof`jzjc^_dd\UQxu{zӇ||}{jsuvztmprnnokfkuga\]a`YRO}zy|z}|}}yolsyusqgrnlnnlkngb]]`_YRN~z}wtt{}|{}z~zyzmwtvwdnmmnmkjea`ba[UPz}~~{srzrxz~~z~xwx}owuy|khnqnighijfbab_ZUS|{{||~t|xz{{yutuwqtxux|vhpsmgghigda_^[WSV}~~~}{~|||xuw}~z|~~zvrpy~wruts|osrkimlgfdb`^ZVSVvwzx~xv~{~|}}xqmqwpk|vuoimtpfigec`]YVU{}z~~}z}|vqrtvrpswwrlwrnoqqkemjd`cf^SYx~}|{{}~|xxzrtvxxvspzvqqsqkejid__`[RWsz}|xy~{vwyquy{xvuqmlmke`fhe]ZYVQTu|||}{}wssuvuttuvwwqolkkid`chf]VUUSSz||{~{}wssu~tjjqwwstsqqpolichg^VUVUSÁu~||{vvzx{}zsooqsfeovtotsrqomkicgf]VWXXS}~zurzxtstx|~vz|xrnnp}sjiospkttrokgdccebZVYZXSxvwxxr}{xsqrw{}xttvwtppqpmi{zxtmhdb^XVZZWS{vz~v|}|~~|wqsxvnnmijpmkifdbg[V]a[RNVyz~zuqu}xqmpqlknklmmkhdbd^\^\SPR\~~}{xvuyplmstpllikmmlifd`ab_UMOWZ{{~ux}}zypnortrnlkjih^aa\SOSZWv}zx}yqyypvtrppqplolhedfik_`]YVWXYY~wt{y|vs|vmywrllpokokgcacfiba]YZ^[UV~xzx}~|}xwz~}vrstupiinnhkigecbdfc]\^ZQSy~{tz~syulpznqnhhnlegghhfb^\ejia\\WOX}~{{wpyuwtjmx{vjfdhnqmhabcb`_g__fbURZRy~{||{~{wyry{wuvsmkfcfknkhhgfeca__e^_fcWTZTx~}xz{tw{}}qtkv~|vrnjmhccgjjhnlifc`_^b]_fe[VZWЃ}zswu}zx}vntvxyvqoppojdbehjjomifb`_\^ee^YYXz}{zy{x|w|zxytrq7lgdehlnkjhecba`^[\ac_ZWW~wtv|~~x}v}}~wswyuololhefimpgghgfdba_\Z\_^ZUW{{~vy|{s{v{|{uuywokmjigffhlogijkjfc``\XW[]YSX{~xvs~{{v{wuungjtggfeehkniknomhc_a]WTW[XRZyvsp|~}uzwvuspljjlpbcikihdaguuf\\]][VQQV[W|vt{|}}rryvtsrpmkriceiijmabhnkc_a\\[YVUVWW|~zsyxvvy|pluytssuxvoiiffjiefkakpkddhj][ZYVS\yotsr|yls}rlu}wsprwvogmjknkd`pujadii_[WWYYVRZoitww~ris}tovxysmmpqlgtnkoph`\_nsjbde`a[TRTWVTL~ogqtqxtouzsuxqupkjlmkitlinqmfdhnponmhaa\VSSUWXHx|zw{ujnlkuwtuqn}qlmlpljmmjjnpgenvtke_^\YVVXZQx{yyszsjmmrwurhkwcgmpponmgcirkYRbqoe`]`b`ZWY[Vwpoqsunwzrntyyrvxunlotzxosohomjggkrvikvuc`hhb`^]^`bchaYVWXWTQfkmlkmoupigpzvknopommpr}zml{}spkfcdgjnjonbbjgfa]]bfhh`ZVY`_VLRbjib]_crkcclurimopqsigrsnsnkgddfikrhijbflfgb]\afijf]VYaaVJUeb[SRW]bfiebelqlnpmigjndmmnvrkppmighijjohkmegmgdc`\Z]chti]XXYUQYWROQV\`Z]`a^]cj_fjg_\bjgrtszvry|wpkgd_[hgqshgmhdiiaUR[eokcZRPRU_^_chjheh^X_hg`[W]a_YX^ejqlgmnp}wrlihe_ZcdquihlghnoeWPV_^ce_UNOSd{{xwqy~wkdjhedccbaag`[cdfqmjgilmhceaingildklkcZSRTacd_WRRThy}}rpsqh_Xa_^gd_ftplmpoibi^afejlakgb^ZUOItndZUTWYiyx{y|puvnwsc_gkfgsqghlechkiimbdec^XTR\_jeOKW[bɻĪ|}y|e{}luchedjifjhknmiffgmjfb]YURYZd_JHUY^ȴ±osunoomlklohtvjadhgxpg`]ZUQXW_ZHIVZ_ñsysvrvwrrsmkvsa[hqmype_^[TN[X]ZLO]`e|plqrijopnlosumt}ytzzgus`xkcnwqssddnmbetvmrkc`_[SKZUZYOTabdJQQIOSHWXWSMJLQSZXYa]^nr_neaXlznrvc[emouztfmhb_]YRLUOUVOUa`^̅}~~{|{qnqwrhhplx~}xumwkkwvhbinzxysv{hwvtsqnhdkɇ}zz~}wwurpnkeag~ч}zws||{uspnlhc_d||yttvuvxsqnlkifbc~{}mkttjrpmlmljha񌊅ojvugsqnmnnlk^~~}}}wrttovtommljha{}z|xqqwyvpmkigegxuzy{zqkuuojkppha]Ӓu~x{}yyzvqvrmhimle^[zw~~|r}ywyywvyrniilke^Zxoyxxyxvuqmlnmga\~}}zvsy|ytrsturnmnkfa_|s{~xrrstrpmkjgc_b}{}~z~}vtxwrqpnljfb_b|x|{vztx{qtsqolieba|}}{~}w}yz||vpxvplorj_e}~{||~|vpuupkklg^c~||xwxvpkqtqifeb]`~~|zwvvtokntribaa__~~uu|~~||{zwtntsjbaba_Ì~zz|~qpzz~}|zxvtnsribcdd_ĉ}~}yy{~utz~{v}zvronnqnfbefd_}~|}{{|{xtxsommnjdbffc_|~yyxtu{xvtqomrgbimg^Zb||x{|wvyvwxxvsomojhjh_\^h{wx~{wwtvxxwtqokmnkaY[cf{yz}}ywvutsimmh_[_fc|{}{{|{wzwspoqtvjliebcdee~x}ww{zvzvrnlnqtmmiefjgab}~{ttyysvtrpnmoroihjf]_~w{y|yssywprrssqmigpvumhhc[d{uxuqosy|xslmnmkjrkkrna^f^}~xvqnqvyvssrqpnljjpjkroc`f`|v}yuxsnnruusywtqnkjimikrqgbfcЎ~y|z{{zuompsuuzxtqmkjhjqqjeed}|7wropswyvuspnmlkighmokfcc~zwzwspqtx{rrsrqomljhfhkjfac~zvxutrqqswzrtuvuqnkkhdcgie_d~yrurrqppsvytvyzxsnjlic`cgd^f}{~{wuuw{mntvtsolrqgghigb]]bgc~}}~}{xv}tnpttuxlmsyvnjlghgebabcc~{w~~zttqqutpqvlv{voosuhgfeb_hz~}w~}w~{}zrxuvyvok{ulottjgcceeb^fzt}t~z~xx{|wryvz{skgjy~umopklg`^`cb`Xzr||z~|{vuwxvtwty|xqosy{zyxsllhb__acdTuywv|y|wxw{wuxxuuy{rpyvpjjhebbdf]~~uxx}}svnrx{{zyxrnt}vd]m|zpkhlnlfcegb{z|~y}y}ywzz~zszxurrv}tvnkssmkihikmnsmebcdc`]qvxwvxz{tr{vyz{zxx{}xw~{vqnoruyuzymmurqlhhmqsskfbelkbX^mutmhjn}vnnw}txz{|~tr}~y~yvrooqtv}stumqwqrmhglqtuqibemmbVapmf^]bhmqtpmpw|wy{xtruyoxxy}v{{xtrstuuzsvxprxronkgehnsuiddea]ec^[]bhlfilmjiovkrvskhnur}~}{vrojfsr|~srxsottl`]fpzwof^\^akjkotvtqtjdktslgcimkedjqu|wrxy{}wtspjeno|tswrsyzpb[ajioqkaZ[_p}wpvtqpoonmlrkfnoq|xurtwxsnpltyrtwovwvne^]_lopkc^^`t}|~}sjcljirojq{wx{ztmtilqpuwlvrmie`ZTzpfa`ceuǪy~w|lhptop|zpqvomrusswlnomhb^\fitoYUaelͳnu~lqnmsrotruxwsppqwtplgc_\cdniTR_chѽ˺x|~wxxvutuyr~tknrqzqjgd_[baidRS`di̺||{{{|wu}ker{wzoihe^XebgdVYgjoyuz{rsxywux|~v}}p~|itlwz||nnxwlo~w|umjie]Ud_dcY^klnSZZRX\Q`a`\VSUZ\cabjfgw{hwnjauw{meowy~pwrligc\V_Y_`Y_kjh̉}snqwrhhpl~|yoykkwvhbin~|}wzjyvtsqnhdk ~~yyurpnkeag~{wwspnlhc_d}xxzyzzuqnlkifbcqoxxltpmlmljha񒐋snzyiuqnmnnlk^{vxxqxtommljha~|uuy{vpmkigeg|y~}~uoywojkppha]Әy|}}~zuztmhimle^[~{v}{}}{z{tniilke^Z|s}||}|zywwqmlnmga\~zw}}xvwvwrnmnkfa_w|vvwvtpmkjgc_b~zx|{tspnljfb_b~z~x|svsqolieba{}~zrzvplorj_ezrwupkklg^c|{|ztmstqifeb]`~{zzxsmptribaa__yy~{vptsjbaba_Òut~~~|zvpsribcdd_ďyx~z~zvsppqnfbefd_|x|wsoonjdbffc_}}|xy|zxusotgbimg^Zb|{z}z{||zwsoqjhjh_\^h{|{{xz||{xuqmmnkaY[cf¢}~}{z?yxwwukmmh_[_fc{~{wtsuxxlliebcdee~{{~z~zvrpruvomiefjgabxx}}wzxvtrqqoqroihjf]_}}}ww}{tvvwwuqmirvumhhc[d{~yusw}|wpqrqoltkkrna^f^~zuruz}zwwvutrpnlrjkroc`f`|{|wrrvyyw}{xuronkoikrqgbfc~ysqtwyy~|xuqonllhjqqjeed9{vstw{}zywtrqpmkghmokfcc}~{wtux|vvwvusqnlhfhkjfac|~yxvuuw{~vxyzyurmmhdcgie_dx{vvuttwz}xz}~|wrlnic`cgd^f{yy{qrxzxwspvukijigb]]bgc|zxrtxxy|pqw}zrnnihgebabcc{~xxuuyxtuzpzzsswwjgfeb_h{{~v|yz}zsoypsxvlgcceeb^fzx~||{v}z~wokn}yqstmng`^`cb`Xx~zy{|zx{x}|usw}~}|wnnhb__acdTy}{z}{|{{y||yy}vt}zrljhebbdf]y||wzrv|~}|vrxzhaq~tmjlnlfcegb}|~{{{y|~~w~|yvvzxzrowwqomlmoqpumebcdc`]sxzyxz|}vt}x{|}|zz}|{zursvy}y~}qqyvupllquwumfbelkbX^owvojlpxppyvz|}xv}}zvssuxzwxyqu{uvqlkpuxwsibemmbVaroh`_djosvrory~y{}zvtw{s||}z|xvwxyy~wz|tv|vsrokilruuiddea]ec^[]bhlfilmjiovkrvskhnwvzvsnjwvwv|wsxxpdajr|wof^\^akjkotvtqtjdktslgcimkedjqy{v|}{xwtnirsxw{vw}~tf_elkoqkaZ[_p}wpvtqpoonmpvojrsu|yvx{|wrtpx}vx{sz{zribaanopkc^^`t|}ulgpnmvsnu{|~xqxkpstw{nztqkib^Vzpfa`ceu̬~|qmuytuuvxposwtuxnoqnjc`]gjupZVbfmҸszqvsrxwtvtvyxtqqrxuqmhd`]deojUS`diºп}|}}{zyz{tulosr{rkhe`\cbjeSTaejѿyw~lfs|x{pjif_YfcheWZhkp~zwx}~|z}{unyq|ppyxmpx}vnkjf^Ve`edZ_lmoX__W]aVefea[XZ_ahfgokl|m|sofz|ofpxzqxsmjhd]W`Z`aZ`lkiYahfdedlroy}czjie_ZXWVYXVTSRQPWOoWS\db__gsrjxƢrhnkjd[WXZYWUSRRQULl~[UWfrjZ^`pqz|{yodf^WVZ\^^XVSROLWVPtyvZWXbkf[\iwm|}wpe`\ZWUW\XVS,QNQRRfv}{\^]_cc``t~k~xtra_^\UOS\XURRSTSPSRZa~~^cb^^adht{n|rlma\Z\WPS\VTQPRSSQYL]e~Z``\Y]ckfourijk]W[[SQXVSONPRRQXBUi}SW[ZVY^hZf{~pfeubX\]SQXXUPOPRRQWERn}xPQY][Z]g\l~}qfbsbY_]TXf]YSQRSTSPQSiuQP[db__kgw~Ǥzlgj]Y`]Vava\VSTUVTEWP]_xV]``acf]uolxyzsrka`]YXZ]^^VOSVOSYSOWSXrz~wU]``^]][khw~zunhfb^\]_`_VOSUNQWQO]ZWfyzT[__[WT_klxpnjfa^]WPSTLOTNQ\XVh|SY\][XVltwwmokf`\[[YXZRUVMOTMTVOXx}{~TVY\^rt}{riklga][ZYW\UXXOQUOSVPZx~yUUY^bdembi|ogglhb^]]\[]UXYPRWPQ]ZXhwUW[aeedd[mvnjgie_]\[TWXPRWPU`[Ucv~~UX_efc`^`}|nrpmic_[YZ[YRUWOQVP[]RRl}[^`a`_]]nsr{rmic_ef`]^^]JTYUTWVP[ZTTf~|{WY[]_`aanu~tliiadb][^]YOX[VSTQL[ZUWl{}wTUVY]ac_gqykhnfd^YZ^\UQWZWSRPMZZW[pvTVY\^`abfp|ienke\X\a\SOSWVTSSRW[Z[j|V[_aa_]mpv{idmlf]Y_d^SQSVWURRSU]\X`xX^cec_]ruu|~vkhlie_\ae^SXWWXTMLPW][T[sW\addcasupsztqmkcb`^ad]SZVWXTLKQ[]WS_vUY]adffxzrt}uuph]``_ab\RWSTXUNOV_\TSe}~vw`XWe`\ovh}yzq`fkh]X\]ZNTZYTOPSTdYMfz^Z\badrroyulaiibZZ_]VPVZYSNMOXg\OdRW]Y]hlt~{qkjke]Y]a\SSW[YSMLLYh^Qd}vKWbX]kfmyr|rqyhc][]^ZTTWZYUPNNVe^SdzO_ladoh`sru{qtdb`_\YXYTWYZWTRQRa[Q_r{}{}S^hedhrt}unqycabb]WX]TUXYXVSQSaYNYjt}oXX\b^^iqs|oloqg`_cb[Y\TUVWVSOMVc[Q[kz}waXVd_]qgewykmpnk`[bf`ZYUTUUSPKHXd^VatTX^dhiir}~|nioib\\`b_\YZZYVRMKS^[OWw~VY]cgjltx{pjjke_]_^YTXYZZWRMJX`[OWu}{WY[`flogmxsmelhcbb`ZUWY[[XSMI[a[OWrvxX\clrxbq{tuqgecabb`[VWY[\YSLHY_ZRYn|~}|WWVY`ksyo}xqutla`_^]YUQWY[[XSMISZ[VZjw|XYXY`kuxqokifb]XTQYZZYVRMKOX\XYgy}x[\[\bnwz{umjlpnid^YVU\[YWTQNMQZ]WUe}~]__^dpywk}~{~xjdhfd`[VTST][XURPONS\^URc{ccY^ptjkvugch[fe``XRZ]a`YSQMIV`[KTtXZ^fottwusvvnnmh^ihbaZV`SXZWWXUOS_[MWvUYgqqt|yrxtmvtf^jha_YXeRTUUZ]YQR][PZw}W[eorrszz{|tvpc^he\[VWe][URVZULR\ZR[uww|V[[ftrepx~|pfbaic[\XWcfaWOQURJT[YR[r~}u|{X^]j{gx~yv}|z{kbbimd]a^Zac_WOPUTOV[XR[q~vW^gtyl{w|{uqmf`mmb]ebY[Y[YSSVURXZWS]t~|QWiurjfzrvniql\mk]ZebUTSY\XVVTPXYVT`xyQYfljlt|ts{~~xtlli[ehihea[WYVVWSMNSV][U_xU_jlhjqutx~m{wvool]ajld]]\Yd`\[VQRX[_\YgZdlkgjqsx{|wwyssn_bop`W]a]ga[XRMOV_]XYm~~`gjhhoww|}x|vy}vsn_iso]Xcf]`[XVPKLRaXOSlndgeekv~yyxuwy|~uqk]noeX[geWYWXZVPOSeVJQlnggdfpz}tsoow~~rmi]ng\Y`f^QRRUYWPORgXMXtjiflvyvqromv{njj_oc\bgbYTSRTXUPPUbWSb}|lkjqywmsvuptykikcpdbnoaY[_\[\ZVX^[RUgyzbfntri_utohlz~sopmggbbfc[Z_]WX\VKQ_X[Ngsnaflppmjqonouvqvym]ia^ce_[[_WUXTKP]VVNl~zchklmopnhit|ytwwl]i`[`ec]YbXRTRMQZVUTuhkmmlreerywyokjhfc`bdc_\eZRRQPSYRQYsglprpli{kfosp{vmlljcgifa``af]URRSWZKN^lwenrrqppskmopz}rrtncajng^]_`a^XTSUZ\OTnrwemtrpqow}zƩntsoidba`cb`^]\[\e^~c_hpnkkr~}uѭ}syutneabdca_]\\]c[{gacr~vfik{|ɷzopha`dfhhb`]\YXee_fcdnwrggtx{ojfda_afb`][Z_aauhjikoolkv}kihf_Y]fb_\\]^]\aaipjonjjmpsy}wxkfdfaZ]f`^[Z\]g[ltfllheiovqz}tuugaee][b`]YXZ\\]fQdx_cgfbejseq{qplbfg][bb_ZYZ\\]eTa}\]eigfirgwŨ|qm}lcig^bpgc][\]^_^`bx]\gpnkkvrүwrtgcjg`kkf`]^_``Pe^kmbillmorhzw~}vljgcbdghh`Y]`Y]c]Ya^c}ailljiifvsysplhfgiji`Y]_X[a[Wedap`gkkgc`jvw{ytpkhgaZ]^VY^XYdb`r_ehigdbw¥xzupjfeecbd\_`WY^W\^Yb`behj}ç}tvvqkgedcaf_bbY[_Y[^Zdaaejnpqxmtzrrvrlhggfeg_bcZ\aZYedbracgmqqpofxyursoigfe^abZ\aZ]he_madkqroliky}{xtmiecdec\_aY[`Zce\\vgjlmlkihy~}}xtniopjghhgT^c_^a`Zcb^^pcegiklmlywttknlgehgcYbe`]^[Vcb_avȜ`abeimojr|vsypnhcdhf_[ada]\ZWbbaez`behjlmmq{tpyuofbfkf]Y]a`^]]\_cdetbgkmmkix{ǿtoxvpgcinh][]`a_\\]]efbjdjoqoki}ȶvswsoifkoh]baab^WVZ_ee^e}chmppom~{~|xvmljhkng]d`ab^VU[cea]iaeimprr}{sgjjiklf\a]^b_XY`gd^]oldcqlh{s|kpurgbfgdX^dc^YZ]\lcWpjfhnmp~}zwlsslddig`Z`dc]XWY`ofYn^cieitx|vuuogcgkf]]aec]WVVaph[nWcndiwrx}}|rmgeghd^^adc_ZXX^mh]n[kxmp{tk~}|nljifcbc^acda^\[Zie[i|_jtqpttsy|mkllgabg^_bcb`][[icXct~ddhnjju|~zwz|qjimlecf^_`a`]YW^ke[eumdbpki}rpvx{yujelpjdc_^__]ZUR`lh`k~`djptuu}ytzslffjlifcddc`\WU[feYabeiosvx{uoigihc^bcdda\WT`heYaceglrx{rx~xpvrmlljd_aceeb]WScieYa|dhox~m||romkllje`acefc]VRagd\cxccbelwz|wkjihgc_[aceeb]WS[be`dtdedelw|zusplgb^[cddc`\WUW`fbcqghghnzxuwzxsnhc`_feca^[XWYbga_oikkjp|vuospnje`^]^geb_\ZYX]fh_\nooej|vvrnsepojjb\dgkjc][WS`lgW_dfjr{~yyxshsrlkd`j]bdaab_Y_kgYbaes}}}xqhtrkicbo\^__dgc[^ig\ecgq{~~{nhrofe`aoge_\`d_V^hf^fbggr~q{{qmksmefbampkaY[_\T`ge^f}djivsvmmswngkhdkmiaYZ_^Ybgd^f|ťcjsx|xqkwwlgolcecec]]`_\dfc_h]cu~vr}yt|wgwugdol_^]cfb``^Zdeb`k]erxvx~wwtforsrokeac``a]WX]bigajakvxtv}mzzwhktvnggfcnjfe`[\bgkherfpxwsv}~~~yjlyzjagkgqkeb\WY`kidexlsvtt{~yjs}ygbmpgjeb`ZUV\md[_wpsqqw|vhxyobeqoacabd`ZY]qbV]wsspr|~zz}xthxqfcjph[\\_caZY\sdYdvurx|}zxyuujymflqlc^]\^b_ZZ_nc_nxwv}y~{vtvnznlxykceifefd`bhg``ulpx~|sizsw~z{xrqllpmedigabf`U[kfk\v}kpvzzwt|zyz|xhskhmoieeia_b^UZide]{mruvwyzystwhsjejomgclb\^\W[fddcruwwv}pp}zvuspmjlnmifod\\[Z]e``hqvz|zvsvqz~{xwwumqspkjjkpg_\\]afY]m{ox||{zz~vxz{}}ynktxqhgijkhb^]_dh]c}emtrpqs{~ʭrvtpjecbadca_^]\\hac_hpnkkvyձw{wuofbcedb`^]f^~gacr~vfmoͻ~qribaegiica^]ZXhhbfcdnwrgkx|}qkgeb`bgca^\Zbddxhjikoolozmjig`Z^gc`]]^_^\ddlsjonjjmpw}{zmgegb[^ga_\[]^^]j^owfllheiozu~xwwhbff^\ca^ZY[]iTg{_cgfbejwiuıurmcgh^\cc`[Z[].hWd\]eigfivk{ɬuomdjh_cqhd^\]^__ace{]\gpnkkzvֳ{tvhdkhallga^_`a`Rfanpbillmorl~{znlhdcehiiaZ^aZ^d^Zb`eailljiijzw}urmighjkjaZ^`Y\b\Ygebr`gkkgc`nz{{vqlihb[^_WZ_Y[fcat_ehigdb{Ʃ||wqkgffdce]`aXZ_X^`Zc`behj􃌎ǫxrlhfedbg`ccZ\`Z]`[eaaejnpq|qx­~vtxsmihhgfh`cd[]b[[gectacgmqqpsj|}ytupjhgf_bc[]b[_jf`oadkqrolmo}|vojfdefd]`bZ\a[eg]]xgjlmlkil}|xpkpqkhiihU_d`_ba[ed__rcegiklmp}{xvmomhfihdZcfa^_\Wed`bx1`abeimonvzw{roideig`\beb^][Xddbf|`behjlmquíxt{wpgcglg^Z^ba_^^]aeefvbgkmmki|ëxszxqhdjoi^\^ab`]]^_ggcldjoqoki̺zwyupjglpi^cbbc_XW[agf_gchmppom|xomkiloh^eabc_WV\egb^kaeimprruikkjlmg]b^_c`YZaif_^qldcqlh{wmrvshcgheY_ed_Z[^^ndXrjfhnmp~~{nutmeejha[aed^YXZbqgZp^cieitxzwwphdhlg^^bfd^XWWcri\pWcndiwr|tnhfhie__bed`[YY`oi^p[kxmp{toĮpmkjgdcd_bdeb_]\\kf\k~_jtqpttwĪ}olmmhbch_`cdca^\]kdYevddhnjju~{~~skjnmfdg_`aba^ZX`mf\gwmdbpki}vtz|{wkfmqked`_``^[VSbniam`djptuu}x|umggkmjgdeeda]XV]hfZcbeiosvxywwpjhjid_cdeeb]XUbjfZcceglrx{v||rxsnmmke`bdffc^XTekfZc~dhox~qtqnlmmkfabdfgd^WScie]ezccbelw~ymkjihd`\bdffc^XT]dfafvdedelw|wtqmhc_\deeda]XVYbgcesghghnz|yy|ytoida`gfdb_\YX[dhbaqikkjp|zysurokfa_^_hfc`][ZY^gi`^pƤooej|vzvrugqpkkc]ehlkd^\XTalgWaŽdfjr{}}|ujtsmleak^cebbc`Z_kgYdaes}}|sjusljdcp]_``ehd\^ig\gcgq{~~pjspgfabphf`]ae`W^hf^hbggr~quomtnfgcbnqlbZ\`]U`ge^hdjivszqouxohlielnjbZ[`_Zbgd^h~ʪcjsx|umyxmhpmdfdfd^^a`]dfc_j]cu~vr}x{iyvhepm`_^dgcaa_[deb`m]erxvx{{xhqstsplfbdaab^XY^bigalakvxtv}m~~{jmuwohhgdokgfa\]cgkhetfpxwsv}}lnz{kbhlhrlfc]XZakidezlsvtt{}lu~zhcnqhkfca[VW]md[_ypsqqwzjzzpcfrpbdbcea[Z^qbV]ysspr|~~|xjzrgdkqi\]]`db[Z]sdYdvurx~|}yyl{ngmrmd_^]_c`[[`nc_nxwv}yzxzp|omyzldfjgfgeacig`bvmqy}tj~w{~|tsmmqnfejhbcgaV\kgk_ylqw{{xu~}~|julinpjffjb`c_V[igh`~nsvwxz{}wx{jukfkpnhdmc]_]X\fggfsvxxwtt~zyurnkmonjgpe]]\[^ecckrw{}{wtzu~|{{wortqlkklqh`]]^bf\`p~py}}|{{z|~}pmuyrihjklic_^`eh`fxKM]\cpw|èqgѮ{[JHEL[`qZ]|wpznwpbqݩkQUY_vk`˖oS?@NRV\Z_hxylluur^]rosWlhtrvǵb쵂dMJDOUaaUk|xx~oabdn~ѧkRejq}x{ܻvlԾsXaNF]gjszqsnk^S|weXnllxժu\y`Tzı}rVb˙o`cvkjwԻٵnYֲow~{sZTΐhcnqlo~̺麪ljlԢtcnznlpfbڵkrvu͵Ĥҡ~ݮsfer}yvywfөxnϼ߲չԱٺb^hlrxtkۺWiz֩ܳ佞sq|qq{ԽXmߤkʾĿǾ˴|}ekzŴa}˾mƵѹuwj|ǷyY~׽utǻfoʴdLukʻqsƱԷ^O{ȕ[úֽheؽ`XѲg³ѳ׷Ų}`ebřaYүλɿƵs^hspϡcWΣvtl\tcjӾvM{ɶy~~|mplqtnglxk†Usֳ̪~rjijkc_WT`rxs}lgklv~yuȋ[qѳɴ~stphentsy}rzgurv俀TkΰϷttuy}u~龀Paع¼~pm{ȚfcմƿŽvvη}cä½˿v{wȽUѷ¹̶fjn؂lĨ®ѼyhhlnWܫdj̺˾óü±xkpvlWHPɮfOľmldgocKJ[mȬŃQǷ~~wmahodH@e{xɿy{uquzzv^]WPWrǯyʻxru|uaSKPUa}Ǖ¶ʽ}{}ts|t|cND]i|kƺ¸yxos|r~}|ueSN\nx{}æÿvmyi_euobvƅ~rſƬtsϐz|̻˽ƾ璌|}úÿzzĪ÷֕yxpxڹun˽ɴ¶ƫ[xwʱ˱ŵǷüλh\¶ľʺ¶zwhZt{yĿeT`guĸ~ofXj˸}o]\`nɽǷ~sir~|rltɺɿ{sqnio{zpvǵv~ͼԾ̳õ|ĶĹ×ɲŘű̺ÿüʱǭθʾ÷ũ½ºªʳ¹Žӿ¢īѷԺüž˪ԭϻõ˝ǿó¿ƿ佁┆ȼλĻ›Իʾ«žˢǺÿ̺ŻĵϩŻĿƹènքWYiho|γ|rܹeTROVej{dgzz|n}̺w]aekİvk֡z]IJX\`fdirvv~ji~{͚ezvmoXTNY_kk_u{mnpzߵy`sxƥwɫ~clXPgqt}ʷ}zwj_Φsf|zz൚̰gj^λ~bn´٧}nqyxxc༏{f`ݟwr}{~Źŵғvެozzx|rnďzϯ̩ݫ}rq~r⸘}߻ęljtx~wɴfxᴱ˻潮 KǨ}||}̷f{vֿpvÿoɐxĪuƸgȀƯqzèrZvƷ|~Ѽơl]ӠfŻȕsp̢nfܽr;ܾݽнkpmԨogݺ̟~is~{ɽްqeٮ̸ƸƼwgnuͿ[˭x{w|yrwvєc׵ᾠ}utuvnjb_k}~wrvwיiھԿ~{spy~}r}Ύby׻ƿ͎^oį{xרtq޿ŋq̯ʺώc©̽ïquy˹{ҶѼǾȾŲsswybsyͼξͼv{wbS[ؽu^ŻxworznVUfx׻Ԓ`м¶xlszoSKpȭ|ihb[b}ô͠־}l^V[`l̷֤~nYOhtǛ}Ƨɪdzz~}p^YgyӊĞҵνϲxtjpzmїƬջ~ڢТ̼ʹ򤞚̵ǺȴӹɿǸĶù᧧нǽƻȿ¹ĕ}ſ˸Ѷfƻ½ƫsg§sep_krǴĽĮzqcuǿzhgkyƷ~t}}wˤǿ~|ytz{û̿½˺Ϳ¾ΝɶǭҢԽУмƸƜçŽˣռҸ˵дǿ¨ŲŸý͵ž˽ŭǵ˺Ǫƻͭ϶¯ɾ˷ʵȸֵ߸ǟȮȿ£ɹƽª³֬ʱĹ»Ɗ룕ǵƮİͤď̻ͶɴɭԫųĿǧƺڴĦÝĶþγnքWYiho|ҷv໇fUSPWfk|eh{z|n}ϻw]aekȴzoڥ|_JKY]agejsww~ji~{Λf{wđqđsZVOZ`ll`v{mnpzඐzatyʩ{ͯgnZQhru~˸}zwj_ѩvi}}乞дkl_ϼ~bnǷܪqt|{žĭzd὏{f`zu~ɽɹԕw߭ozzx|rnǒ}ĽӳЭ߭~rq~r廛ὕŚmjtx~w̷i{帵Ͽ辰ɩ~~~}Ϻi~zrz—r͔|ĶȮyɻj̄ʳu~ƫu]Ƶzʻɤo`פjɿ̙wtĬϥqiv¿ɿotq׫rjᾝУmwthݲмʼ{kry‡^ϱŴ|{}v{zԗf۹¤yxyzrnfco{vz{ڜl i¤öwt}vёe|ܿõБarȳĸ|ګwtïļIJȎtѳξґfƬdzuy}μ~չԿ²ɶww{}fv|пz{fW_xaȾ·ź|{sv~rZYj|ھוcӿ»Ź|pw~sWOt˰čĴmlf_fǸУĹpbZ_dpŭÿ٧Ϻr]Slx˟ɪ̭ʶ~tb]k}׎ǡոҵ|xnt~q՛ɯؾަӥϿзϸʽ˷îüĿּñ¶ʼȺǽ嫫ɾƽșϼպj¸ʿʯwkȭykŽveqxʷ¿Ȳwi{±¸~nmqDz˼x{ѪĻ}x~ijöνӡͺͳƳĢêצԧ¾̠̾ƪŸºѩؾźϻֺĽƬĺɶɼúӻȢƸŷɱͻͮĨ¹Ŵѱռȳл¼ιξܻͣ˱ȧͽƮȹܱƻзȽƿòúƴˏ𨚗ͻ̴ȴèѩɔӼ͸ͱٰ˹üIJ˫öâķ޸ɫâʼҷƤ{sgZVfv~xcX`ư~ttzoifhdǠoZTadTKPPqria^NmubifizzujueYimRiˬ{MATwe>GKUcmqv}{hZ^hh`[bjzofg_\akqprxnfZW`f]OW_RK^ehyr͡RC8UdLQbaj{{qdjz`_bwƼvrjeluqeBHMXrk_d^MJbwgzIQiNVlkoxpp{VYŵ׹ufk{wO^MOKQs\]e\HTMVxfoeZehq_l\˳nwpe\huodX\UMqlhefZI^}Qd~`aYQXRWJ̮yȮڼgxlfa_qZT\UDYunnifXJbznSp[TQNPCDC̭ì߮x`zmjjgqyq_X[S@JfpgdcWKawaMhVQTUWKNX˿οЍ]doytvlVTdlxlbTCG\k][\TNjaHWoKPWZb\coèaa~{qa_cbprjYHBIXf[YYSV{jPTXBOU[liktqy`gu|m]eY\M;a}õste_ENǿϙz˻ȹmvk\OAdʺٽɷøryiVNOxȽקʺÿɵrru`HIbȞ˿ҳrrpY@M|̻̘ǸĿ;riUE[ӊ̯uhXLLj̱݌{¨˾zc`KHY}ӿ˻וȯù}bdLPlڿ¦ȳŲt][PPzſĠʵè}hVW[eʪȶƺucWKd|Խ͝{ĭr_SHpϐ}̸ŶzhSGWԋͷĹr\KFkփлǹ}fPMXȾɑærVCNf̾нŴzgRJažЬĺϾsdTQiǾqcWXqԿ̿ĸk[RYtΧŷđɼºt^OM_ǽ|n[QZwϽǼ~sd\iö¿õ¾xh`kĵv~ľſaR\sȞĿþn\ZiypsľhXZhwԺa{yshò{m\as̩{Jjtw|urtwy¿˹yl`og<`kzs|{zz|˻m\işjGcx}Żr]ghS_xy׸{wseylhjy}yy{v|ӮoouOa~zʻκ{uo|n^tĎķzle}ep㏕ò}rb}˯i➕ļ}vqwꤜƾĺwrzΧ㠚¸rpvěԠƶwpqqʱہg}ñîuuހAԉĿznvÿɏvr·Ⱦ³vvȶŲxu~оöȸśzޘܽĩ덛־­Һ{✦ʰ̾ǧtoִuոǯǶ¾eĿüú}[gª܀ôsqq׹ѳjkg~ʹ˪~u_szĺ~wlYlvʺ}uobS^˾ĥ̾zowte]qú˶¾jkzfeԹ³ëmpkR\ɶ̬zsuVIl̢ǿ~pjPYګĺëxvgZLoȢȺ}taYZⲲ}}kSTmөʣݾ}}{dKXתɰ}t`Pfޜ˶׺scWWu׼螡ͳɸnkVSd᧡ɮӺĿmoW[w̸Ӿнhf[[ϲγsabfpռŷnbVoد˾ϸ}j^S{ڢùs^Rbߝ·Ŀ}gVQvᕠƽĵq[XcԣĬα}aNYq˽Ķпr]Ul۾ɿ~o_\tɲ˿|nbc|š÷vf]dٲϣżiZXjǾ̴ȣ½yf\eýŽȾ~ogtǺȷskvȹʽl]g~өɾygetɾ{~ɿscesŔl~sνºxgl~״Uu}žwkzşrGkv~Ⱦ÷xgtЪuRnĶ}hr̭s^j~pwsu޹zz™Zl°z˭yiϝ¼wpǮp{ν}mֺtǿ|˸Żï}ٲô}{Ϧ߯ķ{|ؼvмнAߘƾι}ԞŴ™³°Ŀ͍̾ɾϺĵ̀ź¾ɼ̼ɟ㝚ȭ𒠲Ʊ־硫ͳ˫ytƭĪýڸĠzڽʲ˺¶jƵǾ`lǯ߀ǸŶwuvƿ۽շnol÷νϮycuzªȾ{p[nvʺļysfU`˾Ǩ»~s{xiasúιno~jiֻŶ§ǯqtoV`˸а~wyZMpΦĹâtnT]ܯ¾IJȾǯ|zk^Pș˽xe]^涶ĸoWXqٯЧ­hO\ݮĢʹxdTj䠥Ϻ۾wg[[yãѷͼroZWhꫥͱ׾öqs[_{ռlj__նҷwefjt¶ɻrfZs޳ӼnbWঙǽŽwbVf塢¯¼ƻĽkZUz癤ȹu_\gڧȰŰҵeR]uʺ±ùvaYp«úsc`x϶¸ørfg˥ǻzjahݸէm^\nкΧ}j`iƶĿskx˾DZ̻wozįοpak׭žº}kix•À>üwgiwɘpwƾ|kp۸Yy·{o~ɣvKozǻ|kxԮyVrȺlvбwbnŵtı{wy¸Ĭ~~Ɲ^pƴ~ϱ}mӢî{t˲t򣩬qھx񲩕ýϼɿdzݶ򴮤ǸŭӪ㴠Ⱥ{ž®õA坖ӾڣĴʹȞűǸǵǔľƷðӒԿɺŴŽ}punkogbe^SUY_r|sibZY[bq}ú}|mtod_ge]a]Wmx_URNPYk~¹ʴ÷wjjsjlfehabtsfagfZTVKLOZn~wlil_ffhmgi|klrxteUMQRRT`x{wtngd[dfipmo~v{{sjd\UMQSPRizspkfbbfbdqrpx|ma`]VBIQPO]{pifecfeZ]s{vwvylcWIFGKMNWqwvyyuwkccdb^_W\x~wkb[TVLFHKTjzvz~}y{xma`db[P\]e|oe^^c\NFILQcypkonid|z|{~}yzrdZ^faUH]hp{yqaWXTJGNPO\owe^huzsw}|zywrf[YYTQPPaesvmd[VXXJELQNNTod\\gvjzty~yuoh^YZbf\MDKTZi}jb`__bWLGLQPSZzrabpytjty~osslgc\UMQWYPHJRJGSbm{o]X[[YXSMIKMNSXtr]jߵ~qtmib[VTPMHFFGD@CKI?O^\k{raZW]`[TQKLKIJMPPyլtmsrle_YRLID:9FSO@3LDT^U]i_QS[cb[VW@HLKOWWQlھwdpljg]MB?>DLNGBLZ__gi`^b^a`_[PECH;FKKWhh\cʺʰwuoiaQ@:=>KUM=?bs{yqlc^elcYOC859AIIGXpqadzøyiYF9=IF?>JZfpww{ll^Ud`VNMKEBBJOHASnp]bsz³¤¿{~ZAGX`aUP\lxxwprpjug\ZVLDDPNKSk|jLfzztǽȮľzWO]e`khm}~}voow}}tqh[UWYhoigmnhd~ʹʺͽoUYmtot~p~skmty~szxjfkgx~qbckoelvɿͿ˸ta^k{kxpq}yvzu|yposxvpjkokcc|_fDZnflŵ~rts{xu||{xsqrss~tkmy~scdklϼqfky̮|umoswtpu}ypjnuvqruxxtop}jkwԼȽƵy]\j{ͫsjmlhiottvuplqywnmrxxsnqvy{ogmtͫm_chpӳvptrlpywljprquzvlwwxxurswttryxvƾuu^Wtέsfsposxxpiyytlox{wqxujly}xnt}ruĻmgahx̾y~trprtsnhiossvzulpxwonvvnvsu|{uruƵeYdxzкqtsqpnmkjbhnqtvqiltwrrvsj}qkqywmfxҿcVexxۺlyqqpmjikmljggjnpohptstxuo{pinvugZwĽžzc^fkuڲ}mmljijmpungefjnqmpqpruvtspnpsocWr·w^gicvΥlkjjkmopsmjlmkjlsrpnnoqqmrtrold\kȀxQkpi|Υ}olijnpnkpjinpkilpnmllklnovvokljfgͼzEjurܴnrmikpqlgrieiljlshfhklklotxukhmpmc`urӶ}zpfelqqmnomhiopmbkmjozxkt~woz{j^fĸhto¼ȫrnjhilnojmlhhkjfckminxwlx~wu~nhl¯{cpt뽥}iklkhhkngkkgegeaeklhluunrrmr~wiks~_o|±٬}ehkkihijeiidbefdgkkgjqsokieo{pem~vw|ǵűgghkmlheeiicafklhjkhimonomjsukuwƝzkjjlomiddjkfdinpgikkjjkmpsos}wou{smoqpmjihakplijllehkmkhhkkuqmuumnqulsxtkfhm_ksrmjhfdglolgfijyuksvnklvtxuvvtrpoouwz~~}{znigjkgdffmrpjfhk`glihiifmyzniqtohuuw{urssuvxz{~uollkke^\_a^^abfkkhgikahkhefeacpunlsvrjn~y}{ywutssoib^^_aa\VTX[[\_]^`abcef]cfcabb_[irontups~y}yuronm_\[\_cdd[WW^baac^\[[]^]\U\_\[]^\Zgrrpqpkr~wsuxsplhec\^cgige\Y]fjhec`_^\YWV[\XUVWTXcnqppomnzplpwqnkhfghiaabegfb_[Y\dhebbhiigc_[Y\`_WRQPMS\flmnqs|y|~{uqqrsqnllmprec`_``_]]WV[^]\^_dije`^b`YTQSX`efhms|}{~mvx{}|xrmkifddfjlfa[Y[^aa_WRTVVY]R[egc^^`Z__ZWZ\ZXZ^a``fnlyt{}pshbp]Z[ieLYSMPZ\TOQSGLVUUSFMQSQQV\`Z_^VSY][WZYUW\]XPz}x|v`n{_T^T:9PCBMOA?FFTVVSPQUWY\YQNRTREUZNGMNG`ĵ~tbev{zyb[a`YXVQLHGHTTPIHLLJIQM@BUa_Ͻ˻ʑ}qfb_[UMIILIDABEECPF?FXkw|¾v}wtupe_`WOGFIIFCH?JgwvȽx{~tnouh]]`]WSURcӮyy{owv~qjlpehnkebpmtқǽԿˢhyooyyldgqaW_hhdbwuxֳ~{{y|voqsspi`[\Zdsqa_jn}пy~ut}yvsuurkecb^_gpk^[at̷ͽ|usopuxvstqkdacf^elmha^^y~pȺ~kmqtsommokfcbbcc]holhihdkzysslrtgnttqlhejd_`fie`_inkghhf]cb`ci~y~xvswyxfmrpmje_idadkmhbbgjid``bjfda\atȿ{yvzrmpi^`ci|}sldcel{ŷxzojrphlgawi_\XZcuӽ¹uu~uwqpslm}pkqpd^`UVYdxı̼wtwjqqsxrtuv|~o_W[\\^jǽyrofoqt{xz}tnf_W[]Z\sȻ³~{vqmmqmo|}{wkjg`LS[ZYgŽ{tqpnqpeh~vmaSPQUWXa{~vnnomijbgule^`VPRU^txlkomf[ghpyohhmfXPSV[myuxxrm}oeiql`Shs{{kab^TQXZYfyèpjs}|pecc^[ZZko}wne`bbTOV[XX^{phhst~zshcdlpfWNU^dstljiilaVQV[Z]d~mn|v~y}~wrng`W[acZRT\TQ]lwygbeecb]WSUWX]b~iv鿚{~wsmfa_[XRPPQNJMUSIYhfu|kdagje^[UVUSTWZZ߶~w}|vpjd]WTNDCP]YJ=VN^h_gsi[]emle`aJRVUYaa[wɷnzvtrhXMJHNVXQLVdiiqsjhlhkjieZOMREPUUarrfnżɰӺysk[JEHHU_WGIl}{vmhovmcYMB?CKSSQbz{ko¼scPCHSPIHTdpzvvh_nj`XWUOLLTYRK]xzgm~;ͯȯdKQbjk_Zfvz|ztqfd`VNNZXU]utVqӹĻaYgojurwyy~{re_acrysqwxroƺy_cw~y~y|tv}}tpuq{lmuypw~khutyzzy}ztuyumnjqůкxpvξ{}|~}{|}}~uw}movwų´{puշ~vx|}y~ztx{|~y{uvƾϾgftִ|svuqrx}~zv{xw|}x{zrx׵vhmqzܼy}{uyvtz|{v|}}˹ɸibٸ~q~{z~{twz|uwy}xrlsɻ}{}zttz~~w{zyy~}pdoűœ|~|{zywvmsy||tw}}~u|v|xq˸napŎw||{xvuwywurruy{zs{~z{tyreniqv±彗xxwuuvy|yrpquy|x{|{}~{y{~znb}¹irtnıٰwvuuwy{|~xuwxvuw~}{yyz||x}}zwogvӀü\v{tٰzwtuz|zw{uty{vtw{yxwwvwyzzvwuqrµPu}翣y}xtv|}xs}tptwuw~sqsvwvwzvsx{xnk}{qpx}}yyzxstz{xmvxuzvzuiqszӶ}yusuxz{uxwssvuqnvxtywyswȺͺn{Ȱtvwvttwzrvvrprplpvwswy}}x}tv~jzͻ䷲psvvutuvpttompqorvvru|~zvtpz{pxĸϼrrsvyxtqpttnlqvwsuvstxzyzxu~vǽ˻Ѩůvuuw{yupouvqoty{rtvvuuvx{~z~zź¾ɟ³~xz|{yvutlv{wtuwwpsvxvssvv|xxy|¦w~wrtyjv~}xusqorwzwrqtuv~yvw~|zyyxsqtuqnppw|ztprujqvsrsspxyt|zs|}}yvvuuohfikhhklpuurqsukruropoko|zw~}uy~}}yslhhikkf`^beefighjklmopgmpmklligu~{y{~|yxwifefimnneaahlkkmhfeeghgf_fifeghffs~~{|{v}}}zvromfhmqsqofcgptromjihfca`efb_`a^doz}{{zxyzvz{xurpqrskkloqpliecfnrollrssqmiecfjia\[ZW_hrxxy|~{{|}{xvvwz|omjijjigga`ehgfhinstojhljc^[_dlqqsx~x|wuspnnptvpkecehkkia\^``cg\eoqmhhjdiidadfddfjmkkqyw{|qkyfcdrnUc]WZdf^Y[]QV`__]PW[][[`fjdih`]cgecfeabghc[ƾiwi^h^DCZMLWYKIPP^``]Z[_acfc[X\^\QafZRXYRk;ź~lolekjcb`[VRQR^^ZSRVVTU]YLM`ljưĻӛ{plie_WSSVSNKLOOM\RKRcvǽDZ~zoijaYQPSSPMTKVsº~xyrggjga]a^o޹ʼĩy{tvzorxuol|yݦȣԫryyvnq{kairrnlᾉǿy{}}zsjefdn}{kitzʾʾ~}|uomlhiqzuhek·ȶ~z{~~~{unkmphovwrkhh{Ÿvx|~zxxyupmllmmgryvrsrnw~w}ƾry|wsptnijpsojisxuqrrpionlntĦ~qx}{xupjsnknuwrllqtsnjjlvrpmglż}z~vqtmbbej}~tmedfm|˽Ƹ|~snvtlnibxj`]Y[dvȿ»yyy{utwpqqlrqe_aVWZeyɶ·{x{nuuw|vxww}p`X\]]_kø}vsjsux|~~uog`X\^[]tİĀȹzuqquqsxlkhaMT\[ZhĸêƲxutrutilwnbTQRVXYb|zrrsqmnfkvmf_aWQSV_u|posqj_kltzpiingYQTW\n~w}zwrqgksnbUju}|lbc_URY[Zg{ɮrju{qfdd_\[[lp~xofaccUPW\YY`{phhsu~ztmgbckoeVMT]crumkjjmbWRW\[^f~mn|vx|zslhaZVZ`bYQS[SP\kvzhcffdc^XTVXY^d~iv|}vrib[YUTQOOPMILTRHXget{lebhkf_\VWVTUX[\ḗx~{ulf`YSPMCBO\XIUs^Nj|uy{Z_^XUVYUUvyrjijh_VVJ]mWSq~t|Z`^XUY`T^rnjiid\UPWihW_zu~[`[RMRYP]qlhikg\SMame^o~~\^XOKPVR^}xngadig[OWgeZcy|I[ZVRRV[Yd}sfa\^a_VMcgXQg{YVTUW[]Yf}~}l_``]YUTT__SZv}~{YSQTWYYScy|qssc[chbUPU]QUTkz|~}qRTQNZ_QQWim^Za`V[WJDLX]Ucw{t|xwLLMP`cPRPY[PS\[FNQMMT[[ahwzt~}~z{JIKQbbMYOQSPYebKNOMNTWV`cs}~|zwNONP^_KRGHOR]d]RNHFJSZ]eh{xv{}PVSOZ_RA:BMNSSFHDBFOZdk|~|~{yLWUP[dYEDR]YYVJNNR[`aej~}JSSP]cVNSepijojmlpurlnvKPQQ]_MGMdmhl}~~yyROLVe`PHnw{~xr~w|m|~SSNS\ZMSvxomszSWSTZZRSfnjwPUV[b`Y\ZVbvy}z}}~OOT^d`Vhdaq}||~PLPY]WNZgrRMOUVTQUht{|tRQRTUX[owuws{WOLX\Y]hx|w{quUNMY]Z^i}|yn{zTOP\]Z`o~{|}}WSU_]Zcx|xo{y{[WZb]Zfzrs}}y\WZb[\lz~XSW_Z^r~}~SNT]Y_w{uty|w}{HPa`_hljzz}{u~EP`\[di1}~GTaZYfm~zv~LZbY]pzz~~x||~P[_V_xl{y~~|zPYZR]wqzr||ymh_dqqfkx}o]V\cmoeW`νzggedhomi_bfxp_T`tuhmvsaW]efdhb[lнrghdcnzqa`kmwf`\_gklsxtcWX]_hcbldhjkqtk_enfa_`eknmiom`WZbeo`[mȽodeipuskfqix`afjmlkeig_[`gjn]_}ͼ~giejvwmfhygddhkihhnib_bghfb_rzeohmyuc\fupdchjggjwi]^ehc[]iվq^lhmwo][in__gkhhnse[^ee`[ctвo_celph]brr\^jngejf`_dfdhnkxĽrf_hpka_jx^aoqe^b[^flihtmwŤrjaoui]`mwaflmjb\]ff_`ipoulz̠vsbtoYivrxgklje_\pidb_^dkxo~ûo_kyi\n|jmkfaabm^X_b`j{xuj]qse^js}ilhcaekaWQV`l{x|å{{d_zobals|jkf`_elacZQ\v}~~zf[fwf^iyĿmjd^\`e\e^Ra~}vjRWknacq}kfa^]_`WZXZo|t~}mZT_nedrz{fa__aba^WVdy|~rssl`\ckn\gljgc^\ZYa^[n{vqtdU_kjj_ehfda]XU[^]`y}yrscVajhhq{jhgfb[U^\[i~{tq`Wdjfgigghd\UbZ\s{ysm^[hidj󮴠ca$^XRaW`~{vsoh]`lifqccb`^\[^Vf|zysohc^fphi|gifb`di]Wm{||tna^_kshmehd^]dl_Zr~|~~wn]]`nuhoege^XVV\Urwv{zocaI`~iYudihb_`caa~vuvtkaaUhxb^~djhb_cj`j~zvuuph`[btsbjeje\W\c\i}xtuwsh^XlxpizfhbYUZ`^jzsmpusgZbrpenIed`\\`eeprmhjmkbXnrc\rc`^_aegerxklliea`_jj^ec][^acc_o}ogotna\ah\`_v\^[Xdi[]cuyjfmlbgcVPXdh`nVVWZjmZ^\eg\_hgRZ]YY`gflsTSU[llWe[]_\eqnWZ[YZ`cakn~XYXZhiU^ST[^ipi^ZTRV_fhpsZ`]Ydi\MFNYZ__RTPNR[fpvVa_ZencQP^ieebVZZ^glmquT]]Zgm`Z_q|uv{vyx|~xzUZ[[giWS[o{sz\YV`oj\V~ű]]X]fdYa~|]a]^dd^au}y߆Z_`eljejieqYY^hnjbvspZVZcgaZhv\WY_`^]cw\[\^_bg}aYVbfciv_XWcgdjw^YZfgdl}a]_igdoeadlgdrfadlefxb]aidh~]X^gciRZkjirxxOZjfenuQ^kdcpyVdlcgzZei`izZcd\gni`errgjw|n\U\cnphZc½}iigfipojadhzq`Uauvilur`V\efeie^oģuijfeo{sbbmoyga]`hlmrwsbVW]_ideoǺfjlmrum`gphb`aflonhnl_VYbepa^pírfgkrvtmgskzײַabgknmldhf^Z_gjo^b¦jkglxxnhi{ieeiljiimha^afhfc`uŹ}hqjo{vd^gwrÿ¦edikhhkvh\]dgc[^jŮtanjoyp^]jp``hliiordZ]dd`[du׹rbegnri^dst]_kohfke_^cechnlyĪuiajrmb`ly_bprf_cZ]ekhhtnxȩumcqwk_boybgmnkc]^ff_`krpxoФ{udwr\lyx~hlmkf`]pidba`el{rǿqan|obsknlgbbcm^X_dbk|{x°l_tvkdox·jmidbflaWQVbn|{ǩ}}fa}rhgqxşklga`fmacZQ^x~|h]hzido~Únke_]af\e^Rc{lTYmqdiwlgb_^`aWZXZqy~n\Vaphgxgb``bcb^WVd{wuuma^emp_jmkhd_][Ya^[p{sveVamllbhigeb^YV[^]`{~tudWcljjt~kihgc\V^\[ivsaXflhijhhie]VbZ\s~uo_\jkfl󲸤db$_YSaW`}xqj^ankhsddca_]\^Vf~}ztje_grjk~hjgcaej]Wm{sc``lujofie_^em_Zr|q__bpwjsfhf_YWW\Urxw|{peeMdm]{ġejic`adaa~vuvtkce[n~hdekic`dk`j~zvuuphb_hzyhpfkf]X]d\i}xtuwsh`\r~vogicZV[a^jzsmpusg\fxvktIfea]]afeprmhjmkbZrxibxda_`bfherxklliea`anpdkd^\_bdd_o}ogotna\aj`fe| ]_\Yej\]cuyjfmlbgcVPXdjdtÜWWX[kn[^\eg\_hgRZ]YY`ghpyUTV\mmXe[]_\eqnWZ[YZ`ccotYZY[ijV^ST[^ipi^ZTRV_fjty[a^Zej]MFNYZ__RTPNR[fpxWb`[fodQP^ieebVZZ^glmqwU^^[hnaZ_q|uv{vyx|~xz¦V[\\hjXS[q{uz]ZWapk\W~ʵ^^Y^geYd^b^_ee^dx|߉[`afmkemlhtZZ_iokbyvs[W[dhbZky]XZ`a_]fz]\]_`cgbZWcgdiy`YXdhejz_Z[ghelb^`jheofbemhergbemfgxc^bjei~^Y_hdj¼S[lkjsx{P[kgfouR_ledqyWemdh{[fjaj}[de]hpyľȽ÷~ͽvvzz}}{{}y~zluy{kxvtrz{qwyz~űos|{¾vzķ{z{{ʼ|{~{øŽ~ŰǮsװϼ󾞪þʽ®ʉz۹ú°zλǬɎ۽ƳµɽÍջĮĢ}|ӡʼ͒ٳ˓֮ʙĬͽĹĔǾĺϒt~{Ʊĕ}}~ȱŹ|s~ux{{|}qv~{yw~|w}~v}li}{rcqx{{Ѓo{u|wuxzywx~|yuw|ws_plhipwyvt}~}{}qwmpusqs~|~~xlxp'hcexz{}qjfb]c~}|pvui`}hp|xyw~}zz~}vXqx|¨~s|}{~pwsl~~~yyx|{~|~zu}e_hx}~omatt|z|wn_zwpµ¼ʽûÿƻŸüź̵ƻžĿĿŻÿſʻþ˾IJÿ´ŹȽªǿ{zǩôķƿĵϝ©~ɻųûýťɱƿ̿Կ˸ֽ濴˹èͭ̿ѽ՘ȱɺѿʟ˼ֻӝ̨¹ıº͜ʭӽϣϯƶ롟Ⱛļء ;֢彺ǺըӻʼĬȨȼ²ϣºڡȸѼɻϤűȱӼŹ˺¼«ĿİűƼfŶ~|ɶwt}n|z~j|xtu||y|}w{snp|tqlhmzsjs{~г{{yrnwȮzzp{nƹºťŻʽƿѺù€ľ½ľöðŵɷľ¿ǹ¸ʾ¯·ĜǯĽƳó̮ĴóȹɼĩɺǴǮ÷ŰýżƯʸ¶ʪζƻ¼ƻĹžн°ĽŻĹоȮҲ»۝ͶοĽ掔ϤžܢѭǾɶǿĻ֡ϲƯýԨյá̼񦤛絰ź±Ųަǥøܧ¿̿Ţۭ´üʲǫέǷըǿŹতƸͽ·թʶͶ¸ʾů¾ǰƱįÿʶŻįʶ¼¿°÷fķ˼¾Ʒλ{xr~nztpqx~|ux}{y{{wojlxsmkdl{rkwӷ~Ĩxs|ͳus°~{vsz{wtpjuwtomookeiiddgd^gfeffdadje\]gsmok[U`g|}}ouwsprrpglommolgde`Y\de_dilf]Z`hc]alj^bqcbnp]U]`lvz}yrnqujppjimle_beda_`acdb^[]djfhhd``ekgihc]Z\`}{zyv|zxwvusqjnnihkic\_aa__bedb``bdfge`[[bhlhb^\\]]fxryzpwpqwxqiillhfgeaZ\]^_`dggedc`]cdc_[]djkc[Y]aa`hzzx~~{rklrskchihfdca_Z\_accddeb__bb_[^adcacina]Z[_cefutros|}xyurnmmlhdfeda__]_cghfb_b]YY]__][`fgeceh[^`a_`cgovnxlkwxmipuutqmjhhebbed`^`abehifa\`]ZZ[^``[`eea^^``dfc^]`ejwszzqqtrnjuuspmjhgc_`ee`_cecbcdeb_aca`ab[_ba^^bfgea^]`fjp}yxz~{ousurnlkiebb^_ef`_ehc^\_chmlgcabZ]^cmtjaXV]gosp}rpsstwxkhwrijhea_`dgcabfgccf_`bccdeggfc`]ZXWZ\_acb\]ZYaljajpov{ytrnhisyumkdca``bege`_a^XUX[\\]\]^^_^\ZXWVUaba`_^]`^Y[bc_mvw~xojfgkonjjokifca`_^[WW[[WW[``_^]^]\[Zedba_^ba[Y]cdjztriknolknsomigeb^\ZVW\][]becbaba_^a`^]\\]^a`^]]_ab__]Z\bhljttrqrtvvjheefeb_d`]_]YY]`][[]][Xba^[ZZ[\`^]\\]_`bZUX_ehiq|x}|wtw|{vrlfcb`[W`[Y[[Y[_^[YZ^`^Zgeb_^^`aba_^]\cXRW`cryw}{uvzysyqhdcb^YXTSXZ[_eb_]`figdigdbbdfia`_^_XV^cdejqy~uruuqoicdkqrp`[XYYWY^b_]aimkhb`^]^aeh\^adefedZX\fihnxuttx}}qmhfghge^_`]ZX^^]_eifaifb__acef[]kl]V\Y^jsmem|z}|y{vsokgd`]Y^cfecde^\XY]a_[kid^[^ekjb`fe]Z_boxvrv~uxsmjihagorrqrtqjcbdfedhgd`]ajrhfb`_afiky|qo{|o~z}}}~}~tr}qrccdgknpqbfe_`iruvxvonsvvwý¿xwwsqshhjs{zqgckmgemvzrowxqtʼüļx{zrmpvuw}}peotwrkjqz|jj{~rxļǼ}zumo}ywv|z{zpfotlozztzzyvlm~vvz{}rfqvz}{xy~§~zvx}rsw}|psvvtstwl~{sy~}~Ӷ|zzsqsvhlrzysz|}{vrrss~uq||zz|vqpsuiilpuwvu|xwvu|{sr|ɿxxvsonnprsnhehqzxyzzyxwwpvxvvxtktŽzsxupkhgffqmgcenyjjlmopooprsstupjbxsz}ornjhgfadgijlpsmllmoomjtpljmsxzjz{z{yvnkhhjlkiZ`hllkklsqoprrolrniginw~xýy|z|zuokjhd`^bgiijmqmkjlopmjkjkkihmsw|uu{zsxupkfca`[_eilnqschkjfcdfoh``goqqo~~utxwpurnjfdbb]_bfiklkacefdcid`ckrtss}{tstrnqolifdcb`^]afhfcbceecafddiptsppv{zxtrrqnpnlifcbaa\Z]dgd_iecdfgd`ghjnqplhh{x~ovuuvtqpmjfb_^a\Y\cge`kgcbdda]egjmomhdh|wvttvywqpsqpokhc`]`]Z\adcagda__^]\_aehjjhgmݓ{w}xwz}ypnrponmjfc``_]\]^__a_]]_a_`abcdefh{rpt{|z}znkpmnnmkhfdaa_\YYZ\^aca__didca_]]_b\~}urupn~{xhqigfhkjfaW[^__`bd`[Z_`[XXba`acb]YXzuurz~voolkshghfc`VX[\[[\^YVW^ba_ac_\[\\YWXw~ws|~wxv}~songghigda``XZ\[YXY[b]\`b^[\d`ZWVW}zwtxqvz|votpragjkga]^`^__]ZYZ\f`]``[XYb`\YXWVUS~ww|}otsafskhjkf`\]`_]ZY[]\WV[^\\^YZ[ZXUSRP~~{}xtwukjmihhfc_\\]YZYWUVX[[USVWUTVMQTVTRPur{||t~|{occfc_]\\ZYSTTSRTX\]VQQPLIKILPQPPSVSz~ym{{{yw{~xjoe]jd_ZXZ[YVQRSRRUZ^RLILNMMOJMORX^V}~x{yuvvtsu|ys{{y}vtojffgi^[Z[][TNRSTUSRQPDFHIHILOLPTTQPQScznoz|uxxwtqpswwokosrrstngdb`\]][WRONTTSQMKMMKGDCEH=AFJNRY][ysjkuxsstsplihieggdejkhld]]bd`[[^_YQKLOOMKLMLFBCC@;768;=AEIMRX\dhjjovvpklmnmkii_hi`^ee_]ZWX\]\YXYXSMJKMIFCDGFA<02568;HKPUX[]_pcdeimkgdhlptuutfppfbecXPRTRNKKNMJFEGGECGC><=<9605;7>;61..02?DLQUWZ\hilpsqmhcuniecca__bfgfdic_a_UKEGIJE<3/../0244217751/4?HPSWZ\agkxtpnlhc_j}uommieefeb^aTPXXJ>><;AA?;9>IRZ]adfkqu~zxvrmitwuvrnnonkgj]YaaSGEOONMJD>938>?;89;CGIIJUgvhhiilt}}wqmnonm~vlu}rda^]ZW]WbNMS@TQB8?ADSV[`cfhj{lontvvpjjnrvwwvhrrhdge^Y[][WTTWVSONPPNLPLGEFEB?9>EKNPSU]ahpvyxwu|sljhbadjossrnpoieb[TRWYTH@@BEA>@EGD@GD?:779;HMUZ^`cestw{~|xsnytpnmeaadhihfkeacaWMIORSNE<87789;==;:@@>:8=HQY\`cejpt{ywsnjuzwuokklkhdgZV^^PDBNNMLIC=827=>:78:BFHHITfugghhks|~xsnpnukt|qc`]\YV^XcONTAURC9=DEFJL\^Vdzpkhny}ysmiotrfn|yvvtsuwsh_dWdYV`S\TNO[gkott}{prujmqtwvtrpijsslnxqzx{{wrxdsqeqpjmnuw|}xvyzxfowxrmmpnffptonrozu}xeglqpmpwhotrkfgkifhoqnmqu}~}yxyompsnffnmljfdcefehmpnkovz񆌗|rqmkigeibZX\`bbhmmfabb`aZV]gkbXf^Z_b^[\XLJLP[\LRoromkhgfi`VU]efegmnhcbb_bZTYce]Sm]T[cb][VJHMR_`NU|szpjljdejib_^^_abbakihecb`YVZ_`ad\difa^[VRGHV]XV\\zɱysahjhcdhg`]_a`]^bfkkjifda`bZUX[\^bYbgdaa_[KAAOXWX_Xzl\ghfbcfd_\`b_ZZckkjigeb_^[WY_c`^_\beb``^ZJBBNWXZ_Wtghggedefc`_[Y]ekjihfd`^\RU`mph`^`de_\[WRPJKV]]\][x|ndsifeghfcae_XW\bghihgfc`^\WZblle_^^aa\YWRKNMQ[cc_]bvogsieeijfbbf]UV^fgfgfdb_^da_`]Y[`VZ\ZYXQHHINYcgdaft{stohccijd_`b]XY^dggfecbab_^_\X[bUZ\[[YODKKMT^fgedfgzvtpgaahib]_^]\\]afjefedcUX`hga`cY^_^\XK>USQR[ehf`gk~{uthnhfjha`efgbZZagiacegfb_\[^e_U^g]Z\\WNGEEUSRVcli_Ofj|vukkfehga`ddb[W\fjhf+eb_\Z^_d^U^dX\[XSNKJKOPRXenj_T_c{|vvmgcceeaada\UT]jlhkjfc_\ZYa_a[T^bShaWOKIIHJPW_krlb[`f}{tukbaabcbbc\[WU[fkiolfa^]]^`\]YT_bQh^QIHJKLKT`irumb_ltxrqg_aa`abbaX]]XX_gknkea_`bd]Z[XU`dSZRGCGNSVLXfosrh]`u}uqpc_bb__cc`W_a[W\fklhd`_aeg[Y]YT_dVYSJEEINPLZjqrmcX]{zyrsqb_dd__cc^X^_[Z`gjifb_^_bd[\a\S\cWVTPKGGJNN^outnd[Zwu{qusb`fe__dc^Z\[Y]fjigda]\]_`]_e^RZaWEHKLLPW]Rct{xsjbXzu|~wmebd^[`cbcfa^YWZ`hnfggb\[ag][Z\^\VP=JQLHPZ__krptxlZ^{|uqjeehbaehfega^ZXZahmdffa\\ag]\[YWRLHHPSOOW\]`q{wsqhZRyurmiedikfcd`]ZY[ahlbdd`\]bg\\[WQKHGMONLOVYXew|qjc\Ozyvnhghdejkd_^_][Z]bgk`aa_]^beYZZUNJKNOOMJLS\anyxnhc^Y|xwzwmfdifglld^\]\[\^bfi_``^]^`cWWVPJHKOSTTQPVgvwvsnlkf`_yzwx|zrlhinmga_\]_cfh`__^]^__WUOIDDGJOQUVTYk}|sjiopi`]|{{wqptlhgklfa`[[\^`cega`^^]\WQIDDGKMLMS[]_iw|rjntsi`]}{yslfioidcggb^^Z[\^acefb`^^]][ZUMFDIPTUQPWekjmsyrotyth_b|pu~~tmlk]`dedccd]^`beg`\XY^`]YFBCHKHEFNXU^upi{rrhgm]|{||vplkifgge`][\]`bcda\WWXWQKMKMOLHLSOTXdqpp|oq}wmfZx|vvysqnmmkhekjgb]ZZ\ZXWZ`cb__[WUTPIBHJMNJGP\PQaooqz{ruv}n_duwzzwpkppqrpkfbgfc_[[^a[WUYada\ZXUTSOICDEKOONU^SSn~svxwyprxe^ylz|uqmpstsojhdc`\Z[_d\XVZad`ZVUSQOKFCLJOW[YXZX]z|}sryqno]bs|~ytstjmqsqoeda]YY\`[YY\``\XTSPLHEBARORZ^YSRcn|oktwsi_mzytmjlonppnjhikdca]YX[]XY[\\ZWUQPMIGFGIQQU[[VUXo~snqsxp_fvtqpqsurjc^_a_``][Z]_VY\\YVTSNMKJJMRVPT[_][akxv}mnttgTjljknqrrmkheddef__^\ZXVUSVXXUQPOKIFEEHKNTXntZQnp}~trw{xkblpmlmnmlhgedd\[XVTPSUTPLJJHIJMPSUVN\i]N`y{rz|tlmrun]\dhymjijjighhiigc_\XY[[ZWTRPRSRNJHJOSWYZ[[]aZXpz{}yplpuumYWhy}fdeghgfkjifb]YVWXYYWSOLOQSROMNQTVXYZlWZkos|{upqvwso\]pygefghfdgeb^[YXXWXXVSOJGLNQQPPQSRSVZ_ahYbvxw}rronrwrif]ev|kihgea]^\YWWXZ\WVTROKHGIKNOOPSVWVVX\cim_ixzwunppquwodaapfdcb_ZVXWWVUSROMKJLNQRVYZ[\_chlndn}{qprsrssj_dhz}[Z[[YVRYXUQLJPNLIIJMNSTVVUVY\]^adfgl`mvtrmonkjh`Wfjzr[\UMKRZSWVQTZYRIKJGHMPNQOOV_c^Y`iiadoqijc}{{mkqoorf[couwWTPNNQTNW[VSSRNINQPRVVRPSW[\^`aihjmor|uyzpfnmosidov~RMLNQQPIT[WNJIHSWWTUYZWRZa`ZZbkibepoeixzmdgddlohgvoxPMMPRSSOVZWQLLM``ZRQX\\Y`eb\]gqfcekjhq{kehjipmijbctvzQSRRSW[^[ZYZ`b_ZZ_b`cdecbdjpfmnhkx~pifhmotojkdeu~SVX\`aZVY\]^`X`fgikhbjgeegjmneophn|~n`fgciqtmlrnn|{~~wRSV[_aa_[[__[]d^dgghjhcjihhikmnhjlr{~{oduyorpphjusp{ttw}{QNT_ec^cdinh_blmle[Y_ddiklkjjlosjn~nwd[sxjjomcerqksz~yYX`c^akfkooicaacdc`^ahokihlrutqkr|yigefikheue`mqko~yu}onZ^dgfhmjhffgihgfdceilghjnrtsrv}vlkhghjvd_nwrqzvw|v}lqomoommiecejmohggilnkotwyz|}~wutprsoigkpra^nxsnryu|z|{}qilkdlhegknmjbbekswvrpuy{{~zsrqtsqommprofgtyrnqxw||sqe_de`ggjospg`ccgovywsrtvvw}vsoiuoklrvtqppu|ypqxwu|~ec`ahkjbgnttmcZjlotwvspxxyz~wrqj`rkfjtxslimuwpjp{wtw}|cagllkkbhnqnhc`oswxwutt}}~ypnpkbligkrsnhfimnllu}yx~|fbkof^]dhlkgdehotz{ywy{zz}zxrllpojgiknnlhemlmpsy|{{zyzlmlighjcikggntvsrty{zy{{yxskeelrdkonoplfhmrtswvus~fijjknqkonhfkprstw|~~wxrljlnnmoqojjoqovyzwrqu{|xzdhijlproqohgmsttwyxw{~xwvmfjsvoeoqojjoqoxz{xtsw|{}ytzwjkkjjkmkmlhkt|}z}|vt{{xyxqkgmvwl_cjnnoqnhyz{xvvy}x{yux}{tmnmkjklkmljozz|z}zpmllptqg_ahnoqtrm~zustu{}yz{{񑗢ī}|xwusqsldbfjllrwwpklljkd`gqulbphdilhefbVTVZefV\ýz}zxvssrsj`_gopoqwxrmllild^cmog]wg^emlge`TRW\ijX_Ǣ~{uwuoqvunihhikllku=sromljc`dijknfnspkhe`\QR`gb`ffӻ~lsusnptslgikjghlpuutspnkjld_befhlclqnkkieUKKYbabibǶwgrsqmorpkfjliddmuutsqoliheacimjhifloljjhdTLLXabdiarsrrpoqroljjiecgoutsrpnjhf\_jwzrjhjnoifea\ZTU`ggfgeyo~tqprtromoibaflqrsrqpmjhfadlvvoihhkkfca\UXW[emmiglzr~tpptvrnnpg_`hpqpqpnlihnkijgcej`dfdcb[RRSXcmqnkp~zsnntvpkllgbchnqqpomlklihifbel_dfeecYNUUW^hpqonqr{rllsunikhgffgkptoponm_bjrqkjmchihfbUH_][\eorpjrvsysqutmlqpqlddkqskmoqplifehoi_hqgdffaXQOOa_^boxuk[quvvqpssmlpnleafptrp+olifdhinh_hnbfeb]XUTU[\^dqzvk`jnxrnnpqmmpkf_^gtvrutpmifdckike^hl]rkaYUSSRV\ckw~xngkqvmllmonnofea_epusyvpkhgghjfgc^il[rh[SRTUVW`lu~ynkw}|rjllkmnnmbggbbiquxuokijlngdeb_jn]d\QMQX]`Xdr{~til|{njmmjkoolaikeafpuvrnjikoqecgc^in`c]TOOSXZXfv}~yodi}~|mjoojkoojbhiedjqtsplihilnefkf]fma`^ZUQQTXZj{zpgf|~mkqpjkpojdfecgptsqnkgfgijgioh\dkaORUVVZag^ovndxpmoifkonorkhcadjrxpqqlfekqgedfhf`ZGT[VRZdikw~|xfj|uppsmlptrqskhdbdkrwnppkffkqgfeca\VRRZ]YYafgl}}tf^}xtpotwropjgdcekrvlnnjfglqffea[URQWYXVY`cbq}voh[ysrsopuwpkjigedglqujkkighlocdd_XTUXYYWTV]fkzztojexqotqrwxpjhgfefhlpsijjhghjmaa`ZTRUY]^^[Z`qzxwrlk}wstyysmkfgimprjiihghiia_YSNNQTY[_`^cuvu{|uli|{wsrvxrmleefhjmoqkjhhgfa[SNNQUWVW]egis~vzuli~wqtztonrsnjjdefhkmopljhhgged_WPNSZ^_[Zaoutw}~zskm{~wvugjnonmmnghjloqjfbchjgcRNOTWTQRZdaj|u}}srxhzvuspqqojgefgjlmnkfaaba[UYWY[XTX_[`dp}||z|xqe}{xwwuroutqlgddfdbadjmliiea_^ZSLTVYZVS\h\]m{{}}yjo{vzz{|zuplqpmieehkea_cknkfdb_^]YSMPQW[[Zaj__z{}piw|wz}~}ytrnmjfdeinfb`dknjd`_][YUPMXV[cgedfdi}|yzhm~~tw{}{yonkgccfjeccfjjfb^]ZVROLK^[^fje_^oz{v~tjxxuwzxzzxtrsunmkgcbegbceffda_[ZWSQPQS]]aggbad{z|~{jq|{|~|tmhikijjgedgi`cffc`^]XWUTTW\`\`gkigmwyzr_uwuvy|}}wuronnopiihfdb`_]`bb_[ZYUSPOORUX`dzf]z|~vmw{xwxyxwrqonnfeb`^Z]_^ZVTTRSTWZ]_`ZhuiZl~xy~yhgosxutuutrsqmifbceeda^\Z\]\XTRTY]acdegimfd||x|xdbsqoprsrqutsplgc`abcca]YVY[]\YWX[^`bcdxcfw{|}zgh{rpqrsqoqolhecbbabb`]YTQVX[[ZZ[]\]`dikten~~{z~~uqhpvtsrplhhfcaabdfa`^\YURQSUXYYZ]`a``bfmswkuz||}{pll{qonmjeabaa`_]\YWUTVX[\`cdefimrvxpz}|~~vkosfeffda]cb_[VTZXVSSTWX]^``_`cfghknpqxly~y{zwvtlcqu}ef_WU\d]a`[^dc\SUTQRWZX\ZZajnidkttloz|tvoyw}{{~rgoza^ZXX[^Xae`]]\XSX[Z\``\[^bfgikltsuxz}|rzy{up{\WVX[[ZS^eaXTSR]aa^_cda]elkeemvtmp{zptypsppx{tszZWWZ\]]Y`da[VVWjjd\[bffdkpmghr|qnpvus|wqtvu|yuvno[]\\]aehedcdjliddiljnopnmou{qxysv|urty{{vwpq]`bfjkd`cfghjbjpqsurlurppruxypz{syzlrsou}yx~zz\]`eikkieeiiegnhnqqrtrmutsstvxysuw}{p{~||tv|[X^iomhmnsxrilvwvoecinntvwvuuwz~uyypgvv{yoq~}wcbjmhkupuyysmkkmnmjhkryvtsw}|v}tsqruwtqqly}w{zydhnqprwtrppqsrqpnmosvrsuy}~}wxxwtstvpkz~}v{ywyywwsomotwyrqqsvx?vz{~{usw|~mjzz~{svunvroquxwtllou}|{~}|}{yy|~{rs~z}}{oinojqqty}zqjmmqy}}~zt{wx~}|||}omjkrutlqx~~wmdtvy~}z}|uk}wrvxuy|v|mkqvvuulrx{xrmjy}~~{y{vmwusw~ztruyzxxpluyphgnrvuqnory~ꈑ}ww{zuruvzyxsqx|~v=rqqtntvrry~}|tnnu{ovzyz{wqsx}~~orsstwzvzysqv{}~{usuwwvz|zuuz|z}|mqrsuy{z|zsrx~vos|xnz|zuuz|z~sttsstvvxwsvztpvuhnuyyz|ysvwvtstuvxwuzyvuuy}zphlsyz|}x~񕝨ͱzwusqtmecgkmmsxxqlmmkleahrvmcqiejmifgcWUW[fgW]ƿ~|zxusrtka`hpqprxysnmmjme_dnph^xh_fnmhfaUSX]jkY`Ыwywqqvunjiijlmmlv=tspnmkdaejklogotqlifa]RSahcaggĶpuwupptslhjlkhimqvvutqolkme`cfgimdmrolljfVLLZcbcjcпſ{ktusoorpkgkmjeenvvutrpmjifbdjnkijgmpmkkieUMMYbcejbʻvwttrqqrolkkjfdhpvutsqokig]`kx{skikopjgfb][UVahhghf¿svsrttrompjcbgmrstsrqnkigbemwwpjiillgdb]VYX\fnnjhmvvrrvvrnnqh`aiqrqrqomjioljkhdfkaegedc\SSTYdnrolq~uppvvpklmhcdiorrqpnmlmjijgcfm`egffdZOVVX_iqrpouxtnnuunikihgghlqupqpon`cksrlkndijigcVI`^\]fpsqkv|w{uswtmlqqrmeelrtlnprqmjgdgnh^gpfcee`WPNNa_^boxuk[u{zxsrusmlpomfbgqusqpmjgeghmg^gmaeda\WTST[\^dqzvk`nt|tpprqmmplg`_huwsvuqnjgedjhjd]gk\qj`XTRRQV\ckw~xngowzonnoonnogfb`fqvtzwqlihhiiefb]hkZqgZRQSTUW`lu~ynk{vlnnmmnnmchhccjrvyvpljkmofcda^im\c[PLPW\_Xdr{~tilrloolkoolbjlfbgqvwsokjlprdbfb]hm_b\SNNRWYXfv}~yodiqlqqlkoojcijfekrutqmjijmodeje\el`_]YTPPSWZj{zpgfqmsrlkpojegfdhqutrolhghjkfhng[cj`NQTUUY`f^ovnd~tqqkhmonorlidbeksyqrrmgflrfdcege_YFSZUQYchkw~|xfj{ttuonrtrqsliecelsxoqqlgglrfedb`[UQQY\XX`efl}}tf^~xxvrqvwropkhedflswmookghmreed`ZTQPVXWUX_baq}voh[wvuqrwwpkjjhfehmrvklljhimpbcc^WSTWXXVSU\ejzztoje~usvstyxpjhhgfgimqtjkkihikn``_YSQTX\]]ZY_pzxwrlk{{yuv{ysmkghjnqskjjihijj`^XRMMPSXZ^_]btvu{|uliyutxxrmlffgiknprlkiihg`ZRMMPTVUV\dfhr~vzuli{ux|vqptsnjjefgilnpqmkiihhfe^VOMRY]^ZY`ntsv~~|ukoyxvhkoponnofgiknpieabgifbRNOTWTQRZdaj|uwt|j{wvtqrrpkhdefiklmje``a`ZTYWY[XTX_[`dp}||~|ui|yxxvspvurmheegca`cilkhhd`^]YRKTVYZVS\h\]m{{}}nsx|{|}{vqmrqnjffild`^bjmjeca^]\XRLPQW[[Zaj__ztm{~y{~~zusonkgefjoea_cjmic_^\ZXTOLXV[cgedfdi}~lqvx|~|zpolhddgkdbbeiiea]\YUQNKJ^[^fje_^oz{zxn||y{|z{{yustvonlhdcfhabdeec`^ZYVRPOPR]]aggbad{znu}unijljkkhfehj_beeb_]\WVTSSV[_\`gkigmwyzvcy{yz}yvspoopqjjigeca`\_aa^ZYXTRONNQTW`dzf]z|~zq{|{|}|ytssrrpoogfca_Y\^]YUSSQRSVY\^_ZhuiZl~xy~}lksw|yxyyxttsttrnjgcdffeb_]Y[\[WSQSX\`bcdgimfd||x||hfwustvwvswutqmhdabcddb^ZWXZ\[XVWZ]_abcxcfw{|}~klvtuvwuqspmifdccbcca^ZURUWZZYYZ\[\_chjten~~{z~~uultzxwvtpjjgdbbcegba_]ZVSRRTWXXY\_`__aelrvkuz||}{pusrqnicdbba`^]ZXVUWZ[_bcdehlquwpz}|~~vkswhihjfe_dc`\WU[YWTTUXY^_aa`adghiloqrxly~y{zwvtlcuyfh`YV^e^ba\_ed]TVURSX[Y^\\clpkfmvvnq|~vvoyw}{{~rgo~b_[YY\_Ybfa^^]YTY\[]aa]_bfjkmopxwy|~|rzy{up{]XWY\\[T_fbYUTS^bb_`debaipoiiqzxqt~txypsppx{ts~[XX[]^^Zaeb\WWXkke]\cgghotqklvurtzywwqtvu|yuvno\^]]^bfifedekmjeejmkrstrqsyu|}wz|urty{{vwpq^acgkleadghikckqrtvsmyvttvy|}t~w}zlrsou}yx~zz]^afjlljffjjfhoiorrsusnyxwwxz|}wy{{p{~||tv|\Y_jpninotysjmwxwpfdjooxz{zyy{~y}{pgvv{yoq~}wdcknilvqvzztnllnonkilszzxw{zvsqruwtqqly}w{~}eiorqsxusqqrtsrqonptwvwy}yxxwtstvpkz~}w|zxzzxxtpnpuxzsrrtwyz~}~{usw|~mjzz~|twvowsprvyxummpv~}~}{yy|~{rs~z}~|pjopkrruz~{rknnrz~~v{wx~}|||}pnklsvumryxneuwz~{ymwrvxuy|v|nlrwwvvmsy|ysnkz~}zoyusw~ztruyzxxqnv{qjhpsxvsoqs{{{~ytuxz{xuqzxz|x{xwsvvrvztv{ysszsx~{~}{swztwxxy|z~}wuzzxz||{~~yy~~rvwxz~~~wv|{tx}s~~yy~~xyyxxy{z|{wzyu{zmry}}~}w{|{yxyzz|{y~~{zz~umpw}~|RZ[S]qu}~wz~U^_W_mk}~|zPYd\[n|~{}~wS]cZ]rx~V_aWaw}||W[[Vdwyx~~USUVetrwPMVXaqv|KL\ZZp}xHNaZUq~t~~uS\WPezz}wU\XQcz{|vW[ZUbpl|{WZ^\dkb|~~um}UYbbhk`zx~RWdeilbluy‰NVdefjcfpw|}{MUchcu{}p|wt~QRh~}kYkz|~qO\v{bOhxyyRex]Mdx}zYkzbUbr`tfZalxy~wdbYagq|y|~v{kqZ]`bjw}xzvr`Ug__fs~mgUdZbr{v|yzus{rrjk`_jqtz{~|pnmpocZ[`jvlikhprja[\g{|{gmtpwstphdju|y~wz~msxtslvxmegjh~~tqrvulix{mcfgat{{tbmpx~rqsinpjby{yw}~x|norrv}|vnnx{ogq}|~}}yuxnqsqt|zvols{yqkkoy{|}tqvwrt}{{wrtz{wvieo{}~z~tv~}vx{}z|}|piptt|z{yyɀx|{|t~zxwu}xvwqks{w~||}|nx~ztqolv}}tosx|x~{y}u|~xrqqpuwxwozz|sy|xuyyvv{x||y}yfy{y~}xtruxyowow}z~yvy{yxuqqsvx~~~~zvllrz|~{~zwvz~yz{{zy{}z|{wsv~}}|vy|stwtw{|zxxyz~{|}{uzl~~vw{{ywwxy}~|}|{{zw|x~~}~{y~~{|}}y(vqx{~|yt|~~{y~vx~}mu|y|}{xy{uxz}}~||zx|~x{{u|}w~~wx}uqysxՏ~|yt~o~|z|{zxv}z|z{wzw}w~|y}w{~}y}yuzy}{~~|}yw~|{bpu~y{~yz~||}w|}}{z|zx|~|y||s{|{tz{|~y|zsyy~}wy{zwvxz~~~w{~||{}vsuwxx}z{{|\de]g{_hiaiwwZcnfex]gmdg|`ikakaee`n_]_`o~~ZW`bk{UVfddzRXkd_{~_hc\qahd]ocgfan|zcfjhpwp|aenntwn^cpquxpz˜ZbpqrvqtYaotq]^twgy[hn]v^qi[rewncplrho{pngovw}fknqy~l`rmntxr`ohm}}uvkju|{yx{znefkuwtvs{}ulfgrrx{~{soux~~wxprus|}wtxnqrlmx{}|~ty{umyz}}yyzr|y|~|zw~|vvz|}}tpz{t{ɏ|v~y|zwz~}||{}~t~~{{{(|՞~b~~]ef^h|`ijbjxw[dogfy^hneh}ajlblbffao`^`ap~[Xacl|VWgee{SYle`|~_hc\qahd]ocgfan|zcfjhpwpaenntwn^cpquxp}ZbpqrvqwYaotq]^twg|[hn]y^qi[uewncslrhr~pngryw}fkqt|~lbtpqwzvdskqyzony}|~rijoy{xzwypjkvv|wsy|{|tvyw{x|ruvpq|x}yq}~}}~v}~{zz~xt~xɔz}~{~w(աb??libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/doc/Heinz2.png000066400000000000000000003172241504737157700231520ustar00rootroot00000000000000PNG  IHDR>iCCPICC profile(};HPJEZD,(␡:Y_8jP! :MGc⬫ >@]sB\s﹀^f1eq!]abJb>'Ix=uSxwߟVr&|, xxz9GXQRωG #e8̈NGBm̊Ji:w*֨u vKn7r%)((EUUn߾MΜ9l\.ɕ+իWg_9ϰcY8!ClΝ'O2p@ ,z$*TU8v(N%&&p ĸ!Ch111t֍3gB\. `/ɝ;7.a0u, v׋fd˗nݺfnݺܹsyz3f`4Szul6^MӰX,x<9 (Ǐɘ1#~)irhAAAx<ͼe|g4qUX|9 V@4l67n O͛΀#С%K;w?ӧ 6J*$&&3f$ H''5MC4\.gU)ʣ[Xp!qqq|R9r[a}̚<UUu f X/^w+V%ҥK$%%u{<<:E9zTMP!Ic.WmˬY ʽ ɚ5˗/sS23fm͛(JJJ O>eʕ|8s)^8IIIK+Ŧk] 2erTXUUٷoׯ_PBdxjjS+ ׭!ɓZx^rEժU)ST0Uriʔ)C``L.]_~{].O'%%hʗ/[oׯSV-4h X6n7гgO, c&MɓlۼnaaԨQCFG4*FbbbW-Z}27lMPU˅PY3vo \oU{ҡkWw6޹#Z@@dQbap^_5:t`ڵ PbE,GfԩbZYn0D5yaZ(YnGEi3gΤT"׽Q *Dpp0AAA_.]NLdlX4hgCTZKyN~ڷڵk;uTlܘV ˗Cl6if-Y"i.]̙36m o߾̙M1`uzx<3qhvMR||yC(B*U8p %J`۶m:Tw]#f bfaXȒ% wn̙3RV+2ekeҘ1;yR^_M^ڵձ#p=k'լټ,9o^V^#KX8iqVǧ|M9v+~G, AAAc={6AAA8V+%˗g5._N`` AAAڰpW"nj4h{8uW( 25jԈ"EyvEaŊ{=d B 4nܘsBM?lZI&އ^P;wv)BmVB HHHٳkٳ(jjry芔5$uеkWVʅ 8s{^9][t:M͛M?Gs_rH~76i"SEUUryfOŠ+pݸnٿ?g5KH>R͚oΝ;Y,TUe[ Vzre\:btpVU>B\.W4FÆ xi_2cǎE4ȃYt՛6ahߴ<ವkɗ/v,YHQX Et:x_Ϟ% @ y<4M3-֭[lRхz2ZHIIbTQ+O@@nϟHDx 2#W\!OlܘJ*aez`DUHR(XV^/-`|GX,/^OժUy}׫6sΑHp?6i۶)SdĿŹ_z™3| 4[ #Ȑ!:%ByjIًѣG)_ޓ*Ҟ7t l28p WiDEErRt?@8cǎvoQ:ŷqj%G/ C>;22!7 c> =i)bo֭[Ԥ/\&ChGq>|"C>UU:| >nE\J:tFƍMk1bgy^*/_t:9tO3gμx=vCvnw>y«W q#BBp8R_TUe`bשS7>h>l=;t`ڵv8 O6eSi˖ݺ[bׯϧEhF`` >%$>N"篭o|c[xlq_rrD[A лwo-[-[--2-}:`a֒%8B'Y:ЯkWnܘ_~.mydڵY~= &еm[ ګ*Ueii ׮$CI`{<_KÈ#Xn}%G<GJajQre+\(Z(ŋЙg?FI"ӧi1#GVUu{ <~GA 2|@T`צL34A1#F2q [ ϛ*B .ߡMӨY>׏cp̞mRS_H%Di;gώb!""^`MtOL0Ǐtu4:gs=u::uJ:i*ȷFb̙FQ.=˥g)Nwgq9[-ٓQR>~N7&M͛,ZdBBBd x^uʢ+$u+EQ姟hEan:$o$c/%ՕqԿ_@HH9r( [ٳgܻwٳӮ];߿ɓ'i۶-mڴaΝsc i۶LS?~,t HՋ$3nc IJJ⫯zsgEbrIOi:p(}q,_\z ӧsQeFel$?}ŕ@ | d1g$4MgϞիWIMMѭ[>Jl4]Ҽw(+ΉБ)ƑHڷoi$9￧ڇ#Μ9Cɘ=;<0UN!/y3  %cƌ̏íJS=5RU͊VNME !ۭR\9Nj?#vn/ԩSQ|!7ngϞ7F*6V*=S&F@ =3j뫪*RZiD˗/OPP "W\\6mXyݻm6H͚;wnػ8k8n7III(S=pk qXV|)KWfѣ}{ٰ Hɒ%x~:]P PUU7xD d ?4nX>׳uzYo?3t>׮]7mAAA|4"Oz(" 0𱱱<%&= KNNM&F[ٳgFDDСVOMM%f(FkȚ3'2e"$$EQȗ/\sٺnlӧiڼ9Zbٳg,٧uݗnK/O^wVDPP/xҚ:upVdz@diҤ ֭#4"^S2|9WO6rʦ(J)))غ{+VEeDTzDN9Xq%-*UUYz5'Lx#lݻ;1m4!s\HٳW,,_|’o1YKs*VSN>}_~mrnʨQ =gΔ!!!Ǐ3y,DPZ5n.A{?&kZlTƤ35o͝;wg o޼λ^O}6rbӦM&!=4Ǐs_ضa/^ME;|8fNDmQŤ⸚ ߿ϓ'O8uTrJٲe dƂҠ O/T&{DEEI~BDD!!!Y_2o_1VƦz4V^ x,?I?c2zvFe>j0DرcbXu ?;v VݻSxqVX!UUO߾w/6o`\Ml6j׮;}w*֨!QTB=J~7nt:MD*y<F̈/1O R1C?*OG6&uޝ={bMm'N4Qj +ցf,a)~ʠA0}:kԐ)YRlٓ… K( iֆ3s$Y24={ Iϙ3'e˖cǎR%g% KӨ1j`Yb"n֭[l"ٳg7QE/GXEEQhݹ3'O6}O>\K|I$tRRR?~JOٿ2k+PHHDWXALe_?p ]ٳgeX۷gӦMftZjiذ!l:O}Lx%2e"99~)1?~̹'{vz0(K`ȑPlĉ!VT)ɰ~HIIIxkDiQVL=ɳfF1C2v0/^rll,֥^z2޿? } rܺu%K*Mk2y,̞M:4 ZjZ%0_dGiDQaD2gl2&-2GĎ;Ȕ)SN.qv* <|Д cUlY 1ƚ5kҔ'EiVL[2, {'͚'P3z%tvx<^3gw_5kvأ^;Rzu&L_}eѭ];::khO#EQp3:ubMQxNy˖a(P@,a\r>#B=ĠcH{^/i:׮޾->koÿ?\4lBxx8?d͚5z۷o˾}Kٲe%8XʙhyY&7 n1xƓ;w;lSfp0I&PM2\r( cTJ8~;|X*t|̑#5 _b(BDD% %|3g_ѺukE߿F_AT'#iFB4Q)*vP_wـoJPp/7 tw5jȵ [UUxl6~7<5o1^da"eʝ1wořݻ `kҤ c TRDDD|:"y[gOQ|Ab0q1<8v,{Vkז7*Z[[+WM6<~ŋ3j(iqnܸ!kYopp0#G4Vɳf={v@UUFĐ'Ov;/_א 7Ԉ_jҥK`t)whقSL!3={ƈ>@&3KbP׾}MiE%3Qy_Rtiv;2dkF޼yܹ9u͛W*(/fȐA>-['<|%JHɘTL\Sj޽4kni?&]68gʕ|n)k#Z0*>' 6TUeÆ kNV+lcf -N'YfA4@ִ}{:vȸqlf' nc QQ#9SC3ܕ[ #8І ~Bz%t2tڴiCDDC Il6!h$19sLȑCFb"o{ѧO$__)3NkݺudČAdTKRF J,(iRL?/ fΚ%}(B˖-ə3'f, *Bܹ$[a썳_ιs N6o)W赊pe9eH4.:UusӀ[K{dȐA:$w ۫Uu4cMr+Dn})*Ì3S,&C۶mY&W~];v;-b`|ѯoFѰaC5nlR|qS?"7_eK#PdIH. 4%? HR$$x. EQ JpqwhZT^;wʟzիWrLS^˗&\c¨QT^/:l6_͝KΝ4>}fr.\`ɨX|9!!!8=wwJXEoCz/,[;Ĉ2qÇ3np;Y/^ݶaׯ_GUU9GȮ~BQO 2*syMS9m/=|86"5%ZH7 ̘~ox'W] ~7n07{ɶUI^ʙx$؄X, *εkiFce_9sf={SzQıUUTU<%JV)RFu@t1YjUjyk߈y={`!!!ianݒQW\aɒ%,]K.j$ڵkf7$d>&NUURkȟ)S&řN]@/΂qMAPvݺ<~B4cÇ`Z[^Z$''KQ֬!,,i 2- ?jժi7B\̊+nt1cFX$z4gr1Ęw҅ի#G?݇Qzu݋dСܸxzjL%K)^ //_>:ŪxΙ#bDFFc%З7o^XzƅmɎwܑ|Vr.iHmƕsȓ']t^˳g8uTTzj:t(gϖQôy$0t: ԫ!o`/B 3w%^( xLw giԫWtM(? аuk9{m0zhdiHtG՛An=xHhǣ\.6nHfdni(W P 6вeK:t ըW(>nӆj5k+W.6ZeRW(z#GF ?ҥK(ɛڲńL*>€Pzq|P@\.VBpU NVơe$K.&C#Ҵ{YoyK.rq!SɬڇFfR*w]1}jEL%_itrҽ{w?{"~/d׏+:D%Ҽ{4>Hdd),X,ǔz?b^>}1ڦc ʔ\rѣG?5jd* <}7n[KKW̙';2b3cضS'1 P4%tdΑR+z+ /^ŋL!&&FNϙ;w.ӦMcNҳ`hBգ[n& qŠy>(Ө"ܷ,RRR(//nƭzh׮&]S}GP7O<)#7ryv:кukSx|?ə3'6e϶mL Ao &Ю]; *GZjh"W,/a`u㋼ƌk׎yRF ~;|A#Ɣ!K,i"Z XcD^G%Jȵ$<;ws*T0u©ʡC(Y`H",Tjժ]]7ʩl6?:fdZ4M'гCzoτ d^IEDٳImfʕB06A Z}ir"(&-TP^^('I7kƙbw:ĉ3gՠ3Qv:Ď6v,K>0#dՆ tڕh!^mk֬aҥi(]RN8A4r$KdriS^2e$=ӧOթb/3s$nܸoZV ""?X˖ljyӰɒWp8g t<3x7T8pRMkXC8 TՊ[U!&9ٳgˈAH,Y`ʔ)K_jբZjRF %&&EQ* .\7GnX^p"E|yXwڀ(}'LoA>]j{FHH)w^v-9{7n0gbIN "((T^zi|J``iqQ^b߼ӧS%`_2~xSsqxL2z9Ͻ+Ul8q\$$$вeK-dYX;z^O8t|;TlJܿoKgW8PFuƚu:cBBBQ]toN7=א< Yz2mL$VKܫ.%((:w懕+Է/,@w]&G2ڵm c*lX(+Dc}zwk뵠>'::]~-rMTUqTQSzÄuᙰ3gm n&OlZ5"dϞ=eM۶eVloK&M2{$;6-[Ҡys;:qݺEO?%44TvI٪Uɘ1#!!!  *Xɸ\.;?~LXX.e%Uw].l0}q3t?#C0 Ӏ#G8vڕnb'Eٲe)S D ѷ&KT-7ƎeƂguwPQذjC tG}ߵj qT,'&`$3G̒i_ڵ+*T`$%Yikצinyp^ۛnKf)$?ε6?~˗/'SL_*-x/_dܹ,\DҸ]oVڴi#o2k֯OݺuyիGppp)GWYl6jԨArr2G5uFv{^~W,C`<=z=o}үwo˗/y%ҡC|l""HII`תx~7 ՋʎD1FbFO@)^ob֭2f$Yu\9raÆ^ORw؁|ǫTr8^*CFQIr(3 q,Ym3t¨g7DFk~ݺwޱN:rHMMAv-_LΟ??6a,_Wf|-\Ajj*9sdʕܹsGzWSOC].-ZEQhܸ1?;t#nq- {mweiwiPވ#_|ԪUˇc;;ШeKD/7"z|0Sg܉,C³ ط]4\7~o֭i&,7.G+ӶoˋcYrcƌ!SEGsU?xE8z(5k!!I?Hɚ5+:ĘClIU1zDHZ5ܻwÇað;cĉd˖MbZٲe0&6n{oYreK}￱X,8N|O>-63 aܹiuOL rɚ&K,r7UUUewӦM)M6?z ["c&M"o޼rst:ٶm׮]|9m>|?dy>YY((XfE?>^˜ŋZ)Gr8$zجX9EUU ` IDAT&M{+UU9q #v,'&Yvk׮5.;/_>Eaԩ(Q^:Hzi~wI#_?2d;[VSwJz侏bNHH|i NL JHHr|ܹ3;wÇDU@ɒ%y1{اI``ihQ]0K~U}[J`` J}@azL +_+ȿƯ&,q+-Y+bbb u}'_, h6q"Scb8g9"5n&:y.gt 3~+""❚{~N'w\aАhVQ/w~4 p^+y.|b⛞>z^xfđ ҃8_ӏ?fnؐnq/Mǎb'0@AQ|Q/^swHN$ (~iRKtz6n͛YtT|~eXk D7J"EL… sqʖ-ˀ9SSSKȖ{}\#FxJcʐv3bիӉbݺu10n=|… SUdRDӧOyL27oޔCXHg\%=V}F‹޽u|I3l![`4M=SSSl2-jaeܷ֭/ϟ'oD!-JҥeT_.,3+Ys@3n*ms]EՅ̭!$҉E!"& ){ % "R RD!@"|?fMV]p}.~5K{U,8ɭ[hNļKiOndMH40"&K̓nR&g%~w4iAj]qfaEJ XVC7I#F` UI{S珉A=jzra^(Hoo/P̙31{lK8},YQbB+<<<LdhlElrP\\<,FHHNɣGcib"Z-CI=t5d';e)s*tͻv;tR%i|Z-.YÁ|7%&EFIt1uTٵy3^R) %FPIH7QmM&L&S)mҤ ]T]LnݪԎްaC/ժUÁ7n +2Db nܐzUd]v 駟p,{t?@ƍq-"DfÚ+P0,Yƽj-+V˨ QF^^^0nݺZذkW ĉ lE*3z K>-^A<v+݋MȲ%ЎhX6;6;OGvS@x??7oj޽]e,8N @vO>nU޲l}Qׂ0`Y` `Ovɣ?Ņ ѬY3$%%e729?\ ,[3^2zC5cp:h88V[B|R2DDwtx@@3:w̘Q`JW7VVowBy^~eLPxi QTf0)e|B"f8hZ & =)etVîZ4 )[F@tz=4:-"xy}NlƸO?EX`@ZZœ={{wV7lHr.] b{NN+}E *7|8l\Rn@'Átt8'D}|s6m**q-4~Q_=)Bew~UwjZ=r* RO`=z4HNc+׮M+Ѹqc0 (8qo*B#Jd&ݳ-FBatD.qsJGkݺuC׮]a۱g;w:t]J(, !,8/oP)Wj106g SSiqib"!q(0ݽ~}t?nݺBB>}TXr8$;iﻝ;li#7 1U%8K?2dֱ[7=}e)lܱkf#V:"tem H >a2Pe1q"++}`ZZ N8]v ,yFlKM/8 N۱ܧX2. .0 px(y]z,>%h4b~ .؃/P:|) Y3e M]H!vرԩ͛c*`U͚5=:Fi' 37m&)Y֭KASZtpd> >Rtʊ|  $$(R>NDZF=(}qJ2f8ȱRKM+ -br8wޅ`P/"B"v2~jz:z(h@?n]+EqKKۧck6o˲HOOvy"M6RG>4fM:#?w\ \xv~#ӻ;ݺyB^9qt5% FL&AAA /`0gϞ(Jt::5/,XhFcUY=O|hܬ=UV-NPn)WpI(I~DMPdaTV''3gΜ)zt:UUlQa0ЪU+In]̙3۷r \HN 0qH̢ݻF)v!- d.˅2{z[o!$$[KYiEǕjB3SO\hM4\wB@WjժdW5mʘj&c*޾~FRdׯz=q#$#e=%@lNu󇄄<4o_XVl]fFuwel͚5@[ST *ɂ|L y$(7Z i%roooPQ AG+$g#3˖aΒ%p!aΒ%0S>9-^͚5+38ݻwV+prtJ{}Xd!TF?QXmX^0gO;}:z|O* 2xX@rW9%}Tّ2@kx D]<Աc[*&O[Iq_իzC T'wlVU)fbyygUCdd$"˜Ŕr,U}E^s\HOO3E, Cn4aT҅srϜ}PFpnȴԌܞuR)쵷B-pe\[ǎÍD?Z ʙZzC&NP?}Gd|^`0)6!OAYN GyϞ"((ΝÑ]n6h40knv~Da8tzG{M[h(~ooo)Rt: 0pM@#K)J%^Jҝ۵߫_? 4)()$ϧ d]%I-(SA]);8~=Z-1}t]rE%V;"d׮]C۶m%ӱM9D7ݺuj E۶miIiɕac@TuV񷧦b{jڥKH bc UСC7FgffR"5jZUkԠהPXI sSJrtF/`*JL?fo%w"m={뤰נJZV ܛB͎g9x1%"MڊNc.L $[/9'Ѿ) IDAThJaqr пwOU,_I4n?!Fl6ܽ{ZYLթ ͈oν`ѢMʲCvA"lذVYWi-۶E˖-)~#ID(|z˶N"ܱcyy?t(å:P'[x1X//̛7 R/==]0v0 _ >v,A攔/KJ$ՃQQTTׯ޽{8wԮr]PJ3,Aڵ/3gΤ=TfJahd<+"~}ى A 0c|,?ڙp*9Rt8\tU.KzeMnDgINO X,HO>qKc{FRU!CUNNG-ZPuc|2v,6)BǏk׮`9)#҆CCok^!!!۷o@D6}*G2UIBE%Lɩ@~7Œ%K?xO<%ײnpIl*͆ V$@ʙ:vl) 2l@O,?;KJrf8 ҿ ɄQ2;ڕ+Uy!WR%7rYiJ4J Od7QX"UBy I'J ԙ*ks,߷̓(ר6o[?Lp\XCE`Ƹq[hW=ztظq#.<jTȻ ZLFIi!/5mU-ˋQF xyyjɓ'xGۥ%N ߲is@E5Ed<[v3tBeӛ;wb6jEB& ?*!p >~ek` 24`N0,;QXTy130vT nEܜytJ,-ÄѼysܸq]t)(H1m'Ȍj6hnݺ@YןhР\.x^uɥ_/s=-d!a+DlQ ()NCr2vFG6k^FeE7h@ ѣ1aPR1P`NNƠAJrG҉~ݻK'Q0r8|-q{{{J*|حd>FF~0K噈}{j֬ Q݉ǏYׇD ,zьD &L֭nN>}B )c(4Ywح7b| "^ 鿍ݯM[\5F vO<7D` \dDy`:qp9<}}oA%!-]"Xp:xiOddBBfaŘ:k~\t!M>(bLR/2v*Ыh80 +!Dy(@{2/Ta*?zhٲ%*Z=Z=`+x1HU-_|O( ? Ъdf_>˭R7O|(z96B˗/,9j%pq7tۻ7%$'_/`9{6-Z_?ox `D wCsYγI??",,&xZѱ~yaUh`ifQ\3)IDՊ>@>l}b9:Ȃ\ώ2w ͈yw׮/F) ;o8Zn K-9~ɿK=ⓒ_hh(t:SK!f3A޶V鏎;Bd2ќSEXa Pe<9thݺ5={lCX,ʵk)xe2g8vJX :TEiZQPPdw8{, _bJ &,vm̝;>?`Zi 甃&d7#r΀D:VM * xyyfaLh{t~0Wa6%/ 矸#ki,R}q 5aQpop06m% =xz-)b#YYeLϞ=iyDD>0AIwՋEQD||<6m/Nټf/DNJ~SǍS =~\ +64mpVhռy?zסCtNR[իY&}dYA焺jK*(;fU AL&L0w-?W}/˘)F#}>R^Rd$G:ں;EG؁hٲ%ZlicYbbu?A``FIt:;f3iTEAm)$J̃jM+JABDEE]``j;T㲜W]QjU՜(x`q7OLJDj>(ҥK(A^}T92$C~LʅwEpppeIbܖ$ 2I!/V{޽XhϟO;:u$}wwEVVuIKjB8aşW9/IN)àf͚rE)*,,ē'OٳsgߑmFF(X//S* Ep8TyjR =r!HA8+0ǍY %}b%]vh dgg7oݻrHLI^`Mj*4iڵkCӔ(;;YYY -,MLrE`00l0RJ$\" "yJ:O}vw%QcUdطo#e.߾}{Z(2kV-YR* 4;1idJ$ >, '&)&IXǏFSApDEJ M rJ6 [A@M QV6ھJ[hNlX xtw~_IgN Ld)yVԓWբcǎ,#5Z a#*>IBlƍhҤ WNՊL\zmZ;~@鲃aE-EyIyQ^¢|$A]euu|R#$'OR|<-~e669)Ŭ,TŠWؖ׫J˲ bEhҤ ENCxx8&M#Gy\|;> 5'b h,'4~ 瑘jatb/O^oTDGN rѣ,+BH 0sd۳'tBsk׮{Ôt.ŢskעCJ96qXHS)g.<<UTWي=u,hܸ1H!Ly^>4HEȬLݓժU Wd"TP;gĮ^'Nzӧ}oo2?X`|% ^"R.YxV͛}v\xc{Te޺}y'À 2,>]Vy\>^>4vsnExx8xǍ7S+JL& M;wv4T,W.@T_!&LSwMҥKx7h݉Бʕ+믑Q]w}= @OROW͛7G5ʄs@œ[;)a땝ٳg\aä8WIRGk5U:٧; ˅\_>asdpyJ2W^FBn5kJb ]aSL[QjU*5dȐJ9증;QNTR{Fpp0@%Ž݋":jbgLS9~W_i0õHǚ+?"qtш_+W… tQ%,"** [ׯ/IO҄Mi֨W2$.[VgZ@gT"2jBZ TH'M6aȑ׮ټU8WsEn3gS"-ݹkb#&Njh+DtxMk:AjK㔵HQq3f 1|DK(,Dh4jH@ hp=\,^ïTrؙ3 42ޜE0(a("=Yٌ'`Z zDmڴhDAA222<@*mˋ2ya61x]:{/ٳHڡC;h5ndZWڅ3qi6Mi \?Dzz:իW '#I_@1&.SݛJ F͏uH@`,Z$ǔr~IOСCѢE 8pI(ٓ&!yxN1//裟7yhB~ Jtv+((@J )jժZ*"h4ߟڨง"~spL[/^DݺuaT@Rl lnWMc6:BZ?u)..a= 腅)TeYڮlE~Y1z$Z\{w))/4-sSQDٳaX.!)2}W-J[ʳ~ծ e_!M刢<NTָrR[˗܍ *=TI;WTTDrYEfի*9"t:ȕS[mL 7e2}Ns&;F#𭢠Fn/Kު];KKtRPiAvjW͜9KH۬YFܹ[s Bff&(bРA**yqq`Ye۱o|}}"ӃO>nB&M0 d")dVo%)pk׮Q!<80݁|dffb`߾hG)ҊpTps <{~EEEx F?G]>w.EvfUݚjENHb 77\lݻ{{{d2f!//EEEb\,9:YDؤ3,+E\jRܻE@*NY`XOM AwڒU`0 ___{keeeZjuкD<4a TDZJx(XDRZ, Z8<ڶm[("V_4c?Nw4G*"J E> wlj 4jE x4,$${mܮ i:d 7A51;PCܼyYnݛ}IҥK¯Hly&WV-ټ2 ڵ f dfNC;v`ѣs񅄕8DFFU8 `Ť@/\! duCAAV[~.C @pfY^2?o);[(EFFҊ7Ikx(VsCGFFbi~]\*:vrFZ'U>s8v :ƍq.X^Ӊnu@"5 n'w;|t:J򑑑{lj˱pqKHX .kġCh٦ ZhA,bBL e2QٴitЌl.ͣi^Mu7C$;1{ !lqN*u&" 9$+V&>RGBB= AXi%!IHM-AWw%=)_DXHObF~~~48_}u+*pQ̚2j*p:Xys \JP᠎ =OEm۶\߾o^Lǭ !##-6ŇzUU.(9RKMMUq ľp_}IiAw3e |}})V+·J*@`` ???Hȍ"++ =BVVJƓ-Sp_dxijGe)TRh4tC#v("iFHY,˖cƌwOr 1tQh ep4EItaZ"kKb2EWTL>SL=?{ ڲ{7L&]3deeQ5m?^RUQ˗/Kni!<{"Ʌ#n.at ժUSQ'aӓLJ򐛛>bgѷ/6l˗/W^9kTw7sn.%@Y)T|Н PaAsaY֚Ȕ %o9!\t _?^~NstņYY#-ј1cv-X,*ں5 iO|m??| R"v&2 mugI?Rv|ePxGyz8q,qH[RQE^^%ݻw ;o҄VyӻG1^Kip%7Jhظs'>|H++gYr2L&o;t"##)Ce&MH""_~ hhܸ/FEыHVOJ4AH=IOrʍA<~w*ؿ?esa^KH@zjG4/^Ge;gIO6b$LS$#ѤIܹS٬^gU(I?2 v&Jp80_6Xi|||(JGIJ6gb,]?u,8NU܉ɱt{Tqn+L"f,IywX!uӉ5˗c|L 4J`߰d7~b6йٌeɘ1n&eɴ[##iQE"##qm'6y ?>R" Xu+ʭB=ELǽ{2I+ԦǓP/(mE8N2S޽{dʕcqM6V-ՓMJHFC?nDg*Te5ߪUa}$wԻԹa4H`B šX6{6Fcs Kbe!ebcXPJ0Vl}ӑhعeQ&IU|6K Fll,DNgDPPMo݃eɔra5*BO@sΜ9/Aݗ^ .t}h<a0Hg$R%2eX}r ++Jv5k^{F924j'^j7|οzu?틣GK `YF<#++8x uQ- fC[78R'&ָY3̛7@@qq1쉵kd2aԷ}v?:' 6:l66 c(Aɶbb ;Zti{*n¥pHJ*&z=`^쿜 _٪u/-v;8NGEII8ĭ^ UJ'ț߲d~`~ݡC q}i ӹ3mOɤe!RzJZZgqF#Fn 3o?xmTQRqvBӔ ((G'< Yl$33ep={ ˓{)[HJJ-2La`2M04V//ohzjPh4:<~Wy NNK˖!??-t`jì)18{XItoXӖ-1 w[|9RoG:uJAN' S<}r@ˤd'&=TMߟ #dNӰyb04raNa"Mv vLok]{ѥKR-_+[;fzÈV4W{r>?w\ڝq8T&lU)D hl޼]T?''|}tn?3lUe Kyܸ^yNz;JOrk4h۶mErb+׮ /5k<ϣGO>ӧO11~0L9&NI{Rg~JӁB lg]J3226*JݯBCCGNp(C [Z@l7 y'рCqy?3f`סCtx"Zl/hѣGpH!|Y7YJ v;&ɭU{[dqIÇ9sh4 y"an.pDZU';-^ <ݮ@Ϲݜ}mtjʬYtsOZ!!!0L(**Z&FZ3L^ J v|<Jj͚ElsE5FFsrr̜2sTace:ө"uFDD͵V+-C>}Pn]/v@pp0U.,,ÇQߴ)nsXthdC_Yք_Ĺs # |ر=󴒑) #nǣG69EۛV;Nܼyׇ7h Z}. 5žÇ)`QQ.^϶n~"UM&2)f|ꫯv(, aRڵ@-1[_B~~>|dѱ11X(R덬0={$uJť5-^~;vD\\ꐞ]ϐ̙3iX\\L1n͆'H;zT*[6`Z0 thV$kZ ؽz AtaŊ8ӽxJܹs[WLagg{,Vݎ7W^)\ p(PpMKg22jtR04tuy:t<;pHy.n*J9EgG iEp},S0h۶-A```)ɓUrXoƝ~_?TʒUܸ 4B#?? _5b<ȠeFaE:wLkׯ_h^mݻw8t4 V+Z-zr~(\ U?[R6 Y ]g, Ao]C/Ka ]1NIrV2q(%jMw):jpZ zN r"hX.;光aQڪݚeY 0~~~ՎM- 3GaG&(, ł,\?}u|3q!@/VB x P @qw -hq( !fec9&{fvWиqce 1>g%x8p  ԇ@U.:!Asx/%5aGǏHIKB64S-d&o/4h j~C t祓}Z3IoN WHMMEС.݇1  @d(N-*&Ct8 lV+8w6mb EQO?Gk!"kZ xNA~*aCNn gwÁ2R ZlaܺZkI8%=~uZ%kWak_T_"E _|yׯ/ ~  Qv_D!4(lvsf@_Pd ݻD@иWaiZ`0a<?ltJz] (@M<^CB[YRaO!jt!Mf笸;jg FPĬXweGUc}lV>IeHEO4 Kjj+9RSSQJx΍C_6mތ={Ǩw< RfZZZ>wccE[%>>>,j\*w?Vۜ$5IzP`o$Bn+,фdpUQt@8I IZꉚl͖Á7ox6d[mC@?t:1b}Ee2'o 3S;>&*FȌyҵwl]a:m\f۷HJJ“'OawNsSKU&l=km- uSSMwO57l@zLy)-8KB*U@ۍt{`XA0)) E֭a|)))HOOlj'Ye@;uٳ aXuWwQQMd4PUqf*T骥fG&M$IЌ]zv,Zw-jJ. *dQZł"J1G?\ZAAAy>|`TRcSݾ{]H1;7mۉc:sO' (b0`L <eY<鄒e&Mc3֭[jMzVȉ燱&a W"**Up]mt/Պ >9!˕ûw2E nycNRd6mNFVRÈC>}PX1ܻw;6l`@aZ*5Ys[pgN {)))v#Wݘ6>xd9\||<|}}Ѿ} I5HKK0 uUQ "hVRw!o޼lAoĕ{`41rHVlJuXCAO;탿?D:K9 T[\f 3RT=z<anܨdW2;qX`޽z..ݺaݶm.p8Vaf> hvь^JwgϞa бcG`۞=ؤ -[~v֛fgb7e)\hxII;SȩN !-- #FPM-[,kTJ)#55rf38vCX,- *}F*2tfḧ́_$Řq㘹'M?~yoڤX> 00Q)7-- _DEeYFzT8͖c:*ȣWg%J`;Ħ{|r$%%a.+Z(fwТSxժUׯoΐw4"\ 4p _|W+; `Ǿ}شs'bG\H7&!0 j?׹;iFbfΜt4hЀ2ti;XV<-=2ykO3&Mb;AP3A+L$OGtM( faÆ XD8 M$Iؿ?̚tk6h I9!Grњu0:aYUaw)~5I{n]i|ձ#:t`cc1tXĬX$)F!9cNe!@*U7FVܺXƎLѾY3n;wĉ^zaHIIAJJ iy.)L2],UTcZQ4ԥaKDEH<)f_w*Q` Un2 HKKtktkƿ_|9|#ϊ晊<Ħ̙rA9]`8ȴ N)))Z(W׸rhːV͛WO~ضm٦@Z,:2-çOGgA*y3Э[7 =?SsСt~dDcv>%,,,G Dž bю7딡-_|E,CqzuԪU!ni4<1cТ_IPGZ7hgΰEA 0ر#/ZFO$P a):l۳56g!ePP&<~]\[( {o_@S0EArPY3( XKv]g۱u)Y֭[ĉl?W֭ GTh,oߧ˗߈tnݚ-ͤHجh$4z_US/\=׹Q?`ҹG֨"EQlx|7jՊEzࣣ*UqUti`<վ=z={Phݠ iF' ͗inC+ZEZA@ T>>> BAeX[ ԫ^=ۅ5$EFFaȊ^Fh;)N?(8c̶NN84c2Ỹ8Z giӂf7?n0D M;z0sp̽yӦ`Æ GN0߿zfdobXn6 _&+N8E ~?/WKcboulR&dlذ!ҙ ߾z@9,;{wĺ}&Z6{{ARrrDY;"_YQ@o<]$IGѣ<6څ}/^x8~Yr!22  x(M -Pk(f@,2/Nڵieg>/ĽǏeɠm&؁%Kn1t 9y!m%xѳgO۱f"3dt;|}j3=wa=hrK&!IR`9HW„ūג &NFB}p8qS9䉌yp.El^^ A@Ձt[L^Q$8jرcdn `,+D(`@Ȳ{!OܸtZBŋ'wm?M+&d}eӤisu_w}-Ysx`4CDpA)aXfW4/2:|ܹ鯢"- ^f >4zኢڵk{JĮÇzj9v T<=?0_+A]`Ѽbڛ7o7oӧhӤfg?!Z E +xp:e+y)""ƍ.u-Cʭj8-Xpλl`$ȟ_ 4U_~ 1 T\_4ʦg6m 0jZlNtAh&MD7 Ah(hXtԜEصyJ DM#Ndݎϋft-^N4ͻvl6| $I;|8BKF\\dO(7E#c۷g@Zh)%wY]wD}NiӦ:hQtYF%&b̰aֿ?F "-R8o@@ƌI.PY~=[tViSu}5)f3 Zi*((}6ȕ+ܾuut:<^UL,+<Y9%KD% D&:u =BʕXЬY3t GVRԮd-:#wIɝ-^AA0M,3 /HKK۷ojOXEQ0wd;``|m YYwۨ_Gf@/=5H!Ϻy][uMd&I)p,W-J|8u4AÆ 1}b޼y[tjbbh)SUd&z"dX,Z `z4QIvʺʡCЧOL@x$!?hb@aT*\rvw=M*yѢ];DDD`8k3zT 3Z4x_v]%$ӉI&c/dMDi 5 S4XKȈ&T(6o޼ , ^~GyWpt `,[ժUÃ`դH/_e%ԋTnv+HMVZ!*Po!{]k~u]q0ꂥ]d4.:ED4=Eu_J;;>ñd~: +6|\!Q "bEGJ٭V<=_o jm;ʕ+u}4s ϊƢ+Pys~8ك?4#=z熏_fœ)SШU+ԬYS أM;޾`dc3y%&"rpУv GJ ̜HMe ((8l!EzBXXfNO9ުsuQzuɓGzl@@ZKJLLDBB)s{ 7 0@ՒВcI1S=NWu ct^b\@.TԩG=tAN:do&hQҡgaZ%W 3aڴiP]48)))?dL}3;:IV K2 ĸv(#TlӦ `/vN:ؑ?#F0^+qHWk@Ԍlѣ Seτmnz +fNFJ͛71x`vM F*UP|yeo7jGF']Ti%III;nL6 HA,2 á( N8>s^Th]t[jZhXu5̮ӣ( x ƨX,YgE-;L ^lѝ|DWyL'VC+W;uJ9`AojB7$Տ?BK(NŋիOKKÍ7PlYi%ntGʀ AǎC۶m!Iܸň={p]&$9оeK>tF6 ;vDΝXC̗/|}}Ty<( 5Eb_!IPjUTe,Ŷ={TSt {[T[~-Ħ!; vMCj"l\Əǘ1cXHH&v(}f͛9ZTGŻwooo4lْq$EEшf͚a%zLq20{*=6 iiO^TREG޽;8NAՊݻŝWP!ՙHQСC$hպ˼ ܅#"ސ$݅cnS0װFT(A Qu:=`6l.]`ڵCOmwӈ|T>}ЧOVIG>}"pe\{]ҠrFi޼yZX3鉯e|jꪭ^ ڱl2v8<)p8UHB^׮]qOhfFr؃y֬_~}ЪU+SN >r˸w,"j֬ ^Qs/]\ڴiG9h;ZGٲeB$mڔ-/_a zbZ]t(yoH]5")Z !ƱhJ~k7YYVHll4uVkn޼SO sd&l(:/c`yN]dU]qqqÇ D6@e gϞy\g`6A[(YT@5m6g!Mfa(t{ӰaC3`⥨צ k> jbƯO-Z}irL'*q j'fCnݘ-͆PdYFfX`RuhKN+ g[Pik=~8f3\+k IDATuСC+V`d(((Ȥ'qU m۶UTAB"ɓHOOgZw$aԻ7nmn)ўnjNpl<~N9/ݸ'ϞTHc v`ٳQxqD͘=z*L#%%?~YLGq#FXIII8q"~q]K>2/|uѿ?{ޒ$!!!g={gַ/Z6R q+՝۷ob± bȲـh=F4EB0%+Kے~[DCA0j_(|]ш{D qC eOg6ZSךrZ9/YLMg kiqkڵhYt ERRɃ&MUe9nC6CNӒ^υ 0+3Р^6A9rs P83oڴG頣@Qll,F#vixŊ1ozS+Hx=Gqe?p@W8X$ܽ{*TБeAyXQNe<'@$G `fbҤI;F:M}ZDaz(pŒ%K qN޺ ]:gb*mݷsA]u;6J<Ánݺ1[}; idId N4c~lٲSqN'zףؼk+ ~p"tu|^$ U Ȳ$:4(x% Wբ 8޿E]'VXyO67oJYW-̳zD'xC0>gAqv Ο62ӜN'pMԨQCE5sߏW`᜙8}:LfAg]qcUys.\XEa+7GÆa2`۱etfL܅`lt4]ݿnca᜹:'j9x$pbҥMjVV)(ho\`0p0n`FZoȔ{sD?&`@[ P2cisfSɘ3A Lt$_Zj (Ӭ8UA?Ohzn8N&M›'O߶m, ;G&msx׉9G>}`#!װVB{6o܈pu*sI[ʥKHLLD֭3Li?tQL>iժUX8iiil: rٲ'r) z6 $ExNϮٲfb⍾P !o޼KseWg ;^^PXWѽ6jGB\fjzƓg$Z4_3M~hpB| }Oc,Bac`٘<{6Lh7m]L$  1c 4hߏW( *W 5 O1/C…PAI*դWW (>n}~DŽwi6(TN$rʕ+w: )̈0Iܹ0My8Q`ʹ=fWyiioIEɯ_R[L[޾I(;ɓ1k %.]]pFS]s'  `ԩYbXf < X$''ÇPiTbEV7TiӦ 3i|+Yzpב;w <[ 0鄏P%-Ŋ`:`X,fذNC^O ׀ȕ+֭[$bACXEQ0wڴL011Zk>|B 8ܽ{7ShۨbŊҼL=[qD͛0Un(h4 e2M>iSf͚AelXzu)R](XO~wa>7ZxJ}k*v /2p"1ǩ0 9V+445k%7m󈊊‡|rS5} 'OƼytLy?V\ݻԫW>$ئ }e@kNQsݒ%sI-رL=CCkhhL*?ߩEAܹ38C9طMn=HW\z$*⩷[dIRAu wp=ze˪itmU.LrʅFaZVg|} E5ڱT! 탟8qM6e-R>/_;&Nfc#5yw.Fͣ}Y"lʨZ*^$IU+uŻp?1{lL4Ъ1c5j$1}x91iCv2Յ ld6oV>.o00}tJyᮦZ:;ݮptBpn3%ڵ ?VXf5ovÑG/Sܽ{ʕÞÇpȑX3?y6|L0EV |0Ykhh(Z !UVA$4i$ˍ6*rmakom__Ů嗸u ݋{"rD˘h<$Y[7ҒdYFrr<8~ 7nԉhm\; Si*q(TFZ1ٳgC$?M@@-=]Sft+d>}[.{JJ )<"Be5=Ç3_~aF޾9=)UCnMCн;Vng(jMrgt'ԅIK"]q&/}m߾d\c#mϝ=x5M\8w x1N<ɊFWV̠EJd.g9а׎Nݻ׀ f~ uA g߾;hCYVԢu1+VϏISV2?mڴAxx8B/^\R &IYQfЍH"F#Vm ,,$!-C5#** se8tQ|urSɓ'YyxyynCQFt+"Ȳ[7Yp M)$:Sbsaѣx!J(Ӊn~"J!**  F|pA6 /*U#Nmڱ̃}4EQz$0!*hdAɃh+VmjʕnݺUSq ^sΜaDY?f(S |}}]fa?hA[\U  *T\0/6(bҥ@V7IMWhߐ!XCG\:fi6C:OUrҮA ħ`kC!={-2EL&]V,FnG*;Ǐ HOWV`` 8 !*)[b.ZҪщw:!fh2a{l,:5 ZgU׬^^@*Uмm[̟?`̄e2e@eflB^>~~WI> &///\pc!K͝EsbbXwDL=iߩFd4tn ӨX"ۀ׫æ\:tqYT[-ZkQ`Ax{{#55H+(ŊÎ;Pn]ve4l+VvAD|ձ# .w!'ǫ$\(+m޽u'!zO)5阱p!ګbs܅ 7EٮK6nd]=3x؄ غu+n߾ret);")) ÇUE:Nɓ1110Lԧ C^!`ڰ.Pdb2ҒV.*U3gdJ9Np-D[loHGNJTnߎ~>e*WÛ7142RlHsJ@pܴ CFVav;EF,ٍ h)y聁i=r>m4n*U?`9-Oty\;P?f}¬bA1J3 \r_|xGAvL6[\)]+qIp Ld24#M>Ε+T,Y1KYXiРO^#Gd)"==DFQϟAc`ٜzI&eeU9[K&VhY߽C…# ;PB5t,^ƏQFZ~ ?0 s.;b(x)+I?Ư^;r{Ád4"mE8r EG]gtOnjî][e6m.0Sw#J;Mh詵r k2xymYpՎӇhܺ5qDhРjժGŋ6l[pZSv`{?ku-RJ˗it \ztZvׯ[%˗G:utxTK X?cimV߳ʊ'@)ԩVիWQJ 6Lׯ3<,o&7Z>|@o =;~ ;wB>}to:o< PŊ1y!(_>,\RU! 70̽DnǶm؂> ///|׶-dYFhh($IŽ; SRRlL=ZFF0p@|VӅ՟V `tLhhh0%~p AyEs*d(dYFPз ?FGclt4nˣF ?I^ti nym|||Oӧ$hD6mbR}Z5`ϟ?( i\t څ]m'hdkY)x-EURECnDZx2}ɠF^;u>JHH@BBKi*I Zh6H={o+] ޝ=4z&ځ8й3.]r5ao޼r+ҥ 3ϬZ*c?46YI c OOV:yNl6tbhF(hjefFI;wnJG렓6ݧ(B$IbNZm@dda3@kGF ص9[neH/S.?۷xHDas]Um; 2eYE ),ؒ)1z[,o߭~I JC -j411$,ݴ -[Đ=a0lf5!~EQrBXCZZqb>YceZgԦڶUJJNyW~={00o޼a}O@K<h O MK"wg`wyr7OR~~~L#Z=t1DbZ5]02we] S@OwV*P=… Z80Aɕ }I#O<(Pi8gϞŻw2I]kSupU{vF,L>i]k#G@Et֭$IlZRRRRRJ)ZmiszUQ p]ձx Frh?1(Æ CZB*ԬQFMpk5n3)g*C:uxb~ 8dYD5Ԃ0LZx/Nt߲Ke޽~^f} UfmzvV[+6lR'FvOHV$I-mذ9Ѧ0TwYDU I~aZ`>>>b6ehG9r;wFҥ3 F7FjUEn4KbRU~N<ڵk#((˗gFBBp:u +gfOU?77@!7NHxTmR/{)S28hC!<  fyOƒ»b-Xniʢ2 Q㢘fS|Ȳ*2Ppaj A^GEse u_l۶ 5Kꨪ(dYĠA+**v U竂sz ]kf6u3ZDNG:#j7݋:x;s(Pd(,zl8}'*y$1&Lv؆wlϙY&v۳gs.],ݻڿg`$Z?5@ܓ' `6nݺȕ??f3Q@`t<:KcJ. A ݁o0KW,Y K׬@͆Ǐڕ:= p᭻fHs 0D+%7نC_t"&VBzz:ߊ[0ĉخ!9lZU IDATص 7jfL\VZSa~m/^?D as=raɒ%;ЋI\jAd6,s7O6ROlٺ ;vTsiN;pɓCEZ 5) `qS1|8VTOZBf???7O#ں\8{J/bŊǏ EaMOOgZ!U0XV$$$yqihѢ Yi N59Gt, ?&_ylEQX.ݪd OCTc~nJ,26M 8' Vb-p͆sb~61@dBΝqhBZ]5j1j&`hl5bo,]=ֈػnc g?fŚaSgK9뇅!((ݓ!={B$6K!wӍtc6as͛7ZxO}/\.E0矕{a6cQ >sҤbՊ\F 4h'M<qoL&Ԯ][ K SP&MPF :T aϽbŊx%+>{ . ))),hJ4dYƫWp \xjW$Qw @;!ܠ/s88s t!p?̚p!} tZիWŵ~#u]QJ 6 QzrakO?Eݺu:˳mv>:Fn/`ҤIJ`U部GrF|ɯSZLX,طu+;_A0i$?zԭ[聁*ڄ!MՄ%]UHxd/T'>Á6mѣ XD ATU#$a}HM d+}RA`Pvd4[OƟ^A5<=zz@"v튃">A') UM% nF"Nހ˅rR;t(b/fL,eAg}ի3J~$4hWdɒgwF…QhlT_9CBB(5%_S xDQDψ9r5L9Ep:$p:;nNޛ 맴dniTH I0{w%^#F`XI҈AףQFE=6Ǐ+2Uz=:_vc̘18>$I~kI@l vџpP^^u.dHzxǟ8}:CMPu蘍F#`I8N$''#parz:nMX (BKz~".]N3GUJm_}ի h?i~CwQѦM<} ԡdiH~KO:>yH~z?WJldgΜ/ @.r.YVUeMüSQT)H:u>öm0vXٿ?-X"1  >RFf|;wF!Cжm[ڴ 6l@nݰc:TYh"=i[|.+VLJ혴C0UjĸqГp f`2j0322JwꫯМ~z<̠E#:@ ,lo@hcz1"pO޶[EQP!ܻqc 9ri~t4NJtBxxtxx8aKddd|Wlт ~~~8}4޾}&7oLJB^ ł *=~8ߎOAm5F`2}߯o0 y\=z4, )AN76rTz4#Gba\A gϞ"쭙޵ _+iӆ8F~uŋ3,4=hF6 gL#'?/JvL\~bժU ZDu' q  Fxn;^AG{)pG;0`ʛQxq6=LKû6ܷ$x-a69[bͬ u`WVMxeJsL.LIc>>>wSaI駟 /_DXE,Z_GÆ U >?cG}$NX,\Υ[ef;wo=K$I(SYJM޽)'ZÆILa,X{nڵk('YS"55l jq{͒;w: 'Nʒ.d,XA@GQO|_=HX,o5AIF4mT5(F!<_WPhECpDkO~t:hO+޵8{ޜ_f`@n 81Q|9d*YF$f 'lBBB0Ce޿_5~NH`@||<BYݺuc4vx;p #Oa|7s͆9s &J/>%(!"6Lsb'G P4l6[vJN1nPΜ9è0(4 (VZUV)=]v]`ŋ٢cZ.*?fPtim6?Uؓx˅SC$է5\!Dy=^}Le21K¬:I@ _re5 Âi[FLL s7oDo"b'F#6mڄ'l6gff?GI/ǏW KuJ2<24 yۍ/9}Z1y*׍OIIAPP[7G!"s|Sp0ԩNѣGXbs,]}fvӴڷonwa T9DRF[ߧtT}I3gk߶ l*<9߲1c_`A:*5vܸq@zy֭c(~~~,ʗm~=FN4Kb"nݺ&MMǎ4|'X $2>R27e1;A@Z0dhç2Cysz椥5E?_L+9FNO|z_hdxIvrrf~΀)ص+1ׯGٿC+TPɈVAcLɓ ݗtj/_(9bQAmWnڤ"wHܾ1'%y6m^&+ENgL… ѡCT^˕wO<~iɪӘVLCCPhZr7tBO3M+TS)""{RݻNJY$ɓرcNO3!NAi;*ԬRXjKi+VZ[Z^___t r]HD̹PBx[4%nGT^hޡo؀pl66wg?Nqq1e ~19sаeK,c>-V_֯φgo޽{m岘hkY.ғdF"z=cA vJ/!~ٹh1|vjӝrPDdd$jU*vݻ= _,_Nܛ=v CkI d '~}׀kFZm]LJ~c"00s`c|QcưMϟǸyjQ*½Fyw߼(QVT>~ײ l6FǦΚ>} $$>>>X,p8_N%kעUV񁟟hdߞ}m(;wVg:Gf;$-9,ˬ(PGڜb0^S{ӈFjm- b̼tQ3A@W+WXմiS<ݠRԨQ#_tXrBr} 2dz \p}AP+[Vy#22CERTU0M<4噙KSXlDQTMm߰I7;w8?shd?YQ|y[ @rtGf (*M% #M>l.^Zgp/FZZ޽{y3gbAtWشGFF&$I=p]M%LO[s)["|}4-$ )4ߵ_z%\j:Aϟ^d#(V"6ލ_4 4;,^SG!Ν,0n[%SD?Ǐcƌlsڽ{7۸wN֐!( Ҷ  k 9֛7oW*NB_>|XOn`s {ǎI GW`A56IPP[V-}# u!^嗯h5 :zMVk…XO,a2FM# ˅E ^:KчFz=Zqɓ'+IQqYDWٳ,MXt)Ν}2%m$'3gT-[ "&NT3Ob~:-g[pm\{ax+bd]*Թu L::3lA߾}a;I[0Zpv|p8tB/v+˗B7P;d9h߽{7<pbd$ךg4>{Z/E<|)mGM D9YJ TU68'ۥ6맟0w"ϟ;w.RS {`>^sGHS,[V~B@XRX+o 1 nt?lcA=tp:\9hJ6۵l7n/+񌴴@]tao}:rD{%3LJ(¤@ڵYX^zO2nN`4EE Q0x(4,XŊCpZ*Ƒiᜲw2ݑ7oެm v;>}:0Kbc LXW&dY5M;ӑCO#}XNŋ3h6O9rNΟS~mшYXU۷ˤ|dYFbb"k6v `#N|Ѩ*nMW^xF~- w ѻCd5R|Ν,'kװsNknzzv wQ)2=ɢ,@R< ?`0PH;Qzpa,YSNEN`Ldn~>u֧A@hhIڿoj!DzYLOdJ VB_ltCJ8:Zʷ:$Iئ F m۶V%7nZ;@wZh&b$s≔==laшǣL2x)X͚5à#U+oV, 3ϲDO44d9~rv-e"EB#HߜQDw5 @(/Sd2l63ٳQY3,^ d2A#E@ݤܚ2?GшWA6m崙+QbEe=k)QYЛmقK.1\1o4`'( En`oŸq;>C ލ9pj[7!Ňim۶e$e,NmthIIIh֬[ @Fr2 AnVj4쎕kB=p:HI}C6;23p8gzcrرchڴ)ZleBI \r+ ȐeHܸt wFZ ^z> T;6TjGm5i[ DN3x<8s(иqc{ kT'?Mnܸvx x<؟oZ$f h8M5ьZA/QA$AF_}-0-I(B7 a9scD& E OE휀 _ĥd VBΝIVƞ+o@i)H.7N%0s!}Ը-[S ]g1dIBIT|0LyE\t}VEMtM$IHKKcMk 4rDЇbx>[qK~JÔ "ztOJǎCҖ,>͜zK5 ~ ߠ TQ] =e YR&%Hy-AdTP^KH!X= EB?BrVǓ ۙmxeƾcny ln F:BD IdKh:A&@* "=wrʱ:| g;)t:E,DP`1+p:Ȣ z QC 0茰 ȢW^H"0[|a˄@|b>Wisuzex$H.7DЉ"d@50|p5~J>>4t}o1 ]tito+. YyԩSg6,OLDڵU/~~~E3cFgŪUCUBZT`-S(T(x!߶\@BQ}gΜA:upm P%p{Qnp8JIϠs-ءCs|MjXUQN w}Z@_?t^~h8t_~Aǎhl&E ͳVt:avIje/ļ$I=*ܤ$$ ha`et )^oGo]ЯK޴߾z ]""5~VMTTsbQVչثΓv_IR xP*8~ƍEӧOeySi p-M-ZTq AyZF^._"C!f _d2D\-3qꨙm("55nb7(HMqԎfw}D"r "9hk^~=z )t`0S! .ne*C<3ƌx^tS={6z=V+FkV9>T1Bܾ}{D*P&M\r!66<MF=Ad:Rͧ8мy\^@{9hzY}?aX.^ۦDCw!O hҸ)#͸{j904]vNۍ;v>֭\.{iiix!skPELGhhh]| 4hdnpf=0O[hTw)QڵkCeB|ٍ;w]v?-^]*⟉L}{t'+zr) fvQ;ve͠vgEZԣ9j;v1cTӾ-$"Qq5$XcǎAG0t(hrmۢd'N‹/;rx`I;s=zTޓeQ|9> i\6ͧYGJ_OZn\dX-ѺukvӖfJ7n`V^F |9E„䔞1cus]{ d, fΜ 8޾1ȯt">>|Y;}4E`0p80d؉|Ѳ%Nz,Zt) ^̣a^ǹWY]vlcжzr{𔓏o dZ P$~fNEt {쁏*WEH"HEasz WMxo6L-]odDiaJ:g$JWf͚aݻʺj'z^䓬 5r!\a;))-|^:~ 3ʲis2Zregl}KA]ϿXd !Ǐ#k%~٩lqi~JJe֬"<< -\Yge˖tx1, *WgKҥKYi͛-,X͖!i${K'$idbSw'h犦ǃzdǠJKW_}N!={"޶-Vsff& f̘t9s>}"E իW8?޼yM"vj,\*}zEAPzu/_/]D|l,Ry͆ YοTOPBOnעdIrt)KPʂ T xD?4jZ'] Uh40<<Rf& vڡe&_75l w/tk ,] wHx7" NF.-։PEqoG вel|6@%P+ZmƝ;w)|vi>sJ5E 45qzzTW$aL* L(V o\ ڵSt ŋ(]jZլ J`T 8f9`խkgΠG8K-`@rd2VZ`Zq#F#zs?-׆]p8`1MXt.^Θb(  £Z1F#F#N'޾}FR(@SZq*Qrpe+߻$_322p8p#-- p^l۔d+'N&8}:8Nm7~x8\6yAevQ(E ˕M󝷵[ & )))Fk F>f=lv>=hNg1rkeFM#:eiˀ2oJnl19̌aݎ?5k޽ sag2ӫՉ=~Ьפ )yAx )RQCzUSmzX?K?ey6|Q;yRu^Xt)IΜ9}A`"#YZp!좪G7J֮]/p*6ǤI5ky-^lӦ A=1]z5 [ DʃӐVGiO*)vRƍ* l]oGϜa h;b0h #Êwݻw`_@pj"==V+Vid)f _lX___&=i 2'NĨ 0lX_Y}a,3z?5{+ MN5jPB*lUR/iu êp IDAT d>Ft}VZU5(Dsg{-F.] RV>˥r|@i Oo W2o<xdĮ^XX$:&XBB0|VԨ[.6$&UV8qؿ*,+6¤70V]Q0a„\$ba;5֣<~13fAhm)fСձ(Zʗ/Q0vF֭<vލhR-]*Ɠpȑp$'3r ADD2c U;/ u,X$ӨX"J<(=d߰0׭hT; nfݻ7[ #,]-<$h׮dB!AdZs]Y(pIՙEX!PEa"hK>==GE`2СgOl[mt󉉉a_|V C x6V+r!x*' N''&bС1! W^h޼9ÍS^;֭Û7o.O>]UZ*Tus]6d %J 4igf7QEfHNwq!2D # w_\26mڄέZ)yN,G74h>H8蠉w 4P ,l<~87oi$ YACիYG~i֨Y&._qƩ[fUxqDFF2Gyjܽ{|A w$*U¤31HE?D*P8zH;wfN-͙6 ЬS >;t@6ߨ&.תT֋3=@E1k޶ QQpff&WحJ9Ykf3 !K^(2i. f6v:8x ؁Yҥp8~8+M=4jӆ)^b]ۍ,eƌ0za>z(v k … X%K+_-[ӧ+I܈#"Ett4 ]Uc=~7$XpG ::lQ;fP!# Eն;v tۧ2~9]qhl6;"`?#?ӉҥKFXBm*PԳ'xp~sǏ#vl?p0s ?kT56p$ٶ gOܬCn3߽{2*jժ^pI}lיL&.]e9%" CdEO|-?K$ܹ֍(X"B>uU=~1;nwWS{)b 4k*תX[^w$&"vj| ȊYkt> 4"F/ꅕ6@E̞=[p\@/nŗ_~3>q& n7V碏BО/2TbD}?˅M~ΜXT OQJ3@=0(V*?tHII\x rpeC,U}xRaAU5-2,%J@FV15##͛7׽?}ZY,Yη\.XG mWzXb7n\ʼen3&ڝcB۷/8 1`4䐡эdFbبVm׮(^J桦n`ى/fz?QR%('Oѵ+VmEcɲ*$EAn7ի*ð(4j4bne?d"mIIl$I1bQ`AeQIY.Zdzl7̸֛ r<{_ZiVqIHPv4z` |l>>>ϏhLc%aZf~)^Z,M\vfyHJHS` P;:k(6R8L ВrsпOEȑ(**”)S-qjڴ)XEj%XHLMŤ1cvtD`.H1UVKTè0IKV颤mTT|2smoVaaaAd¨`*ma-;wv432hHt? ''L2޽Ûhڴ)UȉZTTtyyf$ rm۶m//x{{~IL۷o+No=z 2qj$sPRR&_?6vwpeL|l,|.bcѰaCbUD0%2ɳ 6`ܸq8°zf\iJڵd3WO#xTӧ%֬_O3tj,))Z(2 C[iFV`0m43 kkkH{.4HMMY` :֨12* **meհ)N:;;#+JEტ"I0jSF|ЇLuv$eTj ١Cd|bܖl*Jr<*r$^S+((@NNN[_P=[yP~khܹ3~'%O(..5wnv#j񱱘C#SSiv,*{"QA"Wa=* 3CW`.p}'Nq䙏Rg{їy;w}Ha5ii`iR-CZ3ؖR["t(zXjϞ=[1B [.E C0,$ڵpd}NNNHMMEp=z4 ك`e5qX[@߲a>7V+b~BfHBMTɆyXRν{}pTjU  5py:jժQ xL?ֵ{Ѯ];Jy^*0ףl"pҥ϶7nL'O{o/3?b>sssQTT6:)>ya0kԨS+W$x;g; :`:+`*%\wZHNNFDD0-_| ooo@Z󃟟6HnZ(ioeYV‹Ljҟ$رc,~$!8::f@Fy63'MfcccB,dggxguNt$߾?#^` 2a>;Axx8-eAYʐ6VZ\6ܜ[FB֭iWA:u0y\v%^?vz|gSYPU'''!qYM_qc888?y|50hHOG]aڽ볯ٺukt:M ("//ȣ/@mmm?/w5 l`0VbIR~r}*ժQԩXIO>޽{NHdY 1jiԺ50y n߾pׯW.{TU ٸYkj'$ĤI=@r  ԣB{@ӧ4gUT^3gThcGBڵ5e ҧ"_իxG7X[#9=]Փ'LDM̟cG!GnGw֯33ӽ_A ^>:tHaJqM\9w [(%'3]gGdM$dZj7]uC͚5aoo*UFXiS9מV̑ ޽l1BR If!ٳq,Jw&]+R`ŋ)XJxxlBަM|_})3gҾcʵrZ;>ڶmJ*)ޯ baV&^>H'WZ[  +C"MW* e<Tu z=޾}ZjZjeyǎL_?BhKN5??xP=ϨƒV-49믿BprV 0FiC|W`4!Ju3z"vqD&(ݵ K֮ tJ%#F(1BZ`Qܺhi={Tj5֩LOOGk:ufd,"!) f͢Tfaa)SO;ժUKҺ`0 00ϞA@` oMڴA*U{/'pv߉ץ ƚ a,2?;m4, ɮN6+2Ǐc~\ܿ"阮3gBf1w̒v1T4h'du)o`5օVU ǎC_wh(ܨ2#(FŸ CNX ;֛z_~-5 4b2= IDATG)>ei%+f赿;٠'j$W)nِLQxdPNNN/盐rҥo GN8$O@&/ֺS'X̷~K[G泗$bŊt.̙3P݀,SDѣ]ooԩS/T9爜<5jHqݿ/*VHI-Cc *rpQ???l;xCL$?N97nS~J:9c,ėq(wMZ4 XB(<ݼzO ,\_1HJHdL:Ν;Jo؀3f[П!xDfZnjѣu%)˚4X[[ChԨ Zt)F Iˆ`[;[? M=kkkoooO媺8;v87|K4Qc޽ذm8KY 3b+T}^3̕Mlmmq 4q{(H5iooodAoii#GΝ9r"M&m{9be z\aY<.ݛ!wd%ܔwH)#$;rU(t dIR M=r$?LEd*oڵs$L66ݺ8\lXJ߾E0p@M37lp**292R X~=dJDIΝ֭[=j hٲ%UC x/wNqzw<fmR*"!{q܌lճgPR%\t m۬`;bx #>>^+G_6OOLTv7oޠĿn֭MԺu K8EEd5~81Z[[[z{+''_{{{{0 #GK 9JMjy n$~ݨ%̿/^PϽʓO9͙A]֭[S y8%l$'Z[3'NR\ڸ=d􈍈ZiWa|d${ y˗^"6sLhZ! Tuw0@|RV35M4S-&N2 nkMP|wEŊ͊zjzݺu Ϗ, [@n'OЬY3ceڂ3!0+NaaxhgAx"OZ?xfƼ~Z*?m ggg9a7?a9'X Ax/ pÆ ^@y*K ?ऌջwoL>FCY`mmMLdg[An^^X~=eTjtՆJ>+qM BHH&DD 0~:6lHs3sJ~:2v.ó8VHM5IfbUE I& yAAVTrRR͒ }`cb"U^Oq*HOF0M{yaڵ4#˲Y2c׮]hذ!|||<.\ϣ}ǵk] !!!())A'~_N Z.Q'+fT "7n,KKPb@E^t:>~B񆬁aׯ_/}DttUzz}e}Ik˫mllҔ|0e ZE3iGwBvv6<==,fϞ:+"2zͰFAA~g*Q+4Bjy2}2%E1iO'JhS;:˜GB5jRRRdߴɓrj@7oR8} Xi@cX89 ;:+W(ą 􄝝PXX~a8v\wVF5mJ=ddd 篿&=N=O[ oL_t+uΓZ|M#EjI_Q~'!/iJNV֠ZFXX35;SS"9n8nnW\\\prqqAP)FzJq-D915Ut:"yݼ'N@Pcҥ_px8UDӧQR%899C@To}PgJ X tx*e ֯8q;)Ȟ=}bC^SD}=@hɳ^/}`gk A( vPڗQLgVSSa0( J9_`DaxSSiyAJm۶AZl ///+6`ă3e.ʇ,۲F'wr['/]BժUaiiB{6}/Y` &#&&e:$SyK?Jչwo*RA)((((3xUTv Ӹ1"bbUbnjuMVv Y?9-Y^_jƍA'鹐/<㦐@y e@ȑxbXHgΜ2%C 7o)bcb"9Cff\e4bɸp<}^ ]zVѪU+=* /XcڸqP?~ThɿQ28?+*W F[llp 0lOMe K^m>>>TCi:|X<{7k ,jXja,g@KZNj5XF RaE"<'k%7R_8{3$h_nh JBŪU&+ 7n@PPF #JJ z'< cƌU8br-j,B`jծGwJ(]==QR2TE~~d,oH… ׯj5֭&N/***W{GJ ^ h[.a|x8wšCСCo1}G˄ߤvUPT$ŋ-[͛x|6X{{X`VI\֥y~8obj*}~*x{s/RΆA~~>Tݻѣ"'S-oٹĉP@Çhߢ3P؝^$̀Y,Bͪ`9p# $^شg7F 0> SSh닁J-yA+#FVۭPXX888@Ͳ(..ljA:F*jPEg&C4>A{Iݱ)) ͚5LCܜ9P <F#)/X~--] ZAA0rXr%tbNFFF?x 0x`(u1Ny;JprO;)X`25B¬ A:eG3`AF =r$֤ ,؀KZѡCٹS2L2Sy@ard$Etڋ-7vk5?? *ڂ-H1mmcPVz[(x {Ơ^hOgʥ}tA͛TBCQ۶u*c5mZPdC g._  ;unn.!׮]$,#GVɓ'TхeYFwޥDm߾'OT`ق(**NtR4\TQ^W;yfܸxj8uYR :"cct=< )tLvvv7\~~~ AB68Y Z[[Sɼ<̋"@>_Æ [hhL^^Ы}{:zl'㮣GCeiV8JEMR!mNF RU*-gzH_RRBJȉHjytסCQ%AŋѢE ߵqFy6jEwIn.˨}vJd͍X޵kI&cVV\;z 6:UNNN?t(nB7-[Ljժ Θ86PjELD .b7666oAL޽{ԪMN&}sk,l1N?KWޞrXxwPT]BDIN|y+++l6>}0̉l[nn.PV-żC=Ez%kR=Z+W`AȮZ P켼ŇRT 'iOg婹H6ǏA~~{(cxh(ڞ-ZÇkf0%:J/_V [g1eӧN)7.B/ȑ#pttD~~>-X-6`MB1mlL~u4Y/ѹ]\\7rj5QjUav'س >+Å( &.!r ݻw4hY꯵d)æ[Ɣhrf֭[Q~}$Ga|x8~'ꨛJcy[n_~ڵkFMFA ɱ9!) 4Wzp t666>tHY&/^L,:tqM3 8<ڵk^z[`1b޿ƿ+I$>9IFгgO 9a:t@[3f 'INOٳQN <@͚5cO-;۟dI?+ [[[|^^^ NN"'ÇQ۷.nܸYx8$''#7'hJU e&!$ %޽{Q(]а0XXX 3蘯fY~M(_bܹS͚5CJZ -+; P[Z(+%>ŏ&o\^KFjXYRC32)9_kƍS?"77uU %,#GÀ%۶Cy֯9W@RRVsСCRhs޽@())Ann.>~||VEf?~ eQn]C(n&>`p(,,`@~~>◮^zaסCC$IIz$IijQ\\5سgf̟\uF6aii3gvʒ_꯺`%? àG3eR[;;;TVMQp2쳧OÇo%hD׮]1!.cǎ3`HZI+WRA5o*zuڂz\\\ ݻw,eYPFDF |)Deggs2d8S|ܠJ> ԳH11ԡ3ll d~*yyx!aoo9s?^9={7pV,V^Vs;v 66V$lٷ Fv钒a֬Y1cI~C`4Ie Pc%k&`H2F M(<<ׯ_k׮8vK&AAA0 z*NgdQF Η@OH%_v HZⓟ>yUKj5B ۷ogwiICbsNX[[#DRb'P8ׯ_GŪUQR%VSaa!lllPR%2S7K~+*?7nxcO#fCXR 8AYMm,IXCL#?y!7 drd|F* T`TBRR7ѪU+iF1 }}}Q\\cRߟs,ŋcBD+|U* ̚5 >|sIpҥq鿟|Ǐ) p ysSňY3-0'*ɕ3M+PV+qǯZZe'>f k'IѳgOxxxg7xqG&)[*,qxnRJ^~t:зo_FY&\\\>+IoZ~Kaq]Q?1?Yo߾B>ؠAgA8O6cqZ[㯿/'O׍PS:ucϤ?<\;w>ݻw%tgvC-(E6ej*7`XlmH輹5eXݴZ|zV5AEr(4c4RYwAʈmmm&RbgΜ~|ڪظq#FY&e˲T\Cc2]L z=XVkLݹ8};z=gYk7oC[}î͛4 "hh(8lO:RRR^*T$pvv㱡->'tZ;o5Q\\:̈7/Iɿql^R עn^^scjM6`YV&"S'Xgɓ'hKşLh~HӵkWIDˡlڵ tXhw~Ȩ(xyyaXZk׮t18vزZrtp,: mVTvJLTmuRQNAH^"9lTkaaQFQ7nyΓϟ uD ʵjaWpxjݥQ)d @v"AҺekbHR4*CIVI./ $총;1`j̠j) giw5x$IaÆa֏?Bek5j 66=I qV­=~<lA.ql۶ 233f䄆MPÆƆLANB’|7n,\d9V6m(\ rGPZ54k֌~G\ l~9q8gΜsp-]ƼqաhO&!OIfޖ`܈8m+WV =wW\^. IkԨQXq#Vt(YXX>0 9ao(,{Rb[[[عwx):F߇gm*W\A֭)>d(,C` kAw8qh?\n:0< as o[84 q, WWW QƓ+WYfEg M,͛믛l{_Ե5B͚5UBR!(O<“' j׮/HKTiXw}wٻAբBw|OŌΜ2s&e qox%߿D*U m%''c̘1od\I s/[v;TG 0DžPi,bXo}Put^xcѢEYӧ[۷k֬|4=x6]{a)MD>x͛7)焔֯ǥKRj   ocƍPyyѝfݫuN 7kΞZY`Z3???cJ@zh0$`+0 F/gܤ40NKS}΀;܇PY,74,Xec; ϪU۸s:HOIA@\9{~ݫlŋ!N Ǭ 0hڸ ~9~ŅET׭reׁ^1Y5֡Au:։a(ռѭ[7_UWի~C K)22llllp|F` ~:{=Q΋5a06ŋ$H`*-P`4իY ۧ1cpwӧcc;jBRzYJ2:S+:=^zE =Е)߲%Hx9vލWA=z3ܓ'NKKK 5 'Y ;;;̌EΝVrIDAT!^ 0 z  R{3ظ9g@˗:IEj@RB"qsk׮hl|#-h }% @b0*pA:X礉&.ӧOeFR,[om''899I;x,-Ehee%@A@}}= EH899PG>> 6O#ݱSh?[iK7oބQ7xue|KKKIdCsёn>DG[NNTlRrR}6ߏ599]^^NZ-V[O֙J53WC(ߏoǣNCR Myy9y rsm[+G99h׭æ[Mh)?$373 og,CAAJxVTTˋB qR#z& 5 ug@|'9y2yG7mDbaʐ9!l߻bvLڵk eggPZZ!urtis-\둞[Nra"&$$( Ɨ/_F޽@b*7L%r$O9r$N:ܹ3T*&IͲ,BC1x`*(^Wi8ógJIA֭)?gw/ |"okTVV"11fޘhǏ騟)F9s!4j5>߲I3F;Z/⵴貄ooy?{M:>݃oY+hd>"l` @PPlll(l4ʋ,ܹC={,̐CJBΝQ[[_й[7|^B4HX.wqn݊O7kmK_;0/\ ($hRG1118{ Drr2lmmi޻w 6 T(eE}Rv$q8+WIItG.X''' ݿ+LXJLl*!eq(,,D? [A9 ~Ԥ/eu:(GQhCs~޽H=#1o4DHu7ѣt$}/;; QXV͟?Axx8>3޼ f@}s+OT`1)>\ lƍ88w уuL&r1 l@PUQ@TϻG;20s'1O>@v ?R w'|BkJ ˲ԩQUUf=zIIIDe\zSbD_)?Ça,;)YYqB_~iZz52ssb|9;#** zAAA0CʉC-p޸s' Q'AwW6e_r˞=toll@_|Awv㐖d裏 .ɋs(@} (  sY_ 0`YNxY[ ELl,Lw^ ښ w!E/^Ÿ/Xń8߹nnnO[i `cXJAճgODDD‚k4*]Nv>H7yp5ߋ z:v순7@2*!Bdz-thH\۲qY :T܄$M -VP ];,uL?, %'$ l !""={Ɔ H#Ν;ӣC0h 0 1cPZcʕXfb J'N]a_yn@w9KK$$$b\MM R?]?" Ie*K߁B+X[ZAm=o.a]h;fI1]=zF5TUUg7C@jf&Lߞa 4j/ DEЀ8xAmCfZx{{ *_õ@FËy7nKgM;)PeiWj|w]]wt.^.3UGpp0wm۶ٳgbz Ed,ld4aY<L Nv~ u&?@#G ŋ([ 4o?~m1iGMbVTn]7a{=ԈZty+~^*7 {{[S M,˲,s,B5 * ֻw85:vHDDD`ղe@s3K2?qt\r`0P!*ZQR#jyj5FI@R|"-{YE:33+W-QmAxf̛6 tT:tH I5wRX[[ӳC/ɳ%%%6l*9̘? ^Sy^ , 0l0 2:ݬP3XQII8`(ee7o@3ŪK FJ0cl[)S߬Lk[H Y*r:yj2L0qv8:$'֭(Ay&a}K*HrHSS믿IفeY zJMw|z?0n8<)7g~(,9xG X0n @f37LG߾}! $pqqiŪׯ_oK9}qY^ H~~~FII <<

nݺ??V,5Fzrgrb[~* yRb͹ָ "#;[; 5k@!&&Z'Z!{MoqJ N E^=}ǏDŽ1ؒDIb{{n.&'$@ʕ+TY*Y" ")gWQnܸ=zпo۲8VV"y , gggJb:+KJ 4 |O< .[Fُ+Oi<3.ӡ pww>Y˗Ѐ޽;u8޾3 3"2R`42RSSq t,EHHZ-SnΛ3g-xk4DDDPa@Uee@6ܯ&J=r/LRhknnCk3jt RSLe9s`iiIшlEU|lۿlܵEz VR\̘1iii̤J: `ŊժaVi X@ K󟛛f̘5e˨O??Z)|I'7iged1ؽm W/E޽{4k" KkQ#΅S2Bt$C//agV +++R}bi>w4o۰v-EE!OӓA- 88WF@mjjCtE\xA_Dh4bKv6Æۊa2_ԄcƠ {رcK|%QUUNG`=#9Y8*I{ԛzb2EAltپMvщc$(_~I&QRItR|(ǀgakk (-sRBBRLIõyhj47KJA1p@+~5U1qEW/\'PSIv=7 ]I%ˑd]d8#GDvbkTjX%5j@zz&e8}"ů/<<@ƲUR0zhDFFbڵ4ɂ(<}!wod bHJ OF}}=Rk.<#$$2 Oyr1\1%+Kuw֍vF#РHb1QX|}8q1|)  IENDB`libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/inc/000077500000000000000000000000001504737157700213005ustar00rootroot00000000000000libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/inc/CMakeLists.txt000066400000000000000000000002331504737157700240360ustar00rootroot00000000000000set(api_files heinz/Complex.h heinz/Vectors3D.h heinz/Rotations3D.h) install( FILES ${api_files} DESTINATION include/heinz COMPONENT Headers) libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/inc/heinz/000077500000000000000000000000001504737157700224155ustar00rootroot00000000000000libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/inc/heinz/Complex.h000066400000000000000000000024721504737157700242020ustar00rootroot00000000000000// ************************************************************************************************ // // libheinz: C++ base library of Heinz Maier-Leibnitz Zentrum // //! @file heinz/Complex.h //! @brief Defines complex_t, and a few elementary functions //! //! @homepage https://jugit.fz-juelich.de/mlz/libheinz //! @license Public Domain (BSD Zero Clause License, see LICENSE) //! @copyright Forschungszentrum Jülich GmbH 2021 //! @authors Scientific Computing Group at MLZ // // ************************************************************************************************ #ifndef LIBHEINZ_COMPLEX_H #define LIBHEINZ_COMPLEX_H #include #include #include using complex_t = std::complex; template concept DoubleOrComplex = std::same_as || std::same_as; #ifndef I constexpr complex_t I = complex_t(0.0, 1.0); #endif //! Returns product I*z, where I is the imaginary unit. inline complex_t mul_I(complex_t z) { return complex_t(-z.imag(), z.real()); } //! Returns exp(I*z), where I is the imaginary unit. inline complex_t exp_I(complex_t z) { return std::exp(complex_t(-z.imag(), z.real())); } inline bool isfinite(complex_t z) { return std::isfinite(z.real()) && std::isfinite(z.imag()); } #endif // LIBHEINZ_COMPLEX_H libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/inc/heinz/Rotations3D.h000066400000000000000000000106041504737157700247400ustar00rootroot00000000000000// ************************************************************************************************ // // libheinz: C++ base library of Heinz Maier-Leibnitz Zentrum // //! @file heinz/Rotations3D.h //! @brief Defines and implements the rotation matrix in three-dimensional //! space //! //! @homepage https://jugit.fz-juelich.de/mlz/libheinz //! @license Public Domain (BSD Zero Clause License, see LICENSE) //! @copyright Forschungszentrum Jülich GmbH 2021 //! @authors Scientific Computing Group at MLZ // // ************************************************************************************************ #ifndef LIBHEINZ_ROTATIONS3D_H #define LIBHEINZ_ROTATIONS3D_H #include #include #include #include //! Rotation matrix in three dimensions. Represents group SO(3). //! Internal parameterization based on quaternions. template class Rotation3D { public: //! Constructs unit transformation Rotation3D() : Rotation3D(0, 0, 0, 1) { } //! Destructor ~Rotation3D() = default; //! Creates rotation around x-axis static inline Rotation3D AroundX(double phi) { return {sin(phi / 2), 0, 0, cos(phi / 2)}; } //! Creates rotation around y-axis static inline Rotation3D AroundY(double phi) { return {0, sin(phi / 2), 0, cos(phi / 2)}; } //! Creates rotation around z-axis static inline Rotation3D AroundZ(double phi) { return {0, 0, sin(phi / 2), cos(phi / 2)}; } //! Creates rotation defined by Euler angles static inline Rotation3D EulerZXZ(double alpha, double beta, double gamma) { const auto zrot = AroundZ(alpha); const auto xrot = AroundX(beta); const auto zrot2 = AroundZ(gamma); return zrot * xrot * zrot2; } //! Calculates the Euler angles corresponding to the rotation inline std::array zxzEulerAngles() const { double m00 = (-1 + 2 * x * x + 2 * s * s); double m02 = 2 * (x * z + y * s); double m10 = 2 * (y * x + z * s); double m12 = 2 * (y * z - x * s); double m20 = 2 * (z * x - y * s); double m21 = 2 * (z * y + x * s); double m22 = (-1 + 2 * z * z + 2 * s * s); const double beta = std::acos(m22); if (std::abs(m22) == 1.0) // second z angle is zero or pi return {std::atan2(m10, m00), beta, 0.}; return {std::atan2(m02, -m12), beta, std::atan2(m20, m21)}; } //! Returns the inverse transformation. inline Rotation3D Inverse() const { return {-x, -y, -z, s}; } //! Returns transformed vector _v_. template inline U transformed(const U& v) const { auto xf = (-1 + 2 * x * x + 2 * s * s) * v.x() + 2 * (x * y - z * s) * v.y() + 2 * (x * z + y * s) * v.z(); auto yf = (-1 + 2 * y * y + 2 * s * s) * v.y() + 2 * (y * z - x * s) * v.z() + 2 * (y * x + z * s) * v.x(); auto zf = (-1 + 2 * z * z + 2 * s * s) * v.z() + 2 * (z * x - y * s) * v.x() + 2 * (z * y + x * s) * v.y(); return U(xf, yf, zf); } //! Composes two transformations Rotation3D operator*(const Rotation3D& o) const { return {s * o.x + x * o.s + y * o.z - z * o.y, s * o.y + y * o.s + z * o.x - x * o.z, s * o.z + z * o.s + x * o.y - y * o.x, s * o.s - x * o.x - y * o.y - z * o.z}; } //! Provides equality operator bool operator==(const Rotation3D& o) const { return x == o.x && y == o.y && z == o.z && s == o.s; } //! Determines if the transformation is trivial (identity) inline bool isIdentity() const { return x == 0 && y == 0 && z == 0; } inline bool isXRotation() const { return y == 0 && z == 0; } inline bool isYRotation() const { return x == 0 && z == 0; } inline bool isZRotation() const { return x == 0 && y == 0; } std::optional angleAroundCoordAxis(int iAxis) const { if (iAxis == 0 && isXRotation()) return 2 * atan2(x, s); if (iAxis == 1 && isYRotation()) return 2 * atan2(y, s); if (iAxis == 2 && isZRotation()) return 2 * atan2(z, s); return {}; } private: Rotation3D(double x_, double y_, double z_, double s_) : x(x_) , y(y_) , z(z_) , s(s_) { } double x, y, z, s; }; #endif // LIBHEINZ_ROTATIONS3D_H libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/inc/heinz/Vectors3D.h000066400000000000000000000273011504737157700244050ustar00rootroot00000000000000// ************************************************************************************************ // // libheinz: C++ base library of Heinz Maier-Leibnitz Zentrum // //! @file heinz/Vectors3D.h //! @brief Defines and implements three-dimensional vector types I3, R3, C3 //! //! @homepage https://jugit.fz-juelich.de/mlz/libheinz //! @license Public Domain (BSD Zero Clause License, see LICENSE) //! @copyright Forschungszentrum Jülich GmbH 2021 //! @authors Scientific Computing Group at MLZ // // ************************************************************************************************ #ifndef LIBHEINZ_VECTORS3D_H #define LIBHEINZ_VECTORS3D_H #include template class Vec3; using I3 = Vec3; using R3 = Vec3; using C3 = Vec3>; //! Three-dimensional vector class, templated on base type. //! Base type T can be int, double, or complex. //! The resulting classes shall be abbreviated I3, R3, C3. template class Vec3 { private: T m_x; T m_y; T m_z; public: // ------------------------------------------------------------------------- // Constructors and other set functions // ------------------------------------------------------------------------- //! Constructs a vector from cartesian components. Vec3(const T x_, const T y_, const T z_) : m_x(x_) , m_y(y_) , m_z(z_) { } //! Constructs the null vector. Vec3() : Vec3{0, 0, 0} { } // ------------------------------------------------------------------------- // Component access // ------------------------------------------------------------------------- //! Returns x-component in cartesian coordinate system. inline T x() const { return m_x; } //! Returns y-component in cartesian coordinate system. inline T y() const { return m_y; } //! Returns z-component in cartesian coordinate system. inline T z() const { return m_z; } //! Sets x-component in cartesian coordinate system. void setX(const T& a) { m_x = a; } //! Sets y-component in cartesian coordinate system. void setY(const T& a) { m_y = a; } //! Sets z-component in cartesian coordinate system. void setZ(const T& a) { m_z = a; } // ------------------------------------------------------------------------- // In-place operations // ------------------------------------------------------------------------- //! Adds other vector to this, and returns result. Vec3& operator+=(const Vec3& v) { m_x += v.x(); m_y += v.y(); m_z += v.z(); return *this; } //! Subtracts other vector from this, and returns result. Vec3& operator-=(const Vec3& v) { m_x -= v.x(); m_y -= v.y(); m_z -= v.z(); return *this; } #ifndef SWIG //! Multiplies this with a scalar, and returns result. template auto operator*=(U a) { m_x *= a; m_y *= a; m_z *= a; return *this; } #endif // SWIG #ifndef SWIG //! Divides this by a scalar, and returns result. template auto operator/=(U a) { m_x /= a; m_y /= a; m_z /= a; return *this; } #endif // SWIG // ------------------------------------------------------------------------- // Functions of this (with no further argument) // ------------------------------------------------------------------------- //! Returns complex conjugate vector Vec3 conj() const; //! Returns magnitude squared of the vector. double mag2() const { return std::norm(x()) + std::norm(y()) + std::norm(z()); } //! Returns magnitude of the vector. double mag() const; //! Returns squared distance from z axis. double magxy2() const { return std::norm(x()) + std::norm(y()); } //! Returns distance from z axis. double magxy() const; //! Returns unit vector in direction of this. Throws if length is zero. Vec3 unit_or_throw() const; //! Returns unit vector in direction of this. Returns null vector if length is zero. Vec3 unit_or_null() const; //! Returns this, trivially converted to complex type. C3 complex() const; //! Returns real parts. R3 real() const; // ------------------------------------------------------------------------- // Functions of this and another vector // ------------------------------------------------------------------------- inline bool operator==(const Vec3& other) const { return x() == other.x() && y() == other.y() && z() == other.z(); } inline bool operator!=(const Vec3& other) const { return !(*this == other); } #ifndef SWIG //! Returns dot product of vectors (antilinear in the first [=self] argument). template auto dot(const Vec3& v) const; //! Returns cross product of vectors (linear in both arguments). template auto cross(const Vec3& v) const; //! Returns projection of this onto other vector: (this*v)*v/|v|^2. Vec3 project(const Vec3& v) const { return dot(v) * v / v.mag2(); } #endif // SWIG // ------------------------------------------------------------------------- // Rotations // ------------------------------------------------------------------------- // //! Returns result of rotation around x-axis. // Vec3 rotatedX(double a) const; //! Returns result of rotation around y-axis. Vec3 rotatedY(double a) const { return Vec3(cos(a) * x() + sin(a) * z(), y(), -sin(a) * x() + cos(a) * z()); } //! Returns result of rotation around z-axis. Vec3 rotatedZ(double a) const { return Vec3(cos(a) * x() + sin(a) * y(), -sin(a) * x() + cos(a) * y(), z()); } // //! Returns result of rotation around the axis specified by another vector. // Vec3 rotated(double a, const Vec3& v) const; }; // ============================================================================= // Non-member functions // ============================================================================= //! Output to stream. //! @relates Vec3 template std::ostream& operator<<(std::ostream& os, const Vec3& a) { return os << "(" << a.x() << "," << a.y() << "," << a.z() << ")"; } // ----------------------------------------------------------------------------- // Unary operators // ----------------------------------------------------------------------------- //! Unary plus. //! @relates Vec3 template inline Vec3 operator+(const Vec3& v) { return v; } //! Unary minus. //! @relates Vec3 template inline Vec3 operator-(const Vec3& v) { return {-v.x(), -v.y(), -v.z()}; } // ----------------------------------------------------------------------------- // Binary operators // ----------------------------------------------------------------------------- //! Addition of two vectors. //! @relates Vec3 template inline Vec3 operator+(const Vec3& a, const Vec3& b) { return {a.x() + b.x(), a.y() + b.y(), a.z() + b.z()}; } //! Subtraction of two vectors. //! @relates Vec3 template inline Vec3 operator-(const Vec3& a, const Vec3& b) { return {a.x() - b.x(), a.y() - b.y(), a.z() - b.z()}; } #ifndef SWIG //! Multiplication vector by scalar. //! @relates Vec3 template inline auto operator*(const Vec3& v, const U a) { return Vec3{v.x() * a, v.y() * a, v.z() * a}; } //! Multiplication scalar by vector. //! @relates Vec3 template inline auto operator*(const U a, const Vec3& v) { return Vec3{a * v.x(), a * v.y(), a * v.z()}; } #endif // SWIG // vector*vector not supported // (We do not provide the operator form a*b of the dot product: // Though nice to write, and in some cases perfectly justified, // in general it tends to make expressions more difficult to read.) //! Division vector by scalar. //! @relates Vec3 template inline Vec3 operator/(const Vec3& v, U a) { return {v.x() / a, v.y() / a, v.z() / a}; } // ============================================================================= // ?? for API generation ?? // ============================================================================= #ifndef SWIG //! Returns dot product of (complex) vectors (antilinear in the first [=self] //! argument). template template inline auto Vec3::dot(const Vec3& v) const { Vec3 left_star = this->conj(); return left_star.x() * v.x() + left_star.y() * v.y() + left_star.z() * v.z(); } //! Returns cross product of (complex) vectors. template template inline auto Vec3::cross(const Vec3& v) const { return Vec3x() * v.x())>(y() * v.z() - v.y() * z(), z() * v.x() - v.z() * x(), x() * v.y() - v.x() * y()); } #endif // SWIG // ----------------------------------------------------------------------------- // Functions of this (with no further argument) // ----------------------------------------------------------------------------- template <> inline double R3::magxy() const { return hypot(m_x, m_y); } template <> inline double C3::magxy() const { return sqrt(magxy2()); } template <> inline double R3::mag() const { return std::hypot(m_x, m_y, m_z); } template <> inline double C3::mag() const { return sqrt(mag2()); } template <> inline R3 R3::conj() const { return *this; } template <> inline C3 C3::conj() const { return {std::conj(x()), std::conj(y()), std::conj(z())}; } template <> inline C3 R3::complex() const { return {x(), y(), z()}; } template <> inline C3 C3::complex() const { return *this; } template <> inline R3 R3::real() const { return *this; } template <> inline R3 C3::real() const { return {x().real(), y().real(), z().real()}; } template <> inline R3 R3::unit_or_throw() const { double len = mag(); if (len == 0.0) throw std::runtime_error("Cannot normalize zero vector"); return {x() / len, y() / len, z() / len}; } template <> inline C3 C3::unit_or_throw() const { double len = mag(); if (len == 0.0) throw std::runtime_error("Cannot normalize zero vector"); return {x() / len, y() / len, z() / len}; } template <> inline R3 R3::unit_or_null() const { double len = mag(); if (len == 0.0) return {}; return {x() / len, y() / len, z() / len}; } template <> inline C3 C3::unit_or_null() const { double len = mag(); if (len == 0.0) return {}; return {x() / len, y() / len, z() / len}; } // ----------------------------------------------------------------------------- // Combine two vectors // ----------------------------------------------------------------------------- namespace R3Util { //! Returns polar angle. inline double theta(const R3& a) { return a.x() == 0.0 && a.y() == 0.0 && a.z() == 0.0 ? 0.0 : std::atan2(a.magxy(), a.z()); } inline double phi(const R3& a) { return a.x() == 0.0 && a.y() == 0.0 ? 0.0 : std::atan2(a.y(), a.x()); } inline double cosTheta(const R3& a) { return a.mag() == 0 ? 1 : a.z() / a.mag(); } inline double sin2Theta(const R3& a) { return a.mag2() == 0 ? 0 : a.magxy2() / a.mag2(); } inline double angle(const R3& a, const R3& b) { double cosa = 0; double ptot = a.mag() * b.mag(); if (ptot > 0) { cosa = (a.x() * b.x() + a.y() * b.y() + a.z() * b.z()) / ptot; if (cosa > 1) cosa = 1; if (cosa < -1) cosa = -1; } return std::acos(cosa); } } // namespace R3Util #endif // LIBHEINZ_VECTORS3D_H libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/000077500000000000000000000000001504737157700215065ustar00rootroot00000000000000libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/CMakeLists.txt000066400000000000000000000007461504737157700242550ustar00rootroot00000000000000file(GLOB test_sources "*Test.cpp") if (WIN32) add_compile_options(/wd4068 /wd4623 /wd4625 /wd4626 /wd4710 /wd4711 /wd4820 ) endif() foreach(source_file ${test_sources}) get_filename_component(base_name ${source_file} NAME_WE) add_executable(${base_name} ${source_file} catch2.cpp) target_include_directories(${base_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/inc) add_test(NAME ${base_name} COMMAND ${base_name}) endforeach(source_file) libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/CVectorTest.cpp000066400000000000000000000020561504737157700244220ustar00rootroot00000000000000#include "catch.hpp" #include #include TEST_CASE("CVector:TrivialOperations", "") { R3 vec_k(1., 2., 3.); CHECK(complex_t(3., 0.) == vec_k.complex().z()); C3 vec_c(complex_t(1., 3.), complex_t(2., -5.), complex_t(-3., -4.)); CHECK(complex_t(3., 4.) == -vec_c.z()); CHECK(vec_c.mag() == 8.); } TEST_CASE("CVector:BasicArithmetics", "") { // Dot product defined in Vec3 C3 vec_a(complex_t(1., 0.), complex_t(2., 0.), complex_t(3., 0.)); C3 vec_b(complex_t(2., 0.), complex_t(3., 0.), complex_t(4., 0.)); C3 vec_c(complex_t(1., 1.), complex_t(2., -5.), complex_t(3., 4.)); CHECK(vec_a.dot(vec_b) == complex_t(20., 0)); CHECK(vec_a.dot(vec_c) == complex_t(14., 3.)); CHECK(vec_c.dot(vec_b) == complex_t(20., -3.)); CHECK(vec_a.dot(vec_a) == complex_t(14., 0)); CHECK(vec_c.dot(vec_c) == complex_t(56., 0)); // f = f_re + j*f_im C3 vec_e(1., 2., 3.); C3 vec_f(5., 6., 7.); CHECK(C3(complex_t(1., 5.), complex_t(2., 6), complex_t(3, 7)) == vec_e + I * vec_f); } libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/KVectorTest.cpp000066400000000000000000000100571504737157700244320ustar00rootroot00000000000000#include "catch.hpp" #include TEST_CASE("KVector:BasicMethods", "") { R3 v; CHECK(v.x() == double(0)); CHECK(v.y() == double(0)); CHECK(v.z() == double(0)); R3 v2(1., 2., 3.); CHECK(v2.x() == double(1.)); CHECK(v2.y() == double(2.)); CHECK(v2.z() == double(3.)); v2.setX(10.); v2.setY(20.); v2.setZ(30.); CHECK(v2.x() == double(10.)); CHECK(v2.y() == double(20.)); CHECK(v2.z() == double(30.)); v2 = {1., 2., 3.}; CHECK(v2.x() == double(1.)); CHECK(v2.y() == double(2.)); CHECK(v2.z() == double(3.)); R3 v3(1., 2., 3.); CHECK(v3.mag2() == 1 * 1 + 2 * 2 + 3 * 3); CHECK(v3.mag2() == Approx(v3.mag() * v3.mag()).epsilon(1e-15)); CHECK(v3.magxy2() == 1 * 1 + 2 * 2); CHECK(v3.magxy2() == Approx(v3.magxy() * v3.magxy()).epsilon(1e-15)); CHECK(v3.magxy() == std::sqrt(1 * 1 + 2 * 2)); CHECK(v3.mag() == Approx(std::sqrt(1 * 1 + 2 * 2 + 3 * 3)).epsilon(1e-15)); } TEST_CASE("KVector:BasicArithmetics", "") { // assignment, self assignment, copy constructor R3 v1; R3 v2(v1); CHECK(v2.x() == double(0)); CHECK(v2.y() == double(0)); CHECK(v2.z() == double(0)); v2 = {1., 2., 3.}; CHECK(v2.x() == double(1)); CHECK(v2.y() == double(2)); CHECK(v2.z() == double(3)); R3 v3(v2); CHECK(v3.x() == double(1)); CHECK(v3.y() == double(2)); CHECK(v3.z() == double(3)); R3 v4 = v3; CHECK(v4.x() == double(1)); CHECK(v4.y() == double(2)); CHECK(v4.z() == double(3)); // += R3 a(1., 2., 3.); R3 b(10., 20., 30.); a += b; CHECK(a.x() == double(11)); CHECK(a.y() == double(22)); CHECK(a.z() == double(33)); CHECK(b.x() == double(10)); CHECK(b.y() == double(20)); CHECK(b.z() == double(30)); a = R3(1., 2., 3.); a += a; CHECK(a.x() == double(2.)); CHECK(a.y() == double(4.)); CHECK(a.z() == double(6.)); // -= a = R3(1., 2., 3.); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wself-assign-overloaded" // https://stackoverflow.com/a/57646029/1017348: a pretty stupid warning a -= a; #pragma clang diagnostic pop CHECK(a.x() == double(0.)); CHECK(a.y() == double(0.)); CHECK(a.z() == double(0.)); b = R3(1., 2., 3.); a -= b; CHECK(a.x() == double(-1.)); CHECK(a.y() == double(-2.)); CHECK(a.z() == double(-3.)); // *= and /= with scalar a *= 10.0; CHECK(a.x() == double(-10.)); CHECK(a.y() == double(-20.)); CHECK(a.z() == double(-30.)); a /= 10.; CHECK(a.x() == double(-1.)); CHECK(a.y() == double(-2.)); CHECK(a.z() == double(-3.)); // unary minus a = R3(1., 2., 3.); b = -a; CHECK(a.x() == double(1.)); CHECK(a.y() == double(2.)); CHECK(a.z() == double(3.)); CHECK(b.x() == double(-1.)); CHECK(b.y() == double(-2.)); CHECK(b.z() == double(-3.)); // addition of two vector a = R3(1., 2., 3.); b = R3(10., 20., 30.); R3 c = a + b; CHECK(a.x() == double(1.)); CHECK(a.y() == double(2.)); CHECK(a.z() == double(3.)); CHECK(b.x() == double(10.)); CHECK(b.y() == double(20.)); CHECK(b.z() == double(30.)); CHECK(c.x() == double(11.)); CHECK(c.y() == double(22.)); CHECK(c.z() == double(33.)); // substraction of two vectors c = b - a; CHECK(c.x() == double(9.)); CHECK(c.y() == double(18.)); CHECK(c.z() == double(27.)); // multiplication by a scalar a = {1., 2., 3.}; c = 2 * a * 2; CHECK(a.x() == double(1.)); CHECK(a.y() == double(2.)); CHECK(a.z() == double(3.)); CHECK(c.x() == double(4.)); CHECK(c.y() == double(8.)); CHECK(c.z() == double(12.)); // scalar product of two vectors a = {1., 2., 3.}; b = {10., 10., 10.}; CHECK(a.dot(b) == double(60)); // crossproduct c = a.cross(b); CHECK(a.y() * b.z() - a.z() * b.y() == c.x()); CHECK(a.z() * b.x() - a.x() * b.z() == c.y()); CHECK(a.x() * b.y() - a.y() * b.x() == c.z()); // equality a = {1., 2., 3.}; CHECK(a == R3(1., 2., 3.)); CHECK(a != R3(1., 1., 3.)); } libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/PROVENANCE000066400000000000000000000001051504737157700230650ustar00rootroot00000000000000catch2.hpp is taken from the Arch repository (installed via pacman). libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/RotMatrixTest.cpp000066400000000000000000000067521504737157700250150ustar00rootroot00000000000000#include "catch.hpp" #include #include using Catch::Matchers::WithinAbs; using Catch::Matchers::WithinRel; const double epsilon = 1e-12; using RotMatrix = Rotation3D; #undef M_PI #define M_PI 3.14159265358979323846 const double w0 = M_PI / 5; const double w1 = M_PI / 7; const double w2 = M_PI / 11; const RotMatrix mEul = RotMatrix::EulerZXZ(w0, w1, w2); void InversionTest(const RotMatrix& mRot, const R3& a0) { const RotMatrix mInv = mRot.Inverse(); const R3 a1 = mRot.transformed(a0); const R3 a2 = mInv.transformed(a1); CHECK_THAT(a2.x(), WithinRel(a0.x(), epsilon)); CHECK_THAT(a2.y(), WithinRel(a0.y(), epsilon)); CHECK_THAT(a2.z(), WithinRel(a0.z(), epsilon)); } TEST_CASE("RotMatrixTest:ForthAndBack") { const R3 vector(1.1,2.2,3.3); R3 result; const double angle = 12.375; // Rotating back and forth around X - axis const RotMatrix rotX1 = RotMatrix::AroundX(angle); const RotMatrix rotX2 = RotMatrix::AroundX(-angle); result = rotX2.transformed(rotX1.transformed(vector)); CHECK_THAT(vector.x(), WithinRel(result.x(), epsilon)); CHECK_THAT(vector.y(), WithinRel(result.y(), epsilon)); CHECK_THAT(vector.z(), WithinRel(result.z(), epsilon)); // Rotating back and forth around Y - axis const RotMatrix rotY1 = RotMatrix::AroundY(angle); const RotMatrix rotY2 = RotMatrix::AroundY(-angle); result = rotY2.transformed(rotY1.transformed(vector)); CHECK_THAT(vector.x(), WithinRel(result.x(), epsilon)); CHECK_THAT(vector.y(), WithinRel(result.y(), epsilon)); CHECK_THAT(vector.z(), WithinRel(result.z(), epsilon)); // Rotating back and forth around Z - axis const RotMatrix rotZ1 = RotMatrix::AroundZ(angle); const RotMatrix rotZ2 = RotMatrix::AroundZ(-angle); result = rotZ2.transformed(rotZ1.transformed(vector)); CHECK_THAT(vector.x(), WithinRel(result.x(), epsilon)); CHECK_THAT(vector.y(), WithinRel(result.y(), epsilon)); CHECK_THAT(vector.z(), WithinRel(result.z(), epsilon)); } TEST_CASE("RotMatrixTest:RotateY") { const R3 a(std::sqrt(3.) / 2., 2., 0.5); const RotMatrix m2 = RotMatrix::AroundY(M_PI / 6.); const R3 v = m2.transformed(a); CHECK_THAT(v.x(), WithinRel(1.0, epsilon)); CHECK(v.y() == 2.0); CHECK_THAT(v.z(), WithinAbs(0.0, 1e-9)); } TEST_CASE("RotMatrixTest:RotateZ") { const R3 a(0.5, std::sqrt(3.) / 2., 2.); const RotMatrix m3 = RotMatrix::AroundZ(M_PI / 6.); const R3 v = m3.transformed(a); CHECK_THAT(v.x(), WithinAbs(0.0, 1e-9)); CHECK_THAT(v.y(), WithinRel(1.0, epsilon)); CHECK(v.z() == 2.0); const RotMatrix m4 = m3.Inverse(); const R3 w = m4.transformed(v); CHECK_THAT(w.x(), WithinRel(a.x(), epsilon)); CHECK_THAT(w.y(), WithinRel(a.y(), epsilon)); CHECK_THAT(w.z(), WithinRel(a.z(), epsilon)); } TEST_CASE("RotMatrixTest:RecoverEulerAngles") { auto angles = mEul.zxzEulerAngles(); CHECK_THAT(angles[0], WithinRel(w0, epsilon)); CHECK_THAT(angles[1], WithinRel(w1, epsilon)); CHECK_THAT(angles[2], WithinRel(w2, epsilon)); } TEST_CASE("RotMatrixTest:InvertXMatrix") { InversionTest(RotMatrix::AroundX(M_PI / 7.), R3(4, 5, 6)); } TEST_CASE("RotMatrixTest:InvertYMatrix") { InversionTest(RotMatrix::AroundY(M_PI / 7.), R3(4, 5, 6)); } TEST_CASE("RotMatrixTest:InvertZMatrix") { InversionTest(RotMatrix::AroundZ(M_PI / 7.), R3(4, 5, 6)); } TEST_CASE("RotMatrixTest:InvertEulerMatrix") { InversionTest(mEul, R3(3, 4, 7)); } libheinz-v3.0.0-31609718cca15633814660b4ad85b97a397f1912/test/catch.hpp000066400000000000000000024035741504737157700233200ustar00rootroot00000000000000/* * Catch v2.13.9 * Generated: 2022-04-12 22:37:23.260201 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly * Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved. * * Distributed under the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED #define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED // start catch.hpp #define CATCH_VERSION_MAJOR 2 #define CATCH_VERSION_MINOR 13 #define CATCH_VERSION_PATCH 9 #ifdef __clang__ # pragma clang system_header #elif defined __GNUC__ # pragma GCC system_header #endif // start catch_suppress_warnings.h #ifdef __clang__ # ifdef __ICC // icpc defines the __clang__ macro # pragma warning(push) # pragma warning(disable: 161 1682) # else // __ICC # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wpadded" # pragma clang diagnostic ignored "-Wswitch-enum" # pragma clang diagnostic ignored "-Wcovered-switch-default" # endif #elif defined __GNUC__ // Because REQUIREs trigger GCC's -Wparentheses, and because still // supported version of g++ have only buggy support for _Pragmas, // Wparentheses have to be suppressed globally. # pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunused-variable" # pragma GCC diagnostic ignored "-Wpadded" #endif // end catch_suppress_warnings.h #if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) # define CATCH_IMPL # define CATCH_CONFIG_ALL_PARTS #endif // In the impl file, we want to have access to all parts of the headers // Can also be used to sanely support PCHs #if defined(CATCH_CONFIG_ALL_PARTS) # define CATCH_CONFIG_EXTERNAL_INTERFACES # if defined(CATCH_CONFIG_DISABLE_MATCHERS) # undef CATCH_CONFIG_DISABLE_MATCHERS # endif # if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) # define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER # endif #endif #if !defined(CATCH_CONFIG_IMPL_ONLY) // start catch_platform.h // See e.g.: // https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html #ifdef __APPLE__ # include # if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \ (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1) # define CATCH_PLATFORM_MAC # elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) # define CATCH_PLATFORM_IPHONE # endif #elif defined(linux) || defined(__linux) || defined(__linux__) # define CATCH_PLATFORM_LINUX #elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) # define CATCH_PLATFORM_WINDOWS #endif // end catch_platform.h #ifdef CATCH_IMPL # ifndef CLARA_CONFIG_MAIN # define CLARA_CONFIG_MAIN_NOT_DEFINED # define CLARA_CONFIG_MAIN # endif #endif // start catch_user_interfaces.h namespace Catch { unsigned int rngSeed(); } // end catch_user_interfaces.h // start catch_tag_alias_autoregistrar.h // start catch_common.h // start catch_compiler_capabilities.h // Detect a number of compiler features - by compiler // The following features are defined: // // CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? // CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? // CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? // CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled? // **************** // Note to maintainers: if new toggles are added please document them // in configuration.md, too // **************** // In general each macro has a _NO_ form // (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature. // Many features, at point of detection, define an _INTERNAL_ macro, so they // can be combined, en-mass, with the _NO_ forms later. #ifdef __cplusplus # if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) # define CATCH_CPP14_OR_GREATER # endif # if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) # define CATCH_CPP17_OR_GREATER # endif #endif // Only GCC compiler should be used in this block, so other compilers trying to // mask themselves as GCC should be ignored. #if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) # define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) #endif #if defined(__clang__) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) // As of this writing, IBM XL's implementation of __builtin_constant_p has a bug // which results in calls to destructors being emitted for each temporary, // without a matching initialization. In practice, this can result in something // like `std::string::~string` being called on an uninitialized value. // // For example, this code will likely segfault under IBM XL: // ``` // REQUIRE(std::string("12") + "34" == "1234") // ``` // // Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented. # if !defined(__ibmxl__) && !defined(__CUDACC__) # define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */ # endif # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) # define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) # define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) #endif // __clang__ //////////////////////////////////////////////////////////////////////////////// // Assume that non-Windows platforms support posix signals by default #if !defined(CATCH_PLATFORM_WINDOWS) #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS #endif //////////////////////////////////////////////////////////////////////////////// // We know some environments not to support full POSIX signals #if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__) #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS #endif #ifdef __OS400__ # define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS # define CATCH_CONFIG_COLOUR_NONE #endif //////////////////////////////////////////////////////////////////////////////// // Android somehow still does not support std::to_string #if defined(__ANDROID__) # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING # define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE #endif //////////////////////////////////////////////////////////////////////////////// // Not all Windows environments support SEH properly #if defined(__MINGW32__) # define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH #endif //////////////////////////////////////////////////////////////////////////////// // PS4 #if defined(__ORBIS__) # define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE #endif //////////////////////////////////////////////////////////////////////////////// // Cygwin #ifdef __CYGWIN__ // Required for some versions of Cygwin to declare gettimeofday // see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin # define _BSD_SOURCE // some versions of cygwin (most) do not support std::to_string. Use the libstd check. // https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 # if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING # endif #endif // __CYGWIN__ //////////////////////////////////////////////////////////////////////////////// // Visual C++ #if defined(_MSC_VER) // Universal Windows platform does not support SEH // Or console colours (or console at all...) # if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) # define CATCH_CONFIG_COLOUR_NONE # else # define CATCH_INTERNAL_CONFIG_WINDOWS_SEH # endif # if !defined(__clang__) // Handle Clang masquerading for msvc // MSVC traditional preprocessor needs some workaround for __VA_ARGS__ // _MSVC_TRADITIONAL == 0 means new conformant preprocessor // _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor # if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) # define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR # endif // MSVC_TRADITIONAL // Only do this if we're not using clang on Windows, which uses `diagnostic push` & `diagnostic pop` # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) # endif // __clang__ #endif // _MSC_VER #if defined(_REENTRANT) || defined(_MSC_VER) // Enable async processing, as -pthread is specified or no additional linking is required # define CATCH_INTERNAL_CONFIG_USE_ASYNC #endif // _MSC_VER //////////////////////////////////////////////////////////////////////////////// // Check if we are compiled with -fno-exceptions or equivalent #if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) # define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED #endif //////////////////////////////////////////////////////////////////////////////// // DJGPP #ifdef __DJGPP__ # define CATCH_INTERNAL_CONFIG_NO_WCHAR #endif // __DJGPP__ //////////////////////////////////////////////////////////////////////////////// // Embarcadero C++Build #if defined(__BORLANDC__) #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN #endif //////////////////////////////////////////////////////////////////////////////// // Use of __COUNTER__ is suppressed during code analysis in // CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly // handled by it. // Otherwise all supported compilers support COUNTER macro, // but user still might want to turn it off #if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L ) #define CATCH_INTERNAL_CONFIG_COUNTER #endif //////////////////////////////////////////////////////////////////////////////// // RTX is a special version of Windows that is real time. // This means that it is detected as Windows, but does not provide // the same set of capabilities as real Windows does. #if defined(UNDER_RTSS) || defined(RTX64_BUILD) #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH #define CATCH_INTERNAL_CONFIG_NO_ASYNC #define CATCH_CONFIG_COLOUR_NONE #endif #if !defined(_GLIBCXX_USE_C99_MATH_TR1) #define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER #endif // Various stdlib support checks that require __has_include #if defined(__has_include) // Check if string_view is available and usable #if __has_include() && defined(CATCH_CPP17_OR_GREATER) # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW #endif // Check if optional is available and usable # if __has_include() && defined(CATCH_CPP17_OR_GREATER) # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) // Check if byte is available and usable # if __has_include() && defined(CATCH_CPP17_OR_GREATER) # include # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0) # define CATCH_INTERNAL_CONFIG_CPP17_BYTE # endif # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) // Check if variant is available and usable # if __has_include() && defined(CATCH_CPP17_OR_GREATER) # if defined(__clang__) && (__clang_major__ < 8) // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 // fix should be in clang 8, workaround in libstdc++ 8.2 # include # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) # define CATCH_CONFIG_NO_CPP17_VARIANT # else # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) # else # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT # endif // defined(__clang__) && (__clang_major__ < 8) # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) #endif // defined(__has_include) #if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) # define CATCH_CONFIG_COUNTER #endif #if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH) # define CATCH_CONFIG_WINDOWS_SEH #endif // This is set by default, because we assume that unix compilers are posix-signal-compatible by default. #if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) # define CATCH_CONFIG_POSIX_SIGNALS #endif // This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions. #if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR) # define CATCH_CONFIG_WCHAR #endif #if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) # define CATCH_CONFIG_CPP11_TO_STRING #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL) # define CATCH_CONFIG_CPP17_OPTIONAL #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) # define CATCH_CONFIG_CPP17_STRING_VIEW #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT) # define CATCH_CONFIG_CPP17_VARIANT #endif #if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) # define CATCH_CONFIG_CPP17_BYTE #endif #if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) # define CATCH_INTERNAL_CONFIG_NEW_CAPTURE #endif #if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE) # define CATCH_CONFIG_NEW_CAPTURE #endif #if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) # define CATCH_CONFIG_DISABLE_EXCEPTIONS #endif #if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN) # define CATCH_CONFIG_POLYFILL_ISNAN #endif #if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) # define CATCH_CONFIG_USE_ASYNC #endif #if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE) # define CATCH_CONFIG_ANDROID_LOGWRITE #endif #if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) # define CATCH_CONFIG_GLOBAL_NEXTAFTER #endif // Even if we do not think the compiler has that warning, we still have // to provide a macro that can be used by the code. #if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION) # define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION #endif #if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) # define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION #endif #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS #endif // The goal of this macro is to avoid evaluation of the arguments, but // still have the compiler warn on problems inside... #if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN) # define CATCH_INTERNAL_IGNORE_BUT_WARN(...) #endif #if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS #elif defined(__clang__) && (__clang_major__ < 5) # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS #endif #if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) #define CATCH_TRY if ((true)) #define CATCH_CATCH_ALL if ((false)) #define CATCH_CATCH_ANON(type) if ((false)) #else #define CATCH_TRY try #define CATCH_CATCH_ALL catch (...) #define CATCH_CATCH_ANON(type) catch (type) #endif #if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) #define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #endif // end catch_compiler_capabilities.h #define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line #define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) #ifdef CATCH_CONFIG_COUNTER # define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) #else # define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) #endif #include #include #include // We need a dummy global operator<< so we can bring it into Catch namespace later struct Catch_global_namespace_dummy {}; std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); namespace Catch { struct CaseSensitive { enum Choice { Yes, No }; }; class NonCopyable { NonCopyable( NonCopyable const& ) = delete; NonCopyable( NonCopyable && ) = delete; NonCopyable& operator = ( NonCopyable const& ) = delete; NonCopyable& operator = ( NonCopyable && ) = delete; protected: NonCopyable(); virtual ~NonCopyable(); }; struct SourceLineInfo { SourceLineInfo() = delete; SourceLineInfo( char const* _file, std::size_t _line ) noexcept : file( _file ), line( _line ) {} SourceLineInfo( SourceLineInfo const& other ) = default; SourceLineInfo& operator = ( SourceLineInfo const& ) = default; SourceLineInfo( SourceLineInfo&& ) noexcept = default; SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default; bool empty() const noexcept { return file[0] == '\0'; } bool operator == ( SourceLineInfo const& other ) const noexcept; bool operator < ( SourceLineInfo const& other ) const noexcept; char const* file; std::size_t line; }; std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); // Bring in operator<< from global namespace into Catch namespace // This is necessary because the overload of operator<< above makes // lookup stop at namespace Catch using ::operator<<; // Use this in variadic streaming macros to allow // >> +StreamEndStop // as well as // >> stuff +StreamEndStop struct StreamEndStop { std::string operator+() const; }; template T const& operator + ( T const& value, StreamEndStop ) { return value; } } #define CATCH_INTERNAL_LINEINFO \ ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) // end catch_common.h namespace Catch { struct RegistrarForTagAliases { RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); }; } // end namespace Catch #define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION // end catch_tag_alias_autoregistrar.h // start catch_test_registry.h // start catch_interfaces_testcase.h #include namespace Catch { class TestSpec; struct ITestInvoker { virtual void invoke () const = 0; virtual ~ITestInvoker(); }; class TestCase; struct IConfig; struct ITestCaseRegistry { virtual ~ITestCaseRegistry(); virtual std::vector const& getAllTests() const = 0; virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; }; bool isThrowSafe( TestCase const& testCase, IConfig const& config ); bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); std::vector const& getAllTestCasesSorted( IConfig const& config ); } // end catch_interfaces_testcase.h // start catch_stringref.h #include #include #include #include namespace Catch { /// A non-owning string class (similar to the forthcoming std::string_view) /// Note that, because a StringRef may be a substring of another string, /// it may not be null terminated. class StringRef { public: using size_type = std::size_t; using const_iterator = const char*; private: static constexpr char const* const s_empty = ""; char const* m_start = s_empty; size_type m_size = 0; public: // construction constexpr StringRef() noexcept = default; StringRef( char const* rawChars ) noexcept; constexpr StringRef( char const* rawChars, size_type size ) noexcept : m_start( rawChars ), m_size( size ) {} StringRef( std::string const& stdString ) noexcept : m_start( stdString.c_str() ), m_size( stdString.size() ) {} explicit operator std::string() const { return std::string(m_start, m_size); } public: // operators auto operator == ( StringRef const& other ) const noexcept -> bool; auto operator != (StringRef const& other) const noexcept -> bool { return !(*this == other); } auto operator[] ( size_type index ) const noexcept -> char { assert(index < m_size); return m_start[index]; } public: // named queries constexpr auto empty() const noexcept -> bool { return m_size == 0; } constexpr auto size() const noexcept -> size_type { return m_size; } // Returns the current start pointer. If the StringRef is not // null-terminated, throws std::domain_exception auto c_str() const -> char const*; public: // substrings and searches // Returns a substring of [start, start + length). // If start + length > size(), then the substring is [start, size()). // If start > size(), then the substring is empty. auto substr( size_type start, size_type length ) const noexcept -> StringRef; // Returns the current start pointer. May not be null-terminated. auto data() const noexcept -> char const*; constexpr auto isNullTerminated() const noexcept -> bool { return m_start[m_size] == '\0'; } public: // iterators constexpr const_iterator begin() const { return m_start; } constexpr const_iterator end() const { return m_start + m_size; } }; auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { return StringRef( rawChars, size ); } } // namespace Catch constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { return Catch::StringRef( rawChars, size ); } // end catch_stringref.h // start catch_preprocessor.hpp #define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__ #define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__))) #define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__))) #ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__ // MSVC needs more evaluations #define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__))) #define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__)) #else #define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__) #endif #define CATCH_REC_END(...) #define CATCH_REC_OUT #define CATCH_EMPTY() #define CATCH_DEFER(id) id CATCH_EMPTY() #define CATCH_REC_GET_END2() 0, CATCH_REC_END #define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2 #define CATCH_REC_GET_END(...) CATCH_REC_GET_END1 #define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT #define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0) #define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next) #define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) #define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ ) #define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) #define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) #define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ ) #define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) // Applies the function macro `f` to each of the remaining parameters, inserts commas between the results, // and passes userdata as the first parameter to each invocation, // e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c) #define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) #define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) #define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param) #define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ #define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ #define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF #define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ #define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) #else // MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF #define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) #define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ #define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) #endif #define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ #define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) #define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__) #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) #define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) #else #define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) #define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) #endif #define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) #define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) #define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) #define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) #define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) #define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) #define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) #define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) #define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) #define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) #define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) #define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) #define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N #define INTERNAL_CATCH_TYPE_GEN\ template struct TypeList {};\ template\ constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ template class...> struct TemplateTypeList{};\ template class...Cs>\ constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ template\ struct append;\ template\ struct rewrap;\ template class, typename...>\ struct create;\ template class, typename>\ struct convert;\ \ template \ struct append { using type = T; };\ template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ template< template class L1, typename...E1, typename...Rest>\ struct append, TypeList, Rest...> { using type = L1; };\ \ template< template class Container, template class List, typename...elems>\ struct rewrap, List> { using type = TypeList>; };\ template< template class Container, template class List, class...Elems, typename...Elements>\ struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ \ template