pax_global_header00006660000000000000000000000064131627362660014526gustar00rootroot0000000000000052 comment=8e21a638727567914536f4a4a63aa5fa204c40f0 mpmath-1.0.0/000077500000000000000000000000001316273626600130125ustar00rootroot00000000000000mpmath-1.0.0/.gitattributes000066400000000000000000000000531316273626600157030ustar00rootroot00000000000000* text=auto *.py diff=python text mpmath-1.0.0/.gitignore000066400000000000000000000017251316273626600150070ustar00rootroot00000000000000# This file tells git what files to ignore (e.g., you won't see them as # untracked with "git status"). Add anything to it that can be cleared # without any worry (e.g., by "git clean -Xdf"), because it can be # regenerated. Lines beginning with # are comments. You can also ignore # files on a per-repository basis by modifying the core.excludesfile # configuration option (see "git help config"). If you need to make git # track a file that is ignored for some reason, you have to use # "git add -f". See "git help gitignore" for more information. # Regular Python bytecode file *.pyc # Optimized Python bytecode file *.pyo # Vim's swap files *.sw[op] # Generated files from Jython *$py.class # File generated by setup.py using MANIFEST.in MANIFEST # Generated by ctags (used to improve autocompletion in vim) tags my/ # Files generated by setup.py dist/ build/ # Tox files .tox/ # Mac OS X Junk .DS_Store # Backup files *~ .cache/ .coverage doc/source/_build/ mpmath-1.0.0/.travis.yml000066400000000000000000000002711316273626600151230ustar00rootroot00000000000000language: python sudo: false python: - 2.6 - 2.7 - 3.2 - 3.3 - 3.4 - 3.5 - "pypy" install: - pip install pep8 script: - pep8 - py.test notifications: email: false mpmath-1.0.0/CHANGES000066400000000000000000001175211316273626600140140ustar00rootroot00000000000000--1.0.0-- Released September 27, 2017 * Bumped to major version number for 10 year anniversary * Added module for inverse Laplace transforms, including the top level function invertlaplace() as well as several different algorithms (Talbot, Gaver-Stehfest and de Hoog) implemented in mpmath.calculus.inverselaplace (Kris Kuhlman) * Fixed bugs in elliprg() giving incorrect values for certain input * Fixed wrong degree 1 nodes for Gaussian quadrature * Made make acot(0) and acoth(0) return a finite result * Fixed sieved zeta sum not being used in Python 3, and added cutoff for sieved zeta sum on 32-bit systems when too much memory would be used * Fixed zeta(0,0.5) to return correct value instead of raising NoConvergence exception * Added detection of exact zeros in gammainc(), in particular fixing NoConvergence error for gammainc(3,-1+1j) * Fixed wrong values from besseli() due to improper internal precision * Fixed bessely(0,1j) to return complex nan instead of raising NameError (Paul Masson) * Changed float() and complex() applied to an mpf or mpc to use rounding to nearest (or the context rounding mode) instead truncating * Fix imaginary part of gammainc(n,x), n negative odd int, x < 0 * Added alternative "phase" color scheme to cplot() * Better error message for int(inf) or int(nan) (Aaron Meurer) * Fixed polyroots() with error=True * Added support to pass optional initial values to polyroots() (Michael Kagalenko) * Rewrote the Python major version selection to make it work if something else has redefined xrange (Arne Brys) * Switched documentation formula rendering to MathJax (Sergey B Kirpichev) * Fixed documentation TeX build (Sergey B Kirpichev) * Added PEP8 conformity testing (Sergey B Kirpichev) * Various fixes for the test code and test infrastructure on different platforms and Python versions (Sergey B Kirpichev) * Fixed module paths in setup.py (Aaron Meurer) * Documented more options for methods such as nstr() and hyper() * Miscellaneous corrections to the documentation (various) --0.19-- Released June 10, 2014 * Moved issue tracking to github and the main website to mpmath.org. Several URLs and issue numbers were updated in the documentation (Sergey B Kirpichev) * Enabled automatic testing with Travis CI (Sergey B Kirpichev) * Fixed many doctest issues (Sergey B Kirpichev) * Converted line endings to LF (Ondrej Certik) * Made polyroots() more robust (Ondrej Certik) --0.18-- Released December 31, 2013 Linear algebra: * added qr() for matrix QR factorization (contributed by Ken Allen) * added functions eigsy(), eighe(), eig() to compute matrix eigenvalues (contributed by Timo Hartmann) * added functions svd(), svd_r(), svd_c() for singular value decomposition of matrices (contributed by Timo Hartmann) * added calculation of Gaussian quadrature rules for various weight functions (contributed by Timo Hartmann) * improved precision selection in exp_pade() (contributed by Mario Pernici) Special functions: * fixed ellippi() to return an inf instead of raising an exception * fixed a crash in zeta() with huge arguments * added functions for computing Stirling numbers (stirling1(), stirling2()) * improved the computation of zeros of zeta at high precision (contributed by Juan Arias de Reyna) * fixed zeta(-x) raising an exception for tiny x * recognize when lerchphi() can call zeta() or polylog(), handling those cases faster Compatibility: * fixed gmpy2 compatibility issues (contributed by Case Van Horsen) * better solutions for python 2/3 compatibility, using Benjamin Peterson's six.py * fixes to allow mpmath to run in non-sage mode when sage is available * support abstract base classes (contributed by Stefan Krastanov) * use new-style classes to improve pypy performance Other: * added Levin, Sidi-S and Cohen/Villegas/Zagier series transformations (contributed by Timo Hartmann) * added isfinite() utility function * fixed a problem with bisection root-finding * fixed several documentation errors * corrected number of coefficients returned by diffs() with method='quad' * fixed repr(constant) being slow at high precision * made intervals hashable --0.17-- Released February 1, 2011 Compatibility: * Python 3 is now supported * Dropped Python 2.4 compatibility * Fixed Python 2.5 compatibility in matrix slicing code * Implemented Python 3.2-compatible hashing, making mpmath numbers hash compatible with extremely large integers and with fractions in Python versions >= 3.2 (contributed by Case Vanhorsen) Special functions: * Implemented the von Mangoldt function (mangoldt()) * Implemented the "secondary zeta function" (secondzeta()) (contributed by Juan Arias de Reyna). * Implemented zeta zero counting (nzeros()) and the Backlund S function (backlunds()) (contributed by Juan Arias de Reyna) * Implemented derivatives of order 1-4 for siegelz() and siegeltheta() (contributed by Juan Arias de Reyna) * Improved Euler-Maclaurin summation for zeta() to give more accurate results in the right half-plane when the reflection formula cannot be used * Implemented the Lerch transcendent (lerchphi()) * Fixed polygamma function to return a complex NaN at complex infinity or NaN, instead of raising an unrelated exception. --0.16-- Released September 24, 2010 Backends and distribution: * Added Sage hooks for Cython versions of exp, ln, cos, sin, hypergeometric series, and some related functions * Fixed imports for gmpy2 compatibility (contributed by Case Van Horsen) * Removed documentation from main mpmath package to save space (a separate tar.gz file is now provided for the documentation sources) * Fixed matplotlib version detection * Converted files to Unix line endings Special functions: * Started adding plots of special functions to the documentation * Added Anger and Weber functions (angerj(), webere()) * Added Lommel functions (lommels1(), lommels2()) * Added interval versions of gamma(), loggamma(), rgamma() and factorial() * Rewritten Airy functions to improve speed and accuracy * Support for arbitrary-order derivatives of airyai(), airybi() * Added Airy function zeros (airyaizero(), airybizero()) * Added Scorer functions (scorergi(), scorerhi()) * Added computation of Bessel function zeros and Bessel function derivative zeros (besseljzero(), besselyzero()) * Fixed besselj(mpc(n), z) * Rewritten lambertw() to fix various subtle bugs and robustly handle numerical difficulties near branch cuts and branch points. * Fixed fp.lambertw() to behave the same on branch cuts on systems with and without signed-zero floats * Added Carlson symmetric incomplete elliptic integrals (elliprf(), elliprc(), elliprj(), elliprd(), elliprg()) * Added Legendre incomplete elliptic integrals (ellipf(), ellippi(), ellipe() with two arguments) * Implemented Parabolic cylinder functions (pcfd(), pcfu(), pcfv(), pcfw()) * Implemented Euler-Maclaurin summation for hypergeometric functions of order (p,p-1) to support evaluation with z close to 1 in remaining cases * Fixed a bug in hypergeometric series summation, causing occasional inaccurate results and incorrect detection of zeros * Fixed qfrom(m=...) Calculus: * Implemented generators diffs_exp(), diffs_prod() for composing derivatives * Implemented Abel-Plana summation for infinite series (sumap()) Basic arithmetic and functions: * Implemented matrix slice indexing, supporting submatrix extraction and assignment (contributed by Ioannis Tziakos) * Added missing constant fp.glaisher * Fixed a bug preventing internal rational numbers from being hashable * Fixed bug in isnpint() * Fixed a bug in cos_sin() for pure imaginary argument * Slightly improved performance for elementary functions of pure real or pure imaginary mpc inputs * Fixed plot() with real-valued mpc instances * Fixed cplot() to work with endpoints of other type than float/int --0.15-- Released June 6, 2010 Basic transcendental functions: * Reimplemented all elementary functions except log, reducing overhead and giving asymptotic speedups at high precision * Reimplemented gamma() and loggamma(), improving speed and fixing accuracy in corner cases * Added rgamma() (reciprocal gamma function) * Added a stress test suite for the gamma function * Provided top-level functions cos_sin() and cospi_sinpi() for fast simultaneous computation Riemann zeta function: * New zetazeros() implementation, supporting arbitrarily large indices (contributed by Juan Arias de Reyna) * Tuned algorithm selection in zeta() for complex arguments (contributed by Juan Arias de Reyna) * Accelerated computation of zeta function series using sieving Special functions: * Added qfrom(), qbarfrom(), mfrom(), kfrom(), taufrom() for elliptic argument conversion * Merged jsn(), jcn(), jdn() -> ellipfun() and generalized it to compute all 12 Jacobi elliptic functions * Implemented the Klein j-invariant (kleinj()) * Implemented the q-Pochhammer symbol (qp()) * Implemented q-factorial (qfac()) and q--gamma (qgamma()) * Implemented q-hypergeometric series (qhyper()) * Implemented bilateral hypergeometric series (bihyper()) * Implemented Appell 2D hypergeometric series F2-F4 (appellf2()-appellf4()) * Implemented generalized 2D hypergeometric series (hyper2d()) * Fixed gammainc() for integer-valued complex argument (contributed by Juan Arias de Reyna) * Fixed asymptotic expansion of hyp1f1() (contributed by Juan Arias de Reyna) Numerical calculus: * Added support for multidimensional series in nsum() * Made nprod() faster by default by extrapolating directly instead of calling nsum() * Changed some options for diff()/diffs() * Made taylor() chop tiny coefficients by default * Added support for partial derivatives in diff() Interval arithmetic: * All interval arithmetic functionality moved to a separate context namespace (iv) * Preliminary support for complex intervals (iv.mpc) * Fixed interval cos/sin to support intervals overlapping zeros/extreme points * Implemented interval atan2 * Implemented exp/log/cos/sin for complex intervals * Some other interface changes to interval code Utility functions: * Made chop() use relative rather than absolute tolerance for real/imaginary parts * Optimized floor(), ceil(), isinf(), isnan(), isint() * Implemented nint(), frac(), isnormal() * Fixed and documented semantics for isinf(), isin(), isnan() * Added utility functions autoprec(), maxcalls(), memoize() Miscellaneous tweaks and fixes: * Support complex conjugation in fdot() * Added support for Cholesky decomposition of complex matrices * Fixed a small precision bug in linear algebra functions * Suppress NoConvergence exception when plotting * Removed some dirty code to improve PyPy compatibility * Fixed plotting to work with mpmath numbers in the interval specification * Fixed fp arithmetic on systems where math.log and math.sqrt return NaN instead of raising an exception * Fixed fp.conj for Python 2.4 and 2.5 * Fixed quadrature to work with reversed infinite intervals such as [0,-inf] * Renamed modf() -> fmod() for consistency --0.14-- Released February 5, 2010 General changes: * Fully separated the code into "low-level" and "high-level", permitting the use of alternative contexts (the mpmath.mp object provides the default implementation) * Implemented a context for fast double-precision arithmetic using Python types (mpmath.fp) * Implemented hooks for importing a faster version of mp arithmetic from Sage * Implemented optimized fp versions of certain functions (including erf, erfc, gamma, digamma, ei, e1) * Renamed and reorganized various internal modules and methods (including merging low-level modules into mpmath.libmp). This should not affect most external code using top-level imports. Plotting: * Implemented splot() for 3D surface plots (contributed by Jorn Baayen) * Permit calling plot functions with custom axes (contributed by Jorn Baayen) Matrices: * Fixed lu_solve for overdetermined systems (contributed by Vinzent Steinberg) * Added conjugate matrix transpose (contributed by Vinzent Steinberg) * Implemented matrix functions (expm, cosm, sinm, sqrtm, logm, powm) Miscellaneous: * Prettier printing of numbers with leading zeros at small precisions * Made nstr pass on kwargs, permitting more formatting options * Fixed wrong directed rounding of addition of numbers with large magnitude differences * Fixed several docstring typos (contributed by Chris Smith) * Fixed a bug that prevented caching of quadrature nodes to work optimally. Special functions: * Implemented fast evaluation for large imaginary heights of the Riemann zeta function, Z function and derived functions using the Riemann-Siegel (contributed by Juan Arias de Reyna) * Unified the zeta() and hurwitz() functions, automatically selecting a fast algorithm * Improved altzeta() to fall back to zeta() for large arguments * Fixed accuracy of zeta(s) for s ~= 1 * Implemented exact evaluation of Euler numbers (contributed by Juan Arias de Reyna) * Implemented numerical evaluation of Euler numbers and Euler polynomials (eulernum(), eulerpoly()) * Fixed bernpoly() and eulerpoly() to compute accurate values for large parameters * Fixed accuracy problems for hypergeometric functions with large parameters * Faster evaluation of hypergeometric series using on-the-fly code generation * Optimized hypercomb to detect certain zero terms symbolically * Removed the djtheta function (jtheta() accepts a derivative parameter) * Implemented li(x, offset=True) to compute the offset logarithmic integral * Fixed wrong branch in Lambert W function for certain complex inputs * Implemented the reflection formula for the Barnes G-function, superfactorials, hyperfactorials, permitting large arguments in the left half-plane * Implemented analytic continuation to |z| >= 1 for hypergeometric functions pFq with p=q+1; added hyp3f2() * Implemented Borel summation of divergent pFq functions with p > q+1 * Implemented automatic degree reduction of hypergeometric functions with repeated parameters * Added convenience functions expj(), expjpi() * Use Mathematica's convention for the continuation of the Meijer G-function * Added phase(), polar(), rect() functions for compatibility with the Python 2.6 cmath module * Implemented spherical harmonics (spherharm()) * Optimized ci(), si(), chi(), shi() for complex arguments by evaluating them in terms of ei() * Optimized hyp2f1 for z ~= -1 --0.13-- Released August 13, 2009 New special functions: * The generalized exponential integral E_n (expint(), e1() for E_1) * The generalized incomplete beta function (betainc()) * Whittaker functions (whitm(), whitw()) * Struve functions (struveh(), struvel()) * Kelvin functions (ber(), bei(), ker(), kei()) * Cyclotomic polynomials (cyclotomic()) * The Meijer G-function (meijerg()) * Clausen functions (clsin(), clcos()) * The Appell F1 hypergeometric function of two variables (appellf1()) * The Hurwitz zeta function, with nth order derivatives (hurwitz()) * Dirichlet L-series (dirichlet()) * Coulomb wave functions (coulombf(), coulombg(), coulombc()) * Associated Legendre functions of 1st and 2nd kind (legenp(), legenq()) * Hermite polynomials (hermite()) * Gegenbauer polynomials (gegenbauer()) * Associated Laguerre polynomials (laguerre()) * Hypergeometric functions hyp1f2(), hyp2f2(), hyp2f3(), hyp2f0(), hyperu() Evaluation of hypergeometric functions: * Added the function hypercomb() for evaluating expressions containing hypergeometric series, with automatic handling of limits * The available hypergeometric series (of orders up to and including 2F3) implement asymptotic expansions with respect to the last argument z, allowing fast and accurate evaluation anywhere in the complex plane. A massive number of functions, including Bessel functions, error functions, etc., have been updated to take advantage of this to support fast and accurate evaluation anywhere in the complex plane. * Fixed hyp2f1 to handle z close to and on the unit circle (supporting evaluation anywhere in the complex plane) * hyper() handles the 0F0 and 1F0 cases exactly * hyper() eventually raises NoConvergence instead of getting stuck in an infinite loop if given a divergent or extremely slowly convergent series Other improvements and bug fixes to special functions: * gammainc is much faster for large arguments and avoids catastrophic cancellation * Implemented specialized code for ei(x), e1(x), expint(n,x) and gammainc(n,x) for small integers n, making evaluation much faster * Extended the domain of polylog * Fixed accuracy for asin(x) near x = 1 * Fast evaluation of Bernoulli polynomials for large z * Fixed Jacobi polynomials to handle some poles * Some Bessel functions support computing nth order derivatives * A set of "torture tests" for special functions is available as tests/torture.py Other: * Implemented the differint() function for fractional differentiaton / iterated integration * Added functions fadd, fsub, fneg, fmul, fdiv for high-level arithmetic with controllable precision and rounding * Added the function mag() for quick order-of-magnitude estimates of numbers * Implemented powm1() for accurate calculation of x^y-1 * Improved speed and accuracy for raising a pure imaginary number to an integer power * nthroot() renamed to root(); root() optionally computes any of the non-principal roots of a number * Implemented unitroots() for generating all (primitive) roots of unity * Added the mp.pretty option for nicer repr output --0.12-- Released June 9, 2009 General * It is now possible to create multiple context objects and use context-local methods instead of global state/functions (e.g. mp2=mp.clone(); mp2.dps=50; mp2.cos(3)). Not all functions have been converted to context methods, and there are some bugs, so this feature is currently experimental. * If mpmath is installed in Sage 4.0 or later, mpmath will now use sage.Integer instead of Python long internally. * Removed instances of old-style integer division from the codebase. * runtests.py can be run with -coverage to generate coverage statistics. Types and basic arithmetic * Fixed comparison with -inf. * Changed repr format of the mpi interval type to make eval(repr(x)) == x. * Improved printing of intervals, with configurable output format (contributed by Vinzent Steinberg based on code by Don Peterson). * Intervals supported by mpmathify() and nstr() (contributed by Vinzent Steinberg). * mpc is now hashable. * Added more formatting options to the internal function to_str. * Faster pure-Python square root. * Fix trailing whitespace giving wrong values in str->mpf conversion. Calculus * Fixed nsum() with Euler-Maclaurin summation which would previously ignore the starting index and sum from n=1. * Implemented Newton's method for findroot() (contributed by Vinzent Steinberg). Linear algebra * Fixed LU_decomp() to recognize singular matrices (contributed by Jorn Baayen). * The various norm functions were replaced by the generic vector norm function norm(x,p) and the generic matrix norm function mnorm(x,p). Special functions: * Some internal caches were changed to always slightly overallocate precision. This fixes worst-case behavior where previously the cached value had to be recomputed on every function call. * Fixed log(tiny number) returning nonsense at high precision. * Fixed gamma() and derivative functions such as binomial() returning wrong results at integer inputs being divisible by a large power of 2. * Fixed asin() not to raise an exception at high precision (contributed by Vinzent Steinberg). * Optimized the AGM code for the natural logarithm, making the previously used Newton method at intermediate precisions obsolete. * The arithmetic-geometric mean function agm() is now an order of magnitude faster at low precision. * Faster implementations of ellipk() and ellipe(). * Analytic continuation of ellipe() to |x| >= 1 implemented. * Implemented the log gamma function (loggamma()) with correct branch cuts (slow, placeholder implementation). * Fixed branch cuts of hyperfac(). * Implemented the Riemann-Siegel Z-function (siegelz()). * Implemented the Riemann-Siegel theta function (siegeltheta()). * Implemented calculation of Gram points (grampoint()). * Implemented calculation of Riemann zeta function zeros (zetazero()). * Implemented the prime counting function: a slow, exact version (primepi()). and a fast approximate version (primepi2()) that gives a bounding interval. * Implemented the Riemann R prime counting function (riemannr()). * Implemented Bell numbers and polynomials (bell()). * Implemented the expm1() function. * Implemented the 'polyexponential function' (polyexp()). * Implemented the twin prime constant (twinprime) and Mertens' constant (mertens). * Implemented the prime zeta function (primezeta()). --0.11-- Released January 26, 2009 General: * Most of the documentation is now generated from docstrings using Sphinx' autodoc feature, and proper LaTeX is used for mathematical formulas. A large amount of new documentation has been written. * Improved gmpy backend. Using gmpy-1.04 gives a ~30% unit tests speedup over 1.03, with speedups in the range of 2-3x for specific operations (contributed by Case van Horsen and Mario Pernici). * Mpmath imports slightly faster due to not trying to load the 'random' library Numerical calculus, etc: * Implemented a fast high-precision ODE solver (to replace the slow and low-accuracy RK4 algorithm) (odefun()) * Created an intelligent function nsum() to replace sumrich/sumsh * Implemented nprod() for computing infinite products * Rewrote limit() to use the same adaptive extrapolation algorithm as nsum() * Multidimensional nonlinear solving with Newton's method implemented in findroot() (contributed by Vinzent Steinberg) * Simplified the implementation and interface of sumem() * Reimplemented Shanks transformation for nsum using Wynn's epsilon algorithm (shanks()) * Reimplemented Richardson extrapolation slightly more simply and efficiently (richardson()) * Prevent shanks() from exiting prematurely by adding random noise to zeros * Removed the obsolete secant() function (see findroot()) * Implemented high-order derivatives (diff(), diffs()) * Implemented calculation of Taylor series (taylor()) * Implemented calculation of Fourier series (fourier(), fourierval()) * Implemented Pade approximation (pade()) (contributed by Mario Pernici) * Better cancel condition for findroot() (contributed by Vinzent Steinberg) * Some refactoring of numerical integration code * Fix erroneous nodes for 0-th order Gauss-Legendre quadrature, which was causing unnecessary slowness * Quadrature nodes are cached for arbitrary intervals, giving a 30% speedup for repeated integrations * Unified interface and added more options for identify(), pslq(), findpoly() New special functions: * Implemented polylogarithms (polylog()) * Implemented Bernoulli polynomials (bernpoly()) * Implemented the Barnes G-function (barnesg()) * Implemented double factorials (fac2()) * Implemented superfactorials (superfac()) * Implemented hyperfactorials (hyperfac()) * Replaced lower_gamma and upper_gamma with a more versatile function gammainc() for computing the generalized (and optionally regularized) incomplete gamma function * Implemented sinc() and sincpi() * Implemented Fibonacci numbers (fib()) * Implemented the Dirichlet eta function (altzeta()) * Implemented the inverse error function (erfinv()) * Jacobi theta functions and elliptic functions were essentially rewritten from scratch, making them much faster and more general. Renamed Jacobi theta functions: jacobi_theta -> jtheta, etc. (contributed by Mario Pernici) * Implemented derivatives of jtheta (djtheta) (contributed by Mario Pernici) * Implemented Bessel Y, I, K functions (bessely, besseli, besselk; Bessel J functions were also renamed to besselj) also renamed) * Generalized Stieltjes constants can now be computed, with stieltjes(n,a) * Implemented Hankel functions (hankel1, hankel2) Speed improvements and bugfixes to special functions: * Fast logarithm at very high precision using the formula by Sasaki and Kanada (contributed by Mario Pernici) * Slightly faster logarithm at low precision (contributed by Mario Pernici) * Faster exponential function at high precision, using Newton's method (contributed by Mario Pernici) * Faster computation of ln2 and ln10 by means of binary splitting (contributed by Mario Pernici) * Fixed accuracy problems in sinpi() and cospi() * Correct evaluation of beta() at limits * Much faster evaluation of stieltjes(n), using an improved integral formula * Fixed bernoulli() being inaccurate for large n and low precision, and being needlessly slow for small n and huge precision * Fixed accuracy of zeta(s) for large negative re(s) * Fixed accuracy problems for asinh, atanh and tanh * Fixed accuracy of airyai() for large x.real * Fixed bug in nthroot() for very large arguments (contributed by Mario Pernici) * Fixed accuracy of log(x) for complex |x| ~= 1 * Fixed accuracy of exp(n), n a huge integer and prec >= 600 * Slightly faster hypergeometric functions with rational parameters (contributed by Mario Pernici) * Faster and more accurate calculation of ci(x), si(x) * Faster and more accurate calculation of ei(x) for large x, using an asymptotic expansion (contributed by Mario Pernici) * Fixed accuracy bugs in theta functions (contributed by Mario Pernici) * The Lambert W function returns more appropriate values at infinities Arithmetic and basic interface: * Square roots are now rounded correctly * Made float(huge) -> inf and float(1/huge) -> 0 instead of raising OverflowError * Renamed convert_lossless -> mpmathify * mpmathify() accepts strings representing fractions or complex numbers (contributed by Vinzent Steinberg) * Fixed a bug in interval multiplication giving wrong signs * Added monitor() to monitor function evaluation * Implemented a chop() utility function for deletion of numerical noise * Added re(), im(), conj(), fabs(), mpf.conjugate() * Fixed the != operator for intervals * Added functions fsum, fprod, fdot for efficient computation of sums, products and dot products of lists of mpf:s or mpc:s Matrices: * Generation of Hilbert matrices (hilbert()) (contributed by Vinzent Steinberg) * Added lu_solve_mat() to solve a*x=b where a and b are matrices (contributed by Mario Pernici) * Implemented computation of matrix exponentials (exp_pade()) (contributed by Mario Pernici) * Prettier repr of complex matrices (contributed by Vinzent Steinberg) * Speedups by using fdot and fsum (contributed by Vinzent Steinberg) --0.10-- Released October 15, 2008 Interface / general: * Mpmath now works with Python 2.6 * Implemented function plotting via 'plot' and 'cplot' (requires matplotlib) * Removed global rounding mode (always rounding to nearest by default) * Instead added 'prec', 'dps', 'rounding' keyword arguments to standard functions, for optional fine-grained control over precision and rounding * Implemented isinf, isnan, isint, utility functions * A large number of internal functions were moved and/or renamed to improve consistency. This particularly affects low-level mpf functions (lib.fadd -> libmpf.mpf_add, etc). * Syntax for some operations was changed (see details below) * The test runner (runtests.py) was updated to support running isolated tests and to allow a local import of mpmath * Unit tests can now be run with import mpmath; mpmath.runtests() * Implicit imports are no longer used internally in the main codebase. (This will hopefully make the source easier to read, and can catch installation problems more cleanly.) Added linear algebra functions (contributed by Vinzent Steinberg): * Provided a matrix class * Computation of powers, inverses, determinants * Linear system solving using LU, QR and Cholesky * Vector and matrix norms * Calculation of condition numbers Improvements to interval arithmetic: * Fixed rounding direction for negative numbers and related spurious bugs * Fix interval exponentiation (all cases should work now) * Basic interval arithmetic is up to 10x faster * sqrt, exp, log, sin, cos and a few other functions accept interval arguments * Intervals supported in matrices Changes to root-finding code: * secant renamed to findroot * findroot was made more general; many useful alternative root-finding algorithms were implemented (contributed by Vinzent Steinberg) Improvements to special functions: * Implemented polygamma functions * Implemented harmonic numbers * Implemented Stieltjes constants * Made gamma more accurate for huge arguments and/or precision * Made zeta more accurate in various cases * Made zeta typically 2-5x faster * Much more efficient computation of zeta for huge s (zeta(s) ~= 1) * Optimized numerical calculation of Bernoulli numbers * Fast exact calculation of huge Bernoulli numbers via zeta and the von Staudt-Clausen theorem * Using AGM to compute ellipk, which is much faster and works in the entire complex plane * Allow single-argument form agm(x) = agm(1,x) * Faster and more accurate computation of erf * Added fast and accurate implementation of erfc * Normal probability functions npdf, ncdf * Fixed directed rounding in corner cases for various functions Improvements to numerical integration: * Changed syntax for integration (quad(f, [a, b], options)) * Implemented Gauss-Legendre quadrature * Direct support for triple integrals (quad(f, X, Y, Z)) * Interval can be a list of several points, to split integration into subintervals * Oscillatory quadrature uses Gauss-Legendre instead of tanh-sinh, since this is typically faster * Fixed minor rounding bug in tanh-sinh quadrature not giving complete symmetry in the nodes * Implemented quadrature rules in classes for improved extensibility Various speed improvements: * Up to 3x faster computation of log(x) at low precision, due to using Taylor series with argument reduction and partial caching * About 2x faster log(x) at very high precision due to more efficient computation of exp in the Newton iteration * Up to 10x faster computation of atan(x) at low to medium precision, due to using Taylor series with argument reduction and partial caching * Faster pickling due to using hex() instead of long() * Optimized code for Khinchin's constant (2.5x faster at 1000 digits) * Optimized code for Glaisher's constant (1.5x faster at 1000 digits) * Faster algorithm for Euler's constant (10x faster at 10000 digits) * Rewrote PSLQ to use fixed-point arithmetic, giving a ~7x speedup in pslq, findpoly and identify Miscellaneous bugfixes: * Fixed nthroot for n = -1, 0, 1 * Fixed inf/2**n and nan/2**n returning zero --0.9-- Released August 23, 2008 * gmpy mpzs are used instead of python ints when available, for huge speedups at high precision (contributed by Case Van Horsen) * using binary splitting to compute pi and e near-optimally * mpmath includes __version__ information * arange behaves more like range (contributed by Vinzent Steinberg) * asymptotically faster trigonometric functions via Brent's trick (contributed by Mario Pernici) * asymptotically faster inverse trigonometric functions via Newton's method (contributed by Mario Pernici) * added Jacobi elliptic functions 1-4, sn, cn, dn (contributed by Mike Taschuk) * polyval, polyroots and related functions now use the same order for coefficients as scipy and matlab (i.e. the reverse order of what was used previously in mpmath) * fixed polyroots for degree-0 polynomials (contributed by Nimish Telang) * added convenience functions (log10, degrees, radians, frexp, modf, ln, arg, sign) * added fast cbrt and nthroot functions for computing nth roots (contributed by (Mario Pernici) * added various exponential integrals (ei, li, si, ci, shi, chi, erfi) * added airy functions (airyai, airybi) * more __op__ and __rop__ methods return NotImplemented where appropriate * external classes can define a special method _mpmath_ to interact with mpmath numbers and functions * fixed some corner cases in atan2 * faster rand() --0.8-- Released April 20, 2008 New features: * the full set of reciprocal trigonometric and hyperbolic functions and their inverses (cotangent, secant, etc) is available * oscillatory quadrature algorithm * the PSLQ algorithm and constant recognition functions * Richardson and Shanks transformations for computing limits and series * Euler-Maclaurin summation of series * basic ODE solvers (contributed by Ondrej Certik) * the Lambert W function * arithmetic-geometric mean function * generic hypergeometric series and some special hypergeometric functions (elliptic integrals, orthogonal polynomials) * several more mathematical constants * fast sequential computation of integer logarithms and Bernoulli numbers * Bessel function jv works for complex arguments and noninteger v * support for trapping complex results * using Sphinx to generate HTML documentation Bugfixes, speed enhancements, and other improvements: * compatibility tests should now pass on systems where Python is compiled to use 80-bit registers for floating point operations * fixed mpmath to work with some versions of Python 2.4 where a list indexing bug is present in the Python core * better algorithms for various complex elementary functions (tan and tanh by Fredrik; sqrt, acos, asin, acosh and asinh improved by Mario Pernici) * multiplication and integer powers for complex numbers is faster and more accurate * miscellaneous speed improvements to complex arithmetic (contributed by Mario Pernici) * faster computation of cos and sin when only one of them is needed (contributed by Mario Pernici) * slightly faster square roots at low precision (contributed by Mario Pernici) * fixed computation of exp(n) for negative integers and x**y for negative half integers y * mpf ** complex now works * faster generation of quadrature nodes (contributed by Mario Pernici) * faster change of variables for quadrature * comparisons and conversions have been optimized slightly. comparisons with float(nan) also work as intended. * str() is several times faster at very high precision * implementations of most elementary functions moved to the lib and libmpc modules for cleaner separation of functionality * the rounding argument for lib and libmpc functions, and for some functions also the the prec argument, are now optional, resulting in cleaner and slightly faster lib code * gamma and factorial are about 2x faster * polyroots returns nicer results * pickling now works for mpf and mpc instances --0.7-- Released March 12, 2008 * the interface for switching precision and rounding modes has been changed. instead of changing mpf.prec, there is a new object mp which holds the precision as mp.prec. this change improves flexibility in the implementation. it will unfortunately break any existing code written for mpmath, but the broken code should be trivial to update. * the functions workprec, workdps, extraprec, extradps have been introduced for switching precision in a more safe manner, ensuring that the precision gets reset when finished. they can be used with the 'with' statement available in python 2.5 * improved documentation (manual.html) * the round-half-down and round-half-up modes have been deprecated, since they added complexity without being particularly useful. round-half-even has been renamed to round-nearest. * implemented the functions nstr, nprint for printing numbers with a small or custom number of digits * accuracy of cos and sin near roots has been fixed. computing sin(x) or cos(x) where x is huge is also much faster * implemented a magical constant eps that gives the "machine" epsilon * additional mathematical functions: implemented Catalan's constant and Bessel functions J_n(x) for integer n and real x * new functions diff and diffc for numerical differentiation * implemented the ldexp function for fast multiplication by 2**n * mpf uses rich comparison methods (contributed by Pearu Peterson) * epydoc-friendly docstrings (contributed by Pearu Peterson) * support creating mpf from float nan or inf * fixed printing of complex numbers with negative imaginary part * flattened package structure to simplify inclusion of mpmath in other packages * external classes can interoperate with mpf and mpc instances by defining _mpf_ or _mpc_ properties * renamed lib.fpow -> lib.fpowi and implemented lib.fpow for general real powers. ** should now be slightly faster and more robust * the internal number representation has been changed to include an explicit sign bit. as a result of this change and other small tweaks, arithmetic is up to 20% faster and the total running time for mpmath's unit tests has dropped 10%. * miscellaneous speed improvements: * ** is 2-3 times faster (contributed by Mario Pernici) * * and * is roughly twice as fast * / is roughly twice as fast (contributed by Mario Pernici) * exp and log are about 10% faster * fast computation of e and exp(n) when precision is extremely high --0.6-- Released January 13, 2008 * added the mpi type for interval arithmetic * powers with integer exponents are computed with directed rounding all the way through to preserve interval bounds more robustly (however, the code is not fully tested and may have some bugs) * string input to mpf.__new__() can now be unicode * mpf.__eq__ now works in pypy * infs and nans are now implemented in mpmath.lib, resulting in considerable simplification of the mpf class implementation * partial support for infs and nans in functions, e.g. exp(inf) -> inf and exp(-inf) -> 0 now work. * renamed several files. created mpmath.apps and moved tests into the main mpmath directory * wrote script to permit running unit tests without py.test available * improved bit counting code in fadd, fmul and fdiv, plus other small performance tweaks, resulting in a 20-30% speedup for arithmetic --0.5-- Released November 24, 2007 * added the quad module for arbitrary-precision numerical integration * floor and ceil functions available * implemented __mod__ and __rmod__ for the mpf class * partial support for the special numbers +inf, -inf and nan * faster multiplication and division (up to 40% faster with psyco) * simplified syntax for conversion function (from_int instead of from_int_exact, etc) * renamed cgamma to euler * more documentation strings --0.4-- Released November 3, 2007 * new string conversion code (much faster; unlimited exponents) * fixed bug in factorial (it gave the wrong value, though gamma worked) * division now uses a rigorous algorithm for directed rounding (mpmath previously used a heuristic that got the last bit wrong in 1/10000 of cases) * misc. performance improvements (arithmetic is 15% faster) * refactored parts of the code; added many more docstrings and tests * added a function rand() for generating full-precision random numbers * rewrote the benchmark script to compare against Decimal and to automatically generate timings with psyco both disabled and enabled * rewrote unit tests to use py.test --0.3-- Released October 5, 2007 * fixed high-precision accuracy problem in complex sqrt * fixed high-precision accuracy problem in atan and complex log * fixed directed rounding for sqrt (always rounded to nearest) * implemented all hyperbolic and inverse functions (there are some accuracy issues left to sort out) * included gamma, factorial, erf, zeta incomplete gamma functions * made sin and tan more accurate for complex input very close to 0 * more docstrings * many more tests * including a benchmark script -- 0.2 -- Released October 2, 2007 * 50% faster exponential function * faster mpf <-> int ops * fixed import error in pidigits.py; added demos to source distribution * __rmul__ was missing on mpf * fixed bitcount bug also for -(2**n-1) * more docstrings * more tests; tests included in source distribution * approximate equality testing (.ae method) supported * implemented atan and atan2 functions * tan works for both mpfs and mpcs * complex logarithms and complex powers supported * more details in README -- 0.1 -- Released September 27, 2007 * imported code from SymPy's numerics module * renamed functions and restructured various parts of the code * fixed erroneous bitcount for 2**n-1 mantissa with directed rounding * various small speed improvements and bug fixes mpmath-1.0.0/LICENSE000066400000000000000000000027641316273626600140300ustar00rootroot00000000000000Copyright (c) 2005-2017 Fredrik Johansson and mpmath contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: a. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. b. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. c. Neither the name of mpmath nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. mpmath-1.0.0/MANIFEST.in000066400000000000000000000001161316273626600145460ustar00rootroot00000000000000include mpmath/*.py include mpmath/tests/*.py include LICENSE include CHANGES mpmath-1.0.0/README.rst000066400000000000000000000142421316273626600145040ustar00rootroot00000000000000mpmath ====== A Python library for arbitrary-precision floating-point arithmetic. Website: http://mpmath.org/ Main author: Fredrik Johansson Mpmath is free software released under the New BSD License (see the LICENSE file for details) 0. History and credits ---------------------- The following people (among others) have contributed patches and new features to mpmath: * Pearu Peterson * Mario Pernici * Ondrej Certik * Vinzent Steinberg * Nimish Telang * Mike Taschuk * Case Van Horsen * Jorn Baayen * Chris Smith * Juan Arias de Reyna * Ioannis Tziakos * Aaron Meurer * Stefan Krastanov * Ken Allen * Timo Hartmann * Sergey B Kirpichev * Kris Kuhlman * Paul Masson Numerous other people have contributed by reporting bugs, requesting new features, or suggesting improvements to the documentation. Mpmath includes a copy of Benjamin Peterson's six.py for Python 2/3 compatibility. six.py is provided under the MIT license (see the source file for details). For a detailed changelog, including individual contributions, see the CHANGES file. Fredrik's work on mpmath during summer 2008 was sponsored by Google as part of the Google Summer of Code program. Fredrik's work on mpmath during summer 2009 was sponsored by the American Institute of Mathematics under the support of the National Science Foundation Grant No. 0757627 (FRG: L-functions and Modular Forms). Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the sponsors. Credit also goes to: * The authors of the GMP library and the Python wrapper gmpy, enabling mpmath to become much faster at high precision * The authors of MPFR, pari/gp, MPFUN, and other arbitrary- precision libraries, whose documentation has been helpful for implementing many of the algorithms in mpmath * Wikipedia contributors; Abramowitz & Stegun; Gradshteyn & Ryzhik; Wolfram Research for MathWorld and the Wolfram Functions site. These are the main references used for special functions implementations. * George Brandl for developing the Sphinx documentation tool used to build mpmath's documentation Release history: * Version 1.0.0 released on September 27, 2017 * Version 0.19 released on June 10, 2014 * Version 0.18 released on December 31, 2013 * Version 0.17 released on February 1, 2011 * Version 0.16 released on September 24, 2010 * Version 0.15 released on June 6, 2010 * Version 0.14 released on February 5, 2010 * Version 0.13 released on August 13, 2009 * Version 0.12 released on June 9, 2009 * Version 0.11 released on January 26, 2009 * Version 0.10 released on October 15, 2008 * Version 0.9 released on August 23, 2008 * Version 0.8 released on April 20, 2008 * Version 0.7 released on March 12, 2008 * Version 0.6 released on January 13, 2008 * Version 0.5 released on November 24, 2007 * Version 0.4 released on November 3, 2007 * Version 0.3 released on October 5, 2007 * Version 0.2 released on October 2, 2007 * Version 0.1 released on September 27, 2007 1. Download & installation -------------------------- Mpmath requires Python 2.5 or later. It has been tested with Python 2.6, 2.7, and 3.2 through 3.5. It should also run under other Python implementations such as PyPy. The latest release of mpmath can be downloaded from the mpmath website and from https://github.com/fredrik-johansson/mpmath/releases It should also be available in the Python Package Index at https://pypi.python.org/pypi/mpmath To install latest release of Mpmath with pip, simply run ``pip install mpmath`` Or unpack the mpmath archive and run ``python setup.py install`` Mpmath can also be installed using ``python -m easy_install mpmath`` The latest development code is available from https://github.com/fredrik-johansson/mpmath See the main documentation for more detailed instructions. 2. Running tests ---------------- The unit tests in mpmath/tests/ can be run via the script runtests.py, but it is recommended to run them with py.test (http://codespeak.net/py/dist/index.html), especially to generate more useful reports in case there are failures. You may also want to check out the demo scripts in the demo directory. The master branch is automatically tested by Travis CI, the results can be seen here: .. image:: https://secure.travis-ci.org/fredrik-johansson/mpmath.png?branch=master :target: http://travis-ci.org/fredrik-johansson/mpmath 3. Documentation ---------------- Documentation in reStructuredText format is available in the doc directory included with the source package. These files are human-readable, but can be compiled to prettier HTML using the build.py script (requires Sphinx, http://sphinx.pocoo.org/). See setup.txt in the documentation for more information. The most recent documentation is also available in HTML format: http://mpmath.org/doc/current/ 4. Known problems ----------------- Mpmath is a work in progress. Major issues include: * Some functions may return incorrect values when given extremely large arguments or arguments very close to singularities. * Directed rounding works for arithmetic operations. It is implemented heuristically for other operations, and their results may be off by one or two units in the last place (even if otherwise accurate). * Some IEEE 754 features are not available. Inifinities and NaN are partially supported; denormal rounding is currently not available at all. * The interface for switching precision and rounding is not finalized. The current method is not threadsafe. 5. Help and bug reports ----------------------- General questions and comments can be sent to the mpmath mailinglist, mpmath@googlegroups.com You can also report bugs and send patches to the mpmath issue tracker, https://github.com/fredrik-johansson/mpmath/issues mpmath-1.0.0/TODO000066400000000000000000000000701316273626600134770ustar00rootroot00000000000000See README and the mpmath website for more information. mpmath-1.0.0/demo/000077500000000000000000000000001316273626600137365ustar00rootroot00000000000000mpmath-1.0.0/demo/mandelbrot.py000066400000000000000000000014161316273626600164410ustar00rootroot00000000000000""" This script uses the cplot function in mpmath to plot the Mandelbrot set. By default, the fp context is used for speed. The mp context could be used to improve accuracy at extremely high zoom levels. """ import mpmath import cmath ctx = mpmath.fp # ctx = mpmath.mp ITERATIONS = 50 POINTS = 100000 ESCAPE_RADIUS = 8 # Full plot RE = [-2.5, 1.5] IM = [-1.5, 1.5] # A pretty subplot #RE = [-0.96, -0.80] #IM = [-0.35, -0.2] def mandelbrot(z): c = z for i in xrange(ITERATIONS): zprev = z z = z*z + c if abs(z) > ESCAPE_RADIUS: return ctx.exp(1j*(i + 1 - ctx.log(ctx.log(abs(z)))/ctx.log(2))) return 0 try: import psyco psyco.full() except ImportError: pass ctx.cplot(mandelbrot, RE, IM, points=POINTS, verbose=1) mpmath-1.0.0/demo/manydigits.py000066400000000000000000000043131316273626600164610ustar00rootroot00000000000000""" This script calculates solutions to some of the problems from the "Many Digits" competition: http://www.cs.ru.nl/~milad/manydigits/problems.php Run with: python manydigits.py """ from mpmath import * from mpmath.libmp import to_fixed, bin_to_radix dps = 100 mp.dps = dps + 10 def pr(x): """Return the first dps digits after the decimal point""" x = x._mpf_ p = int(dps*3.33 + 10) t = to_fixed(x, p) d = bin_to_radix(t, p, 10, dps) s = str(d).zfill(dps)[-dps:] return s[:dps//2] + "\n" + s[dps//2:] print """ This script prints answers to a selection of the "Many Digits" competition problems: http://www.cs.ru.nl/~milad/manydigits/problems.php The output for each problem is the first 100 digits after the decimal point in the result. """ print "C01: sin(tan(cos(1)))" print pr(sin(tan(cos(1)))) print print "C02: sqrt(e/pi)" print pr(sqrt(e/pi)) print print "C03: sin((e+1)^3)" print pr(sin((e+1)**3)) print print "C04: exp(pi*sqrt(2011))" mp.dps += 65 print pr(exp(pi*sqrt(2011))) mp.dps -= 65 print print "C05: exp(exp(exp(1/2)))" print pr(exp(exp(exp(0.5)))) print print "C06: arctanh(1-arctanh(1-arctanh(1-arctanh(1/pi))))" print pr(atanh(1-atanh(1-atanh(1-atanh(1/pi))))) print print "C07: pi^1000" mp.dps += 505 print pr(pi**1000) mp.dps -= 505 print print "C08: sin(6^(6^6))" print pr(sin(6**(6**6))) print print "C09: sin(10*arctan(tanh(pi*(2011^(1/2))/3)))" mp.dps += 150 print pr(sin(10*atan(tanh(pi*sqrt(2011)/3)))) mp.dps -= 150 print print "C10: (7+2^(1/5)-5*(8^(1/5)))^(1/3) + 4^(1/5)-2^(1/5)" a = mpf(1)/5 print pr(((7 + 2**a - 5*(8**a))**(mpf(1)/3) + 4**a - 2**a)) print print "C11: tan(2^(1/2))+arctanh(sin(1))" print pr((tan(sqrt(2)) + atanh(sin(1)))) print print "C12: arcsin(1/e^2) + arcsinh(e^2)" print pr(asin(1/exp(2)) + asinh(exp(2))) print print "C17: S= -4*Zeta(2) - 2*Zeta(3) + 4*Zeta(2)*Zeta(3) + 2*Zeta(5)" print pr(-4*zeta(2) - 2*zeta(3) + 4*zeta(2)*zeta(3) + 2*zeta(5)) print print "C18: Catalan G = Sum{i=0}{\infty}(-1)^i/(2i+1)^2" print pr(catalan) print print "C21: Equation exp(cos(x)) = x" print pr(findroot(lambda x: exp(cos(x))-x, 1)) print print "C22: J = integral(sin(sin(sin(x)))), x=0..1" print pr(quadts(lambda x: sin(sin(sin(x))), [0, 1])) print mpmath-1.0.0/demo/pidigits.py000066400000000000000000000045221316273626600161270ustar00rootroot00000000000000""" Calculate digits of pi. This module can be run interactively with python pidigits.py """ __docformat__ = 'plaintext' import sys import math from time import clock from mpmath.libmp import bin_to_radix, numeral, pi_fixed def display_fraction(digits, skip=0, colwidth=10, columns=5): perline = colwidth * columns printed = 0 for linecount in range((len(digits)-skip) // (colwidth * columns)): line = digits[skip+linecount*perline:skip+(linecount+1)*perline] for i in range(columns): print line[i*colwidth : (i+1)*colwidth], print ":", (linecount+1)*perline if (linecount+1) % 10 == 0: print printed += colwidth*columns rem = (len(digits)-skip) % (colwidth * columns) if rem: buf = digits[-rem:] s = "" for i in range(columns): s += buf[:colwidth].ljust(colwidth+1, " ") buf = buf[colwidth:] print s + ":", printed + colwidth*columns def calculateit(base, n, tofile): intpart = numeral(3, base) skip = 1 if base <= 3: skip = 2 prec = int(n*math.log(base,2))+10 print "Step 1 of 2: calculating binary value..." t = clock() a = pi_fixed(prec, verbose=True, verbose_base=base) step1_time = clock() - t print "Step 2 of 2: converting to specified base..." t = clock() d = bin_to_radix(a, prec, base, n) d = numeral(d, base, n) step2_time = clock() - t print "\nWriting output...\n" if tofile: out_ = sys.stdout sys.stdout = tofile print "%i base-%i digits of pi:\n" % (n, base) print intpart, ".\n" display_fraction(d, skip, colwidth=10, columns=5) if tofile: sys.stdout = out_ print "\nFinished in %f seconds (%f calc, %f convert)" % \ ((step1_time + step2_time), step1_time, step2_time) def interactive(): print "Compute digits of pi with mpmath\n" base = input("Which base? (2-36, 10 for decimal) \n> ") digits = input("How many digits? (enter a big number, say, 10000)\n> ") tofile = raw_input("Output to file? (enter a filename, or just press " \ "enter\nto print directly to the screen) \n> ") if tofile: tofile = open(tofile, "w") calculateit(base, digits, tofile) raw_input("\nPress enter to close this script.") if __name__ == "__main__": interactive() mpmath-1.0.0/demo/plotting.py000066400000000000000000000015741316273626600161570ustar00rootroot00000000000000""" Function plotting demo. """ from mpmath import * def main(): print """ Simple function plotting. You can enter one or several formulas, in ordinary Python syntax and using the mpmath function library. The variable is 'x'. So for example the input "sin(x/2)" (without quotation marks) defines a valid function. """ functions = [] for i in xrange(10): if i == 0: s = raw_input('Enter a function: ') else: s = raw_input('Enter another function (optional): ') if not s: print break f = eval("lambda x: " + s) functions.append(f) print "Added f(x) = " + s print xlim = raw_input('Enter xmin, xmax (optional): ') if xlim: xlim = eval(xlim) else: xlim = [-5, 5] print "Plotting..." plot(functions, xlim=xlim) main() mpmath-1.0.0/demo/taylor.py000066400000000000000000000036431316273626600156300ustar00rootroot00000000000000""" Interval arithmetic demo: estimating error of numerical Taylor series. This module can be run interactively with python taylor.py """ from mpmath import * def taylor(x, n): print "-"*75 t = x = mpi(x) s = 1 print "adding 1" print s, "\n" s += t print "adding x" print s, "\n" for k in range(2, n+1): t = (t * x) / k s += t print "adding x^%i / %i! ~= %s" % (k, k, t.mid) print s, "\n" print "-"*75 return s # Note: this should really be computed using interval arithmetic too! def remainder(x, n): xi = max(0, x) r = exp(xi) / factorial(n+1) r = r * x**(n+1) return abs(r) def exponential(x, n): """ Compute exp(x) using n terms of the Taylor series for exp using intervals, and print detailed error analysis. """ t = taylor(x, n) r = remainder(x, n) expx = exp(x) print "Correct value of exp(x): ", expx print print "Computed interval: " print t print print "Computed value (midpoint): ", t.mid print print "Estimated rounding error: ", t.delta print "Estimated truncation error: ", r print "Estimated total error: ", t.delta + r print "Actual error ", abs(expx - t.mid) print u = t + mpi(-r, r) print "Interval with est. truncation error added:" print u print print "Correct value contained in computed interval:", t.a <= expx <= t.b print "When accounting for truncation error:", u.a <= expx <= u.b if __name__ == "__main__": print "Interval arithmetic demo" print print "This script sums the Taylor series for exp(x) using interval arithmetic," print "and then compares the numerical errors due to rounding and truncation." print x = mpf(raw_input("Enter the value of x (e.g. 3.5): ")) n = int(raw_input("Enter the number of terms n (e.g. 10): ")) print exponential(x, n) mpmath-1.0.0/doc/000077500000000000000000000000001316273626600135575ustar00rootroot00000000000000mpmath-1.0.0/doc/build.py000066400000000000000000000002011316273626600152210ustar00rootroot00000000000000#!/usr/bin/env python import os if not os.path.exists("build"): os.mkdir("build") os.system("sphinx-build -E source build") mpmath-1.0.0/doc/source/000077500000000000000000000000001316273626600150575ustar00rootroot00000000000000mpmath-1.0.0/doc/source/basics.txt000066400000000000000000000212451316273626600170700ustar00rootroot00000000000000Basic usage =========================== In interactive code examples that follow, it will be assumed that all items in the ``mpmath`` namespace have been imported:: >>> from mpmath import * Importing everything can be convenient, especially when using mpmath interactively, but be careful when mixing mpmath with other libraries! To avoid inadvertently overriding other functions or objects, explicitly import only the needed objects, or use the ``mpmath.`` or ``mp.`` namespaces:: from mpmath import sin, cos sin(1), cos(1) import mpmath mpmath.sin(1), mpmath.cos(1) from mpmath import mp # mp context object -- to be explained mp.sin(1), mp.cos(1) Number types ------------ Mpmath provides the following numerical types: +------------+----------------+ | Class | Description | +============+================+ | ``mpf`` | Real float | +------------+----------------+ | ``mpc`` | Complex float | +------------+----------------+ | ``matrix`` | Matrix | +------------+----------------+ The following section will provide a very short introduction to the types ``mpf`` and ``mpc``. Intervals and matrices are described further in the documentation chapters on interval arithmetic and matrices / linear algebra. The ``mpf`` type is analogous to Python's built-in ``float``. It holds a real number or one of the special values ``inf`` (positive infinity), ``-inf`` (negative infinity) and ``nan`` (not-a-number, indicating an indeterminate result). You can create ``mpf`` instances from strings, integers, floats, and other ``mpf`` instances: >>> mpf(4) mpf('4.0') >>> mpf(2.5) mpf('2.5') >>> mpf("1.25e6") mpf('1250000.0') >>> mpf(mpf(2)) mpf('2.0') >>> mpf("inf") mpf('+inf') The ``mpc`` type represents a complex number in rectangular form as a pair of ``mpf`` instances. It can be constructed from a Python ``complex``, a real number, or a pair of real numbers: >>> mpc(2,3) mpc(real='2.0', imag='3.0') >>> mpc(complex(2,3)).imag mpf('3.0') You can mix ``mpf`` and ``mpc`` instances with each other and with Python numbers: >>> mpf(3) + 2*mpf('2.5') + 1.0 mpf('9.0') >>> mp.dps = 15 # Set precision (see below) >>> mpc(1j)**0.5 mpc(real='0.70710678118654757', imag='0.70710678118654757') Setting the precision --------------------- Mpmath uses a global working precision; it does not keep track of the precision or accuracy of individual numbers. Performing an arithmetic operation or calling ``mpf()`` rounds the result to the current working precision. The working precision is controlled by a context object called ``mp``, which has the following default state: >>> print(mp) Mpmath settings: mp.prec = 53 [default: 53] mp.dps = 15 [default: 15] mp.trap_complex = False [default: False] The term **prec** denotes the binary precision (measured in bits) while **dps** (short for *decimal places*) is the decimal precision. Binary and decimal precision are related roughly according to the formula ``prec = 3.33*dps``. For example, it takes a precision of roughly 333 bits to hold an approximation of pi that is accurate to 100 decimal places (actually slightly more than 333 bits is used). Changing either precision property of the ``mp`` object automatically updates the other; usually you just want to change the ``dps`` value: >>> mp.dps = 100 >>> mp.dps 100 >>> mp.prec 336 When the precision has been set, all ``mpf`` operations are carried out at that precision:: >>> mp.dps = 50 >>> mpf(1) / 6 mpf('0.16666666666666666666666666666666666666666666666666656') >>> mp.dps = 25 >>> mpf(2) ** mpf('0.5') mpf('1.414213562373095048801688713') The precision of complex arithmetic is also controlled by the ``mp`` object: >>> mp.dps = 10 >>> mpc(1,2) / 3 mpc(real='0.3333333333321', imag='0.6666666666642') There is no restriction on the magnitude of numbers. An ``mpf`` can for example hold an approximation of a large Mersenne prime: >>> mp.dps = 15 >>> print(mpf(2)**32582657 - 1) 1.24575026015369e+9808357 Or why not 1 googolplex: >>> print(mpf(10) ** (10**100)) # doctest:+ELLIPSIS 1.0e+100000000000000000000000000000000000000000000000000... The (binary) exponent is stored exactly and is independent of the precision. Temporarily changing the precision .................................. It is often useful to change the precision during only part of a calculation. A way to temporarily increase the precision and then restore it is as follows: >>> mp.prec += 2 >>> # do_something() >>> mp.prec -= 2 Since Python 2.5, the ``with`` statement along with the mpmath functions ``workprec``, ``workdps``, ``extraprec`` and ``extradps`` can be used to temporarily change precision in a more safe manner: >>> from __future__ import with_statement # only need this in Python 2.5 >>> with workdps(20): # doctest: +SKIP ... print(mpf(1)/7) ... with extradps(10): ... print(mpf(1)/7) ... 0.14285714285714285714 0.142857142857142857142857142857 >>> mp.dps 15 The ``with`` statement ensures that the precision gets reset when exiting the block, even in the case that an exception is raised. (The effect of the ``with`` statement can be emulated in Python 2.4 by using a ``try/finally`` block.) The ``workprec`` family of functions can also be used as function decorators: >>> @workdps(6) ... def f(): ... return mpf(1)/3 ... >>> f() mpf('0.33333331346511841') Some functions accept the ``prec`` and ``dps`` keyword arguments and this will override the global working precision. Note that this will not affect the precision at which the result is printed, so to get all digits, you must either use increase precision afterward when printing or use ``nstr``/``nprint``: >>> mp.dps = 15 >>> print(exp(1)) 2.71828182845905 >>> print(exp(1, dps=50)) # Extra digits won't be printed 2.71828182845905 >>> nprint(exp(1, dps=50), 50) 2.7182818284590452353602874713526624977572470937 Finally, instead of using the global context object ``mp``, you can create custom contexts and work with methods of those instances instead of global functions. The working precision will be local to each context object: >>> mp2 = mp.clone() >>> mp.dps = 10 >>> mp2.dps = 20 >>> print(mp.mpf(1) / 3) 0.3333333333 >>> print(mp2.mpf(1) / 3) 0.33333333333333333333 **Note**: the ability to create multiple contexts is a new feature that is only partially implemented. Not all mpmath functions are yet available as context-local methods. In the present version, you are likely to encounter bugs if you try mixing different contexts. Providing correct input ----------------------- Note that when creating a new ``mpf``, the value will at most be as accurate as the input. *Be careful when mixing mpmath numbers with Python floats*. When working at high precision, fractional ``mpf`` values should be created from strings or integers: >>> mp.dps = 30 >>> mpf(10.9) # bad mpf('10.9000000000000003552713678800501') >>> mpf('10.9') # good mpf('10.8999999999999999999999999999997') >>> mpf(109) / mpf(10) # also good mpf('10.8999999999999999999999999999997') >>> mp.dps = 15 (Binary fractions such as 0.5, 1.5, 0.75, 0.125, etc, are generally safe as input, however, since those can be represented exactly by Python floats.) Printing -------- By default, the ``repr()`` of a number includes its type signature. This way ``eval`` can be used to recreate a number from its string representation: >>> eval(repr(mpf(2.5))) mpf('2.5') Prettier output can be obtained by using ``str()`` or ``print``, which hide the ``mpf`` and ``mpc`` signatures and also suppress rounding artifacts in the last few digits: >>> mpf("3.14159") mpf('3.1415899999999999') >>> print(mpf("3.14159")) 3.14159 >>> print(mpc(1j)**0.5) (0.707106781186548 + 0.707106781186548j) Setting the ``mp.pretty`` option will use the ``str()``-style output for ``repr()`` as well: >>> mp.pretty = True >>> mpf(0.6) 0.6 >>> mp.pretty = False >>> mpf(0.6) mpf('0.59999999999999998') The number of digits with which numbers are printed by default is determined by the working precision. To specify the number of digits to show without changing the working precision, use :func:`mpmath.nstr` and :func:`mpmath.nprint`: >>> a = mpf(1) / 6 >>> a mpf('0.16666666666666666') >>> nstr(a, 8) '0.16666667' >>> nprint(a, 8) 0.16666667 >>> nstr(a, 50) '0.16666666666666665741480812812369549646973609924316' mpmath-1.0.0/doc/source/calculus/000077500000000000000000000000001316273626600166725ustar00rootroot00000000000000mpmath-1.0.0/doc/source/calculus/approximation.txt000066400000000000000000000007651316273626600223350ustar00rootroot00000000000000Function approximation ---------------------- Taylor series (``taylor``) .......................... .. autofunction:: mpmath.taylor Pade approximation (``pade``) ............................. .. autofunction:: mpmath.pade Chebyshev approximation (``chebyfit``) ...................................... .. autofunction:: mpmath.chebyfit Fourier series (``fourier``, ``fourierval``) ............................................ .. autofunction:: mpmath.fourier .. autofunction:: mpmath.fourierval mpmath-1.0.0/doc/source/calculus/differentiation.txt000066400000000000000000000010231316273626600226010ustar00rootroot00000000000000Differentiation --------------- Numerical derivatives (``diff``, ``diffs``) ........................................... .. autofunction:: mpmath.diff .. autofunction:: mpmath.diffs Composition of derivatives (``diffs_prod``, ``diffs_exp``) .......................................................... .. autofunction:: mpmath.diffs_prod .. autofunction:: mpmath.diffs_exp Fractional derivatives / differintegration (``differint``) ............................................................ .. autofunction:: mpmath.differint mpmath-1.0.0/doc/source/calculus/index.txt000066400000000000000000000003401316273626600205370ustar00rootroot00000000000000Numerical calculus ================== .. toctree:: :maxdepth: 2 polynomials.txt optimization.txt sums_limits.txt differentiation.txt integration.txt odes.txt approximation.txt inverselaplace.txt mpmath-1.0.0/doc/source/calculus/integration.txt000066400000000000000000000011131316273626600217520ustar00rootroot00000000000000Numerical integration (quadrature) ---------------------------------- Standard quadrature (``quad``) .............................. .. autofunction:: mpmath.quad Oscillatory quadrature (``quadosc``) .................................... .. autofunction:: mpmath.quadosc Quadrature rules ................ .. autoclass:: mpmath.calculus.quadrature.QuadratureRule :members: Tanh-sinh rule ~~~~~~~~~~~~~~ .. autoclass:: mpmath.calculus.quadrature.TanhSinh :members: Gauss-Legendre rule ~~~~~~~~~~~~~~~~~~~ .. autoclass:: mpmath.calculus.quadrature.GaussLegendre :members: mpmath-1.0.0/doc/source/calculus/inverselaplace.txt000066400000000000000000000034321316273626600224320ustar00rootroot00000000000000Numerical inverse Laplace transform ----------------------------------- One-step algorithm (``invertlaplace``) ...................................... .. autofunction:: mpmath.invertlaplace Specific algorithms ................... Fixed Talbot algorithm ~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: mpmath.calculus.inverselaplace.FixedTalbot :members: Gaver-Stehfest algorithm ~~~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: mpmath.calculus.inverselaplace.Stehfest :members: de Hoog, Knight & Stokes algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. autoclass:: mpmath.calculus.inverselaplace.deHoog :members: Manual approach ............... It is possible and sometimes beneficial to re-create some of the functionality in ``invertlaplace``. This could be used to compute the Laplace-space function evaluations in a different way. For example, the Laplace-space function evaluations could be the result of a quadrature or sum, solution to a system of ordinary differential equations, or possibly computed in parallel from some external library or function call. A trivial example showing the process (which could be implemented using the existing interface): >>> from mpmath import * >>> myTalbot = calculus.inverselaplace.FixedTalbot(mp) >>> t = convert(0.25) >>> myTalbot.calc_laplace_parameter(t) >>> fp = lambda p: 1/(p + 1) - 1/(p + 1000) >>> ft = lambda t: exp(-t) - exp(-1000*t) >>> fpvec = [fp(p) for p in myTalbot.p] >>> ft(t)-myTalbot.calc_time_domain_solution(fpvec,t,manual_prec=True) mpf('1.928300179528890061756872185e-21') This manual approach is also useful to look at the Laplace parameter, order, or working precision which were computed. >>> myTalbot.degree 34 Credit ...... The numerical inverse Laplace transform functionality was contributed to mpmath by Kristopher L. Kuhlman in 2017. mpmath-1.0.0/doc/source/calculus/odes.txt000066400000000000000000000003101316273626600203570ustar00rootroot00000000000000Ordinary differential equations ------------------------------- Solving the ODE initial value problem (``odefun``) .................................................. .. autofunction:: mpmath.odefun mpmath-1.0.0/doc/source/calculus/optimization.txt000066400000000000000000000017551316273626600221710ustar00rootroot00000000000000Root-finding and optimization ----------------------------- Root-finding (``findroot``) ........................... .. autofunction:: mpmath.findroot(f, x0, solver=Secant, tol=None, verbose=False, verify=True, **kwargs) Solvers ^^^^^^^ .. autoclass:: mpmath.calculus.optimization.Secant .. autoclass:: mpmath.calculus.optimization.Newton .. autoclass:: mpmath.calculus.optimization.MNewton .. autoclass:: mpmath.calculus.optimization.Halley .. autoclass:: mpmath.calculus.optimization.Muller .. autoclass:: mpmath.calculus.optimization.Bisection .. autoclass:: mpmath.calculus.optimization.Illinois .. autoclass:: mpmath.calculus.optimization.Pegasus .. autoclass:: mpmath.calculus.optimization.Anderson .. autoclass:: mpmath.calculus.optimization.Ridder .. autoclass:: mpmath.calculus.optimization.ANewton .. autoclass:: mpmath.calculus.optimization.MDNewton .. Minimization and maximization (``findmin``, ``findmax``) .. ........................................................ .. (To be added.) mpmath-1.0.0/doc/source/calculus/polynomials.txt000066400000000000000000000005071316273626600220030ustar00rootroot00000000000000Polynomials ----------- See also :func:`taylor` and :func:`chebyfit` for approximation of functions by polynomials. Polynomial evaluation (``polyval``) ................................... .. autofunction:: mpmath.polyval Polynomial roots (``polyroots``) ................................ .. autofunction:: mpmath.polyroots mpmath-1.0.0/doc/source/calculus/sums_limits.txt000066400000000000000000000030071316273626600220030ustar00rootroot00000000000000Sums, products, limits and extrapolation ---------------------------------------- The functions listed here permit approximation of infinite sums, products, and other sequence limits. Use :func:`mpmath.fsum` and :func:`mpmath.fprod` for summation and multiplication of finite sequences. Summation .......................................... :func:`nsum` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nsum :func:`sumem` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sumem :func:`sumap` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sumap Products ............................... :func:`nprod` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nprod Limits (``limit``) .................. :func:`limit` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.limit Extrapolation .......................................... The following functions provide a direct interface to extrapolation algorithms. :func:`nsum` and :func:`limit` essentially work by calling the following functions with an increasing number of terms until the extrapolated limit is accurate enough. The following functions may be useful to call directly if the precise number of terms needed to achieve a desired accuracy is known in advance, or if one wishes to study the convergence properties of the algorithms. :func:`richardson` ^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.richardson :func:`shanks` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.shanks :func:`levin` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.levin :func:`cohen_alt` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.cohen_alt mpmath-1.0.0/doc/source/conf.py000066400000000000000000000103771316273626600163660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # mpmath documentation build configuration file, created by # sphinx-quickstart on Sun Apr 13 00:14:30 2008. # # This file is execfile()d with the current directory set to its containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. import sys # If your extensions are in another directory, add it here. sys.path.insert(0, '../..') # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.mathjax'] # MathJax file, which is free to use. See http://www.mathjax.org/docs/2.0/start.html # mathjax_path = 'http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full' # Add any paths that contain templates here, relative to this directory. templates_path = [] # The suffix of source filenames. source_suffix = '.txt' # The master toctree document. master_doc = 'index' # General substitutions. project = 'mpmath' copyright = '2007-2017, Fredrik Johansson and mpmath developers' # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. import mpmath version = mpmath.__version__ # The full version, including alpha/beta/rc tags. release = mpmath.__version__ # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # Options for HTML output # ----------------------- # The "theme" that the HTML output should use. html_theme = 'classic' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Content template for the index page. #html_index = '' # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_use_modindex = True # If true, the reST sources are included in the HTML build as _sources/. #html_copy_source = True # Output file base name for HTML help builder. htmlhelp_basename = 'mpmathdoc' # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [(master_doc, 'main.tex', 'mpmath documentation', r'Fredrik Johansson \and mpmath contributors', 'manual')] # Additional stuff for the LaTeX preamble. latex_preamble = r'\usepackage{amsfonts}' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True default_role = 'math' pngmath_dvipng_args = ['-gamma 1.5', '-D 110'] mpmath-1.0.0/doc/source/contexts.txt000066400000000000000000000271251316273626600174760ustar00rootroot00000000000000Contexts ======== High-level code in mpmath is implemented as methods on a "context object". The context implements arithmetic, type conversions and other fundamental operations. The context also holds settings such as precision, and stores cache data. A few different contexts (with a mostly compatible interface) are provided so that the high-level algorithms can be used with different implementations of the underlying arithmetic, allowing different features and speed-accuracy tradeoffs. Currently, mpmath provides the following contexts: * Arbitrary-precision arithmetic (``mp``) * A faster Cython-based version of ``mp`` (used by default in Sage, and currently only available there) * Arbitrary-precision interval arithmetic (``iv``) * Double-precision arithmetic using Python's builtin ``float`` and ``complex`` types (``fp``) Most global functions in the global mpmath namespace are actually methods of the ``mp`` context. This fact is usually transparent to the user, but sometimes shows up in the form of an initial parameter called "ctx" visible in the help for the function:: >>> import mpmath >>> help(mpmath.fsum) # doctest:+SKIP Help on method fsum in module mpmath.ctx_mp_python: fsum(ctx, terms, absolute=False, squared=False) method of mpmath.ctx_mp.MPContext instance Calculates a sum containing a finite number of terms (for infinite series, see :func:`~mpmath.nsum`). The terms will be converted to ... The following operations are equivalent:: >>> mpmath.mp.dps = 15; mpmath.mp.pretty = False >>> mpmath.fsum([1,2,3]) mpf('6.0') >>> mpmath.mp.fsum([1,2,3]) mpf('6.0') The corresponding operation using the ``fp`` context:: >>> mpmath.fp.fsum([1,2,3]) 6.0 Common interface ---------------- ``ctx.mpf`` creates a real number:: >>> from mpmath import mp, fp >>> mp.mpf(3) mpf('3.0') >>> fp.mpf(3) 3.0 ``ctx.mpc`` creates a complex number:: >>> mp.mpc(2,3) mpc(real='2.0', imag='3.0') >>> fp.mpc(2,3) (2+3j) ``ctx.matrix`` creates a matrix:: >>> mp.matrix([[1,0],[0,1]]) matrix( [['1.0', '0.0'], ['0.0', '1.0']]) >>> _[0,0] mpf('1.0') >>> fp.matrix([[1,0],[0,1]]) matrix( [['1.0', '0.0'], ['0.0', '1.0']]) >>> _[0,0] 1.0 ``ctx.prec`` holds the current precision (in bits):: >>> mp.prec 53 >>> fp.prec 53 ``ctx.dps`` holds the current precision (in digits):: >>> mp.dps 15 >>> fp.dps 15 ``ctx.pretty`` controls whether objects should be pretty-printed automatically by :func:`repr`. Pretty-printing for ``mp`` numbers is disabled by default so that they can clearly be distinguished from Python numbers and so that ``eval(repr(x)) == x`` works:: >>> mp.mpf(3) mpf('3.0') >>> mpf = mp.mpf >>> eval(repr(mp.mpf(3))) mpf('3.0') >>> mp.pretty = True >>> mp.mpf(3) 3.0 >>> fp.matrix([[1,0],[0,1]]) matrix( [['1.0', '0.0'], ['0.0', '1.0']]) >>> fp.pretty = True >>> fp.matrix([[1,0],[0,1]]) [1.0 0.0] [0.0 1.0] >>> fp.pretty = False >>> mp.pretty = False Arbitrary-precision floating-point (``mp``) --------------------------------------------- The ``mp`` context is what most users probably want to use most of the time, as it supports the most functions, is most well-tested, and is implemented with a high level of optimization. Nearly all examples in this documentation use ``mp`` functions. See :doc:`basics` for a description of basic usage. Arbitrary-precision interval arithmetic (``iv``) ------------------------------------------------ The ``iv.mpf`` type represents a closed interval `[a,b]`; that is, the set `\{x : a \le x \le b\}`, where `a` and `b` are arbitrary-precision floating-point values, possibly `\pm \infty`. The ``iv.mpc`` type represents a rectangular complex interval `[a,b] + [c,d]i`; that is, the set `\{z = x+iy : a \le x \le b \land c \le y \le d\}`. Interval arithmetic provides rigorous error tracking. If `f` is a mathematical function and `\hat f` is its interval arithmetic version, then the basic guarantee of interval arithmetic is that `f(v) \subseteq \hat f(v)` for any input interval `v`. Put differently, if an interval represents the known uncertainty for a fixed number, any sequence of interval operations will produce an interval that contains what would be the result of applying the same sequence of operations to the exact number. The principal drawbacks of interval arithmetic are speed (``iv`` arithmetic is typically at least two times slower than ``mp`` arithmetic) and that it sometimes provides far too pessimistic bounds. .. note :: The support for interval arithmetic in mpmath is still experimental, and many functions do not yet properly support intervals. Please use this feature with caution. Intervals can be created from single numbers (treated as zero-width intervals) or pairs of endpoint numbers. Strings are treated as exact decimal numbers. Note that a Python float like ``0.1`` generally does not represent the same number as its literal; use ``'0.1'`` instead:: >>> from mpmath import iv >>> iv.dps = 15; iv.pretty = False >>> iv.mpf(3) mpi('3.0', '3.0') >>> print(iv.mpf(3)) [3.0, 3.0] >>> iv.pretty = True >>> iv.mpf([2,3]) [2.0, 3.0] >>> iv.mpf(0.1) # probably not intended [0.10000000000000000555, 0.10000000000000000555] >>> iv.mpf('0.1') # good, gives a containing interval [0.099999999999999991673, 0.10000000000000000555] >>> iv.mpf(['0.1', '0.2']) [0.099999999999999991673, 0.2000000000000000111] The fact that ``'0.1'`` results in an interval of nonzero width indicates that 1/10 cannot be represented using binary floating-point numbers at this precision level (in fact, it cannot be represented exactly at any precision). Intervals may be infinite or half-infinite:: >>> print(1 / iv.mpf([2, 'inf'])) [0.0, 0.5] The equality testing operators ``==`` and ``!=`` check whether their operands are identical as intervals; that is, have the same endpoints. The ordering operators ``< <= > >=`` permit inequality testing using triple-valued logic: a guaranteed inequality returns ``True`` or ``False`` while an indeterminate inequality returns ``None``:: >>> iv.mpf([1,2]) == iv.mpf([1,2]) True >>> iv.mpf([1,2]) != iv.mpf([1,2]) False >>> iv.mpf([1,2]) <= 2 True >>> iv.mpf([1,2]) > 0 True >>> iv.mpf([1,2]) < 1 False >>> iv.mpf([1,2]) < 2 # returns None >>> iv.mpf([2,2]) < 2 False >>> iv.mpf([1,2]) <= iv.mpf([2,3]) True >>> iv.mpf([1,2]) < iv.mpf([2,3]) # returns None >>> iv.mpf([1,2]) < iv.mpf([-1,0]) False The ``in`` operator tests whether a number or interval is contained in another interval:: >>> iv.mpf([0,2]) in iv.mpf([0,10]) True >>> 3 in iv.mpf(['-inf', 0]) False Intervals have the properties ``.a``, ``.b`` (endpoints), ``.mid``, and ``.delta`` (width):: >>> x = iv.mpf([2, 5]) >>> x.a [2.0, 2.0] >>> x.b [5.0, 5.0] >>> x.mid [3.5, 3.5] >>> x.delta [3.0, 3.0] Some transcendental functions are supported:: >>> iv.dps = 15 >>> mp.dps = 15 >>> iv.mpf([0.5,1.5]) ** iv.mpf([0.5, 1.5]) [0.35355339059327373086, 1.837117307087383633] >>> iv.exp(0) [1.0, 1.0] >>> iv.exp(['-inf','inf']) [0.0, +inf] >>> >>> iv.exp(['-inf',0]) [0.0, 1.0] >>> iv.exp([0,'inf']) [1.0, +inf] >>> iv.exp([0,1]) [1.0, 2.7182818284590455349] >>> >>> iv.log(1) [0.0, 0.0] >>> iv.log([0,1]) [-inf, 0.0] >>> iv.log([0,'inf']) [-inf, +inf] >>> iv.log(2) [0.69314718055994528623, 0.69314718055994539725] >>> >>> iv.sin([100,'inf']) [-1.0, 1.0] >>> iv.cos(['-0.1','0.1']) [0.99500416527802570954, 1.0] Interval arithmetic is useful for proving inequalities involving irrational numbers. Naive use of ``mp`` arithmetic may result in wrong conclusions, such as the following:: >>> mp.dps = 25 >>> x = mp.exp(mp.pi*mp.sqrt(163)) >>> y = mp.mpf(640320**3+744) >>> print(x) 262537412640768744.0000001 >>> print(y) 262537412640768744.0 >>> x > y True But the correct result is `e^{\pi \sqrt{163}} < 262537412640768744`, as can be seen by increasing the precision:: >>> mp.dps = 50 >>> print(mp.exp(mp.pi*mp.sqrt(163))) 262537412640768743.99999999999925007259719818568888 With interval arithmetic, the comparison returns ``None`` until the precision is large enough for `x-y` to have a definite sign:: >>> iv.dps = 15 >>> iv.exp(iv.pi*iv.sqrt(163)) > (640320**3+744) >>> iv.dps = 30 >>> iv.exp(iv.pi*iv.sqrt(163)) > (640320**3+744) >>> iv.dps = 60 >>> iv.exp(iv.pi*iv.sqrt(163)) > (640320**3+744) False >>> iv.dps = 15 Fast low-precision arithmetic (``fp``) --------------------------------------------- Although mpmath is generally designed for arbitrary-precision arithmetic, many of the high-level algorithms work perfectly well with ordinary Python ``float`` and ``complex`` numbers, which use hardware double precision (on most systems, this corresponds to 53 bits of precision). Whereas the global functions (which are methods of the ``mp`` object) always convert inputs to mpmath numbers, the ``fp`` object instead converts them to ``float`` or ``complex``, and in some cases employs basic functions optimized for double precision. When large amounts of function evaluations (numerical integration, plotting, etc) are required, and when ``fp`` arithmetic provides sufficient accuracy, this can give a significant speedup over ``mp`` arithmetic. To take advantage of this feature, simply use the ``fp`` prefix, i.e. write ``fp.func`` instead of ``func`` or ``mp.func``:: >>> u = fp.erfc(2.5) >>> print(u) # doctest:+SKIP 0.000406952017445 >>> type(u) # doctest:+SKIP >>> mp.dps = 15 >>> print(mp.erfc(2.5)) 0.000406952017444959 >>> fp.matrix([[1,2],[3,4]]) ** 2 matrix( [['7.0', '10.0'], ['15.0', '22.0']]) >>> >>> type(_[0,0]) # doctest:+SKIP >>> print(fp.quad(fp.sin, [0, fp.pi])) # numerical integration 2.0 The ``fp`` context wraps Python's ``math`` and ``cmath`` modules for elementary functions. It supports both real and complex numbers and automatically generates complex results for real inputs (``math`` raises an exception):: >>> fp.sqrt(5) # doctest:+SKIP 2.23606797749979 >>> fp.sqrt(-5) # doctest:+SKIP 2.23606797749979j >>> fp.sin(10) # doctest:+SKIP -0.5440211108893698 >>> fp.power(-1, 0.25) # doctest:+SKIP (0.7071067811865476+0.7071067811865475j) >>> (-1) ** 0.25 # doctest:+SKIP Traceback (most recent call last): ... ValueError: negative number cannot be raised to a fractional power The ``prec`` and ``dps`` attributes can be changed (for interface compatibility with the ``mp`` context) but this has no effect:: >>> fp.prec 53 >>> fp.dps 15 >>> fp.prec = 80 >>> fp.prec 53 >>> fp.dps 15 Due to intermediate rounding and cancellation errors, results computed with ``fp`` arithmetic may be much less accurate than those computed with ``mp`` using an equivalent precision (``mp.prec = 53``), since the latter often uses increased internal precision. The accuracy is highly problem-dependent: for some functions, ``fp`` almost always gives 14-15 correct digits; for others, results can be accurate to only 2-3 digits or even completely wrong. The recommended use for ``fp`` is therefore to speed up large-scale computations where accuracy can be verified in advance on a subset of the input set, or where results can be verified afterwards. mpmath-1.0.0/doc/source/cplot.png000066400000000000000000001230571316273626600167160ustar00rootroot00000000000000‰PNG  IHDRàh7( ¥öIDATx^ìÀAƒ@ aÿV«3[øâ¦m€å$I:öꀂX)óo´"~SQ$p.Édеèú0`À`À€€€  00`À`À€€€  00`À`À€€€  00`À`À€€çuÙ;cV[’ãŽ÷B Tƒ Zpà 8\EÖf} ƒ¿€2§ÂÙâÀHvä/`P¸,väÄH™:1(q L ^8w@ÆwÏP3ý»UÕoÞyëÝ*xš™î>÷Ü™s´¿û¯ª®z…VöÁ´o•Ékýô|¹µÈ°ö¦ïx=m½ôÌc¸–áyŠe¶ÊÕ»¶»Y»¶ßÿÏïÛÿ+—ä=ýgw›'TÖ¦Mßð]×tN=  Žfâ­ ð 2äpýekí»j ¢ô0ÞmXô¥µ'°ò¸Ÿ÷Ãçµé>Æw¸_õaNmóÚZûÍö›ö±|ï0·Ïß d§Ïh5ìØZŒu[Ç5Ï0\›Šõë£ÎÛÒZ×aþ¥ë>\Ûšç×ö/kû³?·÷z¾31ÐÚQŸ7Œho­OAíz}kíðŸíýZ¸¬Œ@“W¨äÄ®`lê+VÜîœÚžÆ6GÝ €¹5š`ù›ÉùÚ`¡/ߥìçû»u²­5€mjÏ—Gßÿ” ×á ªý&÷k;bÞ0‰9Å“Ôf4UÍïþ<ºÿ¬¶=C™ª?ûý>m×fOökŒœ÷õ½5üFˆÞŸ—Üçåp'¸=͵aÝ·Ö Àeõ-¨h2am×-‡°bÎ.Ç_»ˆ °ƒV¾ûóµšúfÄy–€4çi„¯A™ðåç©!dÕ›¿Óê»òá€V[ŸÈ @wBHóµÛýz=(Ûõæühà4϶Öï×ÿ‰¶öÕŠÝîOMýw¸}¿æŸ‚oòëµpY©àÇ×Êk^õr̃¯I3*xÀ×åv­»ªxW1Ž&ÿÝõ;‡k*_¿WmಲÁ±ùX“…2 aÅØ£L»P%‡Pî‰*n5ì)_êꊶu×”/çÍ«ã޶è,ç,j±ÙFCýžÖN"Y ^ ¾¦†÷ys5t  6fë º6¯M|=¨ÒçyÇC~¥V.+¬1v®›\ˆSõrŒvUÛ\ á\÷ÔTÃvÿ€,À (\| ·É±<æ›Îc szºç[v§¹¯‚ú…Y|øôÙé)öK5¼µ¦z†o·s›o€ñèj ¶84`lߟ#pÅŒgô:­\VÊ÷Ñ–…¹˜/@8GÆeÛ± Ç ]Zªa2 f¨e'><ëŠ^Úà›+aB¸PWu“ãëØ>ô<î+ùdÝÔð16LoN<ØàËs¸éä®FÐ.;páj6ƒ*Ö×è‚.—•i¬Ž¯CX‘ å‹ëY[§`˸p¾>‡¯Æœli@7Žß¡ ›uE/—»»T®Á—¡} !Ü¡„Û說Þ@IÕß/æÇëŒçh[½„,ª_¨› ¶ª§±þ4ÌËÈÒZsOk»Â¯Ê ÀeeJ@Ј£Ü$Gan Èf×óï T9Ç1/m*{Z˜G’–»- [™.º¢—FƒÉeør~€pwÜÑjJXl®q{ Ç _› ÔoîÆ6„éIÙ¯Pà jØ…¯©ÝNõÛ<µŒ 6àù¸ÑêÕX¸¬Lç Aô¼ß¢ œ¡_Å;á¸Î«`uAÌ$-ƒleƒ°†+zQ:‡ÅÖ¨h–‘ž<åýo_º£ÕP‡9~½)Æ•8õà›¢©'ŠÙ ¸Úç P¿û5!ªc"—ž]Ïã!Ù«Û˜˜kû€ñL_—€Ë ¾¹ &z.À7רTÏ!œ«àhNCØ2_;WŒÁ½ì©aÃiegK’™¹™abHTé‡b—•/ %ì%fÉÂJïjÉi}‡ö–eñÍмf[m_¯ÖŽO‡mF;¬·X SùR7U€x÷ÌÜp¯É Àe¥|¯CøÑÊW¸µ† ~[+Æ®Ä;Çò¸/áËs!d²Y(&fqKÒàvîög×ì|©Œíš0ÛÇ×ÍÙ¢$g§/µûaþ4Þ¡œµuGýÆÖ [sèÒ,òºZ|¸7ÀØÎ1¦vþÔZ_lî¼¶ÓÃ"û¼ÞËfZ,Ø’¶^»€ËÊåœq+Ì5cl’&× LÓÇ$hY¹ˆh€œÃ×Aœ2·#h±6HÌ2·3Ç$)i®hfN?½ò•n@9ÂtS{WI¶!±’}̘γžç•â9ÍIV¾z»µ¾­'8êàJÖõKH?9*Xh÷C(C‡óó]V.+ø^7€à‚ÉÛîÎcÀëÕúHT½qn²¬>|fœ;[X€÷]ÑDE:˜˜µ—FÀ ÔaPº`E¶3,ÃÚ¦_+ÞÍuGªÎþáÆõŒý¤—ó%X;œ ~~÷ÕQÂÝ‹cü>×±n?ªèb¸¦UJ€ËŒ×ÞyŒëk–ÙÒ¹ÚåùcëE÷lK’øû„@@œo=‚#jØsO//ņϨӡ2Öi^ôêwœÊ—h3|1îKw4ƒ7âÌEßÜõŒ|b¶*T&çq_¯¬Ø¦dÞ5ت%_1 .kº³¥ ÎË Àáׯzs­øøoçE+Ýœâ3UÜ£;¢’ÛUæá«v/†J\Ç[•äµ­‹¦ncÅrУÒñZ>{¥[ÚàKÝabóžÞ„;ºs¼)=¢¶®ééo´X¦¶¯Ù¹eLïÀ$`*_»î¦š=—´x î6þn­¬\ÖwÛ®ðú~a¹T@’ m‘úÅkØ9ë­·›‡â€ÙPÀ—÷£¶†.áQáú[•¸n¹CØIÊÒ]åÎùШ†C”uG0Øß ÜѸ3§2! ÷´&ê—¦®B¦úe{µ?²¾Z[S¨_+¼!€°§~­9†Ú¼ÁÙÀþ\&á|žHº®|åMÕ¯bœž¹îpöN+_»ö€K—3bÁ¡æj˜0Z%,JÕË„+dG»óbJ–Ï›j8Øøºžªa–ãBEmVÇÓ£ë9WÎpŠ[ïá}šxPénV4pÔp?ÂùÝXY¸ ¬±}_ª˜ÀŒèËëÏ‚—ç´\µAgæÊ—óA–BÅ{ës5|#xéŽÞa †q¸š ¾˜ŸúI b¿±ÿ!¬Ä·ÙÌŒ;úy$Rüb]©ÇÞz’«mëOw¶Þ_ÈbO0æuÓŠ½È©·­¬\~íŠë¦òè:Òa¼7…p®‚;;óìSbˆƒ²‰Ó§ÒR”6¨`q"Œ2(á%^£AÓº™yͱÍåyàM¾¦„OP퀪©äÁàP7ǽã|U¾u‰ f2ƒÄp?÷A + ìá‡[Y¸ ¬ÕÚCÝÒ9 /4s¸”i«PÆ×”pŸô)ù6Ë!¬y\ûdjã^¶ó³­ËA¯£“<nÂç‡*Z‚d.$]´:¹w˜ÿÖí¸M©{Ÿã¼ù$˜ÄÕNš“P' ÚL… 6µ»C Cýb_ð’¯Nkheà2€$7}÷±áº4¹øÎ’ç+›©®¹êå¼5‚§KZ/@˜ª7VÁ: ^"Ä… H'Þ 8£V4çÔ{î ÕëfCav›W#Z aQ ÏÖE¦~,±Î»Žú…뙉XL1ëpû¶•ÿwws” Ú>viÒö++—Þ„ó9¹ˆ¹ò펔n6fjŠ6{?=oÈq®z± f,x™ˆ Ë ,ÿÉ*X„oPâRP¬ƒ€¥j8˪^·q„xkNíh×õìW÷•>JUìÄ‘Un9¶µˆ­’–=W‹ýÛ–ô[.—}òýOÚGüQûüŸ>$„ ßëOæO½^C:QÁ‚ë‹NJõˤïaÂ@Ê4x ->Ïe".,J\ Þ³§tÙÐsHæÊK‰n(i¹;‰Y.馑ۙ 9ŠÚ†ž¥ºÍ¶.±3/}, )ëIm7i6¿®GC ŸT± [ú›oಟýÝÏÚÇܾüêË+a}Û•hÊ6{9„¯ª^Ú÷}Ì KÈ1 e•æ9=m.,A©HÀ la+ú&C#BQ¦ýHò9H”²|¹©ƒxϸξãao£õ¢ªëSI\zJbSóToªŠUÜ×:¯cR—Ú3³6†_S¿‚DÅo®€Ë~ûß¿m_üâ‹ö“¿úÉ3ˆaóñ›«é×˱`å\®†%F?ð'Ók6ª^‚›àòLãgÌ58GáælI¢R&ŽØg J1ü#&Ì,ugë‘öà LðçµOT¾ügÒ÷#”> sä®gæpL“Â^gÞ&g˜v›;gÚËð<Åžÿ)Ín³Ó¶@ »\Ðà²ÿåÛOÿö§mýj} J}@üæÁÖëm ¯7÷'ç0[¸ÆÄº[«¼i<'xs·soý‚E‰|2¤…÷J Fñàfs ç®g™Pη3 çcÖs¸Ø5Û+>„ê ‘«fgŽŠ™ß!îS·£~ã©P.{V¾ýáGíûúýöËýå# k¼³Æ1Î3—sŽ~€ 0 !LøòH´_ßæ•%gñ|[›Ê„ 8ÁѰõÈTïȆë¨äÖ¦Îc¾xݳÉgxÝqéPÃnŒx½± ŠàRý†UÂûý¨g˜¶*çùNul*GSÇ*¶@~Zí!Tð7× Àe¿úõ¯Úg¿ø¬}ñÏ_´Ûzk_~ùeûÑ_ü¨ýü~%ßäð½aÂâ:„Y21WÊl,0§’ób‘2á†Þ:”0‘òÕ7~~šÇ…Yœa³ÄšH÷–[å;ÊкOí…úÑ—b¾vÎèyðÇ€êƺîz†òêíÄ…ë9¨î,ÓÕÒ°kÊVòxqKn\#Í™·gñï¿û]û{>ÊmmßL+—}úן>ÿû?ûõ¿ýº}ú7Ÿ¾ x’÷ÝÄÁC¥Æ°åyŽxŽËC¾ÝT½9„sÕ œÀ­E7"a+à>ûY‹ý*a›B*áá5_x&µ E7Ä0ÝLhgÜ×2~ŸãzøÊ†7@3ûÔ¸&2Â;Ï„î#ŒewÀ>ªfªdÆŽ¶Éüä>jŸ|øáóùßÿ×oZY¸, ALȸQÃì:‰•y~äæ*X}¯€°Ÿ˜EWt]øÒÝ/næ3ËS†°Î3£óxp{iÜI†ëYU,Þ·Ôˆ Ãõ ÄlóÁÞ†ïÀÌ}À6®ˆ ³3—ÍÛ¸­ë­¬\v.9„¯‚sçÜã5ðÝrÕK@_‚/~r®‚c„ÕuG³\eŸªÄ¥q¦:3Ÿ©r¡„3^ÓÌè–ăÛá5 kàvÞM⦆ _ã‘ýÜ5ºÁY°} Æï@ž ±ZEœØ‘S¾z^Ü|ÜwY¸L.®ßÞ±N¡’)_€Ì04¯z£²9|uªcU°¶ž==Ö`J·–ôí®`¶iÕK$¿`‡1…v vD™Ñ.2ÏÇŒ_Ä|c7î+;ÛõÈÆ’×½ž´>ÈõœÇ‹o÷"( El÷ϸ9A«bŠyNýîP?—€Ëä-#·rÂ9XôU³ܼœ¢¯ŽóX0í"|óÆ +ЇuNVtá¾ÏïvÀ›>ßíìJf¼÷0FКbŽ”°%gÅñ`Áý³‘Ãr\﹓åß©†íhŒ³>ÃØª”(ÛžÀ–׫£³‰råsG‹³Gx kë`eà2y¼Ö ²˜ŸWÁ:Ìùªc×ZJaJÒ¢ûY &xéÂ!Œý ^ÒŒÎeY•f¼÷>v|à6XC 3ws ró·Ï,~—$*_‚šné~€/¾Reßõ¥ Tžndó>t#l/üÿñ¡îç²puÕã!¬ï–ĪY×ToÞ¼JlÀc ßyk¬lj‚—v;ÛšB_§\λéSìêg‚V˜œÅ5÷yGírÛÑ~^Wï¸4lYÂ$¿`eà²Gç (aÆ{ ^ðz&´)*߃œs=7$g¼AÒŽèÃY(šªPæð2J ²T ré’N’³˜˜…íIÈpÆg±ŒÊ¹1CZú9ö-vÿqßàŇí¸*×5¶+õØR ‹Ç/¿ÊðZ±×ÖjÉ|Ž*63÷óãˆPV.cò‘äæl{¶/œlæOuLPK°K7wÿE]éøY¡K’o݉³_ì€qG¹kä yÚqÁ{QI r¾‰f¡Ž³ò’fã‹3.ȶø§è$P´3ð%hÖÙ´æ uˆÎû²×çñ±¯²¬M[Ôo T.³í¯XY¸Lb5œCXÛ5›‡°ºà}Ãw¡:æ<`¦åªWüþÇT¶óÏ´SáòœsìˆX/ Ë5 âÀpY»1_À7IÌbsž/,ÆÁ$:ƒšÊí6s‹—ñ<Ù5I"0_W(ܪL´êç1Áºù?ˆy†½ÁÉñáVV®OS2+穯7jð”ᛯºœçH&%QLX^‚+JÌb2–»ÍŸ ÜX•¼^°ntWÆ‚·c|1Qºù<ÝÕ,Æaç‹&Å8Ú)~¬âüÂÃC'ÿšzñá=Ûóëz÷tÀõ›šnhÁµ©_¬§òÖÍ] %ÌíI `‹Œi[O€pí Z¥ öâà È">ܨ¦­p²ã“©}ˆ ™Ò¥O…àVºŸýd-fâÓÊ ÀeóPÉ!¬YL˜¨zhÑŽyÜèÝ2w4æ‚X°8Î>ìžQ¿Àm ‚;!M¸šÊKŠ/è8·5˜z^';︯“’5‹·!å‰[§lçZ `»Ñiîæ¨ß~vS‹¢~4*œ=%±iƒùí8¦ÖÔaûÚ qîaL¨òZÒ82A¨b¹¬\t=ô“5€<º‰ÿlãȹ>”ä$x7‚™sbs±úe¦õº5°}Ð;0¡„y´ösqÓÀ`P½‹ã>¯º¤©ê˜˜µ44òwš3 nxƃóFû°QÃÍìe„p;@XjÙ+¸ÑÏßIc¾¬f÷4’¯ð­AÝ´I++„åmëCCùâúŒ ß¡ î ô:•0cÀ˜c¡‡ʾú5xˆõ¾Œ~ÄpÌx¯¶™xpŠèg µhjöRò•Acœ[ÆÏeÜžÔ0®÷qÄÅ@nfnëS#ã³§ˆï¦1]Ï6 S ojpµïÀªS‰R©§…&Ñ‘(.+—,×MB袆9z×K6—3ÇxnØ™Ï~öÆ¡?Í„.UdœÔÂ,cz¾„µ­±êu¾€ï~.Ò]ÎŒU.ûÜÚÖ¸áö¤Öe,U3ÔñÄ2¸”¿73€¼A<¬[%í¨èÛæ¨\È!gï–6[®Ó ¨P.Ë+AåÆ8g¢|ýóÔ9žwG÷¸^4mЇ®ò5u¡sÕ`PÌ~G$ÿˆ€zª›#„5/=8ïÕÛ|·³:ßåóanV5k9(A1G½‚UhEÈúêØÆdÝ lÿl?pêå¾Æâ—¦„^Á* 㬠Ý2ulcGùŽ®"ît1Û:¬7E¬35ÌïM^?úí¡*þQ[Y¸,Üvs¾RÂ9|çU/æ¯>£ÂoÔ´Ák @?ÜkÛ1GlØ{ç)&îfÌ#›|âsÖä!½/í^= %üŒb¨Å|šÑHÖrÕqã÷PjW‘Â}‚ëÙ·ž@¼Ã¹7‚8£ëÛbµ²ÅÙÎ4ik++—]×”„ËÀæÁ H8×!„;¡Ä}3n‰9B˜^ƒüÙHø¼fuÇœgTS”†@–ð¥žÏ›ðe–¾:‚Zf]Î^G%*á&ëýŽÖÝíÌû; XG÷µë¦æžaïØs½vøÙëÄ€p¼-é¢úåÚüµeà2‚'‡°\ˆO©ßý¨I'ëiRV¬:Õ{&HÎ’zÑCÇŒ;ͶîœÑ‚"óîýÜÝŒ*®h¾îgnpÆÜLaŽeh%!\»¢è„âµqî– šê˜žoÜà7} šû‡m±y'l]ÔÛš€v¶Ñ3±ñº•€+;z¾/n®~c¹ê¥õØ7p€eÛ탩¦õ0YŒ;.ó^ÁqãÄù-HÝ›Û`M\Ò6ïc—³ÃwWsî^°‚MøQ¨ÃÙ¶Ô¨ŽeTÇ c¹nHàòš>¨AÊÊùÉ@Ü\ëu‰%·o2O†²pAøZ¯ÝØŸ`ž·žApÅV˜yïÀ°W˜à:IMBY:Ç^T‰Š½¸~+BZèÜ':Õx½{sо'Ì£nOì^à’6ã^aSÉ¢Ç× 0uöýBÙfká¶v@Ü F;úÀ~zIww}÷? Þ¨šú}_[Ê À冦ªKUp¦»™c¡¶¦rãF!bÒÜ‚˜SÄ~C(æ ü¥qÌɈ†:ÜcIëø mvC7ØtŸµ áÎ&pÊëŃéŽf,x¸vÜÎÍïl&ˆqâu;„ó,…j¦‡%SǦ¢ç´8¦¢I|Ø® øªsmºÃØJ\ÒfTÊ~@.+Wv4㜩‰:J˜Çø§v\ûnCBXÛš*^Bîf&e¹Û”¸/Э€qânfF4ÜÍÞ¹ãêôT:‚–€V€™ªVÛL,Ø®^\Õk ™YÐŒË Âf–¥îTËbœØÎ£ Zí öEïǬƒ]ÏLØêsÕor½>A·'°L„²pÁ÷1‰Y´Põ¦sˆ;£å6ë'`#%Œ×®nR<N¹Œ%ØÂµ¤Íßx?\Gw³©cŽ3ÃÙ®‡Õè’„¤,·ðÆ|,x»?ã~,3Í0§53«Q-k¾iG\Jú¨˜—Óã¼ êwò˜Ã\øâ\Ïc·w\骬\®g:Ðæ³r§qå‘F{5ßÉ-A»=§ù¼Ý„ oG«ÁÅÆºÐb¿Nç$n=2p‹¦ ÎÂSÜR•8®›átJW»Ê8ï‹°í/\ѲRÑŠǨŒ0w¡_c¾4bÀ±{Ù½:hs=«íÜÛžÁ]©ˆé~VnýÒȾ·Jcø–€Ë4ýk5G8ác€wª¦1!£-6*äý*0S„–± Õ«G¥ÎçÄX¡×ÊÐ{6,úªHÚ¼PÀP¼®êÕѳ«îV>#x銶gÌX¯¿/˜±`lÇ1˜>ÂídOóç­ <;X$Š÷ºúÅ}Øö) Kð™òYªŽBžw?—€ËXŽPqÎãD,Ìyà…ÓJÓWv¦æ4HÆÊœxoãÁ;h—du&SÇ^¦mª‚Û°½Å¿ ÞŰR7ÚÍFóžÁ+µ2Õ±]o+þ qb½á|w.ºóLh{ÎtI‹ë’¦áç¿kãV§žUÇ"h-Tµx@v“Ë ÀepÇFFæîh̼´Èý­Ç±Ä4q«\{6µ­NkBdänÛæf?UMئp0'kŠjÅú̸h%^Q{%`U‚™)_b®h/ÓVQ#šçÝÛgº1—ôXÜÌjsI³þ3ε½'õËu((Bט|ÅíF2ÔoY¸L9Âý™„ Q.€ÉeðÚµ:ð‡ F2VdÝVú{„Å<|Y½éÔøJkÇ:SIô˜ÑíÞŠ(]ÕÂv…m¼ÌufenC¶Zñõ[ëÎwγ…´¸V4ç¨xG×õô@"Ý*hMงg²8þ8êkG- …j·sÿ/UrY¸ìz»ìîì}ucÀÌŠæ^1§±@@³0&|#"l$Ù~¤ò¢ GM’Ö÷…‹š÷Eµß»8™ÏK ¬w÷ý`ÀfÏô³»ƒX<ÅÌø#cÁø=Á»ø?CíängÂØæŽÝt›Û3žÏìÙ+z ?@ý¢½e®’{&£Dð&GqƤÁÊ Àaª`œw*akB/xë¼Ø7ÔkÊ@Œõà „› çvt¨àx Òà]¡v»gš B‹.ë¨X~ǃA ÃílÏ”®h®TyÞ£å“/¾‡ÙÎPµtI/Q–t”ܵÞ¶ÞÏh¬žÅñÜЧ874-áûêø½Ù®eDçVV.°ñž>ƒ°æøh€¬.œ©x1+š"ðŽ4ªfJªiP¼p=óY…àe1µ\Och´xrSãbÎÀ¸¢Ù¶Ðõ>8C—óâÅ‹m›kE¸tI/sÅ9n.”w5Œqœûx&4Õ‡íuõ›«bÀµ¶Mâ9++„søÂfÜÑM W‘ mãÞ†p3Å뻡ÍT¢…„okÉþÔ†‚P¼ŒƧQ! g@×Ö-'qív¼fªh¨ecúb™Ê,Ö›l›yò!­ÈÆ Üη3ç¸?8àž™ºžçÏÿñ&^£ ¨^Ï ýͶpÙÿ²wþ*’W¯ ¾28qèp…L(ð XŠ¼Â½™'ŠÌâ7~ƒìhé1)0XήÁ+Ü@ÐÓ ã¦á콿:çÔp»u ™î{kf–iv~óß7ÿþ¦<ýÅÓòêÕ«Ò{/ÿúãòü·Ï¢|­;3€¹7nK³xmþ?z˜æøb{µËÓÂõ)ð" ÄxÍŽrìžË|ÅT4_¼S ™Ýb”b¶óqÊÚÀ›×‚™¶vT°`_8™’>¹]Òì®ö~øj™éâÊTr^ûÓÕ:ðç•,;ÕÍ”¹üÚ¯•ÞÜX^!©¼øã‹òä½'¥ÛË»wï–~úÁõõ&ÜåùNPÕW¬ £ù Ê.«³9«a.ØTð¼vÍwH‚®7øæà5õ†š š¯¤õk¾y˜JØT°¹ælý\+Q0í.Ö]†"\Cƒ•ó\a-ØÛš…Ù[{÷¡b£j7¯ ‹ŽL›¹îã¡IÀµG­!ÓxBè3x ¨°¼â¼s}ü/ô=•»ß•—ÿz Ôo#&§vºŠŸÁÆ,ûè…¸¬³³ÉmHFÕðÂ<Ñ ]ð^L¥™ªÚ¨¢ KPcob¦¢_{hãÌÇ%ošwÓÎ wnuÔ ãZ°4„ôic8ÀûV:÷SÒ'/íÔƒ÷*ˆˆÏ,çG A\Ô’«Ê[ À+^þóeùò¯_–Ïþô™w„à P0DUA¥\6vnî–,^cºqUt{#vÍ9üpñØA÷Ò·ŠÌÔ.ƒ™¨ÿEÒ|jL‰ðmL?óaNIPF)xC4©h_7\w븼Υ¦‚yŸsÛ•“àåÃR¨Ï•Uø v(l§Ô¯Lb>M?Ç*7x~Æç¼M±¼âš~þèç•OÿéU ¿¯nMEºÁ×oMLùÀNäÄf­ ¾¼™æÁŽ; éÄ3L”Û Ö29žå=ª£ ˜Š¦žB7±—B³îWfÊtƒÛyºŠW›åÎVéæ)ãKßTTÁ¹QÃ)µ0dúÜà $4ZÕYÈ ÎK<Ì»ðR™ ×ø÷Ó¨ÇTô¾þº¼úû?®Wz?—7>€—Éþ‡O?,Ï~ù¬<ýÙS¦©Ë÷ )†€¼PÁi=Š^CTÁ7p j›˜ÎGð×p$É‚XUŽ5¬Qš n¨ýæ:×@ýB%w¿­Ž a¶sLCº|\æÓ†èM€kѦ•qv@gF TÁ"Œí^e·ó|w2!ÍÖ¾‡C­Â.dõ›‡âiH7ªb|ßÞ=)?º»»>ÿÛ^”7:€W<ûÕ³r÷Þ]yþ›ç¹™%Š}ðâZ¹F *èÄ:»a§± Šz0uÊibàqT/öè°C †sÁÄS¥–û't¡‚ñèXYÂÈwn+Ù©¥åÖ}Îú-woWÜdí\<.#B’Yœ*n¡*–w/¾Î´ý-[Ó-ãh“ŠY^v#‡2μ5±¼â«¿|U>ÿóçצ«/^ûäwŸ\;¡ýhhqÿÓ]æ»0{¢„éÄœ¦pN[á®"׌ÀB‰Qn"@€ô-xí9‚Fñy³»j7ëx݇ö熎–Q抩 Ð}Q‡I*¯Éqõ…Þ ™šè=Ê£j¸œ¥'*ƒµ© =1û’Ç‚ñðŠ÷ò~ùî»ï‚L±q܆àÍB š­cÚ¹6>)öÄm¥è,Žþ·±ËU±¨ÜŽ´X@«8PMf‚ËÞèý¤©F,;ë+]Ì0×fäÑràNºŸ‡À|€3ðú5ã¶ó¸m§d¹F š°j(IÀ˜Ñ )öº>ÎNMP·\µ¯X^ï’AXn—#U°"A1mל.RS¸YcÖù¶½JöÅ <ñR®„Òr*a¢õÒÇ©èûR$ƒM<îx’Ý;Á#8wšyvUéTÅ\QI2«‘Ûº'™æîT°’îgÎÇ ¹^·Íñ–O,÷P¢¦óÔ3C.Àó®†ýÂý(ýœƒZ„6õýŠà^v‹J˜fˆ«L»ö¤\N#³û×^Ψ¢a*ºC¡MeA­…j÷‚ë#§Ð傘6¨ºI-X¥ó¬Ä-Á l—4U°ßˆUðº~Ív¾M˜´HR$u_þøÑÙñ|lþ·NžcDªxÅðŠî+@8C f_…Ê•S>Üú [ËOµ¨^š&ä.Á‘Z æ’ÍÉ'ïíy¯:mÔŽ5HÍ[Xm× k\#tnhTÃñªOÕÕ‰ †"…ÌÙk: E¶oõ?êÞY9é9HGð%Ä_ý2»vÄóµ\vD‡±bx…ðfº*_ÐA8*á[Ó Î á«±òD:É üj¯ÓkµFµïÄ(ÀI5CíúNI„îðgÕ¶L»€{b:š©èfã4 çžmËB貘``Þw Övk iq< AõË&Cž ~^ÇÍœ'5€¬&AÜ&A«Ñ™ À+´©ü´Âb ÚTÉ.Õ+¦ ¹úö`¶Kê„9ð´àë—°ò‹žì ÁËÏocÒØ F€.På;%™.t‡€hÖp•=l|‹æ„=©êjƒÏHç©iZ.R«&H%ª÷ò£ì5ÆÝ5¥žiu˜¯®ÌÕ/ÓÙùÙ€(ž©€(AÌ:1 ï»bx¥ŸåÿE“F RQx ku:áÖUŠ:™cÎ`à F4µT[ðû܈7ŠDdMX9t-½ÞÕ˵ÑXµÛ¶©h¦¡~Vç¶mj¸?ØÌŸŠ‘v…)ÝÓPý¼÷©òefG!c7´|µ;o5H¯xóÑÜq&DV?&\{ähÅð Q m e*8ù`­î˜öŸ‡à¥h·Îèá^dSÁ±úª¸ê@a}bÖm ¥ ÀÁ%©j݉UžŠÀÛ6ÍXLCS»ýa(C—eY-x¬tïƒñ¢êÀºà¥Û—u:×Àä#W»Çk¿Ç L…lå%€Xó žkÂZ±¼J–}8«È·½áÓ û¹jk0©x™oѸ´ßãX’Xku[ˆbU™à…"†K’û‹Ià ”%ÉÀßnj;Ò¬QÏ)Γ¥{£sÓ~¼Õƒ*·â³…^ÂüŸ¼‡ÇeI®†Mjo*âÄ)7kcÅð !8‚°œ¹`¤þLøˆ5HSÖá@i·× Sð•µÌ(D¥`]¶—Ne¦mC–]GýÎM–¦ß!®2YI8Ã*ÍXEÅjæœîU »2¡kfô+o²ª8ç”L`Ë=Ï©BýzÆþLßãZKê¹TÜ9 s\æò©J9+ñŠà¥~ H·=¿édj3uö Ù`]áª}Ã^7µ¡°nržQU°Ø~.%醞;ã tó Z—>V½“å©ÞŠs´6 ô˨ñ¹ã‘Aùð÷ˆ§›W,¯*Ú*a ¼ÁÀd·ê¡â5œävo¼'¨Þ ädØÒžÝP7oRö¦‚5€±…u&·Šô%jÁ=T'è †1$Þó±FuÎÔ a𡚟Fã_ónàºWóMÓÎÁ¨Â••ócG çØ(IÐ>~ˆÒ)Ÿàžñò^^AÓzÑzm ¾L)5Iw?!m¨Š.Q€uÏpÑ×B;W ýH’† …t¼\ðrkU0;¥e×+VÄ•âf,Y'ôh,I2õíuDŸ¶P&t ™ymÖ€˜<šå>cÀ5ú(OéžàíY<§ÄTüþ±+W©<ãÖ˜#«v´žL¼¦)í¾ñðŠ#é*ÖA9liWÙÔ†¨D, Â^7pu, SÛ7eëáüð2OðÒ]Ø@Û»Aàþ]'Èîš} †»)Šªy0V>ìºì9SÐü÷¥cI¬—çÑæl aUÈ.ç<åŒy_'íÌó*Íò¥TÄÇ;Ÿóf8~o=¾:Vè”W,/øZthCߢ¹NÛ‚ÃmYC7Tàë0ª;•`°y¸oîÒ-ÈÒ Ž:}íyÛí‚RágQÕ™]ž|ßàÛÇ.CKñAl*½nSº¥6Tö â½âUd$Åq˜ôØ1¶*d—sŽð¹©LÀê²¼Ïþ{~|þ× œB¥÷8.•RaÅðzw Bé/¶Á5‘¥Š:𪞠!Ýg˜4gƒ0êÜ…Üë Ž¨TRß7K¡rtƒ~ÂÖØä@xÙ¤ä‡)hÓ½™Êõæ…%¤› Èž;’ ª5¯© ëì›ï› ž‡/€‹×¦û˜xm?^V#(6G¥ê!0 €Üfóí~|µºbxT&zVå5*ظ¡[« ð\HiÖ)ƃR¼€²6€À…âÅþ•¦ì¹÷o» åªqºœ÷Š´””ò(̰ÀÈ ™=ï-ÚÙÎÖœ­ ï5ˆ¹e¬YÈ âÆêˆØòd,:EBV·àî†Và5Eø¹œYpR[ kàØÁ&¸¬†ІDÃv0¡€Qæ‰âF²Œw¢ê3À ´!¼Å½VÁi0F Ý€.v¢Šq¸lsžL(1xˆ—«\§æKbÂlc¾KÔp;ÙÊ>|—ÇuËZ0ˆ±^˜“²¦ Y0ÎOÆêÐ]_œ’;¼;€»àEL ¢'5XË{ÆÚüÞ.A àÍW/rº[“ª™\S¾u3rP¼JKrÏ*ƒWá6˜—NP¶E9ª B¦³‚-\Õ ýP¾¤¯ëïÛõ܆rİåà] g` Ȳ]'¸Ÿ±f„a]{Žæ©UO¼¼:ÖÊ:fÝ:€»á<¯íw7¨’…¡¥y€תR;ˆV€c= ”_®n´ÄâpýŽööxºfŽ+É-‘(¼æz!A¥³zê”%_T6xEg€+E Î€pÅuʦ0ÁìV±&ÖZèeE¬ï¨©õFú{Î+ÓІ/Þo)ßÒ}mU\ímL¸/_%,k`žL¼!+AÛ­¸û'$B ”%Á ]Ð/€¥”`É5Í¡EhçhÍ'èÆ¤À‹Øp.îë¦û Ø¿Lø̺ze¨`3y«¸qoU‚v?—îIHT&x¼žPâ,Æj‰WÃÅËʇ*e]Ï;™„{n9+ƒáÎ |¶IbUÛè1àñº›$d)lâ¿PƒÄø6¹š Nnh¨Ý‰‰Y±*Æq?.CésµO0+ø¡RÖîdƒ®­rÜÓÀ úï%FÑ¢Ÿ Øç˳6 69ଽYŸÝõðm»«íW@ÙÜ7êpw*tw“<ˆÙQÙ¦u“½‚¬¨)YåcÚ÷±1(a:ˆ‹B§ç™³²f.ø;0 ‹9a.hÜ/;ˆ{Îe¢·ãŠB’*M‰ýåŽ"9ìY«`ëæUÊÓÅéV‚ƒ ï†tUat“¬4:lÜî1Fàé½ÜÐ<® €±gÛtç S 2½­ˆ…gâˆÎJÐ…SÛ"×-VÂí#k­ã3€± €.‘@ý‚½[º¨h^™²öng«Nï߸qÆWƒqµ«yœçªÞ*”Û÷Ý:€{%,$0‡ŒµJPæ´.PÁ/>aÊÚ ;•®¥T0ÀcÁ Ö ’²ò£IM”Nîµ²Fßà õ„ã:‡´·¡ÝT&4ÍÌ´nh\Å¥+ö ׿ý*§u^è£*e>óñž¨[—þ}ážÈ`HàˆG  õkàjÝÓ~…®Ã·­tkï%ŠëÂ$+†:]tc9p—d<»ùªwÏ€r ÄÝ:€»É´vð e”îQj×%*¨Ü"xYŸ“UÇv|^ñ àH™ÒøFÕ]Ò¶rÔºÐèÙÆõÌS¼?Ì3*X¹Û£9è6¬Mñ8ìò9Ë(pRVÄÂ䨍ߤô¹X 4—£,“„)V…ê#™-/" N*W 8^ËÊ ê×BXˆ×Ir3®~ÝÚ*ט晗dži) Û®h(û/ˆ;€»=ù«'ôÑ_|DWWWãýåå%½ýߦG¿ô蕨`@XÔqVÐͪáÑ$©5ÉUŠ+"µE*’ÚÅ LŒgãà3¢-À@7#„‘¡Íœ 6Ga†ó©ªÙë hV±`€ÐßíúUF"˜ d@ ­=þ£ ت_ÎÁØ,º—ëIXø¢ÍÀvÉ‹aá뤠~qËÍ¡~°,€á\øÞ'(Vœ¦Ú‘¢Æ{Ôöòùz(ŸÖ:€»ýñÿ˜~ðG? ‹¯\Ðã¿÷˜}ãIº¾¾¦÷~ç=ºþüùõ{ïÑoþÖo¾ºsÀyÎ"þ›æXs˜€—hâ¢xµûI7¦a= È º ú4Ãv;`.›•!bŽ…jP0—9ŽôöÆÌñ³C,ØÁqš ë1h£e±…„°x.hŽó3¥~M¢to@¼<#šÑ) CƒWÅ}™j××´ãš?ΡŒ½R½€¯6—žù… Ô-‚®_Å\¸ÄwjkVÍZ ¯†¬øýCù´ÖÜífwCÿÅÇÄgL9“[¡÷ÿÓû¯ ›ŽAȊε'ÌŸŠÐ¸ D[bòÔ00ÃåzÉÀE9Z¢ #Á8gdDËIQçˆq;¹{=SàÅ=Ñ>ª}¿#’€:Ô>]­ÏG«ÞÌóPWÁ #ÆŒ¯©¹#Ÿfœ0iß"b€ÖÂ×þ7g¸–21àƒƒ^HHcº| ˜)“%-¤+¹ˆ]Cm¶ÏüxKÝÎë›'´!mÜ«]énéÓZp·ïüöwÆëÓÏžÒÃ×Nž=}ú|íáÃøÎKÏ‚–Bo[R…*Š™µxx«ZöaŽ’P¿YÁŠ0À‚ÂcN!,›AÉ”™ÌèèÅ{N**`ªøE±”ãÏÆš³Àµ“1ðE¼›§”c† ÎÄ{qPÉã-‚¹²&ÞX»ñ¸g³Œm¼!Ëá†ñß‚&¬®E×s[zc·DmRy¾ÞÚ€æg‚qiö³ŽeŸÔ-ýå°àn_½ oýÆ·èƒÿüqró~ó×¾IŸþå§§óO@‚Ï¢T¯-Ò¬h‰óˆI¦ð6jUÀÀfCÛ~¹ Æ|›`!Dî6ÂáytÇq“ÕF؇í”À{Vp/ÜÉ.*þsüLXÕÝÆ*‡Yï.h &:ì•É0U L’fú06¦¡«àœ)êÞèÜOJ—vGÈrºÑ1_¥~_½“ÊÜš›­Hí¼ âü ·¢Òâ¹na¼wmiÊ óÓ[p·Ç÷ñ˜tõÖ›oÑŸþÉŸÒå×/_á1¤¹ïé£IȰÄ•4O*˜„h—à•ÞjT/ÖðMüT*ø‘Sêx»Å½á‹^Ál\¾œK’R­ 5°U­ä!Bx7fd³‚°CÝV¥eðM”ø–Hv£XߞşǶ*… ›zYÞœ‰Æ¾°¸â™ûæ»ñ_’ëyc»Â7Ñ2I@Ìwc]Ax$´`+ +d-Qjë1`¼¼'HªÊ©dZò3ïçËcÀݾó/¿Co<~ƒ~ýý:ýà÷@¯Êx3‰Í´ƒ¨aÕ"–[G7ÕÜ9bŽ»¡a{b'ß$üÜñY© 16üte½„âQðaµ÷ÁBŠ9všñψ|r{{4…ÈdõJêó*åºÀÐ-·øEˆ˜‰9!˜ngo™¶$ÈI&1["WSÀûç âárœÃí<<ãýݨ€÷ñ÷¹³.gøDÒ^Û.çû¯ ݪ ½¸náÏ^2_ V=ç—§’—{NoÀÝÞüûoŽÇ‘¾õ¿5Mz%ÆP„SÈæü#Û&œ€„.B²cÚÝ>ЃÄ-èËU‘‚~ZÚMµaf¢Ñc{v‘P‘†KSNût¶#à‹!SŽ1@HôÑî‘è¦è!Ú TðARÁu9¼a_rpùo"„·ˆvˆ§sÏçÄa;^‰¶ÂYgµ«BØú,¦}“9¹Ïǹ¾ô4t•›²™Ï¼Võâ&xý*èÚµŒ×v¹Ò<=´s*yµ2>½uwûð¿HÉÆÄ«ò1}ò¿>¹—ï¾÷»ï x矿Cïþëwsì*)l‰Ây$ ªð؆âƒm›ÇÄ:Sê™n¾ âÓÈ 4fGŠªUUT0Ÿd‹Cží„±Ù\˜(ÙrŒSSÇD騧u¸þ‰™éüÌ+÷³ ‰ƒKæ‡|•™àñ61îöd7ºf/pBÎQ¸$¡Kr´MvPúFA¨ŸÉ%ŽfýBĈ܎ˆÏ‰üS"’„¹°‹T¯€Ê1f!ð‡ÆHê}ûu&¢ ޱßËQ›ÊÀ Â8+&ÌÀF<-7Êw»ã´þóøÚE ÀW®ã^‡1î‹¡²›O]j×>[_ Ý6˜,ÔNªŒÛ_~êôÖÜMn…Þøå7èÑ£GãõâáŸ~ýôš>ýé§ôäÉzç_¾ lTÐÏ¿{„û·ÿÉ·éÃ?û0à¿EDˆ„QA)¸²ëm3=®Â%5y"Žäkçôä'[ºÜ‡I“a96cç4#%" Œ£µ5èž&è5Óööœ.yKÛçÄôÑpIâ/€«}º’JÀõ‡C¦óNg5/I¬Jß°À}iZòaÒ] á6”7ë”ñzà.×:½u÷sÀãøä~Býä£Ñõ|(EùÝï}wŒ ßÕ®~~E—_C6õÅëc|ùEc9':{—H¢jiÿ±tUñà8^‹ÐâCtñ;ï’{þ÷’…j×vAÉŸ]~rI—ÏÝïO¾viàÞþæ¥Ä%b°Ÿ]ÓÅŸýˆäê**ß¡]Qû,¨á b“_:ž&ØÿlK×hû«ß¤ë„\o<5l¨ï‹u¬7‰>ùýïÓ[¯9’[år^¤r¥ (=Þîmж Œ÷Ö¸®í;‹óz8ŸÞ:€»îæq¼j“/ˆè{?"zè‰./ˆÀÞ”!Óv2Ê/†ÃQJøˆ®ÿð†ø¿Ñ'IߦÔ€™"0ÖW$X…K¢ðˆ®~ö]ýÑù¿CD_O`~ îÕü/>»gb˜;òtMׯ_Ñõomê‰þšˆ>G8 ÛpÁî3—‡˜uJ°¢pAòì’®ÿÏcºùŒˆ¾F$_™Î¨ÛlÛ‰M2‰×{òtEoÿ®#ù™'z"Qùßà¿'ö‰«Ý³ž7–…Ù‰ÍQÛxÅs¾ÃÏå{Zw+¾Q~÷ã§Oé/Ÿ^sèôÖÜí꯯èþðè곫ÉúÿÛé®vùÕKúàgï¯?»•µË›D.ºüä ”™@ æ zÙBY®éH ß^Ñ#º¡+ÚþR\N1SŽ'%Qý„íQ"&ã×ä‘\ÒÍís?Ÿß|¿-Ï„ä«).}–@̺…GƒŠ*lPJðº!OG7«œÑ7Ò†˜âØy¢[Äx I!ì“öL´‰ûL‰rñ.Æ!Ï÷y„ܳ˜F»Èg9KŒ°OQž kýŒ‰t³ü´Ïk’pÓÊ^…6ˆ=ÑÇ3@Ø‚XÚ0|Â%þß-̶+€[ùö[/é­×c“™ÿÓéäÖÜíW~íWèÝï½;VÃ:˜Û8Zacs‡Oÿ÷§±¤åƒ‡ôÁý€Þÿº®´D2}ŽnA#˜XÀ¹M¼p ˜·k¸‘¶tC燺ÉLD_!ò;|J‚U>€­+‚WޱÎmÊt¾ˆ#<¢Ýí–®EâÏüùüÑ|H€0±ÇÏ|p\ƸWQPBŽYÎ×±æWHoñ™(ÀhR*ìoŽ Æã@Í©°%’ "º;@‰$DJÜŸHÊÌ>C W ŠmÌŠ×ìS(BVìó|qtb\>á ¨ŸI|Íû)ˆ¹’\·#„Z¦2ÖVÃv=p±‡W§nñ3P<½r>½uwyß5Ÿ™™Þÿï¶Æ$¬ú혀¥Õk¨<ŸiÕkØÊT<ñ@ùÌWÙÑ–oèBˆ¶ :>¶(Hæ ›Ò˜Åìàr>‚IÂŘlµ LWèz  ä "‚*DRVù8&dúÙúÔ|PhGL>]oˆÒõüÅD'N€?ó‚>)@Q ´ÿŒi¿¸žã/I„i—öˆþÌq*kT=o.y6ê~¢zý˜Õ-Ã51%bò:ŸBÛðzÐéÛ‡r¡^ŸEïh)woÖ*¦ß;!tÛϾôêÇ^‘r>=˜;€»ÅãB¿÷ï~o<&ÄÌ“•wµTOzu{†wÀýDý%Å‹9z¼&•¤”â͈Ís‰µ’yøMòÖfN⊋>6Ø’ƒú%¡ âçcxï5yÚá$×賤x9·_u|fÀ^ˆ¦s¡]j6à ¾a|Á[ÉŠJg°‘­®{ü¢‡£›€ê[DqN;@˜’G8Á€–S¾´S.ö]R» Í!õEf!~  j(w·˜£d’±ˆ›ðm%½ ×2Ÿ ¸Ø÷‰ÔíúïŸÞ:€»®â~øýøüxâzþóþœ^¶ y@N SÏGhTM_BoWÂ1”ˆFtÈáR sÛ’94!Dºï”o‚pÒ£cLôúóÁ;ô(èagÔ/y}¤&’müÞŽÝL ä(6Éw$ä )‰3ÙárK™H(Ó ×sZ§-°ö¸—ÊmBõ&÷w!æK˜ûÐê&„„«¤î¡„áfÇÍÁ9ÎB|nÂØûF&ñoû•ÍìÃËP½¼B=¾D(®¢‚7ŸJ™ŸÞ:€»ýèO~D×?¿>‰¯ÀºAs÷©œ"I1àK(°ŸS¼ç (ø¨ +dÞ´o-“;*A9ô¹M5ÜÂ.—„ž²€E•R´ÀˆQ¿T ¨uìá¨ò‰Ç=3xŽT¦A4óÀ ŽÊ.ø0îð{….*m쨴1ü`÷k3½ÿv$1æZ'c>DÏŸÁæqŽ!sö¯ Æëc­ëã¬ë»þ»¸ÀÝ?~L»ÝŽÎœÓ«7i$tÈ4þ»÷QÉPSÓÍñ<ìyÈ7n©'áp0ŠÕœBüŠ Wt¼&ЍìÍ8GXÅÅ™\ÏB‡~¶P¾"|ã}„ð–Dõâv'«þp?0â·Ä±ºú´_Ùùõ¸!ïucýò¾aˆw ŽW^ÐÁ#òqû“lg Îy‹ªÆ… løÕáëxYŸõ»ºmUíæÅd÷lÃ8§W·_~÷sp·ëϯéò—c5,fVÇ^®Ye&èÍ:Ρ†|S1Àˆ³Õ‡ý-‘óZ‰ˆ/ãˆG2 ãÏ.!ãzT†UÆ80WJh2qOñK|€ïp£¯*'ÛpÕæÀ—Õ3wt9KˆWø)ЦÚ<3ŽÅ Áöå…*Æà‰NÆØ¥•í@G,qÍzT`P¿¢ãã¸\Ú±^¯€l`|ï t+¾¥ÝÁŽ$67¹?ˆ“;l¿ü îîöýû}:™±Â¶G,”.Ž!Þ»¢ àËAˆ­é2|Båx§ Ø@Œ5¨á¨w“Ô¨i„Õ¥¡‚­'ø… –´gžàæû&-ï­jd׸Z{Xà–VÍüâ{~Pµ§ >ãÂYþï¼¥±³ÇVˆIâ50©m!¿QðC*.ú¡Ý,Á/p={ƒ ž·¶:å€åûvUŸ¸ˆÿ̓mp·ãQ¡Ó›(5 â €/”!‚”¦eb¨Ûô:+…ææÎV„R^(A ‡ƒÄèlBåƒ Õþ‡©zÖB't±OzÊûM÷‡Üp˜ï±çImjb› –‚~¬áªcÝ·nÝð5$éáø7?#9¸»1Hlµ«ÇœI©àv³·ìg@ØBs…âEoìö9Ýùª¹ :wЏðßìÌçànιªÀ?ó¯Àý,ª™¾.´Q9 eL¼OˆT *`DU½ Dì'ÊlÒ8ßÅ9@¬Ûrˆõ R ,ÃzÜ›SÇž@Öjx™Æ‡Ø\>Ƹ5„a\:ï|¦D#W:î¸Éþ>QÐeÀ0àuÀÏ*òvyQ;Ž•L«à@ÄéÞ,Ø?㪫ªAÏëë[íC ÂÜVÂmð®ÿóío¼rÕ åþ2`ëèäÖÜÍ{O'5@8‰µû®XÀÁÂ7¹žÝžˆ7Dê—LB—ŒŸã‰†ZK°™8uáØ†Ý¼¤Àñ~ <1 ;xÌÉ©³±JËA ÛýM<0ö T°{]û¹QˆBkëdH¾¢|‘È $ØI¶Ìc«¦²oú° €ûò¿’$«ý£ä§pYýú{+¶o¹6<—)Þõà^ ïõç…×ÃÖ5ÏõÿlÀÝôñA,ðÕÀµ †âµ…#bÂI™ÐLwëîþ ¯Ü²Q¾¨‚åóÒ·y¯CбU¿D’–”ÃS)Ìñ£r“~D*_9ªYˆm§'V fÏ:ã˜öõ;UùFö‰½"Þ‹=“WàuZñF˜'•¥+%×àÊ šg OCq@'m9ä•.†}èfÕðJ㺮—kà+@ù•¸¨Q±n^ õûm³E·àà Ô°=giï¬€Š¤1Çu´ÎþNK(Ä* Ž€ˆ+ÀÇ“¤gX¨_¶ÐŒs®ç›"Z˜VJ˜±nh#!‰±_Ìæ:æ ðX#¬‘KR^¤5T“†²yø)Ò^†yÃg”0®k:¹Ù öäÈÍ…oÖ«”2l®Z^^¸íB^ß‚±[p·!7`õyX4(XÝ‹ Õ®Y#/˜» Îª8œ>B î:Vˆ' ö1  ›ËòÆûÅб_¨b­OU¤`¸Ÿñ † 1KïÆ][7¦ÇWËîç`ŸùIZÚß_•d™Ä{½R¼xÇÊäjIVƒJ¬ªCx•µä îh;·ÐâB|–+±RíÊ^Eýjªa­ÏzîÖÜÍ&^UóQõA:̧•­„ ÀØÉ‹ÉFN%aQZ¨h@æ³±Ä!ÇϪøïÆ–žÄ~)— àâ Óß^©_¯²¼ÅàH{Ä—.øbM*‚êÇÚ=™¯!,÷´ì†N¡ åj^í†Æzùóõ n+Y Òu*y‰[[Á|=p×Ãv}g©nÀÝ6pÑ>¾6Ù™ÏÄÀ>÷ ¦bÇ ºÀ0@Û¸%ûÉÙ_ãŠNð-¨_¤w©}òû„a¯VýÚ:Ø,w&ŠIÀ‚žzIôœk±H€xAÒP;)‹ñaW~¾<«TH#ÅݬbR¤_(d¾îÖÜ ¿a{€x|lõ¡JA„ÊŒÓÍß¡z£ÑU6µ¤¬ô Ä@¡é>€ §uVÉWUõ›Ö9:<ÛãVPü`\®‡¯é”‚ò-›,I˜Á¾“ *¡Y°!Ò^p=[å+ú,0ç‚uæ;¸¶ê-ÄõÛÎQ°ðììwð|ýq¥ö9á¶šõ÷ãn^þçºuwóÇ [VY¿P‰h:¯Õ ËÄ~ár-$"ß`€ITùˆhî˜yuV¹šòM€NÆ“cVE÷3™½CÙBñ«X70 p¨¶Š€q½=Ly(jÔÀ FÁíiµÆ÷ëzÜ/9SÉàšfĈ[®i[-Ë\mR—2¢+ïâïÇYëòymКÜÚ€•{î:Þ­¸[l#ó ÄVõ²±–«p·æ’€ƒ*ˆ q_O¬T±j(Qj¾°ê“\€ÀAò™U»Ù„,õkcÝ*ñ,µ ™Å/H²@”]ä,ÀIwŘï óÛHÎò Õ¯./Š»Ùç~‘u܆¯}¾ü€mEA týrø!im Œgýy£¼»u÷ è„4€8ˆ+ À¡nG@ù2ˆCýÁLÜ×Þ c[í Ç$íjxcÝd"Í­¦Êª_ìß+UŽÃ~-"ÔþŒ-aƒgél)/Üñx°ùÙʆqm+Ÿ°<Æ+­ÜeëâoÆlmH¦ ßFLØU¬,HÛïÚ÷%ÓÐcŽîc›<e…B]'îÖÜT¾ b¢Æ Å w³qaa IW½B[>§ ÚÛãÛ„Æú&ãWT™Œg_±j¼A,ãÕo.«Œo]˜ªW«_ㆶg}âhJK©4€œ ûÅ}ˆuÖ¼y¿ˆ¾a.”Û1Z¬c-˜«=rTW’5å ê1a×r[[·tí½ t[¡ kr'È* /0™y©[p7’)„‰L îV&"[û™uæós$^Mä‘ý[p§¹ˆ4ÖÇù_“ …«3€Tmá uÌ ’èsÀWé] u­óÆ~e9‡Ì/êè‘V{~pÊ+ÆÁ+·s È>÷oÑpAK[ÁÖ’¯tcˆÐ€rÈݯÙ$>^x6qWRÁÕB¸üܸší3ã–ÎÌ/nŠþÑ:Ì»uw£®ï1ùJ2 †[VT¥+tb‚i<Úd$4¿“îUr’´òˆ‰Œ"Önæl“ V’òMX4ÉgiŽÏÙŽO1þÈšäî>OÜïÀ'Üðˆk kÈèØ¯WÀÅàŒµeJ¸¡tÛfßÛW ÷³í'=·J•…ð²˜ðj·tºø†…›ÌÍrFòÕr€b¾þ¨Q·àž„å'.éÑ6¢\Í ‘±R¾JñÚaÏø¦áÉÙªWFq1`7Ú ²Ž]ƒ–›Éùg5U-yâæTM&Ôð{•€åSVh€ÜïâÁ(¶×Pd¤Eoÿ=6G½­€+ó@Z YXõ¾9š¶Çܪá*Ðfª®iHV ÜNæòĺRV£8K@ú$c#’f\ÝOη“«äTÇŠºuwùW€VŽEÝÙ&^¥5 m¯¯h[÷ Ñ“RÁ@%å« PèLnÊÛ à£‹d]Íð°ýåÃv@€*F¼Ð*´Jö7ö7½d•ï ”ðÔC0Q`ö¸Ëü^€1À⌮eÔbpMA‡¹mQÄíŒegÜÑÚsŸÕËQú‚2•ý=Ä}eU«Êj¸[p71ñ_†«ÜÆf@»ô¾ì‰8pVñB×Ôˆ5dû:òF’;÷ °j辦« ž ø±Ž¢"9äÒÞAKì{¯”²–Ñf! 8{÷&ùJÔšÞ¯ñ(c]±sæ Ò6w(5¸× 8;ŒI°ßæªû¹57•Øp-Ƅ뀅 vâ¼€n;ÎÐY…+wˆÇúE0]r†X¯Å0Ý:€»Aºfî>!CU®„H* žœsuªûO¼OÏl=I66fÜÌõXpP7edҊ™Ð€‰"ad;k§Á…ä4W;Ô'l¡H€ZAû®+ß ˜º~xǘۓµœ-h¼¦ñ_Áú› â#û~vL8 XS Ã>³=z}œÐlÊ­ xÕU1¾ 7ôê‚ë‹mpînÀÝD¹¡Z‡{âä–|1Ê n+^½ewµMÈr¼j^ƒ.Ô©©UÔó`+u˜.WÃË2¥qß­¸«_uÞªÏÆÚ†z‰I¸_Åæ÷ÆBÒ¨v³…6a–R s‰ƒ:=qœoP½°WFB–i»H‰"åFò`ŒugÝÏP«% l­R ¦]¥ÂX ¸EÈ– ¢Ö ˜÷9ø–öÍåÌçÆ\ª™Òl!l}„°'W…) ªcÁí¸p»‡qCÛg+ r¬±nÀÝ ÌÁª`Ub@lbpôȨ'(b.7° øk¯`ƒÆ”¸Õ:ט3î1ßNr™ßúH’N~áiuî°“j¼¯KQzãRüƒÉX[ñ̺Ÿñn ¶aÊaûŠ0Æ<ó¾Ó@Íg>7U1+×jG—3¨ÛŠ·­v-tçÅ‚íÚº¤+©<·kíç K·à¯~õ(*bÝú͂؂ ÃYe8“ñÆ€Xe<‹ºW®itz"˜-ˆiz´ÈÂD^eÇu7-™˜S8úüoÖUéãÜzÚ:`-¹Ÿ«±Ø(aÀ–+P–ß-Žv–Çœ\]ýÎÉ|.œÛ%á¬KºvDÉÂsã.–dÚCXâÐH¾ ªžX˜5hmèò»×µËV¶ ÀvµïÍL¾’f†s;Žëi‰¬s ÒàÍ?ëÖÜMׯ‚5|[ ¶î9«N”ò=ªP(?«ˆhŒòSŠWÅ}¸Ÿ“YÛ¶ƒµú×èú”¯zåÔÙU1Š_‚࿤佀±}dMîmV´׳SÐÅóvü·|U‚±±"¡ Æ|—t#Kša|ÕºœQá‰|6fïj€¶ ·GŒ°nêC·¯7nhÀXf¨\6U#Ûßgû^·àn¬€ë, ÛÊ¥a§ÔI\±çZb?”\Ï Äq²|E¹Íàbö³Lòö˜ˆiÊÓ{·0°ÝŸ”ròÆöß(=ÉÆ…޽{‚y@¼à~¶®çöÑ#JžƒŒI¯•ÿ¬µ†ngI+»Æ%Ö õŽ™Ï€îò8pYÙú;ôê•RÒT¼~ÀѽÞ¸Ö½|»uwE •WÍXmÆ9ášn!Y׳±©¬UWq_2=Y»Ÿ+±o€–mÛE«Ú  4ˆó06å'Ù6¦8ªœ+èì¿Ö¹ v{´0¶ÿ^™u×rÎs¢c¿ÿ—½ói½,9ïûs.ÔYºA‹¼H{'oYDE$â…!/ÀöKñBˆ¬´2²²;)‹¯Œõ<ƒì…AËQ !³L{!hÓ0‚*¸”ÌíúÍW§>õ`Ø Ô.ßG°šrФVë«“LE ^‚X0!‡LÀš0ÖwÙ¬Ô8[Âä#¹WF´ãº—³›xEõë]®¥Že‚&¡Ú}Þ› êD•ë(âROA¥ †’UV4~"À6nÊØ =Þèý´ ài†û™àñÔ°Ùða™†ÚK:1β:€Y‹ÑzRh;”!…ŠWû[›ýÌØ%Ÿ @š‚AüY wÙ|Kõã*Rù‚1\ŽY ÖùNìu¿¨÷åºöJÓuç\ìg&°ÅŠx ä–µ²¡ëªZKÆå€þª­ˆ¥x·Äêt帞é~¦›P1E±XÓŸºzfëÆáÔ!ŒM:¤Ž²>Œé’®\-w´UÒÆDµøùíæÕL,J„<ܾ=E¼Ä›ê¼E]ÊŒxp\–t¢ëa¹T'­ïë‡ïe¡M›žîgÄ|¥T_L÷q& ÿKK ˆ áZòP­Òš b—e6J"’ûùb¶Ø\²@L˜4ªëÖÉÃ(Ørú“ ãÿqBè©\‹qñ ]ÁuЀ± ^¹£­³œ”u â¾P¿x¸Ä+z2óœ@+¿ ÎlMãBVÐ,v†t“”Uš„,7ÈvÆz à¢I 8q!ZD—ók#ô ÄVͳ׆’ #R£†â%ÕY½4y§®íÛƒl‰kêbÁÄÀpôTƒëu¿˜—¬ý„¸j]³(ƒÿChÓÃ’ nƒŒ¤µ ,œc_gY We>s{¯Ó}¼Jj\ÆpµNìƒ7vCë\ ]®½û6<í‡ÿõ‡ËýÁ¹Š7ÂQ„dD|]„¸êAênÄ×úÍKi”nˆ÷"È:Ã&6«ü*[jŒÏOè‹'Îä] ry@b¿È|öU1;ƒœÃk,_Jìh¡ÌM¦*Ž*F×+?îKKñ ÂÜ«ÎíRMS™Ž»›he&P7ìIÖT¼q·«Ø }±ÜÐr9¿sðžöÍßûæòâÅ ¬¿ÿý÷o.èÏìÏþãŸÝ\Rø¸Ð… ð¬ƒxï5Gõ }šßr’X+µ»OÁìÚú}¨¹Ín¾gáÄ‚Alã¸u=ïˆÝ ‚,@lÀXv­¯Sí¢OvZŠ&Dµ€Ý…¯mÕßϳèY-W§þWg¨ŠñŒ7€ –JW¦±Í¨Á^G2eãg«}$ÜÑt»dÅ®hÁµ. |käzÞN4àЙPíÆŠWPþBÛð´ÿÝÝýýÕ–¿ùo³üý?ü½©~Ë/+Dª;«*_ ¯nÃx„š@lFVa“Ðtƒ É*ÉéLtJ‡R¤„ÒÄ~sbAîçldY®çº¶W ¯Â4 «gøŒäz¾fáå(`'Þ˵ÒUÅk45ŠWFl=Šûj]fÔdïõÜÚ4Â°ÜÆqûHÂ7rU7à†+à ”oTÁ—±d¬bõ–Ú= ßÿóÃååÿøém©”¼¼‹6<í–ý½ïoùÉ?þdI)™*S[‚‹§†Wó¢½qÍbÁ7h²`Ö+Z»Öµ‹´ˆàA€'Å ‹®Lù Š3²Y®gO]¯Y©è±û•žQ®Ï¨Ž Kh #Ik®gØIبaÄ~µVÇt¥tY®$XZp„ënVR•m?†›·F¯ ¦»ù|=p^t Äÿü_}í³ëvKþ—.ï¤MOûã?ùã%—¼|ãß½JÆúú¿þúòƒÿüƒ¡ÌgA˜ ZTDFö³Õ¬’ÂõT0×ZÀfíW·tº0y#8jü7FÛͱTmPSƒð ¸™ÏkwÜ ^ O¸žb m@Mtœx…¿Kõ $[åŽ+b¹ô©rÙ6²Y¸Ù/ZvÝÆ#ª—ß ‡\ÑÊ_X7´q9cÝq;— *U°5LPñr Ôï¼MOûøÿ|ªí¥zªëè æÔTBk_˜h@œæÖö@ý]xKfö3ºW™W‰ZR.IÙЫÓÝÊ-5jËæóld+{{YJ˜Í:˜˜Åßl á-a­¬iIF¼w¼°v.yQjl‘rï}ð´ àiû WQà„*þ¶g|‡0‰qr{[S± *I`m”® O,öÀöf»r˜þÚ­Ö7Ì>®Hð1Ÿ`k@Võ¿/B©°*š•ªa»ç3þã¦ïê߀bÝ…‚"AƒŒØ-%¬=[k-Áí 8vÁœZ0çeÙ6ãü`FôÚªà‚ÿM í%^®üŒlhߦMOÌ®A§àËÑTsú“ŠV LPð2£évïÄä{¬Ý‘‹ûq=4{ñfÝ÷¡ìÈTıú5Ö˜%{”x¸«t¥†­š_¯ÔÈìiwt?˹48t9wã·s’k8¥Ô+ ǼºKó?ÝÊ~†ˆÛÁ8ð´ à _™1ÀœVNü·ð „-&©Ú´†ä«œ;kWcE&8°þy3²¡·¸L¥t˜ˆ¤ó|E·+@à…Ç Rĺ›fÍqyxÞö¬ä›m~w±ŠPÄtâ}„yN¡|uÖt¿FwtQ+É$+l1D¯RÁì™ÎÅ‚ý¯3F‡n¤x‘°Eõ´ àiA“È4 _&-›©„ âŒX/ALupÚLòbí©ðë7œ¼©¦ä÷Á>LÓ5­=è:uÀª=(<7ªZ‚8 Ä„p \ʹqM÷/Äu¡t÷¤Ä7w:ËâŒeÆécw4Ç ˆoV<¸£‚ÕÇ™ Y ¿Ôý6 t/z†ˆzÎP¼®›p»¡§MO£ú'ÂêNj€ r†åîò@Œä+šðbߌýJÓkûR¦eU‚îŒIh6„/"†ò-ƸF¨_Žk$˜©ˆCgŸl+þ»X‰Z‰½œJ N«7¸Ú‰Œe©Ú Y›n€€$ö÷ÅYÿ•îæœÐÍÊX,tõ”xÖN’äù@)O›žð°t¾±ÜÚ[ ÆÖïp; öàfƺ@@8Ø.išô/î‚ ^Š v„è*bÆ~•`åă Ù v륆K0áèêŇMµkO6jjtuÊlŽ2–±LÅköyfïh'qjÝT)^ÔjБRj¾oý./€{˜VµfBÑvEó ÏYgïiÀÓØÆVâ)G„‡Œe5õ3¡E+L¬&x‡b“Ö³‰œpzˆ¡ˆ£cìÆ¡û KŽ˜An¨_ÅÏ‘ùlÆ~ƒ¸î•gâ6¦žåLoÇ4j†ÞË'hx}žËN€²Y†\Æ„uV7Õq:BZç$uTFTÆ\Ì€®ÛZ‡ÀE$@‹ß9oÓ&€'Q¹:¬† á¸pg²'Qÿl¬iUí®¥„ãøwü\¼‘uˆU%ä<jXîøîT¨Â¸9Õ/ŸfsM±_Çå|IpSL}kÚb[W5gÄ}ÕäÄsGs/vG›IVª·„u–`fF´~³¾gbï**g†êÏO;*ñ©iÀ¶±|B/d@Ã1–ó©ì"ÕkÄ,‹Þ1Mª^µ˜Üb½—uÛŸù‹™ªH²ºH Ó Ð›‡\XLõ+œÄN[ Ëøpa¯g¶‘”QÕ&œPÍðáy „ÇÝÑÐJÉT¶‚¯ûÄ|Wô%5ªa{Ú0GJŒ /°k]ñk&¢ÇiÀÓÎÍ(‚ZSÁ„­^›BæŒ$DƇ$¦Àíœ5, ·ß€8­)VÃló!5l€p–ú¥÷`·ké9è€8sŸó~éR–N¶ŽÆ ÞÜñqsóîèjN ï²ÕuÆmí³Z§ ¦ÛY†^èѬ¦ #šçì,æó£ ùiÀÓÒÐZƳ“Í£½J¬x Œ¾Áª•xà_¡ý­KÄ1'C °p9 ÌZ“²M‡ÏGÐoNÿì¨ÝrqÙ QªámÙ‚AúÉ/X!4×àž—í»¡f·%„©|qVkõœë÷² ‹{÷6tý¦޳?²Î´ÕòqœÑ¾Ó&€§•Ñõ•ÑSÅw; *ÜOv’{?/|À¸ñ^cЄ«!¼ø°,1Ÿ8¡Ëò£žúõØ:µÀÛj”¡ÓUêc¿TÃqÍ/›aìõ×ù¤;º`\¦a£ÔÞ6c¯YëýÞj¨Y©`êzÌȈ¶ky‹[·ñPmJaäë´ àiÄäãá«×A4ˆ6ÆZ_L |eœC;Þ†“ƒ¼r$Å5ÙH—Œ ¾¤Î³ÊÆ$f=KíúJ—µÀËðõ{>Ë\ÊV/çEIZü¾Wéº×ækïm¸£ÙÏyÀ•LL¨&;ÓYkŸ\Æ ; ü@5Ì<î×ÞûY#¥z¹x3¼Ó&€§aÞê)øÒØÁéD¶s1A›Æ:_ v9M€s‚ØÔÄóF—4A,D °PDȆî<“(]BÝk\â”Q ´p)²hz‚﻽™[5|ÂMµB•fOg(^*iÞkéÇ€÷l¨`ÌøMû& Fö¦MO#êèÚ‡ïêÿ:'üW Ç‘XDÐR Ëö0æÍ \¯ŠÒËEs|µètÚr*‰)ˆûÒIWýæ(ÝX;WdmÅ,—±ãRÞ:ûÛÂŒ£aîîhÖðªžâÕúÆx°J“sAÔq1+Æ~Çû>°ìæ._ü[U¼òHi`ž žžv&Ñ*Þgò•ûÍñA ,Yâ:T®£†©€c‡ð¥.CÏMýƒa«ÎÜ`׋ûêÖmqt<k>rä–ÖÕã Ðúƒ?8^p#RüLgfHîhÃ7 zÚí\!Œ^ÑÞô/v²¢ Öo@ó)5¿iš‘x‡i½òB7´ßiÀÓJçóå¸w,¡BDŽ—é•ãã,p«ƒð ÆƃÑ3•ðeÒ©ª¤ˆíg½!îË’$ºê bÆ}Í.YœРʾK:¡†ß·™ÒeÅóƒ×‘Á ‚­.ÅŠë9fK'»]%c»¦‹ùl&4:X¹Š˜‘yø!6¨ÚêËh³kÓ&€§WøÄã®diˆWÒ¨ØâW­é ]õo àË6¾É%­öœ„«bw5TC€iêÎúEIÎô®|Rìù]õÞP»¾KšËQã Cš­*˜y,µ*¨zµÀn¼¦¿ 5K,ðR÷ ‚}àV3™^¨^­àÍfHgÚð´ ËU Ýx¥F6æ“U6ÃÐ1|yžu½øtº§ÖVg¤ .SÐݬ`%UÁ•ï5Þà9>#^×È-­ï"›|WÂË‘øWÕ¾>…6ñˆA³aT-A¹mÚc-0T2ÖPó‹I_x»Ê¸ìyIn}•Zök~‘Œå¨Û.xXàžÎ°$)²iÀÓâ!bëi°LÀÒȻ˒â(ùª®?檗 íZõÃ3À˜oiíàÈÁ ž£ŒèJÐæÂœn”*DÜØ/î[nej;íA ÷vT‹Tí1a¼:³é~õ7V¨`Öyt>x­= j ¦1]Fî™GÕ«d¬mµñ´ àigz>‡ ïxÇ}Ópì÷)¾ÆkXMPGíºêw¸›«úACåH Ë5ÉAˆÉnéj(#|q™uû„Çb¿©•fTF3¤¥„½Á ‚oBLX3£ sã·RÁ.xU,ðò7ÜàK…n¿—|Õ‹uVtÇ®è쵦MO+îN¬à˜ äVŸTöû9G¦cÒS¾v£>·Û•. â×Řob”#5ÏU7 ÄÑÀ}Ù‰“pICÍ2ö«6c¿² cÂÚ2¤—õ¡Åc²Ë.ü›q‘• µ Þký» ¼RÄpO·puÀ˧ Rõºn蚇¾i݃òƒgY6<íñ=Ÿ ÝXákPh¾&| áÅpKÇÀßÑ‘ámÌ|ö ¸/ÝÚh¸bäR+_{µÕÉZ±i Ž[Lâ¼BV´žNMº¤­¸/Ýýt²êïæeHWøjÚ ÜÌè<ý׋ ME8/§bWt Ô2¾×ƒ}êž„ì^–M*X0ã¼Íš­ˆ§MO{T‡+€ãd¼—ˆ‹áH#|ÍØðø?‡€ôáëN‡âE+=Ÿsn0$ײTÌ®ä¯CM°7l¼Å$, ¯B<ÝøF\Øe:Çqõ=(Þª„SãvF’•1\á¢uBXUŒ¶£t3š¹moü¦@›j²ÖŽ-#7–àÅo˜àecŽó6mxÂ7Žgº€Tda›É¾ÜcóGKíPôbÖy¾‚®7Ç¥„˜/Ôpu5_|UŸ¤†q.uZw&#æ\@ËK o½ä,d‰/ç\ÒÚë÷u„1XAç»®è ºe¡›³’#W´@Jh{{/âÿ ª×XS,xÙ¢8¯^ý…‘1}¦MOøúÉWÒ51ÎË òŒgÕŽ—!A¡ «áŒ¤Ã N Í+Ï‚Š12`CLÍóÚÌyËŠÇá]‡†íó ! û£7)ñµ›Élötvò~øªTÂZº\)Œ³j¬1^ÁU&´uN{Špöô÷‡š• FÉ®êÕuºÜHß=oÓ&€'|×ÑXæ8Î9FО/¡Êð¬YÍ~YÖø³R•þB¯ƒµÓ׺~é?ÛD5Ìæ$×!¥Ë3&d¥P789û9J…p^]΀°Ñˆ‘P¥²Ý {JXP®f$Ni­§jÇê¹Çïõ®J‚F”0‹¶’pe{à• ßãÕ´ à ßó0&8¸*Ï1ÌÇð¥%g&-7,ÆBOýòžbÂÕp_.œ ÕF oðjxO‚·§t¹G%+Ƚœ¹Î„7%ÏB¸/!̽^éb¶Šû*1K`uçÿfí;½ÐÞ …õß‚z¯6X t¯™ï·Wu7ÛzJ¶QÁ©*XÓ M0¼ ¤m$îM›žVN—{P‡“®¢Z`ösïzŒ¼£BÖ÷ÀX`pÔ¯WÎeM…‚BÝobi‘«†“æËÝ{Uãï*Æà Þs^9ã†IRU «dH8…âµ÷P¿ÛWÂ'&,… P¼â¥ ÚPµCÍ5²[!NÕ*§ åPõƽžuÞiÌÁ¾âw„ð´ àùWåt£ÈÒˆÞ »îé¸Ïsv*Ks/Ô6f›I|6T¯3Û7rA³Æw“f’Ö~u…\©* –Ù}ž’T¹ÕšØ0\Êì,V!·sà’<Ñɪ*šrÂ8[ÏÁÕŒ 1\é²®åf£ÆW½ 2"©`•5½œpDœ¨xmðzн“zÚðü+²84*6¾¬¸ cÓ1] ¼U»Zေ“ž±Þ`_ÊÆñ:°d ðm:_U ~nÜW–ܦ0eIýœÓi—4㵂°€ê&f™£R‚w|²Q8J :än én¦®gå!%<^©`v¯»ú %üH›6<áËýó]®’›•ìg=Çj8€±JYp'‚™N5<ú|²—-Îó¨û=ªáÔ¨áí"øZîÁ²¨aœ©Ñ=Z"„ ·4î”raìë@Å@¬ß±’²¢ÉEѾ×çÙhEY–¤ìæ ^Ax`¥\• m+aEçû7 74.”/ß_ï á ài3ÊLÛ>þ^pxœ•F îó^Ö5̬gYF¬×m9‰g>gtÝ„&„9´óppƽ\øŒ9P¶÷ãÌeL7 ¯rQRÀ+Þ Î›±¦sùó„,ªVWõràŽ•°^Ù\îT¯¼8×tØ¿Mû­å]²©~ œqøÂ­Ã?ââ6±¤±Î”`½oôLY@U–=´œ4뤷fÐTËÈlÂ÷áÛD餔mi Õ*›¯ñx쾨ËEÜ7[çÙf2½R‚c<÷¬uoÇþmk¥;×§&ø¦]0­kí®×­ÆoµÎøïÓ¦;Ö“ËùWë{Ñ?«Ü>7·œõþ—õúõÛøTgëÞYû÷ÎÛ´©€§ÅãÏ[Á”žQ%§u•G@š1ߪœ´7`Ù©ÿ-]¯B²S´Ô:Ç (Öï6ܨnXÀ×;èô*h¨÷NÇ}£ïAñv3œËž—ÔìûM8 E¬UÈn>ôp>Æm¡h-÷rR)2¡¥¶›« ¨Ýý„VœxÚð4o” ìL_çHi„qßó÷ŸNÁW&—´Ì* ÊÎT¨¸ëUòcçl`²k­ì±*®—šdìNÌÜ‹A³TÉ€oãRÆÖd3Ûy<î_¹ºž=°ÖsJÊÂY)â8Fœ4¬€ŒÕ ”Ñh eýo=³ºŠåfÄzÁ{ 01+îÕ>mx‚˜v—,gÚND¸Ãê7‚p_A\×6{Ÿ knÆ3/m³öYµ’\bÕ’+|7'ñJjØØg¿lº“ aZ¶A»´h3›3yõjŒTR–±ß ˜ˆá"ŒŽV¸Ñ­÷í¶iΑ@øê«aeÄЮ—|¥ÏÓ&€§¡\&ƒïù ´=TÃW¿T`>|×ÁW¹¥‰º‰¢=V¼É)=Òšâ„õþçŒá £j8¡_v³¡‹×!‹ÉR1P¹Gp3yªN*`…âíïëûZk²cº’ã„)º“éšÖwv§sÕ*ØAÙ|×PÁZÿMRÀ3 kÚŸÿ§?_Þ{ï½ååË—‰é§m?nº’ªì«àsý^õ¶k 7êy­ÕóïªM<íç?ûùòÁß~°<ûÏë’~4x©ÔÎÃWÉDã6^ûŒ_Çk¤9zÐr=# ‹±ás –r|Kžªa>‡Œp,<§Ðž+”°÷]0Ï÷°'å Å«¹¼æ­3œm´lÔ¯Ý:’1`ý–jƒëïà÷ xÕÒ¼âÒ#©à3eGÊ¢7m*àißúö·–üÅ,x#5û¸Êåtêiõ[Üõó÷M¾±ŽÕþÆ=u¾1¡K]¿I ›±a<[ñ^ü_ãœ>µ»‹÷5²öºí#«×úÕ:Sð¥i#yHŠT¸‹UޤïërJŒÒí¶ªØÌRº¥Q·¹ù\•ªJŠ>WÉ­Ê-Æ÷ßg ÒžÞ]O<íƒÿþÁòì·Ÿ-_ù—_yCí&içoø0އ¿G–\ðÆ{U1P¿ÌfMÀ¢â»^é ²žA\vºçùú–÷úìU¨\À7(5b¼}<î‹x/’ä¼.Wñ´£&[Zà”Š5&™m&uݯ¤‚ë·th<«9f<[ÉVÆ,îR_<›žöÍßûæòâÅ ¬¿ÿý÷—ïþéw—ŸüÃO°÷¶!L;_B8Q½ñÞ*¿¾é‚3ã.z€Þ€,Ç3ÆîÁ4ø<“’³:€Î‹½8VÌ7ð`Ú@øB¸êu«yÃñÍ}»…lÎä¹¢Ã6“üÍt­c&3’¤ð™m%k'4AÛIÆ2ÚS.è-oÈ%}Þ?y¹üôå‹òu"Òð´ÿÝ»ëý¯–çÿô|ùêï~õ¶ðügÏ—¯üîW–~úÑòäËOõW¢Š» Ç£Õ¯¾4B˜8ö±Âªà ƒFé ¬gçÖ¾€°S¿K%ÌLç^{I”ŠV€®åI€°^ªb}xMÇx­ ˺]áj¬Ÿ³ÎHG–µZ´VJ…ò5ŠÇê—ó}7yŽnÀN7OÅ×¾ôÿ®§Ïnk?ü§–wÉ&€§ÝÜΟüâ“Ï~çÙï,þôÃåɾ÷QÃqéÑY('×%]N‚YJ š;:c5Ö•$4ÓTÂû`éö€÷¨Ÿ3^sðL Ô0@ ÷!;ìŽÆ%e Å ÃÝŒò$§®w)ò`ý`Ý/AˆMÌý¼C\ë U0\‰\†›¾[­Ï„°Ì¨çÅðwœ  |øê@·ã½T³^Ý/#µªY÷4~IíÒ…\|5p=–Ö$Õ{»W©Þ¬/Ëí³ö·å· ài?ÿø-̦¥7Þ4Ög"›®MÚ^Õ01È}•í KÚ}–„dòÕ §õÓœ*´’°çÖI¢BŸgÂÐÜ„j Þ#ÀåŽFRÕ±¹F©Mœn¹¢1ñ]ÌÐPÅTÁׯíÜ»Jóýܨà]îL¬ UïI¾š6˦íoKõžGl9 ]ZÑåa~÷ÑŸ¢ûæ>•í ‡m;¡hy®@íf¾ð߯9Í(p+sOÀÍ‚ªšd°©†¦ ¶<£õ a•ùÍ5–…Š˜ÃóñB– Ù¹Œæh²Ñ?_š&ncŽZF¤R¢§·«<|Þ+d÷ÏÖ“Î]ŸÒÄÀÓ^kmï½á›!\NÀ7q|ï¥s®„¥YÉÃ!Ü€G—QÃEŸÆâìpQ[O:Ûðm l@t —zÆ…p¡›Yk/mœ¹=9!¤…¬ÞKÍî…5¾ ¸£—|YÇ[g•!×ýæ|ĪÎ]ð~Õ¾û&ÈbðaMß}:[QNô´;¸¤ßPÿætfêQßǃx]ÆÔðz6¾d2×YÏĽ}ˆ›éìž‘+™—NÖ32Ì÷MAŒ½tj|3ï€=œ±pÄ×òÅtµ·i­îk0¾Î9®hônc»qïæÒÙÏ~,XÍõê>¼©àtˆbЇnèiSO»BÕþ¦ç=•;Ü» _™TÒ°Þ‚IG±>7Ozåi7Þ›—Œu¨f)]˜ÑÇÙuYSñ6píu»Ú©’ÙúïU”óЧE,LÁÚsEÿºâ•ZÅZ}ÈTÁP¸Í÷åž^tNïó Ä[…%ToU·Oª«y«ûrKÛJøé½:aM› xB˜®îáz¦)V¿\¬àÞÏÌLŽËbÌ!ü\ÛFÛè)¾ˆ 39KJ·v††ì£a ß‚ìf³©=™ËR¼êF¥2£FýÚ}•é¾cì&l¬v{eEJÀ²F %óu.×öÔ-7*ûVUð«¿“Î-o§ iÚTÀÄoYù:«àùžÙ°=Е£jxàëC˜µš‘Þ\õË¡ Å€¯“œÕQ²e4ñê‚u™”¬ÞK#Ì„«þ™´CÝ ²x3¬+l¨dÁ07ŠWj—*˜ŸãÕÔ"­)–œT¼Háæ6†»ÿºê}J@kJx¯¿uÕúíš6<í¼?|ãq e®P¡ƒwXÌûK'ÜóÙC8n/9vGv,Wˆ âÂ¥ëB„ƒPA<*soßg™ÉXí98:½ÎJùÖ=/ÝÈùGÀòâ … mA·°À[³™Ÿ šo°<¬iÿvö)’±ŠÜÒØïgÓ=mB8ݾƒ¶N±k¸„p×Y_w¦æ\r ¼'bÑñ*áÉY2?+Ò›ü˜¯Y§K5œÖäL:J†‹IVp3ó{mgÓ€„¾p/+)+]¨ˆév¾Ýß«sEÞŠÐͼí$½¤¬Ò{mnº›µF×òxí¯q,×Úú¾6ð´ áòhø¦Sð­„êw|h~9]¦Ås„j‡/ [ô~ÔbøÚ©n΀…Ìò!ªá )Kê•J6cÝtMïTļ,3b¹ÝÎ׺ިgº¯‹nÁp3çÃ>l÷û%7*øÄ•jÍ®¬J“(Uöú¹®eAõPûË䬧N2Öýþ6Žÿ´ûÎß8ËY}ó8|ÐHýÒ%„oÑ©|­ÞÍ\—5qá‹õ÷ »™ÙϬëÕYºœ9†‚0%dºei7 ûé ›ŸnÖ ÔP½p-?uÖhA÷I/㹺²åj¨_¹«‹rÁï`Ó¦ zšë·ôúTïê|^ã±±Kú|oŠ3žÇ]Ò«7¸bÜJó­Œ}ûlqˇ²ç¨a%^Y5Õp7ûí&µ§÷Çìe)_/«™õ¿*MºpÆo=_Çõ©þC3œlf]l1É g ÌØ*(5hCJTŸU,¥„Ûj=žëçHÊ~×ðŽzÿoÕ¦ž6³¡ËUï¸I SõF.éñÄ«ÂzD {NγÕ/ï¼ÄðÕá»ö` %ì:µYÏ›±µ›¤;Z VÉSžÛYÀdý¯J“¤”+(³z,KÁ–HõÒÝ(^f>?xšänÎf‡ª'\Û¥f?»ô]µš¼íïO,};sS»{ïž>÷®¿\îcÓ¦ž¶Ç¨Kw‚o¬~Ï ½ÄÝÀÎhü}ô}UIØOFâU<×ÉI¶*q¬X S® n' CýÖ¤,m«ž×®ûåB#a«;µˆëTÅ:ÏA š“»ar>c½ìArUñÇ ÆIQU¡Bõê\Y6íC/~rV}.ùÐòTeq¥îÝѦž6á{¤éÀ÷ñ=®ËéûNÞ€…qø Ân·+S ÃEØÓû,1*ðÕ® ^&fÑõ,׬‚nÝ/U²”°ÞCá: WŒ3ÏwÇzÓÇYàd\·4ç'Ιë¼* kRTi’§2㵂¨Î!¡J Zgš ú­úÄ?©³—Íë'uÚð´ýíÂ÷¬Þ,÷öÏìgõ÷ 7³©‚ƒó;ð“:®Ùí*V\ø ´…à5³`»ö”ÀGðê,\Îý}$PÊ7¸°ôÖwÃ}¼#‘ÊtE—^V´\Îüý•j%P“¹Všd¬Òº,VÓ B<OJªÝ¥,ŸÊ·½—ðŠM›ž¾ód$Z VÞ$l¹2Û™ Ï|ýò½Ÿñü¬³›‰×lÀ—Ÿ‹_ÆjŸ0ÎR¿,+Ò%‚UÊ*¹Ùd XÁ™ñ`ÚÊ€Fí­ …Ës {<ó,Ö:`Tæ1 š›³Eê• Ý ÍmVô¾ÝÀšwÅvõzòËæÌ´ž†¸å[†9cÂo¾\‹±ÆØŸm|ïdcø¨Oáß;ë/@ðº WéS‚“‹œ¤le™+{½¶Ãlè8æ‹ø.ú>#Kº®£ï¶óUïåÃÚUYÑœdÔdE+V«ŒeÅvÙdÃ_k¾ôá³nVaÛ{ŠO› xÛÛ‚o¬´Þ~ª`Ás:“P•‚ç_^|cwô†ûÐù×õ¿Ìx¦âwG_7»¹ÔÏ‚lFV:U² å‹§ô}nA¾[®aýcª‘›-(žeI D›öGТÏsaí¯ÜË;=®vb¾774néÑ6m*੆÷û7Õ¸¿ú-'ŸS|ž •:ŠáGŸ•_œLðgª6rAs"QrpsÎUÁ¥¶-ì¶œÔsZ3•25:!{È\F½/T±¼Ê„ö•.ö•­®¬f;ã™*X!†ZÕkf%kµ¾æ9Gõ–šE¯' E[Ïô”°öêÙØS6mxBø~à}s…Jo¾1TSÔ KîL¿YɈWZ–jûŒû@C!ø ¦‚°âpþÁ®E†;9Wc| þ>h²¡Ï&hÀú`¸“ÑPCkãôÙ ÚûV¸%ʆ\5Æh!o»úÍÐRÅ„nÕ´ìõŠ®iÓ&€§=Z±ÝÂ÷÷¿”7?ßÖvÆ…Çá›|5,(Ëâ£ä×ÝİN¥+  ¨Ó­J¸p‘†Rn åk@xk Œp˜,g€ùzèlÅskˆõEPÞ`„ ᤥ¤ï ªŠ£—5!¾+èê•*ø!Ÿ¤†›6<-Rl÷‡ð9ÿœbULÛ}Á"´X ÛVL%Ì‚'•.!Ç„™ìf¹£s˜ð:Ê*6^¾,Ë?ûr¸5¹±ûd5ÕhoVw,ãJõþŃÊ@—ƒëøø9v9ÿïýùòÕõkœ‰‰TŽ ŽÌÄ«|Þæ=>ÿÙó%š—7lÓþo{wÚVpüT*ÜÁö0! f8ð…Ý ` }0e‚ kÙƒ R¤càZ¤Õ‡Ñv0ºø Á±½ŒUp$>-{PaÒB+Lv…PHÀA|ûî dk÷ tßþ?4ióp)ɹç|ç;_€Íÿ ì†5`hŠçŠ244$ÝnW\4wjNÒ~Zù\Þ©ë¬þX•ôKzmRü¬(.jßnËèØ¨^çÁCõ:]– 2’+/Ž£ ´6Z&{$kRÏ¥L§Ó1.ºV»fb³ÍšÙg6þßZ­–þ¼˜ÕæªqMçïŽYû}ÍDì:¥I=ŸÒç.*|^0SoO™Ü›9ãÜ€‰cúe`×U~¨è5» þSÝäÞÈ™XálÁ,ž^4®›8:a*ÕŠ›7ïeõ†ÑñÌ0P½ZÕÎkÿE_ž¥oJ2ytR\n„b3`‰%$õ5—……R¿Q—ìXV\3sjFl,{žÞ#û€1þú¸Ø¥Äb…å‚,œ^úõºó×i³ ‰,YoØ[â“Çúwú2ylRJ_”ÄÛë9w3œÜŸ”àp µë5kÀî‚–÷íß•žõ!ÃbºÞ梋ß]4#¯Ž˜^¯g”«%èåEã¤Mõ*è©‹æ?ž>úYL$Æó<3õΔqkÀ€ËkÀº^è¿à»vs¡7öKÛñ&,¥ÁH›çœ§7VŽ®cXž0À‰“'¤×ï‰Í $2:2*ç¿:/9–Tþº,¶qG"Çß=®%L×4~nÈ¥ —´W¡Ô$b3}±Ù¿ P‚tAÀ$,À€ @gsg‚ŒÎ>Îçòºv;¥/KRþ¶ü°ßk3Ó  €·×ÛºgGû{ƒÃnGLç(ëV¥í  €n› ÃP"១ŒgÇõd Ì+Yÿc=Þª#¾ï묻v»­Ùsü°Ù´ž(dƒº$ŸIê{0@¬‡Ø}ËÆÒi^·nÞ2‘Õ«úÜÒ yÀ”(}ßÖÃ'æ?™××À €¹Ç𽆷õÀ™ù`Fºÿt¥ù[Sç!Ǻwºim´ôÌÜ­¿4tPG½Q—XêÙ”¬ß”à0Z.¶c%¥ßï믕ïWô ;¿[_߆–¡§ß›–ÊÕŠNÌŠõïöeP‚(AÛ€ͲŽ­ôLãØÚúZ|ƒ– Õ¦–ª·þÝ#– Є@ç;§¥dåòŠ\¹|EŠçŠÚ„•öÓúš¥åg»&—žµT½ðéB܈¥q¤ùkSgGï 2`»q2`ÓïOKùBY@‡tÌœ“ÿ2`È€`4 @`À€ € €{ÐïК™k‘IEND®B`‚mpmath-1.0.0/doc/source/functions/000077500000000000000000000000001316273626600170675ustar00rootroot00000000000000mpmath-1.0.0/doc/source/functions/bessel.txt000066400000000000000000000104601316273626600211060ustar00rootroot00000000000000Bessel functions and related functions -------------------------------------- The functions in this section arise as solutions to various differential equations in physics, typically describing wavelike oscillatory behavior or a combination of oscillation and exponential decay or growth. Mathematically, they are special cases of the confluent hypergeometric functions `\,_0F_1`, `\,_1F_1` and `\,_1F_2` (see :doc:`hypergeometric`). Bessel functions ................................................... :func:`besselj` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.besselj(n,x,derivative=0) .. autofunction:: mpmath.j0(x) .. autofunction:: mpmath.j1(x) :func:`bessely` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bessely(n,x,derivative=0) :func:`besseli` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.besseli(n,x,derivative=0) :func:`besselk` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.besselk(n,x) Bessel function zeros ............................... :func:`besseljzero` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.besseljzero(v,m,derivative=0) :func:`besselyzero` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.besselyzero(v,m,derivative=0) Hankel functions ................ :func:`hankel1` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.hankel1(n,x) :func:`hankel2` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.hankel2(n,x) Kelvin functions ................ :func:`ber` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ber :func:`bei` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bei :func:`ker` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ker :func:`kei` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.kei Struve functions ................................................... :func:`struveh` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.struveh :func:`struvel` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.struvel Anger-Weber functions ................................................... :func:`angerj` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.angerj :func:`webere` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.webere Lommel functions ................................................... :func:`lommels1` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.lommels1 :func:`lommels2` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.lommels2 Airy and Scorer functions ............................................... :func:`airyai` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.airyai(z, derivative=0, **kwargs) :func:`airybi` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.airybi(z, derivative=0, **kwargs) :func:`airyaizero` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.airyaizero(k, derivative=0) :func:`airybizero` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.airybizero(k, derivative=0, complex=0) :func:`scorergi` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.scorergi(z, **kwargs) :func:`scorerhi` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.scorerhi(z, **kwargs) Coulomb wave functions ............................................... :func:`coulombf` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.coulombf(l,eta,z) :func:`coulombg` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.coulombg(l,eta,z) :func:`coulombc` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.coulombc(l,eta) Confluent U and Whittaker functions ................................... :func:`hyperu` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyperu(a, b, z) :func:`whitm` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.whitm(k,m,z) :func:`whitw` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.whitw(k,m,z) Parabolic cylinder functions ................................. :func:`pcfd` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.pcfd(n,z,**kwargs) :func:`pcfu` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.pcfu(a,z,**kwargs) :func:`pcfv` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.pcfv(a,z,**kwargs) :func:`pcfw` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.pcfw(a,z,**kwargs) mpmath-1.0.0/doc/source/functions/constants.txt000066400000000000000000000044031316273626600216450ustar00rootroot00000000000000Mathematical constants ---------------------- Mpmath supports arbitrary-precision computation of various common (and less common) mathematical constants. These constants are implemented as lazy objects that can evaluate to any precision. Whenever the objects are used as function arguments or as operands in arithmetic operations, they automagically evaluate to the current working precision. A lazy number can be converted to a regular ``mpf`` using the unary ``+`` operator, or by calling it as a function:: >>> from mpmath import * >>> mp.dps = 15 >>> pi >>> 2*pi mpf('6.2831853071795862') >>> +pi mpf('3.1415926535897931') >>> pi() mpf('3.1415926535897931') >>> mp.dps = 40 >>> pi >>> 2*pi mpf('6.283185307179586476925286766559005768394338') >>> +pi mpf('3.141592653589793238462643383279502884197169') >>> pi() mpf('3.141592653589793238462643383279502884197169') Exact constants ............... The predefined objects :data:`j` (imaginary unit), :data:`inf` (positive infinity) and :data:`nan` (not-a-number) are shortcuts to :class:`mpc` and :class:`mpf` instances with these fixed values. Pi (``pi``) .................................... .. autoattribute:: mpmath.mp.pi Degree (``degree``) .................................... .. autoattribute:: mpmath.mp.degree Base of the natural logarithm (``e``) ..................................... .. autoattribute:: mpmath.mp.e Golden ratio (``phi``) ...................... .. autoattribute:: mpmath.mp.phi Euler's constant (``euler``) ............................ .. autoattribute:: mpmath.mp.euler Catalan's constant (``catalan``) ................................ .. autoattribute:: mpmath.mp.catalan Apery's constant (``apery``) ............................ .. autoattribute:: mpmath.mp.apery Khinchin's constant (``khinchin``) .................................. .. autoattribute:: mpmath.mp.khinchin Glaisher's constant (``glaisher``) .................................. .. autoattribute:: mpmath.mp.glaisher Mertens constant (``mertens``) .................................. .. autoattribute:: mpmath.mp.mertens Twin prime constant (``twinprime``) ................................... .. autoattribute:: mpmath.mp.twinprime mpmath-1.0.0/doc/source/functions/elliptic.txt000066400000000000000000000034511316273626600214400ustar00rootroot00000000000000Elliptic functions ------------------ .. automodule :: mpmath.functions.elliptic Elliptic arguments ................................................... :func:`qfrom` ^^^^^^^^^^^^^ .. autofunction:: mpmath.qfrom(**kwargs) :func:`qbarfrom` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.qbarfrom(**kwargs) :func:`mfrom` ^^^^^^^^^^^^^ .. autofunction:: mpmath.mfrom(**kwargs) :func:`kfrom` ^^^^^^^^^^^^^ .. autofunction:: mpmath.kfrom(**kwargs) :func:`taufrom` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.taufrom(**kwargs) Legendre elliptic integrals ................................................... :func:`ellipk` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.ellipk(m, **kwargs) :func:`ellipf` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.ellipf(phi, m) :func:`ellipe` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.ellipe(*args) :func:`ellippi` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ellippi(*args) Carlson symmetric elliptic integrals ................................................... :func:`elliprf` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.elliprf(x, y, z) :func:`elliprc` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.elliprc(x, y, pv=True) :func:`elliprj` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.elliprj(x, y, z, p) :func:`elliprd` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.elliprd(x, y, z) :func:`elliprg` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.elliprg(x, y, z) Jacobi theta functions ...................... :func:`jtheta` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.jtheta(n,z,q,derivative=0) Jacobi elliptic functions ................................................................. :func:`ellipfun` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ellipfun(kind,u=None,m=None,q=None,k=None,tau=None) Modular functions ...................... :func:`kleinj` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.kleinj(tau=None, **kwargs) mpmath-1.0.0/doc/source/functions/expintegrals.txt000066400000000000000000000044131316273626600223370ustar00rootroot00000000000000Exponential integrals and error functions ----------------------------------------- Exponential integrals give closed-form solutions to a large class of commonly occurring transcendental integrals that cannot be evaluated using elementary functions. Integrals of this type include those with an integrand of the form `t^a e^{t}` or `e^{-x^2}`, the latter giving rise to the Gaussian (or normal) probability distribution. The most general function in this section is the incomplete gamma function, to which all others can be reduced. The incomplete gamma function, in turn, can be expressed using hypergeometric functions (see :doc:`hypergeometric`). Incomplete gamma functions .......................... :func:`gammainc` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.gammainc(z, a=0, b=inf, regularized=False) Exponential integrals ..................... :func:`ei` ^^^^^^^^^^ .. autofunction:: mpmath.ei(x, **kwargs) :func:`e1` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.e1(x, **kwargs) :func:`expint` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.expint(*args) Logarithmic integral .................... :func:`li` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.li(x, **kwargs) Trigonometric integrals ....................... :func:`ci` ^^^^^^^^^^ .. autofunction:: mpmath.ci(x, **kwargs) :func:`si` ^^^^^^^^^^ .. autofunction:: mpmath.si(x, **kwargs) Hyperbolic integrals .................... :func:`chi` ^^^^^^^^^^^ .. autofunction:: mpmath.chi(x, **kwargs) :func:`shi` ^^^^^^^^^^^ .. autofunction:: mpmath.shi(x, **kwargs) Error functions ............... :func:`erf` ^^^^^^^^^^^ .. autofunction:: mpmath.erf(x, **kwargs) :func:`erfc` ^^^^^^^^^^^^ .. autofunction:: mpmath.erfc(x, **kwargs) :func:`erfi` ^^^^^^^^^^^^ .. autofunction:: mpmath.erfi(x) :func:`erfinv` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.erfinv(x) The normal distribution .................................................... :func:`npdf` ^^^^^^^^^^^^ .. autofunction:: mpmath.npdf(x, mu=0, sigma=1) :func:`ncdf` ^^^^^^^^^^^^ .. autofunction:: mpmath.ncdf(x, mu=0, sigma=1) Fresnel integrals ...................................................... :func:`fresnels` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.fresnels(x) :func:`fresnelc` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.fresnelc(x) mpmath-1.0.0/doc/source/functions/gamma.txt000066400000000000000000000057421316273626600207220ustar00rootroot00000000000000Factorials and gamma functions ------------------------------ Factorials and factorial-like sums and products are basic tools of combinatorics and number theory. Much like the exponential function is fundamental to differential equations and analysis in general, the factorial function (and its extension to complex numbers, the gamma function) is fundamental to difference equations and functional equations. A large selection of factorial-like functions is implemented in mpmath. All functions support complex arguments, and arguments may be arbitrarily large. Results are numerical approximations, so to compute *exact* values a high enough precision must be set manually:: >>> from mpmath import mp, fac >>> mp.dps = 15; mp.pretty = True >>> fac(100) 9.33262154439442e+157 >>> print(int(_)) # most digits are wrong 93326215443944150965646704795953882578400970373184098831012889540582227238570431295066113089288327277825849664006524270554535976289719382852181865895959724032 >>> mp.dps = 160 >>> fac(100) 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000.0 The gamma and polygamma functions are closely related to :doc:`zeta`. See also :doc:`qfunctions` for q-analogs of factorial-like functions. Factorials .......... :func:`factorial`/:func:`fac` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.factorial(x, **kwargs) :func:`fac2` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.fac2(x) Binomial coefficients .................................................... :func:`binomial` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.binomial(n,k) Gamma function .............. :func:`gamma` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.gamma(x, **kwargs) :func:`rgamma` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.rgamma(x, **kwargs) :func:`gammaprod` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.gammaprod(a, b) :func:`loggamma` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.loggamma(x) Rising and falling factorials ............................. :func:`rf` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.rf(x,n) :func:`ff` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ff(x,n) Beta function ............. :func:`beta` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.beta(x,y) :func:`betainc` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.betainc(a,b,x1=0,x2=1,regularized=False) Super- and hyperfactorials .......................... :func:`superfac` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.superfac(z) :func:`hyperfac` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyperfac(z) :func:`barnesg` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.barnesg(z) Polygamma functions and harmonic numbers ........................................ :func:`psi`/:func:`digamma` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.psi(m, z) .. autofunction:: mpmath.digamma(z) :func:`harmonic` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.harmonic(z) mpmath-1.0.0/doc/source/functions/hyperbolic.txt000066400000000000000000000017301316273626600217710ustar00rootroot00000000000000Hyperbolic functions -------------------- Hyperbolic functions .................... :func:`cosh` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.cosh(x, **kwargs) :func:`sinh` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sinh(x, **kwargs) :func:`tanh` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.tanh(x, **kwargs) :func:`sech` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sech(x) :func:`csch` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.csch(x) :func:`coth` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.coth(x) Inverse hyperbolic functions ............................ :func:`acosh` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.acosh(x, **kwargs) :func:`asinh` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.asinh(x, **kwargs) :func:`atanh` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.atanh(x, **kwargs) :func:`asech` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.asech(x) :func:`acsch` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.acsch(x) :func:`acoth` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.acoth(x) mpmath-1.0.0/doc/source/functions/hypergeometric.txt000066400000000000000000000065511316273626600226650ustar00rootroot00000000000000Hypergeometric functions ------------------------ The functions listed in :doc:`expintegrals`, :doc:`bessel` and :doc:`orthogonal`, and many other functions as well, are merely particular instances of the generalized hypergeometric function `\,_pF_q`. The functions listed in the following section enable efficient direct evaluation of the underlying hypergeometric series, as well as linear combinations, limits with respect to parameters, and analytic continuations thereof. Extensions to twodimensional series are also provided. See also the basic or q-analog of the hypergeometric series in :doc:`qfunctions`. For convenience, most of the hypergeometric series of low order are provided as standalone functions. They can equivalently be evaluated using :func:`~mpmath.hyper`. As will be demonstrated in the respective docstrings, all the ``hyp#f#`` functions implement analytic continuations and/or asymptotic expansions with respect to the argument `z`, thereby permitting evaluation for `z` anywhere in the complex plane. Functions of higher degree can be computed via :func:`~mpmath.hyper`, but generally only in rapidly convergent instances. Most hypergeometric and hypergeometric-derived functions accept optional keyword arguments to specify options for :func:`hypercomb` or :func:`hyper`. Some useful options are *maxprec*, *maxterms*, *zeroprec*, *accurate_small*, *hmag*, *force_series*, *asymp_tol* and *eliminate*. These options give control over what to do in case of slow convergence, extreme loss of accuracy or evaluation at zeros (these two cases cannot generally be distinguished from each other automatically), and singular parameter combinations. Common hypergeometric series ............................ :func:`hyp0f1` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp0f1(a, z) :func:`hyp1f1` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp1f1(a, b, z) :func:`hyp1f2` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp1f2(a1, b1, b2, z) :func:`hyp2f0` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp2f0(a, b, z) :func:`hyp2f1` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp2f1(a, b, c, z) :func:`hyp2f2` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp2f2(a1, a2, b1, b2, z) :func:`hyp2f3` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp2f3(a1, a2, b1, b2, b3, z) :func:`hyp3f2` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyp3f2(a1, a2, a3, b1, b2, z) Generalized hypergeometric functions .................................... :func:`hyper` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyper(a_s, b_s, z) :func:`hypercomb` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.hypercomb Meijer G-function ................................... :func:`meijerg` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.meijerg(a_s,b_s,z,r=1,**kwargs) Bilateral hypergeometric series ............................... :func:`bihyper` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bihyper(a_s,b_s,z,**kwargs) Hypergeometric functions of two variables ............................................... :func:`hyper2d` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.hyper2d(a,b,x,y,**kwargs) :func:`appellf1` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.appellf1(a,b1,b2,c,x,y,**kwargs) :func:`appellf2` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.appellf2(a,b1,b2,c1,c2,x,y,**kwargs) :func:`appellf3` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.appellf3(a1,a2,b1,b2,c,x,y,**kwargs) :func:`appellf4` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.appellf4(a,b,c1,c2,x,y,**kwargs) mpmath-1.0.0/doc/source/functions/index.txt000066400000000000000000000013721316273626600207420ustar00rootroot00000000000000Mathematical functions ====================== Mpmath implements the standard functions from Python's ``math`` and ``cmath`` modules, for both real and complex numbers and with arbitrary precision. Many other functions are also available in mpmath, including commonly-used variants of standard functions (such as the alternative trigonometric functions sec, csc, cot), but also a large number of "special functions" such as the gamma function, the Riemann zeta function, error functions, Bessel functions, etc. .. toctree:: :maxdepth: 2 constants.txt powers.txt trigonometric.txt hyperbolic.txt gamma.txt expintegrals.txt bessel.txt orthogonal.txt hypergeometric.txt elliptic.txt zeta.txt numtheory.txt qfunctions.txt mpmath-1.0.0/doc/source/functions/numtheory.txt000066400000000000000000000034031316273626600216620ustar00rootroot00000000000000Number-theoretical, combinatorial and integer functions ------------------------------------------------------- For factorial-type functions, including binomial coefficients, double factorials, etc., see the separate section :doc:`gamma`. Fibonacci numbers ................. :func:`fibonacci`/:func:`fib` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.fibonacci(n, **kwargs) Bernoulli numbers and polynomials ................................. :func:`bernoulli` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bernoulli(n) :func:`bernfrac` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bernfrac(n) :func:`bernpoly` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bernpoly(n,z) Euler numbers and polynomials ................................. :func:`eulernum` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.eulernum(n) :func:`eulerpoly` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.eulerpoly(n,z) Bell numbers and polynomials ........................................... :func:`bell` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.bell(n,x) Stirling numbers ........................................... :func:`stirling1` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.stirling1(n,k,exact=False) :func:`stirling2` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.stirling2(n,k,exact=False) Prime counting functions ........................ :func:`primepi` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.primepi(x) :func:`primepi2` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.primepi2(x) :func:`riemannr` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.riemannr(x) Cyclotomic polynomials ...................... :func:`cyclotomic` ^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.cyclotomic(n,x) Arithmetic functions ...................... :func:`mangoldt` ^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.mangoldt(n) mpmath-1.0.0/doc/source/functions/orthogonal.txt000066400000000000000000000051151316273626600220060ustar00rootroot00000000000000Orthogonal polynomials ---------------------- An orthogonal polynomial sequence is a sequence of polynomials `P_0(x), P_1(x), \ldots` of degree `0, 1, \ldots`, which are mutually orthogonal in the sense that .. math :: \int_S P_n(x) P_m(x) w(x) dx = \begin{cases} c_n \ne 0 & \text{if $m = n$} \\ 0 & \text{if $m \ne n$} \end{cases} where `S` is some domain (e.g. an interval `[a,b] \in \mathbb{R}`) and `w(x)` is a fixed *weight function*. A sequence of orthogonal polynomials is determined completely by `w`, `S`, and a normalization convention (e.g. `c_n = 1`). Applications of orthogonal polynomials include function approximation and solution of differential equations. Orthogonal polynomials are sometimes defined using the differential equations they satisfy (as functions of `x`) or the recurrence relations they satisfy with respect to the order `n`. Other ways of defining orthogonal polynomials include differentiation formulas and generating functions. The standard orthogonal polynomials can also be represented as hypergeometric series (see :doc:`hypergeometric`), more specifically using the Gauss hypergeometric function `\,_2F_1` in most cases. The following functions are generally implemented using hypergeometric functions since this is computationally efficient and easily generalizes. For more information, see the `Wikipedia article on orthogonal polynomials `_. Legendre functions ....................................... :func:`legendre` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.legendre(n, x) :func:`legenp` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.legenp(n, m, z, type=2) :func:`legenq` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.legenq(n, m, z, type=2) Chebyshev polynomials ..................... :func:`chebyt` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.chebyt(n, x) :func:`chebyu` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.chebyu(n, x) Jacobi polynomials .................. :func:`jacobi` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.jacobi(n, a, b, z) Gegenbauer polynomials ..................................... :func:`gegenbauer` ^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.gegenbauer(n, a, z) Hermite polynomials ..................................... :func:`hermite` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.hermite(n, z) Laguerre polynomials ....................................... :func:`laguerre` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.laguerre(n, a, z) Spherical harmonics ..................................... :func:`spherharm` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.spherharm(l, m, theta, phi) mpmath-1.0.0/doc/source/functions/powers.txt000066400000000000000000000025601316273626600211520ustar00rootroot00000000000000Powers and logarithms --------------------- Nth roots ......... :func:`sqrt` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.sqrt(x, **kwargs) :func:`hypot` ^^^^^^^^^^^^^ .. autofunction:: mpmath.hypot(x, y) :func:`cbrt` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.cbrt(x, **kwargs) :func:`root` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.root(z, n, k=0) :func:`unitroots` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.unitroots(n, primitive=False) Exponentiation .............. :func:`exp` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.exp(x, **kwargs) :func:`power` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.power(x, y) :func:`expj` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.expj(x, **kwargs) :func:`expjpi` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.expjpi(x, **kwargs) :func:`expm1` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.expm1(x) :func:`powm1` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.powm1(x, y) Logarithms .......... :func:`log` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.log(x, b=None) :func:`ln` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.ln(x, **kwargs) :func:`log10` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.log10(x) Lambert W function ................................................... :func:`lambertw` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.lambertw(z, k=0) Arithmetic-geometric mean ....................................... :func:`agm` ^^^^^^^^^^^^^^ .. autofunction:: mpmath.agm(a, b=1) mpmath-1.0.0/doc/source/functions/qfunctions.txt000066400000000000000000000011531316273626600220210ustar00rootroot00000000000000q-functions ------------------------------------------- q-Pochhammer symbol .................................................. :func:`qp` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.qp(a, q=None, n=None, **kwargs) q-gamma and factorial .................................................. :func:`qgamma` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.qgamma(z, q, **kwargs) :func:`qfac` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.qfac(z, q, **kwargs) Hypergeometric q-series .................................................. :func:`qhyper` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.qhyper(a_s, b_s, q, z, **kwargs) mpmath-1.0.0/doc/source/functions/trigonometric.txt000066400000000000000000000050571316273626600225240ustar00rootroot00000000000000Trigonometric functions ----------------------- Except where otherwise noted, the trigonometric functions take a radian angle as input and the inverse trigonometric functions return radian angles. The ordinary trigonometric functions are single-valued functions defined everywhere in the complex plane (except at the poles of tan, sec, csc, and cot). They are defined generally via the exponential function, e.g. .. math :: \cos(x) = \frac{e^{ix} + e^{-ix}}{2}. The inverse trigonometric functions are multivalued, thus requiring branch cuts, and are generally real-valued only on a part of the real line. Definitions and branch cuts are given in the documentation of each function. The branch cut conventions used by mpmath are essentially the same as those found in most standard mathematical software, such as Mathematica and Python's own ``cmath`` libary (as of Python 2.6; earlier Python versions implement some functions erroneously). Degree-radian conversion ........................................................... :func:`degrees` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.degrees(x) :func:`radians` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.radians(x) Trigonometric functions ....................... :func:`cos` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.cos(x, **kwargs) :func:`sin` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sin(x, **kwargs) :func:`tan` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.tan(x, **kwargs) :func:`sec` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sec(x) :func:`csc` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.csc(x) :func:`cot` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.cot(x) Trigonometric functions with modified argument ........................................................ :func:`cospi` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.cospi(x, **kwargs) :func:`sinpi` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sinpi(x, **kwargs) Inverse trigonometric functions ................................................ :func:`acos` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.acos(x, **kwargs) :func:`asin` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.asin(x, **kwargs) :func:`atan` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.atan(x, **kwargs) :func:`atan2` ^^^^^^^^^^^^^ .. autofunction:: mpmath.atan2(y, x) :func:`asec` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.asec(x) :func:`acsc` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.acsc(x) :func:`acot` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.acot(x) Sinc function ............. :func:`sinc` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sinc(x) :func:`sincpi` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sincpi(x) mpmath-1.0.0/doc/source/functions/zeta.txt000066400000000000000000000040051316273626600205720ustar00rootroot00000000000000Zeta functions, L-series and polylogarithms ------------------------------------------- This section includes the Riemann zeta functions and associated functions pertaining to analytic number theory. Riemann and Hurwitz zeta functions .................................................. :func:`zeta` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.zeta(s,a=1,derivative=0) Dirichlet L-series .................................................. :func:`altzeta` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.altzeta(s) :func:`dirichlet` ^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.dirichlet(s,chi,derivative=0) Stieltjes constants ................... :func:`stieltjes` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.stieltjes(n,a=1) Zeta function zeros ...................................... These functions are used for the study of the Riemann zeta function in the critical strip. :func:`zetazero` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.zetazero(n, verbose=False) :func:`nzeros` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nzeros(t) :func:`siegelz` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.siegelz(t) :func:`siegeltheta` ^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.siegeltheta(t) :func:`grampoint` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.grampoint(n) :func:`backlunds` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.backlunds(t) Lerch transcendent ................................ :func:`lerchphi` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.lerchphi(z,s,a) Polylogarithms and Clausen functions ....................................... :func:`polylog` ^^^^^^^^^^^^^^^ .. autofunction:: mpmath.polylog(s,z) :func:`clsin` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.clsin(s, z) :func:`clcos` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.clcos(s, z) :func:`polyexp` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.polyexp(s,z) Zeta function variants .......................... :func:`primezeta` ^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.primezeta(s) :func:`secondzeta` ^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.secondzeta(s, a=0.015, **kwargs) mpmath-1.0.0/doc/source/general.txt000066400000000000000000000104511316273626600172360ustar00rootroot00000000000000Utility functions =============================================== This page lists functions that perform basic operations on numbers or aid general programming. Conversion and printing ----------------------- :func:`mpmathify` / :func:`convert` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.mpmathify(x, strings=True) :func:`nstr` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nstr(x, n=6, **kwargs) :func:`nprint` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nprint(x, n=6, **kwargs) Arithmetic operations --------------------- See also :func:`mpmath.sqrt`, :func:`mpmath.exp` etc., listed in :doc:`functions/powers` :func:`fadd` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fadd :func:`fsub` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fsub :func:`fneg` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fneg :func:`fmul` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fmul :func:`fdiv` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fdiv :func:`fmod` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fmod(x, y) :func:`fsum` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fsum(terms, absolute=False, squared=False) :func:`fprod` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fprod(factors) :func:`fdot` ^^^^^^^^^^^^^ .. autofunction:: mpmath.fdot(A, B=None, conjugate=False) Complex components ------------------ :func:`fabs` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.fabs(x) :func:`sign` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.sign(x) :func:`re` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.re(x) :func:`im` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.im(x) :func:`arg` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.arg(x) :func:`conj` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.conj(x) :func:`polar` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.polar(x) :func:`rect` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.rect(x) Integer and fractional parts ----------------------------- :func:`floor` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.floor(x) :func:`ceil` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ceil(x) :func:`nint` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nint(x) :func:`frac` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.frac(x) Tolerances and approximate comparisons -------------------------------------- :func:`chop` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.chop(x, tol=None) :func:`almosteq` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.almosteq(s, t, rel_eps=None, abs_eps=None) Properties of numbers ------------------------------------- :func:`isinf` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.isinf(x) :func:`isnan` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.isnan(x) :func:`isnormal` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.isnormal(x) :func:`isfinite` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.isfinite(x) :func:`isint` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.isint(x, gaussian=False) :func:`ldexp` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.ldexp(x, n) :func:`frexp` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.frexp(x, n) :func:`mag` ^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.mag(x) :func:`nint_distance` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.nint_distance(x) .. :func:`absmin` .. ^^^^^^^^^^^^^^^^^^^^ .. .. autofunction:: mpmath.absmin(x) .. .. autofunction:: mpmath.absmax(x) Number generation ----------------- :func:`fraction` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.fraction(p,q) :func:`rand` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.rand() :func:`arange` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.arange(*args) :func:`linspace` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.linspace(*args, **kwargs) Precision management -------------------- :func:`autoprec` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.autoprec :func:`workprec` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.workprec :func:`workdps` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.workdps :func:`extraprec` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.extraprec :func:`extradps` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.extradps Performance and debugging ------------------------------------ :func:`memoize` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.memoize :func:`maxcalls` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.maxcalls :func:`monitor` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.monitor :func:`timing` ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.timing mpmath-1.0.0/doc/source/identification.txt000066400000000000000000000033301316273626600206100ustar00rootroot00000000000000Number identification ===================== Most function in mpmath are concerned with producing approximations from exact mathematical formulas. It is also useful to consider the inverse problem: given only a decimal approximation for a number, such as 0.7320508075688772935274463, is it possible to find an exact formula? Subject to certain restrictions, such "reverse engineering" is indeed possible thanks to the existence of *integer relation algorithms*. Mpmath implements the PSLQ algorithm (developed by H. Ferguson), which is one such algorithm. Automated number recognition based on PSLQ is not a silver bullet. Any occurring transcendental constants (`\pi`, `e`, etc) must be guessed by the user, and the relation between those constants in the formula must be linear (such as `x = 3 \pi + 4 e`). More complex formulas can be found by combining PSLQ with functional transformations; however, this is only feasible to a limited extent since the computation time grows exponentially with the number of operations that need to be combined. The number identification facilities in mpmath are inspired by the `Inverse Symbolic Calculator `_ (ISC). The ISC is more powerful than mpmath, as it uses a lookup table of millions of precomputed constants (thereby mitigating the problem with exponential complexity). Constant recognition ----------------------------------- :func:`identify` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.identify Algebraic identification --------------------------------------- :func:`findpoly` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.findpoly Integer relations (PSLQ) ---------------------------- :func:`pslq` ^^^^^^^^^^^^^^^^ .. autofunction:: mpmath.pslq mpmath-1.0.0/doc/source/index.txt000066400000000000000000000026071316273626600167340ustar00rootroot00000000000000.. mpmath documentation master file, created by sphinx-quickstart on Fri Mar 28 13:50:14 2008. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to mpmath's documentation! ================================== Mpmath is a Python library for arbitrary-precision floating-point arithmetic. For general information about mpmath, see the project website http://mpmath.org/ These documentation pages include general information as well as docstring listing with extensive use of examples that can be run in the interactive Python interpreter. For quick access to the docstrings of individual functions, use the `index listing `_, or type ``help(mpmath.function_name)`` in the Python interactive prompt. Introduction ------------ .. toctree :: :maxdepth: 2 setup.txt basics.txt Basic features ---------------- .. toctree :: :maxdepth: 2 contexts.txt general.txt plotting.txt Advanced mathematics -------------------- On top of its support for arbitrary-precision arithmetic, mpmath provides extensive support for transcendental functions, evaluation of sums, integrals, limits, roots, and so on. .. toctree :: :maxdepth: 2 functions/index.txt calculus/index.txt matrices.txt identification.txt End matter ---------- .. toctree :: :maxdepth: 2 technical.txt references.txt mpmath-1.0.0/doc/source/matrices.txt000066400000000000000000000335411316273626600174350ustar00rootroot00000000000000Matrices ======== Creating matrices ----------------- Basic methods ............. Matrices in mpmath are implemented using dictionaries. Only non-zero values are stored, so it is cheap to represent sparse matrices. The most basic way to create one is to use the ``matrix`` class directly. You can create an empty matrix specifying the dimensions:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> matrix(2) matrix( [['0.0', '0.0'], ['0.0', '0.0']]) >>> matrix(2, 3) matrix( [['0.0', '0.0', '0.0'], ['0.0', '0.0', '0.0']]) Calling ``matrix`` with one dimension will create a square matrix. To access the dimensions of a matrix, use the ``rows`` or ``cols`` keyword:: >>> A = matrix(3, 2) >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0'], ['0.0', '0.0']]) >>> A.rows 3 >>> A.cols 2 You can also change the dimension of an existing matrix. This will set the new elements to 0. If the new dimension is smaller than before, the concerning elements are discarded:: >>> A.rows = 2 >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0']]) Internally ``convert`` is applied every time an element is set. This is done using the syntax A[row,column], counting from 0:: >>> A = matrix(2) >>> A[1,1] = 1 + 1j >>> print(A) [0.0 0.0] [0.0 (1.0 + 1.0j)] A more comfortable way to create a matrix lets you use nested lists:: >>> matrix([[1, 2], [3, 4]]) matrix( [['1.0', '2.0'], ['3.0', '4.0']]) Advanced methods ................ Convenient functions are available for creating various standard matrices:: >>> zeros(2) matrix( [['0.0', '0.0'], ['0.0', '0.0']]) >>> ones(2) matrix( [['1.0', '1.0'], ['1.0', '1.0']]) >>> diag([1, 2, 3]) # diagonal matrix matrix( [['1.0', '0.0', '0.0'], ['0.0', '2.0', '0.0'], ['0.0', '0.0', '3.0']]) >>> eye(2) # identity matrix matrix( [['1.0', '0.0'], ['0.0', '1.0']]) You can even create random matrices:: >>> randmatrix(2) # doctest:+SKIP matrix( [['0.53491598236191806', '0.57195669543302752'], ['0.85589992269513615', '0.82444367501382143']]) Vectors ....... Vectors may also be represented by the ``matrix`` class (with rows = 1 or cols = 1). For vectors there are some things which make life easier. A column vector can be created using a flat list, a row vectors using an almost flat nested list:: >>> matrix([1, 2, 3]) matrix( [['1.0'], ['2.0'], ['3.0']]) >>> matrix([[1, 2, 3]]) matrix( [['1.0', '2.0', '3.0']]) Optionally vectors can be accessed like lists, using only a single index:: >>> x = matrix([1, 2, 3]) >>> x[1] mpf('2.0') >>> x[1,0] mpf('2.0') Other ..... Like you probably expected, matrices can be printed:: >>> print(randmatrix(3)) # doctest:+SKIP [ 0.782963853573023 0.802057689719883 0.427895717335467] [0.0541876859348597 0.708243266653103 0.615134039977379] [ 0.856151514955773 0.544759264818486 0.686210904770947] Use ``nstr`` or ``nprint`` to specify the number of digits to print:: >>> nprint(randmatrix(5), 3) # doctest:+SKIP [2.07e-1 1.66e-1 5.06e-1 1.89e-1 8.29e-1] [6.62e-1 6.55e-1 4.47e-1 4.82e-1 2.06e-2] [4.33e-1 7.75e-1 6.93e-2 2.86e-1 5.71e-1] [1.01e-1 2.53e-1 6.13e-1 3.32e-1 2.59e-1] [1.56e-1 7.27e-2 6.05e-1 6.67e-2 2.79e-1] As matrices are mutable, you will need to copy them sometimes:: >>> A = matrix(2) >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0']]) >>> B = A.copy() >>> B[0,0] = 1 >>> B matrix( [['1.0', '0.0'], ['0.0', '0.0']]) >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0']]) Finally, it is possible to convert a matrix to a nested list. This is very useful, as most Python libraries involving matrices or arrays (namely NumPy or SymPy) support this format:: >>> B.tolist() [[mpf('1.0'), mpf('0.0')], [mpf('0.0'), mpf('0.0')]] Matrix operations ----------------- You can add and substract matrices of compatible dimensions:: >>> A = matrix([[1, 2], [3, 4]]) >>> B = matrix([[-2, 4], [5, 9]]) >>> A + B matrix( [['-1.0', '6.0'], ['8.0', '13.0']]) >>> A - B matrix( [['3.0', '-2.0'], ['-2.0', '-5.0']]) >>> A + ones(3) # doctest:+ELLIPSIS Traceback (most recent call last): File "", line 1, in File "...", line 238, in __add__ raise ValueError('incompatible dimensions for addition') ValueError: incompatible dimensions for addition It is possible to multiply or add matrices and scalars. In the latter case the operation will be done element-wise:: >>> A * 2 matrix( [['2.0', '4.0'], ['6.0', '8.0']]) >>> A / 4 matrix( [['0.25', '0.5'], ['0.75', '1.0']]) >>> A - 1 matrix( [['0.0', '1.0'], ['2.0', '3.0']]) Of course you can perform matrix multiplication, if the dimensions are compatible:: >>> A * B matrix( [['8.0', '22.0'], ['14.0', '48.0']]) >>> matrix([[1, 2, 3]]) * matrix([[-6], [7], [-2]]) matrix( [['2.0']]) You can raise powers of square matrices:: >>> A**2 matrix( [['7.0', '10.0'], ['15.0', '22.0']]) Negative powers will calculate the inverse:: >>> A**-1 matrix( [['-2.0', '1.0'], ['1.5', '-0.5']]) >>> nprint(A * A**-1, 3) [ 1.0 1.08e-19] [-2.17e-19 1.0] Matrix transposition is straightforward:: >>> A = ones(2, 3) >>> A matrix( [['1.0', '1.0', '1.0'], ['1.0', '1.0', '1.0']]) >>> A.T matrix( [['1.0', '1.0'], ['1.0', '1.0'], ['1.0', '1.0']]) Norms ..... Sometimes you need to know how "large" a matrix or vector is. Due to their multidimensional nature it's not possible to compare them, but there are several functions to map a matrix or a vector to a positive real number, the so called norms. .. autofunction :: mpmath.norm .. autofunction :: mpmath.mnorm Linear algebra -------------- Decompositions .............. .. autofunction :: mpmath.cholesky Linear equations ................ Basic linear algebra is implemented; you can for example solve the linear equation system:: x + 2*y = -10 3*x + 4*y = 10 using ``lu_solve``:: >>> A = matrix([[1, 2], [3, 4]]) >>> b = matrix([-10, 10]) >>> x = lu_solve(A, b) >>> x matrix( [['30.0'], ['-20.0']]) If you don't trust the result, use ``residual`` to calculate the residual ||A*x-b||:: >>> residual(A, x, b) matrix( [['3.46944695195361e-18'], ['3.46944695195361e-18']]) >>> str(eps) '2.22044604925031e-16' As you can see, the solution is quite accurate. The error is caused by the inaccuracy of the internal floating point arithmetic. Though, it's even smaller than the current machine epsilon, which basically means you can trust the result. If you need more speed, use NumPy, or use ``fp`` instead ``mp`` matrices and methods:: >>> A = fp.matrix([[1, 2], [3, 4]]) >>> b = fp.matrix([-10, 10]) >>> fp.lu_solve(A, b) # doctest:+SKIP matrix( [['30.0'], ['-20.0']]) ``lu_solve`` accepts overdetermined systems. It is usually not possible to solve such systems, so the residual is minimized instead. Internally this is done using Cholesky decomposition to compute a least squares approximation. This means that that ``lu_solve`` will square the errors. If you can't afford this, use ``qr_solve`` instead. It is twice as slow but more accurate, and it calculates the residual automatically. Matrix factorization .................... The function ``lu`` computes an explicit LU factorization of a matrix:: >>> P, L, U = lu(matrix([[0,2,3],[4,5,6],[7,8,9]])) >>> print(P) [0.0 0.0 1.0] [1.0 0.0 0.0] [0.0 1.0 0.0] >>> print(L) [ 1.0 0.0 0.0] [ 0.0 1.0 0.0] [0.571428571428571 0.214285714285714 1.0] >>> print(U) [7.0 8.0 9.0] [0.0 2.0 3.0] [0.0 0.0 0.214285714285714] >>> print(P.T*L*U) [0.0 2.0 3.0] [4.0 5.0 6.0] [7.0 8.0 9.0] The function ``qr`` computes a QR factorization of a matrix:: >>> A = matrix([[1, 2], [3, 4], [1, 1]]) >>> Q, R = qr(A) >>> print(Q) [-0.301511344577764 0.861640436855329 0.408248290463863] [-0.904534033733291 -0.123091490979333 -0.408248290463863] [-0.301511344577764 -0.492365963917331 0.816496580927726] >>> print(R) [-3.3166247903554 -4.52267016866645] [ 0.0 0.738548945875996] [ 0.0 0.0] >>> print(Q * R) [1.0 2.0] [3.0 4.0] [1.0 1.0] >>> print(chop(Q.T * Q)) [1.0 0.0 0.0] [0.0 1.0 0.0] [0.0 0.0 1.0] The singular value decomposition ................................ The routines ``svd_r`` and ``svd_c`` compute the singular value decomposition of a real or complex matrix A. ``svd`` is an unified interface calling either ``svd_r`` or ``svd_c`` depending on whether *A* is real or complex. Given *A*, two orthogonal (*A* real) or unitary (*A* complex) matrices *U* and *V* are calculated such that .. math :: A = U S V, \quad U' U = 1, \quad V V' = 1 where *S* is a suitable shaped matrix whose off-diagonal elements are zero. Here ' denotes the hermitian transpose (i.e. transposition and complex conjugation). The diagonal elements of *S* are the singular values of *A*, i.e. the square roots of the eigenvalues of `A' A` or `A A'`. Examples:: >>> from mpmath import mp >>> A = mp.matrix([[2, -2, -1], [3, 4, -2], [-2, -2, 0]]) >>> S = mp.svd_r(A, compute_uv = False) >>> print(S) [6.0] [3.0] [1.0] >>> U, S, V = mp.svd_r(A) >>> print(mp.chop(A - U * mp.diag(S) * V)) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] The Schur decomposition ....................... This routine computes the Schur decomposition of a square matrix *A*. Given *A*, a unitary matrix *Q* is determined such that .. math :: Q' A Q = R, \quad Q' Q = Q Q' = 1 where *R* is an upper right triangular matrix. Here ' denotes the hermitian transpose (i.e. transposition and conjugation). Examples:: >>> from mpmath import mp >>> A = mp.matrix([[3, -1, 2], [2, 5, -5], [-2, -3, 7]]) >>> Q, R = mp.schur(A) >>> mp.nprint(R, 3) # doctest:+SKIP [2.0 0.417 -2.53] [0.0 4.0 -4.74] [0.0 0.0 9.0] >>> print(mp.chop(A - Q * R * Q.transpose_conj())) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] The eigenvalue problem ...................... The routine ``eig`` solves the (ordinary) eigenvalue problem for a real or complex square matrix *A*. Given *A*, a vector *E* and matrices *ER* and *EL* are calculated such that .. code :: A ER[:,i] = E[i] ER[:,i] EL[i,:] A = EL[i,:] E[i] *E* contains the eigenvalues of *A*. The columns of *ER* contain the right eigenvectors of *A* whereas the rows of *EL* contain the left eigenvectors. Examples:: >>> from mpmath import mp >>> A = mp.matrix([[3, -1, 2], [2, 5, -5], [-2, -3, 7]]) >>> E, ER = mp.eig(A) >>> print(mp.chop(A * ER[:,0] - E[0] * ER[:,0])) [0.0] [0.0] [0.0] >>> E, EL, ER = mp.eig(A,left = True, right = True) >>> E, EL, ER = mp.eig_sort(E, EL, ER) >>> mp.nprint(E) [2.0, 4.0, 9.0] >>> print(mp.chop(A * ER[:,0] - E[0] * ER[:,0])) [0.0] [0.0] [0.0] >>> print(mp.chop( EL[0,:] * A - EL[0,:] * E[0])) [0.0 0.0 0.0] The symmetric eigenvalue problem ................................ The routines ``eigsy`` and ``eighe`` solve the (ordinary) eigenvalue problem for a real symmetric or complex hermitian square matrix *A*. ``eigh`` is an unified interface for this two functions calling either ``eigsy`` or ``eighe`` depending on whether *A* is real or complex. Given *A*, an orthogonal (*A* real) or unitary matrix *Q* (*A* complex) is calculated which diagonalizes A: .. math :: Q' A Q = \operatorname{diag}(E), \quad Q Q' = Q' Q = 1 Here diag(*E*) a is diagonal matrix whose diagonal is *E*. ' denotes the hermitian transpose (i.e. ordinary transposition and complex conjugation). The columns of *Q* are the eigenvectors of *A* and *E* contains the eigenvalues: .. code :: A Q[:,i] = E[i] Q[:,i] Examples:: >>> from mpmath import mp >>> A = mp.matrix([[3, 2], [2, 0]]) >>> E = mp.eigsy(A, eigvals_only = True) >>> print(E) [-1.0] [ 4.0] >>> A = mp.matrix([[1, 2], [2, 3]]) >>> E, Q = mp.eigsy(A) # alternative: E, Q = mp.eigh(A) >>> print(mp.chop(A * Q[:,0] - E[0] * Q[:,0])) [0.0] [0.0] >>> A = mp.matrix([[1, 2 + 5j], [2 - 5j, 3]]) >>> E, Q = mp.eighe(A) # alternative: E, Q = mp.eigh(A) >>> print(mp.chop(A * Q[:,0] - E[0] * Q[:,0])) [0.0] [0.0] Interval and double-precision matrices -------------------------------------- The ``iv.matrix`` and ``fp.matrix`` classes convert inputs to intervals and Python floating-point numbers respectively. Interval matrices can be used to perform linear algebra operations with rigorous error tracking:: >>> a = iv.matrix([['0.1','0.3','1.0'], ... ['7.1','5.5','4.8'], ... ['3.2','4.4','5.6']]) >>> >>> b = iv.matrix(['4','0.6','0.5']) >>> c = iv.lu_solve(a, b) >>> print(c) [ [5.2582327113062393041, 5.2582327113062749951]] [[-13.155049396267856583, -13.155049396267821167]] [ [7.4206915477497212555, 7.4206915477497310922]] >>> print(a*c) [ [3.9999999999999866773, 4.0000000000000133227]] [[0.59999999999972430942, 0.60000000000027142733]] [[0.49999999999982236432, 0.50000000000018474111]] Matrix functions ---------------- .. autofunction :: mpmath.expm .. autofunction :: mpmath.cosm .. autofunction :: mpmath.sinm .. autofunction :: mpmath.sqrtm .. autofunction :: mpmath.logm .. autofunction :: mpmath.powm mpmath-1.0.0/doc/source/plot.png000066400000000000000000000502061316273626600165460ustar00rootroot00000000000000‰PNG  IHDRàh7( PMIDATx^ìÀAƒ@ aÿV«3[øâ¦m€å$I:öêØFu(ÃèmNì .$tä[€;¢Èé‘cK¶3Š˜•ˆÑ“Y“ý£É¿Ì|äG‡ø8@€@€@€``@€@€@€`à}``@€@€¸ÖMÓÄétŠw†aˆRJœÏçÇ1þpß÷q¿ßãÛí˲Ä4Mq¹\žÿ»™ùÈ/1ÏsÇü—Zk^¯××.¥äº®¹Gpˆ?bÛ¶èºîµÛ¶}Þö~â‹ü²g6¹ ƒ@}þ –å¢È·h/Õ^χꦻ°DL¬ÖÂêÂòÆ»Úmfó1ÒŒ>Áb†Ýü,ϲlÁTU…RŠ¢(BÐ4MRk-RJBäyž˜cÊ›ÓZÓ¶íÚý6Ãyïwâó’3ÆP×õ¦ê3ÆòxH´†û=9 € ™”L1qe)8Ÿ#U8ÿð}¹^ɽG8G¼Ý~\™¸¹+K÷ÊN'ìá€u幉Öú²%.é0 {x—‰׉sÎÑ÷=ˆçºëºÙz쀜Rêk¯1þkÿ㺟µ³wÐQUÝ? $¡ö"EšH轈 EiR{‘*¢‚~"`Eÿú‰¨X° ~¢¢¤†N$@P@Š€€€¨éEªÔ~þ¹ï.8+ÌËŒ)3óÞ›ý[+KĘ9³ß}ór÷½wŸøxæO?e.Y’™H¾‚‚˜ëÔa5ŠyÚ4æéÓ™›6}DýÙø»:uô÷ÉW©RúgÅÇ;Lóädæ3˜ N-RöìÌÍš1ÆüñÇÌK—2ÏšÅüÑGÌ£G3·há*R±bÌS¦0'%aœ[”âÅ‹³qÌX­ÿvíÚ•Û·oçš5k:î‚Mœ81@ëFí‡1ßsOêçCùòÌ_Í|ñ¢§ºÕ÷¨ïÕÿü ý3rˆæG2·k—Z¤rå˜ß~›ùôiö€þžÏ>cnÐ µHêß·mÃ8÷xÛ€‡zˆK”(Á!!!œ²¾Ë);ùË/¿4¾nòÔSOqÕªU¹N:ÆCØŒòêȦlݺ5ëFíóæ1çË'σ ôL7>>ýuÇÇëÿ·BùyÊš?ßæšó sž<"Òw0Ï™#³×ô΢gÍR6ˆª„Ã8· òyް(S¦ Û•¨¨¨€¨µ‹åüÄ©]Ñ#˜cc3_wl¬þYò³õkÅÇÛFs±œÇŒI-ÒàÁÌ.p¦¹vù•W”}-"=û,sb"ƹE¨R¥ ,h;ÎvåÂ… R7j‹cîÖM\ÐB…˜—,Éúº/f.XP^G½f\œå5—éü!R¼Z÷õƃdíÚÔkÊ>È|é’ÓÆ9À° qÁ¸qƒ¹Cq?ë×g>vŒ½„þÙõêÉëuì¨k°(2;Õë½² ¾oŸwákÔH½x~å <€q8¨­övåàÁƒ¯µÇÄuéBIEG•.í­ºõÏ^³†èÞ{É`ùr]ÃÕ\ÝÃÝ»­XAõêmÚDN^£|y¢‰:u"ƒ-[´H±±çöIXX´Ç&,Ô.ŽjëÖât6k&“,ï×­^K½¦¼¾ªEÕdÍeÍwàÀÔE^½ê˵mOˆ] DÂ8‡£i?  y® &gË–Êeõ³ûÀRÇ“O²µxùe)®aCÿˆ£Î K}úÈÆ,{ 4àóω&M"ƒúõ‰–.UIPäcôk.[¦]]Å_èÚ,ÁgŸ½óT¬¨¼rÿˆ”3§¾@ ’ÁܹDcÆ[@?`gfWfÏží¸ºQ»^ã9’ J” Z¼˜(W.Õ­_{É]‹nó©Öˆý¬ùêÕºE±bDª3ZÑ¢ä7òæÕkÐUªÁ¸q4û…0ÎÓ€íGØ¿Ÿ¹@ídæÈÁl¥¥¸-[tMDꨒ®Õ/œ:¥b!u!¹r1ÿò [†?þu!ÿú‹-,hXЀ¸8¢^½ˆ.]"ƒiÓˆ4 ‹ Ö©SÉàŸˆz÷Ö}JRÑ€DgÏŠ'®üq«P¹²¾p u!{ôíã`Œ$,kÖÚ_|Q²F¶^ÝæuúXó7ß‘~˜­ŠJÈŠºYgÆàÅ ØùäÈ‘ƒìJƒ R7j_·Žèý÷åë›oZµn][ݺd0~<Ñúõ>Ñ\¿Ð˜12ÓT›°¬Ê»ïRƒFÄÊX¸ãÜ €5`ÿ€N1TF sΜzÑêüþ»¬«ÚÕ{ð*—/3ßy§,ŽïÚÅ–çäIÉõTkÖçÏ3À 3`$aY¨nÔ>|8ѱc¤0fÁ•+[¿î*UdÆ®júi/kþÚkD'NÁ„ D5kZ¬¨³O?%ƒ³gõÖv÷(À1¤ääd²+ÿüó­ëFíúˆÑÌ™dðàƒDÿù}4ê)¢¶mÉ`Æ uTÉKµoÞLô¿ÿ‘A³fDÆÙg¬ôï/q•ß}ç"îQ Úpý:sÙ²r¬çÔ)¶â²J¯û˜ÎZ¥!¾j¸w¯E’³eÅ‹»i`A{€l`:z” Þ~[‚.ìDÉ’Fæ„Á‘#ú=e!:lÛ62PÁU«ÚS¤?&ƒ¿ÿ&zî94’°|’°äaõÞ{dP§ÑãÛWó¡C‰j×¾µùW½·Ì"«—_&£òråˆ^}Õ¾ceÐ ¢víÈà›oä— Ü£´/ usý Øöüô“¼ŸîÝ9kèÛWDŠŒdÛsàsHˆ©IÝqÃ Ú $ÆxÑ"R¡NMší¹ï>½ßH¡Ž¼FGgHÚmÐiRíÛ“í¹ûnɯV½„, €À‚¾~ý:Ù••+W¢n›Õ/ŸÁyòˆ íÍÇ—fDê=&$Pƈ•íà)"­ìÖÍ)cEÛè… “Á‹/ª÷j×qðF–@–>MóçŸdðßÿªý9ÎѼdIýžü¡ßk†øàuõVìVƒvíœ3V  ;– ‘p¬àÝ&>yóê%Àðpæ¸8v±±Ì+2é÷zú4§óçE¤Zµ˜ØqÄÇ3W®¬EÊ—ùÌø}TÃ}ŒóòåS‹´w¯ÃÇ €}çbû¼ÿ>gúôa&Ò'k„Ò^N-¯ôŒÜwÛ·31 ÒºôëÇ´³É›—¨re2˜0AÛÑ€cLj""Èࡇˆ*T ³`C“üt‰šíûš x€¨n]!F½{“Áœ9D“HÂÒ;§N}÷¥2’°¤ßoR’ïL 4æ¢a4‰òÒ5Ùý›ŒóW^¹Ù)†èÝw=^’°tÓ’%µí£þ=)‰Ó W¯2çϯ‡Q³flˆ‹ãs¡% ‘~ ®ÎW¯$³  kW=²gg>y’,h'"MLG"ƒ?þ Z¾œÒ Ó¦]¾,3=`j!P‘øÓ¤x?ù9úæÛ 2¼ø"$&J“ §`A_¿~ † #Ê—Oš‚Û€•+W’ ¨Û/µ'%ÉI¶»î’~¸4'æ[¡7g+I³¨Ÿ¡™IKnŒóFˆê×'ƒ/¿$Š‹sÞxxçЬúáûä“d°q£þúW ­IXÚ4ùë/29R;As“'Ò­¾„Û  ¥ƒM 'Œs‹=bœ=K4ožÃÇ @7¤S§t*–’¡sgþ·Ð¼¹6ùò1_¹Âf€Ð"åÉÃWŽý£´24kÑ‚]zoÊwh‘êÕcNNf€5`G/ÇŽˆJ”ÐÉ ŠeˈŽA¢”G„µs'Ѻudðøãêd4waÇ¢~¸%RÞÒnõ¢_»V…—`œ›îMyâ 2ؾèçŸ6^’°n_€>\Ö«&MB¢”G„5a‚´|úihnÊGIì¤òèIi¥5 Œs’½)!!dðé§Ž/´Ð¸±¶}ŠÑ6 ȪEHˆ.½z±àìYYÚQ1a÷ì©´Sj-MýûË‘¤'ØÙÀ‚ÿùœ?/±F&0q"QB‚Û£Gà›oŒ„9¹·4¢™ÖðóÏÉ 0r¤IR™õN Ë…ž=‰Š%EZŸ H7BÖú„ˆâž{ˆî½š $iN_}EUª5mJ‚Ö¬aC釢4Å8wÙ’¬%)Ô²Xl¬#Ç €-¼ü²„ÅïÜÉ·À·ßÊ™3‡ÍÑÑ"Ò„ lÆìÙ¢ãôél˜5KDš6 ,h ÁAAi΂øúkRfI·nd˜4IÒæ "3ºwWЦ&€=Ô) ÙŒÅLŽ Ë”²e‰:v$…Ñ áÒ%$Ji„¥KiÃ2<˜(4š»pæŒjŒ,= "W´v?L?ýDôçŸç&"ÉúùÎdóñ„åy3VL ÑôéH”º’°&O–{ š›2uªÊ2GÉ ¢¡ÒãÜ”¡CÕƒX\9ÇÝ£kÀ‚îŠT¡‚^w©TéV @@QáÂHqR¸½wÊ—×"U¯.÷ŽÛ41§ÿ@ß¾Z¤°0æ‹Ù ` IXæK>ô¾}F’Ò„µx1Ñ… ’|e4_½šèðáTû)Ü¡µ”ÓK–`œ›òè£d§–Æv$a ²ÀgØÔÚöAº’°ôF!½¤Ù½;4w»ù*gN¢þõ>£‚e3ƹ ÷ßOT¾<L™bÿñ`A{dð`mûdËÆ|ü8.ààA9 2r$›NžT÷Šé‘G8=Œ!úþõ›ÞxCDÚ¾ ,hðÔSÒôuêT L€L:<ØÏIß+DÒLÀ3¢©h Òrå‚‚&@–9º1víÚdðí·Ê·°t#Ô-q‰³o%8U«Í]HJÿXÝ3éÜM[½º„>M›¦Ò1Î](]š¨m[9"yㆭïQ Ú3,¶Ïºux€E‹dLÊf€åËE¤/¾àŒ0eŠè¼x1›æÏ‘fÎdg ôï¯Ú‚I¸|À‚ä«|ùˆz÷&w ù*wn¢~ý(}HfGÞ¼¢¹  sg¢"EfC$a™£»$cÍ›GtíZ¥¡îãlj¢¢ŒêçJîÜÐÜT¤ÈHR"åËGéÃõÙ½b…rY1ÎM“±$ƒ$úë/ÛߣIXž7?(ÔC{Á‚€H7BÝꤗþ¤µù šOž¬D’ä«L 5ÖšïÙƒqîæL°,˜ÛøXöL|}(+è×OkN$écÐÜeÇšI’±|Q;€ËåÊ•ã'NpBBׯ_ŸwìØÁsʘŸ~ú鬷,êÕÓ¶OÙ²:tÞ±€Ó§™³g×—{È6\¾Ìœ#‡©o_Î*$„N_ƒ¿ÿf‘`A[-[¶PµjÕ¨T©R”={vêÓ§E;0f6¾²œG!ƒ£Gµí@€ä®$&ºI¾ºçol,Hîs–ÚЉ‰8ýçÆ†‘”ám,è”™/•V‰0ºóÎ;¿TZ[-\¸ÐxPwîÜ™Ž=jš„•nzHúrN›æÐt#ÔÍ,« *õêž{ ¹[û¹hQ¢6m(ëЉc¥J©Úõµ`†æ.4iBT©’ØÐÌÞ­À‚ž5k?ñÄ|“”ÃÆ cAµË¼hØÓŠÉ“'s“&MøvJ–,ɯ¿þ:Oœ8‘W¯^ÍQQQ©^ã&[·nå°âÂ… uß}ÚöÉ™“gM™’Ö÷¹ü<û|êÛ¹ófØÐ,~çÓú ß‰ÌAA¼•ˆ ä•úþûß LÅD¬®‰Y}¸ï½Ç³n&cmÜ@ºèÚ^|ñEãs¼|ùòlgló^¿~=wèÐo2~üx~ë­·Øyòäɺ5ƒÈH‰‚“°ƒÏ?/—øÈ6Œ/"mÛÆÞàèQy‰çžã´Àf…lÙì¾YkÀv øí·ßèäÉ“”2Ë¥yóæQ»víH :wîÝdÙ²eT±bEÓ$¬  ­¶%|nC# Ëw=fÍ"ƒ¦M‰Ê–…æ¦ÌœI íW¼Á¬¤æÍIa\“¤$ŒsŠ—¤¾¹sÕ›wkâøþûï9e}טžýöÛ¬xíµ×xéÒ¥¬=z4§Sâ”cJ†ýœòÀæÛ ç óâ‹2ER6‰OÑ–Œw@ÝkÖÈ¥4 š›²k—ˆôæ›^­ýë¯å¥V¯Æ87eñbiölÞ£˜# +=ìÝ+þ•WØ)íâ1‡„0§ñì/¼ ãÿÐ!ö&ÿüê_êᇘŸÍd.P@‹Ô©,h{€$¬ Sµ*QÆr^%)ÉöI;¨[Ÿ¨‰ˆ ƒöí‰ ‚æn=úûî#*_Þ«µ(@Ô©)Œö˜Œsˆzö”..X¸v€f ’„•ù3Á'N¨®$HÚAÝ‘‘êxšt¡„æ&¬]«ãú vIUÈ–.Å8O#>LÎ/X`ýÚš1dŠ‹™Ã´íÓ¯ÛЭ›¾œyó2Çİ;¾ªîŸ;¬rÂt)Y2@ÆÀ‚ uíJ‹ËîC`Ó™¢´´íÑCG߈‰‘ÙU‡êð™ÃÚ»÷ÍxuÊnd˦ƒ‚ë×Kk`AKV¦éß_>˜–-³mÒêÖ®]|¼\Vhî‚ö¯^ûÙ‡µ KÐsçbœ»µ¡™E$Ô`AgÞëÜ™í Юs‰iö :h‘ Ôc߇$%é(Dº® 9Y¯t|kXÐ@¼±=d÷¡ 70íÖ­['qßÊÍ» pö¬ö½{ë±ïC‚ƒÅ™Ø²…Èd³. ’YðŽDþIVÀ‚–$¬Ì#ë. ª; ¥lX·¸n&M} ¹¤,%%‰H>­Ýuià»ï0ÎMéÛ×e`[®v€pŽ9(KhÑ‚¨X12˜3Çgqœ¾ÂùuˇyåÊDuê@s·Ñ“åÊ5nìãÚåø}ݺR3ƹ ááDõëK~'³¥kXÎ<Çëu—à`›5Æ{öxLUþ)"½ú*û“>’R~þ™Í~("mÝŠÏsË‚$¬¬µ¡““%JÉ $aYuö+YÐÜ\$ñèýT»ÜjÁÁ2 6ã¼Oµ,³`‹×„•ùîáeÊx¶¡‘„e±1 \:¹„wÝÍ]`ûYÙ“•*ù±v݈¬U+¹Õ0Î](UJ-‰HII–«À‚ö^@ýÑ£ ìÐ[Z.ÙgŸ±`Ãé“OØ LŸ.%-_Î&€Tm¤¢£Ù¹À‚bCkæÍ#«ÄÂÌ–M’–Ü‘dŒû•®]%©Ìņç"6´eHÂÊ#G²UÚ…#b.^<ÍÆû`ð`-RŽÌW¯²`Mº@]n×®œhÔ_®œéÞ{ÙQÀ‚¦µ-ZH*VRùpáÑš5dн»iã}¯mE»vrŒÅR˜ÛÐ+V˜ÚÐ (H\¹Í›‰"+„å}úôi¢õë‘„eº—,‘\zÓ½Ð\/_º$ö³ jïÕKlèeË0Î=6êˆðí´W9ž9{vmû Êþ´k§/GÑ¢iÚÏàÑGµH¡¡Ì—/³`{6tåÊZ¤ `A;Ü‚… «ü\ùSY{ÀcÔÞ"·ö3HH³¢jìæËG‚}lhSs 6´8Û¶=Jþ ËwÑ”/ʧ?’°ü€¶&Ü:«Ð|Ý:5VE$»Ôn¾IX‚ë5]°À¿µ$ay•§^Gõ# ËODDˆ1Ѽ94w+RHˆŠŸ´Uí-[ª@²ïIX&Ô¬It÷Ýr­ýY;À°OèÙS¯»äÉÃþ\¾¬—4‰ô§ 1Q“Ôb¹ yä]~XXšË×ॗ$©ïøq|žû$aùΆ¾vMù;HÂò9Ú’Œwë¬BóŸ~R1a"’mj7·¡—-C–GzáBÿÕ„åÚµ“(¿ „åGû¹@¢€ænEÊ–M-بvszþ|$a™R·®ŠË‘üU;€í3zôЖO¾|̱±ì+€rÊ‘CËÿðÃlHJRÑ`Žì2Äã)*ðüóJ$Öwò$;XÐÀ³ísåŠD1y !ý±±nU°iÑß;@$ åˆ×ý$€šYŽù€$, eÂÂĆF–Ïíç¼y‰Z·†ænE –\GëÔî'ÚÁc¥aC¢Ò¥åÚû£v Ú§tî¬mŸB…tN/tÛ\¹´ìýûsZÀ~¾óN-Ò°à úÒ%6Œ¥E fþûoXз AÊ¡¼ˆŠ"Љqã¬Ý.óÄ ‰$¡ññ³¡aC''Kó _„åS:u’îï  ˇösîÜ’ Í]D’¨ÂnÝ0^ôN÷B…$”IX&Ü{¯êÚ&cÀ×µ$aù½0Õª•œ¿KJB–‰•ÙOÇŽD9sÒí@sfy7mJT¼¸#ÆKHˆü.¡ž'—/# Ë…à`qå~ü‘èüyßÖ°ìs¾þZRhÖ­cï–,©#"Ø °u«ˆôé§ì$V®”·6}:›Ö®‘&Of‚5`$aù&:8Xl$ayÝ~ΕKg¡ÐÜE$Ý"ÊQãåþûņž?IX¦ÜwQ±b2|Y;@–Ï)Z”¨E ±¡¥¤2e!qqr´}{õFú˜[û¹qc¢R¥2^ĆîÞ=S6´óÇJ¶l"Rt´*ÜwµXÐ~aâD±}6oæ¬DFŠÄsæ°`Çé£X(DG‹Hß| ÚÑ4лC‚‚ÄöÉb€XŽ9rè0pc?Ë9!6táÂnwCƒæÍE$_~$aù½õ¿IIÅbF*S–®í˱ÆÔ X·$,fµ0*©HeÊX½öLï†^µŠèÒ%$a¹={*‘fO™BÎ4,‹ ÄöÙ¾³%ÒΜÉf€Ý»E¤ñãÙɬZ%oõÛoÙ¢à¦í€ì8õ¢íg54TŸÿuDrzD˜ØÐ²4Ì“K „ í[„å'´å×°¡ xf¤2e‰‰ÒÜ¥M¢üùÉ$aɸ^=¢òå:^Äa•ÝÐʆF–©Wߥ‹®=2’èêUò6IXÖȆ>p€è·ßÊ”itÄö… n'vHÂúýwõ%"9~¼H‹Â„„4[b¬è±@ ”Hª‡'ÀØ»Gà²YᜡlèB*aÀXªîˆ™õtîLž@Íe¬ÉtþxiÑÂãF_Œ“›/ò‹ „åk*T ª][ÀHÂÊII*ÛD>KÔ’–€$,û¹V-¢Š>^ÄaíÚUlh“+aaÆo­ªrcìå%:€$,«Ø>Ú‚Þ·IX™`â³gÝ:«HÂÚ¿Ÿh÷n)@Æ‹ØÐæ- 1VĆ6*‰Ñ½<½ À°­lh¬{¶Ÿ³eÓ‘ÛÖ€MÇXÏžv¨Ý‡}1VTÏÎyòˆHŽ4¨\™¨jU±¡AÝ %Ÿ¤)Bî@úUµjzì9ó¾´b6ú¦1+Ñ}ËË—ݸAÞ Ë:6ôŽD‡! +lÞLtú´gIXzlíØ!"Üx:.Îd£/ÆŠ®ýŽ;ÈàÚ5æ ,è|ùò‘` Zvy oß¾d+¤n¯ÚÏÁÁ’ª—œ®¹Â7ì¡yË–úl¸„r`¬¸Ô>nœ´s¼ Ô¨At÷Ýð°ŸE¶æÍu{S7À~®TI[Іlô%Ó¾@hwè@K—j»À$aY‚  ±·l!:qIXé`Û6%™[gIXG*¡D¤  €/bCëåÍ+0VLj—éÊÝ'ØK$aÙΆF–¹ý”†ýŒ$,/ï~¶—æ­[K‡¬ùó1VLkoß^}@zוè†d’“™Ë–ÕÝHš6eðïe+WΣlàÞ{µH*hÑœ~ý´¹s3_¿Îf€nÝ´H 0ÇÅÙíóÝ.]ºD+V¬ /¾ø‚¾üòKŠŠŠ¢Ë—/# +-ºGI”øûo$a¹E6Ž9âÖ~F–O›7‹ÿÐÉi2Vô°¸Å+R»ˆdt¯øñG² ° úé'êܹ35kÖŒæÌ™CÇŽ£#GŽ[ó›6mjü· 6 +-šY:Ê# ˳ý,Í@Ö¢E·ÙÏHN{ðA¢Ü¹Å†ÆXq©]÷ò µ› ú™gžáýû÷sZìÛ·O},‹ÛIJb.YRÛ>-[²'`?kG•H;¬¦íÍ^½ØÏ O-Kž<Ì7n° S'-RáÂÌ ° ½ˆ­Ö€S¬m®^½º!ú»ï¾Ë·˽{÷6¾§qãÆœ2·Ç>\øl٘Ϲ»`çN%•þúðC6œ:ŤEzþyÀüù2~–,a3À·ßŠH«WÛéŒ5àëÀ7Q6ô*5“ÄÅÅÑ“O>i¬)ïÞ½›"""hçÎ$}öÙgT¢D Ú³g½ð 4bÄë%a™ÛÐÒÚgÉ$ay²ŸE63n´hÍfö’ýloÍÛ·—¼‰ùó1VLjׇ¦CBìhCctÊÆ+çåË—ó¤I“¸bÅŠ¼téRÎ,ëÖ­ã:ðMÞÿ}~óÍ7Y`NyÐó/¿üÂÚÙMâ"EŠprr²õ-‹ÄDæ¢EµíÓ®§ ìçðp-SƒœàþûµH¥K›ØÏ gO-O¾|Ê5cW€þ"ÒŸK‰‰° í26lMž<™ºvíJcÆŒ¡”'uRAß™äĉTºtiºÉwÞ©þ.Íï ¦Â… ÓÙ³gÉòdË&YŠÑÑz¢ `ï^ÕYÏíĨñ¾nX.á yéÜ9µÃ–l‚8f̘AC† ¡éÓ§ÓàÁƒ©}ûöô믿Rf Ê¢’3gÎÐØ±céóÏ?§èèh•cjÃlÛ¶íÖÖü‹/zÿûô€§m tpòdÓï{ùå—}__æuQËYRßW_$ÍE*ZÔ7ïãÓO?µƒÎR߸qFN§ªrvþü8^<×3ûVÞÄ—_f™.ª;é,õéÚS×W¦  ÖõÍœi¡÷¡5=z´ñ9 Z`îÒ¥ §<äø&[¶láZµjqfY¿~}* züøñüÖ[o¹XÐ)'•­þ)°a[’øxæ‚™‰”ˆlÆ… ØâxµîjÕ´‘·¾m›""D¤%K8ãÕÀ-8XK9r$›–ñöê«° nAƒ®]åŒÄüù8ˆ³Z®Q½z܉”'$JdP¬˜‘_bnC¹ë×—Ï#§Ùа ‘„e~FB*Ìž9ÓáÉFbnØàÖ~FÖDË–I¦bŽNKeò› }âÑ–-HÂrkCïÛG´w/9Xа,¦N 8zâDyË?ÿÌf€ D¤… 9ó€Ó§™ƒ‚´¤Ï>Ëf€ƒeÜ Úá4èÒ%àlèˆÙxÙ°!¹d,äÉ#gÆ3Øã¦M‘7‘r$¡NL¥b$aÙÒ†^©l¢ÄDG'=K´n$rù½vëÛÏ9s:1•ɯ6ô±cDÛ¶! Ë ­-è?þ t„e;z÷&EƒË—‰Ö¯wh²‘%'»‰5F–N¾º~]žÎKe²zìqÀj.7¦„µ§ €5`Ûqá‚4[—nSޤU+ý6K”`NJb3ÀCi‘òäaމá¬4i¢å-_ž99™Í5jh‘jÕÂçyºA–ýlèÖ­é 4.ud²ÑùóD?þ(ösp°%j·™ýŒ$¬ÌÛÐ{¼c’°ÜÚлv8@é Ënh«ÑȪ9wNI–l´d‰t£éÕË2µÛÉ~F–÷mhh.c/ý"XжäâEæGÛÐ>¨ßÞw0'&²ß€ý 5Ò2ß}wš64¨ZU‹T·.,h‡[Р`A åÚ1¨ÉCt´Ì@²e#!ûÙ3 c!’öé¢t„e?f—)C$6´£Rv–.•¥íž=‘Ê”ûIX^x¶¸¤ÀBs§í†† Ë6tÇŽúm)œÀ~ö3hÐ@ËnbC%ЇH‰ :€,hØÐ 8ƆVÇ›W­"ƒnÝtð—`?wìèCûëþý¦±Ç (HDR©%G’'’°ìVÓ»·œÙY·Î);ú¹/Î*R™ÜÚÏ2Êäoš÷ê•. ËÎi5::$D>²!©›-Z •)ÙÏHeò"wÝET·®ÛT,h^«–ʇþ÷"¬Ûžöí³`zå sX˜~;C†°+@¯÷æÎ­DÒëÀ>¼ý¶4ÿÙ»—Í£G‹HÇãóÜ-H²sZØ>bCÛ:e'2’(.N,?¤2y´Ÿ‘Êä':"š#:³ Ëîi5©mèyóìP·Gû9~¢–-‘Ê”û©L> bE岺uX¡y½zDeËþ;‘,hkúÚ5æœ9õÛ4ˆ- ìgðæ›â°þù'›ž{N Ä|ò$,hÇZÐÀÔ†¶#߯ÂäíÏö3°´ Ï#f¢E‹È IX¶N«± -u›ÛÏyóªfOHeJ‡ýŒT&R¹2QõênVhÞ°!QéÒžE° ýlèë×ÅYíߟ- ìgðúëbC8Àf€Q£´@ÁÁÌÿ ÚÑ4Hʱv­ÍÂÄY‹xÎ~Î<±Ç^)9Ù¡64,h$a ¶åºÍíçܹ‰Ú¶E*Sö³ˆÔ® Heò5ÕªU©âöVƒæ÷ÞKT²¤smh<€‘„•ŠdñTZZ¾îØXÄKíl=ˆT&Nð¶o':|š»LÔ£)”#§º¶¹°ì(¾ùF§V¯f;°t©”<>›,‘ÔŸýصK.Éûï³`Ý:éë¯÷yŽ5`$aÙÆ†6¯[²Crå"jß©Lé´Ÿ‘„å'jÔ —ËÍMhÒ„èŽ;kCÂF–« ݦ‹ mÕºcbˆ/&ƒÔC©Lé´Ÿ‘„eî{[·J÷=h.P¶lDÝ»“Áš5D/’ ´€ =gŽ”ºx1Û ØÏ`ǹ4}Äf€5kD¤©SaA;Ú‚¶jQ8k–LÜ%W¸³Ÿ­¨][µ)t{«f͈Šq¤ IX¶²¡¥níF­X!ñ~aaHeJ§ýŒ$,¿ÛÐ’º¸y3щÐÜ…ìÙņ^½ZùÛ$XÐ~6ôW_I‰?üÀ¶ö3ضM.Ñ'Ÿ° :ZDR7¾`AÛ`«lèï¾#ƒR¥´Ke/`?é¾W®œ[´hAT¢ÌœIÎ4’°Ìmh—˜h©º'Z¿ž zHm–D*“ 11îìg$aYp7ôÆD§NAsÓÝÐýú‘¸ñ#»ƒ0’°l– -uÏ«ý(E¿~He2eÉÉ~îÓ‡\@–¥R±¤û47¥×Ý—kÀŽåŸ˜CBôºË㳕¨SG—U©sr2›:tÐ",ÈËVè1\º´¾\-ZpZ@¤*U´HÕª™ÞøX¶/HÂ2·¡¥e‹EÞkTÔAÚ¹Sf¿AAHeráÜ9%”t>rÙ"Ž$,ëÙÐâ°ž9ÍME0€ öî%Ú½›’°œVÓ·/Ý:óe‘}ER·ØÏHerÉçLJ¢äCK@–Å»ïED@s䆗]˜´£¹vMš¸÷êe ê®»t9 rZ€F´HeÊ0'%±Õú2•-ËL¤/_€ûîÓ"•*å2¶aA; ;·d±.]Jtù2ù“-[ˆr;ûýEôóϲq%Ø·%–}Fêò8@®éäI¢uë ËÉi5baÆÅ)oÌÑ“³)88ͽHekN>¬$aY×Õ‚—^‚æ¦ôê%°¡aA;žÄDæâÅý¾E3!¹X1]FëÖ ÒòèÃõHµk³ýõê1©¥–47ú‚εHùò1߸Á,hgÌÁ¯]ë·Cð?ü@tö¬[ûlßN´¿Xu¶ H c©eÓ&î¬å@FF@–³Ójôó!xq›BBVR·nH2Abú‚‚d»€$,Ë£/›Nv[I3f@sS:v$Ê›WÆ<@–£ÓjjÕ"ªVƧ³›úèÆLŠl@ùó#!È:gܿɄeŠ#jÛ֨܈a‹ƒæ.¨XÕ=ÈàûïÑ! kÀÀ;ïHG’;Ø—Ì›'/½p!›¢¢D¤)Sؾ€Y³22ÞÑ! kÀIXž³X}ë‰ë­f¾ááHrëч…Éì@@–Íš‘åÎ}Pn5GkŽI° ‘„å™Ò¥õ ×ç ”åé£:µË¤P®SL ‚L6#ˆGß©¹xôH²¹r©U]÷òå*ˆš£C’)° Š)SÄöY¹’}Á×_ËK*×Éð,/fûÖ¬‘KúÅlرCDRKd°  )hX˜ØÐ>´ŸK”Юp³û¹`A‡4ÞÍ›«}tno5P»6QÕªr0ÂvH´µÙ¹3) ËóÚ5ò&'Oê£ÇÒx©L¦V®”Ρ¡H“BíóæÍ¾d¶i“Š`…æf’”H6ê úÂ… ܪU+®Q£·iÓ†SÖ+ØŒàà`®]»¶ñÕ¥KXÐ7YºTlŸ3Ø›|ð¼Ô¶mløßÿD¤õëÙ9€={äÒŽËf€Ã‡E¤^h ÚàáÇó„ X¡þ9bÄ6#OžR™\Ï{¨Ö9"’:AsÿÖ=p \ê-[l®9:$a øÜ¹sT¸paR)R„Ϊ€abcc©~ýúT·n]š7o^ &ayÎbMNÖéK^`ÊYæ<©LfHV¡7²Ÿ¡¹ÿëÖÑ”ÁÁr¹¡¹å;$áܺukJYãuùZºti:6¤_~ù…,X@£G¦}ûöÑí\»vÆŽKŸþ9EGG«™‚éF„mÛ¶Ý ¸xñ¢¾OjÈH}÷ÜCË—§•òÈÒúbc‰¦NÕº´j¥öI} {è,õI«Þ¿²®¾¤$Úöå—tP?eèb‰^Ó¥P¡B¶ÐYê³ûxÑš«ú®_?¨îU!͘±’âã½PŸÝÇË/¿ÜÚý?[¥öÄÆþK]tmêó]}Ž«I——Aå]wÝÅçÎé2Sf¿\¡BöÄСCy–ʇKü¿6äÀœ)^]¢à~ûÍkQ|sçšÔí|Í=)"MšÄ^š[¤î3äR/YÍ=äÕª?c ت´oßžfêè2õOãßoçòåË”@Š”]Ó´nÝ:ªV­Z &ayަœ:Õ+ö³Z)èÒ©L¦Lž,±IjMÞ @skÔÝ­›Š¦$ƒéÓ¡yš’  ƒ¯¿&€cH)Võ­cH)v3?öØc¬Ø¸q#W¯^k֬ɕ*Uâ‰'" ËÝ ŸHíŠÎ²ÆØý%»Q£Ø pú4söìZ¤!CØù€Aƒôå a>s†ÍO?-VÁ¡C8†8Q”ˆ@TÎ ^yE~äž=lx÷]iÓ&v>`ýz¹äï½Çf€Ý»E¤ÿû?XÐIX‚xc… ‹í“-m¿ù†jŸU¯ŽT&˜Å~V1|‘€æ«û¾ûˆªT‘[Ídõ š×¨!÷ôiD ° 1v8Ï>+¶Ï¾}œ–/÷Øâ¬]+"}ô`¹ôkÖ°`êTiÑ"Ì€xì1—A™Ý|•;wûŠ€h*) 4Hz¡LšD©’‡ž/ŸÃ6c¡’°ÌѾXÓ¦¤0üãøxÊgÎ-[F}úåÍ‹T&ÓæÈbÿ)B^š[´îB…tæ„bÑ""“ !hž;·„Ò¬Xá¨>Áx# Ëœ¡C¥3Ï’%”¦O—ÿ>ŠT&tÊOl¬8^š[·n¹Õôòæ·ßBsSœ ˜ÅVs,X11Ì êu—V­8}èùðpf"¥)BçÓ©fM-RùòÜxàJiÐÆ0õëk‘9!kÀN$^ìV»!Q}YAΜzJ­2)=lØ@´¿Ì~ƒ‚ÜÖ˜šoß®úŠH^h¼Í­_wPNê[Ö®…æn­‚'ˆ¢¢`A;$a™Û>ÜŒ%.QHˆé¾"¤2Iº~ðiRHÂò¼뫯 ¹ :.wîJÆ‚ 7Ö¶Ïw0ÇÇó¿áÒ%æœ9õÿÖ£›®^U ªµH;2xLÆ?®E f>q´sbûÈ–fÏèn†7n¸ÝWæÏW­·n9 xÜŒä^INÖÁ4’°ÌûræÏŸoLÜêÒ¥UI¤2¹©D ÕM„¼4·QÝ’Œ%·34w¡~}¢ÚµåJJ"G ððáÚö òˆ¾k—„Ö¼ö›~ûMDzùeNÉX`âDiÅ XÐ^Øæ Þĉ²³ó‘GÈ ÊiùDÖ°ú÷G*“ ¢YîÜ^Ø|ÍQ·$cåÊE}ÍÓ©P!ÉþÀ‚&ªÂùò1_¾Ìf€Îµív+®ç—_db7z4›~ÿ]D>œHá´g›^yEDÚ´ 3`g„q¤yÚ<û,ÄÅ}ñEªÙo¶lDO=E&m«ˆ“à FÃÉt‚ôNHL˜p«ƒ*3’°lIöìWH»…¦§mÔ¬Q½z·ýþ}$VEOtï®Ò¯Êdz>ëÛoå|VÅŠH6B–Gî¾›¨kWiê´ 4—$¹~ýÈ`ÁâÃG¨eKýµd ,hÛQ¼x•[ŽÆìÙløî»[¶Ï’Î_ßÒkÃ6¼û®ØdÑÑüo`Ã:Êm5üúë-‘wæ–^ï¼ Úv(@T¤|ð¾”À$úÎ;IQ)RyclLŠ7&H²þgŸ‘Aõê:|ã_@ãÆ’£V|Lr‚@­Z¤¦½Š¢K&S>ºlìs6 3`ÛQ¦L3F&,kײmˆŠŠbŸ1~ü-‘ÚÒ ž>Ý u;Aó9sd0MžÌ^š;¼n9â§cM€æ‘‘·Dz†>ä#mÛ$¬ÿüGýSfÁ® !ˆ{œb‚s“âåЩwo¤2¹=zT¤ˆ¬Uyhîܺ»u#*_^ö™4‚æ>H§òW&ÅHú„F O$ƒnHC‡ÊÄå?˜dJ|L#D$Õ)5`ófÑçÕW9£ðÉ'2”-âÛGŽ0?¡‘”DÁrÀ uÛZóqãÈ $Ä«¹ÏÐÜùu¢÷§(>üšßλï}“<ÎSa‰ÇìFrr2)*U"êÔ‰ ¦O':{ A7Y»–hãF¢Ãtý^©›œ“P4HeÚ±ƒhùr2<˜¨dIòÐÜùuçÉ#›Š6l ÚºšßäøqÛK9iÕÝÿ!…!ÐæÍdcÐÝ:³æòàþûµ&9s2_X¾QDzöYÖîÒEk’=;óáÜY8qB'"æž=YxøpqžY~š94T‹4t(,h;Ó´)Qýúdté0òÛ÷?J7½BµhAŸ®fÁé×_%àᇥ1r& T©T™´g49}Zzò·iCT¯Cq¢7Þ š7OÁ‚¶_ åÒè¸W^!…ñð0 AjíWFôüó¤;– bcÕb R™ÞxC²9ÿïÿÈ@ó€¨[kËiÌhþþû:Wñßÿ’fôhU=;ÙXÐÒv²^=f"Ý÷üyX~þÙM?V­¤Iƒôs ¢æÍÉ‘b–ÛYð²Ì8 AòþÕ²ÊË/“9cÇJþñ¸q•Ê$^¤{õU¤I¡v/Ô-kÁ¡¡2û Í%vàúuyÿÊ©t X6瘉ô.÷cÇ8`ؽ;Ëš:Éñ›C‡8`Ø»—9(H‹4`{ž~Ú,³Þù\¸ ÷ã17j¤÷év_F–Çå½øx™à9?!Hv‚{\Ö”Ypb¢ØÎNe‹€YÙ%>˜ý" uk'*gNÙÌìtÍeí÷êUyßΚý" Ëmk°öíIa$¯>ìü„ Õ«‰–-“@'Ëšuêèôxŷߪ;×ù©LÛ·Í™C=¤cÔ¼ ’°P·îEÿÔSdðÓODÑÑÎ×üȉâlب];r&° Íùå±}fG“À\½º~¯yò0Ÿ:•£8²ƒÑþW“&Z¤æ}ûØWpö,sîÜzø5l¨‡£“éÕKl÷Y ¨ÆóÝ»KFôŸ’c™Þ~[oÓdÖ>YR’óR™®_§Ù7=ÀbÅD0‚$,ÔýÜsÒ)Iݧ11ÎÓ<)I~ÑPëÞï½Gδg† si=é(ž}VÞß¼yœ1^yEDúòKvÿý¯ˆ4e û &N”¡¨n;§1eŠYcœ´ LðŠ!…aÉÄÙþì߯G¤!EÏž”^Ä·.SFþ|þ<9†#G$­^=½CÍO0l˜†’¼¿“\I •+UJRøfÀeÊ”áË´i2zæö;QQQœtî¬ßSPÞt–).‘ÜMݶB÷ƒ#â(Ù b+DsvHí¨{ëV9ŠÞºµÊ±w†æ£G‹Ñ4s& ˜;9 Ë3ƒ©4‰¨ÜµËîI;ú(ÃÒ¥rìHMî2E×®Q9y²lȲo²‘îÇ¡kïÑûA„…º•,C‡ÊñÁˆûkþ×_Ò…®Q#iÇ0` ØsJT¶lz‚wï½ÌIIö>vT£†~/¹s˱£L³¿4É®_Ÿ91ÑÞ"Õ¬©EÊ•K:?`‘”¨"Eôð,UŠùʶ5ݺ‰¶e 28 ºB… œ^ž^ÉäÉì78À™á­·ä}ŒÇYËÿýŸˆ4i’Kݶáÿ‘Þ|ÓNµ›iîÀÚQ÷Ô©2DŸ{ξš/^l'`4’°<3fŒÞ PΟ·_ÒÎîÝ’"Yµ*ѳÏRÖ!²$CïÂû%<¨›}+Ê•Sç?,W;’°P÷Ã˪ÈÇËY~;i~þ¼Øé HœtFˆˆ«dȶññ̵këÚ³eÓ›9¼Â‚"ÒCÙ)¶GÛæKýÑÑlUøõWæà`=Tï»Ï~«>}úÈ­6}:»3`н»ì5š:U62ÙåHÕ¯¿’ÁK/éÍ^@gDwì( R*%Ë.|ðѦMdðôÓD-[’U V-¤Ø°hüx² :íjî\2èÒ…hÀ T„åéüÅDùòIÓú'¬Ÿ´³c‡4-ªQÃkaN"Ò”):5J¡R¤²~²Ñž=Òt5<\ü0¤2Y¶vÔ­ïëJ•¤kÐÏ?[¿ö3gˆž|’ &š4Il° 3Ãܹb4onmëçÊõ~¥}ïöíì¾ÿ^DjÔH{àV%.޹V-U«öô~þ™í;vÈ„rå˜/]b‹¢Ot옡„Aì‚ÆXxì1DcÇZ·‰OÏžRç믳o1BDR‘ŽVeèP©óÕWÙn0a‚ á>}¬»õbìX©Su=°0\¿~2Žì<¬\Y7¬_O>aåÊ•éhj-õÛ´ñyy¦^£†®[ye+VåøòK¢¯¾’æ£âÏ»hnqì\74Ï$#GJsµ¶:eŠõj_¾œèõ×É bE¹í XÐáááœ9¤%nX3‘>ð /á_àÚ5ÊM[êüyö{ö0çÌÉT!yóêT«°~½òåµHÅ‹3Ÿ<éFsKcûº¡yæ9s†ùŽ;¤mõ?X¡vÉéÉŸ_€~ûXа 3ÊäÉb©T¬È|ÎJ=*I99rè5"?`~4IåpŸ>Í~çØ1æbÅTMzmÓ&¶;¬['ëÁê·w/û«W™«Vë9"‚XÐHÂÊ,/¿,ƒK#‰ñWÒŽ~¶…‡»œ¯ó;^xAŠjØùúuöÿüÃ\§ŽK´R™œP;êþî;Úe˪ÏÿÕ~ãs«VRÏK/±€0’°²æ(€ˆoÚ¤8$'û2iG’eZµ’6e*éjà@²ÿ¨~‡C†ÁÖ­Z°øxò9—.éñ;å˜Ô£"•É1µ£î~ýäØáÑ£D:]»æûÚãâtvBt4´k'u$ae)±±úH’„@éÓ-¾ââEt%]-B¥¹ÿ~)²];ß΄/]R³o©gOæ(Ð÷þ!2Ôï¹Ç—û@ômÕ¥‹¼¾ºí½t«Ã‚ÆX‚Õ«Ë kÓF¯x›sç´«+¡æ–ìØ$öo£FRl³fÌ—/ûþáÛ£‡ƒ¾èáݾ½ ù*U|ÓØ+66õñÇ&M<â@”*UнÅùó©Ÿ/ 0Ÿ=ËYƬY³\á—-›úl]B[ ©[ve´l)Eׯ/"yƒ?þ`®VMDêÞ]¾é¨Ý"عnhîÓ©oßÔ{ ÿüÓ{µ?®gÛ2óöÚï×xÂ6çÚ5å®Ê T{¾6nôÎf‹œ9åuúöµ…£*»3:w–âK–d^µŠ³‰-Ë“GDêÖ ¶s´6|¸Ü 2Ï™ãØr°@÷N׆— ° aAûÂþ8PcPî)“5 ¹ÿóf"IO|ÿ}›42I¾FÒçÌrýº$qIÊ•ä†kÂ’B%‰YçÏgåüÎ;r¤^}=ñ„þût ÚÊÌ›7«V­ÊÁÁÁ¼ÝM ñŠ+¸zõêÆEy÷ÝwÙŒ2eÊø(÷T?ÃÂd`VªÄ¥nˆŒÙIÆEqÁ‚òó ’‰£•‰ŠŠJû“aÊu:_DR‡çÏ—‡ezEš8Qk¤þ•?22‹k·Ÿæ¨uGDHF€ÎŸÑGãâ¤öô̬gÏf._^~^X˜º7¡‚ýÿì1haÇÿ‚ÉàâPjÐâQM·B …–âîÐÑ­\$Ò±b ¸f(¡%äÄ,‘!™ ™o±Ð©¤‡SŠ ¹ Bo+¤_ÍëwyÇ!‰RÊWîoò!ß÷x÷ßÿ›œãõû}Êår·àÑhDétš†Ã! !ähñ ™¦©¸OrvƳ`À_ˆwvX,aççüÖk&C¾ý%ù[ 0 ƒîd0p‡çþo÷Íæ,ë“üŠU«åÞþ!¼eýãØƒ›ó0ö0îËKwCÙ³D‚hm͘iÃñi·yuðly™uÆU£iZX€qgþ$‡ù|ž\ÞËö³^¯OøÝ—Ý‘j„ j4ˆüõaq‘Å´Ëe¢Ý]¢ãc¢½=¢­-¢JÅéñL§l–ý‚¤u¯ëúlIÚÜä¶ðlnŽO{¹Ì'ÿðÐIgç•¿?À…øà€»h±'çaìaÜ|wìïûg¶€~sÔVW‰ŠEn:öÛÞ&ªÕx£9a6þfSõj…ÿ>2Qü'ÈΩT .ÉdÝnwÂo<C5Ñ(°±”J,æ¯ë€eWW,¦-m*šæhÚ89æç(lÛž-IÕ*‹á·Û¬&qqœž²Mci‰U'ŠEN’‚؃–ó0ö0îH„ *€£#—éõl˜&Û4âq`}¨T€X IH’?ì’¡ !Eÿ%'fJ@"q4¤-  Ñ’ÁÈ ú œØ=’}É7£^^æpΡÖúu!À{¿ðT/¬Ð{‡R fájˆc°M)kNCDÒ¦7óo‘bœ»ÐýüæûÓ\kÑž{Îs÷tc`ÒZÃɼ?íÝMHmUÀñ]H„Ð4 * ,)#ɯ 䊂#' âMA»fš 6tàÇ´A ˆA–µð+£šš’T-+ËZ-܇`ôàñ®ï.øÿà€8Úê=®sÖÇÞ!Ihý$Ü«øïÑÑQˆÓ¯ãoÄ×ÙîAàáàŒˆ„ÿ’——¶··ÃññqÐ&¬ Ó¡¢¢"Ü#Ø úcíК®hºXÒÒÒ¤¼¼\”h°•ÊÊJ‰[XX¬¬,kM×ÔµüŸÑÑQÑ´µ«³G{zz´çèû‹ŠŠdwwW<èèè°¿‰^Ö(÷ÓµDo#pÉíæ(ž---ÚÐó¸­Ý“ÃÃC»uÝvÖøðð°x¡Ù@›ÉÉÉÑæÎçu ÿ-ñäêêÊÖ^UUE´·›¦¬¬ÌÆ–<`­_K܇ښØÜÜ,|¦§ƒkó›(‰F£7ntO#pÉçî£x,//ÛZ½`í[‘­­­øýil}}]¼øÍvû¼äççÛ½êÅ:.‰DD{„ÀžÔÕÕÉÆÆÆì‘¾á[0ófnnNêëëÅø.£xìïï[ö¬¶¶Ö2qÞ\\\ØÛ×zŠ¿Úã#%%%öÀàè ˜ó€ggg­aKS¹Á#MCÝL$ÌÌÌèÔÎÛÁ›‰‰‰P]]p+£xö½Ûïtlnuu5º:]Ó¸AK{¡¸¸8h¹%x e­ ˜AKCtAÇ%ûHÓàà` ‹‹‹7šº¼ŒcéÏ`—Ö÷ìC855åeŒÌÖýˆÎç666ºú;a£x~ÕSï5³ÆÇÇÃc~c-€iÊ<œ-ËÙÞ ší Él~~>h¿@ÈÍ͵õÒ„å„Öj¬ÑCSÏv¥¤¤HzzºœžžŠ7’™™)^LOOKAA5~(RÐ ª£^OAŒŒH,#ðsEþ”ÒÒRÏD_P$Ùuww[S®–m'¬ÔÔTijj¢쌻ðÞÞÞõ&,«e+¹ÖI¬;‰r€×ÖÖ’½«Õ(5ílAAkz ®[€5…kÿü­±Ð›F8??7cY7·¾]Š'úL´O¶‘·«\SSccH:bbãW'''âAFF†‚¡µ&»ÚÚÚ$Îã\òº9ŠçECCƒèu¢% û}ONNŠ+++6Θÿ|Û§›››¶^]»eÓúûûEy ÀtA€ûÖ ØŠ0 °M ´¡&\^^ÝÙ(hGqØÙÙ €9`½½½ÒÙÙ)ííí·uš°ôõõÙNo:³ºººÂ-@ €n®`égÝ1èÆá hmm ±X,D"‘FC‚  @OȺ³=©ž¿lç».--É}€°  P€ À€ 0`@€ À€0ø§›hJNá–PIEND®B`‚mpmath-1.0.0/doc/source/plots/000077500000000000000000000000001316273626600162205ustar00rootroot00000000000000mpmath-1.0.0/doc/source/plots/ai.png000066400000000000000000000637441316273626600173350ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì}wxåþýÙ4’„H(!¡ºtÄ ˆ ‚ "(¢"׫\ñ+Ö+ØlAª" x 5À’ÐRHÒÛ¦ìüþød6[fwgfgfgýÍyž<“ÌîÌžL6gß9çó~^Ã0Û´… 4hP|@âÜÓÝD4hРAƒ%¼ÜM@ƒ 4pCh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)4Ö Aƒ•Bh 4hP)|ÜùâÙÙÙxíµ×pæÌ$''›öF<õÔSðññA}}=V¬XáF–4hÐà¸uݺuk¬Zµ áááû÷ïߎ;⫯¾B\\öïßï&†4hÐà>¨ÒâÈÎÎFëÖ­íÚµÃÕ«WÝÌHƒ ”‡[-{hÓ¦ :ÈÈÈÀàÁƒ-o¯Ó¡ÍСðòñÃ0ˆEii)š6m "<<\Ñ}eee`Fñ×u´O§ÓÁÛÛ[\´k%|_MM ¢¢¢TÁ…ÝwåÊÄÇÇ«‚ »/33­Zµ}¾úúzTTT ¼¼ Ãàøñãî=n0 s’q*++™§žzЉefÏžÍ,_¾œÙ±cc4™™3g2Ï>û,3kÖ,›ã “œìÆöñÙgŸ¹›‚ ÔȉaÔÉKãÄÿtNÓ¦M“ì\RÀ­#èÀÀ@,[¶Œó±•+WÚ?úõ“‡˜°–Œš FN€:yiœøAã¤,TéA; ˆZP__ïn 6P#'@¼4Nü qR:†aNèén"B0]§Ã·mÛ™™î¦¢Aƒ†¦OŸŽo¿ýÖÝ4LðÈt]h(•ä丛 áúu† &Ovît7 ƒ»)pB¼4Nü qR)Е¡¡ôͱcî%Âbõjd<lÚŒ””¸› ++ËÝ8¡F^'~Ð8) èˆú&=ݽDXlÚ„èÛ¸yؽÛÝŒ î¦À 5òÒ8ñƒÆIYx¤@2 }£†OÎK—½úví€_¤}*±9ôz½»)pB¼4Nü qR)Ðá-[Ò7jèM›‰> ÜqàåEÍ~ˆ¸‰‰‰î¦À 5òÒ8ñƒÆIYx¤@×5iBߨ¡Šcï^€áÎ;°0`Ð /8uʽ¼ ÞðD¼4Nü qR)Еõõ@“&êAŸ;xy!+(ˆ~¾ãÚª Á“ZÃ5òÒ8ñƒÆIYx¤@‡„†mÚùù€;?=ËËìl > =JÉ»w§mZšûx5@­á‰yiœøAã¤,@Ïž4ÁFÁPS¡ŽÆ‰4NÊÂ#º®®ˆ¥Üž?OÛ.]ƒŠ&M€¸8šåX^î>npžÌž ¤¤¾¾À¯¿›7«ƒ—› q⓲ðH®¬¬TÇÚL -‚ Ö»pAyNf°žœ;GÝ;v~ÿö=ÿì^^n„Ɖ4NÊÂ#º°°ª8ª¢pjj€Ë—Ö­à`Ë ‚}øهæ Oêë5kÈ'Ÿ6öK[…f@ª1ÔÑ8ñƒÆIYx¤@‡‡‡‘‘ôCA{HäæF#ùͰ *Ø´›š3<9{–ʇؙwÝE[Öîp/7CãÄ'eá‘]WW„†Ò´êÂB÷¸v¶ÑѬ‚ŠNh{é’¤,Áž=JÛ÷uè@_'O’Õá^n†Æ‰4NÊÂ#º²²’Ä9,ÌýÝ0 µ*¢¢??÷Ù/ à OX0Àr?;ŠþãyIA¡ŽÆ‰4NÊÂ#:$$„¾ ªªÜ3›i6Œ -‚ ޼éü|Å'˜ƒ3<±'ÐC‡ÒVÕêhœøAã¤,c°lðä“4‹ÒêŸZA“ƉÔÈI*x¤@›BÂæÍi«´Íaqp11´uÓlB N|GЬ@_¹")(êÔÕÑr^çÏÆk×Ҫ멩ôsi©òœ@ãÄjä$/Ÿp»@[pºz•ÖKŒŠr|[‚'£@+ê À{ïQ㪤iì•®\I›•+ýû•ã$'~P#'©à‘m Fº¨H9#hΠÂÍmâT]M6PëÖ$XŽ €­H¨³|9]÷‡ºt±|,"øðCúþý÷•ã$'~P#'©à‘m ÷ÔB³#è-L»8ƒ 7 ´‰SNmÙÚlGˆŽ¦‘¶Œ#hÙC£øôSúþÕW¹ŸóðÔlß\¼¨Ê IãÄjä$íå´kGxåh’ò’ R•ÆðáöûŽøúsæÐ÷Ÿ®Ê IãÄjä$øÒÓeñee u¦ßwÄçrÌÑ¢ ÐlË'äá&j ¿4NÊÂ#š3$TÚƒæn謬,âË0üBññ@M,ød uÄØ È6Œ¾ùé'éø¸5†_'eá‘mþþê Fvö Âýg2úв…:¬@!øÐ„§ž¢oTäC«1üÒ8) èBk1§Ò*%ʤòóéöÙ܇“=Naèõz×ZZ–PG¬ÿÌr*)¡®w©©ô¥¨1üÒ8) èp+qDD‰sI‰ü/^\ „„Øø¹ª …NRa!cP(K¨säMR6Œ¦«‹á4aý `Í0Àž=À³Ï“&O<¼ðu5u5oTcø¥qR)ÐuÖëå)åC×Õåå@h¨ÍCª ÅŽ YÎÈ” S¨ÃÖ0‹°7€Nº €=øâ `óf`Õ*à“O€{ïz÷¦IboìÔ~iœ”…[Ú`0`Ê”)˜={6,X`ÚŸ‘‘nݺáé§ŸÆÒ¥Km޳ åš]#,Ìæ!Õ†„Bg²`Ÿ/Ãj0²„:.øÏ@§îÝéƒéرÆ)ývðçŸäˆüò -”þÍ7ÀÑ£Àß}ôïœ:E ºŒOŸë¢8© 'eáVÞ¸q#ÆeË–¡¸¸Øt¡u:BBBPQQvÙ(3X„„€rµÐÅÅ´åh§!¡Ú¥­R‘¡ŠCòP§¶–,ŽæÍnÝÄsÒéhI,€ØöåæÓ§))´äaÿþ4š~ì1¢³k-`óë¯ÀàÁ´ˆ‹`N*ƒÆIY¸U ³³³ÑºA8bccqµa%騨X:tß}÷–/_n3b¶ •ª…f=n‹CÕ!¡NgSè!!@@€,#hÉCóçI¤ûöå?[pºí6ÚîÙÃù¼Ü\Z ¾øê+Z,<8Øöy:pûí$Ô£GÿM~ö¬N*‚ÆIY¸U Û´iƒÌ†aEff¦I¬Yxyy!$$7­–³ªªªÂ† °uëVlÙ²G*CÃhýƒ¥¦¦šü)Iö:„…Ù#‹cõjú{Œ:™Þ{/-4#’…:iiäHðjÎé»ïh;s& 5’~pÐZJ,^ tî ìÜ ,\¨¾ðKœ9Ih‡!¡\í àT(µê ‹7Hfq„×äâÕW)Ð ¾þ:”\†U«„R’P§¶–†ï­[ ï\ä„»âÕÃn )Éå×àƒÀ@àû𤋮É’D9–„t j äÔÈI*x¤@s†„¬íᦴӠ¢ysÀ‘Eè×xàjâ.òó©wµ‹}©ŠºC 4 __Z{Þxƒ,z¾$ÔÉÊ"ë]}ÜE°œÎŸ§y¯^ übci¬Ó§Ëú÷,** ˜>]9WŒÔÈ©‘“Tpk»Q±pÊe!8¨x´ýø÷¿yY§àû·»YEUE(¬*D¡¡Ðb[y³µõµœ_5u5v«­¯ÅMãM0 Œi[{­>-Hʬ³·åzîÜse½vbà‘í($,ºR‚%¯ÓB½{Kø¢%΃Šò&áåUˆë“'E‹ÈçLN–~±!áõëÀ÷»c°@k/îÉ*Ï?O½v-–$Ô‘X YN[·ÒÏãÇ›=È ôŸ*&Ð~~ÀÆ èÓ‡¦„ßu—èå%{J«K‘V˜†Ô‚T¤¦!­ ™¥™&.«)SŽ”?³q™:èt:‡[6ûŒŒÈå×e„G ´£ðÍ%xë&ðÖ[ÀK/ï¿/Ñ‹ò yaÛ4ÇT÷(¸IÀĉ4 ;xÖ¶{î9‰x²¸qz‰.Œ ×¯JŒÁ¨ñmŠ&yÜ=`iä¡C4Ñ".Îùy]+^X õz=¢¢qì²{w³G*²¨­ÕãwñÒK Ñúú*JP^SŽ¿²þBRFþ<ø'r‚rp½ÒþªçÍš4C\hÂÃð€p„†Ó6 ÁM‚áçí'êËÇËÇFpSô)èÓ§$¿ëôï¦Kr©à‘ÍVú†¢)€¦7K0e ¥à~<ø ÝŠ» B¼<`wJ8¦¸«?}¸xyŸN£ü/¾ž}– $C~¾Ë!áš5 Ó2¸z ¨ª²é·©ÓQMôÿK¥wlkNG$Ô‘X ñùçôý„ V‹èhªIM¥e…VÅILLDÏžÀ¶mÀ_Ñ5~óMù_·ÞX}™û°ûÊn$e$áXÎ1Ô3 F¸ð©òABD:‡w6m;GtF|X<ÂÂáë­ì§ˆTâ¬Fx¤@s…„ëv„b€N‘%X»–&ÌžM#Óƒ%?!a`` çck×… yÐM*ŠLû{õ¢èÑ£ÄqÈ9š£!$ Ù‡#58q‚t©IT t^§ ²½v-…[ήµ£kÅ ´Á`ÀÏ?' ÿ™ÅÈ‘tQ’’¨?¨`¯Ó·ßR©÷;ïcÇýúÉóz%X•² «O®FvY¶iË –Ùn$F¶‰>}нuwÅEØ$y?©YÅaÖÕŸ¬¦‘mÛéΜIoêÇI] CZH ­ËìfÍ¢í×_KÀÑùùÈ }O¼cm'OtNúBwéB6çÎ5Îq—g~1 pù2ÍÐtµŒ°§Ogaß>²ìäx‚Âåv@ãuЧÕWêëG¥©P[_‹Mg7áÎîDü’x¼½ÿmd—ectüh|qÏ87çr_Èź‰ë0«Ï,VªJœm&¡ê`þöp>;õð‚ ´·w£ø­_/Á‹Š OΜ¢º4Œd‹Š,ðAÒ™M›¨A$0€ÊJ$´l)úüAÛ;î¯~ì rÝ:ççv9$,.ÊÊH¹$ò….\H@}=0nœ…\GŒ ­‚>´ùuš5 ¸ûn*\°Àõs#¾?õ=Ú/mÉ›'c×å]ˆ ŽÁÂa qeîüñè˜ÓoºDvÎì«qÖž9Ihëp×.С.Ȳ'ô¤IäõnÜ(A-©È™„ì á!÷6Œ ­:(ˆîž  $AC½®^äúL55`SM.Ÿ•Uzˆ´òÇ©<Ù\žù%±½«W'N{""è–,=ÈÈìuÁü:étt—,YâÚ@~Ï•=è³¢¦m†ì²lŒí4Û§lGæ¼L¼5ò-Ä…ÙOzÕ8kOœ¤‚G ´uHÈj¼ÃCiÆDÃúA-ZÐi^ž­Š‹ihÄù°½àëØ1ÚÞ2ŒÛâ‘Þ#UWËNäSRÁƒé6zÔ¨‡„‡@·n F“ûØßÙÔVÁa0G&"8¸ÑÉà„Â6‡õuЉ¾ü’¾Ÿ>n"„àZÅ5Ü÷ã}½f4N^;‰­âÀãðëÿ➎÷ÀÛ‹ëÖÁ1'5@œ¤‚G ´yH˜“C·}]º>á¶“U&O¦ío¿¹ø¢%%ä?Û¹¥¶7›éøqÚ&ð¥!©Õ0­®$¹@ìŒöµ7n¿½aÏ–£wÝE[g.€Ë3¿$èÿý¨ª2`Ì'³ÆÙr;…šë:=ô½§³²(g~çúýÒïèñUüzáWćÅcÓ¤M84ã·ì2'wCœ¤‚G ´yHÈþ¯ŒÎ~¬uxð  /X[KÃ,;!ÀT”•чG\Ý!£ysâfU…Ò­ö>*âÄÄÉÏOÔá6ÍsñX¾4.‡: ô/¿@–åä. FžÙŸòWF`ï:}ù%ýI¾ÿžª•¡¶¾/ýñî^{7ò ù˜Ýw6Î<}t}ÀÂ[v•“;¡FNRÁ#Ú<$dGköºC úõzÒo'!ÀTèõôÜ·oÃÖš±ê¢Ó‘¸Õ×KÔÕ²aÐ¥‹àC ˆwÛ¶´’5Þ˜H-Qt¼‹š¦y3 } xy%àÎ;<94”~ÉœñͰÀÞu 6o&ûiî\ûƒ¼ò< Y5ú¡þ¡Ø0ëê¨Á\ u$èÔTº[é×èÓG'…Êíø^§˜`ùº<`ʽ00%x¸ÍðÙÝŸÁK'ý¿·95r’ )Ð………¸x¸v¸fÍp°ìÕ­·ÒV”Í!"$dÅÎ- !èõq ùù@h(ô—la9s6ãá)ЀóÀÓ¥PGBfõuäHœò¡ùrªºY…ÿ^4ËR¦ã—¹‹qè”­…sRjä$œ†ÁÛžÀ±ÜcÜf0þ;p •:Ü}·DMÂDpRjä$tHÄ Š §9 «º8AÔ»šahÅQ`×Í‹ŒždË4mJ>² Œ ãâ¨îôiî%"] u$h£‘ôÕ×—>¼qò÷§7TI uÃ’ |8-úk~<ó#bCbñÓƒ?áÿ^n‚·Þ"ÿÿÎ; JrRjä$b‰ÊŸD„„µµäS6oîDûTrx{S±CU•íõêH$Ð'OÒçÌàÁ³ÅEq’Ù‡æât½â:žÝñ,`Õ¸UòãîOÎB§>øøæúþé§9sÄúÕÈ©‘“TðHÎϧ¡e¯^²>±YOhäYgg  Fh'½•Ù ";›BÂîÝíôfƒBvTΗl!á™3ÔÇ¡o_'Ö.ÏéÞ,ìùТC‰ÚÚÞÍIfÚšÃ0xzûÓ(¬*Ä3ýžÁˆv#xŸkÆ ¢|õ¦ÅüÊj äÔÈI*x¤@WTÕЭǃN‚Bönˆ÷(º¬Œ†ÅNZ±A…]{ƒ…ÜA¡ˆ—½AöZt¨#£@‹âÔ»7ù8H¸ ¤}NëϬÇÏ©?#.4ïŽ~Wðù¦÷gb"Yçݺ‘X i Æ@Nœ¤‚‡ t!âã)·²OæíCóé|tB›vÖàQjç’@›yÐ|ÇTÌ!P û÷'«ãàA˾B¢C ڌ޼IâhùûŠâäãCÓ?õW sNå5å˜÷¿y€oîûÆ©µamÚÐßcÁ²ŸæÌ!§æÒ%áœÔ5r’ )Ð@8ºw·óÔͣĎÎK'æœâm#è-¨›æ¹sN»{Ú‚AGDðOäA7mJƒÌk×µêÔÕ™™Ä!0Pøñ 8q‚r½!C(çs‰Ð8 —l½²F˜súàиQyôx#ãF:8Ê9üýE‹h¦aTÝÑ£0¾óNŠj äÔÈI*x¨@סG;9hÖ·æmqð˜¤PPÁ„þþvì€×lB€>HD…ùùtÛíçÇ+<©¬¤¦l11³]h€„°´9D…:ÙÙ$ÒÙ֋ʚ؅ýU<);`9å–çâ£Ã¡‰wüwä%;Ÿ>ôáüæ›ô^ûàšú öÿÄj äÔÈI*x¨@WŠA7kF}—/_¶ûKð´8²²²žNzÞ«—ƒ‚ Òæ¨®¦é€‘‘&NÎ’BÿœNGÏ€àÉ*·-*Ô‘ÑÍ  Ô¹sg* ÉÈp‰›5XN¯ï}†›Ì0W²Æû,üü€×^£óý‹ö}ò õܹ¶A¢95r’ *Ð!¢h´9xMåiq$$$8·7^ R ÍB–“3°œy-¾"bÍ%ТB º¶–x[µˉŸ†‰"Û¶‰?pöÆY¬JY…æÍñÊÐW$=¿9¢£?&¡~é%Ê>ûŒìþáÃi¡Ú7ÔÈ©‘“TpY 322°jÕ*,]ºû%YñÔ9¼¼ Ñ¡ƒ4/Z@Hè´‚wÍ tT”‰“3ðöŸºMšèèh=ÛøY'*Ô‘@ ““ÉÓ6Œò=s¸4±ËoÝ*þÐëõøÏîÿÀȱpØB„úóY4Ñ5´h¼ÿ>Ý üßÿQ²?ðÌ3ô·0@¯¿¦ÇXØœ´ÐæÎ‹¯¾ú áááHHH€^¯Ç´iÓpVæ•&ÂmþÁLZ yzЉ‰‰Î+8Þ#èèhú:wNÀjäV#h>á ¯Q? ŽHÐp”'ØQ4ÛIPT¨#@Û,‘f—‚¦HÙöïwúw‚Ò°Rl¿¸ñañ˜ÓoŽdçåƒÈHà¿ÿ¥\öÀZN+2HNNĬYô¡Û²%Ý<,^LÖ‘½täÆ?9$ti=œwß}f‰úwÜ€¿io00sæL4kÖ aaaX¼x1Àh4â©§ž‚êëë±bÅ ‹ãz÷®³RÍÎ@$ÐN,ŽŠ NœDÓ¦dIÚÏ4@£èß~£¶œ«œXÃJ  ƒÅßÇÅÅT^Õ¡ƒÓÏŸFDGÓðéúuªÙâÁƒ~ {aÌç¼8!@Û ‘œXxy÷ݬ\ lß<ú¨hŽ,†Á¿·ÿ°hÔ"øyû99BxyÑßoð`ò¦wí2`çÎ@>Lá¶mÎŽ—upìØ‘úšÇÆÒ–ý>2ÒåWœpéo§r¸$ÐX³f mxC~öÙgxî¹çx_¬7büøñ˜)àí ÄÅeaéRºNUU4È9z”ÊÀ¥Y©ö:çùû“XGFRXÌýeþX@½®õ—Oã÷ééYèÜ9óyì———<rÃå%‹‹‹ñÌ3Ï ªª ·ß~» c³³³1ªa8‹«W¯¢mÛ¶ÈÎÎFëÖ­íÚµÃÕ«W-Ž qдˆ@ds\½J£ÓAƒ<‘纨ˆÞ´NÅŽzž ð¡Í&©ÎÃÞTÌ!"(ìÚ•._r29#‚…°´”î8ºt¡ÿ48|˜&ûÝ}7÷)\šn»>éÿ> Ø&"ñþ¡÷à•¡¯@§"e1¿N£kùùtƒ•™Ù¸1û}f&pá}qÁ5ˆD>"‘ ùA)š þ¨FÔX|™ï+áxŽjázèÀÀ FÓ—7Œ´Og„Ó¸ÿô°g€8y¯ŸP¸Ž1—/_F~~>Fr™{ЦMdff233M¢l¾?##m¬Fjçϟdž °uëVlÙ²ššJÖJh(ôPRÒ¸A»l+=ôz8|Š‹é|aaŸ·}»€}û:9Ÿ·7ôAA@a¡ãçðó£}:~žißÅ‹0¦V£z½Þákÿ¬G¿~N8›ïóñ¡×ÈËsü<³}'Oê1hP]ŠÃ‡ &n|ŽÕëõ@z:Rbcó³³o×.Úס÷óœ]+§û22`¸ýv ²úåËó3ß—œ“Œ½Ç÷¢uikŒë<ü!0˜7`näÞ@ófÍ]ã$1L×éúu`íZ`ófúô3·iC¥2ÇÓ sg;Í$æô„Kݾ}{øøø`ÅŠ¨¬¬D÷îÝñꫯ¢ysyßTCBÀ²'tDçSt:Eÿþ;M¢à,¥¬ª"õvR5D¿Zb€w-4ÐXŸÌ+(Ìϧ„†OGoZÑ-°'4‹À@ºÆÉÉ€¯¯ˆ @´@Û›ÞmÉþÁÇ'ÞºU°@ç•çáûSߣY“f˜Ýw6Bü¼Ï•Fm-Σ®J;v4Šr‹$È£FÑE–`ÍH!ø§Š3àbH˜””„O>ùÄ4¢ýûï¿eg(tVC, ’p`sðœ¤B­ç/vk¡_Ãjké©aô 8ža%Z #"h(,P F›cíZ3¿XޱóhÉf£±Ó¾7lpì¹ràÓ£Ÿ¢¶¾Ö$Ϊ™!—“CÁAL ô'Rc¨°0`Þ<úçÉËÖ­#ï½}{ÅëÙTsd€K#è 6`åÊ•˜8q¢T|x!œÚƒTͳšÄ.‘ÿZ@-tt4ÙwgÏÒ4e»V[AmÍÚÞ +¶ëžŸŸˆÀÌË‹FLyy$@|Vv²CNŽ€™_õõT·Õ¢…@³œPVF¿kË–Ž'I6­m[Iþù'}ñ,=-«)òãËàçí‡yæIËI,rsišàŠ4ðñAâøñÀôéT¯è àVn¿N2Â¥tpp0^xáÄÆÆš¾”€Ã~íÀ⨩¡– áá´m똖 ì 4ÀsB+ÿ°?£“Í'{÷ù?M„Ø×ä v½¿€ö99d ·o/èµXüõiü¨QŽv’¶¬œ1ƒ¶«Vñ>díéµ(«)ÃÔîS-='!ÈËžž¬ŠÏ?§7É‚@N k×Ò]‚JÄÐÚª¼BBÀ©@·kGO=uŠ*1lÀcý÷ߤ]»fñ¿³0‚}h‡6‡Y£~öÚ0Šš b‘AaË–ô?Ÿ––Å¿e…þ3 qËÊûï§žÜ?ÿÌûo¼ROUK³ûΖ‡TU¯¼B×zéR²²^~™ZÜ-ZDE©²µ§9IhÞ!¡ÖéhY]Måš6àáA³¢9b„€ B@Hðh‹Cò "úB³ iß ¦ÆIN¡@K4S¦ÐíÕºuNŸ~"÷R®¥ G‹èÓøGQ4üÚ³‡ü®Å‹ÉÆš?Ÿ„yñb‹}5rjä$4"MIq¸¾ZEmÖý½þ>þ˜Ú}ª¼œÌÁ04ºïÒøî; a7n¤I6š`©1S#'©à‘Í;$ä1¯Þ¡@;A ëù…† *†„ÙF£ƒU`x†„gÎï¾}E÷] „„Pš¸ лwÓ–«½¨5$štºÆQô_Ø}ÚÆ³Q^[ŽI]'!,Àr [øUQ<ò0u*½ofÍ¢OÿI“œ~’©1S#'©à‘-UHÐŒÓÀÀƵù,àă>uŠ*úöT„„Ð?‚€æîN}hæâÄz¿æÈÃ…´—гgª«yöã¾r…&Þ°¯)»vÑ–O¥›,AÓãÓßúûï©u"Ìí E8;GÓ:×­£‘òÞ½TFdz!¸95r’ )ÐR…„•ñöêEí._¶zЉÅaîå *¼½éœFÐN}hæâÄ ´ˆYÈpA àÎ;‰—S›£¼œ~¯¸8ÁÃ}¶µå-·ðX­2M!!À³ÏR™Ï‡Ú<|æÆÉ>‚„ˆ i;D~NkÖЛõüyªcNI¡éØ Æ@Nœ¤‚G ´”!!àÀæpbq˜¯A(8¨hÞœ¼†êj^Ow:££ÌŽ‹+Ðò%Ê-è@¤@GE±mT<Ñ{ã?hÛ°ÈSÈ4Í›G·h+VPÿ 3°£ç™½grö|–ŒSUðä“ÀcÑûmÑ"jðâ,Ëá€95r’ )ÐR†„€ƒJ'#hsT°A!û!àT·–fgí·‚²‚‚L»¬9ååQåT×®–¸â‚Ô¯]µrèÔ©‰ðõ%vx¸ ÍÚ|Z¶ )"˜=›„ñ“OL»«ëª±æÔøzùⱞÉÇéÒ%º]Z¹’ Ñ÷ì¡I'"5rjä$L[—ì ÑÑ4ýWÄ"© C &äç“~Ø…H®¯§€ÐÏ:”ß1²Mÿþ7‘ùâ ÓõÚrn Š«‹1¡ËD6µ-g“„Ó–-ôæ>y’JYRR¨¥Ÿ Pc §FNRÁ#ÚiHȳ'4‹®]éÿG¯·Ñ“ÈÑoâÀz.¶ *–ÚlŽ¢"i«ºUkN’øÏ,\˜¬’••eÑÚ.D ô‰ô§:Ôá 6œdCL 5ª¨ Ñ+‡ƒ.sª­%kåè5.$ÏGäzŽ’p’jä$´Hjo°œdÅ›oÒ­ÖŠ¸°óìË܇¸Ð8ŒŠ³_(ŠSF}2-YBï±;hå‹HÆIf¨‘“TðHv‚j¡›ƒ=ÎN@h-ТBB@ÔÚ¦’ÃŽ@›sª©¡ãš7:uF•.ÔBëõza-°Í¨Ð€å$+""LËu}½ú9ÀÌÄ™ðÒÙÿÌiÛ6ê]œL·v'OwÝ%š²$œ€9Ih§!!àzPè º¢‚F±-Z4ŠèP€@‡…Ñ`ò«_‹£‚Ú“^Ow¾·Þ*Q»^FЉ‰‰hÑèÐ||ÎÏ[¶ÍhT”Eðé ååt§ôè!Œ“ìxè!Ç܃µmJàÅè0½×ti8ݼ ¼ø"u™+)¡>II@Ã"ÌRBœ9Ih§!!@Þ1 >(dãA:Dú1|x£Ø)l³!š_`‚´9'Ií À%fy±£hÎÆI¹¹ô‰"ÐÞØ»—ܩѣ…*(4ét8ôÆÈm ËdóÇ×9]½JoÄ>¢Oð_¥>v–zsj äÔÈI*x¤@; Á#èîÝɦ3 ´ƒôþý´6¬qŸ!!ÐxÛÎú¬8;ÙYsR“@³¼Ú úÏæœäƦòÆ&ðÐCÀÿþ'ŽÃЪ-½zQy΀tû7v¬ÄŒprÔÈI*x¤@ó Þ@}"rs©¼×Q ´µÿ (42¬ÚIHXWGw¼~~.t°³†‹!!Ç•"šõŸy.dbÃIN#6ŸÛ /îŸñY&4~âóå¤×ӛè~Þ<:‡ f¨1S#'©à‘-($ä)Ѐ•mgaUe0ááTžÇB‰ ß»gOš–nššî$$´ƒadh€lŽª*šV)æ×Š =m|h½};m…ÚÖœäkoè Ãý]îo|`ölj^ôàƒ@v6ðê«t« CL ½)gΤ)Ú-[ÒT/O=%Ym³¨1S#'©à‘-GHPÎÒ¼9M®¹Îmq°ÕÖ-8¨ðò"ñ1‚2„°{ö4ÌÃÉϧV+®YYYHK£éÔ‰‰2T]‰¬…6¿VvƒÂ+Wè¶§WQVìÜIŸ{b•rMG² §<‡ì «}­Zë×Óˆø£h`§NȺåà¾û€¹s)DÈÊ¢%¨¬ð#7ÔÈ©‘“Tðq71#$¨2iÜ8`õj ï| Ú#èk×Èú‹Š¢ªsˆ *ÂÃi]UE)%Oøû“Ųkp,™Á ü|:—U]YBBÞŸ¾¿ï>áôœÂ<(ðû›_«¾}aÑ8I§y±7nP‘9ÏQ⯿’UòðÃÔ3J(äš6žÝÀÌÞàBïÞôÅr’•‘8¨1S#'©à‘#h¹BB€d€â+¶#èµk©åÅÔ©¶º!*¨À‡Þû[9UØY?N6{]Éa~­H¤ hÔrdolØ@ÛÉ“Qáä$5Ìí‰]'ª‚“Xhœ”…G ´\!!@þep0P—o~ÿ=m§M³=NTP!pñXs°­ÿÛ€6mqèÝA› ̤ƒH¶¾V&Ðvýú†ýç’*' #ûV ä šÚnâ$'eá‘-WHÐíñ£!ŒåLÂC‡€Ó§©²©gOÛãDìˆô-·PÙëÕûýóÏ£ÆéE IDATÞwŸDÓ»­!R ­¯ÕƒÒvýú†‚ýË/TYsÿýâ«Íä šlª7xBá—ÆIYx¤@ó ö„6Ç‚@ŠQTø£®˜3‡û׿¸T¸`qètÀO‘°/Ðß|CœdñŸÑm}­Ú¶¥°03“Ê… ôF²wEÛ\œ¤‚X{CNN®@ã¤,uŠº8rÙ€ !! ÊâH [èH ëÂ,%%'ÉÉ èØQ\Ù/ˆì Íu­~˜¶?þA]\Laix¸k%ÁrMG³"»,Cc‡ ²7äää 4NÊÂ#šWHê mÊJx3õ¨ Å©S@……Ë—Û· ” ª@Ö…ú¯TËô{ï€/½$c¹¬!!‹I“è3uãF€ÐftÃúóÞ¿kýä šÄÚ€:Ã/“²ðHæ‚{B›Ð0‹0¶g>ø€Úø^¹B½ìAéÅÝ}I Wÿ öNoãFà§Ÿ€èèD<ú¨èS;GP%ª.†„•.ÞvpãºÆËéÔ:•c©1sÔ×SÙ0@w®@Ž ÉȱéÜ&²7º³7äâä*4NÊÂ#šWHˆ Ùç뚇áÅçžs>7@éE¤Ž:Ùe×Dâ¶Û€×_fÌ ‘þ_àï/úÔüM³Düþö®ÕÃÑȃ÷Í^öÆÏ?Ó$œ‘#i’‘+#hbí!m‡ :8Zœ\…ÆIYx¤@ó ñm§Q’#(šÐ0Í»ë°H\ºD«UV‹]º(žˆ°9ì]« €Î>doÔ¶q,Ð ¼û.}ÿŸÿð~iÁœ\koLî&.½Tcø¥qRÿÜ™„€ëmg=B.¸#$`èÏÖGâödZ¡äž{Ø™Ž „'æݾ=¯Cì]«ÐPà‘[¯ûcñìà{öPƒ¥^½Ä5GâËI,,ª7DØrp’'eá‘#hA!! Úâ"Ðî ˜ZŽqãh4ÉNCW$<1‚vÄk|Ao<G7J‚Òï+E·Ô×*9'WË®Š¶7äà$4NÊÂ#ZpH¨€Å!*¨hÖŒJ,\A‡†r–0(ž´iC[ÓrèÎáˆWóèÓñøï¹ŸóÇÔÐ*>žú I©¯•+Õ,Ô~iœ”…G ´ì!¡‹CTP¡ÓÑ(º¨HpOeÔd©²’s’ŠhNBÑ®m32xâWC‰Ý¦ñxÿ}ªç6GAAc-ú{ï>™tR^+†a°éì&Q“Säâ$4NÊÂ#ZöÐÁ‚±ö :¨hޜڰUU ?ÖNh—9 vÈëÊÀÇÿú¨5ŒFjòÄÞÁæäwÞInÊãK7zvÊI ŽæÅÕ²«Üv0b‚.í"'© qRZHÈ¥BBÀ2(º•Åb]æ$"Ú.¯Š êéÚ¡žxÒ'ÿ¾øèߟúŸœ?OŸcÇSmº”òZ™ª7ºº0÷ê ¿4NÊÂ#GÐÿ˜p-(t2‚V$< %/==·Mc—×Å‹´íÜ:ðÙgÀЯ§×“ñÜs4µ;(H"þÎ8 Ã0¢{oÈÅIJhœ”…G ô?&$\›MèD  Ot:EWTðþ±ËëÂÚvêd:õ‹/’µqé]¢¥KåYUªk•œ“Œ¬Ò,—í )9I “²ðHþÇ„„€k³ YŽˆà|X±ðD Ía—+Ð;Zìöò¢kWzmˆæ$RTo°Pcø¥qR)⇄……¤ÁÁ¼q)$d_S(Ô‚Ú./«´’âZ±öÑ“SÌ¡ÆðKã¤,ÿüs‹ãx‡„Ùéé$º|f5°¢'P ÿ¿ »½ùÜf<ùë“(®.6íûòØ—ˆ ŽÁÒॖU……ôAÚ£‡ÍêäJÀÕkeno<ÐUšm5†_'eá¶tFFJKK±lÙ2Œ;›6m²x¼Y³f¨««C$‡øð á=¡E ´[CBwÎ$ë› ôê”Õxpóƒ(­)Å£=ÅæI›±á ˜Üm2r‹r1iÓ$¬=½¶ñnôŸׯ•Ôö†œä€ÆIY("Ðééé¸ûî»-¾~øá´ièãЮ];\µêå°oß>¬\¹µµµØ³gÅc¼CB@xPè¤2ÂÜ6mJ¶€”œ„"4”¬¤Œ €aðyò瘱m¼t^ØðÀ|?á{Lì:“»MƆ6`É %ðÒyaÚÖiØ–¶Îa§‚C)¸z­¤¬Þ`¡ÆðKã¤,踸8ìܹÓâë‘GAff&M³bm–-[¢¼¼Üb_yy96lØ€­[·bË–-€ÔÔTÓ')ëI¥¦¦ÂÐ0£Aäˆãç±ûާ}€ãçYíKHHàõ<›} âªÏÉvìéÓ0QQvŸ— Œ‹+ûÚ¶**ðÁ÷oâ¹ÏÁ·Èëï[º>`sìÜ1sñFç7PÏÔã/ÀÎs;  €N”ã,ѵbëþ\Ü&v(¿¶mÛ*z øìc·jàbî=»r¾””lݺ}ôJ…®¾$7†9ɸ óçÏgæÌ™ÃL:•1 ÌéÓ§™… 2Ì´iÓ˜9sæ0=öSSScqÜØ±cù¿Èã3 À0»wó{þÐó—,ð›0̉'=ߣ‘a||¦eKaÇ]¹B<‡ ‘ž“ŒÇ€‰ZÔœÁ`~KûÍ)¯/’¿`ð˜˜b˜ÒI÷Ñïsð RŒ99‰Arv2ƒ7ÀÜúÍ­2RøïÇÿtNÓ¦M“ì\RÀ­!á{lSßtïÞÝšûí·vü-¥CBŽ<ä7£Ñ" Ë(É@jA*‚ü‚пUøy›M¡kq;ªxP4tø\s^ÝñBš„`iûBœìÜš* ±×ŠaSyTÕ,Ô~iœ”…G ´¬!¡Hv)¨ˆièÙ›‹½{ÑÿëþøíÂoˆ ‰ÅŒÞ30¦ãn0ïóðÀ¦H¤yŒ • O*k+ñÔÍŸËK†"Ôßqs^-ƒZâÄaôž¾‡"úbK±×êxîqd–fâÖ6·¢u³Öªà$'4NÊâŸÝn°h†ap ë’2’PZSŠ>Ñ}0!a|*!D ´K³™D6åÒ_¸ëÂPS_ƒCàõᯣ‰OÀß×ÿÆÄ±5u+^üãE|’ãmq¬äœ`ÙñeȾYˆIg±<3Ö¼f{õÇ·9À‘Vøîäwx¼÷ã21åω/ä²7uÎÓ8) AóžIXôµŠk˜°a†}; ¯ï}þSšŠn_vÞ+ ¥|"Ú¥ÙL11¨ðº°5õ5x÷¶w±è¶E&q€î-ºcçÔǧG>Å—•{é­Ä +ÃMÞ?ô>tÐáÍ$ðšîmÍËûâe|¶“¾_t`Q££ Ä\+†aL-µ½¨s†œÆIYx¤@‹ ó*ò0lõ0ü’ö âBãðéŸbÍ„5¸¯ó}H/Iǘucp0ë t@€àæù.11xînàBýuŒí4óÏç|Zûæí±õ¡­ðóöÃs-NàÏ84Ú#Rsâ‰åÇ—ãFå Fà­}oáZÅ5I9ñAu]5Þ;Huì¯}•v6Ô°ãôi‡ÇZðºqƒ*R kÚ/yðîw%çÌ›Î>ŒÌÒL i;mB¸gÁ*ÍI hœ”…G ´ð¥Ão¢Òø÷ßAèn„·—7Öuz±%ÀÏá7°ëò.AœÄ9e9Xzt)|ðÚ!߯Úf§æ ¡xîz;”×–cÁž’qâ‹•'V"¯"»LD÷ Âܳ'mOrx¬¯”Ú6øˆ»LDû°öØ“¾ÇsKM›'øñÌ€‡oyX:Ô~iœ”…G 4ßp_Æ>¬?»­Êuø¿}Î=ͦŕøøôýÜsQ[_Ë›“˜ âÍ}o¢º®óÎCL³VÔü¨–Çk6Ô@¿fŠÈÀH|{ò[œÈ=! '>¨®«Æ»i„ûÚð×èу¶NFмخ†}Þ^ÞxéÖ—À4BWB®U±Ïn„·Î[6ÿY('¥ qR)Ð|BÂ:cžÝù,àC}‚Š*¨'´#`Âyàv´GZa–]Ê›“Р"­ «RV!Ì?Œª6Ør¹¼<ç7thL<Þù6`aÒB—9ñÅw'¿Cny.&$L@=ˆ‹£UlNŸ¦iëv`ÁËJ `Z¯ihÑ´¶œÛ‚‹…¥¦ïœ“$¥'áFå ŒŽȦܭ^•æ¤4NÊÂ#šOHøå±/qæÆ ŽKį¬ÌñAÐXÚ|*|¼|ðæ¾7‘WÎC0!<¨ø¿?ÿõL= Y@3ïÌf:…Ù,½g >,;/íÄ¡«‡\âÄuÆ:¼è}À+C_±|ÐË‹|èŠ ‡õмXîÕË´ËßÇóÎú@*ê!äZ±öÆ”îSä¢@á—ÆIYx¤@; oTÞÀkI¯Á[çÏîþ ºÐ†Õ¹M÷n˜¤’Ðò¦B‚Šäœdl9¿­›µÆ³ýi”/V }½}ñÚ0âh=Š–#<Ùrn ®_ÁèøÑèÓ×ö <|h¯’àÊ Cê'm†§û> ¿ ¬9½†©è;çäÕuÕØr~ ü}ü1>a¼*8) “²ðHv.س¥5¥x¦ÿ3`ñíÇa6‹pá°…Ǫ”U8{ã¬SN|ƒ †aðònªTxcøSÌY‹ƒ_G°êÃ1µÇTt ï„?ÓÿDRz’`N|Á0ŒÉ{~yðËÜOâáC›xz¶;Û‘G-´‰—îÞc:ŽANy¶œß"Š3_ð¹Vå5åøõ¯ö Æ=ï‘•_NJCã¤,ŒŒýÊ>AÅú3ëqòÚI l=ÐÖ¿äkqÔÔϘjöß/ÞñàÕ¤WÁ0Œ¤áÉ‘ì#Ø›±Â;9ö^ƒƒiFáåË€ÕRe,L¼Xæ°8X×ê—´_P]W ]̺º™“ÒÐ8) h®°¸ª ö,€:|~÷çðÒ™ýjBºY3À¯q¶á¤n“Ð/¦Žç75f炳 ¢¶¾¯þI3îÞ½í]Ûht4m 4êŸ0‰Ñ‰8ž{¿^øUÒð„­Ižë|x{y;~2ëCŸ9ÃùpBBõìHMÚ´±»*9ŒŽ®‘]q$ûŽfÅø\+%í @á—ÆIYx¤@s…„¯í} †<‘øúµêgù ¾y(-µi”ä¥óÂû·7”•íy5uÜÓ±Ë/§®yÇ`x»á¶O¦/gí Q¿N§3¢_Kz ÇOH3ï|þylMÝŠ˜à<Òãç8ñ¡õz=Y c×Þ`¡ÓéE;ûû ±ëò.DFමÛdã!„“; qR)ÐÖ!¡>O/}‰PÿP“%a>í ôˆv#0¶ÓX¤—¤ã«ã_qî(¨(¯)ÇÛû߆:,¾m±}­ZQ­vE…ýç8YI垎÷``ë8uýÒýÓíŸGغç¾`Ñ£Ú.œTr$&&ò²7X<Òã4hŽMç6!§ŒG•‹8 š6ŸÛŒ:c&u_o_Y8åähœ”…G ´yHXQ[‡·< #cÄ;£ÞážÙå¢@dKxé¼ðöþ·QRm{GAÅG‡?B¾!ö|´±oø…NZ§Ó5Î.ܵÐåæ÷WK¯â‡Ó? Ô?Oöy’ßANFЃ8p€~èËQKm…@ß@ÌJœ…:cÝHWá,hZwfåì @á—ÆIYx¤@›‡„Ïîx /`l§±xºïÓÜH ÐÝ¢ºaFï(ª*Ââ¶£`{AE^y><ô!ü¼ýLöƒ]húo‹» Ãc‡#íJšÉ7‹|LÓæû?‹à&Áüb§|Ÿ:ÅÙ[$+=ص‹¼þávžé÷ ¼uÞXv|ªnV ùxÁQД]–¿2ÿBëf­1¸í`É_[ 'wAã¤,>ÜÏ1Ã-a·`l§±È,ÍÄŠö—ƲFñÿµwöAQœgÿQ"B %H?*i ~`MmëTkbˆ­BM•´bM†˜ˆ­XD$5uHc jµcu´š´A£àX•$iEü@‹!x~„¸ýc=ù†»Ý½½=ûþþYçvXÜí<·<Ïû>O#¯åËÛ¬WMXÕfD˜EøûË«9ÊËáܹ¦×OŸÆt옼™%4ÔªK:99‘žh¿ä®£BÓ;ÇÞ`Þˆyšþ–`Äâ—pÒ‡ Ð!!T&Tò˧~iùùùÉÁùúõöÏ×ÜÕɦ 3î®îìš¾ /7/²J³ˆÜÉæâÍœ¸z‚e—ñ~×o^gþ3ó-[7lÆÿþ褎Zušgý êx2LsªªªXþÜrœœI,Lä³ëíoiÍÚ£k9ýßÓŒ §nÞÞ”)ò1'§éµŒ ªæÍk±ÒR¢‡Dãû¨/–HÅÊÝZÑ^¡élíYö_ØO@ï]¶v[âdo„“¾8d€·>'úøãòÑœÃmMuµ|´ u0à;(‰+!Ì'ŒâÊbâÆóô»O“R”Âoïð§¨?±öÇ–7üä/wwy‡]{9Vs€<آ˅„„ð½Ç¾Ç[‘oq«ñÓ¶O£áNç=± * H,L¤›s7Öþdm§ƻ䷿…= ;[NÛ\¿ù !îî0gŽ¢Kºº¸?" ‰ÌÒLån­h¯Ðd^Ò7wÄÜ®wOÚ#¿„“¾8d€¶f&áºJTWË©N–¯µfPŸA”Æ•ò×þÊx·ñülðÏX8z!ç^=Gâ˜D냛“„„È=,ÚËC——ËG ´¹x’8&‘)ƒ§ðïÿföžÙØ>»þÑ;¢ùVú–õ“×·œ–¢„ǃW_…Û·!&FÎ9߾͉Ÿþ´©p«€ßŒø Ý]ºóþÉ÷»ü±”Ö…¦¯ï~ÍÆSquqeÎ÷•}™híd„“ÎH’tJr0fÍšeý­X!I IYYmÏ}ó$9;K’ŸŸj7ÕÄÆÊžmϽô’|®¸ØêËÖݪ“‚2‚$Râÿ/Ým¼Ûâü…º RÿÕý%R’$+µoKm­$ÊÞ I‘‘’ôÕWª/û«Ý¿’HAÊ(ÉÐ@²->þg‰¤Ø]±6¹¾À˜(Š-6Ä!Ÿ -™IØót{)Ž«Wåzæ°4+T<ù¤|üüó¶ç¬|‚nîäéæÉß§ÿïžÞ¬;¾ŽgÞ{†Ü“¹V²ôàR†­FU}1a1¤ŒKQùK4£O8}Ö­ƒ¤$øç?19«¿íÌKîÖ]«z·$´|¯$I"ûX6ó~ qÐŒ‹_ÂI_2@[2“° æt{)sþYE€Ö¬PÑQ€¾wO^bçéiQ!³=§0Ÿ0Žÿú8á~ᜪ9Åìf3qËDR‹R¹õÍ-’Æ&±aÊuyçöèÑæÎ…´4psÓä½zê±§0ŽŠº òþ“§úzÍþUý/>¹ö Ã}‡î®úÚZ8á¤/]¯Õ2 ]Í$l—ÎrÐhÍ èK—Àd’â[@Ûsêß»?Gæaßù}äËã†é¡Þ¡L{rû Tk¯ØK #(ª,"ãh“OÖÌé­CoòörÍ¿¬¬ÀˆÅ/á¤/ù­ªHØ^ŠCƒ­Y¡"8XÞˆÒ:@—–ÊGs#"NNNNLžÀê­fóó›ù]Äït ÎyYËäA“ ô dÿ…ý|zíSMœU"ÿ\>A^AÖ-‘´F,~ '}qÈÝÙLÂqw—'G_¾Üv ›Z³ÝL<ÊKÒš>,#"ôwÒ­¼\œ]ôi=ÑÜZ†Ž$Iü~ÿïH}6W×.~ʶñóNúâZQ‘ä<ôÍ›rÏåæh 5-T˜[p:Ôôš¹éÐË»©µx¢¥×ÜsyÂó ö”ïaï¹½ªœòþ“Çáêà ë7Œ_ Ó¯­hgNFC8é‹ChEEBè8Ía.2X¸I¥=4-TLœ(÷Þ8_ 'OÊc±íã¤!ZzõèÖƒô‰é$ìMP<ýûbåE’>N -2M×®uaÄÏO8é‹ýïB(*BÓJó³™êj9ïÛÏÊ݉ÍдP1a‚|,§sSZ*oSˆ°j{´Q‹'Z{M ™JTPgkÏ’Uš¥è¾:@Ùµ2F=>ŠÉƒÔµÂˆŸŸpÒ‡ ÐŠŠ„Ð´~¸yîæM9ßëï/ï$Tˆ¦…Š~ýäQPçψ å×­Hohî¤!Z{999‘ñã \œ\H)JáRCÛù;àÌϰ`Óq~„ÌŸdÚuåFsŒøù '}qÈ­¨H0t¨|l>mÚüï!CT9i^¨0§9ÒÓ!3S~Â77²—“FØÂ+>§é'bIDATÔ;”„‘ 4Üiàù¿=oñÔ•;w˜±swûÝ%í¹4žþîÓš»)ňŸŸpÒ‡ Њ‹„íhóÜ<+–¯µ‡æ…Š3ä‘PëÖÉOù VåŸm⤶òúãø?2¶ÿXŽ_9Îì:î9ÒœÅ/¦ìZc}Çòæè7mâ¥#~~ÂI_2@+.úûC¯^òÖã{÷ä×Ì“§UhÍ aaŸ/ðóƒ%Kì虜òruqeçK; èÀ¶Ï¶‘VœÖa¾'ÝcѾE¤IÇÓÍ“eß_f—ŽuaÄÏO8é‹ChÅEB''ù)úæM¨¬”_Óè Ú&…ŠÈH¹7ô©Sàáa ' °¥—·»7üâÜ»¹“|0™¶¿À•¯Zv4}c"zG4+¯ÄËÍ‹ÝÓwóÜž³™“RŒøù '}qÈ­¸H-Ó’$?A÷ì)OøPÍ }út9å¥#ŒZ<±µW˜Où3ó ô d÷ÙÝ„f‡’| ™-Ÿl!µ(•!ï a×ç»ö æÈœ#Œ{bœ!ß+ádFtÒ ‡ìÅ¡¸H-ôСò¦•ðppQ÷ç­ Ft}¼ÆŒåÓøOùÃ?°¦d Ë‹[í4p›¦nz0l؈ï•p² #:i…ChÅEBh Ð%%MËîT¦7@.Tôì©`vŸ 1¢èçåîêNúÒ‰ÇÇ>¦º¡ßG}™<‘Pï–óø^ 'Ë0¢“V8d€V\$5J^güá‡Pq¦Ý¨Ú©ªªÊp¹0#:þ^¡Þ¡mrkŒø^ 'Ë0¢“V8dZq‘äÞÄo¾)çŸOŸ–Ûwþü窌xƒÑ Œé%œ,C8é‹]ôüùóú(ìÙ›65íØS‰‹A^kŒèÆôN–!œôE—ô… ˜7¯ål·ØØXf̘´ ¸µµµxßë@u«æF÷Ì›LÔ0fŒÕ½-:ãÎ;š]K+ŒèÆôN–!œôE—H~~~‡ç[ïöòöö¦¦¦Óþ­ú4×ÖÖ ÈùhU9i¨¯¯ïôw´Ftcz 'Ëxêë멯¯ ¡u¯x;ã$IÒ)@ý:3,_¾œ­[·2jÔ(Þxã $IbÇŽ¤¦¦’žžNyy9uuudffâããcE@ °v ÐÖ2þ| )..ÆÇÇ“ÉD\\xyy±bÅ »úÍž=®\¹BFF¾¾¾võÈÍÍ¥¤¤„ž={²dÉu›|4$--ÇæiìêÕ«,^¼˜îÝ»c2™Ø°aݺu³‹‹Ñîk€ýû÷³mÛ6 f‰‚Þ0¶ ±±‘É“'óì³Ï²hÑ"{ëhŽC-³3Í9ëíÛ·3uêTrrr¨««³kÓ”/¾ø‚[·n±fÍ¢¢¢8vì˜Ý\ÌÔÔÔ°qãF\]]qvvÆCA?[PXXÈ€ì­Ñ___rssÉÉÉ¡oß¾”——ÛÍÅH÷µ™ñãdz~ýzrss9xð ½u°jÕ*¦M›fo ›aÈ*]Í\ºtéA.Ú\Lì¯bl•¿˜˜œ™5kçÏŸ'//Ïæ]9EDDàææFff&[·neëÖ­¼üòËvuš9s&'Nœ ==M›6éæÒ•WLL 3gÎääÉ“4440Ô¼ãÔØë¾¶„ÜÜ\¦XÙ—ÜVÑ·o_¨®?1d€¶´¨èïïOee%£Gn·˜¨§_YYeee¬\¹’>úˆÜÜ\^{í5]|:rªªªâÌ™3€Ü¿äóæ“dìä´cÇxýõ×9{ö,LÔh©£/€°}ûö6Ë:õÆ^÷uW¤§§Ó½{w]ïëÎ(((Àd2±wï^jjjxñÅ ¶·–¦8TºuQ1((ˆW^yOOOzõêÅÛo¿m77“ÉÄœ9sðó󣺺š¥K—Úùöb=HJJâË/¿äÆdgg& 0iÒ$ÝÿÒèˆŠŠ ÂÃÃ‰ŽŽ`áÂ…©ìp¨“Éd˜ûÚÌ–-[X¶lQQQ¸¸¸•¥lö£-(**âèÑ£$&&Ú[Es*@ ÁÿU$‚ÿ'D€ƒ"´à¡dß¾}$''sñâE¦OŸnÑYÀhˆ-x(1³bccÉÎÎVß`K °"@ Z._¾LïÞ½1™LöV!´à¡äÝwßeäÈ‘lܸ‘ ¨“&Ø ±ÌN  Šx‚ƒ"´@  À ˆ-Eh@ 0("@ AZ  ŠÐ@`PD€ƒ"´@  À ˆ-åC—¬]ðI¿IEND®B`‚mpmath-1.0.0/doc/source/plots/ai.py000066400000000000000000000003071316273626600171630ustar00rootroot00000000000000# Airy function Ai(x), Ai'(x) and int_0^x Ai(t) dt on the real line f = airyai f_diff = lambda z: airyai(z, derivative=1) f_int = lambda z: airyai(z, derivative=-1) plot([f, f_diff, f_int], [-10,5]) mpmath-1.0.0/doc/source/plots/ai_c.png000066400000000000000000001710011316273626600176210ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½MÏ,Ùv×ùÛñ’/ÏËyΩk°@rw[æú^„å‚AÏl!w ´-ÆÌ°@b€ÄŒ_‰HׄdKÄ!Ïh&u£ž`ß[uÎyÞ23öZ«kí;2Ÿ§ªNÙ´KT¬RTDfFFæyrÇ/þñßk¯ÌìÿþÖXc5ÖøVÅ€Ãùþãþ"k¬±Æk,£ûãþk¬±Æk¼+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥±z5ÖXã[+ ×Xc5¾¥1üqokü—ÿò_øÛûoó§ÿôŸæþþžòOþÉ÷WZc5¾c±*èWâw~çwøKé/ñÿñ?æt:ñáÇ?Æk|ÇbUЯÄ/ÿò/ó—ÿò_æßþÛ‹™qww÷Çý•ÖXcïX¬€~%þé?ý§üÝ¿ûwùÕ_ýU~ã7~ƒÿïÿ=¿ø‹¿È_ü‹‘a¸ººâîîî+Àmg›é«öòhvûðáCó{žïþe»]¼c±›Áû.ÿ=é¥^~@{Äd—»šÙâoðáÃÇø¬4ïÓ,X³ÀÊ?2=Æ0´¾Ó·ýqìÊý‡¼½»%•çÌ|µy‘x,š€¬ó²³>Öj 1ÈYÍד‡§ì®ïÐt0¬íA°tíå4/vD9¢by¦³‰eDÙ lMØ"±mlÄxø\¹îú òlè3èäz2_çµeDlÀzÔz”¥Cé`B™ÌÈh,† FÖ–z4™ÿÀAR¬µ8hâGÿò_òëåׂ8[fV^oïlÞµ,=XR Çj#cL$„ã·ó·ø+¿ö+ôƒ)C¬™NŠ|ÍQá p4씜ª:‚l0A¶X,“ô<‹ñ(ð(ð‡ ÿçïüK~ð‹…C§1í _ù ¦kcºéƘnSúÀÄL|ÁÉ~ÌÄ9Ùp²ÿʉßÃìÇ\Û3o8ñÖŽ|f'_²ðödü_ÿê™ÿõÙb?6¦ß‡ÓïÇ?0N§ŸÇ/ŒÓ0}0N‡ '½âdWœØ3Ù“m™Ø2Ù†‰ “ ËÆ»lü®Âÿ›àöÆdäd Ù‚ì@vFÞƒ|8 Ÿ‘üˆÊa°CØ…Fß Œt ìH]hìÞ”'Œ qqÃ8™1 I†õä>”uYªªN@_…ÿ¡, få²î0÷ö$_Úª¿K±úÄøC –}]ìò)6àñY ”.޶8j²å /íi¾nßûÃüÐYuþ1éò_ØþÛýýçß«!ý>ós?üþ÷q8ÏW¡dÉÁlÞƒmçÂÏ @Ö'ŒçÞkAøð³œLѶ}ïa4:«9SWx¢˧PѨ/&Hf={IÒ ?û'~ž7Ù0™Œãè£!EIß@~2òägÈoöÈíHNê̆l2ë“õÜ“øÜþ+×f¼å{>Ë ?ÓógãM†›®ß©ƒ<@Ía½Ù6À¾? ÏhÞ¡lQÛ!lÛº¡b#Ê@g;ú êSÚƒ-¡=`LfLS€º…sigp¹Ú¬k{JgK±¨Ö€Ðß(~ðþ¨ÿ¨ Ý2õ‡ @ÕQ_¹PTà¶ô=ú9 ËnååÅ¿3µNsy%aí eó«©@. ýßÿ~¨×ÔÖHôtm3£ 0þ" ­(éÒøŸ~ðg˜È¸âžjÁuQÒ-¤Q_Z%m:€œœx:fL2½ìÙË–$=Â/üÔ÷ù˜ã>îê?†ãCòÁÈ×¾–GÈF~ìÉwïÈ» ¹Û¤G2cÝ>ÙÈ£þ.ò=$óE†w?3ðÿ»lÜfWîWcûÎ- <¤Çö¶õã3òt@äµ Ê! CZéIÖ³¡ç]·åhB]_Ô=F6#‹!P®.¿¹Í ¦üì‘Dfá§Yl§UA—Xý‰ñeFƧAzåîñÄ×<è‹`¾Û3¤Ïà\Øy¾ï‹oŸezcoÄvóÐ8ýRkoÔŠý¬¨ùæK‡’N¤jstÌ ‚£]µwĹ’îëy®ÅÊ0sA“V5EŠšNÊ8xwY½Õ®JZ0QÈ'ÐÓM€úz™H²g'{º<Ò‰ó%e·=L °ƒ9¤7’¾7äÞ×ù1‘ß^“ßlÈýI;²íÈì¼kP·hÞóœŸcþœù™÷Yx+p'ðFŒ› ׮̸ÚÁð´3¤ZÅR7t ºUôé€<= :†ªž!]PÜYÇ@íLCY_.b±¨w‹’f¶=j{hTQÖÊ7?‹þû‹Ð$ñ ¿*–êõË^>ó/ꥳîMÜì~NþÖæðçÎ;Ïo2ç#¤†©³Ò}iϤ«‚:[ks%°_)¹Šn•rœçÒÎFIðeèТ¤Íª­a áG p.€›!ÝHGg–iÙ·;¦#èˆÉò X'9±‘k’lHÒ¨”Ö4ùAö8¤?ùM@úÞ·òîùjKîödöˆíP݃ì0Ù“ó5óð”?rŸO¼ÏÊ]†[1WÑWbìítfhéÖÚ[6 EŸèñˆê1²>6±.KÑ‘èÔ‰KPK,3T}±Ú¹M¢ªË}Pi(ëÐŒ6V@ÿÇ«‚÷EEûòø•——‡IUA_@ú\×Nºö‰—\ŽcgßÙÎèo6ª2§¶uÕ ”_À¹9ptÔ™u ¬‹'=÷Ü5«áy]À¹Ÿ÷Q6‹c gE1„LÆ+Pf%½ H'‹ìšiàjš|ÂNÏgÓ£ç´É1@=1È7yO/ƒ'8ˆù»8¤M<îtoȇ€ô­‘?à?ù¾cúìšüvCwˆí!o±¼…iyÉž“ü˜Ïå å‘{É܈q›kk½û ›¶×þÛE­ƒyÊ_xÕº)izGôtBõ„Y2bVº»èˆõtš!ܾ™Â`£3ÿûzß«ÿ¦/Û”öŠ7²ït¬€þo_ŽÝ"/÷8‡ìâ`_Ñn—p~A’_\ Î0vp»ÜÅ*еŸàžî´¾Öáît·´©‹£”ôŒF=ù¬ŽîÐY@z¶:Î;uèÑPjÔ¦íœ2Êh³'-ñú¦W†]øÒ„™\T´H†éˆÉ!Rïö ‡XŽôrâZnÜòȉ.K(j1ÒÓGãøòÈm(éwiùù³y÷Û`ä &È[È;u¾â?ç˜?ð˜ÜKæºôNŒÀV`ÛÃxåbípP÷s6a] =žÐ)a:EÎôPºÃöèâ7÷ŽÝ!ÚABã•¢ª‰¿¯ßQ•4J€óÜö¹9}êÝ迱úÿ·x­Ñ}…Š~ñ/[*­ý¢+r!§yÁþ Z„•—ç ®ùoÔ“ÔOÃr¦Í˜.(¯žÓ3 ³y‹E.ìÂ×(ÖeW݇­QNôb›Cë뮤µ ?ÚÚ Ž€´å!dS6ˆ¿’„m/Œ;¥KZñ²u˜Ä(½;b}d'7ô²c¨jÚ!Ýeè¦›ÏÆé½qØ…’þò[È_ò¹aŸo7Øõ;ÈèöôŒj{XÞó$ï9Èrb/â*Z[H±3ƽÿŽÚ¹ªÖ´uTs4ô4aSÆt´v ú€ÆÜÀ‰¾i©.P²Õ=GÞêob)Ús›zõTùÆ èÿF1òë€ùu/cáF\ìVÔ«ïÜBµîþš"±‹=—®—b¦v –ä‹.5¯,¿Kû m;€da5Ú úvôÙ"MÃO÷ΠøÓ3¨ÌɨcÔ,ֳݡC¥ñ,ÅnDC-Oäfäœ/Å£ÞöÂf+ôe L¤fXuÆòŽÏ˜<‡õð ù¹ÂzÈ·Üæk†¼ảA Ï ¬'H“{ÑÇ/¢ñ­/úN±wÞe¸»½‚Ý÷€„åË#dWÔ°ùÀ£|ä(Oj HÃNa«0*ŒcÃ6þV=k°µ•ådé,˜¤js\.~N¥¡¹H8Ïݰ±Ì×â¹}­€®±úSãk5«ÿ§gû-ÁüêÞÒÃ`î$œßÙzÑ3¿ÎÁ—†0[ij=¿¯µ_ü6µ‹‡Å`qÍ4{Ò%Ïè’çêZ›žQS4Î=X²ŽÞf»ÃÔmÝqìYê ©™r­ÝÑH[ø¡¡¤-3‘9y·Ùfû#›"²Ý }‘¢a1:NÝî°œazÂô1”ôÈ3&žìÜÉ-×ò†^vŒy`ÌÆ˜ ¨Í×tOÆôÞ8|î–‡~&ðYÆÞeì.ÛŒÝ&ìúF<«¤&;oÜ£öÑ)dùÈ$÷åÀ“LlUÙ­°QcÕ:è6VOíýÚ¨](ìbƒL†M†eÅ4ù‚wÛ£üö]mG]#BüZÜ\Œãu ¾yZù<Ç èo/ Þ˜ŸÖÅÑ·ñ/|èæ…/³< "Û·¥zŽØòË-: c_›ÿ†ŸP‹棽d\X¢¾Ð[i¿KWOH¿ÝM•(fó ›I©VƒÁ ˆ ‰d ëk³ß«Û:›&³ÃSíŠ'™Ì«clQ¦ jA’²ÝcRRˆ*­åN0=ƒô]{J.]¶ÉtK–²ð¯ ©Kµn´ÛF§UQÒJºØ^Iî„2!œ&ómé…í•[1"…Z¬É²ÃZ&˜1½wHç{È·ê²Ëoéó¶²ó¼ll³ƒzkÂÞ2W9ó“ûÌÇçÌñ>co2Üeì6 }-Ø•ÀÞ`¿Áúÿ¤?ƒut(ê†,ÏLúĤ™ƒNŒ ›øjôæjº3èt=°!úe‹ûL¾6±9'] œKÒÞM«¬Jºc¶7>íô¿ïXý âe%ûò~3vãÑŰ½å^çò¢ÕQl£BzyD»„|Áå+ žÎvËœ“Á\F£”ψdˆÕ\EÏ·´q2Zb>-5 ô- ûø] .)çŽ^¥ÞzLCì¦i1CZ8‹Õ,WÔ†n´ßy͵9$±(‰‰£9œ·æ‰S¨ê«^Øï…±Bº(êÛmžõ@~Äž?B¾Âò &· ÷˜ÜC~`·Üæw ùŠ}Þ°c§Ê΄½y)£+~|ÞOÂã“pú(áEgì&ÃU´Àl³þÆé1OvnÖ‘¬²>3iæ¨Â ê*Zý®¤·Rû(ÛAâòÚVbͱ]Öâ[K6«ê¦MÌmŒzVQ²h§k+ ¿Y|Òe~i?|é­Ùæ…>Eš] ù—¥Šæ—›WÚNÂæà ^¥1^]îìmåe·Òaømvé¥bjÿ ¬“Ѥý¶Ù–•Ðj.]ìc@do 颤‹]—lž…Pà,³’–MÛÈt.‡¥ë0#6qd∲C8¢M8"œL˜:áj'l;¡ë‹dg+°6¯°Lž°é2*Åò-ä˜|„üò=»üŽAÞ²Í;¶j¥[ËìÉ®¦-óùAøxžŸ„üÑmŽ2tÐöé­À6Á¸îÚ$‰ž¾PÕ Ϧ#bÄŽLš9™Ð‡í1”u:ÿ$6öÂΡ¬ÝöðßÈ¢ãvîO€¹#q ë%–_;O¾{±ú›Æ‹Âwi9?øk±ü<‹‚K¡}.rË×x½ÃòŒª,÷Ey+Õ+ÇÓbàW²â†À¥QÐV>{yÃÚZóóåm¶:Ú¥8 ¥ÇksèÌH:CZË–RBCÍï•ÄyVÕuŸÍà3’ï[†KX‚p°‰Â.à| Ëã„pJÂõFØw™¾«‰Îë”±”Ãö˜°üÏïÒòòV†ÊúüWö–ŸbÏ`]@ZØXö2F&ìÈì%óþYx8 ÇGAîcDJôN°­ÀF±M‚qÄÒÐygbMÉ(ÉΦ#fGTOdËL&tfUI—Ÿ£^7£•*¢¥Ì÷|w.éã5 (¼Á%¬K»¹hˆßùXý‡‰ÒçC ÁÚ——,/’´¦G”'ËAãñKí´´ó‹Ï{¸‹ã5»^”#-t-£ùŠÅ¢øF›rU—¿J èr!é“‘ú3+£ÀŻZÏ£Qª*K £öUÉ%=Z­Jή¦#+Õ°AÄzdÜ!É•´˜5 öA,G&Ll&b]€}3W7™mMp,:qUÍɽéÓG˜vX~r‡å;,¿Ãô ÄÞÒsÇ 7üI)óŸlÌa½ Ûcg™÷Y¸ÏÂÓ1sz, ZcdJ$Ð vžuSùsn}ø¶ZPËdR£¦.1ˆÖ>Ó ¤Ke;jF±ªj{½8µ¬€þfQ@ùº<¾xÃ×Ümñdí:±—w±yÇz@{ Ò6k”¸Á\‚¹5š+¤ç4êE¿ ¢ýz2^½ÅM³Íápö¼¼(Ydr¬SXÒ`.÷×¢NÖœgEÝé& Mõ¤¥X±=M ÙJ9g4’ý°²ë‘íé=oºTe[(j2OœxBxB¸Š)¡žM|j¨”y3 ×wÂ8”Dç:8H@Z°î„оÇäLj¾%óÙÞ!Ü!v‡p ܰµ+Þ²¥§c@BQÏö¹ •‡IyÊÊóQÈ£':[(i @Ûé=Ð÷¶êBXa=€Ú6Õì5¯O²(õ¬gwX¥I@—ÚüíR®ýídñÍЕÏM¬€þ†Q;ξÄ`öÛúà|¶W»Zìñ”»ÅóCø£íx‰µ…³×Ÿù¬:ÛoÑXÚBº‚:´pé$lþE® º gß3ÛŒîÙòˆ¥3ºbu ³Šn!íC­uhSètd´¡ÚV•²ˆOðz˜BEg#&Fi¼é€ôÊ)µÚ]±;² Ïœx²Ì™'sX?›TP¿é3·7™«M&Ùçîó)éA°!Cî‘ïÉöá=ÙÞ‘yC¶7·(×$»fËž·6ÐÃRQ°·[6ª<‹r8 ò¬X™2*Œ6ƒº×uŒjsP›¶“>ö`SÀÚÿöê¤ÈððrÏöb±Â¶{¦äÌ· ¥6±*Ú\u¯á±ú"ŸWœ{ ÎUžx yuóÞ²xªn›¥J«¥çü kXÞHŸTΘ6‡®ìÖ-; ‹]¢ó¿¹p¾zÓýluÔºvVjÍæ|)®IÎæib^<_*™k6ûwï6:x â΢æ~´@žÌëío]IXûv‡ì·ž> ÕîÈšžÄvb‡p]&Y eýŒðœ„»­pó½Ì¸ÉØ&Ã& =f36 ²d;!&òóG„¡ ßíáá³+zöìm‹ÑÇl&®¨ÇfÙàM9ˆr< 2*VžëÐAó¹ûPÔ]‚8h3ôúT1mM‹j€­Ý±pК»·ÅF7ÿÜ¥©Õ×/Èw7V@ÿa£@ùBì.­†—¯Šîs% ‹2 í+)Å×»°8Z/eÙ=7ûÑ‹#S§,io7- çÚ¿u]øXv•FEw]T,kUtCö‚Š.“¸vFWF ¤- Mž‡Y{~o“Ý¡F§ÆVBI7UD@ÄA}òù`‘S(é):3ˆ$d¿A6 I­šöAÞ¾(„G;ò€pm™sPû’y;oÞd®·î ³Í°l›Ñ·1©ëþ„|1‘ïŸÉÓG·:¸E̹Fì cGo;öŒ@s*ƒù(ÓPÔÊ“)ϪU9Ô£5ã»užôµ#F§¸ªöUKP[MxŽÇ¸ídøÝL…u{Ý?kóU¨¼ëÕÞXÆ èWÂÌø{ïïñÅ_ð§þÔŸâïÿý¿¶C¬¾œË.vYèìk_OóQm‰\ߣ¡c*Ÿ4«hï@Ÿ]àr>¤vÐLÔª„iòç,dN½î- šrW¾Ê|®%¬+ÅtJ‡á é27 v¦¦“’:ó!Ǫž! ëj:7VG(j(aôjle¬¹¸p–¢¢òÉÐ#>sÕ¨eJÈÕˆìn¾CHd¹Øfä]øh÷Wæz÷Á2÷dîÍ!ýÐ ïv›?™w» ;A¶†×72òd¯ÈçGäÉüøà€æ1·:„+Ÿa…=f[z¶\1HôH(jöˆ2˜0âQŽ“rš éÔC€ºŽJQ¬/R|,~QÕ©ó¤K9Aâ7ˆß0Yëö§=kúÑJ¢írv.}·cô+ñ/þÅ¿à?ý§ÿÄOÿôOóîÝ»ù…hl/ðó ’—Ñ>waqÔ“Ëw&{Á1[>g—ûL7p¶x Ý¢wÇæu%nó• ’õ ºÔ9R¥T-Œ¤bu\.ŠÄ0ðù[UPwFß+iŒï#ë1¶S‘Èâ•å ¨EÒ°ÓÖ²®ž´Y` 8kL3˜+¨Kbì¯!‘ÍAݪiÁ˜PžL¸çȽeînÒ&¾&óY/ÜÝ o®Î#H™ÌucQƒßÔïùxBŽ÷÷¡¤¯P»BØ#ìÛzÛ°gRTkÖ¨G”ʨÆå¤Ê”Ü•NCóug‹‘)ušª” EoŸ5KyõÀ[HPG)¥¹ó°mfÍö*œ_ŽЯÄüÿ‘¿ðþ¿ñ¿Áßú[‹ÿüŸÿ3?û³?ûòŽUÓ¯„sÜΟíq))O&Šrm:Ï/ñ…‹Ê3˜)°N¡¤[9r§ó¼î\EÇg·3µB¾êá ?úl±ŽŒ„’^‚3R§ô¥@„F>´4ê/g¬ŽB™ýé²_¯;v:‚4Å“ÄÂî€,ÆTg®²2ƒUÖaÝ‘¯¯MX‡Ð‘Í­ÜÀzBùÈ‘½enÈ|´ÌG2Møˆƒú]ʼ…›Ÿ2º(—‘cÚ©:ãv¨jÙ ùã3òpD¦$T´ÚÊ.Æ8nQ6˜ôŒìÍç6éMê¬ÛðQµo#‹2aáI¹t©\.¶”²ü¥0RMxVJtÍ&Š¢WUUGûxÉò8kÊk°úÕø™Ÿù‡ßûÞ÷xÿþ=>|àG¿ù#~þ?ä?øá æ¥D¾xêç÷Ù0]ØóiañÿÙò ØŸuZÝ[–Wï½ïjVG)›Qû³ÕžùЖ’Ϻ]t•É¥’®šË˜e]ÕõÖÀYÂGÅÊH_ê"‡ IDAT•šàlípA5z1v::G¤é< ]ìŽã¡õi^çSòÇ·[d{Gî ¤gXgb‰Æ?æ®Þ˜ðáÎ2ȼ'ó>o n÷Æþ§AzÈ>£²±v²”u&ßgäé€È¬¢Õ¶ˆ¤Ù` t ìè鈉ªÌBYûì‚Ç(uŠçódä)ê ôë6á¹~_;/JÝçm¥|VÑ4 nm¬EÅs*gm%tЯÄßøƒ¿ù7ÿ&ÿá?ürÎüù?ÿ縻»ã×ÿ÷_/7áάҠP¾¤v»µ°®‹>Û^&ïÇÖ¨Ûªr”·VH—÷Ί¦¨çÅ7 mÕ»h%ñ9 %܇~¡ =ÝÊ=G•å[*¨SøÑÖ&悟ÅöÊwEM»Ã;³ºÑÃÜêȱL¥HÑ ê:‡ *½ìØË¦rCKÅ;ŽÃ '…ã³áS r¹UÖ'È·#rõé{„ÎG"Ò!Ö…Gí°~6ø‚?àšÌ­eîîLx+Æ{7on’qýÆ!Tô¶ÇƵ¨urŸ‘‡ŒžQÙ¢Ò¡¢Å6®‘mDHÖGu Pƒi³í¿Â„q2WÒ"±¸ ŸíŽÅ8ïæ‚^ÛX™®û¼k0”u ꦱV‘Å—¬YM¬€~%öû=ÿìŸý³¯ÿ†Vø–˜éû"œýÕÌer°–ºT›ƒæ¥úrêÖæh»&‹jnÑÝ$À½p–Ï—åg¡ »Å$®EQK¤'Ÿ³Ýë;¬ëÅ=îâúJîï–ÒEåE‰)cot£Î£ 5àìIÎØTG ,àŒ¸åÑ©q%Ûª¢MbàŠ4‡b>¨Ò¡¬Oùö ²È dï¢kµÃz²Äðû|Î7dÞ˜ðNŒ·wb¼ÉQÚYëöoÔ»¢–v>ƒµî yäñ=Ý„ÝfSº«^ÆzFʈPŸI°´ªL;`aÕY QC[õ|i+?xiM©Ü{•E`/Á¼T5óðÿ—Ë|wcô'‡½¼ù‚ÿüRSsäX½9,ª¡ÎÏ×øÜnkcШiã|\IéÙîXÂ2Ôt¤ÍY™+pç39^Ï+¿-çCÝê8WÏÍpßÔa©™€Á¬lçøn1A••oj”qTÒ¢¾¨û¶‰ôŒi¼î…î|`ËÜ3HåZv~#gP‹Î¾´dc:€<™Ïû r€k9¸¢ÎoöȾGÒÀTÇù Å«öõ3ŸÛïq'ðQà£wÞˆñ& Ò]‹q¥pµ16ß[ÔÞu½±(ëÊú1£Oz: ºqH7*Úªó\Ü3Ĭ']£¤ ¬û€so%•Ð=v¼U¹UjS3.îº8SÖ̰.m©ÂÚš"JEa—××€Ðß(^³ŽÏ-€Ýª«ûµóüÍpnA²øÒ`¾ü\}áé¾UÑ3¤õ þãÝy‡a{(r¸Š T­Ž¶JhÛ¯¤SyÛB7~´ë6µR>ßgŠVr-ý9ç”w+ã ¤MQÒ³‚f£0)6=—Q'^—Y–¶GåJö~c ÝÛ’!¤óSLäZ`}0òr(ëüf$ß~† 2#Ù ¤};3£ÎÅòcåûl܉q'ð&7¹@¼þ¾±ÛÁø™ùÐs¯Zc4dQÕÏ‚>?¡ÓÕ³ Vò7lP÷qtÝœèØÐQfÙîÎmnù…Äʰ÷ø[a“QÚKsb¼Ô¸xp¦&Ú†µÆ"V@£pP¶LmV `“§*qö‚Ù¢I¶]x‹ƒÖƒea, 5_§¾¥UÑžG×½Ôhn¿m£¯Ë-«Y\ÌSÊç[óÜ)”̳:êßFM›Í5WŸ@IX7„VP“]U[‡OÛZðÜzÓ 0ŽMþsµ:Ôs£³Æ$®1–[r¨êì*[Òº#IW‡ úôMs£d˜Æé ÷¥ŸŒüòhÈS(ì'焼½E¶Òmȶb¡C]û¬Û{Žòþ«|Σœ¸Ï® oÅb‚£ÔÞß lí•Oê*ÃZF Hê3Z¡ÛØ>vt:¢z®¢—Jºä¡':FRÜÑi…u÷2óšjH)1ø'¶Û‹¹µIÏÕµÚóà¥Xô̬Á èo/]𫺌ǽx¾î>£Òwµ³ãÊ–‡Q¼(p{W¹Ø->vY˜bø÷|ø¹³p9s\—¼²\Mn.~cݤ±;¢S¨³áB=wfÎ÷PѵBhóvÝê(àP†Èî|î’yr×YE{:eØ»CÝo®õE›Ò^©À9Tu(êN2;¹ Ó—jwº¨iÉÆô„O-xíóÁÆ\°¾än‡Üþ dØ"^rßs•Û´Œ¼ÃdÏCþœGùȃ(·b܈Eí}‡ô•˜< Po®¼#MzÞ¼ݹªÞ°ŠŽØtBµwmÅRrUÙR…u_ÚV½êl3¤%@]!ß5Õ_½š]« Kgs=ÎÚi+·×ô‹Xý©R°æ%s&x[pÎ[f8•Ïþœ-ëKòEºÒ¬Þ[Ì…dmçe[a1ËI]/sSkç„ÏW?¨Õ&#?ÁñÁëÒïxœß]!o6X!Xôø9¬k’3Èž“|`Ò{õÀU´Æ4ƒEEkSÚ¹ƒ~ç¿U™ÍJ`[xÖiГaSöER(çóîÁŽyFîÔÖí ©ùÚw”R†Í£C­umÛ/l/N¢WžÿÆ èOŽ¥ŠuõüB‹* ³áø¥šž-Ž˜Ò3i[%b„ø Ó*èU´ <£þíð3ïi:áûĺª¢]IÏB;9Ù…Õ¡õÓ;´(•—-à\|ÓjwXÉ›^*éýè£æêXîë2 e’HÁ 8ëÄúT—N&öù†N¶ôÒÑ‹Ï\Õ‰ÑåÖaȃqüྴÞ)ö6F¥xÜdìZàlí³a[ï.i>ÅmõEä‘g}â GƘ1¥¨èyÍ(/ïìÕûúòsõÐm¢mH¿r¯È½À½`÷h»á‚‹Ñ(ìnüwÒ!&lbWÕæIΠ;TŸ8ê3'=zg•js4“¤0è|×Ò™ÑuFÿ•ã癡\!mÕcoS ‘’^YúÚ.Á¶µÄõúì±mí 0ÛùãË+¤çXýÉqF^›oõ(϶9ÉmëL—¸Öl/dqks´¹KkŸŠj†sÐU8t©°TD³vÖ¶;¢Ã0™×m?Ï+ÓciùzñaÖ&zªÕသg…&\ˆª¤q]²:4 hWlŽ×3ŠÛ§:Gà9¨½“Q¸ÚCó¢pRuöú§C@ú9ŠoÔÚ£؃¼áV®éeýX(êX—Ç ã³òþ(žyð¡³CúZ°…+Åö{…Ý››h®¨ílÈ ‰H1Ý`zà(&=ҫЫ2ªÖIRúfÝi³$¼¤óÆïV¬›®ºH£¤³ÜË<{%A‹ ž9Û£6Öº½”—ñò³gý8¯ìó]ŒÐß$Ò˜[ÔE]ŒÆ÷õ˜‘^ ;³9Î^óèÊÁ—€®,Ï7±ÒRNȊߨ=m*žµÙ}ì’џ㞇 Fq²Ô,èdƒõd›o½ 4R|7-|·fÐCôfD“¢VTô„Wl›ÐPÑŸÌUj"žïo–„«2\+˜^‚ºfxä€ôS€Ú‹n˜šÇGz9r-· ²g”ŽQ,&íöõ Æ ÊhÂN„Ï„§£p| 8ß*ܨC:T´í|È í6#6Üø_]úª¨çäæ2lð tƒêÑ#IOœ,Ó«zu:-5øç boVÿîÉ uë‘%¨—¥x› pÇäý/u~³¦¢¶éóÉ%^ž}3m·Jú5ˆcô§Æ þE;o`Ù¥ö#gb&ïBE—lÙû%lކ¸•åë"‹;Ò+*š°K,Vë¶:¤_´:¬$¾±H¸êºâEÏK-?iScu¤«Õ‘,yJ²uçà¨Yqq¾×j©(êF4m%¦€õ‰ÉN³ŠF‘ óð¦“p½õÊT_º­t×t"Nu~Â|ü¶/^Òä@—ìäŽ>_3ÈÀF’Ï›AÑ|ÒÖ]̲ýÅ)óá$J~ª¢g›#–]™}Û`3BÇêØ& ¬í€Ù¬'²˜4Ó™×~ng²Z–v¶9)'EGðp éra·b.ÇŸ°ÜòXÀÚl¾;›…ÈùbÛÞ›Óˆ9Uu…ò˱ú“Øýà…wq¾×lW–§ùñb_…5w²4Pn•t9F-Žî{Ï®ƒU¦ƒƒ¯qCâ¤*øí(5õJ}ÏYŽ3úä³l§>ÀÜ.Ø M]‚¹Šš P¬úѽÁ$ :çGÇõcur?ZÒ&: }&/TωŒC:‡å‘Ãò(ªZn¶ÂhQŸ­ÌJ]uõ¦3ävz 5ý„eµ¬M|\÷ w¼‘[6²g#wÚ™ÖYµ·>È›-ÂÞ”÷áá$Ÿ¹¸VìJÂêPWÒ[ H+¶†ú« j4JÛéè ¶ðªuó‰ÅŽˆNd&“€õÐ}sm3MSKx±þæfˆÎïvm¨@»üX%£U&¶ìa¹¼s,-¿´‚ú,V@“(ÕÝŠ‚æÌ2nvs±=7àÖ»›oë"”"º›ÊruŸ²YÌå"‡ÏlŽFx“@3j¨Îç"•Êg«>tÆSs†_X·¿i¦k¼¢‰Á:¿í® .>©9¤iÀlM‡”Ðíˆö-p3jSSšPÒS…³Ô 1×Öf>«ö&:kça\¨E•òNÏXÜp5ýˆIyü òD'Ï\ɽ\1jÏ`>¤f4aÄ/^©ÙA½áã³ð|RŽÙá|U|è’è\† ŒŠÀ0`Ý.ÚQӻ׎Bѳ£ÃÛNžš¨'EL.g²Â/èm™X˜Û°usË[t4·KjÖEYWH7çÀB#—×.ï:/TÎ+ ?=lÎc[Èãhpµ¾r£6‚W©Ô0ooù¢•·õ–“¹.ÒÛR@¦ÐÖÏ–îH·Õã|wkf"jFŒÕOvH§ò}šÊf}2ŸðìL·ª¢i_—Jº·‘A£yš]ñJK~´U»#|éÔ. ÝnЮ¤Õ0ÇÚv('NœÈ&Ucg+ˆ¹àš›°¹Rt$VHG ;÷©£˜Òô„ñ±Û7 ¤cÉîQ︵kcÌÿ'1›¶° Ëc–ÇΔY¸Ÿ”ÓI8>–ÎÂð¡—£Q"=Ã-†º­76hÖBº ð:¯>|P"ÙYLH&¤VEsÞïkË ¼…ªîjÓ{a)6ÔµŒÍÏÍðöË‘š}×XýÉ1«gsC—VE·»i¬ïfŠOž:“7„‡ÿ6-\Eö¥„c9`ks„§Z ݦܵ֨HW;~j'\9/”žZÕ*èº/ú|κ®PÖ¨)Y íVÇ ¶PÐeû”½XþìG7Jº@zã~´œùÑÂÉuªML¸’žLÒ¹ÉôHÂöFè’çM³uQÕ1+K~†éó±Ûu1/¼Éj÷À-[n¸cC¢£G¢À§ûß„Ñ4 -ì&åaN'azT/º±Wl+as„Ý16¨Á ï m¢yΜi@hÛ lÀÌU46aæ3Ì- ‡ñea«s=â*ŸX¶e˜ÅGµòꚥX›niÉgzyåñ«±úD0²¨ÑÏ f¡ÐîVê”§y_{ ®™ óÎ=‹²ÖVA;¤]í¦æä²úZzãN>ýTé$´ÙØÐFE/ª5¼¤¢›Ô SåÜâ ¨èbu4pîuN¿£´Ù“·h*ª8Sõ²MáK»’vHçj{5]`}³öIè|ÎWÓ¼ìŒéÁ!í…60/¼É=ªwˆ}D¸Eì†Ä {ÛóŽÁ;D-J÷Úbnó ªv¦A7PiX‡–±ÜËÑ(V† †å£qArP+E(¿V¿”v®Ñz"m»n ]ÁÜ>~A /tÍZrt+ ?5 jjFí-)E†Òb?ƒåø’"¸ƒVÊ EšÛ¬ ½63gÆ2Ôiî+mµªè¶:h9Á4³¸-¥ëSdsô½ÑVÝ[ºLƒÔuÞYØæÍU5mꌫÙ]¨éޤ£dMdƒIÑæA½Â$1kG«¤ñÔ;)ùÑýI2º(is5-œ8ÙÑ!p. .ÊZdö7ÂPŠm$OÍ£ØÕ™ü —Ÿ°Ó=ÈG[LïQnÉÜ"Ü Ü \3°çŠ-‰! §†/퉂uí‰ÊÖ”§¬ï,¬<×¥¨­e4;ï,´˜§néIÇT¶´:ŠŠN}€yau¨§fÔQ…Åêp%ÝiÇh=¹eN´™.ÓVÝ*é”Ðýˆô»ê+_Z ’mB8º+mÅq8·Š:¤¯®…M'X'3¤‹ý‘Bq†ÒFŸazÀä#jˆ= ¼Aí¶ªhå ±+°+FöÜØ@GÇPýiNDÄî>µVP?‹rå4)¹Sl#X{%ÎytVG¢àµVRiS+ ºz. nÔt¹ûò†w…Z×uèÿY»>ŸÕгçë‹ó \@»±5^³ _QØßåXý%‘sæ¯þÕ¿Ê/ÿò/ówþÎß™_¨½"­ù¦›cÞ¯iêï›Ý‘Tv‰µl. º–5JÌÙ±öÁÅ.*º'™Ò-ÒîæI3XçCz©kt34Å ›Uô h/óÞk£Ž„ÐyóÁå"RÇ;¤Ý2jWá<6•ÙzÅ9¨’f¶}Üêèý¶é4,æÅlu'Ħè:N® öa.Ù„©nö¶R»-XŒå¶$ó:e·ô 9àÜ{·ø,&2òt@r€š‡€ó5b×W¨ívˆíHlÙÚ†[¢ÙºX6Ír@9Š/S6¦£¡½bC±;æ eÛikÔ‰HÈfPÓQj§Z j‹»Âºn3ô­Þ镸€4_ÃØE5—ç¾î¾#±ú•ø7ÿæßðS?õS|ÿûß_ºx…¼nuœ‰]ˆWšŒ8¿ýLK8—ªU-š»Ã ®X¡P}o?_bˆWQCˆÏ²]DT£¢«Í"о0=aérê£bs”¹é:›§íѰ9‹Î«¸ É!Ò­f?ºº·Žög+6«Õ»øNÃê0 »£:þ6)”ôÎýè2‚p†óÒ—>qähÂáHæÛܱÜn„ë7™¡­ŠÔ VÖÎC¶†¼?"'äøŒÚcõ¡…몠…](ê-Ê–Ž nèç™-m>ŸŒ/é#Êã¨Ê ecš )%‡æï^;m©©¶0“K‡puswÃÙžzrsÛŽ‘N1‚°(—]ž:·BÖø´XýJüöoÿ6OOOüÖoý¿÷{¿Ç_ÿëŸû¹ŸãÇüæ¿úW ðó?ûóüðÏüYƒ¯2Qìbð“¦o íÞEõ£]ì –”©]xyPfNª¸}µæ¤ºÈ‰Ž£0ÝbÆÚt‘rWfÔðTÂ. ÝÎ =tF?¼‰^=7úLEEá±PÑÚ±ÑÄdÞax %½Q8ªA¦Î\¥æ#K†GØ" Èv†s*ݹŠ›8ò‘¹µÌ e}J™Ó(ÜÞ [/° óZEGÃkÅz«èÇ'äñ€æ'ĽGmi€;‡´m06$¸¡ó‚ûh‰q `oÌ8TXGŒÆI•Iœ|Š\ô!Ôó¢O i%—na'÷¬³;ÂT½èÚ¶ÛDgÚm«Vц™ΈÕǵ±ŸEÍ~ùåïl¬€~%þá?ü‡€+é÷ïþ?÷s?ÀÝÝ-ÿû¯þo0¹‹ÎÂçåPëh£±÷ ¨K6GÜëYÓà;w«Ía]ñ¡çÁÓÚZCyö;ëçgy›š]X‘ž>›°¾QÑ‹”»3@›ûÐF7iQô¡dt„Õ!‡zU(p.s3uÚ±±ÑçuÕylÆF­f—r€Y—‡Å5U I#²¹¢Ô³+ƒSZPçPÔG›8œ+¨e}(Àî„7{eß)]ä6(:@šÒÍ£ùŒU[E·Š<< Ïψ>†Šž½è¢ #Ñ.;’ld çÚÔóD_^µ2Äöˆq •=aL¦¾¨"ÙÐôB~z[*v¡¦£‰¶°ŽÎî9_nö¼-œ—¾Ý²ž§ÌµŸtññ?îÀ 诌_ú¥_â—~é—šg‹£Nè:ËãäÙÈKH[Mºð¨Øö’] fÎÉ^C²˜ÈEóU›Ï.ž…èIVr¢çA4¦.ºÛ¬+2ØÐaÝ˳<û ñÚÂÅ‹Æ'¢‹¶ebóœ­â× ;WÒþ}íØ†ÕÑ‚¹Ì»w0Ï6¥vÖ5sÇ¡ÜlÐñIÚ¨hià숙̑‰ƒ8 Ëel嘄7[áæ0nÄ•ó`QÔj}'êvP?(ò˜Ñã3ªhµ]¨èm¬‹Ë\°ëhîØ[¢'¹’.p®ÖÇ ë“©Cc2_g3D½íh eÝS´á öB·Æ“Ö³€sXV­ä Q IDAT½3XÛÙ:^›ÅG9%ìò#WÙüb¬€þähïŬ¹ý+·ƒçYq^hFç1¾`VÎ-ϽT}.#êÒE¡éR¸·•ÄžÍÑŽ«»Ó¨çLÌMGtžÚÕô„Ñ# œÐftƒF^´.¬Žªä¦¸:…‚¶2ižõtڳѮQÏ^Žâ~ôFá` e¤¡Î†-¨Л 2^SK$-êE_Úõ‰‰GžÍá\Ö¾h}îáÐ ·×ʘüâ&ÕÙ³}Æ*sHoc½3tkèã }šéµm¨é°9J7 ¤m¬U£'ѳ ›ªdÎôñ÷î+ÒÊ'³€¹ƒÚKBYø÷††²®6Gia;/@]”ïK°®òÖæç“^*çåb¥ÝÎ!}¹µÆe¬€þä83ËÊ0½pŒ‹ŠnÛ|}GÉd*LÂE P›gNôaq5Ýu¯@:ˆkÎ.‰«ÍQúËy¨ ÚÍþseúP²9üX­ŠöJò¢Í1tʃ(( AÎò¢u¢ÜiÏV&q«ãs¬'¯c¤†UQ[™¥ÉÕôÍ œ‹ÝÑZ³º>ØÄ3'žMxÂaüd˵ƒZyT¸ŒÝg¯IoHÌž­#‹Y«tëªZ·Þ‘¨OGôùˆœž* ƦYB/ÛÐ\ýÎh°ÄŽnéÿÇúï<¬JÆv¬cð“ÿ}ü"gP½¯eâ¹²ˆ6v‘à\¢Ø!­bÖæ­­ ÒÀùKy¼Âú´V‹Ã•Ó ¥³âEû­vDi_Sz”ÃÓóÎVf2Õž$=£&¶ÚqÒy”ss)îvÌç h•´X±;r³'VU´_àJ­h­Ûnwd9rS¡¬èXMyPãAk…«d\í}ÌžPayŒ EMoÜ›ÖèÎÐGÐçú<¡ÓSt%=ÖµÚú¦xfEGÇWս͠>5Ð.–‡_DÛ ¼Æ\Ž1J|m,ÛÓ²¬]4à/ÍŸkž¨äotÙç|{©¦/cu‰Пž ªÑ­±Š<>«k]‰)ï)ÅÇÒÎ6ÇÀìEkŠ"ç=sõ²ñfË΋äk•3Ø`ØXTtC Ø ¨]E×ÛíSÆÎÒZAm-°-CϽ±8ÒaسÕ-§PÎEEPoÅ8(œä¬Ó0@]U´Ù@n¯žåïg¥X©5ŠzVÚ?±÷<¢º°»¸RìŽcõÇ:°2öÞaX­ŽË]Óî­iaq”%éÀ¨;MÕ‹Þ…j>P+N‘~'³ ¨ œËöíÞ!M5 ¨£Lùà lÆáܨp«Æ“O‚ƒZàZ,fª²˜­ÊØl·Ðß-•tu¨èÅr}Ûv4ôxÄNGL‡ð¡ÿ?öÞ%F–í*×ýÆŒˆ|T­µö¶7>ÆÛcs-!ѹ€.-„M‡ƒBò騄 dDÑ2d‰Gü:–iɸ}//Ñ0Í+¡+![ cƒßÞÞkUUfÆcŽÛc>"2«ÖªmŸÎÞ9—bEdddfdVÄüsŒ1 ¤#VB´tÚžJ(2X7ù-Ñ6#–d4¥eòH çE%E?²¢ßqÍyÔË“DIGgýøÄÉT=_«ï“x¯ÊvôËj¨i4ÖƒE²Ì^¨„væhv"m„ùHÛé03‹cBKüº÷õ D³ ­íKЯ)yÿGÇÚ÷¢Ã¬ÚÞXÔ³¦°/µ:+ÍyÛZûÑ­}¸N73â¢Õ!m*zå€v=˜7áqì'Ÿ¦E„GÔ¢®¨mÍ#&šÓËØŸrTèõ1»i`7Á.«èË>ùP‚^c_Y ¬¶6ΔF¨J¡xmñ§ãJÑèÊ;÷J<@ì´ï‰“ý&ºPÒudÌ[Ê(Ûé.L*X×IÝ!×k_ÂgJzê|¿hÇe,ËwúÓ'{‡:>zÃsƒ3 _FóZY«wŽGRèÑüÑ”ˆš]lbø²£Ð\ßH§uϼeð-ŠmØLhocÕeÚN4:·ËѪľX:ø´6@—ˆ‚ZIÄ*ŠÃ“'Ð]«È¬ O´6Ñοiaqh1q%¶´1¸Õa*:)èÃ4·;IE§lÃdqTÖGžn-V9‚s¤ŠQ»£‰SËU|‰CܳŸ"» n&µñ^£©ç WøiÊ¡‚º­¹ŠRÎþ4GÊú`“üoÒGt˜ˆcN5œ+Hë±åQ«é¢]-³µñµ¥va)ÊU =WÑ Öâwj–YZé⬮u^î”õüÌì]JöWw;ú¾M’þ¤¡cRÎ6Úʃơhê*zV‹+;'6ÆÝ€ÒQÂíšYhï´Q`ê:d-:èfG‚´FëàÊ€^j^t¨W Q¤c1$Åãv3¤W¥¸Æqõµ 0EóÞ³’6õ¬ny¤ØèÍ$jçJ5yÓö~RúÁUô¤”aµ ¶@üÑ–i-L"L*Þå™–br“ =µôÓc¾>ݰCVÒ7“yÐæmîдyŠßîÚ…åÅFó¨TÖ«í¢¨uzí1P ÃˆŽ#:J妚/†.[¼J%m—‡pãf:òr§!Ôâ0®æ’€¨S­K§,8½ø¹=S;úÞ-bu‚!]íM :uÝ☇ۥÄÃÉ]ˆlqLx-ŒZý(Sô@ê_¤ò¦ýìOMEÛ™n…¢1‡Û%w$‰”IìÖ[»êeƒÛ¡(µHíyFöÉæ¨,ŽT/¢K5‹[­ÆÔ‹%²Cì»{£@šh±ÑMlXO+6Qf†‡h¾ïÁ-†C´ð»8Îap“ýñpMÜ:¤=2b¦¨^[;<+¦ø„«é û¸g#»¨\LÔÇC zF¤»Ø ´kfŠZ+E:µž÷j i<¡hôáSѣ൞ë1%çÞôÒ:«5Cr{K¾àòUe»ôÚbwèÑûi½}UãØ‰®i}–Ëwµ3 ïÛÄð97˜c ƒ ÷ª9ªd…NÞQXÛÐ&@û¦˜‚¶²˜Uv•Oq"aE§¨ýŠÑ¶Gƒƒ¢~kŸn½k LBlæ·ÕÒ²ºOiÇ+”žÈA•µDº\`^OGvÄ æµ9œ™ÌêXņ§g@'8»’ÞFåÐãJZ-™¥†õcZìâ8=ꈗσåFFg‹j1sêv‹ÆiâŠqz“é†ý4°‹‘mT6nsÍ,]ÝúI}€\ í ¹$g#΢hÒ…²þ[fÊrs4E¿IšÐ8˜­•']Òa†[˜ÛóyÚ*T¯*IÌaì]¬¯ óëìÝ«vv1ž¹}Ϧ(6â†=ÊGëäs¹£p"eæÍÔ=, íãP©Ö'zaùè4z^;+%YIô©çXZ«¥¡Ì³ ¦Ã-ª­mˆÁ}h¹K]ÝçB>^+b…eµµmD:5‹#Wæ/V+/:Ù%¨XcKˆ-›¸eˆ2ó£kX'Ëc?¨Ev$@Ê8àc¿:œÝþ°yÃôà± YIœLfsd/›5®Ð¸f¯âž}YOKZçC ¦›‰h#™§R%¡…f-6Sœ;Ťc·é¦h°å8T7j#Øè8É:Â죣ŽÃ¥.NÇÙÜþ8 MÆ![o¥&ô1¤çªz®À—9–Ÿrn§ÚÐ÷l3@{§ *0dâb z™=«êуŸp9è#x¬¢[&z`M©µÐ¤ŽÂPÝXªÂx ÌZä–uêͲ ME+0E¹%¦ +A¥­Ôs‚´íã> ˆŠz]6/‰©‘U£´UD‡Ù•ÝÑxï]‚bž\¹Îb£Wå©$±Ô“ªî“’”1Úáœ@ûÚéÁqåw6ð¡+huRÓ“ež¨ÕeŠ×ÜÄkÚ³‹cöŸKga*ü¤i(ÁÊzê„NµŸIèMÛÔÇø]À,ÖE Ç«-ôÜRYß}NÍmé3¬K;úžM5úðGu#E“äñTEqhfhö¡“ò“kÞªJ$U4Ö¬¤'@ƒ%¬”´ïÔÛTßG/ä¯3Hç FzI¯¥sjòp» érgsÙ@¨6ò‡Ò©Û(k”6…ÛÍTt–“¦¢G*ºž’ÕØz­ŽÚî§…ªžŠÝ˜úÊÖ”©÷åÑ–c±ôÁ Víoä¶XíJEWJš¸rÛcÍoã }ìÙÅ)+èÜY˜œõ, ^•<œ Zgbè€Êõ)éøšA+é\v¥êŸÎC Æ´¬¨v šîÔ|hb‡·À)ëŸálÈKKÀÖ6,ÕômàÖ3œí è{6SÐóNBS¯ ¬ÊðAžÔ!Z²¨TM8޲\‡ÛiL +EEL´nsØæêͲ {Ò+Þý_¼ SÒóp»™ðFè5ó‚ª i­¢•†‘H£ã,zïóʺQÂjI*v¢TŒæEÏTt‚uRÑ-›'ɵ£‡h#€z‚þq¤‚sthÇÁUto…¢—6—>úz dn\E·sPW'Ô;Ƹ£={èTYieuh‰:\%8NÐïºHgÞÖ3ߺºÈç,)¯;Çâ}þXçÀÎIicóÒnõ ÕùƒÛ¬ŽzÎbݹY;úžMQ£Ì™º¸z­TkŽæHà ªD±:ÿµØN5“ç…–.ÐëH3/:ŠÒÅBG;éÆƒ“¶î(i4…Û鬟1_0Ö×{÷;× iÇ9Œ öLÙÚX¡¬=Ü®'ÒKdÓiÓJsT‡ƒºv9À2a%“ÈÙf«CŽ,Ž~:~<\;{u5튺/ËzPØGt7ÁMD/6+hB–a€jz qú<êžCÜÓÇžCœhtb¥Å‚O‘Õà3¦¤« ç̆hZ’¦Ym,R]ïIK½¬™Šf6’•ðC·â(CX¥ãOÉçbÜ/>î.ÐÖ°NÛž£ïŽÛÐ÷lJ´Ûóº\]²8&£®fê–á§´²Æ` ¤æyCÚÆÍ‹ HG ýdÀa¡ G«DW…Û%QÔ½&Çájïá\Í<z^éÎ: WiDj·7®¢Wu²Œ®: -ï|iq´3X/­Ž¢¤M9›¢¶ÇÃä˃2ȇ¢œ-)DÑCD÷ìcJ„­¢›«­ÙFŠšÎñq¦¦UëÜmûñ4îØzµì“ÞAÝT~t«šKg/EOñê¥3WK9Œg‡KIȬ.E7´,g%]€œÃ2"ÓAšÔ55™O‚ºð±ú~ö3*½²¶CÎÍÚÐ÷lJ$2jïW1Å5&êsP´¥Û LbÊ®ÞÔêCב¨þ"F,Tu¦¢W ÇéêKEY´h¤Ñ¦Œ²¢sÚ2Ùê—¹Šn“Š^„Üy¸]ǘG¡N€^kdƒ2ˆ²òx3]U„uÕ»L×…4)Ü.›#GuL1† çæ185¨{ë<ŒI9`Ú›zÖCÌpÖ‹É3ORþ6°î ½$ïÏ‘/;SÔZ:îP=@܃µgŒ=¢ƒ«êHãÖÇÜæÐ¤O ~âPXLG °5¸r®ç©ŽW]Ï+«h{LàŽúûšþª^Lò±çgÇq;N”¹í̺û}^í è{6´tô1)Òxh‡"qC(cêUIæ†ÔãnrLL¬(6G‚´«n§K=MFÛ“*:TY…U¸0î]Eoæl7›c^ú²(iaç€^«b:Yê÷ÁC˜óÜí'œSfm+8[l4±ÉVÇ…10i›œ§ô¸WÆ1Á9e½ì]EïÔUÌœ®ÖÝÚ”¨ )Pµ‚´Î; Ö{WÔåªã¨=£ˆN4tšAúÔp‚5¨œëŽg?TJXE:*`×ÎóȱíQò»oŸÒ$A0[çíd áY¿œvô=›™t uY¬YCCÅN3'$S“ÂpÐbsdG$dºï#=#½êÌæÐº£0UIGr+â?¿ÆOü8Ù`¨qã/ËlW4†\aí¨6‡ û¬ mœ=‘Ú|‹²i•fѱè5S™`¼†ªsP­†g†b‚ö* ±óNCSÑ5œ—°ž"L;ëE‡©¤%¦¼ñmDw1§j•¨k….¨Å)¸u•«]µÿqï?¦™üª=¢_8CŒží9yåA͓ձ¬é½¼&gZ8 ¤4Á¼©+í*ŸûxzHÏ ¼´ÖÏÝy^Û©vô=›uݳÂåÉÓQЙ¹<•HŽZAO&¶ñäƒÔ1“CíüÓŒÖù¦Ê(š‡2jNU¶S`<Ø~T¹ÂÖQXâ¡mRWÐÂÐèÎɇAÛ[ ö‰t:²eç*zï°>¨©èM]Í5=z¬¢«xèÚŸ¶âþ 1G'ÍËS‚sªÓ±Té)2Œ©Gq*Jz[M Î)¨y¼s`Ðf]zïê¼í˜—°÷f{èÊ•túA-=Pýïb NµS¢ÕqQ%‡ð¨í€œ©ët”Ö‹š Sþ”€ŠæȬ¦…2Üf)sZI§)½&Ý*õþÕWŽ£“êÜnig@ßÒþîïþŽ}ìcŒãÈ[ßúV~ã7~ÀhÊxnIRDc!$ºÕ‘vï™; Åúò?É>´@SL*€îÝ2èµÔæhrùÑ ÎQaØ/¥pÀéQVÔÂ÷¸?Ë<Ünæ>t.ÚcE‡öŒìUÙ£ì=’#M=‘u§ÈjéC—¹vÑBG¡Ä”Ýny4±a7ŒÒU%»‰\v4N©ªÝé„1r}釈¦òCD÷îGï+õ¼Žh.°¡3‹†6 Mr^¯¹ب:uO]Is†gío¥[(u¬Â0¬œ“ÿÊÔežÿ†~ÎTõ è²#’ÒÎóïÖ¤˜cõº´n9Uqsù³*»£Þ%­–îÇع}K{ç;ßÉ;ßùNÞõ®we@§ô‘T¬HÓÑ:á‹–æò”6!%Ô6‡GrÔ Ô´N>8h)=ºZ’Ö?@NZlŸäDùÑt5˜€q_½¬VÒÛÆ‹ø×UԊͱcÊþóÞmŽ hŒ¡$®Ô*ZkX7 º+±ÇÚ–¨Ž£ÎÆ6¶qÅè~tsôåTj4©@«ìgã*^ï'ú)2e«#yÒš´VÅ5t«”tqQhšÎÈPBðÜ—F¨«Ru‹8õ é|•.ÌÖ Ø.k“šf’Wò}¾P¼G.pV׋åªÿ/¯ E`Pmwë»3QŽ>ÿœBxw;ú)í#ù?þã?žG5:+è”1ãÓogµôþ™ÖŒéõnW× :'üIÉ‘’g#0pÀm¸]øÐùÒϲ1rìA§„•öt}èè€öºÄ3ñ=´9VÐumŽ5·6ŠŠ¶ù€ÚÈßÙÖÐ…’¶e• ¦· Šz®Ó¿Ë²£ä!¯b‚s²6ü^ÝöÖŠ<5¹î#û)2¤ÔĤž7ZYZÒ;55½Øom¢u"†¤óc"ålWÀ®*!Õö“Vw8éò c Õô¹2y¬ò„êD¬` 0¯´¯«øW&õ|±|Š‘³urüÒìË7ÐåƒSϵھm'^¥í è;Úïÿþï³^¯ùå_þå¼îñãþòÿþGªòö׽޷?üo”d•PÈëÆ²•%+ ÅG£^¨¨¶¬£„ºPÐQG·9ìNÑÖíÏq¨]”š¶¢#A×Ì­kWÐ ;fÂ[+·FÛ’ö]´YªÊŽ‘w î}ª£96­Î;«eM : ˜8µs0/Ôt*QbÃf ÄØäᯒ¥Qàlqe©tÐèƒÞFÚ1²›"ý™öîAï#ºQ³i®˜ê¼8¬‰Ú/­~·à ­yyÙNY!wµåæK8«/×ÉZmOõçœ}kûèG?ÊŸüÉŸð®w½‹_üÅ_äÿð¸x´â‡ÿûÛùUš¯)|±ŸZ¤±uúùà‹ ChÛjE“4%¤Ó*20°gäië(ÔT0©²7²ÉÝסvIµM>úó-¡vm¥ —wâëmË&,V·ÛÙ¡\ ì5yÐi³9 ¤u¦ž+U*S©&§ ‹ã¨^G ÄÀ6^c(~óQÍ¿O“ù¸e<ÅéN#»!²MMëÚýèRàÙ=hûÐͼŒª6qHƒ•€…ëy-Ñ”·} ¤g£;Tö¡ÕêŒúû’víK¸Q"‹tÆÎ{ÂÝÓg]ääÅüÙB¾Û<·3 omï}ï{yï{ß{´^‰ŒÚ3©iÝuÇ``¬eq.šd‡hbùˆ'ýõóó’U•òªå1r`ÈÀ« '5³@Ù¤Å: ©å°]0D'B•°BuîZ"Ç‘ðvu¿ô¡çC.ítdW)èC5ïQz)ávs0W*ºv¦ÆWÑ•ÅQ«è\è?€ M.âꇚŠDM°J£Ü«ÃHåR­dê>ššfÅèZ Ϋ"¨9D°šç”@EÃÔév%ؤ­3R:sTGÕk\ûÒT ^ªéTlCc™©‚Å*K÷e•\]xÏâ[Ÿjw©Þ§*âèÏ º´3 ïÙ"#=6UÉ$Tó-z')’c²ú1ñ$‹J­Î"9B=†lèÈAç +9å»>Ñ&ÐɯÃE¦ÉÁü„ÅVÒW¨­ŽæißU$‡ %;±cšÛ•ŠP¶ ȹ˜¿Îí‚´L„éÚÖÍÕt]?:¬ò\‚ôÆ»¢Ö]+hu@«©hJº#údõDöQ9ô5¨c©¾_DpäCë­™&šª!‘jx§¬’ÆŠ>aj[³²™u&oš%¨#³ IÔ˜u9¯+9û1¬5¼ý€}¦Þ¾gØäLÝ—Õ΀¾g‹Z´¦{Ũäjü}ôUõfpæ4 Kò·«AèiV»ÙÓc‚xU©Š›Ö™¢® ½Ìí®›gAÎ'öci-«qu=‹»«ëÓ•uçöòÛÐ÷lÑ-æ¾oÄ*ˆõP]lŽ”`6;¡OJÕ ¥ÑUÒ‰Yƪˆ4jw Nù¦ "»H𱬥Oá…hm[ç—ã<šÔÕûè/>Hií=×™)a¥öŸMõûEE”u­@ÐZŽT4L#Úg{Ðö•#Q'ÿU¶lYe:{°šcŽEiSD‡F/jJzOdMäà!ƒƒz’PTWÕSÐãHކ9¤StJȤ® îè™[ÂÐg)0• U(6ܤ•%°O©é@y³ÖTËËÇËårõ’»¾ß¹ÝÙ΀¾g‹:1hïqÈ©;©‰š^AM?&ßWuBhg›˜‚fѧ˜†'*vÒú#=’Nü¥úR‹„êd• =‹Ì+/!¢î‹STý, °ŒöM®hWlŽ‘½Gr$HçØmõØí%ÈfŠ“¢DƒýŽ9…:…ØU*Zc±‚bêô4ذv%Í̃vH»z.£’ϧ¤¢×”;€Ó`=FeKîÙwˆºð¢<ÄÑ IDATqP—¿ÛQÁ«e : Ê1§Ø›å"ÉË. ÜT·²Œø8RÒy~ ÖéóOÁ:ÍoóªO­¯a¾lgp×í è{6Kõ>ØPQ©î@­ GuåZb¡£–(Ž?S'álðXó•#M¡v”‹Dê²§©º”Ñ”òÌ òm¦C%¼óË|˜%ƒé8’£€rϘ;s¥cs¥™Á™Ê`n VÒU¥£°Äa'§Þîo"#Q`ÍšŽR±Þö4)è‰öˆŽÜQH±:j0¬cþ. Ö#¦¬§É¾ß,²¿“óE¾v®™¿¼è榋‡éo_•õ°\N±öéXÑÐe•$ï7™AyyáHÓ2}ð®ŽÅSp®·}ÆNÉWI;úžÍ½f/̲ qi¬%~.W¶ó²£ËMW †Z•­]byG 9“ðXA»Úž%ÍÔ½õc"Ð.¸î}½=»Þ#ž†ž Ü`J¿î(v Øe¡(Ï”\cwj•YÝU©èdshÜS2ò˜ý¡ÉYNêy²IG"Ñ*ÐhÇ‚W³Ö¥Í‘¦XP®¬µ¨èƒV깂szŸ¾ã¨ëɇÞRç¢ç­d»£VÒÙò¨4³åY„Å ˜õb𬶵Z>ñò<—ê¹P^{ ÐGë_.XŸìWw;úžÍ: ÐÙ÷M¡nqèP{fq€Îà™üCt–¬²4»­Œe}b%@âY‘µ¢ ‰b)Ì‹8hûxaL¡vZ -ÿ&šUaÚio~¾æþ®óßUk5\ Ø<´.aQÓö«üºh!# +mhì?×Sï°îQV)TP ¤Ódµ=.–ÓE©l»,ÛþNš.Áõä ;–# úÓæßêÎú¢õíÑ©¦·>8~Ù©·¹ Öw­{9ë_åí è{¶‰É+c؉֠åÌš°Aò Œ MÓL©Ö z¦VÓY¬;°²9öèå–zÞYI¹PL@ß’ÍdÓÝMuqQæÖËP_,J¢EpiIT)*:Ù¶§IE{ÿ">&ís´À£àt±¨¼Yu¯Z‡‰b&ô¤î½|ðGžGr æÖ‘ÚVê»$Ü@ %4¨{ŠÍQß øŸ*ÏÓOT.Bsƒ%].êùqj‰f`§uöÓx× ŽXQ$姳ëDΟ¤'¡} O©î“ÛÜcý³>n¹}Ï™rGT¢ˆ”¤20tÎ&4²‘mßüКØNB;ƒ0 Hm¯8x,tBR_ù\š}€”(RqÛñP»d.û8û´Û‰@ôÕÓ’g€&Vj™o½1Uz­æwã’íŽCo뤺ìΰMêYKiÖè€VF¢vŽÈ¤¸Ôkõ]E£h ¬xÂuN`YÚõãÚ⨲엾æ|¹²;(×ÓIOF.ßê ÐË)]³õtå ´Zößüe·E²Ê³½æžÛ¿JÛÐ÷lQk‹ƒ*î?ùËA?)4ÇAMaV¬IA§xè Òû*:ÙÑß7Ÿ±õ?@.˜´H?Ø(õ­sâúXÓd9Eȵ$*ŠæL?m=ÒÁBÂgê¹4 Ò#ÈÔ©%«#Û÷[Äow¥„ºF¡Ð¦Î.+¶ÚbÃ;uô±ì_Ú¥ ›Xâ¬å HM35-ó>¯à*:‡Ð¥ â@*&GÑ«˜µØÌ*ñ½~¿:*%ÿüyÒì÷ jáÚD_6#eÄ’_Fl´óZ9[óusÛC‹¼¬³éÖË"£wÃúø{–u·ÍK´>þ«Í·yÖv†÷íí èÃáÀ_üÅ_ð·û·\]]ñ½ßû½¼ï}ïã-oyË7ô¾Q•aœì¤š ¸H–DËL©Ëè€êodÏD7ë$ÊHJuïñ!AÈá ÚXÇb¾AÜ3>¨oa“X8ǹlþåÕµXͼΠé ƒg·úeÿ0 œNLMû–Ò±mDkÕŽ^{ƒ´Îw)F . {AØTAZÜÜ—ZE ^ ˆ‘¤žk•«Øó5˜™)çÚÒHúÂÚ¨¢QÈ˧Z°c¦„˜Œ@-UôZïÂ,9-)ÅFg`. zÙ±¨G³%¤ïRÕË=†å7¸]QŸõ|ÝÝÐz´tNS¹½½býþ÷¿ŸýÑåCú›Í†OúÓ|øÃæÇ~ìÇøþïÿþ—ý¾ÓdßR îAöä¾@ëÙNØ¡\Ósä›E/¾¸Ÿ‹©ÔÉ= î[@*P„6 Q‹rÖâhv¶’ =¹=:Ô´©gåš‘YI'Ä ^'C  ¦¨Sü[‚4JΩ)`Ž+Ð5Ä5{=pˆfu¤ë–ŠíÛxáF‘;)ö‹Ì‘Õ‘w u¯PÕál;XJ¢.2ÒÓs*_¾Âü©`®>Y¬©ué±v­tmN9Oc$ª iJ£x§ç Þi>ùkÒ½BZ>žÊÅí^õ³OœX^®“[–—í ægo¯X@ÿÑý»ÝŽív À;Þñ>ð|Ãï'¥ß«‰Ý¦‡cê¹S­mpV®¸YÚ¹LAÐV 8¨£˜,î'«ì–jlAW 1ÐëhtèþZ v Ò©…Ô©ÆžÈ ªWDž0ñh°i÷Ä Œ +.@+Hlÿ¨ühIûf#„Øx{kˆ›¦ }Ì!j´sØÃøDW®Ao@wŠì+P»e/5I*}hh* ºÜð']ÒÑ“­Q¥,¢yy>Ôª½—œ….Ím‚ÌKáPŸx<Ï8ŽÙÈðöå°xòóš·ÕÅrz\:Voû·¼ •uõ²TÛÁÝ`¾­-}ui¯X@|×w}ögÆüÈð[¿õ[üæoþæ7üžq„qg€>ì <¹ö[öãdPÔʑnj\ ¹#©G›€vm€ÌNˆF¡jµ/´…¸‚i ºfúM•Š0+òškt¦ê€V»XD®Î/õéÏo—è%0u6ÙX´ г;” èbo¬ κé—0]0L+nâƒ*£ŸÉA…á1„—”æ%hžê;à Ho¿ã Ò¹%˜M•=6;E¥ÏC-B£†3v‡óuTׄ£v—†<­¦•ÓšµtßòSP¿kÛSÝ€'>[˽Ámû~ûw;õ¡Ÿ ]?WÖ/S=ž¿êÜàèŸú©Ÿâ¯þê¯øÜç>÷M{ÏqR†ˆÛš¯ á‰Ý²‡Þ \3ñ˜¨/2ò`„àÐâ&À¶AֺƼß(Ö§8œ×·èx Ó%7Ó{µh ° Ú!|â•n Ô¼\LÍ'ÿ9ò„IWL¬™Ø0iƒ°fv@¿ð -zÑÀ6 ëÆj‡`EtÙŽüW7æèƒŽ×Äñ O¦=»h¶µȨ _…æ«‚¾µ|×ü¶_ëîÇÇjû¸Üÿ«½½¢Ý4 ¿û»¿ËïýÞïñ±}웢 ÇÆk%ì¿í—¡yš+h ^ª{"WL¼ÈĆA·L4D]q Ö-ú\‹·ÍÞP¶¿QÐ)ÀÔ C€>;¾zø ä4½²ÿœ _yIÜ‚pÀÆ<$‡‹×öFžç¿LÌ+É*uˆÜ˜¹ž³x~Þ–Ê®$rh½¶BçÓ`MµÕ] -ëNç> hŸeݳ,ßG!ß¶î}îÕÝ^±€þÀ>ÀûÞ÷>^xáÞþö·óÑ~”ïþîïæû¾ïûžúúüãüÄOüÿãü~þçžÿøÿàÍo~3ýa‹|~âú_á?…ðu%Ü€ìËðŸþ¿ yÝ´tRt«¥_'éÔªÙ'm-VóZÃq'ßÓnš—Ѽu»Ìnƒô}æiù¾ÛݶOϲÿ·­{Úöw­ÿF·=·Ô^±€þ™Ÿù>ô¡ñ©O}Š#Ï?ÿÇÿðð–·¼…Ï~ö³¼ùÍoF¿þ­´ýíôŸûÓþ€N#ÄhsUD"*{4ô¨\¡¡aj¿@¿þ ×ÏšýÛÞïx¼þ¿ÁÃ[…5>&Ÿù¨ÄÆ :¶Ð¯a·EŸøÁ¾ì׿éMoâ3Ÿù ?øƒ?Èg>óÞô¦7ÙÿµæŸ?ûmìExk·ç»š ‘k=¡‡fDÖŠ¬£Í/ y.²z£rùæ/²yáEx´‡ß›×Ãêyè@³Ù€¶0Ø·ÈNÐ+—ùR€k¸ü7į¼ŽÿI_ ÈDvˆØç›Ã< 2æQ§Å J 6.”öùHø¶Y¿ñ lž‰þÑ.Þ›`õºKh7Ö:÷9ï( È(è rö×¾à?Âÿ·¡ýìX…ÏÑÈçyB="=„ˆÕ§N=‚)7p&¡«žBñ¼ª¦tuÒÏX­'ؽ„¿¶ÔÇ¿?”ËÛVåg3€·9½¾zîh»§<>Ú§;Ö-ןzþ®×ÞõšSħ½Ç»tn¯`@üÁüý× €ˆð—ù—ÏüÚw¿ûÝüÜÏýÿðÿÀóÏ?Ï›ßüfÖ‡çøÎ?ÂÿÅž­ü ü|™À× =þfeš(9_ëzŸW`{EúŸþéŸøÄ'>ñ²^{qqÁŸÿùŸ­ßÈŠ6<‡ð[Z‘’·&ÈA7Š<¼N7€¼voÂJy@dÛ¼ÄM÷E¤½„f Í [ƒP 6í½äE/ |Ú¯ž—5hä"t´¬hèh$x¼ÂˆH­× Ï ú‚Âë…ømöx < ž4_fê.¡k‘ÆhB@B€$¸ÓÎ-;A¯!²K«€œó³@óip^º:·½öå„@? Ô÷QçËù- .åJoißLþ n¯h@ò“Ÿäk_ûëõà›èF:¹@6× ¼H `…Hc z z©ÄG ¯SÓ&øÖÀZ&BØ£²³X³0˜%!&¯]<*v¹p­\0±EiT„ _® ììB!×@c'@#èZ Bx^¯…æ¥yÎð×`zvá ®!\ú¾Yq ÛÚ+ÂEõJM;±ý»šÐ'æA‡'‡Ùj¤AEYñ‚ט€F¬H~=åbz¤´eËŸ%(·iY|priiA‚ÎA]›îSjú8>ä¥|¤ïo¼¼Ïš\ø,À~ ŸÚož²\Ï—Ï/Û)‹/.À~fô¼½¢ý¶·½ßþíßþ¦¾gCK+[Z`MKà!Â%³‚Ábºôè#LMoRñwX­LŒ)¯Y¢ÄÁ¢&¤E¢ZÑ>zñèÈF••à'„– ­bœÚny!°@¢§€\ j®ý}rbþYݯ™¿¾’‡h#)çjÛú§Z.Ÿz|n¥½¢ýÉO~’÷¼ç=Ùâøã?þãoø=ƒ4¬dã h¹6ˆ!×ÎðF ÐàôŒ—6V?8Aº‘È”+Õ«QY“ÆŽÜIMI÷‘.*+Qÿ$´] ..\Ó¯OÍnÉû/@úëÄ\«’ ] ´L ©¬\ðúŸ¹ †ÓQš–Q‘!Â! ‡{…}Ãe-ÑG,À 4´V²†d±dsVü-ÅRÈ× [ô…0n XQö©–sT$k­óRì°É6‡$€j L9¯0ïH—/jkŸVùD0ŠJ g ZÔpWàÌʽ:AZ»E‘¤°3¨™Az ê l˜ùÑGGÐ)j-è§ èŽ“0FeœÈSúÙR©×úqªG•¡,óUŽCr-nuHž6qÇãå×®çËåSgëN¸FgPßÞ^±€þ¡ú¡ÿ-ïÛ4B·yÐ¥0ÓŸ-4²Yy¯›ú„#\WL3¨–ÚÅ*©ÐOº—TV år Çm¶WÒšÔK†+K вíÒo“:TDëŠÉå´”úP.:%?A‹œÕ­µÁYóE$o’~³6©}Y;˜WvqK€žÁÙ~ó”Å- ÍpfmA&Ññ«–T¶‡´®¢“õ*Uü{E{HçZI›‚ö:'®tÇI&ñÓX„Âè¥V¹eto©ÿœrz¹Î†ON ù¤•- ›b9°)žã#/`{hÏ~yí èÿ]­i [‹+B*ÝúÓšú]¯aí ºÓâ‹¢>J´º5¼¢6,–˜D°Mh6¬Ct£ÉV­ïý«)Ý/YI¯,³Ðâ¥%×~“Ùwªáœ.B¢]ú2… “¢SôИÚO߬Œ©m>·ÝqØw—¼Eegì˜Z Ë(ÄCzÌ 0ûv³ñ}k(s cSÑVr¿@xþøYÔ2 h³|¾Z'€ÌÝí›W,ôŒóÔ΀¾g AèÖâ8Z*A¥…¶ƒÍª±³ÛòTƒMD³‚^”‘´pªiŒJ’Pì=6+XO$½L£ê1L“Q+ ¬;Sòk`¥HÚŸV­Ó(ƒ¹ŒsÝú¿*Žpì#”h°‚F©Ãj‹ÝщCZÍ⨿ÍÇ Êõ…©€YýSÏš=eµÁe,2e qc°v½éY)Á‡IWÑ4ZÙ ][ª¦Šû( “Ú€{©@\M5¨GñXMµbžÙR–³·ìË3ÕÌ3ØÄ^Fß•î‘J®TôÒÌɰ]Z',Чõ弿܀3 ïÝBí:݈;=œµƒ®ƒ)hqöj£®ÈjâŒë¤•Æ «âéÊ'Zãíº-öFƒ¤ˆ12¤µR¼›U†sVÒæ †à¥rrƒÒy×gq¸hyœ?¿¯ž:ªNš¬dèJlW‚¿Sýnqq¨Á\W–Kã÷Mhˆy\ZY‘q10[ÖfL^Û6¡bºSpH‡Yç!‹NC!FµˆÆh£Žõj}ž Æ5˜Ošjän©–Y€Yæ@®Ç¨ŒRÆ< fy6_9Wä$„ŸŽÇg¨æÏÈ› Ìâën}Ý-€gþìWG;úž­i Û$ë‡YÊ„ qíïf.k IDATGòCW1ÃhdÕ]œÚjè%7C³‚vÖz_˜m¤vÚ0™ kAzQ&»Eh>•Ë…£aE·Ô½ZÓÎ8´‹*Û´xt*fføþ¶*45”—CPQ]U/ ¤ÁYmlZ³2’§¾…¸ÂZ‰³:’'-îIKZn­1Û~³2Nå%Ø |ê«É†*³iXL Ê ÚY1Wó4ÍóÜfí è{¶̃¶>??Ðê®»ÖqNÒÊNHƒ0µ(kDÖY_(úè• ÖŠ·&†çË{V‘Hƒ™Ö?<•m0_×ï{¥Ú·Ž1‡ëù>I1'TCéÄ’´Ü>+t­®lÛ×tÒbËi<¾zßѾ?ylÇ&:œÅ­ µ,MtÜx*ûF^¶5® Ô²2«#ƒÚUtlí#û(ì'e Ì Êfá ê°zQŸ›zñÁƒ«åQ„Ñ—kÏl êð8!Gž­‹ÀUHÉ|˜®òçÎ=š·rò6À¦í´zx—óü´å§y!§à\Kïs[¶3 ïÙšFèVRtn’-)þ«kÑM¥X[³8N)èŽ ¡²8Ô6öM¢) ÃÁ— W¥EAC6¬S˜]”Ô ÅâHå6³Š^ÑÍóCµËû·TÏD™eŸmZ·½UsK‡—ºÆBúPOÏ)oÕ fmûi5ÛfñhE·Àâ‚+iY«• Ùà?–ù-ꀎpˆÊ~‚Z1¾½CyïPžƒúxNLKK#×åóBQ“Ørôåôû[ÄŽäžI­Š†˜s Ò ÆOmz‹R¾ªR~ÿÔAZ.¢§\¯“| éÑvõ~È|Ÿ²¨Ð£—œ›µ3 ïÙB€•w–8%¿e×V+d#% S(*5™+ÖLVQ`è±2·7š• ¸’¢÷Ì.0è%ÐÙHÛn„¤ Õ#tfqÄlq8 5){7wsæ u­´ƒÛ8¨õ@˱»¢ö.èÄœòZß.8¾^W6‚l­¶¶nÔ­ A·jéêfu°¶Bôï,îG'‹£°›|ŒZ}€ U{,K½€t°(Ž%¤kß9ÁzZLQÄB'}ÒºW2Iaa±œS=^,çvJkµ¾šgXŸ€4·<7›ë|1}Ö2vïÄ®Ý)ÐË8µòUÙ΀¾g tkƒcQ•Ñy,\ò ¢*>$½jÕ!·¦ñ± èè„þyê zÕY*v‰Ž°·.€Kç—ïKS]Én‹!nJaRõ"f=4¬‡´&­I=Ë,rÃÀ\)h…mÕ< ËL¼«¸o?ùuN|n²M€¢­¨·jš[ K%ºš¶±Û wj†F¸™ÔÊV;”wAÙ)Ì{öÁ½¯lŽƒÛfo˜1$kÍ`NJyˆ ÄG¡Ë¹+ä:K&ƒš«J_œ{c Î%|Sj£B)ÔQm_¿¾þCÆêª{26OÊúånÔó»–ïZwnÀÐ÷n!xGt²8<zÕº±Î¬ÊR0ŒÛhà![„ÙBH~²%î¯;ØKè®-Ù †ÚnѦêUÌ–Š´VÝ-R<5H§í5êS†´¤‹‡ “TX³šN×ë ¬ÔsVÐj–Œâ º@ZКÔtló&ÂÖ¡ìæ".A/./‹â ¶(ŽƒÂM„ë Üh iaa„ª•9¡¢ï²8Æ ÈñT õQ Ÿ,–ý‡sÕ,þ×(fâe‘h¡@8ÁyfU1ìqT$º•ý5Ïšrø4q]ÏyÆÇÏúÜ«°}Ï܃nQDÍEÔº“pmY„RQôTG‡°bc ÔÖ¦š,Ž*Y%¸<wº¿êä$4Ék¨)I¬Ôs=È©]<„.:]4:T½³p YøÚ$™ªV„o£jC,*lbá'´ªˆÝ­ ÊK»C'66‚nƒÙxQƒYЋˆ\šzÖKþBa‹Ù+‹Ì¸‰pܨùÚ—wåë¹=‡ôAªÐºCF& è,—ü΂ÝI@räEecˆäa¼¨'(ðMË5”QóÅÙƒ\=É—'˜WO‚YodÊ×ÅsGB[üóÏqežaý¹ÍÚÐ÷lM°dÁâýR%«´°­bëÞ±<öÁ°%°JJU„!NÜëNÍ9Y¼u†Ù¬ÔX€¶1%¿4­ZgUt9ÛZZµ:ZƒZ<š9)èÊ{®±iaS©g›´ØßQtÌ ¶it`Wë`Ó·Šn£Aø2Â…ó¨þXDÂ…Â¥ûÒ+SÆ7×(7 ×®pØb*z¯f{쓊v›Ãê> }TÔHPní®B Iöc`–ý>³8”“uÊoUŽU³–¿s†¯§7NуªµŠÛ3 KÕ™›ËÝ=­zÒÎËeë—ër«<és{Yí è{6 ”(ŽY¡\µX¯r:u¦heqˆ¤(ŽÆ´wÄ¥¶äéÂ,@dÓ ëf® Íf±“¶X‹ƒUW”|õ"mÔ’!´;ùÏ8§ŽÂ¤ Õ4“«çZM+l[SÏ¥ò %{Ñæ™â☡,•¢VÌp¿h\GäBà"ºáRˈ^— ¢©é•AøZlˆÄk„+U®k5«ã:+gÛv' /z¦œ…!¢¶;sŠÕ“‘u-YQ×`®-*‹£²1òTÙ;J­æÇ£Ã8ÍgyâQI<ROí¨á\ùÇ·í žWêÙv°z,Õ†•ó ´3ÒK;úž­ B»*´Ñ{ò‚û¾«”E¨^b¢ñ%º5@km'XˆzÞ”¼¿/–NÂÖUiRU³‹E~%Ì.uµ¸[Yv*.Ô³{Лì?˜çß6­d8o\=×^t«±‚òaB“jŽE=K¶Á`œí Ÿ;œmr‰AúÄMd‡rM9'(_©=¾Òbq\kÕa¨Þaè*ú¡—À +e©rÇk0¥&JpX/½gŽáœˆX+ãTìcÄ,Uî89LD*‡èdU¥e‰»ÛÔò)ûªNçû"síû>tig@ß³…¦¶8˜GN„ªcΓT´(–˜aç¤z'áÊ (I©z›ÚÒ2\ÓºK–xÈš§´Ìzéü\’ÆÂ)вª^4¶OµݲFdƒ.,e…Æ@m«§{'@7²•Î¥³Ð>^ Âaœ©hq`kpEÍhjÿÒí ÍVR”´+g.y Œ[á኉ë \S œ§`óï0,öÎBq0‡Õšƒ¯Wæé*ãE$xôÍR=;˜ER–ŸûÍŠsR¯ÀäS?Á2 z\-^¢[ò]̼€sÕ|Tâ.)å´âáŒéÏo¢@fx”*Æþî¦w@Wý½ÎP¾;úDûüç?ϯÿú¯³^¯¹¹¹áÃþ0]×vÎe=;¸„]¯ŽbŽsÁJ,tëálG¡l¹“MK‰NN¬õLÂÜ1ä/u…¶éf„êþsb—³ I—kBVõeß”Ž8˜„˜Ôó,ÕÛÔó6ÎÕsõ*Z棄!ÃY£ƒ:T #ˆ¢Áã›.’½!¨ûÌfoØ\D¦­ùÉW€¯eâ*(Wno<Áüç«JE_»½q£°a„AûîjE=DV¨RKèÐØ!Ò¡¡3ßyé?KSu VÊÙƒeòaB† õÐʳÀj˜§$ÊÂÖ`äYµ~2œO~¤Çµ.ÕÿåË6­Vko{Õ]hNð®/ §\ùWk;úD{ÃÞÀG>òÞÿþ÷óÏÿüÏ|Ï÷|àav+¡©ïí3 dÝy¾ Î`µ—-¥z=Ï"”y t7šNÙÈ<é£U9î tÓZ«,ÂdËJQï L©ÅJJ¹N㮳ªÏÊ9yÐQæêÙýg —U¶­Emäޤž#¬ƒš½¡è8 ¡øÐªIYOõrÑÀe@/“aö†¸Š6EmSÜZGß5èk' W2ñ$(O´Âu?Z­ÓðÚm^&õqÁtcª9¤|òª°G]/´HlÑÐ@L`n*(‹…²MXvËa‚Ã蕘ä¸êÒ,%±ž¨2^(ó fò”®·’àŒu C2*}.Ï®ÓqüßeM”mn\pz ¿ËÔïSÛœú„sKíUèïøŽïàŸøÄÑú¿ÿû¿çãÿ8ú§:[}xÌß|êÿáBGÞþú×ñ¶×¿¦ºi3¥ê ŒRÔ”[Öieoäxã°°8(þsÐYÕP ±K1TZδkgê¹ûH!vÒYAw´É{–…Å15 8“=è•®)ýx…M¬Bí¢%¨Œ$¹ö]AK£pÑ •jž[ Ò6õ8ãpF¸ž¸’~"‘—ÂnDö#šzöÑ•³Ti‰ÁŠ‚,‹y Ìë“FQ|´ï¤­‚¢R¦qoÒÒm~rš–f„=_ç’Lêb)y&iÛåtLŸ‚siw©år‰(ÿŸÚÐ'Ú[ßúV¾ò•¯œ|Î,ŽÔîl’º«®$…´ZJJeq 4ËØ›IJ!viKr˜ÝºõŽ6ti« ·ôDÌÞÐ…½A«VÅNæê9•AmØØ.ÔóЍEpÌô<‚cÓj ¯‹R¢8¢² ¸jî}^AÙ´„Á‚º/[·3<Îù–ÎÁqSÁ¸ÉÉâ0«©éÇDnBàÐKD/Q½t{c‹ª•Ä3«Ãj™JðHޏšûÏQAÑ›7²St'uî8²Ì笜k{#‘5™J®”ƒ«äÈae`^UV¬‹¥ž¥Bê1#1÷PD殡¼õéOª|¬ÙY¼îÜ–í è{6»ÃÍùy\Âu­ 1õ\Ù"V±0;©Ò©Sh'½'¬[õBÉÜoTsˆæEѺ­T4ûÏÖ¿TU¢${Cн¡kTV~ñ0ÿ9ÖñÏ“fHǨ´¶ÿ¼u]üg±èØCPŸ›z6%­a¢y÷— rÂÊ” r)ÄpÂ$ålö†=·9Jgá‡ôNZư}ˆÇç9¤/ŠŠ[r'aܸ½±6ßy²N\9€ÞLp= –K¾ γ²x®¢û`žt.‰W¢6‚ûÉa27*å2 b£­ë\/«ärÔÇCºv§ rº‡ŠDT¬öI¬ÆØ‘:XZŠ 6Ÿ8Z6¿»Jš: Þ3ŒïÓ΀¾g“MRÐxX›ŠÝò®º*½û8‚ð1 ;fÕâhQmL©jÒ´öŠÐ˜««rŠ·x%¸-'&ñ×m ùÈ– ÿYŠv 4%AÅtLéÝS@G!Ž:WÏnolZ<¼NYGØ©êp(M ÊqÈav÷ãhêù¢Es†`°D”‹ˆ^L%kp }g0¾Á:o4)i±ÌA%CÚ|èÿŸ½7w’dÛê5¿µ·Ç˜‘YuAÇÀ kh…¿¡[xOABA T PÞS  d̤k†Ä9U•C䓯ÕÂZ{ðȬ{oZê»Ì{DzDÆ©ÚþÅÏ{ ÆAæ+WhÞ`\m G–‹­[ÇÂàÒUtvZÔ“t8<+¢9Eq‹½Ô·'¼rRQÏc§ž{{£)eCÌ17%µ…麫€~›1ø ]+´»Á:zËôç0¿@ãp@[›MцPÏ´ÂèîAç h·62Fª!v ÒFÊgaÕÖ⟥/„­HR1ÏüçQÞªgWO³–âms4ÐâõŸ[ü³vñÏ:¢z]X‹d5spau„tïùPa-âÙƒ^R4!Qð¨YЬ[J÷¸ˆ¨ įHXQ.”²Xè^´²"ɹ”¸«êyƒÉ5f×d6l®QÙx¶à3ÈÈݟà!{èÇ6#†=&ÏpyJÔ<ñ—„¼ö’ȇÄ0&æšX ,hÈ˜á¶Æ,€¹zÞºz–mÆž yÊØ³‘_³Sb©Ê’T·æ…$f–˜˜‡°92‰,J25œ9¢²çd;`²s(³ý±ÛŸ)g9E¸elâ>³ÓØê¾o©å¥O­ÎåféæiL©úŸnmboòÚÝß×ü ß{|>.€þÆ14ÔŽâ=‡zfM×Í;:§PtY 5N³¶gƒ×Qî]¼»µQ»ŠÇç°yf0]Âë:õ\ê@ƒ‘(ñØI¦Õët½ÊYÁÔ¼a8‘Þ=ñžÝæpwê9{ôÆè~ç:C€¹·4X;¤Ç©Û!Í{6ºÇQleNŠP:©‹‚לÂoÎvCSÒ70^ÁS ?÷0Þgäΰ‡€ôÖ܃Þú"¡SÏâUÿ„’¾HÞxRzºU;­[¯”á-œË¾L)í¶ Œ9SÍïù½îXçžóÏ7¹/ø.ãèo‰R£ZRj veЧZY L‘EêY¼ød0 %¥Ô•¥©ç’AHØu-&¢HútC‰…Ê¢œK‚Šñ’§çʹ.6 §¯3s,‡–ÊÝ'¦ôêÙcž£sJÉ´“ÿݬ‡.J£øÍ©zѧ¹†µáÑ;„…š–PÑGDV¤º xÕ \!í‹È ìØ£ï À„|gpv'ê»ä>ôƒ![#='–ÇÌÚŒ+K\‘Y‰±6Oë)öFñŸg’˜[f&Ê` ᄲgä…“¼`öŒòJ 8'v$ö(û¶—C¨èÎÖ¯ö'ÉÕkxlt²¦”{õ µ_@ÏìåR.v,@Ö.¯°³0ÞM_ÞˆŠ©bnQIoÆÏ5½/€.ãèo*¹Ü·™xíLKNñ†…œOÛdŠzŽÖ±U=Wæ{Ìë]”ÏÌzפ«Cí›?Žðº.1¥uOétŸ b9;å,~snšÑRs#@bp–ÜY{ÃÜw^ÄÏšz>ÖvVh©X§°ÈÞ %â›Y¥h «ÖÆ!¬iÜü‡÷l®œwÉ`‹ÈÜ 6UΞ”rS!m¯sx»»7ò=p/Ø‘ïÀn½s8³ÍÌ^A¸’ÄÚkBA“XJbaÍÞ(‘‚¡ì8ñÌIžQ{&ñÛk@z‡Ê©Ê¹©çÄÑ“NE²¶²Óç]µÎ¡,âꚘ‚Ò¹Ëu꣣F¬‡•úÿ‘>>­‹r~èN%×Ù=m³êÎ.ž|ÙýXÇÐß:@ ¨×ti›é섘¦ÞÑ;Ç"a„×Y‰.ÀP]iö¶™Ó’ÞæˆÏå~H],ýÎ:Y H2 ç]»;õœÞio•ñµ½¥xbÊ\Ã' ZÎme/0—yZ,íVRÚ›‡–øçiÿAZ¸GgoHgo¨Mýðt¶(ˆ еk7“¶V3ñâH5ƒ\KŒ¶Ò ÓÎoŽcÑXô¸¼H=4$ÂéX:s•\”s©@q”Ñsè,¡Y–`kóW,9ÌZ;•¢žËqÛž = ó1®ÂÎØ¯ n2ܘpcÆÆFfǫ̈·ÀL¾ vG’;²ÝcrÚ–,h¨g•gÒ°'­”ìe¦C=Ç~ÞÙ3s0—ˆ ¿±âp^OÆ+Þ4|—`¯Â>{íûÎ Çd­,6Ù&Óg&vÍù–7p®‹{½=Q2YŠa]Ã=xÎmB{-ëÎýºüÂìn\ý3ÆŸüÉŸðOÿôOüýßÿ}{RÊ&NÓl©ç&E¢”d±6¤,JX6±8ª on­æ†v‰*xŠy_:^`}ö$9%‘&u@úÈ éÀlÕêÎR:h…½¡pvuŽÑª„ÕE_¬¤0$dIµ3¼²’ ÁæÊ)OíŒÂÑJª†2 ˆ•¨ ï|"¬'É)Wpœ#Ï0éyÕ°Ó‹× Ùdó䪞Í*˜o²±²=ɶ`w$»#ñ…d·amL´±EÓš_É+E¯Œ´ÒÊHk·5òBÐ…‘ç‚Κ½!^Ðv'áùd¼$‡²wÐvjµ½á>ÁÑ„£ÏY8”U…ô"q§PöBI­Ñ{ͽ¹\ ;”'AÒx/€ª¤i“·*éÎ{†Ö¥»„Î~éäøè6.€þÊøÇüG~ý×ú§zó3‰»BËEAã³PJƒúvoè<÷²’nq¸RTÊÞ@ÄÜÞI@µ{J«h†”ÅÁ¨?]»¸0µ8ªz–(uÚ[dèÕsm*qÙ9MkRÏD걔毥Ya(g“¸j—9ì u(/4V%Ô³NÔsµy‚3ÌȲBX¹‚–+¤tI)Ça/€îÀ\»Ç:¤ó«w~¹ÊÑË„ Æ&À| ÕÚ¸6ea;HwXºƒt‡¤[òx‹q‹q‡qÞó=–ÑôD^Ð+C¯¼­F£ð¼ ½èÕ³ƒÙ’{Å/'á)Àü*Þw'é¶´‡ä ƒGSN&aO â÷R CULŠtÄ\–¢pö(™,=”û•Eëöç–F¯4˜,)Æã_lü¢çýÆÐ?ýéOùƒ?øƒÉs¿÷{¿Ç¿üË¿ðgögüõ_ÿõôÕƒÆkpT{C¦ÞsUÏLüg ÿYÞ±8’HRmé*ÄËÉe/-z#{ݲH©Ë}î`±7έ ·[*œ»@ñ.^â~s…´B6uål£§qK„Èè~ù°EøÍQ¨C Eg±Xqå\+Oˆs²-‘£]!þ³]1ž–N³gC¼rtܦAúò«°JÆ:ûããÊàš±qƒqmÆ•ìì³;Äî0»EìÖÕ³~qõ,wî=§GÒrO¾Rty#èÚ°µïu)¤¥¹êy Ë«üt‚ç“÷(Z^³ðªÆkö¡œw½­‘£&¯å"}ªaB$7kƒ38×eÒYK/<€Í£wΔsß^-âò\QwöÅ/åé9—ñõñ£ô¯ýÚ¯M- àoÿöoÙn·üÑýÿþïÿÎ?üÃ?ð;¿ó;<<>ð¿ÿŸ¿ùßøu~óÿüõ^êú-dQÑ„ÿlUE{# Hð7“d±‰û 1m*‡ò‚Ô¤vñBr)+ÚÔs)Yl––ÉèjÞ½gycm{#Ú,23©O@Ñh³p®^t¨gYºb®Êy.Ø\­v†7s /5žó¶ªsPÎi$z²Ft ;©`–ÒRåE ;Î{óamÆF:ï·8® ®•Höˆy‰;Jz¡Øm@ú É>“¹E国 W'ìô²'5¢¡ž‹ÿÜ«gͯüt„Çc´:LÂK2ž“ð"æ¥TÃâ(Êù˜Ç$^§[J°tç,Ý›­A7b†Õ4C¦~-½°ªæ°8bÞ6/Ù& –úßâqSûë6†/fwÔ¿ àèwÇïþîïò»¿û»üÇüG…3À‡›þÇÿý9ˆÂ;¬ö†ÕS4T(pŽÚBÀ¹ƒ4o;æöáuÕæÀk!x6Ë #ÄoRwCŠèÏÕÖ Âý* «rîU½‡ûõL•°»µªåÖ+ŠÅ›aC ù¦œç†ÍŠR>WÎêQ%Da²B,Ûã¸Bv ^@^ ^a| 0õüb {X%a5nk\ᛈØð‘{Ä0»Gªzv0;¨¿€}vHË=yµÃ® ½»Ý€m½2rQÏ+!/ ]ÇÁØ‹ðx4OÂ6YxR«Ê¹ïA»‹í˜2Ç䆃yæmeµÜùÍ¡œ¥,B³ÆJšá)B>úþ²£`%Hz ˜vé…¢MôÉùþü¸ï#·Àº”ðöñ+ïñc@ÿœñw÷woŸ¬ÑT{£¶9[ø^9‹?6Kg¬ž]3ÆC¹¦°7¤’œº—.½ÜÊŠb’°7zk£·7¼¼©WÐ{ çjsÇ>‰0OgÖ†tMk5BéL§ ež¨æX]„¹û¦È'Üê8…rçO²[!,]=KDpX(çCB^!ú`d'ÇáÙ÷á¶Æ&,/H*\Ù‰¹½b^ì&ÖÆ̾ø^n‘Å–´:?˜oÄA}p¾]‡÷¼‚ãÌCáOðpôJ¦ ±ªÖ†«è×$ìRæ”’×II3sÜk.ê¹WÍ’|¨4Å:ªÇàÇ0]¥Ó™jæ ”Å‰0Ñs¥|â©j.w‘磟‘Å+áýe”qô·Ž"!Rr`¦ö\›rm¢¦óþ³IÇÛ2í!‰5ÖŽI…ri&4—*¹Ò¯Ù(&˧iöFŸÉhzè.Ô:‡ÅíÖFëì’Í:¯y PÇ‹E£O—…jVl.Î:¥\”³9œFñÅ®ÄX"p®êy¶DŽì@vÀ«+èñUÖ¯Âp4¯bš…5V–¹2ÓÁÝ{^Ù)üæ-Â}¨gÐÀnA]9 _°|Ì^±+C®3éÆÈ7 7ç¼1t#¾@¸‚㎃ñ4 ÷Gã^…‡llUØfãQ…§d÷Bн‘™JíÔ 4¹÷Ü>Oª–ÆY©Ónq³ê=Kç=·ðj‰†µµXG€Z=æÙ«;4š2W˜KÀÙšz/e4¢uBdî )¶ìÔ³ƒ[!§²w•,¯¨C5{¡h†£÷K\™SÄÕ3]䰲ɞÀ0¯ ôÆÚ»ÅäæO°<âE:<ÕPn”ôa$‡ÿl÷žÇœf.èïŽpkчVá!”ó6öÏêÛK)sLV¥Hšc^I©ªfIK9òÁSØ'‹üïì­¥Ör–ÿ`6» ˆ Å„;óÊÒvÅvãí^ºÇoó× |t?.€þCÎ&ígmzýÑ"7Χzoo¤žûVÎTJmú£y!©ù!&p0KÈm {£†øe¼¿tšDleù—ìK˜i¶ 誚Òa Ãf¡šÒÌ”1 'Ó®å©"Œnª“¼O8ÈÒ¡\|hVÈpÞዃ»€ò+f ÇhÇ•U€¹$‡—È °à@²gàãÁÕ³·U™Zr¬^±µ"›Œ]r­ØM´‘o»6l#ænQ܌ۓp§p§çl<¨ð¨Æ6¹z~JÂ! ó€Õl–>“%âñòà¾s-Ô·k'óÀèÝÉá¼÷SÚ,Øä$X¤Š É\5§˜¡‚Õ[ŽyG=7ÝÛÃX'û󭺿Bú+¥ý´º @ë(ƒ´sâNqZ«8wr&½¿8”û’…ûE9÷êÅzï»SÐo5‹„u’*˜%z &¯¤ô&¬ŽPÏC’Ú  ´tP–ðŸ+¨»ñ‚X@Zs9TóɦFÙæ¡š¾—USÒ6GŽ öÀÎÜÞØ QæÙA> 1VÙóVžîŠù*l9G„'Ì«%…ïüp¶@xùæ¸d3`5ÜC‘†}ð}ú`°6ösWÈŸðÅàVá.w€kc«¾0¸×û<Ãt!î!yéÜÕsñKÔ†D6ËAáõ»1þ>Û ì9êYŽ‚œ …4•<ݦÊ2¶“Rj}Ž~]£´oÁÑÓÙW‚=©Ý­ñè2N[ys}]]ÇÐß:ܘØU\Ô»¢Ã¬tñž;{ج7V8‚ŸyÐ’š½aɺ8xçr«š)UôLŠî%%¥ªçbsøg©ÅšLZq¼šÞg´D€Yêüf‹î.‚ Ê(Åk-êwÙ&ñw5#IÀÙ Ô²DtŽ’«å=È^æ½À†“g7®²ƒÙëâ?‡zfv *'!¶ÅØ:˜é Í2Á£«fùp[ãÚ°…æÛGã¸Vž²ñYÏGá³_T¸Uã΄{uÿy«® _sf?ΰ¼]#y…éÑ%6-sײYHaa¼œ—öšb5/Ôt_Aé$äÑ=ç3a æ"#âHÓì?m0# îlki…”¢©b.s¹¼åWè+_9þ‘  ÈX 5=ußÚì*“¾®ƒ›ÔÚužv¬Ÿ‚:]®•²¯Ù‹ÖY--Þ¹yá~{CJÜ3)ÑÒÖr_$²Ç¥e»zŽxì3@÷Ó–†Í´ØU=cn•báåEä‰ÞˆÂe €¶%b 8檖e²§©ç¤#Ì–Ù¨i-rî? sv˜=QºøÂ ×pöýÈ#,÷Ýw5`C6Ö†ÃY>(öÁÐkc·R’òŌϣ:¤η&Ü©qþó“fö:gÔ ›€ó:¬•ƒ9/@ççî7“±“9ˆŸOÈË{‘H3L“4C9(öFi4’Öñ7ªÙç˜ÏǶøçÃç‘¢ŒcÝK§œ‹jžîcöIy—˜º¿|'çéûçüÇÐß: I'ê¹qzÚ™Ýר­Ãª]‚B¨‹/å½ËKâÄ’b_†ûáU·Äkû™I ƒSñ#ñ»­ON¬[ê¼çbs´È \r— þQYÏf† ÖÙ¼˜)#ˆú'”9ÊlöÆÂ³€1»z94åÌÁÕs:3JF¹°¤yMñŸa`gã³úÂà¹Åq¯Â./8é Ó ¢L¯Î+$rÁMˆÎ±4w0 ^žNžÕòœ¼ Á«B§žeŸ0Ï'Ÿ”¤Þ~k0¯å©r~ÿOÁ«¡2¢æåý¥€ÙÃC(÷iSk#¾åË\í¦xu+ú㳋dò¼½sÎ|\ýÍ£À¹Aú|R5=R<èæƒ·¢ž+B3AÊBÍœ+¤;‰]ÒËSï=‡Å0ÄRUÎ5Ì©®I Bç=g‹Xé:¹œm¥ü© 2 ùˆÖ[ †&ãdùÞ‚Ëש já¦9°@dšƒYX :CŽe9¸r–ƒÀÁ§ ‹T”3,;0;¤•ðäêyxBxÂxBìÉamX~†Ùˆ¬v58˜¯¬¥Þø¦×Æ~il³qkÆ-ÊŒ/b|Æø”/¡žoÕxæìu…é5äë gO5,i†+Ð’î5—¶'x<"Ï {JÈKÂ^òš±W-åíƒO‰¬Ê`‰Á×Þ‰ŒV0ç3Cê\QÔü'–m˜ë±[ÍWPqÒíßùL1—ãíK æúø2ê¸ú‡ŒÎoÕs¹µ+¨-öÓÙ÷sû„€‰r.¯+Uó¤Éí~bw®I\Œí×,ÔtQÐ=œ­­9º½-µu* éýbQ°ÉZÀè4`É¢`|\ê¦4 æΓÍæM5K(hE˜QôØ\ñX޾€9OR·óXiÞó#s{{Fò3Æðì¶'Dž±a‡Ì [{å~¯^ªgÖ†1^/sãA”;3¾„zþ,ÆgS>‹ò)Ÿ³ro‰.õn@o</y%Ñ+WÏþó8ÇŽ†<)lØäQ1ÏïŠt´4CÙ'fc"kb¦ž?CÉ$”,©‘(êéT©œ[Ä«H˜Oñ¯5µ6¼RéT)OŽË”í.‰7ê¹Ù¦ó¶/+}>.€þÖ1QÏ Îçp$l…¶" bg³¯wKÒä̶¹9WÏœ:QU(¹QO”T½çs]>G—óRA]Õsë  4Ôs 0[s1%1š£B=˳9î"û¦6ó,·®œao@ކœ\¤/’°ÀÕóR$‚ñÔkp8ó¼`^â! mq,{è[eäÊ(ÕK'‹‚ׯim¿g¼ @ÿQ™+ÝäjˆnÁJ_ó{êÙ ÷í( VË{çEÚ>A±6ºêy´"ME¾ÔäDéZ+Ê™÷\Á¬˜ùí­g6Ä‹õY4™ù›8Ÿ* ÝÖP‰Ø‹bHÌ0q‹Ãl6GŠï|-ʹn ®œ‹²Ä¼nk,±°5^0/ÌTH¿Äñ Ì^u‘µ[®žÛ nŒýÂxLÖàL³6>c|Fù„qKâY6Œi|ýèpÖȰq›C»JJ»€ïÝ »?!Š=$d›°Ç„<úÏ-Ôs Å<×äµ¹IÑò×·¦œÉÎÿnÊ‘Q`{ÌËTMáÝ×=]¨ùÎ& ©AÙD<#°(å‰r.¡Íñ ãs(‹×A¯JC9÷sø2|\ý­£WÐÀT;—£na°Àú\"tʹÁ¹ÏnÆÆï”Îr6ééOïRËÏ^Тö$’.r¯j"“±¥q—ÌÆV¬‰È'¬ Å:@fƒé{!“dÊÙ{# sTF”'vXk‹Û¹r{CüöJRQÍtpîöL-Œ2ïJKÂ(çÑ:b1µ/ÞSÌ6¹†.˜.ãèo-t®¨VùÚYLà[?õŠ•<å½õÚ‰çq×]öbÿ¦þ›;0÷êù<Ñ+ÎwkÛš)RàÌ™R|È,“jš4«Mhgm¨¨Hs';~›k>“؜Ҽ!'AOæöF@YN‚œ G'—y†…xRJôªWÎò ã+i† Ò¯;l1Â"!ëì•KWæ]c½I ¶1Ƶñœœï¥Y·ÕÚPnEØÙ&Wd»Æäµ(°´è5¦×çÈ݈}Žð[Ïb‘{ÅÂÚØŽÈ“Gk,ÊB•¥e–48÷êyÄ`‰î¾rb”£í1v$vhk&Ö69"¶FRHÚ:b%|11Ù(Oö4 ÷UI•iéè¯ ‰·×N¹.€.ãè8ú:»Ö¥Nm ™LÁÞ¹( )ýzc­\7QÏÖNîdÚ„·±+l§öÇôuèÔ³DÚζZí®‹z–˜. ÖÔûα¬½Í µÛråŒDw`Œ‚>G²ž N 'H£¾y2x܇§²4{#sÂS }sÅüÚŽåÕ;»,¶Ì°²Z^:zÑbã´tKckà:ÜÞp8»ÅñcËÀ‰%ÂÙ —bÜ0ð•(?Aò ¦7ÈË »Uø|‚Ïø¢È­bwŠÜœÎÏ™ÅQYމ5‰%™¥( Kgê91B1å•Ñüÿ[Ù;œeO²=Æ“#fQEF$«+å ’K#¤ÍÏe·' ”Gúf+‚Ú; ßzno&‡ÏÍë÷DÏs\ý­£X½ß&Ý„ª+'ÓðÿÎýÛô6Ç”æEIwê9Câå IDATMO~£3j9ÓþEoìöy&US!VüÏiÞ-&:ÃÚ¢¢Xd!·À¬’Ú (†ÈÞséêâ!vf3L3œð ku/‘¢ì_ 3ñnâ 1B¨gWΙ#p¶V Ãsö‚fk¬ [e¨p6XÇ…ñ(F$ó@ñžé,x±%&+’mÜÒ°kLnP»Aå#ƒ}Då'7Ø“À§|:"Ÿ û2 _ηŠE%yT滵*kSÖâû…(KK,$3G™›V0‹(£í9É Øs€ù•ÄŽ$;Ìö$ï•Þ”s‘èÀS;d•.Yr¾‰GlÄV‹ ¥Zþ­nX‚ß½•Ižµ2óeœ  èè¡ TmÒ÷MZ‹NOügšHnoÕÙ½zŽ“‹bö/‰v\Õ³¼…ók#~gï=7ÍÝÔ³õpž­fòbV[£µ\3ßR˜.3D”³°50\%ŸÀB5Ps²yá¦Q^Z]9»ÿ ƒŒxüÝØO \!½–ÉÕóÊÒ®š½Ì´±Ÿ9œm ç{Üâ¸7c+‰ƒÍHrE¶ *›7pVûè~^b÷ ûlØ÷ ß+öY‘ÏŠÝÕÞà^™¿(W:²¶Ä†ÌeÍèê D­¶† Œ²ãd6¨<“x!ñJ’j¯f÷ž“Ñ\ÀL·ï,bkô!t1KW¬‘VBú«- ët+·—e–× ç+Çý¸¤–qô7—ç‘M1÷ޚЛ%@¿ªgë9Åçµ·s¸듦È{áኸ7ªKáÈî15ßÚš÷\.³Ò%…ø’ðj¥8[î•xƒZ+­ãñÞj+1Çd@m Ù@$­a'Г8¨='œl0KR æÒ¢7#pnPv(YÛ»ˆg/Ž·´ÒE‹hθ2vCæ Øbl¶æþóƒ58?KFmI–5jlç˜|Àì¦×ØvÀ¾€~ýú)cŸä³aŸn¹ÍÈVÙ¨²Ñ‘kËlP‡³(+skÃÕ³[IŒ¯œìxBy"É3Ù^Py!ÙÎ!pNé@ÊŠFâß)Ú¦…ñ&½eiP>YëŠu’Ö k4i­Õâ¹:-Mæ̽zþªj¶¯<ÿã@ÿà1‘¼Ýs}x“ wÍô°ê^Ô3‹ßÜ¿esbbXÿ,õÜzÆ;×+Gº7n@~ëXw¶FGôZ÷ã Τºté Qï,”•T0·zÔU=k)ϨcíQ"IñÆ,j% œЇwå¼9`laïMk ñΔ.ZØÚï’§¯<f^J)à¼÷¢w2[‘å µ+4z²×(70>¢»zŸÐ[C?ÃðÉÐÏ‚~Ÿá“âyànq¬7¦Ü˜rMf#ÊÆ œ••”¨ eàÈ‘Nl11yDí‰ÄS(çPÏÅÞHGÒLÑ™ƒÙ«” 2)ƒ•B[’$Z³µ,'õ¿Y‡³DÂQó™j®à•nf÷€Ž9üx|ý¦dzÁ\ÆÐ?h¥qöD_I×'ÛÙ"aåx¤²X·Ž-g'õp.uå­u¿Ç(_ }ìu¯ž+ûÃh\hÖö¿¹Üj–ϷĤXLÅ{n¹f íßmŒ檤-c§óhX4×’ Y¬•ø JK‡rž¡ˆAö˜DqŽØªz^2Onoxxƒôl /b<‘y2ôSX^±ÃxB8ÊŠdkr.5®°Îwì³kôi@oAo û,ØC?Aþô{¿ËØgeñ¤|ÐÌS>0pƒ²‘\á|eÊ eIfÆ‘“¼r²{L¼±€Ê#jdž‹µ!/d{Eó™)in¤™‘fP:d9˜™tÈ*ܬ]±À;݈µÚþc‚ql X<Œ®¬Véó]¦wgJ›ã_ËXyïüñ¸úŒ^¹¶ñŽzn/ð3Š ¨ÖFéõ`./¨B¸³8ÚI4™]쯦VÅáLÕÙ}@Þyã?$·MBM÷pî•´…„âÕ“¨JÚR­\êþ³`£¡íí¶$ÀˉÔ€p)@öp“’ ¾Gæ‚ÍQ/ìØÖ†-3/O–yžžÌOOf¼HBmÎPº‰s…ÙUgm\cvƒרV¼;Ö­a_ûìp> ö½aß ú_‰§ÌOLù ÄÕód66pUì ”¹œPÛqo¿¥Ü“ØÆöHæ•g2Ïî7çi`^:ƒÖ!KÐlѾPHÉÐì÷ÇÑ;†L8”'m ¥4^ KÚâUÎEAŸGftWÌ$k¥šÕ¤Ï/§Ë.€þö!ï?xÏVûª "ÊՇ¦ÝíM½guÃfoqL¿úúõ|öJ”´¿ª,ZÛ··n…:JË— ]\Êínß0 ¥šHmX[Õ êé…¤R½tïöÇ;Ï’GnÌ4îë 7|Táã˜ùhÊ(768ö%33å(÷í3ʲܡvÇ ÷¨= ²e´GOä¼Cc4btaµCVß°´.D„Ãh¥ ¯5¨dZßÿP3Œ5ïÌéÒ Å¤rµ¿]³Z¾åMÖJQÏØ›iVfõ%†£  ßÿõ_ÿÅ_ýÕ_ñ[¿õ[¤”¸¹¹9;ã\Ëä¹*†í=djuÔ÷¨¼µz¢t)†}æbjéÀ<ý’hŸcR‰·‹ƒ%Aæ¼õ@õCºšKeëc_' 6&pž„}Ô`iñ¢¢ãr)í‘Ä»ˆÍY€,#¦]aó-éS ––yrå-¥çì8óèèÓ¾Ò//’ÙœX£¢‰¯"ºç¼Æ, ìQ°Ð{ÃnÅo‹µ!ðÙXl…M2n¸1áFYø¨nsÜ lY Œ¶å ߣöå3*_Èv‡Ê=£=y`䑜_Ð刮´ÒÊÈ Î ƒBÊ~‡u—S4OL 8ÛÔ´–Îwvå\z"ºÚJD—e¥U˜%c¦“›Õ’ZùÿR´C8y©S—Úåy(çpÞ™×¶{•€°ãÕ2;„Qd[b,!¬ dí‡m\EïçØÖ¼á½awâ¾ó­/ Úga~kÜìá:yð>¨ña~¢ÆO >®íD’Gû/|OæŸQ¹Eí ÷ž³lÑüD^[éhc¨Kйx#–™!Ñ!Kñ>²Ï§øBJðªÂ.™wÇRï’u48©pL€¹ UT³ùL9W]þñuš¹RÃ;äõ,¥W®š8–íöÜeøøÑú×~í×øû¿ÿûÉsÿùŸÿÉ¿þë¿ðË¿üËüÛ¿ý[ýÙýÃÿëýoþßü ~ã7“É6ÞfÝ “²£õù3ß·“ÚåôRŒßbB¿M-—sÞÖ÷,FÈ4樂Ôß§úC ­›Úb!p-]çê=KŸEM›LUUÝ¢¥@€9«+f¯b*¤I ^¹Ïf ’¯A £´4¶€qˆæßâÞaõøØKÂl ³Àd‰Y)\êeÿ ¯Ý¬»!à,çbm8ßÂüÉK^ µ7&|0ムÕøÉ͸Ñãø™ƒ}‡òƒ|Bí*ŸÉv‹rK–{4mæ{tc¥Kº†q%¤¥y—¬9Œó³Àë(<'^ÔxIÂk2ïŽeæC’ gÒ6€dDr@ú0¤Ö i–Ñ0•.­Ð!Þ)ÝâûÕ’³K!°\šLü’ýøÑú½ñ+¿ò+üê¯þ*ø‡È—/_ø‹¿ø‹ú³>ò?þçÿ„:ÞÓÈcqö“¦žÏN¨pî%®Ÿ7ýí¼ªš­WÑï¹ÔÍ­è•sí^iÞ½ºSÏ’Àj÷pÞl5¬.m¤_|ÎakKikÅñ¬T15$ G,"Ï«¯acÔIQêðŠ¥ÕÞ(ÊyOÉ+ìr Å8X²,0 ßY–`k,‚¥m\b/Ûl{0ì^°{Ð;Ãî€¸Ú ëdlÎ×ÅÖPáÃàÊùF•™>@þLÖO ö*ß¡ö‰,Ÿì3Ê-šÈÃ3zmè5ä èFÈkc\ yeèÂÕóifŒ"¼Ž°=Oæ5þ_’×ùúþÑ€%qH0¦„£Z&i…)‡ÇœZȜҠ|Ò.¼ÃÚ¾Wе´€ÕõéUÒ+e?N¤˜«Þ ñ2|\ý•ñ§ú§?çŒâ7U¹ìü,Jù޳“zõúþû÷R»h›œ#5½¼Ô<è™[Ï 8wãLW;O¤¦R‰.%æÙÞÚÿŠ¥qg©Ëp`Òœ…ø<9µâƒF»­}ÕC=ÄΔ³(’C9Wõ,±P(ŒC¤«H´Ô^³9Af$›c,«÷ +÷œuÇ9ö,˜÷˜…-® Ò<Àðd,U¸ÊÆ• u80s{ÃŒª\éó°áè÷dû> ýÉáœîȳGòÕ‘Úˆey#ŒWF^ÁÖÆi&ŒÉxQØa <ªð¤V°¼dáU}JìŒi0Ï4x‘ª²’( R4u(HU‹¬•q7öH¥aÍWööZïºÍšþ®Ñ¬­ƒ\†  ÿÛãmQ¤éÁÒçnÆù{½§ž{Në4b¤…Öu·“ÝòNÆ8ï†z8Ÿe²tVâYžA‹ª¦õT=KÀ9@ŸÁñÚ~H^#™Òé݃Ö1¼ñNâ%ÄzN]QÔ™ƒ¸VèèÀ¼8YF˜‘«…Ke…ÙŠl+ì8ƒ'¼cÖ£ažîþóÈ–;¯G]á\”³7 2lôÄlxÄÔs¿ œeøždß‘Çïγòú•á£QÊHçëPÎWÆpºNsc¼÷¸? Ûdl“𔌧$¼dxVcŸ„]JæóÕ»ìI±fPr¶UköŠëà,£DH¤oŠY¬ÜCµ>B½t9“0ñÓò§_ɸŒ~\ýÿÉhÓðÜŒøšçöÖâà-IßLØ·vÊùâ €XuÿvÉÚÛOMêî¸|†ï\|hélµ+F‹¤žÂÙÕsgm/$B=„®"Lâ=R©ì‘Æ gÂ⬘g²Ô8¼(- 3eÒ¤•aÍ1ŒÇ'"sr´Ú²šbè „Y—p°gàÉB= <†ÅñhÈ“0µël\™peæ=fn®ÕXÄî0û‚èÌ>W8›}‡è¹ÿ<Û’I>‚~„üAÈ7ưtcä+8­<®ùáþ`Üà> jlÕëû?)<+¼jb—„1Ͱ¼ 0'WÏ‘ûí`Ö.#ðAÒ›Æß@(GJ¡”ž‡48·}\B½•+³ùÊ-zþâAŸ  àè4êWG=ñÕ³¥;8oXØdîä÷¾}vûÜî%¬)¨ÛÂá™RöçfµL;‡×Ë(¾iĘK“ZŠwYÁL}ìMlÒ^k°ÒfK«µa5/¬Žìi†26¤hµåªYæ0f8¢xÒ§hTkÌhAÒêa,Éãž {ž{jÇ<ùU˜›±„µkså¼Qq8›qe#3{»ÃìÑÏØà,2|‡éwˆ}‡ÍnaùLþh ¿äp> zcèÃ9­Áww¾Œ» ÷ƒppÞ†µñ¢‰×1q 0›."ƒeá`WÎ’2–rËÝ>žÝˆí 9Ög°õ¬±ÝÞë¿tÔó{£ ›@™w Xý™T›ã2ʸúIP}xÿË¿³6Îüd›žhÊíwMcž+”ÏÜ s\0eòWÝÛÎ}ySÞ_¬šIrWƒºÁ9:eõ×ciFî]§¡_R %ÖÔ³ƒÚ+K“•ÚÙvHÈLÒ¡¢5G²…Á뛀s4c$“ÏÕš,ÒËðE<ƒ½ùÙÂâpHË3ÌÑÁ%ÃÚ`ÊyS mÆÚŽˆnAï0½ýÎß;œ—_°´…ŠÜdòGÅ~2¢?ôƒ‘o„¼1XÁ> ÷£•:ÿ|Ép—Î9à<Âk8¦š—ƒ·@ÒKs$Ï1ÂÞˆŸQ`B^OX ñ8¤ð†¤¤zG›ÑÁœë¿°Ä}“ÅÑ8QÎm®ÚZ7À»p. ‚1q“]2UºqôcœÛ?ïœÉï¹òóO*·Ž}ÌõyôFÿv“­¦äv´¬ –izaõDúô¡'åó”KÃD“÷­ÎAé;ˆ·ö¶œë¾€Z=Ô¯XžÍ‚Ì ›eåIàG£µÇ'@%‘¨öÊ­/ ,°q†í{{1ò3ð,ðbØ È«OÆB„U6Væêùʼ[ÖÆðâúú ¶ å|v‹ØÌ>!ú ³ÏÈì[íà&#ìƒÂO”ü#Tò!mŒÃ[„ïƧ|ÎÂ5î²p—…m^ÆÌ!ÏQ]aºBt…éѦsÐyØÙgÁìNÈóˆÕ…½ ‡„<Í0‚Œ‰¤åžèíV L'Wz(k´lhy¦ *Н–ñø‘  ÿ[£Uï¹ý¾®ÜMq÷¢7 >?·OŽ¡JÚ7 ¼µ×Nœh’îÔLáÅc¯%‘H%/Õ6{£ÄâIË^y•’n/‚ìŒa„eï”%¬¬ùÎW+=‘õ…È`ÁôÑ[WÏQÚ–·Èú Û73äƒaù8À/)ü’’?ãÒxÊðé |w4¾áó |VãVÎ÷ƒð¤™}ž3kj§ðqiÕæïÙ9‚½žç#ö’àEίÉïö%þßöÎ-Æ’ª^ã¿ÿZµ¯Ý½»{fÎñŒ8/ÑML”‚è"1Ÿ ‘8âƒ#&\Â5‚‰Æ(Á€f%ƒ‰$ŠñÍxAŒð`ÐõŒQ˜r9Lßï{ïÖÿ<¬Uµ«vAê#Å®î]UkOzÕ·¿úÖÿbD±ªDš’³ÁŠb4%eÉ"4Èæ‡C%Æ©'å´Ÿa¿8r÷@˜ŸƒRÑâ£GJ%A¿Œp–‡ˆ™¶òΗ+¼ý´ÔVÉ;Z=gïÊ€ëŽ9ŠÍ»2#OÄz–qR Ÿ'ç竉!ìªf.9RÖüÏÁŸÌÇॅ:0^5‹ÅÛ!›E­!GLxUCLJÒÎ7ð ãøâi¸G ç8‚-Ð.h>Å0ìÛžÿ«Y¥Ž'æ†z{ÃwÉRjÚÃh áê–ÃÂ`ªž ²†Ôû踅‰™th+B¦:í`%™²têŽUfzÂŒSæÌr^´ÂR¤¬9K×U‰mµ¡S¸õ-¶ºšWÏIŇÌõAÚ1º#m‡¦1xÝ œ7 ²eØaC¤Î‡<"¬nWÍé¬ñÿ%8bœ¯„Ž”ù‡©(ðÝyü4‘Ü4Nç_&SJ¡$èW…W0ƒRe°quÛ1Ù, ïï`g3°8r¿OÝŠœZÍNÈ.”{cˆ¨³šë#½ç̬fà>ç×îƒÿ¬A=»ôsHæ{gt.Eål26ä'j^vg¡Æ÷?Œ¼÷¬VäÌv’vXÒ>ˆ¾“x5ë$5¿¢¸ÚU²ì•® !³%êû䙺šï1KÃz’nªÐЄŠn‚¶AWõõšSrÆ-‚¬@£ƒ4u@Î-‡NržŠ`Ú±Ùt¬UsªÌº˜똵0 óNYt²Ú®BÏ6Q;¶2Xš`›HÒa¡³‡Ïõ^}ʆƒ¶…ŽC:Ý4H×`b‡M„È*8¬/Ö4<…‚\âç·/bœôqigpâmä,aBO@ÊùiŸ= –¡$èׄϤ‚ÆÎï6³xä¥òʸhoÿ¿¸6¿¹'È¡¨=¥@Ôᤴ0“fïÉy°?X’œ­‘ÝuC›„dä,äÚk}JÁùÊzYËqrÓ^M{#$GÎ9’ÖL9‡ÖãZÅ’FªÐ7° šFo*HZ6‰}ÉÓšjÔ3êëÛ)Ô4Áj$½–©g\šÿ½ŒDhµ4-:!i Þd“žœã G§aY$b^³â˜1ŽÙH™u0ç”EkX³[¶‰³-°“M nÜ8êš^9GuèG>ny#FVûèª"]7HÛ mOÊÚ5D}ƒíû‡5TD‰ÔøWâ0©rÎÌaOÊIˆ“ñ„Ü/³ âS¶%XS2ÆOiCó.?]tðV£$èWëi×Hƒ *Z²…¼Gbc¤@Ρ Žo‹ƒõáviRJΩ@È)‡tJ¦ÄœeˆkIÐy”ý‘'âa’Þ?ù+œøÈ‚½1ì{3B¨HñØÂ ’ß$ç¢Î’ ' Jœ¦‹‚aÁhˆœÓKò]$[v&g‚Õ"!SÜ«gAóå¤ñ ' ÞæHÔï˜ µD!r#tFÎR =)k iÓŒúâÕÌwö j(5U*ô3rV]ÖÖQ]Ct 5m¤ÙGë³èXŽœ'"dR‰ÇíZÄ2Ž"æq̣̪cV,Ç5bF`ÅVØŠ&Ðdb§P; ¶…ØjÇ=9Kí[XwÈR]îÁr«V²îÐÙ0ØžWÍu5T1Ô0TB3ÚHŒWÏâ0jPâ°à×# ßbº×é£ê¡#2 fÍÕXJëøg¯é\Ë“2ƒÒ®$ç‘( úUaíêÉñ .UðAFùÏÃöFÑZΎʽ98#gkä ò©gŸ!˜ÿY™ÓTÇkOgä¬#È9\¾PA/¼Ó{ÕÛ#B=$4¨U£¨1ÁåLƒ¸¼Í‘ˆ qؾr^jo8©x’ÖbÃöì¿/}ÿP u¨k:è^W¨©bmÏ“³m£¬#ºŠtè:Ø.T]’vd1x&i)›ue=r,©Ëly"æÄ1KÄŒ*óD¬KØ´ÀîA¢=¨ó)†âZ¨›€d I"tCa1F{è’ƒe‹¬DèªCÖºžmZ*}GÝ9êø­Š¥Š# Æ (Nz$ºIÂ&šïŠl!Úª¹HŒˆójل͙ЈVÉ‘sJÄ.W[‰íäœn%ȨкòöÆÀÞåºÃø¹›!ãü")¿,†«æÉÀgN•sî³dí´tÀ¹)­§¡Y³ÜL93‚ Élôf¤³˜0¦Á`Q‰pjŽªF\L äÁ&˜XCÍ¥Ð÷PÓ < –F‚a ¥KH1Úˆ¶Q6Àtz‚Ö Ò°hC}ÄÆ˜"cŠN(q]Ùˆ+(˪™µ±€÷çTY"bS¦A'ˆdÇ$Ž=83F{P7 ½q¤¡‹ Ìö9`Þ¡‹–²” +»a©õ,$¡©–&Ž: u,5Õà9W°([8¶ˆéÓÁÐÁÐÅÉ&Fý{B‘>b]ØÝ Ë DN…Ä©¯Hþn‰Ph¶’’r65 ^H ( ú߇“!ê“=u1lo pÿe[?b‘¢‡¬ 1ƒdœÔ¡ÈíCÑÎ ‰ýç3ʲŨarNë-ˆâE/OIDAT™Á P,?œ.V¦K[`1¡ê‹Ð»D0] ä4½Ð$>ݼbÒèè@Ò@ %"AB´hÕbý+¶ƒØ-ßÉ¥f¼­QäÜTï;)[Ue]+D9/JÄ‚* ¢Ì©²!MXmI §S8¦q2MÂ^Óh¯,+:Ó‡™2— s,,Z$XµMG3¶Œ©eŒˆ&Ž u±ÔÔQGE*[¨véK›X7pÒÆh#ŒnbØÄÑÃHÎ:$±‚„áj“úÎá‘Í©’ #Ôó÷3e¨ÙJÖ*97ÇŒê@Iл‚rnAZ'¢½O9¾x;|Œ°WrÛpM±íWÄZ£®hCÓì’†£)ë(«ª¬ ,¡,‰zkC+jéË$¢cD´pÒ"ÒISžœu/Q<…[© óŠïÃqEft6‚y‹YrÔÚŽ±Ø1îƱŒKDSM쀜qÀ&Ž1ëĬãØÀ±‘)g¿mb¤‡©8Ôº¬­Fþï¡áï’WÌN}‹ÉØùï¿ÄkúçÉ9}úÚ‘”Í”F‰’ O1vžZ#hu´Qü²W;‘÷\8k›½‘¼“×7¸òÀýRÏÛÆ–I§„ö } +ˆÅ¯¬s‹@®0^ÐØÅ[©rFL¡Š^(m‚r&Á+fßÎ0#iœ‰úþ‡´3¬ XbÐ-ÐMOÆ)1kèÇRIŠAk&Ÿÿ4¼jŽ«JÛ ÈyU+êXÇ¢:ÅÑÑ TX'b'-œ¶pLÉ.™&é4qK7:«ÄÇ™qèls™O¨¬YÆz–Vbia™ b\cœb©i„a 'b]£/«¨®ãd£mŒ´±ÚÁIæê0‘Ã亃»Hrž³÷›!ô3tš–ŽQÑ>±Û´àDq*¹†³¹ââ’&ç‘Ä”ð( úTàÕ<‘ɨt‡rû9™=ì=o»láÀ—ËùÐ)e¦ž}ŸWÏ Qδà˜Ùœó$…yÝ¿*ÛI¹@ÎÁÚÄáå:‡;!ô˜… ˜ e¥Kë-ù,ÁA¸PÁás·@·Ð^–³lùZÔ!HZjA=7@^A÷*Je eM«¢¬¨²,Þ^C¬M,ãDŒ£2ÓIœLzk£ß®X*‹‚›UÜ,¸pÇ nÆ"³vÉÑì&L&Ž)u´ÄÑRÇ„$Œ©ÍÈ9RP:IJJOWPYÁéšïÎŽ6ŽÎt1ç·j(ãQ šY~-@ñJ¹çB Œ*’öSÕ”³Š ióYÒoß0Wd(6s¿J{#’ _!NôðõZÌdøÊ¯ºcÄÆ¨k ©&%½íjZbJÒÙ•s¼?ˆyN;k <è›VÈį̀ƇÔÉà^Í«è9çãðR%iÓï´„4I iͲÅCCɪsD(’’s hÁG0ÀbúYçp©*Z˲W ZS6­ÒÖ5´¤ ZYQGG* 5,cD2æ;…rޤ…s“¸v ·lqóŠ›W¢YÁÍ(ÉqH^2p<¢¶î˜ŽÓš0…cŠ„I,bÓˆ15飺IÌ2}YBuË Ž5Ö°²Ó Œé`ª ¶ª¸šâª‚©*¦"˜Hݰ¬_ôë'ê;‚#ôT 5ýݰ$#æ‘Ñ™JN_ÃR ¬¾ÃÔ}“¢$èW—Ó»'}—½þ+£ü“<)çì“Pñ‹#½:䚤vdµ§%ß„¶@Ιì(øÜÂà R©ïÚâ ÷lžœsab‹Eð†êüõ Z¾¥Ö  Þ€œ³êÑ(=oqÐó$mâŒúúø;¿(ذÄØ4Êʆ*e$½Šcˆi Ô±4q2F¤ã8™À…¨ 'p+‚[Ü‚âæÁÍ}’ゃ±¶a:ŽØK¢@Î-qŒ«cŒ‘±.ÓcdÈ9 êÙÊ:N7pWs¸ºo@›ÖôO®d±Tè%ÊfJ–hŸ1ßW¡¯êÃçBX‡æC<òĬÅù,N³hC¡%J‚~ üÎÉNªWÀ¹Û(s”=ê²™÷¬;(©3 Á¢rN/YÈqÉÝHyÞÏÔ3"çtüüJ¢‘Œœ³§]¯©í’'ç|žäb¹(tº5âÒšÐ^Ëy‰ñ¡>HZè¡z°ØÄwoIMêÐ÷Ð/úbx]QÚji£lˆ†ÎXŽuUºbP­b¤Õ¦oF«c8™ Ò ”Ú­âV„hOÎ àæ9ÏÌ@sUi%¤{Œe‹Ø‚ñ&Å1¡Žˆ‰,Ó×9`D°º„e++8]Ųޭ÷qÄW&­ƒ©‹WÐUÁUyõìTØL”nŠü)l9ßÙ¥§Ð ÄìsHyTüo•vßAÓLW¨*[ôh”½>÷¹ÏÑjµx饗øîw¿Ëþýû³÷Ž=ÊùçŸ_‹p“§…™†:³8ÐDpiàmâyß <óìQÎ?ûü!’VÒìu=>ÈH±}4J‚ÌÖ¬”´Ô­)Ô”¾Uºª´±´ÚêUô±§^bâÿM/µ4¤ŽÈyœHÇQ&pk‚[†hÙ“s´ ^=Ïyr¶ ÊØ´Œ0e•=‘0í {4bÇjü4gÙ· ¬Ò—Yz:‹c+óDºDÂV–‰tWßÄ6vLI‚m(®î‹ße5ý#Ï‘ÝØÂ먯Lºi„õõW7„zþÄ"¾ˆX2“ZóälòßÔ!öNÁЉäjdé WI‹¢áÍóz€ÓKKKt»]î¾ûn.¾øbüñÂûGÝùä¢ð<)lŸŽƒ“óce—r'NÂ¥ù£æ~¡À±£OHßaU“§íL=KSÊ  ÛGŸ~ŠYFD6…4[Ñ"2ÜÏÃúJyá&—@ÒÆ ’x¯¹"~{ö™cTL±á£80}¿Ù1AE›l ‡Ô 4 4mxõ›Ö-[ÖÒÁÒÿÚÁÐKË?Ÿš'a Ã4–½DìÅfÛ>"þ‹¨7I´`‰æ…hÞÛÑœÍB4•YazÎx{$œá7+¼Ó ç˹Öãc4e†Š¼HÄ X^$’‰ø?¿ÉKDÕìô&ö-ŠÝÑÿÑÿ€} Ø·ö¿Áþ—ঠSÖ-¬aÍÀº6 ~ë*m®1Ħ¦‰˜Ð @ˆøW¿º¤»ª¯›`T“7«Ó¢*H,7¨=ýÊŒ½ÿl¼éô³Ï>Ë¿øÅÂ﮼òJŒ1|ö³Ÿå™gžá—¿üå«»x&9‡ýÞ“9iy‚ÌIÙíGï >Ò“† SçIº¨“söFz\Þâ`'õ<ä„ 5§³Ï⯜Ï`,vnªž'fÐû0ßV+T*M³Æ-¾)m>[< «³(˜Mcï|š!R™1a1Â+çŠBÕø¦´¯»xõÜEéŠÒQKe‹*ÐÀʪu4¨g'cAE£·nE‰–·ì•³ï¹¶(ì• ­H˜tÊT{"aSö9˜p=ÔÍÉ<j8fHd–ˆ9œ.°ˆV‰Æû$Šð¥£C]llMHªŠ3°Ñ‡õ¾ï ¾®igðT=‡†+b0¦Z;# J9â ÷…¾óáiÃÙDÐ|–Qè ìV^Ó$£g𛢪ÿ ¼ÿõþ §Ž9Â<À·¾õ-~ýë_óÔSOñå/€~ðƒDQD³Ùdrr’ÉÉÉ]ý,«««»>F9V9Öë=Öêê*«««ÌÍÍñ÷¿ÿ}ׯz#¡$èèt:ùÉOrá…rà 7ìÚ8ªÊÍ7ßÌòò2û÷ïç¶ÛnÛµ±^zé%¾ò•¯ðÖ·¾•õõuî»ï¾]ë„r‘ðâåO%fff¸ÿþû©V«chµZ»6Àoû[Î=÷Ü]`ÿþý>|˜C‡±oß>Ž;vÊÇxðÁùÔ§>Å¡C‡X^^æùçŸ?åc¤øèG?Ê~ð>Ì#<²kã¤øö·¿Í§?ýé]çç?ÿ9O?ý4ÖZ¦§§wu¬Çœ‹.ºˆ»ï¾›^¯—Ùov¼é O„]]@<‰±.¸àêõ:÷Üs<ð<ðW]uÕ®ŒuÅWð—¿ü…»îº‹ýèG¯yŒuå•WrÅWð׿þ•µµ5ÞûÞ÷ž²ñR¼øâ‹\tÑEœuÖY¼ð œyæ™§|œ<>Ìe—]¶«c<úè£ìÛ·w¼ã,..îêXÇŽãø7Þx#_øÂxöÙg9ûì³we¬ /¼O|â<öØc¨ê¿Í[?ÝQô pöÙgo{Ô?räGŽÉ>œ- žê±žþyžxâ öîÝË“O>ùšÇÙi¬Ÿýìg¬­­qíµ×rôèQzè!>þñïÊX¿ÿýïyðÁ9tèÐkc8ÀsÏ=LJ?üaž{î98°+㤸뮻¨Õj§d.œ=ôN‡ßüæ7ÌÌÌpùå—sÎ9çìÊX`ssðóoeeeWƸÿþû¹é¦›¸ä’K¸ñÆùÛßþÆûÞ÷¾]ï‚Òƒ~…øw/ Þ|óͬ¬¬°¸¸È÷¾÷½]÷ .¹ä’Söd0 ÿüç?ùЇ>Äg>ó®»î:Þþö·ŸÒ1:W_}5SSSLLLðÍo~ó”^?ÿøÇ|ík_ãâ‹/ÆZ˽÷Þ»kc¥xôÑGùÓŸþÄõ×_¿kct»]®¾újöìÙCÇ|ÿûßßµ±þñpÇwpàÀŽ?ÎøCÆ®÷FAIÐ%J”(qš¢\$,Q¢D‰Ó%A—(Q¢ÄiŠ’ K¼añÈ#ð‘|„k®¹†Ë/¿œv»½í˜_|‘;î¸cäù_úÒ—ØÚÚÚíY¢Ä«FIÐ%Þ°.»ì2î¹çÎ;ï<þüç?sÍ5×pÝu×qûí·pÏ=÷pÕUW±¸¸È­·ÞÊM7ÝÄgœA·Ûå’K.á§?ýéëü¯(Qbg”]â Uå¿øW]u=ö÷Þ{/ûöíc||œ§Ÿ~š~¿ÏO<Á™gžÉÞ½{¹óÎ;éõzÜÿý4 .¸à~øá×ûŸQ¢ÄŽ(ã K¼a!"\zé¥Üpà @½^gccãßþ¹K”8Y” ºÄî¼óNÆÆÆ¸öÚk¹þúëùêW¿ ÀÔÔÝn—#GŽpèÐ!žyæn½õV¶¶¶xòÉ'yÿûËÓ§/Ê8èÿÑxøá‡™™™áÊ+¯ÜöÞm·ÝÆÁƒ9묳^‡OV¢ÄË£TÐ%þ£qñÅsÞyç|ïÒK/-ɹÄiRA—(Q¢ÄiŠRA—(Q¢ÄiŠ’ K”(Qâ4EIÐ%J”(qš¢$è%J”8MQt‰%Jœ¦( ºD‰%NS”]¢D‰§)J‚.Q¢D‰Ó%A—(Q¢ÄiŠÿ XÅNtoÅIEND®B`‚mpmath-1.0.0/doc/source/plots/ai_c.py000066400000000000000000000001271316273626600174650ustar00rootroot00000000000000# Airy function Ai(z) in the complex plane cplot(airyai, [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/ber.png000066400000000000000000000457731316273626600175160ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíwxTUúÇ?3“:©@H()é"E:XA,¬(ØDEÀµ îÚÛêÚÖ®ˆ½‹RË* *Uª”ЋHK„ÐÂ$dRgîï“ IH™rgî½Ãùÿüs5jÀ믿ÎÔ©Sùæ›oøüóÏ5nD"‘Ýtu²³³ILLÀb±h܉D" Ä;öb¡1¤@K“ÐØs|•c«(¯ª_ÎÎGwGÐœENœENÏ^èÅ,B=bH–&¡± æø\±9KœœZr K´…Ø~±·ªv<©à€À÷וA0‹ *ÐÒ$46ÁŸ+¶¼Uy8 ČǦß?3O:Ð}çµQ(GÐÚ!MBcÌñ¹b3Bz<è@÷Ai›`ŽÏÛÉùååu—볼΅§输#h"MBcÌñuïÞ¢EœÞ|k;+Ö6úÞ\ÂS¸I(ÚxH“ÐØs|v»ã? Ñ5úH¸º|æzÑÌ$ôT eŠC;¤Ihl‚9¾ÌÌLŽÿOtÂ5 ·¦nEt£FbÑ7w&a`1¤@K“ÐØs|­“Zc[f#41”ØÞú-¯ÈË:ænz40 ½]rTŽ µCš„Æ&˜ã[úþR‡BÂðL}®^çÂÓü3H“0ÐR ¥Ihl‚9¾f››ÆÊ?{"ÐÒ$ ,†hi›`ÏYìäðüØ­fÝ®^WO×áiC ´4 M°Æ—»8—ì‚lmˆ%R›ÃVÇ›´f&¡§UäZ;¤Ihl‚5¾ÿ;A*©º¯Þpá@k6“ÐÛ‡Ai›`ŒOq*ÿá8»M»itµþóÏ` “ÐeÆdñbMh—@GFªß¨bH–&¡± Æøò×çS’]BÏ‹zšªusÜÂÓ¥F!ð}g2™°ÄY<èÂBq”x¤Ihl‚1>×䔨+ô¹swMx3‚Ö¢ïBâCpÚ8KEQØ{r/3·Ïä··`,Ú·[‘­Ê¹FˆÍh&!@HlùŠvî¤9‚H år£:ÄF“/!¾ŒS|±é Vd® =;Ü¢\ÌN33çÍÄar0A™@î7¹˜0Ñ>¡=7Ÿ3{L4DlŠ£QLB8c:òpvf©*A”â0¤@Ÿ &¡ÕjÕº~C¯ñ9œìYÀë?àç¿~FAä;#B"èݼ7ÃŽ £ÑéFœêqŠû¯ºŸÇw²öÐZvßÉ3KŸá¥/qs»›yyØË$E'iMíde‰Á¥'[]¹Ðªïªt}Èt`Xºt)=öݺucÀ€Üzë­À¹a!—é-z‹OQ¦o›Î“‹Ÿdÿ©ý4‰nÂ]ÝïbT‡QtlÜ‘PK(Þõ'ÙdÓ{RoF\:¢âõ{Nîá½µïñùÆÏùbÙÌÛ?O†Â5í¯Ñ*¤Z)(€Ü\hÓÆóI* ]ßyTjD­ë´Ùl&..޼¼<šWZ¸Vš„ÆFOñ­;´ŽþŸ÷ç–ÿ»…ý§ö3°Å@f]?‹ÌÉ™¼0ðº4éB¨%‡ÝÁ±ÙÇ0…™h|]ã*×8¯áy¼3ì>x‰Ã&rÌ~Œ3F0þÇñ”8J4ЬfGoJì@»¾«ÈAç¹1‚¢‡®úâ‹/æ—_~á³Ï>ãÙgŸ­x\š„ÆFñ+8ÆØ¹céõi/Vg­¦k“®,»”Åc3ªã(B-¡UÏŸuŒ2[¯k\1õ¸:ññŒo:žy7Ï#)*‰OÓ?åúY×S\VˆÜƒ´ë»s5Å¡kv¹Ò²………̘1ƒ¹sç2gÎvíÚUQDﺉŒú˜k”¢‡¶øã±îÝ»kÚ–ùͧÿ:ðõú¯IŒJäéóžfýøõ$%ÕúÚÃf7»i6¡Y½±5=Ý”ô é´(kÁÛ~`äÌ‘¬^»Zÿ÷B ÓINöîz.ÇÎüâ±Ýn¼¶°]€Ýbqë=6nÜÈܹsyã7°ÙªVåhŽ¢(›2{öle„ Êm·Ý¦|úé§ßzë­¶ÊÿhÝ¿¢U|ö»rßÏ÷)<‡Âs(ã¯ØŠlõ¾.K¾²„%Êš¶k§ÓY繕c;œwXé0¥ƒÂs(WwµRæ(ó9_yñEEE™:Õ»×kÕwß:¨,a‰’ùFfý'¿þºòw<~Ÿ±cÇzÞ8?¢ëôÈ‘#ùðÃùæ›o¸óÎ;+?LÂ`F‹ø¶äl¡ç'=yoí{4ŠlÄoü/ÿ˜Øðú×ÛÌþ8€fw7«²r]MTŽ­iLS–Œ]Bû„öÌÛ=~Á· TÀ—;Ðv&!¸™ƒ–)m‘&¡± d|Š¢ðΚwèùIO¶ÛÎVCØ2i #Ú¨ÿÅ€Ãî ç›La&šŒ­ ìê±%E'1÷ƹĄÅðü²çY°gWq¨…¯9hÍfÆÊ*à MBc¨øJ%ÜùÃLþe2o}“·- YL3·¯qlf¹98²1¡ ¡õž_SlíÚñù5Ÿ£ pÛÿÝF¦M»oHF5 Cb<˜I(«8´EÎ$46ˆï¸ý8C¾Â›¾ yLsVݱŠû>ˆÙäÙ-øãÃ4›àž¨×Û¨Ž£˜Üg2' O0vîX÷ýñYYb«¾„ï^¯‹™„õ!GÐÚr.Ì$ füß®ã»èói~Ïø ›^ÈÚñk¹°Ù…_çôÖÓä­ÎÃÚÎJÜÅî¥ÕêŠíÕË^¥sbg–XÊw[¿ó¸=¾RTÇ{·“Š ­îM)ÐBš„ÆÆŸñ-Ú·ˆ¾Ÿõeoî^®ëp¿ûÝ£”Fe\æ`Ó»›Ökº¨+¶0Kï_ù>ÿúðY -ù×$oӠݽ隨R–çÆà̕⭠Ò$46þŠï£õqù·—sªèxœY×ÏÂêݺUÌÁ1õ›ƒ.ê‹í¢´‹Óe 99<³ô¯Úæ-¾Vp€¶Ë‚‡#h™ƒÖiµãs8<øËƒLüi"f“™¯F|ÅKƒ_ò8ß\™ sp”{æ  wbûÏeÿ!.<Ž)k§°ùÈf¯Ûè)¾„ gC ´4 šñåçsÍôkx{ÍÛ4ŠlÄ¢1‹ÓeŒÏ×=ü‘gæ  wbKŠNâÅA/âTœ<µä)¯Úç j´V÷¦9ÌŒ)Ìä^™Lqh‹4 ZñeÚ2éÿy~úë'Ú'´ç»þࢴ‹|¾îé-§É[“‡µ½•¸‹éÅÖ£[Òj«ï\M놭UhzO¸iž˜ƒ.Ü-ÌÆãàß¿ÿÛ³z‰/›ÅºÐòÞ´ÄZp9QÊê)Q”)m‘&¡±ñ5¾ÛfpÉ——SÃÄùé–ŸˆˆW¥mŇŠ9òÕ,±šÞÑÔã×{Û¸®ãhÓœÿîú/[r¶xü^ž¢ÆZË{Óí5¡eŠC[¤Ihl¼OQž_ö<7͹‰Rg)ï {‡©WN=kiP_Èz; ¥T¡ù=Í ‰ó|? Ob  ç‘þðâò=~/OÉÊ‚ÐPhܸþskCË{ÓíÙ„……`6Cˆ®÷#q C ´4 7ñ•qÛoãÙ¥ÏÃ7ÿÈý½ï÷8Q¥¹¥þð0æp3Éx7Ìô4¶ñÝÇ“•Ä¬í³Øu|—WïéÅœ͛ íò-ïM·+9 ÅèYÅ{C+ )ÐÒ$46žÆw´à(ƒ¿Ìw[¿#5.••w¬äÊ6WªÞ®ÃSã8í É¸&„5 óêžÆɃ}DAáƒõxõžîpX¥ø”ÞmïÍŠ“ꛬRTé 0¨@K“ÐØxߎc;èýioV\Eïæ½Y{×Z:'uV½M»ƒ¬w²À )ÿðÞEó¦ïîèva–0¾ÚôöRÿ ùgÐöÞt+Å¡(b`P–&¡±q7¾_÷þJßÏúràÔnìt#KÆ.ñÛnÙG¾8Bé±RoH$²µ÷£/oú®qTcFu…­ØÆŒm3¼~ïºP£‚ôaÖ)Ð%%B¤åZ;¤Ihl܉ïƒupå´+É+Îã鋟滑ßêŸ?:g©“ƒ¯‰yЩ¦út-oûnâ…øpÇ>½m¸¦yWÚ{Ù+´¼7Ýè ªàƒ ´4 M]ñ9œ&/˜Ì=?߃Åláë_óüÀç}š¶]Çf£(£ˆ†ÃÝ5Ú§kyÛwRбqGÖZë—‰+ˆc‹¾]G&a9è š¤hi›ÚâË/ÎgÄŒ¼óÇ;Ó¶Gwí×¶(ŠBæ+"¯šú˜o£gð¾ïL&SÅ(ú£ ùÜŽêìß/Ž-[úvMgƺ‘ƒ¢I*`P–&¡±©)¾ƒ¶ƒ øbóvÏ«˜¶= u€ßÛròç“l+ ¶O¬Ûk>×…/}7ºËh"C"™¶e§KNûÜ–ÊìÛ'޾ ´¦3 eŠÃH“ÐØToÝ¡uôú´[r¶0¸å`U§m×Gåѳ5Õ¾ô]|D<#;ޤ ´€ÿüÑ綸p:EŠ#!bb|»–LÂ:gʇöH“ÐØTŽoöŽÙ\òå%9}„»/¼›ù·ÎWmÚv}œüõ$¶6¬¬4®Ž¯ákßÝÔé&¦oŸ®FsQ]Râûè 0“P¦8´Gš„Æ¦{÷î”9Ëxlác\?ëzŠÊŠxcè|xÕ‡ªNÛ® Å¡°ïñ½¿å‹-1™Õ™uækß i=„ X°g§ŠN©Ò&Wþ¹U+߯¥©IX>Q¥ÎídŠC{¤Ihlöåìcð׃yuå«Ä…Çñ¿›þÇC}RuÚv}ä|›Ãéͧ‰íKÂ/wP­_û.ÌÆu®£ÄQÂÜ]sUi“Z!h<“P¦8Œ4 u†Ó ùù »wCz:,[+VÀ®]pâ„8X² ½ÞèÅï¿Ó­I7Ò'¤3¼Ýð€6×Qè`ÿSBµZ¿ÖZÕ5úî¦óEšcÆvu&­¸ B5FкŸId)C.÷$MB(.‚»}»øÙ±C÷î­àÚpšM¼re,O_hÚçí>'"^½Ñ«»z÷ÅYÅ$\—@\?uï%5úîÒ—ÒØÚ˜ßöþÆqûq¬¾ý©9‚ÖƒIx.UqR Ï“Pyh‡CŒ†.„E‹Äˆ¸¸øìóš6… D‰@L DG‹cY;Æ ÛÆtþ‹ŸSmXKàñYðÔ_?Âß›ÂUWÁí·Ã•WB˜w yBéñR2^ÊÀd1Ñêe†”ÕP£ïBÌ!\ßéz¦®›Êÿíü?î¾ðnŸ®§¦@kyoš­f0Ÿ[U )ÐÒ$ô#{÷‚B—,S•Œªøx¸äèÔéÌOÇŽ[ëåÖZËõ³®'ÓVLû†m™Ýúq:Å…?þ€¥Káÿ?Á-·Àƒª£$µñbŽ<Íîi†µ­w;~×…Z}wc§™ºn*Ó·M÷Y ÷íKŒ¦ú>GÓ{Ód2‰m¯dŠCßœ &¡Õª¾xÔÊÉ“0s&|ý5¬^}æñðp<.»L»w‹Å­K:œÞ\ý&O.~’Rg)7Ÿ3ÿ˜è°hì—Ú±>òˆÿô|õüü3¼÷|ôÜw<ù¤•«HážB½K´…Ï´PõÚ.Ô껩HŠJbyærlE6â"¼Kʼn2»ÔT±X¿¯üÞ¬†%ÆBñ¡bE©Ù;2–&¡ ˆSR?ü£F‰ŤIBœÏ;{L¤5rsÅñ±Ç gO·ÅyDZôû¼,|“ÉÄÔ+§2íºiD‡‰u.*â ‡ë®#èC‡à¹ç„мñ´n o½UsJÅ Ea÷ÄÝ(¥ ©§–äŸtŠZ}g6™¹ü¼Ë)s–±xÿb¯¯“‘!wSà í lKŒpÔây¸rÐA’â0¤@K“ÐKÖ¯‡ûïËš]s Ì™V+Lœ«V‰*Œ—_#fG!eÎ2^ZþÝ>êÆÚCké“܇M61©ç¤*£ãKL„gŸ…={àî»Áfƒ‡‚>}Äc>’óm¹‹r±v´ú´Þs}¨ÙwÃZ`ÁÞ^_CÍü3ho`×[j'GÐÚs.˜„ªrð ¼òŠÈ÷ì)R §NÁßþ³g‹ò¸>€¾}½Þ&hKÎzÚ›'?‰Ùdæõ!¯³bÜ :4îpÖ¹uÆ×¤‰HslÙ"òÝ›6Á…Š/)=^ÊÞ÷Ðîãv˜ÃüwÛ«ÙwCZÁ„‰{ (õìd] jNRíg¹V,˜TÛd)ÐÚ#MB78}Zä”/» ÒÒàñÇaçNèÑÞ}W$&ÿ÷?9Ò§¯ƒ%Žþµô_ôø¸éÙé HÀ扛y¸ßÃXÌ5§DÜŠ¯S'‘^yòIÈË©˜É“EjÆCö<¼‡Ò¥4›ØŒ¸þþýö¥¦‰–`M góždÚ2½Þ¯P­E’\h]]To©LqhϹ`z…Ã!DmÌHJ‚±cE5F³f"¼};¬['L8_¶v.'=;^Ÿôâ¹eÏbáaï°ìöe´mÔ¶Î×¹_HüûßÂ@lÔÞyG¤^òòÜncî¢\r¾Î!¬I˜_ÊꪣöL»aç•§9öx—æP;Å¡õ,W™â0Ò$¬ÆöíB€ÓÒ`鿾Ի3FvF†È+wì¨JûåbÜÿÆÑããlÎÙÌ%i—°uÒVîï}¿[ ë{ßWÀÆbô¿b\~¹ÈQ׃£ÐÁî »hó^Bâý_´¤¶‰æÊCÏß3߫׫9‹´7 ëMdmÈ2;iGÂ÷ß 1Þ°AàqöÜ¿‡ =&x¼•×FSl¬åþýÅD—¡C«N¤©ÄñŽ“õN¡Bi;µmÀbRÛD 1‡0¤õJ%,ËXæÑkssÅOË–^{¿g¡µIèZÑî\Iqr}N™„N'üþ;|û­¨¸p}µOH3ïÆŒHü @NÅÉO»âñE³ýØvn»à6^ô"©qÞOKóÉhЉùóÅÔð+„H/YQgF–E™Eìº]˜jí¿lOxr¸÷ïç!þ0цµÆÌí3Y°gW¶¹ÒíשíMB™â0Ao`ݳ¦MiŒ¬,ñDX˜¨º;V|ÕWcjX ”8Jø~ë÷¼¶êµ a¾8íbÞú=šõðùú>ÏFs‰ôW‘¾ë.øî;0™PÊvÞ²“²Ü2’L¦ÑÕý0÷ÇL»ËÏ»ðÜ(ô‡@ëa&!¸QÅ!Z;~ýµ€¡CÅú‹8Öö{}Ï{snD„X–">^ÌF®|ôé¾ÈÌ„ï¾#ó³Ïhïšœa2ÁÀpë­Bœãý·ÛH~q>oø˜·Ö¼Å¡üCôMîË=ÁUm®R-M™™é{.3:þû_aNŸ.j¥ÿñö?»ÛJ1=bhõŠÿ«6ª£JlÕhÓŒ ’.`KÎöžÜëöv`j×@ƒâó„zZ.–¤=ÇŽÅñÛoZ·¢fÂÃÏî ÄZ­Z‰Ì­Z ÏËbA¬ƒ1{¶Ha,_@{€.]à¶Ûছ 9Ù¯m>œ˜)k§0uÝTlÅ"…2¼ípéÿˆ_6nUíiGdkm¾âúk9Îa­‡ñŸ•ÿaÁžÜÓÓ=öÇZë¥pÝJq„‡‹¯»A€!:%¥mëž ¡)Š">È]¢}ò„ÂÉÕ»°.ü‘”-óhst%‡ à ™Åõ|Ëm¬:Úå=3i?@Ÿ9bæu߾е«:K%;'K,åëÍ_3gçN—œ ItÆtÃ}½î#9Ö¿£uPßh*¾t$[bâ)Ë·’–ø ‰Ã{©z}Oð—xõOíOTh‹÷/¦ÄQB˜¥þÂ#h­MB·RA2z{¾‚Ñ IDATƒ ´ÞMB“ ¬!%XwüN³„yóÎüµ€X=îê«)ú7²[ ¥éÁ0®Û íwˆê±mÛìddX™Q¾ãQx¸H±öí+Êœ r_°Eaû±íLÛ:i[¦q0ï ‘!‘ÜÒùÆ\0†Á­bÜ­ ¦ÑT–_ÆÖ+·Rœo%©ÉZyž.+âi€¿L´0K§]Ìü=óÙtd½š×ý!ätÂ" ¤f9¼^LÂ:Ë삨ÊË­Û™„GŽˆ:ÝyóÄ1?ÿÌs^(ê—¯¾Z|-7›‰Îί6(Y·.“S§Ú³f˜“±fXhnÕ*¡;±±b#’k¯… ÕÿcÑþEü¶ï7~Ýû+Yy¢ Ä„‰A-1ú‚ÑŒì0’˜ð¿þwÔ†ZF“³ÔÉöQÛ9½ù4ñƒâi÷éu˜º> o¿ 7ܽ{«ÐZÏð§‰Ö?¥?ó÷ÌgeæÊz:;[,[¢fz´7 +Êìjš¨âp@iiÐTp€AZ3 þüS”y¹~öî=ó|d¤X-îê«…š6kæö¥{öC†ˆ;ð×_â-~üQhÿ÷ß‹Ÿðp8¤ˆNÃVR–öËÿFzö™É&LôlÖ“kÛ_Ë­ÜêSý²Z¨ñ®8þ¼óOrÍ%êü(Îÿ¿ó1Ç…ˆO°ñãáÎ;Å$žðÀÕ@ƒM´~)ýX•µŠy°Îsý‘ÞíMÂ:SA6‹Tè°xñbNŸ>M×®]¹øâ‹ÕºôYh2“°¤DìÏçã•+áøñªçtè—^*Dyà@¯?É«1f3´k'~n[̺Œm|·d#‹¶od¯} odÁñB(oN3k ®j?„!­†0¨å Yõõ•ÏW£ÉYâdçm;96ëáÉátþ¹3!qå·òwв»E‹à¥—à_ÿR©ÕîáO­Wó^XLV\UûŽ"åøÃ íMB“Å„Ùj®9Åd“T@%¾ÿþû‰ŒŒ¤_¿~$''“žžÎgŸ}Æ#Ÿ:ræÌ™Œ1‚n¸‰'’™™Ijù¶ÄBdKKE§ŠOÏÂBœöœ…vqVñ{,e+öðfä'åcka#?2Ÿ+–¯ðÓRõâéøÉ_N²óÖ”ž(%î¢8:ÿX)ç\ |ü±˜‘ù pûí¢üÅÏø[¼\Fáʃ+k=GQ`×.±Ì¨Ú“Pµg¨¶`Rå}'‚0Å¡Út›K/½”½{÷rìØ1èóõRRRÈÈÈ ##ƒ””3}f9²Ø`ßÀ_y{Ø›»Ç[~$‚VY­è’Ñ…˜}1ôù«i»Ò軽/C· å¼ç1jÍ(/ÌÄŸ'òôœ§ÿÍx>úø#^}çUf¿2›E/,âíÿ¼Í¬gñê¯2eî¦,žÂKà™ƒÏ0îÐ8î ¿“1­ÆpEÔŒ¾`4×&\ËínçýþÁ=ÍïaÊSxµë«Ì1›åã–3½ßt2'g²þÚõä=œÇÉGO2û¢Ù¤OH罞ïñîeïòô%OÓÉщ‹Ó.ÆžmçÕg–vܵkWEºÈÓÇŠŠvñÒKvþü®¸"œ¸çž]tè`gölذÁ÷÷ðô±ôôt·ÎSœ ó&ÎcË[Ø{b/îiD—…]زw‹{ï[RcDzëøqì/¾¨«Ø¼},!4äØd6oÜL~q~ç­X± ›ÍN»v°i“ºm™6mš_ÿÿÜy¬Ä*¶=Û°vCÕó Iˆˆðèz7ndîܹ¼ñÆØÜØ"˜EÙtñõB'Nä­·Þ"77—x€Y³fùt=»ÝÎøñã‰'&&†W^y¥â¹Ûo¿/¿üEQPÊ”g±SKΫüðC"##™>}ºÏ׳Z­ŸÖÕq™„&“ S¨ BÁU󥞢( ÎBgá.9\BQFE™EgS”!Ž[ (ØRó¤Sˆ‰ˆ–X;X‰ê…µƒUü´·V,øRþ4bºuuÔ Â#ÀÚµ¢åá‡E®:ßëŠÏYê$ëí,¿s§8vè þ{ëÁ$t pΚM(«8j¦uëÖ„„„ðñÇSPP@çÎyê©§hذ¡—? =Ì$4™L„6 %´a(Ñ]k.‹(Ë+þˎ}§ø)ØY€}—¢½E*&wan•óCâC*û`‡ƒÑ"Â/é³YT¡]~¹øV8¾X¹ó¡‡„¯æ¯Hõ?pÛ /gpòç“Ä_O›©mˆêàÙþ{µÒ <ù$üãðøãb‰R?ñê’Ô…ÈHVg­Æ©8ÏÚrÌŸ#h­Åê˜M(«8jfÉ’%;v¬b´¼uëVî¹Ç½%½Á({†Ä†Û+–Ø^U«œÅN ÷žír·ÿi'ouëW¯§-gê£Ìf"ÛFVM•t°bmk­Zê%ÉÉðÓO¢†zòdQ’÷ãbûCÌñHOO§[×nœ\p’Ì—3±­ÆLxj8­^lEâ­‰êï!ø÷¿‹dûܹbQ“~ýÔ½~9˜ij ¥Wó^,ËXÆö£ÛéœÔ¹Êó»v‰ß6~˜¤¤õLB)™1cŸ|ò #GŽTãrõbô= Íáf¢:EÕ)ŠÆ•ê„§BQFwv>kä]c¾Û ‘­"«¤K\"^oZ5L&Q‰6dˆMÿü3ôé#*Õn»M… ËãË[Gì¬XÖ\³†â¬b¬¬¤>šJâ-‰˜Cý´ŽoD„øZ0v¬¨3ôÓŽ¯þ©ýY–±ŒUWUèÓ§…/zÞyþY†Dkq†:ö%”)Žš‰‰‰á¡‡RãRn¡÷åF½Åd6Ù2%I¡Ñ•g>„E¡ôXiÕTIùï…{ )ÜSȉ«~«kv¶AÙÁ*ªKê6o.ã{ýu‘º=Z¬¦÷æ›Þ­I]–WFþ†|ŽÏ=Îñ9Ç)>TLED˜"ˆ»8ŽäÉÉ$\“€É€Š—[oFáÂ…¢œ¥[7Õß"P&Z¿ä3 'Mè1¡âq×e"ta–OT©5-GÐÚ¢ÛåFU¢ºc2™K #,1ŒøKªîIX–_5Ïíú½pO!§²Oqjñ©*ç‡Ä…TŒ¶#ÛFÖ$Œ°$qíФPÂÃ0‡›ùç?Å ©7Ý$f$nØ RµM|pØ”-¥p_!§ÓO“¿!Ÿüô| wž9Éñ—Äc»ÈFŸ{úÞ4°+Ía±ˆû½÷ŠO ?Ô ÊDë›"œÜ•™U'¬ø3ÿ ú0 eŠCçèÁ$ô'žü„Ä„Û3–ØžÕòÜ%gòÜUFÝ»ìäý‘GÞyµ_3.„ÐÄPâ‡òc[3[ŠMœZ³[™èÚ–îËN–Qr´„Ò£¥8N×¼ÃEDËbºÇ?(žÆ×5&¬‰ [ÃøÂ¸q"Å1c†X¯#-MÕËJ¼F6¤CBvßIÎé’¢“ÿVp€>LB™âÐ9F1 ½E #Æf&ªcQ«VB(NEÔpï, hoQ…À–䔈ßsJ)9ZRQ"Pá5•ÀÉj•ÐÄP“ÉîMÌ…1Dw‹&´ÁÙóÉ55š¬V1‚þ׿୷Äüù`2›ˆhAD‹ºGŽB¥ÇJQJ§N˜þ=¼ð/³ žyZᦻC mêñîÙZÿó÷¿Ã«¯ŠÚègžËA[÷¦ÝùbÓlÎÙ0Ö¼ï¨C ƒ0ÅaÈ­oƒÕ$táË2­ja‰´‘AdëH¬m¬XÛY¹ã9+ÿ™ÅÁ(n>š7¿ÇäEÕ…æñ5n wÜ!¶gÿàU/ÈØº6é ÀÆ#(+ƒÝ»Å²²~š‚ }ßqf¢JY^5‡!ú\0 õÊõ׋šé¨(xâ 1EÜYÿÒ%UÐE|=$Š…ß}·êF >ÈØ.HEꛎlÄÐ¥¥~(©‹¾;—R†hijË!°x±¥½õ–ðÝJkØà¢6t_ëÖpÝupô(|ýµj— dl±á±´nК}¹û°Ùün‚>úÎnÆj’)½r.˜„z§W/±cKr²Ð·‘#Ï `êC7ñ=òˆ8¾õ–XDY[·¦¢–{KοçŸA?}g‰±œ]f'Sú@š„ú C±wn»vbjøÕW»—-ÐM|={ŠOš]»D *èØº&‰<ô¦#›*ÚŸ#h½ô]HlN»ÅQéƒU¦8ô4 õCj*,_.6.Y¼n¾Y˜Uu¡«øÆÇO?UårŽ­²QèJqøs­—¾s-/ì(¨”æ)} MB}Ѹ±XcºM±Ñøñu‡ºŠï¦›Ä&3g©SõŸ_ŽÍ%Ю´Õ*–Àözé;s”.§½Ò&Sú@š„ú#)I¬?Ô¼9|ù¥¨î¨-­««ø¢£…HÂwßù|¹@ÇÖ,¦ Ö¶ÝΩüÚµÅ)þB/}çZ#¼Êº°P¯Õf›~À-MB}’–&DºQ#1A¯|À³Ð]|*¦9›Éd¢[“n”8K a—_Ó Ÿ¾«5Å)–f  )ÐÒ$Ô/:ˆ­á¢£áé§ÅBKÕÑ]|={Š…¯7n«Bù€±¹Ò4ÙäWƒôÓw®ÇY#è Ê?ƒAZš„ú¦G±}Vx¸Xö¢zæ@wñ™LgFÑŸ|âÓ¥´ˆíŒ@oôûZ/}çA; ÊsЊ":ˆòÏ`P–&¡þ8P,g±ˆ5òþùÌsºŒïÖ[Å÷w߉Uï½D‹Ø* ý-Ðz黳R¥¥B¤åZ{¤Ih ®¹>ÿ\”ÝÝx#lÛ&×e| À¨QŸ/¾ö-bkÛ¨-”E@“Mœwž:njC/}W!ÐörÂh0¨@K“Ð8Œ#Vö<}Zö‰:ŽO…4‡±8G.€ÈS-öïW/}WQfçJqa‰T ¥Ih,žzJLß·OŒ¤/¸@§ñ]t‘(æ^½öìñêZôÝÆÀ‘3õÐþD/÷æYevA8I *ÐÒ$4f³¨¾àX´x@§ñ™Lb*$ˆ‰+^ EßUh×Ò£þB/÷æY9h™âÐÒ$4ÑÑb–a£F0uj&_|¡u‹jáÆÅqút¯^®Eߥ§°´^îͳÊìdŠC?H“И´l ³gƒÅÒž‰E&Awtì(†ú[·Âöí¿\‹¾KOŽvÆ„Éï­—{ó¬2;™âÐÒ$4.—^ ÿøG:%%b9æC‡´nQ ¸FÑ3fxüÒ@÷]n®Èí·mMÛFmɰe[˜ë·÷Ó˽)«8tŒ4 ÍË/wgüx8r®½Öýu¤Få4‡‡ëDºï6•˜»u;S½9g³ßÞO/÷f­9h™âÐi›ÂB;S¦@ÿþ°nÜsÖ-ªFëÖbú÷_Q@7 tß¹´Ý»C—¤.€óÐz¹7Ï*³“)ý MBc“™™IX̙͚‰ iÓ´nU5¼4 Ýw•ºSb'vßå·÷Ó˽)«8tŒ4 +¾¤$øö[QÝ6iìÝ«qÃ*sà âèaš#Ð}·±¼ª®[7hŸ Þ{çñ~{?½Ü›gÕAˇ~&¡±©ßÀðä“b†õM7AI‰† «LJ ™™°fÛ/ d߈ݺÒÒDùb«­5‡úu­—{ó¬2;™âÐÒ$46Õã{öYè×Ö¯³uƒÕì»Í›ÅàÞõ–!æÚ4jÃÑ‚£œ,<é—÷Ô˽yV™Lqèi›êñ…„ˆEäâãáµ×ÄöYº`Ô(1 ræLp8ê?ŸÀök0Û­Û™Ç:$ˆ¡ý5ŠÖ˽i3c 1]f'SÚ#MBcSS|iig643F”àiN“&¢p;;V­rë%ì»Ê¡‹Š<ô1ÿä¡õtoZ¢,2Å¡G¤Ihlj‹oäH˜0ŽkH×µñlÀ1BüÑ­ÓÙw5 tÅú„FÐzº7ÍQfœN×bý ZH“ÐØÔß›oB§Nðë¯ðÆlTm .Žn t ú®¨HÌDoÒš6=ó¸¿GÐzº7-Q‡‚R¢È‡ž&¡±©+>«UT¶EDÀOÀÚµlXM´h;‹r 7– TßmÛ&6B¨þvíÚþËAëéÞ¬Rj'SúAš„Æ¦¾øÎ?ÞzKÐÍ7C^^€VŒ¢Õw®úçêzMJl ûOí§¨¬Hõ÷ÕÓ½Y¥ÔNŽ õƒ4 ;ñM˜pf‘ÿI“Шºp ô?Ô{j ú®¦ü³‹ö íq*Nþ:ñ—êï«§{³¢ÔÎî×GT”†-RC ´4 ;ñ™Lbç©ÔTQ‚çåúùêЫ$&Âòåbù¸:TßÕTbç¢Ccÿ•ÚééÞ¬2ÝÛ%ÐV«†-RC ´4 »ñ5h Öé± RNŽÿÚT'f3\}µ¨…^° ÎSÑw¥¥°e‹øÿIK;ûùöü7å[O÷fv}«–#hí‘&¡±ñ$¾áÞ{Åf³“&y¼ú§z¸™‡DßmÜ(<±^½Ä7êøs­§{³ÊŠv.–#hí‘&¡±ñ4¾W^V­à¿ÿ…ï¿÷S£êcȇŸCØZDß-_.Ž]Tóóþ\4IO÷¦LqèiO㋊©“IŒ¦³³ýÓ®z1x0Øl°bE­§¢ïê褨$â#âùóøŸ8ugûèéÞ<+Å!ÒQA„!£‘&¡±ñ&¾‹.‚ûïÝ„ ¥:ÜHsø»ïE|>„†Š=jÂd2Ñ>¡=…e…dÚÔT=Ý›fk¥2;»=èòÏ`P–&¡±ñ6¾—^‚óÎúøÍ7*7Ê®¾Zø¡ÖO÷Ý®]"ß³gÝs2üµh’žîÍ3+Ú• t¥7@皚ʤI“xöÙg«<.MBcãm|Vë™TÇý÷k°álr²¨kÛ»W(e ø»ïêKo¸ð×”o=Ý›)[±øÀ”#èÀGaa!IIIU—&¡±ñ%¾þýᡇD*xüx R®4Çüù5>íï¾s¥¿ ¨û<-š¤§{³Š@ƒh±ÿ~®¸âŠ*?Ó¦McëÖ­|ùå—¬ZµŠ=•ÖA&¡±ñ5¾^€ví„F~ñ…Jr—!CÄqÑ¢Ÿöwß-_.¾Aôï_÷yþAëéÞ¬(³³•oÃ#Sþ¡eË–ÌŸ?¿ÊÏ­·ÞZñ|RR§OŸ®øw~~>3fÌ`îܹ̙3€]»vU|º»òdF},55U7mñÇcíÛ·÷éz;w¦—§:v1y²ÌÌÆÑ»7»¬VìK—BI‰ê±ÕõØÒ¥»8pÀÎùçÃþýu¿6)<‰0K[7oUµ-®£Ö÷À¶ÃÛøëðnìQQ^]oãÆÌ;—7Þx›Í†®Pe“¢CvìØ¡ÜqÇÊÝwß­Üwß}Už»úê«5jU`ذaƒÖMð+jÅ÷裊Š2dˆ¢8ª\Ò=®¼R¼ñòåg=åϾûþ{ñ¶“&¹w~§÷;)<‡r¼à¸jmÐÓ½i[cS–°DÙvÙrñsÝu>_sìØ±¾7LEt1‚®‰:ðÙgŸñÑGñî»ïVyNš„ÆF­øž{:v„ß~ëvŒË.Ç… ÏzÊŸ}ç®AèÂ3 õtoºÊìœåž”ÌAëiµâ‹ˆU <ü08 Êeëgð`q¬!íϾ[¶Lë3]øcF¡žîÍ*U@æ õ‚4 šñõì =§OÃwh›¬óϫۭY#Þ¸þ껬,±ƒJ»v’âÞk\•j ´žîÍ ¶—wºAë9“ÐØ¨ßÓO‹MO/†?TõÒ5c6àAbG߯ò”¿úεÓù°am£¶ì9YÿN0{³B  Ëk-åZÈ™„ÆFíøÂÃEª#$þùO±È¿ß©%í¯¾s­rê‰@·jÐ €}¹êý‡èéÞ¬ÈA–/é'GÐú@š„ÆÆñuïO>)füŽ€T‡K «å¡ý[Y™0B#"à’KÜ]ÃȆÄGij/wŸØùZôtošÌ&Ì‘fåóT¤@ëiÅ÷Äе«È:¼÷ž_Þâ iiкµX9¿ÒNþˆmÍ1sòÒK=ßµUƒVØKí䨳ÛÞîMK”GI¹ŒÉ‡>&¡±ñW|aaðÕWb¥·Ç«u¹ õp¢/®xȱy“ÞpѺAköžÜ«J[ôvoZ¢,8K-(˜äZ/H“ÐØø3¾ .€çŸ;ŽŒ#Ò~£†r;Äæ“@7,è\uZo÷fEšp9‚Ö Ò$46þŽïŸÿ„¾}aÝ:xùe?¾ÑÀbaŒ… +VmR;¶£GaÃhÙÚ¶õüõ­âÕ5 õvoVTr!GÐzAš„ÆÆßñY,"ÕaµŠÑô† ~z£„‘ôÎȨ(Q;¶Êåu5í?Xj õvoVh9‚ÖÒ$46ˆ¯Mxýu‘â= ýôFÕÊíԎ͵y‹7é P¿ÔNo÷fÅŠvr­¤Ihlßĉpùå°s'<õ”ŸÞ¤ZZÍØNŸ†yó :úÌ*§ž’›Bˆ9$¨MB‘r­¤IhlŸÉŸ}ññðÖ[gÖ²P•DùÈâÅàtªÛ¼ybä?b„çåu.,f -â[SCA‰ï½Ý›g:\Ž õ‚4 M ãkÞÞ_xx·ßyy*¿AT”p$Oœ€Í›Umútq¼ñFß®ã*µS#Í¡·{³b_B™ƒÖÒ$46Žïæ›áúëÅjw=ä‡7¨”‡V+6›MìC‡úv-—Q¨†@ëíÞ¬ØÙ[æ õƒ4 M ã3™`êThÒD¤<\Æ›jTšö­VlsçBI \wÈ ø‚«ÔNJ½Ý›)K´XŒ%È0¤@K“ÐØh_B|ú©øý®»àØ1/Þ£ÄÄÀòådîUÇŒ›1CoºÉ÷k©Yj§·{³B Ãb5n‰0¤@K“ÐØhßUW q>z&MRqG𑇶Ûi_TäóåNœ‹#5n,æÂøŠš¥vz»7+f†ÆhÜÿ`H–&¡±Ñ2¾7%‘€c …IDATß„-`Îøî;/\¾ÍIºkèë3fˆúíQ£ÔùÖîh5JíôvoZÂŧ¬#$Zã–øC ´4 –ñÅĈY†&üýïpð Jî߀î>]FQDÕ ÀwøÚ(AtX4‰Q‰8u‡ÓáÓµôvoZBJpX‚Ï ƒ ´4 Öñ]|±ØÃÐfƒnfœÏôî  ö+|Ê,^ ;v@Ÿ>"µ­­´¦ÔYJV^–O×Ѻïªc±ˆÎsšƒ¯Ä *ÐÒ$46zˆïÅ…®Y£Ré]TtíJæ‘#>í^ëZÇúÞ{UhS%ÔÊCë¡ï*c6 vHÖÒ$46zˆ/, fÍFÜûïôi*\´Ú¬\éÕË%€II¢n[MÔªäÐCßUÆ¢ˆíTx9ÕRçR ¥Ihlô_r²˜­g6Ãøñ°u«ìߟtðZ ?ø@lÕ5a‚ïµÏÕQk6¡^úÎ…Å$ªfJ¸Æ-ñ†hi=Å7hHwŠI!6›ëߟîà•@Ûí¢N;$D´ÚTTrø8‚ÖSߘ‘wJÖÒ$46z‹ïÑGášk`ϱ^‡×_óæØSR`Û68uÊ£—¾û.œ<)LËfͼ|ÿ:Pk­·¾³8D{N•¿rèC ´4 Þâ3™DéÝyç‰)Ö¯¾êýµ2/¸@(üêÕn¿æøq±óKH<÷œ÷ï]M¢›és-´ÞúÎâZàp„jÜÿ`H–&¡±Ñc|qqbòJd¤Ø|æLï®ÓþÊ+Å/¤9þýo±ÊÞĉb£`2™hÕ ¹E¹äæz}½õ©¸œeÁ·T ¥Ihlô߈j“ n» ~ýÕók¤7l(~qS ÷î 9ÅÄÀÓO{þ~ž F©ÞúÎThÇL!ŽR‹ÖMñ †hi=ÇwíµðÑGPZ*LÃ?þðìõݯ¿bcÅ KKë=ÿ‰'Äi> ‰‰^6ÚMÔ(µÓ]ß`¡G‰hÝ MBc£÷øîºKä„ àÊ+Å–Yîb/.3` aÓ¦:Ï5K¤Rš5ƒÉ“}l´¨aê®ïìv,¡8L8KZ·Fu )ÐÒ$46FˆïÑGŠÓ'Å‚ùîŠtfffÅÂIu¥9öí&|ùe`ÖšW£ÔNw}WP€±#°Ó.ZH“ÐØ!>“ ^{ ƃ¬,±šhù¾°uÒ¾}ûŠ…“jè’±U^<ö˜÷ÂzŠkíK%‡îú®| à(ðm!(=bH–&¡±1J|f³˜<òÄb˰aðùçu¿&==½bá$V®<«¨Úé„€õë¡_?xþy?P´ø42lÞ¯¸§»¾+(­7¤IhlŒŸÙ,fº„ùÎ;…`;jÑ‚îÝ»W,œDvv•…“ÊÊÄ¢~(vxùþûÀîÒAbT"YyY8ïÒºë»Jí,)] MBccÄøÆƒ_~›¸¾ü²ýÖ4˜¬ˆ­Zš£°FŽb’“aùrHM Pã+‘—J‰£„£G½z½îúÎnÇ,GÐúBš„ÆÆ¨ñ $&öêk×BÏžbë¬;ΜS[¹@;W¬äË/¡];øáq\¹´J妯‰O…L›w} »¾+(ÀRnJÖ Ò$46Fޝ}{XµJ¬<+Ò:‰´ó¿ÿ ëÖµgÑ"˜•-ú¯/W2nœØ¹eÄíFÎ.|hÝõÝŽ…ò%G¥@ëi£Çg±ˆiÙ»wÃ+¯ˆQñÚµb&à˜1é\vÜ0¹9H£Mñ6†õ9ÅÊ•ðßÿŠõ§µ$5Ö7Ö]ßT¤8‚±ÌÎØ¥Ihl‚%¾ÆE½ô#ˆ‰ƒéé•ÕC‡Ê…xuÌ«2øùéÕ˜ú]¡usH‰K¼hÝõÝŽÅT JpŽ  )Ðç‚Ihµç>|ñ™Lbò`Ÿ>Õb›ÚV}‡iõ*¸RíkŠCw}WP€%Ì ÅÁ)ІLqH“ÐØs|UbëÝ[×­Ó¦15t&¡ÝŽ%\ÔšË2; MBcÌñU‰­sg±wÕúõ>íô­&‰Q‰„Y‚Ã$,+ƒ’ÌâŸr­¤Ihl‚9¾*±……A—.pâ„O;}«‰Ùd&%6…cöc–züz]õ]ù7iKù~±R u‚4 M0ÇwVl={Š£ÓYyY¿VW}W>iÆb2ŒU†èsÁ$ f‚9¾³bs ôúõoL-øRÉ¡«¾+A›ËZŽ u‚4 M0ÇwVl=zˆ£GÐÞ´®úÎ5‚ŽÅhR u‚4 M0ÇwVl:ˆÅ“6lKÙé_&«èªï\9h)ÐþçÞ{ï¥]»väääâ«Ô-·ÜÂĉyüñÇ«œ›‘áýr‰F`Μ9Z7Á¯s|gÅf±@÷îŸ/¦ꀊtžç­«¾s cÄŽÞj”ÙÙl6Ÿ¯¡&ºè)S¦Ð¯_?L&3gÎdĈ|øá‡äææVùjå:'X±X‚s5Á_±é,ÍáKŠCW}çÊAdžꌠÏyÞ¿?W\qE•Ÿï¾ûî¬ó²²²HNN --ƒV<çÔÉWEQ\\¬uüJ0ÇWcl:«äðÅ$ÔUß¹FÐqá@p¦8LŠ¢lºhÝ€qãÆñÊ+¯””ÄW_}EXX7ß|3'Nä‰'ž µ|°óÏ?ŸÄò-ãââ‚.'m³Ù‚.¦Ês|Ág|6›­bä|ôèQ¶mÛ¦q‹Î ~á…˜6m}ûöåᇦU«VŒ?žøøxbbbxå•W´n¢D"‘Ý´;Øívîºë.bcciР/¿ü²ÖMR•E‹1}útÊÊÊhݺ5O=õ”ÖMR•²²2†Î¥—^Ê£>ªusTEQž|òIrssiÚ´)Ï<óŒÖMR•Ç3yòdš5kF~~>Ÿ}ö™ÖMò™¬¬,žyæ¶mÛÆÚµkÙ±cÏ<ó ‘‘‘ >œn¸Aë&êÇ$t‡ºŒÃ``ðàÁ|òÉ'|ñÅ,]ºTëæ¨Î믿ÎÈ‘#µn†_˜3gýõ‹… hÝÕY·nƒ âí·ß¦¤¤Dwfš7$''óùçŸWÌL~ýõ×™:u*ß|ó Ÿ×·;p€0”@×e_|ñûÛß´n†ª,[¶Œ„„Ú´i£uSüŸþÉ…^È”)Sغu+û÷ï׺Iªr饗òí·ß2vìXE º<4@vvv…·¥—jC tJJJE tFF)))·H}Þ|óMìv;÷ß¿ÖMQ•_ý•íÛ·3eÊæÍ›ÇÞ½{µn’ª¤¤¤Ð°aC@¬sêÔ)[¤._~ù%O<ñ_}õÉÉÉlÙ²Eë&©N“&MÈÎÎÀQÛ¶íÆp9è`6¿ýö[þõ¯qÙe—a±X˜2eŠÖMReË–ñÇðÈ#hÝU),,düøñ4lز²2¦Nªu“Teûöí<ÿü󤤤ͧŸ~Jdd¤ÖÍò »ÝÎC=Äüùó¹êª«˜8q"ÿþ÷¿±Z­\qÅÜxãZ7ÑX-‘H$ç†JqH$ɹ„h‰D"Ñ)R %AÉÂ… yæ™g8pà7Þx#ŠN¶œ’H}øòË/y衇‚~›4Ip"Ëì$‰D§È´D"‘è)ЉD¢S¤@K$‰N‘-‘H$:E ´D"‘è)ЉD¢S¤@K$‰N‘-‘H$:E ´D"‘è)ЉD¢S¤@K$‰N‘-‘H$:åÿú”ý„o·yIEND®B`‚mpmath-1.0.0/doc/source/plots/ber.py000066400000000000000000000003101316273626600173340ustar00rootroot00000000000000# Kelvin functions ber_n(x) and bei_n(x) on the real line for n=0,2 f0 = lambda x: ber(0,x) f1 = lambda x: bei(0,x) f2 = lambda x: ber(2,x) f3 = lambda x: bei(2,x) plot([f0,f1,f2,f3],[0,10],[-10,10]) mpmath-1.0.0/doc/source/plots/besseli.png000066400000000000000000000452351316273626600203650ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíw|Åú‡ŸT’ „¡w¤IQ@¥QAŠ‚ *¢‚^÷^ëõ¢  ¢øAAÀ\@š "RD@„„ÞK$!¤''õœýý1&´$œ²{v÷d>ùœdsv÷ýf6/“ùμã¥(Ê: ‰D"1¾ˆäÜNï@$‰Dr=Þz ‘H$’â‘ Z"‘H ŠLЉDbPd‚–H$ƒ"´D"‘™ %‰Ä È-‘H$E&h‰D"1(2AK$‰A‘ Z"‘H ŠLЉDbPd‚–H$ƒ"´D"‘™ %‰Ä È-‘H$E&h‰D"1(2AK$‰A‘ Z"‘H ŠLЉDbPd‚–H$ƒ"´D"‘™ %‰Ä :Aoß¾.]ºðüóÏóÝwßéŽD"‘¸C'hooo*UªDzz:uêÔÑ;‰D"q+^Š¢ÚéHiäää0`ÀvìØ¡w(‰Dâ6|õÀðö¾ÚÙoܸ1uëÖÅÛÛEQ¨_¿>iii”/____’’’¨R¥ŠiåææR½zuCĢűôôtE1D,j‹MgÇ¡íž{ì<7*ŠòÛ·ã[³&I:ióΓ;¹{•;вvK‡Î=þ<5r9¯X/,û-4+ ¬k˜®ífµZÉÌÌ$##ƒììlŽ=ªc¶»EQ*eåÊ•Êøñã•Ñ£G+_}õUÑñ;ï¼SǨ´çóÏ?×;Mñd}÷Ý÷¹ŠòÁœ4uª¢€¢|ø¡fq]K›ÿk£ð.JTj”ÃçªÕvG>ªlc›’ük²*×S‹^½zéÂuº=|øp†~Óñ   ¢qaaaz‡ )ž¬ïøq¡mèPNúé'ñ:`€úÝÀå¬Ë¹|„&¡M¨W©žÃç«ÑvŠ¢¶+ //*ÞYÑåëy2†6 KBQ½CЫժwšâ©ú.\€ÈH+-Z@‹vž”{ö@ݺо½¦ñlÜ@:_¶Ë‰Ì!/.àöÁøû¸|=5©T©’Þ!\‡)týúõõASŠû«Á“ðT}kÖ w¼÷¬(0x0xyiÙU~»ð½8— Õh»´]iTºÛXÉd‚V…‚‚½CЋŢwšâ©ú~üÀÂ!œ´nx–xŒDK"]ºPÞ¿¼K×r¥í ¨Èñgû1e‚–&¡¹ñ}'N@D´jíþ®¨n—6“Ž?ƒómWT ÉÏ‹ *¸GYÁ” Zš„æÆSô]k–Ѹ¥¶ädøýw¨Y:wÖ6À¿Qküœo»ìSÙä'åS¡S|U ÉȘ2AK“ÐÜx‚>E¹š }ôêñ[jÛ¸¬V4û—:O¾5Ÿm‘Ûô ¤KX—¯çlÛÉùÏÎaÊ-MBsã úþüΟ‡®]¯÷ùn©ÍÍÃ{b÷ž›N¯†½(çëúÒjgÛ.å·Bz:?»,bÊ-MBsã ú®Þ¸–RµåæÂ¦M}úhÜ5l:» €MÔY­èLÛ)ŠBêo©xùxQéÙƒvS&hiš³ë+(€åËÅ*í#®ÿ^©Ú¶o‡ÌLèß5±MgÔMÐδ儅¼„<*t®€oES.½Ð S&hiš³ëÛºU”íתW¿þ{¥jsóðÆ¥ŒKJ8D“Ð&4m¬Ê5i»ÔßR¨Ü§²*1”%L™ ¥IhnÌ®¯pxcÔ¨›¿W¢6E ÚË x@»à®áç³?êõžÁ¹¶+î-ÇŸÅ” Zš„æÆÌú,X½ZŒP<øàÍß/Q[DÄÆB·nP­š¶Aþ ÚѶS¬ ©ÛRñ.çMÅ®r¡£˜2AK“ÐܘY߆ byð`±Ê”¨míZñê¦á[[Îo!À7Àéí­ŠÃѶË<˜IAj»U”óŸÀ” Zš„æÆÌú —v7¼%hSX±B|îÐŽ²Î³7v/©9©ôlГ@?õ IGÛ®pxCŽ?;‡)´4 ÍYõ%'‹Yr¡¡0`@ñï)VÛáÃpò$tìM›jäßN¯»·ñ½ª^×Ѷ+4åø³s˜2AK“ÐܘUßÊ•Ÿ/ óûûÿžbµ-[&^GŽÔ.¸(š^×TÝÝZi;[ž´ßÓð ö‘õ7œÄ” Zš„æÆ¬ún¬\W7iS1inž4­ñ™ñDÄGШr#š†ªÛcw¤í2þÊÀše¥R÷Jxû™2ÕèŽ)jÒ$47fÔwö,ìÜ õêÁÝ¥”T¾IÛ_Á… böFýúÚù7›ÏnÄì //u ã;Òv)[ÿî-ÇŸÅ” Zš„æÆŒú¾úJ¼>ýté5ŽnÒ¦Çð†ÊË»¯Å‘¶“ T\Ç” Zš„æÆlúòóá›oDb;¶ô÷^§Íf³7¼¼ÄÀµ(°ð˹_ð÷ñWuz]!ö¶Õb%mO¾¡¾”oëÚ&eS&hiš³é[¿^lÀ}ß}bïÁÒ¸NÛˆM {ö„Zµ4±}÷‘’“Bú=\Þ=¥8ìm»ôÝé(y •{Éý]Á” Zš„æÆlúæÏ¯Ï>{ë÷^§ÍÆ7Àþ¶“Ë»ÕÁ” Zš„æÆLú"#á—_ vmу¾EÚ Ä¼<>\Ó¯E«éu…ØÛvEãÏÒ t S&hiš3é[¸PÌ”;|í¨”Y¤mûö«%ïªVÕ4ÆB.g]æ@Ü„4 y•æšÜÞ¶+H+ ý¯tükûØÜ=eU=S&hiš³è+( ÚËKÌÞ°‡"m: oN¯»·É½ªO¯+Äž¶KÝ™ 6Ñ{Ö*޲‚)´4 ÍYômÚ$<¾~ý AûÎiÑ¢ä剒wþþ0dˆ¦1^ËÚS¢ ÓýMï×ìö´\Þ­¦LÐÒ$47fÑ·`xµÇ,$<<¶l”8BÜ“¤²ó³ùùìÏ”÷+OßF}5»=mWT IŽ?»Œ)´4 Íô]¼?ý$vLq¤Bh‡tÞØza+YùY l:ßÍîs«¶ËË%ëp ¨¯]eC'è‚‚ÈôéÓo:îɘÉDs3è[´H¬33¦äÂHÅaIJµŸaÐ Í⻑OþÀæÚ©Üªí’N t`¨¦q”  g̘Áðb¦(I“ÐÜ]ŸÍvui÷3Ï8vnôwßAF†HÎÁÁêW V›•u§ÖáëíËýÍ´†[·]òÆ¿ô}2A«aôŽ;¨Zµ*M‹©Ÿ+MBsct}[¶@T”Xèhùæ»v‰OÜ8¼±;f7W,WèÕ !ÚŽy—Öv¶|)[Rðð&¤§4ÕÀ° ú—_~áØ±cÌ™3‡ 6pîܹ¢ï8q‚åË—³fÍV­ZÀÉ“'‹þü*42Ìzì?þ0L,Z 7L,Åæ`8ãÆ9xîåË„¯[GxP 趘W»µt ƒæ?«ïþ®¹ZÜûö/ÛOfZ&!½C8tâ!ÚÒžc¬Y³†™3g’––†¡På b`¶oß®LŸ>ýºcO>ù¤>ÁH<žøxEñõU”ÐPEÉÎvðäï¿WP”Ç×$¶â°ÙlJÃO*¼‹›ë¶ûǹ7Î)ÛØ¦Ä~®o®`´ÜbÇÚ(}éÑ£=zô¸îXY0 ƒ‚‚ôC3Œ¬ï›oÄ•'ž€G'!,Y‚zä "+ž#—p!õwÔ¹ƒ:ëh~¿ÒÚ.i£˜þ*ÇŸÕðC¥!MBscT}6›ssŸˆ‰Í›‰®V ú÷W=¶’Xsr  ýìBJj»ÜØ\²ŽdÔ<ˆÀFry·Z˜2AK“ÐÜU߆ pîôè­Z9xò’% (´xúiûŠv¨DÑôºîIÐ%µ]Ò&Ù{ÖS&h¹’ÐÜUß'Ÿˆ×É“<ÑfE;€ð;îP7¨RˆLä`üAšWiNËj-ÝrÏ’Ú®hzœÿ¬*¦LÐr%¡¹1¢¾ðpرš4pðä;áüy¸ç: ªI|űö¤¨½á®Þ3ßv¶<)¿¦àäMHw9½NML™ Ë‚IèÉQ߬YâuÒ¤Ò÷,–¿{ÏŒëVmîÞ€âÛ.mWÖL+•ûVÆ»œ)SŠa1åOSš„æÆhú.]å3BBàÉ'<9-M憇r›¶+–+üý;µ‚kqG÷ «§¯px£Ê}žý—­˜2AK“ÐÜMß_ˆ©uãÆ9±:{ùrÈÎ+ƒƒÝ¦mÃé Ø¶xo/÷ý§¯hzVS&hiš#é³X`Þ<1ñbÂ'.pÍð¸O›»§×r£¾œÈ,',”¿­<õdõ:µ1e‚–&¡¹1’¾%K 9~øÖ;vßıcðçŸÐ¼9tí ¸G[f^&›Ïm¦b¹ŠôjØKóû]Ëúäô:m1e‚–&¡¹1Š>› >ýT|þòËN\`Ñ"ñ:v¬Ø ÷h[wj99 n>j¡ªÀúäô:m1e‚–&¡¹1оM›àÔ)¸ûnèÜÙÁ“óòD÷ÛÇG¬ ÿwh[vTlðhëG5¿×\«Ï–c#ek >|¨t—gûBzaÊ-MBsc}…Sëœê=ÿô$&Âý÷CÍšE‡µÖ–œÌÏg&40”~úiz¯â¸V_êŽTlÙ6*÷«Œ·¿)S‰á1åOUš„æÆú‚­[¡aCxðA'.pƒ9XˆÖÚVŸXM¾-Ÿ‡Z=„ŸŸ¦÷*Žkõ%ý$~« ôlOHOL™ ¥IhnŒ ¯pìù¥—Ä(…C\º7Š ï»ïºoi­MÏá ¸ªO±)\Y}¼ Ê Ïþ}ÔS&hiš½õÅÇÃ÷ßCÅŠ7u€ícéRá0>ñø]ß‹ÕR[|f<Û"·Q+¸÷Ô»G³û”F¡¾Œýä^Ì¥ÒÝ•ð¯á^£²,aÊ-MBs£·¾ÿû?áñ=û,T¨ààÉŠruxã©§nú¶–ÚþwìØ#[ÄÇÛÑn¿:껲ú Õ†UÓ%޲‚)´4 Ížú22D‚öövraÊîÝpú4téRlMR-µýpô¹Í}ÜH‹-P…ÄU‰TZU·XʦLÐÒ$47zêûâ HJ‚Q£ ~}'.0ožx-alD+m‘©‘ì‰ÝC£ÊÜZ{ãFÂÃñ³}6› +P_®ÔS&hiš½ôefÂŒ¢÷üæ›N\ >^ÔÞ¨T {¬Ø·h¥mùÑå<Òú¼þ^£:t qõß½ça²÷¬5¦LÐÒ$47zé›;Wôž}š5sâóçC~><ó ”/_ì[´Òf„á úäø³û0e‚–&¡¹ÑC_V|ü±X‘íTï9/Odx//øÇ?J|›ÚN$žàPÂ!n«vmj´QýúŽpz×i2eÔ2ˆ ÆÜø×“0e‚–&¡¹ÑCß¼ybáß#€S·_µJ q •ø6-´-;&æ>?ÒZßÞ3@•Ãbx±ÚpÙ{v¦LÐÒ$47îÖg±ÀG‰Îï[o9y‘Ï>¯'–ú6µµ)ŠR´8Å zç’€v¦LÐÒ$47îÖ÷å—pù2Œ-Ù[õ¯¿`ï^1­®wïRߪ¶¶ˆøN'¦SíN4 m¢êµ%÷R.uŽÔ! AÁíÝÙ@â ¦LÐÒ$47îÔ—­BïùóÏÅë„ EeEKBmmßùÐoi÷µ\ùñ 9äPuXU]g’”%L™ ¥IhnÜ©oþ|1tüÐCpÛmN\ >^lXX©<þø-ß®¦¶|k>K/ÅÛËÛÉ«¹Ìe9{Ø2AK“ÐܸK_NLŸ.>wº÷\8µîé§KœZw-jjûéÌO\κÌÀ&©]¡¶j×u†ü+ù¤íH£IÍ&TìZQ×XʦLÐÒ$47îÒ·`ÄÅÁðáÐÆ™Ùiyybú‡—¼ð‚]§¨©í눯xúö§U»¦³\YŪpW^ÞrxÃ]˜2AK“ÐܸC_NL›&>ûm'/²j•Èð·˜Zw-ji»”q‰g6R½|uhö€*×t…ÂÅ)=Æ÷Ð9’²…)´4 Í;ô}ýµ(ÛK·ºÝhQUÿg!á»jŒªAå•uަlaÊ´4 Í–úââļgÿ«cÐãàÔºkQC›‘zϹq¹¤lMÁ¿–?!½B<þÙ4¦LÐÒ$47Zê{ç1Ä1a‚ØÖ)æÎuhjݵ¸ª--'ÿûÁþÁŒ¸m„K×RƒËË.ƒ ª?Z//6†)´4 ÍVúŽæ`h(üûßN^$#C oøú:d⪶eG—‘]ÍÈÛFì¯ÿrê„oÿÞ]ðügÓh˜2AK“ÐÜh¥ïõ×Å^®o¿ •*;RR`ôh§¶\qU›‘æ>[NZÈ ¥E koxú³i4L™ ¥Ihn´Ð·e lÚÃóÏ;y‘ìløäa N™âÔ%\Ñv$á]ú‹–U[Ò%¬‹Ó×Q‹"spt¢Úžþl Ã&èƒòüóÏ3vìXÞ¾a®”4 ÍÚú¬VxõUñùôé tŠ… !!AîhÞÜ©K¸¢íÚÞ³ÞňE¹š «QtÜÓŸM£aØivíÛ·gîܹôë×ïºïI“Ðܨ­oÉ8|ºuƒaܼH~¾˜þð¯9‹³Úr rYzx)¾Þ¾<Þα™#Z¾'œ 9Tº« ®n ëéϦÑ0l`õêÕ 8nݺ]w\š„æFM}YYW·°š9Ó¡)Ë×óí· ÷ßïÂäiçµ­=µ–äìd5DõòÕ¾¿ZÜhâéϦÑ0t‚6l›6mbÿþý׃çÏŸgùòå¬Y³†U«VpòäÉ¢‡§ðÏ0³;uê”abÑâXtt´j×›6ÍÂ¥KЯ_8]º8y½¿þ‚iÓ8 X&OÖEÛü½óèáßC÷6ÊLÍ$qE"g|ÎPíáj×½ïçŸÖ=>µEDD°fÍfΜIZZFÂKQ”ƒ@;½¹‘Í›7³qãFòòò`Ö¬YEß3f ß|ó~ÁI A|<4i"F'NžtaÞóŠ0r$ôì Û¶©¢]D§EÓàÓÔªP‹¨IQøzë;òxeýŽ>J•ÁUh³VßMjÝÑr‹aÇ  À€Šý^Y0 =y¬O-}o½%†8^yÅ…ä¬(W w8=yú*Îh[±…1íÇèžœ.wK»oÄÓŸM£aè!Ž’&¡¹QCßž=ðÕWP¥Š‹yõ§ŸàÐ!èÜúôq9.Gµåä2ïÀ<¼ð2ÄÜç‚ô®¬½‚Oª ºù÷ÌÓŸM£aÊ-MBs㪾ü|?^|þñÇ.,JQ˜:U|þï»à0^ÅQm+Ž­ >3ž[B½ªqŽhûôÏOÑ{Ö{å @ÜWqÔz¦^>ÅÇãéϦÑ0e‚–&¡¹qVßêÕÂÓkÒÄ¥Å~‚ÂÕ-S¦ˆÊu*a¯¶ÈÔHÖœ\CõòÕy¤õ#ªÝßYly6⿉ÇËÇ‹šOÕ,ñ}žþl S&hišgô¥§_­þ9w.ºÀ¯¿Š¦MáÉ']¸ÐÍØ«mξ9ØÏwzžr¾åTÁ’Ö%‘9Ÿ*T¡\’ãñôgÓh˜2AK“ÐÜ8£ïÍ7Å6V=}ûºps›íj¥º©SÅ`¶ŠØ£-#7ƒ¯Â¿ÂßÇŸç:=§êýåÒüKÔW«Ô÷yú³i4L™ ¥IhnÕ÷×_0g„„ˆj .±r%8:‰ªu*c¶Å‡“–›Æ£­¥fpÉà î"û|6)[R(W·¡BK}¯§?›FÔ Zš„æÆ}bγ¢ˆR¢5ŠŸýeùùWWµL›¦Ê¼ç¹•6›bcöŸ³xéΗT¿¿3ØcâéϦÑ0e‚–&¡¹qDßœ9!J‰>óŒ‹7þúk8{úõSeÕ`qÜJÛÆ39›|–õ{p{­Û5‰Álù6âƃ7Ô[úðxþ³i4L™ ¥IhnìÕwꔘ­áë óæ¹8U9+ Þ{O|îôvß·æVÚ>Ý+¦Ö¥÷œ´>‰¼„<ªÜ_…ra·6+=ýÙ4¦LÐÒ$47öèËÏÛfgûïBW‹ªÍž-Êß öKÓv$á[/l¥AH7¬Y Ž7_ oÔWÛ®÷{ú³i4L™ ¥IhnìÑ÷þû°?tí*¥¸DR’Àöõ…ÿþ×Å‹•NiÚ Çž'Þ1ï›ë\¸›ì Ù$ÿ’L¹°r„Þ[º9Xˆ§?›FC—ÉÂ… ùì³Ïعs§ÃçK“ÐÜÜJßž=b\p0,]ªÂ:’?©Ÿ}V¬rÑ’´%f%òíáo öfìíc5Á^⿎j=] /_û SO6†Ûôĉ™;w.UªT¡E‹„‡‡óä“OrìØ1»¯!MBsSš¾ÌLxüq1]ùÓOÅJl—ˆŽNcPܰù°”¤mÞþyäZs{ûX*èÿ -ßFÜÂ8ð†šcíŸêçéϦÑp{uðiÓ¦TôuÿþýÇ̇²`^û3ò4JÓ7y2œ;>cÕèh¾û.äæŠéu5µŸs\œ¶ŒÜ fí…—y ö´6‰¼¸_š„æ¦8} Wç9/\(’´K( ¼ô’+ù÷¿ÁMÏÌÚ2ó2™¹g&Þ^Þüû×·ÔRƒô?ÓIßNPË *pl·O6†.&aÏž=9w‰ôêÕËáó¥IhnnÔ§(¿KL«ï¿_…›¬Z% "µh/¼ ÂíãFmsÿšKRvµyŒ¦Ušº-ŽÒˆ @ØËa—9õôgÓp(ŠrPq3ãÇW,‹rñâE塇røü'Ÿ|Rý $º1¾¢€¢4i¢(™™*\03SQêÖݲE… :Fn¦Rí£jŠ×»^ʉĺÅq-Ù‘ÙÊvŸíÊ®ª»”KÞá£å]zÐóæÍ#00Úµk³lÙ2‡Ï/ &¡'s­¾ˆQFÔǾýÊ—Wá|11¢’K¥ïçZm_ø’DK"´~„U14pñó‹(V…ÚÏ×.vÏÁ[áéϦÑp{‚~î¹çX²d §OŸ&&&†íÛ·3yòdöïßo÷5¤Ihn õ%'ða“}wÞ©ÂÅÏœ3Ä´:—Kß9N¡6K¾…þø/¼x³û›n£8 2 ¸´à^þ^ÔùG§®áéϦÑp»Iظqc|}}™?>YYY´iÓ†7ß|“ÐPûV24 ÍN‹-°ZaÔ(±ÇàˆðòË*\XQDwÁêŒ)yʳiL™ ¥Ih|E§öÊÑѽv¥ Ëú’“EÙ;…£CB\»ž‹üû·“]ÍË]^¦wçÞºÆRHö¹l¾MÀ7Ô—:/ªÓ{Ïx6Í„)´4 Å"zÎçΉiu3g^¿RÐe}“&‰¡'ŸT©6©ó¸t€%‡–P½|u¦Ü=Å0m55 ŪPwr]|+¨g5E_YÁ” Zš„ÆÅjcÎûöA·nbâÆ.é[¿^ f`hCQ^ùåþÓó?T,WÑm—}>›„% øVö¥ÎõzÏ`îgÓŒ˜2AK“И( L˜ †‡›5¯7¿Ïi}))×mTvl7µYwj;¢vЪZ+žîð4`Œ¶‹þ Ūör¾Õ¨e}e S&hi“?„¹sÅvU?ÿ,¶,§õMšqq†ÚÈ·æóú¯¯0£ß |½E"Ô»ír"sˆ_oˆ/a][Ö]zë+kzôÖ­[Y¶l4nܘ7ß•Á¤Ih<>þXlýW¾¼X7Ò°aÉïuJßúõ°d‰!†6æíŸÇé¤ÓôkÔ{›\â§wÛE}…R 6) ßJêÿzë­¯¬aètŸ>}X°`‹-bûöíEÇ¥Ih,f΄×_5ò7n„NJ¿Ãú 6´‘š“Ê{;Þà /fôŸqݾ~z¶]NTñ‹âñ­äKØKê÷žÁ|ϦÙ1t‚.dÑ¢E <¸èki‡Y³Ä ëÂäܽû­ÏqH_ᎲqqðĺmLý}*IÙIŒ½},mk´½î{z¶]ä{‘( u^ªƒoˆ6›éÙô Ÿ ?ùä, 'N,:ÅòåËY³f «V­àäÉ“EFáÿòf=våÊÃÄRÚ±W_ gòd(Wî$+WZèÑþs-‹ý÷ýç?aÕ*NÖ©ƒeÚ4ÝR.0{Ãl‚” Þïõ¾kÚT<–y(“‹vâWͬAYšÝw÷îݺýìµ:Áš5k˜9s&iii E‡]½íeéÒ¥J“&M”çž{Nyá…ŠŽ2DǨ´çÄ cì]Ÿ}&6ÍP”­[;×n}Šâï¯(~~вoŸãAªŒÍfS}?Há]”÷¶¿Wì{ôh;›Í¦ì{PÙÆ6%vN¬¦÷2óé FÛÕÛÐ&áèÑ£=zôMÇ¥I¨/_|!¶þ Þ]oÏÙ¥/#ClV˜—'ÆQ:wv.XYubëO¯§q导ÖíµbߣGÛ¥lN!å×›Rk\-MïeôgÓÓ0üGqH“P?>ÿ^|QT¦[»úöuü·Ô§(ðÜsb‡îÁƒÅZqIÍIe¦ |ùÀ—ú3Á÷·R pîÕs4þ¨1Þ~ÚþJùÙôDL™ ¥Iè~EÔß8ñjrîßß¹kÝRߢEðý÷¢xô¢E*í(ëS~B|fú”ø>w·]ü7ñdË¢R÷JT¬ýï…ŸMOÆ” Z®$t/ùù¢¢ç‡ŠºD[¶¸¶í_©úŽ]tøáppÇw-ؽ‹/|IÕ ªÌè?£Ô÷º³í¬™V.¼u€Æ3_7ÝO+Œölz:¦LÐr%¡ûÈÈ€AƒÄ‘°0ص î¹Çµk–¨ÏbãÎÙÙðßÿÂ]w¹v#È-ÈeÜzQBtÖ€YT ªZêûÝÙv13cȋϣúcթع¢[îi¤g³,`h“°$¤IèÄ´ã ukØ´I$iW)QßK/Áñãbìäõ×]¿‘ Lÿc:'®œ _£~Œj3ê–ïwWÛåÆåýQ4^þ^4šÚÈ-÷ã<›eSö ¥I¨=gΈjtˆÅ'¿ÿ®Nr†ô-^ _}5kŠjuÞú?š'¯œdêïS ô dÞóìBpWÛE¾‰Íb#ì¥0¸o«/#<›e ý œ@š„Ú²w¯HÎçÏÃCÁæÍêÖÄ¿IßîÝbËïÂqçêÕÕ»™“ØãÖ#ÏšÇ;=Þ¡Qeûz©îh»ŒýÄ-ŒÃ7Ô—úÿrï.æz?›e S&hijƒ¢À¼yУ‡Ø eÂX¶Lý½X¯Ó#ªúçåÁgŸAÏžêÞÌIF,ä÷èßi[£-“»N¶û<­ÛN±*œ lÐèÃFš-é. iºS&hiªOv6<õ”Ø$[QÄ&Ù³gß\l_ ŠôeeÁƒŠÁî矇üCý›9ABf¯my /¼X0h~>~vŸ«uÛ]üâ"™á™TìZ‘ZÏh»(¥8¤Iè^¤Ih@ÜmÄœ?ÇÃÁƒ¢šçʕе«v÷kÑ¢…Øæ{̈ˆ€^½Äÿ@QžYÿ ©9©L¼s"wԹáóµl»Ü‹¹\xó^>^4›× /o÷Ï—&¡{1eZš„êñÓOб£HÎ={Bx¸¶ÉþÖ÷þûâ‚Fàÿ?û{©Z2wÿ\6œÞ@ÓЦLí=Õáóµl»³“ÎbͰ69Œà¶ÁšÝ§4¤Iè^L™ ¥Iè:V+¼óŽØÜ55UÌjÛ²jÔÐüÖt¸pÞ}*Tûb¤=]>Æ+¿¼‚¯·/ßÿž`Ç“ Vm—´1‰Ä•‰”«WŽï4Ðäö MB÷bÊ!޲`ivý¤$5JÌΨPA¬¦>\³Û]ÏÁƒXœ //±œû¶ÛÜtãÒÉ)Èá±Õ‘Sô>ÓèTû»”€mgµX9óšÎiŠOy Œ;ÑúÙ”\){ÐÒ$tž_…DrnÕ þúËÉ9>&:;¦MÝwƒðÏ­ÿäpÂaz5èÅkw_©Î´h»¨÷£È‰Ì¡êЪTTúJF­‘&¡{1e‚–&¡ãddˆqýúAt4<öüù'4o®ú­Š'5Uðˆ‰¡ÅèÑðšóIPm~>û3Ÿîý”ÐÀP– ]‚·—ó¿j·]Ö±,bfÄàìC“ÙMT½¶3H“н˜2AK“Ð1~û Ú´/¿„ªU…'÷Ýwì.ŸÉb½åÇ¡_?Â_xÁê.g]fÌš1|5è+Â*º¶\RͶ³åÛ8ùÔI”…ÿi@@]÷­, iºSŽAK“Ð>23á7àÿþO|ýÐC¢Ø¾[êåå‰ÿñté«WÓÁmÿ3”Ž¢(<µö)²x¶Ã³ m9Ôåkªi¢E½EÆ_TìZ‘° Úlë(Ò$t/¦ìA—“ÐU¶o‡¶mEr®R–/=g·&ç¹Λ6 3ð§Ÿ 8Ø0«Ñ¾øë 6žÙHó*Í™5`–*×TK[Úî4¢¦FáìCË¥-ñò5Æ_Fi»²‚)´4 K&=]”SîÕ .\àñ㢊§[Q±Vü‡ AáJþ]ÛÙFÓ‘„#¼úË«øyûñýðï)ï_^•몡­ £€£O€ š|Ö„ÀÆÅïÞ¢Fh»²„)‡8¤Ix3V+,\o¾ —/‹\øÅ0r¤Nýï¼#ºïÕ«Ã/¿@:EßÒÛhJÎNfÈò!äZsù¸ßÇt¨¥ÞŸíjh;ûÒYr.äPuXUjŽ©©BTê¡wÛ•5LÙƒ–&áõlÛ&¦Î'’óOˆIyD§ä<{¶X)X±¢è97mzÝ·õ4š lŒ\9’ó)çy¨ÕC¼ÒõU¯ïª¶ÄÕ‰Ä/ŠÇ¿–?Í¿lî–]RAš„îÅ”=hi Ξ³ÕÖ¬_ßu—6À^²&M%ð6l€öíoz‹žFÓë[^ç×ó¿Ò¦z=¸Hõ芶ÜK¹œzö-µÀ¯ª1–¿_‹4 Ý‹){ÐeÝ$LM…W_ MÖ¬úõ… øûï:'çµkaìXðõu6JØK/£iÉ¡%ÌÚ;‹ÐÀPÖ>²Ö©¥Ü·ÂYmŠMáäS')H. Î„:„Ð/Æâ&¡{1e‚.«&¡Å"Fš6…™3ÅîÚ|'NP׿†W¬Óé¬Vøæ±WV èa4í»¸qëÇáãåÃÿþ +7Ôä>Îj»øÅER~I!¨e¦»o +G‘&¡{1åGY3 ÓÒ„ß6k$&ŠDyËSÜi4åä2lÅ0.e\â©öO1ᎠšÞÏQmiv [ކÿmH…Û+h™:H“н˜²íé&a˜¥Qš6¥@áØÈcäDæP}duêM1ÒØ•}îÙôpL™ nFGÃ?ªU°k—¶Q7hÈ1+íÎ;K^Xb(#æÌ1;ãôi±l{ýzs­6±úÎ%ŸãÞoï%=7·º¿Å„;µNW¥i;÷ê9RK%¸]0Í¿6^ {0Ô³Y0e‚6šI˜› ûö‰Ìë׋}þ ©S† лï;Ö DGGc¬oÇ|r2 ¬Ú6,jë‹Ëˆ£ßÒ~$d%ð\§çx¯ç{ª]ÛQJÒ÷U±³cñ«êGë5­uÝøÕ ól–L™ õ6 ssÅ~~Û·‹¶{7ää\ý~£F"!.fgx;8Òoˆ_€E‹„c™Ÿ/æùM›fßÿ.v ¦¾”ìîýî^.¤^`Äm#˜3pŽ®=Óâ´%®JäÔøSxùyÑjE+è¿u•³âÙ,C˜2A»Û$ÌÈ€ðp‘·o‡½{¯OÈ•*‰ÍX{ô€¾}ÅN&®äˆððpýÆúl6±lqút±BfÁxæUo¡–¾Ä¬DúÛŸÃ ‡éרK‡.ÅÇ[ßžéÚ’Iæø£ÇA–ß¶¤r/#Nϱ]ŸÍ2ˆ)´V&a^œ:%fS9rõ52òú÷…„@ÿþг§HÊíÚ©Ö¹t4b,xüqáh†„ˆÕÎq¶5ôÅeÄÑwi_Ž'§wÃÞ¬¹¢skµ¥íNãèУ(ù Íæ7£úwî7¦ 29»C'èØØXÞ~ûmŽ=ʾ}ûŠŽ;k*Š(¢£Å–PGŽˆä|㥽¼ qcÑ+îÞ]$å6mÔMÈ7¢‹+Ì„à @£?g]ÕMŸ%}8›|–ûšÞÇʇWègŒm¡ µeÎäÈýG°Yl4þ¸1µŸuÏB­‘&¡{1t‚ cáÂ… xý\Öøø,"" ;[|ää\ý¼ðk‹ET~»6_º$¾_5kŠäÛºõÕ×V­ ¼:ÛÕÙÛ˜M›DÏ9)Iü/´zµØiV#\Ñw.ù½—ô&:-ša-‡ñÃð Ñs.$::šz>õ8Üÿ0©ÔûW=SÔØ°iºC'è’ØºµÎü¥ Mš@íÚbvEákË–bÓéªUÕÕÜö Ÿ/61üè#ñõ„ ¢R9mkV8«ïDâ ú,éC\fµyŒÅCãëm¬G¸apC"îŽ /!Úÿ¨MÃÿjSwZ/drv/¦\IX±â :v\ÎÝw¯¡gÏU<ÿ<Œs’×^³ðþû0iR8sæÀ'ŸœdË çÏÃîÝá$%ÁŠ'Y½ÚÂ×_ÃСá<÷Ô¨q’  ±SDáJ©“'Oíáîcüñ‡ö÷=}zö$ü£ R%NΞeÚ4(WNs½áá៻æ÷5tŸß¸Ì8†TÂ’!K8{ú¬nmTܱ´è4–ß³œÃQ‡©þXu¬/XÉþûO6#ħƱï¾ûÎ0±¨u,""‚5kÖ0sæLÒÒÒ0Š¢T JVV–2~üx¥^½zÊóÏ?¯äææ*Š¢(O>ù¤¾™õë%4TQ@Q:wV”óçõލTvEíRB¦…(¼‹2aãÅj³êÒMäÄä(¶üSÙÆ6åð‡kžñb”Ü£åcý}xAAAÌ›7ï¦ãF_Iè*š1ùùb ÝŒâëI“Ät:÷Žá:¢ïÛÃßòôº§É³æñÆ]oðaŸ ·ÏrÚÂáþ‡É‰Ê!èÞ Z­h…·Ÿ)ÿ8½%Ò$t/¦|ŠŒ¶’Pm4)é% À3ĺ5kÄZnNÎ`Ÿ>›bã­moñøcµYùâ¾/˜Öwšá’sFDwG•CõǪüQ°¡·¬rYnÔ½º]z¯$ÔÕ˜uëD%º”Qdùr±–NÜJ_v~6cÖŽaűT,W‘­`@“nŠÎ~Rw¦rdЬéVê¼X‡&³›˜¢è¾+H“н˜²mÖr£ö¢ZIÇÔT±™ëƒŠäüÊ+°s§®ÉJןOÏÅ=Yql C²çé=†LÎI’8<à0Öt+ Þi@“ÏDröôrœž®Ïh˜²m¦r£Î Êj­ D-K—Dý毾²{Ï@­)Ißá„Ã<ðýĤÇЭn7ÖŒ\CµòÕÜÝ­Iø6“cN¢XšÌnBØÄ«Õý<}¥§ë3¦ìA—“Ði’’`ôh4H$ç'žK% ’œ¡x}+Ž­à®…w“Ãè¶£ÙúÄVÃ%gEQˆž͉ÇOÐriËë’3¸Øv&ÀÓõ S&hi–ÀÊ•béãw߉8?ý‹‹:âZ}–| ãÖcäÊ‘dåeñŸžÿaÉ%ø«â›5ÓÊñ‘Ç9?å<ÞÞÜöãmÔ]ã¦÷yº‰æéúŒ†)‡8¤Ix ðâ‹"A<û¬XhПS¡¾£—2råHŽ'§Fù,º”~ûéÝÍdŸËæè£dÍ" a­lMp»âëb{º‰æéúŒ†){ÐÒ$üE»ÎÞv›HÎõëÖ-b³Cƒ&g€°àÀ:/èÌñÄãôoÜŸCÏ2drNþ9™u4‹Êý*Óñ¯Ž%&gð|ÍÓõ Sö ¥Iœ=+šüô“øú…DQ}v<Ñ’´œ4>ºð+Ž­Àǡi}¦ñÚ]¯áíe¬¾‚¢(ÄLáü¿Îƒu_¯K£áåSú4:O7Ñ<]ŸÑ0e‚. &a‰«µÒÓaêT±È$?_Túúk±Åà컸GV>Â…Ä Ô¯ZŸ†ÿ@׺]õë& 2 85ö‰+ñò¦ÅÂTi_-gO_içéúŒ†±º-vR&MB›MlCÕ¬™¨>çï| Y<9ç[óùà÷¸ká]\H½@ÿ*ý9øÜAC&çÔßSÙßn?‰+ h@‡=ìNÎàù&š§ë3¦ìA—9“p÷nxé%Ø¿_|ýøãðá‡b¦†ÁÙ»—qëÇqäòÊù”ãóû?g|Çñ†[²m˵qá­ Ä̈ª­Jó¯šãêçÐu<ÝDót}FÔ=è2cÆÆÂ¨Qp×]"9ßqìÙK–>9§ç¦óâÆéöu7Ž\>BÏ=9üüažëôz‡w™‡29Ðé1ÇàSÁ‡KZpÛªÛNÎàù&š§ë3¦ìA{¼Iز%ü÷¿¢—l±ˆ­^¦O PÝ"\~<ñ#/nz‘K— eF¿Œi?¦¨×l£I±*Ä|Ã…·/ ä+„ô¡Å¢Ôs~¶Q´i…§ë3¦LÐk* ¬\‰å•WЉãÌÿü§ø¨PAïènIlz,/n|‘µ§Ö0ªÍ(>ð ÕË_?†k£)ëD§ž9Eúît¼¼i<£1u^¬ãr±##hÓO×g4Œß+3 Ö¯‡ŽaÄ¢cbÄ®'N#ÐàÉ9ßšÏì½³iùEKÖžZKÆl½™o‡}{Sr}¦‚Ôξ|–ým÷“¾; *Ð1¼#aÃT©Dçé&š§ë3¦ìA{ŒI¨(°y3¼ý6üõ—8Ö¹3->üúôÑ76;°)6V_É¿û7g“ÏâãåÃw½ÁÛ=Þ&ȯä^–F“bUˆ[Ç…_ ?1Ÿ >4x§u&ÖQµ¸¾§›hž®Ïh˜²mz“PQà×_…ù7p Hηß.zÑþIxåÊzGxK~»ðw~u'#WŽälòY4@øøp¦õVjr÷Mi¤q óN;M~b>5ÇÖäÎ3wR÷•ºªï|âé&š§ë3¦ìA›Ú$ܾ]ô˜ÿ]|ݶ-¼÷ž¨Ùl0­8ÆdʯSØ|n3kudzßéôidß]úrcs9÷Æ9.€Š]*Òä³&Tì\Q³{¹íÔÀÓõ S&hSš„ü!óo¿‰¯[µ‰yذ›ffш9Ÿrž·¶½Å÷G¾ Ih¦öžÊC­rx™¶ÖúòSò¹8û"ÑGc³Øð¯åO£é¨1ª†æ;ž±íÔÄÓõ S&hS™„{÷Â;ïÀ/¿ˆ¯›5ƒwß…#À§ø½ë¢££ 3Öw<ñ83÷Ìdé¡¥äÛò©Q¾ïôx‡g:<ƒŸãó„A;}y—óˆËÅ/.bͰâåïE½)õ¨÷¯zøVpÏ£n¤¶ÓO×g4L™  o*ŠHÈ3gŠêr‹Dýè£à[ú]ï_EQع{f°ñÌF*–«È[]ßâå®/ìïZA&µõå^Ê%æã.}y [¶ //j?W›zoÔ# {ëJëÝvZãéúŒ†)´aMÂÜ\Qþó“OàèQq¬aCxóM±³É-s!ááẌõå[óYy|%3öÌ ´˜=±{ðóöã©öO1¹ëdZWo­É}¯Å^}Š¢ñWqóãHø!›Å@p»`j¯EÑ«´lË 'IDAT5ÜfþÙ‹§›hž®Ïhëé¶]L‚XµJ$æÂUµjÁ„ 0~¼ª³ªý `µYÙr~ ‹-æÇ?’kÍÄT¹1íÆðÔíOQ»BmUïY·Ò—Ÿ”Ïå—¯ë-{ySslMj¯M…Î W®´OO^ž®Ïh˜2A»Õ$LO;–Ìž QQâX›6b|ù‘G œúf”ZF̉Ä,>´˜¥‡—r)ã fc<Ñî Æ´C×°®º$ºâôåÅçqeÍW%’º-Ū×ô–«o%ã?®žn¢yº>£aü'¾Üb†‡‹ÍW¿û2E/ŽDbîÛ×éñe{pö@Q'fÝ©u¬9µ¦h&†^ôoÜŸ1íÆ0¤ÅýÕ ×a õåDå¸:‘+«¯öGˆœŒ_u?ª ­Fͱ5 Ý[.OO^ž®Ïh˜2AkffdÀ²eðå—pà€8O=%Œ¿ÖÚÏ‚cFLž5‘;XwzëN­+š…мJsÆ´Ãè¶£ «¦U¸v£( Ù§³‰^MÖ†,2ög}¯\X9ª«JµáÕ¨tW¥[nÎjT<ÝDót}FÔ Zu“ðÀÑ[þþû«½åÖ­aÜ8Q$ßÍÅ‹neĤd§°éì&ÖZǦ³›HÏMDO¹kXW7ÌàæƒiYµ¥®½OEQÈ9ŸCêöÔ¢ÜØ\¢‰¦õlHÕá")›­§\žn¢yº>£aÊ­ŠI˜‘?ü zË…ºaÌ‘˜»tÑt£4nüHÏMgwÌnvFídgÔNöÆîŪXô  ¹Ù`îov?5ƒkê2PrB.‚;sÏ÷Pmx5Ê·)ïIùZ<=yyº>£aÊí’I¸ÿÕÞraO¼uk1côh Q'Høm÷od„f°3z';"wM±}¿zùê j6ˆÁÍÓ·Qß[–÷Ô [® Ë û3HÝQ|B®Ð±!=CéB¥»+áâKxx8 Û6Ô%f­ñtÍÓõ S&h‡MÂôtÑ[ž?ÿæÞòøñbÕŸN=9EQˆMeOìvFídGÔŽ^>zÝ{jW¨Mú=è^¿;Ýëw×eè"ïr™‡2É:”Eæ¡L2eb9aA)P®¾©„„|#žü îÉÚÀóõ S&h»LBE¹Ú[þᇫ½å6mDR5Êí½åìülŽ%ãPü!_>,^“’“rÝû”o@Ϧ=é^O$äF•¹-!+ –S–¢$\˜óâónz¯ Ê·+Opû`Bî)9!߈'Mž¬ <_ŸÑ0e‚.Õ$LOÃ_~ ŠcAA0v¬[¾ãÍ{ËŠ¢p1ã"‡âq(A$áC ‡8túº¡ €ß:ÕîDÇZé^¿;÷Ô»‡¬¸,ÍÆú«B^\ٲɉ̮¾æÆäÍA.ÄËÇ‹ò·•ɸ]pчMçê^x²ÑäÉÚÀóõ S&è›LBE«û {Ë‹8Þ¶íÕ޲ʫ-ù¢R£ˆLäBê"S#‹>Î&Ÿ½©W ¢2\»íh[£mÑkÓ*Mñõ¾¡œ U±*ä'ç“%ŸüÄ|rcsoJÀ9Ñ9(ùJ‰×ð¯åOPó ‚Û%äò­Êã ÷í³OÖž¯Ïh6A[,žyæ*V¬HåÊ•ùð˾U¸¢/-Mô–çÏ¿¹·<~²ÅkFNØÀKñÂ[ñÆ[ñ.ú¼ðµ Uh܆Úåk}Ô*_‹ZAµ¨áWƒŠJE‹‚5ÞŠí¼ k–•TK*ÉYÉX-V¬YVlÛu¯V‹[– «ÅÊÉŒ“ì(ØáÐÏË;È›€zøUõÕüð¯å}"®€OPñ»¸¸Ÿv’ñ™ í$66–Þ½{P¿~}bbbŠtbx.›?„ãíå—Õ ïÞxí÷Â{Br±×óÃпÿiE>ùÄëü¼Á'Èky+¡ø”÷Á¯ŠßuI÷¦Ï«ùáWÅω×^rssoý&“âÉÚÀóõ Ã&èºuëE·nÝˆŠŠ¢nݺEßSZ)|\ýc@ŒG~ ,IKKã|¥ó×Ìbþþ09iiilÚ´Iï04Á“µgêKKK+ê9_¾|Yçh®ÇKQ”ƒ@;½¹‹Å³Ï>KHH*T`Ú´iz‡$‘H$nŰ º8J3=ØØXÞ~ûmŽ=ʾ}ûôGU¶nÝʲeË((( qãÆ¼ùæ›z‡¤*äË/¿$77—°°0þóŸÿè’ê0hÐ zöìÉo¼¡w8ª²}ûv¦L™Âí·ßÎÝwßͨQ£ô í-{)4çÍ›GJJ ÑÑÑ·>ÉD„……±páBãí¹¨}úôaÁ‚,Z´ˆíÛ·ëŽê´oßž¹sç²páBöìÙ£w8š0cÆ ÁáííM¥J•HOO§N:z‡S„©tll,aa¢lf¡q(1‹-bðàÁz‡¡ «W¯fàÀtëÖMïPTgÇŽT­Z•¦M›êŠ&tïÞÍ›7óõ×_óÎ;ïèN¦JÐ…Æ!p“q(1>Ÿ|ò ‹…‰'êŠ& 6ŒM›6±ÿ~}÷ÍÔ€_~ù…cÇŽ1gÎ6lØÀ¹sçôIðö6NZ4ì,Žâxøá‡yöÙgÙµk!!!EÓî<‹ÅÂäÉ“9~ü8ÿøÇ?øôÓOñ÷wn9µÑøöÛo™;w.}ûöåÅ_dΜ9z‡¤*›7ofãÆäååѬY3Ê—/¯wHª2uêT@ô¤ÿüóO«°9²‘Xµj[¶l!++‹Ñ£GëN¦2 %‰¤,aœ¾¼D"‘H®C&h‰D"1(2AK<’_ý•·ß~›ÈÈHFމ¢Ü¢Š”Db@d‚–x$}ûöÅÇLJÇœ/¾øÂãö>”” d‚–x,/^¤R¥JX ëƒK$&C&h‰G2þ|ºtéÂ7ß|ÃäÉ“íÛ&M"1ršD"‘Ùƒ–H$ƒ"´D"‘™ %‰Ä È-‘H$E&h‰D"1(2AK$‰A‘ Z"‘H ŠLЉDbPd‚–H$ƒ"´D"‘™ %‰Ä È-‘H$åÿMÚIIJÒIEND®B`‚mpmath-1.0.0/doc/source/plots/besseli.py000066400000000000000000000003211316273626600202140ustar00rootroot00000000000000# Modified Bessel function I_n(x) on the real line for n=0,1,2,3 i0 = lambda x: besseli(0,x) i1 = lambda x: besseli(1,x) i2 = lambda x: besseli(2,x) i3 = lambda x: besseli(3,x) plot([i0,i1,i2,i3],[0,5],[0,5]) mpmath-1.0.0/doc/source/plots/besseli_c.png000066400000000000000000001044271316273626600206660ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½m¬mÉy×ù{jí½Ï9÷vßnc;ÝîqÚÝW&(ñ˜xgĘÄæK,AŠ‚¢€ø`Þ)¼Háí‹•|p¤$&F±ì@"†AHƒˆ ™“qü2¶Clw÷í{ÏËÞ{­g>TÕª—Uµ^Î9÷ô]OwݪzªVíµ×>û·þûYµj‰ªþðV[mµÕV{]Ù çoùzïÈj«­¶Új©™¯÷¬¶Új«­V¶Ы­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯S[½Új«­ö:µЫ­¶Új¯SÛ|½wàõj_øÂøÁüAÞþö·óÚk¯ñáøë½K«­¶Úcf«‚®Ø¿ÿ÷ÿžïøŽïàïÿý¿Ï~¿çÕW_ýzïÒj«­ö˜Ùª +öž÷¼‡?ô‡þÿößþ[T•§žzêë½K«­¶Úcf+ +ö“?ù“üÈüï{ßûøáþa~åW~…oþæoæÝßú"¦i8»sÂݧîp÷Þ]u[ÙRÿ¯ÆÞ´uз¸½rþà‚³{§hÒ'¯ùÜ¿ªhÒ7íÚƒïêÁží½Í`«´ÜÖ¥}œgØw8VûZ‹yÂàð‡PD5õ+Ö/Jš£.¹rƒ-7@£Ðž+gwÅÖ}×OlÙ¸²O"`Dìø}ÝæˆÀÕ£ôÚkÊ“O·®³Ý"$Iëö­K9%}Ó~¸wï$mô7év2'Ô‡~é_ë’{OMl¶(öß>ÜþÁƒG¼öê9¿ù›¯ðþ§_gµÐU{ï{ߡ>ô!~ñ‘/~ñ‹¼ð ¼ó·½“?ð=¿—ßÿþß›À¨³µèߎnÐæríúZç½Ú…²+uÚñü³ÿÈ7÷7õ}}¿ŸÛñòÿZ-×[·e«ñöµ~ýç·¿ï²ö6Ú^Ã6ö?Œ­ý~û²Û·ûúùÇ^åôzm:ÀåÚ©+w®­ƒN¡mÑ®CºÓAÓ*›NÙt°í`×Á‰ÂI§œ(œ*œaÓoüï{~ÛïÙq8883©À©;;#ì l‡¼ô· Œq@7®l°ycëÿÅ+þçïº âNb1¶îr[w> Rk“¨Ð Šáç?öÞ÷¾ç\›õåý’2n_È’¸“ÉÀü?ÿÏ>Åû¾ç¿úÈ`[)ø,ýÉJ’í%êN,†ïýƒÿëmÿk+ +öMßôMüÌÏüÌÀ¯@ °\ñ"oXÛÐçkï‡äØç·ŽÀ‰Úmj:ŒÃ¥Dɸ¾áuڤͤ0NÊ ÊY¿7ù»ÉßAZîœÌßeê ã€'££ês¾†v¨¶´z¤Õ#mÙhÇQ-õ³¿Z¤ƒÂ«Èé¬Ïq0î”#œªû®ƒM MíN\ ü°¬O p¼*¡/Á³í%ëSLQ·žc"`öÐ\¥Ûé6’o¿—Ä$-jêÞ»|“ši$Ôk¯1Ò:Þëñ²Ð ­Þ~ÿYZ†P‚ØÃW¢:’Þ¡K =x oyñítl#%^FÿTî€+_h¿÷Â[;¡Oñ”·åùœ×ïØ¼Ëw£m²ä÷ÍÁYµ=-èÕªöº§íŽt]Gç6i wj±þÔÛ¤µœÜŠ…Í‰À)ʉ Û#H Ú*Ú‰}Yµa"Ä… t Ò ¼ëÍx ÐY=÷ÕÊ5X»ú ßp΃O|jcÚ`õH|¶pÿßJsÈÆÈ·7Ñ¡¿h¾=‚úSOÝ™Øèñ±ЋMxöþ;"ó(k ©\ έ§mo}ñ¹"ŒƒîcÜ—Cö©ÎhG¡\†¶HÔÁØåýؼëI+{!=^òâO >oA-œm:ØÔ]Ñê—Ým×&€>vJ«ðôkVÙ±  è]r„îàm_J»TÓ÷¹¨Ž@ú]OmáAÔ–«æÌ'±¯÷K±ož^|ÛSV±—Ny›qhïÊ/>÷VØgý ý’<óIî‹Ê•Ÿzò V³¶z±`ë9ݱTî‚"ŠTû•à;úù}%‡oq»ú{MÁL¡ïØq*ý&‰àLhöÒ[´Û¢ÚpÕ#]KãbÓûÎ*huŸZc”“NØ*躽"±ÃÇç ï¨+àR¨£Ô'é[o©¿†Hâú”2¿nÊßo_—J9ê3æ+å‰Ï:Vs¶z± ö°Í…q d9àËð*ÊÛŽÁo.P—\†ðÎýþ.?JCúQ¼‚Þ£Ýt]á²}ˆ´G¶œ©½Þ¨X¦m:Þ¨Ò]r²‡î¨˜Vœ‚VPégààßÉ@—€í•p©OíRÛœ\¤â/ìïd’²¯t r_,“§`?–'gÆÇÛV@/6C ÐB˜ø6å:`¿>)è8P)¶ûÉbS¾´>õ ÁÉÚ^ÞúðF4zÝ%t´k ƒËö!çí³ÐX8oôºsE®9€ø!;\ì9쎖 ³Єù|³à=ôx©Õ û7雨îüØxHWÃ%2ìK6Öª {[½ØJ †  ¾äa¿!¬KcEýÅNí›ê+YYFÇÚÿ¼½V§Ò§VV˜óäÄq:´žX%ÝnàhhÊ£ögÇŽ½Ú£»a'Ð](LJç {ÅÄçãÏÐñÞ&€)¯4s-mSjŸ›2O)ñ\Yç0SÚq\| ÊñvDãÁ-ßD½?ð«­€^l±‚†ihÍ­Ï€@VîgÿÖƒRïU¬¨½¤6®xéPR¿s)ù„d,oᖌگ‰¤Û,;‹Ã’¯ »€îm·p®G^;¾Æek_{g.áøª s)t{"8;¹œÃ!‡GQ¥J`× C87Ø\ЖºÊ.©ç&{Ý"¤Å8„ô¢£0ˆaO©ìîsÀÍHtè ?ƒÇØV@/¶XASÉk¾9~u£±Z&ñ×^«¬Ôô)o[{/¥ö±>úPÙ>VÒc :u>“C¯@/¡;ƒö=îà ¼vµçáñšƒpø² s!4îc×É”s²Ó5õ+çNþVECt»"¬q[ ä}}Øcª»¦¸cà–ü%õíø^õÒI~lsßâèmôb3Ø™´Ó 3K—úNÁw|ü!œÇûįU‚íP “Õ5ù.…íjV‚¶ß"tm¾´ÒÇ¡ñó¡kJú í® {íèá”îRøÍGÿ›ã‘ý— ›¯Bsa•s×ÏyÖÁ;Pq*ªa€¢@Ø'I}I.ÃíŒ Á>;„"CàÆàm¢¶¤«Ð·dõÂñŠûÎö èÞV@/6¯ kþÿ>·J›JŸ¹åa[×1…œ›z'# Øøsç %-bo8O!íÔt·‡öpù&ôÁS¼ü/}‘ý—¯8Ù«½EÃÞ«c‰2–2p|Œ¶âÀ œ£äÁ[„8)lcpçЮƴkÐŽö5óI#éû¬*îB>V^¬°£c¾†8z[½Ø á°Áð: ¬û‚ÂNû¥þÒØåqøÔ)5A¾pÊɧîÐ}ñK˜æKˆ{…+…½ —‚^<xhàeƒü× üú)où¯oAš7s*ßÀV~à —WG kmµêÜŸ0ü]“ÒÏ2ÑPŽ 4>oLXAi#V¡öà&SÕR(KèÕ‰ÏsÅM¹^J ¦ü•T÷\¥½Teç¾UA÷¶z±Å Ú[¬r‰BÃ>õºõÕÿ>çüÕÎýË®ëÜà+´¸á#f_NúuE4Ô…”;hÅB؉ZŽÚG-8 ÄÙ†›a/ö–ã½½ÑD¯.Î òР ò• ú;v_…7É–hä vÜa#/cxˆ‘ {„=‚[Œƒ¿´Tz ³a\R7CÆÍŠuo¸:±©1!7.oiã Ûø¥ñ²²¡›ö°ø+}kʺÔ&…~UHK¹} ¬wGFåUA÷¶z±Å :·i@ j¦%±0_: ·€Y“¡5U±h²iÙ‚V‰åëa³öå¾Nîá—³0ræ¸~ÀZ  \up%piàÜÀ#äUE¿¢ÈWàɣᎥ'G„­œ°á”< áÃ%†½õÑÁ9@z¸‚_é&žø€‰‘ Ë{ìU@]¹Ëh¦Ìjl2®Ü¹rç!åñš§&‚¿‰|ùŒ‘ª²–ŠŸÄE¿®DåYÐ.ùVÝÛ èÅ–)è™PI·@cÜ–ƒ<ëX;ž3C5¯{ Æcv%(KÒ”—ô¨€y˜ˆ[éÁ,­ ^1ç*úìA®Ä*çX=?2èk^mW`w%„G4s$€: uxPÇs»q¥A’‚¯D¦ìê£d$ëëò±cwëûôõÈçË=Ä#•ßEþÆo"__w©¯“†Ib•\uùm¯ :²ЋM@›ðsŸ”«½•`—£v{ˆS`IŸ¨_ì€+9ï33îÀ–Ì/~ŠZó¨½e8AÃ)féÃ:¼÷ħ–æ#p» Ñ^BˆÃ©g¹PôBáQƒ¼¦èhÎ…»gÒ±Å.cß"ì1ÜeKÆFNh¸Àp…‘+ „ƒëy´`– ¢¥º¦H|p]$>_„¹¦¨3Ÿµ'W Kd‹ýcòtfüA¥ep`Fœúê]¼?YY\“×MðkúÒÍB±­€^j tK0¶K>–/ñÁ·¯Å?"ªå¸ʸ43.ŽHU-3µÒ,È1œX({ÿ^BˆãJàÊ…9. r®è¹ÚÇ#8m…3 'tlPÖŽ§²¡a‹açà|åZY¨#‚³{ãñÝ™AE»ƒî™ì?ÿ¤°ÚIi Û䀭@Z†Òtpƒõà5nP÷û®Q99)Díý¶«Á è妸Gud¾¢J.äS¾¹õh i „K*¹Ëúf¿É(˜Åªâ ŒûíÛt+QüY !è½Ø0Ç¥Kµ1ès…G°;™g('6àmãЄŽ-;6¶Ø.-ÇÐ$±ètå¿êM=’çGŸlSÐ a,ƒö Ì=¨ó‡'ŽÂxêd°dû©TÛv5X½Üì7ýæŽË ˆjº×Þ/‘¡åzߤ­á"¤kqäüYv‘¯¦–s 'wjGpö‹ä÷1èÖ¤ÝÂ$ÌácЗ.@ΡÙÛgž"ìP6hãœbq{p8ÞɆ-ƒ´AG ZÒ …ÒéÖ:‰?ðØl$ÎsXGþ1hÏIU°›™ýò¶Háfà—¥û¶Ú«Á èå–+è)øÖÊ •ñå¬ —`\SÃyCF@]RËÅz¤šÅŸàúð†8PK€ó¤ûPÇ• W½.•ÍÁØÅŠp¢Ð[hˆ}tù ††-wÁp‘ ÐYˆ#(hHBâ±ÁYbh—Ô Lä&ª{0æõòШÓ%ý—&n¡ïj°z¹Å º`¯bEÝW8Ÿù÷Ÿ› í8w„'EÕÔqޖϰˆýs`\PÉZZVÓpF®ž¹_†³:Ž>-ÙT;éC›ƒa§§N€¶NAÿkD,j}˜caƒÐ°a#Û¨Å] ŒÂ"áápÖFÌ¿Ëb`Ë X>Ï|£pÎ|ƒúØv¥PÃŒígYâ}/=1é¿*ho+ +¦ªü•¿òWxùå—yÛÛÞÆ_ûkÍ5PôWC#0îA<ã‚2.ûÉãÆVj†~Q ¹¨”k!ŒÆ~œÎýŒŽp¡ÐAºWÔý¬égtôaòØ´ÂÎùåØFê¹ó¸]Ê-ÆÎê`G¯œû›VÒ§’ –ö±Z–þƒöÍrfšD}%ó Á­xì‰û Ð|¦âÏO•z©<§Ï¬òª ½­€®Ø?ý§ÿ”ÿò_þ o}ë[yÓ›Þr=Û뤎T…×ÂQ²þ¸ñ@ýá¶^éÇœ8Þ¥÷2æË­•†ehKë:”c çÌÇÔeèɧô—« –ñ>6…ÄìÌMÁ—ßÈó¼ô=®¶z¡Å Êp­ù«m#Ðknš3F©Oï“aŸ²¹:Žr_øú ÆÀ t|k“bò$„›+óíï%ÊKJ±¨°E2§aŽ|ê]Y}g@/{æ%u=©º'Þ[ÉW;E%]ñÕê|«‚¶z¡Å F€–ƒ¦ä«Œ³òÜkÛT÷³P÷ÐÌÁUó•ò¼I9ïGPØ5O8¿Ò&u>í¿ð6 JüXƒÒ‰¥—s '±iWØÕ …4í¹ðY†€®Å¶ç$¢qÇ ^tþ÷ò8Û è…–(è —–c%Zƒí¬öÚØBÿ¸·\ —¶Ë•­í¸ûòrn1¬ó1âch¡/ðY²‡p¸iQ1ýÖ¸‘Ò}èP7×Y#°Ç²Òd„h—3˜dôê¹ì+õÉË¥ö\©×C.QHD(‡F yIA×ÔvïÆ¦Òwà±/‚ù è`+ ZIA÷yA%—ÊPVÔƒrÖgn{Ò¯ÛLÙVÕpá=–l𥒴<ö¥+)æ¸\[8ïˆrT¥A9D/©(þiÞé8þ¹Ý±ÚnT”ü¹ÝñûQ®‚óùѽš– ÀŒƒ{±Ê–°­D¾ø"dÖ’¾Ÿ'A.åãS„´¤ÛÆÇv q[½Ðr@Cn%¨Nµùæ¾xÛ©wÕ1dè£Ð6æËA ìÕ/ÌÔ³ÒÑ¢4Ìñ1kûP»Jݦ‡ü8ªÒЇ´&Š>F´Þ‡ÿ›H€Lj~»xÜo·æ’?WÕEÿ‚$ÑXsC!SJ{Ú#it°Ð MæÁ7Ù¦ p'·™ÑÉoÄ|»§«À•¬ŽU±fý¥¶Éì}(¡£¥££u¹­o\îîíÕïå* o(­‹I7„Ë}>lrDØ+\WұǰwãùI¯àÝÓfµ'‡æo¶?9¦ÆØd²<ñ‹ _Hªªó°G è¥0È(À ijöXØcTQ+Ó±ìJ=Nkˆ#Ø è…VRÐÞæøÕª$‘SÒúÍjÅ7øë¶° 0µ»€ªQÈ .÷/(!Ä>¼Åf¨Mƒò•B2~[ ëoØ/¸:ùU6::UZ: ÃB»HÿÂ¥iØc8ŠÒ5Š›pO ˆJñ3Qýç €èŒm— ÅT, Uì&ÆmÓ:hÇ0ÏßçÜc×à\…v¶}IEÏw¢ª+êºê¤WlôB«)è1ô-€tt¼Aÿràcx9Ð×ã–Tá¦÷ù)*% ¦u´Ï¹Ñ¼‹NΟÔó”C>~gîXv¸ÚTéè8Ò±E1tˆ†½óá+ —À¥öFiÒm¶ŠlÔÅ$¤Gåžû|r0Ë‘2x«Ð÷ãEyܯ1¶¯‰@ï¡o<ô]{¾õÛHØ6©;8ç·ž_ ÖY»úÖ ½*è`+ ZPÐ^9âþ¢²?+ç^bÂ2ô/7‡hì‰ü¢nsÍú…²dõÔ¥ Ò‰/†j¸¾Üeý&×â+$«¬‡ïØ® ­n]¹† '⎽ÚЈ? ùö• W(b8® t[àD`gmâàÜ88AÚvêH\ŽÚ%G¢íz8dhÉ×Ã;Ê»èuâúÔvê^¿¯G'Éúuð~|ãó‚ÏÏÍîËñ®Htèdtl+ ›_¨R#OYÑÊE@·šg¾ø1áIŸ1ßD’\Ç@pñ![òœ¶’ŠŽÕº=ˆ¶f­4¨nvìØr¢pEGãÂ#Šô¸B¸@9.èNSAN5“D¥ IDATt¦ }\ &÷(øÆw¡] ˆ¥0†ÔöcÌ_QíÅ×™Pø¾¯‡´Hhóýü ÁÇî=¤ýv~ü¤=z½Î·­¬€¾†)öU\ò"„}yº6ÄPPÂ}^mƒ-v»>Í]ãnX:)C6»ËTt)|Ɣ䖒Rˆ#œ¾T½‚6Å[:¶ 'l9áa«Ðê¦Ö ç¢\6ÐÞ¹ œŠM;¢›8ÌAPÏEzÊQL½JŽºZ(zgm™†| öœ}<|êÄQè#ÿä>Žísé—ÄXßÕ€Ð×0Ñ,©åšoJÏ-/Uƾ=€¶iH®ˆ @äQ%‡0† د~Aí¬^yúmüºAC‹{WÒjŸHØéŽ–”3vzƉÓ׊¥qpŽáQÓÐÝž½ rfÐSEvNE÷Ô(ÄÁh˜CˆêC|ªo1IaLð¥@®Ÿ4J yÉ `qûÒ“ Q¾Ú è1;|Ï÷|ïyÏ{øËù/;¯Rôˆ:NToÜN}Ÿ„7J óâÈy.%0·”}Ù?1òK~_ sÅßÏ‚.¿p4Ä)é¦WÑ-'´z†ò§z‡­Û~œ#<†ö®ÂÓŠ<)pWଃSƒîññç>ÍðŠX)ÙÝ)?¨Õg˜~TqNµOµ-Q´sÁÌзxlXtd+ GìÇ~ìÇø#äð•¯|%òz ãŠ7öÍUÅÀµÔ ·MÂ¥‹rq¿•</<ݶtÃvçÅêºбNrarÄ·Öž·ÇÜV@Wì_þËÉ[Þò^xá… Ð^AûòuUqÉ7‘Xwxw…¶± s9¨+ ®úÛB¿¶^–òˆ—< ýdè2¨ÃåT7éO †N7tì8rÆA_c£¿¡á!ðàtK÷Öò[ž6èr§CO\x£‡³ÒOUÏ’B%±ôA¬¾’ð:ƒwì9X}^ê?@ÿš#°¯ö9þ¬>&k+m·*èÞV@WìŸøççç|üãçK_úôþQžþyVá¨ÜÏúˆÛK ´A‰ýcj¶°}Q…W^g²½ÓV>÷闸ܧ_B=|ÀjÖV@WìoþÍ¿ X%ýïþÝ¿ãùçŸàÞÝ'xÿ·ýŽ êãÑ1»¨\†jùAVs¡<çnD9Ï [TãÆ(KT„/ÚÌŸC9,ÃXÈÆwú>TÝ‚I {.»;¼ò~?òâÛÑ7Ÿ"wÕ]$siEý1S4þè}“f Žà=ÂæáR£üS€.äE%=6F~²¨WfUÚ§g_¼Ï;^¼ü›_ú(«Y[=aßþíßηû·GžŽâ()¹\§R¾M ÂsCc@ž™rð œÇ”+«6T²³ó‹ÄË!åðõ¡6ƒ¶ó7е3,c§ÈÉV‘S¥yºãɾ‚Üý(¼ù÷ O< wÞŒœÞƒÝ]ØžÂöÌ‚º1éœç^- ûqOAèUtì\YÁz µCÇÈ‹u)Ôo;¿¾SýW[½Ü”0‹c:L!+ånÐŽ–Tï4”mX%pðM¥Ú#³)dË!ˆçB9†s¶x¨AS÷ëqH禸©å¢±Q; n²Á‚ùD1§ÐÜQ¶O+goƒ«7Á7ð/œþ'Ø]Âæ!4¿š{Ð<4wÀœAs ›ØìÀì ÙE·{»[æ<%#õœ@Ù}¤Ås¶Ë{öŒ@»d£p.ùJŒÊÄ7WÉòÁkºÚh{Þ¶Æ {[½Ø¼‚^ªˆý7ØÁ8‰»þ¹/w1t—ó=–¦ò2ùÃ8rȉŠ.@Z<ˆãcÿŒ{ÿ§Š±_ÚX7Ð4®¼ÌF1;0'`N…掲¹'œ¼Ú·B«ð&à7›ß¤Ý"›š+Ä\€¹sÌDÎ@NS€[ì-4ëó¹ÙàïÜõ)°IË%XKTŽm± ¼€W{&ÉÚX¶{­Ä·*èÞV@/¶1] mä 8V¿sÂ%ÿó¶’Rž¸È×+é‚j.©äÞØA¾éÀ´6×´u¹ßWì—;ž9áV““lqe gËÈnçz ÍtOÛ§y³ðòÎ{xZ:¾ºù2l6H£ÐÁ@®l2— g '„«‡np°›¤ÏíΈIvÚ)QWW¯´ÅB÷'$¨“Ü—…â·is^òMÔU‰#¯Ž#¬ :²Ћ­s?ɧà<à1×Êcðõ {D!‹eŸGåÉÐE¦¨ÅÁV:èh»xóCB^×D=z¦I”úúFlÌÙ)gÙÚKÌN0§jÕó]EŸžŽO*§lO€'š Í+°Ù@#ˆéÀsÙƒì9uÐ>Az8ÇÞ`Ný BØqñ÷Mû[üšxbqz§ˆôÒ1‹”Nê“‘4fÅö±jmsý3NE€?ƶz±•t ¼îÃcª¹ä)çªØ8€öpÆ‘1Úµ²]ÜNéw¢¸r\—ìmKöB"ÈÄeHOk¢ - -”1–…^9{õ¬;Ð>Ö3à® O(ò¼*Bçó8xBàåæ50[¤cn­’60ûÎ}rpöªÙÖ¤Ù n ˆdóóâzö ð¬ž?#\R—I|¬B»ôD‹¯iÿ6Ù{îp×:;,|ÇÀV@/¶€îãÅqPÒ•ýEAs6¾o”{xÇ@í|_WŽaš€4Σ]Ë;èW’=çd}úÝ•ôþ$ùÑ×ýáKLR–!¤áÂ’ÚlA·‚ìsêbÏÜžÎOàØ©='aQzœ¸4—æ‘#7ÆÅ»í¯ j§¦mŠÔ³WÎýü<« ¥Ï‡w¸H¶P´$1quéÛ{ðŽê⼬¨Ÿ?ÆY{éÉêýG|2ðå}ã¢-6ŽÙâèmôR‹ž¶‘€Ð`ëK"s##“Â\Â~dí=<Ç¢,Wö­÷å*9KD}ð>ésÁÞTâMÄ.!:kx@ûä. ê6UÐæôLà®ÒÁ^áh‚‚n°K>Ÿ œ‰²7tMcW•3®“iÁø –{Db5íCQ˜Cœ‚–ôU"Ôù£\…ÖÃ{Ƚº–BŸœÇ@-ýñ-÷!‹jŸé|ÊÊÚ¿¦?”úÎâ­­€^jBx¤ÊhÇR|¾Å0ÏÀ]õ`ûqÛîˤÑk%€v+þ®Åe¯Özv¸ŸæBNqê³ó›¤Ãµ:ÌNе×ô΀3á ÊQ¡õ?\°èÜâV5°7Ê…¹@MÓߘ"Æ]ä”c¤žO@ö»^9‹xõ¼í•sêHoELãÓù½ã9°ÃÅÅÚCuû¦ ¡ÎH½ÖVêSÊkýÆúÆåÐÞV@/5CÐKÓ ÷ÑAcu>ðs _í/u¥LÜ'öçªÙõé­ðS8ºuZDú)veUÑîÉ'ºs"p¢è)8¨pTèÄÞ°îôFl,úÔ{ÖtìÍ9jÄ1Ñ…’Œ½yÆ‚ú€ q8õ] †8âûÅ%‰Gá:T×5Uà-E —A>ìy~"õ]Ú†‰| K}:V³¶z©Å nêÅÒPJTïÆú]7å¦^‡Ƚʾ ½zöpve÷$í$ÔÑ€4nGS NA' 'B×(…ƒÚ¹Ï{v’WÐ`+v]þSÁ>‡PŽÍE?¥ÏÆü=˜-œE‚z37üƒ³UÐá‚aPÓ©²®Á9_•© ¬+àž†s~1r˜r¿×ÜSðïÃD>he5k+ —Z¬ ¡¢.Gà˜oÓUÆ™jûZ¤Êkåýú~þ½’ûã/›7‰2‰¾×QÙÍJë/F ‰fpôÓì;uc•óAmxã¨îÚ)ø{_hÄ~l;cãÑ­ØHÎ¥9p×QZ¤sÁ0»8Ø«gçXMGñè>Ì;uÔ’ƒsí1á7‚öµ=Ⱦn máóƼKýVímôRë´:¸¼>Áªª­Ø§r‚˜ûÚź¤~ mƒUð¿ë’p©ŸbçnTé•´‹C'‡u£t½(¸×(¼¡Ú‡Ñ= ½‚¶*Zz@«Q­ŸÍa¼ŠvJ:RÎ] qè8´‘ǤKqèXM—bÓâRhªë2œëq첊®ºÛ%_¢´cå¾*ho+ —ZMA×Ê9È“6€L«c-ðMõëO-—¡bŽÛ&…ªWÌ’ÁÎäpñ`q¡ŽTIÛ0‡i slÅ> vß9@wîF7ð×1â.ŠE·Á= UÙË‘£(*a6‡È!rPÏ".¼!AAK2'Ú+æRLº›‹Q uH/Q×× ëösô°ŸÈH;•úª ½­€^j½‚võÔ&}˜ãz©ÿÜû¶‘B¾?sÚâ<Þ÷ÜOäø$ûJÿDèžž±Šv¡ŽøŽBîP]ccÍW*\uÊÞ88n5$ p#AI·þõÝk{i9H‡J‹Ê±WÎ!•òÉfr ñlŽkÉ©r.ŧ‡Àt ÆuP—bÚ¢KaÒ4ˆMú7Qí·*ho+ —Z Ðsó($ hzóFµ¿ƒ°Û.”'¶ÍÝ"É ý(Ôûr¶Ò¢›ë\ü^úï{#ô«Öy@»ŠpDÙ+\upìE8  ;§ŒÕ·$Å•WЭ¸ë©>¤"bgÛ 4¢9ÐJ‹ÊÍoaŒT3Ij²r3˜#]WÓq|ºçx-Ô肟åÑDðSÒ¥ö´,I9ŸARx~Ëú,`¯ zÌV@/µRˆ#ÎK¾ZŸZ¡¤€kcç¾êwprÀ½®ú/d8ŒZ{Nij }ýM ¾,ŽŠv(6NÜbó¡sá àJ\xÃÀ¡ nÕÝ 1?ôFldëÞªºýãáìúE9ÊÑ‚ƒö€ÌalU´$ÓíÒrª¨s0Çþ Ó[+=0‹%ž’×dv Øy¹ïÒÍ4ÓêzYZ´·ÐKÍGa9@§ú.m”£?î*€u¸]nÅ‹~5+ô  ¼<&ú>Ûø³"¨*ÚCùØ90+"ìQöÐXH;qñgígp¨ÐÇ  ¶ÅÅŸœ …£øå¡”VZZiéÄ rÌÊùt»! SE+çØuP—gÔÕu-"ƒþs@^WÜeÀ_Ü«‚ö¶z© éQ›d\ž:XØwÖ‘*¯Ù¬xr­K¦˜cÁ˜Î>\îëˆÚåú]î(êÀlÕïA,¸÷œ²vþVà¨Bg¢_ðàãÐH¿}›ô« ý,Ö'ìãn-:ZK~‡pCƒpt¹!;ãеyÒ5@×B c±ê9)‡ê\ŽØe8׈Ztj+ —Ú §êZ(–þgù¤‡¸Îßvm›Êó—Êár >`ßîÆ‰×oê _$/MB‹ö<:£òAl,úàU5¬ê–%qê={ütN%û·çcÏÒ7¯%„W|È$Üû¨Zû:ê`l}öQ] ÓÃÛÐdåÐ&}ž‡Aêqëj(d4Åý‡ª:ÔuÐ^ÈýO’Qp— œûVímôR‹C0Ó¨@5ÞnŽ€¨´«û§xލE>JÛ¹ÝT_IêRQ˜¼O*Y=Y{ly_ÀXš4}@–8·^IkPºîv’þñ³ñ ÖÑÛ h’ Üc@7âhàƒ¹‹ÆìK¢ó5èòº=†. Ip>uÀî\îË †ÎÕ[ô¶ïá/‘'öû¶8«èë¨ë2¬ËçB{UÐÞV@/5m2_%z sÛ£JðI ÑŠúдØù$¿í@õæ¾ ¸×=bû_‡yø¶Õ¬­€®Ø¿øÿ‚ŸþéŸæx<òüóÏóWÿê_†_V` Œ+Q"pÕ9Ja„¹y5ôPl÷åcåmck/•¶å>ÿïNÔÎiFh]¹c¨”½â=jUe0ÁÄÄïG"`FêÙ¶ƒ%MÜ  ÇÓ—%òÕ=5" ~i8¿DêÓc•õ°·´ÿ% =¼mßp mRhÏûæÇ'–«Á èª}çw~'ßùß À{ßûÞÐ~¹~ÿs,‡d\ƒõXÿPÇ|qÛœú”J%×ÕªèÚrÖ9 }˜£wH˜:çç8÷91Ôƒ?^Û›‡³)ì[_—è¸ô'ä¿ymÎS·ƒ”€YSÚS¾°¯ûå“Iý=ÔÚæ›øÄ÷¸Û è û‰Ÿø Þÿþ÷÷u¯âæ@ùºª7ö…úðdP+×ÖX*ù–¤TYJú$¬Aé/Ö•TsI=wØ)vca_1ÐϬPÜ„¾¿ë)œÅõ¬zF€ÝÌHáì-½ØÁÆÀœ×gÝÂ!C¥»àK¡Z«ç¡˜Ú>M¸Ô><6ÃmV³¶zÄþîßý»œœœðþÂ_è}¯>xÄÏýÜ'å]÷Ÿá]÷Ÿ™„ô”o¬ VÏá:Ò’<à%\,ÔêöµýŽý¥cØk{ø,=cR)Oåñ8¡Í£Îù%øæ©Çy7I_–óûÎ[5º6^ýý•Çöýßuÿ¼pÿ9á_}ô“¬fmtÅ>øÁòÁ~pàWìOí%*8.×`ZòMw)Œ¯â1€Ê$`ã©usÂcï‘|[ eQ’k‰‰öRŸa=siÌÔ7 ç9ûU‚òu¶ó¯7õ±qkmsüDùj+ [ƒ¾MOi¼Ò>iÈ` ÈÓ®Ç=xã¶©mãI怙(/Yò%¡ÌRÆõ1’ú–^ ƒhæ)æà—‰ñ®ér_™=ÆX¿©ýZú^òòƒ¶z¡)u@×\‹—á”÷[ò“ÿúWÂã3/¦Ë5ß8—LÜQ¥0÷ÂnŒÞ¯éÜg÷øC›D+]ŒÁû¦ ñ&åpÒ)«ô|?¦ês÷wÉ~æûÈÈ65ßj+ Û˜‚^”„ÁÝxsözØ"O5ÿ”Úž„³‡r!e]éA«ÒD šhÁ9PU í¸îÕv#á5—Ày xóó:ˆ}ëØëHÒk$çžd®ÿžR û㻚µÐ ­Ã®ýK\œ÷åŒâI{ ¸N¬¤Ø/sVéãg+ ›0Ðstö̧#%ˆÞ¤o ÀüèMƒ-m¡ç-êa­GT;дEõH«GŽz ÑŽ£ºÅú:u*èè•vKX¦Ôjþ&•8•l¤U8NvlZ0î­hŸE¬Ì'°Y N5èfe©M,ž ñ›Â,V3Ö¶¤½T^ÝÛ èÅæ£¡þÛ—o 훂;pXJ3£¯÷%*;«k ÔA1çJ:(lŸ´huÏQ;Ú®³ Ú½œôV •h¯ž7XŸ8í”¶˜#ÃqîÉû#ÓJb¶sës|@¿øH鵯|µ×¿|ޝc5g+ ›`/ù¿¢9 ¾¨¯ð%êû&¾ÒIà:ŠÚZ³P‡:ÕlÓ±OªGÐt{Ð ­î¹Ô½…t‡½“Pm|z§ZTбwbãÎ'îÓ4Çè¥ZÐNÑNÐ.VÑ (Vð'y”NþgâóP§Ú–nã³Çö§ÔVë?·o)kóùª {[½Øò4 Aû¾à¾M¨Ï/ç}x òáÜ‘ÎAM”sêƒK{Ð=Ú]¡]þ»m‘Œ*›öjãÉ­Ò/Ào­6´!‰í8@wPä tGnˆ£:ùÇç1QØè2Øöpf-½7g쥀Ÿô©mÇaF[œ¯ º·ЋM¨zÌWkƒúÜPÉMþµûT(%w¸Xs hfbõ|½Bu ºmP5\uçÐi:ØtvFÆQéoVqá cÛNŒ²9 z…MЃ¢G¡k¤Ý£[úhFÿ1Ù`Q?k¡¦—Âtl¡¯ÕJù·p_ÏoÝ,•Ç|œïw{Ãúêꊟù™ŸáŸÿóÎÇù–où¾ÿû¿Ÿçž{î†#)è9õ1€×üsS¼}€fý¹*sNS}JŠºÔ6„³j—ÖXû`ð±‡4zö ;è®@·Ðm 3hWÝ9¦;²i­z>¸0G´„QŽ Jw)°Ù[öKtn ¥¿øˆ‡´·~Òµ?êj§³ÍU´KðwÝm¿€¯½·Ü?§_­¼*èÞÞ°€þ¡ú!Þ÷¾÷ñã?þ㜞žò«¿ú«|øÃ滿û»ù]¿ëwÝ`dÁ-ÇÊsÊ7xÉw›€¿IšRàХ͓PGOÇÎ>ıGuzz ºA»Z/¾l±íŽœ¸0‡tÞØª ОWŠìÅFM GE[éCÌ^A«ž€`¤ó@w›Ok°àõ`}ݵU¯óÜŸs{ÃúþÃÈÅÅggg¼ûÝïæCúÐ-Œì4ÔA\÷Ù¿¿9 k»M°µÝ¤o€si>-(ê4ä‘)hµ38|ü½‚n‡v‘Šn…¶íxÔ>â¤ë¸R«¢- ÝÅA€K¥}\r ²·îöç‡<”RÈs8Ç SO7‡j-_ô%¿MxÇñsfŒ—÷[tooX@¼ë]ïâ'ò'ù®ïú.þÆßøüõ¿þ×oaT¡ èeyº„¿Ï—•EÜüß"DkþŠO2qöIã:ÎþH§ÿå1&¿HxeÃÝ<¤[£²oi¡¾ðô3Ï<Ãþè^{ûgŸ}–Ï|æ3ü¾ß÷ûøÌg>óÏ> À£WðÉÿí£(ðÌ‹÷yöÅû‚Y `’aÇü2©û1dØ–ø£Èá?P‡˜ÆnÍÛKãŒyÖ˜D³oWµ_â6KÇ(?Š_7ɦ+±éBà‘ ¯ |ÙÀgîýÇSôá lÌg1ò2"ç#vQg·ˆJ¸5PSFKž t¢UÄŒs-Hä¤ÝõѨŽ)Iݚ܎åíDðÚ¸×è|ݽ$zÍRÙAV]3’k$‹}Ùƒ7F,™ÕðÒg?ÇKŸÿˆðàá#V³ö†4Àßû{O|âˆ?ÿó??{Û|àüÀüÿú_ÿkž~úi§žáî½{|Û|ˆšúÕû½}-Êq}Iaiÿ%cNQÊ eÏÆ±taA;8옯€ssƒ<0èWøÒùµ3ÞzÞЙß™ü7lù ¯`ä†=Â8kàw ´Ó¹•`–Ãò6SmÜ’*ÆQŒOÌìwr-¶ü÷ßñÜîyᣟüdå˜?~ö†ô§>õ)>ö±]kÛ;wîðS?õSÃëÂp®o.çl[ƒd­m¬ïðN@9éƒÙçƒGj>¸|/A9_ raÐsƒ<4è« òå |I9{MxZvvhy’'lå«4<ÀÈ9†+ŒHôp/ÿ\Ÿ†oº™ kå¥@ÓoIù:ùÃx:V³ö†ô»ßýn~á~{÷î!"7¼ÅÛ™bá×Çò9}æ‚s)ˆ—vŽlK¾©E´oÁ{Ì нWÏØ°Æ…À#¯5ðJ_ÙÒ¼,<­ gîÙTWœ°á„†;4<Âp8%-ŠnCèÃí DoÌ#$,¼QÔs_šë?¼s`;§m®*ž à±D”¯ö†ô/ÿò/óÕ¯~•““€Û´¿ ®NŸÏQ¢KËs!;gÌÚ/ýÚöc‹òEIJ äÅ<(gW>HH{àJ+A/Ć6)úšA^iÐWàÎQxBNÜNŽî²¥‘†3Œ\`¸BÜjIâ^Ø?ÅQ*¶Ã$”Ìá{Ûê7w lKþ%`ÎY¬˜WÛÐ/¼ðëoý­ÛT)ú&ªx x£ÔÏFXâ›(Þ%}§V5r‰!Ý/hçà|ä(nê³SÎ}ìÙÀ…¹Â#µ ú쮄»ÎDÙj‡G±Qgeˆ††† —ö˜^E{%mwHÄ?Â×?6´Ô ³D©^¶KbÁãV÷ˆ­9°½)çô[ Þà€þå_þe¾ïû¾¯qü£ôn>hMAÏ,ëX¿›€v)@o;,f'0'P., ^ƒ&z/pi E/, å50p·îÐq‚² ÖiÞc8•-  ; §¹ÂàcÑÐô*ºv ½Ep_@6…L)Ö¹êwÉX×ìX¿ü½FÉO›«ö)ùcߪ ½½aý£?ú£üá?ü‡o`%\$,Aqª¾ÊKR¼ýÒµþç.û<ÖV[ß?[¸®gÉÕsK:¥Î_$Ü‹]ÔO­»äÜ ç çÂi+œIË)†* ÐG±Ñ憶4l1rIˆCñ!FPm§½Mi d—ú§ {ñá%ÐÓ¯VŽéãmoX@ÿîßý»ÃS‘oÓ¼‚¾®Ò-µuÛ”àÈD{äש±&p±>U®À9µ„'»º§˜$ñç^E;H$ÌÞØ¸R¸4pr'G¸œB¯ž= Õ!÷à´òÃV¼Š¾JZèá<‡ÿX“Ö1l`F(ƒk Do ¶ñ>ÍÙÏÜ7U¯AxÌç÷e5xú=ïyÏ×f`eÐ3’ä༮j½5Ð ýó¡–x!”‹aH9K«Ñ"vÒÇ¢å(èAà`À­ß¬^A_ »Öp&pªÂ)ÂeƒbPÄ¡µÅ0ö®DزaÃa‡UÏÝNA;©?˜n'y<:¶)©Êë€wlÜ¥Ûå¾ÚþW¶_´·ÐKM±?³ÇôÜøïm‡¦à97ŸÛgJ)O)çbh¤·6³$·w'*ú 4­°ë„ 'À)ÊÎ¥ oø¯ºÝ‹_è BƒÁ 6îFjhÉoZÁæ’}à}=·¹J²KÍêyû ¾DñŽíK©í:ª÷&ÛäåÇÛV@/5—›Âø6”o Ž…¾:£Ï,ÐNAx ÊØ0JÖ WÒRSÐÙ­ÞM 5lQvbØiç Ýq‚]­ÛÂW{-ém‡ ¡ŽA$Ìz¶˜Éû“  ç15pÍ÷ A«s¹¦K!;ÂyyUÐÞV@/5% qŒ}k 9Þ1 .UÂS õñç lUuÜ9 y†‚ŽCÒ?HE.(ii£ÂF…a‹²EØ;v 'XhûÐFIAwЫè¡A¨l»½l¸E0}‹ºU4=œ À®€Úm•çÓ> ö6!ú5†¬Æ®¹ê¸¤–WímôR³ßðùaŠÅ ÖTíz˜O)á¾]Ç•m;Ò6[ »ö)g@–¨œÀ¹ –½@5@£.±Þ l0léØ"ìvjÕóq¶—­‚ í³YÁw9±ChÅG£ [ —,²‰Ž/ǹ³cæBðkߦJ4뤰O ýtÁ¸ìê*’½½9­A7ûXßÇÏV@/4ƒ=hcÑŠÞ±²/{¡ªÎ§Q™àëÛ:›4*wÔ¾ÜuQ½K·ë:è:7£­¦¶s@,¤°Ò†þ9„µ3ÚÒÚ~ý{ËR/TÁ­…oÑØ`Ã+oP6H¯¤·âଭ]¾ìöå=€q Ùkd¯°Ó0Èaã>s«Êí668Ï»¯äá—ã/žE׃7ÇÓ°O9|2l;îÜÒM·Atbc¿E7[½Ð„y€žˆpLŠé©èƘ® à‚¸ž%‚u^¿¶2Þ`_\x´t ÔdQqpÖ~åƒ`Diz yØÏe‹}@lƒ`4 PNÄíçÐ>ÄÑ:Èûõ™üøl8¤‘ ì%OÄæÒ`B©„%ªÇú”ê‘*]ò𝇾+ ƒ­€^h%«æRÛÆÔtµÏt>Ø×‰`äP¿ÍÔ¿q°&@ï&…ŸWÑÖ±’ö%SºôO_¢Í Ž½êµêY\xÃö9‚ƒ¿$ãõª\$<Ä¿Ž„}eF¾¨¬3ú\£|ÓÀIRVìƒt j¹ø~¤<ؿլ­€^hBxdl ÄsÔõ˜ª¾-h!­Ã~K!ÞÎè³äÄ¡2<±ùc-¢!–,¤ ÚÚÔÇž}ŸøË¯XõB1˜m›C’F#ÒÇÀ«\D`Î}X/ñUû*IØøºû±àKúLõ]t°Ð Í`FÏób€õ$¬³mf[§á™÷›‚±îÚž«î§N`^‹Åp¶eAD1*}裉òøÁP±‚ŽU´GPPÏ6¼Ñ8C¿ çBbn9SÅ“y¡©¯±Å¶±±ef__ŽN³ßÃDîË«‚¶z¡ iˆꀙ*`ž£´kОTÝcÖ¡Òž¥Î+õ1@—ö>—¤äóÖ)ŒSõœÅ ±º¹à_×X@NbߌÃy¸¡ÎLßh_u©ÖÇAsl<©€uö>äåã-ÍW@[½Ðò4¤°ÌëSm5(Sh+õ½Q˜D ³FâzÞ¯P´Â7vò æamóX]§3)b8K2‚‡4nņk<€RK幫dÀpùùjYçÃ1Iê·UþñõœÇN·uCøœ×d/ýÜo[½Ð„: ãrR×yŸ‚úÌj@ƒyïÓ Ä©Cu Ús =ÔDùàÃÐhz•Ë :=ž~Êœ½èggvXŒ­È¼„5ßx¬ÊsömÌ¿¤ßÔ~%u·c}òò è`+ Ú˜‚žS®Aºä»ÐcàÎôà'C%¤á1€÷>÷ÔI‹¨ìséÿÕ¨žöi±ðî¸>Àò>I]'ÚsŸÞ˜y2µíF€¾4íO­mŽÖGl+  öÅ/~‘ù‘áää„óós>üá³ÝnûGÏâÈóëø®î%ý–(ïÅà®À¶Ø_ë±í±|lßJÇ0ëk?[Ã{)/É‹ÀV{ƒMî¯Bj&¤Ç@|›}o2Vñý-쎻­€.ØÛÞö6~â'~€ú¡⥗^â·ÿöß Cð&> õ2 íŸb 4}Y+Òå^’æ^¬œ gõ}u¬ç„PæÀ[“ã«ÄKîçŸÇ«ÁÜC9½€âó`5£ßœÇµÎyþÊheTeƒ^FÚ¦ÇöiUÐÁ{@úÓŸæÏþÙ?›ø>øÁò}ß÷}ü‡ÿðxðàAg°@s]jËk¾YÛD !•ƒ<÷6À=¥¶KÏèòvë!5)ÝͨøeF4ñyK÷Mñ+=—Ž(+¹ðDžþâœëVU†3!=Ñ1O–cDÐ\úúSÀ®µ1²dŸÛãn= ßùÎwò±}làÿ¥_ú%~ög–òOþIâíÑ>ñÉŸC^xæ>/>sÔcðž ó¶súÏ©ßܪãÀöàÍý”@ìêšC¹´2©†\ÕÕmžª/ìWÙ×ûýQì 3ˆóKzü£Ü~2:¸¨™€—†›kâ>Kž×½ä™à“ã)öŽÉÊ>Ï=aÌIŸýìK|îó/!=`5k= Kök¿ök|ààøþÏÿyþÒ_úK|ã7~#Oß½ÇÿòmïOŸ,Büå]VžÛ¾$¿Ny ÔyÛœ z³.0’*àþÖrõpÖÒêV% >?Mîˆó«Ûc?>Ék©{VŠÏka•ñŠÛqÙªfOc†`ŽË9¤¯óâñëØåFµ_vÔ¿Ž_+Ú«ì8´¢*nÍKh•bXh\H!°z8jÚ¯ß)8'íN /¹_odàÃù%ô±u;÷<ïÓI¹,…d„ðœÕV@/7Åß,ìë5×®}9ÝJ Ûö˜Ö’?÷EP×Ü;ܶtÂ;!DC†8÷L8W•´«Ã+Ó! ƒ:ÖèA*ênÁ¶²:ªâW¹;D{ìÕ¯F§Q‹…°S"èK¯Ê;…VÄ…L$ƒõð"clâ>Ñøn¿" *é5õùç*z &É€›÷©Ië2V–´oçr•´,Ô%ãêäu7Vçr$+»¾ˆÝ.?âà¼:Ø èÅÖa‘ámLëfu-}½k_ù©qƒOÏp•aoi¿|¤\ÏKÒqJµÇðö¸ íš]ô Î¹RV=¨•È–ñÓ¶5¾IÇû‡7¢§geŠ+ÆQò­¬€¾†)u@ßVyª+ì±1j¾1ÔVé"ø_êêK!·ßºöX ýz¥ª–ÌèË J©ç%¶§˜uë@§wÚ67¶Ø'ªðÓ«ê£ÂQœãPH¯¢£ŸDâ@$MÚ&øš&øÔ%ÓF‘FÀÁØ·iZï+øs/Jh€Ï‰Ô~”À;ÌÞ¿°úVtHüsÊcÛÌõô ó¨m¬¹Ð=µÌ=¸Îã¥>ý·T]dßÐ=–J-˜7.HÁœ†0,@7jaO¢ á ca iá@Pç=¨Ñ(F­´*tþç~Ò(²ÌÆÁwºqJ·±eqËáyð–Îa\Ë}8a È}d$ÍQÇ×ó¨ >u¿(Š€^to+ [⨶ÒY‚B}&¤udLÛÿßöÎ?f³£¬ûŸëÜ?žÛn[¶¨…îÖRÊ&hðM41‘¾oV’·bc"ý«Ml¬øG Æšð#¥@ŒÆhƒ)˜FÅ-‰MÂ?j¨ ðG_ðmÄ·FZ–"…¶´+º´»ÛÝ繜s½ÌÌ93sfÎ}îÝ}`ëž«™ÎÌ5s~Ü÷³Ïç|ŸkæÌ¬:OìÏ™òð·*TÔ®l­ñßâ.o Pà/Æß¨ç0´QQ©Ö0uƒ†B3ÕÎ…, |…… s`. Š:t²DYX€/1Kj¡h¡fsDÌÊLp‹Q70ŽWúŽÔÄ:¢µQ“΄-4ßx[}ïܲ”ûªä.UÜ7Á  =½¶9@÷…s À] ]ÕÝóF¹:MÙö»> Ú:ÊÈ%Ñ%´§¦ëÑ MÉ>§¸ OÚ5­> +;'[)©ì‚GN7·c~j&d±g`®Òs æ4¡”R™ÄX` âoÙâöزvªÙµ·³…¬F ºÂè‚´…¢…Ô1å¶nÚEè†oøu÷SÇ>ÜÏÌdŽ%ê3ØèõÍ…8Τ-çŽs´L”»ŽYUö`\¿QÒº×Tî•s*;)¼ÅSÔ¿¡öoxƒ_?7$1¶´ªcÏÎK*»›J[AûSìVAÏmšQ0S˜‹@‹¢cA'ŠLÆ6¹²l_9·öÛrŠÙƘgâÈÉ8óŠ0…Ú°‹ze‰ûö Yø? /±“¡‹øÇ½ ܃‚®môÚ¶ Ð=áCZû€7uŽœ¯ã¸¾÷˜Ë[pÖ° QS ¨Ío±õ¢¥¤}8›d&ØÁ˜‚1 TÝ[• ]Tu/?íàìÂs´†ó.3 æT,G:Q˜*L1Pv`®aM£š]ˆ£†³¢>­ªN…0Ra‰\ý,@Ü®{„ý2$»œS~¢ò` ×·Tˆ£zD}:Ú§­oŸ\{ÊOº¬)?^[dIŸ4yâÔJ@U§}XP5è56òuĘ)#;·YëE§6·Ð¨h£ …¹˜øóŒŠ] fRQŽ ØP“¦L tjU´Î`¬âVe3’0Ä‘Ô8¬áû)ùYÊ]åjxUr@®_ÜÉ·nV”]ÛèµÍ*èd˜â\@ySë¡Ð7åîæœ©pˆFu¿u)ù Zõ¬r®!mçsTŒ©t‚2¥`”±ÜSæ8Ím–çws£Íì hf»"Ì–“6+ØÙ¦ÖS g«¤uìÂJ:Þ gN95èçàœŒ1¯äD=;{b¤éáKõñýtûïÞ@Ÿ…u)èþ€1ñÓ|Ÿ>«]œcV'͆_|8ÇÀÆó…ÅæU1Ά¾zC  UÇ(S Ž76˜èÈ ]‹vA÷­”˜¹Ï&´!F9#,'À°YÀ–¢ŠÔJ i—°±gmâÐÒ>˜ãÙë̈T²ºåæÎÆg­iûZ 9Q-QÒy Âqƒ‚ölôÚ¦4€>—´îrC>ü«¨žè›ó¯¼vî<@Çm-…íûüSØßViOEûƒ~x£™=A™P1¥bê‚‚M&Œ˜Øž…½oEë·]xège1.Ð-m ¤·6Õ u˜p†¸˜t‹&Ô¡xz_nÅšÖ˜ã˜ñZP^5€G·?Õ/ë*5œkËõËõlôúæ+è³U¯}¡iW¬ÈÂ6µQ\_çç«hfwtÜ¿ú[ñt"8{e÷[è)h3èç íæc¸ÜÎÑÐ &)S*HS2f‹‰ŠUÐ…ùöj@Ï]-Ø¥`>ݶA÷l lU° º!žŠÖ„жàIKA×áŒUn)e:r=Žz6ê˜>Òeµ õ†2ýºúúåAA×6zmSB@¯ó*÷h×Úp)_Ú÷˜¨œ<®©kãΠ³Ó÷âj¤ µ qP«ç„‚Ö *æTÌ)YRiÉ„­zºÁ³Öá]„]*vdDµ¥È¶Â>`è¶XHk  ÙPt‚‰=O1`öt*´æâÉ1” ´•Ö ú>¨ÏÄIõ¼ªœËϼ}˃‚®môº&6¢)q˜¡ñAÕ BC+¡û}g¢šögþìsÿŒ3(Ŷá}G€j(´µ1i7µÎs ZÇv‡SÑS” *6©tAÉ¥bÊc­(ì’I%0v)Ø) Ê-…KFè¥ —ìØ®LˆcK`£jTtJA×Sî¤5×YGæE‘”5tlíUj8i:êXì ßj³ÅUj8çóÊŠ½Nª­û.D”– €®môº&„Ûz'Y¦a¹Îm¹P¯nçç•…½T&•éëê•i›üv—b׸JZ}ÅÝïÄà ~ØÄƒŸÚõv¤¯¢ëðFC¯VˆÃ ÚYT:£dNÉ‚¥–Œ¹Œ1Baô˜!ì ì#ØW ——‚^"È>mA·Ù¬`CB]ÏæÀƒ4á[ƒéY#«ˆ3ƒ~šØ‹*ÉgÀ« _Pn8á:`ôü6àÑ£¯[€5×·‹ÂUGÛÅe ×µ SBr¥8ö žáaPx«i6Ufåû²j UeëZ•ö!`}¥xue»ñ”Tቡ«k¿®xmªÚ˜?8èæD›xiBÅ3H8¡dÓ$Ý¥dÎ’’ ½´ôØAxI ¸´‚ýcô2A.¸´´ Ú©g1…S frÔs¢Ý, h_Žá¬±röBê•»Âæ[Q¦ÚüÜï”R=[«œ´?/¾ÄÃã"µÐëZùó6ñWýZáæáãœS°|ÚÝ¿tŠÝK¥MA?//S>wleÙ½»õa_+vÔ6w )×-‚NÏäp¡žPéÔ€Z7)ÙaÉ.KÊD§(Ê 8…0ßÃåŠ\\!Ò—º¯B¶¼ivÐ:õfpøá —»×¾=(+Øõ0 lÕrÈ}n¯Œio¤³VÃ*õOÑÿ[%4 Ž“„?Õ÷Üë¹r|OÂèÆ@¯k9½.¬{©l/ïRÙe¿nŠ·Ì­i_ qß×ìWeó–ê~®%õêý^  ©ÁÜŒ¼5JÚÌä° fêè—Xpš…ÎØÐ”ÓÀ‹£1ze…¼RÑ+¹¼€ýìSØV;ƒ£°¡ ¬rÆ‹?ÓzaEÇjw °*îOôæAä?†LɇP®|¶¨Z¶}Î}€Û}\¨ÐsçBÎ@¯ký…¶&|®¬é¾~X£Ki÷´ß/s˯a=¥¬—¶_ çVY£-L´Y ¹¬ìõ–¨ÿ°+5¯žØ7 µ@udCc*«¦K6Yê63=ÁBwq9/‹Wn"¯Þ„äÀÝ?BöU°¯‚­ Ý,ì  öUo‰K•7—˜åBÅÎÒp^lð €8 åÅ9·ýçÀ~9í3L±÷öõÛâó´Ûú@ßÏílôºÖWA+32íuÞG]{eõcØ6×â窪ts!¤Ú&¡¤£´ôÚ—M]½ë¨×Z©QÛÕ²ñ•jCß&¦ Z 2Bµ Ò1%l±£ßeƒ×ñÝ}ûàõ¯@ðŠ1ìÃ%%lèVl0-íË(•°˜ðÅÈ ûÁb·†HðC œRÆÚòÇ–Žó¶72ËÕûÁPoÆ…«ŠŠ×O—7à/Oö­7Úí êAA;ÝaùÈGxä‘Gx衇§SаЮO*ÜÑKmgê]¡‘³QÙÎÀX;”u¤ª}ÇJÛ,# ºÔບPõÌñýkUšN{?ªŠV‘e¡œÚþ¿èÿü_È«^‡î/‘í%º9G6¦0Àd ãzª0å¦S>û`”¶BKi(ÇÞ.ëJ°£:– IDATõk¾ÿÙøÎõ\q>(hg 3ö¹Ï}Ž×¾öµ<òÈ#aƒSІñ*ß¹@:nKBVÑ:¡+W%‚Â!¸WÁ7WÜÖ¾ž îs `éñyrðî:vÕ=çÓÁÃ9tøüŸ¿ýƒ½Â>ûÙφ¡™Åá,pìK@\wS`öË]p†„ªî™ˆG¾@i'ÀíâÑ«`­¤aÜèþuÝ÷†çB‘š¶'0Úݪ-eW……ý SÌ‹‚û xqtšj$vÊÜŠ-MDìÄgq*:è.¨‘Uµ>ˆsŠØ0È< »ïk5\‹DŸvÿUíæÒçú«@ÍŸKƒ €^×üyÐÎV•ûägã뫬½>Ͳ‘ºN©ìÊ›&ØËÎÃZ£z+ŒHz}Å»¯úe<°p¶i$ÈX)¦bÛǬù\)¥=n‚y‹{[`Q”œ¦)R” sDf S“œ‚–1ˆhɃpe¸¡c³¾¼.V¶YhÊï߆q7$»Eûøº`ý{øKtqÛèuM0¿ÃYGj9WNäæð¶ÚsM·uÛ‘9H‰~9P{uuª;ìp~vFIÇçLÅŸ3á D)±³ãt :…jbvížU°1ëGaþ‘O1^PJv‹3TEeUôÂz‚È„@A×N@Æm:ÁP£¼UNn“íõ«·æöý)¶ÁêÃZ[}SŸ£]6ª7ßW$µólO§UµßgPÐÎ@¯k‚y?"~Ègúa¿®>Ë[çXå_íUàŽÛ’)qÏW[“Ð]™§Ê™‡Øû­u§å—Ø™22Ë~ÎY%ÌE)…Ð#  7¶ ¨  (™;TR‚4€6qh§žûÄ ¡P=€¹` ¾ék}ž†±Ÿûƒ….Üá|…Em“cKÎWP Tµ·éöj ¦<˜±ÐkZ…]®ßýn:èJÜS%¯_tL=U/e}@®š‡¾Ö]šÛÐæÖÛÐ¶}©xvöˆÎ—Rç98WÞýÒˆ6i-ìzÏ »•Y÷y!ÂR¨—9µ;Q±!b´eMQTÌ‹9¥,©dN=H(‘zÔ¬+åéyÓÚYNµ5Ê7TÀ>¸ãkù ,,æ ~¡¯þk×¥åoÀiêMnZì(RØ»ªj8›¼ùt~TÛ×ìþ߃½¦)á–±q[×qq­ÿ9"¯^¾ì ½PA««ïO©öœBO…%RÏ Pf@í&âÝx¥B‰2¯`VÁn%Ì ³öóB „U-40omOĨh·Üg!ÂX”¹”,¥¢’³/xgˆî&üo°ÁŽë›‚k—Bmƒ4üod17 êa9ÕVoòâë¶óëjïÀåîÑ!ÄßBêqä÷_7¸’ú»d°Ðk[­ #¿®Yn ÝFrþ˜4Ú3Z}¥Å½ãÝ-ÄAßë™_÷]› el¹¾H®ls7ج¿Ñ¤z‰jJUÊÊxQÁ¼„™À¬0Êy^ óBÍÒõ½4pšˆYÉLaŠF…÷R”¥””R¸cb¬íA¼ú“Ûš$¡êÃrÔ…‘­ZÉ÷êuûÜý,L›Ý}ð†åÔü“"èçCØo »”ÃÙÓ}¢æ©T0˜³ÐkZJA§Ê}}qù\M#?×·Ü#hG~‰%ê(ž"—ú0ïÏX ÒÆ#¨Êz/–¶¼´ ^¨Y[iÌbá,0/`Y‰}aQë0”Є9¦Þ~naº‰ÀRÂ+©0ƒmÞ_(x»„xªM^xm†ÈŽ,d›ÔÀ¸ÀŸè§ÄqçϺ;…ª8†ñj ¯VÇë¨åAAçmôš+è–ë:§—݉û¬sîz·Š_m>„s@ﺂù¼É…ó$\gi)MZˆt°žcfi,Õ„@ê‡Ý€Û¨cKèR 1‹.yw¨‰Ñ;”‘…] \²a]{@9¯†Ãºö„òjûC†y0‡ÃŠëÀ8å'Óo0c ×4Ũ7W^‡ Pæú­öi«}Õ5Sí-ŸæÝÖâë‡RüŸî‡@j*tý&¸§n}X/¨Õ”^[ X Á7¶ ç¥=¿ƒr+ŒÁ9•<`ýð„í±êM“RËI•¬ŠÝ§¶áx’`×¼v¹ ã³ [t¿®’úN36zMË)èU€]§}Õ9ûõ5±ƒ®‡C´ÑRûøÈ—Ÿäô|ªWº»ÇЮ\+é(¹õþKÎ-@ÓÀc õ;b¡<¶ðWuí'¼sĹ´¨Ú©ˆ}§ú7aˆ<¤Óa‹…¬J!m8w…,úBxÝðE ä"SlôÚ¦´íCm]w×ÛË¿÷iû¶•·-« ~žRçq9Dº h¿žJu¬Ø†&–h½š©¶;Bˆº…à w>J¤~ç$~ ITN)­xSqâî½l»Â’<.ž?â^[ÉÏvnú¥øœ†wê»ÉA¹q¼<Óè” €^ÓBï§Ñ ÝÕ}ò@öÛÓm]~ þ뺇¦wãïò5õ>»ìåUy4 é°…pÉöÂyß@!v1QiÔrUßÉpF @…Æ kÇSõˆóê¸í“¤/Λisy Ÿ«2·-â﫟O!ö` ×¶œ‚nq=¸®ÜÔyÏõ<$ÎGæ©rè $q¿º¬ùsäR ì¸ià\¿‰§Ü¤)ÇŸºa.nkâÀ&¦ a‰²Ωäø#wO}¡ìñkqÑ>Ê8íË/Pšú®ãò` ×6_A¯ Üsì*h˱¹Ï@}n úкçT;mŸGÂ6È1[V%ŽïóWQßT Z<_l)xäbµÈáTµÈØ©»¶Âöß Œ_w sê^º ¼Nl¸Oßø{êlçò!ÄÑØè5M ½>HWÃ8è§}`¬YHwÁ»Õ¦yåß•ˆúV¿“êbxæêqÞÕ×Y꿉ôPȉ4Ò”??öfZÄaмRvåDüWµußëÀ¶én÷š¬bw=IÅÛÇûýú6m$ÛÛè5ÍWÐë(×uÀZuöi“[hU=>o kë8HÞX;ÄÓ€¼ESk9ÅÿK¢œRt9ù¡޹¸r0CCRöãȱ"N‚7˜—Z‰£*Ö,Œ» /mŸBâô‚ªa¹½¯wîç‘ksåAA76zM«0SºÖqÚŸZà­ ¢ ©v¶wAß?gç}j×C)7à©A=6_µ¹NþZª£ ‹Â¶Õ€rýœÚÔ0V\+a ÛjøªÉë2á€_×à_[…wÄŽµ­äƒ²§˜cì÷‡ð{é3ªféÖ¨\ÿŽ|•/>W¿Ð €^Û̯D…b&0UF…­»vóº°›P¡Tˆm‘Úw6PM”µÚÕ_Ç4å6ð+mæ´Ã5ù0KÓ/=µ¯ùf©œ„Š×€ØÂ³Ð†jaê®á¿Qèà[ÃVlÝoóêþþ*umX§aÜ5 ç/ ®aä÷\!á§³ÜV¼}@Üh ~¶,çÎa”{òÉ}‘ÚèµMh¶T‰Q¢M=ü¥´¨ye!ïr­ë¥×VQQ©*•^[{†C çÔLˆõ@žú  ¸ýßDàºL^Mú ŽgE8€¶ÎéT³6o6ÛÃ*cÄÔµy-܇sœ;H7Û˦Ã>|°%êN¼Y%,±OÛ}¼2P/ÝZƒ0jwmxM_’Æ×6ÉP¸9^¼‹úçônztm ×¶‚Ð9l¥0¶ZϚܼۦ5B³Ê’ÉÓ,ý£u*kÈ—u¹´©)—-¸kàk}E($ªÇó±kuL+õÕ±Y!¯V«Ú„ÆÚ€¹ž)bÏ7²Uwþ‘˜þvY~“+5œ'ҔǪŒUl¹r v÷ÿ篚eÑ­Š W¤qXo>küÀK[Š}lµü=¾*á¿HmôÚ+è<†úE“S'ú¤4n7¤5öi‰RFþ2È5XÓÍ­ – ÄØ—^ÙùÅúµVò ĺ¶HÑœ-x}ÐÕ*Yý0ƒ2Rsg# Qh·)¯C–xçp€`€5Ùüÿéy¹ð*½Za·Sr±O àäm•ªï2Q^¢ÜMÝÁ¼Bµ Á8µ–uØÀ¬¹¬ ˜+­!9± u__¡Z¿ò]ÿwÓÚF"õF²S… ›OÕ¨è©jwþq Eà‹'¬;ålœ(GÅ4x#Ÿ$´ðÙ¨Û.Ÿ¶û|¹vègÝ'Ê]ÛEè§žzŠ;ï¼3ðÝpà lnnrß}÷ñàƒòàƒrûí·ÛÖÍšŒ?§ªWƒ»+^}>¡ÝVÏm_;¶SÒ~H$­®U=•­Þ1nK§¼µ¤Ô%h‰hÉHÕÆ†…[UÔ›•£Z«n·JXE®nP™ FAW0-`Sa£²`Æœw¤.öí ¼Jk³AAÐQ3åÎäÕ%ÑÞ>Ÿ%€ý¼¤ëÀµÏ±ýuPО]ô€¾öÚky衇ßÓO?Íã?Àxâ‰'ê¶Ó'_â‘¿ù" \}øZ®>üÖUÒé×<úÀ:䜻|]p^­®5ª§B ¸gC!1œ}h«.Ñ%ª –ºdY-iŤ²«Ø98Wv QÍQm>¹`_(Q·?¡2)„ œ7-¨§¥R,*ûœ°'¨äm-ýçtܱiÈ›\îB8¯€\ãØºn•v º}ßêóýÖ3}êY8yò4ƒ»è²C‡ñã?þã¼ãïàøñã|üã¯Ûöí¿Œ7Þü¿ñ׆˿ !,©ÛòÇT¤@žu~þÄù…vÃÖÎrbÀQÃpG£¦3p¶PFÄ  ê9KSê‚eU™Õëì[3R5†% T+Fb]ÀF¥lbà s¨JOÔ»í¸\|Ûq×ËŠæÜ­Þ‰r¼1¨àNúȃ1Õî«çìy´Gß”W–Í1‡äð5‡@„¿ýÜ—ÌØèŒýîïþn¦EcÐdÊ©zΗ‡uJ§ôŠP‰úa’°Ý£ŸºN(6 ÖâÑ`bÒ00Vg·¿5 T Ð ªs:C«ZÙßõÊÀya•µN¤Þâj,6þ,&îñõ!mZá—,b%+î\XÄIÔĬ¨mˆƒ0Gë8ô&è®õÄ„<Ê]TÌ–s^Zî0³c" añ‚Â)ANCµ«Ts;XM±ÃWÏÑGTµ³:¼¯Y•v¸"§˜³Õ ®Že>À B€Ö¹—dùF P}_|œÚcµh’ƒ« |ÕÝ`tcÉî”ù`×ÿ“Ö2 €^ß”ФÁܾ^¦Í/÷ªódÚ’]k§ØJ |ë“Öí3zÀO¼QÖ„eѨ¿kóíüùЉABM^ϳcéjÕ¦IåºÃRÐEÉ©ù1Î,ŒUX|_áA^RdGÌ‹)s¨–˜évñôºÄs'ùœò¿¾ä޶^Xµ8r¹âÈAÔ+×P|£‘X[9¨Ú¼ðö{´­M»" Ý<¼>öæë¶Œô¶0V ój|0‡O±¸> €^ß|CÓ‡pЫÊÁa}Àßu¾¦­BÄùÀ ܵ†½ßOÃc¨ë¶”*/¡²©ôæ·ù VÒøjzŽºP‡nCµV[Pm¢Ë ˜˜ïÌyavŒB¡|æßä¤2Úª™R-¥¹d¥PIæZ1{`P³Š³ª s9Åç+SÐqSM^Ù6õò‘ƒ²]oOFT½}[4±3¢®‚ozÏ—Õ)‰•r'ˆ3åâ9X ×7_AÇê)åë æ³ñ¥àº²žqê˜nwØ&‰~õs¿Œ>̨¬r«¬ «ìô‰rl¤m5riÊ~^.ͨž.¼ÇTû¡º ]\Šînñ_߯ÐcϳûüˆñK0™ •7ÏYUÍ4½¸&©Úä ¡ÑÒú¾Bôcªêí³"#TGH°¬¿\Ë…çóú&åêƒõ,€„#rpNÆeÈB8[_å´³ÐëZJAÿrMùiTûy»fü9KôÉ«o¯]¼JõR­÷`,À«ÂN¥³¾R ,lÁró±I»SØÙ€S›èn3ûÚ„âØQíþªs»i“õÜÇAWsðýuü4×3Ë'ÞµÐW¼¹mgãr ÜXE' ›UÎqhbUø¢+†ÜÌ ʹ«ï`0z}s :Í>À]Õ¿ï±^®p«®Ê;ÚbX§Ö•ïTÞ9È‹=™fÖ>¨£¥>Ì MèÚE";ˆÌ³uo½î„»÷"RƒÚ’Uà˜U«“j9©ŽãܪF€nÁ· Æ+€ìÕU ¤Â]pÎA¹ ÔµÜ÷`0z}«0@€•m-űªo à=!¯k«ñyl½¥ÆsJÞÿlQ9×?ðÇ÷CºÐRJ8†¸™ º[ ;zª€#ä{Šïnò#Õ˜e¡Le?ù/Fœ¤à …Ì– ¥wacÍæ#10rpò˜ Qd`ÜjËøVªåØß†q+ÏNŒî ãÖ``G ·±oPÐÎ@¯kž‚®ë]`ì[OÀVábWÑñ¶Üù@Ðî>IÀÓÑžº~ÜæïûücëYš†tüÂa ,6Íf;§ 85B^£ÿ©\º+\R”–ó6Ë F¼DÁ.œ‚%‚Ù×ýZ ¦nëC͇o*T‘ S$`Ü‚pJ'Ú4Z/¯ú2aŠhOÕN…ë¢X¡–“¾ø; @¯o.Ý´½|gÓ§£_ü¦[£–uõ‹1ì{<\Rª[S»Šx}[oãù°Î¥xéÈ\Й˜ÐÆN§ äÔ}AÙ8#\*›ö¢s`“1ŒdÛ¨hæ „%"Nªû7í,§¢}%j¡×‚rXW-ˆ“@…×ñÛZj9„´"ˆú÷%M99ƒbЄëK¦=å'ÆÈÕƒÐ뛺'4s ]ùþG«¿öì–×½Nö3Ÿ1úÕß‘6pŽsÿ ñRŒrvÉWÏ3AÎè霂ÑiØW ÛLÅèÜ¥ÕËûdʘ)#6)dÖš¥§¢«Z#çaÓQkú€Ì¨ê1á¶ŠN©áeìߟF÷€9õYì§V±qéžj8ˆÙG}Ò¡T9ö 6z]‹ô MªÆXA®:OWŸ\ÛŠcâûéü,™Wž“>V\»ë^ƒ¥;ÄSÐÒoÌ ØQä´ÂKÊærĶ›(‹ÏÒ¢xAÁS ™R0³*Ú…9šP‡{š4¨È:~èv ßUªX¢cb¯RÃë¨ãUJ¸C»’ÐŽüÁ.~>„8œ €^×”¼‚î £Üº‰ã5öÅǦÖ-Šëé·°°®vE·>Ÿ¹ë~»®ùĪh%èÜ@Zf:SâØQ6K؇°IÅ”ªÖµfl·0Qg¦L,œç²h-æüX´ÔÿïèQØ'jN9·úu7§”ÏÄ„Ç)m•øH›nJ§òUm· €^×ì,ŽU*s•_àò¯ÿ@kœS`^éP ‰u(V]3{ß¹óùžZ1hi—bgp-³fÊ´,ØBØaƒ‚©VŒ¬‚®J1HžQ0A3¥¥ÕÖÍ:ÕbGaÛ˜ÈA4¥šS OA»Kí¦àíê«€LÆßS ÇåX§Ôo ˜‰Ê)_T®Ï9(hg ×5)¡¨ÌÛÁIàöh_èeúhêøurÿ«ú{×ÔDõg`ô½?& þ±>4œ+ ˜],ºsŒ–ʤ*ضP6€)ÊX̬dwzižS0CQ°É„‚Mš´?›Ã,ãØ\l)gÒ ˆ&ÀZÏŽèTÅ=RÐŸŽ¾qMÞ KœMž/kR‹msßq|üÅm ×4÷G¬ùÕpÅýŠR/W/·p— ³;RÕ”+ /·ªTÖ)ËÖš1hÇ„pÖ–¿µEÞUÔ×Lù‰òàá%¤¥»œ(P ²¤Æ•0¡`CÌ6W¨ÝoPílc·rˆØ?~Lz†PH3£bÊ"®—}E|l8vÙ=R`\#&œ‚³²²½ß/UŽ})pzžZÕã÷M{úõõÛ\kÕÑëb³Ðûµ_û5öïßÏsÏ=ÇÿñsÕUWæŸØsOåÐÕ‡»°¦ùÔâ•ß/.+P]¥wŸ8ö ¥­^Tĸ­Ç׫Ÿ8sbÕí^4vÑú©§žâÎ;ï |·ÝvEQð«¿ú«|ë[ßⳟýlÝ&˜_E·éU ιzÜ]Ñ‚10¥â‘¿ Ú~ß2î§° lGíe\Ö¦éïõ«ÛH'צÀ>ûE<ñ+êG~=P#Œ¼4FS0¡b&‰Øð†Už5€Š6p.p³žÝ$»……ýØ~÷fÙ#ÿzPÔ¹is÷S;§:Cô²T·ø¬3àLæxIœ áX=ÅkxmŸ+§ÍÏ¥Üó+º(LTõÿ?õþ‘ É{ì1|ðAþàþ€¿ÿû¿çßø¿ù›¿ ÀÏüÌÏ0ÙÞÞæ²Ë.ã²Ë.ÛÓ{9qâÄž_c¸Öp­öµNœ8Á‰F9ï{ßãßþíßöìZ/'°3gÎpÇwðêW¿šgžy†~ðƒ¼þõ¯ÿaßÖ`ƒ v‘Ùè³°Üâ^Ø‘#GøÊW¾Âöö6÷Üsسk|ä#á‘GᡇÚ³k<ÿüóÜ}÷ÝlllpæÌ>ñ‰O0™LÎë5Μ9ïÿú¯³ÿ~®¸â ~ï÷~>߷üÇä¯þê¯X.—\wÝuÜsÏ={v-€årÉ/ýÒ/ñ¦7½‰÷¼ç={vUå}ï{/¼ðW]uøÀöìZÏ=÷¿õ[¿Å«^õ*N:Å'>ñ‰=»ÖËɆákš@üèG?Ê7ÞÈ£>ºg×:vì<ðÓ锢(Ø¿ÿž] àsŸû¯}ík÷ôW]uGŽáþûïçÊ+¯äèÑ£çýŸúÔ§øå_þeî¿ÿ~^xáž~úéó~ g?ÿó?ÏŸýÙŸqäȾøÅ/îÙuœýáþ!¿ò+¿²ç×ùÌg>ÓO>Éh4âŠ+®ØÓk=ú裼ùÍoæ£ý(óù¼w\ìvÑvÙºˆçûZ7Üp›››Üwß}<øàƒ<øàƒÜ~ûí{r­[o½•¯~õ«Ü{ï½|ò“Ÿ<çkt]ë¶ÛnãÖ[oå_þå_8yò$?ù“?yÞ®çìÙgŸåÍo~3×\s Ï<ó ‡:ï×ñíÈ‘#õlŸ½²/}éK\yå•\ýõ?~|O¯uôèQ~ú§š÷¾÷½üÆoüO=õ×^{íž\ëMoz¿ø‹¿È—¿üeTõ[¿Ðmt‡]{íµ­?õ{ì1{ì±zñÈ‘#õâù¾ÖÓO?Íã?Àxâ‰'Îù:¹k}úÓŸæäÉ“Üu×]|ýë_çá‡æ-oyËž\ à _øŸúÔ§¸ÿþûÏù);xð ßùÎwø¹Ÿû9¾óïpðàÁ=¹Ž³{ï½—óòo¡Ë~øaΜ9Ã?üÃ?pìØ1Þö¶·qÝu×íɵ<Èîî.`þý½øâ‹{r€x€»ï¾››nº‰÷¾÷½üë¿þ+oxÃöìz/bÐkÚzñ}ï{/¾ø"ÇçãÿøžÇ nºé¦óö—AÊþýßÿŸýÙŸå–[nà]ïz¯yÍkÎë5Μ9ÃÛßþv.¿ür.½ôR~ÿ÷ÿ¼žß·¿üË¿äw~çw¸ñÆF|ìcÛ³k9ûÒ—¾Ä?ýÓ?ñîw¿{Ï®±³³ÃÛßþv^ñŠW°\.ù“?ù“=»Ö×¾ö5>ô¡qðàAžþyþüÏÿœ­­­=»ÞËÅ@6Ø`ƒ] 6 6Ø`ƒ] 6z°ÁìµЃ½lí‹_ü"o|ãyç;ßÉÛÞö6NŸ>Ýêóì³Ïò¡}(yü;Þñf³Ù^ßæ`ƒµ €ìek"ÂÍ7ßÌ}÷ÝÇáÇùçþgÞùÎwò®w½‹~ðƒÜwß}Ü~ûí?~œ÷¿ÿýÜ}÷ݼúÕ¯fgg‡›nº‰¿þë¿þ!ŠÁËÛèÁ^¶¦ªüÝßý·ß~;_þò—ùØÇ>Æ•W^É%—\“O>Éb±àñÇçСC8p€øÃÌçsxà¶¶¶¸á†øüç?ÿÃþƒ –µaô`/[ÞúÖ·òž÷¼‡;oûÛÜqÇ\}õÕuŸªj–ÿ£?ú#~â'~‚_ø…_`ss“—^zé~߃ Ö×=Ø ûð‡?̾}û¸ë®»x÷»ßÍoÿöopùå—³³³Ãc=Æý÷ßÏ·¾õ-Þÿþ÷3›Íxâ‰'ø©Ÿf˜váÚ0z°ÿÖöùÏžcÇŽqÛm·µÚ>ðpÇwpÍ5×üîl°ÁVÛ  ûom7Þx#‡N¶½õ­oà<Ømƒ‚l°Á»@mPЃ 6Ø`¨ €l°Á»@mô`ƒ 6Øj l°Á.P=Ø`ƒ vÚèÁl° Ô@6Ø`ƒ] 6z°ÁìµЃ 6Ø`¨ýÚ^¥ìi“,/IEND®B`‚mpmath-1.0.0/doc/source/plots/besseli_c.py000066400000000000000000000001631316273626600205220ustar00rootroot00000000000000# Modified Bessel function I_n(z) in the complex plane cplot(lambda z: besseli(1,z), [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/besselj.png000066400000000000000000000557751316273626600204000ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìw|SÕûÇ?éʦlZ%ÊRù*¢"!Cpƒ¸AR¥²·€ˆÊ’-#´ŒÒ–Q:h¶´P(Ýmº’ûüþ8$iiæÍM{“ßy¿^¼ªÉ½ç|r“<9÷ø ÂyÜIh\Ÿxä¬ àú\*5о¾¾Ø¸qc…-‹   ´oß«V­BëÖ­Tîyî$´®O@õêÕQ\\Œµk×–;ïwFaâÄm8rX¾(-ºwvì:t¨ŠWRµZ oo殺a®OñÈYÀõ¹Ni Ì$tsV¯F’“~ý€»w«HäïáúÄ#gm×çj8¥6–IèîlÚ¼õpý:ðþûQˆƒü³¥¸>ñÈYÀõ¹Ni Mezx›7íÛëÖU®.rÏ–âúÄ#gm×çj8¥6—IX³&°mO ÄÇW¢°ûÈ=[Šëœµ\Ÿ«á”ÚR&aÏžÀÌ™€Z Œ hµ•$ì>rw„p}⑳6€ës5œÒ@[Snôû>{ز¥D•AOñÈYÀõ¹Ni m)7:oàå,\È ue wG×'9k¸>WÃ) ´-åF[·>ý”mqÌšå@Qe»#„뜵\Ÿ«á”ÚÖž„ß}Ô«ÇYRR$ª rw„p}⑳6€ës5œÒ@ÛÚ“°~}`Ê@£aÕïÜ!\Ÿxä¬ àú\ §4Ðbz~ü1àé ¬Yäå9@TäîáúÄ#gm×çj8¥Ó“°ysàÝwœ`ãFˆ*ƒÜ!\Ÿxä¬ àú\ §4Ðb{N›Æþ.]ʶ;…Ü!\Ÿxä¬ àú\ §4ж: utí ¼ø"˜ìÝ+­¦²ÈÝÂõ‰GÎÚ®ÏÕpJm«“°,_|Áþ:2qEO8}ZQe»#„뜵\Ÿ«á”Ú'aYÆŽe¥î¸"wG×'9k¸>WÃ) ´½NBÆÕªþ J2$ù;B¸>ñÈYÀõ¹Ni íuê¨_xýu 7WÚÌB¹;B¸>ñÈYÀõ¹Ni ¥pêpÄ6‡Ü!\Ÿxä¬ àú\ §4ÐR8 u¼ôЬpìš*͘rw„p}⑳6€ës5œÒ@Kå$X÷ïQ£A.&ZOñÈYÀõ¹Ni ¥tê:”ýݵËþm¹;B¸>ñÈYÀõ¹Ni ¥têhÙ’ms\¿\¼hßXrw„p}⑳6€ës5œÒ@Kí$Ôñæ›ì¯½Ûrw„p}⑳6€ës5œÒ@Kí$Ô¡3лvÙ7ŽÜ!\Ÿxä¬ àú\ §4ÐŽp@»v¬±ll,-~¹;B¸>ñÈYÀõ¹Ni á$Ô!Å*ZOWÃ) ´£œ„:ì5Ðrw„p}⑳6€ës5œÒ@;ÒIݺ­[çÎ7oÚ~¾Ü!\Ÿxä¬ àú\ §4ÐŽt€BaXEïÞmûùrw„p}⑳6€ës5œÒ@;ÒI¨Ãžm¹;B¸>ñÈYÀõ¹Ni í$€ž=-€S§€´4#ܺ,ZLž Œ (•@X"Οw¸>{»£FÎúä¬ àú\"º@NƘ1c*ežO>!ˆV­*ó`HÑ!DîîìIcÿš6e'iµ•¢“ÃáHCeÙkqÊ´£„:Êmshµl…ܧk^¿>ðå—ÀÁƒ@p0pú4[Q÷í õ;À”)ìØË—+E«-ÈÝQ#g}rÖp}®†ShG; uôé4lĨҠé÷àïx{ëÖ))ÀÂ…À AìÀ^½€éÓ• Éÿ ôèÁŒöãKÓ@Bä³>9k¸>WÃ) te8 ÀÝx«ï=Ó¾ «¤L˜T«fò¼Žo¾ œ=ËVÔ 0l°eK¥h¶¹;jä¬OÎÚ®ÏÕpJ]NB@^~ŒˆG‹ ~ƒ3g€‡¶xZDDk>}:°càæŒ ¬XáxÍV wGœõÉYÀõ¹Ni I(*† Ïõó³x£ä/^Õ­:µ\¶Ô°aÀž=lÅýÉ'Àl=rÏæ’³>9k¸>WÃ) t¥8 ¿ø8yèÖ ó{ïG∌´îÔ ŽÁƒ?þ`1#G²öáUˆÜ5rÖ'gm×çjT©V«Õ1b&OžŒo¿ýVÿxbb":wîŒ)S¦`Ù²eÎs¸“ðÀ`åJæ! c»EóÚ¤Aƒ³)g±ýòv¬XR¡ j4ÀúW×ãGÞ@‡óÿ¹h§Œƒ–ÜIøÃ@~>ðñÇ&3«£9¬u„„îǧzcþÃwP“<±fð\ÿô:¾{ö;£Æ<Ü<ðLËg°ò••ˆÿ$ã»Gfa&†þ5Ÿù%Ú‹óÊÝQ#g}rÖp}®_AGE±uë @ƒ&MLd­°:u®\±oÚÅ¡‹ñÍño %-þwC Çj Õ…D Q#›Ç:£÷ŒFFaz¶è‰ƒ#¢¡wCûr8ÿá+h 4“pút@€Y³Ìgxè!fœ££™±6…¹l)"Âw'¾Ã—ǾD5jX9h%ŽÕý­n©Yu< l?&_ÀÓ~Oã\ê9ôÛÒw LÇêô´ùZ–DÍë(äœm&gm×çj8¥–,“ðØ1àèQ¶­1eŠU§è¶92}Œ©l)|vä3Ì?5õª×É÷N`Ê“S øö; F à·ß€Û·m}˜Cñøèãèß¶?.ß½Œ¾›ûâvža,ÒrÏä"inþûß8óÐ{#¸v0=Ò8统Gü'ñ¸·ÿ4y•SsÛrÎ6“³6€ës5œÒ@K–I8>û;oàåeÕ)ÖìCóRk-Þÿ÷},?·¼!`LzùöbO6mÊ )1-"©áYû†ïÃ+í_A̽¼¸õEdgd#ei δ9ƒˆÞ¸1ãꩇ¢¤"¸×t‡wGoTó­MŽùò‘ú[*¢^‹BhãP\r… …¢õˆEÎ^~9k¸>WÃ) ´$NÂðp@¥b«ç¡C­>íé§ÙvõÉ“,ôÎ:BðÞÞ÷°ùÂf´¨ÝAã‚еéÛþ_}Ô® ¬YÜOÞCuêØ=l7†6Š^;{áL«3H˜š€â›Å¨÷B=´YÐîÛÜñ\ÉsxæÞ3èÓ½“{ã¹¢çÐ;¥7:néˆÆ#Cá®À­Õ·pö᳈’tËÎG©³#IÎÚ®Ïå ÿ¯= ‡ cýW®´ùÔ·ßf§8`Ýñ³T³JP«_ZÑõÌë¦üá6ð„ 6kÒ!ÝZw‹k’ *:ævŒvôßAy—òl§$£„ç&RH“RAE!MBèÞþ{¢uq8ÎïI(v; oÜþþ›U«;ÖæÓ-ms”u„üuå/øú£¶Wmy­ë·6=ðÔ©@½zÀ¦M,¢ÄFŠSŠqyàeÄMŒƒP  ÆÄø`úx÷éwqÜó¸Q}¦ðlà‰VßµBÏøžh6±Jî”àò«llGïOËÙ‘$gm×çj8¥¶ÛIøË/,rãã™sÎF f ÉH„Î~+c÷Ž… üùÖŸèÔ¨“ùëÕchµZ`öl«õÒ6§á\çsÈ<š ïŽÞèqºžZû–Ž_ ½g4¢Ó£Ëé³Úè°¶Ûÿ¼šxáöúÛ8ßí<ÔñŽû¢ÉÙ‘$gm×çrÐÿ·-Ž{÷ˆ¼½‰jÔ JO=LÏžl7"*Êøó·roQ‹%-JÐâÅÖœ—GÔ°!‘BAtõªÅÃ@W?¾J*¨H妢„/H[¨-wŒ€?A j¿¬=åç[¯åŠïÓå!—Ù–GÓÊ?‡#Gø‡Øå$\µŠy÷Æc["1·Íz.CvAj^*Æv‹i½§Y?p­ZÀ´iliþë¯fÕh54 ©¿¥Â³‘'ºvGÛ…máV½üÛ:ã¹xõáWŸïO~/ÚQãÕÈ wuFóÉÍQ’V‚ Ï_@^Dž¨±Ì!gG’œµ\Ÿ«á”ZtO¢"`ùrÖÄuš FÓ¦ 4aeÊJœK=‡Þ¾½±ú•ÕP(¶ >iÛzÙ´ ÈÌ4zHIZ .ô½€Œ3àÝÁ=Îô@Ý>ÆÃÝnXûêZÔ¯^ËÎ.CaCñ¡s 7Ú¯lßi¾(Í(ÅÅ~‘sZÚrî['gm×çj8¥í$ܺ•UÜóM m[»4tïΗCB€¬,ÃãËÎ.Ãöˆíð«ã‡=Ãö šG5ÛoЀ9/Õj`íÚ OÄ ¢wòÎç¡î³uÑ=´;j´1¿—Þ´VSü:àWcÿ‹ÂR;Œ´B¶‹Û¢ÕÌVÐähpé¥KÈ=#] /9;’ä¬ àú\ §4Т„«V±¿v®ž¶4ˆùóþû=¯ ω¢Ä"4Þ]ÿë ÏfjŸ–aT—QÔ~n$À?Ð_¼60#Ýzvk´ž×šmµ ‰BÑÍ"»ÆÔ!gG’œµ\Ÿ«á”ZT&aD té<õ”$: bJµ¥½g4еŸñѽYwûøaÖ!àÖ- 7,—^†&[ƒ–ß´Ä#Û©°ßl…B5ƒ× N‹:Xºa©aöiÐò›–lOúN ¢^‹‚¶@k÷˜rÎ6“³6€ës5ì6Љ‰‰Ø¸q#–-[†   )4YD”“pÃö÷ý÷YŒœ¼ô+Üø00;p"nG OË>x¡Ú ’Œ¯_éÿü3Ô1¸<ð2´Z´žÛmæ·ÂÍö×á[ÇŸø}Œÿw¼UåIÍ¡P(ÐnY;Ô{¡ò/ä#æ½`_ñ%9;’ä¬ àú\ » ô§Ÿ~ŠU«VÁÇÇ;vDDDÆŒƒ+öÖâ´€ÍNBµؾµC5J2uê°ÎX÷ªÅüSóPÓ³&¶ Ù‚'ŸxRš žèÖ E7q±oJ3Já;Õ-¿mi×°sFÌA¿Öýu7 ¿ûÍn™nžnèüwgÔh[÷vßC¢2Ñ®ñäìH’³6€ës5<ì9ù§Ÿ~*×_¬ÿþï°ÙI¸k“ n±¤¨­¼4H“GCKZüòò/hS¿t}× ”NœŽKiP|h2º Ú.nk{TÈbùÀå貪 æÍÁ˜®cDõ6,‹§'Ýÿ("zE iNj>Vßn,j,9÷­“³6€ës5ìZA{{{cëÖ­úÿ_¾|¹þqGb³“P·½1a‚äZ¢š}øÄ£NÚ+˜Ðƒ/•#D›¯Å¥Í F+ø ¾qµ­ñ ÉÉÉèÔ¨&>>ÙEÙ˜4Gµ@ÍGj¢óÎ΀«\Eqj±h}rEÎÚ®ÏÕ°{:++ }ôƆv$~Ø‚MN«WÀ@Ö å‰ö†ïóßµÿ°=~ÜŠ|»m=ÒÒ˜ñ”Â" ˆ…¼°|Ôm•‹Nð‡ÛÊev ôù÷e5BV„­@|F¼$c7оS}¡ÉÖ v|,ÈX.¼•úÄ”¬^ š+´m øú={Ÿ}ìØÁn¦Ä"w'×çZØm ûöí‹k×®!==/HlMa““pãFöwüx'Y…Y¿o<`@é ¿©¾ˆ¿½ŽÒbÞ‹AÖ±,ÔìR©zý†»ÙÄ[Ðék\³1¾íó-4‚_ÿÚîqu´™×Þ¼‘õ_n­º%ZŸ-DF/¿ÌºÞL™ìÛÄÄׯ©©@X°l0bв%ðõ×âz#ÈÝÉÅõ¹dg-ŽI“&‘Z­¦ÔÔTzë­·$É?·„Õùò%%DM›¹¹ݼ)©†»F” Q»GÑÑ£¬.ÇoØ?® 79ŽTPÑé6§©èV{bÊ6ÉüùöORu‰šZþÒ’ &J6nnx.xP`@*ˆ+lÜIK#1‚]€¨uk¢éÓ‰Ž'ÊÍ%*-%¢k׈¶m#3†ÈË‹ëåE4g;†Ã!’_-I‹%i4©†2ËÈ‘#­;pï^öM|åIçßµ“ ùþìKY…YTXÈê/ÕªETTDTP Þ ]Ÿy]_Y 6<Ç^KË–Dv^çõm»¸ =±ö Ò ZgÙNâœDRAEáO…“P*ˆÖgŠÓ§‰š7g—¥I¢U«Øo²%RS‰¾úŠÕˈzõ²ª.•ym‚@táÑ’%DŸΊ†Ì~XçÏ':zÔ:qvbÏg¯2»>—2Г&M¢-[¶P\\%''ÓñãÇiêÔ©&¡ÄŠ 2ĺfßÀÝ»%›;57•êÿTŸ ¿v\ÿøk¯±©Ž'Љ‰5öÍ_o’ * ªDy‘F ìÿïl’ƒÅÊ'¢Šú´‚–žXûA Úvq›]c—E((ü©pRAE‰sEë3ƪUDžžìrŒËŠÚJl¬¡*aÍšDÿý'B[z:k´ððÆe¼©>>D'EDØ.ÖJÄ~ö* ¹ës)½páBÚ¾};}ñÅ4yòdZ±beddH(Ï8V]Ä”¶µÑ¸±d+AhÀ¶%èÓß–{nÍöœ:UÜØiÛÓHV¤¬À,ãýõ›äµ×ÄMb† Ä ‚ä÷³©KÔ–O°’‚¸ ¬H”ž+ɘsç²ËàéÉ µ`ýâ¼¥¥D3g¶<öîµòÄ¢"¢Å‹‰êÖ5à'ž úñG¢¿ÿ& e†øß‰–-c‹Ý/ @4jQR’xáÄ>7²nÐÑ„£´üìrš4~;ûm»¸Î§ž'¶rîh] —2Ф'žx‚&Ož¬ÿW <ØòAºoñ—_J6練U%¨ÃòTPRþVíæM6ÝÃ…‡‡Û4î½C÷(À#€Ü(ý_35ª‹‹ÙŽ›û‰)}oüùA š4OôØÆHù-…TPÑÙNgI[dy ÅÜõ[¼˜]çZµˆ‚‚¤Ó¸z5+ÁíîN´}»mQQDíÛ3!îîD~H”`y’ÌL¢åËÙ{U«F´t©Í¿01é14óäLjûk[‚åÿM2üwýŸêÓÐCiOÌI·®ìÁÖïFe#7­ ¢ ºZô&!//ë֭Ûo¾©¬U«VRù/M2vìXlÞ¼Ùô‚´oÏ\ø±±@‡vÏ™™€®«»¢XSŒÓïŸÆ“-*f vë\¼Ädz^´Öšƒ‹/^„P( ãæŽh:¦©ù¾ùX°ð÷~øAÄ+1M|F<:­ì„šž5‘øy"êU¯'ɸ$.½| YdzÐz^k´úVÜgä·ßXósoo–^ÿÜs’ÈÓ³m+"(,Ttð ðî»@^п?°t)ðÈ#¶M”—,Z,\#G²ª…òâ3âñ͉o°;f·þ±Ízà±ÆáaŸ‡Q¿z}äç «( a©a½Šb-‹Eoß =¦?=㺃§»uŵÊR’V‚ŒÃÈÏGñ­b”Ü*Á«±<{¢V×Zhпjt¨aw"UUbѶT6ä„U,: ƒ‚Ø ¥OIæ+Õ–Rïõ½ JÐ,Õ,“Ç}÷›váBë!ù—ó)¸^0© ¢äÅÉÖ‰IH`“øù‰všsÔLøwA òð5¶É9¯P€WzR&~' IDATar¡ÍúŽe+ÜêÕÙ>¿£Ø½Ûå±iS™'hÉ*ÐmQÌšE¤µsUzî{¢n݈nÜ0zXAI}~äsò˜í¡ß†ú1ðGº–y­â±e®ºDMûb÷Ñó›ž×¯ªŸXûEß¶JžP*ÐíM·éüãçYÇ+þ…ú…Òõ®Sñb㯅; mÂ) ´E'ᇲýêÕ’Ì77h®þÃ]¢1½Ÿ¦}úiËŽÂ…Òœu̾öuÅ/šY^z‰M´¿mçÝÇœ£æzæuò˜íAõ~ªGم٢Æ7ŵﮑ *ŠzÇDŸ0ú’“™ úóOI%åða¶sáåÅÞS*)!zÿ}"€b¼¼ˆvî”n²;wˆúöe/®A"•ªÜÓ7²nP÷ÕÝ JPíyµi~ð|³>SïíÙ”³ôô†§ JPµ9ÕèçПMn{Zîüu‡Îv8«7¼§:MW?ºJwÿ¹K¹a¹T”RDE·Š(ïbeΠëß_§ó=Ï“JÁެH±c©8­¼¡v´“°´”('‡]ÖÛ·mÿ åZÌ^ÄÒR¶ÇçînWÏA·"Èc¶Uÿ±ºÅ•‡Fà ‰——ù¨‚â;Åt¦ÝRAE±ïÇ’`«—ëŸØÚš½xŒß7ž Í œ#鸚| …ú†’ *Ê<‘iÕ9ÅÅD½{³—ûÉ'’Ê1ËŠ÷Ã÷ ”÷Î8ö?Íš±U¯Ô”–2ï2Àâ5ƒƒ‰ˆèصcä³À‡ õÝÜ—ÒòÒìšF£ÕÐOÁ?‘×/‚ôü¦ç)9»ü[vp6…uÓæÈ¾‘”}*ÛêÏhab!ÅO§ ZA¤‚Š‚SÚ¶4Û?ãVR\Ì|çS¦õèAäáQ>p¦F ¢.]˜OöŸˆ,-๖³NÂcÇØ;óòËvÏ£.QS§JÐò³Ë­:gäH" œöì1þ|iN©þ pùË6Åë)›€“låÖH,9j®e^#wwªÿS}Ê)ʱ]ŸîüuÇà0,1¾¼)«ï³ÏØÛùÔSìËX™LžL4 ³ˆÒ6oA””äX'×¢ED ujÓ¢Ÿ‘›¿A šzd*•j­Ë¦±Fߥ´KÔuUW},ôÝh’'S€{© ¢ó=ÏSæ±Lцµ4«”®~tUoè/½z‰ŠRŠ$»~Dóæâàuÿ7&zôQPóøãDõê•ÞÛ›%+]¿n|\n %ÀìE¼+Z~QŸùœ õßÚßj/øöílú *>§-ÔRäó‘leòBd…îÛ6¡Ûðž5Küf·wA ú1ðGIÇ"û±k¼Äü‹.ªÐÇÇîˆ4Q”®YOP6êÐý/ÙÎg-¬hZ¶_\cNuIãÒËR¬)¦1{Æ” ³[Pðà`}˜ç­ ·$[ñfféïƒëSú^ûîj32ئ.ÉHw#ùçŸD‰‰bmwüóÑðá,úG¢ùÙgDwï–?žh 0é$,.&ª_Ÿí1d™ˆ%¶’ã׎ëC•Rr¬iËÈ R( ¨yóòm‰–.½z‰TPQX0*ͱ3¿øúuæ5kÑÂæ\ek5  äîïN 4 Ü"iâ—uä_ɧ ªdHe@ßDµk³—xø°¤Ó[Ç¡CDîî$xzÒˆ¦' Z°ÀñN.•’ 5ø Þ¹õ)Ž÷±EŸVÐÒÌu3iS£M¤‚ŠNú4ž e'š %|‘@*…Šã0¥ü&.DôØ1öq×­„?ü%ØÚB^ÑìÙC]»6‹ÈÕ¥Jp-&„H’È‘©Î$ߟ} JÐÎ(ÛBÝ»Ç@Éþ_ÐõN»µïpÖ¤‡Ûf^~™½Þ}ûl:ÍZGn…%u\4Qü´xRAEÑ£+îëGGÇРAì¥}óäS[&2’¥D[·ÒåË,zÄÓ“h÷nÇ9¹–ž^ªw†}<ÔP\$Óºýz"Ûœpy‘y\Ÿ­œç·ŸO ¾k@ûbmû,Ù¿îÐïž¿“ *Jø2­u«tµÚ°ÕMtïžZî}ú©!wèñlj¢£¹–“qÔ(vµÿøÃ®ñu…Fî²²æÇÌ›Çdüø#óˆÇŒ‰ažðÖ§©(¥âŠQ4»w³‰ ’nÌ2\½w•ÜüÝÈgåK»²*Í)¥&,Š%;¸|´ˆnk£}{¢BóyÒ“—gHB™;Wÿ𯿲‡}”%J͆ˆ %¨úÕYÑ*­–èÍ7 ﯽ!}w)Nùœ"T?-žVžYI ¥‚ªÍ©F!É!’ÎU–ìàl nÀ~® ¿b1q)6–¨S'vê×gŸ )‰gѸѻïr- F„j5»_©QC\a†û츼£\!$1üùg8D½{ 7…U¦ õ %õuéR¨‰ˆÝ—5kÆö­¯ua‹£fôîÑ%è§àŸÄ(4Ëíßo³-Ÿ®a$hØj*;›ÈLJ]¿'$ŸÒ2:ÆàÁåö¨´Z])”p)“S‰ˆhOÌrów#ÏÙžtèê!ù¹D;2=þÖÅ¥[óÞæGåÓ©Fã¬Ûo^~v9A òYàCññ¢^‹5ú b èôC§I]p‘´ÅÆôùóD ²—ÿÒKv%ÏšE£!úùgôÅ ´½ˆ»v±wòí·E›’“Bõ~ªGP‚N\oÈ·…@“‘ ¯Lç°’›3f°×=c†C†»GnþnÔpaCÉWÑ‚ PÄ3¤‚ŠRV°oŸ®ªê{ïI:•uè–îM›Vô ˜©[—ýJT™5î^ÕžW›JýedyÍ6L ¶/n'ùÑùtª13ÎW?½ZÁ8õÈT‚ÔnY;J/°?LÕÅiÅtîÑsú•ôƒÛl½°­‰o L ´u¾ó{7wí5¦VÐÒK¿¿¤k²‡‚‚Zþ8+z¼V0å_ηk<³$&²/o³fV…²ÕÑ5j÷(‚´àÔ1 Í’™G*7× ¦C%¤P5hP`Ì>:–¤$CL–™²vë×@ôÐC,!ÂÔ%j겪 A šqÒÌìßîñMŇÝÇÜ{[t³ˆBš±m¥¸ãŒFjh´}M–g6vIz ¯LÇ@o>‘_©+&"bõuÆÏ `z:k "€FÏ– [JPÓÅMévÞmË'”–=ÿ<›tÜ8›–•‚`pTG<arÏ·,iyiÔzik‚ôÍqdžÒäFäRP–yø–ûMrs#úýw‡Nin % ‚“ðõ×Ù÷À›ÇJÊN¢† ” Ek´ÅÎBÇÖU_G™'2õQpR–Å4Ji) U(LÜ)‹˜l®˜ôR(ÔxQã ¥Ví¥°hBd–ÌÐçbå–¤¼y“ÕzyYqg¡Ó¦‹èlÜØö¯¨;Qä=×›ÜüÝHuCeý‰ii†Ô9‰XÆ®®Dh‹P*¾m}ˆgLzŒÞ'³õâVëušÁÔ{{ñ÷,:Š@RAEÛÇÙ—Òn3¹¹DC‡ÅÅq-å.bVûrÕ¯os.°ºDM=Öô (AúX´m‘–® ¿B*¨è”Ï)Ê9Ã6'—-cߥ¯¿=´õüð›ì»ï6Åð†” ¥§—J:î²eDžÐÒžš,ã,ãˆã›>èa¹ù¢®u¶luäçQÇß:Š/?uŠ¥ø×®mUäNæÉL p Àj”sÎöMó×O›¿Õœ[“bÒ³õtç ÷~étB@”¥²/ÑÌjŠŠ ŠÞ~›h)(ç$Ü´IÔ†  zç×s›ž3[¥Î¥9¥táXœs«ÓT[ w„\»Æ¤=ö˜¨¡m#9™}q›6µè,› wùÎe‚Ôlq3ÉœG……Ì¿ …ý’ζ‡:Š«Qb+§O¢6r­ó”½vD±!N²|® 4r×H‚4pÛ@ñ{»ß|Ã&íׯBxCY}…7 õ±Î··X±b‚Ù³ JÐc+³»Û΃Ÿ½‚VgE€•ºî[è4:e±,­ÝhµDƱɻv%ÊÎæZ Ê9  °èy7†Î)èû³/ÝÉ¿#JGqZ±¾ðѹ.ç¨(•í_–u„èÂX+¥–„®ã?ÿ˜=Ìž’oî|“ ­8·BôeÑ%€¼ùæý:}#i ¶PÊJ½êÐj –a£õ[[^»ß7$°X ¢ùóòŸúzÎ÷ ìH…+*b¬C‹}š …ucŸÍøÏí‹iÖh5ô¿-ÿ#(AìÿÀ®±Ê^?†è7t%z ¾O]‘¥óOœ·¯^9ÁžøÐCD·n߃–ýELOg.ßFlòÄ¿vœÜýݩڜj–*®ÁmnX.n}Z_’±4Ûøü_|Á>«V‰šÆ6öï7Dõ;ˆÈÛ‘z#S¬±/e]­6¬ž/]båEæ‘JÁ¶ŠJ³è]ݺÕãkG­ Ê9/\hú¸{÷¨ÑÂF%èäõ“¢çÓÁjkÖ¨a´^GÌXæŒì)ÉÝHZ^5YÔ„ ýqɾL]º «íÚ•¯ ¬-ÖRD3.Æ1¥Jú‰MÞ°a¹‚Ü@K€ÞI¸z5»È~hõ¹Ñw£õ5v·\ØbóÜ‚V ä%Éà />ÿà¯|YGÈÉ“-Ý\ÆÐ¡ãšé&ö:á^ýãU‚´öüZ»ÆYº”I}ë­òïzm«×ð…}þÄŸo¨ºs¿ö²µ»v11¬¦ƒ··émá±{Ç” ÷÷Ù›W–Ù³ÙkèÝ[ß]'<<œÒ÷²­¢æ!T’.MÃd"¶°Q(Tk^-Š»gc•¢û讟î÷ÑÇÇx=¨âÛÅú†’ßMéJNz{=[î)n %@_x]h+ÓºbÒcô«€iG§Ù²HI +|Œû¥öˆ}FuqŇ¥w¶þ ú u]ÕU´".ŽÕ¢rsc SäœÎ¡Oæ4Ì>%QwŸ Ø—ÑÍÍhf&7Ð0räH¶g¤P°°#+nQcÓc©éâ¦%hòÉ6;h2Ofê³°Îv8KyL§=?èÑ%6H©k™ÔTvëëãc²Ò%3l@P‚6Enuþ/¿˜ÎÌ/(( Ä¹‰ú¦’’”ÄÒÔªW·©~IYmÆP«‰Ú´a¯iïÞ2Ç—èã‰ÿ¹bÞ7 Š+WXwp//.]¢s¯±ôé¸IâV¸–Ðh5Ôws_‚4åÀ›ÏÏÌ, îÝ­/ežº6•Ý 4 ÑûxD“™ix“LìGq-C† 1İMµœ–w/Žš-n¦wrØbœK³JY|óý^k1ãbH“o>ëëAGÒÆLêGY=­}¼ý6›p‹ñ-)úÂ…&‡êk6XÛíC‡nõ¬PT\=ëôiÔ mÉÚcIr5|¸]µKÌ]»Ã‡ÙÐ~~†z]_ý‚  ùsˆÃÚ>Ñ’%D¥µzŸ¶` n}šJs·Ÿš›ªßO·µïèѬïsÏYï6Šý –TPQxïp«’lŒ¢Õ2nßzËd¢7Ð0fÌæöˆÎœ1{ìÅ´‹Ô|Is‚4áß Vg¡T ÔU©tª!»] ªDiÛÄÐß¾mpWJ–œJÅ&ìÙÓ¡Óè<û¶výøùgëvîì`í±ÂºªÝÙÅ©SlâæÍíªxh]I˜éÓ‰ÂRÃÈÍßê̯cSÓ›Ñh¨¨ç Æ¿¤ÂIÊ r| ñÑ„£¤P*¨ö¼Ú”a¯@—ðڠ˲m‘–Â{…³;ƒÉ"ï fÍb“?òˆÙJn %`°.°ÜŒÅÖ…¯£ê?V'(Aã÷·Ê8 Zî¸Gçc·Š*kìjK–1G’.¢KWÄß¡QçÎ÷ƒ‹+F©H•©˜HP‚:þÖÑr-‰û°4i…‚(ÊDso>A(¼7ûbÞÚpË>±Z-‹ØìÊ#¶tíRSY‰›g uø…õý[&MwyS‚@ŸeEûð«ÓY |â{}·{K=7o2à „Ó¿ÿÚ>WQJ‘¾~¸ÍŸ]ÚgíÚ³E¹–€1:Lj‰ì¯¼â<}Š»¿;- YdñöR“§¡”)åZÍG<A¹áÒ;Z¸Iþþ{I†³Œ®-õ¸qæ¹MÏÙt«{ÿnœ† ³nüœ39ú=H»nÛu M={:¼vå²eDè3Ÿ =»ñYI‹ #u5Û§=ÛôiáÉ*ÜWB§ƒRm)=³á‹N÷ÒRC-ªÏ>?_VPx°¬ÈÜóV~/ãã U ­¨tÉ ´Œd?ÅF—£§ož¦G~{DŸ„b®;„¶PKG3èê'W)¸n°Á0?Awwß½ghÌ‘¤Ë*ìС’¶9rrXu¿êÕ+‹²¯ž®wã£+µhˆòóYí …‚ù¶Lñ ¾è‘Ѥ‚Š®o¾Ô¦Iòò !#¡¡âÆ0¡ÍÑwâH1³aF5š½2Ö®ù,¡NPSPÍ p Üs9TЯŸUUù¤");‰êÿTŸ ˆ3^ G·»Ð½;sÚÃÍ¥7õY»%÷,Dåç³4^ê-p]†‚‚z÷ÝwiÒ¤IôM™Õ°V«¥ &ÐäÉ“iâĉÎbÄÒEÜŠ Á &(YGäAÛÍÖ*¼QH)+SèÒàKè¨7Êž=*šrÃì_1›r$õèÁ>+¦ní%çÃÙ„‹—{X '¡A¨÷úÞ%hwôn³Ç.^Ìä n~Ìõ&R`@ ¬H…‰"V†ºè#FØ~®m¢´ôü¦çÙçðÙ¹T¿>«5á Oè¸1ëÓ§RIßUÀ{cöê;±<¸×®R±ˆ¶ZµX¼³½Ÿ=AèÊ»¬îÍ…þLû&½ß«µa¥G’è2lÚ´‰vîd·Æ“&M¢¤ûùÐ*•ŠÜëœ7o>ðA{ ”>§S×O‘ÿ!굨5œÖš}ÖŒzÝ›¶mßF™Á™”öGÝð¿AÑ#£é|Ïóú™ºAµ‚èò—)umªM{Ìb™;—}^”J‡OňŠb¶mëÐÛúÃñ‡ JP÷ÕÝMÞuä糄O…‚5 ±•ë3¯ë»oØvâu†V£«Wâ`Öž_«¯[1åã‡v‡I^œ¬ï¯-)óþê²@zÈê#öòÉ¡OJÐó›ž×û#ÒÓ Å÷¶JS ˆˆ4ù}7“wUº~~F»ã˜‚è2Ì™3‡BBØļyóèÔýŠ3[·n¥íÛ·ÑüAÛ¶•è©èIÇÝŽ—3¶Öü ¬HaÝÂ(azežÌ²cSޤ¸8C݆JCWC¸L¶Ôå<A 'Ö>AP‚öÇí7zÌ¢EÖ/béÓäiô™eÙ¡6$-è‚Ð%úU4wíRsS©îüºäæïFgSÎRv¶agE¥’dz=ùQùXÝUäGš(„‡‡³Õ£T]¬¤¨´ˆº¯îNP‚”*% Ñ+¯0 cÇŽ“ê³Wpµ@_C:}ï­¹‚ƒY.€—ѹs6+7í†*ÄÏÏIII€¤¤$øúúVx<11~~~åÎ+FŽT?‚£uâX£cðxÌÝ2PíÙjh0 îö½‹ÆÃ£xl1ü~õC×]Qí`5<[ð,jí¨…fþÍPÿ…ú¸u µZ ˆˆˆ°û1ooo£ÇùúªñØc@TTâ⤟×ècC†@ +VXÔ'ö±¸¸8|ýä×€¯ÿDTî¸,\(±˜>]Üõ‹O‰GÓYM>8Ȳ¾uë€þAl“&Pô‘$¯·G&ûhßGÈ)ÎÁpŸáèÙ¢'nߎłì¸qã"PR"Íû+” ØóÖÅ´Ÿj¡h­(¯/.ê%K€&M±a°¿Ã?kÕ<ªa^×yð&oÌšáS×áàAࡇ ×ÀÒõ³å1ïöÞ(U–ŽŒ<‚{—î±ãþûxûmÄj4Pÿü3ðä“Ç‹ŒŒÄÞ½{±dÉäää@VPïA1‚>üðCúꫯhÍš5tèÐ!&L˜@ü±Ñ=è‘v4†­ Ì9’”J¶ª˜;·’Ä””°ûL…BßÏNJ'¡A¨Ûên%èHü‘rÏé"XŒµ’4†)}‚V ó³¶McÒ5Ò§¬Ý¿“SÚ^=¨/"U¶¹® õï/í{~Cyƒ9³ûDT؃-§¯lWJjò¸õâV¶ÿþEsòª—^Á/õgïú÷lëëÜ£çH“UHôÌ3ì5±Ö ·´SFqTèI(3Ì9BtÛÂÝ»W¢ ݯÂýúR: ˲+zA zzÃÓú½è¼žmƒW¯N”`gý§Üó¹à@A5ƒHP±NI}'²ëðÆ•>”“CT{ô‚Ôyî+|Rö@ú³zìWþ€èÉ'­j]f n %@nÑÁP#ÚLÁ9i±¢>‡h-=ºòQ‚tâú "2TuÙ.Ò(QoE±È…Ù7Œ“ÃV€Í{bøöø·%èõ¯›iËK°YÛ•»W°(tjzÖIJËLž÷ÕW@—.@@°v­¸¹o̸u´õû×G³Iͬ҇ڵßg¼O>’“ÅMn›7;v~MjáàØ¨æ^ ßÿa©a¦õI€gj :çM…Jp­h,²“êH>G•A|]éDFVJ©ŒòTʤ­†:,g«§æ@4z´ôó$|•ÀŠWyà–9!yï½½‰RÛ•Ezvã³%hqÈb‹Ç‡‡³þµjÙ^H/+(‹T × ¦¢›"nß¿úнÿ/¼àË+WX$£»»¡ý׊s+JP›_ÛPv¡DåB$+‹…‘të­õ†Êw·øG•1ÒZoSaÉ"úÏ”˜Š—â(SŸ£ÀÆ"õ¶¢syŽ‘ÜÜÊ5¬° kI¥9¥tª+dU.íW×CiÎUÛ®mSä&‚ÔeU«ëbërf^zÉú-aMž†N·aµ6Ò¶šwŽš¼vEE†¬º¥Ò6ý-(0”~™W¦® ôÆŸo” a#A¤ujµ†6oC‡ ‚¾ò]Ä3¢Âh¹–gvêÐ-h~þ¹é¸_Ÿ#æ7:M©¶”(Û²æ¨mO­¶Ö‘”º&U_3ECûšV­ÖA§í^Á=òYàC ¥‚B“­……¬ @´aƒuçÄNŒÕׯ¶T~Àìµ»pµ~©^]\¶ t~È—^ª¸8ÏTgRË_Z” uáë¤uêšStìÈüÄ*ßïÉ"}®~b¤U‹¸–¹]D1œ;Ç>[Ï1w.ÜJ¨Ö÷” ³)g-ŸT[²Í2e²â9 ²Jn}ú84œ,<<œ‚ƒJP£…D·°Ò5<شܲí«îí·îÕâµÓh µÔøÁFÕå‰göQ¡ :~Üü±óƒYu¿6_·¡‚;·9®]#ª_Ÿ½†¿ÿ6zHæ‰LR¹©(°F å]´¾ö77Ð ·‹(]WãeË*qR] v«V’¬ $'‡Õýuw'š{xA 곱㺉Ñ¥—YÍè$ wx-äbM1u^Ñ™ m½(¾À„ZMÔ¾½é:‚ Ðå!—IÅN”¸"^Bk èîn±á…)ŠŠ Å¿fδ|¼VÐÒK¿¿¤¯Í.úóPP@Ô­›øË/Íš´ ‰ÅÌû…Ra’uá¥r³-Ni ÝI¨ãôé*ˆæ ¢]jÛæÍ’ýã†ú ­†[ùA úûŠñ•«‡n˜‡IDATŽQ}6:’ Æý@8FAžG©øŽc‹^Í>6› õÛÒÏî  ¶ú¬_ŸuÝ)ËíM·ÙA›Ó¤É³®‘ ×nÍöFùúšÞ›0矲ӟ}ÖúÖUiyiÔdkÚ¿E]=Dîþîä1ÛƒŽ];fÝIÿÍn7¼¼lÞ–Ñj)²_¤>üÎ\‰¹Ù§4Юà$Ô‘’Â<úÍšY«h/áááD'NjŸJ¸Í: ¹»WLaM%ÙT{^mº“oyåcõõûï?öZ·&*,¤ÔU÷[?u:KÚBi“1tuF|¿ôµúNÀZ‚‚Øu«QƒèÌ´dýjOL¯ÍåAôñäVt¢ uFùƒãã E¯fÏ?iŠné³2/ ¾TÁË ´¸Š“P‡ZÍ’¼¼ˆ2¥±)fÑëCÍä#GÌŸd]B—¥æ¿œþ… ½ôûKf# ,^¿”€ëáa4#îÎŽ;úðªÒlû–zûb÷” &‹šPzAºCJµ ‚@1ãcH­ªI ¢3LíÒ7}:{#;u*—ÈôóÏìá&Mì*gT_‰¦„l o<œš{¿JßíÛDmÚ°‰?úHÒØöÂ…t¶#« Ö=ŒŠR Rn %@nQ &OfŸÅ•++yâ]» )"¾YYìÇÅÃCßÀ$Åšbj¿¬=A :xõ HÁĺÎZð¬^΋F¿'>¥ùNþj´°‘ýz- Û;iBçQµjìzJÝ&Ë" ÑÀìÚvéBt÷.íÛÇ|s5j8®rk~q>õßÚŸ µú¥ÅÆŸ1Ä:¿ý¶¤‘F:J2K(²/s†ø…Ьճ(%'Ev¶Å) ´+9 uœ9Sy1Ñåôiµ†J76õÃìÔ ¬;^·"}xùÃ&mf¯ŸÎ¹Ù¢ 0AIF‰¾‡áÝ]¶w^ÛñA š|`²uÚD}*›<(À3@ßkqÃöëÔaðlÁn}D/¾HºÝ£ÔªÆ²ÛüvcJ_±¦˜FìÁºƒëNg[Üß¾Yxß´ÅZ:7Œm+¨v€>ûö3n ¥@nQ Êò¯Ì˜h"2TxñE›N»s‡í4xyY_•Oý-í—ÿ™Ï«@q±¡ÒÐ_Y<<ãh© ¢S OÙܵ]eÐnY;Ê/vŒÃ®(µˆBš²‘ÔÕå ðÏšÅ^f£FÖw¢‘ µšrŸažë(t¢ßfܶ|Žh#Âéó¡Þ%¨æLwڹáó¼zêϯOïõ}TPQ䑲³-Ni ]ÍI¨CWÇÆB«ÝTЧÑòŽC­¯ÌöÙgì”Ï>³mþäìdª3¿¹ù»­gòúéš¾ø¢ÕÛ1qƱЪ+ôï3EBFÕœ[“ÜýÝéÌÍò1·R9 µÅZ ïÍRÔc'ÄVØ“C‹ŸŸõ{¿Rè;{–¨i½BÚÖ–[èÐA²ö?&õ?NT»6 -˜Ú“õ5T‚Fï-ºÞ‰)4Z Í<9S?Ç—ÿ}IwÜ%¡TàZ \ÍI¨#5•E:ùø°;MGaTßæÍÌôêeU\tb"[9׬iuRW96FlÔou¨KÊ—5ªïæM6™§'‘ ×W“¯¡³œµ:ôN£ÕÐÓž6™"•“0n2ûá*œ´EƯ·VËšè’>­¹Îöê `wEÑ·ÓŠHxýuÃ~‹IMôi4,"ÇÓÓ­!tèê!j¾¤¹> ïpüa»çŽÄ¡.«ºèc°wE—«æZäv¥äÝwÙçtõêJžX£a%(a]ﺱcí+ˆV63oÚÑi–Oxûm6á7ߨ<—:AM§|XU¸Ô5æ{ùÍ šKP‚žXû„ÕEøm%umª¾„hQŠù=Ö’¢×^c/½m[VëÊQ:Ä*Ѭ¦Š ÜðÝwÌS¨s6Hµzˆ‰a €èõëË=©Î¤Q»GéWºïüý…&‡Šªy;’^üýEýX}6ö¡¸{ËÈͶ8¥vE'¡]èÒ™ˆˆÌè 1÷Í5.}å Kêòñ±/&6%'…êίK ¥‚‚“ ]^*è;|Øp¯Ÿ/n?8+0‹9ã<(ó„ñ[æ£ GÉÍßjüXÃd­ {pwþ¼C*7xPVP–Uç²Z»‰0—L'F_i) •tw7ÓpåØ1g§ ÃÓõµ²‘ððp¶X´ˆ%Çèâð/_6yΞ˜=ÔxQc½qí¾º;mˆØ`±liNQý~áw´})” ýÛž˜=&<7Ð ·‹(5}úØWëÀ.t÷ÔfBØt]¥–HаyË…-zg\N‘kïž!yÏ»æÒUˆ ®Lqå¿Ü±é±Tw~]‚ôÇ¥?ìšÇwwߥ÷R¹©èÎ_¶í iµ†Z'¸_âSŠð„Ã"Öۛ嫘$-HW `©…!!Ö‡gæç-_nˆoöòbÅh¬HKÌ/Χµç×R×U]õ†Ús¶'õXÓƒÞß÷>Í89ƒ”*%ÍRÍ¢Q»GQ5=ÈkŽ—þØ&‹šÐŠs+,ÞÉͶ8¥vU'¡ŽÝ» IrŽÀ¬¾ÔTÃ^¯‘f‚gÏ ŠJP’Bòç‚4hû Òh5}‚`ØÚè‹síëkú2ž…‰ìdª3õñÙßøÎìùbßÛ{îQ€g©–û šãß ™Ïýú]z )ÓZ}Z- çÓí7÷ìÉ Zuâ–-†¦šQ»v,Éåøq _\ÌŽËÌdÛë׳Øõzõ¨@w΋/Š W‚“‚éÝÞ¥† ê °± 4 ±{ÇÒáøÃVoWq-®ê$Ô¡ÑðîXÔ§ '4¨ÂSýú±§Ø.´‹ìÂlzä·GôûÑz}ºôㇲo/¥ ‚V ¨·£X¦a‹Pʹœ£/$ÿúŽ×I+˜_–Šyo3ŽfP`µ@RAE·6Ü+½ŒC77¶-¬Ëζ¤¯´”hÛ6Cè»›ó#ØÜ»¡´”Yxߢì?…‚ üàãžžóꫬ­½‚@7snÒ¿±ÿÒ– [hCÄZ¾ŽŽ];F©¹©¢öª¹–¹]DG +}[%/µ¨ˆ­Š¢ýûõ;fØ—ºò^BF5XÐ@ß\”Yä€BÁʽIˆP*PÌ8–Z}¤özdÂ#ôØÊÇ(¯ØúÖHVÍ#”²2…­œ¡¢”•Òõ6+.&úõWÖ½FgÿžzŠè—_ˆÙFC”‘ÁVÆ;w²TüæÍ Ç÷îmST¥i’’˜˜‘#ÙþœŸ›¨KVÖvêTV÷ÅLb‘\›mqJíÊNByy,…ÚÓ“è–ý‹®rX¥ïÀƒÃ0-´ZæËL¶³›€ä1ÛƒÜ'»SÀk]Ùd_í¹´Z-­k=© ¢C^‡(z·u)áÖ¾·µ†bưϺµNâ7ñ>™™DJeÙ‡ð ×·ýû³p:v!3‰Ô™˜Rà ´Èí":Н¾b_ªï¿¯"&èAë×j¥(|g‘uá¬aƒ¯@Q}:°¥¢Äh-M>0™ 8ŽQJü1Ñh J[)¼QHaÝà Û(§¥Ùž1‡ 0ÿÀÌ™l»÷É'YÛÉnÝØ"öý÷Ù*ÚÍÜ]¹Ù§4Юî$Ôqó&+šS¯»U• «õ°‚þÍ®1— fÊŽôÉÿî;yæÕµ¹#¸%Jµ¥4z÷h‚ÔtqSº|ç2ÝÞt›k°=âóOž§ühÓ¡|æ®¶XK7¹IÁõX¹ÓÈç#©8ͱ=ÄQåP¥Bîúäf Ýà„Tµ³$''K2ޝ/ðþû@v60{¶$C°AŸ·7°s'Š=¼ñ]áL,~=={J§£!!Àر˜r˜Þd(2KrÐoK?¿~\’áÕ¥j ÿg8¶^Ú ¿:~„G?Цc›â‰ O N¯:È ËCØ£aˆüËùÆ0ví´j-îl»ƒ°NaH˜šM®~ÓýÐåXx5ñ’D»µHõÙsr×'7Dt@תb cÇŽÅæÍ›«ZF¥p÷.ЮPX\¹<üpåÎl~a36c„æ-àvñа¡ô%$½zÀo¿>ü?ú ßünP>¯Ä7}¾»›»¨á#nG`ä½‹¶õÛâÄ{'Ъ^«rÇ–²4É?%£ô^) ÎÓuÐ२ׯª·¬÷:îP¸+P˜Pu¬Ydz¾+Ú<- ÁÀh»¨-jv®ißõàT r³-N¹‚ÎÈȨj f‰ˆˆl¬Æï¿4૯¤ÓZ}%%À”)ÀŒÅõg߃ۭT`øp ¨H!:22€AƒØßÏ?GDïÞP(øöÙo±áµ ðtóÄ Õ <·ù9$d&Ø4tAIæÍE¯õ½{/Ú @Èø Æî ø}á‡^‰½Ðî×v¨Ö²rCs‘蟈 Ï_À™Ög°ÉgNÕû¿öî?¦ªºàø›x4Å%¦æhƒ™sæ4QjiÚ“wÚ'-*!¢"16rf¬¹GÇ,q© M°nkD.ÊLÖÔF¿IÔ†¡²Iˆ¢À´ò*» ¾Ï'°+?‚s¯œï9|^›s‚\ÞCýp<ßó=çM=Äñ˜ãÔäÔ ®*†==Œ‰û&r÷×w[:œùwïFнO;ʆç u;Ot£Õ× > Ôþý=÷ySR®mk¾tÙxÞ7uÔ}zkk-Pê±ÇÚ½9ûñóÇÕ”÷¦(þ‹ ^¬ï\üý³þO•ú}jë ÷û¥ôS[жtëÚØææfu¹ä²:½ñ´:úŸ£êðý‡ÕÁIUѸ"U² D\uRÕ|T£®zzèi¿â†Óm¶ØòGLL n·ÛêŒy½^BBBú𹹯Áë¤IP\ Áæþ§t­¯¬Ìø\JÁÑ£0jÆù–Ù³áØ1X°>û n¾Ù|Hy9Ì›gœÞ˜1 `À€vû®6]åíŸÞ&ýéüQÿc‡Ž%*<Š)·O¡op_®4]á\Ý9öWìçàÙƒ4©&n º‰§Ç?ÍÚû×2zèhó­¹¶$}þÑí‡- ¾“°=ÍÍ×î™íßkýS_]ݵf))×½³¦æÚ“¦O7ÿºÂBãnô`Ü È{í–£õÕ5Ô©-E[Ô[îìt›o؆0õÒ—/µ{Ç2܈?Û@’>ÿÈth÷]®‡8÷Þ ·ßnÄøÏ¡ÄÆÂÇÿÿ _ÝÎÑzu5<ò:·Þ Û·Ããwí\ºkÖÀ¶mƯ—-ƒM›Lý— ¶®–¢³E”Ô–Ð7¸/¡7‡2søLÆKPPP·_SônÚÍeÃ#èÞ°“°#-7›[¸Ðü†‘Îú¶n½vgÏóç;y‘†c o˵4n(ÜQTMRiiÆ]–À¸W©ÛÝîï×y·™ÎmJIŸ¿ä:´û.׃.]‚É“á·ß 3^y%p¯ýóÏ0s¦1q¿ÿî¹§ ´{7¬\iœO1"#á®» 8}Ú8Çüí·Æ¥(`œLß¼n»-pñB€n³å_V˜ÑØò]S7r!dà@cÁð¾û )ÉøyÒ$ÿû.\€'Ÿ4.­Û²¥‹Ã`þ|c¡ï‹/ =~ú **`çNßß7dÄÅ;oÆëvŸ.tnés[^Ý[vvdêTHKƒ†xâ ¨ªêÞÇ_ßwþ<Ìkì>óŒqZ¸[‚ƒ4®eþáxï=cÒù%9gÏü†s{}:ѹ ¤Ïiä‡M)e ÓÜ\9ÒØñÞýש©1†si)Ì™cÌS9À½•n³Å–Gнi'aG‚‚à£`áBãôïìÙpæL×>¶¥ïØ1˜5ËÎóæÁ®]z gw›éÜÒç4¶ÐC† ±:¡S‘‘‘=òyúôO>1†ôÉ“0q"|ø¡qtÝ™‰#IO7ÖòÊÊŒ+æòó5=ôÔ×Ï Û@úœÆ–Ú‹„=¥eH¯XaÜõ..θ­Å޽ƂßßÕÕANL›æeÕ*c§¥ÁçŸû·!0Ðzòë×]:·ô9-to_$¼^Ÿ>Æ^テѣÓ=d\ÅærN¦O‡°0ˆ‡Ã‡O·n_½Ú¿mã7‚Î I:·ô9-/³ µ:¡ScÆŒ±äóΘ¿übœ›ÞµË8Š.(¸öþxî9xþù1<ðܤé·g«¾~]¡sHŸÓhúO´s²Hر~ý !Á¸ãÂã ·'ŒÄ߇; 4ô°¶Ãô^HÒ¹ ¤Ïily-‹„]Òþ&]ú:¢sŸÎm }N£ñqTÇd‘Ð?ÒgžÎm }NcË-‹„þ‘>ótnés[hY$ôô™§sHŸÓØr@Ë"¡¤Ï<Û@úœÆ–Z ý#}æéÜÒç4¶вHèé3Oç6>§±t@¯Y³†ÄÄD/^L}}½Ïû&OžÌÒ¥KY¾|y›“EBÿHŸy:·ô9eúÔ©Sx<Þ}÷],X@^^žÏûHcc#·µóÔ Y$ôô™§sHŸÓôÈ€®¨¨Àårùüp»ÝDDDpÇwpæº{e’••Å•+WØ·oŸÏûd‘Ð?ÒgžÎm }NÓ#zĈìÙ³ÇçGLL •••€q4Ý2¬¯ÆåË—}ÞV__Onn.ùùùìüëÑJ'Nœh=¿Õò—Àª·…„„hÓ"}}[dd¤6-Ò˜·9r„üü|ÒÓÓñx<èÄÒ'ª¼þúëÔÕÕáñxÈÊÊâäÉ“äåå±råJ^{í5 @]]YYYôíÛ·õãbbbp»ÝV$w‰îÏ]“>ótnéó—nOT±ô^iii>¿ž0a&Lèô‹d‡EBϵIŸy:·ô9-/³“EBÿHŸy:·ô9-´,úGúÌÓ¹ ¤Ïil9 e'¡¤Ï<Û@úœÆ–ZvúGúÌÓ¹ ¤Ïil9 í°H¨3é3Oç6>§±å€–EBÿHŸy:·ô9-tË]µlžÑ•ô™§sHŸ¿tÛ¨bËduB§‚ƒƒ­Nè”ô™§sHŸ¿d@@ss³Õ jhh°:¡SÒgžÎm }NcéVo³¦NÊøñã­ÎèÇãÑú<¹ô™§sHŸ¿~ýõWŠ‹‹­ÎheË-„½­Nqx½^ž}öYyã7¬Îicß¾}$$$OJJŠÕ9m466âr¹ÚÜEJ)’““Yºt)ëׯ·:§sçÎñÔSOñꫯòâ‹/ZÓªªªŠ^xiÓ¦pìØ1-ZDll,Ÿ~ú©Åumû233Y²d ÑÑÑìÞ½[«6€3gÎ0räHŠŠŠ,,û¥Ô/Ê&²³³Unn®RJ©%K–¨ÊÊJ‹‹:6gΫÚxë­·TVV–JMMµ:¥¼¼<µhÑ"µlÙ2µyóf«sÚÈÏÏWÛ¶mSJ)£.^¼hq‘¯yóæ)¥”ŠWµµµJ)¥~øa+“|´ôµðx¾ùæJKKÉÈÈ૯¾¢¼¼Üê$ <0îµrñâE‹‹|åä䜜̎;§¤¤Äê¤v………Q]] @SS“Å5m544´žâˆŠŠ²:ÇGqq1Û·o§  €wÞyÇêÀf‹„^¯—„„ Ä-·ÜBjjªÕI>Ün7ëÖ­cîܹ“‘‘auR………±zõj«S|Ô×דÀàÁƒilldëÖ­V'ù(--eýúõDDDP]]Í|@ÿþý­ÎÂëõ’””Äž={˜?>‰‰‰¤¤¤‚Ëå"::Z‹¾‚‚\. ”——3nÜ8ÆŽkéÌõ_»M›6ѧOÖ­[‡Ëåò97m[ h!„èMluŠC!zÐB¡)БöîÝËÚµk9uêÑÑÑ(¥¬N¢Ûd@ GjY¨%33Sûl ÑбΞ=Khh¨<ÅCØ– háHï¿ÿ>QQQäää””¤ýcÒ„h\f'„š’#h!„Д h!„Д h!„Д h!„Д h!„Д h!„Д h!„Д h!„Д h!„Д h!„Д h!„Д h!„ÐÔÿ(¶ßôí'` IEND®B`‚mpmath-1.0.0/doc/source/plots/besselj.py000066400000000000000000000003031316273626600202150ustar00rootroot00000000000000# Bessel function J_n(x) on the real line for n=0,1,2,3 j0 = lambda x: besselj(0,x) j1 = lambda x: besselj(1,x) j2 = lambda x: besselj(2,x) j3 = lambda x: besselj(3,x) plot([j0,j1,j2,j3],[0,14]) mpmath-1.0.0/doc/source/plots/besselj_c.png000066400000000000000000001110561316273626600206630ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½[ÌlÉU&ø­Øyù/çüUå266UvW—«jsþ½ŽöÉÌýgî±"â‹/V¬ˆ fþ€—`’I&™d’»JfpàüНwB&™d’I&ÉÅ|½0É$“L2‰.@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ô$“L2É]*@O2É$“Ü¥2ûz'àn•ÏþóxûÛߎ¿øÅ¸}û6ÞûÞ÷~½“4É$“\3™tCþú¯ÿ¯}íkñ›¿ù›X¯×¸uëÖ×;I“L2É5“‰A7ä5¯y ¾ë»¾ ù— fÆ}÷Ý÷õNÒ$“LrÍd膼ï}ïÃÏþìÏâ oxÞñŽwàoÿöoñ-ßò-xüÛþtÁòèÇ÷ÝÀñÉ1 €ÕWà `§Wù œ>wŽ“›7Òc[ªÊ{;kL¯§g·qrãþFNv{­­eŒ€ó³Sßw’wôÉ¥òïŒåììô''ÇÍïŒÚqÛkiÃósœŸìdo-WÛŠ5Ú™€³‹Sܸy¢W 1õ;e,¿wvz7N޶kó•ÆlkÓÓsܺ}0ðå§ŸÃÿóÿ„I&€nÊ“O>‰w¾óø³?û3|á _Àc=øWÿý‡óÆÿ ¯|Ó“z=H¼——Å ÀÎØ­k®|‡àCÿþ?áMÿó+Q?žJUéïÓ¦§èCÿxã«þ†fnÒ㳿Sº?ªR\ÿãáUo|Sº×1@¥†± ¦û„¸©îÿÐÇñ¿¾éUêß:vvVÕm»¸+løàM¯zýV[O9°áíª6ŠÚÿå‡ðªû¦úÑ£•G5±Zòü§ý9^õ¦ÿqT•¦6Ü3M³S'Tþ/ÿÛÏ`'@7䛿ù›ñÁ~°ºÏñÊy‹¿ä— ¶.Mª¿1f•æR%ÏìZéÙ’ Î^FÓY&ÅÒvUÔÊ븆âõý±àâï;ËV2À&¿)ÿ¶ƒíÛ9Ú®¼ƒí¢ÒÛTÚP«Eíœ*V-Ö½Jéž–  ï@züQ0WµJ¹l¬ÖrÈE”}ÎÄßxⱇ~K|xîFS ©<艇?ß–³fcÜò…¬‡^öì^í}Ò[vÖAþõgw·ªÍ2SÜ“6·pîvyâ¡—¢ÎØΨ)xè%OÔÅì¸ÆiÖÒKÿ¡'jtJ«9­´”¨^¼žï’øk!@ï) à¡'… Žƒ30ÎìB+Òšˆ»Gxü±‡À=çµ|\e ýY~Îåñoz<6ì² ©Ê|£jFk•½ì‰üûªò«¶¤ÓL°#ïÿú‰o W’£§wÛ=f€ƒfg'úWmÛï å¯Zj-1¾éáÇaµÑÕØÃbRÚµN{àC? æÁS޶­µ'Õº[s×}7ŽÊ_][™zoql¸U»¨€¯VÊ_æO.opýâµuY:g×ÖÔÙl’À±°Õjók™¿ª´lQŸIØÊWR»WÆÃ„·Ù2~”OQ¹siÝó2ôžÂ€[^GŒ5‰Ì 4ˆlÜŸ€ln/<‹‹gÇ×øο\â@…”r³$…VeiÖó×R·õ25eê¶¶;Í"Û¯8yui®Ô”†h%%Ú¾å×) jÌÙ–æfg(cÐÕŒŽiòåü;ìÃFw™—Œ¹èHåü7§úáH±òOL}GÂVÀ,“a¸ˆâà'jVÞ³Ró‹+¬Œ-—Qí°&µ²öÀ2^¶÷ 0 ¯©Ày4P|I»W_ÛXݸ&Î å6{K Œ¾†mÚwOUS8cŒâÈŒ_¤MV:-_… ÚiÕ]Ic!Ø,ž*«pΜþ¦Ö—IL½·„)¢8sqXh¾QŽ¿Ö^£¦4i6¡ÆÏh@øw! åsJ_¹]¶dXRGF€¡’²õ6–##ùFÇ~±WÛW~X/a¤•„cNaE3§Ú°ÍdUÎÙóƒV0¼§"-Y¦›Zá:3[óΓ…Y=`å^ñ·I&€¾c,ªA+z‡ ± \5Èí z|‡µôÿÚ`Ï-²Ø*jÆÚ|f„2-©NÔ—U@£•fï3Ú*d”ŸµÎpÛ,iÒ\–™¦f¤Ú}z%µÂi”¡u¥¨¤qõõD¡¢v¼nO`è½ÅUÊH&]/óN•95‰Ñö³mï Ùj³aw£éT¿ªVw—ÇU×9FbuûÆ»5²¶’‚¶òA×ã=·\ª¬“0n„ŒA…Åå·Ô'3rÝè#Ôü©ÖØ=ӭΰì›*Ë»*8Odè=% §ë‘ò÷ìclÿ\'Í dÄV6Öf" †;Ù2‹kûÌQRí™}.rZæÞ–_PŸòZhß­D³¹­þ² *õ +¯ªÍYLÈn÷Æê°Åªª–ZY´Ù$á>ê•b×¹®ªˆuZS·}’¶:+¢üÌÀä„Îeè;™1†–¥‹ƒFÀÃ?IÃi‰”ÍVÞ‡Ö[Î )-vË^á/­mE›ÉØe‡µ&JJÝ» e ûíf'_©õ‡­#gлxg…’üEU/ßgOñ55£úšÒDK¤F*ŨÇû†øLV’0fÛIL½·¸ªª£$¡h‡ ,ùFŒ7<Ê… Ʋñ‡Ê>™¿!„Ù‰fSƺQ¹+uJ€ŠS>Ú/SëïÅ.É÷ lýÔ¾„2i‹ï%Ò“}“É­Ö vÎK ,ööͽ®"¶€ýçl{¹TnâІ@6K¨&dQ¨-ŸV1èÎ\¹h~O+ ȵõÜÉ5¶ !­+J< ¼¹ÑŒ4Ó„ÐA&€ÞS¡^<òŠœ/ê' ˆËVÊzëȲ؋£¤T,SR¦B_ ºHFTÏIí(ƒkªÕ,#ÀÊ] ¤h™Ö7ò{2U {2ۦ׽ß®Ê —`­|ƒ•¢—êÃqˆZš´2ð_©¥UuëÙªN_òWmžYÕL@™º!ÌŒŸû¹ŸÃ³Ï>‹½èEø…_øw%ƒöR %Ç×vSMŸ•¨Žm³tIâNE=«Vš=¼xEæ k7>Ékd/Ž­û6UÚó”„5Í2ZFs.9Õ­Q¦KEEE=gê/îwÞ²ÀhчÇ™úÄdw]âji9A,—·êz•Áøž•ôm·Ñu‘  ò‡ø‡øä'?‰¾ð…xಿqü_Hík@ ЭE*\<»ø4r`Å •V[­¹®ui K(ýB98U>TËç(B¶ÒÝ»“8è`:j©Ý–¶o–¤=0å5û†‚UM ÔŠW×Á\ÊZÃ&`»¶l6fãILÝ”ø‡À·}Û·áïx~ìÇ~ ŸúÔ§ðÈ#8,ÝbRúG¹±:‚Z¾æ¢…P(-¸ò®£²Ú"uY_’ê®27Ùì0 øT­IU~ØÊ4‹m˜Ôž¼UZ¶Î‰´lÝ=p?ª~ŹºêÕôå—î=Ø©K@£ÈGï RT]E¹R@Ûww¼>2tC~øa\]]|ðA<÷Üs€ËÓSüÍøS¼àñã…#dU•[v'V8H—ÂåQüH´ ʪÑÙä9È_…ÌT¤]ÅÛ!Óy3®±¦X]+ükGHÜ[›½Ò6¤ºî ™EôÕa.-#4´&Ðæì~«ÂÕÝã¸JUuáëÿ/ŸþþËûg`œ^\¶{íd膼ùÍoÆÛÞö6|âŸ@ß÷øÖoýVÀÁÉM|ówÿ[++0VMGVßp¢·åfø vꇹoÁãrý߯" ´Å*0ó–<†KLÊ_HnûŽˆþCRï[vaЭû[“Q®¬ÐrÛ€,où]÷a7pIÞ+—Ò˜C˜+­Ù—Ú)HQíz­oûZÙºøÃãÁ7+à?|üoËo_[™º!‡‡‡xÿûß_Ý/¡ †ee.a&ÀaznC¨ã ¹Fœ  ÅË=–³Ó4j­Ù·Ç6KâœII=І\$K5@­± _,3¿‹Z5/£½<½%ýÜéÁš*Mee¹ßÙ¿€|®²¶‚¢5|Î-+Ãì´šŸß+»ü-jã@£ù‹k'@ßÔ^¸º…„0»œû•1¹-ðh²€JÊø«1À"Þ—+Ë9W§1§Ô%âNe•ÌF­Ù-mZ¦k°Þu¨½ °Õ/ê*ýgÓøÃˆÝh©Õ Mu(Û*–ÉÄÓÂ(V^Ûµº2CËâ©®|ÔŽ¹Lß$Q&€ÞShL ×/õêŠÎ%ti©Š­‚Jõ# \¤€ŠVÁz›M¶ *ñoFÕk™¯eéÚ¡’{A˱L«oU+oÆpñ¹L†Ê{{dÝ]ÖÕR]‘÷;v-ÕÑácšóê¶[ôL¥MKKióI&€ÞW\Õ«aœ ô-'ìS<îû ¾èt7ÖÑÂP†Œ¬tWh•Ôé¡YBôE4ñ¢ìIí!wõ¥‘Ìs¹I RÇ<Ì"f;…Ô¢Š®ºÆÝ “ý›Ì!¼+ÌÖj+k( ]¹8Ê¢IÚ-smØMP«݃%(oê2/¹J%s¬YâúÊÐ{ŠckcöýÒ+;vúDâ„JP‘ Î ”Y[MØbÐÒ½ƒ»#[¢[¬láT¦VÉðة٬Ýj-ÃõÙ{‘É}UgIÐv-* gKx£–”òÛðó•"Ÿ#*Ë«Z¨ÙLGþÃzü—üýƒªª½'J;Ó%POdè;À ÄÖ-%ù Ë¶\;F{F”dyBK‰ª‹‹ÔqïU!}e»CájÄè&zfmdý½ÃR½Çà(HsÊcž††zUµ¶YÒ.Ú‘‘4CKu¦ÞzïÊPüa‡$äE°KzóL郮:êâÍZ—Æ$ÀÐ{K¨|© êUïMUÅMÏk)Rv)j¡cg[~A{zqêÛ-hÌ>îïêK"ª³däÔÃê4¸âdç"DÍ¢Vß°€žqõâ°·!£– ½Ô5âØ´‚X¨²s4×ÏÖïhK°W§>í˜%Xsö¥õœ/ùM©j!ºÖ#%»— úNøl–1Tê ê‰Â]Œ$Ÿ¼[”…–'éƒÞkOŽRYÓÚþ'†» >éfŽIêç‘4Ndè½E®F_䯿úJBù9ÔÚ¬"3”IÂpèòÖZ©w{AÓ®›öŒ€³ x‚Ä—Ä}[¸—Ê"ÓÕk ó×°÷ö6i:U Þf²Êîê%}¬wjEu¿²Ñ‹è¤·.dDzp¤ëj›ö¹8Ê*Y–&µ•·Ìr­eè=ÅUÀ`HJë¶ÁÔÚ ²W=ج…b­u³p칩Z´Å9†Mn~’*µCk’ÓJBN*F¢Ìü(L¡Å «ŽeÜ õÍ2)šÝ9DÓ(~ИðÛ©vغ8¹¾!¨Üºy¿ÈO¾ÿs]#eúËÚ&¿KgÎ..Ž\O¡.»&”2ôž’û [­bÈü¢n!¾Žø Ë)Vº72€ÞI9y·ö"“Ài8›Y@.¨nºÂ3¥!»s Ô»ž4 å=˜k´jÿ–úòì©F*š“µúÂ¥€Sun -®æÞeRê¨î¤´i¶Öô.$>¾³y3=×O&€ÞSõAÇŠLÚ4 ª÷TWÇ&>QKì­úŸKÍØ)º/nwIÅJp.È3¾;*Rå‰ÞÛ€º™™–±>¢DÊ–‹£L‰jŒTfº:B§(ºL§bÂÔ!É PkÑ|ÐÒÅ‘s„í.&0ÀòÈ¢:f™žÀÐ{Kˆƒ.OñΑÒ<ŒVÖ¼n’ø_ˆ §(œ³>’N4YëAÒNYc›6È{u‰È¾±n© ÎeCrC¨šå=ÑñAv{’Õé¡\T©2=ÒY²´ÃKÍþ}µ¤Œì3+jç∳|Œò)Â1EAÆdP¡,~.:i ºtæí@ÜÁh8ôJ»—Ôµ’  ï@¬†6  ¡/Ÿ®ETÝ& P…œÔù϶bÐeCã ¤bÐñ/¥ÚªñU¹Íöh¢íçn•ÀØÊ´ëŒZÛÀg[Ôd4¿Ìuƃq¸åoRÄ;m#Ôì+²ÎQ« ñ ZéŸäñY©'ª½kæ<žóF¡·2: €  ÷–fç++µA:¯¸Ôj²¢>6@ºdA-•ÈOnÕøcÑŠcÕk‹g%ÉÈž­²T½ltÙ½€骷–j¥ÀVþ~Õl¤ÄÏ­?4@.G#i -½5HkR–ÄQíI G' Å{–ŠF´·í.ã ·Ô›=©1îò˜Ày ³K2ôž’ïí›Ó œG(a§-D ö™© Rxõ7wƒ.¹ê²×‘~a²“ŸÔ¾aX‹¹KfÔÐô.j·³f”¨¾iÕù;bÿWG¥žIô(޲ðŠdŒ»wÙÿ?n€³ô®4t½I£xt´‡T3t  ÷”p¼’©ÊʽKFq¯Pàëçȉ­c -Nn¥]ü ;Nj,:kœþƒê{–í½aUùÅÚ)¤^ [ðˆâ½šŒò}©.H†cÔU¯¥¯µL“Ä®¦5utÿ&TS<ÂÛÀ9ÔóVgr<~ÂJÔQÖ Ö¬q}eèéûo|ãñš×¼?ó3?ïçav} ]O_Wûú°§êƘo!´Ð|¶iƒ¹Ũ&ÑŒñVRYtTï# šÄ]k÷•Œ±çœ“ýI¸“Æ^GûŒ1\R“ƒ®º¬qí K¬ÒÆu™dVðn%u޲øQ=aK(£8tp–›*c3ʳf­ –߆â×Z&€‘w¿ûÝø¾ïû><ýôÓñÞƒ.YÝ6pЖùƲæ¦@HB>Ö”_ô?¤RóH·ÔqÓÍQô ÛAZöÉ(ÓY>L·õ>µ’ ÚUˆÃ øÊÙº&<•à¬Y¦$ðx™d‹UFü ÍE¥âdï” ¤e7ì]«Ë' uÛ7€9û<¡t  òçþçxþóŸÇ{¬h`ð>ǰ) ·Gx­+©ä‡¾iV[óÊ-åÊc³¸é…dѬY¶HëÀ¹ô;háU2" VIFT+“Ñ!29²ŠJùÙ«LŸÙ%ùî%%›®íNOO3¹/šPNB<5Ø›% „ÌGƒT©kÝ cE”ëà¥N_,eUA6!.VáA¨Ô’àÕ©eôDˤšPf’uoy×/pf’|Ù}ý”€EæE}˜ÄÉÐ ùèG?Š‹‹ |ä#Á¿øE|ÿ÷?}ôQ¬NÏðéÿgV8yìœkávù†I:0ç¹)xÿ§Ç¾é=p \þ¿žjÿšÉÐ[äÕ¯~5^ýêWÇϺ:M † \î.ªÛŠ·©PÃßS®6K¡ >õ5HKájO¦Lu# NIµ$}çP ¡èv6ͼz%ˆÞÊ]ÇaQǨFr‚Ž¡dq±ÚÉ`i‘F¼úr5a¸š«Ïe?ÑŒK›¨u¥>xÝžÕWvæ¶;4VG¯—L½§0œº>‚)µãùÅ(8Tã<¡@¢`Ù6â{ %ÅŽE*õ *ÕEèŸÒUŸ@5ƒÎAŒS_ áPÙZ}ÃÔ]cH³»‹£4±ºJ¶tæ‡.{ËÆUùµ;‚s¦ZS#×͈×ñSUn[ ¸åQõÀÛËò^e”‘û¨¯·L½§ä U´åÞ®ºÚ+Z/N‘ä¡l%±~–@­\4”( dMa¤óFPâÏHËþAîѤ!$jÛä(ý¨íÖ:Å ·sؤMͼ¦®RÏ…¢î”( IDATÂëþe·×*YY¹°BÅÑܼßIP$M–jÀœ[¶fÐúnvVèX»õxè~+€Zƒ&õàX§RnÐTbÑØêÁêï-ºT‚4ÐhxU)R/AkK ¬wHJŽñጜA· ªõP¡–kõÙgV¬!zÈÖrïmêk;”à\׎л³¼ÔYf'€2ôÞ’3è‚G"1èÖ±­È× T¶…"ªw•ýH´Â Hßù"ô Z»Oj]¨ç­²B‚¸§§¢ø,­U¡bv…˜-çÛ`‘åƒZÎU™Œtcê9`yÙ8ÛèÆÑÀ9ë/Ê]J_ô#]Df€1?t!êá×íe÷šÖÊæ“D™zOaæ,º[(ÃìªöO€D͸®+ ¢Þ.(ôÐ' «“¯‹mXCõ/¶õ aKµE‘áÌ ÆC‘„ŠDµ1‚¿?…Ý8kËá…·?l+@Æ_J¢Æ€9æœ|„Ÿ2Q¸mé÷IÝ Zº¹ômG36MH““U‡È>mJ™zOq•.RtÅQuÞ(s÷F«6}¥Ò \:‚÷ð?C~kÌ­¡„ØeÁ#c8Ë Hë)ˆV®Þ š.;Çäï/!½i¬òUDT{,i”F˜]u°ƒ’fŒoò4ǧ±P½-‚Cü8÷CçK½]r4+¹s´=£‡ôAëþÿ ˜óìù,lÞþ浓  ÷”r’°DNŠ ºöÍ9Û,IY²ÇPékš©—K½‹9ºÄ›} ‰;5PWؤÅAÄ•j:jG£üêTÚU„„A½›Ý6–Ú2µcIhµ¤«åîEZšýC"Z*eÐê'¸H‚è ¹œ¼,êÑX„_n—üKe,t:öŠË¾A\ú"-Øùo×K&€ÞS>ÌNÝ:°çakûeMÚï¨Ëñå@P÷áÈ€ºVÒ²)–Œ¹&Tä8ýqŒ¸‡÷zηs¤µ(Ž8u2J#ÎF€Öü eYHpNÚ …‹K¤¬Îñ‰²?È÷íª“£d¾yh1dÜE™‹C]±M7Á7š%·Íu—  ÷”È E#¤¢ŠåòíÅ)2Zì]“9´‰¬Ñ)îÎ!9¶Îz„¾Ž®"¤RÇ>!hýA+Ó P5¼çV“¯ºüv«Ÿ¨,± ɛƤ‹ƒ›;ç—àì þ[Ø¥³¿*t«Ÿàü}ÜÒ¶2B™Œ¤UZXº8¤ÿY 8¬¦«¢ç\UË×P&€ÞSÒ™„²eÔ­¤°ýˆ¦¢k¥‚²õ»Æe±Ð¢ùîäƒv¼-ƒÃ&k  îgÁ#Å5~¸8‹|KÖ´ *æ05{[~-%`CEØveyi¬Yæ³V'Ò$«K´ Ü^cÀ,ÌVEÛPÿ“ ¬ 0hÝÅ1QÓê…«VR×W&€ÞS\ÅË«cÍ‘ö'.YÃ2’#£* $:ËR6xcå‹ZEݤc•+Ì‹Œf£‚©=ócàœweHc ÇÀz«êØ¢"F¾YR¶Ô`dwOl2N+°[âW¦Þ‡ÙExœI—ýBc½77Œ — FUz%Æ šº‰A7eè½…aËO©šZÇ]ƒu6ä¯è‡†˜¥›ƒ\ãó/*ä{¦ÔˆZ œ9s´¹ÉF¦Ç£7Ý:jjÔ+ߘj;®îÔü5õÙgÎQr„OŽî¨_Òw–i0Ézž¬lßP«û„ÚP!òIÊ¢K@Í¢r¡J+z¼c,Þí]@×C&€ÞS,ÂNÏeKHù %üHqN¿¤OkÇê©)pb¡ã$á_ÜÑÿ,ŸP»º“ï9»ßmSK²½—Ú ëìrå† Qžj †â~E¶&!€´Âª,Šõûé=»|ÇIBa£«´ójj7r§¨×jWŸÜU:-ƒf·™Zƒ[¬47B±ÚÍk)@ï),š”ö‚nm1êDݥƷW%Ô®yþ Ø£tq¨;i@í "¬®Í s`á×1ÌN:®‡î\|ÎR¤vâÊïEqÈo«êJŒØÊ2,“Tú›$BÖJüqü[Û1IÜHÖ€šÀhN枊“Ôµ«ƒ‹w¹!äûqŒEräe៫ÎszÀÐw$n—œÖ:°î«½ ]Ý«rJBâäGCE ÒB¾´h…-ÿQt«dس —nŽÐ*þ‹Ï:‰o¢º¸Z@í®uÜùÈX¢frcIi‚´LN@¾}Õ2=4±+’Ĺ%–Éþ!ÄÖ~¢4g¥VsméË7LJöIHßÛChW åzËÐ{ŠeÅ-“0 Ã¦z«ŸÔ5Q&[Gi—ç†{c`× írŽ Fno¹n²IÑú k1¶Ò¼… ÛA:ìű œÃ}UõXÿ Uª}„EBFÿÚ<æDÒX÷À9‹‡W€9K ¯¸Âš« Yv y©´–zKpN« 9ë´“º†{ƒqYº¬ök)@ß YKÍ—zG-’Ua)Þ”™ÒŠ<‰Œ%=‘@Ýi/h;ߦ,Zazî` ñ9kÎd6Iˆ¤ŠäseJ¤‚m”̯°G Â[¸[jÞ9 åûrÇ¢1´6Ê)]@JÂ4pŽ5°*¤Ñ$älº1q,­Tñ_ÿj'ç)ʪZ–MO%c“˜zoÙ¶ÔÛø*Z’®tµv³Kl™KPާ²æƒ÷C[TšF÷ù,!¦·ì ´Ð:Aà{ïY©‡è£c…\sµYÉËX·öƒÖ0嫦~ ”Ë‚ zö¬¡&+<¶ìÄd¢C2<¦Y†‹âÈ\^ÈëHIÜ S·\¾,þ?àø\wÅAE†Z™½æ2ôž’OÖÔ% ¥¶ÐZEHYÃL1ÐMßBÍœK?4i-Pj‘Ê'3KÒ®ùœ0ÏüÏ‚Mí»Qƒw œ[aúû¶}!¶’³m]&£º'@¹ÚûS¤ªh1H0®pÔeó‘™èàÿÜê”Î…C}+Âí8Ó µˆaXôò@"¤HeìÌI(FuLdè=Å5=Ò±ñ þÞZ(´EÒ±7¨lÜvT@ls“¤ÐúåhÒ—JW“ƒT,lïò6U‚Ën -¿´/ZJG;¬KgrÊ0B²60‡Ë÷’™#xË„aáÀœìWŽ“•ÊdÛ|ÏZ¿PõVzÝäê“cÑáàX ÊUîY?†,=—s%ñK@™zO‘ :±ŸT-MÅ 8VÕ;*4UQY–~ûÚOCùà@¶l’ÖeS$ÉÛ${®Ù4ë®oÑúbìsƒT€Š¾bHõì-RvÇ\ çX"ä§Qj¿mJVTË¥¹šáâsöÞ!"sꨥÅ8tú̳cÐÑ2XK³I¢“á £ro”ä½Dv†¯£P$9f¢qJ‡…›$,}Ðú~ZÇY»¹ÄÕ®âzÊÐ ùÓ?ýS|à@ß÷xôÑGñó?ÿóBÝÖ†°¹‹c̵QJwK“ƒ”7, œ)ó9òСfÏJ ÔhS}ü@¶I’toÀ¹8z8@,V ”)ÿCú"|×°Õ @¢@G:‘A³K_ü+£.S >TI!=)h[Èí¸¨<ºY†£´À pqˆD–i€Ç¬Fq4ƒH832mì WÕ-Œ$t W}Bé꥘IÙ@B4 €  ›òº×½¯{ÝëO>ùdèx¢ŠÜƒ£æe›¨–xe,‰äƒÀcéôëÅwl ™?:H ÖN{ÆrJßóˆ‹#¨ÌSHÙPãÃÈ>1Ííé¦Ð]Úô_$ Ãù˲qÀ¨7íoøŸ¥ÿÙ½/:¸‚dÊU…ƒ¯Í ºOK÷¢†°ž17Kn °.Ì.€s¼¸ôA×eŸ] û|Ndè-ò{¿÷{xÓ›Þ?;—µ^ÈFÉpÁGõÂå$o¸¦áÀZ‹Þ  Ê C@ß :¥¸=IèÁJ ±Ë€Zô =1zÔ šÄj´&@Sý…Ü]²æ60‡+, !Œí.`–̨ʥ*›HúcIeÅg¹5)Ñ™›£(ÎÊ á±8— \dßs µy¹ÄåÞ`Ϥë1DÙRB‰V£„¬¡Ldèùõ_ÿu,—KüäOþd¼go_âòþÀ%f/›cö2ïZȪWЂøê}T`Yౕ.ŒŠÆ*ìÚ‚šî q©.Ž0KU¤¥{£GÞ”dS¯ZQ]ŸzZ·p9yFžÒzG)M5xi@¬‚7 -FSœÎTø% çàœ¥M¼– š½êr~r·m©9‚´¬m&Þ»XXÏ¢%ƒÎÝ¥›Ã†´…ò_?ßã¿þc\·¯,&q2tCÞÿþ÷ãw÷wñä“Oâ'~â'ð[¿õ[sãË×?àÀ)x¸ [\OT| pf¿ß3tP–Él¥‹Kás`Ïy ñÊ<,½΄¸º<6í’góOº5ˆy‡8ܲ›“›÷0€!› â_Ê9ðD×AVtT#Š-þVÓ‚A  ÎVÈÉò•aØM¶tfw#ª––z©<ŠCÚ¤.%V>„{qÌÈE®9OJff ÊÀâ‘oìðÈQœÿñÿ¾Â$N&€nÈ[Þò¼å-o©ÿÀŒ|׸¼öKÄ»Ð2˜ŸmOnÁA gá© %jR¸5v:µuZX·9¤üUÅs³OèAØ„ Â.=­ Òþ •w’ßÑØsnCiÉÒí•˽5öœ?ÑózÕe! Óø›$̶âÌÞ+ì9ì„È„.N(ûD‹Ï¬-k[ö,ú…²Ú†§³6µë In¤£>Èë6çÜ$²Êf,[£Õ2­û:ÊÐû ùæå…H¦LÅ_‹ÉrCPip¦ô¾h $+:*QrÉH%] Á§žÚUàœ3çäƒ<@;¶ì2€˜R;V'sŸ´Ö"¥ƒ£Å 9¦8ÁÔŠ¨Á¹z|ɠǀ»rs¬8”Œ€Í!µîðɢ9ZQ•lRŸvÚ#Ô»îù{ÈÃÜ…GÅrdgö¯±@Ù¥2ž­.sæ¬ï*»êÜòkÂç$@ï+Ì [ܬ¤=ÅÏË9)ÿ+gÞPûO¢Æg€îe«Á¢&qÕˆ@ºÞ6’2öÓû{=‡¤zòòH~pÀ8‚4U`þœƒoa7ñ·Úÿ¯í ¡‘³R‹ô÷2ò3€5¦iªK@T9cÀ˜—äú»ÏÐ!€²œ4Ôº–ä)ÎVpj;û«# >û±°«4{ ÎÁ2e œ ðd? îe¦j w&dè=…îxû‚ÑeßW•£É’F2@³gɦ‡°+¼•Ó:ZÚÊÖš®A€[*–î’˜Lªn8ù©*WÌp“–hì;%º ÒÊ‚ºÂÒ€\ÕæÚ~bÑ:ƒ¦ô¿7 kÑ2Hêh¡ÀÙÁ±%HG0ޱ0þž(tô ,°‡?öiô¯´eþCgÇ@Ù±¢Ï\cE–•5gÀ -Éœ™/ê–Ÿ<2è ¡ƒL½¯D èି"‡ô¢µMÞÁK¾ýŠÓ´0— ­QõPÖ:0åèÒ€e–÷=€“gC@ç^ÙoÃ|M ´˰rÏh<¢ Ù¿gÎÝÙߤ2Ð~yïpv8¯ve$Z€°`Ð!0уýЉу@"ä.éÚF‚íîÎá}鯖óU–ÌY¸78¹8bì3縟1j¡rì؉AK™z_aÖ!î °(9,€¶:Œœ½{ƒ¼/Aú¢©>hQ¡ãZ”ì2­–šZ‡ƒg*’jÊôàAÛÎÜ9€¦.µ»¥6@[²éÜx£Â%H(Ãí8aÖfm$F.ÑÎY8‹Î‘ RÂì*¸¢`М¢È<øì/`æ €5sºÎÉÓ›wUU·56hÚÆ¢-@—'j{€æhg#X´{unŽÉ‘»Æ¹¼£Úùv…]'€N2ôHXQì-€¢˜¦ó~çà9Dš.Ž6¹öš^ãDa¢#”4ÅF”¤Ý"Y Ž•.Ž@O:8—¯‘=w¨{O P§˜1ÊRºÃk ˜+&ç>»yòˆ‚’<ÛK—@š˜¥Ê½Ä@¸·<8Æå~È·’ŒÙr`Îk0`ÿê-å Z¢oò )#·بšðÆ m<±È6ýÐl^‚tŽ£,áâ`ùx®Ùô€é¾Ÿ:ÊÐûŠhéÃÈ\ùh2J/dÜì ƒ^³jx°ÈY\5Q8ž·¹C©àÜç}ž=ÏÜ…f%`rÃæÌÍár'è"³+Ò]î­Y1f Ù{tXœîQ0é œ}¹Ù5rpÖ€:‚Hzh~6y|+@ZŒTjÿs`Ís30¯=PÏ`°aÀÞó[nïÄY‰çuKV0¤µÉB*m¯¹’ ííÎÜa`BÏŒ^‚2çÀ,Ë!l IBDŸ:ÉÐû nO†È’Õ%h‹Ag#~¿×ó°hÀ!wspQ‰)DšÓ)}Ð ‹Q,@Ú-ñÈ‚­€™Â{wpÆœÀ3DWe¬bÒ0gÑ3t.fbïË”…&{óàÀ3Çâ"`wè1ÔþPa‘€¥¡†ï ×ðî%Jö—þè¢sÌm_UŽÜîœk3Дg`Ì\ù÷stÎ|AgQ98Ë>"V.ÌÙ(-Ÿ´-m/G/¥{cí.Ë=®fq £ºàÒÆ‚ˆLdè=ÅaJÃËcCu–Ú’wo¬Zhåºll\ÅuW\ù¢‚œ½i@‘¹‚´÷ Úd„*­™¡÷¼a ;wÀ\]« -ÁYø$HGö,Œ¤³`mH …grÞ¤¥íC ìZ€ó {»S6À¤ÙÛ=̵Reû|W“œ9'fžÑ‰k&^g°00<ƒE‡-Yt αR¹×IC"ß”ÿXΨʑô=Ǻ-y/æ,l¸÷®°¸[Aí{ö”‘ õë9Oeè;‘A 9òs;ÔžM V#£Ñìà•‡’Z„WÖ3^ ÏÏ䉣4"£ÁÖßW`˜A ÿ‘EË2Ì©$òÁ¤(Ï£ÍÙ.^Áò ›z¨õßö Å¨Ñÿ?6y•¸î2ô¾Â$€9°8É&:0·ô¸ðcˆ@ Ø+(ø’s–¾ÑÙ‚û½´ŽâÀœ&ˆz ô„€®`°2„aÙ‡˜ùAK,Àµ/*üÑðþè´w&Åvv´F¹)ORÀyÛÞƒñਭÝxÀ^v‰Þΰ¶k¬9Åã–£îáœÁç€ö§KWìì¿"Àw’L:Œ`²ÐHûQ»7$H˓ӻù ¹ÒÆ‘/Ïp€é5F ‡´Æ2{»S1q‹™+ ‡¹®£Œû¡Ä‰ŠÄÞÓ¹7B}_ ìêżt¶·®cd{€ž×XÙ++X4òr¸b×1†Qã à+Àx 6›Ð£NÜÃýS?õSxÃÞ€÷¼ç=888Àßÿýßã½ï}/¾û»¿ßñßqçfʇzÖ1 Ž,n¶s l°¶}j3‚KÐÁUÊáà3Ÿpð%`®“¶EËÉd*‘,›¾†0¬NÃfæÎûœ]Ô€ÅsÀ·‹Á±pI—0ØÌ ø€AGpd€C€:„h$—Ç …õ~i¸æÛz<.$SaoE`ö~ž;—/á6@bÚl7n¶Õ®€áW¼ÁÊZ¿ë^jïÁþý9Ð|ð9Üp:tŽì|¤‚EGiˆÙ-Üç@ŠâH“ƒijO‚s:f ü`yð`í®¬Ï1à ã©epol:7'à. öïSGi‹øt¤ÅC(Ó_Ú_Œ^ìÜ—Ãl‡Ôz°·ý`çXÙ V–±n&W´>¤ô®C¼ø‚a.!¯ï¼.‰Çõ–{ û·———8<<¼üå/Ç;ßùίÁ“I ùŽÑE6wØx8À`/±ò>9ËîgDÀ̳çþ6ÐÝ&ð9€s. Ý•w{¬fMÀÊ=60¸¸_tæØ "œh+‡ÕLñsQ&ƃõÜ?ÁÅC¯\pÁ—Æ`8è€|Ì ã8p$@ú¼Ëú Ä9@sÙ[twĘèdNyˆ ZN¼Îà⤽뀽1­÷ñX ¶<` °½ÂÚ^àÊÚÈäÁöYÆp ðmBwà3Îþfåí¿vŒÎÑ@ªl/'jQ€ ç^càœÎ!w;r÷°B]lúÀîèafÆ G˜>Ö†cõä×80 ƒÎu– €š#gÒ²“”eµGÑAÚy*‡p:[`°¬‡°ð°ÆÆnpiWÑö‰œ°‹š9ºsò£—Ò®œý±ò•s÷0@ÀË^ö2¼ï}ïÃë_ÿzüÒ/ý~ññ«(ξr† ëY`XÁÚ ¬‡+¬Ø¢÷õ¿3Ÿø‚0Üp›ÏÞpÅq’Š×€]3̆`7€IɈA¾h×|Ãd“Œr8í6° \›H3˜ccà„sê°9ìÀ7¸Ùn|“@Ç8$ïî`Ðæ ,à& çìý¡ð~hˆ™:é¤ïÓƒd¶œ‘îÇxdØ&Ð!‡X’cÎKrÀcˆ©%ÀÜn½«ûë~óáWÖz€v.»þ9žpFnÔèç[ؓް«ë@G¹§ºë:¼ûÝïÆ¯ýÚ¯áøÀ×A/08 `k€üÆî Þô6—¸èWXÛD@7¸áuÿ n3èÂGmøˆãA!^Œå²,ÿ>á\€ãA@[…!‚›ô, + ¼Â€6¼A àXžãÀí®Ãæd<ðƒ=@à›tl#üµdð‚KcÞ¹IÁ9ÇÁÔAqqPbrìûì²ýˆS\nˆ a;†™+ƒž€o®pÚ ½c³s"¬ŸfðWóS€ÎtI~õ  ñb¿YnäÁGœ°Væ Vä(±¢G™C¸›¨…wv‹W|œÏ㜀å%¢ç ô¸„忏 òèÕÜÀžÌûg û¾@7É•M(Ÿ{w‡ì,m e):²göî Q>!.ºX´¯Á¸ºß[ô›5Î7kœ.Ô”˜ÑŸæi§œ¥íË£Þ&äžè·¿ý퀟þéŸÆ“O>¹×o/..ð£?ú£899Á<€_ýÕ_õ1n;Ì|ùå®qÒp˜}lv=àjµÂyÿœkìç„õ— tÊ0ä&£"[v` ÎÂé„[ƒ=8ç« e­fÿàt $Ü*0'Ï1à =Î±æ ¼Æ€Ü‚Áù†odЋô<îë€c :w0h3ø AvL9¼vÉLQ“T1É&%=Ò;e%[°7D ´]øh‚0,À}^—W¸µ~ÖÁÐ9°þ@ÏæÜûûWˆ.¤890Øï‘±pa¡ g¤K|re„_.?)¢ÃÄü¥P¼´ôەϰá[ØðˆŸƒc\tÀÕÍ9ø z€çà¦ñåCà›¾ð.¦*ì)ª&³¹ñﻼ B,zZ* Èô`û~îgÀ¸Zmp¶~ÆùÖÏÍ— ô,Î݈ŬÝŃ`ÍCp›( òšÊ= Ðï|ç;ñÖ·¾>ø àñÇÇûßÿ~<ñÄøöoÿö­¿ÿƒ?ø|Ï÷|~à~?þã?ŽÏ|æ3xÉK^Wa—pu7^¸ B>øláX`u\¯[gX}Á`v ˜]¹]ÔlÑðÝ„eû±eo›ÆÍ¹ r¶€ì¡qõHkÐR4G7A8À6|„5?#Îî{«GnÂ<ÒÏŸ'8fÎKŽÌ̱eÿüÌá¸H9s&(ऱwH£÷ƒÂ:{K?§»Ì?>^öloà `s ¾œáK·þÝí3\~Æ {†0»pþ}ëW†3&ÙRˆ”s"íïË…ââšòo© ÒBôFgˆ²ïË×°¢0¬*ôåƒ#løA¬ø…8»ïý#7a^Òv¾|¬›朋r¡ÔYôN¡“$„Î…¥ýCÂnG_ç×€=øŽÁ›#ØËž½½ÂÅ鳨ü3aó4¡ó¶çÞ¹Eìà’çÚÂ$NîY€þ‘ù¼ç=ïÁßýÝßÁZ‹ûï¿?üÃ?¼8ÀSO=…×¾öµ€—¾ô¥øìg?ëšglfîµïýµÖ‡ÀÕ!py ¾} ûχàσ¾ðôÏݽ5–ˆ·†1\ûbpáâðRúw)½‘XÈ>0Õyƒ1èçŸÅæä> /} ðÈ#À ,pÓGì|š¡áÏçž‘yöl<1 eŒ£žÆ»-2p.!¸8°$¬qŸ­u¬m“²Ãàl> ÀfÞl€õ°º¾¸ ¾}þÊ Nÿ¾>÷9ôÏ>»Ù€Ù"Ÿö.ïàº(SZÙ›÷ÁѾ!;Û$ýšŠßºòÙÌ?‹7põ’—½ x¾nXÑqÂòŒ…[ ©\ˆ|¹ˆ|Æ ^½ÍƒKÃzæ`;aûèç© 6WïWGàËcðÙ ð37pû“Î?÷9ôg·1¬7`ë'|ýø"·¿!;ÉIî]€~衇ð®w½ëŽÿðÃãÓŸþ4^ùÊWâÓŸþ4~øaŸ]`ýÿ'`Ý _„î…/Nap+®¸€›„ú ÁüSüã øìaÌÌ@t D— Ø,¶¦£8ë$c¸¬oG‰B§.Î)•GRJ9¸½¨;ÍZ0º#‹Ùóó= óÀÓÀÍ3àæ#Àáóå °<æ‡À| t `¶º9ÐÍ3:ïp6ãÞSTŒ´Ô8°ä˜ÐS¤÷Ö¤:kÄæ„xÔ¸Û ÕMð­|E.*ãOàŸ:œüÍpöfæ30ô ˆ.à~f½;HڜǕÃN6.ïCÚ>/òÙ"pŠ$ÌʉÓwEY¡cç¿ï\”LwĘ?hqô‚/ãà¾çpûæ¸ñRààA`y˜ó_.¾lb¹ÌR™P'Ê)1 £;‡¶eddêö3g÷ÞÙ+8Çønð Ÿ38þ—8~ö%˜Ñ—`Œ³=yÛS êg€,žVøÂ°qnwèÍ®‰Ü³ ¿ñ¿~ô£ÜLò‡?üáûæ7¿o{ÛÛðñ¸ÿþû½{ ƒc,^ño€u×Ùà€yEÀ¥ˆS~¦¾¸Àò)ÆáÅ0'XÒ˜ÓWÐá0X!íºìe%·;3E§³ '4AI¸àÅFžî‘ÇOònDšf˜ »Ìï',^,onv·ñÌâSØÌ ;̃t С»°„wBû‡ÎÝk˜$éìô ~Wd$@9€òɸp`k¾ÍžfJÀ|IÀ™I¶ÿÂôßñ‹Ö<‡ô|Ìñ9tx†Îap‰°WQïm.gc‡hc‚uàYÅ7Zqž1‹ *?ÖF” ó„>ΗeåÌ¿°<&ÜÀž vnî0ÏÌ @G:h‰83HÒ m½"ø„u©ÒGÛ{pŽûŽûà÷Ìà°ÂòÊ“’sÜ&à¹ô¥9ÌS‡xÞy‡#sæxør´=á a+®pæÃÝ!^Ú¹}ÿj½Þ¹ÞërOô'>ñ üÑýÑýöèè¿ÿû¿_ÿÁz¶*èŠ@W¾4À¹Î:à9¾Â0_Î Žó n`CÌèf¸ ƒ ¿ÓEêü, <Œ*€tˆ`4ŒãúŽl"HÌíPhôs‚Y¸æèŽÙ}$\=@èæŒûwg¸=ÿ¢s³w½[¹a®·˜aŽÐá,‚´Št…³M$hôqÊ)Z Ò:“æìðsᾟËDwLnÊý<àÈy@ޏi,®ºS¬gs2½‚öA¥ ˆ–îÁ<¸Ð¢Y6„wiJH|\ü @Z†]mj€‹_peÜâ’ :gð™Ý2àggÀ3=K8±ŽÈÒ Z`†f8@GÎötmo"«K$Á ÇSHáØß„h@êÒ¨%u”ä'ëüßgÎľ|h˜9—¡ó$tG ¾IÀýŒõ aãÓ80¬ºSpwt3PÜšý 1!N&—úSˆ0eÔú¢l´ÂÎîÁö¡c¼4næ§èƒŸeÌNãÞàÖuÏD˜aæÏŠ™££%:œÃiw­a"Iî¯k.÷4@ìcÃ3Ï<ƒår _#€FZÇŠJ(>è À™Á|epÆÜ3ÇŒ%æÔÁý›££…grW0”*k~ot° a Dòú˜¤ÀÖ<[¶aW9ïʰC>$7ñwÀ Á< 7<:&¸AÀY·ÁÐ݆íæ> À5~2>PØXÄMª=(‡Ý„ȃCg¯…ÿ9NT Úm_ ¿µž»®à8„Q @Üî€S8ÿó-Âbmpƒ,–@{˜{ÛÏÐa ƒd¢soëÀì:Ÿã_ a;ŠÓˆ®Ã ®ÝÎ,<>a±Ï9¹šc^¸2â`ÜêLsè\8ø„0, € sĸ 6Ý™÷ƒÌ®[Œz:],ás ò¢ƒ—Ñ)Òß.#–•#&ä÷ÒÀ9ƒn|À)ƒN ‹•Á1[h ˜¡9ûSw‚ùîî̳é50t”{ {ì1üʯüÊ×ö¡–¼ÿÓ¸¸ÂÉ%¹I’ _ÌÊbÁKrË=Ëä«(БÁ f04óÖUaC&B‚»Â–tnÊÉ%3Àø]8±°$˜%øa3Žp“A'€=qŒ ä~¾„cÑÇX™K¬»S?ád<pŒ£%²ˆûkHPrWFœ, ›ž5ÇM{8[ "==Ñç†Õž½ÑÀp qÆÀÀgÎzŒ‡äÖç8‡D ¸å"D0'hKûÏà6Y5®,hRËÀõˆB pÌ™…{žK/Pf-Æ{øÈ±gÜ$Ð csäv¼7¥óÅ:£ã×K›YøI[ïC1&M˜„ÁÝbСÏ Ƴgë·¿5àÌþì÷’q¤„Ï€îÊâÀÉí•Ø!ìÌG¾jZtÄ0¾vÇÿ)ÔtL ZÈ= ÐûØÇðƒ?øƒÑÅñ;¿ó;_ýCÞ'‡Ò¸"ð•&tEè6n#Ïî§„žÀ3ßì]åt§gÈÊš@Á`à`=0nè¤ã~öäw¡cЀ¹A°7\È6–Ži†ÆàÈ.‰1˜+ Ý9(4~ãÐGB?(0µð…0+z&6£_bÞ-øA‘†Øá„“Ò®lÒœ  Â|08€cÏs$‡JwF_‡„õ|ðàà;Ft8ˆ$0§œ¥ý³CYE9°`Éq$3‡ÛÜhÁnT³pnb³„[*ÈÀ¡+:&ÐMÆæ˜\Ѓß44†6`ã·à£¥Ÿù]€È+¤0áíÏE¢Eý.;ÉÖÖí8weÀW.-pÙy&íìO—„yoqHKv;Ž÷»¡£ÎŸ¸8¤¨| &#aÍÉäžèw½ë]øÞïýÞ¯ýƒ™€Þ¤ØÖÖnÉ*¯­sl :ËXPXÄ*i˜ösÐÁ± Ü(òãtîFDŽȷ;µÜ ­}|2€^& Ä8bð`ŽÜß1'N‹—ä6©;4ÀŠzØî25x3ã‡ÒF„pIp–-ÃäD!ƒR¨]XM֓߬ÈÙÚí•aH³ßüÝZ\iqÀK2˜èbIÑþ3Üð a=@¤ñH|¥ ˜ãVû¢4EfÊN2¸7H{Ælä:DávœÁØô 7낤…ÛЊÓãÝébzqÒ0™ð~á†fŽè†B˜!œu'É‘Eû[ÒM¯ŒwïÙdÿ¡[,­ÅÖ×ý4? oËCô5JçȤznëNïË= ÐßùßéÀâk- ¾÷Öù;ö§A3hØqÎÉkI°>¶*œc’³‰´ƒ°€àB½BTA„ó”®ÐÎ üÉÚaxí&ãä Ÿ ¤òŸýÒˆ95|GêX£7+ t騙ê8t6íÏ'®výžÞ_+:—ìhB‹:š 2i¬ØûD9‚2ùÉ«®',`°@¶Gr1Ñ1Œw:™ €!Žå•Ÿ’€YÂ9zð÷†8óàÞ˜%÷†s7ù²X:¶Î… ïz¢c1ì À;.Ð3ÁÚ´ˆ‰|9Í0®Bú¸zå4VQ˜#î é~ ËìÁÈb8Ú߸º¾¶nr|ÍñÜÌ0iHW„ÙÀX ö´AºÉÙ0 î&_S9 >>zrq¹gú5¯yͿ̃™€@CçvO ÛQÆãŒdÙï²™v\5ñàEé 7ÄA‡ ÏÀßs/2t+íµNnÜ9ÀsŽŒ:‚õ¡›'òI¹C—äöÝY™–B¨>‡>dÊatxeì-cnj,øU¶(ÄP[0éu`Ó¯YD0°"Ìa° 6@çD‡Caf€AÄ0H¬.};¹#ê u1OÑœƒ³¼–nBÐMÚ:·¹ÓtƒÜ~Û ŽÙ ÅNL’tסô»Ëƒ]e ÌRHŒbB¸Q yÍ!á4ÞP«4j4½ÁÜZ,ü¤¸sµs¬¡¡”]º #–Œ¯KQK@¹gú_Nȯr00hH‘¡"‹Èž@„&ÎÐA†pÉ+1fãi$ùIÄðÔ8m•ù€ó(öÃkž{Ö|Ò ŽGúÑ,ç  á˜ô’€Þô¤nmæÞׂ¬Ã« Ì<+ S’½é¤épA‘=À¢»Ã-˜p¬Ž×4zœ8tÅFz‘Ï߇uQï@"–Cˆ5·©<(”³?c£üçìÑ3ûEò¬UÑIÒ!` tÈœ{èþÖré±;†AnŽn¢–ý>´;Ä"ºFµ¿¯4Öø{ŽA§¹ö±~ûUéÚ ¥ëÍÀ˜ÃÄŽqÞ¨ÿÎÛ¿ac Óå*ëÐI&€ÞWÂÒRX"äZˆ½{,F“®ŠOfj;7FŸ_4xöœîA€sΞ…ÿÓ··À¤Y°i„3mýšw†`ƒ§ƒ†èÒ r¾èYƒ3_çÚ3j1´Æ\ap„ÿSîÑíËÑM¡ó‹@-Ø´w1‘ß±¹H÷R1Îà& ë™\wž˜²OÒþ3À‡;f=¢b6ˆn&šQæn¢ÐanÀ‡>Ò`tô‹X­\‡|ÃBUJçL92æ°$3Ø^nr!,42û§åõ ÚX1jäÖF7À3çœ;ö£HJã¾ P¼æ ,àŽ ˜y;W4ÿÚÊÐw"¶Ë÷)ïPF”<+¹9ÜR –>œ+­& ŒÂ±ŠMÁž;Bd«wˆ »E V¹Ì@Π%‹`=÷,Úq8¬¯öy’b× !(``qlD6Øÿ9j;—GŸ´[zÌ­ ~ G!æCìEî.ƒK?6j Ln#@#ŒZ'”eìž-V‹RÈwŠn$ÃÑÕç"£& K`èü©ð¢šÉ‚ Cþ¸géÖÈl^V”0Á‹œEÝŽ±é¨EÉ=ÃXgwg5öãtNCV@çëubÌ3ÿ>t‚@™zO!(ìøeáö¯•€MÀPpÜøÀ· žG;  ,‘öæ(‡}k8wAƒEmžÅE€î8î œt—´ôAû…ˆ˜E6½¢ƒe$p¦Ìµ!†Ø1¬KŠŒAû?ÄÝÔ““†¬ã$–ÿì¢P8‚³dÐ¥ý]äG&,@´öÏ;ÇäÖ(ýÿ"ýÁÅ!‚W8L† C÷ìÜ™4ä¼ÀÒwàA3GìÌ\øñ ™‘:BgwÚ }Ít‘¢ƒ´ðŽpooÐäzNì7ÑK-í/-f¼3$ÙxæV†E+ÿ“ûÿ?•  ÷Ïú|‹¡àŒm„3Ö,/ øAƒØû¡Ã0¯`\™Z£U ýRcèص Óåà<#晳|o©ÇeÞbMvdÎÅ.}HpfJà o¡|¨ ¤”„K©“X ¤¥ß¿+:ɧµt´ðv íË Ù\s- Û ‰ìYŒ`2–ósÔáWÖváh=»ìSΞY«_¤K@&×jeH°°=\=N¾hAD"P'»ë ÜþÒ-Ë¡ÃÌ´¬ÛÒÎ@™zo Õ,Hg0—U¿QÕH5Á`îÙóD ¨ÃðÏUÚð*ABñ àÐB¤?ºjArpž°®¢|,\o«¹6rr´ìÑÒåèD0æèûw¯®â œk4Ä'†ÁBغ|-€ƒJN˜\î¤Ê†ãŠÂÐ`ŽñéÞÍáØ4y6ÍiláâˆÛW‹ÎXé"ĹþrV+E‰-Q(:G*FŠaN€çgN~gÎÀY³˜ -MÀ,m<t.@ï-@g•9}£Å ó&åÀ‰0G§€a Ò9ƒnø¡eýWÙ >òÈG׉[E$,zFÀŒ(º> Y ³¨ñ^†ÖeÌNÍQÀŸ`"ìË6 Üaõ¹t/•¾Ï¤ÙwŽ0w~ôRŽZʧá¡Ä¢gp‡èÊy€…`ÔËØ<§Ì.«œU¯òœ,_-\£òY Ò&þâá¥ÒȦ¥› 0Ì~(î T ÝeZÝ @ªÓyåœ:ÉÐ{ ùFŠ¢µ Þ“†Âÿr_üÕø!ùm;k':q’@§]¨¹ixŽ|Š„6*ÀZ°jK’A‡0¯·†6ä›"Çô H2ªp±Lο”Cê°Ø§â¹â=§Ž‘ ¶\uŠáªŸ’ö~Ž.ï‡Fž¹98ÆG³¸6&'¯ Ê>'“(u/7®¯嘮¼ƒf芮šgI¯d=“{-ÁÙuœ\t n³¤œ5$ßþÐI&€¾‰«Ç áƒFŽ7áki4ÚþÕ-ûÖ†ÙÉ•@Q¸8þ¿ö¾.毢ê÷·ö¿X@-`IÎ[±hù2Q¢'ÑÄå ’Db¢õ¦M$ ^Ô`„%•øQ¢L%­‰Mâ1èG=D=õUà¡BûÚcÅm)Ïœ‹½gf­5kÍÞÿÇ>R|f5Ógýg­Y{æ7k¯Y3£}Ðn{$³Î”:FAhWÿûlZ¹.Æç:’@€´ôÀ ™õIþɰ³7‘?½CϦ#¾Û¢=8eõ ‹`¥…ùÙ­7ÐVô°ze”‹#n”ö»]E OÀË€ÅÀ‡7zM)×F¾V~= ‘¸‹#ôðk¾>ÿrI4 wîÚ(õ?£Ò’îŸó:@9¤»Ò©ôÜD£Þù²6dùXÙˆ¢4h"9`H€.fz m6wst½‹ƒ[ÌÚÍÿ¦ûDèð ×FÀœ×¯ˆ3ã´kíõ)€ã{žM—ŽcP³±“edÝñÀBnÕ‘RTò?k¯êà"È>–Ayùk…âñàæà!ŽÅ¤‡†þ‡Emˆ1hî"j,ÍzP.ó f`0öå¸ÅœÁ˜Gqhõç\¿ò©fAgj=/ ²] _²ŽÅU*ŸˆkãJŸ3ÿäÖ~PÐÁàUûªU`,hÊVtæÔ-¿Ö[¬‹ÑjNQÝño޹Õ±a-eEëM^?‹ëü¬"Jò÷XIE‘„ ^Ã& 3«ó gûØÀ”ÜW ½jø;€óâªÒ­?ÎØ¡Œ(ó—YYÂL>ªµ,ý-ÉåC¬»äÞ`n¦ÀŽUÊÕκÚZSè9‰@ûéB Ò o OeùððLï‡ùÔV@lBŽ85cJNÌÅ!AÙ¶¤óq/Å"ûþ6Á8m¾ pŸ…Øð–«Äh—Á¸(p ½å±OÛeZe>ý‘€sáÒðÜì( šfA}Ž„Á²¢ãŽèìZ¦."kAk6^¶ K;f=ÏâD¡BÍ µ‹#}¹ð¯99ËŠ¤á–vgê2v†Z–•K  ç¥hA[mP›¥ÿã§6ÿYhÌ ‹É)ÙÊ~è 92¹Äf²Ë]à¸X϶|ì.â꙽­w"8s.™«©ÎQÖâGÙrõ¾_Ž…Ú^´^OÞ@<®¸ÑÕûìÐÀÍÒŒ[Ð œ;€ou%Ÿ“Öö i«Ú@ƒ›!—uЭ´¬£Öc=`/9ð²ðŠz’~ѯ½9Léâø4ÇœµµlŸK°¶¾FxËh4€^ 듺Uÿ¥ýBomΊà}0Dø IDATo%ƒEíÅ,ž°ˆŽa—oæ¹i{]Øõ”Aúyð0L×F$ ¶Ë” C±Ç™Þò…–Lù 1Cߺ“÷†ß¤u±¡QH ÅŽ#h'Ë;`‘¢qÿs`̺ëëK¯»^b-ÇÉžÛˆGU tñņwdXÓl¿ÿŒK·ìŠ­ßÓ ¦ÐíÛ·[·nÅêÕ«qøðaÜ~ûí8á„~óÑÑ:Ù¦à¥çâ!´§]fã`•œœRúEã1ÿà råÓµ_/VŸ?QKÇ · ûéÔyW¾\6 Èý5ù®€Û‘1(Yù}Ò ›,¨l©é^Šš•L•{CŠS1% eëÙlfM÷Ñ!{ð)` ÍÊÕg]0…Ô†ü*ˆñuð·7°I¯‹ØÅ20 $Þ…¨O}к;Ír5xδâz÷îÝØ²e‹¸¶yóflÚ´ ¿ùÍopèС Î'¶Ú0•F,Ø_n¸Ñ@2RTd‚³q­[¬XÍ$Q­hʰ ¥/ºO/ð|ˆç©yXÄÀÛIb@ÐJ0ëd„¸ßô 9(”@Íß‹Ñ+G'¾þ–ïл0ÄëÊçiâP'ÝÑÙ õÔ«!*Ð+_H ¸`M¨‹áØðD3õu¶ëJ×Ò T Ø Í…Ø%V^zƒèD+ 7lØ€»ï¾»¸~ß}÷áŽ;îÀ¶mÛÄõðÌÓ8ºðCàpÂËÎÁ Ý9¢av³üU«1RXzçTÖç4qè$XÓ ²%p3Þ­ó”Ö«Î]‚uá‡&iQç ¥Oƒ]>â/é‡,v€9¦Y4b㥑ÂIL ó>É;$ÿ³éiòqvNƒEº8hÉ@:Øþç,q`j處Ë• \̯d¸ë[ÎWõ.VuÈÁ(ˆÁ)²; `I¡‰ð‡çöãÏ=à0žG‹'V*­x€¶è±ÇÃÆ±qãF\uÕU¸öÚkqÖYgf'¯Á+Þð?§k˜Ý  E P§˜Ú‰ÄÚj^Å®17Gì¡’i$K€È•40ûV4·¤sÆ‚ §²A2°3š&5Cö?è‹ìl&Àjƒ…º‡Ð¸(ÎJç¹£Ü%,ueXÏýL>¹Ž_t"”ÝT>Ï@ a%h˜ÞUõÆDÐ*¼;»;T'™åÍçoâÜկƹ«_à~ôÌR¬LjmÐÙgŸ¿üå/æ=B?Ùqgyjàîê0œ :&Wƒ÷Ö—¤+ @òÁ/6ÒM˜ ¹Øà¼ ý¾#:Ïq뉯`, e ªõϺ 3è²x ìƒt¹†ÅˆPÃç¡°–c uÀó|K©§PÄV0뙀.²ö³d&åâ«P[ˆ ÇšfŦ¡_Ê¡óØH[>øï Ï\Y-:Qè9‰@0­¥Ð/ X mhúq¦¤,¦Þ7w‹ÖàìøŸ…“!ã«]œýã¥í‚5ÅÙÌÃ$ë!îV€– ¨Ï˜I5¤s—Kƒ„:y–´”#‚Âæ‡a¢Šð7JNÌv*NC f=ɾ* ïG~Mù“¬¹ {;’–³vy(ÄÉ4DÀªYô7sç õö»þHˆƒW'8ú/i…Rè9‰tƒÁœpÝX’«!åŒØAj~§ºj`æVµÔÝ’–ÉHŠ'ï 7öSnEK.ÊåAýs)Bu$ ZèÑè‰ÙØR€±uOLõf¦¼Òñ²ópÒåüW¯9N˜a˜è0ö …]>ÅÍ:þhAõ"D™· õn‚4ŸdÓ@蹉˜é/IåƒÖÞ ªM¤”n`ZÐC Û`‘Å”sQ’ÄœÙSЃ„¨à¨—m à£ò]bæL™Wuë­á¤ÂJ½Vјí3ŸÚ+¨kq&¡âš6FÌ"Hƒ§"£Ü^ûlú}²c§m¯åçXÏ !®9D6’«~ñÚ óU3±&”HÖûÈÚ´œÝL× Ÿ5€ž“â<aÐ*c7zRŤ²¹÷™¹£XB3à…ó»fÝC¨[^‡ì‹ôð~Y$] šTÛw*^Rèòƒ¾€#Á?ÿc¬a^ l)€öE³ æÑ‘J€MHÒÇwDÚ;F‹ÚR¶=@ûq©’Ð4tuPfÕ‘›ìªF4€NÔz 4cmSÖРû1#iS&2*ŸöA§_™á]Ž%-hÏtçn!ƒj׃uYD*–$½ŒqÜTé•Å4Õˆeêàƒ„Ö£ü¥tÓ„PÇ\ÏZŽ}mD¬ÎCV ‡ôŸ’H»8f½‹CWÄƶ5º$Èì8GÑPÎ3@ÏÃáƒf‡YŒJz:o4€ž›:"tÆÂ÷ÄqrVb£[íHŸh«Ùº¦{…a-c´è{Œ H.Ž<›PzÀsò}Ò ÐXÒ“%€q7u”†k±l´*8ÇIMòñ ÊÔ°*ƒ1_¿pwèN¦‹L!v ¬ùìö胶̋¡*ë=gg9»h=7z@p—i° ¡ª‰?‰úzê ”̤]:”AGnhT¹znu_tÙ5:³Yj.v£#}2%)0ämÉ^}s1/-Ñ^€™$œ6Z–1@i?G B^Ô}¶j`üE“J †rm(îÓÿŒ®ôAëïØsËYé5|fÔzN"ê?õE›PƬ´ª[м =ÿ³åƒŽÏ[³ ³I&™³‰*æÂý)YSÀ³EÝ)FöR’ÇÅVVVgâôU>êµ8¦€2—Ø»ã Á{ÙEœ³!oÑ‘&r,éáºýZå´¡­Î¥S°Ÿ9Ö¶5ä;h¥†S‘üå™ê41wÇð·t¢ÐsRÚP…»9” Q¸8`TP£–‘ªª[³ …šµ üÊ¥ÿˤ×áà¾h ûÅ8<€XÃByÒqОõ¬YMbXó%D=²¨. Ù!•~èÙð¿-Z ¢Y‘<.<,b‡Ü‰†;†¸»ŽÅx¸l¨ôœDfFtj ÑÅa„$0aq9¼ +‘aéEÕ2¨†H(ƒ|ܲškÖôl²›$+\%z ¤+€]‹â¨Kã b ä!îÀ¼ÀÅàËŸ˜gÇ‚µc÷Jùˉ* ˆCÅ!ÚÐDLUUŠ´òêXZ[‰ †±~ZG¦ÐsRuª÷—M ,š YwbÆ68ñ†}+/”=F¥xYCaMÄÄ“re» Ú6ŠJÆü—Æ€Zë<4ÓŽ%…ÒRšáŽ9`å 4R[{Ãz}¢L^H] Æú^^ÉNº½¼¥Eí%x–EvqÓù 6 ½³“<ƒºQèy‰º˜q=œ§ÕìÈ­ë ©85YE›éT ´Îž ÏÁyÌrVÅÅlJ$ìJ@fÇÄýë Õøh œ5«A㦠al+—dNz1Î@9pk eÚ¯IKZfÏZ[ËLŠ_‡Ô±b‘ÝG±ìâ\€²?Ù Ñ-&ï¼v±2©ôœDD½‹ÃB²¡ÆÎfõ6iÕÁíýJ™ºyXsÌ…µŠŸºŒªÕl7îÄÄðœÎ…³Ö0e³;–â#Bë}øZá[+yàÌA¹N¤þïœp†AÀÚ”no\`$o˜]³¤¤ªâÇššÿ™_+5QumØ‚ô+ÙuÅ÷[®+ªÈ’s`ëqÈn2&j.ŽD  ç%BáâˆctÜ‚.Â^I72_yâ³€GÆ|° ­VáÂR¹‡l‹¾Edlœ‹AŽ•=?ZŒ•:ÂÄ¥0l@¨ƒ´ì8lÀÈ môcM@1 ØIV9ˆ¡„K¤ûlú¥’¢l½™ÂZ®h¡˜Ð§ëY„]‡4[¶¶G7½úöu‡[WW&5€ž“Hkq˜Fíp­¶E ¨Ž.ZGpV­ƒÛO:ÔNO™!£8fN¾å­7Þ0=ÛÕg£Ðì1ó#¢" $ÔX`¥¥Šš0&Pk´b(åÉêZ±Õ ÝgËJ*üÏeOau&±‡J¤­= =ý§Ì"3欴͂NÔzNÊavpMKÓ‚æyîg\Ú’^˜Fp†T©ETÀÙpwhp®]h.Á4p®4Ñ8{Âð°Æ)‘mJ»ôLçVl™fAZ]·&¦h©´„yÉ#îÂÈuÁŽîØ/½wàøŸ™ÎãÄI¾þ†Ðyð£¯W3‚cøº Нâ‡CYT¥gάás¢ÐýøÇ?Æ9眃ûï¿_\'ÀwqpCö…á2•—çeWF^Y};6›îlz¦»Þb\ÐÔÀL[ÎFŸ„€üùÙ­!ŠƒÔëhá¨bª‹Ãâlƒ´–ÓÒÊæÝ±–€ÚˆYùx ¯9û^ûåþƒ¥¢B!Œ,óX$ºläÆÉ5˜@mêÞÜÂ…¥æâH´âzÆ Â…wÞy':„«¯¾?ü0î¹ç\|ñÅ€çþqÿõ¼ê\œrÊy%ZÍf]W¬‡VeÕ Ž5SF­å$©bó‡£Zd‡†ò©ðÈЀw ¬5@· 8-¸æ’;2=DD«–jkA[¯tñ4Õ§ÿäU5@ËØç±èž“Ql–< ZÄ@Er E·ø?rð¿ðèÁÝŽâÐsÏ”ÊY¡´âÚ¢7bãÆ€………ΰúkðºÿñà€ÃCÒíP‰ÝJ ˆ:ZVWκÊ;ÖsŠñƒˆê”o)ΫÉè>ººô?×A0èxÝjñ@YnV÷`éa¼‡ Ðdù -y !B>W%ÁÙÐ7fÙÇA{ûNéáÐéXäá¼¶üµ5b¾}åW9ï´×à¼ÓÖ8Œ»öþÊVÊ ¤Ð#t×]w×:Þðø|ÖN¢š·O¦Çƹg£Ñ‰hnAƒá;Ma$Xú íƒ3· ëÖ3Œs%Jì—ª½;tmáa ˾j 8)tùýpGÍÓP¤ú¤”tN¥:gfþî)ùWbêºXI^võ>üå‹õ{‰‚ýsA…_Å©+˜@ÏI:Š£ÀJ›[´O†—nu¤h…Âx2"X*“Ée ­Ùˆýo?¦mc«kÈ«ª­ÍÿÚÊðö,(¬ÓhA«¸s¦ ŽKÒz×ÂqSr8ö|ЪFpV§–)s¯ù ó[æ[Ñõ†‡×‘=pg´bÜë»6%f86ææÔF'j='‰Õìy…\"Ì%^Ú™GÃÆ9ÝXPÉ‘ÊhÅ_´0eÌ‚ŽÜ_`¿œßÍ¡Š ¶À:†ÂÈÑ>IœûwlpŽï€$sO>³—$ÌÇAK`tŠ^H])H}¢Jþ[éÞ‚¦jø·è‹ º¤3lƒ„‰@ÏIB7 ­;›p°2(zéh8Š:i€ÃØìÂà|aç8/i­øÀ6¶&G´æ¢œ|.b­wàÌíela? #5 Õ:Ú”P)hæq·>/DË+² î$«[à2–哊ðÃí¸6`ó7˜›ÅYXKúu¬?òWí#ưás¦ÐK êTïhÈj Z%AUpæhU³a9ZÙ`§ñP3övÒže›»éµ4Bž žâe˜.…F'ÎØà`Mõvè]¤ï_%1:è'Ë”šƒ²¡sËŠ¦Ø'ñbNÔ}uVL¡÷F@è¹)ÅA×Ѫ_r4¤õCÉŠˆç|°(Þ!ñD^‡ªQqtrÕ} Eý/‚ÿ* ,zÙ'j='õõ”jH•ÚmoYHë3p‚'ò¦ªHXêHØ/Ø4Ôqº ÏêØX‹ƒ6I—ÖÈPp a5HÓP\*µ3¯@ÿŽì¾cboa9ÀMAÔÀ ‘¤Ž-pÎRèÝÔ­E’l›6YÐF‡NAÕuêȳ#ÕAj™sÉÈœ¤¢„h>ŽD  ç¤4HèáäPs­±#$̺hZáŒu†gºž?Wdï0j½Þê*4"Mµ¤‘Ëgáø°ž:Hã$Ä~º"€žÆh ÁÀ™ƒ_â¯8œ%ÜJ€Î{BjJÀÞMÅx-z-h¾Ý•HÆG„ùÖ«S™Bh=7Ãìô_¶t72›0åçVFÝ2¬çtGÒ]]ÅG2O}Œ´ ó¶WCaGY‚LéÌb{a­ø%÷âͨë–ÞI2/ú§JÈ#*ïž"@×ßC0£8|Ë”Z+D7¨óh Á|s¬&(ÝƓ͂NÔz^¢ |ÔV†Y©ÒÿÉJì„Ùîÿ4<ã‚Ûb(ýÏo9TØjÑ‚.×{ð»§¢ z@a¡®ú«KòŠê±(©C£ÐHŒâH̹5M&F:ŒÙc5׆Ö÷¬b=—ŒCt©åÿÜ¢®ø¡z•c¢Á4,‹L# '5pæÔzNJavFÆÕì:»™‰Ê*YÂ妸¡Ó  5#â'uH*¹KX(#vkPi€µ÷Xœ¹=f9×TÁu`Ëé€4uH[¸s½{t»t(‡‰µ ä{ a*þÆõ/—´­ŸŒ0;‚1C£.¦žúÑÄî)Fjt¦Ðs’ðA;8]^…•š\Ô±Ò³RˆÚBÔ:»‚«Ò.ŠÚ?£{-¹Q\b%wQ•L}k/C -u—>èþ¯?‡r8[GYçú»¬—HMJrÖßCï…¶‡m-H×v¹*²RPŠ¥qß[þzŠ‹#q-L²êx# ôÜD@vq8 ö$œ8»mÒªvœQÍ’æ¦{‡¤Gê¾ø´&•UÉ]ÓOÕ R ᎖åäNÿ&©ë)a«¢|:OžÐ9³w0ÏZ§Š]  Ì€-ŸHâ+AGG/œâ›Q†¬z™kASýÍ ®ck›6|NÔzNqÐÖ—%ÃPPaÙ“6À¯â.)ö¢¹TL÷˜·#ˆe)‰½ çl—4Û{’a½ü"›XÔ‘ˆ)Ý„PwAcúg¹{k&æÆG*¹Xòdh•ïFvˆ60×wòVB b¦ÚéÅHõíDzz¯L"4˜4„ŽÔzN" Œâ00RlHö€×0Aæ ¡‰Tq=nE;ÌS£<ô`ÉÚ“°è)fdBˆ2&*aÊÍÌç¤T€á•wÁW²3Á˜&1—ð©'7iøÕeš´«Ë0ˆXévv€¹SÛ!†0­¤´Ðð9Qèy‰Öâ0¿(£­?»Y…Tf×Ä‘ùYA¯ÔSÂAè—(®àI‰ÒZ*ÃC$ù-ÒJÒ‚ð¯•N^ªá¡ÍÙ“OÿªSS©;„¦]/r¦i›†åï§žISF `üåžoç1õâCì Yû» CÒû»×ÞJCgN  ç$R´[Í̧k, v§ºÍµ‘<´ÒY»<¥\äZÕ¥­›¬UZ’‡Fz½ÄpÃì4è✋Ym5Æú}0浞¡ÚcHþöœR/[6I°Öà®wSÒó­•bg•¦Ô3€ö€¹ŠpŸØ¯Å‚T€ÐK"=Hè­aÄ-/àj´âFr€A4 ålPë'm´Æ‰ÉWw´èTÆA÷阬Éaõ ñeÕÀlÏŠ´gÜB(¯ä”u=Ê8”Ì1L£žƒ3‰5/:t¦Rl!¤ÓD©¿’ô"~£[0Öçæ(ŠL ™4JÔzNëAÆ+?¯ î§ë&PP"R^4ɲk@‹d´Æ"ŽÞÛmµÜ ¶hRÖ'6/»j·,º]\öµ2¤µ4þôâ/YÏ&Py•#×jb…cË‹Zžìê¢$¢K0Ǥ7I·bñ+U¬ dÊ«§›¨ôœ+a 4hðEêmj–×Éå#ËQ÷ ÄZñxÊJgµ"æ¿z¢ÊTÖæ_æÚÄÔ0;‡«q‡ýJ/F!P˜2"qÿó®;•@¯—Ì¡µ¬få6WAÉ6>4‰“t/Í‚ dûCÔê9/Kð€9 `Џ"©ôœÔ·E¿ œ\´- Àn*7kPi!¯bìZÐŽ °+9*ÉâpTâ²J¯4Qc¤õM%8hœÔY:\ÕÕ„Vm8ŸIH§ìKß7 ÿé<³è’:^™¶dOz9 Ò q²)\äWpg ­µÈÓfA'j½´g©F¬d—jûJbOÖfix=C’G1€Rù1/ÄKGx©di3[*Šk© ÔiÐxÄé:Ô¡Qh ¾ätyJçH¦Vœå:ËûFJ¥•cb¯±Û90Ü‚®q7.WE®½d¨{@;´}ûvüâ¿ÀÉ'ŸŒë¯¿k×®0T4Va‹Ooþ9ØUƒÊjj“ñëÚÊv0µÍ"OMƒ®iÑ×ÎØõQAŠý©TnzaŠƒt]î¤*u&5•vq設yŸZ¹ùO¦.ªöòêe~0Pù3Æ*SPw8ÓæâH´âz÷îÝØ²e‹¸vÁàÄOÄ-·Ü‚;wbçθüòËû›ÄºâiHŸÞ˜¶ÇuÑ–‹Vun!Bì†'µž*K%GlæXè4+ä«¥’_1G²›gÁ~Ÿ¦Ê®4ÀAW+E£kYê¹$èØ0à¢rv”òÙ(¼ß$‡ÉëV–…{ƒÆ8uÌ9é'¦¿©•D+ 7lØ€»ï¾[\{òÉ'ñàƒÖ®]‹‡z(Ý{æéCøÏûþððßÎ8ÿñç¹ß{F’ Êõ*Éžš2iEŽ}~ÛœÄ5?yËŽAäˆÖmÛÃÝLcð4ÂÕ!O×윇1Œ”¹ÅQê»ç¬-ç²g°Þ‡5Æ“±X¬?%WS÷ܺ6·vËÌÙÿùx‡ž9ì)hÅÑŠh‹Î<óL¼îu¯ÃÇ>ö18p·Ýv[ºwÒ+OÁ¿ðRàYôé(RåÕµv{ûíÙ IDATlMhÄ¿¬æÊJìA‹j Â)Î@c”qÉKsÔܽ†Ù'Ï„Ô ™Ú¼«^Aßy”+YØW§ C(WÔÉÙ(V½sŸc)ZÐä¸7ª`lP±ÁIdÅÔ݈Â0máÀü¼u¯Ãyë^ à(~ðÛÿ=Iî•@  ú¾`^'ÀƒÖ8i4&œ÷kଘi°N&%+ÆNmKwÍ4 Ú˵Â\ý¤ß8×fÌ? ð0Š*¹Çø”ƒ6#‹]YÖ¿‹…£‰ü˜¯Ñ~¹Ñ)´œŠÝ¼‡ÃI˜ÕÊZnÄ 7‹¬×‚¶˜WªÇJ£ÐsR¬¤&BÞk_äWçf§b%uÊÅá66’,KRKÇað’N› ¡Á‚Ê[5†,Y+«ÕPJcËEÆX€â2¶‡…Tqh£.ðǽˆrnAë’‡à a–Ù¸è®ÐÄâ ÇA³UÃC?Ó¨ôœD± Y+J{åQ½íæœå¹hVµ¡uáøžââ /™µfÄ!ª´ §B¥Qn A'0_Ê‚ýгÃÔ@û '0u™gç‚£‘JÑõ»ïßò=9YïßHb†!«Z™óøÈ¥mÄ«‹Bû²­`j½"¢ñM¶ æ§w‘¨„,Ɖý­!ÕÀ,5Ò‘9æ>B ÎóøDûã¹ÌHŸ·%§Té«f®¥S˜Z¨EeŸTsÔ ¦Th“¹ÏŽƒ¡®xùx®)Þ–ªxœ…ž|•‚*?4/T)AM·€Ðs“pqøm¤¯Èà°ª é3‚zÚC*… .Sª  äð¸Z6²ôA[àL:Ìm”*Ž—jA×Kl•<¢ë‰Ç>4CqMÏïó¹öÙg³^‡Ã ”/¾ð8X0n8c¥ž ®A3S ÇGW5€ž“†‹Ã²˜˜‹£ÀÊyÕ±r( À¸xhųÔ,ŠË$8§²WŠLÆ•)𘮩âÒ„¢[´WtÍÄ•˜ ÇAåd§xsL”º¨ád†]=8hG(™¥÷áR±É¶ÏÜŽâPǰ]ìÎEƒaèD  —@fŒ=³æøñ”¥l&úÀj9FäÅÔ:„ö°’ýÐFMîÙª›ŠPê¾…#Þ,u>e-OnŎɬ5Q<Ù<×FbÆùEwRt`t.#™B!@É”¬¢;/|Ò²®TfWP°äšÔ2V5€ž“¢ÁTÅÉX™É®¼ñçÖßÄg*¹ÿYëø¾ÈW#Œs&£­´Yv>4 âÎÐZ6œq$$L^U­àîŽ[•¿,¬VnA×>,ÆŠMÕXŸâ0,ÁŽ. Â¥@…,b“m»è¹¸†mÛ ÿ¶d0ZB‹âHÔz ä.c«j¬ñf¯ôŒâ8n´é7ײyÔ,蘨ÌN—OOÅÊ€Ú"=V2ÍOc‘…5*±`Lß š&›ìö®*w¿È|uA­}YùÒ{pÌJ^‘õ× °‹M¶]”®ð­Lyc+‹@ÏI”ëAë-;•„´LPVGÙ|X úœ1%ÊÆ Æ­‡3Œ‚Îyµ ô~õçüœG;´¢ÍBU§/•¨_­o£èÄxÊLQZó¦þ™í1æ/uàÉÒÈwÐ1 ЋRq^=búŽEÓ¿Q­,.½*(©Bø¤ù‹OT®ª{j='†AÂxâ%ã“0µÝá/T6>S•y1W]÷V´ÓyŠëŪˆ¤þJÛ-Zеæ+sËIsuŠj=&g/<J.vQó‰¶:Íó!¥™Æ54so["þ]»6•÷‚¥oõ¨^dnlù ,S¿S-_sq$j½Ò•X ¯ÔÆ J¥:œˆ1Õ×-Æ\SÕ ÜÇ$#Ûy"8Ô1-×UtpÒÀC°Ç¬¬ê4¦ÀA®ëÑïþq"vTyÃàoaÒÄ”*/¿ØVÈwÕåN¶‚Aë¼E­j='S½½d¸8jyŽpEY+ˆe­Å±À˜Ûš‹\›Sæ•Q±Fƒz¬"Àä%/½ršLF˜Æ4eE,#û\Ür6¡[tá®ÉÚ—£/·9:RP7k‰ùXªí—lDPœ§`%ç¼8·9NÂøhðìH-…äë)c&°™YÙ)–ž\åOùzм¢I™ìØgï]Er®g=Óh|ñÆI)ÄRºµbÅQè9‰à þG±ògLult8Žk¨Ä,h/Šƒg]áè—Ü)ýj7ƒ‘þ;’¬þHƒu¥È†#¤÷®_´S&Uäž‚8/®~¹ún­Ç%èZôûNqy‘l][W£B"#ó‡+’@ÏIt½ ,ð²Lá+nòn1ŠVi¨s‚…QÒ¹àÊ· ­Ú¥-Šl¨Àbì¹8,®ÖßJ€14µ²(8Σë€4èzlTÒ׳yU1Õ®¾æÉ¨ƒ…ªEV TI[G¢ÐK Î©WV[ñ,h/K²Ð´‚V©%·­,nSà©l¤åY½´NÉ=¦Ž æ—ŠST_×óè™i`.çwÝ«%°Sô@F#¹õdÎ4˜¿6¸ë¬Ó1׃ö <½5¬4j='Eõ¢¶¢kM(«%w8(&V3émÙQlq²Öœ­Gj›É.-ÌÎ ëg*Ôæ éŸêãq¦š±fß-ŠIÅ¡­ëÀŽ­âO)©ÿ²M‘ØãÅ‚ý¼ß™±™þ’̶`fMAç:m ôüD ú§*kua*í¤â¡ôO­sÎÓl\.'8¦‚ËÝZjrÏk.åÖw,æÆµ1ùjŧòv¼2òv±g3޾]&G츘>‡žâ9<-Ù&ýrEQè9‰€ñ0;>fWiñ’Ú˜¤÷Êkñªé¸?#yM‘˜…[áföMðA[dãdcFÍÄøÜŠV,i|9˜¼Á*ƒhЏVü)lu:ª3´mpdËÕ®t6Ãøª…RfV%#¿d¦l+˜@/ˆ÷þ5$ˆŸ„TÿÆ*2?K>í{ ™Œûµv:ž¦<1 .]uXíyBQ­b>AÆ5¡ów{1¾Ågiz²ž}2×Íx“ô,Ù\õþ„òL·€†ÎœºñGV&]qÅøÄ'>~ðƒØ·o_ºNöþa!MBI+Nz‰=ÓÛdÇÂÞGí ,F]Êa:"ÄÂ#{Òq Êýl¶.YIâØž…G+ ½’¬û#Å}|Ϩîçdлº¶°{Ða|)ÌÄHI3–NÇÿíYxr‰¿F¢yEÝ«théÓ½×YI3Ìú>tøÿ\ãý7¢Ðýõ¯Å‘#Gðµ¯} ]txàqïc >NiÏs`eJ {U•†ÅÆ‘jià Ù+Î5K¨å×ê``]Ý»ð˜‡Þõ²-OJ»÷.,çdÂÂ{'¿Ü¬Á„~--ï]Øc\íXÎó']Íâùž= ¦j@·2í^âà?@GZñ.ŽÝ»wcË–-âÚæÍ›Ñu>ô¡áñÇÇ]wÝ•îñº%Ȭtp./‰¼"H¤&65}©&¯¸Ø¥#ïñZ*3ö©~†[?©€€/ÏðS²%’™[B,…1Iµ÷Páïé¸ ¾€ÿ«%36Rú8ƒ²&Ì(,õ<¡î6Páÿxó‹-ÈñD»víÂÎ;ñå/?üáñÈ#àãÿ8à­o}+V­Z…“O>§œr N9å”e•åàÁƒËΣñj¼^l^ÄÁƒþóŸñ»ßýnÙx½”¨´A‡Æ•W^‰3Î8{öìÁM7Ý„7¼á /¶X5ZaÔz tÅW`Íš5øÓŸþ„¯ýëX·nݲñÚ¾};~ñ‹_àä“OÆõ×_µk×./øüç?ûï¿wß}÷²ñØ·o¶nÝŠÕ«WãðáøýöÛq 'S‡Ƈ?üa¬Y³§v¾øÅ/Óü9ýä'?Áw¿û]<ÿüó8ûì³qýõ×//xþùçñÞ÷¾ï|ç;ñ©O}jÙø„ðéOO=õÖ­[‡o¼qÙxýéOÂ'>ñ ¼úÕ¯ÆÓO?Ûo¿}Ùx½”¨ ÎIcˆÇ’öïß;vàe/{º®Ãš5k–üøÇ?Æ9眳¬<`ݺuؾ};¶mÛ†ÓO? ÇœÇwÜ÷½ï}ضmžzê)<ùä“ÇœG¤w½ë]øæ7¿‰íÛ·ã§?ýé²ñ‰ô•¯|ïÿû—Ï÷¿ÿ}<ú裘Íf8í´Ó–•×<€ /¼_ûÚ×ðì³Ï&wÇJ§?HX£y5¯ .¸'žx"n¹åìܹ;wîÄå—_¾,¼6mÚ„_ÿú׸ùæ›ñíoûŸæQãµyóflÚ´ ¿ùÍopèÐ!œþùÇŒ_¤½{÷â /¼öµ¯Åž={pæ™gs>œ¶oߎË.»lYyüìg?Ãé§ŸŽsÏ=XV^ xË[Þ‚ë®»ýèG±{÷nlذaYx½óïÄ{Þóüüç?Gá_æ[?Þ©t…6lØP|êïÚµ »víJˆÛ·oOˆÇš×“O>‰|°víZ<ôÐCÿ4×wÞ‰C‡áꫯÆÃ?Œ{î¹_|ñ²ð€ûî»wÜq¶mÛöOó°hýúõxâ‰'ðö·¿O<ñÖ¯_¿,|"Ý|óÍX½zõ1© 5ºçž{pøðaüèG?Âþýûñ|gŸ}ö²ðZ¿~=žyæ}ýûÛßþ¶,|`ÇŽغu+.¹ä\wÝuøío‹7½éMËÆï¥BÍ='ý«?ýéOãoû8€Ûn»mÙ}ÐpÉ%—³/‹{ì1¼ímoÃÆ×^{-Î:ë¬cÊãðáÃøÈG>‚SO=¯|å+ñ¥/}é˜æÏé;ßù>ó™Ïࢋ.Âl6í·Þºl¼"ýìg?Ã/ùK|ò“Ÿ\6GŽÁG>ò¼êU¯ÂóÏ?o|ãËÆë÷¿ÿ=>ûÙÏbýúõØ·o¾õ­oᤓNZ6~/jݨQ£FÇ)µAÂF5:N©t£F§ÔºÑK–~úÓŸâïx®ºê*|àÀ?Œ5öîÝ‹Ï~ö³æï?ö±áèÑ£Ë-f£FK¦Ð^²DD¸ì²ËpË-·àõ¯=~õ«_᪫®Âµ×^‹›nº pË-·àòË/Çpà 7`ëÖ­8ãŒ3päÈ\rÉ%øÞ÷¾÷"—¢Q#Ÿ@7zÉR?øÁpùå—ãç?ÿ9n½õVœ~úéxÅ+^G}Ï=÷|ðAœyæ™X»v->÷¹ÏáÙgŸÅŽ;pÒI'á‚ .À½÷Þûb£Q#—Zt£—,.½ôR|êSŸÂ•W^‰?þñ¸òÊ+ñš×¼&=³¸¸˜Ž¿úÕ¯âo|#ÞýîwN<ñDüýïÿ—ËݨÑTjt£ úÜç>‡—¿üå¸úê«ñÉO~×\s àÔSOÅ‘#G°k×.lÛ¶ ?þ8n¸á=z=ôÞüæaÚèø¥Ýèßšî½÷^ìß¿›7o.îÝxã¸òÊ+ñÚ×¾öE¬Q£qjt£kºè¢‹ðú׿޼w饗6pnt\S³ 5jÔè8¥fA7jÔ¨ÑqJ  5jÔè8¥Ð5jtœRèF5:N©t£F§ÔºQ£FŽSjݨQ£FÇ)5€nÔ¨Q£ã”@7jÔ¨ÑqJÿDÇúã%ÆIEND®B`‚mpmath-1.0.0/doc/source/plots/besselj_c.py000066400000000000000000000001521316273626600205210ustar00rootroot00000000000000# Bessel function J_n(z) in the complex plane cplot(lambda z: besselj(1,z), [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/besselk.png000066400000000000000000000356241316273626600203700ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíyœTÕ™¿Ÿ[[ï{³7 €ˆ;à‚2‰¢¢Æ J\‰81F4ÑILÆ8‰cœÌ“Œ[ÜÐ`ˆÉˆ#H~ÁÁ]­iè¦Ùz¡÷ê꾿?.Õt÷­íVUW“yŸ|êSÝ·nÝzhÌÛ‡÷{ι†išÿ ‚ ¬â|ZºEA„Þ¸Ò- ‚ „F ´ ‚¢HAP)Ђ Š"ZAQ¤@ ‚ (ŠhAE‘-‚ (R AE ´ ‚¢HAP)Ђ Š"ZAQ¤@ ‚ (ŠhAE‘-‚ (R AE ´ ‚¢HAP)Ђ Š"ZAQ¤@ ‚ (ŠÒzåÊ•œ}öÙÜzë­üå/I·Ž BJQº@»\. 8|ø0Æ K·Ž BJ1LÓ\ œ–n‘H´µµqÉ%—ðÎ;ï¤[E!exÒ- ™™™¸\Gû£Gføðá¸\.LÓdäÈ‘4TU‘³r%ž#8tê©”””ÐÐÐ@NN‡C‡…=¶ló2v·íæÒ±—âns;zoUUÆ ÃmºÙö×mãâé½É>tIõçŠKlÇ ÃÀív§åg .áuvvÒÔÔDcc#­­­lذ!Õ®¦i®5åå—_6o¹åsÆŒæ³Ï>Û}|Ò¤Iö“ׯ7M0ÍË.sü97ýí&“û0—~±Ôñ{üqÓ4M³«³Ë\Á óÃ:¾F²º¨€¸ØQÅÃ4Å%çŸ~ºz¡ôzúôéLŸ>Ýv<;;Û~²Ïg=··;þœ\_.ÍþfÇï-++Àp¸sÝt6v:¾F²º¨€¸ØQÅÄE” Ãaš¦ý`F†õì÷;¾^Ž/€&“ã÷vv-Èî<«@‡ôK=]Ò¸ØQÅÄ%éVè…–zäÈ‘öƒ‰Œ ½GFÐÎGÐ=GøžfÀ¤«µËñu’A¨m¤ q±£ŠˆK8¤@'@ `?˜¦tKKK÷מ"«c¨ á—zº¤q±£Šˆ‹.hY ››CŒtƒ#èx ´×*Ðñô «««»¿ö)Ðõé)Ð=]Ò¸ØQÅÄE´,Ð!ÿA'ÆÑâ7n\÷×éA÷tI7âbG]в@:tÈ~ÐsdBJŠ[åååGÒ<‚îé’nÄÅŽ* .º e.))±4 kâôĉ»¿öyè¨ëp|dÐÓ%݈‹U<@\tAË2$ÈÊ‚ÖVÇ× ö  %$ ".vTñqÑ- tÈ ;âøË¶8 ‹$$ ".vTñqÑ- tعŠYY@‡³C°ÅϺWH˜æ´Ja‹¸ØQÅÄE´,Ð!CB°FÐà¸ÍÑ=Í.Žt¯0Í#h•Âq±£Šˆ‹.hY C†„wNd/ŽžGºGÐ*…-âbG]в@G ÁqÚçöá6ÜÉ[I˜¦´Ja‹¸ØQÅÄE´,ÐCBp\  à ǗW‹#ÔJÂtM³S)l;ªx€¸è‚–:bHqMµËõåÒäor¼]¯°ÀFúFÐ*…-âbG]в@G ã™jçÍ¡Ë좽ÓÙB—ž‡á2ðä{ÒÖƒV)l;ªx€¸è‚–:jHGŽ7(ìpxŠ<ÖžÐÔï ­RØ".vTñqÑ- tÔ0žÕ„qîÇÑ7àèžÉÑúQ´Ja‹¸ØQÅÄE´,ÐÉ !þý8úéœÉ¡RØ".vTñqÑ- tØ0Á48A÷ 8Ò9Z¥°E\ì¨â⢠Zè°!a‚³8Àyîp¤s­RØ".vTñqÑ- t„„™Ö¨¼¡­ÁÑûl!açB«¶ˆ‹U<@\tAË6$L @fPßVïè}}ŽàžÐéhq¨¶ˆ‹U<@\tAË6$L ÅQ”Y@][£÷ÙBÂ4ÞUE¥°E\ì¨â⢠Zèþ ãAÛBÂ4Þ—P¥°E\ì¨â⢠Zè¨!a ´-$LãZ¥°E\ì¨â⢠Zèdo7 ñ·8B­$„ôŒ U [ÄÅŽ* .º eV9$Lç4;•Âq±£Šˆ‹.hY û#$Œ·@‡ Ó1ÍN¥°E\ì¨â⢠Zèþ ‹²¬G¢!a÷4»4Œ U [ÄÅŽ* .º eîíFs}¹¸ u­ÎzÐ}W¦ W†+-=h•Âq±£Šˆ‹.hY Ã†„ ´8\†‹‚ŒÇ#èP‡§ÈC >àxóÿDQ)l;ªx€¸è‚–:lH˜‘†×¬6GsG3±÷CžBf‡IWKW\ñ¢RØ".vTñqÑ- tØÐ0¬6Gœáñ…¡ŽtÍäP)l;ªx€¸è‚–:lHV›#ŽÄW CéÚrT¥°E\ì¨â⢠Zè°!!AÇÑÿ .VqR CéA«¶ˆ‹U<@\tAË6$„£39ÚÚ_78‚v²š0dH˜¦¹Ð*…-âbG]Pº@.½ôR~÷»ßÙŽ‡%Å‹UBéš ­RØ".vTñqÑ¥ ôƒ>ÈôéÓmÇÆ„Øb•8Z!CÂ4õ U [ÄÅŽ* .º l~çw(--å¸ã޳½5$„”íÇ2$LÓ†I*…-âbG]P¶@¿ùæ›lܸ‘'žx‚%K–°}ûöî×6oÞÌ‚ X¼x1 . ¢¢Âú§Rv6å­­Gq4ˆˆt¬0³öZ=èXß»páBÛ±Í;h£@} ¦ÏMÖ±P.©ø\q‰íXyyyÚ~âþØš5kX¼x1=ô Îny×¹ÖT˜•+Wš¿ûÝïz›9sfø7\wi‚i~ø¡ãÏzuë«&÷aÎZ2Ëñ{{R»¼Ö\Á sóÌÍ ]G„Ô±¶¤eGÐAÎ;ï<îºë®^Çb SÔâ·’$$TU\TñqÑå t(ú+$ìžfç`äH+ S=ÍN¥°E\ì¨â⢠Zèˆ!an®õÜÔäøºñÌâpxKŽL³;$!¡ ¨â¢Šˆ‹.hY #®$ÌÏ·žv|ÝxZ¡VA¹óÜ>ÿ~¿c‡DPiE–¸ØQÅÄE´,ÐWæåYÏŽ¯›éÉÄçö%¼’Ð0 |}têÀìLÝ–£*­È;ªx€¸è‚–:bHAÇQ  à(³ˆú¶ú˜÷rpxz¡ :jSׇV)l;ªx€¸è‚–:bHAÇÑâ«ÍáïôÓˆm/p‡o €Žý©+Ð*…-âbG]в@G hq€ó “ÂÞVP˜Ê>´Ja‹¸ØQÅÄE´,Ðý‚ó›Ç† 8|R?‚V)l;ªx€¸è‚–º¿BBp>“#\ÀAwH]V)l;ªx€¸è‚–:¦04Ä^ ÃÁt*[*…-âbG]в@ÇÆ9‚.V‰u5a¸€£{-!aÚQÅE]в@Ç´’0E-ŽpG:FÐ*…-âbG]в@G ÝnÈÉIY‹#\Àáú´Ja‹¸ØQÅÄE´,ÐCB°Ú Ý86ÖivaCÂ#Ú u#h•Âq±£Šˆ‹.hY #†„`…ÐÞîøÚÉ ÝÙnܹ U [ÄÅŽ* .º eŽBBA¡Ó)àðô¨Ðåïrì*…-âbG]в@G !¡©vÁ…*‰®$„˽S4Z¥°E\ì¨â⢠Zèˆ!!¤t)àHõro•Âq±£Šˆ‹.hY c !®]aÎ]I©_î­RØ".vTñqÑ- tL!!ÄÕâðº½äúr !õ˽U [ÄÅŽ* .º eîϬ6G}[=]fôp/RÀ‘êÅ**…-âbG]в@÷gHÖ\è.³‹ÃíÑß)àHõro•Âq±£Šˆ‹.hY û3$˜3€}Mû¢ž)àHõZ¥°E\ì¨â⢠Zè˜CÂ8GЃr°¯9zŽp¤z¹·Ja‹¸ØQÅÄE´,Ð~€ µ5Ì Ü—`PΑÃ:–0U˽U [ÄÅŽ* .º eþä“f„7ÞsB‚-ŽîÃ:âJÂÒÔŽ U [ÄÅŽ* .º eÎ͵B¦¦0'$:iqD 8\^žbOÊzÐ*…-âbG]в@ûýVHµ@×Ç6—¹/ÁôþæýQÏpøúèj颳¹3.'¨¶ˆ‹U<@\tAË]P`…„a ti©õm¶GºGÐ1ô £ÝÛŽ¦`­RØ".vTñqÑ- ´Ëe­$ [ ‹‹­çƒ㺾“t´€#•&©¶ˆ‹U<@\tAËÝÙi­$ [ =(*Š»@;™-àHåb•Âq±£Šˆ‹.hY ó󣄄`µ9š›#ÌÅ ×í¥8«8áR»XE¥°E\ì¨â⢠Zè––(!!$Þ‡ÎDKG MþH=àHåZ¥°E\ì¨â⢠ZèàJ˜ t¼}èƒÂhG÷zŸ„„éBU<@\tAËmQBBH¼@ÇF ‡Xº}óû#:E¥°E\ì¨â⢠Zh¿?JH)AG 82Ê2h¯éÿ­RØ".vTñqÑ- tIIŒ!!ôû:jH8ÔFj ´Ja‹¸ØQÅÄE”-Ðk×®åÖ[oå{ßû÷Þ{o¯×„„‰è(#èh‡ËëÂ7؇³ÓŒË%VT [ÄÅŽ* .ºàI·@8ÆÏìÙ³¸è¢‹z½VRRBNNŠZQFбeø÷úñïó“14#.ŸXP)l;ªx€¸è‚²#h€E‹q饗2yòä^ǹ¹ý[ »«$d OMZ¥°E\ì¨â⢠Jè«®ºŠ×_Õ«W÷ºaee%¦¹¿1 , ¢¢¢û/º¼¼JK©Zöí;z,ÔyaŽ5ín‚«Å鼕+WF½^FYÕTS·½..—XÅâ’ªcâb?V]]¶Ÿ¸„?¶fÍ/^ÌC=DCC*a˜¦¹8-Ý"}Yºt)¯½ö~¿ŸÌÌLyä‘î×n¼ñF֮ǺuP[k­ê¶Q[ %%pÚi°v­ãÏo ´‘ucŠÇ°íöm üI ú¿«©¼«’1Ž¡ì_ʺ– ýÇ7ÞȼyóҭѲ#èK.¹„?üáÌž=»Wqëž„¹¹Ö×aÛ……àrÅÝâÈôd’Ÿ‘ŸpH9<èÿ‡Ja‹¸ØQÅÄE”-Б())‰^ ].k}ð ˜ñÍž”3ˆF#­á÷óˆ5$„þ/Ð*…-âbG]в@CBˆ!(lo·6MŠƒXfrĦ¨@«¶ˆ‹U<@\tAËÝÜÜ{†~ Ë*¨îÅ*»ú·@«´"K\ì¨â⢠Zè‚‚‚ÔèÜè·¾Še”ËçÂ7ÈGûîvÌ®þ[¬¢ÒŠ,q±£Šˆ‹.hY c !%˽c 82Ê20f¿n;ªRØ".vTñqÑ- tL!!¤¤ÅkÀìC·íj‹Ë%T [ÄÅŽ* .º evB¿.÷Ž5àHÅjB•Âq±£Šˆ‹.hY SF(б©˜É¡RØ".vTñqÑ- tªCÂH-ŽXŽTh•Âq±£Šˆ‹.hY SîmÚöœ˜CÂ`‹£§Ú©¶ˆ‹U<@\tA˪0Ç—CqV1»va†Yè4$ìÏ´Ja‹¸ØQÅÄE´,Щ FŒ¤5ÐÊ–!_9$*!aºPÅE]в@÷ #œ˜—^obºp$UõU!_5àpeY¬RÓ‹UT [ÄÅŽ* .º e.(( ¤ÄúúС'†5ŠN`äc `gýί; 82Ê20;L:ôÏb•Âq±£Šˆ‹.¤¥@ïܹ“¹sçòØcñî»ï:~ÿ¡C‡(.¶êïЇ£”–Bg'Ĺ÷È‚##è†Ð#h'G÷¡U [ÄÅŽ* .ºò}Çw0{ölJJJ7nåååÌœ9“7Æ|’’Ün(.Ž¡{‘`:Zvpô÷L•Âq±£Šˆ‹.¤ü¦±¿ýíoÉÎÎîþþâ‹/œ@€ ¢ÂÚM4''ÌÉ= ô˜1Ž}£õ [ZZzýy"‘9ÒÚ¸¿mgÿ,÷vâÒ߈‹º .ºòtvv6óçÏïþþñÇï>+Áû`}±ÍÑÏ#h'GÖ˜,Z¶õOj­RØ".vTñqÑ…” êêêøáHkk+]t‘ã÷½kï1Ç„99Á]œULŽ7'ìÚIÀ,Э_„¿CK"¨¶ˆ‹U<@\t!-!á”)Sؾ};àüóÏwüþCG¦n8AGMCcÇCC{õmõ¶×™£¬Gh•Âq±£Šˆ‹.¤¥@?õÔS¼òÊ+<óÌ3Ü~ûíŽß_rdŽ]Lzð`ëyoøåÚшԇvp¸³Ýd Ë mg]þ®¸}¡RØ".vTñqÑ…´è§Ÿ~š¬¬,†Ê‹/¾èøýÁ0¦îÅH«¸RºE ‘úÐNWAe—]ÐV•ü P¥YâbG]Hyž5kÏ?ÿ<[·ne×®]¬\¹’;3իWÇ| G!a2 tˆ´Ó€£»½-ùm•Âq±£Šˆ‹.¤<$=z4‡?þñ477sÊ)§pÏ=÷P\\ó5‚!aLzà@ÈÈ€;ãvînq„A; 8ú3(T)l;ªx€¸èBÊGÐ+V¬à‘Gé¯_¿ÞQq{H±ÅárÁˆÖšð#Ÿé”H-§Gh•Âq±£Šˆ‹.¤|½`ÁæÌ™ÃôéÓã¾F0$Œy‚ÆÈ‘°m›Õæ8ñDÇŸi?§GÖqýW U [ÄÅŽ* .ºòt^^wÞy'#GŽì~8¥çJBˆ±@CÜ}èA¹ƒð¹}!{ÐŽCÂÑý׃V)l;ªx€¸è‚–»ÙÛ#™™›Ã”à*–8 ´Ëp1¢`ZÐÒÑû?&§‡;ÇoˆÏšjבܩv*…-âbG]в@CB°ÚuuÐiÏ$Îä¨nèýS<GÖ˜,Ì€I{ur7MR)l;ªx€¸è‚–úPM ƒmŽˆûB'£@‡Y¬OÀÑ_A¡Ja‹¸ØQÅÄE´,ÐÁ`Ø0ëy×®oèD¦Ú…™ÉOÀÑ&¹­RØ".vTñqÑ- t0$5Êz®¬Œð†aÃÀíNhn&G<G U [ÄÅŽ* .º enî1ŸùØc­ç;"¼Á㱊ôÞ½à÷Çõ™Á]Y×û7A<Gh•Âq±£Šˆ‹.hY {†„Áq V›Ã4£ôBÂ3®Ô 2*Vô>OH8º ´Ja‹¸ØQÅÄE´,Ð=CÂ`‹#âžj7 {ÅYÅl9´…ήÎîãñž|Þ^Z+[1;“w‡o•Âq±£Šˆ‹.hY {†„Áºµ@'8“Ã0 N(=¶@[¯>t¼GöqÙ˜fRwµS)l;ªx€¸è‚–ºgH˜•emù\Ueݼ;,I˜jw€Ø|ps÷±xŽì­[|5oŒoP¨¶ˆ‹U<@\tAËÝÜgÓ£Q£ €ššoJÂT»K­}<68Z ã 8rN±îrÛüyò ´Ja‹¸ØQÅÄEÒrOÂXY¾|9/¾ø"@€Ñ£GsÏ=÷½CB°‚Â?´Úa·öHâzÓÁMÝÇâ 8rOÍ éó¦¸}ú¢RØ".vTñqÑ¥GÐ^x!sæÌá¹çžcåÊ•ÝÇõY6Ó\è#¬çD té‘Gt¼GŒ U [ÄÅŽ* .º tòÜsÏqÅWtß3$„çBgf AÖ4»ˆÍêð /NŽ7‡Í7cšÖì‹xo±—Œ² Z¶¶ÐÙŸO_T [ÄÅŽ* .º |~øá‡iiiáŽ;îè>VUUÅ‚ X¼x1 .ùdë9Ýw&G"GÖñY^ƒ¦uMÝ¡c"¨¶ˆ‹U<@\tAËÝs%a˜fr¼Õ Ù°!îÏ]<¯ËÛ½š0‘UP.¯‹œsè8ØAǾH·„‰ •Vd‰‹U<@\tAËÝw%!Ä8Úë…qã`ÿ~ë—‡±%cÙß¼ŸC-‡^Õ݇^ŸxZ¥YâbG]в@÷ !Æ4$§ÍÑcOŽDŽd.XQ)l;ªx€¸è‚–ºoH¶ … ´9‚}èû7&p$sÉ·Ja‹¸ØQÅÄE´,БB¨÷'a&Ç„Áølïg ÁG2FÐ*…-âbG]в@‡ ‹‹¡°¶m³v¶ KZg ; €O÷|špÀáìÃ;ÀKóÆfºÚºº–Ja‹¸ØQÅÄE´,СBBÀÓO‡ÖVؼ9Ä›‚Œ yy°q#tÅW‡åcHîÖï[Ï–í[âºFÃ0ÈŸ”ÙaÒXޘеT [ÄÅŽ* .º eœq†õ¼zu„7†5ŠnnNho賆E§ÙIkaâ÷ÌŸœÀá't•Âq±£Šˆ‹.hY C…„p´@úi” $¡ÍqæÐ3Xôö¢¸¯¤àëNljmÔ¢RØ".vTñqÑ- t¨bACR‚Â`zoÞÞ¸¯$ïÌ< ·Áá'´¢P¥°E\ì¨â⢠ZèP!!Xíå’X·üþHÂT»3†Z¿ >ÞñqÜ×âÎq“sZþ½~Ú«Û㾎Ja‹¸ØQÅÄE´,СBB°ÚËgži爵7 -Ž¢¬"Ž+>ŽÊ•Ô¶ÖÆ} Éhs¨¶ˆ‹U<@\tAË.$„ûÐ¥¥Ö­À·löøG¬g;Jaõžh=•è䟓xP¨RØ".vTñqÑ- t¸ô¡O?ݺõÕgŸÅíqÖг`/|º;Z*dÌäP)l;ªx€¸è‚–:\H tpÃþ÷Þ‹ÛãÌagÂXµgUÜ×’yL&¾A>šÖ6ÑÙß= U [ÄÅŽ* .º e ju/6l°­„å«_µžß?n ƒ'àêp±j÷ª„÷s6 ƒüsò1&«ã[°¢RØ".vTñqÑ- t¸¬ ðŒ3¬åÞëÖE¸Èg@F|ðAÜ+ ³¼YŒõŽå˦/©9\×5z’h›C¥°E\ì¨â⢠ZèH!!ÄØæÈÈ€³Î‚º:kÙwœœÆù¼[õnÜ×Ò=“ãƒøfr¨¶ˆ‹U<@\tAË)$kªİ¢0ØæH =ªÍÚçtÙŽeq_#HÞ™y¸²\Ô¯¬§«Ãù¨^¥°E\ì¨â⢠ZèH!!À¤IV«cùrˆØNBú¦¯ß„ÁòÊå ÷¡]. §ÒÙØÉá·9T [ÄÅŽ* .º eŽ‚µšð¬³`÷î(݋ɓÁå²FÐq× 3ƒ3†žÁ®Ã»ØV»-®kô¤ø’bê–Ö9~¯Ja‹¸ØQÅÄE´,БB —^j=¿þz„“òóá´Ó ¦ªªâr©®®fꨩ,«L¼Í,еK¯NT)l;ªx€¸è‚–:ZHðµ¯YÏo¼åÄà|è8ÛãÆKjÎ:>‹Œ4~ÖHÇAgwúV)l;ªx€¸è‚–:ZHÖLŽ’«{Ñév …åååL>™LO&oïx›Î®ø™1 ÃE›P·ÌY›C¥°E\ì¨â⢠Zèh!!€Û _ ðöÛN è•+ãr™8q"™žL¾:â«4´7ðÙÞø—މ·Í¡RØ".vTñqÑ- t´0H°±Í1x0œz*lÝj= 8’Ùæ(º°ÃmPûf­£™Ó×âH*IDAT!*…-âbG]в@Ç‚5‚+(ŒXç¾ùMëùosì 8’Y =…ò&åáßã§yCìwûV)l;ªx€¸è‚–:–`Ð kÓº;£ ާM³ž/vì 8ÆOIV ìú€Ãí‰Ý[z´9Þˆ½Í¡RØ".vTñqÑ- t,!aàlŽW_pÒ„ 0|8|ôìÛçÈ%p¸ —9þN?ßòwG×EÉåVŸýÀË»¨€¸ØQÅÄE´,б„„A®¼ÒzþË_"œdpÅVäïΊkÏ€ãê¯à¥M/9ºF(rÇç’5&‹ÆU´îˆíÎá*…-âbG]в@ÇLœ'žååQnƒls8ìC÷ 8¦ŽšJaf!K¿Xšp›Ã0 ^;€/Å6ŠV)l;ªx€¸è‚–:Ö¬Áñ 7X_ÏŸáÄó΃‚xë­(§{Ó3àð¹}L7öÎö¤´9\;€ý/îwì’nÄÅŽ* .º eŽ5$ rýõV¡~áë.W!ñzá²Ë¬{.]óµûÉls䜜Cö‰Ù4­m¢ekôQ†Ja‹¸ØQÅÄE´,ÐNBB€²2¸ðBس'Ê¢•àt»—_ŽùÚ}Žþjsì_}­RØ".vTñqÑ- ´“0H°ÍñüóNºì2k¥W^ÚØ¦·õ 8’ÝæèîC/ˆÞ‡V)l;ªx€¸è‚Òº¦¦†ï}ï{œuÖY½Ž; ƒ\uääÀ¢EÐî–99ðïXmŽˆ 룄 8‚mŽ8öìKöñÙäž–K󯿍‹VT [ÄÅŽ* .º t.++cîܹ¶³“0HN|ë[ÐÒe}óÍÖó³ÏÆ´Gt¨€cꨩ ÈÀkÛ^Kʽ ~ÇEï}v¯c—t!.vTñqÑ¥ t8œ†„Aþå_¬ç‡¶n*’‰­Ç† ðÉ'Q¯*àð¹}Ü4ñ&:ÍNæ”ω˵'ƒÿy0†ÏàËy_ÒÙ~·<•Âq±£Šˆ‹.hY 7oÞÌ‚ X¼x1 . ¢¢¢ûŸJÁÐ¡ï± `òä *+[X´(üyÜ|3@ËìÙ¯°páŸ{à 7``ðÔßž¢£³#&¿pÇ*U’wU†Ë»Ü±K:މ‹ýXyyyÚ~âþØš5kX¼x1=ô ñݰ¹ß0Ms­©(ÍÍÍæ-·ÜbŽ1¼õÖ[ÍöövÓ4MsæÌ™q_ó­·LLsâDÓìê sRCƒifg[††¸?ëëùºÉ}˜/o|9îk©ÿ°Þ\Á óÓñŸš]aÅAH„DjK ô:;;›§Ÿ~šªª*žzê)|>_Hä ­­7ÊË#L¹Ëχ뮋¡a9à¸íŒÛ˜½zv¼ºG•ÎÎ'w|.Mk›hü$tÊ©RØ".vTñqÑ¥ t8â ƒÜu—õõïáÄÛo?z’ßö´HÇׯ|‘#Y¾c9[n‰Ãö(†a0ô¶¡ì~j·c—T#.vTñqÑ- t¼!ao} Ž=Þ|3ÂTƇË/‡]»àÏ{­H‡Ûåæ–ÓoàñU'`l1è;ƒpç»Ù¿`?í{Û¹¤q±£Šˆ‹.hY ®$ì‹Ç¿ùõõwD˜Ññïÿn=?ð€uï¬D[uóé7“ëËeNùv=òwŽ›¡³†búMªï·:TZ‘%.vTñqÑ- t<+ ûríµÖþHë×ÃÓO‡9éÌ3á’K`ÇŽ°û•F[Uš]ÊígÝŽ¿ÓÏï? 5Œ¸kî<7{þ¸Ç¶ ©J+²ÄÅŽ* .º eN$$ bðØcàrYåáVRß{¯õü›ß„jÇpüôœŸ’çËcNùv5ìJÀ¼%^†ÿl8f‡IÕT9vIâbG]в@'öäÔSáÖ[¡¾~ùË0'MžlMýض fÛgcÄp”d—pǤ;’6Š.ûIÞR/_Îÿ’æMG*…-âbG]в@'öä׿†’ke÷êÕaNzðAp»­*¾»w9Ö€ãÎsî$?#ŸgËŸ¥ª¾*ú"àÉó0âßF@ì¼w§c—T .vTñqÑ- t¢!aOŠ‹­î…iZ3뺺Bœ4~<üä'Ö.KÁõâGˆ5à(Î*æÇgÿ˜Ž®~¼ôÇ {½u(Ã28°ð«¹¤q±£Šˆ‹.hY “ö䦛¬í7>þØÚ§#$÷Ý#GÂÂ…½î[è$àøù?ýœQE£X\±˜E›%äìÎr3òÞ‘ì¸g‡c—þF\ì¨â⢠Zèd„„=q»aî\ÈÌ„»ï†÷ßqRN<õ”õõØ}[,'G¶7›§/³¦ŒüèµQßVŸ÷àLÖè,j—ÖRûF­Ra‹¸ØQÅÄE´,ÐÉ {rÚiðä“Ö-±®¹öí qÒ׿W_m-^ùÕ¯çÇE£/â»§~—½M{¹{ÙÝ 9»¼.F?8€Š›*ؾ~{B×K&*?ª¸¨â⢠Zèd†„=ùÞ÷àŸÿöîµöíyÿÂGµöêxôQXµ*®€ãáK¦4»”g>{†÷ªÞKȹtZ)ƒ¾;ÿ?îÇÜ ]+™¨ü¨â¢Šˆ‹.hY “öåÉ'­éwo¿mµm jíÏÑÕÓ§Sþ曎?£4»”G.y€,ùíû²m'÷Øqd”eðþ_ßgÿK±Ý¼¿Q)øQÅE]в@';$ìIV–uÏØü|ø¯ÿ²2A?øu“Ú&ÞwŸu‹,‡\Êõ\2ú*Vð‹·‘³§ÐøçÆ1–±l½ukÈ}:RJÁ*.ªx€¸è‚–:Ù!a_Ž;ÎÚÉ0àÛ߆%Kúœ`ðÌ30i-}³fÅt{¬Þ—0xúOS”YÄÃ=̼µór.šZDñ-ÅjlùþL‡>ÉF¥àGU<@\tAËÝ!a_¦Mƒ9s¬=’¦O·v¾ëEf&¼ò Õ¼yð‡?8þŒc áåk^ÆãòpË’[ø úƒ„œÝ·¸É›EíkµÔ<šø½A¥àGU<@\tAËÝ_!a_nºÉêIûýVÁ¶mM:dã^}Õ*Ö?ý)¼úªãÏ¸àØ xüÒÇñwú¹rÁ•ì¬ß·ïINâ„NÀ•ábûO·s`a¸ Fú•‚U\TñqÑ- t†„}¹í6kñJk+|ãðÎ;½_/w¹¬IÔ]]på•ðÊ+Ž?cÖ³øÑY?â@Ë®øŸ+hl}Ç”h”——“f>'üõ6_¿™ú÷›k/*?ª¸¨â⢠¦Â÷$ G:îöÀÖ½ ½^Óœ;7Ä s昦a˜¦Ûmšóç;¾~Gg‡9õù©&÷aN}~ªÙÔÞ”oÍã5æ V˜ï½g6mLìZ‚ð¹'aèï0wßmmf×ÕeÍ—þéO­yÒÝÇ÷¿tÏènˆ°Éth<./}ë%Nx Ë*—qñ ;^iØ3lö£aŒøùu>ÿÚç´ïNíÌ•‚U\TñqÑ- t*BÂPÌše……EEVÛãòËaãÆÇ·¿mÍËóz­}Lÿë¿Â쾚¢¬"VÞ¸’IÃ&ñá®™2o ûšB-i Mß°åØßË ƒhßÕΚs×в5uÿGP)øQÅE]в@§*$ ÅÀªUp ðúëpÝuãX±¢Ç ßü¦5//;ÛºÀW€ƒžyqV1ËnXÆ…Ç^Ⱥ}ëøês_y{Ò¾a‹á28þOÇ3à[h«lcÍä54|سK"¨ü¨â¢Šˆ‹.hY S†bÌøè#+¬¬,ç‚ ¬ÑõáÃGN¸è"kk¼ã·fv·Ê‹‘\_.K¾³„i㦱­v“žÄòÊåQß*lqù\œ¸àDÊ~RFÇ¡Ö]¸Ž‹úv‡JÁ*.ªx€¸hƒ)!aÜtu™æ‹/šfi© –•™æk¯õ8áðaÓüÎw¬=ÓüýïM³£#æëwtv˜³–Ì2¹Ó¸Ï0¹ü—fGgìïïË®Gw™+Œæ c…Yõû*³«³+îk Â?"ªÔ– ZŽ Ó†Â0àòË[Ø´ ®»jj¬ ïfδ6\"/^xÁ Ýn¸ë.kóÿ·ßŽéú—‡Ù—ÍæÅé/’ëËåþ÷îgʼ)T7„îÙE [Êþ¥Œ“^> W†‹Ê»*YwÑ:Úvµ9ýcÇ„JÁ*.ªx€¸è‚–:]!a(ª««0þç`ñb2žF²fzì?`À-·X÷Ó:ï<ظѺÇáÕWCŒáȵ'_Ëš[ÖpÆÐ3ø`ל:ûTúð!ü~›K4\5€‰O$ç”êß®gõ)«Ù÷¾¤/ W)øQÅEm0¥Å‘TjkMó_ÿÕ4³²¬ÎFv¶iÞu—i8`Z=‘ ¬^X'ýǘfSló”ÛíæÏÞü™éþ·É}˜£ÿ0Ú\´i‘ÙÕå¼UÑÙÖi~ñ¯_X-V˜ë¯\o¶lkq|AøGBµÚ¢å:Ý!aOúEEÖn¤;vX·1ìê²¾?öX¸ëçÛ&\pÏ=Ö‹¿úŒaÝvïÞˆŸåsûøï‹þ›ÏoýœKÇ\Êöºí\õÒU\ðü¬Ù»ÆQØâÊp1ú÷£¿r<™Çdr𕃬:a•µÞžÄçL«ü¨â¢Šˆ‹6˜2‚îWvï6ÍÛo7MŸÏ4ƒiž{®iþùϦٲa»"ºÝÖ >ŸiÞx£i~þyL×~cÛæIOžÔ"^ýÒÕæ»;ßu<¢4̪ªÌ÷ Þ3W°Â|'ësûÝÛM­?ž?² h‹jµEË´*!!D8†…dzFÔÿùŸÖHúÝw­ qðäQÌÊû ëïÀüÙϬM—æÍ³î0uªµÇG]]Øk_2æÖÎZËìËfSš]Êÿ®û_Îw.ž™À³åÏÒÒ[øâÎq3âîLªœÄ𻆃 Õ¿­æ“QŸPù‹JZ+[üHµ‚U\TñqÑ- ´j!a, ju5¾ø–/·n©ÕÞnm+=þòáœð÷ÿæßfì¢bÖ#˜#FZ'Ýt díÒôüóÐ`_dâqy˜uÆ,ª~\ÅýïgÂà ¬Û·Ž›ÿ~3e—ñ³7ƪݫè2£¯hô{ý»ÑLúbC~0„ÎÆNª¨æ“ÑŸ°î¢uìi?]þØVFªü¨â¢Šˆ‹.¦i®NK·ˆn¼ñFæÍ›—n„©­…¿þÕ(¯Ysôx^V€ÛO}‡o{^â„M q×é¹û|ðµ¯ÁUWÁùç[½ë>˜¦ÉG5ñøªÇyyÓ˺¬m ËÆ7Ç}“iÇOã¼cÎÃçöEõkÛÕÆ—s¿dïŸöÒ¾ËêK{xôÝA”^QJþä|\^-Ç BHT«-ZèË/¿œ¿ÿýïéÖ¬€#·ì©®†7Þ°Ë–Aã‘G=tpýÐü `§W¿BFs–ÇÈ‘pî¹Öô½sÏ¥üða&ž~z÷Ë{÷ðâ†Y\±˜÷«ßÇÄšJWQÀec/㊱Wð•_aXþ°ˆnf§IíÒZöþq/‡–Âì´®ã)ðPtq%_/¡økÅø-úÉú¹$U\Tñq ‡è$ Ú1ÙøýÖRò×_· öºuÖq/~¦²Œox–25ã]Æ4¯ÃEù˃[û«_µÄœt’5­Øß¼Ÿ%[—°¸b1on“öΣ35ÊòË8§ìÎ.;›sÊÎa dz2Cºµïiçà+9ôÚ!êß®§«íhË#ïŒ<Š.."ÿ¬|òNÏÃ7̇aÉÿ B?¡ZmѲ@Ϙ1ƒ^x!Ý€pdgg÷ëgìÙcÝÍå³Ï¬Gy¹5Â.¤ŽâÎå]¦ï2Îü”|z÷ˆ»ÁuòIV±>é$8ñDšŽÉ›‡V±tûR>®ù˜ û7ôêQûÜ>& žÀÙegsòÀ“[2–±%c”3¨WÁílé¤~e=µ¯ÕrèÕC´í<º*±6òå“{z.y§ç‘wFžU´‡¦¾h§âïH'—pHNW^y%¯Äqç’þ ¢¢"å»quuYac°`‹vÇárþ‰CLæCNf'±‘±lÅC§íí¥C1Ç€wÔpZF àÓ|œ]ËÇU|T¿ƒmö¹æy¾¼îbÝó1¦x ù¾|Ú¶¶Q¿²žÆÏYÿÁzl€è½BÑ7ÈGÖØ,2Í$ëXë9øÈšáN~ñNÇß‘Ê .áTû!ª@Wlß›6YÏ••Öó®í~<;¶r|`#'qô1†/BnØRêã½±El–ÉöPYÐF¥¯ž&B/bÉòd18wp¯ÇßFìÁÀÊänÉŽÑMÇæ[Ñbx 2G-ØYÇfáâÃ[âÅSâÁ[âÅ[êÅSèÁpIëDH>ªÕOºÂÑÒÒÂ÷¿ÿ}òóó)**âè~­ª*¶ý‘SÁÂ… ™>}zº5p¹àóÏC¹øèì<™Ý»Oî.Úó+¡jk;m•dì¯!«n7¥m5”Ñãq°†›ö¾Y€ |™ [Kz?¾(†/s[ÙØÁŽúÖÉ›€¼ÑÆYw§›1‡etã± ?<œ¡‡‡0 nŵ¥ä,Äü¤õ‹(ó®]à):Z°½%Þ^_{J›œÚzÆÔ×áÚU»©os=F[+Í´ÓD»«™€» ¿·¿¯¿· F ~_íŸÓšÑAk^'3ºhôAc΀F´»2pòÉjÏ'ËŸOnÛ‘"Þ’OfG&dtdPy 3Ç$³#_À×ýZÏs2›sp›ýûËÖƒ›üWs£ž× tv‡½ýóßúf¶3„Mýrm§¬a EX³ºŽüyMãhÌ4LLLÛ1Àš:jĶc´³¶ŒûJˆ§e ôðá骪bòäÉTUU1|øðî×<Ø]¼ Òz ¬††^ýõ´}~O”r1¨kÙ ™Àà#^x€Â#èx€¢#ÚJ›G|P‰Ù.—‹‚‚>̰a‘—Õ÷7 .dÛ¶m¸ÝnŠŽ¬2M“'OföìÙüä'?áßøFÚŠ3À§Ÿ~Ê\À£>ŠßïW&,Ôª@×ÔÔPVV …£<÷Üs\qÅiuX´h—^z)“'ON«Ç;ï¼Cii)Çw\Z=Î=÷\–.]ÊŸþô'~õ«_¥ÕeË–-œ~úé<ñĬ_¿ž;v¤ÕàÉ'Ÿä¶ÛnK«Ã”)Sxá…˜9s&¦i¦5×ê‰V:¶àðÿ:?ü0---ÜqÇiõ¸êª«xýõ×Y½zuZ·…}óÍ7Ù¸q#O<ñK–,aûöô‡„™™™iŸR6|øpŠ‹‹())¡¾¾>­>MMMlÛ¶ñãǧÕcÞ¼yüâ¿àÏþ3eee|þùçiõ ¢ì,ŽP\}õÕÜ|óͼÿþûvO»K---ÜyçlÚ´‰Ûn»G}Ÿ/úžýÁ /¼ÀìÙ³™:u*?úÑxâ‰'Òâ±téR^{í5ü~?cÇŽ%'''-÷ß?`¤?ùäF6—… òÖ[oÑÜÜÌŒ3ÒæGÿ?´aÃ&LH«Ïüùó¹á†Òê0uêT~ýë_óöÛo³wï^%þåš…„‚ ÿ—ЪÅ!‚ð )Ђ Š"Zø‡dÙ²eÜ{ï½ìܹ“k¯½ÓŒm9° ¨„há’©S§âv»ùîw¿Ë“O>©Ô[‚+R …XvïÞMAA---éV„¸-üCòÇ?þ‘³Ï>›yóæqçwÒ­$Ž‘iv‚ Š"#hAE‘-‚ (R AE ´ ‚¢HAP)Ђ Š"ZAQ¤@ ‚ (ŠhAE‘-‚ (R AE ´ ‚¢ü°gk>°ÝhIEND®B`‚mpmath-1.0.0/doc/source/plots/besselk.py000066400000000000000000000003351316273626600202230ustar00rootroot00000000000000# Modified Bessel function of 2nd kind K_n(x) on the real line for n=0,1,2,3 k0 = lambda x: besselk(0,x) k1 = lambda x: besselk(1,x) k2 = lambda x: besselk(2,x) k3 = lambda x: besselk(3,x) plot([k0,k1,k2,k3],[0,8],[0,5]) mpmath-1.0.0/doc/source/plots/besselk_c.png000066400000000000000000000734231316273626600206710ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½m¬.ÉUßû_½÷y›W¸Nlf<¸ ¸"\Eº²Á,”0ùbKY€ ( "ˆ B"$Ià‹‘ ƒøçƆà•D‘@ɵâ:ƒy·ç휳÷ót­û¡ÞV­ZU]ýœ3ñhv­35Uµªª»Ÿîê_¯½ªºš˜ùý^‹)S¦L™ò¢’sx8ùgû@¦L™2eJ)Ëgû¦L™2eŠ-ÐS¦L™ò"• è)S¦Ly‘Êô”)S¦¼HezÊ”)S^¤2=eÊ”)/R™€ž2eÊ”©L@O™2eÊ‹T& §L™2åE*ÐS¦L™ò"• è)S¦Ly‘Êô”)S¦¼HezÊ”)S^¤2=eÊ”)/R™€ž2eÊ”©L@O™2eÊ‹T& §L™2åE*ÐS¦L™ò"• è)S¦Ly‘Êô”)S¦¼HezÊ”)S^¤2=eÊ”)/R9ÿlÀ‹Uþèþïz×»ðWþÊ_Á³Ï>‹÷¼ç=ŸíCš2eÊ“iA7ä¿þ×ÿНùš¯Á?ûgÿ ———xúé§?Û‡4eÊ”+&Ó‚nÈ›Þô&|ý×=þÓúO`f<ú裟íCš2eÊ“ è†üÜÏý~è‡~o}ë[ñƒ?øƒøïÿý¿ã˾ìËð¿ÿ_åü7o=€‡y=ò(˜}íY(Œð_QYµ‘ÛaxþÙgðÀè2{²NJ‡íä¼*Û»ûÜÓ¸þÀ£þˆU=Wµg»ŒÅ1y.ÊwžÁÙÍð»pE}®¶ÅNí7\®È*Ð]>‹åüÁº\m#ž nÖC¥ó¿Õ ¯·Ag7ËúÇÑ^”§“)÷·ž:“LÌ— t ëö²^ÕóD]™¯ë¤ýó ÐR×cÙÖÚ‡N7òìÀ¾XÁ|À” 覼å-oÁ»ßýnüÚ¯ý>õ©Oá‰'ž<þE_‚7~ÝÛðƯ{[ Ô€ÒprBçBÇe{' åøÏ¿úoñ•oþƤõÜŽóz©KiÇ)ïp¢njt¿ý‘‡'þϯ÷åNÔå«Ö¤ã\æ€ÕÊ‹öëÊAïóòÑàsžü:Ÿ_ýöV]7êWùXÎÝ7P¤Á1ïpñ©_ÃÏû¿|>üàœ^s]^Ó3»œgÖéxâ8ÖõõÏþ¿8ð‹RY Ì­<P:Oú-ÎíbÌŒõð8;•гßF‚´ß¾‹mÄ€ßEø#ëóÁÇ«û4ΖGU=Y'>ªœ*GUÏ,éÃú§÷á~iÈtC¾äK¾ï{ßûê‚Ø¢%Âý~W¦Cžd;`pÈõÈ‘·ˆŒ{©Ø–¾OœJ»Pß ÝÀݲD9…#h}UoUñ]ÏÙåäÈ? d›5lsuc„£ò÷:w⾨ÔWçÆ(—elÔ+HÔÕ×<]w3ehY}%ôÚ%ûÕÊd=è6ÃêfݳÝÛ ¢ÆÈþöÓU è½ÂÀ¼îIÐZ[QÖ¼Y7Ê^ýê7—BÀP]ƒJX+à¤r¹W¼ò N§ÚmÁׂñZæc ún½x>çS ê¦c£Nú]dþÆŸñÏêßOÝó×Ô¥sOE>Ê.–‹XNåué®EÓˆ* –þ–,ô°Íн²6ÏmÐÍÝ€Þù¼‡#¤9w!Éô^aà ¾àIà˜ó£0®Þ  õ¯> w¨õÝ|/®,Μ~å+ÞwWÕt©²’I¤µ5üàõ'°>‡¸$<ô9ÐÖs÷9pXË:,ê„–¿fT•ÉëWY¸(ó×ðyÞòF„5)ï£Ýò€àïlwˆ­º àŒn¥E="á綷ážôY›u,D#¾z2½WH*wZÈ›. ]oÄR„qå¦0ÀKJoYÏápE ²”›q ÄÑBVð­`}TzùÃoYÒ¹§|­l­kQ@¡MBC*#‘ÏàPµ Á‹ Í`”Ð;Ú¾¼ÓÚ”ûß»m6ô§ßU— è½ÂÈÖ[ÌïrÇêmú‘­´ÔI‹²ê*oùr7 ¬ÛUVsÌG 6ÜXK0S N¤W`Y 8² ðÞËhÍ›µ†j|ˆŠË™@KÒUѯ.;ÍÚÛ‚elãà´ 9ºŸ­í´@¾]ÚÓ~Î2½W$ ÷¸a-Wþâ(w@ܳÉ!NhƒXë´•Üv ²ä€Åtˆ—iòřԋ<1CLžðç¾D&ÿ/os³ `këÖRüaIÜ}c] 0ïŠÐà“. ŠV;ð6ÛÛ߆yÝv4=ez¯h@²‚7!þܳ³;öYXÁq†…m‘ã Ú/µQÀXÂÔùzbVZ‚«SõŠé†Ú}l¥£K˜|}98W[Å¥ì±~{ÐMÍØ¬ŒÅ¶S—Ó-÷âèí8o¿* n•­m´¶;ûZ×*Ÿ€Î2½W,@ZË.ÃÛô7,åX7Å¡,ÍŒˆõœÐ©ôAªÊÕb^t€«Î§˜›‡€ëo^ëç§…ú –ð.ƒžíPJÏ~¶tlè `s«NÐ[åú9žuù<µê÷Ú—°ŽÛR@V³ùLP·ŽO î9¶‘ú¶nâYÊô^t`ÒrPËét°.âgÇÙ}AÍœáºHxÆíéE˜îó€6êihVå4æ6b¹1…8×Ù<­`´RJgG´‚Ù¨³ d£n VK/ vœ®áÜx»~àvº¿_ýðšüÛË‚xüíy 幟ˆÎ2½S(À·q#˜eP1û«ŠrÔVf³¬S·U¯zn(oJ²9îCÔõ€K6˜aÔ…jgÝÔØÔõ­Ú¦v]6€½À êrûÒ=PÿÖúݾֹÕ—uJ »Î·ÚkP[稭׺V<ez§üU½N¹7Èvèz“à®Úo•‹:­ý6'XÄÕþ~§· …T/‚XYK«YÂ$êëvTÅm¨PuüVÙ&, pܳúóH’Vwï›Ç½#ßJËãhŸã\6ez§´-Ó{o¨ ¦bªÊ­í[ÛnÁyx;V{}LÒÒ:6Ê ÓMç8§{ðÕuGÀ¢­\« )™×gëµÄ5PÍ:Ä;¯Ýöv{ÇÛ*·Ïkýj­Ÿp.ez§X€ŽqÕáh!ôúæ*ÚÅ| ±~TC£^3ìhcÛ‰uõ9ËqgV‚r-³¸‹ýï j_>­¬_Ê/«ì‘†u?¿õWPÛ=Ôƒ(Á©2·Ùf{ßÜÝwù¯ÖØÿHÔì÷„úVï˜L@ï–þ¤mÁÈJ÷êomc Ž÷³îV»¢œŒ¶Ú ¦º­,«nMdëve#]g (t®¶í ‹º†ki†m]é2r0{~ÿ4û…!@Îp!—á)sN¥ÊºV¾…w‰ô}½ô” è-h`Æ[å#õ·ÚTu…õ]mðž÷ì_ë,ÈVЕDžZ$È+½ŠÛ©~Ÿ Ѭ{à4!(¶S—‘€mе.cbŠ‹”K¥>&¡§„b—¶æÀXB Ñ&ï1§íI‘[g§×O…ò„³” è¢ã& nŽ‘ö£ºTfÌw­êŽÔÙØ·U^×Èëúi[ Ç#YÊIŠ$,Kk¸<_5TKÀJ+ycÊzÂ#û5´Dý¿5 s…#ç×÷Æ ¥Žÿ.@Ö…½»àìp(Q¯Ó-]ûÑчô)pÖziK7!ez§´ÝóK,÷@2Vö”ã±l–°èZŠS:¶Q0­ÚJÑPúÍÁ "IQQ¹¢Ó¶=R€ƒŸ¹Ó¢n± dmÕz¸®X#`ƒn é%¤)èã;íú}ù\Â`k½gÏ*_.¸’"=0k÷þVh•¡¡¯Ëíy'VZÇЖL@ï Ð2mBo ^¯]f]'³{zk[E™Eȱn·Ä|½I²wC²LYіͧ,ÿð/ÁÚ¶>d€ÃVrY´z¹·PIS×¥µÌJo?VFÎH ¶ý!G èZyïé­WW& wJ Ð:o¯UžòÂM ¤‹í€â´ý€acu|º¾%Ú:&Y@Žy*õÅó€üÁQÕN÷h÷ˆèRðe‡ º1f¬ :‚¸·µ4)ØR\ „e= ÄV™²’ÉŠÅSå‚*5„Ëù¥CÆÒÁx€Ð£ª«ÿ^ëüý†)¥L@ï” -Ý&”ïS^Z¿E™Ò›ÛjÔi U U®ôM‹8ÕU7|ZlD œ…r`r Ž•‹J=p….ÙX|º2ˆµ][Ê”âS¬emk‹2 Üȧû’G-åxMÐ(ÛŠ÷è®¶L@ï h` Ò{ënÁs«ûšå ë™àÜp-™ö’?´¬Q_ÃÓ;ôi¨-噂W™d[oÑÖp`¦UX¶ä0 Ê”,féŽî™M}ß§¬ÏYÏ…Qꥥ\ZÍ0êëwuéSâžn:ÊôNÑ€NæŽò{FÍxzTå¦9]êóKÔé&–º­Y¼¹½½d_5NƒlÞí -e Â:.Š{mýfÐR¡—Örí¨ËÚp&Dë×rOÄßš­é¶…ܳ˜aê³»¡ßQ0[ºSà¬uW[& ÂÌøÿààÓŸþ4^õªWáG~äGØ€NmzìQrWdQ½ìÐÉBeUÎV½XwëFå¢]sR[aÙ†m’ )Ÿ¨þ—¨×„Y€µß®„â–«¢çžP¾ä”v*mû“Û Îàí»4ôÌŠ‘ôG@Û†²ÝzñhÙhz 0Ý”_ú¥_Âïþîïâó?ÿóñò—¿<é㛄QØìT¬rº7ÊzíFo ï:n/×cé"¬²–·¡¯@ËÂRnƒÙ¶µ\[¼A\TÕÑnYêmHK‡@ âîÚJnAWû¢Ë2 ÒÞõ<5=¦ë2iOØß”¹Ú2Ý}ìcøŠ¯ø üàþ ¾ó;¿ÿøÇñº×½¾ó¬©ÞÈâÊQk]O¥Smßþ#Àý͸aÍ/ÛPÐk«n€¹nÞïYÇ+0·fEh—Eß:î¹¶œÒ[@¶,eý[G`Ûy äÒ·\‚:æûó’{ºVßn÷ÝÚU†F]+ßÚÇÕ– 膼æ5¯ÁÝ»w¯xÅ+ð™Ï|ðôsŸÁûÿŸ0ðäcOàÉÇÞ ZY·§)7PäŒu¾ìF V–yÙʱáB×€1ˆôr¢ñë³ Þ¸i0Ïš]Qƒ˜Ôö³/»ãò7¡Ë nÁ¸ÞÚjn‡þõm¹&ˆ8}E[ªVÆÛî¿­:­¼†<ÄÌœRŽqˆ¿‚í:WQ& òÔSOá;¾ã;ðÑ~Çãí¯ý5À£=‚·½éëbO‚ÉÆabÞªgݲÂ"¶tÛAúŠ›T$¶!•?¹mX”MwÅÖœam[ºþL s¯ùÑÆú¡¢a­ß?,ßKì<Ä:×!/ío·ìÍY3›:]®uY³kúâ?^s:X¯-„kᶸÝz÷ÿ ÊtCnݺ…÷¾÷½F #»8vB9 ÊEý •y̪j„ââ i?#¢G‹wĤÒ)¿fëXZƤËDšDž-°k0×îë8Àœ…Þ‚¬>79_¾h>ÚÓÛ ÊsÚ|á£õ%]YÇ”pÝËáÑú±Þäs’ èÝbzO\‚5ùzY—[õû0ÎÆ*øV~d˜Â¥Ñ²™ï¹/šVrÏ—œ!›^Ÿ&m-—34ôË!¬â_1éòdQkèÊöùüØÖr¾cŨyä²å‡Åc„ì%å)8_9*ªCbCo qc[²Ýt’ èÝ2 è6”ÇËGݳÔl«/Ùö,Á¤¬ådo¸-,ë8YÑ–OyèˆÂŠnÎ=æbŸ¶/™EÛú|H˙⃌”ͼ/ùAÝüöeA>ø××Å«ø¹(clX{)CV«Æ¦7êÇý í{¯n:Éôn‰7=° ܽy†-0 º"_ù”%\#´wÙ„±e»Òd[Áµk§™Ê7Y·Kå†%\@›Í²¾â¼I+™Hê¹°n¡Œ|‡$%(@¸dyÁ/ ¦qÅ‚ô3§ÞKÅ8;ùj{[í÷Ô`úa´=cÃÊjyü›J/ÝÔªëÄ™o Ä-kXBZ—o¼$RÌÆX‘^ŦµŒ¡ËŽ9_ÀÖr8¶Ôâ|Ã[ºžœ´œ‰ ”0•K¤ê…¡ µ{°Ú VîèFÊCžTYõàº>7ʺÇ<-è$лÅe¶¦no0,ähùš³.¶,åS-d'øî 鶨\®^i `>Š6Çe´ézPÐ¥Žy„©/r9rš$‚ D"¤V¾ò–ª½˜JázhÀ²š.ßH›Óê[íFÊFÒ–n:Éônax@d€æ)F–(êÜ3+ë¸d Úˆ›Óˤ{"5ºQ\ó8‚X[ÊΟ›ÒÒ:nÀYû•)è(¤eöÛ§ÅyEšæ­ÞÝÎ ²Fš4˜ ¿±hb¸svÚˆnÄ*mr@7,»ò}ÚçPÙt’ èÝÂ@š‚Ū—Çü P.ðZ®Œ”‹Y Îæz·É6Þ[® ÐrL»×cÞG½O“‹Ž:Fú"m dXÄáR‘h¡£Âj– †•VùNQ)\î:ꪴ¦ž‰9 ds&f«ÞFÓ¾8†“c}.}.TZ»oÌz@åç¿Ê2½Wâ[w#¾æL+@úUãòK¬'a*bi­2 ­V’¢Ä4y£]#¯ô`ã>-T9D9dQ7AZÚº\Y¾­A=³Ž.g¥çÒ:&¶õü6!¼â~ZÝM_íouÝ®õmüÎÍz§¤§˜€Þ/ÄÀowÜ­°¨6›>X#t-Õœn®4²­SŽËnáªî  Žy)E¾gj¥á5»¶‚ì², À ‹sß+?å\›€´FöË*Í@aKhÛ °;b;(Bàz÷ÐéiA'™€Þ+ÿI•V½£Ç6z° @n×wj[úÖ¶ê²ÂKY?†Þ鷺 ÒJ©SåáÄç9¿)È mYÈ@í?Ž1©Ø&H ݘ/ôâ:˜Ëj7@IJ·ù€ž±"ÍH0ù‹¼ ݨB0êºE•Ç Gu¹f×ïŸÞ)A& ÷ 8SP½/Xqf/Ý€1z³NÃEQm£sܲm±Ý  Ìª¼ûû•è趆æl›¥ê./h+xÈ$ΉkJêœÆ<5ÜEÕ2Ú*­m§Æx ¸¨úqY;†[ò8­#Y6&ËD÷¿ƒsÜ'Lz³K]V½FzJ– è½B(Ý1î‚ÚÊïèÁ`GêC¶³Ê; ŒíË[µ Ô2¶öª´ã­?s)¾ÇG%¤#TÃ>¤R'cõ»Ò64\7Ò¶z 5Y³¶´Î1VßuÀua£C†1) £?¿ÇšÀl<«c˜ è°‘–ñ” èý]QFz[K7ÚkGÊ"ˆ%ø¡Êâúæ6ÛÙü] Ò)-}ÊÍ¡9#ÛÐé@YMW`”þdë7Xàm‚YÁÖ9X]Ω<…4<“NÀÖXvªX´mº„5ŠgóIC õ)ÜÕu{º)^& ÷ŠüjìP3,Q«þ°·Ú™iæTÞ‚¹Ð·Ž½t˧ÜqYTÖ²€°žÐ\¥8:¹1:ç-ƒ7ø†e¹„°p„¬ïꀣ̯²)Žõ ñ­8 ë„ÛÁÌ—‡>4C2ç륹FõzÝçT0O@g™€Þ+DÙ‚Þêa£½ÑzQÖ€¬ÕÞ¬?ÜQo:ìTš¯ó xË…2$ÛePǨݤϣxÇFƒ7ÁwU1<¨ ¾+D^é“u Ö­P®Ó·m1³¡gÔÖ²é¿q¯ Fº¨£žûºŽŒ§d™€>E¶Ý+«â†ÅÓ÷eÛ°Ž­zå–{"˜†4:”ð­€¶µPhi–ïÀª,ßcc„/äšyº2mÁ¸e- ¦ôÞ¦ eâ» Î0—í4ls\ZÃ{ÜPm‡"Rº§ëÅ-ÝU— è½²  èVz´||w¥…E duU-kÅ;V2U‰:+ÀKñ´û‚¬t²£¸À¨‡«´|=€ Ç•qpº+2€)¯(]€Â{Á\@™6ÜAl»1 Ë9\š&˜D¥%mÎÄ”ù† £à½nvé‹zÊô~!Ô€ÞL‹¯ºÝ+ÌC:m1ÁÖ²~ èš½ βzNXkfà¦oëÅ<®Ü¥K#CH|ãšârüù(iPl€l5ˆ©qªK¹¾.áHܵ’¥KCXê»î *ƒ±ô3'‹zÖ÷ZÖ²éuÛoéZù)Ð]9øÆoüF¼éMoÂßÿûß+[€~¡ó{Û6ËH+DûPÃÔvU«8ßÜÙò- Aâ{(,!¬>hÅÑP»T‚YB÷ÝÆT[Ï5„ƒ•Nõ>Ó  X. Ë·l¥­Ø‚qe5#_á.;yT±ü¦¸U¾ÏÆèå'¨³L@wä'~â'ð·ÿö߯_üÅ_det«íÑïÝF<ËÚåXÚùjrk{­úiqeÎUÃ,þd™³ù4ŒóìªòŒEÚ…òÕÈ®dë8¥ué]¾eJß/LʕŬÜ= kàuz. # QFn¬þ@»_0i{•eº!ÿñ?þG¼ò•¯ÄO<±ÐQF{ÙŒ[¶¶ßq°'…7°ß·y³k è<˜¥›"Ö!HÜ„rÖ¯ªÎÊýt4*,ai=W¾ääÁ*å-HW~e*£ô#¬d Ê·÷ŠßŠâ|Y3/FW€QFzO¼¥à]SÂx8ÒÐY& ò¡}·o߯/ÿò/ãÿøñÍßüÍxüñÇñô³ÏâýÿîÀ'ßðž|ò±Á-°e»Œu¾Ñ¬©¯b ðÍÐíùåœX í­PÿéMU™ü†v Æ-0˯FP‘A)-èµéÂR¶  Ôn e%K÷Ea9ë@õïdP“õ°²Ïeá}Ëê•zõYoRÑ)y[W-î >0péwÌÎØÈ• è†ü£ôxKú¿ü—ÿ‚Çðè£ã¿é«mK»Û3 §ÿÅ<¥É¹Å b´±wëÆ ÆÒw¨Aœëlßü[P¶|£c@nC:YÊ(!½F׆ÈÁÙW eI£cég.¬e£oT1‹ºÖïO1Å@`âïêzXV±Ô °nõÎ:ê—§Ñ^CÒþ Ê6±6A×àiÄÝ96vrõdzCÞøÆ7âo|cÊGhû­‡­tOWX¿ª|KgC×€3!¸&J}Ëš³à<æÂ ÈÒ] óP Îpv `ASás¶ [ùŸ;ƒ}Ö”¹Ê·,­fQÎ2†ÒwÎ_+ ]—ÎùA#n›=#IÜÝfå‘­qÞfQ}Ã?w…dz§0l@¥mÈÊôžx Â@†€.Ë@Þ†D  V1å4Q1ëBÇÆR×2©­Á»ø¢‰eGp;RíäÌ éoN ¯_(Y«ßÕ°”µ¯YYÆÎ@ Û¬/a%á Ñ6‰rQXeû¥aK}QeËTéè'› ™€Þ)[€®Öã”mÈk-lÔi¹/ÚÖr„v ¯xÎl‹9艰riÑJ÷FÙµqy=¥NûŽ¥Ef`è:® m9kX_ýJür“´t%j¿lz)§U ûÙ^Ñ µ·,Úm›|_~¤Î¤t” è2 èí˜S¾ämG Ú¾ä\§çÞŸÞñãl9÷¬di-[>fidéWö€ôå«N‡ü‘£ÕìckðϺb=Øg¹1D¹•gÀûŽ|<ç›R::—I @"ù©º/Y­6Ä5”uû{Nï)Óù è(Ð;Åô)q‘¾_Y> ì}Vr´t¹h'u%x½~ Ê# –³¶Žkÿ²¶Ž©|™Dæ 8²šmXÆÕl ŠÇÈ%”…K$¹ˆh o8Fðêt\$¼³W•–r‘$¨WÚÑàÓ^KU‚z ¨÷«| âDñzŸL@ï–½€l·<Ì--õÛ n @iWŘ놰 å:¬Á…á„,}Ð¥K#[Æ¥+#êË|´žq»q6†²¤+H#ÃØŸëE@w°—D°±ˆ—w Òñuö\FˆyˆòS%ÃÖÃbKò ¯M÷Úˆ‹/ǶIé{}L :ÊôNуñá2ª IDATеÎUå¶;*¯!\—÷@\Z½tÇ€\¯ž6dm1÷âöàŸÔ•ÖóQä"_ * ç4|=„CžÀ\^ŸʼPæÊR.ò@‘hrÇB·‚Xå’Ð@5î¥Î qú ¢ñ›šº è(Ð;…!,.¡ƒÐõÀÛª·U6ç„ó7æ´ËÂç×jÎ#`^7ÒÙZ΃|µk£u¹Òºå è„… â ݨ‹Ð1I0Ç2éäªÐiˆº(ùB 6ÄF¶> Üu9‡·ýT™ÙÆØvWwJ™UoJ” è"ó£°íÕ ¥Ÿ¸èœîû[é>”å¸r¾o-ë™õ”9`.]â΋9 ‡%_ìR@:B—’+c©¡\XÍ,jáÆ0ÁŒœÅIRšK]õ陎àì×ì iPµÙØÇfú~è€iAg™€Þ)Ð#ðmé÷„®eÛ eN0ÎpåТŒ·½ÇIëñ”AEÆÌ-(Ǽ†rü—Ý–/Ú†rµõ¬¥€t8nR¯I“:WÑ¥±Ù[ŒóÊ.™€ŒŸ)ç;§Òd”/¡mÔëÃi@ö”€FÚ*›2}Šd°F7ÅþÙÿ+ÿ-AçDº„¥þWÚÍzžÇ<{ùüh¨!2jÝÝ¥ÈÔµµL©$Ç”JÄÔ8kP@8Íΰ ¿³pe»eqpê7Q¼ð>åxmH]3çOÓEຠ\ç€5æ)LêŽei ØP}}–•ŽeýÁKÚÒ£¡ß³ÕnJ’ èÝB(?©2Ò#ï5ÔwE{Y£:¿½ü‘õjËö]J2ƒ¸ÔõϪ¸5Ö–Çã(p1™JŸ'Ô/™„pí{ö05|Í*ΰŽ¡˜Ä9Š•–m­ ….œÞU‚˜ƒ¢¬éë¢̽?„z—}ÀN¤ÍK-Ü0êLH2½[¶mé^h÷a^¯¶aYÖ=8÷^(¯Wó°~_†5”¿¹Î˳K2“ -­ga=xÁû›³•¬,ë–å,¬æ"`,óA§¼2p\=`XדOËŨ­i/rå¦~‚FeØpÖ€æN¼̆/¢ `—µôE°§L@ï—m@ë|_7¹ÿ5¡gTåT•mÝ9ï­ì çnËË+Ñ+ÍØìÎ(­fÂ"Üú”`%÷Ü)Ÿ“œÊÉGëpä`:®à£óPŽqõ™ðH|£‹¬wÞ·§Ò0*({ˆ+WEéùÚdÆ[]³¾ÔØüÄ‹¥ÓeS& O“è­ž×Ug]Ç.»P_Te®³½StúÜÈE>[ÎÚ·ä¨_ ýÎɵÒÞ‚VnÍÖ°#Œ×Ž8¬À!ø -¿P›¾FáL%”ë âÆÊM¨¬#[Ïò’Y¾æ.Œ; †ð`ú”x € èDº8FÌ»‡ó`½¬³þ–Ü~D+5»7úõ÷÷u¬;nûî£äW,ËYR°˜):ü…CÒïÜ›ï ªÁfàÚ¡|è@àb¿ˆ g:Üûðañé‘7Ý0áLÌÙíaxËr> Ć+F½SâÖö¦L@ï—(ºG˾+ü†ã uozj‹%-GCÿ.+F#¯ÑŽÎéwÎÖs2ˆÏ¯ Ñâ³dE'+9 ƒæˆ`³ñ¥¾ô@Æ2ŒÄ1.à e9£fíÞHþdê@9¦[–³roì±²¦Ñ¨g¥{ñÞ2½ý)Ðû…OÛ©æÃ ©;å.Ù¦ØÛºÓ¬|KG*-ÊïL‹JzPF ú,@û ˆ!ZÑÑB>0èÈàKdàãKòð½4€|ˆs¶œéHà´´ž³ür­h%oíö\ŒñôÖv„vü˜¡5nÓ‡l¹1 KøŸ^lÔÑÛž2Ý’ÿðþ~þçÇã?þ8~ø‡8”D`õÒÚ†Hß/˜ÔÍiõHå‡öÑ]¼½ÜvÆ+wE‰\Ë&Öó1¨j‘Ý…õ,\ÌÞ½A¼€Üâ] G^ELÀ%”U,àݦåL¥ß¹°˜¥µŒÂz&à.-æÛhMË/ÎjŸìKö=s Âa›.Ñ4eŤ“ˆýN0Ý”7¿ùÍxó›ß xË[Þ2èç>¤{ñH­¶µÞ†²ç[Kÿ6Fyë”Û§BÓ¿ÉHüß7lûœ½,×f–VsœQ³ë3„#ùÁ½`!ÓÀ—\ [É—ÞböeP†°š+«Yû…•Üdd‹Ùš· f0 ·ÒúruºHºÆ¬Ú´¶ÑÊoé&£“L@oÈÏþìÏâmo{›ÐD@—½È/„´{êžôž;'ó|0ŒnoOy³ö5km_g«9[΄üç?­Ê+ƒòjþ 8ZËȸ$Ð%e½rmÐൠäò¬Œ#Õ³þZmò/C ’€nÇZÞs´8[Æ q+}?lIoûWX& ;ò“?ù“¸qã¾÷{¿7éž}úY|øýÿã±'ŸÀcO¾!””=¬®1XKk¶ _#o}ÅÙH{ãU×íGY^ë·DY¦mçGöÁ"Ç Õ‡ìûEf:D@£€3.´ ©ô9§AÂŽK#Bº˜:‡ö€_áÖ`–ÀF™†Ðµà ±pYØ—_׉g¿{A.±Òûk‰ªÃ|ãŽß™M®¢L@7ä½ï}/~ú§oyË[ðÝßýÝøçÿüŸ~ôQ|õÛ¾±¸WjxFÙ65j׮׆r¶ÚËò1«vL¿Â=1à”|Õ.¤ÙO·#(~mVº V¯K@^K0'7E0]D«YÂÚƒš.£ÕŒj`ÐO¯‹. iZÅ@¡´˜Wé¶PVtaÐU–4DZY±Ö‡XL0ZÖ/lƦ+ݸØ\%Ììvy«:]p ãH·7Z]™€nÈ;Þñ¼ãï0J¢‹Ã’Ñ¿áîµM«lïß•§Ö¥üP*žÊb³`"xÌåÇ.lKXŸ^{.b æ#ŽœÀLØÃ·rsÀû `­!]øžK¿s²Úå«ÙÚÑ|‰¤´Tórñ¯u9ªËbX²;/ý½ôž¾NþÝ7~HRo9îªL@ï– £ÜG(²ªSYIª,݆5¤ëª}¬RÁ!o/OêಞtÒsi êÙ–ÏÕ˜Ù¬h„ßÙƒY„K„¹Ín.2¨3œCú|ÔÊѽ"L¯“þfáÞPî rÙ‹áaLBT»8èE­ü·Qëoãï&¡ª.w#¯A[—Ùîm3ëìcך£ÑöªÊô^aÜÒ(‹]Òÿ¹*‹yu7-¢ÖÝ`YY¤r³=«ŒÙ%TuÝSÒÑ2ŒÖ2ç0 g …ß™‚‹! J׆3]è’=/x/¸\€K.ãLâåŠW¶ƒ›ƒ…)»b€ô$q~ç,{Dm!Ö#‰ËC_«…¦”v÷ Z熫K¦Ûou¹SÒV¾¥›2½_"õ÷@+˜KÜ×õ4µ¶¾ÐT:¤%˜å4µ80ÝipP¹5bÀ@Óì(^ÈÙ=Z»7Ȧdä4Ä‹ç\ÎàNv3VriC%÷Ò¤•›u:Z ZÂ;{r1óͨ_½Ø×î8‚w¤¼ gõ‘ê7Ü,fq”ƒƒÂ½qéAMÎºË ÒtAà‹¸àÒ} ,GÂ9ΘpŸÎ¯ÂÄ—É…ÅLµQ`º¶Šµlu‰-ÝÞËz¯õFŽoOÜ+›€Î2½WH%”:lèFʶz~ïîjé_@o¹õ’…šÝPÕqñ¦´žã<ä—¾çK_°‡ó°Üøn°¢ïp7À9XÒËpî<Œ¯pÎðp@>C^åc°Pð9 +Z¯ZS9f‘çðYeuzôrŒ­Î½G׺ì0Ò{u½X§§L@ï—è˜Þˆ[u¬ë‚x«Þ 0vE´‚qZìg£^Y? ZÅ:¿&â#œ¥ÍrÖÆ°\Ü]Nîå6ï0èÀwÉ[Õ—„ë¼à:טq ”ÂY4ykº\ù#û˜Ë÷Ô`‡Ó—~‚´{©f ؽ:èÔï:õƒÁJ÷t­xZÐY& ÷ÊN@•iŸo+}|Á¡Ãï.1²x¶'냄ÒM+Ò€aòEÇùÏös›ƒ{Ìt ;>,· xžáîn`Á fÜã:׉p-ZÐä­è3ø›#º6ˆ,ì WFi'{d &gàš—I|µ‘¨ äö[à~듾=XëS_“ý¡4»›eŸ¶K¿ul±Üžn:Ëô^Ùô–®uwèò­úVØ*ß¾ëÇA:Úá}J3ìO8­ÙM+ÂJsH¯tG Ý!P°šé¶7Àõ¸á7ˆpƒ ×A¸!¬gíÞˆ>èb¶¢xLËÁ¾|ò _ d8…ù³»Ö ˆ­üV­Ë½'äßæsADµ=¡öV è,Ð{¥èV¯°ÕftïÊ#Vmo[ÎO3c U£Þ.ŠD`Ë©vÒÁÅC˜ï| ,€»\w ~€ëD¸AŒ›D¸Á n‚qÎ[Ñ å*Óz®Fý ‚oY~Ó¼†qy¨H×§‹ªÓ–ôá5ÿ­Sl·aÁ½l”€zŠ— è½¢{3éÏŒ®_£Þn³ëÎ׿[¯þ(¤-PG·‡x“0®`G—ó›}z¹Ü]àü¸¹7¸µ7@¸ÉŒ›L¸I n?ôuò¾è3¸ä{>a¡8ß¹„r”b(—‡O¬E\Ÿ¾:oCº†}Œ9¹=œH3êË´})´{„»ÿëÛð²{[_áÌ:¹*ã/Ð{…‘gqì…m£îɃt§üM;jÝjXõ¶Êö@Z.¸Ý&¸:üWR>t ÿvàX.w\;7ÂMÇx`n¸àÚƒ?N¸8œÃeß3¤[#¸4¤¥,fd”‡J&x#èÖÏ=àæÌt ýjQ¨K"íà°̺p4 œ8zmÇk´Ý™|ÇÞ34Yæ­ô`z¿h@Ÿåÿe ¶Ò÷ âûïÆ{Î[ty$7Â[ÒgGày«ùãAx@?À„[̸µn$+Ú…B9­®~%Æù–ñ ¸ÂaÅkHŘpL5Öðç€‡ë ªVøßúª,ä@Ñ~¯OϧèðÓzl¤e º²qÞ²Ž‹ú²Üe˜é|Ü'5ê-¡œUÛ)ÊGR¹üÝ!Yܟ³À1/€_{— ?[€kä}Î0áA!Æ£ ~˜½ýÀ\w„sx,Ó+ßÁŠ»8âG\€üÇ At…E?È„³°˜M(Û® ª ¼õtìÅ:mÁw4`@×Êc@§õVùÕ–—, ¿ÿû¿o}ë[ñS?õS¸yó&~û·ïyÏ{ð ßð øëý¯Ÿ¼]b¨´²b\(Kmbyˆ¼c`ybÀÅ´óåÌñX\¨¿„ºÒ±|Ys½»¼mçlÓº5çÏT¹3ÚȰ„xu~;«Áê7ðx+:NF–’9À™Z: €p~@ð!%Âˉñr0á‘3ƃ̸¹¬8w8zG~GÜÃî‚pò«)…XÙ»1Hš”û¢ô'ø’‡`¼ do!XÌ0t#0ÞJë¸UÖª?x ú_ü‹;wîàÖ­[€/þâ/Æ»ßýî{Þ.!2v¤›÷æ„ê0bYe®ÓÖºí{·¾ƒ‡¡ã¾ g•9æ2/BBû¯UIÝÊ~lïà½:à,jàÀÂààðïc(ÀšgwøóÏá­è‡ã|ÎJx/càAv¸±\€–çá–ç÷<·A ÎwAt âK¤Õ܆2UVr dÛR.ÏhkæóVϰëZ½ÓÒ á˜­x«Ît”—, àõ¯=~îç~óoþMüèþ(þá?ü‡÷e»{Ý,묷°Î-àiöÓ3×F½¥3a-ç ¡aÃ10Îá!}–ûŸŒg_CiMŸ8ŸË™û¾è€‡˜ðòø\b¼’€ùgü,Ø=Ðs òp^„å \@|Ø0@ú˜ùèˆb‰=Ã:®ÌA_ÆÛîõˆ^¨{^{ K7aK·§Ž•ž€Žò’ôßý»¿üË¿ŒO~ò“÷m›‘ @ÿVÐù=@ß çÑÛÚ);kÔòÞpÇe:Zâ9p4ë V‡ê³È1.p+Àçð·h9Ÿ¸î]²gç€{à•pmfà•GÆç-ÀÇۀû ðúiÐò x‰€¾¢» ¾(,g2fddßñ†Ë¢XÐdË2Ög~o±êc#­ã-ÐŽ€÷ÔòVþjËKÐgggø‰Ÿø ü“òOðó?ÿó÷Å‚ŽL¶oƒ=·Ï=‡h!S†äà{n•½–vŠM0Ûnëó‚×àíÖ`0§Äè·väA­fÜø†oHÎ.åÂå3ÀÙBx”Ÿ$Ðóa±Ž;Û¾æìʨÝí¿1zî•é^Pu¶@»¾#@½—t/?!å% èw½ë]€øÀ[Þò–]moß¾oÿöoÇ#<‚—¿üåø±û1¥hß½ÛhÒ-ý½„{·Àûpß²²m@³9»9!œ3pæK؈càxÖp׃} 8{à‡Üèšÿêɵç÷'Ü!|.>çâ3 üxýCàø åiðòl€³_úÎ[ÍGåO®gZ´WÐhŸi{M; —çô)ñÞ²^º¥Ûâ-Ýt”—, ßýîwã[¾å[ðŠW¼ð†7¼ï}ï{ñä“Oâ+¿ò+7ÛÿÂ/ü¾é›¾ çïü|×w}~ÿ÷¯}ík‡m•yÞú(¨7뜰¾ðvö¸G,X¯~h{•Göom_sÞű„ ¯¸tŒËKÀÝ?ü€|Á=ÊÀC„å:pî7Ÿ!ÿç‚W?ý Î>óßÀÇß.ÿ X>¦ç‚õÖ%Åepeô,ã=W ueuJoŧètz+¿§î©úx·WS^²€þ¶oû6üÔOýþÇÿøpÎáe/{¾õ[¿uÎðÉO~_ó5_xì±Çððxík_ ܼ‹åóþT|øÚ“Á~%7.ue™= Ã` s˜nÊ!ò"C¡ƒ­KmÔ6 ¶%ƒSù¥¡+Ú8WoÇÉmºbÛ.´qÌX™±8_g Û^c ù8ÏÏ9ßîÀŒsv8c@p7®<zðA¸‡=ô øÖà›7ë×Ag ΃û¢¿ÄËÿXÿÛŸý)°|Xž–;Àr´\‚— `9ëŠ|a9’ù˜‰­4k=‹¨Ñ®ÚNø•MÊo¥YuDaÒ‚8ƒµ’‘>†‘Í‘þ=S,yÉúÕ¯~5~üÇüäö¯yÍkð‰O|ãoü |âŸÀk^óÀ3†ÿŸßðø“_€/|ò1g€¢Ž®(—ëŒù¶N”©rÖ«=ˆtÑNÔ«Ú8CuuÞÉ|hç[æe~—Ëø0‹´Ðɼã¸t_•Âq\Âá‡#¯8ÂáοHÍ>} uVvΰàa/ð ,x%z/у]“ÑžÁò¿ýO|ú5ÏàáŸþ¿g€?}xúðì]àö%øîp÷\ü<¿ä<çäPçèXg‹4 ]2’€ÙHå6¬zÄç|á%pó<²‚?ã€gð|†4_zHóÁ9«Žóx¡øN"Š×éͧTúUÿfùHÒuЩÓÓÄ/Tº—Ÿ|Nò’ôñãW~åWðÈ#€ˆîéï( {÷L+l•ï¯ñÅ^nÖßpoÐoý܆ö ÙznOµ‹¯ˆ\Š®×ð½“×ÀXÂ}| 5Žáœ®Xqgü®ÓŠ•< ÆŸðçñð«À­xxõ€~Ž=¤ï0p`¿ì¬Ùv¬Vþë©4ò$ë]Ü=Ī‹´ŽïÞ£º^:æ' “¼¤ýë¿þëøË¿üKܸá‡üï  ãhó^ê•íñˆuÜ.oyk†¥+ÓqÙø˜V ¦ ÆŸÃáp¬xðlÅÙ-~ÈÏ9ðó ¾ ðßø®²¦åºHâ}• QMß:±£OÖ=Áê|0Ò–nÞ–®Uç`_qyIú‰'žÀ?þÇÿø¾o×Z¯†no½/­z=ë×[´®(µˆez¤ÌvÙRxÍC¾ê‘uѽ‘bòF+8,pê½nÂNïsú=ø¿Žpì?éí±aû9f|+ÎÃpäËnñÐÙŠë8Ðóìý<àn|Ç(K:º<8ZÓþtûÏèþhø¯Yƽ§`ë)º·#!§Yë]Y¾+ÝÓõâ­:Ó‚Nò’ô¯ÿú¯ãío{rqüËù/ïy›B£ÆÊÞ{ʪ¿Èûܵދòœ5˜ÈO¡3ÚJ0Ç—¤Ë5ßK€rùm;Â&±5û—ºÁa®§£ Ž>‚Á8¸ Æsp¸‡…ýúά¸{æðàM‡›×ÎtþÕðç3 ù.ÀÙ’Æ¥‚ôÉšæàþ0] À–'µòio]è®|Ü£;ʰ#­ãQXO@ò’ôÿøãoý­¿uß·ëû= 8Œxÿü×âòD¸¸N†+òÑòõiÙ)Žõ}Ý2.ëÉré’Ðùø%»Ò ÎÛ#dÐR£ Ua _ÀóÿÎ'à­ˆñâÍBá»W B§ÇIü•žŽ0.Ü €>çxV\²Ã]¬¸Mœ9\pþ c¹ðÐ>¤‡2°°¨Ó`¢òU7Ý §¬Ñ߃ö°Y× еòÐi}Œ' “¼dýU_õU z!®t^c ÏV½8yp‰¨^ª|=ºÌK›WÇñ®´^ÿ¹þŒ©LÇvòC¥ú³¦ýö,ާœëE%vÁ IDATí±/{@y'“QÆ)/k®p8Àá.€kÌá#°þQ°²ÿ&Ên³Ã-v¸Á~ÿó3àìZx1%®Uz@8äKN fùQ½l‡5 hYÕqVÈ)°ùS©—n[m8ïøVºO@'yÉúMozÓ ´eëe+Âöê#wV/_§k8n™f҉ѫ³7ß>Öò| èüѶÀÌa>M|Ø”â fœÁá œ†-x æ.nÁá×™qÝç.¬ `Y|ÀyØwXæ”o [Í-H߬wYÖ#nÄCµ.ÇF}]ŽÓÐI^²€~á$ܵÃ`¶t{àG¡ÝƒäÖ]> õV›V}{±ùmÒŠèöƘÏÀ8ÊË4$¾õ¸8_Àá{@ß`à†ƒ4‡šþÕs„OsÙ³Æ*ÝY8 ésøåPE(!ÍÙå¡¡ÀÌ-H@{ä™8ji÷t£p>ÚS ™€Þ-ú›*€ïÉÀvµt÷ Ú{ÁÝø„ï… ÎÕGåù´Ú¯á¬©V|íÝ¿Š~ ÜÆâëåÑíq ‡ v¸‡›¸é׸ÎÀ9s‚ô@M"årº‡àdz ¼ƒŽƒ~]á?¶"}jŒ]€»óuÍíÆ­KhåG˱Qo/¨§dz·X€^Ðï©Z_æõŸö÷Ú­»kÄÒxïnÝvÏжöçIåAgr,aŽw\ó×°âÈÁÎp¸ ‡›Ì¸ÉÙz¾ÎÀ5ößYÌV´úb:D‡Û°ó¹sFÌ ‘GY¡_Ô¡z[Lö±NH§Ï˜‰uÃ9>@œOsLsNËU”±hÂPµº8Tz:Éôn‰çvïé…rhk Î-ý8°©¡ïëF:j}ÁÙÞVvUHHûcPË-äÌÏâ6.Á¸ ‡ìpŒ¬çhǸ梛ƒÓ×\üJ{Â’½ J„Sój…²ô!.§jvÏ ÛušmHAX}_rôêsØVñ,¢þr§œêr„}@íoŠ— èÝ¢¿©¢ã-7tº|«¾y{l”kèÔËyÞ€+Wo«î>«=ÏHYC>.õàÌÑ].Ÿï?bëÃs¸sf\ã.3n8o=ßàl=Çp¦B´u<ÝÔN\º+_=/gm{}i¹oýÍÒÓZ= b?èÔ‡¡—º)^& wË u¼UfuáVz¤ížÛ©¶>ê>ÑÕ g0j‡ª†sôCŸq@œÁA-?JáÏãîøAæg h9PxÎé›´éï&’KXË« Vg>dôj¤f`ØÀÈ\ÙS{†UáX—å[éÝ” èd/ Gcëh•õÚÔ:=Em$ŒÍñÞk£ºVêwåK(ÒG0Ý~R]uÖ9öo*2_Ã]wîÒO¯c?Íîœ#¤9¬öðÏÁ\ÚÝ‘\\¯UõæÕ–@ãü·ÉðU `ܬ³Ù;Êú0ÚëúˆWMÕ×ûÚºVlÆ«*лEσên–ÓöK#ݳUÖª»U¯Ï/¼ ßÊÍ`ÿáÝÒEkY—¹°-ásæ%¤ð…ç`œƒq ÆÇØ Ç´ŸÌÌ|̸ë.pÁœ³Ã9saA{+š 7‡5hXù¥Óe.1³uõSšsŸÙs5R™Éî64”;û)Ž•·{í(C¤' ³L@ï– [é8÷ÊFâ=ðîµ…s»|üœX¿5[CBZº8ârrGçÎaÀσÎÙ…8Â.¼¿‚s—¸dˆWo9Óí/°ÈACPCXÔ¬`]Åâ…v.ÔæUê^¹[íZõFÚ÷t{â­²)^& w‹œÅ;•îZ½ü6ÌÙЕ{;à­ô©oëÇW)ñPÎ. éXV.hÁ)C¸V4p€|îõ|-¥Á×Á|p×á_ ŒkŠ^|€ã.ùà#ˆ”õ´»%èµ?ZΗìYRZ=¥´Ñ+l•¶9ª{ÚìÑ]u™€Þ-„ò´í³ÎŸš¾·ÎžÛtð¥~ÏRR±>CûŸ£åœýÐ,V'ŠŽï]'0§à-lðuä2u7ןSq|„ÃGöÛ÷l—ýÐàéÚ']¸=°­KFJ¿»'ð`à†~0Ýßhzëx§L@Ÿ ¥]J§ké¯4ßw°o—³ÈXálèí—jZiýŽ ³‘@-ÝùiEÇ…/0á'Ò]¦¸Æux+9ÀÞzædAÇ•ù½õœa}LyÅÊGã;Ú¼\Ì1¥Ÿ PÇ/ƒÑ@¶ò­^Õ¼âöÜ©»Sw¯i+¿Uÿ*Ëô^‰¯tÙ…VT—›ªÎmÈ*_du×Îoè¥;ëºÖ>†í(lÚ§ë²N綾ÒrŽîÆ f9PâàòàkÎ>x ß°.áÌРNÖŸRñDZ²ÀtH¯ß±  p ®€]\§rvHš_½Côå,Îv]•¾_e=]O?ez¿0òG ­²^»“ÚªDív,oÿëÜ•žõ]Ý8PŽ& «ºih3+²5ÓCÀ:­±‘A]~$KYÒ)\‚× ·† iëY¸78~5¶X¶Î[Ñi•£íp,,ŽÅƒ…9ÅiÊ Ç·;ãið¿»5¤>í˳¥l–X]¥ª§í…ÑíuÚêºØY&  ùÔ§>…ú¡Â7pûöm¼ç=ïÁµk×|a ЧöÚSêHæ‘ÊCO¿UVU±†¿Š¡•šÓsÿ:Ürƒ°x $ºŒÅ@!Gßt„iµXÐ9€9ZÓT.DËù Òqe~½ü”J´žeZF´°å húý^>Ô´;Š8/Â:&u½½î.Æ3eïv' ³L@òªW½ ?û³? øþïÿ~|ìc×~é—úBù8²j×ß{œ¹Úó:Ti¥ãê Bò>þ-jþi}êdþ]OaE¸°b-`â´Ž/f$­ké‹–®Žc°šãǽõ\ú›%¬£…]ZÑéÓYÒ’ æb=QaAWî kµ¾¶|5¾ø@¡ük*o¹‰zãRfݱk µ>ÿìÁqöÁ•‘+èüãxç;ßYèÞñŽwàío;~ë·~ Ï<óL†3à{O¼Ï¤Xý}|­mX lÀºL³]·|‘hn³éJÝ»³¶ íb"1Ä»ÕÒgBÇ`r~Å;ZÊ.V¡°œ¥[Òÿ-h gaEKK:Í¿n}ˆP¹;äEZÕrÅüá5LD(:DÔ¡QÞˆ«:m¨§&U™n_§ìzºCL,[råýº×½üà+ý‡?üaüÂ/ü~æg~¦Ð?ûôÓøðÿý~Àc?‰Çžx² Ù¡²=u¬û,&Oh»û8Tyõ ²ò–XÖtgë-ó’cÿÉ€Ïμ•MLÎÚ Ó7ªâ|çË< éÚ°†ô?k_tñYoT.6 Íœ#tWÔ–soд0 ·Òú‚±‘ïźÞV™­ãƒ¾3³3ª_Q¹ò€¶ä÷~ï÷ðÔSOá©§žÂ÷|Ï÷àïý½¿‡/üÂ/<üð£øê¯}›ïÆîIö–‡\Ç'ÄFGî+>µ®ø`ûVÝ Ä"ÍV¹•7Õl:AYN0^D¼DP‡p¶€ÏðÀËyõ ðìÞ@=8ÈàÅÇ•-¿Ëá“Þa · mQ—ƒ‰Âjp´µJ'+¢|âVºóP½Ñt™§k p 3èöÈþjÈ´!?þ8þüÏÿÜ. †OJ«þ9dÅö ¹uQyŠÇeíw(Í9­ËÕo/`-fÏå&Š5†ÅàaíhI š¨9†3¤¥çøŒÀggÞʦ³@òs€¯!ÎήŽC WGtL®é–®9ýN":¡ó¸-‹ʺ3>j0+ÝèJùf½Æ…gKßê »ŠÎ³RM8K™€Þ+Ð{ûn«¾6€zí6@ G@ýBC×Üï¹)«šD}æ#–A”—±:}:¥-ii9€XZÖœ‹Ï 1tl ˆSR>!¼Ó§µ pgÈ–wô7wàœüÑ^Ï-`7}Ö=H€Úê[°vëÆ¨:´” è½2 èû dãj|%ÊlC­2 ië¾íÜ¿€—ùÞŒÙY@ú¤}'8‡2éê. iIŸA©cÖ–tµ€sØwißœÒoÙ„r‡ p^ç|3îÌçÌ[®ŽÞÀ"çt1mU+ßét]K!^ˆ‹n½Yå' £L@Ÿ ‹†Ó@pª¿.äœóÛvá^é¸nP„-‰öh÷þukݯ Â{þBÞ¼û1r«¶PUyùR P¸=²Õ,@¬,hÖ‡¨‹R·¹vv¥æô»$°YÂÛ…ƒNçABþÂÇ|q–`S¹ >MÇ“PÏêækæ%l£¾àÑ ¯¤.s˜’ez§D7'°¯[ê®í½ÀçÎ÷h¬ NÇâþt!/õò伎DZU±¾æ˜TÊdëژ̴҇t’!òêÜÛ @–ó¦ kZä«8ìAZÕr_ÕE ‹ç¬OO ‚I\[‡î9–¹#¥[B]W§c§JÇ·:“ˆEÇ ÉÜ߀F>]€)˜€Þ-?¶ìï‚é>cÛ‰÷΀G¢; ¤Óê2Ä}:VÎP×au¹ì̉¼H¯æò/kR$M7” Öâœêt5Ó#9&P ðV3=å¶âž’›Å<‚K8›U¸ÜÌœ÷†“ÚSx`Ò[ºFпÃI¬êQYO擯j 0½[âä«Ö½eédØú#qÔsp*¬eº§s0æ°€y#½ Ýêrpk™'ç륿²W Y â„VhÅÑ-è ÈØ… ÒœÁl æ#à¤W¢—ÿ+T ê77t-Vb`û›=±n/?’V§mÊôn!ø“¶ëžº‡°×‹Ð÷ªõl@šmX›À6ôzÂX‚5Êà8X¼W—ËäÏò„¦¥{$û€Ú½Q¥•.&Ë5´!ò±pn…U™7ë8¸<À¨Ý!*]£þ©(;‘®3šoûžò)Ð{%º8d_r"½Õ÷ïÖÈ{­íaËšUÈÖç\µ•Í Ìyõ êUÁûtGÎñÑGÇÜ«çå!YÞJ$ˆÏDZÛœé4}Ó±H8>j}$\¦Íbn€[è«N´ p–õÒ~¬mõtjÿ[齺­²)Ð{E:ö£Þ ¡Ö·ê \Ýc›V4A[Cº¥—.|Ô2¶EÍeõG”À>FP‡²"À}p!½3àÀÞ}"¡,Ü,]–oZäår§,gxÖ5²^S¦Ðɤ¸êH¬$q­ò˜æb“cé6{u§”µêM0½[,@÷úŸk•+ØÊò=ðî•Vvøp«¶Ü€3o€ºZ+KHwGåöà†5 äê/ÒÞÌÙµ²²÷}søÜ,yx×î”ÖîŽde èZ3>€ȦU͵J‹0™Ö¾"V@éz¦I¬ÓÛÞ=Æ#PÖé)& w‹žf·WÖuûÞ)̵näq-p[0n–)HŸì-k:‚»çúpnÁú€h=Çvñàâ[àÞÎ1ÖÕÃÚï?|çOZצUÚr.Ü Óå±å«ÞNÿS›ár“šý­ŽÙ+»—6f·ëlmcÊô^ÑÓìNcZû¯eÚß—õ¢÷-x ÞÔ-Ÿkp„ çÂ?-@aœÒ¬@ÍÔ¹^Ü‹—©YÅÆËÔ.XÜÈðvœßV$éò(¦è¡ššÇ1˜×°22«,\x.ò"Ñ„ø@Ú,çr£ýž}ަ¯¸L@ï Ð2}¬¹¸6¡­òÒX‚´ª—^–‰y]¦ô-X¯J/ýÒ°Q‚Xú§+_µJ§Ä˜ sŠ¥5í)5°¹á7ƒ b0Ôq°´Q€;~–‹äô]íöX 8Ë9Õ$¯—m-é¬*ãZ׃á(4· Ü)ã­cš’dz§ŒÚÒµÊÆ wìç ¸²\¬hoððåâÍŨ‹¸f½²¨5°WQžüʪ,A9Áš¤%”KÝQ\Zص]ÏZù0[Å»•â_;,l¶ùS^âe˜(Ù~_£òi·„Ed´ÑsµÕº¶t#à=¥Í• è²è‘ô˜@» g©t£Žv‰4ýÖäJ/á,uåà!×úÐÆôM«8»8$̹p}X°–tíþ(Á-¬hnVºb`V;éÔuK]$àM ³øÿé²AÈÖæ÷èïGÝ+(Ð;¥h+¯uÖtW™>Ø#ð–éòííŒz–¯Z/åÓl‚¹ˆ¹á¯úUé ‹¬Q‚ûXè¸J×¶¶¢Ëúñ¡¡5í ¿ÏÍÅïôßA)ǪóËu\]7Î×­h¥‡²¸zF)|á§{†Q<²‰“^™€îÈþèâ#ù>øÁ&~Õ[J¯ké›Ê‚q+Í"³Ü16Ó\ë£;£ÔõƒeM—`B^a3–q g Ø•• j.óÀy ±vqØy Ô¥Oº|AGºh´Ïº„³Ì[qÚáj4® ˜K˘¸ÔA–Á.«kvjœÄWîf¯²L@7äW~åWðú׿ùÈGT ƒà@p·ãM‹ÆÐ×yîm=Ê”ŒrØ–i+? ë”gJ–E!Ì"]XÔ2- -óGáˆÀ.¿kÒ5×V·=ûCºcj8—ƒ¥Üs†7‡AÇü¯u iTºrQT}ýFâÔ“pm»³N™¬-•¶uonôÊË•ôÇ?þq¼óï,toûÛñ›¿ù›øÉŸüIü«õ¯T Fž¯Ð“Ñ^ÆUUév´ÀO¡¤µµŠ]Û-oÂRS÷Ú)°ŽÛÑànºB$°àlù«#„ËÃÚ²¶\Úå«é¶+D,Ö–­g(C»AúÖõh@hŸ®gu%Ìu?°ú6uV¾Yf³|rÙ+è×½îu… ~ñÏ<ó ¾ïû¾¿ó;¿ƒ}èCøÚ¯ýZÀÓÏ>÷øßž|ì <ùØÔÝÌ5ß@l»ÇîÙ–-ÑŠ¡FÞoNÿ@¹åMío~ `æôPÐÀnYÙ•o%Ì­épÞµÁÂ7ÍyÚ Ò–û&ÄÛnÎÒÅR—þ=Êú·j0GŸuõp×çÔ 6˜5Äuú^b \wC?’_ùàÒ—°Ã/WЖ<õÔSxê©§ûØÇœàчÆÛ¾ú넉¸Š–#6Á¨ýѨË¥v]ó9ЃwëÖnDPWÓzÃô.JÔ™lh;Pau· må#L–4‹´vypáò(u=5ò«ã¢^é—®§ZÓ÷Z¿3ƒ¹vÔîËbÁÙxá©“GÛß•±zs«‡÷z÷B×ÀaH¦;˜âezC>ð( Ãßf1i‘'(šîéÞ§B^ïSK£L/ªcyÛ¨'îÊ ÀÒû\,ÌNEž Pû…ä£už`¤@-¡,aìÍé•ðÕ¨SºCjh—þiܽ7­9߭Ѓ6i kÛ¢ è¥Ù.‰·t:?òbåU‘ èÝbzžÅàJ¯ÛŽ”qÜ$é j¿[ÛTÛhºU¦ïî$†ÿ;êYÅZLHÿäÇY‚œ*ˆ­p¶Ù>@º;$œKŸµvøi{µ[Ä`,¡\Ïþ0Ü3)° µ¿zËýÑøhˆm Ÿ/1‹4Ìt+Þé^ﻪ2½[â­Ü `ÇíŽû°êüÀ¨¶ÁF»Băõ6tªU¢ŒU=.€.¡^½Ëiì%{ak?ÒúGv¸– íÀy°QZÚ]jKº†t dk`±iË7­Ý#²,‡z懆²SyÚÛé~ÌE^¦§eú$ÙtÏ–Ððܪ»wÛ÷ð`( ÝJÚ?mÆ+!¡'Ç4Õé Ø~ò¶'00ÎÀщ‚%úŒ#Îá<„Ùˆç7 õô<éŸòUCƒ9l›k´¶ªåL•éJ×°¢yÛªîYÚñ³lñŒZuÐÉc£Œ:2ž€Î2½W˜QzÆ=0KHúVÝÖí¡¿E¾§Ø@–®hÓ·Þé·æ–¾ZÌ5¸ËäU1b®>oà¾ô,å#Ô]°Æ#Ä#¼%ĵë£÷RŒí鞟ڲ´ýoé ,¶a=î¿Æ†ÎNËGçvO›âez·ÄÛgp–U=×h»Ê#°Þz´Ž·u5bó/‘µšê[“ÊMb[ BF¿|ÞZ}, Ü,ó±N)à.ÁîÌ£ûÄ¥˜ ˆK[îËGmV¬~CѲ¨5Œ-kZƒZ¯ bŸh÷_˜éÝ 1žt– èÝÂðôÆtŒ÷Àu´ Ý›0N@ÞÚF¬Û;¶N>µ“q<.YGêùÂõ!ëér};K<³Ð´ÀͪF™nylåÌo pV8$x_³z¶Ê=\HsåÖ#3@lX[PÖ–¶ì–nOÜÓËåU™€Î2½[¬®‹FºÛž^[Õ-ȶ¶¡Ú›p¶@¼_~²>û±Òj‹Ê†°Çcl«÷PBYàÖèf¥•[³@Þ¶1ë×LÒkTzJ– èÝÂÈ>è^· l“-©!p‚á_‰mÕ1ÊØ¸½X쿺Íõ-X›û€NæQDZL¦x™€Þ+ÄþsÅêê­âV…´c$‹—CÚ…ý8b– §P7¶'‡ÚbnŒáWV´´Ü{ãþciµÒY—C¿ÐWp¯ãŒéö]ì©”¸E®tu+6tõZpÛ*Ïù¶mm³§/ýévyû8ìcvJßúM­sÕºS& ÷Jü¤Jë~IËQÍÏHŸ$Y8Ô yå¨qJ» w'òä|iRz=”ä\ÿÀÐl•é:­ò‡žë„!ò9ÍáÂä7ëùѹN)q ñ44°‘.‡uÙ8¨Z­Ë+·ŠyŽìíŒOŠ;¥^o¹òY› Ž2½W @s£ïrÙ+V‰òA÷Y^ Ù³=ŒŸ¾äªÂêáÌÎyHŸ1°†t «ˆ)¦9ÝX=œã@옥õÌr8Ê𷪺¥Nœdk†‰^x ¨b n.ò9­‘1š®±R×ô]ÚbÃL´{¨Ó G m§÷ÔíÁØÖï«3ez¯X4T~+,°!Þ›ó$×áÜŠhã´€coìÊ&ÛrCóê¸uzu€[E>}U3| k¾õ4² ,uúíB àÜæ ÊCª­­o ì2g¥jXY[ÚÁÔ[ÛÛæžcêýÆízöY¼Ê2½W*@‡Î$óCÐ&i`ƒQM~I˲MPçÜØÒÚÞ|9ÂÆkr¢ýó.^‚üÀ½rˆ½ŽWçd×ppìPMq,|Дâx±X@;鸺r{=œ®áÜšwPÚ¹QgÕ‹ÿgU§å {m \¶ Xø…Œï¥l 0½_ëŠ FDPp¡õF¨Í²x´3€}].>ÁÍmp§¢vkQ.?0¸",Ü ~dñóºf]<Öt=(ç+p[ëydHsw ´¤­•øÊ¼”ÓqÓ‡¸õÿº]„>ÍÍòûÜýÇTë®¶L@ï¿$š— Zt‘IDAT؜ȷÀ¬ó§@¼°#xÔ²¾ã Þ*_¸>¸†³å"ÑÖs•fp -ÄÜZ.¯¸Ÿb^ƒ»†…Û& ¦–c– 8 c”\º¸è…˜lP+ -K»mUoÏò•/ƤTÁ¬­5ÔdÉ8ÛÖúvÛ~zo› è(Ð{%º8€ÜÊõ7 Ííò8Ãc7¸Õ>,‹Û©²h·ôÚrî¹D4›ð†ø` lj±?6Ž‘ÃCŒÓï ùÞâ|§s&,qyÍX.æÒÚ.Ëu;-{^ϰÖbK¿o;þh·M¿þ8¨e~:Êô^ñ«Â{ÑýICW¦+o”ãÿoïÜb³*º>þž‚Är(7€-"B¿¨Á ML” ‚è"1¯ ±±â#&Â1‚Fc”` ¦Q±5±‰b¼ùâ'Šá€!êW£ ð Rx¡Ÿy+µì³×{ñìÃÌš5³÷.}¤ÀüÉfϬY3³¿½:ûðè µµÉ£g^  Ì58©õ,iѦÀYû<›j·øX¾ÁY(QyÈ9¨ü'2¨#0sP vb#ŇXyjRþB‰"uíâèyâ`êpŸûÈrß Ôìð‘f¹^€»íòãpm»¾åWRgnƒ-/—ü]v¤9ðn‡,ÃV|4È‘nsAÛ:B ¬É8/ãC$b˜K“YG¾*¤™úÈv g!ÒNÞ2/¨DN²‰¿\Nf‹¾ûƒ57¼M‹Ü‡í‰e×e)ó ŽäW ÕtNXÇãm’"n)âŽ^|Q}2›Á™T³˜¯ZÑvxËf[’Ÿt$h‹Z[[±ÿ~Œ1k×®Emmm¹ ÐjÚ˜SJ¹2'¸ON°%› Ö"¨Õ¼;ÃL‚²n5O,ê&!ªæsÕÌ1kG¤nDÖ*Ô-°&’íÆ…Ë2Wë;/ŽVH›ûS}#žX>ñ#9 %Ïë:쯘< ¹< uuu¡­­ Ó§OG±XDMMMRh4ÏKÇš È®2 ¼jšÂŒ ê™ ­Nd‡‰vÃQMó9™¶xH 0:£k[Þ2†M”ÕqjcH„Ì~¤‰LPcÙlžå"ÇÓê›"´¥}‰”´«œû0¢D¬ÀúzvfÖz(Kºî}üøq,^¼X³Í˜1ÕÕÕhnnF{{;ÚÛÛÑØØX.T XXgY^ÇiÊ~BByfXG¤à¶pàU(Gy-M ð\ð¦$zæQ·r3‘ƒ[²C" èZÚ²<š»xá¶WVˆ§í¿Ð.½_>lHIë>”ö—]š§•<å¼Àц—ôäÉ“±sçNÍÖÙÙ‰ƒjkkqèС¸ìü…?ðßÿ³¡¡a¦M›d6Ê4cÜÍy§D+êÉÆÍçÖ4évÛ‰M+þ¶?Ó$c¦°9¼%hÅvÂY"lÆ6(/ΰ¹ oþdHÉ’–Àl·3¢Nƒ²ÚO0«»Ìy¸ÓâŠ4–²]“¥ìï€ðwܽ'u¤ëÐ’êëëqË-·`É’%èîîÆ¶mÛâ²›FÄœy3J%åÈŒ+éæ;±|$×±h‰2ŒŸPq¹òÈ/ë‰*ÀÀ:¹à¢Í)„ˆàŒQ¶áÃá¿Ô¢ÀV»©HæPH ´y´->{ítü–zøò Qbs:L[?(;mŸ¹òii×?¹Í%rzåŒTØów!û!~…€Fé GK ×ùÉJvgœìdÀA{Š! &¶WÖy”ÍAM`¯œ§O"À…§BÔÈ[K[`Í£li$-²6ÿ³]Ô$H§å]`N²q—üÔ¹d#KyZ}¯XÐ9Å-Sv÷ß–§èC!|HÄðÆÐ‰ôtH¼l®ì¤œ’u³åňÚa[î‹Ô›®<.cî²ù:–tN©€ÎWW>›/¥”gk‹[ì­¦K?8µB•JŒQGã*¨Å©Tø¨íÒá·:øÐGZ”¤I†w4T¢jííEi¸$ÃPˆäÆ éVNfÚ6Å»Éj ¼gÀZ‘tN¹mfÚq™æ“Í× `÷Å$ײ]¶J¿)g'®LéB!N¿=G Ì *ì#‚„ „òÔ”¢tYR¾ÕA}ТgiÌ:´aDÖi÷‰ù(MºIiàØˆ9]Ã#Y'¤ä/ÖÐNy@ç” Ð<­çMê_óM0JB­,Ç´žVê’š—Alöt›‡d7×^†5±¼:”¢j¿ 8R±¼Ž4¢|ªª*C+ˆ¥0/=Š˜]cÖÂÍGíyj9KPvFÕÂ)ä|»Q³;`ùc\.8§Ù6ôy|›§½x@ç–èþ ¶ßz¶ÏmÀÎúKoY–ÏõaJbKmó3%Ù9”%oä¤Í“¥2¤å)œ€ Ú«ÊùÈFÅp^U8)ðŽ_‚!IyôütüºyJ”íµm‚y2‚¯k„¤EÒ6¨» œÒ©:Á¸÷áå[6@;áG67¤euÕyàXŽ8M.Ÿè6ëÈýªe¶|âÏýLxØ¥–±º„‰â¼í¯zõþ£–cY!8îE`Àå¨=ŠÆƒR9_Š`¯Fò*à£*ëxµ4I vEÔÇ®3OÊŽ°½(“áÀNÒб< sŠ:íX³ýÊ›-Ý_?Ûî6úÿ;ζõP[%Kž÷ëF»ZÂSÉp…ÿÙÖ#€ n‰-ÊO«ª@·›·A"C€Sø"ó‰>Â>(*Ñ{Ôhˆ†Ø¤ mHpîGT·§þ}V`#GyZÚ:–tNE€îd]>Y€ì:L;9|í¿ùÜŸåRÛ³­7˜/ß&z ¯#ÙHËGÀ´­s.a2E‚=²‘½žu„!‚¶­GðV#xR}Õòè·”6(ÓTÎGPÀ7ŽãpVÊ­ o›l™Û!¤½by@çT€ò  +¼ÜeA†zyŽÿºÁJз‡%+ç“í`Îj‹ò>‚ŽåS„<4Çdt"qù¸Õ뢫Ÿ 'óN®ur¤ímGun¤Hª“dbÙ/Îu`í Tòö}äÚf»™Ë\uòLlû ým}4[¥ eÆv.(}Fi*§½y@çAt@é<“|€Ëƒ§yò“¥ÌfO‰RßÕ—¹žö2õ¶¤ºmÛHNpmÿî£ù§ÍÉ’|¤|&ˆA¿‘kL$Ûaø¸‡©Œ`–/wÊ2¦m)¯ö%Ú•´Ëæ•È:§  ]öåNi&—ËÉé+žß+rAÚõtV@d]žôu Dæ_ÇØ2ø™ŸàŠŸôÚ—ÞÔ9«j+#¥Ì )ÃFñòf`_[¿Â2fm˶^RÚÖ^l·lcu›ðv½< s«ü£Ÿã`–)ù‘ÑFÛt¨Z¬%+Xùý$-בüx’/÷w•ñuNŸô¿BŠù@©<èÀÓQ‡´%`/)eKëSôOM'¶’’+(“úX­Ú»:—ÀÍ×Ê´IÀ×a.‚›Ñê½%ã>É6Qd)hm:kÃ*K³Vh¥BœÏc?JoÃÚv²yë¦ÙÄrOgMйÅ %á„ ?íÏmHß””pW§ÉòQsJ@^*ωÛJ!ØK!Ê# 'óR úȧ–—PЇo¢—å(,'¥Ìµæê¶7¿Ý!= }ÃÚåIо“B-e|OÛLºó£I ì™àÈ–Io‡4ßÔ¶Ô¹p¡ÊµÒ×»< sK4 ×f—ál¿Õ—u4Y‚²„9µ,Ï{Åî/‘2O€ž€=· ô>Å–LI>PÒ…0§_R"òh`&þõ;}ÏA)‹|Áí\B[zy~¤5(ÆF™í¸ žÚO÷ã¡ÖíŒùäz—tn¹ÍóYÍoJÀÎr‹PllR>¬UTʰ6óæW„H±›`/OEàîcû§ ܼш»ºÍ¨‡à6ª?<|ˆ)q‡Mx£Éå<Æ+IyVß´|šO*„Ë#Õͺ|Љ< s«]NKïÕI Öa⊜ݖl“nï%@vEØy&c3âæåчk2|txÛíú6 ¢4é#Ùe›ùL‰¶í"Ðó2õÛ˜jX&íß¹–å,·Ý•t5Fé®¶r'°S%ïÅ ?mxy@÷C”7›b5mæÍ÷Øì¾.(ç÷sEÓi鳫p¶ÙúXÞ6`WáË£n›-/ÿ¢½ô«¬†O´ox^õu½~Ã÷ôrBùâ»–}l ¶£Ø 2–KU,u²ÀT³[2¬Âx·äïAÈ:·ÊCÒKÃrôlK§™·©ƒ7í@ó¹Øî‡êÜv–|X$yöC‘"ñØf¤ÎÆÏÓ>Ž,”“_½žtqàœÞÊC=Z,ú1ÀŽ’ÃÂÀ‰I§ÍRfuÍAÈ<0Íâ«n/h«ž|òIÔÔÔàôéÓxýõ×1~üø°¤€_䆩HÞˆã2ÙÀlú¸‡Dÿ:| &Ç~DÜÇ 0Ü?Ó¿tbì´‰ÌOšv;´M?ª=G»P=µV,#þë¬bÔö›Q‰½ï—ß1¤þÆ wÀšxZض ôëEk‡Æ~b'b>污YšOxÌJ(Ž,jå’?û@«2/§²Œ›ŠÃÜžXûIZêÇM×kUЂ~ûí7ôööâwÞÁ›o¾‰`Þ¼yaièÿ‚ _>—ÓF´d9Qÿu¤¦i6гÂYƒt®î£ÿ±Ó¦0ßÎ’Ýcâ ÿïTOçí‘´i£qíç°Ù¤ürkéÄ9 ©É|ÌMX'ÛÇi‡>Á¯—P¬îÜæ©“Üzš~¿ŒÛI-'°:ê\·i¸&½<ú?ø« +Bo#ª_0ê]ŽâÛ^ÐÇÇâÅ‹5ÛÂ… Q,ñÄOàØ±cøä“O”ÒÊÏ3«7 ûÉmÙ–DÃU† >yam‡wÒ×PÕ†9àž›7% X#{5š¶H< Úi à&f³Dà6`‹°&¥½hûôˆÛжíÓ"í´j½ÈÖî3Õln9·]Çr”®Êè+åõKËÏ+QˆþÀ]WzA“:::ÐÞÞŽW^yŸ~ú)Ž9‚gžypÏ=÷`È!1bF…Q£FUtYΟ?_ñ>|_¾¯+Ý×ùóçqþüyÀ¯¿þŠ~ø¡b}]Mò€ÔÓÓƒ¦¦&Lœ8'OžÄ† pûí·_éÅòòòºÎäÝÙo ¼Z[[±ÿ~Œ1k×®EmmmÅú€^x_}õvîÜY±>Μ9ƒÕ«WcذaèééÁöíÛ1tèÐôŠ9ÔÓÓƒ§žz 5553f ^zé¥m_Õ_|÷ß}}}˜2e Ö®][±¾ ¯¯<òfΜ‰•+WV¬"š5kpöìYŒ?ëׯ¯X_§OŸÆ³Ï>‹ &à÷ßÇöíÛ+Ö×Õ¤bº‹—ªèâ–-[0{öl8p b}uuu¡­­ 7ÜpŠÅ"jjj*Ö|þùç¸í¶Û*ÚŒ?­­­hiiÁ¸qãpøðáïcÇŽxôÑGÑÒÒ‚³gÏ¢³³sÀûˆôÀà­·ÞBkk+öìÙS±~"½úê«xì±Ç*ÞÏG}„£G¢ªª cÆŒ©h_À¬Y³°eË\ºt)î¸ÞuÝß$t)ÿ ÄíkÆŒ¨®®Fss3ÚÛÛÑÞÞŽÆÆÆŠôµ`Á|ûí·Ø¼y3Þ}÷ÝËîÃÕ×Â… ±`Á|÷Ýw¸páî¼óÎë/Ò©S§0kÖ,À¤I“pòäIÔ××x?ªZ[[•§}*£½{÷bܸq˜:u*º»»+Ú×áÇq÷ÝwcÕªUxúé§qüøqLž<¹"}Íœ9?ü0öíÛ"úÇÆÖ»< šœ8quuué'ÒæÍ›1lذ9\ÚµkzzzðÙgŸ¡«« óçÏÇ”)S*ÒW]]þúë/åãïܹséÚÚÚ°zõjÌ™3«V­Â÷ßéÓ§W¬¿«E~ :§þéˆkÖ¬Á¹sçÐÝÝmÛ¶U| æÌ™3`HúùçŸqï½÷âñÇ,_¾·Þzë€öÑÓÓƒE‹aôèѸ馛ðòË/hûªÞ{ï=<ÿüó˜={6ªªª°uëÖŠõiïÞ½øú믱bÅŠŠõÑÛÛ‹E‹aìØ±èëëÃo¼Q±¾~üñGlܸuuu8sæ Þ~ûm >¼bý]-ò€öòòò¤ò7 ½¼¼¼©< ½¼¼¼©< ½®ZíÙ³÷ß?–.]ŠùóçãÏ?ÿ4|N:…7Šõ—,Y‚‹/Vz1½¼ú-h¯«V…BóæÍCss3ðÍ7ß`éÒ¥X¾|96lØhnnFcc#º»»±nÝ:¬^½'NDoo/æÌ™ƒ>øà ¯…——]Ð^W­ˆü1±oß>lݺãÆÃÈ‘#qôèQüý÷ß8xð êëëQ[[‹M›6áÒ¥KhkkÃðáÃ1cÆ ìÞ½ûJ¯†——Uþ9h¯«V…BsçÎÅÊ•+ÑÔÔ„_~ùMMM¸ùæ›cŸ H¾]ùÚk¯áŽ;îÀƒ>¨®®Æüñ/·—WVùÚëšÐ¦M›pã7bÙ²eX±bž{î9ÀèÑ£ÑÛÛ‹ŽŽ´´´àرcX·n.^¼ˆC‡á®»ü¦^ƒWþ9h¯kZ»wïFWW.\h”­_¿MMM˜4iÒX2/¯tùÚëšÖìÙ³ÑÐÐ –Í;×ÃÙkPËGÐ^^^^ƒT>‚öòòò¤ò€öòòò¤ò€öòòò¤ò€öòòò¤ò€öòòò¤ò€öòòò¤ò€öòòò¤ò€öòòò¤ò€öòòò¤úJ9—e7%Æ~IEND®B`‚mpmath-1.0.0/doc/source/plots/besselk_c.py000066400000000000000000000001771316273626600205310ustar00rootroot00000000000000# Modified Bessel function of 2nd kind K_n(z) in the complex plane cplot(lambda z: besselk(1,z), [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/bessely.png000066400000000000000000000463121316273626600204020ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíw|SåþÇ?Iºwi)³-P¶È‚ˆ€Š[Q¼z¼àÑ‹W¸êUAQÔ+(ŠÈP† ‚LÅ+KY²Ú‚ºè^´¥3MÒ´ÉùþþxHÒBW’“æœçwÞ¯W^“æœç“¦Ÿ<ù~ž¡"¢ŸDAAAAAARx€™ów7DAAAA¡>jw7@AAAA¡aƒVPPP(ŠA+(((HÅ $ŠbÐ E1h‰¢´‚‚‚‚DQ ZAAAA¢(­    QƒVPPP(ŠA+(((HÅ $ŠbÐ E1h‰¢´‚‚‚‚DQ ZAAAA¢(­    QƒVPPP(ŠA+(((HÅ $ŠbÐ E1h‰"iƒÎÍÍÅÓO?áÇ»») ­Ž¤ ºsçÎX³f ÂÂÂÜÝ…VGÒ­   ðÿw7Àbbb µZ "Btt4***àïï””” ,,L¶ÇŒF#"""$ÑW«¬¬I¢-Š6ûŽ¥§§£[·n’h‹XÇÌf3ªªª Õja0pþüyw[œ ":KE§ÓÑôéÓ)**Š^xá2DD4bÄ7·Ìµ|ñÅîn‚KáYÏÚˆø×7nÜ8w7¡’îAûùùaÅŠ ç™Î;»» .…g}õ{ðàÁîn‚KáYÏÚþõI Y´Êžõñ¬ à_ŸÔ¥A+!¡¼áYÏÚþõI Y´Êžõñ¬ à_ŸÔ¥A+!¡¼áYÏÚþõI Y´Êžõñ¬ à_ŸÔ¥A+!¡¼áYÏÚþõI Y´Êžõñ¬ à_ŸÔ¥A+!¡¼áYÏÚþõI Y´Êžõñ¬ à_ŸÔô‚ýñÿ!$4›ü|À`jk“‰ÝÚ´:u¼¼ÜÝJÇá9hâYÀ¿>©!Kƒæ-$¬¬þøHI’“õÈÌôCMMÃ?¯R;QQìÖ­0f 0z4кmw½^Ïí®8ôÞ·ÏvÞ>}€‡bõŸ¡Cíêaëjt(ÒÕ»ë‹Q¤+‚Ád€‡|=|áëáËþíÉþ憞a=oñ’TÞC4ÞõI ¥Ä!"éé,”;y’¾X¼xæ×—2A«–/gmÔ`ÖãŸkб*ÕöC;²äòöÛqãØlgËF#«·œ> œ9œ8$&ÚïÔ‰õĉÀ­·2ÿJ±®gòÏàtþiëýåªËN5G­R#:8=ÃzZoýÛõLjN#6n" &­ æJ3ÌZ3LZ„j 4Woì^í£†J)ûH©y‹,{ÐR 7nfÎdÆ7b«ýÚ]ã½J\\œË'úšðzïÿaΰo Þó+Ô‚¨þTDñø¿ã¶&Àp/ñëÅÞÞˆÓh0xæLÛ±´4`çNv;vŒ%›_~‰¼NAØùè8ØÇgt©ÈªÈªw*Jƒ^a½Ð. "ü#ØÍ/Âúo_O_T›ªa¨5°{“†Z & u…H)IAJI 2Ê3Qž½i{­çöñðÁÈÎ#1®Ë8Œí2Ã; ¯gØæ*3ô©z’ Чè¡OÖÃbÀ¹ÔsˆÑÅ€LÔâ—D¥QÁ#Ä>Ý|àÛݾ=|á×þ=Ø¿=Ûx6’V¢5Þ› 6”´“0g!¡R±RÁ¼yõ:~ÒÂdbŸï½ÇŒ""PûÄ?°Ocöê>ÐéX¦÷ñǬNÝš»Ôä?±ã×ÅØžÿ;N”[«èíÕÃzÇÐÎÃ1¬Ó0 h7¾ž¾N_S_«GZiRJR\’Œ“y'q$ëʫ˯^[…Þ%½ñ@ùž;mSÛœgnð\j5á{lOÜŽ ÅØÁ KP®î†û~½„¡§rX“„ïžéL¿ÁœÀÏÓ7¶»7¶»@¡"¶‰ÿKDáBxÇyÃWg»VªeeðîîèÁÑïßž¾ðëåS° þþþv·BM~ ë•§¬7ËÿK~.AÉÏ웣Ú[Àa̰Ç#d\4¾­SGkÉ{³¦(-e·’Û}Eêë øø°›åßþþlØhûö€Zùì±"ËôC=„;v¸µ W®>È2µ˜–«õè!ι“’’Ä b¹í»ïÚŒyÂàw€Q£}ÚÑ£¶Ñ*«¥¿ÿ>›Tã,IIIèÞ³;v%ï—§¿Äï¿[ëÑõ~÷yÚ `µY"6 gùrà§ŸØ0>•Š‹óæ±$ÖIˆÚ“ZýX„â-Å0æ­©½Õ¼)úAzüÙñO¬Æj¤èSØc*5ÆwÇû=އz?„¬BÑC4³Á í-*U¢âX*ŽUÀTf뤨ýÔhsW„O Gؽa.-‰Ô}o–”°q÷uo‰‰ÌˆÅÇèڕͰÜbbXvÜ¡ƒH"öž*,dÁQn.ûƒ0ÓV¯–TZ–íî¯!™™Àw²Qg#F?ÿ,Žq‰NB›Åb™~Ç̘o¾¹EO7›Ù¼7ßdŒÁÁÌçgÎd=!G(Öã븯ñÕ™¯S™ˆŽÆóCžÇßúþ =šù”ËËV¯V®._ |µµQ"‚öŒÅ?£èÇ"³¯š² ¾%mîhƒà1ÁµºÞóNæÄ¦ó›°ùÂfkPé¥ñÂÝÝïÆô!Óqg÷;¡V¹¦+HAŸ¤Gű ”í/CéîR˜«XÉE¥Q!øÖ`„O Gøƒáð‰òåš‚À²Ý}ûجÕsçØÀœkñóc½à°06¾î}p0{O @u5»Yþ­ÕYYÌ/‹˜¢£›nbKŒÉ&_5»hXu5 ¤Ïže'¯{»vÈè¿ÿiÅÅŠA;Ëý÷ß]»v¹åÚùùÀ-·°ßªØÕ§ƒX°€M_4›Aƒ€Ï?gÓ ¬Œùúòå¶Ó­X Þòsœ½|Kþ\‚Í6£&·èLˆ™€—†½„{zÜÚίèÕÕìÓãÃYî»xûíf¦;¯Ãå —Qüc1ª3«­ÇƒG#ⱄO ‡w‡–à0 fÎ:ŒMç7aëÅ­(Ë(:=ÚôÀKÃ_´ÓädŸ6;ŒÊ”áÊŽ+¸òÓÔÕZ €v·C»´ƒW„}K æå±Y¯–›…`04 W/àÆëߢ£/QTT°‰]MJb#£.\`_ ÞÞ¬g}×]À°ë«®ÛÖ;8zˆec_¯%8˜uÍ»ucµ•¶m‘#1míZI4ˆè,ÉŒ©S§ºåºEED}úDûQm­[šÑ4»vEG³F}ö™h =wŽhÔ(vj•ŠhÆ ¢ÒÒ¦Ÿs¡è=òã#„ù Ì- ¢—w¿LÉW’EiUW}õQTk@t×]DÇ×û1¡V ¢­Ek<ÄAë-vT,å|–CÕ¹ÕN7Åh2Òç¤[ÖÜbÕðA½ø¿)±8Ñéó·Á$Pù±rºôê%:Ñý„Uç!C”ðP]ùå µB£ÏOO'zï=¢~ýl/'@äáAtË-ì±?ÿd/{kS^N´oÑ‚DwßMJÔWèI¬§oð]òèY¿ÑQXÑ-\H´y3ÑéÓD%%^Ã]ÞÒ²4èÉ“'·ú5Ëʈ b¿ó{ï%2]w-Ngÿ“rrˆ~ØöÆœ4‰(7Wô¶™ÍD_MÔ¦ »LDÑ·ß ×üͧ–¤Ò”íSH5_E˜êðIúüÄç¤5jÓ×F#ÑêÕD]ºØ^ƒ;î š]G(kQ²êtÅ\–”°¯?ÓÚ4Äœ?OÔ·/kTÇŽD‡µz»jL5ôßcÿ%ÿ÷ý óA—t¦­¶6X³ÔéØ7ROOÖä~ýXÝÈñ I0 tyãe:ѳŽ1ß~–Ê:¶UU}ü1†eGöüóDÙٵ͂3!šY0ÓÿRþGã×·uȇ!ôúþ×)·¢ù9ùùDo¾Y¿æ:në`˜Íö·§¶¬–r¿È¥Sýl½ê ~(yz2UÆ9aÔ:ÑÚµD#FØêãÃ>(ÿüS´ÞrKvÙìlÅ [Ì{ï½GÇŽ#"¢>ø€ŽZþºÉµ/¢ ØBÁI“Zý½Ò0ß}g«ÇÝu×õßO[ƒ©ï—} óAïzÐëû_oQïîâE¢[oµý>ý4b‚I Ëß_¦“½OZ"~|<•!¨¬dßD‚ƒmÅÙ—^bnçFâ âé;þAžïzZ_ó)Û§P\~Üu?›@ôÔS¶úªFCôÄâå¡‚ÀÆV'NM¤Ã>uzÕÃÎPþê|2i[ø-îâE¢—_fI]Ý®ýgŸ5? ÞÅèkô¤«Ñ)ÝRÖ­[Gßÿ=]߃>|8mÚ´‰vìØA[·n%"Ös±|½´Ž›;7öêp£Dº|Ùùó9rÌòa{æ Ñüù”N¥"úðCŠ=}ºUÛ’v9&o›L˜Îzt# ØÌX»ÎwæL,}û-Qhh": Š¥·ßŽ%³¹éç fö/ÚO'ûœ¤õXO»±›âÇÆÓ¡U‡Ä×[ZJ‰3fÎߟ X//¢9s(ñØ1»Î+êï#·"—žúê) ý0”ðsAãÖ£O·}F{öšéæ›ÙkÊÊI±ôï8àº÷Æú•ë)gimŽÙL»±›â }í÷5%¿L±;b¯î¹s¤[»–hÌнjʉ¤{ä¢C‡Ø{\ìße ‚@?ü^ú0ùMñ£‡f=ÔêCx›C²­Óéè‰'ž ™3gÒ믿^ï1W}Êed°R˜ZÍ‚d·R]M4e ëeíÞݪ—7™MôÙŸŸQà„ù Ž‹;Ò¦„MN Á*-eåFË0ÖQ£ˆþúëúŸÌl¸Üɾ¶sܘ8*;Ø ÃhŠ‹ÙpEË7V7ps¯ÊXEËN.£˜¥1Öò^êE²‚:wÕÓ’%./ÙÖC*ÿ£œ.>y±Þر”ÿM>™Î%³×1<¼þ°‰>"*,l½†6@~e>}tô#곬õµô~Ï›Þ>ð¶ÒƒW„„f3›la ܉.;›Í«ˆ"#v1’TœD7}}a>H³@CsöΡÊjñ¡C‡tÖ°^£!š3Ç6¾¼t)tÚfÌ£ã¨ô÷ÒÖ›[P@4k–­nÌ¥f\ÐU3íJJˆ-"jßÑD轃ð”m:yøÇáôö·é²ö²K®]—†ôÕ”ÔPΧ9t²—-8‚]”‚Y¤UwgãÛöís¬.F“‘¶^ØJ÷~w¯u惆®J_žú’JõìX1hpÅ×¥Km²+§q7KJ %ZÖÒ:´Uk¡fÁLKŽ/±NO¶jýuYü‡ÄÄDª­e¯¹eäÈ-íp¶^O¬t¿ŒùZrrX·ßÃ5´M¢?ltBØ3íRS‰^|Ñ6ªR¥bKK>Lt"ç$=¶å1«áx½çEOÿô4/¡‘_´§óAí?iO/þïE:“wÆîoŠA‹€X!aU•mæoaÖ­‡ °E_,#5öì!"×/é(­8½‚>°ö2_+ê5Ílößñ¨ã´»éæ%=ŸDÕù×;PJ Ñäɶu#‰^{Ím3Ú›&3“èí·Ùä!€tQ‡õzÕ !Dqql9Ϻ“èî¾›hÿ~qÆß ‚@§rOÑì½³©ó’ÎVS/PÓøõãiÅéTTÕȘúòr¢Ù2p–OL€t‘‘¬KŸçx\ª8UAéo§Óé§ë™õ¡ÐÅÉ©pS! ¯ƒ.]¤…‡Ò ƒê™rÔ§QôÊžWèhÖQ2 Žû”šAËrG±ö$\°˜?xôQ`ófçÛef3ð lû¦°0¶—ÐÕ]TDÝ“ðr*rðÌÏÏ`ú~hTügô0ïÖyðÒØ·Û†=”ýV†´×ÒP_ÐŽ×bü²ñðïÓôæªiiÀÿ ¬]Ë6"õöž~xõU¶o¤0™€_EÒâÅèýÇÌÎT*¶7Úc÷ÜDD °m¹~=ÛB `ºž|xå o_×4O 'rO`ó…ÍØra ªØ~U•·Dß‚±Ñc16lFÄ^†Ï¶ŸØû±¦†=9(ˆmôÄHŠŠBo‘Y]’]%(ÙU‚²ƒe ²>¦ŽT£¼W9.tº€ßñàc0z²­Éz†õĤ>“0©Ï$ î0˜í_é$îÞNïZdiÐb¼ˆyy@ÏžÌ'“’€.]DiZ˨­¦Mcûeuèüö›ëþ2¯BDX{v-^Ùû *•èÛ¶/Ö=¸Ã: sÙ5«ÎV!íõ4”í+Ý„˜ÿÆ xt°]çÉÏ>ý”m³UUŶTºývàÿ&Nd;BKŠìl¶×7ß°7R©<ßU܇Ÿé>ü…þ0@…iӀɓَK­…Y0ãXÎ1lNØ„­ ›QTSj}ÌÛÜ” ÜzÙc»ŒÅð{ž‡ÿ„{Ù§ˆ‹©5×"îRÎo;Ã~‚/£Sq'¨É¶‡–Ym†¡›á£Â9">]|àåïhox:¸Qfƒ1ö$œ:øö[àõ×Ù¶v­†ÑÈzT?ýÄ6pûýw¶7ZœÞ“ðòµùxn×sø5õW¨Uj¼:êUÌ;>âl(z-ÕYÕÈx;… |{ø¢Û¢n8*•Êa}¥¥À²eÀW_Ùö‹ &Mbf=v¬óûá9‹E›ÁüqЄ”¯~ƒÏþ]˜`Ü…(äX®¦}$¼&ÞËv?4èÓÇñx[Jm-pæ päpø0pìûS: IDATÌÚJœkŽ÷ðÄ‘®j”©õž‰^á½Ð+¬üŠýpûèÛÑ+¬:u¶{/I³`Fž6©%©H)IAji*RKÙ¿3Ê2P+ØöôÒxatÈhÜe¸ .@ÛÔ¶0œ6 ærMƒçöñ€w”7|¢}àÙÖjoµõ¦òVAíÅþMÁ\i†©ÒS…ÉúïˆÇ"ðæñ7ƒvg?åΜ† c;q§¦²op­‚^<ôûúØ£3çÈH—]Žˆ°ñ¯˜µgÊ«ËÑ3¬'Ö=¸##GºäzµeµÈþ y_äA0 ðlë‰.ó» Ãs öÏ9M&öÒmØlßÎv†ØKùøãÀ„ À¨Q€¯¯h—l" 9س‡ÝfûÚÌwï¿ðϱ ¸¥b =ú·ë[¢nÁ˜è1Öq|=ëÿ‰Æ\#´'µÐ'ëQ] c–ÕÙըΪ† o¸-¡ó¿:caÙBÅ eÊ”)ظq£CÏ%bïÇ£G•+矹qQYÉvþã _?¶Mrûö þ¨^¯‡Ÿ“[…_®ºŒ¿ÌÀOÉ?A^ù Ž[xÝ^ „jy_æ!ëý,˜ÊLPû©ùïHDþ;²Á¯bè³ ÕÛ¶±oC‡Ù<ÏË‹uNÇc·¡CÅÝ}½´8žÝâãÙ¯3+ ôüÌÊ0wÞÉÊ0ו0ŠŠXi+.Ž >žmŸÞ>>,§g·ÖÖëÙÍ`°ý»¢‚½×"$„½(·ÞÊþ† a/T3T›ª‘Vš†ä’d$ä& C—ä’d\®ºl5ÞsýZ žjO«y·hža=Ñ£Môëža=ѽMw§w?'"˜JM¨Îª†©ÌÁ(@0 #Yÿ-¨Ô*x{@¤GíÞ³­'ž}ùYÅ Å™pÏàî»™Gž= hìû†æ¥¥loøÓ§™SìÙÃþàÁ™ˆ°ùÂf¼øë‹(5”"&4k\‹[¢oq´õ_K }_„ô¹é0f¡Ò¨ÐáÙˆ~'Þ¯Yº*ÍÎ~þ8x™uiiýÇ£¢Xî`¹ÅÄÁÁ¬†]÷F”—׿•”°¬"!™rAAýs«TìW;dH¦Lé#ì¬X1³>ž™ø•+ìVZ -è°µgOö-Í"¶Gö)ádÖØï®Æ\c5ëJc%TPÕëU»2„¥-μˆ·ßξoÙ<òˆ¸íjÂBàŽ;Ø_ö-·¿üⲚJ±®3‰­·^þ>¼íCø{‰Ÿ¢•î/Eúëé֑ᆣ뢮͎Ìh-’°˜uB™Y¿ªà( ó¼~ýØíÆÑ£]ô û¤¸r…Ý{{³…ŸŸíæíí´ÿGjíâTÂ5”””8ô¼¸8fÎݺ±R°ËÉÉaŸ))¬0ºcG‹¾g;¢í¹´ÓvNC¡®]Bº`Ík0®ë8G[Þ(bŒÌ;mµš•qdÃ×VNOg¥Ø” #ƒ•Ht:VÐéØ BCYE $„õ²CCY'´_? W¯Æ5¸L›Z ´iÃnn¤5~w 6diÐaM”šbñbv?{v+”6 Xñ3-!ݼ¹ÅC•ìù0šŒxã÷7ðé‰OÏ~K&,A w CÍnŒæFf؃»þÀ}|ØhFWŽhäݼx×'5diÐ&“Éîçde1lÓ† Av)%%¬Çœ–<ü0°iàéÙâ§·4DK,NÄãÛǹÂsõ Å×|‡û<ìL˯㺑žèòŽs#3Ä ¥ÏÚþõI 7u å{¨,]Ê&¥¼ø¢‹'6TV²@ðüyvÿý÷v™3dgg7ù8a噕²jÎžÃØ.cñ× ‰jÎBµ€œÅ98s9Ÿä z^4F\N3;95l®9}r†gmÿú¤†,{ÐÁÁöÍD+/g3ª½½™A» ½¸ÿ~6ÐzÌ6þËXMp(Ñ—àÙ]ÏbgÒNx¨=°è¶ExuÔ«vOh "BѦ"¤ÿÇ62£ãôŽÍŽÌ°WMc—àYÀ¿>©!Ë´=!aM +o¨T,t &[PaÏà†ؽCé® bjÌ5˜wp>>ö1„©¦â‹»¿-¬)®AÆ[(X]àßß=>ï[CD9ÿµð4ñ¬ à_ŸÔ¥AÛnÙÂT<ø %:‚<û,+gtïΦ”98ÊÄBÝ &µ$OlgòÏ È;+ï[‰¿÷û»-™y_å!s^&Lå&x´ñ@×…]Ññ¹ŽPy¸n<-ÏAÏÚþõI Y–8ì ¿ý–ÝϜ邆³f±µ#;wfSw;tpú´ÙÙÙ "¬;»ƒV™ü39 çfœÍœË~/ÙgpiÖ%˜*Mèôb'ŒHN/tr©9|ME¤©I¨Ò_M‡YgFÀÀô^ß»ÕëÌMÁsÐij6€}RC–=èæB“'ÙJŸ·Þ*âŽR¯¼Â†„Üx#s'SÇ|m>Ƭƒc9Ç0´ãPœyþŒÕœ bÌ:3.>v©3S!T ˆžÁ'KÊœ¾ƒ&žµü듲ìA7îÙÃîx@¤ ®\iN·kèÜ ¾ÌòLÜöímH/KÇÝÝïÆ¶G·ÕÛŠÊ‘ ¦:«ç'žGÕÙ*øtõÁ [n@àq— žƒ&žµü듲ìA7îÝËîï¼S„‹%$/¿ÌFlìØáôXç¤+I½f4ÒËÒñHßG°óï;¯Û'P¯o|c͆(ÿ£±ÃbQu¶ !ãB0äôÉš3`¿>9Á³6€}RC–ÝTHXRœ:Å&ö9½0»ÁÀ¶‰6>`; ;Á¹Ëç0fíäió0mà4ü0é‡÷j³'ˆÉ_s·Cmq-:½Ô ý÷ö‡g˜}Ë›¶6<M¿ëóFÍh>ˆ!òB ò>σg[O <0P6æ ð4ñ¬ à_ŸÔeº±ˆÕŸ5¶W«ÃäåO?Íþ½v-[ÌÃA.W]ƽßß‹ cÞý>¸íƒfŸÓTc1ç‚Uðêà…¯—¼&ð4ñ¬ à_ŸÔeº±0!-4b["Ã!ˆ€§žJKÙJu÷Þëp;õµz<ðÃȪÈÂãýÇûãßoÙó bH ¤ÎL•µ9|M§óOctÔh¬}pm‹w¿n(ˆ!b朿2^íåkÎßAÏÚþõI Ytc!¡¥þì°Aëõ¶0ð‹/O¼öÛkØ™´=ÚôÀÎÇvÚ5u»¡ &çã.Ìà;hâYÀ¿>©!iƒ~饗ЫW/Ö;ÞPHX[ ;„†—É>úÈÎ~Ø©"öOI?aÉŸKæ†_'ÿŠ0?ûvX¹6ˆ)ÝSŠô7Ò¡öU£ÿžþðë-_søšxÖð¯OjHÚ —-[†Q Œ=n($¼x‘ W:ÔÁYØÌ }|€Å‹8£XWŒçy°á¡ èÞ¦»Ýç¨Ä.pññ‹½×öFÀiMÛvžƒ&žµüë“’Å‘‘‘™×ìIõä“Oâ‰'ž€ëj· …„ññì~Ð 1gsøwÞºtqèD„ÿ›"]žò<îîq·Cç±,éhÒšp~ây˜ÊMˆz= E8t>©Áó’•}Ø“·nu¸­ÙåÙ¼(˜TóUt$óˆÃç±ûe.ÄA:s‚jJjœ>Ÿ‚‚Bó4ä-îD=èÆxûí·‘””„µk×¢_¿~Öã׆„‚ÀvOñózô°ó"Û·‰‰À˜1,t"Â3??ƒ c挚ƒ[¢ÛeåÄÞH#* }ì Ï6Ò^[Ã^xšxÖð¯OjHÚ ãÚ0#¨¬d[[ÙÙÆ:Ïëðâß'|ýéûqCÛðÞ¸÷:G]¿„¹ÒŒÎÿêŒÀÁÒ]•ÎQxšxÖð¯OjÈÒ ¯ Ïže÷Úy¢€ØXöÄ;îp¨-F“o| ðÕ½_ÁÇÃñ±ÓPòK r¶æÀ;Ê]æwqê\R…çÙh«uê\R‡ç ‰gmÿú¤†$&ªØKݰ°­`ׯŸKg”—Û¶ÁÁlå:¸¢¿‚Oÿü>>X0vCç¨KúÒAfB·º¡Óœ>Ÿ”á9hâYÀ¿>©!ËtÝÐÚUÞØ¶ÍüÛߨØ<X» “Ï ~ƒ:;t •'*Qº·>Ý|ÐqzGõñ¬ à_ŸÔ¥A× -õg»FplÜÈî§LqèúµæZ,?½*¨ðÏáÿtèuÉ\ ˆž •‡Šû †g}´±Z”þZ Ÿ.>h÷vÖã¼1<ëãYÀ¿>©!Kƒ¶„„l@Ftt ç™üõÛ¸°;ÇäÙøüäç€YÃgµx «ÆÈû2ùj¤µ÷ ðÄð¬gmÿú¤†, Úfe±ÿ·xùæM›Ø½ƒ½g­Q‹m‰Ûä„)ý;‡S¹ E›Š ñ× Ý”võã=ˆáYÏÚþõI Y´%$ÌÌdÿŽná÷íc÷':tÝ])»PmªÆÄÞáïåïÐ9,\Þp‚A@ÄäxÕŽÎ{ó>žµüë“.5èÌÌL¬Y³Ÿþ9Ž9"Úy-!¡¥Ý"ƒ.+cC>"#îöoC›/l<Ú÷Q‡žoˆ¿"ÐqzÇëç=ˆáYÏÚþõI —ô¬Y³ðÕW_!,, ½{÷F\\¦NŠ .8}nKHhW‰ãȶpô¸q-ŒTQ]=—ö Ä'wÄ8¶ò…Êc•Ð_Ô#pX`ƒË‰òÄð¬gmÿú¤†Ë¦zøá‡õö.›pu+)1BKHhW‰ãàAv?~¼C×ü)ù'Ô˜k0ùÆÉðÒx9t ÖÞóŒë{Ïÿû¾ñ¬gmÿú¤†ËzÐ~~~ذaƒõÿ_|ñ…õ¸³88ÀîÇsèš?^øðØ 9ô| µeµ(ÞZ M¦ÑM`ybxÖdz6€}RÃ¥‹%•••áÅ_„Á`À.ˆßuCB// ]»¦ÅÅlx]L e÷õÊ eØ—¶a¾aßÕ±¸…’ŸJ tx²4þ ¯÷Ì{ó>žµüë“. ÇŽ‹´´4cœƒ=׆())N\¹ÂÊÍNÃSãÜþ€ÅÛŠmi|f ïA ÏúxÖð¯Oj¸´½|ùrìØ±eeeøç?ÿ‰-[¶ˆrÞ°°0äæ²GF¶à –ò†õgø[_Çö·`ª4¡t_)¤ÑŸã=ˆáYÏÚþõI —ö W¬X___tìØ›,“DDÀd2Á²G‹¦x[±cí¾–Y0ãPæ!øxø8½¥UÉ/% Bøáõf^ ï³µxÖdz6€}RÃe=cÆ |ûí·HIIANN:„Ù³gãÌ™3NŸ[§ÓY :¬¹¡òóÙŠJ}ú:Ø}­³—Ï¢ÂXQ‘£œÞÖRÞŸÞäÏñÄð¬gmÿú¤†ËJ111ðððÀªU« Óépã7â­·ÞB›6mœ>wpppË úðavï`ýù@+Œëâ\ ݬ3£tw)4´¹£é×€÷ †g}xð >ýôS븄„QÌ`!ai)ûw³§LH`÷Æ9t­ƒ™¬<âìèÒÝ¥ Âî ƒÚ§é—÷ †g}}ì¾NlA,ªjªpgÌN ¯#¡dw Ô>j´¹«ùo¼ÏÖâYÏÚþõI Y®f×âÐ`ÒÓÙX¼Àë×¼h±êÏÚX-Ì•fßÜè䔺ðÄð¬gmÿú¤†, :88¸e=èäd¶@R‹÷êXõç²e€Ðñ¡-úyÞƒžõñ¬ à_ŸÔ¥A—””´¬m)o8P6šŒ8–} AÞAÔ¡¥;Ò6LùÁrhrrJ]xbxÖdz6€}RC–m U* ¤)Ïs Oå‚ÁdÀ˜è1ðP;^ªŒ*ŽV@¤ipiцà=ˆáYÏÚþõI Y´%$ 4M•t-í@‰ãXÎ1ÀØè±ö7°•'+!„Ü•GËÖ¡æ}¶ÏúxÖð¯OjÈÒ µZt:;†Ø90‚ãìå³€!‡Øýܺ”`å–ÖŸþƒžõñ¬ à_ŸÔ¥Aûø°åF› FàÒ% S'àêò¤ö`1èí8ÒD+–€°¥õg€ÿ †g}©!Ùt‡°víZ¬X±áááHNN¶>V^ÞLHXS¤¦²úCí+/$à¯Â¿èˆ.!]l= OÑì3#`P€]õg€ÿ †g}©!‰t×®]±{÷îz·É“'ãàÁƒXµjV¬XQïç5š,<ôÐfäæîĶmÛIIIÖ#îê&±I¡¡¶cW?ùëý\Ƕ؈ª‰²û¹uŸ`ë?g„eØýÜ+W®8|]9Óëõ’i‹¢Í¾cÇ—L[Ä:;wbñâŨ¨`¹‘d ¢³$A.]ºDaaa4cÆ š1c¥¥¥Y›8qbÓOþúk"€èwì¾î›¿¿I˜Z»ÚîçÖ%ntÄAÒ%éì~nbb¢S×–:<ëãYÿú¦Nêî&ÔC%ކˆ‰‰±ö$¯%¸¹™99ì¾sg»¯{î²ó#8ÈLÐÆi¡ ÔÀ·‡¯ÝÏç=ˆáYÏÚþõI I”8ì¥Ä²Öhcäæ²{ úìå³P«Ô¸¡­ckH€>YA/8ü1<ëãYÀ¿>©!Kƒkn•$‹AGFÚuÞ+ú+ÈÓæ¡wxoøzÚßóµ ½µ? øbxÖdz6€}RC–m2™šþ{ÐŠØØéþíú;Ò,+U±UÁð?[‹g}žµü듲4è&CBëÏ€­Ý5¤«#Í` :ü1<ëãYÀ¿>©!Kƒn2$tb‡¥Ý5Ôqƒ¶„C>ïA ÏúxÖð¯OjÈÒ › 1è² x¨=Ð9ÈþçZÐýÅêã7hÞƒžõñ¬ à_ŸÔ¥A7:8IÅPk@AU¢‚£œÚÅ[ŸÌÞÀþ}Z¾ƒÊµðÄð¬gmÿú¤†, ºÉ° €Ýwìh×93Ë386ƒöíéø8jÞƒžõñ¬ à_ŸÔ¥A7Z¦‡GDØuNkýÙ‰€P¨P^ ¯^ðr¼Î{ó>žµü듲4è&CB‹A‡‡ÛuN1FpT§UƒLd÷ý×Â{ó>žµü듲4è&CB ZŒ1Жò†³Í{ó>žµü듲4è&CÂâbÀÓ´o_F™óCì¬õç^Ž×Ÿþƒžõñ¬ à_ŸÔ¥A7±tx¸Ý³Åš¤8߃æ=ˆáYÏÚþõI Yt£!aEÛêÊÎò!£<^÷³ï¹u1$8oм1<ëãYÀ¿>©!Kƒn4$t°þ\j(E¥±]CºBegÏ».úd=T^*øtñqøÿA ÏúxÖð¯OjÈÒ  -ݶ­]çcŠwmi-j¯Ô¯‡TÇMà?ˆáYÏÚþõI Yt£!¡£#8ÊÄÁál@ðÄð¬gmÿú¤†, ºÑÐc õIâ„ÿA ÏúxÖð¯OjÈÒ  ‹‹Ù½Æ@‹ü1<ëãYÀ¿>©!Kƒ;$cš·XCìþƒžõñ¬ à_ŸÔ¥A7:XâèÒÅá6‰Yƒæ=ˆáYÏÚþõI Y´˜!¡@²Ê³á/Ç–%ÁpÉ϶žð õtèuá=ˆáYÏÚþõI Yt³!¡ÃìJ ¥¨jZ¤¿:³TKðëí|yà?ˆáYÏÚþõI Yt£!¡Å ›Zíî™Ú= TIDAT « þö-OZ}êÕúsOq š÷ †g}©!Kƒn0$´”8Z¹][\ Á(ˆÖ{øbxÖdz6€}RC–Ý`H覴Øõg€ÿ †g}!ðÒx9Ô–êl6‚C¬!vÿA ÏúxÖð¯OjÈÒ  (qèkõ¨ª©e ´w”x=hÞƒžõñ¬ à_ŸÔ¥A‹ëØúÑ¢´ˆ%Þƒžõñ¬ à_ŸÔðpw¢ºº/¿ü2T*´Z-Ö¬Yoo›6:`ÐRœE° ÆÏOœu=¤ÏúxÖð¯OjH²íãフ+WbÅŠhÓ¦ ²²²ê=Þ`Hè@‰Ã:IÅßñI*bÏ"øbxÖdz6€}RÃí=茌 Ìœ9³Þ±)S¦`À€øè£P\\ŒîÝ»×{\¬P´I*jÀ«£c!cCðÄð¬gmÿú¤†Û{Ð]»vÅîÝ»ëÝ&OžŒ~ýúaÆ 7nöîÝ[ï9‰‰‰Ø¼y3vî܉mÛ¶’òò €À@k‘””d·Ùбø¸x€P,4ùs#!5/ÔŽ öTÛõܦŽ;vÌáçÊáX\\œdÚ¢h³ïØwß}'™¶ˆu,>>;wîÄâÅ‹QQQ)¡"¢³¸»!uIOOÇÒ¥K!JKK±lÙ2„††ZŸ6mÖ­[WÿIwÞ ìÛ$&-ü”Ÿ½w6>=ñ)¶üm éûˆÝí¬Î©Æ‰¨º)ƒÿT¹Ӡ·¸·—8¢[·nXºti£‹:[ƒvÅ€ÿ †g}žµü듲4è&— hñyœ5hë,Â(ñ†Øü1<ëãYÀ¿>©!Kƒnt¹Ñ€@ÝrIEº"xª=âcß.,\Õƒæ}¶ÏúxÖð¯OjÈÒ ¯›IHÄ ÚŽò†@Šuňð€J¥r¨®2hÞgkñ¬gmÿú¤†, úº°º0™ìš¤Rj(…™Ì’›Eð¿¤#ÏúxÖð¯OjÈÒ ¯ Ý4I¥:»*O<#<>GCðÄð¬gmÿú¤†, úºÐ -T ¨-®…wgo¨ÔŽ•Hƒ÷ †g}©!Kƒn4$ônÙ´ëJ#›î¨A› f˜uf—”7þƒžõñ¬ à_ŸÔ¥A;:kЮÁðÄð¬gmÿú¤†, ÚÙÐiƒvá€ÿ †g}©!Kƒv6$”z‰ƒ÷ †g}©!Kƒv{HèâïA ÏúxÖð¯OjÈÒ  k¤=Šƒ÷ †g}žµü듲4èCB;W²œ+q¸j€ÿ †g}©!Kƒ®:¸›Š¿§?4jÝ×võ€ÿ †g}žµüë“*": `€»R—-[¶`ïÞ½ ÄÎ;±råJL˜0Áúx¿~ý€Õ£¯[ÝNæTTTp§©.<ëãYÀ§¾ŠŠ kϹ¨¨çÏŸws‹lHÒ ërÏ=÷à×_uw3ZÉt]ôz=ž}öY!44‹-rw“Då÷ßǦM›`2™ƒ·ÞzËÝM“É„ûï¿cÇŽÅ믿îîæˆ aîܹ(++C‡0oÞ8çîí3{¯õê»øw=ü…÷Ù_æSŸúö±œ‡‰² IÇg|æ‡Z†SnŸýå_àSßþ½…D¾œ[iJœ¤œ#vÿþ?ËÇþ§OµÅéºÚ—ÛMrUvtìé£×ý¯ÿó2“¥ ôMßôMüÌÏüLùƒ‚*tw<¹çƒr¡åë’'ç6Åÿ§÷MÁÊ’L³i±òj™$åõ@¾²¼Éøš+8ÀöP:½ Õ¤•Ò‡¶¬Å“Ç|Œê§¯ÉS¨Øî¹ãI³“‚‹Ônfu¼&w•ÓX† nàjråî¸B{o}91Þ*øcÇèNjªïx|ièk“A÷Ú³90gVhÌš]håçB#MACЖÍ{M¾Õ¶#9Û 8ŽEÊR†äi­°®°5 ÿܦ Óc!ªÌ[iwׄɒ¦2Z£vS[K®ÇÔ‰‚ƒøÄêªåM«™,õÌ4ÍöLÀ Ð×&_?“º:‘ª.xÙ ­ùÀ"­˜8ê,FsGž‡13­¤¶Ÿ(–'WLhæbUft ÐÃäár.˜b´J¡ö’1å#•CÝSþæfŽZY¥ç?ÞogdP+‚©2O& ô-¼Þ¼JûTNgšúš¤:Nêš\³¦M©Þl$¹ªn?¥¹C5r®?Öí u»oc†.AÐ4géËkWîº2/Ø×ƒÊ±Åzò¡,/Q¦k#•¸|óüä€Xe]c_ô”_2µÿRÇÑ)ñeü´D8Ly­L_ê5èÙÒ Ð_åJOÞ†&G¡ŽÒ©¼•¸„boæÈŸ–ê뙈ÙiɶВÐÔ «H“žÌ­¦ìåý‰£Å šñ)TL3Ý9íîÐb•øíññ`±L•÷A®Ç#fõéJyå<5YX)ÎR‚ã2¯ŒÉÒ Ð×$o£kUh©ÕÇüœã+òèZ—ª6õ¯VßXVü‰™¹^%«rZ€%¥ŠëʱpÓd[“õÚ”ÿqùòZ÷xëß6¢\Þj¹×&7I’²›‚íÉ·”Õ­‡£YæµIÏsÃQZÎ3L{šúº¤`Œ«^â,Á®f‰J¶Ï¡w¨o•8Í\ŠŠÆÀŸO#d„¢Þœ‘¼´Ëz¥rU™cÝׯŸb6äljeîës­¼M…mœ¿Ð÷×Ê·æ::NÏ&Ž’f€¾&%K½cÛhVq ÷_­U»vS‘hÀ—jÎ>Çt”µQб±Ä|€“|h¨Uñ ›í«²ôü»`ié¤PÞ«"LŠQ.~Ï»¹Цíé²Lœçjú!ƒ9ı%Áx™Ü5íòŽAÜ{rä&pÍ{нçžß8Í›WDLõ¯_šºAªÊßøƒ{÷îñÞ÷¾—¿õ·þ–ûÁUT@;¿Ñ<°P54ES5Äh¯ MVÛÈõìZ›©0o6°Š½9·?š *6!*B)Íÿ²0…¹eâ‹üVoà<2hiÐSyñ¿IÍŒ‘‹QÅàÜÄÑ0°4݆ÒéÉ©¯­‰ú M'î('©ÍÝ×óXé8¢Ñ<64tƒþÕ¿úWüæoþ&Ï<ó O<ñD¸ïq*ØJcmc y¨íå«c­Õ–­W²ŠWó¥÷§Ö\k‹m†YÑMiixùËíá°ÕX‡‘Êul Y¹§Ç@lšéxBöº¦ŽRŽ©LG…TÍôÔx©R´ùËtÎÝɤ <Ï[¥nkñ@»œ}Ð~S{ÕcL3@7è¿ü—ÿ·~ë·òc?öcüÅ¿øùßù>øÁ‚*Æhiâ¨$;g-qÇpc(j.v~ž;Ö6Ú©æàµØC)dœcõꨠu)ÔM§ÈØRa5T®«7¿Ô¯Ù<ÆØ0‚Ò¡Œ7R‘élôÔ,ï–MºÂZˆkÐ-…½VunÙQ}éÔeMG¨ä ÍÝ çž{Ž««+ž|òIÞzë-Î/ðýçŸe<ùÌ‹<õþ“6"yeF³ÊQ@ìÒHQºØ×]¦Õ©ÔªÔcuü[Hé[sÑXã†óoñÚþ- 3‡Ä™–"¹Ò¤tÌRo*blkGeºÄ9j¶s;ÉN£ùŒ¼¬ó"™b]¡žÁ|nåÕÿú2oü×WXç.«yyièýÀü?üÃ?̾ðöû=ìý1NOnóG¿éûØÛŠ}L¨QÈ÷ÝnMùåFÀ4bíòðB•p®RÚÇ«“T-qì…Líúr¤¾Å²HÂaeý(€¾îKüRomÊv\Ng¯±ÿf2=Õ;UhÝpÖ#Ô0¥¹ˆq²¬=ÛÉ•9íBx÷‹ïæý/>Åø¿ö×&‹ñq¢ tzzÊg>ó™òmÐEenU\wŒÚiü¢ò¦Z“¶˜ú≒¥¥¼ÅhÊjе¶Lê¢öƒŒšü¿ú:PY-çøºÆ6¤)mrÄŽVJ—ÆiÌJýÑǰMRÊUôüeÙlüE•íXíøÙ»seI´Ëf7»Í}Mò`qŒ M×n”Õ®þG¹ýY³Šì}Fë`‘êæÕÊÞĤ<þ†fm¨n”ò¼±ä;yZe*åÜR k÷ŽÊxí~ÚAþÁÄ„Î2³Ï£ÜÄQéŽè$s IK–áxÀ”ÔŒ8ÛÌ0^¬2OÖhèk’õƒÎ& ³ -‘zXõð '㹇FÛ˜ïGXZ¯a¢í$7jáD«,#€ŽZfËÌ¡IF“ó`´ 9Ûc†Ý5FUjE,EÍÄq-Öµš8¥ë)cð¡r/A:¾{õ”½©ÖD/)K ø#m¸ŽW3D{šúšäGù¡zUðJ§ÔÃð"{ððÚvä*h'éþmSlRÊ‘+ræ 1°®D,*ÙÙ1+»˜µ?ŸÚ‡0> ÎÍ‚h=šŸ¦óë]ê]¼žüA= óú‘£gž‡2׉(¶ ë!—£Rǧ ¹¬=TrU ÊPÍÁãK3@_—Ô‚Å@9⟪°»êͧžÆÀIijï“W×Ë vùµ‰í ÚR$)öCÊmÐb¬@Qaîå$y14B[pMDHâ>â²=vÑ,ˆjÒLŒ<à ®G,ì8ŠO’߈ØÎ1×2Æb«ÑÌ^5šúšdÛ͛nj}E¥Äˆ¢9Ç0kÍqó±ªM¼ S ˜s œ6(OãT˜s ®ÌGM†¦9[Mãh?袜+óVŠãžå—vèÄɱU<^¹ïQ­; s°Yw¡^´J¡õù €ÎêCáí—m¸áÎ4¨þÕcv3Yšúº¤$áFµ›1¼eDÁÎQ„rJ*m!a{ ‰ƒ&"6æè¹q,(»4ÄaÎjÃî6Ç8ÏSÀ‹ù!ׯ&Hk­D½ ­ŽØbÎ!eí$áR6¥¢ªTîFï$Jѱ¹7Cc¥JÛÍ.®×žÅ Ñžf€¾&©‚fE;zǸeŠÍÞŽõ bÛ©÷•¹pi#LgèšÊLh¥’æ#aíãA7RuÇܪŠR¨Š‘±-ÌI‡€ºÊðX`Nï…§›OÔ¹/2:ñU,H&°•ÛêàœK Œßý˜œ5ÇDÙž¯ËÖZ5;‡-ièkRªŠLu•úÛŠ€ñ‡€ZF º‘çETêT¦‚¥O v_SS4sc©ç³åŸ]„Trm¼í…5¥ÀÕÆk]CÄY½fW‹Œ2@)¼}JÊóãóZEǤã?œÎøHÕø`.@ú Ù‡ë¡tÇÔg€ièkRР¨*’ÄçãÓÚszO§¬CeË€œuÖ:Sp®'%1oÀÜBË6kEá\+%6©Y+‘k2J9p´Ø_ýŠâ>Åù‹º¡¤§jB)ǔҿ9é [æíSs볩ҊG*ÍÒ{ìhèë’*ƒ±î@5¯³|'(û7Ôë+ ›‡bÍyÔÙ¼= ÒåöRi>âm¹TQÔ Zr ®…Žu ,ý¹ÖÙ%¬ó¦XW3[•¢’Ñ´Ücà¨M™àØåš(:¡AW á€~ò«N‹êªU™Ëb|^-óš?·aÀX«În4Ð Ð×$…ÔºÒZ3q؇$i`MÕaÀÏÜÄÁ’ê˜% =¤Ú*ýÆ” 0Oƒ)7ª«¢c("å© Â*ûšlÓHÙe ë`wˆSJeÌ¡Z­>¢À+ÓèÆ—¯~“rÂNÑê(%gï' › ÷ìÖ2ÚZlTf²4ô5)1qÄtvLFyU°ÔÚ¬ª耒ÔìŸñ›i*!e;žòucœÍ÷ŽßRÛe| ud¡%›PTñàÍy²Ÿ¨=x X×5èC€Àdlüm±^®¾°ŽÕ « ]Àø‹¦×E™ûC ™L¬\…oáx¬ƒsZγ‰c¤ ¯I (ÖmÄX¦ÛJx¸Ð%TItžK¬:2b~Ð-,üsV¥*>Ç ²ÌS¸&OÕ@z¨[~\Þ9ƒp>%ãáàT5/ŽCŠ{LýdŸà(è8r:ÒÇÆáÖv_‘(¹]û`:¾³dÛ*ëz f€.hèë’ÂàªÔÚ ã¹´€2zPÒ¦AÙ-BÆ}h‡ö›"äæI >f½uœ7œA>)’ƒ¸Ô!úA* q›j2¶%‰A»\tXk.DQò;¥hÕ™æìºèˆ$¹ I|‹8„A œ+Çr’°žIMÌyi> Î=t  ¯IÞz˜Ú† {”¸%Ô^ä~lkÑiƒÑH‡æ÷üu±X r舃;Å>ÏMíÙkÐÁ•âh"çå´xª`×Ó°G#d.Å¡4‚tnâh(ñü—¬ cõ¥¹¡ö;×ÚZÆXW‚¹“§›Šv U4|ûFæã~¡YãårªôÅÞtÖ Gšúš¤¸hv‡JG­uUy«œÖ¤G-ZtŒ®FÁñÛÔ6¼‚]ÄvlPGîÚêÃÉóÓz¦ÔEàÀ_7õEwqt\èkƒs½§£¬:+êª Ú¥ªçªìD=W¹›Ž¯#þ*ͱ†jaZà\SÚóL•>÷m©'?;ÃóH3@_“Tí®Þ0ô ¦r•Ôܪ-éCêì@ÇPÓ’6bõ8 Ò¢½?¡­ÚDÇ‘V]°§íæðE›»T·›î#Ò¢=3d !Sô1Á’jß#- ¬å%)âZ¯TiÔ'ÜÕi™CÜÒœóþ ¯€ß½ëVµ#Ä¢Ø3Í}MRãAûÅ5›h­Ò&ÁÆ8]¤ÖÓ‰¢ã@!µ?V”š fl“ÔqtÌÉb†ôð_%lÝè$Î}Õty˜ ÊKéBZý¹Ç¤ò1½ö³ Ή¬P20Ó†*›°Z}ªÓ¡%ßáÍ-!Œdôà·H¥hqßåy?èY‡ièë’k3!ÜhÔ^$¾Î[©Ç®øEµæí@Pª-õ½’ê’ª-;CÑF¤ÞîkZt5þC–á¶çš(…r\Yî]U"u“j ¿Øf\¨¹ÙM/óÎSÍù(Š(Q5uÖ#f^eAxÍ´Å2ô 8 ºâ@Ò\]˜•½Fÿ·2›ws>Îù‘ñ±  'h¿ßóýßÿý|×w}?ú£? ŒÚŨAS‚tœGj-ñN›L ¤Çý¥ÚNˆ¯Õ>—p®6¬L‹N€Ùå+Ù0çq-–ùƹ>€GŒý@®76YBÉIî­4¾Ôt9â¯kÑ1·v!húP+_ÎÖ µ—\õ£fRh¹ø¿ø+ØWµæHÎP—Ö‰:H×Ýíæ…*9Í=A?þã?ΟúSŠ7Þxc¼©ÖÄ1À¤SCe”ŸQîbWCH¿‚pÔžÓÝTò¼kì&ö›JXÕ¢5ÎlÃØ H-Ã~S£)X”´QÕ shàQZ µÊ:–â¥c‡˜»Ù%Z´Nå‰6hµ:˜¤ƒœÒ s䬕¨ã±‹sŸç+ýM¦= ždjù,ó=š/êu~6q¤4tƒ~ñ‘§žzŠ^x!hU á‘cÛ¨Ý'ZtDãè_Ýê²ÉÇaž×˜âÕƒ¾ûøÄþéZ³+¸¸ÿG÷*›*¾y @DH9`"Ÿ$ÌýÝBæq×¾ œ4îÚ4D0¢åªó°M¹Ê¼*BTö陸tòÒʯGÀèœþœaF|RLå-ã—®”ø¥õ=¢ûƒCJ‰Ýí*™'»®©ËµÏî¯5*o‰Võç@U’o¢£Žù}Ì|½üÇm¯f€iè}þóŸçââ‚Ï}îs|ík_ãOÿé?͇?üa®6øí/þÛO½ÀíÓJmÂQU™ ­« …gD®AÇ =»"%Õ\ÖYŸð49FƒNlб¼žKöÒŠËJëé°k šgmjÅ“ç¥"Jñ7™Zêo¯pû',£oR3k´ ÊXd|JKq<Û–­TÙMkе€³ãKüæ=þæk¬P®l¦^ôXÑ Ð ú»÷ïV“þÕ_ýU>üá°ZÞæ¹÷}’ =e:Fã1³CÖ*¥Zû½Yc4sÄ®ü k=½Îq)ÚFt-5¬Õ¶Ò¦ËJD;ôÑxD%Érn”yÊ=—Â_·Ð~üÍ/A.áûÙ¦"B 8‹KAýâ ºC²ª©ýaz­%‹¤4´ò-¢~A¬2¯ZWŠÚ^+ÿ4½p››/,¹ò•Ÿû 3Yšú}çw~'ßùß®C°¤ÆœYsS‘¨ëµí mÁº'Þy¢ü똪85±8Es”Lfò£±l3Š ]¾»¶Ì<ÿ@cò³Ã Ð Í}M + ;’J©„Ó¿«.VˆWéó<¶Ž1Xÿžd?BmC|Ê[Rí&Á"Aj¬c°6芒aB|åøˆµ2uhd´¶ø½j§´gÓ`P¥cz\¨2nrǯ˜VèÓ2ÉdÊ‹/gHªL£¤8Ä}CábÇØ/Ls¬ÌO”yZi9§³)³Ó Ð×$e\êÝj•Åb•¨¾¥úd©¶J‚é8Ó;xÕÙ–>Ñ){C‘4·;§ýƒÓ¤k-Q‘ª«JÉúN‚µ0NVÕŠ®QÖá^‘ñZAä0ëËÜ{ÎŒšó —"hÝ œƒ<ìkœùœ+¶‡¢÷Ф˜ødòžì&i5Å­¦¥sœG}Y0Îs¦Ý‰Ô?ÿz %s1o εæI¤ŒòÚØ*+ ƒØ¤cý º±K\•óBœOÒ+UJ*Ö g€ö4ô5)Ø =@×À¡ÒžJ{ÞÒœ½ÙCˆVªý‹‹rNá,n·^ÖË»PÇŽÈMöìJ‰Â“Ǭ—©%Éž#ø„8õÒ8Êé=¡ôƒ®±OOuÅ:@fà\ä%î|ÒúP·÷Ø£Fh™Œ¥²ri²òù`OÛ:î#Šò î¶Ìi ÎÒ Ð×$ëÅ¡˜.3«ñ !Õ]íÊ%Þv¢ÐNXÕŠ_‡ý9½†i#^æ-å“)?h‰yV ±¡I·À®ªA×°).€¢0j~LW1KÊ‹¦.N}_Ф¯›¦Q0À×l ùR¿ç 8×ÄÈß`b‹ÊT\ŽŒe»N9[ÚëA‡ #šúšä5è!Ї[„mµ}Y Œb@§è(Yëè>Ð5 ®Ã:z0Èäv»«ŠæS3kT—yç.\õH|“tM}=¤AWšÊ´^VKjjÑZAs­]¥?iùbå¶W5p.þk‡n³ª–„«ÖCÖ/T9Ѧc´ÏóX3øäõÉæiÖ SšúšL {\Ü2[Ã6üt¬ å•ØÍnÔ ­yJs–ðÐä“6<µX%j¯A×BôµlÏ‘&]b¨V7o‚t ƒŽIžªû2Åܧ»ˆ– zü«éE+#ßX¦8iû}Dó%bfò‡ú”} -û/ë,|ªâ4iÄÿ¦Üù¶˜y¦[SÝ>˜ÁL–f€¾&……*Iûž\ý DËŸS0È' k í:°LÚô V* jTÜ¥ÞÃda´R¤æû|¤'±§ÑO$×-í-ÇWhÀ„MÉÂËýN™ÞJìv×~›NõÔDYöEô|À­e~%ð‰{¿¤“~<Jºˆ1Ñ”³‚ˆä ¿ÜòŽ*/¡ñE~”8“¥ ¯IŠ5o˜$RóÁT›¬ë7™Ic(î)åvW±\€ÜÅ®½l‰wCºÙóU„æŽc 0Þ1‡È°_í8Ñ_”XåVü6µÔ;ïLÒ·ÐS(ljÎöþèÞ\› ÌÁ¹ØÑg(ùWØ&oÈ=8*½T;^k¢pä:“hµËlâHièk’;ôâ6±¶£‘I¡B’¶¼©´¹iÃo{§A×Rû5Γ™/Vñ£ioÞ0r4C@ ¯Ox‰ η¦&)çfb^ó‡òs­+øéÅTw‘Kà'f‡Šö ù:¸":–Žs¦Q±eMœ/_ŸÔÙbàé,?Zt–½VJC£<ˆ5å…~¡ÂÎ&­˜:´èJnö:÷äf€Žièk’fçš·Q‡»cpÅÿYS{³ˆ=£täÅ!¥>R©¹$!!ZÅzm¹0uôQpjÊzmY·”ͰÖ5V°s”m׉f¹‘¦Œ¥UxM ¦£½åU[ïó]R€r€ jÎȱVÝ(˜Hƒn…±ÅSñ­ˆmЦrô¯¯–}^ÿÒR–äýÎgGL3@_“7IØçÖn*à«”`‚rÍÔáíÏc,è8‡—«dùŽÔÛE,ŽÜþ¼ Z£Æg6ãV㤷[¬[×…ˆ©‰£†­Ð,wÿCYZ-•<•Ö›8ì*—{§¢U& %ù©XIÒú½b5ancQSÃ=_—´].ZŸWÚ«ô&5iRЮ²Ë¹•]÷àF‰3Yšúš¤ª ƒÖã¨749ñàiÐõ‰Á”c‡iš8Òæ_Å«‰U"¶KÙþý1sRØž³—L†4µ@%ï*DúñM庸{ÐÔ$(ÓT,ŽâëÞ©j³ÁÆI*ÀÜBËܳ#ïG#14»•›8’ ý « &e¿ÔûÀ׆Zê–s—e¯øÅ63Á ÐצØÄWRÉÚE –FtÔ~Rp‰A:ƒQ|¨Ñt)w ¨cÊßbaJÒøÜoû(%>Ф->Ó¢%ת™ì&A:$Cºh¢¥ðNhoõn­Õ-¤ ®kÌÙ§¢è„HšÙb9#´,’VTÙx¢°6[§ÉµÍ£„: Y1ÀåaØ“uØžÖÍà¾O *¶ïFoêïû]ëg²4ô5ÉÏÙLíè׿d>­Ð S{¢ßÚJÔÛöÄ xqH ÒA>Fè‰en¢a Ê57;#Œq8ò¼øóxÕ ×>PÒ!`®‚3$^Íݽ#í­ÔÛËEBåËZÛ œc͹inòàB‰x©²)sF¬ÞÖTÚ±@bpNÊÇÙ¨ó>!ÈïwU‰MݵQcS‹Ž²Z½S_î=CôH3@_—4²A74ˆ¶&km‘Æœ€ô̱™#öÒÔDáÈÑÿÍEÑŽbSÇü*B÷ÔéÌgÊãùõLMJG†äJǤ+‡éK´UÐÕiu^ƒ.SÛìáµêƒ~n‰ˆZW¨Ú  p’X¶³÷QíJöI‘iZ:êʽ˜—¬)ê•NrÚÅÎ?–~mÊ|&K3@_“|,Ž0jàAŃÃ=ÃúðÒÞ, Bîöav»\”’®&¬u~S¡jæð rì£E*™-ñd ?mÏ2êj ÉŽÝ9öiAº  pŽ]¤)ûUØB¬#_³·bDÇ1SrYŠä3š\bhmI_Î oŽh©·Ðð×´èâ2Oéù>¡¢=ç-]é-áí£ÛaúÁòñÕ Ð#Í}MJlÐqkÍ‘…ñ8â™ýQ²š²df dèžÎ5yÍ<%rÜM @ÝR(Cžb‡®QF4äX[Ž@ZdônE7=œ̰¶³‹N¬vþÀ[X½¸îÚ¿%wmL»ŠH{€Ž5è€Yª£%H£b gÅÊ{ëø{4€y,Êý§r°Î9ÍcÌ^Húo©‘Ûò¸w¤ß9Wæ'£> ÝÓZ´fg9(û.ohO3@7è~áøéŸþiöû=þð‡ù›óo¯§|«¸¦V—itñ¤`]kÍÂÔž÷¾â@ÿüŸÿs>õ©O…k…qÒªZq5­¸‰ÖÐ0kè¾g‘ÑÏM@çîu¹Š2…Ãɼ& -‘‹Ó ƒ h7xj8Y¼æì´f®txKDKc®Ê¨é}Ö‘aߌü¥‰)\ÉA¹Ð5Upœ$Œ&¥`ì»Î1E&Ù,ó”L˜›SC‹®©¹ã¨AœÁ'iå;h:2hỉi£1rÔ¤[Hù¤×éœz¤ 'èþÃÈz½æ¯ü•¿î ÃCÎ/žÝ‹°¸ùá:Ð…{qÃ3ÝÅkÄ|30†]´š˜¹×2ux]0PKUÊÌ @[Æ©)#eMÚ¶ >áã,å aÒ$+]z®˜ÑÚSŽ\2„Oæ+#ß°q¤RyZ»ÜxððíÓ>B­%(¾NÞ®e,Ž(oÍïâ5j£W;W »Cì Fk8oŽÑ·¦¨~[ó²®Õñ˜ýy‰ÍY§0žíë‚ýo=.˜Ê>ž4tƒ>ó™ÏðÏþÙ?ãŸøù/ÿeþÉ?ù'ôÝMÎNþWKе¢Æ”šs¬÷ ;èÊuGØìPvˆ;ZÇŽŽ±!ç –ëí‡Ý1(Ž•¼ V33G‡³¬XýK2³FÔþ\#[´¯‘ɨIgšÛ(VVÑ}ÅökštbêИƒIœhË0-íýÖÄÔÌj¢¿Ðâ<çôóˆÇ1ÌÉ÷ɵ庙#H='ªt™=-ÆNÀÔÌIe?VÖ#‘ÒI¼ÿàý có>¨–ØãH3@7èðùÁüÁú:D•6fÍ&±È*²×Áv¨X&=hïœF½ Þc¨¬xIÎspŽçÅ}£‹]• mÇÉ”ù„í®»0&€qÐ;PîÓäïÓ'Þ š{64×TÖñèAEÛ·¥ ˜“Æ" ¢2zÄx`.RMN$¨ÓˆS€N×wŽç90û¢´Aç#†bÙ·GÊLwשóš‰CÇ2­wü¾­)#ï,²ó< „Õüû´Œçõí±¤ ¯I‚ *ž€p⊤%8‡ë=hÌã¹Ê> d°AËAéD­Nê'­0UÍ9´éX ¯aæmEº%Ö¤ vcY¯y@¦G KeÐtööœõ)’7eÌNΟ»k݃ÙùâÓq”ïþeÞîDñ>䣹¨Ò90ûk+œ8€Þ“‚qÒ†¤ýyÁÄ ©9{Q4:ïÆIı­gŸü¦á÷}ldkêË^]±•¨F:¡ÓT®0ûÕÿÐ+Gå™kÏ¡2`vç³ÇH3@_›ì¤‘µ¸bj¤Äd ž÷ÌØl#ÞÚÄ6¶F@ÝaèE"€Ž†ó”mÛ‹‡ÓÔ‚^ДZÀFp¶±¨Kô * Àž‹»Ç`µèÿ_RÌÉšêØLŒiu ›¡·E¤ÛŠí)gue.~Á71]Nj\RÊÞôX¦š•Àµû•H)qAÔ (é/JóFih‰ÙK¶Ý£ôÓ\ˆønCÛ­jY±%´ïõó¯½Ó•pÒ3@šúë Î´ š³GCÑ0ErÏŒvf Ä”E"M:hÔV{îÄ6­N”NFðBÒŠœ·•½FMVaoMȽžÒäþP´íˆEì¹èÑ¥½ÀÚkÕ íØ;`ök]P;¶±RéÏ= ÷ jiÁjÏf£Öü²Ó £—jôbËÖuˆ¢ÛœX1NJ;É,ÆiѤ={MtÔ)S‡ÉÞ:©=W“ð–ÚÎ }^ó.ÄÌØ‘“y cdŒyÀiüÙCA5ÁXc`¦í¬õLÀ Ð×&Q¥SC ;:sÒ¬‰L;¬–¼I’Êd‹È†X‹Fvô¢,Ä–0jÑÑ8°h#Œ}†Ç²¹HëŽù ÄHÎ!éa95K{O— 6©,Ø‹õlD¬‡ƒP®+ñeʨ9wª qBéöŠÙ)ê3´:Âõé† *Wh·Aغ´CÕú—Oyu$ð¥âtSe—kÎþöh³öŸÜ*Šæ˜ï´çL}¢S“F œw¨÷OotBÅÛn¹ Æô÷Höšm2:¥üïköçYƒNhèk’ ô VõÀ¼Ï5h_Qƒ½u@ìL˜G ö÷í3"½(½Xí·wÝEfŽ8ÎE`Å(ÂØ*¬z×FC;±ñ„FäíЦ³æŒˆ]ê<(; îX‚oXbœö¼§É ¤ë;½XÍyæÎÀB•%Ê e3(û­ÚLyöàÀ™^P³.¹µ ­2‚4ìQõ1Nò‰Áøk[hPv˜y{Ôv|´ûf?ŠÙøO-µ€Û‘5ᦈ¨Ñ—­á…á `½p½¥9§_&/‰t%j6ùQ5y˜ÐEÎaR0tÑvø3kÐf€¾&Y€6Öì0dÝ6Ž|> 0l#ù dƒ¸#rÝ&€¶Ê–… ,«AGZ´(c<"ù(Ó‹áÅêÒù6µ…§ÄtÀ‚Î1+DVt.;Vöž®@ü3Öôá 4é0š.û¶å™š5zF­y‰²Æ°S«¹n1춆ý••¢c3éݺ¼æ¼è`¸}„v  W¨lPqfg # Ž { «³Þï1|}ß0 ´éÎ:ШI*B$ dèWš7Ú³ê[ VøÅ*þew™xJHòGS°.,0.CùŒŸFÀ™5FÛÔ Ð1Í}M`±:£*›ÂÖŒ(˜´†aøökÆ+—.Ñîä é6 ›Ò";¢,@/D¬í@º‹.´-µgÛw(Wü–=¨O1H{5ÚOj‡°À°`ÜéeM'+`mï±ÂèÊiÓK„-ÊVa¯2Å£´òB41Ȩ9/Q7pWõ¶_ÃÃv0 Ws©pelÙïÝ‹EÐ…{dxúôºs”+¤»¬Ý_½¿˜ÍÍÁy‘A;+‡dÒ‰&­cç[¹<^Ž#¹)ž¡óõ3¨ôhÒH{VÀÙç•-Ê[üÈqG0Bx»DTÓ¨‡†4ô5©CY¨²@YbØmÕN\m,`艦Cp¯EïwÐmP¹¹D:{D/¡»@õºKD­&½êì ÖjÐ4h?Á–+0{µ0Ô«²ÑÑb¡Xï†è´×¨½é/xptÎŒ±¢“5k”:NAOP9¡cM ÔƒölÅTœ-:Å£ÈòheÙAÐ1éêÓŸíu`{e0çÎ zé:GzAV PÞBx<²¡nP³E:ç9ãÝ 7 µ·¥¯ Ð%†=[XšñÓÆ6þð©ã“ŽÇ\ƒniÔ…&̲é—VçZ§™hÐv åÀz‰ th2‡‘ƒtHšc¥DgÙPH%ë|´èi4Ñš#`ŽÁ™~Ö #šúš$(+¼Ë•~o6jbi¬Vç†àlÔùì* [dgµfº ´³šèètÀ%*—,Xw°2°XÅf¬WGC¼“Y.B ܹÈѸŸý[R±y#å¥Óž·¨núPkâñAlÚÈS°ëKtD‹fœCEô@÷4JôGî<Óš‰‡v3@{šúšÔK k4€ô°3ì. ,H¯ zbFÞû-ªÐC÷éAÿÕGˆ>²Cq½`Ñí8AY#¬Ö× ÝD!~‡;th5èx¡‡GE5 F9è×`Ö`–`–jÁZü‹Ñ%'trJÇ)=7P=¹œ7½‘ö,,vtVƒα=ZW_Ðvà=¶rkõµ©÷G5,°‹„D÷˜Ýžû÷÷ìoíáÒØ?]wÈþUà5û çh·u¾ÐÔ·Í•vÇH(Vl‰»@ªKì"£ƒîÙªa©±EKPoIçŽg-Q?î{ ºê0®®”b zޱýY=8ë Ô4Lòн<í bÓxÎñÑ—Y®I{ ºó峩iÎVCPÔ³›ÝH3@_“:¬Gz«†o†Î ‹Áª¾'ÎýØ_9Gº‡Ð?@» þÊ#„s–²çD•…£¬;a©°Âš:–Dí'öÛÇà@!4ÌŠÛ×ÏîFn€õ8Q̉ê…b:W+ ÌzFÏ-›ÀMDoœaAú”½öì¤t?óf“Æ€žñ’ ?×G:Y§v”°`ôà°ÖoÃJ +ºGÏ·¼õږᙽ|÷¶_Fä tx„ô[²¾„$$ªÂ¸„>ÖèøMͺŒÀzÏÞ6jXªÚïc`íÀÙÏÇ… (ËØcYpÞGZôP*žãWŽ#}Œž×…YC=Ho°Æ8_’n²×•» w18[ç ÆÒI¤#0-VúNÐ?ylè¨9«µ·‘LŽÌÌ}mê€Uоlc0†‹‹½ Ð èr€S7ß(l/¡{€öo¹‡,î÷‡ˆ\°bÏ©§ÀXu°Ree$±E{€ö^­µw§rÀì=£ vÆ.Z9e}z¦ §0œÀ°ô˜µ@ô„ž3r ÃmÐ; ·[¨Þd/ëÄêiáB"ØJ|IYˆÀØåÁžk0á,ˆÉT9us†ÁJ4p¦;~çõK^ÿê[äêÿƒåW`ñÑÝÊ,€%v/ɬµs…¶…ªF#À1¤÷f`£;¡i¬ £ŸvðfŽÂí€y ³"~-R¡EWwˆ÷A‹ŽÁÙ}‰Ì‹J²ÝiçÖ†zóÑØ Ø7ß-hh'‰Ÿ§Ô´é|g3¾;€t˜5g;jYDihO3@_“zàC¯~nìp\ ½ìÔEª[íáÖθùú7añ:²xxá! Ùpb §â´fVjýR´hfæHñ#2q¸‹ÐF@ïÕúìnÜ;¯ŒriàF«SÐ[Êpök×0Í‚^o²»¨¾ ä]O ÜaÏ‹˜ª‹Z7qØC`Œ¸—.xuY«Eû|,!yW96°Ãð~žÕ+þão|•·^ÿÏìŸùuÌé ¬ô˜ÄÙÊe´™#nLkÓA"kÏÖl¼}Hh;6;–Æ–éÚMÈS‡/{œYÖÆÁ²‹Gw {ãd…Íze`Œ‹2aâÚ³zÛó"toy2Ú tô@§´µr90îÃä‡s²IÊ)q%'cå‹' C¼ÇFîçé wñ¤Èlâ4ô5©C9Pý½7Ç ;ô^í¹4;T¶èéÞ½…[oÂòedõU„×éå!kÙsÖÁ©±öæ•X`^xpVXˆÒ«Œ‹U4Òý2th:µžöèÜØ"SùC£œv°¾ ÜUö·°ñ.Ìš…>ÁZŸyåIvr‡A×ÎmÎ`Æ]Ãq`«ò%¦É Ž Ãb­Iú‰Pq’ Ù$a{Œ<äò¸¿ûeþ›lx¥ïx«ˆð°6ÝŠ¡;ƒî–µ=‡‚ë8þÜ2fjÇ 'T\h k/ÒÁ°Q¥7{FY)¬Ý`ÉÍ [´ë¤ÌÛ¨ÃùÞv0u v¢0„²ðÙ}i¿ì;÷Ü(Á¹Ã¨·æwN•XбvJE ýH8K˜¡öZô¨I{ :t¼yÇ&q¼™Ã—o¤5g3×å¬AG4ô5©NÜê¶Á5‹*'Øaø g:pÿÑŽû» »þ’ቇpûKô§¿Í’¯qÒ]r«‡*¬íœb0cx_`¿hÃO¢yO‡x¡Ã‡ñôÞMqXIÿl§nrQ¡76- ¬No)ÝÓÊöDoq¢Ï²“÷Óó$†S« FÙζ¥æŠ˜ò&&•c-u"J§âF(Ö÷À¯g´º¯"\°á÷¸â×X,~§_ÙòA¾¼¾¼^Y ¯-àõÅŽ7û·zµQöÄz¦x)m°'6_6OƒhK%ñRŒáÊf`¥vÚáÊŒ†¶ÌlÚ' Gź»§«úƒÉCìþ‹‘¹*•m´Aöç ˆÕû¿øc´éŽÎM8§dé¬ëÐÒù–»$ÉÊ©Q£¶‚æ#&g¯1w#H;€Vc]1« #zÇôf³ág~ægø7ÿæßðèÑ#¾å[¾…ú¡âøÀïë½=pJêº-°sèª<…áÁåž·~÷‚Ë_FŸúϬžú]î, gF81Kõ¶e D]Ê~à‚W „¤‰FÂiå<˜5ý¨=ayvO]&´ IDATŸ°üÍç¹µyŽ^Μ½ÒDÍß§RÎÚyëwŸûqïŒA™”…•t¬Õ°ƒêCöò ð{tò2ëÕr),î wŸî¬áöN¢Âr ræ,¬¸XÛ´&Ö}ð.}6E¾ˆ¦ÓqÚ­1ì† sÅÒÖNóŽŸ(ôaB†h}Rw¥è&jÖêÚۡÆäÄ0šOÆ_FÒ.gcîéYÓcÜD¡­cDÁt†°JjÙ¹4‚µL´g>ôh{¶#’QsV]FÀ¼sÇ8¬×ãMïX€þ«õ¯òÉO~’Ÿø‰Ÿàää„ßøßà'ò'ù¾ïû>þøÿã_÷{;,@C Œ¾Nª»²¿†« ô÷~›á•ÿйÛ‡©iºDG²ëÄ))ïVÊ;Ÿöbý•7WÀ9÷eͽ¾™õË„§}ÍSÜvù=Áz“¬ë!=ºýå©«&oš`oŽAÜ‚²ú˜yv¥Zp^»´”=ªä-Dߢ“û,y„.Ùtô÷àîFX? ‹µýBØHÇp…qÞZ`°íkÀx š[轜»…7¥jAÚÙ•Í`xd6¬åÔÀ™ú•”„-¿ö—Ð]JX›$—¨q@›;ØÛ¾!^°¢ágæ&ŽÔšìRy¾]ð3ú—ÛyHq#4Û!Ú'ÇMØv"èRì°n-ÈZ­›Êª³v¸¥ ‹‰ûµÀë{uµ8ó/·î‹èšNÕ 3@GôŽèúOÿ)———œžZ8ýèG?ʧ?ýéß÷{½]j¶!j26|"rÅ®{…ÍÃWé¾Ô³zŸÀ]a+®³ iŒH¢ñ„øÑ=ò߉;„Œ#­}t»-°®ÎÎûË3ö7žCŸùf.þÈûøâýÞxuÉÝmÏmzn"ÜNœ`å@ÚM&1‘8öߎ»ž.²C{7»Ex',éX‰áD;N€%;`ƒ‘ D/è䂞+ R*È•°x ¯ ϾtÙ±é;Îéy(=÷z”%°ÆÈ)†S:=Á°ÂÅË‹¾´+9Ý;ÛèfЧQâB4®ÃÃaËÉ Ü4£û»b@öÐ=RºsÐ ¡».Á®£Qd ÝVÐ`“Ž>d vÑ$á¸Ü„ œÇ=`Œú=Éû¿šÔ NY8 Ú`Ü2}[?9éBÒ5¤W¤—,Õ¦{ÿ$¶½yò>ÐÙä u«óî‹fô1f€Žé ÐùÈGø©Ÿú)¾ç{¾‡¿ówþûoÿíß÷;=@öáÑ>êâ¼±ôœ-¯²•WXëÝañ5auKèN,`n{ØuV“Ý a‡©!w<«NX'Ë8„ö.vFÆ¡µŸ¤Ú lC®:境‹®ã²_²_Ü‚Õ{ù,ŸAÞ^Xp±X±}mÁ£ËŽ[Ús“ž3:NÖ"n‘·kIÀz ô’ÚA­Èa¾ß]Çå8þ­]DÞYw@5ØÀF6lh'[;´W;Ž–}Gw!ô÷¡CXÜëxßí÷eÉ›ô¼FljN0zÃÂMà #'ˆ®¬î. £îN}Ðû5˜‚¯ì¤–éaè`ö{Ãùþ>'ÃŽ[ƒ5s .ƒ» ÐBïÃ`ìn—ÉU´Ž>/nù”gÉd`Ï îÈÀ 6à×’ŽÎýå¸BØ/{8íà´CN{8=íàdÍèê<5ÚL'€tèTHÌœ#ûšß»Ð¨3)ÁÕq¦w6@ÿÙ?ûgùÜç>ÇW¾ò•?°wöÀ© übè•tÖg¡“=F±“7·èy„aoí÷…å°8ú• kØv°é,PoPûCv²FÒ‘ÄOË€k¶2úÞîÄyˆ ^$pÕÁ¥ZÅí¢ëØõ'½ð$*ïEú§ayyâ¼·‡í‚¡[ðèõÛËžÍÐq…pFÇ bÔ)X¸@ ÎB0q¸l$#‘…ŽZ´}·²ŇíØ盧œÍšî|KwO×{äå%·ŸZòÌ_cÁ ü·ºƒ‘» ÜeÐ;(gÀ êºEÆaº·C³·¶Qu‘áÔ.ÁTÒ˜ºïa›ÝÀýý}n †«Áj©"Âî-Ð{ŠÞƒþ¡Àp©ÈF0èÜ.1c˜¼èƒû¬†²´˜][pÖƒc\UhØbtƒÁ¦A·ìÙ±g`¥·é1 (W—Ò¡g=r«‡[ ô&v]Ò œ­Kœ¹Ã8Mš¤óI’`Ú°_Wµ93·F¿'Ú;–®Eïè’èûžÿñçüƒÀOÿôOÿiЉӖ½Mv²ètÇÀ# <¤—G º ìÅjy±šÞ+8]J°o: µO{FÐÞ{ü€Ð^ƒöCÜAÆv¾kθB؈r)pÙÁ%=»þ¸ð*O"Ý»`qÌÜ:AÞÕÁE v{«í½Žç»}ÏN…ø ¤:ö2îü‚wŠ÷nö[–ŽÞY¡ŽY Þ*>¬êÒ™;j}ÍÕ9^#VÿCNî ç[äM…W–È»–ðäŠgn­x×bÉA´gÍ3ìõà]¨Ü¢Ó(+»xE{Rk¿7qŒž×v¯­SÐ+0§`NÐa à Ý/`»=÷¶yz°¡UÍv¯¯ r8WäJlü¦­¢;±»•Çë½ñ:Z¸b•Qo/6AÊœ{ìTµs±SëvgÂB•†K.¸`Ï%;W7—ºÂ`¸@¸:YÀÝzw‰ÜnƒÞä†À‰ 'ÆjÑ«Žh–;˜–%LFEéÁ™ì¾Ç‘„Vt+ gÞáý#?ò#üµ¿ö×øÄ'>q­¿½¸¸à/ü…¿ÀíÛ·yâ‰'ø{ïï~’PX ¬ÕÇs3;WÅ/¹ ã’^7ÙÛv"¨»ºGÐ߀~-ô X»´é,PoÅjÖÞV½ó&>o—v¦oöó/äØË¸`bc,0ÛuÇž„[(·Aî rínƒÞDôn¬á¶ w;ØX¡ï¹|Ô1ìzí8{`¶¾Ñ#0{é¼Ö܉á|óØ\‹öaUýV_âv¦¶à$„iJ9¹ ÝȰ…{—È×p¶BÎN¸ùä)O¿wM‡°æÝÀ‡€§1zà l„¾%ÆM—Ù}¯½d‘? èžqSÄ ˜K0g¨¹Ã)º_a6½«/ñp{Ž l^Qäk‚¼rnÙlÖì&}ò`ì{]MÀ9þÊ®ìÔ_wxoŽxZ6,¢WÁ\YbtaÍ Øó€ž³Ô§ÙkÇ[]‡¾{ O¯‘§½Û!7 Ü0ÖíìÐ~ó稟Ì«›õ?‰"ñ•>š`©hän‡.±jÏLðèOúÓüÐýO>ù$/¾ø"ŸùÌgx饗ø¶oû¶ƒÿ/ÿå¿äOþÉ?ÉŸù3†¿ô—þ_úÒ—xþùçm›öZ '*ô ®¹D°!C ŒìÜt v )gkì.PŸZMº[Áj)~‚œ¸øÏÝèÅ$ÞŒGd‹–Tç ¶hƒõlqf6{VvÌ*7¹‰š›Ð!zæ´Ãœ®à¦Àmk‘}ïV°téØ<êÐmÑØOBBÆ<"#0{SÍ"h¨¸ʸÊpœ óï]€¬@n ÝmèöÖõëê>¼ºC¤GÌ‘3žÿŽ'î>Á™~#jÞÃÀ-örb7"ž¾CIJ1KûÔªV›VÝ8mú:Ü…ýØÞâò¼çõû¿ÁæÍ-›/ ‹7…Å%ô[Åì5Š‚W©Ê¸»zpÁQ·io$V(±ØGÛÄ=êíÒþØácZû0TÆÅùÞ늭Þd¯¯¡æ½<|Ï)ò!÷ôè Χ€yÔ˜Õ9êKºr*¬.t@ { #8›”u8W;–ÛçãBïX€þóþÏó?ñüú¯ÿ:Æî޽˟ûsî(pøÊW¾ÂÇ?þq>ððå/™çŸùÐoÓÿ‰ÿÍÉQe©Ýlé6Wpu——6]\ çÐGàr'È«7‘‹›t_;£»qƒîÆ ää„îô„n}‹¦ŒtÎölíÏ=~%¡Øï0‹HÔ4ýp72w n¹±†Q³,èr«¬×ÈÉ œž¢7Îàì nžÂÙyï9Ü>‡g/àò 6d³íÝîØíwlEXŠuËZ"ÖÔ’õæ°¸a¬óº ¶šº&’`»ƒíÙn`ãÓl¶¶Ì·d·ƒ½ ûyu‰ìo#ïå ómð¡±|æºÕ é{; öæˆÆ¨R6xFžöû1ív6m·Vž«ÛèùôÁ]ôåÛ<üŠ˗¿Æþü³ßcÌèÔ‚Õå»$¥1Š$Åïnö!ß_×Þš<€ëä¥cè;¶ËßEž~7æ>H÷üspÇ g '˜-†Š[ü—:ìw•&ž2š4|Yã|Ë tp¶ý™€w0@?ûì³üý¿ÿ÷¿î¿î¹çøâ¿ÈÇ>ö1¾øÅ/òÜsÏpþôoñ+ïû=–À‡žëyáùžþ Ì}06æ żæЗ]œßA®žA^{ð È»íäO`¸‹ÊMv¬ØÒ9»nÇž.²ëŽöÝqýWºœZ"]j <4†ËéÄ0¬ ÜR¸màŽAßeà)O+¼ÇiF· w_†'¾Ý«Hÿôo¢Ý}¤{€ôXö[V²ì„¥[t¶GaÑy-X‚ïs‡ïPdTX Â{Å1äIÅ*Tr¡à< ¸ïÒ=Aîuð¦À›zoÜ_¢ÃàÝðàƒ ÿ÷.¾þŸ»ì¾Q1ï5è-E׌NüM¿dÏë‹ë]i‰&pî7Qº¸x$È}W:ä·Üú[œnÞ`!_¦ëîÑÉ%vC`g­—(,QØ>rªôâPXu´õFúØÁ>ä‘®²Tº•ÒŸ)«§}ï«t§÷[WÈ÷Àɰº ËSX¬‘Å úô èvUfçÜ7¤‹’7TÅÚ¿8@v½´q mº0@¾ô†/ƒ>¸¼^c}Ó; þÑ?úG|þ󟬶ùs?÷sGÿíüÀðÃ?üÃüÒ/ýwïÞåùçŸ`}ÖñÍß±¶±T¹0°î­9Ôœ*æÊF†³±–ã]:µ³S‹bƒß÷z•ôÜ``ÍNíDÞb]•­ØøÊiðût…Zª}Ž¡;ý¹à«Ê Ýöç:ƒöchT=¬‹ÇVa{òéØÐ¨zÑûÐß§ã+vœ¡abÿç2«Î=ÎX뉥‰™ÒOÅyüð”‡@¶ ,pB5ººµÈ²½0ðÀ´¼zyY<ƒ®> ÝG¡ûïùÒþ6ýë†ó·”íG`ÿ4˜;йê´Ãq±E$@fÝ®1[A¶‚n¹ôBàQ‡¼Õ£¯/à÷Vœ~錧öKÖÝS¬¹Ë‚¯Ñó<¢ã ‘ÖãØî,M­bý_›çd™QTh‘UFܹ·$ˆ›kó÷Å»ÀÙ¹^d ݺXÜVOÂâi®ãV÷*çëXlíŽ?Ý]kã—ÎÞo=àýîíÖÔ´H™D¦­1†‰ŸôÔÈzä®ÝŠ©þîsô7Þ[Ãæ?üÇ£Ûé;ÞÑý…/|ŸÿùŸÿºþöÆü‹ñ/Šû‹c{UöƆïÜ)¬–ÐݰKz‡.„熅·Åõt²¦×ôÜDå&èMörʎγq[E¹à÷Ú±ƒu.—áÚð6¾r¬„vÄ¡:Ç F†±±‹1\^v>tZŸ†FÕ+«sÄ…Fó&蛨ÞcÁ9§âÀY„S±aKOTX« ´êÜŠCµ™–õÄð [|€&¶þŽ5¨oƒwà);¬³ñ#ABô]¨y¢Ï¡úA·wóêF1›seÓÁþJÞæ˜έy9Î_aBP Æe—v‹?;Ip)pÑÁy‡ÜïÐ{=òÚ‚î«kž¸n±BEXËŠKrƒ÷é8§ãq>Ý~óZ{Œ{ÆÒqR À½ Î,Ñ"=W ‚IBB·RÌ ºµÐ*ý™°¸«¬ŸvkXá®ÀÅâ5ë^´¤ ÛÙ4FuÂ.Uò3š±vïÂzŒ‰i? b± ì¬ï·nŹ2¹rž x‡ôG?úQþõ¿þ×ܾ}ù}-ñö4¨Å…½æ[5¶B-Hß´³ôû ØÝT†µɉ.è¹Á‚[,ä†Ûl9aë4gtɰ .k0î9­…B«8òŠU_°Þ"Gk0tƒáâr`§F÷ÐùШúÔ€¬¢ý›°x ¯"¼ÎJ.9378«-Ÿ:P^‹²RY`©veàÊXÓ‡Sãmä਷G÷Û¢íüý ÃÒX¾ÜïÙïÝv§;ôÝ;X߃ÅËÈê÷èõ5nÈ%·:åfgpjìV\aõ¯º¼;¬XxËDúdi//äfq»®x/EDÃF·Æ9^¨X¶ ›žÎܤç zó‹á=<ÜŸñÊRy³·Šî Âî>˜3»½—ÌÞú)ëÊ¾Û å´ÁàÃhÚØXÓ—raÐG<ì·è›°~wLÇmNÄŽfaÉ]zœ‰ÇÆ’ëdá@Ù»øu¨Å®µô&«ÄÄ!RªÔ) œá_­Õaé@z5¦n z"艢gÐ߸­p¶ÝÔ·WoåT`ÓŸC÷º%Ò÷v"°ë¢åÜ2º¹$ÞMl»r=£Ë†dnåÿ{_»[QÝû[³ŸÿëyÖ"‚" ¹­Ñ›´7Þ´| –š\´¦i¥_ )‘Ú1A ¢¦j_ÓÔ´ä`R’Óo^±h£¦!ÚkªÅ[Á#ÂQ8(á¼ýßž—¹æmÍš5³ŸÏ©þ{ý³ÿÏÞûÙϬ5³g~³fÍš5ÉÅhÚ"Ø-lxÀË /¿ürüñÿñiMs ·ÏÕðMY–:‹Ñ€~¿`±ý#‚±û±ŒŸp;äöð›bŠ)ŒbŽHŸaËT Ä2c±<˜pÀ ßÙÅ\páQW`±j)e 3¬ÏfØØžâÔO&ØØÞÁd¶ {þìê“ Õbýœcv°ìÖw‡5NC^¶½®ÂÑÛùÅkÑÑþLi¾ŠÏ!…eê™m:Ø›½gÊÒÀŠ3IÌ–=Èoò˜`ì::À±3=OZ‹§§ÏuÀ‰Î-oßÙì)«èg° ëBqøÞ€½h®A»•Dnø´i :aawÀ1`tØ3%ì#ƒ=p[ë†é‡%ìCç¦~Ý{!‚ñƒÎCéRì¢Ù„·?3S†[zI oS§eçºé6µ È `€=´ ý„í5·ûËÌÏSŽÈýdDcLͦ÷]:ï’šO u}É/F Qí2ßP÷¢)ìÛG%¾l·Œ$åMx™ô?ÿó?ãÚk¯&ŽÏ~ö³?uš 4AgÁ&¹<°XìªÅì•3Ì~nf^ŒY·A×u3ôÉÁwÊ}3ÒýtÇÆ§ø3†}ò¹.÷É7J JŒ›”ÜœL±qlŒc[x~í?±¼ü0^ùÊ£88šbÿ2a}JXù½mÚå¥CŠ[ÍcWw6ù1ó#Ü>‚\Ah ?ÉïÁc:V;`´Øu‹éº·ó¯ºÑ‰µä·è:€%œçüh6Æ“Öâ™Y‡¦N‹Oáb]lvË:/ë#iÐL(ïµA;ÞFºE Mã@ä”NtÀI`uLØÂ^2X³®3ô‹Ç½çö: í€0õ¾9nYsæKÒ.æK&hªÈ:‚3€eÀ,f+Æwdfniöšu½À^í°Ï:Çïƒmü{ Glº¸¨mŒwÖ7~rœ'Q°©„U6þÆŠÌ:Îw’ßœÀÂŽ­Û‘}ǸÏmÚ‹g0ÐË ÿìÏþ ¿õ[¿uÚÓÁ4Ÿ_Ï&úáÌj›NàùõUl¾îBØg_‰åp`",g¦bÇn9‘p#éRé??$Yå<™øŸ›ïmXŒ|K{þsÇE-O6—Q~ª÷8Û„5Ü´È|·Ç6­ˆ\ñæ#»c19ì°ï¦4ÍV0¢ó°‰<Ž<ÂQÌðŒáy;Â)³˜¬BÛ83ùa÷ˆKp¯›RZ3&°6 ´A°§ pÀI‹•`¯%ìa 3¬’ÛèvÄò?ÂZœ4~BÈŸøZLd•ù·¼p ¢Ù'4VÜ$ õZ³ šó9GŒ½´˜îvVSß L˜O[qÛ—m¸ÕUÁfâ@šh qw’àlÑ\‹¶É“Ã7vlürW¸ÑÉнlú-oy‹Ÿ´8½4…«CŸ öx[€N`BÏ`‚MÐqÂè(ae¯Ã´‘qÊSÀ¬ É"w¶’Z;×Ü¡|W¼õÿ˜-:m×åóEÎ¥:;ôOž™àø?‡G·-ž¶;8†eÇÇÉ`{É`ºÀ>€Öà‚ÍcoÿlAþÍà<BĪmmv‹œ­dÀÐmVg.pÔ V1Ã*,{›ÿˆ½“‘WqÓÁ{cŒ¬ÇñQôwn2°a%Ÿ÷ä°œCô®4)`Í5­³5€Ö ã%¯ÈZ›íØês±.ŽLÊb+r ÎñEºKìÆ-!FóšÙä €zoòšÀ@ÀË ÏÍÈ)R1¹0ž8Õ'm‡±]‡Åyý<¨{…ÛKê<Âs:‚0]aóD‡ñ¶ÁÖÌøÎCw:]jD)`˜kK¼¹Y#4®°+I—š¹÷ €€Ùï¡è·‘²p»”Lp3LmƒîyÂè`i…°dœÝ~FNó3+@ЮX‡`HÁd‘´n¾§hëšu0Ç8IJÇ6FÀOö[üŸÿ ¼°¶Œñ÷,ì‰)¬Âvv4ƒ]™‚ÖÈGb#Ð 9çlnopnѦÂKhË8?ñ-g+]™Ì¼°fmŠÑâz)vä5é%„]S€Ö÷F)ì%“–ó„î7¾e¯A“ßUÛ™8lé E{MÚ®´J˜­YØu§IÛ5¿À,hÏ6a¹ ]Â$‚0dÊ ˜Ó`•w*†Ýƒ[Únù‹´,²v¼ïêБ€^¦ðQçfNk1–O†%Lº=Îè<9×…ð´{ÜòÂó °å¢ÃÁŒ`G&' NmŒ'„1?ÀuÇŠoÒ1‘?\CJ•˜7,×ÌÃJBò6Eò~Ê.ÍU2X·.%°‰)À'ÑaÛ™.&t’нàV›uËÑ%ÖÎ^gûLaP)ë ͈xÔLÑå÷mnÓ^nÁÓ-€ò6œ{ÒÏvÀ‘U³ü7LÏ?ôªUÐÑè„q#rÀw3‘›á ñÐc8Ó°aòÊ»‚qML4Z¬Âb…0/ÃbÉZ?úIvè )¼!×ý2_6bÝ0ÃöŒ¡8&ñ±õm ÐÞLàG)|Õ ±H´D^ƒV€:#Š£‘\‹ã+ŸëH¦‹ÈÒ¤!šËk˜í_€Eœp ÎÁœ4aÇ AGzAšQŠ×ìv'!7ñŒU€ö€h\Œ`÷IXƒ £8ötÀ>ã܉¦^²^c"ƒñ†wçŠ­Š¿0\öËøŸ€ÂɆÜ3¬Â`•€u ¬b†cÌh 3l¹Ý6hì Î^A;Þ ö”_<­:5l伺NXîòMÆ^«–› ð½ñm¼8 ­Mós”VVŸ°„cÅs–p똙W€–¸„ö.¹ >{;ÐqÒa?1ˆ:€òL¹f*; ìx—yÓ0š…p³Nk^±äV’Âúò·œ9@»qeÐ=Ç‘4h¦=‡—ì« @‡+Ö»Û9S‡ê m:…›  Gú´H˹5P¶™ˆNÅ÷)…õè$À9ÚÁlìiâÀÚmzèH@/H3¸í©¶mtÝÄ„ÜÎΗi\|åu×"ìŠÛ!byZ¹uÒ[Æ!ü„µ×[&–°51 k(»#8cY*5è„ΆÍWm𼂠Ïä‚­“‹aY,Cc¸=þ,Ï{ì‚ËÓ&`6³æ\¸º%çë‚™ŒŸD\òÛwuäì—Ù&\cF²Ÿ'“¯ëAB¸‹¸LgÂIkqÀ ÇS:êøÙ/hxå9Àh XëÜ*¿-ðÞ݆²ýÃàÀ›Û\‚}%?;`<ƒÝ±èf6‚q<ÈzÅŲµÑÌ”ï|N™#ÿFâšh2qÄ~›tXòm½ûŸ0L@ ØU‹É(Z¸æ,gp9HÏ @ÖÀ™ËÉz’èf(N*$€Ž`´jL‘€^,¥Ñ®ó "À®€h UXã}œa™§óê’[K»N m?Ó61nÖmFÀÌ€f„ɆÁöÄ­6ã#¸%Ë!ä(k>arÇioä÷I´q8¾æÍä7]5Ö³_ÆâÚ¦4ž97Ø-m:S‡Ùò.±K£NzK‹’F”­NZsr`6hï+›l͆°5³)&€“ œ€Åq¦´MHËNnš€VÉ!V×–;g¬Þr£÷^³£È6΀O,010S ›¹=X@#N:óF¸ÎçLÐ#q:i’àìE£à@îw‘بE'  —X/»Ýy¬ïyìp®A—]ƒÎwÃÓ1ÔhçšÇŠ…ö² œƒæ>€Ž4ô‚4cÃ÷13» ÌÂlÌ (Ž'}Óµ©©beä< ÖÈ©†Ûí'ä4é E§ãñŒÐÍÒŽáak)7àäk äar«ë@,(.年%Ì<(O`)EþHÁã½.>3 ±;N; öõ2yF¶¸l´Dî<´/ ëá¹¥iWow¸¸#)†ŽMAãŒw_œ¹‰ÁSN0¥UÀìfë ™7!à&²v€ý{@aÓÎøX [Ôx 5ŽØƒqv„i3³Xö›,Ù™÷]·—˜iÃuÉ–Apê¢Ú‡ôÞpeûNÿXÜI»£ÜÔá¡D fžè.Z>À(DP¡RjÎQ8æ8c“„A¹ÎbÊZßæZ4¦vhF@/HNéÃ-“%»KÜ·i9‚s¦=Sç7$·üvÕ5­n‡œíÄní„0Ù¡Ì«#E N4ÀÛmØJ5™9–@X"§A/ÛL ÇäÙGÉ sÛ-¹@wnAÙ@;äÀ:€öŠ?ßñÀ¼tÞm!,^v‹ÆˆàEy’—ñÙ1YìŶuÞ2ÛÆFSÇu°fd×`g«ˆ4,dÏî2œ§L‰Ì'©õ4ç3D Ar?›Ář̌¼éÂû“#ÅÝvÑû8K vɇqN Ê@‘$'½æÀ‘lÑÁ“ƒ4–H³–Ù(&W5mð½^ ˆ¬af¬7ÅXÎÕyŽø)hb‡¤«Ìv ½ Ù ä˜Ù΃prBµ œÝ'èåXñ¾¸«^‹^õšôj>ü¦1a:%Œ§Nc ëÌ8³øfñ?× ]›M“V˰Q°*:d²6D”N{e# ÅgÆ/"sÞ aÕ/Ûƒ6 Œ a©s²Ž¼fǨ¼óÇ̦Ъ<"嶱ز„-ëŠiJËÑ„DfÅ—sÐܼ:L`} ˜:“‘›˜ò݃Ýè”07ÿ¦R æŽð 1’f,ÁY^‹:—^M¦AG€N½Bn‹^°ì{ÖysÛf+Ûq˦ÚÔ (ó<°(ºÙqÓÜ0G{× AszA²L;7Ë[ƒw›²¼¥°Êj;’m.Í2¥È4+ÃYÆï}óéŒ0µ9@óˆvyóH:ZÐô¸WAÈN}áÀœ¥d©%.˃R ÷ξs1K䶽ܿ·È}²òô‡[™h½’‚Æ›’,v,0± >R æ£ÉfA#ã‡:®Gå+“ò4r£„h>eèm³Ö•VG ù¾©ÎÔá}2l Ða“‚ E¦ºÓÉ.̽·F÷Õ)¬&äUÛ¢Gùõ$öa´!´èÈѲ1…‘Oí0âÜÞíbˆFYt1äôБ€^,fÆïua;Ñ”ó¨æ§A/bN+^‹Àífš€%ÂtB˜ØÎAƒvrâzXT¬lb;“ÇÌû¶ZöŸ“HÁçñà—áFPãÀìÁYúØÑ„0Záþ rOÂ~âJAfÌÖíZÀzFÁlÔÃ\? ©EMzeÉíÔF~Ï0Zry› 3½p™|ÖHü«Áy¸ÏØÑyβé?›¼› ù‚#àŠç:R.·=gZ´MU↯Yžr%…ÑT˶!µf{‰nv´–xÍ.Íx4ô¢d üNÝl(—M§kvFÝÒÈÌqGŒ%D—0phaÞHòרb°l…S— Ñ;òʆÜÉÁ5!ƒä—Eˆ5¦äµjÊA{jRY2qð”9$II’2åµff1'Œ`üð#çN¤ šÞ(4êr­™›5¼p™͇"^H"ÿêc$äBÁeç¡+dÃäoò{VC·ÎÞf›ÂÖ¡.õÔYĵPó©ìÝ™U048TÍ^öj¢PC(ƒ°¤ÖKq³ת€Ž4´BO=õn½õV¬¬¬`ccwÝu–––Ò4Ë5¾·i®Aw¹™#|ŽkÏlWûظ€R¹ ôQ‚´Í ”³s ØÌ ¼ƒÂvPÕ¤5 š¢M’¡Æ*‚XÊnÑ[ Â!&“@°Ä …çN~øB5ÉÄáF"[J¬–ƒ­ÑÐ ]pÁ8tèàýï?>Œ7¾ñîËP/¸ÙZ%Uk¼¯% šrä`3]bçR ¶x€PjÐZ3r3òÚ0S>Í[~ÎSjáþ“X(:~g»ž¹¾À˜Òþ\N=eZäÙzË6–kk… :5]Ùq V4hU‹æmʉ?®¿;,L]i4̨Û9H;J^ªîÀMþœ{U`F(z6}ë”ñå.ë²ÔéžE‡´¡l`ežC¼#4h•v=@9r7Þxcvïºë®Ãµ×^‹ï|ç;8~üxgA% ¬e³ kEÅåÚGЄ‚ TLXE[ifƒö÷¼;“"j=ó‘ªÃÕ0Þ‚E‡`ΘIt0‰$ ^ל“l²A D#ÀäÆ(Á¹Lƒ`}™#F€Ë&Ùω{}–à⋘ºÖì®s{{g!òl3döï…ôˆo˜™ŒýªÍ^a>Kió¾5ŽOR9gܬeÅ`”Ž0€°çòÐû%vŸ¸ád€gN» /¹äÜwß}Åý¯~õ«¸÷Þ{qçwf÷g',6¿´1fXºl £Ëjª×êñ¯¢7J`\xð{–)#'êe¼WÞ×tmŽ`\ÁÙ·rŠ6$0Gˆ÷LçÌZSnËh™„:Ș‡„ûdÍ•€\´¦A›4/fL ÈE©I­N±åy#@˜˜dîIµOÍ÷vÄz†Ä\«æƒ ÍÄßdiò×QâùÈ÷äѵh®9 öõÄ2éí2"`¼ùCŒÿج=íz€ÖèÑGÅ5×\ƒk®¹7Ýtn¹å¼îu¯tû öý¯½ØÁ*Üö¯ZÅÕ5:ĆÜ`CS” ÌÂxÄøè>µšiCל[ÐÍŠÏ@…]›}x·¸ÀiÒ±ÕKí:ÝK›sÔä”úWzÞ CÙ¢@X5Ÿ¶àhà\éà°4h^Br7s¯¬VAºmƒ.sŸMú‘Õ€˜‹Í„pç œ%TZ…{^î¢GPÌ¢€5íÙ× ©9Ç2°²çr¬L.:`|òK²pv- ­Ð¥—^ŠgŸ}VýÎ ×;˜|Œ }ÈMȇl¶Ä PK-š&HÛ¾‰%ÓÙÁ€àN{š7®ÌX‹èñK“”(@ Ôr˯M»ØøTp¬u&Ù½8ÜÎÁÙfòj)¸²Ž"G,¡pMhå»`ƒ6VB`lÅ:+ÍMt‘ëtD4ù^eï ´e*´ç¤AG†…Éfï'Ù¸ç<~Ú,çì [¥[b™«3˪ˮ¦PìNzArí :¯¸5¸ d ;'_|4hJç ¬CìsYw9nŠ:¯èÍ5Vz ”éò¼xP&øÑ:7{°ï™…ráÜ9ðÈm¡©#,Á¡}J³À”Îâ3DÍä&ŒQ¤.J1€ð ñ>èp›´rëo,Ë,6- 8JÖÔ÷p £ý9Rn”€êŽwŠqûVaxâµ} Bò•Œ (ø†÷¢[t|N4ô‚D ê|å­—5xôM2˜80dšrnî臂DªÈšÊVîjj¤cJÜÖóŸ‡ÆÇÀ0´>nòð÷Ühc‹–6?'m뵄 “Ï ³_ àŒÎ{¤-ÍUë¬åÒ$HÎÊÎßwPG˽÷.Ziî&rÚsHV3m¤³EÑ$³RTÍ!í@6"jyXžQA­¸æ`=t¢ &Bã#[Ô€9F–˜Ku,7o( Ë;pÖµRÉ”7¾üå†YΘõ ¡‘q&±ÕSŽbëî¦I¦çȇÚ!uVæ9HgvñºH~§|vÆV5åšò“L(UR¦VŠœG´2ÐV¦º“«öÄ{L|Z0ˆ”Š€ûgä]’-º¢”Ûü½”YVK€e3«Ž@GzArÁ8;LES,!âˆf†ƒ…=ÚÀÙ™cF„…B„+Á²qGÑ¢ S‡×žŠž†3p&K¬2ý-µÏü¨B£òk¥uk3ª²_j$m šrU  ‰jøœ#T(W&`Ø6*l©ÎA¹LXÁ<©ïÜÄ‘‰Cᣠá”wŒ¢W°²£Ì;L«½ƒ(ƒ’ÕP þ˜ # ½ å6è>-ÚÿFàY´‰²ŸñrÂ0^3àŸ$9æd£}ÀÌ[¼âãG¡òŒÄµÞ}µ€º”T 5ªàÐhÙì‘¢(ꌦÀ¶@šP‚t~Xäë©…¬?h›iÐX)U÷Ò„›8Â'¡Ôœ9´ºsŠ6èÂÕŽòÜ£š—r>2=«e7…ÀÐ ¡£ A—ÖG]“œ™µ` 6jJ¬·6äX©s¦e5½‰qÑdÈî¿£sÁP6%¦²1{ô¢à\× µ!¶,k¥ì90ëèYcì5è:2+¸“Qm¬ÏÃ$™Ü]E.•êy¤¦¢-m,Äz…à €L¶æTbîžÌCÐZ®X y=8KW>ùŠ„þsРszAr~ÐÎ k¢U˜ô¿c4C%ær§(¯ÜÚV´1…#ç¦Tì¤ÈpP® R ´©Ãüš³¸aޤOjø¨t +ï@ëX4°®t˜#å+Ê~fõí`‹âiMjÚ´1pf›ïð•‡Õå—~Ï™9¤è2›³;èÁªtŽz™ÇýgY]G@3zAJ&ŽT³êQ1ˆý.K$f •ädaë (Q2¬¨é ²\Î&0sZö pæLjà\j % ×5èfûîcÎîY_Ò­q/’¨á$¿“ûõ¼ #„]aЉB¥HȤïf  VßC¶› qf¢ƒÌ{ÕÍ®º@¥<8P“„9 ½ ÜþÒåRo¹ "Ú +!09>òö|¡+ˉ/^¹sÞœ[ò2u¢w¨!+€º¹#/7 e^$ê´âJµ²— òöœ=…Ó õ)ʾ·ßôæ`ÖÄt¨Gjj8b3溹«ëôC2y°~éÅ¡wO6”Ùmµï€Îiè‰(˜8d‹`ÀQD–BAMÕ€Ø!œ+̬˜ ΔLø¶ Ç_n²Ë£Š‹Yžu|ÔYf¿½j­ÒU‰¼+Ì[ Íú3ÓQ‡Ê£桃´rç¶êÖ`|!XÈÑTÔ ój»Äµš}Wæ ÿgí]°³µ’0È–½xí¼8„4ô‚D€0q¸ÚÕ6sˆa·R9UWä`ÖàD&k!tÁ<5ªÜÇXÎN†Oգ°d>' °’ñÅ•–qQ2_Ãð’ivMPT[JkEÝÍ.ÿEfwË+‹TˆÅàEâPøsî¥ ÚDYަŒòKù&çžr/bqhå·‹iè)Ù ]­¢¢U§'Ó5¡¤tÔW9ÂfÂñ±n×åÌm¼äÀÜ£5ÇžtÒüx†-¿(²ÝÄǜݹUŸªwˆîªÝ[p6ÁüÎ0’€b‰wŸD©‘B²ì5Êrôª­’ñ‡UçdÖK9çª90’˜$Ô¬”@­¿ðÖ*ÂÀ8º4Ú 9 ]¡/ù˸ì²ËðÀd÷ãJBèîý²²ÖWºƒR«(ÅÚ°˜Ð‘3%>*8ø†š?! ¥j“f«e*«ÕT†s€s³e8¤ û!žeXä¿òX+i­»ç‘¦©j¥lÐgŠ´x¯ï½h18ÒO yT :½ÿy Y%×<›ÅjpQÖ@—´ëúÈ‘#¸ñƳ{×^{-¾ýíoãöÛoÇç>÷¹ì;nƒž©–C²VÓ|c‰S]kV”Y3E2qP¨`ßP_z7çã´Èn‘´Þºj§ÒÓãÕu€ß½FëÅjà\í9z‹B&¯iÐÙã¿ô÷Æ*B‘Om• ë3óC±¹äLõ"ˆuˆëÂÜ͵å"÷¹üÒ´!">V–7ÁÅä:£]З\rIf€Ïþó8~ü8n¾ùf|ÿûßÇý÷ß·½ím€ãc<þÅÿ‡û.¼~/òƸ*®Õ2Ja_ÂJÛÌ@ºË¯ãã @À@r‘oåhm$ ãZOKS#ÆCôü²úsJ¥¦iÐõóÀb£ z€š|äÀLЧ/y‰çW4Ç„!{']§.éÎʤD¤yj€\+˜ksiÐÄÐWϺ"À±ã?À‰ÿ|ËvÆÇev-íz€Öèšk®Á5×\8|øpgXÙ¿‚KßþZl˜b²¦Õý¡sZœƒmtpŽéŒä…‚DshД©î•,¤d©”·Ž‰š©£6ÄÖTy™i,ä§|ìžèøˆMò¶» ¥³neyèãç ëkFªï%÷à(ƒô—R¤RÖB¶ ŸBƒc+êü¹ç½÷¼ëž8úÅV*»Š€î¡/~1¯,A»p•8¯¬uŽÔ@ ¨·K ZcŒÞ¤+SYòTêñœôíöÎc¬S”Œ9S ˆï¹²ŽÒÜaPÆÖ~]ë9z©a$%€.b‘.gW-u7%_>J±áºŠ‘9H[ è+m¶ª±–ý0³¢W@i­®•yafW²,OrkÎ@Ž€^˜Âž„ˆUYßQ¯¬™”'Si“¤c¥o |û¥~µ•2ò°å:µJ-:OV.TÑßJJ­™ë,û­‚ヴ ½ %?h(Ëó&JÜíþ#›Z'Pá"E n¢ˆ’™£Ï\­á.ÎBꀬjÑh3ž¤[ØX—BBˆñÓƒtôçµ…|šìYÖÕâï+8•ñSθ¦E“}.7s—òè µS²„èZg…'w¿ˆÌZ‹T|}ære>L2· t¢ &‹#޲‰R­u;!¤ IYe¥¼Õt”‡íóv£&D1A$H7`2Ì–-€…¤€%Eí›Òü³šcí+ÎÜÏËZtMÞÞ"±Ôx•i®3ׄ°y’U¨ví·ÒöVtêg&ÁIpgew*yYwŠì»™€^B,·ÂMÓAj€¡·˜y­ hô,1^ú¶¿ 4a¬Ÿ™d¨’<#¨òX­kÈ%ÒªÖ9B\‡[öèAƒ.iè)K’túœgãØp«¿HèXySÉ’& ô€ G³‡ààì?Sâm”YO_Õ5,˹‹Zi(_õcdü¬íè-Ó“ öÔlR°&@J=ﯹØUÁ™¶È>ØcZl½¼[+ó£ºÒâ…GÓÝБ€^\}â]6QjµžPÄGÒZIÐÌÕ®l\‘ƹÅ®a пylo–ý9©rëÜËN°°[(Õ8+mn´%7¸«–ƒ,(å°qOï¯ç î9RŠÁX+ɰ¡{²Q)™¼ ò+YÙÓ²ÍËz G@/JÄmÐzsÕͬڱxÍ}OR-ºOsóbjœ™8HË&+U _¬ÒjÁ¸ KåRŸü¼¥ÅÉk…´Û PÎú¤ Ff\Å>:[­p4äò/Z 5ª"ª¢97²ÚÜÕyy·ƒó3!ˆiÐÄr.e ÙÔ:“Üý:ÑÐ ·A÷kÐZ Í¿*ºÖH÷‚3äIž½YÚ±Ocm¹w™¯y9ˤ4í.v„EÐìÖü³ïqU0›ìϸW6—é)]Fî6ÂóZ¬’A~MbÕŒÂ<—£íó’’6B{n½1wXÉ\æÐæ‘[½ðv ½ õÛ ç4q >^Ç '»~x?WÙó§Dj ¤‹Ør2É£’W‚ŠáZVõl×4è–öÚ’¿à,·«ë²¥ ÇŸ+b5{ºì“Hp¤ü1]Šf1¤'ål™ŒÍÍ{•)‹àÔC9§˜y¶5ïE—Ô‡¥æÍ¸P¢š…ìöÞ®¢ ¤ a$Í.èz*b¡VI>RC\®MÐè‰ÅÁ¹ém·&kBÒTøV¬S©Lñd@JÙ*Ù/1©•S -<Ãl&Tåû´Ê]aáÎ ;t8­¤ò¢ ƒ!EA¨d¦dÝÝâîumÓ’”´æyFŠy¨™L€ZÓ0ùŽÞFþv—ÓÐ í&¥ÚÖ"OÈDO-îu€±ýk©RDPj!¬&DО+ôYþL¯Ës“ÉS“·QµÂiï“b¼oë¤B5*@É®²eµø^„¹UºÅyfÓ{×uìò—I'¯å½dœ¥òÇ‹#§ &>e¥·j®>IéDð Ô5œdçi2 úàæùèŸ(Ìa²œ1£œáàÌrž×€/éóF|SËu¥$æyTË2IYt˜b¯²Umæ–¥P+{ÙæñÛ2”RÔ³Ì6³Rƒ“k$€Y†Ð«Á´Äë|æk>_Þ4ô‚D 1IÈ+±ÖE#˜ßæ`­µ‘9, µù˜’Q±jÁ¸/RG+‘eqÚÊœ³ Ø¿ˆ¡¡B%̵֨€r‹qV¾©­u–!õæ¶A‡¤I{á…Œ9´æ5Õ™8”wϘÛìWŒ ¯|B›e“ŠÍg@GzAr•Xt­âgQïú~ÚªÀKù³0ÔÊÞ`Æ?¥ ZÛ—=ç‚kz¤ô’p€®#ªd¬ T+ÛÚ}Æ‚ô<¯+(±uŒa@¦ Á5hù¢+þ•¬§K•·éÒX‡rù>rÊêž‚“Ö³ ]¡C‡á›ßü&Ö××qÛm·áàÁƒþ›|¶^ñ™Î3­´Ñ©`74hÎQ¥‚q‹¹€Ík[¡ü|.+î]AR•q¶^(5¦e–ç;«¡B“QOÁ†YžMÒ³­–¿nîÐ~RyÇ\ßÅ&OȤ,Äw„í ¼»hh…ž~úiÜ}÷ÝxÓ›Þc öï߿˗z×´‹9 RÔñjÜ|ùLYÌ¢ÞðLì\™ÌlúA³ûóš8zÜídHŽåAÙdì|GÃ9ZÌ|­»˜;ÇUâ&ļn1% -|âÉë“‚j1XfÎj•2?ddéj9æ²²‘ÊБv=@9r7ÞxcvïŠ+®Àêê*î¸ãÜsÏ=¸çž{pýõ×õ)w³«Uä|ß?AÑQTýiîÿ,i0O6á‰æt’¶•Ð3̉‡ò¾þê•$Öˆe¸¬3QÁP˲ª·+fja¼¯•½Q²Z{éTͲ”E]òCÜh¡­ÚL×M…„Û4„Òç\®–•}ÿ@Žv=@_rÉ%¸ï¾û²{?þ8zè!ÀÁƒñðÃÇï6Žoá;ÿûÿb àü׿¯xý«1¯‰ƒøµöX ™S ºVYcÆß¶¤Ê¼¥v’,…ŠÒ/#œµ§”Ô`ý¡Nö”sXxsÁ«^×^ðz,ø·ï~AËÌ®¤ +ôGôG•oÜ 0G-FÄÜ‹V*·åñÆ=°š°Zm´}‡6¼õ Ñ·c­dá¯k_·°’Û õk¿ù•1/c ¥Ýöæ‘YæS_ë,©õÂTªïÅ£¤ S–B³¶ò²ÖÝì´¸rÒ ÈJ=ç}_r»‰€^òIBî¼Ä+²þKÈoçÁH+ç°–s÷bKè‚1æq7[h¥pä&÷¾ì—x¤­7lku ”j ’5†^ôRo°)´¼0ú >¨î= ¬ðÞ qÕŸeý $øî 漸•äQ 3¬$ –³ ½0I€îoEå&²(+/·[h •h/-ó/*×ñ~1q9'Tj~ÐÙAyry±²µ8Kh˜ëP©fW `Ĺh†l5á¼Ü©`ª<Ñðæˆ~Ð ˜°äÝ«µÙýVÝÐÊœ—|©s›<µ¬?PÊ»'›±ïgž2E±íbzA †…ó‡ÁPékm¯é·‚Xµ5 ܤìJnÄ9k€rýyŸê.™(‚h_—Y,#@ÔÇø2¥F ÌóÁBÝ4¶Ç‘¥]Îì Õü!Ê:g…±š]*oU³[úeð’okÌ©Ž$¹¬ˆóÔñ¸:6ï[v= ½ qGªÐ%ZéM$KH^÷kfBdoÔeˆ+UInÑ! Pë{²Þʾv×ʹ •>õRÍQd\T²9G¶K½´”§ç¥Ìó bµs-’:”Pµé”Ú¼õ½È2šÅv!î*zaÊ=Em4 \7@³/Ù¡m®Í“k7—9«¶­KŸŸ–¼"Ï|øH 4aªÜë{¬rd¶Ñ\ëåϘª3Á¡œjñWÐç‡^­\­ìòZ,+±oæ{áÑê¡Ð üÖœÙ6è(­J!“-xË'‹MúÄ!QG¦Ê;Ð 6ÞÎàtn–k•Ž|jµrNÌ«Uk+ ›ƒ»”€^˜rG0ydŸ”]«¼਷U­ÙôGfãNδOƒ.YÅsëå¬q-FóÙ€¡>Q¨/ PH<¦Z›|©÷ü{ŠÏuñ¾Ã9i¥À¾P%Þî){™'°å”’3‡]Åž–é×z½–Ù³Ú#"{Yß϶_l½¾ÝF@/H¡š†›ì¯M`±Ob)Éåg­J,ÎC¨†Ú\P©çœ¿ú‹>Ð@ '¦9Dµ­uÌ×.N}XÁÒÐǵ†—‘ o=—ñP—ÕS›yFyX½ö[ævh¥²ù£´A#ÿd=0AÙAWüœwŽähè…ÉŃNÍI«Ìî9B>À$Àïí–%WoݾÎg±tß"(L^‘ûä ±·’ÇDåµd´fã®ûÜì´ç•Õyå‹Tµ¸²4hÐ9 ½ °àÃïÊÊ&¿ ×Ûªœ dZ~jIª€Mâ ©J’Q®­N¦iôr“¹®7y¹$…²IBù‹Ü»C©*Ϻ¼öG˜$̸Êkv/¦ß#Ès…ŒûL«ï>Þ/·‚•©ôQ!”kGєžÎÜæTøÜÃ@Ž€~”WêÄõ&‚v½WÚkµBW޾\ÄϹœ±¹ªÓôrÞŸÝÒå+]Ï;1Ø“{ùˆ>ïq·ïâeHN⳿`*GmuõèÝ% òÓ²¼¥£¾K/ÐB%ËšÝþz»»hèI.õNÚ]߸¿•få§Ú\6IX;HkJ²ÅHIjÍןW] gs”M\‰$jÙçÜgjCùT˜C‘Mû©RöM×ãF~Â]ÊžP«Ë¾Å 6âÑ‚eIèïÝÁmo“ í€IŽ‹´æ¨ÄÁXI&Û›`@éH@/HºúVZõz´U š„ZÝÎïñø=ÍU›¥lùáÖ°R|¥áa%«r–)hm TJ¾Š¾¹QMš:cèhÅ_r&Ë|¾•rïVÉ»•„_RÉ­è)ªÁ’ê?ɓﱜífzQ"€(yq8 º5TÈN•&ÔnAéšOC»Wç»lÎ3ä.³•ÝÊë‹O>kß4*¤Z+œ9-ê§VZ°åýþh”5ÍÆTa.™ª@›õ$Ÿ(ìyÉD¥ÖÌGÊk ~R©Ï&Îqꥷiè…É™8ò†ÚjºymÍ+ UÛ@/pÔ~ªà‘”¿•å¹b U‘Jy!‰”J gâ˜Gwía®!––]v­­Q¹÷bŠ&Ÿ?×ÔËÐk6rôçÂèµRƒ4_l ш쩫 K!òjEƒ‡¤ $Šiž;TêúRX(×jâíJ̇„ —ÖùÂLkûλ޹¼Sµƒkvm¨¬¥Þ`X€÷G4ŸY£‘åþ\kfŽªêÎf‡yRª× Ê§J¦‡1˜ƒ){npaØayVyGØÓLv ý"(–ÄÁ£¿27íuüqy-4©š  ˜¼j3”L[pÔ3;Y$Mª5¸’’äœk2j)ÌIs0®í ^ãZg(A’k¹¥Æì¤r_aU‘ÀŸ·ôäT¾Ò…±ÿŧǪ4/[q.zaât¨¾2ÔÌBÀѨÀ5̬)W5Î%÷4J¡æ5¤š0j?ipí) V¾z˜ö0æ8Yó!i@U΄Øyõ1Äš‡q-¹Jݹ^¢a>e^3G«n“–5v/[ D"õvAî*úEPÍ.è#‹ ½‹ËOßFkí£µüxœÌ>˜?¿'òV˪LJ0 ¤,5 “ÜgÍ'*®µ<}Lç,ç G­¿TʺÇUÇÊYÉ Õ^Mý¨‡vµ¨ÉÞÃXaž­".ß%zA’´‡5q ñ™ÎSùX @„m´0ÔöKšÌ¿¨¬Ú˜Ç»B‹EÞhûcqÔòR)Œ9“ãáG• M­²&4·#°Ž´&D¹£7ħ~T*¤Þ-R³Ô¶à4˜ƒ…ù ñeO@¿2ÔÐy,£Çy²â–ü©ÖV”¹ºìq*¸($¿z¨gåFoQ¨’õáfòâ˜GÇêÉyP”•ó\.vehµhÍ9Û ^Îîg¶"]_w$sžøÄz.X÷…œˆ(‘ùY p¶Ò»ßýn¼ï}ïÃïüÎïà©§žbß?|Ôû@‡>”]§H!*KÍ;;Hœûãèg×ñ0ùÁÛÕBÛh1†‡ŸxLaT9xë‚iB@ᇇŸ`e’—ÎO÷Wfï‰Ã‡kY~QÄ'?yâpÄXwPoñT_¾…«®º ßúÖ·âwàLJ",ø^ÑmÀ¨TdÞÞä5%€®Uì0ò¦èðÑG-,06ÊQA1BIüððÑâ¾Öüó¿ZIk\Òý£?8œg©õzË®ÕGŽnž¨ú‚+åË;üèQU yjcíOW4OþQÏ/`Ý(ãUò{êÔ±ÓÒŽ_´ëMGŽÁ7ޘݻîºë`ŒÁïþîïâ±ÇÿøEömY!û‡„ýDòQ2YhâXafZÍÌÛ QùZI²Í•â#ÍÆíŸ­3m áÏHÜn%1g9ËŸ*l¦Ú=%ÅÌ”D9C嘟úÊ9{×ì› oKš+G‹±2­ñ"+ñË’ÈZûoÞü³äl¢|÷ÜsþüÏÿ_úÒ—ðƒüðøå_þeŒF#¬¯¯ãÀ8pàÀ•娱cgœÇÀkàõ³æuìØ1;æ4çgžyÿþïÿ~Æx½”hh…666pà 7à /ÄO<}ìcø…_ø…ŸµX 4Ð.£ _½ûÝïÆþýûñä“Oâ¯þê¯pÁœ1^‡Â7¿ùM¬¯¯ã¶ÛnÃÁƒÏ/øä'?‰x÷ÝwßãñÔSOáÖ[oÅÊÊ 666p×]waiié´òØØØÀïýÞïaÿþý8÷Üsñ'ò'§5}NÿôOÿ„¿û»¿Ãd2Á¥—^ŠÛn»íŒñ€Éd‚ßøßÀ•W^‰~ðƒgŒµþð‡ñüóÏã‚ .ÀG?úÑ3ÆëÉ'ŸÄûÞ÷>¼êU¯Â‰'p×]w1^/%& ¤Öâ馧Ÿ~wß}7–——aŒÁþýûÏ/øò—¿ŒË.»ìŒò€ .¸‡ÂwÞ‰óÏ?‡>í<î½÷^üæoþ&î¼óN<ÿüóxüñÇO;@¿ök¿†¿þë¿Æ¡C‡ðµ¯}íŒñ ôñøíßþí3ÎçþáðÈ# ë:œ{î¹g”×·¾õ-¼õ­oŧ>õ)ìììDsÇn§]?IØ¢Å'O/¯+®¸«««¸ãŽ;pÏ=÷àž{îÁõ×_Fx]{íµøö·¿Ûo¿ŸûÜç~j-^×]w®½öZ|ç;ßÁñãÇñÆ7¾ñ´ñ tôèQ¼õ­o¼æ5¯ÁO<‹/¾ø´óátèÐ!¼óï<£<¾þõ¯ãüóÏÇå—_Žçž{îŒò:|ø0~é—~ úЇðû¿ÿû8rä.¹ä’3ÂëÊ+¯ÄÛßþv|ã߀µö¿Ì¶~¶ÓÐ ºä’KŠ¡þƒ>ˆ|0N :t(N žn^?þ8zè!ÀÁƒñðÃÿÔ|j¼>ÿùÏãøñã¸ùæ›ñýï÷ß?Þö¶·^ðÕ¯~÷Þ{/î¼óΟš‡F]t~üããW~åWðãÿ]tÑáèöÛoÇÊÊÊi© -ºÿþû±±±üÇÄÓO?w½ë]¸ôÒKϯ‹.º[[[\ý{á…θûî»që­·âꫯƇ>ô!|÷»ßÅ›Þô¦3Æï¥Bƒ zAú¯ž@üð‡?Œ^xÏ=÷>ó™Ïœq4\}õÕ§md Ñ£>Š·¼å-¸æšk·Ür ^÷º×VxÏ{ÞƒsÎ9ûöíßþ韞Öô9ýíßþ-þðÿW]uº®Ã§?ýé3Æ+Ð׿þuüË¿ü >ðœ1›››xÏ{ÞƒóÎ;“ÉŸýìgϯï}ï{øøÇ?Ž‹.ºO=õþæoþkkkgŒßK…€h :Ki˜$h :Kièh ³”€è%K_ûÚ×ð«¿ú«¸é¦›ð®w½ §N*ž9zô(>þñ«¿ï{ß‹ííí3-æ@½hz —,ÞùÎwâŽ;îÀÞðüë¿þ+nºé&ÜrË-øØÇ>¸ãŽ;pýõ×ã¹çžÃG>òÜz뭸𠱹¹‰«¯¾ÿ÷ÿ3ÎÅ@Õiè^²d­Å¾ð\ýõøÆ7¾OúÓ8ÿüó±wï^<òÈ#Çx衇pñÅãàÁƒøÄ'>Ü}÷ÝX[[ÃW\¯|å+?ël 4P•?è^²DDxÇ;Þ~ðƒ¸á†ð£ý7Üp^ýêWÇgf³Y<ÿË¿üKüâ/þ"~ý×°ººŠ“'Oþ—Ë=Ð@óÒ Aô² O|âسgn¾ùf|àÀûßÿ~À9眃ÍÍM<øàƒ¸óÎ;ñØcá#ù¶··ñðÃãÍo}úØ[‚YˆªW»¨ºÇÐNW7œQ±J:®?¼Ž2!puv5xŽj  ''ÇÞÌ&--ÍÞÌBTÝ€¸ÚEÕ 8†öû§Ù@§û"þáb¹7A tjjª½%˜M||¼½%˜…¨ºqµ‹ªp íw¢òÒsƒƒp)I<ÿ3 ¨v´Ç9„……Ù[‚YˆªW»¨ºÇОzŽgÐÞµqöîY@˜¿ýuÉAH˜˜ho feo f!ªn@\í¢êC{n<èrò tÝòuí)I6Bh{K0›&MšØ[‚YˆªW»¨ºÇÐîq‡]m‚}'€j m‚$´=¢êÄÕ.ªnÀþÚ‰€²) È…‚šUDôh”r+…ÀÒŸ-! ´$´=¢êÄÕ.ªnÀþÚo]ËAEº»®•p#ó&R²RP§\h4»ê’‹Z ÚQuâjU7`íÿ½ ä"Ù7HXÿ3 ¨Vƒ„¶GTÝ€¸ÚEÕ Ø_ûõ£ Ì Öÿ j Õ ¡íU7 ®vQuö×~÷8h÷jùºN¹:ö”dBh5Hh{DÕ ˆ«]TÝ€ýµ§žã ÿÆâfp‚h5Hh{DÕ ˆ«]TÝ€}µgd7b¥Ÿ`íáâÐ2¡vÓd.Bh5Hh{DÕ ˆ«]TÝ€}µÿ÷J—·Ëâ^Æ=„• ƒ³“³Ý4™‹Z ÚQuâjU7`_íQQ@upïhŸ búŸA ´$´=¢êÄÕ.ªnÀ¾Ú£ŽiQWéã³éìjÑÿ j Õ ¡íU7 ®vQuöÕqžÈ€¦Z5¡„€ Z ÚQuâjU7`?í™™@v »7\ëTW ´=Pƒ„¶GTÝ€¸ÚEÕ ØOûéÓ@p.5ÕÙ@»8¹ zÙêvÑc)Bh5Hh{DÕ ˆ«]TÝ€ý´GFæ“B*àVê-Ôò¯Uâ2WŽŒZ ÚQuâjU7`?í ôÙŠlÞDuo‚h5Hh{DÕ ˆ«]TÝ€ý´GFÕÀ.Žh/ŽU©ÚƨABÛ#ªn@\í¢êì£=+ 8u ¨¡¹rwÇÙœ›ÄÍ5ÐjÐöˆªW»¨ºûh?spÏJF9º MÕªˆ¸Í¨„Z ÚQuâjU7`í‡å»7—í¤qB-ÿZ6×¢Bh5Hh{DÕ ˆ«]TÝ€}´ÿûo~€ðaõ \M¾Šêe«ÃÃÅÃæZ”BH­ m¨ºqµ‹ª°½v"`ÿ~ º†gÐ1Á^€:åÅõ?‚h5Hh{DÕ ˆ«]TÝ€íµÇÇ @ ¿¼&Iå´Äö?‚h5Hh{DÕ ˆ«]TÝ€íµÿû/oëy±>åþP·œj -"!!Æ C‹- íÅO<Ñ£GcΜ9…^Sƒ„¶GTÝ€¸ÚEÕ Ø^ûþý¼ ÌbÇñŒX@“Jâúñ0ÐX²dI±ÀŸF£¯¯/RRRP¹råB¯©ABÛ#ªn@\í¢êl¯ýßdÃûn¨r%DÝ>OOÔ.WÛ¦:”ÆîÚ!!!8xð –-[† ò;«ABÛ#ªn@\í¢êl«=1‘s Ÿ Ї&7±u«à~Æ}4 h'›é°k %œœœàëë‹ììlݾ˗/cÕªUX·nÖ®] ˆ‰‰ÑÝÒã•#î‹w-römÛ¶Ía´ÈÝ·gχÑ"gß¹sçF‹#ß/«WÇHC÷Ú— ªf)à.P¯L=“Æ;~ü8Ö­[‡éÓ§ãÁö]; ": ¡½¤¥¥á½÷ÞömÛðì³Ï¢qãÆ ‚··7V¬XÜÜ\T­ZŸþ¹îœW_}?ÿü³½$«¨¨8ãÇß~ |y6Z¯zŸMn)¹{°¨Ç" o2\ÖXŽf[ì>ÿ÷òòÂüùóõ¾Ö®];½ûEŠè[U7 ®vQu¶Õ.È›óGy%Ÿ8ô¡ m¨ºqµ‹ª°ö´4àØ1 \9 Ìµ3 QÙqpurÅ埰‰k"¤Vƒ„¶GTÝ€¸ÚEÕ ØNû¾}@v6ðt;‚&:7ʹãvF"êU¨ww›h°&Bhµ’ÐöˆªW»¨ºÛiß¾·½ÚÜîÝCTSNÉ}Ü€ Z­$´=¢êÄÕ.ªnÀvÚó’EÐ¥Jžÿ¹f)@ã€Æ6¹¾µÒ@‹$QuâjU7`íqq@L P·.Páξnyvª3h;¢ m¨ºqµ‹ª°vɽѵ+€hžAw¹ 'Tl`õëÛ! ´$´=¢êÄÕ.ªnÀ6Ú%Ý­€èhÜõâ³ï ¬\¼Ý¼­~}[ ¤Vƒ„¶GTÝ€¸ÚEÕ X_{v6°s'àá<õ$gÎàx —u<*î @P­ m¨ºqµ‹ª°¾öÇäd }{À3嘈¨åMTmWÔ ¡íU7 ®vQuÖ×®Ïÿì h\éÑÈà5ÐjÐöˆªW»¨ºëkߺ•·Ýº[Ùˆ*Í®ÏF¬zm["¤Vƒ„¶GTÝ€¸ÚEÕ XWû•+@d$P½:P»6€èh$»‘„êe«£ŒG«]ÛÖi Õ ¡íU7 ®vQuÖÕ¾z5o_~ÐhDGãDï{”„€ Z ÚQuâjU7`]í+Wò¶ÿ¼ÑшªÂ¦L5Ѐ$´=¢êÄÕ.ªnÀzÚÏŸNœêÔêÕpçpû6"kûP ´C  m¨ºqµ‹ª°žöU«x«soDFUÖšUnf•ëÚ ! ´$´=¢êÄÕ.ªnÀzÚ hÀ±c¸å \r}ˆ:åêÀÏÓÏ*×µBh5Hh{DÕ ˆ«]TÝ€u´Ÿ>Íu :÷±c8Ä?¶ j£ø5íZ ÚQuâjU7`íÅfÏè`þ±mP[ůio„4ÐjÐöˆªW»¨ºåµé1Ð7o×®á@-O@Û`Õ@;jÐöˆªW»¨º嵟8\¸4oT«–·32.@¤&Êy•CM¿šŠ^ÓÒ@«ABÛ#ªn@\í¢ê”×nȽY ÈÒhÑ&¨ 4¢×t„4ÐjÐöˆªW»¨ºeµto¼ôRŽÃ<ÿs›ÀG/@j Õ ¡íU7 ®vQuÊjß¹ˆžz  *ð±c8̳æGÑÿ j Õ ¡íU7 ®vQuÊjŸ3‡·cÆØyý:èæM u†«“+šVjªØõ ! ´$´=¢êÄÕ.ªn@9í—/›7•*}úxáØ1\ðî¸ç iå¦ðtõTäzކZ ÚQuâjU7 œö~`ô¨Q€«k ¨<ŠùÏBh5Hh{DÕ ˆ«]TÝ€2ÚSS%KØ0¿ñF‘ÃG¸‚PBH­ m¨ºqµ‹ªPFûŠÀýûœ¹Pà­8rD T ´ƒ¡ m¨ºqµ‹ª°\;0w.ÿüÖ[E^iëZäî+¨ßÞZäì v-¶¼_Þy' Z-ðÒK1ÈÍ-rÜæÍH¼w@©ÄRx¢Âk>~ü8Ö­[‡éÓ§ãÁƒp(ˆèÙ‰ÔÔT9r$…„„ШQ£hÁ‚´eËÒjµ4|øpzóÍ7iĈÅÎ{þùçKøûï‰"ooÞÖ©C”šj¥w!ÈÈH{K0 Qu‰«]TÝDæk?wŽÈɉÈÏèþ}=ÌK;ª꽪·e"õ0tèPÅÇ´» ½¼¼0þ|½¯-Z´Èày% ³³o¿åŸ÷ï>ùؾ˜=›¶3¢~DÕ ˆ«]TÝ€ùÚ'L`/ÆGz³i÷îÅμv£«v6_  8¤‹Ã% ÿˆºw7fÌàýR;,;#jàGTÝ€¸ÚEÕ ˜§ý¿ÿ€•+Š7ßÔs°gvUcÿsçjªvHJ ®YÃÛwßåmݺ¼€ÙÉ“À¥KÖgÙÁ“ƒaÀ§Ÿæ;ØN<®+{"ªnÀ<í&ðöÓOoo=DG#)õ."+‚J¡†_ ËD €Ú`%aN°w/àå´k—¿¿o_Þæ퉬 «³g€¥K}ûøç'¬'®÷ª6{ ªn@¾ö£Guë¸èȑڻ»CÒðìùQlÐ_! ´ÁJ£G‡Ù8»¹åï—Ú`9€6¹ÂJ«FŒ²²Ø!÷î»@Rðê«ü¨gcçª6{!ªn@¾öÿý/ëînà ;óýÏ{Ô@ îÜÉÛN ïoب\8vŒ;°Ø“ƒ'k×°ý«¯€éÓfÍØU³k—uEêáq XÙQuò´ïÛÇqüêÕyþ¡—Œ à￱³Ïš;UídàÀG ! ´Á ¡d¸ŠhhÕŠg¥ÇŽYWœLžüò o'M\\ø=|ðï›6Í:âJàq X9¢êLמ““_-8iR‘–¢Ùµ q.©¸X–P¿B}T,UQ¡ŽZo0'ˆˆÊ–åsQ¤‚þÇ­+Î&OîÞ¶mÊ•ºvÍßß§ÂÓË—­'R[ÀÊU7`ºöï¿çØw»vÀ+¯”pàúõØõ˜¹7A ´Þ á¥K@f&Рà¤çm9ˆ6)x²f á¼ôRá)…‹ п?ÿ¼i“uÀf«û÷;wRÔ`›¨ºÓ´_¿|ñàìÌù Æü´Z`ãFì¬þx¹7A ´Þ at4oëÖÕR³fl¸#"¬'ÌL žH©‚­GÞnܨœ(°zÀ*5xûmnü[¡Ф pú´"C‹lU7`šö>à˜þ;ïõê•pà‘#ÐÞº‰µ\àâä‚v!íJ8øÑBH­7HhÌ@{{õëó×vB‚õÄÁhð$#ƒsŸË–Z·.þz«VìúØ»HN¶ŽH=X5`E Ê-Ì\\8Ztü8§ž:eñð¢ÛDÕ ×þÏ?\SV¹r~þ³AÖ¯Çé À·l´ lwå„:8Bh½A³gykÈ@@‹¼ŒT^”‰ ž>Ì®švíô»jœ¹J2;›}Ñ6ª«éÓ9k¥Z5vU]¸ÀÓª»wÙÍ“•eÑð¢ÛDÕ ”¬=+ ;–ž9ð1foׯ¬Ê» "¤Ö$46ƒ.øÚ¹sÊ‹2£Á“½{yûôÓ†yöYÞîÙ£ˆ&S°ZÀ*1˜8‘óÖÿú‹ë|5.ÑïÒˆ‰É_ZÃLD ¶‰ª(Yû´iükíÜè×ÏÈ@.gÏbWƒR¯! ¨.$ÌÍåtÙ²ünˆÚµykGm4x"Ýöí #<UB’IX-`5c’ÂE9 äï×hò]ááÜÛÛLD ¶‰ª0¬ýÄ þuzxp‡ÑbÀµk‘å ì ÈD)·RhQ¥…âZ! t± a\ûnëÖ-ù7îºÄàIFpèP¦LacU”ÐPÀߟ‹V,|ü7«¬îßçÙ±›ðñÇÅ_ ^{ øÊ•f_FÔ`›¨ºýÚ32€AƒØ;7ujþŸ£Aˆ€¥K±7HÕd£cÕŽpu6”(ýh"¤.$4Žp±››] t‰Á“S§ø.nÓ†}͆Ðhx±¶¬,›5P²JÀjÍãä­ SŒ×_çí’%f_FÔ`›¨ºýÚ?ý”×ìÒÅ@·º¢üû/pþ<6<Í‹Âö¬ÕSa•ŽºXÐTíì Ô¨ÁÁ§¤$ëˆ3B‰)cA_¡MQš7ç­ÜV X-_Î[ƒõ½àÀn:\jfF‡¨Á6QuŵïÚÅÁ²e¹÷—¾øw1/ØPŸŸ«õœòB! t± ¡©È®:^YQ&RbàGš —äÞ°±V<`Ë *„„O>iø8†Ýÿe›¨Á6Qu…µß¿Ÿÿ ´â«ßçí AƧSƒóÓÏŠìÀ”‰¨Á6Qu…µË¥/¿lâ+WiiØðb@ÏÚŸ{Ô@ ±öñ1í«ÙÎÚ`à‡ˆ ´›P«–ñØom“}Ь¶mã­Ô ¶$8÷ûÎ`ófÙ—5Ø&ªn _ûÊ•Ào¿ñ­úý÷2X¼°18УV¥% ºPðêU6PÆ28$ìl  ~nÞäœàºuKhéU„æÍ¹O þ X¥¦r¶J¹r¦ùÛ|7‡ÁBQƒm¢êXûµkÀèÑüÿeË89É$NœŽÁF5p$9¡eBQ¯BIµà.BèBAB9î ÀîÚ`àG €™âÞ°¡›CÑ€ÕþýìªèØÑÄh€çžãÓöí€L-¢ÛDÕ ))ixõUö?¿û.ÿªM櫯›òýÝ£VÇbõ}i   åh??ž¹]¼È.6Æ`àGN€P†ZÑ€•¡¾Ý%áæÆÇgeq‡wˆlU7|ýuy’Ÿ­ÈĉÜ)ö©§šèVh3™/¿dÍ}„ ±œåó¸foHi uAÂÜ\àÚ5 R%Ó3»h½Ÿ xêQ¿¾i™(‘\"R»U+¡XÀÊÿsA¤Y´ä&1Qƒmf뎌>üïóÐPΔiÚ”§³¥KsOññã9£ ß|ï ¤•Ø­ rN^ùòо1Ïm„³ÆÝkvWT£hi uA›7ÙHË™=v5Ðz?æ%$×NLŒù¢L@±€•dXe…õ ù¡e¸9D ¶ÉÖýà0r$Ç&¦Mã/þ† çŸzõºucëyø0ðí·œoß³'?ÕY¤õáC`ÈÎúœ3ÐhdhÏ̆g S§âÈý3¸•z O? ?O?‹t‰Ž‹½˜ƒ.Hxõ*oåèjÕ¸2ÍZoàÇœ¡D®´²ö Z‘€Õ•+¼Ømƒ¼¬•9´oÏ¿»;øÚ„'Qƒm²toÛÆ¥®_Ê—>ûŒrppáãˆxæ¼z5/¸q#ÿ«_Ÿý/¾(ÿ)œJwù2л7/Ž£ÑÈÐþÕW|ÿvé¼ú*~ßþ wÞ²uúˆ,X@[¶l¡½{÷Òˆ#hذa4yòäbç :”(3Ó2ßíÅ‹ìÿjßÞ¼ó•büxÖñË/æñàQ«–rº”fìXÖ¸j•2ã­\Éã«Ìx¢pî‘§'‘‹ ÑÑ£¶½ö‰D]»òçÐÞ-){ÇnvF—D|<ßçÞÞù>çÛ· ’œ‘L_zP©)¥(-+ÍzïÁŽæƒ¶8zþüùOOO¬”¹ò²———î›¶(íÚn’““Ã)EDæ¹7€üEJmìâHKK+ì£å­%.ŽÒ¥y±‚K—Ø'é¦|ï‚bºå"epH ž,¥U+ÞFD=ÔbívB¯î>`WѤIÊ}–¦Ò°!Ž}¹ Ÿí؉oè#4N= téÀùu;­[s¶ŸÒnÝ‚×åË\b¾q#g™¸¸°îO?-¶(òúsë‘‘“Á ÃÓÕÓ¶ï˱È@5 mÚ´A«V­àéé‰óçÏcóæÍ0`šYñæIMMµÌÿ p©bEG«5½/±…ÄÇÇöÏI>hK‚„ ¯]ã"9ýL¤˜n9dgsˆ²e-ŸÁÁÜ·ääIî]‚¶H»)¦{ß>6v¡¡ÀGÙ\OZ§YÇh;ã…¹ÇÐØo%û¤#"€_å’v:åþþì+3Ðô€ßOóhê°î› ‹ tõêÕáââ‚… "55õë×ÇçŸ??ë–gúúúZn þ#¿u‹ÿUª¤Œ8#è ºº¼qM¦Nîscm‘‹Ž22¸B©Æë Ï¢×­ãYZ ÏŠhœ"º‰8ppå]^Ì–|ú)ß^ݺ£Ç:šÀ€¼Àëž=ÜÄ*) HLD˜·7߇uërÞ»§áYñÝ´»øûÒß(çUªšÙ£åÅ¢iãîÝ»1sæL]–Å©S§¬nœ¼JB¥ 4?– (Ta•šÊëì…„X>ƒ—þ˜­TòmQ5žÔi¯iSeÄH˜èæx$* ÿøƒ Jš4ú÷·¹–#G¸ÇF™2\Rè{¶tiîéñé§œo·t)¢† ãsûö%gø#úähsЯn?¸:Ëhzö`Ñ zÕªUX´hú˜²ð§‚øûû+k ãã-,f…*¬$ÿ³ýVÎ…¶¨Oiÿ³„‘Á«bÅÅñƒIË–@ãÆ‚Wfe±ñ€ï¾³™;N"'xã žÄ÷i›rî—ßNý@uoèÃ"íããƒ÷Þ{O)-&“““£Œ–εa °PàG)ÿ3`õ\h‹mÖšA7kÆÆ*"DÀ¼yÜb¢hÅ{Ó¦i˜5Ë«$/ˆC¢ûÌW¯æØB×®–õ11“Ù³ÙÕÿ䓦רz¿\}pûã÷#¨tÚµ±P飇¸íF•žAÛˆBVJΠ+Uâ„ÿ˜‹[GêÃìj<)@èçgY¦Š>¼½¹ĵkødpÆŽe¯Q¿~<Óûâ ~922;rm„HÄKU¦³góŽ?¶¹†¸8þ]]¹¨ÐÔÉ»©÷ËÊÓüKy¥þ+pÒiŽ¬ŠŸˆ.Hèáazc}ØÁ@ëÍàPÂpi4ìæHIál°mÌȰ|hÀ‚@[L ÷ûmÒD¹a2›°›ã⯨X‘ _½š³Ñ¤Õ=æÏCn.dz¾ÿ^q V#,,ŒËÙêÕž~Ú¦×'ÆŽåìñãåÅžM¹_ˆ+N­¼Rïse>Òi oßæ2×À@Ëþèí`  ~”tqÜ€Àö. NN‡öñáøä6³m§Oó¶^=ËèXøèžå#pôhñFyNN@óæQøóOþ<Þz+BêèDEEyým0nœU¾àJbíZ`óf®ð–\à¦bÊýrøÚaüwë?4¬Ø +64Så£Ú_Z&Ø÷ÀIõîîÀÕ«¸}›SL°î²m…‚' èÜj5k¿¹€˜Nññá÷Õ¶-°t©ùc›$”ZÏšÓJÕK–ßc= z„ÁÛ¡I“&xáJm&¬¼„£"4 àDze¹-§ yð€¿îÅd$£¦Ü/óq‘Ûèf£¡±ñ—(i s’“ùK ´“(0¸}µ‚Òѳ'BêÕË_ÛTi ­3ËåË+2öüØ@7õ¹€}ûxø›7yƨÕr€gûvóÆ6{}<+èsçØ€\vª‰lŸ²p9ÉÙz´?ý4geg³½+ÒƒËáHûþ{N¡1¢ÄBkðÙg¼.ïàÁæ-iì~IJOª3«PÊ­”š½QBèÔ{÷ø tNpæ!»9B]0d§m^¼È=á·l±P¨tÁ“û÷ù_h¨"®þ ü|€ ôàÖðÔS¼ßÍ ÙoœÉ„¡CÛ·-Ð-É@+X<#Ø´4àœàÚ¶%;Û¥¥ÃŠPPû˜1@÷îlàß_1IÊ“™‰x)*7fŒM/Á‚~~Àôéæaì~Yvb™®´ÛÇÝǼ‹<…Í’ìÁÐÆ¹éÊüùóÙgDK1” ›¿î$"îû²hïíMôß ÖGT_ä¹ç,*1‘¨bE"_Üã1ëÔÑ{܈ù}îõ·Q„ôt"''¢À@E‡ýñG~mÛegQx8ï˜;פóoÞ$ªPOÙ²EQiÊñË/,°W/›^6+‹¨A¾ô+õÌ×jµTkn-B8èäֹ͓ˆ™8Z³$!gк5 -˜A;ÆKÄßtåtÅLi±^`xòd~7NÙ¬5]ðDÁ»÷ßçjõÞ¯•awÉ¥KÜœ¦3gr¢Ç–-\&³‚„11ì[Qн‘šÊývŽŸ¹¸ÀhEaQíÒÚyðÞ{ü$åPsæpYÉl#fÍâ‘ví¸§¾¹”t¿ì‰Ýƒó‰çÑ&¨ T4cÎÇ q]¥ Å›9½Õj‰š6å!ö Ê›.OœXè˜ìlžˆD›6)¡ºÓ§óàÓ¦Y4Ìßó0DIIDÔ¦ ï¸rEïñǹºùøðÌÛª¬XÁZÞ{O±!¿þš‡ìß¿ÀΤ$ÞY½ºÉãhµù+.Yø ¦<‡±°úõmô¨ÃܺÅ÷…‹ ÑÙ³Ö»N¿Õýá _NXÐb×J¨3hÈ‘Vâ6s½s'Gñ›4Ú ÒŸjçâ«þÜ8L©Y–.x¢PÇ×_óvÎö£&û¡qá‚Þã5â'„‡奛™$T8@xï0u*wª”fÑø×¬ÉOR|¢ú´k4ùË4}ñE±ÕœìK^À íõ×mšZ7icÇæw0C÷ËÍ”›ø+æ/øyú¡ßý,»Èc€:55(UŠ×·3ƒ©Sy;~<  6\îýÜsùŽæ“•@ïÂÎúªP(­à²gñôáî]½çýû/¿Ü¼¹™‚‹rëب‘ÙCìØÁCtèPä鉠fM£c ʇNj¶ ÃDFòàÏ>kñPZ-Qݺ<\T”ƒRRø—${üýÑçI3¸!„pPó…Íé›ýßÐé[§)W›KDDÙ¹Ùtèê!újßWö}˜îØ^+{Ñí”ÛF® ƒ°0~£—.)7f äæò} ýú«u¯õüoÏÂAœùú²G›A i œû*“·Þ2ðܳg‰ýZm~FÇ ?­ÔÔT¢Ã‡y°_4{œJXk¶re"ggNj-˜#4”ÿPê–ƒ”ÇûÁòÎÓþ}VÙ =âi Í ®ZÅ[½ä&èråx¶úà°f¬K"**Êâ*Â%Kxkpu ºOÀ'àÖÜžˆ³kÁó+OÔ˜[M6Ï×>¨÷c=¼µõ-lÞ»YžHÉ@K+½˜ÉÏ?s¤¡CMèd`]4`53b&晋ò^åñzzÕaƒ8~<¿þÝwz 1õ¢Ñh0²ÙHl¸.·mF.4íä‚\½Ê_,ÕªõëëÕ­$‰‰¼ö¬³s~à\I jŸ{d.R³S1¼ÉpT,UQù‹=Ê€>è¡€¬œ·¬,"??® Ó›Õvà;â^~¹Äqþù‡kÓF¦à¢<ó tê”ìSOâSÃÂJ(2ûë/>h̘Ǻ—~ÆlCο¹d‘GùÀMCÊTi×NÆIMšðIññº]RÀê@ürŸìNšp ­;»Nïé›7ç$ÍIu^³ž\&¹ÓD'úýÔ烈(Õ8PL·Ò\¼˜_îë–U.¡ÓþÝïá ¡ µÎ…F5Ð ð¢Ì|7)lùrääpÖC•*ÇØza+UŸ]]7£tšàBe¿)K¿«Hn“Ýtû¦ÐêÓ« fœ=s†Èͨ|yYÊ—g©×¯—p`z:‘FÃéEÐjµôõþ¯Éy¢3!ôòš—énê]]o’ˆâ“J""Š8Aoo}[÷>?ÿçsÊÉÍÑðÒ¥<Øøñ²ßcAúô1#ýkäÈbSà³gÏÒ¹»çȪ?!4'bŽÁÓµZníÞmžîÕ§W“ÓD'ržèL{c÷?áî]þ¥J¥8k¥†ýúñûûê+« OD¬==;*M«Dšp Eߎ¶ÞÅD5Ð çCÌÈ *]š+Ð<(áÀà`6jERÓd< á†ë S³ž"4^LÕê<ÐͰ’3’iå©•ôÂï/èŽëñ[ý³“ª%Ï…ISéýddèviµZúðï á ¯¯¼hqÔbÝɼy<öˆ%»6z-ùLáÙtßÕ}õ§L}ðA 9€¦qíÛ¬rå ½ãH½b?ùD·ëvÊmª6»!ôÞv㛤 Á=Ì.Ɉ\¤û¾ž\Ò·)å¡iþMäàA¾T` ‘µ³øæOõYÕǺRÕ@+Àó2×­ã²wo#>ùd±.p/PÕYU á  ßU ¿ÎþEDù‰ýGŽf祺™vÀ´:q£ðÇùÓO|òK/™ü$¤tí?ÿ4áàÎ 9oµZ-½¿ý}B8ÈoªE]/œó}ÿ>—;—*¥ßó©ûùüÝóº÷øÒš—(;7»ðÁÏ>Ë×.pŽ\&Oæ!>üPæ‰'Nð‰;QjV*Õû¼žÎPH…'%‘™É©äÑ9 *’¥/ö'—zX÷·sìÚ1ë^LAT­r>ÄW^árÕ*#J•{ù‘ôÔ­S0-€zqå‹t'õŽîÐY³Jnw‘š•ªûã,ýué¹ÒôLæãÿù3ÊÌLN=š¯³niµZzoû{:ã|üÆq½§ §,^l|øøûñºYiÿ?ú6ÒÒìÝÌ)ZN\ý)‹¬,~\*S†rr²©×Ê^„pPëŸZSZVšñóóÚšŽ-óúHÏN§¦ šÂAïn{WÿAr3__±æóÇù¬9¼SJ±âä B8¨ëò®Ö½Â¨ZhÒq©©¼*Š·· IãÇóÝ»bI8B~Sýá 76¾QÌ×zãWW¬˜·¢‡´Z-}±û B8È}²».(•úùç|yóLzß}ǧ½kàï¼y̓´ß~Kïl{‡òŸê_lF_©bO_¬T_À*î~…Î %„ƒ¬ÀŸSr²ìÞÌEÙ¸ÑhŒ³dò¦‰oÿ>”ª6­Z¡/XSHJâæLžž;˜Dì½Xݽ´ê´žYš5üfõÜÓJ 33ó{WíܩذzÉÕæR™uá0Íï@8š¶ktZZ €Q£Fá“O>Ñí×jµ1bF7Þx£Øy©&®ö¹y3¯ÀÑ£àímä༼ê=q{Ññ—ŽHJO‡m>ÄüçæÃÙɹС@çÎ¼Š‰¡  HqJA”¬$œ7Ûe?û¬y‹ÀÊaã¹8{é,ÚµÁSÁOY÷b:dÇôÒ¥KiUžïaäÈ‘GDD»w囹yydS¦L¡½{  ›ú-'eüõ— oØ@›j‚<&pv×{¿,±'òe<ö!Ƈ^yj%¹Nr%„ƒ~PS¶s3""¿_‚©hcbèín°,÷m9úï¦i«ÏHör|¿—“.SàŒ@~”Ÿþ i¢?6}€ÄƲw¤R%£­D ²vÞ8ÒLyLp±¨GÆ… ¬% @f R“öL"„ƒjÏ­M2ò¢Õ™™ìÚððP¸—maîÝã:''³Rïe¡Õj©ùÂæ„pЦsÖXŠÈº¨3è$$$ 00‚«W¯ÛªÛ/q÷î]£c?|È3èÒ¥nÝŒkYít/ö24¹˜Ým6>k÷4%¬fÑ«àéÉ=1Œ•~¿\ïelxeÜÝ1Æç~hîíh"rgÏD„cÂìV@¹t'ìºõ+Ö7éÜ!C¸'Ã/¿ðêÙ%UµU-[úþžþ˜ùðoL}fÏ ú‰Ÿ^Ë¡«‡0ð./8øëéZhØÊ슼5€^nÞäòzKø¬Ýgx®æs8—x#6Žñj ðòzñ”ª$œ2HJâÏ´^=E†4ÈŸgÿÄÑëGQ+«º×ìnÝ‹=ØÕ@!..§3Ê÷ÇÆÆ"¨HYwDl–ýº ëÖ­ÃÚµk111ºev¢¢¢°a‘ƒçŸOƒ‡GþÍ^ô8˜¼v2^>4Z 0aWEŒk9Nïq÷]¸…ž=””üñ‡áã¤}¡9¡Xõüoð(¼Ù˜{b¡ÑkDEE!- X±"nnixå•’¯!í ߎoÿš†²™NXô“ÕœŒê“öU® ´i…[·€E‹bŠ-]dèÜïl¸ Nø¤30ùÞ£ï­è¾#G¢ðÓO€FƒAƒä…‹IÑ}Nwdddbæn7„n¾ äæÂËËK¶i_ß¾1Ò0}:)ïÜ‚ûN?å½–£Jf¬>± #"j!—„Ç´j¥÷\©Ÿ…\Í÷mÚ…Ù³OÏ|ü±yŸ©ûN9…·|x§å;Ðh4Š_ÃûŽ?ŽuëÖaúôéx`êC¶‚ìèâHMM¥И1cè£>¢ Ж-[H«ÕÒðáÃéÍ7ߤzsÑÔla3º•b¸ JÊ\Úl¤èmúÁéºRæ5܈ʖ5Yÿ† |ž=M<áòeÚ òøŸ!4óÐL£§Hë®Z$µ¾Ú÷•.{ähŸ¼œª“ò–¶_»–O{á…ü}¦¬þn]‘\ÿršèDk£åÕKKYæ ÞI½C5æÔ „ƒÞÞúv~Íö™3Û´Úü´Ê;ÌFGÄÕr™äBî“Ýéd?NÍ1…T"H(%'™ÑW6³#fÂAÏ®xÖ&­R­£¹8„ÌâðoÌaÕgW§ ‰Åó°’’¸”ÕÏÏpæRÁ, Ï/=ië…­¼ìLïó‘™™ßãä²wí¢³íщ<¿ô$„ƒ¦œ^â);²¤íÛ?íÀ4B8¨Ô”Rì{7ŽO^³Æ¤÷#‘™Éé|ÎΜ±BdbU[J ‘FC«Ú—'M¸†Ü&»Ñ?—ÿ1ùºRê¶ÜUÔS2S¨õO­u ôsrsò‹e~þÙâŠ<©g²kQþï©ö› ‡ ×±[ªÛj˵éá^ú=ò›êGNèÔ­SV«‚´6Žf …ìf÷lýgÑ·n_\ºw m·Á‘kG ½¾nûO{÷æ¡EIÏNÇèÍ£1iï$”v/탶£[nùòŠø¼ áæôëÇ×2©Ã]l,ÂtªØ›l‚§‹'Þÿû}|w@ÿŠ¥RŸæ  ã‘÷ï|v|/W/l°­[ÉêjW77n¯š›ËíU[_ž;á%¯æø¡ûÈÊÍ +_@Ô ã¾Ô xµõà`Ób™9™èµª%B«ÀVXÑ{gÝèlgiÛÎ>}øw°u+/ l)ï¶~ÏåTùrÀØN³D7ðþûüó¤I&d1YÈ”ýS”ž„a‡¡^…zVo•ú¸ ¤¾Ÿt+û¬Ä[-Þ´;xúç§1eÿdåf(¹µèÉ›'Ñ|Qs,ˆ\€ò^å±{èn<’— dBÛÑ¢ ÈÛ_5áà+WU«¢cÕŽØ2p ¼\½ðÑÎðå¾/9pTiÍÁ¡CóÖOÔC®6ïüom} .ØÐCþû1Ó@ù­L—,á?v“V’õª[£›FøÓáx˜õÝVtÃ…Ä’5ä¹cñƆßkQ²s³Ñm츼 *6Àæ›áåš×“´@ohKƒm®®À¸qüó¬Y p‚?¯ÍE•dà—Ì#Xvb™Þã,ѽ~=°?MNÍ4“Øû±˜sx¼\½0©ý$Öm•úXAº8¤Ç­VK3Í$÷Éî„pPÝêÒoG7‘“k&U¨P¸ˆäì³ôöÖ·uºüÒ…®%_+<ð„ üLøÓO&kÉÍåÂ9€SÄJdà@>ðŸüÇþ½±{Éû+oB8èùßž×Täæ…„ðá/ê.)-‰º.ïJ•ù¦ í¸TÄIzé`æ Ñ’ïõ©™jŸ|Â',YBDüûysË›„pPè¬ÐâŸwDþþD..Fš@ W›K×$„ƒjΩI7^抴Zö?¹»›Ÿ¯W€û÷¹ ÞÝ]p'O´ï™0ršèD^_y)ÚL(33¿ab‘êq«0`íB8hÂî Ö¿˜•Q] ““€‹AÞiõþý:Víˆè;Ѱùyhß/ÒÃ^Æ»;Þ¿†ˆŽ IDATàÉ%O¢Îu0ûðlh ÁÌ®3±mÐ6Tö©\x`#K_éÃÉ 0€6ºêwl,Ò 4T·«]H;ü;ì_Ôò¯…Mç7¡áü†X³»þÑ".ŽWº¨^½ð0¹Ú\ürò4œßÛ/mÇåŸÀÑGѹZ熄ðôÏŒ4Px]4›C/fÐÿ~fw›þõú#ö~,º®èŠë¯;míZn ÿ @¥JÆ/£%-Æn‹_OýŠ`ß`ì²³x#x†Ý™™HÓ³Ò·\|}yõ™ÌL.ú°ˆ?ÿ<Õ~&µŸ„´ì4¼ôÇK…V°LüÌõ°`ÿÊ»våÖäßøñÛ©ßP*´ù@·ß\í*E gÐ/êYlU«ÕÒªÓ«ÈoLOÂgžº®rÒ¿ª³ªÒ7û¿)1óƒþþ›§¯½&KÔD¿^=#V®LgœôÖ‡?Ì|HCÿªÓ[úÓÚ„¦ èëEg)-+²s³éÄ4ïè<ª÷c=ÝqýÿèOÉɆ¯)­]b+?ýÜ»Ç5>>D‘‘&}¤i[‘keædR·¼jv•éUŠõiÛÖô,‰‡™©÷ªÞ„pPÅï*Òù»ç üé§D8ÑøÀ&pù2{”/Ï]ͦA~Ã11”“›Cé¬k+Psm÷îñÓˆ“ѦÕ&™Mzv:Õš[‹úåDáÎ…jP„4І>Ä ø¾­™J[/l£õ1ëi÷•ÝtòæI“º˜éVUÎë„&éoÎ`F[zzž¸â=š ²ñÜFjµðÉb_0{N#Ôvq[: Ä±ˆ(?ßð˜yÅ$¯Ì²eFLOg«¨÷åŒì Ý÷WÞôg4·ä“2 ÂÂŒ¯*{/–Ìk Ëà1êú³ë¡*ƒ¾}e{Á #¹êÔÑíºñðUü®"!òšüëáÃyøáÃ-Æ$>Ýõ©®!’±•ÐEA5Ð `¨Ý¨Ô‡Èì “´TS­Z²Oýæ#MêÎ#(Ò„zíùó‰xˆÂ>I–u¢ê³«“ßT?긬#}ºëSÚyi§éÒ,¿ýfú›)À®]|z“&FZ_æùUé™g ¢Õjiʾ)º/™¾«ûÒ ƒŒöŽÊÌɤgï×¾„pPÇeénª ŒòVʉ¬]Ûø±&rè¿ÍºuÍ[q…¦Mã>ý´Ðî—v&\C>S|t©£rÛ^¾ÌkAx{›îË7—7NË$òþÊ[ïRVJ·JµªV}bÁ`]–Îòñóãf2ÿúââøÚAAf‚Û¶™ä>ÑjI·ºÉ&ÈF™?ߢo­Ü\žôÃXëÏ•+KîÁZ€Mç6QðÌ`6ÔŸ”"ÒþKG‹}é\O¾N‹£ë£':ÓûÛß/¹·rA´Zn¤áâb¡O¢0ROå­[Í8Yòç=Zì¥Ïv}F5YЄ2²å7ÿèßßÂ Š‰dçfëÚ¨–´:ˆ8š:HX={8¶×¡C¡œ|‚‚¸…YR’¬Ó‚ƒví8…úßõpå ­J•ljˆ"#yaçÖ­eIЩvA9M+M—ö§—"Â’x®ÖsˆV9ã— d4ýO-oŽàYÁhõS+<ýóÓh8¿!*ϨŒ×7¼Žó‰çÑ¥ZœuÓž™Wg›tä Órr€“'M;ÇÞ{·3fÈ<ñæMààA¾Çš6-örxûp<ü$¢nDá£É ´>ÌýB*WÎ϶³"f!òF$Z¶Æ˜æcô£ •AH­¯Ý¨d<^}ÕÂÁÍÈä(1':Ï@Çûø”8ÆÜ¹¼7Ží‹ÅXh ÎÃâñóÏ\¼¢ís?|ç.cBËhÔ É 8|í0öÅí÷þC ¿x³Å›Ø5d¶ÚŽ'*˜Ñ€©ysÄ€™/¾È“€;€S§dœ¸~='•÷ê¥÷—ëâä‚ßûüOÌ9<Kö,1iØ‚E)_~iÝ¢” ‰ðÅî/àæì†ŸzþT¬¯„’­Rkèpq$'ssuoo³Ê.̘1üœ¸~½ìS¹ì»lY=%æ/½Äãîßoðük×øi¼lY׋ËÍåT =FôÑ¥‹‘Çúºuù»Ûÿø#>`@þ¾äŒdºñðÅÝ3˜3-i™nSúÂÊ`æL3~ºv哌¬F»éÜ&]n»>ÿnQ¤& Zw¥””̪ÿc}B8hÒžIÖ»Q] ˜˜XèÿË–qËϾ}R¥,\f¹wAüü€îÝ{÷€‹¼˜7ƒŽJI1xþ‚@NçÛzyɾ¼~œœx}ï'›I‡\¶h‘ž³³ó犣ciµÀìÙüó»ïæï÷q÷A@©ûÏQ7—f͸zóØ1eÆËãõ×¹•í¯¿²çÂ(pݾ¿?¯ŒPÏÕzï·~÷¯ÜÇ+k_Avn¶Ác³²€ñãùçiÓL¯Â” aÔæQ8uû:Uí„OŸú´ÄãÕJB… ÁgÐiiÜ àõB-Fj÷ÑGf¾iŸÞ¸q‘8c¹rb7K–™ÉKh99YäÔGïÞ2K‹“žNT¡7°.šÝÍãwè`ÒXÒ¤öÉ'Í–#iÄäòÅÍ@êÇôùç&ü믲¦Ü™9™ÔbQ B8hüÃëW~ù%Û½»‰¢Íä‡#?ÂA3évÊmë^ÌŽ¨3h($œ7¸qƒ›54¼š“éHý8̘A<ƒnÖ 8~œ]Ž€”àî] $iú›ã¬ZÅKhõìiaS ø¡µÚ4ŒÏþÎÉ“‹¼(Óÿ,× Îž­IZ£F,üøqEÇ}ë-ž±Î›g|ц’–¶Ò‡›³–>»¾î¾˜z`*~?U¼Lõüyþ]xxä?‘Xƒˆ„¼³í¸:¹â~ ¼wy£ç¨ABeÒ@KA”à›oø)~âD…·ÀÅpìGÒÎóˆåU«ê ž¤¦Ÿ}Æ?[ÅhIúüy³‡ˆÇ¨Q@… œ-P¨«› ½c°kP­—vÛ‚x©V^Á@!Àßåýú±çHZõF/ééÀ–-½ëÒÅäñ:ay¯åpÒ8aȺ!Ø|~³î5"`äH.=Ÿ0W±wRï ßš~ÈÖfcv·ÙhØÒ¤óÔ ¡2i }}}pÆÃ;Ü £N…¯R…­¬7سÏ-[rf׺uÐùŸQµªÞ6ŒS¦ð÷AŸ>œª§8µjñÖ‚tXX¼¼ -­0kä—““ÿôí·Öó—%¬{ÞÒK û¡à£xÎn~½ìØÁSìîÝyºk"aaaèQ»–ô\‚mú®é‹½±{pÖÒž=œŽi­´º¤ô$t]Ñ É Ü`0F53}_µÝ¨B€>è矞nÜàÄgg#æP¹2lAH\ªK©_Ÿ(wöþÏ7ß«°:ž]Ó^^\ìbnÜÊÍBҚʾr†èÌ™¼6äñoÞ4<}ÿ=öôÓfVá™IäîÝ|áêÕ­2þ°a<ü¸qxõU³ª9 Þ+Òj%>S|èïÓǨlYþDDX ¼Ó©ñüÆ„pP‡Ÿ;Pj–¼´"µ’P„4ЃÕUsc… ´lɃ'$˜=„VKÔ¦ sä©wù‡•+‹Ó­¿ôÕW–Š6"¦T)îz¤€eœ1ƒ5wìH”“™Ã=8ýüJ;1‘ÑhˆŽ7x˜õ¨QƒE'%)>ô­[¼8·³³žU³³³¹{‘«+÷,µ€‰{&r_–Ïý Çé­·,Î EsJ¦•—cq Í@ éâØ²%‡­ZÓ§[á«Hh4ÀüùüD{íß|GÁàÉ?Û¶±‹ØªÕ_ _äáCŽDšAAÝ£G pÖØ¢Ï®°#´n]ƒ•5DìIJâÂFÌ’`6iii@‹üŸˆÅǯPã¹¹\`ThÝ…ýûÙIÝ©÷,•AÑ@ÛÿÚý/TxY.‰Ð oƒ&CV) ¾0IéIèüKg¿yB;`ã+áí&¿òE *ƒ:11-[r`\†KÏt,Ìä¨_ŸWà%6Ð[ÎVE\\<²³©S9 ÀÝX¼˜·VÅB?tÁ ‡÷¾öô¶Ï0 œ5 øé' |y®t³5ñññÜXvï¶Ê5ÆŒá`÷nà? ¼ 3{£ EmW®h°çÓéÀŽ©€K^ÛÜïü¹ZCåò8yó$Z/nm±qÔ ¡b€.Žf͆ZµbJW&6mšÅCiµDé¾”/´Âý„~ê•»@ªÙH­þ/VlÈùó‰Æãk"€R¿ž¥÷˜?þ`·†§§õü¥&qþ<¿ÿ¦M­v ©ó_PP^%¨VËíW5£þyc¤¥5jÄãø!ÑÖ [©Ì7et«h'¦™²j±~´Z--8¶@·2QßzÝ¢1.äa*W.>OÎH¦á†“&\CÕš[‹fœA  ¸3²3hóùÍÔwu_]oîÚskÓÁøƒé|p´´‹½¿ ÌA_»QEQp]0ÜÜÒàâ¢T£ XèƒNKKƒWÑ!Z-œ/Ä€||ðúÛ•1s°|yþË!!À?rú¯=ÑiïØ‘þó—lZ.Zé×ÈùÃ|ÿ3ÀºOŸö›o..Àš5Å'â>î>XÔcÞjñ>øû츼ïýýÞÿû}´¨Òµük!¤LÜÝq#å®>¸Š½q{‘œ™ ¨Tª&¶Ÿˆ×¿'åÌÞûEE6Bh}íF¥B^lÕ !àâEÞæ•zÅÇÇÛ'‰ßß([–õhµ\~)½º¯^RS¡iÙ“&kðî{Ü ûÖ- ^=.ywq€;L§½CÞa¥@¡Dß¾Àw¯ŸEíÅ1ˆñhˆàŠUaŽ©Ú´)#G†!+‹K¹Û´1|lƒŠ °}ÐvD݈ÂÊ3+±òôJ¾v‡¯.v¬‡‹^ {½Ãz£OÝ>ðrUÞÚí>Äp€?ùøÊLW’“Ï¢/_22,K)b ízÓÖ¬ 9\¿ÎþXèÕ]¤Ä»lY GKE*N{H?Éü÷— –7ÞSÂ\Þ åÙóo½±ÿ9Næ(SÆôó÷ï†ÃÇÀÇsÆ14 šVnЦ•›bj穸rï âÄ!ö~,²r³PÙ§2*•ª„ºåëZìc6†jœ•AÈ aÑv£VArs$$X6Nm×à‰=9ôê–Û¤ßNÒÞ±#o÷îµê5ÿZ ˆ ë…={¸Ã¨)dD\ÆÝµ+ðða&O¾þZþâ N'T÷«ŽŽU;bXãaÕlzÖî‰æUš[Ý8jP)„4Ðþ&ô¶ ›&é¸x‘gäy-êš4ibÙx–`Z¯nA t!풛㟬wÁs瀨( N,>\ݺgÎpaÕòåÜ“D±±l˜_{ܦOo‚Ï?·žLkb×ûüBH‡Õƒ„€2Å*éé<¯Zps`çà‰©vzu b  i·…ú÷¼Ö À§´6põåâÅÀ!Ü}nľÅÊ—bb€M›¸ùQv6ÆÇ6j”˜å½¶?jP„œA[=H°¿@±ä^9\¾ÌÛ½ ÿßÞ¹EU¾qü ^ÐJ°ŒHÍ ŠãeÄRËL­ÑdtJ+²ÔÈ¼Õ c8Úe¼¡ã-ÍF´„‰[ÃQglšò‚þ(&ºèa¥Q`±ð†àJ³*ç÷ÇÖ½=»œó>ö~f˜]ÎÙ³ûÝ—wŸ}y¾ïû¼¦®°ò#@;énh~ûJhª_f‚â ½G`à@ŠŠ.þÅ…&}À+¯ ¿9#ÈϧrY°|9ÍŸ<X´ˆ Þ…†ÉÉ4ßyÌÞ«ñ8k SGÐK—.ŵk×P[[‹ŒŒ tîܹéÜðáÃ1zôh´kש©©×µ¹I4U5‡¬‡Vùg@“ЕƒvÒ}ö,ä;Öç!Fã¤}ÂJCäåQ­Ú@RXH_€£F9i~òIª½òóÏ4Z¾r…~""€©Si!OËXœ6ÎÚE´OVyy9l6ÒÓÓ1uêTäää8œ Å­[·îÂi7Ä$ À.$®´©æIXM!,-õ°=·kœt«¿3È5:iW¶Hs¨£çW_uû‘#©8Ö¦M”Êxÿ}1·^ËÙhã¬]$ A—••!11ÑáØØ±cѫшëÛ·/þ×Ê´ù¶Ñe_±bŽ?މ'63Ä$ìÙ“¦×8@›nž Ð"œÆÅ3ZpÒÍ(@;i?žnmÞ¾MÛÍ3gúýt¦÷?à¬]$ AGFFâСC?ñññ°Z­h4­ëÖ<øàƒ¨­­u8fµZ±ÿ~}:@ât²a½§íÛ}ºÌAwCmg¢(õõx\¶yRµCFFà^hÁ‚€>§é}Ÿj—µ8ZðÁ8üèèh@ff¦Ûë 1 æÔ„júøB}=`µÒн+M7OtÎ…vÐmµÒ|£FÑÁqÙæS§LÅ›çÍóÿEêëé¹:v¦Móÿù @_ñÎÚEBlûÝ †˜„@³Q¨g&Gy9MEkåä›nžè4?t3Ê?nÚ|š„œ› 4¦üâÈúÒzæZóLï+~ÀY»H° І˜„€39\„€æIT™XêNÜqÐÍ,@»lóöí©äÜíÛ@£áêìNÛ3½¯øgí"Á2@²’ðo.´›mú^mwßMKÕÊËi®Ft3 ÐnÛ¼q! öíó着€ƒ{î¡ÔI€0½¯øgí"Á2@²’ðoª›-Ä +5Ÿ~â„æKšt+ ­´hßžjŠ2Àm›Kão¿õoUá§ŸRñŒ9s€.o¢¯è„³v‘`  3 ƒƒ)ÀVWÓ/¸ ÐB˜'êÞS?9× vG“î €Ë—)8·ùN·Ám›3fЗN«…Rš©«RS)m´h‘~‘.¢¯è„³v‘`  3 ýiõñýû;Â<Ñ1‚nÒÍ,½xisÓû÷//¼àô·ö!úŠN8k –Ú0“ÐgÞºEqºw§œo „0O† £Ñï‰4zÔ@“n†Úc›?ö­¨üáß¿„HI¡û‹ëè!úŠN8k –Ú0“РϞ¥ ­Î9næI‡`kj4¥&ÝꨛÑÐc›sçÒý}{â¼< ¸˜Šk<ù¤~n¢¯è„³v‘`  3 })Ž_~¡ÛGq:%Œyâc𣢢‚Šçç“6rdŠ ,^Ûü­·h?ªÝ»sç´=©¢6Ðý%K|ßòDÂôpÖ.,´a&! o]TD·.´0æ‰Fá Aƒ€“'ÚZà©§š6 à€×6 £òr·oë×k{Ò½{©ØÒàÁ4Ÿº ¦¯è€³v‘`  5 {ô:wÖ7‚>Üé”0æ‰#èÂÂBàøqú¥EeAhjó¤$Z¸g÷¿uu5š =½Í–» ÓWtÀY»H° Іš„ÁÁäÎkj§(4‚îÐFW­Æ<é×èÖ´ÖÕy}øˆ#ØhMmª}½t)M5œ7þ›h#„é+:à¬]$XhCMBÀ·H*+i…ÞС.Ó˜'AA4Š®¯Nòúpû•+4Ó¡[7àᇠ84·yR½¿Ý»i“@Wäå;wRÍ›'ÒÂôpÖ.,´¡&!мb®¸Øûc=¤7ÁÌ5Í¡!]ñÅÌ'L~‹«Öhnó.]€;è~||³— rò$K÷·nî»/p"] T_ñÎÚE‚×'­CMB 9تÁ× B@0óD5 ¼>túßCLL j|jóiÓ€eË›ö¡Z»–6\¶ 7¸~¶åŽ‹k;ÁÕW|„³v‘`  5 æ`ÛzDå /#h¡Ì“qã( säÍÛö@á—_Òfùg@G›oØ|ø!M+\½šJˆnÚD›nÙBÇ @¨¾â#œµ‹„©ûõb¨I}ûÒT¬S§ÈDj½»gKÔ >l˜ËÓB™']ºÐþ|GR~ÙÝb‹«W1¢¤èÝ;àË™Àç6 Þy˜2…jt”–’ôéÓ6"] T_ñÎÚE‚åÚp“0(ˆFÑ7nx6 m6ú0GEѬgž<÷ݺ3Å /vE¡Ñs,Èhkt·ùàÁÀªU@f&°b…¡Á°¯øgí"Á2@nÍiOyhÕDt“4O¦L¡[5…áŠìlTÀäÉF( 8µ¹F¸êxk –Úp“hÎ){ÊC«çÜäŸÍ“ÈH :švXq•7l,F?¨kWàùçׄkspÕ ðÖ.,´á&!@UÏÏ3¼„€ æÉ‚t›–æ|nÏàæMNšD+*"d›k€«n€·v‘`  7 ÊG>ð-þç×Q;¥‡‡æÉìÙ´]ÓÞ½Ž«%ëëO>ŒX¶Ì$qþ#d›k€«n€·v‘`  7 2ÇÆ§éhß}ç|þÒ%šåѧÕvƒæIh(@Û6­[×||Û6*»‹Ò©\²Í5ÀU7À[»H° Ц˜„­¢h¹ok¦[Õtsƒ°æÉòå´2nÛ6I;¬YC5ERSÅÕ­®Ú¹êxk –ó M1 àé§éÖU€þê+ºõ …5Ozص xñEÇUrk×BPÕš¶Í½ÀU7À[»H°A›b´X¡gOÚÕº²²ùøÍ›´¯S'Jƒx@hó$6–öØ?2ÈÎ’“®Û \µsÕ ðÖ.,´)&!@yèY³€†à³Ïš;F5&L ÝF< ¼y2cý‡ðûï…è…×í®Ú¹êxk –Ú“På7èvçNZöÝrë£9s¼^ÎÕ<áªà««n€·v‘` M3 ZÆTT m{TP@)—^òz9Wó„«n€¯v®ºÞÚEBš„zXº”Òo¾Ù¼ÝQr²¦:É\Í®º¾Ú¹êxk SGÐ .ÄÀqéÒ%§s[·nÅüùó1}út\¾|ÙáœÕj5J¢k&Nöí£€L3fÎÔtéÚX\ÛÀU7ÀW;WÝ_í6›Íl ˜ SSS1f̧ãÿþû/òóó‘‘‘%K– ==Ýá|Õ^~()ÊËiô¬QS;O¥J†«n€¯v®º¾ÚE І¤8ÊÊʘ˜èp,!!³fÍàp«ªªèÓ§Ο?ïp¾¡¡¡ Õú@¿~>_R§aƒVáªà««n€·v‘0$@GFFâСCnÏ+Šâð{xx8.^¼€Ò½zõr8_UU…§„……™Ÿ“ö›Íæ±-D…«n€¯v®º^Úm6[Óȹu:Õl‚Eù€)Û4¯[·YYYxâ‰'ðöÛoCQäää`íÚµHIIAII jjj°}ûvDDD˜!Q"‘HLÃÔí+ .Dnn.òóó»ÝŽùóç#44÷Þ{/6nÜh¶D¯Ì;¡¡¡¨¬¬ÄG}„î +‰†ÅbÁ?þˆ»îº +W®4oÁÖ¯_‚‚6£:¸pá–/_ŽØívìÚµ ÔYCÂñó¨rüøqìÛ··nÝBÿþý±råJ³%`6Z5Õœuvv6bcc‘žžŽššáç^VWWãÆضmbbbpòäI³%iæâÅ‹ÈÌÌDÇŽŒP7[z‰Hnn.¢¢¢Ì–á3Ý»w‡ÅbAzz:î¿ÿ~”””˜-É#Ü>-™8q"vîÜ ‹Å‚o¾ùÆl9M9Ú›©¨ò×_5å¢U3±wïÞ†éô„«÷àà`Ìž=¥¥¥øúë¯MRçWÚLJN:aûöíÈÊÊBVV^ýusºÁ•8"%%»wï÷)€ùIDAT6I™wÜõ—¸¸8áúõë:t¨Iê´!òçQ+‹Ï ´sZ«©Ø«W/X­VŒ3Æ¥™h&®ÞCqq1Š‹‹±yóf>|‹III&)t+íøã?P-”Ó§O›!Í#®tçääàúõëX¼x1Μ9ƒ£GbÒ¤I&)t»>Ÿ——‡ììl§©¦""òçQ ))) ê3É*ÝÚTìׯ,X€®]»¢K—.Ø´i“Ù=b·Û1oÞ<ôìÙçÏŸÇêÕ«1dȳeifÅŠ¸ví®^½Š´´4V9hxöÙg…ý¯ÅçÎÃã?ŽéE«Þ}÷]ôÓ1µÓ(ìv;«ÏcK>ÿüs¬Y³111h×®RSSÍ–€Y€–H$’ÿ¬LB‰D"ù/!´D"‘Š Ð’;’cÇŽaÕªU(//ÇÌ™3V«J$ZrG¢š= HKK£À–Dâ#2@KîXþþûo„……ÉÝ=$l‘ZrG²cÇŒ=™™™X²d‰¹Û¤I$:‘Óì$‰DPäZ"‘HEh‰D" %‰DPd€–H$A‘Z"‘HEh‰D" %‰DPd€–H$A‘Z"‘HEh‰D" %‰DPd€–H$Aù?OÛš€BÝ£ÊIEND®B`‚mpmath-1.0.0/doc/source/plots/bi.py000066400000000000000000000003171316273626600171650ustar00rootroot00000000000000# Airy function Bi(x), Bi'(x) and int_0^x Bi(t) dt on the real line f = airybi f_diff = lambda z: airybi(z, derivative=1) f_int = lambda z: airybi(z, derivative=-1) plot([f, f_diff, f_int], [-10,2], [-1,2]) mpmath-1.0.0/doc/source/plots/bi_c.png000066400000000000000000002034161316273626600176300ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½M¯-ÉYïù{""s½í·sN• Cƒì‹lmš‚RK‚ /m·ZÌz cfX 1àðP3`ÂÉp¥‹nµÄõ nwsM·æš²«êœ³÷^¯™ñô "2#×Þ縪ì+Ýʧ”•k¯•+3÷Ù¹~ù_ÿxž'DUÿø æ˜cŽ9æx£Â‘àüßÿ°OdŽ9æ˜cŽi˜ö Ì1ÇsÌñxÌ€žcŽ9æxCcôsÌ1Ç3 ç˜cŽ9ÞИ=ÇsÌñ†Æ è9æ˜cŽ74f@Ï1Çs¼¡1zŽ9æ˜ã ÐsÌ1ÇohÌ€žcŽ9æxCcôsÌ1Ç3 ç˜cŽ9ÞИ=ÇsÌñ†Æ è9æ˜cŽ74f@Ï1Çs¼¡1zŽ9æ˜ã ÐsÌ1ÇohÌ€žcŽ9æxCcôsÌ1Ç3 ç˜cŽ9ÞИ=ÇsÌñ†Æ è9æ˜cŽ74ÜûÞÔøö·¿Íoÿöoó£?ú£ÜßßóGôG?ìSšcŽ9>e1+èWÄßüÍßð‹¿ø‹üáþ!]×q{{ûÃ>¥9æ˜ãS³‚~E|å+_áWõWùë¿þkT•ëëëö)Í1ÇŸ²˜ýŠøã?þc~÷w—_ù•_áë_ÿ:û·ËÏüÌÏðó?ÿó8çX¯×\__¿ÜŠ"¯;ˆÖ?<¾åËÛÛÇñ`s}¸Íc›¿j3…ÛáXò`³o;?¾hµž­AT'oŽ¥y;e\´l)iQ†óR@뷔ǒßV­¸»¿åòú’t†Õ˜Ö”(Eªµ…ôX eñã¢^! ¨…h¸Ý¸^^Ctht Ž…>B§¤uTNNŽNªDGZš´„V‰-iY@hQ:GTOh<_Þ"+Eà ú=®ÛócGϳÅ‹†&¶8±XGĈNJG–+K‹ä5ËüóÂÀÂBcðbé1x1ÜÞyW+‚"i ‹ˆÃÐ`p\þÙ!X Á`Ä QDAL^‹Âöî–û»;øðƒïòŸþÓ|Å…úéŠЯˆ_ú¥_âþàø«¿ú+þõ_ÿ•/|á üôOÿ4_ýêWùÚ×¾öèûòïûƒô7¾ñ ¾šõ=!ù;‡z³êñ7þü/øÚW¿6¼sÁó½W`X8lQMÀK›¤µþâÿ–¯}õ×]#ó:äõ@[jPÍkLÚ43²ð2ä·£¨I¼T êàßÿ»?ç—þ§¯¢â‰Ú£ôDºaQ==Ž€#Òi4­["­làÐC€C€}@w¶iÑ£¿àßþÍÿÁ¯ýÌ/‚_¡ýú5ê7ô~É}/Üõð¢W^ôʇ<ï•÷{ø Wî8m”îJé® »Vº'JwÝSåôDé6'Bü=½Ïá/ÿ=‹_øº¿G·{âw;>ø_{~yÿà ž˜À¥ñ¬äÄJö,ØÒØ;L»EVxÇ!Ÿi‘wZäí¼½@žµÈ³ë6\ºZ÷ ìKpwIM»{°;ÄîÓ e{JÿPÞBo‘.­“ bàd°kƒ[ ‹·†N =2 *úA+›üoܧ¿u¥ª%C›ÜÄßžæ˜ýƒ‰ïÒµÝ0<ñÑvª¼‹ó(/êd“ñ±NŸ,Î>iüo<€ÖÛ¥[¹ÅGÑêä ¤ãp“×å<ŒÉp.6Gò.FêêtQUD-VÍ䥘!Tñ!ƒÙf8ÇäUDZµDÓWyâK‡œåÑ«Òè ,4à ÔX-ÜìÁqk›9~ýµ²@wç´ApkÑÄ£ë |IƒJùø•=œ+é ÎÙg6BåGWj:æ_>Æ1«#[¨b¢«”´Vjl±;Œ&'¢-A[—l2£‹þótôœ,4ÒèôÔkX®΄”š‘aR3Êr@»{ð· Òá"AÚ_¿Gü=›ð„6\±è–^h½Ò„ˆQhO<õ|ðÜãÛˬ h 4‚X Æ‚sÐ8¶ï;ÞÛ[Bï¤öNØ[Ø9xb7ܸ ½ÄÙ=bw¤±°'ÄœÒ â1•ho¡7H†tY›…Á,×¢¢H†u64Äd g‹æ›ZúSÏ€žÆ èd|Oò¾Â[;W“)åÖ ›VÇ,7…‚æ: .¿2óù©Ö –üáÐʼÐqÓ‰‚·USÜæôâ˜Ï‘•¼–¬éÖ¦4,J9ûÑÊC«#Ù`Ôá¢LRì „ƒ*a´ˆó¢Ä!Û¡Y¥ ûʼn?œ2¤['œð¬×6°^Zã@ühy”ÁDí¤Owh¿‰ú+ÔßB¸‹ëŸòÔ?aá7¬¼£!ånwÚq<õ¼ÜÆTñb6‚XI3ƒl,l,raé^ Ï· ¼º”E—Õt‚ôÎ 7vÃ¥]ÓØ œ=f½sL¶]½ìSJšŽ ø´H/ÐKöB°­Á6g Ñ¢Œjzt¥›ÓUªïZsÌ€þ/ç—ÚGw˜¾ùaŽFµÙ+Ôôhhœïk|v8Ô‡¨nµU.ÕæÉêÈ[]lެ¤§¥*i=Ú%#œ•¤œÉ »´–<:ƒDrꨤÍéâ9‡˜@µ²!´R µƒƒš>hÏŽ;õCÚy®.=Kç‘6%;«ó¨ à2¤]®Cõ%qûœØ-ˆº"Òæ›˜GÞú‘—|ù¿Ýóá“k>4oÌ[`ßó Ì3ļ…5oa—oá–O±› öf…½Ü]‚´ÝfHïÒ ?».ý-{¼Iu)…ÎÀÉ'kkXÃÂ44fµ Î5¨Ó3ä @³ª†¡ùÕàkäÅæ%‚±†G«W?­1úcǹ¿ððåWØÅæÉÙsßRKâ)ùK>òƒäÍ«{yxÊgø><ïÕ1¶Î£#bU*º@zøë¹ùiåËÿr¸~É\îx¿yŸ£}‚ºÏ€}1Ï1òË-Vn±‹gØÅìzƒ½YbïM‚ô®(iÁ3¨Opè ‹¢>Kw¦3°4ÂÒXbiL‹ÍÞ:e-!Ÿ Ý ¬ó%5ÀZŠÑŸž‹$X¿îóõ)‹П(¾‡<®È;Ši6Å£p>7—PV(}•º¨ß*õÓ2Ùè±~5œ¥õ›œ26-JŠÌØß—©Ý‘~÷ñ7>·:4o4Ir'íõ #E\¶2\†´‹¹Ïhî*W%8ë`}h‚t´£']­øzwô;ˆÝêÁñ–°\œTí~J¡wÄçœè½öl9±&°Å³Å³ÓÀV={<×çúÚ³n<²ð° Ò­G¸TÂÄ{E=x0V±ÊòÁý8üÈSá§.€EàÛ-ï7'îìÞ}ˆ1/qÜcå+¥‹Ý=nñ»¸Á-רëE‚óÜÌ!¥<›“P¥<#ä"l[ÃZè¤[Xa!gV4¥NòÁs¥ äkF5ý½Ê(òx'Ïpž]Ç èO¯†ôG½¾Æ=`w ¦LRæ’®•}iÿyþKÒž_A²’NE:±;¢œº¼Udð£G8§ùLRÑï™’Öü“(ÎÆ4CËàGgP‡>¢!§U‰Î¨]hIS–TJ:hrIBò§»„Ä“NÔyé…°^–†` As‹M<)oºGé5°Óž;¸Ãs¥{<÷ôìÔót¸yâÙ,’'lL™#.yáºúT]ÉR ÐÀBà Ú ‹.áÆ šÀ-{Žò>Az'G¬±rHÀf5{l{k/1Ëö²Å¤sÊ3¶Û )åYðŽ*¨$P)õ)RêTð­œXŒ¤jºŠšÖÒÃW-/ŒððÚþ4Ç èOå+Ú­®¾Â\ÖGOÆ€±ÚúÁÓSXÖÇ`wh±;ÿbP§5¤ËÿH×9tà #ŽÇ-ÇVóÀæ>Õ望Ÿ“ò6Ê€az\Ú)qâIgÃgcêæV— †ˆËÃ×å¦)6(‹Ø A&žtŒ:ˆðþ¤ä^û„꓎ Þ4„õÞÕÛr[zM%)=ÊN/9r¡žK<×ê¹%z«žõ¼µñl>£Ã˜ZPMchô”þM“ª¸%&ˆ¶Ah,áÂÁ1|(Ž—b¹#°eG'ŽSj±ŸÕuz|HÛKL³Á.–ØËEVÒ2¦;?šòœ.ª`FXI¾u‚tJÖp"iÊ-!M}õ@Eëh”ëKë‹vŽП$>ʾ‚ó«K°§»{u‰ëC‹˜ŒvûÐêbñÁÑêšè…NªÕ–Õ.Ï=¢¢5¨$OY¤ ß^S…6éÃ]¶MÍ|d[CºXiÎ;4 *º ’Bk³ÝQ{Ρ:%;k¬ê»CÔ¶#¤©Ë¾C¶;|4ë ¨Ë’ÕuèÀ÷¿^/¯£¢NëÒ‚3rOÏ‹ éõÜ©çϽzv1òV£\ÞƒjOiªº%€œRö…»‡ÕZجSàXž`y‰ãV÷bØ8Èž^>@豜°rÂfeÚî°æk.0ÍÓ.1-æ””ôM—!]Ržc„>_¥â;ˆF†bÂÒim#6‹€:ý\îês¢]‰П8^#“«-^órµ—Z½Ö›¿Boký\Úú|<H¾lmwH}¾u;Ðô¦Ò)%õ Òg*ZÇ·’mƬŽs% U£ÊY.V‡×Z&uM]1ÜïÜ’”&b"ZlŽ2`˜­¡ïs%J‹7’ª¶aÉ2´s¥õ1PŸ ;@Xh€íOéµp2„‹am bñX¼–µÉŠZè€-‘çzà9ž'x^ªç.¶^Ù{øŒQ®/!Þ¦ cK²L©7ÈÐ É9Á9XYÃŵåÒ:®Å‘ó7¸Ã²ÇÃÈQxž#xœt:¬œ(X9a8aÝëÖ˜fY·˜.«é>OÓÕ˘¬‘\ƒ ]¾o—š””E'C}J¨ mEÒ GLÖ-Ö|>í1úÅCêžÛÆ_˜¾å\ÃN^>oX^ûç»W™ì^óvÖ¥ªo`óC]~›2ÛIy%}ˆt è!ûB¦;È7ƒ[9“kJ´ªQØ ¨ÔVVG™K)°ŽEC먩¥µiv“ÁêÈõÜšFþrzFQÒiÑàÓk1`c`©•f†ôÔ|Pú„6AÚ”4å`†õQð— asEh†  ‡W7@»ÇÒ·ú>x‚çÖ+Û½Òõ©ÿǺ%Í×èÉ)p.’wy.ÃNÓü†MoY>q\-/MRÐw)—ƒ­XvX‰ôð€à±tXé0ôé1 ؆Æ®Òâ˜eƒñ’TtQÒ!Í%˜5 øü·fšîE†´g'éÅ ’l=ÁäkmVÐuÌ€þ¾"£í5Îpf?´*^ ëbOœcðêªêB0i¥‘I¨ƒÍ26-zÌ‹.N‡¨ç ¬ì’Iýé9‰š¤R¹Ø£±”úAU›hý í  “’ΠÎ]ðüQ9íòìU©÷>>Ã:dXû½Á_]6-A–©¥’.So ]£áÂ5}¸æ¥Ÿ}÷ÛÑf¯<}®\ÿ³°ú0ï z²€Eψn/ IDATLDÚˆÙ€¹–4Yì!-²Ofo±;‡½±´W–‹å IIïÅrÀpénÀ0xñDv¨d@KžþU¦ÐY`Ä#4Û j‘3»£†t²–ÓE—®/†¿u)&4LÕô è1f@¿"þþïÿžŸû¹Ÿãë_ÿ:¿õ[¿Å·¾õ->ÿùÏW[ÔpÎÖ‚>’‡¡<9{ˤ2{¨ ³ÔJ:9ËeuumsLF5ž©èòX†NjHPËX5ÝE-‚ZK̘m¶:,Q}5t˜ÿËJ"­ ¸ìºä»‚´öýج¡µG‚§ k6a‘üd èu€uÌeàÝüV Û ém^v¤çö®øË·‹Uêy§D½„p…†OÑþmŽþCþéøv·ÿ“ÿ7ðÅ¿n1/ߦ‰—( "š N˜ãÙž`gCVЋ”VtûlÙ'H·—–‹•å`M΄6ÅpÂÐIu¡<‘Ș-#°%o•Ö-"-"Mš‘»qIA?¢¤PW×H ëRÝ=~›zðQøÔÆ èWÄÿøs<xöì/_¾àöö–oüùŸƒÂ»_úï~é§x­g¦«øÐ`®:9KªÂY£J¹‘éž&j›!÷N!ÁŒýèüõSËyŒè¶ÅÞPÆQ¿ë8æÐi‘E„œv'˜ œ%KçóÀRÔu†4n@±ˆyŽÀ4uk™70VJ:OXe#vQ÷ã¨üè!ѹGãX…¢~hÆÁãšMX!Á–ö”NIZÆûä?Ÿ¶Š¿‡p‘Öþ^GXß+áÆ®7ø«5Q®ÍãÄ4|t‹†=1v¼÷<ð¿ýïÊçßw¨œH}-|†â £{Œ¤IgÙRÎßI<‰«]VÕ&[ ÔöÒÒ\Z.V¦dB—üÒ’@Dð(ʉ4Î0õ+’µ K‹Ð âëk,X«<Ȧ+Šº\çQá›ßü¿ù‡ø{xywûêÏÓ§,f@¿"~ã7~ƒßüÍßäïþîïðÞó³?û³\__óµ¯þg·ú3?ã\ ët“l}°Éôÿi`mÒÈn€3LMåò¥±ê‹Q喝8 Ûå| 0U‡:>¿ŒV P.^ÅÐc!ßD&V‡`ÔN m5bMÎCÝÆ¹¼-µg0D3:j4lˆx<=Ac¥¤3Èóv qË8zÒ¥`Å—¼ý â ­JGEÝcƒgãטÐä1M)oAe­^‰èî áR —¶JÈó†{wB¸†xq‰.–ÐOIå‚]*ØØôÿÙqûížÿ‹×,pÒae‹‘Iÿ¦Çb·ˆÙ!º‡Ý>'Òcc碮 °Ý…årc¸XŽÆ–œJEgH“fè@rDˆÕ°õ’,ÁaÄ!$Pc-Ó†HÓ¥\^¢ð…Ÿz—/þÔ»¿ûË?gŽ3 _«ÕŠ?ù“?ù[ (~|,áÎïMQŒé»Š¿<NE5µ"ÊÖ5˜ËãÚ&Fè×*úì㤮•Æ6YQmƒÊ$®2¬E‹­úìçÃ8Šïj2”Ñò´1DÓ¦YQˆ(MqƒªÇg%&¤ŠØ#²—.à–É“ò¤ ¨CH‡}—+O–h816áèÁ÷HèY…KLh1AÇÌÏ ¦‹¢î·Êñü¥î \káØhšìÕ.Ò¨_¾ƒ:øÇæ=G"ÿ(Ž·dAÃ’5Ç+÷¹ÏS¤ }C³öÈîAmSvGg'ÀNƒŠ9¤y 7Ãf•à|”âI'­î³¹ò(åŒÄ±~R|uSAÛ&Pƒ‹`’õQÁùÔƒªž-Ž!f@_ñ8ë««R…õËU@–¹FÒÛϦǪå±ÂÄ`¥ñ8†GåB”—GÁ ¦ž#pœÜµœç€&7Óφ²Ö6‡$EY~ïzIÊÙ ƒ†6 Ðby„4êDI'Ñ%¨3DÓ µRÖ4`ññøGà4ÙË&yÒ%oNëªBïs+»Zp„š*Q°C‡„žE¸äÆ/±Á`|µñší%¸ÄœîÀo4MØ}Öá^ÑKE/¬"Ú¤¼¼ÀÞÀ‡ù`;G0ð1ü´,¥EdÁOð”5Š5·ˆ}‰Ø[ÄÞW N3q‹`„ا™¶KSçÎ$XŸ¦~µ¬ ‹•a¹2ôÆÐe›£Cmf$H˰(>_õ³H;DbuD0` "Ôä–£L@-åÛç è!f@¢xL#——ÎzRÞ¢µPÖScÚ¢3¹çÒ¼Ú{ÝØ¾j¢_{|e²‘úšUyÉ~8©kÚºNÒlÛÆ9MiõL¤xVѪ£†ÜÎyPÓeñ•]´?:6•¬žµ¨èè¨Ùî¨ñ¬µoY¹@³*Ý‘"U©àèK÷'82œ Îþ¾Cý õ.\r6Øà°^ÛÃøÊþÈ8¾{ORÏw®’ÍÁU€««mþ·‹’€y§èÞ€:B#¼ÿҰ’CCGgZÞ¶lìSò|Vˆ½»ERƒg0{ÄAŽp<Áóú¢¨KSç¡ZŽiÝ, íÂ] |ꢙÇÉ^Iƒ¹ô ÂRì±PA;e @ö¦É“3‚z¸næ:•!f@ßq®¢eø¿2º ÃvŽUÝ#ÈË¡åÑ-Êqãô%• ¤‡3rP5 8Í¥\“Ù¶‡#ޤR•[j%ªÓ´ŒÒÑç_X«{GújkÕ ¶q̶U]I‚ôÐ)¯ Ú8"mÖÐ¥p¥€ºÏ®têËìË6Z¼éÀª‰´ëâI„Á›ÖkÐÞÃöHª<9@8¢y”õ ãO\„+\hq\`€u±@ðŠöðÞÊé>©gö=„´¾ˆ°ÔñÓ×IÌ Œ—Â5|76,pˆ8¢8zcØ[á-»áÆ®YذwYIHg%m`ˆœàÔÁKOj’a‘.uà— k9™4и2°4Ø¥Á. — {$Ê€Þ@™{œ¶,ÝRûêÛWÜ™Ê6$X›üX¬sÙ÷lqLcô'¬Rdàjy|öŽ33¸®ì›Yã"tÖinCT£•!jy°y)±íò袠¥ G¬nE§Â:ÂBÇ$à˜àÌRKƒ?>¸kp8 !ˆ¥·pp°sÂΞØK.ÝšÆ^'8› Ò¦ô="©Á3ÒupçSÅd8›*å|Ú”…Á,ÓšFRkU™ 8vÔpsWT’ßUŠö¥xÆ©aMuîj—=óyŒÐ;ô‘A»B¾bTÇYYß ¤+gã¡6äÐa®NÍjoïB†çÒ…_o¥äKF\ÞŸ `Ó-!) 35­cYIy¥@ZIpVQˆ=“Ü9-ÿl‚U!FIöFd²6š ËR¬ÍžôÂ]3XEõ•’îÎàð†m×.°X'Ä(¥ e,L .Þ£aaæÚnõI]«?Ðøknü%.´i«Ö§rm“í GÏó<^óÈ"¹w éîki6 ”18öêxoçˆX‚¼NN8æÄŒ…븱—lìšÆ^‚Ýc»ð­ézÄäÁÏmRÔ’›9‹¯ ÝKRõ… ­Á5‚kò˜€&XG©@-2ôô[X¨®Ÿ"=Š‚®—úƒ1Ì€þ>BÏf½9ueÇÖL/ sí4”«á?†Ãs¤sÊȨ>"£Ksœe¶¤Í™ŠÖú6¦ÝÕåàÖf™k´ò¤©¬ŽLÖRI–§7rêˆ*„˜f®J è4Ù·ZzTÓk(ŽhÙo®•´'° >PÒ!Ã: 9Ó1CÚÔM7ðÙö¨`ípÊpö{Ôï³¢.ë\økœ_Ñz[&îÆúòm"ÍXºž/<ÑEh#ºˆ°$õä´ivëÔð9Ý7ŽhûçŽ÷ö†h?$f¹º›½…k㸲—¬ìšÆœ0ö怘cZÛléš'z!]#ÁN@-Ô}‚tjòl0`ÁYAͤ‡¿ÑùR®íR­RBŸ/3 ë˜ýq£d±*ê”·|‘ Äóè~Œ®AÚ¡ŒfÂtóÑö˜¨è‰Áœ‰F¹9 æ2‚LÓ•ó[b æÉÚdÅ|îICú›Ž;€Zcá\§g ¤­~×ÜR2¤CVÉ^uTÑiŒ)ÍXY1ÿ$%íˆfQåuŒ†žH‚t—ç ì MöÔÁÖ›€äšn¥ÀÙ£C*žO¶Æiaaƒ†ø Ô§ç4¤õ"Üð,\ц†…74Œ¦“rÓ8»ûZÉéÎÂ>+ê+ë¸°ŽµYál‡±ÇäGW ž%7y“'z>Ù/¥¬ÏçR¦II3È&…ߦŸÅÄ ÆfX#ãàá#jz:=~„˜>ö0úcLjáGè •ù:Mw+[Ô€œ‘J9ŸнæH-(˦•Á¬ƒÍ1¼È0X¨Õ=¥œK¨Î%¿-YÙ  ¥ÁçTiêPg©Á\/>æoò•Õ‘µQÁÅ”zç²µálTLΊ Ù (jz„µÛ†`GD‡a@°OÖžŽ>:«è>+êÔ&°^û¡øM V“œ5z}²6âü:U†\*ÆÅ„®ýš°ÂEƒÁ£šl—cnпÛ{ÔƒIÊt¬%)i2 .,ri0W`ïÙ û-h—z,÷Ô]®I9dU}ÈŠúÂZ.Ìš•YâLµbéÂoüj‘\ÈSÆ6‚A‚0tàr>eJRÿ.}0YUk†ôèÅÕ'¥všË•™c3 ?n¨ŽYé‰Éj*ÓExÞÞyT”ŒªZjH—u²ƒò±Ìvr~ƒ(,R8©à4Wà˜`1dëU¼Ôœ¿œÞZf7Iƒ5¥m’NoˆŽ¯Ñ”1e3e‹™\üè¡Tñ‹Õ¢Êè¨4š›ÏEPŸ¬ÑN÷¤¤…¸h‰f,÷.è-J:àé´Tt_)êÁú0õ*5:$Q[ÕÚà´EÃ=„‹¼¾GK>¿CËpÃ[z`’½¡=:^hÏ·>ýË- \Zä‰À…EúÓIÌ™ƒì v›fßN‹ {Øî i.ÀÎJÊ–³p2YQá`¬7ư1ËÔ¦¯×6+iãÁÄj-˜4w’ í+HI$É.]ŠVCºö§'›ê™WÏ,ôé‹П(¹€&Ó‹Œ€®o½Ù`U+9Í ÎêJ>Å _Ké÷Ðd¹:gžEz®†t-›c©V¬˜žê^FHŸ«è´¿©Æ6hê²VYZ›|^@ç㨠1YMBÎêpšRלB¯i¦íªçÑDI ±Í|æah ž@GOG§®‚sm}xج<­ ˜ÚòÀçuñª}òŸû-ï!¬Q™a} á%„½"rÉF/xG(pÒê‰V{ö Až¶È;-úƒ\XÄ»˜í„£Áì³M Úì†ÂAL²ÀÙžÒiy#ƒš.°®í£…µV¦em8ã±Æƒø4h(="ýxƒÊå’brÇ£¨È0eJ5°Ç)S §:¾º™ô~™|sC8o90çØMcô'A–ž=_IcѳZÀÒ‘×@º\Èe o„â ËëyËN'žEzÇÃÉ\ÇÁÃ(Tê¹¼­|ŠŠTQÑÙ“.^´- º†seu«¼è2p‹Õaåì†E¤} h&ï.žtÀÛÁè`sŒpÎJZ{Ntt„ jŸ`­~´@$°Y–Ì0§Ó¨¨ °“ºî“'}º…x a“|é°!ê‘ ‚nð¬qlx¦ncä?èžÝgüÄ>k‘§-¬´ h×`ÖH´ˆwØ嬞ÍìNRªóÌAGØu$:+꺥®EYçõÊ8–¦I˜üûÖvǤwhYW_azXKjÖ1.VÆ®ü1Á¹@ZÊÌ>2ºúX ë¹NeŒÐ3&àž©ÖþÅ”áŒCâÅÒ%‹"ïª(Ý ã\õŽ«õ`sÔÔ Fõá´‚ToÉ>´F1yÀÐf0%`Ç|FÓ/«YI/z’?WÙ1]®2;†¬Ž(Ähªù^u°9l|šm{PÑ‘4óõ`yXB³ÈJ:‚!§à½ÜiÏ‘À‰@§>ÛWö‡ç² ¬LÀ–.ô&¤œ^ñyÆ£qþ-„Ä Q7ÖDVD]PfRÙhÃçÔðy÷Ï|÷'߯¼s…, H ¬@Ö`® ½BšŒ\a/—Øc“ œAmv Ò¦@ú(˜<™í¾Ož0¤6KNkÎ6H^w" ,eilv*ZD²] ”t Í®“¯š’ZƒIUKÌ–GQ×ùYž-v\Ò%V»zÙ¶›ã÷¢«1úìG{”æÐCú]õ«ªO œSV‡Áņ&æfsYM7š¨©¶Ã—š­ ,„•#¶K‚”ŒçRòí‡\é€çDÇ)Û§Öéçb\:Ïæ"à$ 6CÚTk hš˜5=èõ†è[¢®‰,Q(6ÿ <°£½Þó _üGþéG~„y†Ê30×`®s æ bn±rƒY\c—˜Í{Ù`÷–RÑm÷Œ>åš”N»tÍE“ÏëQ:+É5)­ÆÑG#š!õ\ºC»cÒ乂õp} µ"6?wžò³ý!ã"ù’˜MŽ1f@ì(6Ã#ÔÌc~²œw ¯TôТ3œ§¨¿þ+¡à2+xaZb-ùø*¤RæÊ\Æ -?¦ ½VКÎÁ€ÚÎ5¤ó¿€>TÒÆd«ÃF´n¶ab•Õ1þ¾Ã: & N-M”Ò”&j†tRÓÝ™’ªãìV Gh×I³® îª>Ò^{Nô5r$pÔsPû´6‹M`iÆz°!-EY—Ÿ]„ƃóÄû±Û¢Þ¡Ñä2úˆq=nµcó“‘Ïÿ²åž¼ÏX~ÈswÅÑ^ƒy Ì0Oóá †'X¹Árƒm¯1Íf³Â^6˜ƒÅî»Ì!ÏQxJ5)¹hí¡ó 1MÖêÐçuÝŽ#×¢äµÐ¡“fà6ÔµÕ1Bz¨`Íø )_ÇC»Q[ ]”4ƒ~)ßÒsŒ1úcFÔƒNs¯3˜ZÉA&ˇiÑJ¹Ô"iªúAÞg(öF Ìw%š»ŠU ºž±Jó{Ëìßj²mÎál²S±j8—åÜâpãÏZÚêUp®•´‹ ÚhÇ• æ6@•SÉ샖i3 5·hvÄf=*iM…žTÉWl#É—.–ÇI'üØâ¹ZzÖ&`]@Sã 4ÃYmÐ&¢­¢›HÜÐÓíÓßÅ4`/”ÅÛ‚ü¤aõ¶òîø¾ÕÞó·gïîñö9˜—Y=ßa¹Ç°M½ ÙbÍk®°ÍvµÆ\4˜£Í^ôhu˜“ääŒ4 7¼‡cv˜†‚AIÀî%»Ô¤´’,Ö@#'+)[Ç S£¼BM× .¢åÖƒ¯6\Üã:Czö:Ƙý bteOŒ€.Ò¸(h3–[×›Áy#:F<Ù#a¨ä}è2‰«”t¶sú¤³Š†¡ß¾`ó·ŸmŽâEcP­ ÿ ÎËŒ¦±sÙ§pY5×Jº²:Ò½¬ú:¬‚‹-mö£  û¨4Úluh•tÈE-C}Uâ&+iÒ+^ëžÑiÑžtÇQ<G<'<§âQ¸jWÆd%íFHcSwl•¸݃ŸXcZ°—Bû–b?#è ~l-ì¸FØ4Êûîž[wäèv išW#irª4åk~,; W˜öÛ^bWËê“[o<žêŒd‹¨ ù:’äU—gŸ½T;SgÑ5"¸¼PËãñf=,åÚ|ô[¦Œ\±>”JEóPÐ|ŠcôÇŒ„æ8y¦~¨CG"a$¯ SWÕÊ¡\¯åk^™é¤hæú˜BòZS†]Ê6Ù–˜Ò'qåÅXSîέŽÂÉу.>·8FHÇÜb­tLk£§¨¯”tíK÷qTÒƒšNƒ†& Ml Ùêè³’ÎsÓE¥ËUÊ©ØO]r¦ƒBØ4„v“劚®Óñ’š>©çHÇžÀAÃ`{ÔëÎz./Kë1n„³Ú@tš–Äè‰  Ý˜'‚Ý€Xáíeê¥!°làÒ XÏKsÏAR±åˆ•†VŽi]@Í>Ü]$E½Xb×-¶³Ð’«º%CZRгO3pà”HÊ:d ¤6"42…µI SXËDAW &ªšú)@¤ôÇúHþW3 ?vÔýÞ¨.ÂôÚD=—)µ3, «wV%›c€´–Ÿ ¤«Ù¶kzð‹Å"è`*§žÌEA×Ë`–o¡’¼h  ¶RÑ5¤ºÊæ0YQ—-š!©Y“Ok-­z‹’|éaä_°QhbC[ 3¨Ûlwtº^ >Uc'@gU]GðGXl¢UÊd³¡ò§ûœ–wÐÒ{‡j9ªO 6žëU`c6ÃYm$šÔÊ":’ÕqL78A0Na f4éWoŒÐ·`,aã¤_ŠážÀNvô(J‡å„á”!}Ä °>`daq·Á,Øu‹éí`uHn½!}RÑçYt!€/}Wd,,µ(C!Rb%55"”Ú?õ´)“ç^ù±šã‘˜ý1#Y%#¸n`”_-ÞEñ¢‹£†m~˜¿ñ€ŽÉZ(¤LÇaßãÔ¨ Ò ©@äH«zFcÙR*Q&yÑ:žO)‚™(h›U´¤µSVÂê8˜Œq’ÑaˆØ¬¢Kõ‰`Û<`HHE-‘ñQåÓ6Ñ£M  JS-G¡ É> J:ÃÙkVÒ)U/¥í5„åÅ`w$8'P{mOà@Ïžû ê}Vчi /ÔØ6çí ¢ãêaÀÐ(C w,Jº$š¸`MRѹMD•EQÑ!+é>YÁg«#; jÚ%HËXr2€ZK"^öÏ^{vvØáXËÃÓ¹ÀÕ¥bËñûÑnªücR–*ùÛ“Oþ°ÝÁb#´KX:áÂb¹Âr/–ûÁy6œäRŽÅS¦xµØrª`½IkYcš†¦i‘è0Þ*Z²ÝQ+é´–ñ•¦ ¬z™Ü7 ’nÇáLM[F`§$ )òdjØ )¢g¢þ ¿šcônjң¤¼Õ¯ŒõÌ»(Jzª¢‡i²ÿ› E¼ † Á¢ Ó‡A^ì’å\QÑ ~E†©L ýÊM£œ‹JQÏ V+]Ðk†Õg©+kƒb4ކ¤u°Ïˆl‘n‹°!ôA;B x¾Í è4º¢«°ö¯yòï~¦š½VR y¶5’9ô¹,±˜\p»§âºµ ÝŽ@¿Çø™Ÿùþèý£¼ýöÛõ:û’æ*öÂ]6~ÊN1™Ã,ýæҹܥ¨èU<´zÈG‰æ˜\½—UñÖÊŸ¿Œ¬ž°Ò†gD,õ]Žú IDAT[ Z4ôg073ÌêY+~m?ù»"Ú(h²yÑ¢ô}†^Í@nµvN€Ü„ÞU/šzNÝçÀ.whu=+êa2ë㼆ót¨s$]\’:oݤ¸’– lïVŤÊÌŽEääÛc >Ä«Àæ2p½ ¤¨h³:Nu™ÐfÁð„0¡dFTŽþYŒ,•õhV£«éÑàMHo – ÒE‹øi펵šn@]¿ÌÌ&EQغº®ì—¥øÊW¾ÌW~ýËðîÓ§ß×o÷Ã4}Ïøão¦¤ÿÃø¼õÖ[\?¾æý‰ÿÅ{-›ÝQ¼µùê2´º„¹1wÜžÝ Ñj×òðøãjoÀСx¥ª^‚WW1Ñó½É¹úªÑŸ<9¤ï°9ÔÎ6GÝ䨄ܕÅB÷¢Ï5¢ÃíFoGÉt½V]•t¹Í«ÐêGûKm¬Ž˜…]Þ’’,íWÔƒ/ƒr¬Â[•ihukƒŒBºÞö¯0…HÒ®B9Ñù垬=Y·hÚs˜Þá4½ËÍtâ8*é ÛAy</ ¾ ý·y¢„ƒ £ã¨¤úVMÿä³Ôõn°ò(Ò]Gº«Èæ"pµ œ‚ÕÉluœÅñ+†ÚIJo5N·Å¬õ–0«k‘©Jº7HÓ ±‰tˆ8¨ UMßÊì®ö ·k —ï¯øºJ’ÙöóL>ýÙÏñ™Ï~øW¿ð/¿×Ÿí‡n<ú}ƾð¾ð…/Ô˦çØù° *÷T˜%ñ+ܺž0'æÓûØV‘3Í‘5»``ž0H/IKýå¨ Öe»õ+"¢QãRt»Õ¡£ÇóßF;•oUtn!­¦¢'²Ã É*, †’‰½"}F7m ‹=µ•š…ÓyѰKÂ>o<„μå1é-E= ðâìp.Šú.Pu¤‹Gä¾#Ó‘éÉlHlÈlɺƒ´‡tINWätÍ“éŽÃ»œNñ;Bøl¾ |Â!¦Þß#ABBÂDØ \ä ƧÛ*ÚúVÙ W‘Íe ßG.·‘!†ª¢×Jzjf±hìû™PðϧÜk÷Æ]¶Ý¬¦‰ !"})¬c¼Ty\!]¾×ë“IšŸ…Ìûåæ²ðXfó°üxôKô H3.î:ÏóÓõY3ÇD˲¦ŒÛ ЧÒßmiq€8ç015Ï!­k»%9 «ÍÑ!šnÕÖ?`¤bsDE;ÈEMw½N.“\mŽ9&ڰ׉Òo²W@R fî3Z@3è„NEEkãES-> ©Ÿ“Xªåáv‡ûÒÕîÎíþ¸ÜÏC$]]‘v=‰ Ig8«îÑ|éÒ#4½Š¦×8Œïð›çïpzþ„ßñîD÷Ÿáú?Wèõ«õ,–a§! „t†Ó]ªçs´í1"'k.(j¹ŠÈe ^º}`¿ ŒqhWÑ£‚“´–*$ìÛrÂ,©™ß𒦂ÚàLÙÿ¬q¬WØj•tûÕ[h–ÕO¤…v{Ó çñè—öϘÅ"··ç^~šÞ—æ53¬<¨È‰7–ïj¥}ßzgÎp²*P2 qX‹Û²ˆü°ëaµµ76w½b IQÒB’FIKéz¦Fêò³s©ß~·ëêÖ”´›£QÓ3À›e@)‘­ÀgåÒÍxôKûŠ*ÙOü\E‹ùкXýÔŸ/ÌuK4ÇÜ'Ê™¼ÎëxEtw¥™l«t@cµ9 Géb gæØ¹œÝæ(”AGD{¢F÷¡ur—Üæh-ŽÞÚ´þ*Ö †‘‰l.¨6ñÐe±P-6z³óÃ!£ç;@}¬9[ÓÙZì™ÅÂaœ„‹¼#'±N+ ¨oA{‚wÏngœLE¤Ýæ8¨õ¨°+¡€Zà d=äYDßQä]àÔAPAø®FIÏÆL'~‡\ð1~ÀÔs|á¹A:p´mtíÕö% ö#<­‹öBU‹Aû,í½Ã{`[¦@ï°î…mo@^šå~³®³X)ì0$EU+w«è9‡p=—ùƒþü™*‹ñèïa”8Ó‡\tksd˜_$ôP÷þ¨žLì|Á°Ä"H»­»l $ççk³Ã¹ô¸ѹ¥ šGB¹NׄÜcûRUÐg&Ž:ñ‚̳” Ð%È ³ì<Ýdï–Gñ¢ýà+N]9 á$Ë î„³Op\MËluT%-ÍV,÷d/–wÒ& n‚°‘ÈF:úQ2A²UÎ[(é´ô¤Wv—´B¢SŠö˜¯´.Ânf0ß²<|[Þ·{@]ÿ=ñç®ð^®É<Œ@¿ôÈX3Ñbq ¾H·ˆ‡¾?‡/R  Ç èà‘vW¯l'v×e4h4ÝèS·ZÎŒœïð¡7Q­|gëA£f Lg#¬žÝžmŽ®,ÖH£9н5­[ÏÂ@73j-ie™]ÂA§Ší̽ÚþÆëtHµ:´Z÷ɯóÅÄS6mÎç<ºrm?hªõF!Ùé%uã–tbbä¬&ž’Ø”ð=ÁÒv.®€ 1_ºc6^]EËØùÄ êáAy€Ó(¶4!¾xäUí*ÚAíå6Vù'Ñ'Ö^L2Aô¶ÝáÑú Ë£5nÙÝeõ¯ö¯’yÆè%q°Â—%˜Cy:¹Ö̰~À _zÌÖÇqêÔ(h³9fKf[A͇fD«Å‘«…Ðò|*w°®ÑÖѤŸËD–E—YA ‹ŠžPò>´©èâC{£ÌÙæˆ¥ôhn§0  µ¸$¦¤ÐÑØW{c‘î™Lç*ÚêrhãE+,yeÓxÑfq¨yï—+¬³·Êò”hWË¥ž¨–*Hù„¦#Y$½¤ã‚kÝY!M LÜèÈ»ŒlÉH¶Äö½ÊÈã \Øâ^´“¥Ô©9 á ²È9ä rk*ëêëšì)Æ0gn—,«hÛ–2ÒamîEèDè%Љ•ÙŸa]óÞ4¹YØöïì}ã>h—ƒUY bg‡m´ÇØk0õþ0êxôKŽÐR :W8.㡃x6a© RYý«^´Ôp»¢LLEOÉîX¹in}èúzÌKÝ6 º¨è,J¼Ë‡Î~Ž]誃W·MwÛžú’+è¼Ýùk,*z×èã[ Ž$à iQ½£€y£Ù¶2/V‹c¿ö£ýº!¡ÖÎÛ”s*ÊÙs>W8k>õ™ {„ .tÏkt$…ïêÀž‰”i'ð¸G^ïÑ7y% Ù&#¢ÇE‹@åìêùÌíÄÀ3„AbiË2ÛóÏ'snlŽ »[ÄC¯[w猎FZÑ3ªóÑ èvNûÎêÝ¿ ÖyòWÏùºSô,¦¢/Üæh<èEò ‘¬ÊA¦ê;·`Þ¨©é^2]Ÿév¹/ª*º”'uHœ“•çœL9ÏÖÆòUƒrf‹²õÍpíÝr¥>®Ï™_½œÐOm‘7\ ºÁ’3ð~î²vvÐ] qlw„ý†zdˆ®¤‹ªv›c‡´,òNJXsMÌ Y˜²+t™•u[f£ÌÁ•t/¶†yGÉEJ'¾Î'BЄ6k˜“æ[_©¹¶Aî…ózÈ=÷]ù•ÕãÐ÷Œ÷ïþ?ÿó?Ï4M¼õÖ[üÕ¿úWWÐh°tïÁ#9F½É¡…º ûuêz4Ç:£ÐT´’¢/Îwõ–X+Zí¶PHiµÌÆÐÚžÆæäR¸,nu –öíP»òðR7YKíä³YöJÞµñÐ¥³µ;ûÒÿ¦ÙwÖ̦Ø4ûÑët4awºÏŸ¼Os-éÑ ]T¦ÑŽpù„fób Ê[,)¾¨ûÒR@ì3#q¡?tý‚O¾uäË{Ý]ƒl¶À¶‚YdrarpA½ºÛ6[Â~c±×ç°PÑŇ–Áì ƒ´T]¢æÂ)g®TÃÉìI·j"aݭͱ€t5ÌÝÍå b“Æ>nØZ­‘:>€o}ß[;<Ày9}Ïøñÿq~üÇ€/~ñ‹K@3Mœ«]² µss¾šËBa¡®Wà]+h1ÆÔ QÍÙ”š­®QNLœPÎè"i%‹bù-‚.çÏct弔뢹zÐwòO^ì^OxyNÓ½Ì,,U8 •Ì¡ôBI7ÀîúLï€Ö6ª£µ8 œ§ì)àò€úЦj³{âê¯AñOrB8 ñúo~îÿÓï™xzyÅÛá’¼òä ‘KKƒ³\ r‰È".ìm+{BïsÓ.zÂgzäV‰ q?º&6¶ µ™EÍ>n.å6\ao0ºÔE²Ä’$(¦¢YfsßJ´§ö:iBœ¥:Eø¶ŽÇݰ~/ÅýåûÆ ßg“7õ IDATü“òOø‰Ÿø‰z9ëRAÓ(èb/”L> ñ ³Ûç•‚¶ ¹ÙúÓúoLġ¾3a%4 +Ö¥ð쀮6‡«èR~tÑ£°ã)ÌÒn'ÜJmå:7÷î?]’V¦à™…]£V{JK,%27Ló¡+é-ʱUÑ’‰½v§½Á¨¨•§›‹)Y;;+ÈTM9ãI3€…¡éH°è®Fö¿sB~Tyë“ð‹üúöÄÛÝ»œã5„W@A¸¹‚pY¡¸D0P›š¾@ØÛŒ{$îÍÙõHîQ6Ç"{{IRÕô:1PÔu™ûj 0ŠÔ<“)Ì5‘zŸEQG¨‹‡ ˜eU‚ƒÒK`7 ®—킬—ø½[i׌Ã%é?òãÐï1þîßý»l·[þâ_ü‹õºÃ³çü?¿ð¡ú”øÌ5o~fËÉí…6‹ï–o‘Õlç±ôh‘èÊâð*kæY˜z@Ó&¬¨kÀ }{¡0Þ µ£Ê0ªGÑP¶ ·›tn7ž@éVEÆï‹.ŠuVÐ¥¹ì‘TÕrïPÞV8+[ÍlÉôÒo³Å—ÂIƒÎ*º*hõì?K‚GÉ^×4¢9 %,Lì uï®3ú†Â ÝÇ…7+¿{#¤>³Ýy»8Æ)>ƒðÂuµ`3pé*Ú`Ø›’æ‚ ;„¡ÛdKè7È~†µ¬•tÍÞ–»!ÝæøF‹µ"¦Ê0Û"‹ £ËúH¬”´Ìp®¶«Y^†Þ­õ,,¯h_ï—ÿË—ùòW¾ ÀÓgO_þÇú!€¾güÜÏýÿèý#¾øÅ/òþÂ_àïÿý¿ÀæÑc>ó¿ýÊwP¾Í™ï F”Q©ÝUì ØúÙ¨[}èy¡°„ÚÕÌp ‚¬ï®VÆrîðÁKU.*º„ÚYŸÃ6Ôn~”µPjäoa4y$GÃö õ~ܲ7jÎKµ9Ö…“ŠÈ(=©*è-s¸)iwŽƒ6™Ð¦€WX««htö¡Ø Ö² 9ººNþ÷ÂV‰— Þùô•´ÞìÅÚ ö°í2Oº/âÀ9Ðð ×¹"È5"W—90%m*úhpvïZØ!aëû¤ïíÜ­Tô Ô«¼“ú™0wö°eí–œ¤ðÖWØâM·€6HË-HW û~.—ï˜kH/ô±_øìg?Ïg?ûyø?þÏõÁ¨òñè{ÆOþäOò“?ù“·®ÏÀ E¹qõÚ&¬d,««Hb-E6†â[´ñÐ¥&‡ÿêÏZ”i›€ØDr@ÑϦ—ÎŒœ\=/ì–ØÀ¹ Ñf¡p)WÐKºµ°§èc±8tù9¢a é¹^´Í„pdjÔ²V]–õŽ([Uú.Jו­Z!¥]QÑZ]›Ë’-Ù­žý£rÓT"Ha+„+%>yMˆ•|!ä ¼¶cr]»çáÀ!LÞ©;pòy$pt _¤(êè½OWÑØ”`]À¥ë+¬ƒF$‡¤YXR³·Ñ嶪j å0ñmÉÞ¦€;H-Ô—Åk&1[k«ãƒdv/•õZQû Ý꺇aãÐ/9Vb·ÖWÖDb¨öÂØ:¬ì¦Éšà1ÇÎi](\*è¤&¶ómž£a]“Ãã©Iù®É3Ò¨ç`÷ž´¸‚^BZÝz‰èƒíC³2ïPÏ­ŠÞ”h޵švH«€+è6ÎâT¦Î—·’‰½¶êñÐj`Þf7ìKw yP´4e=Ö  Ðaºƒx òò5è…‡ÔuðxcÕåR鄾ƒmöQy&Žrd”„2äì¶­ÔyôÄý|™™â 66eƒ„¡'Ð#DS×DWÑïeyÈ ÒÍ S²€dQ·Ü5‹›y?7”ÍÒØ+`gÞÒí¿Ãíý²½Û¡þèŽ@¿äÈ* ­‚ŽŒœÉ  !©Z&ð-ߢ7ŠH×¢I±Fäâó6ňÚP;úңІ…òeN Ïg]"9BɽÍjEŠ[Â2Wj l‰nEqˆ+üéÛµ]gD7z.tm‡U”´p$±%³sµ¼EÙ‘ Ìè™M§ÈFç:ÍÅê¼-Uksà€‰ŠwU0Å ‘Ð)²±0f¹äÂ^Ñ-ÐAˆð¨·š)л(l:Ë껸8‘83Ù¹"ÂùP›mp.ÛmAÐlz„ ˆZ¼C¸Dµšù æQÜu{ ¦9qº Ø-¨òuµ_ÞÏšÝÀ»]m˜“UŠ$.€N…jæC[ 7$yÀñ¼¸ëJA%_z«ŒœÈfÏ2{â—ÍÂÞX4ðH]…Œˆæ9ÄŽY€W@Ëy4îM‘'ÝÎ „ÊÖhN$NªK弚ƒ*SPk3µtwUlŽnµøA-²8ÿ–ôéÞëå0Eš¢Ö!¸Å`'=Ñ–¥4ÂH`BjÉ×ÌDæ€ÊX­›gD œ—v‡x­h ¨ÅU´E4û¾‰ ¨Ë~ðýÔVX ¹ì£v½|Ïæÿ0+ç{þ½^~€~Ù‘ÕÖ§ (×D`r½¬j·ð,2vú=ŦhÒ Â6›°(èA=Ôn•çåB)t‰ã(Š´€séò}«yl}]:+h‚bqèÂâ(?ÜrB0µŽM›š^b·7…½RÒáPK)û;ÀÜVêë¢"ÑÀIt£+û^&ÔºŠÍ§àe Øc¤WÕø}2–n=ZMlé!±ŽVØŠÅ_]=Û#Â(„àæ ±Ï”„r²’“ƒùìvH³«i)*º_(iJºuhf™zbö‡”)µë­%”¬Ýb‘ÅåZi±Íå÷cêZEßu‘2ß7ý’#)œý„Ìâm'ôyÉ‘p ö…®±sÁ"9ÚØ¹âA³²8’EåµkŠŒ® ¥m«¨š~ô…ÂE6¡5ßxÐS†ñˆ¶Ù„ÔA7öÓ^©gÆQo[0mHàÜäY9ÊB!$Ždö½Q,ŽóÒµšRŠÙO$ìo ~Ùá[À]ÎJçÐEAGs3þ7N–†]ê6ÇÐK—î%°1'™£Ø2à™À kHbNêŒÌ5ïQJ<Œj¶g`¶9ðECªª.P^Z-¨eí»¸‹ª–z`ÍoÅUv l‘Øp§¡ó Ê÷:î´D>âãÐ/9вµßz±8FtiÞJm,[dÅ,·.z·ÇB£R¹i,We£±8¬ìèm-¤j7g6²²8ìþõu¥©ñQZ¯bVÑAŧl­˜ŒŸ ´ž˜;¥†uí¨rŸÅŽ$Ž-˜ýl¥ÌêTHàQõ].p76¬6¶ÌgüópåLéÃ:Rë:w½Ù]è0@oÒ³z6=‰0ºzžÎe«u ­Ee/`òk'ÄEk%MUÒ›…åQÀÍBIXû¾5=ú(ëu„skƒÜ7íÕ_¨5¤×¨~ î÷:ý’#eå¬ÍÊOfOM,tµŠ$vOS“ZåšóÚXöµ/{۞ײªj‡÷'4@=fíÜ(èªætm^“ ¬ìh«œËër@nÙvR0+èæ!µ/nÝvËEBV!wÙ!– ©MÉF5Ð^w¢(ãõé÷Öåº{!à§,ÌI!^ÈHÎBèA¢%p±‹t§—H˜—þ$0VZüœjVÏI–*Z‘EIå>ø©?›ú3M¦˜¥÷CBYÙ\zÒwÁzVÓóœÁ|Wy¤µW}°KhÌúúùÃXzÖw]þk…òîÏê£8ý’cö ç(aäè ºÍà+VUA[Òacqx'J…T{#a‚{hjsºUtM÷ l¬t‘¾eS_“®Â1Ú”ïÒ7Q—y.Ík8×H é$hçPÖµznV÷4zR C¹rIœüòÄÒn)þr;å.x7¯¿¶èkÀÌäpîί,«ovû@¿q3¢.JgßV{#4pf 骤CóÒfx6¤^ÿ–¸mßþ…^ó¦…vñ6¨—À^G}ÜŽ™½Þ¿ÌwÃú¶²Ö[×ËÜGs<ú%Gñ Ë!jʦ[xо‚ßBÍã 2œ[Ö2uÀloLXsÚ¢ ­Ð3¤µ8Ê sZ(ùÐfÆ, ³Å ›õ2²è®Ò(é€.Kx0³Ýª3 ‹jö´ä²¨Iks¨Ã"w =hê´gÒÈY§š$ØBzZþVÔ>Õ?Î@Û@W[H—Û œ¡‚™0«f d ž-W¼Wï9H²jCÝ.Ðí„m'Œ2Ãy¼ÃÞXL™A]-­Ý1Gæ´@¿8#Ûö‹c'h·ÇÝãÐ/9²Z[ñ Ô ¬%‹¯õ}3dWrÕDS“b[­ âÓZ€2¥ò·KrÚ8zÇoSÞZ­:›,?iAohòC‹){+UtD9`ͨBµI«×CÙü‡Uªå” :õÀä!´¼Îvq°Ày‹æ“ÝæðƒŒÎvùSÓ È ŸÞŒÕßNñžõOjï±8Z4¶k[ÒÓ^· “+gŸRšý0÷Íå¾™Mó?鄨Y˜^ia"Á€­Þýdö¡YxÒK%]þþò^·Zs]\”æ–y»¸^äÞÛ?èþý×-Ÿ{}ÿõuëý‡1- Ïç3ÿüŸÿsþí¿ý·¼xñ‚ßû{/?õS?ŧ>õ©ïëy³*Óä¶Äy©Z 8¹ÆA(š­+K(æÉ£7ΨƒpâÔdœi£¬°AÅOµqs¶!l£LU;F‹k¥¿aö¬D)мú²êˆÑ'T–¢ÌÌ ›¾±×Nék+ŽÖÀÍ-¤ÕíaNÿë!Ûâ æ-¨5wM¹ãœ¥†Ø›¦p„|†t9‚•p9 xíf¥ÖÞ÷z4Y}˜žA(ÁÞW)Ù…-˜[åܶÌî10—R‹.­4-K¤*é¶`ˆ ¥Àr‰©õ;ÊaVÒwÚÒúÕK`¯A=C|¾ÇòÖÛûwÝ]gãîûÜý¼ßËåúøÐú/ÿå¿ÌúCˆŸýÙŸe·Ûñk¿öküãüùÃøóûÿïÿÞŸ8gôì¿zUÊ¢WÖȨÓBµ'ÉÙä¬Y½P«'”“ž<`J+ü& ûVæ”´ÉAÕÙ —sÇ Í~íÎ"GWçFE+ˆZ&¢%RϯI¹!óôØ`…êÎ…-ˆi'ÈDÒÒX­Ò/þ³Yšw·wwhÞ1æ§ Ó3ˆÏ}.à€6õ¬è ¨Û85ª£9á©.(ÁÒµöÃwlTrǼm ,b–R¯À¹UÐw5 4ÛFU×6ÛÍåéÖîãµ¾êþ¶S?Y]^í—qï…¶¿‡w–ШÒZÁ?Œïe|h ð#?ò#üÓúOùƒðò×ÿú_ç¯ýµ¿öý?iÎ0ŒØ/>87äÜsÊ ÎÏA^@8XÊ0#H¶0 epá†Ì32OID¬ä‘ù¯¹ è6XâÎ~‰‚«è)¸zî« Õ¼å˜,ÒdĆÃ3!<‡ðB?hÈ€…¤]ÍÞÈÌ[²îI\ø/d¬šßAwÝdŸ­ÔV½¦² 1Ì*.«ïÿ¹, 8Ègt:‘ò §tâ˜'†lŒçU~®¤wAŸ ñ…ÂA ÐÕÚP‹¶hZD©:¤aöV°ªjµ=˜Ë\,”ñrÛ¨èòØõýöË½n媨•í·éJa#«í*TyUi™ê^êm¬ÊÒ- ^Ûv³ C\@Þ¡¼>®Çúú‡õÁ{LJÐêOý)~é—~‰¯ýë¿ÏšÑ)¹'ìIÓž”vŒ ‹Ó=½ñ]Ï…pTKθ0¸¿ûŒ¤OH<¢ô·€BÚt‘]„m€. \E{ž¢v6º| Ó%§ÔqÈ#c­ƒp~G‰O >…ðBˆÇh—–Õâ0UŸÔ½Nt$õÖKôL¨5n |áªC¯.Ù{}ð>ˆŠ.çæZüç­ý›)AJ:MXN Ó‘›ô‚S¶`Æ.€ž`zx"ħŠÜrT[(lêe—öVâ ¬öž[X)}k•k§±P¿²u«Û¹.(W÷g KëGß kæÛ¹# ¨ù$²œ·`Ý^·º½msü YÃ|ý^µ—Ûíû]Wöuyy õ»ß~TLJÐ1F~æg~†¿ówþ?ÿó?ÿÛ£ UÍ^Јæ–O×èôˆÃômi$£pNß‚þ»B|W‰/°ôáêe'U_xÂĆI­+Ÿê%gà&¦«}ÜÃuÙDˆîç&äÍ4_@º‚é1:½JŸðlú.ƒŸÒ§ç0|ºïúâ3SžÕæPSõ0XXF_T&_ôÌÚ¸bDxN`¸Œè«=¼ªÈc…kÐK=¾|áП_©v©çl-·jʹÔiƒpR »ÓäJõ™9¿š-´ @ß䆞ÃUO~s SxM‘G { S;ÍjvAÞB¾‚iD§ =¤ó žŸqJ'â(œ¾ú àmgb–ÀAÍæ˜ÄOÿ“ùÏ*d2™‘¤g&NŒzä¤Q?ÁHÏÓ¾#}lƒþEÞ}]ÇW‚^²SërR`@ èž¹¦ªThkî!uèÔÁÑsæx>ó|øŽ½_υᛂ¼ Ṛ—>WE­~³¶sÍýgÐEÁµjs­T‹7¼†æ¼²ºþ¿ ÛÅÄ÷TÖ,á|—ª¾í{¦Ü±¿øJaß§¨ïôûÁºUÔå¶H×ñ¡ôOÿôOóS?õS¼þúë|æ3Ÿáç~îçøìg?Ëïû}¿ï}ÿ/þÅ¿àü‘?Ÿø‚?ÿçÿ<ÿý¿ÿw~è‡~È%©úiúµAa è92¼H<{~ƒòö“_#[8ýf ¼+ÄÄ“F™ë5O%¢xÐe k±_ÞaÔïpÖo‘ôžæ7¹ùáWHŸ}„|2Âëy”á2Ã.»Å¡6 €À½–r¡ì5½óya›t…ŽŒ‡ŽwŸ9¾û6ã7ã·¡»±…ÂÜX6µ†#Áþ~èÒDˆ´°ª>°¬@x@Û…¿uÄÆ-0Ëòºû ½ˆþ`ñïI æu}þ;7wÀ[î‡ôQ×·€­K ¿¨õ=.? àC è?ógþ ?û³?˯þꯒsæ•W^áOÿé?ýà ðõ¯û±àSŸú_ûÚ×f@+Ã; =wðìý­K¦¯\Ò}õ7¿ù-Ò0SBs¶´ï²•ŒÊ #*7¨9F¦þkäÇ¿ÁÍïü8ãþ(ᓟ„ÇáR­{u¯Ð÷¶l¯ØA" Œ† œöpsï\3}õ’'ÿqÃé»osq8 i²×‘ÕN|nqd4XøCÍ`+É!bÇyÿßxþÚkL¿ç„ßõÃðºƒy¯èvÛD0D‡@˜­Äü碚S„äþù´…qgyíçK8\ÁóGèwqü/^üÆo0>{F:E£å5̩緆´¿ù;~ù²º^Ä^ózÆx{?Æy¿ëæËwÍöö®»}y±ó¶»ç9êýÂ{ÌæõŰÜOåo+Ÿæï–õ¾Ü½¡Æ÷-&KË–×Ý‚ðúsy t;>´€þÄ'>ÁßþÛû{~ü'?ùI¾úÕ¯òþÀà«_ý*Ÿüä'Лçœåÿ†A‰o|‚øøãðDà›ùJG÷3=ùzùubøgˆ±úÂ1ÁF‘MFvŠì”pÝëJøá·¹üØ7èŸH°ÿ8l_ƒþº {Án:8 Ü<xGàkîÿÝòê¯ý;ù]ø*"ï"r@8!2ÒÖ]Ifòví°dN‘d£È…+ÛO<áú¿N÷ÊéÑ.? »×`ûé.¡ÛA·…Ð۔Υ^°s©—ävÈYæ¿ã©Àwò‘ý¾à껿›>|ƒ(ßFäRr»=L£–jk °Hãàžß¾Ì ®Ñ>KRM]Ülöñ˱ìw,ÓØW’XWÒxѧ«¹M|_îõ@æÛ%b±uq5[9æÏ  ¨Æï§¾è\nB-jü`ŠÃ¸|Ž…¶å¶V·á"Ú¼·‹SæÛ|ûå/…/å¿ÂÓ§Oßç×ùÑZ@ü½¿÷÷øå_þeD„_üÅ_üÀýãüóçþÜŸãW~åWxå•WL=r}Éöþ ûÈeü:ã¶Gû‰¯Cxl\€Nã þ IDATìðþ#,€Ö9Òë\˜±¿ã…À»ÞŽÈ7zºß¸à•§ûð*½¼A/¿åïåsG¬\þX2⩚mÏ’yÞ7ÚsìÌZÖÂ6.á¼ö#*œ»;îÓÜWï¸î>cZ×·ÛTJÁý»<hDWÀ¾ßö^Oc5yŸýv»¼îsŸýŸûÜçø—¿ð¯îøœ>šãC èÿôŸþÿú_ÿëïé±ü³öÏn]/¢Hˆ0)zäi€ï |+нÝñXvn]^°%ÑIð¦CŠÈHàˆFAw yxSß ú)à.‹ð‚s÷-´¿Dº Ä ˆ{@!‹À8 úB,²á»À· |+ðhèÙ…Ì줧§£“ ‘-‘w‰Rª7xÕ˜‘-p!p©èµ<ôUE?f¯/] ½ÀcI<ï¾Mê÷žœ¢3„Œ(‹0çNˆùæ#çSp0+Üä…¢O#òDÑo+ò[°¸Ö E¸dÃŽž+¢¼KäƒCÚ*2ã%ò• *¬á„qÌ`^ASµ¹¿#T£Byu]½ß{šÌÜ ä[`¾ÃTÖûÀü~«Èñ`ü^×ñû6Ç}ãC èÏþóü›óoxôè"òý¥x—!±³³ë!Ã!Ãóˆ<븘¡ôÇØ²ãM"‚±Ð/ ÕÑ×Ä®„ü*„7”ø¦p~¤¶À¥(Ïà ¦ø‰¯@xaðUFñìA¬Î‡«O}*È“@|y$Ù“³…(6œ‰$"JLôN0ÖBIŒ =ȵÀcE^Þä•ô†{³Á¯6á†S|b¶KÜú¤ƒ2¥3+¦,%ñømµ,œSF޽Qx®ð x¢ð¶Z¤Æ»Â幫¥geç{z"·mrãJúÔ@ºäÔÏ•M–…8Ö!:¬Ù÷ØöU½SI±5jNøúq+PßRÝï7ïZé+pö}]7ÎvÄÊkß·êÇ×ߥ˜×ï!àºõþ¹üÑj@éK_âwÞa»Ýüö:€ÄÞö'…³¢ÇL:Iö8g8)rÎìDÙ¡ô”ŸpfÃ#„k‚¼@xuÕÛ b,ؘõ’/@¯”üòc!>ÜY ªlDØ <“"G,-ÑJÉIÉ~¯Ra€o,¨C¶Ö4GfHßòB‡Ì.ö(¬ˆ5ô "ÙX D"Ök»'p&È@¨  k%½Ja³+íéžnÓ#Ñ‹lØÔ¾s¿¼®nW@o½æV=/ì¾ÚKYµé¼í°¾¾Eá³”Ö¿S{hârQ¯Ýú[ç·ÕCܪS¹[¹òƒcöÈ÷5 ¿ô¥/ñ'ÿ䟬Ç?ü‡ÿðû~N‰é7öÛ) “’²µ$:Š®Jÿ?{ïò#Ë–Õi~ko3ógDœsn>È¢ºP& Õ [bÔê“îVIHwÐJþ‚”€Ä„1&Œ™ ÄFôƒlÔŒ²'-A«[ÕY¥ì]P ä=xûÃl¯¬µæçÞ<5ÉëûÊ®yøñðð7ÿìg¿õ"²FXB†¡x‹ÎÞlrêïF K*¥'O$ÕËõt öì‡ÞÕ)>-<ÙÉâh€¶E % ˜+¬8 Ä­WõþEaºtk©ÞǵÚËWˆ*¥ÓfàH ‡r æ g(JP\­%…Q­·ò^QÏÞG‡„>$ºCbE`áWùÂÛfzD:&‚$læž`ãš""¦Ní/˜‡NÕ~£O‡‘Ε³–ïíÌÆ˜M|ñéÙ§{:”qH+ýqêOÏ } ä ã|¢h|ÐÓ9ˆóЩ¹õ½VøµmûO¡øŠ5ëµ~¬{F:¬VÐ?p,]Y;äèÜÚ„vÊ%gV{f€{¬‘ÎLŠNŠŒêHÑ7T‰®ä¥ Û•˜PÙ2KH+A×vò&þÛ^ rË8²j>3ÑšJ!~Å¡®øÕòŸŠììºâX¨Áy@éEéš tÇé áèð5u\ue;Ü42ŸÖJ;ƒ!étQÑ<Ûj]¢³Udê9c3R¡eAô|½Zp“\MgM™§\äa§s@·¯1Vk"+fP窋æëvkzËbqŸZ5Ú+Óº© ¹O”"uOn[®>ƒ–æ×_ÿhàS0Ÿlå>}êJ?÷ø²Ég<_û‰ŸuhO•'ŽÈyùú±ô®)ó«…ñvКpe@;U×Ãb0+a ô­Ð MÛ‡l• 'fE¬ZQë¥oÎ/ý=Щ6ßeµyš—c¶ &ÿÜzÉ©fÁ„Á~÷¬ Ê…w†ÁìJ¥Ex´¡°©ƒ‰šší¨ÈÑ}P8º©ªçlÕÔß8Ÿ ”ˆ©XËŒ9ø‰§ÚöºÚ ôփοAsâÓ• ga¨g+]6·Ï»w˜›­1i°W¢>ÕÛÝ|;OY×f¯9PG»ÏAVf”.÷Ï€qÙôùÛAßÿ=¡QÏåûäSžß‰+ò øý³’oçé/íþLçç×иLAç™qCvµ€¥Rõ©js˜6y«}Ë,ÔœÁ%wþ´P39 5ô˜µu<³–³Š(§W©V™¿žâ G製Žˆ+ûì‘§NÑ.«Ò<_Z‹šÄ•üÌÙ‡í­Wˆ«çª8JÌVÕrZj½ôè?ß~JïPîÒyŽÍd¥ë³yÙè–rՎ姨öXµŽXté^Ú™Jm°­H†vVÚ=£Fß(û g8kUÎyóL•¢˜µ¼PÿÛS@]¬NàÛ¼ ¦¨Õß÷æþfßBúÉ}Ú^Z˜µéÈÿ6ÿ¦´Ÿ!ÉŸ…ò©Ä>/à è^ÑqP¶¨HËÁ4–+œ?þÒÊl:ôb˜ËíN=…5ÈÝP…ÁBeÔŒ¬ø¤*-¤*ùÁN æ å2PÛ†f u¡Ô7Á•}„IÔñV•~§ÙD©ŒÉíÖÔ½nu&CZÆT­Ç`Ω*çm®ô‰îÅ’¨©lr’OÜÚ~*ów1Ó!–Ÿ t~"€‚C9Y`V +Jç½´d’Ž£ ;Ïø>Ÿ{ ÎʤŠÎÖÆ‰r.ó‡Û—ÙBX†@9¨Ÿ0µÞ~’€§~bsèÆ!6[ðÍÿÀ!§U7©ÔxÚ’£ô|Ë3Ÿ²ß}Ÿóuô®ˆ°ÌWžˆ‚t°Z6Ê• iS>è``9–«{ÏYelX‡28ö«¦n´-­¼±…ºæV{ÅmÖüìWÒ¹†iæ‰3(Ú«ç6}ç?­É5€N²Æ}ŠÒ|[½¿&E'ñ©'õɶâ)‚ÙÞ(‡ÿæ§¿½=ë{Š;|›_d‡òÚóiFÊip®¢E ’, ºBX£ºF2¬eŘ"ìUØ·*ã³Î`Vï·Ý‚¹Qέ•‘\`Ü^µà0ö}ó[FÁÙuu 5l1ÿsµ¡ˆ÷lš•ñ‰Z~V76Æg‚ùÓnŸWYg@à ¸ÅÑcq‹£tÔŠY±æhâP (•æ ~Ù-\ѵ™ÍæíÚëÉÌÕ`Àeoú¯ç® ³È ÷‰] Zf݃tІ été¨jY*THg×»ì5‚7Ô×Q¬’°|íÀ>Fdò?‰—¨˜Õñ¾gŽáò¾íùŠ´r @¾ÎÑYtO¢'h†ôI” *K©c'°Sa—¬×Ó>xRŠ;6£Â˜”1Hó¤žKÒÚŠ®ï¿W®ˆ3Œ˺‡z8#æ­³Øä¬®&;M ˜gÙ~#ÕD}ŸÞ®çôÚ9ö}й½ý£¨ãgÞ"}îmûœ®3 ?pE Ю¢CkqhÑ”ˆ»+hÑCïjµ%h4´G(z’BöÜœ¾ýðwOªö“E3ÖšoˆÕýÚ RPWÐå]N ]Qø­c<Ç©NÔ‰'ÎUMO{›;ì\¡°h¬Ž¢¨U=¯åy·J¿•£:ûZšÇÛ_¼5±Ù‹0 º‡tJKvÒquE}e'¦ ÷I9ˆpîÚ$ýö”ìo8iõœSVÎù=<™S`,XûhϪìüìzΛ g)اP>-^l€ülåxå÷ù³À<ÿWe}²4?ìÉÂÓ¯?¿ë è\÷ ucOjÜÏBWEµÖï²OCgw©m$ÏÒe¥…Ÿ¡b¬P/,)Žì$sZìûCQÐ'ü'«²Vvc¯)šª×“´¿ éä :ëç :Á.±û÷˜š!¤y´¹M™ˆÒ#¬"¬–ªö2Ô2fìeå¼èŒÑ Ý z$åyZr°÷ CSɹ÷EG"¹®þš}Ρ½Óì€&Þ©òNà6[àá.)"<æLŽdiv“$ú tk%¬¥4ÅjÒ¨ ­Š.€ž{γ­ñšÕÒËѨÅgÖ¨NΓùŒå;µxêWOñôÜžÈGÞ·ºÖ—1$矶fó=†Ï"Ÿgö§·Ïë èg×~ð~ë·~‹ÅbÁÃÿÿû¿Oß÷@µ8rTg\3êªZ‹Ãfz\±0•Ôx¼P{¬õÒà¼Dƒ+h¿L›Å*ÅJ–™‚ŽªˆN–~6£º ]€e×À™¢ ³ÿœ38’T˜ÿ¼DZ‹Cæ™:†Æâ€4BðJÂäê9(¬;X'Xqmó³Š^¹åèªyïÞCÚ¡¾‡ùåx@¦ÄU´Õ•çô;û++I$vŒŒ–¿ÌФ¯¸çÀÐÈP~(ðá® ì—ÝNÈ6 JºÒÎÌi­¤•©éà¾sÞtaÐN„>™JîË:I2Ê;ýóònØû)M.8Ù¶ð{ò¡vBÏ·gȬ 88j JržÈ“Ç4÷>Ì­Ïœï«ë æç×ÐϬ¯|å+üÁü¿ñ¿Áw¿û]~á~0ðšÅ¡¥¼zÖûÈ=ßP@%¢Øw^Rä­EßC…sVÐf!äa±8&q+¹éő˼CîI­ÕjQ¨)iÒþºúˆ.û_d® '̃žý'Öü?°$±tõÜÚÕ³ƒYO”sA“0¬£²v›’6X/VI=øšˆrÝd(¬%¹jv@ê÷î‘ä*:¸¯"ùo`W5)uLéŽ1=rÔ‘=#¯¸ÑWü=CÏß¼ ÂÃJ˜¶.ƒÃ9‘¶ÙšzÖûÎ%­ÅF‡µ[“R—†d]r(;˜9’8…³`«r>õš0ÏŽäl!Tlóf‘ŽHÔ@'a–¡wš¥T 0·Ê¹†KïÞ积Îÿ­yáç:—º>÷€þþ÷¿Ï7¿ùÍÙ}¿ú«¿Ê7¾ñ þê¯þŠ›››gÈÕsŽR—míI.R9U«¹)‘´]ì„mê“hNëÈýñô¹¡bibþIèfœ•™Ý’ᬳÖi–Á!EAS=èÞ|ñ¢Ýd~Az]’X¨ç)§Ú!10gåœaíñºU„uÖ ‡´ÙYI/EXŠÒéX”3â‡ìŠryÑähå w¨Þ#Ý G¤·¾'’S &ôx ŽìÆ‘½^ò ¯øÿtÍ÷º¯—Âþ" /r™`ëÛÆöº‰è†ôI4ieÁ´ÒRI HýDê)Q9˜õX”sÝZ0O<sc8©…\=cÃqG©éÊÖ¸¶Cð~ƒä¾Ûóú–ÚZ*?ï-Ï@¬ópbYùÊò¬™¤õ¹ôW¿úU¾õ­o=¹ÿ/þâ/ø£?ú#~ï÷~ovÿþö†ÿçû_Ð[øòåÏò«É¢÷ÞÍÅVp(B±8 Ààéî5–\cš0Ž·í6ÇØ’’¤VáQ39ʵ~¹Š°SÅ[Éy¹7UÕ/;´Dáæ*z †‰Ö.B:³6’>-TIÚUßù¨ÕâhÒë"°éÔsVЖ­‘-Ž•àÞóÁ•ó®¨h‘È#* Ð"˜½qo îö0LÈdËPéÒ~բɼñ´d¼ßñx÷À»»Žï/ø7ÛÆëéU‡\MÈV Êëd9Û«+æì7ëZ,Scå¾s?ÙGTöX òHÒIŽE5ç­zͥѾšm± ÄlQF‰ Dzº¦kv®kiÁœÛDµŠ9ƒZ8·vF…qžy˜!m·´ÈøYðÓT±ÀÿûïðÝïþ;®ßÝ|ʃ?_ësèçÖ÷¾÷=>þøc>þøc~í×~ßüÍßäk_û›‹+þ«ÿæ¿Cßo@Þ³cQʼ]AÛÎ/‡®±È)³*BÁ¼ÙΫ‹÷, L2s)Ìrðl9r´4êY‹µQ4Ì–6/o¦žÓ]38–ˆ«ç$'¹Ðº Ü{>BçVGòzE€5R”óÚíµT?z)J'Ç”5ûÍx–(fmÀ¢÷h|„nD–‚.²PÂÂl ubŠ:«bS…4%¦ã5÷oø?w[~ðÑábëeð ‹„.Ô¾^*¬]«A:ûÍÞ•4-”4Œ¤n"Kû«ÛÁ¡ì š¬ž'TÇlàœO”A24…N…^" " :òP³àWPJçSi:¿ÏNZµ\Õós½“„l;8œ l+¤Ëù™ëD=;Óîg¿ÎÏÿìÏÀŸüÿÓòDŸ‹uô3ë§ú§ùä“Ožý7K«A›^nZ382½x'»“^§BA±‘N¡Í)öꄆ·.„íµÌ¬dìÃiVKm|1SÐ1<õŸ=:Ee̶†¦·¢˜ÿ¬O<è$Á³7Ò¨„cã;Bš $e)Þó:Å39’MÜ$d:  ÒUMË#È#"90xq ] ¬²Tt©Èr²@Ýd¨[èAz7Ëe¾øGøÛ}`J÷H÷×°¼„~„ÎhîM }Ü·ŽÑa40;ˆ;Œç‚† IDAT´(æA¨ìÐlk4ö†{c*pV’k" Y‰AÙ¶à cIë ÇÚðõÎÊeΣ*’²A™ &-„[hê)„ŸòóÑÀúØ6’X¾½¹ó é²Î€þÀU´;™5¦‹x‡³ä Ž`葦×ò©Å!®`¢oãi‡ 3íÍ¿}R¤¢„(,‹‡œå„겈”oÊ’üÄ15Gq?Õ”œå?»z–¥ë7Ë4I „ƒ”¡ŽjŠÙ+Ãd¾ì=›‚ÖêöFRVbŠzH#!íÑ©õ³z~¬ê9§Õu›Hµ°Ö kEWŠl]d=Ö×VB\+ã •qÿÝAø»Üöi"„·ÐÿÒÐ'Ûºq´¨l€N¼ dre\¡œØ“NÔ³mû™µ‘š `@éUXJ`Eç›°*×,ÚÀ¹n@†³Òk¢“@O Úq©e ‹ u çòÿæÉ«ØiO‹¿+l›ûOsçf9uBi“'›y29VNžäó½Î€þÀ%~©©¬‡ï“ñR~°W{C,Úý‡ Œ4ÁWТtDÈp.í;Ý>É”Sú®)ïV=© h²\s9¸zÎ`ÞxÏ颢³½1EXh`-5zV¤²-ó¦ÊB M N”óÜÖˆ(!Ù–­ iÛëµY=³³~>Û­µ"ò׊ŠT<û]Ê3甯á)˜Ï€Îë è\ù 7O0:™ùÏ6Iå„¢ÐGIqbo˜µ—kÜÌm¬N¢¥hÒ¬Š°«ì£TU ÙÚh{p¨Ç–•êÚÈîbok#øê샮f¶FÊA4ÛG1ÕìùÏiĆ ´‘\A¯“x`°‚º—±ÀÙyéöÎÔ´4ÁAÙAw€ˆ§º±ÁóÖooA7 [E."áÒ༔[„OFå“£ðÚá|¬ñ‘u M¥‡[i9àI•v” €§Ë±'ÉŽÀn¦¢Í‹Þ{j …ÄàêxëPÞ ¬Q6žÄ¸R³{–¾·¿xh”s¢'¸r¶¸ƒ¤¼Rå÷ÍÛòc©‹6CòŒ›Ú€ØUJÙû•bÉëhê Ÿíþ?´*ȧõ6ý®3 ?pÌTQô|rI¶7ü¨§öè ³.væYE Ѓ_¼Zãû’դ؛"RÅð ó`¥©çiöTº¹‚ž5HŠm®‡¨$º#ê²¹Øv@‹½¬;zгÊA³4V©yåVÇJÔƒ®œ“ç;Ë¡ñ¡§÷Vø³ ¦’·®ž·Ù€n+˜õ¸T¸ˆìú‘k^ÊkÞ8œ¯E¹pHÑÎÞCŽöZƒ)f™€=µÉ²zô€† {ÉKÏME²fo%H*l$°Õž éØhb# ¬%±Ve%­z>Mf¬¶Fœ\%'›ŒÎäPΓ´UÍ4`Ϊ¹Hgf]ðrº†áÂârüvÉùøj g–Oö­Ãòy_g@àrPÀŠ  -ƒãôrr´ôaöà<Å¢^RfÝ1dMTÒëÐ0/Pñ£R“Crzõ€Öâ?· Z胥I,õÝ ‹íc£žµQÏaÖ½®-NA„èÜÁ36Š÷Ì@˜Ä- mŠRõ]=Kn'jMr;ÑER‚M9O;k%Z@Ý4HŠ–±Á&ÎÀ\ \l óž÷ ¸ p­hÔT´˜Õq ¼»ï:Â* [«”š6ê$gmø{e_ÍbÝó„[àw\2ñ* ‰ðR…—¸Ô‰+ \¸ŠÎöÆZÍsއD8$dŸ½Ú$Úƒ¢GEŽ欜§„N Ié$˜Ur4Ç‚—OZç;¶´ó€è{”³†Ù¦na”žä9Nz’}¡³[?º§|vŸçë è\¦ År cÄÚØ-A!gpˆ——fѹYÏ‹£”>Å;‰w±£ÕmÃAÚé)®æK÷ºªËSõ¬C‚®fodßyrZÕN]Î#ðA±%0¨ÖZÔ S¬”»M¯c‚U/@i37j¿^R ô®uSkqì!^ÑM„ƒy›Á,æ;{@ Ø/áQu \£¼sõülÆ Â Ê­{ˆ[D®P.ý‰6ˆ% ex9œñþ©rÄæ> zKï¹`t0ÃâÄGxÁÄK&.ˆEA¯¦DØÛÆ.!»d¹~ߎ¾e[clÀ\25<@"Ú-¸€¸À:Ey’×Ð~å²5`ÎJ™èÅ…M{[ï/m·).NÐ@Y9yœ¸uýlùçxýËÒì®Ën…Ô;´æk¼"µ‹Ìö ­Ú‡#þ!jçÜ9!ÃÙ;ØÙw˜ÅÒY´Ëɘ+ bõÚÞÏ]@;ÏÖšÁQþó¾ Òô|žOd@¡ªæ¢ž½ç†*]€m*åB×~jý6|\• ÷Ô2¹šî¬?©8-sCN25ªr¾¸QååF"תÜ`#«n\=߈r£z‚lQ. Ø“)[À¦¼Š ¨ä´º„ÍDMMªùÒÂ#„;Özä¥*!|I”/ |!$^ÉÄK \ÉÄ¥.db9â£YêpÖ½)hukCÇTÕóä_·'!B\¢Ýé|"€, ,д@ʸ–”Nàüd½çþY.‡ÛÕ³xâéƒÎë è]ÙâЖ»ên\QÐÔÌ%èc™/×:5ö†©ç9­.{ÏîždH¡k{•YšŸ©çÆn¢ŠÒowj=7²½¡±-Nñ o’$" B£œUÍâ°âæÀ ÷{Γ»WÞs#7ß·Yƒ6}!‰.Œæì5ÜÒ8ØìA9€LÈ2˜zΊy#èvª`Þ \ÂawÀ p#6…ûÚo_+3HßGº%zúÇÄ [D7(y6UOM«íR?%SÕŠÁZö,‘‹¤¼RøÊ—Ò_ ¯Tx!ÖãDx È}@<x4õÌ®QÎ'êYÇ„LngH@ãéVh·B¤L¤5ï<4Óh}+ʹî^³ñÞ@œ÷Êy߀s¦˜Õþ&C#·ÜÎÊ8[ÖÚÜ>ÍÀ›žpô/‚«µ‘=è ,DNõðÀ d8{ÿ Õ¹0í©KµR»"½‹áw4%-³„š}É|¢p(KUL¡flõ,%´‡ål&2…2ÒJ¦¼O««êÙüg)Õ‚K÷£‡ –;,>VnkäÛ4- š}çÀv‚ ©9Ï<,à^ ¼·àk‡tv†ô­£nl‰²q¾Ee‹²AÃQ«˜$tH ~U4Ú`€ ³bRï'Í I\EôUø2ð¾à 1q1N„û@¸pŸà!¡zÞ»z>ׯo ù—22|YÁ¬ Wѽ)çÔ#©'aj œ·¶à°UÌåèÔfk² y+,lŠ gu+m‘áû6æûsG]g@àÊ ¡ Í 7­„ÒÂYÅ28:i8ïõp@ˆr¢ž­›Ò\ÉøÓw!w½”joÀ{ì ;£H/ÕÖèƒíÃ{ókµ7J_±½h¦Î”r™5(¦¢'E&ˆÁšÊ-U\1«5ÏKfq )‘34²¥æê¹WXu°™µ”7˜Å±\ô ÓdâóžïÒw•‘!}‡ ²jl-ª"Íí *4¬4 y å鳎÷Öu)%Ö!ñQ/|E•Ÿá'\Ü+ú(¤{ÜGô~BúÝ„îbUÏûä©t ÒCÝ„-u*íMkD×hZ!i‰¦%2yÕF9O™TUrâ)0ƒô)˜5û3ŸCŠe‘‹ sažÜV|?ô3Pn-Êþ3œÛuô®|¼Åȉz¦ÃõÑ](ÖFkVW£Ân„ÚÉ×6Ñõ<·7raJõŸÕ2ROgBõC²ÅQú„™jn»× =A@û&â­O‚ŒV˜¢“Û“ VÑ=gõªr±A° ±îk0ígP®êùÝ„ ›ˆ®qõ,ÞkÃÕóF˜VÁ”ò½+æ;™ßÎÀ¾Atã`¶*åÂ-¿YQ6¨®Íâ 3²íŽp<´iƒè~‚Ý cà**?¹€ŸBøÒ#tÊô(LÔfÚ>Nî;7žsVÏžëL\@…v—H¼@ÓIhÚxŽöÉÖFZºŠ^”mÒÎ&”+ŒIj±¡b¥û*g·x¦ÿ³H-.Œ¹_-.œU~kP4Ȭ¸07³›ÃY?ÈgHçuô.A"tb@¬ÙP$nVÑb z–½‘ýçŒÛÀ#Û¹­ºM…kU3y’w‰;ê¬ÄÜÚœÖâ”2AE(йíE­qÞœßyZ i`LcJºt‚1«å¤LIHáý>sæ¢x‘aì Ì%o–‰g]óDù¶WR.(,>3`U˜”Ò¹qNÎh>Yg@ÿ#V¶7‚JQÐ!›­½1óBæê¹Ú‡ÄƈƒîU¸cjngH ;:WÉ´ô 5Ŭù¶\ ê zZ£ñô6¡7Á*^îr'¨O×⸟û/ò/÷[~JqP¦Á+¯±Â¾4R@s–ÆÞ P8ŠyËà ˜® \AºBÓ¥«æ-’¶¾_£ºAÒªT:Ž©ç„£ G­¶u©eÑy›ÕZlØB¹Ô´ô¶i§h/¥v‡s;ò»í™TT´€HîùÁü‡”¯?k1×и²(Ì-Ž| –Š=B@[y˜å>çšÐè·5Ê`"o/:SÑXvö k½š½Q•®MºP«{µ¢™2Q|iÅ.½Yê¶FÓ>ŒÁ{BÌÊ9«f·7t28g¿Ù²6¼9¼ú-Eß«U;ŠM{)v†:”刈«é0A'È:ÂJÌÖ(Æ”ó޽äÞ<:ŒÊmx8hGdÝøÍsõŒ\ ÒÓ†øÐ£× ×Š^ éÞ éÀ»€¾ð6"o#ò&°x×ó•Ÿ炟 /ø†C¢ÿáß>y ÃTÛFO4 IVİ…Δ2é…í§+ˆ/`ºDÃ%.ÐtaêyÚ qEJ )’ Û„CR÷ÍʘT™<0X[Øx´n ÝištOm;Ò´çhjX¼Ú[‹aCn8“¯ «zÎÇmEp½¥ÏÜ/Ïàúó¼Î€þ”õÛ¿ýÛ|ûÛßæ[ßúV¹Oð4;i„¹ÉùÌ~úÀÜÿ¹UТÏÚýçÔ<¥o!HƒGT%«0ÏÅ˯›PÑ…26+i•ªœÛªAEí¼õà®t×K%[£UÎBHÝ_tê^sVÏbÃ$!š|€ÔX2"2Úßhepfõdê9ûÐka„G™ Â*ÆóÛp 'Ê K”6H«Zù6ngÀåWèm@¯]5¿…ðâ[Ho!¼¦7Þ$äM$¾‹\ìz¾¬Ê”¯ià‘ _&òSô‰\ŽÈñè%Ì롽"¦µYY5—ýe£¢M=§iÍì¦Àc€]˜ÃyVËRT³[+ùPŒJ7Ý Ä'›—Z–Ó4éYõ·¢Qì}  ’fGŒ¨ºàÈ®ŠùT=ûÑèÏsVì¿fîÊ,óî¼Î€~ïúó?ÿs~æg~†oûÛOþ-„ì=kο¯PV(u¬Å¯«r{Þ{·ÌÎU]xs$*g‹“—Õ{Tó ‹ÅrJò¼b(éR$wµ7l›+Ÿèª9S¶7R¬AÁF9çKç!Àñóžsƒ¬¡uvkÙ›Ú˜Usa3‹zƸjîs~Y ÚF‹zfLÍÉE輕hßlª¡(çœN—¼íGPaˆ5S£*gaˆizF9j5kC–Ñú÷€~n}üñÇ|üñÇ|÷»ß-p¸º¼â¿ÿoÿuIŠ0{£‘¸Ùê ê>´%ð·ÈŽ]öŸ­9ºÊ^Å5KÆ@ Èâ=@êS3óž[_$ëÇîêY½Õi«ž[]$¼ÝiçöÆ|`@ÊöFÒ¨£¸½!bòD}]R»Ì×g”³Œ6îkXêÈÊ!½Â¶%£ø(Ö æif³5„ K"+uæ:vEe ã½åEߘy‹Yo Ò¼¶á°S..;åJ…—x•:¾ ÞNT… Ž9’4ù•Q,<£!a±…¤k¬!Ó Ð—Húˆ0~Ä(<„ÁÆnå6÷A¹¦ wÍv˜à•I:ˆk/6|’*­¤• +%-Ät†s— Ìa"ÉH`B5yÐ/ùíÓ£ƒz…xäè§õèò"ªDg²£¨f·¡> ÿêë?Ë¿úú×AáOþäþ§øÿX¬3 ?cýéŸþéìkâ;—˱vðkVÐ1?PÉC‹Šv8+Ê­ÎÈêY˜³?º½Dns”ù‡íkÈW›Kn«ªAbnŒ4¿`Í]õL÷Ìí UÏÍÎÁÁ„Á:¨Q몷PWÎ ƒ}Rz #6ê{D=0˜{“NH,#jM:`•/Žc)L½°hWÌ{ó«9j@X6¶FVÏkÚI²:®Lš^«µ¸Ëžó»Æâx ¼…þ^XNÊ6—Q¹Tá…ªZᯮd"°#éŽ$GoÖJêlo,íué–I®€WÀ˜Ò%ï¦È;Ëäãf² 0÷&x ÊcöA9Da væë. ¿TäBH¦šÓ¶Ô°¤—u3Ÿy²Þ+I2’08§ÒýûIØx¦›[Ë"è¼½W$–ÐvôÌÒ¨ÿ¸Ðì«;â>MBù¼¯3 ?p‰¸¥,Ôôºg„oRJ Ûp ¬ã¡‡ IDAT¨LrQJµ8  âö;rRH«žE´ØeBxîb“½ì‹„œûÏù„NÇlÑ¡R½çÒÉÔ‡ÀjB°Ñ¶½Ö€`ïîRª0Æ”³$Ûk˜ìÌÚlo8¨e)Lƒpƒñ^`¯UIF‚ –N§«Ì5½¶0.Ñ;)míôFÍÞxgYI_ ˲VØF¸P¸T¸R\A+¯4ðj‚K êwLrÕrPŽä¾€f@óñY¢X RåŠ]ñN”·“òV„wbÃn£r? ÎLXBwi5-áRI—åéÂÒFIk!­l¯ % ‰Ô%R ÌŒF”ÑN&:5jy®šÁ¡¬B¡'bù=!×®”ÏèŠ9Òunk¨TÛÍ{zð>8¿ç#õy]g@ÿ#VõÜ M…¤™àÔM²kׯk[¨øÞrñl6[½¢´Ÿ™³Rc­z®¾ YngšÏ27ª‚N.cDÁÇl©÷)Þ³ÕUsi–ô+iQËsî¥Î¡• çÖoö=!AÐ%Yt(³÷J…ct8«UWïö’¿ŽD¢º:e…XEKcql­™Ñ=è-Ö=éËØ¸QôF,‹ã­Ð”Û¨\¨p¡¦ž¯Ty¡ðBá¥Â%qº%Yúp rú@b‡r‰ÎO‰)êĂĆQ|"#¯^#¼„wÁ,Ž»I¸ÖènŒÀJé^ÃK%\INö \@Ø*a+fmd{c¡¤a40;a$Ž~âp8ëD:Ã=‘šJFÐP l[súVËÊij^­p«(eE<Ãhvà» i¯ +Œ›ÐàÐeýK‘ÜÙKËAW uËÊY²­‘Ÿ!«;¬[šW§Âجҳj ¤mlPš[¸ÖóJÆì%¦Æjq»EÌI¬åæybM«3§»hñžËØ­d“Å{QBJdƒ´Èˆ– O?YDS΋dô¢nǘ¡\•sVÒQÐ̸6Õ,+ƒ³äá17‰V´÷!Uo­7 7B¯ “©æRà|áp¾*{e«¢^£ú™Þ€¼Eõ›ßr²FûëjO" :ú{név?äÈß«òCOTx„wS0ÿ9™Ï¬k¡{¥ô¯„ð²V‚‡+%^HN•vkCIK% S<eO’If½è‘IF‚Ž$™Ìw&•ù9ØÑç!âÈ¢€Ys&2œõ5è[BzC´áZ$¹Gt0Yß L§$޽&~Àÿ Êß)üP„×*¼M=»(Lk¥ûH>yñL/”x%¤+³6¦ ˆ[÷žW£)æx`bO=‰=‰¬žÇb»$Ÿ<™Á t éXx¢`íÀÒlOT³A9¨¬”XˆM¢x g²˜i"„³Ï•_“žGªÌÖиL9¿çßÚ‘þ@uhjùîlZXAuŽsÓ¹!yþyÙ{.áD4YcšÖ¬†¦šEfžHò eõžÝ ÷…vª>28Kµ6òç.yý >rˡ܋Ò%jêYdBÓ4ƒ4!!}°>d Y0‡s²¸z†p”€j$°YÞ°žu´Õƒ/¼Åäwz'¹)4z'Ȳ8XaÍ&ÂÆá¼UáÒÕó¥*W [èõŽ&Qô5¢ojóƒÞ0‹&FöÖ(ŸK”‰²ão¥ã¯5ñÐÀuØm#¼†/ ò˜^)ñ¥0½Tâ ±öWfmÄ­2­&B$Ä=A º38ëžI„¢žG êD’ :Y9˜—$›™£‰A<ÑR•Nt™È@¶Ü{-M¥õÒù¨×ö˜¯KEÜö 0ÛË“Ç~ž×кÄâo%@˜Uk†cÙÄ3É‹4Ùþùrš¢¯çÌùig½?Ô”¢˜“ûÕZiž3HBý&iB@ù5)š?~ÙQì'ÞsµP65£ mª¸xû6ëAZT3Œj}’ š¶nJè#guHc ߎj÷'" WÏž‡'+¤ ʱ·šï ç{»­ù¶÷!íGa%Ê& U6 [̓Á Η +=Ðéê`V}‹èkTß8¨ß¦·½ExÀ×~2ì™ô†Gº"é¿àoyà{2ð}Qþ>¶‘ñ*ÀGðQ`úHˆ¯”ôR˜^BÈî.•xi}dꄸ#ò@â‘ÄÎ7SÎÉ}çÄXTs+"+:V+óRÕzucµ£Cã9GmÔr;Š%×’Ÿn¨•¬‚¥TÙæ«ÇçžG{—uô®rœµw¶AZŠò¼¦ÐU³Å!%ÿ¹¨hÇdÎ[PjŸÒ¾)³šT ¹ Å{NþìBñNzÚô£ÖkCó^\=k溉NàÙÒàAQëK«Y‚¸‚ÖÆ¡œ8H¶3 ÌG’v‘%"V»,ž0-Y=CmÈ‘›sxÃhu8‡a5)ë`Mó6˜z¾Pe‹X;…­*Kv½q(¿ukã šÞHKzé îýéFV’0¯Ùß¿å!ìø|‡ŽÿK6¼¹vWòѯ"ò*¡¯ÓK±í·6¦ËD\MLýžˆò@â‰G"$Ý“dGÒƒ{Ï#ÉËÌ;`I`CÇšž5ÂJ••¨ƒ960ªt’ˆ) I í\¬¤–ÚÝö|y’ƒ/õ o{š™X§ôÐú¾Íçsý¡+ÃY`õpup"žkv—zª|Y§aþü¬¡Šñö©g$/{ûùÖ±T¼ó˜(€Ä¼ïÔ4?%"R37P©}6Hgõ܇lmhtÈyxLjuPûO§ È€MðnJÀ©, Žˆmâ}Ž&"Az¢.ZÕMG…3Ò÷v[ï•îâ£åh¯ƒ°ŽÊZ… ÊVa«ÎÂF':}@ôÚ:&å$i}é5$³8HŸ@÷†;°'¬'d aáC‚QÒtd¼àþþÀ¿ÿëÄÿþÿš×¯"úÑ€¼œà*!W ®ú"¡/#éL—J¼„i}$ö;¦xOàžÈ=“>x$Ê#“[=‘#â°]kd+íÙˆ²ÑÄJ+&–„ÿØÞ»ÆÚvÖõ¿ŸßóŒ1¯kÎuÝ»-¥ÅZ¤¨sŽ&æ(/¢9A䘈¯ ±±â FL¸„kÆ(ÁL£bkbŘüMŒ(b„ðpÔSƒÐRz¡ÝÝk¯ûš÷ñ<¿óâyž1ÆœkíÒ–n)vüšÑ9לã2÷Zc~Çw|—/¸^O®†\=Æ›Êqôª‰adM2Gg%É|“'–ÔášÎûÕ3:€³6ôR4ýL¢ΉÍBÒVØs]ÞH›§7ë'),gºÃ“zÅ^É5–„êڞͲ¼/‚¼‘ê—eÊ*’J{&5Êø° ž²PD#)/ÇKGYÃF N œ3êÃŒñ¡“²e ìY¢¤A.h&RgMσ¼áÔYÔ#@k'<&y£È‘© Ó’jìY'ŠŽÀŽ; ¦bÝ(iôz‘5íÖ€ž/°:"IŸeÏ{ˆßCõ ’£­)Òu˜>˜¾`zŠt@Ú£„Øv:7Güßÿ;—.ü(f}#.R]=Pë†Ç Û]àò)ÖŒprŠÑSŒŒpŒ¢´1 zd cÅÓQÚX†äáßÌéÅ¥‹§ƒ–K®ë<Æ{La‚×¢‹rF21ô¼œeÌYrôÅ2eu4hp¥—ÕÒ‘hõ%!Hõ3¿ húiG’8€³¹:0ŸÎËÀXo‚Ζ!…‡|£Và\¸κ¬…”NaOünA7îE–’‚1aµg¯„ézDö;[JöLÑBf‘9‡áašR ¤³¹Ð’`ÅÕ€†‘&yCè«§Å ÑÐ#TcJ”58£{Cg†:¥võ zÌЇ*‹ ”Q öDxdÎ “¶"ri=Œ´2ha˜FÞãsEíe†c„á4´žbå§#ŒLsÖ)V} ëš³!9ë* Å2À³—~9÷ðd…Ç)<²bÅ¢Î#ÎÔ˜s1×dM ÈQ›!KC¤Ódÿ ¤UC2°–n>¯Â˜=M¤hú™Ä*îÂYö¼tòi ­«SpWÁ¹+£<©ÅjzóycUÖ[J.x#œãà_ÊZl•3²†F)ÛšJÎ([} ”Óô|MÖÐ0€§ôeŒàÅsÖ Q‰£PbŸx¼¢y6b…nÒaúÌ e«aèGª‘wØE˜°×±B7s’6úݹ§Žœ ¡þîÕ#¤dÏûeõrˆt&hWk^³È@Ñ"C®[X÷Ø (##\.àá¹ò¨»æ…`drÙˆu`N CšM¸ëðsÔOð2ÂË).3Iƒž`)XðIƦ¶ØÃ:†u,5¬‰¡¯†¾ºjÉ»&µÁ†EÑÂ#‹(iQcŽà¬ê5„ÉŒ-Ķ€a×9þë Ac¢9Χ.ÝÃWT¼tWÙÄùÑôÓ ‘X{œ~®^OÌyUÑ¥°‚ÚĉÓD¯°öò.Wõç~ùQÊ”À\u R±çrÿB©=×zœñ”ùG#qj)`EJGIt»dЉ=Ç£¦z¼$oä¡Å›,0çÈZ²æ…z ÀÇiVr„6¢m|jé ¾"§‰I‘9Ë\h=Ä.ÂLŽÕTëA #¦£¤ÑSa‚pzŒ¦ÔAúµ'HköY³èšG&pö°‘!›žY׳g-”G¾©Â%QŒ Y;þm' ÇQ&˜ªÊA}¸jF¨œâÌ FNJÝ’9k*aX“´ØRaSÖÕ2Ç@-kØs×ûÌs¬úd•ÌÙÅd`˜!«jB²Ïäᑵ ¦…mÐÕVdÍ9¥Ýw<‡¼šÊR ˜Ó¿þ½9óýj¤Žz4ý4£ž)JY·.qx®¬l[cÎ,ŽQXÊ7.Uë)•µV¹v8Û%¹µ¬T/£TÇcmꌧ*óÓr£:8Ûº¬¡UjÑH*©;§ÝÐHhJIv[©Ý0Ó mZ«çNµÎtgObmÑDø¸à,©|*H5´³¨dNæ:H÷ºx càÕcУPµÁ1JР…#4#]ö ô³X,탴±®°îaÃ㇞“#ÜÈÏÀŒãWmü½ÍÀOÀ æÏNQÆtų£–ÉÙAØÂ±…adž†âbYÃÑs†ln1SL=Ì:3áŽcî—<²´ðˆ fÃb³Ê]ÈÚ¨´ß’Fi`˜À9ºE¶ì5šÓ–Ë༾ñg‰_‰zE^C¨«húiGdÈZÁÔ䳃µíÎeÎR{·Š%9›Äž(kme-Ùsªùר‹Ôºþy •sËj6±4 ˆÿ>Ñðnj– : Ç ì9µÀTôÛ‡ýe¶œœ$™¢Y(µSX³#²â”8"ü#ŒSI*8´qPÇœRÞ9ihvHzÇJ¬T8ËžÛ¶À„NT=Að„cÐcàmÏ‚GbßBß#kIÒˆ±êbÖõYϞ˚ñžÇ3Ïc(O ìŠ2‘bà;¨·ñ\š‡ßƲNPNsŒº}T°fÄ&–‹ä\.`ØVÇŽM1lªc] CÝÂ‘Ï fb‘‰ •-ÉŠe´FýY˜C¯@™HòÇJÆ…a´š`Œû3ƒWÁQrf­$ Mà\CèÈ%(Wçp]l¢èg²òC”6$Ò‚*— ±æ ¨C”M+’r ÎZWLj‚µÖWÔò¹HªÚXºŽÔäšæ\מkh^Τ­:ǩƜ† F9wtYwFc&‘¥š<ÉÍ<…Ôd ÂàËB NÓd¨qJ ÕÐ5h_d”ç=Kêh™s°…¥­É €tèjО۶@£a0è)$Nà,§Ð+ k¾EûZó@Ñ¡G†5ZÊ>ÊÊ®*»xžŒÇQÏ—T9¢…—Øè{A¢Qÿ>Õq“øYQÙDzG2¸Áx®G¸(† jØÇX6pô K>uÈØaÆq˜ôÔ¢“ mèÌ! ¦P%öl Ø.d}Èz`z¨ï"¾ƒú6b’»lt–õ9Þd±¸#0f§ÑY'ž>¾:…Ês®<§$2•EŸéYiúL4ýt#¡®¼F…¨ZsI ©;¯QKÆ·k›$•œuœSœ›Lß ­´À’t'I#Í1å7«lN¬IF’¢%8¿=­±å´Ä<}f‚{‹ÕZ«¡‡ œ sÔœ†1ñ.2iGpz2L(óZ¨ÄÛjÚˆ³±µp”™ælŠÀœÛþTÍà!AØShQФONQ=EìIk=A8AÍi+Ú3H/‚s_CòÀGæ¬Ì»Ê‰à¬=ï¢\å U.‰r å Ëql"lƒl¢.º‹û”Œ7™ƒŽ=°OS®G¹^à×Sp†1lGycP8ò‰ÁŒrj‘CÇ™tôÜ–àZxÄf¨í#yp™ßC}Iæ…Ú®1èê3¼±Áb˃ RTdÊ9W¬9ªåé«ñHåÐ)¸RÝôÙhú™†ÔžˆV?'m¢Œ)$i½uýY+‰£”6tYæ8C³•ÔµR¡x¤Û•÷aíè‰ÝkhN©Ìjt¿Nâñ­ÔôærËεJ°2 ¥°)±™´·•ë(4yx¤ptñqúp°h´—áCßwÕÁ²¨@Ú8!h¥MÅœ;@GƒÄÑbAçš&)ix `=‚l]j༦èZ| ã혶”C<xöÕsE”+ª\å²z.IƪœJ5CÄn¡º:] ¨ñë§sðóðû“*'dî„õÜ ðB„E¹!s\GÁ† ghO r\ §NŒlçÈžƒGVdÏ… •ùò54«´Iw+ÃèåM†ó†…ç…✦ÂrGåt*ZÅdRþý ¯a¤,r\<–_›:÷y¾GÐßn¬ŠÅñôªnñ*–\ÊÔLaÓûåîj»4iggålÊLbÉ¢ëÚsµQŠ$å}eê8/Éá0ecbz®1(¥Œºî7¶R Õ’\ÄãÀÙGÆlð†7¹ø-µdxrÕ@û-$‚³Â‚ ÝÎYæœmC9.³Ò] àœ€Y¡:Blë1’ÍЮ} ½ÊiŠÒPñ=e”+‡ª ì«²/Êž*»âÙUÏe RÇLÖ1:ÄÊo7¢:D´‹úVüÍzÐ 8‡úP‡•)C㸨ðnå&7Ïqô&sä#‡œ¸ÎæÌÄöê;ˆÉÂßHàÇàZèlóǰ޳ynvÂ- 7ÐÛÜ1¸=qÁ]öÔ!£ðÈØæƒ:¬•¶^µU [Õ‚+‰ÁrÌ)µ% kJ:³#00§¡Ö9/‘Ü£’Æ©ÄÞDP–0À§dÑ  !%·”…x-ªä`È(öS„)ª*ž€L‘ŒÌÎY Ýè{Õ?Orå˜`huDçBr0-GXœ¬c5ó/C|çL×ñ¬S˜5vh9™ÃxóXÖæ,~t™|aùž–òâl]8b ÙHñ#°§ ”£´1öÈ\Qé!­hm¡f q›à6P·Ž¬Hê»Ì¼a’zWœ²0$Îy#ö®DÝXÉÚ‚mƒ´iK¸hæ|¦ãÛ‚š³f´µÁKßšêôn:EÐçÄ¥K—¸çž{xùË_Ž1†áp¸¼‚ÔŸ(5ì]]e9IR¾Sßb)9HxAâí^]‰šÀ ƒ¯Ï{^êÔˆ’.eçbRN’×âyÕOÕ¿'݆Æç† 9j¿Aêˆs—Ê%´×ô¹2LÍE<Èê ” , ÁQvá’‰\;ø"Öå KL0‡¾o„Yx®SDfáv¼cŽE;J€»QÚè)® cÀùX•#©´çQöÕs ÊHÛ =2]ÃË^œ×£Ä±×!V×ñÇ‚ß/Ðý98–Ða>QtÖ+C½ÈiM¡pŠ Ýßø™à&`O3vt•0 »uZ;à¶Q·‰˜­Îˆ‚ n€3]&V˜:aj”™•3Í….Vá©R†Í”¬#dÝåÒèóúV¼Õ –ô׮ΕÕÿªÄú „zjÏ{€~ðÁyó›ß¼ôÚ+^ñ :wÞy'÷Þ{/÷Þ{/·ß~ûÙ—t¸Š(]ÇåÕÒÝ\‚ÒÕÝ• šêÖ¯êZ\‘7ΰ÷jG©ö¹^¹±Äžkwh/¯æí%™ã,{®m˜J=ʲ©`V«Kà,K !±f‘A[HÞÑjñN0…â 0ÑÜ~âx*i#éÏá.Û¡¥ålæ%“6óàèÒ6hh5ŒÚ319E[8ÖÐ(‡iå@áH„¹®a¥O¦}Td:@%$•uT6ðn€µÉ·¯ø= {ö ²oÑ}Aö-æ’aûÑM~ªxyë rá>€Ÿ†ßŸ ~ffÁ¬A~mí€ÛAÜê¶·vuà†˜]—‰±Œ-LLj½+%{޲†WÅ‹·!ç\û¶T…å8 £mq¨„àJèNÔI#eË»5LuÎÕï,›hú–[nᓟüäÒk?ü0_úÒ—ØÞÞæË_þrùÞÑÑÿë¯ÿDyém·ñÒïi‰®Ë37–Stu †JË+×X•“Ó+ú‡Ä•õL^Xwyö´RŸƒW^(jà\²çÚ®Rb°Î»ËÓR¹ŸV}à+ò†¼šR,E‘²Õ\²šåV†W N0¡rÆ6CÔU >y ë ݆Ȝg5Pž-ÿ,‹ÌmK²5LîYÒS|WY´B!Þ p,‰={Ž"‹>R‘¡´É¤j˜§aÜL Æäà¬Ov(ø} ³ý¯þ ¸+Ùµè®EvsÚW\?íð¿é·™[YwÿíK_Â^ÞEì µà½Áû/k!é—o£&s`ÎÛH\fÕm fHázLœeä„Qç©…‰WæN˜;enb}3A+ÎcïŠïƒ‹í;ŠiKÉ P … IDAT}&×x!®§|=ª•t9^º,“î:Ã`KWίÝÿ5¾öÀׄã£#šñ¼èóâæ›oæ{¾ç{xË[ÞÂÞÞûØÇÊ÷Ö7ÖùÙŸý¿X‘«¨ÀQV—£žÿ;¯î¹ô<,W^Ê(.·—SÉi¯aí8ccj—Ž­µçÔ:n5±é°•ƹÎKì¹¾AMwÆ„:ç°vddT?‡‹U-“(•xi¼„nÑ)Ë8ð…`œ–yȉc=4té 9ÏYåêgdkñ44¢´ ÀÜí*¾kYäÁ²ð-H œ¨0“‚´ÚCã@OIÁ 7Q¿†?Íñûà÷»~W°»Š½,ø',zÙ’íYú§7j‹[Dy – âɹ™Œ9–!âNÁ;T J' Õ Äm!&óRlƒÙÂëv±ÉR#c§L­0uÊÔsÇq’)y_ÈÖ¿&øžâ{‚ï*¾+©4“+¾¥«x ŒT”Õ¥¸.e¤“+L€ ÕîV+¥E?øÒó²—~Ãßþõßžûy>FÐW‰ßüÍß|ò’Q¡i«Ú2%8žëU9»z£†œ«ÇM€]ÓEž×YJuÜóôç:sÉ:ΖUÇ}"çdÜÓÕÄPs´¥,§ZD¢æìã§Iâ¥{8‹z À\`Ö‚dñ ›X¹áƒÝŠ mq sDæ¡#/èâÏZ -›škìY¡«hÇ2·ÑgV”SUNNU9E9AaXH†h+aÜ¿jœx?@ç=ôH¢+V9ï*Ù‚¿¤ð„Áîe\ðŽëð¼ÏÍ"܈aÀ XÇp‹ÁȈ£O'LyÖ Œß޲Æ¤ØÆ›Mœ2r-Ž áÄ(§N"@kÐ]ͱÈÀ‰"-!*ù@00ýZÿJ/ö¬tÀ·Ÿ{¼u˜hNfpxuˆ8„Ðî_1çê4 žña±å¥YËv)ÏÌê^¯‰ @;qÕ¤`ýuY^½¦÷®®µÌžW7:geÂÊ廩Ì. ÕËó?L¥˜ÔTŠ%s­}†rYªã‚A=‹X«É«³eŸØ½>ƒ¦•ëóƒ3ð¶fÆ¢Eûð3ž¨;?Á¤?s àJ;ˆ³(©ípŽP -ClJ ̹£%H»vÐcGÀH5ú–ÄI˜ôT,ª-²Ð4À™>*kAâZôÑq =Yód»œ/ ú„bv¡{*l’qÏu¢\r£ Ei£¨¶Y#82¶Â] ž.N‡ÙÂèÄ]·Ca6»‡ÎpäàØ)'5pGpž{¥0‚t”Öº¯ƒ‚‚_S|_ðýÈš»Šo`VS 5—ðÒ©ª½bÍé\5jÈÅck)àê’œ† $pÕèÚ²òzžGÐÏ$ž’´Q.¬nTÇöz§xx­†žKà|V¨>+k„õÊñ¡¥¼×­k)9IEˆ+¯Ù½¹öí©ºÁ–ú¼Tb¥;ÇA Z¯ÅË*Ê]úËÊmâÓ” Ãð„\kÎ=Xã" Ï©Š¥#sf¾e)Gz´‚_`ip-ej’¿lçÀ¢GÃgq²ž•.ª=Tz‘9÷C­³®¡E=üAg dWÝô²â/ rEiïÃÐ ›VÙÌàÂ"ã¢*®Ö™Egn ¿:Ê øn¯áÙıƒèõx½È¼XçHröp`”#ÇF8µ8ÏF‘®ÐÚ„|ƒà>TÜP0k!çhû‘9·¾åƒC8s †E3Ôa$ȦÔB±d [æJpV%­1gE¼TwiÉïš>•Z4ýLãÉ%æÚ[ò¤„ JžÔñ±Ž¤¬lP®rve‘ªb¤’4’„|ŽZQÅ+êå.é6`¤š§P›«°ÚVñîšImiÁ’<Ë‘Ò1è >l™°¾2fÉ|˜Xgñˆ†Âh!0¼ ¤ Äx4Jçuö Ò†"³þC¡2Æ–fàc”‰ ÕÕœ»œ{‘9÷CMñ¬?ü¡¢ûŠºÁyWÑ]Áî+ ¬°ž)›¶UØñ† .c[•L=Áɧs<>þîÂ݆×.*`t'ÛLýû®ˆ²gàÐJj2ä´P¦™07 ]%ßZ[Pl)v]pŠJl,Ôì8LËa˜áˋů ¼xuxIÌ9|:«BK,m,m$æ”<‚rÉž5–o¦ÁåÐèxR6®±g¢ègu0üVëP2ØUi£¾f¨ÏêÎéuÝêÊ0妩1¥º‚ˆHuìót’7àÌyàLmã%yC+±”J–˜sÈá§ËT½a<õÿZÊBéÔ w`|ø½…Ñaäi¦56­)ƒêð‚8JÄkã£"Á, ”n¶—ÃLô\ŸÙ‰ÀT‡ÅH«aÔ¿®Ê®‡Ž3¬ÿÌ!)è÷ƒ¬!Ð>5ƒLzeC…-[ªìxaG }¿@õBö ãNGÀ¯‹ø{ ¿7Ñ6JŸB†Œ4çŠ8v½a× {N8,àØ(£ æVО’ï@kG0[à¶³!¤C7Ó÷¸ŽÇ¶ <Ó¸ÌðÌã’¤0IE @›«¡#m,(Ä´Th‰'ö¬‘1kHòŠOl™H§ïGàW£èg%ö-kÏge޳ôúª¤¸|®çõ’HÍyB5õÔÌ™Úë%­ËX[מ5ý³®&VC²ÔªY×Úw®’5êŸe šQ<©µpiIêIfbi×j¼´Wĸ¨9/P¿ˆ ]–D·©˜sÙnÁ™Êgv¢z E™ª2à’a5ô%j,’VéÖL]tБA•ä’å³{AgGК kVYË„uU†^ØôAÞØVaÃôu‹] }å *û¨¡Œ£î+19Ø#HVÆj¹$«á’—½a¯Ž,L­àúï(­‹‚ì€Ýàì6³źb`º l«ÀɧŒL1:ÃJç 9+‚’!´ÕÒK—Œž6†¶*-ј´:³*ÖG[4ÇÙ K\楔òJæÑDŒ Ÿ…H@´W隬pŽRqÎJñÉ“ê«`¸b PŸœ§5F™Ðj™ß §×/+m†Õ´Ò8Z“Ì‘>O=‹X›œs^™‡§4Hý/˜%°±œËî• oh,ÿ°>0úåBéÀ¤Ûàl0^™è’Ïl´4±äÏÒF¥ƒÕ4/²gí¢óz*œƒ´á=Pt_àPi„®¦ß™²î£¼¡°¥ÂšŸÒÊŽQ½‚êelñÞ_AÙÇsŒgRàÕâ´£…gA²+ŽoèœGSá GF˜÷,vGi_rQ0Àî(n Üf`ÎfÝãºE{Ž•1Ž1V'8™`#svÌ1ºÀŠCTÃ(WÍèKF¡‹¡ƒÒVO[|¬E7äéo—Õù¤êk€¬5P®[¬<™nø<‹ Ÿi|Kí9ÄSA"î-¯¬++. Õu}·‚èJÿXêjÿu™£>óC–>C\aU¬®×â-Õa¯,‰•IÊÕÆqF¯ÔâI.,RÍ]Jƒñ2Œ§ªÅKuxñEi©J«}hån•-‡8[k]‰ @Z™ qP“•ª,ª].ê:è4CGA…Ðc ÒÆ¡ ‡Aâ0ÇJ>º&°æ5U ÃÎ ë^éeÄ ~ñ—Áïbu¯9AtB¨1¶ôƒ€£œ0á!óUió àrn8îŠ-‹½Þо^(.‚½nG)¶»f]±ý9¦=ÙŽScŒNp2Å0Åé#s¬.B;=Ð#gŒ>†^¨#¡£†ŽöÜ“{ƒU‰Ó•Ä%pN#ðêÌY«sZ j,"–84:ž#M@ÐÏ,¾å¾¦ÿÆgõÉuËkÔ_¬­´*?¡zY{®v¹ÚµXß] Ôq‚ÞR&ñ¼B饖úØ›z¥t¼HˆTÄXT%Î è(Eë(†Ä†ZÖ(F8ëR‘tdÒYdÎY*”ެ9÷М5ÌQj¾²ÑÂ0´²8rDrŒ†žD[ •–.êÚØ© ŽT'DöLµ ÙXi;¡g”¾Þ²œ‡œ{~A+;ÝCý•ÎÙeT/#þ2Æïbõ'§H6ãÃæEά8a¢.éî—_̔ݞaºiÑ r±À_0-ö‚âvÀm nK)úslgFaN0œàt„“c,SS¬Îð²À¢tÖÈhÎ@ =5ôÅÓSOGB»L[=¹z¬3ÁÛ°0±óEâß8,kŽgžX0YXÒÀh‰ÕZÎ@:ó¥`˜sMÎnÌñÌ0ÉW6ö*s¯9BŽ]rìÙw h…ÌáˆЊžD‰ãH¥= ˆ½,ÂÓÀž8Téú ’àœí"~õ—ÿj/#\Ád§˜Îé*Ò ¿k·Pf“Sfüç¸ÅÖ{\Ù±¸Ùi!ÛlgèŽÇïܶà¶ןãºSœ9ÁÉ1NOprŠc„#èÎ…L±ÌÉPºCÍY—õ ÄÓ½‹‘=G`öëIþ†‹8ú.2è”}b ˜sÔfH{“Ū‘Ek#qÔ£ègÕ TO .ŸXßâ$»^}¡¼\~O—~Z=îŠ@z§ö])1¸T*Ò­gLêÓó® ÎuPVÒ…!ìÏdHS”’îÁ9uŽ'Sëå®ñ ¤ÍR™GéèdXçàHÒ¶f]¨Ë–† À“#ÒÂj´ c—sVmcL…)rzBmìDÉ ¡c”^Liû>J^ªÒÓ‚–Av€ê>ê÷(mhÁY/Cûi0ƒ"tõ­ ¦«H;L;ãÊé7øÏ“!ßÜ|1fcÓñÐ÷0ô°áÑ-Ûö¸µEgе'89ÂqL¡ÇX9 à¬A{ö2%Sè#¬KΆ¶XËÇÖ¾zzâéxGî ¶ð˜ç®f¹Á9 Žöé¼  ŒÍÃ#åt%ª¹¤¡>Þk”<´è @ÛñN¦s„è’=Km¥« Öµ•+½yy×çUm¤dÍËã&¬]Ú$ê!åô¼ôúJ&±.g¤G_î¦>ÿ£6E/•W•Fv,1úºAÀ2sö ‘-§Z<Û_Œ ©¯¦A“{œ1¤ÿsÂXéÌ ÐÊû°roƒ´±¾ÌV'cEO‘ #EON•l-/t¬Òó8÷U¨°–)aü šíƒîƒßG²+h”6ÐËá½Öé{th‘¡'*n¨k` ]8Îà\ž ­G ß„¼ ítÚ›!ý9Úw¸|„“# Ž1z„å''œbuŒ“0îiMaKZlÑbC-âjg±¬©£‹!Ÿla4›t™s\ÔÄûÀ„1`2Ô¶ÊgÔ†̪¢±^C­¾—ÌnªìªhúYŒŠ?9h_UÚXeÕW!äzîŠIÎXêó_éωœ×вü™r(“®Öâ«úsÚwçºI€z©z]TJNŸ#•Õ­Ôz؇jêOÝ,±ÏÄú0‡:µæg`g¡HW³ÿ°˜hPŽü,ê[07±t$ر=d¬´aH×BWÃÒËšBO¹NŒê¢û¨î#þ ªW‚´Áeè"½ZXÏ ‡Ùìºb†°è{ª|c.<4ƒq1EÌ7‘Ö´ÚshµÃPì<ÌÁöz%#œSpŒÕÀž­8(;Úb[ZláØTdž8Ö1 q¬aéyG>·d  hg{dîÐEеpˆ3ñkS¶iØI*<¾’õ¡Xª¯—”C U@ @WÑô³ËÇ—€RÏåówA‚ºö^õXõ¦”òˆ·gR‰ç1ç²j#}âºþžKmÄéÙ„ ñY’8’ޏR‡ÉpJ;WÝ[sNàŒÖ–ºRb©,Ç£öAÚ™4- YiG¸í6Z‰ÔZ“7T[A™í 5ô{+Ñ!‹–@Ç ]UººÌž;~Õ1ø#4;DôõûˆßC³+ˆî¢Ù!´çÈè ƒu¬{Øôè¦C¶=¬+'wÊ7¦ÂCvmjƒÝkANvD¹êÆx¥ 9Âq„ÓŒÌXC¹ 9h±#–m[%8 5°ælîÈf™ÄéJ³¸,l˜ê_ø m 1á×F³."]TÚH9Õ?zaiæ|«‰KšÕR»©ŠçHÐU4}ãjØúÔ€z™)?¹’XìòžWk¬K¼?Ôzvåô–@ÒÔ<¨¾¦Ëà\±èsŒ4í2òì¤=kë$˜ÔZ 룗Ê"éT‹—¤ ÅK5Ê'LŽ ]¨ àg«Å‚Am`yêóXºÜV0³@Ð[FèdJG¡k8÷Tè©§¥3DOAQMàœôÐ+ÐC×#ƒ ýX62tÃÖC73Æ}Ï•ÌóHáxh&<¤ð˜À‘±xŸ#ÞƒŒÁt³0’ÔMs‚Ú#œ9 r=¥'ž,×i‹ëD¸€eG ¶°lŠcÇšw´¦ÙÔ;­‰C§¦™Gö¼p¨³ˆ *9’uѬ‡d]‚m‡00º ¦…j^³œ Îà%cN :)rªW=ÏŸÑô³O!1xîÙ§+µ]Iý‡³ÚókNlvõ+ÉÁ´UØõU¨v=—Sò’­VlF »®>hUæW“8|-÷˜*6jŸ§îÞ’´”T{e‘xI(™3%ƒ&ó—,C¡­ +&íDMg2ªî•T$¡z—Øj¨Љ`±‹Î(m ºYhaé)tÔ‘éJp>Bô00çìÕ=°ÇȰ@ûYËÑ¡"Cë>€ófF1ôæž]ñ<®žG­òpîyDá©i‡þlŸ™‡ˆÆßñ ü)êŽb•]Z2bKàäÜ m®—0ÄtG ¶Å²EÁ†Zò±#Ú䮇Ì,Ì¢¤±ÈÂ_È´ÃDÿ¬O˜O\ÁÑ8…Ê·QÓÂ{‹¡SVÞ¥¾•óÊ¢SN±ÉVÑô·˘v•³êŒÆP[ó[&Ͼ±Ì¥Ï_1æ÷–v_®)ç奂éÕ•%}i*Æ\& k£MÏ0è[®3çzå^ç‘X÷¡J(ë¨k"¾Ú‰‘j ^ÒC2ð&Œï)ð…F`ÆãcMˆˆE4CHÉÁÈ  ‹™K­µPÑ© ±h:s ´,´5¸…wºöÜÒ£ÐSTÁú¿@Ãcg‚tíg!8ðÈ0C×+€w<ûÖr™œKêyÏ£ÆóH¦<ª°G '›ˆl ¾>‹³0jUÝá¸òk2âzQ^h-7"Ü –ë0\TËNçÖÈ’ äÄÂiÎLÌ¢óðûÃtÐl ɇ¨¬WpßC|78•ûÞ·ðÆâ¼¡0B¡àTq‘){uæt>HHôšzitÓ§RFÐßÉ8KŒŸ"Î'í¹¾œYquW«òÆùÝ3+Ú÷“˜Ò*Qö¨5­Ïž>o”‡²4ÂãL¡®s©‡(u±º>µ4úËF@6a¤€S‡5YÌ’{KŽ'C´…8“&”€žƒÎÂ"óÐÝØ’ k´5°ç6A{î(ävè8‚ó RgÏzˆÈ Ú/® }Á9CÁÙR 2Ž­gÏe<—ÕsI2Ãó(žG-ì“S°\¶bˆÒoCu‹Àõ‡àwrÊxn¸ÉÀ ¥àµ\‡å‚tÇ–üÔ"ax4:*àÔ Ñ´P§.$Õ ¶Ù:Ú"f€úâsìY}‹…³ÆPxYêY‰¥Ñ%[V1óðX¯¼kºŠ Ÿ•xê÷dg×Ôó7 »\šó|^Ôˆ¶Ô~.×.©ö*ª×jI9>)Ayy/±cèuX“YV›Kæ åHÓ s( ÁÓ®bÑþ 8—v†q^­B:.¤½H)køè層?;SI§î•9èL…brZV£!mÅžÛVÉtŒP ,œÃ£?Fò)ÚV¤kÑ^†ô]Ó0œcèÑaƸ­eÏ®zžPÏ⹤Êcx.‰pÂoÖÁn#º…ê:h?Ê3€NÁÏP_€Œéº1´à&náEÆssVp½± '–Ö±EŽ 8²pdÑS‹œ:;tRÀ4C¼Eí’o@k#x º!¥íŠéƒéám›Â[Þ°X©¾s&2gä1¬ÄBÅ´$xDÃY2 £ÁS¯J@ÐÏ Îã¥ÏlË«®q®qõ½!âçc–5è§DµÏè!é‚P%)Y³TlºÈõç‰1/Í\Š·¹aåÌG÷µÏ´—ÈÐtybiH-Æz\± ìYÈp ¤……ž-’ža‚^.J'Ù³‰£e–ªc`„Dö ©üi/Ð6HÏ¢=À¹¯0º³[SŽr€gŒ+êÙ%s7®H—™®!¬ceµ›Ñ‹p •N¼pàGè¢ÿ&10 npð"U¾Wà{pýÂÓ;)00s\ ÇYÙ o8 Ùä[ÐÚ³ºuÄ­ƒÐö}œï°ð–™3ÌM(ìX¨„¦B¯8/åIL¹ ¶ÅGpj=+’î–š€~†ñô³Oo‹eÈ={ºÊ¹Ïϳ1\U©— CÎÈkòg%³²J=9XgкDÐë˜ÇxT‰Ëõw$iCDÏum!²¬ú0¼:Hû¨…,>Rm‰ƒ _DY£rÅŠK0§µ„¢aø|[¡µç ‡èt‚ØhŒ¥§%HKk‚öº:6d{ ¤=2ôL[ÇÆ³¯žýœ3v%0èËÀIt ·²AÆž ¼Ù@í:jûÁ§K hºX:ßG Ǻ)¸¹/áV…ÍCÈNp”¡ÇœXä¤àÙ5ÿi³œ÷ÃÕDêó÷|5Ž_½^“UVåó ¥©äôÓ {ŽZHÅšeyîôÊ®“Ä!«™Äz©‡:…@µ­”eÕék¼â’UKT†,b72Œdxµ˜BHÆ+²ˆRFŽçÁJpk)'•j`Ï- £r‚ $öºçÑÝî‹b{7À©…q½}^€g¨7ø…àæàÆàNsä0£&9jкÑ‹ QÜÁ±Û%8ûbÀؾxùk\ÃmLmpŸ™`´›zV!Ù—õ”¬'HL7–Dw‚æ¬IÚ°>ØfIæôþ;>:|ºgúÿØhúœØßßg2™ð'ò'üáþ!_øÂxÝë^W¾@§XbÕOŒaó7¬Å—k½|XÙ@Wëkœ«=ŸªïàвzŒevWòâ3¹F¡þ\"8ë’¼ñÀWîçû_ò– ¥kYÍÔZ[H'Ž}fR)Ú· ~É”Öòõþ‹[_ü²8ß¿ÒEЛQ ÞyqŒG¨’­ÜÁ‰zê tŠ0E£‹¡0Ae ´,ÚV¾rÿ./Ù¸aIÚ˜ZååH=‡(‡hdÏ9ï©° ¬®‘±†—u¼k༅_ pwtÜåŒâÿy»}#ì¸dYûf‡ÿsôs¼œÙà?"”%+ø™âÇ‚ŽìÚºi_æ:°Ñâb/€ÝB‹-°ëœ:Ë©F…ðÿ^ù*?|ñ%%8Ï­2w‚Ë›CÞòä ÞK=+Šï¦´q)Pq$ãY‘Š9«**ÊÉÑM„xÞôƒ>È›ßüæ¥×ÞøÆ7bŒá~áøú׿Îßþíß>£}ËyøvîŠOs¿e²î©íRê/œ·Q¹‚,m¨K+hm'²üÎK Ö¶ d¸š9]þ^Î-”¦¢ÙeçJ`Ρ;¼ÌTõòÜ#v ¤%vŒK¨Ã[éX\[ÐÔÂBNðB]€IÀºXD§°Í<äéÚ6P펅¾ í*ÚUÆ¢œà9VåH”CU$êÏ’1Ö6VúdÚÇ3 “^×#8oàÝ:þ¤»ÙeÅ]VÜ%ƒñ‰Oð³?û³Üu×]ððÃ?ëÇHñ?ñüÑýwß}7ŸùÌg®ÙqRüîïþ.?÷s?wÍóWõW|õ«_ÅZËæææ5=Ö¾ð^õªWñ‘|„ù|^ÊÏ÷xÞ' Ÿ,®eñ©ë¯xN‡;3{ï½—{ï½—Ûo¿ýšë oxÿöoÿƇ?üaþôOÿôÛ>Æ“ëo|#oxÃø÷ÿwŽyÙË^ö¬/Å£>Ê«^õ*^ô¢ñÈ#póÍ7?ëÇ©ÇÝwß½Tís-ⳟý,;;;|ß÷}{{{×ôX<ð?üÃ?Ì»Þõ.~ù—™|[n¹åš땯|%?ýÓ?Íç>÷9Tõ¿M[®GÐO·ÜrË™[ýûî»ûL Þ}÷ÝeñÙ>ÖÃ?Ì—¾ô%¶··ùò—¿ümçjÇúË¿üKŽyÛÛÞÆý÷ßϧ>õ)~ê§~êš àŸþéŸøÄ'>Á]wÝõm㼸馛x衇ø±û1zè!nºé¦krœþð‡i·ÛÏʹðdñ©O}ŠñxÌßÿýßséÒ%^ÿú×së­·^“cÝtÓML§S œ‡‡×®>ùž{îáÝï~7¯yÍkx×»ÞÅüÇðò—¿üšï»% úiÆwñ=ïy‡‡‡ìííñ±}ìškЯyÍkžµ;ƒóâ¿þë¿øÑýQ~þ瀷¿ýí|ï÷~ï³zŒñxÌ›Þô&666 üöoÿö³ºÿzüÙŸý¿þë¿Î«_ýj¬µ|ô£½fÇJñÙÏ~–ù—áïxÇ5;Æd2áMoz[[[EÁüÁ\³cýçþ'üà¹é¦›xüñÇùã?þcºÝî5;ÞwK4ÝDM4ñ&IØDM4ñ ›h¢‰&ž£Ñtßµñ™Ï|†ÿñç­o}+¯ýëFgÖyôÑGùà?xîöoyË[˜Íf×úc6ÑÄ3Ž ›ø® áu¯{wÞy'·Ývÿú¯ÿÊ[ßúVÞþö·ó|€;3Ûo¿½½=Þ÷¾÷ñîw¿›o¼‘ÉdÂk^óþâ/þâ;ü¯h¢‰«GÐM|׆ªò7ó7Ü~ûí|îsŸã£ý(;;;¬­­ñÕ¯~•ÅbÁ—¾ô%n¾ùf¶··ùЇ>Ä|>çž{î¡ÛíòŠW¼‚OúÓßéFM\5š:è&¾kCDxík_Ë;ßùNî¸ã¾ñopÇwð¾°\ÇûÊã÷~ï÷øÁüA~ò'€N§Ãéééûçn¢‰§ ƒnâD|èC¢ßïó¶·½w¼ãüÚ¯ýL&î»ï>îºë.¾þõ¯ó¾÷½ÙlÆ—¿üe~臚 Ó&ž»ÑÔA7ñ?:>ýéOséÒ%ÞøÆ7žyïýï?wÜq/zÑ‹¾Ÿ¬‰&¾u4 º‰ÿÑñêW¿šÛn»íÜ÷^ûÚ×6àÜÄs:ÝDM4ñ†A7ÑDMøà•T@EäNxãkR†žÂÈA‹‘RE|Ò¿¦~.U´è ô<ô}8ò5ࡵ8÷µpòéà ÒèBd‚/)))(§:èšš^xáΞ=ËâÅ‹0`111L™2…o¿ý–çž{Žºº:^~ù囯Nxy"ÓBßuªwa ‘Û/|¦ƒ¯†ª>¡Tö ¥&6†@/L>8ð1wôïÒZ.”¡=_†F*AS<:Š¢1Ñý=üIGzú^6lx‚ÒÒ ºwKBÂtzôG§N ¨Tj\N÷xñgRS·qéÒ> ‰°°rî½÷3zõšèÜo 8ð1£G?ëìe8“‰!ÿ~—‘;_C%Ÿ0—ÿ2kœ#á”àbBÏ×{:{²c2™„œOr„}¾û„D…C ÙÿÈ :C‹×oÞ¼ù¦×té:áìcg…Ÿ5? ‰$ ûö 9å&“IîåËJCCƒðòË/ *•J„É“' ‡jñÚírðàAaòäÉ ¨T*á•W^±lÅÐÒgå?ŠÒRA¸ë.AAðó„µkA„;î¸ÃÉ kŽ"sЖp!ëg‹Î:{²ÑPÚÀ™»Îpá™  qoÆ1üÒp¢‡ŸG‹cŒFãM¯ùõô£Ïª> »8Œ¨g¢0Õ™¸ðÜRf¦ÐPÜ ÷·! ¥¥¥Œ7Žwß}­VËúõëÙµk#GŽlñúí2jÔ(víÚÅúõë àwÞaܸq”””8bùŠ ¥ÏÊ ÉÉ0hìØ½{“™¸™; _²)mAAAÎ^]s ™‹ðÆÏo8{)²PWP'»õ˜H¢p´ÏQ¡òD¥dsWž¨~éù‹‘GJ÷–J6·#(//,ÂàÁƒ…K—.Ù5ßÅ‹çëׯŸPPP ÑJÝ(’U«ÁÛ[ŒœçÌ„ÊJáï‡þ.ð„—÷¾,,X°ÀÙ+l†ËFÐè`cêFg¯Brêòê85îº_u„L aЉAhi-[SSÓî5ÚAZ' ¦Ó£¨Ï«çô¤Ó\yç ‚ Ø»tÙ©®®fêÔ©œ8q‚Ñ£GóóÏ?Ó­[·vǵe—îÝ»³oß>&MšÄ™3g¸ãŽ;ÈÏÏ—rÙŠÄ’ÏÊo ½.„ǃ–.…A«å»´ï˜?ÇÉ‹¼—uÐDZ”JZQš³—"µÙµœsŠš³5„ÝF¿­ýððo9ÑYYY]çàAŸ/ú¿.2þ;ƒË/]V´“Öëõ̘1ƒÃ‡3lØ0vìØ¿¿¿EcÛ³‹ŸŸ[·nåw¿ûiiiŒ?žŠŠ )–­X,ý¬ü&¸|F‚U« 2aÉP©ÈªÈâhîQº…tc@§Î^éM¸¬ƒŽÕÄð¯Ô9y%ÒP›):gýE=á³ÂIø¿Ô>ÖýxúôécÕõ÷GÐÿ§þhB5dÿO6_@0*ÏI×ÕÕ1kÖ,0`»víB«µì©,³‹›7ofÊ”)œ={–Gy“ÉdϲµŸ—eÇ1ßœœ cÇBRŒÝø¶9zž?W,ßU.ë ƒÁlLsý4‡Qo$åžj3k‰˜A†Ô^Öÿh’’’¬8$ûàÕÉ‹«Ÿ]åìÃg15(Ë1½øâ‹ìÚµ‹¾}û²gÏ‚ƒƒ­o©]¼½½Y·n=zô`Ë–-¼÷Þ{¶,×%°å³âRðÚk0m”—Ë/Â޽ЩS³Ëþ•ö/ª¸ûÌÝèRuNZl.*Ž5Jè¿¢¿À_R Rœ½$»8·ðœH¢|G²`jpNù[Í…áHì!‘D!evŠ`2(£ oÛ¶m „…… 999¹ç™3g???A­V »wïvÈ=ÝHHa¡ Lœ( Z­ lÚÔâeYåYA˜óÈ!‘D!ýùt·H(Ü›p/ þtUò¿Ê'ïó<¼"½ˆ_Jcûc–=Âo_n;p¾=|)ÚTÄ¥?^²y.©ÈËËãÑGàË/¿$**ʦy¬µKß¾}Yµj&“‰yóæ‘™™iÓ}•ÌoV$¯Ž^vÍg¯ðããí;oÅ3Ì“œä³,Ç®ùìÁd2ñðÃS\\Ì3Ï<ÃôéÓmžË»Üÿý,Y²„ÒÒRfÏžM]]Í÷W"¿9‘P`ùr1¿œ >¿ü½zµ:仳¢ƒN¨NÜZ2|}}©¬¬$Æ?†Û:ÝÆÙⳤ¥:{YVa¨4:'“ÞD×w»<ƺ¼jKH!üøöð¥ïÖ¾¨½Õ\ü)þ¾Øî9máƒ>`ïÞ½ôíÛ—¿ÿýïvÍe«]Þ{ï=ÆŒCRRï¿ÿ¾]kP¿)‘P§ƒ‡‚gž¿^¾V¯†6ª|r*s8œ}˜¸à8|³}ðíåëˆÕZ…K:hFl!RXXȽñ®™æ¸ðìôô„Í#æ1’Ì)•ð42ˆ>ßôÒæ¥Qy¼R’y-åäÉ“¼òÊ+¢¯¯}¿8¶ÚÅÓÓ“/¿üÞ~ûm.\¸`×:”ÄoF$LO‡aÃ`͈‰ƒañbh§"cSÚ&æÜ2ýy=j?5ÞQÞŽX±U¸¤ƒ6—X27ÁõÒåûÊ)ø¦¯Î^ôùªdå=”d€ˆ¹tÿ{wLz)ÓS¨Ï¯—lî¶0<ñÄ þçþ‡¾}ûÚ=§=véÖ­¯½öuuu<ýôÓ.ók)?+NcÓ&<RSaÒ$±„nèP‹†šºÙfc¨0à×Ë•Ú]f' ^^b®¶°°¡=ÐiçŠÏ‘R¨œ6­aj0qá1ë±´ž!Òu–“Zø‰þC4‘GR_PÏÙgLò;§/¿ü’¤¤$† ÆÓO?-ÉœöÚåü#ñññìÝ»—uëÖI²&gãÒ"¡Áü#Ì™UUðúë°s'„‡[4<·2—CÙ‡èÔ…ÞU½Ñ£§*¦Š†åõ¦qIíá!î®+,,p©jŽÜrÑ¥êL‡{;H:·ÔÂJ¥¢Ç²øÅûQ¶§Œìä=8¡¼¼œW^y€eË–¡VKóñ´×.^^^|úé§,Y²„²²2)–åT\V$Ì˃ àƒ $D܈òÆàaùŽÛMg¯¥7âçP›^KIŒß6ž%K–ȵj›qImÞ¨PPPà2ÕuWëÈüs&*Šžõ”|ç’‡ŸñëãQû¨Éx%ƒÊcòå£ß|óMŠŠŠxä‘Gjᣪ%Ha—Ñ£GóØcQXXÈŸþô' Vå\\R$Ü¿¼þïÉ“0uªÕÓ¬OYÀ½ñ÷Rs¾†RJètÃ&%à’Ú`0×#èî¡Ý9ó%ç9SxÆ™Kk“K¼„±ÚHô’hüã-ë#a r ?ýè¾´;‚A m^†Jƒä÷8wî}ôZ­–wß•ö ©ìòþûïÎÊ•+9zô¨$s: — AŒ˜Ç‡ü|X´‚®]­ž*£,ƒ#9GèÒ¡QC›9èŽ;J½r»qIÝ¡ƒ˜0;h@ñÕe‰e®+Ä;Ê›Ø×be¹‡œÂOç§:~O8µ—kI*]Ò'AX²d ƒ×^{MòHF*»„……ñ·¿ý  1㪸ŒHXY sçŠ9gOOøâ X¹||lšÎ=Ïë;•JEÍùÊSVîZ"Ìevæ èjÁ$pñù‹t_ÚVž“Æä~T*½?ïwŒ7…ë )øº ýA²cÇvíÚE=xþùç%›×Œ”vY°`½{÷æ§Ÿ~â§Ÿ~’l^Gã"aJ "VktëGŽÀµ¥¶².Eyçõ‡©ÁDíåZÊ}Êw-æ.cM#èn!Ý9ˆô’t~-øÕYKk‘¢MEèRt ¢Ã\i…Á¦È-üx†z¿6ÔþL:5çíÿ%7¼ôÒK|øá‡x{K_‹*¥]4 o¼ñ¯¾úªâ‚KQ¼H¸v­XßœžÓ§‹[¶o»Í®)S S8Sx†~ýHˆH 6£Á Pá%¶–uGÐ޸ݻ)J¬æLWÞº@ìŸcemièá'èö âþ‡©ÆÄ¹GÏÙ]z·iÓ&Ξ=ËèÑ£¹ë®»$Zes¤¶Ëܹs¹õÖ[9rä;wî”tnG¡X‘°¾ž{æÏ‡ÚZxçزE¬Ø°sôü@¿ s:""Âî{HK:èÒÒR:tè@QQQ³ž½J¬æ(ÙZ‚îWà ™hÿ‡¬-%üľ‹v–Ê#•ä­Ì³y“ÉÄ[o½À믿.Û/©í¢V«ùë_ÿ ˆQ´+öV¤H˜ cÆÀÇC‡°g¼ü2HPn)ëΈúþ¾÷ ?¯ ¤®„àà`|lÌkˉK:è°°0"""0 ÍjR»†tepçÁ\(½Àé‚ÓN\¡ˆ dþ5€Ø×åžÁqÂÊCE¯•½@ —ÿt™º<Û }ÿý÷œ9s†#F0a‰Wy9ì2}út†Jrr2›7o–|~¹QœH¸w¯X:wô( .î ”ð3q4÷(匌I\p FÐzôèêtŠÌ?ƒ‹:hƒÁÐhЛÒ ªæ(ý¡”ê¤j´ƒµ„N •ý~Ž~´µDÿ>C…‹¿¿hõxAxóÍ7y£gÇ.*•ªYôïj§d+F$4™àí·áÎ;¡¸XLoìÛÑÑ’Þ¦©8h¦&]Ùà¢Z§Ó5æ‹ntÐæƒæÌ73ˆ}Mþè/üt}³+Þ]¼)úW%;J¬»}ûvN:Å!C˜Þ{ï=Åè–àt‘09Yl¬¿côî ÇŽÁ¼yí³Ÿ3¦@WÀÄné :bC…ú‚ztÄc®Ü´„”””´šâ€ëÕÎ:¯P®¼y­rÃAÑ38Gø ›F‡Ù¨½RKæŸ3-³k×.Nœ8Á€d«ÜhŠœv3f C† áÌ™3ìÝ»W¶ûHSEÂ/¾€# #Clxtü8$$Èv»ÓgÅOUXàŽ %Å,BËÚü³>e=&Áñ {Õ±**UàïGø=–uØ’g ?=–õÀ#ЃœäP•\Õîõæ ˆ×^{Í!¼ä´‹J¥âø 2à*8å³¢×ÃÂ…ðøãbGº¥KaãF°â„vk©3Ô±)mÞÞÜÓçžÆ×uibä\$ö–qGÐb0ZMqÄÇ2ºËh2Ë39”uÈÑË#wy.ÑÏG;´Ç¬³„ïÎÞt{·‚Q ý‰tcëúÇŽãÈ‘#ÄÇÇ3sæL‡¬On»Ìž=›ØØXvïÞMJŠò[Þ‚>+—/èQ°jDFBb",YÒnc}{Ùyq'uÜÕë.‚|‚_¯I¿ÿr/åî"uÐ:®ÍÀƒ·>À·g¾uغJ(ÚP„‡ÖƒŽóûCw¦ðÓùÉÎ ¤êDù_ç·zÝÇ ÀóÏ?/Y;ÑöÛ.†ßÿþ÷€¸ÒpègeÇ1ßœœ cÇŠ%t£G;äÖ-¥7àz]jRn';pQÝT$lÍAÏŸ‹—‡S7RgpÜŸù_æcª3ÑéáNxXÞ£V œ)ü¨+F#¼öL›ååðâ‹b½³ƒœaU][ÏoEë¥å®žÍµ]ªTP¬ÏÜtGÐRRRÒbG»¦„ø†0­×4ÊkËÙqa‡CÖ%˜®~z€Î‹;;äžMqöî°ÀaDÜA}^=ÙKonîÿùçŸS__Ï£>J@@€ÃÖ廲hÑ"êëëùä“Od¿Ÿ½Èn“¢"˜2ÞzKÌ1oÚï¿y…µÄ÷ç¿§ÖPË=·Üƒ¯çõs- Uê²êðíæKA‘˜"Uâ6opQ†-æ Í<ØïZšãWǤ9Ê~,CIOИ ü¤ï÷ÜJØÖõÝ®¨¼Td¿—ÝìCƒÁÀŠ+$;ÊÊRe—çŸV¬X¡œ ­ «MŽS{÷Bß¾b££Y³ä»_+´–Þ¨9'þl|oñ%??ŸÐÐÐÆcô”†K:hsÃþŽ;RUU…^¯oñº©=§âÂŽ ;(՗ʾ®«+Äè9jq”ì÷j %8ß®¾D=…Qg$ãϯoݺ•œœ¦L™BÏž=º&GÙ¥K—.Ü{ï½”””ðõ×_;äž¶"‹M–/óËÙÙðàƒðË/Ы—ô÷j‡âšbö\ÚC¿LèÚ|˸Y ¤'èõzÅæŸÁE´N'&øÍ%EEE-^ç­ñæÞ„{©7Öó¯Ty·~×fÕR¼­ÏOÂg9®´®)ŠØÄþw,š yŸç5Š1fqðÙgŸuøzi—^x¿_%o\‘Ü&:<ô<óŒøõòå°z5ø;þIà»´ï0˜ ÌM˜‹§Góƒ™ÍŸÉêÈj@¹ùgpQ$–Ë´UjgÆQÕyÿÌD.ŒDíå³:}wØ5Î5§RDB3{÷îåböE† $¶ –ÜÿÍuÊ:œa—aÆ‘ÀÉ“'INNvøýÛÃj›‚1ùù°h:]»Ê³@iZûÜR#.s‰¼;‚– ³HhiŠÄ|”‡ÊƒugÖÑ`ll-æôFÇœÿCV’H×£Çç^y•FÅ•w¯ÐP"í-ÅvQ©TŠ ­²Ie%Ì+æœ==Åv¡+W‚ÂÎð¡1½1¯_˽¥Í¡;‚–‘EÂöRþLî1™¢š"ö^–¦oo]^e?•áéEð¸`Iæ´%‰„eeelݺ•àà`îú~"ŸˆÄXilq ¸Ü8Ë.>ø ^^^¬Y³Fqú€Å6II!CÄjnÝàÈp’ØÛ'óNr¡ôC:¡Gh¯1GÐ~·ø‘ŸŸJ¥jl¡D\ÒA›EÂ4E4\ ¥Jsm(DÜÊÃy5Ÿf”ä6lØ@}}=÷Ýw>>>ľ‹ÊKEî²\‡GÑβKXX³gϦ¢¢‚ï¾ûÎ)kh ‹l²v­XßœžÓ§‹[¶o»MþÅÙÈ×§ÅÝ›óûµÜˆË¨7¢¿¤Ç»‹7ŽÆýA¬Å%´Y$T©TDDDPTT„ÉÔ~cþ™}fàÀ–s[¨ªk¿±|{¬#w%¤7@Y"áêÕ«xøá‡ðŽö¦ó¢Î«E;Ó.J Û´I}½xxëüùP[ ï¼[¶ˆ ¥ÎPÇÚ3kñT{2ÿÖ–´þ¼^¬àˆ÷§¢¢‚ºº:E§7ÀE´Y$1Ía4)-m¿×†Ÿ§³o™Þ gó¹Ív­¡æB UÇ«ðíåKÀ Çufk ¥ˆ„ééé9r„=z0bÄõ]þÔÅ)Q´3í2vìXºwïÎÁƒ9wîœÓÖq#­Ú$;ÆŒ?†`ÏxùepPïn[Ùz~+¥úR¦÷žN¸_˵Ø-埕,‚‹:h³H×ü–öà•ªš£pÝuqÐQg¶‡RDÂo¾mûðÃ7³³¢hgÚE­V³páB@Yba‹6Ù»W,;z†wN˜póu ä«Ó_ðèm­çÇ[ªàpGÐ2` :w·V_½zÕ¢±wÄÝAgmgþ}ùß\­²lÌ‚@Ášk}dPNY%ˆ„&“©1½ñÐCÝô¾3¢hgÛeÁ‚xxxðõ×_S__ßþÐÌ&&¼ý6Üy'‹é}û :Úy ´‚«UWÙuqý;2¥Gë½^Ì´‚¿;‚–³H%¶ö´ÔA{¨=x ß¬;cÛ.¯ê¤jôéz´C´øõô³i9P‚H¸oß>²²²;v,qqq7½ïŒ(ÚÙv‰ŒŒdúôé³mÛ6§®ÅL£MÊÊ`Æ xõUðõ…ÁeË@¡ý‘[â›Óß`L<Ôÿ!4êÖ¿ÆM*×*8ÀA·IMM <ðO=õ/¿ürãë™™™$$$°xñb–-[vÓ8³H×#èÜ\Ë7AØ[ÍQô/qÄ<åDÏ  ‘Ð=/X° Õk£èE+Á.f±týúõN^‰HVV–xFà AâVíÞ½áØ1˜×rý°R¡1½ñHÿGZ½ÎTgBQw”7š ;‚¶„7r÷Ýwóé§ŸRVVÖø‹¤R© ¢ºººÑ7¥©HhmŠ §þô‹èÇé‚Óœ)8cõº‹·‰ç˜…ßíüÆ0Mq¶H¨Óéøî»ïðõõeΜ9­^çíMäÂHŒUFr>Ì‘}]ζ Àï~÷;Ù¾}»"(õ9|FŒ€Œ ±áÑñãàìeYÍÑÜ£œ+>ÇÎCHˆh}ý5é5`BÀA[BNNÑ×ò\±±±dgg7þÿáÇùúë¯ùì³ÏšEÌÐ\$´ÅA6w¸Ó_ÖS“Vƒ‚?¾]}Ûà@œ-nÞ¼™êêjfÍš…V«móZs³,Gö(ÚÙvðññáž{î¡¶¶–ï¿ÿÞy ÑëaáB’\ìH·t)lÜ(žè‚|uê+ mqš„׎¢sGÐÕ+W¸råJ£³6£V« ¢¡¡ù/°^¯gÆ lÙ²…Ó§OpéҥƼšùòܹs­¾ö@¿ OtÐigÓ,›³IŒøò†äµ{G¿æçççÔµ˜yZ°`A»cÓŠÒˆ\IFUÞ¿ð›¶‹ùµy×ÒkÖ¬qÎZRSaÔ(’V­b`d$ç¾úŠš'Ÿ•ÊéŸ][^;|ì0ëSÖãYêÉŒn3Ú«KÕ‘EªîbUÑåË—¨ªª"99™-[¶ðÁPQQ’P ‚p è×ÔÔ°hÑ"‚ƒƒ  {÷îÄÄÄàïïÏ·ß~‹Ñh¤k×®¼úê«ÍÆ=øàƒ|û0üö IDAT­xBŠÑhÄËË‹ÈÈHrr¬{\ž°z?eüÄ¿þ7㻎·hÌ鉧)ûw hdPûHMM ~~Î-srrèÒ¥ ;wæÊ•+5æ¯Í®åh£¨½Õ ÏŽg˜g»clÁ™viŠÁ` 22’òòròóó›U#ÉÎŽâåå0v,5_|_·nŽ»¿ ¬=³–ùÿ7Ÿûîcýœ¶sû©sR)ÚTÄ€ƒDLL W¯^¥¾¾¾Ùgõ‘G᫯¾’yå–ãÔ=Ž~~~ÑÄŒ3¦ÕqMStêÔ‰üü|ŒF£U'v1>D.Œäêò«ä|˜C×·äéŒæL»4E£Ñ0wî\V¬XÁwß}Ç“O>)ÿMFøË_୷į_|Þy‡¬‹q¾EìÃÒô4Ù¤r‹ŸX&[P@DD„SNø±—,³k*‚˜‡6­Ûsâç õÒò¯´Q^[Þîõ¥{J aw…)¢÷Æ8Ë ‚ИÞ0W+XJ³\t™<¹h%8g3æ4‡Cª9ŠŠ`ÊÑ9kµbã÷ßFQ6±…¬Š,ö^ÞK”6ЉÝ&¶y­©Þ„þ‚¯N^x†zRVVFCCƒâóÏࢺ©HÖ×B› ð `^¿yÔjÛ¶yßmâ}æ;·1k8K ûõ×_9wîƒ ">>Þª±>1>D>*Vt\]aÛÆ¡öP‚HhfÔ¨QDGG³oß>«JC­æèQ±„nï^èÛWlt4kVãÛJ²‰-¬>½‡û?Œ‡ºí(XA`BW©àuÐ7æîl©…6³p€¸ ÷ŸIÿló8,Á(PúC)*O!“”Ù4ÆY;æÌU ³g϶i|ô¢A¹Ër1Õ¶ßôÊZœ½“°)jµšûî»Aظq£ô7X¾Fûj<ø üò ôêÕì2%ÙÄZAhLo]Y»›â ágëÖ­€=ÛÓÕ/pX ÁcƒÑ§ë)ÞZ,Õòe‰„ ’Š…›6ÁàÁš “&‰]è†msˆÒlb)ÕõÕlL݈¯Æ—{îµhŒî×kM’úŠt^ž¸‡ÁAËÄ"¡=9h€ßæÄÏ¡²®’¥ýë¦÷õ—ôÔœ­Á¿¯?>qÊ:‡­)Î~¶lOí¶5½Ñ”˜—®EÑïg·©X‹±ûï¿°3Ía0ˆçΙUUðúë°s'„·D(Ñ&–°)mºsâçèÝ~©«Qg¤&½ï.Þx†Šuöf?qãÆ8%â’º5‘ÐÖ`áÀk={“nNs4VoLSnz/ü”——óóÏ?ÎÈ‘#íž/ôw¡ø'øSùK%•‡¤ëW¡DAì–[n¡ÿþ¤¦¦’’’býyyb¯æ>O:Ù±Þx,¬ëU¢M,ÁœÞ°¤ö@—¢n»~¨†yC›ùÉ[ɸ¤ƒ¾Q$ ÅÛÛÛ.=6v,=B{p(ûg‹Î6{¯d»²ËëÌ8ZøÙ¹s'ƒiÓ¦IRð¯R©sÑYïK—#Uª f³X¸¿ØXßüïÉ“0uªUS(Õ&mq¹ì2û®ì#.8ޱqc-S}ª€€þní0n U*;w¦¨¨Èæ†è*•ª±änUòªÆ×•¾{°)Ž~ì­Þh‰ˆyxGyS²­¤±<Ê^”*ˆÝwß}€˜‡¶(¥#bÄ<~<äçâEpètµ~¦RmÒæCaô_€Ze™ëjtÐ×"hAÈÉÉ!<<å¦+͸¤ƒ¾Q$„ëi³` n[€‡Êƒ¯OM¡€ÒÝÊÞ=ØG ?õõõìܹ&Mš$Ù¼j/5ÑKÄÜ`öÒ4ôWª Lj#¸|ù2ÇŽkûâÊJ˜;WÌ9{zÂ_ÀÊ•`£“QªMZÃ$˜øúÔum)Õ§›;èÒÒRêêê\"ÿ .ê o Aš% bUs¤¤À!bµF·npø0ÔÖŠ‡ºnÙ"VlH€’mr#µlJÛD€W³o±¼Àé p-\ÔAß(‚ýµÐf4j x Ä_˜ñÊžÁqÂORR999Œ9’ˆyÎeôîìM§‡:a¬4’·Òv]”/ˆÍ;¸^SNv6Œ,Ö4ïÞ ¯¼jé~]•n“¦¬>½½Aϼ¾óð÷²<ÖV‡;‚–‘¶DB{#h€Ç<† ÕûÅpðÁvÏé%üÈ™ÞhJô®‰…fcª·½‰’Ò±3f R©Ø¼y3Â?Š¥sGÂðáâÁ®Ûn§i J·‰AXqb‹/¶jìàZ›TÀE´\"¡™¸à8îìr'½/õFðÐqóÚ%üH¹{°-üoñ'lFõWë)\[hó|8YYYœºóN(.ÓûöLŽDé61s ëg‹Ï2,j"­Ë½ëNëPy¨ðK¸~šŽ;‚vrŠ„fžðzßz_²zf¡öt 39BøÉÈÈàÌ™3ôéÓ‡^½Úï$f/]^ê\k¢d²mû·â±²2î.+`‹F# ƒË–——l·T¼M®aŽžŸü”Uãê‹ê©Ë­Ã··/¾×7Q¹sР%‘P«Õ¢Õj%k‚Þ?C<¦qOÇ=äWKßS!ü8*½a&hT#Ñ¥ê(ÝYjÓŠÄ’“aÐ î>w€-ݺÁµÒ;9Q´M®QP]À¦´M„ø„p_Â}VÕuª¦é t```»§Î+—tÐ-‰„ FÑ•••TWWÛ}ê}â'cO6È+G?ŽvÐ]^£h[·+Vûâ 122è5g·ôîͯéé'NˉbmÒ„/O}Iƒ©Gn{_O_«Æ¶TÁQYYIUU•ˤ7ÀEtK"!H³›ÀTg¢âP*­Š ‘Äšh »«É…ÜÂOii) cÇŽ 6LÖ{5%lF¾½|©Ø_AåQë›()NÓëaáBxüq±#ÝÒ¥°q#÷\;‘¦±šCFg“0šŒ|vò3ždýáº-Up¸š@.ê [ AºZèÊ£•˜ô&Bdž2·ß~{«¶wÚZ‚F¡O×SºÛ²+Ät:xè!xæñëåËaõj°¢g¶9ͱyóf9V(W$´G±w‡î´µ¯ßžÍk§srrðõõ%D¢Ž€ŽÀ%tk"¡··7aaa\½zÕ¦ºecµ‘ªcUxFxâï×ì½™}fÃîK»9_|Þ¦uË\ÂÒMiŒ¢ÿaY¯h‡ béébïæ5k &„Å‹AeÝIGbf¢Ø §û6ÍQw¥C…€[š€¤×ë)))!** ••?gâ’º5‘ÄÎv w5‡ÒDš†¾:õžjOð˜Íóü–*8ÀEtk"!Øç 7¨´Òÿ9Ü/œyýæQU_ÅêÓ«­ž_nä~ÌѳÙa(…È…‘¨ýÔä¯Î§¡¬í4€l‚X^L˜ ž´"nDyã ð°-úkÊôéÓQ©TlÙ²“IúÊ!¥‰„R6P^[ÎìøÙDøÛ~Äo©‚\ÔA·%TÅÄÄm݉І U'«ðêìu“¸Ð³XøññןCáGié 3ž!žtz¸¦yŸ·Ý{EAlÿ~±±¾ùß“'aêTɦˆˆ`Ô¨QäææròäIÉæ5£4‘ðÓ“Ÿ¶‹ƒfªOUƒ ú¹#h§ÑšH @ff¦UsV¨“¸{°-aPçAŒˆÁ¹âs콼ת{ÈÔÂOQQ‡&**ŠAƒI:·D=-Íñq.‚¡õ?–’ÚEĈyüxÈχE‹àÐ!èjÙIÓÖpÏ=÷ò¤9”$&å%q,÷ñâÝetûZÁPn 6³ß¾x4Šq;hÒ–HÀ•+W¬š³±¼n|ûÇ[=7ô9@Œ¢•„ÔÂÏöíÛ1™LG2) ÿ[ü J]VÅ[Š[½N2»TVÂܹbÎÙÓSlºr%È´³ÒüÔ"‡ƒV’H¸ìè2žô”]Ÿ³ÆôÆ õÏàšÛ¼ÁEt["¡9‚¶ÖAWÛXn}n3³ãgÓ) ÛÎo#£,êûȉÔÂRÓM‰ú½ø —ó¿­—ÜIb—”2D¬ÖèÖ †GµÞ6èÞ½;ýúõ#--ôôtIçVŠH˜W•ÇÚ3k ôä‘Û±k®ªã¢p¯|s3~wí@Ú £££Q©TV¥8Lu&ª’ªð óÄ·GûÁ½<¼xrГŠ*¹“Rø©©©aÏž=hµZÆ'Ù¼R:9Tì}°‚ª¤–+kì¶ËÚµb}sz:LŸ.nÙ`Ýùx¶"W5‡RDÂå'–Ó`jà‰AO õ¶ï”“Êcb¥zó<¹¹¹h4ÙN¡— —tÐm‰„^^^DEE‘››kq‘ur5B½@àð@‹±žô$µ†UI«¨iPF>OJáçÇD¯×ó»ßýoooÉæ••ZEôó×6®´EÛl—úzñðÖùó¡¶Þ~¶l+6„\yh%ˆ„ú=Ÿžø•GcÚÐ*V‚ ´ƒš;膆òó󉊊rhs)p­Õ^£-‘Ä4‡Édj|¬iÊ_Ä¿¼Ã-^C¤6’¹ñs)«-c홵“)…WHo˜é´ š …ë ©/¨¿é}›ì’ cÆÀÇ‹5Í»wÃ+¯€ƒÁo»í6ºté‘#Gì>)¨)J ¿ýõ[ŠkŠ™?Ûæ¾fêóë©ËªÃ?ÞM`óNyyy‚àré pQÝ–HÖ …¶8h¸.~tì#E”ÜI%üF¶oߎF£aª„¥cráàAäÂH„z«ŸÞ܇Åj»ìÝ+–Î= Ç‹ ö'N”hµÖ¡jrÒÊÖ­[%›×Ù"¡ üãè?X2|‰ÝóUo=½áª!¸¨ƒnK$ë…Š#â£Q ?ܶ=œA‘ƒøµàWd°j¬H%ü9r„¢¢"ÆŽKppûU-J êÙ(PÃÕW1Õ5ߨa±]L&1qçP\,¦7öí'G^rä¡-î¹´‡´¢4FD`xôp»ç«:*êCo²\U uÐm‰„`]-tÝÕ:ñÑ(áæG£öP©T<;T9]î¤~\)½aÆ'·ð™áÔÔS¸¡ùqQÙ¥¬ fÌ€W___Q\¶ ¼¼Ú+3·ß~;!!!üôÓOTUIÓbÀÙ"áÒ_–ÒDÏÐD Ö²@ní0ÚkyiMŠÃ|J´µé 3÷÷½Ÿp¿p6ŸÝLN¥e9o¹BøÁ%44ér÷¿9ÍRNíÚ%9Yl¬¿côî ÇŽÁ¼yr.Õ*<==™:u*õõõìÙ³G’9)¦¦²çÒbƒb¹ç–{ìžO0 T¯Bí£Æ¿ïÍm]Ý´ƒ±D$Ë"h[óÏf|4>,¸£`dùqç–ÜI!üœ;wŽ .0`Àºt±O¸q4Ac‚è@uR5•‡*_oÓ._|#F@F†ØðèØ1HHpÀj­ÃüÇRª<´3EBsîù¹¡Ï¡Q[÷ÔÚú z å ö¼Ù¥¹´ƒiO$4;‹"è#×ôÛ4ÀÓCžF£Ö°âÄ ªëå;¦¨=¤~\5z1åÔÒÆ•í¢×ÃÂ…ðøãbGº¥KaãF´ýs '“'OÆÓÓ“íÛ·· X‚³DÂ"]ßœþ†¯\(ÉœæôFà°–væ@ÍܧǕpIÝžHèëëKÇŽÉÎÎÆhlýpQSƒ‰ªUxzà×ǯÕëÚ#:0šú=@ym9Ÿ'}nó<ö"…ðãʠ㼎xvð¤xs1µYµ@ v¹|F‚U« 2aÉ«ë;’ÀÀ@î¸ãJKK9|ø°Ýó9K$üôħÔëx|Àãù´¿k×ªŽµ.dddàííÝØéÒ•°ÛAgffòÅ_°lÙ2öïß/ÅšÚ¥=‘Ä4GCCC›µ£º3:Lzȵ•?Žø#K,¥Á(Ï)ía¯ð“——ÇÑ£G‰¥ÿþ­Ê±¨}Ôt~ª3‚Q ÷Qjf—;Ä|sr2Œ+6Öm{ƒG2cÆ @š4‡3DÂ:CŸÿ*žö¼dóšu¤–ÂêêjŠŠŠˆ‹‹s¹M*`§ƒ~þùçY±baaaôéÓ‡¤¤$,X@jjªTëkKÎųD(´7ÿÜ”~û1µçT²+³ÙºÁîùlÁ^ágÛ¶m‚ ØæH–ÒyqgTž*òVæaÔE»ðÚk0m”—Ë/ŠõÎ:9{¹cvÐßÿ½Ýu÷Î ×¥¬£@WÀÝ}î¦[ˆ4‡?˜êLTŸªÆ3ÜŸ¸››Vedˆ½rºÊÐmÐØ•¡ÿÛßþ†ŸßõÔÀwŠçˆY*@ÔÔÔ°páB áÝwßÄS¤Ÿ|òI4 F£‘•+W6gI®©P8jÔ¨¯‘"ÿÜ”ÿõ_üpáÞ?ô>óûÍw¸“«©©iöó°WOo˜ñŽô&âÞ ÖPðMÁ¿kÀoáBÑ!kµðÕW0k–³—i5111 0€äädÎ;Ç-·Übó\ö~V¬E>üåC^ñ‚dóVŸ®FhÐÕ¶øûvùòeÅœd-vEÐ~~~|óÍ7_ôÑG¯[ÂÆ¹ûî»ùôÓO)++k.öïßOÏž=Y±b]»v½)uÒžHVFЭ䮬et—Ñ ‹Æ™Â3ì¾´[’9­Á᧺ºšÿûß3fÌ WåÅÂ÷.peØpÑ9÷í+6:rAçlFª4‡£EÂÄÌD~-ø•Á3*¦å€ÉËd[]=‚¶;)SVVÆ3Ï<Ãc=F¸•ç°åää4–¾ÄÆÆ6ž‚Òôõ¸¸¸›NGiO$4Ï­;è†âôõøöòÅ3ÌÓªu·†J¥â¥Q/ðþ¡÷%™Óì~vïÞM]]S§NÅÓS{8“ÀÁZ»ÖP“)б |~ùzõröÒìB*íh‘Ð=/¾DÒ'ËöÂÿè`ܸq\ºt‰¢¢"î¸ã«ÆÆÄÄ4:Ð+W®4:妯gffÞTsöìY6lØÀ–-[Ø´i ÖïšS+IIIúÒ¥K¯5½®ò—JÒI'pxàMc[šÏÒ×föžIlC,‰9ž{Üîù¬ymÓ¦M6]½Z ¢¢E!Â)Áž|òI¡¦¦FÈÍÍæÌ™cÕXN'<ðÀÂÓO?-¼ôÒKÂgŸ}&üðÂÉd.\(<ûì³Â¢E‹n·`Á‚v箬¬¡wïÞ-¾ù¿/ ‰$ ¹+r­Z³%|vâ3¿ ÌÙh=œECCƒ*xyy Î^Ž}œ?/ ‚‚1:N8ñ³H¢ ;¯söÊ$ãé§ŸaÕªUÎ^ŠE,Þ¾Xà/;ð7Iç­/­I~éñK«×ÄÇÇ €PVVfÑœ–øGb·ƒnŠÁ`jª6™?¾E×…†† >>>‚Édºé½SN ‰$ UÉUR/OÐ7è…ˆ¿Gª¿¨„ %$Ÿ¿5t:ÛœPbb¢S¦L‘xEæ»ïA«„I“¡¨H¸òîa';…ôgÒ½:ÉØµk—3gδy[?+Ö’W•'ø¼å#ø¿í/”Ô”H:wÉî!‘D!õÔß7™L‚¯¯¯bñœJsÐv¥8žzê)V¯^Mzz:ÙÙÙüüóϼð œ8qB‚ؾu, AÌ_×ÖÖRXؼyŽ`¨|þÖ°Uøqùê†ñœÀ9s ª ^vî„ðp"ERä]DþWùÊíߧƇV«eÏž=èõz›æp”H¸ôÈRj µ,²˜PßPIçn/ÿ\PP€^¯wYìÌAwïÞFÃÊ•+yçw8þ<¯¾ú*ƒ–j}-b‰H­ …º4Æ*#CQiä)…[Å®WpüÇFÐ6l`Þ¼yüéOjüÏX²“Z¯…ntÐmPi%× QkøäØ'i¢dËî0—Lo‚1ùù°h:­ü"Žºw!B¨Í¬¥d›eÜ•ÎÔ©Sñðð`Û¶m˜L¦öÜ€Ü; +ë*Yvtµ¦±ôTJê²êh(l  ›_'… IDATjŸ–ÝØ|­Õjyá…ˆmüÏXÚͫݺ•G#©ˆ Šá~PV[ƪ¤U²Þ lk!i>¥Ãete%Ì+æœ==Åv¡+W‚ÏÍÛ|ÍÔÔÔýÿÚ>XÖÕ eôèÑpüøq«ÇËÝntùñå”×–óЭÙ}Þ`K´ÕÃŒ«oRífg©HØRÚPn &­Ÿ8¼:ÉZFc¥_äo¢d­ð“““ÃÉ“'éÖ­ ì|))0dlÚݺÁáÃðè£íËÊÊ"tj(¾=|)ÿ¹œêÓÎk +%M{sX‹œ"aMC K,E­Ró§ÛåyªnO ×ߤ.ê - [JqT¼öƒ•9z6cn¢”U‘ÅÆÔ²ÞËZáÇœ¿œ9s¦ò›#­YÆAz:LŸ.nÙ0À¢¡}úôA¥VõÜͽ¢]{òÐrŠ„ÿ<ùOŠjЏ7á^z…ɳs³1‚nãÑŒŒ T*•Ë<Ñ—tÐ–Š„ÁÁÁhµZ233»U'‹ÑSÀÀ–…9xi¤˜ƒ{ïÐ{˜ëó…–b­ðãùçúzxöYq«vm­x¨ë–-bņ…˜íÒéÑNxzP°¦€ú‚z¹Vì0ºwïN||<©©©;f-E.‘°ÎPÇßÿ€WnE–{˜êÄ>îš` ~½[îûÓÐÐ@vv6ÑÑÑx{{˲Gà’ÚR‘P¥RGuu5eeeT%‰tÀÇ9è1±c=œ3…gøþœõ£–bðSQQAbb"aaa­vûs:ÙÙ0f |ò „‡ÃîÝðÊ+`e__³]4Z uF¨È]ž+ÇŠŽùë¶mÛ¬'—H¸úôjr«r™Ù{&ý:ö“å•Ç*1ÕšÔj÷¬¬,L&“KçŸÁE´5GþÜ(š#hí€Ö¤F¥Rñç±àÏ?ÿY¶(Úág×®]4440mÚ44ûÏ…“œ½{ÅÒ¹£Gaøp±Áþĉ6MÕÔ.QÏE®®¸ŠQßúi;®‚­yh9DBƒÉÀßý €ÿýß’Ïo¦bŸØ/#xlp«×üòÏà¢ÚR‘š …F‘šó5xÇxãîØŽm“»OnŒ¢ÿïìÿÉrk„Ŧ7L&1qçP\ Ï=ûö~6µ‹O¬æt ¡¨Â5…mŒr †JÇŽ9p॥¥“C$\Ÿ²žËe—¹³û ‰"ùüfÊ÷—â!Á­ñ[¨àuÐ–Š„p](ÌÌ̤ú×j›Þ0£R©xsÜ›¼±ï Y¢hK…Ÿ††~øá|||YPee0c¼ú*øúÂÚµ°lxÙWms£]b–ˆÝ³?̶ûdg£V«™>}:F£‘;wZÿ6©€‹:hKEB¸þˆséÒ%§¤7š2±ÛDFÅŒ"¥0…ïÒ¾“|~K…Ÿ}ûöQQQÁĉñ÷—¾‰M$%‰gîØ½{ñc0ožDS7·Kàð@GR“VCÙž2IîáLlIsH-n>»™³Åg¹½Ë팉•ïÀ‡ê“ÕuF‚FµÙ¦á·°I\ÔA[*ôºÖ ===ê¤kNˆ AŒ¢ß÷ FÑF“´9PK…Å¥7V­‚‘#!#ClxtìHX—Ý’]¢—ˆ)“ì¥Ù7½çjL˜0___víÚE]]Ec¤ AàíoðêèW%›·%Ê÷‰é¶òÏàŽ Š5"a=P©Tœ?žªäk,±»‘ñ]Ç3ºËhÒŠÒ$¯‹¶Dø17GR©TLŸ>]Òû[^ Šÿ °t)lÜÒÖ¨·d—÷tÀ'Ö‡²=eèR,×4”ˆŸŸ“&M¢ªªŠ}ûöY4FJ‘pçÅ$ç'3(rwv—7efIþÄÚÇLJN.t(pK¸¤ƒ¶F$ôññ!66–¬¬,JÏ”âæ‰w´óê"›FÑoîSÒ(Úá'99™ììl†NÇŽ%»·Õ\¾ £F‰Ñsd$$&Â’% Æ™–ì¢Ò¨ˆzþÚÆ•¸þÆóÓ¥›V¤ Aà­ýobîYÎ O‚Q â`j_5ÚÁ­§)+++)))!..µ•%™JÃ%WoH×Ó9 9 pú®¹;ºÞÁ¸¸qœ+>Çú”õ’Ík‰ð£ˆôÆöíb¾99ÆŽóÏ£GËv»Öìùx$Z ¾- ¾Ðµ7®Üu×]¨T*¶nÝj‘ð)•Høãå9’s„„ Ìì#ïgªúT5ÆJ#A#ƒP{µîº~+ùgpQmHлwo²ÉvZþùFšFÑ“4ä-~œê Fxí5q«vy9¼ø¢Xï,óchkvÑiˆ|<S‰«+®Êº¹éر#Ç';;›S§Nµ{½"¡I0ñÊ¿ÅÝ‚oŒ{µJ^wbÎ?m;@û­äŸÁE´5"!\ •ä ÇÄŽa|×ñ¤—¤³îÌ:IælOøÉÌÌäôéÓôîÝÛá§:STS¦À[oV+6kªÊFzºØ»y͈‰ƒañbYJè,¡=AL¥Ró‚¸ý;çC×.¹³4mH¸üørr*s¸§Ï= jó<ÖИnÇA .]ºD‡”¸žÞ¸¤ƒ¶V$¬N®&ñðüùór,É.ÌQô[ûß²+ŠnKøqXzcÓ&<RSaÒ$±„n¨c~‰[ÃA¬ÃìxÇxSº³ÝY×ݸ2räHBCCùé§Ÿ¨¬¬lõ:[EÂŠÚ Þ=ø.j•š·Æ¿eë2­âÿ·wæñ1ßÿÌL’ÉdIHÈ"–Ø‹RûÖXC¨¢UÔÒ¥µ´ýªjh­RŠ*ª´vµÔò³ÆD‚ˆ%”Ø‘„„ì{&3™™{~\3Md›}á¾_¯¼ú’{ïsÏ<{òÜó9Ï9D„¼ˆ<ðlx56zNHH€\.G‹-Lb›±±J­­HXÖAÇÅÅÃ$½èäÓ Áƒ‘˜—ˆ-1[t§*áG&“áĉppp@_KvÖˆ\Îö 9(,-Nœ`ë8›M1ž >3ŸÇ¢­x㊠ ¹\ŽS§NUyž®"áOQ?!»$ãÛŒG OÓ8AÉ} är8¿á cõo÷îÝ4oÞܦ«tÐÚˆ„D„˜Bø ,×AÀÒ ¥à‡o¿A¬ê•OuT%üœ;wEEEèß¿?D"#ˆ¤Ïž}ú°¶ÝÜØ‚G‹Æ¥hˆ¦‚˜÷$oHÿ3ò,ãö4&š´ÂÒE$Ì(ÎÀª¨U°Ø!´W¨®æi&õŸUpÚÐF$,}Z y¦M6`¹ºw;Œo3™’L¬¸¸B§1ª~ŒÞˆˆ`Sè"#Ùÿ^¿ døû覂˜M-x}äFÊàéFëݸ2`ÀØÙÙáøñãU¾mê".\Šby1¦u˜ÿZþúš©1ªúœƒ¶´úT%F[t`_Ç,1­â» ï ²aUÔ*<É×¾ÊZeÂÃ08räø|>BBB a& »b ÒҀɓ‹ TεÄ|fù< u]*™un\qvvFPPrssqáÂ…JÏÑV$LÎKÆÆkádç„=ŒÓk°2ˆˆÍàà.]ký8mh#ª*ØùvõEíÚµ†±ÌÏÇÅsºÎT!ÅWç´/z^™ðsíÚ5<{ö ݺuƒ‡¡âÁÀ;ï°1g[[`ëV`Ó&ÀÞÞ0ãm1QC<†y 4½{¬·ãJMamEÂÐó¡(U–bN—9¨ãXGoû4Eš EéÓR8¿î —êw2 ƒ{÷îÁÙÙõë×7‘…ÆÅ*´6"¡º‹w;'4mÚ2™¬Æ$~s2¯ë<Ôu¬‹¿ný…ëO¯kumeÂ*¼1lØ0ƒØ‡ØXà7Øl† K—€>0ÌØFB[AL•r÷d•õv\Q•’­ªx’6sr7ó.þü÷O¸‹Ü1»ËlƒÙ¨ Úä?§¤¤ ¸¸Í›77{A4Ca•Z‘°(¦àNmœÔ[¾-9Ìá,tÆ’7ÙÖX_œùB+Q™ðcÐøóÎl~s\ÂnÙn×NÿqŒ¶‚˜K78wpFñ­bäË3’UÆÅÇÇíÛ·GBBîÞ½[á¸6s²ðÜB0Äà«_ÁEhÚÜâœÓlŸÅZA¯^ü°R­©H(Ï‘Cš,…¨‰'ºª¥ …*>l÷!Zx¶@xR8ŽÆU¿#¬,/ ? ¸sçZ¶l‰FénPi)0}:»U[*e›ºþó›±ah+ˆñx¼rÛ¿­•êšÎItJ4Ý?__L{cšAí« RrÏä‚/ä£VoÎA[ šŠ„E7Ë÷ ,ÛþÊ’±áÛ`e¿•€ygæi¼yåEáÇ «ç'O€ž=õëÙœæS§€ +*„®Ë®9Ï‘žú‘}<’û†ë>bJªsÐšÌ aöi6¤ñM¯o`ocZ¡àj¹ ¸ör…À¡æ”MÎA[šŠ„êøóóWÖâP1°ñ@ômز`ÓõM]ó¢ð£·ƒ>{–M‹Ž:wf ìk£‹Ñe×ß–ú3žw\Yc«è6mÚÀÏÏÑÑÑHKK+wL“9Ùu{.=¹„¶^m1±íD#YY59'ØðFíµ5:ŸsЂ¦"aYø¯?¡¥¯ ö5{e¿•à‡Ðó¡È—æ×xMYá'++ .\€··7:tè Ý͆ côïde3fçÏ>>Ú~ ‹@×]sÞ“½Áwà#m{äÙÖ·qEU<‰ˆpìØ±rÇjš“¢Ò"Ì;;°vàZø¦ßt”sR;}÷î]…—¢H’ «tÐšŠ„Eÿ>wÐmY-‰àçç‡äädH¥R£Ùg(ÚxµÁĶ‘%ɲ 5W ++ü;v Ã`èСÚõeË͆.D"`×.`íZÀÎN—`èZZÓÖÍÞzƒ)aðô7ëܸRU˜£¦9Yvaž>Ũ–£ÐÃßxíȪ¢4³…× !ô¡™Cçgff";;°1ASa•Z‘‘3<À®®ì<ÿs. "<|øÐ˜&Œoßü¶øùòÏHÎK®öܲÂNᘶWàñãlÍæ+W€Ñ£u²Û’Ч´f¹+¥–™?_½zõ‚‹‹ Μ9SnÕ\Ýœ<Ê}„Ÿ.ý‘?öûÑfV ÷L.@ìêY“”¹—1¼X©ƒÖD$,‰/É -Ëÿõµ–Lõ]êã‹®_@¦”aÁ¹êwp©„‰D‚Ó§OÃÉÉ AAAšÝè÷ß®]ÄD¶àÑÕ«@Ë–úšoèSZSÔX¡(}fWììì ©TгgϪ_ÝœÌ9=2¥ _vÿ¾®¾¦0³ªð†{°fzç -MDÂâX6 âØª|xkÉä(ËÜ®sáåä…]·wájêÕ*ÏS ?§OŸ†D"Á Aƒ  «¼¤˜4‰ýQ(€U«€}û€— –® }ûï©Rî¯x b¬oãJe­°ªš“³ÎâðýÃðwõÇÜ®sMbß‹CÈ9•ž O£üg€sÐ…&"añçºeåÚ29T8Ù9áÛ7¿Ì:9 Uþª­z…=xð `xM}ÿ=ºucWÏ^^€X |þ¹Ù ë }ûï¹öp…KWHîJõO–¬2ÁÁÁ8zô(”J%€ÊçD®”cÖÉY€•ýWBdkžöpE7‹ Ïõ›kÛ»U¨6ãpÚÐD$¬jÝòùkûíÛ· o˜ù íhïÝQ)QUÖŒ~üø1JKKqôèQ…B ª®ªÜ±cl¼ùÆ 6ÏùÆ ¶wàKˆ¾ý÷x<ü¿b«·=^úØê¶»¹¹¡W¯^ÈÌÌÄ•+WT>'¿^ûw3ï¢wƒÞÑ|„©ÍT£möÀ® ù|¾zö²`•Z‘Pr‡]!8¶(ï ëׯwwwÄÆÆB.·žÔ)_€ßB~ŸÇÇü³ó‘^T±u³fÍ޼¼<ôïßÎΕt0W*¯¿† òò€¹s°0vý’¢H¨¢vpm8µsBáõBäž¶¾¾…/†9^œ“ÌâL|þ ø<>Ö \cÖZÚ:èÂÂB¤¤¤ aư·Ð‚]ºb•º&‘‘2ÄK ô¦VùW$‡¶mÛB&“YU˜Ú×ké§#Oš‡9§çT8S}x#38øî;ÀÙ™-xôÃÀK”–Túˆ„*x<ü°«èä¥ÕgÓX"e‹'çäkñ×È“æaj‡©x­îk&·O…"O‚K°ó²ƒcÍ ß¿ÀËÞ¬ÔA×$JH¦büYEÛ¶m7oÞ4¸mÆæÛ7¿E=çzØy{'Î>:[îX›6mpøðaõ©&:šÝxö,Ъ[訦õK‚¾"¡ áphæ€üÈ|äEZW¥† ¢U«V¸wïâããËÍÉÍ´›Øt}Üìݰ¤÷3Z ä†å‚”„Ú4K¯^^°R]“H¨_L±SaÍÚEè‚5×>9þ ¤Šÿ6܈Åb¤§§£wïÞÿý#6l`ãË))lÁ£Ë—Ù<çW}EB<>~ÿó<þ^¿¸¶9PåÄ=zT='JF‰} áÛ7¿…»ƒv ™ Möÿ±oÇÚÆŸÎA[ 5‰„U „*¬ÙAÀˆæ#0¨É ÄçÄ—Ûa¸cÇeÂÅÅÀ¸qÀ§Ÿ²ÿÞ°øóOÀQ³WÇ—}E²Ô]ö ì‘s2…× 6®)(‡VÍɺ+ëp%õ :Ö¦šÓ<‚}$<žVúeÍà¬ÔA×$V•b§¢iÓ¦ …¸yó¦Õ)ò]?h=D6",¿°²€ˆàyqþ¸8¶vó΀¯/Û3pÚ´—.…N !ªàÛòá7Ÿ]E'o]±è:ÀËË .\€§§'’ó’ñÕ¹¯`÷Á–![ÌRo£,ùò!ϒí[í¨:¸´…Q“H¨^A·¨ÜAÛÚÚ¢U«VÈÎÎFJŠuV*kP«¾éõ J•¥˜z|*bbbœœŒ.]º ^TСpçЯ»…»S's›l6 !–Åk¢ì¼íu0 Åw5oanø|>† †a°~ýzL;> ÅòbÌï6­ë¶6·yÈ<˜ €õkŠL&CBBêׯ——hs• ³:è/¿üS§NÅØ±cQRRRîX»ví0mÚ4LŸ>½ÂuÕ‰„Êb%¤‰RØ7°‡À©êµ‡9`v—ÙhU§“±xãbÀp[[v«va!›Nwâ[ÇùÆP"¡ ¾=¾_°[ /³®X´*}<ò8N<<@÷@,ì¹ÐÌV±»³f<Àã-Í¿¯wîÜÃ0hÕª•­3fsÐIIIÈÏÏÇÆ‚ýû÷—;îââ…BOOÏ ×V'JîIª:þ¬âepж[üòàÿ޼Áv:9v X²˜÷µÕ0”HX–z׃­»-2vg äQIÍXAAApppÀ•óW°yÈf“⯌Âk…¥ÊàÚÝvu5¯œ¨z;jß¾½±L3+&qЉ‰‰.÷³cÇøú²« ThäzþüylÞ¼¥¥¥ +w¬:‘°¦ø³Š—ÁA@Wß®‰^Pf0pu½þ:pý:0x°¹M³ )ª8 àó™HIx¼ÂzVÑ"‘î­Ý9lŒžþ=Ím óÞðQqAV*mè·$KÁ$: 'Nœ(÷óþûï#9™Y’’’ÔÎúE¼¼¼PXX^-/,,ÄÞ½{qøða8p›¬.‘HP[Œ8ÄÁ±•£úwÀÿ#U¿kÓ¦ ÖAWwžEÿ®¸øé'¸~wß8óÇ À2ì³ß0Ê=ê}Z  HÛ–†[çoYÌç­îwgÎà‰ˆ] ‰îŠ,Â>"µ=× …o{hu­ê÷*P[nܸÇã§Ÿ~B~~Í1L Ý$31oÞ<úä“OhìØ±$‘HèÖ­[ôõ×_SVVM˜0>ùä?~<Éd²r×…„„T9æ¿Áÿ’b*ˆ)¨ñþ7&”——§÷g19ùùD#FÔžÇ#„w@-Ö· ©\jnë,Šëׯmì„/H 1Åo´{Š"Yü@˜ @õë×'†aÌmÞ*$1Ät­Ã5­®“ËådooOµjÕ2Øç˜0a‚AÆ1fÝã»bÅŠrÿnݺ5Z·fÕämÛ¶Uy]u"aql1À‡F]Ú¶m‹‡âÖ­[èaM…‚bc#€¸8$ûúâú“'hÒ¤ üBü–†Eá‹°¢ïŠšÇyE0æë¯Ïç>HY“‚§¿=…ß¿rÍ!,o¿Ab^"Þnÿ62ºeàâÅ‹ˆ‰‰1{ü6ë [!P›ì €]ýJ¥RtíÚÕ¬µCŒ‰U¦ÙU%* =‘AÔH¨fqÌ*ãÐ;w²)sqq@HMe7 >ëû­‡‹Ð?^üÉf6Ôr0†H¨Â®Ž¼'³m±R~¶Ü”ÍkO¯aõåÕpº`Ý u8p €Ê;~›Uzçp.þü"Vé « Õa *¬ÊA—–Ó§³[µ¥R¶©ë?ÿààÉ“XMù„õƒÖƒ@h< df6Ú20†HX¿¹~àÙòúKªE6—•È%xÿàû`ˆÁ}@=çzêU³¹tÉÃß*†C 84­ù­·,œƒ¶PªÚI¨.1ZC‡ «qÐOž°5›×¯gsšO,@zf&.\¸tèÐÍš5ÃØÖcñN‹wœŸ¬.¾þªcÈ„•!ôÂ{²7”…J<^nysNÏÁƒìÔd¦´Ÿ€-∛7oªÅzs ^=k™½ׯ_ðò¦ØVê «ÚIXS Ž©W¯<<<,»6ôÙ³lºèh sg¶°~߾ؚ D„áǃÏç#&&<¿þÞNÞØvsÝ;dæ`~ ½“°2üúƒïÀGêºTÈRdF¿Ÿ¦yp¯m„§ƒ'¶ݪŽÕÆÄĨks=zÔlöeþ­[xƒaܸqNNNhܸ±1L³¬ÒAW%jš­BUº´´T½Ÿßb`6ŒÑ¿?•̘œ?øø¨Oy±ö³êUÏÝÁ[ßÚ ˜rl ÒŠÒLl¼eaŠW`¡·>³|ÀH$-I2úý4!­( ùðÇ[ ®S]õ±×_]½«Ð\aÉ} ¯B(Ò¸ö³Šøøx£]»vàó­Òi„U~²ªDÂâØbðlxjÞKÍ"ù¹ÀСÀÂ…€HìÚ¬] Øý—!••…°°0xxx {÷îÊ‹aÄ'o|‚,I&™d•E¡ …1E²øÎõ…M-¤mMƒ$Î4÷¬ †L<<Y’,|òÆ'X~ã’D"A—.]àáá±XŒ¬,Ó÷ZLÛÎ.¼&xi…ñ*ÄŸ+uЕ‰„òl9JÓJ! o§ùDz8Ãö <~œ­Ù|å 0zt…ÓöíÛ…BQ£FAð|;÷‹bØ}@ { ŽÇÇæ˜Í&1ß1¶H¨ÂÖÍ~_ú”„¤EI&¹gU¬»²§N¡¹GsüØïÇ Ç?~ @€wß} …¢B©cCJBú_é¨;®nͼç -˜ÊDBm38TX”ƒþýw kW 1‘-xtõ*ð¼É틨j?¿ÿþûêß½(†9Ú9⯷ÿ‚€'Àç§>Ç܇Ƴ݂1¶HX–ú3êÃÎÛ{3PcžzÑ·ÓocÞ™y°åÛb׈]p°­˜¡šÕ÷Gõ}2¹çr!K•Á-È ö¾Ú×á´S™H¨müYEÓ¦Máàà€k×®©[Ò›œ’`Ò$öG¡V­öíª(Ÿ˜€¨¨(4jÔÊ”­L ëX¿#ö\‰\‚q‡ÆA®´P1Ôˆ˜B$T!pÀÿk¶waâW‰&»¯ ©BŠ1Ç@¦”aYŸehëÕ¶ÒóTsÒ¹sg4lØ^Kã IDAT—.]£GLfgúv¶éqÝ Ú¯ž•J%®]»“þñ5Vé + Õ)vZ® mllЩS'"66Ö öiÅ£G@·nìêÙË ‹Ï?¯¶°þÎ;°«Ÿ²±»ªV_õø ëwÄå”˘v¾aí·L½Êòžä Q#rNæ ï¼i{~yöKÄfÄ¢O@|Þåó*ÏSÍ ÇS¯¢Uß+c£(P ó`&N­³7 66èܹ3l^ò†ÇVé + Õ)vZ® ¨E¶ .èg˜¶;ÆÆ›oÜ`óœoÜ`{V©_GÇŽ[îXUb˜­ÀûFîCmQm¬¾¼ûîì3ŒýV‚©DB|[>,ixô¿G&hOÄŸÀšè5p³wÃöaÛÁçUýx—Õ÷hÇŽ&±5óïL0% ÄÝÌ»z kÁT"aYê¼Wޝ9¢ ªÙǪïdr0æàÀ–¡[Pߥ~µç—“ÀÀ@tìØqqq¸víšQí€ô?Ùð†×„š¿ï•Á9h çE‘Pž!‡<[‡fàÙh_4¥sçÎàóù¦qЙ™ÀÀÀwßÎÎÀÀ?¾ªU&ª¨)7 ñ„öE±¼#ö@¡ÌºšžêŠ9â”<> ¿oH\RoeZTZ„a{‡!Oš‡yÝæaxóá5^ó✘J,,I,AÞù<ØûÛõgõ½E+ƒˆ >ŸÎ;ÁBËÂ*ô‹"¡®*\\\ðÚk¯!%%Ÿ«­èhvWàÙ³@«VÀµkÀðš&r¹{öì@ À¨Q£*×D [Øs!5„ûY÷ñá‘_‰ühSŠ„e©=¨6\»¹¢8¶»3Œr"ÂGG>BlF,ú5ì‡ïƒ¾×èºçD•®¹{÷n£îªMÿë¹88¾.x|íS?Fjj*Ú´igggC›gqX¥ƒ~Q$”Üeãi-´+¶R£†9ˆ€ ØørJ [ðèòe6ÏY Μ9ƒÌÌL 8°ÒV`šˆa|;ÞÞ€ZøûîßX}yµV6X#æJÅâñxh¸üù*úëD(K Ÿ%´òÒJ컳 j5Àî»5îÌýâœÔ©S @ff&Ξ=kp;¶ï :¼1ž oh‚U:èEBÕ®-m«a•Åhº¸7øôSöß6þ 8j¿Ú¯.¼h.†¹‰Üpàݰ·±Ç¼3ó^úÒ¤¦ ËâÚÝoy@š$Å“Oj¾@ Î$œÁ—a_Bd#ÂáQ‡áîPuô©lNŒæÈ9•ƒ’„¸öt…¨±öZ\¼xç -šEBÉýt·nÝØAÇűµ›wî|}ÈH`Ú´jS誢°°‡†“““ºÈÍ‹hžiçÝ¿þJRbÔߣð¬ð™Ö6Y æ ËÒøçÆàÛóñxùcƒ5˜MÌMÄ{ÞC ~ú;ÚxµÑêúÊæä­·Þ‚““:T¡Íœ!PÕËö™éSÙU£z>UÏëËŽU:èEÂ’%:ÿU4hб±±ÈË3@îê@‡À;@¿~ìî2›J´åСC())Áˆ#ààPù"mۉm'bJ{¶˜Ò;ûßLa9UØ ‰¹73Ø7°‡ß?02gé¿›S"—àí½o#§$sºÌÁèÖKÔDesâàà€áÇ£¤¤‡ÖÛβß-Fîé\ØûÛÃã-í:§¨ÈÍÍEll,P¿~õY*/ Vé ËŠ„Ê%¤¥°÷·ß^¿Ó­[7¢¢¢tD.¾ø‚ݪ]XȦÓ8ÁÖqÖƒšÂ€nbØÚkñF½7pñÉEL8< 1:Ûh©˜K$,‹ß\?ˆ‰},[¯´;"Â䣓ñoú¿ Âò¾Ëu§ª9Q}¿þúë/m¬ŒÔµ©€úÓëë”iQQQ ¢W&¼X©ƒ.+–Ä—¤_xC…ÞqègÏ€>}€Ÿ~ÜÜØ(K–í“ñËòôéS„……ÁÛÛo¾ùf•çé"† m„82úÔj€½wö¾”; -¡^ßžÆkغÅñ3ãu —]X†]·wÁßÕ{Gî… _·tUÍIPP¼¼¼†§OŸê4ö‹ÈsäHû3 G¼>ÒM^½ð`¥º¬HXÇÆôDMuo¨èÙ³' ,,Lû‹#"غÈHö¿×¯ƒ×|ìÚµ Ã`̘1êÊu•¡«æåä…“cO¢¶¨6V^Z‰µÑku5Õ"1§HX÷Áîpêi¢O~Ð^0ܳ_û NvN84ê<t+«jNÆŒ†a°{÷nÇ/˳ÍÏÀ”0¨;¡.lÝluGõ\ªžÓW«tÐeEBC„*š7o___\¹rEóú¸DìŠ9(HKc ]¼èmÀvŽØ´i`üøñÕž«ÖÔ£)ŽŽ> {{|vò3¸{@ç±, s‹„eÑU0<|ÿ0>>ö1lù¶84êÚy·ÓËŽêæd„ €ß~û £_È‹‘3H]dž7ô333qõêUøùù™]S0%Vé ËŠ„†tÐ<ÁÁÁ "œ:uªæ €wÞacζ¶lÁ£Í›{íË'VEXXâããѽ{w¼öÚkÕž«ï·«oWì¾ 0öàX\xlâÚ$FÂ’hQ€~ÿó#eðð3ÍÈä¼÷÷{l–á;зa_½í¨nN^{í5tëÖ ñññ8wîœ^÷É:”YŠ µƒkëõŒž:u D„àà`­‹û[3Vé ËŠ„*­M•êœ8q¢úcc7Þ`³56.]>üÐ 6”eÆ €O>ù¤Æs !†½Ýüm¬ ^ ™R†¡»‡â~Ö}½Ç47– –ÅožìÚ#ûhÍ‚á­ô[º{(dJ~ þï¶|× 6Ô4'ªï›êû§+)kž§ÖÍÒ}õ ü÷<ªžÏW"ºIVÆ„ ˆˆˆaŠt¤óç‰Q2»  €lmmÉÃÔJeå'íØAäà@…„åääÞ/’œœL|>ŸêÔ©CR©Ô(÷¨Š¹§çBAþ«ýéiÁS“ÞûU ëX‰!¦¨†Q¤,©ü{ö(çy­ô"„‚¾>÷µIí“J¥äééI|>Ÿ?~¬Óy‘y$†˜¢›GÃèþ|* rww'[[[*((ÐyMPùKÁ*WÐ*‘Pž)‡"_‡@öõW†³³3ºw¬¬Š•½JKéÓÙ­ÚR)ÛÔõŸØŒ #°iÓ&0 ƒÉ“'C(Öx¾!Űå}—ct«ÑHÎOFðÎ`dKŒ_‘ÍXXŠHX÷Áîpâé#)¯¨Î(Î@ÿý‘V”†)í§`qïŽMs" 1yòärˆ6}Å6ðûÒO¯°Äµk×=z¼õ7Êb•Z%2þ\–JÃOž°5›×¯gsšO,ŒÔQ¸´´›7oŸÏÇ”)S4ºÆbŸÇÇoý>}ØœÛ?ƒYœi°ñM‰%‰„ei¼† “¿OFÑ­"õï d´sæ<ÄðæÃ±aЃÇ]5™“)S¦€ÏçcóæÍ(--ÕjüÜ3¹ÈȇC Ô«}×”²¼²á X©ƒV‰„% —bW– úìY6u.:èÜ™-¬ßW¡¦:<ˆŒŒ 2~~~]ch1L•#Ý·a_ÜJ¿…ÞÛ{#­(Í ÷0–$–E BÃe A¥„{cï‘2È)ÉA¿¿úáú³ëèÝ 7vß©q$mÐdNüýý‚ôôt:tH㱉‰ Øv_߀'Ðï ç ­ •H¨^AvݲeKøøø°év ýûYYÀŒÀùó€~‚‡&h#ª0†æ`뀣£"¸q0îfÞEïm½‘ZjðûK ËRf}¸õqCql1nÏ»^ÛzáJêt÷ëŽÞûö6†Ë*‹¦s¢‹X˜u( …× áÜÁÃôÛA«J¯óõõE‹-ô˱J­ÚIh¬ÇCpPˆ'—-D"`×.`íZÀÎΠ÷ªŒÛ·o#22Mš4A_-VêÆÚ1gocC£aHà<È~€^Ûzáq¾e† *ÃvVÏC³mÍÀwå#÷—\ØFÛb@£8õþ)¸+ol4“~ýú¡qãÆˆˆˆÀíÛ·k<Ÿ”„Ä…ÏWÏßèšyUÓëTX¥ƒV‰„ê]„J±Sƒ·žçAïut®\Fk_FWÖ¯_˜6møZĸ)† m„øûÝ¿1¢ù$ä& ×¶^HÊK2Úý ‰%Š„eI²OÂÚ¡ìîÍÅÇãÀ€p°5ì¢ãE4>ŸiÓ¦øï{Yé;Ó!¹'A­ÞµàÖWñ|Ïž=ØJ{¯"Vé ‹‹‹ÁÈ”$”ÀÎÛ6.ììûûï@׮蟞;;œ”ÉY§ŽáƯÔÔTüñÇprrÂĉµºÖØb˜À{FîÁ{­ÞCR^zþÑsô¯Îfl,U$€ÓþE?zà@£Hè™çlg$ÏL6ú}µ™“‰'ÂÑÑÛ¶mCjjÕá-¦”AÒ7I€€¥ú¯ž333qòäIxzz¢_¿~ze­X¥ƒvuu…4Q RáâÏ%%ì6íI“…¶«Vá½)S P(°oŸéº`/_¾¥¥¥˜1cÜ´Lß3…f÷Á_oÿ…q¯Ã“‚'èñGD§Dý¾ú`©"aÔ“(ôÞÞ™’LLï8ãƒÐWˆŒ=Hß•nÔ{k3'µkׯŒ3 “ɰbÅŠ*ÏKY“i’î!îpíª}¿ÁÙ»w/”J%Þ{ï=ØÚê^Ãê!+ܨB™G2I 1ÝŸr_ÿˆÚµc7žxyEDÑåË— uîÜYÿ{h@JJ …Brrr¢ÌÌL­¯¿~ýº¬ª…RASM%„‚„ß iûÍí&»·¶˜r^4å胣ä¸Ô‘ Z¶@½‘#WœKbž˜"]#©$¹Äh÷×vN233ÉÑÑ‘„B!¥¦¦V8^WLçíÏS¸]8Ý-2ˆ:u"mñ4Û¨bÜÝÝÕñg½ÂcÇ€öíÙÔ¹ž=ÙÿöèèØ±#š4i‚Ë—/#>>^_³kdÅŠÉd˜>}:˱4h©:P«w-ø~á E¾±oÅBYdœùÔvN<<<0}úôJWÑÄâ&Ç‘2h°¨›ëÖ¼¹,qqqˆŽŽF`` Þx㠽dzV¬ÒA+ ý38”J¶˜þ!@^0w.xýW¯–Çã© ˜ïܹSo»«ãéÓ§Ø´i1gÎÆ0µÆãñ0½ãtœzÿÜìݰòÒJ„ìA¾4ߤvÔ„¥ˆ„…²B¼³ÿ|-þ¶8ðîÌï^±þvÀÒÔ ª…¢›E¸÷þ=Òð×u™“9sæÀÑÑ›6m³gÿµH{¶ùòÎçÁñ5GøÎó5ˆ}ªçíý÷ß%³7TX¥ƒ...ÖÏAgfß}8;³~ø°©(6Ž;ÛÑ„ÈðŠ ÕêyÆŒ:­žó‰a}öÁÕÉWѳN><‰N[:!.;Î,¶T†%ˆ„ 9 èò{¼w Ýâò¤ËÞ|x¥çòmùhùwKˆEÈú' þ÷Èàöè2'žžž˜>}:¤R©z-K‘!a^Àšmm¾­þ.…ˆÔ„TÏß+ Ya z„ t±îE · 'F®e–Ë—‰||Øxs«VDÔxI—.]…‡‡ëhqõ¤¦¦’P($GGGbÏ–B¾4ŸBv…BAµ–×¢“ñ'Ím’Ep2þ$ÕZ^‹ êÿWÊ–dkt]q\1EºE’bzºÅ2 Vedd££#ÙÛÛSjj*Ý ¹Ebˆéἇ»‡X,&ÔµkWƒ©)\ Úd¥g¡4½¢F"Íû›6°ñå”¶àÑåË@``—ªvS-_®[ÿ·šøá‡ôŠ=«0÷Ž9¡ :Œÿuÿò¤y¸s fœ‰Ü¼!sÍ‹D.ÁÌ31pç@äIó0¯Û<üߘÿCmQm®whâ€V[gËCÜÔ8äŠs f›®sâéé‰O?ýR©¡„"ûX6DEhÚÀ`¶©ž3Uþõ+ Yá zÌà1$†˜n¿u[³ ŠŠˆÆŽeWͶ¶D6iQþP.—Sƒ €Á3îß¿OvvväèèHۜ쿳Ÿj¯¨MþHQO¢Ìm’I¹ôø5YÛ„ ª½¢6í¿³_籞n}Jbˆ)Ò-’ŠÐJÝÈÈÈ G‘#Ù–¶ó¶Snx®Áƾví €€’ËåWS¸´åÊhX$).èÔ Ø¹ðõe{N›h!<ØØØ`þ|VÌY¶l™N6WaêÔ©(--Å¢E‹àéé©×x–"†ÀÈ#;-ƒ› F\vºmí†a SÈLn‹)çE¦áaÿC÷?º#>'!!¸óÉŒl1Rç1½?ð†ï<_(r¸=è6¤O¤zÛ©Ïœ8K1^0rÈñ[ãßàÚSÿœgªçkþüù°©Dzå +\A÷oÚŸËý^C\î￉œÙ•s¿~DzÄwKJJÈËË‹x<Ý»wOçqʲmÛ6@­[·¦ÒÒR½Ç3”]†„aú=æwrþÞ™ j½¡µÉWÓ¦š—¨'QÔzCkB(Èù{gÚ³U¯Bõea” ÅŽŒe‹üûG‘$^¢×xºÎ‰¢PAWÛ\¥38Cµ mßn˜ø»wïÇ#ooo*)1^xuXÚ Ú*ô[þo‘bʋ̫ü„ÒR¢9sXÇ }ý5‘B¡÷}üñG@'NÔ{¬ÌÌLrww'tñâE½Ç³ts©÷¶Þ„PBA£ö¢G9Ìm–Ax”óˆÞÝÿ®ú³m¢¤Ü$ƒßGYª¤;cîbºèu‘ŠnfCˆ¦0J†n¿u›ÄÓ y>’‡‡eeeé=þ„ ­\¹ÒÖênƒ%a•º»swCL² YŃOŸõèÁ:f77¢cÇ vß‚‚rss#@@W®\Ñy†ahôèÑ€¦L™b0û,qÇ\Y”Œ’¶Æl%ï•Þ„PÝ·vôÅé/(·Äp1ÌÊ0Ö¼äHrè‹Ó_Ý·v„PP½ŸêÑÖ˜­¤dªh•fC÷§ÜgcÒµ#)ÿJ¾Nãh;'Œ’¡¸q$†˜.7¹L¥ÙìßäÉ“ 3F¯·…èèhäææF………:£/œƒ6)Ò-²ââüyv«6@ôúëD ¿Bûí·ß5kÖŒ$Ý^3W¯^MÈÇLJrŒÔÏÐ’)’ÑâðÅä°ÔA-¢­ŽZM…2ó=˜ÚP(+¤ÕQ«Õ"¨ãRGZ¾˜Šd¦YÑ2 C¿xHbˆ)Â)‚Òw§õ~ÊR%Ý—ÄÓ÷ å„Êœœòññ!´fÍÆ—H$Ô´iS@›6m2”Ù:Á9hÐ}ézç2+†!Z¹’H `ó¤IDFŠa1 CÁÁÁ€>ûì3­¯ #@@B¡®^½jPÛŠ‹Í¯ðkÃÓ‚§ôÑ?/”G¹.s¥Ù§f<ôa¨yy”óˆfŸšM®Ë\ ¡ þb>M:2É,Mu†¡¤¥I$æ‰I 1Ý›x…š‡ñ4E‘‚n fs/ù^ª´ÎÆÕ«WI(’@  sçÎilƒŠY³f 6XÌ^W8mº£;Ý›ð\äÈÏ'1‚uÌööD¿ÿnôû§¦¦’››Ðê ™ Ž;JX)‹%Š„šp+í;8Žl—تß°=ÃHœ(6ȫϼ0 CâD1 Û3Œø‹ù„Pí[wpÝJ»¥·mú’s6‡.z_T‡ ®kÖõZ“9)¸Z@ÑM£Õ¹KW½èQ Þ” ±ýçÎ#äææVi&SÃ9h0(iiÑíÛD¬snØ(&Æd6ìÚµ‹PíÚµ)22²Æó£¢¢¨N:€fÍše ­g…Ïèñ7TçÇ:jÁ-àçúìägžNr¥iòbåJ9…'†Óg'?£€ŸÔ¶Ôý±.…ŠCéYá3“Ø¡)¥™¥tk»Ê · §¸Oãôª„§,QRââD · '1Äôoð¿TšUs–ÑÌ™3 Õ­[—._¾\ãù‘‘‘ê…ÎîÝ»u¶×pº Ÿ~ú)RZZZ…c«V­¢>úˆFŽIééåclmÑ–2fþMäàÀ:ç"Çr†¡yóæ …´oß¾*Ïݽ{7 …B@Ó¦M3Zþßÿm”qMT.¥í7·S§ÍÔΡ ÷î4áÐÚg?%å&i¼º®i^†¡¤Ü$Úg??4^[VýtÞÒ™þ¼ù'IåRC|<£À0 ¥ü’BN¬£¶ §{Þ£â¸ÊC•͉¢XAOV?Q¯ÈÏ;œ§Ô_S5žg¹\NÓ¦M#dooO{öì©òܽ{÷ªŸ‰ùóçkö!MÀ°aÃÌmB9̾‚ž8qb]RR¢ž¨K—.ÑâÅ‹Ëo‡vT„D|>ÑÒ¥DJã©æ5ñË/¿ŸÏ'4jÔ(:pàI$’H$´}ûvu>ŸOk×®5jŒíСCFÛ\¤ä§Ð†+hÀ_Ô!ÕO­åµ¨×½h扙´5f+‰ÅtãÙ JÌM¤Ü’\u6Ń(·$—s鯳$NÓÖ˜­4óÄLêõG/u Õí[ð×Úpe¥ä§˜y´£4«”-zD‘µØb¾˜bzÄPââDÊ‹Ì#iŠ””¥J:xð ÉsåTt·ˆžýñŒbßýïˆéöðÛ:íZd†Ö¬Y£~&ºtéBÛ·o'‰DB …‚þý÷_úøãÕÏĺuëŒ0 ºóæ›ošÛ„r˜d«Nbbb…îÔãÆÃ˜1c B9Á¬¬,õ®:'00?ÿü³ÑÛÆËd¦ß¥glê»ÔÇ´7¦aÚÓP +Àɇ'qöÑYü›þ/n§ßÆùäó8Ÿ|¾ÒkyàÁÁÖÅ7Š[UßCd#BÇúѦnômØ4jÃVcbën‹€Åðã‹§ž"em ò#󑙯nG77á¦,ß±‡/ä£Îè:ð_àÇVºÕtæñx˜9s&š4i‚Ï>û QQQˆŠŠÂ„   T²õ­œœ°sçN :TçÏú*À#¢›Ú˜Ë€>øË—/GݺuÕ¿“ÉdxçwpäÈDEEáÌ™3X´h‘úx«V­PçyŸ@WWW¸ºn«©5“ŸŸÏÍE%póRnNþ#??ùùl óŒŒ ÄÆÆšÙ¢ÿ0«ƒþöÛo±sçNtéÒsæÌaÿþýX²d V­Z… 77¿üòK9ÎÁÁÁñ*`ö´¦LŸ>gΜADDDg½zõjܹsùùùX¿~½zuý*ðå—_"//………زe D¢ÿ Hµk×;w†@ ÀºuëÌh¥iH$˜4i\\\àææ¦.¼Ã0 >þøcØØØ@©TbÓ¦Mf¶ÔtT5'III|ˆýû÷cÖ¬Yê.ÌEEEؼy3ìììÌm®Q‘H$˜Ö¯_?“‰ÅXÇ4=h’Ø¿?V¯^‚‚˜’çô1v µŒˆˆ¼óÎ;±3f`ÇŽ¨ªª‚ƒƒ<<<’’bÄ(MƒÒÒR888; “CÔEQÀÛÛ(--… `Ö¬Yغu«q» “íAk>|x sª“„ÖÖÖèÔ©RSSQXXhŒðL 1ñ£Qm,]“ÂÂB¤¦¦¢K—.‚9›"&oк¸}kôž={®\¹b¬pLSNvQm,]“èèhêñge©¹Gr¡ª0½õfiК$!øùù.^¼h¬pL1ñ£Qm,]_ôîÝyy¸8ú"â^4½éºfiÐnnnÂk úÒ¥KÆ ÇdW‡éFÔEK×Dã~~~ÈùSÝák5¶•1CÒ‰Y´B¡þ»wïÞDƒÄÕaµ!ꢥk"t/?dȆD& Z_ܾ‹J—.]`gg‡‹/‚¤£2>–žø© Qm,Y’¸xñ"ìííá‘ãªÌ*¸<ìkWkc‡¦…YôíIB™L†ž={"//©©©FŒÊøXzâ§6D]´±dMRRRŸŸ¯ö¿ó­'´6rTº1Kƒ¾=IˆãÐ,=ñS¢.ÚX²&ºÆŸÝ&¸Õõ£a–}{’¨‡¶ô™–žø© Qm,YA÷ðê’è8ör„}'{#G¥³4èÛ“„€ØƒÖ`鉟ÚuÑÆ’5Ñtä|ò|˜nï0Sƒ¾=Iˆ­Á’?u!ê¢%k¢ñ Lwü0Sƒ¾=IžžžpwwÇ•+WPUUe¤¨Œ%'~êBÔEKÕ¤ªª 111ðp÷€U„lH$‹6hKMüÜ Qm,U“K—.A |á ÷ÉîÆ箘¥Aß™$ÔÛuîÜIII&·mMsa©‰Ÿ»!ê¢%jRPP€›7oÂ[â §–NhùXKc‡tWÌÒ u% êqèË—/7g8&ƒ¥&~‹6–¨‰Æ:±“zxÃÆôíÏd#<þ<^yåÌ™3}ôQsº’„€8m©‰Ÿ»!ê¢%j¢î„Nf1¼˜°AßÿýØ´i¶lÙ‚°°°çr ru¾ÆÒwW±ÔÄÏÝuÑÆ5¹¥ö…Îöáú¸«‘£©&kаoß>Œ;C† ©q<27UJ탖^¼ßR?wCÔEKÔä\è9À€Q µ5ië0é(Ÿyæ:t‘‘‘5¦Öe%eaÊÇS°ÿ~ìÝ»‹6mÚÀÞÞçÏŸIÄÆÆ rš¤È½|lïÞ½&‹)uÑ>e2±4Ç1’¸tíla‹~/ô«qݹsç°nÛ:¬^½Úä&HHžÐÇØÜÉ?ÿüƒƒ¢²²vvvX³fpΦ¿ øgÆ?Ùyd× 8‘‘‘HJJBûöí›;läFì têÑ Ý¥Ý] ©]ußôhÂQŒÞ1‹\Œì_²±uëVãz&Ûƒ=z4¾ùælÚ´©†9À^€ žxÅ5ÎYòŠBKLüÔQm,M“SÛNzvèYÜӋÓ1#`b÷ c…W+&kÐuÑÚª5æö›‹Œ’ ̘UÂ9Íô¡³gÏ+<£a‰‰Ÿú ꢥiv@=ÑàÇ”*%žx™%™˜×þsߌ^­˜¥A»¸¸`혵èåÑ ×ñEè¹"##žÑ°ÄÄO}uÑÆ’4Q–)«s6c˜p|Eè ^D/^X;z­±Â«³4蜜8X;`Ïä=p°vÀRùR„$…úôé+++œ9sÆâvù¶ÄÕaõAÔEKÒ$÷p.b•±°’X¡ï ¾€àÄ`|ô±à#öÖâ–WzC³’°‡{lzbTTaÚïÓY’ ;;;øùù!##)))FŽ´y±ÄÕaõAÔEKÒäÒ¶KÈCzvè ;;;d–dâÙ½ÏBE6=± =Ü{;ÄZ1Kƒ¾}%áÌ>31ûþÙH+NÃsûžƒR¥´ØaKKüÔQm,EE‘a‡þ~ô(UJLß;iÅi˜Ówfö™iäëÆ, úÎr£ëÇ­Æ£—‡,·Xƒ¶´ÄO}uÑÆR4ÉÞ›˜ÊÀÀÁ±,dŽÝ8??|;ö[#GwwÌÒ ï,7ê`í€ß§ü'', ^†*Oõ*Ã3gÎ#<£aI‰Ÿ† ꢥh’¾=qˆTxV`yðr8Ù8á·)¿ÁÁÚÁÈÑݳ4h]åF»µî†Í6ƒ >Šþ¶¶¶ˆŒŒ´¨D¡%%~‚¨‹6– IùÍräÏC¼4¶¶¶ø8úcÄ– [Эu7c‡W/ÌÒ k+7úŸûþƒ×x ¹U¹°ò²Bnn.›78#bI‰Ÿ† ê¢%h’±3iHC¡ªP핹xí×0å¾)Æ­Þ˜¥A×VnVŽ\‰!>CPÒZ=NmIãЖ’øi(¢.ÚÜëšDÆö ax£Ä½ù<„¯F~eäȆY´®= 5ØÈl°gò´èØðÓß?5WXFÇR? EÔE›{]“â³Å()Å•VWΜ±gÊXˬYÃ0KƒÖµ'áíx;{cÝœu€Ã!‡q6Õ2–}[Jâ§¡ˆºhs¯k’þs: D¢^À¶îÅuðjáeÌ…Y´®$áÌ16v6`*1q×Dd•d5CdÆÅ?AÔE›{YU• 鿦£JR…Ì¢LØØÙ`Æc3ŒV£0Kƒ®-Ix;VVVØ P$'&cêïS¡PÕ>v}/` ‰ŸÆ ê¢Í½¬IÖÁ,(³•8è{¨ ™Lfì°…Yt]IÂÛ8p À·ÄòD9Þ>ú¶!Ã2:÷zâ§±ˆºhs/k¸*p¶£zhSãæˆYt]IÂÛѬ(a;nönX¾?_øÙ¡•{=ñÓXD]´¹W5Ù²îaî(±+A—.]Tû€9b–}·$¡Í&þR<öLÙ™D†yæ!âV„!Ã3÷zâ§±ˆºhs/jq+ûVïƒÒO; þJ<Ñ ›ú$  k×®pvvFTT†·Ž5£× BY‰»'"¥ðÞ«tw/'~š‚¨‹6÷š&)…)xz÷Óxìüc€Þ/õƹsçàìì,ô¤Í“6ècÇŽaîܹ˜={6>ýôSáx}’„ •JÑ¿”––"66 -Ä‹ý^DZqžÞý4J«î­q¸{9ñÓD]´¹—4)­*ÅS»ž‚ô¦~7ý`×Ñ©n©(--Å€ •š´ÍÕ‰IG>bÄüïÿÃO?ý„   áx}“„@õãÍ™3g ‘H°aÜ m?‘©‘˜óÇœ{ªVǽœøi ¢.ÚÜ+šÄœ?æàlÚY¼|íe@›Ú+ˆÍyx0qƒÖðÓO?a„ Âÿ¯o’ Ro¦® k#³Á¾ÿìC‡–°;z7–/Óo°Fä^Mü4QmîM> þ»£w£‹S~üøµÓ¥K`VVVãÇÿMé'RÚ.·å©›§ô³19{ö¬±C0ID]´1wMNÝuÑÆÜ4QQ…9ÎApR0úµí‡]“wA¦T!ãýcP)á® „õ Q¼gΑhkoNééÀ?=˜aÁ$³4èú®$Ô ‘H0lØ0(•J„‡‡ë¼ÆÉÆ Mÿ >Î>Øyi'><þ¡>BmVîµÕaúBÔEsÓäÃãâ—K¿ ½K{üÕþ}8-zlÓ)ëÕOÞÒÀäÉ[ºJÞ|’ñããÞDÌÒ ë»’ðv† @÷0‡¯^8<ã0ZڵĊÐØxfc£c4÷Òê0}"ê¢9i²áôz|úZªlqè‡R´;øá´C ºÀ©C%Zd…¿ýÍ·[ó}7wÌÒ š$ꇾžî=ñÇ´?`#³Áƒ ±/f_£b4æšø14¢.Ú˜¼&$pþ<ö}0‹.‚­øc[zÆå?üø#R'mx}Ð ggÕßoÍ÷ÝÜ1Kƒnh’z÷î ggg„‡‡£²²²Îkö};ŸÙ ˜¾w:B’BgscމŸæ@ÔE“Õ$6ð÷zô@ÈÓ}1]¶°#º~ë[u¢ïèQT=5™û s–Ásº' ²²ááápvv†ŸŸŸß„þ0Kƒnh’d2† ‚²²²z¿Mî9ëÆ®C…²~€‹j³bn‰ŸæBÔE“ÒäÆ à‹/€ûïzô>ùòã0a† VÀ·.Ãä}±ÀÂ…@›6€´ŸÒÀJ¢ÍÌ69ª“gÏžEyy9zè!³ÝAåNÌÒ š$ÔPßa -Ä’‡—  ¢£wŒÆõ¼ëºosan‰ŸæBÔE£k’š |ó ðàƒ@§NÀûï.={âú²70æ wX+±äá%X0zi—RA¤nªžû¬á^ÞÌÔ “$nаì‘e˜×Ò‹Ó1rûH¤¥5êÞÍ9%~šQmŒ¢Iv6ðý÷À£íÚ¯¿„‡« úÃK—ˆ‘. ½< óúÏòG´‹™eíÍBùr¸>î Çû…ã÷¢A[;€ÆÐ˜$! ®leccƒÐÐP¨TªzÕ‰•H$Ø8n#rËrñû•ß1jÇ(Ï F+ûVŠÁ”––ÂÁÁÁØa˜¢.Ú4›&ÀþýÀ®]ÀÑ£€R©>îí L L› H$È-ËŨ­Ãq=ï:¦ôœ‚ã6BrÇ*?’¸¹R=~ÞþÝöÂq•J…“'OÂÖÖÖ¬÷ ¼³ìA7&Ivvv4hòòòpåÊ•z¿N&•aÇÄÙi$.g^ƸãPTQÔ¨ ‰É&~ŒŒ¨‹6Õ¤¤ؽ˜8ððfÍZµæÏBB€›7Õ«‰EE·s.g^ƨΣ°}âvȤÚãÈùÇòQU §¾Nh9¢¥p<::yyy4hlmm ÷Þš³4èÆ$ 54f˜l­l05C|† "%Oíz eUeŽÃ˜TâÇ„uÑFïšTTþ LŸ®®1mšºçlo_] #5ذ6¬ÆR벪2LØ5)â3ûþ³¶VºMöæ—Õ½çÛ{×÷âð`¦ÝØ$!Pý iøÔ9GGü=ýoômÓòD9&í™dRu;Œžø1QD]´Ñ‹& …ÚxçÌQ›òSO¿þª>7}ºÚ°32€Í›‘#+íÕ EžÙó ‚ƒÐ·M_ü=ýo8Ú8j]EQEÈ Ìƒ]';¸Or¯qNó}¾× Ú"ÊÞNaa!­­­éææF…BѨ62‹3ÙsCOœ¸k"+•ŽGDĬP*Éà`ò•WHw÷êò¶¶äĉäîÝdII½šªTTòé]Oþ`Ï =™YœYçõÑS£)‡œ·6ܪq\¡PÐÍÍÖÖÖ,**jô[#År£z¡±IBhÑ¢†ŠœœœF÷"ÜÝø| º¶êŠ€ØÌ˜…ªñ1é “_f$D]´i&$pú4°x1о=0|8°i—Œ lÛ¦î)ïÛüç?@=’ •3f`ì~tmÕÏÂÝѽÖëËÊù[&¬Ý­Ñfv›çΞ=‹œœ 6 NNNõ_f€Ytc“„ÆŒ8|øp£ÛhÛ¢-Ž¿p\;aOô¼°ÿ(UÊ&ÅÕTÄd˜nD]´¹«&$pé’zú[—.Àk֨Ǒ}T=].- 8x˜9h@^H¡R`fÀLì‰ÞƒN®pü…ãhÛ¢m¯Iþ:Pí^m™}Í䡿{¬ù^ßK˜¥A7%IèÇ  s;Ÿy¾.¾øåÒ/F7i1¦QmjÕ$>X¾èÕ èÝ[½™êõëê%ß|ܺ?Ì›§.€ß@”*%fퟅ_/ÿŠ-;àøÌãhçÜ®Î×TfV"}K:dŽ2xÍ÷Ò:/´Iσ¾uë>úè#\¾|§OŸŽ7%I~~~hÛ¶-ÂÃÑ——WW×F·åÛÒòäxdÛ#ØyI]¿cëÓ[a%m~i£¢¢„Š"J£KQ_вø2áËn”UTU¨þ_™£ v¾v°óµƒ­¯-ì:ØÁ®ƒZôm»ÎvZóQ͉ÛuQSC“›7ÕÓâvínö»ÿ~õlŒ©Sš|O…Jö¿ ” •¿ ‡oKß»¾.åÛ¨ÊUh÷z;X·²®q.77ðòòB¯^½š£©aÒÝ®];lÙ²cÇŽ­q¼±+ 5H$Œ3?ýô1eÊ”&µ×ѵ#‚^£ÛÅÎK;¡¤Û'nov“îáÚ·ÖÝBÎäåƒ íMdN2Èœd€H%€T­‡¢P’Ë%(¹¬=|dÓÖ.C]à2Ì-‡µ„£Ÿ#$2ó1lÑœµéçå|û­Ú”Oª>Ñ­ðì³jSÖ㓇B¥ÀóÏc×å]ðuñEЬ thÙᮯS+‘²!+ Ú½¡ÝÓ „J¥Â˜1c̺Q&mеqù²k×6­ ¥r €Ÿ°zõa¤¤4Í ÕtÄLU6HŮ˻p%¶ Ï;ü+‰a †Ûd•¡Õ™t¸\Ά$-v°T9Y£¤£ *<Pán ”»ÛCéh­{6²2lò*`[›¼rØf—Á1±L)FÖoYÈú-  p°B~wäõóDI'@j¼/IdfÆâúõÈÊºŠ‚‚¤¢°0åå…Él •Ê`ee[['¸¹u‚»{W´nÝÝЮ]XY™wQ÷úb[’‹.—ö¡[Ô.´ºzNPÿ€´ê€ø¾Ó×w²½z«?‡¡þ§¬ÄöÒ鸨؋V’Ž˜©:Žý[;ÔëµîòTxç);Àßí³Ó:ÿë¯ê •Ê1Mö“„f0Ín̘15þ?ð ]üþïLŸ%ÿþ÷ÙzË! !àEàJ_[Ç1—$b†ñ!ˆgDzSMk¯–c>8Ë÷É@Èù=¾§r¾¯9—yò)A¤Þîk»CÎY¸Îw°â0åÿÞw7Nñ?ø‡‘A@¥—÷V÷1Õ¿ûuFhMµü³ªãœæ_ øžÀqÅl¼cöásØÎMÎ|¨wµ> 0î|3ÙA†ý»ÉÎSÆþ ¦¶S?êùZ{\âne älƒP×EhKõ÷øVbŽ¢ÚKVñé§Ÿ6’ËéFBò<€>Føm¸+¥¥¥X¼x1:„'žxk×®…  š…éÓ·6¹ýo¾‚ÄÄ0¼ýöExyé¯~l*KF S‹ÿ³zsöÃV¢{ò}CqLȇ籛pŽÉ î)gk‡¼¾¨t·×Ë=´ .³áz6N ùP}¼ÜÓ¹ý=‘ó ”NÖu7Ò@Š‹³qæÌ6„…ý€¬¬xá¸Tj…öí¢sçáðòêo¸¸xÁÙ¹-ll@*•JeÊË } YYW‘}))„ÊÊê)gmÚÜ?¿‰2äe´lé­×÷Ð\È*ËÐ1æot‹Ú…Ž1êªPæè†«}&#¾ï4¤têXJ­O*X‚Í%Oáªò<¤Ý1ßñ\¤ÚI¾ÚhsèÚIBΠ6H~V{¸%5õ"¾úª:t‚×^;©—˜ÏŸŸ…­[·ê¥-½@3èAßÉøñãõÒŽ¿¿?@ƒ¯ IDAT𫯾ÒK{·“QœÁÞ›zþàÍC˜W–פöŠ/3jXåS9Oµ?Å[ßÞ¢¢¤z±ÍÙ³g›vƒ)¿UΛ«oòL¿3BlÁöÁŒ_ÏÒ„Ò&µ­R©ÌéÓ§ÓÆÆFèõ4ˆK—.e`` ‹‹‹ïÚN]º”••ñÈ‘#|ã7ؽ{wáVVVœ>}:OŸ>ݤ÷ÐlTTÏ=G:9U/ qv&_xÛÈhu#´Чˆ[·n%.X°@omêB¡TpîŸs Ðe… ƒnè'—óL_õxnH‹¦lJ¡JÙt“2&*…Š{2Ñ=B0ê+Ï_aÙÍ2–••ñ­·Þ¢••zÆ…·nÝjrà *•Š¿þú+ÛµkG´³³ãÇlا–Ë—É%KÈ.]ªMY"!~˜Ü¸‘Ìhظ®! ºDç΄?8ïÀ<*”ûû_.¦\"ghëPVTÕzÝüùó €Û¶mklÈ:±(ƒ¾qã7oÞÌo¾ù†ÁÁÁzkW_IB’LKK#vèÐA/½µºP©T\z|)áÚ,·áîË»kœ/Œ,äI¯“êžæðsµ&GjÃI† ªR1eS C=ÔC?ÚüÈ®­» cÌ_~ù%KK›–XÔ…>u)..æÒ¥KikkKlß¾=år¹ÞÚçµkägŸ‘~~Õ¦ ƒ‘_M&'ëå6úÔd÷åÝ´YnCøƒÉ?jÒ÷èÒÓ—(‡œÉkjŸ*•о¾¾À´´´FßKcЋ-â;ï¼Ãýû÷óŸþáš5k8sæL^¾|¹Émë[Ä|š-c¿ñôFJ?‘Râ/᪓«¨R©˜%$×bæÄPYazI@}QžWη}›VÿÎSh=g>=c’‰ÏÚ¸qã'NœH”H$|ï½÷XQ¡{¼ô®$'“«W“Ö4åÞ½ÉÏ?'ô¼žP©TüêäW„?(ýDÊMg65©½‚°õ %ŸST–ÕþYˆˆˆ’·úÆb º¶G?}<ê+I¨aÍš5À·ÞzK¯íÖÅþ˜ý´ÿÔžø\;g-å9å9“¾LjtÄT’„uqíÚ52D=L`kÇ%ƒ—ðŽQ9Ãÿ/œ9‡sô~OCê²cÇ:;;ûõëWÿ±ÝŒ rÃrذš¦Üµ+¹t)m°˜É¦kR¥¬âü¿çþ ý§öü#ö&µ§R©xîÑs”CÎÔ-©u^ûæ›o×®]Û¤{êÂb š$þùgá¿×­[§·võ½Ú'99Yx\5ô0Çí„ßç’AK(‡œGlŽ0iwR“Ú3µ$áí¨T*þðÃttt$0@ˆ·è|Ï<_=>ýÜ•Z³÷ÁкܸqƒC‡%ÚÛÛsÓ¦Mº?GyyäæÍäÈ‘¤TZmÊ>>äÛo“gϪ‚Í@S4)(/àØêÕ_y0âVÓ§¹eþ–)L#UUÕ®R©¤% oݺUëuÅ¢ ú›o¾áüùó9{ölþòË/zk×"j¾`aaazo[*…ŠÑÓÕ;D¸ðÿæýý6ú11¯g4EEEœ4iP&“ñã?fe¥ö.4YYÂü‰V'˜¶5­Y0›‚B¡àgŸ}&$;'Mš¤žXTDþò 9aim]mÊžžä¢EäÉ“ê©sfBb^"{mìEøƒ=Ö÷hдÑÚ¨*¬â)ïS”CÎÜÀºçLŸ:uŠ8lذ&ßWeÐ.\àèÑ£9~üx½æë3I¨aݺuÀ7ÞxCïm߉J¥bì¼XÊ!g˜o3â38òç‘BääÍ“jד„‰‰‰ìÝ»7°sçÎw]TP•_Ÿùqê!Èyþñó,½Ö´ÄasêrúôivîԉاeK&ÚÚV›²«+9w.yì˜z‘‰iŒ&¡I¡t_éNøƒ#ÙäÕ±®.¾J9äŒ~öîÃ:¯¿þ:ðÛo¿Õ˽ïÄ¢ ú¥—^bii)SRR8yòd½µkSRR(‘HèííM¥{4*•Š×Þ¼F9ä<Ùæ¤0¿¹RQÉ/fxlŽÚl°š‹ÐÐPº»» «5srê?¾œ2Ÿ=#„E:I_&™v±²’|8044Ô í“äe7„GøâKÚ«ã6ÙD«eV¡!ÒšR’póæÍ´¶¶æ˜ëÒ¸Êò—¹Û¨ìœés†…g¶lœ4 . yü89oéæVÝS¶³cå3ÏpÁ˜1@kkknÙ²Å014’újR©¨äƒ Ðj™U“gjÜŽJ©âÙ!gÕÁ~{÷ñä'Nyä½Åp'cÐ/½ô·mÛÆ¸¸8Þ¼y“|ã7xæÌ™&·m¨’€6l ¾úê«i?yM²°¥àtA­×Ý%þéáz×ð0…$aUUßxã ¡àÐwß}×ä6KbJª EIå¼úÆU*Šêÿƒ¯W]T*2,Œ|í5²mÛjS¶¶&Ç'wì «D¾ûî;a\zñâÅ&³§>š¤¥qØ–a„?è¾ÒÁ‰ú[Ë@’©?¦ªxû©³„†E‹7nܨ×8nÇb zåʕܹs'ß|óM¾üòËܰaCƒqëÂP"¦§§S*•²mÛ¶zÿ"¥nN×ó‚ï>v—”ŸÄ~ß÷#üA¯Õ^Aþóc&Nd‰³3 ð8zð”d7À tþ›;SL+æÛŽmÛ¶MXвvíZƒÜcÿÅýl÷u;>²âóXıfyoW–¨¹Û»o§²BYï×FEEÑÅÅ…ÖÖÖjÚÎ$·“W–Ç9Ì>Ïþþ,/\ª{_L}‘2ŸA² ;³$®a³Œ6oÞLœ>}º¢ÓÆÔ†8L֠뢹D Qïø1pà]¯­Ê«JeêmNn#Øwe=¿ò6¨Ý{eo“Û\¹r¥0NÚÔ™-MF¥"#"È7ÞP'÷4¦leEŽKnÛ¦NÞAn`.Ã:„ ‰Ûô_ÒMjì\CHHˆ°À¢E‹š”|U©TÜ{e¯°‘«çWžÜw¥ùƹ+s*ͳ`À€À'N :݈­ $Ô R©Ø«W¯zm‡¥™>tåù+Í›.4m9¥9œ0Sè1=õëS¼™³Áí©T*.Y²„èààÀ#GŽè;äúB^¼H~ðzœÆ”%òÑGÉï¿WO›«.Š"ãÄ ½éKO]byjóÍÛ®/QQQBÀY³f5júbR~'ü:Aø Ì ˜ÉœÒêU¬†N(++”<7\½CÊå)—ücxúôiaÕesþŠ­šSÄ7gÏž]ë59‡r„9¸•9 ¯Úf(þ¹ö°øÀñ3G® ]YïêxJ¥’¯¾ú*ÐÅÅE‡oVââÈeËÔ Fn_@òàƒä7ߨ˜4‚8öA­u4 ¹ê4qy¢z ~»S,Oi¸¦ÙÙÙ´³³c‹-XXØðò²MA4h=Ðܙօ  s~ï$v®ºèKô4ÃnòYêZIx%ó Gl!<òNÜ5‘×r®i]WQQÁÉ“'Ûµk×<«ÓÒÈuëÈ!Cjšr·n¤¿¿ºhQ¨ë=äŸÈgxWõÒã.'˜º%Õ¤zÓiiiÂ0ÛC=¤³Þµœk|z×ÓÂßvͼ’Y÷P›¡þ®šZ!N!,:_Ô¨6Þÿ}àÂ… õÝÝ Z4·ˆÉÉÉ´µµ¥££cR‡¹GsÕI'÷ЭŒ2*•Š¿EÿÆökÚ qÞüçMæ–ª”””ËÜ;wîÌè­Ö›œòÿ#GŒ¨¹j‡ä{ï‘çÏ7Ûª>E‰B½ËÍ¿½é £/°ì¦þV6•œœ4ˆØ·o_fff’$sKsùæ?o …´Ú¯iÏߢ3ÚLþ‰|õæ R9³6.QžžžNÚÙÙdSØ»!´h®$áíhŠÐ¿þúë$Õ_ê0_õ8fÆÃÕ§mõMü”V–ryðr:~æHøƒ®_¸òÓ#Ÿrè°¡B¹Pƒ”Ã,,$·o'ŸxB=ëBcÊmÛ’¯¿N†‡Ä”ë«Kþ©|Ft6UHù!ÅdzÓ………|ôÑG €Ýºwã‡Òõ W!¿°ûLO6Ñ õ€1’„¤úK:8”-Ñ’‰Äh»aÔF}?.\ §§'ðù矯u¥ZdJ$'ï™L‰¿„ð>sà‚¿0.h/ùÖ[¤Oµ)Ëdä¨Qä–-¤{@ºÐGBLY¡äõ®3ÈJÝ›Žz8ªÁµ%îFlV,ü½@Xd"ñ—pòžÉŒL‰Ôy½J¥â§Ÿ~J´³³ã_ýUï{5E“ÜÀ\u9]Èy}éõ&›ó¥K—(‘HèááÁ"#ÿ ‹­Œ%bÆuÁñÅ^‹ €ƒn–µú$""‚®®®ÀW^y¥^µâ³ãùòÏÿ¡ýÇVBnÔ pw°jø0rãFÒ€;-›EçŠxæþ3”CÎ « ƽפåâUÊ*îÙ/·?hÿ©=_þëeÆgׯùºuë€VVVܵkW£c©i?§1ØVmÎI_6}§o¥RÉ¡C‡ UüŒhÐzÀIBe™R(ü’ùO¦0/õ‹/¾höXjãn‰Ÿ#GŽÐÉɉøÎ;ïܽçsíùÙg¤Ÿ 0Û\1ôy×F0ïÕÞ\r|‰ÎE/¦‚¾WÍ)+•Lú2I]€þßaëK®7hÈëZÎ5.9¾„Þ«½-}¾öáŠ+˜]Òð9Ä[·n¥T*¥D"á?üp×몉²\ɸ—ãÔuL¤M›Jw;6læwW6câ¸6DƒÖÆH&­HR/ ž ÞyâÊ•+´µµ¥M£3éú¦®ÄÏúõë)“É€Ÿ~úiíæœœL®^MXsU_ïÞä矓 ¬RV1 &€cvŒ†?àÛ2Œ?Dþ =Vmd µj®2§’×Þ¾&ô(CÝB™¼&™ÊrÝO%¹¥¹ü!òÛ2LÐLâ/á˜cÀ*eÓr¿ÿþ;­­­ €«V­ªóÚ†hR–XÆÈ‘Â.5¹Çõó÷MJJ¢““e2Yó–¨Ñ õ@s‹X‘VÁ! ² ª1î¸jÕ*`¿~ýLâ×_UUU\°`P.ôçŸÖ¾(#ƒÜ°6¬¦)wíJ.]JF×¾Œ=1/‘Ë?f‡µÓ±^fÍ'y’?ŸÿÙ š e7ËÔÕ ÿ;æ¦.À¤P1¯,?Ÿÿ™Oþò¤Pþ`‡µø±üc&æ%ê5–Ç 5¥—.]Ú¤ña•JÅ̽™<ÑJý¤pvÈY½Õ+Q©T7nhÕ{7&¢AëæNjí®¾^s¾B¡àC=Dô÷÷oÖ˜tqgâ'//#GŽŠÕ¨H——GnÞLŽYs©µùöÛäÙ³ ZÕ§T)œÌyæ +ÜàZ-³âÈŸGòÛˆoy=÷º¾Þjƒh®½‹/óâ„‹B9Ó=Þ{8îéq´^b-¬Øœw`ƒƒkìÆ®oNœ8!Ô”ž6mšÎ"KwÓ¤ìfY÷rõõ«TVê/æõë×»víÊÒRÓYK ´hNË’ÊdÄç¥D¯^½JZYY5›Ô‡«W¯²{÷îÀ^½z©ëj‘¿üBN˜@Z[W›²§'¹hyò¤^6P­TTò`üAþ÷ÿ “jþuû¶\Ä?bÿ¸gz×yeyü#ö.:¸ˆÝ¾íÆ^szq]ûu‚¹t9È#‹Ž°8µîjtúäܹsôõõ%öîÝ› õzJ¡bòÚd†8©§Ð…u cÎ?ÚU›Bhh(­¬¬hccÃððp½¶ÝTLÍ %$ÏèÓäÍ ›‘3f`ÇŽÍr¯øùñHÝ” ß%¾è¸¼£ÎkÖ¯_E‹ÁÇÇáááðòòj–Øî¤´´Æ3Ï<ƒÜÜ\Œ7¿<÷ZüñpàPV¦¾ØÕ˜<˜6 >0ІœJ•§’Oá@ü¾v—2/ ç$ O›>xÈç!<ØîA<Ðîtví¬÷Mh5ºè’HÈK@Ä­„Ý ÃÉ䓸~…kü<ü0¦óŒ/×_]‘³?P <ŸóD»×ÛÁ©·“^â©‹ììlL›6 ÇŽƒ««+~ýõWŒ=€¶&TY¿e!qy"J¯”B"“Àçmø.õ…ÌAŸ´´4ôïßiiiøá‡0wî\½µ­fÍšeð{‚IôÂ… qôèQ„„„ÀÓÓS8>qâDüþ·*Þ9R)' †u+kבÄóÏ?;wâþûïGHHZ´haðøî$::Ä|…B7{öÄ—7oBV\¬¾ÀÉ xúiµ) ØØ4{Œ)…)¼ˆã‰Ç!¿!Grar™ºæûiIDATó®v®èÛ¶/úxöA/^èéÞÝ[wGK»–¾gll,ºwïÞà×å—ç#6;W²®àræe\ȸ€siçWžWã:g<ÚñQ<Öá1<Þéqx;{×8_v£ )ߦ íÇ4(‹”€–Ã[Â}ª;Ü'ºÃ¦áþ …|ð¾úê+H$|þùçx÷Ýw‡îÝ»ƒJ"sW&’>MBil)Àe˜ º®ïª÷‘ÒÒRŒ9§N‹/¾ˆÿýïzm_ˆÝ@fÏž/¾ø¢†A7—ˆW]EÊú´¿=:}Þ©Îk+++1fÌÈårŒ5 ýõ¬­uº!HˆÇ¬É“zéllð_°³ÆW›ò¸q€½}³ÅT’ò“p2ù$"R"q+2. \Q®u]k‡ÖèäÚ Zv€³¼[x£Sx8zÀÍÁ ®v®p¶u†£#¬¥Ö:{á$Q¥ªBIe + ‘Wž‡œÒd–d"½8)E)H.LFb~"rS–£Õ†•úxöÁíÀÞà!Ÿ‡àÛÒ·^ïUQ¨@úO鸵îʯÿû%jCô˜âÖÏ´†­—mì'»wïÆœ9sPZZŠñãÇcÕ‚U°:f…ÌÝ™¨H®¸<ì‚w@ËG[ä)æÉ'ŸÄñãÇ1hÐ ÃÎÎN¯÷ТAëàÆ˜?~cÏ?ÿ<¦OŸŽÙ³gãË/¿„‡‡‡pîÉ'ŸÄ SEj":E@b%ÁàÄÁ°n}w³ÍÏÏÇСC±cÇbÏž=pr2à£, †‡ãK–`±\Žýl·²BÏ1cÔ¦›úÐç¶Yцî+Ýé´È‰.+\Øbq ¶þ´5½V{±Ý[íØgSöÿ¬?Çþ4–/¼À™frõ©Õ\õç*Æ2¹ ™g"Ï4Ë{S)U<ýëi^zõÃ|Ãø=¾§rnÃ6’âé^§¹wÂ^¦lJaØaÌÏ`Ez#OGÖÚÞå³—™q*ƒi?¥qÿôý<÷È9îpÞÁC8ÄC8ÄQE)¤À!†066Ö`·2D˜±‘mRŸ«˜˜FEE1 €«V­2Z!¶Ú0‰tm,_¾;wîă>ˆ7ß|½zõ`ø$aEšº÷ )08q0lÜ6F˜——‡§žz 'Nœ@‡°}ûv :´iAÅÆ»v»v¡ ._X @7lß¶ ÷=ü°Þ’a÷úL’(Š,B¾<E§‹PxºP~ÐB ظÛÀª¥”eJ¨JTP–*¡*Óý„ µ“ÂÑÏ­Ÿj iˆJ‚ páÂØÚÚâ£>ÂâÅ‹õ:ìŒiÓ¦!==ýû÷ÇáÇѺuk½µoÄ´0ô¯ÜÕ7®R9¯½ÕøåËeeeœ:u*P"‘pÑ¢E /sý:¹bÙ§ °à—[ý»"ÐÚÚš‹/æ‘6Ëþfˆ9ëR‘VÁ¬?³xý£ëŒ™à ã.0²$Oµ;%nÒ,7mÊ0ß0FtàùQçyíkLÿ%ÅÑÅTUÕœÓÃÊÊJ®X±‚¶¶¶@OOO~þùçM.÷™››Ë·ß~[X¹:wî\–©ÔlC1µivfiІ±"½‚ÁöÁ ¶fEzE“ÚR©Tüù矅âDmÛ¶ågŸ}Ƭ¬:vÿNI!×®%&*ž¸ÐՕ@©TÊ9sæ01Q¿«ÐDÌ •JEE‰¢É¥Oãââ8eÊJ$`‹-øöÛoóâÅ‹ Z‰˜››ËU«V ŸwnݺµI±57¢AëC®$¼öÖµ&oÝs'iiiœ:uªð°³³ã¤I“¸nÝ:ž?ž9ññTlÜHÕðáLð'€‹]\Øþßa(“É8uêTÆÆÆê¼)-”1%D]´Ñ¥I||<çÍ›Gá3çååÅÙ³gs×®]¼pá™——G…BÁÜÜ\†……ñÇäøñã…: R©”sçÎeJJŠÞYÓ ZJÄŠÌ ;3Ø.¸I%$k#>>ž .¤ã¿=á;ÿYë8€Ã† ãÆkì(."b(RSS¹lÙ2>øàƒ”J¥:?“ºþµjÕŠsçÎ5¹:éÿßÞ½ÇVUå{ÿžž>)ôôAŸ¶B¡ˆ&Dg®¼ yYˆ„J!—Ì Æ‘›£Qá4ñš«p‰%”‡€F  EsyH­Òdp⌅É@F´-miéûÐÓÓ–žsöýcÛÓÇZGZhÏÞëôûIúk·‡Õ/§¿nÖo¯½ÃlúÞ®2ˆËå–×­ÙSÓƒû^¸aÉC=ꤔ¼÷ØcøïòrüõÌœw¹ðWuV+š#"Ђû'NÄÄ_>222°`Á¤¦¦èõUi†ùsýZ&ÉÉÉØ²e ¶lÙ‚ææf¡¨¨7nÜ€Ýn÷~DDD`òäɘn±èkÉYYÀï°cŠÍ09æ"b&jP²@e“°£² '‚„Õ ¾?ñÇõeŠO>þõ¯žñ™3õ¢¼b`Ð} »±&Ç\DÌD Jè¡lÞØuš[CÊÆX#úÝ9¬¢B_º8rè½f÷›ßèEyÕ*`üø!›Ë½âœs15(Y ‡ªIènsãÆÞ°[’óËÙom-PP å z>yòdàÙgõ¢lÒ7wii)×%˜‹ˆ™¨AÉ=TM›ß„«Ù…„å6„ý߇zQþæýŠ @?;ÎÊÒ?~X_g61þÀÉ13Qƒ’z(š„šÝŽªmW„ µp-pâŠ~ 9Y?KÎÊ}ÔôE¹76~䘋ˆ™¨AÉë ïºIØÞ?¬XæøÅpÞA.#*ºذøúk ²ر˜>]©â è13Qƒ’gЃjÞ¾ |ù¥¾|qò$ðËT«‚ÿúÊÀ¶ î!ÀÆs15(y}Ç&¡Ëë×IIúνÇ·Xµ û ÑäþB“C1vÛü€(Îw‡ùÂ\DÌD JžAK›„ðí·=»úêêôñÐP}7_V–þtëÑ£QûF9 •#é?“¢äï()6~䘋ˆ™¨Á´º¦¦¯¾ú*ÂÂÂàt:ñþûï{oeèmjš~}ò‘#ú&’ÊJ}ÜjÕoF”•¥ß#ºgû¶æÑP{ ô‡$¿~OÃ9æ"b&j0mNNNÆÁƒ¹¹¹¸zõª÷¡±m55À–-za¾vMÿ‹˜3G/ÊË— ò]-_· £¼¶96ŒšXoPî“c."f¢Sè²²2äääô[³f ²³³qñâEܺuË[œÀV\¬ßÎÐ/…ËÊV®pcûš÷kÉ듇î0 þÀÉ13Q„fâG^k7nÔºººúŒ?¡ÉÊÒ>Û½[;~ü¸¦iúSŠÛÚÚ4MëyÞZÿ±ÛM·µC>Ô¾ó¥æjsùü}º÷I/½ô&L˜X·n:4è׬Ϋƿÿôo¤lLÁ»ÊéQ¸ÛÚ2\L±Ä!3qâD444HÝíNBïòÆoy`ãÇæ"b&jPò³»ÙIØZÚ Ç%"ŽÄèߎ†Y»Ã䘋ˆ™¨AÉ}7·­ÙßÓ¼ãMùÅÆs15(Y {»Qw»u®CPX³‡iVÆãî09æ"b&jP²@öv£ '಻0ö™±‰ ŒmÝ2Ü&Ç\DÌD JèÁ6 ½9ØÍét=Sb."f¢% ô`š„í?µ£å›„Gôƒxb·‚Øø‘c."f¢% ô`š„7?º HZ—KP`6»±ñ#Ç\DÌD Jè6 5MÃÍOôÈÍÁnlüÈ13Qƒ’z MBÇ%ÚlǘßADFÄ0ÏÊxlüÈ13Qƒ’z MºOô{B'<+¿³] aãG޹ˆ˜‰”,Ðij uGê °jdh6~䘋ˆ™¨AÉ=&á­ ·ÐYÙ‰è9Ñ»/̳2?rÌEÄLÔ dH“°»9˜52Ξ6~|a."f¢% ôš„šKC}A=,Áįˆ÷Ó¬ŒÇÆs15(Y ïÔ$l.nFW}bÄ dlàníî9æ"b&jP²@ß©I8Ò®ÞèÆÆs15(Y ­Ièéð þÓz…aìÓcý8+ã±ñ#Ç\DÌD Jè_k6i‚û–qKâeÚÆ 6~䘋ˆ™¨Á”¬££›6m‚ÅbAkk+8€°°žKå~­Iè½zc„-olüøÂ\DÌD ¦<ƒÇž={ŸŸØØXTTTô9î«Ièv¸ÑøE#¬c¬ˆ]멚 ?rÌEÄLÔ`øtYYrrrúŒ­Y³S§NÅÛo¿úúzdddô9î«IØp²žv×&Âa¶9›Õõë×¹¶(Á\DÌD †ŸA§§§ãôéÓ}>²³³1eÊ|ôÑG˜;w.Ξ=ÛçkZ[[qôèQâĉ€~ø‡õ3íšÿ¨ñŽuŸ)t¯¹òÓÌÅLcÌE{ðÁM3£Ç.^¼ˆÂÂB¼ûî»°Ûí0‹¦i—L5z"½ýüóÏØ¹s'<ššš——‡˜˜ïñ¥K—â‹/¾èó5.» ‰ÿ ‚£‚1³f&‚B ÿÝãw¥¥¥\[”`."f"·nÝ::tÈèix¾Ä!3aÂìܹÓçqY“°ét´. qKãFdqØøñ…¹ˆ˜‰”¬d²&aÃÉq×>÷ÆÆs15(Y û7 =·=h<Õˆ ð Ä,ˆññU»Ã䘋ˆ™¨AÉÝ'aËù¸o¹³ ÖÈ‘wõF7vå嘋ˆ™¨AÉÝ'aãIýÏ#yyàî0_˜‹ˆ™¨AÉÝ»I¨i>o,@ÜS{Va bãG޹ˆ˜‰”,н›„Ž‹tVv"jfBC œ•ñØø‘c."f¢% tï&!¯ÞèÁÆs15(Y {7 ¹þ܃9æ"b&jP²@w7 ÛËÚáø‡£…Q“G<+ã±ñ#Ç\DÌD Jèî&aãç<{î9æ"b&jP²@w7 »×ŸãžÙWotcãG޹ˆ˜‰”,ÐmmmèjꂽĎÐÄPDM2zJ¦ÀÆs15(Y m6šN5Asë7G²YŒž’)°ñ#Ç\DÌD JèÆÆF^^'ÁÆs15(Y ccbÑt¦ A£‚=/Úèé˜?rÌEÄLÔ dvV9áv¸»(vD>ÚÊ6~䘋ˆ™¨AÉÝRÖ€Ëý±ñ#Ç\DÌD Jè›!@·„—×õÆÆs15˜º@¿ùæ›ÈÌÌÆkÚk`{̆±!Ìʼº K}13‘3ÛCcM[ Ï;‡ŒŒ é1 ,\Þ°Z¹/Ã\DÌDÎlÚð‡Æ–••!''§ÏXvv6JKK±}ûv|ðÁÂ׸áf–èìì4z ¦Ä\DÌD MÓ.˜jôDz+((ÀÙ³g1fÌbÏž=X¸p¡÷ø”)S@ß´ÒÿX#•ÝngÌEÄLzØívï™s]]._¾lðŒz˜²@÷¶xñbœ:uÊèiùé t·^xçÎCII ûÛ±c®\¹»ÝŽ]»vyÏ®G‚W^y---hmmÅþýûá=6mÚ4̘1V«yyyÎÒ?œN'Ö¯_¨¨(ÄÄÄà­·Þx<lذÁÁÁp»ÝØ»w¯Á3õ_™”——cÉ’%˜3gzè!¼øâ‹ÏÔ¿ªªª°uëV\¾|ß}÷wÜlïÓ6 ûËËËìY³„ñŽŽ”””`ÿþýÈÍÍE~~¾³3Fyy9ìv;òóóñÔSO¡   Ïñ¨¨(¸\.ÄÇÇ4Cÿ:vì–-[†üü|477{¯õ-))Á¤I“°{÷n¤§§£¤¤Äà™ú¯L, l6RRR ž¥ÿ¥¦¦âÀ}žo ˜ï½bx“°?YÓpíÚµX½z5ýÕ[CCƒ·7•••þ™¨ŸÉr™={6ÒÒÒãÇGqqqŸãçÏŸ¼öÚkøê«¯0oÞ<ÿLÖ UUUxâ‰'ô¼î¿ÿ~TUU!55€žS ¾Gd|e2nÜ8\¸p‹-Bff&"## ž­ñÌö^1]NOOÇéÓ§}×4­ÏŸãããQ[[ ¨¨¨ð¬@#Ë¥¼¼¼ÏY}}ïIIIhmmö9--- ˜5k***¼?hiii¸pá=§Ù³g9M¿ò•I·   Øl6tuu4Cs1Û{E™5è7Þx‡ÆÌ™3±yófhš†‚‚lÛ¶ Û·oÇÕ«WÑÜÜŒ÷Þ{OX£d/¿ü2ìv;öíÛ‡k×®¡  ›6mÂæÍ› ‡Ã}ûö!44°Ÿzît:ñÜsÏ!::£GÆÄ‰‘––†'Ÿ|Ï?ÿ<ÂÃÃÑÙÙiøº¢?ùÊ$22ü1Ün7ÒÓÓñúë¯=U¿r:ÈÍÍÅ™3g™™‰iÓ¦™ò½¢L&"i”i4,ÐDD&ÅM©¨¨[·nEyy9V­Z%4—‰TÀMiþüù°Z­X»v-víÚ%\žI¤h XÕÕÕ°Ùl|z)‹šÒÞ½{1cÆ :t¹¹¹p¹\FO‰hÐx™‘Iñ šˆÈ¤X ‰ˆLŠšˆÈ¤X ‰ˆLŠšˆÈ¤X ‰ˆLŠšˆÈ¤X ‰ˆLŠšˆÈ¤X ‰ˆLŠšˆÈ¤X ‰ˆLêÿ¯yfK<ëwIEND®B`‚mpmath-1.0.0/doc/source/plots/chebyu.py000066400000000000000000000003361316273626600200530ustar00rootroot00000000000000# Chebyshev polynomials U_n(x) on [-1,1] for n=0,1,2,3,4 f0 = lambda x: chebyu(0,x) f1 = lambda x: chebyu(1,x) f2 = lambda x: chebyu(2,x) f3 = lambda x: chebyu(3,x) f4 = lambda x: chebyu(4,x) plot([f0,f1,f2,f3,f4],[-1,1]) mpmath-1.0.0/doc/source/plots/coulombf.png000066400000000000000000001037721316273626600205460ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxÕúÇ¿»é=$!Ò©”H¯"UDE,¨¨\ÄkA,—ŸŠT¯rUDšÁJ—zM6@zï éeS¶œß'“²Ù2»;»ÉÂ|ž'ÏÂÎÌ™sæÌ~ç÷}Ï9BÈß|ÁÃÃÃÃÓ«0çA=]ž®{º<<<<<Êᚇ‡‡§— 4O/…hž^ /Ð<<<<½^ yxxxz)¼@óðððôRxæáááé¥ðÍÃÃÃÓKᚇ‡‡§— 4O/…hž^ /Ð<<<<½^ yxxxz)¼@óðððôRxæáááé¥ðÍÃÃÃÓKᚇ‡‡§— 4O/…hž^ /Ð<<<<½^ yxxxz)¼@óðððôRxæáááé¥ðÍÃÃÃÓK1ïé èBLL ØÓÕ0UUUpqqééjŒ»¹}wsÛ㵯¥¸õ×ë!­‘ÌìÌ`áns'sÈ›ä5ÈÐZÜ BæØ²‡]”Þç½uëâââô.‡3!‰ÄÄ1bDOWÁ ¬[·®§«`PîæöÝÍm#Äðí“Ëä$ëÿ²H,bI,b‰hŒˆÔ^®UºoS~I-œµ:KbKR¥¹D®×ù'Nœ¨×ñ\c’.[[Ûž®‚Añööîé*”»¹}wsÛöOÖ(ÃíÇn#ÿË|˜;›#ò÷H >?Ž#•îoícu!ˆ¹KOK”üT‚[snAÖ(3XI 4!¤§«`Pd²»çSÆÝܾ»¹m€áÚ'­‘"qB"*TÀ&Ä1WcÐ÷±¾µl˜+1° ³EåáJ$?™ "×M#œœœt:ÎP˜¤@ûùùõt Êc=ÖÓU0(wsûîæ¶†iŸ¬I†¤‡“P_§ñNTlCµ{K¶ö³Æ‹C`;À•‡*‘¿:_§ºð­@aa!^|ñE >¼Ë÷¹¹¹ˆŒŒÄ¿ÿýo¬]»¶Ë6©TjÌ*±XÜÓU0(wsûîæ¶Ü·H RžNAí¹Z8 u@ô¡hX¸XèT–…‹"„ÐVˆœsP}ªšÓºö=.ÐÞÞÞØ²e \]]»|/àä䄆†ôë×¯Ë¶ÆÆFcVÑèäçëöô7îæöÝÍm¸o_Æ’ êÖµAô‘h˜;è—Xfe‡›r ù©d´·pTÓž¡ÇZ~~~¸té¶oߎ7våÞöÂ5aaa=]ƒr7·ïnnÀmûÊ÷–£ø‡bXzXbÐñA°ìkÉI¹ó=Ðïå~Ü‘ ë,NÊì)z­@3…B899A"‘´—’’‚½{÷âÀøã?©©©í¯_"‘Ȥ¿»xñb¯©‹!¾‰D½¦.|Û´ûn×®]œ”W™\‰´—ÒŽt„ï Gns.§unýW+äžr”ï)ǹŸÏ©=6!!Àš5kP[[‹Þ„€’`POU@,ã­·Þ±cÇðàƒbÈ!ðññvîÜ ™L†€€|ðÁíÇ<ÿüóضm[OU™‡‡Gä9Ç%¢îj|ßóEàç9Oé/¥H}.öCìqßõû 0ÓœÒÛ´¥ÇGÚÚÚâÇTºmüøñJ¿¿‚„ws®·!Û'‘Ip$ãJJÑ"£þÇ@”{”AΧßwšÉý(uWëà8Òþ+ý9©—2<æ{ xC1ê®Ô¡dK ú-ê§ù ^F ´.Ü A»ٗiˆöµH[°-qV_\ÜšÜnÛx;æì@ÇþœžW¾ïÔS}²ù_æÃÌÑ á»Ã!´0œ—U  xm0DÃEÈy?îO¸ÃÜÑ´$Ï´jÛ$4m¸n_FefìžÌªLÀôàéç;ÖæÖ¨o©Çž[{p:ç4ý8ÛælÃÌЙœž¿3|ß©FZ+EÊs)ü466ÖL9ŽÃáñœÊv”¡øÇbø.ó5ø9¹¤× •QYYÙÓU0(Lãn…Ëö]/ºŽÑ[F#³*Sƒ¦âú¢ë8:ÿ(Þ÷>Þõ>¾ÿcÜxù–ŒX‚ʦJÌÚ3 __úš³ó+Â÷jr?ÎEkI+<žñ€û €¥7ùÎÚàûÔµ‘ÿß|™éÌåc’}/ ïfôm_MsM»8¯¼%Þû.«Iuàɨ'ñƈ7PÙT‰¹¿ÍE³´Y¯º(Â÷]wÊ~)CíÅZضG¿—{&“Âq„#œïwFSF*TôHtÁ$šš6ú´ONäxvÿ³È¨ÊÀì³ñÁø4¤ÀWS¾ÂŸ1ˆ+ŽÃê «u®‹2ø¾ëŠ´FЬÿÐÑ|!ëC 0g÷ 5íVô—¦ó5I惄¦>íûêâW8”~¡®¡Ø1g‡F·†2,Ì,°óѰ4³Ä×—¾FYw~I¾ïº’óQ$åx¾à §Ñ=kXõ™Öv‘v¨¿^†Ä†­ [LR ù ¡i£kû²«³±âì X™Yaÿûád­ûÞßÙ¯{’F|rîËQ„ï»P´¾æÎæ\m˜Ñ‚Ú àù¢' t{i׆&)Ð|дÑ5ÐôúÑ×Ñ,mÆ{cßCDß½ë±|Ür8Z9bSü&dTfè]À÷‘¤¿šNƒ«`énüÀ 2<æ{@`&@Ù®2È%½?åÎ$šš6º´oê~É8‚`—`üߨÿ㤮¶®xw̻ʥX~z9'eò}G)û¥ u—ê`?Äý÷ž!Ö––p™áÉ ªŽVõtu4b’Í MmÛ×ÐÚ€7޽Ø0c¬Í­9«Ë#ß@‡þø-ù7$–&ê]ßw€¼EŽœr!߇°š¤È˜x>ßææØÖûÝ&)Ð|дѶ}+ά@a]!žˆ|S‚¦pZ[ [ügô®oл<¾ï€’ŸJÐ’ß×Ù®=T†ëC®0w1Gå¡JH*$šèALR ù ¡i£Mû’Ê’ðí•oá`é€ÿMûŸAê³`ðØZØbWÒ.Ô4×èUÖ½Þw2± y«è €OŒQ%­Z áñ´ˆ„ lOïYh’Í MÖ&B°äØȈ ŸNüý ãËt¶vÆüèùKÄØqc‡^eÝë}Wô}ZK[áþ„;ìÚ©VÚc*n“h>HhÚ°mßéœÓ8“{ánáxuø«­Ó+Ã^@Ý„è>ø^î;i” óHhÚ°ißñ¬ã¸Tp Ñîј1×µêjEëʽÚw’J Ö@`!€ÿGþÆ­”ޏÏw§9Ñ;{oN´I 4$4m4µ‚b©õ¼òþ•: çÖ…¹sáj㊩P!ÖmB{µï ¾*€¬^¯E^°öç. ÒXyY¡Ï´>”KP«_pØP˜¤@÷ê ¡X \¸¤¤:Öó^4Î8ŒëÅ×1Äsæ„Í1R­kskÌ‹œ‘aÊ~ʸû®µ´…k !´Âo¹_ÔJwܧ ÜùãN×D9&)н2HØÒ,] ¸»ãÆ@x8pì˜ÖEÝ˦ÎÖó'?a=(WÌ‹œØ—¼O§ãïžËû<ò&9ú¿ÚVý¬z Vºã:Ûs*TôÊy¢MR {]°ºšŠòwßÑÿÏž Œdf>lÙ¢Uq÷r é@ê$”&`X¿ax(ä!#ÖŠ2Îw<ì¯} W‹®âBþ|ué+Dÿ[å·ô._nsÜÐÿÕþpÊx Ù²Å$º× ““©ßÙÜؽptì¾ÏOÏ=”–ï¾ËªØ{1Р}µíwF¿Ó#Ö3Ãß1ð²÷™Ü3ZOæ/õ]îŠ\Ï2˜;ë—§.‘I0mç4\-ºŠÑ>£q}Ñu¤¿–ŽÇ#G~m>f홥sf&,=,ò}œFõ2×)LT {EP*ž~hj>ù„úœU±f àâB­íÜ\Eß‹¦ÄÒDœÊ9…ç<öHÔª¡@ˆÇ#×ÉÍq¯ô]ã­F”í.ƒ…»¼_÷Ö»ÜMñ›p­èFôãÏÇÐ~C₽s÷â‰È'[“‹g÷?«×(OSÄ$ºW ÷ínÜÆŒ–-S¿¯›ðÚkÔÕ±Aó ˆ{-Ðÿ»L'BZ:r)Ì„fÆ®R7æEÐlŽß’Óê¸{¥ïr>Îà÷žÌìõë¯ê¦j||æc À¦Y›`oÙ1‡‡@ À–‡·`€ëË<†Ãìc9w&)Ð=$”ËÏ?§ÿþì3ÀŒÅ ºx1u…lÞLs¥Õp¯šŠêаçÖ8[;ãÅ!/öP­º2ÊgÜlÝp!ÿZÙÏÕp/ô]}|=*þ¬€U+NVé^u~*›*±0f!z ì¶ÝÖÂk¦®¼óÏ;Èz÷¡\b’ÝãA¿ÿnߦY&°;¦_?4¬®víR»ë½h€u×ÖA*—âå¡/w±žz¡@ˆ)S ‘Kp&÷ ëãî…¾Ëù€NÆï÷¡„ÖúIHVUÖ^] ; ;|:ñS•ûÍ™I“V™†ý©º "h¦PSSÊËË‘™™‰„„œ={‡­[† DêŠag 1=$$XµŠþ{ùrš­Á–%K€={€µkiV‡ŠcÅb1lm{÷d3úй} ­ Ø¿B ¼>üõ®YW¦MÞ[{p<ë8f†ÎduÌÝÞw%'KPu¬ ÖÖí °êÃòÓË!‘Kðñ„ái¯¼úè#ܺu ×®]kÿ^.—cñâÅ077‡L&æM›º×cAÂôtàÌ:(åÑGu+cÞ<à•W€#GhŠžM·]D"Ñ]íËdÚ·?e?rkr19p2yêºSq1>_VL @Ó—.üü€9Æ™DijÐT$•'៬ðÒ}/iÜ¿Gû®¦øïýûéœ0o¿ÖéӕЍ*1UÜVWW×=µ­Àóš«cii ggçö?''§.Ÿ¿fþŠÂÖB|4õ# Úm‡n¢š[“‹ÀïQåP…µK×êžñÓÜLãH@Ÿ>º•azT ½½½±eË<¨à*8wîBBB°lÙ2|ñÅ8wîÆß¾½Ç‚„Û¶ÑÏ^X<•beE­Â?þNŸê>ßÄÝ,Îm!k.ÓÈüÛ£Þî¾ÓÛoSq~þyšùbfF…zÖ,ú]R’QÜÓ‚¦aÍå58žuœ•@¢ï!¨««Cee¥ê¿òrTŸ8A@Mj*jÏC“çutt„··7œa/·nÎ}œøT œûtˆ©2ñurr‚µµêiG3«2ñõº¯ìŒ¯­`=0ÉßÙ“'ãDö Ï:Ž!3´oØúõôþjiœœhLé•W´#6½ÒÅQXXoošüîïï‚‚‚.Ûõ ÊåtÐ_F5Äžž¥ÖÊdÀŽ´,ÐùüèdJü<¨T {"ÐDpò$ý ¢Ï ÜK,#¡"W‹®"Ê=ªû°îS§€_ú÷Ö­ëHcœ9xë-àÿ£®9åú2Öw,¬„Ö8œ| ~”â©'ÌÕ\šúN"‘ ªªJ½ØVV¢¢¢¢ýßUUUZßóææp–Já À), ÎÞÞJET•À:88À¬íºB_<ЀÀð}Ü}FîÙ¸ºsçÒß[vÞÜ x&ú­Gþ+æ_8‘}›E›µèé˜++`âDàÜ9ú;;*½ BH"éa¦OŸÞåÿgΜ!Ÿþ9!„Ï?ÿœœ={¶ËöQ£F‘_ý•ìß¿Ÿüþûï„BRRRHcc#!„øøx¥ßµ´2cF  •¤xòÐC„ÄÅi>–=JRÒ8i’úýØ|wê!B!IéÛ—464tÛO$é-¾“Ë yúé®×%*Š  sÞ””2ñ‹‰+@Vý±ªû~cÆF€_í^^e%‰·µ%ÄÒ’¤ÄÆôºBÈ«¯¦<9™`<¶//BNŸN! ¤®®Žø€,^¼˜¼þúë䡇"“'O&C‡%ýúõ#ŽŽŽ€V–––ÄÍÍDEE‘aƑٳg“E‹‘矞|õÕWdÕªUä·Ï?'ò{Ÿ>¤øæM’@Ù´‰Ä„ LR’“u¾¿»HŽâ(‰×þ{[µ*…XZvÜ/}ûrà»ò’““IÀW+@œ> uUÕV×/]‰ÙËf¤º©šý±'NF B¬¬Hü÷ßÓï¶o'"€ì·²"_¿û.™3géMô¨@766’Å‹???òòË/“7’#G޹\Nþõ¯‘×^{,Z´¨Ûq ,Ðé|¯¾J@ˆ¿?!›62`ýÿ‹/²8xÞ<ºóž=:»cÇÒòââ¸)Oþ÷?ZwwBÖ¯'dÜ8úÿ™3 ‘˹?_Fe¬ϯ=I³¤¹ëÆÂBB„BBúõ#D*U^ÀûïÓ .]ÊYär9©©©!iiiäìÙ³dß¾}dñâµXN̼F„ƒØöó#@$17÷$–––Z‹­££# $Æ #Ó§O'óçÏ'K–,!+W®$ßÿ=Ù³gùçŸH||<ÉÍÍ%õõõDΦ&M¢×cófÅF2|8Ývà€n×E&'×¢®‘XÄ’Ê£•„Bâãi™›òÑG„<ÿ<=…›!ååšË¼\p™`Ȩͣtª!„,Ø¿€`Èï·gГOÒŠ®\Ùõû?¦ß?òˆÎÚb(z…­-3gÎÔú˜¤$zSõéC5€B**éÛ—öÍ¥Kj®¬$ÄÒ’ggBššt«´"_~IOüñÇÝ61O|cP\Lˆµ5ý»v~×Ð@HH­ÞÏ?sÎyßÍ#XòÙÙϺo\½šžxÙ2Õ”•ÑÎôô$D&S¹›\.'uuu$##ƒœ?žüþûïäûï¿'~ø!Y´h™={6>|8ñóó#ÖÖÖZˆ­9±·÷ dܸqdΜ9dáÂ…dÙ²edÉ’%dóæÍdÿþýäܹsäöíÛ¤´´”´¶¶rpå”pá½^"‘tß~äÝ>x°NOÛ²_ËH,bIüèx"—ËÉÕ«ñä¾ûh‘6Ð}ärB^x~÷ÚkšË\rt Á õ×Ök]†=I{V€,ük!»D"ZA//zƒwF"!dÅ Bª«yæ].â´i´¾ý¶ë÷[·Òï‡Wsÿ®[Gwzå­Ï«’”ZfL weêÀoÐjüç?]¿¿|™~ ÚÕ…ŠÆ bó™ ±ù̆T4VtÝ(—FO|û¶Ê2HÖÈ‘ä"@þ\µŠlذ|üñÇdñâÅdΜ9dÔ¨Q$ €ØÚÚ²\@ÐîF˜4i™?>?þ-ü—Œ½9r„¸-u#‚¥rîZ. åÄÅ…º:Î0ʸi“òír9!C†Ð}˜'0KäR9¹v•Ä"–Tª"„²k-jÔ¨®ÏÆ;wqt¤VuzºúrC×…¬)ª+Òª>©h¬ •BÒMvo/½D+¾v­ÚÝxæ€ùóçkµff‡Ø(22!ÑÑîß1cèW¯êVaeÈå„Ór ºlb|g†¦¤„ZÎvvÊ_M™7ç?ÿäýŒ`9È+‡»?ìÄgÏ’4€œ %[·n%Ÿ|ò yå•WÈ£>JÆŒC‚‚‚ˆ½½=kK×ÅÅ…DDD‰'’§žzŠ,]º”¬^½šlݺ•=z”ˆD"RTTÔͺmm%ÄÛ»ësâùÏ·¿R/X@·}ñE÷ö«ï!„Ô×Óγ±!¤¶Võ~kײ7o;Q²£„Ä"–$ÜŸÐþÝ”)Ôï|ôh÷ý?ÿœžfñbÕeæT笉ڥU]”1róH‚ 7Koªß±¡B¬¬©ªR»+/Р­#Ÿ¹q>üPùöõëéö…ÊÞ–JK ññáÞ!ûæ›ôÄ?üÐåë””nÏ£‚¯¾¢§óMåÛ¢ÛÇÓÿ\---$5=•¸¼âB0äß!¯¼ò ™5kožúýfζn¥s!=ýtÛ—õõtäFŸ>tØ1רÙ11Àµk@V À8# ÷졟óçÓ±72™ ùùùÈÌÌDFF233‘™™‰72dãƒZ•–#àéé ¥¾¾¾ðððÀ©ÜS˜¶s†÷Ž# tœpò$ýÔfý£o¾Iý|ù%'#Áþú H€G¡ÓwwfŒÏ$–&âbþEÌë‹×_§ë6|ûmÇ £½|™Î+>{6»E“&ÑOæ:«¡äç4ç5Ãu¦+‡ÓeÜ23«W   ®úØÉ“é(óØX ®®ë*pñ%ñ¨n®Æ¤€I°µÐ –P ÄÔ ©Ø´§sNãá°‡»ïtî18k»yÛ{£0J IDAT&)ÐÚŒªÚ»—~>þ¸úýx€öß?ÿ„´ýÖ§;ožá†ÕGúüùv6ÔHB©Tм¼ LŸ®}}n•ßÂñ¬ãðsòãá"3=³kûJKig…†Ò… ´á±Ç¨@<¨·@·´Ðëáä¤|¢Á1¾c .@»@Ÿ9Ó!ÐF›nTá™<™ ô©Sí÷š"Å‹ÑRÔ·GÜà0Ä5X˜5&ÆÏ ¾}Œ@Ÿ¬›@3Sо1â ˜ Í»·ïÌú©õÌðÀôóâEíUàúu:ÉÙäÉÊ_˜||áíè›e7Q×R‡‰éû{l,ðá‡t£ˆsE ÑÉ/BBØ7y2ðÝwT9•´L,Cþù€ð_éßþ}J Èñ¾û€éÓ5·O™7¥¾¥— /£¯m_¥ËZ銻;ÂÜÂZ‘ŠòÆr¸Û¹wl,.nÝ¢3!j3QH/Â$šít£ÿM?5¹7¦N>þ˜z6Þ|¨­¥¾+;;kÊ77 <œþ JKOÏnSVBP\\ÜE„“’’’’‚ÖÖ®¾a@€àà` 8ÑÑÑˆŠŠBhh(aoO—“zã#ŠÑÉL6xä] FWoiC)vÞÜ G+G,ŒY@É”œŒ@«˜[-ƒ¶¶Ô'+“éågºcé1Æv˜2…]û|}éËÐíÛí·4ÎäžT.Å” ) ¸]io´Ïh¤V¤ârÁå®nŽ'觉ZÏ€‰ 4› aCuKöëG l6ŒÆÏŸ$ûagÞáqã¨@_¸Ì ???>|—/_Æ•+W ‰P]]Ýí077·v!ŽŽŽÆÀ; mݽ^^4–)ii€6Fâ†ëÐ*kÅëÃ_‡£µ8»ýÀ™ é"ÐÀÈ‘têÖ¤$`ð`íËhãìYúÙifÛn0}±à"¦MÅøñÔ¸z•êŸQ‚„º¾¶;8Ðkuñ"µ,££Û7Ië¥Èÿ2þ+ü»ƼœŒ˾}“&Q«ûÔ)ˆ¾Pp0Ñ_‡·$ Œö- [p±àbW>~œ~òm\Ø ¯_§ÕèÑì &ÀñûorÈþü B!µ  ˆL&Ã-__\pùÃqùý÷‘‘‘Ñe+++ÄÄÄtâèèhxxxh=Uã;TÇ‚‚TƉ”òÐCT a/Ðb‰®o€™À KF,éø¾s ­¸˜þ’Ãé©¥ cÆP¾pAg–J©ÙÙ©«h÷CçSÕš8‘ ô™3T  $$„Z†A‡/A&O¦ =y²‹@­+‚¤Bg=`Öµþ¨¶bÔ(öí›<øázšùó«…W#½Gj_g 0}r©àRÇ—r9½Nº=ø{ &¹ª7› ᥶¾=Z»²§NîC<¬+Šè¿o_j¨šŠŠ :tË—/Ç<''' þàüÀŽÔTdddÀÏÏÏ>û,6lØ€„„444 >>Û¶mÃÛo¿)S¦ÀÓÓSkqtw÷2ÓV9Âþ˜7v ²©G>_§Ž§A~~~ÇNºdo(ÂøñõðC‹D@c#íru ;=ÂÎÂW ¯@*—¶ÿö™fti›!HK èÚ–..Ú?y2ýìä –ÖJQðuføäße÷âbºâXd$=ÛöMœHŸ!'O™׋¯ÃÁÒánáÚ×Y¡®¡p±qA\qZ¤mËk%&R_ýèÑ€}ïX)^LÒ‚f$¼|™~Ž¥]ÙS§eà.{C"‘àòåË8zô(Ž;†ÄÄÄ.Ûíìì0qâDŒŠ‹Ã¨†ŒÌÊ‚[@€ÞçU#$Ll-C‡RëòêUv®^9‘·WLéHãB Gޤ«.0¦ž0þguî 0šc¤÷HœÊ9…›e71x` úô¡©vÍÍFž:E?Ù¦×)2|8íȳgi·… ¾.€´Z ¯…^° îº[g÷À¾}}úÐ{æúuàðõ[KĘ0I÷%ªÔ 1Ê{g†¨D„Q>£:@&ìÞLÔ‚Ö$”Ë©@[YiŸyåë ̳¤]9VI^% ðÓO?áÑG…««+&L˜€Õ«W#11xî¹çðÃ? 115558}ú4VÍœ‰™„À-="‘H§ó²áôiú©í[Ÿ™â74P#N‡Ó#½2ã|Çah¿¡]¶uiŸ>þgGGšYXHs|u€­@]ÝB!um´´Ð{Î}€¦ÔÔ×KKÚÈÆF >-…-(XS¡µ~uÏt`žyŒ@kÓ>ÆXßw‘º7FxЭÎ,ã£àæ¸JÏifFÄ$ZS0=¨ª¢Op++- OOGHk2n"×*ƒX"“Épúôi¼óÎ;ˆŠŠ‚¯¯/^zé%ìß¿R©3fÌÀÚµk‘‘‘ììllß¾/¿ü2 sf¸ÚÈ6ß\\œÁMÅÅT\ÃÃiàO[† £Ÿ×¯kÞ÷W:¦(ÒÞ¾ÂB ;›úBÝÜ´¯PgÁÒÁŠ–Éh`ØÊ jGɵŸÊ§k>4cüÇÆ!HG?‡U¿Ÿ:FŒh/+{y6äMrx¿é kßîk* ´6íc\ä—ò¯FöçÞÿÌ0Ú‡ú2™>A\õ±p0x©'1I‡¦ ¡®þgt¬/€˜A\GŠ™"„$&&bçÎØ½{7JKKÛ·…‡‡cúôé˜>}:ƯvñÌv˜)!Á`&}Ò®­nYFQ‰grÏ Ø%³t²¶·±uê(ÆŽ¥‹^¼Øi¬>;nÝ¢ bO˜Àî>Ò{$„a»0Æÿ™3Ö×Ól__:žZWÚĽþŸ”,ƒ…»|ßí1®¯ïÈ„bÒˆµi߈T#‹„T  iAë? æBs\*¸RVA~>fÂþgÀDZSP/n=xsà×}sAAvíÚ…;wâöíÛ¡Pˆ©S§âÑGÅ´iÓàïï¯ýy™ì‘È`£ÑËW×·cƺdtṴî7G¾©4çµ½}ññô‹ûîÓ­Ba¥C I¯S—ÿÜG+GD»GãFÙ ä׿#*Ê..ô­:++ÑÑòC‹D4‹ƒyRêÊ}÷È:MóO> €¹cw)¸z•º ÇŽíÈ„ÒæÞ´·‚£jᜠ?Ç€®ƒH8ÆÖÂC<‡àzñuä\<„@@ÿëÔ 0I‡¦ !#ÐÚQZ \¾ ¹/n†´ë‡\.Ç¡C‡0iÒ$øùùá½÷ÞÃíÛ·1dȬY³………8~ü8/^¬›84G54ÈÉA˜‡‡neh !~êúÖçïOWp¾qhU>w ë ±÷ö^¸Ø¸`Á åfvûœKöñ¡–åÍ›t€‘0¯ñÚ¸+ÇúÒwþ ù ÒkÚÚ bÀ !î ðôD¥Ë,Ô4†Â6Ü^ •û»Ý€öAPïôihi8÷C»›#©-ÕHßëÔ 0IV$¬ª¢oAA€Ö:wð @„ÌAD¤EE­X»v;ˆY³fáôéÓðööƻヒ[·nA$á­·Þ‚—.]e´)§ˆ™±‡Cär*ж¶ô9  5JZ[©*cݵuÊ¥xyè˰³T>`FÄX‚ññ4h¥[…3†–«ÉÄW€ypicp)ú¡™‡Þþý 2¯@zZ†r‰Y­Ï‚J 0Wž®©L µ ‚ZR÷†}ñúryÛƒŸèžA]ð ½ôro4L››oá7žÇíÛ·1jÔ(8p¹¹¹øâ‹/©Ã 4Ѐ‰ihà¼èœ:ýã Aúͺȸ9” ë[ê±1n#,Í,ñÚ°×T–C³-**h€Ålx¬`X ©Œê¨¯§SiÐI’Ø¢8`…èêj  ZÏ7Žâ‹ÑÔà‚>¸‹¥ûÈåô9gg×e<‹ÖAÐ{šM!Î0œÿ™É‘b:Wì A?§¡1IV$ÔÙÿ\WrâvÙÚ"dáB\¿þ€B„†ÎÄùóçqéÒ%<üðà xÉÚn~±– ôuo00Æ›²*nMÜŠÚ–Z<ý4¼T¿UˆÅâ÷—VãÇ×B ™7m 2'%•'¡®¥®ýºÆÅ‰µ+ˆ-UUtÎð:õ¢ŽHk¤È[™‚ð#ñJ- ôúzš½Øy^l±˜}û!H_¤–Ƚ¬û|¶8ÀÉÒ7]$EE66šê嘤@« 2¿MmŒ[›6á~‰ψÅ(--Å”)OH€1¶ó;ž!iû•çÇ)ÿÑè×­hA·H[ðõ¥¯Ðà :òóó¹õ?30“}ãýÔe„ø(ïQ9â‹ãJÝG‰‰ù˵/K#=ÐòVåAR)×Ó}`ìŽr`®‹¢ªÍHÉ̪LT7WÁª:YéVÚ†´F `°…š,€ô‘Á†=™‘0IV$¼y“*cëH$X¶l/[†s¢ýüpîÜ9üõט™EÁZ©WWÀ×a99t ‡0®C}Ót=¨½T‹;¿ÝU+ø¼ÝÖXF야&2tç! ]裩mèQ𠃯QL‚¬ÈÀ'3&)Ъ‚„ÌM¥I ·mÛ†ñãÇ£¨¨Ï=÷Îß?|n“#©¹ GL ħw3SW£^™WB ‘I°êü*À‡ã?du¼˜LÂ¥{ƒA NO§ ¤Ûz³ÎÖÎv FVuª›ªÛN-æ^ KKé°øðpFÆÉ%r¤ÿ;ðyÌlÛÒxTÜàuut~PMÏï Û a“¤ 7ÊnÀÃÎŽ¢Ã .й¹Ϫƒ•L€„²DB |BÃc’­*HÈF ×¯_^xR©ß}÷¶mٛÇ©uÒy5ôƒ|€S š)Š«i"¯DJ °+irjr0-h롼ù̘sCä©j!Ðú¸7:»9¢£¡0Ÿ{fü :v`á·…h¼Ù§ñNðx¶Óà7xRýT–¥Æ6H(*A*—b„÷¸¹ àçGçé·àœÄDXÈ(¹ªšªPPW`À““hUABæÆR%лvíÂk¯½+++=zK–, .Ž:™ÇŽí6÷ó AT·µH Ð//„¹»SMK 'Er•ÁÁàáAÝÉ©R|vî3ÀÇ>f}|³f¢!,èÀ@jeÞ¸M霴W›@ÇÃÚˆˆkw)qFj*ýÔ´ò±šršûq. Ø8 ëânnÔ·£TUgè° 2î f‚¤˜·à8´Ò•¶ë4Äžfp$”!*i`LR • år*ÐööÊׇ÷¸ê&ðõ¥ïñœZÑŒ@k9Ìš‚ŒW2 o’Ã÷=ßn+¥ }@H—9dU¥Ø샄¢Rºß°þ4`Á<‹ êæ`º­OJyî” ssé\Åô5³ë¶´´4<ùä“Édضmf1ËXüù'ý·ŠÉùÃÛ€`~#Æ †™ƒ_yu5tÜÝŸ¨a2`<µžÙdn´S^Ž˜šza¹2°psB7[Xtô±.( 'OŽÑtjían>-+zç·;¨:V›Pø½§bUkÆ*ïd ¨h¶A›eÔ äA a‚ÙÊa:’ÎsšXjÌW_Ã`’­,H¨êµ¬µµóçχX,ÆÊ•+ñÌ3ÏtlLN22軿ŠIŽ˜û79™ƒŠ³DÌäÂq`n0n}¬De´ïÜÒ$œˆq~ZÌ2”œLƒ :¼®³†…@—–Òõ##õ{N8Z9b€ëäÖä¢R\‰ðð¶4/.·”š#Èúi™odB …ÐZÅO]ágÞD”¿‰² ¶ÊZ‘Z‘ ;ôµ£nCæÙ’’º ÚAh;; Œœ¼ÝS( ªò?¯X±ñññ3f –/_Þu£÷ƒÁo,%ä3sýr ÐÌ›«>V¢"2¹ ç@­ç B-¬gHN¦APCÌeÂÀB ¹po00nŽø’x8;Ó g–bu5uh«_,Qì÷²ÑZÚ Ïžè3±ê™~h«pv6õ ØýM`$L­H…T.í2`) €> ö;*-¥~È`gí€n_›J±úÕ—z;=*Ðb±O?ý4^~ùe¼÷Þ{íßçææ"22ÿþ÷¿±víÚnÇ) *³ Ï;‡Õ«WÃÁÁ¿üò Ìg b!Ð=aA‡MžLgî¹qƒ.÷¡Œ@ÀAÅÚØ´ùM)@Þ8TŠXN¢Ìpû6ÂÃZБ‘tF(5­j¤œ.0¸â8Œ†¾}é‹‹Åç5Ãt þçÚ˵(þ±®úZê@Ì“»íWçÞ ÕÐ\¤2j-E{t$Q››ÓY+*èç0n ¶}ˆ'ˆ›º›£Gzß¾}˜3g~üñGTWW·?œœœÐÐЀ~ýúu;NYP1±^*•⥗^!ëׯG€âB¬yyÔB VkÍ1÷£1-hQBu»45±[P é4ýUç)FilmÄ{§èÃÔöÊ*¤$ ´›{"9"À°mcC¨ÅÅ€ŠQ§:ºu•Ò9ÕN$!,ŒNÉš“£ÙÚVTÞ"GúK´ÓƒÖÁÂMƒÕíèx{Ó€js³ÆTU6A›å´h÷®£\ ú6ªHeÚÔÝ=*Ð………ðööøùù¡   ýß—.]ÂöíÛ±qãÆn. Å ¡XL-_ߎ)#wî܉´´4<ðÀ]ýÎ mS‹â‘GÔŽR°·§åfg³žÞAobbb:r^õts0úΕ@¯¹¼EõE˜1ÆA,ÖrÖädÄXXÐôCÂ<T¨óàââÍbˆ× @\1]O’ÓÀ2S–tÎò4Þj„óÎðxŽå„è‘‘Ôùœ–¦ñÍ‚M± çd1ª@{ñ­7>>>ÈkˉÍËËkk¡P'''H$]ÇÕçååaïÞ½8pàþøã$'„¤"2’0®^½Š•+W>üðC‚ö'jj* tìßO-¹Géøè¾€þýE 8~\ý~\}WQQ Bë—˜¨sy •• OO1õ¯_Q]¾8ð,dørò—pw§û±¾.—/C\^qHDmAC\?±X „‡Óë—œ¬t¿ääTXZŠáã£ÿyí-í @~E>òîäÁÞžîwîíHM¥í Óxlì†X¬)@‘C|ðU~ß+;6"¢ýZݸ‘ @Œðpåç¸Ô6Ÿ¯ºò’Ê“ ( Ü-¼Ë~ÖÖt¿‹ Ðçm.QÛèA»Z;@Bs¡5›€`Íš5¨5ô”{ÚBI$=Dcc#yúé§É+¯¼B–-[F6nÜHŽ9BΞ=K-ZD^|ñEòé§Ÿv;nΜ9]þ¿u+!!ï½Gÿ¿aÀ̜9Sù‰ËË  ñò"D&ÓXÏ¥Kiù»wkÛBÝHII!$!žôÁu.'-1a7õZ°Á e'–BùúkZþW_±,àìYB’2}:7RÇž=´rK—vÛTQA7EEqwºgÿ|–`Ȧc›ÈÑ£´ü^à àÐPZXMÚÝZï´’‹^I,bIÙ¾2íαy3!‘½ÿ±° ÄÃCõ®)))j‹ªW¬ û>¬Û¶ÄDÚ”iÓ´«+üü‹Û¿òþŸ7®’ÆÖFÖÅ,X°€ûºéA.kkk‹]»v)Ý6~üx•Ç) ;ÇQšššðÙg4ÃàÓO?U^ÀÁƒô•îᇕ‡ªÐð¶Ì9a´!´nz¤p Œ/ŽÇöÛÑ×¶/–£Ù0Œëžuµmǰ‘†_þHÝû4×~y€ú¡¹ù ÊlÊ0¥ml½]­­Ô7ܯŸÚå^!HûWZKZáù‚'Ü×rqÖ¶\w‰úûES0©¼-@¨àèõ ð;‹iL)  Ë$ýC<‡ °®7Ënb¤·î9`’ivŠAÂÎB´iÓ&ãñÇÇ`U9T,²7:cìT;‘HDo´À@êàÕq®š‚7ÓIø?ø)­èἆc¥ 5j`ˆÌ–û¼hªÝÉ‹'áëK»/5•¦çêLf&ÍâÑ Š%›JPñWl‚m²6Dûó(dr¨{pi 2T”Í ncC54?Ÿ*ã æ‰«p?´)gr˜¤@+ ™\HÁ¦M› {Î3C}=pâµH˜{P¸ N{ †1Qu|2pe)îOÝóùçå……1 Û¿÷ñ¡AT`QPÛÛ@ŒÂ¤T¡óNA ¸ 2 ö ¡@ˆ,ë,…´ìêj ¼\BY ñnLiDæ›™˜ ¾+fö:,8éì ôïÛâLX¢Eíý¢)H¨Î‚:~Kz&'uEÅuº29LR ;$”ɨ¡Ñ·/“#Brr2† ‚AªÂÐÇŽÑIˆfÎd=„ÌÕpw§™"#ÌÞ>ZKÉ0\màÂRl‘¶à?'þX3u Ì…^1€þàêëél˜INÌÍ!V’:iT¤SpÙv–vˆèÂÊB”6”¶k…^n -o‘#åéÈ›äð_éÇᎺŸ+"B¹ ¡HW{¿hI¨,º3yÕ Ð¼md:§ÝååQW]h(°cÇÀ‚ T¬¥{ƒ!"mYZWWkÚGk)ŒòÒ–´4:øL1\Ö][‡ìêlÌ™©AS»mgíæ¨ª¢£½BB_Zª{…´A…‚ÚܵÔ_ÏIþ¼†è¬eYhHl€Óx'øþŸ¯'B{GF YíƒKÝHB9‘#©< ö–öðwöWºAZ¡C}|á`é€ä;É&;7´I tç a‡{C‚Ý»wÃÌÌ O=õ”ò[[Çé4uÓ§kuNcú¡Û1z c¬­¥#„ƒ‚º®Ê¬ y5yXyv%ÌføzÊ×J÷a(d.\d¤VëÚé…’N“É蛫+àâÂíé†ö ¸Ñ+œäB«É.Ù\‚¢µE°pµ@ø/á˜é°â@gÚ:2Jp[í”êú.¯& ­ ˆr‚P \ZŒiA Dô@CkòkµIÖï=˜¤@w2Ö!ÇPQQ|îî*¢Ø§OÓñúÓ¦vvZÓ˜C¾Û1aa:grèë&„`ÑÁEhhmÀ²1ËÞW¹Çúº0mˆˆÐj];½PR¹‚êáâÚzÚº„ùÖÛÅÁLþcoOÂíDÍÙ¤ÿ; "ÿŒ„µ¯µ~Ð@¯Õ0)RÙR IDATÛdµž?u}§.@ÈÀ¹@Ëåôfwv¦~H"ÝéƒçöCN£g8LR ;  :=}; îß§ŸZº7ãZÐí=29ôõ?ÿœð3NdŸ@¸[8>š zB$ÖnrF$#"´Z×N/”ø áfä1fýÌW§JYq1 n†…uéÚ”Õ„ÛÝ‘„þ çñΜÔ=Ó²ÍÅ!Pÿ¤U×wš„ÕQOO7â$žSP@SR®Cdß6.çÚhtRK± qqáì쌙ª2Äb`ß>êÞxøa­ÏiL ºK FÇ$l}º°®oÿó6„!¶>¼Öæª-4??úјÉÁ\¸ÈHÖëÚé“Í!ÎÊj_ÆPþg°±°A¸s8JJP%)nO)S±B›z”¼¶Kk¥Hš•I¥ÞozÃk¡7RÚÅðBquª@]ß1´:¨±#•R‘Ö Ôvæ-hãÑ9H˜–C"iżyó`m­BL Vèœ9ô1®%žžô÷žšªq%%½éˆÑ1P¨«‹ƒ‚—¾„º–:¼5ê-ë …ôW[KWWÉíÛt†¹ÖëÚqBDD‡ã†ÉîL¨9½à…L_h…‚ÿ™È’ŸJ†8E —.úŠÛ¹LÒÒ€dDÀL.m¿VÊP×wí´Š NßF5 4ïâ0>L°±‘¦wÙÙÕÖ3l§.¨s¨Yæ©©IËÉt K Fëáz]…hÇ8šy¡®¡øäþOX£ñí¢¦†¾²VVÆ ÝÔÀ.˜4Œ®æW§Ÿ)OÖ²Pu´ ¶¶ˆØ¡PPôt*ÐÔÞkªú®YÚŒôÊtôwèõÑWc t‡þp´rDòdȉ-+`’Í 郞@*…P(T=<¼°Né×`Ö"Ôc XéˆÑ!ºsÜDa\µäTç`éñ¥@€-³·ÀƂ݈?Ïæ—ØÖ£ njžN¶ÁÁ†9}¥=…Rìò¿ÌGá7…°pµ@ôÁh˜;r?CCz:pšßÖTõ#€ê„ Æh@€È¾‘KÄÈ«Éãà„ÆÅ$š Rk(ÍÍEˆ‰‰Q¹Ú7vî¤Ògž¡¯Ù:b¬99ºb˜à‡]TD-}&Pņfi3æþ65Í5xgô;ã;†õù4ZÐüÏûuí8¡S§1S£úûVV†9ݼÉó`&0CBI‚þmf†üÖÈ~7fvfˆú+ 6Ü“g֌ͶÒlA«ê;MT:Ãét¬©©—3e7‡I 4$¤}ðÀ(ß™½Ý Ʋ »btÈäÐŽñúÑ×!*a¼ßx|>és-jËÂÈï”b°[׎3:u”2”ÿä­rDºG¢¤¡}|©S^ëz]PT„ü>/#{y>ÌìÌ}4NcTO˜¤wîЂ$D³@«ê;f’þîš-h//ºN€Þñœš:ø)(Hír`¦œÉa’Í ið%0qâDå;_»Fï„aÃô^ÅÃXt·@Œ–srh+Ð[¶`³h3<í=ñëc¿vÎÍúûP ë”b°[׎3úö¥#RÒÒ–B—3”ÿ mc†çµ$ÀÍ^­V.KKCGvÅ\m…ˆ> çqܤÓ)ƒé7WÀÃ~¡"NUßicA3S01$a¹˜)gr˜¤@3®ŒÔT æææ;v¬ò9²žº²Š­­“éH·@Œ–Bm:¡$¯yf3ì›»^Ú§n™›SŸny95jº‘œŒö„Àn];Î`Ô ¥åWsÖ‚ CŒuˆJD×~ù«‚o ‘…W ´bà‘œå:«¢ËýÂÌi "NUß%•'Á\hŽ07v}ËÉPx¶}/»8rss±eˬ]»çÎã¢N©¬¬!@JJ2€r >öööÝwln~ý•šwO>©÷ya†QŠn-…lSì*ĘûÛ\4K›ñß)ÿÅ8¿qZÖ´FôºÍRVWGÑt9H´_¿–DÍÓiê‹H$jè„RíüЄäÿ7Y{ú@ˆf |óœ'Vœ…ûEC…•õÝÆ;t‚(·0X𱛀Œ“@!‹ÙþÀËÞ ÎÖÎH¹“br™z ô’%KðÃ?ÀÕÕaaa‰DX°`ns¶æ¼r\]]QVˆÅüÏÒ9gϦ“/p€J!ân-s¡in8¢fjàú–z<¸ëAdWgcnÄ\¼9òMkKaD¯››C!ƒ0rhWËLZCZÐ111ä1 *±hy‹i ÓýÙšI÷á<Çßpí„RVqƒ+ë;6#1¦@3™MÒ&äTs±’¯ñÐ+_gõêÕ°µµmÿÿÔ©t¶3C¤RiÛý£Áÿ¼u+ýäÀ½ÁÐYˆ&Là¬Ø.ˆÅâ.×µ=“ƒ…‹£©‰ÎðÇL¯Œfi3æìƒ¸â8Œó‡ís¶CÀ6ÝC*\ þg@Iû M›ô)K­m·©-8E,ÃÁÖ¡®¡H«LƒwLµBÔZÖŠ[ÞBÝ¥:Xö³D”å—pÌM`½P¬¾tÉ ¯QÿDQÖwlæàP„“L³Ø)#Ò= .âöÛr1ð‚Å¢—mkk‹_~ù¥ýÿëÖ­kÿÞ466"5Uà ÌÌ,1jÔ¨î;¥¤GÒ_£–3שÃt·@ “É‘—§q)Ь,êWõ/•KñÔOátÎi öŒƒO„­…þýÅ\—n4cõ3o0rh8µ¦ $„Õ*g:ôqs´ºÒÉâU Q}B=â‡Å£îR†;à¾KƒàXtŠëúô1\EÛ`æSwwo`«áWÖwºXÐÔó¨óïˆñ“³¼N¦šÉ¡÷­Z]]W_}/¾ø"ÜÜܸ¨“FœœœpéÒmÕ  e¦âÿþG?—.U›‚£-Æh¥–BuB9‘cÑÁE8z!.!8þÌq8Ys“ºÅ<ØXÐF €d6vˆ@2„v^`¦mL&G‘\kkå}ç;H›€–‚xÌ÷Àà3ƒaÕ\HÅÇH×(7—ž®ýîã£v½.e}ÇdphcA››Ó°DYéhMNŽV×ÉT39ôèûï¿YYY¸sçŽjWÇTVVâÆ ¬6lx÷JK;`Ñ"NÏ­Rˆ8DiMOn•µâ…¿^À¶ÄmèïÐ'ž=w;-Uƒ›5d22r[““©{¦S…Œ$PåGÔã>¯bƒžŠicAß(K@H]¯ ¢‚î#k!ãµ Üž{ò&9W"ì—0˜Ù˜±ö«rE·É£„Bz“×Ô(]¯K±ïdrn•ß‚“•¼½µ:·^ÆŽî Àt39ôè 6`ÿþýظq#^ýu.ê¤WWWäåÑWÇ †tßaýzšÛôÒKjWCÖ:b<;[í¤_z¡4ˆÆ2“CYGms-ÚývÜØoGoœ|î$üœý8ª-E  çljê”ÛÚÐ@Ý24?± £ ØQ§gŒa“Ø™¶1 –ŠJD]Ü?Õ§ªq=ú:ŠÖÁÜÅQEÁ÷ÿ|;b=$Ð]\bj…Š}—]&i¢=¢µŽcp"Ð,¯“‡\l\Z‘ ™\›¤ôžEoþñÇaccƒ~ýúá×_å¢N‘H¤¨©¡Oò1c~ìÀ† ôê7 rþÐPê»Ó&·U”Yu´  ë 1në8œÌ>‰qeáÖ¹ªÚÒí§$ƒ0òHÂ6n*ÐÁ2¾ú £m.6.ðwöGze:üBëa )*ßOÃÉ7ÐœÛ ·GÝ0ù²_,·s&Çœ°9Zž´gÐË‚ŽÅ7ß|Ó>7FRR’ÁÅòósÁÁ þç/¾ 3¿,X d°óZ UÑ4ÌÉ‘–À9%Ó&âÝSïÂLh†ï¦‡-³·\œ%×EÅ뺱ƒ„¹¹@ª4R˜q4…šjD"êãêqsúM |} å B•w5–# k"T‹3БÒ0`€asÛhl¤ƒ<»Íî§&®ØwŒå¥õùÝÜè4)ÝËš¨¨ –Hh¨V³Sšb&‡^ôÞ½{ñÓO?á±Çãª>¬‹éD.11:7øö[j}|ö™AÏohVD‹ˆþþ›º9† ë²I*—bSüàßï Âªƒ=c×£»ÑW¿ ¢´!8˜¾¼´»8TDÚ$LOZÿ¿½oª:×gr™$„„$$äJ@2pI¥Q#x¡‡RE+*zŠ×rôH«U[-í±¥ö¨ç9ϯ*Õ^°Õz«…Sm± * €H†¹r™$Ü’@n3!—™õû㛕ÌL沯3³sæ}ÜqÏÞ{­µ/ïúÖ÷~ë[0 #aÒ[ë)+àĉЖÁCïW½ˆþ¯h”ýµ •…-Å[о¼m?)GïIÒ.¼rJ€B¯Ùý&L ¾±‘Ò%8­Räüì,ƒœºp ¹‰¹H0$HªCApðàhXAxŸ´èâÕMOœ8›7oFnnîÈ¿@Àb¹(-u굟|’ÖûÁÔ*Z‡Ïgö6™ð*¢y˜òÍÇubÞ¶yøãÅûè>Ü4é |µñ«€’3@¾ï©S)p£¿{Ü1™™”[Ò  yGÚ—åm6t w £í¥6™¦%&´þµ†lfþf&–Ô.Aå••¨è¨À ã% øY'Hþg“š ȬuKšäüì*Û+ÁÀ$¹7œ‹D; :mB&ÇMFMG †íÃþOh2›Ýà ¥L»öZÇÚ¿Ÿ’"ed¨ê{æð›½M&¼ŠhN‘Œ1|iþ×¼~ V¿µUíU˜Üw5ðÚWøñâ­‚“Ö(‚r¶~î0=D#Z$áã9ôGÁl Ý_t£æžÈ<€úMõ°· ¾8q[âpEýȼ/ú(=J2J`c6L.<áZO°ísù//¡vÎÏNLŠQo$Aäæ´ âÔ…S¢Ï 4IЀ‘‘™HII¤ˆõëi÷sÏyÏÔ€šn¯"ZA.ÆÿÏ~ó¶ÍÃÒ?,žæ}˜:|çLþûgÀéEª&òþ±w|áý# ´HÈŸÑ„Ò zèÂνuÕwTãÀ”8ú£8»ý,tz2îÍÀ‚# °Ð´¥?)…>fô³âV"sL.uñˆ‡Øù\áÜ‹PèüìÄ$é÷Y-áEך›CùÅ͆I“f‘©öÝï’ÒñïÐ’V‚ó‹u…ï…¯EÃd2¹øúìÌŽ/Í_â5Ókxïû:\мœ¿ˆ’ŒlZ´ wλ°Gb­sN… ß—cÞ Ú½}j£®Žü¾“— 'hû€–\øä.üýºv!K¥CÒò$¤Þ’Š´ÛÓ9qô3roŸòmM0ÔÅ+jjü§!T~]Àætn_Ð,h+ÿ:Gr¬µVôù†F ÈÉ™E3wî¤IýÛ¶ _€O¨iA—”” ñb#ö4îÁî†Ýø´ñS´[ÛñºÜĆ{y VÜ5rΩF·œ A/?ê”w‚$9÷õÑ3fQs<ôpÏ0úŽõ¡ïèè?K•lh4EtF4RnHAòÉHZ‘äBÊÎpo· O3šùêõ}éë#õ´i.¢œZà1ó^³ûy± yûc8~î8¢#¢13EúK7}:¬þŽ.]"ñ2'GÒhYk‘A%h«ÕŠ7"!!IIIغu+Àn·ãþûïGdd$l6^}õÕ1ç^•0 |ÿû¤Ö½óÎ!Jm(•“Ãf·¡©« ÕÕ¨é¨Ae{%>¯ÿM–¦‘c"õ‘(Í-Å]sï­ïU!þÛ]ÙHY‡P ðò“Îy'è@¦­¯t`(ÉDOC&Þ€ê xì$.5  ¯¼ý'ûÇœ=%ñÅñH¼*É7&#~~¼ ©Ìîm›š8ɱɨï9D ¡®ÎK¸#7gäþéè ýdÞm9Vä¯À7r¿øh‡µPéHïê6å;T:'ˆ10äXjÈÂñ`ž™ÍfÑ~h6Ì0Ü; [Ÿ ¶^mÿvl‡{‡aëµaðÌ Zp¡vc‘{L—€CD~~t1¼˜i1˜X<ñÅñ#ÿ Ò–ývo›N§CIF v7ìFÖ¼j˜MsÑßï!WwüÏ^G\<Á•ÉDÉÇ2h)4Þ>93ÝQP@]W{H­ã™Bêä¸ÉH›†ÚŽZ Ù†2?@‚JЭ­­#«¡äææ¢¥¥S§NEkk+²³)3V^^ZZZÆœ{,óV4ç‚ífÀ'¿clô`èÿÁÈ FC3`vÚÏáÇ9ïs¿ÆÈ–þƒÌ"âØºtt¿ÍnÃÀÐíƒÐ1²:tÐü :¦ÃtLÇ Ì€!€DC"£‘`H@Bt’c’Óö]·ÍT7¸˜†ŸLê+Fö§–Ï‚aþ_€ûÇ:ÚŒÖÝã~·}Î÷É}¿k½ªD=¶‚Ùã¡[rÔãµÊX™ïkÙ˜ ñÚ¤-U¤×¸<rŠ 0Ô~CÕç0kFÚŽV—ëÙa†íp:x¼í«ÀD¤YÓóUϘãÌ P-!×;s³gáŒá ²&eaBÂÔÙëP”U„f[3²§d#>9ÕÝÕ˜oœ†ÞLÍŠI¹“PÕU…—ÿtÞx§»^™Š¢Uq0=ú;\Võjt¹˜ZRŠÈ¸È᫦¦S§NE\\œä}5qÞWœ^ œ"²Mãĉ©˜;×íÜ'À¤Ó¡P¤.¾öÕÕ•¨AnîT^Ž›8‘ê²w/¦^qâââðæ›obýúõøÂô0D´ÜºP]**|Ô…ïûê+LçXbOJ¹…i…øìàg¨l¯„®S‡þþ~477ãÔ©Sè–”œZ=ècåÔ›íV«÷Þ{/&Mš„øøxLŸ>999Xµjî»ï>ÄÄÄ````ŒzzÊt<ÿƒç¡Óé Óé ×ëGþùè Óë ×9~Óë ‡ÞåØ1ctŸ^§9dŸóo:¶mÓcï^~ü#=JJèøèˆh6qƒÙ±Õét®ûœ÷»íƒÎû~ЭYœn£øï¸X@¬\ tvêpè+Çú®å²ßS½ÜÊz­×oÇu{„ã×?޹¿{DZÛõ@Ä„è"ä ¿ ee$fføûß›n6n^{MÖµ…¢®³¿.À´È«Ððã/ðì³À~ävМ9@E¥*ÀÂk×;v‡ùˆBz÷]J:öÈ#4K× Å¿)FùÙrœÞ|ZÒJðÎøì3`Ù2 ÄúóŸý<æŠÇ¶#ÛðàßÄ–«·à'×üÄå·»ï¾Û·o—t]5T š÷ÈžðšgÉõKð­'¿¥Vµ#¥8ò1МüëÊ]ׯˆV28]Ķ% ÐÛ l§è¬¤…ÊÕC*fDUÀ€NÔ¦c‘_n DBÆÈ¯?2B÷»jµ\xjی䈎Çéár@gG]›*g³QE'O9#Õ<„*Y­VDÇD£º½)±)HO—]ÁQ<™”Ë-Erhr¢ OÎlø ¥ÂïL;žÎ!Ö×Óÿ;ÄŽ#³›¦,îõìß ÔL³g)íÆÌ™N˜yy@t´jí©mzÅéŸd·Éõc‰¨©‰Vÿ™¯C˜šêg9¿Ë.£çt¯Ìf3ê;ë1`”¤ß22ˆsëê<®²5ж6 õà‹(K„–"94IЉ ¯’"jÅBûpp[]%T"88&¶Õ`Ø×æyõä@Í$ô8S."‚»£ct *á­m<:*ׄÚZ7" p³™ú¿z\œSr E4Š „ÀhÀH_pÚ׊d"“ô{Crl2ÒãÓQ×Y‡A›JË")Mtggg°«€&?ˆ ²¿é8ÝVW )‚îí…þtš#¦¡ºÁ›‡Õ…•nÔë}ñ±¤“\xk'èIFººÜú†PŒàà0©7q ÓL&“¢!v‚ŒïSaj!†íèﬗ}-5¡I‚NII vŒÙ·´ÐÈK)øiÇ_PAûi $_Ø™#ÉørG fzõ³ªè‡öÖ6>å[—éaÊw¨Å@;Ãí^•””(nAA h¸94IÐÃá“*¿äõ vÄ~ÓqÆÇSÎÓ†Àj - ÚñõfÓGäéƒ TºQ¯É€T$hom›•: 1‘1è™póLСÅÎnÌiµZqâü è Û”@  zödr† Z„ŠH¨# Ñ ÆÀjjQWGùçÓå êòáð§2#YƒžîK DBþ±É=¤"A{k[¤>s§ÌÅ%ÝE`Ró(ñå› êtŸYìÜáv¯ªNV¡©« Ó“§cB´¿yÙÂ!˜ õzò-ÊĈ}>LЊ#TDB@¡Pˆæ »T¡¯Ï-R!˜p|È<µ§§û‘phˆ™™OáM‚öÕ6î‡F†i´ãêè ”¹¢–o’ƒº:zW¦{Öp]áv¯“HTSÒÿ Œv¢^¿£Þ^ µ•’IƆnŠ…VBí4IС"ê´ ÍAÐ=+]êt8>äôRª§û‘°¡ÂÉ<ãããìl:h`ÀÃÒá«m%é£=fÝÆ¹7¬ÖÑå¥ñ\FõpŽÐ“¿ïý;y)F=¯²ÕÔD ëÆ@ádRI±IȈϠÁaeß%¡I‚‘P‡ ‰hŽH{e•K=‚ŠáarƧ¥!¯$z½gG DB¿Ãx£Ñã’Nrá«mÅ$FçšpÒ±àL Cì¼®Cè :ÕÍbÚÚЕLKÉIÒï |5DF’~o(L+„ÙPשÒÚu @“J"af&õþcb[e@ˆæPü'4‡A7:’R0€ü|•ºK ý a*ù¡}µ­(­‘úH°ô££.¶ %Eü8Y!åærÊ[ÐnÅŒ…B1ÐÎЂ›C“J"¡NG/{o/pîœ2×$¢Mœää ¥ë ¸!vndÃ?8÷—@ˆ„‚,h@q‚öÕ¶˜È¦bÈpˆ?Cu pˆ¤ÅH÷ŠUWãxÝqÄFÆbz’¶8ø$h:²0A«„P åÝ‚E´ÂBDÀŽÔ†Aóẃl¼-j‘Ðoè¡Jí¯mÎBam­Sùz€¢"88·ž,C_b Ó ¡W^Ð 8Ak ’C“J"! ÄŽ#'‡ê6FÏin¦h…ïÓ¤˜IÈš˜…“NâÒ°§Ð‘àC“J"! Üú„BE´ú(¢ê«üðT11”`Þ;¥R£¹ IDAT.µEBAz’à =âà¯ms§Ì…: Ĉ“õ?wvRçÅsÈFL Ÿ†î‘$ýj@¯§Nµ«‹Òb@E!µ(­vfGm‡ «?+Mt(‰„€wKQ*„Šh¦KôaçZB€ ÛÛéë/(ùúy„‹{IµEBÁ‘k*¸9üµ->:“ €IfL°š\ë¡2Ü$q0q,@·z.ÀK§®"A‡zNMt¨‰„'54PG¹*¢U˜ÑŠ,Lê8©ø„ Ñððõó—ž×µEBÁß³ -¤mÜÍñ•k=T†œëKÓQ3Ș2 ©R•­˜|´ ±¤<’ãÁŸTà¹ç¿¼lh’ CM$èݱو¤åB¨ˆV[ T¢z»MùUÄ +zúàÔ ƒIÐBÚÆgZ2”çr"úª¦'À¦ò[â•­”<´ 1ÐEiE€C¥"Æ•ÒÐ$A‡šH(+ ÑjkÚ×ÕU‚/¬èÉý£¶H(ØàR …´[ÐmçЛ¤¥)V¾/Èqq”§ J£Ý›( ¯tTÍ|R<’i’DA“j"! ¬P(DDã ‚tNq]]%haA«)§N‘Ë)!ÁÏÁ\-S …´m~ú|À± ;Zãå-ß$ÕÕ£n'±8}`<Ù§p­\1æ}¹p8ÞOHŽtÄGÇ#æRÜ€¼™¡¥m%èP eÓŽ Ѹ5d7º®®4ÔÔxüú=Ý5EÂS§ÈÕ$ÈrD' µ•¦‚*!mKŠMBnd:êSSä4EÊõ«•¢Õòò(”M,ŽõÐtÐÉGÏR•@is(k€šî v޾¡¡ÄjÕÊ Mt¨‰„€².!BçãøE³\w>¾~Oi$Õ E þü@…|øBÛ¶‘[cׄ%ð½‚ß)ÃxÆŽ;†X›«ÎQ‡¦" (ïVCTÏUÒÕ ´ºöb…*eÈ& :EB¾X´-Dhâ|œ_’D)!ëë• !‘‚:ï.¨z#Ô %´Bn¡m+é áúá›k̯JÁaî6£ëRІ“qŒAµÑ9\Œþ¢«DÐÕÕ·n¨& :Eˆriòp`9"4ñ÷völPêQžê3ðÊ3gRõéÿÕ ƒMÐBÛVRO¾\sFg@päDp;w 0/6%€*‹í:Ã… +VmQ‘*eUWh]ŒÅ¶Ç°jú*UÊMt(Š„€rB¡¡©ºš:…Ë.ÃHòþ  …~XÑÝý£¦H(ÚRT˜ µÍnGñrX2jBÐr"8Žutú|XÀZЕ•$äªiA_¸ ß›ù+,Ÿ¶\•2ä@“Š"! œPèOhêîÚÚÈb70’¼?h~hÍï‹Z"!Ÿm>a•%ð$… ZPÛÌfL9oEº5 H­FEm¿"eû‚· ç\ 30‚n©ìZZhm.)ʦȚ]h’ CQ$” ý Mü¥â†óÈÁ"h?o¹ûÈB-‘ðÌ Æ0Љ\›<™²¤Õ×;–8‘AmsŒtæ¦zL­'d—ë Üû•šJM‹ò³”¤îü•0FD¨îâÈË£°çˆZLj°P¹ÕÃÝ¡²‹[64IС(Ê´?¡ÉÅÿìüG0\<dr²×Tî÷E-‘P²ào4ÒTùæfÙuÔ6ÇsZ˜äXX·GÝ™•¤K!¡Þ^œºx ù“ò‘ Sf& ß Kô„ÈHf^T— û²½†Dº^Ð$A‡¢H(GÐþ„&NÐ#kr2ÖÕ†J f3­òéÃlÍË£Ž»8Ô e´ód@PÛ}ùÌ+çô&%Œw¯3Œ?qž¬ûyéó%óh«¶ã¼ („ƒ UyZÓPuo%èP SR”-ûšÆXÐü†‡_Õ/°bT¹Ïž¥ÄIj‰„¡@Ð‚ÚæˆL()¾ÀÒMhj’]´WȉààîùShö£uút׋ª‚VÉ‚uÿ3 Q‚U‘ ëÀ–RáOhâSv]rMËÍ!P}r Õ C ý¶Ín§{–˜ˆìËÀ`KÒN ªF½‘!· Í|ô‚.BlºÕ–3 Ah’ CU$”‰äð%4Y,ä7ËÏw[%)X‘'N¸–ïÎB¡Z"aMÍhÒwQP ý¶­±‘œŸEEÐéõ˜UDb_zÏM‘»)DÐÆk¯¥T gg\D&ÎàtüLG¨’ò#¶‡ 4IС*Êø¡} MœCƼTÁŠä8F0¸oÒ œï‹"a_EdM›&á{æÓ@ h¿mã/ÚœÉä³.kSG(䡇qq´¤”Øì6œ8 †äMʘølU•-h£F‚U:õ"8Â.?xâ‰'ðÀ`ýúõèïw-..ƃ>ˆM›69/TEB@‚ö%4y–ÃÅ14DåMžLéã|À9í¨"¡¬œ:‘‘dv··ÓºP2à·m•®~Õ¥Óéøz‹:}ö,ÅÍ;-t#'/œ„uÈŠySæAç€K–-#QZ¡°DoHl¡ŽìkK¡*Å Ñ»˜–FÍ U ›ššÐÝÝm۶ᦛnÂ{ï½çò{BB†‡‡‘š:võ†P eÚ—ÐäQ ˆ$ÓÒ¨à@ErÔÔPüÖ¼y~ï‹"¡ìœ:üD™Cw¿ms#è•s‰ ÏëÕ!hYî 7ÿ3àhŸÑH‘;j.]æ¸Oå¶"UŠ9uŠ4õPvo"èÆÆF\ýõ.ÿÞxã ä8Æ\yyyhiiq9gïÞ½xíµ×088ˆ={ö¸üÊ"áôéd©ÈùÎ} M>ýfEEDÎ*ûG нPß‘˜HVKs³ò_œb-sèîW$¬t 3N™ý`“ËÑÓ«¼©¨HŽ)£Ï×l6+¿Œ½'8îS% U)F î @ŸŸ]»v¹ü»ãŽ;Ðì˜ÐÔÔ4BÖîHOOG¯[P|oo/Þyçìܹï¿ÿ> ¦¦fÄzá~À`ì3€ÌÌ´¶Za±H»ÞTÇªØ¾Ž‹ˆðpnn.åJ0™ÓÞ?¦}ii~ÏÕ逜Ú7q¢Qñº¨|ë×S>ùÄuÿ† ”/L”_CFžs[FwΜ9˜3g`ûöí^Ï e‘ à®]4œ?_üùÞ„¦º: £õê7ãç••‰/T,#GT”`¿ SV$¦{Ã' IÂìÙ$–—˪‹O‘°Òó̸Y%0u_·šÜ.«|wÔÔŒ¦ÂƒNk'ÚzÛ0kò,ÄF&**))­–‹ÃÙO߬N1Z±4fÊ"! ßEçMhòX?c0q"‘Œšs‡ ho§7<:ZÐ)œÇSV$¬«#­ÒÑ·KƒÁ@m9wŽÚ&>EB·;Ž•sˆÔOY• {z(m†”ÐCO!àhß´iÔ™U«´D”ƒ '\^5r3ÙíÔqñÅ$Bš$èP ùy¡½ M^#88ôz ¸˜f³¨d˜[š"†\KüúkeEB^•âb™â”aEû +=O]¾þò`(cL` ®¥Äogp´/*Š.*³3ó Ç}Šœ[ˆü|êdú\«Öl¦UÚfÍ Øz½’¡I‚噄À¨¥(ÕÀð6MаlÁÚª¸¬Q3fÐ踮Ψ躣ú Ïààm“Ÿ3 ½t\L$âz為q¸¾QrÙîàÍ’kh$tºëMiï •Z=ïpZEEÉŘ9´Áh” Cy&!@æÔTzϤ,èm6š ÜòCK h½žïë3Ñ‚  s„b-Âö:“pp†TS¦xLËšAÏíÃ#Ê¿/Ræ¹OñæiŸZÍud11À´iªDôiÅÿ h” C]$Ôéè£àíÄ“ÐÄg>¥§û™ùÄ-è$h€×%Š}׌ŸFG+t]‡W‘°¾žÔL/9Kæ¥Ñy_6*7òqçR¡´ ¢ª½ ©q©HOwùm¤}jô¹sÀ… ô0#"FHÔѧäŒ, Mt¨‹„À¨Õ"ÅÓàIhª«£ïÛï°læLò#= EýÎèï'“&;[tØ©V¹Á#8}èè Þ¨UzGJ %¬¨­%?¾x ½¸78–Í¢¦¦[‚&RKL¤ÄZbPÝ^!ûæ¥Nñæim(MÐn‹Äªao9—k‡24IС.òÚ“ÐÄ_P¿ÃÕˆúxz{ÕË ]QAä/Òz¸áeVì»VL ä˜?ŸÌrN"áU$ôbDZzq!`‹Âùˆ2E„ÂÚZêGKJÄ a¦3ôÒºûŸ§ö%&R4Ç©S”ìC)¸ud……RVFE.,O³³ivk¨C“ê"!0J¤RˆÈ“ÐÄ{ý… \@m¡P¢{ ."¨˜­˜@È!ÓíU$ä=¬—{–5Å€¨‹E°Å´£¡ã´¤²Áß;)ס¶C€ÅY‹ÇüæÒ>þ’ËUÇÀ-1* ˜;—¼J,jP^N¶…¬g@£ê"!@ÃÊÄDi!Éž„¦¯¿¦­ ‚V[(”ÁŠ11@~¾ gλ1ˆUñ ™íQ$dŒ`d¤ÏNmŠØôo_ËïXy5¤„‡Z=– ]Ú§†š["NWÒÍÁ¯&hê"!0*rw­¸ MCCÄ“&Q2&¿P[(”aAÀ’%Ô>%¬hÎ sçʿ١vEB³8žîWLŒ×sg'ѹ{kåžT°w ç+¬„¬1¿»´Oi‚¶ZiˆÌL k´ì0Ak Z é~hw¡©ªŠ²;.\(Пh4±±T°‚ÐøðØ1Ê/¨·‹ÂBjŸÜﺧ‡\ Ó¦ÑhEäåѳãÇ%ÍÆô(òáÏ¢E>Ï]:ƒ^˜ò,h»îml¬Û²hðõé¯agvÖ3àÖ>NÐJ¹ÒL&ºçW\ᲛíhA$¤´»Ð$ʽŒ¥»»¡hÀ1@ŽÀÞ^2Y#"$]"#ƒÚ'ׂæ¡Wй7€Ñ`m‹…Ø_$<Š„‡ÓÖA߸p.`×£Í.ð©óš?_ü#âî%ÙK<þîÒ¾ôtúÇ-¹à÷éòË]v+%Z,MáèZ€& Z "!  Ý…&î–óó}+S¸?ÈtoÀêÕÔ>¹´â¼m*èQ$ä=¬ñŒ)vÖè.1Ó‚³½Òô²BþgÀCûŠ‹Éê•õâ/­”Px옶B@£­‘ U”¤„$» M¢"88ÔòC+@Ð&äåÑÜ 999xOxð èSLj„6=ƒ ü±GD“­WÞ=¼OtÙ£u ­X1†C­‡¥BqºgvÓ>%ýЇ“σ*ñ:kͽh” µ £!É==â< ÎBÌÀ åSSE.ú©V$ÿetIIÉH¸±œ-Þ4Å zéRÚ~ù¥èSLj„µµäZ°@¿aáä«ÿ[¾WtÙR º±«íÖvÌOŸï’bÔcÚ§A··“oÆhô((„ ZCЊHHó48 1ÇSÇ¢E"'ð©uJ …ŒiEGK‹ßrÀjµŽ©‡I»FW‘{NŽ‹à¯ òóÉ·zô¨hŒH(P äX»€ÚtásQår0F<*Êë¤E¯8ØB#oî ÀCûø°î«¯Äæ/î Ž0AkZ Qãn !pbD „ÎŽ;ÇÒb²Q[K«^/\è3\ÌÌf3®&ÂçŸK»Æ_]}µ )#u:²¢m¶Qâˆ1"¡@cͲlàÂttEW¢ÃÚ!ªl€|´íí”[ìÔw>AÅ›@xh_n.©nååòfú!h¹B¡ÕJZfV–vB@£­‘–8Þu1Dä,ÄHò?sÈ5SÝñÅ´å.‰0X´ˆÂÀöí“¶¶À^‡€½âàmämˆ1"š@còd ±‹»9Äû¡?ûŒ¶×\#úT¿!à¡}:=»]ô½r‚ŽŽ–'rPÒwDh’ µ"”»(+‹zþ®.aç8 1²º´”¶ü«• þ~ã².c2™ \uù祄۩NÐW‘X'Öí"¢ 3¤¤P|µ@'Q£Þ?"Þýé§´]¶LÜyýCý(?[Ž´ iÈ›”çõ83%ùCØ+ÑoδÁàsÆÑbG¿±O‚~Ê ¤ÅÞûž„& Z+"!@ÆòåÔ{ µ¢¹ÓÙIÑK99—æáf”T?‚;öï§í•Wʺ oŸT7GOùY32įµ'óçSäÅÁƒ¢L|íøqÊ}ùå¢ü0kæÓ9Üþ¹àsâ¹O?%-RlZv¦ Ãöa,Î^<&ƒ3<Δ”KÐ dûôËüË¿ÐÖ±˜¼(ðsø5´M´–DB€öìv<b>þ˜>º•+%œžN¡]uu”—SNŸ¦©°ÐOBjÿàí“Ú|ù%q¦*þgŽÈHšÑÖÛKÓÂEDãšÛÌ8øÖ²\àb:#NàBÿÁçÕÔgÎg+!AT‘£î  ’œáq¦äe—Ñ»VVF÷K,¸ÀèÇ tÍ5ôX>ùD\تÅBïLJŠ 1ó*C“­%‘OÐ\ˆùè#úÿ믗Qøµ×ÒV®›ƒõeúŸÑöIõC«îÞàà‡vÑþùOÚ®X!ªØ©S W:†ªö >Oª{pšA˜ã] ¼Ì”ä~h› 8p@|áŸ|B[?ïÖĉ¤é´·‹Kà¿w/EB­XAEµU— %‘ tAM3bÈ´fßG‘ÅÀ ^”"h…B`Th2È["Ö0‚–à‡Ñúû©çILmAÀœjÜ{_ wp‚–ò¾j=½N…™¾Å¯éT¥º9ìv`×.òË\wßÃù!bÜœÿ\>ä I‚Ö’HÈÁ?þù‚ÉdBy9%@»òJ™‰€ø‡Bí,4q7‡ÐïÚb!á4-M%®üañb2¹DXÐ#mÛ·òS¬XA½¬HÜXHÏíà™Ïo·Ó#6F#‡„¢µ§m½m˜“6ñÑñ>õºæ¢T‚>z”òÎ.]*èEç$ËIW´ê4JÐZ 9ĸ9JJJ°ký½j•Ì‚SSi†J{)½½dâfeQÜ«L8 MbýÐÐrN¥¥*úŸ9(ª µUpl×HÛ¸{C¢€ð­kòîœÓ•£ë’ÿðŸcÇ€‹©Cõ< Ð+„LPáðºæâ¬Yô®}ý5 Å?þAÛntø‚@R¹÷…ÓÚJñÏF£È™¸!M´ÖDB€ˆH§#‚öhoµZ•ñ?sp7‡ÔhŽC‡ÈD[ºTVtšÄú¡yTwopp³kçNA‡´M&AÏž­CÌ9òCÿ£Â¿/Çÿ¼ßL~n_T8¼®¹¨ÓQ¯94$.‡‰H‚Žˆ cg``Tƒõ…Ý»i«EëÐ(AkM$(ð¡¤hiñ¿T`E…’0.#åÅ(äú¡¹Ù/3þ™ÃYh2ˆ÷»»ý»zvì ¿æO¼ùfÚþå/‚7›Íô¹Ù6uª¤bu:àŠ)Ô ýqŸ·‚þ¤ü˧ùw^{]sí5yçäÁ‘“#j^º7wohÑÿ h” µ&rp1ÿƒ|×Ül„ÍFî E†ñ<M A3üõ¯ô÷M7)P™±BçÀ·ßö}^e% ­óçÓ €`Ñ""/¿ÚÚün4GYAr|$ážeDx‡üø¡»º¨ML™’@Kw j:j`œlDvB¶ß㽊„°f ½go¾)l8ôÏÒûuà ¢^t¡ñÐv;YБ‘q) M´EB¸õVÚþñ¾{ã bdûŸ9’“‰Õš›Åçí­¬¤¼  (âÆ Mßþ6}Dï½G#doxçÚ®[§H5„A§íA¸ùî&“iÔ‚”ù¿sÝ èú2ÑgBËù¯Ç½÷ ù×­£,bÀ­çë¦ 31½Š„udË—S¨’±E¤{ƒ#/''NPì·7ìÝK!yK—Rˆž¡I‚Ö¢HGΙC‚Ž·°²žàÓOK`0(<,ã¬öÖ[âÎãÖó·¿­XUÜ…¦”jkG‡÷ïš±Q‚æ]ÀpË-´}ï=¿‡–ÌKcoƒatª½DDG믻ÐÛñË·¼»9x‡×]âËàý/Ó„9i½Š„6Ðöõ×}g³Qit´$¿ oëoëý˜W_¥í=÷ˆ¾|È@“­E‘ cŒ¿¿Û·{>æOúú¬¸ývR«Ãm·ÑöÏ—ìý÷i»v­bUñ$4Ý~;m_yÅó9}D†üâÅ´a@qÅÁ²?pö¬ÏC­»v‘Ïáê«iÝF™¸k Y—6ýÍãc;y’¢óóGö…ÂÎìØÝ°Qú(\“w s¼Š„ßúO£ïV?öî¥éÝ¥¥t¼HÜsº¶o§Ñƒ;::ȶHLiš$h-Š„ëדÑðÛßRœ³3~ýk0cÓ&… ÎË£/¸©I¸Ê~ò$MÙš=[üê£>àIhºåÊZù·¿yžYýÜs´}ì1Ū!z=}åÎ*¥˜_~™þà=±Lüûª{ºÒ>ÀÇŸŒßü쳴ݸQ¼^Q~¶Ö,ÉYâ7þ™Ã§HPþ’[n¡‰:¾Fü>I1ûAúêÕ”¯Æ“vñÚk”åŽ;é'ƒÆX9Ó6lØì*ÈÂücc?ìºÿw¿£ýK–¨TðË/Sßûž°ãŸ{ŽŽúi•*äŠÿù*îÖ[]÷ïÛGûgÎdlx8 U‹ýû©×^ëý˜övÆ¢¢KJb¬¿_±¢g?w ðÙ×tiUcz=c))Œõôˆ¿î/÷ÿ’a س{ŸU¬®Œ1Æ>ÿœîÕ7¾áù÷–Æ""›æW¿bec›6)Zô _þ7Ã0,’ýò—´ÏbaìÊ+é¾ü×I»î²×—1lûªõ+Áçx{v.°ÙËË£ÊÕÖŽýýñÇé·'žQ[ϸí6ºÔ¿ÿ;cv;uà·ÞJû6o½0A»áî»ïCÐýýýlÍš5Œ1Æ8À~úÓŸºüj7Q ¸1ÏØ÷¿OVÀØ£ª\ð 7PA»vù>Îl¦ã¦M£7?@س‡¬Â˜2ô ©·ÝÐjx7ño¾yìo]]dÊêõŒUV*Zì© §¶€é¾WÈt:Æî¾{”œ/¿œ1«Uü5-ƒýŸÑ,é—Ilئ°ä¿  ®\éúફÉ2‰‹#KZ&Ìf2vÆÖ®eìºëèïŒ z$bjÜ‚nhh`«V­rù÷æ›o2ƈ Ý-ä––vï½÷2Ækkkc7ntù}ýúõjW9 øùÏéeâÿ6l Íb±¨Wè›oRawÜáû¸'žPÌÊq‡¿ö½ü2€ù}YºTÚ^qô÷ö¤_¹YO>ÉÀ,wÝ¥JÑE/1lKÌ?9r_fϦA‘|Xû!ð›ßõÐÙø€àw³¿Ÿ|Rc¿ù íëëc쪫h߯~%²ÆÞqä2¿/3f0V_/íZÿ' Úµaµ’¥ÓéDG3öÒKŒ1õÚf³ÛXÆóLÿS=;Ó{FÖµÞ­x—a غ÷Ö‰>WRûΞeìƒH~j­É8h­Î$ ¿³µä"!hívš€rîíïéò8>ý´¢±ÏÎP½}j#6–‚okj€?¤ùÄ=@½¶éuzÜ>çvØ™Û˷˺Ö[4›ô;Eß}®¤öM™By\JK%åÆþ¿ M´Vg …ßÙZJàþû)Š¿µ•Ræ}ÿû´&Ü¡C”qçÉ'U+: í fÎn¼Ñe@5Û¶±d#à5Ók°3‹ò9¡ûR7þQÿ$qý ñ¹lÇͳÓ4IÐZžI(~gk)Ž’ÜuYÐ/¾ÔÖá|ü±ø¬;"ö j¶Í8ÙˆÒÜR4\lÀ§–æñ€5;0`ÀÚYkaˆ4ˆ>'蜟ïÿ9†íÃxtñ£˜#]cÏÏ.¡I‚‹„ÚÆxn_ Úöâu/"&2Ï}ù/6ú<¶ñb#¶—oG¢!,~DV¹ãùÙ…"4IÐÍÍÍÁ®‚ªxŸ¯b2N1žÛ¨¶å'åã‡Wý—†/aóÇ›}ûŸûþÃöal^²Y–õ ŒïgÝÝÝÁ®‚ 4IÐ:E–º]DDD» ªb<·/mûáU?DÞ¤<ì¬Ù‰]õ»<³³f'þPþ$Ç&ãá+–]æx~v@˜ Ý.m•V0ài‘µq„ñܾ@¶-6*ÿ½ò¿·½Žœ>âòûá¶Ã¸{çÝ€íÿº]¶õ ŒïgŠÐ1ÆÊÌ vEÄ`áÂ…(** v5TCww÷¸ö³çöç¶ã¿}8räˆÿMta„Æÿh*µ”ÕjÅÆ‘€¤¤$lݺ5ØURŸþ9žxâ céÒ¥X¿~}°«$­­­xæ™gPQQÇ£ªª Ï<ó bcc±zõj¬[·.ØU”÷ömÙ²ÇÇ”)SðoÿöoX´hQ°«({öìÁÛo¿ááaLŸ>k×®WÏν}ÃÃÃ!÷ì4EÐï¾û.Ö¬YƒuëÖá€ÙlÆÔ©Sƒ]-Å ×둘˜ˆžždee»:Š ;;¿ÿýïqýõ”9íùçŸÇË/¿Œ´´4¬ZµJó¹{û¢££‡þþ~¤§§¹vò°|ùr,_¾°bÅ 444Œ«gçÞ¾åË—‡Ü³ÓA·¶¶bÙ²e€ÜÜ\´´´Œ+‚.--Eii).]º„•+WbïÞ½Á®’â8sæ ÒÒҌψ€§žz PWW‡§žz úÓŸ‚\#ùؾ};V¯^>úh\>»?üáøæ7¿‰‡¦(—PzvšŠâÈÉɉnnnFNNNk¤bbb @Ò¢` ==gΜØl¶ ×F=¤¦¦Ž‹¯/¾ø", yä‘qùì^|ñEX­ÖrBëÙiÊ‚¾å–[pï½÷â‹/¾À¤I“Æ•õ Ð$€O>ù‹wÜqG°«£¬V+6oÞŒªª*<ôÐCxôÑGñÈ# ..÷ÜsO°«'¼}ÕÕÕxðÁ‘‘‘sçÎáüùóxâ‰'‚]=Yxã7ðÊ+¯`ÅŠØ´i{ì±qõìÜÛ—‘‘Ó§O‡Ô³ Gq„Fa„(Æç8:Œ0Âc LÐa„F!Š0A‡1.±{÷n<óÌ3hjj­·Þ ÆX°«F¢&è0Æ%V¬XˆˆÜyçx饗Æ}‚­0Æ'ÂƸE[[뀄¡Y„ :Œq‰W_}‹/ÆöíÛ±yóæq¿LZãá0»0Â#ŒEØ‚#Œ0ÂQ„ :Œ0Â#D&è0Â#ŒE˜ Ã#Œ0Ba‚#Œ0ÂQ„ :Œ0Â#D&è0Â#ŒE˜ Ã#Œ0Ba‚#Œ0ÂQ„ :Œ0Â#D&è0Â#ŒE˜ Ã#Œ0Bÿæ>­a Äã"IEND®B`‚mpmath-1.0.0/doc/source/plots/coulombf.py000066400000000000000000000004161316273626600204010ustar00rootroot00000000000000# Regular Coulomb wave functions -- equivalent to figure 14.3 in A&S F1 = lambda x: coulombf(0,0,x) F2 = lambda x: coulombf(0,1,x) F3 = lambda x: coulombf(0,5,x) F4 = lambda x: coulombf(0,10,x) F5 = lambda x: coulombf(0,x/2,x) plot([F1,F2,F3,F4,F5], [0,25], [-1.2,1.6]) mpmath-1.0.0/doc/source/plots/coulombf_c.png000066400000000000000000001157311316273626600210460ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½K¬,ÛU®ùˆÌµÖÞç]vU5À6·ìcäR©]t%[Ø4Š ñê` ƒ@¢$„4èÐ2/Y2Ð0‚†‘ j\ S6 2%}W÷RU¬{)yŸ³×Z™sTcŽ1æcÎȵÖÄ®½cœ;ã•seÎøâŽ9ƒ˜ù?x'¶Øb‹-¶x¦b‡ ç¯þ×.È[l±Å1¦íl±Å[l1Ž Ð[l±ÅÏhl€Þb‹-¶xFcô[l±Å3 ·Øb‹-žÑؽÅ[lñŒÆè-¶Øb‹g46@o±Å[<£±z‹-¶Øâ Ð[l±ÅÏhl€Þb‹-¶xFcô[l±Å3 ·Øb‹-žÑؽÅ[lñŒÆè-¶Øb‹g46@o±Å[<£±z‹-¶Øâ Ð[l±ÅÏhl€Þb‹-¶xFcô[l±Å3 ·Øb‹-žÑؽÅ[lñŒÆè-¶Øb‹g46@o±Å[<£±z‹-¶ØâÝ¿vþÿoÿïþ-^þ²¯fÄiºcym1€Ç×ÿûWƒP,i*é5¯¯S}oéuWQúy ËTâ¡^ý€W]Œ‹Vh½Ø~òG^ûòä•FûMa™ÃÇS8äë‡×ñèâÕºŽýsJ*ZX&€18Ô”Š5Ú6¹mi½M(ö{ùéöõ×qùêcÔ£/²wûAÖ Ö»ÃhX Z]¦nß—øÇ¸Å—½|…P»ùäÖ 6×}t+3˜Å}09IÁ&1zÕÄIYÍ`´OiózD]?*I_R’òéŠòaJ‘CŠ$evŨ*š·ne](H¿ v‡.S] 4²åP,-Rž/<Ø&J›Sñ,S}ÍEËó,;u¾ëüT·Õ²³SÅ”4£Øï·Åý¢îg, ]’¥0hËðËñï[›o¯ Ò%ýÍ™£ f®lÑâp«7V|ùuœ¦Õ3æÅ‹ Ð æzûs »õVÅÜ:«üz»y鵯D10{´ÖìONæ|Ë«öÆ"§¸gª]+~>qu-iñjYœëòkï|Ù˜îUXÑ<……Åú va·/Ž] Æ®¨F?WXS+Š;<»ù¯xõµV$nû-ÌÍòP0“ ®<·o'€™Ò|»V¨ýúi®ÖW× -ø¾õµwÊoÒ‹Ì/i?­®Äœ Lþ¥mÓßÛÿþp@¦4×Þó6€‹»pcºÜl ÿswƒÌ[ÚØýàP&y¶$¾„ 6Æ`üDãå×þ · Ì ÎŒ\£´ådÐvб¿ ¸õa NiÅõ”å)¯½óමâdÊ¥uaY¿@8 ê¿,)Z÷!]ö$*œ¨Ýü—Ù{kqEò×Ú¤øJ(S~(ŒcÑ ÈLý:›wZªû­ï} Ž´Ì­­¡A:»è¡ÄqÞÛ ¼¢²× ­@~ïÿð6àä/âpwSI5çj]Ü>n=ë¾[ØýðP»×@@…IVÒ.³Znµ•Ü|ƒ³·>z{CAî?µ;¸+ ·=ôô$@nQµ¨änmµ¸óHEg†/芖E%d*Ù6{Cùàa¼øb:Qß][¨­‡|Áa hYAçù¡ª–_¦·8ÌI!Sü}á· Uõ‚i•nírCÞ°:k9¥œ^i¤ý-‹ß^Ò>ÝàÕöFh‹ Ð †xÅ®{ë頤۽¥¿{÷o$7Ÿ}禤ûVouÙ¶÷Ÿè 5r<Ú-m6˜DÙ°;¹"ÙÈÖ `m^´,Û7(‚WÕCp7ÙÊBͪ”Ù‡Zñ¨g/N¯ ]1SÚ<7ëw¦óç€=)˜‡À-Ø%;fòè{:{#@9ÞÍyeœ÷»Se{_9VÑÚa›¿"¦÷Æ›Ã-$6@?0´î…Ê(hõ]°›z¬‘Åíã!ÝòÛZ-¥fµm½íÝÆ¨MÖJKñDV•ìO$;±šúa#žÛϤ+@6¯©÷ƒ/ÌÃYe«acr6Œ—¨ Ĩ° †î›3KœÎƒº¤â˜AˆÖ¡5Rým^Óí<¤ÃÝNœþòØÉÞ  kÿ+· íØy™Â{2Àk=0÷¢$4ŽÀ«²WÑì<-×ÀèGh$TŽrÛ6 aàP¨zRã£áj8«nµwdkØ2©ŠnÈVÇH¶Ö2®ojJTq8é¢z®ENê95²­sØ#ýÛ‘à¬Ëz×!¯Ù3ÀXÞÊhn »Á™¨m~’?•Ú(Í{ðZÑ8“â¾¼ú›Ç»£6¿8xGµÜv…3cÁLªûóµ¯ö]ªšº}ë•¶Ip«ê‰à´³­±¦¦·°ú©"ƒx5ÕN÷Ï+l±¾qäA#œÀý= W[*W‰Ð}:]ÃîHê“|¦÷"õ–ÝI§'V3pf×9%)k÷Åp;¼+N¥ټ줊ÚÐÃ87zäE/ĶþDÀÂmr8Ѯߋ)åxÝXµ6&nJÞÎ8cm æ°+ŒÛ|¶ÿr½-‘aÜbЈþ}ÔvïU³Ü~ˆ´ûÂÚ›‚±úa èëQbß½Áíjýºí·{h7òÕ¶!î]áˆöÒ—¤•Ыfj'’\0¯¦Ù9:š­3RÎï°‡2C‰@܊ǃ"8oîKµ÷ž§²æ’ŽE=ç9g…M('Ó˜—4Ÿ35š½¡û’ýÚzåh ¸Þæy5•òZ:]Ø7C¹¸åâ–¤ÇÐîÕw§¬·°ú©Â7vùϾñDƒã‰mi¼03:îcqè-pÿ©pÿ6% ÛÚ¢­×â™·ìÅ=hÔ`˜;¦˜§àö)áPí{Z]np®@vĉ³"ˆJª9{Ì^Ì[çl]Ç¡4e°,ö]vwFcNFìfŸZç}k ¾@+±yËìæ¶ÿå‡P–Ï3?Ú¶SÂ^Y(G…Ìþ3²E²Ù!6@?0‚LbÐ*§DPÓ+ŸGòܵºø“Ù×äf½õÕuÀª£3˜½Â®'aô]éÜ ƒ3 ¸‘¼ŒÉ¤*!UA›j©h ™ºÈ¶†úÏÑâàdiP_¼´œéAè¯VøÎ(½r¦q¶”ÍâpÏÒl¿è=¯øÍéZâ•4&`Ü(臰Öm}c`²ðà'~â'4!aP–iE ŸQÔʪo{Ir?›£žÈ~ ¤:“%ªÙ­o„´-dÅ#w¡QÎÔœ3˜á¤*`ý§ãá €m&[õöܧÕÅüçOóÞâ8Ù@8+iå‡*ëÂõ‹ÛÂbôJ|ö³ŸÅ“'Oð™Ï|ý×ïüÎïÄ»ßýnœŽ¯ãïÿëïÀåû\=zmxŧ°Äm¥Ýw²ë°±>Qhµä 냖ž-™_—ŠO ;tRBBDn׊¶,Ú¸_v3¦˜ý¼WÒS´˜›¥a‡¥pPŸôuZ¨®+R»&h)°i5¥Î:§¸'zSzz·Øå3+¬GëŠÚè[p¦lqŒ< U7º÷êïÉI9S¬ŽþÐk‡3Jº-ÿ§/þ=þóßü=Pf¼~{‹-jl€^‰Ÿù™ŸP•ôÿñãÝï~7`Þ½ŠWþûÿxàQãNPÐ@æ9…VüÞÞ¨¯Áwf¿=«èFÉ K3õÖ†34Ð#»*®ŒmÒ†ÁP.töGpæá'è§Ç2ý1ÖÄnÞ\€î¡±™ŒYIg8«à¿Ÿp5KËäEv¤¤‚›Aœ½ÿ¼ÚHèŠt`Ÿ5ÿ™DcŽà<²3²Z–,޶Žl쌱u¡¾´_×à«°® ‚§n¿ þV|N³þê}ÁI9Ó9E]! ÿû‡ºà =PĺÌÃB®OïY#v2ml€~x0¬ËkzZUxõ7ž!œ[S—Éô`erøíú°Ðа®œ ó)Ý ?ªÝ{3ˆƒj†œlŒvýH°^ô˜öå¤â¬©å(aYLÞz8õi]1£yιcŠzªëªÂlC‹²ÈÍ1ŒÑç;OyŸbÝ»cç“5/ÙùÒná„:ò”è~j‡ú«é/í :».{rêZþœ«ð]QÕC€÷ÎJ…AkvÅÓÀ:Λ_- ~ì- ¯ŽÏ)jÎÛdymÓ!<¸å|±côCƒ!ƒ%ÁèÇn[Þ׋EcŽßÁƒ¹“'r"v`ö·¹-Å<ö Ç…´…?‹Ú‰bEX¶‡³—±Ýò»’±;Ž xdÅä¶ÞJ–ò×r§+ $]ŽÝuÂömÀ®*š‚Š–¯¬ÅðjÙ)äZNR¨‡ó4VÈ=„õùÆAó¨Ñg[õ{0+Œu@¤üêë€× 4‚슕ªôrf»î³:Äè†Ýõ9ÕŒ<³X´-$¯£‘ìÆ`ΊºudÈcAk)úǺÒ%¹o,'$CҦ=ƒù+'dPÎÜ)éè=Ë·ãò×Zaó9Î7êøÎ–÷ìÖ-Äç‚ÞÂð¢ÝwB1UügŽ ƒ“~ë¶'ŒàkëÙmïÒíb#¢^ÔcƆ÷–'Òºæ6J]÷äöÞrSÀÃ|h»pû))db¿=í½«¨/|l€~`œïIH¶þ¼Õ¡Š9C9+æ¶®‡s|Ü•ˆšÜSn™¶ ;É}q¨žŒáìÝ5fjæ[×çLF í RÖ"8÷¨;¤¦Î† ^´\~s}Mª˜z #(æÙÁzF¯”W_Çf>ÖWœ$ƒãdûÏXì÷ꂬ½JîU´M«ÐÕú!Àæ 육Áíʹª²¹~‰[t±ú¡ÁyÐñi*ç/ý$ÿ0X Ì¡qp çqÊWÐd%‰`Öôkškc’ú©éE >„s]&ïA·ƒŽ‹4ÌâPÃWÒÊ7ö¥X‡³_WUt†qZ^ܺŭó]õN–)f«}#á(sC–íÞByA±hÞoŽƒ!ÑPE/³ûø©Ö^ÕsÖí®CJVјš1VÎ+ ƒÊ=ÀOMEãdcoÔ y„°¦ÅE {à®Ã:çC7{cP ;Eíáö÷–ˆ»|Fm«x]í}‘côS„)à[ÐØêHÊùþTü²¸í•†%©m£Úéº|½ YÇãmÌn¯gk$ J'«iÄ“+«éЕÏå@“›Ñ´ [Õ3õìý禞3¨sGSËh¾ôQ-éu¡påi°,ʚ窚y¦ú*©u”ÀÚ7ô ÔÍñûú壃s±ßÉËÆX¯ÃÛgmŒÓëΆäëòêxìnsÐA:4"j=ÝàbôS„ŽÁ @oC%³eOEF8 D9ƒ¹Q²WÕ Ø»0÷ô&õÑK²¿„»²Û#¬ÂÉM>§ÍlT¡å0ÅÖZ¤hgdõ h÷îÖ1¥~s´‡±Y½ç€#ôPœ¬ ê²6L%Ïè=g…uêœÒò–G°N>4;åLÞ—n‰zîóü$ 4Â7Z é‘ béuYå Li¤¨ïô—Ï|‘í6ÄèFç Q‹òJFG›ÈÍ+è–΄#¿<ì¨"b#嵃 S+KÛ)klq‡ñhФ”bÇ^M{y+'`wÛ–•‚n~ žõA±“BSî° ÈA=ûôºZŒÎÂP5=Ìq®ªÙqÅÚ=Ê’¹áìŽ#sUÏ ,;TßY­ UÏɶAç;ûN)fqPIÊxAPÉ\! …p‚3‚­A ,˜hà!#ªén›Z4îœÒ÷4”*¥–†«š‹ÕÏ„ IDATÖaû ”W•õʤçÅæ=côSE‰‹œæ‡P†[×ÉÄ3bdg¨²V»£Q1ÔíjÆêö¶“{tí¨^4u'ßZca»8Ë~¹¤©äæM‡¢2PXZRšŽïl öªšjOA5 8Žÿ\Ä|=;¶†Ïs~s5ïÐÒíVýæcPÆ!¥ŽŽ¶Ì.kC¡Í8bÂIRåTŸ‡ò<Øæ»pÇ ¨ª'PÛAà}î¨ÆŠú̲W ¤»ØýàptfÀ¤ë@ø6•9ò¼…‘%Æœ#…ïÇ`di¡ÏîÚ‘Ôs?Äèà„ÕâýÀ¤–-ïÙ;†_£s'´BÙ²6Ê ‘Úäúò °kz]SϵHí QÈ]žs†õ )gf(˜G¶†SÌ\¡L!“£Á¹yÏh f`ê=éÜi§eâöṵ̀1™}ÿyŸ sÞu(Z¿¯õ¿¢T_Ö–ÛS½R»[¾-l€~ŠP Â-ú†Ž;à †<ÒJè×ùInw …q27÷ œ­ˆËÃù!ÅÎÔó@9­Úö'TIšAMÃö ý¿S×À@AC ê^õI'¦¨²ؘIÐB"#u¹ùÎAEûA‘̪ ÛÀHØä!¹aðAì@Ý ^·×Ôº [oaðöÇ õ™Û«AZõK÷Ê6wL5ú­(æ•§µ :;ºê»îþ^ÀØýàPÅKi«Üèä;¦:þp{>Ý0(±•š¢ªöE[ˆ~t¾¦„6M½¶@ìaì‹å ¹÷ŸuÛBÅA¸La½‘`Œhyè+ i&`æ gy…¨gö0žQsœÕÒðêzÒÆÁ ×É7ú±SÅäÁëAì=gjÍ}¦d]DU<ƒ m˜ÉþÈFok„m I¥Ôø‚|#amµ>&Aĸ$@+åd‚3ù쌬š{8ÏHªúué”wR¸œVÆä`ž¤"Tô6@?<ŒDÈrT^}!Ыì͈ „É PV*˜ï(¦»]̺ۊ™·ÉI:¢„)|·µ!w =Œó˜{#ÿ¹ŸW{Cya*™½r8STÍþYØjo(˜ÍÞÐåI³3Ö3Ëkrð£§Ò”2y(ÇL‘Jn > ÔÖ jGÅÜ0Ø,‹ ^³2ؘ²‚ûÕ¢ƒ 3u¨èsYga=¨ÄŒ6Ù ÖQ%¨fjó:<ß!2UV ³Wà¶§ Ž.˜ûò7UÁmT2œ½Ý1€sîI…ã@üðƒ2gíCmK+osªxÿ¹©å‘÷¬évhln3XP»cn°¦9nçI¶ï´0i*]/[ƒŸBú ¬ 8;ëC·M8Fð2¨½ÕÑ@=¯¨gñ˜íZ„^AÛxÏ^-ØFk"(ëd{òùgÊ|¸Jo`αú©"{ކõTt;zúnÊjyð¡Ð';K¬4°„béuÄÁÙ9¤Ø­¹/IügÑo™ÉÚÈ©%a jš­Á`±*¢‚îç#´[¶G›gé§’̪¦ëÄ`±˜õ…5ߊõqpë+°',Q1›•‘Á ì0°6¨}îtÎ…VëƒÜ#ÊXn?ÚC@ïå+ŸŸÎŽß"¿³½œMæ1côƒCÁéW9«|ž­yh«ÉAË®¼YT¦#b°ï\ ýüÙ^„²½q=w‚†+ùdËâ^Uµ26ú¨ûp(°ß£€q¢õ ŽêѺº?;Ç 4u<6[úÉ—ph€¦ÛºL ê[êcµƒ2‹²¦[˜qìTî„€ ”idy &v¢½±CƒtPÃdvª8ƒ±ðuPæÚ0¸0öÅÎ5$zx[Ç”lgœÐAVÓnÀÅd_¬®»Ó‡Îfæ¶6@?E8=rFPŬJë6=ÐΥ˖ÇÚ»[gâÞTÔÎöè¢Qö_K³‹ÑûÏȺ_›÷9ÐƾÁÐ{Ï]ö†yÏÙCX›õÑଋ*«¥‘&µ,øÖúØ`ŽcUÚ¸£ÂzÇ'geÔ“±NŒS¾ Þ;"ÙÖ`¾K¯¦¦åOö¶H§ˆ×¦ZϳÆÃm>S‡7B‡Øýàp€«)ÁŠ;x5@gßäÔÑ^³4åá¬-üè˜ÿ¼Ö)Ŷù!T“Ðg“îq¢\F¬5¶¿Ñç@‡Ì ¬(çä=ŸtŒMokœƒµf—Q‚µÁPPßö 6X·+àc{¯ÛG<³@4Á··[ýæMOzÅö?7t4‰ù‰ë“¯ îÂ=ñ Ñpu²ú•4ov±ú©b$M¹ß¥›T²úûÉ\Ó‡oŒJ~º:½&ìËÌáz’nqÇpF;ÝCºv ê¾¶õ¹$Dm]…óÈÂÏŸ ÆjÀf§ ©Ëæ@ÊØÀÀ{Fì"¾ót0UÜ@íÝ`Üüé–V§ÓLEMmb`GMIÏfó¤á`Í;Ê0g·¯·@êMÁ½€o„ÖØ½ð€O}êS8Nx÷»ßŸüÉŸ”-©«7lu"cVÔ@(i Èq=… w¬¼n%¼b^Wô¨Z´áI·âEËk×Pùû1VÉqPÒ:x|Çí)*9}î¼÷¬nÊV0•ìaím^@MU=ÝXöèL·ðŠZSëlâl`@tžÆÄß=jÃàlVFƒuòšeß™;Li¿Þò¨]``!ШË=Ö»ù ¬GvÇÇwÅè•øà?ˆ~ðƒ€}èCЀ{\õ sÏß"ï-™rju02ýúÁ fÌ9(» kŸÄDmÔA#¡©êþú±ò ûÀYïXrµ8bŠ*â0Áì ¯šW- 85-NßJîó­Ø­‘OaÝRîR"šå¡V.\@€ 2wjzOiŸ ¤evT† èlmt©uú›gp뢯²vÙ:œ½ZXS9[hl€¾#~ý×ßú­ßêÖ(¥(Ö%¯ †R9WôÙܼs“ÅCß e)N4¯N­90$~I÷„.nÅ<)Ñmó_V+©ºˆ‚îÕ2 ÏAƒÛõôó¯ùÏÎÒ0DaN ”›\6K㶪hÜ::çF7«C§=\À—H^ÄNM«B©i¯–Û~Þ‰Œè‚÷Ü5žSͧÁº•)§dÒ þ´X»CÜØ}6~á~———ø‘ù[ÇË›8|ñÿ.€ù­_Žùê+2cýtULñ‚Z~”‡ +ãU#Å~訞â9KƒÝ¶µ/ˆóТ±4ìÙ’]t1š}1£¸uÅûÏîÙƒ]oBä2V´X 8 |oÃd–†ïòíÓï&éîl 'SÏUA3ö SÓ éªš#oÚ+ê½ó˜+¨kã¡øÌy*ê êÎæ¯yÁ¾sÔ$íîÊǾ~~ý&€^_ÃÚó"Æè•øä'?‰_ýÕ_Ň>ô!üðÿ0~é—~ @óc\¼ík€+ÔIŸ®’…Àèa±è{ƒ8êewûÐÐ 8âèzዦ‹v¯†Â¤žãPÕgÔsWX躉7š×\§ iç?Û“RšzîGµ£Ni31Pœ¥Ôð­xÊ·MMç,ËØ“èè”s.¸ îÔôNסAyϲ c»Ãò¢¹TõLÀ\PŸÄ}¢{5ì°öPvÓŠz¤žsxÏÕ+xÏÕà¿ûw5¬;/bl€^‰øÃøð‡?Ü­g8ïÔÃX—×įO¡êY‰¸¦¨ â‡cð:>¼¿n(8G—€´Áúó-¬¿~øbú¿mtýD³6ÖÕ3ˇ«‚öFq ï±/Í]ÃL-³›§n?µ7 Þrì¬bÓ-L-—ìé Šg¦ ݱšP³(g¢°>42BÓë´LQ=¦ ÞÚ«0zdoÜÌáB¾v’¸8S‡^´Øý4‘ ók÷T¸Üáû¨åNŽÔ †¼h[Øïµrr´K.ñª™Óu%_|ΜkLs·ChoöFr˜Hàí}i uPîÒëÖ΋¶ÆBâÎÚhŠy ¨§[p9ôjzªÀžËIÔ²(å©ÂÔ7Öåj[p€ïAÔÁœ=-Ÿ è4Áƒ>RÅi‚}™Ô÷i8ÌÖÇ9PãŽJô‚Æè‡7­Ò×F¾üƒ3ÒûP¯méŠ4(NZ/BúX¯~ Dÿ0«Ñw8s“Zµ‘œcQȱ‚"È-K#¨dŸÙÑ/ë{±[÷@1kN´5:ˆ[ãá-ˆŽÍÖ˜*„/ »ãÂmW_:ZÍò0Ûƒ}–G´<¦SÈ|*À‰*dOy쌛2˜óDuà¨Wüç¡¢&´Œ&©3v+52o|v±úÁ¡ Á@ º†A­h¤G`NfîªÊôërÖ‹ÄÀùQì€{uR‰Û9×)é±Çìÿ–øwÑ@†ë8Ðí¼ï}èÈç?‚‚ö–F¥ÑÖõÌ2(%8Cs¡'é®]zoÓÁÔ4Ñ·†ÁÒ|ç‹)*å û¢Ðn¾ôŽ¢šöV†‡´ÙŒšçœ&> ÖßáI­â@=‚ñ]ê¹O˜Ô-46@?8 ƒÉ+Û†j@çAŸƒó9õ|w%{òx}W´e gucÖ¬CïÖœ÷ WÀ¬>y(ÞâPðæâé`H hÝ9ÅÎ?9Å”2õݺ'@;¦€n’­Ñà¬sØ®tñ¾s1(Wõìl¸ ª¤/¦u_zØØ,AŠÝ œe Vð©zÒµ£Š¨é`s`œÁ‘¬î¡²yŸ¡zbr~®•:ÖyábôS„6†d2ã­°V•ÅHVŒÞà+ê¨Âr˜[Ã÷YMî®…N²®Q0yø¸Ä;‚R)¹û{ æÝÙCºp²7€`ot‰Âzj#Ûñ5÷9ûÏ¢¨‘l ¦Ûº¹,U)°Ÿ—ªžƒÿ,°-5ƒÃƒºyÓç|i§žY¼âú ñ6y+CìSÓœÅî0ÛÃY£LŽ ª“zf·lÕ™[ÖÊ~öE Ðަ Óa\%ñöÎaFÝÔ¥Õ€kó]Ú;Ž|êÜ_GÃÕ'x»¿eµ1žý77Œ/)ãï zÐý7Õ§Ø5{CçyBSÑòzÖ‡žåA±( ç6ÝÈ¡ÄMMWuM¸•FA6å|Yª¥¡6FõŒ Pµ8¦Øp8‚ôHIO ”E!`½,óæM«=²>ÊÔáGé}µVÍ×åÂ`Û  OåX¯: "±è Ù†•ô¼ÒáÛ/÷PŽÈ´b-í¤=p¼=Ë–Ò Ê^ ûîúvT@3¹|aèö‘¦–C£a¤ß©g^\C_†ôt .ÎÖ°¾Akd\hM9ƒ±H›=¡ï´R|ƒaŸ†qËҸ˗*y¥¡P¶åG£‘v¯º°…Æè§Š’–}ã 2#ÌBG•‘Z>WYÇ•÷.œŸk ôÂ~Ô­»ktž¢tQâ7sõJåŽ^ºõõ¿œÝžÁlÅñ´%—­!=i¢ºXˆyjä ¦§šÉAtÄ~*`Â%9— éËé½ßÇ+å2†ô>Az. :ºì …ô À‘€#}„¼G-gk _ ±$P;8÷ …ÔÒL‡56ÖÞS²ØýàPÁRëø¦*bJ †³?$÷j¢öSÁe. ¸œªmqé”ò¥@úBr¡[ƒ¡oD¼?¤M9g+㈠]UÑ#Û#er˜å±ª¢¨ãíËp®LÏ—5Õ¼)èQl€~ŠàèîY—úÀ!êyx»t••ól?&ÜJY›ê¨)뱟A(Æ}>w]éJä—וsôTq§žÓ·Xäo¡N“K·s&¢ÞÞ ›÷|Sí Û‚êĸø$à®júÆ|èݴࢰùËÕÂ`3áÒ+é‰qÁÀœšæØaŶq´Ž¹11Yú Æü檤Pö¶e–F?ŒGº[}jŠ[o¶†'ÖP8ÕŠã½°QÍå51òbÆèG‚ ¦8ë¶ §³öÆJeå¸u ïÝ2q_DF,©5øPPÓ«ª™Ñ=C`ý;«ŸsÍ☚·ÌýÞ6Oâ­qPæÒÁ‹&×/ÕÞPÕ¬ésÈöÆ ê?7PÏtªöU_Øë…ªééK(À©ó¤Cà ÷crLÀÂ`cCàKª¦]&‡ÙiréuÎIÊ™€,«Ñòð †/¨¢C½w¯geÅ †4Í®¾%Xwbq´òŒeà\¥µw ® ¶Üò`?UÐ}K<'`ûmñ@í¼KÖO4÷ZÔÎÍâð£sŒ?ŲUm“Ágo(¨“z®VKæFUÈæ)‹j&QÐæ?ãL7 Ôõ3Ž5cµÊ%¤/&±û"­Ó÷h†‡ªåÐpÈdëv Ë;æÄ_¦ Œ[t/ °Û6^ï=ë{d¾ Gšì SÐ ÎíÇp€ö•ifMNlÖØýT1R·ZÔJZØ‘-aÇ@¼VAùl½=WÕÏ zB?tIÀ–}g¿»Ÿc›.4c¼b êŒ ì,Žs—³°ÍT3ò½ °½½ÁKÍܘ\‡UÇ| žTM߸mUIÏÓ…ƒj¾(ÒTA|©@æÞ“®6G}ÏÅDm.[žó”üâb ùÌdëØí'¦–½’F‚5:5]­/×8¸$8gïÙ×y«„«µ0NŸ-6@?8²@×Ph/”ÞÂ"tjÜç…Šš?³½Ü¥CΉ ö°Øª–U³þ¹iAè‹>«â…A^I{+Â¥Êù49V»Ã ]÷ã±sŠff¬vXÁØÎ( Ô`WGFM^SÏ(tš´}‹ ÐOZ‰²Ý[]½ Yycú¸°LÃmùšpï‰Úû4Å.?òH­6¢]}ƒWÒÝ`IÝílWŒfkƒ›,3Ý^)} ç^M‡ð¶SÎàHs9"ªæëª¦ÅÒ YÔ>`W37 ƒê“Ϧ髉¢šædwözá_©ªæY@Ìš“œl öPîikS°õº5H—wʹyÑ­!zX§G½QxŠ·¯R8Ãy³8|l€~ppSÐVé<”dyT ê˜aEÐP<øõ*šÁ¡Mf¯ g=3£®ü“¼³F¸c îV¾/SÏ ÎÜAº*çZ%O¨£L¤ `8Ñã<ák‡©i±¡LAË¿¨ß|- v=ùº)gT?z7*\!–€G`\9H_1pÅÍc¾bD(s}_³dv0°_¤“©k ,Kë-Øà¬„©ì°3È;P+¤ÕKYæ?ŸSÓzWå íÚ]Ø7œSÎÖÐ!Z¶°úáA›ƒ:“ Ef$Z8·Â6¬€9ÃDÔÖäÆ#Ÿ¶¸:е¸“Øàì稽/íã½Cv‡œ½ÍÁ޽z>Uù¹×ô&ºZSå6`‰¹ÏÈצ¤k0®A|ƒy:‰b)É©fªªùªhj㊣’¾tàΖÆ|$ žwñ”Ã:ûm*,WÕô¢ŒQmµªºŽ&u>tJqYÃ×doyû¹£Š¶ºo¿RžÔª¶ÐØýà­·ß e’mRi_Im€e݉,º)YשïÜ’×Î(éöQl§´;‘ÆÖp˜Ô´WÏòqçžÔUô9]‰Â\ŸQÍ6,]û<½goÁå¥Äò´ïÔYrçÃË-ÌÞðªYí TU ¾Æ<íîPüÈ©æK®JUÒ—¦¢³7d5  ÷'ùîô;w–‡¾8%]Ú~QáŽæ“ÒÈ“ÁVö)$g—•Am›¾vöFšï:©¤º¿R'b«³@z|+öBÆè§M” Ýï)õP+«'Ùj±nlý˜m{÷ô©¤õ£}Öv;ÍÒ³LÕš» 6:õL£ôGDôœ Ìœ]ƒ"€Þ9×ÏÕä;â¶l:»ûJ“ÅA¨ê™5{ãÄOõ, ¦é3ÎM9_qUÈD5›¢fhï;sËÔ¸ä:Òä.‚|ªž3Ô^28W(ªíä¡T²s‚5»u-…’£M!6nžt9kD5Ÿ9è³Vºsª9ØÞ:ÜbôCÃì ÏOF{PªWÑhëBÅM ¶Ýœ¯lr×(CšUO"@zð¸À (ýáŠó'œ+°}§ö¨7áz&GŸ§¹ÎÊ3ÌÕ®PVå\AM P™ƒÆlP&ÿ×ulû£-‹c9Uå\n€©Ù”3®<Áà,Ê™J¯¤/\‘¨hyÙ\!­ªy>(ìÐüæ_C;À’àîr:0ûWSÅîÔ6GH{ cÉËèí …¶ý^ Œ€›Õ³«ã›m±úi‚Šd°ó8au,èéN8Œ)ÒeÞÁYn÷»eéÍÍ4¸³k·/ލfÍ­FåÎËÑR©®5þï¦îõ IDATõd×ã¥Ùªjö`öx2(OöЍó¯%r¯§é1Xýe”`VP_ƒøßV•Œªœ¡Bù)œë¼ªåæ?W?Ú«f…óîˆ夔+l+=´)AÕ0èïnB¶b‰›úu6•ZC?yÒÖþ=p`öõ"ÿ£Ú8RÏ›‚ö±ú¡A\31nÔ44XÕ RÕ¿r^ÑÍžWÌ“[nó…Ý÷ÏÓîh*ð™* %k’ëtkÝ|hn= =¨­ìþˆ^I{8OI5ûyB‘¿µÞ›ì Ý^AO`Lìaø$iª½Q4¥îZ@} LO€ù„[QÇÀcÄLG¢’ð¨H!(Øþµ‚¹W¿G.Uë÷«àåÐïa&(`ß±(L^-—ñgôci8ÀvŸ—aßê Aúú0VϛőcôCÃ`¬ê¹©hÛ®‘Y*á(…΀30Wåì^°´ó…LJU]ØM aˆè¤ €W{þþ}ùW(—n¾·6N Á-ÛdÂ$¦cfÆ„2ÔÜÃ+“ü0¼,gâk¨ÍÁ\­7¸Ä‚Gì”3áì b\r º._’óžA˜ÝŽÝk^×,$§¢‹ÛW­ ë‚ê!í$€š›ÕaOçNûø÷zEÞU6­ôƒz‘U´©‡MAkl€~`°ZÎÒ¦¬ý;•оrºmC[c ¯Ì~¹‚ë —–ùÄñœõÊYï&‹{À(Ê ëòë|é‘2ë¥9O®¶±3Ù+K£h„²¢š#ÄŒ 4oFióÌíšù¯R–ãqª€¦é ZÆÆ5&¾ÆG±5Ax¬óÔ”´ZHrŸ‹ä=CºgßÊ÷º8%l¶Fœ˜yiÚº^¡Yÿ.S×ìa›~7o*:®¿’ûÇS)¤UI{g¨‡'¨«þsèvª*ÚUH›ß­±ú¡AÏ š  ¦g ”´Tº0ô[œ5‚zÅìÁŒYÎö¦šÁ;ÔäÙº}á‚Â:ƒuWËV¨úÔ ­þs…uÍ ˜ý:€p ‘‚ÖFAíÆ­pöã>ë²lOSaö˜AØ)œ¹Az'Êš ׆1ÍRPH@?iêyz4?ÁŽÊ Ì xLéæ+ªpÞoe}60H&H;UkÝé—ªZmÌ ý×÷¸;VH&µ¬ÇÌï×9àº÷öË0ÛûAÝ]¸GõB “σ Р`f²¤JÚ«h¸Wƒ3ÆÊÀgxì ¯”=¤g Ì`uá#N^A»óF¡E,G:Pò Ò³ë|&¢Ò)éülÂø\ÆþI‰úǪ aª¶©ÓÿW¸´yüŒv ìQ°0׉±ãb4ÇáãI , ‚Ó›àù v¸Åc®P~ „—xL°×ÇäÔ3KïAvK½€5;£X¸¶Å.XÐ`ÍbsØrû^ƒ-`ŒöÐÞ €Û:Õ°]?˫谪áøÚT´Û§äy]Fµýþ­Ä;ɂփi¿-€ е8fÈ𢦉$»ÃÙa¼TÀ®QPU³Z^zíÜë"p^*¨ËŒNu¤HNçê!HíÐÔ“cØçDÛ8ÂYM—s®as³5–x.c Îõ½Í‹MÌû ió;.Ô§##~ œjÆOO€ù‰(ç[Û½¯µTºaÝwÂÚa2¿Zã¹ôíí-~ë·~ ¿ÿû¿7Þx_ýÕ_|ä#x×»ÞõOûà Ö*›X•t°8[6„ j•×)ç:Ìš³48Ý:_!ÍE(Z ì>aa4·v9ßî(iwGXn4H®´t\Ñô0ùSÂÑ jø­6‡€Z ÔùtS±ùÚ¹…qá;LØ3c‚ õ{.¸9ð‘ãœGµ5žåML|ƒGs©`ã%"¼´¤K³7®P‡Ý)K–¤”ý!tfp«ðòª—ô‚xÙ½é…çÐ?öc?†oú¦oÂ'>ñ \]]áÏþìÏðk¿ökøæoþf|í×~íÓ°X$ŠútH“ó¥9‚HõN•E„4ó ;kØCºMÕsäjtr©¯eøˆRfÒjwèµ >≫z¾!àÐléˆøRß8¨'Rï³Îæ€ÿ3#)*œ‹W~ÒgÖ¼ ä‚ Ï(:ˆ÷ØcÆXpÁ‹zZ –CŽÜ9U9óô&¦ù .ù„—x„—¼LÒ/àñ"vÆâsóP'P…ëª@”™"=„1ò]ëÎM£ýVß W~ÿê&½phAs×î¤m&‰”p.(¨ÕÖÛ­ñÜú—ù—q}}GÞ÷¾÷á£ýè?ýƒ‰ëY«€6H£Ú>7Z÷_µ‡´«˜<¥Š¯úy1›¹,@¹ø„SYpd¶'Ù)BNÀr L· ÓàcUÉ“*N±3ºq ¬ƒŠÊ 霓5¾G!‡óR×·ñ"œg° ;Ê|Bô¥jhì1ã’,¸Ä‚Kõ“CE? °<æ7@ó¸(¼ÂÀËDx™/áQÏ@¸:1f—w¬×ÀihWT0±S£­=X¶§‡^b÷51V ÁgŸY—­ ÿ¹A![6…SÑÈŸ¯Û}]:ÅkGè5èï IÎÔpøÇs hxÏ{ÞƒßøßÀ7~ã7â§ú§ñS?õSÿô €&´ÀZžÔ! 4¯¨SÎjqµ10êQR«ò Šº¨’>¡”#E åí: òé†0߸p`àH¡¡ïæ»›ßlÞ©ë<áNðzÆ÷ç³l-賘+¨Û£®|çë¢65½Ã‚½(é W`xÁ-\aÁõqA@ãpèMÐü&v»¼ÌŒW@x…¯á0Âå©>˜“\Œš"v €Ü~Ú b[n?U¸¶RÚÞ©hw¿¿Öƒ4Ú¾kÊwtŒµ}Të˜eÜ™sÇ„€;'`ûý‚7ˆÁŽ/l<×€þÞïý^|æ3ŸÁ¾ð…¾­¬90“øÒ0{£AWVÀûÎ<<9¼2q÷S! HJžμð²àPN8”šrǨê¹å 7> Z§öôŽ6îCëDááì/$® º°íO3Ðò4&·ó ­£öd)ëR×®óÅš°Çžg<á€nø„'Ë ×7|[€›[Ðü%Ló›x… ^áUb¼J„—Jí`bƒå›}Á(…0 ˜Mñ¶?­ùÌn½6Ò|øjÜk€°ûü¼o…±«Oyÿè¸pªÞy+ ¶»õáøzý­Ýd;ºûBýa[h<×€žçÿøÇñó?ÿóøÔ§>õÏ£ ½Åapfá Y&Gi‰P }¥tãm䮯~]謢ixÖl ]°,GÜ,×8é¡ pzBu°¶[jcaÍNüUízÌè€ ¯øZMåùÑüÜŸêèÔ_¥SÎz» èhm]n#q” ®kw•…«²ÞcG PpÍGÜ\ŸÀ× ðèMðü%<Þñe |/àê˜Ô[–´¸RšOìAœ•róÒÛÏëo’¤Ó¶ºˆï£4ïáé·ûÏꛎ¸ª8ÚÏæÝð¹œÝï}êyC‚´ÿòÂ_µYÏ5 ôGðã?þãøÐ‡>ô ÷>yò?ð?€W_}o}ë[ñs?÷suÃ`/¯Ö£ÚZ׫gDAS¸öPf™tTÁëâÀ; ìÐò¢§ºÛ±àöX­`¹!Lo0¦[Ât„Aœ½VžÐæ»[eŒ óávPã#^xªÕÄá÷Éí×Öë¾ãI ÖÞaÆW<áU0žxãÍ#põ:íŸà­Lxea<º¦B(zaJvýãZGÊTå^ùÁ³Ë5T­~kV¬á`ýr†½sè£ÏÒ ö»Ý­jÝ>#àëÂCºíÕóê—òÂÅs è~ô£øÈG>‚·½ím€÷¾÷½øä'?‰¯úª¯Â×|Í×Üùþßþí߯·}۷ỿû»ñC?ôCøË¿üK¼óïlǰ«·¨»ÐAý1¨ã^=;ò…“¢=a¢Õ©9Ñ'€w¨c*ïÞש\ØÄ§N7Onþåšqü0ÝæS½u/öxÄàBOjÑIk )«?ꤔZ§ÿ%ä/$.û.ßþä·”˜Ü>dêº00ã’g¼Ê×_Z@—ÿˆ·ìŸ³üíšãAÜaã!œ¸ç9Ë÷ÊÀ0M~PMƇûgdؽŽ;*ǽ݈ éµ}Fó/v<·€þþïÿ~|âŸÀŸþ韢”‚·¼å-ø¾ïû¾{Á¾ð…/à¾áïz×»ðWõW Ð{«doiøÛÄ{ur¶š„#yuíSÊÔ—XvàeœöÀñ¸½®/Pþa‡ëÿwB¹¾F9Á¥t êáÉ©LkqŸ“h@÷YŒƒý‡‡å0§_ß„=øû —ô¨{;S»è|ÿ»ézûG¶µùî}aWZÿýógv»­Ñyõ ÷\}Ç`¢Â•“)þMù<wÖmñ¼Ï¾/P<·€þНø |ìc{ê÷¿ãïÀç?ÿy|ý×=>ÿùÏãïx€o¯qüóÿ€0½ým˜ßþvÔ‡‘:RáìÖe©f0Öy„î¹õ•¤±Ž€ejݘO»š·¬yÌõy§ÀëÀô·ÀÕß\aâkLô%Ý‚pIë‘Ó©ù!ƒVä3zm=ù÷»¸S@ó`;çi0?qý›&€vŒcaœ–=ðÅ·ãö°ÃK4׿ªNýõ¦Çž+ƒqt¥üDyÅ™¿3¬£ô÷öl\ó&Ö>'ïz¯‹äVhŸýÌÑïé?£mÿóÃ~<¾”Ççxã¹4üâ/þ">ûÙψŸþô§ïýÞïú®ïÂþàâþèð–·¼¥ªgt¹Çþµw ”ëÀ?v GÁïhöÆÈËcÔAqüýµê£`ém$cLPNTCup$Ð-o'àzÞ˜@ÿ¸Ãî®ð.0ÑËØÓ+˜ñˆn1áXA-9tdj†<¼“æ^1ê{©š#hþumÞ¯#Dhº;šXÖÉüÔ~ŠiLsm ½áõ#p:¾œ^Æ?þíè—˜1A¡…„‚8ú´…Úÿî‡ëþî¼m-Ø;`Ýþ=ÃÖí€X›Îw­ü®LÃ÷=èVçÌç§ZùØ÷\îñž«=໾~Êc?ñ\úOþäOð»¿û»OõÞÇã7ó7[ ª\¤5Ú“fJïK5Ós® ©hƒ2…gËÙ òpWœHT3n ¸!àÉúÒ ¼\ž&\ˆJ™q…™.0ã Lt0H·ÉƒºäÚ¤cÏ‘a‚ÝMCË^aQ¶v‡Lˆs ªŒºö›Ú~v“â€Ls›¦0ï 7`ÜÂëGÆÍ´Ç´{ (qóæŒ¿¿Ùc¦ ìé{&"´Âš;`ç‹Ukµ­'7Ÿ^3Pi³Õ»—»î\ò玱^–8ïìŒ5µîß³ªž)¨äáYgõžֿèñ\ú}ï{~ï÷~¯¾ú*ˆèŸÖÅ[ƒuLNF³ÜÒ“@š`A í-ÿ„ ¯¢=˜=”eü‹ h–®ØdcgÐQ”ó ×S?p Ì·®hÆÎt;Ô,‡™n@8TPã¢E`íUe?50‘œøê•“˜ˆ¤ ö¤.­‡°‡1 Œíú'×@š€IÆ¢ €yGXvŒ#7'›'Æ"ðüàG]^ñæ2cÚc’Üéú]L ˆêß>Qÿ÷zh+ܲêÇáAN¶Í*½f˜Ó`›ß羟“·/~ßǃø{âçÒà}îsÓø9móÇs èÏ}îsø»¿û;\^^À? Q  ÒRÉH ] ¼"ÌkÖÁÝÝS“å‰' g:ÕÜeI”óÜ2p3õY¨ Â\ vï‹ ;ÌD˜1c®‚ŠÔîЩ^ÑÔtëJØ`Mu™ôûÐ?¾e;›J&rÝàÁì&ò=1ÝT4¦‰” 43¦À{ï§82áza<pM„Û‰€"ÏÙž¯€Wå0ãK_ÚaÇ;Ì$iŠØc’o¤>?\þF*˜œªö ÝIÄ|’1p{å}N•÷ódj•ûõ¶ï¹cÅ}Öˉnßî´_HÇsaåôjœ]¥ëÈÖ½€çЯ½ö~ögöŸùSKUСÂQk0 nH÷÷n½XuvvÖ†SÐjiÈHs|$à8Çt˜À·îÛ„i!\ЄØÄH‘ÂîD&L4cÂ,žô,“zÓj{LAU+°c;¨[A=â:µq³+|»1´ý¨€³»QÕ,JÙ^wÀ´«`Æ8Í„caÜà†7ĸ™ž/@åÀØ]ÔžofœŽ3¾t3cÆD;f0íyÀ„ {j¯¨¼h^YGx7èEp÷ÊÛï‹ô>tûå}Æ€1¨ûÏ:ôüªê9¯Ëpö0wA@3à¨GÓžs@îsŸÃ÷|Ï÷˜Åñ+¿ò+ÿô5‹ÌÎ*ý-cº}4y©ó mì í§“›Žäü窢éˆêE vL2˜=£ê¡§òT×Q…t°BzÑ$Öm‹(æÅþ„–}¥'(Ù6û³d…~%~´?¶±Kàœ8ÏÌ ¸ªš§¹YD/xœ¦ú5Ü.„Û…qKÀíD8T8ó{vÀã¸ã„C™ñÆQ.N4ƒ¤ LµG"hÆ#1B*LiTú©éÔàHÞ«Ï“ìëzE[¤î£ßh†ýú瞟üñúÏã›í 몽íçEáê¾M$=nݲªhí»€çÐûØÇðíßþíÿŸÌ¨ƒ%;úPqpö¯®rNAa¬MÜ-°§;HŸ M§©¥iã8Cž„˜ž;féOÓºå2ª‚™dÞÔë+QXB†oAYÉEÙCá 0O™Å²°®ñóÊ´#t§7Õ¼'È£T€ à4ŽÌ8”êò¨‚ùX¥ÌWõL*Ë_·è8— 7oΘ—&¹sPéîfªªºîQUóšG/ÛÒó¦¼%â•wôóãòš…ÒÃ9~ÆxêU}ü¼ô]ªåîHûÊç¬Á9+bµ·¼šÃ$Àe?mñÜúë¾îëþ…~h¡(M€å´ƒ¤˜³Â ·ÐOÔTàRêÐ+hjÖ†Ã#§RùÆLìF°p€$ϦôâÝgó.ÉzSÍúI ÌæÎÔ¾š6 ¤«³ Pv¯eH# ö@Ù´'о*ð€c!±ãÙlùãDï@¼X>”fàѾfº'à4£,®¯gL¥©hÒ–H5MЧ’˜A² iŸ¦¨@ŽŒ Òkðö>¶6ºÆõè@áìáŸ5cçùÏuàͯC‹Â§).Cë½;ÿ¼­¡u$YÇVÃþÅŒçÐøÀþe>˜¸‚™X¶†flØ«¯Ìî½J«PE=û:¯)#¬E«ƒ$ÕŽ…A§"ÄN …äQPбßB›)1µ-¨7qrÙ äÏ+®w§ÔbpÝÙüfmô3ŸyG (;îà QÌeÇÀ0íQ•óàÕaüK».‰pš€S©c`ÃÃYÓCíDApšÓ„S™ñäf«g‰ñ­pfjUÕ—ª¨É~É)zÕ§*l7¿ê3ë)«bÿyÞýº‘Âoõô¼"§n»¯ë fšÀn¡¬&HeðL¡ŒéƒóãÅŽçÐÿrÁ-r2k¯4¥ªfnÈ~¡ÕŒâguO¨Wj¶¼hNéw¨`–‘ù'°4 r¬ñˆ‚XRUa\ËΩ^yä=ôCB¯ ƒ•ÑüŠƒ³ÂxÚxÏ({`º¨Ü]8©r.\ÛN'àT€e"0Sµ5؈&`·¯O€=Nõ Ë*žñävíÍq§¤Ûå :šÞU°×-‹¤é¹œjj€šWÝz5Ë#fÈ47˜R˜Ïß±¿ øcöïÏŸÝT³¬Sôwö ‡ƒó̺ÿ Šè-Û„fqÌÔ Ûm±úÁÁ Zª 40n Soº~NWG"¨ Œ¿p@¡ j{0jô ÆDêž²Á¹¥!ÕèØ(´ ¡x=Ù+°È(Ë2_Ï<7;‚óÈ{Þ¦Û˜O,ã?Õ$ ªp¾àÊUqt–,Dõ‘ƒÜ¶±=ýÜ©gõX®v5w\R‡k=ñ„'GÍbQ%-€&…ó„B“|SñA—¸L*y ó}š¢ï½AjÝðƒ"ÏïI*Ü.Úm=Ò{Ã~äß3RáÎRQ½±úžëBºp€=‘KÔ -6@?0È,UνâˆóþÍ@k±vµptW©9Ñí<–óH2=·<½ZŸ9’5 Ú© ‚¯äZcØÎ)ëâ^›.§îl‡YWÐÞ{Þh'–‡4ªjæ à´'p3‹=Ï:‘} œ1µ¯Z] /*z™ÀeÂ3®³d±hÃaü& ÎÔÆ¦.²|)zº·>z`Usœj»AtÚÌyòjá8^=g»ŽDù“-·y©¸40SxoÛ_ÁL©>°û™È-o„ÖØýÐ “HYšÑ+h·_XÈ÷x+N’eŸ£Î›¢VR•¨šý0÷#£K±€¢zÖ“z–yUÒãOïUR›¬Šs!È©æiOà €÷lpæ‹úÞ…I¾‚ j»~ÉMDMŒñese$Í詪h{"Í„Â3<ñ¤œÕ“ÖÏdv´>.1áî»S»#æ’ePÇqQ²ÒîUw»j•ûàÝ:o½xÛNÛW°´»?÷S{PûjåUtª¹^XË4·Æãìɽà±úÁ! µr‡Û>ý'ÝòÅÑrÂÇŽ•4œ›MõñG\ç+ÈñQ*ÿRí]ضf³‡À,ðhp®hÏwú£pî&I£3PëÐÖ;Ô¬ ó²k 6Ŭ_sƒ4ëcöF+ífàÑ4•jwžq{3c*šî®*òÇÔaIÝC(ºPuUÔž ÂY]C@Žòø°y «<-mƒ:ݚɼÞu”V_Q\ÖW¯¨S ËËù½ê=[ý ¨¨·°ØýÐ0‹cä;W8SçA{JPªè5Â;¼z·ÆC·¬”b`"omŒ =œuN=Rp m´Å‡vÀò*Õ>ŸäïIç¬õ$õ¬p¦Yô®AšöT}è}}ŸWÉzƒQ×ɺ¬#žâA¤q5K#!Uѳ)iæ 77ˆ[ÚÁšüßë3=ú~‚ŠÒKÚãB@m½3I¿ï5 Äÿ~¿æ¬Ìãüö÷Ç `¦¤ƒeá¿K¯¦Ý÷ª9§÷¦ Ø©g4`o º‹ ÐO“÷ëÄ XK­ë*ú$³âolKƇö0NË…¤!<Þ€¯©çè4 ¡BX•òì^UÝùF æþŒò=›¥¶,ÝU8›‚ÖÚ¾Aš9ÁÙèÁƒw^ÇG.—vY!×jgp&]·@37*(ƨïÎ*¯œÓõ©ªfõŒÚµ{´>nq™›Ã£sm`–¡u8Ô—EýÝæÙY”I,2PCž$~sÛàœïØwhÁµ|+@µ?âtI˜A€t^fòÎók‘M©[ œ«¢Ë“ƒ´ÂYÛ"œR=]žT/2¼Å—EI¾£ÔMIEO¢¢·FB‹ ÐOv²QIزŸÏ•Õ+ ݙӛdY €|Ž´ÀI·Ç&;^EgÆ*l~' n‡fkèÎMA®¡? e¹µ“ZCa}þ-¥çà²A Âþ©Úõ•l™íï\(êئ«u왜Õ&YxÂÍ1ªhíß¾mo,¹ÌrŠËðÛ0á3f»ûÒá^°i ƧÒ šó¼BY³oä7Ôž°6¯p^ܦëõ;¤T·›¥WçE9çznË©ºØõn ¢7>[l€~hh¥b%í”tª ¾âNn“Í$H›4$G$ª÷öP``סD`Ï…ˆÑv¢Õu¦äÑ|ƒó8{£#ÿíO¬-Guî¿Õ½Ï½æAøœ'ñ[ŽM)Ã(E A "(RðÈ 9L9’‘É ‰`xƒ+EÈAÊ 1&À&~ IDATÓÈ~1D@$+Šž/“clc°„8„r{ÏٻߠjU}kÕªÞgŸ$ï\ûԺ껻«{ï]§wí_û«UÕÁ›KébsÝ!I…³žãzzXAƒí ¥ºé”-—g£ U=Kë­®“ÝAÙeÞãM3ŒíesZ‡˜q iæ¼tEqš|¥UØjüU7Í@(3½eÞˆ~– `ý… pÖGÜÆý:CZö²>=´H ì Ïôe/ž3AppF]/¿÷iWa‰qÂØT¶(2—<:p κ.´½@W‹crëÞXíB©%¶ú_~qFõn¦óRd´ý(ÜÛ’Ûa/¢Â z–ôâŇ–”º¸S?:AZÿÞ“EpýÄ+iî8dY8™?¾t"Šªm×C ‚K8ÂÛ‘¨n•u:I çHy«‚Öºna:9…-Œ]à93¬«¤ó‰÷3Þ•E?dµW– a} ¿”NB Lú2Àôá¡Wù¦3n;j‘Sm¬¬ÌSP+z °¥|'ÔƒÞf.ããTzZsOEûwsUw`fVx(ë£ÞÊŠ XX·oÃðН:§Œ]ž˜¥ÂSþ…’*¼,Žÿ#e}È2CÇaÚ, ¹ÄîlVQ‚#l°)Šx«¨O |«šÞBû ꔇjmð”±TO3 £¸t:¡ýÛ m"(c‘â@li»öqB¹ãޱ7†]bú,±(lS4?$}ùejsß$7ÔðÉÞ(ÛBGÅžó鳎3+h ‘Þ+øK-2„úÅÌ“ãm<é nýŬ±ØwÀÜÜ»®¸þò‹gW -ÓTÁ¬VÇ’s¢ œ¥zÒ‹àøz†zžù©í¯¾âÊ÷}"L’Ò§¢ŽS~:ŒZöÊy"€Ÿ”íî\7wcG1 V8»si€ìTs0Ó]·CU´žúL¸=LbË&Œ €>4d!­]Se'ìo{À¶F…t{H<5j‚qñYµÃ!«ÅÖàj…‰a,¬¤'€Ôt?ÅÎÕ=øÓÛÛ\qÊj'á `³`§€¦SÑ0#°5¶›$5ã†Ò#/OäEKRÍ èSÒ˜pr]p}[Á g;Ÿv"ÿ«;~¾m#i–”êÿ'5}…ô ª­ žH]OP0‹^ ø"!RÛÛ=8Hõ§ ÙGÅsV[ƒ2HLÇxÐ>ÌõkxÐІ¨ 2…Ý£-°UA{ª”Ã}ãú1e¦>šÃ°HÜæu1׆Øâˆí RÑá;Íã•’{JQÈé:¤ýîZ&ËúE¨ž“Hé©z&p‡6‡äCëœÙ±,Žo¤ « +œË*A{¿y,øÓ½#“2V 3¸«RN•U1§ò“ÜÞNê‡PàœO.•×2¬<*Œg—ûOp§÷)¤aÃÿé<Ü{X% Ï¦ÑF†h!‘‚6„!¥ÀæºF[r  ›ôÒúŒýKšvt2@^ó lü;F_DªLñ Î*òØòp§ ùÄ€rlçg8Or•gÈŒ4²ÀŒ]öÂp–lu¤Ç&ܸ‘=i¨&«£”9Õ µøüÕ}pà.ÐiOíŽ ÄzES(«Õq‚ªê-œM[lrõ$K}\óLår66Gð¡·¥6­%  ½ÚGåv…ö؃6‹SÏ l f1¸7ì¶÷NšuÅ/O1×flÔ¬ _yÿŠ7®¢’_²,<}svçZÖst'$Î6Weh~ˆQ–%}F53”ëºúК’²[¦4¹Ò¶F ì Ú `k{¨ªžÜZ— ë ~'z?ŒâT³žøÒi×Xîs+ž’žÇ9?%³I±SÅÌpVêRû]k´ÁWè¢ÆôYBÜ#ï(` p"SUÐ ç¤Ó@¹Ã«ßrõ§¿÷Šƒø{–©(h–µÒ¶Òí+ºúù‹Mç”ø¬UÔ»¹=M=0 ò/ã|‚³øù&̲&ÉyÑR•ô²í ìÝ"¸ql!=…p®¶Fk‰L´¯…·}Ö„¹À¹æeW«å$½†ÏÈÈ0¶Ý#”y´½¡úÏ é¼- h‚s™!¯sµ á<­1}h° 0å½–îð ºÇýüã÷Ò/Rµƒ2ýºÈ´ÛíqSö ›9'Âù7¼ÝÁïÎp èoÁLÇD zZZß¹¼»8†;¬ø† ¾“PtXóÜ2‹CñJ:ƒºt"ÝïûƱ`Z&L’.uÄQYUÛ1uŸ×ÔlE‰¨ý¯b3f ¨ûËG¶¸ý ÅܪéV=O¨ö/;¸7 .A;`úðh‘P{âoDgÙ)u@u¸ÆºÐš˜ÝûÚ|Ù.oÅ VÚÛ-÷iñ½çLO‘uOHOêü9°3¼À1}†(YiwD~Èê‹[à49ªÐRF]y[£Íà0‡SÙá‹ %ÕüçŠEî,´HŒõº«ox…p/×4ºæ²-u»ÉÚ@º›ˆñálŽœr'¤žk‡˜¢¦õ“ëÙN˜–jGLRך–®Ù‘–Î~¡ý“¾hˆ’¹ÐKÍÁ·W0×Þô³átDÚ_Î'ÿÜ™ƒ2RÑåVîùJ¼äòRny»Ôqj¿N8  %„/3ÒGj¨úDžÑ΀šÔ…~©ÊËHÜhÅ®zLFÛ®6éX5[íêÑ^ešºu+°éi¶‡„‹³7Òíì(ÏÙ<ÊÙtJ;¢P®xzGû2 —Epœ!mí‰úÿ”¡mѪ=ÕÖðÖˆ9–à=a“>·2ø¤ÂX¢+7`aXöy0çãü`qÀÆŒÆÖ(9×üaꧨquà‹HÔx.n @Ÿ%< K¨Bé£Ëü6GÛH=al“͇´Û}c¢VÃ+fKNóº6zÐ\!ÿ¦þ-\ù4ÙÃÌSăÚî[àT²ƒ¶¨r–m=fBÊ‹.6ÛèâO[c7aÙ ŽÉ*ÚU9[lë‚l‰ö•cD‚²3Ȫ‚éc`X@ssÕ} ˆƒG³©èàBÏ·Çò Ôµ•xÐÖÅŒèCÃ\åÅ®›:dŠªtÁìÔܺÃbêv!X s±gmØ«I_Q×Êu¿^k§)°8¢Z0ŒÃ2vð`vÞ3̼LÙÍ-˜   ÜЬ¤¥X´â¡kͶ-<„ÙÖ0Ý‚¢ŸáŒ9C¸Ⱥԥl£¶N{0kúƒxnË1¡ÎŸMm¥§$¶?€><´½!Â7ˆ@ù‹³/X¤mÄÁ[úêEØÜ멤Hõ†v[É»ÞYxнSÓ9 hiiËf礢×,Ž­ƒtžR(g…³B¹ZŠª:n»L¸qB fï|œmj‘99 _«–ÐliØòÌ:¹¿Z1¬ýMv#]FF €cú ÑdÔ• cC§\ÎGOŒrYó>mÙZûž‚òÔz[$§„ E[šJ÷;u¦C½=_©k-Žέr^Ž=‘¯¢#åŒ]sé,Ü— ÂMVGèfä¡B:ev¬Yk`ž›c:p.€ÉŒæfبpàTª¹\ä<˜S‡ˆ{-´?àòn¥®ñÆ…ŽèCCab ¤®ªÄõ^ó¤¥ór§¨b=TÂò–A4}ÙNãbËZ{§E¯]®ãtž¬ž7JÕ!äV5gð6ùÏìC³½-=«Ã ·°f¸Ÿ\ÜØõTq\n-ŒZV†§  Óº”¿?AzSsÁÅ.AxÌ;”)¥3p&(³R: 1ÁöYp#píA×'»û¢Çô¡aí%µ4á2Z¢NÂÒþe#µ4äÞSO“Á¬hˆ!ílà."ö:õ @¥/BªX ê"dw¬S&Ç‚Åç>‡# ½õ‘Rî$PÑ~)ªÙÙ ÜÁ¸ì7nôüh _ÝÏ–‡ÎºqŒªœí"6í9—Ͳ €so~’ÆŠ•ssã=çuÓ.«CSí´Â¾ 071}h@÷ˆÙ!Ž>q4òo?9ÍËó[Jþí°ÕEØÄØåU ÓùXÚSÖ ÏÓ±LIEw4êid`§c¥ZÄì?“jÎÖGéHœÐõ¢cUí·ï4¼Á 8ÍQgT1Úà| RÍú÷z8ssUÒfl˜'VÄ+ª¹çÛcÎ8UȬ¨}áiT45ß¾Kc¤Ö€>KLM‹r-˜Ëˆ®eMaØ}˜ùí{Í™•ì¾·™ÍÇYí+ô­¸zF»ÐôÒó„âC³Ý*h1ðÖõ6ÅŽ:I5Kí-ì$JBS’ö3=©Û·Ý nl«‚V(7c¥B[UóLP.§´jZÀ€3f†³lhÝf¸Xxçõ¢˜#hOHÖ‡÷)T44ÝÎ5„S4¡‹ÐA|ï{ßÃC=„Ë—/ãÚµkøÜç>‡££#à¹gPZR3ÙAŒÀB©&‘¶Ì?_ÁcçÝíÓb‹Ã¾¥¿«ÊäŽâNÃöÝV=h®òÊÕB!½dHo1sô–G7= vÙæ`¥¼fyXpCàÒœîü­)ñ„J§PÔ¼œüGÊ‘fåÌ žÅ©æ çã æ´.Æk7KS&y8¸Bùô¾sµ2À+Ö†Ÿé*¼¢xÉ,‘ Bk @ñ–·¼<òàÃþ0žzê)¼ë]ïªL|tgÀü^g"©‚Žø×az} Y…³Һ݃uÏÖ𖇯´­¼ÍaëÕ¿²€“ÅÁ~³·3<œUE‹ÉäØf(³µ±…UÍv¿èh¹UÅìð)“¿l“ÝX[êß¡VÕ\5Шë-€£®óìw²A3Ľ—+Þ€yÉçjö)€I=¯*h1ÛÀˆÐÏ=÷î¿ÿ~Svï½÷âž{îÁ׿þu\½zÕ¹4$‹<·Ó•‘zf‹£oëÆ‹;ÒlùZ´µ²ÆVi!mŒîOX^}i¾~¦ksIñ>ÍähòŸE•µ…öDe“UÏ ˜|.t¶0°n‰e@Œ Þ©À7¸î£ý»¤ühç «j©ªùDò´ü"ÖüwÖc‹õ·zÆ}@Û¼q¶±ËQZä(ù̺œ@p"‚ã 8Ñ%Ãù8+æárZ¦ ñÉ z]Nòã"Ù† DÔö˜i™’RnÊ&ZŸM{ãíôš³iƒáÂWbú¹ôŽ7¼¿~û­øõ;nÅë/]xÝXbœ‰ î¼óN|ÿûßwfÞµò5’¶®LÓx˜\$i{JÚT"¨B\ÝS©ê õ¾„hTsÏò¨mF’zîUÓÿIéIyéÝ«çî:«J€|褖eÕâh´È˜–šï¼•–„Åò˜ÎD·.¤¨—lul`{,ÀFª’žiÿF_ ¾j}¨ÊVÕ¬ÇiùÈCÁ½2öŠÙw ºòr.g:Ÿ=§µ7Â2Ù­´ŠÐg ᆯ?(XŒt„[ï?-|Iz/1[ñÓz8­Kú"ÖA(n_üÅ35zð§‡ÊæéP¦õ AJ­mñ¡O x[Hw,+úH€Ý\%©zÑÈÞw.`F³»Kþr4ª¥ÁP®û¬µ1gå¼q/}¢M*Ÿ }ò§Õ¦pvEälu Ã7X¸CðvG mçAûf3f³+1}h(ÂØ~É ´™hÂ*}P{òv+b_¦ßI¸ iW¼¢öÑ4ë5ÍÛTÁbs 5ÔäÎAô´4ÀÞâ4Pî ÿ†ZH*zŸbVéªp¾ÔB»¼Íœ+ó¥°ÿD¬JfHoò±UA[¥=Ós«Ú–Ô³ À,¹OA=eN-4³];ùæzþšLÝÏýk€@iÛÐЇ†tDÌ`‰E‡Ý±’–ø­:Õó[=¶¤ŠV¯ÚIÙ^1GØo{ÅoHû}äc6l¦X5oD ´y¿Éî ØÁ@i`í§!¥´; VÊì;t38» ôÑÉ,‹`»X ³¢V8§GiT4«f†õV*˜õu§¼¾1†±·4Ä—÷òŸzžÓyÜkqø¶’ Ðg ?$ÎP¦iVÖ>“#‚rë ”·ؾŠfW<¼¾¼î²6Ö†zGJ;CzYöùæ2:=üwÏ“4ªÙC¸çE'_vÁÎØe7å¨u…µhÊϽÁ`fŸùDòŒx¨ªY_Ê ÊÈl`ƒ—³*˜`ÍûZå\Á̯§Õ™‹M±Í0%U¬7 6ÖF-·¶•7VG'ƒÃ@:Nñé$h^Ø€>4˜Ma}ìçç'G· á4»FA÷—ż?š­ f1ÛA­05Àõ–GÔyèíɾã«CÌÅÍÕ]’‚f@op 7Ž;^³±í,¤œhäÎÂ#©„…ªN1“lm˜¿«`.Ùn¶'­¬™¬¢ˆ7ëÒúRTo„ ša-²ìE³­û&[ÞXkö†ZdüAë/õq€èÃCPo»G—¶’0t¥£ƒ³ôA tÚp¿a×§¯ÍjÇ™Á+TË«cAšà>ªÝJ†‡5ï=èÆ À}zÐ-![H7³c›Tôn*Ô Á¼•ޝG/’­ŽÝ‚du”—“ k*KÊXšc«b6. fÔÎ>“Í„lWD€½NÁÕA*|Œ·9+Í÷ÂÆôYÂ\íµÀƒš×‰ÂÚóÕã vYdÒöãúôEâþ·×ž#°;¢[xçò gÿK6¬ UÔ(© Ú,°î RáÇ´ ”¹œ,æ9 piÌ'€œ˜—.`n¦þàyŒ`»¶hAë•ðªbFP­ ,?¶9»¢é Ôc¼¢¶~³¤âànîÇ sЇ†e6;A‘ ª-—é~ÞÞJn¯xÍ{«"Ú†nÓsR%\ZO‚Å©è¥L5j/# ¶ AW·×”´ŸíN@ÕÐN1Ô勞eóõ̧k'œ•!Ö±Šš^á­ ¶nî éØL®DÇ« ß D!¸€ù9+i?݇fîMÚ;í0”Äu=ÙßÒ¨å?d—éí|n¤d]Ìæ \Ó謎Õ[]íñŸË…€FÅbÄôá!ȲL7üN·hJš™ntî«g½D÷/ßr‰gjUÑÜÖT·ÓWÒ+ç´>5ò>ž4)J³+5ãï䪲®õœ§¾Š®–Fk}lFIo±Ëõ^t¤šë~wÌ´$ê)˜Ò‚ iÉåÌìšÐÛªõ]:ƒ»ã Û©…nRÒBë±:Þû“Í!ÎòÌF³¢ö ¶°•®½Apf‹$ôÎ~òb7G¤€>K4\ö¨³‹™¢SÔæÓnCP¾ô¾d¶¦V ù}éíÎÖÞØï?׊‹t™«GcA=¦lÛ ëÅg–êCu «” ÀÅNSºàؤÛy³½Áéw^Iï’òÞd0È€VÒ'æ“òTç˜HɇÖyŒ–ó¢Q3Û„ë±Þ‹–@Egl–¼h…1ÕXsýÛ»Y®³0RМO]žyPZcúÀЩ-âK¾*æÞ’½Ùi"" !=ïì~qÇ÷k6ó æµ)G=¤£œhoúòü €Ø|æ¢C±ë^Aûõ¢œ³Yi~è@57„¬®+¼[ä™3€ù²™“r>– èÎÐÞ“6ìw¾ôgUÌeî%´Þ¹òò\fî,ÔÇEòdW%ÝnKú9N¶,Ìêpj»qàEGwp¹‰èCC³+Òï GZÄ‘v™P²8Ê _¿/"éžÖ,´Ö<µ¬û}•¸…4a#@ÛŠ +h M±‹R)v°JM(Àþ±×YxÂ@.à ²9ÈIˆ<É€ÎeÓ²™ ÁYÕ´Zù*"G gscsó`»HÀ¬–[îŽ1™´o*0UZSî"¥ìËÂ~á^õ<µWèüÉ7ix8 ÏLº{ƒ‹-ó ÷@:wo+ùôîm˜ñ¶{OÓìT1GyÏýVòqË®µ9ÚkÀæÓ;‹àÈ+g…²nƒ”3•Ux Nx® ou@±$P vΉ¼UEo G’À¼&õ¡¼’–ÆÆQÔé¶·Põê—;wÙ±e¤aUvê,”òyÖ*Ü)؃òÊz³\š†0ÀìcúÐPx6å‘Ì è¸#R[1*ë/'ʼ}»ÊÈ*gEkdkØ´»u?š+OPÖuåöR¢Û:i’·5"ÝÌÕA&Ǭ”˜%ƒ¬–…Ö½Šž§ÚAxLpVeYÝìGQu8Ozv»À¶ppÝvÀìAlìÁ-yøwko4p]2û×-¬k;¢ ÒQ¨¶ F»€>4”A”ÕÍ5@'xI¹±Þ]ejž²ë¾¸u.Ͷ]»mǺ­ÑQÖ2˶ÖhIï, o[€—:a5 ùÐ^I­:Xe#V]oA)sE)+ s™¨zÞ‘’f»#«êyfIÓ(çÊI¶5mŽºÚÎbT´ÚÖ‹ö°•XQ»ã}ÚÝlŽ­p/Ÿ—±;¶v›s¦÷ÀºM½ëm3½t @Ú–uƒwxh÷f´‹F*€cqÚ‡4E4ìÛU½QÌÒåF«Š¹iq+‹ó¢¹³ˆ}è Ó'Mbk£®‹±4Út¼š?½”ßùQ`Ùe(;õ¬×ílslfÈFªÿìà‚y+íí“IGr‡á> ‡e¦¼÷éf }Ø€xÕ‹Ö¬ÿÿ8s @Ÿ%&_ÚCš(Û›,É+êèуzJéYmìkèb©µìM˜ä•u iáŠú»Ò íЇ3'‡õ•ãéGu@˼7ô¸ÍÃ÷ŒjvÛU=p6–Gî,œUEøJ-ߺ}Gh4gt,ÎÆèA:²4T¥½¸ý¦³PÒçn€¨eé”ï·?Ö¶µñÅô¡á…²WÍᶃõ4µyÐʾc  ìߦªé¨ŸP]Ý~Í"%=“ͱß{6@öÐŽ:{ÛTW>Õº2OÖ{¶ë4ÂõZv$‚#Gœ`1*:)ios(¨«¢æ¬I3%%POH¶6 wŒbPçÊÖl%m²:LêT/z9@5—G YÜsÚ ¤foê© |HFGVÐ#k£Ðg‰Èâh`­ÁRîMˆÔž×lh8xêÕf­é KQËû½çÒ½¢Z »m_»(³ƒ¶Mž³Y* ˜F5o ¤¦%©è¤/C9¯kÊƒÚøÑ[ˆ,5ØC™A½Eׇ֬žšTý‰Ý6ƒTOŸhQ›Ê„€kÕrS.Åå¸Ù(åÊ-À÷xo6GôÁ`k @u Š)…A_·£P•¥ ¹íín`-°ŠÚAº:%qÉÔ¬¿¦Û¬´í½ ýÄI‘ÕQ¿Ðõg@t–nMg`4ÊÐ(l t¾dØZi>t-‹Áœô1Äù묤“¯°íز…ÌSî 媢‘€Ì 6Â)ضä¢hVËpÊxEa/þØ|6J¶Å¡iu§VÖ;”Çr±wþÜ`³‰èCCÙhQ.£òÖa.´ƒ´qY§žSTöÅ-œ³Ýæý>“C±ÇöYXYÛÊ–/ ÷ž‹hru-ûÎR ­7IUH뀕Ìö±Âúˆ´v–ª%„±BÚxÓ²æ#H6Á ½/M`Nö†›L‰ügcw¤>Ì@5K¬îkŽqûˆ;¸/ú™jJÑ`àÊž}qvµá–9€>[4¿ÏyÅ9—1¨u4¡ïs›a•µ¶Y*¨ãq*{³´µUdúT»ÃÓìt;_Œ4ÜÈB«’é¸]…²J¼t “æÒQT4ªÍá¡}àX‘dsìàÁ¼æC÷ýhH dkwœ ªiÍìPµl:‘àÌãfHI×”;éÚ}G*ºÂ=_7ÊkXÅë;…Ö×ÔrcnÌàÚ(˜} @EAëï Ôr´LÂ9¡ý¡§‚u…­sÚúQy«žu™ÐVYÉàð*ƒúÒ¨(o[œRöÊYÉ"K}×v³QÏbÕtê(L…¶£ÐƒZ·ujÒØ4¸eBloèÀµ9N` n ­ ›ÕôE’Š6 šmŽv;RÜÍ©õ¨>t^éz%MvÅÚÀ•=0OW"VÒÔЇ†ùn¤®°w|ýÉß@Ú´W±œóO)ÛÒiSxêKIDAT¼ Ì“²Þƒu æºÏ ÷&[#þ¢©ýÁ@W0ë²CceØJ£@»sÝN€®3T³zfP«]³@ZmôŽí@-‘²¶£ ëÈÂ%«h=y•tQшFš»浪ê]{z UE£µ3XA«ÂöYjwx@ï,dÛG €PE{;„×ËÀ”³ DYUϾáÎõšÄˆèÃC9Õêc>@<ŒhÙIQÉ ûöü:ìî§w05[ÃfGÛWÇC¶÷ýLe»2Qûó%­AZ±aÀ¬°Ž:9³Ã@;OËÙ û¦,«šý¶BÙuNK eUÑZ®>s¾ûk”vW༳l]ùÜçÆþÑÀÙ¼ƒ:ýµ“SÏÂþWaÀ•Ñk¼UMij˜_Ü€>CHQƒÍ‘Aƒsª˜Ûy¤–¹-k9+î ƒi‰çרõíVÑöÍ•:OÛ½/CÙmO®£PßhAl*Óªhí(¬Chú`6™R!¦Êб€(u¿£p±ÛäK·ª:Ípg½hÿ(5Ëc‹ÜÆ‹fЫŠ^¬RîA8zŒ@ ®Aõ®×á܃¬S§šPiÖw†:#€èƒCøk#·g­q‰ßðíÙOØß5·m-ßå§ÈJ ¼`E+dµL"(‡„\ßA˜Æ>K©œ¾—ûueoëœÉÁ ¶žtmÈôl‘G²Šf ˜OåI“í1múPöv‡úÓÆÛ åzó)àŽ: õFSfó¨ýþÊ‘BîÁº6`1?—šÃˆÐGšï-Òª§ËÒŽ©XI7"%€4&Øì¶¹å_÷r@ZËsý’ÅbÆdÒZÑ=•0WˆØ$ùd&©×zßÁ5^ÑICY·e87¾t é(Ý.})9ÑåÏg›C̪Ù?FpÏ“*-Kº5Ay'íé-§¹Ö¿¹¯\iVÎTI™‘LV­ƒUÎö—F$a’tí¸ÆÚY8QY­ArÏêP´Vë©~Ná(C¾]–BÚ+éiÌsa¬QÖÒ±5ì#wÊœOËâÁÚé8\)óêÙ["](¯®÷”EïBÏz7ØìbúÀHÍ)jq¸/M(í]â§PK¬˜{ŠÚ1; Mí¢ªY^’'ÝS?kJšëÛ)~S]gj+„Iʺ¾[do0­Šæ²ú)uda2¿Û\é’û@zJ^4Ÿ¦¨Ã0ò¢=”ÕâÈe’iºä_@‡@yåÔ:uÍév^I¯ºce¬ÂYÕ÷âÚÆˆè#ë ´„yÜ{ëxAÍÚà…Ûk ¢C±šÛºQÍ7õ¨Zê?ëúR®\/ó “bÜZ!@û+Åâ*´F2Ë ˜¥…´QÏXë(N0å/§še;´6ÌH{(óöäƒSgr¦¹,ϽzŠ„²±EÌ~mÔ8;>t›~ç·=œÛF­“åŽ\èЇÂ×wƪ-m-ކƒ§øeèA­€¦—Më{T³©Ys¬þ­k?K½rv’±Tpq'ÃA:¤‡Ýö…^Iëºso §Û¥ëFksDй…t ¤§˜¦@A£eþ<ó/þ2Ò¯Ìtêôs<œéò(ét":ízÍ‚VGõ¨MŽBІÞVÕK_ëþÚg )-ŽÞ=f{n‚áa~¾:¿qËß:Áy”úƒßÌñ¼Oy(—í j ÖÚMhÍÈù†0)ÕÎZ½A+^]óˆÂÑ;¬èäIéM½j^í$,Þ´º¸ÍÑxÏõó‹ÀÖ¥ÂxF™ë¾œÒXôC“úù•SG§¬íŽTrlsTÇ)hœþ§Ýꀔµ ¼++ x(hè•øä'?‰'Ÿ|?þx)KÍ-"©E \ G#$Æû³oßs-Km[Ì»—¥×æéËm|èî$I=P; ñ¶*èʦä4öÆ®UÌéÝ£ÎÃÈ›¶ótœÐ#_®zYi¡\aÝ€|†UÐÁ‹òÙÍ|&‡BYGòºÏæÌõ”žÊ~³9âB…³mÀýIù£Æ)lÿ»îbÇt'¾øÅ/â®»î“O>Ùìkf{¯æóäKû—†‰Mª¬hÕ¨ZÒ~-ÒMD{W5iO¿ÕsÅD¯‡WŠÎöŠ´‹: -¬AXjg ÝV—< X™Ê»¯@ZÒïܨj{zLŸA9MÛÚ׿÷íê>,Ö⨧M ¨œÖðüÛanÔsÆî¢¸ÚÛyåÌ_ܸð€~î¹çpÿý÷›²{î¹_ûÚ×ððÃãóŸÿ¼Ùg-ŽZ ¬4«²ƒ”“Ô-  ÚáPoò cm¿R9V[}±ƒ«F·×ÞOÞÉE²8JÅÜ›3E€Ž´KëõÔÍκ6ª°Ú'àN´¾«•@í¬Îv׳="/znÜivÇZ!ûÐ\¶«Çy?©äÄ=8·ƒSÚõtêgnnÜÙÃXÿ€ؽç`Å…ôwÜa, øÂ¾€«W¯âÁÄ7¾ñ <ñÄxÏ{ÞØýÛ ®þï\Â-wýnyÇÿ@„ŶÕ«gVÎbE+CZÓHƒFŠW_N®)yÍÍD›ŠF÷|Mô®îâÆËHëm°0>ôªší˦üöºå,ÁvÖ² æ@YO3të°ÃÐqª¶WÑÅêHçÂ~^VMûÓgNõ)à¬# SSð*µ…P=G :Þþæ~€§ð}`Úâêõ‘âÂ:Š»ï¾wß}7à©§ž*p€ùõGxÓ¯ÿ/·@ðì»ä¯îÝ£–ËþÓ€:RÐ$ÐM}réÄ ¢lqô$|çgªöfr´¿@j¥$[èªè¸ƒð4„œá‘«H4T¨"<°ÈZam3;ʺÞ!Ü8ø²šÙ¡vÆŒ”®§ÇŽ.ÈK²ô9GûáÊ!}Ы6EÐhOÑQøS?þø©7¿ <öÜs‘bzO<öØcf;5µH1·eüuø×,!¬½è˜Ñ´õ¿潤«¦Ã+‡¯¬~‚ 5ʹe£¤WA7 “©Äѹ9¬¦ÚÕÚUHo 8Ì]X´ƒp† ŒÅÑØK\æ: ‹'-ª¢ëÅTüis¼ªö‡´V?ê\÷ÁµÎƒ¸wzO׉·Óh÷(å5`×_i#4 Œ^š~3Öõ´¾Ê/ÚF#UÍ“ü{@O(÷ÞŒ”t§"%¼«pª«G©¨ëý2¾Kµ>DVRí¢ßæ\±•99z`ž¡îB'«ÃAš³pÎÒú¹q?BÏvf§Ê*g©–=ïS«CËÕ‹Î3Üé)³Þqß¶Ðõ¹¼–oÑ/§ Ñú7w„o:Oó-º1}†PÍÜ6¦Å\¢þÌG®´ÿÒ~ÙîeHÓTQ&GÔ&-Ë”E@^ÿ©ZUºPf©• ÝT&TÎn{—:Ú ˜I÷aœ:½í‘n$[s8B8ËŠ‚6ën„¡?UÿÌÃû ¸yØ·WÑj½ÛJ êò› €°?íÞ"1¿¨º¾s_= owµ/¡1}`¤&¤Sñ n¡]·.î Ô`Yë44?¹ÒÖ†*ÝD£œœœ—¦2þK(ç&Á•‚äžn÷Àœe_²³%Mÿо’îMGÚó¬ëìv@Y¸Ô2 „t4ÂÐøÑ àz5Ép†1w F묢‹æS'æóôëº]þ²È^a/âDI`{ØÛ¤ÅêÙ´™U2€>8’çƒö 7àÞs;…,B\ûõí6²7ø‹î/þµ¦ )ù²­DwoüÅòUŸÙ­ìAOæ•WÏN¶1ª³ö:˜Ó6C8*›˜—º¾ÆÎQnt¬ Û 2Þ´!µL§1ZWõLeåt²Šæeq¹ÏþWQn: ž£—’UÀ"©Ý/K–(:ò’éM xáŠóvnKKÔ†H…>—€>CœÎƒîÃ:ô «PÝ?‘¿*0ÏÇm\+Ë£lHûŸ¿‘„ç«ÉŠ”÷¿×©‚a=4œìK ³^O‰Õnõ ¸³³iÍÞpÀ^ï Dx_Õ²¿øÍRmåN'Žs*Ú¯—Óçàì­þ…Ûîô·éäü®¡2ŒË#—ûǦ1»íAhè#ëx0GÚu½™-ÆÒ€ºû P¹çˤ…±©C¯Bž‘ºHÒ…²5Uyൠh ®kjº‘r¨,d‹ƒÁx=í® T;/‡rêŽ/­pŽ: #f•l†{Kµ4Îzç© ð%Ïw¿–B*÷§—¯œ‹;FÛB¿‚6 ÷´eôó`ÌÃabúÀ°wS î¬Òi`Ýf—aµ–b·f{xWAÜKƒ^Ö½%€˜}MÍC/‘ôi3¼‘í‚´ÝHé†]0³9Ê„û|hU×^i3°·}_€mªÍóp´„Íðïü­ÃY ³ŒÕÁpö*Ú}p„íi”=–F´­·Áò°vÐ íwСCÇ÷NÕ{bú {Ðªš½²†[÷ýѶõ¬Wuñ¡£Zu@½t¾ÍŒvMÞW´W9ïEëº5õL•T[ÃD€n>´‡1_2Ö: «ïæ:bÕ2èÑï löLb;§`=5ω?£’ÔBoY¬æÓÀÚöIxe¼l«:ĨiÌè£Íƒ¶{ý±í1Á3:¼ï^ü/C壦]TL ÜJ[ý)\!ÿ¥ReAÙ]9Ôl•‹Ãý]~³“jÐvFp^(õ¹¶f ÚZ¶ÈÎÙæÀ$æ4v; ½/@ÙßTvÙÙÓ¥?¡ØâXp¸ßëe ŒÀ¥ ëœuß`úLá'ô<5ˆ½pVÕ¬ÇprÄ Èäc±ooÔ2ó¥ÕÂf¸·‡rG=û´»N&‡Ga9MÑTl¼/WÒMßS> iã È@ŽtÍÛàÌh ëR¹u8 Mèï8têuï?SöFñ¢'{6 ¨étúSí?wß6lG!lcu ·…1«ëÞEÝÃy|¦€>0ú# õ ÒS×ú|R“¬¨˜°¾m{X»}þÛì¶"ö èËÄWªSÿEãBšínm4MD­Œn{‹£œÂ=6©ãêŒÇ6‡"5†³µs·ÓPU´4ÜŠ’B«ÃÝêOr.u6«Èþº·¸ã"eÍÏÓ¿"åŸ÷TpO) •9¥Yh# @© 9åPö¬<¯Ù­d{L¤¤¹wÀ\„+¿„SÐÞ½êzå¸I“ôËg¿Pv¡VÌ+h•‚úþ)¯oÌò.çú–} Òðïònè.°Åiú¸ÃpGõªkñ ÀÏÍÇøYîäƒÕô,m:šû_Kí: öÛmÖ†½pëœéi­z§f µ+‹öt‰èC®“0 |¯Â¨¡ñèæ©Vhø6Aš%&”Þ|ÿ’\•UѪÔú7é—‹¿Ls[¡¨‚ÑÝmMø‚•mö¨sEV!7Àn¶{™i{Kç!ªQºð —G>tžŠŽ:ý¼¨´Þ³Ä§Õ T1û¸â§TËþ8¾²{ºž€µÛiÀ«Ù| 5 Žê9·~}ÈÓoî˜â„I—…ŠƒÍűZ!RHü(M.ôÔV8¬ˆß&íï®Ò­\¥HwêÑÅ\BXÏÕÜvZ퇄+V+Œ†ö9°:Üçm3;¤˜¼åæWÒn¥|kOŸ_÷ Nû¸¦‘z¦ç®Â˜•„k´MZo7zœk¸< ŒÔ¼Zq¶;|7/þR4íÝ·sæ_ Pý= kyzôJ®Üæ¾®IyG S¶¦ ÝYYñÞ³§‹£I­YtaÔa*hu "1оաûÈúÜž-±ŠvŸqaº5ÍZߪ×÷ªc„û­ÚŽ”qÔX½Êàm=˶¼zÛ#€胣½å•WÏ^9 Ú—¿¬üT/J<¨Í/@i\þûËG©OW=ûšåuóeô_ÄH=Eê™; uY2ô¹‚Ô+Û‚naÌ žÜ¾R3±stT l1!°t μ¾Ö1HƒUôÎß²éäD£¹‡àvYÅæðùÐÑyåkß)`Ì¿ø9U›àclÙúݾ 5¦ó®À+1„þMeñ—stãE€ÜO(øÑsßJ.ò"")mNÓT˧œG«Ëäý>ˆÀÇb'LÛs] w%-ù…Ÿþ·ïÔ7,‘¦,ÝoJK¾ylZwŠªñ+i{¡Ê,yS]_&ói¤um‚à…oþ“Ly‘ºž?»ôƲú¬¹szâëf‚ò„%—çmIˆ"»´®åSýøŠÿúü7Íg­K¾Þ•}3m 5€‰.‚(§8(ãò…?вÂ7_ú–klÜNrж,)óC$µ‡æyfùÏ~C_=1}`¤v^Áœõ@ED,Ê£o“YÒ1?zöé´oòû-l=#X(;Bû”e2i_é OÿÛó€^@ €ó—Q·'G®œñ•tk**m…EqM«ŸÃ„ï~ë‡ô™y0OfŸ5+ñÅqn)`ðõkɧ‹ö 9èê)ž€ùÎÓ{ál÷éç/Þ3Bÿ9‹ûŒÎnÿâö›}z¡þ—gšÆ-niþÈH=ø?jºÄ°8ŽÜø é€^£Zkj¢ÿùKÕM»ËKè$LH?ûÅ>uo…¨¼þœý‹í›fw£7•Ó2í(,:£í±—v=J7’WM…:ä{.·Ö\á˧K°¥umXIïNÖ…tÊ­Id¶íóþ´êãÄŸ)çAï`2;üóBó\kœæ%Ø¿ûÃŽÅüY´÷*ìmkE£«GÔØG€,ËòüÌyWä•¿ôK¿„ŸüÉŸü/Ýþð‡xÃÞð_þºÿñJª+ðʪï¨+ðì³ÏâoÿöoÿË_÷•Ð#FŒq“ư8n²øä'?‰'Ÿ|?þøyW¥ßûÞ÷ðÐCáòå˸ví>÷¹Ïáèè輫eâÚµkøíßþm¼þõ¯Ç›Þô&|êSŸ:ï*uãoþæoðñ899ÁwÞ‰ßû½ß;ï*­ÆÉÉ ~ã7~¿üË¿Œ}ìcç]WuŒN›(¾øÅ/â®»î:ïjì·¼å-xä‘GpåÊÜzë­xꩧλJM<úè£øÍßüM\¹r?øÁðï|缫Ô_ýÕ_ÅŸþéŸâ‘GÁW¾ò•ó®ÎÞøã?þcüÖoýÖyWãBÄPÐçÏ=÷î¿ÿ~SvÏ=÷àk_û~øa|þóŸ?§šµÕõÞ{ïÅ=÷܃¯ýë¸zõ*Þõ®wSíúñ /àW~åW·ß~;¾ûÝïâ¶Ûn;çZ­Ç#<‚÷¿ÿýç]ÕøêW¿Š[o½ïxÇ;ðÒK/wu^õ1}qÇw4ƾð\½z>ø ¾ñoà‰'žÀ{Þóžsªa¨®ðå/>ú(®\¹rµÚoûÛñüóÏãçþçñüóÏãíoûyWi5~øa\¾|¿û»¿{ÞUY'žx×®]Ã_ÿõ_ãÅ_Ä>ðÜyçç]­WmŒN›0ÞûÞ÷â±Ç;ïjtã™gžÁÏþìÏâî»ï|ä#ùoÉlùÏĵk×ð¡}o|ãñc?öcøô§?}ÞUêÆŸÿùŸãÿðñîw¿ó<㳟ýìyWio|õ«_Åßÿýßã£ýèyWåUÐ#FŒq“Æè$1bĈ›4 GŒ1â&è¯ØøÊW¾‚_ø…_À<€|àø÷ÿ÷æ˜^xôG>ÿw~çwpýúõÿîjŽqæ€ñŠ Áûßÿ~|æ3ŸÁ;ßùNüÃ?üxà|ä#ÁüÁ>ó™Ïàƒü ^zé%|üãÇC=„·¾õ­xùå—ñÞ÷¾ù—yÎňý€ñŠeYðWõWøà?ˆ¿û»¿Ãg?ûYÜzë­xÝë^‡§Ÿ~ÇÇÇø§ú'ÜvÛmxó›ßŒO|â¸qãþìÏþ ¯yÍkð‹¿ø‹øÒ—¾tÞƈÝyÐ#^±!"xßûÞ‡}ìc¸ï¾ûðío÷ÝwÞö¶·•cv»]Yÿ“?ùüôOÿ4~í×~ pË-·àG?úÑÿ÷zqÚ zÄ«">ñ‰O൯}-|ðA|ô£Ň?üaÀßøF¼üòËøÇüG\¹rÏ>û,>þñãúõëøçþgüÌÏŒ Ó7oŒ<è¯êøÒ—¾„_|÷Þ{o³ï÷ÿ÷qß}÷áöÛo?‡š±?†‚ñªŽw¿ûÝxç;ßî{ßûÞ7à<⦎¡ GŒ1â&¡ GŒ1â&è#FŒ¸IczĈ#nÒ€1bĈ›4 GŒ1â&è#FŒ¸IczĈ#nÒ€1bĈ›4 GŒ1â&ÿ’NëCˆ§¹ðIEND®B`‚mpmath-1.0.0/doc/source/plots/coulombf_c.py000066400000000000000000000001441316273626600207010ustar00rootroot00000000000000# Regular Coulomb wave function in the complex plane cplot(lambda z: coulombf(1,1,z), points=50000) mpmath-1.0.0/doc/source/plots/coulombg.png000066400000000000000000001026251316273626600205430ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½wxÕÙ6~Ϫ÷^,Éê²U¬ênãŽmlS Ø!!Ó>ø/¾8Ä’ò†jâ€).؆`ã^äªU³%Ù–ÕeuÉj«¶»ç÷ÇѬ¶ÌìÎìÎJ;üö¾.]kŸ™9óÌ™™{žó´ÃB¾ 'œp ' ® äœ=Ñ‚8á„N8aÅD à„N8á7œí„N8á p´N8ᄃÂIÐN8á„ 'A;á„N8(œí„N8á p´N8ᄃÂIÐN8á„ 'A;á„N8(œí„N8á p´N8ᄃÂIÐN8á„ 'A;á„N8(œí„N8á p´N8ᄃÂIÐN8á„ 'A;á„N8(œí„N8á p´N8ᄃÂIÐN8á„ 'A;á„N8(œí„N8á pÈ“:t_~ù%Ôj5’’’°iÓ&€V«ÅÆáêê Fƒ>úh"Åt 'œ˜L¨½lÙ2|üñÇøç?ÿ‰£GêÚ?Ž””¼ÿþûHHHÀñãÇ'NH'œp‰ ‚C˜8þùÏâöÛo×ý¿¡¡111€øøxÔ××O”hN8ᄆ 5qÀÿüÏÿÀÃÃÏ<óŒ®mòäÉÈÏÏÔÔÔ`þüùÇ$%%aòäÉP( „ ..ÝÝÝðññ««+:®^EH~>º££á³x1mëè@HHˆá~ÐÖÓÓBˆCȢ߶ïâ>´Ž´bÕ”Upt1Ù¯ªª ‰‰‰%³Ð¶ÚÚZDGG;„,|mÃg†¡iÖ³ÈÔHtwwchhááá!ŸØ69=/}}}èííÅÀÀ.^¼8®h„"2AøôÓOIrr2yüñÇÉSO=E>üðC²wï^¢ÕjÉ£>Jž~úiòØc™7{öló75’m'É­Ç»ï¾;Ñ"pâíÓolyáÀ œÛUn!ƒìMÿj"Gp„”=T¦k“ƒÜ|«ìK–,™h 0¡ôƒ>ˆ|sÛÇÌ{œ···ùŽ#"€°0 ¬ ÜÜlSR°¦GÃiwâÿ~ÿ±£lþtóŸÀ0ŒÁvG•[ä {Ø]a¸òÄ´ÝÍû¸ø¸ÈBn>ÈYvG„›8¬!Äü dg—/Ó¦` Ñh&ZNÄÄbvôlœm<‹ÂæBäMÊ3Øî¨r dwñuAØahÙÚ‚ö]íˆx0BróÁd×h4èîîFWW—Ù¿7n «« ÷Üs&ZlÈ’ ãââ,E º¤Ä¡úî»ïžhx±>}=Î6žÅ޲&íÈr[‚\dx(-[[Ðüi3"ŒÜ\Jö‘‘ê“©¿žžQçÊÈÈp´P«Õ–wÊÊ¢¿ÅÅÀ† öHT*•eÍáîô»ñ_?ü¶—mÇ–þÁÀÌáÈr[‚\dZ÷HwtìÂPÓ4YÈÍý1¬ÅÿõõõYu~ÄÅÅ!(( 2ûˆÈÈH<ûì³RƒÍ%A÷÷÷[Þ‰%è’û #uuuHMMh18Q3páú”´” ;2[·Í‘å¶¹Èθ2ßކÿi@ëç­è_ÓïPrB R©ÐÞÞŽöövtttèþmÜÖÐЀþþ~tuuA¥R‰>Ã0 DBB‚ rÕÿ@@\]eIm&åUš†¤¥..GÐŽôÂqa]Ú:\¸~;Êw´£Ëmr’=ò¡H4üOZ>mÁŒçgØõ\æÈ–|÷ïââ‚ÀÀ@DEE "Vý?(‘¦1¡%AwttXÞÉÓ˜:•Fr´·¡¡öL”J%òòò,ï8AX—¾/z Û/mÇ«‹_Õ™9]ns“ì>Ù>ð™æƒ¾â>œüê$nº÷&AÇ ˆ"Úööv –K¡P $$  Ehh(BBBtÿ6nkllÄÂ… M¢œYtHHˆ°³²(A—–K–ØW(pt¢H NBnd. › QÖV†Œð Ž/·9ÈIv†aþ`8J^*Ç8Š––³DÛÞÞ.ÊŒÀ0 ‚ƒƒËK°Æm¢4Úäädk.ß #È’ 9 JÐ_~IÍBÐrpX­K_‡ÂæBì(Û¡#h9ÈÍG‘½¯¯ÍÍÍhiiAss³ÙcØúgÁÁÁˆ‰‰á$W.Ò „‹‹‹]¯ÕQÆ\î%A ré(”ƒÃj]ú:üú𯱽l;~»ø·ä!7ì)ûàà ŽXùÈ–ý¿ç–a„††"@~d,Ë@Lv ÂÂÂ8I7((È!br~^ Žwg@p¬¢´Ú)!Sž‰ÒÖR”·•#-,MróA¬ì###hkk³¨å677£»»[PŸHMMEdd$"""Éùï°°0¸¹¹¡ù_ͨøi"¢#öç4k.{B!ççÅ‘ K‚ä$€˜ 0¸xÐhhTÇC.«õéëQÚZŠå;±)l“läæ‚¾ì}}}hhh@}}½Á/û×ÔÔ„ŽŽËÙª|}}‘””ÄI¶úÿ‡§§§(™Cï EåÆJ¸|íBS¿½'þÙ9?/ŽY´`'!ÃP-úøqàêUÀ¾êryh×¥¯Ã+G_Á޲Ø´p“,äæ#_ý_K¯‡‡bccyµ\öÿðõõµÛµ¸ú¹bÞóÐúe+:¾é@ø}áv;—= ‡çE%A v´&ÇñãÔÌá-çIZXÒÃÒQÜRŒ«Wí=¡r÷õõqj½bÈ×ÛÛS§NÅäÉ“£ûeÿ   ‡ ó[ç‡Ö/[ÑòY‹ìZ.Ϲ£C–-ØIP‚€‚àž{ì#ÈÉy².}^=ö*v”íÀawÚMn­V‹¦¦&TUU¡ªª µµµ¢É×ÇÇ©©©œÄ;22‚… " ÀaÈWz§ôÂ-Ô ßwb¤}n¡ŽS•Ñäôœ;2dIТ š°ÅþdÙ,9=´ëÓ×S‚.ß—¼lS_ýýý¨®®Ö‘pUU®]»†ªª*TWWchhˆ÷X–|‰WÿWnä+é™é¸zïU4þ­­ÛZýdôD‹$rzβ$hÁNB€fFD.ýý€ý99O2Â205d*”MJ|sôܾøvÞ}µZ-š››u¤kü×ÜÜÌ{lhh(²³³‘˜˜ˆ¤¤$ÄÅű­ä+§1ׇR©DÒIhü[#Z>k‘AËuÌ ²$hÁNB€: .¶oòóåËí'˜Èé¡eëÒ×á'þ€Ën—100`¢ý²ÕÕÕ¼uÜÜÜ’’‚ÄÄDƒ¿¤¤$$$$Àßßß®×!§1×G^^!ðLôDÏé T À+Ñk¢Å¹Ž¹£A–-ÊIŒô±cNÐrpžÜ¸qååå(//GÝù:à°éÝMøUç¯xÃÏBBB™™©#^}"މ‰±{æš9Èa̹ÀÊñ@j_«EËÖÄÿ&~¢Å¹Ž¹£A–-ÊI‹ÑßcǤF$ÅyBAKK‹ŽˆËÊÊtÿnjj2ÙÈ™ƒô´tM811Ñá ëÃQÆ\,X¹Y‚nÝÚŠ¸Mq²°µËuÌ ²$hÑd‘ç΀×ÄMÇû¡Õjµ¨««ã$â®®.“ý]]]‘ššŠ´´4¤§§#-- {â“úOðË[‰çæ>7®òK¹+·÷ToøÍðCï…^ôôÁo†ßKfrsGƒ, Z”“ jæØ½8sfB 'ÙÓyÒÛÛ‹¢¢"(•J(•J\¼xœ•Î<==‘““c@ÄiiiHNN†»»»Á¾S¯OÅ'¯~‚å;eIÐruXéËñ`z/ô¢ek‹,Z®cîh˜p‚nhhÀ+¯¼‚‹/âܹsºöšš¬Y³ .DZZžyæÝ6QNB‹Q‚>vlB Zª‡¶«« ………:2.((ÀÕ«WMlĘ3gŽ §¥¥!..N°]xú¤éˆKC~}>{í/Ÿh@¾+}¹Ãï Gås•hý²Io&qul3‡\ÇÜÑ0áƒ-[¶`ÕªUí à }}}ˆŠŠ2Ø&ÚI8ŒÚçIkk+ QPP #äêêj“ý——§ûËÊʤI“l¶Y2 ƒÛnÃ_‹þŠ]»ðô¬§mêo¼!W‡•¾Üî‘îº9]ºÐu¸ Á+‚'X:óë˜;&œ ù‡üü|hµZ¬\¹«V­‚Ïh ³h'!@krPÇÐàá!±ÄÂ`ÉyÒÓÓƒüü|œ={VGÆ &ûM™2EGÄÓ§OGNN‚ƒí÷ÒÎõ›‹¿â¯ØY¾Sv-W‡•±ÜF ë@Z¶¶8v¼ÀBŠd[ÜÓNP©Txî¹ç°ÿ~¬Zµ ¹¹¹˜f̘¬¬,‡˜**•JliÞ‚¿ÿ>ºõ#<6ý±‰I0äê°â’»lCZ¿hEúé]@I®cþÓŸþŸ|òÉD‹¡Ã„´5°zËÊhÈÝÌ™4äÎÎÐjµ¸téNœ8ãÇãĉ¸~ýºÁ>S§NÅ‚ tñññçz¤ú–þ{)V&­Äþ÷O´8ÿ¿DÇw(½µ!·† óÛ̉çGG#h‡µA›ƒUNBHK£Eü/\::k¢A, »»?üð¾ûî;ìÛ·---ºm …¹¹¹X´h,X€›nº áᎫéC¥RaAÜ„z‡âPõ!t t!È+h¢Å¹:¬¸äZD+Üíwì wrsGƒÃÛ ¹`•“ u9V®”DBÊËËñÖ[oaÉ’% ÅúõëñÉ'Ÿ ½½7Ýt~ýë_cÿþýèêêÂ矎¿üå/¸ë®»dCÎuú¸*\±6u-ÔZ5¾¹üÍD‹$uuu-‚Uà’[á¦@ø½á j‚Öm­ •0ÈuÌ ²Ô mJ+^¹øÇ?€ï¿î½×ª.pôèQ|÷ÝwØ»w¯AÈ[XXV­Z…5kÖ`ÅŠ 48ÖÞ…ìÖ#wÚÝø»òïØY¾ç<<ÁR ƒ\£ øäŽx0Âá+ÜÉuÌ ²$hÑ™„úX¶Œf8@5iöÞÁÁAüç?ÿÁ矎ýû÷c``@·múôéX³f Ö¬Yƒ3f@¡àŸ˜ÈÕyÂʽ4a)<pàÚôõÂÏÙÕf/ðÉí7Û^I^]áN®cîh¥‰ÃªLBÁÁÔIØØH†f ÕjqäÈüüç?Gdd$Ö¯_]»vÁÕÕwß}7¶lÙ‚¦¦&\¸p¿ûÝï0kÖ,³ä È7Ê•ÛÝÅw¤Þ!;»úÝK% rsc0 ƒð¨y¬õsÇ4sÈuÌ ²$h«„,V®¤¿ßo²‰‚¢¢"¼ð ˆÅÒ¥K±eË bݺuصkÚÚÚ°cÇüìg?Cdd¤¨SsÕÅôå¾;ínÀÎò%Ž(üÆÜDZ>k´ùxC®cîh%A[í$d±bý=p@×týúu¼ñÆÈÌÌDnn.Þzë-\¿~Ë–-Ö-[ÐÒÒ‚íÛ·cíÚµð°! Q®Î}¹W$­€¯»/ö^Ý Õˆã¿ˆ?†17†÷oøÍôƒê² }ʾq”Jä:æŽYÚ m®=<{6Mû>v çNœÀÿ~ð¶mÛ¦ÓÌsssñÀà¾ûîCt´´N¹:OôåötõÄš”5øêÒWØ_¹w¥Ý5’YÆa̹ñ@zÏ÷¢å³øMw,_€\ÇÜÑ K Ú&'!€BðÕÔ©˜78ˆÙ âóÏ?‡ŸŸ^xá\ºt J¥Ï?ÿ¼ää ¦Ë ÆrËÉÌñcsc„ß(€Ö/[AÔŽeæë˜;d©A[ë$ìèèÀÇŒ¿ýíoºDiÁÁxöõ×ñÐCK`½\'Ær¯JYOWOüçÊ0¤‚‡ëÄŸ‚˘Ã=ÒÁ˃Ñù}§ÃU¸“ë˜;d©A‹u^ºt ¿øÅ/0yòd¼üòËhhhÀê%KpÀ¥I“°qãÆqËz’«óÄXn_w_¬J^…ž¡¬’&éÇ^ø±Œ9tÑ_8V4‡\ÇÜÑ K‚â$$„à‡~ÀòåË1mÚ4|üñÇP(xúé§qùòe|wø0–O™æÒ%r7N«ó„Kn¹˜9~LcnŒÐ;BÁ¸3hßÓíˆv¤¹Ž¹£A–mÉIxòäI,^¼+V¬ÀÁƒ?ÿùÏhhhÀ»ï¾‹)S¦ÐÙhŽ~°³Äc«ó„Kî[§Ü 7…ö\ÞƒÍÇQŽÓ˜ÃÕßÁ˃¡îR£û˜ã”Ê”ë˜;dIÐ|NB¥R‰Õ«WcÁ‚8~ü8ÒÒÒ°mÛ6TVVâ¹çž3I»6m/ÈÕyÂ%w€g–'-Gç@'ŽÖ¡BŽcNÁæÏ7cÕÖUHÿ[:Ùó › 9÷ ½+ÐöuÛxŠhrsG„, ÚØIØÚÚŠ{î¹Ó§OǾ}û€ÿûß(--Åúõëù×Þ[¼ps£´FcÁ!_ç ŸÜr0sÈmÌû‡ûqÏŽ{𻫿ÃþÊý(o/Ç?‹þ‰¹ÿ˜‹þÓdÿÐÛCо«DëÑrsG…, ZßIXVV†Ù³gcûöí˜4iÞ{ï=TTTࡇ²¼(ª¯/pÓM´ôè8}ñåê<á“ûŽ©wÀ…qÁ®Š]ÐhÇç#'rsB~¶çgØQ¶ñ>ñ8øÐA4?ߌ7—¿ Ñà‘o1©$èê†ÀEnFÏ™ž ’ÜrsG†, šuTVVâ‰'ž€»»»ðÎ8² í ¹:OøäñÁ’„%híoÅ©úSã,•0ÈiÌß>ó6¶—mGB`>_ö9–%.C„oþkÞaûú퀟ìú ª»  »+ Ðþuû¸ËÌ…‰ó͈Ã* b!K‚@QQV¯^îînlÚ´ [·nµ.TnœíÐruž˜“ÛÑÍróvU;~sä7pwqÇÎ{vbnî\ƒíkS×â…y/ {¨¿9òƒm¡kÇìÐŽP›c"Ƽ´¥‹>Y¿7üúf(^øáôõŽ»RB–ÝÞÞŽŸÿüçÁ›o¾‰×^{Íb9^dgááÀéÓ@ý§‡ruž˜“{mêZÀžŠ=AÆË˜ÿùôŸÑ?Ò_Lÿr'årÊýÛE¿E¨w(¾¸ø®v\Õµ{ÄxÀ¶?«Ñ_lc­ 0Þcþõ0oË<¯=wô÷ã­ü·pë·Ê¢^ dIÐÍÍÍP*•˜7ož{î9Û:S(€å˵8rDÍÀá'­­@g§I³9¹#}#13j&j»kQÞ^nO鬂Ã9€¶þ6¼{ö]x¸xà¥ù/à–ÛÇÝÏÏ}Z¢Å'ß0ØæHÑã9æ=¸wǽèîÃï—üí/´£öÿÖbú¤é8^{?ÝýÓq“EjÈ’ †A`` þþ÷¿[¯9ëcÍëY>è¿ÔÕe©ÕÒû,¡yj¼žóï¯}ï¯}ÔÐT¼±ÌhFáŠwV½xfß3R‹L’‚RD&·Ür‹Áÿ9Bþô§?Byýõ×ɱcÇ ¶?üðÃÒ ‘M@He¥ô};:n»^ûÊ•„ 2>„><.§ßtxÁfgö=#ø˜NU'ñ{ݸ½êF{uíÕ›«É!µoÔ ëè‹/IN¦×/ùœ6\¸@Èúõ„ÌKȦM„ éöµ ·Ø‡4q444 &&úúzƒí--øÓŸè‡_2Œ“™Cˆó¤¬ xä`êTàÿüj¶~øøö[ ) ض ðð É;_|¤¦ÒÕÏ¿ùÆ¢Ü FU)« ÖªOR«×_æÍ£örXó×^Þˆˆ¾üøå/þ~à¾û€¦&Id8{X»–ú¤_|Uæ´D‹O‹?<7ÇПbNî ¯ <6ý1ŒhGðÕůtí¢ìÐ{÷6••@|V~L¯mÑ"`ûvðûßÓ\ˆ^ö ¨A=z”¼þúë„n :,l¾$÷Ý·‹ìرƒBHyy9éïï'„RPP ¾í»ïHÁÂ…ÒôgeÛå$$¤T‘+ !‘‘央ÎçÕhHÁÔ©„¤üí·M÷ûè#Ò’˜H ΞµØß—¥_lydÏ#e¹p¡€<ú(!@9Æ®÷ý÷Çy쫪H«+!ÞÞ¤ü›oÆö»ûn:.‹Ù|Ž'ñô,½Fz½3fròd9Y{’àiyïÏ}Ž ž™ù·™º6­VK¾Œý’ìÃ>2P;Àß_M )÷ñ¡÷÷‹/hÛ?þAÊÒ@HS“èë-(('K–>»ådÇûÜËZA°äÍ=ošÝïü…ó$þíx‚§AŠ'ûÐ÷üñÇ )*"åÙÙD ]«W“·Þz‹¬]»–8&” ûûûÉÆI\\yüñÇɇ~HöîÝK´Z-yôÑGÉÓO?M{ì1“ãn»íâëKò¿D âíMˆ¯/âÛ ìCÃ…B22èlsãFB®]#äŽ;èÿï¼S¥Aöí£ÏšÅßùÍ7þ/¾°Ø]§ª“¸üÎ…D¾I4ZÙ}ß~›žzÒ$B èLÛÍ//B®\±æbøanÌɽ÷RA6o6l $>žn;wÎêswvL»yõUB**èÌ ä…yê»§6ƒ¼wî=qr:ÅOüßD‚Í 5]5ºöÊ+É!õo×óüÈ#cBèã©§hû³ÏŠºNBhW!YY„ö“7ߤïhh(!¢»3‹žÁâõ{/âûº/Q «,îÿÚ±×6ƒ¼x3yúé± ÍÍc7èøq‡3q8„-k×®%Û¶Ñ1MJ"D­–¨ãÕ«i§F»”(//çÝö׿ÒÓ/]JÈÈmëî&$1‘¶Íof³<@;Þº•Ÿ={¨&9w® .lY@°¤àzï>ÝÝôP(Q*ÇÚ_{гh‘@ù‚wÌ++Ǿ}}¦Û?ø€n·A«zñEÚÅ#Œµ54âçGˆÂm˜½NíömýmÂåÖÃK_"Ø òÖ©·tmÝgºÉ!Ê…Jªqu%$0Fþ‚ÖVj÷ð ‚ De%!îîTÇil“Î’yòIÁ] §şlùÉ®ŸÚ¿áÜAâò HØ‹ jk6êìS*ä8 Z °ƒ¸t)×/¿”¨ãÿý_Úáÿûu(ƒƒ„ÄÄÐÓnµ¾) }}ôEôñá&'j5!±±T€Š ‹Ý¾qâ ‚Í ¯{wŸW_¥Ýýô§†íÃĤ§Óm§O ½À~^y…{ûà !QQtŸ«WEw__Oˆ§'46n{÷]B¼`3Èê­«­žBy]I°dæG3umZ–äGç“#Ì2Ô[E°dÿUSèÉí÷`3ÈöKÛ ·iµ„ìØAˆZí$h)pë­·BùáúPdgK4ý¯¨ Θ!AgÜ`mdÆøøczê;î0ݦՎש³.$7 IDATS ²u«Nk°ˆßÿž˜#2=7l™ûwî¯ÉÐ}a]]¹_Ø>¢bÝwŸe±„‚s̵ZBRSéÉÌiª¿ù Ýç}^öCô«_™n ÄãÞŸlyçè§Âå6‚V«%Éï$l©êÐ+O_!Gp„4~dôe!$$„Ú“øì Tð¸8A/Vw7U¸a­2ú²ÿö·´»—_¶Ø• ´öµ—ß¹ð7ÃɈfÄò==„øú’o3Ü6ƒ,ÿ÷rÞ] 2ŠÃØr£Ë–yy@q1PP AÇS¦±±´³vûûóeX}þ9ý}þyÓm 3ÖþÎ; ²u+ý}àËûÞ}7òà?ÿ±¸kfx&bücp¦á ÚU¦cxø0ÐÕ¬^ $$˜ÿÀ@p0 I–j¡Î1/.**èd®nÄݴξþZôy·ÓÚFxøaÓmÄe$õk`Ä ‡¹#„dã1 ƒ{2î¡ç+Û®kg£9L’Vާ՗-£Í…èhVS[+èÅúæ½±v-À–ÃÑ—ýÑGiÂî–-Àˆë:l/Û ÑàÞŒ{᪰¬ê_}}¸eú½˜ä; «¢CeÛÂÓãY4[n”a€ûï§mß|cæ¡`nGˆÝVYáʰêè ïMD0>÷q÷ßOþ½{áa…hk£á„aacI:æ0u*T 4fÊk2 ƒÕ)«A@ð}¥iÈ"ËswÝÅ}¼·7 1T«)IKά6ö‹È>@|ÈÊsç£pOs¸|(-22®|ª}•û0Ìô—oÃÖ-~œ9"B³ñîI§½íÒ6][à‚@¸…¸¡ëPÔ7ôÖðÜ9ZЊýððaÝ:ú+à&|5åwï½cmú²ÇÄkÖ--Ò¼§Ÿ—Ò{·!sƒ°>û àú‹Ç±fʇ_G“…, ZMÂÛo§¿{öHÔ9m§ò£\Vß}G× ¸ãªipÁË ¸ùf®yü¸BlÛFOxï½€« „aP·`ý·-zuòhÚw¥az­FìÞMOyÛmüÇß1ªPî•(;×d̵ZïÌ04ÖÙfìk²{·às²¼¶~=÷öý•û)š;ÑÐ@ÉÜ¢Ü<ÈŠÈBJp š ÐØC? Œ+ƒ;B@F:¾ÕµZš-ªPŒ 2Xß±Ãl†aWýÖÓç“OöŸýŒþîÚ%è’xQ{£§êO!!0³£g[> »Èϧ²sçbe}¿÷_Ûo› ãY´þš„S¦ÐjI PS#AçK—ÒøÀIS_Yp•adÚ;ï4ì­·Òßo¿µQ1æQ¤þä'ôzYâ2¸)ܰ¿r¿A]Þ“'©ò¾d ÿìæÌ‚‚h¶y_Ÿ`ya2æ§NQmxáBªÞYKÐ"̬yƒUDÁjpwç.ìÛgºÐ’ Ã`e2%žCÕcI&ºÚ»GͧOÓÄ›E‹èìÉbcY³€kר9ˆ»vQ³ÅÝwÓü&>Ù—-£ælK0ckj¬K_†a,pð Õ n¹P(psâÍpa\°¿r¿CV^4†, ÚxMBV‹¶™¸Ê ³gׯ/JС!Œ³ÃT*ªøùQâ2‡5kèï·ßÚðíhn¦/jB½NPúúþþô·0õöu÷Å¢øEèèÄÙÆ³ºv–ß,Í®]]éû4õŠtú.y³gSÖÄškRèׄÕx´ZJÐ cyv Ðñ¨ùÇVŒ9!TísqNT Þhµ‚Œ¨–Ì,‰.O\ŽÜ\:û>uŠÎÆyå¶€Åñ‹¡`8XuP§ºx¹ hi4=ôœìûBZšª±°`æhk£Bx8UÊ-É~Ë-ô×Ú×J£Õàpõax¸x`þdg>¡_>¶¤0+G2„5392dIÐúktJ;ܸ!Á ì¸ –±ã‡5k }gXÛ­K7¦¿K—Š:L¥RÙX„Ø¡Ê^¸@«—Þt­hj ·ÜBÉ|ï^Û-Mc~ù2õV͘}èÍB„™ƒ5oðôUÔ½@¤è™.¤¿'O4B›\]¹sMã’]¡ ×ªVMäÄ€µ?/K\&ì#û³NF•I+¡Öªq¸Ú AƲ$hc'!@MLÔ¾%IRÖfžÐAßyÂrÿ þ€¾ôkÖÐk=[`µgKÞHèäf=eyïå‰t ÷_9„ÒR0Á•œÂ©ìÐ:Ù ¡÷S¡ ¶±`ƒÔÈJì°ðų³æ VÛhDËìÙt¶ n'v]¿91sàíæ£5G1¢Ë ^èôXdfŠê3gÒÓÉ“_kר¥(7ðñ1=ŒOvkíÐ#8Q{˜>iºåz{é×2$„:nŒå‰™C–mì$èC2c˼rE‚“Ì›GOŸ– ³1è;OØ®ÙS «ˆþv°-V‹‚žÜ¬°ùùY¿.Œ ^;­–ð’rrèláÌz_­…Nöª*Ê‚¹¹Â§,ú`IÝÌÇÉAë;õÁeæ»®Ÿ‡«Æ-Dïp/Î_?¯kI¡kLvø-÷®ooJpmm´nô(ØoßwŽOöåË©’a<[°„üú| i†°4a)\.–8r„Æÿ­\Im ÆrŒŽÿ‘jû¯Cj dIÐÆNBìTKNMK£±oçÏÓ9™D`'Z-%OOJDb0gý=sFÄA„Ðy%ÈŸÞCÏé3gíCAû{øcfôLtŽ4aå¢?D CMåZ-Mä³:Ù­5o°˜>NÓN✦ݸA#3cc¹Ã«U#*œª?…`¯`äNÊ5ØÆj–ú2Ö¬ëÇeæðï;WôáÆxhT¾CùÁ²°ÞÌýñ4ŸìaatkkÅ)R«éõ,KhÞÐVâ@„o’ƒ“q¹ã2gIG, ÚØIÈÂ*â⃋ wªT¶{©ôÀ:O._¦/ôŒÔI(“&Q¸t èéxPUMÎÈÉ¡Î.‘Ð9}©÷«¦†Ú¢-@÷B%MÐÀX¨öÙ³æ÷3ì¶´‡òwuÑ:F8{–~ù´çµ'0¬Ʋ„eP0†¯^NýXŸ??ÆýÖ¬ëÇÚgõV§O"ç¡U»àÆ+œ8šý'ßµš“}Ù2“î,âP½}ÓY°$`æ¡cCõÎ4HAö, šËIH¬AÛ¥Ã1ç Û%—ƒEæÌ¡dpþ¼å}X^ÇÂÀé#Â̱$ž¾ŠäCÈÎ^)Z'û±cT-gÓÖ­Y±j66oÔÌ›—G?ÚW¯É-YYô ĹÆsÖ Ó‡äÔ)„0t ¢Kûö~^s[ý>¥¤Ð¨ .˜“]#Z謨g¨®_@´_4¦„L±|Àð0 ¥ ’“yw›7™^שzËþ”‰‚, šËIP{åäÉtš)Écv hÖyÂr›- ˆ .„€‘Ó‡e Ø;ñ“pŒ‹xSQNa°Ú©5P*•tN][K‹Y1ƒÐÁŒ£Ð¡>ØK\b„P˜=ƒêA7Ó¬¦¦&g %hÑ)Îaa4nðÊ µUwÛÍùYÍÉδPåBÙ¤Á¼Éó„¥wÓ¬Y³Ì&c±t~½åçx¢ K‚ær²˜;—¾È¶Ø,u`YPB‚f'RhЀsΩS6iNV£ÉQpÖ¨» ·n(›Äއ%éŽj¥±yyy¶›7Xð\»ZM?"~~Ü-}-(i)ARP‚¸CYŒ5K±NBscèCuºá´îCâ¾8~3ý0T7Õ%+bûõ¤–„€yÙ££©™®¤„fÑZÂ…ë4¬qFÔ a²²Z‹…Riai†³ „, šÏIHl‡ ¢•˜ªª$[Z[¥RáÆ ºrw|¼°¬:.äæÒiñ™34Ëöv=uªuÑ 0rú$%Ñ8j¥Òâ–Ÿ zÔ.Ze]a [Í*•j,@™ëµÁÁÔ_Ue`ƒ/.¦ Ï™Ã4 ³ /Oâ/ïÊ4{Ö8 `îdJÐgÎxótI+{­0sè™v„´9Ù†šò5au9؈© ZÁ(07f.Õƒ(j.Ö÷8C–Íç$ìh‡–„ñ©ó„}~¬qš±`£?ÚÚè,Ö,Ø·ÀJ 0rú0 ^­6›´Œt•©ãJ l%躺º19Ù/¸-`mzZ´%óÆÑš£ÌG!$$Рʢ":C·ÆI³£gƒc Acþ|„¬%hkìУl¬9~Ôꑒ¿»%ÙÅØ¡Y :o’Àç—}PØ“˜Î]ç˜vhY4Ÿ“ š¥»»@ÍR$füÔÔT›íÏ,Û¡% h§I£­:¼¦øç!Ð3§êOaPÍŸ&Í[ :51‘†¼„… ¯CañЖš` C9ed„’´5NB€ÖåH KCÍ4וњ“&Á7Ïîîè9Õƒ‘.‘K›$%` •péÇüùækmY’]¨ºs U]UH NA g e9;;éC—œ,¨Ö {?òÓ=¡­R©°aÃ<þøãxùå—uí555ÈÈÈÀOø]]]ºiÃ0@__¢84sNB@b;´Ä +99y8{–®’•e[_‚¯S‚6qúLŸN§*ùù¼SV®¹sǦöÖ˜9XÍrxØb Nä±Ål¸~$$Ðxð’@­F[­ÔÇ>*Æ8ý<æÄX6¯èGrXë$ôz2 Ruvhḳ㗋B‹ÉU–d ¢&’ÊJªôò5oÌŒš)LFög¾î¾ÈŽÌFS_j»k…c1¡ÝÐЀ˜Ñ”«¸¸8Ô®ù‡üü|üë_ÿ‡~hbs6ç$$Vz%NX).V¡§‡jú+PXƒÄDj³,,4S`­§‡Nùl /3qúxxÐòdÔÉ¢Q¿Ëôéz=ŽB«UIEÐ CƒƒÀ•+º_œ7kÞ˜m™ gŽòÐÙ³Ö; =GaŒ¡`A7qeй¯D+Rc¿Y$h!² 1s\h²O‡>Øp;G´CO(AOž<µµô«U[[«#k …1Z ¸ªª _}õvïÞ£u,+**t…·7ÕOžkc§\úû n‹§m»vÙÜßÑ£u”ÈɱR½¶æÌFF”(,äÙoϨ /Ϧ1Ø?ZÌ`¿É“iÛ·ßr[X¨‚‹ 04¤Djh*ÂTa8Ws݃ݢe‰Šª ÂÙ³âÇêèñãt rsm{ôÛ¦M£m_=JÐHOç>öLà‰3²tŽÚZ%’’€«W+pîÜe«å‹õŽEÀ°ç`dZºn?×W\Ï¹Ž‘¶l/5Ci9P˜éZ„®.+ž£ýèÇH‰óçù÷;Ws 0ÍŒå1 Êü|ÀÝžž‚¯-ª/ ¨Þ{ç=t[SÕž „‘ B?Ù°ayòÉ'É‹/¾H>üðC²wï^rìØ1òØc‘Gy„¼öÚk&Ç=üðÃfûÕj  ÄÛ›µZA÷î% älîê׿¦]}ü±rB6o¦ý½÷Ïù Ýáæ„úxÿ}Ú÷+¯˜ljk£›22ÆÚüúA‚Í {*öˆ>UGí/%Eä !¾¾ôO£}^^üë_T çŸ'>Hÿùý÷¦»iµZþf8q{Õ Œ êzÃÚßþý6ȧR‘`3ÈùÆó›êÞª#Gp„T½R%ªKe–´#˜ )<¶A8Šü|z·Ýƽ½¥¯…`3HúßÒ…uxõ*ípölQr4÷6“÷νG*Ú*,rËxCdi+iáíí­ì¦FXh&^Õœ“ 3Ь,úZUe>H$4j?®g³ý™Û¯õE‚€j&vEÖdÀÌÊ5í_–° Ÿ•|†CÕ‡pûÔÛE?8˜ÆWVÒxc®—œ¨¬„²¯yóçó/™n Øk/*Bñhˆ<—‰£æF Zû[13j&<]=u=k]6qÏ%V®´ò¾]¼ˆ¹õÀ$àtýiAÈš\û¯kèü® ¿^ÿµ¸„A'r°L{˜“Epóy1BN-®wîucûoE; èþBÂëôá'f>!ê˜ñ‚,Ãì,9 1â²Æ©d6aåÚ5›VêêòÀ0Ü«mX‹-ƒàqúdfRÒAЀõvèÌLú"s¬¾ÄÂBä6 Lš xx€¢¼Œ "‚».…Îþ,ÀAÈ‚³Žd..ÆÜúQ  ¯©^ðLðDoA/†š„‡Å…àÿ(ëCˆƒÓË‹r|K wÝ-]‚Ê$Í>tbËC:0dIЖœ„ÀØC.Y!: Vº»ÚZ’“Eh€øúÒë4©€©RєŨ(þª6Áéôñö¦DÕÐ@³õÀEГ&#%8—Ú.¡¹¯Y´ ?F\(,ÔÙŸ%…›0m˜ÎNLÒÔórKŽbšM/*²a¹µâbÌn¤ÿ<]oè-gFÍѹÏL…i—(B+œÙ}…:8ÙçC¡¢S¼ÙCªé©@–m.“…¤4 Ih}ë$}~ úB÷õÑ  &'Ôj%Ñy3ÃxÌ|‘ l9Lk–b‰‹ëeæEa!êôå”zQ #8DtHý¦VVÖ™[þÐ<ŠŠ8¤û'£úF5ZúZ ÏÁô^aMåä2wa´Ð,Höžr}t/\¿ÆÙ‘Ë –”Ð"=]Øþ2€, Ú\&!‹iÓ¨MKr Ú‚¦²¤JþçÕ,Yó†Í›ÆŸ^bÂð0UÜÃÃMkØ-Zƒ&(,Dª››}^Z½¸`.‚T¢°©¡Þ¡H±Ö(qiµ©(/·¼¯ ¡ƒäí9 ´8ÖéÃç6`Qž tìQ[·«¯§¥P=²¦Ò:EEfSu…fAò}t¯÷^GS_2Â3àíæm¹£ÎN*dJ ÙýH K‚¶ä$¨ !9™j•’DÎH°B‰EiU]ds‚æÍ ãР+*hâ×u.‰_ U¹•’BïKK¦ñ76mmP&&Š_AFí|]ØTˆíæÄÌV&Sôž*­S0jjhü{f&æÆÒ,Bã¢ô.^.\u·ݧ-¿ ¬EcZŽ+eÕ®.Þøw@x$A‹NPa;úåš`È’ …8 1â5%æƒ +tÚ/] ^sŽD´ ž>Xã«A›KÜñANdj»kQÕ%®~¨«+U„;:€¦&ŒÊ”'v1D ™YЂA.Š0uªéö³4iBH‚Š1(qåY÷ìê݃ңF^ èÜoÙÌaà˱l‡šI“­ÊÊèG…ÓþL!K‚â$ÆÂìÐZ-ýPøúª'‘<£à´ã Ó††r/'¼NŸà` .Žf+öõ0OÐ÷²LBaÎfi‚Q‚VI2c„†¾¸ŠÄ¡®=¦$gý™å•uº€Þ H KC€GÎ7ž‡ZkøÞß2JÐ…,´;´P'!ÃÐ{:2b¸F¡“ )dIÐBœ„€•^s° ««iünrr¤á¸@c„¯]Óq$UI†‡©ö,A ³NŸÜ\js%‹-Zf9J uÖݶ€âb½°3mòLÃ0`03Zà4]©©€BQg›“£ÀÌè™PàR«a|¢WŠ<=ÑW؇áfóëÙËËÊ‚A 8Ä”J56sBpáú¸)Üαú,=t2…, Zˆ“°ƒmC û‘˜3Ǻ’–•e#,¡ý°àôѳC³<íæÎi?,ˆ]7…W†–˜®Žm¢>º……à õvqI1BaŽ ›ziñŒð ø{ˆ_$ÁÃHKKEs3-Û* ¬,£ÌÇÚqÏ5–Žc!«F£9¾ç×¢{zhÂWRÒh1¨ÌLúÑ7CÐbJ¥të{êѦjCVD<\=,w ÑÐuîèšw?"È’ …8 :óö÷‹6³ú +"ß–P­/!i&qß%¨°0ëôÑ#h–PÒÓùýr>î>˜3íªv”¶ˆS‡ÚuvÒ5SR ÔŸ;Kƒ¸`£é>kž-¼h1¢£é˜‹Ò¢{zètMǦ´¤&œ»nZÛSˆ™ƒ}¦tÊ©¯/0e _žRtbJ¥›­Î7Š\AåÚ5º²OV–4åd²$h¡NB6å[¥¢÷Pˆ]ñrìÃwë­g´ÂÄQ(±mÖé£GÐBgš¬™Cl.\u—=çz8»d¿u÷ÔL@\©Tú˜ÖÖÒXÑ©ý)A uv°C‹YLm}}Tƒº»­[gÎ’’hmƒ’€\¾B§ ¹¹’2ëôaz®‘tž,`ù]™=^®^8^{Ü$ºÀ}tõÚÚµýÌÅÎÎÕ&Y;(µV ×/ÀÏÝi¡iVŸ#(¨Nw.Áà!«Yѳ !6™ª%3‡Y šÇ-vÌÇìÐÔAèéꉌ0Ñ7N Ú± ÔIØAƒÎÊ¢ÆU¶—\ºDwÍʲ~9Kpq¡šew7ÐqPZó @îQJQB ÀA{¸z`~ì|ô õp’†9 µÓ#h{Œ¹ii“—Z/¡¤Ÿ.§¤àXâ[ –,I…¿?}~4kŸ£0­VÓD` ‘ÿÍB¨Ø1gïé‘¢*ܼœÈ¸¹\Ñ¢¤’V s È’ …: ±”oÉ4hwwúBvtXN›BÿoË:s–À~ŒºKOÐå%©È¦BDEQ‹‡%,_ @¼Úb¨JEMÑÑ@X˜]ÆÜ`Úov&…y •È̤—S%$§G£cÓØXƒMæ…Þ©ÞðŒóDï…^ ·†Û]½JŽÉÉ1ò¿ED“&ååœËùˆs– OT‰4otwÓÌɤ$ê¼´ê^šM©’"’@ZÈ’ …: zÏ’’$LùD›9ô Ú^+¶p)‘ž -ÊÍ"ÜiÏ\`íÐGjŽˆ’%=ÝB6lgT&{Œ¹%ÁH›d+ØÙÁP¹Eˆºz•7š%<.G!Ã0ÔÌA€®ï “5HP1Fn®iÇXv1`ŸÝ²£-´Ä¨)Þù¿Y´ IDATÝǺQ8¯W·O´-%A‹qæKZÚ+ô!'k(¤i¾@d+`QxøÐõ겄i"3¢fÀÏÝ'êN`Xc>QBÞÞ´.[ÀÇzæ A²‹„VK﩯/-÷ŠÄDê-)4=;Æ6‚V©TâLtfœež˜2׺®¡Ce:å3s˜õ¿™±C‹sÖ‡Ò¬ÿŽîSTsóŸ+>^ÝÞ%A‹qv°C³-`S¶°˜§'-Þd‡‹¬, Õðé¦o”‹õöOcX”[¡@}p6üЇyÂb]®X·ª§fgfÍF-õ˜WUÑ(ެ¬Q,ÃÐñV©ÐUV€Šö $%"Ü'ܦóÔÕÕ‰Ó -D3°f6JBKÁ¸1èüÞp1Y³ügÆ/vÌ]\€´t-4áðrõFj¨@¶O :`¾pßÖxA–-ÆIØ ““©O©´ŒKkÙ߸Amá..ös4fE5o¨³¤Ö ‘»X1VY(–Ćۉ´C›%.£"QR9ç¬zô?çÎï`»ý r‹ª=b Í9 ]ý\pSFÚGÐ[Ыk/-¥¡4®`3m͘Çå]ƒjáˇðj–—/CCÔ¼1ê(“zÌY Ú€ Gµ€3}¤Ñ Y¹Ù:+eefvno§õ¯SSyØȉ̫ÂçÏsÖâ6އæ¼N}èÇvÖÖrÊ.A” Iƒ@‚f+±kcZG6o€M«zÿñ„·Þê+V¬ ÜA R©ðè£ÂßßAAAxã7Z­7n„««+4 >úè#ƒãÄ: Ùe¡òóÇÊØ ýŒÂyw3&h•Je0f’‚Ķ+1 7œìÌÀvmIî’à2 a\àba9$}¸(\°8~1vWìÆéúÓºÈKHH h/Ò®îýä;zÌ95èŒ Îx¶ÃÃÅCø2MfÀÊ™ üç?ô¼3ù ã ˜ê{ºz"+" Ê&%ê{ê`Šç3ÍÑè9׃‘Ž”–Ò8d^‚fÏwî=|¼‰ìbÐH(A·—ŒŸƒ°çÍžtT‚¶IƒöööƧŸ~ªûÿ»ï¾«k‚mÛ¶aíÚµøàƒÐÕÕ¥s,?~)))xÿý÷‘`b:ë$ì`‡fß‘´=„hl„gOJ‘‰ÂKÒ® bIî’`žèŒLš›éŸ@°vh1f…‚Úõ{{”7‚–rÌU*šâK‹§éàå…«ÓÐåI–wÛÇŸ•[£P -Ö\]†a¨™C týÐ¥;ŸYþ㱊sµV‹…`†üQu!ÃB‚zl´?Bh‡ ƒ’a? †Í6è®®.<õÔSxä‘G*$;A ˆ-&‡úúz“öøøx]; ±NBÀIßÒK—(Kp`pθ££éB €}„¬s¬D‘‹âbÁ‰Ž‚`InöeVg[õY¬Z’„Ž—VÊ1×Ï 5Æ™Ü0ÀE¬éF+ÀÊ-èÙHV:G!ŸzÔÌѱ¯ƒ{¦` žP;±c^Ñ^Õˆ Ó¡QàòeÙ¨AÖ b¸yê_,Zé‚_ýʪnì › zñâŸvíÚÚÚ°d‰°é)‹É“'£vTý©­­Õ‘²~{MM &Õx-//ÇW_}…Ý»wcçÎ€ŠŠ i…uPè·yxжS§Ìï'ªmÖ,TU~>ç~åå€F£DVÖX›R©´ý¼|m@ 9:J\¿.Ý9¶nÝjv¿¢"ÚV™6&‹Às$ø$ Ì; gΟAÿp¿`ùÂÃ+À®:¢T*BPqáTnnÀ¨OvîÜ)Ù8ÓARSM÷;Nó±ÃK$¹¿§Nô÷+áæV ¿ŸçØâb( ;Ûì9fEÏšh$×~-±-rBç÷]()*€08hFæ¬,zÞâbQÏ‹qÛ·§¾F€DÏè8[”ÿýß´ÓÿþoÎÍŸ|B7ÿêWžÓn¿€¼ºæ4Ù»w|N;îÙ~ÁfýW÷ >æèQzªõëGiCNލs‹Á³ÏÒS|ñ…é¶Ü7“ 6ƒÔþôNÉÏ›MÏÛÔıqhˆÞ€°0B´Z³ý¨5jâóâ÷ºQkÔœû(*É!)è!sæ.1‘ ×Ý-`gn<õÝS›A÷+òÒKèí¥çLH°úœ—¿LŽàyiN 9vÌ:n±'lrÀ|ðòò—_~)êXoooÝ—Öü1ïqb„€é²PV¦íÂB$× Ì®NB¥P(¸ øŽžÕ*iº6'÷åË4º-+ ‚åÂ’ø%ØviŽÔÁÊä•‚Ž1±Íòä%K9æ|‘ ªJTÕ˜Ô L.¸*ɹôåÎ̤VŒ’j]3@y9½&3Lá¢pÁô¨é8^{—;.#=,ÝdŸà[‚Ñ}¼³Ð ïL?Ë‚fgÓìÒR`t^±cÎ&ÏÜ’5@€)RŠïÑŽ£mÔdjÖ”3A°ÉÄñøããßÿþ7®\¹‚úúz=zÏ=÷.\0ÍT’Ö8 Že¡lÅôéÔ[ÅCЬYPÿÆÛÍIØÚJƒVÓÒ1“¾’ÙÛa^n[ePÉ"²B`:8˜Ú÷¯\-ÅÌc‡•jÌÙ¬Pww¬‚ëÐ f·{€)¯ ¡~6B_n³™“"eæ…tË`ÍB§0ÒâpŠóaÍ0Šš‹ä„›§'ïç…ögu·ý¥ýpŸìsÕˆ‰¡®£Á&‚NJJ‚««+>úè#¼þúë¸|ù26mÚ„3†ÉX kœ„€…¾¾´rO]IÔ‚þÚ|úþ»9 õ²çDeŸ „9¹MÞvY¤§ Ê/ MènÌÊ¢avååàÕ ¥ó–nœ–Fï«>tì±´F§Ù eaЗÛì=IЖ…>Ù>è÷tGz™(`¶ÊAÐbÆüRë% i†0#j||$'›©³ÂÂF‚î9Ó@›­ÖqKIÛDÐGŽÁ_þòF[ZZŠàà`I3±™„,$'h€×ÌÁ¾Ìéé†/³Ý2 õ:,ŒV‚¬F‘`^n“i¿…ZÁ\`Kâ—@K´8QwBðqÄÅCTR¹9N`+ØÍ‰UNDšx¸ /·ÙP;+5h®”o€Þ‹`¸€ ¶­‹sp´˜17^AEÐÊí6†Ø±æ–Ç5o6ôW_}…ûï¿/½ô’îo< 6“Åx4ßóc·LB£Eb³²¨"W^.M÷æä.)¡–žtÖœiTY(¬1s°÷´üB?µuÄÆšÌU¥s>û3!gÎ@Á(0=c9m” ®€¾ÜQQÔ¤SVFï«ÞÉé¹ÜÝ §jf‡PïP7cHmúöPEkø„e(>~luæÑ•ÄŒ¹ñ„ã¾Ùr‚ÞÞV/éÆ&¨”‚V°ûQjÐ~~~xî¹ç§ûXã$héOOÎÒÖƒ‡ ù´-»•e zT{•úcÄ'7g½…€¸„öØ{æ"½©…‹¥s¾{ZßSë½×‘‘ß¼Ño 4h}¹Ù‡†ŒÖblj➪™Ã0˜= #Ú·˜~HÊËó$ZÐò£ÄÒË¢¿:se¥‰ì–ÀjЬéÅ¢‰®¦†ædg[•âMÔ=gzàâë‚ü&-ð£$艂µNBš}vã%I0me¦óç }ðiÐvqÞ¸AÃS’“uémR4ŸÜœZåäÉTÝ+-µXíO A ˆŒGQsgÍb.LJ•GÏr®•MÍË.|ôéúÓ€¹1si¡jOOH‘)d,7{iÜϹ¢«eÌŠâw––½pÃ( _F©€÷Íh•o¡c>¨DiK)Â}ÂãOó ØKá}vÍ®"`}¥}Ðôkà?ÛŸ¹IZ:]RÈ’ ­uv0s¸¹Ñ²–7nè´ýþ¿Ìvq²¬Þ´Rêëä“›ó:†¾V{LÐþnn´x[²Š{->@š1gý~!!Ô¾¯Öþ<7f.àêJüÆ ê<¶Ærq …Qík¡˜Íï(d?D.s©)‘o1YÙ¡…ŽyiK)F´#˜5Ìhˆ`B-n6ºþ)l$hÖ¼á’ãÖVn§¯£@–m­“è€ #3Çð0&FDáF5Ûíâ$dûÔ#èÔTúÐIEÐ|róÖk0ZHU(¬±CçäèÕ æÐ$¥ó«Wé÷&3Ó4Ô˜Õ uì$ªok,7g·Ö´™ÚÐì3sÿb²&0Nè˜;jµÈÊ¢…ê®q­ý`嬅ÎAêØB@¦m­“Gay9Õ¸¸ž»8 ÔtÚŸ–F£IZZl?ŸÜ¼õÆÓ©EJ0äá7º•!¤s¾Ñ zÊ&%B½C‘œL­¼vcËžNtN‡Hm2Ì' ññ¸Ü~Ù$¬±´”š3îô…[˜ºOvCÝcÁï3meÖQ‚:æç¯S‹ñ„œ³EEc%*­@÷©n€.jÛAÈ” ­uÖÀˆ Í…cÙÅIhÁÁBÊ—Üfë¥[©AGûGcJÈ”µ•¡¥OØ—eNØ5ø¢Õ~YœN#)ÆœÏþ¬lRbD;‚91stSt©4hc¹=<Æ>ºÍÍ u˜¯]£õsýýE÷?+z š tmííÔ xz1^ ¢&è:d!ÜÎË‹zŠ€ÎNÁcÎjÐÓ£¦´ó~ã:;iô”)4ŠC$††0T7ŸL]¥‰ÔN ZbXë$€ÐP²$eŒ0¨q²°6KÐ’; ûûéÅLžL/NR4—Ü55ôô¬òd€©S©³¬¨H´³L¬¡¦DxAÍ­EJ1æ|÷”MP™3w¬‘ÝÉF šKnî/æ·» —£ÐøCÄ·˜,'ô„2æª.µ]B”_¢ü¢ ¶ñ´×¬+Ð?/@ŠrÒv‡, Ú'!@oˆF#]Œ0†jÑÃÃ@I‰ÙzÉ„%%T•å˜RJIÐ\r›}ÀYgYW—hg™X‚ö­¤oññÙœËBI1楥ô6¯&uºÁÈþ Pm61‘Ö§èé±úœ\rLý­´?³àršôŠ`€¡ŽB‹ávz-dÌ‹š‹ %Zμ32 ,&zÙæ dWðö€²22eá  „, Ú'!`;tI å'®gTr'!‡ƒ…”×É%·E ÄJ[ìâøÅD8 GßâBäp.ië˜÷ôÐÙBR]ÅE§ëOCÁ(tÙy:°×nÃàsÉm A³ãj%AçMʃ‚QpjÐì=u uƒßL? ÕAUfÁl¡(dÌuÂI¦íåEߟÆF ­MoƒB6‚£3Úƒƒô:-Ô—šPÈ’ mqö%ècgÑÒBm…î‹jHî$,µr¼¤‘‘ÔêQV&*™\r[\³ÎJ;t„o2Â2PÙY‰úîzËAË(pÓ8;¶Ž9KúÆ×Yß]ÆÞFd†gÂ×ݨ<¢vh.¹ b¡mÔ }Ý}‘–Žúžz4õ6àvú²Å“,š9ôÔ{!c®KP‰æ^Ç‹ÓQhƒ­îQ£¯¨î“ÜQÞé À±Í€L Ú'!`'GáèXšÓtºÈ÷—ÜI8Z´œk±:†¡r ‹G6—ÜWܰ!šAðjß@Cú¢§b^œ|hë˜ó…²æ¹“çÂDrpÉF§äÕC —.ÑXNãÀlÐU¶»~Z-ýùûëD`ºÚ7/&MÒiÿ_{çU™öÿïd’ )¤“P D$&4iÁ Eª®X€¥¬X@V^YuýéâñzõuWÙ]+Šïª¸ "•"% J¨©@i$b }ÒfæþýñÌ™’içÌL&óèù\ׄS¿ç™3÷s?÷ýµˆ‰ï ÂØ‘V÷[a[ó6¢£­Ì¹ê˜ú#õ -!ì®0œfn³7'N ´+IB€5|}Ýl £¢€¸8_.BêmÖÌnM66²¹Sû÷·ùº«µÐY·éÚ|aa6NÚN)Ñqh½EVèkDkÚÕ2·UYM ¸Áƒ¶¥;) ˆ×…B£q:+`H^9‰âbö½vîëÝsTOøEú¡îÇ:h›¬Ñcâ”gÚhÔØÖˆ¢š" €¨ («ÇX¡ÐÕÙøs&«4Âî ·Þ¢À¥v5Ièî>Âô+}Â)›´[“„úež ño+¸Ë@wÖ]XÈr“v=  Öª¬Œu’À]7ß8TrÈ~rJÿë JNBP1gjO»TyÐf B¡æ:}ºÓìFâ±¥;1Ñd`Ž“á C¢°ò„Í•B©@ø´pP;¡6ÝAw;ý‹ï 9š]• YMvº”±~w1AX—Éæ/ ›fø=tNúz\hW“„@׎(¼'lÖÌnM 4Y o¸Ë@wÖ-º‹’`@$z’HŠIBy}9JêJl¨ÿÑú$%"!5*JKÍq¥Ì…i­Ì'NkÓ´!§*‘‘¸5âVËo²µ• Ct[º“’€áp-þ,pSü•þ8Yy¬"´VéŠsè­jÎ?Ø=Ìbô¥„è͹s¬]1ÐÚ&-O5B­‚¦wJJXÒ×-++u!\hW“„@×$ ;†3¬:èhëǸ5I(ÄŸíxÐC‡²îJ®>ggÝ„NÌ -`ˆC—Ø s˜ô‹µUp¥Ì+*ØxaÃØè:œª´kÛͨtÆÅ8´-݉‰î3Ð~J? ŽÚÖZ=ÏÆU[«t#¦ ´ÝþKÑi‹Îâ÷ÖÂC.§Õê×?p¡G}V=HCгgùˆ?œhW“„@×èóác'lvÝqk’ðÄ æ©´ždØX‘!CXw%WuKö ]ˆC*µÑÝ®½Ý,idË@»Ræ¶âÏ¢ Œ‹qh[ºÝ¢C"òш`Ð-º¶)B¢0¿†µÈ† ³ nº‰õ 3Åâ‚Q½G¡ª© ç¯[é'Ø)&)ô>èl])s{´Õ*¦³9éAÛÔ­·0¹[ŒÏÐû„Ýð®èaßIIˆl>·Ý—´Ÿt!þ¬Ö¢áDüzù!ph ”ŸN·Ómº´´õõõظq#fÏž/¿üÒlHH4 ¢¢,»à¸#I(,ÑÞÞi… ((pl Ý–$®o'þ,àpt˜ê¶¶Z¹]’’X ÑÚ0?L‰Ów·³‡î4¦>8˜%~JK™³%àJ™ ?fS»PÑPІ »izúÛi½³]½êTw!›ºM ´nÁ ˆAP„±¹9Úöˆ¦1!ð óE]F´j;Ýí‘86ÐâÏ[ƒ" èyÉyÝp´ÔÁú?·µ)PPÀ¢býúI¾”Çñˆ.))ÁÌ™3Íþ}öÙgè§/¡›o¾—/›ËÌÌĦM›ÐÞÞŽƒšísG’po˜ƒˆýnr”ö ´Û’„ ´;žÓT·ˆÎ#渇¾ûfýüÐÖâÐV²úÖ*#gËüúuÖ×ûÖ[Ù1f+¨8Â…8´MÝz‡$·xÐ> „6üZpÓ°³6Sø*~O8tm:ÔeØYr;1#ÛZBù)•ìý½­Íù¡½+yy¬Å~¼S÷žø¯‰„TPÁÕãÆü|vÍɓ͎ýæ¶ùÑG-µK%5•]ëwÌ·ûx!TôK‘ã‹ìßÏ.²p¡äû[Õ}å »^b" Äþ¬«“|i3®_'BüNB*hÅ®vm½ÒJéH§cƒŽÙ=î\T‘RIÔÒb¶=£$ƒ ºoÛ}¢õýëÍëDÕDÜ*úZCª ú1âGÒiu´x1+³={¬¿téRÉ÷èJ|»³rxã7ÌþŸ€}`sË–-6ÏsG’`ÝÏ€S§X,ÚÚäFb9Æ’ú;@Ààða Ð{PnIJoŒ¤§YYÎM&è¾t‰5ýÇŒa!VQ‹Ìåç³a~Wbž7?–ÿˆC%‡­|e^Æ7;V»߇©v©?Î>M‹¹MÓ†ìªlDD`p¤ˆî^VWz‡UÝ&$%5±Ln.0y²äË8y@%{HkK`™âëàÄ`4å7¡åb Yï…?j°gË›t•K윂 ±˜"ú,FãñFP;!lR> CNa”íŒ^—ÝìÜ‘$˜;–ÍÁâj²ÅÌ@wZaÅ·$ 4ЀѮIEÐ--ý¨vqøø°8qs³S³6 qh³y9„gþCeõÁÙ³lÝVSíR bŬR™Wh¹WsP1%*Š û>wÎ낾¾Ç¶£4bÁö‡É÷MD8zù(|}|mÎ`g ÕIöÒ~_?Áb¿#L„Â̼>Þ¢b2LÏÚGB|Lÿ`A÷°ZWŠ6?¬ø}|¬®çµpi Ý•$p5Ìqì˜qÝX‚N7çr’Ð…vZgÏR 999·7ÃâD˜ctïÑè©ê‰Ì²L´×ÿJmh¥’U–j5°"µÌÛÛYØ*"‚L8XÌLM½eª4ñ>>Ì’¶¶×…n¡Ü’áÁ@;Ú`þ:…õÃÈ!(®-FºÆîyŽ–ÁÊÉɱí8“ ^Öž3&`à@ÖRûó7Ì¿19 UUlzœÛo·\WÒ›áÒ@»3I=_g ô•+¬'xmúöe1Ò³g͆ùºœ$¬«:>Þ¼[¡FŒá|‚PÀí§ôÃŒA3 îPãPõq‡µ6íš¡2:rDz™çç³ò¹óNó–ÂÁf SâR$ëw&m¦›ˆëëkVCš>§3t®ïÇ÷cÌ,µ¿"Š_ ‚ºHÖRË9VFŒaöÌÍíÍÈ¿š˜à  ^`V«àî¼Óp91Ϫkס>«Ê%‚“‚ ÎOá €SíÎ$!àšm×hÝͺ‡™zÑ.% «ª˜ 1dˆSkÅ Ý …X²Ôjµ¡¥àôKî‚€9ƒçv hcÅάf‚g™•%½Ì­…7Ôj¹|á=‘ãÄŠNh3Ý?ÿÌ‚Å#G†ÍááÌ+,)a΂ZZX¯½°0öJÆÖÁþâýÏÂÖzs¨Õj O–¬8sÙ2 %-Æõ'®{"À<ŸŠ  ïÙSR6žl„®E‡ÐdÖ˜"µ#u7Ã¥vg’°°";½½¬†9\J s’L•ØÄ6ÁÙ0ÇÉ“å(-e^¸Ó)€Þ½Y?ijgšœúÞ[ï…øv gß3†UHGŽH/óýzÛdêÅ‘ò#h×¶cJÜ(}¤Ow‰Ñ£Y½Ÿ~ÝåÂL·`•’-{8‡ÎÌd•õ=÷óÍBë@”¶ÓÚ ]¯7óè=tQ/©þ¥•R¿×¥ãÏDÀ¾}lû´iâoï pi Ý™$̬H  6Sø‘˜! ï2Iº”$§O7ß.ÑÅìžï£òAXJ´ÍZÔ1%iÐ>q"êýcŠJÄÇàŽh ³ä ïˆþ‹T(سvtTZ££¦ ÇàßÇA‰Aï¹ósò—ÚÝIB˜7}~óøs¾ûŽ}Ιc§ÛY§0‡ÓI X0r$ <:IϞ̾WW‹÷¢[[“'G 8Øè;+:+ sóXBjWñ‡‡ )€ÂBñe¾{7û¼÷^ã¶-7}%}CúZ_ V,‚%ÙÜð®\½Ê*ùøxÖ ½qqlˆ{n.Pë`ÑmâböJ%$°P±)‚æ0ôæèÔÝΠ=>ï†Ö˜6 EZü9?Ÿ%Úû÷7lÓ¥üƾ÷F@¡0ÆŸy oœhw' ö Ê–8*¶ß²3°kûœ3ÇÎA‚k®wWœNº!þ,pß}ìsçNqÇgd0ÝÓ¦¹6¡ÖÜèÓ‡ü¥iüî;ÜzˆWF#ÿZ>ÊêÊì>ci·k—Zt÷cÁ@ÏœiÜ–Qš!%N‚±ÆÄ‰¬wïfn  ïŠÐ¬³ÑrR(XËF«ï`^¥ixà sÀD¨”*,>hZo!]³³ÆlY2ƒv…ûƳ¸ÂôF ñ…´4öyß}fÞàïΑ5®ÏZØ‘³"ÑÞÎ|£  aH/‡Kíî$¡€/º©‰…–ì†LʬÄ÷ßmmÎ' …ø³ ôüùìóë¯m®ëi³宇7öc›?Ÿ%Ê„¡Xô†jN<û¢¾½ð­ÝÙ¡ml,7Ÿ=.^d^åw°^’†ø³ÔþÏ aíìÚZ‹LÖ0¼+_}Å>÷;›Ç>ø ûüâ qR„ø³iE$èˆäþɨm­EN•ýðP=2&-—ZДÝd¡ˆ°ï¦F(¸'Ý~…j†à=Þ„žáÃYßôãÇ­;R¤!ÜØ{ •á)áÈÊb¿Õ)SÜà\t\hw' ¤èýûYBiæLëò³eCpèsIB­–¹=zXL¯é }ú°^¥¥Žú ¼•x«?f§xàö©_lA%%¬‹áí·cî¿ì:¿Ëái̦Ålœ=£eÞŒT[¼^[Ï.BP||ê!vp§Å¡­"x B,®·ßΑž>ͺԛbj ++™oÇR<Â¥îŠ$¡€˜0ljÀ/¿° aa".κÔÔ@-&Ú™mÛØgç¶· Ì^ô3gØ 5[ö3%ÅÅiR;#´*ÄÄšš˜õ 3„xæaM—]øÙ³Õoµ{7kúO›fî¨(aß—ÓýŸ­!2Ì¡®¬dáˆQ]+'Mbý|°Ý0Ñh˜ç©P³fÙ¾–ÒG‰ßÝö;tè:°£Ðq(ÊæØÆÂjµmš6¤—¦#XŒq÷¯2¶öÃÍÍÌí µ;ìOð¢Míå­h>ÝŒÀ!€Í›Ùö øX Ö\è®JÌŽ³–˜­0>ù„}Š oè RùgŸI”ŸÏ\…ÄDãòÜn‘}ú4kÇÅáá.N“ڙɓ™áÙ¿ßñJ#û÷³!ž3f¬ç´Ó Rªðý…ïÑ¡µ»HL,06£ ï¾Ë>—.5nk×¶ã» ßA¥TfÓs óæ±VÄ×_ÛíŒ^þé§,.sß} !Ì¡ÕÚ]}û-›4hút³ÞkVY˜°ðù™ÏÞ»×ïzA¡T ú‹j†P^^Ž.ýu‡)q)P…F0£±Ñw°Æ¾}̀Ϛe7«÷Þ!ÿÏŒ‰î»™§1+:ðñÇlûŠå{-\è®JlÀ×#°&ï{ïYî¿v ؼ™%X–,‘páyó…ñÒfWjƒßÿ^ÂÍÄ!4‰ßßú÷üƒ}>ý40t¨ÖR4ÅÏ5a;:Œ}[¿4Áó¬ Æ´ÓPÛZkhFÛbìØx¤¤°Vµ[°hÃÀæ½ÒKÒQ×Z‡é§#Ä?Dì“9&2’y‡ÕÕv­Ä ûD„7„ïÔ–ðÁìsåJÇ×J¾!}‘Yš‰Ê†J»Çª¢TŸŽŽêÔeÖ!>>ÿÎÿ7`QÂ"vðöÂ[·²Oá YþðâEVJFFÞ‰~`3ÛN™"i] qUog™={v—^ÿ矉||ˆzõ"jj2ß÷—¿°UŸyƉ OœHÙQV–¸ã;:ˆbb˜˜+Wœ¸¡cfÏfϳq£ùö+WØÊÝ!!DõõDÙÙÙî¿ùîÝìæÓ§Û>¦¸˜H¡ êÝ›¨½Ýl×¶ÓÛ© ¿|Ðîm²³³iÏv«¡C‰4óýÂJÏ6˜o_±k!ôï¼Ky*q|ø!»éCYß_^NÙ¾¾DááÏm† «}ïÛg¾/+‹mï×ϲ lñìÏRAoe½åðتÍU”Žt*ZQD$¿õ~þ¿áÔÒ¡_Ù»±‘(0¨G¢ÊJË ²ï:&Æb5pk¼ý6{ž9sˆ´-ZÊ Ì¤Ã=SG‹–Fbû¶o÷œÞ¶ªw·è§žzŠLW¯^µØ·aÃzôÑGé k×®™íóD!.\Ⱦàçž3n;s†( €È×—¨¬Ì‰‹¾÷»èÂ…âŽß»×±s‘S§Ø-úö%ª©aÛt:£á~þù.»53<ýû³ÙªžžíOMµØ¥nWSÈë!äÿª?Õ¶ÔÚ½•NG4i»Ô¦MÆíûö±mÑÑDuuÆíÚŠ|#’üÖûÑ õ gžÎ>ÍÍì¦ {±:óøãLØK/I¾ôŽìÔ„VDZÏÄD¶}ófñ×ʹ’CHúh”Ãc;j;(C•A?†ÿHïýô!´êûUæ ßçªU–X²„íûÛßDiki!Š‹c§ì]Ò‘N§ï?Mÿ÷lÛwiµ¢.e@6ÐX¶l™…nii¡ùóçQVV½òÊ+fû-ZÔåº.]" c_ô{ï>ͼ/€èµ×œ¼hS5GD0øâEÇÇ µÄÖ­NÞPÂm&L`ë‹/²ÿßz«±ÑÜÜÜ57ÿ}v³ûï·ÜWQADäçÇþ¶Â£ßìö;v˜ŸsàÒB*hæg3~4‡lØÀn>>«A~þ™È×—šCC‰jíW<ÖÐéˆ&N4ky¹ÑöMšd~+Ç×ÒQü»ñ„TÐùšó?=ï4¥#~âaB*èxÅqójjX³ÌÏý¨ÒÓÙï"<œ¨¡A´¾;Ùsý¹ÇJG:íþã fÛŽ}¿I]\\L3fÌ0û·Uot–-[fá!_¾|™{ì1""ª¬¬¤+V˜íŒwW³{7ûA³4„Ñ™•Z+›rîdzâ û640w=8˜y[]Hs3ÑèÑæÏéïOtÜä·uîܹ®¹yK Ql¬õ6ù¢EÝøÌÒLB*hâ¿&Ú<ÆTûG™?'@´l™å9O~÷$!ôqöÇ’I4j5kºDÿü'ÛV_Ï\_€Î­Yãô¥Ëʈ4ÎÞ½‰ŠŠ¤_때W© ÔtËVLg®ýç¥#ü8Ýöîm¤³V¼ñ†1ÖòóÏD,¬}ò‰$m:Ñ3OëhŽÐ¤S8Ú`·p†ß¤¶‡5ºµµ•æÌ™CDÖ=è””Ú¶míܹ“¾úê+"b?BÁSâ¥îØvàÑĉÙ4t(ѳϞ£_~qñ7nPv@‘JEç¶}ÜÛo³xõ²e]öl¦Û²²ÎÑÿØL D“'gSQQו©Å¶O?%(;,ŒèÒ%¶íÍ7Ù¶^½ˆlžÛØÔHþ>€ð¨øF±¨ûnÝJ4aÂ96¬™>þ˜èÔ)óã4Z …¯ 'å+JÊÊÉêÚ28~œÎùùQ³BAtß}”=`3ÎãÇS³>æâì=*+‰fÎ̦‘#‰fÌ8GÅÅÎiÞ{t/á%PÌ›1ôÓ±ŸìžÛPÝ@ûý÷ÓÛ¾oÓ›{Þ´~\a!5?ü0û~õµÇ9€š—/wJßÑÒì¡Ãò)))›¶o—VV999´sçNzóÍ7=æü‰¥[ ôúõëiÈ!´lÙ2:}ú4кu눈護ޢÇœ,X`aÀ»:IØ•dgg³Àvç·)õõDQQÌ}ÏÏ÷¬@tI’Д§žbeÒ£ÑȑƿøÁá©9ôB*h}Æz«û¥jÏ(É ¤‚¦~2UÒyN³cQD„ÑÕ4‰¨¶¶ëË\|õˆÝ2P·«é¥1/чøÎ¼a%¶.ÐÖF´n‹£Ý|3Ñ?þa ˜K¤pI!¥#ª>©rê|SdÚ x[!JæÊC¶[‚À¼?§„lìÙcc‰uêùšó„TPÜ?âH£Ù=ÁËÓ–RAOnt|°»P«‰¾ù†(Ï;ŽÅ7ŠÉo½¿Lך®Ù<î¯?ý•nYy ¥#ŽÝzŒtZ o'Ð4kèpðaÊ È¤Žç ¼)Þf[¸ìÝ•# »µZÍ&üXµŠ{à˜Í…¹w/ðúë@@ðÊ+Ý'´.­¥(• X¿ž¢(-eŸ"9wÇÝ’ºì,²¡!E{ºŸŸþÁª`<’ðˆèó\& €|JL4lêò2—@\xV^…¦ö&¼zøU«ÇÔµÖáõŸ^GYLt£uhù¹µDNPí$׿½m“½æõ‚oOÛs•ð —º+Gv5†)$_M)wì››áÐ!62æÁYCwóf`€„Õ»—ÖR”BD{n‰csŸÿ<à¯Gþj6/1 Mû¦ìMhÓ¶ayÒr÷Nq•¹H^šøzªzb㩸xã¢Ù>"ÂÊïW¢¶µˇ/‡ÿÃþ€Êwípq•k[¯¢Ewé}º . tWŽ$ìj Óúû³é6“’Øh²”`õj6Ák¯Dzz .­¥è¦ œ†;¢ïÀÉ+'q¸Ì|űÚ5: Þ?õ>`õ«Ý®Q*ÞVæQAQøó„?C£Ó`þ¶ùø¥ùÌ8¿uô-l;³ ýCûãSþãVƒ*V…ëß]GKIK—èé¸Þ{nÀ/ÒáÓ_eÈ›áÒ@wÕt£žÀlºÑ>}ØÌK6°ñåK—²•Fþßÿë>6pz-E¡P(ðÜøçËú›Ù>±ÚÓŠÒPÑPƒf`p¤µE&=‹7–ù³ãŸÅŒA3pö—³ñѼtè%ÌÛ6Ïí~>~øâ/‰¼3yèýxo€€+¯t‰–êílÞ¨£àãÇ¥)sˆ‚ˆò$:<Ò‹X¶l¶lÙÒÝ2d¼Œm¾=—.ãÌÊ3¸ý¦Û%×–»p¸ì0¾_ø=î½Õ}3þÚhÕ´bÉÎ%ø²Ð8§F¿~ØöÀ6Œïg\P¢íJŽ 8eˆã*ÆA t›ÒN= õy5Fž‰ž£zºåºÞf[¸¬v¸Orºý”~xfì3€ÿÎøoÃv1ÚOTžÀá²Ã13‰™ä»ëñÖ2ïáÛ_,øgWÅ»3ßÅ7ƒ³«ÎšgµZ ÿÞþˆú]474†iHÝŽ7 >¯Fhr¨ÛŒ³7Â¥þU$ 9ƒÝ|ýCûcǹØyŽõèp¤½CÛ'¾{ðç †Â;~Þ^æC£†â©;ŸÂÜ!sÑÓßÜH Ú{?ÅV¡©|·Ò"yë *}ŸéëàH¾ñŽ7Q"¿Š$!gð¢;H„Ms6Ví^…Ú–Z‡Ú7Ý€¼«y˜Ø"þ0üž) ^ÊÜ‚öÐäP'£)§ 7ö:X,Q$MM¨=X‹q=Ðk^/·\Ó[áÒ@ÿj’„Á“îi§aYÒ2\mºŠµ?¬µ«ýâ‹HÍL…J©Â¦9›¼Æ{ø*óÎÚ n^3 øùbÖu/ºâzïùé¾P(9]*E$Þó6J «Ö$ôÂZm¼Á›î Ó6 &8[ò¶à’ÿ%«Çth;ðØ·¡UÓŠu“ÖaH¯!ViÞÊÜSí‘s"šŠæ3͸öé5—®Û~µ×¶^ƒ²§1p×*ÆÞ —ZNzÞt‡„ã£ÙAÙö>?m¾lS«¦~õ 2J3pSžŸð|7)µ oenŠ©v…B(ùK ´-¶—ùrDñ Å vBï'{Ã7ä×7r°3\h9IèyxÔ=gÈl™¿Ú:-}½³>Ÿ…²?Â?½øwã‘V”†Á‘ƒ±{Ñn¨”¶×¿ë.x,sÎÚCƆ ê(´U¶¡òŸÎ.¬?R«ÿ¾ U´ ^ôžQ¶] —Uœ$ô<¼ê^’¸Ñk¢ñä÷Ob÷Ï»±ûç݆}ó†ÌÃÆÙìMe^˰®=îµ8Ô¤Õ ôÕRDÎDÐÐ Ñ×# áç§Øòó·üíø†qiº$Ã¥-' =¯º ª! …« ‘öP^œø"Þ¼çM{ôÒNóZã ð]æÖ´Þˆ›×ß Z‡³ ÎBÛ,>ÔQùA%šò›šŠèÅ¿Îy7¬!$”‘‘ñ¤#œžu7öÞ@ÌÒÄoqÜJhÌmDÞ]yЩu™3Áww™>o³-\zÐr’ÐóðªàW;¯ºÛÚ> Äÿ>þ¸ú﫨øg…Ýë46£`Z´Z xy@—go„K-' =¯º~µóª°¯]¥ÂÐmC¡ðSàâ]DÑ£EV{v´\lAþÔ|tÔt ïõÅ€u¿Ä )\h9IèyxÕ ð«WÝ€cí¡É¡HJO‚*V…«ÿºŠÜ ¹¸¾û::®w ¥¸å-Gö¨l´Wµ#ö±X Ü0 ‰s„ÿàÒ@ËIBÏën€_í¼êÄiŠQ9£vWšr›pzÖiéuÇGñŸ‹¡mҢ߳ý0øƒÁ¿Iã pÚÍNIèyxÕ ð«WÝ€xíª$¢úËjüòå/h-m…ÂWЉ¡ˆ}4VRW¼_#\hÞ“„Ý-C2¼êøÕΫn@šv…¯ÑD#ú‘ßN÷9±tkˆcõêÕ2d®]³Ÿ?|øp¬\¹«W[.=$' =¯º~µóªà[»7Ñ­úÝwßÅøñã­î F£ATT”Å>9IèyxÕ ð«WÝßÚ½ è’’Ìœ9ÓìßçŸ'¯±–ÈÌÌĦM›ÐÞÞŽƒší““„ž‡WÝ¿ÚyÕ ð­Ý›ðˆŽ‹‹Ãž={Ìþ-\¸Ð°ßÞJ 111hll4ÛÖÒÒ‚íÛ·#-- ;vì:Ç /‡7n1b„×h‘²MÀ´HÝè5Z¤l¼PoÐòk~_rss‘––†·Þz õõõð&ºu¨÷«¯¾Š­[·bܸqøÓŸþ"—_~‰5kÖàOú‚‚‚ÐÔÔ„M›6A¥2Î6¶xñb|öÙgÝ!ÙexMüðªàW;¯º~µ{ÛPïníűnÝ:¬[·Îl[BBØ-$Þ“„<ÆçxÕ ð«WÝßÚ½ .ªÈIBÏën€_í¼êøÖîMpi å$¡çáU7À¯v^u|k÷&¸4ÐòHBÏën€_í¼êøÖîMpi yIÈ#¼êøÕΫn€oíÞ—š÷$!ðªàW;¯º¾µ{\h9IèyxÕ ð«WÝßÚ½ . ´œ$ô<¼êøÕΫn€oíÞ—ZNz^uüjçU7À·vo‚K-' =¯º~µóªà[»7Á¥–“„ž‡WÝ¿ÚyÕ ð­Ý›àÒ@ËIBÏën€_í¼êøÖîMpi å$¡çáU7À¯v^u|k÷&¸4Ðr’ÐóðªàW;¯º¾µ{\h9IèyxÕ ð«WÝßÚ½ . ´œ$ô<¼êøÕΫn€oíÞ—ZNz^uüjçU7À·vo‚K-' =¯º~µóªà[»7Á¥–“„ž‡WÝ¿ÚyÕ ð­Ý›àÒ@ËIBÏën€_í¼êøÖîMpi å$¡çáU7À¯v^u|k÷&¸4Ðr’ÐóðªàW;¯º¾µ{Ýf «ªª°|ùr<ùä“X²d :::ÙêIDATÌöÿýïÇŠ+°`ÁTWW›í+++ó¤T·²cÇŽî–à¼êøÕΫn€_íõõõÝ-ÁŒn3б±±Ø¼y36n܈^½záüùó†}­­­8|ø0>þøc¬]»7n4;W¡PxZ®ÛP*•Ý-Á)xÕ ð«WݿڽÍ@ûzâ&%%%Xµj•Ù¶Å‹cÑ¢EÈÍÍECC† fØWSSƒ¨¨(À€pùòe³su:]׋î"ÚÚÚº[‚SðªàW;¯º¾µ{ "ÊØ7OOOÇ_|wÞy¾¾Æº¢­­ ,À®]»pôèQìß¿/¿ü²aÿ°aÃpÓM7`ñhžbÒõõõ\éàU7À¯v^u|i¯¯¯7xÎÕÕÕ8sæL7+2ÒmúÒ¥K3f ,Xxî¹çÐÜÜŒ/¿üëׯdž pþüyÔÖÖâwÞAtt´§%ÊÈÈÈt+ÝêAKE­VcÅŠ Axx8^ýõî–$ŠŒŒ ¼ð >|8’““±hÑ¢î–d—ŠŠ ¼üòË8sæ Nœ8ÂÂB¼üòËÀœ9sðàƒv·D›tÖžššŠ‚‚DGGãøFÝÝ­rðàAlÛ¶ Äý÷ßÏM™wÖ®Ñh¸(ó¼¼<|øá‡hkkCß¾}‘’’‚÷ßðÔSOaÒ¤Iݬå'lÞ¼™¶oßNDDO<ñ•••u³"qdffÒ´iÓháÂ…”žžÞÝrD3cÆ ""Z¾|9]»vˆˆ¦OŸÞ’D#hÿŸÿùZ´h-]º”ÊËË»Y•8RRR¸,s"¦ýµ×^ã®Ì§NJsçÎ¥ŽŽjkk£¹sçv·$""òH’Ð]TTTàî»ï`Löïß¿›U9fÒ¤I˜4iZ[[1}útdffv·$ITUUbþ¼eç_|ñEÀ… ðâ‹/âÓO?ífEöÙ²e æÌ™ƒ½{÷rWæ›7oÆÜ¹sñôÓOà£Ì¿þúklÚ´ ãÆÃÉ“' ¹0o­ÌÕ@•~ýúú@—••¡_¿~ݬH=zô€WEˆ‰‰AUU@«Õv³爊Šòú¨6l@ss3Ö¬YÃ]™oذjµÚ`œ>ÊüþûïÇž={pêÔ)h4ttt ½½Ý¬ÓBwâ*D²`Á<öØcøé§ŸÆ…÷ °Nûû÷ïGss3/^ÜÝr¢V«±víZbÕªUxæ™g°fÍbùòåÝ-Ï.‚ösçÎaåÊ•ˆÅµk×P]]^x¡»åÙä³Ï>Ã|€©S§bõêÕxî¹ç¸)óÎÚcccqåʯ/ó}ûöa÷îÝhooÇ!C0oÞ<,]º°víÚnVÇà*I(###ó[‚¿ö¶ŒŒŒÌoÙ@ËÈÈÈx)²–ùUràÀ¼üòË(--ÅC="ênI22’‘ ´Ì¯’©S§B©Tâ÷¿ÿ=Þ{ï=®'Ø’ùí"h™_-••• •W÷áÙ@Ëü*ùè£0vìXlÙ²k×®õš22R»ÙÉÈÈÈx)²-###ã¥ÈZFFFÆK‘ ´ŒŒŒŒ—"h/E6Ð2222^Šl eddd¼Ù@ËÈÈÈx)²–‘‘‘ñRd-###ã¥ÈZFFFÆK‘ ´ŒŒŒŒ—"h/åÿNæ’êf×FÿIEND®B`‚mpmath-1.0.0/doc/source/plots/coulombg.py000066400000000000000000000004141316273626600204000ustar00rootroot00000000000000# Irregular Coulomb wave functions -- equivalent to figure 14.5 in A&S F1 = lambda x: coulombg(0,0,x) F2 = lambda x: coulombg(0,1,x) F3 = lambda x: coulombg(0,5,x) F4 = lambda x: coulombg(0,10,x) F5 = lambda x: coulombg(0,x/2,x) plot([F1,F2,F3,F4,F5], [0,30], [-2,2]) mpmath-1.0.0/doc/source/plots/coulombg_c.png000066400000000000000000001320141316273626600210400ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½;¬m[Zç÷ûÆ\ϽÏ9·ž†npò­[ÝȲdG…TeÉ<”©%D@BB„!C$€ˆ $,5vñhÉ’qd'MÛ4vÑTcuëÞ{Î>{¯×ŸƒñúƘc®}ö¥%Nsçw4Ï|­½Ö|þæþÇ7ÆUýŸ€ÆK,±ÄoU¬pþ¾è Yb‰%–X¢÷½K,±ÄKôcôK,±Ä[  —Xb‰%ÞÒX½ÄK,ñ–Æè%–Xb‰·4@/±ÄK¼¥±z‰%–Xâ-ÐK,±Äoi,€^b‰%–xKcôK,±Ä[  —Xb‰%ÞÒX½ÄK,ñ–Æè%–Xb‰·4@/±ÄK¼¥±z‰%–Xâ-ÐK,±Äoi,€^b‰%–xKcôK,±Ä[  —Xb‰%ÞÒX½ÄK,ñ–Æè%–Xb‰·4@/±ÄK¼¥±z‰%–Xâ-ÐK,±Äoi,€^b‰%–xKcõ½ÿ±Åçþë÷xö=Ÿ.€Æ8ÔÓ‚g€jpͼ/ϼx±n>#yZÔ|ýôç`”™åÍt ¨k¶ÊÌm­Ëã—§/6/&ŸS¤»)íxŒŸñ3ëÒò´‰RÿütóÌnˆ“ÉòÓýK6ï¼@àÄ3ýõz^ªyí|Î~&LKµiRÍÛ#íªAªù×/¼ób[-TÚŸâãr®ËË4ÌÙuL¶*,i–×óïyg÷¼³®ÿwvSÚŸ·›õÍoƒÿóÿ+K,€~rÜ~Ïçù/õ¿Gàšñ‘¶ÀÎ [`l‘jÙø?~ï¯øú§leºn g¡ú¹üSÒþt½|nÙYÀo·ËÖüÚ¶ ÒYÆ–ßûæÿÎý§ÿM³|Ç(Cõsà(á(ªeTËìfÌüeݔ͓m³y›fS{óø‹õ{|ÏÿpX·ö§øK§8}læÛésgݹŒ¬ã¹Ý¤Ÿa7«Loªé2¿þÕ¿üs~ð‡¿ׇånŒçëLNfþR¦å,A;œÌòËôsyþŒ.üº¬ HØÄùUܪ¸\Ì4kþåÿõ'üð¿øjYù›0–8¯ \âÑJ?{1›f—ÿÿãÏ!@?9EÍxªâã§@4ÿµýñ{´^Ô¨*ù<ˆFb—[•¥ZKQx56¹[é7Í ql7EªCUWZ.€L6Eãv§f3‚’’ KµlæŒiÞ•Ÿƒ¸YfS4NHü-ĬKóB8¢a†s#QEk£†µ™ëÂA«×ñûÏÂ÷¤ƒOo|Þ…/òæ«æååÙ òÊtVÎ ˜!Ì¿øâ—ði]zÓÖ•­i;m¶D…ýî—> 8‡„‡SÙ¹éø“S«|ª°?Zì©|, ´¿ôÙ/T—h<âæ‰Y@Ý¡ô¬™Þ žm,€þÑGo¹KÿMl¡l§ÒçìÒ|‰«ò=¡á¬ZÆøiyG׋ٚšÉ MdéZC¸Ý¼±Ý<)vFVÐvÞU[T¯nPÊ2UÎq[-¨Ët*ÆL` t•®bÖ‘㤘E¬åq!lqy„„·óöCz¶ëËt8üÊæp—snÀªH_yz0§“0j9Ú(Vm€ÝUÑÍùd»~È~nÙÂè  ŸªàÕªç„ß²Lã oUÁœš†ðZ§šIójlŸU‰¾¹!µ³,ß Rdë¨dƒwe3_ØÛsüOó̼b6›bž“ù*Ã#Þ¨Õ,eS$é-Á€Z À#ÌSb‚”r êžçÜ·9¢bÖZe;s {:¿¨æ)˜¯N«7^ZRë3à^…´ ØíÁ_W¿AµÐæ*óÅ`þhÒí®°„ÐO ¥5/¦v‡CQÆÎo€é—VõŒ ÞÜœVA·F–«LoL[8”|†|×Oqƒz·Œ¹1Í}iD½Ì¯À™ljÚ4 ç$ð4mBü­j–Pk†sQÒéH–_MÕT ;…ñÔΨ§‹².’Oª n´Ä©þ²ædoT~r:0°ÒÈŽ¥ñ(°í)76ÏÒ#Æžtiæ«W•ÉpÈÚÞ,["ÄèS=\ß!áŸN/F´ºʸã9çåAŽÑ.ôì©L\®KÖÑ‘=çì=—½‹²½ÙœüÉÛVÔs|M7Ú¬‚ÖÊިŽ„±HKùÕét°&V‡Fhã@ÕXRƒº:eg5¶_F5§—¥€Û.["Äè'FÁS~Y3Kà hèZ[— °¾›š}i>A¤[ž&ܼ•$ ËÅ‚ØxÑ•‚®öƹ»qõBÉÿÅÅõØ”_æM¶.KU8ˆi·GÂ#®ÀY¦Ó•­Ñ¬Ü,5=‹¿ü˜‚›é:Å.øÏöXĶ3HÚÑz̽”:[1¥†ôÂé|—eb+œÌÂX¦Ó餤“–Χñ›‹L0*»½&Š{ íTu{V5›q¾BçXýÄT 8 lÔ(haR¶g•f–’õ ¹¼C‰~#EIK a³| n*BŠwØ„?‘Ô6EyÀ¨™®¢lêä¸Xåœn¼‰ø·›Ã´€ptåøf½–€¡¦qá£pvD›µfkšÍòd ……ÒÂÙN_LE{î:¹ÏÚ³€¨àdÜU£%ZŸoϳd`‹×|Þ%¿ŠHy“ªÞªò5O¾æÜVç9dmÌEÓ£¥ž·×ʵëß.ka½DˆÐ#üä1_«é¬ µ”½X!»EuÅù¬¤`B·J1µà¦)i£VPñoÔ׊Yóþ´oéÞ5·TÞm{'—¿²¥rÓÉdól6ÇE§›mAÊ¿d*¡¤é¶Úw礠­Ñªå‰í¡±°0ÐŽ*ÿYlþ³Ïç:ÖÊʹÂÂda¸o8±ö†UºÎͲ&ÏY³Ç¬Üᜋµ>¬mO£\›–éº8¯y½˜y³¬¾r& (jv§RÒ ¡s,€~bT¯bfªœgl,Žv¨£)•›9^â*¥á£H0É nÈvmÚÂZ•~£½œTd™9.Rn®JM^´o‰GpW 6ÎWY¶ÚHP©ÔÑ œ³såÍ|¢Œ[÷@f³Ëš˜íÏšù¼é(—¸Ùi<æaeqÎÄ9¥.µ»‘ÚàÐ9Ϲ®ˆB3=­´bkzsÌâŒÀN@Î6Gé9p;„P(œàK¬hÀk_E*X7ë[:®×1~_} «©ZI'è¦]m>î:Å®*Z]#E=—¿Y"Äè+q¹\øÑýQ~à~€Ÿû¹ŸËË{Oùº™DeÄ—{ˆ>¤¡ÜÞéÿÀ—è?·󌯨­¿˜2<º¶ §¦{pn¦ÍŽ´`V˜Ô§±Ù^Öê¸-Ál ÀR úhàl <ñ¡]âJÌÐŽí?W¶†\oó¹-.yÙ€Ï ËV†–‚ÞºÊÔæ(™5¤+Kc$V2²°N¶0¶ê™r¾ÓS¯]ŸÏŸ›BÓ1.{UÛ­bN'õ:£ÆÛV­­aSîÒ%éeil´ÐWâ—ù—ùñÿqÞÿý¼¬à©.> bª¾ç ×[üYÕì$½GNZ`2ÖšrFyiÇ{–tã¦íœ4””Ôto9fLg]½t¶`0;A9ÃY©šÍ(hrœ+`'>$ålÕt]6coh£¦'ƒ†‘¸Äì OÁÙÄØŽ°Í­Z.ŠšŽ½aÆc‚uY&c½®øGFQWyÑqÈFq;¦ìÊl+Ÿ¯Rîì ³ÊÚ\!È=﹆ô¢ m,€ž‰?þã?æsŸûï½÷^hˆ :¾îMÕpšRãj^‡s'[£VÐ:&°ömˆwušðz›¨™¶± â7Úýn¼ÆÄ³ï£H†õ¤ êtP&NÀ­€-å³IM[8 <^ÅøÌÚxÕbá|©”uݾ³ý¿—Fà[©eiaiN´éF!«QÒbí,kæW…ƒFq§×‘tò¤l{b °%ï¼Î*çVIË´:w£š[Uw}ºŸèX=¿ÿû¿Ïýý=_ÿú×ùë¿þk~â'~‚wß}—ËG>ø½?Nl¾øŒÝ{{ §1•‘±ê‹Ð"Îê”üÚ«Äj­ +;ó¸ç¶f¡õ¨g¡ÛÞ.í²FM›Ä&äYµTyÑ wÒªhá"„ *•Zhl¥nlÓ±të'O›½m­[°ƒÐXêŸÚÚms¢ù-ÈÌÇM çXÍaÝU¼ÀÚsKk¬f¾«ªÞ-å„O}åò'vy[rR׿ªZHk\/ð—üß|ãƒ?c^_²DˆÐ3ñK¿ôK@PÒò'Â»ï¾ €{±çùþçÀð€çÌíi}ÁçV,¤§0ò <´«QÎRÙPK»Vù:omL!Þ¨ì¼ã^hÙŸ¬žÍ'ûP.›yA¹¸0ŸTZVÅÊ‘ÂÖov Në‚ÂXƒæºMèkŠºØqkÃt®êöXfr™KA õœ1Óæ|GX«—Rù¤ç+çé_sî¬Í² ¬SIÆé@c–7‘?Óü-Ì4ìo€n€l‹?ÚT;Uø§ŸúŸÿÔ—8ÿÛÿû{ ùdÆèGâË_þ2_þò—«e%û5½´ŠP]Ô£]HCò S>l¬ œ€Û*å‹Â9,S³L,œ›’ûº g~ü¨;hΛ6Oš¤ˆz º*„‰­Tq)ø“JÐe(§õVM[k#-SÛžsè_°µ5lãH•Ý1SPè2¸#5éÊT ejq¤œöÜ9µ éo£” ›“Õ°=¯”óÛZÉi®Ém¸å?§§ y51×j éé èáêÐIZ]û>6÷~¶DˆÐOŒP'-ë¤×¹8ojV‰QЗ¬ÓzöFy¢O9`TóEàŒt’v,æf´°[pXJ`®@8me›@[-ïAzÚuª›¼Öó™ø¼éÚj \`]Á9Í èP”wàHã?›Na­Ï\”ò´Ý g‰g2ì•ä½mkNaMãÞ¸°ÍÎiaݪç6s£÷€Ž&¿&8kÎSEÝ^ñæOæ›é<4WˆjµÑvÛpß!@ŒÐ ÊÖØÉê°.:ÍBºx“Î.Úzð•‹À9*çs i&ÀÖêæM…H˜R˜xkäöž[¿¹|Xi`];ý}}g«ýk#ø²µ\DÒ‹@VÐÖo¶îÂzboþžù4ºÚ¥‡îÍQl í’ö2«h´3& æÂ@éÁœRlŠxÎÚ,TSPz@n³9ªï døäÓ$uãú3cºðm—cÎuÒA¨LlŒö ‹-×Õ õ…Ï%@?1Ák@©2PÇù¤¨LjrÆsªR:Š5 a…  ˆÏ@}–'0#¬†œ[PŸg@uØIÆ(t³8&*Ùü±ÚqDnìðx±Çɼ±S,Žä3ew.Ä{{HÖ8–>˜°‡)¬³½¡)ùº‚.ëʾM+§„±D ’J½ÂÁÖÆha=X{ÃU<«œÛ¡^§fù$³'•CX0ç˜o5<ìŽ bò$÷¹äÖ Y]bô“Ã᳑@½c]á ¼Ñ‹ g”³nV"ä×úe öÆIУƒ“ Çæ4nA}&Z"¨è艵ѠT Ñg!r„kPknoÉ~s/Å.ÀY¬‡°y­ZƒÆ±7`žX ñ;4æ?«v, ¹ê‘>¸C)‚ä÷ŸŽbVÛ?±)Ѿ’¶ckgTª8ŸKìdaU6ëÌi’ì)Å7'kW¤RÖ<ö¦V×f:îmVÇÕºTŠ>3¹ªÌå×SÕ=«cás‰ÐOŒ¢ 7„º‚T7('”5žè&k¼œýXÒ’ ¤‰÷Æ ÁÚ8€>(ráAЃƒƒ GÊpŠÃ4*g9S«ç^vkSôT±ò%¿æ“ǵªŽâÕ§F=S”sxAPŽÀÙA)SÁ¹xÎâ¨qÔ5­š- Œ'ÐŽëM ^«¢‹’b/DUjY‹JD²½aÇÌ*fí*➪n—ØÇë ·ÓÜ…n;®Õs×ÎhÖ©Yg›²ž“½Æú¬G½D‰ÐOsPWª!OCÙ¢zÝ‚žÀoP¿Á늓ž‚û`,Ž¤Ãœ@¯Dá—{p÷‚{ rPäàá èä pˆjºUÖçÈÎKTO¶º¯½cæn58Õ 0 º"&\ÇñtÝ,»€ŽåuÞ¨hkqX{ãDÜd–'¥LTËÎ+3EÀ,36HLuèwë±m©YpÓ|>Ã:Vù¶TBØZ‚½66"ß\yÑ^˜xÎUÍТª¥zàjõ™r®í« ÙÞ(e¸¦ößœl>;iÉ»͇®ì ­í %ggÌYVI/e„%@?9$ÚÇÆÝ^ù}–ú3øèõ\ôÄÑ_‚­­-Òzÿôµ¢Òî^‘àÞ£G‡(ê9)és=ä×\c× zоX Ô:P@œ~àR†¸.¤‹ÅB³ø;S8Kx0ÏŸÀœ ¼ÒåÔv<ƒF8ËÒŒ-t;`¶*šRI¥ò£µ. 5ÊÛÌºŠ·‹Ë* «D嬡p°µ0&íga«—ãœçnó-¸­ RÙ-¬¡†/¤ÊWo¤¢gšm!œ²3úªY&Ë>—XýÄ…›*_¥Uü>–øû ø3ø#ø£?pÔ3§¤¢ãEÀ¬¬p†ñNÐ;pwÀ½À=ȃâÀ1BúH4rãøBtVOI}ø[ßéLžò…œ«¦‘œ:8QEŸ@רnâò¨¢uÀ¥ã¤åÛGN¢á¹’KHxÝb9+¬Vq™NÔt²74g~²:&`Žy~JM­¬É6ÇÅØ%Šd±­Òµ`& F0§i¯hÊqosÚÇvÚØVÅuŠ>sëQSC^-LÓvKtAå„°%ýPê¢õ‚pQ8!œU8"Á¥`´jy¾Ò­AÖÄëz=+ˆe³ÚU¡auò™%)æTmÈB¹ì]Çsšñ‘`C•Ó´¿¡r–ê ˜QVkCcÚ\¶¥2d[5l×'ûƒR ˜ÌÖÚšQ¹]낼G•ÒµCè¬s•Mam‹ÀmæF/›c‰  ŸªŽP@oQ•âóåûYcå1zE/#ŒgÆñž‡ñȃ9{@`å`¥ ¯„Ë·A?TVw‚¼VäAàr=*zŠ)uI‚G‹¸ê4—ó™›4¥Ù!æý1Þ:Ò¶¤ßp<½“jµ°6é†^×(`ƒÃq{G’û"œ¢‚>9‡ßl~+ÈF-°Ud#ÊáëðYQ+²–ly`˜¬¢E³ÿœ¶ –ýžV£(j{¢¦Åö°’LS(4éuÙâh`39VÄŠHUÃW5„5NKΓ£TgÍ…Äô\A–þ:¦Ëß Øµj®ra;Ÿýh°½q-Áèe‡&c4©I_æÕàtt¤#œœÆw—;N±0mã@î…óû òÆ× „ Ž£àOA)ë9XÛî’J3€¡ÛþólîR é 3¤ãÛ€étÐ'µ¤ÝVS;„äÎæˆp@8à8 ŠîöŠì]˜Þ:üd«°“ ¨#¤IÀ^k´7$xÒ¹ÀX¶5µ+ŠÍQTsÓµÔX)é„¡»B¬šNRÏ’+ “éPsp§s¦†­TTµ\À= jû¶ÔØ%ó1nÙ›ì)]} âm.4W<{„Íå¹öcô“cvAª¼Ø5° ©u¤a\Ã¸ŠªÈs>=pw>ð0žp«‹0~K¹ü *òZ{Åw P. ñ58©e V鉃J½—dÔt£A¾]4ÊxÆ ÆvPÏó»ž0][‡g…×5. ù-g„d8ß°¸Q4Aútç°UÜüÆ€Ú ê*¥åIñ¢£ÿœ-ºxjÊsÃôa¯m$ïÙ¨f±‚°ŠŠ¹ c,ÌÊ9Á—¢¨pgP·Uû[kË®3-+vA=ë̶\g ¾°”³ÇoÛ• IDATШæÒY,„αúÉ1 ìICð+7‘¢'ÐèütŽ70îà¼AÊÃÑ»óßà.Š~ œþJÀÝ ÃgÀŒ§TèÓ0-öj‡úЇZ¾ùæª>,Òi±³)#C:¼ê{FT}FVvgUð ›cB¦ø… žpÜã8 ½Uäv€[àôdìA÷ÝßÛÛð¬“u=Xk¬åCW=×>³ ­¦µZÞ+¾JyÐ`[ߘ¤Ô)9ß¹-\E»#ÕÖÑXó³nüJb¡¯NÁA-ÝV ©½éNáàl`Ǧ˜pØ„ykmÔ;­ÎB›Zg!m=é%B,€~rDÈ©ilŠÒõŒê üôÆwàò)ôô‚ÃÝšÓ‡'ôÿûÇo ›„Õ=!+/¥'Ñê5z¿älõᢖJjXøb`ô]QÏé3IA§iû• ØbÚ]Î>ãY£±F¡' #^/ŒÖ‚×+ž#Ð'àáÇýàð·<Ðç ÏžQ }ܺ“ð’²UØJö£i”tð¢5Øe HŠyê5—cT3@óß”ù^V‡=ÖÐÖâH ΪY”uœv©•ÜRa¼lRÙB«ªÏ”*ü©01ªhiÓñ¬Íág š*“Èva} Êù´êY&€Öꨬ%m›(]ø\bôSCÎëp%޼ãq Ãe„Ë% §oàá^?‡ßA¿ù÷owðçÿ†ñƒWøñDÈC®ARþ—<n²´!ñ¦‘Ø„˜›¨ê‚ĨgIªÛªhK~ᜲ5BÆFÈý>ÇáDhD5´Óç91r ƒzFÇ€ÓÏxã•8îø”"ï/@_€<— ¤o½Qd¯èØ º%øÎ5Ȇœm K#ÉsʹesJãõ§Òßè'‹C㱩Ûð¶ž³µ5Ö*ᙢÔmzŸêqo®pT,ŽIŽ»©#”ò7ùïá²qÝ÷’ ¬¯úÏfºëk×*ÙBÚæ?Ï©f[h‰  Ÿ#!ý-•€Yÿ/ÝH©–߃ƒû^­àƒ üÕ «óyVþ_1<|‘û ù[D^!rDä„ÄÄÖüh[ž!ºz5¼¦šéJu[õíËëêD=…BÀTõ[Yá9*ëyÀs`Ô#Î\ÔsÁ±â<ÊðÇÝz…~f…|ZÑO ò)à… Ï¹ØûàKï*è1~³ä#Þæ>[£Ày°òE-ëI¦EÂJMŸR FMWpî\{©*¸w¥a¤ ­ÍqÝֈǡùì°-d«G[Òv¬qÔ^ø\bôScyHÊ%òèIÈL"’2ˆ«Öo¨ŠXD‰jQ CÝ¿çŠM"”î¾JØ¡²Ê–‘=gý€£¾ä¤'„ïä}^}f _Ø£ß%Ègxáใ; ¼ Pf£ÁÖHU½MAÌø·í8×Ö† ÍžÔP¶Ý“Íwþ›¾ËGŸÝ>ÛjÜÕ¬Ž5ÂF‚Å! ¾Çi'ÛžŠi°´RHðš-œ[um/‘pnÄ»âÑ\èæ3W>¯ê–ÒWre©×Oš$]côS#)èÔåTn4À9)gîòr@?Pä[ ß‚ÝãVìœÙ³bÅšAv ìqò:Bú€pÄ…JÒQMÛªƒ“ü:³Ì¾Þ§åéÝÑ(èö%3¾]fþ$߬„×ZÐÖ =²á¬·<è_ræ_ðÍÏÿü÷}ùžòÙ¼ÑÛ²Wˆ•S™´»‘šÉñ, Ip®û ´ê¹¾Ç{jÙô+Y#ˆ%=f]€/”¬ kilák†‹4­:8úØæ· Ö»#Õ­Ôt±6¦…ƒ.P.W›ŽÅ‚Ød_äZ£Ò.k¦;óËD• þÔ¼ÇHÈî©`,F9§åB©¨R]kK,€~jxp‡u¡'‰ÍºàK?hPÎw ¯>>PøVwÂí8p+žm”„U¬À00ÈÇ6 ò€‹Ùà‘$HËㄦ0ô¹äÅ@[ba Zœ.Ì'/¨è¥šx Sm<;""±B¥ã²ÿKü?ù ^~ç?Ç}é¿@>÷!ccï`ç`ãеCÖ.db¬4Œ³JVr#Óé÷óv„"¥Ô ~©9Ø>€€Ê©ÿHl·e:TËÔ*êx¼|*-áWjà,Ž Âeí]1©%£·­E¡§k±1XûÃxÓÔ“;!Õð¬|æêí ,ŸÏÜ`fy»ÞUó9_FÁ‹©“© ¢V>]ÀÝVXYø\bôCFAŽéõ44¨/Þ Ü;x ò ôð äå î„ÍÉñ Ïe-Á5Ý„‚%Q\È€`…«\ÌhypBd}‰p¶ŠÚ¶/*ÎP«íîJ4Þoþ„$’âmbïs{ïÇÆòC»Ì«b+n§¬^\Ø|ç‘ówÝñló’‡·_„ýwÀîS°yëXí`µ ð·‚a7€sa°~¢ð¬mÅ”Î5˜­5“ >mï8Ѳ±-ùÅ6I\|DRǯ©Á=e-Âa£±Âp&<À>(æô@?ìÐdy46ǤÑfzزª“d!Ú I]ÏÚÚmAâd>(ïÊ ~Ôw #È«lóls¤ï_@?=<ÈQc´7}äÁ¡÷„Vè^ƒÜÞwÂð ì½g/Ê6 G¸/A‹±Â——mI Ž°–XI87Šœû¹"˜â.B[â¼Ý`-¯¯Y=«¹—¥(ÕJ|Iì![ƒ0‹öBÕ6óŠ\ÓÏm…áFY½€õç…ÕwÂqŸãŽonþÙxX݃û<"ï€cqtçíßiô”ã±{Š ÒknÒG鴬׈ÿ‚ç  Ÿc`$Çéc„ôƒ } Æ›Q„áäØªg+Îëˆ É_—û‰fˆiuáõ¹è'ñFŠ 3=É…¨íŒ Õ+¨ Qþi©*|ßÜ¿_\¾Òå±¥9E7à¶„Zí;p·Âð\áÐÏ ‡ʃmUÜ·rá£ÕûȰ Æ ˆ‹í¥ºsÈV‘}øR.¤ÄçÒ‚EOÚioéçð9ë–—6ŸJ‡ T½á”.ËR¿’øð~3ªñ %´å½XûÐðÕÖPËôuh[E_äÖ S!¡ž\´4˜ƒ¥§mN}¯Íïût×?«sò$}LR(€®0"„bÂ1˜2â¢C]RèÔ¼Yй—Ä›ÖgŽ`Ξ"S8§ö,šÆðeHoú±±üuh³Y¶Înjÿ Ï€‚|JÑÏÀA$4©ê•-pë”;÷?|Æb™ˆ½ôì«oïîë8¶vG¯° ¨¦¡ô¥ù”qR+»`ˆ*¨G½ >ß?„ƯtƒWWuW–{ÑP}焽wÿZᵄîÊî}l×ÛEÏ™hmxô!}VdWÛmG gJÁ ÔþºLôŒz~lx¬"‹–XzÊÙ¦ÌÙ:۬蜒^¢Äè'†h¸ 5v;ÈÜYÐ#ø³–\×£à.A5oEÙ¨Ëê¹ä H†´ŠàØáRJÄäÖ˜¥!9£Ág`Ç"®«Òïì I¹G“jÎ?4ç—.§âòµDçA‘-ÈVâöyüLàYPÏò)á~'¯x‰Õœ÷;¹ðàî`ØÓzX!ÎÒ 9}. eÂûÅ*6¸Ÿ*T§7ƒ©?]ö7ÝþBil¿(J…¹BNnR5t]zÄ9‚߃ßâuͨÆØÀÔ „‚Á˜”²We8 þ5ÈkàµÂƒàBÇ¿z9:8)5ûÊ¡æ`€rQÆQI§6¿{T¼UÉåáu]QÏ™Gæ-°k•mÍ¥tƬ<è©äÜ“J+‹‚αú©a´ í…Fìb—ÕzÑ<=\$Û…ª­–0Â';B-†sT”—i“NgA†–å¬Â·I‚Q«¦ ôÝG éµçêÕÝøÐHÑVp; íDŦB¹%¤Î=x¡øç‘=*x Ì]…?e+ʃ{¹·CÜ:dmdH§öDˆGF›[}•5\9r˜ý£3NïrS©©FdH¸¢tF@ ÉèQ:Z`< Ò£Þ3j¨ò=¡PÐÁÍ ¬GÐ{ÅßI((Ži—rHÊŠž9i±2¢r.­Ôar›S#ü©÷ÝK$›­µ“ Ý6ˆD©Nó÷SÔ½cí¼:i>´ØÓbÛö “5²DˆÐO ÑðFžÛiŽ7˜¿eÛïà ¼u)ý*p/4¾f´}%”Ô"ÐÉý>¥¼çÔ)­.6$’Z£âÝÜÞ|„ØI° U¥SǬí[“C·¶ö·WØƒÜ r«Ès /„û5œ½†æª£¸OÏ€­ÀÚ]¸È¸¸{¸q±FJu‹ÄÍciD¤wh3¦aaŸZµ/Y![À»Ø‡Â8¢ã Æ_qñ¯¸è !¶­nØžƒ¥1¾"(ç{ .Á@N„ö5R¯Á©F …òh§ÓØ(®@zŒ`óN•RhqÔoa¥VÉÕ<2[æÔqeuÀ¤ƒØ’r×´Þ½:Çè'†(ÈE‘ –ã½.r«£:õ¸q8§Q=kÒ;R!$t†"x`³ÖÐç8ïR‚1B4OÉd¯™ ÌyØlìb+s7Š»ñè3àVg ·Ê¸Ö¨êÙ:õTµåR`@ ĥ΃ñ]ú ‰ÿ$OQ0Ô_¹“Ó‰V¯ôõÚ„†ðBÛóÎàÆ>ýšÔuYh‡{„˽Üq¾|›£¿¹qÂí Ü Èka|©È]ÈÚ©˜ 'ÅŸ„!Y/Z:ˆMPŽ=°g•\w‰A팭‘ªXæUÈZÓLŽGÛƒ~T=÷ç[ïùqH7ž4Ü‹ÝÐO¤ ãÍ$#èX@Ú¸w Û¬œ×*¹Îb3_¸ñ €Mi1§u„ô¸„Ê*\"a/”ÞSS£ ήþµ˜ÛÜÊJ`­¹c˜à;k¨†½ÕÐÂÜŽØ=• È^n òL¸¬`T I¯©ñ4@?È䈤Ú>r RSÖ”Ê91ç;úîé/5{ ˆb’8žSÕFI'A7f™ø!Øyôt@Ïpï€3{Ï^ ㇊{zà –¥Gœ4¤¦As×Tí¢ZúªoÉ8ÄîÌB;ñب9ç07™±ºwxHû£kšùfYÓ6tÈv™}C¬üfdû÷c>ŸKÀè'G.Ã2mõË(±ãÍWÜÚ™&&´©z¡åÒ·iG¡ÎÁ¼.fUµ)1ª ASusÝQC¶€0y6sc¬Ýh­¢·.‚Z‘¤¤÷ {Åí•ËVc¦’½E´ÔáË?!¡Æä˜}# K[#Rmɰ,5Ad[ó³z,žóÊ jšc1‘w ÞG [Ð=èt|çqŽ;8¯BÖÅñç㈞øÔ6wÂå}ŽÜ ByD²¾ÆôV»¹ŠPV¯!9ÉÉÑKKÓÖ¹¨dkô|çhoTmo³×€QÕ嘵À6Qes@tsHÓam,Œô°n­¹þ‹£ŽÐO —ÁLî;Z27ÖlTs2D±7êüóµ1© ¼Â&I56ÞD¥  I{ƒ’ +½’œë¼ m/o å§æ¶eHýjœ¿¸P/÷G§¥Ï¾´uëøl%Á8 ©‘3Á±F¬ä¡h­º¹Uòþ%ÕL¬® ¢®Ú¯äçú4–ØàÐ&ÂrEHµ{†ŽÏÑó-úÚñúÕß²?`û‘pú[ÇúNX)=âøfE½äÄòûDˆÐO ArV[êQ;÷¯¬\X§]çÙBB{+ä{X(ÀIjÚ¾Úö ^ug ‰$òZJ!á|—¨¤×R¤þZšóºÑØ? Vm6À8gZ|Óòòl-Ž5p2JX²mQÛÉʰ·¿Lnßö•=BÚ»iî°É)Ö˜m3iïâ$±Â¥mï× üÝ€ü?[¾ôßÅ—ÿ-{ù× î8ù'°ËÉîØÿm„¶C$îO‚4°.‚Y*{Ï1›>ÂYfÕó5‹£äö˜¦×O³.@W§„$H÷á=i› ²DˆÐ3ñGôGüÎïü—Ë…wß}—ŸÿùŸ+\ªÜ^_ãÍo5VÎÔÿÀؽÚÍLN_k:âŽX«”²UÉe¹T¾³I»êÝ„Î@J³06Gzª$PK†q5kAÓôF¹ˆÆ²¬çàpØväÚ”k‡Ïo¹»QfÛ)µ)+87`Žª1«çcÛnÅ™ÐpþE‘ÔàÐIcìpá$±]ªiß |4 ï¯à¯Ö¼ó77|÷iÅçÝ3žÉž­¼ÃÀßàø7Þ#ã9™ÄÇMÔF€*¥¨„ó•Ó CCNbß ¬zNç[Ë´ª ÕÿÕxÒ­bžmÛ™²aË£Þp{½Êº­­¡ª] £øÒM¥–¤¼BçX=_ùÊWøÊW¾ÀW¿úÕ èt¿©õ,±«¨tß­œf0'ºøwg8G´õ‘à +£ñ¥E« W=%$[`[Hgù¯E5¯4–]FU=h§©_“Ô„dyÌô½ŠÆ…UƶðϹ¯š›oO/¦«Æ&/Ïñ¡R>ˆKØÙzùÃñ!]º+ËùrõNWÒò&PÞš2µ6‡ñžÍõ ¶÷” Öæ7÷¢;G>½"ÎAš¾šV¨Úà¨!=-(\t‰ÐWâW~åWØn·üÌÏüL^6_òÑŸýÏp„íþ‹ì·ï»ƒÀ¿•3PÖRw’¾xBìÖ®¸åɲŽbrQA§fDSÓ¢9šœÕ!¦àP³7M ëÜ[†ím$Üœ}8—!45Å@ æ©® ûbüà×ÇB³Qr~:çheœm¦DoYb÷drPä@huðÞÁ½æÞp䥢/ø†•g'øŒ8^¨çF|¬²¿fÃ…AÎÁX‘î#¤Sç¿gDJç¿óVMk;Tª¹QÓUš]9&ùXµƒÎÍQ–êÐO×§0¶âkjº­%ØBzÞ¿ÿ3¾uü·áyzyÙÛOd,€ž‰ßþíßæ7~ã7øêW¿ÊOÿôOók¿ök¬·/øì} ¶·`®Y"€}‹s;H[Â|RZ̽¡¥Ñ³8 ˜ã|ÞP)©wq>Ã:)ëüwš{,ÖFs ÛÙRut«ÖÄüO³´þl9&ÎRž’±q‘è3kha.7 þîAàAñ÷‚¾vÈk,(¼Tøä%ìð)^hèìw‡šr…‘GœŒQï8Ö8Y#ýI¦®Q"¤«îÅzû×QÕ•ïÜX"6•δíœÎyU)¥ò;¾fûÌß2½uÊÌJÚ,·™ïìÞc¿{“À7¾ý¿¼Áö|2bôL|ík_ãk_ûZwMçϽzÄ7ÇÁ5jq¢ §€¶õjýoÒI/Ëæž¤Õͨèlq¤ ’ú RÁ“¨y^̼w-œm/Ú}¢—Ðêu½éÈÚýïM—¿S éQr{©b£Uœ4€ùÀ=€í6É=¡“ß×.ô‚óx = „ç8ßàÙ©Æ›FdÏÀsgRL¡7œÔeÙ‘uPÑœ)]’¥­Z¼ÕG-þµug©§í¹QÎ:s|$Ϊçù°YC_Q[Pgõ¬u]O¨³³8%@?1l’ÿ,‰Ìq¥´S­'*Pk£[&3-ÞÌÍ:y¶pnÿÖ:$¾Ï)h3½j—•±'ðØîZKŠ“­·*:TÜžngø«òÀšªfÕ²¿©Z7 !í1WÁ'gjøœ>§¸“ôP x¯pþµ ]•Å.ËÖGáV…gây¦Î{<)™t;ÖÜìŒ3NR·e÷p t:p"”J¤ÌŽªâsç ³WZsÛ¼g¢µ1—±‘ÔCekÔ?÷fž¯6s&cGË'ºyÑ 'ëc.z©¨RÇè'FêcÕUÓ¼: É šsMöe¢š{ ZÊM:÷¹t£:W¹$RuuE¯Vö0§é „:pN)Mv¶<ü䕇Éì_¥n™Â|•V—Ú2­ †¶º‰ÍÁ >*iM6G‚ôC€´¾vèëЇänž† ]–mµtY–öa=¡÷õ3©Öc´Äîʨs_’I3ŠzD2ûo+¡Lªv[£ê{2ÂyRh¾Þ†Ó²VËöM*‚Yzƒ2…µ–é%B,€þáÌ´õŸm&[';9§áµ/öLæ¥|á£ÐêyÏÖ—ŒË m!a‘úy^¬’ŽËu°¦ƒxÝ{žÛª0ô¶¿}+¨‡RcÐÕÓ*ˆ—Üh•µ9r»'£àOdPûc„ô!úèAØ\·77šú“ô¡ÉTèðˆØ!ìÉ‚ Ҧ˲ÐEYô’S¯1¦†$èÒ“Ê!öØX›££š+87YþþüSkgYõ‡³Ñµ9ÔÀ9ÃZ³¥akß/Yu,€~b¤["œí=!äžž¯Ù+h¦ŸöF½¦œ;j;epL<-‡Î™ü* f:¼ek¾áì«nšÎ,V¯ºVÈsû Øììøí¥4Z•üçØ”geuœÁ%PÇ^Ù5jl…n•['ÜèÀzöà¼Sdž¢ KòÛa‹°N9cÃ¥Ê7/’دd€u|ŠÐXÒb':jz¢ší5"T…o¬–ÛµŸ~A d;ݬ…®Å1VߺÄè'FPÀá/$ h׃Q¸÷R[E-Z1ã™_í´ȵy°N ˆ)ÎYÔ%𭽑Z í/”x-¯¤3Ò§´3wMA÷æ-œËúÒœ¨…3z¶½Û«#œ$¶Õ SñÜö"<”[7êB£}[BÿŠk”•š¶òb3©°Í*ÎQ% #÷ã©& ÔUóAL¼^ž|°ñœ{¶—Lþ’öŒ´8í-»¦®ëÅ-Ò'ƒ”é‰!SH/ ºÄè¹mÓE“Fæ²82Ïâ\CêÉ º3\kx][i_yÐy£šeR+keû¹úlUŸÎl½Ýÿ’vÞªí IDATö&6âB«tͲ£õg±7âtÞnyÝÒbs­ 'ïõ_˜Š8µ=€ÆÊ)&‹cêCKl4_³]Úç ôx╺[Ü+ì=ìD" µ´…4©“±0WÇ®×®{¼±o\ù ¥õ.ÃÜ\Yõ50QËiž²¾½lº¸³gÌÇ\û”&ùìöIõɹ_¨à ]Oºêie!tŽÐO !°«º?âušìœÅÑrJuÌv®QGW‡ø l­‚VAWþsØ¡Ò ÄÎj½™¸Áå6í¿w¶ŠRÇí1@·0¶Àª ˆ x1M¾jév,µ\WPcÔ´a+Â~ªy¯°Øi¶>t]Ú‘Š…„ÕyK{XjùI†têTÁ¶Ça@›Ôu^cuA´r©¡== ÍÌ5#)äÎÐ]ÞD£|»p6Ê9;ðÆêˆË, ÚÄèù¾j†ÔÜòD B *5·™˜ï4ßß½Ó¡Û*Y£˜ ƒ‚ÖzƒºÚSÎb¬î0Ÿ„Z²8Ô²…Rq³Ÿ" j »½<ë;§FY[`y pÎ'ĪީÁüÔן¶ Ž½c§ù•ÂÞEå,íÒÊêÚ(è´õá\6¢ªçS5Û¦×A£¨í²;*s"ªhžúY!Ï ¡©yÆÆ×p‹Ö™:öWhæ•Z9·¹Ð£Jiz!tŽÐO ÁeÕCu_2ç’É`[šl/î+¿ZíÓáj:^\Ÿjдþó,œ)2Ñn¼«nÝøýf3­‚n÷S¬.Î’½;Lr?t¨–ÿYJ6©?ÈJÊ0¯ž€íÃg 퉂öD[£´-,LŠ:vä*v®xÍ;…‚¢l=EAcšÈVÉû9µŠ³½JæŽ@R×óWd%-ÌJTs¼¯a±¶'"˜{–…µ7*Òdjœì´·P?gæ4{[)¥Íâ¸èã{üIŠÐOŒ¬‚;÷–sæÕWª[²¨)vÎÕÙjê7€t›í,¤ÕlDgëKW<ѼCšÅ[ÿ=[L;3[÷G¿zKèXâd;e%æD÷`­VM_€QX leçÉ~sN«“½QlŽéäA‹Æž_2¨{§ñ¬=Èí:팯…ý\‚rZ~£îQìA›N¿ÑºÔÑ‚t•´Ý²ÖæhtJ¯KÓ‹ÅQbôSCÃz÷ÜœÝÙu.Àü5Ý+}NM?¢Ô,°ç ÜZ“¯¨—_ƒsØ<íniÍü¶°uã7O=T¼IYÖêÀ‹±7´õÎÃÖEÕ,¡@°µ6¶ÑÚh=褠CÝÉW1YX5ù&ç«w~SÌAº>ªvނتãtÓÃÁzËW < kE4½ë™Žµut±;¤(h]²8ÚXýÄH p’8aE*'JZC¸wk¾Ù¯_»© ˜mó“VÚwŸÚ@<}Ný™®ÛŒ¹IevK‹6îxÌO[½ŽªÖÚÞ°cŸì ïkÍÖÇZн±U‰ÙZAz“‡äAP;ÉÄ7ξrœ æM"mQÐ6íNm@Ôó m¾³†œç­—ªö`ëA¯œŽhN™QÑ(¹gá|¨…Ž_ïÀV_Úôàl¿ß·§Å\i¹DÐ µŠN :YI©å½öA4"êq©áØ ÌZMY8WÖÒXPÏað,‘bô#e¬MíÈmE÷`üX&ùæ—§ŸÊ¯Å­çܶ}rTéu\‘÷>¬¢k÷£ÞR­S ±5 §žÚÅ{Q¯’XÌê¹µñ©·®y'2…4Æöh@ =è%ZÓZSõ2o±ÔòN``ÜQÛw–ÚÖ°fÊØž¢êéšàLQÏyœ€ŽÐ5z­¢'cJÃõ6÷öºÁí $÷ó{A–BB  Ÿ=Z€ÌÈ1¼« Í”sÌf/Ì}qZ&ßÐl‡}btÕ4LRQfá,½­jƱ¤_ìOÌ7BÚ‡´ÑáI žUÙnvÞÂ:®]¬ÆíµÄ ŽjÚheãCºÝ E²Ö :yѨ³š6°V­A܃²4ó^Šö1î§Ëªõv™„}P«¢%Â9ªè ÈR¶šzˆ‰&$8W6¤­à,’\ìhwHõˆÎvþòIŒÐO$P ;RãdsNAksôàœ¿»ý±Y]j§g†ôÚÚ©¤r}ãfÀ,P”Ñô.ê)纡Ðô“×]þrú˜s 1Å.úÏ6EWc]âfêÂB/ì\RÎ&s#;ªf‚jÎŠÚ  ™6µ_¬s®Åe¥Îò° žväž™V{¾Í,}®…ódΜVóéX*…ÆVÏq¼* ºyˆh¼Z& ÚX Ê£Ä1rM©|âbô#ˆO0éÊÆÐŽj¾Â½»=ü1ù´¶^s+‡“ž¯âx]QWƒUnõÖL·0¹ÅÓQçtý‰©‚®Rßâ:7Zµ‚õÊE+켄ÂÀ4/FU#¥ ÐÃ&B}­žÜò?̹iѨ2%v-®•ÝaüñÔ0öf:-÷L”tØóúhëôº(T#XÍS̸|¦ïɉî5 •Rp[¦T‡|¦m/:=HÇbEêGX„µÆ÷Ó„ï  Ÿ‰e•` ®4½úPM§s×f…’“¦¯@g;Pž³- O¡z‹ê­³5çÀœ¦m–Fïé{ëÓ²ŽHlìŽ lê•í@©Ê-Aï’µAZF˜6j:ÁY|jùÿŒfmZaŠ`n´!%ÍXÒ;ÎÛ‚Æ Þ05gÍC³ªúí(p¶O°ŠÆ5œ3 ít9«š‡iM½Ú„+>Øá“õ¶Õ*:Ví©ŽPx¤…±J·¢À'4@?5¤ÓI›ø×yW ç1?ÂÜt ëùqœ+$‹£å‰­fŸ¤¿¡UÔÊz·vy]餯¤ ¨µÙßV=ÇÍÈ6ë’zv{c¯ZÔ²ÄvŸUØQƒ:×.DبÇù ¸Ø‹=§(3jš¨¦%"(5PÑÔsiëÝôTtÎ)ßy2¶lÈóÁ2¤6ð.¿h­Å~Rcy”†a ÒÃ×õ¨¯ °› ]Éã©zn!<»¡2ÝèΖ=êéq± õ™ü`²}"\iüÉ6="‘=é«6«R8x# ÊùFà¸A¸AÙâYéÜ Îh³È1(ée‰ivó¢Så=#2z ŽÌØ4<$âcëp½ÂÁ¹»Î3……vºRÏ Ôæl¨('@kš¿ ¬ãt<#^ÇgŸ5µj©ˆâØ1 чN¦ÈT=ŸÎNЭÂÖ!)ÇqQÐ9@?1æKJM.wØ ô–KOŸöð×[ßsºmÇžßð1ä|åõ­™ìa®ï7÷÷6ÌÇê¸ÝЦa<1iÕ*ÑvZì ÏD¸E¹n$(çèð€p@5ZzIöÆ9ú—ÇÊ*bjæ‚A«˜£jNöV=7Þóeq4 ˳R«è¶ ÃÖđۀΟ•š=1⣞@ÆÕ1ãÚÇó:è*Ûdíà|B8"%ªçØ•î¨iúÒý$Ç?Z@G~÷w—?üÃ?äîîŽïû¾ïã§~ê§øÂ¾ð÷þî\è6ë"´,|Œ= ñÓöS¢> ¹6Mò iÀ|mÛBÃéF¾Iq^ ærL¦MŠö²7JYe*„LŽ'¡£lg@V”VLC dv«P8x£pãáÖ+7#hWœ^£sãæëñ›¶¿a)ܦ˜ u¢¨ ¤M3£eož£žñœ¹02âUxÆ*žmOHB< < œÖ½àv€[Ð[[‰ zn>yñº¼ô‹_ü"ðÀ/þâ/þû^‰¶F’½ÑwmA×t3nêûÃÎí†93mƒ¤Þ0i†v¹ë|Æ™qý¯þdúWk8íÌû0 Š[ n-¸5 ›8laµ…õVXo„íZØoàÙ^¬„+¸Yqà /Á½DäÈ+p¯wrò:A]#÷ˆÜƒ˜BÄh…@TÚyl† ÷TÀØæH?6äJÑùk뚊2UŽvxPÒpB‰… Ä<ï8V(Á›WîQ^‡A_£Üáy…ç%ÊGx>Âó!£~È…€W¬ô„Ó^Oœõ㞸— ãÍ}~A_Œð|„ç}æá™†…Kÿˆ4ÀOþäOòõ¯o~ó›ÿÁ¾3+è¢=ݨ\™¦™ž_Óüu¯î¹]—´]õÿ³÷.¡ÖmgÝçïs®µöÞïå¼ç¢11—Š&±ù¨F‰`KD„êˆpìĆЂ/ر©¢¼4±#"¥ ±ŸI˜FuôƒO,£†ÔÑs99ç=ïeï½.s<Õ·gŒ9æÚ{µsÎ/ó—5÷Zóú›ÿùÏxÆ&¹Ö?³t<–·ªûS é©2iþå6‚£go„L„Œ·’ œ'p¸ƒàöAËÖî©ð`‚œr±ß!õ)~ìÇ~ŒŸø‰Ÿàçþçù—ù>øÁ–ôè;¼›s|‘{KŸ_s>TLiGAÏj16 }P‚Úv~KpîÚÅ­¬»íïýÌÞ¨!íb¡ v‡ÛÃ9Œ÷„³{0nßvyÍøôßÐékpxŒ¸hmÈuæäC=˜üY1ÍD׳1ZEœ*Y™ïLW*Ù›uÚ±ý»RJ^[zB ó¬¶s£—¯#“®Ùé=öúuöú>ž½üˆýGà>äà•Npo ‘kEÖΫÎf¼KË;Ð?ó3?ÃüÁð÷ÿ÷xïyôè?ýÓ?}+8|å+_á‡ø‡øÐ‡>Ä¿þë¿òÁ~yôùoÿLxÓ„x¿*nX>+ªù{ÃpˆcßÌ/ ³Žð#ìðCŒc÷†1Mõ¼s³-¿Íæûàr®ú çÛ!vÚ•e✻-#ÈjÂ+îg|ib|ù÷ßxÿÚk Až*½B|ssÎÑVÀż”ÛÐ$NçžÍ¼jHbQAÔ )÷ÆmÀlû3<¶®`¶Ç.³' õL±AʇöQZ:¼د¿ÌáÅñßõÝèw}^ñðPCìcê¡w¥!¼nŒžS å è÷¿ÿý|ò“Ÿ|Ûÿ|€×^{üÁäµ×^ãø×òUþá_þOàÀË}‘W>ö(¿÷tн¶—–ÏŠx‘*Ö KëlÂ$0­à°"È“M·ÓÇ>KÓ+Z$·ûq“T ÙÒæ¬A6 ½Íé æïÔ…fÊ„{<;¼\sà)‡û_ãÙ£K·§èן£¯áÙ®vp½ƒíö{Ø`·½}ÐMæá;íãCUÓt‚ñ s¸æ³´ŒÞ|3Ýv6k¿æ{fŸwÎÜ¢€V3 +%-]Ë[Ù(îBY}›2¾ï›¸GßB<ƒûÿ œ¿›‡°¹€Õ9‡¯¾Žÿê7`ñ—ou6äÝYÞ±€øýßÿ}>ûÙÏ "|úÓŸ¾õß¾úê«üÜÏýý×Í£G‚½l^8çcÿÇ#‘0„(¥ÖR-ŒzËnµnYú2+ÀzoÜUë´<ÐÙkñ|ºéÒnÄö—¤ùEóÓ)É~˵vRrnlKÁ¨¶t8âq·x½f’Kú”kyƒÌ7×ÊûÞ¿eØàÞ„¾åṇK…ë8d1­a8¤1¦^PËÐkÒf í9Õá×ã­=¨›Ž’¸wR–Ææ`‹Hhˆ}««²Ã1?äFC£ £"pgÂpÖ/Áê=°ºî»7y²ùg¦Õ†g0¼òä«]Àw† »¿þ§Ê;Ð÷wÇg>ó™·õ·üùŸÿùly@õñýÒËoXÔ÷Wûó…ÍôâÐÜô^Ì+õ][ªõ%RmÎM暴Qi“Ì_˜ÍO  "!Rôúµi9(îºEå¸âÀ%ªÏPy̤ßbÏ–Ç(÷6½²‡á› }êá™G¯,¤¨µr="¤Ó¸‚5¦± Öö ©ÝórGç”t Í ÓÇÆùÔµž†9Èq,ñ!ÚVT ¨šenj¹ çÂxOñ/ú èCADy¼1¼ÉåjÈ3ìsžÈ5È9!cÒn¾ïÒòŽô÷~ï÷ò¹Ï}އ""ÿ¡&Þ¶´º¸¤1ï!o¾¼|OÏpx›óõ«ùÅ–‡¼1KwüñMi­âS´Ö¾u‹ù^AsVL‰urón7áØãÙ"­òå)^Ÿrà[&ž¢¯Þˆt~Zz§¨{䘃9'×Úkv„®Ïbå_:ÎÌ‚ŽC#¤cŽÛ{áU¸r¦‚_ÃA5G®ÒjW²g;\¢nn a—é÷™8•PÞ±€þä'?Éÿøÿ§o€M¸CRžÛTI˜–ÜÖñea¬˜Û,ݤy%©çUš›8ÎÛ¹Üsóm¶ªCÌjch–•ù¥ÍðùV¼÷Âp%År%õœ_ÃÃö§+ä–…mÂü‰-W(›褢™ÐÑsvîqnçÑêA °Óôa;DX΃5>?D0Ûpêd4aÔ³JDwói™],Ý“‘7êY„nöBÓÉA†u‚s̱]¥sM™£µÁa¸¸§È}8œÃÁá;NC‡ÝkB§)gvrº5âVàbœ½“hsœ ¼ƒý?ð!±þAI¹Rgò É)’Ãâ¯w¿Ñ™® ¿,þxóǪâk €žÒ–ô”ôm* [É™ó_ÎÔsþE•„¾ù‰ê`›%@ÙÇq´õåšU®Hé}Â@ê¶iðœyI>h IQÀΚ“|Äå{³N9ÓØ€S ¨Žê¸×¦ˆŽ1ÄYÅz½ÒtÆmiCä„FWÁ¹—  –°¿)BcM¶ÆJ`¥Ðn~!’íßüø14–÷ެ ¤7qX‹gë®ñÝX -'Ê;Ð?ôC?ô_ò½s‹£³»%ò:CSÏÞ» Ûé%ΦT×MÔ³t úË–À<›WêJÂ.œç¿“c¢ñHl¥'™vIU«ùå-×õRú(ƒ†¿“Gc³öŒ¦5zðÀÎɺ,˜#…,pÍx"|>ÅuòiÐ0N;-é -Ÿ%@‹9jV=·Ê9w¦µ‚61æ¹±UQÎn~%ÈZœ×!jß îLáä¦ L"ÙÉÁ<FBÇÝ Ò{ÙáÝÜ q14ädqäòŽôei«ý|TeKõÇî³öKË’MÍJ³/ÓùòŠŠKQK`†A{ÇâæçF÷¸ÜðÄšYж1ÓéZ{‡heÔpžB^¶ì3Êgk ÎQaC4Á×ÀZ3ŒÍr¡¬ÛM¯6êÕ¨h3¤¦Þw…³9FÕ´³ˆÄ¨CLU´m4Hôã‰=Ô ä¸5°|‚ôY€´ÆîÒý9ø1Ö…šíNÏüU:ò^‰gç¶EEËxRЦœ}Ç cQ“ì:Šc P ÇÀ½øÃ7‘p‘¹D7mÙÑ­j6ð.›3;bKŽKä™v~/Cú†LzQà +|4ÁæH‰ÿ%Á9ž=ÏÙ¨ŒgeÃT¼m˜V ÝŒ);a[æÙ£”Ô³èÜêPÊ8íVþS힇öøÔê9 2³µeHâ5QÔ@:õP“šÚ»5p&øM€´ž‡3Á¯À‹–7%-/é«“Š^ ¬EØË>ô\ãV ×qÇON€~Eó¿=·UгûŽå{®¬ÕùƒöKºü•6ÑѨ̣•–°&LËvížï<tççá\Žã‚²å[¦ èÅiè•%äa‹ \-¤=«³æ‘k!\l«ÖÍQ°PN“Ôs²9 |–=é¸óí8àîq1ToÊÎâb2£dϤ·è;“:ÞÍ$š¹±ô,Ä?ëYX®+˜´Øj¶²‚´H¯FQö¹×™ÕIA›rôK¸%çPH·s…>Gtôðg¿»ûÙ±?ì~±!f³[¢øÂ íÜîØô6aɇî*盞Ý_´iµº"l™¢÷œ“af%þ"f®«”tÙØ¥3zÛh÷º¦!AÛ€Õ7ãcL[$þg¡lU´ £ •?]b’#j™»ÒlodHoÂàÎ@Ϥ}Lt5 U.(»›égóOH$t¿…ìbå©À Ðw.ªjrq”8ÅAÛ{iIE3[Ömˆ{ÆÜvP*?aæ-ÜØj°v_¼™î Õ/ÎЯ¯l÷·Ùyí¬P¶©ä)¾VŸíÛ·a€³UÒ’7$(éqcàœ¬¢&•hç6­§¡”Î’æ7G1Áz ΉãmÓmµ1 °sŒ³ VA§ Ï!$;ÂxÎ¢Š¬ ͹MÃݤy L£V!Þy{©ER4G~ìE9ZžÊ Ðo£­lñ£UüÀ-uêÍiº7|Q¿”Ívýév+u>y«MÊ0›ª›H ¨Èç„ò’A}Å!ÃyÀãÔ@:Ã9‹T‰¨ÒÚsœÖœVÔ mêPpN:{{E`1Ó=Øm¥`öž[k£QÎN‘!VF0ç81#UͲ’6%Ô7C÷ÞÅ£æÙ£õóÂ>‚Š– ëCîréÀ¼ûÊ Ðw,0ó;Gèµ/lÝg½ïÏK+ÞŠ„æ_lIØ1îv§Ëk,…ãP›ÍT»/ÕAj™%fœúÏ ãÖæHpN6G¨4Ô ê<ŽvÇò<[8Ïr9·à œÓxhv¤UÖv¶×’0ä–„‰†V¾&PÒI=‘š+…Ué dÉ–5è 4åðÍe7HµÒÙŒ,BQÓN<^p²8r9úÎÅæÞ°€>ôM¢ð¸`lnÐÞtOIÙ/îÂÎlUÕUSo‹L¥×QCxvXf›³¤É«Mj;)©À¼°¿FSAÙÂÙv|꘮ ”«±?Ú¨éäO‹(›QqëøóQ9(ëEPã5©×”Ûîdj°’XÚå…CoC€µÓù¸s±Ò£Æ»2-­ÿããdºŠ ^Á»F¨Ù45‡PEóY»cØq8²£ï¾rôK¸gúØ©y£‹l—µßßýÑΊÙÓ<ö4ð€—fA"àÛñ¡çÛ9[[—7%ï{û³=8÷6é9c^ïk8—ž¨Um§¦Ž-;ÓµgÐò©àkU­Z+l§¬WÞFrÒ~­SަùØì[-¬-ëåÛhl2qY§…tå=7•‚Ž9œc+Á…¼ºÙ:³aK˜AÝ>,¹“Óräé~³UÑÈE='P[@—†*ƒjWMgÕ\¡=~æ”ÕÊBYƒÚ´µ4B™tÖ EA+N§¾Ó§V5”&â#Ê>ŽÝ 1W²6Yí¨½åVg›åK÷ M­ž-9Ýñ!%]òûÊç½Þ‰´©õŸKù)1p&6X9Y¹œ}çÒ÷ !5õžGrt´iç[ ¸?¬W\fOWÓm Ö=ÅŒVË%I¹%˜¨v7µzX xko´VÇÔßDÛ¸¥­$Lþ²Ø ›Ù=΃DZå0kYX)gæçC`Ø&8k[z«ó%jŽçÒ¸- ìêÔl¯¤¡QÍYÊpW~5µ2«Ý+ߟtÞ…²ÍsdîA`ܪéžK9úŽ¥¨ßúNj=hµ`…à´þ`ýãõòîM¯3õÙ•¬3 Z2–­× Þ¦–½÷,i>Zz~ø˜—ÔrgsU“j6Öä=[=«â c^4µÔtê}%V(ëé eÔiìÌVSev¤š×¦NAh€}Sé(ê4¯9´¯sJQ XÛ!FŒ”Ý0þsgÓæ´µ:N•„¥œ}ÇSßq¶ãØV¦õo#|+¨i©#ZTT·RÏ,z º¨¦!Íæ.¦‚‚No˽´´oÕ¯,ÁÙŠùæé6{ p­½QC:U}j•´ãš}ãA·pVvÎ%+h/Šë…ÅU;-͹êúÀ&*ë›JoCE±È.ªë689-ËnÆ6t/V2ê•ËQf›ÐlÎ :Tžð\Ê Ðo£‹¢¦dÂó‚¥jîÇ9¬ÛoÃN·¼ »Š­§š %{±m-¼8è"´ÛÛÝåÆ0»þsCç€VA¥XuÅ`ts]åWnMö†Ÿ!}…²Öébq¤.ié?¥Ò1÷q‡=Ô³}’¼oyÞ>Ñ9®ò–ºòИq:IØÆþPëIÏ¥îØùï’r®÷¿=}8KU7ÙFtœ¢8J9úŽ¥äƒ†š~уÖfºÖÞ½ÃöG)7ý0îIØÖô]PÎ3 /©hWAz¶­‹›ó'@ߤ¢›gIè ©(œ[dÅܱ¬¨¦ƒŠöÞGBšÑ5Î{çr>µ´Çè©äIlŸ¶±Õ¡{[Ÿ¨AmÏñR¹U”ƒ@«–ãâ Ø ˜Õ¨é\ùXE‡´o v&=-l”ºâldëãë Ö夡M9úm”›?‚÷aÒ=Ákÿ×ùi- ðí ³¿oª‰«!­f¾Ø:»_Û4ÇÝÍê?èJA›¼ÆK›’¿É5¨}ÈôžÀW­ÿ\Á9ƒ9µÿ³ªyê&‚zƒg‹g¼èØh%Yg [ÕÀW…ƒšsœ¡ ²×â"{ 4ßIµì)ðÎ/2ÂQï¹U¼é¸§Ó/­—¿ãkqO=WÛ f¾{Õ.|ݲµÑFq '|ít·täî ¾G¦{ãÆgn¿zièEr´*ú„èRN€¾cIÌ(ó…„Ð¥!ÃÒËñÐÝÂÞ|Zƒ«^2è¬2n|h]øLM•§ÖÊZ¶%δ`®8Ü[xÃ>ØüNö¹¢!­ÖÎFE$KÃku€öÏÕ3<;&¶<Ó=ƒÝïm|PÐçvÀÎZa2p–-ȵ"×ÀVÂøZ¤£Å¡J=Û‹ÀÀYâ´•žÖŽèÁ¹:n·´@ÚÒÒö†?;Æ÷þPÔôRóïŸK9úmßÌÛû Ÿ½éV=ÓÎg8ëV39* ËÓ2£Ò* jÔ±™×J9›õ*eíq8D¥RÒvgz›[žêï½^4_ÒµÆ5¥í5NIžðZŸ>F4{öx ce‡êŽ?pé÷¬=l|PÐ×mŽè´Óµà®A®A®Âà®Á_)îZàšhy ¥Ø¸èŽr®*ìÒGU€°”õz†#Š:þý€¥³ìØòùVÝåÒ.¦nUxRÐu9úŽ%Ó…)m> €žLÈë’’ž«éöÊïeûÌ9Z€Z™N€Ž žU ö l-Žz½Ñq¦œKËGûÈê»MM[C·.„[ 7ŸixÁé´ôâd@v¥'ê=1ü··ñ{´ý˜ï£¯wEG« ‹jÖø0J@NU¹žÐà(Í¥æðê'˜&öþÀsÅjòl<\x¸ò°SÍœ®…Ã%ÈspÏ€g Ï.Á]^ƒF{C÷ÑÚh}g[– Ûê圞¹Ù“î¨iÌüB¹•bmVÁØâåÿÛØÇ,×û±wq9ºSþýßÿ_ûµ_c³ÙpyyÉÿñ³Z­òç½ÆeIt2 nVÐå‚û¥Àg_ëgJ¬gÌ mAÝsp—åÖþhs8¥êj5©9VÕ¯¹Æƒ®à\ÔùtÇÑ TF‚×<Æ#¿ŠÊ9!¹N`•:ªrÄâ'Ïõäy2]±™àÂ+¢Õqˆ'jºRä)¸·ž†g —ÁÚèNCÇЀ%ž7ÕØŒ»ç Dy)67sؤœ ¤EšÊCfêYZ_ºz@Ü Š¶½ŸÝôv>¹Ÿæc^QxŠâ¨Ë ÐòÞ÷¾—?ù“?à—ù—ùâ¿È÷}ß÷‰ ’§S±ÓÁáìzçTÌ…YDÊÛŠ¥YRÔ7ç ÒJÉqDA8+‡ÖZÖÔ‘“Ÿu4fSÝΤ”8î|ŽÌ÷Ô´ BQ/0¤LΪ ÒëŒfëÿ‡Ã'!TÑÇÁ}òáP®žÇÓ5ç<ôʵ•„ž€¾) },ŒOƒšæJ‘­àw 9r#l«¤–‚i;`®¥e„¬­=³p¶±Ñž#×Ì.êUZe~¬´*¾óW=0Ïw±öÜú8!:•w= ¿üå/ó‰O|¢Zö“?ù“|üãçoÿöoyòäI†36¤KK«qXãP©èƇÖyÏ*áëš‹2½WͶ…ªaÃ,Ù0›Á8k;]”sr§io—M8F\¬(,V‡f°Z8çã!%"ÅtKÆŽºÍ‘¬K¶2è˜@]èL/„ØÙ¤°M¬í+ƒyȃú¦&aš”g{χ-&¸ô1£Ýµ°ÿø×ý–ÀcEž \DkC÷éP): â›Y„2uO'¹WÖrÄòt‚´±:ÄKcÔJºRã7©èö$¤u”*,zÉÊhw±§¦SN»üTBy×úÃþ0ŸùÌgfËÿê¯þŠO}êSüÑýQµ|z²åÍÏüÊŽ³\°ùè¨ÅÝA½iÕ«¬«Š{[¢2Ép³žâM7µpîÁÚü@l_†žµÁ„êÐShRÑ{ÐtI›ÂÅéA×äž’(^RÐù1 é!—nÆõhókoÖ*G•J×<èö_Œô0=|‡} 1ÓøøêWà×à×è´‚ÃÀî ¼¹ûû-ß>…\‡7aûUXý» o(òDp—Š\ ~.ªô´Oã¶W«–‡`UˆÓY=Û£!ÆÞhoáÜ(g¤Þ†´é«k{¼™~œ ¤¥ÚÕV5?þ§+¾ùÏW€ýû${w—w= {åK_ú¯¾ú*¯¾ú*¿ð ¿À¯þê¯ò]ßõ]¸‡g<üïÿ+p‰r…r^“£ŠR„m çT1ØUϱd_ÏVZøX›#&ä‘ÛZªQA›­ÉÊù`eàzÍü.€š=ª±ÖK'F ¤Õ( Ž‚N­ƒÛ4±G®xRÑü™&`§ÒÚ©òt"&Ï/p6D,ŠÙT"†ÏºÝ€žžƒ^€?‡éÎaÆÕÖñí×yÏnËõ¶_ù²À×÷VˆÞð×Ìá¥CÃ9#õ™˜ž8q'P÷ÿg§©Ï¥U¼ù Åé)LK·´`^š¦lOýWßV]w,©›ÀÜ~VÁY ´_ùØ?vÁáÿû¿ÞäTB9ºS¾û»¿›×_}áSÁ ‡X†4ŸJRК½è”`§S7¿µ\Ì(P€\¦%¾Þ'm´ÎTfÉ Ýóž¤gj¢§›Àœ†ƒ +{”Ò²Pë¦íp É›×c!§¼Lt‹«§S{UZOkqغO: ÎS²>B¿ÜD@«®Ëˆ=èüÕ —0½€¡û‡<¾Üð•'¯ñͯ^óÒß òšc|,ø+ð“CYÅŠÊø0 ææd§’í«xð¼FØö€*åB™Êt~HOòUlüH·V‡·]N³.4¹“æp±Î2I ¨æÞú'z^N€¾c Q 6Aü܇VRƒâ:ûYÀj<ÑHû*(Ö¶° ž¥¯4ëØð­žÎ! ÌTÁ8€*9ZìH–@Pžl£ž3*ŒªYEgŽjyÖå¬A='°8r¤‚ Ìš ½$ÉòɈ»eÕôˆCÝXl \<©¥¡û[ëúò ¢~¡[˜>„n?Æ?þÛ—ùàgÿžþó3.Üï¼ fc1ãVŽúÑ œ+[ÌÀz)>ÚÚGTõ¬ÄèÿD8·Q§Ê Ðw.Ð¥åZRÒ©ÓÒpyí™báÚê°ˆHß—þâëj°Ni:æžÔdC3ã¶gensÆVjFåœA÷%MÇ|ËÎÔê“’^ƒ®uŘB4æ-!=öðÅ:: ŒÊ+QGA¢«¸^LfŸ¤%þP\®NP7 2P¹ÿ9ä0.S–y» ¶\îáÙÞÚ#ßœà++øâ=î½1²uÊ`ë\ƒ IDATV¾ƒµ|'#¯ãxŠãÇa‡°ÇÉ!Â:<ž„0ø2d—å"äS¨78d"VÆImkôTtzX/©è‡‚TÏp,—•ö<…t?´®WI(ͲÒÝÕ Ñ©œ}ÇR^›œS’žÖöð¹£Ñi[E—®w{Pr ï%ÂXâ·„e{ ÊÚÂ9)í¤¦g„8W-“r>DÕœ dh´/°ñÂEQ{F„#£C!«¤ %+胬Y ÄAWÖnE¶£Â(hTÓ¾±?ÒŸnã:÷5ÙÑ©Éa´™Æ?:ø8L°ó°UØ \ òÜ¡o È›ýÆ þM‘¯ ««*ðXßÁÈCF3ðáá1 öˆìÃ)IR¶¤ góV# ÖS˜ÂÃc û‘°ôàœ \¹è$ÞùÒ˜õË ×¹I9/ùÍ‚õ›çJúäA—rô‹à«þî†Î ½åPºJÒÚ‹Öümñ–pâ1½oì]Lô.Újt°AŒÍQ]7?¦P«¤°‡CQþÚT7wîfʇ‡Tî$J#÷ãQñùi“$$sÀÆ¡›gY»°líðk Jz ²RdÆ ¸“š¶Þ´åF gµŠYÇÊúd9ï$€y+p%ð\੃ÇÞ‘oßäÉÀêàAàJOxă\0ð„Až1p‰ã*B::À::%ŽiíòxBÌô ÐÀû0›Bò\<çC£ž­Ý‘\eZŽ)êc [ÚϱÐíÙKM»—Õô©G•ºœ}Ç:Øt–Ê>N§T—a§>÷Äa{ƒNîC¸ã…©à4xOHø¾“ßr/°s!qRÖqZÍýž=èIúpèfGø e­õÉž;PÅGËGX±bÔèÄÁÈMØ;TóF”Ïz¦°qȰ4+kÂ°Ò éäMÓSÑé??³þ{ú,~.ùB ;ëg¹rè3…§Š¼5 ·@ž «ýÀFÂìž‹ã9÷Ø0Ȇ³àIK€´c‹È5.%†– ¦”k`K‚uÕ/V³ O%I–Ç„‰£–p¾:6G¹–¡Ü™»Í‹£§’k…Ü*çJ=7ѧRÊ Ðw,tÊ2L{“(>ØÊV}Î#ºKªëñÍa±rÐe4v ¨¸÷Ie Û¨9±p®¼DŠÈÄ@WIu´|„³¯ØêÉÿr¢¡ò\XñU|d@‡ÏQKîGçç9wp®pîàô äÌÁè†éÁò$W&&%ž)ñÄ”qO1'xçãiRÏ×—.Až*úx òôYøl<(£„OÚ§K[8gÅÀšA6868ήpl”˜C ¨ë!)j[3Õ´s ‡X)¤Þ›7$ åVI[0ßhà(ŒiÖUb¨ÝàÜT*:³®k–J('@ß¹ÄxW&|îJi²‹‰àcªK]1éÈNwÁÞÐØD˜E$ámUBîµÆÄïÀVÑøê-;r]ÆÞ9Rø"¸4{ѳ.«›ÌD(0-ÚG8G©‡–óó'§abÒ‰ 6¬¢Šöÿ}‹°uÌ\ pOÑû ÷‹8œ z¦EIo€ÈŠÊâ Â9…âU÷reå˜Ác…µŽ¨‹C¹ôJàÊÁs¤/AŸüè+[Ï0>Á¶Ù‰p«ï±æLV8FV8V8Y!i'd‹È6O‡šÑ0Ôª:Ú¹hq¸Î"a&oZRTtª¼Ë^³QÓ7*è»#ÛØÔQ9ö¹…¶kÖ­=gû'<ÛrôKPÐ)•eì™C ¤U7ÒnðzÍNwlUCOJÕZ[¡TÊ«â¯A¯@®{æ½r€^{dkÔs鹿ڨèZA[I-ŽªYo æbƒ¤–„%ª[sWQ!Éý¤{&öLLLêYñk‡GÕ³'øµ×£Cïð@‘<½¯Ò÷$äó<8#te²V¡¢05UÛ<ÚÞýõ ª‡øF‘£éb˜³ìã[ʸäÚ¡W>xÐW.äÔ¸ôZ`ë½2¨2Äß ¾z°:®®ÄqÁŠ5Ž'#Ž"#¸qÑ£‘Ü•ôˆÈç÷ĸÃg-)I´„-JZ*Zf*Ú€ºo7Íòv¾ ïð¨"9l¥ q«¦ÛŽZIŸÊ Ðw.EA×½tB. ¿=Cýü–ƒîØú}x›N¦¼‰‹Ä” {˜râw ÊíäJq×À4ŽeGì £¢¥v§Pט©QÏiQ è)6P Y”S+¼Ð¶²Åëž-a?¨=}È*>!¶Às¦{#ò‚‡GŠ>yi‡\ø`}lÝ€¬VB콊æNê9Ã4w-Ã#ÚæŸ5’ãɵ¼}$+ië`뤷„œ¢©Ûªm°BO6®<Â$Ò[‚’¾BØpÁJQù:)Àu.Â8Œ%·Î1a*q]Iµ¡¶V´JÂ,áüäh½ÔóJ^1í;¨iʼ4óés ÝÚ¾èY½Lv'z©œ}ç2 l‚¿ªJîËÛGøê#¨ý–ÉoÙú×ê+:]ë)ƒ^Áô\gáÕZŸkî¡Ã_H³ 0— ÎÌë–l2¥êµJ¸̱¥]ŽfN±Ï8rºo#©³UϯçL<çÀ%;½fäÀ¹ž¡L\"<xyB_Y!¯¼$è ‚ÜwpáÑsA6 kë!ûΚ|g{ÇcÆ©T¾i™N•yœÂ÷ZpÒ»`/iò¦w¢hŠóA=Ûw‘¤¢ƒ’vl%Œ×âÂzɆq¬N2„¥rø¼…ó‚z6û/~ZV̶¢ðŽǬR1í´ý.>´Ì튶'o«®[›Ã®wRÐu9úŽ%„ЭMsm ÉzR…š÷¡¦ÝÐ)@zç·\ù×FE'õç„`)>}ª¡gާ½Ð äܵHլѲ¬ÂÅÚ¦àV1Å­¯Æ a%oºz§å–"§ælzÎÖT1š@}ÆAsзØòœ~¢Oؽ¼F¾ó ¾Sà‡¾!b!l„ŠdáìEHÑzk+Yáä œƒÁÆTp®üæšxÕ©3Îe±:JhݨË2¹³í1ŸŸç~¾έr¶öGØý¢S9úŽ%´Ü›v§Þ8T‰ßMÈ›÷è4ÁaÇnÚñÌ_qåaÕ·A0½¼¡ð– O ê9%~7ÉßCžaÍ1Ï:iìçNÌÃAÌÍªåÆ„xÇhóšÒªPŽBÙ\/K•†i>þFµ;´­ ûFªïµÀ>yÐórô‹Ãs^÷“O›zãÐÒ+~(ù2‡-—ÓŽçÓmT{#Š>ƒÃë o¼¥ŒÏcåàuè6IrÏŠì%¾¦Ge§ZÀSÝŒjn¸¤žZâä%_‡¡²ƒNÝž„Êß9ûš("Š [*îÂ3~›â¾çK<|ß·óü¥'ðàCpþ ¬Âê†sdØ€lhcêRš‘Ó©2MCÅ›ø6³93µ™6; éÁÕ¾mLR€íµ¤èÈÇÜp/ z#T' :CZ‚¥=Šc ¡•`u´"Õ|gÒz­j–¸sÐ&ª££œå6ávû<þxg>ùÐ]8KÎÕ:=ÿúTR9úÎe ´¦H!qД_8&‚÷+taЃÀ~âz¿å­ý[\ûpÃÉßù†„.“ž î*ôÊábe`é6)ŒK*RÇÍÓHª<¶Ë1¯ÅqW*…Ô“Ò&öTÍQc²Ùî\Àêáüƒ°z¯ò~yÚüX=‡á}0¼ŒÈ ä h9 Cn:¸FX+„‰AÐ"’Æ1êAÄå]‚¢–³ÚL»§õ}i«¬S(žJÞu’\œ2 ¶ò+I‰Ï`¡VÒ.@z-°’Q6”üÒbrå7À†¸^š7ëX@Wû)qߤ“ªù~Yo¦¶{Ÿ·ÓñûÄ<ø³=Oq;_]FŠÃö ûî.'@ß¹ (çÓrBëbO#¡WŽ ø³2L˜Öè~`¿xr½ãÙá2CØþ› ß÷”±±%ôÊU³NÆßŽáê˽ Z$&™ ¼tK3î}fçóÝ#!9¶£Èí/ÖA» œ_ô=px¿ £ò2ðµá ž®_CV ×0\{Ü} DÎ#¨“¢^‡!ÔF`Ç^‚kã‡2«šøh{«·Ïž é5¬ËQ‰&kÜàŠ#A´wlžüê}£¦Wƒ¬bSî謦o´´ Îóf?H‹i¦*‹]·Óõ¼,YÓÇfØZ[CÌò9¤ÓúuèÝ Ð©œ}çtlĨ¹¡t ’¼«nA9¦‡px€n/xþž=ÿûׯؽæX}Æg0\ £U˱E`Vs.iSº¯Ãw˜&’]ÊX¢ÐÊsZr3'çan-èZqg0\z_Ñ^Røáé á†~¼ä”ëñ ã*æžw· Cn}ÅüIMË„°"VËF“Sø[¾¶BþE¹xÓqŸ3¼D°æ>+ù&#¤cavAUGX'ëDr ¯y¿lS×I3ŸÓŒbîŠxGÅDD)gn0’êãV’,$zÎþ9S8ó¸sEÏ A.À_(rzS¦Ê6g¾n#Ò[7±•hdļÉ!=ç€#Á:A8ŽÅ5Ë¢zNöOÜ1`K„c°v!ö4žt>Œ¾µ…óiÉŽXôŽLÛµU†±iÜRùÐvÙXÃ9~–{ïÚàÒY6uý™T¾£>œ5Mmc,õKxÂs)'@ßµLÐÖÖë˜78öÈÁS }Ú='‚>†KáÜ;Îe`¿*ôõ.Óa”èݱƱ*ZÖ[l×I¡— “Â.W>ÅÛ!]å6ü*-·pŽ ªáŒm7Ôs ñæÌÁ™"çÊp, 9ôkð1ˆ8$Š*Z"ïEB÷ƒ¢ìe‡—­y­s‚û0ì¬cÞdöÜ¥×ì8–15¹µÔÒ­ó ä½á†ÈB¨^7XªidfuŒö)Ç,R«g±oC3Heº£¢ÅúÑ:uà*øÞ¬žå¬­=ãrîÀ-œO•„u9úŽE¼ä°Ý£9¨g¹ÒX)<'¤ }F𡟠ãÖqŽgCê*àe/‚²Êzpˆ Ò1†!öÒá°È;æ}Û¹8^t2 !ÞÎ3Z‚å‘AÔ´l4ælÖØ¯ â6AYëìB(ÐR¬ìMˆÈ¦”÷’Rßïqì" Ç2ˆ™ŽµÐÂІàEHg›Cýè™?ÝÂÜD°äHCŽ›ŽA¹UÓ^ÂÃ8(ßø`É z2žÛaœ®…夢í:ú‡;Ø·rz£0az)£>¬mEa¾ ' Ê Ðw-ž˜#Cƒ}-!‘þ•C.}€ô%¡Û¤ç,­°ñŽ3)=  7áD’^l€µ‹Í›Cäƒä$ï»äœ?8ncºÒã]T^•¡%AsµÍ±Òª‡Ö)¢ëò™¬uÅJIÍ{ƒ0—ؽ °Îv€Ï RöÎûxDâXöÖ¡”eHG;_ÁYš}Ù.ëEm]EÂÐò­Ž‰¶‡=Ûã 0$ß¼µµ9& t'rK!àð·VUן›ƒe(cÔïm+Ë¥ežP®õa¾½ÕqŠâ˜— ïXd \t[Áï4W굃kkE¯ˆ©B®„áàØˆ)5w-ï‰Þ$Œ1-P¥ Œ‰Ñ 9g°‹ÓÎ@9 Ô€N`FI}ÛÍ©4¯ñŒ˜#b¢9"¨SO'Ì¡çbgHÈ‚V_Ÿ2j¬E¢c"œ‘š¡/]ªô÷ÎÒÌÙÚH¶@RÒâ) W(°mÞ¹{`îA9ósOnmhßPz¶†­,,ªºUÑŽA†J=§i g ^ õÆÎV‡Yžm Öô–Ó0ýug@_€÷üòj›}7—`§Ã¢K9ú®EÃÍÊÜNЭâ·À6Bz’…yì„ñ lp¬DsN©”—sA8Ç1áÄGPè¤ø¨³1öêŽ>¤½y‡2M³~ ©Ar<´V 6®à­0ªi¤VT´µ·c÷©l¢ŠÞEÔn«¬ÊS KCù¬Ž O- ç1âà‘”Ù¨nëK÷@-i£+HK•Xª'HÛìžµå‘ .Ô;+û)v,íÓ!>xf°nl kØŠESY˜íƒF=/zÒÁ¹Ì—ËÒÀYúÉùO•„ÇË Ðw-¾:ôn"¸½¢[Ðà¯%t›{âveMè(*¤üÑ|Q¦†Ë!CPÑ£mÞ,žÐÚ#.ž6*بæRAdjü³—éÈ>tÐÌ ÀbÂïtŒê¹39ɾ¡ƒZ6§£ÒkB–0¡¨Ô•}5˜ ¬%­ã«õ+8ãCèÐDs˜Nú –ª£€Ö‡ÎÏ8­ù Ôf\à,F95íÅź…Üd³VÓY-×°.ëûfã,´ ¼¥z²´Ý™ž­÷÷VGÑ V-÷zú^n¬rBt)'@ß±ˆû¶#w™¤;‰y’4‡ßéN`¯¸IY‰K½úe¤KP©c`¢3\øº¥™v‡.˜s£…tC§¼!±t½W¡j]˜c¤ARo'q\<ë°~`—õ ­ !-AI /:Â8…U`NPžªeÉ • ^æ ¾I=7LÌóУ$Û°ÎRg»£VÓ Ò®§ ˜>›Ãº­ 4‡Öæ°jø?ªžÍgÒüMkõ·•‚K]]üçy9ú®%ŠZ=[Rõ¬=É&ÐIU(i赺p!Z)þ¤Æž"J„FšfÁ¶ì–?U YY˜|h©¥‹£jæž"Z¦s”GY&i}×5÷»UJVˆ&/zEð¢S¼†ÏïÖð±6Æ<¤®RÌf\Tô0‡ñÀ2˜>O—Å­/'¯¤¥ÑJOU÷ÇxSÒï—TüÑm® ÜN·¶F åž‚ÖE;Ã*fÛ«VYÐ6…`ÖUÔG* Ñ;¥²°Ù˜™’6KTÒÒVöw"]¬qc{p5¯@bû±3ùf㤰¢‰šïšdu(Õ“ýhB§ßÕçÖÕU{Ï­:rØTTÒ"Ù>d›#ÜÝ]Ûh ™6ƒtl5qkQÚ÷¤S—cN/YfY´tmÅ™stDIËß0ì†ùÎ8½IY¯º±9ìÆCÝ0¥}â¤Ò«$´ëe ¤Þ~Ea{ÙåÒSN€~[% ÑП䮓4¦÷L¹(Fq(F¨e@·j+·4Ë*:â=çH«—×pMÀ›½ò ™«f«¦ ”3°,œS1Ü«5¤ÃŸ‰u lƒÙ‹N YBit´)rBªma¬ óÉæp˪9/—zY3¡m^B’=Í8¹9ÇóqjYèš+p–¼a­/íËò è©|fýètŽ”¹ma/Æ®}aæÓYî©g¾{~™4Í¿;ñÏ6ÚãTB9úŽ%(hêþì²µ.T¯x£Ó¬ž­µ U\S¼¡'U¾I“šÞ×Ó9—CD\‚r=84j,É·wEÎ4–Ftn‰$8GÕ“þ—æO[›#9ô昴±tÊs€Wë“Â,âº3•<·<족0î9DÉ=²ê9îý¬²pk{®;ã!mŒµ,zÒÒ­R¶VGãGKRö ì)ç\šHëåšP»£fh¬ ‘¹ÕÑ^zueâ Ñ©œ}¤üæoþ&_øÂøÌg>S-·ùÒs¤iL¹èFW d­Î̵Xê×àt3›„:í8C¹ýÌBÚÞІ>m?P7ÊÒsÚƒù XóÝ i¢:‚Í¡” Œ­õAëeE´Ì"3*÷¼è -CÙãä<ßQÒéœ&Hw´H²9†(7yeiXßÙÛDtd½ß@yæ7Ë ¸ÕNÖÓ–WârIDAT Z7Ex”Ëeã¥èö¾8• Ëç>÷9>ò‘ð…/|¡Z.„dVÊfʵ>Œ®®láœ/FsÍ@ ½Š£ÒÌ·¥FZž UtK£ÐýòòàÚiYX·XÊô^U ë”­Õ§%ŒµÁxI-gó€y…aÆá“L£êôí mé|UV·`fu$X§æ'5ðʼ* oRÌ•­!ËÖ‡}9Iõq¿{.€µ1TÌ–UË̘ðÖ$v#¨i©ÔtS1X…Þµ^´VB¢Úp;§Ó‹RåCcw²Ýé0´½|ßç¯ü㛼öOo2—OvœJ(ïz@÷Ê«¯¾Ê«¯¾ À¿øÅ g€ñü!/~ï)E¯ YëH7i¡Ôàæpn!JS nnZYô´Ù—x¦¦Í ¾TQ˜‡mY˜n`mŸty\Ì­Ž1/—䔯]r çz™tzéZ²lk;ÌI„æó>gñ-¨pÎu4GÎÖޚʲJi*; »¨èÒ¤km¨2R·ûªÎ:õçØK¤_'aï…}ì%Þ÷±—9ÿϧ¿Ì©„rô åÓŸþôl™3Óé:­B7ºeœ°¯Æå•·}÷ž¿ŸKs#×ò°!Ž›ÈͽÓoߤ”[·nVi÷3UÌØ­4VGÈgç…#@n?ëGwT Zâ®F9w+/Ú¾„´/.‰‰ÆÅ€œÏeÜKñÒiÜnLÈÉ‘@kÎsÞÆc®* mæ;êÌݹÚ) aûäiÖ=R¡X² ô›vÛk&õgØ<ïßõåè;–tA¥QòT`KÖ§ÁjÎéïûo‹Ò¡HãIϦgïíõß'‹£ÙÞ@2ê;äй|Ô š+i«¢C¦Ñ‘^Öëï®Á¼¬¤› B1‰½üÐÍѵ>šç^u˜Ó‰²\k¸Ìà\Eê˜e9=F¶9–àÛzÍql½fûwM¥aµK[Y«çúŒšå=Pw=èzY«žóõ!óÜuèÝ Ó©œ}ÇÒ2ÍL㼸  [5¹È¸æ±zU&Ù-IZ‰×sOI»¨¢dy£ªå·“5KêH w>PVó»éäÕ†ŸÔ<î[f™ù¼wèì!¼ÉâȇSŠÝaÚ}Øs8«$¤,÷KŸK]i8dè¶:ÕÓœ­Ê.ëJ÷ÉTŽð¢}aŸ2ÝÏnþ\Îevs~ŽS)åè·Q\R›±d0Ky¥6Á‹6‡ä¿·ªoÞþ»x£ŠgÒ¯‘„‰’’6Àì.ÊŸU¢ÎV_1àX® ,ê9Á;}q é4=rÌ•š¶œ»ÉâÈÓÒ¯w5"ßd%ÿSÊåÕ4?á¹*'@ß±ä×°¬šË´]fô¤Û Q¥7oÐ'®š–AŽBÛ*«6¦w›ØEÕ«q 鲿mƒ•Òb:—Ô@Ý X«Ê×¾R>颸ÝÅ,}z ÒɇnŽOÖý-¤‘Å–†­?ð6WΕ7]MG5=‹©ýçºÂ°QÐÕ“àZU|öÔö|CEaí//A¹\†'D§rôÛ(®«:©8Ú&ˆ» ΩÔþ3Ä=Ѓ°QÑ-qÄQ%MJ[sl¿Ú¨ìF–[·…´Cš´Åêh瓊öÍ“ FuçÓF4@–Îz‹+·±ñh›Ð‹g36ç²ý¬çEW6Eòwã¢w†Ù-¬o¡mŽlcÏÒ°Ðmçoò£±×Ãñ&ÞÎÌŸJ('@ß±}@«¹êDè%}+Þ|¨¯õÚ×´_~L/Íÿ9«--?ßñÑ#`¦r…9¤ª}0µöÆ1?:¤ô‘ÇÀ ó BÛ <û&¾õtWM7…¾=WÌ87ãYo:Ã[ò›SOEw<j+ÃZM£ …Ü ¶9¯óù¾Kð®•E¹.踳,f¸;¥-åè»–¡4]Ý;‚ž_svÕt{½·½œõ[(w* £4V)‘ï‹VY;iJì¾õ{ÍpÍ|mÌ”ùÉ•ã2-Ù[Xª ìÄI›s³t(çõ­rÜê0}¦²T9Kp–x·>t{±Ýö‰“ÞIÚL¯Ïcw¾ÉÁÑyÍ3ëÖŸ÷®‰pÙÍÃï¬Â>•PN€¾cIê¸K]#r«$pÕËΣ½Áë4Ñ´!Íúܪ’0Í´Âé6ªZçq­ö†³[eÕòÔ’am·§üzÑ‘ŽÖB¤‡µ„^lŽƒ¹“à¿ÁQutb¬Ü™jf Î?ª¬w¥þ¡Ýب[ì¢ ²àC·Óí`æ1ó­znì‘6Üîx¨Ý©”rô‹À­=è£ê™š‹©,Ù|ùòÍ7h‘PhoÖž¢6Ëœ›ýnµAGÜÞÀöÏ篱CÒµïl+ K$G#L›éVAÛi5ë4ÊÚ‰á›,[ȳF+íç•’œoô ÈÌmãpîAº?ÝyŽðÎ6GQÕóZÎj£›éÌ7°–Ìé;z0¶W±£\;.ÿÅ©À Ðo«Ì"7áê8ß^€Tm>Úq÷~€ÚloZûíwñ¦%’¥Ý¨Ù†É|yÞ°¸pö*[+çrxleaÝü»žÓ «Ç!}Æq#K¥¡ ~šÃ5¤-Œ{ Úz3S}8òÖØçXg'sÞWðn}èú<Ëì‰ÑinótX8çunéC·ªxV)hÖo_%¨á¼ì“‚ž— ïX²ÅÑ(æ ÔXfkÚûRæâ£ô`ÜQV]8w<èôн ìµ"\PWå«ZuTo½UÐe ç1Ñ©™IQS:Û{ÔòtSahUöMNÁ¢@]ŠæHƒï?È*¦Éü¼.Uæ…y£ã‘\°2–7Úw–›ë¢çC/øÊ²ôywëê=¼{À>Az^N€¾c×öá×ÈÅ6ŠíXVOÌØŽ\ Û'B»ùSbAZºˆ‘6y,J“ÛÆªèj¿tµÅÇ+ '¤Br™ÒêxH×jºÕÑøÐ ]f™eÞD‰›N–þ‚ýÿ·w6!UtaÿŸs ‹¾Œî&J¥,\´ *"ÊZˆI­t!ÜÚ*HeP‹r£‹ · EÙ6ŠÌHƒˆÕÛ¦¯ûjiBnìÃ7¯XÒ¼‹;gæ|ͽÚ[ïŒöüd¸3gæŽÿ;3çžyî™s=Åy 9xž+ ³ÜªHׄW.¾¹ 2dÛ:é>Å;ö¦PYVoTŒ}¨cx˜flضÿ÷çBýXsÐjØøó}ÂÖKQºÖ½øÐšÖ°üc[DmDÐÙí˜Z+L³¶¢•Kޤ·Y¶G¾m]îôèY¼JƒcºflË7ëÆ,9ͨÝ_úöŒY:$Š÷)½6˜=j~7Ï“d“L-ƒ¾ÞØÆÿ©ßól-‰,v­-ë)ÑÃC>§úù•…•å6왘3÷¶$2èØZ'£1íÖ.hע쓀-‹ GK9þ±°AÝåOTr¥^2S„¼NÇ’ƒ´¥8t£•PíÉ¡EÔnX)0UåóAÆ iÞO–žæµm,À)GÓ"¢¶ù›fÈž:9ÐdÌ0j=ÍÁayì;0Ìg’(ûvÌzktt-Ëz/ãú˚a‹nubk{.:»áC=C¤ÚbÒâšçò˜øL½sîj "*®‘¹3ŒZT¶ rKÅ ek5l& ¥Âj æÁ(c¹X¶+ïÑPÕœ ü³7ïµs,ðåêfnŒøé¹Ò!Â"ÔOUù&²¿¶h[¢-s HµÕ±²ÞÒˆGÿs˜±-÷¬¥¸#lÇbÆÌ–{¦®v:zóIäí'ÞÓ‚\zu'¦ORݸ<ÃãißýåÉ}3ãbâ`œk"ämE ÁLAœ<–X,X,اÿQËÝ1˜3pïV•±¬IpÆc,kÊ¢ Ì}ªPü1פýeU‰;î¼ã–;PUgMy,ý78sÜšýA9$Ú!2Ö¹‡KY“^cÒáQÚH–(É=OÞÐÞˆò²Ã€þÏo¼y‡gÓ†0ù‰_ÜrÆÝ_gâ:Ñ?\ Æù¶Ç²–I:ß`x3ôQû ®hùšpüÑ7²ý¡ÝkÂýóçäQ:È¢dÐ3„Á7e¯Žhõ†»fʹl¬Ì½…ö/TÙ`‡¿þ ï'%¤Š .®y[Ë`q“\åFe•£.ÝU+”§¬A«†Ì®V@×”¹W 9d#æÚ²lÌâç¯l=@Tó•mÃq=ÑqÍ8;q|N÷»&þÃ7j­M›–Q»þ¦˜³wÕU²h›÷MØ?ßýÓ^¹øÑYåÜ{ÂeCfš!³€ó- VÄë-Ët–ÒC£ÒÅÊÜkB2e½5²˜±Í¨ JqÌpíöØæ"FÏ iYÚ•ÿ*Þ/a½Í•+‹Þ»C¼~QÈá÷ðEêb‘#èV4‡«IS)öñÕ˜·±ùzsÈý¢Å˜úñò–µ‚\°p/í¨¹fÍ£ŒïÖôíÄ|ŒùÉ̓úÀŠí$»ó¶ô•’⦭ZÉàÌe€™ÛÙ®#­ ·ôÒ¥(†:“|›6ËäªDdaŽãü`SØBf Û·oÇÚµkù~¿|ù‚eË–ýòýþf“V`vé%­ÀÀÀÄãq¬_¿£££aË™óA‡Àš5kŒÆ7066†††¼zõ ÝÝÝØ³gOH }lZàþýûèêêB2™ AU~ŠŠŠ088ˆ-[¶`ppEEEaKÊI{{; pôèѰ¥ä¤»»™LwîÜÁÈȪ««QZZ¶¬9 }IA***pëÖ­°eÒßßÍ›7ãÀ€ÆÆÆßÒ³å¿ÉdpèÐ!bÉ’%8wî\Ø’¹zõ*N:…òòrÄb1tvv†-)/}}}xüø1šššÂ–2§!ƒ&‚ˆ(ô%!ADD!ƒ&‚ˆ(dÐĬ¥··[·nE}}=ª««1>>nl3<<ŒÓ§O[ßäÈLNNþn™ñÓA³ÆªªªÐÑѲ²2>>¸»»sûöm .¬›k...¸¹¹éÂå¿ê|ñâEÊ•+§ —ÿªsll,B‡†§gac¸sÇwž}ö6 &..{Ÿ‘œœÌSO=•éûÌf3ñññÄÅÅ!„àèÑ£NŠˆVB„'(Æ/¾ÿþ{qòäI‘ Þÿ}Ñ·o_1dÈGÞß A'XÚÏÌ™3­`3ª9«æ+„zÎŽöµX„X²Dˆü>øââ`èPøã¨PA#Á‡P­}­¡d€¾}û¶³l"88ØÙ 6£š³j¾ ž³-¾AArÔ¼|9øúÂîÝ0v¬cWid†jík %táÂ…­`uêÔq¶‚ͨ欚/¨çœ_³Y&7–óÎ;‰д©ö~“åöMN†qãàêUm…ì@Éev*& U[»­š³j¾ žsf¾W®ÀûïÃþý;7̘Ý»k?×ü8²Ô¾Ð§„…Ah(xzæˆ[VQrm$ µG5gÕ|A=ç'ùîÙuêÈà\§ÃÇ;/8C&í{ë|ô4k&ƒó+¯È%&:CÉm$ µG5gÕ|A=gk¾BÀ„ в%DEA¿~rþ¹R%'>„ÕöµX`þ|)¸l”(!·3nÛ–sÙKP2@IBíQÍY5_PÏùaߨX9Ç>rˆÿçŸJgP4@IBíQÍY5_PÏùÂ…H ‚÷ÞƒÄD3ôUK#K—ˆlÓFó¯\wß•ÉÀ~ýÀÍÍÙvYFÉ)#I¨=ª9«æ j9_¿}ûúqà. +WÊ…º#%EŽ–GŽÄ/1Qοüô“Ne3GÉ´‘$ÔÕœUóuœï/;p ˜zõàØ1Æ»}û vm¹§Ül&¸gO8uJ§²YCÉm$ µG5gÕ|AÿÎBÀ´ir©ðгgöï‡2eœmöQQЭ¼ôœ> -Z@h(uæÍoogÛe %´‘$ÔÕœUó};'&Ê¢úƒ»;,ZS§šôï,X¸üüdýÒ§ž’¥óvuݾYEÉm$ µG5gÕ|A¿Î7nÈÚ«VÁ3ÏÀÁƒr€ª+ßÐPYðã“Oàî]èÛΞ•{ÍÿYÓ¬+_;1’„9€JÉ û¨æ¬š/èÓùäI¹t.2RîéøõW(ZT¾¦ ß„øá™4›åœóܹrÝßCèÂ7›(9‚6’„Ú£š³j¾ ?çÍ›ePŽŒ”5œÿýßà :ðݸQ®iž8QVcš6 ¶œA¾Àé:$$„>}úн{w† –~=00矞>}úO„!B1ºtéâl%YºTOO!@ˆ…HKs¶‘"9Yˆ~ÂÃCŠÕ¯/Dh¨STô[t1Åa+*& UC5gÕ|!g-øî;yÊ“Ù,ëM›f[a7M|‘¥?‡—+2&O–;cªUËö£Uì£d€6’„Ú£š³j¾sΉ‰²Dè˜1r*cËyNª­8Ô×d‚/¿„矗»›5“¿ì°r *ö‰‡qú2;{0vjjΪùBÎ8ß¾ ¯¿‡ÉUj¿ý&÷z؃Ã|÷î•[´ÏŸ—ß1&M’wð±S*ö‰‡Qrmì$ÔÕœUóí##áÅepnØP$bopøÆÆÊ¡{Ó¦28·m+«Ïõè¡É™€*ö‰‡Qrmì$ÔÕœUómOŸ†W_•‡‰´i¿ü"wGg‡lùnÞ ½{K¡"E`æLxçMkU±O<Œ’#h#I¨=ª9«æ Ú9ÉBoW®@—.²à‘#6ÔÙå- {¼þºzÿ}ùÝãÝw5?I[Å>ñ0Jh#I¨=ª9«æ Ú8oÝ*7àݹ#sp‹Ë%ÅŽÀf߀9§²b”,)‹­X‘±“†¨Ø'FÉm$ µG5gÕ|ÁñÎË—Ë‚G‰‰²àÛ„ ޤfÙ76>þXî†‰Š’ÛµÿúKÎ9ç *ö‰‡Q2@IBíQÍY5_p¬óÔ©ðᇲ¾ÐÏ?ËÒŽ&K¾û÷CÍšò–âÅåš¾yóÀ ƒ*ûÄÃ( $¡ö¨æ¬š/8ÆYøúk¹|8W.ذAnFÑ‚'ú&'Ã!ò\Àðpxë-›‹9ûÄÃ( $¡ö¨æ¬š/dß9-M.þñG(Xví’+6´â±¾¡¡²hþ„ 7/,[&—8y ¥bŸx%´‘$ÔÕœUó…ì9'&BÇŽr&¡dI9³ð@µ^MxÄ×l–›LêÕ“ge5m*ƒõh¾B#+¨Ø'FÉuÐF’P{TsVÍìw¾{W&€J•`Çø§²¦¦dðˆkøöî•G¯L™"O8qÕϘOÅ>ñ0úiM0’„Ú£š³j¾`Ÿóµkrš÷Àxî9ù{NgøÇ÷~²zuœkÖ„£GaÐ ]gP³O<Œ¾Z4‹IBíQÍY5_°ÝùÜ9y¨kh(¼ò ìÞ-7ååuJ—–É¿®]åéÚC‡ÊÚͨ<§*ö‰‡Q2@IBíQÍY5_°ÍùÔ)¹;0<\V¦Û´ òäÑÎí6oÆTµ*¬_åÊÁ¾}0v¬ÝÅôs[Ú×l1khb?Jh#I¨=ª9«æ Yw ‘ù·[· o_¹!%Çâb|<ô꯿Nä­[rÙHHˆÊ뜬¶ïÈÔžW›íç·kld;F’0P1Y¡š³j¾5ç£GåtÆÝ»ršwòä\ $w¿\¸O=…ßÿýŸÌN*Bfí•ÅW»¾bIÈVÿµ:¬lCÉ´‘$ÔÕœUó…̃‚d]»wåtoŽg‹Æ—s*.À›oBh(Á¾¾9ðáŽãqík¶˜™wt•fUbIÈžòyŠ¥í–²èE9l˜9JŽ $¡ö¨æ¬š/<Ùyß>y kBŒÆåPp¾uKnEܾ]nMœ1CÖÕpq¡ÎSO倀ã°Ö¾Ç®£Ïæ>¹v\è÷\?F7MïN0Ì%´ŠIÂÜŽ¨÷˜ƒ¨æ¬š/<Þù÷ße]¡ÄD™‡:4‡„e9Ðë×eº_~ªU3õÕ+úÞKºÇw»¿ã§#?!<÷ôsÌi3‡ºO×u²å“qêGHH}úô¡{÷î 6,ýºÉdâý÷ß§wïÞ µÒ;$¡ö¨æ¬š/XwÞ¶M–NNL”S9œÍføá9Ÿrý:tï.s} 8?ÎWÏDFF"„`Ù‰eTšU‰ÙGfSÀ»sÛÌ%èã Ýg„!Î>Z\!Z¶l™þçÅ‹ !„½zõÞ«·£Ñ Á† Bxz BÌš•CzõªÍšÉõñbÙ²ú`í9uó”h²¸‰`‚ˆnÝÄ­ø[O¼Go±ÅéIÂõë×Óºuk=PHàÊ•+øþ“(S¦ —/_Îp‘$ÔÕœUó…ŒÎk×ÊÚ©©0>ôë—Û·C­Z°gÜ,ëhdÁWÏħÄóÕί¨9¼&û"öQý©êèv€Eo.¢¨OÎà(œ ;tèÀÖ­[9zô(ñññ”*UŠˆˆ"""(UªT†{ñ÷÷' €uëÖ–¾0ý~GÒ˵:uêèÆå¿ê|=¸Øêøà–/_î e»P-¹ê9«æ ÒyÍšÜtë&ËX,[&w jÊåËòCþøò僅 åöí,úêµÏß9ϧ[?eÛùm¼SõF¿8š Å+Øôœ®]»²dÉ íDèdÚÚµkçl›8s挳lF5gÕ|…â‡Î!ÜÝ…X»6>pãF! ’óÍÏ='Ä… 6Ý®Ç6NLMÃ÷ ^£¼#gV;/ìBØç«·9h%—Ù; µG5gÕ|gÍ‚áÃýðô”óÏš×—’"]™:Uþ}Ð ¹ÅÆýâzkã­oåÓ­Ÿráî¼Ý½Ýl4_4ú/w/@¾öàô9h{0’„Ú£š³J¾“'矂§g06hœ/^„_”Á¹`Ay&Ö”)vóÐK_޹LÇ_:òÚÊ׸p÷¯W|Ó}Oóm“oÓƒ3èÇ7;(9‚6vjjΪøŽ ß~ ¹sÃÆuhÑBÃ[»Vǭ¬Z•­âÑÎnãTs*ÓMㇽ?š@™üe˜ÑzoT²^ÄÙ¾Ž@É´Š; UC5g½û ÇËàœ'ÜÒ°¡FÎII²ì]§N28*w f³²¿3Ûxoø^jÍ«ÅW»¾"ÅœÂ7¿át¿Ó Πÿ>‘” ÐÆNBíQÍYï¾Ã†ÁÈ‘ráÄŽ²‘&Î/BÆ0g-*¿Œ Ù~´3ÚøfüM>úõ#šþÜ”ÓQ§i^¶9'ûœdLó1äöxòн÷‰¬ ä‡‘$ÔÕœõì;v,Œ  ÀÎòŒUÐÀyÛ6YKãî]Y@zÅ xúi‡=>'ÛØl13÷è\¾Ýý-1É1ÏSœ©¯Nåªïà’ŪQzîYEÉ´‘$ÔÕœõê;ujÆiûÁè,„ü.ðÚk28ñ…üNàÀà 9ׯ‡¯¦þ‚úôßÚŸ¸”86HX¿0Þ­ön–ƒ3è·OØ‚’#h#I¨=ª9ëÑwî\|¸ü»«öc-G¶q\rÇ3ãϘ…™ZÅk1§Íž÷}ÞaŸ¡—>‘”AIBíQÍY¾Û¶ÁÛoË#ý~þ9óD6;ß¹#«ù+×ëmÜ(ÏÃÊà Žic!¿üõ ~³ý˜zh*>ž>Ìh5ƒ#=Ž848ƒ>úDvQrm$ µG5ggûÊéà”YÏù e•Ó±ÉùÄ èÐA®s®RE&+V´Û×²ÛÆçnŸ£ß–~캸 €ÎÕ;3ñ剔È[Âzàì>á”A«˜$T Õœé{ð Ø&%ÁôéУGÖî˲óÊ•róÉÅ‹rX~èPŽg°¿M©&¾ßó=ÕçTg×Å]øñc÷G»YÞa¹fÁÔëÃÖP2@IBíQÍÙY¾ÇŽAëÖòôíñãaÀ€¬ß›©sjª¬<×¹3$'Ã?ʃ\óæÍž´ØÓÆ¿ûª?Ueô¾Ñ¸»º3¾ÅxNô>A³²Í40̈j}ØJNqIBíQÍÙ¾¡¡ðÊ+r)ò°a0dˆm÷?ÑùæM¹žyï^(TV¯~ür–6ޏÁÀmÙpvíüÚ1íÕi”)PF+½GP­[CÉ´‘$ÔÕœsÚ7, Z¶”y»/¿”¹:[y¬óáÃP·® εkËaº“ƒ3d­SÌ)ŒÛ?ŽÊ³+³áìÊ(ËoïýƯïüš£ÁÔëÃÖPrm$ µG5çœô½pZ´€[·äá®?þ6ì@NǪó‚ò¡))ðá‡0ožÜЍ2kãÝ—vÓoK?¢Ãðtóäû&ß3ôÅ¡äòpŽ¿j}ØJh“„ªíhRÍ9§|/_–ÁùÚ5¹eÆ û‚3<䜜,'°çÏ—;\fΔÚÞ‡kÀãÚøzÜu>ßñ9«N­à•ò¯0«õ,ž-ülN+f@µ>l %§8Œ$¡ö¨æœ¾×¯Cóæ!‹ÆÍŸŸ½%ÈéÎW¯ÊêsóçC±b°{7ôï¯«à ¶qš%釦SiV%VZEɼ%ùå­_ØÖy›Óƒ3¨×‡­¡äÚHjjÎZûFEÉ9çóçåräŸ7·ì=ÓÏÏ‚ƒåvÃk×àùçåÞð’%#í`lã ËAôÙ܇7OàæâÆç ?gøKÃÉëåœ&ÖP­[é#èßÿ=zЭ[7F~=<<œªU«Ò§Of̘ñÈ}F’P{TsÖÒ÷î]¹ZãôiYÑsÕ*9 ‘]‚'O–•û¯]ƒnÝängmmŠæ“ŸÐhQ#NÜ<Á‹¥_äx¯ãLze’®‚3¨×‡­áÔt‹-hñÏ¡l-[¶ä»ï¾ÀÅÅ…üùóÏÓVjÚIBíQÍY+ߨXhÕ BBäôÆÚµv·š!`Ò$ê "ÿ<~<|õ•î¦4Ä",Ì˳^æNâŠæ.ÊÄ—'òQÍlªÑœ“¨Ö‡­¡‹)ŽÅ‹óÆÿž-V¦L<ˆÅbáÕW_¥uëÖøøø¤¿n$ µG5g-|äÁÇåÁØ7:`AEJŠl §' §L™‚Édb€•-X®®®äÏŸŸÔÔÔ ×/^¼ˆ¿¿?¬[·€°°°ô­÷´Ñ˵ÈÈHݸüW·mÛæÐçÓ®ìßF:&6o†³g³é|÷.acZ¸J”`Û?@‡ºh?k×öícà¶Ô[—C—QÕ³*?7ø™ŸÚüÄ͈›N÷ËìÚÙ³g³ô¾ãÇÀäÉ“‰‰‰AO¸!B€šÎøðåË—óÃ?вeKÜÜܨQ£¥J•ÂÇLJåË—c6›)[¶lúÔÇ}ºvíÊ’%Kœ¡lð?@JŠÔnÞ 5kÊE… eó¡çÏ˺ÍçÎA­Z°iøú:Ä×Ñ!XujŸïøœñ7Èq-ÆÑ³nOÜ\³™Õ9º‹-Bˆ¡¯¿þº³lâØ±cÎV°Õœ囚*DÇŽB€•+ qó¦ºw¯… ɇ¶m+D\œBŸm|úÖiÑlI3Á#ýú‘¸wC¡Oß'ao—.]/’ t1m+F’P{Tsv„¯Ù,÷[·Nž µk<õT6úóϲ¼]jª< p„ôõyzjã„”FïÍ䃓Iµ¤RµhU~jóMÊü{V—ž|³‚j¾Öpú´=¨˜$T Õœ³ëk±@ïÞ°b”. ¿ÿžÍC±-yœw×®òÏóæÁäÉOë¡…„På§*Œ?0O7O&¾<‘㽎gΠ_[PÍ×Jhc'¡ö¨æœ_!à³ÏdŒ%dp.“º>&“¬D7v,äÏ/ZéÙÓ¡ÎŽàâÝ‹´]Õ–öþ퉌‰ä­*oÖ?Œ/}‡›Ç#ïw¶¯­¨æk %§8Œ„Ú£š³½¾BÀ×_ËÒE‹Êà\¡B6DnÜ€7Þ€#G \9øí7¨\Ù¡ÎÙ%9-™ L`ì±$¥%Q¡PfµžÅ«^}â}ÿ+}BO(9‚6vjjÎöúŽ)§… „;K³ÆÉ“ò¤í#GäÂé?ÿ|âÑÆ;.ì úœê †‚šþ@hŸÐLƒ3üïô =¡äÚHjjÎöøN˜ ë8çËÛ·Ë%uv³y3¼û.ÄÇË ,/¯'Þ’“m|5ö*ƒ¶bÍé5´®Ðš™­gR¾Pù,?ã¡Oè %GÐF’P{Ts¶ÕwÖ,yJîܰe <÷œ,„<ˆð7dp5 –.Í48Ûãl©æT¦MÁo¶kN¯¡T¾R¬{=›ßßlSp†ÿ~ŸÐ#Jh#I¨=ª9Ûâ»`|ú©Œ¡›6Á /Øù¡ii²fógŸ‡‡<–ê»ï²\SCë6>y€:óëðùŽÏIJKbÈ C8Óï í+··«~ƹOè%§8Œ$¡ö¨æœUß+ä‚ øõWYÉ.bbàí·aǹXzÃY.Ô´jã[ ·²kKB–ðR™—ø©ÍOT)Z%[Ïý¯ö =£äÚHjjÎYñ]·ºt‘EöýýåiÜvqé4j$ƒsµj2hcpÇ·±ÙbfΑ9TšU‰%!K(æSŒåí—³§Ëžlgøoö ½£äÚHjjΙùnÞ ï½'÷Œ¬XíÛÛùAB»v²‚«V2ÒçËg×£ÙÆG¯¥Ïæ>½vWWú×ïϨf£(à]ÀaŸñ_ë* äÚHjjÎOòݵ :v”»­,Ú.V®”s"QQòHªM›ìÎà˜6¾›x—¾›ûRÿÿêsôÚQꗬϑG˜Ùz¦Cƒ3ü·ú„*( $¡ö¨æü8ßýûå‹äd¹r£{w;.„\×¹³Œò3gÊ_Ù¢N mFŽÿ•>¡JNqIBíQÍÙšïŸÊ#ªaÒ$¹àÂf’’dT_µ òæÍæäuFìmãS·NÑws_öGî {íîŒo1ž¢>Eâõ8þ }B5”AIBíQÍùaß9E/w ~þ¹½uKNi¬Z%‹s<è°à ¶·q|J<_îü’Zsk±?r?5ŠÕà@·,|c¡æÁÔï*¢äÚHjjÎúþõ¼ü2Ü»'ëlsæÌôëÒ¢E þïÿþÅ‹˜~}ß¾}<ûì³Ì™3‡²eË>2Eb$ µGïÎññ2—wì4i“&EâímÃÖ®…—^’Á¹gOغ5Gƒóø¼³àšýÜŒ3ÑghQ¶'ûœdLó1º Πÿ>ñ0ªùZC³$áÝ»wéׯ‰‰‰¼üòËO|ïâÅ‹y㜻rå ¾¾¾<óÌ3\¾|9Ãû$¡öèÙ91QÎJÉ%Ê¿ý&“„YB7Nž¸íâ"OÚ4ÈŽåöa¶˜™stßîþ–ØäXJä)ÁÔW§òvÕ·íªÑœ“è¹OXÃ߸ãqøTöÑÐÆ>4K6mÚ” .E³fÍû¾)S¦`2™0`@úµR¥JÈdc©R¥2ÜsæÌüýý `ݺu„……¥O¡ÜOèåZpp°n\TwNN†-‚ „Ê•ÃX¿ÞDÞ¼°bÅŠÌŸ—œLðoÀ·ß–+&<˜àãÇsäëøóÊŸTUO7~JBJ­[Ö?Œšî5ILLÔU;[»v¿_èÁ%+×þøãLßúg(o0½Ît†µFLL ºB"4 W¯^Âd2‰«W¯Š·ÞzËê{–-[&*T¨ z÷î-úõë'æÍ›'¶lÙ",‹øä“ODÿþýE=¹¯K—.Z(蜔!Þ|S¢jU!¢¢l¸9*JˆÆåÍ%K qü¸fž-znê)\F¸F -l$B®kòßÎ ‹XÌq}ñuq è±‡=bÁýâÚÂkº‹-šèIKKsèó:wîìÐçiMBB‚³lFoΩ©Btê$ãë³Ï qýzÆ×Ÿè&Dùòòæºu…¸zU[Ù0[ÌbaðBQøÇ‚ˆÂ? ƒ ³Åœ¹³ù¯øÆÇ{Ø#ö°G„}&R¢R„úüi2ÅÑ»wo–.]ʹsç¸|ù2 <˜£G:äùF’P{ôäl6C×®°f ”- »wCñâßóXßÝ»åi'.@‡°w/<­ýN¼7NÐxqc>Þø1wïгnOÎö?K÷ÚÝquq}²³NQÝ7-&¿þÍѺG‰=KžÚy¨T‡J *áQÄÃI–OF“$aùòåqwwgþüù$$$P½zu¾ûî; *äçIBíÑ‹³Å½zÉSPJ—–ñöŸüq¬ú.\½{ËÃ]‡ ‘…9lÚÁb;±É± ÎÌ?gbfj¯Íœ6shàÛ kÎ:FU_!·VÜâÂH¹™‚{~wÊŽ)ËÓ½ŸÆÅM߉YMzëž={˜:ujúH744ÔaÁŒ„9œ…—,\(½¿ÿÏ\ÿ·};Ô®…›6lÀï£Àd’Ë=æÍö¢Y'ü^8¶`Ó¹M´÷kÏ´VÓ(¿´ÍÏR­_èÕל`&bT—§\F¤ rWÉMÅÙ)ÐT­é k(9‚6’„Úã çiÓäU>>²4Fýú™Ü „< ¶}{‚M&¹…{Ñ"M‚srZ2c÷¥Êì*l:·‰r˱ùýͬg½]ÁÔëzóBpkõ-û&òÇH\=])?±<õBêQ iÝùÚƒ’#h#I¨=9ígõ©Õ¼ZþUf¶žÉ³…ŸuÈóUëzðM¹™Â¥o/q}Ñu§f*L¯@—ÎЃovQrŠÃHjON9¯X!—+»»ÃºuðOéðÇsþ¼<Ðu÷n¨YSÖt®WÏ¡¾i–4¦š†ß,?VŸZMɼ%YÓi [;ouXpõú…3}-).OºÌŸÏþÉõ…×ñ(äAŹ©{¬®Õà 굯5”AIBíÉ ç5kà£äþxýõLnØ·Ú·‡;wä›W­‚y{¶jík %GÐF’P{´vÞ¸Þ_þyùrY&ã‰,] -[Êà”;‰w(š»(“^™Ä‡5>Ô¼€¾jý"§|Sï¦12‚«³®"Ò¹*ä¢ÂÔ jSȦÕÚ×Jh#I¨=Z9ÿþ»œ¥HI‘Ë•»ty›äÈúõ?¿œyÌé<öø_¦ïæ¾üyõO\p¡ïs}Ýl4s´é9ö¢Z¿ÐÚW˜×\çÒw—HNÅ-¯Ï {†’Jâêiûûªµ¯5”œâ0’„Ú£…óþýr'vR̘!|,W¯ÊÃׯ—§l:ôØàl«ï½¤{|ºõSžû¿çøóêŸÔ{º‡{fök³s,8ƒzýBKß{÷8V÷çzŸ#õv*%>.Aƒ¿Pê‹RvgP¯}­¡äÚHj£’‡¼šL0q"|úéÞ|옌ä×®ý¤3™ÖÊŠ¯‚•¡+ù|ÇçÜL¸IïŒk1ŽuzàæêfãW”}TëZø&…'qáË D­ ÿ ù©0½yëfÞ_µöµ†’#h#I¨=Žt>v Zµ’'q_|ñ„7¯[Ëàܽ»,Æ‘…œCf¾§£NÓ|is>øõn&ܤKÍ.œí–Þõz;%8ƒzý‘¾iqi\úþ‡+&jm^¾^T^Y™Zûk9$8ƒzík‘G^9½KcðxNœ¢P!yÚÔwß=á‹cÆÈ7º¸1a‚¼–Mâ“ãÅC„ûHwÁDµŸª‰}áû²ý\û0'™Ååé—ÓÏÜë½W\vQ¤Å;öX<{Ñ[lQrŠÃHj#œOŸþweÜ_ÀÈ‘ycr2ôèË–ÉB+WÊ)Žlø ! `à¶\޽LÏ<Œxi ÀÃMÇ©Ö/²ã+Ì‚›+o>,œ¤ð$pb£ì¨²x—ñv°©Dµöµ†’SF’P{²ë|ê”ܲ%ç›'L«+¤¢¢ E œ}}áÀ›ƒóþï^äõU¯Óá—\޽L§*8Óï Ÿ7ú\7ÁÔëöø !¸½ù6Gk%ì£0’“(üzaê…Ô£òÒÊšgP¯}­áôô•+W6l§NâðáÃé×ÃÃÃiÓ¦ Mš4¡råÊ 0 ý5#I¨=Ùq>qBŽœ££¡_?˜>ý1Áù¯¿äŽÀðpYº. J”°Û7)-‰ L`ìþ±$›“©P¨³_›Í+å3Û?îTë¶úÆÅpqÈEböË‚Fùå£Üør9vª‰jík § }}}Y´hÑ#›O\\\ÈŸ??ñññ<ýÐ)ÌF’P{ìu†æÍepþì3˜9ó1ÁyëVYS#<Þ~íγ7̦úœê Ž‹‹ #›Ž$´O¨nƒ3¨×/²ê›p:SíNq¼ÑqböÇàSÕ‡jªQû@í=rJµöµŠÐI’°U«VV¯›ÍfѲeKŸ~Moù’Ç…(P@æù¾üò19>‹EˆéÓ…pu•o><[ÉÀË1—Å[¿¼%`ⵯ‰ w.Øý<ûIŒHgºž{\÷ˆ=ìK×_–´ì'{s ½Å§ 3ÃÕÕ•üùó“ššš~-""X·naaa˜L&àßïœz¹f2™t㢕s` ‰–-áÞ½`†…nÝÂHL|è}¡¡˜zô€ vsƒ•+ {÷]L‰‰6û¥šSùjÕWTšR‰µ§×RôvQ~}çW&ÕžDq¯âNo¿¬\;xð n\²rÍd2Y}ßá݇9ÿùyÖTXCø’p< z`l¢Á¹Ü{þ‰É¶ÿû:âZttt–Þwüøq˜ÏÎzÏâÚÔk/ªµ¯5œ¾ÌÎŒr£Ú“™ó®]r¹rb¢¬­auûö…л·¬+úùçòÈn7Û¶U¹z„¾[úrôÚQ\]\ù´þ§Œj6ŠüÞ—ZþÛX/$_Kæò¤Ë$ÏK&Ò‰‹‡ %z– ôÒä*—½sµD•ö}Jhc'¡ö<ÉyÛ6h×Nnœ:U.§Ë€Ù C†ÀäÉò,« àãmúü»‰wùv÷·Ì=: AÉÌi3‡Ú%jÛì«WôDä‘\_t‘"HñN¡ÜÀr”ú¢T†ÃYõŠÞÛ7+(9Åaì$ÔžÇ9ÿö¼ù¦ γfY Îññ²àóäÉP¨,vdCpBðsÈÏTšU‰9GçP0WAæ¿>Ÿƒ|lp~’¯žÑ«³é¬‰°®aüYáO®Í½†«§+¥¿.M‰]%¨0­‚ÁôÛ¾¶ äÚØI¨=Öœ7l'¡¤¦ÊbûÔsŽŒ„¶máäI¨XQFóg³~Èê©[§è»¹/û#÷ðqíßr¦øFFþ¾ý7ý·ögÇ…¼Wí=&½2‰§ó>ÉOöU g8LJÄseæn­¼…%É@ÁW âû©/…ZÂÅíñÿvªµ±j¾ÖP2@«˜$Tm>,22’ÇýèÖMÆÛ•+eM£t¢¢ä„ôÞ½P¤üò 4k–ésSw`?þñ#)æ*®Äì×fÓ¢\‹lûªØÆ9álIµýk4Wg^%æ€ÜÊì–Ç’ýKR²_Irûe-ˆ©ÖƪùZCÉm$ µgÏ?úõ“ãÕ«¡cÇ^–Á ãåžýU*¶±ÖÎ)·R¸>ÿ:׿^#ùªœÆÈU1%û—¤x—â¸ç³í¿¿jm¬š¯5Œ$a R²B=úö ÆÓÖ®}(8/[/¾(ƒsçÎrg`&Á92&’öþíi³² —î]âJopºßi†6êà jµñ}´pi‚Û[nsúÝÓ•’;þ’¯%SèµBÔØZƒúgêãû©¯ÍÁY+_-QÍ×JŽ $¡6X,rÃß´i7o6lx`Ö"- ¾üR¾èê*×9ôÄùæs Sƒ¦2rßHL©&ž)ð 3ZÍ m¥¶wW¥ÄQÎBâÇsséMn®ºIê-YùÑ-Ÿ%ú– d¿’äªýªµ±j¾ÖPr­b’P臘B×®2þ)[·šþ ÎÑÑðê«òÅÂ…aÇ<ø‰ÁyÏ¥=Ôš[‹¯ÿšTs*ß6þ–¿úþ¥Ip5Úøa²ëœt9‰Èñ‘©v„cuqeúÒn§QèµBTY]…F7Qaj¼ËËc¥bcc9zô(Ë—/GALL «W¯`ñ⍤¤<öÚÏ?ÿœ¥÷éåÚõë×m¾Wo( ULê™ÄD9±l”*%g- þÇùøq¨Wv5áèQ¹Îù1\»Nçõi¾´9g¢Ïв\KBû„2ºùhr{h—Q×{[Ãç´¸4n,¹AH‹•9ÄÅ¡16‘§N*L«@ë ©±¹^­¼:@ïÞ½III!11‘_~ù€   HJJâøñã>|³ÙüØkû÷ïÏÒûôríÂ… 6ß«;„Qnôš{÷„hÜXVõó"2òW¬"W.ùâ»ï ‘ðØç¤šSÅôCÓE¾qù#%&•«CW K6NK1¤D§ˆëK¯‹SN‰½¹öŠ=üsb‰ïAqaÈ'bcc…BŒ;Vܾ}[$''‹nݺ !„˜?¾8sæŒHIIÛ¶mBñ×_‰¤¤$‘œœ,.^¼(„âï¿ÿiiiÿ3×öíÛ':wî,"##Ó¯é-¶( _ýug+ØÄ±cú,&ㆵjÉøûÜsBDEýóBjª8öÁòWW!&N|â±TA—ƒD­¹µ#n?¸‰AÛ‰˜¤˜œù"þA¯mü$çl±XDüéxñc„~18ý©=ìûòìgºœwvÝçÏ7nÜf³Y¼÷Þ{B!~ûí7áïï/„"000G|õÊã|“““ÅøñãEîܹ ˜þš €ÞQE.]¢Bƒ[´âŸ˜ÑÑÿž|R° ;v<öÑ Ñⓟ¤Ðo´°‘8qãDŽøÿ×0§˜Åß?û[*(= ïaøãé?DXÏ0½)Z¤%¤‰5kÖ!„ S§NB1qâD‘šš*Ìf³ñSK&œ>}Z¸»» ñÍ7߈„~2Ô[lQr‡ŠIB=íhúë/xå¸v :t›P¼¼€'dÑðpLU«’{ãF(Wî‘û-ÂÂâ㋲k·oS$w&´œ@—Z]puqNZComœBCê‘Tîl½ÃmwH‹ù·_ç©“‡"m‹P¸maòÔÉC\\;vìà­ÜoqüøqªU«FýúõÓ—œ~aµ ·cQ­ôBàòOR»råÊÌ›7^xJ•*9S1S” Ð*& õ²hþÐ!xí5¸{WV7ïŸú«WC÷î2cøöÛD‚Ÿ•àr#„¾›ût%\èU·c[Œ¥P®B9ÿÅ<€žÚØÂ"H8•@ÌþböÇpoÿ=Î_;Oiäé2®Þ®nS˜Âm SøõÂx•”ëÃwîÜÉÓ§Ÿ¦J•*¬^½šŽ;2`Ày«+mڴɱ¯Aïmü0‘‘‘<óÌ3Lš4‰3gΰbÅŠô׺wïîD3ÆÇÿ Û· ‘;·œ½øê«¦•ÓÒ„øòKyÑÅEˆñã­Î7Ç$ň[ ×\#µçÖ‡.Êù/BÒLiâÞ{"b\„8ñÚ ±?ÿþ Ó{\÷ˆ#uŽˆ¿þ-¢¢DZ|Z†û‡ &Ìf³ƒ B!Ìf³3¾%Ù´i“([¶¬„———¸páB¦÷è-¶(9‚Vq'¡³Íÿò |ð\ïüãðÕWÀ;ð¨~rýꫜ…¬>µšÁ;s#þù½ò3¦ùz×뛫mÇWi‰³ÚX¤ Ï'O©BH8•@âùDÿ¾ÏÕÛ•/ ãüäoœŸ|Ïçãäù“T¨S!ý=III,\¸~ýúQ¦LiÞ¼9ß}÷¥m<ËÑÑè¡ÛÂo¿ýÆ¥K—xóÍ7™2e å¬üD¨w\„!@Mg|ø•+W6l§NâðáÃé×- ½zõÂÝݳÙÌüùó3Ü×µkW–,Y’öê2oôé#÷•ÌŸÿÏ''OÊz/Bµj²žF… î ‹£ß–~ì¾´€j|ÀÄ—'R>ž† Ò¥K¦OŸNÞ¼yqqqÁÕUÉ­ N!>>Ÿô¹æÄÄD8ÀË/¿œågè-¶8uíëëË¢E‹hݺu†ëûöíãÙgŸå«¯¾bܸqìÛ·&Mš¤¿n$ ³†ÅÆÁ˜1àé «VA‡ö.‚þý!)IVá_¼òäù×7ÕÄðÙ>Õ}ð©æ#¯êƒ{þÌÿk­Y³†6mÚP¶lYzöìIÆ ™={v† £'ôš$´X,,[¶Œ!C†0cÆ Þþ§ì¢¦à¬Gt9ÅqåÊ|}}xæ™g¸|ùr†×$aæ$%A·nrÖ"~X¿š7H€®}aéR™œ0AÖs~ l<»‘[q!‚Ü%r3ºùh>{þ3<Ý"M|-™äÈd’"“HNÅk&-. s¬sœ™´Ø4ÎßÕ}ð,îis0ݼy3mÚ´!>>ž 0`À¦N @ž¾Qê =& ¯_¿N‡8tèGMÐzôµ]þüTªT)"""§T©R^‹‹Ãßߟ€€Ö­[@XXXzmƒûU¬ôrÍÏÏ/G?7:ž>˜Õ«¡dÉ0~ÿÝDóâ§ ®^–.%ì©§0mß_~Ið?[\wý¹‹×–¼Æ›«ß$",Ž’2tŸIDAT‚Ž;òÛ˿ѿv<Ý<5s>sú ·OÝæö–Ûlÿf;¿¹Èo¯ÿÆÁF *į*sˆ 7p¼óqÎ<Ïöï·syÂeÍ=DÄŠnoºMÔá(âƒã9û÷Yâ¢âpqqábž‹x—ñæÖ3·p¯!Gº×ë^§PëBĵŒ#o§¼ï^œ»îâ;Ø—Ôž©”œT’ªë«âºÔ•†×òTÈSÔy’z ëážÏW/ýŒ;RSSIMMÅÝÝwß}—µk×MZZ7nÜP*馇$ajj*gÏž¥Zµjé×®^½JñâÅqs˘´¶ÇWosÐN Ðö¢·FÔ ûöÉ}&wïÊâGKç%’ûë°`,:j|ýµü3°óÂNúoíϹÛçðróbè‹Còâ¼Ý½³íbN4{(–Ø?bÓƒñÃ+Ü|Üð©áƒO¼ŸñÎŒ½|½põÐO°µ‡ÐÐP–.]Êĉ ¥|ùòºœÇU;w2hÐ nܸÁ¹sç(TÈñkïõ[t9F’ðQ–-“«3RSåºqÝÎáÚ¼“\­Q¼¸Ì6m ÀÕØ«|¾ãsüÿò U…VÌl=“ …þ]Åa«óý€|/ð÷ï{(ö‘ù_ï2ÞøÔô!OÍ<鿼Ëyãâšý„˜ÞXþþþ/^œ—^z‰Š+b±X¨^½z†÷èÍ93œé;tèPÆ@Ó¦M‰Í4@«Ö¾V nTi×®³lâÌ™3š=Ûbbøp¹ÏÄÍMˆyó„«W ‘'¼Ø¼¹¬Š$dŹ)§ˆ}úˆˆˆˆ ×sb¥Þb‹’SÆNB¹ °}{9ï\ªì˜w¿ï:Ap°L®X/¿LTBCv aqÈbš”iÂO¯ýDÕ§ªfê\»vmâÅõkÑ¿Fc:óï î…Ü)ðR 4•¿|ªù8dªÂ^œ•Àºÿct@@‹…çŸ>Ëxôt³­}cbb˜0aÓ¦MÃd2a±X˜;wnúë¶nÚQ­}­"Œ´rüý·+ÊrݺBÜ^¸^ˆüùå…Æ…¸zU˜-f1÷È\Qp|AÁÄSŸKC–fúã¡%Õ"îî¹+Î 8'–>˜a”|¸Æaqiø%û?7B¶†Åb;v‰‰‰"...}m`/^ÂËËK|ùå—âöíÛ9î ·Ø¢äú9IøÇðæ›pû6tl›ÂªÒCðøxš|qèP9’c·NÐwa{_=Œ .ô{®£›¦€w«Ï´$Y¸»ë.Q¿Fq{ãmR£SI" ooò5ÊGÑöE)Ò¾¹ÊgÿàQ­ÈÉ„P||<'Nä‡~`À€œ>}š:uêP¯^=›ž£ZËѾf³™»wïR¤HÊ–-ËÒ¥Kyá…Ùû`ªµ¯5” Ðÿ«; W¯†.] %F~Éw¡oã²éO(T–-ã^óF|·ã3æƒEXxîéç˜ÓfuŸ®ûȳ„Ä‹çúâëÜZy‹´{ò›ž‹» _)HLÃôj€W ¯l{ç9±kìÒ¥K\½z•_|‘äädnܸ‘¡­¨¶ÓÍQ¾iiiøûû3vìXJ•*ŶmÛÒ_»¿ÑĨ־ÖP2@çÏŸßÙ 6‘ÝNb6ÃwßÁøñr ó–ž´^û±œˆnرj+böóù¬JÜJ¸EAk1ŽOê|òHŹ”¨n.¿ÉE7H8%¿Ñ¹x¸P¤]Šv,J¡6…ð(è‘-_g åĈˆ ,HÉ’%4h 4`ܸqÙ®—¡Zðp„¯‚^x!½8Z‘"Eˆ×d‹»jík %w¨˜$´—;wäÎÀñãáé|ñ„¿ÜƒÖóÛË毵sh¶§ þú!·nÑ­V7Îö?K¯z½Òƒ³%ÕBôÆhNµ?EÐÓA\|„S ä©•‡ Ó+ÐèZ#ªýZbKÎÙqvZø¦¤¤²¿3OOOæÍ›‡»»»CŠý¯´±ÿ®‡wqqá7Þ U«V¨YýÕÚ×JŽ  .ìl›°7“|â„\©qé¼]îË,ñÜþ7+FüÂ9Œò:Ä”…õH³¤Qý©êüÔæ'^,ýbúý §¸±ø7—ݔ٫/Š}PŒÝJ§Öãÿc¨–ýÖÂwÆŒ<ÿüó¼øâ‹DEEP¬X1‡=ÿ¿ÞÆ×¯_gêÔ©ìÝ»—   ôUß|óMŽTëS­}­"\Åѹsgg+ØÄƒ‡Rf•+„È•KWÒÄÊjc„ÅÝ]–¶¯‹u‡ ß)¾‚ˆÅú¤5q‰#/¶tšÇÒÁ’sZààã€EÓº[§6ƒåQõ¦¤¤ðÑG±iÓ&üüü¸wïF½ÑDM9ÎÍÍ•Ò2 @«V­ðööfÆŒ<ÿ¼²îªTS~«C•úIÙIXT¾¾°s«ž÷5«YªYOI¾ ³º°Êéy™8Û9³ùÅÍt>Õ™_|Aÿzl{ØâèëH³IÍêåÌdµíª­ÞóçÏSTTÄàÁƒiÞ¼9ùùùôêÕË +£†ýõ×ìÚµ‹3gÎPXXHBB‚ü.ÃÃÃøøxÅ^l«†üÖ„23[O‚I˜žƒCÈÖxþmÞŸeÒZηo€ûš,~>–¢’"VtZÁ©ÔSØ¿bOÒª$ô™zšý©îçÝé~©;Í_o^oÚ«Í`©IoXX< gÏžìÞ½I’X²d ÖÖ¦Û¾®¤K’Drr2.\(×Ã7ß|ƒ••£FB¯×Ë1¥ß:®¤ü>.ªA«}'á©Sðæ4‰Qw÷¢Çƒy¼ùÖ³ìo‘ ú4F5ÅòË)ø €;º;hhiñ—8-pªåo·H’ÄÝ»w¹}û6Í›7çÇ”cmÛ¶¥]»vòç.\àÞ½{²Û>vìX9v÷î]"##嘛›;v”ã¡¡¡Ü½{WŽ{zzʱŒŒ Ξ=+Ç:wîL—.]úYO‘‘‘!ǧOŸ.ÇÒÓÓ9yò¤sww/çöŸ8q‚ôôt9îãã#ÇÒÒÒ8vì˜ëÙ³g¹“––FVV7¦oß¾¬_¿Ö­[ÇÇ,÷íÓ§}úô‘û:tˆ””9¾xñb9–””ÄÁƒåXÿþý0`€ß·oÉÉÉr|ùòårìöíÛʱ—^z©Ü߯îÝ»ILL”ãëÖ­“c·nÝb×®]rì•W^aÈ!r|ëÖ­$$$ÈŸÿýï—?ŽgëÖ­rßaÆ1lØ09>cÆ Nž|8C† ©—[Œ«CMG5feeqöìY&NœHFFׯ_¯4¢V"jÊ1½¦À¤úðáÃŒ7ŽÉ“'3kÖ,’““qvvF£Ñ`ggGnn.•ú©Á$Œ‹Ÿ?ÝãøyÌ}îSFÂõ&Mx#ô Æ^‹F¯!Î*ŽÐŽ¡„Ü!ÿT>øÃ˜4i'N¤oß¾˜™™Õð¤úA ØùùùÓ°aC8À˜1cX½zµjÌ,5äøa„^ãcÒ52©©©8::àââBJJŠüqTTìØ±£ÒˆYÉ; % ¶mƒ5Ý¿b’W† ×KÚ$Ìà³ÍŸñò¥— Öógû?3¿`>__ÿ333Þzë-Ξ=KJJ Ÿ|ò  0YqeïÂ’þ»áæÍ›¬Zµ ¦M›FII –––F9)­.PrŽ«Bè5>&-ÐNNN$%%¥Ë—ÊŠuZ­;;»rk/¡täôùçŸsôèQŽ9À7ÐéJ/5-ûÅ»-,ìÞIÞìŒn;—fß#:Ÿ}y×pW6é7áiîÉÖ¢­$e%ѽ{wvìØÁ;w˜3gƒ&>>Þä?GÙe›JÈiUmk×®%44 Ú·oÁ` eË–X[[+B_mÛÊP‚–Ú´uïÞ]1ZjÓV6‚®éë®\¹ÂÑ£GÙ¸q#ÙÙÙ( “š„:ooo7nLÆ iݺ5NNNØØØDII ®®®,[¶¬\?%š„.Àþq_2]òáýáYä•ôÅ+Ä‹ô{éâqÄ`kkËôéÓ™5kV%'^I(Ñ `âĉXXX°råJy(SoM¨MóÓ Wi&¡*×A7ÎÔd $iýü )Èb‚´ì%¤Îou68o±HrÆY^{Ú¦MéÓO?-wâ—’ùé§ŸL-A&22R’$Iºxñ¢´bÅŠ*¿FIzk‹Ú4? zÅ:è:@)&ả ±_àníÍ'oØ0øÒ8‰T×h¿Í©‚üʯh5Z¦NšÊò5ËËPT†ÚÌ0¾æØØXîܹÃСC±µµ%++ë‘6›ˆ×?B¯ñQåÚØ; ÿó“e]7>†ÿd¹KPAÙd3eô~ºñû?ß_equ{h,Í/^$++ 777¶oߎÁ``åÊ•|‡Èqý#ôUhc™„%%°gQ {_ëERÖE¾ŠºCPv™d2vÐX®ýxƒÇV[˜ËP£YQßšSSS°²²Âßß 8ðØsõ"ÇõÐk|TY a&\ӱ[̑إA*©xtö ::š£¡GË™ü¿P£YQ_šËÎÙ·oaaatíÚ•©S§ü®ÃóEŽë¡×ø¨²@×§Ih0Àg³²öõA|uý*Ÿÿ|šx)·æ8ýÍiÂcÃéÑ£Ç#}O5šõ¥ÙÛÛ›¼¼<|}}ÉÊÊ(wÀÿã"r\ÿ½ÆG•º¾LÂ[‘),~a ›|L`Ü÷ÄèchÞ 9{?Ú˵_~dȈ!5“*¨¸µW ԥ撒ùÜg///BCC±¶¶füøñuöŒ§=ÇÆ@è5>ª,ÐumêJøtÌ»x{Žg[Ìeþs‰g4ϰlÆ2’²“˜>úïZǬF³¢.4'''süøqÌÌÌ(((àöíÛôéÓ‡Q£FÕÂÊÏRjÓ,ôšI…[½ër;æ¹-ç¤ñ­Ü¥fšf ™a&Mì:Qº›v·Îžñ´%¥¥¥I%%%Òøñã¥ââb©¸¸ØÔ²‚QÚVoUŽ ëÂ$̼õ+ï¸Ãg¡_%\á®t—v/pùÌe¾ˆù‚gž­¥¥¨Ñ¬xÍß}÷’$Ñ´iS6lØ€V«eÏž=˜™™ÕûÑ©OKŽM‰Ðk|TY I($¶L_Ëð^ýØsš› 8iX@ô¯—éör·:TZŠÍŠGÑ|ûöm¢££ ¡]»vÌœ9€Æ׋¾Š<é9VB¯ñQe~\“ð‡WáòKö}Àåû×y†gx§ßÛÜ̹ɌU3êVäC¨Ñ¬¨I³Á`Wa,]º”œœ|||hÔ¨`ü5¨ObŽ•†Ðk|TY Õ$ÌÏ.äí^=a$'S¯O>CšæÚ×øÇù­XÚXÖ“ÒRÔhVT§9//‚‚òòò˜7o‹/&-- +++ùücó$åX©½ÆG•úQv,ÙNç.lþŠ_ô鸙wà‹¿ætæY\Ü]êQåo¨qGSEÍe£åÈÈH±µµ¥ÿþáî››)dÊ< 9V:B¯ñQe®IxëûÛ sêÅì}¹šó3MhÂüþs‰Ë»Æ„Å2‚ÊßP£YQ¦¹¬0¯Y³†ÄÄD†*_Aæãュeý¾û¨-jαZz* ôÿ2 %sÍ`@ワJFžaM_ájÜU>Šü3Kã_Ī6³B¯×Ó®];ùLfI’˜={6ׯ_G«Õ2gÎSK¬„Úr êÓ,ôUèêLÂà¾äûŽl$½ø4ïÈÁuø63ÇNŽUö1j1+bcc1 ¤¦¦²jÕ*´Z-“'O&##ƒ6mÚ0bÄSK¬µäøaÔ¦Yè5>ª,ÐMÂÌÔ{ŒrÄÔoóàMiœ^³¸šˤ¥ž&RùJ6+$IâøñãDDD‰«««|¨‘§§'Ï?ÿ¼)%Ö %ç¸:Ô¦Yè5>ª,Л„ËÆ/Äݵ+ß$‡SH!CìýC4›/n3ÉtFU(Ѭ¸víh4:DQQžž¿ýg¶qãFª{t”˜ãšP›f¡×ø˜´@ët:^ýufÍš…ŸŸŸÜn0ðööæí·ßÆÇǧR¿¤¤$‡ò¢]7ÖÝDjqÌÛ±kÉvNßÅÕ½•1Œ9räˆIŸ¯×ë‰à¯ý+ÙÙÙ8;;€ŸŸz½žfÍš1pà@ÀôšµéõizI ôáÇ7nÛ·o'++K~KAÛ¶mÙ¶m®®®DDD”ëwýb£=Çp)ç*vØñVç7¸¦»ÎŸ?ð6ÅQ#õ½Í¹ I’ˆ‹‹ 88˜„„ÌÌÌøðÃèÖ­W®\¡Q£F¬^½€N:UºŒÕXšë µéõizI tjj*ŽŽ¥æ‹‹ )))•Ú[¶l)·—ñù÷È#»ÞD†G²'63 åþ2 ëý'NœàèÑ£lذ{{{Î;‡V«e̘1L™2…AƒТE‹j¿Ÿ14×%jÓ êÓ,ô$I1@WS<<00KKK^{í5yšÃÅÅ…ððp¢¢¢ðóóÃßߟ~ýúááá!÷ëÔ©Ï=÷P:m¬+°—ììlÅk¬ˆÚ4«M/¨Oó“ª7;;›ììlrrr¸|ùr}K«5&-Ð:ooo7nLÆ iݺ5NNN 6 ¬¬¬(,,dçΦ'&Ťº&t:^^^4jÔ{{{üýýRqæÌ™˜››SRR¢¨^æÄÄDFމ‡‡nnnÌ;×ÄJKIMMeÅŠ\»vK—.ÉíJÎquš•šã³gÏrèÐ!Š‹‹iݺ5Ë–-”›ãêô*5¿111ìØ±ƒÂÂBe¥º×£ZPô2»Ç5MIuš5 vvväææâàà`b•¿áèèÈž={*íÎTrޫӬÔ¿üòËìÚµ‹€€ÂÂÂäv¥æ¸:½JÍ/”šßÛ¶mcÏž=|÷Ýwr{u¯Gµ èý¸&¢)©N³‹‹ QQQ²cÇŽ:¿¶«®QrŽ«Cé9ÍZP~Ž+êUz~ƒƒƒ>|8}ûö•Ûª{=ªEh'''’’’€ÒµÏe‰~¸=11'''“i¬HušËÐjµØÙÙÉ)%ç¸&”˜ãM›6¡ÓéÊM (9ÇUé-C‰ù˜0aß~û-—/_&77¨üzTRŽkƒâç Õf"V§ÙÆÆ†   JJJpuu•çõLN§cÁ‚œ…B©TŠŒŒ |}}õU@D¤gnܸAëׯ§~ø=zD™™™4vìXš5k-\¸°Øý:uÒƒeùÙ±c‡¾4†5ç|_{{{@ÙÙÙz6*Vû˜Êã;qâDí‹T½Ž óéÑ£zôèQäÚÑ£GK¼¿jÕªºVÒ*ùé–`Í9ß755UªT‰‰‰žÊ†Õ>fÖ|U¡÷"ay "}+h„B¡Ð·‚ưæ¬P(@DHII•••¾uÔ‚Å>f Ö|U!"¢­õ-¢ “&M¡C‡ô­!À3¤R)ÌÍÍáì쌠  }ë0ßb “#h¹\®oÉdúVÐÖœe2RSS€™4‹}̬ùª‚É™™©o`q7kÎÑÑÑHIIÀN€f±Y‚5_U0 ---õ­ NNNúVÐÖœœœ FÐ|ðžmÔƒÅ>f Ö|UÁd€NNNÖ·‚Føùùé[AcXsöóóc.ÅÁb³k¾ª`2@[[[ë[A#\\\ô­ 1¬9»¸¸0—â`±Y‚5_U0 …"¡îaÍùí"!+)û˜%XóU“Z(êÖœ£££™Kq°ØÇ,Áš¯*˜ ÐB‘P÷°æìääÄ\ŠƒÅ>f Ö|UÁd€Š„º‡5g???æ4‹}̬ùª‚É- ukÎ...HLLÔªUKÏ6êÁb³k¾ª`2@ EBÝÚ³L&CBB víÚz¶Qû˜%Ôõ%9áåΗÈ}•«c#Ía2@ EBÝÚstt4 ‹™ù ‹Å>f u|Óï¥ãa‡‡ŸŽˆ•`¥Lh¡H¨{XsvttDbb"jÖ¬ }ë¨k}ü_òÍKÎCèôPøýÏÒ),»X¢Áü%Þ¯/˜ ÐB‘P÷°æ|ãÆ äåå1“ÞØëãÿ‚/) ñâqßñ>â÷Ç膜:¡ÍÍ6¨Öªš,K‡ök +¿ÂæÃb±‚5ç:uê`'ÿ °×Ǭûfe"Ì5 i>i€¨7£­m£êFz2,&4‹EBÖNaÍ9** [šµ>fÕW‘©@Ôª(ÄlŠÉ ÕÚTƒÃ^Xt²Ð·b™0™âŠ„º‡5çàà`lhÖú˜EßäóÉxÐü¢7DCl*†ý{´{ÐŽ‰à 0:‚Š„º‡5gCCîUf)@³ÖÇ,ùfÇdCþ½Ï<Ôü´&ì·ÚÃĆÿgU¾ “#h¡H¨{Xs ÀV€f­Yð%9!fs 4{€;gîÀÔÎ-Ï·Dó?›3œŒ °oß>äääÀÆÆ+W®ÀUå-Z„¶mÛ¢k×®7n\Á3B‘P÷°æ,sc –4k}Ìwßô{és ƒ4P ‘¡}÷íR[TecÚ¥*ô Û´iƒ={öúöí[p],ÃÒÒééé¨_¿~‘g„"¡îaÍùåË—Ø Ð¬õ1_}óRòðbñ Äý`ÙÍ{ j$b:8}DçÎ ®uïÞ^^^øõ×_±|ùò"÷ EBÝÚsll,¶4k}Ì7_"BÂï ¸ïtqûâ`Týß9ÍÞm`ÖÜŒw¾åzĈ¸té|}}!•J‹|ÍÔÔ´à××|222àááOOOœ:u R°ö>?WÆ—kNNN¼qù¯:'%%A$!99Yï.ê^Ëÿ7\Ô¹æääÄY¨ Ç;ÇÓ/ž""1V­Ð1´#âZÅA$!$$ 6T«=xzzbÓ¦MHKKŸQ€ÖúðòòÂÅ‹‘›› XXX`Ô¨Q ÃÕ«W‘™™‰ž={bêÔ©Ï :çÎÓ—²Æøùùñ>÷.,9LMMaaa¤¤$}ë¨ K} ðÃW™­DÔº(D¯åÌš›Áa¯,»ŸÙUßI“&áСCZ²­8zÐåo( _RRRP½zu´lÙ=Ò·Ž€Žxså Âg…#+" â*bØ-·ƒÍ76k/À·Ø¢÷"ayŠ„º‡%瘘@ƒüÛì¦4Xêc@¾9ñ9ˆø&‰Ü~ßÖC¬ÑtGS˜Ú™–úký« ^ä 5E(ê–œó]ósެÀR•ïK ÂË]/qßé>=abc‚æ§›£Å_-Ê Î{ý« &GÐÂJBÝÃ’3«š¥>*×7ãaÂ\Ãᛑ6ßÚÀÎ݆æê‡,ÖúWLŽ …•„º‡%gVS,õ1P9¾òt9Âç†ãaLJÈðÍ€E' ´ómûMög€½þU“#ha%¡îaÉ™Õ4K} èÖ—ˆôgžÍ}†Üø\Z¢ñúƨ;½.DbQ¹Úd­UÁd€Š„º‡%gV4K} èÎ7+" ánáxsù  öøÚh²± ŒkW¨]ÖúWL¦8„"¡îaÉ9?Åñî–|‡¥>´ï«ÌS"jm´x€7—ß ŠC´þ»5šiVáà °×¿ª`r- u+Î …±±±¨W¯ŒŒø{2†*Xéã|´é›á—Ð)¡J!6Ãn¥.h±‰öÆŒ¬õ¯*˜A EBÝÊs||< ªW¯®oa¥óц¯"K狞RXv·DûGía÷ƒVƒ3À^ÿª‚É´P$Ô=¬8ç§7š5k¦gÍa¥ó©¨oêÍT„N EVx Ì ÐäÇ&¨ûeù‹€eÁZÿª‚É4‹EBÖ`Å9?ÏX·n]=›h+}œOy}åér„Í C@d…g¡ú êèÔõ\ëé,8ìõ¯*˜ ÐB‘P÷°â ¨V­š~EÊ+}œOy|“/rgÆí‰ƒ‘µšm†–ç[´AÙ++ ký« &SB‘P÷°âüìÙ3@×®]õl¢9¬ôq>šøæ½Îó¯Ÿ!áh Ögµ`¿ÝÆ5+>;C]Xë_U09‚Š„º‡çððp@NNŽžM4‡•>ÎG_"B¢G"î;ßGÂÑ×3F‹³-à|̹Rƒ3À^ÿª‚É´P$Ô=¬8?{ö 4h¾U4†•>Χ,ßœ—9›†ä¿¸T½õÐxCcZê'ֿ̰ª`r- u Î2™ /_¾„­­-sïÀF¿MI¾D„¸_âpßù>’ÿJF•&UÐúzk8ìuÐ[p4ë_…R¡C“òÃd€Š„º‡ççÏŸš6mʄﻰæ¬Ê7ëY{"ìË0(¤ 4˜ßíµÇ} â¨Û¿>Ñ>h»¯-¼žyéØHs˜LqEBÝÂs~ÐÞÞž ßwaÍùm_’b·ÅâÅ/ ÌR¬¥u„E =¥¬þMÊL‚k p(ààxÐñJ°Ò &GÐB‘P÷°àœ_ ´··gÂ÷]XsÎ÷•>–¯³"æG€ä»•vhçÛŽWÁ(¹JöùîƒãNG 8„ZfµðÛ°ßpàã•lX6LŽ …"¡îaÁùí4 ¾ïšs›æmðbù D¯É ZÀq¿#Ìš›é[M%ªú÷aÜC̼0â@fw˜Õ½VÃÊÔJ†eÃd€f­ Äⶇ,8¿ Yð}–œ¥Røó‡"HqU1šll‚únõ!2ÐÝJÀŠòvÿ¦f§béõ¥Øý`7„õ:`Ïà=hW¯ž-KG¯)Ž€€Ìœ9S¦LÁ²eË ®Ëd2Œ;®®®X¼xq±ç„"¡îaÁ9$$hÔ¨¾ï‚3)Ñë£ñ°ÃC¼z«^Vèð¤læÚð:8\ÿŽãNGìz° V¦VØ;x/îN½Ëûà èyݦMìÙ³зoß‚ë'NœÀ°aÃ0zôh¸ºº"::ºÈfìB‘P÷ðÝ955qqqprr‚‰‰ ï}UÁw笈,<ðéwÒ!6£×Æ^ܨY‡ûghEuzQ7“ÛLƆ>PÓ¬¦žÍÔGïEÂÓ§OcàÀèܹsÁµØØXØØØlmm v,ËG(ê¾;š7o€ÿ¾ªà«3!îç8ø¶öEút˜·3G;¿vHìšÈDp–æJ±àê´^Þ7£n¢e­–ð™ìƒŸ`*8<Ð#FŒÀ¥K—àëë ©T €;ü3** Uì0Ь¬,xxxÀÓÓ§NÀýº›?1=ÿÅçË5Þ¸üWœó´ƒƒÞ†/~ê\ã£ó£[pà}„ÍCHVì–Û¡ÊÁ*ÙŠàââ¢w¿Ò®~úó'4ÛÕ ?ýõLë˜bs¿ÍØßa?º4ìRâ³þþþðôôĦM›––>!"¢­õñá^^^¸xñ"rssabb Œ5 Mš4ÁôéÓaeesss¬_¿¾ÈsãÇÇï¿ÿ®årÁR1(¾;Ï;Û·o‡‡‡FÍ{_UðÍ9éÏ$„¹†!/9Uª Ù‘f°èX8uŽo¾oóìÍ3̹4—Ÿ]Œi>«»®†}{Ú™4i:¤Ãò¡×tÿþýÑ¿•_;zôh‰Ï±X$ä{¾ñ]øî pvvÀ_UðÅYž*G¸[xÁÎsõÝê£ñ†Æ0¨jPä>¾ø¾M¶<ë}Öc½Ïzä(rà`í€]ƒv¡Oã> êèÛ°b09ÍN(ê¾;ÁÐа ÅÁw_UðÁ9åZ B&‡ '6&õMàxÐÕûª>>Œ¾os)üæ\šƒˆ”˜šbõG«1¿ó|˜šàŸoyÐ{º<EBÝÃgç””ÄÇÇ£iÓ¦06æ¶°ä³oIèÓY!S ü«pö DNlj­…öÛ—œþôqLZ >=ñ)ý1)â0Á³‚±¤û’‚à ðÇ·"09‚Vê>;?~ü@á €ß¾%¡/çôéù"²P «Âaj®Uæsúîãš^kJ ΛïÄ»09‚Š„º‡ÏÎù¹Å·…å³oIT†3!nW"¾‹€2[ ‹ÿY ÙoÍPžЯmUf+” ìõÝ‹%×— -' uªÕÁ–þ[0¦ùˆDê-–ÑÈ7:¨W¯œ¶ºƒÉ´P$Ô=|uÎÎÎFpp0êÖ­‹Úµk\ç«oièÚ9ïM‚†!|N8HAh´¶ÚÞl[®à T^ßy÷w„Û%7däf`n§¹™‚ÏZ|¦vpÔôÍÎV¯·àLŽ …"¡îá«óãÇ¡P(Ф7þú–†.Ón§!øó`äÄä J“*pöp†y;ó µ©ë>~“õßÿý=~~ø3„ÿÙü»ïF›:mÊÕ^™¾—/sæÏž&&\°æLŽ Y,²_óóÏïþðñÕ·4táL BÔÚ(ô@N 7}®_» g@w}¬$%ú„ãNGì{¸Õ«TÇþ¡ûá3ŧÜÁ(Å7* 18 ΃AAÀwß•û³t“Z(ê¾:çÿÚúî𝾥¡mçÜW¹xÔÿ^,y‘‰ŽÑì÷f0´ÐÎ/ʺèãG Ðý`wLùk ^Ë^cºËt„º…bªËTˆE OÅ|sr€5k€fÍ€3g;;àìYàüy I“ }–®`2Å! u_ÿùç@ÇŽ‹\ç«oihÓùÍ•7xúÅSä%æÁ¬…œO8ì™vO:ѦoFN–ßXŽíÿl‡‚hS§ ö Þƒm>ÔÚgñõòâÒáá\:cÙ2`Ñ" Jùòñ•“#h¡H¨{øèœ™™‰G¡~ýúÛÑæÃG߲І³2O‰ç‹ŸãQÿGÈKÌC½õàrßEëÁÐŽ/áDÐ 8ír–{[`fl†í¶ãÁôZ ÎÀ¿¾ÑÑÀ§ŸpÁyà@àÉ`Å Þg€Ñ´P$Ô=|töõõ…R©Ä‡ÿAæ£oYTÔ9;*ÁŸ#ýn: , à¸ßµF•½"°¼TÔ7,9 ³/ÎÆµç×ãZŽÃO}B]óºÚÐ+JN\¼¼€U«€¬,ÀÖغøä@ƒ™ ú†ÉÍb‘µM|t¾wï¨ Ð|ô-‹Š8'IBè”PÈSå0ï`çãΨÒX·#ÂòúÊòdXç³?Þþ¹Š\8ÕpÂîA»ñQ£t` àÊÀÍ ²ðpT56–./{?FSB‘P÷ðѹ´ÍGß²(³2[‰p·p‚~ÿΙW"í«i&GÐB‘P÷ðÍÙÛÛУG•_盯:¨ã¬*îŽW‡_bÀÎݶKm!2¨ü‘aY¾×_\Ç싳ò:ÆÆø¡ûXÜu1ªé ý|û-ðçŸÜŸûõvìÞ:£RÝwÂßpsÖ®Õ¾fEa2@ EBÝÃ7ç²4ß|Õ¡,gY˜ O†?,XãzÆpþÃV=¬*ÑðŸ|ã3â1ïÊ<{r ЯI?ì¸M­›j_"7زX¹’Kg4hÀÍÎ>¼X:£¬þMI~øÛ‚C©~þ02Ò¾rE`2Å! ußœoÞ¼ ‘H„®]»ªü:ß|Õ¡4ç×½ÆÃ! –áƒ~ }@{½g ¸¯\)Ƕ{Ûà¸ÓÇžC}óú81ò.»¬›à|í—ÎX´ÈËãÒOŸr˶UäšKê_¥8tˆÛi×.ÀÂؽøí7í+W" Ƙ8q¢¾*‘ÈÈH@­[·Ö·ŠÎQÊ•ôü‡ç$„$Ðó%ÏI)Wê[«w¢ïPë=­ î ƒ4Ïk¥g§ëæÃbbˆF&âRÅD}û…„”«)¢Î ›š:•(1±ðë|‹-zAÿý÷ߘ>}:&OžŒÕ«W\ŒŒDóæÍ1sæLlß¾½ØsB‘P÷ðÉ9?½Ñ½{÷ïᓯº¼ëœ÷&‡>FÔª(˜ Å™h´º‘^òͪðóóÃkÙkLûk:èŒÀ„@tmØþ3ü±±ßF˜›T|C¦"äæ?þ89'N66\ÎÙË‹þªá›Oj*·Ò»];àΠm[îßû÷5kjW[›è5Ý»woôîÝЧO,]º ‰`ii ©TŠz*6ÑŠ„º‡OÎ×®q+ÏzõêUâ=|òU—·¥R<ñÙϳQµYU´8ÓUù“SW’~ðCß}ñ&ë jV­‰Ÿúþ„ ­'h´G³Úüý7W¹ áËq NÌÔ_Âîââ¥8rX°HL¬¬¸ý’fÌ ´¯­uˆ)ŽжmÛŠ]W(Ô§O’J¥E®7®²Ô´Bff¦¾4†/ÎJ¥’êÖ­K”ššZâ}|ñÕ„|çW¿¿"ï*Þ$„žŒ|Byéyz6+Š_œ}¸ÿCÂÈ]D3ÏϤ7²7ºù°ØX¢1c s}ú”;q÷n&uéRØÔäÉD ¥?#¤8ÞaóæÍÉdøê«¯Š}M,ÃÒÒyyyE®?þðôôÄ©S§!!!û¿æÿj×kÑÑѼqaÍùäÉ“ˆGË–-aôo‰]Õ}—/_æUÿ©sí⹋xöõ3x÷‚,[†Æ?6Fö¢lšòÂïæÝ›˜{y.Ú­m‡{/qsît»ïFBT‚v?÷ñcÈÖ¬áçáØØ dëVÈ<=¹k´—š Œ‚ÿý/·o~¸sX° ÕªÖßßžžžØ´iÒÒÒÀ+H#è#G޽½=¹ººÒìÙ³iß¾}tñâEòöö¦éÓ§Ó”)ShÕªUÅžãÛßrºcóæÍ€–-[¦o­’ŸC~ÝüH ùXûЛk:‘–¥RIG¥:ëÜA–ë,i÷ýÝ$WÈuóW®5kÆ s ‰.$ÊÈи¥’èða¢Zµ¸¦¬¬ˆvî$’k Í·ØÂ‹‡¦ 2Dß ñðáC}+h _œHèÖ­[¥ÞÇ_uH½“J·ëݦ}ØG¾í|)+2KßJ'ÓG‡>"¸ƒàšpf½ÊxED:èã°0¢¡C s½{—«©€¢®]‹¦3®^ÕÜWÐZ€o( 233ÉÔÔ”,--)77Wß:F©TRìîXºatƒ$ÐÓÉOI‘¥Ð·Is¤´èÚ"2ZiDp5ßÕœ¼#½uóa))DóæqÑÔÎŽèÏ?¹!°†¤¦}õ‘XÌ5Õ¦ ÑíÛåWã[lVVÿÅUn•Áõëב?þ¸ ÿ\|ð- E–á³ÂñêÐ+ˆŒDpØëËñ–›ê· DD8zs/ÏEtZ4̰̌¶÷ZÌí4FEû¼Â}¬PpóÚ~øHJªUãV~ý5`jª¡7ðûïÜ1‚ €¥%w8·«+`h¨%_ ÷"ayVê>8Ÿ?0dÈ2ïåƒoIdGeÿ«?^zãzÆh{³-êͨ‡˜˜½z=OyŽ¡Ç†b¸ÇpD§Ec¤óH„¸…`~çùÅ‚3PÁ>–H.‚¾~ Lž „…qÓç4 ÎÝ»&pÁyÒ$ 4”›•gøÖ“Ïï„Úâà!J¥’lllH$QRR’¾uÊMò•dò±ö! $ä×Ýr^åè[‰²ó²iå•dºÚ”à²ßnO—Ã/ëæÃ""ˆ†/LwéBäë[®¦RS‰¾þšÈÀ€kªuk"íêò-¶09‚Vê}; 66~ø!jÔ¨Qæýúö}"Bô†h<ðyÉy°ùÚ­¯µ†qmã‚{ôá|%â Zîi‰e7–ˆ°¢ç <žùýíû—ù¬F¾ééÜè8ÿí† àÖ-n9Ÿ(ÜFFM›rû"U«Æm\çë té¢%_žÂdZXI¨{ôí|æÌÀ°aÃÔº_ß¾o£)2)I'“ ®"†ã~GÔ[»Ø}•éü2ý%¾ñú'ƒOÚÄŽ;ФzµÛPËW¡àv"Z²„Ë?T­ÊåœçÍ+×!­×¯ß|Ã¥5D".±~=P»xw–Ï—ç0 …"¡îÑ·óéÓ§ÇWë~}û擟ƒ'Ÿ–Já×É2`ÙÕ.ÿ¸”œÝ;ûDûÀågÌ»2Ùòl,ì²Og?ÅðfÃ˵F‰¾‘‘ÀèÑ\åÎßøðCàÞ=nÿN ƒsj*0>мª¾÷B IDAT9œí쀓'oo3#¼x'* “#háLBÝ£OçüÑóˆ#Ô~Fß}œ|>ÁŸC!U öøÚpÜï±Iéã]9'f&báµ…8pÐövÞ çšÎj·˜¯TÊå6nrr¸Ýæ6l>ÿ\ã³åòÂx¯_Wh^ɾ ÂäZ(ê}:{xx>ýôSµŸÑ—/!vk,ò ©V5‚ÓoNeg@ûÎ ¥{ìãNG 8„Úfµñûðß!™(©ppÞòU*ǹã¥Ö¬Äb`ùrnç¹±c5ÎW¯rÛΜ $'S§r)ŽrÌÀSíË2$L³àÁÁÁ€š7o®o•2Qä*(Ô5”$·©7%x”±Ušyðòµÿ¹=Á$^!&·‹n”’•¢ýº}›¨C‡ÂisŸN]®¦BC‹®ôîуÈÏO»ºšÂ·ØÂdŠC(ê}9?~ðùçŸkô\eûÊSå„”«)0®mŒg[À¢“…FmhÃ9%+K®/Á^ß½ :Öïˆ=ƒ÷À¥®–g0ÄÄ@6oªžäf CnÎ[çΚ;§«VqSåär Q#.K¢âXÁ ÁâÏÝ»0™âŠ„ºGÎD„cǸƒGÇŒ£Ñ³•é›õ< ~ýr5f-Íàò‹ÆÁ¨˜3á·Àßà¸Ó{|÷ÀÊÔ û†ìÃÝ©wµœ33wwÀÑÑ'Ouëré{÷4Îr9wö_Ӧ܌Œ*U¸”u)Ç VîŠABŠC€'ܽ{—PÇŽõ­R"©·Rɧ·20pP å¥UþæúS·Ý vœ›rv %JË~Pòòˆöí#ª[—Ë?˜˜-YR®m@‰ˆ¼¼ˆœ¹¦D"¢/¿$zõJ»ÊÚ€o±…É´P$Ô=úp>|ø0`âĉ?[¾ ¿'  wò^çÁf® Zžm C‹òg 5u–æJñÝÕïÐfoÜŠ¾…Vµ[Ág²~ýøWÔ4ÓÒÁzDÜÊ¿-¸s¡âãÏ>BBà7b7½BBB€!C€þýà`ࣸ™xûö©·Ø¤"°øsW FÐ< ++‹¬¬¬ÈØØ˜’““õ­S¥BIÏ—r'mß0¸A±»c+÷ó•J:t’êoªOpU[[¶ÜÝBy -Þ}|ŠyÝ»w¹÷͈åFÉùûf4iBäéY®E+¾Å¡HX °X¬¨lç¿þú ©©©øôÓOQ½zuŸ×•¯"ëßeÛ'’``a€æ'š£zÍýT¡Žsxr8æ\š¯/Àg->æ~›PϼøaÊåæéS`ñâÂe{­[sÉá~ýŠ$†Õñ}ó†{tûv ;›;¤uÉîDmí)«‹?wïÂdŠC(êžÊvþå—_S¦L)×óºðÍ}•‹À‘t" ¦v¦p¹ã¢µà ”—…å7–£ÅžðŠð‚ƒµ®~qÇ>=¦½àLŸÎ¥3Ξå64úí7ÀÏËI¼Sµ+Í73X»hÜøñGîÑÅ‹çϹ••œ6îŠABŠC@ÏDDDjРÉ59@N‡d<Ê ; ïzØù!å$VÞ6¡Â.Pãm î ÓÕ¦´ææÊÎËÖÞ¤¦}ÿ=Q•*\þ჈6n$ÊÒüè­œîܿڵ œ9“(.N{º• ßb‹ÎFБ‘‘8pà¶oߎ›7ojµm¡H¨{*Óyÿþý€©S§ÂÀÀ \mhÓ7ùb2ü;û#':µÆÖB›¿ÛÀ¸¦qÙjÈ»ÎÑiÑá1ƒÿÌm¦ï0Á³‚ñ}·ïab¨…!hN7w¹In¸«T Ünse,Û{ÛW©Žœœ¸ò¸E„!!ÜTººu+®[QXü¹+é`=gÎZ°`yzz’——mÙ²…&L˜@Ož<ÑJû|û[N üdggS­ZµH,St9W¤i ¥RI1ÛbH"–z±â)+¡ª•#Ï¡õ·ÖSÕ5U î Û-¶t6ä¬ö>@¡ :z”¨Q£Âyn“'—k RItîQË–…µÄÁƒ¹C[ÿ ð-¶è¤H¸~ýú"Éù~ýúà’öoó÷ßãøñãËåhÒ¤ –.] P*•˜1c ¡P(ðóÏ?yN(êžÊr>uê1|øp4hРÜíTÔ—ä„ð¹áˆÛ±‰N‡œPë³ZånOd2î'ÞǬ ³ðôõS‰ð}·ï±¤ÛT5ÒRß_»,\Èå•`ð`nƒ£-4nêêUV¬¨ŠÛ·¹?wéÂí&Ú­›vTµ ‹?wÅ å ûí·‚ÿÞ¾}{™÷÷îÝ»à¿% mذˆˆÖ®]KÞÞEO6l˜–,+‡§OŸê[Ac*Ëùÿû k×®U¨Šøæ¥æQ`ÿ@’@B>µ|(ínZ…\Ô!>#ž†lR°Ø¤÷áÞô4I‹}îïOÔ¯_á0·cG¢7ÊÕT@Ñ ADÀS¸ÑóùóüŸ2Wžwâ½A@JJ fÏž¬¬,ôíÛ·Ô{<ˆ?þ¸àϱ±±°±±ØÙÙ;\SØnT÷T†³¯¯/îÞ½ '''ôêÕ«Bm•×7ëEy Y° f-ÌÐò\K˜ÚU` µ2P(Øã»K®/AzN:êV«‹-ý·`tóÑåÚ£¹‘‘ÀÒ¥\‚ìí¹|óÈ‘¯¥Žˆ–-þøƒûs£FNXµŠÛMTÌÀü/îÞEgÝܳgODDD )) }ôQ‰÷mÞ¼2™ _}õUÁµ  ** Wl|÷Wß§OŸÂÃÞžž8uê $$¤ …’_àË5???Þ¸ðÉyóæÍ€Y³fA$U¨½£ÿ$Mž¿¿N~@õÕQå`(k)uöýþûZ®j‰9ÍAfn&d @ˆ[Z¶FVVVÅ>#9~ãÆŽŽ9z²š5]»àwô(0jBBCÕnïùsfÍýðÇ€µu¶l‘áØ1?4k汘?ïii×nÿ›‹)ë>xzzbÓ¦MHKK¯ ¥8f̘A2™Œ^¾|I#GŽTyÏ‘#GÈÞÞž\]]iöìÙ´oß>ºxñ")•Jš6m¹¹¹ÑôéÓ‹=Ç·_C4'::š ÈÚÚš233+ýó_}EÞ&Þ$„ÂÜÂH™§»ß×_g¾¦/Ï}I"wÁÔù×ί¥;™ŒhÝ:"KK.•afF´|9QzºÆM½zEôÝw…³ï,,ˆÖ¬!’Jµ£Ê|‹-•2ZÛs[ǧÕöt>PEѵó¼yó-]ºT+í©ë«T*éÅò$„$b ÅîÐݲm…RA¿úýJÖ¬ î ë Öô«ß¯¤P*4rVIN·™Qýú\450à& ÇÇkÜT\Ñ7ßfSS.P¿~]ô>ÖÞãòø¾zÆŒtøða ¥èèhºví}óÍ7ôàÁ­´/ u.“““©ZµjdbbBñå(ªPÇW‘¥  ÏƒH Ý4¿IÉ—t·çG@|uþµ3Á$rї群יE#^¹ú87—è—_ˆlm €#Gr»ßkHt4‘›·QÀèo¿-y‘ kï±P$,&MšÀÐÐ?ÿü3233ѲeK,]º´\{,¨B(ê]:ïÚµ R©3gÎD:u´ÒfY¾¹ ¹x2ì Òï¥ÃÔÖ-Ï·„Y 3­|öÛ¤ç¤cùåØñÏ(H¶uÚbÏà=èdÓIcç"ÈåÀ‘#ÜN÷/^p× âöjîÐA#ÇÈHn¦Ý@^`fÆÆ=oP«”™…¬½Ç¬ùªB'EB‰D‚-[¶ì™ñøñc­g@XIXèÊY*•bÛ¶m000Àwß}§µvKóÍ|’ ¿N~H¿—‹-àò‹Öƒ3áø“ãpÚé„­÷¶ÂÌØ ;îÀƒéT粜 ˹ òœ€)S¸àÜ¿?·aþ… çˆ¦M¹í>«Tá62ŠŒä68*-8«íË#XóU é Å‘žžN›6m¢ÈÈÈ‚´ ß~ PŸ 6?~|¥|^ò¥dºi~“$PÐçA¤ÈRhý3B’B¨÷áÞsšÇŸOñLÝÈåDGŽ5mZ˜ÊèÛ—èÎÍýBˆ¾ø¢pëO++"ww¢7o*¦ø_„o±…ÉÍ’„"¡îÑ…³T*¥š5k’X,¦­¶­Ê7vGlá²íåÚ_¶™›Ißÿý=­4"¸ƒšílF’õŸWÕÇr9·,Ûѱè¾Ì>>û=yÂé*qÍX[s³2Òʹ‡µ÷ø¿P$d`ºyq„íFu.œwî܉¤¤$|öÙgpttÔjÛoû’œ>'ásÂ!6£ÙÑf°s·ÓÎB9zλœ±öÖZaCŸ p @O»žår†R ?´l Œ„†={ÞÞÜrí.]Ôn705Š[Í}ìP³&·hd$ðý÷€…æÇ'÷eÖ|UB Ž ùö·œ@Ù¤¦¦Ò|@ZŽê’—–Gÿ]¶]Ó‡Ro§jµý)/hèC Òç¨Ô¨ò7¨P8AÔ¼yሹ{w"‰Dã¦|}‰>ù¤°™:uˆ¶l!blà«Wø[˜A EBÝ£mçÍ›7#%%“&M‚ƒƒƒVÛ8ßìÈløwñÇ›KoPÕ¹*\þqegíÌøÉ‘ç`í­µpÞåŒsaçÐøƒÆ¸0öN9†– 5oP©„ßO?mÚ£GAAÜ(ùÚ5àÆ nô¬&÷îq{ µoÏí»ocìØÁm–ÿõ×€¶ö bí=fÍW%$Œ tL||<™™™‘±±1EEU`´Y iwÓȧֿ§m÷¤¼Tí×w5â*9ìp ¸ƒŒWÓ2É2’åÊÊטRItæ QëÖ…CÝÿýèÊvR*‰®_/º’­-ÑÞ½DÙZÜÛÿ}ƒo±E8“°`qÛCm:¯\¹™™™˜7o6,Çh³ '"`bŒsQv}Øoµ‡È°âù渌8Ì»2ÇŸôoÒ;î@S릚7Fœ;ÇÍ[ö÷ÈÚ·GÕÕ«‹ýW99\^yëV.× pûïÿ=ðÅ€‘‘æjêÂÚ{Ìš¯JˆÁ´°’P÷hËùéÓ§d``@VVVZ?­[©TÒ‹ܲíâó=F+íæ)òhËÝ-d¾Öœàª¿©> :Y¾Y ù;Ü·kW8ÔmßžèÂz¬v3 D+V-pMþþ;Qž–÷. ÖÞãÿÂJB&4ß:Q d Dè§Ÿ~Òj»ï.Û~}áuÙ©ÁíèÛÔjO+‚;È`…Í¿2ŸÒ³5ßxˆ”J¢‹‰:t(Œ¨..\°Ö Ð?~L4ujárl±˜hÄ¢[·ø¿3‹ð-¶0 ‡ ¢oxøð¡¾4FΗ/_&Ô¤IÊÖbb4çU=üð!I ¡»¶w)ãQF…}“2“hÊÙ)³3ºèFkÞRItù2Q§N…¹M¢³g‹EÔ’œ ¢ ˆúô)lÂÜœè믉ž?/Ïw§X{Ëã+h-À·N(NNN9:::}ú´ÖÚ-rÚöÿRNBÅNÛV(´ÏwUßPàªùcM:pXót†RItõ*QçÎ…QµU+¢Ó§ÕêffíÙCääTØ„ÑæÍå_\" |‹-B‘°`±XQQçmÛ¶!44ýúõðaôâ”|!ÁŸC!U ÖØZpúÕ bSq¹}ýâý0ëÂ,üóòˆ ¬³°ú£Õø Êê7BH$Àòå€w­E ®8|x©Gä;¿| ìÚÅíñæ ÷µ®]o¾>ù(çAçZ‡µ÷˜5_•ƒ#h¡H¨{*âMfffddd¤•%ÝJ¥’b¶ž¶¹*²ØWß”¬r»èFâb‚;¨ýÏíéÁËrl…{ã·¨$¸ëìLäáÁå(Ôàäɧ4v,‘¡!÷¸¡!ÑØ±DZÚ•Wë°ö EB=Á·N(Êðáà -Z´¨Âm)r:#”$·©7%x$”»-¥RI¿þNµªMpY­·¢=ö\¡á7o}ôQa`vr":vŒÛG£ är¢S§ˆºv-|¼zu¢Å‹‰buwv€€šð-¶0 …"¡î)¯óÙ³g ÙÙÙUxsÜ7¹Ð;€$ÐíÚ·)ퟒ±eù%QÏC= Š€ÏL¤©†ÁÞLJ۸(?²:8p©˜ÓÒ¸\²ÝÛ KÒž=ì,Åfí=Š„z‚o(À‘––Fõë×'táÂ… µ•–I÷î‘zÐúeEe•«iŽ”^]H†+ î »[ÐÍÈ›š5r÷nÑ%{ööD¿ý¦ÖäçϹÙææ…÷éÃÍÒP3"P‰ð-¶EÂJ€ÅbEyœ.\ˆ—/_bìØ±4hP¹?;õF*žŒxyŠÖ[Ãù¨3 ª•^){×—ˆà≹—ç"&=ÕŒ«Á½‡;¾êôŒ Ô\nwÿ>Wü»|™ûsãÆÀ²eÜns†%ÿè·o[¶žžÜFu&&ÜfùsçrÖ©ræ;‚¯ GÐB‘P÷hêü÷ß²¶¶¦„„òç‰ãöÇÑ Ã$„žÍFJ¹zSÔÞöxAƒŽ*HgŒ:1ŠbÒ4XeøàÑàÁ…CÞFˆ~ý•;°rr¸•}íÛ>Z»6·PU—°ö^¼¾|Aë=@ÇÄÄÐäÉ“©C‡E®¿xñ‚œÉÕÕ•¶mÛVäk|ëÄ÷ôôt²³³#tüøñrµ¡”+éÙüg$„nÞ ¸ý%œ\Z YyY´âÆ 2YeBpÙo·'¯g^ê7ðð!ÑСEwúå—2óë×Dk×Õ«Wt ôÁƒÂÆE¬Á·Ø¢÷íFmllpàÀX[[¹.‰`ii ©TŠzõêùš°Ý¨îÑÄyÞ¼yˆŒŒÄˆ#0zôh?K!UàɈ'ˆÙÃê†h}µ5êN­«Q»ÎîBË=-±üÆrˆD"¬ì¹g>F¿&ýÊ~8 6 h׎ÛШAnRrX0mZ‰;…„®®ÜíßÄÇC‡ׯsMNšÄ¥6J‚µ÷BðÕēǀT^W(Ô§O’J¥×øö·Üû̹sçÕ®]›5~>+:‹´~@HèžÃ=Ê ÓlJCLZ <1² 1èè Šx¡ÞÃq[ä{mlˆvï.uØ«Tr;ƒXøXÕªD³g……i¤.ÀCø[ô>‚. ±X KKKäåå\‹ŠŠ‚‡‡<==qêÔ)@HHd2€Â¿9ùrM&“ñÆE›ÎW¯^Å”)SpÇYÕ¬YS£ÏH¿ŸŽ3.gð:ð5¬zYA´O„ªM«ªõlž" Ž-€ãfGüü'j&×Ä™1g°±íFÔ1©Sú÷ûä Bú÷‡¬U+àôiøÕ¨ì܉  ›801)ölv6°l™Zµúõ Á¥K2ØØ_}凨XÀÍ-õëkÖÏwîÜáÕÿó²®Éd2Þ¸¨síõë×jÝçïïOOOlÚ´ iiià¤çtff&͘1ƒlmmÉÕÕ•öíÛG/^$oooš>}:M™2…V­ZUä¡H¨{ÊrV(4pà@@®®®·Ÿà‘@Þ¦Þ$„B¾ !E®úsÎnFޤ滚ÜA†+ iѵEôð‘s^ƒ‚ˆÆŒ)ƒ«««Zm¥z§"hTò’ò`ÙÕÍÿlãÚÆ¥>“’•‚%×—`¯ï^êwžÁ{жnÛ’}_½V¯~û P(kkà»ï€Ù³jÕŠ=Ã~ýË/@j*w­Gn›Ï!Ct¿Í'kï…ૈÁ´P$Ô=ªœW®\IÈÑÑ‘ÒÕZ*•JŠÙC7 ¸•a³ÃH‘Sz1P©TÒ!ÿCTóÇšwPõ ÕégߟI¡,å¹/èé§ŸîÛùÁDkÖ”8ü½{—«p·qn?¿2¿%­ÂÚ{ñ>øòmÍd€æ['¾œ?žD"U«V‚Õ8ìT.“Sð.ßìmâMqÊ^ø8á1u;Э 8õìTJÊL*ùÈH¢éÓ ³•ѪU*ÉËã¶jþðÃÂ4FDK—Åi¾hQà? ßb “Z(êž·CCCÉ‚ÐÉ“'Ë|6+*‹|Ûý›o®‡Òî—~^Szv:ÍóšG+ î Ö{ZÓíèÛ%?MäêÊ }ÿ­ä=œ1ƒ(µxn:%…è§Ÿˆ6,º¯þ/¿”:‰£R`í½x|…­øÖ‰ÿeRRRÈÁÁÐâŋ˾_’B>5|H ùu÷£œW%Ÿ¨T*éÄ“TS}‚;È|­9m½»•ò%lãC4kVáÜ7 ¢e˸(üááDnnDff…yÀ"//á4l’á[lŠ„•‹Å ™LcccŒ3aaa:t(V¯^]âýD„—Û_"b^HA¨?§>šlj±‘êŪáÉáp»ä†+WŸ·øûmD=ózÅoދ֝çöÇÈÍÌÍ ¸j^õê¾UªT…·7·Íç¹s\X65¾üøúk Y³Š÷‹6aí½|+&tff¦¾4"::NNNúÖЈ¨¨(ìܹW®\A‹-pôèQˆK8U‘¥@ØŒ0$I€ØD Ç_Qgb•÷fåeaÏ:l¸½¹Š\8Z;b× ]èݸwñ›_½* ÌÙÙ€™0o÷Ï[›kåäÛ·GÃÃà ܵºu77.8רQáîÐ ¬½‚¯ !Å! ‚Í›7ªU«E–²J#+2‹´å6;ºcs‡Ò”<»ãBØj´µÁTeuZ{s-eç©Ø˜èÕ+¢o¾!25årffD %-&&­\É­ØÎOc¸¸9ÂíÍ,  )|‹-Lh¡H¨[N:EÈÔÔ”îÞ½[â}o®¿)È7û÷ð§œÕQ1*5ІV0;ããcÓ‹”ÅoLL$úî;¢*U ·‰ûî;îú[úè!y{³•_fí½x|…­øÖ‰ÿ%nÞ¼I&&&$‰èôéÓ*ïQ*•½9ºp~óWa*7;Ê‘çÐú[ë©êšªwÝV;ú+ä¯â &'sÇZçWôLM‰¾ý–Iÿ‹BAtñ"Qß¾…£åjÕˆæÎ%ŠPswQ²à[la2- uÓ'OðñÇ#''›6mÂðáËݣ)öeŽ&@l*†ãGÔ™P<ß,y!Á싳ñôõS‰°¤Û|ßí{T5z«RS¹ŠÞ–-@F·»ýܹÀÂ…\€L9lÝÊm¶¶ÀW_qgüYZâßûØèã·aÍYð­|˜ ÐB‘PûDEE¡ÿþHMMÅÂ… Uúš™'#ž@ê/…I´8Óæí̋ܟùWçãÇú4îƒw±†cáMééÀöíÀ¦M\62fÍ/llp7víâêƒùètéÂMÜøä“âg¶²ÐÇïš³à«HHq¼÷ÄÇÇ“½½= É“'«Üþóõ…×äcýo¾¹§?å$Í7ç)òhÛ½md±Î‚઻±.|¼h[R)ÑúõDÕ«s9 CCn%à[EH__nºü5(††ÜN¡ÿü£³o_@ ¾Å&´P$ÔÉÉÉÔªU+@ǧ¼}úPö;gñeEgÑÃÎI ݲ¼EIgŠNs{ùš¦ý5­`vFç_;Sà«·ö‡ÎÊâöìÌŸ'ÇíÓLÜ6ŸÛ·5n\˜¸cKØT@@§ð-¶0™ƒŠ„'##Äýû÷ѵkWxzzÂä­#¨cNÇ jzäoä0ï`ggTiT $%úÄÂk ‘œ•ŒUkàÇ>?bb›‰‹ÄÜj¿€5k€ØX®ÁQ£wwÀÙ/_;{÷nóÙ«ðí·ÀÀ@ ëaJ…}\¬9 ¾•ïU‹EB>!YÌ”³IDAT•J1xð`ܹs~ø!.\¸333€2O‰ç‹žCò©ò7rØ|mƒ¶>m ‚sÀ«t=ÐÓÎMÛ¬7˜ÑnBÝB1¹ídˆå à×_`æL.8'N ×&q 33 àï¿ÁƒËœþõ±:°æ,øêRïÔ­[7@íÛ·§”·6*-¥‘–Fs/Í%ñ 1ÁÔvo[ºsûb^ÑáÃÜ1$ù¹Š!Cˆ>$…‚è¢^½ ¿deE´hQlle÷¥Ã·ØÂä:9Þ#äñ®o2220`Àܺu íÛ·ÇÕ«WaeeH¾˜ ß6¾H¿“󿣯° "{| Ž;±íŸm076ÇÎ;ñ`útªÛøã ys`âD "è߸wÙ'Ïa¿Ÿ Z´àFÆ×¯s'˜ÄÄëÖõëkï{ãKkk΂¯ =Ž cbbhòäÉÔ¡C‡"× M›6\]]iúôéÅžãÛßr,ðæÍ›‚‚`§N FΊ\=[ð¬p–Æ×á§žå¦4›˜Τ5ŠèÞ½ÊùõÝÇå5ç÷Á—oš—)ŽØØXØü»¢ÌÎÎ111E¾. Õ'&&Ý»wG@@z÷î ///XXX ùBÑ”F;ÿv¨1¬þ ý λœ±ñòFaCŸ ðÿÒ=ƒe@‡À°a\ѯS'×HVÜÄ=Ѭwøª‘·÷rDpâЩSå|Ÿ,„Xs|+^è  ** ‰ ùzFF<<<àéé‰S§NBBB “ÉæžørÍÉÉI/ŸŠŽ;"44ü1V­Z…*ÆUpeÚ<òò7r¤MC[Ÿ¶¸xƒ Â'Ç?ATH>íö)Î÷9·d'wí¿Áƒ‡Ò¼9ÒNœÂï³ï¢ÙWÖèÕ[„ BP¯ž ?ýœ?ï‡-[€ììÊý~óÿÍ—ÿçÿEg'''Þ¸¨s­aÆjÝçïïOOOlÚ´ iiià¤ÇGff&͘1ƒlmmÉÕÕ•öíÛG/^$¥RIÓ¦M#777•9ha%aÙÜ¿ŸjÔ¨Aè‹/¾ ÜÜ\•)ì¼lZí½šLW›ÜAM¶5¡‹aéáÞ½\ú"?•ѪeüîIë×)©~ý¢û/=J”›[éßbX[åFÄžóûàË·/rК·Nä—.]"333@sçÎ%…BA¯Ï½¦[Õo‘òíàK²ç2ºòì 9ìp ¸ƒLV™»Ä²îùõî]ä„ÕW»NÒÜ9Š"çû Jtã[û/ ”ßb‹°’°¨ÌM‡Æ´iÓ —˱nÝ:Ìw›g³Ÿ!noÀæk˜.1Åä“áä`?;šÍƒýúŸ“îœs“&ˆ° KGãÔ(•Üù~®®\ŽÙѱ$ýÀâª1Öœßʇ—9貊„Å!"¬Zµ “&M:t³zÏÂC—‡ˆÛ£šFhv¦Î>‡f¿4ƒGl,lpªï~\ô±…}ÇÀÉ“ ºu4wzYãòÏqò´jÔV®äæ/ïÙÃ¿à °YbÍYð­|˜A[æïÒκޓ677®®®8xð ªU«†?Oü G_GøOõ)Öƒ­‘¶" ýôãÀG0â»v_aÙ]cTëû “,-4t\ƒ¾ÂímܨÃÑøî;`Ü8nôÌgXÜ÷—5gÁ·òar-¬$,$%% ÀÁƒQ¿~}\;v 5WÕDä²HˆLD¨»­.¶LÛ‚nç»áQÂ#toЦßàlj¿£ÚÚ …Aƒæ£sçhùû"Üö¯Š¶m üÄZÂ÷à °¹jŒ5gÁ·òarmmm­opqqÑI»ááá2dÂÂÂжm[ì»™Ÿe"+3 æÌ¸0Þ CJ` j™ÕÂFÓO0ÞýD1> ±¡§`jŒ;î\ä¦1vé,Y ˆDºqÖºêc]š³à[ù0 …"!ð÷ßcÔ¨QHIIÁCðƒáHÿ.ÆßÃÍÁ ÷žÜƒ"Ì®1«÷?‡UÀ/€g->Á´„µð¾ã è× Ìݺ"‘îœu k¾{΂oåÃdŠã}.vî܉þýû#%%sFÎÁ¿—Á¸±1®ÿxݬºá^Â=t°h†÷Za§ÛEX„ ʶZÜFÓ'žðNrÆðáÀƒ€—н{apÖ¶seÀš/Àž³à[ù09‚~_‹„999pssÃþýûallŒ5=Ö ÓŸ €ÒRÌr™…i >0²Àºgv˜vè ˆ¯Ùs¤ëp*j D?X´ˆÛ„N×Εk¾{΂oåÃäú},ÆÅÅá£>ÂþýûQÛº6öÔÙƒN×;Ad-Âñ9Ç1´ÕPÄÈc09ákÓ1ãà#¤V³ÅT£Ã°IòÇ9Å`̘!BXpäHéÁY[Ε k¾{΂oåÃäú}+Þ¾}#GŽÄ«W¯Ð¶A[,‰[ëdk$vL„[7$™%¡¥¢vÿ‘†®ÏaboÅK±+c& «šàë9ÜqRšì¿ÌZ…5_€=gÁ·òa2@¿/EÂü|ó·ß~ ¹\Žáµ‡Ã5æÿí}TUe¾Ç?D Ž&„„Öj¨` æïWÃÊ7¤1Ó£x ì’ŽcùÖ`«¥•/)ZˆŠ£Òà0S+ßg”ÖÀŒƒÊšt­l8‚.¯WC\xð¸ïŽ8¾œý÷ŸÏ_úè>|øéù®‡ç»÷:Ixxz°>~=»nÄÇÒ’eû[ñzþ9œnÞ,â7|P; ÷Ö¾ÌI†”ðóÓÏÙ(¤ù‚þý܆8› i¾ ÏYùêÈ#ŽæRjšÆÚµk‰ŠŒ¢´´”H"ÉÐ2(‹)#iÊdFØK8²²eÇçðŒç·´™mãD¹; >Øpþ1g³"Íä9+_ý¹ƒn%aUU6›ÜÜ\Üqg*SéÝ®7oÇ¿ÍãµÇ)úþyn4}=ÞgprÅs¡CcÍŒ4_ç¬|õGäZzI˜ŸŸO÷ðîäææâ?Z>¤®ó¦ónáqÒ7öbÚ÷_³×–ÞoCX¾\ßp¾“³Ù‘æ òœ•¯þˆÜAK- ëë뙟6Ÿô÷ÓÑ48âÑ~+^ø˜a'O°kM–Ô¾%qŸ½ëF§NÆ;KAš/ÈsV¾ú#2 %–„$¼”Àᣇñ‹–œþåiržx“ ò`ç™ù¤šÅÜÅÞ„…m,¯`‘æ òœ•¯þzÄáp8HHH ))‰¹sç6¬———ÎôéÓY¾|ùm×I* 5M#ý·éDt‹àðÑÃt¥+süç°kR¾ßÌ”¬2º~˨#ï²i»9Âä,Ò|Až³òÕC:''‡øøxÖ¬YCUUUÃ@- V«•ššn»NJIxúôi÷Ìâ÷S__ÏD·‰<=ði*#°x«?Eîÿ ¬p#Y{'"ÂhÛ›‘V°HóyÎÊW èÊÊJ¦¢¢¢á×lذŒŒŒÛvÌf/ 5Mc˦-„…†±§`þø3Ó&§Æìe\Y^G¶ážSÈ'#yöY£m‚Eš/ÈsV¾úch@a·Û°Ûí a}777¬V+õõõ7­ÿðÃlÛ¶¼¼0ô.///6oÞ|Ç?‹uyÙJÂóçÏc{ÉÆü€Aîƒhs•N'‹¸Ðr}ó<0 ½Á–ãäÉ“¢Îð¤ù‚ªº*üð㿆ðøß¸ra q¿§g/ËÝ_Ä„Hû-Íä9+_ýQOÞ'gÏœeXÄPÆLCU]Ïy<ÇK}:ÓÎ3˜è·JXR<ª!œ%–Òœ¥ù‚I¨i™¿ÍäÍ´Tª¯^¤íèEg'O½°…ÄYþ´¸eªŸh’æ,Íä9+_ýÐF=Ih/³“0p<§ èçÕ^?wžÊÄ•q. @iå Ès–æ òœ•¯þˆ<âл$t:,š´°°0 Nâoñgt—hFD>Gêç'y£ëp™O4Is–æ òœ•¯þˆÜAëYï)&qT"G/Å 7¢Ûöf@p^NÏ"b°ÿ=½†Ä²Bš³4_ç¬|õGäZ’°¶¦[ß)ôÔ›£—ŽäHbXïÌ^Ì¢C;ï9œAfY!ÍYš/ÈsV¾ú#rý K¼óxcöLìΓxàAl‡ÆôÌäìÅxú4~dË iÎÒ|Až³òÕ‘ý J³'Îòj¿_±óÌn44:µz’!]:2kÝf‚#ï}Ç|+Ë iÎÒ|Až³òÕ‘GM]jW5ÒǽGX§0vœÙ…7Þ ~†•‹W±âȾŸÎ ³¬æ,Íä9+_ý¹ƒnÊ’°è‹"¦I¢èò!ºYŸf\¿!¼™³”V^îMò5$–Òœ¥ù‚í,o ±¬æ,Íä9+_ýyýc%¡¦i¼=tëwoâŒv†–´d`@+ÿ¸…§"Cu´¼Ä²Bš³4_ç¬|õGäÚUI¸7k7½½z‘¾ëÎhgèâÕ‰U¿ù˜Ý§ÎÀm*iÎÒ|Až³òÕ‘}kIxñÜE^zb#'ÅStùmÝÚòZÔhŠÏ•2%=É ËH,+¤9KóyÎÊWDô–„‹Æ¤Ñ­}W¶W|IuĶ‹$?ÿk>;˜CËŸyhy‰e…4gi¾ ÏYùê¡íp8HHH ))‰¹sç6¬_½z›ÍÆôéÓ™:uêm×Ùívþš÷5ÑD‘öù"N^­ s«'ùhæ8ûÂcÂôü6îJnn®Ñ Fš³4_ç¬|õÇЀÎÉÉ!>>ž5kÖPUUÕð#I~~>;wfõêÕ„„„ŸŸÓu¥ÿ†!£†QXS„Õb%±Û‹”\8Æëý߯]qw°÷Y?¤9KóyÎÊW èÊÊJ¯Ý‹LEEÅmë;vlX¿ÎÙÎs‰KÄ´Žä/{þ̦æÒÒÓÇw¢¶¶Öh…F#ÍYš/ÈsV¾úcèmvAAAØív¢££±Ûí ¡DAAåååÄÄÄÜt]xx8=ö W.ºI¿Àºª««Ù±c‡ÑBš³4_çÜ\}«««©®®àâÅ‹Z«QX4M+ž1â‹;l6­[·ÆÇLJÐÐP‚‚‚2dS§NÅÓÓ“ÚÚZÖ®]k„žB¡PŠ¡}7S¦LÁ××—6mÚžž\+§M›F‹-p:¦ pWÎååå >œØØXºtéBJJŠÁ¦×¨¬¬$--’’<ذnæ»r6ëŒ÷íÛÇÖ­[¹rå ¡¡¡Ì›70ïŒ]ùšu¾ÅÅÅdddP[[K`` .\¿¥`êÛìî·D4W΋«ÕJMM [Þ 00ÌÌÌÛžÎ4óŒ]9›uÆqqq¬[·Žõë׳ÿþ†u³ÎØ•¯Yç ÁêÕ«ÉÌ̤°°°aÝÕûQ ¦èû-Ä•spp0lذŒŒŒ&ÿØ®¦ÆÌ3v…Ùg¼~ýzFŽÙð{³ÏøV_³Ïwûöí :”èèè†5WïG)˜: ¯—ˆÀm%âõõòòr‚‚‚ s¼WÎ×qssÃjµR__o„Þ=cæß 3ÎxÙ²e8Ž›ŽÌ<ã;ù^ÇŒóxñÅÙ±cEEEÔÔÔ·¿Í4ã{ÁôgÐÒJDWÎÞÞÞdggãt: i8×3‡ÃAjj*;wîdèСôèÑCÄŒïälÖggg³`ÁžþyÜÝÝéÞ½»©gìÊ׬óصk_}õuuu´jÕ ___FMhhhÃûñ‘GaÉ’%F«6 S´B¡P<̘úˆC¡P(fT@+ …IQ­h–ìÝ»—´´4ÊËË;v,𦭤P4ЊfÉõ‚ë•W^aÕªUX,£•ŠF£ZÑl9uêV«µY|²†âáD´¢Y²víZúôéCVV©©©.?&M¡03ê6;…B¡0)j­P(&E´B¡P˜Ð …BaRT@+ …IQ­P(&E´B¡P˜Ð …BaRT@+ …IQ­P(&E´B¡P˜Ð …BaRT@+ …Iù¤W|ý_a IEND®B`‚mpmath-1.0.0/doc/source/plots/ellipf.py000066400000000000000000000003431316273626600200450ustar00rootroot00000000000000# Elliptic integral F(z,m) for some different m f1 = lambda z: ellipf(z,-1) f2 = lambda z: ellipf(z,-0.5) f3 = lambda z: ellipf(z,0) f4 = lambda z: ellipf(z,0.5) f5 = lambda z: ellipf(z,1) plot([f1,f2,f3,f4,f5], [0,pi], [0,4]) mpmath-1.0.0/doc/source/plots/ellipk.png000066400000000000000000000276271316273626600202240ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœí{xTÕÕ‡ßH0ÌEAT ¨`âQ¼ V¼€x)Vl½R­Úý,ˆ Ÿ( ¨ MÕ*Š€ò)Z•¯IB¼q)Æ„H’óý±:I† !sÎ^a½ÏsžIÎÌd^Çá—µöÙ;Îó¼v†aNÑ çnA‹†aÑ4ZÀ0 ÃØ3ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽbm†á(ІaŽÒ0È_³f ?þ8ÅÅŤ¤¤pï½÷‡¹úê«IJJ¢yóæLž<9HMÃ0Œ@ˆó®¿~ÿžãZ¶Zâ=z4£GÞã}ýû÷¯öyÚ›„®Ôçj‚VoÐë®Õ‚w/-…… ¡A920&ðGm°&¡ÿhõ½îZ½!x÷·Þ‚~K»[µ Tå€PÐÚ›„Ñê zݵzCðî‘æàŪqÀ¨ h»’дzƒ^w­Þ¬{8 ÿø4j¤wz]•mWúVoÐë®Õ‚uöYض Î?_vð֌ʀÖÞ$ÔˆVoÐë®Õ‚s/+ƒiÓäë›n D¡NQÐÖ$ô­Þ ×]«7çþúë }ûB¯^(Ô)*Úš„þ£Õôºkõ†àÜzHnëÃè”´5 ýG«7èu×ê Á¸ö™Œ SSaøpß_>&¨ hkúVoÐë®Õ‚qøa¹ýío¡¡« 8*Úš„þ£ÕôºkõÿÝ7m’ÙÍšÁÕWûúÒ1Ee@[“дzƒ^w­Þà¿û}÷ÁÎΊÿÀ®‚Ê€¶&¡ÿhõ½îZ½Á_÷/¾€™3!) î¼Ó·—õ•mMBÿÑê zݵzƒ¿î·ß%%r{ľ½¬/¨ hkúVoÐë®Õüsçxþy…àÆ}yI_QÐÖ$ô­Þ ×]«7øãîyðûßË×ù 4mó—ô•mMBÿÑê zݵzƒ?îÿø¼÷tï—^ó— •mMBÿÑê zݵzCìÝ·o‡[o•¯|P毨üϲ&¡ÿhõ½îZ½!öî·ß6ȃÆô¥Ee@'7h (…hmühõ½îZ½!¶îo¾){ ~8<öXÌ^Æ TôÖ矗ÿ;gž)¿J/†Ü\¡­µñ£Õôºkõ†Ø¹ÂWÈ×3fÀ‘GÆäeœ!Ð]½k˘–-™[XÅÅÑwqœ|rôqÔQÁH†Qç\{­\”rþù°hÄÅÕíÏ·]½ë€’ÁƒaÎY¾êÃ+Ž?†%KäˆÐ¦MÕÐpÉp8LBBB`¯_[´zƒ^w­Þ÷¥K%œ[¶”ÒF]‡³‹¨ èí۷ˆc'ž(Gdu”âbøä“èÐþôSxé%9"„BÑ}ÒIàÓÔ½¼¼<•µE­Þ ×]«7Ô½{^^ÅTºÿý_ 郕]í•„W„n„;`ÍšèÐ^»6n„^¨x\ZôìYñü=b²êŠÖpZ½A¯»Vo¨[÷pXfklÞ 7Ü\Pg?ÚyTt®$lÚúô‘#BQdeE‡ö_ȼ… +wôÑÑ#íîÝe=à 33SåZ½A¯»Vo¨;wσ«®’®§S§¸›&t6 cQÈ/(€ÌÌŠÀþà ìÊÄÅA—.Ñ¡}â‰õóSÃp€€Ûn“]R>ü0ö‹!Y“°ˆÉ•„ÉÉpúérDغV¯Žiþ¹Ï<#‰‡ãŽ‹íã—rËÐÚøÑê zݵzCݸ¿òŠÌ¢MH€þ³þ­T·?¨ hß®$lÑ~õ+9"üðCthð|ô‘O=%iÔN8!:´»v…FÔ6~´zƒ^w­ÞpàîŸ~ £FI‰cî\è¦êoüºCe@ºÜhëÖðë_ËáÛo£ûÃ%ÄW¯†Ç—Ç4iݻӹwoˆ¡š¹BZƒôºkõ†s_»V.ß.(€I“`äÈ:S†Ê€vn¹Ñ¶máœsäùµŸ—]ùðCx÷]2ß}—•ŸW9°O:IþžskXùVo¨½û_Àgȃ7Ü÷Þ9EÚ$\¶lÏ=÷%%%tìØ‘I“&PVVÆ5×\CÆ )--å‰'žˆzžk…üýÂóàË/e}Ä÷Þƒwß• kÊÊ*Ó°¡ü-W9´;vT3Ê6Œaýz0¾ùÆ“‹Rüþè;—-žç­ñ`àÀå_¯X±Â{à<Ïó¼¿þõ¯Þ[o½õØK/½ÔW·ºdûöíßzÞ›ozÞý÷{Þðáž×ºµçI”WGáygåyþ³ç½ñ†çýôSðÞÊÐê®ÕÛójîž“ãyíÚÉG~ÌÏ+-‘Ø>¸üò˃yájp¢Ä1gÎΉ”€üü|RRRhß¾=7nŒz¼öåFËësÍšÉaÀùÞódѧʣì¬,xùe9@†ÇW1ÂîÓŽ9&æ âÌ « Ðê 5sÏÍ•ÉS‘«Ÿ|²þ®ï\S¦NJ8f„ åçB¡¹¹¹äää …¢žSXXÈ‚ ÈÈÈ`ñâÅdgg—/YIËÅs;w®þqqqdïÜIøœs`Ú42{ ~ú‰ì¿ÿðý÷ÃÈ‘d¶jŸ|Bö¬Y„¯º Ž=–Ìäd<˜ìë¯'œ‘ÿùOÿwDnƒ~ÿjs®²Ð.59×®];g\bõyyöÙLN96lÈfĈ0sçÂGù뜕•EFFS¦L¡  —´žžÎ=÷ÜàAƒˆç„N  1dÈÆG“&M(..®Rƒ>ûì³y©òÚЍ“ÆÏ7ßÀ¿ÿ-#ì÷Þ“äÎÑ9昊vïÞ2ͯaíÿ`:VA£ÕöÏ=#C¦ÒíØ×\Ó§ÐG´Np­mWÖví’†c¤,òÞ{Òq©Lb¢¬5 ìÞ½]ÕÏ8xñ<˜6 n¾Y¾~ðAùÚ…^¸kÙâD º¦hß“°Î¯kÔH¦èt\½œÛ¼YFÙ‘Ð~ÿ}ÙŠâÍ7+ž—–ØÝºÁ!‡øçíZݵzCõî%%ð»ßÉbûMš@zº¬ílì•]oš„±¤eK8ë,9JKåõÊ£ìµke½‘ùóå1Mš@¯^ЯŸ}û¡‡úë´ºkõ†=»oÙ¿ù ¼úª|<_|QÆFõ¨ è@¯$<@û/k„<Œ+ç~üQFÖ•C{åJ9@Zé'žýúѹ_?ÙfLaYDkÈiõ†ªîË—Ãe—ÉE·]ºÀ¿þ%À{'ðYµÁ¹+ k€SûÌv˜¬3r×]2¬ÙºUjÙ3fÀÅËn4™™ððÃd^p\æ~Ì1²AÂÓOÃ×_Û>1D«7T¸ïÚw܃I8#c çýÚ„FõxääÀÿý_űn]ôcÚ¶­(‰ôë's´m«üþ5JZ!IIreà%—mµw\Ë•%kúD\œ uÒÒ_pxoÚo¿]ØYY°` £òSO­ì“O®¶ñèªÞóJhõ˜3'Ì7&PX(uæùómÔ\Tu´7 5RîݪŒ=$ó¯ü^{M–0@æcÿë_²Êú©§Ê:Û§ü#¼þ:ç® Þ›7K­ùÊ+ó(*’òÆÊ•εEåÚš„þS­÷¡‡F¯™]\,ˬFFØï¼o½%H³ò¿Gúõƒ_þ2æÇz÷ž;HYÌž ·Þ ÿù´mÛ™ôôèý/Œš£rmMBÿÙoïÆezÞ­·Êú![·ÊfÓ§ÃEI£qõj¹RáüóåûÎefÉ3ÏÈ´¿:n<Öû÷<`>þX~ÏŽ Û¶Áu×Áüù™Îu€5 ñ< áÊÇ/¾ˆ~ÌQGUŒ°O;Mæe¹p™™Ea!üéOððÃ2;Giöì´Yíq-[T–8¬Iè?uæ:ÈqùårkÖÀsÏÉp䑲ŠûÀrÛ¾}0î>㪷çÁ¢E0q¢, “”ù \{­T°À]wm¨,qX“Ðbêݺµ”;¦M“òǶm°d‰t˜úô‘ÎÓüùpÕUÒmêÐAþžþûß%܃t!®y{žôƒ{ö”jÕ7ßÈ´¹ìlÙý$Îàž»V¬Äa¸Oa¡LX¾–-“šveºv­a SýŒ:åí·áÎ;+.2íÙî¿_Þöú„kÙ¢rmMBÿ ÔûÐCaØ0˜2EÊ›7ÃÂ…0~<}4|ö<ú( .;±÷ê%Óü^Âa{Ï€¬,yëûõ“pîÚ^xA.>Ù[8»à^°´¡ŸaÅ ]/[&{GhÔHÊ$‘úu¯^_8£ìlY`Ñ"ù¾C¸ç)iT.eÔ7\ËkúŒÖæ‰ÓÞ¡,“ö›ßH¡ô«¯$¨—/‡åË ¯\IÂÊ•p÷ݲ.v¿~%‘nÝœM¿ßsÏ“5³¦N•QrY™,Çr×]på•5û½æôçE*KÖ$ô5ÞqqЩ“”?.„M›È{á) &÷/Y·Ü"ëg·l) Ê3dùU‡òë=/)‘·ªO¹øsñb8âøŸÿ‘}Ưùj>/Žc%ãàb×.¹D=Òp\µJ®~ŒÐ¦MÅèúW¿’9Ùõ”‚xê)™ÇÉÓ㎓és—\"˃l¸–-*GÐÖ$ô­Þ°›{¤&}çÒÛ¶IPßq‡¬ê³iÌ›'Ó§¤H äÖ[e'š]»‚ó®C6l€›n’ÊÐÍ7K8"=Õ?†+®8ðpÖüyq AFe äb™¥K¥Rù*ÇC•…‡ ¡C%á”PR"üÔS²YkY™\•Ùe²U×®AºkÙbMBŸÑÚ<Ñê 5tONŽÞ*ìë¯e3ƒ%KdÄý r€¤Z$¬ùKI¼ ¼«!;æÌgŸ…モs­ZÉÖ•ãÇÇn*ÍŸ—PYâ°&¡ÿhõ†tïÐAÒ쥗dá§×_—"m—.2ÿzÊU·hçž =&›è]P?.•œ.]¤Ù÷Ãò»ä¹ç 7WffÄrAÍŸ—°‡aÔ–œY/Y"u좢Šû:w–‘õ!пÌ;nee2ÀŸ3ž^–å™ÐrÅ2±÷;ë ײEåÚš„þ£ÕbèÞ¾½Ô 22dt½lüþ÷2";[65êyÙÙžWVýÜ(ïmÛþþô§l.¹$L‡жm&#G´iÙ|ðA˜Ã‡ÓOÏäá‡á•W²Y»6̬Yð‹_dÒ¢EÍ^÷wÞÙ÷ã¾ü’ðI'Á”)d.ZLö 7îÖ Ö­#ó O²Û´!àŸ¯½I¨±>§Õªº—•É2ÏYY™)GVlÞý¼6m*¸o_ɲF‚ó> Ú¶••ù÷;ÙT÷¹ç$¬³²ä¸åÙL÷’Kà‚ ¤»éŠûALLFÐ>ø Gu™™™lß¾ã?ž‹/¾˜Ã?¼N~¾k¿å w))‘ ‘ÎÌ„5kª–*5’rEïޡܾ½CåŠXàyðÉ'²^d¡h]Îϯ‡o¢kÙ¢r±$kúOPÞ[·ÂÚµðùçÑ·7V}ì‘GFŠ»w—2ÅŽöž×š;á•W$¬_~Š‹å|JŠì|~å•QK¤Fp½¸жܨÏhmžÄÒÛóàûï£C8òõ¦MUß tìݺUq÷îÒÔóÛ=–8áݤ‰ŒšGŒ‘tF†ì@ûÆpï½pß}R¯;Î9§¼Nä„{=@e@Û•„þSÞee—Wu4üùç²ÑéîDw]ºÀ±ÇVÜ}tͶø;˜ßó:%)I67üÍo`Ø=[ŽÈêO-[Âå—ÃUW¹ç®•mMBÿ©‰wI‰lÅ´{ggËZ»Ó´©Œ€+‡ð±ÇÊEu1­í`xÏ}'-MFÏwß ¯½³fI äoƒ¿ýÌO¤ÇM7É”=…¥WPYƒv­Nt0²}»Ì%^¿¾â6räæÊ.O»“œ\u4Ü¥‹”0}\&ˆß}O? O>Y±YbR\z©”@ºwÖo?p-[TŽ mOÂØãyRÿ„îºuaòòÊ¿ÿá‡êŸÛºµ\A\y4Ü¥‹Ôˆƒ˜W¬å=ßuÞmÚÀm·Á-·~í5ž}V6R|ì19zôíÆG’ßÖÆ>QÐÖ$¬~þYj•G¿•GÅÑos Þ Â/~!ºŽ¥ù:- š5 ⿦z\zÏk‚Vo4 /-ÎóçË4œyó¤’™ ×]7ß ^X±£Q-Vâ¨çT-AD¾ÏË“ÆÝžHJªÝ݃8%EBÚ0öÏ“5@ž|R.1üö?í4˜8Qv†q ÎåZ¶¨ügfMBaÇ™¼§#?_n÷¶zbJJÕpäëÃ.G8ݰÚZݵzÃÜãâd3SN©Sá™g`Ú4ÙÝàÍ7ejÎï~'³@4•ubŒ åçŸ+B6r»û±¯ßSÍšÉe»‡pÇŽrGM¦ªFSZ*3?¦N•åPAFãÇË1»í¤ä®e‹Ê´ö&á!‡$ðÝwÕ~7nÜ{ qc©‡BÕÉÉu×”S×°ª„Vw­Þ°Ÿîññpî¹r|ø!<ô¬ò׿ƒÊÊz7Ý'žè´ƒ¨ hoìš-IDAT—›„¥¥2û¡ºàݰ!Í›;W[û©ï¶o_´))UÃ÷ˆ#ü¡¶a…^w­ÞP ÷“O–fâý÷ÃôéðøãRyæY÷câDY¬É:µŸX‰c?ð<¹Êõûï+Žï¾‹þ>rlÞ\}ã äóÕ¦ÍÞG¾­[tŸCȦ¨æÌ‘:õ×_˹®]áž{à¼óböÄJu@]5 wî”Rž‚v÷cçÎ}ÿ¼† ¥lvä‘Õ|¿ÿ>“^½ô5~êUÃJ Z½¡Ü›5ƒßþV¦å½ø¢\¡¸j•\™xâ‰ÔgŸ]Ï쮇#è²2Ù•~oaýþøãþ½^‹2ê=òȽÍ›ÛÈ×0b‚çÁÒ¥ðÇ?VlÙÕ³§,Ø4xpµ ë€õëKxä‘=‡ï¦MU×Þ 2›a_¡ÛªUÝ.䮵ñ£Õôºkõ†¸ÇÅÁ¯~%+ç½ò Üu|ðÔ¥ûö• >ãŒz7¢VÐo¿½·ß®z>>^ê·Õ…måQpPW»imühõ½îZ½!†îqqrQ˯-KŸÞ}·”> ‚d§~ýêþuBe‰£k×1Œ3·J·ha%Ã8¨(+ƒüþô'Y6¤6=mšLþ¯!®•8TÆY‡[ùÃà²Ëä/žã—¥h5„sfffÐ µB«7èu×ê >º7h ëz|ò ¤§Ëb0/½$+tÝ}·\n«‘V•-Z­Pk´våµzƒ^w­Þ€{|¼,kúùçRŽ‹“Ûc…þSšŒ QÐÚ¯$ÔˆVoÐë®ÕtoÒDfz¬] ÇCNŽÜ_~ŒÓ 2 ]¾’p_äåå­P+´zƒ^w­Þà€{ûö²#ù«¯B§Nr{Üq0yòþMór•m{úVoÐë®Õr2DêÓ“'KäŽ;dÞô·ßm¶_¨ híËjD«7èu×ê Ž¹7n,;½¬^ 'œË–ɖ𯼴Ù>QÐÖ$ô­Þ ×]«78êÞ¥ üûß²”é–-R—ž8Š‹ƒ6«•mMBÿÑê zݵzƒÃîMšÈjy/¼ k3<ôœzª³%@:??Ÿ+¯¼’^½zE/++cìØ±\{íµŒ7®Êó¬Iè?Z½A¯»VoPà>|8|ô‘\u¸z5ôéÙÙA[U!ЀNIIaöìÙUJ+W®¤S§N<öØc¤¥¥±2²Û±&¡ÿhõ½îZ½A‰{(o¼!»ŒçåÉúŽád‰#??Ÿ””Ú·oÏÆ£î·&¡ÿhõ½îZ½A‘û!‡À³Ïʶ[O>´Mœ èP(Dnn.999„B¡¨ûwìØÁ‚ ÈÈÈ`ñâÅdgg—×½"ÏõèÑךœ‹à‚KMÏ%$$8ãR“s‘Q¨ .õùó’õÑGd¤¥1eÖ, ö¶ËrºXR8fâĉ,Y²„¡C‡Ò½{wB¡C† aܸq4iÒ„ââbžx≨ç=šôôô ”­KHjõ½îZ½A¯»k‹%ºÜhBB3gÎÜã}³fͪöyÚ›„*ês»¡ÕôºkõÝî.ád‰c_X“дzƒ^w­Þ ÛÝ%T´5 ýG«7èu×ê ºÝ]Be@Û•„þ£ÕôºkõÝî.¡2 íJBÿÑê zݵzƒnw—PÐÚ›„Ñê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw •mMBÿÑê zݵzƒnw—PÐÖ$ô­Þ ×]«7èvw‰†A¾x8æê«¯&))‰æÍ›3yòdrrr6lýû÷§K—.L˜0!êyÖ$ô­Þ ×]«7èvw‰@GÐ .døðáÌœ9“mÛ¶•ÿÖ‹‹#99™¢¢"Ú¶m[åyÖ$ô­Þ ×]«7èvw‰@:??Ÿ””RSSÙ¸qcù׫V­âé§ŸæñǯRÒ°&¡ÿhõ½îZ½A·»KСPˆÜÜ\rssËÃ:Bƒ HNNf×®]QçsssY°`,^¼€ìììòÆDä··‹çÂá°3.59·jÕ*g\jz.++Ë—šœÛ²e‹3.õùó’••EFFS¦L¡  —ˆó§Õôºkõ½îcÆŒaîܹAk”h“0!!yóæíñ¾þýûWûœ™3g²mÛ¶ò?‹V®\I§Nxì±ÇHKKcåÊ•QÏ‹‹‹ B·NˆZ¡Vhõ½îZ½A¯»t%òóóIII 55•7V9ß¾}ûòóÊÊÊü­CŠ‹‹ƒV¨Z½A¯»VoÐíî ƒ|ñP(Dnn.}ûö%77·<”C¡«V­ ''‡SO=5êy[¶láŒ3Τ­©&]PPÀ«¯¾´FÑê zݵzƒ.÷‚‚‚ò‘ó¦M›¶‰&Îó¼5@· ^<3vìX;ì0š5kFÇŽ …B 2„qãÆÑ¤IŠ‹‹yâ‰'‚Ð3 Ô@zùî»ï¸ãŽ;hܸ1áp˜§žzŠF•ßÿÐCñÙgŸQPPÀŒ3hÕªU€¶U¹á†Xºt)+W®¤uëÖQ÷uïÞÞ½{ÏôéÓ2Ü3{óvý=¿í¶ÛøñÇ),,äÉ'Ÿ¤iÓ¦å÷¹öž‡Ãa®¾új’’’hÞ¼9“'O¤”wÍ5×аaCJKK¨Tçž““ðaÃèß¿?]ºta„ ›F“ŸŸÏ]wÝŧŸ~Êûï¿_~Þµ÷\Å4»6mÚ0gÎfΜÉGÁºuëÊïÛ¹s'+W®äÉ'Ÿdâĉ̜93@Ó=3}útúöí»Çû’’’())¡eË–>[í›ê¼]Ïsrr(((`æÌ™œuÖY,Z´(ê~×ÞóÚ6Ë] :÷¸¸8’““)**¢mÛ¶[V%%%…Ù³gW¹*Ùµ÷<ÐôžØ°a×]w]ԹѣGs饗’••ÅO?ýÄqÇW~ß–-[Êÿ¡Un4ÁžÜ/»ì2FìyöÉ[o½ÀwÞɲeË8p`ìEw£¦Þ®¿ç§žz*¡P&óòåË£îwá=¯L~~~yO%ò~¶k×nŸÍr¨Î=55•U«VQVVÆàÁƒ:t(‰‰‰Ûî×Þsç:--mÍ…+V°páÂ*£µ–-[òý÷ß2?:ò3ªsày^µ÷y䑯BkŸÔÔÛõ÷<'''êOíêü‚|Ï+SÛf¹ Tç¡Aƒ$''³k×®€ k†k﹊ôúõë9å”S9r$øÃؾ};‹-âÞ{ïeêÔ©¬[·ŽmÛ¶ñè£V©—Í}÷ÝǼyóèÓ§7ß|3žç±hÑ"n¼ñFn¾ùf)**bÖ¬YrÈ!Aë–S·†÷üÖ[o¥¨¨ˆ‚‚fÍšÅW_}åì{®¹Y^{bb"ééé”––’––ƤI“‚V"3qâD–,YÂСCéÞ½»“﹊€6 Ã8QÑ$4 Ã8±€6 Ãp h£^òÆop×]w‘““ÃE]´×­a¸Š´Q/4hñññ\vÙe̘1Cõ[ÆÁ‹´Qoùæ›oHNN¶Ý= µX@õ’'žx‚Þ½{3wî\&Nœ¨z›4ãàŦÙ†a8Š  Ã0ÅÚ0 ÃQ,  Ã0ÅÚ0 ÃQ,  Ã0ÅÚ0 ÃQ,  Ã0ÅÚ0 ÃQ,  Ã0ÅÚ0 ÃQ,  Ã0ÅÚ0 ÃQþNáØ AâIEND®B`‚mpmath-1.0.0/doc/source/plots/ellipk.py000066400000000000000000000001361316273626600200520ustar00rootroot00000000000000# Complete elliptic integrals K(m) and E(m) plot([ellipk, ellipe], [-2,1], [0,3], points=600) mpmath-1.0.0/doc/source/plots/ellippi.png000066400000000000000000000526351316273626600203770ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìw\UåÿÀß,QT\¸Ad%jnE³aeæj˜ílh9ú5G𳡖#q•iš«ÄÒøZެe– * Ë ÂeÝ{ŸßG®‚—qáž{Ïñ{Þ¯—¯K‡sÏ}ûñáÓÃóy†ƒbÐ EጔœÛÙ[DCCCC£(ŽöÐÐÐÐÐ0– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444Š– 5444ŠÝ´^¯§oß¾|ú駦k:Ž×^{‘#G2yòd;ÚihhhØ»'èùóçóüóϹ¶yóf À—_~É7HLL´“††††ý°k‚Þ¿?¹žœœŒ§§'ÞÞÞ$%%ÙCOCCCî8ÛóÃwïÞN§ã—_~áÊ•+¼ð øùùáååEBBÝ»w'!!//¯"ï+¼ÇÑÑ!ÞÞÞdddP½zuœIMM¥^½zйæàà€“““"\”à¼i“3ŽŽ©¼öšõœãââðõõULü*ì|äõNŸ&ÃÍêýûãìæ¦çÌÌL„Šp)ϵ¼¼<4hPæ}ƒ¬¬,nÞ¼‰‚£GÚ)#šAq\Ø™}ûö‰¹sçŠiÓ¦‰¨¨(‘-^{í5ñÿ÷bÒ¤IwÝßµkW;XVœ%K–Ø[ÁbärNJ„ ²îsï‰ÿù§NNB¸º a©RP[Œ+âûÖ[oY_¤ص]H=èÑ£G‘k7n,ñ~777¹•¬JápšË96Vzõó³îsUã”xé%0`Å èÐÁ~b% ¶«Í×v/V!„½,Â`0Ø[ÁbärŽ‹“^}}­û\UÇX¯‡W_…Ë—aÈxçûŠ•€Úb¬6_s¨2A{{{Û[Á"ŠÏRQr9ËÕƒVuŒ§O‡½{¡];X¶Ì¾R¥ ¶«ÍתLÐz½ÞÞ ¡Óéì­`1r9Ë• UãŸ~‚9sÀÝ~øªU³·V‰¨-Æjó5‡*tvv¶½,Bó¸år–+A«2Æýo¾)ýǺuàïo_¡2P[ŒÕækU&èZµjÙ[Á"í­`1r9ÇÆBժи±uŸ«ºçæ8i¤§Ãĉðì³ö6*µÅXm¾æPe‚NMMµ·‚EDDDØ[ÁbäpNO‡´4©@èhå–§º¿û.‘‘У|ò‰½mÊ…Úb¬6_s¨2A׫WÏÞ ѱcG{+XŒÎ…ÃÖžÁ*‹ñ7ßÀªUtlÔ6mgEÌv-UÅõùšC• Z+ÊÎr?ƒŠbÁÁàä„níZhÔÈÞFåF51¾…Ú|͡ʭ åGçÂ9Ðr$hUÄX¯‡×_‡ìl˜:•ÄfÍìmdªˆñ¨Í×êøÝªZ‘P~äp–³­ŠÏž ‡AP|ð..ö6²UÄøÔækUö µ"¡üÈá,g‚V|Œ†?77ذ\\”ï\ Í×ö¨2AkEBù‘«HèàÍ›[ýÑÊŽqv¶4´a0ÀÂ…pk{]E;›Aóµ=ªLÐZ‘P~¬íœ—IIàé ®®V}4 ðO˜çÏÃSOÁðá¦ËŠv6ƒæk{T™ µ"¡üXÛ9>„gxã;à‹/ ~}XµJúâŠu.Í×ö¨2AkEBù±¶³œãÏ Ð_»o¿-}½j4lXäÛŠt.Í×ö¨2AkEBù±¶³œSì@1BÎHI¡Cá™gîºEqÎe ùÚU&h­H(?Öv–»­¸¯YááҲɅ ÍÞ¢8ç2Ð|m*´V$”k;Ë ã¸83FÚpdèYÓìmŠr.š¯íQe‚ÖŠ„òcmg¹´bb¬×Ão@VL™rDºæâ"Ÿsá«Ícuô( Nt^ºÉ“á¾û”ï\ÁkŠq)ϵf·öÛ.ë¾ÈÈHÂÃÃY°`( !Äq ½~ùåvìØA~~>®®®¸»»óâ‹/rîÜ9~ýõW²³³yôÑGyçwLïyúé§ùé§Ÿì¥l1ª³¦s×®Òn›‰‰àåe•GÞ…Ýb¼r¥´b°m[8z´ÌÂਭ]ü/ø<˜o¾ùF¡ `÷]”DÒñð¦ëtÖ?,Ö®\º­ZÁÍ›ðÏ?Ð¥‹½4*‰Òr‹*\ÔX$TÖrÎÈ€ÔTðñ‘79Û%Æï¾+ýÇŽ­PrV[»Ð|m*´V$”k9Ÿ=+½ÞÚ£^6lã­[¥?Í›K'¥Tµµ Í×ö¨2Ak+ åÇZΧOK¯­[[åq%bÓ§§K's¬XÕ«Wè1jkš¯íQe‚ÖVʵœO’^[µ²ÊãJĦ1ž4IZùÆðä“~ŒÚÚ…æk{T™ µ•„òc-g[õ mãýû¥¹Î%n#Z^ÔÖ.4_ۣʭ åÇZΧNI§<ÉýÛ¦Mbœ› ÆI_‡†JIº¨­]h¾¶G• Z+Ê5œ³² !AšÁ!÷Š[›Äø£¤Ã_ûö…W_­ôãÔÖ.4_ۣʭ åÇÎgÎH¯r?ƒ bŸ}&¿ø¢Èá¯EmíBóµ=ªLÐZ‘P~¬ál«ñg9ƃt® ^³gƒ··U«¶v¡ùÚU&h­H(?Öp¶Õ 9Æ_~ GŽHkÖG¶ÚcÕÖ.4_ۣʭ åÇζìAËãk×`êTiä—_‚““Õ­¶v¡ùÚU&h­H(?Öp.ìAÛb(P¶ð´0eÔ(hßÞªV[»Ð|m*´V$”ŸÊ:ggC|¼4ƒ£‚ í,B–= «VA½z^Î]jkš¯íQe‚ÖŠ„òSYç¶Þbl4J˹…€9s n]ë>õµ Í×ö¨2AkEBù©¬sáø³- „ CŒ×®…C‡ S'é¬AP[»Ð|m*´V$”ŸÊ:Ž?ÛªmÕ§§ÃûïK_/]jÕÂਭ]h¾¶G• Z+ÊOem݃¶jŒg΄«Wað`èÖÍzÏ-†ÚÚ…æk{T™ µ"¡üTÖ¹°ݲ¥dÊÕb|ò¤Ôkvw‡¹s­óÌP[»Ð|m*´V$”ŸÊ8ÎàhÞÜ638ÀJ1B:%Å`NénذòÏ,µµ Í×ö¨2AkEBù©Œst´”ël5þ VŠñ÷ßþ}’¸W –„ÚÚ…æk{T™ µ"¡üTÆÙÖãÏ`…ggÃ{ïI_/YbÑéÜEmíBóµ=vMÐÇgÔ¨Q¼ýöÛLŸ>Ýt]§ÓñÚk¯1räH&Ož|×û´"¡üTÆÙÖ38À 1ž=’“ᥗà±Ç¬#Ujkš¯í±k‚nß¾=_|ñ«W¯æï¿ÿ6]ß¼y3 àË/¿äÆwZ+ÊOeœíу®TŒcb`þ|iÓêùó­'Ujkš¯í±ûÇÖ­[éÛ·/Ý»w7]KNNÆÓÓooo’’’мG+ÊOeœm=ƒ*ã±c!?_ÚwÃËËzRe ¶v¡ùÚ»'è²sçNŽ=JVV^^^$$$€W±šœœÂÂÂgË–-DGG›Æœ ÿa”r­cÇŽŠq‘ÛùàÁ.\€&M¢qt´s!¿÷矉ؾüüˆ~ê)›Æ¹ÂÎvºÖ±cGŸ”çZaº¬û"##ÙúÃV,X@FFJÂAqhgÿå—_رcùùù¸ººâîî΋/¾ˆŸŸÆ £víÚÔ¬Y“¹Å棾þúëlذÁÊB§Óá&÷™OV¦¢ÎÒêè~ý`ûvÄJ B¾¹¹pÿý ?ÿ ýûË#Wjk÷ªoÚî4ΟÇoã·Œç›o¾‘_®œ8ÛóÃ{÷îMïÞ½Í~oãÆ%¾OEBµ‡UÔ9*Jzµe*è»`”œû÷·yrõµ‹{Í7/9˜q1\ûþ©?)oèÔ® º¢hEBù©¨ó±cÒkçÎV”)û&&Â'Ÿ@•*°h‘qBÚÚžB¸å[­„„HËO>Q|rV[»°¶¯!Û@âœDç%"òÕü«áêO½~ÖÙÊAmñ5‡*‡8´"¡ü”×Y ÃpË7<~ýZ´€1cì+TÔÖ.¬å+„àÚ–kny˜„OpprÀ纜ìbµä ꋯ9TÙƒÖŠ„òS^烥נ eÊA`³fЧô‹Kg *µµ køfŸÉ&&$†¿Ý þ õñ[àGÕfU+ýìâ¨-¾æ°kú÷ßgذa 2„?þØt=>>žÖ­[3jÔ(/^|×û´"¡ü”ÇYØ¿_ÚxðAH•BÄØ±“OÚW¦œ¨­]TÆWSOìÄX޶=ÊßnàèF»_ÛÑúûÖ²$g(¿oBB/¼ðG TvíA÷ìÙ“ž={ðÄO0uêT¨U«YYY413ލm7*?åqNH€¤$hßj×¶TIÄÅÑqÝ:é0Ä… í(bjkñFÁÕï®;1–üKù8Õp¢ùŒæ4 iŠcyû‡eùæææ2þ|fÏžMNNTWØù”Šƒ^³f Ï<óŒé¿½½½9xð k×®eÅŠw9«±H¨6ÊãüÇÒk2Ë”Åþƒ./OÚÉÛÛÎ2åGmíÂRߌ¿3ˆx ‚3¯Ÿ!ÿR> ^k@ÐÙ ¼Æ{Éžœ¡tß;vpÿý÷3mÚ4ŒF#Ó§Ogݺu²;YŠÝôÂ… Ñét„„„Üõ=GGGjÕªEAAÑ}]ãââ #<<œ-[¶mú)üÕF)×ãbMç­[¥k¾¾vtÞº¶mcWƒ0a‚bâWžk»víRŒKy®%&&–ë¾Ü„\~èý‘Ý#9uø.\hÿG{rßËŵ‰«ÍœÏž={×µÓ§Oóì³ÏÒ¿bccyôÑGùþûïéСË—/'##%a×yÐ6l`Ö¬Y<ñÄ899Ѷm[¼¼¼¨^½:6lÀ`0àããcú(DisÿW¹ï>8^Ú ©~};äåÁý÷CL lÛO?m Bô7õ$ÎM$yA2Æ<#UšTÁw¶/ ßhˆƒ£}'ÈçääðÙgŸ1wî\rssñññ!44”§‹µÅå!Äq¡2žzê){+XıcÇì­`1e9_º$Ѳ¥„Ì1{¶$ѯŸ8vô¨E*†ÚÚEI¾F½Q\úú’ø«Ñ_b/{ÅþjûEÜô8¡ÏÒÛØ°(…¾?ýô“ðõõ€¨Zµª˜9s¦ÐétfßóÖ[oÙаlT9ÍN+ÊOYÎ…ãÏ]OìøX·:ÌõðëTõ®J«M­èðW»'g!ÿýïiÕª~ø!~ø!§NRer•ö µ•„òSšóõëÒ&ý¾¾RŽ´)·Oè^¸nÍ[½×b¬4„^PsOMÍ8DÁõœj8ÑlV3<ÇzâT­|û3ËILL !!!ìܹ€ðùçŸÓ¼ysûŠUUö µ•„òSšóÒ«]ÆŸ—.…Ó§áñÇá…L—ïµ+‰´]iiw„í£·SZ@ãwÓõ|W¼'{Û=9ët:¦M›FëÖ­Ù¹s'þþþìܹ“ü‘´´4»ºYUö µ"¡ü”æl·ñç+W`Æ iþ%KŠlŸw¯ÅX dŸÉ&ö½XÒvJ‰.èÑ ü?÷§Fûv6»=œ1vìX¨V­ü1ãÇÇÕÕP~|˃*´V$”ŸÒœí6ƒcÒ$é´”qã U«"ߺ×blO ®?3žK_^B¤m@ýæùQ­W5E,…>þdáÂ…x[EªÔøZ‚*‡8´"¡ü”䜙 ‘‘д)Øt¶Ò_Áºuа¡Ô‹.ƽc{aÌ7’´0‰Cþ‡¸¸ì"N5œð[àG—S]ðàARR’]ýÒÓÓ?~<÷ß?»ví" €]»v±eË–»’3(/¾A•=h­H(?%9ÿõ—tPö#Øpƒ~ƒA:¡`Þ¸x¸˜î³—oAA+V¬`æÌ™¤¦¦R½zufΜɸqãLÃæPJ|+ƒ*{ÐZ‘P~Jr¶ËðÆW_ÁñãÒž¦¯¿nö–{)ƶ$ëxÿöü—“N’“CÝ>uéÕ™û–ÝW$9ƒí}…üüóÏ´iÓ†wß}—´´4†Êùóç™ðÚ5!êÔÂÑQˆÈH}è½OÞå<ýN´Øë°Wìe¯8ÔòHÝ™jo-‘‘‘âñÇ€ÄOzV®„zõà£J½õ^‰±\!¸v•ǹ0åÆ<#žã< :DÓÑMqp.ûTNßììl>üðCX½z5õêÕcÙ²eDEEѯ_?*ÐàÔØ&Š£ m€‹æœwì^ûõ³€Ñ(…€9s né½»{%Æry8“˜ÿÄy0ø~æ‹[€eSÐäð5lذ)S¦pñâEªT©Âĉ™2eJ¥ÎÕØ&Š£Ê´V$”ŸâÎðË/Ò©R=fU«àÐ!èÔ Þ~»ÌÛï…[›¼ä<μq†ˆ®d̤F»´ÛÓŽû¼ßâä Ö÷Ý·o]ºtá­·ÞââÅ‹¼ôÒKDGGóé§ŸZ¥¦Æ6QUö µ•„òSÜùï¿!#úöÙçþ_¾ '‚£#¬XNe/'¾bl- Ù?K$i^Æ#UVÁç n„ƒSÅǦ¬å{þüy&NœHxx8]»veáÂ…tïÞÝ*Ï/Dm¢8ªLÐj,ªmESqg›o„„Hÿ77NêA—ƒ{!Æ•E)Rˆ›Gþ¥|]i6¥ÍÞo†sÍÊÿ¨WÖ7%%…Ù³g³|ùrôz=ÞÞÞÌ;——_~¹BcÌe¡Æ6QUqhEBù)îl³½müðƒtøë¬Yå~Û½ãÊq ƒˆ®D¿-Ðúr‚¢ƒðýÄ×*É*î›––ÆäÉ“Mû2W«V¹sçÍ+¯¼"Kru¶‰â¨²­ åçNçÄD8qBšZçë+ã‡Þ¼ £GK_/_5Ê¿)Úc\Qrârˆ›ǵ®P3¨&þŸûS«»õF,õÍÌÌ$44”ùóç“™™‰««+ãÆcÒ¤I4hÐÀê~ÅQc›(Žl=èøøxV¯^ÍâÅ‹ù£pù™•Њ„òs§ó­-v‘}Ïó©S!9^yÅ⮺Úcl)ú =±c9Üò0×~¸†«§+-7´¤ãßeIÎP~_NÇüùóñõõeúôéèt:FEll, ,°Iru¶‰âÈÒƒ ¡ZµjtïÞOOO"""øú믙8q"­[·®ôóµ"¡üÜél“áC‡¤-Dk׆E‹,~»Úc\^„^pyÕe.L¿@ÁµÝñžê×{^8¹É»7sY¾yyy¬ZµŠO>ù„Ë—/ãèèÈàÁƒ™>}º]ÎTc›(Ž, zîܹEçŸ|òIàî•=¿ÿþ;›6mB¯×ãççÇÔ©Sinäˆ#pvvÆ`0ðÕW_yŸV$”ŸBç¼<øí7i´á¡‡dú°‚6Lšó<¾´c…¨9Æå%mW1ïÅ ;­h4¤>ûàÚ¤ô=)¬EI¾z½žuëÖ1kÖ,Ó¸ïË/¿ÌÌ™3í:Ì Æ6QY†8ÜÜÜX¿~½é¿—,Ybº~'={ödåÊ•¬Y³†}ûö™®ÿñÇðÅ_àããs׉V$”ŸBçýû¥³YŸxÊØ›¦â,X r?úh¹æ<›CÍ1.‹ìSÙDõ"ªoºÓ:j?Z›NÇ:¸:ÐfÉîö5|÷Ýw´jÕŠwÞy‡ÄÄDž~úiŽ?ΦM›ì>¬Æ6QÙŠ„7nÜ`ôèÑäääЫW¯Rï]³f Ï<óŒé¿“““ñ¼uØ]óæÍïÚ‡V+ÊO¡sáð†lãÏ11Òl WWiÎs+újŽqIä_Í'~F<—¾º››‡J IDATF¤óçûQï™z²Í|(B_që4“iÓ¦qòäIžxâ >þøcºvíjs¯’Pc›(ŽlEÂG}”ØØX®]»Æc¥,=[¸p!:ŽÓ5///©ØèååUä=gΜ!,,Œððp¶lÙ@tt´i¥°8 ”kŠq±ÄùÌ™h¶m“®yzÊð¹BýÆèrsaêT"²²*ü¼7**~•q6æÙ3~ûý÷séËKĺÅâÿ¹?5·ÖÄ­—vq>vìË–-#((ˆçž{Ž“'Oòàƒ²bÅ ~ýõWjÕªe÷˜Þyí¯¿þ*×}‘‘‘„‡‡³`Á222PB¦íFGŒ!t:¸xñ¢xá…ÌÞ³~ýzáïï/FŽ)F-V¬X!vìØ!ŒF£:t¨Æ »ë}JÛð^åèQikÑ  ™>`íZéZµ"/O¦QF£Q¤lNûü-ö²WìsÞ'Î…œù×óíîõóÏ?‹xÀ´ýg§NÄÎ;…Ñh´«›µQZn±É~Ðz½ÞªÏ4hUŸ'7ÙÙÙöV°˜ììl1~¼”?.”á®^¢^=éþú«ÒSkŒ É8”!"Œ{‘ögŽz:JdGÛ÷ï¤×ëŦM›DÛ¶mM‰¹uëÖbË–-ªHÌiJKв qŒ9’uëÖqîÜ9’’’Ø·oãÆãèÑ£Vy¾V$”ŸøøD6o–†„_zI†7RSaÔ(°Â jŒqbb"¹I¹œy]ÚÐ(㯠ª·­N»ßÚÑf[ÜZØgBát¹ÀÀ@^y墢¢ béÒ¥DEE1pà@»Œ[ŠÛDqd)úùùáììÌW_}Evv6mÚ´aêÔ©Ô-cËÈò¢ å'==ÄDéh«¦M­üðÝ»aÃhÒDÚJÔ ¨-Ɔ,®]9<ÿ0Æ\ëmhT²³³Y¹r%óçÏçâÅ‹<þøãL™2…Ç\IùNÔÖ&Ì!KzïÞ½|þù禞î‰'¬–œA[Ih /–œ_~ÙʾyS:`éR°ÒÿlÕca\^}™C‡øõã_ðþÀ› óA4~§±]’szz:ü1ÞÞÞüç?ÿáâÅ‹<ûì³üóÏ?üþûïôìÙ³HaR-¨Í×,B†1èÌÌL±`ÁoúcM”6Nt¯¡× Ѱ¡t `JŠ•>|¸4îXÙ1ÖÓ;!–ÔmÒo~îÝÝñ_èsgªºUµ¹OBBóçÏgÕªUäææR¥J†Îĉñóó+ñ}Jޱ9Ôækm»Q ¶bEX@"¯¼bҦ¥Á;ïH_õÔ¯oŇ+3ÆiÄŒáHë#¤nK¥jóª´ kE‡pïênsçèèh† ‚¿¿?K—.ÅÑÑ‘qãÆÇŠ+JMΠÌ—†Ú|Í¡m7jÔT¬((¶cvq ä¹ç¬øàà`餔·Þ‚gŸµâƒ%”cc‘KË/?+ý =N5ðþÀÏ1ž8V½Ý'²•sDDsæÌaË–-!¨S§ï¾û.!!!m<¦¤—µùšC•=h­H(¿ý&uv»u‹ N+=tóføî;ðò‚ÐP+=´(Jˆ±‚ëÛ®säþ#ÄŒAŸ¡§Éˆ&t=ß•f“šIÎ ¯³‚Ý»wÓ§O:uêÄ?ü@Æ ™7o Ìš5Ëâ]!•cKP›¯9TÙƒÖ¶•M›¤×#¬ä|ù²4×`Í«ÍÚ(޽cœu<‹˜÷bHß“@'ëà¿ÀŸê÷W/ñ=r8ët:Ö¯_Ohh(gΜ¤ýl&MšÄàÁƒ©ZµâcÞöޱ¥¨ÍתLÐZ‘Prr <\:¹û‰'t@%…¶MKƒwß…ž=­âi{Å8ïr¦^àÊš+ À­¥~ ü¨Û§n™ó†­éœ˜˜È²eËX¹r%7nÜà`̘1 8—J†ZÚq!jó5‡*‡8´"¡<|ÿ=dfJCÄ7nXÁyõjؾî»æÎ­üóJÁÖ16äHø8ǹ²ú .u]X@—¨.Ôë[¾Ýæ*ë,„௿þ⥗^Â××—Ï>ûŒ›7oòÚk¯qèÐ!<ÈË/¿l•äl _[£6_s¨²­ åaÅ éuÄ+8ÇÇÃØ±àèkׂÌ=[ÅXW¿»JÜä8ò’òppqÀk¼Þxã\Û²§Š:çççFhh(ÇŽÀÃÑ#G2jÔ(š4iR¡ç–…ZÚq!jó5‡*{ÐZ‘Ðúœ< JÝG­¤³ÑƒCVLž ݺYK³Dl㌿2ˆx ‚3¯Ÿ!/)úÏ×'èL~óü,NÎ`¹óÕ«WùðÃñööæÍ7ß䨱c´mÛ–¯¿þš¤¤$>úè#Ù’3¨£߉Ú|͡ʴV$´>…½çáÃ¥ ’*å*­viߦO·Ž`È㜠·NÎþþÖÉÙkâ·ÐÚ×®ÔsËëIhh(ß}÷ùùù8880`ÀÆŒC=l¶G†Úñ¨ÍתLÐZ‘кèt°~=T©"MS–®UÐùÔ)©×\¥ ¬['½Ú9b¬ÏГ0;äEɈ|kSW|æøÐpPC+ŸKs6 ü÷¿ÿ%44Ôtä›»»;£G&88__ßJ¾¥(½Gm¾æPå‡V$´.aa‘Ï?Òµ 9ggK{“æåÁGA›6Ö-kÆXè—¾¼Ä¡€C$}–„ƒ³Íg5'è\Þhd•ä æÓÓÓY°`þþþ<ÿüóüñÇøûû³xñb’““Y¸p¡]’3(¿Gm¾æPeZ+Z—ÂCÓGŒ¸}­BÎï¾ §OCïÞ0~¼uäʉµbœöK±ïÅ’}*[:9{p#|>‘çäì;Ïž=ËâÅ‹Y»v­©Ò«W/ÆŒCß¾}qt´_Jéí¸8jó5‡ýÿÕ+€V$´QQðÏ?(íý\ˆÅÎë×K Qš4‘†6lœP*ãìÓ·NÎîEö©lj÷¨M§£\#ßÉÙÇŽã—_~¡_¿~²|ùrŒF#ÇçäÉ“ìÞ½›þýû+"9ƒ²Û±9ÔækUö µ"¡õ(^,Ä"çèhiµ ££´¤Ûª[à•ŠÆ8ÿštröå¯.# B:9{žõž•ïäìììlÓj¿èèh<== fèСŠmßJnÇæ(¯ïék§ Ù¬GgÉld9ªLÐZ‘Ð:dgK›¸ºÂ›oý^¹sr¤qçìliÜùÎn¸ ±4ÆÆ<#É‹“Iø8C¦çÚÎxO÷¦éè¦8V‘§Çš˜˜ÈÒ¥KY¹r%ééÒ’ðîÝ»3fÌž{î9«-(‘ ¥¶ã’(Ë÷fÞMfíŸEè¡PôF=nTÅöÛ¿–†2~w²­HhÖ¬‘V¾ðï´•ÛyÌ8qžxBš½a'Êë+„àÚ–knu˜¸‰q³4}·)]cºâõ/«'g!àÅ_ÄÇLJyóæ‘Í AƒØ¼y³i% Ò“3(·—DI¾B¾=ñ--–¶`Áß ¨æ\O.`ýsëmlX„ Nõ.¤¤$1dÈÑ¥K—"×/\¸ Zµj%FŽ)BCC‹|Oi§¨‘‚!š7—7‰ˆ¨àC6n”Ш‘W®XÕO2fŠˆGî89»”È>#ÏÉÙ¹¹¹bݺu¢cÇŽ¦±=<<Ä´iÓÄ¥K—dùL²9‘rBôXÓC0ÁLÄ -ƒÄ¥ÌÛÿJË-vïA{zz²zõê»ÆÝ¨U«YYYw­ŽÒŠ„•gófi5ö“OB‡w¿Lçsç¤i°q#4l(‹gy)Í7ïbу£9ÖådPýþê´ÝÝ–6?·Á-к¿²§¤¤0kÖ,Ój¿ˆˆÚµkÇêÕ«IJJâÃ?¤qãÆe:+5ûfäf0v×XÚÙžý ûiÓ  ûïgÃÀ 4®ÙØŽ–e ì܃.¤OŸ>f¯ ñÄOˆ¬¬,Ó5¥ý_NmB´k'u~ÿ½Èɹý€3¬­g5ôÙzqaæ±ßm¿ØË^q ÁqqÅEa,0Zý³"""Ä[o½%ªT©"áàà   öîÝ+ŒFëžFù0bíñµ¢á¼†‚™÷9îbÑß‹D¡ÀìýJË-vïA—…££#µjÕ¢  Àt-!!°°0ÂÃÃÙ²e ç£Óé€ÛÿçTÊ5N§€U«¢ù÷_;C­Zp†ÿ%¢sg˜6M·ƒš®egeseýÖ7_OüÌx ¨?®>]ÏwåJç+88;Xåsõz=óæÍã‘G¡cÇŽ¬]»–ªU«òÚk¯Ü9s *r"vIÎöŽ_y®ét:Ÿ”çÚÞS{yxÍüõÅ[¤d§ðl½g‰|;’1ÝÆu<Êt_dd$ááá,X°€ŒŒ …°s:;;[Œ1Bx{{‹‘#GŠ+Vˆ;vˆýû÷‹aƉ·ß~[|ôÑGEÞ3`À;ÙVŒ3gÎØ[¡>*u~ø¡ä{JtÞ´IzsƒB(h,µÐ7ýÏtq´óQÓ8óÉ—N ]œÎªŸ•––&æÍ›'¼½½MãËbÉ’%"33Óbgµ ßË7/‹á? Á‚™ˆv_´”ë½JëAÛ=AW¥QMüó”_„Ðë-|sd¤nnB88±{·,~E§'_8iJÌG»éÒ­úgΜ£Fnnn¦ÄÜ«W/ñóÏ? ƒÁ`ÕÏÒ°œ¬¼,1sïLQý“ê‚™ˆÚsk‹%‡–”8œa¥åU΃Vc‘P)“ü?ýTz0œœJ¾ï.ç«W¥üu:ióý^½ä-'…íY¸‡}®ž®øÎñ¥Ák ¬²g†Ñhd÷îÝ„††²k×.ªU«Æˆ# ¡U«V~¶’ÚEyPª¯Þ¨gMä¦ï›Î•¬+TqªÂ{¼Gÿýy,è1{ëU¡õ ÿgˆŽ–:¿Iu¾r“—'ÄCI]ïAƒ¤*£1ÅÅ/.Šõˆ½ìûÝö‹ ³.}¶¥¿˜'++K,_¾\šzËžžžbîܹ"55Õ*Ÿ¡Q9ŒF£Ø~n»h½¬µiÚÜ«?¼*âÒâ*üL¥åUö µ•„cÆ é˜À±c¥sKÃä,üßÿÁÐ¥ ¬\YtM¸HÛ}kC£“·74jøACêøWþò„„ÓÙ~w®ö;v,Ï=÷ÎÎÖû‘QJ»(/Jò¸Á„_'°çÂzx÷`^¯ytiÚÅt’|+ŒPaZ+ZÎáÃR¸qc!X"&çÅ‹o¿19Y^É2È:%þí÷¯iœ9â‘‘yL*ÊU&ÆF£QüùçŸâùçŸŽŽŽ...âõ×_Gޱ–þ](¡]X‚|ÒÄë[_7õ˜—ŠmÑÛÌNe¬ˆ¯ÒzЪLÐJ ¢Ò1…èÑCʳ+WZðÆ_ÂÉIWW!’K¯Lò¯å‹sÁçÄ>§}b/{Åß¾‹«[®Vz~qnn®X»vm‘Õ~õë××Vû)‹™ÅØ]c…ëG®‚™ˆ†óŠ/|iQ°<(-·¨2A?õÔSöV°ˆcÇŽÙõóþYJÎ-[JK¼Ëñðp!êÔ‘Þ¸~½¼‚%`È3ˆÄ‰âÏÚнìÖúS$ÎO†Ü»gLXã+W®ˆ™3gІ šs»víÄš5kDŽEƒó•ÃÞíÂRìá{áÆ1êçQ¢ÊGU3nŸ¸‰é{§‹Ìܲ§3VÄWKÐV@iAT2z½­[KyvÛ¶r¾)=]Êæ Äĉ²ú™Ãh4Šk?^ÿøÿ#ö²WìsÚ'ÎþßY‘w5¯RÏ=vì˜xóÍ7M«ýÅsÏ='öíÛ§­öS箟C‡ç35gד›,R²Rdý\¥å­HhìY¬X»V:&ðá‡á©§Êñƒ Bwæ nýûÃìÙ²;ÞÉÍțĎ‹%}ŸT «Û·.~óý¨Þªz©ï+)Æz½Þt¶ßŸþ H'òŒõÿåDmE,[øž¼z’ÙÎ&ìTFa¤NÕ:Œé:†®!Ô©fYXmñ5‡*´·µÇñ;:ÝíCµçÍ+çä‹>€íÛIôõ%ðÛoKŸ,mEò.çqრ\ùæ pkå†ÿBêö®[®÷ñ7øúë¯Y²d‰iÛÉûî»Þzë-jÔ¨!ËßÃìÕ.*Šœ¾—#øøù1úGê»Õç½ÞcT—Q¸»ºWè™j‹¯9T™ µ3 ËGh(\¼(í÷ܵk9ÞðÅÒJ–:uüåp¯Ø†%r $/H&qn"†l..4ÿ°9M†5ÁÁ¹üÓù cm:Û¯p†'Ÿ|’1cÆÐ§OÅê;3ÏÚ¾†£ÃYvdûöФf&vŸÈ°NÃps©\ïWmñ5‡*´¶’°l®_—ü9;—s”â‡`ôhéx•$"39…\ýî*qïÇ‘—”‡C¼&xá=ÅçÚ–5K£ÑÈòåËÙ¾}»ÕWûɉRWæ•„µ|/ß¼ÌWǾ⫈¯¸tó~uüß}˜µ›g7^»ÿ5^jý kØ÷aP_|͡ʭ ïfýzؽZ¶”Öš˜Å`€7߄߇ví <¼Ä}G-u.H+ ~V<—–_BèU}ªâ÷™Ï{”ùk­^¯'<<œÐÐP8HÃXC‡%88˜æÍ›—ùùj,©ÅÙ(Œ½t”ÿžø/»“vsôÒQÓ÷=Ôf¯µyMÖ‚_EPK|KC• Z+åêUøÏ¤Yr«VIS™ïÂh”Š€›7ƒìÚ¥Œå—×ÙX`äÒòKÄÏŠGCSM'¼§zãâ‰cÕÒ§MݸqƒU«V±téÒ"«ýÆŒÛo¾iÑj?5„”윞›Î/1¿°#f;Ïïäšî\<À»–7/¶~‘AmÑ®a;›Ž+[‚’ã[^T™ µ"aQBB -MZgÒ½»™ŒF6 V¯†&M¤®v£F¥>³,g!©?§;>–œs9àMF6¡ù¬æTiP¥Ô÷–´ÚoìØ±ôîÝ»B«ýÔøƒ¨$g!'¯ždÇùl?¿ƒI1ÎŽÎ<Öü1úõêG¿€~´ôh©Ø¤|'JŠoEQe‚ÖVÞfÛ6 //˜3ÇÌ Å“ó¾}àï_æsKsÎú7‹Ø÷b¹ñû êv•.§º ¦§Àµ È{Ož<ÉúõëéÞ½;]»vå»ï¾£zõêŒ?ž .0~üxºví*kœ _•òo.§s®>—õ»Ö³òØJ^ýòUº,ëB­¹µxlîcLÛ;݇v£ÏÓÓÓ§'Ãç·7~ãðs‡Ù7h {/Ä;Ç›ÕXü¹ŠŠ_Yך5kV®û"## gÁ‚ddd $„ÇvöøpNǸqãØµk}ûö¥C‡xyyѧO†NÕªUÉËË»k úé§Ÿæ§Ÿ~²‡r…°f±"9:t¶ݲŴ·‘Dñžs9 ‚w’›˜KÜä8|{€û¸jà¿ÐŸÚÞ½¡Ñ7X¹r%K—.5ý–Ó²eKÆŽË믿nÓ_/ÕX*óœü›ò/‘—#‰¼"ý9síŒi†E!õÝêóP³‡L=äöÚãâdÝa$µÅ¸"¾ƒæ›o¾‘G¨Ø5AW¥ÑVèõðØcpà¼û.,^|Ç7 àw¤+HΆ,‰sIZ„1×H•FUð™íC£7áàT´hnš\ß¾};v,½zõRÅ,¥!„àÒÍKR¾#ǧÇßuoãéиíµ§C£thÔß:¾ZÜ­€Òr‹"Ç ËâµH8c†”œ;u’ް2‘ /¾;w‚§§4æ\Îä, ‚+k¯pრä_ÉDZª#ÞS½ñx׃š nO )išÜ¨Q£ ±ûXŸš B£˜´þ¹ð§3Ny9’ãWŽK‹AŠP7@JÆ ÛÓ¡±”ŒíµŒZM1õùšC• ú±H¸e‹t2Š»»4ïÙ´Zðúuè߆V­¤‚ÅÆìK"}_:1ÿ‰!ëx 5Äg¶U›U%::šÀ%N“ fذaŠÙ_‰¡›y79›z–èëѦ×èëÑœO=Ož!Ï´2ÀÅÑEê ß‘ŒÛ5lGM×âs'í‡c\jó5‡*ôÿÚJÂC‡àõ×¥¥ÜëÖŸß­oÄÇK[†ž;>(­Z)GÂÔ×71Žëá×pÀÿÏýqïz{C£š5k2eÊ”"ÓäºuëÆØ±c8p Õ§ÉU{ý !HÎL6%ßèÔhÎ^—’ñÅ›;ÇÃ̓ :t½Œ[ÕoE§ÒW`Úµ%;µùšC• úi%a|<<ó äæÂÂ…Òá'üû/ôéW®H7lÚÕJß½àF %pqéED ªwU|?õ¥þKõMã—…Óä6oÞŒÁ`ÀÉɉW^y…1cÆÐ­[· ýlܬœ‚Χ¿ˆoý9—zŽì‚»£srp" nzÒ¢^ éÕ£n·;ÜÛE7{¢å8Vª'IDAT6_s¨2Aÿ¯¬$LO—F/®^•öÔ;öÖ7öí“2uf¦´Œ{ùrétØ0¹¼â2ñ3ã)H-64úÐϱ҆Fz½ž­[·²hÑ"þþûoêԩÈ#=z´iNº’±Æ¢‚”ìSò½sX"!=¸ë=î®î5 ’q½@Sö«ãWæá§jKš¯íQe‚þ_(Hu¿Ó§¥ŽòâÅÒ?ü ðšŸÓ§ÃÌ™·¾q7BÒv¤;>]´¡ñ°Æø|äC•†U¤ir‹‹N“ dìØ±<ÿüóxxxTòon;,‰q¾!ŸØ´X³ÃywσuÀïÚÞEzÂ…VoXáÙj+bi¾¶G• ú^/ !íL÷ÛoÒÆûaa·:ÈË–Ióë¾øBÚ¡¿²Of3.†¿ÞÚШgüúQ£m âããYðîV¯^mš&×§OÓ49GGG¢££U• ÍÅøºî:g¯Ÿ-Ò޾Mܸ»æ¸¹¸Ñ¡Q‡" ¸E½Ô ÀÍÅú?èj+bi¾¶G• ú^/Î +WJ;‚þü3¸×0u|ò‰4}ãÛo‹­P¹MþÕ|â§Çsiå%0Bµûªá¿ÀŸºýëÅgƒ>#,, ƒÁPênrjiØù†|bÒb8+Î~ œ³©gMI9-'Íì{šÖlJ E†%=iêÞô® ‚äD-1.Dóµ=ªLÐ÷r‘pÑ"˜2ÜÜà§Ÿ YýxclÜ(m°¿mܱqT!Æ<#É¡É$|œ€á¦ç:Î4ŸÙœÆ#sàïÌí7—]»vP·n]BBB=zt‰½d%X dž ïI8îFFa„ËÀçǺ:¹rƒûï’¸¯Þ}¸»–ïø-¹QRŒËƒæk{T™ ïÕ"á²eÒÉ(ÕªI=çÎ’á‘çàèQinóöíw6(„àú׉Kn\.ÎxŽñÄkª;þÜÁ§|Ê¡C‡hÖ¬ï½÷ï¼óÕ«—¼w³%ÎÖ¤p¦„¹Dœ™—iö=…½á[Т^ éëz-hV«NŽå;9Ü^¨-yh¾¶G• ú^,~õK#Û¶Ác®¡ó@HI‡’Vª4(ºûØÍÈ›Äþ'–ôýéÔ{ªž³=Ùzx+óšÇÙ³g¸ÿþû™4i/¿ür¹ç/ËU`)œ7|gò-ü:1#ÑìL‰ê.ÕéШƒ)ù&âûêÝG*5dõ•µ9k¾¶G• ú^+®^-X¥ŠtŽë‰«¥yuùù0|8,Y"}óù)ù\˜z{ãüê­«Óàã|ó=Ÿ÷ùœK—.ððÃóþûïÓ·o_‹gT¶ÀbFânÄ•ʼn”œ¹~†³©g9—z]î®û gJÜÙ .üºiͦeú«± ¤6gÍ×ö¨2AßKEÂuë¤ è\\`˦úì/Í©sv–æ7eº×˜{kœùiœÙ¥ž Õ'TgóÍ,¼Ü´Uâ³Ï>ˤI“xàdq.Nª.•WO•%%ä«'8yõ¤ÙDìîêN—&]îJÂu¨æRúBkù*µ9k¾¶G• ú^)~û- ŽŽðãªTú/} öìi¾sÀ­qæ­·Æ™/Hã̆!¾å[ÖÍXG^^... 2„ &Tú|¿’œóôyD_¾+_ºyé®÷»»ºó ×ƒ´mØ–6 ÚЪ~+Zx´¨Ô¼aK}•ŽÚœ5_Û£Ê}/ ÃÂàÍ7¥5&Û?=Aï™ÏÂ… Ю4ÎѼ9 3ÇŒ!ã©wœòH ßWÿž×þˆÑh¤F3vìX«­øBP߯>ÛÏm/’ŒÏ¦žEo,:þïäàD«ú­hÓ )·mØ–fµšÙtûK5þ ªÍYóµ=ªLÐj/.ZãÆIÉyߘyxÆ·· ]³ªW'ÿJ>qÄqeÍ„œn~šêþÀ¾?öРAÆŒèQ£¨S§N¥üÒsÓ9rñ‡.’þ$âZÆ5(VOlT£Q‘$ܦAZÖoIU窕ú|k Æ‚Úœ5_ۣʭÖ"¡Ñ&H›Õp-àX¿©Ü÷ù­?ú>øcž iN‰³Ñgé‰tdc½D\ˆ€xðõõeüøñ <˜jelŽdŽC'®žàPò!SB޾]äGZUiE·öÝŠ$ã²µ'j,©ÍYóµ=ªLÐj,æåÁ[oICmk%pÀójþø´ødíZÄ3Ïp}‹4ΜŸÃ1§c|Ûä["/EB&´mÛ–)S¦ðüóÏã\ÊÆHw"„ )3©H2>vé9úœ"÷ùÔö¡«gWº6•þthÜA½bKPã¢Úœ5_ۣʭ¶"á¾}ّ̜ýûaxƒp–çÁéT:Á¦MܼáALã¤ÿ™Nl¬»‘È´H¸mÚ´aæÌ™ 0GÇÒ—! !8›z–ßã~gOü&äJÖ•"÷Ôr­ÅCÍ2%ä ¦AfOwV[Em¾ >gÍ×ö¨2A«©H˜”ÁÁ9*ïêOà•«K¤oŒO^ð .ÌJæÊ7Lj‘¬s[ÇqÝqHƒÖ­[3sæLXjbNÎLæ÷¸ßùý‚ôçÎNNthÔ®ž]éÖ´]=»r_½ûʵ߄Ú¶Ú|A}Κ¯íQe‚VK‘0* úö…ª—¢8é>„€kP¯ÆUëH:ÝšÄÖ‘Ë>Æ:—uDD‚ZµjÅŒ3xá…Ì&æT]*{ã÷òû…ßÙsaçRÏ™¾çèàHPÓ zúô¤§OOðz Â»°©­À¢6_PŸ³æk{ìš u:C‡ÅÝÝ:uê0gÎâããéß¿?<ò-[¶$$$¤ÈûÔP$ܳž{úe~Ç$§¡dê?µA+ˆ›Îá„ÿòÃ7D ÒxÙŒ3xñÅqrº½‡„Þ¨ç@â¶ŸßÎïq¿süÊñ"Ë¡[×oÍã>ÓÓ§'=š÷ vÕÚVñW[Em¾ >gÍ×öØ5AoÞ¼™ðÒK/1räHiÖLš?[«V-²²²hÒ¤É]ïSr‘PieöÔq:Æ0ŒU£7‡~FÌ™žù+ßð D€€-Z0}út^~ùeSbÎ)Èá׸_ù1úG~:û©9·ÇܽkyÓÓWê!?îó8j4’åï¡¶†­6_PŸ³æk{ìš “““yüñÇðöö&))‰fÍšáííÍÁƒ1ôîÝ›¾}ûÙ}M©E¬,iÙö‰°Süíð2­9E^ý@¶ûåò*=ß0‚£ €éÓ§óꫯâääÄœl?¿£dWÌ.Ó2iGúø÷áÙÏò¤ß“øÔö±ÉµXÔæ êsÖ|mív'7ƒ—— $$$ܵÎÑÑ‘ZµjQPPPäzNNaaa„‡‡³eË¢££M§ƒDDDØüÚ™3ЦÍ1ê„}ÁF:ÑLœ#Á&Ÿd¼ÀÜ¿¿&˜`ŽrfÍšÅéÓ§ñ ôbñ_‹éµ¾õÇÕçß`ëŸ[q(pà¥Ö/1»ål®MøÿöÎ>¨ª:ã^JãÅ‹kÚD\o¹º¶ˆ´µŠ ؆c«¤’/‹ £`ZZÒ¸›»Š#N£fh´j`b™›hÓæK¢cÔ`šmfÙÛ‚¢&MH×Á»¸ÜÖô®BxÎyðùüçO/÷sŸá~ïÏó=÷œoY~Çr&þj"½ºö¢¬¬Ì×eúL[³Ö‚\:ªsTT”e\®d­e}¹WVVÆæÍ›ÉÎÎv_ÏÆ*x¹\®r ¿Oît:IKK#((ˆ€€v» inn&<<œ¹sç^ð¸ääd ÍP¾$¯½óSð·3“B1Õ^q”Nâ…ºµS @¯°^Ì›?I#Øôù&òËóyïÈ{îŸÑݯ;#úŒàÁ>gúyÈÒ i¾ ÏùZðMII¡  àêµSqøùù±nݺKþ]ì%îÒ‚UJÂÆFøÓluÏå³—YøÐ’–“{æ}Šê¦p–³ÜtãML>•˜äÖ~²–Grq¾ cTßQ$öIdPÈ K]`^ZÁ"Íä9«¯ñˆ<ÍÎ %á±c0-ñéûÓH`7Ÿ‘Ì xQx&“Ӝƿ³?Ó›Žÿ=þ¬=¼–¬W²€óŸO‰L!52•˜ž1†^P¨5HûÅ–æ òœÕ×xD´Ù%á®.6Œ|•üºGi$Š…^i¬r½ÊINâãíC܃q4Ä6S“{óÛR#SIê—ä¾ ˆ•‘V°HóyÎêk<"Ú¬o67Ãsó¾Å¾hÏPÆ:Ƒ;píÀåà›»¿a—mÔ€½‹I‘“˜Ô·þâVSœÛŠ´_li¾ ÏY}Gd@›ñMÂ/¿„¼Š˜qxD<ÝØÇ ô¸¥Õ¿¯æ«Ð¯èìÛ™q}Æ‘™J\x>Þ>µö¸ !³‘款ÆcêivmÅÈ’Ðå‚üìS|ðËdFÎa †³}|€-À†×h/ª§T|{0‹âq,㯌z…û÷¹K¿#GŽæÛ^Hs–æ òœÕ×xDî * ‡Üá[} “º’Âû4ÒˆŸ¯®»]ÔF×yK$O z‚‡ú=Äõ>×_òçH,+¤9KóyÎêk<"wÐF”„Eùµ¼šËäÿ÷|æîý»ãœí$~r<»Rwñaú‡$G${ gøñ¤xIHs–æ òœÕ×xDî ¯fIxê;kÿ°®{rYÈ¿øš#xãMhH('Çœdä=#y|àãô¹ñÊ?%–Òœ¥ù‚¡ŠãøâKoGoî]t/óæssàÍ?û9$–Òœ¥ù‚â1Æ'æéÚíT»ªéÔ—õo­çJ®j8ƒÌ²Bš³4_笾Æ#rÝš’ðí?¿Áó+–°í‡ýç¯ÏìÓƒ 3&²dÙ¼½Œù|’XVHs–æ òœÕ×xDî ¯¤$=™7؃7Þ$ ¸ŸªÿÉÒåK gYVHs–æ òœÕ×xDî ÿ_Ix®éÏÆÿ•—J‹8Ôô9A¿&{c6Câî3Jñ$–Òœ¥ù‚À?Fß>‚ÏNæ/9óÌx—ÅÇÇÇl…V#ÍYš/ÈsV_ã15 «ªª  44”£G^´æ^o¡úÌwÔSÏ@Ûó÷7sC猕o f+´iÎÒ|Až³ú©§ÙÙív*++‰ŽŽ¦²²ÒÊv»ÒÒR***»wïv¯[uÆž|­:_€ÈÈHrssÉËËcÏž=îuOïG)X: ÛZ"š‰'çÐÐPJKKY³f «V­j÷Ûvµ7Vž±'¬>ãüü|†îþ³ÕgüS_«Ï·¨¨ˆ¡C‡í^óô~”‚¥º¥D.*[Ö+**°Ûí¦9þOÎ-x{{c³Ù8{ö¬zWŒ•g|9¬8ãeË–át:/8,`å_Ê·+Î`äÈ‘lݺ•ýû÷S__\ü~´ÒŒ¯Ëƒ–V"zrö÷÷§°°ææfÂÃÃÝÇõÌÆét’‘‘Á¶mÛ:t( 1ãK9[uÆ………,X°€!C†àããCDD„¥gìÉתóؾ};[¶l¡±±‘N:Ñ¥K’’’p8î÷c`` ‹/6[µUX: EQ®e,}ˆCQåZFZQÅ¢h@+’ââb233©¨¨`̘1¸\.³•¥Õh@+’–‚k„ ¬X±Âôk‚+J[ЀV:,ÇŽÃf³uˆ;k(×&ÐJ‡dõêÕ 8‚‚222<Þ&MQ¬Œžf§(ŠbQt­(ŠbQ4 EQ,Š´¢(ŠEÑ€VE±(Њ¢(EZQÅ¢h@+Š¢X hEQ‹¢­(ŠbQ4 EQ,Š´¢(ŠEÑ€VE±(ÿ'BC•°9éIEND®B`‚mpmath-1.0.0/doc/source/plots/ellippi.py000066400000000000000000000004061316273626600202300ustar00rootroot00000000000000# Elliptic integral Pi(n,z,m) for some different n, m f1 = lambda z: ellippi(0.9,z,0.9) f2 = lambda z: ellippi(0.5,z,0.5) f3 = lambda z: ellippi(-2,z,-0.9) f4 = lambda z: ellippi(-0.5,z,0.5) f5 = lambda z: ellippi(-1,z,0.5) plot([f1,f2,f3,f4,f5], [0,pi], [0,4]) mpmath-1.0.0/doc/source/plots/gi.png000066400000000000000000000434121316273626600173310ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíyxUåµÿ¿' CBH€$Œ $ŒAAFqTZñëU+jQ¯¨Eœ°uøµz¯uê`íuhEŠ¢½‚X¹×:UT@ˆ2„yHB1„L'„ û÷ÇÊ›3ìyŸ½ÏÙ/¬ÏóäÙÉÎÙg¿Y¾gõ]ïûEù?}Á0 ÃøŠ8Hô@†a˜H’=†aFh†aŸÂÍ0 ãSX †a| 4Ã0ŒOaf†ñ),Ð Ã0>…šaƧ°@3 Ãøh†aŸÂÍ0 ãSX †a| 4Ã0ŒOaf†ñ),Ð Ã0>…šaƧ°@3 Ãøh†aŸÂÍ0 ãSX †a| 4Ã0ŒOaf†ñ))‰¼yyy9yälÚ´ ß~ûmÛù––ÜvÛmHIIAss3æÍ›—ÀQ2 Ã$†„fй¹¹xíµ×••q~ÅŠ4h^|ñE`ÅŠ !Ã0Lâðe‰£¼¼¹¹¹€üü|ìÝ»7Á#b†‰? -qè‘——‡¯¾ú PRR‚sÎ9'â÷ @^^’’’ ( úõ뇪ª*têÔ )))¨¨¨@VVÖ)w®´´}úôñÅXütŽã¢>œœì‹±$ú\ss3jkkQSSƒúúzlÚ´)²§IB: bΜ9زe ~ñ‹_`Ô¨QÈËËÔ)Sðæ›oâÎ;ïDCCz衈ërrr°lÙ²È';|¸é& 7xÿýøý>â…^ÀìÙ³= ßÁqQÃ1Ñfâĉ‰B è´´4Ì;Wów/¿ü²áu9œ}6°kýüüó@»vn SDYˆ‰„㢆c"¾¬A›¡(Jä‰ü#$Î@ä÷§ÍÍ͉‚/Ḩá˜h“™™™è!D ¥@÷ë×/òDI ÓÓé¸eK\Ç㮼òÊDÁ—p\ÔpL´av¦¦¦ÈB §L¡ã)*ÐÁ`0ÑCð%59R ëêê"OþÑè¸uk\ÇãÊÊÊ=_ÂqQÃ1‘)Zõ1¤´HN&M¢Ÿã™AoÞL¦dtVŸ =_ÂqQÃ1‘)º¢¢"ôCCðÃ@^з/Õ¡·n¢D¯¸çà®»€Ç‹Ïý (**Jô| ÇE ÇD¤舩áâ£Z~>……@m-°oŸ÷ih¾ü’¾üqà믽¿§£GNèýý ÇE ÇD¤è“°´”Ž¢³cèP:Æ£ýõ×Àñã@f&ÐÒ¼ø¢÷÷4€m8.j8&r ¥@G˜„ Ìϧc^÷ï÷~ ŸNÇ™3é˜àî6~´á¸¨á˜È”aF tv6ñ~ B o¸èÔ Ø¶-~µo ØøÑ†ã¢†c"R t„I]∗@?|ó ÝoØ0`È º8pÀÛûÀÆ659R 5M¾}é/.+áä$2'„ö`³ñ£ ÇE ÇD¤è“PdÓ99‘G¯Z¬Q-jÞC†ÐqÛ6oïk?Úp\ÔpLä@JŽ0 ++i’JçÎôs¼2èòr:ŠUÁ|A³ñ£ ÇE ÇD¤è“°²èÚ•z Ä ´2h6~´á¸¨á˜È”Ýf?Ôד@ :u:t ü½$ºÄ1h½I$0ƒ.**þõ/àÆ;6¿Á†˜މørË+3ÚLÂÊJ:vëúe @Yôþý4y$É£÷ è :-¾/-%ó0Œ^¼xê)ú¡¾X¸0îcð#lˆ©á˜È”t›Ixô(Ã3h€º¥8vÌ»A4ôîM}Їyw_=šš|þy cG Kà½÷3†˜މH)Ðm&¡È µð¶]^Nbž½÷èAǃ½»¯ß~‹²ÚZà ©ÄÑØÌŸÿqø6ÄÔpLä@Jn3 µJ€÷ R{_nnÈœ+ÐK—¢&On½•νñFüÇáCØSÃ1‘)ºÍ$Ô+qxÝ -VÊ /o@ÏžtLÄlÂO?E@=t(M}ß¼™Vö;ÅaCL ÇD¤hC“ð>ƒŽ6‰Ê kj€¯¿ÆèîÝif#ŒIõðã;†˜މH)ЖLBÀ;-vѨ úûïÉ$œ0!Ôµ2rdèw§8lˆ©á˜È”mÙ$ôªú‡èاOäùDeÐ;vÊÄÀbj8&r ¥@'Ü$5pqA¢zûv@á„ ¡s,Ðm°!¦†c"R ´©I(jÔ^ tøªz@âJ­tQKKè\ß¾Ô½aƒ/6´M$lˆ©á˜È”mjŠ »¦Æ›è tz:šš°Çè©SCç`ÄšßšaŸª°!¦†c"R ´©I(V¶‹·@”E= œ8áͽ£ii!îÖ ÁÔÔÈß FÇ®âØSÃ1‘):Â$ìØ‘²Öp¼hñƹ¡:t¼¦YïÛGYò Ajã§:îÙŸ±ø6ÄÔpLä@JÎÌ̤_±Ôh4:ÐbEÕÕÞ  ¢hßžV΋&ÞFakyƒ©Ÿ‚:žâ͆˜މH)Ð4C®©I[ Ê¢½È …2謬ÈiÞ‚x…¢¾ 159R f66ÒâøfV»–Z1¯Gª3ÃÀø9Åš 159R #LB­Eóoú Å=Ev®G<2蚪+‡™•ºÆèýû½aCL ÇD¤è6“°S§¶ìQ…´YÖ.ˆG ZcÂŒ®ñsŠ× ÙSÃ1‘ƒ„ t0ÄôéÓqûí·ã¡‡j;_RR‚ÓO?¿øÅ/ðÜsÏ©®k3 „R´ß¹)Ð"÷C ZcÃ\]ãç/q°!¦†c" èE‹aÚ´i˜;w.*++Û^4@™™™¨­­EïÖ…p2ÓÓiW#¡LJ¢ Û‹ ڬĴƎ2'I¸f ððÃÀ_ÿj%Œ6ÄÔpLä ¡]^^ŽÜÜ\@¿~ý°wïÞ¶ï¿úê+¼þúëx饗B»x·R!Ÿ7Ëdž„ní&b·Ä :L MMB¿× ¸óN`Ü8àñÇ;î†>ú(¦§eCL ÇD*Ðyyy(--”––¶‰µ )) ™™™hllŒ8__[‹…–44àÝwßlݺµ­®&^|[;t@°© hhÓzœÕs[¶ ;?®ªŠWYéÎ}µÎmÞL÷èÚµí\ZZšöµ‘¢ÖlÔõ±¸uîÁ^ÀÖ®]|â àÖ[QTY \~9¶.Xàøºq9…Ï=Ú7cIô¹ï¾ûK–,ÁŸþô'Ty=¹Ì.Š¢|¯$ˆºº:eúôéʬY³”ûï¿_y饗”?üPY¾|¹2sæLåæ›oV{ì1Õu×]v™¢Š2uªñ F¦Ç:ä΀_}•žï¿þËøq›7Óã.½Ôûjñä“t_l;UWW§ÿøÁƒéñFI$ÅÅŠÒ¡ƒ¢´k§(ëÖ…ÎÏ›GãîÕKQpôÔ†q9Eá˜h3cÆŒD!‚”D¾9¤¥¥á­·ÞÒüÝù矯{]0ëôÖá„OVÉÉq2ÄH|^â(++3®CoßN½Óbh?ñä“´ùÀï„·€Íœ |ó ðê«ÀC¯½fû© ãrŠÂ1‘)Ûì2;t o¬Ô ÷ŒBŸwqþ‡ószï^àí·©§{ölõïŸy†þÎ7Þvì°ýô,Dj8&r ¥@Wˆ«íÖd«]b­/û 5º8 ?÷B?û,Mº™5 HKSÿ>#øÕ¯è1¿ý­í§gCL ÇD¤è¬DeÐVKe|ÇŽ¹×AF‰Ãpv˜_[íš› hM‘;îÐÜwÙÙÀßÿlÙbë ¼þºéÃÙSÃ1‘)ºBôÇS Í6©&%SãÇO«WÓÑnyC^æ0™ Ć˜މH)Ðm»ðÅS ítpñè¨ÌÓÔøñS/´Óú³ °®Ý¹X¹Òð¡lˆ©á˜È”Ý$Ö‡NM5~ ›m§ƒ‰§5h‡©ñã§ Zô9ç8‹f!bj8&r ¥@×55Ñ‚DbŠ:))î ´Ÿ2è(65~ºw§ãáÃîÉÇëÖÑêuƒ9ž«¯¦É+‹þ³!¦†c"R tfs³yy jbÛ«X‘ Äajüˆ5±ÂæÍÀÿ7͉;EE4ÉdÂú7rJçÎ$ÒÁ ‰´lˆ©á˜È”]aU úO\W{ï¯ÝG&ª˜?­ôÁâÃ7ŽfMççÓÞ¬q%Öús87ÝDÇ7ÞÐ}bj8&r ¥@göua8Ån‰£]; S'´­ÄÃË—ÇvûtJ¦ÆOk]¶î0êꀫ®¢*Ñ}÷QÇ[ÜpS Ï=—ÞeV¬Ðý#ØSÃ1‘)º °.Эoei5bÚÒn‰€Ò¥ ”Êcxüq^ÜsO ÷G§ÄajüdQÿKŽr=DUÿ÷ÿ¨$|×].Í «W“70vlìÏ•”Üp}ÿ曚aCL ÇD¤è:À²@+­‚zÑØŒC"m·Äàð‰.HF Fô¯EVm²aƒÃû‡SYIæXÔ”s3ãçàÑv¨@7äà0æÌ¡s<@[þóŸ¶VðtΑ#ÔERX¨½{Š„@¿ñ†fO4bj8&r ¥@g–ºô( tû5ص øÏÿtxS›%Žæf`Ï1ªC/™ ¿ù ÿË_Þ_ÐÒBUÞÌŸ €ÃÈA'‘Z€šafΤßëìßë.b7”ÓNsï9 Î>›z¢¿þZõk6ÄÔpLä@J®, ôÖrÔßþ²Ô¹`sÇ$Âf‰ãË/Ã$Ðù™•¸ñFJß|3Fß°ºšDZcz´™ñóé§À!¨[í¦O§ã›oÆa%‘¦»)ÐMý4ÍB6ÄÔpLä@J¶jîÛl?@‚zÉÙ5¸ï> %KÜÔf‰cÑ" J¬R].]€ë®£Ž0±‰ˆ#t:8cã§¡Þ4*SZ[íº_?à‚ €²2zŒ§x%ÐW_Mõ¾ý6ý±a°!¦†c"R ´U“pÑ" $ÐIu5øñéü§Ÿ:¸©Gs3‰pu U [ÝÉŸü„~üâ ÷è„€±ñ³z5P_tèê…çškèøÑG1ŒÍ ÅÅtt[ »u.¿œ>žD­­—½{iÿÙW_^z‰ïM›èßîT€MB9R ­š„ÿøGH QSƒQ£¨‘aåJj¶…ÇÆ¤™y‘Ëž{.5|ñE ›}ë´ØÆÆÏgŸµ^V¨=›ð é— :99¶„zè”9D\Žž~7èÛ—>ÑÜr pûí´QËðáÔ¾>u*}Êjjrˆ~MB9HIôœ`Å$llÖ®ÎêØ8 ¦ÉÉÀäÉ´çèòåh˨-a£Ä!|ªœþ@Ú2èÌL`Ì`Íò³i”A‰ÃÈøYº”Žycr€O èÂBÚteÍÊ´Í–9qDe%-ÔTXHå·™2…þˆ?¤¿¯µï»°°ëד ‹¾â¬,êø«¬¤¿}íZàƒè«W/à?þƒD¼_?÷‡›HØ$”)3h+&aq1eL9ý#LºäúÑv™ÃF‰Ct¯ÂP Z 2UÇeƒ‡žñSUEâÓ«ÐsxkUâ(Ãol¾ùÆáØÌð¢ƒ#œöík¯¥Ô÷í·ÛNßw_Î<“^_ |ÿ=½A>û,ðÈ#Ô þÇ?Ë–‘P/YB{8<þ80`eÙö6 å@J¶b®]KÇ>CZ7–m­iœ~äï-S]Mõ ©¥Xê¸ßpõŽ.bû½˜Ú†I¸|9ÕV'MÝÕ&¡à¼óèèY™Ã+ƒ0œ¨2Ç /Ï<3IIÔÁóñÇÀˆúK€´kG^Á‡ÒÄÄßü†Þ“_z 8xè!ï6j'lÊ”mÅ$\³†ŽùÃZºu†JAõþÛ¬×ÔPyÃdqŸŠ `ûvúÏÜ97Ò$B³›×­³qïp Jzƨ?OžŒˆ“¢9)zÌ`èP`íZ,ûëfÜ}7о}K—wßMï±Vé×xì1`÷nšÐ£(Àï~Gõþ@¥ Ya“P¤è:ÀtšèA£":9™J ••ÀÁƒoØÒB×[(o|û-LJ枈™™dPíÜéð?¸A‰CÏø=i —5ŠÞ÷V¯öÈ ‹‡@mYôÚ{ ¥xê©2œ{®ó§ìÚ•„yçNšÔS]M‚=p ðòËrš‰lÊ”mf?N=zÝûG 4œ~:-Om®«£ôÉ‚@‹7†qã@j zaÃèéM­¶iîßOŸ† rsѶ‡–@§¤Ð„¼ÚZªÓºÎæÍ”ÂìÁ“‡8~åuhA×4¾‰§oÆœ9îb}úóæQ<ÿýß©&}ë­ôïùöÛrµè±I(R ´™IX\LY͘1@ ³Z EgY mtplÛFÇa໫øðátÜ´ÉâýÃ1¨Ak?¢ÖÞ–A¦¤Hk”8ËÕÕÔ|Ü¿¿G-"!þð?yø‘‡rpïÃéÀ•Wuu({åÏî)È„ýòËPÓ!gœA+?îù0,Ã&¡H)Ðf&a„@”E‡ tJ ÕÑ-ÅFb±Ä!êÏXf¦*ƒîгoŸÍžÚ†ZmI£¼¨Ÿ–šÒ¥ MRià ƒZ Nß}gclf:ÔÅ' ¡(¡¥dÿüçÖ2÷-· ß~Ûåú„ õ§ŸR[eq1pýõd2ÞsÒš‡°I(R ´™I¸s'}LÏËk=!:ì?©­2‡Å‡È8‡ ;™‘Aµš¨ ÛÊ¢ :8µñ³g•šO?=ª}Û ƒB%G5r=ví¢£kpXµŠL»áÃC‹Rá¼ó€3ÏDÑÆWÈrN @}ç+WRF}å•ô2zöYú·Ÿ0xí5k¸›„r ¥@gºk9ÔÖÒ݂ʔ@75ÑNÒ­Øjµ³Xâˆ0™êéÞ€C4èàÔÆfy0Í ]hEJJhÜ6v¤±Ã3ÏÐqΜ°7£@øÕ¯0 U’€È¨/¦OLø½>V¯¦u>zõ¢}oß}Wõñ6 å@JnJÑ_ãI$j†Œµ“#–‡I'‡­ Ú ƒP?NZdÜ® ôT€-(pé #Ù¹“jÏ={R»[W\`¿~”A{ÒÜmîÝ_ýŠZ–/§²Gc#0>õUggÓZ!Ï>z{›„r ¥@׉Oƒˆú³ ÖN›%;mKMJÑÆ®@›”8:u"#µ¤$ôÞb·múÙg)IŸ=[µM#’‚2±gáŸþäÉýíP;ã‚ôÞµp!m«˜‘Aå{î¡×oa!ýM ÐkËÍ2:›„r ¥@gZèÂNjô€T§v«ÄÑØHYO¡ª V{6¡˜¯±i“ÿx&%ŽhãGwm|“ ˆ±0úèQªå¦¦ÒŠsZ>ø Åìí·i²ŒÈ̤N7Þ . U«hu½3ΠOdù Í\2„æM™B+ð}ðá?Ÿ)lÊ”]QQ¡û;«t»vô¢?tˆº9 ±Pâ()¡2w„AèfÐÉÉ$œÇŽÙXÆÒ¤Änü47ÓGé®]é£&4àrÚC~ýujl™1#4‹=š¢mÛ€Y³èèÙg]ƒ[$'“yøÄÀúõ´ÙÿüeÔ&áûÉ'´€ÓÔ©ôϘŸ\z)eÚÏ>K«ðíØA ƒlÊ” ögéýO„uH 7m¢,ZÌ ÓÄB‰C³¼èfЉàºu$‚}úÜ_`Râ7~öì¡²ïØ± ðeeÑIƒìŒ3èèwË>·vÔi2zôh ðþ@‹i<üpÔÇ’—G3ö3ú¹±ذÖëþö[:nÝ ”–ÿúWäµ))îAƒB_RzöFŽd“P¤è&ƒåÃvî¤9ùùa'  R€¡@[(qh„á×hXôáuè)S î/0)qƒA¤µ®ò§[(UëÖZQ4—Pô† Æe†G½{7 ÕÀ€QSB0DZT+xå`î\ZŽN2Úµ£õeÆŒ¡}zص‹²fñµ}{äÏZ$'Ñ£Gzö„éWzºé*»ŒGH)Ðu:Í£õõ@y9é@DžŽ@‹2œÞ‹¸ %ÍhÀP …xŠFL1)q”••µÕ  ÏÇ[¶P#®ˆOÒºÙ7êj¸u„@»¼oÔ¢Et¼æãñµÅå—¿þö7àÉ'©·M”z$&-ÞLµl™šJX„PïÚE¦ä@yy(´T^KK#o¥[7úàa÷«cGx§H)Й:Owï¦cDyÐha$вˆ.Jº´A‰Cˆ¹¸Ö“G¸ñc*Ð99$Їk ´¨‘QÜR F‹¦&2æz÷¦ÿ©."Ê¢ G[\† ¡Ôóùç_ÿšs>‰éܙָ5Jë·…hn¦ &„h8@FeøÏâkÏžÐû¬]ÚµÓïNÈàå«]»X¢äobè’’|þù稭­ÅÈ‘#q¾a­ÀôLBÍú3`*Ц=§55”Ì^ܾD­ÿ¨_dÐ}ûR[˜e6)qµÕ¡- 4@­Sz>œK|³É IDATÚr\‹½{ɱt¹¼±u+i§µRŸáqÁ£ÿ;ðê«Ôö1fŒ«ã’“îÝ郄ðô8q‚ íª*ç_¦f¼C’“é½ß®°‹¥rÄ—çîÄ$ÐwÝuRSS1aÂäææ¢¨¨¯¾ú*î¿ÿ~œîáªez&¡]îÚ•´n×.Z·Bw;¤šzÔÖR–9p ÆGƒ :9™Ì›M›(“1ð> “‡!ÑÁ‘•eð)Þf'‡¥¹ÕŸ.¤£Yö DÍšëÚ•Ú$n¿¸ë.š‹} ~þ¶;“°}{´‰¹SNœ <%\´ƒA*Mê}™ý>ü«¶6¶7_þÒùµ^“@ÿîw¿k3¥à’Ö-³­ÎR ƒ¸å–[‘‘®]»â©§ž´´´à¶ÛnCJJ š››1oÞ¼ˆëôLB»-ûí·$°¹¹Oª(ôªRõª…Э?†´¸fÓ&Ê¢Å~…ºTVRAP5ƒ&á®]´ôǸqÚc£:¦NZQBåk®1|¸y €Z>æÎ¾úŠLÙ3]›,¨bÚ·§Ù’ÙÙÞÝCQ¨{ÉŠ Ÿ8AÿOÄqìXšÕé'bêƒNKK Ú~~þùçÛÎ[aÑ¢E˜6mæÎ‹ÊÊʶÙM+V¬À Aƒðâ‹/¢  +V¬ˆ¸NÏ$t"ЦuèúzJ¯ :8t[ìà °Q‡ni!Ö)o¡Ùa––^ŽW/´½q#}B5ÊÚîYªYsÉÉÀ‹/Òñ®»\jU‘‹“u&a @å‹nݨ,7p ½ŽÇ.¸€> ^q0}:pãÀm·wÞIÙó…&zôjb®AWVVâŽ;î@}}=.¾øb[×–——câĉ€~ýúaïÞ½èÛ·/ÊËË‘ÛšÎæççcoÔì/=“pçNúRÕM2h€Êšÿ@:8t BÀRþºTW“Hë”7Xïà,eÐ={R™dËòú –@ÑǶj 4gÍOÝ<\uí faÇœ“Wg* ½@­8ùsS½¾ù5y²{1q EQ¾Wb`ýúõÊ¥—^ªL:UÙ¿¿­kçÏŸ¯üýïWEQn»í6¥¤¤DQEY¶l™òä“O*Š¢(O>ù¤²|ùòˆëƧ¼ýöÛÊ{ï½§,^¼¸u[”@ NÉËS”uëÖ)Š¢([¶lQêêêeÝ:e (Ó¦…Î)ô¸ùóØ¢Üw_è\ĵ۷ӵ'ª®»úê:P”¹s£®UeÝ7ß(  léÓGóÚeËèÚ /Ô¸6|,ÅÅŠ(ëFÖ}ÜâÅ‹•ºº:åÚkX§|þ¹Áó}ø!=ße—Þ÷¼óh|‹›ŒOïÜÙgSüJJì_«q®¥EQz÷^§Š²t©µkE\T«©Q”Ë.£ñ]{­²eóæ˜Çç›sµµŠRS£¬ûäEÙ¾]Ù²x±R÷É'ŠòÁʺ§žRÖ=ü°²åÁ•º‡V”ûïWÖ]u•¢üüçÊ–É“•º‰éß­°PQ†W¶(uŠÒ·¯².;[Q²³•-ééJ]jª¢´kGñ”-€Òº½²TçŠå=@yú‚ ”iÓ¦)~" (Ê÷F8øÛo¿þóŸQYY‰»ï¾ï¼óŽåkƒÁ fΜ‰.]º == @^^¦L™‚[o½;vDCCƒª}ã7b~T±hÛ6êk¾è"àóÏ£n´};¥ª“'«Ö^µŠö“»êªP_mEEäôO›¼÷žæßqæ™”€•—ët;¤§SÝX£ûäØ1JŠO;Íde½uë¨HvÅÀ?það@`ÄúÔ~ð ©S\LíS¦}¤û\wß <÷™rW_mx[mzõ"çæøq*)ÄÈš5ôquüxZ²3f**Ⱦ/+£rÇÿ·¿MÃ'"{áöï×þ^¬ è6))Ôצ÷Õ¾½ñïõ—’B¯¤¤Ä}õïÿ{•¶$’˜KsçΤ¦¦âmñÙÓ"iiixë­·4÷²Aª–I¨[b«A›”8Tûj‘‘¡;k¯KÑ;©ûBWÃL:8zÃkß> [·’cè¸[(q‘uhÛ]_OBÑ¿¿+â DNN±Š¡!–•¼ÿ>-ÚüÜs4fQŸN$ÍÍô¢Ø°ú ÅÑjí8;›ÊJôúOO§×pë1ؾ=Ò²²4‡ôtzAwè)¦))þ~ó: ‰I o¿ývL˜0ãÇGjj*¶oߎ>øÓ§OÇØ±cÝ£ -“Щ@÷èA¯Å]»tfÌ™LRûŽeðÚÍ̤즾žº0¢2„¶H*)‰Z…/“I*?@!Nœ°°7«XÃdϯ˜ŒÂ’:ºXþøc:N›fýšð–šœq-ÐF¸,ÐbIM›Ýœö„(+‹VÏŸ>øÅ/€Ï>£¯nÝ€sÎ!-,¤º¬Øi¡±‘Ê9b¹íÛCo¨ádd#.ÄÆ.!à,Îr“@wîÜsæÌqk,–‰6 Åÿ^½ ^ëééôq^£¡×pM‹%Kt,½ÐJÁ`ÅÅôØ’@‡…ªæñÇÿû¿”&J [Z(ƒNI±?¡ÀѬ¹)Sèû“OhË–ÿû?2ßßüÚHx‡ ‰ã~ý|c²%b&!c)W³‹6 ËÊHw5Ë‘!ÖÕ©kÏ UX,qXÊ uföïOÂcI  J»w—aÛ¶Bääh”j´m;9loå¢@oØ@Ã<ï<ûƒ›š„z$'SÍéÇ?¦×Mq1 dçNzÇHp“’¨$1h½rs vñŽcÂÄ):Ú$4¬? Â;9¢®7Ì  Jbž=MDÃ$ƒn׎DzûvzˆæsY(q¤¤Xìà÷ª“cÏ2µ\XwY”7ìÖŸ— ±N¨{ܸ؟˰8Ë¿ßæuˆ6 EkY £ÈÍ¥’¢a­¡šbBÓõ L2h Tæ‹ %Ž÷ß§}æl ´I-Vé‹÷[âØ1úÊÏwåc},Íûï©á˜È”mZªtr2} ?|X#É5(qX*o¦4`¡}ô(}l6h£¨¯'ãDz@[X0   èPjø8xÐâs»XÞ© ±kWgË7³!¦†c"R t´Ih©ÕÍ@ ÈE“"0(qXzcÜèÊJR(ƒÚæúõÔÂåv 8¨C»(Ð+VÐ çÉ“Mð³ºüí©ÇD¤èh“p۶Є]œ ´A‰Ãrk‰ãøqJ# Bذ¦[ê,›„€ƒ:´‹Ky8y—ÖŒމH)Ðá&a0H]ùù&[Þ™´îšB 5ú„ã–A[0ÒÒBtïncAt‹&!¹¹%<h»ýÏ6ÄÔpLä@J7 Ŏܦ"i1ƒV ´˜ž­ñÙZìChªA2èœZúaûöPWzçN ±±ÈzyC<_ àëÇ?PwÛ!Î7gCL ÇD¤èp“ÐÒZ€å Z³Ä¡QÞ¨©!ñ((ÐØ‡0 t @" ûöEýÒB4-U:Úž@''Sº}èi{Fn.½Ïk¼há’@;Þbj8&r ¥@‡›„–Ë &ŸOþ[DÝÐ@µ ƒÐÒ¶R‚ðµ8 Ðòm¡ÅŽ:hO JÝtã"¨Ì Ò´oC…z»vUõœÛ%Öú3À†˜9R ÃMB·º}{š V^N«‚e¼´¨ÅŠÚ¬é½à 0¨C[(q@—9hÀ]£ðàA bŒÙ³˜ÞÝ®]lûű!¦†c"R t¸Ih©Å0h T‡ŸÎ:8D-Ö’@‹þe§m¹ÄQh_ -öB6êÐ.•7Ö¯§÷  ×r2… 159R …I¾›‰æVSáXhUÚ Zd‘B´LÉÌ müªƒ©@ëdÐ'NÐUVV‘Q’­ Úr'‡Kk÷†€ 159R …Ixð iÞàÁfÛÈ ÛêÐ%ŽM›è£·©9)ÈÈ wÝ`ÂïØ/qìØASÎGŒp`ü8È ã-бԟ6Ä´à˜È”-LBË€­ ºM uJ‡ÑWa¡éÎB!,´Ú¥¦R+YYYX0-q|ÿ=O;Íñc#ƒîÚ•>©ìØa²©  +WÒ{R¬Z†˜މH)ÐÂ$´l–Z<ÏÖ­­'tJ¶êÏ ­vb Šêï`ZâŸVss?6 ,º¹9,FZ¸ Ð_~I¥›I“bß¿• 159R …Iè¶@DqÛGxGLmÒj§Y‡6)q|÷§Nu`üØ(qëÐB ílÅÒ¥tœ<ÙñS´Á†˜މH)ÐÂ$t[ Åªm‡·ê•‰@[6Óm¯škr”8…ºcG ®Îñã ƒ º©‰j4½z™Ì½7æ³Ïè8i’ã§hƒ 159R …Ih«ݾ=)°É„Œˆ Qg©Q[=Ð% *ƒ>z”¦›klZZZJË.Ÿq0n\ &¡[]^N5ÊTWÏÏ7܉Ë2lˆ©á˜È”ÝÔÔ„'è“tïÞ6všNO7èÒÈ …2èNl® aÁ$4º¥…ؤþ|ØÒv)©©T«//•Æ#pA EýÙòÀ†˜9R 333±j}ÖY6.LO'Šèa‹D³Ä&ÐŽÊáÏa’AT²©ªjݽĤƒCôèÑ1?Ý»Ózâï5ÁpF¡ -êÏ':~ŠØSÃ1‘)º¢¢+WÒ÷çžkãB Faß¾¤¥›6ŠF›#ƒ°lTOZû›-tp$'Óx?6BÃN!Ћǥ¥Ô‡>|8У‡£§PÁ†˜މH)ÐYYYmô„ 6.´ Ð0r$M”P—8µØ…?‡ûî­] ÃŽƒiÉÓ¡C©a±ñãÐ(ÔÌ ÅRw3h7»7lˆ©á˜È”]SÓ„={H$MvŠÄ‚@ÀyçÑñøau‰cýz:Úh‹&!ŒKÇÖÈ ÃëÏ@ ÆU“NŽ={€”Z@Ú^4bj8&r ¥@ïÝK3 m•7Ë}þùtTªª)¥îÔ éצMÔþeûã· zäHòîÖ®…a‰#Z ?6Kýû“Y¸qc”¯ P{‹ƒéŠBœú7p6ÄÔpLä@J>r„²Q¯úì³I ÛÕWCéܹ­×Kt\z©Íû¶2è´4Úøuß> ¦T¿Än1š„€å :9™ÆWUµûKI –7Š‹©l3nœæúTŽaCL ÇD¤è={* L›fóB‹ݹ30z”‚t¥Íi!¥ˆiu54*sÞf^â9’Žñ2 2GŒ¢¼áÆôîpØSÃ1‘)Ƚ÷¶U¬cQ `ÒÙA$£5êàPèäd‡í_©©t±… …•{´KP·Ã A¡ä<^&!à­@»YØÓ‚c"R tJJfÍrp¡ þÉE”éî­Ê€¢ëÖû÷Sßu—.î„í·€¨ÁÖ–i—8´Š—Iè´Ú‰-vMMÀ²eô>6~¼íË aCL ÇD¤è#꜉¤  é`V®~ýk:?}ºƒû 22h&cs³éCÛú€uº8´v»Ž—I(ÆDµÚÅA¯YCódÎ;OsÉ‘˜`CL ÇD¤èaÃîmC µÔbW LŸNåÁƒ[ouvk¶&«´ÕSW¨Káå–‹. ]ãØøëqØèž=i†øæÍ4 @LíUý`CL މH)Ðb¹QÛØh!¢²;£¼œNýñ6vPѦQxÉ%@7EK I5›ñÀ*·„íŸëÜøIJ²³©Äaa=€Þ@Î:‹Õ/*]·{7Å8;ÛöÜ^#6ÄÔpLä@JËÚÆ@O½6ÅÅÀªUÀ¿ý›³Û¶aq=ÁäÉ$ÐÇ]ÑöOµh£Ûýb2~ºw'µµ¸js\¹TŠ©©¡ìÙætÁ °z5%ò¢#ÅMØSÃ1‘)ZìIh;Ý*TÌ œvšÍ)åzØ(q@¯Ì ÒPC-Ùøè#:×ÐÌ›GIïŒ‘Éøq` ^µ 1•7V®¤÷†‹.²¹B EØSÃ1‘)ºÎ`glCdÐÖ›¶€Í GŽÐÙxúi:µx1ièO~¢^:&ãÇQ8v,•|V­”]Î;8¼¬?lˆiÁ1‘):3Ó{“Po»«˜°1›@›@;å`Ù2à·¿x€~5{¶úá1?z¡SSI¤ެqžAü1½¨?lˆiÁ1‘):ž&¡«-z™5Wº× U,ŽÏFr2ðŸÿIS«o¾9²{C“ñã ÄçœCÇŠµÎzÏ`ÃÚxaÐ [—Z† 159R ãbêìG¢»ÁêLkÝÿÌl|ý5•žxxåm.&ã§wo:F,®aލC7ípVâX²„ŽW\aë2[°!¦†c")‰€›„©©¤l‰Ê ÅK«ðš"—±cC“SôƒHKKs6¶¾}éh³6)ÌÓôít~¾­ëß{޶×U±ALq9Iá˜È”´c“0°´q,oZdÐÚ 1?B KKm]–“ ܌ޥhÉînk”C‡È`ìÝ8óL[·µbj8&r ¥@;6 @›MÈðC‰Cv¢>lBLÆÃ .¹íшcÝì•7ÞŸöÃ6Í›ö:bj8&r ¥@;6 è¦&j¼5Âg%+Ädü¤¥Ñ}ÊÊ,Ï&\T@å’${¡¨?{YÞØÓ‚c" ­A?øàƒ8vìjjjðÊ+¯ 55µíw£FÂøñ㑜œŒ^x!â:Ç&!i­ÊãUG à™@ÇlüôëGËö:dk˘Ñ]I ‹* `uµµTSÏÌ.¼ÐþPíÀ†˜މ$,ƒ.))AUUæÎ‹©S§âwÞ‰ø}FFššš£ññÞ±IXï䨩¡Yn.­–’B"m³‹Ãª@Ç<;Ìa™£Gup¬>Ø[·Z»æãiVäÔ©1®obž5§†c"qè={öàG?úQÄ×›o¾‰¼¼<@~~>öîÝqÍòåËñòË/ãĉøLL5kűIXèêjª?Û\W”¬,Zr´¾Þü±GŽzY¬ƒÇlü84 ­Ó¼÷ o½eíš×_§ãOjëVŽ`CL ÇDâ"Ðøè£"¾®¿þz”¶ AIII›XGÓ³gOÔD-àSSSƒ… bÉ’%x÷Ýw[·nmË D}Mó\K ‚P[«ÿ¸æfl­«C°UÌ ŸÏî¹ìl@E…ñãZZPtø0“ƒ­Û¶Yº€ØÆ×«ûê+{×#è¿ý­Šb|íŽÀ?ÿY„Þ½Aƒ\ˆ©×q9 Ïúf,‰>÷ÝwßaÉ’%øÓŸþ„*«³|ã…¢(ß+ âþûïWfÍš¥\wÝuJ0T6lØ <üðÃÊ‘#G”3f(³fÍR~þóŸ+ ×M:ÕùMoºIQEùì3ýÇTVÒcÎ8Ãù}ô¸ürzîïMÂ~ô¨í1¬[·.¶±-^L÷¼ë.{×õê¥(ÉÉÊyg7*€¢|õ•ñÃgϦÛ<ñ„ó¡Ú!渜„pL´™1cF¢‡ABMÂßÿþ÷?>Ã[·ê˜?¾îu®™„zxÑb'°ÚÉa³þ ¸döjÐõõ´XA~v} ¾\ ¼õ팮űcÀßþtìãæ6`CL ÇD¤l³óÜ$ô¢ƒC`µÚ@'Ä$õê‚\}5ù  Úí5*Áßpƒ£uýÁ†˜މH)О›„ñh2蘟œJm현b£Ø‚dgÓ&GŽhOKonžž¾¿ë®Ø†j6ÄÔpLä@JŽy&!àÿ‡ÍY„€ ³ÃÊ¢+*(͵‚X¨¿u‘¤ë¯§Ÿx‚f †óúë@I -ú$v76Ä´à˜È”“Iwr44P‡E·n±Ýó´CvÍø½aƒþc$Ê ÙSÃ1‘):&“0haÐÅš¥áQ‰Ã5ã§ èÔ‰²dEÑ~ŒD͆˜މH)Ю˜„€¶@‹²ƒ—íw“0)‰J55Ú3 vìúô ÅÒǰ!¦†c"R ´k&a¢Ú¯&!`\‡Þº•z¤%¨?lˆiÁ1‘)Ú5“Pkº·h/kÐf%‘AÛü;]5~ŒêЭ»~C£‰ 159R =5 ãQƒâ¯÷I`ß>:öécëi]5~Fޤã7ߨ·t)'Mrï~†˜މH)Оš„ñ(q-˜¤(´FF†í>lWŸ³ÎÒÒ€/¾ˆœÐÓÔ|þ9­rÎ9îÝÏCØSÃ1‘)Zz“P<m-µõ…sì«ÊÙÀUã§Cà i,_:¿nMð9ï<[ 9%6ÄÔpLä@JŽÙ$4š¨/Öëä™vÝø¹ä:~òIèœØ®ûâ‹Ý½—‡°!¦†c"R tÌ&¡•´—&!ôèAÇ~ˆ<ƒ@»nüþ׿èØÒ¼õVäï$€ 159R c6 ­tqxAççÓqÏžÈó1´ëÆOa!-œ´f •9–,¡»óÎFŒp÷^†˜މH)Ð1›„íÚÑbø‰,qôïOGÚuã'íòzÛm¡ïzÈÝûx bj8&r ¥@ÇlT横¢íáTT„ÜK è¸{wäùÚãgÆ `Âê‡Þ´ 7˜2Åýûxbj8&r ¥@Çl$ЊYæPè¬,ï×8ö ƒöÄøIJÞx˜9˜;—êÑ>_ÿ96ÄÔpLä@Ê]½c6 ÚÖiÃàÀ!X[K}¾^„€q”ôîmû)=3~ æÍóæ¹ãbj8&r „.”IDATe³I„0¼‹"^õg€&ôèA‹‰½ÿi<½{S™Å&lühÃqQÃ1‘):f“H¼@Tæhl Mí./§š¸ƒòÀÆ59R ]1 µZ|ß«WìÏo…è2ÇwßÑÑá*qlühÃqQÃ1‘)Ú“PK c0èm®]KÇ3ÏtôtlühÃqQÃ1‘)Ú“Ð-2è;è¸f ÇŽuôtlühÃqQÃ1‘)Ú3“0Þ-2å/¾ ¿µki"±«¶MØøÑ†ã¢†c"R ´+&aÏžÔÏ›H6 ÈÍ¥5—¿ý–z²GŽtÔÁ°ñ£ÇE ÇD¤hWLÂví€îÝI Åƨ1ô ;"~ücºÿãÓ9‡õg€=8.j8&r ¥@»b$ÄÔ^'zûô¡õãÅe—ÑñŸÿ¤ãøñŽŸŠm8.j8&r ¥@»b‘uè~ˆ©Ù1'íÛÓ÷×\\u•ã§bãGŽ‹މH9ÕÛ“ˆèª*ú>Þž,X@÷¿å–˜Ö¹ƒHKKsqp'592ƒvÅ$":Þa8W_M‹Ÿ?Úp\ÔpLä@Ê Ú“-š¿yshzw"Ú%ØøÑ†ã¢†c"RfЮ™„\@ÇO?ví¢ïóòÜyîÀÆ6592ƒvÍ$,(¤eGKJ¨{㬳ÜyîÀÆ6592ƒvÍ$B»SWW—_N½Ñ’³ôḨá˜È”íšIDîN}óÍî=o`ãGŽ‹މHYâpÍ$€‹.RSiÉöÚ‹†m8.j8&rÐ zöìÙ2d<¨úÝŸÿügÜrË-¸êª«pèСˆß•––º7ˆÌLàË/Ï?ï Bx÷Ýw=_ÂqQÃ1ѦJ̇ð è^x&LP?~ü8V¬XW^ysæÌÁܹs#~p{ÓÒ1c€ÁƒÝ}Μœœè!øŽ‹މ6~踤Œ{öìÁ¬Y³"ÎÝpà ˜>}:µà9r999€~ýúaïÞ½¿oiiñp´òÒÐÐè!øŽ‹މÄE  ðÑGéþ^«Éµ’““ƒ rF^Toò‘#G0qâDTvµ&-1UUU†q>UḨᘄ¨ªªjËœ£Ë©‰& (Ê÷F$âæ=öÞzë-œ}öÙ¸ï¾û ( Þyçüö·¿Å3Ï<ƒmÛ¶¡²²Ï?ÿø F…sÏ=×]w]¢‡”0ÊËËñÈ#`Ó¦MøöÛo±yóf<òÈ#HMMÅå—_Ž«¯¾:ÑC”«Z˜Š¢f½hÑ"L›6 sçÎEee%÷v‚J>õõõ§ü'~mh“””„ÌÌLTWW£OŸ>‰NBÉÍÍÅk¯½Ö63ùé§ŸÆ_ÿúW,X°¯½öZ‚GGø²¯ÌÌT”——·Õ¢…™ØWâŎ젣믿7nlûþ’K.ÁÀ1¼„s*¿6Œ8ÿüóqþùçãøñã¸ôÒK±|ùòDÉ7ìß¿Ý[gû¥ËÅ—mÕTÌËËCii)&L˜ i&žÌ˜Å¨G¨­­ãˆüÅ©üÚ°BÇŽ‘”$ÕhÏéÙ³'öïß^½z¡¹¹9ÑÃàSÖã±ÇÃêÕ«ñàƒâ¾ûîÃUW]…™3gbåÊ•èÒ¥Ë)Ÿ!mÙ²O?ý4RRRСCŒ92ÑCJüÚÐæÝwßŧŸ~Šºº:\ýõ‰NB ƒ˜3g6oÞŒY³fáÞ{ïÅÝwß´´4ÜtÓM‰ÉLB†a˜S þŒÃ0 ãSX †a| 4sR²téR<òÈ#())Á5×\£š­Ê02ÀÍœ”Lž<ÉÉɸá†ð—¿üÅý¶&°@3'-ûöíCff&ïÂH 4sR2oÞ<Œ?óçÏÇœ9sÜÝ&aâ·Ù1 ÃøΠ†a| 4Ã0ŒOaf†ñ),Ð Ã0>…šaƧ°@3 Ãøh†aŸÂÍ0 ãSX †a| 4Ã0ŒOaf†ñ),Ð Ã0>åÿé­Jð§¹ûIEND®B`‚mpmath-1.0.0/doc/source/plots/gi.py000066400000000000000000000001411316273626600171650ustar00rootroot00000000000000# Scorer function Gi(x) and Gi'(x) on the real line plot([scorergi, diffun(scorergi)], [-10,10]) mpmath-1.0.0/doc/source/plots/gi_c.png000066400000000000000000001606011316273626600176330ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½MÏ%IVçù3s÷ûö¼Ed&Å‹DuMUå ˆ‚Ý,ª„ÐhMW€kv”@bÄŽ_‰H=j5Œ„Ä !4„Zb Ý£™*¨ŠÌˆçí¾¹szafîæ~ý>‘Y£ )ý¤<ݯ»]¿Ï5ÿùÿþ혙3³?~Œ9æ˜cŽ9Þ©¨‰pþ¿ß2ÇsÌ1Ç0ü÷ûæ˜cŽ9明ÐsÌ1ÇïhÌ€žcŽ9æxGcôsÌ1Ç;3 ç˜cŽ9Þј=ÇsÌñŽÆ è9æ˜cŽw4f@Ï1Çs¼£1zŽ9æ˜ãÐsÌ1ÇïhÌ€žcŽ9æxGcôsÌ1Ç;3 ç˜cŽ9Þј=ÇsÌñŽÆ è9æ˜cŽw4f@Ï1Çs¼£1zŽ9æ˜ãÐsÌ1ÇïhÌ€žcŽ9æxGcôsÌ1Ç;3 ç˜cŽ9Þј=ÇsÌñŽFýý¾€w5¾õ­oñ¿ñüÈü÷÷÷üáþá÷û’æ˜cŽÏXÌ úLüÝßý?÷s?ÇüÁp<¹½½ý~_ÒsÌñ‹YAŸ‰¯~õ«üâ/þ"ó7ƒ™qssóý¾¤9æ˜ã33 ÏÄýÑñ[¿õ[üÂ/üßøÆ7øû¿ÿ{~ê§~ŠŸýÙŸ¥®k6› 777O‚Û0ÜSbå‹é’¯no§?㤸–™*~®˜Ám÷Yî¤ØÉÛÆŸï¬(c£58³ÁۺϲTÎèË%]\Œîº °ò-yÛ¥·kÜÝßrusE¼BÅLãÁPÀð®XW·Íðj˜ä%ô‹u`¨çv»ãfuZcZƒÕˆ:Z…£×j”~1Cjм,@†6 KèBwDÙ£¶Ý¡¯^â. d‡É¯Q–b,– K•‚ßöH\vqÁÀh0«!ý«ãÚ –½Yºå™Ê¿C›¬)SÎNþ°#GZuÏ }õÄg}vbô™øùŸÿy~÷w—¿ú«¿âÛßþ6_üâøÉŸüI¾öµ¯ñõ¯}ò}§ÕñÓAú›ßü&_KŸõZHNqêÊbÅö7ÿìÏùú×¾Þ½sÁñÙ‹û·ƒa`WZ1‹À‹EâÚþÍÿÀ׿öï"]д–´îhëÁòÒ*°þâ?þ?ÿ¿~ sµ£E9v‹Ùh©j”¥±¸^ ,L¨Z½`;ÀV°G‡¸ØÞCXòþîÿàßýÔÏAXcíÚ .hÊûÖq×ÂËÖxÙá£ÖxÑ‹ָ«ápa¯ŒãŸÇãøï‡÷öb‹„ÁŽßf÷ŸþËÿésØá;Øá;°ÿvxAs¸çzxï |°‡8Ÿ;õ·@ÿÙÐÿø6ÐÞÏq\` ,†ˆ† ¨0<ÿØþW¾Ü|~P“†@¶â{ï+—ÛS•o|€?ÙþïÌcô™ø‰Ÿø þäOþäË?­_ßæ,8O'wÂò Ï—ÏxæÌ ¯Üú’6Íÿ'õ‘+†™ãô&,îRi—>ÌY¿mÖýcÍ,¾NE¼y0¨Òî¼Ö{óéíšÖ@« s†’E­Û" TÁ”@\ARÇ' WLÂÚ}”¨ò {=&{u¸ä™\R‹£GÀK\\0`[ãðdáÒ×n <7ÂÇ òÞ»úæ?ˆ…‡°®Øµ/Ø…ܵ;îŽÂýÑØïÏÕà*à œ:‡Ã¥æ(×}W§‹•õã¤Äñø»î÷ Ëž?=6Ç èO~ø!ðæUé<_SÚàÃ/xþdOó¹+žX>üò—úýÝÁ‰“2*Övý¥E¾µKý¥¿˜”¸áJ8ûtr—n[³HÜü!f Ò3×ÁÙ›áÓÛLÓRE¥ýùÏ=Ö€V5êó©â•E< J XèàP‚å#ªV𵂒fO –êÀ—~è“AÖXX%ûa²‡°çR®¨Ã‚Z»¤¯¬ƒ´<3ì¹ÀÁÕšês?Ç,¬!\€\@¸¹ÂÂí ¶íÇÜlw¸ FµƒJ–T¶ÄXà]ƒ§Â%ƒÇu?º?:ïû›ÓJ0øö§r_Æé<¤,Î|Îg/f@‚øðËöõë ÉûV.îƒÉ‡ÁH[IÛÑá~]üHƒáûÝ„dŸ†óx;ßvŽÒžèú~ñÃ/¡XÔmÎp>‘Ö>JusYþ¦›=+igU,foFeÆy’À5…ûã_FÛ¤²k°ºF+ %‹ n ´( ÍÔ²+¥B±¨Lùâç߃Û;Ð-È d®ì"¬ÃŽe¸æýpI#ž:@  P'`û6‚ú»¯`¿„peȡϞì&ÀµP]þ8|û«Ïa¶ˆ –KWDùý ñÑñ»<î^ÑÞïø·/àâeÍJŸaî Çl®Æ%H3PÓñ[}¿z6ªMS5Àº:6>özHçWÆÒ5'uî³3 ß6¦êæ÷ ÒVn¼æ¤C¡=ŠáMôz8Oiîr÷ðƒò9ôÔ¹€ën˸¿‡´¦-O$€ÏV‡Og)A­c8['μUƒC½Õá,&Þ `G»»B}3‚³&SCh-pÄhÚdy´Ô^X®„Ú+ Rø(YMïá¸Åd™Ôôò"[|¸á:\SË‚eð4j1šu€úhüË=^€]v#ð<À`×—‚mÖ «%4ïa,°vƒµ× Ï1ù ?Äöð1ÿù;ÿ/ÿמsü€Ú]PÙ u ‹ØHè*\òœ{5}Z‹ÎYyýÉ =%/æ˜ý½ˆOéÒnèv¼ÙIíÜ=3<9ùv9=³ wæÑ]ÛÿFCÅýeٚȻ“bÅÅeHk÷è×ù:¼OpÎ6Gô.zêÚp13œUTæ‡4AXÌ’À\%8kôªUAêÙUøÒ’²Lünz(ûŠî-AÍ;óú{é9ú˜ý})½0MÛ±àµrç©Á|röòýùp"YÆ'w¸Î…È¥4?\”.é"7Ôõ`ÎÛ¹h„ðA*n»doô`¦÷§5·VÉõ°¤¤¡N ‡B6£J@B´4T­SÒfk*´jPW:ki‹î󣱘óq@X™$h+›FX\Þ'8#@H–‡`ÖBûˆ ¬°ä[x€ðá‘:<ãy¸a–¬BÅJ`Œe€U€¥* ¼Ø ¯vÂþ6.»¸PX ¶Rhj—ZG°spïá» ê½$¨°sž+ªø`Ap訦¸z¶ôÝcá×­ûíÒo3 ?Eœ¸OªØ¾àhcFÔívO~æi±“Ïí‹öG‡—Y\c†îÎhÝMkYwœŒû•¤€Á\¾ÙóÆJº€sò™½£ð£ 5­é¯Úgu$‹3¼Ö…’¶B-C•íoщhzËClQGºÌèìGÇÿGZKSŽG„6zS «P{‰frRÔ15#€Ðv|€p!-WX¸‡´¸ðÀ&<£‘k–mÍZxù½ápîøįƒôø|¯ûÜÏNÌ€þ^ÆkÉ{¦â•ðàdÆTn]W´øÌÎò8¹¹2šË$¸tdæñ¥– Î?‹Xa^X_t  ÓÇšÏns<Øçs¤›ÔròV_6f¥œüh#ï/ÍJº¦V7H±Ë3¤·ˆÓb¨€$»Cš%êr³ŸüiA8$H/¦¬/*a½>Y>D5]XX Ç;8ÜaímTÒrrA-w4á=žË3–aÃ&Ô¬EYXY`Cà—¯T¸Ý ;áP)¡1¤R´êŸâNîèñ‡Šu¨¹6X¹ªk¨< UÌàpCHwßõ\Oëᛨå·;6GŒÐÿ?Ǹº½¹Ã|úæsšfê“Ok•roßph§P<0J«ÜÅ£Õ‘Jemޤ¤‡]U’ïi…ÞݪQ9{Ÿ QÚr1c¢÷*2-AÚwΞ³h±dA›à¬R¨ióh‚tt سŽ6á@`oÊa…r0ap0áÂ.—ÂÒª:ªi«B‚uÒZwp¼‹q¸ÅÂ5ÈmھÇ÷¸ïÑÈ µU,–É_#lL¸@¹D¹7å±v­²7£ÅbÇFÔS›gIÅÆŒ çX›PcùG†Ã¹üËH¤KP—¡¬ýú{é9rÌ€þ^Ç´àMá*ö铜¾÷Éb#8Ÿjåüª=ÈèÈ'ë=ŒÁ[­ sN½›„t~›+naïÀõQöYQKÒö£^gÒU<¡ù¤¢s]'“uh{(TVcê“m½ŠNK!Ý‚.l ªeéÅõ]—”ØUÅÒ:)éGv Î{ö&.as)4•઀U±GŠÅ^)˜kŽ÷ØáUò¤o°ð Ôò oïqÉ5Ø’Š˜Q²L†µ ¦Ü¡< lQö­Á@-w?ñ,¨X:cm°v° wiÏ_•¶CQ/J_zJMãÔPnÏþd1ú{VnCÙ kÌÖ ç^Ag_£Ò˜+žKm­SÔ@B‚µzd±@*—8Ñî‹VÄ{Zv+„ ÖöWUàê"°¬_'%Ý)jÁ\ZÐìxáãÔmð%&ÏQ}N°—(Ϩ¹âÚ.pÔ4¦, ÔÂåckÆãHÔé’þŠÞ9*s4xÎXZtƒ¥„ºüÝ<•¹1ê´SJšâøøØ é§bô§²>=¡œ§°˜NÚÆS¥Í:'øäÌc0wÃÙ'Mš_+½Ñ‘`œ·},UöB± b‘$s¬Ž ‰¨kmÈ~…p–”~'-„Ö&Y˧Y5È¡ÎÑ÷L u–!xäÀ£…Òq½#pÝ®¯ZVuÀ¥^(V'`W ÔîÕt¸E¯Üì–ÀsÄn®®€ Vl¸±† hP–(([Œ=Æ‘èx ¹©/ZžxÃ×N© jræs® }I بÎMå6·s»Â¶oé9ú˜ýÖaòɤâSý^N/y„ïq àx¬Žî>+óèÒáREgH» èþVŒÏ‡¹¡’¶ôóZ3¤­w¥;`;ÃWÖûÍÙâ¨JHçAŒú–?KvǪdwXꨖCk#¬¥µ¸N–‡‡¬kÂrøÎÖ­cÓ_à‘#ôÙ-°%°sÂÍZØTÅB°E€F°ºÝ«€U-êw·C¶[‚Ü#vOàÁn\#v‰pcÍÒ–\QQ4‹èFKt”óX‚ù¿¨¦=•3jËê*çªô¸^–¯§!ûˆûãsǛŠèO¯‘ÇyûÃÓôü8Íå”Jϵ@–ouåîá-5Ù¡¶l,[ý×côƒEÅ g^tÁÅу[´ó£3‚Sâ—¹ôÓ| Ð ÞpµÅ‡D ]kg4*W$8[g}X„´V½']tZ Çîh†A=¨; $TÈjÔÁG˃Ü5%vovÖrÏ!æ-#< "ö@à`÷QIÛ%ÂcCÅ’% à©Òm‚tÎÉè«Fî'hTÎáLÉŸjÀ¶“Wc¥•Zr£`rJÔ8@ CÔii²Y"+xO0Ÿ í¢ïkQ¹¶&NJúá•n ÜšðJg5\Ý 8ÎFk%¸r/„V! –CmQËYÎ5ùWÉP%”Zº·“܉’.!=n¯°§Ôðií:¯²§3œË˜ý‰ã ™\”xâpq–aÕ<Åî訕ûbéq{}ÙÒîpåõ–ÃÆ7•ö¤ñ’îOÞ ýÐiú$›PÒPŒoT8ËÙêpYE§µåI]ã¨uoK‚WªÚp–mŽÜ`˜¬Ž Ð¶©'ÊëÞˆªº’+Y@Ê•¶4~´• >Àq²´8æþ>;â19xär‰l*ÄÇY ƒU2¬Okð€ò±m¤/Mx©ÂË`<x\¯ŒÕñÓª¥¹ióZiíˆÜßÇÔ@bIÖ)OÜ¥EW”8c÷hPŸzøNA»„çimÌûOmi p ðÓº==(Ág;f@¢8¥îØ6>=0|Ëi.Eîè$]?­¾ÎÜàô–Êu%s¯¾ŽÍ§·Oþ×äAtò‘ØCÛ†€î²/ÜðéÁá©ú¡œI}J¬è?b6°9 °ÚaUauäÉa©È¬5khë5µa,ª8»Igu¤þÜ[þRzFVÒq1 ñ˜ • +Yâ¤" ”PJŠ:@£Ýƒl#¤Ãn kG86ÈŲ¨ÄzX ØG«h1îì/žx%ƫσñ<Ïn*ãò&ŽÂ׊ÑJº†»©Kh òˆˆïýzˆEÿ÷‰¾f%=†tÿ t.¥02¶;Îí;gkLAzêØ4¤çècô§Š„¶sujæszäIXcÓÎH†"EïB+nš±¢¶ìL”êyÚ‹ÎŽQΘ“ƒ~<ŒâƒJ%Àœ!íR¹œ ö˜¯(ÆKp. mÙ•ÎÇ Li¼R5Š+ Erz ö1ÑÙú^( Á‹²”$Hkž %[ ÒÇ]œÁªœÅ*$hËÎWájC¸h®!Ø¡!XC é€ÝRñ`ðR>æ6À«`¼è@ýLàãzm,?€¶5Â1¦Æ,EŽtçQjÔªôwŠ- JzRw &Az8F‹¶­ó£ÏCz\_§lRO}ÎÒƒ ôÔÎÏ\Ì€>fÆoÿöoóòåK~ø‡˜ßùßàœ<”5zà爎q!FžÅøsGŸR0|ª±H[N -!C‹=Z\}•àlYAgS9pïÅóÆ‘B}§¢ó„®ÞR䜞L±8‹v‡Ëf†v€Q|‹ºP¿ÏìˆË¢Rê…aeîœJTÒA¡ìxL‰Í±»`éO;²i’‡ $»#+i Q=AÖ†1Í]C§ª½‹°ÆÉ¢s¿ô¥5jz'D‘ È#„Ç·ë­Gn. —KÄ­V‹CVXXBXÓÊw ò;¹å.¹Kp¾kÛ6*ëgµ±¾Nç¾Ùº} X8b´˜Å¾ƒ1ó¹e£d†ô4{@ö*:×¥7³6Î5>­–§ò gHç˜}&þñÿ‘Ÿù™Ÿáßø¿þë¿Î?ÿó?óùϾ(QÂ9U6›¨ü6±9RÑñØi¥tS`&S¸cq-nô–AÏìîþpÝl'¥’6Ng9É7]is ZM§~Á‚¹n†“ÒÔÙ26³ô“<+i‡UšBŠ`Î?á+ÔBÑt˜þ³>mlQ uvÙ廀´µm—ØlÒõñÆ$à$ÐȆ YâħFG Xëì!Üò@œLû2Ïbey6+ä¦AnÞ'¬Ök‚­1]¬0YCØ aƒ„ ‡—ÜÉwA¹ pà¡5[x¿6ÖWF»‰ã…hcq†‹£n —œEžLõ”ÝhÝ×µ!D§T5ƒ}SÖÆ)¸ßT-ÏpžŠÐgâGôGÙï÷¼ÿþû¼zõ €ÛÛ[¾ùg~ùË|øåÿž']³ÌÓA‘ˆ§sáº$T£Œ åÚ}ˆži ¶érï RfGé²É ¾otWÙÞ0úV¿ kísèÌ\¼p$¥Ý¹ÌÎ.Iç“y`Éê:AšºC±!hš#0NÝšç ÔBI§ «*¥Z–ãq$?:r¢s‹iß ÅBj$P˲ÂI…K³Xuü `ÁâX;8>áäÒ"¤ïAºÅy¶!Üü(Á_Æú¥€´¬!\ rÁ1|Äwä–»ðÈ]kÜ·ðp4vGã}‹•¡MüETJ„a`cŸ—Cg^å’ÆÐ¾×å:7ï)¬§¬óvÇ´Zv/äžô€½µÌcô™øÕ_ýU~í×~ø‡ „ÀOÿôOpssÃ׿öï³ÜK¥ËÊ8Ñh8 ØvRdøÿذ6È®ƒ3 Må|ãb”'*-ŽÌvW‚9m[tyó$¢np¥Î,ÊÙ«p I ïa‡·jéÊbo;oÑy(‡qî°âÀœG}hµÜhØ -bZ(éòTnY+õJ{O:wX )Ë#öF=bEWÁRQWrÁEØà¥Á x±j‹¶G‚¡-îp!-W ·†\Á}kÈ+Gx\_úÁd™¼ð5ÖD3{ƒÉ>æ±ý˜}{Ë]{à¡5v‡˜Ññ^³kpêq–§¬ÊRÆmS xXëÎWÖáö)`3xKx?}®¾ìðó?¨.y¿ºŒ ßž¸®ÏfÌ€>ëõš?þã?~M©¥ÝË©„  Þ.›ÂU¼/Ûƒ:µ‰º_TþnÛ Àœ·K›è¡_ªèÑGô“ºÛ'Í•´§o@”è}v®´v樨ŠqöSƒ¡ö⻘ ¥·<k<êqV£I n0 ©£FžÚU°ûÙ—µP¯¢'ÝåI«$E-±á°=¦(ëênŽB‹“–µ\áeAœÅ:ÚÅ R M7øâÑØ'X.!\òŠêÐW†])\9Ø<ÃËBIo’¡}‰…+L®ò1¯ÂG<„ ˜e IDAToy8ǽ!Gã*€ßAu¬©XQ±Ä[ìœâ]ÌØ ÃuWa&^SÐq½è¼ïŒÇ`Î žRËŒÞ7>÷ÜYe3 ?UL€³¼-ì´úF»‚¤¡Wy®‘øöÑèb¥<6̽4îÛð(\ˆ|¸¼à{m]×]GyãäRÖÊVÚÎâÏúËÉKTξk4Œ*º·<ä¦6PÒ©2V{Ô7X©”-6*=0‚s´>âöª‰žtΛ³²Wa¹_w²;bWA“„C§¬´,åŠgaE%/†à3¬ƒE$;øè„i¹4ÂÈÁµÀ•`—k­ŸA³Š€Žü*NƒÕÞpó­ãwxÜÞáŒs ‹Û†E¸ áÜXáY –!=ÌØ8…õ´µ6Ý`7¥‚‡ÇÎ7$¾ÄSŸ7GŽП(ž¨D³žä·XyOذÔ=©ÒnÜòWž½ؾD?«ù\¤>ˆª7_ÓÁyK—?—q¶mý¾€´R<©h37OιSÓy …]vhÉ~´6æ’z¶¬¢# Õ’ÝQâÙJßZY×B³.&šíûtÓ SÚá°ÇdaשO·É Gj¹âZ.¨¤¦£â:€“¬¬ ׋p|™E±¡7†] \&H_¬V+`q uƒéè%è5è3Ð÷ Ü¡íñÑî»üÓÿ÷-–ÿwàƒÇ ò—T¬Q–8 ÁScVá\lTuƒïsT!Ïî{ZEŸÀýë) dZq?åGÏQÆ èOcÝ+£w'º:NÇ"nòê=Y"®™@º»¢.÷8ÕR»‘™øÑæÁòƉ³\»4¨Î -£„´†ô¶âÙ½ñÊêÀ•öùÑUѯ$BzØYñXS'yÊJ¹o4TÚäJ+Á$*êgMeײØHzˆHô¦%ew¤’,xØÑ ¼XˆkdÉ/.Ã5uXPKk?Aº. ] ø½ñÝ—`kàJàZ°++…Њ-ið§ªÆÜØ"z#²‹y|í÷òž‡o}‰WwÂ8GT4Ã>-UüþÌã\™û\Ô› ÚÄv¡xiwçTôX5¡;¬åçöøZæ˜ý‰Ã«©*ZÞ½cd—=û†@¶Î¸èÚÝ;+¡(²Ql£°Q,šÆâ,1Uüc™Zì͸wðèáUMõÑ‚åÞãr ´t«Òyíé_\õøÌöSc7·_çGO½oªìô±9f@аÑfªfPÕ®dzV˜h‡¹È¡\4ÿÑ5žÌ9ÇÕºí<¶oisä·h~(d8絩h+mŽ>í®ì^UÖ†Ô{ÒVG"kÊê°4Qam5jÑȤ8]±­t¯¦s÷ £F«eò›K%–¨…‘’–ÖÙò¨…åEÁ¹SÓ¨Ó@J’ }H»b½ƒýj/;.嵬hijH^JZ›°ŽsŸ°A¸ ÂÝðx/èJѬžÅ:@§lppp°óT5«qå<ËôPÉšòÔ¤ã_ʹ€o®P_ÓŠžRÒ}ùóVÇégL7Î3 ß>J@¦º4þé—Tž >—!Šçq”sÊÅ9%Y¨èÁœˆF~8tæ27LWÎ÷~ æÁÚ'Å<ö¤¡Tf¨á==œËôŒŽ´Å¿ÕhL½«­ŽjÙb#a§¢óˆr)«£[èûÆé²Fý²Èëè %)é––£ -q‹Íˆ!exH%l.—z XÉÓk XØßx„pA)i;ZïXÉ3j¹d) ËàXб´èÊÊâ°ú(—(÷ªñ `ãÐEƒT=¢;uL‹°DìÈ‘6:©è6)êÜQ½°Þ<—š­ƒu9ê]‹µ;ÐGLc®²DhÇõ [*yÆuxF#+–êY˜Ð ,â±²¤¤-‚úÑ”-Ê.(‡`´–æLnoŽÚ< <+*6À…s¬LiÈé˜ùû¨ÓCÓ½‘¬ž£Qæòƒ»¨«ý«sžîþ]ŽxwZvxž×§ÔMí›#Ç è· ³> #ò8etL)éÒ@OÞáC ,×Ù éÅIWÚ¬PéS4â\}‚E—­WðÒRþ²¥–È8»IT§¢rhëxg8ORÏ…™œý讫 ý5f«CÔ\h5KƒÏid¤¤™·;«Ã²’vèrú¾»w§‘­Ã1G;rL¯ÚBQ‡¬¨½°YÇq溾܃œéS5mÚ°8JRò©±×+yF¥—Tæ¨P©9s…²BØ <¢l‰³pPŽ!>"ȵ§rŽÆ< çY™±VÎõs¦¤jàÄéb-­!>ÊŠ‡öøfSŒû”’.À=PÁ§ïÉÛ¯·:æÈ1úÅD5¥!•F ‡t—Èáú¢1Í 2Ðó™´¨ÌqŒßh÷caäw˜2ô,â¾Òå=¡¹·bÁôØï¥‡ôXE“¦D*5¶Çp^cƒaRÒ–·}º® Óç˜Ãi´:uHÊê¨-fBÔFT”Ã1JZðè"A:ÿg]Ó ’@}äHkÒ:t  /\¬……|ê"hiÐ +3>´>>DHË=&× ÒIQ?`úvÅ—˜Å¹¶k‹E²<Ö¦<`lMÙäãÒQädÄ¦Þ OCÅÂÁÒ+ âH%•#Ml•Óìb³rδFŸ«»Eͪà¾VN)é©íiïùí¬Ž9ú˜ýI£“¥£ýå36ê XB:ótÒ¹i'7ôõPìnµržÀ|Ò®®÷Æòéd®}ã¡Æ”Œ×ã˜Ì9Ñ/grL¨èäIg/ºÊ º„sau E^tn8ÔluTr®»Å"¤C hë&ïΞ´P¡‹â­³9z8'%mGŽ9 M8"¬­WÖÁ —+aéïüp„¤nÔ8 17ùøXŽˆ”FHz}@íáá’š ®ØM-,e‰²ÆØ¡ìI€6+D]þD£Æ³p5¤I­rw”\3Î-S೓ýÓM€ôt'–áö”ÕqÒç"ŸÅ˜ý–1g·§ÜÌê9U‚áŒ]âÅÒ9‹"*+Ýý\剋u:ϺŠÇãÍN§¤xKò¡M8Ÿ «¤$#°5]Q¾aËÅg/z?g½Ý¡©CM‘ÙÑeu¨CÕó½ZgsT „8Ûv§¢5¸Ô[i–IIk× ()/ë僵Äy°…£EH­´?W‹ÀúJ¨½`YMgÚ•ª:©éÃ=– mrêbwˆEH«mX°áÊ8 1X;²Ít@4c̹ø «p©¯ Òà;›£bÜ{u çóuyTºw»mO©ãTöl'–1¨¼ïécsä˜ý‰b¤œ;›þ7¨°nX< ݲ]¯kìë_ä3d@gµªÄ›¢ιø,Ë­ɱNkg}ƒe é~ f:ëÄ<˜/ôÐîÈŠÎÉÍÐ]ú]jõ+zŸd8ǬO­ ¦!›“šn5ŽÚ+i£œVÕbšÞ¦ŽJÚõ³J‘ÿœõ#‡dwô°Ž¯³rÝ..…Ú%%íóÖeÖGýçã¦w¨Þ öˆð€Ø „+„ ” `ÍŠ.ÔÆ²4›#çadû Bå 6Ö i”Á3p{ yÓ¦ÇX1Ÿªé“²Ž' ß~ß}Ì€~ëÈ6ÃusŸŸìÌOQtµNïÍ!Ÿ=ÍVBÆeRðŽaë®õÏ»2— †¾ò³cz§ÐKmñY•bå`^‹¬ŽþßÛ­ÕáÕQ[E£.B:Á¹I nŽ#%%‰r¡FëØÛ°l8´d{Ör¤eoÊaoÂ0´?,p¬—¥|•º ºën;'@ ¶Ã^nѰE(—ÇìKÄ.P6¨­p¬X±Àá©€ÆzH§ùQ =4/ò8u•‹}ò·2†i†ÞÐÓ7ÂaÜ½å¾iýæÛokuÌ1ú-#jä.ÓUª)ƒùÐ6‘ƒLüß`œæ¬ †DiªòA:§d{CÈó]9SÕ@A—3VYzožýÛ<чöc8ûäG÷y¶ec¡Çðc‹£î_[îÂ\À¹TÒµ.YhÕw\I`^´jrf‡'sUò$Þ¨%%m5ºØ$%m Î}Âl{ìi9pŒ.@×IQ{áj-l*¡ªV T!©éЫi'¨o‘—-²ÝdO`‡Øa‡Øá")éu46l‰gÁÒŽšêq„¡ŠîÑQKGH»”%ÓáÝ×ÎÌ%–ûÆÀ!ݨÜ4¼)öʽ¡Š>…ð9HÏ3 ?Qt€X|ÐYgíûîÖe1DGÙ@XEÈ=ùІ‰´®œÐ•¬ä3ñKH' ÝxûŽKM'ï:°¢Í‘½h8áf¸x&4UˆJ:ÃÚGX«×ØHY á£-òpÈèGØ¡ìPÛ¥»é4Ù«§¡IM}Dm]Ò_ÿ+§«#~–˜9±uÆ{ß^÷{Ç0.“Þó l<ÓùÔ»§ö Í€Æ è· K7F¹§Ü´nD"—w³)ú]¤íÌÒüÛ5ír#ŸéˆÍu1Ã.æGûdK ÈѬídy6–û”»±Õ‘9Ù{ÐÒc‹£‡´ÒFÕf¥‚Ö¸ö†¯ …’.}éVËîÝX²:] Éêh“’NssTãØ–=²<£UiyȦF–›ä@ë‰šŽ öØqd‹°3a—ÖYU︟իkaU\lÃ*Á2œ=„ ¤2ÂÇä^ñ#ʱlÛ'HGs9ÔbÀØqÛ›#+úÉq5ý±âoƒÔXIì iVªhíêL©–ó£Üéè<¤û8Ýû\'”×)æòsûcsôiÌ€~ë(Ç{£o¤ë Y¨ç<¥v‚åd])¸óÀt.kžÜz˜_eH³m—t×XÙçD[g*Ç1™³‚.—œX‘™n.zÑ&`U¡¢KH ›#îÕ®DÓ%5[Ì›« ËÆŠ±E‰¾tRѨ£RG£ ‹Üh˜@½HvÇQáØ@r㡪ڢ¢V#ËËhw˜€ºT)°³éË i„m4*zuí7ÂE-Ô`UgÁ[i©ZäV}‹hj‚´#JZ,«è%Æ‚8[LœÍ< h’ìŒø*ЧŸÅ<6Ô&‹Å9Mc°ôp.t ñ·Ü¿î«ò¼SІð›ªèsà–™cô[†UrÖ&ÒÅÑX€Î‹î,޶i3ýâï­`¾7¥ûÛ'¾±Ÿ5BÚ v™€´Y 7–+rO”A^tq/äN0]%7ªdud½œÿÉê°þH•Ttî}bØÒ­ÄN-Jÿ„H€FzT«4׫Ñjô­U8JÌì8d%Ó:Ú#Ùö¨‘Õ%â’eP‚:©ë< ÒÎZ¶x$ðh!6õ™ ÔõÞ Ï—ËçBåu¹A/éYW¬ ·;dÍ •-b-’AÝ)éˉsVöæ,s-¬û[ÓÕMPüa¬†ÇöEù´ržVÒ“¶Æ|ŸN½ëo‚iU>G3 ?AôÕÔŠÚé``sÄôŒ®™§,–«=Ùt•}õò™³·ˆ|;æ”"m»ÅHélY=‡x …ŠîgØŽåMSlßs=BÚM(輤ë2˜>á|Ñ©hí@Ý5z£ST³’îíÔÓè’¥ú¨¢¥WÒG‰ >HRÒm²:Ò V’ï›+ç¾^÷My¤„»¬Žb%ì9»oŽ>f@?!~é—~‰¯~õ«üæoþ&u‹uƒ¥LŠÞ”ÎÒ8§»¥ÊW œ?H¸€~ŒÒæ(º~÷U6æD{ë­Ž ‹ƒ{¡@üýož<™DMU(èét‰y£.'Úª¤¢« Ͷ¡},2v]†sÆx­øÆ Mpn´ó¤©Ò¿BzÝõ0Týè¥6±Ñp¤¢+5mRÑP ‰Ø5²Ù u?rrç^Uâ”´[väáÞ„{÷¦<ˆq/pàZẂ͵áÄâ5–ëô€b¨‘ýCüš-Üœú1w;^A†t9¾ÆSJz¨ª{ ö0žVÕL¼fÍ)Å{úz´o¯ž‡ë9f@?¿ÿû¿Ï/ÿò/óÑGuûâ- ØóLØDØÙdö½4N‡KHk.’UôÄ<±l¼™BwëFPW'-é2ÔR‡•2=£J]¿Ý@A;ÓýÌÅâ{õl~㶤¿ŠKÊ­ÏèP*g4ÆCÚBM7}igñSïÊìŽéF=+­ #üÚBQCÌî8´D»#ÛÚm ê ¹X#M‚´eXg`;‚¹¤°-ʃµÜ!Îýà1DP?ˆqq±êy|0„Ö-„Áõöh[¡Ôé/äFcIYÂjéûsãûªÞn § }N)¿.›ãTiO©á¡ýñö*º¼‡æ€Ðgã¯ÿú¯ùàƒøâ¿84ôuù†Ê÷NW9œÌI¹ä¢©:z¡Ý5fº»)Ë*Û0«g|M.Ü:£;)Q:¿&Tt§ƒRE™ŽÕQE—`îPl9¿¤´9oIE{£Ê]Å+GEŠ»üïb•Û ¸B—Ž7X9|‡æþ$Þ°Š¾#â@Eç3÷Ž9²Ér)§›¨h"a©È©ΪØX˜4½’4¦ëÑÞê«AFGL¯¢ã¼x¾ËÖˆgøÐ#8×)ýÎz«ÃºŒRO ‡ÇBW¬ «#º÷¥’¬ähȱWÔ¡… 5£cj†î²¾àZ ªju<ärßÄyá‰2Óð} àyýB¶¼ÐGö˜#Æ è3ñ{¿÷{@TÒû·Ë¾ð®n®ø_þýÿ»æ’óSóm“©›dhtNs£Ÿq»¸ãOÜ¢-”|šÉ$…š´j¢’æD7*Ù§0«È~t„ô„Ía±±l`stۭʬ®k †ãÐet${ƒ^VN©3 K%Áí4`m}^áG¯t‰ˆë쎶ƒuÜn“Š>I€6BÚÖvmidsÔBP£VGP[Õ½6­1Y°“Wô–­¢zÆcˆJz`Œ­ÀMm,/A y$ŽDº2¬­ÁŽyX¤œë‘sšCüÞ»9!ã üÙĶI”1è©­ñ&P>ïOOûÍ28Þ$íîƒjÍÕ þÏðbò_øYŒЯ‰¯|å+|å+_é^GØÏÛµl4h*iÐKâ>W¸t7VR³tÅ¡*G‘‹7§¦cûÑ®a˜’Ñù(Ƀ֖¡_Qᬦ²jÔq%ZÖ‚¦âšßl ¢•±’öGèÔs—Í‘]5†kÒ$©Gë ëäGòÀño1ò¢QG-޵.º|g)@]ªèö÷{#¨³¢>Ù9ÖÈå%²l«;PÇ!öTÐÈ“"KÂ-{y`+G‰¶ÇV"¬·ÁØ ãö@j¨3tŸ¶ËÆ»¼@®jäòY,‹½ü¢z^`ºŒ*:¬0Y¬QÙ° ·ìä¡ º5ö­qL¶ÊU“þvékwyJªü_ÞÓUЬóÞ¬ Ç;…\§–OTôøüSÀ~³¬ NÊ3:ƒ2³Š~û˜ý "$@WÖ7Ò)¤t»BAg/šŠÞ»çC[ò}{Hg%]¦Û•^´"‰Ûú[¢ÍQ÷iC?Z¦-©Llõ‹6‡/´uÛªI´ú—¬¶hÔUtÝÚ*ú>„ÇÐfOºöŠ_^ôB`Q¨èFao Ú§ÜI‘~—“‡Å±Ö T|7GÎ7ÎÙ9/xµ·Æœwq¿î"¼uëЭG¯Ö躘”GRѺÂdÝAYó ¯Ø…ƒ°;¦4G¨|²À\o5Ž ï*â¤VñAœšSM+ìÜ£éÀ^§‚‡àüdÖÆø5O|æðß0ÌèÈç8UÑsô1ú-#:ÖY ÉIŒÊèdÐ"RJDo0;†ãa”<Ô |è<6G¶ÒF› €:]KÌæ ³  s÷À^ ÷6Gü½ÞJÿШ¬°7ˆ€nÀšäEw™Öž‹ç.4q’ÓÚ46.-æÅ-´WÒK…CΖζ<"N+OV‡WÇZÖˆø~ÌŽdc:Œ¤×¯^E kõ6fYè.fXÄɹ-­Á.<¶¾€¦Â¤‰ –E§žÑ Èè&.hÃ+> /Ù¶[¶‡è7­qÀï¡ÚAµsx–T,1kð.Â:ôœ•u_‰J[#Õ5¨•ðMÛ…ŠƒôM27N÷qæ\0­º•}“õ0ú­#k™€${£ôI%Ë£µYÍ POmu)­¥ƒ´‰÷…ÍÑßmúüëóÉæ°ajDË ´Y› ]á­ê&=)Õt~htöFZ´±èEÓdìvÎJzDZÈñP¼õnuí³Í1Z²½PØ+¨Ä¿A´ 4XÊìØÈ ×O.+ Çã(ìWwpÜ%8_&8?¦í­¡ `…µÂÊÃê ª&©ÈÌà IDATçuZ6X†´\bzz…kÛy8~—ý®¥Þ?ö‹—°øØQÛµ»ÖT,ÑiÒø®hgÂç.%§µr¼~3}zl Ù±ª.³8²sî:˜Uô[Æ è·ŒèØ8b7©h}h´þºRÃ\¤nÎæp±¬oÇË¢»viøÑÞêˆÕ>¢±ílŽ8Ës]LÔÚ}€¨&›#S¶kqÖPY•|h¦ÜI²9J‹£Iom<Öd]tÙk07N§ÖÙÄö9uœŽ  §”òë {ÂOåBŸ®§Tôé¿i˜ýÖEqÌ匌¡.ÎrÒ©çÜH(†VÅ™v>Ì ªF€V‹XÆ=̈6G‹ÑÝb4f±±ð¤ ÉTŽÊÙì)koM´9ŒÞ‹Ö˜­mŽ!œ ;‚.Ø:ŽÚl`¿†í>¾Ä}ëêy©Ïø1xqég?ÀcŸÛïÊýöÛØ§ Sß[žwª÷)ç®ÞÓ1ú-#s¢Í‘•ë0º¨læRrMG]úž|ÝI-¥‹µÑF ‹î@ì°2‘ÍqD¨ÍÒPï1»Dܛæ:Ì—³ls,’Ía'^´…lsXÿ¶è1½ÝW(YE÷…ÙÞq8͇NJºqJ]+õ²óÒ"˜»†Cb"ÉÞ°h×t*z¨ªWr…I•´F ›¤¿e*›Çßî²eŽÐæž~kƒ‹^=Û*^˾çc7ÇbÑýÒò¦;‡{¨à£¾½byïÁ xnÜ%Ûé6ý#ÆÞ§ õ”:=ÞþøÐê¿ï¼ú>?ôùÙ§U>Šž!cô[Fl Œ2ŠÁߣ²öƒîÖÊ5õ³œÍaÃb¥ZíwEºïÓí¬¯ÂŠÐ¢q’Qz›#§ÚÙ ¡0=,BÄ.mf‹ÎSñVw6Ç £ÃbªØÀÚH=âô`XSc¾. ]ªh?PÑ• 3:ši¿P\tj¾>8¦FÃìE—9óEŒ•\§®Ùô‹ùåO¿$&܌㢠Î뤞—ÿ½w‰•%;ë=ߊG>öÞçTÙeûš‹í 6¦-¡fҀĠ…°™Ð!$3±%  !@Ȉ bdÈyM,30’ñ¸‹×e`ætK\s-5×צÀØ®ªSuÎÞ;_ëëÁ÷­+"3÷ã¸Z§r•²"22"3NîÌ_üóÿ=V´ÂšF‡i¼Bù¾ÚñºØrÐËjª—f<Ð@+‘ؘó€ k‡t‡”žÍ`œŽ©J=¤joRÑûùÎåñ7ÛqÕ|€ ¾ÑÇ Ð÷ŠY<6€Ñ¼è‘gƒwš+”}9&‡ô»,léjí´ð¡ó³÷$4¶XoŽËæS‹#Û?—Ƥ£nAgí©µÎU½gs${ÃÓ‚uq'h[Å]S/Z©¸Öm(t%­ÅžU¤I>ï¦Ï~´Î=›cæë~âGëáQl/•´ö2rªN”Î!B•&*—ÛÈjÙ­"±¼@¤¼íZ]Å”­;²‚沦z9ÛÁÂL¢ÏÉ`Z›Ã;ؤ¥s×¹TÔ%daŠ/­Ýœã<ÚïF}\}û:o;^âÍäØÃK«.<ôØi¤qô=‡2XJ ÝaºD\ueŽ˜d±Ù©'Ç8ÚJ¶£Ã9AZ{¼s™Ía_²;p­yÙŽÊ‹/]¯ J‹Ýb›³9ò¡qhæß‰zŠhkOgÆ÷Ø$Ô–ÃÊš ¹Š¶qCE¡í³ÕQµ‘0s Î"êV›Îýè8ØEs%zͰ^ôÐ×Z±HÒá\©Ò™©rEäzYo"]¥ôz!ºzŽù}µ¿/>Ç• ›€l*dYö5€s„¹¿+`®˜‰t°îçr”@>¦h÷¿¿ï¬`>9îî‚ûãûÇŽ;rœ}Ïa€¶`¤wÕš2;,ÝNJò*¦˜ûDÛ!ÊÎvjj¢(l'»×ìåÇyCOƒ5¬,­ŽfäCkq>º­ ·…™ÜT©s6G‘r]$&k£5%7~žóŠXû„§©û[áI+kÝŒ}è¢p¥¡§®”YVÑÃR׃ÝÁ<¢«Kú詃:VÕ ÄnÌû ;ñ(®š‡[UÜjt‹Íµ½@Y©²ÞEë«!J J¬4ÏÛ˜“+Hï€î„¦,,©¸ÎÄÝh9g7±~ˆ’Ué8\˜üéýÊÂáÓ8V­cØÞT®}w=~ì6sË\’ÅiØ8úž#ñ@1›cGù¿+íµaÔÕ^¬{{¢®'ò¦¾R|ö{®Ýé(ôt;•qãvE‰t´ÀNõlíBËt;-Òíºµ+èÙXEkC'*Úë{è*·7ÖƒŠÖ™3¾ô(íÎýèäE'›Ã,ŽAE·X;Ò*yã*z^dR¤ûIEO•së²mé<^ }ƒô’­]»znˆ4ê€VeNdEd²!²Ue×)»Å“[¢€¨%ÈÕ*4-ÂŒŠ…ÀRá XheÜõ9ivöŒabm”WrŒ!vßV¬R.oVÍö?Ù7Ž ï9ƒ±­Åœê–|è&rrT¯:esxÁJšY›"Õng7«h* Ëô鎞 Ê t é:¥‚MZæÇÎ@7¨ºO¡;D£µ erh>´ßp^ClÕ ½…8«ÑÐ8¤T›B'–®Ùä\ètk± ÃERÑëa© ÒÉîhzX{MwsÌÁCËVñ@¢Û!óxÄ6Cº´6OÜ=#2CY he«ö+¥ó[Ê}Oê6 T"Ôh%ЪýM¢,æ(3"-)ëY ”Íøƒ?Kdóñü瘇A|°íØã*úfÛãð¾L;¼¼Ýæ8rœ}Ïa€Æ/û‘»ÜvÝ”Uçô!ö ’Fs‹s‘ÑfX nËšHÎCRÒ=Ríì¿-Û¤ò0?ºGMÉO‚…ªIq&Ò¦@áÑžJëAADZCÒ¯1?¶[WÒs!¶çÂÀ «i­¼  6§ 68Ú,àÍÜÓÜ6çM,Žy„yëÞZ“`¶ŠÃÈÐS:°Ž´ñœ‹8£ê+ªÞ'Wu_¼·Ìµ€ëŒÈJM=oÒã¿ó.ÃÃ{•ß(3UfÀÜ-Ž™Jº|Q¡~Ü §Ç`>Ôo£]Bâ]•óaØ–Íô÷Uômit·ùÐòfU=]c ï9"6™h²8¶¤åCïåÏáAª-è]tðLÛÕrC;)ÍàŠT¦¢- ‰seÃÎTcº­ÔrvG³¬¨«Û8Y7ƒ­[³9¼i‚tRѱw;·ÅÜ‘µ-ãÆæàÓ6 }©“>×Úå áØ‡6õÚzŸ™ë`o¬'pž›/­«ÎJų­1uºÔ}OÏ9‹ B¬üß•*‡sjüb1+à¼%)h\A1¸§ì€®Ò-J ÌüÖŠÁ¿Q›$ŒÉñwÁÒ4•îxðï8°oJ»Û?žª&Îíö»rýÍqiœ}Ï1v…²2›c°Àd1Îõm¶8b†_Éó^ͲfkiÊæŠ¨õ¿È :¹•ʆ.$©è jÉt;Í>t²7†«hO­ÁŠV’w%Õ3@krIòSľB«iº]8¬X1¨ÕÊÁœtwò«*2+½çy„¹f8@½é`äGp.Öé#UìYè<ñ-µC|q¥U³96(.~;’•e¿–, C]E‹Pi05.Kþ˜Á™H#‚ÐÙÑz;”Ê=†ßNé‘»+çc¶ÅXEÇ#P>ä'ßWAßõ±ÓHãè{U蔬¡b†ã8:ˆ”S_辇®Hm£CtÒÀ_MEw½ ÜäC'ëºô¡óùXÑùœ"i¶»TU¸çCG—éšTtÊêØ&6Ç­Ht›#)ho¬[ФçéG|CÔ¦u Šå\`ΪÕýè6XÀ0¸ÍÁº°<Öý8pX¤ÞíÃXG‡zc³š¶´:çŒÊ.y:t³®³‚.C×u¼ûÝïæ×ý×WКT„•{o=“c§û™ŠæŠ7v Ð)XØåÖ££ºUúÊbŠÅ®>%Vj?ê_[?—5Ý(˜µCéDG Í: öà€VÝ`r}‹ælŽ`E ÒÛÓÜ~ê·¸ݪ qE«"Ý.£×tôR+Tt™j—ŠEUšÊª ÃÈ‹ž¨è•Û뛕ûÑÉæÐ jUo«–½¾µ›n‰îW4Ì´&  IƒµètÁæ " -½ˆR4Ì"±„=)ž-ÝW̘A=|î ›d´ýv^çHF÷°ßtØWÛ‡ö¯ ”N# Œ÷¿ÿý¼ÿýïàøÀÐ €F#v“/¯û¾¥ÍÒ3(,oàŸ>ûy×`*:'}ìÔ‘vlq¤/ÚšÝ(g7ÙQ©t<™,éE*T ÒŒ29bn9QæBÒíV® 7 ¯*Ì)wÖ':ùÐcË£¢®´ÛSÐm‘Ñ1#Ò4J“\,MEëx[ò£³­1¨iƒ³Å †[õÌ]ç¡¡¢¢¥Âg óJMóK‹£„ô45.e5'U›þ"’ñn&T 'ægI°68 ¹Óx†ç®ñÈúØú8¬Žãäþqï+ê¼wWÐûÙÇ~iœ}ËøÔ§>ÅþèæûQ“‚†”?—ƒsè0³J &¼‹¬ ãHAƒæ×èæ$a;”|Bb:ÆSííë­¥NW‚NÜ@N甲9:O·¦©Ô(tÑ&ZÍl÷e‚tì­“þœäD{êµêGÖFS‚:)i‰T­Ž†Ù{.RñtÞJºÏU†ýRªêz5:Íê0pZ©5í¼› ¬qÌz³Øœf7äBË…’Õ´b†]ð›Ð첊V¢ÛSH°ÎÛ$¢zH='?lgôø-ʹ\?¢¢ï®”úðú¡ýN# o¿÷{¿Çl6ã—~é—ò¶ëÇOø‡ÿó¿¢ú˜·¼÷œ·¾wFå€.ƒs{¾ETì®´Ù ©õhÚUÕg¤Î1Egr0£Pér.ô(LçSû‡2ô0+,…#Ú§Âbls¤t;]|÷,Ž\¼Rôæ°ŒŽIáŠç2ÔÚe#¤ÍKËèHn›H[æEÏ@À2>üáóáxo{Äfh"«kœÔëЫÁ¾Þ¸$ÖÔdc;ä Y ^òtì6xË΃OÀ¥l=š¾(‘5;6ªEU¡NZ&Òj? íE† GM“RG:¼_{µx çBEk'V´R”¢”YI¡®Pº æ‘Å¡CE_[GæsE’‘õ"¢ëA]ëÂÞ³¸U´[5͈èUÕfY‘ލ3WÒã J$¥–é%úö!-¹ù¬WzWÑ=ƒ9’|è´_ -Ï‘€?¶;JOÚìŽôú‡óxÛ!Ïyë¸GG{tܤ‚ﮚoÛ·ÜöÆ'@ßsD`K¡´§g;30T†D´äAw¶k†\hWY…‚Æt¯°âvCª]GÑ:b_ÔuQò}h™¨ç|Þê¹Ù+ì‚1-X±œàCÓ¢|ètž¹ÀFÐ…AyÞ¸\µ¶`aö¢‡@a©žg¨¥Ýµ‘zéÊy­tPë\a®Ä9Ä…úd]]ÑPös%¢Ûƒ’Ž{’²¡Ñ´GÆðëe€à¡¡y=)ê¾úMz´Èê |XI—ÖÆ>˜ÇvÈqÍÞãùsQ|ªö·_.õ.÷;tìMë§'@ß{ô*lU(]ÍŠŽ }ôèU©÷,¬e”KM“*WКºdÒ­Ý"ž¤ÚÑH(ô/†Æq&EÉ·¨Í°RLߢ¨WTŒ}Š"PHëBÝëÿÔuv~LÝêðó2Y­€´Ž½hM€Þ+X)•tdV)Õ̳9Vš—:W¯jÔ\Ù“ÞõÄí5ÑA; »iRÑ Ð]‘u2xÐxÍ€žög.3œ§NPÞÛ&6Wú<•¶ÆmÞt éC9Ñ·U Ž W˜ì cu}›ã.ë7Aùérœ}Ï1XéÃÙèX…"C.4 ~¯Z5à¶.]vµS4…Åá6‚ƒ/CZS_hНKDØbÊ +Óº­½ë‘‚SÑA-‹a:A¸*tÄwé•[Q¢û廽 árU¸¢£4D¦ÇŒÈ¥i#uòœgæVÑ9ÖdnÙ$Ô;E»-1® @‹÷r6­ÙN .m˜`ÿ&ùç£OE©`Çž´]%'u3˜•ÁÊtÌÛÇóô¹SÀðP:Ýí*z|Þûë‡K¯oìq(ßœN·h‘é¶7î8úž#ª°Ò×"A;6ns¤j3Kµc ZTkⱫ‡|4RþœšAl÷ »jh:—àL—¾jîAkúðGbVÐeõôi ÿY)Ï)%\ï{)–~ñ±"c°ÌÞ¥§r›¡29ö†jÛ;lª§ h-í ³8fD®52 Š´ŠÌ ÎÔfŸ1,gi©y2¸StµÁ¦áJM^ôàI›ÝÑ‘‚’Uô¤%è„%Ëô¸!F÷à;†rÙS.Uøx}”rG™Õq“Š>Ü$é®…(÷ò]A|>þØú}}lÛsœ}ÏÑ+l’rU%¥I­ÙŒÀØÃPî=RÐa D ÐL,ލÖûgWø»#@KéCƒÙ$=«©MQÙXZ.Y«ÏÌîÂâ Ž2ó´84Å<‡9Ô qÈKK h8iMåßeXP¨é©µ°:ÌBý¦*õʱöõ´ltv*øÙnМ‡¬Ž4‘•Ý:?Ççds”êyª¢m¹Ä‹þŽa=hør»*z8^'Ï;ÊÊÈÕ‡ÀÍdÿá\Û‡–·m»y}šÿ<' '@ßsDµ aúò¨+èÖæ÷¥RIßNa'ž ]Öo÷£xbö°Y+”pî°"Ý·8’‚.}èÔÀI§ABõLÊ…&™ÈGª}”5.Ð'Ï9U3—3‘wXµb˜ 'ùÑnhô*\ÒÓ¸bžÅ¤œ‹›BMã¶µÃxï¦ãûMqë£)é¢"ÓPV:ÒÕ û-T*èàï{8òéØWµÃ»•`[By¬Ž!¿iÝß»w°;VŒÂhŸ ÷…ò1e|“B¾  OÀNãè{Ž•MQÅ—Š ÚI.tò ½™Íøa5-¦ K¿7ýìuo;íº•!šÒƒîAC$´³Èʽ- m©vž—öULuur¸X…!x™«Ó«$Ðé¼Òa©u𠦶®Èã.ËžH§ ж$n¸Ž³˜Ô³ÏëÀNÛZ he Íë~³b@[OʺŠÐu˜ù³_|’.ºûiv¥ï?üzÙ·CúØòpúܱܿñöi3¥›¬ŒÛ”ó¾Ú½Y%ßÝož3l»ë”_o´qô=G@AK¡ ËLŽHEïÅÁNaãèÌ ìA#Ö2ÞÓ“q– yר§´],ÖlY«šš'õä° £yЙ´=°mq4Ró• øšëà¢v8 Óy¥ªå¢#?Eáå–ÁÂèíð Ìsˆs:]qw̦œ5C9»U˜‰R9ˆ5ŒáÌÞºëí“:‚ù}Ôô·­ñiò~c8^ôhÇ{aLÁœ,±·|Ÿ†Hä×>¶­<'&Zëã Ãã·£Üõþ±m§'@ß{ô k& Zw„ƒÎBõ¯r2•{Œîo²‘mŽ>?[nzçϳ-à¬ðÓ!`¥ùh%°ef›#§ý‰ZÃøçÑ‹¥\¾iºHçÁËò‡ù ðwbÙ{³È Ó¼MÈ)kšT´/s4Ïòã4.@×lcÇUÜÑÇ,°Vt„¹˜’ÖâfN„ÚÒ:ðË,-­tSÚbò„Õ'ÂbTî=-X)Ç] }Ì ¹×Æqë¢ü«ƒ4ž‡n©¦÷·Z¿YYïßCüð>Ç·œ}ïq(‹ÃòY7-µ-*öEsŽ›Ýâûê0È9З7…B)U ¨åÞ )zEÌ :Îh¡ža|ÑèšœŽ¡{†w$¨TÏ;¬±·ÞC‰ ¬£€ :ž'§¹Âdº ‹kV±”st?Ú­ŽyZªÍR’JêK4¥û9u¹4>Él7t†óàEÛô “dt½f%¤Óge ÖC`>ä9kt4…µN¶Á¾7øv8?æÐ>Ƕñ]÷{ã ï9ÆyÐéKÖÙ°bè &…i º‹nq”Õ'f% Ï6z›\r‰‚.« ;zVÞÕn£Å°Ý«ÿîbeJ•;œiq?8?]¶Æ ÈÇÆ Ð÷}VÐé>” ÓN €Î¿T³±ÜOŒåԼݾtƒ½!#@K ç)›Cm› (ôó´‰díe»èǦçÊßí˜7ááEõd½Ž-=õA@«ˆÃN@@\Ñ£2‘Û ¦úµŒÚ%‹Ã mp^@Üû-›Øq»œ^×ºŠž+,”üolJn”ÿ.£T j‹ÞR¦Ð=TR o¶8Ò‰L—û@= Ýé{ÎC뇖·m;öø]îßv8x‚óMãè{ލÏüñUWZš…Ù$ M—AÕãGÊTvß—=»Üë,g¬¡‹@”ÃöàjUH1ÑÚZŽ€Þ(lvÐ1É iÁÊŒý•‡Ù÷6(kz¶V[§ÊN$Ãyh-æ1˜Ï-—¬¤£ ÖNHÛST/%/ÏΞAÒïиƒ~Ç.½¥Õõçhp^FXû¿S¢÷Šc»EÊ¥§–Øìd—ű—?hi³Žƒ„ùÉŽŽû@z[9³ÉñýîšËÌdÿÃ÷›*ìé~‡îÛvßí'h§ñÌz³ÙðçþçüÍßü ———|÷w7ùÈGx×»ÞõM=oTekvl8 w*l4z?fn ” ¸Oû[š× VWìØŒºwQ°tº¾¼-&‰E 8פò¹úDØÀ’ßú•CŠÌ¾AA[à g€îÊóJÏ…°% µ  µ@ kItÎê¯å€+mþóâÎ<áØAß/·±ç²_›‚îÍ‹žGXªuݵOP’ßg_¦÷|h˜ˆß¡HÄë?G*¦`>¤žËõ›Tèm½ÂÇ€|S p8îðùÝü;<™ëdŸÑëß¼ïÝ;gÐýèGùáþa>ñ‰O0ŸÏù§ú'>ùÉOò#?ò#|ï÷~ïÓ?qìÑwÎW74µ&jeém¥rÝ@Xƒ$I=Ô¼} ºFY±eµk‚`Là ôz Fò ží¢Q¬Ë^/žO­ìv=Oú'̺Že¯E™ ˆ_&õœMz¬žrÜ(©lXuäÓräþÝÁ[Þ?ܦó6uü4Jù¦íßÌc7ï{8ˆøÆÏ4 ò'’¿üË¿äÅ_|Ÿ5®÷tµÚ~¢÷K´?cÓ·\õkÖIÙ]B| ª'®Å¬…æunˆzMä =¯Òñ&:L¡^!¬ê@<«á¼‚e³u@Bp_×à¡Å9ÏÑþ‚¾»àª{Âeß±IBt›W…ê1T—Ь lAzoú¤º%æ‹Æœ^çôœyð²f<&°^TèƒÖÈpz²0Ç.&ut?š‰Úàœ3Ï¢@ +ˆÚWгtzØì"¯îž°èzž‹æó÷º'+Õ¨.½2P³†à¤çðš PŠ#¥‚†á¤e¤ž‡´ºñò8Tî ècë÷QÃwò>¿ð~ü8t_/È?Ûã™tUUüÎïü¿û»¿Ëg>ó™×EAƒ¢.Äôgh÷íž§ë^æÕÝŠUTºÖ¯õKP¿*TW¦è ÊÚáüˆ^—t\Ы²¡â5Ûó}¾F6èEƒ,Ì*kzЦàП£Ý ºº»b³{Ì«Ý#VÑû!½ ú ¨_øX¨®@× (ó9]ÑSÑkEGE§-ÖTÆ൪¦¾A_Pä͠σ<ΤÅJüš` ʉeZ*èÚ_Ó7k00—b›oÚ7ÐÕèN¸Þ*vysÙªÙHÕËöïÒ×.V’½ö4q º*·¿Ajê—þ¦ƒb†}Oƒ‚¸üórhýö,‰»ªàû¨åÛÛÞ4ž¤'ßu<Ó€þå_þe~åW~…|à÷:öúúšŸù™ŸáÁƒ<ÿüóüöoÿ¶?â²íÐ?@wkØ­é7Oxmó˜«Ý5q «¯@ûo /¹’^ Ò+[Ñëc:;…-¨p­ ^]Ôto›¡oŸÁ[Ažô¢6øÕjÖFT¬ð#)øÞRÆ:Ð]O·^óh}ÍU·B·°úŠ0{xYà±Â%èZVfèç´¡×Kl®ëžN·lèè5ÐéC^¡æêÍ3â·Ìá[€·ò\@DäL`йÍvB«öéJVÈÂôÍuÙ5àY©ó¾¯h\@\ ÝÝÍè·¯­{mžÐkdûT_ô‘Á9¬Ù*²b‘Õ‘}ð(ö+&2îÒ—¡1@úp ð0˜oËrx}·}3Ïó4û<;ÿ‘ÏñÆÏ, ?ö±ñ‘|„7¿ùͼ÷½ïåÓŸþ4ßùßÉ÷|Ï÷Üzüg?ûY~ìÇ~ŒŸø‰Ÿàç~îçøÊW¾Â;ßùNT<€¥ Ä3WdºkÑuÍõãŽôßèþ=²þyEO’ªSB/˜pmå-ºbÇcÖúˆ>ækñí<ùÖ7ÿ—È;¼¹†‡½ù½ 1?:àŸóË!ˆµ¥¬usØ-ÐõŒËÇ=_}ôº¯ ë/AxäôÆì¶ ¸šìPV¾\õ’ŽWÙê+\ë+Äøn^}Ósì¾ó¼' o­á¹çÑ’’çÁÊüš@U:Ù(b’j¦Ì‰¶ž&èÜ—i€ÄBÿÝ^°¾nùÚkÿÄõ«Wl^ª—…p­T[!î ôxÑÊ·SGÁlµøMa‹ôà8V>zûx:+àöÇ_o¯øõ<æõ~ÎÄÓxfýÓ?ýÓ|âŸà _ø1Fž{î9~ê§~êNpxñÅùÁüAÞõ®wñ/ÿò/¼óï~ÇÆ|Ím ë\Á£ ¶ÿsÉËÿOËîß {ü„Øu¦ncUËV G«5¶¨õWXNî_üÅ_ÜùØ~ðƒüìÏþ,ÿ÷ÏsÏ=gêKæÿûÀÐ×zx¥‡¯Gä_äÿ³üü'–ÔáÍÌ傆/SÉשxD%¯!tP÷èRÐJõ¼Ð¼EÑwÍ;ámËÀEý"¯ÎZ´ÙYÎXõ„ç‘]‘úT!–ö\ôR‘G}¹†‹È—朾%,©y sy@#/RÉ˸$È5k Gj5wa ²„p!Ô•ö-‚~„‡çêWy¹ýïtmÕ„·@xÂÈÈdøEDŸ¤sOw Æ»t±À̸¸ ðZ€—+ä«-í‹KÞ¶®8 Ï3ã‚–¯RÉ#û7±BØ"b%œÂÈ„ÝÆµÙ·'t6>_O ú.±¿×Ë‚¾éßö´Ü,ŸóÈs¼PW¼@…_캧|¡go<Ó€þÇüG>÷¹Ï=Õ±Ëå’?û³?Û@° ñ:•+ÖW@¿&T_ <\ÕœI$pÆB„šŽZ”ŠžÀÖ’¢+ÐÈCAÞá?Cõ./À²ž .ë¯ÑÕK¤©¡®PChLA£fôX2ð5Èk /+ò5…Sª¯Âs›Š³ = „Z ¦¦’Š !‘Tû]Etœ <Þ¤ð‚À·(ÝÛ…z&¼ ø÷êUž´ÿŠ6©#„ ¿¡÷Iüç¹8˜©7PRo×'^Õã¿6‚¬]‰ý"¸ vñy- jx)þ]yîRxž†*(-5-BMK%s¿ð¬6/J*„‘Þ˜1$D§ššQE7Åú-Ir¨lã¾ =<¶ßÓ€|úØ1 :vºïÓû”ì|¯ñLú}ï{ý×̓‘o®Ä; ©j Bm‚Aäµ*ê'5CÃ¥fj^£â’ —O©¬ÚnñB©ž‡þ!¼Õ…0x(ðõpI_?‚ê!RC8ƒp†Œ¥«a“µ®.A úJ@^ Ì.+ž;— ¥¡¦‘k*¶Tìl’‘••f×bKK› Ï á¥z«p}aÖ÷ð0D®«GôõÂìŒÚ h*1Kòž+·9 (ãÙ67À*X{ºk·j®‚)ç'yµB_‰È7–—ð¼.¤¡Ei™ÑÒˆT•Á/AV^_OcH¤K©Î©ñ?R{zãÀòظ¬:¹ð˜»>~lß›îñ·óîwñ”ñÁq‚ôÇ3 èÏþó¼òÊ+Ìf3€×ШûyÜ©+؈\õ̶‘sQæø¤¦@ËC„ „%B‹rvœ.…xñ9 ³rçÀ™ÀBz6á ­.‘°ÂÊâ:ÑN"š*•N­žû: —=ò$žÎúŠsQf®šŠ 4û%>Õ™U›/€ GaÍuýÂ*óž¥rß94fm„†œpL¢öÅL-û6À& «ˆ^ \¸R»]*ò¤B_Sx¼¢Ì.…ç¢ðçDZÒ\-T²&8¨Gí$±uhZ´ñß'Å/“]Nµ3¢sÔGys›ò}Ú¥¯ëm‡ö;vN{ÇßÜÛ`,‡;Êá› }×Àì`<Ó€þŽïø~ë·~ëu}N ©»Ó«)Ø6‘‘…ºÅfœ9œg@m¨Z³9ôƒôª¹·XŠp)[ºšKì°mºÚHÒ«µ0Ý(†«È¹D–(s" Ph¹ p†°ðóiì‚á€&õÎ_‚ž zý¹1¸a¸x,¬Ã1\!Õ„…Ýd²Å’«“ÝCö†¿g½Zè­Z-ú*À ¸ÂÀ|©èà1È«Š¾ Í%\ôÁ.wR±$2ó_* *Î6nitéb¾1Z/Z†–p.!]Âú¢†ÜdðF1x@u۴è{ì¦å}Ö)å»ÀúõTÕ÷ßý 1ži@þóŸçCúP¶8þèþè›Ò P·ÞßXMÁî”°SægŸ•˜e¶€§È±ºŒ9èBÑ%t hf’•÷L HgÁ.q8£. kØÕ€XñEg°ÓM›HÓ) ‰,Šsi¨˜±?IçƒçUWbéÈ3¿p,=æf{× ­93,^ 4¬†nPa )‹"5Iê™T)¨V(âï™nÕTôZ‘kÐk\=ƒ<} <†ú Î;á!Âα‹ÏLí—JCK`†È˜;¤ÍƱ."5ÖÉ:ŒLŠ:€So~­H§¦O¥ŠÎŠîæá³ëܶ>ÙöT°.<…ó̇”µNžö&P§ãn¢îÉê¸u<³€þøÇ?Îÿø¿þO\¤™AðO«2ôhUfÀÌá8ó{’`(b‡“Xç‚.`7‡¦%ƒ½Å]tX*(RCÕ @\‘ÊN‘mdŽ:‹=_ ÍçRÀó´Â.Öv^:³ì¹|á õDRzÙ ²AÄàlçÚáœd) Ðx&‡¯: Ya¾.'i¹„ù.ˆ\ˆp®3ìâ3—èŸqTKþíÒ8˜Í‹ÞŸSO}³÷p’4g¡o+- 曼èÛÀœ–‡ ]Â÷¾à&=ŸŽž7ŸÎ}UöMðžî›¢>áíÓža@ß÷}ß0Óë8‚„|_Õšý4ªÌ‚Ï—G‚™2Ë0ô²:Èye3¸bÝÌL˜×ÅÞ">ós´9œi÷í*Zv:\¤TóB[À‹<“Øl(ÕpNjB[ÓºZ•Z$«ûXKGn7ê_À9—w‡Ñ-Yâ€Öp-¤ÔíF8G8§çáL"g(KìÔ¢ÔÅ»&îJc!C_–³ 8ÄJvO O½ð¤zчÆmvÆM¾ØÇTwÞ~h™žcú˜RÖéõ¾LÀ«¶Û÷4î>žY@ÿÀüÀÈó„YùyõyùšZX`€Î…uBþæ; ëfí˜äR5PU¸§jÕÒf þªIÊ LÓ"}Hg|ZZ4×_'@c¨ævH{;Œ] Umè3/ÛÏQ@¤GÀ,鋜|çé¿]Ý.ÍV`=½.ZÊàµÀÔa©hÎ4ræö†)hu:ÿžý›ø´Ué¯6Lnó)–×Ð4󷌞V@t?³ãиœÝòlð‡Ž)¶öÞë;$÷l‰#pÖâ˜rNï :¸zv@«@gôTéïá=@O-Ö²‚vïJÇÿÀds`þÈæ¸/ o²¯èc}øX?¶”bÉ-ëåòi!-.¢<©ëÇ Ð÷•­ËœŽUÃ|f“™&¡VMqD†èS4 Ìf¦ 3{5;ötCš^éV‡³~d8«aº²,90S¡Ij^-<&¥,¯.ÉnñÀô3 ÔJ8h¿Lo¥¼´|h• ¢5ß׈+èˆìLAë:Zåà*"+ƒt³ÎÎD8#ºzÎ,=[fA F Å/šò»~ÊŠÙF*IN§ZÇÿ¸€.³:r p:QKU|ÆšLü±ƒPžªæÄu€ýô<&PÖéã%@KhùHëm§ñôãè{Žà ºä•²˜¹jÅDq4•F¤(\ móvPÏÎ_ šmñ:u@¶Öd‹"JþBÙ÷Ïž5v¡HJ>uý š~ãÿ’¬ìÛfiIþL„6ùw@NÝ G¬…Á†©lFì´Wk‡Ú º«,Eq«ÈF`£èZ`¥Ô[a¡2ò2©g, nsD¶6#gyhå,'†UzD¢9/å­‘áß= îŨÓë1Y)”ñÈC.·%@§e(¶Ë°ÿžÊ¾£šÎûËd&Û§Kî°~%=w…öÉâÈãè{Ž až8çÜ•FX¸(.¡X!þ«¿„a óÎÔjSÀ@´pm5ÛêõrFñÚM šÌܤì–-ÌU]AûÅBí(ÉD/t³zä‡Ó€ÚA9@”̃Ä+»ˆú|ÏÏ«ØCÝ'P¯40ã7%nÝ ºKµ[ ÛeŽ/Åà|æ>ô™ÛËls˜‚VŸ™»¼!ÃvèQ¨÷æÐ œÅ;žŽ íîL®T÷ªñ Vúû`rÎ{ - ¬%‹¥Ý·:¦ûÏLQTÜÀê!H3Ù–>ë7©jذÞȧqtœ}ÏQaõwcÍħú—Ä,fnq´Š$³:'TèÐV¯XfU×Áʧb2m˜]‹ÊÄù\%_,M6·8 ¢«[9hY 9•D])î_@jª:‚~Ñ*Ÿ¯zr‡ö¸‚ÝÙ\ºUt+ĵ ë@ÝE–"œ©p†ræÂ%3WÏɇnekÀÍî÷n¤uIûõHè­r²˜À%'·ÔøÄ·:ds”év…Å¡œ3‹ŽÁyª–§ Nö†÷rÊpKVGjà°O}è&ãõiÌ]´–SÏ”VÆ1…}¯ë8úž#H`¦E°²ªæyë"Ô‹'ª gÚ¤¨Ó¬yL;t*|aТ-•Í0âζfV<@¦bÉBRF‰úÅBy"ˆùÑ¡†y3œO«ù £A½Kè ¢ëî•×H>·”∴•:q0k¡ q@ º%ÃzÖ–g²ïœ¡,í¥Ã»É–E7Ø!œ·gXïì~è À‘Ø8h]5§Ê$ZÜâPO~ÙãÒ1P‚ótý¤K«£„r^ÍŠZG†=RÍG }P)ßc=¶ï cºË‰ï‡Ç Ð÷a¤  ¬R ºE\±ê¾œ¢‰š`¨CªGƒ÷=Ò À醕9Ðp®Ý–R ›ª ʼ!Ûf' µ*¢é[_H ¨+tÞx0ÚyI³}£KH×Eˆº MÚ:ÃY«‘j¶%èN [ˆ>yŠl-y^Á™Â2šÍqFµAúŒÈ™æìÚéÄźøRÓc»ázK#lÅ—J, -9M\Ф¢Ý¡2-îysØÞ8dM”j¹¸OSLªŽb¬Z<6RÔ‡Tò¡Ycd²m ÒÊ7Aö®Û¦ÛŸF]Ÿ<èš=èAAÄp°6æVhfmºX ½_0(¾Ìme¹šÌŽFQQ¢[ Ò¥Š®™Ô.C0ÓÁl‘FñÌfsÄb›tB¥p^)g Ì‚ùÐKõ™ƒz¡Ö_;²%°%²CÅzo¨îP¶DïÇ¡lˆ²EÙ¢­õ¼Ž­õÑÖAÝ–ìC“ÓðÄ­)½ç©zžªæÎÊ>›L±,a õ+,\JF4Ÿ5žÒ6(UF>¯[b½ŽÃH=»JMOÿWµËÌ\ågA¬2²8´¼p$@ÏAJ‹£Vb0@GÕÉù%fFá¢99Ð,HcvÆT9wƒrN*ºU8«…³˨èÔjV¡¡CØ"caëË *gÝÙ Øä³:t&Ä™殢çæéFV ÕÕ¤aRѹ×S8'_øˆC¡œÓöž”G©ê Ìé¨G^3L¶5Œá:µ7n‡”ñ1_úÈ1§q÷qô=GPûQ_¸„ZrP.gÎe@kÞYs‡îY¦ S¦„zÛÜ=y¼e H³î)Ö ó¸K§…h…~јÕCsV-õ¯F ÒIG§oš ÔšàœTô,CZ¥%” Úa°w:Ÿ…[•³ªr@½ 67íB„E€Yì©âtc@f‹è&:bÛ£øRmÈè½E˜‹©è…f8‡™«êVˆžÁ’fuµK™âH‚qZ&åÜ“U³FÌâ @N™-‚•ÀÊ|ä”ð޾-È‚¹Á IDAT}¢ùÓG |pÛ!]þÓîku¤Õ;øÏÓM'v'@ßs,þ!¯\¹ŒË)vù›39’Y­c]Z“ÍaGHÝ¥%)ÔÂâWßö‚#ÿY-@˜ò %—ñiñ¥M ºÊT—ì(1@SÜ1ãyPеŒûö)-ª…šîÞrŽÉæðõÐC£ÂY gQ9 œKP‹²t«£–-ÈtÄ ¢WÐi}m묉¬YÛ Pë¶êK!ÎÕà<ƒÐ’-ŽèRE‹ mI³ŠNd9ðså¬^ Cç©J&M’#¬Ê}âäC˜íßû”ãø˜=P§ç:ç¬Ôñs…õ ã˜Ê>ºÿ73Aí36N€¾ç¨Ô,ŽÜA³Rê¡ï@Þ1 &ñ8¥MËt6Û‘!HX3§ÊêtÈâP•’µÎDtäTxŠ]þWIÊ`o$²kt¥D±Lâ(¥z¶[­œ²vRÎÐd圼ƒ˜lŽN‘•+gWÑû ^Fhcg³¢Ë túR¢»bm`ÖÂaE¬v°d¡Dt\BXs·<\AÛ<·B¨uäA'õ<Í}Y ¥QÀ9M0®þK‰=;#HI=Ëø%Ê—‚É…¡TÏS­ÏuƒÕQæ<”}¹Óëac¤×?ÀG?úQ¾øÅ/ò]ßõ]€·U›)z”­R&iá4ojt gϳMB ZkÐ9deêiv½8c<Çûr:³§ÙÅ”îÇ*ÚÒ6$ÙMIuiÔ„’ m@(mŽZæÄRAëàCGZ³ö†º­áVG'…³J‹à ¨,“¢ëÎW…-ÄÕe±é¶´÷mÑüfu€Óô„33AΔ˜}†=áBÍ[‚s R Ry¡JiKøõ-*ÄXÜz»]1-KuÇ`i‹üŽ–?l`¼íèÒê` å[²9Fëé {#å}ÄêÈã=²wî·Ý?Iër¼áý¥/}‰ŸÿùŸmûð‡?̇>ô!þáþÇg8ƒº4EŠ =dp$i•¾‰è¶FÊj–F‰UYNmABtMê`¤2I±s‹#}ɨš2{CÒÓça.RÉ7AÚÊ»ûëàѸ7žtVÑ’…jáNMpžgõÎ!ÛgÏØH )ÍV,µn©ž±‘•óê…(MØe•Œ¸Å‘…²Fã z‡4kh:ô, çÀy$\ˆ§ˆ0¨é…Øf…š0´ÑÒžÿL„i§ÐEèzè#ôb¿^¢ÿT@âpÁT¿Rç‹(%  8§?ÉÄ3Ve°-²o­ùzŸ Y”©çÛÆ18ߤ‚§jú6pße¤ç¡XžÆ Ðßöm߯ç>÷¹½í÷wÇg?ûYþäOþd´}óä1_ø¯ÿúÞöà½ü§åwŒ,Žœ=-©&XÆ„§´iöŸ‡†˜ ¤®v -RTªE*…S‘ÒìÚ¦ÌàÐT“/¹ª1ÿ¬˜×h©ž‡Äé±Å¡œA­Ä[Æê99Ûª5º³º äB9ÇŽ¬ž“Ç|&Â2X&G©œçA qkA¿‰ÛhRÓnqô+¨w°ȹ¢ >wH»å‘29t®¦ž=Í÷žµ‚ˆ•ºl{ØFØõ°ÃÀœœŒX¾¥ +A TdðŒÕ±NS„˜ÎÒå2¤ógÄ_âœGê9¥ãŸÝ2µnÔç£Ü§¸7RÏ{߯ûÝg”0öñҦ祭}Ê6ýIE§ñ†ô¡ñÏÿüÏ|ðƒäƒü ¿ø‹¿È¯þê¯òíßþíœ]<äûÁA_^y4(èÜJ8÷¾Ð! SЃ@J±puå k@_{aöžefÅ…)*•©S1¤× E©·âe‡5’ÂÔskp¶6C1«ç}ÿy‘e^Ày–álÞ³ÙT´ «ÞÞ§T˜2 Š+ç ,"Ôqgv†ÛIE‹¬,@È X+$l­ëy€s AϹΔpÎ8Hè“â’f±âGz±Ù¸Ö½Mø²óΗ)þWÔ¤d &7$`¡ PSåùïíuP³GrKRËSøj¡œK»%©h&ëp°peDÒ0¹›z~Tòô¸òþ ‹ŠæŠòÅ'ÝS¾Â³7N€>0ÞýîwóÒK/|,àm@ý ª¡•Q†"d{ݬn›q0®örj-Xª]åópzÞ°?}Áó—ÅÎe^—BXó¬.žˆk*ºTÐU°&IIvûÁÒ(ê=J¯JtP'uUÉÜó³íµ(T‘–¸‡³fPGÏÚˆHT–Õ¾±t(/¢m›IOMá;ÁÀÔÅý6¹Yz.pav†^€œE8ï ^;ž²8tnOlÌ×½²r0¯ÅfäÚ&8Ë@'ÒØ ³Ú…¶J¿dÄ’xˆÞ„*åH—ê9A¶TÒ¢{6G²]²Š.>œeªÝXëG•´Žó‚}¯§²>ùÏûãè{q•ljF•Ò†A±N«‡<Ó ™Õ6“·ï,EŠ]YJ4)¯XS¢0ñŸ“8Wfua³d­¹@EËJB­2Êàˆ{þóØ{¶ÿ­¨™£2÷Ààœ(C&GìëœF;)‚‚nwô6ÛŒ¦¸¥1µØ„°µl]=¯öÔói¶æ;sŽùô¸[?±îK„3A=H¨3èja'Êu„ë+µÛZ°ºDQ´C:Û ‡¬žÐUç|C©ÜÛŽ)Óà XÊjÁ!OZ‹õb;Œ·—£PÒ‡?ÀŒÉY*é#@mšîsßûÇÎG9yÐÆ Ð÷YAûªæýKó¿5ÚŠ±’Ô¶4‹¡Rï=X‚ÍzRI )K§½ÅšöE€0+hE*±þKé©“jÄá,¥½¡‚Ì*òAeJ­ôÁìžÁ{¶<èH%3HêYæƒ÷ì*:¦Ì ÷Ÿã$sƒ‹jålo( ß6‹7ü Cž³ö”“z®;X†ÊÀ¹ƒù³;ü1K·‹„¥ùÏ]k…Ë®€k…kÖ¢¬%AºPÐ~‹x&‡.’KepVƒs´LšZ¡‰:Ä(jòä%|K ûÓ •!­Åý©µáŸË2?z¤˜ X–*¹ìˆ·§žË×<s?÷ôøQÌ-Êi ãè{A¨ÝVu­{*AUÿÒú·ªªFyÆÔe¿å¬ÃQj*(úZXþsÊà(ál*¾™Øe›Q´Ÿ¤ØJêÁ¡ƒµ1)PéµÌâˆù<+ÜVK³ Et¤õÔºdmxÞs±·v›AaY‰ÃyµYÂ2*3‰T²ËAA“a_Ø•ûÎU†2b N>t^Ç[å‹È6WQ¹ìáR…+U®®¬¢ÃÙo[`'¦´{^Ä/\dkCJ凋e•˜Þþh¿tRUâH%?h¨ õ¼§¢Ù?vÔÇTñ!µÇÛõ˜ÞÄSÞ‘#'ð—Gœt'@ßsìMK ÜÛzœÒV%c¯¤h´÷–"ÿyÀáPW*Ÿ©Ä|]ÏÞtLmFÕ>Ô*ÆÚÜ)TÅ[|(![eÚ‡"alZgõìþsGYE‰Èéuxþ³ÛÑó´#-¡¯\9Ë`itämÚ[VÆR†€à"À"Zl[+=SÌÄB=Ç5ô®žû Ö&QÏrA1Œîë çÐ/`U)OTy \jº¤W ×AXGu@ [Q³8¤PÐŒZÀY©ÎmTÚ³²Ó]Õ,Š»ÈXK€ßá9ö.ů°¼Ï4xxìø§@}7 ï9P‹ªˆ'fäš{#KŒô;´®ÐV(i^6ļRM©S±Gž©ÄçöK :ÿ¤• è”^W^,L=÷œõXAK«£ Žaò¨H$dõ¨©´ : %Ùä¼çdihg~kè bËz¿Œ{)bµ#Aic´´º\¸æ€`¿ÖHÝ£Ë`–FöÅï'‹CÒŠžÃnוòå ‘'ž¨ráRà*˜Í±Š°°ö`a vX 0ÓõlªÙÀ<‹–3=š˜ƒˆé@-nS8ß½ƒª:}$ï`1Üö7¼ÖmÏcë ÞGÆ Ð÷B  Xq`´ep 0|i9ÐÒ„ÑÎù'nñ;Ôf+i ©÷†¤ Ž@jÒoU}d–’CRp0Ï¢r@A M°ëä=·ƒz¶ìä?‡¢“ÛEþsÔ™gšÌˆÚ˜¥±ÃóžÍN´öḆðž=ÅnmªÆFº L^³ H³)ò« a.dPË%´/.`Û•˜j~\Å }Y)— W*\‹r`…uP6ÑÍÅ1´2ÊØh£©ç­µDO–^Ù™ö éO_äëå–,‡ZzÁ°µ£@¾áó¼—÷œ^kr¡þ”㦋J~ýÓN€¾÷ v0Š:u ­´h’Tª¨ˆ“\Ç©ÞÅnèlkÛIaqh Eq¢äïN¨†Éj‹8UVÐe4vaIžH¡žñòs“¤"äRk±ìmŽ–° Eî3–jç6GìA",½çÆÂýçä;ÏÅÀ=“èÝê’r60éu¦¦‡|g÷/z©e±à`‚ô¬x"Êà±b Zþ?öÞÝG–e;ïü­È¬gW?ö>—#4"H€©@l9ƒäÐ’#›²äÓ¤\9‚lI-9¢£; qТÉÇÌ4#Þ³w¿ßÝU™ñ±""#³«÷ÙûÜ;`NÅAžÊʌ̪Ýùå—_¬õ-q‡¸âAÆCp~RŠæ°A‡Þ&ýyg)Q%±è ZA.+Í8/ÒM§ƒöžy†O0N]ðFa!û@:@Uë©}-vþ çÆô|Y—þÒ9¿ò³÷8ã_ÑMàÿ/íÐߨ¼>·AhÓ‰£Ø‡%škÖ8­ª:zÅì±Cˆ&ʼn”ÄGób1Z°_~±ÍÚIhU¢LÅžËM#8@ž ÃlVlDo¡ŠBìZ°UäeÒ]ÚÌ]w®|7JäFïÚs[kÏq0à_E±ê= ¤‰»‰îüZtggϯΦg‚£Û˜ƒrŽÚ8c H¿ÌÄÁ½à¸3q'—9îH?qÒDatýœ%ŽÛhDkˆ^ù³’ÿr%S³ÃÔ1SÏ*¶O7§ž¤K»»Jaß)%Ñ&UWˆ_`Ò>¤(Cff¥½Ëž¿À‚¿È²'ºô•>ö¿?È_j€þÆfxÒAž÷k±8‡„žª4!!ifωâæzEÞORˆ´•ÇááÚUñ¡®ÙóÈ ¿þ>J_~Ñ̹È‘h9ƒPD’SD È3Kä†- @Ç®©’QÀ’öl½$“çFtoU‰Ú€¥™»ÕÅ>±ç× {NÛRä†Í#¬CÅž)ñÎc`ö}Ï-ÜYf4Znë÷ ƒ~ ‰£ -}L7Ìääïf°%ÄBê¼Dy_ÙöÏlû¾üfÑý™:Òä¢ î„%ùÇP+=mä§%b?*Öѵ1Þ4ôìW°ç¯hïöÍ ûÞë;ÇŒÿíÐßÚŒ$c´Í VäB¯IƒH¢é jšÙHÞŒÚ Kfý-VÀ9^¥™b¤lE9ɉ)™ES:3èô1³¦bϪØsØ›=ÓÕ$í9‰õøç½a‰AWqÏ}š$ŒÎž“õë`ÎP/bòÛHqÏ–Ày˜ |Mì¹Kþ¤Í8[0‡ÒIÃÐq_Ày`Î.oÜŒÖEßf©#ÏvaN K=;’P•[ ÙI) rZàÅWŸéã}wÝ–¦óg—úƒ~ëÿ´°ëäâvç<~4€ê³òá7ŒÛ¯f½À~ò? wÔüEö|`Í_ÕýÍ´y t“ ±*y##h>Â;ZóìPz,qTU±i‘yôqéÐ’ß4Ú‘k]gÍšïœÊ3cJ¹[7–À9éΫ`,PϬkÏñú×µñZÌæ8s>²qŒsbËT@ý2ó‰À{à6ñ-â6É7iýVMY¿7x -Q+|!,ŠÖõ°‚ÿ=Ëo×[ÐâtkúnÎýî‚ÙnËIô”þ|û#lTö˳^\Ø6Æ cö»wP2À/ò/Áž+¹ã‡ä‹j#yãØ{Û ¿±y˜`жY­°!Ä.ô0ø2ÕÖ0…ŸTlç9è­Ì*úwQ°Á°)ùnДÝë4Dp”ÿ’/ˆiHçybÐæhªRV™=›3è(Ú+r2ŠO®‚8ÃÜD°m5˜å gÔÖ'‰caÝx&à&MnªPºüþÄe{3gÍrvݹá¸1¸Mìù&ô=-‰a :‚°ÆÂ …%üÆôÆ‹4[Î*u­œAï¡[Ñ¿ÂÝöüZiRÜ|ÿl…í†y…ªfÃ×#Ý>9cÐ})ã«™õôýtòpò¹?¼Uþwh¹ú[–8Tã®ât‘i¬šÁ¬)6–5@GÆWeƒÛžùÄ`®?ØB ¯˜”p÷ÒYò~:?nOØ3ÂÚìN5TïÎáuää”Á!—8Œ@ÂPiÎÒ¬Èêmç~ÌžÕ«6ëÍJà ËÔ ‹´ÖAxõ´îøŠâ+–ÀYEˆØ28;Ní„ý˜IŸ/3g¾<à¬ø®’8nåšsæ;àÅk¡lE´5 kH‹Oi'Ì1›£Ðb6ólÌÌ¢ Ìbé-èõ¨;E/ ^ž ¿f3‡þú­ª\¦¬„ÙTÝ·þºîW±ç½û~ Õò…ø"›õßóê᥼¹™À;Û~¢íÐߨ fX3HYƒÎ„Ž·éj³P&-ƒsòߪ”¸”@‰ÜH ÚÜIgÈÔ‘Y3.îLÚ†Rx]Ôp£H lÕ¬b CÄFaÏ‘ L˜s. kUÕnëó«GmX/šÌž-M&‰ci{¶à ŒmÁ¶Ik~Më[¤Îo*G-vÔ»î¼éö¼¡0ç×aa]I‰E‡Ä¢ƒËfi¢°ïáy O[x|…§xœÃÓ=-ˆÏ3>ÜþoôÛH xŠ28,K¨Û³Ô`6yÿ-,¸È_’M~)ùân¹ƒöÜhíÐ?ª5æZbËPÞ*˪A*€¦¤šÉ<ƒp ÙþjjhªÈ:¼nðÛ÷èÁY»è-$¦s*}9C9þy&7‹h5ÈŒCëœ=74¥8¬§trxݬÄ>ç Ý…E÷^·l*9#Ìyib”Âêœ1gP.ÀœAº5ÈË~c›ó¼©tèãžÝ<ƒ³yÚ6p_MLZÜOÌ0[´¦aìÈ×íqD ©ôwÒ„¤CÓÂ.ÂýΗ»-<4pßÀ}€»w \5ا9ÿýåGNúÿ‘–¿ üLØlW×)éÿŒÀÚJªaG?ð>¢©œQ½ß›”òÎû/íûÖ÷oÏwÐ1¾¶ú›3hÏ–.HC¡Õà,óŽÖªŽƒö\OŒÆ&ìÙݔƱÏéômÂýYšÌ÷~yÃï(6³AÖ˜…”œS¤ª¬•4ÈÅ$3gÍPl)'3¤*¦^÷¼xÉJ(/ƒ§>/£1±²GilSäÆl‡ÙÍ£{†õØ‘9(‰£/:t·pp~±Jâp`~PÖ¡áNbgK‚ÖŽµ&°¡ÁÁ9Ø H,Úš%ŠKPƒ=õèv‡ÝîÐ]„Û» èÎÙn¸qpæ|ÆßÝ-ùmñ3~9Ì.þͶ#t†­÷-‚É™Ùå°=°†·/ë;àü¦ß—Þ-«ÍšôTÿþ‚ÌñÍax?Ávèol†3æ¦až©Éðл EÚ¨ÅêA¨ðµ€Qª§$è÷ŽP±ç±¼‘CêýY)a¢ÎL_&ë!Yâ(~ aÄšKx cF£  Ób–¬Ow†¥b°*q¼†E·]Z*û—$Ž¥`aJÒÆÒd  P'`¶Wh{làt„³ç#+’°#£[ö<x¨˜óŒ@º^¬ˆ0‹Mé#d‚66D;FáÈtœ¹éõn7n}±Û€n¸m|ý&ÀUËúiÆÏbÏß7ñh9fCà# Ï4÷ç„àObfI2Ërv’9JÇTê€_À¾eÒðÍû@³4‘;†a¸½´ûn>ý~;ô76Ãf´–œË¨:SÜÌ¢Íô(z#ëÏy¨æ <²¼‘À™€R錵§äC]æ5J1w›Ó!9¥TP1 c.^Ô­OÖæH®‰»s߈œ5[59(fX®.Þš³:gΊú·lÒD ”&Ý›iiFk=(I}–4Ò„ m±Ðù÷;ò:[3H ¬uqí1Ë2žèyJlùã‘ĪåiÝÓØé(ôÆ™ ÄÙ1Òq‚â AWv \Gt±›ˆnœ=sÓ8‹¾ià¶¥½ï9é{¾cƯ™ø»‡÷t«VcEx}ÆfV"÷hœMW÷í½Ò†MXô0ñ6÷cÙó/Ó~Pê8°çon€þ-ËA6ԞˢE-oŒ´1{.ŠÄ64xÔ†‡Ö‰=ò†¿xcô Á†=f“œp ØÜ½bwZUN©$Ž(hh303#–ôóYÉ,“ƒsV/–Mªhc‰c!˜Yt9C;d;é¸ÅúØ…ÿAW ¶¶ ˜{_ßàqÐGðˆŸÌxL ùÉàQ}’;<’ã‘9!M’Ø3:B'&íÀtLÐ !^„Ñ_GìJè*Âuãà|ÝÃMÀnt 7 ÜFÖ»†3Z>ùˆø5ƒÿNÆÚ^ÉvS~ƒ›aÝ ¤¿ŸÕéÝðœÓcÛȺn5À1YŸv÷ÛÓÔ ©zÇô¦°§ÿ»­`ÏßÚý-“âÀXâÈð9ºÈB@5½-å­rõk®Å’¬Aèl/:bÑxvÖ =#6Ÿ;+‹Ö>ñV*ŠAZøã@`æÒ†’¬QhZB’¿ @ω`´&±J¬ya°0c!ÑXï ¬mÒk ÞaÖ»-k*ZhG†ÖȾîlú¥q¦ü$xÂÜh_æü˜ÖŸ­IÀ¼Û ­iR‰gÊÇΜ9ö¥[£û€n…® ]ñ*ø„ßuD×Mjn"á6²xi9î#§Ör¦È™‰ˆï0¾`GT—þ¾¤›¯ÿD{=7j ”º…Ùä?wQÝ‚ï¦tkú9Ôý¾áýP~ÜßkýUíÐߨŒ¤ZÈ ò4þy\ibnÐ5ƒöæ“q˜³Ä1Š.ß@#R>J3O“eÊco¬U·ÕäŒAÂþ £ÉÌ9³æ$o¨wpÎzsHÕRò£ù"…Z/¢¥Wy¶£¹YP‘3äàìQ ¤C­a œ•\ü30»ÛìZãxÆx6x’ñ„³ç ÒO/jhXƒ!¥…®='9ÃNP¿A¯ t#t‹óµ×] ®ºjà:b×-vi"›.rª ÎâÔÄ™àƒÁ™`fwD=ÓÛŽH—nÑ3«Ì ”3 “9ëÒÚ'o Ãb¸÷–I÷wÛ>œlû!Àžn—ô€÷}‡£·@¡ýÁüú§ÊÏþó²ÍHavVMŽŒ* žtÌþÏ5ƒ6íè¤?Çê”i Áõï,k´TÚ3Óè 0K z¦Rj‹Ö¿G]s0g aj“õ;¯I0°ÀRœs2®·d÷arƬ]bλز‹êó€­ˆÒö×5 IDAT¤ [÷‰MC¿0^,³gx.Àl˜Ÿ€Íh´‚7ìùˆ&³CÜ Ý Ýº¡,ñÚW¢¹2t!â¥/vݰxŒ.gÐpf-§ˆ“ÊâÔàX‘…uôz ئGÏôö‚ØÕ¡¹‡Èö²XKÊ85òÝ7—W+Œz=ÃÊTÞö/ù9¿ Æi<‘)×`\ï{öõfû=]ûÉôßüÍßð{¿÷{£mÿüŸÿsþüÏÿœóoþ ÿñ?þÇѾàÊEÂÜ»ª$]TZDÖB*pö>~yeO ºMÀlIÚHV–Ù£!? '7¸ÇðPfk`ÐEƒ6±:»ÅgíÙi£®šâl~\ÍÅrÑÚÎ1Ûbö®‘Ç(w1mr´†±ˆž)87÷ É`ì̹+Ì™Øa¡÷XñÄž-³’¤ÁÚÐÂØ†ž@Ëx¦wS}9`¿ìÔXÑØTÚs–5²?©âm4· ˜“æ¯Es™3èÂÐ¥h.‹gq[ÎPZ"'DiÄ)bCdÆ–ÈÝazÀ쑞'L/D^°f‡æ†Í…f ¨ó’“šP[°òôõ†AOÀ¹^нlLì;ŽÙ×ÞìÛÃhµgÛ·žc´ýÀ¢¿Ø~òý›¿ù›# à?ý§ÿÄÝÝÿê_ý+þê¯þŠ?þã?æŸü“ÀÝý-?ÿ_ÿˆø‡¿õÛüO¿õ;dêb@ù_IKÔœýúÉÚ1/*¯†åâ°Pz[ÍžqÜoCìsþ™ªg {f4)«›‹Ñ¦2V³ji‘BaÎ9œ.&Û cÞ¸Þ¼°š9sƒ&ö…5̹s aË–†8g Ö ´4¶íÌ/àLZ8`¼ÈØÒlµ—=cÇHGÀ1Ä#ô2C·À­s6t&¯„.=s‹;X÷p§gj8+²†‹ŽYG£z»¥ó“Ci1{"òB\C\-¸ •£,±dž2Ò£³yÞˆåî[*Æ\À9ðÆ*ô‡ë»RFÍ®ßcÎ¥ÏÛOÙ÷¹çO=—OnvþÒ¸tn?y€Þ×~÷w—ßýÝßà¯ÿú¯ 8œžœò¿üÏÿ´E¸¼¡·ƒ4,(éÐr'¹ªƒÒkÖŸEƒeöìÒ#ÕÌÙ’ÈpjFÚsýœÛOHI±xJV§5{®5h³ìNÛ$oŒ Ä,o¤2N¨Kò†™å™Ò+´QØ>æ¬f›æÌɯÈCëVIâXù¶]c¼P³ñBÏKæg¼ÚvÐ2M ¾Õž]ÖØ@·†çÖ'oYs¾I¬ù tep)Â1{Œ“FœDãT³Ø$9Ãe‹¬Ùaz¢³L×`×øà³{ÈLzÞa+ÃV*ÿ¾ Ôq!HV±¥òç0†ä&ö°åê5‚ÂÀž!c’å7•HÒ{»?½™êÊû¤7€¾obpˆ ~vÔð³µ{lÿï‡æíÐ?ÐþËù/£÷Ew.Oœuá×Ì Ê…•ÏTXtgQ@¹€3¡°gcŒýM’7‚™×¸ƒ¡”UýòÕÓ†n7nÖäÆHŒ€9»êÍyCJ±Ùyr0â`¨‘»ê-”˜³`nÆ,Š™A°TæÛ:,vÃÄ vx‚ƲA, ˈ-A ¼ú™ñ@'Æüjð¼Ê{§€±¤q›1{Þ „Ý ž—3î@7À”=_ ®av‹lÂÎ'g2Îä}†ØÐ³¢GvÇŽKÐ%Øè,‰ÚÜ‚ÝÓÏ^K![Ž ÖÂV—¤Â’FL7TË“†Sic[ž2ç,gÔÒ†ki¥"O9—MÞç—©Ì0•&ï÷ï»Çiÿ¾}?ávèolžš;`ïÞ¶Tñ»°Ÿ”j¨Ñf6èÏ$q}D ©Ù³™ÈòF©n¢è!•I“3ù ³þœoaZf‹Ù ='ÓR–ÉÁKÛÎ4LÎH·1Ž´æ ÒX‡Bª¤:wiÖ5sö÷ýÜØãã/Þúš$ŽW,iÎ Áæ4$pöpRà4Å£´_¡Gƒ;Ð9{¾5Èì9ƒó­±|k›Fl'‚Ó§‚Óh||PÃF3{%ꚈKd—ˆ+Ä5Ê Í-Ìžá謺¬-eô€RÁ–03b#èPˉjNÁ9 ÙÇc‘32çóT ýf°ÍÚÓ'ø—€¶ìÒ›>{®”Ô´êíÐ?¢eŸvWiØ$ÍÎ°Øøºòîþ_fϲôê±x˜T®Ç¤˜ 8kÃÜcÍž­|C™ng4En0ÒŸLÊl)ùí9%Ì(±æb–ÌžÒ"sžÙP‡Ö*`–S³€–øÌbi–>!¨…±k8 hŒW3¶òõ³9–$k&ìö|»%<Ê%½ï(eVtg%ö9ÜÃìŽÌÁùXƱĉÌ% gÇêiâ#Q—ììéÙ9Òp\9“¶ Î*E8’ßCV ”//CIÌÅZêÌÁü»ÖŒ9}ê3g1°å|üT‚ÐÈyÛ”)×ç`rž÷Xòײã)£?´@k3ÀÌÒ«ª›;ذdæl†*hÎý-Í€¥ÂGrf陵‡ ¤M0*b—_k ›d2æ$™XI-~U˜¹_Änžk!au΢suí¹”ÝŠ^Y|f"Ę9EjX‡b•Þàå·–†Ñ5èÅ°ìš Ês®™ôN˜XB–6,´Ž0[;{ÎVw÷.kpo>1xGÒ¡;£}óÞùHpŒƒóq ÎÑ5ç#½Òê–È9} /1]Ð(4ÈÎAWÒí=Z½¢Á‰¡ÐÆPbÏZZ-@U-Z5ÕxQ*U˜þæ±iºñxÊauJñϵv=µü, ˜r2ÄËû/éÈÓ÷°õfû3þ)£žž÷ y”vèolΜßÙ—µ2‹h…MŒùP⹡*Ï·žë«?/kÏe:ÑEÌ4ž-‡*›ÅFšHL“”ƒöìùä ƒ²e¹1´†$Řò_H%·(ÏL´‚œ=›õ(–R+ib0b³s©”îæõ58P¶Äža ì, 5`K\'Xùk½Ñ-²[Ù‡T6Z·±Øz9‚u›Îù„àÀžáH3=¤¥KLç óÒç zþˆ6::sn 8;{Ö474j!¶þHNÐE/ÔÒÇAÕÈ¢Œ¿rãOàœÆMçÑã> ä-‹Õ¾7µì0eÅû€wºþÞ±“}?˜øl€þÖfI#Ì£³~œ‹!þ«¢7Ò ¤¢A«~s>íÈûCIA)Œ9&½Zšç’0$³*¬.'Ê“‚9“±ÅÞhÏPƒaSUÚЫŠ[$9)Ι-²*&onØ<ºöênJh霕@¡ÛÉ·Gf %æœ$Ë¢®a»y²µ#ùúºåæÐîIJÛkëÆ8Â'7‰9'>‘XkK£;Ÿô+à|t霠Ï4ñ…k´xB§=ñèбß7‘Ѭ„–FHºsœy1ïx°í}Ùa)?‰4zTEÞ%Ç®¬9Âí0<ÙÕòB5žs{O]x3‘7ÓodÏš|—c~¿ú[ÆÀјªYÑž­\ oO2LæLÃJüsaÑTŠÉoS§XŸÒj‚ÇÁV¡ F†ã¬=Çtv#€%'=U~ÔšHʯ–س*`Sô¨ˆÖ.”öÎögÉMiaaXbКC2(G¶–å æQ-Æœ†%fK\Àuöl9z£Ëà¬Á5éQ¨bÐáÉXõbÜ4ïHp”4çM™„" = 8;{6]";HÇϘ>f×4«tÑ™¡ÓAw.ÒF"û^=ËØñ*ã9Š—.'ÛˆØ}Z%0Ge*!™d©µr"JÍžëA[óˆúîÏd»ÆÇ˜s½­z ¡ºF ûKŒúvh€þö–ÁÙàÍhÎáu6YFÍG¡ÒÃ,uÕ%Ÿ5 d|ì—S!yyõÏ÷Zs ãs$õp5ÿi³!rÙà³Qtfϳ¥ 9ÞZ ¨³pÚlŽWŸ“Ü”€¹?âwDv8{Ü%PÞÉ›l–+¼ä¬–V@:ó³×$UÖvz=4̱ž#ölq¯ž•mî†õÒÍ+ÌqÖ¼Τ¨ \ÚØ l <€n1]#Ýæì¯.m´·Ør‹6;iщ°NEs‰ÇBÇF<qmlMÜG㦷2‚xðüë¾döLŞɲ†Êß9ÿ c5sX¢zro‡È êêXM·å]{ØóÞº}LúKÛÀün;ônIZéT íÌuÔ¿£Á™!µ›¬V0(&9r#õp>bñlä\OÖ̹ÜäÁuš‚t.’ž·5–jŽ©&£uƒ0ÂCH÷@%oøä`f›AÃMp¡‹b™žj²ôÕ×C±üfã÷{Û”SI"S–ÌÛíû&ß[ÿjiãÖ£vèÓ¦¸ oÙóh`gÝ7Ëc¡ºçºM¬<ð©Å˜Î7¹ò¦ZHbÔo{ffîàì·U,¶ì¬!%b9Ãc=<¤¸éÅJÖP)ugýËÌY-t&v¸ÄÑ :2PG¢¦––¤—Ø68(¿BrSÂ0ób4[·<]5Æ*ófÏ54ÖôÌô àlºIìùz˜ ·XûŠŽÀŽ›$mDtêìYg;4½&®¢qµó×›FÜDã.Šû`<šx Yv–]Ë&¿ Î"Ì{Xö¢O÷¼¼¯%Í/DÕ6n®Õ8ý›.¬yÌ…Q×Ûò{Àx¯RÝç Û hZi€þÖf–bóûa{fÎSD£‘=@mæÄV‰qšœrª?{‹ãk¥È¹£UYƒ 친ß(Ús Ôp®/ö`Ŧ˜Æ¬Tt±L· ƒÎì9}jŽÇËÏæ3Oñ¦uæì€¬ÂšwŠt@L•°›a,ˆÒ Í–.klCæ9Û3ôžzH³sOe£ëÁ¹Åt’4VŠ=;sæU)†Hß ö[tè(`› ;v½ÙN…N#væ ý²wA\ô‘‹.t×îÜмQôçà ºO é÷n%æ–QìÒŸ7D—<:<‘pãª,e~¾ Ô{Úœ' z_8]Õ{ñtïì}ûkF}h¥ú[ ž¹•WKdžk“c+朠rÎÎ?ŠÖCi­ÒÛ/ËÕZ~Àÿcû+zHš$‡ùiô˜\Øs-kh˜Z Ö%z æI)¹ÜVN7låÒ  5¬÷†Ç:Ëuçè‚ubÎ ¤µ€ƒ³å|ðÃ^åÙ,¯vÆ<ÉË̤%ŽX <÷ˆd šÀÙßg££'l%çãmbçèÌù4b§¢;³–kWŠ\6â2ŠË®"ÜDã6ºýЋ‡`<± ž½ÍÅ¢ˆQœ©âŽ&îXö=]ôž ´`ÈÔx4cÚï7Ù¡àCq°Ë¿ët¡rËt6± Hÿ¾œ‘“er5&7ÇsöœS`úrÛ¦8'Y+Ôz¨gÍ=”E/Rb†ÿ#‚Í@^ÑgS‡X—Œ:¶”lK6í Ù9I_6ž%˜¦= Ö± #¤TCéÓ}bÏw˜»)ÝÃr‹VŽF™,'Õr¦Äš#WDg‹\¹h{ÆuwÁYôcİ †%²¹Û»Z‹ÇH¦Ä#u(¾Ò÷Otý]÷BèaÕûßΟæüÏw>7KrœÞÇ«A9&©ïó;,¸0g&û§ï¬´q`УvèÛlò&Iæÿ«&ã24À<µ·ÂtªÁY{Ng&=t†Ìž‡Ž*ëf9jct©äÚÿ£vÑ£bω™†Ìq›S¿aßѱîŒÒL"£˜Ùós§ºjxÒB2{˜º£¹ûndPž€óHÞð)‰‰y]i:Ñ”¤ŒZwN7V„jËUÄÓâàcDsó¦>!LCKd6Cª:ÎPg œ;°-ØÖ°3çX’2é0Kà,q@~DzÄš´Í±Ù-XEXk\”%iÏñH<¶âFâq-qeΞ/2{¶È¹"w6'ê×06М@sŠÅ ê¡9‚Æ9¬Y¢0wpî"v¿E·/p÷ ·î¸™£ólþöïqÖߢŸÝ¹ùÿ Ÿ1Lª™„76 ¨*Yu/;ýA–«ñ~Ø›ž‰Æ^i#o¯¥=ÛìyÜýcÚ”)ŒöÕiÝc$Cõ C]T¹#Τ%3çéE1½9TX[ºïªKjejõœköœq”ÿR\=ÒÄ`aÎ œó âê(SÉÂAP[1g¯‰s[è e¡Äœ-å‚[çÌyÞ(O%ÎòFËŽ”Vz†æô³h³'Ôô°l’­´°µRQמوÝJ܇ιVäÊĕڢ;Ÿ[äRð Æ1 ;&rBlNQtp¶¸AÍÊAz7ƒ‡-\o±«WtÝÁu7®\µ„óg·+~KŸ_ã…ùöÿ¤9}&œBØ@X¥û³ê‘–~8M˜4¼7ÞÇd-ÝÜßaÕÓ÷Ú·í¶üF™‚ù¡€þåÚ€œŽ.«Æf¡ØÃ6{ò†ÆJIAÚ‰pQOVÔá}y}”µ˜ZƒN~Ïõ©Æµ^È'ˆ2í…zP§c“­3ET.»‹jh Ïrá€9¦1ØÉ'Â*ƒyV‹—>8OÌyK TÀÙ%glº^ ‰Ø* UãLGBk¥ÊY.kl“¤q+qcΜ=œ.O Š Ä} êkmCÔ1ÑNhuB´SbãJÖlP¿öD››Wt±…Ë» è²qp¾j°ë.gÌn:~ÖÏùlÍ? ã˜3BwJó°£izš& ó9Ë÷à‘Æ5·£ÈX²`¼}ºþ†=¿¸orÝ÷K2Ç¡•vèwÚ¿ÿ÷ÿž?û³?c½^óû¿ÿû|÷Ýwo; ˜[6ŒŽzO VXjî>âÚ¹¤VaÕÕÞrqÔàl‹™JÙoºbÏù{¨ö ö^ùèiYE?ªžœL ›SªÅÍš²ÎÜãÑ%ª’ðˆ É)ÔLs„ƒsÈzs§ŠEƒvÆÌĬ¡âÍ&@K‡ûÆ=c¼ =3€ô3Ø‹g5.X*UάŠ)Z‹ç™­‡­WtY„Äž)®¥ÉêŽn!žÜË¥;|Rð—6nä…Á_µ&Ø­Žmh•ôfމœí”¶?%>-h/!ž‹î¼EŸ"|n°ó]4pÑ®{Ú»–³ØóÑZ>ÐóQ‘&¾Özdg/D:¢bùöKÊÿ»ºótÛ¡•ö“èßüÍßäç?ÿùhÛý¯ÿ•¿ø‹¿à»ï¾ã/ÿò/˾ÛÛ[þóý˜øßþm~çþÎpAìÁ}Å@WW×>¼ÍDyªXê¬7qxÞwì=-j¼r£¨À¹°çêTyb°æÝåß4 ÷Ó>‘7,$¯FSŠE)©æÖV%·Z¢èÐá‘=ÈÓ ½¸ŒÖÄ, µþìÌùµå×ñ{Û90/rYCåÊYkWb7÷@<¯/›Ùsä6±è[Á£µD-hm´!ºi)ÂugéqJÜmˆ×F{)â¹hÏþs@Ÿìsƒ.ZÂe¤¹‰l¶=ÕóÁZÎù@䃉+{¢çžÀ½^ˆ¶ó“­¹JÊ$ÊÞW%í¿ñõ\uå=†úU¸8¹÷kß¶·ü`,_ä}@¾|è¹¼÷§Å—Ý¥sûÉô¾öë¿þëüÆoüÿò_jòƒ¢ IDATþK.//ùwÿîß•}§g§ü³öO)ÒÆ¤ Ckú9n#2QKP¿¡ÚÕÁ£ôry#ŸÕ{' ÔŽ>[Õ:•ç’2›ö£¤ü ]g²TTº3Á㜽·¥‰Áá½ß¬ª™Dk]QKHf?1Ùº…bg„^er†%[%€vvÍ9™qPÞc»‹'ODñÙÄÒ"®¨»s<—7LÜKÜÜËxµhEãŽÒζAõ¤`<&>Îi¯ ^Šxígsþ»ï[ô92»Ž,>ªáƒµ|¤çL‘3§Š,í‰NwtvO§G‚=ÑóBl»R×P­å?¡{ä?kú]”Ù³U,ººïŽäªA{#>Êhü’ÔAŸÕgL>/Ÿû»ã†ïŽü¿è84o€~§ýëý¯¿Ü!kš–öV Ìàø¬­^8¾HFŸ›»ÒEü"È—V}sØïœW3g1伌ªÓ9±ZÙžÐþ@UÑ–ÂÞF‚ˆ¹æÓ·ÉÄKõpd ŠæÀÜ¥Ôå®MbÎ-ÙÏ™ó hèÁ¶˜m‘%P6¯p(Û‚:lÞ8(gk%®=¯„– Û&Õ™5ñùAâ!±é;kZÓ˜ƒ³’´¡¬;ÇcâîˆöÆÐuæKˆçFü,šOÐ~oðšË–Ñ5æùXó™‰S‰:æ¶c§‚Ý`ºÅìž G‚½ç=qiÄ…ˆ Ð4ƒ83B²s-7ÎZòÈ?ºö¬OÚÈÓï®7öKyø”÷û$}¬úÐJ;ô/ÓìÍ oáÙÆÝ³´°§×˜=OÚÓï<°™,ŸøHû„A1©TŠQqUß¡,•œA¼W{¡šFl9fvoøwPî\£G ±©Š±ÈYtL@‘¤;³¨¢?{qspöÐR‰YDN;ÜbthHI‰ÒKîðšÀùQâ&Ù(¹Äñ x¶iF›’Æ•Øs ÎêÐÓÝ€®D¼2Ú ¡ çøÙÁ¹¹Ë㔆ïhøÎÚ œ#§ê92hyf« ° LW`טn á›oéÀÖ`+Ö"ºE6a10êØªs2t§K¬Øód$—moÙÇ^©£fÇ¥Ótß{¬zÏçþTÛ Lû*i£^7¦ÕØ^gŠû¶ =Gà\!x‘7¦²†÷+ö¡EÞH}õöš¨1?'$z±€ ÉG ƒ¦9‰ÇÛ7•8èÎϯcñÚr—ú²N¹³Pžt3©ö°ã}ûÞcÕ‡VÚ l³Éë»]lï`õÈð¨Ók¤L(]Þv6"6ÀI#]˜erœ‹)žòù+Ê]è6†„ˆûÞ`/ØûÞiËÎ {ökm ÔF­w›O(j¸8Þ@y–7ppf8S<’7„5Uâfó5dg T MC ”ιàé!úßÍ­=Üò´Uªj¼²ušAô8<¯Ž;Àu~‚Y(嵊î<-D?ƒWÓÞ:³Ï/2z‚-häVÿ*òÆ‘/ý =µèÞÐе¥†"&p^\ÁòÞØD±iÓ(N#|hQ|—@z­Ž`wlõ·ˆï‘}ô}bÐç(\Âüm:t œ˜ûƒ+ƒešôœjå~yb°úùF76€qCÙÊ»Œ×=2Å&^Ý7rÇTº˜¾úsêm‡úǵ‚}ãÑûVæx;ÚÞ%Åe}‚ õÎwÓÊó‘Õñ&özÄ 5ÆZMÔK¾W¬†\R«.³U<—TËõw´Ñx2J¤T©—¬ž´!…ÖE öÒQXèqÍy‡â.tç m™n30ç’n˜À™¡Îì³ä¹…&^$^ ÈZy^¢R´lå“‚¬Ñn‰ñN^!ëb®1{ièB´·05Ž‚8Nà|ÒÂYtpþÐbÇ‘žPwÎ.þ7¢ý‚È÷HŸ}"ê5Whù„Nzt :1t,td4k¡$ÙhÊžÿVáqôEë%›ìÛÇhk°g¼ý]¹ã lú= ?€ôÐý+hˆÆí®d…=JÅžNiå‹úÇ '…jç9§m¯Ñú N@Ç £´¬ Y€fV&{Œ]»º8N+*?cÈ¿­ÊÏ]»é7àûÎÜ+wTàü®îLõÙp~ÓýcÛÒô©ðû%ÜÛÿì˜;VhnÃ7$¦Ôœ| ÔÃùk™£öü°ÑwH¦bu‹7ŠÃž,ù1¸LRNÇJFx5H[LÌÞߥlŒ×Æ-"C,^ŽÃë±Ø•’ZZ=•{^Ré›*uÅêbàâÕ KFMÍ‘–4,Á–H+0÷nÖK‹Á«c™ƒôÍ q„;ÑnupIc#qá$§-œEqÚFVñ‹— Ï(~Ââ'Bü­~A´ÏD;§]Ü£ã-úñ̈'rö¼qmh%´4âLÄà>R/=¼vəՆ?o"åþ*¿ZòÎ(ÒÅ„5¿ ¼Õû}Ç}8×Êtÿ¡€þqíïò{.ãOïõ¨7N¯ ;Ö@ýf$Oµçá”Ó¬Åút¨“ƒÞh&q_ ô(ƒ%3åzb0;éeí»ålû?5è(/‰!&&q4A98k$˜t›˜s›¥kžE˜}Ø¢\°€ô«<•¥g†ÙŒ ÏIl1x'tkؽX¼zźMFxrö|"Ú8‰bŸ±öÏ^¹@ñ‹Ÿ¾‡ø=Æ/ËkÚ£'âÏäàü!óÉœ·sÏ•|èÄ}gôÄ-OëÈMùÅ÷[áÅWŒËF\5ÆM/îÜãµiéú½5DkÊ“ ±Çâ–çþ•×®#v‘&:ãà™†à~Û•âì#yC±­‡GªïUI9€ó/ßý+m?»ïBM^«SYýFoޱæÌf§Ÿ‘Þ[õùP¿Cµ+ö\\òrY­”Œâ§¾èæWIõE_=BçïSWoÉ Ú Õž,–n …9S4mÄ«d:)•.˜to` δ Ù+9Hºuqú%-)ÕPÏ g£Ù‰cÄ¢¥ŒUë),kÁR=­^ >€îÆàÜ^!]A{§l3C'ÂNb’6ZøÙ̸m#—¡å³"ŸCäSÛó9çQ\FãºwMख़Ó5Kb¿D¶@aާzp³Ô¡øBß?Ðw·Øî™UïÅzC09[>:Z–ÈJÛ¿ž¶ÌÂeà|8FíпDßwFÖ¡êùeJ¼ç”š°æÔeJx` Äo?súL[u¶¬/Œ¹LVÖ¦otÅ–kæ\Gî îy)îCòçì‘&‡“ ñ*çÒ=rælÐ)3‘˜bBÌL-FžL ºk[«R …^ ¥ é¶‡™Á¼…Ìc<ä•Ã×su=ƒg°àž£y¹†å3¶:j±MDÇ;IºóiDgâi¹n"çÌœ­á ßñ¹‰\4Æmc<7KºæˆØ¡æ Â³ mu'Þ!½@O·]p÷úó¡ïi‚1o½{),ÙªeߘœnÛ;–øzpÞw¾H—vèÿ/Û[bü•8oÕ˜Ÿ€ô^¿¯åýÙ3éÌåB´,køk’6llkZ{Oï³ò# 79†šsV‰Õµkiª/›9Ðé z…dÖÔFÕ[fDZLs¬Ù¡Ôz zõŶžÝ87—5rö¼Àµç¥`Öì0=%p¾Ç {N“ƒvŽzlкqp޴؉Љà4ÒGîqi‘ EÎùd-ŸùžÈ/Bä¼5û]sBlOPÍ ƒ!ýá{Ð+а=¥{ØÑvÿ•ELé)(ÉVÙ¿£ŽŠÌcÂÞνìù½×ªïË_ÙAé¨Û %íëoùo{jÿá_qÊ‘Ïó¾V]µ†Xzª=Eõ”3{"6¦_0e ’jV2Ë4)±0gKÓs”˜Êke߀s)g˜Ìðªé´8HG³"k8‹nÇús† 霽²½¶A03g›^ˆe`Ï‹F´ÚH ‡Îwþï°Ù Z[5(kÎa¡$m<Í[nCä’È…>Órn‘ÿ§½³‹¢zÿøç™3Ýíömûö÷÷¯P*EB¢F/41Q.¢ˆÄDô /40á%¼F0Ñ%Ð4QRL$QŒwÆÄ Q5 -ü)òZÚnß »ÝvwÎÿbfwgÛ¥PìJóINf:sfži;ógžsÎs.i‡v:Ä!‚MÌ*!a‡!YªìRH–€*FT­‚ î{-:ýq¤?ŽˆAЛ@Ÿ¿‡Òø%Tõ°;s¹7»ŒÜ÷–7EdÖ½}¯ŒZOdoTœ:gazÂ\Ï·ßõyÕ×üómŒ#žË1†¬ôu¹Úcâ!©B¦a´×,oÚ'Èþõ”ƒ–•sIƒ¤+»ÂœñÑ_űíž§œ±ÔmZô†•‹ÂÒ®÷,Ø$S"T0¢Çv’Žƒ$Ü z¢qÓI{Þ³vC•DGë(0ˆxÞ³;ÔÐÅ"Át!q.ÖèíöÁ+spJl,M/®wk‡n:Åá’¶¹„C§ƒÚ!\$Œ¨r´]É0¢JѪQÅh+èzÿ=#H$=Ý“@ztÙ„zƒÌˆÝÅ]ú^ÿ‡]=‚” V1H$(HÏ‹õvU¡6✌@ß’MìˆlÉ{ßæzJ|k޽Y"®”#è›­Å­‘ÒVñ7ú=hå û5ßK㑘˜iøÂZ»‰æG‹³'У“áùEÚÁ…[(ÏÕ/’…ÂIxa̬X^q'§U¸B¸ÂðbÏ6IDŽ!jíÿN‰´bè" ! •Û‚Xä s‰ƒ”j†–¦G;ô`Ñšnœ´çÜ ôI„.F(Ö0IÊq¬ ’v’,C'KBè˜@×Ò‡.îJ@ÄvK·ŠØ„ãþ7bB UX‰nì¾ÊÖX–Û`hyù£QÞÇK*Ä‘ó&òí› qö߉´nkŒ@ÿFß§×SoB'ëªûÌWóñ3Û}a•ÑáÜ¥É~êrxÏ^,$ã5§úâŽrÈñ‰³ß{Ÿ8§ÜnÁ)(dÒ¯yݪSâé #ç$¹€ümƒWäŒ[B øOÔæždõ¨—uRH‰$I’BX¼_@U¿Mm¦žfJ3 P'A§A‚'(I¢ÝIDP"n¨#õÿ±2%Õ£#ÒïŒ+ΣÞÓcûzÄÙcxƒÇâ8sæ ¯¼òJÖ¶eË–aY/¾ø"mmm|ýõ×7tîQÇ©8Áóz\oXEür”® ÙPVÿw«d_C®†Aß‘®æfrN§ÿ.9;J“q³Ó#W4Ú u8:“˜)qE:3äÅ…ã›9\¼ãâe²‚“pCâENlK°Ñ©!,àÎ…(Úgaíb=„Öq°†Ý^{AíºÚÅ‚”+7™~HÍe´¦_4ýZÓ#½Ú¡GluKаu1¥ØRŠ£Ã$ £¤•,ǾRˆÓÉNM²C“¼¨ÐíÐn!b#IŠcI*$UØTŠC¥v¨Mš€¾LRá b$u§Àq§Èò¦ÉÒJ¼%^Fž\[¤½çtbÔ}”ÞæýoÓ‘3ØÂ·>^é‰>·3¢µþ/ðÐ;©Dss3û÷ïçwÞáÛo¿åäÉ“¼öÚk<òÈ#ضMQQáp˜p8œ×kéïïÏ» cËØºÙ¶úûûéïï ³³“?ÿü3o¶n%Œ@ç ÒÐÐÀ´iÓ8þ<Û¶mã¾ûî»Ù—e0î0Œ@ß+V¬ ¬¬Œ‹/òþûïSSS“7[MMMüüóϱyófªªªòf àÍ7ßä§Ÿ~â›o¾É›ööv6nÜH0$²wï^ &ÕF4套^¢¬¬ŒŠŠ Þzë­I=¿Ÿ~øÏ>ûŒD"Á¬Y³Ø¼ysÞl$ žyææÍ›ÇúõëófGkͦM›èíí¥¦¦†­[·æÍÖÅ‹Y½z5wß}7—/_fïÞ½y³u+a 'ȵ'“ŽŽöíÛG À²,ÊÊÊòf àûï¿çÞ{ïÍ« €šššššhll¤ººšÖTãä$ràÀž}öYéííåܹs“n#ÅO<ÁG}DSS‡Λï¾û.Ï=÷\Þí|ùå—œ:u ¥yµuìØ1æÏŸÏ®]»N‡;îtîøFÂñÈgâõØš;w.………ìÞ½›ýû÷³ÿ~–/_ž[K—.å·ß~cçÎ|òÉ'ÿØÆx¶–-[ÆÒ¥Kùý÷ßà˜4{).\¸Àüù󨫫ãüùó̘1cÒíøijjbñâÅyµqäȪ««™={6‘H$¯¶Z[[yøá‡Ù°a/¿ü2gΜaæÌ™y±5oÞ<ž~úiŽ=ŠÖú_‹­OuŒ@ÃÌ™3Ç|ê777ÓÜÜœn@ljjJ7 N¶­sçÎqüøqªªª8qâÄ?¶s5[_|ñ¬Y³†––<ÈSO=•[?þø# ±±ñÛÈEmm-gÏžå±ÇãìÙ³ÔÖÖæÅNŠ;w 'å^ƒFùî»ïèèè`É’%Ìš5+/¶jkkÜû¯¯¯//vöíÛÇÆY¸p!6là?þàÁÌ›½[ƒž ÿvâ¦M›èëë#‰ðÁä= °páÂIû2ÈÅéÓ§yôÑGyþùçX»v-õõõ“j#²råJÊËË)--åí·ßžÔóûùôÓOyã7X°`J)öìÙ“7[)Ž9Â/¿üºuëòf#‹±råJ*++I$|øá‡y³õ×_±}ûvjkkiooçã?& åÍÞ­‚hƒÁ`˜¢˜FBƒÁ`˜¢6 †)ŠhÃ-ËáÇyüñÇYµjK–,apppL .°}ûöœÇ¿úê«Äãñ|_¦ÁpÃ6ܲˆ‹/f÷îÝÌ™3‡_ý•U«V±víZ¶mÛÀîÝ»Y¾|9‘H„-[¶°qãF¦M›F,cáÂ…|þùç7ù·0®ŽhÃ-‹Öš¯¾úŠåË—sôèQöìÙCuu5%%%œ:uŠ‘‘Ž?ÎŒ3¨ªªbÇŽ ³oß>B¡sçÎåСC7û×0®Šém¸e-ZÄúõëihhàï¿ÿ¦¡¡éÓ§§ë8Ž“^ï½÷¸ÿþûyòÉ'(,,äÁ®,µÏIDATÊ•+ÿúu ׋ñ  ·;vì ¸¸˜5kÖ°nÝ:^ýuÊËˉÅb477ÓØØH[[[¶l!sâÄ zÈô05L]L?hÃmÍ¡C‡èèè`Ù²ecömݺ•††êêên• ׯxІۚ 0gΜœû-ZdÄÙ0¥1´Á`0LQŒm0 S#ЃÁ0E1m0 S#ЃÁ0E1m0 S#ЃÁ0E1m0 S#ЃÁ0E1m0 S”ÿFÖZl-ÏIEND®B`‚mpmath-1.0.0/doc/source/plots/gi_c.py000066400000000000000000000001331316273626600174700ustar00rootroot00000000000000# Scorer function Gi(z) in the complex plane cplot(scorergi, [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/hankel1.png000066400000000000000000000642421316273626600202610ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxSeÿÆï. -²A–NP_Ü[_AY‚ ".DÁâb‰,²+ CÙB™ m¡´tÝ¥{¥IšyîßIhiÚfœóþò¹®^MϼszòÍs¾ëñ!¹@;xñâÅ‹Yáaœïñ´/^¼xñb¯§xñâÅ‹—Šñh/^¼x‘)^íÅ‹/2Åk ½xñâE¦x ´/^¼È¯öâÅ‹™â5Ð^¼xñ"S¼Ú‹/^dŠ×@{ñâÅ‹Lñh/^¼x‘)^íÅ‹/2Åk ½xñâE¦x ´/^¼È¯öâÅ‹™â5Ð^¼xñ"S¼Ú‹/^dŠ×@{ñâÅ‹Lñh/^¼x‘)^íÅ‹/2Åk ½xñâE¦x ´/^¼È¯öâÅ‹™âïÉ“gddàË/¿DLL ÂÃíË%I˜1càïï³ÙŒ%K–xP¥/^¼xŽ Û´iƒåË—£I“&vË>ŒÎ;cáÂ…¸ùæ›qøða)ôâÅ‹Ï!KGFFÚ´ièСÒÓÓ=¬È‹/^ÜG]•Ѷm[„……RRRлwo»õ·Ür Ôê¶ÈÍõ@íñÔS%hÖ,þþþÈÌ,À¿ÿ6Ÿ_ 7F§NþhÒ¤Mš4AII ‚ƒÅvî_¦R©@RZª³,)) ;v”…–ê.KMMÅM7Ý$ -ÕY¦×ëѼysYhù_¾_Ìf3Ôj5JKKQVV†˜˜÷½Ê y†B£Ñp̘1lß¾=ÇŽËÅ‹sçΔ$‰£FâøñãùöÛo_³_Ïž=)Idi)™œL†‡“ƒm}L Ù§Y¿> “'Ûï¿d ¹b™—çÒ·W!óçÏwÿI€Ru“ÊÕ®Tݤrµ?ú裞–`‡GGÐAAAX´hQ…ë–.]zÝý||€úõÅO‡öëïº 8|$àâE ^=Û:øê+ 3ðõyØ·O¼v×ÒPªn@¹Ú•ªP¶v9!KtUth;__àÖ[¶mËï üþ;0v,в%àçgoœSS¢"' .‡ÙlvÝÁ]ˆRuÊÕ®TÝ€rµ7lØÐÓìð!yÀ=žRÞxã ¬\¹²ÖÇ!ÂB |ÉÀÀ?ÿƒãÆ=zÔú4^¼xQβ-ÎB‘#h“Éä”ãøøØgRŒª}}åËÇ´Z§œÊŠÖÙtJÕ (W»RuÊÖ.'i 5KŽëãÌ›\¾ ,XL ÙÖ_¸¨Õµ;GZZZíà!”ªP®v¥ê”­]NÈ2Í®*\í'jÐ@¸7ÊC ·GZðÙgÀ;ïØåöÛowŽH7£TÝ€rµ+U7 lírB‘#è‚‚·ŸS£î¸ÈÏ>þX¸?jBdd¤s…¹ ¥ê”«]©ºek—Š4ÐW—†»ƒúõÕ«˜àÕWQ£jvœîÝ»;W˜›Pªn@¹Ú•ªP¶v9¡Hí¬ aM¸óNàÏ?‘#mËôz`Ð àÔ©ª÷WjðD©ºåjWªn@ÙÚå„" ´«‚„5eõj $èÙSø®¯—G­Ôà‰RuÊÕ®TÝ€²µË Eh¹%“¿õ°d Ш°p!päHåÛ*5x¢TÝ€rµ+U7 lírB‘ÚAÂëáë ¼ý6Ì ü÷¿•o«Ôà‰RuÊÕ®TÝ€²µË EhO ¡Y3àý÷í—MŸLžl+xQjðD©ºåjWªn@ÙÚå„" ´'ƒ„Õ¡´T¾|ÿ=н;¡Üà‰RuÊÕ®TÝ€²µË Eh¹ +ㆀèhà¹ç„ûcÖ,åO”ªP®v¥ê”­]Nx+ ]L›6¢ùÒ²e@¿~@Ó¦Ê ž(9è£TíJÕ ([»œPäZnAªðñ…-M›Ú‚'çΉô<;§z%}”ª]©ºek—Š4Ðr :B÷îÝ!IÀðáâgð`×öŸvJú(U»RuÊÖ.'i •$¬­V __`Π];QàòÈ#bö9£ä Rµ+U7 lírB‘Z)AаO~8{2øâ ÷M¹US”ôQªv¥ê”­]Nxƒ„n¦|ð¤Q#`íZûõ’$r¦ë×w³°*PrÐG©Ú•ªP¶v9!óq[Å(-HXžª‚'ß|Ü?ï&A¢ä Rµ+U7 lírB‘ZéAÂÊ$Ñ/.Né­[Ý(¬ ”ôQªv¥ê”­]N(Ò@+=HX¾¾ÀöíÀ—_Š*ÄåË哆§ä Rµ+U7 lírB‘ú!HX¾¾ÀW_»v«V‰j9 ä Rµ+U7 lírÂ$t3ŽOžyÆþï„1í–§ž•ôQªv¥ê”­]N(rý¿$¬­èßèÝX³Æ¢@ÉA¥jWªn@ÙÚå„" ôÿj°2êÕFŒFàõ×ᆱÆÎÅÅâ§<ß~+Jûõ^|Ñ~ݹs¢»ÓàÁÀرÂ×R^wq±ü«j®B©+¥ê”­]N(Ò@ÿ¯ +ÃÇøðC`çN‘;]åÓãéÓÀ}÷7Þ,X`¿~ï^`Ã`Û6ÑÉ©|$2=]å €Å‹3gìuÿ÷¿"Iûž{€×^Ìæj¿w£Ô€•RuÊÖ.'éƒVz°¦þ¹§ž’’„ÍEV?œ<)Œn½zbúuEóézõÄ,·WW½Ì ”•‰õ–},<ü°˜º¼¸():w¶×ݰ!(ú¨~~¶}s~õí ôéÜq‡,J$ksÍ=‰RuÊÖ.'i ÿ? +ãÆ¯¼˜8X·Î¶""xè!ñú¶Û„oÑ¢â4nÝ*?Ap0p×]×,¶êþûo1âÎËrrì7Ú³X¿^übúóW_uì¹¥ ¥ê”­]Nxtx£Õj1dÈŒ;“'O¶.OIIÁ]wÝ…wÞyóæÍ»f¿ÿ7ABsfe¿nÄd½ø6ÞÀ Üß0G¤Þ¶u@Ë–NÍѳÓíヸ‚æ@×®HNòóÅâÃLví‚ú½É0ô|èÝÛæþÖh€—^V¬#o7¢Ô€•RuÊÖ.+Hž¡‡X±bCBBH’cÆŒajj*I2%%…½zõâ°aøqãÆkö1b„;ezI"{ô …™&ýüÈ¢"»ML&òãÅê:uÈÝ»wz³YŸ$W¯¿W­"ÃÃÅëÁƒÅï•+ÉÄëáÃÅï?þ ÿý×~Ùñ Zß‹ÙÏŸüùgšLâmzñ"äf[<:‚ÎÈÈ@›6míÛ·GzzºõuXXþøã,^¼øŸóÿdn >>ÀÓO _î/¿.ˆa9üü€Ÿ~nß[oåáµeçNñ{Ý:àßÅë½{…î¦MÔT±Ì’§}÷Ý@ëÖâµÅ›Ñ¡Щ“x}Å…èŽý¾l/øöÛPû‹Hç²eÀ±cbýöoκ¬lR©+¥ê”­]NxÔ@·mÛ©W>ñ©©©VcmÁ×× 6„Ñh´[ž””„lݺ›7oÄÇÇ[o Ëã•—¥¥¥Ù/ËÌæÌAd‡ÀO >.ζïË/‡#þÙg¡mÑ¢ÒsÜ$""€œœšé‹Œ–.ËÖ¯NŠÄC'OŠe ìÞ½Ï<té"– .öíÖ Å²^ËúöÊÊIJ)SIJÑï@ó`[”ü0±û²Ù¬òò€ÀÀxäF$à…iÝyóÍ82p>l? ­V‹ÜܪßÇÚˆµøúÐ×0w†þ5Ôn»å;—£Ó¼NhÿA{´˜Ñ¿ÿÅnßÑÆ£<Їg>Œ×·¼ŽØó±Ö}ž<ŠèœhDDGxì~IHHÕ½[e»wï––ª–EEEaëÖ­øùçŸQRR9áCò €{ˆ™Ï„“§¸òš»%k—ô`°¦ÈÍ‘ïññ"²Öª©V»ôTj5ùßÿŠ˜\“&d^yè¹p¡X?{6©R¹TB¥H’Äâ²b»eC7%¦Ãúy9Òº®ôÀ!þqÑ·3—¼´ŽIÍ4›ÉßwŸf³d¦Þ¤·ûû©ÕO±ÁÌÄt°Û¢nvÛïOÚÏ™Gf2*+Š’ ¢ ’I¢*REU„Šêsj–¥•Ùë5˜i6˜]rîÿuäf[ù|¦¸ á?Ÿ}H´Íš!(.NTú¹ˆà`௿Dªô™3¢uiŸ>"؈ªÄê¢ÕjT#=%,>½‡ÓãPÊ!ÜÖô6„޵®pç4l€»[Ü.ͻඦ·Y×Õ¿!Ãë=>îíÇ4\šs e0kÌèv¨<Ð@ìk$"ºGX·môX#Ü»ÿ^ëß©_§"õ[Ûñ ôE×]]qã£"ž$R¿NE@³ÔiUõn©‡úw;úžÚ^s/EhÅUÞ¿¨0ùôS¤=þ8nwãߌ"ù#)Idf¼û®hÁQSªS¦6¨a0иžp€ûúøâ‡°Rœ__tjÜ $­.~·÷C¿ÛûU|°ûî“{öóçC†à^ƒ¸¤:­„Ó§|P§ŽŽUç–Zšjw˜˜øvîŒÛ›Ü&üE#V¯£»½‡#q¤y}èOiœV†mÚøoæ§·°ø÷ð\÷a(}ðàJâJÞAhö\}«ó_ÒJH¿œŽ›ëߌ€@É–áâ胦ýš>€¤—®1°þüQ¯S=Hz ’NB@Óë:s©)ÓS¬7~¦1îÞes­åmÎCé©RÝ„ໂÜ%¾uªŸKà­$tôº8œ‹FCNŸNææ^»ÜÅ äŽâõŠäöíöëwì 'L9ÎΦ¸¬˜KN/áókŸgà7œz`ªÝú±¹ûÂnªtÎó­Hk×ÑtO7rÛ6]¢JEjµ"7Û) â÷Þ½dv¶¸pï¼#–ÍšEž;G’Ô|›…û ™;b%Ö¿ñSg¥2¡ÖŸÜ‡¿äª3«¬®œ»ýȽ·ÏfÒ—IÌ´˜<^$†¿û.%“D)6–,,tÒ›˜4&f­ÈbÊŒ&¾—ÈŒvëÏ;o§YcsÇ™´&æ¬Ï¹Æ¥ò¿„Ül‹" ô /¼ài ×"Iä¦Md»vÂù;vl…›EDD8ýÔYP ^¿þ:™•%lIyC¬×“:i¯¼" Yu¨HwygZqšÕð4ú¾§˜R“·R=† ±¿ÜÛÌÌ䯿’{öˆÕk×V®½R¢£ÉÌLñÿ6L,ûãa¤IJ”Œç©{NYÙÑfGHN¬—$‡3~d<Óç¤3g>õÉE¼Tx‰ßïù’÷-îALýý«Ø~ÉR­fÁåKä矋S ,eeäÔ+_xQQÕÿçUuŒšY+²xqâEF?M³Þv©N©¬ïõxûã×÷ò¸â>w^íävI’.ˆj?€0€¼Ré._&9+‹,)©\b§NBâ AÕ?Y2óXÚ1NÚ7‰·Í¿»/Ø—.~ä{îOÚOƒÉPƒwQ$‰üçQqyǤÉļ<±øÂò£Äf‡W25›…ñ#ÉO?¿÷ï·E 'O¦>GÇŒYq<ÿÊi¿ù8Ó~L³;DôóÑ ïÎØÁ±Lù.…’ÉñÀ\B~Í’Í^(¸@¿¯üøôê§¹êÌ*–nZ'V„‡“óç‹×Ç“F#™Ÿ/“H[ɧ‹Ñ^Ð2a\Ãïg¨O(/νH’ŒË‹#IÆ~Ëð/ÃYr¼„Ç“Ž“$5 “‹’IŠ/qR|±Ë5€)7Û¢H=tèPOK¨˜´Ž´*CãDWG|¼(¿&É}ûl£èë‘›K>÷œxš®†kή±Ë¶øæÐ7Õí $I|3•£t÷Q\*¢ÙL¾ø¢†&“¨”¿|™dl¬Ø(*Šœ9S¼?žÆôþ}™æCǬÇQǨíùßK¼êÔÎ34».ìbó›[¯ï”ÝåžB,Fxófñ{Íòï¿Åë×_× 7WŒþk‰å=E\£àK…—¸3q'Iò­mo‘$£¢ùóîŸI’#¶Œ Ù`fhí:ýÙòOJ’ĸ¼8Î8<ƒ$9|‹¨ûO)Já´Ði$É9ÇçÐd6±DW“'I’ùš|p¹hÏ÷‚¬’ÀÆ×¦CLœ<ùäuwuÆ\m99¢*üÖ[C‡D–ÆOT\”r5Íš‰Üè;î¸þvùÚ|Ì?9¥úR«î—n ÏvzsŸ™‹”RìŠ><Šhe¡¨õ‡¾„Æ=;ƒ‹cô¨døÊð×ÈÈ˰q#ô‘±¢§µÑˆœ598}l8޶ÆÙ ®ÓÅz¨ ;‚ÐaZtÝѽ {£ó¼ÎWÚy¹ÏÏtz™2±{èn ¿g8jh‹xÒ×[â¶ÀðÒ bÁ‹/Šþ³о½¸k׊~Þ€­£`ðJyý¦ó›@IEI˜yt&à·S¿Á`6 ( S6„Y2£YëfhØLt•|¨ÝC Ñi{'àx,ì^£[«nÈý3O| eIe((+@çÆâ:FfGÂÏ× ù 8™qðÞ®÷`¦™ªLü“ø []ó «d¨À´G¿åâãÉÇ·51:{Öí22È×^Oèµh˜LÂÕú×_âïS™§øÒú—èÿµ?1\µ¢ÖzÝN~>9r$éãcs9IÓÈâ£E<:æ,×¼wºyæ¢L†"”ÇZcÌ«1TEx(Iü:ìOÚOL[üØ‚_†~É˪Ë×n"nŠ„«›«V]ãß9œr˜:£ŽÚNÜ;‘$9ùßÉL-N¥ÁdàÇ{>&IîLÜÉ¢²"J’duSÔ”ÈÞ‘ÖÑux—p …,S%FüÉEÉ<Ÿ+ë~#ó¿ÎÿÅM±›H’Ãþñ€³ÙgšJR¸OjƒIk¢Y'\LêX •ÛZ‘Ú£AÂO?ú;î°µl«µ ž?N®_/^‡‡ÛâQµáàAaÇ||Èyól† ñ¬Æ¿saw­Ë’ËX|¤øšëŸ]šÍ¨üö Iòד¿2,-Œ$9x“h©ŸÏô’ôëê1h(_ ¿ŠàföÚlæmÏË®<½Ú xô"–•‘¿ýfKÁrÓ)‹ŠÄhùý÷ÉÒÒÚ3£$ƒßùžw-¸‹¿­Kfݺâ{gËV3·Ço·«œS ’DÓ†-,ØUÀ‚ ëly†QQŒÇCuñÌÃ'™öÄb3‹¸|9y슻yþ|e´>M.Jæçû?·=j Zþqæ–méo‡R‘’ÄuÇsKÜòÓO9fýPÒlfÊ{ßïÖ{¸<Æb£Ýß'^d(Byâ–LžžLC^åºrÔ9Ô›ô,.+æœãsH’“öMbjq*Mf¿;üu™:æžÏ¥Y23yZ2I²ð@!/ÿ.ž:Î;OI’¨‰×0o‹0Ж§&¯vn J’¨ÞµËi‡¬I0)Idi8ëó´ÂÙa³©ŽUsÎÐ9TéTŒ˨KQ4˜ógI^÷iÉk @¿~ý\’ôtòÉ'Ň¹m[‘HìâââÞ63“ܺU¼>q±,«‘$‰aiav7dB~[ýÔŠŸìýÄê¨x_Ûëêèv5†sBr¨Þ›(/JJÈ×^ã‰Î'x¤Á!Æô‹bÖ [V‡ö´4‘cþþdr2F‘Z¬Õ’ýú‰/²2×ôTG¯ùøãùÂÚ¬_¸;wòtæiæªs+ßI’Èo®dáìÚeKrÒcDMîí-³VÚgãì-`ì Xæï̧d´i+ØU@s™™†|Nj̚¤¯’Xp¶€’$qá,ÑxfkÄV®=+âCbBªÔà5ÐNÀåQ’Èûï·ùšOríù*‘ I"ÖuéRõ÷O)JáôÐéì8·#1<šzÔn}ùüÛŠ8ž|àšÛU”F—2â†úŠ`ÓÅÿ’¿ß$ÏœaÙ%݇øºìÙ#œîåP©H‹]ùðCë\VH’D£ÙHI’8æï1$…;cÉé%ŒË‹ãû»Þ·û2..+f¶Šoö¯¿•®%%bT-N䪷P-ηU6mq”±ƒEŠdæ’LÁÏÔïEÍ©ÔD³Áþ¾ÞŸ´Ÿ*Š*Êš"¸5n«5wûj¼Ú ¸%HFNœh+dpŽÛJKÉ7߃vƒ¡fŸ•E§YGT½—õæá”ÃÕÚÜ8ñýÔ¼¹ˆµ¹;H¨ËÐñò²Ë4ªlþJ}Ž^d[Ôߟ—O°`O-ýä:8¬}Ê2:šz½3"l™ÒËÝ”×m)‘ÊŠâG IN Æ\u.%Iªô ÷‹ý_°þŒúütß§ÌQç\ÿ„Û·‹¨1IŽ# bœ ½¦¨N©hÒ˜xᣠ¿'œGaü¨xJ’D}Žžêx5%³cŽR})/ˆÂ𡛇RoÒ3GcmI`ñß{ ´pÉEܶ,.®z;“'b;Æ"Ç¿L,™!Îmà$ñíûù~„ðh'àÔ ¡J%>…€¶º˜ëO$IH8v¬ÒMì‰ aÛ_ÚZGÊë¢×9I¥MÏO?‰&K®j“´ÌÙ`?ªËÛšÇP„òäm'yრ,=™K.[&VnÜ([W‡´›Läœ9dp°¸fÏ&ióCOœh³SWÍÝët$I¢Ö ¥Z­fÿ ýi2›˜T˜Ä±×N ì%ü`ײyÈ5ç©’qãÄ”$*e¤º÷Ë套©K×Q2JŒ"ܪÓ*–¥Vþ›0&ÁúE~(è5 5»GU:ÿ:/žÄ¼Ú 8-H¨V“·Ý&>7Ýdë²ãB* žìÝ+l„^_ùHíêÄü‰;ˆéàc<Æ?ÎüÁR½òï*Á¢Ûÿ´ŸÒxâÖÖ—>Ç€5iLÔ^ÒŠ/Τ$±pÌ29¹Æç«VÀ*5U<:\•dn)?|Ø6¸t6ßrrQ2?Üý!ãââ¸=~;SŠRœrü« ò[ÛÞâ¸ã˜UšUÉå˜9Sü$Itò«‚ª®¹E‹¥t¾øh13æ‹\äòôª¢ôl)ãGÇóôNÛ½?“Úäx<¢^íœz?þ˜|ñÅš¥H8‘½{EŽóÕ˜Ì&‹ƒ6 bðwÁÖÊ+R| õáu”iÓD£#®yI’¨‰ÓXƒ9.Ny¯á]Ãyñ“‹Ô]Ö•ßI|””ýû‹o-­Ö³A«­[E–ƒ$qõjñÞÕjròdçÞbX~ø{.ŠAÂGpiáŒJ§bãY‰é`ÐwAüê`ß:-»v‘‹‹×ë×W«ZÊRµ§IÐ0å;qß&̲´2JfÉ®s^u¹ÚôEÃÚ†1eF õ¹Žg`ß* IDATy ´¨UðêÀ‡ÑèÖÿÕÁ“;E‡K²âG穦Z] f6à® ÎËÉ®T©È›o}úTþ&IßMäñöÇEBçvëu™:ê2*ù`Ÿ>mk`tò¤Sªrj°*+#[¶oúÉ'É‹"дp¡H}$…ç¥6·Ð¸ã¨Ò©¨1høý‘ï£Ûò5ùœ¸w"ë~[—ìúÀ±ŒFñSP š4‘¢ùTš}—¿òÚ ù"?eF U‘"Øyñcq]õ%tþu[öÇ¡º‡6Ò^íj|Ï#ï¼Ó-® GQ«É#„*ÐpÕ™Uv7mtv4ŸZý×F¯­uïgMÞwŸ°Wï¼#F.¥Q¥Ö^,½NßwšIS“ª~ÜÜ·Œ¹’“ýõ×nk¡éGŽˆtK€ìÙ“”$«A>~ÜVä’í¸¡ÖuÖ4¹Ã)‡¹-~› „;FzIú5eÞÛã·Óh¾NàÍ`åä¤èË]T$FÓWrMjõYÂ(Æ Œ¡d’¨K™9îB“ á….0öµX»åWËã5ÐN FAÂåËÉzõćløpç‹rKð$/üâ ñ44õ(ü9Àm?yÚcú*£|ÐG­&'Ö1ê…s<Úä(Cʸ7ì}Žêsj;ßr¥¤¦Š‹PT$&ÕuN pêtÂù|Âþi ?_d¸hµäK/U]íy¡à‚µÐw‡¿cviv¥ÛzªzÓÒåÖù·rcìÆër%I<õ䯿R¿v%³Ä‚°‹L—@’ÌےDzùÌÂr~èyžº÷³×d[ó¦-q¹èÿíFµZ1!ŸÁ|ÿ=°b…k„9@ZZŒfš6þó`ÿ~ *; ›ÎoBP@ÆÞ7 ë6ô˜¾«¡‰P…«pbÚ èÒtĤ´ßÎ €j_!L¥&4ìÓõî½Án¿à.Á¨Óü:3¹Zˆˆ~þhÔX¶ÌoÁ)-^|ù%г§mY~>šü4A’™™ÀçŸÀÔ©@a¡ýîÇÓ#S•‰Ž7vÄú˜õ0Kf|Þçs´¨ßµºk@Ó ¦xüæÇ‘XˆW7¾ŠåQË+ߨÇèÑÆB#о= ÊîEÁÒäþ6 lhÚ¯)궯ë¾7ph"Ê’Ê >£Fܰ8œîzŸFÌšåie•@Ž kô-!Bð¢DWµÑkùrÈË šÚŠgÎÙF—Ù¥Ù ‰ ±kv#²×eópýÃV_Þå¥ö§ªMZ È»î"-ªÆÁ—.m1IáˆW"cƈ'²ví¬“AæäØf§:~œüût%Iâ¥ÂK|w‡¨Ò“Ûÿ¹2ö]ÚÇÖ½p]ך©T¸¢âÞˆ£¡Ð@³Î̬v‹V f³h"#“ªD ’$±(´ˆÑÏG3ñ½D†…‰ªYI’ßZ‘Ú¡ áÆòézCrЦA"Ø7¬ÿ]}N]åiI$E«Í ™üu2Ïõ?g_&|¬˜‡ƒóÌSgøÏ»ÿPWñuϲNa«>û¬Š4¼³gÅä{ï9ùÝTŒË‚m–¹ÆÒ××®.>«¸ýú‘óÂ~ãŸg·³¨ˆÖJ6G‘c‹×µÑkùÊúWx>óà¤Ö4%F´±òÕ“ž:JMukw²¹4,ÎY7ãêV©©Å©Ü|^Læº |3v†ˆAB` ùí·ÖVµ&»¤Ñ8ÔãI-^%Ibì XJf‰eieÖ8DQYcsíÓ×ÂÒ¬լ•j·XÆŸ~²ÍHä‚õÅ‹¶ñ€…}ûXåàÈk €ÝE¼Úái085‡öêÖßZGÉ=÷°Û¶¢Ñ„úŠÇ@¥b­s˒˘¿3ŸésÒ­³DXÈZ•eç¦HûÙ¾h 4ªôšY,ÜÁÆäÈ73ýCÇ{8(‰ä¢d^V]¦$Iðç[0Í`Å6–ij~úÉn¿/¾Oú¤ˆ¥ÉCžÉ_'“¤è½}îúå×EeE¼ñûÙüÇæœ{b.uÆ** -NàØXQÍKŠan-:è‘dJŠðpúù‘Ï?_ýý½Ú Xƒ„ d·nN-°ošüU2ãÞŠcê÷©ÌÛ’çpðÎí$&Šà_a!¥/¿äŒâ_tçµɆ?ÎüaãêÙjªd÷në49;vˆ'¬²2rüxW(uœÜ¹4iL4©M`éÔO™Uœaç^PéTÜxz#çý;“6Oâºöm8,ÀV´âMïÝĶãÛ2«À–þ“[˜Ë¥¿/åá͇™¹/Ó.«$ó¶å1ij/|xqoÅÙõ¡Õ&iÖ6ŒGa¨o(ç¶·V/“dì XîÂ.«.ßJQŸ¥ç¹—Ï1q|"Sf¤°p¿}ƒ!OãpÀêÏ?m½4®°aƒggfqV°möñÙÌQçÐ,™­–V‹²2Ñ5¹^™¢ñUù.ªkÖØŒŽ;‚„–ÞËE¡ELýA|þÌeµÿò/¯=¥(…=÷à–¸-U}³ÙÚê•û÷“+WV¸Yn®ðŒôêåÜ©Éäf =ZI˜‘‘6mÚÚ·oôôôk–wèÐÁºÜ‚F§ÃâïcOÀN›ù(Î59¤³IÖõ¹rÑô¾¦èúDW<ûʳPORÛí?xÇ`¬›»kæ¯Áª_WÁ7ËvnP߀N£:ÁüЉO&"í;ûj®ümùHý&s2½<Æ|£uo_è3ô ‰ÀVxâE?Ô-W@ÕjT+ÏÆÝ{îÆÎýuZÚ*íê´¬ƒ.›» óüÎh?¹=n|ìÆš\R—QeUÛºuÀÅ‹À«¯?l·êµ×€Žm%%.Y µ­ÈÛ¿ $ñ­/`~ø|øúøâƒ>¨þêÖ~ÿèÐøë/ €Ä€@ß¾@T”øñõ22€äd×TJF Úx- èß"hb4hôH#´"ª}ëÖÞ,”¿ækÏ­EDVú‡ôGÏß{âlöÙÊwôõ>üP¼ Ôj`Æ ë&óæ7ß, PÏœbck-W¶xÔ@·mÛ©©©€ÔÔT«Q.¿<%%mÛ¶µÛ¯´´Qª8Ã1ô;ˆ²úe¸”t Z­¸éÒÒÒPÚ¶ 7% ´S)î¾÷nDFFâããÑå.hôH#dÿ'7>u#²ó²­ûF_ŠF³Í ~^ƒ Aïvû6Ô·¯¼æ͸gß=HR%Y÷ÉŽÁ懱s\3ltn›Ó %%¶}{¢Ïä>Hiš‚à.ÁHLJ´î[þr\fù}Ív*âãâ íÛ˜9S,ëÕ«Òã©ÕZ  tí‰èh÷¼òú«³oViâããq1ç"¶'l‡*E…¯ùºvú:t€6<øøcD¾ý6àãcÝî¶Û€þý#a0#FÄ£eËvN½.ê"5L*¢ÎD!irâbâÐt|SøÕ÷Cdd$o tÉýòA÷°sÈNÜn¼g²Ï  ­À±ã  - ¬\‰È–-ŲiÓP'@“ <8II@@@í4GEEaëÖ­øùçŸQâΑƒ#ÐÃ>è!C†pܸqœ4i/^Ì;wR’$Ž5ŠãǯÐí–9 kˆ¥YNLLÅî39V‡9B¥º·nµ¹4ðYªÕ¢© ’*y‚u*5¹æ’$qàÆÌ×äÓh62¹(ÙùÂÊST$®£NÇÌL‘*Á©SkŸéa6˜Eoîx /|$bÅG‹­m@]AE×\’$žÉ²77191×õW«Tä³Ì"Îzæ ùùç4ÉÜM‡\2EÜ\ŠÌâÛE´ R ãó¿P5V%‡Y{#3$¤ZU’$êVüüÈï¾s‘¾Rf,ㇻ?$IÆåÅ1â²›¾P-@Þ~»µgLI‰˜Ç–÷TùxFuÈ\œÉ‚½Âל¹$Ó¥T—§W?MLûoèÏs9ç¬ËÕj1qK“&â²Ì™C‘¦¡V‹QPÿþÂùœ“Cfd8MÜl‹" ´Sç$t¶ÀŽh7Qr©«.VÝf³°°âCR‹ÔŒ3gœà© G®y¡¶‡RD¤nÞ‰yŒÉ©¡5¬)IIäÓOÛúz¤¤Xu›L"M£qÆÌÌ*Žu…KŸ^¢Qe¤¹ÌÌÔY©.-Ž\sI’¸øôb¶ù¥ 1l2«‰µ‘Ô¿ÿÚ.ň¶±IQì’x%Åõý÷E:£$‰Èa-ñh'à´9 Ⱥu"§µª€äPV¬º÷í³ÍIçä/›Í›­hNåz×Ü,™©Ö«i–Ì|%ä•k×»I"×®µÎP^·eöš/¿´ÍYYÑ@X’$¦ý(Š@ŠÃŠ™µÒ3 ŠªsŸ—ËøÓ‘9üåÈoÖe’D~ù•ÞÒÿ¿rv]™ahÇò×_ÅëZ ¼Ú Èí"Z>(G:e†&yRP`s†.\èØ¤„Õ<¼%­ý“OÜ—3R”‘ÛF’$³J³ª®€óï¿Oþþ;i2Y¿ÀNŸ¶oïj(4Xç~LššÄÒ(e܈ƒèßÒ®­ _œ]ëÊ!›‡0*ËÎü!FGEEä¨Q5Ö#7Û¢H-§ ¡$‰ Zõ;+6H¸w/ùßÿ’…®ËÏÞ¾ÝÖoôhç·¢kq9Â:ÍÔÚèµTéäÓšÖBDD„x|÷ñåÞ{­}+&O1’d=žª§d–x®ÿ9šËÌ4ëÌ×L¢êíU Ñ:Ù:Ì dì$æ'²É¬&Ö¢±q;Æ9vâ¿ÿ&O] :~òIµ}h^íäv5a\þ'),£7R4:P_¿'CmIJ"}ôÚF7Î"1?‘ùš|šÌ&Þ4˜“ë2œÆÉ“äƒÚn“4ªŒ”$‰K§k¹ÿ%á]?»Œ&L+L+aÈòÙg+àh þzòWÞ<çf®ŒªfºOR’ð‘âQ£J_‰@n¶E‘Z.AÂÈHe¯Ž+VQABËècêTj®ªæt'YYµkN¨Ñhh–Ä{IÈOàè¿ÅðܲL®ØÝ+’DnÜHéJjYæÂLæoÏ£±PÅüùŒ‰‘8a‚ØôìY—VÉÕ÷¹Ù,ŠL'O¶ßNïÀ´•F³Ñn[µ^Í‹{pÞ‰yTë¯óF-Ãñ7߯Dsœë 7ýÿcNBÑ­ðÜs@t´ãûxjž¹jc2C†*ðÕWHkÖÌ#2HàÍ7.]€Í›kvŒ´´4¬:» 'ü[›ÜŠ‘ÝF‚$|}ä}ûÛÝ+>>À€Hú&Æ"#ZŽl ý®ÓðïÔMÎ,A»Õ˜:UüÛ¦MêÔJK²2Ïkß±C|VfÎ.\°mWÇi+ý}ýáïëoý{諒ˆÈŠÀû»ßG»9í°þÜúŠwôñ¿—-¯W¯žy$1¤÷Z z~RÕµkS§€^½€p|¿Ûo¿Ýu¢œÅ¹s€¿?0}:pìàãƒÛï¸Ã#RŒFQÖ›Ÿ Œ)Œ¶£„Ä„ Eûxýî×q6G”ßÓýð±|xeŒå^!‰Ô™¢²¶Åë-¿%¾¾hÝ2(.>ÿ7tí€F©g¡ÓS¦ˆÉk¿ùFTßÂ&yB;>,1½zÿþ têT»c÷¿£?ÎŒ9ƒ¡]‡¢DW‚Ö7´¾þ–ÿõ×_íÚGŽˆ› “H«Õ•ïëi¨@‡‚„¥¥Â½QÝb&E ?ûŒÜ²Ån‘§uïÙ#ú Y2üª"¥(…$y>÷<Ϋ^·C¹pòÐIìùu)ߥØMÄ`%1Q´4íÔÉVÆJñD¿|¹x}ð íµ«kT$Iä0Ÿ>m»_òòļÀ®8wFI†]áMRa{.íÉ%§—Tø•$ás)+îÒêC“›‹C‘ÚÓqͧg™Éƒ Ä7ÙìpPÅÙÏÅ`6‹EÌ::‹;ÅLÛ–Y>”‚>KO]¦Ž’$1敚Ô&k¹v¥\}C.[&‚d……œ:Uø¤KK]×ÖÔâc¶Ì8çÄíÕâ§c?Y3?‚¿ ¶ÎtS)–êÊ„¶ž¶-W£H‡Édòèù[·¦N­Ù¾–f-²Âl¿ûö¾úJt»í6»Mä »Q#ÀÏÏö÷êÕâqyÞ<á{€Ïþý źbLè5¼â ñ5)ã67•˜@’ABÊô”••¡ÓœNð ðo€ïõÝ2åÛ&Jðí·â‘¾}{|-MAp#^~YlòÞ{¶kæ Ö®>æèhàþû__ÏÜ/zMÀÑ7â{ßÜÛò^ë:’(*+²ßÁrC]iÆ$;¨À´§* «*ãvYVþò ùÏ?âu%£49êž>]”d»§¶0#C4ß™r¾ÝvrÔ^ËÈ8kEsþÌ!Iì-àùóçk~ДrìX2 @4M.÷Í˳M¹bå@ÈÕ v–•‰Y³÷î§’Ã5·NAv…Ã)‡øM _Ûøÿ:ÿW…³àxGÐNÀSABIV­Ö¬©ù1d$LIt:àƒ€K—IJJFi²Ò}…iÓ€ð=~0݇³šÝ¸«ù]ÿx»í䨽)N%‡kd÷wrq2ý‚—ÿ|Ïoô²j@Ž =$,.¶¹«jÓàÇÓÁ6;N•$£ÊJ÷,-A‹´ÅÌÉ51Seë"tê”­/е“´Nʪ‰Ó0sɵ\¢»¸˜ M›Rš6¤˜&ÊÒsè½÷ĦWϽœšJ¶nm«ü{çÊO#×k®1h¸)v_Ûø‹ÊŠ®Y/·´" ´'.bX˜è(VÓ–²âÒ%ÛT÷ îi)çDÌ’™ Â.½÷Ú­ÏÉ!6$;v±2ƒŒŠ*#ó¶‹ÈfÚ/iÖ Z݆$‰©¤^yEô{6Œ¤íˆ‘øË/âõÇ‹Îyf³ÐJÙ£‡hb(Sû[käf ý«cËw I‘ùq£-žVS´Z-‚‚‚ªÞЕ´k'‚mÚ·ÞêÐ.rÐMYê,´¾¡5ŠuÅ8”rwxw5¿Ën;½xè!Q 1r$pì˜Ë–yV»!ÛÉ !°m rVç ÑÃÐæ½6€_åû¸äšûø=&~22D¢9D\îœøî¨_Ñ…ñï¶çŒ'Ÿâãqã€åË…K¤*äp¿ü/ H´»+ W®&M4 0°vÇòh%¡Ng›ïmÙ2à–[ÞU&É„ww¾‹] &õž„Û>XávmÛÿü?.*=ŸÞ^»;¿ßEFÐ,²IR¦¥ÀÇÇæv‚o=_øøû\73Ãå×¼M[Á”–‚ÇÃgÓ&Üýí@¬¾ø¶mÒÓAƒÄí3{¶Øtÿ~àzòäp¿8DAð矢 KŽÐëâpˆ˜Ï÷7¨–<Ù}û\ÓtÙ…¨õjN F’ŒÍe|^Ís´EÁËÏ?»öÿiÉÌÈ^—ͬ?DŽmQh‘¬f3±`‚Ðj9ãþ-ÜÝtÏ øÚ®¿yÁÌELý#Α#ŒÔjE/­/¾ë““¯õ[Ë–’îéAéJ§À´>ƒIÊÏÅ¡HíÎ áìÙäÎ;žÇ‚'#GÖÊqè Ý¥úRFgG“$¿=ô-ÏçÖ,í¬¼öß~³uïlÚÔæŠw6']¤.CGÉ,ñòÒË5:†+¯yNލKzè!òÕWí×i¯Í>tébš4"Ëʸs§­ètð`ᯎ‰!-ÚSR\öªÆd"££ÉeËh9–EÛÅTb¿]™@ݲ#ÕMÛ‘£Fñﱓôh§à΋¨ÑóæU=SŠl±Ì+¥Õ*jä,Iõ&=ûmèÇ]‰SGž±±"y¥Nòr9Ûi2Õ~’˜äiÉ”$‰ÚKZf.rpn*7c6“-Zز1n»ÍÁûûèQòÛoÉ'Ÿ$yÄn•´i3/wîCŽÍc~føFa™¯Ä jk)zæŠÅ1œTþm6“—/³,ô8%³ÄÂÂ+õ ›6ÙÞ$À£‰äï‘#Åÿ¹èBC6–/%¯vîj7úçŸÎ v{»Ñ­[É?¬õaÜ©;£$ƒíþˆ$y±àb…éPÕ¡2íWÏ=°s'Ù H;uÊqãaÒ˜˜»Q̇—ñ[†uf“ÚâŒk^Z*¦cÛ¶Í~ù”)b¢–°°É«w?ÞÎmßE“IL¾C³™çîÈÂÑ“(Íú?=&JðüñŠ!ÍÉáìÓI•Šÿl(e~®™’$tS§cø¼0ª¶î§ô÷?<¶PTŠ-[&>›ú×GÒèh=oqJ!óóÉ> ™šÊ íe黓hX¿‘k~_˜•g–z ´pW%ááÃâíL·¡Û*¬ -•hÉɵ>œ;t§¥0,-Œ$9ûølæªk? (é¸ö9sÈ@Ûg;w^{}–žÚKbè;$–†%“ä´Ñ~m®yYùØc¶÷sÿýN‘T9&“HÙܾüñGÆ?n[—–fg¼Óz )fv/( õ£ßµ[ùÈb¤{õ¾ÇnCò/¿îóØwXR·yß}¼Ø}/ŸFØ2†V[½Ï¯×@;w\ÄK—\~ ×¢R ç¢&0š,3–QgÔñ¥õ/ytú©‚rþ|²Oû§§¬,1óÇ‚äÅ(͉†|Ï_‚ú\=Í÷ç“Kyîœør9}Ú~Ým·‰)Ä^]Ì©ê1t:òÄ Ñelþ|[[+˜gý@ãý½È;冷ÓÔÅ\ É$&Ä`I Ÿ~ÆaoÐ<öžÿPLĘ•u%îm6;5ßk €«ƒ„&“˜ùáJ‘•Sqy°-)I„Õ%É©!uWêŽÎŽæ‡»…&WëôLgh_¾œôD€|¹\9@ŒÔŠS2KÌËs~;Í«uëtö爈 ›7· 0'N´ß?=ÝsYr­$¬ ¹hEª4iÒÄ¥Ç÷õf̨}QJEtïÞÝùµ Ó‰¼ÖNDe›ì»B÷ñôã0I&ôiß÷¶¸:“Í‚?s‹3´Üüo2·Æ?§š¢M‡l@ÇD_˜®]ƒ¸çQÔôÝw¶}sr­hÖL4O ´†¢Ç‹Ñä剿۵³é^¿زˆ‰ENr«Vb}Ë–@a!л7ðøãÀÿk¯¹M›Z¿íãÒûüÿTàÚ•AB•JTÁnØàšã»,ئӉZt'ø›+™º/«.ScÐPgÔqÀŸìæ›sµÕžôE%³D]ºŽ¿e\³¾´”üÏlþÞÇ·_?mš•aa¶ueeöë^|Ñ^÷ĉ¶u­[Û»1$I¾,EͽY¹ ½•„Wqà ¢°èÁŠ‹ÔjK*¬.]òßC,àLݪ L90þXÿÊz»ùæ\AM´K: 9ërõ:×CÑÞ"¶ ÄMïÜtͶõëáábÀ¸8ÑŸºû ÅÅÅ(--Åï¿ÿŽzåœsݺuÃ<???üúë¯vû¹¢Ý¨$±±@D0q¢ÓoÅ)m33E;±áÃuëÜ∬‰îŧ£Kó.èÝ®7‚‚]¤¬j®§=}V:š¾ÜŸiŒìL‘™Ñ gwÊ«%·ìT²v9Q«tPPV¯^mý{þüùÖåU‘’’‚’’,Z´/¼ð6n´Ÿ~¦Aƒ0™LhÖìÚ´+W % ?ÞµÆpRð¤uk1Gщn‹UG÷±´cЙtxãÞ7°óâN@×]]%­J*Òž174-ßj‰¼MyðññA«Q­< ®r”hS²v9QktQQÞ}÷]¼õÖ[hÚ´i…Û$''ãÙgŸµûY³f Ú¶m èСÒ¯Ê>8tè–.] ƒÁ€ýû÷Û­svP£Aœ œzØ ©Uð„Ó1‹iÅ{ötž°*pD·Å]àëãkui|÷ØwUìåz,ÚI¢è_1«sVu³.uš×AûÏÛ{R^¥(9Цdír¢Öú‘GÁ¥K———‡G}´Âmn¾ùfìÚµËîgذaHMM FÓc}5-[¶Dii©Ý²¸¸8„„„`ë֭ؼy3 >>ÞêZ±(]–ž¥KµxóÍêï[Ýe‘‘‘5ÛW¥||ùÄÀ¦MbYY™ÓõU¶líÚµUn7÷ä\¬Ø¹½ÚöÂ3 Ÿq™–ê.Û¼q3Š“‹áããƒÐ¡Ð¥êPеÁÏËB_eËŽ]i"/-®¸_ä²,** [·nÅÏ?ÿŒ’’È Ö²Pe̘1ÔjµÌÌÌ䀪µï¤I“8nÜ8:”Z­–ÑÑÑœ:u*óóó9bÄŽ7ŽÃ‡§þªÖSÎL&W«E¯‚cÇœvH×0k–ëªgjɾKû¬½4¾=ô­§åØ!IM¥&Ƽ#Z˜fé©Ïªz’\/ÿ?‘[¡ŠÉ3îq†±7›Íðó»Î$kNbذaX³fÓŽWRœ?/ \Mµƒ'ÅÅ"Y¶n]`íZ`èPQ¡àf*Òm–ÌðóõÉŒ‰ Áì§g»]×õPG«Q¸»MÇ7EÙÁ24èÙM<-Ëa”hSªö7Þx+W®ô´ +µrqŒ;«V­Bbb"ÒÓÓqðàAL˜0§OŸv–¾ qfpÇQ`àã Ô x’žŒ!åÆyÄ8ëþ)ì'„¥‡á6àã^{@UÅäÿMŒõï®S± ©)©hò\Eg@Ù6%k—µ2зÜr üýý±dÉ̘1 ˜2e î»ï>gé«g I‘ÿüÍ7N9œC8<1›EÞ_×®B ‡ ³…òºÿNø:“>ð!Ndœ´iàÁÎã 8XeéçŒ)^WP¨ãnNfœD‘ª=ðÂÒÃMƒ*Îyw'©3RA‰h÷E;¨N¨7ô¸áší­l•JÕ ([»œøÛntáBaœ]P5~]®<98yRô¦\¼Øã~g &É„÷6¼‡@ÿ@L|ÐÅ¥–U@‰(9*rUƒn Bîú\ÔiV-_oYé>J X)U7 lírâÿm»ÑÑ£E; wèëO:võæ VÜ·Òͬ>»·4¾½ÛõF«W=_MáãY¨sS4}¥) U½ŸRVJÕ ([»œP亶AÂóç¬,à©§€nî‹SaðD’€~®¥K=Þ8S• ƒÙ€w DHlH¢8¹Ø£šÌ3â†Åf¢ãÌŽðñ-@}üª~ÊPjÀJ©ºek—Š4е úø?ÿ œ9ã$AÕ Âà‰¯/ðŸÿ¿þ*Äyص‘Rœ‚÷~Œ@ÿ@Ì}f.|||<ô1•˜¿5~Á~hñz h´¨Ó¼ê¶­ëð1”°Rªn@ÙÚå„"]µ ’bZ¡Ù*z»¦Âjùràî»G?ä`ÊAÔõ¯‹ÞízC¢d­Ü_F’V‚_?äoËGp×`4y¾f_ÌJ­jSªn@ÙÚå„"Gе ž: ìÚåDAÕàšàÉàÁ@Hˆûáå°ã^mzaîɹ0˜ èÓ¾Õ8îú˜ Mˆ+€Îó;£nÇGÌW£Ô€•RuÊÖ.'i k$¼ÿ~`ýzà±Çœ(¨Xƒ'¹¹ÀgŸþþÀ?ŠßâlöYLØ;uüê`íËkQǯÎ5Û¸+ècÈ6 wC.š Õ[­ ÏÔ゚C¾æÊPjÀJ©ºek—Š4Ð5  ¢8åÜ9ÑÈXƒ'Í›Ï<ìÝë!´F- Ñ­U7ôm×ùÚ|øúT|K¸:èCa,4" E ÷BYÆO7FÝv59[PjÀJ©ºek—Š4Ð5 /¼$$8YP5èÞ½;ðÓOÀéÓÀ#Ï?ï1-$ñÙ¿Ÿ!¹(¯Üù šW^ãê þ²‰c ¸uñ­lí¼oP¥¬”ªP¶v9¡H]Ó aAÐ¥ ðê«NT ´Z-0n°{·H¯óF³sOÌEP@–¾¸ «Î5tUe˜1߈‚¨Û®.Ú|ئ"|ë8÷¶TjU›RuÊÖ.'i k$üë/`ÈઠZÜGFÒÞ{O å§Léun†$üpCà ‰ A“ &hTõ‰+‚>$áßÄyåA§AÃ" ©óëî•°Rªn@ÙÚå„Sö» ¹5Õ®ŠNu?î‘Óùg ¦ô™‚¶ ÛB¢T©ÏÙÕ˜µf$ŽIÄmËo$ˆÂ“Z½xqr³-ŠA×$H¸{7ðÑG@b¢ 9·ß§O#²Ag•^4úæÑoðoÒ¿P-ã쬠Í„ú¬~A~hùfK”ž,…o ¯K³RVJÕ ([»œø5‚ÎÊ¿[y¢­„V+¦ Ÿ8Ñ#•‚‹N/B©¾ŸôþÄíç.I$ŒLÀMãn ÷]Ûy΋OâA;ê 5áYhÚÔÆ9>øäáwþäëLÜîâréeäkó1ö¾±èÞª»µé~u©mЇ¤˜åÄ t^Ðÿ×Þ¹‡GU{ø ¹@€\@"pP ˆ(`+ðx”*G*¥QžZl© xဥJÕ#—b¤È½¨@)rJ‚­^@îˆ!„!qra’Lf2ûü±LÂ$™ËÞ3ûÓý>OþÙ3³Ö „/;û·Ö·šÅoÝ·ÔÀJª7Èv7" ´¯!¡¢¨uòí·ujŒ=àÑGÕ-Œ?êé(ÿ&X;¬ÊåìÊÚÅðÃY9t%±Q±ˆw΂âŒ'îþ8bï Ìäîj“ê ²Ý„È;h_CÂçŸWû?}ÙñèÑꙂÇõKÁ Oš7kΗù_²íÔ6£=nßö¼]e.·Bò´dl»m~ßÁ‚ÔÀJª7Èv7ß›Ðáâön§Sm—÷ôÓ!ÙS¾æðFþ`$1Q18«„[ƒx¦W-lØ(Ü^È͸9$…ÙÄÄWÌP| ÷î…Í›ÕEA#<ú÷÷øÐ;áÉÀ”ÌÞ3[UѨ8ûâí*sQy¡’¸Áq$ŒH@qøLj…ÔÀJª7Èv7" ´/!aïÞêMl€‡°xÏ¡Cðùç깂O=uÃËz†'Gòq:ƒ =H{(MÓ±}ñVª¾žö5öãvâ~GXTh¿Í¤VR½A¶»‘Y ½ Z¶TQÜ|³ÎR5ôì 6¨-ó< gxÒ»]oŽ^9ʱ+žço½mØhߌžz™¢–õXIõÙîFBdö6$,/‡'Ÿ„yótªaçNˆˆ€E‹à¶Û<¾EðDQ^Ú÷eŽ2æÜ;‡ÛÚyž;¼õ®¼PIμ¢ÂhcŒEBR+©Þ ÛÝHˆ,ÐÞ¶ŽVO”š3Gg¡,xæõÖ½ôhÃh±XÕko®ßB寮m{mTæV’ôó$RžKÑÍä¶¾”ê ²Ý„1nq|ÄÛp͵sݘ1à9³M“—§6àÿïÿnômZŸÕ¶ùÄf"­‘<ÚãQz$è÷keSÞÑ=£9ûë³ôX×kKkƒï RÏÇ“ê ²ÝDHï §NJ÷îݹråÊ ¯-^¼˜I“&‘ššJAAA×¼ ÇŒÀªw½p:áõ×ÕGM ux2ò#9ûÍYŠÊõMAòv»¸´üá‰áôÜÜÓpÅäVR½A¶»‘iNKKcàÀ7\¯¬¬dÿþý¬ZµŠéÓ§³|ùò:¯{VT¨+7~ô#ˆÕsóZuµÚ×yéRµhž(ŠÂüÌù”:Jyvà³^õt„†¼›Å6+fb 3æZg©•Toín$‚R ³³³2dH¯7^½þ&†ÂÂBÚ¶U_êÔ©¹¹¹u^÷&$,+ƒ… aÙ2 þqþ¼zDË¡CÕôùyZ…'‹…Ÿöü©®ÏkãÉ»`KŽK:Lî@Û —j¤VR½A¶»‘JîÒ¥ ;wî¬óõ³Ÿýìúëõ;¬µmÛ–üü|rrrHI©:UTT°iÓ&222HOOàôéÓ×ÇñÅ$&¤I§?þÛkžÞð5§“òU« cG¯>Û·o߀ç=’„åÿXN§èN̼{¦~¶Z×j¨}í\«sdÿ6›“ÇNê6¯×Z´ha_®ÕÜ…ÁE‹ï#ùÕ¾vøða222X¸p!%%% EQŽ(!bÞ¼yJ÷îÝ•ñãÇ+ÇŽSŽ=ªüö·¿UEQ.\¨üâ¿PRSS•üüü:Ÿ=zt“c¿òŠ¢<ÿ¼¢”•颮’‘¡(³g+Ji©×±ÛíOëªv)¯~ôªr ÷@ÀcyKmoW™KÉ_Ÿ¯¸Ýî ÍZü‡©ÞŠ"×}ܸq¡V¨CH ´¿ >Ü«÷åæ*ŠË¥³ÌÁƒŠ’—çõÛO:Ðtë¿\¯Ø*láµ½Ýn·riÕ%åÒªKA÷ð‡@ÿÎC…ToE‘ën´-rtS!aQ9mÛ긂cãFøøc5…ìØÑëžÜšx+söÎñ»ñ¾¿ÔxÛöبº\EÒÄ$’&†âhß‘XIõÙîFBdn*$t8àÃ!#CG‰‡†ýû¡°Ð§ùž(ŠÂç—>çŽöw°tÈÒ w‡»þ<·[ ²fdá*ñíT›P"5°’ê ²ÝÄ÷¦Ý¨¦9¢ž”âŪ ­p¹]¼öÏ×°X,ÌúÏYA›·¥Z¡hGm†©ËùÌö¡&ßEB^[ê!òº©„ „ Po‹vÂøñêa‡>âOÆ g—ƒÙ÷ÌfæÝ3}þ¼”——ã¸äàâҋ⊳ÔÖ—R½A¶»‘Y ›ÚI8c†zÚ”.Û»<Þ}Wmöá#þì°ºb¿ÂO°?g?a–àÿ“9mNÎ?GÇ';’ütrÐç©»Ú¤zƒlw#!²@7ÚíjS¹«Wu —,É“ÕíÝ~àkxRí®¦slg¶¤náŽöwø5g T_«ÆºÔJqfqHæ©•Toín$Dè¦BB›M=IE^xþ÷ÕSSüÀ×ðdë©­LÙ1…âÊbZG¶ökÎ@¨¾VMTJÏVÐz@ðçש•Toín$Dv³k¬Ýht4ÔÚ¤¨-³f©}žGò{_Û0¦ÞšJߤ¾DZCÓü¾èïE½WÄíoÞNX„ÈŸçb[_JõÙîFBäÿ¸ÆBÂõëaìX8zT‡‰çÍ/Osi_“¥—²ùÄf:Çv&:Â÷çÝ¢( ‰%Òõ®8¬Ž¦?`P¤VR½A¶»‘Y  ÇŒ?ÿ¹ÁMüç½÷ÔÛ=¤6æ÷_“_ýðW8«8ªCSÏN=Kþº|"ÚE{1·é©•Toín$Dè†BBE?ýI=³Uó•`íÛ«=Ÿ«ªÆÛð$ýd:¶ £{¦ExhŸß’v Í»7d‡>RÝ¥zƒlw#!²@7* Ütœ9£ñ„×®Á‹«g€·áÉ-mnanæ\\îàïØsW¹ùú™¯©_p•¸Pœ íÇ·¿á5É¡Tw©Þ ÛÝHˆ¼ƒn($4H­£šÝxž<©. ¹í6h×N“! O, «‡­æ¡[Òd._q•ºÈz.‹Â÷nl¡*9ô‘ê.Õd» ‘wОBBEnÝÔ/͈‡uë ´TM5 ±ðdÁG x°ëƒôëÐO“¹|A©VˆJ‰¢ÇÚ(îŸ}K}¤ºKõÙîFBä´§07ƃ¥K5š¤ªJ=’eæLÍŠ34žŒ»}‡. I8X¼·˜“£NR~¦KØ¿‚H}¤ºKõÙîFBdöÞt“ºIå©§4šäüy=¶nÕh@•†Â“'hײOþðÉ„ƒqƒãè¾¶;í<¯ó–úHu—ê ²Ý„Èí)$üç?aÙ2ÈÊÒh’nÝÔ¥uÆi4 JCáɱ‚cLøÛœÕþµ1 „âŠÉûCJ•B³XÏO½$‡>RÝ¥zƒlw#!²@{ o½úõ x£ŸŠÓ Ó¦Áž=ÐLÛÇôžÂEQÕkñg­þµ1 „˜»chy{K*ÎV4øÉ¡Tw©Þ ÛÝHˆ,ОB˜¸ë.HIÑ`‚ðpøŸÿÑ` ñž,þd1Oþß“”:Ju™³1*s+©øº‚ØA±´º³Uƒï“úHu—ê ²Ý„Èí)$|õUxâ µYÀ|õÄÆÂ}÷i0X]<…'ÓLgî ¹´Œh©ù|Ma±Z¸¼ê2E;?Arè#Õ]ª7Èv7" ´§pÖ,x爋Ó`‚cÇÔc­ÊÊš~¯ÔO6ÛȶSÛˆ‹Š úyƒn§›ˆ¤º¾Ö•6C?ÀQrè#Õ]ª7Èv7" týÐဗ^‚ôt&9R]Òªá_ùý¥~x2¢ÇÊå\-¿ªù\MQq¦‚“©'±}Ðô¯’C©îR½A¶»‘Y ë‡„ááêã®]5|çNøùÏu:’¥nxr©ì.·‹Ñ½GÓ¡U]ækŒè^ÑôÜÒ“Öý›>kPrè#Õ]ª7Èv7" tý°º:w†;´8ôzÈHKƒN4ìFj‡'—Ê.1c× >ÉûD—¹Ã~ÒNÖ³YTfWbmÙôñç’C©îR½A¶»‘Y ë‡„Gª7½[¶8ð7ßÀ_þ¢>3 ðìÁ†¨žÜÙáNV ]AÿäþºÌÕÑ=£é𫸾ñî@É¡Tw©Þ ÛÝHˆ,ÐõCÂ~ýÔ–©©¥~iÞPú[j“l[6£·ŽfÇW;t›«!ªíÕTLTç¨F—ÖÕFrè#Õ]ª7Èv7!m–4uêTvïÞÍþýûiW¯[\Ÿ>}èß¿?V«•´´´:¯Õ 7l€¼<õ9tRRB͛È Ð45áI—¸.üiøŸ¸j~8ˆö/íØ¿´ÓqjG¯>"9ô‘ê.Õd»‰ÞA§¥¥1pà@¯µnÝ—ËEÛ¶mox­~H8l<ò´ tñ‚jÿ –×ÕPž¬?ºž+×®Ô*Ÿ(þÖ"ŒŽS;z]œAvè#Õ]ª7Èv7A)ÐÙÙÙ 2¤Îׯ¯¿î©9Pff&+W®¤ªªŠ?ü°Îkžvöì©Áª¸Ù³aýz *}ÃôíÛEQHnÌú£ëu›§!EáÌä3d¿˜íÓç$‡>RÝ¥zƒlw#”Ý¥KvîÜYçëgµNvm¬½fûöí)«wG›““æM›ÈÈÈ ==—_†Q£N_&j~zŸ>íõ?†¥Kùâ½÷Àbñí³>\+//çà§Ôy&<ªË]³X,ð$LKðé³üqPüô¸vøðaøør­°°Ð0.¾^“ôýrøða222X¸p!%%% ‹¢(G€ÛC1ùüùóÙ°a `ÆŒ(ŠÂ–-[xúé§™1cÑÑÑ\»v•+WQ« Òˆ#ضm›¶2UUðÅjH¨Éz=Ïœ>}š½e{ÉÌÉdé¥$F~­/ä.Ì¥E÷ĉÇbõ¾­ééÓ§Å>W”ê.Õäº?žuëÖ…Zã:!-ÐþRû/ñÜ9µÍè½÷ÂС j³i´OÜ;j~kvïgW©‹¢÷ŠH•èS61ù>`´-r™]í°Kxá nzßx¦L p¦Y¾}9ó3çs¡äBЋsEV«…v£Ûù\œ%‡>RÝ¥zƒlw#!þL²25Óó°ØÃ7^y%À¼ã—Cɉ«'pºƒß˜ßqÑAÎË9tz±Í»6÷é³’C©îR½A¶»‘y]{'á¡CðÌ3ðïLÂ?22ÔvxšÇâ™JW%Ÿžÿ”[ÛÞÊÍñ7ë:—'bÇÚ>g½3Lª»Toín$DèÚ; †·ß†–S{ÇðáðË_êÒ½®6—ƒÿÜÈÒƒZlë=¶=6N=EÙþ­ñ–¼3Lª»Toín$D>⨽“ðµ× ¸X]Âì×òe·Nž„îÝÕ¶x:Ã’±Kt£!âî‹#f` ÕÕ~}^b"_ƒTw©Þ ÛÝHˆ¼ƒ®>ó üæ7ê.m¿¨ª‚;Ô#YtföžÙ<þæã¸ÜÞ5(Ò ç7Nò×åã´9 óï‡äÐGª»Toín$DÞA× KJ !¬MwÌôLTÌœ©X¼rß+ØØhÜ¿vkK+"(ù¨„ÄÇü[w-9ô‘ê.Õd» ‘wеCÂ%KÔ|ÏoÒÓaÒ$õ˜+9Qp‚½Ù{qW¹uÇ#nˆ Þïâ ²C©îR½A¶»‘Y k‡„ ¨K˜ýfäHxë-Žci˜¸æqdÙ²øÇçÿÐuO\xõ§ÆžB©nxK}“c}¤ºKõÙîFBä#Žšðòe˜7~ô#˜0ÁÏÁöíƒüêµ;Õš¤–ILê;I×9¢óKCrè#Õ]ª7Èv7"ï kBÂöíÕ»çaÃüHQàÂX½Z;98«ŒËÇì=³ƒž\Ýv• ¯]ÀqÉÐ8’C©îR½A¶»‘y]–—«_~·Ð°XÔ.ÿ:n çï (Jзw'<š€ý¨üºÈ}¤ºKõÙîFBätMH˜­®ƒþÛßüèƒ`̨×oZk6ßÄ_Žý…kUׂžT—WSñuÑ·GÙ12 ±$‡>RÝ¥zƒlw#!²@ׄ„½z©8FŽôs ÁƒÕý÷Þ«œ¼ùAZE¶¢ÒUÔðÄ]é¦`c—–] x,É¡Tw©Þ ÛÝHˆ|ÄQþõ¯™ 'úÙÍnûv¸é&¸]¿n«—ƒð°péöm{ÚÕÉ{ÂãÃ5 Avè#Õ]ª7Èv7"ï kB‘#Õ&tÝ»û9P«Vj…בË×.óô?žfÝ‘u@pÓ¬g³Èz. Åàhd‡>RÝ¥zƒlú/ IDATw#!ºaÿ•+±±jÞgr#UUD$F4ýF³a¿Ô„„»wÃܹêzhŸùì3uÇæÍÚÊÕãõ½ÎëÿzkU×€à…'%—PüQ1áñÚ4€’úHu—ê ²Ý„È]Ž£nõîÐÁAî¼Þy{L[¹zL0»>H¤U]E¬ð$2%û1;öSö¦ßì’C©îR½A¶»‘N›aa°p¡ƒ¼û.´n­®äˆÐç@™£ŒâÊbz·ë}}ýs0ÂEQˆLޤã¯:j6¦äÐGª»Toín$DÞAׄ„ ‹/ú9H¯^`·«» u¢ÄQ²ϖ]!8áIÕå*N9EÞÒ<ÍÆ”úHu—ê ²Ý„ØpõêuäæB›6º„bbbò=Á 5ÀårQY ëÖ©Ç]ùLQ‘þþ÷Z«ÕaÁG ˜öþ4Êß3ŒðäòÚËl* ºÜ¿ÓSRÝ¥zƒlw#!6$ìÙ^~ÙÏ~÷;M}<ñâ=/â¬vÞp‚·ÞáÉM³nÂ~ÔŽ¥™¶ÍI$‡>RÝ¥zƒlw#!ò:&&†]»ÔpÏ?l³©-ðvíÒÅ àʵ+l?³+ö+7œ ¢ç7mÕÕ*œNZõk¥ùÉ-’ÿ³Iu—ê ²ÝDÈ ôåË—™0aS¦Lá‰'žÀétÖy}ñâÅLš4‰ÔÔT ê¼–““ÃÀòåp÷Ý>Nܺ5üô§ÐV¿¾Ì‘Í"q¸»rì†×ÒÓÓu›×es‘÷‡< ÿV¨ùØzzëTw©Þ ×½¤¤$Ô uÙ#ޤ¤$Öþ{ÜôéÓ9sæ ½zõ ²²’ýû÷³mÛ68ÀòåË™3gÎõÏZ, Áင'®®VWpèØŸ46*–Ô[S=¾fµj·ô­>-ºµ ëë]u[Oo½‘ê.Õ亭@å:;;›!C†ÔùÚ°a‡¦´´ôzq(,,¤í¿ïp;uêDnnnñÜn7‡Ã[oÁéÓ>ÊdfÂøñ°wo ¤FYöé2ÆnK¶íÆuÖG`§k7ÆW¿þŠs³Ïé2¶žÞz#Õ]ª7Èv7!]f·wï^6oÞÌ›o¾I³fßÞÌ;RSSÙ¾};`÷îÝuî {õêEbb" >®én'’’Q¾5Hõ¹îR½A–{IIÉõ;ç‚‚Ž?b£o YÎÊÊâ®»î"5U}ðÜsÏa·ÛÙ²e óæÍcÑ¢Eœ9s›ÍÆ›o¾I»ví‚­hbbbRDmT)//gÒ¤I´nÝš¸¸8~¯s³#­ÈËËcΜ9?~œC‡…ZÇ'>üðCÞ}÷]\.]»våE¿û»—#GŽðöÛoãp8HNNfÞ¼y¡Vò —ËÅСC4h/¼ðB¨u¼bß¾}Ìœ9“>}úp÷Ýw3zôèP+y¢(Ìž=›ÍFRRRߨC‰¨ev›7oføðá,_¾›Í&æÔ†äädÖ¬YC›6mB­â3÷ß?+W®díÚµìÛ·/Ô:^sÇwðÇ?þ‘5kÖpàÀPëøÌo¼ÁÈ‘#C­áaaaÄÄÄPZZJÇŽÚ ÒÓÓ9{ö,V«•¸¸¸Pë\GTÎËË#99ðšèÇÚµk6lX¨5|bëÖ­ 2„†ZÅ'233IHHà–[n µŠOÜsÏ=¼ÿþû¬^½šßa3˜–œ9s†~ýú‘––ƱcÇÈÖ±‘š/ˆ*Ð)))äääêZè”””}?X´hååå<õÔS¡Vñ‰Ÿüä'ìܹ“Ï>ûìú9–صk'Nœ --;v••j%ŸˆŠŠ"LX¯›””âããhÓ¦ ÅÅÅ!6R÷ zòäÉÄÆÆÒªU+^}õÕP+yEyy9Ó§OgçÎ<üðÃ,Y²„ÎAÔšõë×3wî\ŒÕj%---ÔJ^ñþûïó÷¿ÿªª*¢¢¢X¼xq¨•|&33“ƒòüóχZÅ+ÒÓÓÙ½{7v»Aƒ1qâÄP+yMEE“'O&>>—ËŲeËB­+Ð&&&&ß'dýbbbbò=Â,Ð&&&&Å,Ð&ßI>øàæÌ™ÃùóçyüñÇQt<=ÇÄD/Ìmò¤&Ô;v,o½õ–æíWML‚Y M¾³\¼x‘˜˜ót±˜Úä;ÉŠ+èß¿?ëÖ­cúôé¸\®P+™˜øŒ¹ÌÎÄÄÄÄ ˜wÐ&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&Å,Ð&&&&åÿLIVÇ1IEND®B`‚mpmath-1.0.0/doc/source/plots/hankel1.py000066400000000000000000000003121316273626600201110ustar00rootroot00000000000000# Hankel function H1_n(x) on the real line for n=0,1,2,3 h0 = lambda x: hankel1(0,x) h1 = lambda x: hankel1(1,x) h2 = lambda x: hankel1(2,x) h3 = lambda x: hankel1(3,x) plot([h0,h1,h2,h3],[0,6],[-2,1]) mpmath-1.0.0/doc/source/plots/hankel1_c.png000066400000000000000000001064421316273626600205620ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½[Ì-ÉQ.øEÖZë¿í½{·»±Ý˜nsŽiƒ ƒ‰y°e÷“¹æK„%²àdY²Éž,x0# f4Ù$d4 ƒF3Œ#ŒÛ†n»/ûö_ÖZó·ˆÈÈZkm¹§wůú벪22³2¿ü*22“˜ùðf™e–YfyIÉœ¿í«‘Yf™e–Y´„¯vf™e–YfñeèYf™e–—¨Ì=Ë,³Ìò• g™e–Y^¢2ô,³Ì2ËKTf€že–Yfy‰Ê гÌ2Ë,/Q™z–Yf™å%*3@Ï2Ë,³¼DeèYf™e–—¨Ì=Ë,³Ìò• g™e–Y^¢2ô,³Ì2ËKTf€že–Yfy‰Ê гÌ2Ë,/Q™z–Yf™å%*3@Ï2Ë,³¼DeèYf™e–—¨Ì=Ë,³Ìò• g™e–Y^¢2ô,³Ì2ËKTf€že–Yfy‰Êâ«—ªüÛ¿ýÞùÎwâk¿ökqûöm|àøjGi–YfyÀdfÐùÛ¿ý[¼éMoÂoÿöoãêê /¾øâW;J³Ì2Ë&3ƒîÈßøF|ï÷~/þú¯ÿÌŒ‡zè«¥Yf™å“ ;òðx×»Þ…·¼å-øÅ_üEüÝßý¾õ[¿Ë%D€Ó3rïS:"±Á9ׯ¡ ´£ˆ8?°&0o(8Kežò=•‰ã‘è>5yùØKÀ[íÊCï·NzšÀÈ[¢ E^ ÷TfŽ·cÍÃ5ù’X÷-ì霸 ¥«…1‚S Ùb‹ o0Ë Ð]yê©§ðîw¿ñgžyO>ù$`¹Ž G'„±,Ži“Ç#€‘ê=qËÅ3˜Í^ËçøÞèøD<¥”ëÞjéiË×.ù'tÜ °ndλÉê) À½ ÆÑi›‡}­që+ê+å{ £“Ý›ì™ñã‚ïᄎH7ÊxŸ|$àÞ9—r¸&4xû;ß»­N¦Ëœ9'6EƒyBC=þâøEÌeèŽ|Ë·| >üá7שPg‚äIòXßßcS×Ïhõ•ö"±C[ žÄo…WïûÊ`Ì9‘¯a_­»ã$6K´ï3pË9Ûß¼;¦”úשüs‚Ù™ý“çf~/_c¤o;°Ì•‰üëŽöY¢Ì}²\¤r逌-t~ÙݤӵåRƒr¾õ>ÁYAªj.°W<…j{À´Â"9Y_>vÚY,ýßv ûO[³T™ú>¤W ܺ´³Äíªú´?-¿OD3\ ÔÄãË„ÇNòîöM  zÊ:Ùüå¶AÔ¹ò$›änÖ˜Ü|OîºKçÞ‡•ŒW'U «kMÁ,Bf€>P(ý›b,³™®2Q½ òÄQ]9¾rHFÞmTëAìîØzÇÞ}{Ò¨0#Œ6°úËA÷ª›çþÑÞ¡¬÷®Q•ë øiÏNiÛßÑ‹œ{d™ú>ÄöÙ•ëøJWèR{R{¡ûÕqE÷â;a‹ö”› vUÜé8ôžrîÛ·0Iê=Ò^óZÒüË¥»W’M»ÞgûàÔV¹-‹ô•(ä“AÌà¬eèû^¥˜,û“%¯Wd÷š=d<ªÛ®ê¾Ci˜efßÝÁÍî#)Sš¼v“š_÷9ß#^=¼tníű¶«Ä¹¾ j¤_+n\@™ú@I.Гkÿ·˜óOÖèxÊöÖ¾»6’÷Ð8¨Ög/‰¾Øøô Ÿ¦o™P²# Nû¦"žwûxwॼ¾ ¨û¿ìY  ]ïø»O–½¶ÉïiªÛ ÓYf€¾™¨Ì½ò»ßÕNöJ¸¨F½©J»ãw¡þŽJÔÃ&jɹæ{¿zÒÒfv‚ noõÙ䯉÷®ìza&I½÷Ø ¢¹k¯ÖA*êäãDüÆóY”Ì}Òkùíïå$ít?¶ªJ%™Š€\×Õ¶þo«$c:E=„Ûf8ïj{¯È0ÛÓÝ/W÷T¸+['^C/têZÈ9Ý£$[ƒw'8{MÿÌÝäì*ʲÌ}¨º}%»Êo3ë’¥¨4ónÐÝ»½ N_!ò:¡{î]‰;·LA5G\v®òHÞuòt:(/±Þ¾sm"pÎCêÉ×M"Œ^þõ§˜Êòoâßæ‚~{½ºãçáƒ+3@(4Ÿä¥`¥ *Š9o‡g;EÎ.#åg‰ èT{®IäYDíïTÎtua£°&ņetOÔ{.D~eÏ®ýòÏž{y™¯›@ìùD^ÉóºÕË÷h¾è½¬(ŒúŠmÞ¨¤ÉL¢8¡’2ÁtÊž’rÍBd?fÒe/+QSÔ¥éäwäŸWöd,lLfx®2ôýù¼¨ÈGÕ •ȹ&®çžÉ¢úx ¤ÍÔì%È!çµ)$T®ÿš‰o“WÞ5»¤D“7æÇ’Ÿi#Æ`0ˆÚç¼°Õï€[èÍ@D;ÜD´w¶IÉÇ#¡ý’“Éð\²Ý踥X|9åÖ@Üï…Ñä§mYm^µÚg`neèû ĶXÃÛk{Í#¡je¾æÔÆ)`&ÿ²—½÷ÀØÛOOçgsÌ"IS¡¶×z¨Ó Iä›E~pluë\‘ë w½”yæÝjö9ïlŒt5Nů÷®©sËÄ,†œ˜*¾qûjêéÉ Ð 2ÀäkhŠò®êèü2Q9äб)Ù/§âé}L³Á‰$ÙkØÙùy‡xyØy+»ß#i»ÁEÂø.pvv^Œ²J¤âM#6ôÃËßDžÉûÜÀMè”?O!0ßýæ™ú~Ä‚s§œz{öß©'„Â^é±ç<½mUõªŽ¾kg%êÕ{sn‚9öÎwÁ£÷]·t”MÅÅÏ%ï?žX[tä&98ï–þ×-QnÙH/ˆšú³¸6ƒ³” ïCì@À?—@®ïš Ýß÷l* ¸L‡ßÃ#t¯öya“>Ú…®"HoüM/?§ôvX€¶?ïäðŸ®3ú“ö·ŠØù™äAG3nöÀy/ˆc'~䤰ØSÐWh%?.úãžÍyÞû¹6Ë ÐK)H;H…÷\[!=ĵ!€Ð^êUà&>/±·ë <ê¡…#¦>÷‚ëÈÜ¿’zqë(íåÑJ{ñÍù65T^ÓóšzØn6i¿ï½Ç&|[øÈ>Ñy×DPwOåa7¥õ©:7Ç#è– ïC¦†{÷ÊïÎËäðh»8íúI„¯q %z¡;Êdôí#×B3w®™äbºÌLÕô\úIØ'?ïZÃOþ:!;ÀÚ›,I=n'žkZƒÞù­=v—UÑG;Úœn:t™úPÉåÕ)³â–=0 SI ’‰ß{.½ó|mzÁõ€®$^•™JÕ4tÚG)¥Å&ÉÃÏÚ…Î]ÇõA9·OåLfÐrÅì½lõ6n½c±É¼+³xÌUۃɩstF¶nt½¤zIò®{åòA— ïC8ˆAÛãþUBñÞè´S%~R¯ ¢ñëÞ'U^…Þ!ùöà'©—¬‰˜OÄÑA³^vï Ú»5ÅÄùK^uCÝUp&šó(ÛËÞûšk¡L­¡¸;}&)m³›” ;ÂÌø¥_ú%<ÿüóxì±Çð+¿ò+P*‚*T©ôíÔ­ìFòl*Þ­V™¯éXHOè)œ@‚}ÍÉé$ kû¤bÍ,MïáÌ=­%wšDîÌÝÑï%©®á'¦_½øõ#Q?¨öŽÂ5r½¦Ç­N×—Kf€îÈÿñãŸþéŸðªW½ ?üpý!W Ò€ª(÷ÔNi—ޝ;ê¸ n‡‰Ãc¯£Ë"œð¾I£š, Ò~N'µ—š@O=Ò yJ“g½¢Ê¾/iÏ$MåßÞI:ð%1dÖØÞ³ü‘P×»=3ÿÖ‹c†è,v í,I>õ©Oá;¾ã;ðþ÷¿ÿ÷OúÓå7"ò7H°Ö›çË:½‘³Mý&¶=•øÞ/»žÞ‘„©h s‡Í«ÝI±ï‘7ÔQ°C™½Î`ò#tîÜ#Ÿhâw{ßý½öýËÏ—§ÄM±Ž†_f©23èŽ<þøã¸¸¸<òÈ#xá…ã¸uk°<",ŽkšÂ-Ô{¢¿õ÷dG÷âD¨~­Wª'û´³^U(ƒ @ýNA{­Õbؽ'°^0ú{ñ ÈŸæSË;/¦—Œ¯`ÊÚ0-S…†„ßóTÙëlNðú–ü¥Ñ&ûŠ/°æK#¶;Sñ È Ðyë[ߊw¼ãøÄ'>Ífƒoÿöo pó¡ÀqÛY1Ü÷a J"Ÿß…NhNèæÚ¾°ÔQ¶èH÷Ú^ôûÐv ªy0öQ'h/¯= ’¬ì»”´÷ìAß¼dy—Él:°~j&; íc⢧7^³kNå[/3êeéÕf'çï¡ÙdRò…ÉQÓ»ÞqòIö愵Á8ɳĄ¸é^Éš¥Ê Ð å‚;…—Ô-·{iPO“8ö>ÓíÞE³CáM¦¬Î ç3Ä U»0 T #z6É}eBQ ÷Tà±=ï—ª9ºöë^6»jŠ>Uˆ”Á;¯G¨‹Ý™Œ6$ó­màT)›1ºÈ ЇJÆL§Î—ßëaÙOTIsœÎ›ÁTKò’©} {DXÊʨk¼ {‰Úä€"9Ûç£`7ìxúËè]ñÒ¯¤ýU{pLä•'Öæ{¡ußq>P+Èï™:;Ä1ÛO¦›Ð[„veô|Ï/å’ ”\Vm%‘øÙëSÉçþ”ä$vöÉ€IQ¾æLú³«z†9= ±G75þ- ™ÂÌ6I&©T±cƒVhÐÙþÖ>Eâ?0auèe¯ÀÉüZ¦øôãnò‰{OyŠåmù¼“šŽ“Ì«¸gsÿìÇ!eèû‚ƒÔÂ:Çn…‘¹w›ŠÒ`&µïYºu%±ÛnNK*¤ %6YNý÷Æ·—çß¼Ôø “‡wKÙ;i°¸”/q/)v¹+_¡›[3­²ý&Ïz}ž{ÏÔI"""v˼S·Û²ç÷LöÞŠ,I5‰óT£Vf€>P(•YÐ~LÆdŸ‹&Ôâò@µþìãá¸L@ª€_¿ )dJ­B×ÄúÖš~èRÕë ™Rä « FäÛ.\’PúŒöîÎ*|2ÊT~¢Œ²6Ÿ¼¬÷„Œ†¶çN~¥Î@•®È§—Fîh/^3‡®2ô} r±ÏpY±MHSOÔ­L\á CO¹ÒÑì&“†îéšJVÉ¥ÚÍÍ3“®=RSY`'ÿ¼ ÝÐû[q³Wòµ63\×:øq$©,ôÛµšâAÒÔëNj²܆m²HÈ&¾ðî½sÙI8K• ïCäl•¦îèòJNÙí@ƒ‚rÆ%¡*™ì(4JI…ÚÑl9³ôàðyO%¶Fvjè.Óº”æg{ Ç> ›"`ãá~K ÎÓ^h‚#ŠŸØ>&GJì´U&=©ì”ÑÈÒò¦$§~‘À*ÿö0Cˆ—$ù°màü’5Ï€,eè…Ðt±6(Ðj,Ð7¸w¤k]º¾]̈8 ÂƒW5ã±Ìz¶¼4™¤‰Mš8¤¶¦¡³ZºywTãж56âL‡bkä>îvæÄþÜ! AS)3á{Éé$­„nAÇѲ[:0j; x9»ÞkP¬ÐÏ›¶©°6õºW§k®&goÓ¤”u”*Ÿ¾^¹k’6¥Ì×D²4ÕRJ'ë!ë9¾üeèEvz¶@ýåçübg+¼.ìûô¨ukè´FYYâ6bêc>CÑ$|ÚËrþeìœ2Xjîðz •¢C½›]?ôµìû¬¦n­;%9GúëÀÛÂeô>%‘9qÝEl~Jƒ÷þ¾Ïù‡zûîу¹D…4ÐgæÐUf€¾Éxlÿ‰,Ë©Œ©r~W„Æ~!*°‘!d$#G©¾­bæÏZf€¾!QÎ÷–¶Šzë÷M€NH©¨g–A©ãâ¼Çd¥1©ëÄKžOôð‹¸æ/h¦øb5ôýFšLK‡Sy—f*жWm·a¶j²cã:±Vöœ*ÈdŽô¶ôâרL®!õ²U`ò ”: #8³ëìß(чfÚŽ^i ‚9ç//Ïd™ú@Q༇Yp<Á¦3Vz&Žî+o@Û(°óšÚVC;G½É/ö:y«œ±®j‘ßbÕMÑ-¶¨Ì} È¹8rÅrÜU'ÌÖ•ˆÌ¢28›œŸÓ*굟’NEªŸž$¦Õ¥=IrÎ)=׫¤}=„ËÝÉN/°ª+Et¡Cé(ôÎîžÈ™êlÔeÇ`¶£prHñ\ëj 2NÞÈN@¯àpR†’6hy{3’(Íùqk_¶E´Ëo‹ÙÄ!eèû ÀO:V(`!”¸ÌÝö“tp€Ùó‡–ur¢À÷¹q@ë ] = žéÒ•$ ΚTè“ùåå_ AúAO=̰҄QÖ¡sjXÞÈËIp\ÖܳØÊ0or¢ßqKf`ÂwÏÐt€† Ðp(»›ª Ò [ö訥IN-0K– 5Ì;´ÄÍF;ŠŸûƒ %›8¬Á¶”vj'±ëâiŒ¢F[6qµÀSÁØk DsàăZEÝ’M¾’MA/¯LæXgë(çó˜´!sj¶¼ÕTrp­2§YâLÖIü4Ê8p3“ÂN3Y¶÷®rAvZ;twÀSÛ+isBr Ü9/uë,À Ð÷%ATe¦¦˜·•i î}÷"ˆ…NhG« ÐÆjs: [Èͬ0û(¸-‚x"‡ÒY"µ“¼<Ð`òÏKÒ^y×|@€nP¿n΃n¨À)wF蜛ڻ¢Ç IDATò‰öñ²LÄïà$€RæØ‰’°íLsâýt}û¤Â¤´[¾:#eLÞÙ2Õæ¡pYT_e³d™ú@! všAj `¨S¾e`]-² Åhªu>GûT¤­PÚ =?[ÛT¸I*Y'LPMN¥¤XM½Ü=€A; mí¨¿ŒñUSéM7ÊöJgùš%8” ƒÁHñj‹6gˆªêÝ¡èlÙt¶Û©0+é\»”•Íb6¯@»ÙÉœœ%Ê ÐŠê$ À°OÝ7@Ý WßaBÉJ½±ÑYÉÚî ðèt J+ššA¡\³÷ȃ’Œš!eUýÁÓ"òÐɽ&ê8Û¡&@Ù "¨t`¿°hëñÂ,¯JX‰8°º%³²­&Ö"Ì'ê]wm'TÌdÍe–™¡3Ñ\£ô¸Ù¬}Èm^é]žff€¾/ ¦–¶Ët¡uEµ<܇¶s¯Ð÷: !Ó¶.H‹ëjÄ£HŠI›7bn0móÎ3­7Þ¶½€qè4j€k‡ú)έãâu̲øŸßS¶-7ì9“Ù¡n0¹P¬‡kÜsi¼9Ot ÌÂ\zôϵúf޲±?Ÿö,Uf€>PT½8$«A‹‘hL@ d~·­AF2j©fHÊ¥b¤^bl¹“uú+I³ßתºY`UÚ›,S[9DóFÓÐDºù×Ñ]Ÿ9JÚš-+ÌLvh†Ítm‰—×Ä¥€8g´i[ ¦Ì‰»àì}a°2wX%¶!3´] ó–I˃¬ÈÉ»ø»,WFkîLhjƒž1ºÈ Ї ¡ô¦ç’']¦°r7ÐØÊDZQ੯xªe u–ö-“Ž•F¦×aHúéLA+nß'ƒCp¥=Zmèm^µÜ[çÙÔ­:ª„Æôè·ÜIè%¬ýFâÊ¢[œ®È*û)8_; ÐØ0jó”ê‘Ê mÌC)r_@Õ‰^9ªå)³å¶iSž¹…ö• ” ‘ý@™7{óè«r.°Ó5rôP,#\z—¿B3P{ “’[æ}ˆk+˜oÖh‡Ûá„Akâ ðà°g“Ÿ6[_é õœ0q˜8Æð{& Î:¾[™ãBóp™-5sºà¬Ñ?N‹1Ávš$Ôàå»Íí4\ù˜¨îЬÐ_é5ߟ² ¨PëÕª]w²ÊžY¢Ì}¨” :»ˆ)Mº@6epjVªLŠ9O[ƒmA ²¥_(ôØ\ë{Aæz´­©âôlÑØl54Ù×¶^Árô¶±“[¢hÀ<Þ€¶G½=/6&Ž4“éÀ\tÉ›ª›M¼¼ŽA63Ù!E_婺9d›7â8LVáHè~‰¥üó{QZ»s˜¥Õ­%¼Ì}  %Îã—d\ ž2´M±è¼´³¥êV¡£ ^j¬†Öš,|’ôY â©Y¹¬™ÃKV¾–mÐ=_r›—zU 2mƒîâ€æ¼kÖÍTjÆûiîå7ë~ÚÔ ZbͬZ,É©"ˆ¨;óèû^Y‰S`ŠIÃ4CÍT£6Ï¢"[‚c½èÏ]Rò’½o² ݳ‡” ïCr'aêÉ)G©SÆÁh¦!“ÇS“4ص]ʺaѤ:¦Ç2hÍ{t“”öÁÙ$5'±$‰¬é¥/ÔËS7ß,ØX€–/I>¢N=GkÞÈ.vvªQ’ŽVh È–1ç•MÙZ`f Øz|›™iĦ€Û¸‹t]E+ ³žß;;yÉÔŒ“}Cñ·zÇ,Yf€>P2 ç F¡-p Hó:¹Us¡‡$~3›]újÂõR$|/; sq“M  §]íÚ*Ù~à“9Ðn¹T0´´H^É?Ì2ðå² ºw›A¶j-jM¬‰cDh;¹”ÝâO€4Ëì@“ÆÉÎ @çy8ˆBÛäØAyݶª }MüfÁ9¨c¶šTã'KÞ ÒUf€>P‘\äÒWf²4 ­ªé²Þ¿îBk;Œt“z­B×ÇÏ+ôí@m ÐŒÁÀ‘k Ø)F F­p.8Çó!ÄÂhÈc“a2ÏZ8ìM8݈·â47qª@ÍÚdy­¶=gS‡xG=»sãmºÉŠžýÖÕQŠ–oU†vM¡G%.^þÙÙìBó›,O³d™ú@I„¯–sªŸç–ñ©òmˆ‡ S]ÔpYÁ5£Y¢ìYaã M.[”œVÙ'µ6Ð@ÀV)iسq×"€Ç¢È¦Wºåf\CèÆÄaÛ 7e#fA:…f½8ìí¤sÄsÍfËž9}žÇ@¥°õyfÙbÒnÈp`õ>Y+Ö)ÊM^°&Ñz&;S2™DN ó'Ên3»YcKêÑÔ]7¬à·};í@Ÿ «Ì}¨”‰£öÙQãH1Òªr–2@;à“—!ÙÅ ƒV"‰­P,ŽŒ±‚€àú@÷;WE4àlÛ 5aRÉÕn¨-G÷µœá>?%½82ºy,º¸úšÏqÖT ¨¨ PÂtâ8åhJÆlÞ'Ë LÂÆÊmmÎÜêÔ6•Ý ººØÁlÎðPÊ;y“½i¶RÈ;T¾mÖ\™ú@!@Í]æ’@‹™ w![íwªS0=€Î6èÖÚPMi› õ<ö–Tf†è*3@wäÍo~3Þüæ7žzê© Ð€2q€*ƒÎàÒùxLàB~9ï¡¶ç¡Â4@7„©zq´#ðt20× 5 d ·‡™£Lm™'îïsUYtÐà“&ÒÉ &¬zÐ$<†´-¨›ù¥ž¼Ú H³F:fÉ ¹4U†&@™='À-µ7sU ŒÑ:UHPv\븰hš|é´`âý´_,m á¶‘kس8– gx®2ôùýßÿ}üÀü€º&M©ƒ -ãk •,6ô†ƒ‰§\t@1qØ^5KYåô:ãÛaëX‘D'’R¨™´¶sw´[géݱ ˆ£ j™ô`ó•";+6]‰öp¢ zÒ‹#5[,ÓlÀÀ@ŒªycÒç€S+ØtÔ¥£®yc€oÞ­“EXŽMÏ`vnº=Ù&¼i P)¼fЪUhГË×’| vªVûfd‡«œ(©ÃTX™zB~ó7GGGøÙŸýÙrír ü·§×ÀxôÕ~íàÎ_Ô°g é$,âždðjjŠoSmP,žçÇË ØÁ¶BTpŽ•ŠP=94@wmЮvŒ4O…Ò"y¹£Ðv*gÑþØ<Óói›Œ‘³1™¬´Ú÷YµdÏK‘ ÈyJ8³¶AÄj@Zô¢nMãÎòMÁé¦ó²é™”…H*wªU0R¿ËtòöeÐ#¾¸}_Ÿ°Æ%ÖVÁ+3@wäƒü ~ï÷~O=õ~æg~ïÿû'+Â7ý8pÍ 'Ày¿©3ws ¤M¥Û2°¦¶óÊc+Ú“DhA¢k&­'|/®v¢//¶iÑxPÐ zÑ€4)&¯£P´;]ž@9x§óT€ÌÚæ¼‹ÂhGå#Ôà¸üóV¤ &0aƒ¶„dH¬gqh@Z7³š5[_¯óΩFaŠN еص mmù¯Å+‡3øÔæŸÄ=˜2tGÞö¶·ámo{[s=ƒ­¾Œ—äIg¼ôÊ|þìõ RÏå›B£T©Š@(°­”Ű´«©#iÚ¨  Ò)“†-“&Ј ÐÒa¼2¦FCÍàÜ‚4Ô4¤\d‘_-£_¨]4˜$ö,Ìœ Hs9"ç)»ÿ9ý¥í`ñž¤yCÙ£€®^o H3;ï·°fIÙE5fŽô®sÃ!:vhÛ¹j´™/’‹6¤ÑòàÊ Ð Q UÞ A£îTzM€fÂ$kæð>É÷Ü—2½Tà,BMF»ÖŠÊçEaËød•°U$™X‚sõbùÞ”¾¹&“'’™z2ƒ¦È¦3“†h“ ŒðÝDÄKÉñÛ,8C¸iÅ¢¤G æŽÁçÂÕÅÎ3qdæP¨“%I’Vpö nÁ_z½nx¦Ý¬b¯ÕT|lÙ:™#ÉgD½N ÎÕÌ‘@`Ü6àœE3êx´ ÐKÒ…œóGƒ 8vzÙ ‘º§­8X”áÜržgÇ´AœØs¼ñQ¤Ð ÁYîdž9g@fÑÈ*ö¼ÆÓ(B¿]‘Ç¥‘(¿‰Vº™2O`Ê­Ð__^#ÈîìˆÞ4­H·uEß=Ãs• ‚aÐ ;½€¨e ^ïpµ>UV€6„}=9$moíœ"Ô‚s|, V),:"ˆÇ¦µ™c›˜)–’Îâ8$;4A³çؤ€:€ëˆjÏr¢Süd'ai!òc\Ù3`æ ÌÕ¬± @g•9Y1dÒl@ºaξ Zñ&—ÐFe¢3R[kÐtÊ¡wŽ'–R,Â(-EÒØÿ‘Ët§ÃíÈÌjã·cXg€®2ôB”VõN%-;Uô¦Éô>ù487=hYæ¬tPJª…|ådæäІ-«Î9±î$Ô zQî*ŒŒ0¶Þ͹Hz ˆK$&*†°ƒ&Œ`u ƒ^ Á %Ín#ƒƒ.& ª€¼°d.Çra1ÇÄU3ÇÍW|œi,›–¯Fá")`n³P)™³£¼´ Žý¹)Ÿ"ÿØj±ó™äâ(§TAòkš^mè“ ïC‚ÁM&¨Ñ„»†{"'Ågq¬€‡@“T(ÁÙÔÑ@ÛN}æ\÷ŒAsý'aJ¨¦Ž´·¶göë{ÙS´ÏFpŽ ¼"Á¤ƒfÔÑd÷5@°çœ‹:Užl°2š¥)ƒæ¼§8qí ´¦h 4 8KMÕ´!ÉíÀÅ…Eô tÖyW™tÝeÌŒù*Y‚´HÕBÝíió-V·éA*¨åDI¹[q–,3@(T7» ÐÂâ0µºJë íxˆ©4%„™V¡4™NB'b RÞÊpí±Ö™µEü׿ÞÀ•º@ÆNgŸÍÒBAór•@zÖ¤;kG¡dÐ90Éç„ ZD³Ä sÇ dÌ«rÎXX!ñ’6CraNlí¾aÍŒÒÀœ†*Cjˆòë‘v|)â<6"ÁþºZ¥Ðû3†´ø¡x!¦æÔZ!î/tÐiÁ™Å“³‰CÊ Ð GaÐÔ·C[2Båº)ìÍçÎU¡´«x“øSGê-ºÖb Ì¢$Žãÿ‚kâÈ@½@žDI™:ÆmeÈyC`ë‚¢z%y%@:³é%Fli‹Šþ,ÆöH-¼82¤rdÎØ2°ÂÈ‚'¦LõšìÚAÈåÏš5*`'-Q–ûÜ1èXÆ|¤É«bÌÂê]-¨T²²SX "•Ïè–D¢'2Æ-ÑÔ¢VKë„ýÙ› zè*3@(qºÑÊHA±\Ë~¨} mCƒš’iY€uVXpÒ‚3µfŽ´6áôo Í‚E ӆǢ›&Øãh˜3\p΃0ÀE`^!íɰi "livhÙQ¨t2ê0kó1–¬Mr;°¢Ì¨7 ®£Ë(Ah›3§DsaÏ”p•Ÿ³ia{¦Ø ¼TÅ¥“º^M’9‹BÀ=NÛ¶cƒvÝA5HW˜e§(jûsJª`Ðõ颫Ì} "É(X)´‡ ˜ÍõZ ÙT€¸Õ,{J"9³«œD-¯Mƒ´?C[S\í,8“ǦƒºFãFÜÒ°)hILŒp€+—TúˆG¬¯hc[¦8é5u4#1ç‘{fÐXsãÌì€4Æh¦ÊšY€ugÑ9(4§>×{c‘€{AšHglpÒæ|A4¯“ó™aƒ^ Îkê²eÓ™¶£¯Z¶½!ÞÞÚŽc)]3ƒneèC…ª‰Cš:å„I’“XKCCLȳèÁÌÎÖQ(„­¢] –,Ëv–D–øIW»:®®š5D‡¡´?#yuX@Ëߤ©ƒ¢:ƒ²iɦWœÓL€6ñSì3HËbÞˆL”+@oa[mÍŠ9 À>öèA˜68%¤‚rmcƒVk‡.¬ÙØ¡G…—š­–CÌÙjSʈž• ª0ˆ @HRxeâ0L=ûsd ÔzF@É 3£–¼Û(›eèC…: 5ž²A—5 ëí üj˜JÕØ a¦H­Ì×iwe♫ý9ªhÁÙÇøkPÎ ­ÁÙì™ @£5wØsŽ“™ãŠ€#Ž©²éxNX` -¶´h›¶Q´g!Æoš‰58'€¶Œ1 >ã8mGÈ¿3Ø‚X2e ÌŽi#›@ (7 1re“®¯€:&Âÿ‰²â³1‚‹/ åfdÌBºDèkÖ]6® -y|µA·°>Ãs• ‚°ASý$·&akiPÅôy™È½ÑD• Zí.A˜ãµê}Fª§Èvv„ø¸dÌrÀJk`±†8¢°Ò˜“Ï4)O‡ÊWT÷GD8&à"DÎÛ&¬Áa-Xô6%%t´A ˜3®´q„1²dãcfNìYõѼQLœykL‚=Òþ ±çhÊ0¶ç|Ì‹–ÈZöœß–vù«KZ±cÒpÁ9Ÿ[Ÿ¾\$&Öp”%Tš7rY—lÚ6 y¢$¹zá ÐUf€>Pòš„vfËŒ—˜ûLZ“]¹*©ÅÎ(”ÙVšÁ*ž4UûsõâØA«YíÈ3sXvÖ3Ün}pÞ’j±­€Ä¢ ëЗ\à„€ Žá8´Æ&\t„5´Z0èlÞ0p5kưqœØó1‰5!_gœ€q̱spPÌ9 ”ÉÇœìáå÷-€mAݰää’ŠAs½GØŸeñÇ ¬;S¡Tkj7ƒTòqšu„Í&²†¦Hh3G¼Ýœâ0ç¨5…aÌ„R^¶}yy‰øÃø³?û3ܹsßöm߆·¿ýíxík_ûe…K€öƒÎXéYÐÚάcq¯Äÿ†A-l* “¶,ºRöìÅa; ÝÃòX¼[Û³ey<Ø&@–d²›-[”ß"ø®CœY5ƒôUˆ }€Óœp7l± —@iÚaLiX‹@±3›¸bà’ËË툌8EÀ Åãcfœ€p’ÁŒc±ÞVàU[5k”ß³)$aŸ9X€y@¤"A»ØŸó;á.`K;î.ÛtÄqñ…¶ì™Ze5:õZ-ÛÕÌ!IŠ^tW2hS¶gxVò²èŸû¹ŸÃ[Þò¼ï}ïÃññ1>ùÉOâø¾ïû¾ßõ]ßußá*€–l£cƒ@]F]-%¬¨I×%HèáÞ¤k…Ò)¾Š=SeФ[OŽÌ¤óìÍ ÊéZöò Ò]¹±dÔ[Äû¤Ù#t6¬‰ `_…Ȧ/pëpm8Â%(\Š™cˆ„°eðƒ/GàbÄp1âŒFœñˆSŒ8á§4â„ÎvèGˆ<“©š3lG`îl‡NàÞOöÒ@mÍʼ!t$®õ}h@Î]“3ͧü¬jÎ…Á{Zp¶€]v•Â2áð¦ `È…c¤ zÐ5”ºY^¶ý;¿ó;8??ÇÉÉ àõ¯=ÞýîwÙá–¹8,‹vlÐ#å§ß~kÚkX/R« ;•¤âlV4+®êÉ}&´ùÊ`•vÂ$¢Îõ„D4n}ÞReÑf N`C„Mél H®† ÒW¸ît.°a JHÏ[_Æ `¼€»Œ£«-®aÄ5q [œ1á ŒSPèd>a #H°eÆL‚A³ç|¬ˆ*5öæì­®/Ó •P^RI¢¥Ý™õW æ.HK&½€^‹ÐÚœ=_#m®ÕÁYæŠz,Z»Ø¤-|¸„Ý·üÿW¾á¾ûØÇ¿ú«¿ú ³-¥BÄ>oCÜBˆÛö4¤-Ô-.+Á©þ0 ÕP6’¬,‡ hbôµ0€Â "yKXPoÏS•’:`–h@CÚ§s,0`€!íåù€°Â¶@ØÂHFŠçcÚÒ=aï[2á$N”íÚœ „ëáÆ¸1-7«p%ÝÅŠîaEç8¢udÀ ­ « Âꜰ¼K8º¸xˆ¸7°Àup\ÀS±PÀ’¶Ø `›¶#l1Ј@#¶é¾¸ CÌöa„EÚ«sBXPÜ„a™Ž¢¬èס­™(§ãx. ]e#•‡RN‚¾¦ ¦-¬’dEÅvR‰[ž?<úýñ7äÒP¶\²†òôÌ¡¥¼l4üøÿ8>ò‘àsŸûÜW,Leâ :h{ó ÷ÖÚͤ£°Ãò TÏ%‹ƒUÜ99deVsü’Y¿®µI{•±’EŠgmÑÕåΚ;Ò^ÚŸ…­¹l¹'PrÊX!ó€‘(í#.ŒÂâtNLŒ»¸ƒ€[è\ `ÆÈœ·w€í-Æx‡pÆÀ#ðŠí€› Üà-®ƒp [\#Â5Î8²éÈž7`Ьœy†Ü¶eÁªQÌ‚!K³†8Î̹ž‹ü7.uy§MÕt¥VïîºÙ‰¥cê-Ý‚tÍ':_µy…ÉÄ]'*¨¦ÙÄÑÊËšAÀ÷¾÷½xî¹çð¡}è+föâDV±èE!/„aˆ¬(½Ñ@iž_J…aÖdKõ<3é¬|i¦¶¡*¶ô= …9Ç¥_pfÑÀ4¤Uœ%cj)[ÝÊŒ—…)Ë­\£º cN yŒ yHL9l«ÞPÚ'¶½–côÚ8 „kp-ׇȜo„‡áQ x% x øÁ⛾é›ðßù;Ÿÿ£?ú#üàþ ~ôG?ýÓ?§Ÿ~O<ñD`p¦L^a (ÉÂê™7*4öY_#iâHC„õ÷£f¨¸ãx®>•e<€´:ŒõäØw\P†æ²Qé°†U&uq…‘Eˆóë­(àg¸Ð¯ÂfÛq» IDAT·é.¶ô9„ð4ðÙoÆøÙÃ]àú’q6NFÆé]õN™pÊŒ³1à À)€SŽ“icÄLk0ÖŽycSÍTM̱—Sû8÷ö§m<8ÔèÆ0Ç(·§é.q%Üép§È¤qåì J±@Í:bS„ÖÌ!·v½!zyÖ(/[€þÉŸüI¼ï}ïÃ?üÃ?`Gܼy?ñ?±8Àç>÷9¼éMo¼öµ¯Åg?ûY<ñÄxú‘'ð¿ü—ÿXnÒ¶–WàÅÖ¸Äz<ÇßÃÕx#ßÅoqÆÀÃ'`µ¶÷€Í9as l®^ë Ðfm/@ÛÛ í 4®ÒþHç°Û:—CÚ‡è¶À—y?€¯ðÕ"nëhìh…Ž°Ä ý.pŒÛ b8¿ÀpypEi@\Hì‘Ö¤Ø%ãŒ=é‘r-´rÇ)€F¬0â[cälé\džobCàŠ_…gpŠO2ãÓ>…€/^[`|M^=€¾f^‚€ë ÐÙœ cB8†V@XV»*-âHGZDPmAØH‰(ûu:Ž@ϯÀ¸LÛ9˜ïqÀ0^ãyÏðï8Å1ãqq·x [ü'lñêçÖxÅÿõ4ð¹¿Å ëÿwÇ›x‘ˤ5¯%¹¤4l<'#pÌÀ€ ˜®¾ã Œu2qh †0o¨,aÔ£“;¤ ÐK1z0»–ËäÆÍ.}{9f@,Ú[€Z×qÓQ˜"©ü?÷p³Ë“ô+óÝ>£ó6fexzóy<½ý4€KÜã«^µ|àäe Ðð[¿õ[øèG? ~žÿÉŸüÉÞϾõ­oÅ;ÞñüÕ_ýnÞ¼‰'žx®ßÀñ›ßŒk`¼Œ[v7Ú¦m`=b}u;ë œo¯bͰ~–@_`Ћ„pÏct™í® Þxðà ┘[’·söubz®—ÎQ|qógw¾Äˆ lqŽ-Ÿcƒs¬ùløQ0/qÀí“¶.Çz5¯ àæ\ÀÙ>  Qô>X´¬^ Ñk!Nˆƒ9¨0Ìup#2¨ÌÁD_âü–ÅtúŒ<Õûð%®pBÀ+xÀkÀxÀ×½@8ú¯„ñ¯×À¿ÿ?¸~u†kë×áÆxã—)‡A:+V<"„5hŒè*™6’‰ÙóuSlѬ•ýY5“‡ k6åcæÐƒTÒÖAX¦‡U# Ð+ž' šõ!×·'-ƒÎo·ž×¡è_¿x _¿¸à.þ÷ËO`–(/k€þÄ'>?ýÓ?½¯gOOOñ‡ø‡Íõèô‚‚J¼JÛx<ÆcðöX¯À—Œ»çxñêYà Ø|¸úW öؼÀ+¬ù—üY\n_‹óÇÃæxèЫ–ÀCcto8ÁÇ ZqôK¶UtšßšR\ÕG$ObO*¾œµð*ËT1"To0ò%˜OÁÛð¸Âfdlq€W#VŸÙ€?¹>µ>=0èx|FÆj þÌÓï> ϳͨœA‰ë±ëÍá}jJ€fs›ß¨•¿Ô‡èöÅKÂöt½æï@¯ÿðþfÐ+¿¸q8½«#`µŠ³Ã-(>×”ã(â /¾9…^(SÌW‘9G€©#óFq•*ͼ=¯oâîæK¸ãŠ'áÖWÏX}‚>5w¾4,£M—ÎÓ—ƒ°ŠBéó„#@®Àá ¯P@k@ºÚ‘ck&æN^7vhwgŽ€-ÝV´ôàhìÐ H/’-:t*7}ufŽªµãÁáyoäN¤ˆ2‘H=õ.ò²è'Ÿ|¿þë¿þ• t$àrgE[oãW.çÀ¼ËÀ-Ïø7`ñ„ðO×1^¼Gô ôyº ‰¡Ñ”}ÍŠ À2âj¨ Ôn¨÷–ÉmÒ§jàZò°ò %ƒŽáqüÆé׿€ãW<áÚ Àé7«Ç€áa \èD'@Zü ”{´rÅ'±×Ÿ­QêqõCÈ÷d Î镦Žh{9-ß:.ÀÛ¼fàjó‹ðüå³xƒ»ÿ7!üŸ#ð Æê…G†¯/¯a™¼¶ñ‹—éÓ%£abЩƒ’°BôFÚˆÒžÅÈAá ºÌó,Ì=s†iª Å66zZ%H‰‰JÏ{£c‹&à%P“|_PJ‰¹yó½ŽÂ–Ag×> 3{G[`q^ ¤Ï:èÀQée™¹.zH¯´\YœGÉè´@Y#â¼r›hÚOñØž¯ÎÀç+ü¿Ïý¸õ/ŸÇ­ÿ±xúa,î<ŠÀ¯ÁrüZ^ §à°ŒS0¢‰JćRlñ"‰ž%D‘9sîµ¥ØQ@œÞ ÷:$ÿçlc ¿tÚ0'7š8})' Jˆ¬Acë¹±`uµC+–½¬Q’É·Y‘³ú†*ôWf̺µÖ›*,@ï±’·„VÕ4PÏ:I/]fˆ®ò²èïþîïþ±e]8±fœ‡hÖ¸€[ za~ ç ‹ÛׯŽˆ1‚ph…%XàNp'‚4ÎA¸@ÀUëø™M”Á:¤}¶Ûe;vf€(L9Û4óg3­8óŽ |Êà3`¸AÀà z”^ „‘`žx80n/nãÎb‘æùã@“p…èx„SN@X% NlÚêdcޱՆp½ä‘dÞÙ¦JÕd¿Ë po ÜZ_<ýó Â_žáŸ?»ÆÙˆ’Í3a<ŠƒzRC‡é ›9qeÇÙÉœS0eך̜+0#Í m ©ñJns$ç6nt¼¤¦s—ŒQ™7:Ç#µ Ú0h2>ÐzÁà Ò,MRaÒUqm)¬½Ù‚²µCW£˜5…‘V9ËË ßøÆ7þÇ;p\¤õŒâ˜”»am¸q±Dœ[˜Š;Amã”:/Ë& *€jÒÐlL:eE¡1€7\úì(¯duànðóô…øßôlÀpo €§€g°Ä K¼26y²l¿/K¹l“¯¯ðqL6ï Π7ûlæ4èdˆ@¼”¦ ®ÔqÁi-I®„>¯E*öLåRÔÌ)½BÏ´!˜4/ W2v4é–!r„dÚv‡xsí ŒšG êËihOf€>TFÔÎÁËPAº˜<tN®BZ::ˆ!ô„‘ò´æc²×ÅóP¬r!MLDÕ"—+NgŒÈîI¡L´@»ÌÀ +tŒ§œ1è@׺F×ñ:Ç~¿ôø€S®Âu.Â%.‡; °Dž–26u.²öC5Jµ*fv7s‡ä_Ñ-lÆ^´¦¸v`¶¨\áï2Æ[xn?ÐsÜÞbÅ ŒÜAÀs8Eœêt¤€3Zà˜Ž0 Î¶} ¢MޱZTð ò°;³ØW€e«%ׯ™bÚà„‡,h¥>®«ÝDT|µcÚÓ5-HK¿h§ƒ Q¾ì‹´vhnA¹Ë¢ÉÚ¡¹1qT7;Ì’dèCe¤´æ'!З ÎËN_ŽkÆŠrÜAì†"¬SÅÀiÑÉBð (Å_[å5¤óºwÙþ¼Š@MG :fà Âx Ð)#œã€cŠŒ;…¸Dœ›â$1é{± çØ†(DóEœóyHHfúé˜ê€‰ºNƀܱY‡y;ŸäÕÓ-uÄrgDsÒ^dŒ·àwøÞ€aŒ¾— ܦ€[pDa¶°!à„X¥¹Ž©0Åzv |½2dÊ LÙ”‘;%#ïÅ1ãK€.ìY˜7Hx×Hަv9î2{ȧ½Ìæù ÌÂwBÎb×cÓrJÒ×JÛ:X,· \›ÁØ:“]ÞçR1#t– Az€ä*W#° É ™™B¶zRé‘–Éòº¥AÇ!™ Böu¦Qm$ççÄÊ-MÎ;¨â§6¯8ÍÄÀG;ôqô{O| „SÄß—'Šéš€¢4Y>pA\Ñ9€cº@Àªu쌓µWÞ_½6¨€s™s­TAÎf¥n¬ó%„pÎÏ£ î"š9î1Æ{ãy]¥¯"¬\ánŠ÷2MOZ©>aE«ú5"ÍDV2 pseÞÅöœ~ƒ @ óF%±¤ƒÝœCõPÙ²èÅ Bœ7.§dg­§¼P6ˆ6ˆ ÌÒU*U…0jcß’#Ò®8ú[q9æUî%– XtìgŒŽs' œPô)Ù€p™Œ4Õ»d@ù<»Ø%oi9I4’ÓL}ÒËm·1M»ÊW¾èŠ1^¡LäÏc„ûÅ"b# îLÛeˆ–’–”Ú. 9 8Kã’xádªì3«Nפ@º±?gç kÞHjG”âüßZnâ"¾ Y6$P¢˜€‘’Ç'rËÀ6‡‘#ScÙGMÉÆX *vî`…@Lj=a—ÅÑkrà¢KC•ZáB\O‚¢h»'V\l£Tl¤\ë­°ƒ/ˆ’©#‚ôqê¸dêyndJƒj‚XƒúE€üE †¨«¹3RušØFÎãEÖÀX@›€sœý/1ÙÅPáu¤4ËtbÓq·MÚ–©c¶eÐ$âe„QÁº!²é+Fš3$—•ÛQmСþÆÉ¼1 ˜ÿVi}gqK&eH¨`­,Ãd¼'RÏ$Ûà!ìÑÒFŽCˆù.“X{Ròd[„:Œ&p¬$ó¼N6 0ô}IPcÈìJ.EÑýH¹ü‘¿M@Á4´Ñ*pÚÓJ´ê5JÅ“…¡@1sXhçs»|žRé(”}‰2CÖ”-é™MoÅñ*ž«¹E¦Á9Dñ\K_kN,·‘*  PƵl“É#ƒòõxKÀCêl iÀˆñ§9l~œ¹6’*¯¡@Ú3uŒ€éøk;ìH ¨àµ©/ NCõ gù«äº¡y-Fc½–³&´I˚ܘ–ôXýXp”Qý?»q™ú@!& Lb¤/köAÀ"b ¹¸e;â8# Êy´[£F=ä…YÉT‡¼ú²˜ƒ£Tþ2A€FùÔ®`!?›C2Jä1yèÉE°Ž~Üq~æÊ’3cÓà=ˆœ^´êô¡žnÉcAÊ~K¤óhj5xbò%ƒ¦УÊë̶”f1¡Äé{¶¬0ÒûT(F­¡5aô޶& nŽ¢ªÖ(; 9€ñ:Ù‚²„N®ùiÍÍ6K¤Ù¸,"ß$d²!}‰š¦ .80K– ”Ì*‘¡¦®.9œU³†ì皬$Ø‚À4¤•±%(/³׋qSV¾ôÍ\lÐ0 €Ö­+§Š&+| Ú¸D‡º´ÒHbÓ‘Ï3 Ûrl9±Sõ)¶•±æfeÏù«¤—ÖºA,àœB CÍkB ²€ôHTÅ>vˆ 3¦€Ú|ãëÙì•$“ÿª1”_:½4s®çI©É;ñ΀кB°n½•™‹â®uMuh-:9I=ö¬s´5• N$P™ú@É"‹dÎlNô—+–Á9O÷¿%`DÀ§šKC¤a™ê§+\ ýÉÜ’(ý‰mð(?^»”¨|¥g:ZÓëŸbÊÒºÎ@]ÁÚËÑÊâ\ ®#«ã”šœ3“€2ÀQ¾› ÈhÁ9ï‡Im@8³¼.餓׃~$ÏåûJÁ2ûƒ"U {ŽŽŠñmYÛ³jÉ s##¾` ͪÚb²šÀ;Îà}kÿšˆm@:R‰ùîYf½z0?8Øk©‹³¨GMý¯!süRl@Ù ØOÞIÔrõH§u8GÆLºŸºÿ¥Ýs SUþ.‹PSQÙ€—ÞKp«Y]()ú¤kq-*G-Î’iÓ®ªÔÅÑÝŶ ŠYÁçŽ @OHMŤVhk—u™ÀøCbE›^ ƒÉ `SìÊzÄMZ"er+ ã>ܪ@1UPzÕ&ȸ±#QFl0Â…D±w) ðŽÂÊ¥m;;«#½6\ª€PMQ7‡ik‰@Ž–ÕâÿTUvtLóVêz”Žq´9Ð)fh@É‹þ£A¸Þ+Á.rIãpxŒ"¿‚Б @OH¡„XQC a¤TL“ÖX£3lþ4Í’s -^ú§»AˆR0+ÌL“APßà‚ÚôSº9ìLŽwiÅtÉ!T45¥AÀµ¢I–©Þ“öÅy7d²é Í:˜#ëT‰k#v¤Í[‘Ì=¸¬­ «qn){³p²­3Ä£Óý¬†)“èœ$£‚Ï€ž€)6'-haÑÉðIF-Å™ýa+:9ª s¤ýœÚг.R0œÒk»Ÿ\êu·E÷ƒy`­ÎÛÑ"GJ“³¼ŽædÍÑI!•éö•yÞçÄCÛÕ% ³íüyb¶×5:X?ã–¿fEFúÑÀ>’wB ÈY¡ГShŒT ÌlGÒ̉q ¿ðŒ‰bW2Õ®kå‘1c*[0'¦ýAÅôíŠiÁ¹I;`òÆ–ú©H{@Í€Y^O¡Y£“³Ü Éiûw8#@Ïâð ä[_a¤b¥ –´Hoà¹Q„ /;óÔj–9´¹* &>‰ ­ioe{®Oê³Ëõ ‚g¡ГRŒ‹‰k}¢ÌëÐe¦ªlëïT{äe¬iá‡n@Ú¶†@š. ƒ6X؃¶µ¦méÛ•º;ªÅ³ìg9 >´îR<@féÆœ”™Q²š ߆Žw¹4"P¿æ$ÞØ4;Ô$PR¬7 ³fº2 ‰dWEÎ™Ž² ìrï™ÊÉîÅÝQè )„fÚýª.ެ·ÁÔ¿~ôܱ҆À¹c|@üê`{ÔJ6ƒÝî#\¢èâÈ  Ò\À}ÐQ>p…öSìD¿„t'÷•ª)#ýy]‚%)*=!… šà%*(oÃpŽÔb(0GÀfnŽà›‘-sÆ>Mv¾‚gYLë‹®EÃgö鎆°‘€òíé?6>ãœ@æHª¤¾f]ޤC°à¨ç=÷‚vÃÈF5Ψdͧ6¨ì`¦îHDŸ$CZ[¥{œ{uúÌÍܾ€P hA '¤€¦r6'ÐÝ^WSMÚ3A#Òý; — c‘¹ÅÉœ”©o!ÁÉÙZÕñ^ÿk›£ä3ÒcJŸ«AYsÛ;8óI„±=D¼$+fá¼ygŽíº8€¶ "K¼cNR;ÐK½¥ ‚[êÝm"ï-NÜB>ñZº t¤ÐR³PܨmkªZI”TÌ«tâî`€m\œ'1ß»Ÿ¤;«DÎYÐr0õçŠ{н¸³K¤¼Ž ²øH9sNÏ=æ¹"ÀnéR{ñ·»#è~€Ð›ÝµÌr X?[çæð„« 55 X¸ l€*Õ-Ôœ£í(YgwÁçŽ @OH@Õúw“)Ê‚®j NIæ1pf½€lˆòžãW‘½ƒÃ϶ÇÀ=hOxO0N}Ðýµ7ý.ÑE‰Z’AYdTA¤ã°§½¢V¯%°AÂD µê2ºN0¼?¬5=…)¤ûÊÃn/ÛåD[ rý”è¤#¬­½ð³èMõbAwTzBj ÁÑ@Âi—y¬'¦Š‡©(LCº¥ÌÄu„æZ<ª¹f !û¤Êã`y¸œÁœžU kTbJ–y{edð,~”å‘ 7*Ï&é8Ћ¢3TÛÁ‡Ä”L7¾­ ÷æzÈŠmç(ê¼éu•ø%Ñ‚¸¤ú†Æ dt]ÊÍävµÞ-)± žU¨ô¤Ð.T‘5ÑXÑSSP[HQ¨ )P4þ¾\Ï€s7}$Ã8À­üñ–7Ú´.v>@KøwÀ!÷³ PO²’æ\ òÄt–ÖzÎ ¶ûfe“¬çD[€u ””‚1·¢-HûÅö|ϱÈÖ‚Î}@$uß[ƒ¦vx:YˆTzBê|ЦFÄ íå!Œ”Í¿Ï\ž¤ðèù¢;˜Ìí— Ü¶éoþÄZJÐ4û¥,OPüR86šQ)»’ÐÂ(U…£<8;h¥À9h¸‚Ô@à»5öÜùÐ^'AˆO¤ó SKÚÀ»f4 àE±Ch‹,ÆY˜î¬hפ\²çòE[hTzB ]Ih7A‘íÓ‚²ÌK'D˜Œwe¥µ€Íœß•o²G!²eK!ÖZÊ$÷8š2-Ú)yVa#bA±¤}鯂³@«8غ6r=„ã֪͵íØöV ‰Ì-Î ¤[}w{Ö:òGRìÄšö–/ŠRGG '¥€dË«P=™ÂÎâ#€!Øà’ ¨VÂzˆœéóeu¿æÐj³at<ôCHkŠ‚¯¤L‘%`ä>«=îÁüÕw†º×{ísíT:NlÿAÙyæüÍloÕC´œ¢G Hñ«n”× Å™LT¥¬­l…"€žB·PÅZÎrv·ÁÉHpÖæHüÒĒ޾8;B bcжü°–ŒýévŽN½ã1vñÞ0çA™¥9¹‡€ÀVÊdVëŠáH`ô§*Óê¬Ý<‘®=Ô\–èßN³SSìºa/+²G±¿ŠW¡XЀžäRïœ`Œ¯kó†¬g2µ Ò‚®4•+asxè‡!Õ¶ŸngË– eL™ZÐ9ƒ5'Q*‚I_¨wÓS -g¢„‹Á!Ú›ÜVµA“˜VêVò×tûs Фs]Ò„QÁçŽ @gè¶ÛnÃc=†Í›7wið÷$l:†ff@‘›Ø‚·‚ÐZÏ–1ëdÖ”+wsh|ä mg û¢} ¦`m)˜Ç…*L^O Î}¨‡ˆ Ò^Ûàß^‡"j87T'¥5û©d{ˆà 5Š:æ–絬SQß–“3=©ÿ®%-€î¨´C>ø N9å<öØc*Ý –¤ð²k·këÚŠ(ëc„7ŽTˆM±Ã  a•º¨ét;€…òq<}Òk« "XU¥áê<‘Àë8":™454@ÛE|êµpvT:Múu§g‘çJå–3raFcý©E¹¤Zq|µ‰ÍÞL|Ñ…€ÐضmÖ­[§ÒV­Z…§žz ·ß~;î¹çu/Ú¶cAÇE}Y+.°6ÊPÉcfz 8Âî®Òtîð@ºFE†´â1 }í%/Ƙ¨ všìÑHKøJ#1ý“.Ësq´t;w;àœ”½åœ²•À]·×=¡§?B~/ÂxÈþZÍÜpܲ»¼Ð½<±P+V¬P. ¸ï¾û°{÷n\qÅxî¹çðÀà¼óÎì{k7¶ýŸÿÞ>±ôT|bÉi3§t%u±Ñ­Œ¤¬¥ÒcCè9|{á˽SIB ÐÀr°ˆØTuq‘ù¹‡VFKà1ŸD˜Ðè]õÚ·r)aè^'äêŽM•t“ýá/÷îØõÜÊÙœ×2¡oÕ=Ôú"SLBÏ¿ö¶¾ö"€}ؽo/{hAÒ‚hF+W®ÄÊ•+3338ÀáG-Æig}xýa?qÛJl޶ÓfúµcèM[¹fâôæâ€9wÐ9 ˬ×ZÃSÞÆ¤\ý7°ä‘à,uÍ8{zçHeã9 Aª ¨t Ȫ€Ÿ^è­o¥ô®¦O8(pfÝ+É­nòt‹ßvªýh0Ö³Û=Ðy}ÀiKOÀiKÿ€·ñŸû£}hÁRèºÿþûÕuv%¡@­0àâh¡É‰jžÌÅå°f{tqxÀÐs@HÞ/ÁÈnÛ+ý´'!#Ÿ*r%` é›ác WŒy{n÷~òÌ÷AA40'¸ü$Õ.óA÷Kî‡Ívm Å„>ö†dÃbA7c~¼< mI¹H • @OH•·s‰±ê†>÷,Nf!Ó â/M÷Ü2".GrÈ*¯”ù– ÛpÚ5D ÚÊé³Q,µ2B½½u\µÁ¾¨r=„ŠÍa“g!n³øZ)0;ŒÕ’T¹ªFâÖðl•tq¡âÒuÛÉ JˆFA_š[ø2ðþÚƒq¹ƒJ®™¦òÜkýí¹ÅÈ! ¶ìR†Q\J€Á¨ƒì©;vÁ ”‚²ÖdÃ9@…V}?`hKm®%VU·Ð[ع™… ° 8û%EÏ Ìâè¨ô„=HhºýêÌ-žpwTQ\äi~#*Å\íV;p r÷eaë×ø“)Ø)½ƒ“Y 6éÉ̲ÏÓë⨑JUGUãߤɭ®¼7¯ºcþæ½=G9ZÉ¡~*f Dìtú£Äj&Åvõm{ˆ‚Ï€ž’ivÒãÐ]‡Áyбiåí!Lî^…¦™t+ÙHë°?i}ƒõ ‰}ÖÆéÒ’RŠ¿Edž•±8r:§ENȶÆÝŒ_,Ý?Gç>N¶T›GãNÊÖ+!Ð7”Ú'=¤aå‹´dóÈ1ÌA”³s¥tkul]÷E[hTzT±hÚ¬çi ueæðº!ø¦»BÂÛ‚„'‰çâñòÈ:·¨dÍ_Î]‘©ÈãÁšÉÆôn´À¶ÏöÌ5a×ó@hÙ¸8’W€ ̆IŸ£UM¨ æý“LglЩÀê3S/0€ž\ ZÖÌvšéîò¯–é…w˜Þ@YÐUúXr„lð¸ 9Zò[œö¹»’,s„|ñ… ÔÔãLÑ-ËX®T€Tt!sQ ±*/+_÷)Wj?t+Å´ÿ;¼yB*€3”1]Çä5Qê ƒ’\ùº¹Ð¨ô¨b5ádæË毮“±’ú`‘ZKÂtk:J´²™y$!€É6‘Ns×+º†b¤9OÊ7H)À §Ø±ÞA‚ð@ñu„Ó4LûŠéWLj%È%Þù¯—žig)·"£,:%ó¨‡v°pXÇãßÎB¡ÐR¬˜^Í”í¸fÒ_èªÉÐÉÀb²8!‚Rt’àÁؘ۾Ü~\ŽapÖ¥Ÿ¨Í²/¡ó1}Óhž±%Â\MiȬ–±ldmˆØì¡|´tmXA„v—DÀ6.©ÿ¨ë`8ÖÉcÃp› B]ŽTzTÙZHÀ£ñ4 Û2HisZ‹m9 ‡J1ÉŸ1GÏ19,OÂpBäGƒ£¹žIÇ8hÅä^gjdÎ-ê îF Þ!XÚ…A]åsMµ‚NËÖs×bu^(Rè )ÍŽx$px»OiµDr-*ð¨…+ì“›4¶”M²ÍœÕ¦åö æ¾P"„•Ékùò«%ÐdÊ‘«"¾”ÜÓŽþíìD€š3 ɉºÅí]ÖÝ#ù’2ŒÙÒ˜„;QAMê5s%©þ‡»÷bYpÖ K4»ž @ÏØ.HlQÝ¿¦ZÀœüƒÍ(Ã82uÀ™áHZ\~lâAòŠéyÈÅaáô:Wê`– n¹%ŒÑ¼L^úP±ks³Ó°ÌgqبÌ}NÙåÞ²˜&M¾6:€#Á+²áO—YŠTzBÒ±8@ñQâd²º<&p~‘c[’gºƼ„Yn¹"+ûŽ"«-—(0ß¹ ý 1Ýå€,{dH÷^™_x_1l;qç¨åTó´L|^‰~ìX οüÚ&GPÍü\Æ*Ë9ŒàÈÖ’›¬˜ š @OH ¡ÓHçBL5D‹±Wô¶jòŽjT?•v€Ðrg“ÂRгå4)9Ý2¦­jr~ÐqœÙÝ ãZ0÷\] ¸%T²OmÂÙwU37¼:P'±-úë„=aÄ6±!•1ãÞË2ìêz! ôœÈNÞG@ºm ñ4Tn~¶BÊ ò ,¤Ö1ÝÇ92inCðd±(ÛSà ¤§c„˜$ö=4çœ\ŽÇ|­xJgKÐ[Ýá¯(”.ŽÜ.*}ÝœdOÜžÖŒQ,¦¹NgqðÁ©j–TR·‚.X*=!54¤(¯Å̧p® Ò ñTð~Á@C´ŒÒ4c›¥½Gn1ØÕ^Ïþ¹á: Qwl±ã—Šè“<–•+¥12‹£‹”a,©l} Ri˜%-]Ãþ•¶,„/gÞ•­fà 4щ T6µåë8QWÍ‚¤Ðs .¦ ó2ˆššÇA*¡Ól@ª»©Ø‚ñ˜3Å(m6ÈüŒ{=£=~‘-1c.¯ߊ·A/ËŠpuR‡غ“ìÒzÏÿc_¥3½ŽsNgÓ4.Žn+ñì À N%“Ú¿µ•UV9S§i·àl*Ÿ«sÝ“‰S¼Ph‡¦§§ñÄO`Ñ¢E¸á†°dÉmÅÌ!W4bãAäVÇÀžÈ1”Œƒ8¦ì¯óˆlØž4|ym™8%×N†É]¬¬)3O€¶Œu{n#Ø-6é¡å#ú§©〒Çnëë—|hË«ÀŠ,X±¸'Š+©vŠcnÓØÍ.¡ЄvìØ7âÌ3ÏDUUX¼xqw/€4ÃÊaÍÁMŸ,\¤#i棓µUfÅðð$ÇM^GÐà38†€/äoYfÒ †¹å8ò÷à17ï W–r6‡'güÛdË\L1îsŸâ[Ñ='Å˾Dù|ÙctÕÁ"×I¶)ÏD R·…€ÐضmÖ­[§ÒÎ:ë,qÄX¿~=6mÚ„M›6aÍš5ÍͶrz54Hœ4ûrù«O<ˆ$€¡˜ÖzÆcLˆ„ÄYp?´‹¦$]2Ç8ó]qkä,ûXÿSv­,#ã@Û©#–)„®‰jºU›Cú:‹„j{wÜ›Zh´àzÅŠؼy³J›Å3Ï<X²d ž}öÙîÞÞ7wá©?üo`?pÜòÓpÜq§§5µ=—3°tƒ)¬jZ êÌü*Xf¦™Tý Þ $åð§‚·’ð}49ŽXÉa®Fâää2xÌs&|Ü…C; Äü=èí¬ÆXÏ@è—s{e ~Ÿ$ãn-ï€Pë¡É”gwæ•¿ãùW^°»ö¾Å•³iÁ4£N8ŸúÔ§p饗bçθ뮻º{‹>~4þçW.ÞEsìCW+-nZœôšŽ¤ þ³-y"{ ºkEcÐ)¤²äŽƒF%-ËA¨€K‹-L¨Xä©,y˜ÊI1扃…ÑK”3PÖ„lÿ4˹°¢l¸”/õfÅ$­«ÓqÃXVL˵-we‚Hé§ûüÇñ+ðÇÀ>üöOÿ5BG ƒ @;ôý«•„€  VÆcfŽ Ï×kG'‡ÇŽb‹”‹µ1Le~„ÓDeÅ1y˜ìS.âöçêÒ›ÂUá2÷ä3ÖÉ”WÔÐÎÞjJ2sßÉCDyYùÌÇüZh@- yyvܦ÷Ös£}µá0Sݤ;‰Íäùg«Z²@Åê¦PzNTÅ[;A3ѶWƒd[c9yaôHvMzàÉ$m'GúAû+ufÁy c,ýõŒ ‘Ïí„Æ€tÔ·TFÆßœ(×ßËe¨øÖ”÷ÿϱöía¸Ng¹ØX–Ùûhÿ®TzB èq2 AÚîP`¹$ó”›¹1• Zþ³ø‡e?ÀÅpì‘σ¶LœFX£—ÛêÂgœÕ3Ó`@‹¡eÌT{rKæÆõí sÞ¥ÕÉmÆUr·î¤`ÑÔYÿs†‘µ ³ÀÙMÖódÙ¹9jÉ´Pzr ,I|z«Š’ìhÈ;<•\«8§±†\À™6àÙP±ó«Ù,S’H1mšu=-²¯†0‰ºš̲0Œ­Žù¹d_OãÈ£M'»ê¸!1döæã¬ÿL‘@ïA8HR®Î’ @OH!c,j¬;´Ð,S"#8¿ô„ù™í¬f“sœÓr•QsQRXFd5ÍŽáb¾ä¹_YæDß¹‰D_ìVcéÛàs?Øyšœ`£È:æLÏ,NKü}®®Ë¶Ô%`O '¤ØH\´Šçäë ' ×±LcKŠ·HK±Y6Œãn%©ÑDXKãq0†™BÀÅ!Œœ#g"ˆ—£xÉÞ¶ÖSÉ.WdO‚>’®¹¼SŽEçÒ¥GNÖôgynÞ Ž‘b.*=r¥)àˆ í´a4ÆÀŒiA±éxƒ„ –ÿhÎN¶wAÎ3 =Äòô-fÎx]B,¸Î‡˜½{àì½ÜÐþLRòwh1¢ˆŒéN§4¶Ì²‹ú ±ãÆÒbVÔÕÁ^´e\(='ÊM?NÆÈ¨70i´ ìÌ‚v»‚„äl€£8gñ @Î9?ú¨'„`<„‘9ìL)ÇÔ¾ðŒ®sLs¦æàC—ò~¾[²¿ô8¶)³Z°ãJ²Y!XŽâÊ B]¨£ÐR¬ cÚ°² Û߯Í4Á®e¾=G}`æ>Ué5Y`kµ8! ÔurÈ3±ýVAîÞÑøùu¡¿©½$A\³rÄ몱8‚òÄÊ’±Òv¥!wmñÚLi Bh Å$„ôZ”K]7Êèô-õƒZpú¨º÷.гÕwÝiBjW¦E9ÌÌ·ZÓjL%G¾oÊÕi¦îÈ4édz! ôœ;í ¹ ”IDAT(;‹C´ˆ ­@MsºúfÖß5-E2³Ö5¬úsˆkq ÈjZI ® ›t<è>ªÌRÀ§ä¯¦Èb¿UÝ'[9™gV²Ý½&µ]ýûÎÐÛ-Ƃշ¢0B¿0×U|Ϧ^Ô1ïDn«Ý ±PÉ¢ŠŸT=Îâ•t3²IUS¤|„Œa¡H '¤Øpú èóÌYÈG¯ŠiS²•–´ÖŠdËI à2¥Ž?4`poµCÞ£¹kˆüè9¬&ˆ|ÜËxhšŽü:C¹b{%N;õ„»N¡ÛDÏ}‡:]|ÓüõÖ4yË,ŽŽ @OHæå*vüêÌ, €ù)È=$UUÜ–‘ZB0˜ÂÊœ‘‰σ`¾Ô;ŸC©˜²lvëÑà>7Ê ™’Ìà Ð-®x t²Hå03íÛ+¦‚´tºÁæü±¬ËU•ј·{Ls –4RÏ]{°éf…áxæ…"€ž"æé¨JÁ¹ÃJøP›ƒ4þ¤þE?•M®&«{!‡0Ff=EÕ7Q< ÇÌàð4â<28rEà6æÎ¨Y_ªg9ÿy®E¦¶žÈ¬æ76Gm!œd3&:£*®«ì`܆a™ÅÑQèIÉ4¾®â{ྠVHõÙÄyÐäÉdD2æ*{瑺πÙ: -Ýðh¥€ÎÃTNŠœ¼™’Gµa+Ž ¹Á8éë1Œr $¥JôÆíÆêÙ–A–“‹P³yð… @OJÍ*®5µm¸á@ü]ÿw\“±i8Ábœ0<ÏFÓd3P9„TŽŽsEeœòzŸ@ˆ!t`¦gɤ›¬r®c*ŸÍé¹sÛöÿ2šÝ˜eÞ9Uð7¡5º§Ðs Š—,­­Ôc*rÚ„‚aä{¨EBŒÉ¿öœ”‘Ã+‡‡Ö±’‘‘ÝËâÉ= ã\½a®<²BäÐ*WJAüïÄYœ7𾧈ìÂÈ⎬Z™§X96€žõA4È9ì9­Ÿ^ãs 2ׂX»p¨ÿùx»mø‰8Ê&ù á<žr6¯<™UHcônTJµÎ¢<çôšÓsHOÇ(Mê9¤ÅÎýœóy z,$b+a ¸øâ‹qùå—ã›ßü&^}õUuovëL_YçpÈ /ÿ¦+ÒffŸÎföFözffMóâo#T0éãþÉÜ ®gg¶¦÷Òs/M’¢ÊëfgR<ËžŽ½ Æ3Ûf¹žÙ‹'Gªg­ùovf;‚s/}[#‹ë{vûŒÖ· œèè} ¨æåöŒwýë_™–¹°¨4¡×^{ {÷îÅwÜsÏ=O>ù¤º?û·™<` Tܤ"g– ÏÌnu*öÓô|æùÙî:‚³mÞ^ó}NÛg¶rààÀÒlñÄ3•½×Þ|aûL¢‚´ø$C¹ücfÛvÿe;ˆÅà3Õy ij3wtËÙÑž;E›%F‰jVÜÿùÏã°ÃâE‹pôÑGã裞WYvíÚ5ï< ¯Âëƒæµk×.ìÚµ ðüùË_æ×‡‰ @Ú³gÖ®]‹ã?/½ôn¾ùf|úÓŸþ Å*T¨Ð£Ðs ‹/¾‹/Æ+¯¼‚Ÿþô§X¶lÙ¼ñšžžÆOò‘ƒÊcÏž=øö·¿Å‹ãØcÅ~ðƒƒš¿¤?üáøÕ¯~…ýû÷ãä“OÆ 7Ü0o¼`ÿþýøÚ×¾†³Ï>×\sͼñ©ë×_=^ýu,[¶ 7ÝtÓ¼ñzå•Wpùå—ã¸ãŽÃ›o¾‰»ï¾{Þx}˜¨ NHCˆ“vìØ7â£ý(ªªÂâÅ‹ç<øàƒ8å”Sæ•,[¶ ÓÓÓØ°a–.]Š™™™ƒÎãÞ{ïÅ׿þulذ¯¿þ:fgg:H_þò—ñóŸÿÓÓÓxä‘GæO¤ÿøÇøÆ7¾1ï|~ó›ß`ëÖ­˜ššÂ±Ç;¯¼ž|òIœsÎ9¸ãŽ;°oß¾ÎݱÐiÁæhÒăÍ묳ÎÂGõë×cÓ¦MØ´iÖ¬Y3/¼V­Z…§žz ·ß~;î¹çž÷Í#ÇkõêÕXµjž~úiìÞ½gœqÆAãéå—_Æ9çœ8ñÄñÒK/á„N8è|$MOOã /œW>ú(–.]ŠSO=;wîœW^333øÜç>‡k¯½ßùÎw°mÛ6¬X±b^x}öÙøêW¿ŠÇu]ÿ·ùÖu*¡+V$Ÿú[¶lÁ–-[ºÄééénñ`óšÅ3Ï<X²d ž}öÙ÷ÍÇãuß}÷a÷îݸâŠ+ðÜsÏáÀyç7/¼àá‡ƽ÷Þ‹ 6¼oŒ–/_ŽíÛ·ã‹_ü"¶oߎåË—Ï ŸH·ß~;?üðƒRrôÀ`Ïž=øýï;vࢋ.ÂÉ'Ÿè é¿{ñúë¯Ço¼;wâ®»îšw4œþùíË€Ñ /¼€/|á X¹r%ફ®ÂI'tPyìÙ³—\r Ž9æ|üãÇøÃƒš¿¤_þò—øÞ÷¾‡sÏ=SSS¸óÎ;çW¤G}üãqõÕWϽ{÷â’K.Á'>ñ ìß¿?ûÙÏæ×_ÿúWÜrË-X¾|9^}õUüâ¿À‘G9oü>,TºP¡B…Q*ƒ„… *tˆRèB… :D©t¡-=òÈ#øÒ—¾„Ë.» ]tÞzë­ä™—_~·Ür ýý¥—^ŠwÞyg¾Å,ThÎTºÐ‡–B¸ð ±~ýzœ~úéøÓŸþ„Ë.» W]un¾ùfÀúõë±fÍìܹ7Þx#®»î:üñØ»w/Î?ÿ|üú׿þ€KQ¨O  }h©®küö·¿Åš5kðøããÎ;ïÄÒ¥KqÔQGaëÖ­x÷ÝwñÌ3Ïà„NÀ’%Kpë­·bß¾}ظq#Ž<òHœuÖYx衇>èb*äR™]èCK!\pÁ¸æšk°víZüýïÇÚµkñÉO~²{æÀ>ÝO~ò|æ3ŸÁW¾òÀG•ØÃ…a*t¡ ºõÖ[ñ±} W\q®¾új\yå•€cŽ9{÷îÅ–-[°aüøâ‹¸ñÆñÎ;ïàÙgŸÅg?[f˜:t©Ìƒ.ôoM=ôvìØÕ«W'÷nºé&¬]»'žxâ Y¡BÃT,èBÿÖtî¹çâôÓO§÷.¸à‚Î…i*t¡B… ¢T,èB… :D©t¡B… ¢TºP¡B…Q*]¨P¡B‡(€.T¨P¡C” @*T¨Ð!J  *Tè¥Ð… *tˆRèB… :Déÿ2¡ƒÂ¥!úÕIEND®B`‚mpmath-1.0.0/doc/source/plots/hankel1_c.py000066400000000000000000000001531316273626600204160ustar00rootroot00000000000000# Hankel function H1_n(z) in the complex plane cplot(lambda z: hankel1(1,z), [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/hankel2.png000066400000000000000000000647341316273626600202700ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxTEûþïÝl:$¡·„R}ÅòŠ`o¯ JQA@Q¬Ø¨‚€"EPi~A”"U J@BB i¤÷Þw³õ<¿?†ÝdIÛrv³ãï|®‹‹äœ™;gÏ>;gî™gdDt@GHHHHH¸ °à|Oc ‘0GÞØ$$$$$jG Ð.Š %$$$\)@KHHH¸(R€–pQ¤-!!!á¢HZBBBÂE‘´„„„„‹"h E Ð.Š %$$$\)@KHHH¸(R€–pQ¤-!!!á¢HZBBBÂE‘´„„„„‹"h E Ð.Š %$$$\)@KHHH¸(R€–pQ¤-!!!á¢(³ñ“'ObÇŽÐëõèÖ­fÏž S§N…B¡€Á`À† S¦„„„D£Ð¨=è'žx7nÄæÍ›qúôiÓñ3gΠGX»v-ºté‚3gÎ4žH ‰FÂ%†86oÞŒ—^zÉô{FF;wFzzzcI“h4uˆV¬XOOO¼ÿþû¦cAAA ¤¤¤à‘G1+Ó­[7øú¡´TŽÖ­ }ûvBii)|}}¡P(PXXˆ-ZÔ~ìÖ-øfgCѳ' ÝÝë~Ç®¤\A9•c`‡Ð”kÌ^WVV"rH»™g2áëë‹€ûD©¯ú±¤¤$tíÚUtÍÎ8–ššŠ:¸„kŽi4´nÝÚ%´ü›ïƒÁ€ŠŠ ”——£²²QQQNõBDW©‘øí·ß¨{÷î4mÚ4z÷ÝwiýúõL‚ ÐäÉ“iÆŒ4eÊ”å DD™™Djµ•j4D‚ Î`kÖ¬i´¶íWÝDüjçU7¿Ú‡ÚØÌhÔôøñã1~üøZÏmܸ±Îr>>>hÑÐjmhT.ââ• 8І ¦D]‚c‰ÇÐÔ£)žëñœÙ9ãÐ#PÅ«½1þÿõGËa-E­Û‘º ¯ÚyÕ ð­Ý•p‰1hk!";¼ópþ¼•…Ë˽{‚‡h^o…7úµéWãœÁ`pX»Šf ~(zp«ÛÑðªWÝ¿Úýýý[‚2"º àžÆb 'Nį¿þÚØ2DgÐA!W@&“9­MA'@yM‰&÷5qj»ÿ\-¶pÙƒÖëõˆŽ¾ú 8xІ ,&L**D×fdÑ™E˜ò×ThÍÛP©TkÒ§¡ô\)HO¢ÖëhÝŽ„Wí¼êøÖîJ4ú,[P*•èØ˜>hÖ̆ æÌacÑdöàÙµOKKC¯^½ÖnçyR¯£u;^µóªà[»+ÁeÚßßMšmÚØgKJ€ÐP )ItmFò”yXýÏjüqã³ã޾i++ûV,r¶æˆZ/Ï6^µóªà[»+Áe€.,,Db"ëAïØaCññ@BàÀ1Z¹LŽĈÞ#ÌŽGFF:¬Mðìà‰ž?õDÛ7ÚŠZ¯£u;^µóªà[»+!™„&_™æÞÍá&wsZ›Ú|-Ê.”¡ÙÍàæë¼v%$xÇÕb —=h½^¥˜7øþ{*(,ÞxX²DtmÕY|v1–œ[•®Ê0q†yRt¨‚ZõÝåÙôáU;¯º¾µ»Üš„^^À¤I@‹6TТ°u«èºîäËG¿¬qÌæIÛ‰âo|›>¼jçU7À·vW‚Ë´¿¿?ÜÜ€  @§³±’¨(`×.@£U[u2Ê2ðù‰Ï±éÊ&Ó1gÜ´š, ¢ÇE#cu†huòüaãU;¯º¾µ»\èÂÂBÀ'Ÿß|cc%7oM›:Ô(ô÷ôÇŒfàÍ{ß4s†yâÑν·õFàûâ-·åÙôáU;¯º¾µ»’Iè`tnæßDßV}áîæî´vÕéj,„ÿ`4é×ÄiíJHðŒ«Å.{Ðz½°m0s&•eC%—/3£p×.qÅÝÁª‹«p<ñ846”â,óD“¡A“{šÀ··¯(õñlúðªWÝßÚ] nMBxê)àÅ›ò›Ü¿SŒÂOùÔìwg™'þ±‹¢ÍÓ£µ‡ÝõñlúðªWÝßÚ] .{ÐÆŒS­[³!dµÚÆŠBB€~HܼÕI)IÁ䃓ñëÕ_8מ?l¼jçU7À·vW‚Ëm4 ÷ìai5âãm¬¨¢2D4]µÑ®I;üðì˜xïDÎ5Oº}ß Ý¾ë™Ü~#”gÓ‡Wí¼êøÖîJH&!`0 Çö”¨Kp6õ,BkßÖkçNt…:d¬Î€Gktx·ƒÓÚ•àÉ$£I|ü1ðçŸ6Vtâ3 CCÅW ÇA©SÂ[áíTóDî-G›ñmÐþöv×ųéëv^u|kw%¸ ÐF“°Kà‹/€—_¶±¢'Ÿ~û xâ ñÄÕÂè¾£ñÚݯ¡‰G¤¥¥9´­ê¸ù¸Á»›7*®V@“iß‚gê^µóªà[»+Áe€6š„>>€—P\lcEDÀ–-v¬v± A‡×÷½ŽÙ!³nž(@ññbÀÎahžM^µóªà[»+Áe€6š„99À¬YÀ_ÙX‘LtêL™"ž¸ZpwsÇÖá[ñÍãß8ݼjçU7À·vW‚Ë]Ý$¼jçU7À·vW¢ÑtFF&Mš„xÀìxJJ úöí‹éÓ§cõêÕf窛„ÉÉÀ²eÀµkv ùä`Ý:;+i˜f%Í0{ðltôïr`êÚðîæ Òr·ç‚ ֵͳéëv^u|kw%=@bÓ¦MfÆÈd2øûû£¢¢íÛ›gc«þÚ®]Y€~ñE;…øú.W®ØYQý 8kÃ×bìÞ±ÈWå;´­ÚÈþ¿l(¬ŸE³éëv^u|kw%\v©w§NAðÌ3Ïà¹çžƒ¯/Û_¯ºIŸ}”–ÚÙ¾y“íSøÂ vTÒ0*• “LÂôÿLwh;uôQÀPi€›·›ÅåT*|¸Þ‘ðªWÝßÚ]‰FïA7„\.‡¿¿?tºªù»IIIعs'öïß={ö`ölàƒbMαññ*6ÖŠcwݼ÷"‹‹"ëÊZq,-- Q×¢’‚·ì6ê;FDŒ¸ùqV•=räˆSô9âØéÓ§]F‹5Çââ¬{\éO÷Ë•+W°ÿ~,_¾¥¥¥p%}G•J…>úGŽÁsÏ=‡ ((¾¾¾Ø¶m ºté‚Ù³g›ÊܹëAy9šÊÓ5µmã›o€èhÖ·«¢†Ùv}†vŠ~Îßé„e, ‰®¶£J£qøøø`]cƒ®õxu“23×_·3®~ù%KAê@"##1pà@Œï?zAìòl´kÚΡmÞ‰ ½92™ fXöaÔÍ#¼jçU7À·vW¢Ñ´-Üi(Ž'RÅ••À‘#€N¼úªH•šc¼i“‹“1'd^»û5¼ØÔ^‡ÓJd@ÓMá÷°ŸÅExþ°ñªWÝßÚ] —ƒ®;Mˆ`âD;ö&4¢VZ-ðôÓvVT7Æ1°.ͺ`Ûˆmx±§“ƒ37_7øÿ×êd5Ê/[¶z’ç•a¼jçU7À·vW‚Ë]}%!ôïlÚŒegÅÍ›¯½xz%%vVV;ÕWX]κŒ)MÁÅŒ‹i«>”7•ÈZ—E Ë¢x^Æ«v^u|kw%¸ ÐÕW€›[°"ÊæÃ‡3Ý`ÕWXuhÚ+ž^tH[õáÛ×Ý–uƒWg/*ÎÕÊóÊ0^µóªà[»+Áe€¾Ó$Ôé€mÛ€¤$*î9Öïß_„ÊjR}…U»¦í +°íú6d•g9¤½úPF)ýJ4Ê.–5øZžW†ñªWÝßÚ]‰…Ièé Ì›'bþÉv¢ýñGѧÛÝižì‹Ý‡&MÐʧ•¨íX‚÷]Þè³»dÌ\áÙôáU;¯º¾µ»\ö ï4 –ú7€âbèߟ¥uÀ\è;Í“±ýÆbx¯á(VC AôöêCî.‡6[‹ÄY‰(<\Xïky6}xÕΫn€oí®—úN“>ÿغhÖL„zöd&áÉ“"TfNmæÉŠ +0ÿô|Th+Do¯!È@h7¥Z<×¢Þ×ñlúðªWÝßÚ] .‡8î4 –‹#.èÐ ²³ŽíDkw¦šÔfž|øà‡ 38¯ /ŠCŠ¡hª@ÓûkjàÙôáU;¯º¾µ»\ö ï4 –ëèÊ6ÙnÜÝ+€ÇjN±‡ÚÌ™L†Q;ðú¾×¡3ضg =”/ƒò†Þ=êÎͳéëv^u|kw%=‡-8e½|\sGFŒpl[næÝD¯–½à&·<ÜØ* Ù”ŽTBâ߀«åâà²]›I˜–L˜Àvù….]€íÛEÎu™'}[÷ENEÖ†¯uz"(>QŒ¸IqÐæÖþ³éëv^u|kw%¸ е™„AAÀ–-ÀûbíÇêáäçK–!!"UZ¿y²õÚV Ô(ãÑCÐç>ð¹Ë$Ôü‚àÙôáU;¯º¾µ»\èÚLB™ ˆöîDë€Ï< "R…õ›'_<ú´€Ä¢DÑÚ³™› êt5b'Æ¢ðPÍ1~žM^µóªà[»+Áe€®Í$€Ó§Ù²oÑtŸ>ÀÀÀ@n®(UÖgžÞ:ø‚o‹Ò–µ(üèö}7´ü_Ëçx6}xÕΫn€oí®„d6Ä®]Ì0œ6 håøÕ~D™LÈeÎÿþtr·åÐî-çæ©–hl$“Pj3 àøq–´ÿØ1=˜3hÑB”®yCæ‰L&ÃÊ +1õï©b* Pø+ÐöͶfÇy6}xÕΫn€oí®—º6“žz øí7¤sÞ¼™¥!Í·nKÌ“½G`ãÿ66ŠYèÞÌ­F´‚&SƒÜ?ª†ux6}xÕΫn€oí®—º6“8u øýw‘|å6ÔѺµÝUYbžt è„k9×0#xô‚¸ e,AÐ ÈXž¿AU;®ðlúðªWÝßÚ] .t]&¡L¤§¢ßMšááÀ‡Ú½TÑRó$±8ó›…Üù‹Färt_Õ^]¼Pzír̳éëv^u|kw%¸ Ðw¦5"“±Å*Š8“ÃHn.0k›m–¦aÑ{¼°ýúv¨t3ž—ð^*ã+ð>’Wí¼êøÖîJp ë2 –¸ÿõ×ÙÌ8QyñE6‹#8Ø®èoy²öòZx¸yÀÓÍÓæöì¡ûšîh;¡-´¹Z(Ëk÷ç^ +^u|kw%¸ Ðu™„0~<3 ²!Êܹ@Yûԇ5æÉûƒÞÇ+}_AJI ”ZçH™L†¼yHü4É1ÉNo_,x5¬xÕ ð­Ý•à2+N]&!(•Àþý¬“;~¼È /^Ìþ/)lªÂZód×Í]I ÁâÇþ6µi-^hÖ¯¶AÐ{ò÷ΫaÅ«n€oí®Ÿ6ÔmiÑ‚e uK—²±hmiA­5OFö‰µ/¬…¿—?Ê4öõÞmÁ­‰ÔijìyvE{º"¼V¼êøÖîJp ë2 À×xöY6\lhx³jëùðC`Ö3Ú¬5OÜänH)IÁ+»_Áµœk6µi/nMÝ0lû0“–/¦NèhÛ†§'pâ[¸RÏXx]Øbž´ñmƒ­Ã·âÑN:}ßB€-^Ñzj‘ùs&2Ve8½}{áÕ°âU7À·vW‚Ë]ŸI lÚ$ʺ’ÚiÙøõWÖ]·[Ìowox*<±èÌ",=·Ôêòb––Ïžè0³C£,A·^ +^u|kw%¸ Ðõ™„™ |ÿ=°s§ƒÜ{/ Ñ°ñè‚«ŠÚjž¸ÉÜð\÷çðå£_ÚTÞ^z÷í–ÃZB›©EÌØèK¿ÂÑVx5¬xÕ ð­Ý•à2@7dzy±¼Ç;PDp0ðØc¬7m¶š'2™ ÷µ¿Ws®â½Ãï9½kÔ­ŠW¡ÛònPøó3ˆWÊWÝßÚ]‰Fý”edd`îܹˆŠŠÂ¥K—LÇAÀÔ©S¡P(`0°aórõ™„ì<û—ž´oÏrD‹Î˜1ìÿK—ØVâ:XTÌ^óäfÞM,ºÐ鉔Œº›=Þ D„ì_²)Iy5¬xÕ ð­Ý•hÔt`` 6mÚT#àž9s=zôÀÚµkÑ¥Kœ9sÆì|C&!À¦,ÿôPY)ªdsþú h`È¥:öš'ãúC&Xzn).f\´«.k¨®[P ûÈÑvRÛzJ¸¼V¼êøÖîJ¸äGFF;wFzzºÙy¥R‰9s؆'ƒ#G²Mc£F± ݤ‰…,\(làÛÄ0O¢ò¢Ð¿M<ø ÝuYJuÝn¾nh3¶ ´™Zľ Açü™%ÖÀ«aÅ«n€oí®„Kè   ¤¦¦RRRdv¾¼¼¡¡;³gÏîÁÞ½@BB¬é[ûèÑHÜuàé‹®]UX¿¾jL,6¶êu¢;v ªÑ£¬,‹ÊöêÕËîvïm{/ºº"25KÏ-uÜßVí˜ñÿêÇÎn?‹. » >1ÞaíŠq¬ºþÆÖbͱŽ;ºŒ1îWÒWýØ•+W°ÿ~,_¾¥¥,{£Ë@DW©‘P*•4uêTêÔ©M›6Ö¯_OÁÁÁ$Mž<™f̘AS¦L©QîÅ_$A */'JN&ºt‰H«­:EôðÃD>>DÑ_˜—ß°hóf¢ü|þ½žý#"ª¬lðå"4J$}}úk*®,¥¾†¨OwæúLÊÛ›ç¶ Ö5w6¼ê&âWû„ [‚ÿê= Õj6DÜ»7p÷ÝìÄF$är¶a÷ñãìg›Ñé€>ºtaÿ;ƒ`ÀÊ‹+ñæ½o¢…Oýæ©#З葷#í§µ ™Üù»ÀHHˆ…´'¡Xblg•ìl ]µ‰DÀ/¿°=`Û¶e3<ªçÔT ¸ØJAîîÀgŸYœÅ6OöÆìEæ=œëÒ­P ý´öÐæj=:† G¬¯·^ +^u|kw%¸ Ð ­$42iðþûlʹœåêX»ÈÈþøÃ¼Ì§Ÿ²so½DDX!*08rxçzóE‹mž¼Ò÷ ë5 1ù1øîüw¢Ö]†t+£•趲ܚ¸Á r­ Í«aÅ«n€oí®—º¡•„F”J¤.¬ý¼Lf¼‰X¯Z.gKŰº#°j«¸±ÂŠˆ°óæNL½oªèuiHw³¡Íàä…ìMÙH_–^ïk ¯«ÚxÕ ð­Ý•à2@7´’Јë)Ï™cY½2°z5•ÅæPÏ™Ãê0rëPQQOÏ>Ëö,üðÃ:·tqÄ +™L†ùC棩gS,8½7rÅÞNÆrÝ^½Ðin'jÁe–ƒóºªWÝßÚ] .tC+ Èd, îß$$X^¿Ÿ©øä“ªcDlñ`×®ÀŠõ,€‰Žf;ôëWëiG®°ºž{÷¶½ýÚÔÞ¶=Xª»Ù“Í /Ô#z\44éÑuد«ÚxÕ ð­Ý•à2@[jÀõël’……1½N”J6¤ €eË«sC€î» eÝñ;p¤yroÛ{1¬×0ÄÄâÝàwE­ÛÝ2Oº¯ìß»}QR CeãŽIójXñªà[»+Áe€¶Ô$€¡CW^1ª°…&MØ^‡QQ¬¾É“ëy±NÇrtL­9&ì ó$,= ‹gÛsé ¶íür'ÖèV4UÀ«£ŠO£`_ä^{›ñjXñªà[»+Áe€¶Ô$4òé§l6‡ Šä>}€]»Ø,# Ëß~û€»;kT¯gÍjªõažL0 ~ž~˜z>þŽÿ[”:mÑÝtPSt_Õ‚Z@ÚÒÆûÀòjXñªà[»+Áe€¶Ô$4òÝwÀúõv.F©‡ß~c¹§ bcצyÔÛ·/½Äva¹³Ìµ^{ÛÞ‹—{¿Œ ‚¡Ò€Ê$Gæ5‡WÊWÝßÚ] .´5&!À¶|ì1 ?Ÿ-ýv­Z±±îêÌßÑ _(–AUª–-CÚí,}΢}ÓöhéÓë.¯Cdv¤Í‰þí5}d2‚> Ü€[ïÞ‚¾Øys¤y5¬xÕ ð­Ý•àgߢjXklö±c,G;'mR^ÎfÚ­Y‰gW>‹Þ½{;§ñ;Ûo,ü<ý§ÌÃßñcÒ€IV•Íô! pf šÜÓŧŠ!÷Ãÿ¿Ö¿ŸÖÀ«aÅ«n€oí®—=hkMB€-ò[±èÙÓ‚ê iS6ûùç ¾Â¼ƒ÷!rÃàäI牸Ÿ§`nÈ\<Õõ)€@–OkËô‘ÉehrOTälÎ߃~4Èà8óWÊWÝßÚ] .´µ&¡‘ ØjÀòr‘ÕC` ð÷ßÀÆÀºÙ˜˜È¶i$Ö¾°AþAØtevÝÜeq9±M77ôÚÚ pâ߉‡*Þqc–¼V¼êøÖîJp ­5 ŒÁR6m*² ÉØÂ–æý¡š7Ðé3c!~Û"Ô—øÎAZdÐt(×”ãÕ¾¯¢PUˆBUÃO$Ž0}d2ôEz´Ñ ¾½}QV ]8 kªÃ«aÅ«n€oí®—ÚZ“ÐH‹,‡ÑîÝ" ²‚´´4?¯ÅGÇŸÇå3ƆüÓvâîæŽ™΄R§Ä”¿¦ LSÖ`G™>î-ÜÑâ…P§ª‘±*Šæ Zq÷8äÕ°âU7À·vW‚Ëm‹I°ØÁÁ@cú½zõ‚ü“1uÃ}xµuÊwÂ!â¬r´¹LŽ¥O.E—f]°'zò”yu¾ÖѦgOô\×ñSã¡É/ѯ†¯º¾µ»\h[LBðð>ÿœm¥V‹,ÊBŒæÉc½óðëØchñÚÓøê+Ç­r¬wôlÑW²¯àLÚ´òiU§qèhÓG¦Á½¹;t¹:4¶9<Û{¢èhÔiö¿Q¼V¼êøÖîJp m5 àŸ€±cÓ§ÅÓc &ó¤ukx­\‚­›ô~;oXOºÞœÓàž¶÷`ÅÓ+ 1h0nï¸Z—…;ËôñhëÖ¯¶†®P‡ìMÙð ô„¡ÂÒÛ>XÏ«aÅ«n€oí®—ÚV“`Ù@ÿøƒM»k j˜'ü¼ú* `SÒ.dcc§I.“ÃM1sÐLx¸yàlêY„ª4¡Î6}Í赩 n͸uªí=i^ +^u|kw%¸ жš„›Q ÁW' IDAT|ðpõªˆ¢,¤†y2iË×aÅJ„‡11,Hïßï\mC:Áƒâ|ÚyìŠÞ7¹[ݺŒL&ƒ›¯ e´ÞÞݼQx¨Êhëß{^ +^u|kw%¸ жš„ÕùäàÞ{Ec%µš'‚„‡CþÞ <@˜;‡P^ÎöEl„äoèÐËŸ^^ƒ™Gf‚ˆÍôQø+ÐrxK”äþ– Ÿ»| ÍÓBnyšWÊWÝßÚ] .´­&¡‘>}Øæ°Ge Ï0•Z͹˜5 0 {2ŒÃáÃÀÖ­õî?ë0:øu€‡›vÝÜ…×ú¾™L†ƒ§:_H5Ü|ÝÐ{[oÈÜdHú" ¤'‘E+y5¬xÕ ð­Ý•à2@ÛcÙ¸HO7 ý:zÍ“¤$–r¯W/<ûX%ªNÅÅξç_¿çu<ôΧÇ1Õ1ç6^ 2… $Ú½ÙÞ]¼Q°§y;êžh„WÊWÝßÚ] .´=&¡‘éÓÙê>gèzÍ“>}Øàsh( Ô·Ç7T*àå—G¶ms’Ðj(ä ,üïBhô|ö½óTC&—™’+©âUh=¦5´ùZälÍ©³ ¯†¯º¾µ»\h{LÂê,XÀrêëÄ_]\'™'‚üßÿ±Ÿóóáí]¥óõ×o¾±¢Á’ö¯:‹±¤$ÇÿûŸù¹7Xv§1cXê¿Ã‡1(pr³r±òâJ<Ш ¬á:}Ù 2¹ iߤÁÿa´Ë#j&ZáÕ°âU7À·v—‚ˆ®gL˜0A”z4Qªq  Ñ”)Dýe:tô(Q@ÑŸ6P6<œè¾ûˆš5#ˆ-2?ÿè£ì¸ñŸ T;tÈüÜâŦS‚ =ú(…uó Ç¶$=šH¯áµƒÚ@DDùûò)}U:;¦54¦$ N+¶ˆ…Ý=è””lÚ´ «W¯Æ™3gÄøÎh{MB#îîÀ¾}lu¡³°Ø}Ø–äÕùáàüy6¨c~î±ÇØÖåç·£F™tËd2Àß~îX´«š‹ç±âÒUeÏže«€Ö­nÞtÚúu¹'»Ý[»£ÃŒÐé?5ÞtžWÊWÝßÚ] ²£ýÞ{ïѬY³hÿþýtôèQZ¹r%½ñÆ%âwHMÄü–ûûo"¥R´êÄçÚ5¢W^!*/7?>v¬yO÷ìÙªsZ-Qv¶yÏXL(7—–îþ€Î§'"¢ôÒt¢¯¾2×´k—cÚo€üƒùTq£‚ˆˆ¿H$Áà ë ñ¯ÃÕzÐvYdK—.…é÷§Ÿ~€åJ¥ÂäÉ“áçç‡fÍšaÉ’%X¯ü…^ÀàÁƒÑ»wo¼Ç>Rb˜„F^x(-.\zH´jëD¥R™]³z!bûtuìÈzÓC†ãdz¹w& »Ü_üõ0¢ýÆr¡5–swgó¥[&Z·Æ'#¾‡›Ü Ò/`Wô.¬œµøï3gXoú‘Gª*P*Yïzøp`Ø0 ysQõU§åÿZ*®W@ @¥º•§+á7Èî-ÜÖ®ØXu¯¸ëÖ­Cqq±ÉXÉdð÷÷GEEÚ·o_£œX&!« xï=ç-±Øù$°|9°y3Ë×aœýôÓh½oZ~<á¥=ñäS2=ê\ÝÆ•†JKžX'ù\/fºú{ <ÈVN¶iö·q0Mú7AЧAHŠIBΦ(š+ ÍÑB›S3׈+Â³ÑÆ³vWÂî1èââb¼û4iZ¶liUÙŒŒ :uê„ôôtÓÏaaaزe Ö¯__# ‹±’Ј¯/[òðÃl:›£©s…‘ù޶2ðÌ3l|yÅ 6ýæ›À­[l777àûïµkÙV^<к<ÙõIx)¼°öòZ<Þåq@BQ‚ù‹†g›BN™ÔÌùzíšC¾%e2úÞÛ=~ê™L†ä9Él‹-"* WЈð¼gí®„ÝzÈ!HLLD~~>†jUÙ   ¤ÞÞå:55Õ¬MâärøûûCwÇ<¸˜˜ìܹû÷ïÇž={±±±¦¡£Aaé±ÈÈXŒ­ÂæÍÖ—µöXdd¤ù±ÌL`Õ*Dvî <ù$bcbªÊŽœ9ƒØçžƒªC€‘³g¯¼ÂÊÞþâzàHDD¹¹ŽÑ Û·ooðu3Í„W¾.¤_À×{¾6»;bƒ‚ Zµ ÈÎFd«VUeãâ€Ù¥ °f b/_¶Xßöˆíø:ôkŒúaÆígöºMÁ›Ð}uw´šÜ Aÿ„a+=0^¼¶* ‹?_Œ¡[†â±%áõ}¯ãfôMSÙsÿœÃõÜ눸á°kÚбóçÏ7J»Îº_\娕+W°ÿ~,_¾¥¥¥p)ÈÎivS§N%•JE™™™4jÔ(«Ê*•J;v,½óÎ;4kÖ,Z¿~=Shh(M™2…&MšD .¬QÎù*•èUZƃV™j>>¦oÚ;\ÏÆªbš„Fär`Í@£a3×…*7>mÚT˜6emš>èßß²J²²€.]€dã2wŒùÏŸ¬_„„°™rÝ»‹ Û Ó瑎Ì\y=žïþ<àFî ôkÓ¯Ö×gtm‰6~„¨ëýuå(¶¾ù¼oŸ+W—á»óßd¡Bgž,û½ÞÃØ»Ç¢]Óvhפòª[zp§ÁÐÍÑAS©¯¯¯Y¹À™8\y©ß¦BX `zÐtdÿ’v“Û¼^x®ûsH*NBrI2<Ý<ÍÊ?·ý9$%à¾v÷áá ‡±ä‰%l¢ˆðl´ñ¬Ý¥ ;zÐS§N¥-[¶P\\¥¥¥Ñ‰'èÃ?¤ððp¿Cj2|øpÑëÔj‰NrÜÌ4Š%3†bZµ"ª¨§ÎÔT¢aÃj̬¨ zé%ÖmÙ’(?ßþ¦bbbl.–Fù€ˆØb—’ʳóãöŒ3ëGfEšÎiÎ…Ò–{@ƒ{j÷ïDë Ô§]¸ý†˜¹”^,%A_u#iô³ßŸþíiò[âG˜°n€Y'“NÒ’³KèJöSý¶P—nA/PYd•E”QÅ ªL«4;oÐÈ 5ØÕ¶½Øs¿4&ÿªt·nÝ P(°aÃ(•Jôë׳gÏFsN¡Ä5 ¸»C‡2îúõÛ‹AÄbÙ2¶FЫuk¶8äþûí¯7+‹†>>Lx˜ñ¹w/{¬ônkÅÓÇÝÍ]ü»`ôîÑ8tëèðB&„˜Îê3 ~ž~èߦ?în}7îjy—震§Þð~8s83X_ÎÖ½‹¤ÝØëõÿ¯?š=Ù úR=2Vf ÷½¡+ÔAᯀ\!‡‡›‡©Œ\&ÇÑñG!€øÂx”¨Í—Òï‹Ý‡/ýˆ/N~¶MÚ"xl0´`öª84hÒ5Pø+Ðjd+Óù´ei(^]ŒsÊs0( :~ú±²:BÄÀÓkÀ½'«rç¦~ŠÔEÌÛ‘{ÊÑïp?4ÚŒ•%Bêשpoåvðîæ&ýïXÈ$’I(vèäççãþÛÁæÆxçwDVb­$¼“Š ï¦O¹âš5>û ‘?Œbg€ qÀªU,QǧŸšN¹¹+WŠ71"22Òâ eÚ h Z4÷f_Ô÷·¿¯ì~)%)Aƒ`À‘„#x¦Û3ÉdÞk8†÷^{e÷ß„…±Ü°kÖ°¹ÔFÍvi`hÁ튦죠WëÑùëÎÉdHü8]¿í ÷Vî€ 5†0ä29zµ¬ˆÞø6Úø¶ÁÙˆ³ÐDjà«òE\Z? „²£’ ýtyå}ËÛïÿýÍ´ p#ãz7é ÷fî ¡ê”yÊÐrxK@¡F€U(àÝÝ‚F€ àÞ²jî·¡Ü€”ù)¦ß›?ÛýW ­åïÉGyx9|úúÀ·¯/|ïö…ÜÃú¹ÖÜ/õ@v q”••ÑòåË)%%ÅôÏ8ú1Ä` JK³±°RI4>Q^^ÍãŽ"!ý_P@tæL/;tˆè£l%h’ÊÚpy½°ýò\èIsNÍ1;¿ûæn:rë•©ËèRÆ%úðȇDDöm¿ÿN4`Ñ¢M* ”³=‡ˆˆ²ͦÂÃu;®š< ,¢¼=æïyê·©‚Ó¿¼Ýy´õêVÓPβËèØÈc”47‰rwäš•ô‚C†(ôJ=eoΦ”Å)ÿ^z|´™æŠ¨ªá8½JO¹äÖRù7ájC\&K7nœÃê.+#9’hÇ+ ËbÔ±#ü6­Ö—)¨Õj¢áÉ’“k=­Ñuî̤iý¬•ÚtW i%i¦À°4€fŸš]g]YeY¤Ô*I­SÓ¨]£lÒÕ—»H”™i±vkHšD‚A uººF@ ¿'ÜÌε>gv®$¬„bߊ¥ôUéT\@š< %%ÒÒ³Kéþ ÷æƒBSBÍʪª¾v¯ÔCETeoΦ„Oèú ×É ©ú6/ /3ý­:]¨q-ªÓÚÅ@ Ð"à“°:ƸcU¢¶[·ˆÜÜX°5ŠxµàPó¤òvÏfóf¢èèZ%vïÎ$¾öšuUÇÄÄA0Ðù´ó4ëø,ºkÍ]täÖ³×,=»”N&$­^kQÒ/ЙÖãÿõʯfSä,BX2•ûî#êÝ»Î7Ìžk®ÉÓPÆÏ=>šÎøŸa¹=²6eÑõ®Ó¥~—èæ˜›”òMŠ™¹Øqqdªà­Â[ä¶ÀžùíÚzu+E\°Y·#PÝRQÜ;qt©ÿ% ‘…ÔÐIs’(õ»T*½PJ7¯ßl$•öájÚÉéêÅÁ&au˜=ðôdSÖ,¢{w`éRàž{€§žªóe5O¼¼€äd !˜00Ø`t5‰aaÀĉÀܹÖUÝ«W/l¿¾ã÷7 Ï Ç3ÝŸ1ýþÙ?³ªÎÙúܸš{î€|e>Zú´´lÊšLÆ’©<ÿ<›kö·âüy o_ Àâk®/×£üŸrøö7»êòt¸õÎ-Ók ì/éØ˜pÐgAðÄ2¹õSìz¶èiö{BQZø´ÀÑÄ£8šx_ùá:ã¸ÞݽÑó'¦YW¬3û›€ôåéT‚éµO¢O=üÿâ°ýâ‹/:¼ÄÄzN ËÔ6s¦ÕõFD8©WTVƲàÙø¨™¯Ì§ÕWS™ºŒˆ˜îrM9=·í9úáâ”R,žß 3èL [†ý1ŒÊ5å ª¢"¢-ØÃuë(âÒ¥z_žó[…§9{|/½Pj:'Jž—L‡ H[Äž ´…Ztióµ=Ž=©hr5¢ä ÖttäÖzcß´ÿÔþ*‚@{£÷šM÷s%½@ÅgŠ)eq ]{öí}e¯Ùùܹ”¾2T‰5ÇÖ ¶¸Šˆ(.Ž=êõD‘·g[FF²ÛX¯':q‚Ëʪz`ÓSqµ4—ÚY14”Å`3¯&6–è‰'ªÆ>¯]sŠ«9uªj˜£Žqi"vÓO´÷öç)<3œ†ý1Œ_+óA›¯lv¸T#)Å)–FDD+/¬¤¼Š¼JÔAAÑ[oÉdì=zë-""t•œ/¡ì-Ùf/Ï\—I!¡óíÏSÔ+QTQfQ3š)àÜ{“n™{'“NæƒÚ,kCsCæRVY–èm8’EšÆ¯]"m‘–¾ûŽ­v-/'š>½î«¯ˆÒÓ‰t:ÓÛfvlÒ$vlî\¢”vÿ¾ù&;¶v-QÆíQ—ƒÙÿ*•uÜÕ4—[^9b%amäæ²í¥ÌžÒ6oNžz÷Nœ°|õßmœ¶WÛСLã,Aœ;lßÎæ}¯Y”iÊp îü<ý0ãøOûÿ8Mw§€Nx(è!d–e"­4 ­|[!±(±Æ<ãiÑøåàòe`ð`¨&NDü»ñ8ßê<®¢0o—hµ¦cÈÌd¿sq؃v´IX¥’è‡Ø$ "bÏU?ÿÌ–Ú€ÓWX]»Æº*ÑþªGæŒÒ Zzv)õý©/ýü{2yy±Îæ¾ý:{°Æ£´³u ‚@½††ïN¥êR‹{¥z•ž RáѪÙ1113!†B½BéêcÿPÚ“ëI—YìÝÉó’IR%ª(s]í³J,¥¶kž\œL_žü’”Úª¡+•VE[®n±ÞdA Ú¸‘ý¼nѶmLûøñìXH‘q¤éÊY6kG«eå>I „ÐÅn)y~2iómûl©T¬¾¢¢ªÛyóر7ˆ–.eÇÞz‹}®‹Šˆvî¬*Käz=h.´Ó.¢ ÐÉWÖÒµo;§=G2y2ÑíñïM‘›H¾@nš·6|-?϶@tÄi[)×”ÓõœëDD´(tEçÕœ™bD¯ÔÓÕ§®R¨g(… „"‰4;¯ÉÑ^¥gÏÈQûöUã: aV©3Õ$ÊÚèØáˆ_"~!̵^Öš¾;÷ýcøÇþ?tˆhß>öó˜1ìþ‰Šb#lDl¢!r~Ï¡ˆ‡#؈<„Ô™ê† YIyyÕÒ„Ÿfÿÿý7›JODôãì)@‹€3LBJO'zê)öa ¢›W4¢¤ÐpšIxA(,-ŒcáøqŠÛñµû¾}zìSŠÊ­{{²êVgë®N…¦‚æ…Ì#"¢›y7):>šrwæš-¢ "ºØã" 8KQ£¢({sÕ8³™ö´46Ç R(ꟷc?ç÷Ó˜wÑ©"«Æ§-½æá™á4rçH’Í—惂ロliiDÇŽ±Ÿß|“õ:‹ŠØ1»”Æ™Ž¶Ü/ª[*ÊþÕÜ(ý”¨¤¤á¢®BJq Í™O]èJ˜:—zŽ ÏÌœI¤Ó‘A«©wõ]t4Ë„Zïl'S|¥˜~ïñ»i¶Eü§ñfç+“+-ÿ=J´zµTš£-bÆ¡:KM1Ùc¿:Km¶D,bòchö©Ùf_%•%f‹_laËfæUVMœÈŽ8QçTQ‰~£jeãù¶ç©üªcŸ\-@K&amÈd,¿Å'Ÿ‘‘øß‚ûñÝw̨P«í«ÚY&á‘„#˜:IÅIx$è$°yÒ«Vä“§‰‰u–ÿñGàâE¶Ocx¸ÍÍÛh25ÈÞ” }yÕ{íÝÎínµƒG[ä>Ÿ‹Ì~™fe¼:{A¦¨9ï¶VíO?Íö:«Îœ9À¢è7âÞÌ27d2:/è "BÂÌj¤'P=ÉR¬½æ½Zö¡ Íæ/ [†N«:áóŸ#O™gQ=FI_}Åþ vì`·Ï石cO<Á¶ÊK{]ô\Û}þèƒæÏ6‡ àÝÓÛtNÐ f9Jþ•‡=h‡˜„ÔÛE>ž­¤¶wÃr±Í6½AOÇÓ¤“H¥­šcZ\YLsNÍ¡[…·jJJb® L¬eàY¯'z÷]öѺ5Qd¤sL¼½yt©ß%S¯)¿y®Te¼’ô½)~TnK8Vo]ó£G«†=¾üÒa;8èÊt”ýMi+Ò¨älÝ÷œ÷ÊgÇ?#…„ù ßo|뜺h¼¢¢ˆV¬`?ü1›ol0[é©:ÂTÖ—›¯ÍÚ˜E»_¤ô•é¤+góWëAs E½ˆeeÌjª&TÖBIIÕøš«i;£vRЊ “Ù÷ûõß­« <œå³ÐÔ¾øAˆ¾ÿžAŽ@•¤ª‘$(>… „þ¹ëº5ó•_¯û‘V½{4•T–Þ §Ì2;fMèõD«Vùú²{aåJÛë²ä¯“‰ˆH£¤Ì öÍø¨ŒÒ šyx&Ý3Öì¸ ¦Q®¹sY*A zï=v̪T@ÜÔ8Óy¨O()ãìÏÿ!hÍ$¬¨ ºë.öìÐõ¢ê¡¬ŒeƒÛ¶Íö&í1ÛªO­"":ˆ0ôø–ÇiËÕ-Ö»÷ÉÉl`Ñ``s ëÁ¨[ìÿ‚Jû>.ö¼húpir«¾ ôJ}­«ÍêB­cŽÿâ3‹kä1bÕ5OMejñgÔE§ ¤ÉÕ (s}U Û˜½Ó œt`õúøÊ,ͦ””ªÙ bà,S¹üZ9žK—ÿsÙìïÓWèm2¥-¢^Ä?&úßÿ,ÚÀO©tþÂA½AO‡o¦×þ||¿ñ5ë%ê :q–\¯XÁæ5˜¶sÞ<¢W_­Zf[‚ 2FIE§ŠÌŽ'Ìbó^/õ»D Ÿ&:Ëþ`¸/†ÙðQ¹Q´æŸ5v×gÆþýD[·:l»c`ÉÞœM¹»ØEá±B‡íˆ’ŸO4kN5ÿ¶9a>Èk¡-8½À!m9 Á`~­’¾J¢° 0JYœBš<Ë—ÇKZìJ7ªÓÕüÝÊ©SDŸ|b[óÖ¦aœsjŽiÃo‰¾å€9ÙÆgÙ7êüÔJ%••uéÂ8}´îï4A(þÝxºÐé[€Ðã¢Ùyu¦šÔŽé¡~vü3*®,&AGÇýmÒn3••DmÛ²?ú©§ªro;]‰ŽA ÊÔJŠKJ¥’*Ó*E›ñqà@Õüä3ˆrJ è“cŸ×"/šyØú¼2õÑØéF£_¯šýêjq–´ØlÞ¸AÔ§OƒC ±m›íOÀõ™'…ªBÚzu«YÏézÎuzú·§iûõí5†8Dç§ŸØŒ~ƒèFÝ99D÷ßÏâÕôé¬çR~¥œ*nšÏIŽ|„å^¸|ÿeJš“$úÖ†øöÜ·t(ž žÛ¶óìY–Î 4ÈW24ÙRgª)::š¢FF‘^©·kÁ9sØh^y9 Ìw’^šNJóÝ䯴k3WØ“P§¤[3oÑÍWÍSŸêËõU×ÒØ9Éfó¯¥-6]ÄM›ˆ¼½Ù‡ì7ìÖP^Î&è‹17ú\ê9µk”Ém¿œyÙþJíáóÏ«fî×BEÑo«éÊ‹7è\‹s‚Ó_ÓknT˜-;ãÐOt^4Í®%*Y‹ZM´`ÑÅ‹ ¿V$t%:*<ÂSR¾I¡ÒK¥ ”¨BØ-ODtútÕÏ–Äxcb¦žkzÒî›»uóYG=î&…ß{‰r6§“a˾dÈb»ç¸Z€ær´Õ{ªTÀ¢E,CÊÒ¥,á‘< X›š:22zÁ|÷•œ+ø3úOø¸û`ÚýÓàïåØ|× 2v,0|8 úû0Ê.•!øƒ`¨ÓØ$p__`Ñî(;^}¹þúÃû^óC¾wû£µGmµ;…N7òn`¤ÿHYd{…žž,‰ö AUÇ €/¾`{ÀõÄëhþLs6WZøýÇ×*½)»Î2@D›Êæu?öK4¸}# ¥OK<Ñå ÄÆã•ݯ`Ó•MVkŒŒ´ºŒÃ!é •WóPqU‰˜7p9xæTŽomÓØêj‡þéAGDÔ»_Ÿ­„…]¸ÐðëJÕ¥´ýúv±sµû¾Y2¢œòÚµ³Q“ÝÔ@§£œ¿¢3MBMcywæ”(‹(cɉ ‰úöeIr\•ÍW6ÓÁX–ƒòŸŒÄéNÊžÈ:vtÜ\Ä;Hø8´EZ2h ”¹¶Ê0.+cs•u:6__«eÇì™Î}<ñ8½øû‹ŽZs4Æ÷zöl¢ÔTôz*û]á:Å¿OaalÕ¬ ¸^šËm‘I¸{7»CHd$ß³ÄyíÏטÙ÷¨Éâ&t%ûŠCµYжHKE'Š(ùëdºñò óeÂg‹èŒïºÚõOŠ™|‚”1µÿ¡Gyx°Xõùç®3O܈R©4m-›KSN!"2ÛnÊ&²²ˆFf¸\.úºøúöÌ\›INGTp¨€¢¢úè#öšk×H”¼1µaìdÄä×?ÆÜØ&!Uæ7ßd?ÇÇSêœ 4bDÕ¦ÐÆÙÆ{V Ð"P¯I¨R±|‚@U®C£TV%OcG> IDAT-I¥õ—×Ó—'¿4{ÍÁ؃4aßú9øçFë)k‹´T™lÞöá7ÌwqŽ®úd z ¹…D¿üÂLŸ””:?ù§O°Ë~þ¼Cÿ «©nXÅÄS²€ô=ùsŒÅû'ÖË_U岑úŒ6]›ñ±q¾ŠNc9Iv¬ª$½Ú±ßŽƒ7&ÌÉÈé­o™vܹ“F7 “’Øê"¢uë(ýD,YµÏƬYµ“´ÔyU*¢þýÙ;Ю‹F˜çNôì¶gMSâ_+ìNR#úr=EŽ¢ ]Ù”·ëÿ»nv>s]&Ý|í&¥­H£²ˆ²º7=ÍÉ!zé%–¾¬¢£‰6lS½ãˆÈŠ ±ˆˆõ ë 46³dIUNNðÅì±4YCËçhH0tãådPÈ 6Ô˜,*­Š–_FÍ–6£»¾›ô[nø×_ìÃHDô駦®qR[Åß¾=›¬T×,,)@‹@½+ ?úˆèÉ'Y@qJ­’Ž&¥YÇg™òAŸ¤^þe:õ^Ó—fžI§’NÕ:MÉ+¬Ô™jÊÝ™K) S(jt•þSmO=A ³ÍΚæ#Ç¿_OMuqêKÁJÄö²d¥ 9îQÛê»æ)Å)ôÖ¶·RVY–ie¢]œ<É: žžD‹Õ¹”¾!jÓmÜsáòeó1m‘Ö´ (iN’ó¾WÓÍ<óékaia¦Õ¬NOO»e ‹º%%D“'SBBÍïÇãÇ“—´˜]Ä;<µZQ“Ü™ºÑs¡§©—|ßúûLç~ÿè³/ô[!\™\IÁ”¾*’ç%›ËÞšm6L‘¶<Íì|ù•rÒ•ˆ“L†Ž#úö[ös㌻w³K#¦’nƒ`  Mé z¹sdùÀ6¡Õ²´q›šï¿·»J㢠¹sÙ´l¢Ú§Ì ‚@iËØû_VR#¿²£(®,¦fK›Qëe­é‡‹?ˆóEg ‡o/Ü:tˆèÇ)%…hÊ›:rs#záë«“´˜L¸8¢ì^xRø‚xZº^Þñ2u^Õ™vÜØav~ȯChÔ®Q´6|-ÅTõFßJ%ÑÕz®h]找BO¥K)_>eü”A%aæ¬Ã†›ðiÅi³…Ê6!?ã§ *:UDºR‘‚qmº  ‰^~¹æÊÌj¼ÿ>‹O¾¾DÁŽÉ!o–VŕŚJDD«/®®w#‹¹u‹%P¶q*…Q·^Ïff(•ìÁ%Ó¼J‰Ÿ%’®LGz•žR¿ulòæœò¿w¼iÓ€1Œq\cj5QüíÏÞûõÆr‡baU©«¤Ž|ÀÊåÇPD–ÈÝÿ#GÌö†¬ððš=Ûø³í©n3×gRá1ÖÏÜéÐ…'×s®Ó°?†ÑîÐÝâW®Ñ°13­–u 2dçVmåM,­Ì¼y¶/ “t56oÞL;oïÚ8uêTJ½½ECHH}{û1zñâÅjVnÂøñD]»’A*Ÿóe—d˜™eê2Ú}y7­>±šfí™E¿_4OÃ9jÝ(j7³ux¯Í¢ìªÇÀ¼¢<ÚøËF:³ç eÏ4›Õ@D” Ÿ’æ$Ñ­nQ̤³<´ª$ £³þg)DB±oÇš•½ùÚM³ \™Z5Ž«ÉÖÐ7(~F<¥,N¡¢“u›q.ž}ìqž¨Îej;v¸ÖÎ,–`LeZ , AGÉÅÉöWZYɲ&D#FÔÙÎ̬š[?gNÕп­:%®ŠUÒ­ÙɹÒˆ0ƒÅRŠSè¾õ÷Ѿ˜}¶}9»Á×®±\ÝDT| ”¾šQB=$î´NW ЊÆ\$“‘‘ÇЩS'¤§§£cÇŽÈÈÈ@``  sçÎHOO7+WXR‚õßGÇŒž/‘C¾8ÃUè1  ïVZÞß-ÑýзßB«Ê94ïþõ®éwù49МýÜ´¢)ºOî ˆG<ÚŒkƒÞÛz›^[p 9›rL¿wú¢ì2Ê=äÐfh`ðtƒÎ×r_73Ýí&·CÆ]¸ÿáûáÙÞm«VÚy´õÀÝ{î¶õR:œÈÈH 8°æ‰ÇgK*‹ŠØ4›j®:{õUóß‹Š77ëWaÚJÚëA&“aÕ3«Ð§Öü³ý;¢sÛEfÉr¼Úðò~ù˜>Ø»ÈÈ`ÛÖÜ®O¥b“ÀZ¶Þy˜5+_mîZÿ–Û»ÌxuöBçùABú÷éè»»/t:* ðêìew;Õ©~Í·ßØŽˆì¼¼óeü§ý°ñqOÛ{,¯ì矀GΟÇê_~5J%àí ܼ ôë'ª|—¡Q—z!55ššj ÊÕ§¤¤ ((Ȭ\ee%®”Åà<Îã´ÛiT6©DbR¢i›´´4”•#®CÊ»—£ÿ½ýMKOcccq÷ƒw#`Hrþ“ƒfO7CN~Ž©ìõÄëh5º*^¨€ßk~ð{ÄϬ¬ßk~èõk/–pÏñ{T–d*•…Çô¡yX+ ιmtÇÁƒUe=òÄÓóŸFJËøÞí‹ø¤xSÙêm¸â1#5^çç‡Ø¸8¨¾ü’»p¡Îú**T7è×/ׯ;çïðññ±©l»¦í‹6mðÒ]/á@ÈÌ==×>};CuéðñLjœ2ÉL¯‹¦M‹„‡ðÁ±èׯ—¨×EmPCá§@DDº.銸„8Ä}ƒÒ€ÈÈHh25¹_fœ‰à±Áè¥ë…«9WQ˜VhY}Ó§CUXLœˆÈ?þ`dž…‡g%ôz`̘H$%îîöi¾rå öïßåË—£´´.5òôرcéwÞ¡Y³fÑúõë)88˜A É“'ÓŒ3jƒ¶+ݨ“ÈËcãÑwŽºÄ +°X÷®]UCµPQÁ® À&9üú«HëA¬k¾òÂJÊ­È%ƒ` UV‰R'›írîïb¢%Kè÷Íêj†³ãï•£llº8¤˜R¿cCŒ†JûÇ êZy5Û<ÜDåFQxfxÕƒ¡j7›“'IµîWZ¶ÌÜgÕé̆EÅÕ†8¸œÅá= EÆ`¨Zi~ñbÕ8Y£¯°²‹uÇÇWÍò0®äºA úî;"77¢o¾Qdˆ}Í·\ÝB;£˜w–f³évèûª¬$:Ýïö½z™rÆ8ó^ÉÛGz¥žôzŠMD5w`±Kµ?óÛ3„ù —·x!~ßž0Ôb¶UV–)•tâ˜Át)&Lpè> f¸ZliT“ÐV¬N7ÚˆŒÇÒs–—±±€››õ†•+`µÑöÙgìÿ½{¤$ W¯/¹çŸhï^ff‡ÐZ°Å$¬/3Ô„ECˆðÆþ7°eøø¸û4X~Íà…€‡Ú·¿}°Kàðaà?˜ëÕ©“èº-Áÿ¿Ì¹ÕèàÞÆnÞnÈÛ•ß>¾ð½Û×âzÔžžYPÞî4oœ,ÀOûÀ­°Œ][…? Ì] ÅØW=p×]öþUCRÚá(•l¡Áÿ¯½3oªÊûø7dqX¬ »ˆ Š# ¾Âàö¼ƒŠ/(Zdad@QQF-ZGd Z±¡¥ÃVÙÊR„––}è´´tMÚ¦Éý¾œ&!--M›&÷Àù<OÃInòÍmú»'¿ÕÛJ¼ÀîÝb›œ-rÆ*!;Û‘Öþá‡ÞË™® ɹɌ8A’\xp!Óò®ï |¸Gd2±8t ï¿ßÑaîÕW©ôg³ÎòÎoî´ß4Þo©Rôf ¥œ¨b4½-Áe6ß^7lHA#÷¦œz„”””Ú=Á‡]ºëÖ{öˆ5Òé!‡O> ¼ÿ~í^îZj­½š4iÐË^yàßìû-,¿‡E+EdÂN:$ÒxGŒ¨þ󥤤÷ß/r¥HH¶l©#õ•c¨'ò¨;ùwB“.M·'>e9þ—\„µÐZá§s^RLœ(nÄÆ£á°!èÕ 08xPü}ØR̸󤼗‚ÀèÜ¢3zµëU§ïQ·P´ޮrÕŶ‹ÎË“§-§Û9rÄáòøÇ?ªuÈ¥KuÖœ°Î¸”{•ƒ‘ó÷/âOGÖ37—<—]‹H—¦‰|¼¼<çµ:Jq])Ö+-& O¼&:ÚåʯÐ?†§NÙ¿>X¿à—^âԩΩN£¿Rk©SgÈÂ’Bö\Ò“óÌga‰{Û%êͶHi «l7ªsâââ8a‚è,noìpyTÑIIÓÈ¿þ•lÙ’\»¶f/åÉÖ—W{L ¹!6Žš¦ñ\ö9¾³é’¬öÀ†ê^¿žôõ O¼`¨IÑoœ$O:%Fq[y齟·y³¸ÿíoܸA³·i}ŽjJÄÉ»ëÃ÷_þûè¿o|P5Ñ›–ÒÅqçwz[BéÑ£æÏºv"#mÛ¼­¨z¸=›`̇Ëãøq±VTTáa¥¥"Á!+ 2xóÍ ž‘â‰LˆsçÄ×ô»îú®^z÷^èÙƒ™ÆLL}b*4j1 V­¢[ÀeÝññ@n.ðÏ÷Ü9âž7ã>¿®Žûf߇û¶ #ô2ê?Ø=~þÿ¹„†"zGЬ•íۅצ6 î: o%`Ø#ÃWœ‡vMÛÝø I‘Ò@[,–?H§˜L& ÂàÄÆO?ímEÕ£| ¯ÛèÙS8œss…õ-Çm·‰V [¶íÛ>X½ÉÔ×RgÚ!~&“Ðöõ×â‚2}:àëëü¸>û }³öHÌI„_7?øÔóÁŒ=3Q˜QsÝþþ"wsÔ(ñ‚=Tû7ä*$‡¾ €ädø6JÀ‘{»!{èDäíÏ4À[g!jy1öíŸ÷š¶2¹–GÛ<ŠÐ—B‘ün2úuêg_OÌIDïÞŽ FAIAí_ÈÛPB‡ •„•Q¾Âª @$âÔíŒZSçUmÛ¶9êâ®›R–“ã¼lµ’W®Üø©ëB»-Û &†üäqûòåJúU ¸´˜omx‹$ÍÈS[º¤»ü„›ï¿•œUŒ(«f³ð礟­Ù9\VÌ]N CgÉ%á`>þ·ãÔ,‹S‹yñûZ¦éÝ€YûfÙÝ·u;ÃO†»t¼Þ\Rh½ÄÚ°y3y´lL`NŽwµè‚C‡½<¨òʵbÙ¼9ùÝwžÏ›^¼Ø‘-¸fMõ óõ¿i<ó‹ói4]ê?^)V+Ù¹³pø6m*® f7µ--ÿ²³EÊIž<ɵsSì>æ^½S_HÚÛš&ÍHbA¼ø}ž{_LÝÝ›ZÓ4îMÞËQ‘£xûW·óüÕóN÷]5U}ÁÒ›m‘Ò@Ë$¼[·Šz½â±@›¦ “›+š²[,¢²ã:ÈŸ.J²[·Êè¸Sû? 9……öÖĵÆf¤BâB¸åœ˜4sïLÆÆÆÖüI“’È·ß&4 ûô©ÝDˆ?£¢È%Kh6“¥a«ì©IEEäË/‹Ï±¦]ÿœ[Ë&ŽÏ™ô•È£N HdQJ5«æ4ÀÂÍιØÑIÑl8½!‡®ʈ“×-ÏWÚ èí$ºƒ­[…-*)qÞ}ܲäç‹þ¤04‰‰×}ØÑ£ä_þBöìY·…v¶¬›èhò‹/êæ5J­¥Ô4‰9‰ö©.ëO¯gRN-úr¤¤8¾¢Ù˜=[\i\ ùõ×db"‹‹4îü ;uª]ª¨í¢dbœ»7—i ĶðxÝLþ!á6ûº™ÝòCBŪ!½Ù) ´Œ•„6ªªjÓ4ò7È}û<(¨šx­Mja¡ð§’—Pnº)Î[V¹Y¯‡9ìOm´Ûš9}ðcøm]»¢4M£Élbaa!¯L‹Õ W/pÍ 7Œ‘ÊÍC"‘»8mZÕ?^œà xõ“oÙ®#]nܸÊsõœ_ ¾ÈâÔbj¥Oø•åVÇæ;MrF³‘kO¬åÐ5C™S$~‘ùÅùöR}½h)³8d¬$´QUU›ÁÌœ)ŠÆöívìð °à©j¼ Ü~;0z´¸½}»(ÇËÈÂÂì1€k3/33gžI Ë–çÏ×L; Œ ˜Í"a–TÑ¢EMßLõ0 hÜ 1RSSòb|êù`yÂr<Üêaħ¿|Zó'oÖ X¿xùe '8Þù~ÈÎÄí.Òù:wF‹é m[`ð` .Nd×T†«Ÿ—¶cÚ¢a‡†°äZÐfTÀÅ¥Q¿Y}XMV¤-H+“çbŽe9š4h‚gï{«†¬Â–s[°3q'š6lŠØK±µzÞ:ƒî õv•s7b']R"b;u8ãSN>ü<}Zœ˜ðŠQú”òùç;=Wûz””‹‰ÛÛ·“¿üâ͵$¿X¢Ä_Šç̽3I’ÓvNcfa¦P¬ÕÀ›šêp#‘äÿKöêEmÈfõx–¯=—Ëkf9“¬˜,R—äï93<“«EÆÈ™·ÏPÓ4–d”Ðt®úMm J 앜DZÄRÂÌÂLúï=ËmÅCz³-Rè›1HXMÿFÖÇÀUOVãÝÛ×ç­[Åg’Œ¯Ð\:&†|î92,ÌY{eùùŽÖÕï¾+®Þäzç\Ó4»¯Ú–¦·;i7—Æ ‡peôª$ @œÓôtj·Ýf¿²E7víZ³ ‚;?/Ö"+­ÅVZÍV»Ï:}i:¯þ"22’ÿ%&ÁX ,¦Ý︰ƒùÅù,()°÷îŽ<ÉSWÊ~ÑYYäêÕ¢“•v z;‰uEz:Y–#2›×”$¶tyyäСv_©S¿Šrœ=+kÏž-ÜÛ¤0ض6 ƒ‰o-EEò øfï7Ì2f±ÄRÂá"õíPú!ffV~¦‘Ó§“$Íë£È•+źÑȽÖñç–~LàG "¿ý–‡¤øŒôìéèøÚk$õg[¤4Ð7k°2.\öÇ›ºž¥˜šê(r9RÂL&ûøZí‹9þ&[¶Ý;)sññ^kkQWÏyRN7œÙ@’|#ò ÍFæå08.˜4›EæD\¹t)32È£ýÞáÿý)¯ Ñœ®F•¶ÃíÖÍá7jÑ¢J‡§>/šEã¶„m$É=S÷pîþ¹,IN™Bó²µ4O!I¦ ?ýå°Ë¼²^¼ç´…bMo¶EJ}+ «"-M¸<¬VÏ] ]áøqÆ­[GjÓþçRÓx ô7†þã@…‡Î›G6lè°1UtAõ.ŸóիŇâÌ–Nù'ŸzŠ|£þJ6G{õr<,:)šÅ¥ÅÌ6eóƒ­$§nŸÊäÜd–XJøþ1{jóÙÍÌ)ʱÏT‰Å"ÚÇ®_O~û-ãvìpÜ—’âl¼‡ ±ß•žŸN¾ó[€'[Šûg¯M£#NFpmt ðõÁâ¾#£ŸçÎÄ$Ë*Ç#[µ"ÿøGñ¼ééÕ>]¶à#Iž ½h)]²·­- sçŠüß±cÅ@ÚºFÆA·PÚåa4ê2(.ÆÏmFáè1þ|. CFýN˜‹éÓÅ­VLš\¼(†ºöí+¾±Û¸|xî9‘û›”äzËÓšPå9ÏÏÌf°ÄŒÌ·?Ãwß©¿^ºtAýîÝž¬ûÝp¼8¼¦MsÚ·S_4¬ß¾}1ó™™âµÚö@Çf‘–Ÿ߯¢_ø©p4iÐÆ ,Ž] ˜¼e2¬š— /ãûÃßB‡@«g@îÝwa×#M>À¹ÖY€Ô¼Tü\˜8€y¯ àð+O ì¨ÈcŸºc*Щ®üùl¼ ðÐCˆÍ>‹fA¯ö½Ð°éÀСøÖw(0nþÐk úßÓ€ÈiF` H|?tX³æš)¼7¦^£z¨×P˜ÀÛªþ@\B wзZ°2NŸvß·m«Û,] ¯Cn®ø¦oµ’i±ˆ ÀK—Hž•jŒw4fš0Ad4^·”sÙ2çMà¬YÎ÷_¹âþo3NçÜbaq1©­-Ëû åoó6ð®»È0œ€Æiã3É‹Žnq©©5+·•aÇ];øóWÏsóYñu–ªv<ã¸={云$É™'ìÍž†­£§®œâŒè$ÉëFÁÌi;§‘$çÅÌ£Åja^qMû•$™mÊv{¥ê¢·´”úfj7êÒÓ…‹Ïj¨Š,³SçíFÝ„ÍPþöùÞ{bíÇO]¿ë¦ÕêÈD°9£wì´IrêTñd4'¥sçNQòýØcâ‚x-mÚˆá&O>Y±‰ÒåË"§lVªSúž¦ #ZT$<ÉÉ´?àÔ‚ü÷¿ÉŸ>Èé­ÐLJ4¾2B¤ódeñêÜå¬_Ÿìû¸…þþdmz+¹ŠÙb¶ÏØrгŒY<ž!²iVí£®Œf£Ý=’’›Röž5¯à¡ ´ÐÛIô6f³c÷<|¸0ÒV«ìöçlÐ@ Ô(-^}hÓX¹Ø´É}¯Qºk éð¿¿ý¶¸=z4pé’Xóó?]ÒÞ­›ðc ¢‘ þÿ‡?šæp>ïØ!N8€&‹gãàAàâ—Ëp*â4æÏ‡£ÈŒx¨þYôë„6>´ß´D8²ë×Gýå!¸÷^ ‹o6^|4wÿ¡…Èýp¸o_¼>ÒÛ¢ᬤ§ù9ÒÛ  I“ž¼:FŸ)¡ÚAß”ˆÖùóbWy3‘-ÜEE¤-±¿‡Û´;&ò5ML E@À¶ûž, ÛæÍ­ú €Ñ(Z/W†§t[­¢¤}×.Q±Ý½»ÈùîÓGTççõêi&›r ZIDAT9\¼ÕÁÓçÜ]Ȫ[»žðÚ:)) yyy  /¼€5kÖ8Ý߬Y3X,´jժ±*Hè:ƒ0|!!bm×.a¸F`±öë¯Âˆ—§.uÀ… âöèÑâ¢Ñ¾=°nÐ=i’ˆÇÝ¿è›á*²¬dÕ È­]OxÄ@'&&bÀ€NÿBCCѱcGÀ=÷܃ÔÔT§cvïÞàà`˜Ífì(7ZäV¯$¬-6—ÀÌ™b—zæ 0t¨X ÷'%ÁÁbíÈ¡ÛÕsf3#nõ•HXÐ4`Ö,±Ö»7’<ð€ã¢ñÄ7vcT…ÎyMU7 ·v=áݹsgDEE9ý{ýõבœœ @ì¦mƺ SÙL"ÛÕ[k&“I7Zlk=z÷Ü#Ö^{ 8rä0öî ±6{6°ÿ~üü3ðÝwbmåJqìáÃ@T”XÛ¸Q¬EG¿ü"Ö¾üR¬‰Ç•–š°h‘XkÕ Ø¸ñ4||LøóŸÅÚ¸q@q±8ö®»Üó~ãããuqž]]ËÊÊÒW×ö—ô åFkñññˆŒŒÄìÙ³‘W–â¨èÅ,Ž)S¦püøñ6lM&=ÊÏ>ûŒYYY9r$ÇÏ#F°¤\˜^UÖ=V«£LøÇ…î•+E=ÒÞßœ+V8FB•¼üá1*êÚµµkí-wí?-Ï4{’圗GVݤ¼Úõ–Åa ™ ž=ï1jÔ(¬X±ÂÛ2niNºvYM›-[;wO>) EêÕZ·rsë~ȪBá.ôf[¤L³SABÏS^w×®âgçÎÂ8Â8¢ù}ëÖâ¶ŒóÍrÎeBfízBJ­‚„žGVÝ€¼ÚeÕ È­]OHi -‹·%Ô[B6dÕ È«]VÝ€ÜÚõ„”ZUzYuòj—U7 ·v=!¥V•„žGVÝ€¼ÚeÕ È­]OHi UÐóȪW»¬º¹µë ) ´ zYuòj—U7 ·v=!¥VABÏ#«n@^í²êäÖ®'¤4Ð*HèydÕ È«]VÝ€ÜÚõ„”Z =¬ºyµËª[»žÒ@« ¡ç‘U7 ¯vYurk×Rh$ô<²êäÕ.«n@nízBJ­‚„žGVÝ€¼ÚeÕ È­]OHi UÐóȪW»¬º¹µë ) ´ zYuòj—U7 ·v=!¥VABÏ#«n@^í²êäÖ®'¤4Ð*HèydÕ È«]VÝ€ÜÚõ„”Z =¬ºyµËª[»žÒ@« ¡ç‘U7 ¯vYurk×Rh$ô<²êäÕ.«n@nízBJ­‚„žGVÝ€¼ÚeÕ È­]OHi UÐóȪW»¬º¹µë ) ´ zYuòj—U7 ·v=!¥VABÏ#«n@^í²êäÖ®'¤4Ð*HèydÕ È«]VÝ€ÜÚõ„”Z =¬ºyµËª[»žÒ@« ¡ç‘U7 ¯vYurk×Rh$ô<²êäÕ.«n@nízBJ­‚„žGVÝ€¼ÚeÕ È­]OHi UÐóȪW»¬º¹µë ¯è &àÁDFFF…ûæÎ‹1cÆà•W^Aff¦Ó}ÉÉÉž’èvÂÃý-¡FȪW»¬ºyµçååy[‚^5ÐxüñÇ+¬#::!!!˜}úàý÷ßI¬Y³˜3gΜ9ƒœœ,X°­[·ö†D…B¡ð^5Юb2™0fÌ4kÖ wÜq¾þúkoKªiiið÷÷ÇñãÇqðàAoËq‰;v`ÕªU°X,¸ï¾ûðé§Ÿz[RµHHHÀ’%KPRR‚: ÀÛ’\Âb±`àÀèß¿?>úè#oË©»víÂÇŒÇ{ O<ñ† æmIÕ†$>ùääää mÛ¶ð÷÷÷¶$’¥ÙýôÓO4h‚‚‚““#M®e‡°lÙ2)+ Ÿ~úicùò娵k—·åT›îÝ»cñâÅX¶lbbb¼-ÇefÍš…—_~ÙÛ2\¢^½zhÞ¼9òóóѾ}{oËq‰ððpüöÛoðññÁwÜám9v¤2ÐiiièС€ëuÇòåËñâ‹/z[†KDDD`À€×ÍÒ3»wïFË–-ñÀx[ŠKôë×[¶lÁ÷ßiÓ¦y[ŽKœ9s={öD`` Ž;†ÄÄDoK ™îر£=úzÁCEÝ0gΘL&Lœ8ÑÛR\⥗^BTTbcc¥ª>ݺu+Nœ8ÀÀ@lܸçÏŸ÷¶$—hÔ¨êÕ“Ê´ cÇŽðõõ zýäææzY‘@:ôرcÑ¢E 4mÚÿú׿¼-©Z˜L&Lž<QQQxþùç1oÞ<ÜvÛmÞ–U-BCCñÅ_à™gž½-©ZlÙ²›7o†ÙlF£F0wî\oKr™Ý»wã×_Å”)S¼-¥Z„‡‡cÛ¶m0èß¿?Þ|óMoKª6EEE;v,|}}a±X°hÑ"oK ™V(Š[ ¹¾‡( Å-„2Ð …B¡S”VÜ”lß¾þþþHJJÂСC+T«*2  ´â¦ÄÔ>|8.\(uƒ-Å­‹2Њ›–ôôt4oÞ\M÷PH‹2Њ›’¥K—¢wïÞX±b&Ož,õ˜4Å­‹J³S( ¢vÐ …B¡S”V( ¢ ´B¡Pèe  …B§(­P(:Eh…B¡Ð)Ê@+ …NQZ¡P(tŠ2Ð …B¡S”V( ¢ ´B¡Pèe  …B§ü?éu–m”fâIEND®B`‚mpmath-1.0.0/doc/source/plots/hankel2.py000066400000000000000000000003121316273626600201120ustar00rootroot00000000000000# Hankel function H2_n(x) on the real line for n=0,1,2,3 h0 = lambda x: hankel2(0,x) h1 = lambda x: hankel2(1,x) h2 = lambda x: hankel2(2,x) h3 = lambda x: hankel2(3,x) plot([h0,h1,h2,h3],[0,6],[-1,2]) mpmath-1.0.0/doc/source/plots/hankel2_c.png000066400000000000000000001060001316273626600205510ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½kÌnKU&úŒù^¾ËúÖZ{±·àöBÜì½$mcÔ´I¶}N£ì6*þ‘D4büa Á4þÀ[Hð’à嘀‰Éiºƒ¼äv<ÄÓ9ibhi`6 {ïuùnïeÖ8?ê6FÕ¨ù¾ï‚+ë›ãËüæõ­QU³ê©gŽUEÌü!×1Ê(£Œ2Ê=%SxpþÎotDFe”QFÑÒ}£#0Ê(£Œ2Š-#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ô(£Œ2Ê=*#@2Ê(£Ü£2ýFGà^•/}éKxË[Þ‚¾ð…¸sçÞóž÷|££4Ê(£\0tCþîïþ¯yÍkð{¿÷{X.—¸uëÖ7:J£Œ2Ê“‘A7äÕ¯~5~ðû· fÆÕ«W¿ÑQe”Q.˜ŒÝ÷½ï}xûÛߎ׽îuxÛÛÞ†¿ÿû¿Çw|ÇwàÛ¾û_a2™`ÿðGWpéê›«Ž ‚ÿT¡°ÕÇdÞ#nÝ<ÆÕËG¶ [¥ßì›1·ŽïàÊÑ*ø»R[ª4ÎïÜÂÑÕ«:±´‹Ö|¼æfß¹uŒ«Wš9Ñvøš ‰-}ëøW®±°5oJÝÐ98>¹…£+WÛymª½»7{|뎮^ª‚ö{Þ¬~(xܺ}‚[w޾òÌsø‡ÿþOeè¦<ñÄxÇ;Þ¿ú«¿ÂÓO?Ç{ ð­¯x9þÍëÿ7¼òÉ `  {yœ÷&ð=0 ›<Ï{Rçä€ýïÓÿî•¶ª~à˜'††¡kS|ècÆë_ùïá@Yå ëÔi•=Ô‰þØG>„W¾þÉ|¿cŸ`3A­DúУ7óù/>ô1¼îÉWš9Ð +Øm¢áàN…ú¡ýŸxò•ÿÖ|»e¦l›Ê5€žÅµ öcó!¼ò‰'7¿ZuÌ[&R—é}è¯ðª'ÿM,7SYî;·AˆÊÿúÓ¿€Q¼ŒÝW¼âøà?ؼÏ&Ϭ76ž„q¬Hœ2Àlÿ¨Ûwà[o\OgíÔoPÕŒ‚Ö˜zS:ÚqØ*Å%@›…¨©¶!eù»ä‘×ÁpfyÂÝ­ÔŒeè…p¢VPÕ±¥aK~zíz´Ak4ÕV5f²ZUÉŽM+x3JÛÆ`-ÞˆˆÅ曆¡”Zª6æûÖQ؄ⴱ}º“Ú]ÏÄÝ~`È€áYôÝ•,2ÒÏ9™†âÛú.D[;3YòçT[ëÓÚ¯ZËÀƒ±03@,ìÕª›Sõië-+V«ò•€áÄ×>íˆSõ­j^îc>ß^™AoÂÚ²ø!Ë€ë íÔª7!äPöYɤâuyJ©•B©žÍÃÍeäbÉÐ;J†}E`‰”¤ì£T•¿­á³Qó.KžÎ†‡ÈøÑ`•BJaë®å–ž8Ô¬½¤duÕH´çzÛ„Q^ Ê6ªà{éêž:6cRÆ ŽÍV)f”¦ïaÄŒï#)±Ê¯“2 ÚÖ? ÔÜnÄQ%p#@ߕԕ¯Y{¡‡e&f¡dUU3`X̨BÃv…:³bZ«°©ŽÁ"ó‡ÕyüZa0,¼*SÖÊÆ|ÂõÍÁDdž°õ ˜Lñp³ÔŠJ°2š&ð²ô¶Õ׊T’dè»ä¤-/Ž2´ú:ÉÛy¿Ëô{/Tè@¶í6LnT»M µp˜¬Ú±ˆ9KÐ aü.€ÝŒ· Ô ›ÊT«+ƒ·~]m­W¹M€¦1¸¼VÈðögj€e‹JçÆ×;J%#@ï(öô•Úöl3hÛ<`k1.mãç6ˆ”f<½‹J¥¶…Á¨´n ke¸ ,áYÒˆV}²…êê%p(#ìT·pVt;€ p¶eå.ò»¥Qþ,—ñ¡N»{ÍVÁÛPV/Œ}b}èY×JfgUWˆk eM¬à ½»ªS«6•@1«r³+1j“¢:ô q/óÜl‡m²«º·M<·”âÑÖwšclgƒÞYíp€žAo×!k†Ýz`¨b\pzG©Ç¬ÉãT… µ=ˆBÚž›UÙëÇ%²;…éXX:ô¤ .îÔªòäØHZÕÝaˆüšë~3þ1W¶0{ t~mû¦Ò¶IñÃÔ–˜¦ïrÊ7owê_7f 36=|qeèÅ×ɲÈãìNá?½kÛ¨w´°½=ý5ÃÏÅùFГ5²Jal¤u—­¶'G-µ‰ÈB+Vm?èxWZá­·N¼9’´3´P³°ÝIX>iF§‘`³hZ+_視jˆ»Æ<€»C‰TÑ|3JF€¾ r6¢¢¢:£0¹ Ú˜Ʀ› ˜á&& U4€*ðÊèîÞ6ÙÀaWÉM€‘g ÜäŸ;ÔgV½¤mÔ·l ­tÔéÝ*_KÕ­wÞˆgbTæhÌç¦ée Þ¦îòV\/°Œ½£ÄjU›X€ó¹íűi_( "|›‡j…#c¨wƒV=ðžczpÍ68åp‡íF¸Á8¯2ÀzØÖÞ5† o% ›°µâ¦”P@ÊMp:”®ÔA¦Z ¿jÐ`<êêòœýú7ñ`™N7 =¢t’ ïBZ\•-ÒÏSÜ%¾MfAÞR!*ƒo ©Ö°GÊ­j¬®-U(ÒñP­m%¼Êˆ¡Úš#<Áx+7*ÂX3 »ÑÛ—¤©À|ÝJnмV| ±øoÇYö© ;™–!(ãÒR9 € ïJ¶ç—’Ù udÕuC©/ê •T#¥Ù[gªÕ›{¶ÓÀÈ„TªØ¬®x°|¸•ßmS’õt+[©4Q‰±Ù¢ÔÄ•â¡WÜܬlh4fW„Ò¾æÚmTÃöæ”W ¶Ž›ñ¼˜2ôŽ f«gt] å¯ Î¥2ýˆäÃíúÓbÐÕ„>!°jÀkµ;lQ5µ‡Ah¡¶¶xïUêØ zX†Tù=Ô9ØióÊ–PÉá~qcp†Ù­^—V9 hÈÄÑÊ[¸[ý`Dé(#@ï(~¢ô! ÈçÑ6ª Ù˜…:ÖÄf-°l›àŠsb,u2çUÄmךËj׈Á¦€¢§Ìæñfú,µC?*óÞ´AoÒ>,Æ›J_.)Ï#q·ØsõãVò {ö•z+ó96u™.Xµ•ôFóèÅ‘dè%{6Û®aÙ!ÙÁúô®áÈàÚ0ÈÕCÆ9sá†A#\¨|¡s -'/¥F€hs£ 킘Ó`Z(©¡ØÊg;ÅvZÝ‚ÎÈ&{-?;›»Z0Çt½æf zbÿ2'ZÀ¬Ï9ô«èT¶ ~[‹Œ×ˆÍJF€ÞQbQÍE³Œ¸åÂaÜÊ!›Ê­-Í UÃV9ÆfÍ>XÆ6Å[©ä|ÜÄ¢âØEÀ6$•‰£ÁúÓ¹Dˆómâ­T[­Òàä(޹º2¤¶ÌsyakؚJ¯$ÿ×nŽÕoÓÚ;ñÜ(#@ßĹ8,·:É ­Q„º¾Ô³äêkrÒ$® ²Å¢,7;² |óªy­AÌΚحvò°>0~4¼EGº’²ª|CCú‰Þ ×a;¸²3ôÊÕ]BõÊË×o¾ÿB% µÄ»bŸaOŸÛbÑÍ ÕA‘øòKò‚ËÐ;J,¹Xf´lÍÑ¡«(©pê:%jÖ kPM†ás¢†m‡ô“è âR5†š°¿©N\kwnƒœðØÖXÅÍšª[˜j©f@uîDcÙ¤âÂ@--¯‰Ž«d¾Ø²ûŒ7Å+«(ñÀúìÞ„Q6›ÛõÖ¨R†´Q, msÌ€®q³Lp;#¬×:…´é¶YUç÷Æ7­6F=j³*[=Ýh+¡[½­ !#@7äOÿôOñ™Ï|/xÁ píÚ5u¯åÅÁuíÕ Aµ‡… )Í:Þò-]¿Rl cáj7'eý±0ËL°h.Û8(2‡Êã23hlc`Ø »²BÞàlLµ¥b›|nFE–c3¡Mt+ßcº[e½¡f!#@7äÓŸþ4¾û»¿o{ÛÛð³?û³øÜç>‡—¾ô¥¡0šð_ˆóqåúŵO´Ü{)VX1‚µz¥„GÅb¶e@âz£BTOo˜ºéÅÑV±…ä_Ú3~k›8¾õžõaµmß¾iÜ]­Mm<Z+è'ª¹8¶ͦ=ÔeÛHYy¬tXßT?Q:ÊÐ yä‘Gp~~xðÁqóæMÀé­Ûø¿ÿã_XãáÇ_ŒÞx!dÑ”^Ï„ÚÄ!¡Æ^¡Z [°1”Ó1À]cÐŒ¥¯d‡ü…åïZ~aç‘„Û¬:^ëÚjFÖ¼ÉÄ1 ‰[üh0á[Ú¤ºtªßú60™6F5ÓéV«oU™Pß´‡Vù ÝN¹î8¬¤¸ùéÏ} ÿí³O+àÖÉ©õ‹ )#@7ä oxÞüæ7㓟ü$Öë5¾ë»¾ ppõ2¾ëõ¯°°„Ãuqu©C¥¨CزiÉ«-U 6hj}„Š@‹Oo ˜cajc„e…Ûµ·TPÜ£æM s޶Leú*•< –êòT#F¶Ýê|–×â^º1VQÙÖ×M(~ã­„çMúœoÙ³Qh2r›/ùfÜxø›%ðŸ>þ_êg.¨ŒÝƒƒ¼ÿýﯮû‚é‹ þì– í‹±Å sñlŒ(LZŒ*u‹NÇŒ¶ý¹¨2† ^YU‡¢£Ú·…½ÙN°¸½ ¬Ö±¨ÒŠJ ½šÙН„©Uâ“„7FqÖ€f—°’Ao5г Xið{6­ßv³Ø…¶RidIöè( LF€¾ iO¤AÚ¶¬§m`ÌHßPp’¥­¼1 ¥¦*ªSØÂª­Vúhè&S»<·Ï„{nAe%V܆¶˜àÊ·p*;¬¾ú%ס'½%qoã^¯òKK–X¯P—òÍê«n“×£zga0\b§3 ÷ÈL£=Y’*‹TÌf—nðpÉw€é -ã7¸úK8/FVOѰ*©ãU¶†3ålëÁ!í~/M-»&·‰³…žpðï}2ð``„¸8nn©1ܨe ƒSŽ–Ú³éÞÛyo¥¡ž7GF€¾+±,p¬¹óª, ÆðŒÖ¤Eª¤·h,ìÙÒç ¯ŽRY».'u [tJµ3T·€¢ÐO앇A:º~m£Úé¡x sÌï­Ñé;»ÊPâGWH‰ ¨SÙ*Óh¢eàò+QNL5̤›s4Ú2Pµ6Fµ@¯VÉ퇛™P2è­¹{3ÉC¿V[PWÍÉaE£’bĪ©9^ÓÖærÔ¦Òehþœór/ŽÇ û³Œ}Ró5Íæ|Qt`Þ¶óªìRE¹.2Rµƒm[CYM¬ÎB PƒƒªQõUÆ6ÁÛÙ@…ªÌª‡`t!£¿y ­Ð¶’]QÒ#K‘3Vœ‡c¡âÌ)šÞ•‡ïÙ6®Ày«÷Q–TkÖæaöUŠËI¹ÑzðbËÐ;J¶xjVQ‡^ë­0Kœ4&è—XP}gì‘me@BÄ@—Ãñ0P+•íÂv-Ò€´r¬M» &4Žu~oÇØU±‰¾Ú(¤ž`¿v´Â×.{tf{tÃ.] ÙIXÝ44ûÀ¬ “†Tr¾!U"ÝðóHF€¾ ±½8t•óCX£Ü€º*¨USÀõÃfM=vŒzùbS ÅrÖUÅņct*–7TKEZ̵j )ÕÈ­ü®]¿ÊhÔéÛ †ºªQ,MJqÛª—ÎŽ‰J1×QQ¯½aÞi°PómÛ›î$Ôëm«5r}«ø]lzGÑ^6s"ô‰g DÌò©¡z"‡yW~ÐòÇB{´'˜Þea»]³•¸^K!ÀR‘pne„†áØqUÆiÁ Ãuk̵±0 ê êš!Ó³}Ø”Z3œV_ù¶ÚP)·qì«çM‹ ½/®…Q ¤Ëì±£‘3H9$oÓ<10°¨…©)TFÝIØR/Z.¹,Q±b¿VzXý‡R½tÍ—3ÊÐ;ŠžnTÖŠÒ¼ôÙ-À¹ÄÞlÁBy²"­¦wD왫ZºÙJ[Mè£S$ª8)5-,Cߺ€­ZU·7¢£Š…l‡¢Q†lª”²±er¨Ý)Úýu†P*¥úAxg(?èA ŽE`ø"ŒÆ@”X–ˆÅÀ 0RVá2n²i+[F„N2ôŽâ‹êD°ve‘WcR`”7GQXK{"saÖÐ*‘–{®Üê`ì¢l†h‚‚H±ò‰f¨56m– Þö³ØÕMD9?Ħ¤˜PÐÂRu\ ¤1Ýk}Þº´CŠýÁ²Ô¹xåœÕÈbàJµñ½ˆ/(ÙNÄóJ­Èñܯ+ó7eH¸Ÿš58Ë—ðØ#Àžn¥Å[,2<Å£Êï¡“ŒÝ~ô£8==ÅG>ò|ùË_ÆýØáÑGÅùíc|æ?ý €®=ö ž÷øóP²è8›ÄWƒ…Á`ª‡µ7„IcÓPïrfµ }£GG8#;®•zËÛh²ê­DGМGJXˆÛÍfWuº–âÄŲ¥j½ë¥?h¬nÓúŒZm™®AÕâM³SøŒ©Á³Þô˜X—ªÈFºÕQ˜Î¹Öå¿}áY|柞–ÀíÓsó™‹(#@7ä7~ã7x&ý‰O|>ú(`~å^úƒÿÀ€38œA‚s7Øi"™ŒÂ®¢.«Õ±›Ayo™8¬UT ‘mÁ@]7Á¹Ð¦ÎB •p+E®´@BCVœlt0KpVj­h´ÐÜš°£ º´;´3#Ý(;*õfƒ­Õ›Ýfpq5ä{a¶‰3ÚiËJ=ñA ê õÇy?ôp|øÿúl•/UF€Þ ¯zÕ«ðªW½*3Œ­Zá´7„ÐP½bp(ñ_7¬!ÝÐîu}Ø[Õ‚ä¢Z˜laž¢Á <(ûVË!×HܰìžvÌ¢_nkø0æ¶ò}pKª¹H|©Ù€ª-æãVñiD/iØÐ<Ø-Ñn"ò±mƒ.»Êm_h­z ͲeÚ&o.ˆŒ½£d?h_3Pk[töÍ­Aº®+”ÔÄ¥‚E›¡^ÀTT ,šÅçn “˜ÚÍ’MÖ?ÌÛN/ZnÖlvÛ0é¥*KJŒ²“-S%éØvÑn ›ÕI(¶jªjùò)r¢Ø—]6Š™=—ކu¼ð,90t’ wï­ƒH‚tŸ: sá¬?Øk):ÒªZ) Ú-ü®Œ¬9? õÁ€tUíÅ&0n5ur!CÐZÇ,./6V;ÑTi]kNàm Á[0éòÊ™#…œÞ¿¡Êax±*óaœuz2@sa‡¶€zxª¤Ò7zôƒÎ2ôÎ"t¬¤t\òJíÍ MÔiÉ¢‡>iÝDþ Ö¦|ø”æˆ5µZyÞ°´$íê…\†22ߌ­-[¡·ƒö(þ ‚õÆèD——M,ºèÖ»¨ãf©æçnÒΚ¦K|+Ý*ñò½EtÏö¤»Ä;X:¹ŽÛ(IF€ÞQ|Akƒ €¶êGsä 2Õݪf „”´%ÐXj2è`9;‘.Ë‹Cw¾úÄ IDAT©"¥N©.u\ÖFKeùl‘»ÛÁlVº ÛvŠ6ü@ánIØ醯-X¢|ÄŒBTÝ0q -ðÂ`ä‰X Ý--§­SݸB5 =4"u” w”Ò­y¯-X«©”›?—e“½¹Òà¾k¸Ô± ¾EU,Sw«}PQ(†yWà\DÃöt-¯´¢tî²ôx4o<´ ¤S¦ ¡â@L˜ óŽPÏà Mö ZÙšD4ÚŠa ÀŸÍ²€ Î¥Ú*…Í22t” wгQ A}Mñawæ°tõLØ+þ ((uÂì@:lMÇ1ou©²P[2kvÁoP ¶ˆü¶ˆhfFÅ ‡BAq¬ÔÃx õT«U´†+;þ:m0’8e¦…‘´Åœ­ÌçmG‰X ÊŒÈÄAžA—aó;0‹øðèÅ¡dè%ÍÅj)”ÔEUrŽX¤y˜³±ˆ¸ ¤Ó\Эj"dÈ»êú]ª•}S}X#€†zµ„Úš$IÔØ˜-€.Ñ"óJu™*3¢’®G°E]-Ëɇ§Œ[3;YäD´A‹"8do;pñ¿ÞäˆCéÅá‹Þ¦B‚“˲g&xè(#@ß…htœ"élÝieÍ{‰ÔþÔW f$Ê•QXT‹Ê­®8j€fŸdt¹V †J©V(h›Á¹863¸ÃÍs;4s£VofJ¥:l­9?™¦Èe|Šè(_ô!ÓFçj%i f©A'Þò0ïƒf³LHVÝN-tK4Š’ w”<›YSƒ7GoÖÿûv'!jk1f‡0QŽdÙ4‡x‡˜$§TYUº2*4 ®PÛ6ý¸éí´•ÿMõÛD¡TŸÎ‹8™ º(ª%®[ËfŠ{N3kËŠ,+ï¥Îœë ðVh»cÖ üºÖc]‘:ÊÐ;J9YRÁ/§Œñ…“ÊjYÖF/zkV/]ê4)ÚšµKeΣÐÀHyð" ÆÇTnvBíæiptS6ŒŽyëñ@Ù (â1ôðPÀ) eËiųhh°JR@+Õ=|cÝPÛš~t¨ Šb&¼$Ä2îYoJB¾©L&nè$#@ï( „*dA~ü×S³Ô$”þeƒèØ µ  [UuŽ@ª†Â¬‘ö¦©ƒ5»Þ}æx˜pžæiæl• Mç}9ìØ†aÀ®¢b=lb‰’!>¼‰AtV¿x ظ֣9X¥æ2 8ËNËú%J+³ï(,Ê·AÙÊÒv¢G€Ž2ôŽR»ÙY”¶íbçE2¥+d .Ð@íûÿ Û³ì$4}ÝDo‘öø‹ÖxKe´G‹cS`µùã¢7AYŸ×óB ³RÏúØTmµê¼4[9(~PÙBhá×êcˆ=AÏ ŽMFUËèÜ@üKµ†zÇïÅmíÏM`.óÛxò¢ÊÐ; #òc¤¹OUÚõ»^AÅ‹A_ “†²;+p–&Ž$‘ÝUÙh †¢¡çƒžäŠ_ÍT–S§ë};[lšvh{qlj¥z—¨¨Ìˆ“a[ ]Bª3Zé¶¢ÂQ0ü áØî0”êH— ­Zk«»¼ãœÐ@9Ü[«­]ï4Iàú…Œ :ÉÐ; s¹ä•Þ=:äùîìjXÓX`HÃFȾ¸WTITÛº‚UÐðöª%aO :23n;(f]çªqn²ç–´Å¦KMM Þ*z±å”m5óµ4ýf¡ê­…“мõUCÞ(¢Úô=ÎñÈnzÔ¾Ðò¸57tܨæpcÈ7ü"ÊÐ; ƒÑ‹hJؒüs`Írèk*ÁÖÄHÆ(‰’=¡šºÌœy/ìߪ šíW.vIµÓA“\AE§ÖÌÑí6š ºõd£Í¨£±M´¬VÀõ!ï¥{MÕšà`Ÿ6n`›ý¡‹–ÓZ«©¶ìš3PêGè­}¡rÈ=¿d­&¤›#@GzGñEsˆAÇOîòS¯ÔÉD@žË¢FIiáJQÖªçNˆÕ1h«oÚ¡]¥ŽµºØXõNeˆ£-„fÐC›Ró|H¥…ü ¤emÁh`¶?›QcÒœ Õ";é:Õ¥'è—ÐÀ˹fЭy9j&í,¯^ûÐQF€ÞY¬NÂ’A÷¢@¶f±#ñ_)†¦Q’%m­Ôw§’£ÊÝNœY¤½ˆ‚bÍâ¼ZÑR¯›Q(¡s8ëóm&KBz%Û‚´ØÑÄÁey(bÔ ±ñµäÎâ—»Tkö’¤ ÕÜsí»Êœ²wB?`™:â„IvjÛ~éÍÖˆ«ƒ /#@ï(  6Æ<´¯rªÑ$¬OIʓڽn ‡®ì‡ÂoÃSúdMÄk®ø‘ ʤ@9wµªrÚœR‘‰fe,ã¼ ¨} ‡´‰•lRkj1è¦3²gÝ F¶Z• 6N¹6ã8†v³ÛàŠ]yq4'íòWë)¨üÞÏh×WÝäÖ ù<‡f9ø DäÂÊÐ;ŠI(k‚/žf³kËÙIH€¹2CµTuØr¡ØæDýQ—6èÀš€ux.‚/Y`­â·=HÇA6( ão…Öƒ%¾ªãàŒ,íÐ&@°í]å9ÀÈ&E3‡³£Qyt¸¦½dB ÒXÑA›8â¼Ð–Ë]9õhJ“ü¤Ry?¢t” w_D,©0qäBiÏÃA‚={<¥‚ùvèVO]ÎW Gsý©"]Ûõp¾ç®C˜ ZW´ÒœA!Ì Ý œ-æé7éfWã')üÙ ”‡ÚÕ¸/aÉ¢³ëwR™€D«h²P_vnÎY=ɶµÐÏá¿Ý8ÆîpÛºíöX%²LóhƒN2ôŽ¢¼8¨(ýÔƒX4yN]ÂNiyN@-*|…’¡°…œi=²&ZÀìa’ ÐRCt‰ lºd›7Ö„´š·ÈRÚÒl‚‚ûã9›84kÛS°}'á H×û5:öù…=šÂ§Œeê¨ñ‹C£ÏI5÷áeˆ2‘ææÑ‰QÅ‚«‰ûýMÇ2Ñ4KG4oØ]¤õtK¹oR8ÕE>a–“‹)#@7ä/ÿò/ñ|ëõ>ú(~åW~@³Ì‚4UQ ÆVÌG{qÄi&SYµ€Yš2*Ö ÔÁ¼i.èT]²Ô£¹hX±çhÞXp3Û´Qö5ÙaŽÅÐMXŸÜ1¶CÓÚÍTƒÉ+ŠºÅ¦hú:t­´CËÆF‚#tcoâàº(ân÷–jõ$“ösÒäe¯dʳÚÖÄý†§sj,b½º)¯}íkñÚ×¾ðÄO€Ž“%•5ÔÑ®0qÄÏì@D FfǤCÐTºO¸hŽç5o±ç…¶%=Ñ0}[ìy (—,ÐEŶ?ËX¨Ø@CQï FÇ~º$•Zêü³¥ºZ}I ël0èlu6Ì›: ã5Åpî:x'£ã¸Ù>Dõ!?Ò4¶Ú"üt˃ÃbѱŒ‘¡!§yè(#@o÷¾÷½xòÉ'Ó¹/¢%/E³^06{ɬY™7Zì9 ë®\ìªNBƒ"mD–l›Ò”‚=“FŠhÒ)6É{C¸z°m=P%¥4Ycîø"aÛœUÀMÈ&•´ÕbÔœãhBÙ¡•Tnv®‡ž:‚s”3Õÿeþ(FÃ('í¯çã°¿!Z~ÐC­ÁÐQF€ßùßÁÞÞ~á~!]ëoâ¹ÿ=€3Ì_vˆýÇæÅ‘½ âæ%W ÿr'¡DHRÀ¬Ë^;qOó.š‰<^ò]NXcYSÖDɬ±"`ø98«uLWê— 7ª±R6,qT™cÒÉäj?è:¥ «8X…`·²¶ΗzíZ訯%@.²Bs>/8m=XeˆIë¶ÁÌ›úmT°bÐVa™U%“–ò™§Îñß?{œ·Î×U .ªŒÝ÷¿ÿýø£?ú#<ñÄøùŸÿyüþïÿ>€®àèß};€;Žáp0†ý ½Ä‰ù @B‡Ðߨ¨ ÈÂ[£4u(G È%„Š‘ÂhpŽ ¼&®ôDØÐI1‰ Ÿ-eÁtþø·ªv\#¯Gé+=gJÎ JÁ¹™%UYÌh/mÒ²7pbÓ)¦lÏË‘.‰k líÉaŽ.Lì!ç†ÿeKÞ÷X£œ‹ÃM(Ýìà;¨‹é±ÍðØ•pø?þËM#&SF€nÈßøF¼ño4ïåºZN S3è““æH@Ë™²&”$ ÐÕq8W“õÛ,­Ö%•–5¨ŽBiG€ˆ32˜¤ûÌÆ}¹4lÒ _èx¬51åhRÐCê[V/ÁžmsÝZY pÜž¼_±h«õ´’ ïBœdz($çcf¿l¬“•)`½;0!Ɣسç¥鈆¤l  PCNŽ“Z~Ï ²¹5W­£G™p%ÓÆBlç,'€ë؃ò”@S ›À—¤È¬'¨#“î(Û£¥¤º.͘#HÇm ‡Ó¼qdÒþ¬P„\Îf$Šà¬·I`ÏœúD`æš=«‹ãtŸçj;CÃÌQ†rv€6sTà\Ä@œ¸5Ô´£å²W•z‰œÊ®_¼¢*ýÙ“CÍÇ–yCû@篘¹Vz¡eè…A@ˆx`öLì¹±ãŽ×ª@z’87ÅÍ3fwÎèÎ9!"/PKçã5k=x¬K|ê$,M˜W~à œŽˆ°ƒÄÈ»9±çgD8%àŒ€Õ Y`Í3ÍÌ(¶ß0•@ pÇ¢Ó°@é9Ì…Y#±æÎ30ÏàPO‹ö Ú7ˆ‘9Ï@˜qç÷äÏ#@wLâ D°h Ζ˜«ß4¶BI˜Ì%P‡/ŽßdÚвG§ö-|¥%¿Î›½>!«‚É¥›™|9ÉVfбaTjDÑÔÌZ˜@ig9›àÏYF€ÞY~Œså©ß0MÇÌô¼Î&ùëÎò7ûS ;#ð@§ :gТêKÎ`¬Y˜8*›‚`¤àÀK30/žûs^¦ûŒâôO±ò¬AX1°á „3bœvÀÙà)f@7ht3ÀÍ4§ ܨ}/hÞ˜8Žª ’50ÆŒµižƒ±‡s8Ì=Ps°ÆÞbJ„9ü¶Æ:ì1aNf!ZChä"8vhñº› \Ú$xíQ2 #s‰”… B±èh¸¶AǨH²Û†~ÍÂÓ§`ͱ–„¹W5jB=m“DP™VÍŠ[ÀÜëÞÁ›˜ ËÉÐYF€ÞU˜À.ƒ1x¦77…ã V`£œëQ€!¦gÏý àN݉j:ºsÔ@½"Ð T¢G‡dB’A³hŒÙƒò àÀçèÎÁ8cÇËzþuÎ "œƒpÊNzò¶ç=F·GÀ@{ðû9@sF7#$ àÌgÑ}Òlf±îÛ/“·•Äq>š™óêwK8ìÃñ~i0aÅL3ö@8D‡b‚±{ ìUhì$í+‘!aU–ò:™¥œC™:Z \÷Ü:ÎúXDPF´€Yv X*˜=ŠF©¸Á¶3ƒ×6ç’-«-¶! ïÿ/é +zWaœæ9àfïÝ<œO±âLt#†<{žv@·b¸S'„îàS€Oݧ´`Сã³zÍyö»pÁ8¡lÍËЈx¦ï3u˜ Fºû¼ zÔ-@8cÏ OÑa9ëÐt ý|Àà} Û@½ïµ›{“G7÷@Í‘I'[´Ï ÑN2Ø€yÙ³ Û€¹ß|ç!’y>Ú¢©+¾¦CÍæàQÁè€nÀ¹ƒòäˆ_® I]ƒWg@ÿ,–kBÆQ›€ïü ®®þ+®ÓÏ[´„ï•ÆœRã¢Ó|^F@N6†p<åð.îÜ ð{í´y#N;Å óq¾çÙ¶·¢kp.Á¸Ò-u‡ eƒ–C£Ég:Ä ¨Éù©aö\ôO"[UÒG€6å¾èÅb~ðƒø‹¿ø ã;¿ó;ñ¦7½ /yÉK¾Æ;0ï{&Áü‚p„¸²6¯X÷àõëÕ1Ž×gX¸sx@^ý €çt ß!ØPvKœÈëéFÃ^¹(á N„¹²÷€ˆîjŒ%–èy‡sô¼ÀK¬xúËöpà¹n‚ÓË3ð79àù=ðÕt…€Ã8d`ß÷&Þâ#:c@ÇòH;´4áæYÕB%Ãkër~¯&Àr,óËà[Wáþã¥Ï=ƒKÿò”¿#WÃv¥.wÀ¥8èPSÖC€94ºÓbÓÈ“pÂ¥‘XtpK`ÌqøFÔ¼Bž/pÞÏ >r"s6K ÎîHˆÉM †fÔf©¢<Y³5r°ê«4TÊÕl¤ê ³Ü·ýÖ·¾¯{Ýëðîw¿ûûûøÇüG¼ç=ïÁýÐá{¿÷{¿†'ï#POÁn¸ÐÏ€~ ô`¸ÅçËSœ®oyâu,ÿ ¯ºÛ@wÊè„nÉà%Ó$ƒ×”LÊÔ#°u «®ÀïÙïä/ÏÐÑ«„wS[{S–ð#ðÎà]êöàp‚5Ž±Æ |ÇŒ×ð:ñr¼àËØÇÄôÚ0ý¦L^Èè^Ô¾9D¬ë¼ Í,(‰,œAzÆM¦ðÀ\µh1FÉx¯™1xÞÒ~-:÷XùÌKê81hÖlÚÉtU³`Ïå5Ðè¬éôdÅž¹éjݵ§…Ëý(îc€þƒ?øœáààðò—¿ïxÇ;¾æp™'ð[Á‹+xì>˜wîÁëðr†Åñ Çgg “sôOVÿL˜Ü¦gÇ’0æØYÆ™U²Cš“@Ù*È]¼æÀ†ãòÚ#bíç±`Là¢'ϱÆ!–ü,ø&Îø[ðÌá5œ¼ôxœ€‡'Àµ ø²:ï¹±ÇÀœƒÏ3ûÉv:ö£ÓˆAhSŠãœKP C½ÿ¢ eØÎ8îÀ7;à+Ðæ pxÙ3á*=Wˆppû˜ßù1=½¢ 0ŸèRl%88£F  ÚæØ½ÌXq6s V \cå—KdÎC Ü×òWPÊÓÌa˜:$Jö\SÚ’ÆÊNÂI Ì%õi~±qDÙ–V}”…ÚDÚ ûóhâÐrß4¼ìe/ÃûÞ÷>üÀü~ý׿ök¿öµÊÐïy¦ìf¾ƒ°_ë•·‹®Ž€Åeàì*pç*Ö_9„ûâݾ€Å—O°wæàÖœ¸õyÇÈžUj#ûÌŸèâ8QÓ\ÚõÄkùG´;8êÐÓ çÝ?áôès8ôÛпâ[ѽ¸=0.Mì1xΠ8%Úc- ¶XqܳxÜå¨Rh¤bަZ´#.O|»=3žø)àà«®¹=¬;Â%|7;Ƽ›¢»õ)à+Ç ‡&À*°Ò <;ÞsÞšÐqF–IiÏD¯)<@OYº•ÇÀÂy IDAT Pf ÖÔÖ\0é}XäÏ­Œ«õ›Ì ¹FHɨ5B*×;ùQ¾,ÓÌ‘›ˆÎ"+ËΊIshì©N`”(÷5@ÿäOþ$>ò‘à©§žúúÚÃÏ´î !=iòyœL€ÛSà+3Ðg÷Ñýׇ@_þºîs º¢s  îÔûÅ@ý±@±8¶7m%Æ/a2¶ò~Y­‹£ª= M=àÒ¡ÃäÁgÀßòyðÃ_=ïpå1àÒóý€½#`vÌz`:&Îóî¥Å¼¢¥S€`È$kqH¢œ€/O¿Ê~ôäÂÛééèŽ ¸ðÍ©7qÜìpÉÍ0'ï»íº«˜OÎÑí­@ó8ý´§#ðžó Í¡7ÕðŒÁD;oÓŸúL ?ùQ`Ñ+N.ƒi+AY²hÊÓiÓF`Ôš“ :¸åm0q¨NAq\Ú ¹ì±+{ê¢G2y8¡¯AeÈY›7êÃʉÙ|ϲ?…ÊŒÜç=™Lð®w½ ¿ýÛ¿|à_Ý8%ÌÈS½úÏoÜê@_OÍ1ÿÌþeŽ®{ûô"Ìè)Lè9ø! – 4´Í_Bïy ;PÅ!P”˲'‚µÅI‹"(‡Yçhæ–t‡„ÉcöaïÅö®&_Âtïÿ›Ÿ“ë@÷M]ºË :èÐÿx¶èèŒÏĨ¹S`L.4=’I&y²¯÷Á2&ˆê– ·€÷?ó M§w ðÙXúYÝ„p‡_ž®Ì_‚ƒ½sÐÞ)0½ šÞ9ÐÕ¸¶F´ÆzÆpÿ8'SMbdØw²­9Miâ;BYuÒ™uê^˜5”k]¹/; ûœ)Iä·O8f ÎÙ‹ƒ%:J´Õ{'¼8ƒ¶lYmŠEdÑúI®Íš´ëþI§Mv£‰£–û ßò–·~ñO<ñÄN¿===ÅÏüÌÏàÊ•+¸ví~ë·~ üÀ†3„áv§{NtÜùÏïg'àž¾È¸ô\‡«ä‡ROé2æt Sü &¸… £Ãˆ¬W¬Åè³°'ým À¯ÀšÇÑ{˜xÂbö9«¼ç–t‡Àä20½ì}3áø! ›Pƒé?ãt¶çÍÓhr tÝe€Žüì3Í@q"š€ÈÏ t ÐÁI}ÈÜøÁ Ì2©Ó3ÔìÒKÒ €ÞݭɃQÐÔçÞÍ ð¥)puï2^´ÿ2ì.@{_ø'àEKð‹8» œO쒫׌1æƜ’ìü*VëÎ50'@VæÏ®>¸ÍYà¼ÂPG¡ÿ Ràl°étAÚDÇÆyè¼Á -K Ö6-sþgÙFÀl¿¦ Õ#@g¹oúïxÞô¦7áÁ<þøãxÿûß7nà{¾ç{6þþOþäOðÃ?üÃøñÿqüÜÏý¾ð…/àúõëÙÄQ€3Ž ¸=n2ðU¾Ìž#­¦Ø'BO˜aŠÍ1Á%t¸ÇèpŠçè°Ñ2±j¿­A~–$*ñÉw—2CN#÷"VÎFöu{ïºÆäà˾ÊÀC~>Ã]òëô¸Üc1ý Ül¦[{³ -n ¢@‡ DöÇjROêý~2uÞÆ’Üëb- öêÔXtdÒÏÝŠóèéh«îÚ#¸¥o3Ÿžš“=ÂúàyxÁÑ·ãy×À¿º›ÝÄÉ·±Æ9wÉ›/ƒqØc‡rØŸ9LB«[±ž+€³yA9±éd‡.;¥é£ôòˆç+ø!øEjÊ. Øe‡af¢¬Ñ²e{–žªºÐm¡¦´bª…6o”vhµŒæÈ M¹oú§ú§ñîw¿ŸúÔ§àœÃ<€Ÿú©ŸÚ œà©§žÂk^óÀK^ò|ñ‹_Äõë×qýóÏàùŸ¯gÀz¬¦ å ¼œbu¬Î–§Œå1àÎ&Ø£G`<àA˜Ó=æXãA¬ùk,É 4_ƒf+Ð^nÞƒæ=hîuì·tqŒ0à„îOÉœá„+aš‚e;tçüÈÒĈ¥É£fÔòØ/"ÕQˆ68{W»b4á‰Cú¼Åéå¶q©æŽø¤9H¥T·8ì›3ƒ–Ö•Ñå¾è¿øÅxç;ßy׿ä‘GðùÏßÿýßÏþóxä‘G~þKxþ—ÿÀ>™| ™> àŒCœa‚iÞ#Ç ?ðÀÁ8á ŽqǸ’ž]uöp žÂ¦­¾FGäz¯…¢Æ0ò%…|îçkÄè°Â>—©PØó^Æå~‰£~‰#z—\&ÂÞÊ«ˆÁÒ‰VÓÞh¹Ð—A8y®.Î/çòq‡Ë`Î1Å)ùïêpÒ§Âé82ΘpÊÀ³Ì¸ã€þ2нü påÛàÜS˜ð³¸Ì—àp‡öûCx“Ç ŒÞ1zç?Û÷ÈSì™k3‡dÎ ¤¼î7ØŸKW»8`e o·â ý‡TTËÆ0àÍ‘ôÄÿ˜+ô0PËuMOCåÁ‚ÿâÓk|ñôÀ9p²:Ê} Ðð»¿û»øèG? "|øÃÞú·oxÃðæ7¿ó7ƒxÀ›7Ðß·wÀ%ŽàBqtë‚TÝðǤ lúÊk`)1\_óõ‡'‡š)óJç‚¿Pˆéhy£CÅu·Jº4Ü\î©8¯÷~PÍÄq-óh§Ö«¦§É¶í0ÃÀ NX4?®Ã11îáŽn÷À­5ãÙ ay‰1{˜_w€»Ž%?‚?ƒ9îày¼ÆUô¸‡Ëp¸Ì~–éµí|ÖÏãR^3ÖìÙ²EOX˜<]¥ºö‰fÎàœ†}7<9„²:N¯KÑY®P’K`N…€rϬL"É ‹•á-­\íâ5—}¡_ôü)^x8N€ÿüKŒâå¾èO~ò“ø³?û³»úíáá!þøÿؼçT!ö3E€N…2P×) €zÁ> êÌñ¸ +¶Òiî0’ÍDî6÷ŸÅyDÕN”>Íbo4Öœ¦î¤¤–Ò9… +úÍëÒ3t˜‚xŽ5'äÂ7ãŒ; Üp»ïpŒ› <Æ3 œ_eLŸO˜½€q~€Ðóó±Âóq‹oâŽñ ¯qŠ5Î¹Ç }gíÛm:ÆtìÎ Pž”×<³:™9Øþ]³êX59íókiÌÏÉnŘÅù‹V3èË‚WDEŽbF;Ù>%/¨ä|/Ü`ùã‘<+¹¯úå/9þüÏÿW®\}C¼½ÄY.r Ž :ƒtíÝd³g¿˜j^õ›¤¢°o€´Ô*¡irc Ô˜…Vrºr›€LêZúug5y“ëÀ˜ƒmÓG‹¼ë]ç¨X‡å\Éï}÷]‡s0NÙá„ØÏ²à6€[̸ ๾Ã3`|„“CFw X_óc†º)n‡Ëèq =_Ãnc…s¬Â„QÎ1¸gHFrðk²_€"{ž3‡Ê ˜»xÌ~ÆCÖì¹ ÊÚ“#c•I®®•ýÕúŠ•q¸aÞèá}Ûáj­»ŽŠ’mhèºP¶¦5eé$÷5@üãdzÏ>‹½½=ø:4ãŠ.’ÊÄ! ¤Åœ5a ‚YHÕ…’a#W‚²,þ®Éž#ÇšA³8ö{ç‚9Ãç^œÑ¡g0†bËÞ9;¯µ=ñf šbà=NÀ8fÂ1Ø›5àpÜdƳ˜à™¾ÃÍ)àŽ€ÉBwÄÞ•°Àöáp‡+èù+ܸ9õŒ.dWÇ@çü¹?ööÝY°?;üQÙŸ€c]znHGiŸÎ.–Ž×ÈÎââ}„c«ƒP²hÓÄQ‚s1å(—ýºA0Xt9a©¾¬ jQÄà×Q‚Ü×ýØcá7ó7¿®aÆÂWð`èåçm[t.úÚ…!ѶGs Ì”cËÄa5‘ˆEbÏÙÎ,Ù2sÄ(8ÑëO¡RWvèòzŒ„9ƒ#‹î‚i£ [nÆÌ„38œp ö‹€qÌŒ; Ü&ÆmL<“æ‹ý p‰ÐÝg½&až±‡8¾ð>nög˜9ï 3í‰c?Õ† %9L½áØçMiâè MâñŠ´‰œYt½FG¡²54«HÄ4Š$ëC6,}Å8K!ж`Dè(÷-@¿óïÄüÈ|ÝÃÕ&Žè`¤´4iÈúàÂ/2Tf¼õB⿸i‚3FuHͤš@€s¬ ÒSƒ„GG2;'³wBñÔ(³†0uÈhP2{°çh¦Àš›î Ø3wéˆàg­Îš=@Ÿ’à ºÖ'Ü¡ßs=ïxNàIð‚è XõP&ðŽÍ{ wû8q 8`Ÿ“›9fÌžY³Ø\È—0½hb±É)W=›fM¹ÛeÞd‹–ž˃éöÄýì™A*|¬Šˆ*”ÒÌ1¸#Ϋá3š8Í6A^#Ëæ7Âs–û ¿ïû¾/|Þ~}%´´?g ™`-ísyŸA0ë( ÒP;ÀO´d™6²9C•~bÈŽÁM¦ P^Ê(2èl¾ í¹QyqHóFhéµD>ì¹gàçÄ8‡_]ü „spXmÜõ:¬&¼×…US:¿2o{³ –k æÞ. Œá=¬ÜgÜãÔûÌØwa6UfTM›‡Ë‰Õ1YuÇ6P'P®'NÊÇÁÍŽ%pçtsA°K;4GJ»©ƒ0³è˜K‘ŸUA¤ÿsÜK`nYXÌ*µÆ +÷-@¿úÕ¯þŸ®öâˆ,:.$U°ØnvrŠÆ,%ePõP°gšŠä½M’AK»sdÓë0oÈ=èƒfÝ1(A»ì(„°9'G—lÑ–[!qà=Θpް‘·IŸ¡óàÍ„stèg˜çÀ9@•ƒgù«5bÏGÒÒºoÝ5̓6è¥Ð0o02@£×C¹æHSZf %QmdÏÌŒ+öœM ŠIög彡;¨%ÂK°bÊé˜;ĵezP`©±µ‰-øÒ°tB;‰¢˜ÉóWF0wøm }¼ä`æ Ìj‹ ƒ®íЖG_ÙŸ#‹î1AîHŽÿK«Y´Bɪ ²ëáÕ½9ë°35”º$ì-õPË^Eµ#@gú.¤î$Ì^* 6®Û…аA[T˜@s2oíäÄü–° ˤj«ˆu\±gÙ1è8‘vé‚M®fÈ ŒÃQ>÷Ìl—€yL~±¯8CEfÑL¤e"¼])3è^Ú c¾Ä4s¤©FÔqę̂㺽¾’úøÚ‹¨ÉœßS{— qNhÙQh»Úå"b3jzeï”/¬ÚòÊÌáÚ{c€M…X–‹9[~Ð.p–Ô{”$#@ï(y.Ž\ô<ƒ®'é÷8QL$“Ž)UjU«Ló†ÒÚxˆ !HǪ™tÖ¤§-¨t8M# ›³lHÔÆÈz@ŠdÏŠ]@V8Á*U=0Ð2",Š}5µ¨®‰j€Š^ŸgFÆðd0‹©Iu*SGdδ Ö¬L\Ž3+ê…Ÿ³mވˉAØŸSÖÉÎA…²ño¡l%™ †Ð`½ÐÅIŠDP¬ƒS ­:G²éÿ ¿âŠ+«H­E0h†_¢di™ÐÒî YH†>——Ù½jܹ® eÛP2™±0ËІ<ýôÓxûÛߎ½½=œžžâ=ïyf³€XÐ4ÔF‡5ÿF.˜Æ  QʪLF0†$ìI.[ÑXËĶl²õb˜¹U›@“æ±6aÈ Mñµ·FT™•JvpXs/@¹çdR–ÃäE‚b„-ÊÖ`ÐÊ›ÁL¸Å˜¡AzêÂÈh‘‡1¸t­°CÇ&>µðìÐöi݉(; c(¥”nvÊßMÒZ %yç*¯PäW!\€r¡Îg*~8âs–  yøá‡ñÞ÷¾ðÖ·¾Ÿþô§ñíßþí$@K-ç‚nù>× ¥0˽aâÈvLËî¬Ï¥Õ»ÕA(¥2{'€FÍœ•*]ñIÐG ŠKßçü]ÍDíŽA#"5DÊ*TÍþ'IóÿßÞ·ÅÚUUýÿÖ9”JÛü¿ ¶P¨ÁML”‚È"1‘>µ‰J0bÂ%\#`4F ¦`š(iIl¢ß UÀ þ5ÊE•K Ÿ±B«¶ÐsÎßÃÚsÍqkíÝ)ž9NÖÙkϽÖsÌ5æoŽ5æâ æ >Œc—é´Žy·Ñ){ ]C—²”M7`ã µ'ÍÇCKOzÙQ¨ýh8߻لã²ëBwE¡Àš§£óŒSžÀY—­hTZÐ’èÝ»wcóæÍ"mÆ X¿~=žyæìß¿¿gã ,7wúÍ!Òh iW% ¯Ã¡Ì^‡9@-80©Nd¹¹È5±gÒB9Þ ¯c0å#u¶c sÌY¾‘ppÁ¶*”ÊŒƒ³ëAkðx·HópG2œ; -tŠ0G÷ëøÙpæn¬ =‹¼&äÿü•ïø÷”7J_ L†„ùtJÎxÍåXp†½cølBÓTˆN´äzíڵعs§Iä‘Gpß}÷aëÖ­"ýšÃs‡þ àX¬œù¬š=U…6¢uŸÇPÄ^%Î8ñ†ÖU´®I‡Œª£°CIÔjô†Á7´^™Ò»u Ù¸b½i‹é$¤$F ’ Mì:OÉ€qðQ¼ìòÈ^>Ú#\à_ôÓÉ…Àû ü¥“ÉŒ‹ŸòþÌtu+Á‚³Ö#€Úuù˜ùR¨c¬aaÀ,œÄÑS›Ðµ+€\ JR›îkj~ܹ2NùÎŒ€¿ï]ÀÞÿ‡€wæ*@'šé¿déÑK/½„uëÖ®¼òJ¼üòËÝoË›e8{Ùœ½ì |höd¤y„í+z{D„6æH4>ï;Æ×B£QëÚŽFÁAìhÓR›ÛÂj1£$j¡u@G Ô#ÂÂ(ŸwßÇ¢ãÎÒÜ©gÞ ;Hâ“|Rù-äOZÀˆFãÏö|4>§.^;®æ¤Ž.Cª¬ÒŠmjšö¶¤çøXXÈú.,´ì€ù1ëVÔ ÌMsÐä6nÔ¤œ·–²@#¡×‚Ò3•‰Ò’¯TâMg+Úv‚cÛO¶#êkŠöÈ×–DisýÐɳ8ûŒe8{Í2,_fº³—,-yÚ£3Ï<ÿûßÝßòž„£î›ôž©sT¬'­'pRž sgI»!Ý~RNåtJjså9ì' Ixç9í&ÝKžÞ ÀlÞË}­´áÁ¼ Qm‰O IDAToHp—ÑtÉÅ(ÁÕ/vò›Ç,H±àަÄtÌ·E+œ×›±—Ë; GÙB¢´ô¤Û¡v|”D–£}èü-&c*äÅ’’a Úñ¢‡º;˜Íë„~3I‹ö§‹j„#Sè )U+ö"=QEs>W1hs cì­@ƒÝN›¦ã‹ï=(+TÓXæi©SŽoPwŽ8"9í‚;i±ë ÌÁWÞ1˜¯—a÷ ˱gÞ qË¡ ªœ\ÐÑ„¤9µ,Ç´¨ÃpãçÙló»âhø3—ñg Îí§IÏÁ¹•›§â¡0ΠZ"Ñqè´RÌisA=;uPþ¬ã }ª=1ÉûóBI㊠kˆ œÓïˆXt·È|sa'’Æ´‡D#È1KI:ì;|á$Ò ™ÛcW6m„¨fÔ1gÿ¡ÎesEÔzÐrhŽ=·à¬ËNdZ·Š]Ñ”›Í̬ˑĆD[%œOžŸÅ­|Þ€µ;ºCöÆòNB ξĔD®ÊÅ­·õzr®VÝ6b©ì"vÁzܘQ¡•T€ž˜,ƒ™còq<ÌPD¡í‰)$¼¤Z-@§u[=Y ¤çAg¥qÐzM¦þ¥¦É¬lÚtãßRˆÃÓ–—á| ¼±¯qHˆÝØõBE„Ü¡a$…¤)à h±¿‘3¯è]ˆcœmkkúÍ: %ڽ쨵'µß¤VH¦RjüI)>?ã)å´ÿU”2É’×gVµŸ3U€žZ“æÖ7½[xÎÐؘ”\§‚€f…2Ô¡FýwkpxVßÈüxÝ…5‚سmÖ¨4‘DÄ8ç+•ß8ÄÁçGjï95tƒ)"\Þt®2 >¶ø=ïOw¦pÇ óRµ£)Xw#98Tép‡êüìºPg¡šçWŸéQ¢MH×3!ƒV™;ÝÛê뵕áÑé7–P:Sè )w¦ …ÐÊS¼…Ë Ð’ý&Ž4üÊgžžªqšæí˜½ñ  Ðcœè‹;§6€çßj-”Ìp³@iœBŽ=sïY—Ÿ?NÐ9:Ð)yζ\Ò²™ÂãÓÀŒ<ÄàcIN9sÙÞh oØÝHÅ¡ù06Í]”9!O÷6Y騌*5Ê\‡´)¼£µvfª=(-ò ¸±±‰®]Ç·3í¦1`Q·¸çlg³P’‹’ìp: Ð^Üy<^¬8³|ü¢-aÔY d\BiaâXè®t Ã[–UßlB#Æ!¡BþÖ,¼ÓPƒ gkB]ü!gÔí,$!‰4ÁŸš=“eâØRJ—¢˜R…8óD­r¡(– ­uêl­àl©ô„Ôy/cS“³S…nxu ŒÕY¬?ý/Yy·Ë&Ï{ÖÀ­;!@©;x3bí鑊;'#ÀÔÃë|˜Mã µßh×ÐæS凂n' Ò#Õu@cÑ@`¼Î¦™Vƒœ<¦áv 6/²ù¶CíRÈ£=úbÐèRŠU´ÁziQcόƓ-Úßç¸óGS1:Sè‰)‡8’ÍÇíòjæ›w7ÊrN v‰FÏ‘ 7œ0'ä$r°Þóø\…8íAs™·I4“ä9î9=¨F®eâ´…‡RÉ|vm÷ì€NbI;²Îæ’þ$Xyž`—Ô´ØÎÁ8äÁ`/5Èg¤Yƒª³4Ý;û4nž8¯½t›P @è‰)ù4 :F1ÔUtü´Øõl†7ô¸7Ž’jÀ'>¸ž_Y>­¡‘ëqŒn Ð&+£QSìH@A£ŽÂd²ªë„2Qüˆf’=‘0Í%O '¦ynM0-Ö/ ±ƒoëI§ïåÑ`¨É<Ÿî]P£&ã¡E'Rʤqºëñ}ý˜{ë¬ÉÄ:ÞÐ -!6í¤gëø†K´"C¾[¸üû¬Q+]<ε.»t>½6Ñõ Åø·d!&³Ð“VÒy ‹ÙÃÖŽsCBKáÎj%2#®˜/“F¸tNp£*N©„ ÐÄD¶òë $c˜”;NŠqúT!SÇ&-ÖÖ4—ÜN!h‚˜s yólZϦÑïôÄœ(¥\“”g¤‡ÖÉ´– !­¿áàÔ,«nBÍÅ3j‰ô¢õvT9»ù1ËFÊ˸†Ùù í=ä¶A l*)`ÛtñÒP•Haç¹8âòƒò +6 ª=!äk©?¡¢õ¨% yö×¾â Ìé•ÔleÅ+’>¬§ÎÅá‰K Ä¡ÎZ;.¥!^2v³2’ ‡;š;é®H"@öÑ ‹caÁ9 ãt4é®;Cíü0‡îöà#†ú@ºÑI=î¬]>³ÐàWÒ¼D(ýhóç »“49¹öʼ¯¬˜Bâ“TKÌ™8ü¤õTù;SññzL¼ì*¨]¤Ûo¿?þ8vîÜ)ÒSÕ°³ö¨5,¥û!Ïàè•Ú`wc‘”k\·„˜ªB9§f£Xb¢ÔÚQÇ %URR{Ù ˜à¹Ã„¦1åç'†v‘E#·oRJ8h ‡stϘòóæ ˜ërÆm%0£Ýð‡ÙÉ*]ê.&_™5]…ÿ‰¸eG¾8Ù »%O z衇pÖYgáñÇéŒGqäIÚƒVŽ¥©~©ž4%ÚXrƒìÖ¦ ¢üÎ0fÈDð"€ˆº¢0+ËM³}´o ÞÌ=·ö\)±"lÒ¹çAkîù³¡ÜøB]íC¨,W]}j†W¤²âÒtˆ£çäæÃCN¯hº%æ"VŠÙñ5öt¾ŒV$5ìLÛæ|ÉÒ’èÝ»wcóæÍ"mýúõxúé§qÇwàÞ{ïUwø“׋A{kºeNöÇh­cj‘’RSà²S™˜‡ÌOt53…ÌYïX•D¡4ª[—H˘{ÐÞ•¡QÂÔ÷ôÄ 5´YI¥…&Š”ÇW~³ùó†%æ[¾Ê穾G“ŸÄwR}Q9%%ûôbwP¤¥tØÃFn‰Ò’èµkךÆý÷ßýû÷㪫®ÂóÏ?|]t`ŽæñÆÂßÌâÍIX>óATøš}=쉜Œ2“®%¤¤®’h“g7…ë÷ª5˜×P-õ.*¾É58"älÏåúÃ!I«æ:˼ê<Ê!‡èôœŒKHÊÆß훯?®¡¼ãªÊ$¤ÿºäå9¡iá![eŠZ ± ¬“èþk„ï#`˜›¯hÉ´Gë֭úuë/¼ðBÎ0Ûƒÿ7» –a„c0§8½ŒZu¦)¶RˆC-£™LÚ¬¿¡½iÆ[‹S#HhüOƒŽé‹dVöoyè‰0÷æVŠ4<|+msÅjz A‡LYv¤x˜¥óézã£g!¸.1——f`%ɵ_,Û¨ìCÅJËŽŠé‘#øá¿ì:1ŽY{•>0ƒ.hxóG†×R¥ Ð=ôÀ¨Þ)ƒ³ãy³é:S½õš£R ÄdºíMÜÊì¤yóÛP¶%»¡=&/°C¦ÓIƒs<#3q‘'F„E‚TŽC\[Æ\”ÃÒ<¿|ÐÊ_b)Ñ$ooBÎÁ%žŸ>Œí_4Ê ì)gl+:H6?CÅ,%ª=ñQCcÐÆî2¥»A½¶óJ#–ŽKq‡øx†Í–&uTÜB˜Ûðõó#ŠÉ2´;ÐH~°KŽ–@¦+·(6ÃaD+àO0R¥ïzÐÝè’Ž5{ç ´8;œ+¾nR -ب¬¸ø2Íäi¤DVp6TzBêÆï#o|UªþÔxãU”ä_, ÌEÄôÇ1gϹrQì00+‹š¾ÍI‚ÉWØ™™+I–€£…J‡_Vš5]DW> lȈÑé2²aÔ-Úï•h(Ú¢¥‡’ú<Í1ž¾Ç˜¥½ZçQי΃_[©¥ ÐD”†‹©$d!@ b¨… :ãEîöÅT)3è@²MI·0qîj¦Þ,9w!&VR^þ¸­_æ=ÀáeçンåšhrO‡>è¸Â9t¸Öí»uQS—UIZ«ƒqôÉYå\ÅH klXJßœ˜gjhÓÙdÃו_% §"6éVà€…$g›¦X*w:ãH¬í €ˆ7ëš8æÉSuÿ#çFÌ錼ç´™šFGQJy¹VíE{32µVREÊià„ ZPV^™èò:(㔂üV>¼Å"¨$GB÷øC‘¤À™›5T‡ h2p§á%ù]7›Wê¨ôƒÖU_{AhÃ|z€Ãk«Ô¯¡¦ƒP9yN íyÏ#Ûh”ƬJiù›ìÞJ/t…íyewÑ)Ø8V”ó´ ‹gxyðC20³, öR0›ä÷TfÞEq%yš6'âpË'úd¬•‹lxâ—ÕÒ¡ ÐRª&@ÅçÙ«è`¤Êº6G÷Në³d="¹p ¯=L´X^41(*cwSÑÃì\0Vùõ—U¹uí/†„Á³ [cYz\%¥…JQÓ$›.9YÅå«”e–Lˆ—«H?8sõJà,Éë+U€ž˜xõhÿšÐ¶IÝ' OMñ³7(pd Q¼¡eâǽ;Hž÷µÄ¸¢t5³à#ÃDv½’Ê™wŽÞNBûÄúòÑÉ‘;£€!—»Vñ¶Wß@p±¸R±E—DyW ²æ»”©ôÄD 1‚µ®9ì°ŠãÄx5yªW-ÒGGV‰K ÚDy[àLjR»àŠ’U³ñ¥€Uˆ»½òë›ôÃŽ^Úy:JŸÒ¡M¯l̰»ÞLçòñÂZQñçÏ2x†öMáÁ÷ ©§U4Æ›kµÔ©ô„Ä«ˆ­¤¤ìÝ™ôíRÆ™»5ÜdŒ·ì#§ÀòóÔ^U‡C©¼¬5—šÿÛªêONq¡Àð /䵞9nÐCŠx¦EQ=¨œI‚ÜY%Û#Djeø¯ÑwÚQGý(ªß9 ì÷T *µTz ÒÙ7¿Æ®Zd˜ÊsŒ£´ÕuYj—œNŒI’8R:x ç¡?ƒPCEŒ |e6¯,ùš!€eهNj,K¨_¼Q‚ƒÆOõñgæëi§%è‘£ çRqÒwû7±´šÝ `º+½ƒà ÈüUPz*¢±i9NfX?¥Gá„3ì Œi_šlUð¯d—D*`ö=C?Ì@BhþTË3u%R֤ЩJêÜ=âÚcê³/>s‡­\Š`‰N廚ùâiBßH¡1ÇÈ:EüTΛ…Ü´èJ‰*@OH²“°ß#.™ÏÚ0Õ Óvr@âÃÅØT79 ²")qÁ’ ãO:ŠÜPckoYzø*‡ƒLßXh{î—¨ïñC9Yž¥„þ0G©ÙêiÐ"鲊™±Ðþê{TÝcJöV @è©(Cm»Âø¹±9b'èÜ›qc ì۫¼žšŠªÒxö5Ù‘1Ðx•7ÁÍ«À<ˆ®Å…#اâ§7î„mŤ"¶ÈJÐe ß® Ý ŸŽ8²âÌD@ö}°ÜJ¾fÅr#éMW’TzBJU$ÿçp”²ÙcœNP'*Íê2‡1S`=hxˆ#Z£„Vj°ºÎ[ƒsKJ¹¯éškNïËG˜gç¦ðy‡œ}I|Îjâ(æ=*§>¥ô”^÷6ž<£ÙFe8¨¸–U€ž˜2¬ø¤ X ØÉóî¦dÁM¶hVIcXcŸéÔ9â}7@£Fn˜]šŠh óCñLÌ’f†z á>%kôŒƒ„œþM¶z¦+7]üŒI&‘Sã·‡1’l¯w’üݵ½J*@OLm§vkEý[MqÉg_kîyM7+ O_£Ý´´hýª›²ÀnˆÕÒ7>Ò«ºéë¬aÒG‹Ð.kò`s‘ýþgž¨âå¯WPŸ u#8À:ì"pöthü¿4Ÿ(‰¥2¨T€žŠ"šaY¾‚TlÚÛ¸O×®dšâ B‰É¸ÉƒËa€Öa}ò‰tâ ÷®–‚ =Å|)+•Föª¢ˆèǨ(ØC@™yˆâö`WôÒS¢®#8’ÆÓÏŒä¯kgʰRG '¦¸s˯f„ÒdÅÚÚ;³\J3HÂ% ù§•Jì„€qôÄN±î0¡¤˜ÇzjWÀ~÷—õïÒJ¨©¿œtI‚–ˆ½7ÜnÆc”[Ê-ÁX Ôüºƒ’eQVfdc’™ƒšÆ(‹Tg3*LT @è‰)TƒöÌ·é!ÿÔLD%Ýxhž1‹ (UX2Û]‰3¤R³to´ÎiCËPä??OT‡Cæ)jFýêz¸^0ÖØ>ŒFÝ ¥ZfÖç. ¼ "óáëpÌp¥<Ëöí-Ê@Ä¡ø¼—8U€ž‚Jt¾&k—¡¼I3)®'áÝç»Õ}òR£˜'Ç3)kì²E»|ë)%ÖÝ]¥EóÜ’RÄÐ]‚tP^¤™„™ óm¯¼|8Wê);ïÆ‚2ÅÑÝåyÑ%U€ž‚††82å…6 Lå¹aØ'­ÜDÐÝIÈ;kMÌEài?óD™Ïh‡fíŠ(²>†””±çç¼/Í8›éc–õi/>ލÎF\d*º¬¸‚S.0"®$›> Ђ*@´mÛ6<ùä“8á„pã7båÊ•88Kï¯×ð†Pé¦Þ…4£~Qœ_z¡Ë³•BìÆÔdMÎ{ž6 #&C5ò±­(¦(ªˆœÝÑ·äh‘û,`åÊ•xî¹çºß°€} û@hpL³Ç4˳5|Èš5Ô‰È脞‡9ñ"ÖǾ›{%øóŸx Ðd¶¹]ç’(WRbì€ø ÊÉ»P—[*½ižºaW8È1ˆÉÄESÖáw óï&ó_MK =Z³f Î8ã \qÅØ»w/î¾ûîî·YÌàÄ™Ah°` žy&/Ö[95iX]qȓǰ_ŒàRê$äà3¼Xj½Sa ë°.té&ŸuI”‹e½™f× VŠ4…r EOúˆÀˆÔÈ™Išêþ{Wó²;öØÇÛ !`ÿ¾ŠÐ‰*@ôÝï~×MÏÐ"÷§bÓ-šqÑr[D§"0{à£sÛS’çµ%~ÆÜƒ³æfDL,^ NÄ9”:¨­ŠýÅ1Lq˜AA¯šÉ·îé3§¤”ys‹òìç!bí¥‰Íˆ+U€ž†r5)×»^vmÏÃ&`új—d\ijnì3Óe¨RƒA[HÐNYׄòŠvCòt£ab]ÔWÏS¤5×8ñG?HºÏ«ˆš0§´Õk4ô ,=ª=1y3¹|ÔéŠ #û k©äq ÖŠøÒÉ$¯ºO©ÞZ%»‰Ò019¡oÇ(åŧB¸ `Ó@ Ø¥Óœúq¬d9~¾û: C°Žn°7K#!ïÆÔ÷@ld¡º=¨(©ô44öƒ´B=ö”Ÿ‚ø³–b¿“¥±Ê­“!Èõˆ5$WùРÁ_Ô#°Ñß‹"û4lbv¥<…eW¸x²ñ½qSÀÞ£Ñâ1¾ËÜTÈ«d¢·#I&yW•êN-©ô„”)žÅ•mÌ.$¾Ev®ëA·Ÿ’Ì[aôVÛ$>ÜüN¥ÚSÊ3¬¶>ŒäÒ&*’ Äc ×…ºx2©½àÒ§Œ^>ç²Ä’FÑw™Hþs5i¥BöŒ¢ Ÿâº2Õó_Tz ²!/ëT‘ØýÖç‚ùEƒ1¯ö¥*Ö9륋ÁÀØNLd€Ñ@áE¨H”nòï&fZÊ›®©“‚3/Ï 5»ÁçI&¢ü¼Ïs«SøIJ\¥Ž*@OEí„öŒÃ }*VýnH­Ã˜*RTCiF´ç ÍA¼È=‚ÛòLÌ ð¬Ý j†¹ÒJy Åè \%J¤ÁØ>”ÉŸvÈÞgÔ‰bÕV:¡mÄ'¹[´•T€ž˜ÒJ}U½·âD5?õ‚™š_’T–Ö[)Òçxt£D˜:’wX¥ú|°¸°M(•Y)ïÃò>&ÍºÔ ¹R<¦rt$Ö}d‘ü¢y9a £¨Ôò1"‡í¦ ÐS¯&¥ºçׇÂ0„TË]·¢düscë½J×E6úspëSÊ_9¼‘¯T{lGm@”?BaE¶¨°À×a’#–‹)vFùï½Ø~–ÀYó+‚tºWª· ¼û4ŠÊ²R¦ ÐÓù¯çiª7P24²§½8[ª$Ž©—Ú4º<,ë˧”PHË#;úØš˜!b¥| e¦1{/MÌé˜JLÄYÞPÏaZ¨+¢6Ë<ÿ¾‡?\jfyÓÕ—U€ž2¼ðïÙàRšþ€»»¶´ÚÆÞÄAºʺó£}˜+£Þªá{꛼ ,é{i¹Ñ’È¢|ïæQÇXB)OE,Ú&ôJÉ×È¥£ÁÏ´£Få¯ïæ.=hš ­P²¿HçÖ—J '§á«‰µçÑP;sa{âZÞwœ* rIDAT« š£ä^ôqË1ëA1+.¬iHb\R“€25NqpvQzñÇ2(–´q9 i0ÄoºÕ’OÝI­mL6¼¬… mŠ¥f}Ybd’¿Eá–ᦠÐS®e/@‘ý⤆‘%Ý,jˆ!+FH()Uj+ŹHùÌÙ¸¶¨E\…tÂd\K* ÃFžQÅ%(+•Ìwo¾—ßò4‰!ÄB"Öß#ñ•*@OI1ø ò\¢DcÁc視‹·æÉ+±O¥ŠââiOþýwT‘mÖ!£ð“Ǹ=·)~B­<|uy‰%pªÃq¨ƒ”*=ŒRÊ@1CÍi0’h¸¨î¨èÝQè)(2¬þ»z†é}ˆé^ƒ£'gËJøP¤¨Zi!žNCÅ"šZ™^Q¦¨†ª_ÌGI™TvM±¼\|uy;"Ü˧°Áš®--ª=ù]0GÀÀŒ¥6Nâ@ $>\ö‘WÓÇÓ0 /&ÕEªaCvty¬'*ÏÞbZŽÒâfƹÍù±•¶‰ ·ûmQ@ÎcÖr æá³÷Bc %U€žRµè¹|4ÓÙ¦Ãr?RÕ²ã@Á¼Žø”ùz¶ÕSwt b=I‹Â•š‡ˆ‹$Rwbî‘D;Ie**™‘ß³Çd (êoˆ;QCuXTz Ѐćsë«$Ä/ ÷›Ê×4~.†f¡¸²éÔä+xX""„tËqM—›A¢Žé²+‡8zÙ4…;“©5PˆY*·˜•ö”5 ë´J™*@OAÞD•)1ë :Ýu æßëJ;8oQ‹=>ú=˜+çojq5ÐÉœL%VΩÔR艉{6ªϋlô¸åÈA)V½~ia5w:Ãe+ø…pÒid _æÄì­7@‡ÁŠüOa%h,]ÛÛ&E— WæÝ†Îì=ƒíÐk¥uôÚa”o??n[@Î ºKœ*@OAÙÐú§²† <‡(t’§Î‚#äF©B˜ŠRj4~‘%8³L'ƒÌÛ>4И®XÃ¥­{q©„§˜”vXå³ÐMì§uì¢s!ÝÆ íyÍÏ9‰ÎMzŒøð—š§qò}eï¦Xb·éž´¹9u»§D¬˜Ç–§ó9çæ ì•ÙЧ–íЃÌ"Ä‘.á‚ý¥ó¹yesdô·6)ˆêŠ>¯U2-yz÷îÝØ¼y³HÛ°afffðÕ¯~/¿ü2xàñ;ÿ{v¤ PŸ·„Ò¥Ì5Ÿ'ãæ»R÷‰ÊiÔ»ñ©Ï,ê§÷_Õ›Æ_pª”×"•Å9‰:m2 Å¿†|ätö€µT0b­FÏãÑçZ\{0¶8ð ‘<^#q•25Dôÿ|ò½ÎÈÑD»víÂŽ;ðƒü¿ùÍoð—¿üßüæ7Ÿþô§qÌ1Çà„NÀI'„“N:iQó²oß¾E—QeUYﵬ}ûöaß¾}€¿ýíoøÓŸþ´h²ÞOTÚ¡`Ó¦M8í´ÓðÚk¯á–[nÁÇ>ö±÷:[•*UZbTz Š:ƒ¶mÛ†'Ÿ|'œpn¼ñF¬\¹rÑdÀí·ßŽÇ;wî\4o¾ù&®¿þz,_¾À=÷܃eË–õß88p_ÿú×±bÅ œrÊ)øÞ÷¾wDùsúÝï~‡_ü☟ŸÇ™gž‰o¼qÑdÀüü<¾ô¥/áüóÏǵ×^»hrˆ7ÜpÞzë-œz꩸ùæ›MÖo¼o}ë[øð‡?ŒþóŸ¸çž{MÖû‰j'á„Ô×x$iÏž=ؾ};Ž=öXÌÌÌ`ÅŠ‹& zè!œuÖY‹*N=õTlÛ¶ [·nŪU«ð /q÷Ýw¾üå/cëÖ­xë­·ðꫯq‰>ÿùÏã§?ý)¶mÛ†G}tÑä$úሯ|å+‹.çW¿ú^|ñEÌÎÎâ”SNYTYO=õ.¸àÜyç8tèPîXê´ä; K4Mâ‘”uÞyçá¸ãŽÃ–-[°cÇìØ±7n\YëׯÇÓO?;î¸÷Þ{ïaË(ÉÚ°aÖ¯_gžyû÷ïÇ'>ñ‰#&/Ñë¯¿Ž .¸púé§ãµ×^Ú5kޏNÛ¶mÃ¥—^º¨2{ì1¬Zµ gŸ}6öîÝ»¨²^xá|êSŸÂu×]‡o|ãؽ{7Ö®]»(²Î?ÿ||ñ‹_ÄO<"úÅÖvª] µkךWý]»va×®]]â¶mÛºÄ#-ëÕW_ųÏ> X¹r%ž{î¹Ã–ɺÿþû±ÿ~\uÕUxþùçñàƒ⢋.ZYðÈ#à¾ûîÃÖ­[[†G«W¯Æ+¯¼‚Ï~ö³xå•W°zõêE‘“èŽ;îÀòåˈ-”èÁÄðÛßþ{öìÁe—]†3ÏŠÏ}îs¸òÊ+qÙe—áßÿþ·¹æõ×_Ç­·ÞêÞÅWàÝwß]ìlVª45U€®ô¾¥¦ip饗bË–-8çœsð‡?üW^y%®¾újÜrË-€-[¶`ãÆØ»w/nºé&\ýõ8í´ÓpðàA\|ñÅøå/ùkQ©RL +½o‰ˆðë_ÿ7nÄO<»îº «V­Â?øA¼øâ‹˜››Ã³Ï>‹5kÖ`åÊ•¸í¶ÛpèÐ!lß¾Ç<Î;ï<<üðÃﵕ*…TÇAWzßRÓ4¸ä’Kpíµ×bÓ¦Møë_ÿŠM›6á#ùHwÍh”÷qüÑ~„üãøÂ¾8î¸ãð¯ýë?žïJ•†Rõ +ýWÐm·Ý†|à¸êª«pÍ5×àÛßþ6àä“OÆÁƒ±k×.lݺ/¿ü2nºé&¼ûî»xî¹çðÉOÖ¦•Ž^ªã +ýWÓÃ?Œ={ö`Æ æ·›o¾›6mÂé§Ÿþä¬R¥~ªt¥ÿjºð qÎ9縿]rÉ%œ+ÕT=èJ•*U:J©zЕ*Uªt”RèJ•*U:J©t¥J•*¥TºR¥J•ŽRª]©R¥JG)U€®T©R¥£”*@WªT©ÒQJ +UªTé(¥ Е*Uªt”Òÿ·èG.}‘…IEND®B`‚mpmath-1.0.0/doc/source/plots/hankel2_c.py000066400000000000000000000001531316273626600204170ustar00rootroot00000000000000# Hankel function H2_n(z) in the complex plane cplot(lambda z: hankel2(1,z), [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/hermite.png000066400000000000000000000623661316273626600204000ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxTUú€ß™Io¤“B „ŽR‚AQPqA@—¦€¢((®º*êŠØuUÜׂҤ+?ABQ¤„zh! é i“:s~ ‰„LÂdæÎÌpßçágî=÷åÞÉ—3ßwŠJñ‰‚‚‚‚‚¬pœo´·ˆ‚‚‚‚B}ÔöPPPPP0Ž dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ dŠ“½Ì¡wïÞÜpà &_QQÁªU«ð÷÷gĈ’ºàïï/i›æ¢¸G..rñ€–ëRS\ÃO?þD %Œ7WW×fìØ1âãã%q‘!D¢p0úõë׬㫫«…J¥‘‘‘’»ÌŸ?_ò6ÍEq1Ž\\äâ!DËu¹øÕEH Ð¨4B§Ó5ûüÛn»M2)pȇ‡‡G³ŽwrrÂÏϼ¼<É]ÂÃÃ%oÓ\ãÈÅE.Ðr] wr‰Køûø£V;dx«‡Cþ „Í>'00­V‹V«•ÔE§ÓIÚž%(.Æ‘‹‹\< åº\Üu‘j 2ëüV­ZIæ" Û¶mÛìs$ïE3FÒö,Aq1Ž\\äâ-Ó¥2£’ìÔl‚C‚ÍjC ÐPSSÓìs‚‚ ¿Q¥ÐR÷È-Aq1Ž\\äâ-ÓåÒÎK\âð×Ï»£ãº¬¬¬ÙçX«––&i{– ¸G..rñ€–éRø[a]€6¯-72@›ó5ÄZºsçÎ’¶g Š‹qäâ"hy.B ·*=h9ŸŸßìs¬ $mÏãÈÅE.Ðò\ÊO—S™^IyX9 h»ÐìsjXnn®¤.½{÷–´=KP\Œ#¹x@Ës)ü­€ò6J€¶;æ ­Õƒn‰Å)P\"hy.µºÔ·P´]QŠ„ÆQ\Œ#¹x@Ër5‚Kq—P»«)¢P´]QŠ„ÆQ\Œ#¹x@Ër)9XBMQ ­·"7ßÂTFqØsŠ„ÖÝÒŠ-R¡¸4D.в\jÓ~ÃüÈÍÍE¥RÉf!(KqÈmN‘ÐÛÛggg¥Hh#—†ÈÅZ–KáVC€öêKNNh4)ÔìŽChsŠ„*•ŠÀÀ@òòòÌZË£1ZZ±E*—†ÈÅZŽ‹®LGÑž"œœ!*++[Lþ4@›S$CZ§ÓQTT$™KK*¶H‰âÒ¹x@Ëq)Ú]„¨øõ%/ß¾T´1wAkä¡[R±EJ—†ÈÅZŽËÕùgP´Ý1§HÖÉÑ’Š-R¢¸4D.Ðr\Œè–2‚d´åÕ¶mÛX¹r%555DGG3zôhæÌ™ƒ»»;#FŒàÁ¬;Öœ"!üõ›5''GghYÅ)Q\"h.U9U”.Å=Ú÷vîäîhy=hÙè¡C‡2tèP† Frr2Ÿþ9ÁÁÁ >¼^€6§Hкuk²³³-¾ŒV«mö/ÖBq1Ž\\äâ-ÃåÒvÃÂH~Ãü€¿:^-)@Ë.ÅñÝwß1bÄ233뾪\=dÆÜ"aHHYYY–I^AK)¶HâÒ¹x@Ëp)ØZü •´•™7oeee<óÌ3„„„™™ 4ܧ¤¤„U«V±~ýzÖ­[@RRRÝpÚœÖÕ¯Õö /\¸ÐäqÍy 0û\©_S\äíÒ¹sg»Ýƒ–æ"„`ïÏ{AYáYhµÚzº9í:tˆõë×óñÇK:ÂK„Lvõ^ºt©èСƒxâ‰'ÄÌ™3ÅñãÇÅ< &Ož,V®\YïØ{ï½×¬kìÛ·Ob̘1R( !„8xð dmYŠâb¹¸ÈÅCÇw);]&âˆñ}âë^»ûî» Ž9b¶ËäÉ“Í>×È&=iÒ$&MšTïµÕ«W=ÖÜ"¡5R-¡Øb —†ÈÅßåÊѵ´ÄQ²Jq˜Š¹EÂÚ'u‘P.(.Æ‘‹‹\<Àñ]š ÐævàäˆChs‹„nnnøúú*EB ¸4D.àØ.új=—¶]Bí¦ÆçfŸº×sssñ÷÷ÇÉI6‰‹qÈmÉÖè!!!”––š䯦¥ÌÈ’Å¥!rñÇv)ú½ˆš¢ü†ú¡q7Œð*++C«Õ¶¨à ÚÜ™„ ýXè–2#Kj—†ÈÅÛ%£áç?àÞ¿R-qˆ8h€¶$Ç$u¡ÐÑ‹-ÖBqiˆ\<À±]ò7´ÿ=­ù¬han‘¤ïA;z±ÅZ(. ‘‹8®‹ö´–ò3åxõôÂ-­îu%@ËKòÇR÷ ¹ØbM—†ÈÅ×ÅXzZæ;pÐmi‘¤ ÐŽ\l±&ŠKCäâŽëR›Þh,@+=h  £¸G..rñÇt©¹TCÑî"œƒñîë]ï=%@Ë¥HhÅÅ8rq‘‹8¦KÁ–„NpO*µªÞ{-q%;pЭ £¸G..rñÇti,½h%-,)Ö>@¥Hh]—†ÈÅÏEÔò7å£rQáw‡_ƒ÷kW¾ •ÜÏž8d€¶¤HèììL`` YYY’ìîí¨Åk£¸4D.àx.Å{‹©)¨Áwˆ/NÞ §rgffâääÔ¢Öá Ж Á樨¨ ¤¤ÄbG,¶ØÅ¥!rñÇsÉÛ`ØGÔXzC§Ó‘““CHHjµC†´FqÈ¥¿%¥,:b±Å(. ‘‹8žKcãŸÁÖëõ-.½ -)‚´…BG,¶ØÅ¥!rñÇr)O.G{B‹g7OÜÛ¹7x¿¥æŸÁA´¥+ÑIÙƒv´b‹­P\"p,—üŸï=ƒ e‡%EB6@;Z±ÅV(. ‘‹8–KSÃë@ вCŠ"!H“âp´b‹­P\"p—š’.í¸„“¿>|Œ£h™¡ £¸G..rñÇq)üµQ-ø[*Êè1J€–– k´R$´ŠKCäâŽã’»îò>ƒ÷5Þ)S´Ì8“uÆ¢ókSJ‘Ðz(. ‘‹8†‹®\GþOù¨=ÔüM ÐÃü,;²ÌìóQ«ÕJ‘Њ(. ‘‹8†KÁ/èÊtÜ€ÆSÓèù™™™¨TªºŽ—9$f%J2³Xj2@ ­àáæËƒ_šu¾F£!((ˆììl‹Š£[lâÒ¹x€c¸ä¬¾¼Òß_IAVVAAAfïæýýÑïéóe^ÝþªYç[‡ зw½g3Ó7NgÞŸóÌj#$$„êêj -rq”b‹­Q\"¿‹®LGþÆ|4žüïö7r–‚‚ªªªÌNo|—ø“~˜„ 7¶¾Ñ¬6¬‰CèPÏP6Žßˆ»“;ÏÿúbÆ/3Ð ½ImHÕƒv„b‹=P\"·‹®TGþÏùh¼5øßÕxzš õBÏ3›ŸáÍoâãêÖI[¸;ænóÄm€Cè+gƶ‰eç”´ölÍñ_0eýjô×'-UÚŠ-ö@qiˆ\<@Þ.ùóÑWè ˆÚ­éÕœ]­«fòúÉÌß?Ÿ vLÞÁඃÍ· ¯žIØ=¸;»§î&Â'‚¥G–2ní8ªtUM¶!UZîÅ{¡¸4D. o—œU—÷|ðÚû š +j*³z ËŽ,#²U$¿?ò;½B{™il;Ì—bgŒÍ$Œ ˆa÷ÔÝ [:Œu'×1råHÖ=¸g£mHY$ôð0~ [£¸@FF»wïæ÷߯ËmÖÔÔо}{ ÄàÁƒ ³¹(ϧ1®t©)®¡`SN­œð¿³éô˜ ‹+‹¹r$;RvÐ) [ÚJD«iä­ŒCö ´­o[vMÙE· nl>»™¿-ÿ%•ÆwMQŠ„ÖÅ–.B¶lÙÂ!Cgüøñ,X°€ 6°aÃ6mÚÄ‚ ?~<ááá 2„_ýÕæ®×çs-®tÉß¾ROà¨@Ô®×O× ÐyÚ<†.ÊŽ”ôímø¦í Á´ÝÔr£¡Þ¡ìœ²“»–ÝÅÎÔ [:Œã7äYÿë’R$´.¶rÙ»w/3gάËc¶k׎»îº‹ÁƒÓµkWÔj5z½ž'N°{÷n¶lÙÂÎ;Ù¹s'}úôaÁ‚ôë×Ï&®×ãó1…+]j'§˜’Þ€¦tzq:w,½ƒ¤¼$ni{ ÆoÀÇÕøŠx²E‘(Œ{ï½÷šÇ\*¿$-$˜‹ˆþo´8wºÞû:N899‰ÐÐP‹\rҤ㋋‹ ºtéRïõÄÌDüa°`.bº ¢ª¦Êd¹h‡ÌA›ºÜ¨»³;«XÍsž#¿<ŸÛßΚãkêÞ A§ÓY´€ÜgdÙ k¹¤¥¥1xð`öìÙCß¾}ILLdÚ´i¨TÆ× nÌE¥R1mÚ4éÛ·/{öìaðàÁVÍÍ^ÏÇj]rW_žœò`Ó“Sj1–ÞØrv ƒ¿LNY3úÎ`éýKqÖ8Kll;2@7gOBµJÍÇw~̧Ã?¥JWŃkäã=#„¤P(×b‹½±†Ë©S§4hgΜaÔ¨QìÚµ‹˜˜‹\bbbصk#GŽäôéÓ 4ˆS§NI©m’‡­‘›Ku^5¿àäï„ïí¾&wu€^x`!÷|%U%¼~ëë|v÷g¨Uâê}zz:<ò7Ýt'Nœ`ìØ±<ôÐC¬^½ºÞ±æìIøt¿§ùñï?âîäÎ?·þ“§7=-ɺÐr-¶Ø©]ÒÒÒ¸õÖ[¹pá?ü0kÖ¬ÁÍÍM777Ö®]ËC=Ä… 2d.\B»Y¶Dn.Ù˳Õ‚Öã[£v6-,ÕèžÝò,3~™F­aÙý˘;dn“ߪ!³ôðáÃ…BL:µ.'x×]wÕ;Æ”"acìKßW—Ÿê0²ƒÄÒ¥KÍnOŽÅ9 ¥Kii©èÙ³§Ä´iÓ„NgZ©¹.:N<ú製zõ¥¥¥æèZìa ää/ö÷Ø/âˆÅ Å&Ÿ7oÞ<ˆ®“ºÖÕ™v§î¶ÈEÉA›Hff&ÁÁ†\”FS5+Kö$¼)ì&þ|ôO:tâlÕYN§œ6»=9ÏȲ'R¹èõz&OžLbb"·ÝvŸþ9juó>¶¦º¨Õj.\È!C8tèS¦LA¯7mm)=lœ\:ŠŽ”-ë§Þ½¼M>ïtªáçöDù :tbß´} Šd-M» ÛR÷F§ÓÕ{/55•U«V±~ýzÖ­[@RRR]±¡vLlc¯…¸†°çÑ=DyE0ï§y$¤&˜tîÕ¯:tÈäëZûµ–èòä“O²nÝ:ÂÃÃY¼x1ÎÎÎVu©®®fÍš5´iÓ†µk×òÌ3ÏHv_´Z­Ýž‡œ]’ÿ—Li´šÔÊäs2øö×oèìß™mã·ím–Ë¡C‡X¿~=ü1EEEÈ !“GYY™˜>}ºˆŒŒO>ù¤8|ø°xàÄäÉ“ÅÊ•+ë;jÔ(I®¹ótEø¾ï+vœßÑì6Nž4mH-hi.«W¯€ðööÇ·©Ë±cÇ„———Äš5k̾¶¥ÖB..5Ú±Ìk™Øá²CTå›6nýÉõÂãA{ Ž?*™ÜR² ÐÍAª›˜‘‘!ѦKÁ\„Ë[.⫃_IÒ¶‚e$%% www¡R©ÄÆíâ°aáR©„»»»HJJ²‹CK'kY–ˆ#Nÿûµëõzññž…j®J0Ñ:ªµDQQ‘d>r вMq4…%ã–¯¤uëÖh4TÅ*þwïÿÐ =mxŒé§SYSiRr^¶ÑžXâ¢Óéxä‘G(//çÍ7ßäž{˽÷ÞËܹs)//çÑGµ8ÝRž”d.Êä4§ y4¤ÉãªuÕ<ùó“<ÿëó¸:¹²öµTUááá··éyk‡C\Ç=h!„ˆˆˆjµZTWW‹Ý©»EÈG!‚¹ˆþ_÷éEé’]GÁtþûßÿ @ôéÓÇ&S°›¢ªªªnZø§Ÿ~jW—–†öœVÄ'öDîúšÆg‚æ•å‰;–Üaè5ØZìKß'ÊËË ¢££%uRzÐ`êLBSG¯×“••Å ÈA|ü °7}/}¾ìÃîÔÝMž/ÇYrÀ\—ääd^~ùeœœœøæ›oÌÞ©Y ggg-Z„““/¿ü2çÏŸ·‹‡ÔÈÁ%ë;ÃüƒV[¡Ò³| 㽿ìÍÖä­ôîÁþÇösSØMusÌÝ,ÖQpÈÝœ™„×"<< nbBï6옲ƒ'bŸ »,›Û—ÜΧû>mtiJ¹ÍÈ’ æ¸!xì±ÇÐjµ¼òÊ+Üx£4»,[z_zöìÉË/¿LYY=ö˜ÙË”:úó‘¡uºzhuÃ÷…à‹ø/ôí ÒŠÒß}<{ÝCd«HÀ²Íb ‡ ÐæÌ$lŒÚžž^÷š‹Æ……÷,ä›û¾A£ÒðÌæg˜¼~2Úꆽ¹ÍÈ’ æ¸|ýõ×lß¾îÝ»óꫯÚÕåj^}õUºuëÆ¶mÛøæ›oìæ!öv)ü­Ê •ø õãÆ¡õk«µL^?™'~!ŸÝýËG/ÇËÅ«î%@Ë©Š„†Å»¯ е<Òë‘z[iݼèfR.¥Ô;F.Åpl—ôôtžþyÔj5‹-ÂÅÅÅn.ÆpuueÑ¢E¨Õjžþy222ìâ!övÉ\tyšö#!õ\Î䟡ÿ×ýYzd)á>á욺‹™7Íl0m[ Ð2Æ’™„Wc¬}%}Ãúÿx>>¼þúë!xá…ìæa)örzAÆg†ôPè´P2K2:(íù_7_6ŽßÈ[·½…F­i²ë%@_÷ã «ªª„Z­&Ÿs8ë°è4¿“`."øÃ`ñËé_$ó¹ÞØ´i“DÇŽEU•é;_Ø“ªª*#±eË{ë8¹?åŠ8âDÂ- bgÊκy½¾è%’ ’Mn§vuÃÜÜ\Iý”qÐ e‘ÐÙÙ™.^¼Ø`Q¦Æ¸¡õ |ü ÓûL'çlûþo<³ù*j*$ó2{~®ÄNÇ‹/¾À|€³³uv¾ú¾8;;óþûïð /˜ü¹q´çc Ò?1|SýýÎß¹}ñíd•f1ªÕ(ö<º‡v~íLn'##üýý­¥*ÄuÞƒBˆ~ýú @ddd4ûÜOþ(>ÌEtÿ¼»8š-ÝÂ--E‹ @Ü|óÍÍÞSÐÞèõzqóÍ7 @|ûí·öÖqJ•ˆ8âÄš 5B=G-<ßñ‹5»­Vk•Y„B(=hI²H¦ç¡qgäyòÃÚãXÎ1b¿Œeþ¾ùfOf°G*BiµZþõ¯ðÑGYu÷ kÜ•JŇ~À¿þõ/“®áHÏGjôBÏÖW £Ÿ–÷]N¿È~~â0S{Mm¶Kí¤²ÈÈHÉ=å†Ch)‹„`Y€NKK£w¶LÚÂGw|„^虵y÷|Ù¥æïuhŽT„š?>/^ä ãC©låb. `̘1ddd0þ|»y˜ƒ-]2Š3;,^[¼(q+¡ß¬~욺‹hÿh³\jW´L‘r&!X kgd©Ujžø<û¦í£s`g6ÝD…=øùôÏ’ºšâbB/¨¸PÁ¥—ÈÛGÞOyä­Ï#÷‡\ ~- ül9ú*ÓWskÊ¥¼¼œyóæ¡V«yûí·Ív–ÂÅRÞ}÷]T*óæÍ£¼¼ÜnÍÅV.«Ž­¢ÇÂø¯õÇYçLÀ#̾k6Nê¿ÖXi®‹ eŽ”EBh¸Gs¸ºØÒ+´?ȱO«ÍåÞ÷òô¦§)¯nú‡W šSø)?WNÆ‚ Ž>Æþ.ûÙí±›½‘{I¼-‘c÷ãØÈc»ÿÇÇçÈ]Gس]î»ØÛn/‰C9õØ)2¿Í¤2Ãø²¬M¹,Z´ˆœœÆŽKÇŽ›ýïl.Ö,ˆuìØ‘±cÇ’““÷ß~k7æbm—ÂòB&¬›À¸uãЖhy0ñAÐ@ïÙ 'È4×åz Ж/f¤œI–õ ÍÈòpö`á= =œGz”ÏöÆæ³›ùß½ÿãöv·[ìÛ—+)M,%sQ&› =â+qtÆ«—îÑî8ù9ÚgE5—j¨8_Aù¹r*R+¨H©àÒöKd~m‹êÙÍ¿»üð¿ËŸVƒ[¡q×4êR]]]—»={¶ÿêkcíYs³gÏfÍš5|øá‡<þøã®Àw½Ì$ü-ù7¦¬ŸBFIá>á,.[ŒºDMðø`Ü"îÄÞ\%@Ë9 µZ-FßÙy$7…ÝÄãgãé ]2”©=§òáà!í/™Æ\„N÷SÿÍàÒÎKu¯{Ýè…ÿpüîòû·7N­Lû(è+ôT¤V MÒR¸­Â_ );^FÙñ2Ò祣ñÔÝ÷)“n˜Ä§w}Ê™ÞgТ%üÙpI\®§"¡C³“jOÂZ*++…J¥QQQÍ>×”½Ýôz½Xul•hýakÁ\DпƒÄ÷G¾—|hÙ•.z^\\tQüõ§ˆ#NÄ'övØ+.ü炨ȨôºåçËEÆÿ2ÄÑÑGÅN÷"Ž8±˜Åâ@ï"ã‹ Q]lXt_§Ó‰nݺ @ìØÑüýÍÅûïÅÅÅ @tïÞ½Ñç*—}…Þeã©¢í'ms~ïû‰UÇV !„ÈÛ˜g˜˜2(A2—Ž; @”––Zäl ¹ ³sÈm›"œ…N§“¼íZ ´ⱟÌE01|Ùpq¾ð¼ä×)>X,ö?X˜‡%м yB¯³þXãêÂj‘þYºØßcÝõwyî§g?,þAbÀ€7îùZèõzÑ¿ˆ 6Ø[Çf\(º F¯]÷™½j´È(þk>AâÐDGœÈY—#Éõôz½pss’´w5r ÐJ‘ð2áááTWW“››Û¬óšSàðs÷ãË_²sÊN:tbóÙÍtû¼óþœGÞò´Íþû9=ó4cR¼·¯Þ^ôþ³77n½‘€{P©­7Ö¸'_'Âf†¡þVMï?{25¡¤šÎkS_à…§^°ê¸ç«±EqN¥RÕåÔß{ï=£ãà[R‘°F_Ãöþ‡. ºðÃɈlɆñX÷à:Úx· ä` …Û qkçFàÈ@I\òòò¨¨¨¸>Òà˜)kü–5j”Ä$oÛåÕåbNÜáü¦³`.¢÷ÿz‹ƒšÝ^ÑŸEbOøGœØí·[d,ÌhrŸ7[R™S)¾ÿû÷QD‰^;DòœdQ}ɾû JN§]»v€Øµk—½u¬Æþôý¢×½sNo:‰·¾(J+¦?,∠›?C·1âãã FŽ)Y›àTˆ IDATB!JK…¸tIéAKÔEB0¿PhîŒ,7'7Þò‡¦b`Ä@2¸é«›xaë ”U™>GAÆ‚ Ýrˆ¢ô"‚'Óït?Ú<ѦÑ}ÞlÁ•÷Å%È…%EK˜yÇL¨„Ô7SÙÛn/iï§¡+3m- )\¬‰Z­®×‹¶—‡)˜ãRTQÄS¿öž.žõý½ˆ‚͸µs#䑦wìnŽ‹Ù#8JJàØ1ظ>û þùOxàèÛ‚‚ÀË >ù¤ymÚ‡ ÐRÏ$ó´¥3²ºwc÷ÔÝ|þ·Ïñtñä£=Ñé³N,9¼½hzbˆ®LÇÉI'9óÔPÇëtYÖç@ë,:Ô®¼/‰‰‰lÞ¼™¨¨(þñË?èw¦¡ÓBÑëH~9™ý]ö“·!Ï&.Öfܸq´mÛ–M›65X/ÚQg !Xyl%tfÁøºùòÕˆ¯Ø=u7=Z÷0z|ò«ÉDÍBíÒt˜iŽK£º¨†ÿû?øôSxî9=úô€ðñ=`ÄxúiøøcX»âã Á»cGðô4rE;#”‡BˆåË— @¼ôÒK’·m*éEéâÁ5Ö\zÿ¯·ØqÞøh‡ÊÌJ±ÿ†ýuÛÖí+²±­éüýï€øì³Ïê½®=£ÇÆ«+&}TT¤K;ÂÄÌŸ?_bܸqöV±˜?Òþ¾P÷™|臇Dviv“çäoÉqĉ}]öI“fÓë…(("!A^ˆµk…øè#!žzJˆ#„èÑCoïº`; þ¼2{z ѵ«û›3fñï ±j•ûö ‘mð&¢h °ÆMÏÚ³Ã*j*øïÞÿòîïïÒ*£Ÿ,ù„€âþ@·¥ÝP;ÿ•ß“ÛL5FCDD¤¦¦vÍóJ”rúñÓï+5„ÿ#œvo´CãÕôH×r±õ}ÉÈÈ mÛ¶øùù‘žžŽ«««ìžÏ•.Új-ÿÙûÞÿý}JªJðqõá•A¯0«ß,ÜÝ›nLÈÎF$Ÿ'~|)eiÎô¸{âOHIÔThb!)­íÚAT”áOÛ¶õÿîç—‡e†††’ŸŸOEEjµô%´)S¦ðÝwßIÞ®¹8äTok ÝÜÜ "==!„ÉãtÓÒÒ¬º2˜›“/ z‰‰>9vë1ÜŠÝø¥×/üÐÿ^?ñ:ã{Œ¯[ÌÚ.Í!--C‡‘››Ëý÷ßoRpðºÁ‹^{z‘ùe&ɳ“IŸ—NîÚ\º,í‚ï-¾f»Øú¾„……1jÔ(Ö­[ÇÚµk™8q¢ìžOçÎÑéu,9¼„×â^#£$'µ³úÍâµ[^#ÐãòØe½23 6%寠{åß++ÉávÊx Žâ¿éõ¿.æï]º4 ¼—ÿ›–•eÒ}©¬¬$++‹víÚY%8Ë¡¤8êèÕ«—DNŽ4³ž¤¢*¯ª.ç¼wò^qÏÒ{êrƒÑÿß$|#ªjä·Ÿß-·ÜbѾ}+þ*"ªâĹWÎ ]•¼S:W²mÛ6ˆÚ[¥Õºj±ìð2ÑuA׺ÏÒØCÄ™E ñÖ[B<ú¨C‡ Ñ¡ƒ..M§ …¾ÏMb¯×"Ž8Q8k‘6qäˆEүϞ=kõ4¤ÜRÙƒ¶ÆLB€ˆˆ:Dzz:AAoù~% V]L_¡çبc”Ÿ)'pd ݾéÆFÍFv§îæ­]o±5y+þô(oíz‹ ˜3n®N®Vó1•5kÖ°k×.¢££6l˜Ym¸†ºÒuuWr–çpzÆiÒÞM£ð×Bº|ßÓSÖ~FqÛm·Ñ©S'öìÙCbb"z½Þ>+ÚÕÔ@F¤¤Pyþ KR7ðfÚo¤GÆJƒÿ Òw;žüWÏ÷êDd$xy‘õM&åÓNá7Ìßÿi–ž©ÏçzZÅ®‡ ÐR/7ZË•c¡M]iÍš?pB/HššDÑïEx÷õ¦Ëò.u“O·̯ýÊÞô½¼µë-~9ó ï^z—%ó—ðÒÍ/1­÷4Üœ.íh+víÚÀO¶M,õûˆwîz‡·w¿ÍÚkyî×çxï÷÷˜;é}¦îc|=^©Y±b%%%<ôÐC’~ÛQ9©ˆš…ÿþœ˜x‚¼ò(Þ[L—%]ðê×èyö,Îùúú2iÒ$¾üòK,XÀ;ï¼Óð Š HK3ÞûMI1èÛ„X­†°°)ˆÜ0_ækwðéé¥U¡V©×m¯ z…­{””d˜=g!¥GKÉøo í?loV¦>%@;RïIX‹9Ú?ø©œž~TÐuMW<»š6µÖeÍk8žsœ·w¿Íêã«y{×Û¼·û=FuÅS7=Å­moµÚjrB.\ÒÖÀ§¿±‰±œ}ú,Y‹³8<ì0ÏGÐîv¨]¦Sì=râÉ©SùòË/Y·d o‡‡£JM­„³²?Y£1¤®Ìû^™‚gÃ7!\øƒ…ñ Y¿–*]Nj'éõ³ožML@L]³RÜ!gfžAèíÞl‡k¨yµS]®Ç-Ù8è””¶oßNii)={öä–[n‘@Ï8Ý»`Ú´ ’·[PÂ[oµ£]»›™5ëw“ÎIOO <\§NÐáóD¼’‹È¾=‚ÌÑ&ŸjÌ¥PŸÆžª/ø³ê+Ê„a½‹u7¹…)†× Rð,Íáf`° ¸rÓ3Ú‰¿HŠý£(ñkK±Ô_üÚRÚ* ¡iºU!J8XµŒ?ª>'S 7ZÑÏe*·º>‹Ÿºa@“âžøÅgÑvyåm<9õ\,˜¹8—©.ï½×…œœ$Þ{¯77o³®u-å5Z’=kÖ,ÜÝÝ8p îîîœ8q‚C‡ñâ‹/Ò­[7‰TÿB¥š|'y»P¸AÀE+´m"…GHáÞ>>øùùÕ[¾16v“&I;“°–wÞé@^Þ9>ø  —k»WUiM:ÎÿúW mÚÜÈ /$Zt½¦[Z²‰*K–,©ûû§Ÿ~jq{ß~û­XµÊ°¯ÙôéÓEjjjÝ{RïIx%wÜq‡ÄñãÇM:^ª½Ýª‹ªÅŸí kl\üê¢Ym4×%§4G¼·û=ùIdÝd×·\ŘUcĺëDyuy³Ú›7ožÄ“O>i·ý÷Šö‰½Ñ†I=´ùCü–/Nþù§ ±nóæ 1k–÷ÝgX ­U«k¯„Ö¥‹wßmX íý÷…X¹Ò°Zff½•ЮÅc=&1gΜfý›*ª+Äÿ%ýŸ¿v¼ð|dzîYuœßQÌÛ3Oäkó›{›,z>…; Eœ*NìöÝ-*³+Ín§9. #FŒ°øzMÑb'ª2sæLÊË˹ãŽ;,n/==Ûo7dëÚ¶mË… êŠÖ*´oo¨D'''Óµk×k/UêÌÌ3Tœ¯ pt !6½À¹T.AžAÌ4›¾ÀÎÔ,?ºœu'Ö±î¤á«cºŒaB Üuuã_Å…|ñÅ€¡8h³ÂœŸ_WpóII¡ÏÐ ÎTv ;½‡‡%É ô|‹#xzB·nÆ'aDEA``Ý:–òÊ+¯ðõ×_³hÑ"æÌ™ƒFÓøý¬ÖU³íü6V_Å'¤¨²gÆuÇ´^Ó¸½ÝífçøÍ}>5E5œ|ø$ˆù,—à¦GIår=AÂû‡ ¹sçÈÍÍå¶Ûn³¸½ˆˆRSSHMM%""¢î½“'O²jÕ*Ö¯_ϺuëHJJªÛ™¡v3s^s»<&tÏž=&»nÝ:‹¯›½<›ÝËvãæŠxAP~ya™æ¶g®‹F­¡Meæ›OÖ?³ø¨ûGŒí:–òÌr¾=ð-w,½ƒÖÏ·æ›ÿÁòíË).-nÐÞ/¿üÂéÓ§¹á†¸á†$¹/ Bv6I«W£]ºþýox¤ÐzzBP }ûÂô T}ùº¤?E5/¢¡œeDðg«¯)h6 Ï> k×’´v-Ú´4()!aÉظ‘¤§žB;s&<ð  ‘tê”4ÿŽ„ èׯéééÄÅÅ58N§×ñ¿ ÿcúÆé¿ÌÝßÝÍw‰ß¡MÓ2ºËhæõžGÊŒVŒYß%?T*•Ù. fûÿÊ´JJ†—à5ÊK’ûbŠËÒ9nnn’=Ú×:Äúõëùøã)*2ü"” B¢ÇôéÓ…V«bìØ±·WVV&&L˜ f̘Ñ`}k~ Y»v­Ä¬Y³¬v+©Ì®»}w‹8Uœ(Œ+´É5MåRù%ñÝ¡ïÄKïê7Ôu_­[½×JŒ]=V|}ðkq¡è‚Bˆ1cÆ@,]º´yÑé ‹¦ïÙcXDý½÷„˜>]ˆ»î2,²îîÞt Â×Wˆž=…5Jˆgžâ“O„øñG!¢ @hÏ•‰ƒ ;œïòÚ%2gÚuGñ¥K—Ö[wübñE±$q‰˜ôÃ$üapÝ=v~ÓYܳü±ôðRQT!ÍrÖäÔ¥Žªòm»öË?ÿùOˆ+VXõ:-6ÅQûõÖÝÝ•+WZÜž‡‡Ë—/7úžµfBý‡)X:Kíü+穹TCØÌ0|‡˜·Z›T.WÓÊ­“{NfrÏÉd•f±æø~9û ;Rv°öÄZÖžX @g·Îœ^?î»ÿ¾ú.µ+¡56 #-Í0S®1 +¡5¶å5Ò]î~Ðis'r>Ê!õT’&'Q°¥€ŽŸwÄ©•m§hµZ†ß;/V­]šއ8Qr¢î}JðöÃ×m÷w¹w«º4ç³Ry±’SÓOÐù»Î8ûK·­š).×kŠC’OèO<ÁÀéß¿?îîîœ>}šŸþ™ &+Å%êa­™„ÐümÉ,µâÅd.ÊÄ9Й¨·¢ÌjC*—kâÂÓýžæé~OS^]ÎÎÔl>»™Mg6‘ôsè ¸S1m> bhy’àÞœúÎÁSÛÄ/Ô  ã·ö¿Þ–w½pñßìŒß0?NN:IÎ÷9ï)¦Ë÷]h5ÀºÃÃ*k*9’}„);øñ÷I¨N ²c%$À‰'ˆÃÑwrgô ‰‚kó§J›Cs>+B/8õÈ)j j›†ÿÒþâ0Ååz Ð’ ³ûðà #!!²²2zôèÁ¸qãð÷·NÀÚ‹j Õj)++³Úº³B/H@Éþ:~Ù‘6™±Fƒ-¨©ôtã½ßÔT¸pã:¸åN8 eWÔÔzè^êA?]7yÄÐ/4–®ÑýÑDµ7`oÔY]XÍéÇO“»6•FEÔÜ("_Ž”dôj]5Çs1¾îÏ‘ì#Të«ëŽñuó¥gUOvÌÙAlÿXüyÀâëZ›”¹)¤¼‘‚GúìƒÆÝüÍÌ%,,Œììl*++›,®ZJ‹\°?..ŽÜÜܺÞòÑ£G™1c†MÅZËÖÍÈÊʺæâ6æ.e™µ8‹’ý%xÇzúH¨¹ª–»TUý€ጠÐýp™cAAÏÍ¥[«Vìèý$Uaì (g]Ú2Ú”°/3ž#ê ŽÌW$CÁÎU§Ó±|ùrT*'N¬÷Þ•÷%Ì'Œû}îçþ.÷ÎÓëHÊK"!33g8[p–3g8“†#ÙG8’}ÄèõÜœÜp À#Àè=œ=P¡B¥R¡V©ëþ^U^…›‡j•!]URYÂ¥ŠKVRüj1¿ëLï½9>ö8;ìdáÝ ÉÑç 0~ß¼\¼¸¡õ DûECŸÐ>͉¥o»&¿\yO~øaæÌ™ÃâÅ‹yã7lÞ3¼Öç¶*·Šc#¡×êi÷n;GÚÍåìÙ³vù¦aor5;k á¯mÊæ±Í-Ì•+#ã³ËË3¾oB@«m¼÷›’ÙÙ¹õL4šÆ{¿QQ†Þ±³ùÕø¸¸8222:thÝJ€u.MÜZC·ànt ®¿N‹‚™¥™d”d4O4h*¾ÄB¬_,/ÿø2·þy+Ñg¢ùßäÿ¡î®¦½_{¢ý¢iï×¾îïf¥b®¼'‘‘‘Ü~ûílÛ¶¸¸8³w1—¦ž¾JÏñ±Ç©H­ x\0‘³­[˜»ÖÏЙ3gèСƒU=äˆChkÎ$CLÉÑœà,„àÌ,ÃòŒQs£ k<—–6¾{J äæ6Þ ³3DG×ÞÎWá6mÀÉzxéÒ¥<ôÐC Þ3g4‰J¥"È3ˆ Ï D 0zŒ^è)ª("¿<¿.h×þ·¢¦!^èëÿQ÷ÿ^Î^ø¹ûáëæ‹ŸÛåÿºûáõ¦ÙOeÃÏðöü·iÿ~{ÂG¥–&uõ=™2e Û¶mã»ï¾³y€n48WëëÒ>^½½èôM'«¯Hx­ÏJm€VzЂµ‹„ÍjwÍbKqq]°Íû¿B.ŵÅÃ;Ÿ°e/Â;ɆiÊáâ11§ BC ½dS]$¤¬¬ŒuëÖáááÁèÑ£¼o-µJŸ»~î~tð7­Ge²‹?´ÞКŒÏ2H~!™sÏ£pK!¿ëŒKˆåSš¯ö¸ÿþûñòòâ‡~ ¨¨Èê¦\D éá$ò~Èýƒ»aë§^®õ|”í`X»HŽ“““Iºwûö˜Øøvô…†•ÐjÎó5JÞCpаÕP§NoÈÙºµ!Ol"¶Ü{ïǤ¬¬Œ‰'âmd¬²½ö4Fs\T*áO‡ã{«/'ÆŸ `Kz úãhZ?ÔÚ¢ÞäÕžžž<øàƒ,Z´ˆ5kÖ0mÚ4³Û¶ÔEè û_æ¬ÌÁ­7n¿×6¶Ù|øZϧ6]ûÍözÂ!´µ‹„†¨¨(Ξ=KYZžyy Çÿ^þ»¶¸˜FËе+DE‘[=íÖv´ê\…ß·ŸA»v†Ý’%üúh˽÷jÓ?ü°Ý]®…9.^7xÑç@νpŽ‹Ÿ_$ir™_gÒñóŽxv7o4ƒ1)S¦°hÑ"¾ûî;›è+]„^pê±Sd/ËÆ5•žÛ{š<äPj—«©ªª"55•ððpÜÝÝmæ$2@KV$jƒïUÅ·öYYœηmK÷ÆÎ÷ò"-&†Îµ½à«S—WBzAJ€–¨Ïú¢êßøþy–`«½÷.^¼Èo¿ýFhh(C‡µ«‹)˜ë¢ñÐÐqAGZOlÍé'OS´»ˆøžñ„ÿ#œ¶¯·ÅÉ»y?>Æ< Dûöíùã?l:&ºÖEW®ãÔÔSä¬ÊÁ¥ =ãzâeÛÝà›z>ÉÉÉèõúë2½ MÎÕ 99ö~IM5Œ’0Bí—©ä¶mé~ãÆS~~t6¡œ»6í -­µÂ÷vËÖÛh [Äï¿ÿ½^Ï„ &—à –»´؊؃±d,Èàükç¹ðñrVæýI4AcƒLN{óP©TL™2¥nÈ­ÆDwîÜ™ÊÌJŽOi¹@x­±Ð×úÁÏ]—KÙñ2ZÝÜ ß¡Öë=›â"‡æèÑ£uë>ÛÓÅT¤tqmãJ×ï»úh(gfž¡ð×Bt?@ØŒ0"^ˆh²°Ö˜GÛ¶m¹ýöÛÙ¾}»ÕÇD !ÈYžƒx\PY^IÈ”:~ÑÑènè¶BÁÑ8 k23  n|;ú¶mÁËü«Mj×T£^ïy®u{Ï×r‘Škméb*ÖpñêGì‘X.||Ô·SIÿO:^$ô±P"_ŠÄ5¼a nÊcÊ”)l߾ݪc¢+3*9ýäiò7äSA]ÿÝ•ˆŸŠnKšº/×{€–lÁ~[2jèP!Êʬz¢¢"ˆÎ;7y\Sû©Õ.p~pàA›,oí}«««EHHˆP«ÕââŦ÷M´×ž„ư¶Kev¥8÷Ò9±Ës—ˆ#NìpÙ!N=qJ”§ÔßÓ±)ÒÒRáåå%ÜÝÝÅ¥K—$õÓëõââ×ÅîV»Eqbo‡½bß’}’^Úº/QQQZ­Ö&.r[°ß~ßk, Ux¸a›†Óå³ IDATñññ!00óçÏ£×ë=®±‡Ð RÞLlÓ{nÊE*¶mÛFVVÆ #4´éøZR‘ðZ¸»ÐþýöôOéOÛWÛ¢vUsñ‹‹ìë°S¢ôHé5=jÇD———³fÍI¼„n/$ñÖDNM;EMI ÏG{8–›ºI’kHAc÷¥²²’´´4"""®Ë!v áž„¶ÄÚ3 kiß¾=•••dÖ¦TŒP»·ÙÕäý˜GÙÑ2|øà7Ì:ÃêLu‘ SŠƒ¶ri¶rqt¦ÝÛíèŸÚŸ¨×£ÐxjÈü:“øã‰ïϦn¢*§ñšÉ”)S,^XAÁæ :Äᡇ)Ú]„g7OzïéMôGÑh<4ñ|®÷!và ÚÚ3 k1eÑ$c{ôžs‘Š’’~üñG<==5j”]]š‹­]œýœ‰šEÿÔþDgwOJKqÿØ?ÛüÉÑGÉ^‘MUVý`=hÐ ¢££ëÆD7—òså¤}ÆÁ^9r÷Š÷ãÙÍ“®+º{8¶ÞʉŽð|j‡Ø]¯#8ÀA´µgÖbJ¡Pkduáo…”)çŸ~wئ÷ܘ‹TüðÔ——3vìXx÷i¸Ãˆ-ºðS]]ÍŠ+Ðh4Œ?Þ®.– —æx >œÀÀ@6oÞLNNŽ]]¬2‚£q2@ÛªHеkW ñ]; ª¶÷öt˜mÄšp‘Š_ý•œœîºë.Z·nmWK‹Ks<œ?~<555¬\¹Ò®.ÖÆ˜‹  8d€¶ÕLB¸vŠ£wïÞ”'—“¿1—P—zÕx[#uU¾©]»míb rqi®Gmš£ö9ØÓÅšsQ†ØpÈm«"!@»vípssãøñã!¼¯Õjë†Öµy¢ECŸ,EÊÂOQQëׯÇÇLJ‘#GÚÕÅRäâÒ\>}úйsgâããí ØÊÅšs©bW;ÔõzÅ!´-‹„WŽäÈÎÎnðþù¤ód}“…ÊYE›émlæe ) ?k×®¥²²’±cÇšµ’˜Ü‹Pö ¹*•Êj½h¹ÜhèRQQÁ… ˆŒŒ¼.‡^‰Ch[ ¡éB¡ß~?jŠjþ{0.­í;îYÊ© óÛÂÅRäâbŽÇĉQ©T,[¶¬Éeomáb-®v9wîBˆë>½ mY$„¦ …Ûÿ³€°§ìW¬EªÂOJJ ;wî$22’ÁƒÛÕE äâbŽGdd$C† !==;vØÕÅZ\íròäI:uêdYáÚ–EBh¼PXz´”ðSáxvóÄû&û ­»© ?Ë—/`Ò¤I¨Õæ}Dä^„²æzX#Í!—{ ]Ž;@Æ×!¹žpÈmË"!4žâÈ^œM´žÜÚîûº4…!„Ù“S¤v‘ ¹¸˜ë1fÌÜÝÝY»v­dÿ¹ÜhèR »wïnYáÚ–EB0>’CÔ²—e“£Ê¡õ¤æ¶R~8ÀéÓ§éÛ·¯EyJ9¡ì…¹ÞÞÞÜÿý”––²~ýz»ºXƒ«]Ž= (4@ÛºHhl$GÁ¯TeWÑ󮞸†6ÜÁÙHQø±´8(¥‹TÈÅÅÚo3RMý–Ë=ú.åååœ={–ððp|}}íh%d Ÿzê):uêTµZ-&Là‰'žàå—_®w¬­‹„аP˜µØ°xRÎ-ÒOÃ5K ?UUU¬X±'''ÆgW)‘‹‹%Æ #$$„­[·6¹G¦-\¤æJ—¤¤$ôz½Ò{¾ŒlôgŸ}ÆÀër¹«W¯fÔ¨Q|ñÅþ{çÖäy÷ño0Zð€‚HuÖUjµ*Zµ¢-XD:[u"✭hí…Ýå¦V§µÛål]½*“i[íê©Z‹ÓËB× ÈÛ (7q¾8,Q´ÎBH~) òîÔûs]þÑ'Éó|z‡üòäþÞ‡v?ƒ¤ öA¡¾JÍ?4prwÂso>'¹KgØü$%%A£Ñ ,, ÞÞöm6Àr%öx899!** F£G•ÕEhÚº˜º7x@؊亨¨aaaíþYúƒ+++ƒ¯oëªpþþþ¸uë–ù1©CB }Pxÿóû0êŒè¿¨?t¤“Ü¥3ì ~L?ŸcbbdwV\ìõ²›ƒ•6Ú»ð€°=’耀$%%µû·dÉó㦮íBÝ%%%ðóó3?ç‡~À矎ӧOãÔ©SZ™ÞhÓO&!™º8®^½Š»ŸÞÅ ÜÀ ˜AHKKõº¶³Ç%33gΜA¿~ý0dÈY]Xj!•––Úu>µZ±cÇâßÿþ·y%¹\Äj—¶Z*—¼¼<œ>}ï¿ÿ>jjjÀDt…`ûöí4jÔ(Z¾|9]½z•hÉ’%´fÍÚ°aC»çÆÄÄHî×ÒÒBjµš<=<))”˜IF£Qr±ˆ'´zõj¹U8]°k×.@ëׯ—[E|}}I©T’V«•åúrÔ–®`¦@ÛBxx¸,×7n S8EÅïQNNŽ,.–°ÇeÒ¤I€222dwV\„ð¸}û6)•J4héõzY]„ÂäRUUEhäÈ‘²¹°V ™ mAŽžÓÚ]Œb ŒnûÌjØb ÈÊÊB`` &Mš$«‹°â"„ÇàÁƒ1gÎܽ{çÏŸ—ÕE(L.¦R¼ÿùY å àñ>­KÞ ¼‡Þþ­«l±¶ØBÛ±ÏB͈ü)´‹Ðå!DXÈJ›\øŽŽ8d–z&¡‰7[ïšïú>Ø@–åYÖ`4ÍzéÒ¥²ºˆ+.ByDFFÂÕÕ‰‰‰¨««“ÕEL.|GG²@K=“ZêZà™å (Ò™³:#ËZ.\¸€ÒÒRÌœ9Æ “ÕE,XqÊÃÅÅ ,@cc£y“\.B`rá‹$uÄ! ´3 5g4Ø4½”½pí¬ÉÁêŒ,k1ýL¶wj·.bÁŠ‹öîúÍJ›­.D„«W¯B­Vcøðár+1ƒCh9BÂû§îCFŒFee%nßnÝ$–ŰÅZðÅ_ OŸ>X°`¬.bŠ‹3g΄ŸŸÒÒÒzÔ]ÁJ›­.eee¨¬¬Ä˜1càää$·38d–:$4ÔP™T •› ÏÌx €Í°ÅZQ__—^z nnn²ºˆ +.Bz(•JDEEˆÌëwËåb/Z­Öüyš8q¢Ì6láZêP“¤±ÉïyÞ˜8©õèòåËØ [¬EÈ©Ýöºˆ +.B{˜Fs|öÙg74–ÒÅJKKÍŸ§ &ÈlÃY ¥ ïqÐÿåþæoxÓ7>‹a‹5ܾ}ß~û-|||"«‹Ø°â"´Ç˜1cðôÓOãúõëÈÉÉ‘ÕÅL;—üúa²@K ¨è§m²¶t‡^¯ÇÑ£G¡R©ðË_þRV©`ÅE,yóæÁÝÝgΜAuuµ¬.=á‡~Àï -áZªÐܽñrÿvÇG s¸Á Ö?III¨¨¨@XX  «‹T°â"–GïÞ½±páBèt:œþ¹k²@Kš&§x/°¼»µ©@_¸pAtké.ø9vìš››±hÑ"ôîÝ[V)aÅEL¥Ri¾‹>|ø°¬.¶`*Ð< ´ŒCh±CB2*+ pRÀ{¾åmúÆ/,,Õź ~ˆûÛß+V¬ÕEjXqÛôž÷ßÿþ÷n§~³Ò&—.]Àï ;Ã! ´Ø!aÍÿÔ@_Ypö´wÆŒØ ; ~:N‡èèhɆ²Bì¸Hááéé‰Å‹£¶¶¶Ë°…61}nFŒ!³ »8d3$¬üªÚMícÇÂÓÓYYYhjjÍÉZ,?F£ÑÆÆÆÊê"¬¸Håñúë¯öîÝÛiX(w›466"++ žžž¢ùtd²@‹j¾j=·ç\ÏnŸ«T*ñóŸÿ:YYY¢9Y‹¥à'55ÿýï1mÚ4IwKf!„2ÁŠ‹TÏ<ó &Nœˆk×®!==]V—ÎÈÊÊBss3¦OŸŽ+W®ÈêÂ2Y Å õUzÔ^¬E¯A½àd]WÀüùó°ÑÍa)øÙ·oiïž;s‘ V\¤ôX»v-€Ö»h¹],aêž1c†ì.,ãZ¬°ê›*àæ …ÒºTù™gZ÷(d!(|8ø¹sçNŸ> ///Á7…µÕENXq‘ÒcáÂ…ðööFbb¢yƒc¹\,aº¡™1c†ì.,ãZ¬Ps®µ{ÃëEëïÐ=<<àîŒ èt:Q¼¬åáàç“O>Á`ÀŠ+DŸ9Ø‹œ°â"¥GïÞ½±råJ s!—ËÃèt:dffÂÃÃO>ù$3ï‹8d#$$#¡2© 'úÍîgõëžxâ <ûì³hjj2o|)mƒƒÁ€ýû÷^{í5Y]䆩=bcc¡T*±ÿ~477ËêÒ–K—.¡©© Ï>û,T*3ï‹8d#$¬Ë©ƒþ¾îÓÜ-.ŽÔ¹¹¹æávrws´ ~¾úê+ܺu sæÌ‘e“Ü!T[Xq‘ÚÃßßóæÍý{÷pêÔ)Y]ÚÒ¶{CnÖqÈ-FHh^gÍè¶Œ?Þ¼+¶-[‰AÛ°¥íÌA¹]ä†9<: ål“¤¤$À¬Y³dwa‡,Ðb„„¦áuÖŒn‹V«EPP† ‚‹/âþýû‚»Ùâ´®±›””„ÁƒcÞ¼y²º°+.rx„„„`Ô¨Q¸xñ"òòòdu€üðõõEPP¬.Ž€Ch¡CÂæ›Qw¹ê¡j<6æ1›^[ZZ …BˆˆÎ;'¨›­.°k×.Ö­['Û.É,?¬¸Èá¡P(ÌWâããeu€sçΈa^ƒ•÷‡E²@ V&WÔ:zÃÖE[LGDDàÌ™3‚ºÙêrçÎ|öÙgpss“­{Ãä ¬¸ÈåWWW9r•••²º˜>¦Ï‹œ.Ž€Ch¡CB[¦w?Œ)àxî¹çàêꊯ¿þZ¶iß¹¹¹øàƒÐÜ܌իWK¶¹ng.¬ÀŠ‹\nnnˆŽŽFSS“9›Ã¥±±ÿüç?Ñ·o_óBcr¹8 Y … ©…Pùu%”j%<žó°ùõ¦€C­V#44Z­)))‚ùÙÂã?Ž„„ôêÕ o¼ñ†,&X ~Xq‘Ó#..J¥»wïF}}½,.)))Ðjµ …Z­6gåýa‡,ÐB†„µ™µh©nÇL¨\lß´²mÀ!w7Çž={PWW‡˜˜øøøÈâ`‚¥à‡9=FŒ¨¨(h4ìÛ·OKÝ;ï‹0Q ËËËñ«_ý ±±±X¶lôz=´Z-–,Y‚ØØXüþ÷¿o÷|!CB[G²DÛ€cîܹP*•8{ö,ŒF£ ~ÖÒÔÔ„?ü …o½õ–¤×¶KÁ+.r{lܸ …ï½÷ $½¶ÑhÄÙ³g¡R©0wîÜvÉÝ.,ÃDöññÁÁƒ‘oooàĉˆŒŒDBBªªªÚ½‰Bö­ÚÓÿ ´8¼¼¼0mÚ4ܹs999‚øY˧Ÿ~ Fƒ `äÈ‘’^Û,?¬¸Èí1zôh,Z´?þø£ä‹{åää ¼¼Ó¦Mƒ§gû›!¹Û…e$/ÐEEE k÷ïÈ‘#€¼¼<ÔÖÖbìØ±(++ƒ¯¯/€ÖQ·nÝ2ŸC¨Pw[‡úÕ£ÏÈ>è3¢OÎñpÀ 8zô¨Ý~Öb0°k×.À† $»nW°ü°âÂ‚ÇæÍ›;vì@cc£d×5}ÆMŸ¶°Ð.ÌBDWˆRRR(66–ôz=:tˆŽ=JDD«V­¢’’ósCBBèøñ㔘˜H_|ñ]¿~ˆˆ(''Ǫc_¿ý5¥"•’£“m~mgÇîÝ»G*•ŠúõëGMMMvŸÏšc[¶l!4iÒ$Ñ®ÁýtŽÍš5‹ÐæÍ›%¹®F£!OOOrrr¢{÷î1ÑmåææRbb"½÷Þ{I,ÁD.,,$///Š¥ØØXºyó&544Ð’%KhÍš5´aÆvÏŠŠäº×_£T¤RŹŠŸÃô†·eÁ‚€Ž?nžUÔÕÕÑ Aƒ¥¥¥‰~=k±Ô.rÁŠ +yyy€† BMMM¢_ïØ±c€^~ùe‹³Ò.DD111r+´ƒ‰m+B|ËFúnÀw”æ”FúZ}ÏsýúõÇ’’’Íž=ÛE«0Ý=/^¼Ø¢‹\p—ްâAôà.:>>^²k%''[|œ¥váZ„hÄúüzJE*åçØ/ô---äççGèæÍ›‚ŸßDYYõéÓ‡Ôj5‰vÎOœœR(äååE=ÿÙ………€†J---¢]G(X+ÐLŒâ°!Bª”*@¿YÖ¯ýl K‡J¥ÂŠ+´.š/›7oFcc#Þ|óM 6Œ©°…»t„¯¾ú*4M‡a¬Bbúû_±bT*Ëó Xk¦ Gôúêü«”ŠTªJ­²_ÈÅÅŤP(hðàÁæàSHòòòH¡P··7UWW ~~ÎOŸŠŠ òöö&…BA™™™‚Ÿ_¯×“)Šv!?Ëð;h°w&!ÕiÕPöVÂm²›]çêl”¿¿?BCCqçÎó#¡ "¬_¿D„mÛ¶™Ç…³4#‹»t„ ÕÅËË ;wîaÍš50 ‚^ãðáÃ(//Ghh(†Ú¥ Ç2Y íIXŸW–š¸Ou‡²·}MÐÕ,(Ó˜Ó­[· º_á—_~‰””Œ=ºÝvV,ÍÈâ.aÅxà²|ùrL™2¹¹¹æ…”„@§ÓaëÖ­€·ß~Û*NG²@Û;“°ê|kÿ³Ç,ÛGz˜®fA#""%%%7îì åååXµj€Öµ7œœlÏÅÒŒ,îÒV<€.J¥ýë_¡T*±iÓ&Ü»wOó'$$ ´´óçÏÇ”)S¬rátÄ! ´½!¡9 ±/ º8Þ}÷]( ìØ±uuuv]‹ˆðë_ÿ¯¿þ:žþy›\¤„»t„ ½KPPÖ®]‹šš¬[·Dd×¹ëêê°cÇ( ¼ûî»6¹p‚±Ð 3Ð…>(½o:õF᤺ ::šÐ¶mÛì:O||< Ñ£G35¸ŸãøTWW›‡†îٳǮsýá ´lÙ2줃‡„`OHX›Y c£3< p²m÷KXplÛ¶ ÎÎÎØ¹s'®]»Ö£ëdeeá­·Þ‚““>ŒÇë¸5Ka wé+@Gwww|ùå—P«Õˆ‹‹CzzzΛŸŸ?ÿùÏpvvƶmÛzäÂy€Ch{BÂê”jÂtoÖغu+´Z-^zé%ÔÔÔØtëׯcîܹhllÄÎ;ñôÓO÷ØE*¸KGXñ,»L˜0ûöíƒÁ`À+¯¼Òn2k¨©©Á/~ñ hµZlݺÆ ë± çÿ¡G¬‹#÷Ù\JE*Õý«N8!+0 Ahþüùd0¬z]II ùúúZ¿~=ÒtËp]V¯^M( €nܸaÕkzú÷ͬuq8dïÑëZê[(Í9¾óþŽŒa iU,k¨®®¦ÀÀ@@qqqÝN`ÉÌ̤€€@111Ýg[\Ć»t„¢®]t:-\¸PÿþýéòåË]žK¯×S\\ ‘#GÚØ¦§!¡ÃëLhµZ‹]g<ñÄÈÎÎFTT2220nÜ8ÌŸ?ãÆÃÀ‘––†ääd”——ã±ÇÃ|€•+WB¡è>дÕEL¸ »@÷.J¥{öìÁàÁƒ±iÓ&lܸï¿ÿ>V¬XôíÛùùùøøãQ__‰'âÈ‘# Ü呆ðº§ËfOȦT¤Rà ᆨõt©ÄææfÚ¼y³ù.¹í?¥RI³gϦ‚‚I\Ä€»t„"Û\nܸAË–-#¥RÙáoU¥RÑÛo¿MÍÍÍ’¸ˆ kwÐ "º`œlß=`ùòå8tèM¯ÑWéñ½×÷PQcréd«îH¥@£Ñ //W®\AYY‚ƒƒ1gÎôë'Ü]>‡#………HOOGmm-jjjàããƒððp ú}úô1?&E»hµZ¬\¹nnnèׯþô§?hí[µjœœœ`0°ÿ~Q®oKqq1^|ñELŸ>?ûÙϰnÝ:Q=ÊÊʰeËäççãÒ¥Kæãr´Ig.R· œ?ÇGKK †nÞ\CŽvé ‡èƒöññÁÁƒ‘ooo˜kjjBzz:>úè#ÄÅÅ º+DgìÝ»ÁÁÁsssCKK ú÷ï/ºGW.R·Kqq1jjj€ððpœù^^^íŽËÑ&¹HÝ&‚ààÁƒHKK3—£]º‚¹;袢"¬Y³¦Ý±¥K—"** yyy¨­­m×ÿ\QQaþÐûûûÛ¼—­.ÑÑÑX²d Ë£I.\¸Ø´iΟ?Y\¤n—©S§ÂÏÏ0lØ0¤¤¤´{\¬viKYYfÍšàÁÿóСCQVV___³›ma«‹¿¿?.^¼£Ñˆ^xaaapqqÝÇ’ŸÔmÒr¶ÉÁƒaþo–Ú`°@ ))©ÃñÔÔTœ8q¢Ã`ÿþýq÷î]@II‰¹Hˆéb‚ºØybРAvï b‹ÔíR\\Üîg|g׺]Úâç燒’£¤¤ÄüAóóóÃÅ‹ÍnS§NåúÖ¸˜P*•pww‡^¯Ý¥3?©Û¤;¤n“Ý»wC­V·ëRa­]"$¼yó&&Mš„W^yðÛßþ 8yò$¶oߎݻw£  UUUøðÃ;ôÅ Í;##GŽ`Ê”)æÝµOž<‰7Þxëׯ‡‹‹ êëëqàÀôêÕK9ÚeÆ ¨¯¯GMM 8€ÂÂBIÛE«ÕâÕW_…‡‡\]]1|øpøùù!44¯½öz÷î N'Y´%>|ƒæ¾O1=ââ✜Œ°°0<õÔS²¶‰%©ÛhÝq|Û¶m˜={6T*ž|òIÙÚ¥+¢@s8ΣˆC„„‡ó( 4‡Ãá0 /МŸ$ß~û-¶lÙ‚ââb,Z´¨Ë@—Ãa^ 9?ILáOtt4âãã™Y^–ñ^ 9?Ynß¾ wwwhµZ¹U8œÁ 4ç'Éþýû1yòd:tqqq=Þ&Ñ>ÌŽÃáp…ßAs8£ðÍáp8ŒÂ 4‡Ãá0 /ЇÃ(¼@s8£ðÍáp8ŒÂ 4‡Ãá0 /ЇÃ(¼@s8£ðÍáp8ŒÂ 4‡Ãá0 /ЇÃ(ÿ+®NÏ^‘0ÂIEND®B`‚mpmath-1.0.0/doc/source/plots/hermite.py000066400000000000000000000003611316273626600202270ustar00rootroot00000000000000# Hermite polynomials H_n(x) on the real line for n=0,1,2,3,4 f0 = lambda x: hermite(0,x) f1 = lambda x: hermite(1,x) f2 = lambda x: hermite(2,x) f3 = lambda x: hermite(3,x) f4 = lambda x: hermite(4,x) plot([f0,f1,f2,f3,f4],[-2,2],[-25,25]) mpmath-1.0.0/doc/source/plots/hi.png000066400000000000000000000247741316273626600173440ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœí{tUå†ŸÜ „KÀ@¨IDCQ¦*^Æze©TÆêjm+­Œ‚Òê`KkÇi;½ÌرƒNK-·Ö€B—¡eFQ**4c©­@A£H@AnpÂ%É™?¾“@¹œóíýÆß³ÖYçdŸÛÃY'/_¾w{'E£Ñÿa†a„ŠT\8ZÄ0 ÃhJrІaFóX@†a„ hÃ0Œbm†R,  Ã0BŠ´aFH±€6 Ã)Іa!ÅÚ0 #¤X@†a„ hÃ0Œbm†R,  Ã0BŠ´aFH±€6 Ã)Іa!ÅÚ0 #¤X@†a„ hÃ0Œbm†R,  Ã0BŠ´aFHI òÍ_yå.\HMM L:€ºº:î¿ÿ~RSS©­­eöìÙAj†aB #è믿ž9sæPTTÄêÕ«¶3tèPf̘A^^ÅÅÅÁI†aD(¦8ŠŠŠ;vlÃÏäää0dÈÊË˃R3 ÃŒ@§8žxâ ºvíÊäÉ“¶åææ²fÍÊÊʸòÊ+›<§  €ÜÜ\’““‰F£ <˜ÊÊJºwïNjj*{÷î%+++”ÛÏ>ûlôœsΉNš4)úÀDgÍš}á…¢uuuÑ &D|ðÁèĉOyÞe—]€m|˜>}zÐ íBÕ;ÕuWõŽFCâþ«_E£>öXôÙgÝÍú§Ó?åÚk¯õãÖJA7ŽqãÆ5{ßœ9sZ|^FFF¢”NýÔªÞ ë®ê !qß»×]Ÿu»w»›ÙÙÁé´‡PÌA·•h4´B»©­­ Z¡]¨zƒ®»ª7„Ä}ß>w•Õê€ÎÌÌL¬S‘ èÁƒ­Ðnî¸ãŽ Ú…ª7身zCHÜÛ1‚¶€Ž555A+´›H$´B»Põ]wUo‰{;FÐaC2 >´B»Ù¾}{Ð íBÕtÝU½!$î6 aû3¤-­Ð.T½A×]ÕBâÞ̺oßàtÚƒd@ï­ÿŸQ’’’ Ú…ª7身zCHÜ÷î…ôt¢éÝØ½²² 5ð•mC2 ³²²‚Vh7#GŽ Z¡]¨zƒ®»ª7„À½®Î ³²8|ª«õ¦7@4 ­$ôª7身zCÜt!-<ÿ ¢m%¡T½A×]ÕBàÞ öàÑ€¶’Ð?ªÞ ë®ê !pï{p€h@[IèUoÐuWõ†¸Û:8¬$ôª7身zCÜmVúGÕtÝU½!î6‚+ ý£ê ºîªÞ÷F#è]»ÜM hOXIèUoÐuWõ†¸×§rÿþ|ôQÃM9$ÚJBÿ¨zƒ®»ª7„À½Q@ïØánœN{‘ h+ ý£ê ºîªÞ÷X@GûeSQ}ú€ây>$ÚJBÿ¨zƒ®»ª7„À=кö§ºZsô ¢m%¡T½A×]ÕBà¾{7ôêÅŽ½é„á \íA2 ­$ôª7身zCÀîGޏcqôïOE…Ûd#hXIèUoÐuWõ†€Ý;IA¢m%¡T½A×]Õvo´ãs}@Û‡G¬$ôª7身zCÀî6‚+ ý£ê ºîªÞ°{£€¶9è°’Ð?ªÞ ë®ê »73‚¶)XIèUoÐuWõ†€ÝëŽ è®]ᬳ‚Óé’m%¡T½A×]ÕÂQíÓŸ={ÜôFRRp:A2 ­$ôª7身zC8JÂ]uîðuªÓ ÐVúGÕtÝU½!%aÅqwø:Õ‚DÚJBÿ¨zƒ®»ª7„ $ìÖíûzÐÞ±’Ð?ªÞ ë®ê º?îΦҿ?;ÜijMqxÆJBÿ¨zƒ®»ª7èþñÇîº,RÑ€¶’Ð?ªÞ ë®ê ºw¢U„ ÐVúGÕtÝU½!@÷FÇá¨_EhSž±’Ð?ªÞ ë®ê ºŸ4‚NJ‚O}*•x ÐVúGÕtÝU½!@÷X@×e÷gçNw¢Ø´´`Tâd@[IèUoÐuWõ†Ýc}0½?55ÚÓ ÐVúGÕtÝU½!ø’pú‹T@4 ­$ôª7身zC€î±%í¨±€ + ý£ê ºîªÞ|IXÑ?ˆ´•„þQõ]wUo¸$LKãÿöö, ÁJBÿ¨zƒ®»ª7ä^[ëVfg³µÌ-ó2Ä¿F<‘ h+ ý£ê ºîªÞûÞ½PWýûSVæ6Y@€•„þQõ]wUoȽÑ"•­[ÝþÏø×ˆ'’m%¡T½A×]ÕrtMV6»vÁ A’â_#žH´•„þQõ]wUoÈ}çNd¸}ëòòü+ÄÉ€¶’Ð?ªÞ ë®ê ¹ÇŽŽ´+Õ´úü3ˆ´•„þQõ]wUoÈ=v|Ñmunß:AÇŠŠ î¹ç.½ôÒ&ÛËÊÊ8ÿüóùú׿Î/~ñ‹&÷YIèUoÐuWõ†€Üc#è÷#. mrrrxúé§O™¶HJJ"33“ªª*œTÅZIèUoÐuWõ†€Üc½i¿ÍA'œÁƒ³fÍæÍ›Ç¬Y³šŒš­$ôª7身zC@î;v@Zvölí…ääd2339~üxöêêj-ZIJeËXºt)¥¥¥ ó^õ_Ž0n9rdh\Ú²­ž0¸´u[FFFh\Ú²­~—Ð_€]»(éÛ—­Û’éÒ¥”^½Z÷ÜuëÖ±lÙ2¦M›Fee%a")®F%‰D˜2e +V¬àæ›oæâ‹/&77—îÝ»3þ|jkkÉËËcêÔ© Ï7nóçÏJ¹CD"222‚Öh3ªÞ ë®ê ¸—•A^µ£®$õõ×8ï<(-mûËŒ?ž¹sçÆÛ®Ý¤-‘‘ÁÌ™3›½ïꫯnv»zI¨8·¨ê ºîªÞ€{lŽC½;Ï 0ÅÑVúGÕtÝU½!÷XA¸7½óìÁ¢m%¡T½A×]ÕpôΤγˆ´­$ôª7身zCî±)Ž-Çl8¶’Ð?ªÞ ë®ê ¸ÇFÐï²€õ’PUoÐuWõ†Üc½aMqŽ•„þQõ]wUoÀ}ÇHJb펳ÉÈ€¾}ý¾}¢ h+ ý£ê ºîªÞàÙ½¶vÿ§ØS™F^$%ù{ûD"ÐVúGÕtÝU½Á³ûîÝPSѳ:ÏaFë‘ h+ ý£ê ºîªÞàÙ=¶Çk‘ ˆ´•„þQõ]wUoðì^¿tŠ èóÎó÷Ö‰F2 ­$ôª7身zƒg÷X@o=æ¦8Î=×ß['É€¶’Ð?ªÞ ë®ê žÝcSïTº´tÀXIèUoÐuWõÏî±tÉîºvugóî,H´•„þQõ]wUoðì èwdèPH–Lµæ‘ü§XIèUoÐuWõÏî±)Ž ìT!ˆ´•„þQõ]wUoðèBEGºŸE5jþDÚJBÿ¨zƒ®»ª7xtß·ª«ÙŸÑùöàÑ€¶’Ð?ªÞ ë®ê ÝËʨHt®} A4 ­$ôª7身zƒG÷-[xïX>`#èP`%¡T½A×]Õ<ºoÝ ÀúÊ<²²@øëf‘ h+ ý£ê ºîªÞàÑ=Ðï×äuºÑ3ˆ´•„þQõ]wUoðè›âØB~§›Ñ€¶’Ð?ªÞ ë®ê Ýc#è2†Ø:,XIèUoÐuWõOîµµ°m‡ºõã0=, Ã‚•„þQõ]wUoðä¾s';FE·‡Mq„+ ý£ê ºîªÞàÉ=6½ñAMIIPPø·ôd@[IèUoÐuWõOî±€~ûp>ƒC·n‰KßH´•„þQõ]wUoðäÛƒc+y –ø· É€¶’Ð?ªÞ ë®ê žÜc#è­ä1|xâß.$ÚJBÿ¨zƒ®»ª7xrôò¹ðÂÄ¿]H´•„þQõ]wUoðä¾e µI)”“k#è0a%¡T½A×]Õ<¸9;w²#9—¤ÔT„ÿ/;-’m%¡T½A×]Õ<¸oÛÀµn‰w—.‰}»  h+ ý£ê ºîªÞàÁ½ÑuþDÚJBÿ¨zƒ®»ª7xpoTvÖùg h+ ý£ê ºîªÞàÁ½ÑÚ:dXIèUoÐuWõîö¶)Ža%¡T½A×]Õïôžžùäæ&ô­E2 ­$ôª7身zC‚Ý£Q¢ïÀAzò©áýHJJÜ[d@[IèUoÐuWõ†»ïØAòá*J)dø…8 h+ ý£ê ºîªÞ`÷ÒRwEa§žÑ€¶’Ð?ªÞ ë®ê voÐy h+ ý£ê ºîªÞ`÷F}Á‰{›0 ÐVúGÕtÝU½!±îÇ7º€>œ;ŒÞ½ö6¡@2 ­$ôª7身zCbÝk7¾K )ôÕ Ïqu’m%¡T½A×]Õè~ð é{w²™FŽê¤GHjDº¬¬Œ§Ÿ~š_üâÇõµ­$ôª7身zCÝß{póÏ—\’˜· èÉ“'3cÆ ²²²(,,¤¤¤„»ï¾›M›6Ååõ­$ôª7身zCÝcá{"üñ´šÔD¼èOúS222~=z4pjqPQQÁ£>ÊÆùë_ÿÚ°½®®Žû￟ÔÔTjkk™={v“ç©—„?T½A×]Õç~hm)=C éÞ=î/:2‚ÎÈÈàÙgŸmøyúôé Û“““ÃÓO?}ʈ¸¸¸˜¡C‡2cÆ òòòN™"±’Ð?ªÞ ë®ê ‰s?ô†A§_¬;?ß2‚Ø¿?<ðÕÕÕÜxãmznEE999 2„òòò&÷[IèUoÐuWõ†Ä¹§~ð.g_£ûÙ´…„•„×\s ›7oæã?æÚk¯mÓssssÙ;¥MYY¹'®êÝwßeÑ¢E,[¶Œ¥K—PZZÚ0…R_P„q[IIIh\Ú²mÁ‚¡qië¶¥K—†Æ¥-Ûþô§?…Æ%ß—ãÇÙµç¶ÍE×ö‰›óºuëX¶lÓ¦M£²²’0‘F×#âý“&MâÉ'Ÿdÿþý<ôÐC,Y²ä”ÇD"¦L™ÂŠ+¸ù曹øâ‹ÉÍÍ妛nâ¾ûî#==£Gž2=~üxæÎoeÃ0BLô½÷I*<â¤ÏrùÑÕ¤¥Åÿ=–- ›â˜9s&ݺucáÂ…Í>&##£áq'3gΜ_ÛJBÿ¨zƒ®»ª7$Æý£Õ¥œ ìéW˜p# ™â˜4iÏ<ó ï¿ÿ>ååå¬^½š)S¦°víÚ¸¼¾•„þQõ]wUoHŒû®bWFÏýdÌ?C‚FФ¦¦2{öl>ÌðáÙ:u*guV\^ßJBÿ¨zƒ®»ª7$ÆýØWf^¦û¹´•„Œ W­ZÅ“O>Ù0Ò}ûí·ãÎ`+ ƒ@ÕtÝU½!1î½¶¾@ÞØN~ŒÑF$d½hÑ"æÌ™ÃwÜ‘ˆ—·•„ ê ºîªÞ÷ªýÇÉ‹ldOR_ò¯××3 èž={2eÊ”D¼4`%a¨zƒ®»ª7Äßýíÿ*årŽñ^¿‹è›Ü¹OsÕÉ£ÙYIèUoÐuWõ†ø»ïx~=µÃ/Šëë†É€¶’Ð?ªÞ ë®ê ñw¯}ÓtÖ СÇJBÿ¨zƒ®»ª7Ä×ýÈÈÞé:gŒtè±’Ð?ªÞ ë®ê ñuÿë_¢\]ϱä®$;/n¯«€d@«—„Ѝzƒ®»ª7Ä×}ýsåd±}‡CjÂ?‡É€¶’Ð?ªÞ ë®ê ñußó²›ÞHù›OÖôˆ´•„þQõ]wUoˆŸûñãÐåÐg]g-•„þQõ]wUoˆŸ{I |úxl=ÒZ+ ý£ê ºîªÞ?÷U«à"\@sá…qyM%$ÚJBÿ¨zƒ®»ª7ÄÏýÿ}€|¶r$÷èÙ3.¯©„d@[IèUoÐuWõ†ø¸ïÛÕqHê:ê⿞"’m%¡T½A×]Õâã¾bŒˆ® iDÜOú$d@[IèUoÐuWõ†ø¸/_—óg÷Ã¥—vøõ‘ h+ ý£ê ºîªÞÐq÷šxñEÐѤ$¸ì²8™i!ÐVúGÕtÝU½¡ãÝöï`0ÛIºàèÕ+NfZH´•„þQõ]wUoè¸{“é+®ˆƒ‘&’m%¡T½A×]Õ:îþüópkÜ—_#M$ÚJBÿ¨zƒ®»ª7tÌ}ûvظ®K·´d@[IèUoÐuWõ†Ž¹/_]9ÂÇÞ„¾}áœsâh¦…d@[IèUoÐuWõ†Ž¹?ÿ<Œ¤„Ôºãnz#é“s“‘ h+ ý£ê ºîªÞÐ~÷H^}®K·ùg h+ ý£ê ºîªÞÐ~÷W_u§¸º5+6ÿl­‡•„þQõ]wUoh¿ûsÏD^µRRà’Kâꥆd@[IèUoÐuWõ†ö¹= ‹ÃдmdT~#F@÷î °ÓA2 ­$ôª7身zCûÜŸ€‡.\å6\uUœ­ô h+ ý£ê ºîªÞÐ>÷gžq××ýewã†âh¤‰d@[IèUoÐuWõ†¶»ü1¼ðôÍŠ2°ôe7ÿ|Í5‰‘B2 ­$ôª7身zCÛÝ.tG°ûöè·IÚ½FúDžAåd$ÚJBÿ¨zƒ®»ª7´Ý½~zã®þ±éoŒ³‘&’m%¡T½A×]ÕÚæþÎ;°v- 9ïÙüsc$ÚJBÿ¨zƒ®»ª7´ÍýÙgÝõßå(Iü£›Úø„žAåd$ÚJBÿ¨zƒ®»ª7´Þ½¶æÏw‡Û¸û¼×ÝZïk®´´Ä Š ÐVúGÕtÝU½¡õî«WCE\wd¿eÓ'#ÐVúGÕtÝU½¡õîóæ¹ë¯} X¹Òý`a’m%¡T½A×]ÕZç¾k—[Úݳ'ÜþÙ=ðÆ0`OíÄÉ€¶’Ð?ªÞ ë®ê ­sŸ>Ýã¾û Ç«ÏA]Üzë'úøÏ'#ÐVúGÕtÝU½áÌî‡ï~©©ðÐCÀïïîøüç/'„d@[IèUoÐuWõ†3»?ý4ìß_úäö©‚—^‚ÌL¸öZO†H´•„þQõ]wUo8½{M <ù¤»ýï+V¸¹ŽÏ}ºtñ#(‚d@[IèUoÐuWõ†Ó»ÿîw°u«ÛYcÄlzã4H´•„þQõ]wUohÙ=…ŸýÌÝ~øaàØ1w èôt¸é&‚"H´•„þQõ]wUohÙ½¸ØwcĈØz”W_…ƒaôèOüÙSšC2 ­$ôª7身zCËîõ£çï|'¶7Moœ–Ô ß<‰0aÂzõêEŸ>}xì±Ç(++c̘1\}õÕ 6ŒÉ“'7yž•„þQõ]wUohÞýõ×aùrÈÉ;ïÄMo,]êöµ»õVÿ’:‚^¼x1·Ýv3gÎdÿþý óVIIIdffRUUÅ€Nyž•„þQõ]wUo8Õ=…)SÜíý(v,¤åËaï^3„]‰$Ѐ®¨¨ ''€ÁƒS^^Þp{Íš5Ì›7Y³fR ZIèUoÐuWõ†SÝ—,?ÿÙÍ=ík±sçºëñã}ªIh@çææ²mÛ6¶mÛÖÖõ$''“™™ÉñãÇ›l?tè‹-bÙ²e,]º€ÒÒÒ†ÿµëç¿Â¸­°°04.mÙV—¶nkì´K[¶ 4(4.ù¾ìßá‘GJ˜6 >ø ”ÈÖ­°|9%½{Ã-·ê¼nÝ:–-[Æ´iÓ¨¬¬$L$E£ÑõÀˆ Þ<‰0qâDz÷îM=((( 77—îÝ»3þ|jkkÉËËcêÔ©Mžwë­·òÜsÏ¡ÜaJJJ$çU½A×]ÕšºÿǸ]êÆŒq{Ôn¥Ê”)ðÍožXµÆÏÜú‘}4 ÛKØ>DÃ0šgÏ8稪‚·ßv§µ"uso¿ ë×ÇV«„ƒ°e‹änvVúGÕtÝU½á„û~••îˆuÆÅî\¿Þ…óE…*œÃˆd@[IèUoÐuWõç¾q#̘áŽ÷ü/ÿÒèÎ_ÿÚ][9xFݺ½ØJBÿ¨zƒ®»ª7@~~!£F¹#ýð‡»cÏ(*‚Œ 7.PG$Gж’Ð?ªÞ ë®ê ðÀ%¬[û·ÐdÙSOAu5L˜`û>·É€¶•„þQõ]wUï7Þ€¢¢‘tïîvuNI‰Ý‰¸Ó¨¤¤À·¾¤¢ ’m%¡T½A×]Ñ»ºÚ-D©­0mäç7ºsî\·rð‹_„!C2ÔB2 ­$ôª7èº+zO ¥¥pÕUÛ¹ï¾FwÔÔÀ´iîöÃ⦈d@[IèUoÐuWó~ùe·æ¤woX¸°°é¹_÷;زÅ¥ÿâ‹sTC2 ­$ôª7èº+y𛹈FÝ®u»v5rFáñÇÝm=· ÉÝì¬$ôª7身xWVÂØ±î$°?ìN ÜW­‚7ßt Sn¸!(MI$GÐVúGÕtݼkkáË_vóÎcÆ@ìî'Ü£Qø·s·¿û]šÎ{gB2 ­$ôª7èº+x?ò¼ø¢[ÆýÛߞإ®Áýþ^yÎ=¾ð…àDE‘ h+ ý£ê ºîa÷ž3Ç©®O—ýz¸¯°°Ž9±¿óÏîΜb´ É€¶’Ð?ªÞ ëfï¹sáþûÝ™Q–,qG¬kLII <ñlÝ Ÿûœ±»H´•„þQõ]÷°z?ó Üs›ÎX²®¿þÔÇŒÌΆýWèÒ%TÇ{VC2 ­$ôª7躇Ñ{Áwº”X¼þîïš\dÊ·´{Ê”S‡×F«‘ h+ ý£ê ºîaó~öY·Œ;9.„Ͼ…¾öÛ—,àûß÷êØÙ h+ ý£ê ºîañ®«s9ûµ¯¹½ä~û[¸ãŽ|ì<ø …à§ôèáÑ´ó!ÐVúGÕtÝÃà}èÜ~»Û•93–/w+[ä‘G`ÃJ.¾¾òožÉý^¬$ôª7èºí]VæV¾ý6  Ï=çwš'<ÿ¼+ûôaä²e¶(%HŽ ­$ôª7èºé]\ —\âÂùÆá/9C8WTœ8…ÕܹDúöõ¡Ùé‘ h+ ý£ê ºîAx??ù‰;dÆž=ðÐCð n1J‹ÔÔÀ]w¹c=Ož cÇÊ~æaCrŠÃJBÿ¨zƒ®»oï àïÿÖ­ƒôtøÕ¯Ü™©ÎÈì†Ü#G6µNõ3’#h+ ý£ê ºî¾¼sgÝþÌgh8à[oµ2œÿë¿\@÷èáö½ëÚÐýÌÆäÚJBÿ¨zƒ®»ïµkáÞ{] gd¸ÕÙ<àöu>#+Wº=5’’`Þ<×$ÆPýÌÆäÚJBÿ¨zƒ®{"½ß{î¼Óo½×\ã Áø‡V†ó_þâVª?3gº}ñ¡ú™‡ É€¶’Ð?ªÞ ëžïíÛ݈ùÓŸvKµÏ>fÍrGmr‚×Ó±iÜr >ì=qb3ï£ù™‡ É)+ ý£ê ºîñôÞµËeéŒnÎù¬³Üš’pS­æý÷aôhØ·¾óøÇlöaªŸyØA[IèUoÐu‡÷–-î4TîÌ]ºÀ£žØÞ¦p~í5¸ürعÓÎîñÇ[\Œ¢ú™‡ É´•„þQõ]÷öz×Öº%Ù3fÀŠn[×®îÀr<ýúµãE-‚»ï†£GÝÈùßÿý´+U?ó°!Ðê%aF›†-á@ÕtÝÛêýÑGðë_ÃìÙP^î¶ 覈'Nt—k3õgä~ä×>õ|ãqw7šGrŠÃJBÿ¨zƒ®{k¼÷ïwпí6ÈÍ…þgΣGÃïñƒ´3œ÷îu§è~ä7òßÿݪpn­»qf$GÐVúGÕtÝ[òþðC—•¿û¬ZåVZƒ+þî¹ÇŠªÃÇÈî97ìÞµ  roö7Óaw£mHŽ ­$ôª7èº7öÞ¼Ù-"¹ê*7mñõ¯»u"}ú¸}ñEÜ?ûYù²Ò­÷;Ö…ó½÷º¤ÛÎ'»íGrm%¡T½AÏ=…>€’’‘<ù¤;ÌEãƒAƒÜ‘Ûo‡+¯t§ŸŠ +Wº@./‡O}ÊMhÓ®—RûÌÊd@[IèUo¿{]¼óŽ â?þÑ]ô@È ) .ºÈ­ ¹ývwL¢¸jyíZ˜:þð÷ó—¿ Ó§CBaÿÌU hõ’Pq~NÕÂå^[ëFÇo½å.6ÀŸÿìú¸zRRà²{NÞ ’IDATËàüó·sûí…\y%ôî™M›\«øûß»ŸóóÝ-žÏªõ„é3WF2 ­$ôª7ç¾wï‰ ®ãM›àÈ‘¦ëÒÅAîê«á³ŸukAÜ©üä½i“[VøÛߺù”]Pßs¤¥Åå-”¿/aB2 ÕKBÅù9UoH¬ûñãnÊvëVwù¿ÿ;È;vœúø>}`Ô(¸ð— .€nÝì}è[lò›ßÀ믻mýúÁ÷¾“&¹@ÇåïK˜ h+ ý£ê sFÝ|ðÖ­nyt}×_**Ü´Åɤ¤¸]x!Œq"Œlýüq‡?óhÔ…ñ¯í¹~jðÜsÝ®“&%ì¬ÛÊß—0!ÐVúGÕZv?rvïv{“Õ_ïÚåB·>€ËÊN’¨')É-ÉËs—ü|w>† ëø ´]Ÿy]+ý^|Ñ…ò»ïºín©ö„ nןÐUùû&$ÚJBÿ(xG£î/ùú ­ÝM›¶SWWxJycƸ¡|¨~ÏÆd@[IèŸ3yG£.#‘Óê™~>tèDÖ´…¤$7Ú-(85p)áÒKG6lÏÎn¾” %o¾ÉȬ,Äo¾y"”húÀÜ\¸ùfw¹þz÷¿OÀ¨~ÏÆd@[Ixfêê ººé%9u[ë/#Oûz-ÍÓ¶…^½ 'Ç]gfž¸œîç>}\èöí ©-~›CÕÕnT¼y³»lÙï¿ÏÈ7ßlºƒ4¸‰íQ£Ü^?ó¸ôR(,Løœr[±pŽ’dIº]«š»;Öò}õ÷WUEHNÎhóóëï;r¤uzìX¼ÿånU[c’“ÝH´G·ÇV·n®‹:]¸¶¸={¶ò\xí1º°ª®vó/~x"€ëÃxóf·½"iid\rɉ0þÌgÜ”EœöUN$æÉ€~çÃÌšÕ± lïs;þÃvµ!-Í…dŸ>—ŒŒ·?üp;çŸ_Øäþ´´Ð Üš%î…UMÙîÞݺKUU˯•’â&¼ N\Ç.Û““)><~Þ±’0>Hôºu™Lš”ø÷éÒÅ…PZš%Ößn|iü˜–.MSØî×IKsá6¢éé§û?èþ²žwžÛ¸ªÊMrWU5i龯Û÷ïwáÜÚ‰òÞ½Ý~ÇõàõûâÕqnn‹#bÝOÜJÂxh@G"&L˜@¯^½èÓ§=öuuuÜÿý¤¦¦R[[ËìÙ³›þéÂå® ‹FÝõÉ·D!ršû›»íá±)[¶¸Ã:z~ߎ>6åðaøæ7ÝŸ÷'c]]€ß¢Óš ={’’•å³G7Ùݣǩ—æ¶7·­Koó:)q;ލTÝ- QQQÁu×]ÀàÁƒ)//gРATTT““À!C(¯?ÁZŒº·Þ‚Ï}λo<8´@;9 .˜ÿ R?]ÿçÈÉ×í½¯#ÏïÒåD¸ÆF¯G-‚;ï ôókGª~[´ÝÃD ››Ë¶mÛ¸âŠ+ضm[C(çææ²fÍÊÊʸòÊ+›ÖóÊ+¯°páBjjj(((`êÔ©A+b'ýå/ÉW\AR¬¤©/gΜÉþýûCª÷}ûöQ]]Íþçrà 7ðÆo­Ôj>úè#æÎK—.]HNN¦W©h#+W®äœŸæÚ?gŸ}6EEEÌœ9“¾}ûòÞ{ï­tZÔ~sýõ×3gÎŠŠŠX½zuÐ: „r?è­[·òo|£É¶¯~õ«|å+_i²­¥’1 4÷o7nÉÉÉÜ}÷ÝlÙ²…^x! »ÓÓœûUW]Ezz:Ó§OgÁ‚,X°€ñãÇ#ØÍyßu×]”””ðÄO0oÞ¼€ÌÎLKß—»îº‹uëÖqðàA.¸à‚€ìZG˜[KQQcÇŽ Z£Pt^^ÞiÿÆ œ\2æææúR<#Íý6lØÀ† xüñÇY±bEEELž<9 ÖiÎ}ûöí¼óÎ;€;Ê»õÇÍy/Y²„ƒò­o}‹ÒÒR^zé%FaË´ô_µj‹/fæÌ™Xµ0ÿ>¶†'žx‚®]»†êwRjúÇ?þ1 ,àòË/çÛßþ6ùùù %cÏž=ùéO´âi‰D"Ü{ï½ 8òòr~ðƒðéO:h­Vóýwï^žzê)©9h€[n¹%´µ4ÇæÍ›¹ì²ËøÂ¾ÀÃ?L~~~ÀV-Ó¸ôWø}lÌüùóùáÈ 7Ü@JJ ¿üå/ƒVÄÚ0 ã“„TIh†ñIÂÚ0 #¤X@’—_~™G}”²²2î¼óΆbÙ0”°€6:%õeÏW¿úUžzꩆ}ç C h£Ó²cÇ233‰D"A«F»°€6:%³gÏfÔ¨QÌ;—)S¦zš4Ãh/¶›aFH±´aFH±€6 Ã)Іa!ÅÚ0 #¤X@†a„ hÃ0Œbm†R,  Ã0BŠ´aFH±€6 Ã)Іa!ÅÚ0 #¤ü?7©»xQ*ÿgIEND®B`‚mpmath-1.0.0/doc/source/plots/hi.py000066400000000000000000000001471316273626600171740ustar00rootroot00000000000000# Scorer function Hi(x) and Hi'(x) on the real line plot([scorerhi, diffun(scorerhi)], [-10,2], [0,2]) mpmath-1.0.0/doc/source/plots/hi_c.png000066400000000000000000001343761316273626600176460ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½Ë¯ïJVçùY+Âþ=öã€wÕ¾þõ¯ó+¿ò+|ÿ÷?···üþïÿþwûf›m¶÷Ìf=a÷wÇOýÔOñ{¿÷{GÞ¾}ûÝ>¤Ùf›í=³YAOØç?ÿy~æg~†¿ù›¿Á9dzgϾۇ4Ûl³½g6zÂþðÿ_ûµ_ã§ú§ùÒ—¾Äßÿýßóã?þã|ïKEU(¬P°(¥[G$Ù€œnó$/Y–‰²ýѱŒûaÙC¶{ßq¸${¿w,–r’Ÿ/Ÿ+K—ÏÕ;ÅBpÙÏ÷óýNÕ‰óÕÞaG~×}ëÕ¹¯¼Ù;t)ƒò¼N›,·]Á_ƒsˆ©W ¨KØ Ü f+UÅ3Ys!† K„RZ Jí§rÄ’PþøÖ +ƒ¬––~*¥ÂÂ@¡Ô¶$ÊÛ›šÅõŠF”Ÿ‡AÄ¢(ņe‹`P ‚¢¢H+ˆÄ8Ð0w7o¹½¹A€>ü&_ýêÿÅl3 'í‹_ü"¿õ[¿Å_ýÕ_ñ/ÿò/|æ3ŸàõsÃg~Àò™*|Åð%q>ŸF¶æyÉ²Èø:|õ+~äß}‰íœ-OŽÑ…òøêW*þ‡Ïƒ¼¼Î`YÆË§Öóëøo_®øÁÏ£ë}§Ó7¾\ñÁ÷•þ†öLYLo¿\q5²¯h%L&I5Р@1K`\‚»žáÜk8>G¾YÀ?äŸ òß¿Êkó?ñRò,øw²äûeÁk Ù²à–¥Ü°7,ä %SêÇèâ-²ÜÀ§,ò½ò©ò= ø`¼,‘W x^"ÏKÜeÉVüÙþ¯üÏÿë±£d/)8RRIAMA# TVX.°²Æ²¦–%†VJ Œ˜Ö`Á6‚¶`ÐÔ êàûùÿ…ټ̀ž°û±ãOþäOTW~Ù?¢Žã·ôÕòu:ðºL§õƶŸ—ÇãKö—,öÕÃ"/'_–éò4¯Ë7&äÇìdý©ÂÇXúà:g';üìJúsÜ%9]>Ù‚h˜WÀ b@-\-v–êåúD›¤¤K‹¥eÁ÷ó’•TÙ`¸Áð1VÞ öc°oAß"7wH³‡£…ƒAö~»ì ²5°3èµáêÚð¬U>å ;Uöö(G”J”¨©ie‹Ðb‚ÆjTj„˜JD T ÄZ¯¨¶OO¾Îÿmôìåµvÿu'pN-…çH=‰ù$ëfp~õ"ùŽ›íCF`= ç Á¬Ò+k‰7‚„œøÞWq`ž•ÈÑ@e1w?Àö¶à›74––‚F,µXj,5—|¯YÉË ªoÀ|Œ˜i{îy»…úU „$;[ìÏ~ð[Ãze8郘ÒÉ ­ìJ‹D§ˆ4Á1Ò 4ˆZ‹˜êè«çó÷žh3 Ÿ`¯® 0ç$ïApžlÜö«椌¨ªÏÀYÆè™ÔKÕp¬òêµ9©:8^>”Ó²ç¯M_~È#‡~¯åû½H÷õ“‘ƒ;©‚˜¼fWAÓÊx‘âa­m"#…DRj Ò€i£Ð”Hk1üò­‚-ùæMA]Tøt”‚£X*Jþ×”ò…¹û1Øo#æ bn<¤ÍÂÞî i:BÚvÀþ‘ëO!ßRäÒ°¾0,—Je”ƒjðp{@Wô nhi债é“4E¿¬Qƒ8áúÅ èh3 ŸhŸÎg|'à©{âÒHËÓcË-³“ÓÃlNNW;dD&¡<ر‚)è>ª“Êü;iPù2RW£ŠÊØá¯…G% hR÷I+Ð#¢GД b,˜ÂO‹) ‹’?.¨G XŸÄ²ËÎ|Ê®¹²×æ%b߀}‹˜·`oÁl³…f 7¤m¡6P¤2pT¯ª Ŭ»V Ce¼‚®" ;5íS‹£¥ò¿?QÕ Mn b’Ùf@?ÁFø8?H5Ã89ÇöûÕLr ÃÃnJ²å±MM@ù!@þDð|ˆ|¾gÕ³ûúqA²…nß ;w‡$°VG#N Èôà|³GÌÌÊ ¤XAQ K ËV–zeùö‡Ç­eßZvbÙá§[#ÜYøÀ¬øÀ®YÙ+ óÒC:¨ẖ[¿ŸfÜÁµÐØilŽAa ºR–+eQ*µ‘Î5J-Q+hpé4Ý9œ‡´ÄO§­wytq.³Í€~¤ î# çìKÝY—E^þPÕ<æ´,úŸSwÇÙÝ$²zÒÕA_ð$ßóGoodó“ëÜsÀ÷íkL=Ÿº‚’†’$Dà¨-qªˆZÐ"¨å˜%˜bW°\!«¬ de‘u\Z6Zê·–íѲuÎ[ [+ÜYê׿‚—ö’Ò^Q˜ bnë!ÙúÙ#í68‡4jE*…˜Ž>ÉR)—†¢TZ£ÔêÁÜ»;d ›-ŽzêP èÎf@?Õ>)œÇ\cþ1—Æ}ªù0§õßE«|p§Ü"©lã …ß)ã‘už¤ÚÝp½©ß7vI⹉V¼’nŒF@D•ÖÔzÀ©‚QÄ0˜±%Ø)°^"K¸*àÊ"×B:~hùðCËag8ˆp°Â>|óÛZacáÎÂKsÁ3sAi¯°f‹@‹Ù‚Ù9xßaïJ«Hía§ºPt!ØRiЊX‡†hÀpÀ±8 àÏÉ è¡Í€~Šýç gU5gTs„ožÏDÙiñ£\©[d$ût?tU<¾¹{fÒ)¹]ºJºý3Û‘l^^«ôX[ñ nŒ€8Šã 5•ÙáÛ¬ˆµU°ŠXÖ"……u‰\­à™…gyfá¹…çòÂpøXøðšŽÆCÚg[wVxa.¸2k s‰1ûÒº÷6Gïvi+84@ ­B£PkPÖ•x`/S*¦P¬QZUZéÕtèD7ƒ‡µ<ö"ý¶ÐOµÇÂ9siÀœÇÊ¢M¹<Òz¹j¾̹Bw€d®ŒQ˜Ë´ZÌw>Ïý¶ ÌóíßçÆ˜¬ãúÉ9µì¦ö“º8„¨‡)Öp ¤k…B«ŽƒVÔÑÖqH¤¸ êºP¸´Èõynà¥EÞÈK‹ye0 ¼6oá[¨‘öÌÞ;+ì´Ÿå™YsaVXs5Äì݃%m*D*p5RÕ°q ¨…:üZBRPëŸ@­†„W×=¤ÇEÁûn3 Ÿbc*õ>8g0>Y//;ãº8Å!ù£eùzaÃc.¾Î0Jåž4ÎÙÞ‰=RYŸÛÞS\qÅÁ:™zí„òcÏѨœ5¸4Ò”B»Û¶@#B¥°P8¨°7 {ÝRiKk[°­·³±Üb¸2ÈËÜäcƒùH°ƒyöFhoáî¤*ñ ößû¼²ŽêúÚ(—fÅZ—f…5G0Ÿ4~¼¬@jp Ô ÂÝÐ*Ò¨Ú4e˜ÖÆÆ Nƒ3Cb ÍÖsn½Í€~¬%ÿ‰S-ç1ŸB¾n¶Ï{ÃëÎåO”uàOªÊ™Õ³M¥ëŸ­–Ãp|S÷nïŒÏªé;©+ ˜GÔµ»gH»¾‡ #~Ú)ké}ÒxzTØ+ìŒcgö쵡1Ø l ¶AlÓOË®ynÑæ%Øo ö ˜·ÒæVh6p·i… 飑NUï 쮌r¡KVº¤Ð £•÷31ì¯FL Zƒ4дP…×;§Á’ü¨&¨ÿF+¨T},N¼¢vÌ]l¦6ú‰ö‰á¤l Ò]ÞȾòæÝÝbTÔnÐ#‡ ¢ ýÓµP*Jçð ž{åèÄ‹Ï(ÁÁÀNãG½–;³ckjŽöˆ3{°ÄÂǼFwX6ØË°Ëg˜ë Ìñ¾ !ÏwB Ô¨÷ÂæàOC\,1Üùh¼«å °6ÊJ•…ºÀ˜´1Mœ­iýIjZ¨ÂŠà­ôɄԂ™z¿‡6ú)–Bd ²é4Ô8÷?´,)õñž+ åÅœ«í$oŒ­ñÿfr×yù}ÿgcåçö?±ºÉ|¨jž,JŽ#º7\²Õô¤»‡•sݺ‚¿.ÆA!B ,Χ‚ ¤ƒÜŽJ:† ìŒø¨ ·¦âÖܲ³G*³óQv‡Ñ†Fv¶Øâ¶|]^bž­0·ÚCzë»-µ;0{¡9À®ò÷HTAÅg!Ï,UXªa!†BKLlýص‚l|ã“®÷£ëp~:XK×½ŸÄy#÷\¸÷Ëf@?Õ2HK2? n†ùƒõRã~hFʲrI%òˆÅcUÎÙzS.Ž{mb;SUsðžSÇSù98S%„!œ5¬U´UÇ¢…µ+ñ‹.è!Ý·,šàæˆþè­ö¡q7¦å­Ùskj¶fG«Œì°ì}’-†uù[¾À.רgËÎÍa7 ;¯¤õ èš ö•ÿ BcRX ÇîÁ!,TXˆÁªÅˆC44WIBKÁØ”sЄ›-ªé¨¬M2?0úi–)ä{ûÝÈÔôèzIÙ˜ðqŒv_ЩÉi‚޹OÆ\£ªyZŒÖ™8¼Éu>)§òîµì)•ªäT9·É|ZGœ öç·qкþNO:M]®Ï‹ÀÍ!Ýí'*g®õóEÔ*ÂB`Ñ€Ý÷- ê[vÛ+(/}°†¹ ¡V · ¾ ~kà­ 7ÒrÇŽÑJ }ÀÊ#ûԺŔϰåº\b®èN¼Šö!Ïøo‚yêöÎÇlÇï}¾}ŠÄv*Ô¥…(V *£±ûÔ¨¦#¨ÃÓ 7<Í=è=³ÐO±Î#8qyŒ­ÇpÝQE͈ÊM_§'èu¢šïƒfz rr}5ÏŸÎ<9´³Çòß}ë=ÚÜp¶SÏžHÇcjZœ÷9·¤uXÜ€ˆ£`#4‡©Ä¯« %ÈtzæJ(¯¡¬Á8ÂÀÛ&þè#܈áË­niÙ²å(=¨=¤=¨mðQ›òS\`Ô&ø£µï«i$äÙŸõF{X7"¾}ŠøÐçBÀŠ`Åøfì˜ÎQE»Þýÿ)ÆžØï±Í€~¢  ù—G¨;É1ªãîHêui¤ Ùºé1¤}GŒ©æ¸÷ýKM}¸œr_']¢žÝ>§§bjùAŠZ²|×O¢›£ÎaM¯¶Õiu®†EëhZhP} ôλœƒ8ê•,@Ö‚\€^ù:f åŠJ°-ð܇Åm ܨòVü¸)7nÅp'ʆ†½l©„*ŒKxì€ÇFQ½Äè%Z\ å½,уWÒ]4]€t yn[¨¨[éaÝ¿y=€´Ÿú ±Ô~9ªê9Ð.Ú è§Øˆ*~”Ë#«3¥'õH^´©¥sŠw ®©Z½O1OAnlÿ#Ï”nf ÄSn‡Bylù!v¢žéáœ*éFú±[ÞÔÃJâ@[Ç¡qp„g•cûuàë`ïWûƒôt z æ Ìm€ôÆ»DʽPTpý ^¿v¢¼ÁðV o1Üb¸Ãp'–-–†ƒì¨ùȃZÒAd¤Ã€²Æ®1v%º^ Ç ¦+ÁÔ~Úk´Þ}Ó8áÏ…ômSZ‘®}J“@Úˆø~±%Œª•õä{Ûûk3 Ÿ`S>QÕ]eÆ?¦ùÙ6Ï*ê4/©7©qîv?Qâ)´G<¦¦µÃ3ÛN³ó‡ÂÉ©HŽó)P~4¼S—GënX×ëDqbpâ#ŸN¨ZØ쿽eõ–Õ Ú¶‘ÑÕ5G´¨ÑKA¯À\GHƒn@·tŠÚ”Õ Ãõ¥áÎzHßHé¶v;i©ØáŸu§¨5ªë ª•jV>Ùº,ÐZ¼ŠŽJºñc †@ ßw’ó.‡ãNÃ[‘.ìÙŠ'4hÒ7¶Ȭ S›ýHëÀ9¡ G}ËduÂzPåJ;/ƒió™Þ„Ϊ㱠7,lZÆazvGé!eŠ}L/œ¾€ø1ñ}åéAæ*º‰S<œ[H‡“ÂKb-‘¶ÀII+ ²â—|ó¶äµ^¢Z¡R£1íu{´Ù¡õsÜanè›sæ&ih²ÌFÐ"·ûÒ°xf¸¾ð ¾Ëm²ë!mØ‹²§¥–= 4˜°•c2=ø©,Q³Dm‰, ´1ÞÍQ8Ç”„<ã|×û•Ë!Ú¤ˆ'l;Pû{X;çܬ £Í€ž0ç¿þë¿ÎÇÌ÷}ß÷ñ›¿ù›¡€á4üGË€']0N©1h“l'¯OPÍ#Äyj~hþDA Ðûv–WUÈrrúú²‰åOi9uç,‚9wyt\W@[ ZâXKßѾ»DÚk°¯pÇUÃKY³¤ä>ÓF&L³Á¸ ¶Þ`¶[ÌÛcé[Ð[E|(rkЗóÂP^®×† *:@:îÁÈ-ÅQs áÆ»>º±Pª0^÷e ½DuáGã.Jti¤% y–ü`×>åäœe 6áê#¯É¿u›=aú§Ê×¾ö5>õ©OñâÅ‹aa®„'ô½M»³²{£8òúô<òü  Žíã,{Ÿèæs•ŒÁúϲè…t~xç”ô¤%:psˆà\èmCKp „%ÈÇ%Â3×p»ëxS*ÿT/XÈ+ –b1Ru K Œl0îÓÞbª[ÌÍ-f{×Zî|«‰áw~Þ¾°˜g†Åµrµ2ìăz+†Ê^"¤#Š¡–š– N % ÿ*Ch‹,P© Ôˆ3HæîH!í]ËžºŽÖôݬ*C5=º·Ðö•¯|…ŸüÉŸäK_ú¿ôK¿Ä?þã?òÃ?üÃ}…Ôí»9à”2‰©d™ Ò T»úãn.w ÚI½“ül¹ûbj»'v˜e$od¹;•2à‡ÌßW–ï«?FÿèKÓ”ùˆŽøº¤à 8 .|ís+D.À\ášk݆ö™áß¶¬e‘ÊCÉZ¾+¾/ ÃFî‚7ùãn0õ[ÌÍ[t¿A6ŽØ™³l ;vÞôÎO׆ŕájeØŠ†Hhe/ÊÃQüˆÜ~ÀW¨iiÙц!_ =°%ÔòÓ‘‘ÂÈ]X¯ G”têx‘3XÇÖÝ]š=Í€ž°üÁd¿ßðêÕ+Þ¼yÀ¾r|õë¾ì«+åõ•ý/ŸTÕq÷)í¸´n·º5rh竌ÈÖѺñwL•Ÿù‡Ê]ù&Ë™¢~*˜éáüÙ:¥¢Ï½} â;­GAL¯¤].Œ%èVˆ]ûŽž/ya¸Û|ãXPPb¤)’ïá9Òú¸ ¾ ño1î-ÒÜÀÝi÷È^ˆ:ËÎÂÖÀV=°·ÞæÊP\.WJl²âÛ*1½adîF„‡ã@‹#ú ŠZºT"ˆXÄXÄÖNN¢é¢¢Ž§³uðµ¯}™ÿò_¾‚onÞNœè÷Ïf@OØ/þâ/òÿãäþá¨ëšŸø‰Ÿ`i…ù¾Èšü—ÆH3áF˜p¶J¶Ë'ÝT™dJºýXwL^f»sQäÖmfbÿƒŸœí#æ/.,#õ¢¤§ ݺì/ÍÏëNˆ ±ßºjŠ>­,\)¼0¸åÃoZ W ”8 œ´xP¿–*f¹ÅÊ –ŒÞ„‘¸oÁm¨øþA ²×ØÛ ªwØÅ…¡¸Pjíb68 RƒR‹ú°A©qìÚdØ4y—‡`Qñ}óùq ц©>ó>Ëü‡Ï"ÿÇþ³“{æ}µÐ¶Z­ø£?ú£ñÂè/ù/í)uU$Ô8ÉËA~¢¨GüévÈò¦Ü+#c Ícê3äŸ*ÊÝ£*:Ùeð`݉ù‰C9 étŸQÁ “?i²<mw²¦‚ôʸ,‘kõÐçûÜ)43JÉÉÌèâpŸ'ûÖéòÏJòiëcú¾Ù[ŸTß»œ6Ÿæ*:F´’ ]Õm#%Ïpc¾ù|(¿*à`Ê@c -h(øÆ·½Âvbi±ÔÔb¨1T”|¯\³âS¨Ü æMH^E‹»ó]Žºl÷ÐVÒ• °Ðî¦Êb©,WJ¥Ê1¸9*QRg†‡´tÉQ‡Ÿ˜æ6ÐAÚúØnL(SPEDÁièr´?mßó§ö{n3 ŸbçÞÃÏ{l]úºÓЖ“¼t1½¡»Ù)h§y91ócHV<”îÛpVvnµs*Y?mñ8? ¤™¨¹‚Ž€NCÁº±‡ ­á}!§Ida ) 5ˆ3@jiŒå›[ꦠ–‚ C…¥ËK…娯ÍkóÜaeÞ5}‡˜Mi³ÙÃîÕÒ•v.}Ð>­ü´X*åBimü(Ô ¨£fî{…VŽÊCX<¨}'¥ÚÝ _a>@:¼YtPN•ôÜN¥³ÐOµ ´S}sœ(â´.#y'ЖÁrWNòƒv^<¶Í¿Ãàµ3ªÿ© gùcpvÙº¼^în8÷<|ŠÊ9ÌnŸi™¦•ÂÔ„:º@0â›2»Ø½fìC³kÉQ‡1ü޾ƒ‹+ bµ`-b š²àÛß¶ÔGÃÛ¥ƒbØ©²1Â+sÁs³faž{mï¼’VèÒæ€ÈöGp•ï'´2Hè_¬å pd¥°TÌR1 eaýà ¥CoCÛO=_[ ê–üÙ±™Êöþyß,%ŒÈ€Ý=gÝÙ è§ØœGè0æ§>6I9Ãú·F )…›®ºÚi^®Ž³c›¤vòŸ(ËÀ9s_ŒÂù(Aš‘å)›¬'§?§SËqÅ ÔÝ€ ¡3 ßï|C+¡™]˜ŠVI·p~H*ß²c‰g Ÿdii–› Žw–ƒ³¡§ Ë^”­õõß她âʬ)Ì.(èÛ0Ý…öàнߧ‘c7µw­Äñ´¢ªÎ‡MY(º´TŠBhÔÃ:ý4áì¿FPû³ìÄŸ¢¸à‰. ¥V¨Ã[GöÌçÞf@?Ö\2=Cޱ–…gýÎ$ù÷¹5ÆòÒõó¼ÓâÓ}Ÿ(wN(˜*ì)µžl:«œæ%¿ã>ïÏàÔÊ4¤Éêçógu|#„a«’óÙù›%Ëè`ípZáÄzÅ,}·p‡ j7`VÈríÁ\Zdaaaaå!íÖ–ýG–oÜö•õ-UÈÛBˆžccà…1<7W\èšÂ\Ù¢šªè}r áQWÈ] "¡3gI] %€ZR±…` ÁY¥uÖ­$ @ÚÈŽñìsãÈ•QA§éÜ•}?môS,uaÜ÷~Î?Íá¼[cÊÕ‘”=Î$°É×yŒùÑ'›€Ë© JUrºÛQ8Ë0ï!§ø“þ[§ª¸­ø+u·høÝ"¦±ÀO64r5 Ö÷À¯bJßÂÐ,{v /–ÈÒÀÒ"+ Ö. \Xšo[Þ¼1z4Çá IDAT¶¦À5Œª²3àCž}—£ÏŒåÚ\±6k s@Ít‡èÞOÍ1(ê£ï3T+hkØ5þÇUA-Ô•‡´ïäYÑBÐB°FpšAš¾ËÕaŠ'©MÎ÷i­Ч6ú)–ƒ0£Ä½®zi~nc*{Jy‡²1fžÍË]1o ̱îÀóezIæ¨BÎÀyJ Òå|SÛwܺËì’†ãWÿp:hM£{µ`Œ‡µ)À¾%¡-À,[²DVÈré!-W® \xf8¾oo…¦*¾ñéAFXÙ¸VË¥±¬u…Õ#jöÈ@Eƒ?¼B4 ôÚÖplðß™s7dŠøT)RPׂXE¬ &Àé?ލé'îg<8H„¤¦2º·ÐOµûüÎIÙƒ|Ñ]þ)ÞÆUvv,<ÎIƉ_{â;ŸþÞä€N@'§yÝ¿¨ôðÍ6;÷˜¿yLEÚÿ×SuŸÍv›q$úÐŒ6"MÆ^4&c£` ‹XëólÏ-r¹€«çg¹6ȵEÞ(öF[awîýÈ%G‚0B¨skêKc¸4kVºÄj…1ÇàÿŽ*:*麵Hu…Û÷À/Ý`„Ú’™F+ˆñ°vœºCqrIFnày0›ý›ñƒÞÅÏÌ5Dy’r¾Ø9ˆÆÜ#Ç9©’÷AtLÁ.‡>™Ê¤“ôè—౓œŸn{™‚ϧqÁ¿sß´ œjD°Jh£°Ó#uhP(&‚Z»y± A‰²R䲄gŠÜZä™Ež+æMˆ¤»ín¶‚«ÂˆßF’È9ñ°Va§°S¸PåB—=¨-ÃP)&(i­A[j×BÕú™vî܈‡v?dJ8 @€tìõ(~HM!ú§“K1¸82+èÎf@?Ö\µŒù?óƒÜaþd$”\ÕÆìTn&›=Y÷4kðNòòß0xpŒü†„¦ùvF÷0ÍOa˜ÎÁ8UÔ)´ã±?è_{Ú'Ç•l츀n‘8Šˆ Ì* õÀÞé‘J:01q ]ˆ°…0.\ZxV ƒ¾ìsÁ¾•î,¾/è-¸-löàhTzuÞì[{{h¯UXiÉZX­1ZãÃÿ|/ü"]çÎ!ŸËq’»?8¿Üå ¤m–—Â7óCˈÔÍcˆOŽqd¿ùéé€+§ŠycNOÇØtô•\’å#›H÷§é4\çô78ú¡JñnÛR„R¡  ÞiÍÞl¨MP©¦ ©ELÛOm‹ØY}€^ÌU‰y&¡=Ї³½õãêt+´{ؼàíµñÓ¬ÖaºRËR m1Ú Ú5܃¾CãÔá;wvPÑÁÚ‡}'Oªø¦—•ÒO¦ô°N¯CœÎíTz›ýûÏÎ5åöàÌ|²œCŽ6Üàc1‡ã”ºÎ™Ö˃íä’©S°C|r Ùs¨ÓKIþ˜sÅ|çÓŸ3Ø¹Ë sPgÕ; «KZ ÆùÒñØžWQHÆhµƒ'f¡°Ó–n©LCkj05b°aj’©­P=bËç˜õ sU$ô‡ÑT°WºÌÚƒ°=ö ö!Íš#¬ýô(Â^a©†¥šà©( ~èéh¯¤燥Âõ/âüÙjiÅ¿Du›]|U/Ÿ­g6o3 kéã>‡),Í;«žsXæªXHZNŒì—óÊõì:cû?ù÷Ã9WÇ'ÛKòó¨QµœÔƒòˆhîŽ;WeHÇʲóD^jã‚0¤ƒW¢7â¶%BZºÀ‡ÈUèii`cŽì´¡6ÎÁÁTÝTÌ‘£÷Dw˜õ ty…¹X`®­wqô]oø6)1Hã(´8T¾S¢VBãÁ¬=ÊQa%¡MŠ@©ÂB-…Z q¾#¤¨žckÈèîtòœÀº;—2pˆ yyÈsÜÒ'ÈûlyßmôSì)®¸î ^"Æ”óÙu³ãÉlì&?s¦šÇ—óÑY…þí ™æc}†ÿÁ~>Ûg æ˜I˜ó”ŠN7•sª˜}ûÃÃÏŸ›àOd‰‘à&v`ÅatÀÖdÒêIìúB:ÃZáÎ4Ü醣©©ÍÁ7É6¾ÅŸè#,{Œìýè*æ9zñ³ºÀ\”˜kãÇ#Ü ffçU´9xÎkhÙ}¬üõkZ%„5Um’Fƒ§B¡B)êGàÖêÔÕÑCºkØÁr»×§pBb{x%QÒôÿ#‰ëc²3®÷Ôf@?ÕÆà™ËÉ>%Í‹~é´úYcÏrªœs÷Œäÿ\) ƒ¥¾è¾í°e¸¹é“ò€XçÎ€á ¯.îJï‰çÕõ¢.ÝdtqXñýÎQ:¡pAY[JÇ¡F£’apáÝ>Ä)_áNáÖ8îÌ–­VTÁFÕ#z%½ïa]\cŠ+Ìb…^èÁ ±U÷>‰¢‹‘t>`ƒ¶ñíQ$\ƒîêìEøi]!‚ )‚Z:'Cyw7 ßôfK.DŒÃŒ®øöÕ=gmôc-Ñ”#Ú9EÍO†ã%ëå0óUÂär®š»ý$µ\VgÎykÃØâ.Ý_ë1Pw*zD5§k¬î¨¹D´ÅùLIÎKk7„´€uB,€dж ö1С_þ.­SÑ╨wwlÕóz­P×ܱ¥Æ`b¨0r c@³Cc’-Æ^bŠKÌb…Y{P› ¢MTÑGÐJ|ˆsã§´BÝÀ!²Á«jßx°÷¡"2„µñ‰!¬e  PûÚ_Ò,éGAH/ú¬ ;›ý›ºÎA{J=OÖÙϹ‡ÁHÞ½pÙþÎS0†S8»á|Úwò@E@9þ^îªwSʰîYKœÁ¹Í¦éø_çâ<´lr- ŽaIPÑu¯ž­†Né ° Ð…` Æ7q®Uº¨ ¯¢}C’­ ~lWáN”([vÔt>`â‡C‰# îP °6>•Kt] •õpöØy:ØË£èšêð4uÒ7ŒmQº„HÚx0øåï÷o¡ J>lÊ oúºÍvj3 Ÿ`£~ᑌ±nHǤL¾¶ßúsûŸ\N”îéñŽÀ9©{âNʾèÔ´ËÎvdY$™O“ Á™þ–û@˜{#¹•¡O:ZŒÎˆ¿­qýÃE ç(j¯B]ípt¯çiƈ-V`/À6 k¢÷Gï•A³ì;…6ø‘··;©9° nž íÜTݯ~Ø×k¹@Í S,‘e‰6=ªwsÅ7¬¤ï¦: Π…¶…:œßV‡°.¤o‹ÛÔ4’D¶tªzxû%=ÛéYŸÉ|Îf@?Õ2e9éC¾'O¦Ê“z£®x ŒÀø,ÁFÖ9çxœ¹ŠÎós%ígª¹8§ãü¤¤¦ÔùïèþýÃWÂØ;…r!ê·éÊÎa\ˆs^…ë.êÀíNppuاà)U€,@– +ߘÄ\ öE+Ȉõjzß5Ç6¢Ü¡lP¶ÞËÌÃN„=5GÙyPKõÖ~èט֨¬P»Bí-K¤±hmúnªkÐZJÚO¥kÒ:?€U%Ãv(ø¾ŸcËÉ®;=°}†„‡±0hÜ-.|H7œ®à¹øý²дÁ —1/þ(å,ÈcžÒ |t9Ùñè[c/¯3ºat›“*:똋ƒdYgŠNÁ¬!Óeyérª—Éúàat„s#ý§­–¡«#~l[p-˜Ö±ŒjûÍ wÎ7©{eŽñ*Y K•  ±Õߊk(jÐ+ÀBåÛæ.¨ç;Q¶DW‡wdx,h8²§jTzP›:XËå€È•%j–hQ ‹mmé$€:o4Fï 8 º0gK/Å·¤ì®­ô¡‰Bl—"}7­ÉU´%@zt´Ðg¬®k~ög–Ïþóüê¯þj_0¥žÇ¬Sšr^es|§`|ò ýh8O=@Ψè%—ñõT3×½»#…2 óœøŸÇ”s íôeÚÃÓc Á…ÑòúFp1µI}q^)[¨‡4°h¡nõ­ ßrðÖÇ·µ§³(Ð%h)^=¯@.@/èCá¶‚î Ø ¶†ËFx~¥ìÕ+è;<¨£«c‡²¯‹¢¨+´Hí!-‰¢æ(ìUHDˆ] ”haQgÑF{PG@7= Ó(ºÖá|7ÐuÍÃÓ!Àº·ŽäZÇ@ %¾E\Gßu¼‚3 £Í€>c¿ó;¿ÃÏÿüÏóÑG Æ€Èù¼® WÂ#*º+ÏA>ㆃÝSÒcp†Q8à›îgÄÅ1p7º°ÐÿÓÆyjõAKž—åÃp>·.jƒèâZç|ë:†€nÜÔHï[¨jÊqyp”ß÷Ï‚¾6tTx8[AJ¼{c º]{­w‚nð)´þ3;(v {¥¼R.Vʳ«çMâæØ&žæCÐË~ämGEMËG‹†af•#Â1¨iß*ѯ¹DY ,-JÄX´°ˆ3HèWC¢«cªá þ¤Æ·Ž6¹=œeØ.…ô-HúowoHr-g8§6zÂþú¯ÿš×¯_ó™Ï|fèô•?WÑS° ¾ÏêÞ×yôQe<ö˜RÒcpN·®7æÖ€¡»'uq$ª+&Õþp"˜Óå1(Çѳ»e†ªzÔ¢»"Â99 ?Ø©WÓ5ÔµK#„Ô´‡ÔÛºe³wØ7ûÿ8øç5E}s¶;"ÑÑQß;œ–­WÑQA_Þ^½³d«ÈAž̵Á^Ö+Ãuá]Ûàòð*Ú»^hQ*”J ¦¡•‡HM“[`‹–iJDBÂ"Æ"… °¦swüÒdj:Þ Nvt…Än8½kDCÙäÃxæóÀf@OØ_üÅ_°Ýnùó?ÿsþõ_ÿ•_ø…_àÓŸþ4ûÆñ•oU ðz­¼^›Áz÷Æ&§0—GꟵ¯TiçJz*Ì/ÜonöJ•ó”{£[Nòs0ëÈO¡|VQOüþd×þƒ—ôþfh¡ÆQ !~ 3818ñ#n;üèÚûƲùoKÜÿ}ÉÖ+ì¬ ø¾“ÅUh[¡îˆ6{´9 ‡#z»÷JúôR<¤ïèÔ4…"w>Ú\+æJ).•ÕJ¹. CŠŸ£#~2¬Qêð›Z*œì¯Œ®º5D!@~D()<¨ÃHãb âtèîé†ãÄ}<¼Mºµi^þЯ~õË|õk_F€7oߎ]Ù÷Òf@OØoÿöo^Iÿíßþ-Ÿþô§XáG_=aÚ-‰R(õKçu³å“þ2Æ~@ž9¡æO€'TóƒTtê`ѡɎÇ´Ò«¬1_ô@esÚZ1ÿÙ½‚´Â±Z)ðƒ¼.À…/}fæ’FŸsËŠÿ.Èš+J Qî\Ç>’Âí1ím·èí³ÝcnjÌ­øéî¹U$š»ÐreãG‚•+Cqi°†åZ©Kõ£zcØKâiîT´ŸÖ¢aÄmGC‹“£WÕÔB¯®E*¤SÒ…‡4…4>!‘j´SÓ'-»]z¿ôŸÓûÉ_Ãð=@z´ ×ð3?úY~äG?‹ü§ÿýÏF®äûi3 ï±Ï}îs|îsŸ;ÉÒHf&T¯dågÕó¹å¨d±¾ ƒAY~¼ñøb}—ÕKA=¦¢ó½ŒêÆõ›8à)0Ozêw'?açèšÐ¼¹Z ̱ [ƒ¹@Ü5¸W ×`…7KÃ?mJ²Ä²`…„}¼…ʾӼF¶·A› ºÝ¢‡-æöˆ¹ÅCyg0˜ ì lÙh_)r©è¥Á\(åÊpQz(÷þhIµqPÒ>yPKhÚÞà8â<}­ÜetœÚ^Mc@ ‚ñ#ÀXû{I†oHéý^†÷mú‚§qðyaü·n3 k©bŒ–½þ÷Ùp¨¥°>§¢`÷Áº³‘>•aê•4¨=œ‰ó1dõÇ:¯…S%ß''×%¿×dX4º·ÐO°±Ž‚&axÀ÷ù–%[xL_§°–aY®¤'tœŸryœø"GÀœ+jM#2¸ƒ³ •óI«ÃêiþØÉˆ% ¬8 Î,C–¸6Äǵ—ˆ^A{‰3¥ÖWÊÝÎò­Ê²CȰ”¼ÄH¢—=”c/t† FB»Ù@µ‡°¯‘0>•ø1ª:5Í6ÀzkâƒÈÊ kÅ,•åRi ÿ°WÒ©ŠîÝÒJ}Û_¾äå‘áíûìó`n À:´ôg^‚û£›† —Ý£÷Õ™ë5›·ÐO±1(æÀ‹Üˆå«'—‡e¥©’Î2'þèÕ1åâ(j93Ãù±ƒÑºæÚ °£ŽÀ¾¯bj.l?‡t+ÐÒH‰èÚ%N×ÞÕÑ.‘²ð=Ü_+»[ÃGµeA ÖGÁ\°¡ºMpulÑݬ²Adƒèt‡Èš¼=À¡Nº¼ë“eí§‚¬Å/¯VJ±TŠ…âJñ}~ô^æ³ "X† vaÙß– 74Á/ã^¬Ïë:XõÉC:¨éàUö– ´“«‘ú›™Ÿ¸Þw›ýT{ˆzNLâŸüõ.ËŸœ¿oÛg–§ÊR%-ŠzT-ÇùP6ÌóÈ|÷qBAw0NTr禠W;õZG;¶Ùî'ÄCs.´È Cn!í_íq%â‚OÚ-`iáÂZ6–]eøè`)(ÐðQ͉Åaq¼–+¼LúrŽ‘Í1ú.´\Ù!º= îw¤jà¨È!Žk`'ókEv +A–Š,”EH­ÕO³wyhtŸ\–¼µx/½Kµ k-Òñ*ôIï4Þ_-¯‘ ßsaÀl©Í€~¬9ɦÔs–b€Ÿ\~Àá^ׯ˜%%É;Q×!\"±o‹Âh Î-ƒ‰B¢¢3õœFyD(ÇÓèד¤ÇTtÜDWæ'í“mŽîúªƒU‰@³34ÃíKQhø˜'†ÖÇwаä5ÏB/t» ž·H³JLÒÜÄΜÀvGh›0>•tCŸÈ!QÕ~ôW?]ŠWø ŸÌB0…°,…Æh¢¤…F%- ¤%BšÔñ 4á|ÆwŸ¤›z%-ÑÍ‘¨éþJ%WGâ])É“:ÙÝLéÎf@?Åž¢žóåèh}¤=ɵw¢Ua„¯À¸ŠNÕõÈ$À=…ó9MPÑ9¤]:ßo²k²»:ÒÖjÀ‰}@ äé¹êÇè„î^hÔÀº€Ë X÷ކª±¼¹±HÛ‡¤µZ €Cá5W¼â%ÊÞ&¨·] ´„‘_E}Oûâ;sFôTȱ‚› 9Ò ¦rP8„é*À{©ý(µ B0¥‡õ¢0úxêêÎG8GXUµ¤=ñ{ITÕÝÕ`¨¢»¯'iØ~0ln©2°ÐO±T çêù¡¡W•Évà±Mžg-нuʨ; §ÊyLEÁ9ÆÍ=ÎñXÒÿýx XÁçý;$nÎ1o ¤OÎÓë¡Pú¬"m{ñî†J‘Æ@k9:Ë›;i‡¡ n¤+1ÔX*±¼’g\é˜kTW‡ÙwGåRE*hkØ6>ì$L0Bû ^MYˆWÔ õãW•‚” VÑB0…‚ êY†®ŽÔm8K.œ£á4=o.¨dשgI@Ý1H†Óï;~;3£;›ýXK}¯cå9°§–óm>@M?J='Ã#©åÑýåÎÝxl$*ú‰pî>4JVw•üŸF0G3YY´fóšÏ‡Í 0¢¬ÓyÏçp`]Œ˜Â•EŽê‡Én ÒzßõQ,o,màŒ%Œ‡B…WÑG”½çÆp­×\˜KÄl}RïêiÑDEk¦5¢¾qºp¡ãænˆîj Ãu ²?vU€4¥¤cXa¬O±¿ÐøÑ´ÿp8–âI’“[xx"³­ˆ†ùôŸ!ºAz03˜Ÿ f@?Íâýó ï%Ig ¦G×YNáˆaü“ÅXÄZjky{c©+۩磎˜.#¶A ¹4†K½d­kT¨‚ŠÞ'*úˆh•@º Ç’ký¸U{ß5ª¶[< â]‹°\ ”x8WÐôC¤ãíŸh‚¡u¹_:^ƒþBõ°Î/à”E׈d©ßÚl3 ŸfS®ŠôMí© 8‹'yµ1µo4"j˜#õ;çpÎÜ“®Ž’¾-HRé\$Ó±ÿùè‹î`-iW—þU½ ˹‚îF¨q¸¨”S0wƒ÷0ê1-]ü¯D8ÄX°) mi¹}k¨†cë]GGãGöÞ ‘r~4•ú¶(j¸Ð5+]côˆê±su Ç ¤+êpl¢a8”nH”ð‡'ÃvW}ê•4=œÓŸdáêÀgäO|w Ö~z?bó»óÔË=Û èÇ[ÿŽçíœz΀=Yž[fRmô8rXŸyCËuúqÊÝ‘Á9†ß¥Û<Ùö-Á1»¢ì~פS÷F\޽չ~×&ŠÚПW'ËV GCÓC9MAµz{ðËÅ ÑT9( J ¥"KÃþ­¡Ù޵R…c+#^I«‡tÚªû2€z­ÂZ¬t‰ÕÓ©gß](©’I´¥dP“îæ¬}ÛAâãµxÿu‚t®úiú‹#ÂFEžtÒ‘"8×_hñå6òïsrÿÌæmôSmJ='‹yñ½ÀÎ×îä ìèFêuMÓ¥W®]Ê>J¦¦s8K衽ˋó¹JÎÕô¤‚–7ðà“ã`O|ÓÒûL#¬M˜·„±ò‡júy+Ðæ`–$‚ñ¤=R¬Á.{8@Ki`a…ñþߥRß(wwþ·ÖxÏC Àð.0·ö#|_t†¥XVj)Åa´Fµö=Ðuª>ñGKÄ7í‡D‘´Ë9Gl{2T׃‘`‡Sïê 6ì§©C?L5»Ÿºð<×ßt§·ü˜¨ypÔ{a3 Ÿ`êŸù!Ûû¤ecÊ9ò˜Ë£›Oa9¦žCÎ ˜»ˆq{™¢ð5SÐZ˜tûN¦ùzä‡z.dv³:X÷ómæºN­HèZZZ álR%J5†º‚Oxº…r%” œËg+ƒ¬ z!˜Pmávïf¥B•BZ³–ÝÒ«êUHKUR²Ð…6¨6¨D0G—Gï“–AçÍ-§O¿äšvÀVÿñ³Õ~ïè#6Mý5ìÇ1Ë®kwK&7³ÔŸ=º·еÔÅ”âà™AÄ ëìòhY ݶyY·^rƒ'å÷ÝìƒòIÙC™•ÂÚÃYÖŠ^‚nÀlAvpØ«ü1U*!Œ9q{èp¤ïµÂJ$rñ¡Íb)ÅRÊ£-F}GýðÜá£f§¦Û%-P‡ÕIl,èON7Ø $]oEÝ}‰•Ó0™Ø¬sœÑ%énˆ‘e|ñ½·ÐO±{Ü“y#ö˜rTç°žðCKR6ææ˜uêò|(dà{>QÓcÓg’ÿÓTiEuò §pŽnœA—ä·¤îX“t_öÔ¤4´zÄwØÓ=¢h Z€)ý² óe‹–I”³¬½s'øÖÜZt r€ÃÁƒºÕ´ø´RÖ¼”¾í‰OB)†¶–ÿÁ IDATR,…‚‘•‘¶¶äÃt“ø§ƒªî`_¤î2øè•®#™pyôñÔýq’Òk>jK¼¾ù7ž÷Üf@?ÅàGþNØ g'”tÚ¤;}¥L}σõòí'ÑNƒ~¢»H9ýPع=’mMA:ùä%PFOR`k¯¤ç’N·;h'’ºŸ6š*jÇA81 ~È'´€dêál½ÿÙX0YÚN=³Vd-ý`±bŸH¾Áàô p„ãQpµo±Wejz¨ª£«#@ZN›)Ä„F*-*îÔÝZü \¤výyÜ/Ú''¸ÿb›~@îà›Ý{ñÞJ›urZÿä¾môc-{ÂßëÞ¼þ´–=ô¦Í”ó¨›#<ÿ0˜.¤n‡èwŽë¤qÑq:¢¤O";âq$¯·’o+î3…t¨cºIÐ@Ÿ’õ‡"_˜²$ŠÀNUkâþЖJŽø†"&À9Û8›>ŠCÃ|¡þáº@.]ƒYƒÙøau º“a”ÐþD*¨* ö§,„.wŠú pá °é•ô(¤¡ÁŠPˆbEBÌw„uTÌ#¾iÚpþâú/Ø´ãWÂøQPŇ|¦Ñc‚!sTï³u6ú)v.Nèö(X§ÀM£2â?J ñ)·GÌKTkšN>&¯ªPsMàäØ~êxœô˃úù1HK÷)ˆr èlÝîŸ<~’<¤{Uxw‡w¹:œÖÔºUPETŒ“e£Á+}¿Jd©èr‰YY?PìF¼:ªçWÏQEûo‘¢æ„¶†c#>:N÷GH«n^B_Hâ!­’AºOþ©!¶èönãkH€¨éN]Çó–|XìnÎþ†—Ü 1̦:G×bRE‚ÿ§‹6ú©öÿãM4øÿ8÷ñp¤<}U=ø”!QÑrêSL]ù4;”\9÷°>…s Ôœ[ñ ÏÊ\=–G¢Bºã•c~©ÉÇ]«WÓ¨c¯Gê.ÞWC @>ù0“C´A—×h±B—¥ws¬ƒzžè ©û6™„6»êF8´áÛ ûDòjzØi])]çu>©ô-º ±ßøV•q+#Òµ¨Ô œejSéâ#Ä“«¼¿†ó.˪R¨Ï€Ø èÇZ|}êaLÙÆzÂxùÈT&òGëçÃþãG¾TIŸQÑ2ö•ET â Ãrî– ›æYéþÇÊFMêF†àVŸ:FŽÀ9MéGª®<ÍÓä!”Àö }ãðQLÔuy¢Þ׫aÄl5—èê-èªè|кnŽƒ„è= íN¤k¢!b.6tP· N:XÇ.¢c§uqþ(Ò©èØš;ërã´ Ôš„6{u=ì®5vsn2Q7‡sz7Ì6zÂþò/ÿ’?þã?¦®k>ýéOó¿ñ}áŸðçn³“²û`=V7ZÚ¥ÁԇĩmL$q2\wÐ;•œº4ÿÇñcö›ÓC;n¿ñë ”tH*Áë }ªƒœN‚*C€8KÚD=P+8uÈ>‰q >„-6·V©QñƒM)T¨½@í-Kô¢@÷ =t“E¥?M¢æ46lÁ9ßÛh¼÷b$Ê1tà|”“Îë-¹“ȹd«ä\‰œ>Ó[ e0}„ÉÉL6?Û è û¾À¾ð¾øÅ/žz œO±{¶#I½A„F¢Þ%ÙÎPagÛΠœï6Bµ³1õ|†¶9œÇþýÎp߯@÷•*i•ð ¯ЇUdíááÜ-w –ÞƒÑ{2’z^IWêp&À9€¹#gˆCV ê™#*‡ØÁ(*{´X£Å )K´  >ú»AëíÎÍ!}Á%w뤃u 4N¨Â9iµïÌ®¨€R¤ëÉ@ŒÅû§¶æ>i0®‡ “.Š®ë$T2=Þ¬'vNqÏPž²Ð÷ØüÁðs?÷s}FtÁ}¿8?êöSÖçüÒcPÎó’ye”wõ£Ú‹æpô~ìÁƒäô7¤e8á,MrÙ±F¬f¨œk‚6…óÜâ¿õe`6Úç[«ŽVÅѦ…þ™Eú‘ÿ:@sD8x8³Ge‡°Fí •%jK´-ÑZÑcPÍÇàÞnßPPú6'I8³—Gê.vøg™•H×Τ־O¤0W§¨cŸ$Ô˜%ë‚cxé`' î–ã5JîŸìOýÓ ø3°£Í€>c¿û»¿Ëb±à—ù—»¼Cûÿ²÷.±’,g¹öóEfU­ªuíËÞ†#ŒsÛö#@b„a€ ¤ÍÄ–ŽA ! $.bÂ,%.s›X€d$0“Α-l$ÆS˜ Ø›#d,1ø9{ïî^—ZU•ñýƒˆÈ¸ddU­ÕÍtW´¢32òRµ2³žzë/"”·ž­„ÇSÃãYTÔèŽõ­JÊ}¶©ìPç‘ìê2g nÌ)¬Ó7œ¾njm$ É&—-þæÚéwLx¿µAã‚*è|¹ ° § #x"„{/Ö@›ÀÙeI ½áÖX:Ó¡²é‡ÿÙ`ÄMËjX{›c…‘•³:X"PÏŽ0ÍigÈd†™MÜ”YÓ7öÄNäÎ@í32¶M%›ž¨ÑÙÛ™7M¡¤¥°è%4ñ¾ Ý0É¿Àûm±"}¿o½ýoýË[2á…¶8@.!ÖׇÖïA£![ô(¨‰@¨çði,»e‡×4ÔÕs²É«û¿Ik`”“½•þ­I¶Î$u#Ò”Bx#9˜[¡]ޏ91.»²²4–¥Ü²2®×¡ÈÚ+çΫ砠oýr‰H„´0Ç0Gäà #GH{„aŠ™N¨µíÇ@2)¨;\4K é¢c T®g©%i¦ð×ÁÇKß{»ehi@: ŒÉ}j¹„tvýÊo|˜7Þø0ü¿ÿó¯†Ä+š€IûØÇøØÇ>6¾Ã]À¼EËØö»xÜ[l)Ökà~j`‡Æ¿Ú¾á5¤ƒzî§æftœè4 @7U×}Ö-—Áo}$Z÷W³ì$ /TqXwÊy¬ãò$Ä›0kTXW–fíX::Œt= Å7ŠWÑâa-,0r‹pãSÒ"3Ÿe†i¦ˆL‘ÖMB+¶Å¨É!ùÒîz…_5Ã1‘û!+ç÷/À›n'nÄ÷¸$·>J«#…s¦ªG¯²œ>FiÝ!¹tô}Ò󍿢±¯zn©¬ïZ&©î—ì+ÅúÖOTE¥BÖz¥`œ†ý¥åšÍ‘*hÍ÷Ͷõ9Âf‘0([µƒ´d°Žg.ê!@:„«­Lè¥'L‹9>2âæŽeEdž”®à8‹‡3·8›cî—7Ž0y8û%S Ò2AÌa‚LD[„:WÒÞ›Î!=¼Æ$×/\Øܵ§¬Ä‹l%±9 `[¶@:}†å°|‘?H_†tô=’hBÄ=žªQpM÷“Ú~[–è`Î":FÔuÚ oÛ2~€4a)Æ ´³¡L|›é×Q\Ï<*Y %8ØG!Êí$ÔF® ãÕO$D;Héµ8 ¯%v ™×{ïȸÁ‹úÎ"kV(6tÜ`=¨…5â ãÒgY"T´!UÑS„©_Ÿ¸²xHKërã@-êgvñ}ÕKPg_p‰õQv êÑ0vß6žÀ< b—FuTA@ZÓreyH.}×T(;xÈ»Î[³êE—þsMIW`´ó¢ s§œ{PÏ’åÌ:ÍÐ~Ia-Ö$qŇâõ×(Ħg×*>&ý=(nmù—a•aMëŠ}²>'I]弓£÷*¥ ï“öýŠßñÔíõ@n±2v)ëì>DµOÅ´÷XöÇï9YÏ–%¤ýèx’NÏ ’xÚ1Kô[Ó·*Ääü¡ÎˆÐ¶N%oHÆ£—8¿ji—a ¿U¿WFX‹é!½IòèP¬¬éP”5â-ޏô4GÞÞX怖i_&4DHCë—Mj?Ë8> %kÖKÂò(îCrÓ4ðþ ¡Ð˜nëá+ùþR?&¤ô± ë‡äÒÐ÷IÏñ¬W3…«¼îXº“€¸´Dã,—™b=ù ›)ð×døÉTE÷pHꨓ}zë#€$¦¿N6¾ÎÀ{­ä˜Nœ‡ºñQ™¢6^Q÷ÐŽj:[20¯E"¤Eè0lpÖºlQÖXdåÁ|Ý+èèCç €öKB:”‘&u(_N@qíדç'}®·<ã’üß?3•GrPq×õC:úÎ)}Ó¯ý}ŽÛóìVw²DjÔ”t ibY’ræ8Kúº°{øÂH–±œ®Å‚»¯'SÞýy‚×Ú&ðNËåHš~‚BQúùTÛ)Ìš8«SéèW§öG°CÖ”sà³ oÛŸ¬½: ÞôŒèMϲLbuDõ<Å9¨êÔ}D3y×gHȦAhü—ráßÐitMö<&ŶTªèÚþé\š‡”§ ï“î  ³GoL!o)çqÎ’××õ˜’&ùì…76PÑ•mÉq£êZˆö†=è´\QÎý$iJºWâÞSmÈ`·ÂΤQ iÃYõ  Íd¦¿¯¬°s…½ÌڃY@'K‹†(þ ~Êmr`'*š)øFCË#…t¯ PKíZî ª¥¯scŸøeñóH’߫璼úü>ryÊC:úΩW}a½Ü¾ïyÊŠ{À;ð>ÛÒ}Æ`Mär{m߲ɾ°WD(”s\/­‰ÎƃµT†& i’rºôc+‹÷Òâ°n:hg`š8pPÓ9°ƒª6Ì’ÀÙC9UÐÎÆÁYR@û,å,×d ¨?Ó ˜ rKÞhè¢;è-RQ§J:ÀÚ—%¨éë ¬ËçÔËîïÉÃ"%ªĽo:ú>)Þ}-Ëûî·Ä}CÏ68—ê;ì_v¹-ý Ž)ðî¦Ø–Y!dÉr¢žø ÛJäÆ)Ì»dé}¼ã‡ób:3éAÔuUÅ}Ÿt0ïúÝWókÇ‹ºŒ0øŒô;}ŸiFa-é1-ù~þ³œEŒ¤Â*@ZZµ\(iéð3LÓÏhÒ+éédBr›”7n[÷"Mάa:™ùKé!í¼èT1‡†ÁÍ{ÃM^Ö¨‡ß˜’‹MˆûNÿÇëòÇe€w¯IH‡ Î]zLRÔ¥ªº,¹ëü¯=œñ+뀾{*[»ïúGp_oÛ”iZ?¦ ku5U¼É­6ɶ±¬•ºà9'îÃíYíÜÊú§ `î\o;6Ì~8·Îi^Sâ`ESÜèr+§¨›©«³Ð)¹µAôœcôF gFTtjw„Û/”»t9¤Ý½ÎkKLæÀƒz˜7¾ 3m£Ì55ìØ¥’®©êòõ¾?'_Ýtô}ÒÅ| ¸Å¶PÎ7ìg©»²,A½¯8Ø•rér„RX©ÝÑïop C¤ :@º!ÂÙ/ÀøLpƒ%O€‰¸m+¤W‚LCäVúéIÌDhZaê'ûëLngD{ƒLEÇ6ÌDI±Á0÷¦ÇoŽøRø—l‘X+À]6÷Iðð5/+¦÷£­?>t‚I}jÉÊøý ‹{ƒz׃{H@ß7=¯Í±«.1Ä(‰ôµkâ£fkÔ ¼Ô[1 2’kJ[R8—£í íÐÜÄ}9,“œBZ6ô–¬¬}]°@&DHO\L}y â'ú“dZi…¶u`d"hã}îD2(§jÚ*C/:tΈªº¼±œÿ_À:Í·×rê.çYzpÇl{€Kœ¿.”èS—ï&ÔiòŠe#É>‡ÒÐwMw°8JþVϵÒÙ‰v€¹ß¶¥,éñwulV'Ca,‹dÿ¤ƒŽ”Wþ‚. Ý{ÖÞ&ÍàÔt˜$QÖ¾‡[QiN%ûö´ Ø“XîG¹ïÇ!MÏ!ý¹›ÚðÆAÛ 4ä—8ÇøèkH -)¬‡ &såÖ$u¹5"E}ýûvnŠõÚ9ûç$Û¾ý·þ¯ÞãóÊ¥ ï“ž7zcW}Íâ ©Ûâû‚:-WDM­Ëxà¡l‹í¦rleI³¡·Aâ:QEûÉdKËTzH!”i<ˆ~þ'¢OÊÊ’Á8l—LIgåÁ‚Ð$#á‹_ª‡¶"¨Ib£ýM‰À&A´EÒǰÄný¶fõ¡çèȭݧ<^—Ÿ»Ü¿¬+ˇÓK èÛÛ[þüÏÿœ¿ù›¿áòò’ïú®ïâãÿ8øÀžÿä/úWؤ)ê·ØRµÔöMß»$ç}?Aa÷=>µýëƒýgÇ•9í#Qk‹2I}âO÷ˆ Ö®N2•ºªô – ÚRdbnʲÄA¨³Y¥‡3›†+B0â”?¾·<¤¦¤£Q€Tž\Üü‘ʧC(·ú­î_޳Qß§~Þû¬¿êé¥ô/þâ/òÃ?üÃ|úÓŸæèèˆþçæ3Ÿù ?ò#?Â÷|Ï÷ÜÿÄ[,Ž×¶_q5 ÕÝùFöù4&åV)÷ÙcÙCyà£!};`*í¾<Œ42¦é˜%¬Ó¾’”{ gÖHáA9?W„u²îíÉÞcµq4ù[Ãß/àƒa@ûk›¶[$÷µöÐTKßö¢À»Ï¹_åôÒú÷~ï÷¸¹¹a>Ÿðá˜_ýÕ_}1'÷€¬>H{Ä=¼eû”kõeÝ®õ´X—R[몑~YSÚwmdìu í«b2wµ+yRîjJ=ë&¹÷”SϹ謗¨èÈ^‘×àÜRsí ° QUg£ã§eœ"÷÷0‚FŠõ¢\Þ×íUÙóSB£þKH÷I/- ¾íÛ¾?þã?æðùä'?ɯýÚ¯½˜¿‹ãy@ž~AŒÁ:l«Õí»^Ùv/ˆïét{“m냛RÅ™¼Ö!&µG$wá U\Ö¥ðM©†Ko†Ë²ìA­åß$ŲøõQk¤×Ý·Ñ÷FªÝ#ÉëÃŽÙ}÷PÞ%BÊúCûàhz©ý?þÇÿà¯ÿú¯ùú׿þâNºOǾœ&»í¿ °Û¶—J`—uû|_@'ËmÊ;ƒqZÊEÃcþÓŸ R…Ù;…Y©¸SP–j9³/¤PÕ%¼9³=’m}J²ôzç†ؾ>ÍX§uÅöDa»h8¡¼þÕûR»o»êByÐBõÚÄ·¯jz©Ý4 ¿ù›¿ÉoýÖoñgögÿwô]UÁ._yìµw;ÝgÛ¶»Öm¸Û²Í{Â{çʶ­ ‚0Í)”jª³€yK*Àeol“ºŠÞÖ©¯–kê:ñ³kñâƒ,þ˜òz”Ë}2•ò¶:FÊcK‡¼ä€þùŸÿy~é—~‰|ä#w:öúúšŸú©ŸâììŒð¿ñqã¾Ñ}ºí Òmïe߇~Ûû{ðÞ±Ï(€Ëã$VT=ìrßð®åÇ]@ZjVÅ>ê9)÷á}¥½qghKÞЙY!w„vÍ&éËRù‚Ûã:o»7ÛÇBEéåô¯þê¯òñœGðßñ|ö³Ÿå7Þ໿û»wÿ¹Ï}ŽýÑåÇüÇù™Ÿùþíßþoþæo¾SG`e|—ó¤é®àÞ÷ø=öh}×9w\Šª1¸|èÓãDÊ“1™r=µ;vå®c‰»ê’FÆ1È»/ "¤Ëñù·ùÙ%ÈÇ ½º[s ïuÙ™ðàEÒK èŸüÉŸäÓŸþ4ÿôOÿ„µ–‹‹ ~â'~b/8|ýë_ç~àøÀ>À¿ÿû¿;@ÃKô ¿ç§!û{‹c*üÛzÞ1¨g‡Ö_cü“•¬|mÿ‚àýa’ÍšÆecb¹–Ûš¶¨k]N×ËúÁ²)–ÅöìõÌ–œ¾o“—;ãÊÁ³nį{“>+K})ãû²L’“kšªå±{W]µÓK èoú¦oâSŸúÔ½ÿûßÏ×¾ö5¾ïû¾¯}ík¼ÿýï`©Ê[ë ¯Ãã¦Ùÿ¤Ï3æ¨R~Þú¹$tïüs÷:󦻤chô›£e]EfW<’Ћ¯Ï=„——ÚÆºAnór³:ɾޗ5© ±yY@vÍ+ Ù$å¤.•ÒYˆJ"£Å‡ƒØD6›”ÕËdõûhr¶ôZ¦Æ‡Öõ'nóË·ÞúÞú—·áÉ“'’K/- ~çw~‡/~ñ‹€SHŸÿüç÷>öÍ7ßä§ú§ù»¿û;...zõ|$†M¦îœ{éE)‚»žgßý·í·¤€ö:í£‚¶íS–ÝzßcndŸ¸=ß' áãÞc>eSž šÕUMè-ẏØâOdÝ‹¬)¼Ç³Ò :jB¬¹ì®eíÚ@ýzn+§Ë¼îCo|ˆ}èÃüåÿú+É¥—ÐÿøÿȾð…{»X,øÓ?ýÓ‘­/~/ê¸çPÀ£Ûž°ûnKaº«>ÙÖ«°10l˃°l©ƒúMEuSHíè:ŒÝ9Jõ¼O.Le5•ú¼ÛZ÷rPÁc_ncÞÊcÛkë¯nz©ýá˜/}éKœ!"Ï×Å;KÏ ÅçÙ×~/ÆwQ¾.•ЃðöeM%— 9@…¤ëã~€ú^%´bV”PwPÉÚ ¤“µ&®‚¸úXK_ ࢬ%p›âZl Ñ(rz-w} ÖîÛ®º²¼Ïú«^j@ùË_æwÞa6só½@§è¶}öK^÷=×n o÷‡ï¯~÷¯«««:¸‡9ò¶}L¿¬©Fí³ ÕŸÿ ZBRkP®yÍÁšØ,½ Öj’í9|êSÆÞV¿=xÅåR¸V©‡ŒI¼ü°ÆGÂz^øÖ뵨ÓÑã^½ôRúÛ¿ýÛùõ_ÿõÿ‚3¿@¿hðŽó"ò¸:®ï·û>´0öp„NXWÒÉMS»"Ô7=˜£"Ž*9‚9÷w‡p `n‡ÐÎêJÕ\Ú&?ŽæŠ:Þâ¿„ÆTñ®/9@]{BÞ¨WÜãdŒ>l¹Œ)ì*÷ÇìÈcé¥ô—¿üe>úÑöÇïÿþï¿ 3’jÍ‹Ù~—úû©ä\Íï à1 #Ý–×ïç},‹cUƒH ãPñq=Œµ/'^1­³+´Þ³¦~rY.@­¾!¯juÔ ì–µÜGQ$³æ “NåJ4À7½£c*x ©c þê+Ÿ)>ûJ‡CÊÓK èO}êSüØýØÁ™Ó‡^Ãò0Tn—rÞ­šë°6lWÎc0WÌ)„¬ãzP¯N•ªD5«‰BvÀžø}&~ûăÚO©’B™±œøÏÚÀœFoXÕ0cŠAÕ…ªj¿­_÷ªTÆZúV’Þ®’Ô¥ƒݵ¬.éØ×«û¯¿“ýós?xzyoO/- ¿ÿû¿ÿ¿ðì/ Âcõ/ZËCµ?®‘†ñÈû¨çm%ƒBŒ vþfú–ÀºÂ(ìogD86C fmq8ŒÛ¤< 2A4Ÿ÷JµuuÊÞÎÐI:( ª‚õàµàÊø:\û2±.,I–}ÒÊïM\‚¹rÇh‡®ô¶»Uë88&ìãßâ®'&uA½¼ëé¥ô]J·±í.íî]·«î¾ ~1`.—µØä±Ž åÇ¿ÖH•B¹¦”ó²ñQ)Ó9ú̪ ")œS0‡u[&(“¢ûB çÆÅø/½Ö=áªõ²ÑñcL9¬Fe˜r›SÜðKÞþ: ¦Ëëéè{§±'ê> ®ÕIx±cï áZݶe^Î?‚é>õ\‡³!WÛc`F3¤A!§ª9…s°3„ÓÆÎÆÎSðKÕ)¢T'^-;åÜ©¡:ãNé—Vaƒ[Úbéà¬N1ûè §šÝ]Ó¾Ù’fIËÈÆß&ŠÑúU.!=¨3Ä᥅l˜Ž°­t¥öí?T…rí=¤ ï—¶}åßÐn½ÞÐ8îÚž–cݾEê>ñ®õÂcåðIŽª»&–«eÕœZN)× ÝV–-,‹Þ[žôuA)«NQ pž¡:™‚N±jèTØô:…‡rXïðjÙƒÚªzuíêÔÃ:³24.ýMÈ–ÁºèÕje£Š¨ ËÆï×_Y_îÇG2`š$Ÿý%6!¬: "‘$ÌZãíìßÈΩ̶=~cu¯xAZìd IDAT:úΩ|âjÛëuu°–ëûn«}×Ó>þ)öþ3°M-ïßè—À™¡QÂ8‡ò0f9UÏTàŒ¶¨´~=@9*瘧½Ë3”–––5 † °Æy£š@Z{H;Ed¤s0‡õÞgÿU ` ¼ájêPýpÃK7¸õ|6Þ‚Ï&0Ä “2&ù®Ô ŒÇ‚kRe,þ½îæmåCêÓÐ÷Jwô.õ<¦ˆ‡ûm/×ëêÏÕrT´aÛȱcH8_êćÎÕ³Éö-£2´âzÆ.»ãZrí@,ÄHŒ¼\‚ÙeËñpî˜x(;ï¸C„­°6κØè0;8kbwD8Gõ¬¾Ñ0UÏÚGk@PËþ*VT³Á©ß¦…vMÈ-˜ÔŸwt,#ýÆúÄH¥œØÙécS{„†Þ°>IÏ=@ãK”€¾WÚö[l×xµ<^Î[5ho‡r}½¦žMRW‚:Ý>í‡úÆ©šV5Ä¡2£ZîA­ H´1Üö!˜ `Ö)"…bÖ*SV4XWQ,Ê&ÀY„× ×% “¼ñÖF§!Mnkô ºÌD ㇎žB3u@–iÒfLB4` Êåàx ·Ž©´ È»Àœ>n$ʺH½0LBX®¿ºéè;&Õü)Lò „$ ÍSŠ=ŸÎûmÛÂÑÖØ§Ç_½ qþ{8#DnHBƒʥלÂyØ ;…sÛ—…‰ {“‰·8bd†öjyŠeÂCGä‘åØXXñpV։ͱN”sPÏuC+w©rîsþäíDi§B;s@6SЩ¢SAîƒI&‚Nm%Ñ.:9jìƒ#Q=Kî3§€Þg»¾±Ï?5ññ;öE¥ ï•öWл»Oo/§öGÚ©d—÷\ ‰«7®9¼Ö¶A‹\7ëô<¥rÎ;˜ #2†–†Â$*Z 9Ç œÓ˜feibeBçÁÜ¡lTé$²*k¿òZ˜×ÖE•´fÑi @ŒWÆGÐÎ@f !OãÒ‡d¢þÔ+æõ—‚9ëÜh Õ\äL={…¬¢¨HgE‰ý5<µGkÚv@*ZBéàè{¤l0|ðÆÖ·í7åñ}k*¾®˜‡¾ñØ6’}Æ¥S>r\ óè;oë–­^¾I2Ç€–B1Çõ 'DïyBTÓ^5ëÄ[N-K¢˜x%Beƒu ½jöÙÛAZYyå½V§®;“Û}‡¿zÍÚ¹Ò 푇ðèLÑ#‚9ÀyL%$»æ5—?@â€wÑÌVIAë=–BGQPOÃ_‚iÚõ ÓãXudâ‡C:ú^éþ€³6ö³Ò\>F:vFê9·Xmé„-ŠÙ$jÙÃÙ/WhŸoUY‰SÏ+«¬%‚:(é7½ŸL”f.´ ÊÌ) gŠÎÄ•{õ=ç´#…¥G*ÕÞgÖÆ·.b‰ý¾ˆ5Áq f²-±®è(EúkkøF |Ù=£$G…§©?Ë!qô=ÒP)ä?ãîÒ‘$-oSÅñƒ{n ¡ÛV®Á8U@wUÏÃÆÔóÐòÈGžKcœ¹;#q.tÖe ‚Ù1»—»F—«5–`ñÌû©æÊÔš(âÝ öŠ9é8TÑIh‚6¤ÃÆÁhÎZ)ì œ² ŠyƒñP¶¬Õ°çD-¯( Œe‰p‹²D¹UgwlpÐ4sfŽs,è±WÊ Ÿƒ‚ž{¯Ù+h;|è4Z#µ4Z¿l@¥ó@î €Y­kÜ#Â9*çêµnKù\Ö¿ÄK̺’ñw5n7˜ì,å×y| w÷m=¤ ï™ÊGènJy»ÂÞV·Msl‡qzü~æ‡íf°­l$¬Íj2Ö@˜—‡ã5—±Îqœæé¶‡´e‚I✅–Ž`cÐÚu.‰ŠÙez(¯=”oqà]‰öp^ªåVàa©ÂR„[¯šÍƒùD‘cÁƒ= êY1 ñ*¬‡tPÑöÈÃ9ØS°ÓeŸEÅÇ–ˆûªQízÕœBYQº'Q5W¡¬â}èüy ãOç¸Ð5߀á´5¡þ¤Œ#¿öä–åC:ºšþã?þƒ_ù•_a6›q}}Íg>ó&“I±×Ý <¶}·ºÞg9V·=‚c›bÊUsí£gŠr9³‰PóœÃÇ:DiÄp:“BW*høÎéàG-ŠqsÄQ5ã»i«‹¸à5§–Õ²¸Å°Â²nnEXb¹nTXв˪ì‘ ÇâÀ|"È ˜Å æØ/`œãmÓGo$‘ÅN,¦Uä *¬ïd®}¤vXZTƒ¥=f’’*Äî__.îa@rp£†F"›ìîå±8ws=^ˆJùb:º’¾ñ¿‘?ú£?àñyûí·ùÎïüN¿µ|ôØ£¼ïöñýÓ—º½»‡`mà1:|¨É÷ëa+Ù²ìΘÓõ¾g`:~sas*ÚÁYrŬ$ ƒЫÞÞ°¬<œCù¶WÍÞÂ@YzXß ÜˆåÖÝTйEŽ=¬‡³œ:å,ÇÊaiŠ]8X÷ „sÅÎ;Stb±­ÅšØTi{¦€ó@9§ê93i ¿“‚â5þjZZ5´b¿YÒx£Š3ø}”•Ó×¥O^ù”ßßvèçRM¯< ¿úÕ¯ò‰O|"«ûØÇ>ÆG?úQþáþ§OŸ&pièÒ¶(=ä}c›³Á¾´¯zNÏ#Åyƶç¡öLµSÞ+pèE§pÚ9¨ó¹ku¡ÑPÅÄñ2°>JÃÄñ2$Di- …•XÖààŒ·3n–ø¬p#ÂR,·-Ø™WÍÇ‚{HŸì)˜Áž‚«ƒ¶WÑ6i,´sÅ vj1“m6XY9G\W^98'ÑÚj÷ܹlUír¸7Ç­Ï&Ê“þŠÆ¯?wGr÷?o=6מ”þéíCª‹¾µþ;hæ}Ò+è~ðƒ|á _Ôÿíßþ-ŸûÜçøÃ?üìþV-o­/x­™ñ¸™q?ëö täZÝØú˜Š.CïÌˆŠ®4fËm*zØ0˜çœ€ºo0LçÌgH ç°êÆÍ>óÀÖH í€ìÊ·Ò+àgo,Q–jY Üà”ó­XÖйÀ±…ccÐSÁžz8Ÿ¸lOp^tÈ u6Ç´ÃN,Vn]f…Õ*A˯±ÎJ‡ê¦o€Yµo„è7­6L¥aJÄÖöÃuô¿9¢³ŸŽ˜‚Zw4|÷_ÛŸÚ(AbwÉì™Þ¦Šþù­·xûíÿ À“÷žnÙùÕJ¯< ké_ÿõ_yóÍ7yóÍ7ù¹Ÿû9~ù—™où–o`& šœi$Çózû¶º…étù EéþÛ‡°®ŽÝÜS‹£ã1]ƒsVWJfu {ZŒwdýàDBl ôJz㡼VXKðœ‰j¸õ½jö ¾ÁùÍ›‰‹Âp~³ƒ²œ¸2§Ðzæ}*ЉŠ^€n°“ Fœ£­,½bŽñ"1{ãÁ¢µ#œ-ŠUÅH¸òB£ÂDf4Ìh™ÒøNíÆuÓQ¥?d”/·@£J#éUê¹ÌýÓ ÉÓÃ6BÚ¯î‘ õì™þ¡ïxƒLJ@à/ÿêîs¢W"]Ißú­ßÊþçnÙchqÔÊCeËÛTóÎÛ† ú®±Î騥‚NÈt=Ÿ¼Õ¯÷VGç¡ÕQ€\¼ƒi—og’Hé œ¨W¤]|³ñª9؆›Þo†…[›°À«e§Ž9ôä8ôTsÁžÄCÚž@w¢È¬ÃNVXqg·Ü`ü×íÁ¼òžóÚƒ9vØþŸ³7¡E˜bz Ñ2Ã0#Ùš¤›NÏ/"w˜ÕÍU¨Úßa§ˆ]H´(ªc‚n±.ªÕJ¯êa}H1}ç”(Ðbªñ‘ìJ(ççÉ·ms]EyÎéëìëÚø5]›m;µ:òÑêêp®©éÔŽ†Ai[b]Nß`u‰•%V½Å¡+¬¬±ºvK¯ýœ=”Z¦j˜Kчò‘‡rÈS”©*SÉgVl)á¡À,ªˆ v~\Tÿ”g!Õ%„+P.a,žé£ÙžT ݧ ï•j*v¬¼­n¿å¾ãkÔÖ‡]JXç pSS•0®ùÐiC`®¢s çûçÂ寄6å; Dÿyí!Mak+I4âügµÎ6ξ›v¦¢½rÆÃ™s —õ ì|ƒm¯®°!ëM¢¢ÍárˆÀ^{ßÙyÏ‚¥Ua&†9- Zæ´Ì1¡‘Ïù’N=Ð<¢–VLÖç²ÁGcøÞà‚b’i^ÂDÙ{îáó‹açïÛ¤¾|ܳGYè‡É¡6O‰õÙA‡tô½RùíãaÝýlްÍÙc^tþ>kàÎg;©ÃºÖ0Xk,í|{„tÚ@Õô0V:'p–Vr0Ç:ûÑåñÎâ; KÃJ=¬ÅÃ9ôØ´ G s……¢ ·”cô)pzr\€žvp´Æšk:½Dä «—X¹¦ãáÆ½’Þzí<è žU7© iXÐrÌ„–9–£dy¤–™Xfj˜Š2UËTLçÔÖhPŒu9XÒ}JäÌÕ™’çXbƒ ŠôìͧýN¾ÐS‡úõò9%­W<}ç”?Ln8Æø@•Э‡Ûí£”Óת©èû)çíQñCã¢S/º®žëÍJÃ’¢=TÜiç•ô¡J'ÑÚª¹#*æÐ!ÅF'¬%ªèÅáºp +5ÜJPÑnà# Gô6‡k(ÄC$i ”ÅÚ%ª× —X¹ÄrIǢ׈\{*è•WÐ&s„ZŽi9ư@9Æ2G™«r$q™Ùå¬4Ân Øʶd¿t–J”Î’³ÇT ˆI–ÌðK=S΃œ<³Åg逾gªvÿºý–õÑÀÊÁÒ‹†Àc@¯+å1«£¹Q‚¶ÞºJSÞ8#6¬¤!uÛóZýRB·î¨¤×a0$„•q=ú8ð½ü˜+2OÔôqéSS…£[Tn{Ý%È%*—t\"r™yÐ]h$Ô[ S…c1œhË©´œ¨áX,ÇjYˆe¡Ê\åŒúÎÌMçU²UŒŒZÒ©Åû™jIrªš{éL6 ^×ÀC?xuòœªg`מûC éè{¥æ»Dlìê|2¾ÿ]U´IêjQ°Ã1žÇTq®ˆ~ôp_28ãCꤙ®£µ‡M×{5ôþt?¾3ÂZÛL¦f 3ÓƒZ¼ÍôX¤n½†ÎAYx†Ê%È3lsÙ[F¯­KTVÌ€S §L8£åˉWÌ'XX(sokÌÑÄ{¶nŠ[µ46€ÙÂF‘l:qESå\ Ñup4*cpPq6¾‘Öø¸°®)”M²¾̵gÜOX¡œî{H@ß9•Ðð§ÙÐæØ¾^ö8xkåaDIyLQos är|Tù¦ ¯7I  2¶¯ƒsëLß©gñÓTQm0ÌàLb}xP¯Å/6"èD`â -SñV82èNI/%=¹½B»gÏ@ž<…î*nÝš`u\Ó°d†rJÃ-gÚr&–3µœˆåÄ/£z¶N=«r$–™Zf¢L6N!›"uÓ¸lŒïÛî§tÉæÙ² ÆØƒ96ö%:Õˆƒ¯iã?¼«„ž›þ‹6„?jfõ {Ëd†N¬K•¿Z,É¥ ï‘†áré²V·}¹Û{ò趺rWÔù8i]îÒcGÜ¿„uÞÉ%U^%¤•ʉz& ³£WÓÝ@M;8ûñß|p‰ÛTœÒÁgŸ¬™©SÕ3–ÇBa²Bõ éžOQž!ò•§OÁ—­<¥ãйtœ*<– …sÎ1œa½zvùË1êtlœZK³QÌÆ"k—³É;u ¶ÎCåÂ0Rë§›Lœ?Kñó;†iZ4Ébâ2moPã SH‡=ñÀ•øÆÄq²í阀¾wÚæzã`yÜ6`ï‚rZï¡Ú+ùݖƸ¢.£;rï9†Ì¥ªy¨’Ë×®ûÎÎßNWM=X[rÅÜ+gõ%I rñŠÛôöGld”~%€½›’Yt8»Ë«œ€¾s*•©«ËmŽ»ªé±º]P.a>®¤kñÎò)ŽIG£ó£SE½­Q°ì&ž@ÛCßÔ³&R$ó Ç ]*êÜé8ÓÃÙ Ðø¹üð–Ö©h&˜Ç1–h÷á ðÕ'ï_GÞC»'Ìå–3±<x`à¡XhÇ…ÎÕr&g˜^==WK³²˜•uP¾µpkae˜×ÁÖ`¶hgk3KÃ=Œx»b Ím§Sg?E¸j‹Tà³ÉrøBU•^»¡Msi<²3í¿ç«‘€¾WkÜKËw ©F_ ÝWEK2i]9ïs¢˜+N;°lÿÐ2©û×îSî"4lçšjÎmŽÑ‘í§É9Dú†F‹ôç°x¨ñ}¹mZ‹L L,L jÖÎÖÐ÷P}Ñ÷€÷PÞCx•wiäDzâBðpšŽ*<ùvœ‹áL §-Žygin-æÖÂÒ"Ëfuój­R8o0wÎj yÚÎfÍ Ó¶Äù´T'9”ûœ€9(eß¹0ªã0¾´+ÓCaoK±ŸøRÕä¯p:ú^©溊ÞØuçÇÞOEï¶:j!v¥M1ìÚCz›µ‘Â~¨ ñe²ë¡,ºA5Þs¶-Â9@8ó®5ì”8XIÔs/þ%YªÚ:E- Ý5Ê0ï!ú.ªï"¼ ¼‹ò..9cãÀ,ðP„‡Fݲ±\x{ã˧桹1ÈEn,êᬷN=ëªCVõþ³nœ½áà|fqJ¹9BÛ#¤õÓµˆ›²EuФ“ö³ÏN<ˆýÒÏB«Ú8+½JVõÍŠÁÖ.àóÄ+èwPÞAx‡)WœË†G"<4ðÐEyd„GFyh,°œ‹å\;Ž­A®-æÚ"×n:¸1p㕳·5X{(ç^1‹A›#¤£í?]¸'“Ž(gM¦÷^³ã½{&ò‡29˜¡PÌŠ“ÄI„†hIûLäQFâAÞ¹ð€ ï‘v)âíûìFG¥nì:À‡Þei ÕôpûÜáuJHÛT£EÈÚ«]j7UÏu¡Ϋ)˜ýú¶F(%@&ÐB{ëg¨õ Ú¾‹ê;ÿ‡)—\`y <— <xhà±G6§Á\ÌeW® zÝ ÕóÊ¢Þ‡îÕsg›)ÒÃÄwo´Å„‡~ZÕb§ÎƒÖi¢šœ;u÷®ïË‚ä}ZÒ ¾ÁHk‰–‡øúð]gÂ#Ô{øFJ¯šÓGK“Ë]ý(½âéè{¥òwXà6Ç`ÿVéz|Ò›Î_¿ðxÉÀ¼Ý/6#å-Ȟη‡÷2´&RP÷E¢¨ƒ]!Lú¤#˜CîS°âC|¿¶¶C×W`ž!ö)4ïy{ãçŽ×€G"<å±8ÕüÈÃR”Ù%˜K‹\vè¥A®,¤ê9øÎ½zÙ©eÚ´'@˜SËOÕ¢ œ˜uæUôÄ)g;Aìk„.rÈ] eˆÑyé5J¬ ñÁ!}ǤSaÖo%íd8–‹Æ!Ž#¦ ï•v©è|9ÞQÅTößVÞÖ˜8¦¢G¶ `žÇ2ÅDCZªf °s8çðÔin©«ç”#¶ÿ˜‡kXùØû‘Ü ÔjâøúnëkD®Pó š'HóûŒsÝðXá1ÂkÎòØÄåÂcj¯À\wpiàÒÁY¯;diÐ¥WÑ·Þs^Y¤5S¤=E'§ˆ9õÓ´è1jˆÎQ;GìjÎ+èD9wÚ¸Pi•ø5d Í‘Í8*ýÝ“ØÉ0t0ôm‰Yï¤+PN-ÈþœÓtôÓØo±}Tt½¼]5§€éþcÏÁ[3º„õ&(ð-ªz䵆¾ó8œƒ%‘úζJø)^¨g)ጿn¹rîïTèêìFaŠ1zýPx‚«as ܸnÜæ)Ò¾GcŸrªkáüš¯y(¿fàt æºkÅ\ Í•¢WÀU‡\ôÚ ½ïܹYn{/ÍLΡ=ƒÆÏHkOP{‚Øj»pªÙ†Ùhg}î´e£mk#ó¬*VÅÃY“†@Wî/\¸V;6¾s!±saÖó[¢F²Î…” áËrÈH‡tô½Óó¨èʱ~¼\[/¾Äupnƒô=Ê[!ËCï¹jé;fmX\£_i_”ñøÊ^Ôiæúp6uBn-nÊ•Ø%È5˜gнǼ]ò(Qί‹‡´X˜>Qìµôp6WJw-˜Khƒµqmá&‰ØØ29A'爜£ÝbN¡;ã';´‰µa½zÖ#ÔÎP;ec k+1"Ϻžà‚µJgkÆ}æpÑÄw2l&Ì}^‰§ˆçЗÅ9t( ÛÖöpN?áÿø;çÒtô½Ò]Tô>SÉqßúú˜ª. >`:¤ ï‘jêw·ŠÞm]ì¿mû¸R®+ÛZüó6äîJêjº㨠ÕoË#04óþpŽw,‡sƒF@¯ÔÅ<7ŒBÓAcÑi“ Ì;à1Ï8ÜòúTxŸÀûÄAúìF0Kèn”îFèn ¹qP6W‰Š¾Ì•Ð^)t-LÀäµH÷5çˆ9CÍbÎzkƒî§žµ›cÍŒµm¸µÂÊ*+•¾Mq“äÎBgk¤ïËÒ{ÌMÍLi¦‚LA'ÊI¨tß±°Urè‡äÈà,ñnH¯’ƒ±ÝÂÈ?7Ãí¯z:úÎi·zî:ˆG;¾ä’åú°n«£6÷àßÒ NǪ.­‹2ümhc =èÒ[NÁ=¼[šýÎaöCk-ÝZÁ¤1 ¾¥PýTTg fűYñ¾©òß,|ƒÂÃLV‚õpn–B—€ºñêÙ^á-†f5Cå Ú Ä>ôŠ9äóõ¼@í‚ÎNYY“|0¯¬zßÙY*oì‡}Å4B{m&=!‹Æ£è\Õhl”0¡mTÌJ®žµ¿ JZ©O%Ë!½5}ò“Ÿä+_ù _øÂÛKë÷oܵ¾TýÀûw®?_Vƶy5¤Ê¸¦ sP—à.Á¼ë‡s¼¢CõÜ¢Ø0çÚÍŸõycaÕ¡7ôf…ž+2︘,yÿBù†[8îVЭ [)Ý­ƒs³TìR°¡ðÆÐ,ìæ+§tœÑpNcÏ¡»@ÍÄœ;õÜœ£ö ±§¾QðÛ-ؘ)ËN¸ib4ÞÊ&=Áƒ­Ñ«f—˜¥QÚ©ÐÎAŽ\žM{€OHC¤“¬h#`ÔÁYÜÝê!¬ ½‘+æR=Çç#~ÄÿN¾vH!=’¾ô¥/ñmßöm|å+_©l-£quœÎ¸M=—kJ¶A¹þˆX’ùÑ)ð÷öݶ婪›Ã.óP— Þngõ cN@[uvñuÊz¥ØN±kë(xe¡íàÿëhçÝâs IDATZËñ‘òßN”‡s§B;¼}ÐÝv…ËK°·B·ò`fAÇ FN0z†‘3:½Àx¿Yì¹WÎç¾Að 5ÇlÌ‚µ™rí=–VYvÂÒ¨·6`m••6VÙø¥ ãd0Se²p`V&û²Ìz;#XÊÁo6ŠŠz([ç‘HÀsü'$@VúÎ'©`ñŸ…؇µ>ÐÀ!ÅôÊú«_ý*ŸøÄ'²º~ô£üýßÿ=¿ýÛ¿ÍŸüÉŸTŽª©a··)ÊãJ÷Ýå=çç‚yðBBºìøwQ¬«gÈÿ·´ÐÇ3«„HŽacá6;#¯¯¥ðnbŽ“i9[C57X\½²é”n£è­“(´δáƒúÍ|KšÅ¿Ãq­öÇ©lg¨× ÖN±Ì±âFy¶rŠÕ¬œa9÷ù‚ÆÛjÏ{FgO°vÎÊN¸²Ò{,mÞ ¼ìËÒYר2v®´ÇÂÄ{¸àÐp†á7€Ò'Ü”®~FA]`å$QÏNAwœcxÈš3Ôž²´.­ë`xe•ëN¸68{ÃÀÒ÷a êycÝ0ª´Ð,`r rÝ ? ¹](v.è\±3q :À¹µÌÆbeƒaƒªõ~Ö—s¿¹G²¿H)„Ö/ J£‚‘á\;nXucuÏÂã;øïo¼ ù—ÿk䮾zéèéóŸÿ|¥v\ AyŸ¸èíÖFÍêØíå¼Òñ=äåðuQûbªAÜ•Ò(Œ¨€Su­Ä}cbÊñ‹!Öi¿¥ÈêÞy“©?÷à[•49o€óÃL`¡ÂêÆò眉- KŒlü_œí nîm7a•›Àê$*h=ÇÊk=c-§ltεm¸òp¾ì”¯ Ü4‰z¶Â­uSuu˜¹a9&gŠœ öÔ©f{’ôcI:Ú£à3wh«XÖXÙ`ý\3nYÚC;#µ, -&ÝøÐh.žÂL*ø›'ùM¥7°·ýÕÂÁͬ«âàA¸ëÆ£ŸcÕä]ÅwÖ$˜Þsø¢û»ˆ2è#`&BÛ_ÖÁHŽh¸ÅOš…$€VaåÕ9VhèsÖû5^ÿÁÍ=¤ ï“† zÛêÂz ¸_ çº2kDÜG%ׂ˜Êslƒôðõ/…ôØ`cD\®GE=TÕñZ¤¦ëã)~e”W'üÔï>?WøÝa¯ ƒt[-°ÃCà ‘ô]Ôc]™ÑᦚÚ8 Ά +É¥Ï7^=_b¸ÂpÙ WF¸6ÊR…u«°Ú®Ã¡Éú²(Ý™`ü0æì±:0O:ºvM#+¬Übu•5V×t²Áè+ÆÛ¶o»aJì³2õ`žø¿2€¹%³ú'" /¨âƒuqßtô½Ò˜B.—õÆÀÒ®Ep”žîð¼CÛaH×! c¦zÌPMK_“Cy¨ž·7–‹¹½+ Ááã2¤´ˆëíüeŠàú¥šÄ…í¥ð€¶LX3At‚7(~'ÊZ-·bY©åF,Kí¸ÕZ.¥ãR ϬáʺìæG ”æÐ](æB0çŠñpnN{"Øy‡l°Í +KfVØþkaãÕsçl~©ÎKV˜IËÌ}õ0óPž¤y š”ªóùÓù°²¹±Òe|Ž2­ôCÞ¦TÉÒÐwNcà­+æí–Eí|C«`\ÑÖ ~hG îëIÿΨpÃÿÑÖ¨7 Ž[9ëêºøÅœ,kOAjq)öv€ö!a’òÃý=„µ"C‡°B|CYÓÇ0@øeЛ ¬°Üªe)K5܈å Ë%Ï0\b¹n;Ö‹–æL)òH0•æ¡Ð]8m.¼µqæ­¹ÅLטæ#74,éXbtE'+Œ®¼zÞ¸FAí°ÒB+ÂLæÌGXffj™Šq€V¥ÖÈFqPöƒJk ép?œ "«„g,ŒGZŽKzHpô=Ó¸j®*æZ]¡¢ëOÔ–!åc,Ç×ÊS^WSß%ü‡VLé5—Q9ÇÔóîŽ(ôû¥÷¸v®oÑì¯Kõ~ªžã×JyEâÕ²¸YÀ7ÉVÜz‹ôZðpõñ®In­–•äÖÆÂ¥®Äp)«¹¡;5È‹>4˜Ç‚yötÁ$ê¹;Ìbƒ™®0Í’†k,7Øg¢z‚NA[ 0Å0§aNËaîÁ|¤ÊL‚r¶LϹÑD-§S±XùÖt×Â]U¥â…É|Xµ S{÷éè{§ºŠWϵmÛTt]5ÇýL±_Îvûƒdÿòµr_›x ÖxX~AŒ5 n³5J•LuŸÝ6Gx÷Ñ[Ž±Ð¶Ø/õŸÓcÓkä&ªÍ£Z:ܸþé0ÈôïÕ«mTY‹WÏÎj¹ö ƒÏ¤c55l¹èà‡ûPØ<Ì#Å6NE_XÌü–frE'Ï0ú #Ïèðpæƒóž-+¬ÞbD™©p" §L8EúÎæ ŸçXŽÐ>OÔÒtc-fãæÇÒÎÛaCkÁÊP1ƒWÉ~^,ÓGGƒ6¨¤@ö\¸‡0èa:ú^)°jËZØÝð¸²\ƒ~HA5Õrš 8rºOþºe]-´/ÌYWó¦ÃyÈv©ä|ÿ¡zη§ï{›#O1¤.¤Tõ÷v)ëŽIO¸ü¾„PÁÐÏE·7>/e3³pÚÁ¹ ç‚>ä  ò¨C_3ÈcA_ì¹e3½Â˜§t<ÁðÃ% —tzÅF®œõ†Nn™©e.†3×ß‘3„µœJDZŽÅ²êYÕu[ï:šÎ`:ƒôó0&ÊÙ[j-â£34t *Y*scI˜°Ð$˨ž5<.`®¥ ï•j*r 磌©Ó¸ß~ y»².ëò¿)¯“âüÉ~½5“î·ŸJ.ëËhÔ¤ êË/ƒ< kR0—ê¹Ü^ž!UßBTÒ©"ï{?ªÒ‰ú`6ËJ…[±,nTXO„nÑÁ‰ g\<ô‘ 6èk‚¼&è#…“+ìäŠNޣ㉴WϽÄȵkÔ%F:Ž1œÓrÁ„sÎÄpª†Si8Á ×”óK»±4‹l,RLÅ¢E:“(çD1§3Èš)0A›É‘#ûGH«ºÆÀþðzL1[)¤ ïœÆkVǸ5öóÀ̘ªðq¥»[%×ÖÇŽóÀa¨¦}äÝí1oóžë …ivb¹Oªá}xíÊk˜<ö.ɮϞr‹åVa)Âf*Ø… §§z!È9N=?x$ðØç‹ L¯gÐ=ÅÊ{lä FŸ`äF/1rIÇ5†c„ Zê” .0œÑ„qó8!¨gÃ\Úµ¥Y[dÆ+Utc‘µ·46êU³ƒ³ªEÔ€1¨™"͘‚¸~–ƒþ³ ?c¸øÐh‰aÒÉÅÔêU>¤€¾Wª«ãX.—û•ƒHÉê20¬©ÒMϻۣÇ•?Ük€¡¾übRÿ!‹ã;orªŽk°Žï)WØÛ ½=ïŸOûתÕ¿?uVlúÃÇ;÷Q°ô¹› ,€ÐS3àLÐsœµñä!è#ã%j®ûÝ<yÌ{NEËÓ>bzÊ-Ç iy$ªð@:.0œkùtœjÉ8ßyn­óÊÍ>LzcaÓùÆ@7£ŒªqbÁLÜèþí 7iá t‚êÔ«æ ýtßÞs¶j<”“ûÀĸ»­õ$w½¿/w:úÞ©Ú½m £ÝQSÍcJ:}}"7|·©õò=’ìGò¦Bí[àëÐ-aL²5*ØZ|\k}èÔ¶¨¿ú/ r† ®¿ÞJy†n ÌAÀ1Ò§À9Ò @¦—¨^"›'¨¤ÎÐM,sаPj>ÃÍuhž¢ÝSd󞇳ƒ²˜÷`óÈ»LÍ5µáu&¼.ðÃ#Ýðˆ†b¸ÐŽs1œÑ±Ø4Ln;ÌMƒÜXdÙù¥æ[äE×Ì®Áoê Ì$Ì&.tI«qÝØÑ j]„†U† ìÀ¬ÑÒÐç„ÐÈ=”ÕußÌCû‰ ï™¶)æ°Üe”J8©ë­Ž|·y\I©éÚ±d¯ƒšš±1ŠáBsèÕ-²¥ÇÄ÷î—ó|)±dåt§~Îo…@ã;¤]:dÌŽæŠ.Y4°=QäTA®ÑÎ+fy‘÷@ÞólÞ¡‘'œ› òzcyÂkkÇ#1¸Ã)æN]^ð–Ó¡aûûâ+DÜKÊXŸ• éè;§lËe nŠºmJØ×e]­ÓóÖ¡Zk$„á³^½¦Ì‡ïuhoŒ©ã MT5•ãÒºðºy]ú÷ä஥]ÖÇP¿`"˜]9Ÿ<øÎ."m-ÐkœªÖ‰…‰ S…© 3u ž):Wd¡plQ¹D6ï‹ˆSË*ÿcÞåH.yd”×6ðº^Ëë¦ã5:IÇ# è8í:¦7æªA.;äªC¯ä¦C—ÔóÚyϺ±HÓ¢Í129Aå± Ô#aòB7GVgµ-Ö4lT\ž¸Á£¬WÊN9GÕLPÍxaì£ñáС±>z˜€¾WÊ¡<ê'³Ëê¨Ûýy•¢§!Éë \;ï¾Ý¾Éê"¤œ·¦4ë &Ý–Ì÷WÂ:=gú~´²Oºdd},ï7>fHggktÒNI+„¶hÅ Ý L :Q˜Zdj`fÐ# E6ƒððÈ¢ò¼Ë™¹å±Àë^3Âû6ð>£¼n:³á1†óÎptÓ!O;䲃g\ôºC¼zfÙÁªqêyÓºHŒÉ™Ÿ#ëlDú8Î.¦þ¶3¬ié¬am ³Â¦Ò©°Ž#@Ù+eiÓ adÓ¸:Œô¡ÑúÈ1Ú7?ﯡ—)}ïTƒôPMWCêÐ,ûo·;òú¸ó}˺1 %ÿ;KÕ^·ê f°ÿ¿½s‹µä¨Ïýï_µîû¾×Þ³çÂŒ1—ã‰H‘? âðà)ä KX1ð…H\d H”(J‘Y"h‰‘¢<)‚„ p1Ø`ˆ=سgß×µ«þ硺×ê^«{í=Û³aÌô7êéîªîªî^ký­¯ªþ5²@ ÏI¶ÓdGÎÂäò,õ|˜šNêLuš˜Ó½6¤Èšx_QIŒ€°Ö ʺfºhÕMD7Q½z¸B…-VÅsÊÀ) ÊyÃrÞppÚxÖÄÑì:ÌŽCvbbÞspàЃ œéÄê¹oÐHÛ€êRXÌj?úyĵPÓD´ì WÇ™ C/Á 1Éø[ 1§ÖB°/Lòm¢´<ÿvº¼ÈL»£ˆŒ¢¤ÓW”N+²LòmŠ|›`òO./Ò~5)e=YO:Š |r»h?}?Óuæ{Ǹ&cyx4V‚B ê$n©I¶ nl!þ*ꯀ>‹ð V®².°!ÂFBΜ6ʆNXzª»Ùv°í`7&çý(s<‹ö\h›P[–Q³„$±JÝØ…Ô,A=½aóh`¡Wœ—q/<5¬ÃG¦˜ª`« UE«ãVÒ–FX+"y¯xRO¸”},d•fÏ&ìbµ[d0awLZ³-Œì±“8JotúµDIþôò{idˆU³*8ç¨|rNïe¯sö=g$“tB1áiΖñËG†{ˆÛAíU¨\Aô,WØ@Ø@8-Êi#lØ@ΧÐîAóªâv»§˜±z–=‡˜@·kˆiA­ÖV·ŒšeÄ.[@ÍbæP7Ö¦ÉÀ }/qieè…È+QḂâ0Œl [[ºF‡¥Æ˜œ-ñÌá2VΆö„õäëPM)êPt!.^¼È7¾ñ Z­÷Ýwív;•›ï/C‘ZÎ'Þ|BOʘew•Cª È*áñ±E yºŒäØñ1iÂÍÿ50{d`rDž²žª#­®3÷oùì0"ŸTßÙFËI+'>ÙË$ÞŸ|+%¡9?DÁ>jvÁn!~ã7ÙN£œ8c$³5/Ìï)ºÑž`wÁíù@л­ éX胚9¤Ö†ju«ˆ[!L`¸ÈÙ."~õs¨oÒ÷†îhìJ 框öD炽]‰}c¥Rl¤®H]*H-(ç©ßÔLOF«O1mVe•( :—/_æÁ䕯|%ÆS¹E¤;^çûÑéôÉ´tÙ“~ðavG^ÙEJ8}|ž=­¤“cÓëd»x´àø¨¢ü,ÑO+ëüú&¶SŠ;ïøÉûÍlçØ)é²³¤œOÎ ’WߨƒWÆ}ñ4îæ¡aq]=¤²…¸MÖ¼ Z8+pF”S+}°ûŠÛܸ=%Ú³#˜Ý‹} =™GkëHm lµ 9/£n qK`P73MºVè:¡ou¬œ MLÎq/<õÁʰ¥Ò*Íl×è¼q+Þjˆ•$é·Òø·F–¤“gžîÜ™÷ÛïæÅMOÐO<ñoûÛ3i·ß~;Fƒû￟K—.qéÒ%î¾ûîÔ“êvr]<|L˜yÄHNéc‹ìŽ"2ž´<&Õô¤1&ªérBîìFÁ"²žÎg¢ Rå97Ûx­Û…y:]×èZr_€y%§Êò £Q, 1+!(‡‡®¢]•>°v‹ùjS^8pF‚‚^‹„Z¢Åì öì^°7Ü.¸p;ºÕéa:á5Ç­ŠÉ÷/L$&IgŽ’ S¸é úÖ[oå‹_üb&íÉ'ŸäᇠÝnóÈ#Œòz:ä‡Ã§¡mhÛ…\µ\ä=O[“„>¡˜§EžÝ1Yöaþsžå‘-kRíO“q¾×|˜ªN“ùdÙùÛ“?ÓÛRž¿ŸG¯¹j==Ц༣¡=Ê(<'‘Â@Áz0ŠZu‡¶hkwب)çÎN˜Ûw D°ÁîƒÛWÜ^¢¢·_Á æ±ÒF*ëˆ[‡9·‘hì Þ-ƒY$rM:Îpà„ƒ¸ç]×BÏ+}' 20qÿf@ Tã±+~\Lо¡˜ºŒ´¯‚©*j•tÈ(ªG%±4ÒÖFò™…o—ÅÆ39*?úÁøÑ£?Bvwvf<ñ› 7=AçáÂ… ¼ð…/äïx›››|êSŸå5¤Êÿªž÷SËÓ}‹äÝžV×ÙcjwLڳȸ¸Ž<‹áúõ´bÖCêžÎ+¶8òö§ó$'í0¤µ}xª°ª8)ÈxˆKÖõøºjA#–+Î7…3–÷AºÁýp=ÁuËâö îÀà:Ü`'+qô5Œ_CÜ:êÖÀµ·Šº|´ÈжèØJÒ]§t­ÐsJ߇㤢Tç„J2SxKñ-Á7ß”¤k4¦ªøšb¬â‰01žG&éÓ’õ›“/v˜ ]»*XÑ8öðòßx ¯ø—b0|áÿ|áHŸÄÍ€’  ðñ9ùÊ8KÒã㦕ñ4ÑfË™åIOŸ?Ëî€I b¢¬éô¼sf“í¬šÆù“çÓò­ô9L?YóäöaûãòFÉ ò_wRV¼Wt~«¦ÌܾƒN„îFè•S«sKÍszÁP nHXúñÒU\Wp=‹ëU‰¢V–q²ŒÓœ´q´±>(hq¡Qл%†nŽ}WaÏ {N90ƒŽSºNè9èVÀ‰"5!»bÀÌŸÏô¾ ä\S|Õã­ÃÅÑG^"Á#å<~fÏ~æ>Ý£‹Æ¤¾õ&õ\K”}˜V^ùtz;/PR>'uæI§ë‘ѰÚâ³Ôt‘­2®3­ŠÓך¯˜óU5£3Љ·H%Cáæ«íÃögÙEùéœôS4¨1Ù€%$¬Ñpü@iwV8U[@Wøª†ð¥*¸Èà#ƒü°†“y xYıŒÓeœ¬âhãt Ç:â×Á­0tóì» ;NØu°){Vè8H‘óÀ+‘¤¡Ô–„êØEÅ/ ~^ñs‚Ÿ‹UsSñõ@Ìj’éÂ,á¤&±5Róè5TÅPÅRAG‹×ÁsÖ9‹jŠ¥1+=›7]GÈÏ÷˜¢–¼ö­BÅœÍ˳7ÆM;éôãÚE„>¾‡ìßg±5ÂÄÿÙüYû×z\Òê9(Ä,y{¯8ǒ­ 5,SãEÒfqø¿©>û?sÅ#*+x©á¥—^çñ2#´gÏ*ž5k h3ð+t]m'„îÑÆ®¸ œŒÒqB_!2Š4…Ú Ô–!ØÔŠ[Ì<˜y°ÉèïšÃ×}˜!œŽ!†Ã•³‘`k˜„” †–*PCÆä¬JE4¥œñA5‡!‰ÂHi”ãTF( úX(VÐEäòŠÈø¨½8’ròÈ;Îˉ'¯˜§è´µ‘¨æÃ‰8iœµ7²uŒËÊb¶½q­ä|a6ýÇêYaDNÉÂ`– €Jø ¯BCK,«Z§%UZœ§& ,ûƒ¸ƒREiÄ“SÍáXÀ±ˆ×eœ¬± ºÂ@–Ðâ@…]¯ì:aÇ…õÈwŽ”^E¦Rm µUp+Š[̲b7v^C£`ÃajCÃïRËdIDAT4­—!^‡x‰ðêð’(çø¥BM,u,u„j|Õ˜”GêYc;( Ü1  £ÀÑÇý ~MQô1Q{cšXÇéÓç‘JŸ¥˜ÓÇNzÌ9„«ä*éq=“åM_CVÉæw“K—z˜b&§Œ"»!ïœ,r^L×°TKCròÓdóx?}í‚ ÁsC]Ãä* Ѹ¡¬IU*X:†ñ1@¥Žj •¹0y•.âd‰K t‘¡´è`è¨cO{ÞÆÖ†ÄêYéxXA[Jµ µ5Á¬‚[Uܲà–Á.‚[;çq ­Gxzñ4üÈÚpø˜˜ PUCC*Ô±4j5j"Tõ¬±bV -}¢–I‘tBÌ¥‚žDIÐÇÂ$¡%iãí"ß9{Þ,b?Ü“žíKÇŠ97^új²çŽƒ<Ÿyœwkcú fv1OžøyÏÙ§=Þ6©údâe[â`nBMLøÉÏ<3ÀÐ`+ ¢øccíY§xÇé™cÀ‘6é‰ÐÅq Ž}1ìáØUǶ3ìF¾ =4| *m¥¶.˜µ¸'ÞªâV9GKŠ]ÓâêF:8ía¤‡ÑVrž³Æ×XA¨«¥)–&xêêªÔD©ÅwP‰IÙzETãˆR“ÊYÂ,.ÉŸäI— z„’ ¯DZ4ŠHz:ošpIŸgk½ âóFj:ßö(6'²d›¾Ž<"ž<{¼5ˇž>>}N¶Î£ø¬´ÃþöÕ<^+)ꥂÐ3d‰y|¬Äžlðe«„E$DÅë#ô±ThacMªXŽ]5ìˆcÏ::¿"T7,µ ÅÜ)pkŠ[\â=·¸Æcöqàè`´ƒ“†N`uˆ‘ÚºE•y*Ì!´ð4q4ÔРžkxªÞ`ÕcâèJ’Œ¨ô~ܘž¨0 bPc±IÐhý6)Qô±q˜¥‘GÒÙôi{¸ÿ¬™#§=äl)“–Çl¢Nd’pf«éíéã’ò‹•Rž*ŸEÌED^\f> ¥¥•ô$’¼ôyF$üÄ'éßž"ú1};„!jJ"~8õD⨧'ž.ž>&çˆ=kèÖÃÅÚY³¸ C´!˜S`Ö»&¸6D L³1{ö0º“,]=¬ð2À¦Tœ§Ê‚VYCK sâi©§!¡³®žªz¬3anÃÈÄ#_$žú<,cÕ?±!h´IŒ– ¨ Û¥‚¡$ècᨖFš<óû®-oœ?“Œ)úŠËD/,Æ$*©ýóÀ¥¦\‰É9 íÉ2¶ÖŒ¢+1ŽK&*ô[Zt‚’ ‰"’¬³Hz’6'UvQÞøO?_ËIšÀQSì’§\Çd=Ý x%\¤˜“û›¥°'ïqRÉOßkÁ=¤O"”ÓçËDíÓäÞOÏ“š(g‡©g ž^lotÄÑ« ®e`ÉÀª“óºA6"ô´AÎüꀨu€±[X®é6–œì±í žy…U©±Jåx†ðEÉY,ó<çêÀ`#ƒ„àÑa‰Æ‹:ƒx”0Lµ5ÄÔ€Z˜qúÕ ¢UO6+x £bË^vc”}Í8ÌÒ¸’> 'yEþóùåNxYküŸÌ&á¤ö£Ø‡ýLÍ–™¾Ï¼ºgcÖ1×juL{ÑcÅœ}þÉóžm©$äìGgʈ¬Ó?æ“ÀBe/ý¤W²8† ÁÏdÙÁŠ «k‚®K¬œY÷°´‡V÷ñ²…ã*‘^ÅÈ–ŒîaÙÇÊy„¶VY“«8VÔ±,Ž%u,ŠcKË;ªKeèCÈÔ¾G8t|gââ©VÄ¥lë@¤Ç%õÕØgNÚàUâ…¸ 1Ø@%AQô±UGÇ'éYyydšç1OzÖ‡x:oBå%1’%ϲ˜TÁ“¶H‡ùËù(Ê-&îkµ:Gþ•ôU¤_U“¤=y 0&œ œ³}„ñ\‡Ž±ï<@è©Ð¯8|S`ÞÃR+ÀŠ kÖ9%A9¯  ÞAý.â¶P·…“M"ÙÆÆöFCzÌkZak"´±¬Æä¼*Ÿ÷ŽÊÀQéÇ“ÐöLˆ°Ô70´!ªäƒµÄ ~u´ÒD¤‰JEõçÂÒ ª¯&^Æ3¦+ã” :ƒ’ 1ù¤³ÛÅ$×/{LQãaRï¸Ôi"ÎÖ˜Ó8—ÄC–, gI/­>0%ì¥1}|~w¶idï?³o¶¤i;cœ?îÕ‘ÿ‚Ê"M:éÏÍÇírŽÔ3úFVm Ì;XY]ŽÕs;VÐkŠÌuP³n‰¶PsÌUœ\ÁØ-`Ÿ9q¬a9­uN ¬cYSÇ*+bYƱ൞Ãö\<­C»úÄêyèPgTªH¥‰VZH%úÎÔãØ¤5T«cbö‚3afð‘bNtb³éô瀞%A “Êø¨$Î/:/7™3©$óÜå<5¤OuÞöh‚¨'9ÌÖ(&Ý,ÕáZTpö:®²D=¾ËYõL’zú;0z zË$³ƒ§­(QÅ£M`dX]Y]YtÙ!µ>ª»H´&³˜M0›¨y–ºéÑ8K3ZcClLÎkbYű¤µŽ¥ÒqHˆM& í:¤o¡[ø¯‰©‡¨JÕ¹8>i›TA5û:jjxoñ"DbF=ï’q+yÝ¢“6ŲpŒ’ “"é<µ<›¤'K/VÓÙ¼ŸPÏŒXÍ)¢že/LÚy("÷ôy×NÌ׆k;>{tšœóˆºøÅ—©Ðöñ$,[®xNš@ ´2̃.ÆJz>B*=Ôo#Ã--ÔlÆä|…šÙeÑö9e”³Rá,†Ób9EÄ)µ¬‰aKíÀR=pÈ^ûíõÈÙr„è!˜ZY@ª ¨ÌÇжßD}ñ ¼¯áÅyCd„HÁ©âb¥ì}ì3'Ä,ŠÁ¤»F—ãTF( ú1ÝÉ*»¾6’NŸWÜÍn:?Ï_.RÓÅD%cͤç©êIë#“7U÷Ñ‚#M#«³‹Èû8Äœ-ýÚsªœÓÛÓÏqR9C Õ3ƒ3­uE MEš -EææmEˆí¡Ñ"[¨Å,rÌæL—5ãØ°Âg­ãŒDl¨å†u±4;–ê~„ìXص较ƒ(ÌÞuan¬CÕ v*‹hm1 ¨_@|<'VÕ_}¡³DÆyÉŒY‰»FÔ²*ˆ‰ ¹Öéžw%AQô10ÛZ˜MÒùj7]n‘Ò¿®MM'Ç¥_ÓJy¼=¶+ -Šôœ}d%²IÒ=j£á$Žo`—Пk]é¡òž$¾¶ŽúDk#t$ªªj5…š¢uEmzh8Äö9³‰ÊD6Až¥"[,™>§ œ6pÚÂY#œ³ÊÙªcC"º–ê^„Ù¶°ca'B÷m˜!¼ãÐn=‹x‹Úy¤‚G«,"nq<튙ÓÂÛ:Co‰¼!žŸ`ÔûΙX9{Bll+qGÅÔ$tðˆ'œ¥"ê]" $ècbV ¤Y$=>7_MO“øQ,£¨éñ5“sºŒÙÃ»Ç Yûƒœcgvr½…/ƒcàz–5»–¼Ô¼Öxâƒ`kHF=; ’@NXA*Òªz¨´&P·ˆÐháYT¯ <ƒò,uviË 3FÂbáœQÎY89šûfË"W1³cÑ]‹ìÇžsÇ!΂]Dk+HmÌ2ê–»n!¶ŸÃùCoé;ÃÀ„ŽC/aP¡Wœ—QI”rl©ÁIY‘xö™%A Ñ=’ÎÓº“$žŸw¸%r˜šÎWÊÉueIMGååÚ£§çõä9³;ý"™<>|d|t{£(.‰Žº•¥I:ì‡4ŒÄ h¼û±&Bý2ØDý³ˆÿª¿ Åë8Θ„œ1Ÿµpaq*{ [¶"Ø ÄÌŽCö#8°è ŽT— ÚFkmÄ´9ÛeÄ-[Dí<êšô¥g…¾’q+ibNâ$‰[WlC¨ÄÝ¢µ¾RU´"ckC’ù “'RJ‚~˜EÒãcŽFÒù¶ÆÑH¸ØòÈ/#ï'øøZ‹É0KÔÏ•¬§ËŸ~)äÝËÉbº^)Ì9ìì¼ç:&F÷-å8Z8ñBÀG0Ø{ü³àA‹N‰ã¬‘xQÎ8g…å-¨€ßU¢mÁny̶C·²Áž…^­,!µuàjÚˆkƒ[Eݘœ›£ç ]cèYâÉg5¨g#DF‰|hü•†Ri ÒÏ.5Ej‚Ä£¾µækÔ̼†Áü)PtþäOþ„ÅÅEžzê)þîïþŽ3gÎŒò6Ým»<Ú?,6‡2IÓžpI_qÛ´íÊ žÝË#¹¾äU0I¬ÉZQ®¸+´íz*-ˆÓ4:ÛÖ šM {Ç]aÑ®å\ë,%|<}|à®ÐÊ©ë$ÐsW¨Ùµœ[úå6Ùs%u_Ibz‡u Ñéï¡v qW¨\¾Êú ”³/0Ê9g­°Aý ø=Åí€ÛÜD[ŠÙŠ0;*heª§‘ú)0¨]G¢U°«¨[AÜ2>š§c ß{æGœ>s=«ôœ„q+©1+ŽÐØWi)•– -0͸Kt#xΚXÖ‡i³$!ædþíîlÿR>«çJ;>W¯^¥Ûíò‰O|‚;o}ë[Ù|¿oeÕp6mš¤óÈ• ÉM“ô¦ßš8&¿œ,©MûÒãkœ0Ÿl_õ›£?’<…<½?¦—tƒ«¡ÖÙ¡U=`yçúpÞ(+=0íC´/Ø=¨ìÛVܶmƒ–°¬aÌFNƒ=ƒÚ Ä®¦^iã++¸JvòYW½òTèÍÀ*‘ ¶ÕE`Ì‚bæÓßR|CpM0uŇ‘!OŸ‚¬Þàñø‘ݘ7²žOUýÀ«~Õr#ᡇâÒ¥Küõ_ÿ5ÿöoÿÆøCÞõ®wð›¿ù›T*Z­KKK,--èµìììœxe]e]¿êºvvv؉•ó3Ï<Ã÷¾÷½«ëù„’ sÐét¸çž{8wî?ûÙÏøð‡?ÌË^ö²_õe•(Qâ&CIÐÇÀ¬Äë‹/òo|ƒV«Å}÷ÝG»Ý>±ºþüÏÿœ¯}ík|ñ‹_<±:ž~úiî½÷^êõ:N‡Ï~ö³T«ÕëZG§Óá-oy ‹‹‹¬¬¬ð—ù—×µü4þó?ÿ“üÇ$Š"^üâsß}÷X]Qñð¼æ5¯á}ï{߉գª|à`kk‹3gÎð¡}èÄêzê©§øÓ?ýSΞ=ËÞÞŸýìgO¬®çÊFÂkÄa ˆ×—/_æÁ¤V«aŒaqqñÄêøÿø^ò’—œhgΜáâÅ‹<ðÀ¬­­ñè£^÷:>ÿùÏó‡ø‡<ðÀlmmñä“O^÷:üîïþ.ŸùÌg¸xñ"_ùÊWN¬žó7ÃýÑx=ÿò/ÿÂc=†µ–•••­ë[ßú¯}íkùÄ'>Á`0Ù7;núFÂY¸öÄë[×í·ßN£ÑàþûïçÒ¥K\ºt‰»ï¾ûDêzÓ›ÞÄw¾ó>þñóÿðϹŽYuÝu×]¼éMoâ»ßý.»»»¼â¯¸nõ%øùÏÎk_ûZn¹å~ö³ŸqáÂ…ë^O/^ä oxÉÖñÕ¯~•µµ5^úÒ—²¹¹y¢u=ú裼úÕ¯æýï?o{ÛÛxâ‰'¸õÖ[O¤®×¼æ5üþïÿ>_ÿú×QÕ_š·~££$è¸õÖ[§~ê?ôÐC<ôÐC£Ä‹/ޝw]O>ù$?ü0ív›Gyä9×ST×?ÿó?³»»Ë»ßýn~ðƒð¥/}‰×½îu'RÀý×ñùÏžxà9ב‡óçÏóÓŸþ”ßþíßæ§?ý)çÏŸ?‘z|üã§^¯_—ïÂ,|éK_¢Óéðïÿþï\¾|™7¾ñ¼øÅ/>‘ºÎŸ?O¯×Â÷o{ûäú'?øàƒÜ{ï½Üyç¼ÿýïç¿ÿû¿yå+_ybõ=_PzÐ׈_vâ>ð¶··ÙÜÜäSŸúÔ‰{ÐwÞyçuûe‡ÿøÇüÖoýüÇ À{Þó^ô¢]×::o}ë[Y^^faa¿ú«¿º®å§ñ¹Ï}Ž|ä#ÜqÇXkùä'?ybu%øêW¿Ê7¿ùMÞûÞ÷žXÝn—·¾õ­¬®®EŸþô§O¬®ïÿû|ô£åüùó<ýôÓüýßÿ=ÍfóÄê{¾ $è%J”¸AQ6–(Q¢Ä Š’ K”(QâEIÐ%ž·øÊW¾ÂïüÎïðÎw¾“7¾ñLóóŸÿœ~ô£¹ç¿ãï ßïŸôe–(ql”]ây á ox÷ß?·Ývßþö·yç;ßÉ{Þó>üápÿý÷s÷Ýw³¹¹É?øAî½÷^Î;G·ÛåÎ;ïäŸþéŸ~ÅwQ¢D1J‚.ñ¼…ªò¯ÿú¯Ü}÷Ý|ýë_瓟ü$kkkÌÏÏóØc1yøá‡¹páív›}ìc |ðAšÍ&·ß~;_þò—Õ·Q¢D!Ê~Ð%ž·^ÿú×ó¾÷½{Ÿüä'ÜsÏ=¼à/ãýxvŽ¿ýÛ¿åå/9¿÷{¿@£Ñ`ÿ—~Ý%J¥‚.ñk}ìcÌÍÍñîw¿›÷¾÷½üÙŸýËËËt»]zè!xàüq>øÁÒï÷yä‘Gxիʦ%n\”ý KüZãË_þ2—/_æ®»îšÊûЇ>Ä=÷ÜÃ-·Üò+¸²%G© KüZãŽ;îà¶ÛnËÍ{ýë__’s‰¥‚.Q¢D‰¥‚.Q¢D‰%A—(Q¢Ä Š’ K”(QâEIÐ%J”(qƒ¢$è%J”¸AQt‰%JÜ ( ºD‰%nP”]¢D‰7(J‚.Q¢D‰ÿKôÉS2ÊE•IEND®B`‚mpmath-1.0.0/doc/source/plots/hi_c.py000066400000000000000000000001331316273626600174710ustar00rootroot00000000000000# Scorer function Hi(z) in the complex plane cplot(scorerhi, [-8,8], [-8,8], points=50000) mpmath-1.0.0/doc/source/plots/ker.png000066400000000000000000000330301316273626600175060ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíyx[åï?G’%[ònDZ/ &!„P¶°7)Né¤h S¶r§pïÌ´eè-0mïK Üf@( kÒ$”–`ÈâHbÇK;ÞeÉ–|î'²%Ç»%ë=?ÞÏóœçHGöÑïkGß¼~¿ïb˜¦ù'  F£Ñ(… Ëœç'»F£ÑÄâHvF£mÐF£(Ú 5FQ´Ak4¢hƒÖh4EÑ­Ñh4Š¢ Z£ÑhE´F£Ñ(Š6hF£QmÐF£(Ú 5FQ´Ak4¢hƒÖh4EÑ­Ñh4Š¢ Z£ÑhE´F£Ñ(Š6hF£QmÐF£(Ú 5FQ´Ak4¢hƒÖh4EÑ­Ñh4Š¢´A‡B!–.]ʽ÷Þ›ìR4fÊQÚ ï»ï>–-[–ì24&)(kÐ7n$??ŸÙ³g'»F£I ®d0¯¿þ:~¿Ÿ×^{ýû÷óµ¯}ŠŠ ***(--Åáp`š&ååå´µµáóùp¹\477“——7å×v¯Ù·Í‹g©‡ŒÜŒ ß/ RPP4‰¾ÖÞÞŽišJÔ¢µóßøîÝsÌ1JÔ¯káp˜ÎÎN:::èîîfëÖ­Iv¿(LÓÜb*̆ Ì{ï½7æÚé§Ÿž¤jFæãË>6׳Þl{·mR÷ùío§ŠÔD²>ÉÚLS¾¾ .¸ Ù%Ä l :ÂyçÇyçsÍëõ&©š‘I-O P ó´Ì ß§¤¤$^%)‰d}’µ|}ª¡lôH˜¦™ì†$bÐÁšà¤î‡ãQ޲HÖ'YÈ×—•••ìb°¥A———'»„!ñ”{«=¤\‘¬O²6¯Ot…BÉ.aH¢»8&ƒßïG9Ê"YŸdm _ŸjØÒ »ºº’]ÂÄË kkkãQ޲HÖ'YÈ×§65è,~ücض-Ù•ÄâÊuáô9'Ý=wîÜ8U¤&’õIÖòõ©†- ú³Ïšùå/Õ3hÃ0ð”{µ…µM¼¦²²2ŽU©‡d}’µ|}ªaKƒÎÌÌ ³3É… A<º9.\¯r”D²>ÉÚ@¾>Õ°¥A;VëTªAKb$듬 äëS [t_ŸªlГ釖ÄHÖ'YÈ×§¶4èŒ k¬¢Š±ÐÒƒÉú$kùúTÖÝÝÝ ¨iÐñèâÄHÖ'YÈ×§¶4èÜ\ÚÉú$kùúTÖ­rHè.rc¤“ꃖÄHÖ'YÈ×§¶4èžuCBÃaà)õÐs ‡¾@ß„î!=ˆ‘¬O²6¯O5liй¹VH¨èŒïnŽÚ‰usHb$듬 äëS [t{»º!!L¾Zz#YŸdm _ŸjØÒ  Ô aòc¡¥1’õIÖòõ©†- Ú4C8êôdÇBKb$듬 äëS [tWWééêtêÌÉuqHb$듬 äëS [tVVV¿A«¸ûUô^…d}’µ|}ªaKƒnnn&=úú 0¹µñ‚§Ôƒá2èþ¬{Bß/=ˆ‘¬O²6¯O5liÐyyy¤§[Uìæp¤8H=&•ž†ÂãßdSz#YŸdm _ŸjØÒ C¡Ò àíÀ¿kü¡Šô F²>ÉÚ@¾>Õ°¥AGBBP× Óæ¤ÐýÉø»9¤1’õIÖòõ©†+ÙL„¬¬¬þ¾gU Ú;çH ú“ñ·8¤1’õIÖòõ©†-[БÔ5èÉ´ ¥1’õIÖòõ©†- Zõ&ׂ–ÄHÖ'YÈ×§¶4h;„„îb7Ž4ÝŸtcŽs°¶ô F²>ÉÚ@¾>Õ°¥AG‡„ª®hg8 Òf§j jë{¥1’õIÖòõ©†- :2“ÔmAÃÄ»9¤1’õIÖòõ©†- Ú!!L<(”ÄHÖ'YÈ×§¶4h;„„0ñ´ô F²>ÉÚ@¾>Õ°¥AÛ!$H›=±´ô F²>ÉÚ@¾>Õ°¥AÛa&!Dµ Ç9Ý[z#YŸdm _ŸjØÒ íºò\¸r\tïêÆìûP;éAŒd}’µ|}ªaKƒnnn&#ÃzÜÖ–ÜZFÂ0 ¼s¼ôu÷¬ûöWÒƒÉú$kùúTÖ——Gžµ-!ÍÍÉ­e4&2’Cz#YŸdm _Ÿj(kÐ[¶lá†n`ùòåÜqÇ1¯…B!²²Àå‚C‡’Tà‰…ãÉ!=ˆ‘¬O²6¯O5”5è °bÅ V®\ɦM›b^ëêêÂ0 ?ššÔÜö*B$(ìÞ9ö´ô F²>ÉÚ@¾>ÕPÖ ž{î9–.]Ê¢E‹b®gee0m„BÐÞžŒêƆï][Ç>']z#YŸdm _Ÿj(mЗ_~9¯¼ò ›7o¦+jÑ;v°jÕ*Ls °šC‡ ºººÿϯH¡Âµþ)Ûª¶ù{ÿú׿*§#ž×*++•©Ekßµ§Ÿ~Z™Zâu­ªªŠ5kÖpÿý÷ӦبÃ4Í-Àüd2˜×^{—_~™žžRSSùõ¯ÝÿÚ5×\ÓO>É7¿ Ï> ›6Ág$±ØQxþût}ÔÅ¢ý‹pOw'»F3 oQewT¹è¢‹¸è¢‹†|-²V‡ËÏ·ž«¦Ÿ˜N×G]t}Ü5&ƒöûýx½Þ)¨,9HÖ'YÈ×§Jwq G¤»#bÐMMI,f øN²ú¡;?Û¬éAŒd}’µ|}ªaKƒŽ Á}â‘ ðã±…ÒƒÉú$kùúTÖÝ|dvŠmº8N²æ¥µ-}¶–d}’µ|}ªaKƒÎ;2Ð.-hw±WŽ ÿv?fhôAÛÒgkIÖ'YÈ×§¶4h»…„†a~R:}>º?}ŠôÙZ’õIÖòõ©†- :Ú¥ ýÐcéæÄHÖ'YÈ×§¶4èHHY0É}ÒØƒBéAŒd}’µ|}ªaKƒŽ„„dd¨ßÅÖXh[ Zz#YŸdm _ŸjØÒ #!!XÝmmÐۛĂƀoÞØ[ÐÒƒÉú$kùúTÖ Á>“UœéNRI%°'@¨#4â×Jb$듬 äëS [tôÂI3fXç}û’TÌ8ˆŒ‡me;éAŒd}’µ|}ªaKƒŽ„„³fYç={’TÌ8èŸò]5r?´ô F²>ÉÚ@¾>Õ°¥A7Gís5s¦uÞ»7)¥Œ‹ÌÓ3hg䬥1’õIÖòõ©†- ::$´S z¬-=ˆ‘¬O²6¯O5liÐÑ!¡ZÐ)y)¤ÍN£{W7½ÍÃ;‘ÄHÖ'YÈ×§¶4èè0bÐvhAdž9z+Zz#YŸdm _ŸjØÒ £CÂôtk¨]M ôõ%±¨1’yÆè-=ˆ‘¬O²6¯O5liÐÑ!!XýÐÁ ìߟ¤‚ÆÁX Zz#YŸdm _ŸjØÒ £CB°W?tú‰é8¼ÚßmÇ ½ô¨ô F²>ÉÚ@¾>Õ°¥AG‡„`¯~hÃeyj&áŽ0þC.ÒƒÉú$kùúTÖÂÀP;;´ aônéAŒd}’µ|}ªaKƒŽ Á^-hÝ ¥1’õIÖòõ©†- z¨ìׂnÛÔ6äëÒƒÉú$kùúTÖ=8$,/·ÎviA» ݤÎLÅ¿ÝO¨õè•í¤1’õIÖòõ©†- zpH˜–……P[ áp’Š'ýÝïÝÍ!=ˆ‘¬O²6¯O5liЃCB°ú¡C!¨¯Ÿúz&ÂHýÐÒƒÉú$kùúTÖ=8$öCG¦|o:Ú ¥1’õIÖòõ©†- zpHöÉ‘¾ ‡ÇAû;í˜fì„éAŒd}’µ|}ªaKƒ‚½f8ÜÒ¦j ѽ«;æ5éAŒd}’µ|}ªaKƒ‚½Ö…Ž0\7‡ô F²>ÉÚ@¾>Õ°¥A‚}ZÐYgZ}ém‰-=ˆ‘¬O²6¯O5liÐC…„ee`°{w š Ùdƒ‡_;Ó-=ˆ‘¬O²6¯O5liÐC…„TTX»{·´$¡¨ ’—Bæi™ë‚ø·üé(=ˆ‘¬O²6¯O5liÐC…„‘übË–),f’ä\”X­èÒƒÉú$kùúTÖ=TH]U5…ÅL’Ü‹s8üê€AKb$듬 äëS [ôP!!ÀÉ'[g;ý–yj&®lmo¶ö[óÔ¥1’õIÖòõ©†- z¨ìiÐ†Ë çK9ôûhÝØ Èb$듬 äëS ¥ zݺu\wÝu|ç;ßá®»îê¿>TH0m””ÀÎ0L#[Ir/²º9Z^³ÒMéAŒd}’µ|}ª¡´A/^¼˜Ç{Œ'žx‚ 6ô_.$«º¯>úh ŒƒŽôCKb$듬 äëS ¥ :ÂO<ÁW¿úÕþçÃ…„`Ï ÐSâÁ7χ§ŸÀÞ€ø F²>ÉÚ@¾>ÕPÞ õ«_á÷û¹å–[ú¯íÞ½›U«V±fÍV¯^ @uu5~¿ÿH?t%••×`àO3U¯5.hà½ÿ÷;wîT®¾x^«­­U¦­m|×^}õUej‰×µªª*Ö¬YÃý÷ßO[Ûл% Ã4Í-Àüd2O=õ?ûÙÏX²d N§“x€k®¹†'Ÿ|rÈï©«ƒÒR«%ýÁSXì$iYÛ‡_úüKó™÷ü¼d—£Ñ|.É[’Ò-è+¯¼’]»v±bÅŠ~s†áCB€3¬°ðã¡§g*ªŒYggáHsв®…ÍïmNv9 ErÐ$YÈ×§JôpŒ†5Ü®·¶oŸÂ¢&‰#ÕAöÙ„;Â86Ùå$ÉA“dm _ŸjØÒ G a (´Ûö‘Y…õ/Ùdß® "9h’¬ äëS [ôp3 #D&¬Øi$ ôöçmÔôŸ’g£IÖòõ©†- z¸™„N=Õ:¿ýöG¼³½¤ÏOgÚ§Óèü¸3Ùå$ ɳÑ$kùúTÖ=RHÖâýååV úðá¿T9 ®(à>áàLv) CrÐ$YÈ×§¶4è‘BB°‚Â/~LÖ¯Ÿ¢¢âDÁ· ˜Ã>sð¨Íd¥ 9h’¬ äëS [ôh!!ÀâÅÖyݺgRËSI9=…Àžïv$»œ„ 9h’¬ äëS [ôh!!X-h€?ÿ9ÁÅ$€Ð—¬ÿ€ü×$W’$M’µ|}ªaKƒ-$(*‚ã·V¶«·Ù¨µ3o>phÕ!̰¼nÉA“dm _ŸjØÒ G #ص›ckýVr–äÐs ‡Öõ­É.'îHš$kùúTÖ=ZH!ÒÍa7ƒ^¸p!Ó¯˜Èìæ4IÖòõ©†- z,!!ÀùçƒÃaõCÛi@„ßï'ÿ²|M«›è ö%»¤¸"9h’¬ äëS [ôXBB€ìl8åk…»]»\T©­­Å•å"÷˹„ÚB1ÊJ@rÐ$YÈ×§¶4豄„"ýÐk×&¨˜ b ®(7iErÐ$YÈ×§ 5è½{÷²råJþã?þƒ7ß|3n÷kHpñÅÖyÍš¸½}‰1y_ÉÙá¤é…&z›{“\Uü4IÖòõ©F ú–[naÅŠäåå1wî\*++¹úê«Ù¶mÛ¤ï=Öàì³aút«º©iÒo=%D‚gš“¿/¤/ÐGãï“\Uü4IÖòõ©†+Q7¾çž{ðz½ýÏ/¼ðB >!ÃXCB§.¿V¬€^€ï~wÒoŸpü~ÿÏnÆÍ3¨°žú‡ê)½­Ãe$¹ºÉ­O’µ|}ª‘°´×ëåøCÿóßþö·ý×'ËXCÂ_ûšuþã'ýÖSBtãë%炵Ašþd“?FArÐ$YÈ×§ íƒniiᦛnbùòåäççÇí¾ã Î=òó­ñÐvXÝnpSrK õ¿µÙ”Èa4IÖòõ©FB úüóÏç³Ï>ãСC\pÁq»ïxBB—Ëêæ…àOŠ[ cp“»4—´Š4Z7´Òù‘ý׉–4IÖòõ©FB ú¡‡âùçŸç‘Gáûßÿ~Üî;ž0‚º91†Ã ø¦bê°+ZrÐ$YÈ×§ 5è‡~˜´´4Š‹‹yæ™gâvßñ„„Î?òòà7 Uñå-† R‹¾S„ÓçäÀSè=lï!w’g£IÖòõ©F úúë¯ç÷¿ÿ=Ÿ|ò ûöícÆ Üzë­lÞ¼yÒ÷oH’—]fíöÇÿ+ÂPAŒ+ÛÅô¿ŸN_wÛ{Èä I²6¯O5fи\.}ôQ~ùË_²sçNn¿ýv¾ð…/LúÞã #\wu~è!µ×æ.ˆ™qó lÀ ),`$M’µ|}ª‘0ƒ^¿~=¿þõ¯û[»ü1¹¹¹q¹÷xC§žj­ÍññÇðÖ[q)%! ÄøŽ÷‘sašž¶ï*w’ƒ&ÉÚ@¾>ÕHØD•U«VñØc±lÙ²¸ß{"!!X{Þt,_>çœçÂâÄHAÌ̟̤åõöþt/WàpÛo9ÉA“dm _Ÿj$ìÓ‘‘Á­·ÞJyyyÿ/&FøÖ· 7V¯†FE»rG b²e‘ûå\{ì_¹ «Š’ƒ&ÉÚ@¾>Õ°_󋉅„ÒÒ¬t(¿û]‹Š#£1³îœÀÞ;÷îOEIqErÐ$YÈ×§¶4艆„®¿Þêîxä˨Uc´ &caÓ–M£§¡‡†‡¦¨ªø!9h’¬ äëS [ôDCÂÖ2¤õõÖJª1– fæÏf‚µw×î´W+ZrÐ$YÈ×§¶4艆„ÑÜt“u~ðÁIß*îŒ%ˆñàcú·§Ó{¨—ºßÖMAUñCrÐ$YÈ×§¶4èÉ„„.¾fÍ‚õëaûö8GÆÄÌüéL §Á¾ÛG¨UÁ¾ša4IÖòõ©†- z2!a§n¸Áz|s¾]\k“vl…Ë µ†Øó¯{\Uü4IÖòõ©†- z²!a„ï}ÏZ†ô€8lô7ÆÄ̺k®õÖÓ±¹#UÅÉA“dm _ŸjØÒ 'FÈÌ„ýÈšö}ûíq¹e\Oã.ps̽ǀ ;¿·3¬þpÉA“dm _ŸjØÒ ãF¸á(-µ6•}÷ݸÝvRŒ7ˆ)ún™gfÒYÙIýCê/G*9h’¬ äëS [tM@UñCrÐ$YÈ×§Jt]]Ë—/ç´ÓN‹¹¯0‚ËwÝe=ŽôI'“‰132O©‡CÕPÚ KJJX¹råQ}Îñ £¹ürøÂ`ófk!¥d2Ñ Æ™îdöƒ³¨^^M°QÍ®ÉA“dm _Ÿj(mÐÃÏ0‚aÀÝw[o» :’8bm2ALþ%ùßPLï¡^ª¯ªÆìS S}’ƒ&ÉÚ@¾>Õ°¥A×ÔÔ°jÕ*Ö¬YÃê#ÍÝêêêþ#ò¿üx¯-Y_úR%µµpà “¿ßD¯555Mê~÷W°ïØ}´¬kaýÿ^Ÿ4Ã]óûýÊÔ¢µïÚÛo¿­L-ñºVUUÅš5k¸ÿþûikkC)LÓÜb*JWW—ù½ï}Ï,++3o¸á3 š¦iš—^ziÂÞsÿ~ÓÌÉ1MÃ0Í·ÞJØÛŒÈŽ;&}ÎmæÆ´æç³õíÖ8T?â¡OU$k3Mùú®¾úêd—ƒÒ-h¯×ËÃ?LMM =ôn·ˆHÍôéð›ßXAáµ×B °·–x1¾ã}ÌþÙ˜a“WìPj­ÉA“dm _Ÿj(mÐш0š«®‚ /„êjøÅ/úVC¯ ¦ð»…LûÆ45v\¹C™f%M’µ|}ªaKƒNDHMd1Ÿî¹>ú(¡owñ b Ãà¸GÃ;×Kóÿ4³ëû»0“=†ÙA“dm _ŸjØÒ ã9“p8f΄_þÒÚqåê«§¶«#ž³µ\Y.Nzå$ÜÓÝ4<ÜÀ¾{÷ÅíÞEòl4ÉÚ@¾>Õ°¥AÇ{&ápÜtœwlÙßÿþ”¼%ÿÙZ©3S9ñNÄés²û‡»9ðŸâzÿñ"y6šdm _ŸjØÒ FãtÂ3Ï@a¡µÁìÊ•Sò¶ b2NÉàøgÇpT_SMËú–¸¿ÇX‘4IÖòõ©†- :Ñ!a4……ðì³–Yßt“ÕšN4‰ bò¾œÇì³1{M¶]¶®­Só—È`$M’µ|}ªaKƒNtH8˜sαv] `Ù2hmMìû%2ˆ)¾®˜òÛË µ…øhéGtïéNØ{ ‡ä I²6¯O5liÐSæÖ[­õ:vﶆá…¸‘v¢ƒ˜™?ŸIáÕ…ë‚TUE×¶©mIKš$kùúTÖ=U!a4†O<sæÀK/YÛe%jÄZ¢ƒÃ08îñã(º¶ˆžÆªÎ­¢ýÝö„¾g4’ƒ&ÉÚ@¾>Õ°¥AOUH8˜ÌLxõU(*‚LJú§Ä˜ôT1†Ó`Σs(ý?¥„‡øpñ‡´¬›šàPrÐ$YÈ×§¶4è© 3k¼ñäæÂ}÷%fGð© b àâß*8æîcw…ùèËqèùC _ÉA“dm _ŸjØÒ §:$Ì 'ÀË/[3 øCxøáøÞªƒ˜²)cΊ9Ö莯m£ñw }?ÉA“dm _ŸjØÒ “æôÓá…Àí†o´ÆKÇ‹d1Å×süá0ØyÝNv~o'}¾„¼—ä I²6¯O5liÐÉ ‡bñb˘ ÃÙñ ñ¹o²‚˜‚o0í|ÜÓÝ4>ÚHåY• †'9h’¬ äëS [t²B¡¸ì2k†a(d Ã{ä‘Éß3™ALöyÙœRu YçdÑYÙɧ|@óËñíó—4IÖòõ©†- :™!áP\}5ü×Y›Ï^ýä7žMvã)ò0Ý|Jÿw)¡–ÿíÇìù×=q[®4Ùú‰dm _ŸjØÒ “Å·¾¯¿ÙÙÖÞ†W]==»— AŒ#ÅAÅ¿WpÂêpf8©¹«†Ê3*騚üf*èK’µ|}ªáJv¡ú`5K~¿·ÓÝx\ž˜çý×G_÷8=dx2ÈNÍ&;5›œÔ²S³Éôdât8'\×yçÁ_ÿ K—ÂÓOCc#<÷Œ·GÆï÷ãõz'\G<™vù4|ó|T_SMû¦v*O­¤ä%ÌüéLœ¾‰ý¬TÒo$kùúTÖÝÔÖÄ»{ÞMȽ3=™1¦=ø|}šoEéEd§fcÇ›6Áßþ-üùÏpöÙ°zµ5q¬ÔÖÖ*Õ×çãåä·N¦á‘vÿónöÝ·Cÿ}ˆ9Ï!÷¢ÜqßO5}ñD²6¯O5 Ó4·ó“]Èx¸âª+¸óÿÞIO¸‡žpÁP°ÿñà#>úµ`8H{°Ö@kÌÑÒÝBk •¶àøwöõ8=¦R”QDaz!ùž"6¼Xħ[ŠðôòÃïqÝ·Š(ðàrØòÿE‚õAvݲ‹¦ç¬Ç ¾]À±¿>w;É•i4“çšk®áÉ'ŸLvýØÒ):[;96÷Ø„Ý?ܦ£§ã(ãî?‚Öµ–@ ‡ºÑØÙHcG#5m5Ô´Õ Ü¨Ì:‚ÀOà§¿£¿Õ1ó¢ô"ŠÒ‹ú ¾mOs‘’Fî™áaÞêy4­ib×Í»8øŸ9üÊaÊTNñÅ8½£w{TVVŠíË”¬ äëS [¶ Uû_.Bo¸—ƒ]û {ç~;©ü¤‘×Þn$àÚ+»#s?½}#'ˆÃÁŒŒ”g—S–UFyV9åYGg[}nß)šP{ˆ=?ÚCýŠzèw¡›²–QüÅ8Rm™?k>ç¨æ-ê5ÑÆ€ 3 ‡"řŒÌÌÈœûÂyÐ|9,_ú¸RLnÿéa–]½Ÿ¦`¬™7t4Ps¨†º@õõìk~Á¼´¼Ãî7ò#¦>Í; Ã0¦×•ébö³)¾©˜šŸÕppÕA>ý_Ÿ²ïß÷Qþãr —âpmÔ’ƒ&ÉÚ@¾>Õ°e ú²Ë.ãùçŸOvãÆ4áÁá¶Û¬!xsçÂX3£©®®fîܹô†{©k¯£¶­Öê>iµºP"ÏkÛj „†ßÍ6Í•FYVYŒ‰G·ÂgdÌ Å™7}u²÷'{iZcõO§ÎL¥ü_Ë™þwÓqxŒ:¢O"’µ|}ªµ miЪýÇËÎÖ&´o¼a=ÿÆ7àþû¡¤d|÷1M“CþCýÆ]ÓZCm{mŒ‘î><ì÷; ÅÅ1­îˆ‰Gž§»ÓÇ­¯ãƒöܱ‡Ã/[ï2-…¢åE}¯ˆ´Yi㾟F3U¨æ-¶4èK.¹„_|1ÙeL Ó´†ßýàPWg­ŒwVAò®IDATÇðÿ[·Æ/ˆévÄ´¸ûüÈㆎúÌáEÊIÍéoq—e•Q–YÓ*/L/Äa ÝßÜþN;µÿVKóŸš1Ã&»4—¦ ›¸àæ 0œ‰ë~IÒC4éú´AÇÕ~ˆ“¡« îºËjA÷öZÝ÷Ý_þ²µS¢é ÷RßQ?d+¼¶­–Ú¶ZºCÃ/˜”âH¡$³$Æ´£M¼,« ×A 5ÐøX#=V8šZžJÑ?QôÝ"ÜÓõ=¨æ-¶4è+¯¼’§žz*ÙeÄ•;áæ›aíZ?'ŸìåöÛáÒKÁ‘ĦiÒÜÝlµ¸#¦Ý^óü@×ï 3gúfrÚŽÓ¨x¥‚iUÓ¬S¬ÝƧ-›Fþ%ù¸²m™[÷#=D“®Ot°kH8¦ /¾?úQ5Û¶YAÌñÇÃlõS»õ®@(0f2ñÈf6A‰QÂ%›/áâ-“Ù @ئq~#_ìÀs±‡’™%”g•SšUŠ7Ŧ =D“®OtPí‡oLÓZxéÎ;­µ=Ž=ÖÚ½åÊ+­MìD$ÌŒ6ìHŸx}S=Yd1¿j>gí<‹,¿µpIØæÃòÙxüFÞšûŽéŽn”##Q¢_Á°}áÍXQÍ[liÐB‘ˆ1¦ o¾iõQ[]0mšµRÞòåÖÖ[vd¨ ©»·›ÚõԽQGçŸ:I[›†»e࢚i5Tͬ¢jV[fn¡Ý» ¹Çé¡4«´ß°‹3Š)ô L½•2Ym’®OtPí‡8¼ó޵Aí‹/B8l];ýt˨¿ùÍñ¯˜§:fؤíí6šV7qøÕÃøwÆnµä?ÖOã¼F¶»wf¼Ã'½ŸÐäoõ¾éîôÃŽLµü|šoš’Sí5‰E5o±¥AK £)ˆÙ¿þðxüq+XHKƒ¯Ý2ësϚѓa"AS°!HëúVZ×·Ò²¾…Àî¨>mÒONÇ·ÈG`N€¦YM46²?hÍÎÜß¹?æh ´Žú~‘5S†2ðÁ×2=™ý36¥‡hÒõiƒŽRCÂc bLÓZÖtåJXµ :;­ëååðÕ¯ÂW¾b­OíñLAÁã$AS &ÐoÖ­ë[ î Æ¼îð8ðÍó‘~r:é ÓÉ89ßI>œ^'ݽÝè:p”qeæ=áÑw]Hs¥õ›µ·ÍËÌcg’›–K^Z¹i¹Öco^̵´{NØÑ!áÔbKƒV퇘l:;á´Ìú­·®û|pá…–YùËPX˜¼‰išvèx¿ƒŽª:«:é¬ì¤·¹7ö àëµÌúDi³ÓH;6´Š´!70M“–@˘Œ|,Ý+ѤºR‡4ð£Œ}ÐפºR'ó£ÒŒ‚jÞbKƒþ¼„„¡±^~^zÉšJ½ú©§Zf}î¹Öc_’Ã›Š É4M‚uA:+;é¬ê¤£Ò2î`]pȯw¹-³Ž>f[æíʽ/º7ÜË®lÜ´‘‚c hînæp÷awŽ}ìx|¸û0a3<.]i®´! =Ó“Iº; wž 2ÜÖó#£¯ùܾ xÑ!áÔbKƒV퇨*lÜh™õ‹/BMÔRÕN'œt,Zgži³f©ß=YzõÐYÕ‰‡ŸîO»ûÀž€5}R RH«HÃSâÁ]èÆ]äÆSäÁ]äîž’Ÿ‚á߯Ïì£#Ø1¬gò‡»8=,DÌ|°‰iò#˜~º;twº˜!Žªy‹²í÷û¹öÚkÉÌÌ$''‡»ï¾»ÿµÏsH8QL¶o‡W_…·ß¶ú¯c¿¦ `À¬O?Ýš$3mZüM[Å ©¯·`mÐ2ì]Ý1æÝ½»³wäÍ §AÊôÌé&™32û»ßħ¹qf9qe¹pe¹pf8Çmèýµš}´Ûc ½=ØNGO=t;èèé8úyðÈó#;z:õséÞ^`ˆS]©xœR]©ý‡Ç5ð|\¯Mà>§'.KëªfÐÊŽ#zöÙg¹ôÒKùÆ7¾Áõ×_Omm-eeetEÿÝ.DìûfÖ¸éN°–;5M¨­0ëM›`Ëxá눛k­ò7c#gδZáAÅ}í)Ò*¬. .Š}Í [Ý%Á† ==ôìï‰9ƒôìï¡÷@/5 5”U•þ††µžv´i»²˜÷לN©©©”¤–P–^†#ßá6&dPÁPpÀ¼ƒtÚèð·Ðáo¥3Ðn=´Ól§3ØI]MŽ<ƒŽÞN:{»èuÑòèë!꡵ç0A³wô7NnÓIªé$'nÓI RLƒÓqä±£ÿ±ÛŒzíÈù+³ÿ6)u„²]WWÇ¿øEÊËËÙ·o_¿AgIô;ˆ©0/ðF|”—ÃWX×ü~øàˬ?øª«­¡|o¿mѸÝÖF¸sçÂqÇAi)øjæ<†Ó µ<•Ôò‘:3lÒÛÔ{”q÷4öÐÛÜK¸-L¨-D¨5dÛBkƒº_|¼8\}Ž0g‡#„Ãá0zqЋƒ ޾fÃìÁaqô­³À’aÈ$ ˜˜GÎ}ƒÎ™€ ø†x­ïÈk}„ “^gäè£×a{"Ï&=N“ž¨k=.“à‘ë½NƒÖÙiÐóøÈs‡Aoä¹óÈs‡AÈi=Ç´†K¦ÑÿÓ ƒÞA¯Wíݾì¸ü.â…²]ZZJMM ‹-¢¦¦†ÒÒÒþ×vìØÁªU«ðx<„Ãa–-[Fuu5eeex½Þþ îך››9묳’RË9çxñù*ù§²®Í˜QÆ¡C^^z©’Ph!ï¼SM]]»vyÙºµ’­[ÕX0zJ`!†QÍôée””xñz+9þø…¸ÝÕÌ[F8\MNœvÚB¨æoþ¦ŒÜ\/UUÉÿÙOöZu}5 /\@õûïSvªo @å{ï±0/ê;(3 ¼TîÚÅɆƒmµ)ö;pw»ø ­“y½Yì( g‘B6ÒÍ\Êù„n (ămìç8*ØMÓ‘kìÕ1›¹ìf?Ó(!•t>áæ0‡Zj) œTR]+×µµ¬e KFÿ^󿄿Pþ뼤Ru­(êëNš`}¹$ÈðQQ½§7áFÉCé>èë®»Žììl222¸çž{ú_S­ŸèóJS“ÕÊÞµ ¬£¾~àñþý³GÃ傌 ÈÌýHO‡”ë{\®ØÇƒá^‹¾nšV‘£¯oÐóŽ.qlÄÑ|Gëam-8Û[pµÆÙÞ‚³£…”öø:[Hé8LŠ¿ ùßz(ú =./A— ÓKÀé#àðpxñ>º /~|ø /]¦—.ÓG§é¥³ÏKgŸŽ°—¶°Ž^/]¡4xé%^Òá!Œ'Üô‘BîA‡úÏч:3¦×ÁÀöì4Àå4q:Àå°Î†ÃZÅÑp8àp¹æ´žNŽ\xÝá‡Ãxì´þŠs8 .ëë.ë¹Óõ5.§¦-Î⾿ܦ”·(Û‚öz½<ýôÓC¾¦êž„ñBÅm(òóáì³­c(Âa8thÀ°#GMŸ¶6/ííı#M‹IÑHÓ0äã4Iǘïꂤ³ŸZÈá0¹1ç᮵’M'éô˜nè5¬0nœ¤¤X‡Û)éV7”Û}äš|)G_|í5Óô“žîó×öšË¥ØÈ¡¿$»€X”5è‘Ð!¡=p:­É1……=t¶ºzx}á°5ñf°yGÖæ¡ÐÐG¸·oû~rÛö×¾‡,YþFrºÈ 4’´oßèÿŽºœÔ¥Îápj1­iE´§à÷äàOÍ¥ûÈ9–cÞ\È~"Î#­7g+Î2#_ ä c^“1»©2º‘~wšøcKƒÖ!¡½IŸÓi-ü4꯸³ö챎ݻ­£öÈyÏkøHää@Q9YGqñÀã¨ç>Ÿ0öí" Æü•vDú¿MÕ°¥A777'»„„"}¶Ö˜ô…ÃV‡vÄp#&9þ{óòàÄá˜c¬ñ€%%±æ[Xh­0•ôïNOliÐyyyÉ.!¡HÿÄè …à³Ï`Û¶cëV+yìf¡¢”kŒß1ÇXǬY±“øÖçêw§I8¶4hÚ¾>«%¼u+þª*¼»vYf\] Á!Æçç[ÛÈDŒ7ú(.žø,™#òw…t}ªaKƒÖ!¡ÂôõYS#-áH«xÇè¶v¯úÕååYóÊ#ÓçͳÎùùÉR0)lý»Òõ©†- Z‡„Š`šðé§ðþûÇ–-±KèEÈζ†rœps£Í¸ @±qV“Ã6¿» "]ŸjØÒ uH˜LÓ í¢Íxófh´;Iz:œqÆ@‹8r÷±’úâ„dm _ŸjØÒ uH847Çšñûï[S£IMµ–¾;õÔcölkÐï(¡/AHÖòõ©†- Z‡„q¦«Ëj G›ñž=±_ãt‚±f| ֈŠq"9h’¬ äëS [´ 'Io/¼÷¬[g›6Y×¢9î¸X3^° nc‡%M’µ|}ªaKƒÖ!á8éë³FT¬[k×›oì2 Öˆ‰sÏ…ÓN³Ìø”S:–Xò\²6¯O5liÐ:${öXf¼nüùÏÖªE|>Xº/†%K¬Yw£ôÇÉA“dm _ŸjØÒ uH8ZF鶈îCv¹àœs,C^¼Øj)»Ýñ+xœHþ€KÖòõ©†- Z‡„Xks¾ùæ€!ôQìë  ò9çXÃßArÐ$YÈ×§¶4èÏeHØÓï¼3ÐmñÞ{Ö:** ù‚ ¬Ý^ErÐ$YÈ×§¶4èÏEHØ×~8`Èù‹µi`„éÓá‹_0å™3“Vïx‘ü—¬ äëS [´È02mzÝ:*ÿû¿Y¸e‹5Y$BF\rÉ€!Ÿp‚m§HKš$kùúTÖ-&$llöÖ®…}ûXVˆwþù†|ê©VØ'ÉpÉÚ@¾>Õ°å'Þ¶!a[lØ0ìmß>ðšaXã/ÆÖYx—,¡aŒä I²6¯O5liж xûíC~ÿ}«o9œ9±Á^n.µÕÕÌü!4IÖòõ©†- ZÙ0†ÊÊC~ë­Ø½ñŠŠ¬‰!S.z§;éÉú$kùúTÖ­LHhš°sç@ò† ±ËofeÁÅòܹc ö¤1’õIÖòõ©†- :©!a]ìE†¿54 ¼æñ ˜ñâÅÖõö¤$듬 äëS [ô”†„55°q£Õ:Þ¸ÑÚQ:‚ÃaM›Ž¬i±h‘µFò$‘ÄHÖ'YÈ×§¶4è„…„¦ {÷˜ñ† –AG3ož5ümÉ8ïû,¶…|d,2`õÏŸoñùç[kZLÁf¦Ò?’õIÖòõ©†- zB!adO½-[ŽwÞ±®E0 8ùäXC>2ôm*‘ÄHÖ'YÈ×§¶4èQCÂÞ^ktE´ž: Vò)§Xf|ÞypöÙ““°ºÇŠô€d}’µ|}ªaKƒµ·[#)¬éÒ ±G]µú[4n·5ªbÁë˜?ß:gf&GÄHb$듬 äëS [tׇZ#'†#?N:iÀŒ,°Æ O`ƒÓd =ˆ‘¬O²6¯O5liÐY¥¥VÿpQ[Gäqaa\†º%éÉú$kùúTÖÝœ‘O>™ì2†ô F²>ÉÚ@¾>Õ˜ºB㈘åF‡Aú@²>ÉÚ@¾>Õ°¥AÛv¹Ñ1âÞ9E ’õIÖòõ©†- Ú6ËNÚÚÚd—P$듬 äëS [´²ËÆ éAŒd}’µ|}ª¡´Aß|óÍwÜq8p æzÍàõ1„±zõêd—P$듬 äëkkkKv 1(mÐ<ð‹-:êºaÓÍRÇŠÓéLv E²>ÉÚ@¾>Õ Z‰av{öìáÆoŒ¹vÕUWñío8Úû¢·H0Lv E²>ÉÚ@¾>Õ0LÓÜÌOv!Ãñï|‡{éÓ§÷_›7o€Õ-­Oº­­Mœ¦h$듬 dêkkkëo9(~-L´AkÄR__OVV–ÞDc[´AkDòè£rÆgðä“Orë­·Šß&M#=ÌN£ÑhE· 5FQ´Ak4¢hƒÖh4EÑ­Ñh4Š¢ Z£ÑhE´F£Ñ(Š6hF£QmÐF£(Ú 5FQ´Ak4¢hƒÖh4EÑ­Ñh4Šòÿ¸] ñè4IEND®B`‚mpmath-1.0.0/doc/source/plots/ker.py000066400000000000000000000003051316273626600173510ustar00rootroot00000000000000# Kelvin functions ker_n(x) and kei_n(x) on the real line for n=0,2 f0 = lambda x: ker(0,x) f1 = lambda x: kei(0,x) f2 = lambda x: ker(2,x) f3 = lambda x: kei(2,x) plot([f0,f1,f2,f3],[0,5],[-1,4]) mpmath-1.0.0/doc/source/plots/kleinj.png000066400000000000000000002270711316273626600202130ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìÝg”×}çýu:‡éÉy€A"01(0(‘²eËÊk?ÏZÁë´{lkŸµ½^9ÊAZK¢-›’lk-‹¢EJƒ‚Aä<9õLÏtîJ÷lÉ-‘HÖ眞>§û p uë‡;ÿºuKh­¿ ‰D"‘ ŠÉj8o?ß ‰D"‘È÷“绑H$ùÁ¢€ŽD"‘ TБH$rŠ:‰D.PQ@G"‘È* èH$¹@E‰D"¨( #‘Hät$‰\ ¢€ŽD"‘ TБH$rŠ:‰D.PQ@G"‘È* èH$¹@E‰D"¨( #‘Hät$‰\ ¢€ŽD"‘ TБH$rŠ:‰D.PQ@G"‘È* èH$¹@™ç»çÓÔÔ¿ú«¿Ê¡C‡Ø³gÏ?~®”âø¦i†!ögv[‰D^ª^Ò#èþþ~î¼óN …Â÷}þðónÝ:>ùÉO222ÂÃ?|žZ‰D^Ê^ÒýÃLMMÑßßÀðð0“““ç¹E‘Hä¥è%]âøaxì±ÇãꫯþÇïz{{‘RbY±X ÇqÎW3Ÿu®ëž÷ý€@k…„ ¯§|!ÇKûLöÓ¾ÿ,­þµxÅ,©øzàâI‡ùW2Jbšbuc@¹\&›Í¢5„^@cr–ûµIÒÿ×Nµ!.ÞB}9G¾'$÷9Ξ={¾›qAxI ‰ŸúÔ§~àwŸþô§ŸçÖ¼ø†A2't]üªfq³À¼iÞÁä)ŸÏžø.¿yøaNñ,ïìù;CmÝÄJ¹L.=ÇæãtþEoÿÔ§¸úë&[_]&våûØø¶"ů%©sÄ0ù¾˜Ôðýc]qÖVÆw ³ø‰ïQûßçú÷ÿ ŸƒüÖ¯¿’w­|›csW «÷±¦c†›.ùäk2¼Ñ¸˜ê•ß %º¸òó§Xÿ®+ùµÇ¨Ý·Ä†Ù<é—i¹JGÄÈç%Ð?ªöööóÝ„çÄs±_R ’É8E×bËp·½îræî„±¯e¸þ£·b´¥Mߨä¿_ÄÛÆâOö¹ìVÛø×ÌÓ>Fât?ßXy+åßpÝú »øíì2{>¢]|Ùn´ „ø×¡ø/G™B Û Ûå /å¦ü~·y¹ÿÚÏ/¾÷øÞog÷ÕOò3‹_ÁÈî"ØpÊ—$}j¡¢Cïàé¯~‡o캙ðÒ­¼ìäå|~]™—m±1¬§Èœø íç´ÝK~q…†D‹gtýb퇱Xì|7á‚ôàÅzb@\ðrð•¤6ÉKÚ¦91y;oú²âšË¾Å &Ç¿Dåÿ»‘Oö¾Ÿ…í;¸]xì(é.,9óô±°|÷0ªg{Wú9tD0·÷4Ýìç”ón|õ}{ã&^ý»wñD×5´ì8hX(>{µÕk?|±ÔÕŸ Q@Gž5ñîöR†Öd óX’ÿôD5³;Ëõ÷ìf÷ƒM’CÎ×à{}h»V) ­4gQ˜åmGŽÒL}“FïNŸècßáEkÒj6i;|Ðcß;`RßN¬¼žµ8qSbÄÿž‰IPRà‹ö’ŵåEÛãÌ«Oð·©|õî6.Iéû‰?cÃæ.;ô*ü7°xY‰¶½M©_Ã뎳ßÜÏO=Rå½'¾Dý}×bôìdúUo¥g³GÊy¿e$0þð lbuÔ®BÍw~÷ôÓ, ÌמëCy‹:òcë\X ¶ckÞ´†¥ûL×ãeŸÚŠëk4éëNÒ3ø_¼çËã¯eÇÁkyuwò€KÆŒ!-74<Ÿ3] LÝ4Îô-VŠQùø~܃‹œ}b˜}§ßšÎ,}_›gƒ¤ºõ$n‹ëó²8B ˆ4Œþç´Fb[¢³Êr{…gš<¶|3 FyíÃ’×ïý;gã$ûÕJû^;L=þunYù.¯¿ór.ž^Oðª1Žø¯e›ã½Îqæ_—$%Ùp„˜ˆýão«¥FHxÏ»ÞÍô¯¾…?ù‰;hüý=l•£LMO?§Ç'òÂtäGÒeIôlç “ {€Ëßø[ø~™ÿÝ}ÏÜñ67 ŽT|òóYê“ î¾…ÿñd÷ÝŸ¡±ù,ÃÕײ2¶™ÆÐ"ÙI%)I-IËSôneüfÎÌñg ˆ“Ã7ðH×µÜâ•9“‘“2~“¶A»ÓÆÊ“h ?¤æ«Ñ 5*”¸¡C#p¨ÖÛˆO¯aóþ›Ÿ(³iù]¹³„+1‚bcxpi'<ÃNû 6›ûÍ5yÃå-¾~ÃîÛ}oZÙÂ%ñÑSÀ–Æ«9›þó]®MÐ5ØdÍÆ× ¿û§Hs”·ÆÊtñ9&ÈÚ7,-ј ô¿IëÕ9ÌJh„ð‰±š&½èÑ¿TG‹"áð‚Ä÷‚½„ªAùØ<˧Q™ É>Ö¹…O|W^QšfË$(wpÉâQŽýô1ŽºƒÎÃ{xSáͬi—ÌM¼ìU5îÿö£t¡1ª?Ï=!r>DùÒ =ؽíôw_L¥÷)ŽUò¤ßãu‹ôÍÞŽýºéOç9õÁ»ˆ}úå$öVð?ô·<4²ƒØîÿJþË_G[ޱö>¶·ía÷IÉÓm\vÙgØØxåé4ët>:ŒïjJRslKš•Q“îÞ®ØêÂÑYIbLvÁ9bc’ƒ]]íÈ|#Y@¥Ú¨årù$* ¶ÙÂV íÙøR£ÍSk |¾ p„ãø+6õ0‹+“icVw3­F™òŒ×|ffÁ;àÒ»g’MÍ¿gù¦ žÚtWæé$GEŽÑdœµíIúÛ¡;§èN¸dàÇ-¡4Ê00”Âúx~@Õ19Ñ·Íu4SGi›ÙÏøÅúŽHƆO3±nî".›»¹m†–©áv¬iï|wÈó( èÈ÷¢»»›Âø(ñuýäGM®lÏâÉž¶PækHßÔâ†T;ùNfnåu=i×ìÙ¹•ÑÆ{èé#å fi¼¥Ì=‹<óäuŒþÚE¼÷[_g |šöt u²S!†j¡3R,uä8èUXXnšxpŽ» c¹=‘Ç÷24ëY‚î6‚Î6<'A`˜‰D¬A\øÈº‰R1<ÐŽVà ßÄOV•¸í‘¬PŠ–Üz‚F+F¹ÞNªR˜ ‰ô)[æ²¥eFºLŠñyÚ6|ƒ=“XÉ‹qŒaL£ÓL“4ÒÊ"ÙÌ`ܘ´< _‰ÄE7ªNHÎ2XX‡\üø4ùÚnü¿7©>êpß[vZ_¥ñÅMäªóyæktÏ49»!K­§À¥ß­áf&˜ëΟï®yD`ppÁÁAFG×188ø}“ 4ta¨ñå rm…Må$öŽ6FÄzÖkì®æœëØ|p7oò1c·õ²çÊ$÷Ö×"ÿDŸ©(%HÞÿWžG¹.Ê_&¡¦¨Ä1kRê´7S'4饒úÂp' ?LáMß)‘)»S鬓IWÈ §a¡kZRàÚ€n‘B«@§hI“ZLà'ê¤R-âËšþ†Cº”¦££oÞbajs›ôÔBrÆÚ_f¨,Ùà7“‡Ya‰}ô¨>zk}t7zȹƒÈ°ƒJ2ŽŸðÉ꺧¥MB§‰SmѬ¦™Ž%°†O±¤Áh?@y×RZ9ÖË7rðò_¥ýÞ“|sE¸í4ñJ7¥+¶s}>ËÕ;ãxù&;˜œœdbbâ¼õ™Ès/ è—¸îj…5ýý¬¿ñF†‡‡Õ9»ÿœ„ÒSI|;M!£©YÝ /&È­f¶ˆŽê ]óÛÖŒ¶¹L]6À^c=Éàvœ£#lO7)‹5€¬/¡Ì-}å'X§VØô”Å£vb»Éؾ6ìÊ.–åF&Â.VÌ$f^ëƒø°&¿Ú‡êä;jÄœq\Òb1‰ReSæB7WW kz˜*IÓ¯=AÍX"—­‘õjµ:™’AʋѤi)_h «‰´&ðÔü ŠqVÒõ”ÉÚšE–˜B‘ð|¬ºÂRøvKÙ<õœ$fɹ.ºnS ÊjÐcTIŽ{Ȱƒ=–ât¡IåÊÍZŽ´8ÁÂø_Ðþ•UÎÑ.¦¸ôe’G¯}?¹É‹øèŽ*ù^¬+ ârÖ³ºÒâßûK&fg {ºŸ÷¾yîEýÖÛÖǵ›.aíÆìsáüo –2Ð1…¤I&<Y“&k*åéÉ­`äÇYÞÔË3ÉÒ»˜Á[ÈO)®ì»QB‡.:#Ñ9?˜¢^.c-eýb­0•ÊóÙuT³½”z5¥s­¢c£A×KGgƒx¡F#¾H›¬Ð¦5õæl€nähXå„Fˆ©ë„Z#\áåÐÊ¢fظm9–E‘B¡F»¨7VÐ~Ùp,¢e e”°å¦_GLIäCò°HÛAZèØ:Êmë™jë¤T0pR+t‹yÔ²F-·Q¶ÍØ©9µ@ßÉ^–KÝÌ™Wò´¿£sÛ軟Þà Ô—×òW³ïä:‘`ûØ8¹]%œ‚gË`ü³Svxx˜ÆW‘ýüýL-¸,vF·H¿ØDýÔÛÛÉÆÍCtæºX7´™ü-ä#$h-±…"H(£Paë:‰ÁE*m6g²}¸A/]ã£t0Øí˜A4ŽA¦ ëlÄ ‡Nz4*KÌͳxÚ <•§´ì°Ã<+ŽcnÔ˜k+ÄûSøm7Ñ e–вJ–!£¿š&>­`1Ihd)ÚPMj¤nbé¡ÖH¨•q‚4Ì4ÍTQ¤«Ó·¡A.³‚‘[†ø Äê`7¢ŽuDË…’hfaª âCÝŒßv1‹…NŠ=»»NÊ:Á°ª"LÔÊ Ë¡֗bÅXbgß2©“gÙ6=Hbº‘±6&ú‰ä:Á—ßÕàžf‹jå:<'k&—ÉwÅÑ©824ù—Ët_}§ŸH±äž!Þû0zÆ v>«ý%rþDýSj+ân1¸~Ý ·™H¹zºÿ˲ƿM ÐhS ›D ª‰ÑÑ fÂÓI+ÌÒ6ÝFö„É@è³¶mŽ„µ•˜Am4ñ7Ç™nw9&}ö—‡»2L´ á—;Y_#?pœâŽ ƒ¨÷&ÐmÒqH ‡m²NÇÙ¦2 ”³$&Ì&кÇaÆÑø&Ô‰©*>;]-‘òsˆPPÕ‘Nñ¦Y`"Vgx Iw¦E¶¿…8QGŸ¬¢ÏÔQz^@+ ‡á&4S¶72Yïâ å0ßöhH:7F\k†è Usi¨ E›F‡™-²s{ kâ0ŽeõñUù8µÞƒÓ<0x*¬s¬<Œ)ûI&4½ÂG* äêM8ç²e³´n3™ýOÓk÷’.Lsf¡Ä"mÏ~ç‰<~‰h+Ôé³OðÔÙ½#kÉY1,ÿ‘·' –V# LÔ AU´ã7mÒ q²3šö0 -;ƒ% §k%õõ)Že|—.»=“qw€åÄ&üÚ£‹piͤgvíϱà)M^gÐyFuž‘¦¦£dâœ5a* òø±v¦ÁbA#¡*(QÁÓKƒ®(,¿ƒ´Ÿb¼¦©Š8õ¡AjN… ]⌜c$ÛdM¼EO¶E²ÝE%|‚P– h¤0ôfk'+r ‡Œ<{ “Ù!…³Ò=3ør?ÔÆ’‰šK@£E¨BЧ žïgAìAöÙrý2j¹Œ®‚!\Rz‘dÙ¤s·Íp½H£óIbñmxäš#’¸I…%L!ÑB£}h…>Ù]‡iÊïP?\cÃh‚‘Ën£elåñÇžLòôK@[%Ζƒë˜]ʦ!ŸËrë)˜Ö¾ÕíßKœ[ ßP„Bãáà6Ô ²A[Y‘ bÉ´qµf Õo0בâpÜc·ÒTL˜CT¬í°ØGêPÀšbu”ÈO%yxšm̯.aC‘l¤*.‰ù&Ƙ‰šN ü<26À¼ã¬•n…ÓH½‚¡Ëx@\k¨Ö^m^’˜¯©6 ®ÒÔ×Sµ˜T5ÎêeN 6·5Ù`ºdüoA៑ LÝCÓïã™zŠï ˜VØ;$éµóÖ^rá ÚDˆ\°Q 9hÔ1TÈ¢T‡;©ú(éý¨5e.ºiݪ¡«-ä<ˆñòž6†va öbö  Û‡©utS0I§êÈ–2L´Ð¸‡U*²î›ôãïÀ2þ g­¤°e¡9D,1‰¸¯Œ^rŸ¥žy¾Eý"/Hm¼ž¯/N0òŸ/)‘³†@üx‡^¯9ÐÂ@…BÜ$Zí71¬ "UDeŠ„I—zÖa2žä°ð9¬l¦D_Œk®§u¼€÷ ¦çH…í*ɰìÁªp-O…¤\Ó¦© QôÓMôB ‚ˆ ³ìç9ë ¦r ˜²Ž¡–‰‹2Þ¹»ø´º2KÊ+Ðá&+iª® îæ¨l¦W4´Ç˜^aL/°dú\Ô®Höhüx€RSä9Zܯ›ìo„—™d¶•Ó{1ÙM›.ÓæÙÈ9 UШ ê  &µëv0Æn§‰­©Ñ»Ù'<¡³yìÚN˜ÞŒò7Po 2[ϳlä°ÖÚ³‹ä½·ÚN+ã“ô¾öóqvnØÉµ]×’Mí¢ëªíüÍ—þ†jµúluµÈs, è™T*Åoy'o'g§þ㻓ÁÊopÕAA*U"Û™Å2M6ÿž§ü0«%ÅêºL| .’†¶©©4®†Ñ’Ø+»(q&!~Ja+2 Ѓ`}Öè&©Öø%” ÐÚBTMd€©AIÐ´Õ ö„#¬„yÎø’¾¦Ø¦!-°†^ÄÐ x”ñ%© YG7'°½Ãî(Ŧf©¥Yš×Ô'Z×j{uÏààòw¡1ÆÅŽÂ1}5Vë‹áoYB¦Ç‘'è·'Ø%vX¹ù1á¡çM('ÁÇ fØÐ`KƾR'Ôu×q¼²½óãô:\Ã7ã מּAÓ~Å4Vvqã4ÃËöánêg`ºCq¦ü|™lá$½µ£Üq`WÍyT‡§øÒ-ðé…[I7_Ç+±Gw‘Kvb;Iú„ÉOþäOr×]wQ¯×Ÿ¥y.Eý"a›š7¾lVÞån#OGØÏÿó'Ã<Õ¿‡{öaZÙ²ÕÌ"t´…-’u­úÜô<%ÐÊ@!µI¨¡Ò¨@#ûkðä§~·~ïg¸4s= UÇC IDAT¯?ã°íÉb]Œ°ËF¥ Œ¸Ä”úÜ&þýãh­±:ƒCHµZèÐ C)¤X!ÄBAZ t*„0­C´ðQF Œ:U°VÐfeΡͰ¦!˜g kø š åªÕ‡²AÄAš%a0ihN[°׈¼ÀʘbSMåÕgj‰R¬N Z-´—?†å zÜ!R~ví3¬}¦ƒ€b+`¥RŸÐ´´M5HPtWè­.²iƒ5%ƒ¾qIWZ34š .VbÉG”¸uf”Ïè$1m°V×±Zó´5Nr4YÄS}Ü|‹NSPðaÈl¬ô–4ÖÓuH¼Fj3P¬<¥™ßÔýI6ë* ¥q¼ $«pžYGÒïÃ_Kucêæ8醎ƒg <4bwÙ<øñ Û»7qêS‡Ÿ‹žyDýwã{Ùø¥VÞâY.éo¿‡¾{^Áÿn~†Ç?ûžé©³;q ÍxžGÒazd H ©L4Æêsüþ3úŸÂ\)ÐB¢„FKµº8½ 2å#=t€Ö!’)|´pÑ¢‰’5´¬¢ä J.QDX \F§j@DJ§Q W4aÉ#ô\4Á¹Ù#‚E\fÀiePIš˜e,`ªIL1AŸ®b ‰‰öüÓ¨¤€Ö:°Á 1ü© ÀZbtjÍš,ë:%UdQ`AìçìЋm}cHœQ¤&çpÌŒx’ íÕ™"*(ŒVA¥‹(Ê( ša6° !é!Ÿ¶>Çæ2$¦·óª;é;²Þ]C‚LB#ª>z¬g(·HUF=Ÿ¶=MÆÓŒ_ÕÉ¡ ŸÞÙ.òÍ[8aßʱzó+…tŒ‘õ .ÎM!æ;)·…¤+ ª™³Äâ׫Ê7V~“_â¿ãüü-üÎïüÎsÛQ#?’( _À~þ§ßû‡ÿ ï{q¾zÇ>Ü»ocëÍ¿Ì[¿zª%.?`Œ7uO@ ÀP×èMà€ï{ËU°†Ö MJÔX7mæMTÞÄ 'ú &§H’Ð&q tsµô‚f5 ½ùÕ€ö}T°‚"…ÀÄÄǦBœ9’â ^ú áEeÆÖh2OÉät9ÇH`SKXá,F} !«Ù\ÀØ8uDŒ¼Æê‰¯ÑˆÅã ÒW¡‡.¢9¾•üì Éû÷beç¡BCaT<ôrü‚ð=Êäºù ówÏs¶hrÊO24±…Ãáõ*Œ× ^í²¦w9säf˜­¶3¿c–Mcu·×°pÝñ¡™¯óÑÝξ=Ï»ª_á}Ç‹|zCÇùèÆ‘CÐ/P?õWïàc‡¶ó¦ÇÞÌ~á#|䓸çÑ[ùè Iîºe–د#öW›HîÎPØÁ\›ÀèÏ@G/“ÂO SaI…Эխ87{î\F‹s5 R#ÂC(-P¡ 4B>!Z( [aY 3b*M--½úîjð4ø‚sVçF¸«ùÖШ²&(j‚˜Æ ÀoVð«‹”Д©b°¢%~R¢3&ÚQˆúITpš6«N›¥ÈKƒ &º*¡)Wà ðÀ· pA•PÚ4BÔ1(aÓ$òK„[4•‹å´Ø7ÏøR;‡ÒôÈ‹pXÁÓ˜ÌaèE$ËQY«Ì†í`vkì!M|T°²öÕ%'YŒÄ6èdbÒṆdÐ…Szced-BPMBÆii­Çتú ÏÆøÊ’É)¿—V@ñmK¯>Hrí8åÔAÖKƒ-Ǻ‰í»‡Cƒ¥uó ÈCìúJ?'?ÀÇ.oÐd™ÝsÿÆÍlºù›X|þ§Rç£;G~ˆ( _`„Üò¡÷0ñK&Ûÿø4¿ñ'åO¯Ø6nd$¼“ÅÿÙÁæV¿ÏBØMB›¤•‰˜ÈÀÀF’MkI¤0B e ¡5èÕù«!­œ›­!W_q+Le¢BAàAhÙ(ËÄ×…O!B "!Fü\Zk¤f5ŒÏ½ës7½ A( žB×jIÌh¼8¸ZÓª»ønÏ#Ô ÔT1ã•69´8ŠpNÒçt;‚v+@¯„è’„ŠD´äêJhå¡õ2«Åƒ*–SÆéõ × ôvP=’¦k!UÈP›içd=NW+AVv“}Øb“)L1”³«7ÕØdŒîgT!6[ᤠ'l‘؈L¬Eu´3e˜Ìb±^¤ˆ‰6)L=†`m·PÖ<¡˜#Tû…"ålnó95¯PýÉ=€£MÖ)‹—«6.;ÕEúï4A©“3=ã­»F10ù(¼çœødœ·ÿê#øÝ‡xÙ>ÌÊ“øèü3´Þìð‡_º÷?¸xVä¹ô ˆa|èç>D*™"aúçN1r×Ç‘wü,ÅŸMrÏ#Né/’|ôº7bõ¬ÐÕÙÆ¦í õ ú::œ:ZxÄ•EÌA`˜ q.-µ()VGÃÿPæP%Vç=›R!…b+Ü&„¦$ˆ¥M›eZ¸ès'¼Z½åZ¯¾«öÒçZ 1-M<’Œ+œ„qM M«¡i–Џ­q<=ACÔ±b*e"jGáQâ †MZgÁš 1J Yà®.ô„ªöÑHÒla¤¬Ðñ j#°ìÜÐFêÄÒˆM9ægŽÍÆé1ÚE9²8"4 0CM°ë–ˆÑ[çs6¥˜r4Sq‰ †!Þù+–ÁbhâŠ,m¢Š!j`VV Ú|Œî£Ìn0û`Þ–<9½yÿnØ{„Îaã‚^¡È”›˜»—Q‡×SômNÔNÕã|-{–·]6Nr÷Ï1¼¾ÁÇ_çž·,2tÏŸ³åCE®Á1þÈ&>ñ‰?$ðÃóÜã#Q@¿@hn~ßˈ%Ve—†¢/ÈÐxãS|¢~)­¼“ÒÞ<ÿóäCð¶ßæS»þ†tû+±ÍQ 3‡4b82IGÐNgÃjdÐÚijm| ¤ô‘*D„ƹúòêú…P¡$Zƒ2 <`› †à8¡ƒ *ÍÕÌ ‹0ž'´â$qIÓ DI Ÿ&‚àû^¢Qç†Ò…£5ɲBÓVÐ$F5~KÓ,k­Z•S4uœ&qǯ‚®¬ßÕêlGcd5V‡@ôkä¨@Œ‚î4BR²qD5GxÖf¶fs¦îÐ'ºdš¤©Áj!Ìú¹Ç2$ÈihWè.›%P2¼xCuƒÓ ùä%å² f˜FÈNã·}6Ʀg³?,xZ ¾½ÜÉœw9íñ‹I˜èØ“#1ó4rÄCK5VG4Z‡Ìñ85߉[äåb‰Þ I|f+7þ^‚›îë̽ñj*b+Æêõ‡dÒá§ÞwùÙ{ñ]ûüuúHÐ/Éd’ÊÊ­xõ‚6¤I0oÂÑŒ>²‘ôž€-GWâ,â1“.ó9éÀWèè}ä=Yö¾$pÒ¸‰$­˜Æ0}bøÈt Qcõ‚ AˆV@(QHB)І@âX!Òõ ôp‚éÐByÐ(kB‚¸C°biB²´êe|JÔ(QÓ%j,QǤªCš¸h-1• ²><è´4ƒYÕÔKÔ'i¹Z2C7ÕãXò›—‹BÁZ_¢fÀÈ9‹JV4fC =P€ iyìÐÈnÑ~¸)ð•@i‰D€!` ŽX›`yÂb²e1e Ø4Û‰™Ý`”FÌ8$€´¢!V_¾ÐdéEËÚŠCÚ Ö)4´ !s R@ Òô'}Ü­’“9G&ãö&Œ¥KQºiH2"FjÎÀ\:V}uŠcPÄQǸT59ùªL\Qçø·nã­bï&,¦I|Í‚KÀ»Ø&Hz†‰‹[dçUßåéo܈·Îï ðô.éÕyûk^ËÔÏÜCj(`æu½˜ézæ\öJ îæu{O@Æ"ÌάìC?cb~*Æåk,Œ¬À©$JÆÐùn¼\/UÇMkì˜OL6‘J!<í[R˜ ŒE€T B¡åêõµžS«¬{M‹Ë^eqEú7W{˜hnf0\b1Váþ‰…;.熋–yèÖ~šUï|Ÿ /IQ@_Àòù<7O£úáßã÷Nµˆuåù…»wsèÍIÚÎìezß˹ïú8W¾w’ žÄùò(I¨a LƒÂô±ã4´°ý4m~éè´\Ð6ø Iˆ$c„‰v”ÕB‰Š¡¨¡¨¢XAé´^µD+\dÖ_`Ú[ऻL[³EWÖ%¾¦…W9FËèÆZžc½¹Èöä*YàWAÕ$¬M‰©ã(b ,V§*Þj­Xø«gB DŒ¤ÆHiÌ$X€ÀB!…‹‘WýsXà—`¥"X6aÙ¤Œ,–цyY°åê¬s×&…Æ&ÄÑR"+vmu>ºF"±ÁˆAG Ñ­h¶ÌJŸ ä²æf|ÝMR€Ó8ø8²È@ÜFwºè¶es‰J}7ÃK!‡ö˜ÜwÉ<ÉÛ¾MþÒÇI– -nxf#˧wpø'–)ì~’‡{¶qñ‘¿&¹nžž_ùïíý<úä"±JÒÏ·( /P…B7¼ü ´¾/>Õâ>ñ{ä~ùþúš+©¾ö«\9;ÁÐSWóeû:ºr7oºôQnY®áµ±cù×Òò׸C4[Ì»e%ñcšDw@ª»…a/“Ñ-¾…¬Ú(/gHZ(Lí¡Ð!àK„²}cu$(-”Ph|²13  ´×Àô³´y9„o`x@SÓp5Ú\Q‡1ã‚0îÆmÂxS„¶¢‰Öu´W·ÞøKàizE&[sŒÕgˆ™ER‰E¡Ëº—Þ›°aá5 |Ï&)B‘@‰Z:h¬ÕG“‚!Z ša¬ÎÑ«ó£M±zV)ÁD’Æú¿ì½i°déYç÷{Þå,¹Þ%ïRûÒµt•zÓ®îÒ.¶FЈa¤ÁAàFØDØA8üiüÅžñ`Ûì˜ÌŒ± KÀ`À0$!!Pk¡%u«—ê®î®ýVÕÝon'óœó¾¯?¼YÕ­˜!‰V¨ë‰8Q™'oÞ̬¸ï/ÿçÿ> cñh&èF‰^ÌAÁÜJA€¾œn‘è9DÏ' ÄqDÐV Ð¡¤ ÉÓ¬_^PL ‹mèyª¶cOj‚ä̇{©‡‹Ô#Å|ó‹`ƒF¼à€E=˜¢ÎN ðècdŸÚãÙäë„d™ÏþìyÒ¯áÞ÷ÿîÉ”£Ï¬1xb…‹ÿÇùWéq¦ë1{Mî]Œ§?Èó“.7½f”ü\ sܳpª„å>‰¾E¦të»—)5 c+Y@¨ ¡ÄS¼@%(ŸWT.18m©"RÑiV¨vÃ!¡CY0WΡËS*ìÖ ˜Na¬À›@mÁ¥àSp‰à­!ØAåZ±{²HíAv¶a} }óamÑÖ ¸d›ñð(ýrž®jÑUM¼j$#þy¢A‚G¨P2Ed„èÁ\ˆW1»#(`‚‹¢ƒ¢+Š1a‚–!ºSaVSôÁ0ž C•Îhèn´8Ô<èi좇 dJhmñ½iLaÚw¢ØVhl ˜ó¸†c¢š9æÃaꪋ›*–rè-@æÊU`átï¶îƒOÊ„?Ü=İø(+Ù<'oîçžßüm–ÎoÒÉ ü7y€O]/Ù+7¸¹òÎ>÷E~å…ÿòŸ¶ÙúÊÿÌ‘ÿ"ç—?½ËÍñ7øì‰%666^»Åñ:‹»€þŒ·[aøò5v?þ1>[=Ãcúƒü;oæ“õ·ø…gÿ?±¾·¨7>Íc£pùWú¬ÿøÛyr÷ÏèîÝϦ=ÃWÛž+«äl`åÍŽ¥“ìÁ“Æ:5ë4CÍŠkÒØq„MCp …5 $P+PRP‚ÔÑ?­T©àš)Á1EtE»S!ã’0@5„rH³\ÀTÒÊVMk〟Dëz¢b#¯BlµqSÒÇפ ÒWØ=Ù6t÷RVJƒNöxöž>×uÆÞÚ>öö–™†4ó$4HÑä¢Jj„)Š‘!è=0;`,2ë¥AR+¨”‚­­4ÂyM¢fŠ–ºUa–3ôª [0…†‘†Žj¡n+h=@ÄCP$JÈZ#âˆH´nCÖŽ€TtšæÛøV 6‡'¥Ç|X¡vM\­Yn–=ä®FÕ,&„³]†÷NùFËòx€‰þØ/?DÏ[™ƒô¶^&ýìg!+p“ GŸ*ìñüÕ)/ö/ÓÐû¸§¹Â³|œç~®àgÔ2ê?9ÀœþUÔ /ðñüµ[¯³¸ èï±XÚÚ üþÇÑüÁbàØ¿¥9V¶élC¸®ašP& vaÐ-:Lb“£Z",« †j Ó\j©uJ¦è¬¢1_BQ†BÕ‡r@Z.Ò«HªŒF¥hVN¸9Ü*2_Î+Uà+Ð5P 2T¡È&šŸ°ê3z^!ê&ã#SvhÆ’ñ¡çŸk°³•qcšpœG¤Å!š L*´Œ½ƒ˜-09blT±*Àd SLL¶Ö´E1/šŠŠB&Fè¼DÏ fYЛqsob±¢×MŒî€ž‹¯CÌ[LDhˆ¢ƒ0’$Z*@.è&äíÛz_!3@K§ƒË<µ ¨h°@Æ<Îgø ,5…ž d®D¹)áp§çXkO¹ rLx ¼—âÆ~+XJk:áâ!\£Êo²;ý}]áÙÿs•ºÇÚÆ‡90ÿ+Ÿšpßû*ª{Gh߯Ǩ,XOËSýš®“×KÜô÷PlÝZâ]Ï]ç@u‚½ÆÏ’ýÓO²ûû?Mhü¿ë ­½w°2·H^<Gÿ ô9†åÓ¤Wj–o¬ðÜõe’Ÿ{÷ÖuäžaŸà³ £+Z¡d_Pœ sÜSt˜ßÔpÕF)ÎÎÓ¯S6C`¢À¨)* Iã}œåÇÄCUBÈðA1µºipŒCÍ %«íŠd¡$Œ¦„áª>¡ÜC•}:å"iÙ¡Y[ºµbÞA¯†[SØC ãIÜ“TAH½¦ ]Ä0'ŽZ]gœ]£y¨fy¿æJ¾…;T¡›l>ß`x%cg°é-ÛXv0&ç0IœŠmæÁ4“‚Õq<£vHµ E€‰F j:è;€ÞE£¤BQ`d„nÏaz zÂD˜VPhÁ«ÑÐóˆêe4І(Ú"ôI"ˆ ºYë-$5¡é4ēЦKïZxgË-è䯕  n1Ý—°‘• ƒ¥ÞŒ½±ÌtÝpz.ÐL†èÚ ø“¿¿Oòª¾DósðÄd¿<7¦ùƒßä±7.ñc»4& Û'߬½øMü¾]”÷q}íÆkº^^qÐß#±:¿Ž/ƾ÷,ÜS³×:Ê‘£–…sK$‡`¡û~Þ3X`åØ&ZJÂw¸þ†ŠÏáùü…Ó\ø³ûùÖKºã?äªÒ¬+ƒ Kt¸'ô¸7Ìs²œgµŸÐºaðWÔ0#؃¬Å Ûy€,`T }cpÄNp“Õ4³aJ l€ËrjÉâ a‚¢b¹[bŠÆ%aØ' öÓ=(wIª¨¦U“¹ÚÒs°í»>n´ClÕáDPA‘Ц¡ $aD)—(ä%’Õ‚êba ò¤O™Ü„ÅÈ\ƒj>çÚ‹)ã„ÁÔ2ËX Se)MÊ>›“')b-;ŒC$@1„±FFñÈKÍB®éaØAãÅ(ÐŒ0ͽ˜b–݇zS-L•&×mDu=EyA;EÃD½‹Ú#™ š‘Ç·7 )¤ hx°‘@Š¥Ã<Þçx¯H2èÍAî*”›B3#šcШØQ%y8@Ïa²ÑÀÖš3󴹉šlkÔûšlŸu<žx>uá ×>~€Çn=Iú_£ñö&ïì?Äé¿x”çÕ1~øk´¾tç·vxï`•¿›B}íkw!ýÝŒ»€þ‰Þ°ÀOýô2¶u©¯¹w É™»¿ÏÕ•û9~óïnW´Îü5ê¡„óçù„ÎøãÁAÊð(g[ÜÏ/ý%çNŒ(—ºž\yº¾¢7)éîNË ázEŸìgš/qÓYÖT °`³«d~2!ÔŠ0ËÄ œ¢ðàÓ¦yÀu,ušS“Q†íØÏBW,.LÑÅLIû„Á.¡Ü!T;Hµ@£^ ­çh»Œž³Œ½fäb¿¤ØYO¡ð&86™ÈE&¼ŒÎ7HWõªb~!0g#»O7¹ƒH;G:9»/f”7RÆ£”©$ÔFÇ,k8`iY…X‰4>BºF†jÒ©a>×ôİ‹¦˜2Á0Fg%¦ÛD/ f/¶«.Cô¢»ªÒݘn'>zê•¢‘iÚMì‹ã6 “fÌôtTÐiò€²±IUìÐÑ&„„„<ƒù6dÞ!ÎÁbSòòš©ò´ÂqÌp‰r'á`+p28ÒÉ:¢ú„wvÙ>§øt7ð+¬7?ÊÒ“]™dôþä·X½á1+Ö¶óœÛáÍÇÿ€·SÂšŽ¥I†;T¡‹{yàfà౫ToÜá…ûù·2dzî(ùÖ#„Ï-ðàµîQ³{”üóÏÑBh÷Ý ¨¢F¶KÂ)²é ÕäG)Yó ^9X;†- }$ÔP ¡(€rŠø@ ÈuÜbƒZÔÈLE—˜¬dn©‚ñ”0žF%a¸ å¡Z TóH=O^wÈ\›®Ï)ƒ¦‚Çã™R3 b“‰\gÊ%à¢Öн)õªà{Ð5¬ëÊä’Eº«ÐÌ •Q4S®]NpCX+(+(«9˜,д€uˆõ`jP`¨ÁŒ í¶aÑjú Ñô)QŒÑ2Â4Ûè…³L¡tÂTCP D·Ý)fú¹¨YÚžâN“×T†4bB‰ I!Í!ÙF '¡¦I„ ŠfèxH|@ù‹9u×P&56dtåAN=Vœè–’f²A8˜Q¿m§þ:,£óÐ~éo¬Ç• ûÄçશZm¾~ä*ÝŸáƒ_ýKþñêý|ë¿|7º!,Î-Ò9z”K—.½VKçû>îú5ŽcÇŽñ|€Ü9—­Á¤WwX™LHo°sd›Ë «|…vû™»xœéeœúŠç1£Xu×ð~ýbBšÖ¨«Ä*¶i ýš0N ìƒæ½”þ87C›ç]àz ®I»Âš=¬_§%»h)Uô('+!|`² U\'§6Mji0 (&Jt³¢µRŠ)a<Û<íªm¨ç¡ž#¸øÊ7HCB‚&੘PÊMl¸A«ÀuTsÛó¸žàç Û†E¹RÛ[¬! ¡³Œ4R$O¡aع"\.„$’T° X«ÙŸÌ“7ƒt ÖÇLŽQ… ô ùœa!1 ÐŒÄG³9òÓMÑ ‚›@)B­ ‰n"ª zw@kEö*@—"I" ÓhQÈm‹#Ô Ð)žœ ´ÐÊ…–XOÌ›žoQeŽR¹Ìƒ_¦*R#ÒråG„»ì´<§3Lxû6ÞÉø¯-ïYÔt&\ŸCѼÎ`óì¼Í¨ò|iý´æa–ÅÞ9ÞyXs£ºÀ_ôû\ÞÞ~MÖÏ÷{ÜôkÅò!Ž>üžoƒóA0ÔøÎ”5ÜǹÚ?ë:ç[dOzN?åxkx ј¬á'·D`K IDATŒ3ôË#Ø”8(Õó#4Ü ó<ï…—t`Ô„¤HC,·h„M„1–˜ÑFc²DB !Šêªõ‚ÂušÔ4¨‚Á‡M…‘ŠÝ’teçÙÁh—PmG%_w ® >㬂<Š)Ššm¬¬Âb¶ÐÝ · ø.„&tš° aQ; ³‰KÖäÌ­"ù&³¤™`[Âàš°6ò²DÈ,¤‰eÅ.Ø ±îNa‰Lö`(ÈÀbF†Nðh4c1ÄmÂ%FOЭ=o0#»Ñæ˜hÈu¥;qPc¨iP4µ¢#TÜ›*$Ûœ¥L‹BIûtXFARnKê`¢‚NM³(&%t[¸Äá•§Á"¶lQ—†^3°,5¶@'ÁŸ\àªÍ)8ÀrxgÌM<ì«ÐÅEB{ŒkÂöÒMž~æßbž;ÁèéÀ¯°Ã‘³=þ¡ Üão2 ‹ôò!çŽ.îpyãÒßãêy}Ä]@¿†q\ïã€Zü>&àDQÑdBщfç&ƒƒ¡Æ`^™(| öP«@(éÓLû„dg·ðÉ.¿Ý[°x ë0ÚƒQ»·%„¡AB–w˜]·Êyoø† \h@¹ Ù¨{c*³F.‘p‹Œ) ,ºÐ„"ôŒrÄ•„}{Rv±ÕNÀí‚[iQ‡5MÆ!`™†ØÊ4mÔ´–*¨‚QE(j˜VPŽ¡D{ÃçÜþ“jDJt‚ô‘¬Â7…0Ú˜xé?—ÀR½e„‘R¨›X¹NB›4HW“Ð Ñу¶)›Âf)´,4¡a5©mÓ°Ë3«# JC1F †´eèÃT* q& tÞD·5z¿\+ T«ÑMPðâ¢8fË!©EeqÐ 3N@{DdÖ°É"踓h!Éb¶ yŠ·T !Ehàƒ&K…¶Œ«¡Õ šÓŒuE‹eÌhž|GqvòM¼ÞÁ=¼Ä‹« .»EæÒùëýüÙa¹Î‘g SSñR2ä©ó·xïÎ_°¿?ÇÆý‡˜_¹Ÿ:»Ý¯ðâ‹/¾«êû3îú5ˆÅ#W™ßy¶ö³5ÔôÊ’\Dç# TUmØÓfÉ4[G5ûØ¥Òc;¤“]ôp;ì8Øô„Žú’§ª7¨ $¨Ð¥öó¼ä ßtoYØY„ô8¸ƒ%uóµ‘ 1lÓBÓÂ`Æš°§¡/0lB¡šÅ `¼ õvÀí@½Ø¢VmjZ¸q ²P“SÑÛ©Ik ‚‘#Œj˜ÔPºYÿŽ!;3w<Š*f@Ø)’TJ¬äÐñŠCÌ[a9…¥ˆ¢Íšl#r“„9¬´HÒŒtu?‰dXi"˜L(¶a»ÚšVȃ5]RëbêÜ62®ah0#C+3”JS‰! TRÆJ¶D· jªÐ5¸J¨¼JPº¨ „œ`¼"ÓB#~¸ñš€J_ñ E ñ¤GF„ƒºýá­¤³>LhH‚6³|éí E+…D;”÷„ùœ21mVHû†ÄÀáùÕ¸E8Ø`çð—TNùvŽ<”#Ûï9°KR_ÂÕLVnR]ù-НÍñkæœêã¡ÅS¼ñ‘3?ªùÜç®Üôw0îúï9N:Eó GàÚ:÷vž =¼ÉƨE–€1_JëÉTA6´ Ë”Ýdží9Å(…ÂìáZM_Ó¬kGgR3?ªQ/9¦ Lžz½$L=2ú’ðtó”K¹Ô1¨šú„Ãõ6©å.œ§ÁuÚ¡¦+–¬4HßD@ï*•Ä„èÁ£¼ &%” 3@4®Ó™ºAA § jZ8ZIÍâB {5aÏAßEP¦.pu ‚š]MÔˆªÐ6 ‰)Bt@H)X',*ͪŠ%$°ËZæH¥¥A’%$«+$*‰JÚ‚J…ñž°ín«hÈmбs˜Û*Z ”d Œ IÓб†J Í2E3Eg9ª%è ü*j¥1*6›–Y_qŠLßVб©XA¥ õì3ŠŽ€ÖACÜ´EÅxFbŸ'ÐØ¸¹IÀ’¢ƒ& ä)h›5I+£Ò ‰¤PwI ÍJ;ÐHGU!§ç¹™40n••͸¤x×bI¯ñ îØkïmóvÊ_}võ¬¡÷ðÓèje9KÅ<»·:ìN@z ¦_ƒÕõý¯k@Çc>úÑÒét˜ŸŸçWõW¸téüày÷»ßÍ™3gøå_þåïÈë:uŠvþ.>ùÅ&'®ßÇ俀ɛVxðìÇû9Ó´GÖc‹Œ1†ÒŒiú‚¹öŠE2Ïö’ek¾ÍnH¡MZiɪ-9Ú(9ˆ§YŠ›ò¢ÃO¦8ô¡ñ‘|„_ú¥_âÊ•+>|¡Ûí2Ù¿ÿwìõšk—ÉoõÈkŒïû-ž}¨Í©Ó#–/žec÷­ Î 8¤·1»Ë §–Ñ\Á‘öéåMöoggÔäê…œÑრvØnïg+t‡'©ÃS¨*R3‹žö‘Àôé·>¢`ÊyÙå¥,ep4‡ûkê#;û–1gžHbI3&@Àǽ²íbÛS™((t,&ÙÕä-ÃR×P*ƒ“Ø߈e‚©lH‹„”D’Ì`WIt¼¼·‰R„]‰*:³šÔ6ÈíBTÑFÀõ‘¢†±A7 £ãà #<)ZMQYŠ®4ªüêÙ¥2DU&à&©( /!–|'åˆåõˆmA£"xg¢Y™hP` Ì.2ì¬i©Ò`g€&ÃEihb+E– ©.!w¨•UÓð‹è½6yí9Õ+° ×½¡Å3ûs½8Bï…·sâ™%ët.4ñ/g|æM–á'ø‘Ïÿ)?~ãØz×r£™~ÇÖÍë9^×€¾víïÿû8räW¯^åðáÃ9r„/}éKxïùáþa}ôQšÍæßéµNŸ>Í#ïxÛEÆ›¾tˆÎ?Ūù ‹ço²Ñú^<×%K_fys‹ìF›fÎvÈÒ]V’Á„S;o`»Ÿ²vA1>Òa|ü$Å‘UvÓ#ìø7Нrqxž[UàÁEY¬¨}Ÿ=ÆœW[\kàî«c{(} Wªh£PÙ²oå„Ä 5ŠŠ V ¨Ûãÿ$Z” w|èøŸg#ªÜVÐ: r[\Ç÷¤ UÌò‰‰ÙQ¨`ñ!úÓbJHS&©Á#´Â2ù@±¯åh¤;”‹–õëlH—…­‡X}ºÁ{ók,Ýû$îØ˜Í¹ Öžü×<÷/àèüGyÛ#GiR¯¾›¯Œ+^xá…¿Óºy½ÇëЇâòåË<òÈ#\¾|™ƒ~ÛãJ)ºÝ.UUÝ97N9þ<½^^¯÷·z­É¸Á.˜ž˜Ðk|•}Ãg™û7÷ð„/è8þàsü€}–äe߸‡õÞ[û.Ù¥ÛÛ¦ánízê?À^_³s10þ–¥85GqÏ© ¯0vøtÿ› ëgzžiØcÓ¸ÐÜdr¦…œØEéË„ñ³$êEö«-NKà”N9F 7õ˜MGX7°9ô8ƒÊÅÑP!Ú†XÁf]`2rê•€Û·ØÅ…6Žž„õP°…cÀpÖo#ÑpÈDOOÌqn è£LX©F† r¹F2™Á¤†Ek!±(,F2±dhv¤ f+YTјéå9¬ÖX+˜ž0œ@ߙԌibl-ñý”%‚Ê ™Õx«ñhÆx‚TÒi‚r‚òB(£ŠJÇYƒÊ¯ÁË,iNÍÒ,C´Äaã"*ªhüÌi–™²&*èð*­¢:Ö¨x_s»jPˆ‰€¶bqA# ÒÄ{hgTÊ‘úf’jÏ\gŠ˜ Õ¡9¶ÌíÁ N^îrÂîrìÞg¨O¬ñå·´ùíÉaØy;oV/±þóÿ{sïážÆ~÷Ùøo?}ess“ÍÍÍ;kìnÄx]úÃþ0¿ø‹¿È¿øEºÝ.þçΡC‡h6›|ìcÃ9ÇC=ÄÜÜÜç¤iʽ÷ÞûÿéuŽŒ/ó–­?á™­ ¸oþ×/ôøÍ…“[òô™EÖý±8 ™´ð¥ÐÍÁ¤ªnƒašVs¬n/°PO9tð&aiƒgî_àSérã/>ÀÛ¾,üÃño`~í¾yfŽþÊ÷õþWÞüŽ÷R CËâØñ¾â+ÓÀqWrq\r£_±u¡bØõ9ýê0OÉ tö‘jég%ì¯ûjÅòºe ½‡[‡=[aXÈŽ'Œ,”~–ÁQÆ\^?"÷-ZNÓrЪn¨n8ÂZ ×kB7ïSÆ~HAäZY‚Œ@ 5=è‰ßDèBƒØwÂÎüXHœ½%Ó)ì–w,·á‡AË\Ï’4-©Xrr,-1ô©˜ÈV¢Ê¶¢cñÊ\£5Æ‚I7‚‘ƒÔ‰ŽNo{ÑJ#n§Ì”†Ä(‚Q€fÓLåP‰žùÄQE;Vl$pˆ6‡F^]¢E³Ÿ]a ³Ï‰H¼žx•hž=sVðBL»‹ÉvÜxœ 0{|x­¢ýŒ& b懋_HJ;\žPiKZ7H'†NcJ’.µXothnâ-:œµ—X9÷8{oÛáÏÚ·øÖoüo¬¿øÞÞü~¾œS?™ðÉ?­ïzÑÿ?ã. ¿Ûqþ9N¯>ÇÁ_y òÔ½ |íÜÛùò¥ðÁ›pï‹æÚ¢À…%ú¦Ëy kG¶Iü}Ö©­ä>v‚%0qdÓ]Îú%ö‡„íàØôžmWqËïr­~‰‹ÉÓ<·ªi]<αu±rTX\…î<¤MÐ&| n 2𨽶a×ÃÄ€›  „!ø>M×£ë]ï™÷ŽEj®Ý¨ ×+Âj =YFpâ-“"ψ-=&}Ð{‚Ú è]ðC(›ÀH¡‰"›Ù³kuq ª(¿ýѤ6±›[0H0à Ê[Z‹†´kÉÄ’‹¥‰¡)qîbÁ.‰$X F4Æ*l·5cf.âÅCjk@ë«%æF‹†ªŽé~V‘(MP DQãc¡‘6(!íkÁ Ññ‹Da¡¢U¡c~tIJŠfó¬|ç6|‘;Ü!ñ92C¶Ü†øìNTã2³D@éI¯ci½XaHŠÜeXåi´KªL3j-¡‹.Ç6;¬êmÞø"WO–üÁ¾·óÇ_þÏyÇÚ˜vâß°Òx‰bò|ñÊ9ÖvÔwu‰}?Ç]@cÿÉ<ü¡dÙ,3ÔS[Ü<þùÏñègïã=þ sí]B ¾ Ô6)y‚+Æ€\aŸ»Ž’B¥ñAA`ò"aê ÓMBè`PdŒi±N)—™Øç™žÚb÷¾@s =~½%´^¾Jzí¶ÛG¯€ÌÃlT Á;Oƒ ˆ#NJ[e2…0"ø~ìŽäwè„9ðôBÅ7nÕT×KÂr½Š°’€³o¨ÔÄDõÂ6èm0›`¶5aÜAzHè¤M î”*SÕT+óT”l±ÉR˜AÚǃ:!õ–ÕyC&††XXZ"L ÄÎì…1‚i·°Ú`l¬´vaìÁjÁA飉V“˜¦Q Ú(Rý߸X®njVxã3HÇÌ ‚‹JP"xf@½-šÃíÁ3…@äv¥ÎížeuÜÉ~™Å«oÈí­ÄW)kˆ==(4!€Ò[Éê¸ñi‚Eœ%¤Æµx—°XthRÐ=ºÅÖràüü›^8ÅOþ»Þ·÷i~fÀ'ÝûÙ—}‹ñ7>ÏçââQ®íùn,³ïë¸ èïbtL›#øG™;ÃÞ~¨ÖÏñ®/'è_ ±ò{¸_Æ5'' ^¾Àîø}ÓÜ ƒ¯³ÄûòjÓú:®ðé„P|ØŠieT(Ù!‘dË}Zgý³p5ä¨ÖQ&{¹²“sŠ4ëˤ;/cv×ÐYÕñÒ)³Ö¤B(LŒâü¬Ä»€0 ø]<Ô!£‰a1KÔ¬†’õPqåjIèÍÝŠ€ö^S…€—©ñ˜[ñ°ë‚ßˬ€¬ ôPÌ£i¸ms¨W|h‰€FOU€.5‚aÔw4ÁFH;ƒª- ó†<5QIÏÔôH„‚ds[IkÁ´Zc0VÐcpSa2ƒ´6‚裴?…* ¥ÂhEÐÒuLG‰E=&zæj¼â- HH}‡šásÙÙF)¯J?¼h^}ã•{ß뙪¾ýì;€ŽvˆBBü8ñ‚D!Hô¥u,rIB­Rò²©<íù EÓ³Ý9ŽÜZæÝ/t8­¾NçCŸgû‘ ÆŸúïùê¿øùà½ðÀ/ýcÖ_~ö^úެ«×SÜôw)Nž<É?úÈ?zÕC·HyhtjßsT?þ,Õü:uÇRN…áWëÿúIö¾õUJ;¥ïкùî+ú¬8¡z¦B]«ÑC5+Ú¸I`¨Q2À.Ö$‡ÍS09#\KkEŠj¤Z_eí¼åV•sTö‘³BÊ%Ìt ½¹‰Þjib–A Ô¼ƒ0%„ž=|Hp˜¸<óa…[¡d3”ln— /O Ì•„Ü€WøàA 8a|ìZ<üvNû@ö#¬¢ÃAæñt4 ¤3˜Ý¶8êYU^TÐèô1ø1ìŒãeü Ôâ"¤¥¶4ç YËchˆaˆe$±·³—>…Á4Zmb.q®Œþ¹Ñ •F饔BB«+Á*=ÛÀSqã‡èX(DoÙϬŽ(‘cNÝmƒ"ZϳóÙfá+ߎbùöÛ¯Bü·‡ü ÷_î;wÕ,$(T­ãcA'h¯i8E–—xS3i-°ɽÛM–³‹¤?vOŸlòë꟰ú‡§ùéŸÿ_8ôC×9Íî6©¿Ä\NþVëçnĸ èïBHB¥(¦Ž< Ñ…À ³Ü8ÖåŃsœ¯›¼àr®º”i™°zpʙਟcg°‡¿õ コƛ®ÂEÍäe5H¶<ºÂìÕ ˜$‡Ô§a{^qµÆÍt¾VzL{š«7NIÊþYŠD:n ÙDÊ=¤Euzçú:nf&x†ø ¨êà©©)ÔÀ„•°À^¨Ù Sv™òìå anJ˜ŸÀ>U¹ÄB ™FW„ä ¤ë9¡Þr¢Ù‡“% èÐÁK‹@J ¦6ˆªc鳚ÆÃˆ¿i==†²@6‹èKÏ -Î@m1µa¾cÈŒ!Ÿ ¤‹¦ÀQ˃Žv‚Κe1†ØF´ŒÍø¥‰J"¤EÅ4DR+¬½m(ÀÌ<Šž™ÇÛyÎ1Ccf=ÏœŠø/òmøÎíÂòê³·O½ ¸ß~æo8û\|a¶9}lOЊ€`ƒA+‡jzª$Ç׆åIFÓîbêóôÒ2WúoæÜ'sîéǹçÓ[üï¿þÈ |£Þ†r'Òш¹— vãMøìT½š~c—µážÙz‚?ï‘ý‡¿ÁúOóž=gŸV„Í´¯¨Ç‚'¥Y90St'ÀŠÀ¡@8!pvõ)¬ÿ¿ì½y”mY]çùùí7-ðY IDAT½Ï9wŽ9âÍ/ç1“©E@©E¹ªË),-ì²YXM«z­fõRË^E«U–Ô¢»ªdiW£NÈP& ’If¾|ó‹x1ßéÜsöþõû܈˜ÉKrŠß[û;EĉŸû»ßýû}Y†)Cmæg)§ —Ë’pm¦Å’ŠÅ‘`I±¤Ií!:dlˆ¡ŒP” O‰g„gHÉ€‚.#Ý]àγMAW‡l œ~tˆÎ Ѻ ¨ Qð@y¦†‚\pFŽ`8ˆa¯S $ÃPÃ’`+`¦"Ôœ”ˆîêÐc0Û>âz1›¶è ʘMWÚt”<,ÍŽ#­9jÆRÇ2Ë(dˆÁaÅÄöꬵ)Öu±d®P°F0Æ’˜jÓДqpk¯;Ïø{×*“ÞÍ¢íŽØ\eÑl'á«»Ù½y¬C˸Àã«£zÈÄ…Kn¿äá—fÕUÝ5KûÆ:ºMÀƒ—: Ÿ’˜w¨`¹Ñ!ïáŽ; KíMÁçnÝâü¾‹­?xo}˼àU߯ß÷NœØ7Rú»Æ> ¯pXQÖoÚà#7~Š×ýéy.¼ôfæM†¬7FÌ5ïãeŸ›eê¡cl=j9½Ù¤å¯ÂuÁœM9ÐOØ:¾Êæ©èu§)MßÒ‹t1l‚Y–¡©ØyÅñ˜k•p=\HàB&¬)¦<€& ЙƷ„-kØÔ8Ä’IŽ¥ŒKJb~죔 l<ªõ#‚ÚóM©”ºFÁ*#VÌsXè«g[‡l]è±öÐ:CB½²ÔôÂÖCJýD°}‘ë0\‡p Ï›´)Hð¢(ŠAqD‡ÑT ¨h˜„†Ii™)R[`Í[eÑØ^•MÀõA‡Hw8ê`+ÉÃ’vIÓ‘YG ÇPC„‚0À哯$ß`„R"¤ÄœIbù𔑾¾*g«Ðø@v7üª÷(±Œn:™ÝN\Ù³³wIìñ%¹ô%õÞ«—yüÎÝrÉã¢@#¢¨(jœ7 ØV Ÿ¤„òÇ·j´²“Èžç?Ï\Ãÿ÷…áû>×㻾ë×ém`ùÓ9¦o0b ê/ÿýìÇžØôŽmÏëò/ð‰wßÍï¾q‘×~ø¾ô²ë9úЈ¿iÍ1ã2·ú$7}ö ‡¶ïä•çç9µ1Ä#Êp†•ÜÇÅÛG|îüôî¹¶—˜—Œ„u'1ö1$9ßâg}˜RX¸CžÑœg­TÖ< Ë6â—;Í)hA™ ý‘¡%’Ɇ-Œl#tAzD³‰~œR𠏨’!í ù?ÚÀ‡>4(}“R;Œtš\g™Õy® )]òÙ¯l3jocÇ©!Ú¶¾œá×–@nBåz†%§Íá)Ñ4bc†CI:PhˆÐ4Ð2Ð6Ð2)m›Ò2œÍ'@=–<†q#Ña«ˆŽj+éÃ"¥¥Ñ²d©e(–!–\ #JT†;¶Ž Ò‚±[»¨²L#6N+Jðñ#‚˜èXªÞb*Y#TÜ¥’H*~àp©‚!q`âqì¹ÿ›ˆ¯í‰©²iÑè¬gOi B›©Â‘ºMÊ›<e7àî} o»[Yèü*gï9Ã/Ýö¿ñ¢×ùᛃ^kÈ…í3Wटý±è+¶qŒé¼…;?ÿAÖÿÕgøw¯RîZÿ,|âNÎßt÷]ç0×|…çú"õû¾ÈM£8ªÂš¹—ÕÅOQÿž5ÚW;œióh²ÈG?5ƒíwxµ¹Ž)»ˆdYËd6£ÙPSa: ³Êºx¶’’ž\¶„†”YÈZh È (…ƒJ ‘6" :H¬}E­ 4Òhƒ‰Õ˜õyІ= Kè)eY£ðMвÅ(t¨ë×ê4[EŸû¿Ü%8>°v:¥8¿HinfÀÕ µCÏPJFJž°# Dg6©À -‰`n¡c m¡c¡m$m¶mÙÖ;˜€t%‰ä9lù¸ñ¨6ÊÁ’4-¶nIŒ%« ] xa0ÑèÓ€IŒ¬U^…ÒÄLؘq¢ÀuähcB_6ŒgL@z ߉¸T’øZ™ô•ŽËeßU ˆÑxRj“”c ˜¶ìõ³/Ï»$/û{½ãËo¡þ…²uû?£ûwÀŸ<Ûßšoã™û€¾‚‘˜’ÚꃜyOÁ=ësüüë/ò£ÿ¾çî6'ÿòfSáóßÞe~în¾qŸ>‰÷Å!Ÿspç6[·XÒy%q›è+Z<º2Ã=48,)ÓÙ5´³¸uÄ.C:€†B;®žx¼XÚÄË,ÁµPIÐju°žJÛ4ˆdÄá~ñW¡‚D*HË¢mº"uÝ™d‚³¿R £Ø/ú}|·G¹}b[ù¾hspÔa}Ýspz†ms=#ah¹-Ù@iÞ‚Ù5P2‘a¤ 4hYh t tŒ0e`ÊDHOÙéꔶͨÛÖåX›WYõ±9È(ŽÛÚ€­2j‹õ–ZÝ$†T,£Ø´'v0‰:±IÄŒ• Ò‘¯ã qy]´L°ÑC#¾31‹ŸÈ”÷ä­Õ ùjbëCöþo3U¹`ŠÔ —:Ißr4"7oñE{ˆî}oágÿ°`öÞò;«óþãøÑI’ì1!ÛËÇ> ¯`´Z%W½ðQî;òiÒ¿Y今¿Ç?~ç#„ôAFÛ}Ö–6ùÊé œ?t†A7½Œ¬á²@ãê@ú<Ã…cЙ‚šÙ¦ìdØ3SœÙ0<<nH3šÉ!œ;æ$k‘¯u…š2’@¡!¡ÅA¦ ÔQB:Ô*‡ÏÝ«8Á­Þ>âÄìi‹L!Ýô˜ºb¢Åxo«òOÒB@èzüÖ:ùú*ýÕ@²îHδØÇZcžQ&”‰ÇÖR ˜4 ©"‰Fó;®fˆ™Z®B!B.Ð'&^[Ú)lºéŽiSF˜²ìd×mëh[GÃ6q¶álsÄä±Ù…Q¹%€Úh`¤–¤fq™Á[9k€RÄlZãb¢+¾ò?’d#.jøÐØ-ˆvÿª ¾ê⤿ŽÌüt‰½çi¢÷‡U<ã…–ñ0XcŽöc‹ü@ï"Åkþн®ÆÿÇ÷ðÏÿÜqë¿ýûü§O®²rîüS÷pŠ?ú{Ì¢ÆìêutZ Qι¢§¿ ¥ÐÆrÔXEÈ*ÉOrcFÞ¶=”¶Af¦Ó‰«Ö”ÒhlšÌd–à[„\*ûa¡)™¤w»4”ñ²Ðt.AæAg#¤Í”bZul#ôEYÏc—õÅž°ÜS.œ+a9ÉXÉj êKH˜c~c“cµ5†µ œnm2œ^ÇOo!SñëQ‹#›piLïÍ }Ü”‹%ÐÂN)´[Ù•^èGLY¹í~5x¥oâõ¦¦ÍhØ gJ¬-ÀV‰¦D| y” À Á`3Á$'RA:¶qeªÍA‘x¾•ˆQU=To5Æ®ÒÏIYyܹ½+uÀÓ+gþQ½Û£±ØRh$9Ãù„¼¸†[OޏöÖ?á—¤ü—Ÿÿ<¯ùõGi¼þ¿g;Ù‚ÑêSý<­cÐW(¡Hµ†8O2×ç¿ oàÎ,ò¥Ó[صG‘é¿"]vüõù@1:Læ ì ’~É@¶FÌxÇ1“°ˆ°-]Ü‚âŽäŒòš–4é@­ EjJ)J€Q¡Åž‚¶CÁDZvÌÖ…© ´=dÁ#aˆ†<:³…\@ç², º(È蜢3¢¡l*œÏ•åΗ°l༅óN¸èÖ’y¶@¨ÃøÜÙ!ÇM%–qƒe''YÍ6¥+F‡ y‹Ð\ˆ&ÓŽ(0¥Ã6r´ˆÀ–jDâ°Kaì…?¼àmvnah„¡Yru›P7)Îx¬-+¦"êÇ¥mƒD ¢ÒÆa§*#¢X(cmí.l+à©:ÇD¾´ŒŽêÎÉÄùÄæ=1®ÌSƒ•€Ï,¦l1_–”WuùÒÒ-œþðµ|û­¿Ãý¤¼öšs|ôák£§ö´Ÿî±è+Y–qäеÜûW›<ÿ*%g•d»ÏŸ„üÃó\ÿÐ4³Û'Ñ­òÇÿ°Ã‡®ñÅ¿<ÊÖú4¯lã`»† %²yžÖÀqÇA“’ÊÓ*±K‚]ˆI6"u„f”8jà%ÄÚaš:G`O“|‡‰Î5`ÆCÇC-xðUù™9Úd1‰p> ÈÐE¥œQ¶ (g ÏYç¼pÖÁ¹DYIÖ‹£tŽP;Œ”G‘µiäô©­!Mƌά_dÉ ³MåÑú&çÒ>½tƒÒ-#ö b³€$óH}“Í`ìFZH¨!e‚”ã]í*ùgØ…ìdצŒÎÇú°ÒÁÈÀÈÆR½‘šqԌÙkÊhijªÉµeØ©\@›HUÍ!U`Õ„2.E³¦2Û¨ä|ƾT®n”½YôN ¯@´Ú-¾ó–Ûù³ÿõlÿãr`ý‹üùumî¸î÷ø¡FJîklN}‘ó7ŸàËß6Ã}/x˜‹‡îäãM˜ïÏÑi߯T}É ²^0Èq¬ž ÁäØi0‹†¤ÚeI1Ô kC3j_u¤Y M™#è>ÔñyÌ Sù ÐíRI}ýE}üM<2ï` ô€Aô PÌÂZ¦œC9Cà´ œöpÚ+çœa=i2(géA(!þ¬OcNç˜s‡¥Î’d4µƒÛLH7<óÇ…©º0SóœMWYKzäÉ:¥»v̘9Df0L#t0¶q-Œ4⢎ é.¬«šfSʰ‰£§|”?ò1<-x+†¸j&vV&F1âã#¬ÕC¹›íŠFä1¤cb*×9c*/v¤‹ ÁKb\©ñôÖš‚%XÑò£Å‚•æÍÌj—ßµÊÿ»=ÅÂ-=캅ÞS}ÆOߨôˆÍQÉ~ô>¬ýKîṵ̂ŸUþøù/âÔÜÇÏ_E>WÒ™ dÇ3n[qoí!ŠæJfùÊß7Ë"úÍ86`{“ŸpH,}±˜˜Y! T-Ùµ¨A7S ”ë‡SR,3xmr‡ÏÁ—д0W‡Y­²ÀøZö" uë×d{á<«œA9­ÊI œ4ÇÏ²ÏØLÛü!Ćp6:pf„œq´·š‚ÚØ²‰[í’®C{AèÔ„ÙT8ŸŽXq«l¹.¹[¥´ÄÎ"2‹‘YŒLa˜ÂÐÆÐÂÐÄHqu$©`-5Œf˜PeØÁMÀ:BÚx/ø¥fˆ,¥‰ïLj2cHŒÁ‰Ã˜jH€DCꨋ¬ÔŒ òc6 Ä BÙ…ôN\Fp~¶Áy'ªC'Ÿ4os°Ø&½uÀƒÍç±ø·¿Á[ó7ð'£’ ö7 ¿Vìú›Œ å¸ïñgÉ*/ýöçóÊ?úÎ ‘®×xdñk_6Lé!ÒrHºšóm½&'[}>ð0—^E>jq~¹ÆÑìYvг´ƒ°h,«¤ä(¦.È”¡Þ@Ô"šB«͵XGŒ* :;ú³å0V|ÍÕ¢‡þL u?BÊm(»PvÑÔ#‹i”5ô€¡˜V3á¬áŒrB”(çm ™‡p G †p]o#§GpÊbÎYJÁ³X„&´°=’5p]¡=+LeÂl+‰²êrÖìˆm»M!ë¨\À2ƒe‘)ŒtÚÕjah`h"Ò@h`L±5$­!RÇhŠŒ­± lG¯€—¨bhõÖÜD7×Ô@j ‰¬X̸”d<êÄÃ8›ª™‚²[B§Õ6áØ§YÇú3ñãâÃ.WÅñ슨 &8êII6ƒÑ5Ü9òÜy÷Ó9õ ž÷^À_¯9FžÒåbÐßdÔj5^ówrýóg¸°øî9ü!îÞÜ`ã“_aðá«ùÔgîàŵ8¤'‘_âÈc%/Yh`ÒóGWiÜÖ¡û !³Hz1%©/˜Æ0ej $¤)Ô[„X,šÀTmJ;ð@iÊ,^§)+@ûœ ueÎC»,qe-·‘² ä±Ûã`  0”óÂFM8/pV•3§PΨa]:³€$‡Q=ŠèaðG`­‰9=BO[䬡ÓM8  ”´ @Ñ&vËàÖ•dUèÌ í)˜N…ùDXM„u[®dÛôR›Ó7q4±ÒÄL@:N^i"Ò¬.×+p×Sǘ&©a$Ãh‚ cCÝK+Û‘ ÔÊ|(JÎD'6Všq†Æšºq9œ‰e‡qøë¤t“›€{ëŸÝpGloW¼8j¡Î¹‚þ·-ð™åç³üÿ|¼è6>ÿ0*ö'y_.öýM†Ôê´ïü^ž×ëqx³Çk¯cõÞu¤ŸäÄ-‡yÿìëX~à(¯®¯rõè ­ÇîçÖëý%ål{•ôš#Ы3Ø®£É"6Ù€b@CGâ`SI Ô Í¤žè`Ñvž‘ x ˆ@Y¼vð£„r;þæë0[*Ͳ@Ê-¤ì¢¾‹¢—² Ζr^ØjË"œª²,‹£O« $$Ø#é1Ô‚n9UÀI§…dÅrÐЂ9)iÒG©Eib”a7G¸5HV…v¦Z1‹^w±ùdËHôi–Ø$Áûh55ÛÉÇ€„.qFJKÔ¦…Æ.´iTªÕ25ÄdÖ$˜ÊŒa]ý|Ub­†#šê©¦þídÔ0Ñ ˆL@úr•ÏäB'‚A!-æŽß¸ÌÅלfðGúÎS}‚OÛØô7RV×oá?~;ÂM?ÍñÓ/çèÌçùȯÎqí¿|1÷Ýw7E¾_swiìú›—¦Ô®½Ž÷|è×9^^ËÏÿ ¯¿á·¸Å˜Òó=½Ë7~–éçq~áù<òØ!fš·ÓØþ ‡aݲÙÈIA‚A}c¦ÀR‰AB Æ ihO5&ÉA»ŽÔ# =¼Ná}=Ê£¸ñ5_‡™B©—#¤Ü‚bÒaìܨ²g]4 ;ªVVDX64¥”6ŽyR]B9€Êa´XBWZð(”' zRSB{ÓpH,(Y”’9£_•È0¡†éma6·® I]p L9a>5Ë]1Ð;~fìªL,犀ƒ2¶–€ÅT Ú;&GÑ-+–! ¦†!ELJtNìNýó¸le¼¸£9‰œ;f÷à’êçfî¼'Œ8:YÉÚ-Sœ½çÇ™õÿ‰;šxHìþVáebÐßLX¨épÕÆk©ÿåoÐüÔ£Ü?quñ™^]åšO>Æ–3ÿ þÎÃl7—Øê£eÁÈ0. @2pÈ(EL %1ºDãL>uB½.„¸ÁeS´iI¬à¥Î4^Û”CK›Ke:f­Ò¶[v¡ØF]I=:—"‹‚. £)aÝ +[ÊW¶$%ÐÆé<)‹ K(Ñ|]iÀ à„Âc–ò±ŒÚŠpH ‡1Ë¢Z¦%b-f¿ B†äÓõØ p-ÁÕÀ!U°ÞÐi[fk†21WlWLìÖgô™1¸'à=¾%þ-O©d’1Ü ZeãE箚„R‰Ò“M(Õ¯ÀøÅag˜ëdìaòsÎTÚ¼R5 'à8/üÈí¬œmãýþós¹Øô7©…ï¾¾ÃBþCüágR’üS|âÆM8ð÷yåé!¯8û·ÜÿeÏsbñ<™ÎÑ?Û¤4HƒaÊCé E=¶3tˆ©CRb%! i´€6Á#AÑZ†4#m:&ˆtðÚÀUÙsjbõÆt©ÔŠ!Øm0]¦,(º(ÓÂF"\D¸\TØ–A[8æHeXBu Π+)œ} ô$p ÒeËR™rL q6ŠeC.¡šÎ§êI‘bzCÌ6Øup©à¬ìP¶!i Ô ššØøÇ‘M9¤êÊvü˜'ïgÛcg‹1Ü÷*ÄcÜzÆ>ñå zIèàM¥ÆæRìÖ8W½ûò0_ÕÃýœ!6²Ô}›ë®¹È'^|·>øï‘¤ÿTŸÚÓ2öý#ñï{ð‡/¸·>à%ÝÏbëqï.òÁäO™¾ÿGYxloß8Àu.P»¦ds±Ò`ÔŸ¦f0d$ y*˜Fåç ’ˆ ¤")ŠAR!0ZÙX6S¨F73iãµ…Ï-~ZÂT ÓFi˜.˜.𠑦Eç2dÞPN [©°Š°ªÂª@—Œ m™%0‡ê*Kh¿.;ô4èIEO+œ’˜ Êg9V ‡ªeAKŽ×2Ö ‹ 2¨]føVA ‰- ƒÔ“J|rV¢ÛÙ]Œ¯O-Q,¶R=& bcír Ÿ`ØT8ü½Ž»ém4ÿwûG9þ‘k8þÉ6Ko¾Ÿû– ¼” ë7sx0ÅáAI­Q"3uØ †ºXÄÅRºh…ì$C$Ú "Ø2*CçFJábölÄÒŽƒÃ87/µÊL&tŒÇ™jºàÑ=n&…Y¡œ¶3XCXVQúš´H™Au•y`Ýn ,z6‚YÏ€ž’eÊ 8„rD GJÇ¡`h²×V Be0Sa¹`úURoceŠ)€~%¾×"˜IØõ¢/3±&owǤ²G•„8t ‘h—êIÌô© ½3Ç™ö$´£ !¢»yøØÓ¹jH£x¢nc?¾^XÈBƒ›®²™«?v ÜëvËgöØôIj´îúÌïåèßÃðü­¼Ð½·}eïúô\óÝ«,ß|–þÊQFþ0­ÑÒ¶ %†:êkXÇ9©1‚U‰TI‚˜€Å"ê*¤À9´fªÍAOB1{ J;:e 5#Äô*ÃzfÀO ½LX'z]a B›D§Q™A™ƒrÝ®–=§èYg= ÙºÒÂB¢,)@8$ÊA1L—#LØÆÐ'èeÒŠE¼Å <Ò­Ê×¼@nž©àº]sɲÑÜ_¬ÆôÛ‰F˜;â QJ5Ìpïu_C;‘ Öè“RŠVRÉn†7 K5°ÿèf^|þ÷ù˜ûôdìú ‡`³6é·ÏòŽŸÿçôzù—øË•7ðŠ­k¹þ保1t#Fۚ⨗R˜"BØP,jc–,jÀ:DNBˆ#ïS§ÎA¡îÐ4nŠ&8±Í96Çu+´Qjâ1¦J¡@[™R|l lh\CÉ0Ú"aŠ Ó¨Î¢E›°™V@Ï+z.‚9œSÛBGa6QæUXTXDYB˜§ÄÉ:”à·±ô äJTÇCFéWÛxÈzRÍBdÌ*Šƒ/¢Ðž%ePk@Úˆ£cjµx[–A™A‘B™ÄU¸èœ”Xp6Î_gÙnÖ6άv+];†Nü/—ü^L–Øíóùë„:)œúîÛÙþ©Þö‰tIì?O0òí¿õýf(×q×…{¸mö;¸áŸžâ‘[¿ÀÊúK™)fYØîÒò˜Äá‹:‰0u¤L‚© Ž´ÒOAÀFA¼y‰Š IDATÕââü7©Œ ñ-xê(«Ò:+)hƒG‰Àh¦J³TŒ "œímX¤àÛ0Hwá¼%ˆF›$ÒA™FuÍèº%¬(º zÂy…eè …Ž(Ó Ìª0§Ò 3”8VQV€5Œl¡¾‡Ñ¢#TªiÎ*P2¬dÝR`({eŒºUBâ ­CÒF³’µ ´@Z`š``¨¯!¾!˧\\Z}ò` Ø*E®\èʪκª…ÆWçb«úfï0± 9qŽ“XÞ‡ó7—(õä…\wÕÕÜmÌ7þ€çXìú D’$¼åg~ŠOÿ*õÖ“ü̯¦üà½ÿŒŸ| çxç›GWÈûiIƒ§H=jI5=Ô[b…®ÄñIV¢þiœÆÂ/õN£ q؈Æ·Ä¢‰ÁKˆf4ÔÒ  Ômœ€mÂΙAZ ¾ ôlc(´• mT;q K?#¬ á¢V„pA À­ õ:Vé8a:ÀlPfB„tKs,ë¨.#¬¢¬ƒl"ÒÖ¦!GuDef/òj$Ô¨‚³ì'«Mׄ¤ I´ÒAMñmÐ6„fµê uÐh×XÞ£ìJ{bgwo¢DC%žçXÕ˜ør™OsicÊ~|ƒ0ÂB’ð;¯ÿ¿ø‰kgxÏ¿û·Oõ=­bÐO r?ýð†?V~Œwð£_¹ŠGßôi¾\¼ž[‡Ktt@>U0ÕHC$`$N\5„‰ò°Ø6l˜(«.â 8¢q$‰ÅK XIbEDŒBf„š 8 Q;Šk#Á×!OváÜUƒ‡¥A¢-”6ê›hסëJX%J+Š®@³/4QZ:Aèe:Àtf‚’h «¨®"ºŠêED×P6@·º(CDG±Äd\P\2QTlÀf`êàš ­ ÈSˆ‚0…†)$LAèT«´6Q­BB AÇ+Ö0ÆõÏ1Ž5ÌVÆåuã%JÅeL|Æ2´°#}Œy¼åÇ’&¼êö!ö­ï…ãû»„“±è'™þÕ4xu?ùR~ô“?ÇO~y‹ò¥çúãÌú™ó¨3HHIPÔ*ZÕÑ©´ML•)O¡êRLôÜhÒ#ÀÞ˜j{ÊÆå %dVãlnïQâäjI­9B r«ôˆk •§ ‚4PZ„QFغֿª„p›ÂŒ‡†QÚNhyh¥`Ú uŸcÜ„uÔ­U^‹pÖuD7P» l#ÚCÃâÖ*+•(;HR -4´‘0úiÄ΀ŸAý âgÀOƒŸßÁûyp ƒa„"¼ A­–Œ¬q¢Ö¸ÐÃUR÷xYd\Ô±o³S=þUÀž”_tâ†}B?î0"ÌñûKîzÓ ŸêÓyZÅ> Ÿ@ ´àGº¿Â¿©ÿ6G?p[¿ô7œãµ\¿¥øÙœ2D½9­‘²³¥¿ggçÊÄí2¾ßVÇž‹jCÌV¶–ê0$P ê#hR#ÄfÙ‘M€Ô¢äFé]`¨$Åi•:Á× ƒ·©„ÈYšÂ:4‡B]¢ÙRÓ ­  …–÷·…ú Îv ë¨]‹ŸÄ®CØŒK·!ôÀôFÄ™~Õ†g¨4`MÁÔQm!¡2~dü gˆÿÍ[ÿ)oþµßå}Í{Yÿ¾CL¯¦Ùö¨&±Úb±çïü7qu¬wŽá\ɾzë^éÓªI©© Á(9†ËH h‚Å¡¤XŸ "œ»BØV¤õRbI±U25/Ô½R³±°ÛQK¶›ˆ€V»f1ëÕ}Hc€Ú"6TyˆŒí. PÈ•0ˆ•nêZ4@|FßèÐÁs KäÌs‘Œ³ÎeÅÀE½£‡ÒY¨{Êðsà§5îÖ•œ A*a¢zy²qò8qûÚ“ðžüéêW_|®‚z¢ækÜûõ³ãÅÌðß¾ýgùüà•=±gpìúñ†*_ñ/ø?óNò‘œZ¸‘fÓ4Á|ÍLùï_õÑçÝí( UâµéŠz&D}ÚFd„a¤RUX;‡†Sv „>ØH²"N I­’ÚhUóÚlµÝg³v«Êš#Œ±›H²Óʧ¨5Už‰íÓã,tœ9ç ý(9£„Â( £ªô‡!Ãh«S„r†M9¡ÊcÀ„ VE¦ ~5ÈQHA±É| œ†Òv)¥‡'ÇS¨À¬BeÖT’O|‹ËbÄUµ¾zÜŽg{Uè1¸Ÿã!{S’¯ýŒHÕ¨tùHU¸ãg/`÷UŽØô㌠ðcÿó4úýb´4`:‚‘+ù+ºçªiKñ… Ä%Š!(Ù5·G F-V£^­¹b† !(iî#$FIlôïp¶;@m/jvµœÍêª?ÛEZ9j}ÜYs6ÇžfwóS=Ð9è@Ñ®Æ_@B>BwÚ§B #-6ƒá„z¾¢–G€S6Ú`Ž µëÀ^ î=n¦ p딲‰×.%‚â°4©Ñ–: jÔÈHQ’ØÇ9!EOâ7f}{ãÏ¥‘ÉÛs"âÎÊã›J.Õ ÚeA-ð¿¯tø_®Ô > bÐ3Œ*ððÝ|æUM~À¶±öÉܶŸÂ®Úkˆ ;ïĽÄ\Ï«©þ\"œ5R€w s%)£4âÌxEïi1#0ÔôQÓ‹¶¤&·„­x{sÖG78;.{ˆÆC5—˜=Oj¸) íÂ6øL)ÊB }% ´CÚ ¤j8GÁ à¡2å!q\œsj7‚¹ìUwØãÒ‹8Y¦ÐU Ù$0ÀR2MšÌРC 5©À,TUÏíeÔŒÉ$ù«±2ÙA¸÷gö¬K2çÇõ¡_Ôóÿ¡ ßùMŸÙ³&öýDbPrãº$z`œÎ>i1æ±ì¹2Öwµ2ÃÜõ<¢Á¼”qN …\Y)¬2´bŒGL&G+8c{ˆí뢡 ¶Ô‡¨)«6ˆ5Î.’^\u}·ˆ˜±ËÛ s…BO ëŠO D) ð}ðÝ’P PFÄ)€†M<§r‚’‡Åsº•QOHo4È-`®-±ó›8wË9,ËÔØÀéj¥ÅAfBIG=5ï‘< > ;ÏãøI™<¿±–´£¥OÀzgcñIýñ?mC®´#²Wöxqc_ߘŒ}@?Þ(߸¡8Ù·æ¯swX‡îdu‘}Îã7æ‚ÄÒ;¦J°UÙ™5ÑåÎŘ5£ Ì9˜˜~´#¥¯×r0!N«6v"SÃy¼„à¢]g°B0ÕeˆÚy¼ÆÍÁa€.øf´Ç(‰tуr½Àw{¨P °NÁúœ áLÝ38›nK‘›JÌÔYŒ}Ë)œžÃ°Î–ëhrµX–9ó>ÁmH·Ds_MíŽÙ¿$ÒdoQt¨ ¢µzw0~²e/¨÷üBLž q¥à<ùùÆ©]ÑÏýLg4 ó<çýï?ûØÇèv»Ü~ûí¼éMoâøñãOâWÒù7#'ñK\öËîfc8ïèÓqôtÔ¨}å1Ë…Ø­(L‰†$vbrpC`¶ê>$TÞÈ&Ây'3®`lÇËàPa¤B¡ãc¥…«ÄnnUL.SÒ†’6!d¥¥(¡è+źRnåøAe€'ç"Î1âŒMè-–èõn ”×öI bôajœ£Á6W“qM®Çr¸ï¨¯:Ìò6³hÆD†6:ИF-Ôf¨&q¾#&eb¤ÖŽúÌĵ¯ãnÂg)¨…Xêù¤‰yòõ7Ÿ«ñŒôÛßþv^ýêWóîw¿›Z­Æý÷ßÏ{Þó^ûÚ×ò¢½èIúªÂvòf–ždiãr_·ÊI™L£w¼…ÆÝs;ˆ‰wŠøè 'E\¦W 2BÝ¡¬j‚#”£†3å0n/·†ÒFjÈÕ«0¬ªE†#„a$cHïNÖj#.%¡ÔëJ}.ŸøRõ•Ñk9å`¯ÛŒ´Ë ]Ήe£•P-k=ë9EQܤÒÔ3ÌSp5nC¹Á[u-S6ZhÙ‚Îh¤ô44 d;íà •{iÐn›÷DÝÆ{/=îù=KC¿¯=“¯†û<Ãýk¿ök êõ:7ß|3ï|ç;Ÿô¯{mû©ùKÜco9 çzÜjì#±Å³£wH®¬Rmªôº‚±A*y¢êZ,rÎòê8àrGâc€œFAq„”!È4<´Ué4•Æ’¢e´ ùrA±±E9\gÀ«4¸`ýÙ=^ÀáÈ)èß•©™Ç8îÏ3 žÜX.ÌC‚~Y`¥ƒ¦GÐÎm ó%òlŠ^)>ÚPY ÎsJâçâmÖ(ÖÈnQŠÙU8ÆIò˜%ãËÏúøz\²»ñŒ4Àu×]Ç{ßû^^ùÊWò‹¿ø‹üÂ/ü“þ5å)šú°GŠÞãÙ£»KB¬„0c8DvíEªME!YbÈX–K£ ç" «Ly@ua ñz¿º-Š%ñ˜³ÓxŽZN¡ é¡UÂt ³¦æÁVò‹J¾Ò£¬ÐÓ5.Rc«å(fÈÁm„³˜þýdò0óv™mÁóëŽçIε¹aöœ`½Š9ÙôòÎí¬»ãœL ƒ)EkBÒVZÓB£[ÂIÀZÝ±Š®ÒèÙ=lº ¤žåêÆ³û{{šÇ3Ð?þã?ÎG>òNŸ>ýTŸÊ·$dW­Êíª%ì”ßÉ„²g¾^5o/–%G —DI¢¨dбT‘%Œá| C,C”0@`ìÜŸ0À‘“WdžRF8_’ù‚f©L•Êl¡,ª27p‡•ÑÙÃõzù2©Ñm;tÑ‚]AÐt'8j·¹Énu†›çê~N묇„p¿"$mÜ΃æóõ@oZh]3 ¦:PS4ÓÒ£ƒ TCmÇfÏŽ{FZ}MãÙß}#ƕހ|¦Ç3ÐÖZ~ù—™_ù•_á}ï{ß·$ƒÇä/Ó·vƒcÌ»×uâÞñªÚYðZÕJÃ.˜S-Ë%G«’éIH;r2rJrJ†R’k¼<¢¤¤ÄSà¥ÀkA ÀW.2¤Ï>^ûhèAè‘ø!õrD£23*Y °8­dG•|yƒÞ¹³¬ÛƒN‚Ö6É_a¶{Šë]Î-‰pƒ1)‡ÔVK8£¸xµG¸08‡4°ú2XzÑ&îpŸ¢žŒÇˆÃJŠ#Á‘âª;Ý„Ø8T¡ú²“°zòÙK­g3XžÌZÿýøzñŒôÛÞö6~îç~Ž»îºëq}l¿ßç-oy N‡™™Þõ®wBà§~ê§pÎá½ç7ó7÷|Üå^å¿n‡Ô•ŒK¾ôWC9:Þ©ÊN´ÇTpvU·áІO)ŽB£ˆYJ<OÀWÖ —®±GöÜ>ÞŒèW ”QUÛ<„Ðí£a›í—óXÙ—ìCl?ž„xFúï|'ozÓ›˜››à†nà·û·¹ñƹóÎ;¿áÇàà‡ø‡yãßÈOÿôOsòäIŽ;ÆÇ?þq®¿þzÞñŽwð®w½‹üã¼üå/²¿Ç»"ÆdÉÝdm´¢ Q‘Þ]ºS¡ëò¤’EtB‘¼{wq¿{Ûåç'.aÁk› 1ƒF»hˆÎxƒr^q‘•ü"gÊMší ’æ¶Ê!ါÏö¸q®®Qj¥¢¥àK%ŒŸƒïd«„®!ø‹Œü— àü-ù1}?7Ÿžæ*{5ÓéAI“$Q¬S¬‰# £ªqé8«½ Çs'iÞ§E<£ýæ7¿™w¿ûÝÜwß}„˜žžæ'~â'þNp8}ú4¯xÅ+8~ü8§NâØ±cœ>}š#GŽpÕUWqêÔÿÏÞ›Ûšå}¿w­oØã™Ïúv«[=Ë’, MhB€G¨,0¡BÅÁ'Rv*EÙq…8E•*”1¡PÂ`9±„À‘°Ô 2jIH­©çVwß¡ï|ϼ§ï[Û?Ö·÷Ù÷ª©õ >Ï­Uß>{8{8û>ûÝÏzÞç=ýM{OóúòìwxÌÕÕzÕy͆Ý×žŽ Ãë×,¹êôüÏÄxåÏÚhá1]6½!Àd£ ‡0¤µ· Û;°µ…¿|™­ ظð8íáãˆßàÐé>Ç.¬Ñ—TÕNµây GUÑP舭³T Ìê á9?ú·P¬¬­®aW–1 ˜^é´¡]4Í*sÉýÖÒ ‚ÜoN1sö'"æ²>À7/j‚>~ü8øÀžöí¯½öZNž<É[ÞòNž<9#åk¯½–»îº €'NðÖ·¾uv›ÉdÂG>òn»í6n»í¶g𠞦ûƒ¢ûd=c, »Ò™#^¦Œ6-‚"%ëüeQgK§?«¢ó?Ï.×ýßšÓ¡Y¾9ÖÆ9Œ, ìYص°c`ÓÀe!»,tw„î¶'3[l­z¶Æ×qng>ÖL«©tb<"c"“ä%1»Pì`ŽM(ß8dó]gÈ.ÿæß~·/;^vƒe9´ÉÉ%ÇJ†5M m®*¡§¥³N=çÓ²ig!Wnž(Ï<ð<ðþ áEMпð ¿À'>ñ éÀûØÇ¾áÛ¾ÿýïç'~â'¸óÎ;Y\\äãÿ8×^{-ïyÏ{øßù~ê§~Šªªø™Ÿù™ÙmZ­ï}ï{Ÿõçñ” W}Ó¾ªèeßБNϭب’Ò•RÒÜT™ ÍºZv¾âü¹ë^¥dìP7Ç dŒ!ÍÞ2°+ÈŽmK{ÏÒ欌KÖBF;¨¯òÐË-§ªœ9Š»´JôËiÓ–‚%+ ,;XsÉÎ!YÀ®Õ´_¥è+ GŠûø£•wséÌqn–#-ê1,Š¡#B‰“òó¦ *Óf•§âÝ8àæg†ùbçgögŸçGóÂÁ‹ž ï¹çþðÿðiݶÓéð¡}è /ûõ_ÿõ'½Ý~nÀóáâ¸ò~æ‰cê‘6Ì)šZ¿C„àÁ†f5aJ&€qŠ4Ùê ºjÈ”dý/žvs׫¡™[‹ŒÓbŒ†ŠÊЪ,Ý*cÙÖ’uµ”²KÝ»ÄðX͹c–<›0>ÔâÄ#}vOwÙ¬–°€“–Œ>œ Lö8Rv‘" ñ2xË+ò’ï¶gÙxÓŸ÷¾Ñ5Ȥ‹Â$ƒ^íZE£pعÔÔ¦ÃýêŽ+ˆz¾€>ð à›€=Aß~ûíÜqÇ,,, "ßÄï¯Åó–0c‚9]C§N‚9²¦!kÒ4ëÙ¶^£C6© ¹7”ÞÐ –EÍXÑœCR°¢†\¶©8Mµ´Mq̰|Hig»LŽNð«m.÷»T'ÛìîµØŠÒ#J›ë³côŠ5¤ÕEJƒ D}¼Ã¾|/šG®XZ«·’Ç£HX Ò"˜ÅÏu Ê\£Ê”œãœý’Ü$|©<Ï ^ôý©O}ŠÍÍMʲxN úù€ÎèWç*8MÁÆšÎר\>ÝÔC¦a5‘t¦2Ë¢H"lM¡su³ªfMªf0ëÄÃØÁ¸Jk2Qã T“ýóê Ü|aL„ÌZj訥/‹d¬’³ˆ`Ì•ž¡*.S¯;òC†µèf{TåEäð-°Òa¸Òá±GZ .¶Øu%#[R•]nlµYiµ1íl9q ùRÁ­å‡^VpJ¶É ÈØbc–é¦ô4ÍÉ+lÓ#Ì—ÊOOÿ-ÌbÏá׃ƒÀ¤+ñ¢'è›o¾™Ÿû¹Ÿ{NïSÈóÐí½ÿÖÖʺßf<åmÓlÊIo"ªM¼]c§môÕf̪™#lCÔÔùç┬õ ²ž(Tš&…Ocž+… ±Ó¨Òì;Š`r„KKŸŒ²4h—ËÔr–Œ³Ý=üº¡XÕ%X´cöŠsÄÖydý:dµC½ÒæÂC-F'K&ÑR—‚kµ¸¥}-ë6Y§‡„%äáK”eÁ‘ÐféH‹jA0ÁËdÔd´È¤ÄHŽH#:´¤!î«-ûÇÙ‡ä·,IëºÀðÍÇ‹ž ?õ©Oñ£?ú£3‰ãƒüà7ý>Ñ7Ñû¦ßÏÕØwmÀt,ì÷ª¤úZ¬"FÁ*ÚÌvÓn!aα!ˆ FS²QƒUC¡–VL„ÕâṎúk ™“ÖtßP›k ÀP`è`i‹`¸@Í ç°Ù~Á– Å‚²Ö‡C™²™o2,O íkÕÃÈJ‡¸Öf¼’sò¬` -!´ BûÇÚ=²Î2âO#o#ÑÓÝ-éÍYZÈÐŽAKˆÓM±Ía“f'Ó4»iËJlŽÍK?Û:| á9¨¢Šç¯Å‹š ?ðð¾÷½ï¹½S…þoÕ𓱩²ž»û…}‹Ý´tN¾`sÓ¥á«ÓhM.²L“G¨|š‚O×÷þ ²NË Ñ`Õb¢E£%‹E´t£%ª%Ä ¯†zNqª³=Ä&3#iøJaÒÝ+¢nPs'g.`ô2Y9$,‚ö…ÐÖûpÌÂù|@Už&– ­ud}•|-§\ôÃå³ÂR­ ßZâXë´[‡‹ÈÞrÆ#È×-²h‘žIrA²ô e~ˆ7sÇf÷õëæDÈ·nýÔ§>0ôÕxQô›Þô¦ç>\E¡þÍ ô' 乬¢çÊg™zqiÈZÄ¢bšÀ€Îõ‰ÛsÅä ›ærYcÙÀ£Þ'ÿ\l²’c3]$ZP‹Ñ Q‹‰9V3rÍ(Õ¢jjQL#“L?Cšj]šA ¨ÙÀÉE”óˆ^@ä2F¶ÈÊ Ú´ ”°Ú†£9\“GÅEåW‘r‰¬ìRÜv;­…EÊ5ÁœFç…ǶÒ\DW £²ÃÑ¢d­8„ÉvS÷bU!;Š8‘EZi R ä ™$u#)ûr4üU Çþ‰o]~n>£©ã›ðî@{~b¼¨ úï|çóp¯J&ÿއÎþ#n=›±Hßì{Ô}’hÊg!Éè~0¾ ¨ID=mÌNTÌ˶™¬bóH–EL‘RSHs¡ô;ÈêD¨Þ¥ ;4D mCÖÄlFÚªiŽh“¢'•€JfB ,[D6ȸ²°ÍÆÄ.h;‘%Vr¸¦[™0(&œ*Oáó.…)iµ„òº›h-®Ò:”‘ŸâEacGˆa’ðÈæ9Ky‹…LiÙÆ¨!I?pÞmzŽv:ÞËî‡A›«4èy;ÇKÐ_§ú |›xŠ¿ovzr@ÔóxQôó†¬Åƒ½óòÑß!ï)|«ø©qn*bÈô;wŒ@ÒU÷]‰¤µQ C (Óé&™D2ÉÚ‘¼Œ˜vLaÍ­€¶B"벆¡»5„ª˜*ëh!¤ŠšFþ˜’õ,TYçŸAhLц=¬n¡²º…a›Uh[Ð"Ý\bâÈã-ä‰pc>ಜD¤M)–²ðk×S,_Cy¨ ¼fü®pq,L¼0È„õ̰l…[Ð6mZFȲéÎêLÌŸ#áùÂiýœîÿdÕòK…«Ÿ-’¾ºrþŒŒžñïüVÂA?EDÞû†ùðè÷ŒÞÏB?b´øæpôÜ{W2Q4Mö04$±j5³BUÒðÖÌ ¶ CPƒG(‡ɈdÈM¤("yž›ND;éH;@Ë£-— Ñ»|œ!qZyZT³Gá IDAT³9ž¶š^µ™Ä!fŒ C¬ì‚n#²K”1÷W³8hGAs¨J!X‹•œÓ2fKNbÅRH¤0E6¦8v„|}…|ËmƒBöKöÁ= Kú&u¶D(H£,Ò óžvÎwNWê¯óÊÆ×ø£_2Ð9ð4ÞüO&i\üZô>ú) üöÎÿFý‘Š¥—]`û†UVCDsáÙÝB™ÖβŸg$†ä=ˆÓdØ©¢µdj(h3ë/Ö3!f17D±D58¯ Qk$'RH  PäV(Ú:í¤#€¶#´=´”5ºSsM‡¹²ŠVÓHÓç’¶E*DF¢ìCÄÔ˜Bf]5âÁŽÁ X3¨µ¨ääRГœ âØà4‚RP“3"·{äö0ùÑUò£KØ! ¦Ô >C„h`b¡lö›}B2Ò²Êl¡Ñ¤~®ÊJšÊÍó,>÷W{©põ|æÖ7Êѵ֬üãÝ5 >ãÇö­‚‚~ªáÐ?»ƒÇùí_û—Lü‡ oÒu}4Oãgò?túöýŠi£IR4’|Ašõgb¦r‡÷ˆfdj‘˜ªéRÃHÌ!f†X„ܱQ;"Qk29’@I¤Zý@«n€nšU¥ÝfVu|"í–ƒívj´vñ9KUtCÒL›k$õ„O'!:FŒO–cÒULf(˜­ŒCEŽiå”RЧ`…œ ±ìÈ6y”\Æd2 “2Y'“U²¥%²å>VÛØªi[O¦ìÙ ¬’”3޼2ÚL4g–—4µ No·ÿ'~"Ây©PôM%=ûé OvÁ>jþüÐ/òÞòì>¼1ú)BUùå_ýVŠàGþÚÿÃïï :û7àØŽks“šúžòˆz½’QG´ÛL‚m{t§Nº‚ó ³Ùýç‰Åc4…ø«©“g¦ìd#ƒ2£´9GÖsÊVN_rV$gSrvȱ‰£&gHÆn O’eŒ,`Lév1ÒÂH™:Õ^ùÒÏkW¯™uæ¯b—— /ú ðWòï7 Z\Œÿú—þÅ£cý4•_üíS<ú®eþÅÿý~ìÈÝô.½ŠñºÐž@†±‰pSµ¥O¼Û?ãäi²³îËÓóЈhj¥ˆ4Ô‚Jn’3ƒÑjÁcBA+æ…èÁO”Z ”JhB«$– ™ÀÚU‡hhi £ž®ñôºžn;`º QOå®GI„éfc;ÀŽƒo|Ö’*j`:qÜhÒÙÚÈÔIJ»”É’øûœÃ‡rúŒ›±MÆ®d $c$j$‚ °²ƒ•E ‹º„B‰˜”_— ÐÓ®AÙ?ÂUúÅô¯“ŽûÓVÒeÓTž(,ùP_?ßä…‚~{ÃÛ?ñ×ù%wžýÕÌÆwþ<{³â–z„‹+И 1I‚PÙ'⦠Ftægž'éä¤kæšQŒ¤ Ù6ÙÎ)ÚhÊJ )f$À94x$”¡Dƒ!6ý(Õ|¡ ¡áÛ}|žÍ6=B­°£5M­ž.žžxúý@¯0€v}CÌSržº@"ZF(ZDzÅ” =C3Áe:€¥606Èn²¹‰Iz¶„ j cKw5£·œ±ZZÆ2ËËKÅ7ã½"“de–Ë.†NCÒÉš‚ä盩Ï$}#õŠ^Â+§>ôœ0_øðõSCp¼ÿÐyýó‘¡ðÆA? ´ á÷ºÏ{~hBç—~˜ù¶ÎOÜÿ]l÷ß‚^_±â!tÐR1Qµ© [Ó¬ÀÔ’=õÅ¥ªr¿ÒN?$ùVˆÄÔ ØX4D3$4¹øy†š€Ç5Rf¬ hCÒ‡„@Z¨·¨K$]?ßQ|Çz|iñ’á5‘\ìi`‹ŠOW==Òê«gÑ—<í¶Ç´Ak  PDÈCZ™BÓî›è(¦Þp§isRçb-û¹žS²Œ6ù”k‹Œ- m²cl[:‹–î‚%v-•µLŒ¥–474K›NCj¡ñdÔX„ mVœ¶ØÆÑ!Í­u¿ý›+¾fÓà€™ŸÂÎÍ¿ÿÛðº¿û|?”úi`¢žŸþ¿üý$¯úó_ÅŸý/¹ão߯ñ¼À+÷ÆŒGǨ–•0楌æôÔc÷lXy¶UÙ8[ðÑw¼‹_Ù¯ƒ—úi …å×Ìr—¹õ¿ÿ}>ý[·ðoù-Þuêöξ‘…Õ|‡bbq¡…k{Šà!d©»Ï4qlÒã&0Ä&t.5ŸÄ†9<‘Ü(¢‚`µÀD¡ŽJ!9‘Œ 5*žv°­2B« êjŒ÷”®KßD— ìj¤„â:àFà-n¡+‚Viœ0ÐÈÚxÔ³€cÏžz†xVúž^î±Sr–f"x à#êC ž®&*!@6s#-TA‘Z`’ÁØ"C {v ²m`¡Yýfu ti ¦c°¥AJArA²æh’O WæmÀìÛŒÌqï¬%åj=c¶hö-s—¨Oêjþ°ýeþÆõóð+¿ö|?œúiÀ9ǯüò?gåÐqt½ËÝO³öKïâÁÎ÷ñÈwv¹eýqŽm×T{Ç,CfkJçð•àŠ %`¢ÇDKŒš H©fM >#h!HÄJÀ6U´DÁÆ<7€`3¢É›®ÁDŒÝ–ÇÔ­<Œ«I·\ŸèJ¼ç”ÊÃh ¸aSQ¿ÔÁu ÎZÜÔ7 TÙÖ [Ô³£ž]<õŒp¬—ŽåuO&M©^´ èDÑ‘¦f”i‘¤¡--i1’ßM ‡$2 ìåÐÏ = ==IÇ®ŽŽ@ h ’保‘šu_rž×/LC¯†iÉÝ´{7‰Wµ|?©×à€™¿qhä’w¼óü¿õ†>È^8 觉²Xà'¾ÿøÐi.šÿ…/}ê=|øÇ7ù[¯yµ“sá5\Zë3Y²êw±ã•k3±+ž<8pÉ:—º¦S36Úœ A„h•ˆÑ@ibª¢½!‹6 “ )w¹[˜P1$â@<ŽÇÔ{U¨sh»¢+qN¨2vÊhn¨¸‘RÁ-—¸þ ®°8,N¥3¨ì©g›1Û8vÕ1À1VG¥ok«ž,x¨=:èP‰ˆ¨v7DsDZiO; -®dÔ†E§î oÒØ¬ ÈÄÀÀB§€nÝ:t,ÒΠÕt£´ ¶‰Ò3MWJ³¬IG3=mÁf`3ÔXÄNÛÖSµ¬jf›yåcªrÀ• ÞŽ¯/ŽñÝžG{”øm·‘>0ÅA?](„AE½u7?÷¶wQÅ/ñÚW„ïøôéÞÿ7yèøu\<¶Çñâ"Å^Àˌq§¦£ãF#Î’y!²@.A|†Æ ¯óäæ<…‰ˆDðc$fd±@C’lC&„²$ãu8Œõ´:9t’öi»E–\‰«¡r0©§$ n¤¸1¸•¿¼„k™´×ìí9"Cõìê˜]CmGPÖ±¶ì1£HÜSÂŽ¦üåŒDnÄ †Ñ"}”¢]˜õÔe‘ôE¦Ý$sk*‹8 US"Ç|®€ºHÇ¢„²€¢HǼ9ç Íb>ð©Ñ–¦9'ÒtÍ]Ŷ"s*Ç—M»@ùÚ`QÙ¥fåKŸäÒ5ß…˜K´y_‰‚~šÐ‰gðÌæå;ø_ßk°ÿçëxÙÏyêíù³×¾…û^½Ë­Ç¥³·Eqö8{¾`c= ÙˆVØC&–0nS[¨ZÁQj&e;‹Æœà-¾”¦{ÐSJ 0©k“‡ÛÌô™²’`Ê$uhHÀŽ¢çÑ‘‡AD] uÀ¸H×-áë2éÑ5Œke4TÜ|5=±¸õ%\Ûâl£IkÄi Â±«#öpŒpÔêˆ8LôdY¤ß‡ÐQbš*•r”šì$‚ÅÒÆÐ]±q=DÛ¨¶’ôܤ“¹ªZ¦í2‚bÙ×2šÛéÜi2ÐêÞM~ˆ6q©ÓíB%òÔk3_)OIyZÔÏÜ7Ó÷WËÖuôAqÊ™°tß¿æ3oø1|¾Ií0ÅA?MD­8ëîà¿ø?ñ‰í6kïúe~h™{÷ÞÆ¿»í1Þüúû9¼{‚ÃßÀðÂÍœ=Üfçè˜%³…T#ôpeÜR*õ­è2A½@•¡Q©EqŽÔB.ŽGn›®ÁÚ’…6ŸQ©-„\œ ´ÂÏb×czöº;‚Ú¡.`ÒwËøº rP¹Ôu8l4éz”,yõDq‡z¸>Ô™i¤ŽˆSGMÅ@GŒÔQS£Ñc½bƒrm ¦ !×ÔP8 ¶óÑ’H+ X–]ÁÈ2¢  =ÐJ ¡ UÓSÉcÖͼoy:ž*3ÑNÓ|d¢S5HL:wTfi€³DÀ¹¶åÙ~ %9išÍÆigá|ÚȾ:}@È_j_å5'¶0ç ¾÷Û!? ¤y¼Oµ±|üÚÛøþöRWÜõ†7æa÷any×6oxüq^ýÀíŒ|-'Öq⚊V÷"Kþ,ÅŽA7ڌԲg§ŽRG¨VP :)ЩÅP×鿚š6ŽŽ‰"Z „Eìa#TQ Iæ0-Q÷°x2ëéõô<ì8tgœ¦ªøˆ­aÁ-ãêœÚ¥*:UÒà¢v#pc¥>ÒÁ-¢.¦zt VG­c† pÁ#^Éœ’{(²ÜHI&PÄ â †6†ª‹ «ë]ÅÆeˆ Hì¢Ú&jŽN+è¹*W¦繣̎MHÓð3íΜn¼æ0MÚV¦´:ämLšBc¬ÌöUšQbSûöXæìx–Ž'DTE¼çÂÄ0Ô³óßÎ`\ˆO€‚~¨ |r÷aîùƒþÛŽø—×–¼}ë~¾ïwïgiãÆ'ŽòðêíÜ}ÄŽ\äúì:Ã!Ù¹%ܦa§´lõ#˜¢¢¯Ñ±q›•J’6LTTc&,ÚF‡®º¡C?†ºTB[½6^ &DD+ryËSô=ôºR5]Ep×Â’[¢v“Z™4rÇp~õP©]º>Ú¢^[§n§ ¥Z=µNðqȹzBîj §´Æ¾p’·¿âVÏ’fÁ`ý àëšGàÇèdý6ÏûõQŽüøïqúL€Of|R»Üñº“ÜtóŸsØÝËËÏ_º†êb³Ý6÷"¾Ñâ"kqâNŽ "µQ†FÕ¤8Q­)QÉDÁGí¡qL3l€qPBBÏ:m<•&Eº…£Ux: zMœÌªhœ¡å„U×§ª-§Lê¤IŠßSê=p3¢Î¨¯ã»õT#´²[8SoÑ÷Ê’W–,+h3’ÐL,†.Vˆ,e¨‡Ë2cm³'°§‘a´Œ5Ew8M/Aœ¯€›ŽK«û¶æŒÆE—%ƒFV$òÍZJÙŠ6m…–` ÐdÁ&æ`l$ZÅE%u=êU‚´A°˜¦ãp¿"Ÿyï®öÛÍrVæÎ~NÞ™/T(Ñ+»¡BwïçØ¿Zàž#–¿¼0Â…ã‰p@ÐÏRVï]âýÿ}›z8¤õ… ÿþ†ëùüÒ{`ë<úsôµgxƒ€o¿Ðbõ³Ç÷ßÎe{”V-gÛ‘¢µÁJÞ‚° ~© d-‚fTxÚLèáéäžþ´Šîz¸ ‡5Z%‚Æ2gYrkxWj!ÔJpJ¨¡ÞUªíˆn»4Ee«Y×tÐÞq´ÞF« v«Ëœw{sÊ¡4+3̰qœerY¡¢Ë%‰œWÇ% X6Å2Èfú‡|ËëS ?ea² '<Ÿ{0çþ¿‘ÿæ}ßÍ—ÃE*w p<úYÀbVð·¿œ?ý™en{ýYÿòM|ov3ßvûyŠâ$U v¿²Åù{Nñ•Î%»Ê#w±ÿˆ›eÈ¡‹}äþ6áÌâúlå–³™²qXÑ Œnr˜]"Jt‚©€ƒ8$Æ ™¶ B=†ÉÄ=ë%Á&™ÃØ`̪V³@»ë¡×Œ­jTT‰œÕðP8Xu+ˆ+±2Eˆ´ÔÑxÎU5[ÚñF^ªÐËôx.G«‹ìMÎq®Þæøº{`‡E\Ad™óDN1á,†ÍÒ2YÌð+Y÷ÈZ€•€®Xâ’ ö…Ø%­Ķ¢E@m fž˜¢’±Û?ˆˆÒT˪X±”XÚXÚä´Éh¡Dò1A`ÒÑä—ÉÀ¤¥j’ÚÑx©u¾]fç6ï© ï ú õ[´Ö$¹b…ìÁy—s¶¼—Þ=Ÿåü¿‚ž¿‘•Ö{@ÐO†‚~0ìqçWîãeïø¯yuÿv_ïÙØcòãóÙˆÓÁ²rtÝ»ŸG¾ÈäÆG¸Æý'Þî6yÍ K÷~9Â…µË\Î2N L±lcãE{€ µÇÀ^ qL°1m^á¦w ŒM QÒŒ å2#Ö5°Kd¡ ä³I(Mí5M. u^ÉgÅ/“¹e m6ª§g1zÎí9.[[5õ… =?A¯Í‰Ë×'g83Þ⺑²´kÉÝ"V–ÙDy”1ç2Ãp9ïgÈQ‡Êa=ÀZ„Õˆ®(q15ÆV æ~ŸŒ3OwÅRbiÉ#“ }<‡Ýd‘mk9E.-¨'är‰<ž¦-hcÑ¡…=A¡:!k6³"0È!nAqµE$#¢ˆŽÙ&°G¤²J¯ÓìÀ"1ð >K™5>¤!ž~ˆ„]rí±¨Ã"Â*CDŽà9ªž‹µçìÄqiXqéܘñK½rŒS»èT±Íã­ãã%áºs]«am„,Ö°¸ YÊwî­ˆæ éJCÆ:ÝäKŒ)'rŽ -2zš±( ”ôzéI K¤M$wël"å:¤(SŸÌÖ)j´J”•œMJ lÆ–Mµf3Í—&B3¿eºÌLœÞ'ç©/zÚ¹¿‰8Å‹•¤›L’(DQ$Ôĉa³È û«w=±Ï\ÇÝ_ý-¾ÁðÑc°ûð3xžö ý,akk‹ó±ÿµ7¼W|EùM¼ñ.¾ûS'¸éDäÔ«ïã»øÜg߯æÇZôNýYës`¶Q'hHnÛ]S6rþåàV…Â>NàzÙ M2t'Cw €Vdg<1 65´–(69?¨Ø¥fD bÒ\ÓÌÀ<¦ÓyL_KÝ´‚öà'hu›HÊkÎ5£ƒ!Éñôµf•Š£Œ¹Žš‹•ãñqŹÁ˜smÃ¥ru;‡'Ô/`ŽEÌ¡!º¶‰,ÐÍ mS^ó4¿³I/JžäDÃQu¦%Oÿ)J®–®äôÉX¤dQKDX ²@˜‘sKV¬3PÙD̵IãµBD¥!æ¬ ÒF¥ J†’È9&Cl£zdmÊF˜šg¤5«Òl,Â<9O ê}?Çþ°à^Tš‡Î,BD‚ÔP[‡u{”w¹›CÜ}óð¦ÿô%Þùê‚Á«ÿƒ/\Fw´ç¯‡‚~–P×5—?õ07üfŸ/?E8ô>þª5^_}šþjAñ]{¸wßÊÆÆ«Ù*ŽOÔá  IDAT±@A99‡1i“ÏÅm¼n°Ë6Qv:ßaåVãC¬Èˆu)½œ¥¹|ƒ˜€ŽÉ5’GA¢RW0Þ€¸ ±2hnÓðYj†Œ˜ 8Ò¬ÖÙWtÛ5.%êàÑ8Au¨m"ÚŒ_UU GAM‡1ž1‘]”-lµ„-ÎQQg¯MÐ¥ßÍ lƒmú5Gcޤð‹}K„êþ&Ül2zjiS°@΂æ,JÉÊ"¢F$Ð'­žFº²IÀÔ™„´Z¨-êcj?±%’µQé ±M %N ^R0TyÕCçÈ9M°™˜5ÓؼÀóCEfä S’žµ!îŸ9‡©tý‚äé¹ç"ªD/Š¡ÆN,ãÐâry¥ÎýÜú'9÷Ýù~þîÿÈ?úIåïxë¿ÿç\r݃_ý,b 8qý]¼ù;ãsíM>ù¡£Ýù'ü½-òÎGX^¼…çÈ5=:U (º xjFçN0Ü»‡¡^ËëLúZ=„ß½“k:ç¹1‡£¾…9[/dȆ…Q·© Ç ŠX’‡D$ƒK¶CÌpÆLâ§[X*hœ«ô¦ß˂ơ!h "v–§ iÔ0AC »; [ô”=Gg±ÆÅíe}Ö.Ÿ¡}lLm-³Km,µ±x1±M«Hª'¦U¨¡£])è‘Ö-QUXË"1UËY”@¯©œ[>¤Š¹ 0nVÐ:IAl ².ÐÓAC/9N u'I–Æ*&—&VZÁ„†œ=Is6³Á³š.Æœ›I,Ó³hÈùk«ç'–7^H¢G#d¤Ç3•3HΧ†‘ f›þÅ‚Ç6×ù‹µKÜüöðÝ¿ó×ó±w7÷Þy»—Ÿ×çñbÁA?‹pYdrë ×¼û;±ÿþ7ø§ká/~ò=üég¿‡W÷¶¹^o¥ß[æ•/?O6|ˆxtH¼5'P3¼o‡?ÿ,îÒ˨³ð‹ü 7n>Ìëý„¿Þ3´OôQœÍÑ ãºÙ$܃¸G7´X”½ó ›xh)JMΘ “´¡%µxO©$e‰’&4vÂ"ªcfqŸ@b‡H…ц!¦ã±Ý@Öóä b5b•sc8··ŒÆ—c Þ²ô>C· ùjd’ÁÈD*c¨ÇIšdžZ:åÚ@¡‹%Í^IdÜ—DÌ} èI`@Yì$`Æ{tlSå< h¯`KÈúPôQÓGB—hÚTb¨£P5ä5I¶JErEŒo#Û8D2ÒÄõ)9« "û>éé󴙸oÛ1š}º¹pî]öÜSuú€˜ÛÙLìÜtT‚‰&dã §-.”›,.<ÂM÷À‰ß_çÿ¸áhí\Çu7-ñ¾ë߯ÝwÞ;ð>C8 ègáÔˆíz7Ÿÿì'ý4Ïì1ù/–iÕoãÈ^WzË+oz{ä Ã7txl­àñÁˆpKÄõ/pù£Ÿd¯ÞÄíç–‹Ÿç{dÀ›FBg+N)æ$p6–izq ›,‡ÕÓ!à/xôR„Í´*R¯uEn"¹ñà¶³f$Ȩ’†¦2¤QPiNœàjÄV˜VÄt"¦È”|IÉW”bMÂ#xx/#f·`.+a‰öÅ@ïþKô¬ÐÊ…lQ˜d){¤6©ZÙÁ¹BÒBI¤«‘žDzs2F¿‘1ì8 £´tÒÈ〺ˆ˜²´XDd }^ &Æ0‘Ô|T‹¢"ØB±-AZ@™víx2«†L9KHó"“~1mdBÛ1‘Eª:g<Õ«13Ûݾ }• ðœéÍý6‚ùä˨,!~5 ¨ï2ËØÓs“Ošµ€6ÐVÈH> ð”I3[Â9G &‘sj*ožˆt…ðÄä WèÔ0GŒ3ô̮÷µ.gÂÚûòL[nîHgw”ØY±xÀà°QÐaÎN‘#=Goó$7܈ûÎÞÈ/¾fÀ»ßý)ÞñÕ×ñÏ~ªEï­ßËw>ÀåsÖoý,#ˆ²ºü o}Ëã¬_þ‡,÷[˜, ¡;²û†!Ÿ+ó%½‰Çý*Ãí6{'‡Œ>wç}ä_ü<“xžÅ‡Ò• ™ÝÙ¥hL&Ää<ˆC—ñÚ¡¦…Ó‚Ãz‡µb¹®œópi‹»df~XÌ…J¼,T§!;ÙeA§$=ã´iqKñq’ƒ´ÓÓ»¶!æ|M‰ëP¯ÁY'<6G ìšC˜üfÔO~“”ëJ7¡<÷-;¤@(½ÐrBëˆP¬ ¶Cª NKEĺˆ©"2Ž˜I@FN«f#‹Ž2ñàJ4ï!Å*È j–r^ÄûC1Œ Œ&¢8›¢H³6ÐQhƒä¡j–#W%“&H) âøÿÙ{Ó ÙÓ«ÌïwÞ÷¿åž•µ×Ý»uûv«÷MjZ¡n±Í ÌcÑÆ3@h<¡ˆ æƒñ@„á˜0ü{˜ƒ  qšÑ’ZBêåv÷íµWVîù_ßãÿ¬Û·GB´‚¾'"£ªòŸUy«â¾Ož|ÎsžÍM¹> ,ÔYž€z”I,RÔe÷,7™‚Y*07•å§Üºðò&äþË$·~¸ù°[º`nýö[Àxöø[äà?{œ nFÍX)_Ä cHÁ7#¢ÔÃìU¹Òh¢+—8¼ý<ý§ó´ÿïwòÇ×áÕŸû$?<ÿ~î¨ztC]>ȸL;Ñ™£HP‚”i4퀷ºº*$ØÈáJ¢\6º Á;x'6FŠrÓC•‘ Ò˜pã¡MTð3ðgžAGZ¥s•Y€â@ŠÒ$JR…¸h¦®ì”(i Ð2µà×Ð`‘y0ó¨é fgšLs‘Hé¹ SQr_ð"ů RS¨‚ø)¢%=„¦ø¢øÏd”¾(eOmcü8&Xß$°¾l*Ø Ø!˜¦`ª áLw|à&—¹ÒÅ?v%u1½œ'2-€ @3š0ÄtÈM‘rÏÇ(ã\˜ÅE‚_WhÔKpÆK€ ¥”1!%PK(Šï@REE2¡¤5,ŠG&%K]̲ Å€P X½¥{.tÖ=Ëìosëpð {Ö[tárÐÐÞú¿?ç›;pÞø¾ÿŸû™ñâV¢R*Ì"ÆAîõIUÈ=Gd¦Øi‚)êlÖ#üfÊbó,§^šçêçOòï~†ó§.ðÌüS|øKÀÿÈ1n¼XáúÆïã‚+‹'íïÝèoS;wŽ}ìc|èCÊæ©ŸT8¿P#ú%}ŽJ÷þ«Fk4äúàEŠw Á‰ Ï«_[æåO7yb\aÍËñìÈ&XA—-ÒÎ!—*ÙþéÆãÁ5Ýà°»—µØñêáÒkQÌŠùÃô¢`o€7(\“‚:Δ}IAb`„Ø ©•œ³™w˜eÈ)ö6sØ0pÃÂÄÎ!Þ1$;†«H^`œ+±¥Ê}<ãÇ)þún™„R”‘X2Ó™4Ý¢SÈ\9ì‹ÝÒ¹INr$À›CƒEÄ,Y@ÍbP™c"!}SÒ÷CQÆ"L­B øM…¦@£ü]Å‹1è‘„Gˆ%¢¤£M Ìf¯ª‚ ê“©È)yì2 ¼`¶šÉAÌ­ÎÀYfºo'¥¸… 9è®õæðö&R~õ¦!⛿ºµþ¼PïÚ„7ôÙŠ"êÀœ Ϊž–ï¬ ±¤UKêMix9Ñv »M^]šãÒ¡W9õŽ?à{žmqïÿò$ŸÞªñ'?õ›´îú*´~‰öÂE¶ú·Áù¯[·úÛXýAÁ•«S––<†‰E÷6ð_ñùÚà ï;ÏSÚâîl>R 3ü“ñ æ½)<Òdç¹&žð ]@¤ X˜ ᘵi*jÀ•tG‰/o2<»M¼w…£ÓûyåÒÑÂŽ‡»f™\²ƒ‘,SÈNê%ÉŒ€1"ÄÁ”ëßâ»rPÖPh+v±@V½º²ç„Lٲ¦'ˆw²Ùm·Y)¾èÍ,î*K+<Æxq†·5ÀS°9ØÌ¤B9´3YZ¡+$ݳE¦;ÄÔ!XB9ç¥8/âdŽžúúF Eˆ=ÅT„ ¥H³¤p¤æ;F cDbBuDb©(„ 6Ñ™t2²\|TƒrƒNKu¸z VË7$äúÆ–a!3Z¤¤ n6Ó¼¡ãÐ7Àù–.ø@‹üÆcÞ„Ú³fº¼ö&Ú‚Q†–¢IuˆZ @­ .G±¥-‰)°6GÒ ¯¨ÓÏ,yÓ'vh™]:ç–ÐK¾t×)N¿ó9žúÞOpèìoRýorÞ½÷ßré…çþ?ÀøÄ<ûv´¿¿u ¿µ~ã,_ù?þé*ãÕg0§N3L/°ð±÷ð±§ïÀ¼Ç°27¤F O|B”…Ð箊ϮääÇÍâ,>Æ ª ÜÁ}ÀYŠÉ%I`܅цÒ?›±ûܺ߼@sg™êK;[5FãÃÔÌqr³B!s(5À›IÚÊE1CÄöÁz`‹¤m!PU¤©Ðv0W0ð öc×:¶=(üE$;ùaH!i„f2hƒ¡ŸGH#,¬›b'9ÞÞ´|LZvÑR¡”ptÐ…CS‡$®å©C5@¼yð—Q³„Èj–À,‚,J‹®ûz¢ D˜úJÐü¶"m¶B½@¼10FS"-¨ŠGU!R°©ÂXa šÛ™i@­í”j9Ø:” 4ÃH~3>‹|v+§‡¥3ž”/´eO{“žåÊ›Avö÷¿IJ—ÒÀcÈW~8°%Ò€v°¸¼h§VÊ¿³q–¬\ÅâdBÕ+°‡)êtóˆÝ&,w.Óá2wó$gž=Â'ÿn6Šçù‰Æ£|àë'˜üãG9ÿÞ§yþË_bôÚíÅ”¿IÝèowÝóN^_òü¿ÿX¼¶B6÷¾ÿÙMž‹ŸàÚÕ^ÿ¸£÷8óÍ o÷<^ÌÝÇB6¬Ç¸#˜5CSÁ’O‘–>XCâ»g4åÌP¹” ưçöç„Þ;ƒ,£x}9‚ËÞ½dr”” 0´ ©Q™ÉƦXú³Þ6XA¼ƒ¤×)U u…¦cl})èÙ‚}“³ç)R¬É£ÅÌ4È&uDâ(5Í>–ˆ&B #- l1ÅŽs¬äؼôm’ …„r-ùçÄ•šmÓXBe 1˨,#f ' L¤Æž®(]¾£Äm)Ólçi+RÏÁŒ@û DÇD€³R¼¤g+’XÀG½UŸT S Z*_çL“­F@´4–RÀ †"+_/Œdø””ê3Ë4t ©Cj»J¾Wåò‘®¶ÎrÏÉÓ,¿ü<ÿÕŸ¼‹öÇ›|Ò[ã#?~‘wÿè2ÿüDÄ÷ǹg¹ Гº Ðßæ:{yc£»XxúäO>³Á?ý¢aúÐdiô»|ýßà£õŸàñ¥÷ñƒµœãɧñ¯½Æ±S†ã­½ŠÅ,XVrÒ&ï£÷ÖÐÇ {¾¦Ž¯‘òrPp9ðIüeœ¿LA7­Ð¼²Î1^áÒ{÷yÑx¼z5dnÏçháqT=NHÈ ©sBªD¢ˆí‚_G|¯\g¶ bÆ¥ÞÍ£¤*ŠÖSë‰c4sß°RÇ—Uro ŠCèvqÄ&qTÅQ™Iå,aiü‰PGh`dŒÉcÌx\ÊÐ2)_Ê÷â¥þ6+%^ª!bçP‘ETËÎY–Y¦E„ì ìŠÒEè Œ’Ô„`^‘ÐdN¡‘ƒé=„>¢#"ɨáQS¥Š¤ÀPÑ‘–š<­j@j S«LTÊ„pÄ:”%™½;,ZúlgÑr‚XÌšéÂÎz³a¢Ì¨ u:ÛÜ)A×Y9ø s+tÉú†LNo¡@äàº+;uƒ+íQ A\@¦ ž¥ ÇÚI ¼¼E’âùˆ‰·É¡ÆÊ¥KÛ'yùÆç:ÉÙµoò'¾Î‘o~†J'\ùÑïféò,|è(ŸøÅ&Qõ÷ѳ·¹ç¿i½­ú~áèõz ‡C~ã7~ƒJ¥róÚÃ?ÌO<µ–_ûµ_ûÖžè/ðþ—®sô™§Èþ§'ùÊÎ"¯~¼Ã+Ÿâåƒ?¼þ ÉWOðŒû>ŽMCe=ŽÚ9j^@uÁrÄñ>´}¬ÅîIÃW |ÙþŒ*ûááI„edÒÆ¼Ôeþ+;<º?¢5?¤ubʳ­ ¸Gî¤w©Âð\ĵÍ,`G†â“Ú€cA…z”ºg?3;˜)¹ƒmˆ”Ø8¦Ü "VñX£`…Ü,RŒ|ЉN üDg›JGCHiç)åDˆª˜¿þë¿ÎïüÎïðñœŸüÉŸ¼y½Ùl’ç9+++ßòs]9^…vxït˜ÆP?³Áû_ÿ´ªÛ<ß½ÀWß·FqäÇÙ:sœCl3/ëò XìXæèãeûè} z÷9¾a Ϲˆu3OÕ"Nî`<:Šœb¿ÐeñÇãœwz†¤2¥6ï¸:ƒõúëȉCpg…Ñ™ ¯Ÿ‹uCR ÐÀbBãÁ"5?oŠxC0=ðÒrzç Jî•v¥ ŽD r*¬³LÁ"ER£(Å\âÑö”V) ¡®ìHÕ Z® ”<¸ÌHÉórðÀþê˜j›ˆ¶€HÓAY@t‰œEöðÙRض¶Qö­GŠ¿,,è-àÜö@»ˆô 5¦.u-Á¹’kÉ|ô‚&Hˆx…Äj©2¡äqËà‡!ÁcIË”pgÐLJ waKÐCf ³:[w¥¼ä* ™í¾—Œ²›}yÀ( ÅÍ}"œ)牳)Á^QÄ)äªB!Bá 9qçÌÇ!ã‘R4û,F)fcJ}t„dßcK:ÜhY¦+×9±t–»ŸßâûŸ}ŒígOríÝßÅïMnÐXþ0ïí6yôÁUÜÿæø£Ï|‘s/\ÿ–ÏÏÛ¹Þ}éÒ%~æg~æM÷½ç=ïáÈ‘#?~œÏ}îsoºþÅ/~€_üÅ_䳟ý,O?ýô·ôoˆ&5æÖ .ºÀî;¿LzßgYùÏKÜÿÇsbοó:Y´Lºw­jÄ’©á¹cm¡bw0 –ñ½m^ g´AÂ1ªÉăcTÏ„$_.ð¾î˜-å»4ç!Óó;äM¡Z³œ\˜Ò­¾JV;Ь­!+U²ù ë/‡Ø]Kä ÕP¨¡¿@à ¯W˜7›–|°…Q2y#Ó¤B% Y$׊žP ¡),E0ï ]@Ý"â P7ëôf30-¹RÔ–Ýæ1‹Oi†QÚ&©Öš -T;ˆÎ“k‡.>0»)[ »FÈ*¥G‹ K”·v fØÝCdŸP§ÔÅÐTGS”Z®Ø‘–àÜóбW¾ˆØ§bg9eä„ÔŸÙ`%)9}"8<1Ha 1h¬€AÄ”zi gô†ÑKÁÓ ä ê—ôŒ aÖO—nz̶Ç-ŠR8¡ð(ÿ®RàË,„ Ègɸ@pÖ™bð Ÿ$¤1°^8 eø×sæ'Ç8?ŒXè8WjÏñþ{_ãÄK/òÄsÏóŽ6¿5½Ê7¼È¿ÿ¥}ìI6ÛÏOV‰'ÕoéÌÜ®· @Ÿ8q‚O}êSoºïòåËüò/ÿòÍÏÀúÏ×ÊÊ Ãáæ.I’ðÚk¯°°°ÀÂÂÂ_éßðúë¯S½|Ú#[<·^gî«?Ä7VîZúnžº1¤¾Öcp,&h,àU”9[!•vJК0=ÑàlÕpEçñ³cT‡‡‰/7˜>ïÐõÓ†C›4÷¸1M³Gâw)Z†Zîžn„=®V^†êdqÛªàÕ¼ÎîÝ—Øùâò³gÿÊgtww—ÝÝÝ›gìv•õ¶è¿¬Ž?N»Ýægögé÷û|ô£套^âãÿ8?÷s?ÇÏÿüÏS«ÕF|ä#¹ù}ar÷Ýwÿžs|ìæÞw0yü‡Ò—84ÜdúËlš÷r§ŸÒn„D6BÂ6u­Ðªx„ó{äsÖk ìé!*£Ej›s¤gûš£vF¨o +™pÜ÷9œ*u³ÇT¯’zû¸š¡©6\ ºÑeÆÑKxá!ÂJ‡Šñ ¯EèuÀÌW/ÁyÐ΀“2ÏqDº@ÁŠiH>„| n m–¥Ì‚íPÏ ¤£Å\Œ H†ºÒ%®Dœ’{¾)[`6˜ÃG5B\1uÔµ˜Ú»NØpÊu…k ëÀ¸-øK Ë +ÀŠÂ\ŠšmÐMmÐ]BPS¡…Oûœ§Šî)²çÐ}…¸ ¦®ŠsÆžaà`àAV)c ]è°&Æ1ÁêC'S”଱<@L$ܳqˆf¥XO´äŸs +7 fq‰>tÐùÕ\¶áª¥¬GùnÇæ¤¥F¦Ø¢!êUÁU™:¾ƒžUÆesÀú9– FGDL±2ëžcƒN 2±€AGj”Ä”ébü³!RPBfŠ‹J™À˜Ù26u99³fº|œ: 5d^©ÌSSt “&DXg‰ÖrßêˆÕzŠ^žP5‰’*Uß·ÆŽwšèð:G] uzŸï»ú>†/ú|ùÙ>çµ¹¶p‚…ŸâÔBî¹k™¢Õ!^å¥/¼ owÁõ¶è·¢^ýuÌÙŒÎÖ.ÉS]N<\ç”Y$ô-â™R›J@Å€Ö±©ãRŸö¾GåjlÇɔЛzS¬7ÆÙ}œ·z»8»Nè.cÌE‚L,D©pߢaßZ °/ç ½5¢ÅÑ]k„‰' »BßBì…4mcÛ -rxoèˆÞ8ç òJz£&°VQ–3a1WZ6Cl5ûHÑGó™æX†¨€—ÍSJy™fà&g8—Rö‡¥†L°ˆ¤bÙsŽ-7 áŠ6`QfÀ¬kÀBþª7€uM<íR%§ƒOe¥‘:ì¾Cw²ãЮAòõjˆ«“ºˆA½BéÁ†Š ÁJŒÑCª’á«à9[Rcƒ¦‹K"05…`DÍ0$³u—Ù€05y%·|ÀWÏÍñÈpªØ‚™»¡Cµý¼*¨…) U“cœCã?‹Hdžqݶ+$\¥U‰üÝ÷XßËémËVeñÉãÄÁóüã{·h}å,˃×ù¯ÓeÖÖ¯ò‰vƒí^¥ýä.Wý «'¸Ó®Ð~®qœÿë6@¿µwô £ì ö0óE( °ÞMÇI¬ð 2õñ³æ(ÃÄcühŒ6÷(²-\¾E‘íàâ.Œ{¥ÎŒ;Æ+z }<_T0}ƒì[î\z¹XÎÉ™\$ WW[„Ó6árF)Œ|¡c«„¦UvÐa‚øøŠŠÎVÜU:dÒ¡Ð9Š‘G>Tò1h kXË`ÕÂRæm5{ˆì¡ya¤‡c$(Ш¤QD@óMm•B3\ã4™-~ÌdhXzš±°‘[®‰Ç5c™vÀ_)Ù–R4ØDõ**7@×1ìIJG}:¢tTiŠ?pèŽÂ¶ƒÊX1S…¢NQÔ–ž]§Œ|AÅ‹À9VÆX 2ÆjézgRSÚŸŽ dUÄXrc˜ez°9h!Å‚“22µ%ÿLÉWg”Úæ Ÿ„Å+€Ô yŽªOd ƒóIiØk ˜‚¤‰dÃâzƒÄä4Í>ïXž¢/÷˜Ûmrlt”—Ç–kÁ).®v˜k“8#_ºD´âáý¤OeüCüÌÇVX}õ›ì¬uyýÿÏÅÕw²½Ñ}+ŽÔßÛº ÐoAÍ])8ê7xdÕrˆÏ“7YÙ”ÁÖ¯¬ØÊ”Ôì3®í‘wvp+›Øñ&~o®íÀÅ=¸ÔƒkÓÙŠ ëÈ 20ȶ\ hµCî9\¡"<² r•¨¶Lx¨N0ô1±÷`b„« ¦˜&D㲋žQ*¥e…9|æÈiSŒÊî9CUàPT‚ó²Uêv‚d; ;”þ¦;¨é‚7†ŠƒªÐ”kå%þ S¥(“ÿŠ—ŒgÊë”’ uôHÙÁ±‰e~ÝGW<ŠCwÔàÖR¨l¢\Bõ p#›T4f€””Ž:¢¡ƒm‡n9dÓ¡=¡‚zu¤h!½BèJOË`pAQ¬™bu€•>‘N)Eƒ¦¦籇¨A%žóÔ)=;4Á#.7š ¤$*³HWfÝ–A ¾ÆJ¹Ì’€d¸4¦uÅùBlcLð½3™`'-*é<£©0š¯ÏÍñ"¯3¿0¦17E^É8Ùÿ~ŽžëðÒ~ƒ­~Œÿd>ÅÃS¥•ßCÍorgcÊwÜÃþÞ*ñþY–^¿ÌåÓ›üé«gX[?úœ¨¿¿u ß¢ºª‡ø¼]åiqç_r]´\ÉÍ Lý€¡×¤g-çC—ÓÎSšw$Ìß“œIÑçbôLRúUL-Ä>²kŠEªA­ÂrTAW*¿B„cO¶±²NØš'<2?,Í{â  ¦†H¢:YÙAÏÌç}µTè”ôF‘…| Ä%÷¼fK€ž³1Æì ²ÈvùÑîA8E‚Ô-Z)À”¦=H7†¢2S/dy>ÂåC &(1Ñ'fË–ÝÀ£XÉáP@vÄG ZÛ=‡r ä*¢´)Ò—E™wŽÚDaGKpÞrèŽ@”R¿AžWz–®§ìy0ð(^ò0ÇÊ«=Xr| ~aщ¡…ié»ñ‰26BlÁ¤Õh<û½fèL . Éq³÷ ‰ƒ$£¤2LŽGB!®¦&â)ê*$Æ5(j'95F4¢ßeè F;nAbÙ¯)ãÇq ˜·;»1Ïk«÷ð™¯l1öŸáxí('¯\埜:ÊøC' _ŽyÇ=)Ã{-k_xõïò½-ê6@¿…uqÓq÷žãÎú_¼v„$NñÇP™6ÙMlfU®7jlÔ=2rüÖe«y :¦:‰q½a°:‡Í›02°Q̶B¿Âš_Å,U±^ÈE‰Ë6AØ%˜oâ 1±M ³L„‘:Õ LÁ›4JD{³{6äcÈÆBÃ*‡*°æÁ¢Í Ld d«g¯‹VRh¤iѺE* òÿ š€AQSrÒBÉÓ ù°Oáú8Æ(1}&t±lc‰Ûn5@pÔ‘Õº¨žΡ\F¸ÎœLYQŸ`eI•V¢Ø…M‡n°©Ð¯"R/ÓXб²Ÿ—à¼ÂÔ‚­”\¯5<íc¥G #< ±…‘E‰k¨Xœ±L Œm)4RÊëDc|&8qe o*ûç8ZZ`§@¡¨Íñ4&%§‚C’ÆuLÑ wã dó¹gðuÌR4¥^Iax™êh™ùi‡ÓÏÁ`µÍhí(Ÿs_ãøêˆ¥;¦È‹ÄÑþ.-RýÓWø³;G¼¸á±ñãÏqõþ˜å¥“œZ:N0¿F=Îó/rùʵ¿Ó³óv©ÛýVåêW¾ô,7žªrèС?wU‘ÙC hôV/É^‡ëzŒÁZ‡;–ÙŒ¦¼¬̇jS_-pF°q•PïÀê!Éc¤;@.NO ƒk~Y¨bÏ SÈ.A} 9Âë º/dB¹Ò,5¤R…À£8hU*2‡G›"¯‘…|,Tse¥"¬YeÅTM•-T¶Ù†¨‡Ö d·¶C›©hÕ@`Êì>WrØ®E²@ÉÒ8'‹{äq—BK`Ùðç{ä >¬åp¨@k»HržœsàŸC¸ÊS°&ʪ Ê|AWÑ-… ‡l8t×B•ÝsÑ ÷j <ËžUv<èûPŠ­^T`MÙ={ºG“˜@„H-2žsßÀñHŒ01ÊÐ(i³œ;ˆ¦SãrM{Ð¥—I†âÈQâB™$̼¤Kƒ«DÓ2ù$U±Å<¦ð˜x0]ñÈüXÆ,š>a#Ŧ{hwŽ#“G©Œ-JÿGîå¢ÿIî1çøGwÄP½éeáþ÷îòl£CíòcüóÑ'it7è¬ÞMoÅp )_޹̕îmîùÛQ·ú-®‹/¢ª<ýôÓ7AZgÆ ¹&èаm#Ò¹sîtyÇ+spí>¶‹ˆ3ÇO±÷äq­Ó%ìþ!G­b»>•ôN0ï&à.¬TÁ‹ÁÛC’Md}©f„Q…Ca™«`ÅÒ•&â·šøK!V)ÎL€Hª5ˆ|ÜŒQ"m•=õK€ž@ˇ5UV 4̸윙uÏÕÒtÐñѹrsEš9Ú0¸Š!5Rn6;((†JÞR²¨LÙN%IÓ]ò|G>–iÝÃ-ûÈZÍ.Ä—AÎçA.3ç8NÈQàpeÙ)Ѿ¢À¼Y [ ØÚLÿÝdê…t­²ëÁ®ƒV)‰¶5ð¼ÒÐÓ="XÉ Ôâ[XtŒ7£7”¡9HÇVÄ%ˆL€Ii“ä—0 ¿Mqä8âÆSÐÜ¡Aê”1Z(~^À¨‚Ÿ%øy…iªô!«Uȃœ9í±<Õb´š¹Á2÷Œóüg”Î<£÷<Æ'_à{¤ÀŸB<*‡cÏÔ¹¾÷]ÜõûßÇ{>sšó[9ÏbxøÕ=¾1Ÿ“M¿ÆåÛàüm«ÛýP—.]âê¿yèG}¼êTs$ì$íéùõ%^:¹Ìþ‘ç8Õþw=¿Ã?X’î×-¾:OöƒOñbýÎï\¥y©M˽My ô0©Ðò 惄V¸æ ²¿Ž\™6V£ E-ÂJA,üÚþ|„7Œ_U*ÚÒÊR¥M¡Mò‰!Ÿ€Ue%V­Ò6oðÎÈ4ÆÐ]ŽƒNkÄ‘ÇÄ·L¬a¬e,k^Ì|ðÍÌHÏS £Ä™ñ`—,Û$g—¾ {â‘ÍùèJs}ȯ!ñysTdƒ3æNî°Ç1EXuBet]a]aCa£@v=ÔUKpÎ^•¡µìyÊŽ…}q^¼XoŒÕ.{DŒ(ƒÃ,25èÐBÏÀd%f<¦F ýR#RN°2)MFgÓÆ JA®Ê4€Ñ4”‚˜>CÄa¥€©÷ó*Ù¾G¿¥Ä+ R¯ÊyrGuÀêbŒÄûH·Å}Ã*öZœý蔑»“ç[—¿™³pýQVxŸËÌ÷xôÈÞñô[§ÞÅo.µi´þOîŸþ;Ã#ì_ù묣ܮ¿nÝèï:½w†Oo†§_©ðpv'—Ž×Øzå]tŽžfñôQ.låëïð/?CíÓ¯qroÌ3{ï¤} ¾tC8wß½¼”^¥Õû.®Û£l›΄,š;}ÃÝA“wDV*‹Ôƒ d| ³1¢ÚôY=Q„{’ã5jx [zBã!BTÐâ„ZA¤E‘äS¡ˆa.€ySàI·f³ ­)´ ,0ïp‚I-gàyì‹¥«–>††I)HÀi™¨EP]„ UÒ±2Ý›O7ȲMö±ô¼€|!€%‹è:fzäs²Ï!“p‡NsŽaµ*ûR+²¡è¦Cvt€­!yµu²ïÁ®U¶-ôj Ø*xAz³{öØež † ¦¤7úö-LÚ7„£ ÆÕò÷qˆÆÆ:.;è¢a&eËì4é#öa4— N…˜˜}†Ä¶ ²¥µ«ö7©d´Êè’28^!çØ!'Ø¥³”4ôõ/Ó|ÿàÌnÀýë1¯>ñ_ýÔ6×ÇÿˆZí žö<~å ?}Ê0ùàù‘GyêÓ{Ô/Úl#_zù->5ÿë6@‡ÔæR—½ }²ß{–ýÞÂ~¤Æ•O-qö™¯ðƒ§_ {õŸñ…“ ~|áGƒ) FÎOð~Íð^»‚ÙßàÓaFð¾½#ެêðEXÊ` »™°i¨.pgµA'œC¦×Ý ¶ÏJ¢±Äx‡iú339[…„ö&ÅÒÀÒ ˜Zòi ¤K,Y%>*»¨ì"íÚº¼#môü‚=“³­9;jÙÅÒUÃ>Âa‚P¨–]”¦E-”N ZÇ”¢«Œw6‰“kt ˆÜj1[0y ß^eÙ9î9ŽûÂ1ŽzpÔ:泜ÊÀÀ–ÀæŒ{Þ,„ìù •}mµ5¦6`ß*»öšÙÖ` ¬7ÂÓ=¬îP“!–ÐY´?k¹³Ò ÉËÄ8Fû3€6%án1.“À3Š#‡Ñ4CµÜ<ÔÀM ΄˜&}¦~N3,  ½6ô8siÄt¤ì®Â´³HRõxM»<´0Å[È èáÆ1üEžt1ùµ³ Žlr¾ó…ò9j§,ÁâC´ÛOs·&LoåO¢­Óüö…ã/]¢»±þV™·EÝèï ZØ^æ5ßR9×çØ¿»_eî? χ<Ñ=Á'¿¶ÍÖ¨Çâ%ÊÎbî¾@ãáŒ,˜°sõN}aêñŸyö®3¤k#­Ç0î.òé à Ëú¶àM…ÂÖ8Uè„U$YÇÛOhÕ²j@_„S—2µ0ˆø%@¬b€PxyD A^Æ$.ͤ[ºàµs´í# tƒ¨`×äliΦzlbÙÂcK—!#*LHÉÉQÍ‘"ÅæS¢4f.WVñ^ù©yŽÔúicöÕ1êäÅ>Ó|‡A²Á¦[GZW8;Žm¦Ö6 5¨‡ùå€QàfÉ#.ç0z³ •ØCŒŠWfV‰ÇÈ(}£ì¡W”9‰¶ž?Âê64Ù'$¡‚G ‹Y´gJzc\+7ýŒâ˜ŠaŒbÊeHq1Cb†7;h—Ó†=ÄðŠë °¿¥äÇ-…ïá1a›}¦^AP) ¡ý&Õd‘‡G÷q!¶~¯Çdn…ÝŽáÚùÿÙe–Æ6~¯%x­ w…G¹óXªq\Lù·wø•?ä·‡?Å\û(›ÿáE>ä·âH¼më6@Vw{ŸÏý¿Ì?ø÷>}„ÓÉ.OÝõ˜{É2|èóì}è}Ø«re-£&ïçøïÞÅ©ŽÛçÈF-‚?Mñ 9rWDvÌ0]LØ–}s´’Q2‚ú*I/¤û„~‹P/M©†Œà<ðÁ þl@>Ln±™P±ÐôžŒQ¢u‡´´íèYedžl¢ ¨Í@¹‚‘ žV°D*X­`r™‚Œÿ?öÎêÖ˘ziÔ „«î8§êŽœ¾BT”|Džúf¥£„|ÞZêÛG(So‰ËмõõçˆB3rèjId)EDhU •ÕëÝi …å`A}7 (ùËí¿ Ðer¸ùÂXÖ!·AÍ/aû!ü*¤ÇÞZ/n¡(3ÏM5‚z¼JeU´i®æyƒß)óµ›ç˜=·ÂÐÃ1ÔôuŒÊ³Xë$éîAÛÿ.ßÖÌh‹Idzì»v ÿ{~3]÷ü Í¿·‰‡š>É'Þø«ôzGÉÌͪÅk’†@ÿ’²°°À]w=À•O~‘sõ§ù³ò~œÖ/ð{OÎ0tƒ½»Qû|Ö~ï|Þ;kZŸÁVc–‹ˆçbÊ Ük WYÈ56«,¼I.V!£ÍD–Õ—·)¹&†ESeÌ@áK‰ÿ|¶ž¨›a( ¡a`£¹)!b*tYQ@„DMܰ"£̪€9Ã!ÀDBW¡úLÄ›Ç<óÍln3±/YIçL’sÊÌž¯Aÿ³ø3GP{ª=èj;ˆ~„Š#+}QáLK¢ƒ6©N‚S¡êd1u lâ6š]¹˜Bâ-™ÔMœ:…& „Wßgk`á(/§}ëÔlEZ,¨€&>&bù—C…ÐË:zN å2«™å¯t€\RÈ%œˆy‹» w ’®I«oÑ8˜A–’=L~m™#Í&KÝ †v·ã,6áˆÕ´`¨ytoÍ_@´ZY(‚¬€Ôóƒ ©(êÓÙ*Š2*¨E|lÜçä¤K"dL Ëb,ЄK:ZNG¥õúì9#ê{³• ¸HA5¥Èç@•A©‚jdQˆÛê ä5”?ƒå-Ñ^k¡µ r8 {Ð#hHGQª Pèyt«@‘èýñ-#ªFþËò–Öý¿ì('N_G³ñ&ŽWðƒ¡M\9ÓÏÆ 9Âg­æ‚œÍ}ïXOówSþò'9ÜýFœZî”}^Ë4ú—œBØäö‡!wÍå¼~î2¶t¥0t‰g÷²99ËèŽóÄÅ%f½,3zÿ^ GNǨ|ˆãnè¤N_’(W‘39 U#ÔaPúTÌ šÔ \ …‰D¢+UïÛÕ >·¬»°)Ò¯/}Xz€0TH§j@È*…'¢HìúŒÙsÐó eAK+´E…¶Tÿ’K -Öãõ4DsɃ^”„\¸¯“T­I )f(ÉCû²+zÔGÓ~ÐÄ'âØå!f³ÄSb]Ì ©ydF¤_Bˆ*à×S±ë© (¨,‹ø,àª8’Š€@))ÀàÍ Š#(c˜°±HJÓhÅÄÎé0¯£5ÈhPСV*”1m9Ü5·PïÆPžZ[,á“E* U•õMB5¨Ç®L!ÜQ’Õ&ÖךØ[*1ñXÕ^ÅïÒÇä÷ B£VÙ@F|ìõ.¼9àž¾€¡Â›I~ó¶?«xç–gH^° * ˆÔ6ÍÍôúa´fT^wÀæØÓ·óƒKî§Rmˆó©¢!Я …âÛ&æa K¢ Ôu¯ u Ʊy|í»øçÄm|xàn”w7G¢›luV4éôÚ+¬«ŒfR‡‘/¡K… pM„Fàkh$º()(„( Rê&Ʀ’ew;K£ª) (*„$Дƒ^5Ðó g@[Rè‹ mAa¤!š§ HäU=¥(ðk |Ð¥$a¥Ç ‰IH¸¸ŒSâ0FrkÐ#Û)±е28Q¼bœÃÏ…‰z!b"ÄÑ‚E 1 FÇB:’¥z®Ÿ¨‚ ‚*¾_IÝV@§æc.訣¾ñù„^T ‚“9Hoû>ú…c¼ó–³#{ׇ`|ð1ŒËO VµQ5RøF'ÞEUµ0W²ðk-šCÈs±jš¥Œ!5”Y·ðA‰úD!—sL4¤/ÑHéÖ½›MIUh©ltWÇ[ž1ëi…•V˜EES¡îsªÕTœ& C‚-atl¡ðY¤ÌqÊACEœU’™v…c€.«øm&¢§u8~Ò!Ø´‹­¬Çuom)Üú›)* «` ” P^ ¿RÃõêq5%¨*¡BXH×'𔋈ì1 s˜v'Ï€'XკñQ'Äd€š÷ëëÏ ^©Þ&â/€;KsÐBB¹˜i—ÒŒsEˆd@K7|ž‡7!Ðæ$4„ë£j“ø~@U-`¨£lQÝç ¾ñäÊJ¼½µ<©Qoµ,wuHxBâ+ ŽVe…Y8žB×ê˵º ´ J–Q²B *(ªËýf°ü壄’5”VFYt1‡©&PbiÎa¤jxí‚ UN@T‚&ËøZb!Ä| 1i1yÀ`&0XÐ$zB΀ŒxÞY.€¤ŽHxõîK¡‚z–¢»X¡:5Li1MA•Ђõ„*‚’ÙÄÍaVGŠœîKÞ„¤6 Ú‚@.)ôl€ÌS_ö³ø˜Ë3r—²*3¨úYí9t¸ˆ:‘Cwçè±|:„$¿ Ô~`L 2Ã`Ö‰Z»BëкŠŽÇá±…=.Aç0s—Ž¡ÇNcdTãð>É»ôU\Õþv’s{è÷‰;6ëŽã½¹‡š½<¹ólJÛþˆÍþÏ^ù.Ömz#ûŽëp#Ÿ?uÅÝà'hô+”/}ù×øóý¿NåSŸçúïâžìÝ(³“ UÂí÷¡FcÔf®£´þW(:1ì’N2§1L×ÅŠËCIRõ3b9j‹à –§ºÔûl5ð‘(RiPSÈØ t©²†’”VDÉ"ˆÈBý»(‚(Õ;?Dpëmh* >]_öZU¤(¡‹4õ$n« ·HTRÄ!ƒ¸ZWÏ!ô¬ #NÚ,,yÖ!§CBDA8ÀrkJHGµm@³BFh å*üœ¢6P:1Oî䓸Ùq%VURI¦WͲ1£°¡:¥a-*¼¼À/ÕmB•K=ÝÕw ÈâSÅjj–²G¨•l ú9˜Írxÿ"0E¯P;ÅÝÆL K¦@hõäs'ÞçbŸá“?C°?*¹kf€“ÃçrÁT×õ>ÊÁÔWxlõh—¾…¸G÷vÒ;½–í%ÅV¿À\[„pÄç‘ð›yýg»øÔC_E»VqÏ7ßÅû+9ýc qþ%¤!Я`þæï¿Àë6ükWurí!ªco§úW·òO£0pK”'voaïÙUÎ~c‘Mý´1 ÂÔ½6”õ(qñBhí üØLµü˜Ôù•H_ ê9²Háƒtë³e­„°* —À.£¢¨¡”‡br9ÈäP‹yùú1QC!PJÔ×§U€.BÑUaæÑ¢*"ê‡$#Т¥å©ê4±„Ñ·c@ ¯”¦êÙŠe ’ÂÌå@› =z@vÈeƒ§ V†Ê"”¹Ãy÷<&”IÒ<6ɪ‘mÖ 2«ã–l|Â(a¢„@‰`ùÂS®§”[U0*(‘ÆwÇpKû©ø{PÞ Îu×rø±i„6Š3£³´» [ÛFXö!4Y@X#:HeÐ7ûLm¬ñH)Δº†¸w«Š£¬>0Æö- ¼yÝGÔ×™±÷Ñ|á•”J—’™ßD\$Úac‡ú9÷d ç#ßâþëW¸ÿSÿ‡=íÈ÷ rË߬yé ¶ÁÏMC _á<8õyt|ˆj6¾]æèm—3ñ…3øTâótð}œyqœ³­‹Øän§ID³Ú2Š’úóËÀÿ1Ëÿ¨.傺® €ôPº‹2<”íÕoø!D]̧P5…ª¨bùÒÌû¨5]„ÉL•¡æ²¼C¦Þ)"ÊÓE·¨W¬H%h±†F’B,b´úè=½¼¼ &À“Ôùõ­„z€ê¶+\ÔJß§(4 W\Fò‚)¡˜«²)IÁTÈÙ#¨©!ŒÇÊ¥~ ZM2…/# u„ð¢ˆFÉ"hóàäͲE!®GUUKÓäg&X:¶“uó½T÷úŒL_NYÛNZ¬ @¦ˆ1¡çNÎI Q8nx,ÅNÇ>q}sÝl0$=‹X÷;ôd5Î £wÇÑòäZŽà¯ÞˆrÛˆ;´ÑÁòÙKøóëo&|K‚ûmçø¿yñ ³Á‹BC _ñ(öÞÊØÄüÎ4Ÿ•|`ýÇ9òm|æ. ü!*É~ô׉Z׎֮aDÂô .¶?¢¾æQ×k>JWøH<$®Ò¨¡QQ’ªÒ¨(ªÒð4o)0̰O¨Å'Üãbf=Ĭ‡˜ôPÍ.*æ¡Æ«0]ƒ%<µ|SD Á•ˆr=ˆ5éëô˜+1¨ˆ2it#ƒÑBïÒPõ‹ƒ’‰D)Qè&»î?:PÃ])™N(*ŸC†Ç!× fu“’# |7‚V.£É£,¶ÄXÌoe¶ÒÏú !Zˆ !*è, Ëq¤>Z ÂUèè«\Œ•>´ *1Áð’`פÅî•ùgb¬p%ß}½‹Ö¼A_Öâ,?Âe¡[cl'%¯_c®Y²W)ö xNjŒZ+•žÂ¨…QQÔJõìS%\Ç¢Ö”¤j¥l´‘ Nªç8¢–S%JN‰um.fRè ]‰ô¢´"E¸¾^‘- ¦\DTC$,-¶EF·©ˆ5òV ­ÅAk­¯< äòÎs½å—¡s xô6âW×L4£væ°˜eÝ8\(Ë´‹žá!š4æÛ&ŠîG­@ôô1þƒ0»N4KA»ÝN›Õ‹ÔClÚ*¸Gu›*‘KÑóo%Ø©³f2Êš†¥Rè's\·ÍåáØn†Š„Öåˆõ\LiO+'ÇôXãÒ%ãhbe¬FËY‹ŒnˆpWb÷ì뤿w†ºî±XsËJîy×[…±Â­4½>Ê¢Wæ«_»ƒb±øâ[ƒ—œ†@¿ )†4v]ÞÄ5žCÞ·9rñ¥´žó„v¾±ííT7XèÆÏxsð§ñ#…®÷.ãƒî¢.šæc)ˆú:±ª$šÕ‘YI¾¢Pޤ’HPîŠPji&g7‘E1î-P­ÖÐQôY Uh•fÐ+ÐH"¥†ÐKˆòb*ˆ+D³M{ÌaU“ENÚÌQDŠF¢Ù"±+`¢*ª+Šßí’‹UÇ`VIP½„½¹•x‡â¨‡ôÇ"¬žT\$ƒÊG#K }¢LªJ&|„ùh/Zg¡x3™%C“‚Õº iµãˆø´”™×}Æe©VÒì]EîÙÌÝ5.Õ,V¨yü Šq\ÒwL²2©sÐÈ1¦ÿjSèyR]Áôb++£§ÑÔðÂaÚ{‹;Ž„.g{9ç–"«Ÿý$nIR>ÑÇÑÒV•þšò®ñÃý³¬L•xøÈ0ù|íÅ(±/ ~•’3ò|øg¢™ÔZyÄQø«å£Kí¸™k õ3÷oü›Ô—8êß}¡4E  „í¡ŒED¥LHitUCÄ*MDÒ6ÚIAÆS¸ I©¿•âê3)$ –T•§s;é,WzFÇ*µ¨ èb#­i ô"˜ o13ö°šmúB6ÇÁ.(¢'@kØy¥ÔòFÝqüÖS²Êœ Pt 6 2+ö…+ÏBß‚Åv°,a•¡&J(­šÄÂ||=¡§ ôbgʼnÊvòkŒgÍÂF'"Ö ‰29Ý'/Iu!æÌBOÁÏäbÛ"Q›ÇW F%æÃ±y‡î5å^©Ä™¦ýèk,¼¥^j~'¯@wÔ"<(X´×Ñ}DgãØ,MßÁwk„¯ô¦¶²á×é껃¶¤Ë5‡9øtùÅ*­/# ~•S^\¤pïI®îéfʀǽ]œ¥¿¦¤Ú/~ƒH<ßí+d á)²’”5ߪ¡7»8V[Ë@¶B¸cU±‹H1ExÉ!8¦H?§¨ô9Ô6¯ÅïÌ1í-²·ð ©i—¦Å8awE¹´Z‹F [„*+KÈéGŠÄü$bÄ%ÑjÓoÛä5ƒe´p€–4¥ÁD Í èˆQˆÖXP.®Šõ6 2}¨ƒ6Ú®€öÐ[ltk”G¬¶@i\½ DOÃ:WRst¤1Ϩx«¥•èa?ÁÒÁR`“0Û0â­+QÑ}Â"Eªz:γƒsŠ7·ø èÃ…C¨Ê*+{"0҉ܳ‚Ø`/ɨõ 9j©,ž›$¬X†¶ESÍ!Ò¼ÀôYcéÌ ÝÀ\KóŸndå%:÷ÿð ž=ò=Tµ!ίTý`©ãà³—ÐyÔdwa˜ÜÕYlRNŒ_xý¼BK¿nOZQxe²ˆ’5uòN -”¦¹¯HR¤1JÃÈ™ã´WÉĈ¤%ôÛç’^Ÿ¢Ð¿‘au’¡Ót,t¡‚Ì‹6æ…A€"©Aî°Ê ³Âi!jÃÒN"Òˆ Ÿ¶„EÔfT¸H*hM6N\`*U÷‰DQ)—%áRF'ªùˆ! ó "2#!Ÿo‰°?BBó§0EªmF›483áJÄxFK3#žÅjk%zÆéøµ‹K‚~½ j…p _óia=Î\жIÁE->§iÃøò{ˆæýPYÀ_¨L¸W3/7R ·bÇmŽ  A¼ÇD„š´Ñe}Caæµ$Çç¶0ýË=@“y‚Å}PE£2ñ8ªºø¢ÕQƒ—Ÿ†@¿FX /²¸ óÝŒ†ÉTIx =ú‹ t}·ŸÀUt¡ +Z4É×,òñN2I—ú,=Vyiœìjb˜pa’ÓJëIVZ(JžK—8p¼ÌX_„Ù¶Ϝ̓¬u2×f0—¬R ù¤,AŸ-˜Ô3ŽÃ¦P=‘!­ ¹4½Ýa‹’.qE-&±c`*QïßNÅp£.yác­DËýhcᓊD!`…íÓîäˆW§µcîÒFW“hT  ‘#Ò±I©g¬ ÓÚe¿•eNÀìn%ºµŸâa?hFí»€¦¤$<¡³6¤Ø’Çoz=‚ê-âU…‡¡ðHœ±ÚvJõâŸн"ÃÆɺD‚NÆ–R—ˆeÓ*”mxd6î¡úº=4/ 2=±Àð®CÌ¿¨åÓàÑè×ÉÔ"©Ì>A[œÁ­}HFüXËRêßù €ZÞQ¨±3O=ŽúÞ Z4ÉB§÷âJƒSNC _ÃLN,òð¡Æ»'YÓ××÷ïÿUg×WèªJµh •hò 8£ÝëM2‘x– ú¦ˆ?>ͦô•ì™07Ö0¼º›Nö°²ÙCX2È!ŒŒöá­5¼3†ŒævžÍö#).zspˆ¥5yÆÌãdäCØÖŽÓ‡Ýº†PgªbiÑ"\ cÙ=Xîa7 f뺂ˆ¨÷ik¾i ЉÔ„3’&á‹,¢‹‰„=K-R5®h¥9æS{*ÀËXÈB7–!¾¿OEÑ+‚Ð\ íX‰¸t a±ØáQLÑ<YM 5E\ZDÐiN.QJH&›V1n4@„BÚ8ÂÄt5+ŠS¶è/eˆtN3}é.*«Ÿ ñØAÜ œ6Ýʮ̮žIzÝëéþ~mÅ“D«)šö=Ácí—áæwQ‹1“;•åÒàe¢!Ð þc£cŒŽ›Ãj™§ëôãìÙÓÉÌÚ<‘Î39ïž‘ïòƒÃ×Йøò¾Õ|sÛ4—û»Y³ÿ,Žýõ Æÿd˜ÂXÙ9BržsššÙwhŠÝG¢Ü6ùzÖWpY8Φðsý{øv i®¢³p:m™&N‹eHV²…<¬#gMhJ ’½èm=ØíÈîZW˜ ÍÀmqñÂEü˜_ !´ Š© ”!J  ÝËvQáCgQkfÞka©Ù,ò…R·È”šâhu/' pšŸ'ÝVfÏ%G©^ìkº©.½›¹ÖQ름6u+ïÜϸ>ÍHm $Nu•4x¹htƒ“üT+ù)ÒÒóÓó¬jÛD,qßNÐ÷I*Go&ß¶›Žƒs”Ä|ÿAÝ!2ßÌï=J× ­mM$Ó’°: Ñr:å®.Üî(¦æ`†5„&_h]|þO!@ dz(ÎGÙ£'9gõgØö­Ó˜9s=·=ùZ¯]à·èüpïœIFNÀè);ÿ N- nð315; ³ú–Æy&is±y>í¾Š‡69ò@˜¾ÿµ™Þ>>ø¥Y7ã ôaž ½‹Áu—³æÁ˸"7ÂÚò,î†3ÄIæÏÛK®¥…ÅÉbV•5^­2Cï9GXìžå÷Pz· oIDAT@\‘- š—`Áá¾°Ésï h9g‚ÁÖ9ô¨"fÇ)ëÍØ² [‹¢ # ^Õ²î5RŸ½Ö7ª¡„@NàƒV†d7²€ß6êœ ™¢93wÜ£†O¶ã{.?NmÝeøwÿ ©§Ÿ¢ô^œhœÇ3m—3wÕÉî «R9¢–@áŸj/dݿ乒CŸ{;uöÅ|îø¯ýAÖ?c2±ë~îõ“KãÐùrÝ¿¬4ºÁÏ…™žb" ßß%tì~š=8óñ8û†Kp³ë¹eîøÞ=¹®wiXM—ó¾Ô8µOÜKðX™ÚݿѴsÃ&éõUôævbÚjÖ‰0‘õ³Œ%L³Îçéà2NÌÏâu} o`ŒùÕ_¦éâ kûl.ÓSô绉gW² ̨±ºD ýùˆÅŸDÔ×£5à›Šª¡S"Â’-˜ Õ˜‰ŽAr„µm'hÓæÑ®ÑÔê’Øh;£chú<¶÷8ÕÙ,»*½Ü{u+Ésäí~™æÉ ¨õؘ–ª_þ­!Sö—*ÓöÕ·ð¾KÖòÍ–G{÷cÖª$ç'h,d4xž†@7ø…˜i­Áä(B‡ñ‹ãÌßù/ ô¿õŸŸC¹wоîÖµÆÀ Q ‡xè[oå†Ã™÷?ÄéÔ¸ªår.bqYK¡ Ÿ’ÕLiòZž 8}Ÿ¤ïè<¹ÙGšŸãìêa.|ô+÷·Ò6»•HøòÝYꉱl"¾¥I„&þ]{±6 } «&‰;¯srÚä@ÐĉUÍ<±ú˼y`ˆžït^êbÍRŽ‹š’Wj´]£¸ÝcÔÊðõžÆjŒË÷Nàý »ßPaÃâ ¦ÙŒ´õK1ù1”‡úµÏ±þ7‹’3ÁȽSLhÐØšÝàß !Ð þÓ̶µÁÄóK_È/`æWòø‰ÿιzˆ@÷X\µ“éónç[Ŀԋ=»ã­]Ä›£º)Д†‰ËÚÔ}={(íÜOùÀ'.;Âhò*úàŒ/}Ër˜_ͳoƹ»ghrâ˜ZRZ?[HŒ(MQ3]*Ñ%¢Õ)6ï]$¾«‹;æ6ñíÄLû>§—ßJDnà “ÇØ:ê ”ÑÚ›øæÀÙ÷“}ö¼çX5ìòÙ \.;üMž8ûrÚO¶²v…¢)Ú O)”Ï¿øTS>á'ïÆrf˜˜x OLƒW< nð¢Q*MC  JÞdÇŽ„L‹ó·måáíinʾ‘·ì¼ãìó[—o¤iõ@XÃ5Yîà¬'vå£\6=Ái«;غe=]s-Øe‡…cð÷}“—ÞÎïÇV;/ÙI¹ÇÂÑÅÏTÐ*À()r™$OEÊÛä¼Ì]\w¤R£ºô(Ÿ˜enó•´xog³¢½Ãg~n<6Ê%OßAúMû°Ëä¶k6òùC.=±›Ž»¿ÍÒ{m ;®â¯/yï»ýžÃøCï&zþ,a¿M˜ˆŸv‡n¥À÷kd«³L=còÃÁ›ùo²Ä—ÏIñ×ÿãÏxO±ÿÌ}ìM·`L™\±qa®C74"z•ù½’ÄÚ7qÎÿÄjÿt¾zd3É¥øabUhëj”ͦW¥±^ž7ºÁ«’×tæúG>òÖ¬YÃìììO»ñÆùÀ>ÀÛßþvæææþÕ±………—kˆ/+/õëò}Ÿl>KÑ­RuMBÕãX÷ñé¿ù4ÿô™»POïáÓ.¿Ñÿ_¸ïÆsøJw1å’ˆÇÉ8<»†{´Ï²áCï`_ççØwi•/=Α–÷ñŃ9†*ÕúÎî!8zäÈþª@•Jû]’ßÜM‹ý[„?ggÇC×ó‡ßßÇæK\°¦î÷E9Ñ·Èg>õÁâ½üË^Ÿƒæ“æöñ°³’Ûv?M"ûEºå0å\žJ%GÑ®ÈÿÀ²õEàÕZ‡ÕjõTá—†×ô ú¦›nâ}ï{ßO<^©Tعs'wß}7O<ñ;vìàãÿø Çhiiy9‡ú²ðr¿.M”y>dZ#-pëÄS¸w‚•òùǹo!þê^ÿúK¹üÓÛùúŸ>‡f—y›÷ç\4xù«ÎäÌïtàÞÆlyßúü_ruÏ Â2Ìó›CŽ=ÊšµkQ(Ê•%&¼‡7„}úþ2Ç?œnòö›ñ ?àôÊ¥TN̾}û~ô$Jñ«(Ä{á‹â|xäû¨ŠøgP!ØéŸª(Ps žˆÝXMnðrñšèþþ~î¿ÿþŸzüÿOI¥RÌÌÔﲎŽÒÓÓóÂ1]×annŽxñ n¿ývÎ9ç~÷w¥wÞy'ñÁ 7ÜÀÑ£GI§Ó|îsŸ£­­aˆÞ Aƒ——×´@ÿ<|ä#á`çÎ?!Ö7Þx#$›Íòw÷w´¶¶ž¢Qþü\ýõd2òù<·Þz+Žã¼plË–-œ}öÙhšÆM7Ýt Gù³Q*•øÀ>@,#‘HðÉO~€ øÐ‡>„®ëø¾ÏÍ7ß|ŠGúóñÓ^×ÈÈW]u^x!ëÖ­ã£ýè)éÏÇÄÄÿøÇ9pàO?ýô ¿ÒÏ׋Ékº‹ãçᦛnâÜsÏý‰ÇŸ¿¡xë­·ò±}Œ;vœ‚ÑýbŒŒŒÍfÙ±cW_}5wÞyç¿:‹Åð<ï…õø_vî¸ãÞò–·°cÇÒé4ccuSû;w288Èç?ÿyúûûÙ¹sç)éÏÇO{]Bâñ8…BÎÎWž³R÷ÿkçþAR_ã8Ž¿mC!Á† ÿ  ‡ÖlêeHScƒ µ„DF •97ÙÑЭ µØÔÐRC - ‘W1ÉÎp8Ó¹yÏé\ïñ§÷óšÄáûåá÷áñy~ÛÛÛØíö7ß×û|UÓÿbú#õ@ñ½¾¼^ïëþzgg'ÇÇÇoÆOOOX^^æèèˆÁÁÁ?SìoÊf³ ßæÂår‘Ífq8À—>:G•TêËív“J¥(—ËŒŒŒàóùbÿ¶Þ竚Ð?¨æ¢‘¼×W:~ów¹Ríííí<>>þç5þ[N§“L&C__™Læõ!w:¤R)àKŸ^¯·–e~X¥¾¾jjj¢µµ•R©T£ ««Þ竚´ý‹õ@1‰Ëåxxx ‘HpssÃþþ>³³³ÌÏÏc±XÈår$ š››k]î?ÊçóLMMa³Ù°Z­twwãt:ezz³ÙL±X¬»=ÍJ}Y,vwwy~~¦««‹•••Z—ú!ù|žp8Ìáá!>ŸÞÞÞ†˜¯jR@‹ˆ” ED J-"bP h©['''x½^B¡üõõ¥ßÉf³¬¯¯¿ûû™™½˜G M-uËd21>>N<Çãñp~~N(baaµµ5âñ8@€ûû{¢Ñ(KKKtttP(coo¯Æ]ˆT¦€–ºõòòÂÁÁ@€³³3677ikkÃjµr}}M©Tâòò—Ë…Ýn'‹ñôôÄÎÎ---ô÷÷“L&k݆HEº-uËd2á÷û‰D"ƒAÒé4Á`ðÍ=ár¹üúyccƒžž†‡‡0›Íär¹?^·È¯Ò ZB,Ãb±077Çââ"áp›ÍF¡Pàââ‚­­-noo‰F£‹E®®®øôI7LŸtZZ2™äîîŽÉÉÉ¿­®® q»Ý5¨Läç´‚–†644„ÇãywÌï÷+œÅд‚1(­ ED J-"bP hƒR@‹ˆ”ZDÄ Ð""¥€1(´ˆˆA) ED ê3Œ‚,Æà©ŒIEND®B`‚mpmath-1.0.0/doc/source/plots/kleinj.py000066400000000000000000000002001316273626600200360ustar00rootroot00000000000000# Klein J-function as function of the number-theoretic nome fp.cplot(lambda q: fp.kleinj(qbar=q), [-1,1], [-1,1], points=50000) mpmath-1.0.0/doc/source/plots/kleinj2.png000066400000000000000000001704331316273626600202740ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½M¬,[v×ù[;"?Ϲ÷½g ºK¶ÛHÔê‰Ý–'‹¡©öÀbŽ„„%ä j€Ä„“‚!r [¶Êžx`Oé`aõÀ -d©„Ìš*ü®z÷žsò#>öb°¿ÖŽˆ<ïaªõòªc]…22óÜÌÈüã¿þkí¢ªÿø_Xc5ÖX㮢%ˆóÙ²Æk¬±FîËÞ€5ÖXc5–cè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4V^c5Ö¸ÓXz5ÖXãNcè5ÖXc;U ×Xc5î4Ú/{þ4ñ¿ýàò¿~üƒ@—vòhÖuùoF„Á<ŸóÚxâÇÄE›ú9Óçæµþù36o Ÿ:̾M&Ï›ÉGÞºý{§ ?l”úµWÖß_:ÞnŸƒyc™ÿ¿h¶7Ш6A&_ñÖ“×ÿô˜4èì—ÜÂ|úw˘Çcq^üxîy»Ý/|úk\¿ùçñzº>RÜŸó%¼ë×dòܽ‚ñç½ö*æ·øm^ûÖŸ|Æÿó'½Ä)ÐoÚ–ÿã'ÿ2pXXö7^‹Pô´œ€s\NÀIÍ:õúIá%¾vi@ÀxzŒÏÍk³çÊwþåÿÉ}í/›O~±ß’ŸËä5áÌOùZá•ýªC|=½—Þß éÇJý£Ï“å²üÚ?ûýïðµúôóñ½9èhg_{Ò¬ æiýÚ€7?vï¸ç·ÿ)?ôµŸº‰µ}Ýâî8³c4)ÕÇ×øK…÷Ø.aþE—/„¹}ýÈæ‹<ÎZ#‘Þ{1¯_\üƒ«N1_zþßù—ÿ”úßj†ïtÈäuáÌþÌÕ£Ì^Û _ó‹ùá†ó?ûýßÜS| €z‚—,ªÀç,>B?·^M‹ÿ-}SþúÔ«yƒz]Íg*¨*^§ŸnÿSYDRª÷#5ÿC즚M—êgˆ}S%ü¥íË›!óMÓû ÿ©Ú·~¼Æý²€»Î±Î‹Å\À8 æSè&x?Ç«}qïóðEŠŸa>Ý­öWÍ~›Jù!·¿6þÝdóPÐqù?ÌöÅîjQoo‚ââ™ljÚ½ŽŠç·8d?oÆó¥6FÌã:#o>Z^Á{z¤/Ÿ`¾x¨ 3èüòÇ}™ñA ôÛ¶K  stqï@ñy,í×q‰ÇÍXo—zýáÓ¯ÆCžé70#®9:$Êsù·Äb1í Iœ ‘üµ7¿åÓ770Wƒ§¯¶pºubDºÞ¸©@gdÊq<ÏÏË_i0Ÿâ½„¹¯0'ŠÅ’@×1 I˜WYÆ`^ýÐeÜ?}|Uîu3Ró|iß,c>ç)æRóûs17ž¿ÆõôÁ©áè#ϽùË9Ï5#<ß áwÉü?xÃóôã }ÛÞ—$Þ×Ö|Áx»Ù ·ÄÂî‘%Ç—µÈ›ÙnÖz5ÓËgjºèéë®"²?÷eájq.ŽÂ:‹éGÎ]´urµ›“úG™¯Ô$·\‡‡¯>>ÞÀ|I¨oˆ´.§ôµÕkñõJFmR¼% ø?|úç?s»^0'ŠEú »õ¯‰E©Z„"A‘…™å¤Xa~ãCfª¹@:Ãó×*ûç2ECmañ:ׇ¯&̧hM¹cüp÷*Å Êõïò7*%&L^Åüíf³øm_V|*ŒK,yE@fâQ2îüóëÕ$yÝÁh‰û9º>/jìÓ’@Ô"m‰;I1“M_vÎrÃMT%Þç@W6çµ¹ð£uú¶sI¨£j+¥]ž’âkB±ô¡¢×ÄÂbž¾ƒ^Š[¼ìÚnc®¯`¾ôÃÿ;y>hÊó*)¾†ùlṠθ¾L.1ê?m+Í7É=›×ªmZÀü5 ܪ8¾¤ø@šùÁ¿Ø“ž oÚ¶7»$ö@ _§õ§}âN5Ê~`EÁ×T±”õ±^ˆ[(5urR~«ÕÈWJïðšL7!ÅãW1OTY*l×cÀ>¾7IæUâVN˜ ö|gHµöC‹H #UA¦LYnmäýPå&ÓbºIщ˜¨gÞC[J|µ4 HLŠ‹"=É_–çV o¶ñ’I¹™Ë©öC†ø~j_'E‘jû,Ê5Þ7xnÛz‹‡Ù$™ÞÌd_N|©ýío›¿ÿ÷ÿ>¿÷{¿Ç¿ù7ÿföþÏýÜϱÙløÅ_üÅú õ”†ä­£téH¤ò…û¢V´½F=]¬nÙMXüðù"3–‰@‡íY ûTJikÅ׊³ýÊ4éÖ@¢_z1‰ÂBBœŠDÌÜu¾:Í!£ç8IŒ¹’™nÚMÌÃ\NŽeúWõ‘úºXÌõõsµ V ¦îÂÿ«Q(?|F´©HkÝÚXÀ¼ç¹äg¾½[kœ§w™íÀrÙ¤ˆÁ¼Æ[+ä™V- ­Žê½ô[të*Ð9~ø‡˜_ýÕ_å¯þÕ¿:{ï×~í×ø+å¯ð¯þÕ¿ZþÏ~r„ÎŽØ´›§®Î;†.÷çìóÙ!pK˜òE—–¹5‘‰ú;l/tJÑúyåâät‘œa‘äÜf1]nmoØ2UûÃí‘\ÀÈ·€ñ !{|©É¯ ³]ŸÅtû•‚÷DüñŒÔƒT_ ÜÖâV³‘ÍøÖ_/7ëå©ÊkºÔ‡^PÏiå2Óëú@1F$ξ%Ö‹|—éñ7åø4éŒè¤•·ˆñÒóHÍIOgÛ6'b~«5ygq—-Ž÷ïþßùÎwøëý¯/ ´ª†)?vÇ¿êàX¤ÑAS¦TßaÖ™ˆ…D77i©7Ánbú ú—Lþ¸ŒdOÝE³Ðƒ¶)FœÓóôÛ˜Z—ç:rQÈG˜Õº7Kíé‡&Ìö¸´]š¶uŽOÊgÕ7 ÔƒU·fsü)c‡èäêy,ôý-Æ‚äß~ÄRÿ¿à:3À³}d³RÂpI-î5 ¢ÔÛ¨–#5ÆÀÌtŽuÎ*_q‹ëõ¼‰wÍó‚{C"´)½ŽÛ<ŸñVÍk6™/Yfé—w)пõ[¿ÅüÁðþÁ?àw÷wùÝßý]þâ_ü‹ùý÷}Ï?ûƒo[>}ø³|úø欿%Òá=Ѻü›õEuy=ûrGu’NH¼(05»,•{åT'eÌý¸B}K^©¼Š¸K½8™<§&ì8qJ‹©j/©¤p+O4IŠSÌkØ4”Û󥯉sz¼-óĘJíd:·Æœê™©`’WøÝpÌcú»é{ŽÅ²a&ÄF‘f.‰Êâùl*Þœm7›É12ǻڇ·bú€éù¼ÉA×Ð~1žW˜gH æUBIB®üþwŸùý?~.hË=Å—*ЧӉ¯ýë|ë[ßâçþçù‰Ÿø ~äG~„¿ówþÿñ?þGþÑ?úG•8¼m¾ögþgòYSv®è-‡Q‰…´9äŒÓ€Bä@TKÚrìda¾ÕƒN9¬bØ?š D=@87§sQž®[7—_5®­ˆó‚Pød¶ŽnQ—~´}ÍÈ›{ѱXŽ©«KýЩ‹ž‰õ¢8C½-ÉÅYµ2æÙAGµ˜¤– âsÉ/Œ§IqŠùB9^žßH~3®ß~]´Nu_z¾,çý´µ1m/%Åôbq/?l©µ‘xîS¥¨óÖÒõÏ—¿g‚=ýÓ·G>Ýáÿüÿý#î)¾T>üÒ/ýÒÍ÷ôG”òOþÉò›qgV/³Go8:5zVnß -ÌÅ¢‰…÷›î"ªŒ2ƒàV¹þ×’`ÌÝ\úm:jdž¿z’ÊLL^‹›˜OÅÂÍÚJ3±¶¸›äèÇ"7…yI¤+¬—ÜT¨Ý¬Åñù8çõèäêb®à+ùõ[ŽzŠù’½ÅsƒbEy‚s¥¡é›´þFµ×¬H_y«R¬¢ú”êNÇXJÕâ3²õÇÙÄX¯§¶’fLÓWN0·Âlío¸³¸ËÇç†êä¤ KÖ©JNEBIîYWùÂ"m‰+à-ƒ'K¤µyÁ:‹ì –„nZö ˆ y#–Ú•8˜u—þ"@s'½ÔžŸ—æiY8*——ÚLñ5ëâœYŸŠ´J›p mŽjÀjÚZÒ)ÞÌ^(³e–«•ðM*c%ÎvýæÙÕMZES™îòW0¿E¨[¸›ÿn çi’4?0¯+0zPÃóÜêø<ž§`ivRâ¹§ºH’x”2sf))Êkøçïƒ+…ç³ct¡¢Y{Ð߇P¨O^#ð‚pǽ¦C… |K,ªixvu .ÿnµ9¦¤-? ÚöiÙg¯A&:`g’VŵÔ$M¢œ^sHMHCÚy›cÁ]T„žbm15 ùÊ~H˜/:º$ZÏS·ˆeÌ—œ´Ý„Åã¬vq÷ºZÉ"­Þü_Óû”eá(Ü#ºZ¶iiãó­§;bI+õŸ½ï˜û5Ïg×㸅óBN¨(^Í5\æyx-b¯ùZ‘æ1ŸŠ²3îYl•8J¥å}e@té â|iñ ´.;‹-“&®iA,ìÀa&¯%œýz¥´ÌWÞjsäš·³%ïˆÐã2izq¶¿˜È+’ ,è âJG ±.v‹ÊòyxÛ£wœàïãïQœÁÜiíªaÒîHbͺjq^Ä{Q¤í‹S‘°UKäËŽªÁÜ$E5ÂDBLÕ¢7p^ X:yeó%×?i»JÿgZ­L1¿Åó„½ï#Îfúç¶óò‡Mq·<¯/9ZZsž£s™$ÅÌq+¼æ¹Nja›™û‰S «Òz©¹$ʆÌJ)ÐBVŒË00'pŒ±'”|=7Ê?C(Ö¤"¬‚ÔNŠs!sÚ–I)=y ¿ÃL÷ÒPÞÉ8%ªјnkEæ´©S1йC^tpMI‘p"‡(óê%W.õî&nâXŽé"ÔI0”df‚aÕ'n[œ£kÛIvÖŒ0Pæ@qžT)ÙÅiZ'?©'Î/·Io*ÜZÁ9Ÿf—8|Ë5[þ/›‘4Gz©Rdò8ìôÍcÈ[E”§m=+xyŸ-a^¶yŠ5ô8ÒN,h/·”$'”|ð‚Žé+¤`lùœ´m‹MÝöŇ)ÐÉA/Žb×µ˜Në2óD=—K@§õÝ%±Îb!šÅBk]]¾˜Ï¢ƒ®…l.¸­ŒæÇ×¢ì($u‘Âù@¤¸Šò³%S*è¦â0Ô7Ìf—j]o07›…B ÞKX'=wsZô´¯,Ò3'·€»Új%ÍÞHn.Ìš R»¹,`ëJ0Ò«Q tIîcy>o%ÅEõ5g–îSÃ’ªÅ¦js$¾ßtл±×yR\òDÖ0W˜§mV+5î £9Ð¦Ž¹Æ:ñÝ&Ȫ×lÛ£¯hz³×ß[{Ðߟ('ªÄeÉYTnnΪÔÒ˜9g¦¢±ÐÕ YI,fåvÏ-ý¦}¹ú€êÈÜI"sG=uwµK6Ž" È’›KÂbúv¢Ó3Ö&¸.µ•«+ï»(IÔÒz-:KŽ´N]´qÒ•fåýU ÅÒ aIˆó #ó²:a>‡‰hdᵂ1ÕKÂWë¿3‹x{væk•â²)㈣)Ë„ïÅU+ÓĦJ•+žÛ¯|5!NÄ퀬MŠC˜qØdèD*Nç×3î%)Îù¸­yŸL*Åêd¢ûgøPZ•êêíSbÎDzê(¬X„žhƒÖBA)Á™EvÑ‘¸[ÁÕéüX±ä”~ezגĹ'´7Ò’Ô¦¸9Ar/×5? 4V,¬›³DµdÎF'1«¬_wpu aK ³®#Ž6¶a´à¼P±dÌÍqãû€w-úº`LDz:Å+Ì’IB‘°/˜[‘v:urB“Ö%¼Ÿ1œb»˜()¯-B;%Ñ×Åjeº< ‰×·y~«‚ «êeÐ9 f\·‰±lsÀ`ž» ×]\MÜTÊ”°_„¼ñ€W¡ô¡o9銸–°¶¾ ,¦W’úrA,¤†º:èFÃßh$¦Tb1jpð‘o ô’Hëä1þMÂ< ³Sh#5îÓ„(gû¾†ùH‰,ÓŒPäÿ<ä¤èÒ‡šÙ¶r™%ÃŒ¹àTskãf?ti–ÁÆ\ ¯¸]U+qÐ-ò¼™`l-ÏÁr]C7qÚâÌî5•V%Î2áE…yâ÷t4ói;ã‚Äm/í¤9ϵð|ÉÌ.bµ ôÿx(ÌO;¶‚<æ×Ù-P’Xx-%w³ ÒaÇY‘öw‘ «’;iÔbùW¶9O3Êe_æ6*ŽØr[ÄBÚp+QCÒ Ô¦m!‹Înº>]–¸ùL‹ù¤a¬¡µÔăkQ(òs­D…ÑGžº¹›ò:æ ÷Á<öhJŠÓ EJrln$Æ\jQ4É|ÊáY_éCÏÚ– Sq6σƒî#æu•èÔˆ³XCRø/Þ`ð|/í/)÷P·˜¤.lï(>HÖÙ™„7Dc¨™YF,-FqS¥5$n&åŸmuxÄí´ˆó­6Gå,ìöÖ#ÙY4$wZ¬ SÕ G4Q8Šk0Ù]Hè!f!!Š63á.•µŸü + ö7“#y¾œn²X¸T~gÁ¨õ´üöAGÑ^ë6GåÌfV³7JB©1ïc_´#8>; %î ç6&ÊVJõbÅ!?ëÜ 5‚]]/ ‡c¹ïoLǬ×ãxÞËâ¬:k+•}1¬c—’¡ÎvíÌùs óz¦Liéñ L[IM|Þ$AVhãz+ñxPÃi›«ÊÄv5nx>Mìw¤@ Ú:å…Æ¤uqÝШ /Âl^n}dâ†20;‹( :9ËM'ÇWí&BÉ*ÅQˆv±‹XHÝÊ(b!™¸aÛ£{N„¬ G²†¼‰ Ùí©Œä.Îö ³–õF¥b“¢É`z• —ðöS±ÐJ,È‚‘>Z ¤³ëýNNjìSï9a.6)ÊoWW/V8Ô$ÅÊES’b%Þß[n.σ63b×§8'3b¹^ªÅdDZ-b]·øæj1ÏÉ“à-öqÑ 'Ķ7zÈs:Dûˆù´}W*”T6±Zqñxm¼I€‹IÑ`=5*vM‚÷ÎâKè[wUù·ÿößòÿñ?Æ9Ç~¿ç~áʪ ÈšÃά¯¦ô$â žF]qÎѤ­¶Òh¸à{CÔê‘(†f½ºô`Äb‰Û%J“°mNÒSHÛHMØðèh b—¨…¬bźŒjò~éQ/“øF…Â+Xœ5ãÎzhi³@$ÁhµˆDåô’‹Fcúæ))&=!œi1`qÎ;%c{ÏÒ#h…y.§%ÌöÉ.Î`ß{ý}ƒ¹‹J´ ÎÖéUb}Ë=ßXO‚Ì0Á³c¤Æ:9¼FÆP>KìÓŠf¡h5U*ÐJÁ?-UÅ2Å|æ¢'˜Û’;%Iµ-‹±}^x=ãy•C[¡Ñ–V¥$ƈ¯MŒ-&9’¦èÌ—ŒHµùJÿÆ9Ï1OUãð–šæ‘ßR H®Xú)æDŽO*™„µMŽK³gî¬ ý¥ ôçÅoýÖoñþÂ_(â ` o¸:·&n_‰3îä°‰.z£µ›kÑèœÂzpÍb1'ì ZÜÜq£“ KئF”V bžk‰Ð ÝDÒnDpc"® ßÛ‹Y4 ‡¦¶Ç(ˆDœöŸ½Pv|C˜Ë™l·bÂ;4ìŽl|8è6îI”¡Áüã~Hûb.ºrÒÓ䘄p¡ZI"-÷!Šoy+Ð:-Iˆu‹°œw_Œ‹N"aÅ:U1R µÁ<_u0òû•Ó» Ï-ßSBì þ=ødžV[6ªïMåÄë&ñÝbî•~¸…õRõ2Þ4õãˆO+Œ†D|%&‰ÌópÜež#±½Á„ߑە@žWí¼)ǹ7}¾oþßø ~ï÷~o|ãÕëïÇ‘þî3 å«Ûùt·‰nmZz×å^‡–Ü8ÖM(mu õÛBZ`CbKÞÖ,*2€&±è‰—g´¤¥:·8æ„•ÉóJœÅ ‡”çÀ&’¸VФWèdQ0*òŽQ¬M™*Õl¸9Ò,+ÒKîmšC¿W}À~£»€u猭¢m±6øw•PØ*¦lFù=ïtVQûÏCéƒ0@ttsbíâ6J‹mhzE{AzWDº78÷F(2æT.Zr/4 µczÈjÝ«}þt9ÞžÇÄØªËÕâ&óšŠë›ž‡dOáyJ޳vçb“bÚaPÔN’!ìSÃóš÷’÷Á&ñ=¶óí$ð¼i Þ̇ æc˜úøûÏWþýgôA[î)¾t¾uW•ÇÇG¾þõ¯ó³?û³üüÏÿ<ÿðþC>úè#Þ:ÇO?¾vÀ>ÎèH$m)BѰ,A aƒPà7lt ˆ™\…¯É:!o#Ê3âbJñ¥>h8p4»çž†1“tS‰ôÄáÅr|Û!— ÊÄÙ%‚,8Œj`%‰ˆé×irÔÙa(eÀjÉA/9æ” [ƒyÄ;е£e£M%ÌI š¬Ó¾ ¿ÍFŲÛ8æIr̘GÁHxO1Ïk —öƒÆŠ%$C2Œi:—Þ¥r)g¡¦ä8qÏ3qžŠòTœû"ÌÚ\õ†F[6ê2Æ-š…úÖÒ ¸1]¦$Ææ9)Zn'|æÅˆˆ nϹ޸ÔRJûEéø@ïÐN ÓóŒwäµåºÅÜ+_ÝmùêÇ[¸Â¿øîóÿ€š}ÿãKè×îªòŸÿó^þOéÚ“³Ë[N{s­!q[[TÛø¼ÝaÙÐÆò.º¸‰8l²H@«áý@Ô‰Xd±Æ¸i¥º[å˜ûê¹s1)d‘–,+ÞHì× Ði\’P³,ÖifÝšˆ²ÆƒM%`»4¥ ²n®#ÎmçÖˆEbkÙUœ¡àpžŠÈ`Å¢WÅÙ:è™`ÔKrÆæ®$É&¿^ 5Â5~lLŠÁÙMÜt_ÜséGH«dx¹^½9çw%Ð}äy‡F¾‡ý»ZZ¶ãIe¸1fÄb¾AqÆÞO¸n°®ð‹{ž¶9LR¢¹€Ö¶ rãc2tç?€\é¬P‡mÊ<ï0˜‘Ní¤Ù½ …uðûÕ­€¦B‘Ä!’•´‰ŽÙ8:ß™Îrþk8Æž\ç"ʰY0LIØõE$t‘¼q}œ(cUîEG/÷1ž´7ZWˆ¼‘pù‹ —@^·$ÔSG=uÓSçœKnaÞ õQS­L±oƒPø´¢XG¼}œmÜFG—ðÞfü}n/m&ûbˆÉH­`TØSÊí’-ë¾sœ‡;uÏ›$ľõÖ$Æäädü¸€\I³#;Ðn„ÎůђS—Åb¿xf[2!J-ÎÖ„¤+j¥x IDATv%an&ÂÜfcâó·Ã©°Á1žð]µz/÷¡m+o60Á\¦˜§Y2E¤›Ü¾€Wƒ±TB½‰œß¸0P®gBR¼Üs7BÆÒñ'ÉAÛq,ØΊçw¦@ç3ò&½8ŒXdòö°¸ÐÓÓ&>:Ò|ŒDZ_kÙÌÄy£~îèÒº*×$7Ko(3 Œ`±Ð8Påd̃€!ŠD î&:æ“Hâë Áù‹"‹À¤Säj„:¶eVv[8§í b.¼%SÁb¡Y4\,Ìp×0‘«eÛKE˜7ªl³`—VÓ&&ÅÐ÷Mxܧb1ØX·4î"}®F²`¸"Ô›è˜7ÅÂѧSüô"ÈÜ%9»„¹%xoz¥K q)1*¼>µÑ´F®gþ§¥ËÍ"ñN|oØÆ±ÿx0—AÃt;[).%Åa¡qWéòzà³d¬[‰Æ–ç‘ö½¢ps‰B-WÃõÊQgƒ$¹ËUa>ZŽßO|˜ Ì&îÏÎ,‚# ô„¤A$$7œ6¸ì$Q} +Ìi]-gö¾vtÕ Vç2XÒÑèhdd+°u¤[‘à,”ø:lUÃc çÁŸÁ pQ|"p…º£”à} LÎÖ¬/ŠÅ Ìi‚èšD’ac0ƒyx.À†fQ$¶öQË>p^CÉÝé,!j%aErBì+Á@zç‹(¤ö†XWÉQKr”1`.çàžÝ…‚yJަŠÑ8õQr¦NŒS]%Å„³mq÷¬:1 Ï%cžžû8×xƒ3¸¬Sc1ßâ9ŠO&$óéæbOJ1.”N†ˆmÄ5 uäùF fÀ>u⹜AÏs¹HÀû8.×Âsú0õN¬™ÍX2xßY|˜­˜Gí¢Ãõ A‹( ¡*•Hx•B^$î£pµàFwlmEÔ qˆ´£§ë i§N:;»rdjni$Áèép2Æ’/бD1VØFqHD޸Фñ3hiI%wt¡4%xo„:ήκšÝñc:£ ž-“œpÁÛ…Ï Æ<àÎ"îmœÑ±Žy£+ ­më »( ­ î9f¯ª¥d1b!û(qž¼^%$Å p1wW IòJæC˜Qãȳ|b{IªÙ3Ó„¸pªwua¤¡æyÞ–×î&Ï=B«ûˆy·9IÎoPš1`®SÜ“é æÒ“N*F¤#œiŒHJvÁˆhÀ9»†÷ZÀ_Ï%ò øF•kçÑkÁ]“³ë'b1ü˂!Ò±q¾`î8ÄJ&EìEŒ¸?)œB?489¢‹Öè袳‹XKçëAÚÞà>Rßi%‘qÚVš ³áxÂ+ÆZn6loU`«ù-[¶ŒY˜­)Iا×7xºT-Fžkg0Ÿµ8Rß¹NˆH±Vv±Ì&D¯©†ý@lúˆùä’`â¹O­%ƒ¹¤ÄhfÒ¤ùÑA¤'r‡.úh€ÉÝ&Yóô£@Ô"Ƶ©%jøsӺͭ:#ÌQ”ñ<Ôd–Añÿ‚:‰E‡fF±NN-µ2v; Þi$/ÊVׇ’ÈYqç0h•I{E:“7:;©¶/•Ô“"POR©ïðá¢Âˆèðjq¦ºþxÔ‚½–çŽ[v3¡c2,ÉqƒâFŸ +̧n.V%̻ԇˆNÎ`žÄÁ »†ìžwªìTp¦µAÂõ¾tJŽÏÉ:ñ\é*qvnB,ß]tÏ;/QœÏCrªC" ´ÂEŠ‹¾&Ü5Ч¥ð<.ùÎ6ZõýÓ ˜ï)>HÖLÜ4Êm‰Û—,¨…˜5iµˆHXoŸÇµ–=;„]$nr;Kd¥¸÷\›«\]*»{ãšs{#¹çŽÖµƒóF¨vñõÐúÐgÖSimpÑ0@h„›žhvÒùØÑ¹XT}Q 8f7§ ˜'¡xË¢%¡( ±‰„w|U•Gº˜w(»,ÎsÜÛQRRì @Ä|®yÒR"b¾óÁ­í|;y×˜Ä¨ŠžÀŸ9ZçÒJòs¹†ÄX¦ô´­ñ¦¼¨1!&ÇlÚvê5æ^‹ù¨x1öÜ[ݳñ‹Nz§¾2%Ù¤DÌÇÎ×mŽ„yvÑéÖÕJâúF|è=»R î4V+DŽkê*zÆÄñ”/Q¤¯a?x‹ùu"Ò©'8‘[J))ŠÑ•û‰R "™¼R7—ЉÀQØ+qöáŸ&šzp›qVZ®×<·9®ëXø¹oM Œìt›1ßáÙëÈŸÅ:µ=^:…«K®)Éqc8îŠsV¡µ˜+ì<ïFÙ«°÷°oÏ¥Æ4ç`F8OðŽƒß\%ccž÷Ož*.c|½šÚ¨EJî,>\®\…zráõLÖ$3ÒFQˆëaYçô¼áÈž65Šs n"q ðÆ{†k¸ª„éw¥÷\œÜq6¢ÙQì]pm{â@ ïÎǪ³ÂÉ8¸ è4>úè"\ž¾2ŸKÒÁˆ'{åéHUÉ-7œœÙ Õ^±âl›FcõÄyˆ®.‰FxMð:â8°§åšbÁÝ:ºvðô3XxF¿åŠÈ…+·×ÐÍBÃEÌÅÄ^Á]4Ì,ˆ­ ×ü“Pø>¼†Å|2E¸\eM_Á<¯Ô°‡¿ðØ„8Ç;p8`;V‹g`LÜ×áÀŽ–=ÊA=—Šç>'Èz†«¢W_óÜbîÏ;ƒù•ók§ìöMI„ûX!î& Ğϛs€UŠ\ÂÇë5pÚÇ\ “$8=sV^ÃüÎâÃèjtÛ¸ †ÚMTB‘„!‰s ÃN†¼ñ²cí3‰Ž´áÊÈeI¨ñl½çÒyô2!n*½+±HĽ€ëa“(';aßçÜŒ’JˆŽ" N%'AtÍÏÔT^Çq5Mc–8@(éTXo2qЧ70÷ë ó‘0q.%Æ>â¦ešÄ{Àé= ”KÄý¬s¡¾öžñ¢p¯isÎË'=[“ ÑÅT8(šPÁ„AÁØs>+Í9œ­™úÍ©‘„"]EcBô±Ä®N–0³f W¶Ë×à˜b^󼈳R†úŠ !ãëQTÎJÁÕk½ÏÏçì´‰£g¯CæÄózÎWð¾èÜE÷¼#ÏÅulggy®Ê¾ É1à®´]pÎDÌSuØÄY2ÎT‡ÚÌÓý*­§˜F¤=“Êå¾TúÃh ¨ƒ ÈtÕ\¯x•„­SSRí “†’0ôQŒÃbŸIDt åÀ†‹Ž\9äò»8¼Óà¹^R hĹSØväQ$)ÃÏé£8G²:84ÂA•#ppB;—J$•Ù©×|U$ºæDV™Šsd‚,yö†DƒœEZ'n.»ç„v‘g‹9¹UQÄ!a®ô„NfêÎEǘbÀ[hÙ‘ŽcF±ô>DÁxé=ãu!1vÀ¶7˜'¡¸Ð¸¾J†GçF9hŒv$Î0åuŒt[§aNtVÈ·†ŠÎMâÄ"1‚œ–ŒùH¸¦(,˜ž[qÎþ9¶ûl5Hœ6Šò&>ï'â.fŸ{í3ϯÑEŸñó]LŽmïéÏ«¶!)ÊÔ„„öFng¸ÀëC…c£6=Œ©BL±É9G×,±…—x.11H¼&´½ XÚÕ ¥jZcçuÇ÷/&n.9¸J”u$\Hq \ocÀ^- ±²Aµ‹nºÃsÅëOíéâßwlôÈœ´ŽœÙ3rÐ⢯×=k!®uБvA,B©óAáèâÜG`Ó)zŠƒ§ ’¦vÅ)tµ‹‹î¸?(n ÌÍî¡&+Ilu6Ì=\tеP¸ìÞæA(š(M‹Œ7^·ÓmÆÙGœ=]i:O+–pÞEtä«Úæ¹¶¦BÉ· LÕ‰Mˆ1÷I58htE~ŠkŽsÒã ¹È8‡›øúˆ991ì•]ÜoOÏŸ«vl8r¤ •‹Žœ)¸§ê±»hLŠ wJR´â\a®|¬Zå¨pl„°éã|þäœÏäYIr©1sJªRìM|rBôä›$'QN°æûÙÞ¡{†/Y oÝîÊ{Ïßú[‹¶mÇ‘_þå_^øß‰¸b„9œ­VUì)ÝC$qO^ÄrIº)‚ÁŽQ¯A° "=ê¥gËž£:ÎxŽ:pÆsbäÀÈÎ{Ng¸ø\rkjslƒí’ì*θÔÞðŽ\æ#ʦ"1¾”~œœã¼æ<­+ ¨G×Y{ò…æÄ¸6+ÄY4Š…Z±À7a›ÞŒ}šá‘0÷$azáÐr½´ŽrŽÚÏ•ÐÉïð÷‘+^ì—mLŒÁÑœcrL‚qºŽq ÉbÎóslot¡á„ƒîM…‡&`¾í ñ¤Œ©b‰.Nâ ‚"äK]û(Ê©§_ZF%!V¢POR6x3Œ”S+Cм/ʼ„»V‹¹&c¾rc‡×Ml\„aØ€ù!ð< ö†#GM˜œ4&ƈùsç§<ôœ³{v{çs2dž¿œÆ€yJŠW…g9Óºkæù1òüA•‡”Ïwâéóy|Å8gI‚C|ªCc@$'Èœ¦Ër}8q—ý#?ò#üëý¯øÿá?ð—þÒ_ªÞòžq¹€ÀW7-~ÓÖÆHGB®u,e¤½€Jêä¦íuÔjÑØã93raÈs Ùë‘GÈ.ú!>¾tžñÈ›ˆ«Û0½ 9¡îľ9ŽQ(ZåQƒƒÞeqŽ"qŠÂ|„õÙUDG‘Zöºy„:5Àáz} ,™àV°›¹7óçFêÿ·ã[)Yf±Örë]b®›‚wJŠƒsƒ>dÌOœôQGÞ]G†S©\4 ´ÄŠEåDë®2æ^xT‚8¿ò<Áü"µXÄ“}4Î)×405¦²º`®óò˜ü~až(¹ðTÊk9ssš`Dìyš;FMù’ñßipÒ'xˆ"}Ô‘çÑsI[Ñ`>Fœík¬ gÂPéCxü÷CÏ¿z@yòÓ~ÿ—_ª@ߺÝÕOÿôOóë¿þëüí¿ý·¹^¯ü½¿÷÷ªÿ÷Æ9~ú¸Ï•´ H¼ D®®cØn)PNçô>ગЗVg\†¹t¼&—±Çë>Œië)PTÏA¤yàQ•F^tàÈÀv¹ž=zK ¸½äö†È™}ëypðIûàÉâ<<²ÊK)±}8ïråŒsná}ãcÓ©ù¡zÁÌ5]þUKõR®ºDú1?1ðy¾Ó#'Fž#Ï÷Þs9 hNŒŠnÞ'\sfëVœ½²‹c+ÃsÁÜŸ3“Ü%4—ßbZGsuç”øÏõ< o‰ë_m_m7€ãwGñ¥ ôk·»ú•_ù•×ÿsisqN×JJÇ„šÈ-E¨J{T‰ó!GtÑ¡CG‡÷õMìO§ž]çŒ_ 1˜ÇK´jâ‡w¨¤Û®Æ± YrpS ¦‚œ0O½ý„¹€Ó óü(‘çÎú­¯Š3rtÑqˆ­/Dn í줵édFF=£<²‹c/ <Äêå¹éN‰çDÌÏàN¸æðn”o|8KÓŸ”áYgJBŒ‹‹×q}jk~t¸„»Ä;Æäñ¤9æÅ;G¬%5=-æ oÌãýÄ]¶8¾Pˆd± Ñ¢GŽä®…Ò…¬ÖvæB(Mü`< úX¾žñCƒ×Mtû8ŽÄbÔ}Áó†ƒyƒð¤= ¼ëúÓˆžB_TvéZ /욇Fyiw> ” O¡*/à^‚{Ïñâ+h/ø±A}i ›ú»µ8×RqK ì¼;[‚G¡HÇ@8EÌjþI¨³hO#UävÐl˜ë8F—Ôᇎ™iO‘ЃƒXë å û)æãÀóÉm0ß»‘‡[x£°ï@_$¸¸gA^/†ä£{¾…¹Jpþá0r3Ì'¶`‚u"߈dq£êZÌœT<ÏÜNë r± â)»wF6‡ €Ã¥Â|Tã¤y`àÄÀ ÕT1 ÚóÀÀûaäz*•‹nψ;!.‘‚¹°ï4ÌJzŠü~ IÑÅ‹!é%‘^ðc›1GÊÌ+´‰F$üp­p/í {ËD8™r}Öö¸Ÿø0Z¤8‹hqŠ6E§ÔÙºëDúF¨ƒ›&^±TÃ`[ïÑÞ£×ßwø>ŠuÄ20ˆô^xsß h×áûãØ2útþà1Ö'Ïô¼ ¼á ¼Qå‘€ùó󈾌F _æ%`> o<zÐg¡yŠ ñfo¸‹â.74óm¼÷È6:æ %Ì—~¬,D¹ñˆäÓ ¿mkɈskð C&µ`ÛŠf²ùêxQ¨sï6n†[‡ ó>`îû&V.F}"­Ï <¢ú†ƒ¾á ÊøL{^Î#ƒÁ\Ý âNÛ„yçax* 1ànâØàýõ[TBõêd“Eº`^„ÙþI5ë«E£8Kx’øúùć)ÐP\…%o«é>¥q? Úhv}ÖQ#“}‘ögè!ŸNüÐÎã¯#þÚã¯Wüõ©˜4 Æo£`|ï<0>pa÷ò̶éxØ(o<;Ÿ„þ½F¡š(ÍUýŽFw({Tv¨Äû¹è&ŠtcSêÍl”uq]‚@⺠âg³$P8ŸKmZ‰nN`t4’špN›3ê¥MR#C˜Ûšç_=þJÄýŠ¿¾gÔ£bR|¦×g¼¾å7<êÈ#=Ÿõ#——èèv§àž›žÇÞl•‡AðOJÿ>ˆ³{ q< ÍYL™¿ýpI· ØÐ˜ Ï071f²8xƒùAê )#æ¢÷Àå$ÊÒhÆ;¼x.SCRmR* æÙŒŒÄ@‰ëapU/ãµÃ_Ÿu“â½>Ðë žŽú&'Æw]Úy'…í ššæœóF9¤jå½âž÷ ãKºÆ†àý.㮲Ï}qØd‚•d˜pŸ'ÃÚ1Ç Eöá Çòôš<^p?ñ 4´‰¨›"Òñî£ÙÙIKpz.þíäxª*ãì4ž¢[‹t*Á<ãÙãOOŒ§'†qÈ˽¾>â¨GÞ }Çõy€—v'œ;±oÞŒðÐ ã“Ò¿yܳÒ<ÃØµ4Ú(­ðN²Õxo‘4_ E-É;çK¹‹Š!6X¨$Ðá(ïã$’›º9øcpttÅ;9ë\…¦qœ[ce¶»’1×|½†›³ú³2žæã0¤ã‰Q?â oy£=Çqàü4À‹IÑ=qlGÞ¶ð8 ã{¥{'È{pÏÐ<+ãµeäˆç€—ƒIˆ;T7 ¯ E3Çl0—89]è#æ}æ>bnlvÐÄ[¹ ¡£¥ãMØ’ªÆÄyªÊE3’0Nš‘2ø–.òÔÅÖÎ%ÌDòç~aìß1ècäùFýˆÞðF=‡¡çü2à_*ÿßûŠW +âÆeEz£° Âì6‚oƒ`$¡3~¶˜4Kò å`?'¯^s7Ï¡Ÿæ_NŒ/'†þ‰AßÑé{àcôÈùÞS>°{¢m.¼ÙxÞtazQÿ™àÞAó,Œ× ^å/G”#ž=ªû蜷I I½ÏÏgÛ_.®m@dˆ¤mâä\j›ˆ“bÒ“P´oÃmÀÇÄ(I42æ±%bzÔK˜ç–GšßjgNÄ8]c|>1žÎŒÝ{}OÇ{Fý˜·ú–7t¼»ôôÏvÏlÜ…Ç­òfãC÷™àÞCû,ŒÝ–Qðò€Jh— JBÄ"¨¡~QÌ%ážÄ!¹·—Å9 *&qÖ‚»Œe÷&žoì¢HZæDbõ˜*™<6ó æU‡kP|2#W"MèŸ<þåpïßÑG¡õcõ‘7:òþÒs}aû‚´O¼Ý(Qœ»Ï÷Nhž…öºÁó¸Î–*áÊ*ór2ÓÏí’­ S#%D')&çœ~æ’Â}µ7àh |$®¶+¡p§Wd£HÆŸÛ IDAT|M¢ž%ÑH½<‰}SDë\˱’Mf¼:–uÒV,|œy1>ŸžÎô×'ºñ¢Ÿð¨öýÈËS‡ìžÙµ›0s ûLhžíeÇ(oaõ/GL†tÕ—Sd+èÎÂî@vÀV‘¸îâ¾Oë2rÛÔ‚Y¨£³‡p÷¤¾WSì®p½ÂõÝYéÎÐÅù´ÃÇ0¾¾ûÄõ݉æåÈæ¥A>{Æõ ×óÿ1£| oéå‘–GœqrDØ#xGDaƒcË(Ziƒëý¸"ÂJ _D9/…´sq&6‘Vâ Vrs”AÙØJÒ¤eû Êì· S¢P»Ôú˜b1î91j8§…!. óî ×KÄû Ý[è_”ácexRúï>ÓvÆöl®øìŠëýùHï?f˜óH#8Ž8ŽˆîÙGìì°´´l"ÞµPEBq“JÅa:œl æÍ ÌÛ(Ò s ÏcB”„ùØ9d¯…ç61f¡Ž»¸}icÜ3×}Â\{ x÷óî¸~=)ý úg>VÆ÷Jÿ½g®ŸqÏ{Üó†MóB3 ×Ó›ñ#FùF÷–ž74<àxÀé‘CÄ;ð<ཡaCkcB;]i§Nˆuuè*ž_#æÆ=KÀœÏïKœáChh\5“€ÀN‘ƒ½G÷‘Þƒìƒx»¢[p»àþ¤%¹iy¤3G/\Gå:Âe€Kç. \\¾ý_¾N~º Á…xmñ&,§FyÙô<»Ïð§ã{ø^ÿ–ÞýWùˆ3oÙóÀ^Øsd/vìã¿mµò㆞ {iÙÑ"âhp”~³¯EB aWœ„Ç,ÎÎÅé‡Êì ¹/á æ‰¥v†­Â^ѽ"½"æ²+"-ÛÒ'uÁ7Š3˜º.#\8÷pn ææîR5Þ„û\\øû“ƒÓfàù{O Ï>køÌ¿eO¸ÈÇœxË€÷Ž#{ìÙ™ek æ6ìâ`•ÐDÌÁåòÚ´d’ åKÙ–M§˜'Üe*Юo5T‡{EãÍ*en¯ñ†–çA¨·Q¼IŽöÁ W®ƒp”s—.]¼üµ¬Õð]4,.ñ^Úçæ=Ýû-ÍsËw¯tò —0Œx3Ã÷ìØ±ã0Ã}ù¾aO‹§A¤¡˜Ï[="Iœ¯8:œ$q6˜§é¹3bÃýć)МÒËm{‡"y>w~'¸½é²ø6œPx…³WN}¼^¸Æ;K œY—x‰àü\8;5Ï¡“ c»aØí6°/lŽgž?j¹°å³®¥é[ï8À!zçƒÈâú1?6h8²áHË‘†=.©ŒÙI¸äàâ%7…K!mgGŠDÚÔÀ¤™8hƒùNÂÝl÷ ‡¢`·öQ0b£Û‚¹4AŽ.£p•Ó0N¢œ%<^"ž§ Þ)xŸ æC»aÜm7޶‚ý…—7.~GÛ54½°j,{‹7ä÷öÇøÞQ\ĺåȆƒ8$N¼K ÑÑEìSB¼âØ \—¢3ƒ‚Ò“ÛJ.™Ì ,ä[`ï9xtïàà‹ÙG3b0w‰çM(æÏÎ#ó>ðüZ|]ÍoË{„#®ZŸb~ aƒD¼û¼$q¹„*(õÖœ‹ã, ó ×I¸ßW|˜-‚¸ÍSê4º91‚¡ÈÑ£Gp‡ "ì¿Oå`(Ó{ÂtÙçž—(Ê//"œœráE4øäâ"prÂKçÑíÝïöøv¶Gô<²ùÞ™?Ë{úÝ3Ÿýà3×ÝT>f87ôgÇùÚðÙÕÑv. Ç1“Sx ¼þ0y=½vÇ-£4<ÐТ8I¤½â¸D‘6¤uI((®B’@oHÄ×”¹Í-F,bt¯pˆ‚qtpw •Œ Ù ²U…/¼Œš1që/ß—('Ñ æa9;ap{|³Ã7{|s@Ûzölß]øáx滿£ß?лO"æ çKļwJ£#>Æu ¸?Ä×bqÎQ4ôócjé2æ)!:¶abû,!FN—Ã3g„JãÂ<~;•4³ì|>D3rŽ9€;C¢»°¸à7Ê ð2Ì_áÙ+/RpNؾĄ—W?˜oæn‡o¨Ûã¯ÊþéÂÇãwÙOüÁGßeÜ?à›OSKwvœ®Žæâhºˆ³Ì1Ï<—ô7ß™û ´”;…b_¯8¹ÄVÉ%à™Ä9ažñN<Ïöï'þ?èëõÊoþæoòÛ¿ýÛ ÄÕ'Hl4 ʦ¤xÕ GBb<:x€æèCY°t¯ôMpkïǘ5`ûìàYÂò"÷¼q?IXïÝuAîGts·‡Ï.4ÿõŸéŸ¸÷°q¸‡ž?Þÿ—€ùWÑËj"æŽþâx:96½Ë 0a\–$Êáù%â<[COÃ[رá…âBÃ\δ´—(p)!¦iÌ +I1õü·šM{ Â|tè1ð£âoÝøÓ(<Ådø¤Ó§Èßg'<‹ŒåeŒ\oÂ~9‰prй Úâ1oæòþÊæ¿^øÁ®åcyA=ßÞýrØ#ö€ôxiO þÜðþäx>SRŒFÀýHàuÂý„ãLÃ9ò½GèÅ1ÄöÇ#6Œ4\ÎHšæâœ™Á’x^Lˆ¤Qì<üÿýõ¯¯}íküÂ/üûýžo}ë[|ó›ßäg~ægøÉŸüÉüw§Ó‰Ÿû¹ŸãíÛ·|òÉ'|ãßàåå…¿ù7ÿ&_ùÊWøÃ?üC¾ùÍor<Ë¡jÄBb?TcéoÕÇ@}yqŠß SÞ¬ï%õÉ…çOñù³ž£P?g2‘>7-cs€HTÚ#Ò>@žËÕÁ9#|åGá+® 3úœ°ß ÝáÄgû?†Ýùd‡ø9óÒ §–þÔòþÔðô’Ĺɤ}Œ>‡† ݉ËÃ%žp}ˆ·iep€¥þgœbÎ ¤•äžé¢ƒŽåvê?繸Zfäþ³ }š ‰ñ‘P½ö1¾ð…/ðñœ_þå_æçþçù¾À·}Û·þdY°b˜ÈñÖOs:U‹ sèè´ã•U'¬TyŽö\)¬Êçë<ˆöÆ ½ ‘CLîæH˜a㉠4ÍAkd­&_Q{áëˆÜHG;‹y’à<ƒ¶^³kL¤ij¸›!‡ˆll"lý½‹ì6ã.°ë³ÙØÙ8{}öT®“áÀ$Û=U1“„„è›F\\ȃ0Òö0 qˆ;é¨ËÄŒåž:5÷Æ X2wÌgp™Užëç€cnϾ@ûß6CÐŽ!ѹ(gHš£íš aÉ_>"_†Ù:ðuyÅÙ Q`^C7ƒS½fW›H‡¦†»©­Šm÷m„9ëÝ6rܶm`›£D{÷|ê;æ\0—€˜ǼŒËZl £8‰³釯 æã(oÌõ‰¢SÁ02,@®@ ³ì<7q~V.¹ì½.\÷ç&î‹b¤ë k öiŽt hç6³¼ÎÈ—È—•Ù¦ðüDPB‚à ÎÕžMóe¨dRÁíN q¬çÝFöÛÈaÙµYìdÀ|ïýȉÀY óŽ@v®æsIH,‘‘{ñ<®±yÂÒ)¾:ø~¼>° ú¿ñùßù¾ç{¾‡OúÓüÂ/ü¿çK_úßõ]ßÀ7|Ã7ð¯ÿú¯|ìcã[¿õ[ù»¿û;~â'~‚û·ãÓŸþôå b|á,J6'ýâ 3EçÀ¸‚<³¶mEÇ*(Ïj‚ñÇÂ!¬‚b…mr$ç9Ú]¹P, -¼€n¶sh+äé„~ù_Q&+áøR1ç âñ È޵òßêgNµ ´Ô5rÝÀ)Â.!'ð&"›HÞFö›Èi9œ;u¡p'g-Ÿ“–ѵG¾z-11 sw ÑZìÞÅZÊÖf'nŒ/v³•x_˜UdfB¡s`®†ù¼`®¬QV\bþ¬° ÂsPVAXGÃ|…c®­Kqœ5.Ü9/Ð|eNn“à©C¿|$|EIOð$ò"KÖd ó OáX ÿgõLÛ|êijdÙ@;‡m²¯·‰þ9¢›Äaãë§È^M$#ÌϽP8æb³»"#MÜØOèeñêÅÙ/×c4WÜ\Á<¾…瓲H¨¨wŠ8×uû(ÎsxFy*"ÊÓy>zn‚p ]œ¡yĹc¾p²€ói+xjáË'ø2ÔÏÂ;ùˆæ Æ9Í|Ý )ÓÖ+õ€9ÕÎ3ë^6 n‡uä´ºÈ.GïXŠ8‡~9¶ˆ3âF¤çùŒXÎŽ …ã„Âñ1ÏG:„÷Mß×&Ð?ú£?Êç?ÿy¾ô¥/½çïùèG?Ê¿øE¾ã;¾ƒ/~ñ‹ý5Wò'Â÷ÿ÷óS?õS|îsŸãÿøù¾ïû¾þÏ­sÇy\þ16|ânâyè@\¦–‹ÊLй§Â> +0á Ùˆ <)<ÁˆNà ëØ…Š6N!_A¾êÅAâÒ•ù4³¯wOèW@¾Õ“p×>"‰{9ÔÆšÊülªá8Õ™w«´ž uc^ÔÈÍÔE:ÁÚÈ+ëëHÞvk˪çÈ‘Øg ‘N"v•TçàãlFÞi˜B6^:Š#Hm-bêTz!Ðê&Š`ˆãža*È\й õ!Á¼øu†yžT ó‘x¬²‰õ>Vœó€9ùÊEú ²‹óy†úpF¾r‚¯@|^iàIÜ#Ô¨ 4¶Õ!5pœÇ”y·~¤c^Màff˜¯“a]DcÉëÈ~i÷‘ãyÈúÇyçÞA0·Â8ÆÜoZèïÎ:!ýÖב@—YïZ̵ÏýÅ;E]@žy«ÐÇcáºð„Æçwa¯cÌ kîšÈyÇ€>¶†ù»àö,|D"wØbÓá¢Â¤ö SÇëú‰¶š@Õ ue<¿x^ø-›‹ˆ®Í´ûÀé8êÀóq—XÎèŽyƒH‡ &ν@ŹF¤æ¿v|áø.°cÝýû:ãè#¿ök¿Æ¯ÿú¯óðouÐ?ôC?ÄþÏÿ™¿ù›¿áúúšÏþó|ô£哟ü$?ýÓ?Í?ÿó?óÅ/~‘Ï~ö³n™ßûu÷p ,õ<”©·~³lÎb&+±,s6‘]œ•œ¼ª<a'’ó¢Kå¼tçæ¢¡WÈa‚nAÞ=ûÀ»Bx®Ow$ð-Wœ@Ô€ ˆb1ǜґUõ®µ€uUmŸ¯§–Õ­M4XGdå$žEÚud»Nœ÷³–h#Ð1ˆ…H :iCéšcÅ$ÌÜM´Z$¡hz‘¶^ÆQæ_ÄBûM)EœÇ˜Ë\8Tb™¾c¾Rx–ŽÇ 1Å'5ðÌyþoï—¾/¯L ög€Ÿû¹Ÿã»¿û»ßú{f³¿÷{¿÷ÖÿïþèÞû‹‹@ C»]Î#hth·§Ò ƹ¶"ý ö x–âœ3À#ʣ£ Mtz…êÑkT¯]¤—ˆ.¡ö¡A×òúŒ¾y ò ÌvÂ=WD^IÇŒŠ¢¾¯ÙušzGh˜—"X8_û¯›P1 󣙑÷q§X}8ô×ý×ó™Ï|æƒøÒö£b8ÁnqL„¶Ö~l}'âä5¡^‹­r?)¬D817QæÕ[{r‹pë"í.ãЇ3ônBÐA…«“ Å‘;m¹•ÈTרXãG°ñ£a·©pSÁ¾Â‰+´éÄ6=¢i28Œ"ÖÓf‰ó,ÚÈÒ$"+BŠHŠ…ÕYІÐDûl¢lŸ'ÁÞM˜¤ ý Soqs#±Ã1ÎCeèªÌA„=îæDØô‚!¶p…a~Ô ¢c­wˆ:özcÁåÏÛðc]ÊЭ„Gavî%r§‘{i¹#1aK§ê¸‡(Ä,ÜMl‹ò!æÇt`—Æ‚áSj`ZÃt‚Ì*ë\\œÅ•W’á~xäMÌÃð¹à= BjbðCKÊI^ãSŽE}ûÎÍ&øHi@'™V sب <׎gL¤TH¼u#rçü¾5¬¹µ¢˜¯‘½‹s¹™‘ð(,¼ ¾ÒÀ½tÜrfdÍ=æBÍ6v Ј‘$œâ‰uõÎsã¸a.S7#¥Kœº i"T © óÓ“ð|,EPkçùói€:Ô$™z¼Ñ8×Ç綺ƒþ04ÀoüÆoðçþçˆú§úþ}ñ HJƒ{.m_ín®17wNÙç';;ß¡Œ®_HÙˆpÖA®‰ÜÑÁànk½µ|nmjàAQoõŠP7[áN„;:î4p'‘%G’5ÚvWƒØ•ÍL!C¨…cå%8%¥K{éÑÈšêÞaj#螺6y7‘)*!VÂá Öí@Ô&ÂÄ?O£ TNAhdb;ðd‚¼ ÞÃA{AÔÑ"!åmÓÌN3;2;:¶R2QsÒ+ŽL‰rÜ:æ÷&ÜBqwÝÒ b{)Î B³aNà–ÈÚ ¡J-m¸ßT°O–CÝÕui˱z€ØôâÜc>i`Ú˜›+N®IHe¸ÄJˆµp|‚ÕÙŠ wäL¢X‹XS‰L‹@;P.ô[ŠbÖŒ:¿Õ?s =™½föd¶[É=Ï׎ÿ‘ A\ˆã™;À cù²¯Þ"ÎBx„f'ܨÞ¸¥ã¡ÖŽ,£(ÏX/›÷bî.0?§-Çô`…plFbƒLj˜Þ"ÓÊDºIP;æ•a*áü ë“‹q,oé…y¬0L%à ¿/â¼ûɘÝßÿýßógögÌ—)Ä™áT5Ïæº:p s ³GØKf§™-g¢Â†À™Š ®ÏËê IDATK’Þ"bÑÅW î0ô΄bGB!½£HëÀ-¶HuGËnÉÌôHo·éûíá†Î~ˆOopLpŽÂ)µtiE[Ä95ój\0¦£¶/êHHBJb?מ…Mkâ0bOß 9~ZY€:4„±«»ç")Q®[êq¯F˜7™¶RNb"±ï\TغHo6*œ$‘JK-&9Þ÷€»»öÙÇ7ÅÙ#®[n²p';í¸“È-3ZOŸs?î5Æ\ünÖÛÆ:–¨#ó:­éR±Zïò=˜40À$!MBjsr¡R5`~z*˜Æ3çYöÁ ã,ˆ;ºfèZ.pqôEqÈþÅ1ÏMàˆ9è½vnFz̽0¥!é5p‹È--wïÉÜC1#ÝÒœóÑøžV² Þ%zQÔÌxAô^Ñ^žû‡ÎþÚm#Béá”àuZÓÆq´Tøî…±˜‘ÒšTÑÖUóP çlÎÆíqA,˜üÝ„šÐwŠõ%æ…ï† l÷à_üÅ_°\.‘‹-Þ_íKŠƒ¾8‚‘ÁÑ5™.é Ðî,v’Ùªô®îH$è’䤽1¡èÒ+”{h—–ŽU( ¬„ë.¸“sgAæZÏL”ΉKï apsÁÝ! Ç`Ä=FáœN¬Ó95Hôv;Õƒ`L'&‹s%¤(¤ä ƒ¾ÆtX [µuænb ­ýÀLC4- ú«:è.}qÌ(¾X•û)Ž.*É.†û®,\iÇá(µa.·ÞbßÜÑòjéîݧ·Ä+=Zî|'ÂJ/ηt4¬zÌéÅÂOÎî·µôGœ’pNgž¢­GBá’iƒL&.Ð/1‡”lZ渶æ¶Q˜:–c°Þ,Dh Ãý-=^g¹à¹ÅgÇ|๛ÏÿçQ¯AJw2`N|e"o¬ >vƒùxw‰ð$,N½ˆwˆ­u,´LÈd:”]˨Sì_éP "}JB›:žâŠ|õˆç“ã¹Ôɹ]øí" óMgqžqoC"zQ”‚ýo±£{ÿ=½>0þë¿þkhšà}h$`« Y¨W%×™Ú Å¡¸:íìd4„£ ‚èB.Îzï"ý·è.Ác÷Fþ)ž;ÏâÎYÜ9wÜjÇB:S6÷­‚­n—+çZ‹Þz'áìNºK¶ñÑvµŒÝ\qÔ“ ÒLˆU°©_ÍNa5’‡­ }AÒ…¹ˆÅ9M¿ªí®®¿+ÌIœª7t£H¡Vr¥œÂs2{qÌ} à¨B`A’[:½EåÎðæä-¯èäÞ¶\?t0îV|qŠGa~,‹‚cÌ ”(/0/vÎ' ü<(R€Ûj„y„sÎñÈ.=¼æ¤i ™X·âãse”®`"7°Ua^„"JïäN!PKmK¹Mâ"⨼káM®3Ò´QÎò6žû¸tˆˆžß¾àù+:yôž¼3ÌÇâ¬Y¿‰ó­´Ü¸ÕŽ È ž«ö%ñóà4Â|àúÁ×]ëxÉsÃ=ÌãåÔF Æóãû÷~OÌ¡‘ÚcŽñFÁþÃâ ?ñ‰OðK¿ôKÌ#ƒÖ‹VZŽ…¸ZbŽÒvgöP™Y¬E¢÷÷ˆ¼}ù6 ;ë„B`²£wÍw"NÚÀDæPm{g¡£ˆ£8 h1=9¹`Äm#´iÃ1V.õ…«“ØSE|çÆ:a»è\Œ´)@A#ì÷Ãñœ&Ò/wQ¿}äë¥XÔ:ì&l”.åsǽ`¾Ó̈ʔÄ9g1ä„{Ç\ï‘uC[rO¥ÆóÞŹ``˜O8˜Xèó2ÅQ0φ¹*ÜÔŽy,Ñ´QÈiÇ!>Œ0 FlH©&¾º&‰ †aîì³8ìË9á¼ù)@–D£<´ïZªó‹EY†µ–:““ö˜¹¾“޽ ;Ê”$7„‚¹z¤QxÎG`]Ãk%?Œ°.Ïz#ÜúwË:ÅÀ­¶ÜHdÊ–Lûs¹ Ì¡AÈŽùØŒ´º¸cŸ^`^¢¦Ø«š®I sœçÎùLö;çx]ôàä¸Ï¥&#RvÌŽ1ÿ09èù‘é#Žßú­ßzÿ¾x9è2îÕ;iå2GUNdŽ2 [0ì¤"éÖD¢wxþ¼™À»‚¼«t¯#¼ö#6±‘ºBZµüùV"Wœ|ѤEé|‘Pûˆ£LqŒ]ôm-ƒXŒ6A•¯¤'rªÝYÔ*çPIT“H|gÙŸÇEzòÚº vCÉKá$p–@ºÈCG®Bª!⸘&pÏièZŽîæL0¬ånµ"b‹‚8îÅ9›P¼B6ß©´ïÆKq~-4ë‚yèã [¨ \kKEFi餥¡oÅXvýú‚Uï £Ð%hcæ!m8¥Ǽê c¢6‘˜Fâ}Á\ú]ðåshÅn…)-ýXœ:IT%ÚèG¾F˜GÏýG»7‡üÙxn˜+Gº×mö?Syî|G'¶¦Rx.¼yY5ýX^C~‰´ó<>Ù¼óÀsáŽì¸g’>› ‘A {Üutäˆ»è« œjÃàœ  æù Ìkã¹ÔD©H“Hº[ÃZÊÓ…èdàùËXéÆ<eÐýäLõá8‹ã3Ÿù ?øƒ?øA|i{I@ªªoµõâ°$åŒ-VÉÕŸ’9ÐqÐ`B!–—äXô‘{ìÝÌIªðÚˆÛ¾N=i«gᦅWwj‚aãFÂfœQ9quÔn—× -gûëߦA(ÌU˜Hw1ó:½¶˜!V„XCCò{Û¢T&Ò÷s¢ I±'~X¨yÏk82Z¨ páì¥o³=ƒ–qF×/š“ÓÒr7oˆÄÓsËF­ IÀ­99îëWî ï‘Ý^#ÌûÂø®mºná^0±pq67™ùS-±Ç\ߊ¹œ…x¶¿~[[Äsv‘0?ó˜žèRB¢D\(ó4K$vÀŸ^ uÀ¾ç ô2R:Ãü –ÊcŽj䤽s‰åÂsü×™6¸ !sÔ²(nVΚˆ\¡^ wƒ!)Øo'ð àså¼#‘äµp— ï{îKATãúŒ#*'”³;èqQôÕþÀ>!œí|­®2Gkx{§….µ<¦'ZÇœTiHRæ!Ž0—KÌUú“YOpé9þó©\GK†ˆã“Ÿü$èõå! í_Íàž+E+#ís'Éœ´ã@æD°Ez‹%—cÒzz˜ûˆyymÏîÝD|®Ï&ÎæC|zC-‡^JKÍ™¬g2gTZ²Ëv‡OŒo8²ÝÖÂíbDV'o!'!ÇŽUz@cE’†„ †‘·"J"Í"é~zI^µC뢇àÇÃ@ØâæNÎÝ‹…«K]ùÖ,‰qÇ¢U¶¢Hæ8*Ž'í8¢ wˆÞÒ¾!÷ÈÛ0("Âòd˜¿ò‚øJ„{7®¥µŽ…‘ísè"У«n„{×Q8'Ç:ˆ]}!G¡K'VéE(Ö"WÔæw#Ìuç¨öÏ=íÎÄc”ï`Ë\*$T#ÌÓ€yèô&æmÔžãg7 'êÙ0÷¯7"½8ß#û©‹³ÅI<¨´ã-3¼qÌ-ï¿Ç#%5k²¶dÇ\}›J¿0[xÞ^ò|°î0YA,xç]:³JOäX]`žÄ/’•Š8OTj˜[q”þf°à¸÷ üvÜÏb¿&T£hãCè ¿ó;¿óƒø²ýK‚ uuéžK¼!jÂìn£i[ TÜÄÖüEmUÛZî[8/Gí7 HŠGŽð¬ÌޱŠ‘ÿ³ Z…+Zû±‘“wœÍ•×è" i…à;+…¶º`wÇåh‚‘#~ÝÔ‰½<˜’˜eâäu‘‰8¤nBÌ.mΈ.ÇÎô9˜pœÝ]˜@¿œ&¨ìþÂTõS½{vgWâ /IµóxÉŽáLj›NlRÆEºìØ<Í}+'ðøó'!<ÁìùHÁ¼,"Üy×2S»”ÕÊr‹jûÿè  æ)—X„yøuŽñÈn„ùX¤vÃz\DRnH#œ/0Žyˆ6NQ8¹Xt’ˆãÝ›ýI‚UoB´~1­T+]´BxöŽ¥—¤£#’t‰ˆãîB8æÇ9k<²ã™ óÉ%æTÄ«DʵóÛ¾E°£Ú]—Ç<6!ƒƒ> ÔE˜Cé ×?ý¿$¸`¨kÈÐnŸœÅ‰lÚ…:ÉÁÎ#Án‘ö ñ &þùIáÑĹ9 ÷IyÕEÞÉî,œ¼w*\ $Žd=ºTÉÒ¡t0Ê Qì:4wrÑe'áfnäÍAÐ!TFB Hà‘3ž 2qòÖ¤¾ ¬‰±·2âvFÚ RަÝ[´q,NΟwoq£9hñnÅÄ:ÓŠrÖó³Nj¸æTrCЋ”Ä]ÞB{…<‰G\0F˜?)Í î’ðNy嘗îåN×(µ´tœÈj˜›ƒv̹Ä||p8 ±5ÓÔcAh ‘NyaîL/Òñê®ÇçW~åWˆ10x}á,,Þ8ËàäÎ#$×ÞœÝôZÄHV±3áÉÝÄFÚ'¥> w îwWÙ¶Vظ—0Ó#²¼ÙwGדÖ$ËÅùøáñU'vág¤g»W-±kçŸåÈ©éQHeÙhU—פ.Y³;i'oλ‰ ½«h}² Êe}qÌëæ(gcÞq$“‰T\ÓéÍÈÍù3_Û¹Ë~ ·¼(ˆóÛ¤†±ÇI¯²áoyhÇŒÔ.þÊb˜+-™ :Âý%æGÇ|i)Ðw)öY\œ£{¶G9qâÉ»–QAtN©"^ß8æî 3½`ç §ÎÜó¹89ÇÝrÐñƉæ%ƒ‘.©E†h鬿¦U"¥ ÞйP 7H·D6•aý¤~Þ«cþd&¤> 7A¹K/0W/ŠÒ1ãz “c²Øbx‡–Ó©ÀfJÇÇ;ÏÚ»…g„9#Ì“$9qâyÀ¼¸hñõ—˜ˆW7Ä.YAta.EàÔzÞíx·.л7/úkº½×•Wû·Ë_þå_ò‰O|‚«««KqŸâ¨.Z>*%è¶'¬K¤(‘è57ˆ\ŠhtKd[!åŸg)Ä}†ùY¸Ž¶ùNlSò½÷­‘÷N„+íÙ!ì{g1ô g¡ô7õ§N„°‡x€4Ibg¿KD$ˆ[»HŸÇäíEÚIÜTÄë…9èvD^_Mo÷Â[kƒpvâ¾)У : t_Ó¨(jÉÿ#géH,¬[/ŒzÝ uØUȳ Å“ø“^0f'ŠÛdïï¡Çü,æèdp$ë©h¥CåEýâV¯pÂÁDººÀÜ bÁ¼rÌŸÄ#õ‚ÑŒòèšTÕÄ›%±ƒ4Â<øçóÆ{±‹4àýóJF;fÕ'f.H«™³t´@Ð)׎ùu/Ô¢×È®é1—')rþÏJu®ß†yxÕY§x¥-Ø ª§ò·°ˆC\݈ôÝRî#„¸ƒ«9l†Ù ¢c.Vk"ÏrâÈóuHcÙtqÒUM\.ˆ]$u. ‰Ðné¹ÝzœgF$Çâ×úÍ×{]yõÿø|üã糟ý,¿ø‹¿È_ýÕ_]äÚ‚gЗ΢£‰‰rvÑÈ@EÅÒH«FÜNì(K9N•¹‡ q~VäY˜`é¤õMÈec¬år]à¶SDvdÝš@»ƒÎj7–Q»~q;…Bœ´v¶Pυ؈_oëÔA*¢ù5j‰Ô+9ÐòL» tjo¿§5ñzBl­å#ÑÈ ç|éžÛ*qÔn×Ã3ÕP·CQtÌsTZõ¢(¹Çmz¡è°éDÌA‡}ƒ8Ö< ²Ñ˜7ñzJl½ ¶¥@š¡/˜'×è$ºXŒº¾èš~±P£álËsÙÅ:’5PÉMwàÇþ4EV&Äò,~c½8OÂR”ÛXx.Ü Ü¡¾Ö7Ù"¼N·Ø~Ü*v«aÞ2œÆ! :Å“EJ=ÏwvÂí$ÄÏ“‘æ+9™Á×\úÂ裦“Š´œÏÖQ8Ÿ‡N±Çt¹Ot|M ‡×{]yõ±}Œ»»;îïïy||¼øsϧò¿ý,áÿó=ßôïme[ŠHûr‘*(‘èÒÅØÍçÈZrãj ¯< Ó£² 6þvÜJ zѸ*¶ÐmȲ¥c‡¨9:‘¡ý3UÆÚ¾±³(ç‡ï‹Xa-Ä:" hçD¢’"Ò‰†À³ìéz‡Ñ\¸éjÒUMlã…PÄV-´»"ÌBë"݉ ’¬ý egÊ‹­ÞiéÖ;”–L§¹Ç¾äýaŒ»^#ç" «‚5å°h¦'Ãü&•óÕ‘î ¤U»¼FØ‚Zç"~•«ŽæÏí%ÃÔŒ;99X«}‰yà{!ΉÆ1_qâ,ï¹4ÄY"µµá}¦ï`Bgcwmðiĺ/²P.fm:£ž?.º%e†°42ê|õ¦8? "Ýì­ ^`®åXãù J#{è óÎ £-MžÈ2âyye8FwæBÜ@˜MäviyžŒÄ¹– ŸqÌ´â"íkQiiˆóŠÔÕC§x6CZ¡ÛÆïÎ1/ùóÿñúÿ⿾þ{`Åóéô>*ÜWÿú*ÐïuåÕ÷~ï÷òû¿ÿûüÌÏü OOOüöoÿöÅŸ»žMù_¿ý±0òwÑ)qÝÍu(­t ×D¹¦eÙ †ä9² &.½8¯„ÉA¹ŽÂ*×qo€uÁP¸Q¥’ ÈÊ3!oÝÒÉ Ò:jÿÊ«Ÿ&8Äb'Ä H#vœbŒLBäv b´M.Εxƒ-‰ ‘gd'o%'qÓ“8-oM(Î.Î.]'´Ð;‹Ö7´Ø™‰á”¯Úö£WíÐj'{·2vÐö•.‰,éäšà¢!ù ÙF +Š+ïZ¼{™ž”« Ü$ÃúÚEù¦ˆ´Ú÷¡j7žÑnEèÖÀÑåоT©´P¦ |šwråÌö°ƒ0ÂFú£Cë¸_$ÏB#I’Æj$ ¬9r–ç^ ÆŽ:ÆÚjÏÑ\]gx‡Örð6ñ6á>æaÞgÐsÐh¦£Õܧíg±%ÑJ—t, 2â¹,{"ý]oƒiÊu„k-žÅŒ\«ÒÈ:çy·Æ7U“õ€ø }Ìa,‡¬C×Òw,Îó‰@moÔ!r»=æ}aìHb"ÆóNž}ün3YŒó‚¹ó%ó@hϾc±ò,Æ"T|óüO|óÿt ¼ËŸüïûéÝÿ—×ÿPþï]yõ¹Ï}î½ÿ`ˆHUÛ¸—»¹.ú2…¸8“é4e,霰,] ûYƒ¬!¬€µö®nrT–Iʱå\«r£&Ö7êW!ÒQ±EÛGÐ'$>£¬‘¼%ê‘¢G‹Ñ$Ç‹ÙPsâsóU9`ÀÚ¾ ‘0Äh"]ÜœÏo0‘ÄŠ#YVı³pg«š´œ.úl:¶ÐL”Í=Û[Cb<“+}Äsú<Ô ¡OÔ‘i5[Ç"Kò¸ bÇX†5ÈJû®EVЬ ó« \'/ˆªØ+Cq\’©Ø #áùMÌ»=è8J&ª.ÐôÓrI1Ú¢D†‚ß™ÚÈò*R5‘:øÞM ŒŠF‚FÖ$™º“vÌ£c~²¨£à;¡;Þ¹t.BqÎ/#ŽŠÞEç¨o`´¢âŠ,W']º² Ö!®…óZ­cܸ8a™Æâ<ð}©™™ž]õx£ÏÞ%>;æËþC> Q9Ã8û/c˜‡~QÐ0Æó‚y¹ºJÔ“Øw+ÍH¤‹))"mX ‰LHó[wζ9¦äÑù$=Ö­˜ƒ&TÈŦ¬¯ ôWÿòˆ£Ÿâp7×·|dÔÏ B!rE8Tâlš“r•„¥;‰%\ˆóB;š¼ï]„f‰°‚XDb j9´²CòÑ"Уˆ£är'à v:Ÿ˜k¦6iÅö~#þž/#Õ$Ѥ"Î&ÖŽgé̆(S’úG¦¤ª!.fÄÓÐú…3ä\E'PIºtt©Æ.70¿h³±s’. g®ˆ\Ñé‚p¬‰ƒl裥æ‹ ,—ÝŠ*Ë Wš©òî…P¬\¨W kè1ß Á1÷ ÁOçg˜Ç•ã0skÇŒpσPÐF䉎y=³ÂX;Öµ …¥Ï”Âh˜÷®®š¯f—}El m$µ”‚XtÁ¤²ñºüóL¦fAÇ•›+ŽùVÁ6Js„ù(JZê¥8/´¥Ö=âÝŠê“9f] ˜û[Ø¢sˆ â2æ¹/Êóüiô1GèÒFâ92¿±©š8é‚·a¿æ4`ÎÔ;— ©š®æ¤“uL½@o°›žÕÙ³ÿ Ì¿q¼¯~Œ„‹E¹,T‰=q£.èäŠpjèz¡0qfm»ÕÑ\œ9gz¡¾V˜æ1l >#.ÎÄçKÂæ5ÈÖÞÁœ…ê8"zBг 4A°KdƒOw„¬­?ϱãíà §Ää:R-u/ÉëÏÂF¨lIl\0\8&5ñª&žl!%ž­í²í¤+94éçsÍäúíR Õ„"¨Ä"êW„vJغ0oÔÄb#Ô¾ ¸¬k`é9ÿµ S=÷1’ê3äg[,ÏHX£aƒÄ5ª[S ‚9{ÐAß^{Ì/Š¡x!t¬Ë,–ãΉII‹DSÛº@ï¤ILdpÒYÖîêf$™™pLâ"æ'±g†®-­¶a.åõ1æõ€ùeQT²fÑ1¿"ë‚ ÂyJ؃¥Ç]¨°/ˆn>–¥ *Ìõl‘†>®9› 1Ì×)éÔ§gÂÕƒóÜtÁ\:àÈs}e*³mœ óÝ>7×´4õHœ¥Æjˆõ¼{±˜Ãźy Ï[ÈM*•ޱ?N·t-_‹8Þ‡WƒƒN¥\räNNÔMzq^t†ì‚k¨"[éæ$Ì_¸8#-,s¦Ñ½ ñX(ž‘°2ºX6ˆîL”õà+QGÈ'à :r-”;ÛŠ@a¥Ÿª—²ÛN{S@ü”s9%ªsd¹LL¦cq®<#-‚±ÙR1#2#ÊŒ”&ÄYE<sî¦óá²å~ÃY¤jpÐIÑDÒu'–¯&Tj]K–Aç„ý›˜×ÅÅUÅÅá®3Tº7לŸ ?!qe‹®Ð¼‚°6åÉ[ˆøî6äjí‰èeÍÉѳ8æfr/Z IDAT]¥ ƒö÷X—%§H:G®–‰fÝÉy6Ú †u/Êfgïb⢺tÑ­ ú`nó×£ÙÜèÚ'8$ŽÄ™L–Lbbòã&¤›±/ˆa l„tðX£Â…yܵ@­‚®¬ f3ò3Ä•™‚¹n!o=ÄßÓoÉtž‹¶Œ‹"gç ž÷üöÏ=æ—œ—S"WËH=õhO^:êÈVNd¶Ž¹ó\&ÄYMf4¬dϵuÇ\Hëïî©o³{G!DvhØÛ §º0¿Œ-û¶½ìâ\¢ ‚þÅ[<±<ú†ËÔvÒ–‘Xô‚q²ö0ž#7בº²í±&Î&•DvlỈ²#±3W7­s_D9ùîÂÖIÄvö‹'õeÄéoÍ.o!QÉœ¨s ™vBØ©a¾µ-Õ3Q–µ°<3Z”Rfzv÷ˆ¤'4?š8w.>n#aÊdG¿SØIHhŽ0WÃWÁ² U c õ;˜PFß‚ù1 ';´»j7ËD]§‹Å¬ŠŠ°—=AvDÌã|bù¿·ÝaŒ¹€J@JaG…çÑf$:5ìmKôÜr~æÄ<¥c¾³®å:r±»T¸NÂ\Ïf:Ò’Ñø„¸HkW\´»gîèy~´ C=Ól¸Kx^"¤’ï·îšG—½c¾ñ¾îÈøn¬ªMÜÞ$çy¢–ªŸô¨EØq$°»àyœÔÄyê'iÂÙ1÷ˆCÅ6%•¨ãk; ßW¶qÂošÈaˆ8¥Ò™¹99æ„Sêw…Ò„ \: 'n£{Èî”!úçîÉ l$$mææ œ!gDA».­¼‹:rJ·j &mQ‹~G¹"×s8i­OÄsbq“HÓâê**Œ5£Ø}2Iv$¦„43Á(‡µÀ^|ñÄ]´øñóýq£Ã"a¦t-Ö$&]eN`NØâsq{+ˆ Þb‹‹„ÂR3=XAÌPÞñ ºgpÌÉ+T7ÀÖĹi-ÊЮߙI7Æ\ᬨc.ú¢#(•Çüà}ïQ ß}Böéo• £œ4zaL\Ý$*ÇÜ´Ï+#{;Ç|F{âlf˜»HsðCß‚EuÃÕKq¤Pnè‹¡º‹N:ÅîÕœÑ1§kaç˜ï”¸®‚zÎ?,x_ee¢{¤,æG4ŽÌH÷ä.zeûàÙš0ãæC»~—à%Ïuø\xNaîÛèÉî sáy@öÉDÛoó¿bHÎî¤}ávq똻H¾¯ˆì‰²³X/͈³äù¿ ´î†…Bõ­ýýöú¯ ôûð ñãF5ÊmJ%s2ömí›Ôæ0÷Â,¿IÚ…vTº}4÷¦&ñ±w¨ÇÕÖ¾Ó2šÖÅc†ƒBp¡È Ù*¶è´à[ÅœÈ¶ÕØUZEv m¶EÃÒ 7–Ë ]bv[‘æ‰&ÏFâ5ÊYöNÞ‰=aRçàîB¬kî[@é[¿Q€¨}QTõƒÌÉ2sÌÂAèö {%„ZáªR–B?¸ SëÎ1@’‰³vH,˜?æõÎ絺!¿¿ÀÜq?b"{°zXÔOIŽ·4†=Þàc_ìûÙ)ìÕž%›î;—à‚a¸Kg1SœUTÑ7µ¸³[‹rîcOä@œLˆóØ‹…¨·ÝA|ª  Wã®%b*ü$Ž$l\´È÷±X;æ8æ‡Ñ€xqÐ#-~Ê¿t‰Ém²ƒû“±¼rÌWdN^{Ü›š8«Ì[£ŠX‘8¸è¯ ôûðgС$r ¢D"ÎÈ:!œ¢Å¾n×tNZH;çì› ¬ÅÎh~0qލ¬ Ú ဦÎF†¤,~È·µ §¬ìMœ3FZÎ` PDg¨Î<…0ÊmÚýeUöÛˆm‡ìZSÑNz‘–6ùìnBr¢É‰¸H¤”¨¤ê·+oéèÄ#±'Æ)a6íÝ\è@ÛQ 3jýúÓìŠXÔEmzƒ9Ygd¦„S ì…x°n%tÊ"yæ,¾ñ„–ÈÚYM È4Æ|ÆÎÏÄ–þVšÞ5—‚xaýïWºÌ͉NÌ@g S{Ì‹£vÁ‚y×![ÏV[¡¿À°5¼/1¯H•ÆäŽzCG–‘=1L‰ÓY.rhG˜ûBáËó Ì1Ýc>3ÌeF8Eò^û]’“N™G_€Å&ej¬LœüÉŒˆÄ´vÌe?ðܧ^Ç\†‚xT8dt¯°uqΖò©ó\h:;ÞTÄNrÌËÏSÁ<#û4#/âöã¦æu®¸¾²ãu}C>IëæQÄ8%N“OÐr²ŸÇó0‘¯ ôWÿ’ 栣ǣŠ)ÊŒÀ”ÜÕ„c Ýŵ0«`)Ú»ç'+ #­¦ȯAža²…tB*ÐJL(bðÖÊ™·´ÀÉÜ^a£ýUΊžV³©™Ø”C^ r…ô¢1AÔÉ+æ¤ V|v$h Ç3lZDµ é,:‘œ¨4±¼ªHµŸjàçì°ÁÔÄ(GBÓ§9ú.·ãÄ nnä #hоkH4šƒnsçê¬Ì¢Ó‰u+3=±¼Y󢆷æDžÑÉfÀ‚|àQ3ŒÆåZíÄŠ`ôH(÷Ë¡EV>JŽ•üžE/ÚYäà¨"‘v -=RDZuzM,ü,Ó£/ò§#è,s 1Ç<Ë”l×0ïÜëaZ&Ösaj-Á|T[ì¬ó3¨ÏÉ ‹4‚Ô«*E¢`ºèÏbîóôÌ¡Flб pT0?ïFFÌÇT‡dD²O9hÁ\Ḟ‚y@ ÞÌõ(¢;³"A”Í(δ„Ð̽Hëi|¿xÛWÁ<ìÚJ âi<ñ:‚LýÆÒ+©i…Ð ×Dzt<í9’ŸybÏ‘f…U4ÌC9ˆÅq—OóBÖ« “ŒHoäM¡8ŠP!6Ç=€¼ø'1÷ûh¦Ñí1_>|”£×¬BÌ1^E´vŽûb_e‹¯BÛa>‰»/'y<?Åó_FÐ?‡gLq+0#¾î'ÛÍ5¹u‘Ðj•q >%8£.w¹8œŸ!õ «LšM@u¡ŽŠT£X\‹*º"Ë —«ËPA‚ÜB®)Ÿã´1Ãì䘘o`ùɇXžR—Ü(eYÁ~=2ãž, ^qÚ"©…+¯D ¥‡YÜ2s~T!utã’èÒ¡t„ªA'%]Šmc4ç¿<£XxÁjÄÜ0TÔÚ¦äTÌA[c&¢ÂóÎbL¥CÜWì 왋D½Äê¼Öh)JŠ‹ÔA9ÐÄþ¶²2lÄ\ó´õt§] ¦ÀNv ù±ÃÝÁ¸Ç¼D×1/-Êêi!µÈ²+Wó}2HÅü¨BëèþÆâÌv"Ý¡U½顤Š@ï1åg÷¨ôz¯*<Ϲ&˜wF…°ˆÆ~ Ž7DŸ<+ÁÈ3¨—H•çIÁ¼¥kdÄ\ gÙa»Œm2¬2v™¡É>h“Ìy¾|‘çÊãì˜`§H>ñƒÑ.Ðv-ÕQxÿ‰Žï0ßz@"ywÃ{öçE¤Gž/Eèèv7­t<Õ1v %…Sì ~)ÐûçŸZyð;¿ó;TUÅŸýÙŸ½ø‰¢¾–=Ø. æWm¦d&¤!;C:¡fÑ8(9Ðp…1޲ž{Îóppažd°I@&ê$®ËëºX€·qõ~Ͷu†«L>ˤÊ Rie{±°ÍÉŒÀ!Ø)"/òMÈÇ~ £ Û ‘´OqŒMa‹Œ­fãÇý.z¿eh Ì+´rÁP‰¬(y鳪L¼áB! ÑbÜFŸRß•%Á®¤ßÂYë“€ZC_<•ÈJ2FG #Ä„Nö…+ú±hu­íK«æI€Òû¬TåÖ2!÷>¡˜z¨aqqc*=Zx.c—Ls‹Áy=q¼¥) ÐÝm1®[áùàÅW6—‰TC2cè ­Àêk˜[퇢`œ€½ù&šO°<¦õÆÂáµZÊv‰ÂsÑ [$8Ï‘‘ç­ûz„ ÕŠÅqD« %Ì ßñÓ¡a LöZÚO¥•$ì¯?'Ï¿ª@ÿ¬•WñÁoþæoò7ó7ŸýDUˆqA—z= JM6'~îÜv¢^\ˆ1—¸Ä¸(éK¬ÞÀDiĦ™&lš`ê‘\j´d³„Îü5¶ÚŠBF=ÉL3ÍqÆf™Œa€acäK Ç‡P£6óÚºÜ{ Éw!Òå†MZ’ßqy‰T"E»”F3A;ˆ[4n!¬]4â‘ ¬·%0 +T#³ÃѯãJd+=ê ªÐªF&ê9Qñ4‡c{-‚É1§`.Þ^—iÈC$—Qfíi„„”(î ³K7:â«WÈT±i€i„‚7å`LÒŠ²5¡5¥7a0wßC!Æs£9Nä¹1cHŽyºøô­Å‹UCLn‚Ý»ƒ¦´Ñ1ï²ûcƒ "D*&*LÄÐÐî…"lv/ XmŠ×UDÊkvÝy±`¾¡/7—ž+¤‰^¶1‚1/DÐ^ 4D„Іl –+7º*ý½“ÊXˆ ôŒ„°Äo‰—P]@µvæipÜg™ò$b“TZU¶Yh‘]3’™K!Mã<¯<7-<ßéªðüÚ­Å»LŽ0¹Øm4ß!ç´y☎CP„ B-#æ~V‡²°S ¿‰åoÙÀf‹\d$D?µb~ì…¯-S¶2 ømQ«md7œ¥P8òü—ôþùY+¯~ðƒpÿþ}~û·û§ ´ˆ 1ºà•H.”_B£!Ôƒ F˜Ç"ÎdF硌hϘçYFæ‰Ô†&° ÊÊKS66îìZöó`Œÿú‡uæàb†ÔýÒs#×…P”9QŽ1»E–Ûlì¹â2Á:Ûî¿üEñ ÀD„©ÂLs²ÐM„Ø"që}«qƒ„5ôd™<5*4Ffó"Ò„DO É·¸4ž$…Â’æÁ¿‰sJ«WhËÑc¢Â"ÂcFBYc,Ý€G–Øl@¦6Ë0Ë0K.Ê“ÀF+SV¦ÅÞÅ¢E>ƒyCfFâ°Éœf¢ÁÐÃÒ™‘F±0?s²cv“Û¬ó)WRs™<ڕκÏbS™ s23¦!ƨ.®!¬‘j iã…Ä*@Œ„P1;.ØE0*=³û#3ŸB În¡*#æJ¤Á¤&¥àjoEáùLAÖ˜ø¡(Í›õÈlæX0¤ÉÀV•¥)+”µ)›ñ`ü)˜×V0¯3G7Œ!õ×xÞ” SÔœçAŽÀnbòkN¹Ê5—ÙËŸÁœŸ‚y˜2דpH -¡`.у†c([Åü0‘(ÂÀ€HOÚÔž%|Ç<4±h}~žUþY+¯¾õ­oñàÁþàþ€oûÛ|ûÛßæßøÆîó.–Kþúþ·X_øê›Ü{çMBésÍVé+Ä„i„9ÆL|o ²ÂXBÜBmH!¬Í3y’èëÀJ”+S®,p…²DYа¾&Ò{/Šq-q”3§Ù¸13¦7 ŸÃRS"hS„† $;¡—¬mÆS8ËÊe ¬³ÒeÜôÉË~ÔÀ˜‰¿â6 …ƒ9Њy˜SÅ!l 7`kdÓ¹oå†è³ùØØHFPIhmH£.é§Ds!¿ ÐÞÒxMœ{,L¢Gr3 •5>m¹ÄÂÆ-¦g±ˆs$O]Xkp¼Msq‘^¡lð›õè hjF3bž2'nÍŒéMHÆðRcŸÂ|A´’ÜàÜf<‘ÌYN\¤È:CkF6A¼g‡ùTa®îr ÌaÁ,ΨÂPn1üXaÓï‚ùbùV2†ï«ÔX!µ"cÎõÜ¿†’NÛß…àk÷ó daºÃ<ØK°%2Ù`µ!3¿2ÏäI¦o+v˜/EYš°,‡âz‡y™Ø6CÉÔ8æ‡)s2ÀÍ©1;õtÒ ˜3ŠŽù 7ØØŒgdžçÌEÒ5èúº8‹\ã¸p ‘ƒPx%(Yy0bØv°¤ò Ä1woó †1  H]{]†l~ðÞ»¼ÿÞ÷Z.–ËÿHj÷Ï{þUúg­¼ú½ßû=>üðCþèþèq8::â¿ûoÿlêÃuKŒ@íé¼Ç1•z°0#èd±Bªkð¨yžÉÓLWV¹´K‹\ÊÀÊêñ¶)K„UèQ02!Q‘˜Yâd0nöÆíî6ÆüØH0Œ¢Lv@à˜+*HÇ#”§8ÏM¶rµt )B!E Õ=Žå0Ì˜Ç uœ{º#®ý`j[dTÞ=›ò⸕Õìb16óã߯çæ"„ä“»€`DjŒŠœ#:–*À ÷ÛÒÌ×PuþÛ7‹0ËØ,ÑV‘µ¦‚yp¼E¹D¹2)®ÃÂ~ã o"0„LMbf™ãT0ïà剱85úr(ææ Á¨äK›p_:™ò”ÀyVÖIé²`V­_ ?_, Â¡ÂQ€C Ƴ8¡ sêâd ]kCªH¨s1'#2 ÑК²Ì¶¤9ü²_Å´+Ô ‰~_ËJNBNPc^0Òùÿ7Þ6G#»Ѧ™®Î¬4qia‡ù¥(—Vpgä¹ÌGžbFEfFæ(7{¸Ýwk8("ð Ç9'’ê@<€ê&sM§0k ­a[Á¦†u€«—A8Â*›G!pfÌbC§§>ç>´°qòV10­&¡Éº©…ñ¢ç³}4çE+bQaVí„" L‚ Ú(Æ©{¬)…Ày¦¯›¹´Ì….$pnʹ®¬*1bÞ³¦½†ùú扷œô{̯¶Æë£94†II+˜sȹ4|(-$ðˆÀ™R­ÄC¨¡YÀtÓ LØ6ÐVŽû*²`¾ ° º`~#³PS…)¦ käæ1f‹ÅÈ$T´ ޹ —{Ó.‚Æ[-@Y婃ÿOƒ0£’¤X®Vƒ'pgfÆÐdÖa/ÌÎs]™ó|IÅŠ ëÂóõ§xÞsÉP0?à¥Þx¹‡«Þxµ6f‡0LmŸâÈ‚Ð1壑ç¢<&ð4WXPBsÓ™ó|Zx>r}Gž³ç¹ÂaTÔy¨©âÔEZ7Ȱ-c †È´  Z¢èä7Æ*úd·_KŠãÚdãçäùÅl³qòÑÒ[lä}²u0¦@-ïÇÚ"urqžFÒÔØc)™ Ëœãâ|i5+*Ö,^¼âQ³¥ûÁØ’mMÏ;gmO†Çœ÷ÏyÐ_ð¤Í\nn0^Yy Y3˜˜1ÐpŸ²å„ûØG†ñ–2»)ȉ·Œ2g7ðf,¸‡pÇ®) “q:Vü…£9‘IlØò¶°5¤Rê}(¡DÑBB‚!UÙúR W;±ØU¸­`^cD4»+[¥Æ$B•„-ƶ´rdÉc[e®ˆ\Zډąլ¥be 6x‰§}DSv˜·k®ØrÎÚž0äÇ<žó¨»äI7pÙ]k¼¶0l I ²Ä}+>¤å‡( <åad¸‘‰·ŒÙ-AŽ¡.MÞŒ÷~‡â” Œ­¾&B+° B„.ÀaŒÄÈ$Öhœ€®½r›‘:P…È$*†Ò‹ßÆíb:º¿•"ÛîP,˜{ÿ³óÜÒói„:'Ç\¶„4Zê*ÐÆÌ "$ÎyY3‘çbØn È[ŒWl(F10‰5áÓ˜Wº Œ+Í:ñMýÏôÒ1õ9z~AÚ[È|Ô<†¶²Ú^&A¨$#Ù7VZ|sóÔHXKæ’Á¡\É”­ÍHì¯þJ(_{ì¦ð&\Ï„ºH›­ð¯ôKh‡Oh»Y¶Ÿp¹]Ñ®}¨ãpj¾1;‚ÌxnÊweÍ»çJz%Â+r/‘_ªÈ§0¶èîúù¯  ‚fIö[Ã`=N%HQHBÍ,B¨÷F R&1”Ö.!“5¢ËA^”õ4‡‚ZnôrUÎ>Õ7b^KF¤Zç‰"ÓÀPk5®ðñB"—&l™’$øáZ0÷z¾£.RŸÍE:³%³vÌí99=¢í?¡í~Âyû1› Ûµ‘’q:Û‹E°Ïeà{¬ùÀ'%½ö˜ßŽäÓÒ¢;ãšPøˆùn¸Ð¼ˆº3rKÂf‡¹8îA8ˆ5³‰#æi ­GuuP¬t  ‘ŒÆàSþîõZ6xDg#ÏQÄ*ÌK~^6Q˜äÒ[HëÖŸcžšÌ:Wæâ|n‰+6LsQÿÚ¨·tïšÍ|KÊcÏóœïx~ÕÞçb³d»1LÓ¤`Žyžr)ð]Ö¼ <˜+ÝݯVÈˉü…ç†Íe×-…ç¼€¹8'“lœ™ïsô%8JʉË‚™y+'F“¢G/65†ÚsÖW¹ÀXšÒË1ßM¦R¡V¡Th™‚/zÝÙWúÀ€o?ôÔI¶sHaø ¹»Ë¦ý1?^ÿ€Íê9¶ÌüÊzÍHt?Ô%ñì¶`oUÈkäõ^°Û™|¤äQœcv–Š¸Õª€X¸6·R6F÷cO­ÐõÞí7XÌÂŒ*‡a‹tU ©Å#:¼÷W48q‡qpBwâìÌC#ª÷Ð uX|èdb ¬Ì¸$si¥4t6Gʾï@µëQ7Ü Þf˜fÌ̶d[9æÃClø ÖÈОòþæY¯ž×Æ;µù ²Ô¼Ëš¿Gx|*ðåˆ~±BÞHÈËùnM>6læ¾>LFb IDATKåjÜ"ͺr î_Ò;þR¦’¯ï×¶ Xˆ,b$†’ON-ÒA¨Må=Ï€x›Øˆù.‚–šw€c>ò¼R¿X‰øTéˆ9Sc¨Œ5ÆÆ¾e§coǺòžm«®ñ\Š]kÞó\†r0®°| ±á>Öß#µ?æ£íY¯’WÆ[’©,*[ð][òÁxpòv@¾X¡o4ðJ"ß1ìXÈÅåà:Ͻ7ÙÓ»¶èݼìrö}/\¦b6!å Î ¡òÖÇÜAk„¨Ôµb¢t˜ó<Š ~Aÿ<ŸRéöÛ  ÈÞ#«"TB™F² 7¡r‹Œ¥— ILQ© æF¥BSå^C6ÙOàñ5q”†IÀtNŽ3¨1½‰Ù=ØÞƶ·ÈÛc>Zþ{Òå'T]ÏAôú©$¾-$dãF0È«Üñ·ÕŸÜ3ô? èW*ä͈½át‹,“£»å9ÏË`ÁuÌ¥ABƒLT|¼]sƒöÁ·¤”ÞûÔùíqœ7™ž£ɽc^ •*ñN ÉÞ‚Jéõqÿ=¿˜=’/b9qK{”Be†Hy’ê@` l:‹ˆÔNR«Ñ¡"´JXaie=¾Komȸ´£$ë¬÷÷Hàl`:ë(oøØlža«)]}ž¿Ï¯„Ì6 ücsÆÃ/þFƾÚ!·ŸÀq‡iBRÂ̘¹‚Ÿ‡Ñ–T˜”× e†P<˜Ãœ0s`M5¡„Þ·´t¬M k*-¢›4 1øõ/•cëmÁ;”éý¡h%à Q¼Bnš æ‘!ºP¬®DËÁ î©"¶Ê°2´¼dé@d\ÃÜZÛy ïE c!aA!ž`Õ—0›aë)— ÿÏòii!Á&K¾UïeøJ‡Ý{Šõ˜XJHN»×P¬xš`E$®a.ÌP™¡,ó8'ÌæE¬C1äñ[ÌÆŠ`„š*–¼rê‘s·Uf$¨ßÔ ö‡âžóJ1*˜W"É1 1ÄÀÆ|÷@g•š[C°Š0Th×0ײFSJãÉŽç-~0Žn{VÌÔs< Ԃ1ÃV\E¾}ö#¾<´49ò=}Êǯ'ôÞé±WžcGOfæ„åÂsüÁƒb;b®ÌPïSñ¾ê0'Äa6CsCè}džN¼qçù,TE¤äé}ðÈo.æé³À‹˜¾ôùS elæ—B[ÓrB å·X¬ ¡h«)Æ„ 59U.`!¬\˜u á *_wG^yܹ*ãÃ÷y¶Ðm½“I;CS1³‘ìïxHX¬±æeL{Þß´°ý„>l¸ÿúÇÈמ wZ, HÎHöV&-×ÙHMm 4L˜2-N™1eΔ æ¥É×|)NàjN°©ÿœCðÛ^w ‘ÄóÅ)£YˆÁ#ÃÆÅËeÈcŒ$Kv aì·Š”Y¹ª ViÁ<Сd&¨T„T“†=æº4ôª`¾‚¦¬¼³‚¿­ý•׎y¿…ªõöP07ÉȈ{H*¬¹Gª>ZulÏÞ‡úœÇ¯DúÚ3½©ZÜ$%!fHö¾ê@À­ß'Ô44L˜´gåÏ)s&,¨™ûº)挛ãCX qŽNsí¹‡nt¨ÕH7¸§t s0¬h²”‹Šx>´à®e+Œ• @T|ç¢$·a½ÆóV”lÎó"y¨^äù„%Ä¥cž æeì‹<ß@ßmYìà˜{ŠÀÊá`1`Í]²þ*µyûc¢nxÿåѯ?…{ «;d([[ósµ@”šŠ†šIAüEžOÊ«aAżðü€À‚ÎõÉ„0T„.`sïöªBápÎHÁ|WxUüÍ)7Á_ªü<ž1/ ¥ Ì-(U!˜1†vV†é †2Ê©Vú@Ú aaiî¿¿†¸‚Ù ÒÚ_ýFè6°ÝÛ ¬Ö°ZÁÕ ®–åï\.aÓC‰2rÞ«›$’DÚx‡Çý}ªxν›O™ÆÍÙ­ÔÆ†6%š0£á€Ì9d΂ >tƒÛþø`»è¸kG&2e Ò¡lQ= 43´ž”ÞOaH^µW|Œ¡ê£¶Y\,Ð1Í¡%Ì1T2¨ZÁ¼,/¨”̧-Íï›!WØÉmÁüʨ|fˆj%LW7ư†~íßvã¯õÊX®`9b} ûMg †ìX ŒDR¥'œ`öœÛ§—4:R.­UÞc®&sej52瀇Ì9`΂…ef"L½›º$à 撈’ˆôDZ‚š¹ÛŠÌ[“HCÉ*ed‰.»v»R”Ńï-T Õ1Ï=Ï žÆHÑmHW Ës¡ZÓ"ÄÃÚE¸Ýúk³õ5ž/—æ˜Ü×­—RÙl•­ðœLÖÈ&Þä*~DoñÊí4q ¤x”[®¢¨ Ñ„)5‡…çþÚó|Ž2A™Ès/mf‰ªxlZ‚ÎÑzN¨&h*˜e©øx0ZÁ<ÌG _¸¨üR >hÉËéØ F£ JæíZR›¡SòÚ|:wkL¶€§MKÔ‚ß"Å'½Ž],‡­\Ù˘êªüóx#=!ä@ÊËüŒËôCžž¼Ïßd“c¾ú£çÜ´5G“Àâ¦_e³úu×û‹½ø3ñË#s3æâÏ0ÜÚßv–ç¥þî9S¼¿Ö¤+Ípâ½¶2ê)k$)yp¯Ñàš%ã± t<wyhÙ‘w¬ö›@qS! BZÒô~l„±NȈkßjÓl½À#YÐ9–›ûn¿è¸¨cÃÞMt‡9û)7ß!íIÍŠåÌ2?çÂ~Ì“ƒñ½; Ïïðöžò[Ž&Âü†";ÌKD*צ5±"þšSìæ»°`X.ÓÆ¶¤Ýª3B=%T52(yðLŽ˜“vé ÿlÍí󡎹^û8ˆxþ^Ä\Üú4ä€uZ0ÝšcÞ ’<™0¾Y®7–†ÔÂëÕ§þ¾¶ôÊ¿_S4Èæ˜§ñôøÇüý± g§¼ó£57Ó%‡M`qª„ ¤k˜‡OóüÌ)¹t—z’/ìnÎc½$‘=Ôp^JB%ù"ŠX£ƒó<ÌCá9B¹-ú‰1ŠòçKœáU Ëʣݟ6^½K{PLµŒbû:M^Äaƒ/LF(9k †h•Ò°ÉP:4Êÿ ²)ÉÉ"½Å`·XYËææF™Ì†KÖ|ÈRþÏåïh¾ø€åW7\mo0ÿþWˆ÷[^ZÿW8Ýdo‹û-dg”ç6ù. SŒ&gBŸ‰ÉÉÙÑT) \e¤x(S+I…#“È´%•lhhÈÉ£¡J‚SÓ¬ðuLs|Z,FÝö‰; ÁÿÁTË(¶;‰YVlôê M%Rˆb×ðöÑEcðü»•ùLR$ Ví¬Ÿ[ƒÁ¤`®$2[.ÙðWò.gú4¯ü„˷׬ãëÈw¾Êä£[›pãìcNÖÂÁÛ>™9Yìí.¢xt2¾Ìˆ[# ™­˜'zôêK8FÌÅ}«+eç]’sóˆ·nа᳘«¹øŒfHû Nvš¡×Ò2b.`AË{\ZærÀÚ‚ykn€hEš­Ü^ÀüÏSvž9rµçù¾ àïd6vÅF>f)ïrV}‡æ•8{kM×¼Âúâ«LŸ5ÜÚ|gqº:ŸÌœ.œ;¡ð<4bLËø~Õa(¿ÆsÕRH•sݪ@.9åD"K A ­k$º A2P ~É Õ±¾ÃõØã—ôÏ푽`Œï(-VÊ)?(ÖúpÕÄÜXfGViA6˜l±2ùæ-b=b 5òsÀrM“kf¹æÈ"Ù”Lf`ˆg¬x@% ò.©þ>o>Ãþ‹Ä¿›X¾NwöjfÝÞû{¦Ë˜ŸegÂâ9ÌîÂäD¨¦E ³¡}F{¯®KŸÑ”Qó"‡–Ò€L™:dªììÀ)bÉÒ¾‘FÕ{ÇÝ/& –=';’ô:q?]ì"êÃ3F(-€Å£x‡¹4t%™¹Åtƒ•ɷ̶àî˜K6ÏÑZp×¶Ü0Ë){p&Ó³e#ÏYË–|€Ê»$¾Ãðå ¶¿1p~R³ioÁƒW9ذènsðÑß2»ü!ó3qÌÏ„Ù]az ÕÄÙažÑ6#½!ɱQ1/´V¸ÑÑdªŽýT¨&Ž7µ’‚±î³Ð êC&)Ìñv6ÛÎ÷¤¾v(ÚˆW ÃT½î¨ElØo®n²¹(K.x· [L6dq/˜_㹚ßþ*«°\3Í5‡ÉxäÛˆ±æµ|ˆò.©ú>ýOØüúÀÅ©ÒwwáÁk<<_ðëý=îÿ;fÛ÷˜ œ ós˜ß…é)Ä‚¹^ǼËH—w˜‹˜×¨+Fö\ŸIqççùg0÷ÏñÜ\DÚýY˜¾ž_\æ…zGZTŠ5£¢¦0¸ÛWeþÊfÓ-蚬+·êlÆÖ÷1°¼„v¬š ËKäÉ bc¯tÆdCà9ŸPóÓé{ä/^"ÿ~ò†òIzøéá=žN*òð*‡6gþ¸b²þÍÒˆÏ Üõâx˜âœ i³W=º½·¬Lý1¯á`ó¹¿fŸ Ÿd®ÈLaïÍÁ…Ú ¨ï’’&€Œš FFu(Ê`ŒùþkÁGÏã.? hèl\ºŽŽ˜ËÓ5è ¨Ý̉bbEZB·ÄlU0%KRƒåµ ³ˆÿn‰<'ò€†÷»ä·7ðŸßVžmgHÿ ¼zg?®°õ8´)‹óŠÉ·ÿÑ1ñ.ÄÓ‚¹2dè æmö  ìÓ@ ™W°˜b‹92ŸÌë⊨°pÁŽ(qj‡jíÞé¤ÃÄ1sFŒw˜c;Ž;Ôv sß”@NBŒ˜¯a®-ZHkLWX\;æ¬ËkåÂî ®VXJŘ_aÇóµ1-½&"gT< –˜ê»ä/-‘c<ü’òt¨IýôÕ—¹ÿÝ WT¼FÅìyÍô;?¦^vTÏ…pO§R0<ø ÍX— wF²‡Ø³ˆÍ§Èböž3St®0Óæ¶Ã¼÷Tþµ`DE½‰ 6ry—Îûü<¿À½.ö‡”½m9“Šؤr j‘Ø“§=‚;˜YŸíÁJÎ.œõðä {t÷—°Àj,7Å¢®ÂM¶DΩxH3¹o¬ÐßPò¯ež5ÂYW¶wàÎm¶ÇçÏk*™°Žé:S¿ûÕ&Î9“sX1¦/æôƒB\`‹—‘ƒ;Øâb'{ÃyÊÍaD}è`œMNÀ „FвB*3¸ÐÆPZ×F‘¶k’À5%ÞÉHÑÏï ~Ì'Éã^óFÕ2¦Mì逕Oµ2iãôuÙÒq6À“+x¸Ä>Ybë³ ÒËnª?b¸ ’äêcì -úë‚ü†ð¨1.»!Ý…;·¹˜mk~M¾ÁœžÉÖh~øÕv œá˜Oð^Ü>#ÛŒµ`½@µ@÷`qobù¤lb™a»íà>t/ø‚O¨¥@¨¡’F){-M0+˜—ˆÎ^À{ÄüÚûPê~=/Ÿ›Š§’PÌÊ’ÐÁÄ£I+<ßͬïv6À“%ö°ð|3x›an M®ñ¼%È…ó\?ÄÞX#¿®t_3žÛî˜îÀÝ—8«'<j&s “•Ѽ÷UÛÏ@Žs${àÑfO€÷ q^x~nA:;ÄÆ1O©'-Õ¼p![ÊR[E':jÙ–î©O ê¿ç»ƒÑ> õçîù\nTùÎw¾Ãÿñ£ªL&þäOþäg|yá/d„Ü£‹®à8Oj˜ÖÐÔ0¹Ž¹Ìí:æ²Ç\>¹|óŸå¾…ù#æBÁ\_À¼-xo¨ÙZçüÇÛ@«ÉÀ¬8:ê™ßê æ,z˜lá½ ¬ËXëÓK;Ìï@¼'ÄW!ÝtO’=æ·à¸bóÄ'÷ô~B'„Í’ðôYÑL“˜¼ ¼Ý[äîMÖý 6×1÷"UpŽOÇ}RÃ$ uPe9Éy옗îQ+®×±Æ~Y$Ü??k£Êø|ë[ßâí·ß~Qœÿ‰gÞÛˆ¼ÒmjeZK,0 ôTô¸ÝQG¢e`CË’5W̹¢fЙ7Ï-踽hyuÖrcÚÒ4-X]µ=´Ù÷ŠÆŒÌ”8;ò[Y8ô7<Úúc8:A¦@ôd„j;—CM‘n…ôƒ§*ôâ«À[XøUÚðEUGܯ#'Â2ƒNŒúؘÝnÂÁ‘g;¤†Ùmñ—’Q‚Xé¶PñÓü,°EFÌw!´•J¿’Ìï½TtvóTŒCW\Ù‚+j6&´Ö’8¤ç¥EÇ+MËK‹-“¦k±®‡vÀÚT07d&Ä…¸¹Ô ¦D[Gpt JY˜Û)ÂÂüæ=FDÂ1_Ax ôWYëy\ó“®âq—=„‰Ñ»ûÝâ†qx$ä9^¼*ƲK¹ý̳íL¯Œk9ÐÿŸ˜îµÚqwÌ…dÁ1'ú¤¼e:KlØÐ9æ\:ÏMé¬#sÎB:^š·¼Ü´Ü>hi&-Ðb]‡µtÌ1Ÿ qcA˯¨Ø”ˆóœ¹¯ìŠÀÔ¶ æ3¤½rž1=BªW@¿„鯲 _äYu“jåqã{˜¥1ªcav‹ÏóÌ1×8v3LË!EKkßFý5ùÿDúsó|.7ªüå_þ%ßýîw?³Hàââ‚¿ú«¿àwÞáwÞÙý·kà1IFÈ¿ÂÛ‰‡Ò34–Œl‰Ì!)œ2ÔwY‡3.øˆK«é¬£¶§¼a¾v²áKo®™-[òã{”!”MÚæf:˜ç#CP¦µ²@8`áU¨YCµ€ù¦uVb¦tþ—-–äšnaùM¶òïÊß ÂÇ3£=€æuãèKÂÑ+F}Ò‘&¹Näâ±7xðŠFæz¡O³6c?Ý…«Œ’ÍsÛ{̽4bny†É9ž2Ô÷Xës.ø˜s«éíÇ{ÌuËW7|ùKf«-ùÉ€=ÈnQ"¦n•‹ñª*ÓJË\åÁ †m‹…¯>¬²ŽS^ÃÀ çà ɷÐüV|‘”c¾•÷*#½ ÕÆñ—„ãW¡>íÉ“Ž\ XôÞûqƒ2Žùh…ï#)i ‘ÝÑö/ ±] —v;3Ç[Æ}UžS‚x~ƒ¡¾Ë&œqÁO¸°†Öz{Ϋ²áWŽ6|åËkšÕžôä‡Vx¬ÅµøÃ¨ó|^xÞÌYDÇÜ Îň)¤kcõC›#vÍ_`ßä‡rÂ÷‚ñAct ¨_3¿(¿Zx>-šÛ~°¡}|I½Lù?û%ÿk˜ÑÿZäø¿4Â;Ï™Ì?bîÓésfyE¸Ç7 &C$¤µŒèèPç}Óž,.ÅAäç–wóîv/Ã[5Ìwa–°k˜o6Êñ…c¾½2ú¬lO&l^¾Çú '\ÍO¸È™'Ã3ªMÏeJàܳCnŠ0bÁ| *˜ÿ¿íÝw|å}ÿÿ×½ÏÞG{Z¶µlyolÀ#`6æKÈlhH›†¤!ß¶iÒ$¤t%@B³HRRBH #`ÀfØ Û€mY’%K¶öÞgŸsßÇ68¦í°Ì÷~þƒÑAèÒÇ—ÞºÏ}_×õÉÿàŸY@pÖM¡óÆy¼Ìî÷Ëß²3_OiÑÈä+å@Ì X)ÄTÁ0pë2®¬›¢ThLÄ3eñj³EÊ Éù ±å+˜­vÃô»gwQ1m1o ´Ù"<æ2¡Eð (³ô Žõ"ô69©ô¨´¡"Šù‰ð@eØÂ“™DL÷béP§b•gÁ-¢ÏX¤&ñ†ÈLO0 L°WK2²&€zµ¹®M<ˆSèƒÁb+@½¢4£¢Lg:‚n ª‚KCp:AUÔüq•©s6No±~[FBº IDATë ä¯ëÌSkÎó‡ùZR¤|Í…TÑÐqådʲn¢i?ѸŒwÒâà‹!$çi$–-!^ãb26Íþ™ÝÔ§“”Ž hƒÜ,C±êQD‚Cz†O ô x&TFTN þ3aáòCUÆÂ™@H÷cYÃP##T(X^cÖ"²HL ‘‰Óo¦Ùï§w¹õz/ò‚N4é.ºp›ÄõfˆÒ¬‚6£!&rº‰ ‹n-ß¿IS AÏ´®ÞÉš ù·Š–h"H9,9‡ eÁJ!¦“`dqé2e97…™ÑÄ©š·Á ,¬q_¶”x¥F65ÍK3;Y”ÊR2n¡ »ñ˜ËÅFÁJAíCè?†Ð'ã©sPéÑèÜÌœhU¤2 …™bºSƒ  RŸ€³H-â™Y2CãtYÓìLnÐá(µÇóóœ.œVŠF+Dƒ¤"'£L9:bÎÈŸëìVœNMEÎï6´NÏqáõ# Î3ïé€>ýPÅ”8u:¿ÜÈ<µ¼Sð˜H~fbˆƒÓX3qÄœ‡ŠTÁd ¡¤Êþ>_³È½da­.@¯¿”ÁT-}-¸:5<³KÈH[É KpK\ê4×IëâPÒ€@eÐI™¤’“$E¢n¨ ™¸2c˜Ù>¨wa6åHWdIzEbS/‚x"Aìù.Žfúi›çAÜ<‚^ÜAÎ|Ÿ0ÂjÓÍj3D}FÃÑŸBñ`edLWË_Œà  ›J¾ù¬ßN, §Ïr8½â…·÷ÂâÔåóé{ÿ†%b(¦ ‚ËD 31œÁšM ç\”§ ¤Š‰¤œøûá¹W,rû,²« 0k·q"s’ÎdB»€ß¼€´°•M¸.m§«Q>‚Ø×ý2Õ'…ãäkñCµa!gú±ô~Ìs‰‹te†¤O$1 ³%ɬÉÌítZܨran› =FÎ|Mìa¥dµfa<…w(…8âÁJJ˜îøK°|~ KÉo D$ñõºŸyãrfn¾5ýy‹a b~W©Zn9 cùãƒ3Xñ$bN£4UH8YN8®â›„—š-†÷šè+‹1k·Ð¦·Ò?ŽÐ¥áM,%#m!ÃR¼b—ÃéêEt!ôÃ=¦RU¡Ñ)ºQ‘@–P<"•š’êDz† ÒDor‘ž—%éO’ˆÃl‰I"5Kl¬“–Lƒ‹,ôKg¢;ÈZ¯à´XnyX£‡¨Ï:ð :‡=XqÁF”€×aj§6íäç¶,œžósnaÆÿÈ{; áÌ=?±LÓRH› i$’‚ANI!…t|Þ o ¥¥k¼W²„¦Dád¥“ž?™åÐÁ“KL.XÄááv܃Õ䬕Œ©aÒªEØ!P ÂÅ™ya`ŒòzUcÒ’A–(õBPžBÌ ”+¤Vxé-×yÙLqLw0-³(CtµŽÒr”ý}m˜k,¼îŠf[Y¢%Ù úY’€¢A ¹Õ5V€!–¡‡‰‹$½*†$¢8MÜ ‡š$æÏ àôÁJo×Ûì7:õÿ·ò®,SưL2¦L ‘¤h•ÓHAŸ7ƒÓ;ƒÒr2_óT1MñBÉÊâ.ö¼¨sð`Œñ¥.¦kéNBw1èsEÈjM¤^ ±Ò¢ÒW€fxû)jtRáö#¢€,Q€"1˜êÅ,5ÐWûè)Óy…$ÇLSˆhÑ å’ÐÚMÇH+³ ^W'‘Øa–»Rl’,Ži”:[Xƒ"–TJ:ÔHJ.aÖ”1dÕn·C3ÐäÓ5Ï<|gjΩ/ùû­†%“1ÒÈ$‹œ”B š¸Ýiܾ)dqkê(J"JC¢`¢„’I/žÌrèHŒáF³ Ö°Ÿ6-%ä¬ÕŒÉ…¤4‘ C Öb;B¹/‚S" ôœ¯Rqžª¹H¨@¢,“AÌ `dȬòÑSfpPNÓf8˜°ÀÉ]™DéàpצàÕ:ųÔd“ê§))P:¬¡s` D°¤2Ò¡FÒJ1³º‚!‹(—ËÂá ßóQ<õ3ÿŽÕüÝñžh!ŸùMz~A¼™“ÈntL«¦T ]œÅ_§Ê1K@šÀšjGh§4Ù@8]E• +fF9øìI^;0ÍÛÍã’ÊȲ8ÙšrH œèO L¢qk A güþÙ4óܲ¤ 9$*Â&¾Ì ¢/Cb±Öbƒ=–ÊkBÇ'Ó–†ŸÀ™ì¦¬ —“'žfA|’%'¦YnJ4¦$*Ì4Ž®$B³†5V…îYÊT¸‰~wiUDêв=9$TAB±TdC9utêÊ∋SË÷¤S›4¬˜ÙS5œÌÊN¦œ9aQ’*G Ÿ0³Ç±úÚ(N4I/ Â4X6;ÊgNr¤9C»×¢Ï_DçüQŒùE(A¤úRãH\äžGcЉÛ‡cL§Üë&‹ŠHy4mQŽ‘[¢½Xà9Sá Q˜¯¹à$ŸDëb^Ñ©á]Ô¤c4u±Â’iLKÌ—ÒÈÇ“X-NÌ1¦¶”Ùðrº~fŠ”B‹`Aœ€WG-AB>Só|£½w¼æ†…pfã‡DÎp¢£1£8˜ÖD²Ò Á¢4¥ZŒ <0ÖŠÐ×JQ²‰@z•ºÈÒ©1>×Íáà :B:9W”þº$©ª8rÞ”À¸%°ÉUÅ"Ÿ†+íÆ7£"ªa‰ E¦"*âÏÌb:¤š‚+•WÍ|Í'zb5q‚BµŸ”ûe*§ã,뎱\iÈHÌ#ãd±Õ…5äÁt,c2¼”n5ÄL¡ˆ1–¤z²HÒéyž?{\NµNƒóö2ú=Чû¹!ˆ’¤èÈii¬˜ÊlÎCÒSÉh¡ƒe†o'—NQš˜ÂéÁ<Ž’+¦Ø²„~<@Ù‰c0ðSŒE³,ÙSæö1*‹F((´ÍV s¼ËsÝzÜ^f M¼u ¢E#¨B¦Œ7éCÇ É ËX’˜?Xá™·gÖ ’Žf()y¬˜ƒxÎMÂ]ÁXT¤Õ£ÓÛËòS5º°ú;s¥a!(#xÊ‡Èø‡ÙÓ ¢þÕ¯¾J–£ X±*†¼6"â¶Ê©ˆ¨3í[*qY‡DQHGõÌB]ˆ“%"̓FæT Z·±UD;0@yo =ȸ¯ Ÿ¯ã¢ã*‹†),4ó]zúS˜ALÇJúƒKxÍía,já¯-#*% þ¤ ¢$cIR¾{úéƒãßš[§k.廳«²Žœ1bÀ¬ƒ„î"î(c¼@¦Ý™$àíayÓ4UéI¬¡Xƒ]ȹ2 äGZ6N¨%‰Õ5 3'}:îÅqrë²rGÉÞw%W?„»w7+º8é9LÂY‹\´ï¼µ0ÓÈP€h²ŒJA&˜›&ír’Ö$"A3™ªŒ2 ”`N—à>Æ»ObÁQƒEm9ʇ”èÃL.mç‘Õu||;:dÜ'v¢;Хı²* èwÕñ€îäÄj“Èú)¤‚#Ô‹1ªc^|“E(Viשy®‰gj.¾CóüÝðžhüÞ|AÈåd’xH8  ÎMàè`ñÀB&G9üZ€Á÷_B_ô(åê³¼Ïm"ë ‘ÄQâ´6xé?~u\HÙŒLÝ ƒl,žG‚\ÉÓ²ƒ˜S&[–D+ZÆäp„¨95=JØã@u ¸ %âq-‚s(DáA•ùí&Þ:Þ‘jb¬ýÄ žgò*­hš¡ÔbŽýØÃEfJb¤v²º‰Ž›—Ò¿i2ðoÄáßA-“ÔwEðž `h è/ð ‡%Üî^ d”üšì³zÞ½5¬|·CÀÈI$-7 MGŽ6GðôeÑP“c%´‹Ð{é:Ú+_¥ÄÝÌ&‡‰#g!‹9U:ŽK-:–;轘ˆo# û ©xôÞÖ&È“;‰¹DâÞŽðJ&G¢„Œ2¹1"¢ Á%âçÈF}LÊAœ£…P©i7ðuêxFshÉa^&¦ü†žË’ø}ôʵŒ²ÞàHLC¦=«“¼œtñØ"mm•á'¸ÈŠÑØÅÝæ ë-c¢ ! —;‰OPL ᮹. çd’‚‹¤j ûG)[0†g´“ºájbG+éhÐsÙVŽì§Jje³[G±@’tÒum CñkÑî^M^AhOÞ’)dËF‰É'˜u(Ä]qœáeÄ'‹I¤ ñˆAÁIÆ)¢ Ir>&ÕÚX¥‡dæµZxºtÃ&Jb‹×HD_¤}à ®õО,¥õáùlÌPqà(9Ë@Ç;¤Âî&ñ’1>È&=Á¢Ñ0Þã ÉÊÅ …ƒ‘q»“xeÉÊÏsA|gÞµ¼Þóm †d!‰´D)îc$ãc´¨˜žH/ êNàm=¦þ÷1:\É? “¾õ"öLî`ñ•ÈX=ͬô@ „Cx·S8]KôyNâ“>Âf€€(9?XwáuÓ8$âËÐŒ)·aÉÊ89© WÅ0‘‰pÑz ˆ¾.t³‡êÀ,HÎŒ0Þö/˜K¹DGóýŒµÆ0Ë› Ñ^*"¦.ã…"Õ&Åž> -ÀRdLUÊ_]¼Í3ײò[›MÉB2h)÷ŒÊ¤ác0¥3x’ekO¢4`õÀeŒŽÔÑv¼¡ëVÒ<ÀüWÇ)š^‰_v!ZmèE ‰‚#ë¨1Q#›„ÆçáøUÏ™š å2bMY&ƒýd«4’Ó"Z>Q§ˆâИq„qN¨€Pv ‹#˜R–ÔŸ¯¹Ø«j¹AfÞ"ƒxÖ$q¤c¨)gaÕË$S x•ãÑuô­œ¢¸ðW\` ±úH!ÊãN’á5¼VD,HSâ›"jHh)?–ìÄTÅS«gÞ¾UЧ™V~µ’@GF‡i•‰Œ—¡Òjš]ÇØ°lGg+Ö3z žCG}Œ|ôR^Ÿ¡î5“ÈH~Ù‹è ÍÒ_ âð\ƒw¢ˆ…Ri¸íÁÊa)"!”)ˆuÀâ,³Ña’N #E…|[6—ˆè0‰;C¸gCÔõC 5B ¦ÜŠ%÷a(èr7žèqôF™‚ºiðÐ8Œ65£R!™e¢í»Óõœ¼8ˆ#ômþ1ËÆî";ýL*µ¯‰`,ÎQàí£LЦ<àpc¨Â™¥ç£÷x@çO¦ÓsqY#çŸÁ›j§¼?BïÉ- Õô–bÓÒcxöwrýð ¸Ú#|ë–}‹ª9¶g1 ø ª''u/¤† (¥,²š¸@„…Ñf<Vßjrå—#ÅÑ,7J.CÙ|½<‰^àEHq‰YLMÀ5”´Lµ©#úŽ£¯8IvÝqŒÙ6ÌÃðø ÒËiÜ ¡3ÀG+ƒì  rÝ2œÃi„z“ì86b´ÿýSy¶˜°þ$· Œ±­?€øPˆTò~VîEüp–…ާ©ž ŒÌ#u#8 Ü¢™oW$¼½W§Ï°6s Q#ëžÆ—ŒSÐå¡»3HsýŽû_á—wâøò?sÅðGp·UrLjŸþ:[·3?Û%¡9ïGM¶R¬,¢~¢’K|…‘~”x:U¬Áè%—!Æ#Y^T=KyufIFtŒ¬Õ2Aµ0D GÎKMÆo¹eÝd×Ljµb6wÀcH/¤p¥(ý.Yé%W5IÑ µ%‰Øà"sƒ‹ÞÜ4½?n¥ïµ_Ræïà–‰.ê¢ý;ä¤Ïñ€è'¾`’¦À1 ÆÔD“7j¡KÌ!š §[6½}ò‡1YºHÂ’±Üq´™>ª é8ì¢kë:}ÿÀG7ô¡ìo犡kÐÚJùV³Á‘K3´ìÜFòEœN§ù®Ì1*”"â'B¬Ÿ§áŸêÄJızœX#ËÐK.GœmB‡jd)®Ê`Ö¤}iLÝ&˜ˆNAu¢AÊ’Yä@/z¸“ÜšNrñ6Œ–v„ÇúŸOáLk,Lx¸@È5Y¤¡bQšÔGÜŒ¨:ïØM«ˆ;~„¿cû˜é~“±¥ì©+e¸zŠÆ`+S Œ/d:äGñ8Dù©ù»ã=Ж%`` F™•"t…ú¨q·1ÿ™ZöwUqß–‹Ÿb¹!q‚¦ Åz´„¹ýÊ(ȳ\[Èç\LtøjëŠXÖ¸°ñ–ø i÷$ɧs¤‡®á>m“Kæ‹,* ³PuR˜M504S°ÐðHVAš°‹ãÉRŽ$ᘊò‹O°e6NøPÚÄÁ†yÄ“OCPâê‘Q~=æaßV7mšÍC |Ù÷Q|±û©Wêq …¬/?³ð)fËgɽ(3Þ±‘ÒFFŠ-êj‡©u:(ŽKx½–ãTÓÙx 3c(äâXº˜£I“vÿ4…»Ø6›&²¯ev=¾ý¬_¢2[)PݤàScLÜPÈßø<ÛR‚æÎL½ÀµcR_D4RèÓ5¼à¨äÑ+&XW¼ƒêã)8¹™cn\¥cTeU°ü蚀$¾ý5ÏwVI#Í .2!â¾§¸ k/7Giûè…¨žÛù?…1ÌWZi ªÜ`ôpÇweþù“e$„a6õ7ñ¹Ðu,´^ Vp£ ¹ùXmÑxŒxx’Ì!‰æMìR.¢¿Ø n4•YàrQš’ðx MB$DtAÃm€N3ÖhOÓ’„ÃÞqÂtsƒÇùL ÎÉÍ8ŸIpQ ‹SHu ††ùÀ|þ%TÂŽ/êìåÆo,.b qrCšƒ‹¸ïÂQVWîbA×,FûU„-œ¦4c ˜~t'o{Íß-ïـί:20³&ÓY KèÁwPcoáBzJö°E:Š_\Å®Þ]®0o0JP‹£~~†½Þ%Ìÿ×…\ú9];Ž"ßÌÁC«¹R¸ˆ&Q@Õ2„¯èçpm”#ê*2Ò1=ÞÌÀçblY:LiÒA¶Í_‹¡†Q,9¿×ÎÊnª"Y݃cR¡¨Caü —1a5;B¼ºçoYëÝŒcÁ ¬‰Z4<ó—^ëÅl²Èˆ.: .£è•6ý}–t>ÄSàñ‡ïàš#-ï1áêå)¥ #ú ¡]ôZÖò²°’ôgïènÆovpÑ…”ÎZ9–ã,$§EÐDñ =%KÕ “s£M*¶+L 0š^ÁÓE‡è>ù%–„/A«ûM‘,Mýí¬ª•É5H¨ "K·áÜ¿„+¿¯SóÊ=<ÿ!7{ÛþŒë[fÀÿwLGi‘^afÁVtí%úèìò—ÙÖÁ%}cÌf– –eðVþüéü‹hék_ûÚEçz ÿ=ô×þW‡%‘ =g’Ôãdzc¼F–‚ä£Ìü¬”_fX.ü„ʧ;éI ÑÕÓ̘ëVÊ¥5¸>–aŸàú_;Ø6ÕÊf©ŒjŸ“ÐÚ‚ÞEB*!M¡·Ð¢¹g9#Ï_Jû@3Ϙ£|™Ÿs͉…c9+ |¸ÔSÛ}OŸy!äO3-É0Ðs bÎ^"3²áÁnOõÐ9ãe|ƒŽöÙI²µ……ë©õÐ"pªÝQÖëãšØS„‡î§ì#.Žm¿ŒåC~¦¯kæ¡xÉãæÁ^V?ÒÉHëvþå… Á'p´,dºLÀ“4È© Ê©ã1ÿ«©ûߙ֦iaärÌš9´‘^RÈ™“{ÄÇÃÎüÿÁªƒ}$cmt¿ÚÂXà 8YIì‚ ÇR—³}_€'r) ¨qhDûq…*K4gœž•æž• f#¯ôpÈu„?Ñžãêž¼‡–#û뼸UQ–η"²n`™ f¥.‚“O°fG¡gû¹?®“Z2…ó+IŒy".ßBJ‚!…¤ßƒ»¿œ•‡º¸zfU“!_‘££n) &?ÐÁãK xv/fz¹l÷0žoà7k$–ûv‘}¾žŽ†ijftš Aÿ{Kî~ß릅næˆ%²è±)úcfúé'Üü02Áêä#”>ÞŠªN²cƉ5¾œ¨{ ™+Zä¿à»E¶ìà2i1µ?Z›P°Ÿ¿€j¯ÁÐ"ýÇ1°÷bZúG0"‡yv7ôŽá{e#baA¯¦!ÉÒ©N%ù¹žŸR"²a`˜ bÂqʳ»Yö@+¿:ο©1<…N´¯O /tàóÖ2/$â 68†±äå.®{Ž©]ø.ŸàäE×qÉÄ<¦>¼Ÿ_¯( ùÉê9ɵO1¹ïr~pešµ®{)xt‡8ˆš€IÍïìü¯æ¹<ôðÃÿõAlï²ó6 ¯¹öÚ7-¶EþäÎlB'“£s0™<ÀÈÎ"v­úïûv3ö3pÜOm…ƒÖUY¼}3„?é!¾ü*šœ>BÒrJë£u M³p=bm5u%´¯êDqÊdu™ðh;›î’5îx¾êvn{p?}£*;–^FQå.O!šWC~+,HçDFscÄèÜ•M°²÷Ÿ–M!­Ï5¯Ž°m*ƒ™O¤¾Ÿ;„ë È.”œN›kŒ‡Kî#»{#~Ïe4-Kã©làDY)ÓÏV¨?€úÜGXZ¶Ÿ{Їp ¼ÆöýqöˆaDó #rÓÓÌ dÓƒrzÅo ót—éü?ß:P,ÝÂÔ“Œ[)rGu^íÀû#ÿhìfãOγû:èé.c‰<Á«_ °ñÊI~-ÁìüE4”\L]ÀY¼“øØQ~éý üóBÔŒ„q+.$¯F6§á?Îö‡¢öÄ œüÐjn~¨Œ­.­ˆRT˜@ •á÷«H‚ü&5='ÒŸžfðÀ Ä» Çv°r~7¯ˆ?{áIÞ7Gñ-%\[D4T€Û£ J^´lŽviŒ_7¶âûuË{+6, p‹âL[°/ÿ1®u5,,.$-Äíð yÒ† m°‹-ûv°`â5ÔÈ¥¬Þ¯ îÒøç˲¬t Ä \!EP~§æ5Df2qF0Š`iIDATŽgy,8A蹇XêÜÇÓy!ÿøÓë3G zV\XBÔÁíÕ0%/ΔI§2ÌÁ’ýŒu™Tóqæ]^ÈB—Å‹«aì\…0ü .ÿziÿ8Œ>ô ×íéàgG?Að’Gñ.b$˜Æ—‘Ái"JÊY‡¾qž#ùl±:/™Lò±}Œ;wòâ‹/²uëVLÓäæ›ofÇŽ<òÈ#\yå•g}ÞOúSn¸á†ßýZt„ÜÓñÃ<•dâá ÆgJÉ+OóPûK¬úSŽ\•¡¦gùÖ,ªi0Ú蜾ˆ¥–PYXM[@8‘剑BtÚHiµT6ÕPàÈx$Èj¦ÁÝSüôÙ2UWÒôg+˜¬Iòòã«PGFñ¸^bÜ7r%„ê”Ïìd:vì‘HS05MÔgRŒù¿Š÷±ãŒäâL~ú3lXdo(Ç#Rë¦Ý”Õ¬G‹È‚Œ Iô;,Ò­{È)ÏjÏPyY5K7*Š2+C¤ó ¶%摺îZ¦®®Ã÷ä8±Æ½¨}5ʸYôëÃdVïâ…ÿØÈ¢©§ëu@B2ó§Ÿ¿1„ß÷›”]·234'2 ?)é¼›/´„¹ñ¡ïóîiÌÙ.ŠÆ©,­ |ó¨îë©¿øaFÜNÕõ ,©­¥@ó"œ0©Ø‡ãÕ~üŽkpo*¢@r#)ùî$N×Âãn‹ŸXõgùØÕ>ÆåzþÁ´X8ù '…%,›2p6xQ×™ÃÓc·€ô”E²óI›8öÓî_¥iÙ…lr]ÌŽ #Ü÷s‰k/5)Õ6á.’eIVœÌJ"}ç5¤Ù ©üÂÂË WV“ݤ”ï²æÀçp}C¦°°GÒ¢!íå¹&‘-YnÚõѤqÝ3ô­dØ(Eeœ’•¿²;+2ò¿ß²æXX™™“ìQs÷/ùUÙãþ¦÷äß²×çÀ39ËØ¾Å,Zq’É?ú2Úšj®èëÀÕ °u •UEýˆ½1¦Ÿ=CëˆÎÏ .k¢ÐåD•D$eœØãû¸ã°£z%[ë.¢uõ†_~™ŠÉa|/­ àÒNR®xx}î¼>v‹´>ÎË'H>°ŸQá7oì#Sö×,¼øj öòøD3 ‹+¨q.ÆYäCRETAbD180ðã»{é_*²naókšðÔ„I;½t>Ï•n®¨g¼pFÇóŒ×lcÑÊîÿá[ºNÒuTf´ò(]# (‡¬’sŠÈgn=Ïß2[ΑsºúätË«»ï¾›©©)z{{سg ,à{ßûÕÕÕìÙ³ç¬ÏûÝCµ-¬lœCY²ÿr?ðàïÿÅ-|å®3ìYú@톥Ü:ßKùmëÙxá&š¥W/¢tÛ ¢~ï{%Ž ´¢"“#ᦷ†˜Ô/eþ¿<†w_âÌQd"ÒK'ˆÿRࢅôþ•|°8LyÕµEv±vË*jîPsÏÿ%õP3ÆÌëÍÎÚÛÛˆ ˜´ŒÞEÇþák ¸dËÙó=¸–x©lÜΪ©4:¹ˆ±Ð¿Ó|š|§A0sûr¯ò£§zY7t üíuDÔ_ã – :™(èç_·5qPùC.Yeeà}ô¶n¦æÿŽò¯-ç‚›;)Z³…ž–Oâ|æ.öT~—ä¿Éá¯vðè+“¤š§1’æ™þl–•ÿÃéÍߨ·Í̦9’‹±ëµÃX7Ý…ë¶oQúâ§ø‡Å>³c-wÞÀ?D‹¨ÝôIâ¿Fv‡èõ5l_%ØÕÎò™Ò> JœŒ¾VLÙäw™úüg)þɝɿÏo2ò0žËìã®_ÁὋ##›YY~%CÛײlÅ6ªgG×ñ'#_æñc2þú@O}ÒŠsß¿Åù“¯ óìúQæ}}1M[W0¼v;+¯,ãðæa´;ÝÜyä~öìÏ`HœúûÈìÈQüëŸ0ý¹ÏQvç£Å‡ÀUB@ ’é-eeºŸ`û .® :ïz2¾µ$¿¶‘ÚO^È· Ã4ð»|zÝü£1¥Ÿzçß݆uÇMììNݰ¦I~˜š/Þü‚ûY·r+…;ÃT\WÍ áä×r‘"ÎýH'ö!ù¿oD_l/ÕOü+3—XL†6Ó<!`£EŠX2¦²ñ¡ûˆ8ƒ”®ÜÊâÆy)¹hÓÅ”®ÿ·z²°i-KÄG}üÕîàýŸ¹ŸLü'™_þ+ÙÃX‰ìïô!œkö –e–œ‹/þÍo~“Í›7³~ýz¾õ­o±iÓ&6lØÀ½÷Þ‹(ŠÜxãÜwß}˜¦É‡>ô¡3ŸWSSÃÍ7ß œ=yM]@Èeˆ‰2–Ç2%œ²5›EÐdLÒˆ¢“lZÇåRòÝ‘Ó)Ȉ^7ù¾kY=ƒŽˆ•Qri$—AyÃUN6K.# Š:¦SCELÃBO'Tb:¤)² A•ϼókii¡±±Ë$DC@t+$¥$ª !£`¥S¦ˆ®d'2Ê™/±rd“.Y&¥‚[O#(ùžCYr¤ Ðr2š–ÿ¢©xÙ+"a`Z:bV%‡„˜Ib¹u”„ˆ!915 U€S[ Ïáõq[gÏh S7S9,ÁÉ$¥j8R †ÛDÖs˜–CÈ )§ºŒ¤f± Ã#¢ `zRG%r(±4øD¤|{óSß[†\ÌBT4LÜn¬VÎDD m€%ÆPU ç™ ¤3cÇ"“‚l.‹à5q aZ Š  +ˆ„™É¡^Tí ßg0gÉ9¼(¤1 Yv!ïe+™q„Œ„às‚=Zþˆ~1- + ’'sâÌdA4D‹œêDåß.ùYs,ƒ,¢‘AJdM7¢œÀti(˜YQ0DÐÍYœŠ÷Ô¼ÉÑóíÔSÓÉŠgI8œdIêªäD{Ã<×s`¥rÈZËœôd3.—™K`ZàBvä½±æ`aéYHê ™˜Š#‘Aö8‰œa"fSX²‰Œ”×ç¹eå0RIrKWMPµS?K†‰™ˆƒ¤"8–E2—@SœH˜qÑ–ž!«ª¤Ò9CBðxuKS-éìÇ‚À÷¿ÿ}ººº˜+ædË«òòr^zé%º»»Ù°aÃYŸçt:yòÉ'|w•7v[™ëâñøëW£ç‘X,F[[Û»ûEÿÿöl8å]­ùÛ4f8G5›œOó|ffæÌ•³Óé<Ç£9Û9½‚N&“|ò“Ÿ$àñx¨©©¡¼¼œK/½”›o¾‡ÃA&“áûßÿþ¹žÍf³Sç4 ÿ'>ó™Ï°sçNöìÙCaaáY¯ýÓ?ý---ÌÌÌp×]wQPPpŽFùæþüÏÿœééib±?üáÏú-½lÙ2Ö®]‹$IÜyççp”yÉd’?ú£?Âçó Ï4í5M“O}êSȲŒasò—æ[½»»›Ë/¿œM›6Q__Ïg?ûÙs<Ò³õ÷÷óÕ¯~•£GòòË/ŸùøùPó·û\¯ùÓO?Í/~ñ t]§¦¦†¿ú«¿æ^ÍÏ›-êwÞy'ëׯÿ§ÓiöìÙÃøCn½õVî¾ûîs0º·ÖÝÝÍÌÌ wß}7W\q<ðÀY¯û|>t]'ž£žíûàv.x«± ‚€ßï'SRRrŽGù»ÊÊÊøñL8>ëãçCÍßjìs½æ[¶lá?ø÷ÜsÏ=÷ܙϵšÏ¹„'OžäÓŸþôYûÈG>Â7Þüñññ3áVYYI__ß»3Ð7ñfcß°aåååTUUñÌ3ÏœõúîÝ»øò—¿ÌÓO?Í–-[ÞÁ¾…þþ~6oÞ ¼^ÏŠŠ úûûÏ<#¨ªª:§u~+o5öÊÊJ^zé%LÓä’K.aûöí¸Ýîs<Úßï|¨ù[9_j~Ï=÷pÕUWù÷¹Vó9ÐÕÕÕìØ±ã-_ÿí'ÚÑh”ááazzz΄á¹ðfcïîî>ë­ö[¯¨¨ˆX,öŽñ÷ùß>¸ Þj짉¢ˆßï'—Ë£þÏœ5ÿ}ærÍ¿óï iÚY·_æZÍÏ›{зß~;?ÿùÏY·n_øÂ°,‹x€o|ã|ç;ß¡½½©©)î¸ãŽß¹G}®}éK_"333Ã~ð:;;yàøÜç>ǾðÜn7ñxœüਪzNÇz>?¸}«±»Ýnî½÷^ ຺úÌýƹ"™Lrë­·òÄO°}ûv–-[v^ÕüÍÆ>×k~ï½÷òõ¯­[·"IMMMs²æçM@Ûl6ÛÿkΛ‡„6›Íöÿ; m6›m޲ÚvÞzî¹çذa·Ür ×_=‰Dâwþ›þþ~¾ño¼éçÿéŸþ)™Læ¦Íö¿f´í¼%W]uwÜqµµµ8p€[n¹…/~ñ‹üõ_ÿ5wÜqÿøÇ™˜˜à+_ù ù—Iii)©TŠË.»Œûï¿ÿ6Û[³ÚvÞ²,‹ßüæ7|üãgïÞ½ÜyçD"<Ç'—ËÑÚÚJEEáp˜Ûo¿l6ËO~òœN'\p»ví:×߆Íö–æÜ:h›í¿K®¸â ¾ô¥/qÓM7ÑÝÝÍM7ÝtÖúgÓ4ÏüùÛßþ6lÛ¶ ‡ÃA<×Çm³ýwÙWж÷„Ûo¿·ÛÍç?ÿyn»í6n½õV©TŠÃ‡s÷ÝwsâÄ ¾ò•¯ÉdhkkcÉ{…©mî²×AÛÞÓvíÚÅðð0þð‡絯~õ«ÜtÓMTVVžƒ‘Ùl¿Ÿ}m{OÛºu+µµµoúÚW\a‡³mN³¯ m6›m޲¯ m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›m޲Úf³Ùæ(; m6›mŽúÿù­”ÔnÍZIEND®B`‚mpmath-1.0.0/doc/source/plots/kleinj2.py000066400000000000000000000001741316273626600201320ustar00rootroot00000000000000# Klein J-function as function of the half-period ratio fp.cplot(lambda t: fp.kleinj(tau=t), [-1,2], [0,1.5], points=50000) mpmath-1.0.0/doc/source/plots/laguerre.png000066400000000000000000000456211316273626600205440ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxeׯïÝMOHOnèłԤ×H ¢¨X `ø@°PDDéE©"5ôÞK¤é$›º»çû#&HÙ2³3Ï0¿ëÊõúÎÎ|ˆjÕªA«Õ–zÍßß>>>P*• "øùù!33ööö°°°@jj*ÜÜܘݖŸŸOOOQÄÂǶ'Ož€ˆD‹Xµý{û_$$¡Ox(cµ}vð3htÌxc¼¼8ŽŠ;¤–»„„hµZÔ¬YSèPÊ„IƒNMM:^¹råŠÐ!ðŠ”õ£mÿÝýØwwü]üñIÛOxˆŠ;¤–»gçŸÅ“]|;¸TiÞ¼¹Ð!ðŠ”õª­P[X²¬na×…°¶ßÏìg‘Zîdƒæ¹HÈ6RÖg¨¶_.þ‚;©wðví·Ñç•>}´>9ð t¤Ãÿ½õp³cçó,¥Üi4ÄÇÇ‹v 4À¨AËEB¶‘²>}´ýþŽÅC#F˜Ør¢¢â)åîÁƒÐjµ¢nÁ¤AËEB¶‘²¾Ê´åiòðù¡Ï‹»-†…R4 %õBJ¹ûü3À¨AËEB¶‘²¾Ê´-:»11èóJtñïb¦¨¸CJ¹“ š'ä"!ÛHY_EÚž$`ÞÉy°TZba×…fŒŠ;¤”;Ù yB.²”õU¤mòþÉPªñi»OQǵŽ£â)åN6hž‹„l#e}åiÛ± »"v¡¦sMÌê0ËÌQq‡”r'4OÈEB¶‘²¾²´eågaòþÉ€e=—ÁÎ’ÝG¶I)wÅíëë+l À¤AËEB¶‘²¾²´Í ‰„' Üh0zÔí!@TÜ!•܉½t1L´\$d)ë{^Û¥ÄKXza)œ¬ðc÷ŠŠ;¤’»ÄÄDh4QOoŒ´\$d)ë{V›F§Á„= #¾{û;Q7âש䎅ùg€Qƒ–‹„l#e}Ïj[z~)®>ºŠö>í1¾Åx£â©äN6h‘‹„l#e}ÅÚâ2ã03t&,”XÑk” &ÿ©½€Tr'4ÈEB¶‘²¾úõ냈ðá?B]¨Æí¿`¦•¨>H%w²Aóˆ\$d)ë»rå vFìÄžÈ=¨íR3ßœ)tHœ"•ܱbÐlujù¹HÈ6RÖW§Qôþ¥7`ùÿ–ÃÖÒVàˆ¸E*¹ca 4Àè´\$d)ë›úÏT$f%bX“aèêßUèp8G ¹c¡t1L´\$d©ê»ðàV],î¶XèpxA ¹ce 4À¨AËEB¶‘¢¾â5Ïp¾ïò=<í=…‰¤»ØØXu£þb˜4h¹HÈ6RÔ·äÜ\OºŽ À˜fc„‡7¤;V „€\$%R)Ä”‡ÔôE¦FbfèLX*-±iâ&ɬy. )䮨 å+hž‹„l#%}»‘«ÉÅÌ7g¢¦}M¡Câ)äîþýû#©& Z.²”ôýpúœK8‡VÕ[áË7¾””¶²‚¾{÷îêÔÿC˜4h¹HÈ6RÑwýÑu|}ìkØXØ`}¿õ°PZHF[yHAß½{÷`ii ¡C©& Z.²ôåkò1rçHê ñmçoQ߽ȸ¤ ­"X×—••…¤¤$Ô®]*•Jèp*…Iƒ–‹„l#}!ÇCpóñM¼Uó-Ln3¹d»´Uëú¢¢¢°1ÿ 0jÐr‘mX×w&þ ¾?ý=ªXUÁšwÖ”ZµÁº¶Ê`]KóÏ£- Ù†e}ê5wBG:üØýGø9—^ªÅ²6}`]ŸlÐf@.² Ëú¦ž†{i÷Ы^/ŒýÂë,kÓÖõÉmä"!Û°ªïÐýCøåâ/p³uÃgB¡xaVµé ëúXZ 0jÐr‘mXÔ—‘—Ñ»‹®˜—ÿoy¹ÏdQ›!°®ïÞ½{P*•LÜæ 0jÐr‘mXÔ÷Ñþð ë†5†–»‹Ú e}¹¹¹ˆ‡ŸŸ¬¬¬„G/˜4h¹HÈ6¬éÛ¾nl@õ*ÕñsŸ+Ü—5m†Â²¾èèhìLoŒ´\$d–ô=V?FÐÞ Àª>«àbëRáþ,i3–õ±V 5h¹HÈ6¬è#"Œý{,’s’Ô"Ýët¯ôV´ ËúŠ „²AóŒ\$dVô-:»{#÷¢®k],èº@¯cXÑf,,듯 Í„\$dôK8‡éG¦ÃZem·ÁÁÊA¯ãXÐf ,ë+6hyš#Ž;†¶mÛâý÷ßǦM›J¶ËEB¶»¾´Ü4 Þ>Kº/Á«^¯ê}¬Øµ™ ËúŠ ºvíÚG¢?¢6h¥R ''' 577[¶lÁ®]»°cÇ@DDDÉüXñ‡ˆÕmÅW)bˆ…mÍ›7M,ÏnÛrl ¾øç X«¬1û•Ùp´v”Œ6®¶#†X ÙV<½QüÂg÷»zõ*víÚ…… "33¢‚ˆ®‘HÙ¾};ш#håÊ•%Û‡.`Tü£V«…WĨ/-'üûB@Ë/.7z1jãVõ-]º”мyó*Ü/00Ð<鉨ŸêÝ¿ôïßÿ…í/C‘Õ¹>}›>úoÞ963ƒ BP‹ £Ç›6®aU‹k F¦8žG.²Øô-9¿»ï솿‹¹]êôElÚ¸†U},.±5h¹HÈ6bÒwáÁL=4V*+l¸ ŽÖŽ&'&m|Àª>V ZÔSå!ßIÈ6bÑ—’“‚ÁÛ£PWˆ_zþ‚fÕš™<¦X´ñ‹ú´Z-¢¢¢àááÁܯo&¯ å; ÙF ú µ…¸m b2b0¨Ñ ¼ßò}Nƃ6>aQ_BB ˜›5è—¡H(eĠàXÌ1x`uŸÕ&Í;?‹´ñ ‹úX{ŠÊ³0iЬýL1V 1ú"´¾_/ýŠe—ÁÃλ‡ì†½•=gc ­oXÔÇb“¤b˜4h¹HÈ6Bê;s“÷O†¥Ò þ ¾N¾œŽ/çN|°lÐr‘P„°Xˆ1¡ôÅdÄ`À¶Ðè4XÙ{%^÷}ósȹ¬®à½‚–‹„l#„¾ì‚l¼³ù¤ä¤à£6al󱼜GÎø¸sç ^½zGb8L´\$dsëÓ‘£vŽÂ¤x»öÛXØu!oç’s'.4 îÞ½ OOO¸ºº ŽÁ0iÐr‘mÌ­ïÿŽÿvFì„¿‹?¶ Ø %3{rîÄETT Ñ A¡C1 & Z.²9õmÛŽÙÇg£ŠUü=ôo¸Úò{%çN\DDD`ï‹¥& Z.²¹ô]yx»¡€ôÿ =ò~N9wâ"<<€lÐfE.²9ôÝO»›z §0ó;ÏG¯z½x?' çNl_AËSfD.² ßú’²“ÐucW"ÂÇÿ~Œ­··¢–s-ì¾N6ÂLƒÉ¹Å+8X-Œ´\$d®õÍ?5?_øv80âªU©Æéø† çN]ÙW³¡¾©†úVÑ_öÍl>.|a_Oxâ#|ÈÝž‹Ë¸\òš¥§%œÚ;Áéõ¢?‡fPZñû£ñeϘ‡R©Dݺu…Åh˜4h¹HÈ6eéË´ýiHý'é‡Ò¡ÍÖ–z]a©€}{ØøÚ@å¨B‚6»ìB¶U64€ÆÖQ˜\XòW\€¼è<¤ìJAÊ®€ÒV Ç6ŽpÇžÃ=aåaemR‚}ÙÙÙˆ‡¿¿?llÌ_,æ & úe(ÚÙÙ oäääÀÖÚOÎ>Aê?©Hû' Ù׳K^WÚ)áÚÓUšW}{Ø7¶‡m][(-‹®~wEì mƒ i¨Áo½CŸæ}Ê<6G‹¬‹YÈ<‰ÌS™xræ 2Že ãXîqn½Üà5Ú ®=\KÆæB›ÔsÇ‚¾ÈÈHlOoŒôËP$dýƒUù ù8ûýYØí¶C~\~ÉvÛz¶pëéמ®p~ÓJë² sGØ Ù1Z«ú¬Âèf£Ë=—ÊNçÎpîà !ûJ6­„¤MI%W×65mà7Ó^£¼ °0í¦)ç`GŸVpŒ´\$d ÒR÷§âáo‘úO*T:ò‘çŽÎpïç·žn°­c[é8ÛnoÃÐC¡#Ö¼³Å¡P*P¥eTiYþ?ø#uo*KDúÁtÜ{qóãPóëšðê …Ê8£–Z}R(Œ.³{Š„R ÿa>¢gFã¬ßYÜês ©{Saåa…'OÐæn„Àû#o½Ìyó­Íºc(„õýÖlÎÏ£´V£¿^=ð*ši—..Ƚ—‹ð‘á¸Ôìž\xbÔ¸RÉ]y°¢O*Íä´\$7y±yˆû>V=‚._(×n®¨6¡Üz»<ß»éÆ&ŒÚ5 °±ßF m2”ÓxÚ9áÕƒ¯"ãD¢ƒ£‘y*WÚ]ϧ>¨ù5 Z®Çzî*ƒ}¬·-†É+è—¡HÈ"9ws16çëœGâ²D(,ðùÂm£Ú¢é¿Máñ®”–Jƒô­¿¾#wŽ„ üÙÿOÎÍùYœßtFÀ‰Ôû­T*Ä/ˆÇ¥¦—q"Cï1X;° ¯ø1WÌ_Ì1iÐ/C‘%Ô·Õ† õ/àÑêGP9¨à7ËmcÚÂÿ{ØÔ,½ÌI_}k®®Á{»ÞƒJ©Â–[0¨Ñ >Â/…B¡@õñÕÑúvk¸ýÏ ¹÷rq­ã5Ä}"ªôxÖrg(,苉‰AAAóB€Ñ)¹H(²¯e#fN Rþ*Zglén ïO½QcR X8•ÿѪLaÁ™˜zx*,”Ø:`+ú5èÇiì•aímÆ{#ic"'F"êË(d]ÉBý5õ¡²/ʃ•Ü ú¤2½0z- …%ÿA>"FGàRóKHù+VÕ¬à¿ÈmcÚÂïK¿ ͨXŸF§Áÿ|€©‡§ÂÖÂ;ï4»9£P(à5Ò ÍÏ6‡M-$oKÆ•vW•[î1bÏ©° O*B€Ñ+hÖç•*C¬…­Z‹øñˆû>º,Ý-Qó뚨6®”6ú×—§/» C¶Á¾»ûàiC÷¢UV\…o4MÐâb „ Cúát\nuMö4Sûɉ5w\Á‚>Ösõ,L^AËEBóB:£up¾ÞyĄĀ4Ÿ©>hs¯ j|Xà sÊÖ÷(û:¬í€}w÷¡¾{}œ{Næ\Œ¥›%šîo ŸÏ| IÓàF×HMa?±åŽkXÐ'¥)&¯ _†"¡¹?\jµGJJ rss‘““ƒŒÈ <:úy)yp†3j6¯‰&šÀ¶™-¬³¬áeï Ã>FÏë KCÏM=›‹~°sðN¸Øºp-Ñd ø/ð‡¥§%¢¦EáfÏ›h¼³1\»»–ìÃÊvÆ"v}D„°°0ØÚÚÂ××WèpL†Iƒ–‹„¦‘#GŽàÔ©S CXXbbbô;ø €‰Oÿ¯ƒƒ^{í5tìØ:t@Ë–-aiiYáÏê E¿-ý™Ÿ‰aM†auŸÕ°¶°6\”ñê ¥­÷>º‡›}n¢Ñ¶FpÇ€4®Ú*Bìúâãã‘™™‰V­Z1û˜«gaÒ _†"!—s}D„;wîàŸþÁþýûqâÄ ”¼®P(P»vm4lدÔzÖ×­‘w*V:+8¸;Àï=?¸½å†ä”d$&&–ü=xð7oÞÄpàÀ€½½=Ú·oAƒaÈ!ppp(W߯1f÷ê üF0æ¼5Ǭx5ïÉÞPÚ(‰Ûýo£á¶†ðèçÁT;Nc»¾›7oš6m*p$ÜÀ¤AËEÂÊ!"œ>}›7oÆ?ÿüƒèèè’×\]]ѽ{wtéÒ¯¾ú*^yåØXÚ qY"bfÇ@“®ÊA߯|áý‰w…wÒâòåË8~ü8Ž?Ž“'OâСC8tè>ýôS >AAA(9¦i@S Ƽ“ó R¨ð[¯ß0¾Åx“5››êã«Ci£DD`‡…Ãú˜5š·¯yq˜Ínܸ@: "ºFŒ1lè0¡CàµZmô±©©©´xñbjР(ùkѢ͜9“Ξ=K¦dNGÉ»“é\½sŠP U†RĄʔoÔù éøñã4räH²¶¶.9«V­hÍš5›K¯ÿú:!ä8ß‘ößÝo´V±·(ŽBJ§›æ`È!€BCC:>00ÓxLEAD×¼*àw„Á¸X8añû;Q»3ÀÈObCHJŠ@ÕªúÏõ¢¢NáìÙ¸~};4š¢6ž¾¾­Ñ¶íX4jÔŽŽ^/g›…ê»ï£Ê½¢[™Ÿ¼â‚Ä>þÈ«þâ´„1¨Õi¸tiΞ]¤¤¢ÊºÂCj­EõÖm¿î*NÎ%(D¨±ã.€uˆøo›#€Æ(ó(7äc ¢Ñ ;,‡?.À_x `<±ˆùo“¢#@‹4ãá|æG Â7¸‰¶HÃ8cšBÃæ*V†Éà *€F(.ƒfökþ@ÂIØôA‹Z_àÁ…éˆmÔ·ÚŽEì+Ý@*fe®ÀÛ»ü¹¾‚‚\œ?¿ G~‡ŒŒ€Ÿ_[´k7ƒ`mm_æqÊ|-<ŽÅÃóhT:hì-ñ {Md´«Ž¡*øhCôD÷s†ã®ö(¬È¯ÅNµÝÛž~ E ´l9={΃³s ÎnNPæ5ÄÍ…›Ñ<ØÜ:ñC^‘Ü/¼Ê>›B’Ž… µ¨_¿)‚‚ŒãÚ5nc2bpºÉ+MÕE]Þa8umA‰ ˆjÔ &º_è09';;›,X@^^^%s»ï¼ó]¼x±ÂãtZ=\÷ÎÔ8C¡¥cVÇèÞÔ{T˜QÈk¼G£Ž’×/B¨É²&‘ADEóÔË—/'@ÎÎδeË^c1yñytºúi E(ÅÌ:œ—ŠuëÖš:uªÑcˆmšIƒ6lµhOh ÒÀ®ÉmNÚ=¤‘BQdÔQÇŽD6åä²A<_ˆÉÌ̤yóæ‘»»; …BA¤ëׯW:VúñtºØübQ¡tkÐ-ʉâ÷ý(ÐPHh)g+ ! q£œ‚§ç,Ö—™™IŸ|òIÉ—M`` =yò„רøF­VSÖÕ,:a‚BJ©R…‰SÄ\$üì³ÏmܸÑè1dƒæ€¾}ûRll,9Wq&ô¾£Þ½zB@ïoIê`"_ß§FíìL4iÑåËB‡®áááDD”––F!!!äââBH©TÒðáÃéöíÛ•Ž‘s7‡n¾{³Ä˜/µ¾D§2ø.=¸DM—7%„€ì¾±£õ×Ö¿°O±¾bAtàÑàÁDVVOÍ: €héR¢´4aET@JJ “££# =z4EFFVzlAZÝýô.³gèѦG¤Óêx9§ ‡¦šZrÕüæš7éNʽOII¡wß}—J¥¢RËY$bl…"”nô¾A:¿ï¿ QÕªUÉ‚òóÿB”¬AGGGÓªU«hÉ’%tüøq.†,—^½z•ü÷|@¨:ªÓ6l£o/ ÕLUÉOëu QJ Ñ’%DMš<5jkk¢¡C‰Ž!ÒjyW_RRRèË/¿$[[[@–––DÑÑÑ•«-ÐRüOñtÒõ$…"”N8œ ˜y1¤ÉáßäŽE£º?Õ%„€ªÌ«BË/.'­®ü÷ôr9¿dt:­ZµŠìíí õîÝ›²²²ø ›žÕ¦ÉÒйºEëË, `TÜQ^î„&))‰P“&MLG’=yòdš:u*íÚµ‹8@‹/¦Q£FÑ­[·8ñEž}5 8P-U-Ú…]ôOëÈ/ÄrûÎV^^Yd:Ñ… DAADŽŽOͺV-¢9sˆâãy‰·2RRR諯¾"@VVVôÁP\\\¥Çê4:z´ñg7šBf^&MÜ;‘Bè›þGq•Ç\‘‘‘ôÊ+¯jÖ¬=xÀ®¹e^ȤcÇè¸íqÊË:Érøða@Ç7iIty…S jµš†JAAA4}úôR¯=Ÿ„üü|êÞ½; †¶ iöÑé:§é‹_¿ Eˆ‚j·²]{xíÙ­[Gôæ›OZ©$êуhûv"~&éKjj*S•*UJŒùÃ?¤»wïVz¬®PG6Ÿ‹´´4êØ±# oooºv™¸²´ÅÌ‹¡P„ÒÅW/’6O¿ÖŒE¬EÂE‹Õ£¾ûΤq$iÐDDë×?-ýôÓO&·fÍš’¥WAAA[òZß¾}_Ø_­VÓ믿^t[±{+úÿÐIç“tæ3Ô|EsBH5[Eïÿ¸hÚãY"#‰¦M#òòzjÖDŸ~JÄCQ$55•f̘Qʘ?øàŠÿï ¾¢BŒ®PG×?,ùéŠPºúÖUJ?–Îyœ/œ[§£½wöRÃ_–\5øk=Î~lÐ8úšòóó)«§õ IDAT00ƒƒí۷Ϙ°ÍJYÚt]íp•BJ÷>»'@TÜ!Ö"á{ï½Ghÿ~ÓZHÖ —,YB“&M¢Ñ£GÓüaòxsæÌ¡Ó§OѼyóèÔ©S%¯•÷&fddPóæÍ‹ÖH»×¥ Ø@¡ŠPºóÑúåØ/ä8ß±džtVè,JÏ}ÎÔ ‰vï&zç"•ªÈ¨gÏ&:~œhåJ"—€¥¥¥ÑÌ™3KŠVVV4iÒ$ý¦2 uôpíC:Wçcît•ÒóoÌDD—/Ó[kß*1æk:Ðů¿æNGsçÎ-YŲ|ùrÞÏɹq¹tÒ¹¨>zPZKïÄ@ñ¿û„„“Æ‘¬A_¿~ºuëF½zõ¢‡š<ÞÚµkKŒþù+èÖ­[ÓæÍ›içδ}ûv"*úfW«Õ”ššJíÚµ#dgmG!v!ŠPZ[}-ÝÛs†ý:Œ,fXB@“è›ßÐå—K~ºAÂOœ õœ9Dqqtù7ˆ ·µ%õ¨QD§OÓåK—J·Ô±Ïm‹‹‹£ &”\1[XXÐûï¿OG-óØâ/£Ë—/Saf!›yŒŽÕ*Z•±+èZçkt~ÃùJÏËŶ°a4⯄ "c®5£m»ºt:Ñç¸|ù²ÁÇ.X°€,-- }ñżé5u[EÚ’¶&Ñ:¬£PŸPÒ¨5¢‰ÙmÅkŒÅKñ¶›7o’••¹ººÒ%þ]o»rå íܹ“,XPæ¯s!áÌ ƒ‚‚(''‡=<<諯¾ªt*C›¯¥G<¢ÓíN—˜òq›ã>:œž\äÿ;NGûïî§Îë:—Le¸~çJ!¡!ô$»ó›Rh:xð ¨Mº2m¹1¹tÜö8³:FêHqÜ*BŒEÂ-[¶úè£LK’DëÖ­£;wîP\\>|˜¦L™Ric1ägHdd$uèСÄ,›WoNK­––¬ŽšE·nÜ¢ÁÛ—¬øPÍVÑ€­èhÔÑòW&ܼIôÉ'Dnn” Ð.€ÆØÙ‘ƒ•UɹڶmK6l ¼¼¼rãÓh)íPE~I§.@ÁÙ¨Cco‡9xð zõêN‡½{÷¢{÷îB‡¤7·ÝFò¶døN÷Eíùµ…‡I222àââ‚:uêàîÝ»&'Iƒ67#FŒÀÆ9/>>·nÝBll,¢ïEãÎÙ;HOH‡e¶%T™*Xk­áøÁµQ~ðƒ¬ôßÖ3U n¡JÆTÁ8Z݃r@_`ìX cGà¹ÇÃçääÀÎÎÎ(-D„ˆ”‰>‚£ÑGŠŒ¼Œ’×ë¹ÕÈ�¬É0ø» ó¸)Sô•ņ 0jÔ(888àäÉ“¥Pkn Ñ–Ÿ õ/@W C«­`WŸ»÷„/¸Î©=z;wÆàÁƒ±yóf“Ç›A3ùèµZÍéx>>>ðññ)ó5Òr"s}%Ù׳¡IÓ 0«ÉÉÉHIIAVzt2í2‘nŸŽ û (\ðôõ„wSoÔïPµýÁݶ+W®«VÄüQôW«0f ðÞ{€·7 ..õëWþÜ·}9r$bbb0kÖ,üïÿÃùóçáýß{in Ñfím ¿¯ý55 w?¼‹¦‡š ž›Êà:w¦rñbÑ/Âg§W¥“WÐbú–Ó‘áÉá8›pgÎâ\Â9„%‡½°Ÿ¥j:×DM皨åàƒš±™¨~òlnEÀFXk°nÑ6}Þ…uÇ·A–HÏMGz^:ÒsÓ‘–›VôßyéHx’€°ä0D¥GAGºRçQ*”hU½:×îŒÎµ:£w;ØZÚ¾Ô "Œ7«W¯FÓ¦MqòäI8::V~ Àè t¸p 9á9hôW#xô“ ††0pà@l߾ǎC‡LOLÞ0jÐÆ ÍEF^Î'œÇÙ„³¸žt11ˆÉˆ)5ÕP!禭ËÄ×É =¢‘G#4ôhXò÷ìj1ÂW¡©°°={öÄáÇѥKìÛ·–––œŸ§"ŒÑ–öonô¸ûFöhy½%*ñ^E‹­HX\ ÌÌÌD•*ULOlÍ䇛›áS7'Î6ÎèV§ºÕéVj{F^F‰YÇdÄàQö#äkó‘¯ÉG~aò⢉¼¬‡ ,À5pqö‚KãVpmñzÑÛ¸ÀËÁ õÝ룊µéH!à븥¥%¶oߎ7Þx‡Âĉ±råJ³N£Í¥› œ^wBæ©L<ÞòU‡Uå!2n“9'''#66 4àĜœ­Ñh„Á(œmœà€¯Š‹X9QQ°Û¾½h¾:2ÀÀþ(0xpQa±^K¦ŸÍg¡ÉÉÉ ûöíCÛ¶m±zõjÔ®]ÁÁÁ¼œ«,ŒÑ¦P(Pkn-\ëx 1_ÇÀc ”–ÊÊ1 /]ºhÕª•À‘ð‡8?•Àu‘PlÄS§À‰@``Ñå«W¯½4j,X<~,t¨FÇëø>>>Ø·o0cÆ lݺ•×ó=‹±Úœ;8Ã¥‹ rïå"i]ÇQqß¹3„bƒ–j`Ô œœ„WJªä ðÆÀÚµÀÇÀŠ@ëÖ@x8ðÅ@Ew*îÛ0ô«Â«°uëV( Œ3áá἟0M[­¹µ1ÿSr#“Øã ù Zd¤¦¦ ¯\¹råÅŽŽÀ„ ÀùóÀÍ›À'ŸNNÀÎ@¯^@ÍšÀŒ@T”Ùã5”2õñ@=0{öl¨Õj¼ûî»ÈÊÊâýœ¦hslí÷wÜ‘ŸÄß+?@Ì•;}¸té,,,ðê«L­q0 bø©Þ/=yyD[·uëF¤P<í°÷Ö[D7åä¡àhµZêÑ£ Áƒ‹¾9QÖõ, U„Ò骧I“ÍöSÍù$!!P@@§ãŠÍ[˜¼‚fµH¨/999úíhm üû/„„~~@h(0bP½:ðÁ€ˆ®zôq€R©ÄÆáçç‡-[¶`éÒ¥¼žÏTmMà9ØIxðËŽ¢âsæ®"¤~ƒJ1L´ä‹„Æb|}¯¿.šâ8x°hÅGN°lТЬðË/@z:÷ˆ¹ M®®®Ø¾};¬¬¬ðÙgŸáìÙ³¼‹ m5gׄB¥@ÜwqÐdŠëbD,E—aÀ¨A¿4EBcP*.]€Í›ÄD`É iSàÚ5àÃjÕ€áãG0…(! M-[¶ÄÒ¥K¡Ñh0pà@<æi ÚìêÙ¡j`UhÒ4HXœÀATÜ!–"áËP 5è—²Hh nnÀG™óÅ‹ÀĉEÓ"ütî Ô©Ì $˜×„*4?xðà† ­VËù9¸ÒVsVM(,Hø1š,ñ\E‹¡HHD¸t鬭­Ñ¸qc¡Ãá& Zìwš çwk)@Ë–ÀòåEËõÖ­Þ|ˆŽfÎ,š·îÙر((àöÜe ÔÝh …Ë–-CÓ¦MqôèQÌš5‹ósp¥ÍÆÏU‡W…&SƒG«q2&ˆáNÂèèh¤¥¥! Àì·ò›& Z.š€0jpüxÑ]ŠÓ§U«û÷uÔûì3 ìņO\!d¡ÉÎÎ;v쀣£#æÍ›‡þù‡Óñ¹ÔæóYQ‡Å„@âl\SC‘ðe¸A¥& Z.rDݺÀüù@\ð÷ßÀ;ïiiÀ¢EEw+¶o_t»9Ç뇅.4Õ©S§¤!ÎèÑ£9æR›}c{¸vsE^l’w$s6®);àå™5h¹HÈ1@ïÞÀ®]EóÑß}Ô«œ= ŒWTX;8s¦h¥µ‰ˆ¡ÐÔ¯_?Œ??Ƹqã@è¸×æóyÑUtü‚xÎb41äN¾‚9r‘G¼¼xï"†B,Z´uêÔÁž={ðûï¿s2&×Úœ;;ÃáUd]ÊBæÉLNÇ6¡s§ÓépùòeØÛÛ‹âË‚o˜4h¹Hhxì" }°qãF¨T*L™2¥Ôƒ„…km …ÞŸ=&~A<§cƒÐ¹»sç²²²Ð¢E ¨Tl 9ö©…B+V ZµjX³f vìØað|æÎÆÏ=P˜Rˆ¤Â<KÈϦlÐŒ  ¢Œ> q-[ Ö¤2ÜÝÝKî2œ0a<0l:ïÜy\´ä.q…0O\ò³)4#ÈEBFù¯Hý‹ë¢]»vÅÇŒ´´4Œ;Ö ;øøÎ]•6U`ßÄÙW²‘u™ÿGx=PŸÍŒŒ ܸq¾¾¾ðõõ$!`Ò å"!Û\¹rE°> ú2þ|4hÐ(¹¢Ö¾s§P(Pm|5ÀÃßòz®²ê³yæÌÑKuõ 0jÐr‘mJé3s}±µµÅêÕ«¡P(0eÊ$&ê7¥`ŽÜUQJ%’6%A›mÞb¡PŸÍ—qz`Ô å"!Û”«Ï }@ ¡mÛ¶˜2e 2331qâD½¦:Ì‘;KKx ò€6[‹Ç[Ìó^#ÔgS6h†‹„lS©>û€Êœ9sàïï={ö`óæÍ•îo®ÜU_ø›y‹…B|6óòòpñâE¸¹¹¡Aƒf?¿0iÐr‘m ÒÇqC±³³ÃªU«“'O®´w´¹rçøš#ìØ!ëB²¯e›åœ€0ŸÍ .   ¯¿þ: …ÙÏ/$L´\$d£õqÐÄ:tè€I“&!55“'O®p_såîÙbaâïæ»Šâ³Y<½ñú믛ýÜBäAËEB¶1YŸ }@ŒåÛo¿…¯¯/¶nÝŠ¿þú«ÜýÌ™;¯Q^PX)´1Élw ñÙ|YçŸF Z.² §ú ìb,UªT)iê?iÒ$¤¥¥•¹Ÿ9sgéf Ð>Ñ"y«y‰eîϦV«Å™3g`gg'ù —²`Ò å"!Ûð¢OÏ> 8zÔè> ]»vŘ1c””„)S¦”¹¹sgîb¡¹õ]¿~YYYhÛ¶­äŸà]L´\$dÞõUÐ&öY¸p!ªU«†õë×—ùDpsçΩƒlëÚâÉÙ'PßâÿÂÅÜúNœ8àåœÞ5h¹HÈ6fÓWF¼ù¦I}@œñ믿‚‚‚™Yú9æÎB¡@õ ÿ]E›¡Xhn}tîÜÙ¬ç L´\$dAôý×ǛܤOŸ>6l0uêÔR¯ ¡­j`U(,HZŸ]¿m\Í©///ÇŽƒ££#Ú¶mk¶óŠ & Z.²àú8è²dÉxxxà·ß~Ñ#GJ¶ ¡ÍÊà n½Ý ÉÐ u?¿¿.Í©ïäÉ“ÈÍÍÅÛo¿ýRÎ?Œ´\$dÑè3¡ˆ»»;~ùåÀøñã‘]t³ˆPÚª¯ x¼‰ß[¿Í©ïßÿtëÖÍlçL´\$dQê3¢È€JžÀ @8mn=Ý rT!uo*4™üýÂ4§>Ù 5h¹HÈ6¢Ög@…V‹_~ù...Xºt)N:%˜6¥ý= Ë×!eg oç1—¾øøx„……¡~ýúðóó3Ë9ň¨ Ú××ï¿ÿ>¾þúëRÛå"!Û0£O> ^?ÿŒ%ÁÁ "Œ;VÐf>ÅÓIð÷8,såîÀ€îÝ»›å|bEÔíää„ÜÜ\T­ZµÔv¹HÈ6Lê« ȈÏ?GO77DFF"xÚ4ÁBtîè +/+¤IGÁ#~f®ÜôË<½ˆÄ £££Ñ£GR›6mÂÍ›7±víZœ9s÷îÝ+Ù_.² ÓúÊè¢ðóÊÔT8øqéR\0€Ó> ú¢P)à9Äз>ÑæÈF£Á¡C‡`ccƒ:ð~>1# ƒ®U«öïß_êoøðá%¯W­Zµ¤JYYYزe víÚUòä刈ˆ’o÷ây2V·?sM ±ð±­~ýú¢‰Å¤m¾¾¸Ò»7…ì•+ñM³f Cvì@~‹ˆhÐ9‹ééf‹¯êðªˆCb7ÄòrŽâÿåSdž ™™‰-Z”<$Ï÷ïêիصk.\øÂG‚CD×H„„……ј1ch„ 4yòäR¯õêÕK ¨ÌÃåË—…W¤ªO§ÓQëæÍ {z­!²¶&6ŒèÈ"­–÷ÎÕ=G¡%u¤šóñÍ‘»™3gZ´hïçzžÀÀ@³Ÿ³"DkÐ!¶7QF¦˜èèh²··'•JE—7l š8‘ÈÑñ©YתE4gQ|<1„DS(B)zv4oçà“Ö­[º}û¶ÙÏ-6oŇ¡ÈEB¶‘²>OOO|ÿý÷ÐjµýÃ(X²„³> zÇ0ÔðøÇz=GÑøÎ]JJ .^¼Ÿ—îñVeÁ¤AËEB¶‘²¾¸¸8Lœ8;vÄ70þ|Nû€èƒ]=;TiY9wr}…ÛÇañ»Ã‡ƒˆÐ­[·—îñVeÁ¤AËw²”õÕ¯_J¥+W®„æÎ‹7n<݃> úÀךh¾sWÜÂõe_^W “-ßIÈ6RÖW¬ÍßßóæÍƒF£ÁèÑ£QXXXzGú€èƒÇ`@<Þü¤ånšƒÏÜåççc÷îݰ¶¶– ú?˜4hùNB¶‘²¾gµMž<¯½ö®\¹‚~ø¡üƒŒèRÖÕ¬áÒɉÈ8‘aФRð™»C‡áÉ“'èÙ³'ªT©ÂÛyX‚Iƒ–‹„l#e}ÏjS*•X½z5lll0{ölܾ}»âƒ è=þ xÿ¯Xø'w7­ð™»­[·ÈÛ9XƒIƒ–‹„l#e}Ïk«W¯æÌ™ƒ‚‚Œ3Fÿ‹ =ú€`ÆŒ¢‡å–ƒ{_w(T ¤ìNálšƒ¯ÜOoØØØ W¯^¼œƒE˜4h¹HÈ6RÖW–¶)S¦ M›6¸pá-Zdø ô¿?Щ°i›[ê0KK8wtFáãB<9ûÄXI¥à+wÅÓ=zô§7žIƒ–‹„l#e}eiS©TX³f ¬­­1kÖ,DDD7x}@à焆#FÕ«|Pªˆ{?w@òÎdãÎù|åNžÞ(& Z.²”õ•§­Aƒ A~~>ÆŒ­VkÚ‰|}¯¿.šâ8x<ÈÉ–-Z´š5~ùî‹•²3…“›VøÈ<½Q>L´\$d)ë«HÛ矎–-[âìÙ³øé§Ÿ¸9¡R télÞ\4í±d д)píðᇰná‹*n‘õ5ÓÖVüäîàÁƒòôF90iÐr‘m¤¬¯"mX³f ,--\ª….'¸¹}TdÎ/'ÖÖðHÝHéô50wnѺk#á#wÛ¶m 4ˆó±Y‡Iƒ–‹„l#e}•ikܸ1fΜ‰ÜÜ\Œ;:Žû   eK`ùràáC¸[4mœÑÈä> \çNžÞ¨& Z.²”õé£múôéÀ‰'°lÙ2~²³ƒÝ´a°«o5ê wâl“ú€p»âéž={ÂÁÁÓ±¥“- ÙFÊúôÑfii‰5kÖÀÂÂÓ§OGtt4ïq¯æH©;Ú¤> \ç®xzC^½Q6L´\$d)ëÓW[@@¾üòK¨ÕjŒ7Žó¶ ÏSbÐ;SLêÂeî233±cÇØÙÙÉÓåÀ¤AËEB¶‘²>C´Í˜17ÆÑ£GñÛo¿ñP¥eX{[#ót& ’ž™w6°—¹Û¸q#rrr0|øpyz£˜4h¹HÈ6RÖgˆ6+++¬Y³*• Ÿþ9bbbx‹K¡PÀ½¯;@@Êß)eí Wú÷ïëÕ¤2ˆË—/™<žTaÒ å"!ÛHYŸ¡ÚZ¶l‰iÓ¦!;;Æ {±-)‡¸÷}fš£"*èrEÏ> •qúôiܾ}­ZµB‹-ŒGê0iÐr‘m¤¬Ïm!!!hÓ¦ Ξ=‹¯¿þš‡¨ŠpzÓ .H?’Í=¯‚ŸëÒ\Ï> •ñ믿&Nœh¨Œ— & Z.²”õ£ÍÒÒþù'ñí·ßâðáÃS´ 4ãÇÇ£GÈË]†.]] ´U"õŸTèò ¿”¾Jú€ Z5`øpàèQà?-:®dzC.V“- ÙFÊúLÕöã?¢aÆ8pà.\ÈQTOQÙ©àÚÍÚ,-2Žþ(¬rõ•Óütî Ô©Ì‹#›7ãþýûxóÍ7ѨQ#ÕH& Z.²”õ™ªÍÎÎ[¶l ¾úê+œ?ž£ÈžâÚÓö¯óÐÐCßs}@°nðæ›@t40s&~>0±ysƒû€¼Œ0iÐr‘m¤¬ m7Æ?þFƒ¡C‡"33“ƒÈžâÖ£èÇàB! ÔggŒ?DFâ^Pvpðî?Üäe¹+6 IDAT„Iƒ–‹„l#e}\i›0a €èèhL˜0Ó[Á­½­aߨ9wrmØò8£õÕ­‹Ùj5´>9ÖFôyaÒ å"!ÛHYWÚ ~ÿýwøùùaëÖ­Xµj'ããÚã¿i¯¢ÕŽ?þø˜¼l™Q}@^F˜4h¹HÈ6RÖÇ¥6gggüùçŸP©Tøè£pûömÎÆvínÜ<´±úfÏž N‡iÓ¦=í»a`—"ºFŒ(t22fcþüù€êÖ­K©©©œŒ©Í×Ò ‡tÂþi󴜌Y7nÜ …BA^^^¤V«+Þ93“hÅ ¢Ö­‰ŠìšÈ‚¨_?¢½{‰ yUlÞÂä´\$d)ëãCÛÔ©SÑ·o_ܽ{ à¤_‡ÒJ —Î.ЪµÈ<©Ò}!!! "|ùå—°³³«xç ú€€£> ,Á¤AËEB¶‘²>>´)•JlܸÍš5Chh(&MšÄIѰx:u¿þS††ê»zõ*þúë/Ô¨Q&L0èØçû€€£> ,Á¤AËEB¶‘²>¾´ÙÛÛãï¿ÿFµjÕ°råJ,^¼Øä1)ª¯¸ùSpp0lll :¶„ÿú€àßMîÂL´\$d)ëãS›··7þþûoØÚÚâóÏ?Çž={LÏÆ×v 힃¼Ø<½Ž1DßñãDZgÏøúúbìØ±Æ†Yû€°“-ßIÈ6RÖÇ·¶–-[býúõ " :ׯ_7i cÆÕ 0iÐr‘m¤¬O(m*• k×®ÅÈ‘#víÚ!44Tïãõæ(K_\\þ÷¿ÿA­VcöìÙèÚµ«aÁ ‰B¼ñ°v-ðöÛBGóL´\$d)ëR›J¥Âš5kðá‡"99]ºtÁ‚ ôº-\ß» Ÿ×·Þz 1112d‚ƒƒ óL´\$d)ëZ›J¥ÂÒ¥K±nÝ:XZZâ‹/¾ÀàÁƒ‘UIÌùMg(­•ÈÍiË7ôgõÅÇÇ£S§NˆŠŠÂ Aƒ°aÃ(•LZŠhaòÝ”ï$d)ë‹¶Q£FáìÙ³¨U«¶mÛ†æÍ›cß¾}å^M+m”p|Í𠲝e—;n±¾ƒ¢yóæ¸wïú÷ï7‚-/3L´\$d)ë“¶€€\ºt ½{÷ƽ{÷ЫW/ôèÑáááeîïÒÉ~´ü>˜9s&ºw”|øá‡øóÏ?aiiÉ‹†—& Z.²”õ‰M›««+vïÞ¿ÿþuëÖÅФILš4 —.]*uEíÜÉq4ã…q4 Ö¬YƒFaîܹpppÀÖ­[±téRÙœy„Iƒ–‹„l#e}bÔ¦P(лwoܺu ,€½½=–/_ŽV­ZÁßßÓ§OÇ… @õ*2OfB›¯Evv6>Œ)S¦ nݺ3f Ñ«W/\¾|Zšô!‘ܨòÁP½zõèÑ£GDD¤V«ièСDÓ§O/µoÇŽ…Ñllß¾]èxEÊúXÐöøñcZ¸p!µmÛ–”ús°p x•Í ¯½ýöÛ4þ|¡Ã畾}û B)DsýóÏ?£}ûö%U¶nÝŠ¾}ûâ×_Ezzz©ŸŽfk¾"*•JèxEÊúXÐæááO?ýgÏžEll,.\ˆîÝ»£aÆ€ HA l-lÑ A¼óÎ;X±bâããqèÐ!QþBà’ÌLýÿeÌ^vŽŽÆ¤I“Jm9r$† Vj[BB:uêðóóC||<|}}:†û»êC~~¾Ð!ðŠ”õ±¦Í×ן~ú)>ýôS@ÖÕ,\l~®­]ðÂþ¬éc³t­Zµ°ÿþr_§ÿŠ>>>ˆEûöí Ÿ’}RRRJÌÛÉÉIrsÒ™™™¾G¬#e}’Ðøßÿ¾÷âK’Ð÷™™™%WÎ?8šÒ(ˆè€W…dΜ9Ø´iÚµk‡Ï>û µkׯøñãáììŒ*UªàÛo¿:D³"ƒÖ‡œœŒ7ŽŽŽpqqÁüùó…‰SŽ9‚Í›7C£ÑÀßß3fÌ:$NÑh4èÝ»7:vìˆiÓ¦ §‚ƒƒ‘žžŽjÕªaÖ¬YB‡Ä)‰‰‰øä“OP½zudeeaÕªUB‡d2 ˜5knݺ… . ,, ³fÍ‚­­-z÷îAƒ "[Ëì**JÎ;ã÷ßÇš5kpìØ1¡Ãᜠ ÿþB‡Á ;vìÀÝ»w¡R©àââ"t8œsñâEtêÔ ?þø# DWL3ooo¬^½ºäÎä `Ù²eذaV¯^-ptE0eÐ ðööð´p(EÖ¬Yƒ>}ú§?~îîî¨[·®Ð¡ðÂ;wТE üüóϸyó&¢££…‰S:vìˆ7"00D$¹º<|øžžžÄ³‡)ƒ..x¡p(-Z„œœ|ôÑGB‡Â)ÄíÛ·ñóÏ?cïÞ½õ+f¸ºu„sssCFÆ‹wã±ÌÚµkñÕW_aݺuðööÆ7„‰s¼¼¼ððáC€öÿÛ»c…(ãH•4Bzïál‚˜*eÀ:…¥`ðj!)¼ƒMK>ä¦QØbÙ~— Ìsü~'xÕG˜ ó^/ÏÓ|{»3è/Ïç³6›æó¹¢(Òn·ó=Òè®×«n·›V«•ïQF5 ƒŠ¢Pš¦z>Ÿ:¾GUÛ¶ªªJÓéT}ßët:)ŽcßcýËãñPY–º\.Z,Z.—Ún·J’DY–É9ç{Ä÷ 4|’·:â€OB À( 5M£õz­®ëäœûÕÚ'À ý\´æy®ý~ü[F°î÷»&“‰©-'À_héx)_}õ•Ö¾}{mâĉÚ3Ïý”ž›5 8y’‚ô[oQÛúõ@z: i@|¼ù5è¿k §‡¸èÃÅ…‹ .ª d€îÔ‰’„£GAA@a!0|8=çã´jœ;GÖ­ê×22€/¿¤¶W_¥ÿÎÉþój[»–F॥@B‚}.œâ¢.€¸¨‚’ºIJ^wàé 4j FϽöàí ´l ̘AmO<4lH£ê¡C©­aC Iàôi ¨ˆÚÖ¬¡ŸMK¾ù†Ú¦N¥Ñö¥Kô<$%Qx%8ÄE..\<qQ%´=IB“‰‚-˜§¸‚‚€Ûn£Ço¿MßÓ®a˜4‰~I pË-Ô–—G£òäd Üðî»ô³‰‰ÀK/Q‚㫯è¹ìlë÷¹NÉq)@\TAÉè°×òô4 Ç={Ò5<<˜/\H׈àèñàÁ Ožzõ¢èo.U½gðóÏôØ\€ïäI`÷nzìÌ%Üœ’-âR.€¸¨‚’Úˆ„4· ãÇÓõÖ[;ï¤Ç´iÔÖ 5ÐçåÑuÇàüyzüÐ5.κòÄQSpœ’-âR.€¸¨‚’šãNÂ.]è¿{÷¦¹qX¼˜®Ýº}ûÒª‘ˆjÛ¶ ðºRKðõ×éúÃÀôxïÞš»p@\ÊÃÅUP2@«¶“°cGJHšLÖ¥#F×^K ÈAƒ¨mûvš'/(, ¶/¾Ž§ÇÇŽÕÞÅUˆKy¸x⢠J躰“0,Œ–þùø&PÛë¯-ZÐ<õÃSÛÖ­@p0pêMmK—ÒôII - ¬­‹3—òpñÄE” ÐŽLÖG&8Ì£ì¦M­«M,êÕ£5Û÷ÞKm›6Ñ\w|¼uƒÎwßñJ¶ˆKy¸x⢠Jhw*7j><&* èߟÿë_t=s¸é&z¼f ¹lÙB;'ÀÈœ?\\¸x⢠JhŽIBWF׻﮿ž’S¦Ë† ´î»°xáú¾øxÚêîJ8%~¸¸pñÄE” Ъ% ÉôèA.³fÑŽp‰Œ¤bPÅÅÀ‰´‹qÏ:ôÀÕ.Ž‚‹ @\Tu€Æ’%KÊ%%I¨#]¼¼¬Kò-¢M2ÅÅöêºÚ/µ‹ .ªÀ:@W„$ õq–Ë‚´ ýãiê¨zã‹;ôKuá∋*( ;†+V &&«W¯$&&Zn´ù#“+Ú¶mÛfÈïu¥‹—µDD$bß¾\¼ñ†ôKuÛRSS ëq©¸->>111˜={6233Á “¦iût5ZDÜÜ\L:ëׯǰaÃðÑG¡~ýú7n–-[f´žÛòÃ@¿~@ãÆÀGY+Õá[X }}}””,X°õë× IŠp•ËÝwÓZê… ©¦5`[öÔ•.öÀÅ…‹ .ªÀz]Üþʹ+¥¥´†úÀà“O¬õª;šF»iÓÒèëÔ)º;Æ+¶(¹Õ›[’Ð×\Ô`\íb®û‘œ ¼ÿ>½é·l† qï~áîÔm—ÒR:ÔtËà²õö»ë0 ‡ d€æ¶“ËB{£\FŒ ë?ÿIsÓFºèÁÅ…‹ ®‹¦gÏÒý“'õðéÓ@QQå¯Ó¸1ÕXÚ´±^ýµöÿ?ŽDÉ-; õ1Úå­·€F€¤$ -­#¸tÑýb†‹À×¥´Ô€Ë~¥¤X¯ùù•¿^‹¶WﱟŸþÏJ€vÜ’„\ÚíÒ¨MzÒ¤8Ò/=ã\JK¿ÿ¶ ¾{öÄ!;»;NœRSéÐäŠ :wÚ¶¥Ò¹!!¶Á·U+:ë³® d€–„úppiØøï ;fÎF¦ÚÔF¡_>€ó\JJè(¶²£Þ²_©©tÚÏU6–GÍš×]G¸ìWX}5jäm¶( %I¨“ Ø´)QQ¾†g€O¿pñjçRRBó¿ÉÉô•”D×£G)W6ÿT>ø¶l™‹Ž}Jà+JhIêÃÉ%8˜\Ž~û 3Æ8.ýÂŨÚEÓ€ ÊáädªxXÑ4D‹ÖïÕ84Tî71‘O¿pCÉ-IB}¸¹sço¾i¼ ¸xV—œàðáòA89™Î°Ô#0&îиæëWD„õúš¸åQ2@K’PŽ.sçRbhÉ`Ô(ÀÛÛ8£1ÊCÓhùÙ„“’€½{ãpæLwœ:¥ÿ3 P}ð«ƒpd$hGÂåþpDÉ-IB}¸ºÌ›G™v#‚óÕ.Fâ ìlààA`ÿ~ Èû÷ÓWùÑpwxxШ÷škÊâ6m¬‘œ —ûÃ%´$ õáêòüóÔvî‹èãcœ‹‘8Ò£´”’reƒðþýÔv5>>@´:âÚk)‡„ä¢sg_KҸ܎( %I¨g—¯¾bcwßu}€æÒ/5õHO/ˆ,_  ÂÃij¢K È]ºíÛžž¶ß—˜˜Šúõï€ÏýáˆK\‚¹°@s¢æÂÿ‚-99ÀÞ½tˆï»vÑ’¶«ñ÷/ˆ£¢¨]¨9Üb‹’#hIêÃÙÅÖÛ}ô0s&ÍyåbW{”–‰‰Àï¿[òÁƒ´ÎØŒ‡Щ“m îÒ…–¬Õæ—>x¹pCÉ-IB}¸»_|áú).ýÒ¦Mw¬]k Æ»wSÉ˲´n ôîmýêÑÃ9›7¸ô ÀË…JhIêÃÝ%$„¶ÿþø#îªUFô‹¦ T~õ—_( §¤ä°zøú7Þhƒƒ]ãÇý½"JhIꣂËÖ­TìÆË…ï}€›onº èÙàŒ€“ 7XŸIXÜ’„\PÁ%?xôQ`Áã]ªKN°aðâ‹´Õ9(xðA:êëðaúdðÜsÀÿýïß~£e…·Ü¨qŒ€“ 7d™ TÂ… ÀÚµÀš5ÀƶE‚ÂÂèx¯!Ch¤Ü²¥qž‚cà[”œâ8½õþx5-o‰BÈ vðð2‡*.;wÛ¶ÑH:<ÜX=ÒÒ( ¯YlßNËá:&éÞ{­A¹]»ê-uSåþ¸N.ÜPrŠÃ7uzϺa·Dâ@à`›çÎìNÃßq§¡•j.qIMMuÉï±U\üýûîsÝŠ{ú%9˜5‹’w!!4U±u+м90q"ðóÏ´U}Å à©§¨†Eu×!«r\ 'n(9‚.hÛ±¾ÝÐøädDÜ`ó\òø÷0èछš"Õ? ÍÖ}àmæÂ)Á¡ŠKT-CËËêÕ3ÎåüyÚ‚¾t)m1Ó®ý¹ÿ~Jô9ªh*÷ÇÕprᆒ#h¯¨ Üxh!º\ÞÁqÚ<§µFBƒnðÕrp}f,üÛ6µ=ô&NœˆÔÔT„††°o'¡——Mp€Óï@Þ¤lœXŸ€‹Û õPÛ-¦‘›¢MÉI`+9#ZIL4ј™š µ]ƒÍ)Á¡ŠKv6ðí·´êáž{œçPZ üïÀ‚¹øùg_K²oð`Áßw¦wªÜWÃÉ…l§8ÒÒÒ|%‹†“eJzÕf'aƒ¦ ÐiTw X<×ÜÍsç~‹íÍÇŽˆ±ø³Ãƒ–à ûž_Š€°Æ8æÝ;ÚÁ‘ÿ;€W‚C—† )Ñæ¬à\R,_N£â{î6lHEPðÊ+” ܺ9ÒµÁPçþ¸N.Ü` CBB’’HIIAHHˆå¹¬¬,¬X±111X½z5 11¹W äšç´ªÛÖeÒ4z¹/Y†æ1Ól¿ÏÓ[<Û eaÿûö[|2/d"¶ó?ðù]o iåŸ8øçÁZ»Ô¤ €!¿·Ú.ÙÙˆ›>X»Ö¡¿·¸˜5+;æâÑGC‡âЯ‹˜””‹÷Þ²²Œë—Ž;v?Ä¥â¶øøxÄÄÄ`öìÙÈ̤OÊlÐ4mŸÆœœmäȑڤI“´—_~Ùæ¹»îºË +M»x^Ûýöz­0§PÓ4MÛ»w¯ö××{5&h ý1ÖægrÎç¸ÄmïÞ½.ù=öàJ—‚M[´HÓÂí·að`MÛ¼YÓJKùô M—Š;v¬Ñ 6°MV·‰üÌÔL$Ìߌü_vÃ?i7rî~¿˜`y~oà­hvùRÃÃ4xúÎÏúž•¼b'#ƒŽ Ú¶­ÕKýô0y2­¼€Ûo¦O ¨½¦à~p‹-l“„•Á­Üh@húüç~÷—{^+ÕP¿0aÅÇvøNûÑc,ÏŸÝwE9…îæ.É–J]JJ€ãÇÌÌèS§€)S€U«è¿ï¸˜1èÕ«š..„‹ .ªÀvº2¸•­ “‡ ×eý†‹‰çñû‹«ql¿l’ /|Šàmq²^8~‰|)[tNýt‹+©Ô¥Y3`ìXàýºÅÅt*K§NœƒƒiKö?êç*]\@\TAÉ­b¹ÑÀÍÐç?÷c@™Ñ3˜Z6G’OW„ŸÀÀ#ËàÕÀºµ.ç\~yb)Òvœp¨‹+¨Ôeñbà±ÇhIE58tˆÊvN™B¦þóŸTøðÊ·]sé.€¸¨‚’º.•´|:äíCzòìþÿC›¾¡–ç—ìÄÀ%ã<0G|:cçó+œêâH*uyòIàË/ÈH»_oåJª“±oп?¼ÿ¾}ÇAqé.€¸¨‚’º.žIØ42=ߺӦ- slë>‡½;£}Á_å~&î?›péx†Ã]A….……Àüù4mGµ¡âbॗ€‡¦Qó;ï±±t€j­]\ @\TAÉÍ-Iè,Úß}-ïƒÈüƒ8¹ýº¼:ÌòÜ¥ãèòòhØ.ñMnÂŽ ËœêR]*tñòºu£ƒúªàÂJþ½ÿ>Ф Í3¿þzõëcpé.€¸¨‚’Z¥$¡£¹1 [Z?Ïç]ÈÁo‘c‘îÑ Ý.mCÉî8—´'Pœoܲ û%7—æ({¬ÒŸ?}èÛ—Ž’êÒس‡‚µC]\ @\TAÉ­b’ÐÑ´êŒÉŸ£YÁiZ¶ ab.PZŠN3Aó.Î9HO·_V­¢„S¦Ð¤òUwÞ ìßO­®ZÔ¯ï$à∋*( ¹% ¹ì‚ºÚ%¨ss Z5Ùæ{J KÐ1æ=´(ý%1Ó°+èܶÖá[ÏuûåÁii]a¡îϼþ:ðÇtŠIL àããDà∋*(9ÅáŽIB{°ÇÅÃËé_þÛºOÁy0A³ Î%…%Îqùáо×_´hQîûþ™N1iÜØ1Ó•º@\TAÉ-IB}ìq1y˜ÐiTw Þ;Ay'Ñvë2›ç¿f v5†=ïþ„ÒâRǹ lÙèüc¼pÁº¨cñbª¡äH¸Ü#.€¸¨‚’Z’„úT×ų¾§Í±^— zê7ô:ÿ#zL¿ ½k¼úÃÆ%6–&“_}U7ú¾û.pö,0~<ðÀ5úuö»@\TAÉ-IB}jëâíï–™ÉØù üé?"úجþ(¸\P3__`Ü8  üÏŸ9DGÓ·”9vÒ¡p¹G\<qQ%4·$!áRÏ·ú}øºfþ‚~¿Ï±y.¹ÍMø½õ}Hþn?}•Ki)ÍèуŠix{—û¾Y³€ü|ªéÜÜIgôr¹G\<qQ%´$ õq´K=_ke½ çÑ,7}ÎÄ ýƒ×cûõÏWíRR¬^Mµ7tênœ;|ú)%_|Ñ¡êå]ÀÅUP2@K’Pgº4넦G±ýy8ïшˆ¨ÜÅÏ(*¢êFO?­û=kÖЬǸqT"ÚYp¹G\<qQ%´$ õq¶‹·¿7­šŒFg¢ÏRkÐ-Î/ƶoàÌžSV—?ÿ¤uÏ'Nõêé¼ ®ú6gÂåqñÄEäLB¡Öüòø \öòáÝ}ŸG¯‰ÝàýØ#´o»qcÝòs/ÒrèÀ@*ŒäéÆG4 |à[”AK’P£\¢¦Ƕ>¯ øÛpvá÷È]±hÚ´ÂÚ ¿üBSÔwÝåüàÌåqñÄE” Ð’$ÔÇ(—&M1ø·÷P8éìèû"B~]ÔÎ+ý™¿®œ?Э›óý¸Ü#.€¸Ø iô†Ô\[ñÑ” Ð’$ÔÇ0—Ë—_xn®“‡ £¢ÛœØÇ—Û•xè]¯½Öùz\îÀÍ]²²,ïYôQ®woÊ—0CÉ-IB} sùüs* I«6®¸d¦\B÷ï^Å_=…ƒºí˜åGÌ#hWh.÷ˆ‹à†.ÉÉÀóÏÓG¶ÆéLL3^^ÀSO™™Î÷¨&JhÙI¨Ë]Ö®¥Dà /”ûxؽ{w„5Fê²-HhÐ ]/ïÀ™G^@–ÄDš¢Ö©›äp¸Ü#.@wIO§÷fi™Om—/sçÒ©ÃmÚ”ŸÎ˜=› y1ƒu€ž^¼ù ´êÑíøÞ-ôMq‰.—{ÄÅPÜ%#ƒFȋ۶_¾L#äÐPÚýTvý½—•L «µ¯+aQ°ÿøñã˜4i’MÛ˜1c0räH€éªa–$ õqºËûïcÆÐ›ß<‡WA¡õÊ\Šr‹püñè¾cž$«çâJ¸x »Üq×4Àßxüq ¾0jœÛ¶uЧ°A‡‡‡cýúõ6_æà ÚUóE X±bbbb°úÊv´ÄÄDËG%sÒÁm«W¯6ä÷ºÔeéRÄíÝ <ðß}¹ùùÀ¸q5vñðò@þŒGà×ÜOí~©f[\\œaï å\ŽAâk¯!÷¿ÿµýY¹­[=†¸)S€’ëÏ6k†¸ôôj»ÄÇÇ#&&³gÏF&·D¡¦iû4¦Ìœ9SëСƒ6nÜ8íÀ–ö±cÇ'å.iÚÿþG?ùÄú¸´´ö¯]ZªiçÎiÚ_Õþµ„ºÅÙ³švÍ5šFcdM2ÄöùœǼ+€[la1ÅQo¼ñÞxãríÜ’„\ÎSsˆË¹s´Ü(2øö[ à‰'ó¼¿Y½J] hùFh¨KÖžr¹G\<&.gÎ?þˆÜîÝákÞ±Dõg»t† î¾ÛögŒvv1,¦8ª‹$ õ©•ËÁƒ”d©W˜9“ÚÞy‡¶j{{Óš8G¹øøÐR§“'+<@Ö‘p¹G\<ƒ]öìn¸hݘ0©e“}&½ÿüø×¿€¾}ód€’Z’„úÔÈeÝ:ºž>M+3š4&L ˜mÛ9Ç%"‚Ö©º`Íåqñ\èRTüô]Í´hÄÅíÚÏ>‹ŽcÆØþL ßsu%´ì$ÔÇn—ôt:e6o¦‘ì!Öì÷ Aµ^ \¥‹¹žôÑ£µú=qq\<¸üù'ÕoÕŠV^lÞl}.$„îû‘#ÀܹˆÓ9iG ” в“PŸ ]Ì;ªÖ¯§Mš_}EmS¦Ð´†§'pÛmÎw1ãÂÍåqñœàrõμ„`Ñ"š66¬ü¨¸];Ë €S¿pCÉÍ-IÈ—ÌL´VTÓhä²t)ýØ5‹ÚBC–-뢇 4—{ÄÅp‹¦»vÓ¦QR9#ÃúÜÝwŸ}üý7M£õïï\—:Š’Z’„ú¤¦¦Òá¬EE@n.0çÊ¡¯7Üœ:tî LJmeF0Ns© s€>rÄiv»¸.€ƒ\¦O§*psæÇŽ¿þj}ÎÏVÿØ‘\æÔ/ÜP2@K’ð GŽÐ|²¦Ï=G.ÀŽ4÷×£}ßsÏÁÁ«¹£¦TÙ/:Ñ´ÊÞ½N¯ÃË%9ÇŨKf&ðý÷¶mwÜA«,>úHK£Ó\áâF85@Ÿ8qK–,Áܹsë°×uË$af&cxûmºþõ°q#Þ¼}Œslpj€œ®õëÓ23Â)Ùb·Ë€tuâ4—~1Ô#9™æù#"€ÿÝËÅúõ­K2 €ËýáˆSttt44h€Ö­[cùòå{Ý' ‹Š¬»ÌËþÒÒ¬u)̇Ÿ=jÍ\ÿðrÚ¬™õŒ³ž=©­sgäöìImŸN׈àÎ;éq¯^5ó¬!œvdÙí2p ]ËÖj0ÊÅÉêqú4mïoÔ˜>¹5\³ì ¸ÜŽ8-@Oœ8_~ù%’““qòäIlÛ¶ S§NÅž={jýÚå’„%%À¥Kôø×_)È^¼Hi€¦Š‹iÛéìÙÔöõ×Tw¶^=š–hŽ8;›VT4nLmÏIm=zÐG@“I7sJp(éb2Yw ­_o¬‹“q‰GRm(éÛx÷]k»ÉŒm™_æÒ'/n8-@oݺ~ø¡e´{àÀ4uÐ6ã‹ÇŽÑ//úè`-øsï½ôfôó£) € Ï·nMÚ\‹âæ›éÍêáa­ Q8%8”u1hsRÕH'ât³gé$’ï¿§­ý7Ü`œK5àä “¦iûtuô geeañâÅ1b„¥-ÌAGž>Ëbb¨Œ¦‡S§ÑWŸÒ½¼pNpjÆ”)4™<Ùš¬ìfܸqX¶l™ÑœÝ5j„©S§",,Ìòå(ŠÍË€gN e]||€[o¥ùs>À('âPÂBÚT2i’mû‡/¾XepæÒ'/náj€²; ŒÒ.NœæàÒ/󨹓 MM™B;Rkðº\úàå %4ë„¢´‹yiâºu/?Ê¥_æñý÷´óoÈ:Z*4Ô8ÀÉ…JhÃw–S‚Ci—Ö­îÝi zr²±.NÂa3fÿý/íXíÜÙXÀÉ…Jè:_n´†(ïâ¤i.ýR#“'ieRÙ%ˆ~~´L´'âp逗 7Øè3gÎàñÇÇĉñØc¡¨Ì±íÜÊrAy'h.ýR-ÒR`Þ<àÚkµk>0ÎÅÉpráÛݪU+,]ºÑÑÑhÖ¬’Êœä IB}”w¹á E ªËaÞj”‹¨–Gv6­ÈÈˣʆærF¸8N.ÜpZÁþêpüøqLºj¹ÐèÑ£1jÔ(ÄÇÇãòåËˆŠŠ²<'IB}”wñð dáÒ¥ÀÏ?Óñ]F¹8jyøûSq.OO:¬ÁH'ÃÉ…,FÐáááX¿~½ÍרQ£°uëV,Z´ÑæÊWHHHÀŠ+ƒÕWêm$&&Z>*™“®h[½zµ!¿·ÎºÜuäÆÄïâම¸¸Š¿/+ øøcÄ]©ê—˜˜ˆÜŽ®]]ï©_\И˜Ìž=™æ£æ˜à´„µåèÑ£èÝ»7|ðAÀ‹/¾ˆvíÚà·ÛGp YY´«0 €Š'1(BåtNŸ¦~·mžz øôS£Ün±…Ҹpá‚îsÜ’„\ÎS«.QåµM›¨ˆ¼N÷àÒ/ºéé´éäÜ9šÊ˜6Í8ƒàä SÕE’„úÔóI3ªnÇ¥_t=š6¥Ñó¤IT"ôškŒs1N.Ü`;ÅQÜ>†&1èÔ‰J½îÞm´óÑ´Z­i·Ø¢äZvêSg\Êñ?{ÖXGËæFŽ´Ö* Î\úàå %´ì$ԧθ˜LÖÚ?ýd¬‹é Ür mÓ~é%ÚŒb” “>x¹pCÉÍ-IÈ…:åbÐ?þh¼‹ƒÈ}àªD×»7°aƒ¡år¹ô ÀË…JhIêS§\nº‰ ÷ÿôMf¤‹ƒH:•NÖÞ²hÞÜX&}ðrᆒZvêS§\|}ÁƒiË÷ëâ :ÞsðÅôÿf´ “>x¹pCÉ-IB}꜋ƒ¦9 ë—S§è$ø+sÍuîþ8N.ÜP2@K’PŸ:çb^]ËmH¿œ9C¿ý6zb”Gˆ‹( %I¨Os‰ŒÚ·öí£íÐFºT‡‹é´“ädªåüÄÆxT‚¸¨’Z’„úÔIó(zÃã]ì¥Q#ªãuÒÅóÐ.ï—úõåË©\¨··q• .j d€–$¡>uÒeÐ  A:¯Ì©:†¸TE~¾õ±—àãcŒ‡ˆ‹( %I¨OtiЀÖD_¾L›<Œt©Œ5khZcÿ~c=ìD\Ô@É-IB}ê¬K-§9œÞ/û÷cÆ'NÇçQ ÄE ” Ð’$ԧκÔr¹Sû%/Vjääï¼Cð¨&â¢l öW†$ õ©³.íÚQ…»ƒ“'ã\®¦A :šþx¼úªqÕD\Ô@É´$ õ©Ó.æiŽñwz¿Ü~;ðñÇU– ­Ó÷§prᆒZ’„úÔi—;î ëÆÆ»@I ".j d€–$¡>uÚ¥_?:@vÇ:ÄHM†¦L¡9h£uÞeÀºîØaœËñã4röð¾ü²Z¥Cëüý©!œ\¸¡d€–$¡>uÞ¥†Ú¡.M›<¼öŒb”G-5S½u8{hÙ’–Ü%&ë"'q×I¸Å%GÐ’$ԧλ´hA%H“’€óçu©Ap®ó÷§†práËŸŸ§Ÿ~'NĨQ£PPP`ó¼$ õq ó4ǯ¿ºÖeÝ:à·ßjõnqj'n° Ð>>>øôÓO¦M›"%%ÅæyIêã.ÒµóеvÉΞ|èß8z´Æ/ã÷§prá†áúøñã:t¨Í×7ß|ƒƒb̘18|ø0Ú·ooó3’$ÔÇ-\Ì#è_~qËûïÓò¾G""jü2nqj'vhš¶Oc̬Y³´üѦmÈ!Úòå˵5kÖhß}÷¦iš– åäähš¦i{÷î•¶ºÚVZªímÒDÓ¼¼´„½{ÿ{÷ï×rÂÂ4ÍÛ[Û»n>6‡¶ÅÅÅikÖ¬Ñ>øàmøðá'X®â8vì>þøc”––"==óçÏG“&M,Ï=_ýµ†Vrssá[µ°ÎÄm\FŒ¾ÿز…jE;Ûåòeš¾ýöš¿†#<ˆ¸è#«8ì ]»vøøã1oÞ<|óÍ76Á$aE¸K5ç¡kíâï_ëàì".jÀ2@W…$ õq—jnXáÒ/\<qQ%´$ õq—ë¯üühÚ¡´Ô9.……tPÀ·ßÖ@ÐNB\Ô@É-åFõq// kW +Ë®ÂI5rùï €+j è@'!.j d€–„ú¸•K×+yí?ÿt¼‹¦³gÓãþ³šbôp"â¢JhIêãV.×_O×}ûïò÷ß@Aг§u¾Û¸Õý©œ\¸!gÖN ·r©ÆºÚ.­Z TœÉ‘ÜêþTN.ÜPr-IB}ÜÊåºë¨&³#è¹xxP v nuª'n( %I¨[¹øúRe»“'ôtc]ì„‹ .ª d€–$¡>nçbž‡®bš£Z.#GÓ§Wë¬A{q»ûc'œ\¸¡d€–$¡>nçbç<´Ý.ÇŽÑòºo¿||j)W  .j d€–$¡>nçbçJ»]Ì›RFvÊi)nwì„“ 7” Ð’$ÔÇí\ìAÛírìæQ£j)VK .jÀ²š]Up«8%„¦Ñ1X—.QQýúõkÿšgÎ8|õ† Üb‹’#hIêãv.&¢‹Š*>D63¹IIö¿¦ƒ³ÛÝ;áä %´$ õqK—Êæ¡^©Õ8}Å™¸åý±N.ÜP2@K’P·t‰Š¢«Þ:2˜?'L¨ü5NŸžz ظÑñ~epËûcœ\¸¡d€–$¡>néI×#GôŸ_°qÆQ廊øé'`ñbà‡ïW·¼?vÀÉ…JhÙI¨[º˜®(@?ü0º¯[4jTñküü3]o»Í±nWá–÷Ç8¹pCÉ-IB}ÜÒ%(hØ´¦•>0’„Ÿ}¦ÿóšÄÆõêƒ;UÕ-ïprᆒZ’„ú¸¥‹ÉD£è¬,àüùòÏkRçεžc¨÷óÉÉÀöíèˆ[Þ;àä %´$ õq[—ʦ9L&t\°¸æÚÆ]TTþ{üü€¾}ë7¾?UÀÉ…JhIêã¶.UÌCÇÅÅ~ÓqYá¶÷§ 8¹pCÉ‚ý’$ÔÇm]ªÐÝ»wÌ>II@|<ðÈ#4-²z5%[·vº¦ÛÞŸ*àä %GÐ’$ÔÇm]ªÐ—’àßÿ¦Óº ;€Ç¦Ms‰¦ÛÞŸ*àä %´$ õq[—*´ÅÅÓX² šÏëÖQ{ïÞ.tãûSœ\¸Á:@¿óÎ;:th¹vIêã¶.­Z GÚçRXtêD…‘ÀÛÛÉ‚xˆ¸¨Û½qãF´7Œ®B’„ú¸­‹‡AG_éUÎ¥~}šÚxöY sgà€‹ß~sª¦ÛÞŸ*àä ÃôñãÇ1tèP›¯¯¿þëׯÇ#<¢û3’$ÔÇ­]ÌÌuFѺÜtG›]æÌ¡Q8ìÙãE·¾?•ÀÉ…†èððp¬_¿ÞæËÛÛ—/_Æ”)S˜˜ˆŸÍ[q¯’’‚+V &&«W¯$&&Z’ æ¿È®h‹7ä÷ŠËUmW¶r'ÆÆVÏ¥~}j{øa$úø wË`ãFjÛº‰ sÎÍÍ5ì~ˆKÅmñññˆ‰‰ÁìÙ³‘™™ Vhš¶OcÌСC˵ >Ü}ŒV°àÖ.ÑÑšhÚŒö¹äæê¿Îo¿iÚåËšVX¨i?Lmqqš–œ\kE·¾?•ÀÉeìØ±F+Ø`øº*~üñÇrm’$ÔÇ­]Ú¶¥ëÉ“ö¹<ôЦ mó.KŸ>TX)/øç?©máB 0Nmùäj+(¨¶¢[ߟJàä öZIêãÖ.æ“PÌ+3*sÑ4šg>w Ñ= Gzüì³@Ó¦À¶m@“&Ô6a­«¾p6¿Ø[ߟJàä %´$ õqkóNÀÓ§«v9}øûo*öoN VÆu×ÑuÈàþû)À·kGëªcb€´4zÞ<º¾pÐY«ïÖ÷§8¹pCÉ-; õqk—À@*ª3‚.çrù2pë­p«Cƒ€UÀ›1ƒÚBC¨’Þ_QÛ‚ôG ´˜?ŸÚΟG.£”[¿WBÉ-; õqk“ hÙ8{–Š"UæÒ©éÿàƒÚÿÞÛn£.3gR[³f´ìïÈëºì·ÞBjr2ÕÿX±‚Ú’’(ˆ€[¿WBÉ-IB}ÜÞ¥ukš~8wÎõ.õêÑ(&M¢?ÁÁÀ3ÏP[d$:öì ìÝ ˜GÒï¾Kß—@[Ðàÿ£kQQ‘öâöïEP2@K’P·w1' ¯š‡6¬_|}­A{ÊòèÚ1‚Ú ²èfͨÍ<ºÞ¶Íúxî\ºž:e]¥’—W+5·¯(‚’Z’„ú¸½‹9QxÕà®»èñøñtÍΦ`Xw6nÞl]8q"]7nví¢ÇæÑwF†n’²œ 8¹pCÉ-IB}ÜÞ¥‚´Kz:­k^ºÔ…b:e1™¨ž`=ñ¾û¬úÝwéÚ®píµô84”®û÷SâV®¤ë·ßÒã©Sé œ8A÷ì!—¬,ýf\ §÷-7” Ð’$ÔÇí]*X mãb.Ié"© <ªƒy­ö€ÖÿǷߦëSOQÐ.-µŽ¾7¦`^TD#qز…æç¯¬,IMMæÍŽ£vs _³ÆúnúžHA¶ysàÑG©í½÷(à‡…o½Em3gÒ´LãÆÀ¨Qär÷Ý4Â7™¬Á½ysúƒš‘aM¢ÆÇÓ÷=K R€Ö{xЖ{ót‹¹ÐÕñãÖ‘ûK/Q°>}øòKëÏjýŽ;j×'N@É-IB}ÜÞÅÃú›°¤¤¼‹¦ÑÐÃü‡ÁÇÇÜ;v¤¶ÂBknâüyj»pÁº™iûvj;uÊé'êÔ“¦iût5Z¤:Œ7Ë–-3ZCàH¯^ÀîÝ4J2Oy˜9žFe]ºÐªà^”–Ò‰‚šßnÜ8tˆ¦¼ÎŸΞŸ>`[”AK’Pqî<´ÅżÄ΀6 pKóÞ\; à ÐôXT”k<ª’Z’„úˆ è@‡À^írê]Í›<\ŒÜ}8¹pCÉ-IB}ÄÖ‘Ñ¥Kå]BBhÅÁÀˆÉý©N.ÜP2@K’PqõÄ“ŒŒò.½{ÓÜûï7@LîOEprᆒZvê#.Ð Ð\ú…‹ .ª d€–$¡>âÝÍ¥_¸x⢠JhIê#.Ѓ¶¸LœHÛ—óó “ûSœ\¸¡d€–$¡>âÝ´Å%&†Šà{{ &÷§"8¹pCÉ-IB}Ä' KJh3BË–Öº.Fî>œ\¸¡d€–$¡>âk€.3ÅѱcG Î¥¥åwº¹?úpráëŠüãxË\då )ær„ X½zµÑ ÄÖ9è2#èÕ«WÓÈ9'X»Ö/Èý©N.™æ}™àe´@e //-Z´°i7ôUOOO£,ˆ ¨,¦¯¯M€¶¸øúÒ—AÈýч“‹hŽ?ŽI“&Ù´=°<¾í¶ÛÐþJ …R'»SS ŒV° .WhÒ„JŽ^)ŽÃ¥_¸x⢠JT³›6mÆŒƒë¯¿…æÍ› Q¶‘sÒ™™™læÄÅE..\<q¹ú÷›GÎçÎÃAó» `1‚Ö#!!|ð¼¼¼àíím ÎXu  ‚³Pb}æÌ¼öÚkðööFnn.>ÿüsÔ«WÏòü‡~ˆC‡!33Ÿ|ò‰etí,&OžŒ7"66¶Üüx·nÝЧOxzzbþüùNõ¨ÊÅÕýòÊ+¯àÒ¥KÈÊÊÂgŸ}† XžsE¿äææb„ ð÷÷G“&MðÞ•c’JKKñôÓOÃËË %%%X´h‘S~¿=.'NœÀ°aÃpã7¢S§Nxî¹çœê‘––†7ß|Ä®]»,íFôIE.®îؼy3–/_ŽââbDDD`úôéŒé—Ê`½ŠÃL«V­°téRDGG£Y³fHJJ²<—ŸŸØØX|öÙg˜:u*¢££î3þ|ôë×O÷9#È\öÒ W÷ˉ'™™‰èèhÜu×]Xµj•Íó®è—•+WbøðሎŽFFF†e}mll,"##±páB„‡‡#66ÖiU¹˜L& ;;­Í'}8‘àà`,Y²¤Üî[#ú¤"W÷ 2‹/ÆÒ¥K±mÛ6K»ýRì¦8*JŽ5 ñññ¸|ù2¢ÊÖ¾pá‚å}XXNš{w’˘1c0räHú«I¶oßxýõ×±yóf 2ÄW÷KÿþýhÛ¶-¶lÙbó¼³ú¥,iii¸ùæ›XÿŸCCC‘––†à+Ç,µmÛÖ¡}Q]—°°0ìܹ¥¥¥¸ýöÛ1tèPøùù9ÝGÏÏÕ}RFöÉÒ¥KqÏ=÷Xþ›S¿ txx8Ö¯__®}ëÖ­X¹re¹‘`PPþþûo´>Ú$œébF«ä´à–-["ËgßU×ÅÕýrâÄ ›ñý>G÷KYBBB’’‚~ýú!%%Åò-$$;wî´¸õ7ŸVíD*r1ãáက9Ý¥"?W÷IU¸ºOæÌ™ooo›)ný¢ÄôÑ£GÑ»wo<øàƒ€_|999XµjfΜ‰9sæ )) ˜7o^¹¹XGóöÛoã›o¾Aß¾}1mÚ4hš†U«VáùçŸÇ´iÓàçç‡ììl,^¼õë×7Äň~yùå—‘ÌÌL,^¼GŽqi¿äææâÉ'ŸDãÆÑ°aCDDD $$wÜqžzê)øøø   ÀesÐz.~~~øúë¯QRR‚ððpËܧ3=¦NŠ 6`èСèÖ­›¡}¢çâê>€¯¿þ3fÌÀ-·ÜOOOtéÒŰ~© %´ ‚;¢D’PÁ‘-‚À ÐBdÓ¦MxóÍ7qâÄ <üðÕ&t+ …:‰9ù3fÌ|òÉ'¬ l ‚½H€ê,§NB@@€œØ!(‹h¡N²hÑ"ôéÓË–-ÃÔ©SY“&ö"ËìA˜"#hA¦H€A`ŠhA¦H€A`ŠhA¦H€A`ŠhA¦H€A`ŠhA¦H€A`ŠhA¦H€A`Êÿ ƒk~݉aHIEND®B`‚mpmath-1.0.0/doc/source/plots/lambertw.py000066400000000000000000000001661316273626600204120ustar00rootroot00000000000000# Branches 0 and -1 of the Lambert W function plot([lambertw, lambda x: lambertw(x,-1)], [-2,2], [-5,2], points=2000) mpmath-1.0.0/doc/source/plots/lambertw_c.png000066400000000000000000000700131316273626600210460ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½{¨oÙUïùë·Ï»^Ñ›«['U•T”\èŽiðAA¢´‰æà%·AäQT’¤¥ý#ˆ! äÒ‰¦H¢ô hMwÿaŒÑ€ B#´›k§ªRu/QL%å9u{ïßýÇZsÎ1Æc®¹ÖÞ§êTí9ë¬ù^s½>ë»ÇœkýýŸ^nݺuëvWÙ&8¿áÅîH·nݺu“6¼ØèÖ­[·n¶u@wëÖ­Û]jÐݺuëv—Zt·nݺݥÖÝ­[·nw©u@wëÖ­Û]jÐݺuëv—Zt·nݺݥÖÝ­[·nw©u@wëÖ­Û]jÐݺuëv—Zt·nݺݥÖÝ­[·nw©u@wëÖ­Û]jÐݺuëv—Zt·nݺݥÖÝ­[·nw©u@wëÖ­Û]jÐݺuëv—Zt·nݺݥÖÝ­[·nw©u@wëÖ­Û]j/v^L{æ™gð[¿õ[øÚ×¾†¿þë¿Néã8â}ï{°ßïñÉO~òEìe·nÝΪiýàƒâÿðñÝßýÝ"ýñÇÇë^÷:|âŸÀ#<‚ÇüEêa·nÝβi@{öÌ3ÏàÁ<üðÃxúé§_äuëÖí,Ú™vqxvõêU|õ«_<ùä“xó›ßœò}ÃyìvÀ…K—ïpå^ýŒ£æí„“tÒØL­½ê¶æ¶ž¿6âžbʺÁÙEk¡’/âd—õêèºb­Ò®]qï=C‘GD~½vÚ¬mo±ÍSÊ¿v“p殺\V…*u–â')[I»v{ĵCøÖÍ=þó·Ž‚gÏý-€7¼Øy1ìÆøÀ>€?ýÓ?ÅÛßþv¼ñoÄÕ«Wñ¶·½ ï}ï{qñâEܾ}[ø ì?^Á¿í"~øm—Šö&hÔ-ó‚,Š{`µ T[xDv:«óÕ?»…7ÿSš†a-ÝÊKa/]Õ N½A• Aj-#ðç_¾…ÿÑ‹ÍPVùµºµ8µ¶s‚%TòþüooáÇÿ»‹~}ÔÓ¿,*í°xÐyփʫã”û¹ÿíYü_ÏÜF·3® /_¾ŒÇ{ÌÌûÔ§>µº½š¹E-•^™Ö µÑÊ£µ5uÌýd #2É*ã¨)¼ uA§{¸×Z­k©@íØ[yñÃ2…²Œ× LJT°ò-`Ç:`uœ¶»q@o1ðªG6_G.d–Ê-ää ¿0/C%?øÚûuš@Ÿó¬}1©i½;!ý'ÛŽzÍÃõ§¢ÚØêc°¶Â)(k"à‘ïÉçK(íÚö¬tÌÇ*)ÜPäû©òâƒÝü«Ð1Á†ô½çOäü{YYôûwž[}O†¹FK½*l›··ž¾ö@l—Ðæ†Y•>çéþYûl=Ì"¤õfŸã]?¯^óÈÁ¢Ú¦-lÕºÑ^ó=y¿ôq Þ¶@ ¹¨½úEÝe¬Tµûœ~ï…>w!ZôJ«ßceN«;cUV¥·©çmmox¬<éø±zÒR8/^¦7uei—9e(›mÛ 0u=Póè|ÐÓ ¢f¼t—€ì^¿Î°u@o°Úõ£ÿ8[¯´—Û¡¯_¡¤ò‚?/=&Ö|ÑúA'”4UP‰§o<ÍÕNp¢ÌÁ· ¡ËënÌé¬1ȵ[U?A——Y€t7iЧlwRMžšmTÏÆÔ¶¶E·†S'fDÂÝtt÷~|óéY£øz°jöÎ.ÀúÄ Öeh§AD8e½u7ЛìN]C‰k7àBÑÈhh;x#„ U½¶Ån‚W¥¥ChÚØ'SMWTµ˜7Ý @ôj#LR/¦YÓñrš7ƒSE{…ƒTÜXC•x±|°Â:Mõ]﯆Œe«.¹;Œ*˜›yíÁÊKkPºÕokèv–€­ËªôtØãv½¾ªí}|¨ã™t=¶¦¥}>cÖ½Ñî¶kÈR«’"¯Q­X0¶`Éoìøõ¹Ó€ó" ‹Û_óSr­Ñ0{Ūs•u:WÈ\%;å„êÿkqgPWÊÅ0ò'Ná—ë–­zƒ­¹?O}ƒ°aì¥*׫·Ý”N>°uAýd §S†3‡Gü?iæ´Sµx Æž:]‚6‡-n«Údõ«|{Þ6P/º=b?À|ÓN{ݲu@¯´šxyÁ;R¤‘¡LýºK@oêÙ>ëØŽVÓÅ6ÖÂyÚ–`æ6µð[,æÀyqžù´êµú[wÑo›„ÒG]µ9h)c‚tyXeº%ë€Þ`[Øq'úàTçñ¸¾A9—ôM«ó ;ð/¶OYI/ÂyÀµô{M[òªóé©G7}¬ æíx¬½¾©eÍ\çEP«²E9 ì(ˆ¤_Z·×­z‹maȉvŠ·ªÝjY¥¨—ÚµÊyu´’n3±²K¯õÝ„³~XT”ò¦óÖRi ÜV?W½`}Ñ}¶€®·e•³ Ý @ô&{AÝÐøtÓP!í’Ðð´ mÝ‚sQÞ€³¹}"ñ-ç)­þ0Ñ¿¢¢÷ŸO,ÒbÜóA¯ð;›n+¨¥K+Ͷnka©ªjµ½V¿síkÒµN/\½ŽÖfvä2T´Á0M£ (ám¹4´«C3…oËÛÿM@^SÞ씎ñê€!K/ÞÞ«,‹?k¥úRû‡(£ûɶg˜Ã•6ºè€ÞdÞ=ÓZvMþ¦ NKz±ŒHWð]Z[íg>ÏÙÝ—9ÎU²9ÚoÜŽNç¢ù´T2i˜DøY`Óé^™9\  åíð¤ÅAäêJ{ °*­(Ø~ioí?ÛWsà°€èMv€^{ÖÊW 2:­Üx“yq†Ͻå‹>:pŽÆÁl©i=—Z¨;Õ$0%(7‡áò(ŽuãÉrë©N™ ¹K–¼¤–«E² #?&“`VÏ90Œ6T[¤»%ë€^iúÕy-iµtQf#,z ¶Ôôâ`a¥ŒN7ýѤÜ*ÎÁÌgx˜LWé‚» ÚÖ1àé…-¼ t<8ó~ót×­¡Á:'›s”—@­wC—1¶)¶gmÓkǰs|:¤më€Þdd\IÖ4­vkþ’ñú&ŒH‚TÄYØš¹¡ã¥š& j_›²Ò¢_z€œá¡=ò2j,h§µ x¹}ÓÖœ´ÚI¯@,†—ÜÀÀŠ¿ <˜Ç2:ÕiryT@¼8s#^GÐÂ: WZEœ(­%Ï®P¯áÁšTa^ÆTМS¤àA,å{¯qG7wqè)yâ^§òÞwÝ4X¶â!\£¾ÝÀÔë;•0±pM¹ 0:ð­–ÓŽJ/ kõg ÄÀÄÓ¾wH'ë€Þ`Þ½y§ ½¶œ eÒL9ŸßL¨rnXAT»1ˆYýÒŠ5`XSÌKÀ6ÁI‰°*ʘ?¨jOÔ)óÓ6b™Hß3‡håa€¥20@Îúi z7Õ·è v@oóªk–TyB¡b5¤¬¸5ŽÆ]Å´<íÚ€rC¿Ö$UµåæˆiÚͱæ +lÀÐ ûRƒq9¶Þ®ØÄƦÝc!i–å‹ëÆ)Óôf¡‘ßò6a·É: WZíZòãwk}Z×*ogÉÍãÖþMóòx£b²ñ%«Nsí´Džb^RÔ.„5H½>°ëÁì'¯o‡ªOº[²è fÝŸkóÖ¦-õÃ2 @¬ÓÍÎâž‚ö`ÍaËÛðüÐVœÆ<fd`˜z¦RE[`,ÏzPUmå‰&žÎÖîlUŽˆfÀYÖ€èˆkoºjš×·¶íÖ iñZ*ÊtKÖ½Á¦khºÝOè5pÞrÝÖêðih, ÔåÔvb[¶ëbªô߯Àèö…×±öÕ18Œ6ÖÓÙ: Wš¾­p „[áÜf Ú-æÁ9†y𛬱7WÇ|p»5ôLŽ1g2Î$çAÇ|®–õóªÖ o–îýù¡& ìl£:Çõübµj×rk˜Š˜ÃÖÚõX~<ÆkóºMÖ½Áä5dû¡7AšQq3¤=«H›%'•‡ewG͵Áû` Æv¸ª€ømiýzw4 Ô\)ÃH+ m“F¸Êº3Ž…/Ú(¿4`¸jÒVEµììÓV%íºBºè€^múº…ÞèáZZK‡’.t˜8ÄI¨\ åXgi€PŽj[|úÜ8§k¿s3TuøÀ`Zh*`´Ê¶ø’¡Úl1ʼÓPÓæT¼X§¬¤½zÝt@o2ç:kHËzt õ5»Ô–yå-W‡^“ZGÐnŽÆ%¶oR g®š£Â‹{`ö€¬KA§ƒäAØ+Ç€ÄënùfF”HûíùjÚ݆qN28X¤Ye:¤“u@¯4û:›p%áj¥©p€xݺ÷Ö¸—ÖR@Ã9¦¥°RÏ<_»*V«gÖ*@¡¤ ÔPyÊ®Š†<éøxiÎÊße\oo¤õ¶Ba›ð†Zi©-£ŒÈë–¬zƒ- “¤U¾7Ûk>ジ/:ÆãÚµå“^5Š0åmQ f>…Λá¥Y†Öñ(â à ^¶Û£&P+ ºupJ¶Úï¥t}쬼Z½nÎ8 oܸw¿ûݸï¾ûðŠW¼þð‡O>ù$~ê§~ oyË[ðú׿¿ú«¿*êmôi@\‡[âÚ¬|ï¦Ðú·@9æWÝ,"\*g惂橊 pVÜ=f¬+°´@\kzª­UÍÕA¿goš†*¯û£˜Nçåõ>YyÆÅ^ü5sÆ­øEû³dŸûÜçðÎw¾=ö¾ýíoãßø „€ûï¿ׯ_Ç«^õª¢ž}?†Æ´|¯˜iAæÁ®36Æõâõeq™ç óe?/S¾UÇ ›ù$ÒÉ §ý ^#>R®/*—tbù Ö'\]f;V=«ŒR·T¾5 ãä“8`Ëm{ËÚ>jÈëcÕ-Û™VÐÏ<ó ÞúÖ·zè!<ýôÓxõ«_‡z_ýêW1Ž#~â'~oûÛqåÊþµe­í<雎o Öë°<æÆ°ò­¸N³uN\ ’¡ i~;—¥b˜òvC9äoŠéuÖÁRqîoæ® >ך3!¨c* °xÐiÖæYÞËÀÌ#;¯I{é£J‡.;+é"½TÌ©úØT€Ë-Ï«&vKv¦}õêU<õÔSxÓ›Þ„§žz >ø È†÷ß?ŽŽŽRÚ­k„øÓ›€ï~ôÿæÑs  .ß*lñš²:lŽ4Ï´Û#AZAP>dä›Òrm$ÀµÏÙrqÄ~ˆªoZ j³$TeEsÞÁå7 ¸4KÃìRžµYntàm©fXeíWÄEYÔÓ›goð:Èçùë×ñĵcÀµ£NéhgÐïz×»ðž÷¼õW…ûï¿_üâqõêU\¹rŸùÌg°ßïñ?ðxàR‹÷|ÿÛ. q=@¡ŽO¸Öi[µ4¥Œ†­œS¸j=³CÓÍl©ìï˜9Ì;®§ÕÉWb¿– ¬guðýH??•ÚS “‡ Ø&°Žv™uzR 7«éÑiè±à“ÆBº“¶ïyýš+xÍå G_þæmt›ìLúòåËøìg?kæ½å-o1Óó5ê+ãåµr ØEx‡ÐÂt>c\³ ÍU.OWkoÀ@Í]Øü)lí¼Ž[`&gzɇ+±òVûÉW V…koêy0éñëq£QÞr‚¡vai¢.TY]i^ÖØw ¼k ÍônÉÎ4 Ob><-pg ›uB†§2 ~j/­%¾d-JZƒšçE¿3±¼øë'Ì„ìsæ7¸yóVÀãÌ“»ƒLXÇæ8XÈÛ¾^b“çk_«6Ó+ ªœUwQ‰ÃH³ Íö;T8ëÖrè®YôJ“×óã…ë¯å5¡Q[·æé°o)$  cAÍʬž9œ“zf7kúaX’¿ôííß~2¦™!…zFþÖGÁ[ã€zé ,-Áz,aýÅ©îÈÒ-P×ÒF£Œ•fÕ…³¸ÏÖÀ¡†Ñ&ì6S:?Ž•cÛm²è ¶pÍžšÈpë®TÔ:lÅ[¬:PÈÖÆ ÜPjù† ®Â™u˜»"&³>ÌPNžûR}“·i¬[E¹Jby¬UÛ–ëÃÔ*ÙRÜ‹ÐÇRš8„Q¬~CZj£–ÞMXô[†«åÒ°Ý)¾äæh\/¥yq+ͺa„‹ƒdšçêˆÀ&L®gþjvúŽ3ANÐ÷v„ßÔ”¿Q­¡,Üd»9Ìa£‚?hX*X5ѽðkW†VÅN\¤Y@¶g¿ò~—îÏÇl·"­¶öÒθu@¯´òz®û—ý°ôU×®_àÞš•³êèp-mÊ Ø”0˽×–zæ*šÀÔ4e¥!­w*õMåMÛÊýãÖ ÚcÍ}6Âü¯d¶X 1Ý­ø²œ7h©â%]¤©þÐF=Í Œú(·[”³ÒY^WÑ¥u@o°6gpó4í³^j§––Ö!€ÿxª¹9bÜÍf ºnޏP†i¼9ãšO›XÿÈH×D,,ûe¹5<ßs\ ³°†±†§ÕT·€+ePëY–šÖþj®¤é|b[°ûdBZíÕ Õ&`¹ºVik¯Ç—»u@o°ò:­ƒ7†Ç"MÕc¾å ¼R€ZŸ² D =P»fKTÑÂÍ–Áèx‹ƒZ1¬8–ò_+½RV(ã‘Fiž?‡½w ҈夡ÚG.k²s•'Ö¼Ýt@¯6´¾OY.Úg-!^ßF{¾Þ6ï¿ðSÿtzmÐÐSÏ<Îá¡©×–:wˆDšösÇð(«´ò³¥&Ákðu|Åg…;/…ûÄ0ƒ4¹§¦ï¤—ª¾y¾– ¶]¯\·è-Fìí½¥ëyl·ˆ7¸9Ì0÷C/(í¥4/­:`öwºñI¸5¸»!ú£bð¤©]гžD8³¤´ŽÖ.îb±€Í#ÅŸðÊ1_ùŠc8¨²ÊJ=k'—‡VÓ•™UH;ûàº'b TÑ(ß4\TÌ”Wî€!Oë&¬z¥epN@”×¶TÇþõ¯Ë•õàÕçW0·êZ39¼µëýöFØ9ˆ_ëŽKüÅíü²Jn3öUûˆ g2:Î"c_¢ëD«cÆÉÂïmí¼©¨LQñ$ªg ÔºV|d04¦Þ™ÊØt‹j¶ ÐŽ†«e¹êÅÕšÖ­z«ù aÏÞ(Ë:puTs_dàx}BCÂKæÍ‡Žê9B3‚1ú‹Ó+à3 ¸Os]š;S@”2˜9¤ãñ(üÒqÿ Å1OéV†`å²JXƒÙrsÔ ÍýÒL±ÖÜM^¸ \W‡W§².”µ“V¾›°è –®Uåê0a[‰Ë4{&È´¤ ¹º5Ý®¸ŸV¸>tØ=(]ZÑd s`ƴا¨²¹âÏJºÒA–Æ?OÊÙ[»7 ãªê s¬Óƒwæ  Ï êš×7\Â/M(Þ‹( |V?PÆ-[e’«C—³ÎÉÂùZÌ?ãÖ½Á– k+fæF(Qyº¢­ß5X[`åx¾{‰Ð 1-B3¾4’Þ$dýæp&LÎk¨mðY#|)ÌÛ®,ú@S²|ÑŠ9ÂU+h=PhÅh\i.r ”+y|ÿ ƒÕG½Lëš ”±“f†»è€^m%³/zé~XJ÷\!ÊkÛ6ÁH°vtØ3®œœ‰J"»: _qìÏ|hæêઘùô-SVÔ$Ë™.ljƒ´|xÐ|â$¤×ÌÔ¨¼²³N*Ú*sÒp·赦!*ÓnTͮ⫸:ªeuZÅMb…a„µ™Sî !]ɵöë*s<úžcÿ,PG0'¿3•Û!d]=OÄs‚Èãi Πƶ{Ê>jsª›Ã¸ð;Ûðåˆú‚+T5;™ ºVY,¯ 7„ua4‚˜`»9:¤³u@o0çÚŸá'Õk‘Ÿ–R5hTÑp€³ ¢Ç Ì­~‚µ–¦ÃÜŠ—V¤ã *ÙÿLÔqnôˆù-:Ir[4û¢)·Ï•tÄ ûž¬¡±‡PÀõ…ªþé4i)éZ8‚9¹\ò|dÓÕVGÇá”N¬¢EžÆëVÂÄÓϸu@o°|M;ÊØ|aÄWÑ£[fŠ{0NÀYPјc›Pmêr0Â0ÂÓÑ(Ã…²ƒ4ƒòÙµÁÝÑG¸Ìáêr5Û_ÒöA"{6‡5WÏq p6'šÁzP$J^Ä€¤‚N Ž‹qìÒ>/È–9Ý„ó(áL{™ ß´žµ‘`ÍÁ¬ÝÿŒ÷+ܤ±ðzŽ«Â8ÑKÀžVìíBíó4äºCYwKÖ½Áì{%û¤ý2¹\M5[®VS9éãü°¾ä“%LÊ¬ÍæˆµƒAØz&Fñ^xØÌ%Õ´ i¾æŠÆŽ?άu¬ja á*”·¤µ†­ø¶èÕô}S\k†ölŠòÞË+ñÑjƒ+fC=GH{`ÖíXàÖûcm©ÊBÌ÷LÒÕÕnš=ïSøX[{¢¢=Í=nqº\*´gÀŽðÝ7€Xƒ»i¶½VSQ;`.NŒ‘Ε¬VµÅT»Êº p^þ¤ánÂ: 7˜þ°Ñ”&Óë¶ýÑ£*•ô¨âžCø[…¢–J:<–áp6]þo¨°ðCÏ…-@‹™Èp•`†Ü®¢hb.¨BÈ}2ÿzà Ž®‰=ò@ß>7Aö²žöG HÏŽo ÿ³†´‚u昞o (N˜`l}B½µ‘æº9XyBƒë£[²è•–¯çéoþâFß i50WÎ# »Šš—Óí©4Ïß=¹:äíDÅíUܹӔ8ªLíÆ%>TÈ€sl+™9¾äÙÃî_„¤Œ9ˆ“#;‚šC™©ë˜–Ö†‚æSê„jææð%¬E1È;S†ÈvÕL(7;Ål›Âkòθu@o4Æ^ú¤µkcJ«û§9t,0KE0ÛSÏ&ÜS¿§ÿ¦¾i2€ŠŠDˆæÐ¼G3m#°ùÌ=Í0 æ¾ U)IP#º8$¨k®›D®„Ë…æuÈPÖpvÜŬøM v‚„z6%>Le,gn4ªh¶®º9–ÒZÃkòº ë€Þ`‹0öÒ7Íìð]&ˆõZ©æôKJ ÄZ…ƒbz—f6ÿ@µîú¼'ãüøÙƒ0€Ø… ˆ¨ãT»E×_³F†ü1ò@!‡³û×&p&…k¸2„RÞž©iíÖÐ&Ö³«CÙruDˆ²}ošF;­eS%ŸÈE}§,Áp¯të€^k†°Atw”eZ!]ÂÝ…2‹V¾dž>©åÝ"=+VJB¦™…zn…4_&ÒLÆ=iR×{dWÇn†rttsÄYÉÇMÒ-¯z€F÷¢zNs™•zÖ æj:A¹Á½!”´i×Á×XðEƒÍ蘺n€²\•–@ÊìÕµâÆVùnÉ: OÁ4Œ½ôôÒÚÕaÕ“e\•ì…‘<¥¼ÜVTȳ–Má Ãqaðž¬ÐÓ¬ éÈ%Œ Úcœ½£éâŒ%"¨ù¬Ž¸W 2?ùþÕ\¾Ærœ×µ±§ Ò8ÐYrgX X”é\u]‡…¼ZXÅÅ[… eÍx7aÐÌ»o¬(ÁH÷êJ•œëå{›»?dy®žE8Ö %°"܉ È:̆õÂÖjÚ‡WD!¾‡3ɈO‡Øc¤ý kÊ`†çQNËÓ4»ä­ ’‹˜÷Œ{ ̾eÏ>†TÑsz‘6RVÒœMW±51퀹ª¢Ù¡ÍÓéØg@y™X2¬á+òt¾QÞÍ[*ë¥uKÖ½Á¼·-H“¨Ã¿­1·AþK+#Kãe4¤=?òHeÚž€1 øFåì€BÌÅ\ ¨py´¦•Ü« Ì1>£tó¤¨÷ØÓñ ê8pH’ï¤àŒi6Ç.A:ót}׌ϋ=@Ç”Õñq˜T³^´Ë#¹6¦­! ­ª ¥+ÃPÐÈ(óö° b šHcüTª¸Y¯¥üš´3jÐ'2é{ŽÖi BÓwwhHó2ÒàÖ_ÒQQ'9«ëß0ƒY¨h¹Œ˜ ŒÅ²¸Ç…sBEGG0í:0`¤cŒã1FÅŒ è@ÓK/Ñ5Rss¤î„¼¹0o28¦9-Ìqdó°xi¥„tRД×â•@,U´ñÔO‡QC[xÌåÌu%Í„¨Vqч†ò©ŽÕºqë€^iå½Ó¨˜+åËCûÒÖìŽà ÆéBLIGµ< ü)cçƒ:¹9v°!=wÀÎjÇÓަG9Ž#Lï8€ŽÁšÕ1‚½Q˜ç7[ä¯û—_4?t`uŒtoMX¡Žør°[ùnÜKÛ’~­úÔlºëm!Tº6Ìþ3H{~ézœ{†ôÑ­§ÎIwF»YEgæð.Y(l®¦ HO¾jvh(ï9EõœÖ\As7ÇÀñÔ·´Ñh…?:BzGÀ1Í"xöïó9ÐØüçaAÍáœÔô<÷ù8w5°gKRÓ#²?šÃ™ sm@P]$%˜5xÙ:Õƒ 7‚9\çq¡°¸W¯9¯€èMfÝSS¾ïò4 è$–í.½aÈ•tšŽ—Ü|ÀO«åÝìêÐ0Þ1½Cr}D-^Ò6¦áGŒï‘á)×>hì¦>¥%ƒz$àˆŽ€qÌp# )ÍŸ>óEóógoÂ!@G@8 Ì cC¡xÛ°ø•þÜ¡¯ªh( GMWÖ®k¢%Üo-£Òüku–òΘu@o²üç»-€l5íù–uÙràІtri@aN#ˆ¾éƒô?©¤ç%AûÜ…’Ž.67:i[:\ ΔéF ҳ×0IÖ㉠4dP4Ñ!0Ž3 ó—ñvœ#Û ̇„fÿstmp€Ã¹ Щ[”¿rÇ\q 0OPaßh^pm¨§¸¾Ê<é°óÒK+Ȱ7ú¾_“VKýóåÝ&ë€^i˜1EçeðòÞS>¼áofÓð|Àëzå‡$|ÌܯÌr˜``¶–ñjϘÉ!öDŸÞ$ŒþçÉíAtXƒ† Ò„Ûã- Ðã<“ë˜æÓ°?è0ÜÂ-ä €ñŽÙ³AÁ98ê9îZñ]gaûÂðA]  ÝäÕeY¾¶ ð-`î0Oö’ô>ðüäOþ$>ö±áâÅ‹ø‡øüÁüÞñŽwà‡~è‡îÐVK !a]Î}Že`€¬X=KOMD'j­œTÏP &pŻˀ.ŒfH§åœZ0GÈs?tÈÓđ҅jj›Ž§‡›èI‡Hö#áÖþv#áüH¸H“‹#)è¹;ût ›¤qHƒ€óx {JêOó£BÝQK¤Kq¦¤c8_§?¬–-)c§Íªu¸žª½¤ý{¿÷{¸yó&.]ºxýë_}èCw|»5{jZ¹„q®¯•¶¯¦åt<®žƒæ À$Âq0ÏèˆëI‡Ä„s€^èܤ®£Êf Úvq”ꙿ¨R¸9Òô‰y&ÎaRÓç€qvwŒhœ•ô8Þïqsˆó#p‘&½Ÿ 07tÀ­Ìî †£ž Ñßœ¦ÏÍpο¼M÷mÀµ/“ðÔØÖÂX«jU–ƒ¸€òV°®¨W}ðBòɆ»'µG}_úÒ—¿ýÛ¿ýo}‘¾¦¸²ÍªÙºWƒyNéAµ™Ó8¤“:ÕŒž¦×¦¢a„#¬¨ÃŽ-³û"œCç€pçá.ÃE \B.á.˜—piZ —ËF[è2[¦8‰´+l}h¼ïö÷€ö÷€ŽïÁíýn7 G‡„ýÍ&ì¯ûëÀx¯Æçz ݤIYßš—ÛÝ&à6@‡Èëy0GÓsC,Ü=ÂÜ$ñzà±øÔ)ÿC‚½ÃSLW,üÙ¸TÆ[êU_]oYÄ`A7à%® àçþçñÅ/~Ï<óÌ º]©ŠKß3/Ç]`etžVÚÖà£9°˜ã›}ÒíêØ‰°˜2§Ò 5}Öçf%=CzŒëÙåfЋŸÁrîDâw8'§UœÍÁ”4Ž:?‘’nc8œÕô~˜¡7âæñs¸±ßãö8µ8„ÉCrüa÷|ná€#š^R‰Þ”è Ÿë7WMÊhÄ# ¼Ë^|GìÅÞþ]n/y½Ûíð»¿û»xöÙgñGôG/È6kjY§C¬KÅ,óÊúù ­Tï!LƒsQ=O`J5ç8WÐ[ªè¨¤§% çÂùYAϪ9\Aîp€+H*š/¡¦œ/£T×L5ãòÔ.]Ñ•¤žA÷ÍËý ñ~`¼´8~ÇGWpí6áæ-Âx‹nŽž%? ì¿M¿Œÿ Ð5€®#©hÜ$à&¦å&ÈìIê9†Õô±³Öo$Zs«­…«gczŸXÖ*êÊ™ò›•öÚíwð2Pпþë¿øà?ˆÿñ_U÷Æx÷»ßûxÅ+ðá0Ž#Þ÷¾÷áààûýŸüä'‹ºÞu¤_`)•TÌ2¯¬Ÿ·åÍ©)Ÿ¥ˆßn^RÔÜíç¼ÀÓ&ÂyºŒ—@Ã: ³ÿYŒ~ÍsÎȸ{Eš¢û€9ín¢ß4³ãâ¤¤Ç y9>: ¸qxˆk‡7¦^Ü޾®†[ã!a<Ó  ôñs¦| 4{…íV »/l(3UuK¥n/k{I+è}èCxþùçSüû¾ïûð™Ï|ó7ÓTÿsŸûÞùÎwâ±Ç÷¿ým|ãß<þøãxÝë^‡O|âxä‘Gðøã§:†Pihók¶¼lÌ÷}й~ù ÈJ]¨çù_ÎfE=Umù¤yZHSò¢ªž^^‘jú0œv—v÷Ềðîpï´„+³º– Y-Tæñ2³bÆ÷tï¼Üà~€îè¾ Dÿÿ-hüo@Ç‚n=„gÿõðÍ·þ3áø„ñ¿ã?ô,@ßè_ºFÀõYAÇÅRÑLM ]SÊj1ÇAkª¹¥üPÎ[–Õj»«çE{I+è_ú¥_ÂÇ>ö1üýßÿ=ÆqÄ<€_üÅ_Äþà6Õæ™gðÖ·¾ðÐCáé§ŸÆ«_ýj<óÌ3xðÁ?ü0ž~úé\éþ×ÿãÆe_cej‚3y%rI÷:¦9¦éma)Lщ7¿ùÍ©ÎÑÿû=xæyÀ½çŽç-Ú5ßp6ŒüDLÅ)— +€ô9Œâ« éË¡$¦9“ñr ±éÎgÓŸºà€K”ï½ÜOÀ½ÇÀn?î'7ÇòZ‡ÇU܈)¾K¿ê~.ë̼ÃqæÑa˜ÔîMÏà;¾pùëçnþ;ìÂ?#„ká6B˜¿¿¬’nË—Q¼º‡ˆêÔT©¬{fmÒ›}§·ëØÇÇxâøp:¡£"ú[ox±;²Õ>úÑâÏþìÏLƒdò'Ò\÷ÆxÏ{Þƒx÷Üs^ûÚ×âêÕ«xÛÛÞ†÷¾÷½¸xñ"nß¾-|Я½ïÄüÛÿäþ•˜ÒIÆõl'¢2OüJÎ_§FúÇÄ@#”•kY|R#~bƒ½‹" }3¤i‚óL“‹/bõ•t™€‹#pnâkwS¯ˆ˜:žÃDãcŠJ™@ã¨ÔòŠ z?‚ö³‚>ÞƒŽÇI9íAGÇÀÑ1p{ºuÜ<=üë!è[·Aÿõ¯zþÿ-€qç÷p×q>ÜÂqŽp€=vaÄÓ2€0š½óy !Ï*Ϋ!äp€ž®Kùp…†Qf^ŸDšUŽ·å•­…×äÕ¶ÛZþç羃ÿãæ #çìÙKZAÀ×¾ö5|á _ØT÷òåËøìg?kæ}êSŸªÖ5Õ.²ø"U.•73o+PÙv`éz‰íñö(&޹ôîÈÈâ1ÌÇæ"èGLox óú`¿Ì Šßöœ¾V4}übÕ'ë½÷´ŠÊ9>‰ŠùÀAÍI1Ç%Ðí¸=7àù¸>Ï ü áÒ€{ÃÁì}¿Œs8ÀA¸„70„[pˆ€#ìæ Œl™GB1ühË•k )_7¯EMÞMŠónêËKß^ò€~ýë_/}éK¸ï¾ûB¸ƒ¯xgã`MF%Tb2ÒXž5[Ì¿ø”ëÀä[å2Ä&˜2˜c^sò±óÜa§²G:³[…˜Ä3Õ7kw€l†2sk„£: Àá¼Ü Àí€pc=? \Ûžžî .aÄ€&@ã»pnbÀ-"à8-é§RеQ@Z•õRž.㎴–¼šÕë­w„¬­aÊœÕ[}¹ÚKÐ_ùÊWðì³ÏâÂ… ð‚P "™¦AÍýÌ)ÍÈPž*T³‘"CEC¨hþöuÊÛ³¼½jœƒx†4¥ŸÐÆÔð8+è#šÝ&³ª¶æ‹qžEõ¬ý5ZE§·ïfåœôåè[pƒ€çwÀ5B¸pi ¸Œf·Ä`Ày€v8À€sÂ!SÒÇIM‡YMùç"¬m5­aÍT´¸*ôlw¾Öé“•®Œ­jû$0¼SÊX?Í»q{Éúu¯{~çw~çÅÙ¸æÀòµZ »„Œ“©MÖ$âÀ¬Šc'FÖfTÐ<+F8Gõ©4»MâB˜àº'pŒÓG˜Ôá¸:`;ÜõÀ _ŽÂñ¬šg(G@ß·Ð-nÂóžÎïq—Âç0b7€À÷Γ  án#àܤ¤Ctwg—Gˆžƒ9΢a­!×2]†õËþüT®SØÅ•¹¢®ÜêúzkLÜÝð2ôW¾òüìÏþlrqüþïÿþߦˆúò'–Œ¼ô{s,/)h­¨…HÞ°àqLNô1ØáT‘+èé0«æÔsBz{#þ"í9Êþé²â¶þœp!Í¡LÆl dõ|fßsnÀ- ÌßÐÀ€ƒCà.aÄÎÍ zÚ|À€ì˜!væC%WGRÓÎÒÀˆ¸Ë£2.¿Àb«kk=ù­m8ûáe?¶8íEý­ÖõüòmZËn/i@ä#ÁOÿôO¿°5®¿ òÝ?ÚlÁÂÚÙua¹=˜Qªkg¡ aÀyÏ6´g ˜á\4M¶³E¸[„ÿÁª ¦qW‡poÌj9 Æe˜Ü)‡áöº à·„Àp{šdr Âôåi&aTª“¾Ýá²üœT˜^Èp\ŽçéxÒ¥ËÞ«CêøÉï – ¶_[jƒ³o¤´Á¾¤º=·»Û²½¤ýÃ?üÃó[r/œyÏw­šõå]üH' GW/ë©f—ùƒ<µÛ™ÊF4œ9@8”ãÁ|Œì{ŽNpWÐpžÃéƒøLE‡ôf÷çäæˆƒƒ³‹·f}¸@pçÁÍù„â!ÎÒ“’LSÇ·)§%Bz— >ÛC"fP×gx`öÖ`uìôzÜ“Vº+3R~Pùöhý)µd]AG{IúGôG_ì.LFå%%.oO9“,«aêh0£„síÛ[ l£ñ ;7ÿ•E¦€s؈Ïâˆ>âÆ<Ån@8Î#Îcreœ /;çøs$º9uc‚Ä4(xnJ ÜÄAÍþ… l$pó¤ÅÏ}Ð.OEçÇ+lJ… IDAT_`„—Ö’ñ‘T C;^K³€[qü[ÆÎé–­zƒ¹‘‚-K.üÍ~‰[„ƒÃ™<Â{`}æ i4àÓXœhú+>‚5†Ç¸aöšw`kíwÑ ® Ù’àœÕs8 ãÀ|ÐÓz8Æ0Ãyœ¿ç4ú\ 48x@Ò\AÓ·4Àt„†5‡3WÖûY-[³;b¹ éÚK.iÛʽÁûdC»\ÛJZ+g/Œ†xL[éòžYx7 úôÌPÍ1Yy,M¨gæoŽ·4‡xpâ&¨Õ:¦™$o褜£[#†£ IFØZ-é[ i3!)ò@az ¤Bæîà>žÂÓì d?ôqÀ9Î…çiÄ…¨ ‘•sZBþYñ×HÂt[0ÏÈP<¶Oú³K#pŸtA!8x-í+h ê r¨²qØ‹aÙŽê|M•¯ã`%}w[²è V<ßëæÿ‚J‹Š88e²/™±º<-¨zZ9ÛÊá4Ï‘&~Ÿg(¤ç´è˜AMò¼µÒ¹+ŸFº …zŽpÀ#ssàxާ·q°Û#9%Î8?C:~toú_˜ƒœ«ç t<¢„éå> Cóq>Ìó<²¶Žó£çpH_™B`g*º$¥¢ÎêyI5¯SÔ²¼†³_ÌÁÌÓu­¸—V³® £u@¯´â/x‡G§"x‹¶˜r««¹§áݽ#WÑÈoÎiP‡¹>3ù  ¿ßùÀ};¦íIº80‡½¡˜¬}Ï<§ÚÅÙì;á8`7F8‡ åsa˜”3q°ƒíƒ–ço˜UvOðßS—Ÿ žiÎpÎa®®c81ϙΊº¶ØÀäà"/;o'Èí"õ÷ÅSÓ`ýkMñ¼í%ëêzÉ: Obεå‰Hžo‰8 HåãQ¼ºJš«h·[\Ò é¹_œcN¾fÔÝ€¾Ï5Cì—ïöa^ÏpNs¡ Ã~~Ç/Œ8 ʳŠK˜ÔõÅ Ô3wuH=•œ~âëQÍr7D¡ª²g0é.É3;â7<"Œâ#–ÁZ©gO9ç2`q8e½“`»=ä`áRøäqK#wÝ\Zô«þ¸g£¢ÖßÒàíÆ8‡3²ÑãIE˜+礎fwÊ8Rârþf3s Ï þ4ðÀì ls|äkÞazƒp~“p À~K€CzRÍç0&—FtkÌ Þ%ôæíÕí€øòwÈpå¿(©Ëz:ìEzÎaËÕŸP¥’^öQ£9Ä6l8ûiùñ“¬aÎw”׃·£:Zôs/²£®»c6­’#€£šNcss;Ô|ÆŠpìGüÓU.#(ýèIj,NÍÓOˆ(ß­7­ƒRÀ•ºøfÕ<¥c@ù‹\“ëâ Lßgš”ó0ƒ9û “{#„äÞØ1]v9L€žß¾‘ÊYªVkw'8Çv$¤Ë´¨¤³‹#¾ÐRƒ²Î³T3WÖy²kéê°\SÏÜÖ¸)ºKc­u@Ÿ‚E×D4rÒS>)U¡@ ”jZû¥9œGðossõ<9ù»I¶ES^5•oAwÝAãÀ€ž÷u ó¯¸dP‡4t¦±Ê()èè€8(Hó_슾gîÞ°}мÛCz;pþrI^DzÔ’zJ³€\>s˜Xœ+êvõœËpn…aÔ·Tµ²i[)OÇÄϳ­C»fÐ+ßÜÑô/ž¤|ëºÓpVu¸gatâ`7jåø¾ P³ÁÈ ñ• k¢yJžrp‰LBAZì§±Vþç0NŠšIFÕ¡lü¶­€tóäwÎpæëaÞ׸ }Ô§ÿ£Šç­ò·ã±Š’» ƒh+tí1¯C`ÛÑ®O=kKE_NQé&¬ƒÊ[†´ïÞÐÇÕWÜþgQ»ië€Þ`ZýšæÀÙ«Ï¡.¦à9°žnqb*:¿‡±&õ¸ž“°žTø8w7~’@þBõ·¾w  ã8£(×K²K*ºtšN4¦ü\ÖRж¦vA~k#¤£É]3´ 8OÿûPY éa]B“ûÁ=]æ”ÜVÔm°Ž½nUÒ6”C%¯,gÇβu@o´OÓ*pNuU¹_^&zøö¸$ƒzÊŒúkJ:n>BY® Ìù#£ùÝ7’=ÄÌÛU÷SИÛzBÀlHïÄBɵ¡}Ò“ú€¸‹#·Å!mÃ9®c¬ …rOßÕ² °=´”óœÊÇ£„rL·U´*SÒɽ _Œ±Ý¬õº¦®[ÃÚº[£Õ: WZv丰8§:ºɶ¤¹3) kP ÇÛA+gRaù‡3%EN*Z#øm ul¤GvꃞZm:ÈÙjáêzòÏ"Æúíóâ@á˜z‡uüñ,Ìr_eœ§ó£ÏgwÄ3Ë`› ^žÛ÷\SÌž"ö@©ámÁ|­Î]å® £u@o0=Ÿ¨(jã'¹½izÂ\-ljqR°.u ‡1QutgÄv¢ŠÎ·¡øõÁ©]’iPaÏòT4ŽÎ•CØÚ޳7ØPYûz»º/\AO`ŽqJyŒ;ÀåÿZAPJœÃ9û ­Ù6¨Y~àéÒ±G¶‚æùÀÒt=£¾þKÊhÏBoDZoÐkì J€:%Ú»1¯óTœÏz˪™)ÚÔ‰Ûpç£ìª€TÎZoqØçá±ÌÖZ›åJ€ ÉÍÁç*g8gdîÂô›´Ó¬Ž`+hQON³›^ˆ,U´èoš>»9x˜CZ½š? Üq@©˜yZ>seïƒÿ6€Iµ›¯­¼ƒ¨[_ËãUóMw÷ÅiZô3Ÿø$V¾*˜ $Øêk™$ˆ‹ò Îѵ¡ÓA”eš·p7 Œð’vcË%êJO”*Zú’§ùÏ;ÒÊYº?´ú :Ô!å¸ëM Kõ pwO“kÀ‚3@$/ÿ²à,}ÏõãUŸu¾¸Èëà»Òº|×ÔÑ: Wšu#Z×b1×Ù*G†šf&@=W(Ó¤òµnG­–9¨³êæn ñ‹„EØÚ±¯!”¿ÃÀÌÝ CÉÁo~ 0+çIIËCkáJ\?Êï¿hæöi=%§‰üùHŠMÒÑ;hïQÊ]¼¥ïÙVÖå…YSÏÚ<÷†nK»I9gŠ4KEg•ÝæÒkìxi Ç2¥rÎ.™òìÚ°ŽgGªéºÒÖí@•—½ñÓt~Üv(ÊQ¾[ôÓÓäÒ%eÌw6µ¡ž«q‘oÔ†z®)e j°4{ë¥ñ×WÏY9sG@TÑq`0Ïe0ë×·ù'Eã|éðå’òC2¨¥‹CCR‚™©TvQÈ·ã¶8µr¶¶¥·+çî Ø}±¾ ` [[i{ÕswuÜIë€^iÜw)l£kCÿ‘¹fYÓND®j^ªe©“ä͘ý¯y 0«×¨œƒK_4Ÿ'¿§¡?„Äó†ç?—߀ö`]><8œ9¬#05¼ù ÝÀ ;Èc‘ŽÎÈÊMe˰†sô[3%´’ÖXÙC$ý_™û˜m5]ó=Ë-·¤eÓ »«gnÐŒßxÞ ‹"ÂTØõ,}È6p%¨å+ß¾Z–akÝb–[#ÞØÌÔÌCЀ-?z¤gk蟵dmùPÎÇVkí`‚šæ9Ó”Ò¤bæ.•:ûäSÎ¾Š–þèqv¡”®–2ÛˆÛ®¹1Jµ,nCYÏÜX£œë ïŽÖ½Áøå3É¥ ̺NYšëþØ­dCX–‘åô[„[àìí†Õ_öç@Küñé'PÏ®ŽèÚˆÖ°Þ±ô²ì¬œC†ó€ Ø\'ˉåâ˜÷&”½Ï@ä>bî ȽåÇ(ƒY+sÎñ-Díò°ÏAÞ nc6´Ë¿Œ4°ë·ú5¥u¥ÜjÐ+ßЈ_Fi­¯a›òÈΛê´(æòÔ¨—K[iõpmŸøžŽÑìæÈjU*g/<$Ÿ2wy”p–jÚöA‡ŸÜ.Ö\èÜgϽa©Tê¬VƒÈ³ÀMú¤³ÛÃ9¿Ð?¹R¸kƒ?¼>êí—ó¡­°5_Y[©žO†ÜŽkÛ: 7ØâÅä¨gq©Snˆn9'ÙVÖd¶a½l‚¢L,iw݇³¥®J—FLÓpÎSÞ¤ï9¦ÇWµãÔ;­ Kû„å ÛÝ!Õ`ÂŒP,k–ó£y¼fBVÔÜÅ'‡sôsË/¯pUm«ÿ æ÷Ó/Óju7F·ë€Þ`é"³>„„¿´*ë[–‘ߨÐM_¤£Òç ±6>CʶµV9ëØ‚rŒ,mPi¤Y-— ZúK5­ùƒ §qÌæþÆi_ö"ÝñèFÄ â^Ý€üµ¼x¬ä7 %¸¥Ï9²4§ùߌ–/ÒäóÃ]2·ë§¯ž'ãnŽñhÐM¸9xÉ[8¦Ùà-ãQÕz·†tPñ: ëkV»åÞ6Õ¹ÏÌÍ‘Ý \Esw„üÈþ.M½“ƒ†žræþåröwµx¶Ô²5šƒÚRÔñ8XîŽÜV†»VÍS¹ìsÖ39ø‰ü<Øa~ŽjWá²k£]~¬QÏǾu@¯´ô'±å{¦²¬u9G_³G Ìå§A-UÍa_q ά=0dPg¿rÌÏSëòZ¾°NÊYÍæþhÛ­Á_P±ÁlÍê°öÌWÔ¨y:³?‡±†süÜi<Ú èÁCÝór/4˜5ŒËxÙΜ–õrmæ=ö;²£u@o°5ƒ•ºE´ ç Ôa^ÎUÒ½Ñ\n{­jÖ}µú×¥‚ž=«h=@Çgpè—¬ÅOV̓{ùe9sÃu™—•µï€Ðî °žŽEiçÒbiuîÂÐñèÒˆÛµà½ìæ°]úœYêX—(•tvmä+¯¯ÞÌ2¥ýÞ: Ö½Òø­+¬ñºâj9@ ñEÅmÃÓt9—×$ÒVîBÚ¾·¶a-a¬]Ú½!]³‚6\K*Z+e ±ò¢—r/$Ú¹C‹kwëxÉ"úãLœ#˜ù5½çœÏ»{i¶R^ö±Ü·šíl[ôZ£ì^¼¤|kÞ; ªe˜DZ;O¦œãöyOÛj`kîæ.ä‹.!ôò ]š'Í!ž±hÍâ°À,]¥[À²—'}Òµ:å÷=¢¿°¦ØeÕ,]~›Ã;g1Þçò¥æ+Ý–_{¹-wN‡u´è V\> â#^ÆÜ{ÇÕsF]éÞ°´ë–u-ܲÔj*Ú[c}Ѥó¯¥D—SÏú°|ÑÖ ŽR'óŠ\¾zÀ°q@¸8¨¶¡ýÑ\IÎ%¨õ¹É{fù¡K+Túku~]˼r¶Ë£+imЬåÒʵT2Tš¥¦ÍµRõü2×~ižæÅÍýqâ58çxVÑC“Šƒí”.}Êù­CùB  5WËKó¡åÞé=°r»Šæª9ÌŠÙûržö?RIë8w³ð2ñ¡jù¡s¾LSåšyi+ïµÖñ,­z¥ijî à’ jÎ6„K(ËÁB j8q+-ÓJöM,•gn¼Y³›ÃVÏš5WG†®ùRJ|;$„å‡ú-_´¥…-Ålíu])—yl1èv¹/:oKºA ÒìxNóõÞÈ4K.¬©¿œV¦ç+·Ã¹´è ¶x!-ÐÏRÆ%€Iäס,]”O2 Èû-ÃY5Y ºÔ |FG†·tmðAC(0ç0ÿ,©µVÐ|憥¢Ë#¢{®÷ÌÚS=h(á,¿çÁg…@¥qÕÌÕu4;®ÏÞ;§~lsm´A¾4~åvTGë€Þ`k.ŸÚåjÚÊ/×SI e g+lÅ[÷#‡£b–y_¾ŠÎ ºr™f ²p„.w{¤m°^RÑ%$ZU²ÞCbSæÊGB©Ö3®széžr[”´m–R6Á¾Îþƒ¡¼zƒˆ[mœÜMòr²è•Æo+÷7 zK ÎjºM1·¨hžîÅ—zXZ0nì¬3%sW¯ÜÍÒd}H³B”Ê:Â7)çÀJÊZ#<䣧 Úì(_¾ãGˆ+e®Ž­öan;Ÿ‹uJÚKo…³mÄúnµ¹ô ð¤ÂZùðòµèæ^Bî ¹–32¸BŽŠ¹6h# #½ÖEÏÂB˜«é_¥ŠNJ–A:§[_¹ã/¦”354˜ù·7Ä6¬ùvÁúÊ÷hÊ C”ãVãÎ6Œt­ˆcž~›P—‹eZMóVìoN÷àÜŽÌõŸ…âŽèíLú7~ã7ðï|×®]ç?ýi\ºt)å½ñoÄüÈ`·ÛáãÿxJO·ÓIþ«Ôµ \uaUAmÁ¹~ 7ðÿùÏ‹üûî»ÇÇÇxå+_YÔuoKªÝ²¶Æª­y99OXÏ„(ËÖêµ,ú×±Ë_Ë–¿ -íø/Ÿ”¿´½cå¬öv¢ò3„9`ƒØî0ç–~gþ¯<Æâ¡BÀ¼,?ŽtëL«›eê@¯§{m”iþ¤B³¾ùWÀšþ¢±,œµu&º ýÄOàýï¿H{ó›ßŒ«W¯~øa|ùË_ùù— øÍßüMüÅ_ü~ìÇ~,åéõ, û©½)tf§,OK_äõ[-¤ÿõ, ™–oͬ°VNߪŷ0 ´ôCsw‡:(̰§×ÉíZȈn% ½§<¾¼”åaä•ëPlðצK»sÊÙú{­¼¦dÙîæàv&ýÈ#à _ø‚H{òÉ'ñá8…#¬µ}ï÷~/®]»–â·éþŸ› øîƒGñÊsujÖ–Y·ÃÌýÓ„½ø³n-™^‚™§I ’ [® foà°ts”qÞ kýË/½r-Pû)ÌãCËW“倡 k»¯VúÂ4¼”(¯¨²,±ž´;Òêídûúñ5¨mß³þŠ> ²måb¸JŽa>`•u”Cñÿdd¤z*Ôèiœõ6,˜V¶a¦®½[ÖÞY/_ë€^iK·ëimöl·ö³¦ó­:ÃL¨èœ¾nÐSÑJ!3Hë¯ÔåA@ùbŠj=Ph][™âÕöŽ<³ —ëÊ2ìÁT—½©\VVÀÖßxS¸üK¤ö@Éë²^·hÐŒëïç =pzðÂå'Eu[Úô‰¾\Fûž—Ö2,¬!>eÊ/ÎY>é\v€TÅþ_zÙ]¶gÛ~¸Ø¨e¥~Ö¬z£­¾ˆŠ{FÎàˆmÊ8ù^s'¹¨=(g°ätÊÞkgrhw‡TÕåkÞQMóùÒY=—¯ƒ—ê™ëجü£µ?è|mû˜½´ØÞÏÍ¡ó¸ñ/ÑY õ®$½÷Ò—žr.ûkƒ»E=wãÖ½ÒømµE¶®UÊü²×ílíF¾EÈM·´›H3T´o…´åî(úâ‡ùÍï<×ý0)AíÈù`–N§V {jª,Œ¼y_B½çeg°ò&H׎E[^Mu{êy»‹îåhÐlíÓ¿ÄÀúò¨ëýYÞ²®[³ ï ò8lÁâˆõœe=K£ô3sp#}ÇC¤UA]æSÓÙñÎJí«ÁS‡6_ÛjY)ßP^†¨P®¤ËÑeåì»5ªî™¦žŸ-ë€^iü–:I@yë25oÕVßëö¡ì©èX+d™ï[çÙ~i îôË)ÄgwHÕ`õSî[´òض*f®kêØäh.á—ó²Ÿy=œ=5 µõ¬¤ |ßKs·EÍ߬ۖÇÁ÷WŸmë€Þ`µ‹?N»«éªZ›-îZê–{Qµœ!óµ:Îk>sò÷Kem·—¾Š¨Ÿ·ªÃÚ;JÖ1k·ÃYÏ7\sÙËX¶¾_µÜú<ær‹KþèöÃÒgß-Zô÷É ÛiQÎÞmµÔ…%ˆkl cY΂²VуȯA¹ Ò2Žeß4±ëißíã¨U2⺼ åTREË5© ðj©Qõžð²:µÌ—Û\šWáçÖ o &.·xÖ¬zƒY·–·ê­òIÜZ'ßÜR5[Àæ*:ÆùÂv„!Ði=ƒC+gÜÖ[†Ö¨—ŽI››ÃsRÕ|Μ ŸuÐ=«©OßjðŒ=µó8ò½+»î–á² ÿu‹Ö½Ò¬¼V–‡´šËnõæõ·*®®kP&‚¶A¹Œ—î ߪrvÓ‘”(‡uíˆÕgxJ9¨x+œƒáWöÂHǶv%.]£9ßs™Ô¦Øñ~Ÿkê¹®¬»Eë€Þ`§ýŒ_º,õm²ÔZ9çÕRwvû<î)h­”¤Ù¼L0êù‹?ph&J Û/¤Ø³8ä1ð^×—=·Ô²wæ– Kj"ì«YÛMåí]†Œ|Ý«ŒîSÍ·>¥•>箚=ë€Þ`'¹¬j·4œ<«Ü³êJ¥\ªf®„9Ü-øÊ°¯’¡âƒQ¦œÍ‘ÁkZ@.y_Ó1pj î —ðÉÓáZò’R¶•gËu‘¡éµ´ÍÄX*ãçÛ`ï°ö¬z¥Y7ø6ó‡¦Vý‘7»ÜìÆtO-×× Ø'vuhp—àõÕ´ êÜßÀâmG¸ö= K/—Ñ ÙË©zÑZլߓÒd›¾ržÒ–\¶OÚw àÒÜ: ·9—P#Y— ܪ¦—êûy¶RžBòÏÿrÇ‚ª.\¾rö ]û&¯g»7jŠZ>8â>7âz¡¤\o+h{°÷NžUY¾Þ+/–S}?t]9ËxYÆò9ûª¹c¹´è•æ)è;ñÜç.‡VµßRÙBM5[iÖº¶âíJ~e; yÞq´Gw­yY5ë‡b†1]ǃ®ezìÁÛs]«_Òþ€¯Ys‹ôU<ë€Þ`§q -é±ÓÚf –á,U²ŽªšÍ¶ò[ mR4—[§šµ{ƒùúƒ+§Èrµq„²^ Œ}0û:²·ØbšV->&ÁÓÊ>.Á7õ4ˆû‹*5ë€Þ`u½°®õ—cK-šXœ¹Ò+ËXëB-þèršžiýùPÏO]‡±å‡æ `+ ,Åç©h¨taåó¹¨4H˜ ‰IDAT?.Û÷ÄöX[Ý×2nÃF¾iY£+hmÐì4/¡ÓÖ ^ßJ0ç-ûÊ™‡}Õs ;–à´_ã.!E®µ†‡½Ó±šjö\ºVZN÷Õ«Ý¿ýœŠôRí—ý-Ãr{6¤ýAÃéhÐ+Mßè§ñÌ?1¤ÙÀœ×>ߊ}+, –ë2ÍRɺŽ?sÃre´«æ2¢^TtÖq"XÀæ¹mæ©êØ“µ>gÏÍó­òºìòž•î «/ZÝÛö}ÒàÞ_ÝÅÁ­zƒÝ‰çû–K³¥5]âåùP.U³ð=C€øhlkiæF ¼v¹ âÒ×]öXw¬ƒiº–šzF%.ÓìsíKYÞVà2¶ü€¨Öf¢ð´6€w›¬zƒÕ.ÃÓjw©Ìr[6œ%p¹Ê³òmõlAZ•) s½ºj–Êyk£ÌÏ÷i ¬=Ðê| Úµº6¨}hr“í´_‹ú[mò«¢æ‹æÊºö šòmß=DZ¨O@?SÖ½ÒâÍÞç“ n5«®V€ÁÌÛª¢-p— -gvÔ€ÜêÆ¨:c#+ú¶S¿d«µ@Zn%iËl±Ùj¾k«Œ†©Õ‡Rž,OÅã1ϵ1—ëlÖ½ÑîœObu8{ñ W¯9Ö°fhhwŒ_?±`nwÍ„Pù\áeÕ¬j~­š:–iú¯Àµ4²ôѬ»:¤¿œ§ÙêyÉåQ ‚2¯—~!æ,Zô{ñ/!y£GøéW¾ÛÜ2l§iHkˆ¯ƒôà¸;<Õ¼äȃÑ CRÃvVöÀm—lSÏËP¦"¥,S뉾r{ü¾z.Õµ.mHËï•t‹Ö½Ò8<;]P¿h½íøjZ« Ê€õZB5¦•S2Tï‚»ƒ×¯Ïƒ†‘W*ê–cÔŽ…ºJn ×Úɽ)•§¶Ö뢶­[$\æx…Ô¸ ç_þÜMÖ½Á–n—V]S¿Ñ·÷Çs· ½¤¢-h{i1>è¼fŸ´ \]Go3?€|LõÚ?>~©%ÈÖêXõå–$í^”õk)žy…¨Û¦Ø!•Ôûl÷¬„s‡4·è æÝÌ/äeUÛ–ãZ^›ŠÖ oSѼ)Ï…tÆÀ-7‰Þ7‰»V?tië|Ñ9^ ´Z^ºªüùÛµ6dJí¡aÍÐÐq«¬¸òbD°ÃY[ôJã7>°V5Ÿf? õf¼°bû¡%hy9[=ûk{V‡ä5Þ®¦aäMæù yèä½È5µí©ï6õ*±Òüq›ùXÊ2öÀ fŽ. ¯Þ19»Ö½Á´Vza·èoÓJߦžm{@Žj{ ¤s¹-®çÅ^†¼üæ?­W½Û”³¯m=!]¶jKs¤Ë«¹̹l]YK³Lëæ[ôF;ùeµ])´ZÞÞ¶bÖõZTsrŒ{i6·@ÚWÌ^^Þ˱ùH/{‹Ò[«œËs²T¶L×±V·IÛ·8luí—+y~‡tÍ: 7‡ËZ½´t«®Ñ\Šü!€HÞäú6ð•´ rùŽr­!½¬š=Òr‹Ö€ ?«#×ä ©¤=ó1¦ËÖ¦ŒY)qïí¯ÐY[õúh?Rì~{j½¦‚¡Òr8Tòr=îÒð|ÑA¬äY?ëÖ½Ò¦ <®óO?I€ëy¥Š¶ëJpûŠY–Õ‡*çB0¾ßQÖƒ›³Æµq2ÿ³õàÔ)|k%àÖnѼWÞ‚2O·T°Ì¯»=ʼüø¼ŒŸfŽ«œqë€^iÖó½vIùZÀ»—/R¯Í:Èm%\†-í­mÈ¢;n Ã}Q|ªÔ†°µÏ|ÛT=–¶â¬×iµÚù,`–évÍZŠßF`!ÿo2Y_ƒÜ³•§U3Ûi¡Èët@ŸŠµ^R'»ôJµë¶Íàæ•á·k îrŠ]Lk´U¶s{ÀJM/Z÷M?hZÁ»¤?s©µ«–<©­ëÖ. ü×¼k´öÂtmšª™‡ešÿÙÑn@ô&[}ù8÷â–ËÐVQö\ØÐ6äÛÔrl¡t‰XpôæC¶Ø†TKPg÷“>àù­uiðýZ²Èë ø$ªÝ~¤´oOA¶e›kÃWÍ<œÓ:œ—­zƒö%´¦=¯l‘®æD×Õt yÛï\Â3–µÁm¹bXÊ›A55_ /•²ö“Ê=-¿gé{ŽéV?Ê2kûQ¶»Ê9]úɵú…ç`†QÏp¸ªzË1xy[ôJã`¹m/•ð†jÖñ5á%e×Ð} ËyÊZ cÎ3A\QÓºï¶R¶5®_~­Õ ³êµWÖ’J¶¶eAÝê—¸ô¡ËÖ\:¿+hË: 7ؼ„Bú¿ Ä1ÕšÙÀ¿pœ²5(ó²ka,ëÔ ½×³+/¢ÄWѨ|6J}'–Vš¯>—Q½Uñyªv]Mûj¨JwK ̾zÎoÖT³ K·IWЭÖ}ʶÞå¹TßË_§ ùÃS-ÿ´„hηë »V^·Œÿܨ¥’»‚^²è ¶æÚr¹mô:@×Ã:­TÄKy¶bæé%¼KMó<Þ–øFt˜}ÏæçJ`soÅ_û9=©"\Ú’ç¾y¡’·ÌV;ZOy¡H¯+è>º´è•Vþ)­2ëëô nû¡õÅÚ0¦Üå¶íƒIþ€¡§®mÅëø¿|¢á,ûV~¼_ƒ9!sÚ»ÙË¿|,h˜YP\ü«oa»é#`=ˆ¼í{*šµáú˜õ¶¥*æ×—­–u¾žÝUt´è ¶éò™¯¿Öº55qgté£ÖéKj9¦Ú.ì²\€k5­ÛNiaRͦ viÝS}rk{œÎjÛòÀœÓòg@ë YÖç¾æ˜ï9çÛSíºEë€^i§ñ|ElÍ€ ŸWSÑö”;{Àpýºmš]NÏÛ¶Õs pùÁëMBbKÚí)‡PäI[ö=×±±,'Wˆr¿u›m®¡zƒŒëü··Ìüº{£ÃyÙ†å"/_û•_ù|ÿ÷?þéŸþ©ÈûèG?Šw¿ûÝx×»Þ…þçyÏý£Ù^h\ZËûeBó¶–—ÜÖÓÇÿßBûµín­“oíZ=û˜•Šº4Âû¯#°Ù2¿V×Þîi ¶Íj×Æ×¿¹Ð/o>zó1‘pæe¼v ñ3¥óõ•Ìëèr9÷ÚxèìÏÙ³3 èüãxÓ›ÞT¤ßºu ?þ8>ýéOãø{ì1‘ÿ_Žÿqñ†mu+/Ýd¾¹LÓœóçr¶ìk×®ebbâ§güQ~¿Ÿ±±1¶oßÎØØØì/¹ßïgxøëå§iš'cæ,Û\[¶l†a0==íPÂü*ôýÊ'A/Ðb½PlooǶm,Ë¢¯¯·oß‹Å8uêmmmx½^lÛ¦¯¯+V8÷?%“IŽ=ŠÏ磴´”7â÷ûÙ»w/ÇŽ£¸¸˜T*UpgšÙæòz½ 033Cuu5/^t:jN’É$­­­Ü»wÆÆFêêêÅ~å“ ZDÄ¥tI("âR*h—RAKÁzøð!@€––:Ääää7ß“H$èêêš÷ç›››I¥ôĽTÐR°< ‰PSSÃÓ§OiiiáÌ™3\ºt €H$BSS?~¤££ƒóçϳ~ýz¦¦¦Ø·o·oßvx ‘ìTÐR°2™ wïÞ¥©©‰‘‘zzzXµj¥¥¥¼yó†ééi^¾|Iee%ååå„Ãa>þÌÍ›7)))aÇŽ :=†HVzZ –Çã! ÒÞÞN(Â4MB¡Ðœ÷„Óéôì×—/_fË–-ìÙ³€ââblÛþå¹EJOв(„Ãa¼^/§OŸæìÙ³´¶¶àóù˜ššâÙ³gD£QFGGéèè •JñêÕ+jkõ†©¸—Þƒ–Empp÷ïßsøðáoÖ:;; …BTUU9Läÿé ZµÝ»wSSS3ïZ0T9‹«é ZDÄ¥ô-"âR*h—RA‹ˆ¸” ZDÄ¥TÐ"".¥‚q)´ˆˆK© ED\J-"âR•Æð²U-ŸIEND®B`‚mpmath-1.0.0/doc/source/plots/lambertw_c.py000066400000000000000000000001401316273626600207040ustar00rootroot00000000000000# Principal branch of the Lambert W function W(z) cplot(lambertw, [-1,1], [-1,1], points=50000) mpmath-1.0.0/doc/source/plots/legendre.png000066400000000000000000000666021316273626600205250ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxTÕևߙô@„Pj("½ HQQÁ‚ "(WA)‚ ˆŠŠFEôrëDEÀ+ˆŸ P@‡„ÞB ‚i”RIÏ̬ïcBI›dÎdfð¼Ïs®gÎÞ{eÍ™5{Öoïµu"ò3Ð ‡Â%8ßboC44444®Eoo44444ÊF Њ 5444-@khhh8(Z€ÖÐÐÐpP´­¡¡¡á hZCCCÃAÑ´††††ƒ¢h E Њ 5444-@khhh8(Z€ÖÐÐÐpP´­¡¡¡á hZCCCÃAÑ´††††ƒ¢h E Њ 5444-@khhh8(Z€ÖÐÐÐpP´­¡¡¡á ¸Úsð¤¤$^ýu"##Ù·o_Éu³Ṳ̀I“puuÅd2±lÙ2;Z©¡¡¡aì:ƒnÒ¤ _~ù%õêÕ»æzxx8­[·fÉ’%n' 5444ì‡C¦8’’’hÒ¤ Í›7'11ÑÎihhhÔÜó¡½­p(L&“½MpH4¿”æí“C‡ [7ذÚ¶å£Es¼0‰“©'ñóó³·u× ‘ÃÀ-ö6¤*èt:\û¸âv‰3©ç]¯òF_~ S§BAŒEæ’ú¼=…¦BâŸç¥i/ñÕW_ÙÛÊœvÝØØ˜IIaÃ`Þ<ðñõëaÁp½²ªx[Ü6]8DÿÚýIù+…M 6u6ÊŽF—SèZµjËÌ>3X¸{¡=MrþqÂ…h~)Í ë“½{•”ÆÖ­Ð±#8#G–ºíýÝÊìùy×ç9Îq\\À×_]ÓÖVŠShwww@ ж{ ß 6ÞDTŠã}Ö$ÿ(á§ h~)Í çX¼XÉ/'&¸q°g´)½‘-*%Ч6äDÇÄŽœå,­Zµªi«+Å)tÆ 8}ú4n.n<ÛëY@Û¸ò~ªˆæ—ÒÜP>ÉÉQv>óŒòß‹ÃÊ•ð÷/íëY´{ÏõzŽìÙ%ºuëÖ5bnUpÊm4e 0±ëDj»×få‘•¤ä¤ØÓ4»rà ?ÕDóKinŸÄÄ@¯^°z5ÁŽ0e èteÞžœÌ7G¿ÁÇ݇'Û=É僗9çvÐfЪ€±±±ˆu<ë0±ëD L,Þ¿ØÞæÙZø±Í/¥¹!|²~=tïÇÃí·+Kèzö¬°É÷ÿ—BS!Ow{Ý1R$œÓŸÃÕÕ•¦M›Öá–ã”Úh4Ò²eK²³³¹xñ"Ïö|½NÏ÷ÿ—|c¾-´7¬ðc%š_JãÔ>1á…`Ô(¸|^6mÿ ›åå²xÿb\t.<ÛëY2wd’G— .Œ««]kÇ•‰S蜜œ’Ÿ#ÅiŽà›‚Ùn$)¹)¬>ºÚžæÙNøQ Í/¥qZŸœ?C†ÀÂ…pÓMÊF”7ß—J›~}økRóRy¸ãÃ4õkJæÎL‡Î?ƒ“h???Z¶l (Ba13{+Kîþ©Wn(áGE4¿”Æ)}]»^ù÷àA¸ûn‹ššÌ&íQÄÁY}f!f!kW–CçŸÁItjjj©4@Ÿ >ôiÒ‡¨”(~ýÝ^æÙFøQÍ/¥q*Ÿˆ(3æÁƒáÂxê)ع‚ƒ-îâ—˜_8všAÍÑ5 +¹Q¹3Œ\j| дªÔ«W¯d}u€J6®/¥ù'qC?6@óKiœÆ'YY0z´’svsSÊ….[žžUê¦x#Û¬>³ÈÜ‘ @²_2 hU1%½:ÅpÈý4¯Óœ-g¶p,ù˜=̳N-üØÍ/¥q ŸDFBÊj-`÷nxâ‰*w³7i/;vâÂ]­•ÂH™;•dJ´´ªäääиqc<<¶šøŒx;YYó8¥ðSh~)Ãú¤°¦O‡±c!?æÏ‡TVlTƒ¿Òÿb}ôzÔjÀ¸Nã(8[@~\>úözÎ?GóæÍqss¼býà¤:55 L¡ÀÇÇg{=‹ÑldÁ®5nŸ½p*á§ÑüR‡ôIb" Ÿ~ õëÃæÍ0g諦>Üû!f13­Ç4<]•¼uqz#³½ò¯£æŸÁIt½zÊ„e-µ+æÙžÏRË­Ë#–sþòùµÏ^8ðSÃh~)ÃùdëVeéÜ޽л·²+pÈ«ºLËKcyÄr¼\½˜ÒcJÉõ⨔…дÊ×â(o PÏ»SzL¡ÀTP²þñFÇ)„; ù¥4ã³Þyî¸.]RÒaaФ‰Õ]´÷#rŠrx¢Ëø{_ÙeXœ>ï¥LÜU ' Ð999å.µ+fVŸYx¸x°dÿRsSkÌ>{áðÂÐüR‡ðIz:Ü{/¼öxy)ÂàÇÃßå„­!3?“ö|„›Þ—ú½TrÝxÙHöálÜ܉OSô)m­2~~ÊÙa¥8ÕnÄÄ®É)Ê᣽Õ˜}öÂa…;£ù¥4v÷É¡CJaý  m[Ø·ÆŒQ­ûÿîÿ/™™Œï<ž¦~WŠ ]Þ{ÌÊùƒ§N´­:Å"aóæÍÑëõåΠ^ì÷"®zW>Ù÷ YY5e¢]pHáÇÐüR»úäË/¡Oøë/¥àÑþýСƒjÝgf³h÷"\t.¼Üïåk^+NoøõóãôéÓ%«Á§ ÐÅ"¡»»;M›6%))‰¼¼¼2ïmê×”Ç:=FF~Æ _ŠÔá„AóKiì⓼<˜8&LP*Ò-Zk×*çªÈÒKIÍKåÑ›¥eÝ–×¼V,ºww'))‰fÍš•œÐäˆ8e€. áJ‚¿¢YôË·¾Œ^§gÑîEä9ˆ8bFøq04¿”¦Æ}ræ ôëË—C@ 0cF¹…õ«K^Qïïz:^éÿÊ5¯™ ÍdíÎÂ¥– ¼/ŽÞ' ÐÅ"!\É¥EGG—{›zmÝ~4)¹)|ñ…Íí³!ü8 š_JS£>Ù°AÉ7:*Kèú÷·ÉP_D|ArN2£;Œ&ÄÿÚ<ûåý—1å˜ðàljS'h×®MìP § ÐÅ"!\qpE(ù6ýÏ®ÿPh*´qvÄù¥45â“ æÎ…áÃ!#fÏVÖ;7jd“á Œ%Ó^íÿj©×ÓÿLà¦Á7•Ä -@Û€b‘,ÐvâÞ¶÷’”•ÄÊ#+mjŸ½ÐݲÑüR›û$%† ƒyó”óúõ°`ØðÔ’¯|MRV÷µ½N ;•z=ãÏ ê ©£h[R,‚å®|«¾·ã=Œfc%w;šV6š_JcSŸìÝ«¤4¶n…Ž•BG#GÚn< ÈTÄ»;Þ൯•zÝ”k"sW&®7¹Rû–ÚZ€¶%W‹„ 4ছnâäÉ“˜L¦ ÛõlÜ“¡-†›Ëw‘ßÙÚÌGÃÊFóKilâX¼XÉ/'&¸q°g´i£þX×±æØâ2âÖjÝ»—z=kWR(ÔT³˜9yò$uëÖ¥~ýú6·Íœ2@_-êt:BBBÈÏÏ'>¾òÊuųèù;æc³Íl´šV6š_J£ºOrrà±Çà™g”ÿ^¼V®„ZµÔ§ LfówÌàµþ¥gÏpUþyÈMÄÅÅQPP@HH:•W‘¨Sè«EB¨Zšc`³ô êKTJ?øÉ&öÙ M +Í/¥QÕ'11JíæÕ«!(vì€)ST_BWë¢Ö“àæƒè×´_™÷çŸI ' ÐW‹„pÅÑ'Nœ¨´­N§+™E¿³ýêpYM +Í/¥QÍ'ë×C÷îpü8Ü~»²„®gOuú¶³˜™>€¹æ–y1ÓHÖþ,ÜÜñjë¥h[sµHU›AÜÕê.º4êÂÁóÙ»Yuûì…&†•æ—ÒXí£Q9'pÔ(¸|^6mÿÊÛªÈO'~âxÊqúõå¶æ·•yOFx˜•ô†N§+™ÈiÚF\-BÕôõ³èM +Í/¥±Ê'çÏ+µš.TN:Ù°Þ|\\Ô3ÐD„·Ãß”Ùsyùä’åuƒëh3h[sµHЬY3<==‰ŽŽ¶8eñ@»hçߎí Û ·…™5Ž&†•æ—ÒTÛ'ááJaýâ„»ïV×8 Ùtz‡.¢{`wîlyg¹÷]½AEDˆŽŽÆËËËaÏ!¼§ Ð׋„...´mÛ–ôôt.^¼hQz¾dwáë†×oˆ\´&†•æ—ÒTÙ'"ÊŒyð`¸pžz vî;U‚»zöüZÿ×Ê=^,$çh^-½ðlæIrr2´mÛ½GiÕŽoa\/BÕÓc:Ž¡;ÂâÃØzf«jöÙ M +Í/¥©’O²²`ôh%çìæ¦” ]¶ <=mg`%üùןìIÚÃÍ nfDÛåÞ—±ÍyÓà¤úz‘ª ]ô.¼=Hù~åÏWœ~­‰ae£ù¥4û$2zôPVk´h»wÃOØÖ¸JÞ  Pv êu凱«—× k„ëEB¨^€Ùn$ݺqàÜ~<ñ£*öÙ M +Í/¥±È'kÖ(ë›cb`ÄeËvçζ7®6Çn&<>œvþíx°ÝƒÞ[œ®3H›A×׋„`YÙѲÐét¼3XYÉ1×0“¹âí⎌&†•æ—ÒTè“ÂBåðÖ±c!?æÏ‡TVlس˜yåOE;zgð;¸èË_9’Ÿ˜OÞ©ÙºUY:·w/ôî­ì 2¤æ+£ÙÈk¥ÖÆüÁó+­£quý €¬¬,Ξ=KË–-ñðð°­±*ᔺ,‘ª¶åûzú7ëÏ]­îâLú¾<ô¥UöÙ M +Í/¥¹Æ'f3¼óÜq\º¤¤7 IûX_þŠ˜Ô†aH‹Š¿8DD™Aë¡ÎeíL;‹qÊ]–HÕ ‹™7XÙÓÿVø[ä•}­#£‰ae£ù¥4%>IO‡{ï…×^//Eüøcp°ƒTóù¼ö&ïy·ÒûóNåQT€O7\ë(‡8›@vй¹¹<úè£Lž<™9sæ”\‹‹£C‡L™2…?þ¸T»²DB°>@w èʨö£8wùK,©VöDÃÊFóKi”3»uS¶j·m ûöÁ˜1ö6­Lï_LRV#Û¤Gã•Þ_²¼nÈaS ÐUdíÚµÜÿý,]º”ôôô’’N§ÃÏÏììlKµ+K$ë4À[·½…^§gþöùddU»{ ‰ae£ù¥4!»vAŸ>ð×_JÁ£ýû¡C{›U&YYÌß>½NϼAó,j“ºIÑ©nªèj“””D“¿ó\Íš5#11±äÿïÚµ‹¯¿þšÏ>û¬ÔŒ¹,‘ª¿ÔîjÚÕoÇc#5/•÷|Xí~ì&†•æ—«È˃‰‰˜0A©H·h¬]«œè ,ܽԼT¿åqÚÕ¯<¸š ̤oMÇ¥¶ ~ý¯Læœm‰Ø9@•œ‚_¬‹ÑëõøùùQTtíªŠ¼¼<¾ûî;~üñGÖ¯_(€››œ>}šÂÂBNœ8Q’k+þZríoàšêÊûa›Z¥¶ö¼æííí0¶8Ò5Í/_;~úõ#bùrºp⫯È4 t:ǰ¯Œkñ)ñ,Ú½×dWB†ZÔ6#,ƒ¸Ü8<y¢w×AAA§OŸ& __ßkÚ:tˆü‘… ’™™‰C!"‡ÅNäääÈ£>*S§N•_|Q>ûì3Ù¸q£„……ÉSO=%O>ù¤¼ýöÛ¥Ú;¶Ü>‡ "€DFFZeÛÔ S…PäÅ-/ZÕOM’““coÍ/"òë¯"uꈀÈÀ’ko‹,âùßžB‘ç6=gq›SÏ9÷Ź’kÇŽ@†ZaÛñãÇW×T›`»3Ð-ÀÛÛ›Õ«W—ùÚ€ÊmWžHJ~é?þ **ŠVäÔ^ëÿ+­à“½Ÿð|¯ç ð ¨v_5EBB‚Sý|«)þÑ~1™ 4æý»=æÏ'áôiÝ# ™ ,Þ¿˜ZnµJ*OZBê%Z÷®º%×¢¢¢çÊ?ƒ“.³+O$¸å–[8räˆUcø0½×tòŒyNSÔÿ„*áë—”6L Î>>JÁ£ ÀÕÕ)|º-”BS!3ṳ̂A­µÉ=•KÞé8 N Ë :ÿ]ÌåðáÃVóbßñõðeÙÁeÄeÄYÝŸ­¹Z £P”VD~b>¹'r¹|ð2ÙG³)J+rúª}Uå)îÝ«,¡Ûº:vT Yò²£û$:%š¯|M]¯ºÌê3ËâviÒ¨wϵ›ÙŠãAg(öTìšâ¨.åí$èСz½^•]Ï»³úÌâmoðfØ›¬¸o…Õ}ÚŠ¼Ø<rê«S\>p™ìCÙ˜óÍeÞ«÷ÖãÑį^øõ÷£Î :øt÷Aïæ”ßוòÚI(K–ÀóÏCQŒK—B­Z×Üæè>™k˜‹YÌ̹u~žåÿb¾žÔ§7î®{ÍõÇãââbUÚÓ8e€.o'!€——!!!DEE‘’’Býúõ­kFï|²ïVYÉ }^ CÇyƒ™F.þï"V\ koùäã‰RDݵŽ+Þ!Þ¸ÔrA_K‹· æB3I$“G^Li¿)3—Ú.ø ð£á˜†ø?è‹WÍž/gKrssñöö¶·¶''&M‚Õ«•Âú‹ÃäÉPFÍ GöÉþ³ûY½žÆ>y¦Ç3·3e›ÈËÀµ®+¾½|K®_¼x‘sçÎÑ¡C<íxÈ@upÊ]‘HÊϘ¨¨(Ž9ÂСC­ËÇÇWû¿ÊŒßg0kó,6ÝTi‘[“CÂ; ¤¬O)™%{µñ¢ Oíîl‡o_<[zVh§)ÇDNT† 2 dnÏ$mciÓpæJƒG01Ÿ®Ž»>ÖRþ"aLŒ’Â8~‚‚àûï¡gÏrowdŸ—}càx¹yYÜ.ýt¤P¨;¬.:—+Ï~qþÙÙÒà¤9èŠDB¸òFX+3µÇTZ×mÍﱿ³éô&Uú¬E—Š85ín>@òêdtn:&ÐegzžèÉ_ÝIÃ1 ñjåUé—ˆK-|{øÒôŦtÚÔ‰~éýè´¹ i€)ÏĹ%ç8Øí ‡o;Læn[ZE5©Æúõн»œo¿]©BWApÇõÉŸýÉÖ3[i]·5Ot©ÚÉ-Å«7êÝ}m T Ð5LE"!¨+¸»¸³ðŽ…Ìü}f—#5šI|?‘½­örö¿gq©íBË÷[Ò÷|_Ú~Þ¿¾~è®ÚlPônzêÞ^—öß¶§ïù¾´ú¸Þ!Þd„ep¨ï!ŽÝwŒœÈй8*Ž.ˆU£Q9'pÔ(¸|^6mÿJ›:¢OÌbfö–Ù¼=èm\õ–ÿÀÒ6¦ê+-@׉„pe)Z`x›á m1”“©'k´RÞ_yêwˆØÙ±˜²M4žÖ˜^§{4+—Z׿‰Õ~ÜêºÑdzzDö ä«<šzús*û;í'ú±hòÎ8W¥?GĪÅùóJ­æ… •“N6l€7ßË´GôÉW‡¿"â|½›ôæ¡U©mÎÑ ÎàÛÛ·zn×¼Vœm‰8i€®H$hРDGG“ŸŸ¯Ê˜:ŽEw,B¯Óº-”ÔÜŠgñjpéçKìzË.ã×Ï‘=hýIkÜüÝʼ_í²š:Æ7¢WL/Z}Ô 77’W%³¯Ý>ÞK@ŒÎ±\ï†+7®Ö/þ÷àA¸ûî*uáh>É*Èâ•?”Üó‡w~Xe§xõÆõËëòòò8qâV/°N + Aù9c2™8~ü¸jãÞÜðfžîö4éùé%µim¹ÈL싱DÞ‰1ÃHЋAÜb¸ïŠUw[•ÕÔ{èiòlzŸéM󷚣Óë83ç ý"ȉv¬´Gnn.Geýúõ|ñŬZµŠeË–ñË/¿°}ûvÇ«µPD”óàÁpá<õìÜ ÁÁUîÊÑJ°Îß>ŸäœdÆuG¯&½ªÜ>m£²éúåuÇÇd29ezœtGe"!(zÓ¦M9r„nݺ©6ö[·½ÅšckX¼1SºO±¨ºVU0嘈¼?’ô­é¸Öq%äëüï­<§¶~\j»Ð|nsŒnÀ‰ ko»$x^0Mf4¹F9¯).^¼ÈÏ?ÿÌO?ýÄáÇIJJª´MëÖ­éÞ½;={ödäÈ‘4mÚ´,µ’¬,xòIEôô„Ï?‡'ª&¢]#‰„±i±|°ç¼Ý¼yoÈ{Un_”VDæ®LÜܩݹö5¯9³@N + A}¡°˜úµêóú€×yaË ÌÚ<‹c7ªÖ·1ËȱáÇÈÜžI­Nµ¸ù§›ñlnùºÍˆˆˆÉ-z‡xÓeg&ò×Ü¿ˆKÊ)„|‚wkÛ¯­½|ù2_}õëÖ­cçΘÍÊRC½^O‹-hݺ5­[·¦~ýú€ŸŸ/^äàÁƒœ:uŠS§Nñí·ß2sæLÌøñã9r$µ®ÛÐáDFƒ*KéZ´P–ÐuébU—5õ¬XÂì-³)4òZÿ×hìÛ¸ÊíÓ7§ƒYY½q}jÄ™BÀ¾Õ쪋%§Nž<)€ôïß_õñ ŒÒêãVB(²1f£*}¦ÊÁ^Å€Aô8 …©…ªôkk²gËîÄ€AÂ}ÃåÒ¯—l6Vzzº¼õÖ[R·n]ÀÀ@yæ™gdëÖ­’ŸŸoQ?©©©²yófyùå—¥I“&%}Õ®][^xáIMMµÙßPeV¯ñöVªÐ!’–fo‹TåÏ3 ¡HÓšJnanµúˆ% rqýÅR¯Ýzë­HLLŒE}9Z5;§ Е-Æh4Š···øøøˆÉdR݆£B‘vŸ¶“B£uÁ´0¥PöwÞ/ Ñ/BŠ2‹ªÕ½Êjš‹ÌræÕ3bÀ AâæÇ‰ÙlV­ÿÌÌLyõÕWÅ××Wqqq‘Ç\öìÙcÑ{[‘_ŒF£lÙ²EÆŽ+žžžH:uäßÿþ·äæV/`¨BAÈ´iJ`ÖëEÞyGDÅçØJ°MFé´¤“ŠüïØÿªÕ‡Ùh–þ;d›Û¶RŸ“É$>>>R«V-‹c€ Uàþûï·è¾Þ½{ ±6¨}k6›eð׃…P䓽ŸT»Ÿ¢Ì"Ù×iŸ0È¡A‡ÄxÙXí¾¢££«ÝV .®»(aÞabÀ Ç>.Æìêÿ-Åüúë¯%³\777yúé§«ü~Zê—sçÎÉäÉ“ÅÅÅEiÒ¤‰¬Y³FÕ/‹HHéÕK Îþþ"–mÁ# IDAT[¶¨>„½Ÿ‘¥û— ¡È­_ÞZm§‡¥‹ƒR:Œ>}ZéÓ§ÅýiZ,uâäÉ“~øÁ&v¹pDôoê¥î¿ëJjnÕ›‹ÌrdØ‘’̘k}@³7—\–ÝÍw‹ƒìï¼_òâòªÕÏÅ‹e̘1%é‡1cÆHBB‚ÊÖ–ÍÉ“'eÔ¨Q%c?ôÐC5—öزE Ê Ò»·HbbÍŒ[ä祋ÿÑ…êäÀÙÕî'fzŒ0ÈÙ%gK½¶~ýzdÊ”)÷çhÚ)—ÙY"‚í„Âb:5ìÄÄ®IËKã­°·ªÜþôŒÓ¤ý–†w{o:¬ï`u"GØV»SmºíïFAuÈ>œÍÁîÉ˨R¿üò íÚµãÛo¿¥qãÆüüóϬY³†   jÙTU¿´iÓ†uëÖa0hÚ´)k×®¥S§NlݺµZã[„Ù ï¼wÜ—.Áôé×§ö~Væ…ÏãRî%þÕù_t ¬Þ*+1 )ëS@þ”^éäô!ܸ"¡ˆÈž={{ï½×f¶$g'‹Ï|q}ËU¢S,ÿÙ˜ôI’0ÈŽú;$÷Œs6ÂTh*™ÝlsÝ&g—•žá\Ùl–ùóç‹N§@&Ož,5`mùdddÈc=V2›ž5k–*ÿÒIK¹çeÖìí-²fºý;1—bÄí-7©=¿¶œ¿|¾ÚýdìÈPRƒ·*óõ#F {÷OG›A;e€¶D$Q„½^/M›6µ©= v,B‘{VßcÑý©›RÅ 7È6÷m’±S½äÂÏõœ[~N¶¹o‰/¾ÜûrssKRÞÞÞ²~ýzÕlPÃ/k×®-Y=2bÄÉÎÎVÁ2‰ˆ V‚sÛ¶"Vž¥i)ö|VF¬!„"ïnת~N=¯œ=˜ôiR™¯‰^¯¯Òߪh°T$iÛ¶­6Í!æåK‹Z¡Èo§~«ðÞÜÓ¹î. raÕUípá§,Ò¶¤Ix-åoŽ}9¶” ”””$Ý»w@š6m*‡«ûHªå—3gΔ37—_íÎ\d&zl4¦Ë&š¾Ü”†cªj‡#í»š›†ÞD§-p­ãJÂ{ œzæbVêxìÛ·=zpàÀn½õVöï߯zQµüÌ®]»èß¿? OŸ>DGGW½£¼<˜8&LP*Ò-Zkׂ¯oåmUÂÏJ‘©ˆç€÷ïxO×êÏ¿¼ï2IøÝê‡G€G©×}a1N - áÊtèÐ![™Àý!÷3¨ù ¢R¢X´{Q™÷ÄÏ‹'ko>=}hþVsÕm°·ðS~}üèÖ÷†îœ[rŽŸ`óo›8p çÏŸg„ üñÇ4h`Ùá UAM¿Ô­[—Í›7óÈ#Gß¾} ³¼ƒ3g _?X¾À`€3Ê<õÄ–ØãYY´{Q)Q j>ˆB°ª¯”ïS¨?ºìHÅŸwgÐN™â¨ÊÏ-[¶ ?ü°í ú›è”hqÛ]¼æyÉ™´3×¼–±#C zƒ„× —ÜS7ž(h)919²«é.YÈBñÐ{ ÿùÏj~­±•˜L&y饗wwwËræ¿þ*R§Ž’Ò8PÄÚ‰›+^ó¼Äýmw9‘rª¾Ìf³ìn¦,åÌO*{÷èC=$€l©âr-Å¡••½šž={¢Ó騳g -RñaέsÈ3æ1uãÔ’Ó³YF¢ÇEƒZ}Ò ¯V–ãS­„dYx·ö&kA¯è^¡À\ÀìÖ³™1y†M³…_ôz=ï½÷K–,¡¨¨ˆGy„M›Ê9mÇd‚¹saøpÈÈ€Ù³•Ó¶5RÝ.K©ÉgED˜ºa*yÆ<^¹õÚú·µª¿Ë.“Ÿo__<—NoìÙ³NGÏJN–qtœ2@[Rn´___:tè@||<çÏŸ·¡U /ßú2mêµá·Ó¿±.j§¦"?.Ÿú£êÓè_¶ûP:Z ɲضm<ñRÀŒÀÜ}ênŽ;Š)Çd³1mé—É“'óùçŸSTTÄÈ‘#K§;RR`Ø0˜7||”jt €«}ë”Õä³²öøZ~ý6õÚðò­/[Ý_qz£Áè²ÓaçÎ#!!Ž;â[ƒy}[à”º*"!@ïÞ½ؽ{·-̹OWO–Þ³€ç~{Žøµñ$“ŒGcÚ|ÖÆ¦3EG ‹ çž{î!//÷ߟÇàÓӇ̙DÞYr®ÚØÚ/&LàÃ?$??Ÿádzwï^å…½{¡[7e¶Ü±#8 ìêÔÔ³’‘ŸQ" .½g)®eÏx-EDHY§hÿË.Ã[ü9ïÓ§Uc9N «"•7ª&Òƒ‚ñø-“–žFäôHÚ~Ñ·ºeŸ„¢Ž,îܹ“»ï¾›ÜÜ\,XÀ¬Y³p­ãJ§ß:Qû–Ú¤ÿ‘ÎñÑÇ1ª¤kÂ/Ï=÷óæÍ#;;›aÆqä•W HL„qã`ÏhÓÆævXJM=+¯üñ ²/0þ–ñ duÙ‡²Éÿ+ßÞ¾x•½ ¤øs^<1sjä ED¢¢¢[o½Õ6•ÁÅì‹2yèd1`°;Ãjl\GääÉ“rÓM7 ï½÷^©× ’ doÈ^1`ÈÑ‘b.r.Á°³Ù,/Ïš%€Ô9áê*²x±ˆ“  j±+a—èBuRïßõ$%'E•>cçÄŠƒ$¼_~]–~ýú P­µÞšH¨U Ú¶mK:u8pà………6²êZj'×ftøh \ xãÖ7jä$pG ÓÒÒ1bééé¼ð ¼ôÒK¥îqoàÎ-[oÁ³…')ëR81áDÉ:i5¨)¿èNbþ¦MLR€¡uërî¾ûj| %ØÚ'E¦"&ý: AxÿŽ÷ñ÷¶ìT Š«Òõ,{y]aa! N:´q _,ÕÅ)tUDBP÷^½z‘ŸŸoÓ +W;3}¡žÃw²Í´÷|hó1M$,**bÔ¨QÄÄÄpß}÷ñÞ{ågäÑØƒÎtÆ£‰É+“95íTÉ*k©¿¬_Ý»£‹Šâ£¡Cyüá‡Iºx‘x@µƒ‹ÕÄÖ>ù`Ï»xŒÍ2þ–ñªô™s4‡¼Óyøôð)÷¤¡#GŽPPP@ïÞ½Ñë2¼]ƒSþU áJº&„ÂÔM©\úéžÍ=yä£GpÓ»J\FœMÇu$‘PD˜:u*ƒÎ;³jÕ*\\*®ÖçÙÜ“[þ¸¥d3Ë™Ϩ¤mê£^xF‚Ë—áõ×Ñÿö˾þš¾}û²oß>ž~úiÕ¾lÔ–>‰Ëˆ#t[(nz7–_ªš0^2{UþéÜ7’@N «*BÍ­ä0˜9ýÜiZ}ØŠöMÛóò­/“[”Ë3Ÿ±éÕ‘DÂ>ø€/¾ø‚FñË/¿P»víÊÞm¼¹eë-¸Öu%ñýDâߌ·Ú›ùåüy2D9iû¦›`ÃxóMpqÁÃÃ~ø&MšðÍ7ß°páBÛØPMlåá™ÏgÌcNÿ9„ø«óE f!yU2PþîA¸òù¾!Bøgˆ„"Êyv€«oÐUÄ¿/ rdØ‘’ÝqyEy%g®;¾Î¦ã;?ÿü³èt:ñôô”}ûöU«¬Yî«XŠ_P~<»&Ò¨‘²+°kW‘3gʼíàÁƒâåå%z½^6nTçüJGfmäZ!iýqk«Š!]OÚiJiÑe—-¦yóæ¢Óéª]¦V U ª"!@:uh×®ýõÉÉÉ6° ’ ˆ{;›ŽVµ*ùiçéêÉ’{–ðì¦gÉÌÏ´ÉøŽ 9r„1cÆ "¬\¹’=zT«Ÿn>tÚØ ½·ž3/žáÂWªm“ª~Qf̃Ã… ðÔS°s'—y{×®]Y±bf³™1cÆpòäIõl±[<+™ù™<ûÛ³,¾ÔªbH×Süþ7z¢ü^.\ ..ŽöíÛW+ êˆ8e€®ªHXŒ­óб³c1çš š„wïk^Úb(ã:ã|öyfmže“ñí-^¸p#F““üyó=z´Uýùõó£ãÿuDçªãäS'IÛœV­~TóKVŒ­äœÝÜàË/aÙ2ð¬8=üðüúê«dffrï½÷’‘Qµfl-ž•¿ÏàBöÆuÇààÁªõkÌ2’ò} .µ],Ê?ß0é œ4@W÷ÛÑ–V²fsñqp§Ù«Íʼçƒ;? a­†,?´œ 1T·Áž"¡Édâá‡&11‘qãÆñÊ+¯¨ÒoÝ;êÒö‹¶ˆQ8þàq²gW¹Uü =z(«5Z´€]»à‰',nþÖ[oqï½÷Ø1c0™l·µÝÔ~V~9ù +¯ QíF|x§º+–RÖ¦`Î3St}\j•/4®oœ4@WG$Û …ño+bVÓ—›âR»ì‡ÈßÛŸ/îý€‰¿L$5·zGyØS$\°`ááátéÒ…Ï?ÿ\Õ-íÆ7"øí`LÙ&ŽÞ}”üøª-[³Ú/kÖ@¯^#F([¶»t©Rz½žo¾ù†:ðÛo¿•¹¼&QóY¹”{‰§~y €/F|A=ïzªõ –¥7àÆ[ÁüsDB¥D¤¯¯¯xyyIaa¡jödËÙÙh§E's?ùÓ“B(òк‡T³Ážìß¿_\]]ÅËËËf'u˜Íf9ñÔ 1`½íöJašzï_¹ˆL›¦z½È;LVuyúôé’£³luÚ|Mb6›eÔÚQB(2á§ ª÷Ÿs2G dOË=–¤-,,///ñóó“ï‘&ª@uDB¸²a%//cÇŽ©fOü¼¿gÏ/5µèdîîü€f~ÍX{|-ÿ‹üŸjvØC$ÌÉÉaìØ±F.\h³4‹N§£Íâ6Ô½».¹Ñ¹DÞoyq¥jù%1 €O?øýwxå°róCË–-Yµj Y²—n Ö³òmä·|õ=Íüš±èβª°†’Ùó¿Uø«ìèÑ£äååÑ«W¯bƒJ1Nù—TW$õÓ9Q9\\{÷†î<`Q__VÜ·€©¦rîò9Ul±Ç‡}æÌ™ÄÄÄ0|øp&OžlÓ±t®::|ןî>d†g=>Ú¢-áUöË֭е«R®wo8t†­¦Õ¥¹ë®»˜9s&éééŒ7®ÚkPãY9›u–g6>ÀW÷…¯‡º¥=Å$$¯L4|¼âãánDœ4@[³„¦8?µk×.Ul‰'‚fáâ]ù치AÁƒx®×s¤ç§3ñ牎¿c® ~úé'–-[Fƒ X¾|¹MK©ãRÛ…›½Ï`ORÖ¦pæÅ3•¶±Ø/f3¼óÜq\ºÓ§CX4ib¥Õ¥y÷ÝwéÖ­Û·ogÞ¼yª÷_Ö>+"ÂÄ_&*åD{?ÏmÍoSǰ«HßšNÁÙnržM+^)Süy¾¡òÏàœ9èáÇW»mFF†¸¸¸H£F¬>f)çDŽôÙQ‡³+Ï=_Ona®´ý¤­Š,;°Ì*[D”M5ÅùóçÅßß_Ù°aC[LÎÉÙQo‡0H⇉Þk‘_ÒÒDî¹GÉ7{{‹¬Y£’¥å#µk×½^/aa5[ñÐÚg峟 ¡Hȧ!’[h›#ÜŽ?|\ äÂê Þg6›¥aÆâââ"™VžŒîh9h§ ÐÖ:±OŸ>Hdd¤UýD‹²z§ÛÞ¤½âò¦‹Ôž_»Ô9†ŽŠÉd’;ï¼Syæ™gìfGÆÎ ó ƒÎ ¿¿XýŽ""D‚ƒ•àܶ­ˆ•ÏEUX¹r¥Ò¤I¹téRk ±i±RëZâò¦‹ìKªÞNÑÊ(L+”00 ÷ cNÅ“ŸcÇŽ }ûöµz\G ÐN™â°6g7ôï|â–-[ªÝGnL.Ék’qów£ñ”ÆÕî§gãžÌé?‡ìÂlþõÓ¿0Kõ Ö×”Høé§Ÿòûï¿Ó®];þóŸÿÔȘeá××vkÚ=6šÌeïЬÐ/_~ }úÀ_)öíƒlan™<öØcŒ7ޤ¤$&L˜PcE•ªû¬˜Ì&þõã¿È)Êá•þ¯Ð£qõvŠVÆÅÿ]Ä\`¦Á# *Mއª¨8 N ­ n¿ýv¶nÝZí>æ'€‚f•»îÙRæ˜K—F]·ª,iMˆ„‘‘‘¼øâ‹¸¹¹±fͼ¼ls®¥Ô >­?n¹À̱ÇÈ=Q:ð”é—¼<˜8&LP*Ò-Zkׂΰ[¼x1­Zµâ§Ÿ~bÉ’%52fuŸ•÷|Èö„ítiÔ…×¼¦²UW¸°BY½ðDåÂ{ñç¸øs}C!ÿÀGAAÔªUKjÕªU­õй§se›Ë6Ù^w»eYeK1Ç’‰ûÛîâñ¶‡¿x\•>Õ&??_:uê$€,X°ÀÞæ\ÃéÙ§Å€Av7Û-ç *¾96V¤K%¥ ^3FVÀþýûÅÍÍM<<<äÈ‘#ö6§L"“#ÅãmqÛ]Ž%³Ù8Åû ö¶Ý[©NTüY®]»¶*{n¸G\\_~ù%ü1ááá*|eTNuwãîîÎÀÉÉɩֶ裸“43WuNgîØ #oz›S®”|cÕ‹¼Ûz'á+¯¼ÂÑ£G4h³fÙ¦žHuiñ^ <Ò€üø|ŽÞsãå+i°kü²aƒrë¡C0p DD(gÚ™îÝ»óî»ïRPPÀ#N à©€JWíÙ³‡œœˆ››mÏü´VègŸ}–%K–P¯^=BBBˆˆˆ`üøñ?~\-ûʤ^=ë·’V7ÍaÌ2ráë è=õN ´ÚŽ«™Õg·5¿#ÉGxþ·ç«Ü¾k×®ªÚs5[·neÑ¢EÔ©S‡¯¿þÚá6èô:B¾ ¡ÎÀ:dGdõPæ"%ŸßµkW0™`î\>22`öle½s£Š·×$3fÌàÎ;ï$::šçŸ¯úû_ªú¬<ÿûóI> 惘Ùg¦¬‚¢KE$“ŒKm&þÃÓ`]Š#''§J×˺o̘12iÒ$yùå—K®›L&™8q¢LžººJm-õ{U¹té’ ß}÷MÆP‹¢ô"ÙÛ~oÉ{d6›%'.NdèP%¥áã#²~½½Í,— .HÆ µk×Úlœª<+«Ž¬B‘†ÿi(ç/Ÿ·™M""qïĉƒÄL±è~µVdsC¥8¼½½ùæ›oJþû“O>)¹n k×®åþûïgéÒ¥¤§§—ááá´nÝš%K–\*ub­HСC5jÄÞ½{ÉÊʲ¨ˆpöÓ³>£î치ŸÖ<¸:žþåiN\:aq[[ˆ„"ÂÓO?͹sç?~<=ôêc¨‰kW:mê„{€;ç—Ÿ'~òNz÷VfË;*…ŽFŽ´·™åÒ°aCV®\ À¤I“HJJ²É8–>+'.`Ò¯“Ðëô|ûà·4ªm»_æB³òùÒAã镯ŒÊÌÌdß¾}о}{›ÙeO¬þšžžÎ3Ï<ÓO>‰¿ÕNîMJJ¢Éß»´š5kFbbb©ëÍ›7/¹^ŒŸu:C‡Åd2±mÛ6‹Údü‘AîÉ\|ûúâÓÅÇjÊcpð`Bo %§(‡ÑëF“[dY>Ò; W¬XÁ?ü@pp0ü±êýÛϦžtÚp3.&â–©s¡Œ{ö€œô|Çw0cÆ ÒÓÓ?~ù4žÖØâ1ª{íÕþ¯ÒSߓȋ‘Œ[6΢¶ëׯWÕ–ßÿéÓ§£×ë™;w.¾¾¾6û{U½–’Bí…S0LG‡‘eô%iô»P«–cØgÁµñãÇÓ¡CþüóOfΜ©ú•Þ÷È'p<å8}=ûò|·çmú÷FGGsz¡r–gê=©µ]³f íÛ··Ê–C‡ñã?²páB23msÚQµ+—ÙMš4IrssåìÙ³2jÔ¨*µÍÉÉ‘G}T¦N*/¾ø¢|öÙg²qãF1›Í2qâD™6mZ™9hµòDIIIH»ví*½7ï¯<1è ²³áN1XWrÒR’³“%àý!ùêÐW52f1………Ò«W/äõ×_¯Ñ±­âäI‘”|sPœŸ»S $Ü'\.¾loëªÄ±cÇÄÃÃCÜÜÜ$""¢FÇ^qh…Š. ”äìd›—±#C d_§}—` @’’’T³ÃÑrЪ®ƒ6«^¢:¨!Ó®];$1±âz±/ÅŠƒœy½f·c‡Å…‰þM½xÍóªtí©š"á믿.€ôêÕKŠŠÔYëms¾ÿ^AäöÛERRDD$êUeKþÎÀ’— ÞA¦5ÁG}T2‰Póý­¨¯cÉÇÄkž—¸¼é"áq5³F©%îÚµ‹yóæQ«V-V­Z…««:k½mFQ‘rNà¨Qpù2¼þ:lÚ¤Ôq žlDá¹BŽÝu cFÍ—÷¬.Ó§OgذaDGG3{ölÕú-ïYÉ.ÌfôºÑäó˜7xý›Ù~x~|>)?¤àV߆c*.+ZLñòºq{÷ÕX [¶l‰««+Ë–-cþüùœ}:qqq<øàƒüë_ÿ²º?›®Öß¾]ù÷àA¸ûîR·EDD wÓÓ~]{jw®M†!ƒ“NÖXa"kiԨ˗+ïù“O>Irr²Õ}–õ¬|ñ«­&È7ˆ•÷¯D¯³ýf$S¶‰óŸŸG箳¸è˜ÑhdóæÍ¸ºº2pà@gÄŠtVV–,\¸PâââJþW¨'ºãŽ;ƒÁPêµÌÝ™Šxq³åâ…­Ø™°S\ßr·=dOâÕûÿî»ïÀÀ@Ç.}i6‹¼ÿ¾ˆ‹‹’o~ê)‘<ËrËùgóeWÓ]bÀ ±sbml¨ºLš4I¹ûî»U÷$î·=Äõ-WÙ•°KÕ¾+¢xãWôxËϲüóÏ?;ï¼Su{-í”Å’Ô ED–-[Vnm㨱ŠÀtö³³ªŽY]>ÚóQÉ®®øŒkëP[#"%$$H:u-[¶Xk¦íÈÌyðA%0{zŠ|ùe¥M®÷Kvd¶l÷Û®¼¯Kã}µ„ììliÓ¦òßÿþת¾®öI\zœ4øO!ùhÏGÖši1¦B“ìn±[ $+"ËâvS¦L@>ÿüsÕmÒ´ ÜÿýªöwñâEÑëõÒ¨Q£kV¢^*”mîÛd»ßöj˜b Ìf³Lþu²ŠtZÒI²ò¯<ØÕ=QÛd2É Aƒ™3gªeªú;&Ò¦œ[´P í[@Y~I7¤Ë6÷mbÐäÒ/üká:8 ®®®âéé)QQQÕî§Ø'YùYróâ›…Pdò¯“kôWâ¹/Ήƒfyõ>£ÑXrzJÊß«tÔD Ð*` '"""˜½e6Nm Ä?„µ£×âæRså:/|uü¸|êÝSßž–’Püù5j”­Ls,D›A‹ˆREL§ÓIãÆÅd2IÎÉ1`=­÷Ø],Ó©§¥Þ¿ë ¡Èg>«rûœœœ’ÝXü± ,´’„‘^½”Y³¿¿ˆ rãf³YNN=©¼×möHᥚ›EZC||¼øùù‰N§“?þø£Êí—î_*„"õþ]ON§ž¶…åcÊ7É® E¨Í:`yîÙd2I`` èõz¹p¡âƒd«‹6ƒVkÏ$,‹† 2`ÀΞ=ËÞ½{I^¥ÌžŽkè°…XZÖmÉÿ€›Þ©¦òëñ_«Ô~öìÙœ8q‚aÆ1mÚ4YYM¶nU–ÎíÝ ½{+ö«¹æµ¢â÷:ŽÖ·¦Þ½õÈ‹É#ò¾HLy¥—[:M›6eéÒ¥ˆ?þ8iii·Ýzf+SœŠ›Þÿ{øÿhY·¥ --Íù/ÏSX@½{ëáÓÍò¢c{öìáܹs 0€† -ÛÐâì8e€Vs'áÕÿlúþûï¯ ÐŽÌ€fø|Äç˜ÄĘåc,.OºaÃ/^Œ¿¿?+V¬pœ/!³YIcÜq\ºÓ§CXü]H«:T¶ÃR碣ý·íñééCæÎLN ËQHHH Ð'?ÿƒ&¾MøúÈ×LÛ8 !//Gy„üü|Þzë-ºuëf_cÏœ~ý”Ùs@ 0cØ@¬¬NÖúÔ§Õ‡­0˜9vï1r"m÷Ì©››«W¯¦V­Z¼ýöÛìÞ½aæï3Y~h9>l}|+>JzÀçWVÄ™Ùg0˜iúrS<ƒ<«Ô6<<œ¸¸8úöí[êt¥q´­¾å .È6×mòZí×|Ð&ãÔ'/,9ü…Í/ÈÔ©SÁƒרÁ åòË/"uê(3çEÎÛö¤hk8ýÂi1` vHNtÍÎ:«ÃòåËàà`yé×—„PÄ¿¿xÜn6¥ý™& ²«é.1æTýÙ{ôÑG/-¨»b-Ž6ƒvÊ=|øp›ô[¢0O>&þþþâââ¢êq:¶æàÁƒ×ü÷Ñ G¥î¿ë #€Ô¯_ߦ x¥"¯½¦f™=[¤Nk¹Þ/Uáê,;wJî©\-S³Ù,#GŽ@èŒø¾ë+Ï•þû­ñI•ì)2˾›÷‰ƒ$Wõ£³RRRÄÝÝ]üüüj$-ãhÚ)S¶ /|s€¦O4e„ ü{gÖ䕾ÿ; ; àŠ(U´2î#*—jëVuºiVìâhuÛŽKk«~©ÖÑÚª?¯ªã€N­¢µ¢um]"(¸ à.hE!!B¶ç÷Ç[¢˜!y³¼z>×ÅåÅ»“Ûðää¹ÏyŽÑhD||¼SÚr›a]›wÅúÖ»¸ßÿ<çÏîsÀ‹‹áï¾d2`ûv`ÉÀ»µ4Ä$|‘H„ößµG‹¿¶€îŽçƒ6OËcïøE$¡ïßú2ç€ÙA³Ñ£…åëwD“†p'þ*.V h@]¦û†  Óé ÿúwú~Òd€vÆJBÍU Ô§Õð‹ôƒ,Z†©S§B$!>>:õ)kžÆã+æôz=ýc ¤ý¥XW¾«ÓW»¾c§Nq«ºtΜ^sÝ4¯ºVÚ‚H,Bä"Ñ|BsTåWáÜ s¨*¨â©wü²éÂ&|œú1¤¯s|Ëæ.C~~¾ÅuŽjb úûzäþ3íW´oðb("2¦L™âŒ.z<‚ ÐÎ0 «W†¾ ‘H„6mÚ`Ô¨Q(**ÂŽ;xoÏ_tžZ/oMˆõüOOsUº†b4iܸq€bbbH£q<%s'áŽùÛƒ¶Àþ]ÆóóóÉßߟ¼½½é†›¾‰yÚZš/“ðvümR@A9Óslº~Þ¼y€&MšÄKûŽb2™èí·ß6ÿ±=xðÀ¡ç©«Ôô§M"Äq5ö^ÝkyÑÅ‹D‘‘\pnÛ–(ÃówquiÍ‚ï H!RB¬ ;ÿuükúŽË;̆î_¶ý…4:Ç‚jee%õîݛИ1cÈh´ß VTÑQï£tTz”JS3Ñ«ç=ö™{v{!bšø2 Ï8ÏÍÕ`šøXIX=_óò{ ]Fzá…ÍŸ?ßá~ØÃ?ü@"‘ˆ¼¼¼hß#SÚø^vñîEj·”Ë{všÊiBtð ¯m¸W•Ö´FÅå :Õñ”ynpYFY½÷䕿QÏÿô$ÄÚü¿6t¡ˆÿU¬Õš=z”¼¼¼H"‘ÐŽ;lºW¯ÒÓ™hní@æ L2V:öa½|ùr@}úôqû.F,@ó"VO‹º¿§áá¯]»F~~~äååeÓ|c>Ù²e ‰Åb’J¥´s'ÿ£ª`š5 %û'SJ`ŠÝŸþß~û- ¨¨(—™P?ÿü3I$‹ÅVÿxë‡ÑHôÕWD"@†þNŸýò‰9:y÷d*ÓÖ?ô\mZÃd2Ñ­ooÑQ ——¾ú·«dÔ>|ï•V–Ò[Ûß2çþçœCUç¥Ð×ä‡~ ±XLb±˜6lØ`õƒÆ@™/r+'Ïö>kw¤jÊÊʨ}ûö€V¬Xáгø‚hpÔ$,ÞYL ((ë ûG¿ƒÈ‹n k×®%©TJ"‘¨Ö</fXI ÑÈ‘\¾Ùߟhófó©ÝWvS³oš™7 MÎKv¼=à“°6J¥t¼Ùqs«Ì­¤”¼zfù3„8Pø²pRä*œÞkšlÙ²…$ ‰D"JHH¨qNw_÷pY{÷tÒ•8V Êd2Ñ„ ýùÏv{j£ yÀQ/¿s™Û‚gK÷ày”ââb³þùçŸ;ô¬Ú0 4sæL@R©”Ö¯_ï”vˆˆèìY¢ˆ.8GFYIßÜ+¿G¯ýôšy¤7ó—™T©oØ.ÍO;Ú|-áVÝò=Dc‡%ñb—4ŽJ4î³cÇòòò"´páB2Tž]N'Úžà‚sT:銯Þ7þ|ó $W×Û¨  yÀ“Ш3Ò±ctÔû(éËß/;;›är¹]Nx}¨T*úÓŸþD¨Q£F¤P(ê¼Þ!3líZ".8Ã-F©“ÉDÏo¤ EAœ¸ª“Mõ Ü…;MÂÚ8wëÍ9—~•üJ (è@çT–麴Q]šìÛ·üüü ‹F{÷rß8Çd9œs&z8=T&“ÑéÓ§~Ÿ°ÍŽˆX½Ãð…‘ü9ã ©TJ(..Ž—¯k™™™Ô¥K@:t k×ì¯oP' Ñ_ÿÊf‰„hÙ2› ëç«òi膡„8t¾”æžKê*÷Ía%ššþ¿é$þRLˆ½2ÿJí•J (è¨ä(ýöéodи¿ à…Ì Ô®I;@ÍÑœvLÞa×\îG1™L´lÙ2@tüøqžzË,@ó€#&áõO®sëWó»[÷¯¿þJ2™ŒÐ{ï½GZ­}K^KKKiúôé$‹¹̰a¤T*mº·ÁfØo¿EEqÁ94”(¥ö’•µa2™hõéÕä¿ÐŸjñm ZŸ¹Þñò¥<â &¡Ñd¤„³ ÔdIB(xq0}wê;Òõd2˜¨à»J äæLŸhs‚CÆ*çiX—&ªÓ*JïžNû°Kòòò¢ ؽˆD¥RÑøñã ùúúÒ‘#GìíºSaš1 Ow;m±µ_œ;wŽÂµk׎víÚeóhÚh4Ò÷ßOM›65W[µjPS¹AfØž=DÁÁ\p0€¨°ö©_¶pSyÓ< ¡º^ı›Çz&_¸Û$tÅ:Êû*RC¹T˱àct;þv”Ƶk×(66–D" ÐÐPZ°`¥§§[D(•JÚ¼y3EGG›ßׯ¾úªÃõbœ Ð<`¯IxgWu+çCÛŠ#9Âÿþ÷?ŠŒŒ4¿9Åb1uêÔ‰ú÷ïO#Gޤž={R@@€ù|u0OKK³»ÍzͰ{÷ˆ† á³LF´}»ÝmÕ…Ñd¤M6Q«e­q Ÿ>ôÑþ(¯4Ï)íÕ‡«MÂ+ÅWè½ï‘t¾”jº¤)­ËX×à´OÙ™2ºøÊÃu²2e˦âůÞ;{ö,•g•Ó•÷¯P²o2׆HAÙoe×¹3Ì¥K—ÌÕðª5jDÑÑÑ4xð`1bEDDÔ8ß­[7JLLô˜©tuáiZDDçü‘Ÿâ¥®áÝwßÅúõë|_öÙ(N*F·ýÝÐhx#þ;öz½GŽÁÎ;±k×.Ö8/“ÉЩS'Œ5 &L@ëÖ­×™S§€1c€‚ KnïÀÈHçµ@£×`iÚR,N] ^‰H‚±ÇbvŸÙèÖÓ©m»ƒÌÂL,:¾Û.mìŒéÏMÇ̘™ñ³oo>(¿PŽü¥ù¸ÿó}ˉ\‚!!?'‡ì9d=eÊ¥u>GwW¥B‰ÒÃ¥(=\ m®–{V€¡ï…¢å‡-áßÞ¶ýÿ._¾Œ;wâàÁƒHMM…N§«q¾]»vèÕ«&OžŒAƒA$ÙñÊ]½±ÅY2@ÇÆÆ"11±A÷Ú4&­ ýJúAâ'qRïjiŸeeeP*•P*•hܸ1Z¶lÉëW£ÑXn°IüûßÀ?þèõ@l,°f À[»õq¯âV§¯ÆªôU¸¯á6è}¡Í ˜Ýg6F´±È¹ûFXÕ…'ˆÇoǢ㋰ÿú~@ó€æ˜Ùg&¦öš ¹œ·¶Œ•F”ì+Á½-÷ð`ߘ´¦‡'E€O+HC¤K! ’Bä%‚þ®º"tE:+ŒæËµÐ¢É› yls´˜ÔÒ຃{]èt:”––¢¬¬ •••ˆˆˆ€L&s䥺  yàÕW_ÅŽ;t*U…Ìþ™hôR#t;ÐÍI=s/W®\A‡¨¨¦L6m¼¼€+€©S7f4z 6œß€e'–áZÉ5@Ç&1¥çŒí<a²0§´k¡ Ü(½M6!ñb"räÚ·Á'}?Á»Ýß…Ÿ—¯í=ޱÜõY5Ôéj”¥—A}Z mž¶Öë¥!Rø„ù@ÞOŽÁ!¸Ûê.ºöíêÔ> O Ðölº‘   ßSr \’Úp5‚PNðÚk@v6$%½{»¯sü½ü1µ×TLî1{röàÛ´o‘šŸŠüòÌøeú?Óot~¯w|-dümwÄWp~ y€¤KIH¼ˆÔüTóñè°hLn:Þìò&¼$^¼´U’@ ‚#x`°ù Fµ¥•¦*¼›{û¹7ľ5¿¥4C3—ô“á‚ ÐöìIhÐ#žÜ‘‘=zpùå÷ÞÔj`èP`óf Ií{.º‰X‚W:¼‚W:¼‚3wÎ`KÖlÍÞŠc·ŽáØ­cøpÿ‡ÐzÞèü†?;Á¥‚̺4™pñîE$ßLÆ¡‡pàúèMz@Û¶ˆí‹ñ]Ç#²±ssù¶"’ˆ¸ô† é {5a¸·èO?ýJ¥jµk×®…Ÿßï…QQQˆ‰‰D"ÁÊ•+kÜ׸qãµ£»§ƒúŒ¾m|áéܯžî¤G×®ÀìÙÜf®ðÏÿ÷€Äµùö†Ð+¬z…õÂ’¡Kpúöiü”ý’²“|3É7“Íš!¦U bZÆ Oxô ë…@ï@›Û°5Ldf åf ’o&ãø­ãPjnþÚȯÆu‡Øn±èÓª`Œ/k°à, Ü óòò R©°fÍüøãHJJÂÛo¿m>/—Ëa0jq¯Á`hP[¥¿r»T7ÞHÐTuRX͘1ðOKBB€‘#ÝÝ+›‹Ä\nƒ¥Ã–âDþ l¿¼ÇoGfQ&v_ÝÝWw›¯íÖ¼"G"L†–²–Üœû·…¬¼%Þ0šŒ0’êr5|ü|`4¡7éq»ì6ò”yÈUær?¥Ü¿yÊ’“V­j½…?ÖaºXÂ4‚LqØbjohQ•_…Àðjäš6¼QZ L˜ìÛøûk×o¾Yïmlu˜u˜.–0M„ Gж˜„Ê£\ …6zÎÈzöä‚sd$pú´MÁ`ÆOm0],ašAh[LB¥‚ ÐÁ/×s¥±nз/›Ëí~’žtîlóíÌø±ÓŦ‰0d€®Ï$$"n-‚žoxíh—SY LšÄý À²eÀÖ­€¼a»q0ãÇ:LK˜&Â@9èúLÂÊ땨º]Y/¤AþoÜàFË™™@h(˜ŸÞ®G1ãÇ:LK˜&Â@#èúLÂêü³Ç§7öîåòÍ™™À€Ü¿vg€­« ¦‹%La È]ŸIhÎ?¿è¡ÚhäŠé (•ÀLJs#h`Æu˜.–0M„‡ÿ·N]&auþY$!¨¿柋‹·Þâ ÈdÀúõÜÞ<ÀŒë0],ašAŽ ë2 +s*¡+Ô!°g ¤rûü9uŠ[xèÐ¥ W舧à 0ã§6˜.–0M„ t]&¡G柉€Õ«¹ürAWðèäInž30ãÇ:LK˜&Â@º.“°:ÿì1 T**¸Uÿ;÷ûêÕÀ† @ÿÕõ˜ñc¦‹%La È]›IøhþYÞ¯asˆBNW»yÓ& <8v øÛß'UÖcÆu˜.–0M„ tm&¡æŠº»:È¢eÊܜ޾èÕ ÈΆå–p÷îíÔ&™ñc¦‹%La È]›Ièùg½˜=›[|¢VsÓéöïçê8;füX‡éb ÓDxØ4Û¨Í$tûüçÂB`Ü8.•lÜŒ鲿™ñc¦‹%La È´5“М–ŠÔ× óŸSR¸)tÇŽqÿž=ëÒà 0ã§6˜.–0M„ ´5“PsY}±²çdJ\×"`éR`Ð  ¨ˆ+x”š DD¸®¿ÃŒë0],ašA¦8¬™„n)/ZVLœÈ‚¾¾@|<÷»›`Æu˜.–0M„ GÐÖLB—èÏÊ¢£¹àܶ-–æÖà 0ã§6˜.–0M„ ôã&!™~Ï?{‰ ïë‚ùÏ›6qSærr€Q£¸%ÛQQÎo·˜ñc¦‹%La Èý¸I¨¹¤þ¾òÞrHü˜Öé€éÓ¹¥ÚZ-·©ë®]ÜŒ €?ÖaºXÂ4‚ Л„Ê”ßóϘÎÏçj6¯ZÅÍiþå`î\@ì92ãÇ:LK˜&ÂÀs¢KxÜ$,K+ãŽ;«¼è¡CÜÔ¹S§€˜®°þ!Îi˘ñc¦‹%La Èý¸I¨JSä1<çŸM&.1lpÿ>ðÁ@r2Ъ¿íð3~¬Ãt±„i" 9ÍîQ“°ª° Ú\-:@ÌãË)-åªÐíÛøûk×o¾Éßó3~¬Ãt±„i" 9‚~Ô$,;Á¥7x½‘‘Áí¸oW³ùôiÎ3~jƒéb ÓD2@?jšóÏ|-ï^·èÛÈÍå ¥§;óól'ÃŒë0],ašAèGMBsþÙÑte%·L{Ò$À`–-¶näPWÚF˜ñc¦‹%La È]mš´&¨ÏªáÕØ ~íýìà@¿~Üè94P(€3œVXßY0ãÇ:LK˜&Â@ºÚ$Tg¨A:‚¼¯"{ƒéÞ½\¾93“›çœ™Éí(@˜ñc¦‹%La È]m:”6¹bú£GJ%ðñÇÀáÃÜZ 0ãÇ:LK˜&Â@ºÚ$´;ÿ\\ |õ “q–,¤‚œuh†?ÖaºXÂ4‚ŒHAAA "”¥•A$AÖKfûͧNq³3 €.]¸àé¼ÎºfüX‡éb ÓDrýàÁhsµÐÝÕ!0*жIDÀêÕ\~¹ €+xtòäœfüÔÓŦ‰0äºqãÆ Ë?WTS¦peB½¼¸@=uªàfiÔ3~¬Ãt±„i"   ƒíùçœàµ×€ìl <HJâj9?h4øûû»»ÓŦ‰0dŠ£¢¢Â¶ôöí@¯^\p:”[Âý„g€?µÁt±„i"  åþr”_,‡O¸|ZùX^ ×³gsf ZÍM§Û¿Ÿ«ãüÃŒë0],ašAè»7î¦ZFÏ……ÀàÁÜNÛ!!ÜB”ùó‰ wúvÌø±ÓŦ‰0d:PÀJþ9%7(*â ìoÛDD¸¡‡î?ÖaºXÂ4‚Akïj<2‚&âF̃qÁyÒ$ 5õ© Î[VLK˜&Â@º¬¸ b?1þ”•cÇr9g//®àQBàëëînºfüX‡éb ÓD2Åáoð‡¼Ÿâ«—€×_ç¦ÒµmË¥4¢¢ÜÝ=·ÁŒë0],aš·Ž §OŸŽ?üá¸{÷®Å¹åË—cÒ¤I;v,îÝ»WãÜ]Ü…<(Ÿ›2—“Œœ9óTgؾ}»»»à‘0],ašXG¥R¹» 5pk€^¹r%úöíkq\«Õ"%%k×®ÅÌ™3±fÍšçE!h÷¿­–ÛÔu×.nÆÆSŽä)˜©bLK˜&Öñ´í’Gnn.¦M›VãØ„ ðÖ[o€E-çû÷ï£iÓ¦€Ö­[#??¿Æy#Œ7º üô 0dˆ{.,ªªªÜÝ„éb ÓD¸$@GDD`ÿþýµž'¢¿7mÚEEE€›7o"<<¼Æycg#^jÖø×¿´jU-°žfT*U:?­0],aš}ú`Ö¬Y "$%%aþüùX¶l®^½ŠÒÒR|÷ÝwhÞ¼¹;ºÈ`0níº!LŸ>DJJŠE°^¾|9²³³¡R©°jÕ*4kÖÌM½t=Ÿ~ú)”J%Ôj5Ö®] ?¿‡{3FEE!&&‰+W®tc/]ƒF£Á¤I“ —Ë‚E‹L&¦L™©T £Ñˆøøx7÷ÔuÔ¦I^^Fމ cÇŽøðÃÝÜS×RPP€/¾øYYY8}ú´ù¸§½W3Ú^CñI&//*• kÖ¬Á¨Q£””Tã¼\.‡Á`0çóŸt¶nÝŠW^ykÖ¬Aii©y®oJJ Ú·oÿû߈ˆˆ@JJŠ›{ê:jÓD$!((ååå ss/]O«V­ðßÿþ×¼¿i5žö^ñ¸yÐ|ŠO ÖtéׯŸ9?ߦM9r¤ÆùäädÀ¼yópøða <Ø5u4h€‡ï…gžyhÕªN§'õ=bÚ4iݺ5ÒÒÒ`2™ðÒK/aĈpsoݧ½W<.@óm(>)XÓ%//¯ÆWÖÚ^{hh(ÔjµÓûènÂÃÃqóæMôíÛ7oÞ4ÿ¡…‡‡#-- §S¿~ýÜÙM—R›&ÕˆÅbA¯×»©‡ž…§½W“ƒf†¢uæÌ™ƒòòr¨T*$$$àúõëHJJÂG}„Y³f! åååHHH€···»»ëT4 &OžŒàà`¢]»vÇðáÃñþûïÃ××UUUnÏ+º’Ú4 @bb"ŒF#"""ðù矻»«.E£Ñ`æÌ™8pàFŒ¨¨(|¯&@3 ÆÓ†`LBƒÁxÚ`šÁ`0< O$‡Â_|¼¼<Œ7ÎÂ\f0„ ÐŒ'’!C†@"‘`„ Xµj•ÅôLC°Íxb¹}û6‚‚‚Øî! ÁÂ4ã‰$>>111X¿~=fΜ ƒÁàî.1 †M³c0 …  ÃCašÁ`0<  ÃCašÁ`0<  ÃCašÁ`0<  ÃCašÁ`0<  ÃCašÁ`0<  ÃCašÁ`0<”ÿ×dÖb[IEND®B`‚mpmath-1.0.0/doc/source/plots/legendre.py000066400000000000000000000003471316273626600203630ustar00rootroot00000000000000# Legendre polynomials P_n(x) on [-1,1] for n=0,1,2,3,4 f0 = lambda x: legendre(0,x) f1 = lambda x: legendre(1,x) f2 = lambda x: legendre(2,x) f3 = lambda x: legendre(3,x) f4 = lambda x: legendre(4,x) plot([f0,f1,f2,f3,f4],[-1,1]) mpmath-1.0.0/doc/source/plots/lommels1.png000066400000000000000000000640361316273626600204700ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìw|Så÷Ç?I:ÓI”B)P6_öA·_Ad‰À×*Š‚TÄ* ,Td•ŠŠ€BÚ²W)PhÙ]´¥ƒî4i’{~<$¥$m3nÆ…û~½xEoîxrzsî“ó9ç<"Ú  DDDDD\ 70çÜÅÙ©‰ÔÙ1è EDDD\ÑA‹ˆˆˆ¸(¢ƒqQD-"""⢈ZDDDÄE´ˆˆˆˆ‹":hEtÐ"""".Šè EDDD\ÑA‹ˆˆˆ¸(¢ƒqQD-"""⢈ZDDDÄE´ˆˆˆˆ‹":hEtÐ"""".Šè EDDD\ÑA‹ˆˆˆ¸(¢ƒqQD-"""⢈ZDDDÄEqsæÅ÷íÛ‡-[¶@«Õ"** óæÍ¤¥¥aĈ0`Ú·oY³f9s˜""""NÁ©zðàÁÿñ©Ñµ®6,~¼šyÁ·»/*¯TB™rïÆ$EAÌÑ&Â@ú~ - oÖ ?†0ÇŽ{7Ì! bƈ6‚tÐ÷‹HhIx°Nø }Š9ÿ{9- bƈ6‚tÐ µZàäIàøqÀ IªÒU(;YïVÞðéäcÖ1Ö?òŽrxµôBÙÉ2Tݬ²øx! bƈ6‚tÐv ׯ¢¢€^½€š4Þ~P9®¹PþoÕá S‹ÁšÂáG"‘ Á€â¸b‹¢ fŒha Hm7‘ˆ9≌ `à@`Ô(6›þòK`èP È1¥Ñ–†7ë…ŸÀî]- bƈ6‚tÐv ¿ÿž9â  !P(€ß®]c³é€§žbÛŽTåV¡äP <#<á×ËÏìã¬~ Zqo:hQ3F´‰0¤ƒ¶‹H˜ÍfÏR)°kпõ{ááÀþý@×®@|<ðá‡ü_ÿòwä„>m~x°^øñlì y;9”•Pg«­:‡+# bƈ6‚tм‹„DÀôéL |ã w¾__`Û6ÀßX¼¸pß1Ü>£Â’ð`›ð8èö,:þÞ›E‹‚˜1¢M„ 4ï"áöí,”Ñ¢°paíûµjDG|ð¿c¸ §æPr 2úZö ²Eø¹—â fŒhaàt••…‰'¢wïÞ5¶§¥¥¡cÇŽxíµ×°lÙ²ïñ*ªTÀ¬Yì¿×®|êIi{í5 iS &†¥áñLéÑRp•Bâf~x°Mø¹—´(ˆ#ÚD8ÝA7mÚ?üðƒ‘Ó•H$@yy9ÂÃk®"«H¸m› <ý40xpýû{yUϞߟ¿qܦhËi0¸ÅÇÚ"üx4ô€OGT^©„:ëÞŠC‹‚˜1¢M„ÓtmDFFâðáÃøñDZzõê ¯"áÊ•ìuÆ ó™0…;öîââø îpÐXî m~îÕt;Q3F´‰0pY­G*•" ư­¬¬ [·nEll,bbb©©©†Y>¾Vï¶Í›#GÚ¢”·C,fëîŽÄW^aÛÞyÇòëÖ²M[¦Åùcç¡ ÕAÞQnñùØ4¾€CÛÙô9\m›­v¹·µk×ÎeÆâìm§OŸFll,–,Y‚'T ×…„ˆ’tqÖ”J%fϞݻwcøðáèÖ­"""àããƒ7B§Ó¡E‹˜7ožá˜'žxüñ‡íŸ:X³øæ›ê8´¹pк5Ë‘¾|™Í¨m¤pW!Î8‡†/6D‡Í,>>11Ѧآ¦@ƒC¡‡àÕ }®õ±ú<®†­v¹mbš &`Æ Î†7g@.—cÕªU&ß0`€Éí¼ˆ„%%ÀÆ€\¼ü²åÇK¥,ÔñÁÀ† ÀÇÛ<¤âý,´`Mü°]øqq‡O'Tœ«€*]Uï .BAtDƈ6.â0/"áÏ?J%0f hÝ9Æ$æ u:›‡¤?>bÝxø~ ùÐ÷PZÄŒm" é y ×­c¯¯½fý9š5c™7nÿþkÓp4…”'•ë¹¼[z[u>„Ÿƒn7Nº‡ÒíDAÌÑ&Â@ÚæJ´4 ) hÛ°õ§Þĉìuýz›N£wˆÖΞ~ªÃ’{k-VÍ#ÚDÒAÛ\I¸s'{}òIÛ3z4ìØܺeõilÉÖÃGu˜{;|»øB•®BåõJ›Ïç ˆUsƈ6‚tÐ6‹„¿ÿÎ^G²}0ÞÞÀK/UUÀæÍVŸ¦h¿õùÏzø~ú³_(¥GJy9Ÿ³1cD›A:h›D¢"Ö‘.4èÃS*ÙøñìuÛ6«Wg©Qy©òrx„yX= ¾„ÿüeÇËx9Ÿ³1cD›A:h›D¿ÿfO<Èdü ¨wo qcÖ/ÚŠð‹aölCxàOøñëÍzP—¿7fТ fŒha Hm“HÈgxCTÊ>Çýeñá¶”wß _Âw+o¸º¡<±œ†ãåœÎDÄŒm" é ­ «ªØ ÚÛxôQ~¥õ3!"ï+¤Õ½0¬…/áG"‘À¯·85‡ŠsÂ_A]ÄŒm" é ­ ã′2æœår^Ç„Ga­J÷ì±hqÙÊË•PßPï»Üm+ìäSøñï}ïÄ¡EAÌÑ&Â@Új‘ðÏ?Ù+Ÿá =^^À°a@E[ËLøH¯Óçðs/Å¡EAÌÑ&Â@Új‘P¡`¯C‡ò7˜;±"Ì¡ï¿8ضðÀ¯ðãßëÞ™A‹‚˜1¢M„ ´U"a~>œ DEü œe†ìÜÉÃz ŽP¬(†ÄC‚€~¶¯³È§ðãæÏfž¨¸Pm™}W1·7¢ fŒha Hm•H˜À^äu,5zˆ­ÐrâD½»Wœ­€¦Pƒ€ “ÛžòÇ·ðãßÛ  üT9¯çu4¢ fŒha Hm•H¨_ùÄž¨ŽoïÞ]ï®¶v¯»¾…Ÿ{%í(AL[ªEæÒLœî':ŸÀÙágqsÓM—LUEBa Hm•H¨wÐ?ÌëXŒ2„½îÛWï®| „ÿÂϽ’ÉáA¬ôh)Nv9‰«o^EÉÁTœ«À­Ý·26I“\nGQ$‚tЋ„Žˆ?ëùÏ€àèQ–ÑQ œ†CIB d>2øõòãåÒ| ?~=ü©ðgÐöÄJ– iPTi*„>Š'{à¡â‡ÐyogøõöCéáR$öMDU~•]Ça ¢H( é - Ö#•²œh8x°ÖÝÊŽ—AW¡CÀ€H=øù3ð-üÈ|eðéàu¦êךZ‚=1åe%Î<NÅ¡åç-Ña[øõðƒ[€‚ B·ÝÐð…†Pgª‘òR HGv‹%ˆ"¡0¤ƒ¶X$tTüYÏàÁ쵎0_ý7îÄÂ>]vB¸a{ bD„KÓ.A[¢EÄœ4{»$I}¤R´ý¡-|:ù h_Ò>L³ËX,E … ´Å"¡£âÏzy„½ÖQ°R¼Ïöýwcáç^èlg/A,oSŠ÷ç£Z|Ü¢Öýdr:Æt„Ì_†ôOÒQø§ýÌy@ … ´E"¡#ãÏz¢¢ØrX‰‰&›øë”:”)[|»øòvY{?z¡PÈqh{ØES¤Á•ÙWmVµÔ½î¯’¼µíj¸ôú%pjçfvˆ"¡0¤ƒ¶H$÷:4y4~µ12O y2ÁOC¡FκÞÇd ¢H( é - e¯}ûÚg0µQG˜ÃÞࡼûNì!üHÝ¥ðëîm±•W„¹ßv©H©@öšl¸»£åg--:¶ÅB Iÿ$ºJÛW‚·Q$‚tЉ„úŠ¾Þ½í3˜ÚÐ;hB!Ë[™Â^ÂA(hšo»Üøæ@@Ä;pv·èXß®¾}6UÙUÈ^•Íë¸,A … ´Ù"¡Nœ<ÉÚ€¶ooßAÝMx8»fj*pã†a³¶X‹²Seðlâ ï6Þ¼^Ò^Â!}L˜qh>í¢)Ô ÷§\È|dh<©±UçhÝŸf@WîœY´( §:謬,Lœ8½ïšÝr‡É“'ãµ×^Ô)SŒŽ3[$¼x(/zôàoy+K0æ(Ž/8Þ¸;%ËVì%ü½ä›O»ä¬ÍWÉ!lBÜX6{ÖãÓÑÆ4‚&_ƒìÕΙE‹"¡0pªƒnÚ´)~øá£qBBZ·n•+W¢E‹HÐšÜÆl‘ðøqöêèð†}>ôš¯å­La/áÇ«…܃ÝQžTîôìkàË.œ†Ãì×P“YMl:W³¹ÍÙk²AäxñU …K†8²²²Ð´iS@óæÍ‘™™Yã}³EB}ü¹W/>‡g>²ŒŽ}ûXFøot'ö~ôK`Q¡ü¬ð:Ûñe—üíùPßP#xd0äml[‘ǧ£üûú£òR%JJxŸ%ˆ"¡0pIôôt@ZZ"îÊ_NIIÁÖ­[‹˜˜@jjªág›^I‡z÷®Þfj?{mkЉíÚ™™HݳÅ׊¡¼ DzD:¼"¼x¿nLLŒÝ>[F›qÞyÚqös1»ü»è_€òi%/ç+Z8øÅA‡Û%11Ñ¥þFÎÜvúôiÄÆÆbÉ’%()qüò.$D” ‹3.®T*1{ölìÞ½ÇG·nÝaÆaÊ”)ðòò‚Z­Æš5kj7aÂlذ¡î“«Õ€Ÿäå±™¬3xçàóÏU«pÓo4RƦ |Z8Ú¬lãœñXIá®Bœq^n„ö?:Xpu”—”8Þö8ämåè•Ò‹ý@§ÔáHøè*uè›Ý×âŒû•Š ÈY—ƒòSåЕëàÓÙ Ÿoˆ5°ùïb–oq ¶­Rj#r¹«V­2ùÞÚµkk=Î,‘ðìYÖ°¨woç9g€ …ŸÄÅ¡Øg û„7öÀ“ó½îmô÷„˜jLJ]ò6çŽiÈ›¸+“ËÐh\#Üøönþ|MßhÊËyÍÁž÷нàÔ®¿™Kj†<ËN•!w}.¢ÃÖðhèá¤òK†8êÃ,‘P/:+þ¬çÁY‡»C‡ªÂAü „€}…PxEzAyQ)¸%°lµ U;è—ò1$'³T=G‹…B 9 ‡s£Î!sI&ÜÝÐò³–è}±7Ì|í7µ‡OGÇ#iPªr]§­«­ÒA›%:[ Ôãïtê„ÊL-Ti*øvõ…{ˆ}~ÊÚ[øñëéÇ–À:-,¡ÐV»”'•CyQ ¿ž~·æwÖéÛÅ~½ý LQ¢ôˆãÒ…$.M½„¢½Eðéäƒ^çz¡Ùœf·‘ó©'½Ô=Nö@ÐãAP^P²²…Û÷Né Íª$t•4ôë‡bt`¿ð`ÿê0߬±SÙ)a…9lµ‹½fÏzÂ^äoË·ËùM!¤JÂôÓ‘»>á輫3<›zí#õ’â?¿ýÁ£‚¡¼¨Ä™Ág S:¯”ž/é ë­$,-e|‘‘@Cû|©,¢_?UnñÙÿùnì]æ×óvú¤°´-v!îvxC4|Á>÷RÈS!€üßòæJ%aÁïHû 2_:ÿeÚ9ë‘zJÑq[G=eªi¤9n vBº^‘ðÔ)–w쬕» ¾}Q„n@‡€þ®cö®óë!Lm‹]J•@¥Fà€@x6©Ý9Ø‚g¸'üûúC¡vØ êB¨$Ô)u¸<ë2 ý¦öðíZk^©‡m×µ…Ì_†Ì¯2[ýªGº^‘ÐUâÏ·Q–…@ƒ ø!n°_G8{ ?îAîðjé…ÊK•ЖG(´Å.y[ìÞÐúL( ?Æ1a!ˆ„™_dB¡FÈÓ!y"Äìã<›x¢Õ’V\|õ"¸*áU¿ê¤ƒ®W$tV»Z(R°ö¢ ;f·ë8BøÑÏ¢…$Úb—[³ôa{asÄ8&Ìáê"¡*]…ŒÅzJõe”ÅLJ½†ÀGQ‘\ŒO]ÿaT6;è´´4üðÃX¶l™QÏ {Q¯Hxü8Ë}v‘8›!½‰u.$k+Ž~„‡¶Ö.•×+¡º®‚o_»çÖz·ð†ow_T^®„ò¼ýî.^}û*8‡ˆ9ðnay×G‰D‚¶kÛBê)Eæ™Ðhì0Jûc“ƒž5kV®\‰àà`´k׉‰‰?~<Ο?Ï×øLR§Hxó&‘tèÀ* i ÅqÅzþ¸:d·k9Bø¢ƒ¶Ö.ú… ±Ÿ°{'Ž s¸²HXz´ùÛòáá‰fï6³ú<Þ-½ÑxJcè*tÈ\šYÿ.ˆM•„‹/®Q4tèPö ê ],þ\–X]© BzÔƒ­ð¢Õnüq:¢:̯»ð´µv14¶âyå›Ú}:×ß¿Žü˜|4ÿ°¹]¯åÊ•„™_2gÚüÃæÉmkÜìfÈ^Ëo â­¸ «œÞ¦´\.ÇÏ?ÿløÿåË—¶Û“:EBsÐE{o‡7 úôaý©Ï³Ëµ!ü¸ºÁ»•7*¯VBS$ŒŸÖØ…8BѾ"HÜ$ìï-o'‡¼ƒç* ¼lßIޫЄ•W+‘ÿ[><y Ñ¸F6ŸÏ³‰'Oj ]¹Y_gñ0BÇbs º¨¨¯¿þ:&Nœˆû )zê Ïœa¯.òîÖ&2=ôëÇ6Ú)Ìá(áGæ(O†Ph]*’+ É×À¿?d¾Ž[ìAæ(ø­À®×qU‘0ë«,€€&3›@êÉOC³wšAâ.AÖ7YÐ 'ûàÁA8W¯^E~~> Äǘê¥N‘ðìYöúŸÿ8d,u¡-Ñ¢ôH)ܺç³Ý´£„»Å¡‰€ª*Cïl¾°Æ.a׎…E¦}Ú1qhW 5…ä¬ÏT.Eø´pÞÎëÕÌ a¯„AWª3,¸ lvÐß}÷vìØÕ«WcæÌ™|Œ©^j ËÊ€ë×–-ßú“ÚíM±¢¤# ‚D*a!ŽÛ“죄ÞôŽÀС€—àé Ï ¨,ËZj—¢ë ¥îR4Ü\%‡âÖ=”êÕDBÒ v@â&Að¨z:UÚ€ÔCаña !w}®Ý®Ã'69è­[·â¥—^»ï¾køçLŠ„DlíéÉâ˜NÆÞxì®/y³fì'ýÙ³LÔäG ?Võ†æ8s>{<øúëúñðbb€ž=„`‹³<,±‹®BÇ2oBngÞ8‰ aìÁ^´§È.çw%‘°ø@14ù4ÜÀî…$†0Ç÷9 ÎõÅB›´ŸŸfÏžÈÈHÃ?G`R$ÌÉnÝb%Þv¨Ò³®ŠC±‚‰L}ï ÇH$lÍq¬ªG)üøuó$Π¿ýøýw uk`Û6ÀÝÌ/£¯/ð×_@óæÀÖ­ìX °Ä.%K@Bà @–yã$ô¿¼ôz¾q%‘PÞ}6Ôî×’·‘#ðá@¨®« ¡,WFÝìLŠ„.$–)…®\‡À¦“íí‡v¤ð#ó•AÞ^u†Uyf¬wó&0>‹3oÛ4°0|а!°nûï3˜ x›´â4ü{í_¬9µ‹.Ɔ¤ øçê?È*e•c–ØÅÙñg=^ͽàÝÆÉPßà?^ê*"!é¿@"“ d´c ÝO¹=‹^ëúb¡s§šVbR$ÔÇŸ]@ ¬5¼¡ç¡‡Ø+ÏÚÑÂ_O?(/(Qvª ÁÃë‰Î ””³f]ºXwÁG&M¾ÿéoOƦWzaSò&$ç%×zHŸ¦}ðbÇT„†>õ Pí IuôXn\º[{o¡ñ+y=·«ˆ„%‡KP•[ÅÂvZ«ónBŸÅå Ë(ˆ-@U^•K¯.È´I‘Ð…fе „z:w||ª'ñ„£…CoèúV9zX¿žÍ‚,°éš ßÅëÏɱïíÉyÉèÔ°^îò2¢ŽÆòáË1oÀ§›«*Ü·»[7^®íháǬLŽc! øì³Ú36êˆ°âø ÌWÌGIG%TÀkׂ1î›ýèfúWádöIl8³kN­Á»ûÞÅšÄ5X3r ·l´±¢ V=(‘8/þ¬'p` $ÜúçHGÈø“+ˆ„Ä b ‰ýD¸›Æ“#ëë,ä®ÏEÄ[.ñ÷6…SgÐJ¥cÆŒÁ´iÓ0wî\Ãö´´4tìØ¯½ö–-[ftœ‘H¨Õ.°á°0{»NŠþa³ Ç‚êþ£Û!íháÇ·«/ ­ÇAïØÁÖˆ|ààå—­ºNyU9^Øþfíž…òªrÌè5WN<ˆO-DGEí½Ç% z5é…/~óÓÏcd›‘¸Vt C7Å—‡¿4Z¹ÄUâÏzd>2<í--eõ%%@U•Kˆ„¥ÇJ¡¾ÁÖ{¬Q+à|:øÀ·›/”)JTœµ­RÕž8ÕAÿúë¯=z4V­Z…¢¢"ƒp!‘H€òòr„‡7M1 /]bMv:wfYNÄZÏ—ÜÚÑÂL.ƒOG¨o¨Q•kB($-bÿ½p!ëCb!Wo]Eßu}±íÂ6´l“SNbùãË2ïöy,tº:Ï‘‘‘6ÁmðÇK`ãSá!óÀÛÿ¼1¿RSí¨ ú×pÐ@uºÕÙJ%°x10p Шû€ŒAƒ˜íìÐrÀ\œÞ¸ý:“y›óœr}spªƒÎÊÊBÓ¦¬î>22™·o–ÈÈH>|?þø#V¯^mäDB oŠöA"“Ô? ³Cã$g?†•¾MåCïÝ $&=z>jñ¹÷\Ùƒ^k{á\Þ9<ÚòQœ˜|]ú²7 .^6o®óäø†ˆ :äidž7ô4|‘9è››oºlN´StDDÒÓÓééég­G*•" MÍ~)))غu+bccœ;‡TÊ6mT ©©©†ŸrŽØvè×C¨Ê­BaçBT¹WÕ}¬¿?R[·†23ÈÈàe,111ý¼‰‰‰ðëé‡ d ïHžñ~ ²m/¾H$]cÓ©Mx|Óã(º^„·û¾¥=–ÂÞ5÷›8JX¸‰Ç›m—n»aÓ€MèØ{®îÁ°/‡¡àŸd ž<j¿ú¶ùtòÁõë(;V†äãÉæ›”åÈ‘Àÿ‹Ä¬,àÙg‘úÛoPæç))Hüç$nÚÄì§Ro¼ÄN€ôt‡}¶›oB¡Fv—lx†{:ÅÎ^^¸Õã’3’±ù³ÍX²d JJJàRQ9‰ŠŠ 3f MŸ>æÌ™C«W¯¦]»vQ||{Ó&»ŽËž”-!tväÙšo$$°ÏÖ®‘NgÑ9w_ÞMî ÝI-¡“~¬{çÁƒÙu~¬g?ä”åP›åmÑ 5Ö Êß™oñyìMÊøR@AyÛóêß¹¬ŒhÐ f“6mˆ¨{ÿ³g‰úôaûGF]»ÆË˜ëãÊœ+¤€‚2¿ÊtÈõj#ë»,R@A—^¿DD&|‹“qªƒ¶–±cÇÖÜТ»ÁÊÊœ3 Û$ N"Tr´Ä¼~ù…ûõ×y¹~EE/ç±­RKqnqt(ìPÍ7†·ÊqH?@Þ{¢AkO­­ÿ€ƒÙu¢¢ˆ4“»Ôe—Œâ Š\IÛ}·Ó>é>ª*®²h¼Ž wS.)  ÔÉ©uïXTTíl»v%ºy³Ö]kØD£!3†׬ÑÕ«<Ü4ÇÑ‘–GHU¦WÚõZõ¡ÎSSœ,Ž6±R‰•·äèÑ@x8‹}_½Zã­ºìR–Xm‰@ê%ÅÇ|ŒÍ")7 3ÿvÌ"Èæà÷€dþ2ÇßµÊÊ[oÀ´iÅûë¼W¢¢Xï?žßL’ó’±èÀ"ô]×î¹#ð³@D~‰ð¥áhøeC,™¿à5Êõœ¡+"Hm õMú½¼œÚ¤?o‹]…>gEL­sg&n9bsÌÏY-$¥žRøtò&Oõ/{™èôâ‹õ·ìØ2l=¿‘‘ØøÔF¸Imh ãîLÊ+k¼U—]îî^ç&uÃæg6£±oc¬;½ëO¯·~Lô1ÎL;ƒÜ7sqöµ³88ñ NO=¼'óÐ"¿JZ– ¤q 6'oF÷5ÝñÞ¾÷\*œäJÒADBˆ?þUNÍ!øÉ`ëW€0€½&$Ø4g¶48h´­7¼q³ü&žßþ<´œ+_á=øDXðì³lqÙ;Ê¿k³‹®R‡ÒC¥p tƒo·š)šý#ûã݇ÞE…¦¯î|µöô6R#½bË`zøa‹Bz̺W4`Î`!”»*zfD×Õ]±9y3Â|ðrÄJ¤¼ž‚÷¼Î:i E±ìaØõ•®¸1û–] O™'>=ø):¯êŒÄ×hêJÒADBpÐzEºás6¬F¬wÐññ6Å‘°ªŠ%ÌžÍÖtíÓ‡Exxáàý÷Lf±üX•=ÊÝ:OÞîvH³’Hªøö[µÛÅœþÏ=Ã{bN¿9(¯*Ǥ?&9=ÔÔ”­£wËk€MyÊ ÊmÛs怔J¼õù|zðSz"nB^éöŠYi‘wΞïF"‘à‡ÞÁ¦§7ÁMê†iMûÿ¾ Žjù¹v?AœA?ž¨ªŠ=ÕCBØ¬É $?›Ìììà¡ÁÎüùlÖ·l™í窇?ÿ$ f— $Z¸¨¸Ø¼css‰æÎ%’ËÙñAADÿ¬ºBÐE¿ù¬©Ï6ã¦>©ù©ä·È úóâŸ<¢»¨¨ jЀÈÍ(;Ûä.š" )¤ :~¨Þ J£¢ßv`M•N®±ÇˆÍFÛÅcï#Nã¸û^WQN3^ð'Dƒ‚?ö§ÄìD‹Ž?Ùã$)  òsåuîŸO‹ Ñ WÕ¬Ù9Ÿˆ3h(,,._fÓNœÒ¤_[¦Eá®BÈ|eµ/k ?Ì^m ë~ªªØ¬wäH–=5ckc2>«K0‡FXýÂÕ«, ëÖ-àÀ´ŸlaÓ»{CWTUà™_ŸAYUæ˜mFXþá,A.&Nd? Ö®5i—â¸b€céuõÍ=Ý<±þÉõJ¤xsï›È(qÒŠØBvà_ú\‚V)EÉë[cZ"(¦ï+Ú—"´Pì@7}_n3¨¼^‰²Se·•CÞQ^ç¾"àðÄÃ÷ ǺÓëðÞþ÷̾νˆ tpp°Ó Tò¶äSry*2o™í'ìÓ‡¥Ü%$Ä-K©Kø¹~U•/]ÊÄù;€åË­^"aaÀªUÀ; 㥬IÑüö¹sy&"Âä?&ã|þy Šæ¿|Ø$¯½ÆÜ«W£»‰{ÄÒå­z7é·û¾²ª2LùcŠsB}ÍVºõ·•«¬À2Aù‹Ã_`õ©Õó CÜñè´ÿ<»ÌäÎð†9áö¡í±gÜzbñÁÅXzd©Ù׺פƒÖjµÕñçΦ µ79kX,0|ªñ’\VáãÃÊ£óòØ*!VP[uXr2óÿ'N°¶II¬ðŽFAKî*Îù÷ÅO×ÚA )n-38°ÇW`sòf4 h†MOo‚LÊÃÃÌ¢¢X>vv6”[·½mÍúƒÑ£Ñ.¤ö\݃õIü°pKå¿v¥Á_½Z#…»šcÇØ 5-["è}¶:-ÚܪÓ}×öaî¾¹ðvóÆî±»Ñaîmg9ožÙ«°XÓ§æ? ÿƒ¿Æüo7o¼¹÷Mü|Æt§Â{A:芊 § „e‰e(;YŸŽ>ðïkY@Øæ0%üœ9ÃĽ¼<–ÊÏšèñÆíÆH?ý/Þ›/ÅøBR®ÅßëT8’y³÷Ά‡ÌÛŸÛÎO1Š%ÜN¹ËX¾¼Æfu¶Ê%ämåðlâiöé¼Ü¼ ¡ŽÿÛóÈ*ͲjXéé¬mÆóÏ!!@P{žtïÎÄW¶þñ3ϰsùù0ÌžñÞ{·÷ƒw”7ʓʡÎ1-ÈÖ‡9"aFI^ŒyqXóÄt ë ÊîÓ”¶¤V=¨2T(=V ï(oøtñ±hŒ}#úbûóÛ!“ÈðÊï¯à¯KÖ÷,$T‘°ys"‰„¨¼nÑÁ\œz‘­ñ Ï«AüõSÞÆŒáåt'O2­ úßÿì ¥ªTLeôð *,$"¢í³4°G¼/QÐÇMÑ Õ'Wó|a3Ñj«s¸pÁ°9÷gÖÿâô‹VVŸ*8|ãp³E,­–è矉:v¬™¶èéIÔ¹3Ñó…d ¡xyUïÓ§ˆ* nFš 5]šq;ÝîÓ"¨­Tj*©×š^„hÐÌ]3k¾yøpõ ,*UçÉü*“PÐÕw¬_৤ŸÑ ù'r‹ÅIKq5‘Pzä°aÕ«h8M©†|(Þ+žªnñ¼úFq1‘TJÔ¤‰UÞôÔ©S†ÿ>vŒ( €™éí·í”è²};»ÀÓO6å¬Ï!4¥ãÇ„hÐC_Np¸_ƒÅ‹é@4k–aSÊ„ÛKHر„” ”UJj»¼-!´þôú:÷ÕjÙÂ9mÛV;ÜŽ‰fÏ&Ú½›%œ˜¢²’h×.¢×^#úÛk4@ÓðµnÍΗ÷G)  äç’­ú wÞ+¦˜´s!Ôo]?RkÕÆ;<ñ„YYG‰ýI•ž(µjœz>=ð)!ÔdIºQz£Þýu:¢3gˆ¶m#úôS–ë?x0Ñã³ò‰™3‰>ühË¢¬LŽhçN"NtÐ|0^¿œÒSO9üÚ7ÖÜ táå õïl Ý»³ÏfÃÚp©©ÕÎùý÷혅øä“ì"±±†MåçÊI-i±„0­+ÁMIß~k§ë›C^›áûû•—Çqt¸éaRH6=`e"I´„Öê0 êСÚ1Doá…Μ!HÚ„†?¢2œ«K;-íw§xO·[{j-!öee—Ö2C?s†ý‚mذÖ_±ª,)  #‘Gl~HsGãwŒ'Dƒz®éIUÆO6Ž#:r„R…‡›Wx=ƒmDï>Îå´ cÐZ}/ÇŸ‰ÙßeàQ¼ʾ•J%Š‹Y©vI 0g ]Ú% ± €õ fbÜmb«bQé^‰¶9m±nðoð”yãõ×/¿´ÃÌ!4ʧžJKÍ›Qy¹ê,5üzøÁ½y«½˜¢oD_¼Ñç «Š1íÏi5²:ªª€¹sÙŸòÂöªPû÷WÿyÍæ“Ožóæ`×>OÄÇýûgRe8¡ „¶X‹Üý¥¿6‘ðøãx}×ëp“ºaÛsÛÐØ¯±étîÌz€äåß|cr—‚–eoÔ…D"Áš'Ö`@äœÌ>‰—w¼l(d©¨`ÍüZ¶d"ø×_99ÌÖ³fË–±ÅfRRXòW|ö¢eÍ–‘ ª¸TAûöùø°]¿úʎ㩃ýâ¼ÝºQÖ·Y6ÇDõTTUP«e­Ñ g6Qrru¥¹¿?ÑO?Ùð æÂ6KmÔˆHY]ÏÝþE>ÁÅwß ¸ª¯j7›””£myåy±4‚ ZvÔŒ‚©+WX1P@€Aƒ¸“ÓŸf‹(1se3ȯȧ¨o¢Ñ 9{Þ£¯¾b“xýl¸_?u©¥>ɘ… ‰RMb šÆ7jÄþ©õ¬rÌ#ÇÑÉÞ¬*?–‡ÊÁÚÈÏ·:¾>{vuŒ³„¿ï„iz÷f;vŒˆØ'ò«HB4hËs[HånÊ%""…‚ÈÛ›íî”pÇ1% äAñ¤€‚ ÷;kHHK I´„,n@_­Í!OOö9 J³µuÇØ±ìd_|aòí¬£¬¿Åjœ ©”UxªM„‹ÍA£ÓÐ#?>BˆkþdÚ46ÆwÞ©±Y«&…DA‡›&NÇïdæB^ ɰjCtÙ@ ÓÕ-vìÆôð0¬d.:h鿯dn­Öa×,Ü]ÈfÏ]ì8{Ö£—ú³joâs7ë×§((ˆMlìJj*_Û¶DG†ÿ8˜ zqû‹”ó# /Ͼl8dï^28¯µkí<¾»8uêÑÊ•ÄAB<ÿ¦88ÒVðwïÌÜ5“9‹ž"™G_|ÁíyéŒCBˆÊÊLîÂqiy„PP„š6{7196ân‘pÎ?sÑ .+»˜ŒïÖÊì»èí]cÚzc%Ój.ÿïr[ÎÍ›·õÉÿ>‘äwúQ‘`ÝÉ^z‰Ýsç6‰šÆD=z8ìzÇÑ©OÙ¤ü[ÄôéìÆÙ´É¬Ýf“™Œhß>;ˆ)ÑÇÑ›{Þ$Dƒ:¯ìLåêr*¿À„ÂÄ5S¢víbã”Hˆ6lpÀ8老”Jå]HîgÜQÍZT*¢çÇ–fµ$DƒæmÙÂω_y…ÙxÑ¢:w»ô:K·;÷E Àñõ%Ú¼ÙüKm?¿ \HW ­xº¿ý6»ðôé†MIƒ“H0³É‹ìÜIÊ.Õº5Ñ;¿®f½A> ¶|ܰ…‡×xŠšÆD&8ìz·þ½ÅZ%þç8ï?×L²e »y¦N­w×ÌL¢ˆ–.µ¼Ý¨ÅètDÍš± ¦¥Ñ¦³›Ñ  Ï‚èÚ-–yÂi9JðM ß#{ýþ; [J$,]Ìè[k¦?ø5)  ´ay9oa!œb£„hPÈç!t³ü¦m'¾v©AƒzcUz]$ùùdÒj‰,`¶Õ˵¥)ëmr!ïù.ò%I´„þºô—uã-(`w77¢+WH§¦8Yj|ˆ—ïKYÑäÉÕqæ©S«Gþo÷ÿ¢AíV´£¢Ê"óN¨ÕVgKýüs·D}ôÒK/ÑÔ©SéÝwß5l×ét4iÒ$š6mMž<Ùè¸ÑÑ’%£®JG'ºž ts‹_އº\ÍA;5:++ M›6DFF"33Óh{óæÍ Ûõ$Ê#±:1±gc‘œ— ¥Æ¼Æ/–¢¼¨Dú‚tH=¥hû}[H¤lkªO˜=pÀäÛ‹[¶‘‘Àö퀇‡Ö$T*mÛßÀªÖ £$ÿíü_¼Õ÷-£] kž,3z`‹~¯_Ïúí<ÿGâTôôt@zzºÁ)ß¹=-- 5ŽsWãÆ»E8ÕãÞ}ð]4›Û Þi„þ«ûcÒÎI˜¹n&¶_ØŽvàfÑMÕÎ+55Õ¤_×¶” )Hš˜NÍ¡lRämäfË˶‡F"ìßo´ßÎÀ{ï¥B.WbçN 3“+—Ëí;¾;qBU†¡½q±è2ú»÷ǺQëpñâE£c³ƒ²¡‚ e§Êj=ßË/ ¦B£Qâé§o¿µMår9²w³£¬Z aC¤îÜ å¥KfŸxóÍD<û, R¥â³Ï”X¶ 8s¦æ~CZÁSO!¯"¾Ÿ`Ù˜³³‘¸z5àãƒÔ#Ì>Ök àPÌ¡û¹»cÆ$Þ~ˆ¤bñb%† ÿ¼ßÝøžEžøå‰_èÈÏýÒ§2ÃFƒH†›­Î@"“Xt¾Š %V®ºtIĉ@×®©8zT‰W_NŸ®ûØ÷ì|i'<ò<0{ïl¬Ú½Êx¿¿ÿ†ò›o__$Þ^h755§OŸFll,–,Y‚’ë{lÛrr z̘14}útš3g­^½švíÚEÇѤI“hÆŒ&cЃZõ¡ýwÐ?žÿ Úí¾›&?4™|ÞõaéNwýkôE#ê·®ß1ž>Šÿˆ6ŸÛL'nœ¨STHûˆ…6Nt=Aº*{V|ÔBNûÖ¼yJ‡sç˜Jýö[ÍC¬Y“Ð*F ¥þ¯0›Ü0*5•µîËé8JðK xyIø„ö^ÙkÞ—Œo>ø€ÝTK–PUk¶=÷œc—aÔê´ôâÇÝÑ óƒ(¿Â¼JÊ+o]a-1¿7¯îöË/«óx¶eÄ5)¸ÝùíüKç«7ŽÉ.VGINNõ3²m[C±™Ù¼û !ôäæ'ëáÞz‹]ÈÊ•ºõŸ1ùyÓÝí´:-øeËWÿl8yûh `ÝÝ ¬º¤9?±¥”‘ ì³4iR{»>bÏ¡gŸ­NŸ{ýõ:w7ŽãhÜoãÑ Ö>@ÊòbÖÃ`ÉÔu :h9r¤Éí)”ü [ÈUi~„rÖçÔÙíKÇé(£8ƒö§ì§­“¶Ò>Ù>Ú'ÙGý_ìo4ÛŽú&Š^Øö}qè ŠO‹'•¦î^¸6sô(»©¦×_'C¥Xm-°ëk!i •šJzaÛ „hPóÿ²›Ÿý¿3Ÿuþû¯ùÿ>ù¤º… ‘Ý*bÇIJź;úÕÀ&9žµ;Ögɘh5Q/Å•ÅÔzYkB4è£øjß1/Íœ½¼ØSÁ ´åZŠóˆ«µ»Ý;ÿ¼Cˆµ]Þ–Š+‹é×_OÒ›53TìÛÄ™agªËèŸ{®ÖBŽc©þúYsd$Ñ¿ÿÚ~ý;QiTÔo]?B4èù»N¢Ç«wf#:h¨Ïˆ¥'KéÌãg Žúh룔þY:)¯(öÕ©uT¸§Žu8F ((Þ;žrÎ¥2uH?@K/¥11c _´;ÿyìMÃ7§¯Ž|EçóÎó_®Õ…„VæN¾(¥ÐP¢Û™ˆ¡PYHýèopΗhmÑÔ]¿röᦇ-²Í‡²/n` Q"ýÙw:N (¨2페y-Íü‰ˆöï¯n×:fL½=éëä|ÞyC!H­«™¿û.»Øÿþgý…ˆ(éQãt;"¢g6*/Tç&—–V§jº»³þWÖÞÂê›êê0’†#º|™“ýýY™Ûäæ²öáúYóôélö ¯\l(9Õÿ;Öî% N¢äç“)iHÅ{ÇÞKz4‰”W¸ž¢Ê"Úwm->°˜žÜü$ù-ò«á°›,iB¯Ä¾B›Ïm6; P7Gгn¿Ñuï˧HxíÖ5CCÏùa”ë¢ÏóëãdÖ`ÊÔñ68®ZÇ b­‡­E£¦¿ñ72<^¼˜]dfõŠ!ë×3gð×K[_Jði@ ID,¾àëË•ܨ¿}]d~ͺÛ]y³ºìùXÖ1òüÈÓ¨˜H¯pk`¥ÿÌÆ>mùµ³–³.—fÝñùôÊêÿþG¥¥L7Ñ?øZ´`B{“<õiò5:Ö…è y@/šKYR]›w޵?VÃY+  ¿:;â,åþ’kñ ¸J[EÓÒŠ¨Ï÷}Hº@jpÖ’h õ\Ó“ÞÛ÷Ê8DZåÝsÎ#zÅ{@—Nªw¾DÂÇ©á Ñ '~IåÍÂXÅ€äÊ›·ãÐk-[š‰ãX8`?…ï.´0—œõ9ô#~4½¼U^sŒ>>Tr5ŸÆŒaדɸoè4÷ß¹,†ÿm‡šë¼yFm[­E•¥ªÑAîzÑujüecB4èë#_ר÷î{åøq¢–-«g¶Ï?oYw8}¯š’£w”¦ß¼Iœ¯/ieîÔ=ðª!CcÖ¬Zû?ñËD íîæO²2òøÈƒö]«;MHtÐ<`‹« «¨âb.¦ÒS¥¼®FqKy‹¶ŸßNSþ˜b¨(»3[ä¿¿ý—¶&o5«g@n.‹Í¡€t)«Ò²³2¨Ò¨è½}ï4ÓÿšNÚ=³oì£ZuN}¯ˆócÎ׿ó]p\u€}±+kÏì3IòóL“(ø£%læL"€VøÏ%€("ŠUOÌ@«ÓÒc??fX˰RSItë ¸»³ BÐgΜÿó¼¡ÒóÕß_5kò¡R­XÁ’[öL~ᢘ˜ºÅ;åU% %F%ŽãH§c¾qÆ ¢E>´/Òøñ6-dÕÕ¸?þHßÿ– r[èF+Ž­¨Õ¢ƒæàà‘4f ëüùç¬o¾[4[Çqt±à"}sôzô§Gk¤úÉÈhàÿ·wîqQ•ùÿ ("ÊÕ@Hx™†mná.©äÚEJMňvÑ-]»˜&?±6R—H-wÓ´ÔÌ šþÒ2]W«5ì¥(êÏVÐE¹+2r.à ÌÌ÷÷ÇÃÌs€¹˜9ø¼_/^Ùœ9Ï<ç{Îùžç|¯;Ÿ¤5§ÖPöl“‹E©$>œ][/¾H¤Óçì^hûTÙâ$¼PrÁ.ÛûãÞ”˜žÈæ5s¦`QsiT0;ô©þ§¬¶Ñ:ÄL+ë|ÉL]¯kÔÑI¯“´µÛVÒÔš¾ÁTW­š_D*¸P5zÓìÉåTQaÕÍ¢\YNC6²0·±_%eÂR³‹b™ËÍ-¬Ì粈e„ÐK^¢F­i@q[×J]»¯ô2×ÇO›F´u+QR3;ÉåL©§/b9ÿšK ÷ë-«¥r×~ìŽí8ÛE_}âDÃÂf{ÆvrYábxh 9ù¹‚ààÿ“ÉXHT\QJJw±‚jU5¸|€fšm0Ü“CGo¥úµÁÑ´bÔ¢i§ô¤5T(+hÙ/Ë 'w>Iy•ylcU»3{õ²©{ú¹pf‡®»j½¼¸Øfèêʾí-:«Òª ¾…»Ñ+ }Á–«nÙ2«çg.¥µ¥ôð¦‡YqŸÙݨÎÕY¸š‘•\¹v…Ž:¥Cn‡è/ûþb•iMOm-[ü¼ø"‘»;™ÜsìOG_™ïG­á^|â ¢M›šBº÷í3†‹T‰W~´UNb“ðò21Ë):c0ûŒHAÅŠæ5×¹‚¨¨—éÄ vÞׯg{õ0õ>Èœbë²­NKg‹ÏR|r< Û2¬™²vùÀ0}ù>³ƒ²ò› ed°ƒ5ªÍq-qÊkåw,Îàèt]éJŸù¬y¼î¦Mìwç¶oÿn‹ëcvè››ms‚i4¬C³››1ãl΢«æe"¢Ü¥¹”Œdºúö…’¢µkåYœXÕÚ´c¢Ž\B7!¯•ÓïãÙCúÉ8ªU[ÿð»›ÌÛ™ÔÿÓþôÑàXíò[¯]n©CY¥b~€¿ÿ]&°ÌÄÑ5lõìó_JH`-¾]3f0¡Ï™cáQYˆRiŒyn¥èøÍê›4"q„ámñã²b¹‚!'¡NÇnÔY_2½¢öôdÎ&)¢S¬(¦­ç¶ÒåQ„%nÍöcÛ£“(}è}¤s’µ©@Úsª5j:vãÍ?<ŸÜ>b¿ã²Â…ÞüÏ›ÆUóÝ„…1!Ú$[öS“úËíÐBÈåÌ·¦Ɉy„Ù¨¿ý–:<{–(y0+»èÅ 9ÒX'Y&c«ÂfN°7Þ`D™c›ääP™gw {Sf8Ç7*¬ï‘¨Óé(1=‘\Wº²˜ëØ,þ|fëaeb9”¯¿Ë¾…«Ûy)+3>­õøšƒ>áç¹çÚôÙ¨U´øçÅÔmy7BhÀº´ÿÒ~® ÅÀ!ž;G4k–1|Èɉy¦33;~~Ö OÐpó¨§Õ“hþáù&ŽÆþ± ©kÂ)îX}uþ+:]xºÕ GVC…U…”šŸJ‰é‰½/šÏbdV¦V²bOZ8ýÊ+Æ 1ÉË3v)°Â¡’—B •Âá´Œˆ.xÄÞUõ,áÕW_ÅÎ;-Ú§¾غøç?’öÙ´i@|<ðˆ~ùràƒwwàÈ "¢•/ÖÔ *ÈWú:ãê×ëp­&W˯âjÙU* ѨkD£¶ZÒúöê‹`¯`„x‡ Ä+Ax:äi¸uwkRuu@¿~¬.ñ­[€··ÍÇ™û~. ÿQˆA›!`^€ÍãµÇå.CþCŠ>û˜·Sn.0x0;×®µ^€ØZ€¡CÙØ‡“'6¥¦aö÷³q½â: Ì? OÄð€áøßïРm@mC-2K3q8ç0~¾þ3jjÐÝ©;æ…ÏCüèxôq3gÙeÈšœ…û¦Ü‡‡>,îq4‘='·¿ºÁ[£ÿëýÍÛ©ªŠÉ ¸ؼxã Û'RWÇ Hÿö|ö™ÕCY£[:’à ÚÜLB!”JV9­_?ãŠzêTë²§l¡¾Þ¸`sw7³8ÞÑÒÔ…¦%uuu¤Õiê,bÇö;3gÚ6Î]”ÿ̺¢gE ó]£ŽNzŸdÝ»k5–9ÄôEO:¢çåêÕlìgŸ\Î7ji9¬Õê‹w—˜õïY†>-Ѫ´tÒ‹É ±Òôz°5ë´¡¬R{03J£ÂÂë-5•uvr"úñG›æA ³]DO?m]Ò»p´´$´¥™„BÔ׳ÚFE=y²8µÚ#7ר³²_? |pz^T”àfÑÊŽÉ~'%EœñˆHS£¡”n)”æ›&~Í’Tj^g‘\*+Î,ŸnÝb6¬nÝ åc[C§ÓQú­túâ×/蕃¯ÐãÛ§Èÿ¤){§Ð‚ŸÐák‡IÙÐ~ê|ö_³M‹D5aëµRð–Ú½Àʾƒß~Ûätq³Þ ÝØH†ôÏà`Q’!¸‚1…X_Ï"?îVÔQQDPŽˆ˜ ÒÛÛX%Í¢âej5ËèÞ]¼‘-ÉÊb“}¸¸³N££Ó÷Ÿ¶Ý§ £ðñ±¼0‡JÅ^}õÞßœëçqަ íÚòÊZÊËËEËÕ˜?¸qƒµ© ~øøÃ€¨( =]œß)*^{ ˜0õˆ{çàØ1Àßß‚A\\€3˜mxÿ~“Í¢ô$Ld=õ0w. ·£÷SÌ–]•\%ê¸-Ñ÷æÓ÷ê³X./¼DFW®«WÛ>¡õë™Íyà@æôè$¼žôB¯ßõBõÙj(Î4oåd˵RþŸr¨ Õð~Æn¡fø4Zcñb .¨¨žyøüs¶Fjë×gŸe  b};xÀúy82t¯ [¢R±LAAÆõ„ Ö×&–ËYdAMá_Þ,;ËjÒÒÌJZ±Šº:¶šéÖ™Êdæõÿm|DžШKÕ†Zà6™R®]c'ÍÙÙ¶>\gϲ7—αŸµàÖö[Ìöÿ¼x¶}…È;?ˆT_a×.ã ÕzÛ•Še*¹º²ï>ú¨Õõ³[ÃÑVÐ’Tж8 ÍE­&Ú²ÅX´]û¾g{›jëÞW«‰Ž!š7ÏØ?ÐÍ•¯¬´¾=C§3þ¶È¾±¹Üè† lÜ^°mœVÐ5êè¤O“ãÊRÇ’™èkQ\›o´Z-—]»Œ¯àÖTù)+3ž«M›¬›ƒhëµ”æ—FÉNɤÌ5Ú­­•Ií¥Zã°^“ñßÿ6OŽˆ`uÖ¬a^ýÉ“7“‹ …ÃüÔ® E@ '¡¹¨Õ¬ôdËdV;÷õ×Y[l,ÓkááÆë`‹§·ßùA¿t©`Ö›MŽŸ†ã Ò!-W^aýK÷ZÞwÏÎ?Ū¹U¦Ÿ„6ÉE_tgèPËê”–²ÊN@ç÷(kA^B%#™rþÇh§µV&YϳꀅŸŠS}¯J%»Ù† .üáæÆ*6YRÕB¸‚{±¡ÕþX¸hÄãYk×QTë™iEÿÏö¹qƒ…(ùú²‹Z ô«Åñãůî¼#jÚ÷ݨn±zȧúŸ"V$…ØØÈJ­¬Ä`qqûûܼiT2‘‘6šu©ÚWeý›‹âW…¡ç§FÙqФÕ2SÞîÝDëÖ±ÕòÑ£¶µ¶1® EÀ’LÂŽB­fÙÐII¬æ¾}¬uqq'UÒÓ—¼Û¼Ùð‘ÕÙaZ­Q¡ˆÝR»š: KCv?AZ•¸‚*Z_d²R$!k®¼ÜzèïÏ”‡:ëu¨o¥5a‚å¬;ˆì¹,ä.÷ïÌTc©Lt:áíÄÒæ R‚+hp4!Ú…_eJ`Ð ÛŸ²±\œ¹µÃÅ)YsÑ$që1èÃøšuõ •Šèµ×Œeô¦LaOåÛ·Yë›$3ÆøÝ!6Rk©Ï¯§Ôž©”Ú#•”9–¿u•)7´Œ³É…£áhºE’avÆÞS°?ááÀO99,.€R©´|­X±‚ý{É'Ø:÷M¹Pv¨L´1U…*TŸ®†k°+Üso¶Í*¹´¤GV+`Ë wo67}:‹“:˜4 8~ ¾ÿøî;é ¸pÅ€¥ Së³0uuufïKZBîû¹€B ë&nø%§u$© -¹¸º4ï¾ËþÛ«[XXhù‰‰@FðØcÀøñ"N®uúL왳 eß—tfĽšÁ}w~3ü k¿m•\Zãõ×Û·™ž1ƒr7ŽÅoß\¼ÈèEŽ!ƒ w‚Ðóž¨Hª@æW™fï—ÿa>jÏ×Âc„î›z_ÎÓ’nöüñ¸¸8TUU¡¦¦‰‰‰èÙ³§a[XXFŒggglܸ±Ù~žžž=UÇdüxࡇ€Ó§cÇiÙþwîï¿Ï”ɦM¦Tº÷éÏÑž¨J®Bõ™jx>nûù”ï•|g˜8 µyüfôèÁ”pT”¸ãv0N=œ0hà dŽÏV/7¢»w÷6÷)?\Ž‚pvwFè®P“‡§c±Û :?? …›7oÆÄ‰±¿Efœ‡‡4 |*Љ™I(iœœ€„öï7Þ@Æ©S–íÇÒçÍc©“ˆßt?@Éö›Çª½P‹šô¸=è†Þö6Ù.J†eÁgœ|£}q±ð"2ŸÍ„¦ªusa}^=®ÌºÝ ·Á6d r¬¢St^^Æßìo÷îÝ £¨¨¨Ù>©©©Ø¶mpüøñfÛúô1³|ä½Àóϳ²•¹¹và€ùû> ìØÁJj®\Ùqók¿—ýàÜÛò½r4V6Ú4Vñ†b@ÿyýWxÆ ³iü®FèW¡ÿS8jÎÕ s\&4Õ¦JZU BÖ¤,h*5z'¾ÓD.½Ê1‹NQÐ!!!HJJjö7sæL`«i½²n‰¿¿?jjjš}VPP€ï¾û‡Â&¥”mpéWL÷Äg22æÍ<=q~Ý:(SRÚß÷—_ |þyöÙüù€·w§GfN&ú¾ÜùõùÈOÌ·z 8øøØ{ªœ{:#0&ÔHȉÉ1{¿[[o¡&½îáîð~¦í¦¶¢dv1¸L¤$4Ï$¦YÆÜرÌÄ‘—ǺUïÛÇìΘhô· ¸†¸¢ü‡r”ÿ§}óUÃí佟8ƒ· †Ì©íc5“°‹Àe" $© y&¡0RTpîéŒAXFÎÂhëµm~ÿúâëÐ(4\÷°öm¥R•KGÂe" $© ¹“P);ÃúLèƒ>Q} ÊS¡pUë«»ŠŸ+ ÿFŽ=¼<ج±¥,—Ž‚ËDHRAs'¡0Rwü ú|œz:¡`eJ¿)5Ù^s®—¦_<ðùèæn^)©Ë¥#à2‘’TÐÜI(ŒÔ?®Á®²{dN2\™u7Þ»†Û h¬lDñ†b\xê´ÕZ ß?›Ÿz,u¹t\&Ò@’ š; …é Žßi¾òí8»9£è“"œîw§|NáúÂëÐÕë²">`ј]A.bÃe" ìZnÔZ¸“P˜®âøñ‹öƒg„' V@qJR‘Œ5Ï)Ø’®"1á2‘’TÐÜI(LFFF—±-öèÁ_e¬®$±à2‘’4qp'¡0ü††ËÅ.i IÍ„ÂpÇ0\.¦p™HI*hî$†;~„ár1…ËDHRAs'¡0Üñ# —‹)\&Ò@’ š; …áÙaÂp¹˜Âe" $© ¹“Pîø†ËÅ.i IÍ„ÂpÇ0\.¦p™HI*hî$†;~„ár1…ËDHRAs'¡0Üñ# —‹)\&Ò@’ š; …áŽa¸\Lá2‘’TÐÜI( wüÃåb —‰4¤‚æNBa¸ãG.S¸L¤$4w Ã?Âp¹˜Âe" $© ¹“Pîø†ËÅ.i`W½`Á<øàƒ(-5mo´nÝ:Ì;ÑÑÑËåͶtÖ%Åì=‡„ËÅ.a …½§Ð »*è7"""Âäs•J…'N 11±±±Ø¼ys³í2™¬³¦()œí=‡„ËÅ.aMAwJÁþ¼¼<¼õÖ[Í>›5k^zé%¦ ·¬¬ ¾¾¬çÜ€PTTÔl»N§ëÀÙJµZmï)8$\.¦p™HƒNQÐ!!!HJJju;5û___ܾ}3g5Û^VV†§Ÿ~³Gs›4C¡P´)ç{.S¸LŒ( Ãʹ¥9ÕÞȈè€Gìñã+V¬Àž={0räH,^¼D„ýû÷cùòåX»v-®^½ŠÊÊJlذ}ûöµÇ9ÇnØUA[ŠR©Äܹsáááooo¬ZµÊÞSrRRR‡°°0Œ5 /¿ü²½§d7Š‹‹¬¬,üú미|ù2âããѳgOLš4 Ó§O·÷íBK¹$$$ 33}ûöÅœ9snï)v:ÇÇÞ½{¡Ñh0pà@L›6Íá®I5Ý·o¦L™‚éÓ§ãÍ7ßDaa!î¿ÿ~{OËî899ÁÓÓÕÕÕ°÷tìJ`` vìØñãÇÖ¬YƒM›6ÁÏÏãÆsˆ›Î´”‹‹‹ ÜÜÜP__;ÏÎ>Œ3cÆŒDFF"77×á®I)èââbƒíYï<ä =z4F •J…±cÇ"55ÕÞSrJJJàçç€G.ÜÍ’%K×®]Ã’%Kðõ×_ÛyFöcçΘ4iŽ9âp׊¤U‚‚‚ 1ÐBÎÃ{WWW89Iê”v8þþþ())hµZ;ÏÆñðõõ½§3s×®]‹ºº:ÄÄÄ8äµ"©ttt4^{í5¤¥¥ÁËË‹¯ž›8pàŽ=Šºº:Ìœ9ÓÞÓ±+J¥±±±¸|ù2Þzë-,Z´111pssÃìÙ³í==»¡—Ë•+W0oÞ<ôë×¥¥¥Ë刋‹³÷ôìÂîÝ»ñå—_"22 ,À»ï¾ëp׊¤œ„‡s/Á߇9ÇAá šÃáp® 9]’cÇŽ!>>ùùù˜1c†I¶*‡#¸‚ætI"##áììŒY³fá‹/¾à¶8’„+hN—åæÍ›ðôôäÝC8’…+hN—dëÖ­1bvîÜ‰ØØXÞ&#Ix˜‡Ãá8(|Íáp8 WЇã pÍáp8 WЇã pÍáp8 WЇã pÍáp8 WЇã pÍáp8 WЇã pÍáp8 WЇã ü?®É–çb’˜¬IEND®B`‚mpmath-1.0.0/doc/source/plots/lommels1.py000066400000000000000000000003451316273626600203250ustar00rootroot00000000000000# Lommel function s_(u,v)(x) on the real line for a few different u,v f1 = lambda x: lommels1(-1,2.5,x) f2 = lambda x: lommels1(0,0.5,x) f3 = lambda x: lommels1(0,6,x) f4 = lambda x: lommels1(0.5,3,x) plot([f1,f2,f3,f4], [0,20]) mpmath-1.0.0/doc/source/plots/lommels2.png000066400000000000000000000423711316273626600204670ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœíyxUâvOwöNBv Ð(EÑEqD!2£#‚»3ê8Ž:þÆuÁÅÐhD‘%((²d K„$¬!dO‡,ÝõýQvHH'éN/uï|÷Zq”›?½™ªº*^¾úeF7Ê©‹QˆâÊE¤ ho”„àÁ©v=z@ÇŽ°u+Ù?ýäo RÙÒØ¥æh 55„ŸN@D€O>¯º®š‘óGRP^À¸þãxzðÓN]ŒDP.² e@{£$ŠB“I?Š®¯'M iª"•-]*6êþ¶kvÒ3ÓÙxd#ƒSóÞˆ÷0™NÏTe¿ˆâÊE¤ ho”„àÁ©vÐ0Ìaýþ{¯¸x‘Ê–Æ. ãÏ}3þüÂêøl×gôˆîÁ£¿ $0¤E#Å”‹,HÐÞ( Áƒ#hhèüÕ«½ââ D*[»8ÎàðEA8oÛ<þï‡ÿ£CH¾¹ëÂZu1Q<@¹È‚”íÍ’Úy}ÑELê–-úµ9@¤²Åá¢Ù5*6V`3céãùebóSÁOüqÑ 0°ð¶…œ—p^«.F#Š(Y2 ½U:Ž ÛÐ Bvq1lØàO©lq¸Tﯦ¾´žÈ´HÌAÞûçv°ô ·Ì¿…Z[-o›ßõú]›.F#Š(Y2 ½Uvì¨?;ÖÎ \=iK—zÅÇSD*[.åë½?A¥¼¦œŸŒà„õ]ò/žè’‹ÑˆâÊE¤ ho•„ÉÉúó¡CíÜÀðáX¾ýÖ+>ž"RÙâpñö•z{=w|~;Oìäú^×3ùw“]v1Q<@¹È‚”í­’Ðq§‚‚vnàÜsÉOL„M›àÄ ¯8y‚He‹ÃÅ›S¼5MãÑoeéþ¥œ—póGÍ'ÐÜö]ÛDÙ/¢x€r‘)Ú[%a×®ús»Úd"õæ›AÓ`Ù2¯8y‚HeKjj*ö;•[+ Š"´G¨ÇÛ|ýÇ×™¾q:Ã;ò߲ͮJ”ý"Š(Y2 ½U†„@§Npø0ØííÛFöÙgë_0Ì!RÙ’Må¶J´ZÈK"›Lis~™ÃÓ+Ÿ&<(œÅw-¦GL·\D@P.² l@kšÆ3Ï<Ã<À‹/¾Øä5o•„ C×ÕAaaûÖO»ï> Ò Û›ò^B¤²%--ÍkãÏËs—7œN÷ùèϹ¨ËEn»ˆ€( \dAØ€ÎÈÈ`ß¾}ã8aù7¼U‚çãÐÖ€<ŠŠô±h©l±Z­^Þrt ·.¼•z{=Üü×÷º¾]." Š(Y6 ÷ìÙÃ…^È´iÓØ¾};hxÍ[%!œ>“£½ŸŸÇëX²Ä;RíD¤²%??ÿôôÅí;‚>Pr€>¹ÊÚJþ5ô_Ü3àžv»ˆ€( \dAØ€NNN&ö·™$qqq”––6¼VQQÁ‚ ÈÌÌ$##€œœœ†ŸÄŽ1-W–éCn®ûë:°^{­¾ìãAÓÚíâé2ÀÏu¶¬¾¢žâœbBÏ e{þv··—_”Ïõó®çؾcL¸h·&Ü*ý~IMM5ìû¡\Z^¶eË233yóÍ7)++C(4MÛª ˆÕjÕÆŒ£=ôÐCÚ<Ðäµ#Fxís>ýTÓ@Óžx¢}ëoÞ¼Yÿâ õ eg{Í­Ý.5#KË"KÛyÇN·×­ª­Ò.ûà2ÐF~:R«·Õ{ä"Ê~ÅCÓ”KK¤§§­Ð„¶O"5ˆ°°0æÎëô5o–„Ž1èöNVi(8ƌ͛aî\¸àïȵ×Ez÷àÜ®·×sgƬ;´ŽË’.ã“QŸ`öìÒ¢ìQ<@¹È‚°C­áÍ’ÐÓ1膂ãŽ;Àl†O?5ìâI"•-…?é§Å¸s‰QMÓxpɃ,Ú³ˆsâÎáë;¿Æäù–DÙ/¢x€r‘)Ú›%a—.úõ÷=* áškàèQÈÊòš_»\ FÓ4ö¯ß)ÀDÄ€—×{yÍ˼»ù]:GtæÛ»¿%Îâß”DÙ/¢x€r‘)Ú[3 A?…91Žißo“YPcÆèÏóæyGÎ9uà‰E‰D\A€Åµá‰Ù[gólÖ³DG°ä®%tîî5Qö‹( \dAÊ€öÖLBIIz8·çªvMfAýþ÷ úÝhýŒ(3²ÊÖ–±—½D]áÚÒ¥û–rï¢{ 4òÅè/¸ Ñ»cø¢ìQ<@¹È‚”íÍ’<‡nRptè#GBE|ù¥wäÚëb ekË8›³‰Üv@o:²‰Û?»›fãÛ?äÚž×zÝG”ý"Š(Y2 ½Y‚gݬàøÓŸôçÿüG¿ˆ’¥l)[SÆ)Nuyë[œËŸÜHU]¯^ó*cûõ‰(ûEP.² e@{³$ϺYÁ1lôí«ßeeÝ:ÏåU6?ÙùQQ½½ž?|þ6ÞÀåÉ—3ïÖyODi ö ˆãÊE¤ haKB¡¡0q¢~ùÑ©S=“óÔÅÏ8zð˜ÁÍ^Ó4?Àâ}‹IOeÑ‹ ó¹“ûÄñå" R´·KÂÄDðRIèàô;|ð4ºÐ“/1ºl±YmTl® ¨cZ׿é³YÏòAö$F$òí˜o‰ ‹õ‹—ÑûÅ( \dAÊ€övI ‡ôÑ£úÅûݡł£cGHO×O¹{ýuÏ%=qñ*Ðê4¢GQpÆO»×|—×¼Lth4KÇ,¥[t7¿y½_ˆâÊE¤ ho—„ shšÒîÐjÁñèÃo½åÁ­Ã½äâÃQƒ£š¸ÌÜ4“§V¾åcF¦Ž4ÌM”JP.² e@{»$8ÿ|ýyÇ÷Ös©à˜8Î: /†ùóÝ—ó¦‹h<¼±®`·p;µ¶ZÞ¹ñÆôc˜ˆSB‰âÊE¤ h_”„½{ë—ݾݽƒ\— Ž˜5KŸe8q">Ü~QO]|DéýT“}NrÃ'7P]ͫ׼ʄ‹&æä@”JP.² e@û¢$ ‚sÏ…¢"(,t}=— Ž«®Ò§€—–Âÿè“¡£ÊMÓô#èµw¥§Jßi)esÒfÆöËÛÃߦڀ´„(%”( \dA耮¯¯gøðá¼öÚkM–û¢$„ÓíδÛÇ…ÂsÏéw\7jkÝ[ß›.^ ¤º„Ïþûa—†ñáÈ1›ÌB?¢¸ˆâÊE„è7ÞxƒQ£F5[î‹’Nq¸sÝ®‚ãoƒáçŸõ üÛíîoÃ[.PY[É ŸÜ@—=]xîñç4âÒ¢¸ˆâÊE„ èï¿ÿžøøxz÷îÝì5_”„))©Ï'q53ÛUpÂçŸëÓçÎ…§ŸvÞri'§êO1rþHvíÝE=éBdr¤!.m!Š‹( \dAØ€þî»ïعs'Ó¦Mã›o¾!77·áµêêj,X@ff&äää4Œe9¾áî.3™ {÷lªª`åJ×ÖµX,íûܤ$rfÌÀ ÿþ7ÙO<áñߣÝ.n.+«(ãŸÿU?­â¦Š›È'ŸÐËB qi¿´µ,--Ͱ} \Z^¶eË233yóÍ7)+ÓÏçMÓ¶j³zõjíµ×^k²l̘1>û¼?ÿYÓ@Ó23]{UU•gøãš¦è'Ÿx´)]\Àf·ic2Æh¼€vÎÔs´moÓ²ÈÒŽ|pÄï.®"Š‹(š¦\Z"==Ýh…&{íàÊ+¯äÉ'›Þ¯ÎW%!¸ªÇÇ A°`˜ÍúåI?û¬Ý›òuÙb×ì<°øæmŸGJT ËÇ.§æ‡¢‡FûÕÅDqÅ”‹,ÐÎðUIîŸj畂㦛ô û××ÃèÑúõ£Û1‘Å—e‹]³3qñDÞÛü#:³bì :×w¦rk%¡ÝC ;«éQD*~DqÅ”‹,Hо* Áý#h¯ãÇ×_‚Å¢_TiÂ=°ÝÀWe‹]³3iÉ$ÞÝü.#:“•žEï¸Þ”féÓ»£¯Žn¶ŽHÅ(.¢x€r‘)ÚW3 âã¡sgسG¿Œs[xuÔÈ‘ðúÀ{ïÁˆàFiá‹YŽpž¹ifC8§ÆëG<%+Kˆ¹&Æ/.íEQ<@¹È‚”í«™„›M?M¹-¼> ê aýzýP~Ù2è×V®tiUo»hšÆƒKd榙t ïÔ$œJVýÐW7h‘f‡‰â"Š(Y2 }Y\}µþ¼jUÛïõIÁ‘’k×Âwè·x6 |Úø{{ÓEÓ4&-™ÄŒM3œ†sÍ¡ª÷Vc9ÏBpç`ŸºxŠ(.¢x€r‘)Ú—%!ÀСú³+í³‚#* >ý.„¸8˜>ú÷‡+|î¢i.}°!œW¥¯âÜ„s›¼§µá oºxQ\Dñå" R´/KB€>} !Aihë`ÝçÇí·ëSGŽ„Ü\¸öZýÝ:Ÿ¸8ÂùïÐ1¼#«ÒWq^ÂyÍÞ×0¼ÑB@‹Tüˆâ"Š(Y2 }Y‚~JòСúIk×¶þ^¿:égx|þ9¤¦BV–~þô7–-^sÑ4‡–>ÔÎYéYNÃYÓ4JW–‚¢¯l~‡7\¼‰(.¢x€r‘)Ú×%!¸>í·‚Ãd‚Q£ôóÿfφîÝaÉHKƒÛnƒÕ«±z06¯iû0Ó7NלÇ9?r¨Þ[MÍá"/Œ$0:Ðé{D*~DqÅ”‹,Hо. áô8tVVëïó{Á¨Ï8ܳÞy!#†%ÿÜsá•WàÈ·6éçi¦‘`I`Õ¸Uô騧Å÷·5¼b?¢¸ˆâÿ»ØíP^úÐáºuúÙR ÂÖ­þóp“¦i[þF‹¸Ã=÷ÜÃìÙ³}úš¦_lîèQ8yR¿9·TWë7¢5 ~üQ_f6à 7À˜1pÝuÛâꚦñÈ·0uÃT, d¥gµÎ;oÛɉŒôû®±×¶¼m…ÂkØíPY©‡kY™þìxœùçÖÞSQÑògüõ¯ÜSXèólq翟 ޝKBÐG®¾æÌÑçŽÜ|³ó÷9®Æeaaú,ÄñãÉþâ Ò~þ>þ¾ùF˜ÍpÉ%pýõú㢋 ÐÃùÑe6„óªôÖœ4»FIV ¦`Q—·|6áû¥¢¸ˆâ~t©©9ŒN¿ÎÞ³‡´ððÖõµ`u³:tÐOaŠÒ¿v<¾òJ®…ã Ôt+Ìž­gߣÂ[oùüã¼G]>>ýõ×ðí·Mï" ×]‡vÅÿ¹â« ki$}·¾\púѰHéÊ–¯¿áÔEDqñ™‡¦é烺¨Ö’,ÕÕÎÃÕfóÜ)<\??2RÉÈÈ¿¶céØÑyÀ†‡»¬ÿ«HÐþ( ºuƒôî`ëV=·Î$??_˜íº˜Lú´ñ¾}á/A«¨àñ¹cùOáWÄ׳êÛún?ëÀ'Ÿœ^¯kWýL‘”}Güö\ò•>¬ÑZAØ¢‹Aˆâ’ŸŸOjïÞ`µ¶þ¨ªrïȵ²ÒíÛ¦åMöˆÉú)mj“¯-‹ˆhFsÉ%'GˆïˆHоžIؘ±cõpž3Çy@‹ô«-MÓxâ§ç™Røñ–xVŽ[ÉùÿêEEú_rË–Ó½{õ¡GñØ ¤ŒE yCOèÖU?‹$:ºÙ#5:<½,*J õûQ«ûEÓôp«¯×?uªíuö¨®nó=©V«WoŒÙ¬b×®nj꙯‡‡ëÛ3‘þ‰†”í’ÐÁwÂ_ÿª\¾þº~–[cd)~ìšG¾}„i¦ÇÊq+éשŸþb|¼~½aÃN¯PW§Ÿ®——§_$/Š Vl‹ÂˆØ¹®¶mÓÎ\§&AA¢ïÈ  ý¹µ¯½f6뿆×ÕéÁzæãŒåÙV+if³ó÷{:Fê Nvd$iŽñж®­†…µû‡]vv6içœãå¿hûéÿhHоžIؘÄD}võ²eúe0®¿¾éë"ýÃjÉ¥Þ^Ͻ‹îåã_>&Á’ÀŠq+N‡sKéCݺ5,*ùçAXt˜Ž„Ç&Aq1Bii³Gš“e”–ê|m­Ž55§CÓ‡¤Aó° múCÀñ83(ÃÂ\ ÔÖAA§=A†· IÚ_%¡ƒqãô€ž3§y@‹R@s—šúÆ|1†ŒÝ$uHbÅØœß¾#§&TL&½jᇥ[ûåÌa†Ž„þl³µ|´íd¹õÔ),ááíú;{Ñÿ­…H.¢!e@û«$tpË-zïñå—z'yú5Q (hîb­³rë‚[Y–»Œž1=Y9n%Ý¢»µ²…–±UÙ(_WNP|áç·vní“IЇ?¼L~Aß#‘ÿ­‰H.¢!åTo–„ ÿ–:j”Þed4}M¤X]ÊN•qýÜëY–»Œ¾û²füšv‡3è—Õê4b†Å`2·=î)ê~1Q<@¹È‚нråJî»ï>ÆÏ¿þõ¯†åþ, Œ§?¿ývÓû¹Št©D‡K‘µˆkþ{ kò×pq—‹Y¾šÄÈD¶]¼¤€¸]ÿq¿( \dA𙄯 cÅo«7b¶¦é3¦7m‚E‹ôq‹È‘Š#\;çZvØÅnCøúίéÒÁ£mjšÆÏ)?Ss¸†AÇœÐü* Åÿ¢Í$úÚÁG}ÄÍ.†áï’ôaÒçŸ×¿~á…ÓGÑ"]*q×á]\ñÑì:±‹á½†³tÌRàjG5‡jè0°ƒËá,Ò~ÅEP.² |@Ož<«ÕÊÃ?ܰì×_eÁ‚dff’ñÛ pNNNÃ7Úñ+“·—õì™ÃXÉΆ·ßÖ—­^½ÚçŸëʲœ¢®xþ ~-ü•ÛÏ»çÏ~KÅ+ŸQ¼¸˜½ì%ö†X—×e¿ˆä’ŸŸoØ>P.-/Û²e ™™™¼ùæ›”••!š¦mÕeΜ9Z¯^½´ &h“&MjXžžžn˜Ó¢Eššvá…šf·¦Ñ„ì#ÙZüëñ/ Ï¯ÕÛê½»ý+²µ,²´òÍå^Ý®B!Ff‹3„>‚¾ûî»Ù·o3fÌ`Ú´i Ë( Œ¡ßÄdófÈÌ4¾àø1ÿG†~<”"kwÄÝÁ7@€Ùõë ´E]Iå?•Ü9˜ˆ.¯gô~iŒ(.¢x€r‘¡º%ü9“ðLL&xùeýëI“ GãfA-Ï]Îus¯£¬¦Œ ùŸLú³É»ßÒ’ïJÐl±7ĺtz‘f‡‰â"Š(Y2 ( ó»ßé§Ý= =dLÁ‘™“ɈOG`­³òú°×yqè‹TWW{ýsN.Ö[‰»Á½Š"?¢¸ˆâÊE¤ hÏ$tÆ”)úu:æÍËgñbÿ~öÜms¹mámÔÙê˜yãLþzù_ïßÛM³k/-Æh"æÚÖ//z&ÿßÞó®Dñå" R´¿g:#&Þ} •?ÿNœðÏçÎÜ4“q_ê³fæÞ:—û/º¿á5oÏȪØXA]QQWDØÁ½«ˆ4;LQ<@¹È‚”mdIؘ›n‚#²9rD¿y‰Fšðú¯óÀâ "ctwW“×½]¶œ\òÛð†‹³}éâ ¢¸ˆâÊE¤ h#KÂ3Y¸0K/ÕïÞ>nœÛ7¶p MÓxvÕ³<µâ),Aßµ˜‘©#›½ÏÛeKñb}zwì îß¹[¤âGQ<@¹È‚”mtIØM³²hœu|þ9üå/M¯Õá)Ž í¿´æ%¢B¢X>v9ÃÎæô½Þ,[jÕR±¹‚СXRÝ¿¤HÅ(.¢x€r‘)Z„’ÐA~~> °t©~ŸÕ·Þ‚ôtýZôžRo¯çO‹þÄÔ SI°$°úžÕ JÔª‹·8¹ôôÙ¦vܵC¤âGQ<@¹È‚”-BIèÀQpœ}6deAr²~aÿk¯O†ÊkmµÜ™q'³·Î&©C?Œÿ¸äâ WÏC~´ IDAT¯‹½Ñýá o»xŠ(.¢x€r‘)Z”’šýúÁúõpá…°f \z)ìÙãþ6­uVFÎÉç»>§gLOÖŒ_Cj|Ûÿˆ½U¶ØëìWŒ9ÌLôUÑíÚ†HÅ(.¢x€r‘)Z¤’ðÌ‚#1¾ÿ~ÿ{Ø¿„÷Þs½‹¢¯°z}̛ۢÀèѯŸGýöÛz±X[ë;—ÆTí¨¢z_5i„Õ¾£xo¹xQ\Dñå" R´ %ak,Ú³ˆáó†SUWÅËW¿Ìþ™¯q²ÈÄÂ…úõ<:t€+ôB1-MÿóÀú0ɇ¶màìg”§eˉÏ;zöpxÃ.ÞDQ<@¹È‚{×™JÂ3™·mé™éØ4Óo˜ÎÄ‹'zß~»þ°ÙàçŸõéã7êe↠úÃAX }ûBŽG*…… ßùÅ]ÚÃá «øÅEP.²àÓ€>xð «V­¢²²’0dȯlW´’ÐÕ1´w6¾ÃƒKÄl23ç÷s¸»ßÝNß—_®?@¿øR^žÔëÖéF6@ËéÐîÞ]NLÔ‡Nâã!.N¶4ºRÕ®*¬»¬„÷ Çr¶ûG:wö‹¯ÅEP.²`Ò4m+ÐßÛ~øá‡ cРA„……±k×.¶lÙ“O>IŸ>}<Úö=÷ÜÃìÙ³½#ê'^]û*[ù7‚‚YxÛB§— uMƒÜ\ýÌš?\¹{|XØéÐY~+s²s`ІwkòÈH}âãa±œþ:,¬}Gê …¨ˆ–->;‚~õÕW±4:D»îºë× «Õʽ÷ÞK‡ˆ‰‰á•W^ixM´’°ñßóL4Mão+ÿÆk?¾FxP8_ÝñלuÇŸk2A¯^úÙKIÉé°>x ¡¨Hœ‚õ®{4ìÆ_‡„XéÐÁÒì5‹‚ƒ!(È7g?0Úúù Q<@¹È‚ÏÚb±0gÎÆŽ ÀÔ©Sy衇\þF,\¸[n¹…Ñ£G3aÂòóóIIIÄ+ [C³kv&-™ÄÌM3‰ a阥 Lè—˜ýÑÖoŽ6ÛdeߥUÐ#œ·'[šxe%TUé«Õù×Înù•øl1  yhC>Kj“eúlÏ3&“óåž¼æx½¬,Ÿ¸¸T¯o×Ý×L&8|8Ÿ¤¤Ô†hŸ}ñuk¯äÓ­[ª×¶×^?ÎÞmÀ§cÐ%%%Lš4‰êêj®½öZ·Ö=tèW_}5ݺu£   ! e( ëluÜóÕ=|²ý:…wâ»±ßѯS?C\Z# êWêéÚ}\ÝoißgÛl§C[Nm1Ôkk¡®®íG}½kïkéQS£ÿ€©«KõêMÚHe˜r9“¿üÅhƒæø4 ¯ºê*–,YBPPC‡ukÝäädòòò4hyyy$''7¼¶{÷n,X@HH6›Q£F‘““CJJ ‹¥¡tðDzŒŒ †ÞdÙ¶ÛxzÓÓ,Í[JçŠÎ¬yh õ…õX#­~wqe]ûçvòɧÏz7Ð^—ÈH ûöyæâ«ýrÝuà ²°qc6}ú¤±{w]º¤já—_ôeûöåй³¾lûölÎ=7ýûsèÔ)… ;wf“ššFn®¾,8ØÂ®]Ùœ}vä ¿/''›^½Ò8x0‡øxý}{÷f£il!..…  û÷gÓ½{9 Ë~ý5›””4Î!:Z_vð`6ÉÉi9¢/ ´——M×®i;–CT”¾¬  ›ÄÄ4ŽÏ!2R_väH6:¥QX¨/3›-?®»ZÞwì˜þ¾“'O¯{üx6;êË""t—ÂÂlâãÓ()É!<\߉§—ED¤à|YQQ6qqi”–æ`±èëv±Xô÷g“FYYŽKËÊËs Õ·WR’MTTú²€ ¥¥§—……éû ñ2»½«5¼¼\êê\(oüˆÏJB€ &ðÖ[oQRRÂ#<ÂgŸ}æòºV«•ûî»èèh"##yõÕW^m ¿1µ¶Zn[x_ïýšÔøT–]NR‡$£µZ¤:·šõ½Öc9ÇÂÅ»/n×ÝSŠÿDËŸAÏœ9€°°0æÏŸïÖº‹…yóæ9}MÔ’°ÎVÇwòõÞ¯9'î²Ò³èÑÙW9‘qzrŠ7ÃY¤âGQ<@¹È‚ÏfN˜0ÿþ÷¿ìÝ»—‚‚V¯^Íã?Î&Ç%Ü<@´’ôûŽýr,_ìþ‚^±½X•¾Ê¯áܨż9{ÐS_!Š‹( \dÁgGÐ={ö$00÷Þ{ªª*Î?ÿ|ž}öYbcÛx¢•„6»ñ_gÁÎôˆîÁªq«èÙÅw8uð+ëFxÿpC]|‰(.¢x€r‘ŸAgeeñÖ[o5ínß¾Ý+á bÍ$Ü´y÷~}/s·Í%%*…Ué«HŽJn{EàîeÏ=@¼;¼Ñ_"Š‹( \dÁgGÐ ,àý÷ßgÔ¨Q^ß¶(—µkvÞ;ò³·Î¦kdWV[åòý};Óe5MãØlýÖ.Ó½?#ÒÔ]Q\Dñå" > èÈÈHüqŸl[„’PÓ4^ú0ﯟĘD²Ò³èÛÓP'wÊ–²µeTçVÓaP¯\{Ã_#Š‹( \dA]n´hšÆãß=ÎôÓ‰­eUú*zÇõ6Ô Ü+[Gωã]¿)­¯\|(.¢x€r‘u¹Ñvð?üS~žB¼%ž¬²H£äpµl±UÙ8±ðæ03 ·{÷ì w]ü(.¢x€r‘) , ?Ùþ ϯ~žÈàH–]Ní!owâ\-[NdœÀVi#áÖ£|ó3Z¤âGQ<@¹È‚”GÐF•„?æÿÈø¯Æc6™YxûBtþ=Õ¹U\-[ÊÁñ¾“©øÅEP.² å´%anq.·,¸…Z[-S‡Oåú^×bÝOÍ—êÕ”f•’BôÐhC]ü…(.¢x€r‘)Úß%aIu #>A‘µˆG>Òp›*«àpÅåøõsŸ;§wÆdöÝu7dÛ/þ@P.² e@û³$¬³ÕqÛg·‘S”ýoäÍëÞlòºHG[.š]ãØÇ¿ oÜãÛ±™ö‹¿Å”‹,HÐG²°ù’ÍTdWøü³&-™Äª«èß©?ŸŽú”s@“×E*8Úr)û¡ŒSNuEa=à uñ'¢¸ˆâÊE¤ èæTl¬ üçrŸ~Μ_æð~öû$F$òõ_Ùì="m¹4”ƒ>>zvÅÅŸˆâ"Š(Y2 M1úØiÅßAçç2qÉDL˜˜Ûü¯¯!RÁÑš‹­ÒƉÏO`¶øîÜgW]ü(.¢x€r‘)º6L?÷¸|£oŽ ëluÜõÅ]TÖVò÷!gH·!-¾W¤‚£5—ÂÏ ±UÙH¸-ÀHߟ])Ë~ñ'¢x€r‘):¦c ¡ÝB±î¶R_áýSî^øþ6ÞÀ¥I—òÜçZ}¯HGk.Ç>ôíÔnw\ü(.¢x€r‘)úäÉ“D^ Tn®ôê¶W\Í+k^!28’y·Î#( ¨Õ÷‹Tp´äR‘]AÙÚ2Âz‡5Ä?gÀȰ_ü( \dAÊ€Ž‹‹Óïs”ž*åî/îFCcÆ38+æ¬6שàhÉåÐôH’OÏ}vÅÅDqÅ”‹,HÐõõõt¸¤ë½W¾øý‹®8Ì]çßŘ~c\ZG¤‚ÙKí±Z ?-$0*Ð'×}vÇÅ(DqÅ”‹,HÐUUUD^‰)ÈDIV šMóx›9E9LÝ0•ÈàH&_7ÙåõD*8œ¹~ç0ZFâ}‰D8YË.F!Š‹( \dAØ‹%=z”gžy†¬V+³fÍ"(HŽŠŠ" <€¨ÁQ”f•R¹¥’È‹šŸ£ìO|÷õözþ1ätŠèäòz"gºØOÙ92㘡ëƒ] u1Q\Dñå" ÂA'&&òÑG1sæLâããÙ³gOÃkŽËÆ^§ßã°ø»b>ké¾¥,Ù·„ž1=yxàÃn­+RÁq¦ËñOŽSWTG¨B»…êb$¢¸ˆâÊE„è0|øð&yóæ°eËÊËËéÛ·oÃû—¹.€’ïJÚýÙu¶:[ö“7™À·Ö©àhì¢i‡¦üV>šd¨‹Ñˆâ"Š(Y" {ôèÁÒ¥K›<ÆŒCVVï½÷3gÎlòþ¼¼<,XÀŠƒ+ø1òGÊ~*cÇæ eƒã'rNNN›Ë¦oœÎž={Úu(7}“[ë‚þ¤=Ÿë‹e]¾ï{ª¶Wq²ïIûê"Ò~1ÒÅjµ¶”KË˶lÙBff&o¾ù&eee…¦i[5Ù¿¿§M˜0A›0a‚–››ÛðÚ-·ÜÒðõ®q»´,²´cs¹ý'ªNhѯFkÿ жßÞ.ÏÝ»w·k=_ÐØeÛMÛôý2Ïýýâm£ÅEMS.-‘žžn´B„- {öìIQQ‘Ó×_n´ã9þßã~ZH§1®—{“×M¦ôT)/žHߎ}Û^Á "ë>+'¿9Ip—`nóýu7ZsQ\Dñå" B q¸Kã{Æ ‹!(.ˆâeÅÔ¬syUµUÌÜ4“@s Ï ~¦Ý."—ÃoM?sÃlÌ·XÄýb4¢x€r‘)ºñ= ÍAfF' Õkœøü„ËÛ˜½u6%§J¸£ïtíÐþSÐD*8ÒÒÒ¨/­çØGÇ0‡šéòç.†ºˆ‚(.¢x€r‘)úÌ{v¼³#…Ÿº´¾Ínã­ŸßàñK÷ÈE¤YPV«•Ã3c«²Ñil'‚âZ¿Žˆ¯]DAQ<@¹È‚”}æ= £."$)„ÒJ©9TÓæú‹ö,"·$—¡Ý‡rA⹈4 ê׿RðïL&RžL1ÔE¤ý"Š‹( \dAÊ€>óž„&³I?ŠÖ pAÛGѓ֧r?~™gGÏ VÁ±4‚ú’z:¥w"¬—ooiÕ"íQ\Dñå" Rtã’Ðc˜ãøÜãhZË׿øåØ/¬Í_Ë9qçpCïàÞ´{1›<ÿë‹Rpš|ˆž•=IüS"¡Ýý;­Û¢ìÇEP.² e@ŸY˜L&’ѧ4zëÓõ4McÁÎŒî3Ú+."uEušrˆš RþnìØ³ö‹Q\Dñå" Rô™%¡ƒNc:”ĉ/OP} ºÙëlä`éA.KºŒ”(ï™GÁØ*mh£5B“?z1ö‹Q\Dñå" Rô™%¡s¨™®»‚O=ÜìuÇÑóúüÁk.FµÇk94õæP3C_j¨KcŒÞ/ÅEP.² e@;+ ty  ¦`G?8J}ùé¡»fgáÎ…˜0q{ŸÛ½æbtÁ‘÷Rv«.ta籆º4ÆèýÒQ\Dñå" R´³’ÐAp§`:é„­ÂÖp'k€uë8T~ˆ+º]A—HïͰ3²à¨ÚQÅ‘wŽHÊÓ)B•-Ê¥9¢x€r‘)ÚYIؘ¤Çô²0ÿµ|l•6À7Ã`\Á¡iûÚ‡fÓèþÏîw ªlQ.ÍÅ”‹,HÐ-•„"Πã]©=VKÁhšÆç»>Çl23êÜQ^u1ªà8ñÙ JW—Þ'œ.»êâ åÒQ<@¹È‚”ÝRIؘ³^: sˆ™üç³sÇNŽVe`×nÝoÐŒ(8lU6rŸÈ ×Ô^˜ƒÌ†¹´„riŽ( \dAÊ€n­$tÚ=”®wÅnµ“ûœfCº ñº‹GÞËyÔª!at1Cc ui åÒQ<@¹È‚”ÝZIؘnÏt#06ÈE‘ô8Þƒ+R®ðº‹¿ ŽêýÕ¼Q€Ùb¦ç= ui åÒQ<@¹È‚”ÝVIè 0:îÏuÇl7sÿòû”<Èë.þ,84Mc߃ûÐj5ºý½[³I)"•-Ê¥9¢x€r‘)º­’°1ö»ìŽ=ÌÀýÑÖ¶|¥öâÏ‚ãÈŒ#/+Æ’j!ùñdC]ÚB¹4GP.² e@»R:X{l-ï{€ÜÇr±×ؽê⯂Úc%÷/¹˜Mœ;ï\̡Ϳu"•-Ê¥9¢x€r‘)Ú•’ÐÁÚüµ¬9w 5k¨ÚYůÏüêUöZ;»ïÞ½ÚN÷v'2-Ò0WQ.ÍÅ”‹,Ðÿú׿>|x³å®–„kò×€ Îùð£94ù%+J¼æè‚#ïÅ<*6Wuy)Oµ|‘'‘ÊåÒQ<@¹È‚°½|ùrzõêåô5WKÂâêbvî GtºŸ×³ß=€Ýé»Ýºxkøºà(û±Œ¼Wòˆ uN*¦“a.î \š#Š(Y0< 8ÀðáÛ<æÎËÒ¥K¹ãŽ;œ®ãjIøcþ\ÑM?½®ãèŽt׉Ú#µì½o«w^q_µ…µì³ìÐ{joÂz´~+‘ÊåÒQ<@¹È‚áÝ£G–.]ÚäByy9=ö999|÷ÝwMÖ©¨¨`Á‚dff’‘‘@NNNÃObǘVæÚL¨ƒ+R®hXf{ÈÝàDÆ –ÿsy‹ëºº h÷º­-³UÛølØgœÊ;Eå •DÞi˜‹HûEf—ÔÔTÃöriyÙ–-[ÈÌÌäÍ7ߤ¬¬ ¡Ð4m«&0Ço¶lĈ.­;øÃÁ/ í>±»ÉòÒµ¥Z–9Kû!ü­|c¹G~›7oöh}gØmvmÇèZYÚæK7kõÖzÃ\Ú‹riŽ(š¦\Z"==Ýh…&~ÝK–,i¶ÌÕ’0§(‡€zÇön²<êò(Îzù,lU6¶ ߆uoûÇÀ|QpøÇN,ë{­gûÛ©ü¥’¨!Q\¼íb’NÂdvÿHKˆT¶(—æˆâÊEhm•„î„­a1“ü—d:¥w"ïŸy™y„CoâÐ[‡êDüÍñ$J¤¤¸„¤4›†­ÂFma-›*¨ØPAéêÒ†›D¦ëÄ®ÄßïÕ`v RÙ¢\š#Š(Y2 Û* N±ó0 'Ó{ZoRþ–BQfE_Qºº”£åÀ¥å!Š€ÈºÞו.t!ü<÷&ž¸‹ÕjÅb±øô3\E¹ˆëÊE¤ è¶JBÇÇ™×àð”®!tÔ•®“ºRW\GñÒb¶¯ÝNçêÎÔ®Ád" 2€ ˜ "DyI$á}Ã1ûg$)??_˜ñ<å"®(Y2 Û* º…iÞÞ (6ˆNc:ÑiLû&•ø‘þ‘+—æˆâÊEþçJÂz{=¹Å¹t ïHth´Ï]D*8”‹sDqÅ”‹,HЭ•„y¥yÔÙë¼6þÜ"ÊÅ9¢¸ˆâÊE¤ èÖJÂ}ÅÞ9ƒÃUDš¥\œ#Š‹( \dAÊ€n­$ôUAØ"Í‚R.ÎÅEP.² e@·Vî/Þ@¯Xçw÷6"ÊÅ9¢¸ˆâÊE¤ èÖJ£•GHêä‘ åâQ\Dñå" Rtk%á±ÊctŽèì‘ åâQ\Dñå" Rtk%¡# ;…ûçüd‘ åâQ\Dñå" ÂôG}Äý÷ßÏc=ÖlH£µ’ðXå1¢B¢ óµ" VÁ¡\œ#Š‹( \dAÈ€>vì³gÏ&88³ÙL‡š¼ÞRIXY[Iem¥ß†7@¬‚C¹8GQ<@¹È‚á}àÀ†Þä1kÖ,BCC™:u*iiiÌ›7¯É:-•„Ç+þ± åâQ\Dñå" †t=Xºti“ÇØ±c‰×ïÍGIII“uª««Y°`™™™ddd““ÃÁ) iXæßrü#ðö2‹ÅâóÏP.ÿ.iii†íåÒò²-[¶™™É›o¾IYY"aÒ4m+Ðßh‘3ùûßÿNii)'OždúôéMÎܸûî»™;wn³u2vepÛg·ñÈÀG˜rý¿xŠt©DåâQ\DñåÒ÷Üs³gÏ6Z£à[⥗^búôéÌŸ?¿Ùiu-•„þ>ÅÄ*8”‹sDqÅ”‹,ЭÑRIx¬Êÿ-RÁ¡\œ#Š‹( \dAÊ€n©$4âZ¤‚C¹8GQ<@¹È‚”ÝÒLB#Z¤YPÊÅ9¢¸ˆâÊE¤ è–fÐ"Í‚R.ÎÅEP.² e@·VšMf, ~s©àP.ÎÅEP.² e@;+ 5M£°ª¸°8Ì~s©àP.ÎÅEP.² e@;+ «ë«©µÕëW‘ åâQ\Dñå" R´³’°ôT)€_nÛ‘ åâQ\Dñå" R´³’Ш€©àP.ÎÅEP.² e@;+ h‘ åâQ\Dñå" R´³’ÐÐ1a1~u©àP.ÎÅEP.² e@;+ :‚©àP.ÎÅEP.² e@·Z†¨’P”KsDñå" R´* £\œ#Š‹( \dAÊ€V%¡s”‹sDqÅ”‹,HÐÎJÂ’Sú]WüÐ"ÊÅ9¢¸ˆâÊE¤ hU:G¹8GQ<@¹È‚”ÝZIèïÓìD*8”‹sDqÅ”‹,HЪ$tŽrqŽ(.¢x€r‘)ºµ’0*Äùí°|…H‡rqŽ(.¢x€r‘)º¥™„aa„†øÕE¤‚C¹8GQ<@¹È‚°ýÇ?þ‘G}”Ñ£GsôèÑ&¯ååå5ù³¦i”ž*õûð@FF†ß?³%”‹sDqÅ”KK”••­Ð!º¸¸˜êêj¦L™Â°aÃØ¸qc“×M&S“?[ë¬ÔÛë è€ÿÝ -”‹sVÉ©ƒIDATDqÅ”KKˆÐF 8p€‰'6Yv÷Ýwc6›IOOç×_eÉ’%M^·ÛíMþlTAPSSã÷Ïl åâQ\Dñå" &MÓ¶ýiÌ/¿ü¼yóxýõ×ùöÛoÙ»w/?üpÃë}ûö¥cÇŽ€>ílLÚ_”••úùQ.ÎÅEP.g~¾ãȹ°°;vær&B´ÕjåOú]»v¥  €çŸžóÎ;Ïh-…B¡ð+BtKX­Vî½÷^:tè@LL ¯¼òŠa.‡â¹çžcÇŽlذÁ0€•+W2þ|êëëéÙ³'Ï>û¬![·nåÝwߥ¦¦†¤¤$^|ñEC<Ô××sÓM7qÕUWñÔSOæ±zõjž~úi.¸à̘1c sÑ4¿ÿýï”””˜˜ÈsÏ=g˜ËO?ýÄœ9søê«¯Ø»w/†¸9r„G}”.]ºPQQÁ¬Y³ ñ8!K–X¸p!·Ür 3gΤ¤¤ÄÐó'“’’øðÃÎjô7×\s ï¿ÿ>}ô«W¯6ÌcÀ€̘1ƒ?üuëÖæáà7Þ`Ô¨QFk`6›‰ŠŠ¢¼¼œ®]»ê’‘‘Á¾}û &Æ¿³nÏdРA̘1ƒÇ{Œ#FÎ7näꫯfÊ”)ÔÖÖ SJЇ")) €nݺQPP`°‘X|ôÑGÜ|ó͆:|ñÅ >œAƒêñý÷ßOïÞ½ õ2dË–-cÖ¬Y<ÿüó†ºìÙ³‡ /¼iÓ¦±}ûv8`¨ÀôéÓ›(ào®ºê*æÎKzz:š¦ 3>/U@'''7œ——Grr²ÁFâ0yòd¬Vk“2Õn½õV–.]ʦM›œÎøôß}÷;wîdÚ´i|óÍ7äæææâ 44³ÙØÿrÉÉÉÄÆÆú5mJKK õ©¬¬dß¾} 0ÀPÙ³góÌ3ÏðñÇ“””ĶmÛ õq`øivîpûí·sß}÷±víZ¢££III1ÌÅjµòøã³k×.&NœÈ”)S6Äeîܹ̘1ƒaÆñàƒ2mÚ4C<–-[Æ’%K¨­­åì³Ï&<<Ü€—^z Фׯ_OÏž= sÉÈÈ`ùòåTUUq÷Ýwæ§ÿíØ±ƒúúz.¸àC}æÌ™Ã¸qã u6l/¾ø"«V­âèÑ£Büæ’•„ …BñÿR q( ÅÿO¨€V( AQ­øŸdÅŠ<÷ÜsLTT”ºc‡BZT@+þ'yï½÷¸ôÒK™={6?þ¸ÓÛ¤)¢£N³S( AQGÐ …B!(*  …BPT@+ … ¨€V( AQ­P(‚¢Z¡P(E´B¡PŠ h…B¡Ð …B!(*  …BPT@+ … ¨€V( Aù •‹ö áwÂIEND®B`‚mpmath-1.0.0/doc/source/plots/lommels2.py000066400000000000000000000003611316273626600203240ustar00rootroot00000000000000# Lommel function S_(u,v)(x) on the real line for a few different u,v f1 = lambda x: lommels2(-1,2.5,x) f2 = lambda x: lommels2(1.5,2,x) f3 = lambda x: lommels2(2.5,1,x) f4 = lambda x: lommels2(3.5,-0.5,x) plot([f1,f2,f3,f4], [0,8], [-8,8]) mpmath-1.0.0/doc/source/plots/pcfd.png000066400000000000000000000672101316273626600176500ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìw|ÕÚÇ»›ºé=!…ôDªDD@&  \®B”&ÕŽúªW/zsDQDDi¢ˆé(Ò7´JB $$!ôdÓ³ÙìÎóþ1ì¦m’­Ùñ2_?ó ÎÌ9óÛ3³Ïžyžsž# ¢ƒÀÃÃÃÃÃ),Àç¾æÂÃÃÃÃÓ¡¹ðððððh†7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…7Ð<<<<…ÓZ¡P`ܸqøâ‹/Ì-…‡‡‡§Ëá´þꫯ0eÊsËàááá1 œ5ЧOŸ†»»;ÂÂÂÌ-…‡‡‡Ç,X˜[@{;v uuu8zô( 1uêT„„„zõêwww…BºwïŽÊÊJØÙÙÁÂÂeeepssÓz_vv6|}}õ*Ûûx}ÿ»úD"'´<¨ú”J%jjjP]] "•+WÌlýšAD׈ÃÄÆÆÒ_|Ñb߬Y³ŒzÕ«Wµ>cÃë3 .ëã²6¢OŸ±m‹¡p¶­bذa6l˜I¯áççgÒú …×g\ÖÇem¯ÏÜpÖÝ•(•JsKè^ŸapY—µ¼>s# ¢kúš[ˆ.Ìž=[¶l1· žÿ1¸f[ø4€ºº:sKè^ŸapY—µ¼>sÃh999æ–Ð!é#"üúë¯xòÉ'‰èèhܼy³‹ÔýýÛÏœt•¶›7o"::‘‘‘xòÉ'±mÛ6Q§å¸Üv÷õ q|‡&¸i5'2™Œ^|ñEÐb‹Å´{÷nsËãá»wï&±XÜæ™1cÉd2sËã\³-|@bb¢¹%tHGú^yåüúë¯ð÷÷DZcÇPVV†eË–¡¾¾ÑÑѸqã†Yõq.ë3µ¶ëׯ#::2™ Ë–-CYYŽ;???lݺ/½ôR‡=i.·À}}C|úoË‘#Gy{{Ó½{÷Z[¹r% ^½zQ}}½™ò˜“úúzêÙ³' •+W¶8vïÞ=  ôÃ?˜I!÷àšmá{Ðà~ A“¾ªª*ÌŸ?°nÝ:tëÖ­ÅñÅ‹cÔ¨QHJJ† º\—à²>SjÛºu+nݺ…Q£FañâÅ-ŽuëÖ ;wî„……Þzë-äççw¹>cÀu}†Âhp?РIß¿þõ/äææâùçŸÇ¤I“Ú …øúë¯+V¬€\.ïR}\‚ËúL¥ˆ°víZÀÒ¥K!¶ýª8o¿ý6êëë±téÒ.Õg,¸®Ï`ˆwqüí8þ< www*..îðÜgžy†Ðúõë»HP=#ýúõ#†aÚ=¯´´”É‚îÞ½Û… ¹ ×l ߃÷ ­õ-_¾Û3öððè°ì|ظq£iÄáï×~\ÂTÚ¾ÿþ{lY ´{ž››Þ}÷]( üç?ÿé2}Æ‚ëú †øôߊääd@¾¾¾ÔÐÐÐéù ÃPPP œœœ.PÈcnŠŠŠÈÊÊŠœœœ¨¶¶¶Ó󫪪ÈÃÃݼy³ r®Ù¾ îšëûæ›o¯¿þ:¬¬¬:-+Ô‹ìÝ»×äú¸—õ™BÛ¦M› —Ë1gΈÅâNÏwppÀ¿ÿýobbbL®Ï˜p]Ÿ¡ðÜ4¨ô•””à矆,X uy•Þ³gIõq.ë3¶6¥R‰~øðòË/k]náÂ…ðððÀþýû[ŒèàrÛÜ×g(¼in ¢Ò·nÝ:Èd2Ì;...Z—0`|}}qîÜ9šLWá²>ck»vírrr0tèP„‡‡k]ÎÆÆ³gφR©ÄæÍ›M¦ÏØp]Ÿ¡ðÜ4$&&B&“aíÚµ …mÆ´v†P(ÄäÉ“ADØ¿¿Iôq.ë3¶¶ãÇžzê)˪ÆÕoܸQÆ“Ëmp_Ÿ¡ð@TT”¹%tHTTŽ9‚ââbüãÿ@PPÎu˜ÒÍñwh?®blm'NœŒ=Zç²aaa9r$²³³Õ†žËmp_Ÿ¡ðÜ4ÔÕÕa×®]€éÓ§ëUÇ!Càéé ‰D‚²²2cÊû[´W1¦¶úúzœ;wÎÎÎz.UlcýúõF×g ¸®ÏPx îRSSqèÐ!ˆÅbŒ?^¯:D"ž}öY(•J:tȨú¸Þ~\ÖgLmçÏŸGCCFŽ ‘H¤W“&M‚»»;<ˆüü|N·Àí{k x î²²²PSSƒ &ÀÎÎNïzÆ8s挱¤à~ûqYŸ1µ©ÜO>ù¤ÞuX[[cΜ9P*•زe §Ûàö½5¼÷ ?þø#àŸÿü§Aõ <g°¦æp½ý¸¬Ï˜ÚŒa vÙ'عs'§Ûàö½5œ]ÕûÚµkøñÇÑÐÐ???|òÉ'&»— 2™ çÏŸ‡­­­Þî  Å;wPZZ www£härûÜÖg,meeeHLLD@@BCC ª«GèÙ³'nܸaÐÀå{k 8Ûƒ~øá‡±nÝ:lÞ¼.\0鵸h8zô(ª«« vo¨Põ¢ããã ®K—Ûà¶>ci“H$ "<ù䓿ÞÐÕÛÚ¶mÛ ®Ë”pùÞÎh€š}ŒZ/—ášmá´º«àb A&“áàÁƒ°±±Áˆ#ŒZ·±‡Ûq©ýbcc‘˜˜ˆþýûãÙgŸÀæ¥èß¿? ‘H̬°%Æh»„„À#®´ßÅ‹QPP€'žx¢ÅZ‰‰‰ðôôÄСC‘ŸŸK—.™QeK m»ššܹsF›xÔœ††ôèÑׯ_礛ƒ+Ïž©à 4¸7IåÞ7nìííM¢oàÀšz_†À•öS庞€›7o\WÚïܹs€1cƴدҧš*Û¥º:Âж3¥{`õqÙ@såÙ3¼· 8pà€Ú½˜F_ïÞ½Ç@s¡ýqõêU8;;#,,¬Å1•¾xyy!11µµµæÙCÛNõŠoªtNNzö쉇zׯ_GZZšI®£/\xöL o Á­@ÃñãÇÕî ¦ÑgLÍ…ö»uëêëëÑ¿…-k•>@€!C†@¡PpÆmhÛ™º­ÒÇÕ^4ž=SÂhp+Р)÷†)ô¹ºº¢[·n¸sç ª‹ íwùòeÀ£>ÚæXs}C† Ðä17†´]]]nß¾ ___xyyQU*}Ï=÷¨Wöá \xöL o Á@ƒÊ½amm­vo¦Ó×»wo(•J¤¤¤TÚOe  ÐæXs}\3І´Ý7À0ŒÉÜ@“>®º9¸ðì™Þ@ƒ;†'N ²²²…{0>•›ãÆÕÃ…öS¹,4õ ›ëëÛ·/Äb1âââÔ+W›CÚΔTT4×§z«Û½{·É®§+\xöL o Á@C{©EM¥ÏX~hs·_]]’’’àãã__ß6Ǜ보´D¿~ýPSSƒÌÌÌ®”©CÚ®+ ts}S§NÀ-mîgÏÔðÜ4Èårìß¿ÖÖÖxæ™gZ3•>chs·ßµk× T*5öž¶úzõêHJJ2¹¶Î0¤ínß¾  é>š‚æúzõê…ððp$&&"##Ãd×Ôs?{¦†7ÐàF áøñ㨬¬ÄSO=Õ½˜NßC=‘Hd°6wû©ÜšüÏ@[}*ƒÆ­oÛ’““!‹`dUM4×'8çæ0÷³gjx n:Z9ÅTúlll†{÷îA*•ê]¹Û¯£@[}\êAëÛv………¨¨¨@DDD›a…Ƥµ>®¹9Ìýì™Þ@Ãü¹\®½ÑÚ½˜VŸ1Üæn?•îß¿¿Æã­õõìÙ€qÆ€оm—œœ €} 2%­õõíÛ¡¡¡¸|ù2²²²Lzmm0÷³gjx óNœ8ŠŠ Œ;ŽŽŽmŽ›RŸ1 ´9ÛO*•"-- ¡¡¡puuÕxNk}îîîðööFjjªÁcÀ Eß¶ë*ÝZŸ@ P÷¢U©]͉¹¿»¦†7Ð0 ¡³…aM©ÏÚœíwåÊí»7Íúzõê…Baö mú¶]WhMú¸äæ0÷w×Ôðæ 4¨FoXYYito¦Õg mÎö»v퀎sQhÒÇ•@¡¾m×UZ“¾¨¨(!>>¹¹¹&½~gðAÂsNž<©vo899i<Ç”ú‚‚‚`gg‡›7o‚ˆôªÃœí§êwÔ“Ò¤+B}Û.99"‘¡¡¡FVÔMú¸äæàƒ„æ 4tæÞL«O("22ÕÕÕ(((Ыs¶ß;w힣IW ´>mWYY‰‚‚„††ÂÊÊʪšhOWÜ|ÐŒœUzN}s,˜3P“šš KKK¶{Ž&}=zô`~­OÛu•{h_ߣ>Š€€œ?Þ(«òè $4#£F† ðÓO?™4ɺ¹ 'Ož„T*íн˜^Ÿ¡Ú\íWYY‰¢¢"„„„À¢Ýó4é³··Gpp0222PSScJ™¢OÛu¥nO_s7‡9â僄à§Ÿ~ê°‡i(æ 4hãÞL¯ÏPm®öSùŸÃÃÃ;<¯=}*7‡jÊ´9ЧíºÒ@w¤ n>Hhf¾þúkÔÕÕá7ÞPïËËËÃÎ;±ÿ~u"%%EíRÝ4m÷‰Åb½Ë껯±±»w¥%&NœhV}*­úâÿÚhZºJ•BW}*¿õŸþÙeš[ŠÒ¹lsmN}½{÷†ŸŸΜ9ƒ‚‚‚¿MûµÞwõêUìß¿+W®Dee%8]#޲uëV ¥E‹Ñ«¯¾ªÞ?kÖ,£^§¶¶Ö¨õiÃ_ýEèé§Ÿîô\Së+--%Ô»wo½Ê›£ýˆˆ>úè#@6lèð¼öôýöÛo€Þzë-SÈÓ }Ú.$$„нS÷èî‡w)ij%ÏJ¦ÜU¹Ô(mìR}o¾ù& µk×õºÚbìgÏØ¶ÅP8݃~ñÅ‘––†uëÖaÍš5&»Ž9 Úº7Óësssƒ‹‹ ÒÓÓÁ0ŒÎåͨÑÖÅÑž>•‹ÃœS¾um;™L†ÌÌLx[{#ud*r>ËAÉîþ\ˆô·Òq!àÒßIGC¾qfHv¦ÏÜÉ“ø á@W°gÏžNGo¨è }¡¡¡¨¯¯G~~¾ÎeͨÑfˆо¾ððp³Î&Ôµí®¿†aà×àq¤a«ÃÐï\?ô9Ö>ó}@rBÞ×y¸òðTÆþºÞ™¾AƒÁÇǧOŸFqq±Á×Ó>HøÐՆÇ£²²O?ý4œ;=¿+ô(4G †ˆšš GGGxzzvxn{ú¬­­áïïÜÜ\³åäÐ¥íª.VáhôQ@dh$ú_íß×|áô¸\G»"b}fD·…ÝÐXÒˆë#¯£x‡aF³3}B¡S¦LÃ0Ø·oŸA×Ò>HøÐÕ³‘~ûí7À /¼ Õù]¡ÏmŽÙ\÷îÝC]]""" :<·#}!!! "dgg[¢VhÛvò9n>sÙ5¬ÎAo ‚Цí××ÊË á?„#lu˜F·§ßFÞê<“ê3§›ƒŸIøÐ•³‘*++qèÐ!899aüøñZ•é }†hsÌæÒÖÿ t¬/88p÷î]ãÓmÛ.íµ44–4¢"¼ûÃÒ¾¯ù¢÷¡ÞÚ‘þf:J÷—šLßã?///H$”–êw}ág>te aß¾}hhhÀ”)S`cc£U™®Ð§2Ðééé:—5G FåÖÆ@w¤OeèÌe µi»’Ý%(ÙU›î6(ó*ÐôÃÒnãÝðÐ6v¬ôíèÛ¨¾Rm}"‘“'O†R©Äþýûu¾†!ðA€® 4lÛ¶ ­u™®ÐgHÚUº³!б>•6×{µ¼DŽÔWîÖMÈÌ΄@ Ðz™+Éù2L=ƒ›Oß„,GfT}*TnÕ褮‚>tU ¡  §N‚†®u¹®ÐçââWWWܽ{Wç¡vÆÖ§¨V h[2?ÊDáÖB(*mÎÑÅÅÑ‘>s»8:k»Ì2ÑXÒˆn »Án¨rssáççkkk­¯á÷¶º-êy‘É/&ƒ”Úg-ÔöÞ:8yò$ÊÊÊ´®ßPø á@WvîÜ †a0}útˆD"­Ëu•¾°°0Èd2äåéT2¦>é)).÷¼Œä“‘½4)3SéÉ–k&ª\ªž¿¾úÌíâèH›,W†ÂŸ aádà/‚‘““"ÒʽÑ@€ÐoCaeʳ•ÈùB{·€¶÷ÖÂÂÏ>ûl—»9ø á@Wôqo]§O_7‡±ôI%RÜxêrà>Ùá?„Ã3Ú ©7žº¡tÉårdffÂ××öööésqq‹‹ 222ô·miË[™R|_ó……“…Ú ¤óu„VBôØÖB[!²þ“…ªËUëkÍ´iÓ?ÿü³Îúô…>tE !55W®\ADD„οú]Ñ7Ph }õéõ¸5ù¨‘¶6 ½öôB·…ÝÐc[DlŽ)ɳ’QŸQŒŒ 0 £•ÿY}ÁÁÁ¨¯¯Gaa¡ÁŸCWÚÓÖXÚˆü ùÚ áû¦/€&?¹®=hâH1B¿eÛò…d(k”zëÓİaÃŒ³gÏvÙä>HøÐ†æcŸ;·Ûš® „èÛƒ6T!uQ* ø¿çßW|[÷™ãƒ€@Y¥DòŒdµ;B[CÕ™>sº9ÚÓ–·:LŸy>°ò`“ògffÐß@€ÏB¸=ã†ú´z¤¿Ýù±.÷V(bîܹ€M›6é­Qø ဩ èÝÓ§O×¹|WBô5Іê+þ­Ò“Rˆ{ˆô©æ×÷ÀOa×ÇUqU¸ý›´£$ýºè3çHMÚÕ Ü[} üßñWï7ÄÅ¡B  bc¬¼¬P°¡ ÓñѺÞÛÙ³gC(bË–-hllÔ[§¶ðAÂSN:…ôôt 2D¯5äº*¢Ò¦«6D)™KØžaøºp­4?’BK!?ÜÚw €öº3}æÉ¡I[Ñ/EPHðŒö„M÷¦±òÆèA€•§"~bÝCwܼD®“¾ŽèÖ­&L˜€ââbüñÇéÔ>Hø`ê@Ã÷ßxå•Wô*ßUggg¸»»ãîÝ»P*;÷Oª0D_éþRȲdpíç':ÎKâþ¬;ìzÚ!;Ÿîܽ{w£è3§‹C“¶Â-¬/Ü÷µ–®žŒŒ ØÚÚÂËËËàëºsƒÏ4–4"íÕöõ¹·óæÍlܸQo}Ú LhÈËËÃàéé‰É“'ëUGWB —Ë‘››«uCôå~Í^ÇÿmÿNÎBþ€"оÝ™>sèÖÚjo×¢úJ5ĉáÐßA½¿¢¢R©AAA:Ç0Ú#䫨t·AÉï%(Þ¥9©’>÷vüøñðööÆ‘#GtzŽô>˜2а~ýz0 ƒyóæé4¹ 9]Ñg$‡¾úªâ«Pu¡ âb¸ŒuѪŒçsž(AÄwÅFÑçëë KKK³ø [k+ü™í={ÏònaˆåÞhŽ…ƒ"6³®Ž´WÒ /jëêÐçÞZXX`öìÙ`[¶l1Tf‡ðAÂSär96lØ@€ è]OWBô ê«/wÕýÞó[þZ÷ erÊ•åð‚ò¿Ñ.wugúD"‚‚‚P\\ŒêjÝóUBsm¤$ýZ¯[º1Œ Ô„ËHø¾ê‹Æ²F¤.Lm3\ß{ûÒK/6oÞ¬×"Ú LhØ¿? ñôÓOkí/ÕDWBô1Ðúè“eÉP²»––ð|¡ã|ÎÍQ½ÒúXø ìp¥ÐFŸ¹Fr4×&=!…<_—']`íÛòmËÐ1Ðüy0l‚mPz ÅÛZº:ô}öÂÂÂ0|øpdeeáÔ©SÆ©>Hø`ª@ƒ¡ÁA]ÑÇ@ë£/ÿÇ|€|_ñ…ÈVûi謁Í݃»ƒä„Ò½§·ÔFŸÊðuµn®­¹{£5¦pq¨Ù‹¹%i¯§µX.ËgO,\·nÁÛƒ>˜"ÐpëÖ-œ>}ÁÁÁ3fŒAuue ¤ùP»ºÆ:l¿¹oüõ&ü6=Öö@ÔQ˜ºk*Þ?ñ>ârã@D:ë#"õJÞsÛ£ŽÈÊÊ„b“$oï|Åmô™+P˜¸Ü8|xàCäï·ÌF†1Åc0á· xã¯7°ýævÔ5Ö™ÌÅ¡Ây¨3üÞôƒ¢B;óï¨]†<{S¦L——öíÛ§Îblþ׃„æÀLhPõ-Z¡Ð°ßÁ® „8::ÂÕÝiwÓàõ…j”5mιZx°âü <âó\Œ0& "¡v=áêKÕeÉàô¸lüµË‰­BÕƒŽ«cVJ¤ÊaåmÕnmÚ¯« ´’Qb{Òv|ÿ  ðÄí'0¦q Nö8‰U7p£ê`õ¥Õp°r€à&ë£7•€ eA(;\†òÃå(ÜRŸ9>={666xë­·ð¯ý +V¬0ÉìB>HhFòòòðÒK/aÀ€&½Ž± •••øå—_`mm9sæ\_WB*dxóÈ›(—ƒQ0Kå˜Þk:vLÙĉ¨x¿EÿW„ s/àûñߣW$$`Æ÷30æ×1(¬Ñ.—EñN¶×ëñ¼‡ÎU=è à x>ç 0hwˆ˜ mÚOeøTõ›’šBŒùu f웄ÄôñêƒÅ ‹/½õ*Þ¯@â‚D옲Ó{M‡\!GUQ`,9·•2ÃՄH|ßÕ!Ò§C–+3øÙ{ùå—áää„­[·êœ%Qþ׃„ ¢kÄqžzê©ÿ?kÖ,óÑ’˜˜@sçÎ5·­P2JÚru y~éIˆYFYÚ÷ǾË1 C§2NQïï{b@^_zÑÉŒ“—Q2çG„d÷d:k0v, øúAA@XXz÷ æÌ¾üøã + P*stt„««+²²²L–vtoò^Œùu Šj‹°à‘¸8ï"óz õwêÑÛ‡þ°t³lS®,ŸM€?qàDÌê;‹½OfcôÖÑ(®5lÕnM}ñCbHK‘±Öð é›o¾ ¬_¿ÞèÉüù !ÉËËÃÎ;±ÿ~ìÙ³’’¢¾Yª×m÷ÅÆÆê]¶õ¾¯¿þUUU˜9s& ®ÏØúšïK)MÁÃ1ãdæI„1a85ý~úÇOp°fg°]¾|Y«ú.ž¿ˆoF}ƒÍ7ƒÉg0}Ïtl:¶IcÙì_Yrá B5WTT ??8pÀÓ§ßÁ)«uÃ|ü1°qc Ž«Ã;@aa"²²€ôôX$%Õ!>ز%ï½<óL ‚‚êÌš•ˆ¸8ÀÛÛ2™ ÅÅÅFmgX{p-¦íž¦„Ác~ÀOÿˆä›ÉÈÉÉÁå_.C\Ǻj,«¦æáâïÇ|ó/G¨,§2O¡ï§}qîî9£>2F†ÈŸ#‘&LÃ…÷/àúÉëÕgooyóæ¡®®«W¯6Z›&&&"''Çàú®^½Šýû÷cåÊ•¨¬4ûHoˆÃ.ŽÚÚZZ¸p!ÐË/¿L DĽ×%%%dooOVVV”““cn9r4ý(9-w"Ä€&ïœL5 5êcqqq€¦Nªs½?^ù‘/S\N\‹cŒ‚¡óÞçI"”PCQƒÎu8NÈÂâ bû¾D‘`ÝÛ»]¥~ úë/¢[·ˆªªØ2J%QCQu5Qv6Ñ‘#D_M4oQß¾¤® ²¶žBèÛo/ÞìÕœÏ9OâebB hý•õmŽ_ê:I ¡Š³ËôÑG€6nܨÞW+¯¥÷¾HˆYjM?]ýÉx‚ï“ñï ’@BWG\%FiXƒdff’H$"ª®®6’BãÃ5ÛÂiÝÆnÄ„Ã}˜DDï¿ÿ> ×^{Í(õ©0–>"Öo¼úâjý—õgþûä¿Ûø2 õë×O/}+έ Ä€\¿p¥ÜÊ\õ~i¬”õm>©ý#'•­^MÔ¯p‚@0“¦N%Ú¶(/‡¡³®g)Ö*–5 ­ô5'+‹è»ïˆFŽ$Þ!l§ž=‰6m"’éâ&—ˉJKÙ_…ûäVæ’뮄Зç¿lSärÜe:m{šÎ8ž!¥\³OùÅ_$têÔ©û†¡oã¿UßËWÿ|•ºÿðµ‡R¦¤_B! $”·:Ïàúf̘AhåÊ•FPÇbÌïo ×‘ˆ¨¨¨ˆÄb1Y[[Ó½{÷Ì-G#r…œ^þãeu¯kÛmÏc†ìììÈÑÑQï Ñë‡_'Ä€†ý4ŒJÖpÞ}ÿ.ûe_Ûù—]&#Z¹’ÈÅ¥©‡ë뻉Ð;ï|Ôâܤç’H •þQª—V_|±š¿ÿrõ5½¼ˆ>ù„¨¤¤ÕÉõõDÇýßÿõïOäéI$°…D""__Rô„žxÇz}ûL×,;VFHèæ³7ÛÕÕ<0ª I¦„þð÷þïÿiv°t)à㌠|õpå •@ß¾€—PXˆev 8ãP†~À—/þôè¼ÿ>pë–úšùä·ø šÈÌÌ„……üüü48 п[œË9‡àFÑ ­>sgˆ"D辤;˜:)sRtZ¼5={öÄŒ3PTT„˜˜£èû_ò=h"JNN6¨ü½{÷ÈÆÆ†lmm©°Ðx½†êK)I¡°ïÂ1 ¾ëúRvEv§eþñº|ù²ÞúRJRH¼LLÂÿ éLâ’@B/´Û+—HØÎ¨ª÷:q"ÑíÛMÇgΜIèĉ-ÊÉre$„.F\ÔI_kT=¼1cƨ÷¥§½ñ‘‡m5½åT&p%ˆ±° úÇ?ˆÖ­#º{—Z;­ÏfÄ’ð¿B²ûÔ–îü{QïÞ-Þ']¸@»Âv‘ªÏ¬×¨©¶¶–PHHH§úëëé…=/b@öŸÙÓÁ”ƒZ}îŽHNN&¥\I—û]& $”óµa±•‚‚rtt$‘HDׯ_7Š>cµ4o À?ÿùO@ï¿ÿ¾¹¥´áXú1rþÜ™š´cU7h yë­·íܹӠëoNÜLˆMŸ5$PÊ‚”6ç$%M˜Ðd»}”(6¶m]O<ñ ôôô6Ç.õ¼Äº,͆Nª«« …‡‡·<ðǤpó ¨"Ú„94Ô÷.ýö[ w³Y£ŒB¿ %Ä eð.#ƒè‹/ˆºu#Hw’@Bñ~§Úx·nÝ"ôä“Ojõ†¡¥§—b@‚}uþ+£Œe®¾QM±–±tÚæ4U]©2¨®o¿ý–Ð!CŒ¢Í˜pͶðš 4üñÇ€LÖWßÚKkÕ¤N| ÓĆ5kÖúì³Ï ÒÇ0 =õëSôn¿wI ÿ^¬>vï;šB(d sPÑŽíÚ*êÞ½; õhžæ¤½•FHèÞú¶þ]ÚÏÝݬ­­I©T)D}ÔôËñ ”öW*=óLÓ®þýÙžs–Ÿ]Nˆûuœf$“mØ@ùž3éGüH©x­èôé6§ªž¯ hýˆˆ~¿õ;Ù.µ%Ā昫wð°yÛå¬Ì! $çG²|Ý'©hll¤>}úÚºu«Þõ´Ög xm¸ÒˆÕÕÕ@èСCæ–£F®Ó«¾JˆY}jE¿\ûEç:>LhÞ¼yëI.N¦Ž;é¤à$ådåPUk÷ÄbÖȹº}óMÇ#&I$‘¯¯¯ÆãeGØ`[Ò”$ƒ´öïߟP~Rј1¬@¢={ZœËöôU†úé§Ùá}y•yd·ÌŽ,?±¤;¥w:¼Ö­çn²ÁÍ éMMŸN”×Dýî»ï-_¾\çÏrùÞeòùÊG¬-­5,ˆÊ0 %ÏJ& $tåÑ+¤¨Ó;”®3²²²=þøã+êtÚú4u:KLcË^«.í7uêT@qÞެȞ=‰RÚºeˆX÷ÆöílÏ`ßBßc}Àï¯Ãë0 vxàË#¤¨ndÇ Þw}ÑòåD2-^¼Ø WSne.õû¡!ú](%—èæ³mÝvJ™’'º5í–A. ULáÍ7ßÔ»}¿»íÁ5Íâ€~) cccñÍ7ßÀÑÑß~û­ T5¡­¾ë…×ñè†G›‹~Þýpyþe ò¤×5»wï@ U~äÎô•eGW$ÜÁ¥†_Qls3g©©ÀçŸÎ¯  )‰Q{ ˆlEpz ŠJª.W餯9AìÌÄÌÂB`útàâE "Bã¹B!0mœ |ý5`÷Ð9¤‹·APã‹óKP[Ûþuªª¡(W .ª"{ :HIaGyÈåÀ½z!3>€þy ýýpvÎYL~h2ÒËÓ1pã@œÈ8¡uùÖm'´¢×¾^°°FñŽbä,Ó?ÝçŠ+àèèˆÕ«WãÄ í5u¤ïâ{Ð:SPP@ÞÞÞ€~ùEw÷)Ø•´K=[mÚîiT+7¼gáççGB¡äò¶ |´%.ŽhË ’@B}‚wb@‘«ú©ÇFkË–-[}øá‡íž“óë#ÍüO¦~boߦµöö€– ܾ3\ ¥‚z¯}˜õÛJ‘ÑÆ¬+»5™Ÿd’ÊþBÈš;wˆÆ#¨7@¨ô¢æ*Ú¢d”ôáÉY}ÿÑ÷—¾7¨¾êëÕtÆŽ™“¿9_ïz~ýõW@®®®”‘‘a&c`nÛÒ¾ ÝR*•JDGG£°°óçÏÇŒ3L¨Œ¥#} 1øHòžÛýêëñù¨ÏñÛäß ¶ÔnAÕŽ Ã0ê̺èKK¦NžÌ @Z¡+¾‚A~ƒRy›®ê–X½’JK‡©ÇCm9Z«û{ç0r$kØü×Y={:¬ž½1q#n–\à ¿AHÝý¦M €yó€~ý€£G[ž/=ÊŽ/Ï ÐÐ þütð 28p2„íU×´ÍÏ­ BËF.Ã/“~H(Â+‡_Á½£è°\{mgßÇ=vô€ÀB€;sï `S^º^xá,^¼ååå˜;™ åÁNï¾>þ%ä' F@î+ܵò§­†aè|76ׇ¼\‡^zºÚÿ{ë¹ç=ZëâÕ Õä¾Â1JÈoUpñ"ÑСMñ¿Ñ£‰®]#j¬h¤XQ,÷>ß¡·¸¸˜ÐÃ>>MÕnÝØ9蚺åZr6û,¹¯p'Ä€ÆnKõúéJö—P¬e,;‚æGýfÐÊår>|8 ^xÁ¬Cïø4ÑöW{Íš5X¾|9ðûï¿ÃÖÖÖÄÊX4é‹Ï‹Ç£Å¡ÔCw Ç¥y—0>l¼Q¯«í:}uuu(.Þz  6l€åËïç²=E×±.€(Ÿ(¼Ðç”Ö•bÝeíתӦ-ØYŠ Pq²¢…¾v©®&Lòó¹sxÕÕ€ÚðÕPZWŠèÞшòiZÄtÀàôi`ß>¶S|ü8Û›^ú¬¤$¸ŒqA}}}»õª—¹8õOO›¦Ö‰~ý€cÇ´ÖØœ!CpiÞ%ôô艣wbÀƈϋ×xngß ÷¸£×Þ^X º0÷ÖÝÓY¥¥%víÚlÛ¶M§˜?“ƒ˜c&áÖ­[ Y[[“¤õÀWÓ\_}c=½{ì]þWHˆ=ýÛÓ$­×b„l۶лï¾Ûî9R)Ñ¢EÉdg×4aÉ’¦‘W\! $Ts»)[^JI ÿ+$-²èuDpp0èô­¥h{;!f^ÓÈ‹vï/Ã=÷+|Âõ¬OOO²´´dÇBwB­¼–<¿ô$AŒ Ãr9Ñš5DîîDo#…$ÐêI…tåJûe¶oß~?÷È;M;/\ züñ¦nùرDzÎÈ«”UÒÓ¿=Mˆ ÿ+¤÷Ž¿Gõ-'úh;S¯ôÏR:m}š|’©Wö»+W®µµ5‰D"úõ×_µ*ÃÏ$ä ]݈¿ÿþ;‰D"‰Dtð áÓgõåBîŠ\©vilJÜdÒ×Á .š2eJ›c55ìH0U2#++¢Å‹‰ŠŠšÎ‘—ËI"d'6´Ö½'ºÝ o­Q(diiIÞÞÞžÛPÜÀN)¾ÐùüæV|` Qy¹z÷€ååužÔiÕ…UêÀ¬6H¥ vº@'!!'4§'Ñ·ß²éP[³lÙ2@kÖ¬iy€aØqÙ¡¡¬~€è¥—Ø™?:Â0 mLØHŽËÙîšHŠÏ×¹"v,º*pxc ÝÜL÷Ù±c‰D"@«V­ÒK‡!ðÚtÕLB†aèË/¿$@@@ë_ucsþâyzïø{ê^óØ­c)§Âôù¦Õ>ЇVï»wè?ÿ!õXf‘ˆèÙgHSúëâÝÅ$„’ç´íåÜ.¾M‚y~éÙ鈓ÜÜ\@=ö˜Vº/õ¹Ô"¿…Æû{î‘…;»Õñçîû¡Ï;×áuêäuäý•7!”T¤Ý™ÚvLx\ï+4s&@‘³3Ñ»ïR‹vœ;w. Ã‡k®¬¡Í•êæÆÞ ±˜ÔìÇF[r*rhìÖ±-zÓuò:gêÕܪ¡‹‘ÙÉ  T•¨û´ðC‡‘­­­:}BG~&!éŠF”Ëå´páB@¶¶¶´wï^“_³5²F­¹¸F=Ìá3Ú°¡Ë‚( ý½=9::Ò™3 =ÿ¾­ëå}&!o ©)ÐPYYI¯½ö @Æ £ìì®3еòZúéêOòmûåˆMÜ>‘öžéºÞ{m-ÑÞ½D/¾HääDLºŸáímÞL¤)F§)PS—^GHèr¿ŽÓ•>ÿûó„Ъ íûU¾Øµk×jõ+[ck¡ïƒXÃÕ·¯æCDýõ¯Ê¾îò:u†@mQÊ”tZ|šÎØŸ!e€lÝvµµD?þH)'@H€/ÙØM™B´këû2¢Ï?'òók2Ô=ĦF-+ÓZob~" ÿj¸úY ù6„~ºú“N“ ª¯WÓÕaWI ›+ejÕeh?<5''G=O Ð믿NUUMn>HÈALуްaùúúrqq¡M›L€S¡d”›KsöÏQ¿ZªüÌó ›=¦-ååD¿üB4iRËΗµ5QD›oä·ß¶ëTgÞ÷y$„Òßk›´9IEI$ˆ÷WÞT'×üÅ]°` ?þøCëë' dóEÔÜjfÑd?˜“QZZ»e“““ 5JãñEƒúí¦ù¸çÎ(?YÎÐ&ÞèôÜ´´»€<=‡’ƒCÓ=‹‰žžýí´ó(—íÜI4hPS"»¾×wß±‹4jA|n<Ù:Fýl:|æ@/x‰b3cµÊÈ0 í,¢8¿8ÖP ÙdÊO•kõc†6mÚ¤vyøùùÑÆM2á2Й™™´iÓ&úöÛoé´†TŠúb¬FÌÌ̤wß}—ï¿Æƒ¢££©¨ùP P*èʽ+´äÔ꾪»úÁ·]jKÑ{¢é\vËà”±!ååìâªÌ~WU~eÜOÜ6mû½®ª"Z»v-;õyÙ²vëÓ¤ïæ³l¦¶ò¿Öþs×? 1 o.|£ñøØ±c ݼÙþ²P­Q-xš·:Õw÷®ê•€hÿþËÖÕÕÐ~’ü ÔCu!ý½ô6K~µwo?NhæÌ™T_ÏJž>ÔÃÖo=hër:t¨“ØàÅ‹ì "/¯– DE}ú)ë ×0¬°¹¾³Ùgiúîéd³ÔFýÌv_Õ–œZBWî]étú¾¢FA™ŸdÒ9Ïsêõ¥ž—(÷Û\ª»Û¹±-**¢éÓ§«¿«®®®4sæÌv—Ó‡Æ@¿þúëôÞ{ïÑþýûéèÑ£´jÕ*š9s&%%–’HÿFd†®_¿N+V¬ Q£F‘P($daaAÓ¦M£¸8ý2¿uF£²‘.æ]¤çVЄmÔCšTÛ°Ÿ†Ñ¦ÄMT)«4úµ««‰®^%Z¿žu¹FF¶ü~Dl^æ?ÿl›òS›×ýÖ0 u:K§mN“²¾óÖ„ÏW>mÆáEFF€¯¶¡ê­Þœt“ue<ü0ûaµ\TÁÛÛ›,--IÑjÆž\!§ o‚1Ðù çr_vU’ºôÎÑúõë ÅÄÄ´Ø_WG´{7;|Ûݽå}ˆúô!zõU¢Í›‰ÎŸ×°–¢BÁx÷ݦaz͇gíÜÉ.0 ¡‡[)«¤M‰›hØOÃZ<ÇNËh¶ ´âÜ º˜w‘•?›R¦¤Â­…ê1òª-><žRßH¥ÒÃ¥¤¨mߨÇÅÅÑ´iÓÈ‚P(¤#FÐÒ¥K)..Π€"× ´€ˆ®èkì 0uuu‹Ûæƒho¿¦óæÍ›GGG¸¸¸`ùòåêc³gÏÆ–-[:,/—Ë‘––†äädܾ}·o߯™3gPPД3ÀËË .ÄÌ™3¢ý‡ki½©e©ìVžÚôï²TÔ56Íx²µ°Å`ÿÁ4 Ó{OG s`‡õvÔfJ%PZ ddwï¶ÝŠŠÚ–  bÿöëˆDš¯ššŠˆˆŒ1§NÒJ_å…J\|.c\Ð÷¨vÖÔ]S±'y¾{ê;¼þØëêýD;;;ØØØ ¼\󚃚`d Î9ŸƒÐVˆ~Ïl‚ÝÖ-Àðáìt> ‹NË4ñññÈÉÉ¿¿¿zÿ–k[0çÀ<úþzá/­õÈ åˆó‰ƒmˆ-KL½¿½{ûÁàóÏ?ÇÏ?ÿŒ™3gj¬“ˆM!rö,pæ ûWSÚWWv&cDû7< <Ü %·aý×~àÈ 1h53¯ÎÅâGaš€€–›¯/²êò±ýævœÌ<‰¸Ü8Ô+šfFŠ-Åw oÚ\›þíbËÎ,­ºT…’=%(?RŽÚMéÿ„ÖBØõ²ƒ8RÜb³ µ…ІŸŸ5kÖ`óæÍ(jö ÛÛÛã‰'žÀðáà  ÁÞÞ¾Óû¤méJ:RõD,cëÖ­êdB«W¯Æë¯¿®•q€]»vaÒ¤Ixî¹ç°hÑ"äää PXXˆ½{÷¢¼¼eeeê¿eåe(++Caa!2îf@©T¶¨S$¡ß£`ð°!xlèãïùHħÞDž¢ FÉnʦ¿JF‰jy *¤ÊÊQÑ E…¬ 娔KQÑPŽ*¹Ò†RT5Vhú(°³pÄcî£ÑÏe8ú¹ C„ã°Xa€œ@Ã~Ù†ÝjkŠ v“JŒŒ…‘ê}Í·ª*—ÀÚ¡ÐPöËØ¯kŒd×4ÕmÒŽæää 22RýÿÒã÷§ww°8lk>zâ#ìIÞƒ/Î,€µ…5 ´´õõõˆh'åg{m„p|ܧ*²5øø;vheœ 00ñññÈÊÊRh£À²³Ë?ñ±NzT ںܟò®¢uÛ©PµwGiFvqÝÈH`þ|U}À¹s캴wî°)]ÓÒ€øxvkU€ž°³ë w÷Ã+R‡mRÅ\AÚË.¿iÁUôj'( èææƒ7|üñš‹äŽè!Cœ‹çì p ù¸Vx × ¯µ)ëléwk¸Z9Ã9Ä ®ï8£[­/B’ÃàsÝŽW]PÀ :¡ºd¡¿"/DÎ"D £0å™)¸+¿‹„’\ʹ„Ké—pøða>|¸EQ77"°{ ºt‡«›+\Ý\áìæ gg„……µÛÖæÂd¤R)^}õUÔ××côèÑ:•ÍËËÃÈ‘#°F"77Wm =Š£­ÓƒµÂÁÂîöîpµq…³ØNb'8;8Ch-DíåJìOÚr‡r”Û7muVuì3«Ör|+œà]æ¯2'x–9Á©ÌVe×ú¢®(€3nC)R … *àŒØ£ó‹¶ý€“н;ÛC f qóÍÏOk{Ôþç²¶†ŸŸrss!—ËaeeÕV]+#=Æh—Ñ.mÎm¾Þ}11b"Þ9ˆ-×¶`aÿ…´ËÁÑ.Õ£âà!ìzE§_¦ÀÀ@lê¡C‡v$í@zy:ž ~Rç<Ûª {­WïÖdœ¦\ ºæ`SK7‡a€Ü\ÖX«ŒvVûæ¥Ú²³ìl \B/½ÌXBŽÜArà\ §i£ø•æÁ®4_}­Ñ÷7€u—Ø©nMÛû³œ«ÞX U—ß ÀH#·7”  4þ¥þê¿Þ9Þ`r4¢îpG5ªá OŒ»ÿ_#‘‚ÜÂ- …(dÿJ ‘ M@Âõm7Ümº?®S{›“èáÇãðáð´´Ä¹þ\ IDATˆ#t*ëïïììl <ÙÙÙ-^3]áŠ0„Áv°…-¢…zÔ#pƒJQŠ>Š>È©Ég'l`ƒT¤"áÈA<ÑrßœÁ €HÜ´L@7;G¤[܆Хµ.YÈV¤ Ä®r)ÌÞ @I%0Êj^2À…Q"•ˆB%RH´»¯D€µ ÎY9ÃÓµ¬\aíÛL÷^Ȱ‘!dÀh¤ÜÙ‹#ÆÁÛ[Œ¼¼D …{÷R±XŒÄÄDDEE!%%MûÛîÓt^gûBBB››‹ììl(•Ê6çíÙ³ãÆƒX,Æ¥3—P_·BØm¯ûO—â âÓ½ŸbZÄ4898!66ûÚªrhU_C²w.ð~÷ ÀËQQlÛk©EtßçséÒ%L™2Ö6ÖX²m fùÎÒI‹­-âÇ#Ä"…¾…׉ÕçìÛfë²iii°²²‚···Þ÷­ù¾úú<þxFÖ|Þ¥K‰ ŠÂ¥K)°² @M ‰¨­1lmG€aĸ•“ˆ{ÎQØ_ÄžÇ4Z£>ï|Dþ¨–&Á…CÜØˆ²ê›„jäð«Á¥R;Y!°B²>°‚…ƒ›¢RxÚ[!]P + ÑV4e-ìÜÈUÊ tÌYgàº}#Ò» PU£„­­laÚ,•¶°%{¸Ý`Ç8¢¢BŽî–¨©–#€¼.èŽüúBt·ìŽbY1¬`ZEÒdwá °GQc1j©•L%ª™TVVêgìL„É|аhÑ"¬Zµ R©o¾ù&~ÿýw­ËÖÕÕaþüùpvv†ƒƒ>ÿüsõ±Ù³gã§?‘3 9µý+S‚‘)A J0 JL ¦Qÿ?SÏ@QÞyÑý­X¡Þ¥ŒF=Ö^BØGˆàò˜܇[ÀÆ M> M›RÉú*¤RvSù+Úûw{YÍìíY?Ed$0x00lЫ»œG1wî\lÞ¼GŽÁرc;<·ô`)’þ‘¯½ðÐÖ‡t¾Ö¸mãp$ý6OÜŒ9ýæ`ÕªUxûí·ñÕW_áwÞÑ®†&Múç,þYÚ`HÅ­´o³cÇŽaìØ±˜3g6oÞŒI;0}Ït ë> ±³cuúLÕ ÕHèŸçaÎx8öáNϯªª‚““"##‘œœ¬Óµx ãñAÀ?ü°µµÅŽ;t*+‹±mÛ¶v ,YˆØ.©4Ô0rò"9êÓêQs­5WÙ­6¹ E ÊÎ4"ýKÀ>Ê“=á>ÙvÙ.¢¬Œuª6•ó0- u×®A|íëCXŸÆÐ¡¬±6 èÛ·ý(Ÿè,íhóöÓǽќžøGÒà³sŸaFßú¹8¾ø8t‚ðp8{àÞ‘"T]¬‚óP-ÖÖºOsC >=ó)àãaºùž&÷Fkÿ3 9H¨¯{ÃhÔ7\×g(&3Ћ-ÂàÁƒ1pà@ØÚÚ"55þù'¢££Ñ¿S]V/šj„VBØøÛÀÆß.#›¾PÊz%jkPz°¥{KQ“XƒšÄd.É„¸‡þoûÃk†—N½´¸¹±ÛÀ-÷!çüyDÖ׳¡úÓ§Ùuò`7pqa—/yñE`È£÷®;3ÐÍÛ¯üø}cô¤~z°ÿ`Œ ‰S™§°3i§îúäI`É@,öìË g\=r'+t2ЪxGVVö&ïÅí’ÛxÜÿqŒÔÍU´ï4 Õy ƒ‚t¾–±i/ˆÉ¸®ÏPLf CBB`aaõë×£¶¶½{÷Æ’%Kàêª}d¿«Ðæ‹lEpzÜ N;!øó`ÔݪCÉÞÖX_¯Áyw“ÿÿó‡Ï<ˆìŒÔ£9dûoU µ¾ž5Ò*ƒ}î›%à 0xá`ÆŒv;ÕÕÄ»wïj<®j?Y¶ õ©õ°ëeënÖz_ï£'>©ÌSXvvl²mhi ïÝcze`ýz W/835@¤§¤Œ ÔZƒ ºuë†ÜÜ\|"ùÛ{è° (ª¨Š«‚¥‡%ìn;ÌKß]××õŠÉ™‰«V­Bíý¥oÞ¼ÉIã è¾®™@ €]/;~ˆþ×ú#êBÜ&º¡!¯é‹Ó‚M "Óè³µeÇô~ü1Ûc,,~ü‘u{deË–±>ë€5kô^ÇNEg=h•>Õð:}Ý*†u†!C\šŒ´Œ4ØÚÚÂÃããB20e PR¼ò û#À®—2œ3P_e­²ã:Z…B›é7ñ˜ïc¬ÛH$¨T€×1®ÛwMÏžÊÅÁ…4××üãº>ƒ!Í$¬ªª¢•+WRVV–z3\›í£¢úF5ÝŠ¾E;3êêÈ«ZÍ3*ìÔÝðð¦b®®ì>©~+¯0 CäààÐaçØ“eiŸ§=ަ%|ÈN鈈èL ѬYìg4¨ÍtHµ®#ºéŠŽŽf§φÞë=ÞyùI ¡‚_ ´.3nÜ8@×®ýíÒäüíášm1YÚÁÁo¿ý6ºwï®Þ¸Š±Ö5³ïmÛz *. v=íPqª—{_FîÊ\BÿÞ´Nú‚þ¿½3ª¼÷3“LBÙC 0Y€YÔ bmY*5z±|Ôê­è¯KùÒV\ZZ«×«ÔëBQ®ì-„R©¶¬*"í­ $„% YH =$“mÞ߇²ÎÌ™œwâû|>ùgæÌ9OÞ3ç›7ßï»$j9Øìløê+-ÕQUË—kƒ¦—-Ó¾º€Åb!))‰ššÊÊÊ:õ-‚Š+°Xûn˜Kç’nb\À8‚£{(ýçÂ{ïÁ°að§?A`ûôÊ€µ4IÅ'.94‡j;^'@ÚÈ4—>«ÓšîbÒNg÷V¦´ì{þÉîç)jÓX´Bƒ‘„N åšôkHøu¢Yóx™·dÒ\Ùý÷†úY,pÝuðûßk³~XË]¿ð‚¨—.…6ÓÞ{BOst–‡.(( 6£–æòfÂnÃ/Øóü»ÅbᎸ;(´v.Ú³Gû] €mÛ`èЇԌÒf£U~ÚùLÏÎBðUÝW\?èz—sÏõ§êqä:4qC:NðŽ÷Öét’——GTT¡¡¡._ÓhŒ~6ŒFv?OQï¬V~•Àµ×2pü@*öT>-úÜ®wqöš_r²V4ËÉ%K´"ÚªUÚôÃ_ýªÃú ŸB+v–‡NMMm½áÊôiŠà‚í»r:™9zêÜ}·öûü×A£ƒ&Ìž@àˆ@jÒkh*oêÕµwçìæ4§¨é<¸öDw£7t®¼·%%%444HQ ù‹p²ûyŠ Ðx·Ð0ðªLúÛ$"o‰¤.«ŽôJ§êo®ÍV2Ì/>^Kœ> O<¡½öÜsZAqóf-cÝÝ ÓÓÓ=ÿÜ­½£0xþóçÛ÷¢««á‡?Ô&ù<ñDkQ°3222´!“*÷õÜ‹Bðì¾gáÒ¨¼Ó§O»åßÝøg+ï­Lc Aþ"œì~ž¢40yòd¯žß?ÔŸñŽgøÏ†ÓTÖÄ¡Y‡8·±“eæºÀp¿!Càå—µ<õwj 5Ü}7̘™™~¤»=!eU¯ÂecФžW ë-z€NLHäÿ ÿOó.­¦×Ò¢åÖƒ›o†6+vÆäÉ“‰˜¥ÉÊOzПä}Â?ŠþÁØä±X,·´³ÑIåÞJüjÃ3»sk‹Lc Áûφ§Èîç)*@Ó7…‹Ÿ…‘¿Éè߆Ⱥ7‹ó[Ï÷ê³^ó³ÛaËøôSmúø¾}Ú²w‹i3ÛÐ]€>³ã ¢IqSD§CÉÜEŸ¤²4M›â½t÷RZš›à¡‡àõu37nìqe]]á3µîpŧÝ ›Í,Ý­]ï׳~M\\EEE47»V?¨þ¿jZj[ŸÞíä¥+ï­Lc Aþ"œì~ž¢4}[hˆ[ǘ c@À±£|gÏk{ÝoÆ ÈÈ€7ÞЖÈ[½Z ~«WÃ¥Àd·Û±Z­ m=@dš±ãÜóóóñóóã‘épCü >w˜µÏ€õëµÛ·Cxϳ Œ $85˜º¬:ŠºËÈߎÄYïäÈ?é¸0yúÔ/:~÷;mwoÔrÒ3fÀܹ$ Š¢5õP—]Gf~&!׆ãÞh‡Î(**B¡Ÿ‚Iÿþ„ò`X±r–ÖÃï%zûéyè®ÆC¯ølåõåüÇ€ÃAùör8ˆJë9¹Bk€þøcm™U»è¿îåùï¿€S8Y²sI¯×:ÑÛÏ©2i(hÀ‘{ù¡‚Gw<ª-+:ãy¢ƒ£[ßÓS îèè9Ñ=ÙþÞêé #öÇ4 Ù‹p²ûyŠ Ð˜[h°X,Œ|m$¡ÓB©ùª†“KNv8ÆôBÈ€ðä“$½þ:9 ðä“´¤L¤ò³rÊÃ˹.ÄÐKæïÐ6dµ_¸  ¥;xÆgÁµ 3ŽÏó?gÓÑÞ­1Þ¶ýô%dÛŽæØttû ö3>f|ëV[:zZ/ÞõDËÅ*?©Ä?ÌŸÐzž ØÖM/ÀÊR  ¾{= »Ÿ§¨ù…k€•«¶\EÀÐJÞ)¡äÝöS°ÍöÓIž4 €ÜY³à¶Û¨(ˆB´X˜èWŠeÛŸ ©w³ôº¥¨x€üÍ›1oüå/ÚZÙ€¿ÕŸ×oÖþP,Ú¾ˆÓ•§{ê}þùJ7½-S€–å»×²ûyŠ ÐÈSh¿1œäW“q68ùæŽoZ×Å/22’ÐÐPrssq:”  |oà ¸õVm]êçžÓõÔ©Úì>Ò†ì]Is³6ð½÷´F|¼¶“ðË_’?|8pyg“+yiÖKL‹ŸÆ×Å_óøžÇ»õnÛ~~ýJÓù&ž[ûŠpCü ¼8«ëÙˆ‰‰‰8NŠzøÃ#œ‚²¿–añ³ôzÈa[7´,ß½®ÝÏST€F®BðG‡óã 8ù¨––ÅO_v´¶¶–‚¿ÐPØ@Èu!4Ï¡¥!rsá—¿ÔV”ûòKxå¸í6mŰ0m_\œ¶ëKH\uÌŸ»vALŒ¶*Ýñã8W®¤ðÌÜå~s6?›ïÜÌààÁ¼ùÕ›¬þzu—ÞW¶Ÿžæ8þÑqæý;ßÇæ×õ¨‰Þæ¡kÖÐx¶‘ÐB±EönF[7sв|÷ºBv?OQ¹ ‹…Ñ«G8<Òÿ-åüÏKå§÷îm>@TZÔe¿„øÍo´ljÚ sÿú¯ÚªyV«¶ëÉ… Ÿ¯§O‡ŸýL›XX¨ô#8wî=®!>,tïØH€_‹¶/âù}Ïw:²£mû !øs¤¶—ãµyײñŽ Öíuz;ÔNOoôfôÆ•n---œ>}šÁƒblÁÕdúîu†ì~ž"u€^¼x1)))œ;×û……ÜA¶Bƒ¸?)ÿ­í'xbÁ ’"äéQé½»¬½YDÞÙ±ý,5 |PKaäähiŽÚZhlÔ–-/‡½{á·¿…´4m&ã%\Ù(vVÒ,vÌÛAH@+>[Áâ‹©kjß«ÒýêšêX¼c1_xœ[S‹§2sÄ̯Ñë­þçÞ9ÔÝô·Lé ïÙ¸Ùý›ÿƒƒ³úëÕØ_³³ò󕜮›‘Èò±ËÉ|0“E×-b|Ëx®~=ã[Æó“«ÂÉGO²4a)‰‰”OÔf@–n,åàÁƒÝ^#22???Nœ8Ñåq6ÐfTþs”KÎuuudgg“ €ß¥!…2|ÿÚúÉàâ-¿ŒŒ ¶mÛÆ«¯¾JU•k›ixá¥]½à¹çž)))bþüùâÈ‘#­¯½ónVV–¡ç3šÝínÝ%ÜÙÒõ®Ú}A}y½°bƒ-ƒEs]³Âøö»õÖ[ 222 9_W~§{Ù+ª¾ªêñv»]X,á¸bÇp!„h,kû÷‰ýaûEKc‹[nwÝu—Äþýû]ú¼·‘ýÙ0Úï[³«·,_¾œììlÖ­[Ǹqã¼vÙ ³ÞœÅÀqÚ.áÅ«‹Mu©Þ]M 1\h²hã´n?=ÅÑÕhWéÊ/æÇÚž‡¥K{Ò~¤BëºÐ99†µŸ¾ZÜèÑ£ 9ŸNoý, cþg ~¡~¼XÀÙõgÛ½?0} çlçH~Ù˜¯þŸ‚¬=h_6| ‘¿ÐГŸÅª¥:üú‘ÿB>5é=/Bß ^, ©¬‰¡ó‡2`Ä€vïµÍAÕ~'Oj{0݃vÅ/()H› äo!ûlŽÍ;FñÛŽã(ͯ5P=ªš äÞ/Êßú2£²h_6| ‘¿Ðп ¤ ’^NB4_ÕÑàYªÃQà èµ"¬AVŸKìð~||<~~~† ½ ]õ‹žÍÕ;¯Æ?ŸÒÿ-åÄ‚\øÓââã°ùÛ(,7® ûÍ7ßò¦8úóá˨ü…†ÞúÅ-ˆ#|f8^äÔÏNy´MVÞ3y8œÄ?Oà°Ž£ l6#FŒàÌ™3† óV€vçþFÌŠ`ê驌ùŸ1Ø—Ùó‡1Lýf*#ì#8{ö,õõƬ(XZªÍ^”µÝ_ž _Ehä/4ôÖÏbÕ&°  xM1E«Ü[P©&½†s8‡-ÆFüñ]§÷ú¶oßîÖu®äĉ¶´Ž»÷×?ÔŸ!÷!ñùD†Ì‚ˆÿå±Ð—Æk{‚Óé$''‡ˆˆÖV5šþòlø**@#¡Á¿ñ÷Ñ8¬AVržÈáüŸ:Ÿ×Í5Íd? åEŸMÄ?¤ëm+õmÄøÝÊÊJ.\¸@rrrë¶OFaäýííß½¡  €††©{ýéÙðET€FþBƒ«~¡×…2öÇuoeÛËzõ9Ñ"Ⱥ'‹‹™‰ø~±u¿Æ„þo¹^èòo¥7ÀØûÛÝÂý®rìØ1ÆŽëñ¹¼E{6|  ‘¿ÐàŽ_ôÜhFþçHœõNŽÌ9™·Îôø™Ü§´]®ƒSƒ¹jËU=NaÖ{Й™™.û]‰7´‘÷·«…ûÝA/Ê ûã³áK¨ü…wý†?:œ±ÇbµY9¹ø$'œ ñ\c‡ãœMNržÊ¡ðÕBü#ýÿÑxüûNmè躲²ûÝHzƒ7´‘÷×ȇ/ô ûë³á+¨ü…Oübþ%† ŸNÀm£øíb¾°ÁñGŽS¾§\Û™å"\}€Â— ñ õcÜãÙ»1¾z€>zô¨Û~:ú$oh#ïï·-@÷çgÃè¹›d%%%<ýôÓRWWǻヒÍfóʵd/4xê6-Œk_KѪ"Šß.¦dm %kKÚþ½pRÖ¥”Øû „‡‡SRR‚£u)ô´Ñ³ÁØûK@@€ÇZÁ±cÇ4hññ]”1›þþlÈŽ´=èØØXÖ­[Çš5kˆŽŽæøñã^»–ì…#üãI~%™ë ¯'yU2Cçeð3âéLþb2?›èRpÖINN¦¾¾žsçιí&„àäÉ“çöyºÂÈûkµZ±Ûí/³ZTTDmm-£G–n£Ø¶|ž ™‘"@çåå‘––ÖîgÆ dddP]]͸qã¼v}Ù Fúù‡ûÿóxR±"ÿ"IDAT×¥rÕæ«Hz!‰Ð)¡nŸ¯í¢IîRVVFee%#GŽ4t;£ï¯i=½aô˜o£ù6=2"E€NLLdÇŽí~æÍ›ÇÞ½{yçwX³fM»ã‹ŠŠxÿý÷Ù¶m[·n´¡^ú_S=/ÕÛ×·?Û¯ÉìweÚóé£@¢££}¢ýÂÃÃ-@»{>=@_ýõÒÜËÎ^KMM•ÆÅ[~lÛ¶W_}•ªª*¤BqHHÈ©S§DTT”X°`X°`ÈÉÉi}ïþûï7ôZ4ô|F#³ßïÿ{ˆ¥K—º}Žõë× @<õÔSš]Æèö{á… Þzë-·ÏñÐC @¼öÚkšÌß=!Œ÷3:¶xŠ´EÂääd.\è|g £‘½Ð ³ßĉ8tèÛçðfŒo?#&«è=è9sæ¡ä5dþîü~ž"EŠÃld/4Èì—ššŠÍfãðáÃn/ÎäÍ1Ð`|ûy:YE\ÁÄàÁƒ 43™¿{ ¿Ÿ§¨ü…™ýl6£FâÂ… »u½7™’’b¤Z+F·Ÿ>ÅÝÝ‘EgÏž¥²²’ÔÔTΜéy†§™ÈüÝùýÿüs.^¼Øíg8x?ÿÜÖÏèþ_ýu·Ç577óõ×_Òno_¹·²"»Ÿ§¨ü…_ñóóó㦛n¢±±‘}ûöuû™?þ€ï~÷»}æç tÿO>ù¤Ûã233©««cÊ”)íR:¾roeEv?OQù ¾ä×›4ÇùóçIOO'!!‘#Gö©ŸÑŒ5 »ÝNzz:çÏŸïò¸Î „Þv3åg.*@#¡Á—ü~ðƒ°k×®.×{ϳgÏöê Bo¶ŸÅbaöìÙ!ºíEë…Ón¸¡ÏÜŒ@ù™‹ ÐÈ_hð%¿¸¸8Æω'ÈÍÍíôøÝ»wZ€îk?o ÿúïu%µµµìܹ“ÐÐÐÖ‘.}åæ)ÊÏ\T€FþBƒ¯ùéiŽÎzÑ---ìÚµ «ÕÊÌ™3Mñ3šY³faµZÙ¹s'---Þß¾};‡ƒ9sæاnž¢üÌEÊíp8øÉO~‚ ˜7o ^½žì…_óë.½k×.JJJ˜9sfëlº¾ö3šˆˆfΜIIII§½è­[·pÇwô¹›§(?“B³xñbqüøñv¯ÝÿýæÈ(z…ÃáAAAâüùóíÞ›;w®Äûï¿o’wØ´i“Äí·ßÞîõóçÏ‹àà`,.^¼h’¢·È[LïAçåå‘––ÖîgÆ =z”û'Oz½Ò/{¡Á×üyਯ¯gÕªU­¯—””ðÑGÍøCÓü¼Áܹs‰ŠŠâÃ?äìÙ³­¯¿úê«ÔÕÕñàƒlŠ›'(?“’÷ _zé%±}ûöv¯Íš5KlÚ´I|ðÁâü£Bˆ¬¬¬ÖÊÁƒÕk&¿¶wï^a³ÙÄ AƒÄž={„Óé7ß|³Äã?nºŸ7^[²d‰ÄìÙ³…ÓéûÛßÄÀE@@€Ø±c‡é~êµÎ_KOO|ðxå•WÄܹs…LH srrÄ’%KÄâÅ‹Å=÷Ü#ÊËËÛ½oô¿!²ÿëé«~‹/€;v¬øéO*a·ÛEee¥~FSQQ!ìv»ÄOúS1vìXˆÅ‹›îæ.ß6?ÙRRèž0º³²² =ŸÑøª_mm­HKK€„¿¿¿Ø¿Ûõmûíß¿_øûû·þÎiii¢¶¶V 7wø¶ùÉ -BˆCÀ“2,n1þ|Ö¯_o¶†¢455±víZ·Þz+)))f+yãÇó׿þ•ððÃc³ÙÌVRôÙb‹éEB½ÐàË~6›… òØc™œûºýRRRxì±ÇX¸paÁÙ—ï­ Èîç)*@#ÿl$åç2ûÉìÊÏlT€FþÙHÊÏ3dö“Ù ”ŸÙ¨ü³‘”ŸgÈì'³(?³Qù—,T~ž!³ŸÌn üÌFhä/4(?ÏÙOf7P~f£4ò”ŸgÈì'³(?³Qù ÊÏ3dö“Ù ”ŸÙ¨ü…åç2ûÉìÊÏlT€FþBƒòó ™ýdvåg6*@#¡Aùy†Ì~2»ò3 ‘¿Ð üù„M›6ÑÜÜLrr2Ë–-3[©ÍÍÍÌ™3‡éÓ§óÔSO™­Ó!Ï<ó ÄÆÆ²bÅ ³•¼‚´E¾äìÙ³¬_¿ž€€¬VkkúDú²`ê*±±±¬[·Ž5kÖÍñãÇÍV`óæÍÌ;—5kÖPQQ!ÝxÙY³f±víZÖ­[ÇgŸ}f¶N§¼òÊ+ÜqÇfktÊÖ­[9yò$~~~DDD˜­ã5L/ö5%¿óï0`ÀÞxã 6lØÀ† ˜?¾n}]0íŽÎüî½÷^æÍ›GFFÕÕÕŒ7Î$»ö1sæLìv;………Œ1Âd«Ž¬[·ŽÛn»ÍlìÛ·èèhFEYY™Ù:8~ü8×\s ¿øÅ/xä‘GÈËË#11Ñl-ÃùÖèÄÄÄi‚‚‚Ž;@TTYYYf¨uê¶e˪««ùùÏNvv6»wïnW05Û`ïÞ½lÞ¼™5kÖ˜`Õ9ñññäçç3mÚ4òóó‰7[©«V­"00%K–˜­ÒÝ»wSWWÇ®]»8{ö,wÞy'ÉÉÉfkµÃá´g¶²²Òd#ï rЗxæ™g¨¬¬¤¬¬Œ·ÞzKº4ÈY0ÍÉÉaÊ”)üèG?à‰'ž ))Éd+-ýðÃNHH/½ô’ÙJíøÃþÀ³Ï>Ë÷¿ÿ}üüüxóÍ7ÍVê”}ûöñå—_òä“Oš­ÒŽúúz~øa"##innfõêÕf+y  …BRT‘P¡P($Eh…B¡ ý’?þ˜+Vpúôiî¾ûn„f+).£´¢_¢ßî»ï>Þzë-,‹ÙJ …˨­è·œ9s†°°°~¿ë†¢ÿ¢´¢_òÎ;ï0uêTÖ¯_Ïc=Fss³ÙJ …˨av …B!)ª­P(’¢´B¡PHŠ Ð …B!)*@+ …¤¨­P(’¢´B¡PHŠ Ð …B!)*@+ …¤¨­P(’¢´B¡PHŠ Ð …B!)*@+ …¤ü€ Àp¾31{IEND®B`‚mpmath-1.0.0/doc/source/plots/pcfd.py000066400000000000000000000003411316273626600175040ustar00rootroot00000000000000# Parabolic cylinder function D_n(x) on the real line for n=0,1,2,3,4 d0 = lambda x: pcfd(0,x) d1 = lambda x: pcfd(1,x) d2 = lambda x: pcfd(2,x) d3 = lambda x: pcfd(3,x) d4 = lambda x: pcfd(4,x) plot([d0,d1,d2,d3,d4],[-7,7]) mpmath-1.0.0/doc/source/plots/spherharm40.png000066400000000000000000000561261316273626600210750ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœì½y˜åyîýë}™ÑÌhE»Äb#ÄŽÁà fplˆñ–`;زã%ÇK‚ŸØ&Äþ²8$ÆÇ8Â’ä‹c̱!`6m€„@²F 횙޷úþxêéªiféî饪§îëêkzz©z«ºê®»î÷Y|†a<œˆìä«qû^c„êàt›ÑèÈŒjѬLB==Eäa,ÔÓa2†þyÝ&è`2™,Oª¸…BL&ƒaÃÈ_=ÈÉvryx+ÆKbª¥1ÂdýóºÅ¨ŒÌPK£]ciJ¥étŸÏG<§X,–—m¿¥UeÖŒ¿7iäa<ŒU@Ê^ß¼Cÿ<‚n!F+šßŽ  F¸†aÉd(‹Äb±ò]€Ú5º=iB¡Pù{vÒ>!ê‘vg£QeF²H:1ôÏ#è`$bV¸é`QhOÃ\.G4%‹Õô};iÛ—9iWVróࡵ„þ©EâôÐ? ›ˆj"3ÜVö³P(N§ ‡Ãtww7ìÀ´ÕÒj}öÏÚk#{pÚQHk¬ìH ýS‹dóæÍ¼ãïhéøÆ‚GÐM@»"3š »ÏÜHb öY|…’¶½Äª~Ö#mÕb4Ò~ä‘G<‚îTÔ“šít=šÏÜ.T†^éG#m¿ß_~ß#íöÃ0 ÇZUN<><‚nìä ¨åÇv"AOÔgn%F"m`XBDå­¬>œxRzhœvs«¡$\,‰D"€u—£¾6x¤ÝJ8ýNÆicóºNŒt;]œDÐÅb‘t:M p51½·c$ÒÊž¶GÚ“N9A׈fÔÌh÷AaétÃ0ˆÇãötÑ©£‘v©Tz i{Y‘‡·ßª‡GÐU¢Y‘ís+1^‚—Ê^œº?J¥’ã"L<‚̨­>Xí>s0,Ožy¨^*{mp²‚N$tww·{Ãàô˜hdF-h•_[*•Ê•æÔgN$MY—“OÂVÀKew'†††èééi÷0†Á#h4ö·Ä\¹Þf.;›ÍR(ˆF£žÏÜ&x©ìÎÇÐн½½íÆ0xg+íífÒÌuitèPKÇX/j!UUÚã‘v&“ñH»ƒƒƒŽSÐ6·s°™Ð­Á`pB>³Û-Ž£G²hÑ"DkÐíш‰ù,ŸŠò K]÷ai“êC[j:È{Þsy“·¦ó¡„ …ˆD"ekDýí|>?,V[nÚE”N<\¥ ›2§Ù®ÈM ZÛ…[o½+:#kÈb‘°!Z¢ÕòP•0ÿæ‘C? dÌGØ|]–¿víóäóù2™´Nº»›´£·>ªíÊ>™SÙ]AÐÍŽÌhçdY¡P P(´­n†oëFÂßüÍ? ‡«*gˆ!äZš¯ÇòÖxhÃ|”°È¹¤ÌÏ«w5ÿ÷¡–ÉôéstG2‹›1^WöV¤²;õ"èh‚nUÈ\;Úî3‡B¡¶kjæúyÀÿõ_ÿ5Vìr ˆcùÇÝæë=ùf±Bê0_KcY >„À»±,"âQ+¡ƒœ%GvÙp+j=&Fª‘ÝÌ®ìN+Ž&h á=GB+ z¤xæt:Ý’u6§ã[ßú+Ä‚PB- J9Äð¼P"/šÿGµ–’.bYd1†}‘eËNcóæ—›¸ujA³º²çóyÂápSÆ<8š õʨ·7ÍD³‰j,Ÿ¹]‹oé*qìØ1,kCc—cXavaÛC?WD¬É¿(BÔE¬¨}°y±M|@½{÷5{«‚~«ñ t£ÑˆTöD"1f¡¤T*ÅM7ÝDOOS§Nå¶Ûn ¿¿Ÿ«¯¾š+V°téR¾ð…/4tÛïÖª ªf"ŸÏ—ÛKuww;bâÉ-8ó̳±â#@8 ÊWã U-GiX†ªæ^„Ø•ŒóX¡wªÊÓækió³2áøÊ+¯4y+džîrœ†ZRÙ}ôQ~ó›ßŒYrøÁäÚk¯åÎ;ïäèÑ£ìÞ½»¼žÞÞ^‰DSjI;ZA· >Ÿ¯)*½X,’ÉdðûýcN¶s’²ëmäïðá£X™€E`†ù|!SõœÃˆÅÑ Ì¦CæRüXI*Yó»CXj:h.#b.#†+aÅŠ‹9|X'!=Lí¼-•}Þ¼yüò—¿dݺu<ù䓃An¾ùf–,YRþîÞ½{¹ä’KX´h{öìaáÂ…,Z´ˆgŸ}–R©ÄW\ÁÊ•+éêêjؘ=‚¦ñ©ñ̆aF«JÍn—Åá|u¦¶EQÅ!ó±!喢΃ÀN¬CÛvayÍŽÞfþM™´¹®BâòùöÍtœx¬ù|>–-[ÆÀÀï~÷»¹øâ‹‡…ò*,XÀ®]»¸à‚ صkóçÏö¾ßï§··w˜Ò8ž [eq4âà±û̱X¬êÚÌíT>i´ÝV±X|KAZ·ó‡?ü!–×E¼a{YÑ ¢˜§G°Èu!0x 8ÌDˆøu`V†á|„´Uk µ!ú^ó½ö£cEmt#„:h>Ÿi>ñjÔXqÒª¬§šÿ'e®!zIÄÑ„]~œ ¼Xè‰ÂÉ z¼0»vÁñÝ ÔBZ«P(FÖÐMqÐjg”J¥†\œFª‚&–O !Ê^ÄÒ˜d ú‘I¿Œù-ÀÀqæk9¬zZ„¸5Ûðyó;y¬I?°Øü~8ŠFr´Ã‚²Ã©Ê³SÏçÇ ³k<‚®ê3G"ºººZ¬É ÐbUÙl–h4:j<÷D·G}j±4RCëe¾Q¿û±²ÿ›¯€GmK< K6ÿêd ¨î…ˆ QÌE,ÏzйÌö¹NVžš Ç´ÈKoå›UШ™„Õ®·;£±ûG=eÀ)"*9(æ#‘OΞDlŠ Òý pªùÙGy%ð¢¼CÀ,s94Å[È;ލø(Vf¢‡N…¸¦Ž'èv¢T*‘Édâ3»ôÚkX Y¬ÚÏZe,Òž‰øÉY,û¢±&rˆúÖLBM×IÂV˜^Äü~Ê\‡~^}éV%ZÇt;®jÍò™Gƒ' ívF-1ÝöïOä·“°Ââ2X*Z3sAB¶€¨^íO¨=5U\'þ´Ü¨)Þ¯¾t+1FÛ`Ù«ÛyðÐZxG]r¹Ùl¶á>óxpÒ$a­ÑÍ€¬S'øÂXw׬݇ª&šÄ°Ô¶vV±wõŽ˜Ïsæë=æs%ì¼m=ªàÛ‹N‰ƒv2œº]AЭP˜†a ‹åmåæ”LÂF‡NѨ&™è„Þ „˜#jz°X‚ØZ^T¿WÂRÎ~ÛrÔ®ÐBI€W‚"¤<Þu®êÛC§Â#h‡B ç‹Ezzz&­Ï\OŠz3!c°“¢ªáX^ô\„x *ûß± D&SÈä Fe¼h¾®ËØVÒZ„ÄíEþ¥R^&#a}£•¬ôà¡Ñhÿ™Xš¡ í>³Öfžl'›¦˜'“IB¡PÛìŒÑ¡m«ö®(Z…î „@÷ç#–Å“À<àÀÃÀ¹ˆ²~ 8x;ð3ĹØl>4ã0„»*gñ¢£Ñh9F[Sص‡÷à,h²”á ‚n$ì“_‘H„îîn ýc[ P)•JÃÒ³UÑÉR I,:™V”¶ÏùlßÓâüön+ª¬+Q*ד“¥R²²²8|#{çM¦ã²pòþT](Èd2£úÌN½Š6•v†ó{îiý"o%Q%Oµ?ô¹†åÙ`•-Õçö´ú×NÞZØ_ ( ;i+Æê7»T;™3™ ñx|ü¶® è‰þ°ö­£M~9õài$ …étº®Š{íA +bc+Œ,ÖÏûvŽt¶“¸™BÈ9LaîÜi5|¤6L£u©®¶ºŸ‡æ`ppБu8À%]/FjÐ:ÜQ¼¾>Ø/Pî fφ¡DI@ÉbEfèDž*i}®ÿ+ì ¹2"C£;´VÎöýšEøùÏnÂÛSÙ¥Z½ÏÊ’¬vkÄÙw7ÕÃÉ z¼R£íDGteÍ{ƒÖÑЉÝê„;q2žuÖé<ÿüV,ÒœXdo;ÐeCl@&µoá›æg"„žEŠöEjnþ«¢¦k½cˆ‚ϰjÕª oO%ƫ­•þìöˆ‡Æ¡•ý«_ýŠßüæ7lß¾îînî¾ûî1?ï ‚®å€ÏgkDÐv;£• 7ŠF(¦ú§â¼ó.@T¬úÁ ¤9 ³;x «›†vÂüìADe¯ÃJ߃¸ ¯{7òBæ¢Ø5N:[vq©ºŸÖ)•Jo)Éê–p?'+èD"ÁÔ©S[²®Ë.»Œ3Î8ƒU«Vñ·û·ã~Þ] ì·ñõR»ºš4nµ3FÂÒ¥K± ô§°²#(q HÈÜ©Hk«5qŸü§ù· øp"p:ð_ˆêN äÅꪢ™†ºÎ\S·s<Œ6 é…û5ƒƒƒ,X° %ëJ¥R¬ZµŠ;*ßÛõ]‹Ï\Ͳډ‰¨ŒÊ¸î‰ìg!UP?µFc¨/]Ä*ÊŸFVÃé4*Cÿ×ï ù|!ï ¹­f§‰,)¢QçÕ nG¸ßDàdÝÊn*_ÿú×ñù|üà?à”SNá#ùȘŸwAôÃÚÃŪõ™k]G+1‘õ7«NõD0‘1d2î¹çþò/¿ªö%Ìa¥r‡ÍOÅj…¥þ´6”µ×}«ˆ’ßü~Úü¾V´ šË* ÊZj€d2çœsßùÎ׸ä’K‘i9¼p¿úH$ZFÐßûÞ÷jú¼3´qÐŒp1'xеªŒN²3:ÄïýÞÇX½úE„l5îy6¢rµpÑ›HýæiÁ™Ÿ‹#Ä›Ä"h-ô¯u9Àj6GÈY{j»CXäœ1¿?“mÛvqýõ¿ðùü|ìc×ó÷ÿw޲pR¸ŸSÏD"QNXsœ}t™Ð¶X,’L&Éår oÐÚn‚®e;ÔÖI¥RD£Qâñ¸ãþj÷å¿ýÛ¿ÑÛ{<'œp:«Wo@Ôlx° ™ Ô¸2±w)pôR<)…j‹ µžö0Ôм¼ù˜b¾?€L"¾ˆL0¦òïFTµ†ï}Î\÷< £Ä=÷<@_ßÛ™=ûmlÛ¶­®}Ô.hÔH8³™¯Zf˜›i·ø †a8Öt…‚6 ƒT*…aH=„fìL't5ë·ÛN½êWƒ»ï¾›/}éé–Ò¼ Ø\Üo¾7 QÂ]ˆ²ía¥h4ŸoA"14 ð×X„|!ï:÷ÏX¼³ˆš>kb0‹¨ë<–¯ýÈäA¤¶Ç°—T*Å9ç\ ¤ùùÏÿ+V4vGµÕ†û£]O¸ŸÓD„N›+ 7ÝûsòU^í ¿ßïj;ãµ×^㬳ÎÃJÏ#y)ðBªs€Ó°¸“‘˜g{•9í‡8 )ºñ§7™Ÿy¢~W#‘‹‘öW%$Ú#lCˆØ ’GHZ'o@Š/uµ«™o=á~N>·œ WXö+{³ÐnÂMAkfµ3b±XÛÇZ Fã7¾ñ Î:kRq®„¨Ö —ü D¹.GÈó|¤,è2¬ÎÛ’4bç÷!$Cˆþ¢ªµÕ•ú͚ʭ‡ÚÇ0ŽØÚQ%m>’ækE$Æúíñ/A,—ˆÒßc~¶¹¬  1mÚñ¬_¿~"»Ï‘PŸ: ‰DÊöˆÆh«5’ÉdÈçó‹ÅaÇ´Ž[§Á=YPIÐù|~X§údÕàÚkßÏßþíOBÍ#vFLlD¼ç³›âíÀsñý!ÌBÎq¬$ÆP«â°ùzQÃöÄ“"V ,µ/¢æ#ˆ•îBì­ý:¢ ±”ö ä"BÔôBÚasLS¸ä’ëùÅ/~Ñ ½ç\ØI;–IÛï÷S,ˤ](F$mcÃ5ÝéW_ûö‹E‰…BîîîòN³ÐìæÛßþ?þ<21g äV@HoQ¥a„èvš¯÷'!Dxžù!¬ºÍ:î"B¤Y,‚Ö¢Gj[Øûf7°T¹+{Pûf‘„–³‘ ÃÀ³È…ä sY 2„w¯ùZèáÃþ$;wîœàÞs”´u2–½k;ig³Yòù<¥R©­¤íäHweÍdÔî.­ê Ý¬ Ÿ† ær9n¿ýo¯X³ö´µÔVO@2§‘³5›GëëX„:d~Om- ¤ñÐQsYó¯*hUÅyDùv!–ÆÖ¤á m+ˆ¢?Îÿ!Ä ïBÈX[leIÊ㱺Šû(§Ÿ~ƒƒoÔ»; •6¥NB¶»ºŸ“½kºÝQ͆ÞÆãñ 'Ý´ö“ê’KV"ªTÉPëj$°& “yîBˆ7ŽÕôUIº°:©„±Bë™ËW B¸‡ÂW9…ÔÜÐÂKzñSEÝmŽ)jþ*–ǬÊ=bŽASÂ5£1Ž´Ú&9sý¡²iÓ&–/_^ûŽìpTÆhVÝÏNÚNV»Í€kºS¡´}>ß°xÔV¡Ydty/½´+U[•òTDñ¦±üäBh„ÀUÑI½„SX^tË šßÕF±ó;%¬$U×ZNT ôGšß+"½ Uí`…ÜiMb‰c]xÔÞ(˜ËðñÉO~šÕ«Ÿ™ÈîœhU¸ŸN}A· šlR*•ˆÇãåtÜ΃’šªSõu"oQ¯ª8•°CXµ32É÷!j;€¥z³XawAóµ8V²JQß °ì“$–â-`©qUÆS‚Í ™‹š°¢ iõw 2ÜÀšpìC.,>vìØ3‘8©1Z¸Ÿ½ ëDªû•J%GO¾»† [5IØì¢.•µªU1·³’^sUD+­ú$$b#‡åG±HZÕ«’sÒ\††É%l¾#æ÷’ˆ‚öcµÅÊc…Ë©R.bM@Ú»§hIñžæØtýJÈš‘˜ÁRÕ˜ÿë8 ˆO­Ñ%]ÈÄb”`Ъ6çaâ/FÛ^Ýo<Òvrš7¸ˆ [f_ÔΩVu»<öæ_ørˆ""}Ç#jY­µ41ÄÞ1E‰WýeU¯j7„rïêv—Â"gµ# „€5ý[—¥õ:°BõBXQ•ËИjÃÖ;4Ôš ‹Dî>øÁë'¾=Œ‰j«ûÁ𒬃ƒƒcëO¥RÜtÓMôôô0uêTn»í6@ÕªU«ƒ‹E~ô£5e»·ÞzëWùâh´"§P( NZšlR(ˆÇã„B¡Ö‹Å–{Ð…B¡|À6 Ú1Ü0 ††Ž±nÝzà$M:ˆ5‘V‘£,VÂò’Õz˜Ï•DK沎a)ã’íQÙÉ[[ZÌï'rŽb‘ºvVQÕ¬„l_¶ß¶ünä4h>ïF~±lóøã¿šÐþÕãÒÍhÇ6Ø«öƒÒtAíŒb±È~ð~úÓŸ²yófJ¥áp˜iÓ¦ ;7ï»ï>–/_ÎÍ7ßÌÃ?Ìi§Foo/O>ù$™L†Ûn»—_~Ã0X´hQ÷Á5S¢­°8­bµ$j"‘(w6íDm§‚nÔzµ&u*•"`ßüæ7µ¹)œ¯™€S°êk¨BUµª1ÉvõªVEe½fõ¤µ²Ý1„ "ä;€X ûÍÇ!ó3»¬=¾ò¶çªØ5Q½çV¿ÂŒ¹Ìó{GÍmëðû&¦NÏh%ì1ÚŸÿüçùüç?Ï7ÞÈŒ3x衇رcǰÏïÝ»—ùóç°hÑ"öìÙó–×/^\~½Ñp A· "+­¼W*•èîî®ê$uúŒòXÐ䀮®®a)ÁßùÎ-æ§^@|hR›Ãç IDATÌ#m«Ô×!¤§]TTAëÃ>9f8ǰT´fªU´-S³ óÈB÷¹6Ð"LJÎE„„5¤„Œµu¸!ü¡âC.öíë¯mGVÀÍÇ„ ÝT®¼òJþâ/þ‚·½ímÃÞ_°`»ví`×®]eR¶¿Þßßß´Ž,AÛÐ5©•÷2™ ñxœh4Z•j§JšÈ6Û··««kİŸûÜçèé d·‹èÎFlA¤’®ÖÙPŸYISm Œ¨òCˆïü&¢ÔlUƺ¼)æ2»Ìe†Ì×Î1—Û‹þÓÀ§°ì’$–â×’¥%²Ùƺw#ÁÉýÇ‹âh7\CÐNœ$,•J¤R)²Ù,ñx¼¡^Z…Z¶¹²“Kµ¥O¯»îýœpÂrr9òÓŠr¯bEeœ ü;–ÍÑ|™\ÔºAijîf"õ¢An£¶×Õzˆ›¯G‚j>ºÍÏu!‰“’½+n;‚x¾¹îkͱý ±[~!éç¢N˜ß›ÉÆ/Ó×·€»îº«ª};<º¹H§Ó޶¡\CЭ@µd¥Ñ ÉdrÜèŒNA¡P ‘Hà÷ûË“€ã!—ËÑÓ3ƒÇ[ƒWB”šúíG¼ã>¤R\© §]Tþ!ì.DÝ^„d ‰éÇÊâÃ|®u9f`Y³Ì÷{Íu©"ØÆ÷‡ù~Ä\Ö>`VH72F”¿Ö޶÷EÔ @/ùÛ,[vƸûª“ádíô¦¹Í*u`<‚V¢‚úí §a¬mÖIÀl6KWWáp¸ªúðáÃ̘1!¹ BŽSd•^$õzBÄû¥z&âハÞL„ìÞ‹ànÄ«.!Uå)êÌûõÀ‡Ìõý.Òà$„Ô§! ùæû+®ñÊk‘úÓ$âd!R›ú,/\Ãûfb58ˆÜHcÛÝ»èíuü4Ϥ…GÐ @«,ŽÑ ¾k3Ö¶cmCµ1Ü•dñb­ã\Dp«xQ ±8Ž1hŽ]“mº[$b>tâó{ŽgS(ò¬\ymMûÒó '7\EÐÍF%A«áóùèêêê;c$è6Û/F±X¬®þ‡õW·#d8!F¿í¡}öG +VyBzy†GZ3—¹ø±¹œµ¶åÎFHðà=æòÞœa¾öAsÙW× Äy6rQEEHúQDÿ'bqh-[ZD|ìé¶±k"Œî+ ôc5 Ïþ™gžåðáÃ5íS·ÃÉ Ú©ãRx]-°Ò‰vÆHÐí²ON¤ÿá­·ÞŽÔL†Çk#WÝš9¨ !9D)bòOa‘óvó3Y¬ù 2_ˆtî~‰C>‚Ø»‘(_#ä¾Ý|] 4½ŽøÓJ †¹Ž½¿lŽáˆù~KÑkS€7±ÒÍcXD­õ¡õŽÁ‡N~øÃ­g×z˜„p•$lE½Šb±XVN®Û(h"„¦¤OüB¤Ù|½Xň@”¤ZQ¬Êrš<Ò…Õ°„£½&†Z ~ÄéC<ëiÀ¿‹Ì÷_0׳+Kp¯¹¾×° óÿÒ\þÃæ˜º±ê9kl³¦‡ÃðôðˆmÙ‘’ÆJ’ѦQÛ÷Cæw²fÍ 5ìO竼jÐ ÛÐx Ú„vÐV;c2s.—#Nè­Çò:Œ$—€m±«6³ªéiáåÍÏd‚Ôýú¹bƒ¨§¼QÖo ä½ß|]'î´è‘ö*ÔzΘËPyÈüÿ˜ù¿úÕÚ-ÝÝÝ$“ɶ×Åhe]êx<Þàú"â ¿D>Ì@H+e>O!ä=€Üò§°Ò´ d§Êó(BtêC«u`oÖª)ØZŸC•·7 ™¯))rUh‘%õ¡í—ÒX…Ys}Ú à2q©)çqÄRéÂòÓu]³‘:ØÚXv»+È¡‘˜LÛÚH¸Š ù#k²I¡PpŒÑìƒX'í]ËÅbƒŽöäó!vW!n;‘Ûþå™FüÛyÙiÄAóûÇ!ŠU‹êGÄ ßÓ.,½XxÚ—†×ˆ¶—,ÕªxQ¬È‘˜¹,õ¸skÏÂ0Vþ^¬Ò¢½æû{°*ÙÍ1_ÊãEÀ¿šË8ÀÙg/'›•ŽãöšÅNOš¨NUй\®åõ×kŤ´8ÔΘè„X£ÑL]'ÝÝÝå˜æFÂM7݈¥žsÀ#ÀGrzQµ§#d׋·!ʈÂìCÈR s:¢H{Ì¿½Xõ/üQjŠª×w"ƒb­\Ì7—q’ù\‹÷k¥½¢ŠãÈ…C£K´+ø1`)BÈ :!‡ Ú1‹Ìï<‡ó ˆÏm˜ßäî#Fˉ?…Bl6K&“) ‡v¶Ak4œxáI$L™2¥Ýî©fB2i¬ªv†ßïµ h;{”i‹Fw7Q g¤°9}¿«««aëŒFû; ñ` ÀÀd¢n’Õ÷8{¼Ë급Q ‡åKXŠ9T“Û ,A2ODb”ç!D©ÕïTukÁ ÖDå B¨ DõNGˆV}âV w!ó BÈ/cuiQµÿ»ÀoÍmKšë9 õûrp°šÙ³g°mÛÆQ÷½!ª¶k²·sª¥!ªSÍf«Î@m%úûûÙ¸q#7ÜpC»‡2*\¥ ëýµåT­E~ZFw7Éår$“É1lš±Ö¬yQ§»œ ܃Ö!Äö3¤RÜ„\?ŠâcÉJMe©‰Þ…¨ß-ˆÍ°«PÑÕˆŠþDµþ%¢b¿‹ø¿‚(ókS‘Ôí <Ã\æ ° ±*´àÿæçrHŠøoŸ\c£û€/"#‹Œ*ìÙÀß éëÇ™ã,°uë‹cî;µ<´ÙA(" (•JÃTv>ŸoI+¸FÀ‰ç›Ó+ÙËt±X¤P(ŒÿAƪY<‰]]]m9 Òé4¡Ph 1öIÀñb¸µÖF#4Àý÷ßÏÇ?þi„Ä@,†G%|R¹n;¢FµXþ§‘ºÊÛ Ä͈R}¢¤/C&áGJ~ÞŽT”ûo,¬µ?ÔKN dDÈ;iŽé(¢Œ éݪˆ¯îV÷#Ñ!ZÇ8|±,–!vÆÍ±¿ ûÓ»†ƒÀ%H¶bH²woÍ„Ïç˵v•­Vˆ]i;‰Z ú™gž!rñÅ·{(£¢c´¶`ª¥fq­ëh4&ºn½S¨µ›K3Ø>ðž|òÿ"“)Äž†¨Ý¯#VÁ_ „ªE•¾‡ñ*Ä®ø ðDÎE&BÛo#jx¢„¿xÓ·!ÞóMÀ'¿û¯lïo¾þûÈ…á+HVâÄ¢ø{sùÿˆxÊW™[ôuàÝÈÀT$áåDA_iþ¯éæâ=ÿHø8xð†ª5ŸÏG0$FËj[ïœ2™ ™L†\.ׄ‰àÎÀÐЧ ‰jºªØ#ê‰Îh†\-šÕÝd<4Ãw×I®R©Ä ',çȑױjsÌGR­ïGHòJàWˆqø?ˆú ŽÿQÅ· W'ä~‰÷QÄîBT²&ŤòM›ïU= QÏÇ™ãÚ |ø’"þà!ªýEDÇÌun¾ƒ\LîA¹ªóßCÈ]|ðÿñ?ÞÍ}÷ÝS÷~ÌårƒÁºŽGÍŠU¥ í‰qª‚~øá‡Y±b'žxb»‡2*\f7r¹Ùl¶ì3׃vu×®•qÜNºµðûýô÷¿ÂÖ­[yÇ;.EÔtQ«³5û„Fb¤?‰äŸ"Þï#Ñ]ÀŸ!ÑW"öÃ2ÄùKD5ÏCHü[ˆ2„´Ôú.¢ÌãÀ×€o"•í^B*㽊}ÉL|!ÝÿDüñ>ànDE¾Š„Ó]d~w‰¹¾~ºº`ëÖMcö»k6ì–‡B­{”ˆßïFÚ“nPЮ"èÑõ\5„l"Y; ºÖî&éØj,Y²„îî‰DQ°âv;¢n¯ClùH[©ÿ¨ÐHÍŒ!ªöf¤¨~xñ¿…LÞ݉ø½ƒj*ùDÝÞ‚Uôˆ ?„Xï2×ûó³ÿŠ\(DªÝu!§ËˆíòkDµoE.*Ï!Š_ºyÿá~¡­ä<ÔQØ£Fr¹\ùøSÂvcÔHµr|˜³Ïêq vF©T*'^4j¹íB5ëÖ R(r¤j ýè$ÄnÐ*uÚ¸5‚X )¬¶U>àËHùÐHÒÇýÈäßaÅ.o¾>ƒDw "“} „¡¹|?¢¼ÿ_$ñ‰Op '4f6 jsØÏ»5¢–b'&Ô Ç7ãu%A†A>Ÿ/ÛÌr²‚nÖ©PÿÙï÷“H$øÏÿ|9Ü|HØ\Ÿù8‚ÜBÚi„0ÿF°Š0ý&w/%1!ïB¶¯™Ë !]ºw¹ ¬5×µIfY„\>ŠS} ¢÷"D|ÌË4sy)¬P»ƒ)ϱ½'eVÏ8ã|µ¥Výh5ŽeØ»µOVk¤•pî>|>Åb‘d2Y®¾ÖèTÍvGqŒFКý ÝQÕ—> …‹/1ßbé× »·#‡áL¤9«5g}±)TáAìŠ"Që"Ma%•øe¼!íyHT‡ö(œŽUs£!áAÄRù5»ýÿ!Ä›Áªl—5ÇS2Çû.¬‚ýoÇJ=×âLR¼ÿöÛÿzÂûÓ Pk$‰”£F‚Áà[¢Fòù¼«¢Fœ~aqæY> ô`¨%„¬V´{’°rÝZ›ºÖpÁvÀ1`O´Èå4‹/ˆUø>(Ò8BrY„p/@Hù $DîmæãB¬rÖ)j“h‰ÒŒùþ«æg ¼‚$ 3ÿ&B͘ËÑÈŽ„¹Œ7Ì¿SÅ>™`œ†ôG «ëÃ*î4«ûÊ„ |ûÛÿÏ„÷«Q™P£¤­õ]ì 5z±v i; ®"hŸÏ×ô[ûv[ -æäôìG®š+ýÉÿøÇ ï*rbc”ÿø·ÇIÀß ­Å•æ $üóÿ¯#jûÛˆbýB”Z¯Y6×[@ˆ9‡\ ˆÝ±+¤i6{:•ñûˆõñ „ˆoDTõ ¤©¬ÖèÈ#ax;{$Ø4'šý¸ÔE¬ jhl¶Ý~TKRc³ …BÛ Û©ç“®"èVÀ ZmÀñµ©íªy¤þá‡Æê7¸Qµ3r\dàýIJÙxÁD?‹UC9ƒXë{ád"ðˆº "QsH‹9HTÇIHÄÆ‰HœóHÄÈr$Do1Bô§ vÇû‘˜ìÏÿŒDŒü¢¸5×i J:„Ø"×!>¸±TaUØ+ÔœýZ 7ÉhPŸºÓ¬‘VÁuÝŠƒµI¡P(g:¹Õ–=Õx¬Y}‰3Õ²ŸÛ¼˯½IŸ~‰cþw$;¯Ûü»ñŸŽXO#Š{a‘Bˆ?€Ø 1¬N'ªš»²œ‡f: ±S.G”ñµæ8®îBHý!Jü»ˆÍ1ø0Òü2äâòNÄÞø)âmGeÞ‡„J3‚‰´Û «²îu-ÖˆÆj7k¸aßºŽ ›v)è|>O*•*wtqê$ Xª¹š¢ó7ÝtBžZ+ùu¤Çu™.¾Ø?@²ÿ‰5þg„¤§ äýB²_B”õŸ Êú{æ²~L¾Žf«QmÞ|M»»ìGì•XõªÆ*ºßƒ„ù„uÒîܳ°ªà­Eî`Åro5·oêo;1‹ÎIh—5âäsLáü¶­V¬öIÀviªÕªf;®¸â $¬Mã HRÉZDÁ"éÑO!Ä÷ˆÝðbKhû©%Á !Ë¿CÔëÇOyN·Ý\ÆËqoG²“HBK QËÚ v>V÷nD) ‰oþ-² ‰‡þ¢âOEl•mÈà‹æÏ1ׯ‘ V£€É‹z;Çøýþ·DòÜÌD­MÐq:\GÐÍ&°V)hi¶O:õЮĬµ¸ký –,YŠxʳËáíˆÒ<‚Õëo’ÆFüÿ >õ‘ɺ»øid¢1ƒ¨æå ®2—ó爅q’ xBнÈãqˆJ?ßϵˆ¯}ð B´{ú=æXz‘ÌD‰¿þ#äâðgÀµÿ¢Ü¯ÀŠ‘Þσþïšö•‡‘¡*; •UöxÖÈXpK˱É3Åì  Òé4ápتY}ÀzǹnÝ3L™Ò‹„¾ÍF|à/#•ãf"VÆ·š7#éÕ7 D¹ Éî;†äàóˆš}–ÝàCTòtÄv8ñ5,Q/~3ÍeœŽ”6ýBºSÒÝŠòWÌïþ=½q ©Š÷׿g—">ôqÈ$¤ýµ,pŒY³rå•WÖµÏ:Í$‘j4š¨2¡¦2m=NÇ«ZÏW¿úUŽ;ÆÐÐwß}÷°:?gžy&çŸ>@€;['p¦dN&³ñ µ—³Ù,]]]ŽŸT¯&¶ßý~?¯½¶ !®4¢0×#–ÂIñÞŠÕ¬õ½™¬[‚<ºØ\ÆÃˆÚýR²ô ÄÇB”÷ÄSÞŒë&„¼5*ä_rÞb.?‰(dµXÎE|óÛ ä"Dÿ ¢ædŽõDÅÇÍñ¿h.ËO8åµ×6Õ½Ï<ԇѬ{³ƒx€{T*5n‡¦þþ~¸óÎ;¹æškx衇†½ßÓÓC¡P`æÌ™ÍÙž¦,ÕÃ[ ™€¡PÈ5“€£…ÎÕƒ9sæpàÀë9û²ì6"Ê4ŒL¶Ý‚xÃbõÜ‚øÄ›HŠ/"Jù6DÿRo#‚ÕHö 2¸)”Cˆ[ël\ˆëÍe_Že…\†Õ™ü}À}H²Ì:$„/m~÷<ÄbYl.GÚvÍ›×Å¡C»²ßÜŽv[ #Y#+W®dæÌ™lÙ²…O|âÜpà lÛ¶;w²råÊa{ï½— °xñböìÙ3lùO>ù$wÝu¹\ŽÇ{¬áã÷,Ž&£T*‘J¥Ri¯™ÐÛAUÎÍgWWÉ䛼ë]—ð⋯ öÀ^Ä6( žñ×ù›ˆŠýDÙþ™8¼™`Ôôñ!Äg~Qä— e?¹,@b¬÷ É(»‘¢K§#…¦ žõÃæw»‘IÇ·!‘=H\ó}i¿‰òø¥¹ìûÍeßøÆgøò—¿Ô¸æ¡áèééáÄOdöìÙ\uÕUå C¿ßÏ#<2ì³ýýýÜvÛmåçJÖ•˜={6CCC «ëÚ©W m. u5h%|>ß°xÓfïã§Ÿ~œýû÷³dÉYär!DïCê?g‘ð·’-øH_¿cˆBýVå¸7Ká¿‘øä¥ær0?£µ9rˆ2`¾w ñšƒHDˆš¿Õ|ï/ÌeåOüć."Ýik;¯4ï|çryä玾3jœxÎ 1mÚ4€1#’/^L__Ÿýìgà®»îbÓ¦M<ôÐCüñÿ1_þò—éêê"‘H°jÕª†ÓUU º®*ÅD;Œè$ Ö¢¨åmuWqÃ0H&“åb8­®LÖßßÏ¥—^É›o&{ÁDPlEBçз bY| !Ío!ªønÄ®øb{øâîEÔµekô VÊaD!k!¤÷#…ßFÂçA"3¾Õíå s Øè«°®»QÛY‹j®:±h·tšÓ1:d ærÖõMA’JBˆGœDÈU3Ä!DA".ræû3Ìå-D"CÌ¿„´}X©äEJ¥t㮣©ìl6K ¦²G"x§Ã‰ ºÝñÙÕÂu ͯ—1Úòí“€N·3€aj¬Uc-õ¶•-5±ƒÈ$^+Ó„x³æÿÝX\@¬Œã‘ ¿½HTȉˆÏ¼!Þéæ²3È ƒ(rë´ˆ õBZ«´tž% •/~c©ìFEŒ4NUÐN?w®$èfc$‚nÔ$`µëžÈd÷9Û}â*yTM¥Ê¶×JPõøÓŸþ!LU´:¡SDì}½„DgÅšø!vm6«ñÐóõ™ˆâÎ!mØ>çGT¸N@6>a4hu¶Ê2µxÙnTÙ­†GÐ.† ‹Å"étº¥“€QvuåÄt¼ÉGõÉÃá0ÿò/ÿ‚(e?Bª¬ßÚÛPÕït,RUïÙ^(I»º¨ Ÿ‚¨ã„ù™HÅçbHÒJˆ”;”7 vK£š¨Z½l'«ìvÀ©Ê¾®üÅZA’¥R‰t:]®zÕ¬&µ•¨wõÔjv ì ; •C_}u;Bºªˆ³æß°ù"ÞqQÕšè’·}ós,²ïÆj›Fˆ<„ÕìuQ×J”Y¶lÙÒØ¶¡P(Íf ‡Ãj l¯;‰DÊËóûýe•­{ø¤çÂSÐ#@+_Åb±a¥[züõvxÍÄH·õÁ`d2d±7´cw«ŠIçÌÏìEˆØà­¥F æóó3 ¬Æ®$ÅïFÊŸ.@[»¹„xê©§·áXwhÁ`°¥Ç™§²n±8\© MD†a”{ŸÅb1|>_Ó³GC5 º™¡s­Âh“aÃáG«Ä 鯢ö#Õè‰Á’-¸!Ü R+ÄS^¸þÿ[sÚ+q¢¾"é݆ù~mÓµk×®†l7PŽhi•m6&£Êv 9ƒK º‘i°™„«ÁXënDÂI;QÛdXk⮀§§‘ÂHlóYH_ÀcHÇí.$ƒp)j÷(B¸W Y‰u>­³!ÖG ˳–XèéÓ§OxÛ5ܰ2vÜièôˆ‘R©äŠ$p)A7‚˜ôöºT*LJ`íêì­ë “G5Û¡ÑJνQ0ÿNexbIñUymË+4/ŒUŠ4€X±ÈÙ°}Ï™5kV}m¢ömwFSÙv‹ÍM*;‘H0eÊ”v£*¸wÛ“[àIDAT’ 'Š|>_.B3Ú¬y; ºÒ÷sû$`­!düço¹!PU»v§‘%D«ÊV‚U²P’šŸ× Âùy¯Ö‡F„ø8å”SêÙô l»³QIÚ£©l}ÍI*{ppÐ#h'B'f|>ߘ1ÍN!A'%œÔ‹‰(Çxä0.™ÏóÀv„`‡€]H´G ‰“þ7$â#h¾DÈ?†Eʪ¨EIÛ‰¶²¾ˆ½¹’s$qíïW/ìeUÎv8ÅËdîܹ _n3бG6Êd2ÄãqWLÎhtF  —Ë‘ÉdÊ%MÝT*•Èd2eå8Ñýý™Ï|!O»–õppBÚó€÷"eCóÑþ!è7"Ï™Ë;)¦4éÊ}9ûìc¸ê.`yà4ó1‰F ‡Ãø|>²Ùlyû5ŽØ ¿[#P,Éd2„Ãáš"T”°5.[ÛÄ53.;‘HxG31Þ‰_Í$ “`óûýÃ*k.·ªU­hF”‚œèÁ¡ÏÕck2¬èŒÙH|ôr¤‚Ý#æó™À!>Ø‚EÂ`M(ÚIZã¯Ç&%’p8\¶ÏZÙÜ ÝÐc³QY·•ʹÑ*Û-í®À¥=tÐï÷»¢h5¡s•5—Ǫ×oÝÛÛ<¿5…L fÂå%kÇn/í/¶ÿ5ÔÎoþŸ¯xMOörz¤Y¾|Ù¨#íÂTms'6T­vK£Ù+­{M­^¶7IØb¸iPQoÂÉHÕàTY¨Z«,ßÙ,´"¶÷ijcÇ.¬r¡»‘~Óõ¬ 7ˆ–ëCÉZëJk¸†çéþT¯ZCöâüìg?{˸ê©>7Rsûïæ&•­¶C»¬Ã‰¨ìt:Ýò;õ•m? š9 ØŒl½f$œèI­jMo¯Õ»nô‰ßÕ,xâ‰ÿfÁ‚“±Še¤’$ÒB-¬°ùí_¨µ4ÀRÈ`)ìù|é?¸ +DUúàK’J£Âç*·Ö´›8šYà©^Ô¢²óù¼ã/€ W´"N˜ Ø4ãlUÂÉHê¢Q'~«3â¦M›†Øy„„{?¹Q»o"„ú*Ò{PkA¯Æj ûù1„ÄRÿÔ|®ñÔ!¤¶‡¾oe%ú|Zâ´ùás£©ì±š´Ûl÷ÚŒ‘΃={ö0}út ›T*E(jÚ$`#:›(ÚpRˉ?Ú‰×JÕ\‰… ç²{÷aÄÖž„ú|6¢v߆L >‰òR„h!D=!à8ðnD…o2×ƪ€0@‘çŸ_P¾Àµ:|n´æö»£VLë]ƒ <ÕƒR©Ä‹/¾H6›å‹_üb»‡S5\KÐ]]]méKX+œšp2VWî‡jˆS»üÆW^y™)S¦"D:h¾ªq¶V¡ýÃÉF uï¼Ð|ì2_ÓØç.D1ÃðLÂ!4ñä“Onx”ÂD0ÚÝQ³&õ®Áï÷;ÊÒ¨©TŠçž{Ž“O>™·¿ýííNMp-A·¢ ÑD–ﶪs#E R©TY¥µ+FÈ!ffò:ÐÝæ#ŠXaàVh°ühõ–µIì!„ÀãXu< ó¹¶Ìòóÿød2B¡coéõîÈŽF…øÙÓµ$.jÁ¾}ûظq#W\qÝÝÝíNÍp-A7!U·7ʪYÛOµ;¼oÿþ½ôöÎĪ^7ˆØyÄæ#jXÓ´Áj‘e¯Ó‘D¾QʰêvØ-”þð‡]‘àT‰jCüƺØê\ƒ[- Ã0Ø´iGåºë®síÆgÆ›Hô¾« ùþÍB6›vW·©æ‘PKÍbUjÅ¢$‹ŒW£b¢X¶ì vîÜ‹U"Tºˆ"ÖìB-”4l¤éÚKmÿwc…뉂~ì±_rþùç7|œýÝì[}är¹aÑ%nC6›eÍš5Ì™3‡ÓO?½ÝÙ\KЪðší¨RM;¢ÊÐ9·b¢zç )ÎzkÝÈš ]]}—ò£¬˜fm‹5‰•Þ…DyÌNFb¨wc³Fq¤ÍÇ àgÚ´8{ö4®ƒŠ wGù|~Y;-Äo<fÎ<™à;‚øÏÝÈ¡ÁŠN#–X%Dýæ÷ûCÃé†Ì÷#@š={Ö567C£Bººº€±3VÛâ7 ÃàÕW_eïÞ½\{íµŽ3¨®UÐ:sÝ,Ø=¸‘à©æú0Ò­u­'ýš5k¸ä’•¹F°¢/º€éæ#Œ„ÊeÒž±ö-ÔîÝZ^T’Y††Ž¸J1Nµ¤kWZZNÉ|Ìçó¬[·Žîî¥<‚z»7RhU'L:¥?^½'ýüÇpà Ÿ@6„²*æ(V<{u:­6¿×Õ‡°ÈààáŽQ^Õ@ïnê͈Ô;${Õ¾V×9zô(k×®åüóÏgΜ9-Yg+áôËÏårÃºÝ '‚“ûãvÒd‹ìÝ»—“O^ÆðŒÀnóo«ð‘ªì"¢´ó™kÖaždr¨Ù›æ(Ô2ÇR ôî¨Ù*Û0 ~ûÛßòÚk¯qÍ5׸vBs<¸– íEfšµ|­%­ÿ{ª¹=ÍQ•6oÞBŽ;ŠXÆ* ¤¿W+äNÍ~üã7rÇw´rsÚ µ4ZÛ]Ë·Z‹Ežþy.ºè"מÕÀ#èQ`©TŠx<îúÐ9p¶j®#Ù"†a0kÖlŠE?¢žU1G±ê:ëv—Xºôm¬_¿¶ £oÚ]¬ÉÇzç!‰Ï=÷§vÇ|+†ÜVx= à ™L–f·’š[Us-¨TiCCC|üãgíÚõ„Ã!r¹¡Po¼‘o}ë[®¶§ê…V k´¥ÑØ {¬ðÌ={öðÊ+¯°råJG¤Ý·®%h­Ьekš«“Ë>އNR͵ÀNØ…BaX±(7ý~€Û*Ðõû•J%8ÀêÕ«éêêb``€|ä#“†œÁ#è·,s´Ð¹ñ|P'a2¨æñPY}®á}nC'\ Óé4«W¯`×®]<ÿüó\xá…|âŸhóÈZƒÉyöŽ€ñNÆ«þæÂî„“r¢©ú\5e;ÓÛtB:€7ß|“^xË.»Ì5-ª ×*h_m¢hTÂI»ƒø=Õ<±ÛùfD´PÎ0 6oÞÌþýû¹êª«\»€« Ú^«43t®ò„o&a{ª¹9ûÀM¶XÄÂá°kƒ\.Çš5k˜9s&guV»‡ÓvLJ‚nGÂÉH„=Ñb4žjn]gihÿ]Òhhå>h&>̺uëX±b3fÌh÷pIGÐNI8)´–[jO5·?®·ÝZÑ®V\„alß¾þþ~®¹æW_d Wt-5¡ÝP«¹š[jO5[ŠÑi5‹ÇJÂh†-¢%‰Œÿa‡¢P(°~ýzÂá0ïz×»Ú=ÇaRœáNQÍãa¼H½[pk—‹FÀÉŠÑny(”¬+£}&Þ×)–ÆÀÀkÖ¬áì³ÏfÁ‚U/•JqÓM7ÑÓÓÃÔ©S¹í¶ÛèïïçꫯfÅŠ,]º”/|á ÍzËà¬#¼FŒw€ÛÞݘ ¨]Âá0†aƒd³Y2™ Ùl¶&6 Û‹ÅGΣAU~4% ËwAõü†…B¡¥áfrÞ¹s'Ï=÷+W®¬‰œ|ðA®½öZî¼óNŽ=ÊîÝ»áƒÞÞ^‰sçÎmư[÷þÂc 2tÎmÄlÇH½áFë5ç”I«FÃÙp£a´®ÜÕô Ôtm7Ç6—J%^|ñEr¹×]w]]ÇéÞ½{¹ä’KX´h{öìaáÂ…,Z´ˆgŸ}–R©ÄW\ÁÊ•+Ë ÜŠŽ#èNèpÕu9±§0ÃÈ„íÆ¶Ev¸½yéx¨ü Á*¥k·åJ¥¡PÈÕª9•JñÜsϱtéRN:餺—³`ÁvíÚÅ\À®]»˜?þ°÷ý~?½½½M­ÕÓ*¸z’Ð^ºS:œ@ã"4&)ÒNtŠÏ:Qäóy …@`a»íNéõ×_gãÆ Qµ©TŠO~ò“ôõõÑÝÝ͉'žÈ‚ èêêâÞ{ï¥X,rüñÇsË-·4hôíCG´[&ÇC+"4Ü|Ñîð9§`´ tnÊz4 ƒM›6qôèQ®¸â ÇÏép5A«ºp{‡©R©ÔrRªL¾h'a;5|®Õ¨Õsoux_µÈd2¬Y³†yóæqÚi§µmn†« úÙgŸåرctww3wî\fÍšåºÛa§Å5·+[ÎÉás­D£ì­‘.¼JÚ­àùçŸç’K.aêÔ©M__§ÂÕ­H&“lذF‰ÇãÌž=›Ù³g;Z‰µK5ׂVÔqr1ùV¡ÙwjVþŽ•Q%…alݺ•×_k®¹fR_lŽ èJ¤Ói6nÜÈo¼A$FØN §©æZÐÈôæN Ÿ›Úq÷Ð ;ŸÏ³víZzzz8ï¼ó9ÜI‹Ž$èJd³Y6mÚÄîÝ»Ë ³gÏfΜ9-O“uƒj®õFŠh( ›+¯5NJמHSƒ#GްnÝ:ÞùÎw2{öìV wR`Rt%òùŸgß¾}œzê©®?'ŠzÃçÜ”)W :%3²T*±qãFR©ïyÏ{\½-nGÐ €aìÚµ‹Ÿüä'L™2…eË–Ñ××Çüùóéëë›tr£ÃçÜ\S¤Sb¼Óé4«W¯æÄOdÉ’%íΤÁä–x ‚ÏçãଳÎâ½ï}/†aðÆo°iÓ&2™ ±XŒžžæÍ›Ç´iÓ:š°Õcmd4Ìh…ðíßœÚlG'Åx¿ñÆlذË/¿œ)S¦´{8“ ž‚n ÃààÁƒlܸ‘d2I</§§Ï˜1Ãñ*°´{BÔI5E:ÅÒ0 ƒ—_~™C‡±råÊŽ8NÝ ÛÃ08rä7ndppX,FWWóæÍcæÌ™®;œØÀ¶5E à —Ë•;á¸Ùl–µk×2kÖ,Î<óÌvgÒÂ#h‡àرclܸ‘#GŽ‹ÅˆÇãÌ;—ãŽ;α·Ènª>×ìHµ4:¡ØÓ¡C‡X¿~=]tÓ§O¯ú{£õ ,•J¬ZµŠ`0H±XäG?úQÍcºùæ›ùƒ?ø–.]ʇ>ô!~üãÓÝÝ]ór܆À­·Þú ó·ÔáˆF£,^¼¸ÜmbÚ´i¼öÚklÚ´‰}ûöqàÀâñ¸#@ÃçÂá°+¢U´fˆ=IÆ0Œ²¡}ëi‘f¿ƒpÂoS/ Ã`ûöílݺ•÷¾÷½5Ö¿ï¾ûX¾|97ß|3?ü0§v½½½<ùä“d2n»í6^~ùe Ã`Ñ¢E5-{ùòå|÷»ßeÁ‚¼þúë\uÕU5}ß­pþ™5I1eÊ~çw~§ü*•bÆ ¼üòËD£Qb±sæÌiKžNè7R»°R©4lâq¼Hû„ÛO …ëÖ­#‹ñ¾÷½¯®eŒÖ+pïÞ½å¶T‹/fÏž=5/[ó[n¹¥.îVxíÄãq.¸à‚òÿ™L†—^z‰Í›7‰DˆÅbwÜqÌ;·i!]™P‰Z#E:©~õ±cÇX»v-çž{.óæÍ«{9£õ \°`Ï>û,ýýý\xá…u-ÿCúwß}÷¤*ÆäyЂ\.W®Ø‰DˆF£Ìš5«\ªËŸìÕçTa« …ª®öæTìܹ“mÛ¶qõÕWOøÂ>Z¯À+¯¼’O}êSD£Q²Ùl] xÍš5Ü~ûí|ï{ßã„N˜Ð8Ý ëÀW¿úUŽ;ÆÐÐwß}7±X¬üÞ™gžÉùçŸO àŽ;îhÛ …¯¼ò ;wî$ ½…°½z"µ£2]»]ÝgR©Ä /¼@±Xäâ‹/vüx'+&÷WúûûàÎ;ïäþûï硇âcûXùýžž …BÛoÂÁ §Ÿ~:§Ÿ~: ·ë[·nå©§ž" F™9s&óæÍ#‹x‚:1|®]Ð tö}¡ÝHt@#Eôné„L&Y½z5§œr 'žxb»‡ãa x=vîÜÉýÑ {í /dÁ‚€Lx<þøãÃÞòÉ'øÚ×¾Æc=Æ¥—^ÚšÁŽƒ@ À©§žÊ©§ž ˆ‚Ú¶mÏ>û,~¿ŸH$R®Øç÷ûyõÕWY¶l™«'…\.0î¾iâÑNØÐþõ½{÷²iÓ&V®\I<oËÆzá÷ûY²dI¹®B©TbçÎ<øàƒ$ Î8ã ^{í5æÎKOO£`« öŽz͵¢‘"‚aåĨßýÝß”¿§átX¼x1}}}|ö³Ÿe``€»îº‹M›6ñÐCñÇüÇ|ùË_¦««‹D"ÁªU«Ú=ܪá÷ûY·nGåÏþìÏìÞ½»ìSÚ+öM†PÍH×nWM‘L&Ú5kX°`Á°H ·7Iè¡ õMG{ïõ×_gÓ¦Mär¹r¨ùóç3uêÔŽ"ìvV ­¦H½‘"û÷ïç…^àÒK/¥¯¯¯ÑÃõÐdxí¡.†Áþýûy饗H¥RåPóæÍcúô鮌 vbœ·½Ìj-†a°uëVöíÛÇÕW_íÊßÃGÐÃ08|ø06l ‘H‹Åʄ톊}n‰X©¦¦H>ŸgÍš5L:•sÏ=·Í#ö0xí¡)0 ƒ£G²qãFŽ;V®Ø7wî\fÍšå…ꦂO#ÁNØÏ>û,‰D‚cÇŽqæ™grî¹ç:úbãa|xí¡edÆ >|xXžY³fµ­†t§T 3 ƒ;v°}ûvz{{yúé§Ù¾};_ÿú×9ùä“Û=<uÂ#hmC2™dÆ 8p€h4J<göìÙ-)•ÏçËM}ÝŽb±Èúõë ¬X±¢ÝÃñÐ@xíÁ1H§Ólܸ‘}ûö½¥b_£"*:©»6È]Éš5k8óÌ3Y¸pa»‡ã¡ÁðÚƒc‘Ífy饗سgÑh”h4ÊìÙ³™3gN]Ê·“*ÐìÚµ‹-[¶pÕUWyŸ  'šÙñ¢Èçó¼üòËô÷÷‡‰ÅbÌœ9³ªPšnÝ –F©TbÆ d2.½ôRo"°ƒáô$ÂO~òâñ8üàùô§?ÍŸÿùŸ³páBžxâ Ö®]ËŸþéŸrÛm·qá…ºÂË, lÙ²…;v +5þü2a'“ÉrA£N°4Òé4«W¯æ¤“Nò&ÿ&ÜÄz¨ÍìxуA–/_Îòå˱0¶mÛÆÓO?M  ›Í’N§¹øâ‹;ÂØ·o/½ô—_~ù¤èÇçÜoÄy¨ÚñxKÇ }}¬PNG `éÒ¥\uÕU<õÔSlÞ¼™sÎ9‡_|‘Çœgžy†-[¶044T®.ç†ÁÿßÞý³´²EQ_£“ r‚"ÊLba!ˆM@Hi,씘FÄÂR°²µÓÚ ¢V‚ ø K ‚‚A ‘!b¢É8·¸ÏðÄ{A_’7'fýªâ°«Ø'gïT*…ËËKÄãq†sa‹£‰Ôsã…LÇA2™ÄÐÐЇïßÞÞ`YÎÏÏáº.TUE €aBHÙË}yyÁññ1zzz‡«:«MÐG hjZ®ëVæ#—Ëe¨ª !‚Á ûqrr‚h4ŠÎÎΪβ, ËËËX]]Åöö6J¥Ò‡EÑhýýýƒXZZª¶tªö ©i)Š‚P(Ti鸮‹ûû{¤R)‹ÅÊÄ>Ã0ÐÑÑñ¿¶ëº¸¸¸ÀÝÝ&&&¾ý,þ'-šhv h¢(Š]סë:€ßA™Éd`š&òù<|>ÚÛÛ¡ëzÝ@•Ëe$ hš†X,öŸÎøÉ‹&š [D_äº.lÛ†išxzz‚ßi0 ]]]Uv6›E"‘@$©üHÔÒÂÂr¹\eÑÄõõõMlllx2 ›>c@U!›ÍÂ4MضýaTww÷·Z777¸ººÂøøxCNÕ£ú`@ÕÐóó3LÓD&“ÏçƒÏç«öŸÊ8ŽƒÓÓS8Žƒ‘‘Ï/&I. h¢:* H&“xxx¨öû¨××Wapp}}}^—Jb@SÃùÛL˲066†ááa `~~ÞãJ?+‹8;;C:†mÛ˜žž†ßï÷º,’ÿÅA gwwñx¼2Säöö½½½PBär¹º\²Õ‚ªªˆD"^—A ‚O½éËö÷÷±¸¸˲055åÙséÏyŸ)òþùðð›››X[[C>Ÿ÷¤>¢Za@Ó—ŽŽ¢µµ333XYYñìBëo3EÞµ´´@R©äEyD5Ã}K:†…BÁ³&''1;;‹ƒƒ!°··‡P(MÓ°µµÇq‡<«‘¨xIH_¶¾¾Ž¶¶6Äb1ÌÍÍaggçGÌX&’šˆHRìAIŠMD$)4‘¤ÐDD’b@IŠMD$)4‘¤ÐDD’b@IŠMD$©_™ædüLš IEND®B`‚mpmath-1.0.0/doc/source/plots/spherharm40.py000066400000000000000000000010551316273626600207300ustar00rootroot00000000000000# Real part of spherical harmonic Y_(4,0)(theta,phi) def Y(l,m): def g(theta,phi): R = abs(fp.re(fp.spherharm(l,m,theta,phi))) x = R*fp.cos(phi)*fp.sin(theta) y = R*fp.sin(phi)*fp.sin(theta) z = R*fp.cos(theta) return [x,y,z] return g fp.splot(Y(4,0), [0,fp.pi], [0,2*fp.pi], points=300) # fp.splot(Y(4,0), [0,fp.pi], [0,2*fp.pi], points=300) # fp.splot(Y(4,1), [0,fp.pi], [0,2*fp.pi], points=300) # fp.splot(Y(4,2), [0,fp.pi], [0,2*fp.pi], points=300) # fp.splot(Y(4,3), [0,fp.pi], [0,2*fp.pi], points=300) mpmath-1.0.0/doc/source/plots/spherharm41.png000066400000000000000000001117721316273626600210750ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwxÕÙÅ«º*–%÷ŠLÇz'‡’„ 1c „PbZ€@ò9!”ši¡:†`ƒÓ 6cŠ»q“-«í®¶|œ{5#y%­¤]iWžó<‚öàÁƒ‡4…GП¯ž Âá0uuuõ¯Yµm-´=l-ðÚCBˆÅb„Ãaªªªðûýde¥.(žÚ¶VŠ…%iÏ"ñЕá´‡faƒ~–c±XJH°¥c6g‘ƒÁ-‚‘–¸=ÒöÉðÚC\¸33,RMtMù×MÁŽ';;»Á1lªŸÝÇZ$¹¹¹ž¯í!£à´‡-/3ÖTtg’ŸÛ×vÃýМÚöà!à´‡zÄb1B¡P“ÄÜÔ¶xÇI7²k.õϽ—úç!à´‡¤ffdšóµ+++ÉÏϯßÇKýóÐðz+Fã`¢¤Ó”W‹Å„B¡z%jÉ,SÍm‘¸3UšKýËÎÎöª#=¤Ao…h+17µ¯UàÁ`üü|ü~ÿåßö½YYYõ_™Dh^Ꟈ΀GÐ[R‘™‡ äääP\\ @]]]…iaíƒH$Ò` ÙÙÙié[·„–Rÿ¬÷,m…GÐ[ ZÊÌh ¬ø|>ŠŠŠ”z7E¶V97>VãFKî}3Í:ˆ—ú^u¤‡¶Á#è.Žd­Ïìóù(((hwE¡U—vâÈÉÉ©'mÛ§Ã¾ÖØÉ$BkÉ"‰—úgÕ¶‡­AwQ¤‚˜ƒÁ uuuøý~òóó“1Ìzø|¾êÞ”ûüVaÇóµ3ÑïmMêŸÏç#77׫ŽÜÊàtƒÛ~‡Ã´ûxî mÄßÚJÍUºm÷þVm‡Ãá“QW FÚ' ›ã¥þm=𺋠=™M!S[[Knn.ÅÅÅø|>@«K²S…x¤ νhŒlœú—)p_g"©³H^:¦Ì¹}íÜÜ\€fƒ‘v{¦‘™—ú×µàt"‘ ;è–Èñ‚Á áp¿ß¿…úŒ·SȤòæ‚‘Ö>H§`d[Ïé¥þe.<‚Î Xâ°¹ÂÉÈÌpÝùÌM!‘sfò?µ›¨l¦J:#Sáû{©é 3m ¶¤ ã=ÄGsÁÈx•‘™Œ/õ/Ýàt#™6˜ís;Ñ”EÒ\02^5eº#‘Ô?p®Ñ[!yð:Ma‰¹=*·‚NVÐçóÕ?â']å¹¥`dc_»5ÿÒé5•úÏ"ñRÿÚ Ó ÉÊÌp÷ÆhMÐCòÑ\02ÑŽé’{îF¼lDRÿš"m¸·„÷ßš&HEiv4­_…Ûï÷'c˜)E:’PªÐ8k¢©Žv[&ÚÍ¥þ5^;ÒKýk ;ÉÎ̵û´vF·nÝ’þ!ßšˆ´£ÑTÇ¿@ –ÁÈö¦þ5~¿—ú×Awl°ººº>¨Ò^4VWW'ýü5ýs¤ ,QåååÕosûÚ-±Ž FvFê8Õ‘[CêŸGЌƙɸ%+˜,´¦HÆCÛМ¯¯ã_&.?fÑ\I¼B"÷*í™v­át"^ÓüöYg=òMOÄË×N‡"›T žEÒxÁ_ÈüÔ? ;Í­fÒÖô9[ØÑÀLúp{h}Ç?Kb™FdÐô‚¿ÍUG¦{êŸGÐ)D²{f€ÌËËó M<´– Üh®22S;þAóÕ‘Sÿ.\ÈÞ{ïÝÃŒ  S€Tdfx€R–*#»JÇ?hš´§OŸîtWE*zfl-ÀLûßZÐ\02;þµé8^ “wE˜EkþØñÏûêUzH'¸}ítêø— ¤Ûø¼ÿúv¢¹`"h¬Hc±X}¿ßßî53 ^vH梵ÁÈTÙ´w± »âõPh Ü)À–,[¾›©º’‡æ‚‘©Z~¬=ïM7‘àt+‘ìž ^UU•À¦ÆæÎÉÎÉÉiòQ×#m-uük\€Òš"›t#ØöÂ#è‘ŠÌ ŒD"tëÖ-%ÀŽXÐ*»*K$Ù¢BÒ@çOz„½u£-ÿâMöíù¼§ãZš]³€=‰°ÊÐi2Ô_,£¶¶–ššòòòÈÍÍM 9§êÃfÿQ¬ò‡Ãrë­·QRÒ›ââ2JJ¶£¤dwJJúSRÒ‹îÝ{Ò·ï6Lš4‰ÊÊJü~?yyyø|>"‘¡P¨¾%e]]‘H¤Ë©!­ƒ»QR~~~}QVnn.>Ÿ¯þóê?7Ñh´ÍŸ›h4ÚéYRá)è&àž¹kjjðûýíþãÅ Z+ S`=óšššúÔ¿ßýîJî¿ÿ_À@à, p7üÀ/€Ï¨«ûœÇƒî øØwßyñÅgñûýõ÷&//o‹ R¦el èLµÙTÇ?·Òõû&Œ¬ªª¢¸¸8eãn <‚ŽƒöffÄCSÀT6²ÇNÖ?’%Ñp8LAAsæÌáÈ#Oò€£nÀ à)³í³ý. \ <,äý÷ OŸÈË‹1wî 8°É ’GÚšƒµHìÿRNNN«;þUVVRRRÒä9jjj?~<%%%”••1yòä¯?žÜÜ\î¹çž¤]WzéùN†µ3ì,ì®Ûo+Ü6@qq1ùùù[/åëêꨪªôá¿æšë8òÈ è#Ôó`#p,ð_ p5"î?×Ë€Ef_PG(TÉèÑqÐAÇÄíîgI;//¯þ1×mØÇÜ@ àÙ#„tôk¡á¸,içææÖ[$ùùùõämES `êÔ©LŸ>½¾(,ž~úiÆŽË”)Sظq#Ë–-«í¡‡âàƒNúõx£ ƒÁ`b¶h‹ÊF£ÔÔÔ(,,¤   É^©D{‰Êö¬vO0¯¼2üãD¼}¿×gË ÿÆüü°p°'pCÄNCDÞ›… RZÚ{ッÅqÅ#m;ùy¤½õ¢¥‰Ã>y5&í8€H$»ï¾ËYgÅgœÁüùó¼wÅŠ 4€!C†°|ùr-ZÄÊ•+9à€’~=[µÅ‘hivkÚ]XPP”FümE{óAã]G8欳.þ¬¾^5ïê îBÀ‹À/làT`-0˼÷zDÚ÷?fÃõ\~ùµÜu×Ã|þùœV_o¢ €2¹k[º «Ü7ŸÏÇ6ÛlöÛnËÈ>ûìl)nÌÒ¥KÙo¿ýXºti=YϘ1ƒÕ«Wsà 7ðÑGñÑG±çž{&gl±Xì$ƒ¶´¶gF0Äçk¸¢E¼cº€6¿3¤*8Q[[Knnn«ÊÄ[ºŽ=ö8„/¾Èª€%ÀñÀæÕÀ—@wDÖQÈ‹ÎÎFvÈ-À•À?€'À¹@-P,`åÊoèÖ­[k/½Åk´¤í¶Tܤm[¹¦ @ZÇÞ»Ö|Î;Á`°Þþj-^xáöÜsOvØa‡¸¯×ÔÔpÎ9çPZZJqq1#FŒ`ðàÁsÌ1,]º”¿ýíoÜ}÷Ýíº7¶*‚nkÏ [×A»€mùp¤Š @}ÏÛD‡©­­mò:6mÚD¿~C€¡À­À߀+òÈÞX< |Ôôsȇ^܈†§÷=Í~ù@ Êþ(Öë™1ã%ƌӆ;8“v$i°œRg+í`0Xß÷"Ð úñÇç„N`àÀ)YÛ°ÕXíÉÌðù|qƒW™Ð4k&R[[‹Ïçkö:~úÓŸ#u|Ÿù¾Ùµ@.RÕ9æç“¿Ÿç¿F^õ*à"0ü"ïˆÙç`à lŽ5ˆ£Ž:‰éÓŸaÿý÷oý H %láMSý‘;ruŽtôÎ3!HØZlÞ¼™îÝ»'yDíC—'èd”f7ö Ó­hSH¤,¶5~ù{ï-@Äüð"ÑÓÍ‘| Üa¶Ÿˆ{ ° p•ùŒþ|DÎ;#בÝ1ôf…@1Çs/½4•L~ ¦)4×¹³IÛCòQ[[Kaaag£Ò“Y’wfF2šŠÛ²S[hËšÓ•œ›ƒ½7UUUäääP\\Ü"9õÕWÀ óÛ*äO–â|ŒvEùÎg¢`ð"ÞÇODùÑA`{d{üx e|”ß;"û¤èÁqÇýŒ—^z©Ý×ßXÒnœ=’½EöH(êÒÙ#]m"JÇ1]NA·¥i~"‡ÃTUUeT ÐxÙ'áp¸Þ›n-sÕU× ßRà dcü erlByÍP ÝÑÀþæçO‘š>Y"ãÍ×7ȃ^ ¼‚lŽÑD°…Hª2~ùËs™7¾wç£9¥¯c[[”vºGºZíEº]S—!èT³ ië3'·ÏÜ[föìQïdä+? Ìê€KºÎ.¶ÞE„ rý="óI(Kc;à-Dâå(úà(à=तû!ˤ «ÖGÞŸµk¿O«¬†Æh©c[kH»«*p-#óžÏÁ]ä.n/Ü€ÖÊÈDr¶~¹í'ÒVϼºz3J™;õÙ‚¼è] T´R„<éÕH9OnF„|Êþ—ùy!"íeÈ‹®CvÇL”K@ªúm”ÍáCÊ:(£OŸmZ} X,ƪU«xÿý÷ëFY{Ä.bš)öHWTÐéx=Mж ZMM áp8)$F©®®Þ¢0]ÿQšƒõD³²²ò™›C4Zì܉”ôYˆ4' ?:еÌ;‡ +c?äE‡ÒôŽEÊ{_¤”ƒ(+d4ð¡yïN(`¸©ç0²CB@1ÇjóõtyäzöìOIÉJJ¶¡´t(;í´7?ùÉ/1bGJJѽû† ÉÌ™3·ð´Ý+O‡Ãá´'íLG:Þ׌´8RÑ4¿¹Œ†TϬÉnjdÓÿlqMs6‰£xY ѽ±"ãù¨cÝH”åQ€ˆ¸ ‘øà3ày`%*Rù8 eƒŒ@êx9"çmÁ¯EYÝ‘‡ý²FúKX¿¾Ž©S§rúé§'áú’ƒ•+W²çžc¨® N~ækš¼r‘§¾3ð=°€Í›kùÙÏ&RP_~ù1=zôh`XKÄ’v¼Æ?í]…¤µðtÇ £tS™íQ¸¶ARk2ÒûÄkÌÔv"oxð[T`r2"ìã‘mñWD¾÷™ýŸ3û• `ß™H?‚ý?¨Ð¥woDÊ›QëÒè#BD?¨1¯Q&NœT#èLÌ™3‡’’žì¸ã.TWg¡I¤PŠ, ž¨šr{4a}‚ª.›ß‹¨­íÍС#ùöÛo;‹Õ“p㶃[(j`¸IÜCæ"#tKÀ¦ IZBº¬Ø^í^nʽx{š—Ç%R²;"r\ üJ‹¢æñÈ#î‹ÔóRdqœ‹Hz"pðOTyx "îïš*½oΓH½\ÊüfÆS΀#)/w:‹u$¾ûî;FÞý+ùÌxóQñÍh; å‚ס'gÐÂ)(Pzð#T¨3ŒÝvÛµk—¶m){ĽtT*”vº)ή¶š ¤¹‚¶ËLYòi*O±µ :‘ ¶©mš••EQQQƒ²îä^Se[Ì@$»;²7@£=PfÇkÀdDVç z-"ðeˆ”ŒCÁÄQ‘Ê&d™lF9ÐûšãnByÐA3%²Éü\C8\ÅÕW_“ÄkM Ûn»½!çBd] \Š&¤,4Ñœl››jž…¼ü}Ìï¡{–T÷j €}÷=¼McjªÅf²•vºªóöÖ:¤Òš „ÖLôÒT°³Ñ–14ždÚÚ Qäåe#õü ²#nA–GʲX‚Tñ'ˆ¼' v¢+Pîó)ȇ}‘Ó (Px.p›Ùw²9º#%Þ Èê¨EŠº‘to €;îx°MOQmÁ‚ ()éÅڵ刘s•ñª¤¼=A‰ãPó¨×Íõ‹ü÷Єu**âÉBÔƒøî»oX¿~}RÆÛQ¤ÝÙhϘëêê’«I.Òš mïÖ–ˆ§%í®ôûýiWØÚv¦‰ô™níq[ˆ½ÐÇ¥¥Ô]‚úlüø òEí×£&HÓ‘²¾ùÏŸ"â®Bdõs¤Â× kcRÒV)g!ÏÆqæòÑäÐ(`̘C“r­Íá”S~Æ~û‚¹©ù+/ïCÒ+P6ʈxoFD}µ¹ŽÍÑöG؃ȇÎB¾þ§@W^y=šÇï–šÙÇ#펚ۊöܧªªª¤wMLÒ‡¥š@"7¼)"êJ@÷µäååuø$så•—#_5°}š÷E®;¹^ LE ÷.8K€•àX6§¡ É7ÐSÈ.@1²GV#âφðÔSÓRv-ñÐT3ûx+Øl’t'íD‘Ž’ :Ä#h÷MÅÅÅi×Ñ–”nãkI´}h2ô)§œ‚<è:DÀ_—"²}œ~ÚÖ"Ëb<ü‘Ùï²|©éµHqþ¶¬Â .DdX`ÎÙ Y%H9oBj:³R’]SSCIIOb± ΄q&š˜›qM@O Sõs š ®DÏ3æh•èIàä?Ÿ€žŸ£Ô»aЬœÎES¤m?[nÒîl¥ÝÞNvÍ­GØYèíF*€©ôåâ;‚™RëëÁÜ„Hµ²+*QÖH¾VI¹k-j=ú+”ùñžÙDLkÍþ7!»bJ©ün›Z—‹Ts>R©›Qà0Œüí¢ÑÜ-ÒÔڃŋÓ¯_?D£Ì9{ ¢œÌÏç#kã\TÖþš¹/;›£œ€¬›vxz:øÒ¼~ ª˜†z‘Q.xzö|±ÁúD”vG“v[ÿ?ZZ0¶³öiv‰ÞðX,Fuu5@JZ€¦’;™Ëf%sR),,£¦&Œ]`oóÊí¨Òa(Ka2RÉSµ±et¼nö©Ç2¤<A…*¿FŠs"õ(*%ÿ"æJO ¢¢d E$ž T°ûîc¨¨XÛîë}ï½÷8ꨣÍo1¤¼Â\ÏL¤ò¿G¤¼e¸œˆóÝè #øÖ\Ï|ä˃žAÖP"þWÌuž†4Ò!˜Ý,i»ÿïlHÛšÕÝ‹ÝÝ{$™ª=tŸ>}’2Žd"ã´ F"‘”SYîmlÏ<ÙÿÔ×\s"Ç…HQ>È©‘åÿPËЃP¡‰õP#«ã1óû)ˆÄ@©z¯£ W‘Â\‹”u?ä7Á¦èˈÚfs,Aj>ä‹å±fÍšv]ëœ9s8ê¨cQ_êQãEÀGæë2Ôßú déÌAÓᇂÿBÒóÍõX¼ÔŒÿSd‡DÌûýæËi¦”‰д=bíÆºººúþ#6•¶=¹ûí!ètUÐKÐÉ,'''¥ÀT÷ã°v¤¯g~á…¢`ÝdD†ãÑòU_£`]6v-A¥ÎݬP»!% p þ)ÏžHM?ŽÈp-²7ö5?oB 9‘t§ˆ¥ÙÇkûìsp›¯sÞ¼yŒ{"Í:4¬@«À|‚26 ‘EñجÅy ¢þ!kQn÷o‘âßç)â4¹ÍEÄ<‘·%˜0NÞw×%휜œ!íDQYY™–AÂŒ´8âUƒÁ”%÷ê,ݺuKëGY剿 ²*@)aÏ"¢½ å-Ÿ‰ÒÈüÀåÈ‹-@DFг"¸À›À¡(àv²nEi{ňÀEw>d5טãTšsXOºååå„ÃáV-˜ °víZ<ð s®>ÀÁȆ¸ùä_"•_„öb3ÎRÊ» Üæ‘ÀXô´±›9úöÈÆx ùù;!…žg®Ã¦–›ŸSÿ™N¸íû÷²O”¶I"öˆ—f×ÉèÌ Y²tãÕYrssÓšœ-?üLj¸BHMßg¾1ÛOG)gï#¥C¤ýò§‡¢¼àÿ 5 /G«~‰Hï>³-†|Ýa¨·t%²3¢H©g#…Bä@*ÖþžÏ‘GÓªk‹D"l»í¶ÈŠè†üïm9GžûÑH‡l »ØïÁ(SåYô$ðS$\i^£É(„„—¢@¨}ÂÇcÈ£°°¨þ•Løl$mQÚí-TI§Ey-2‚ m`0l²8#ÕD2­]n*]‹Åxê©'Pþo6ÊÈ(BêøbD0g ^× ?z"]› } zäÏBêzoóû(øöd”"‚ö!ÿº‘´ÈWD–Tf§Ú°"Ð>úè£V]_YY™ù)„2H¾@Îã‘§>ùÊšó|cöÿØ\W_”ZWj¶ç '‰OФ3ïÛżnǹ†iæ÷bœqÆi@æzÐÉFK¤í^r, Öw¼Ìäû—ö‡­œk)›!Ù-;›:~{ÐÔrS™ÐoÚ¶0•׿™Hd$R¶¯#¥Ø )¿³Ð£ YÅÈþ¸eo F6Æõæë/Hm¾ƒ* E*üa”ÕA)jpR¬=ÌïE,X°€Q£ZÎîÓg°y_®ßJsŒËQŠàL”yñsγ‘-SŒ,Š+±?€&Є³/5ûÝgöËÃIœŠšO‰,ï€\®¾úÊǽµÃmØfaÍÙ#î†QñD^S¨©©aüøñ”””PVVÆäÉ“øüóϹýöÛÉÊÊÂï÷sÇw$õúÒ^A'Úl¾#t[oŸB¡………øýþŒydm\Zî÷ûyûíWQAÉv(ƒ!Ë|Ù àßyˆävCªñ&DVUÀ¿QÞðÝȹ©àëÁÿ©ëOåP‰ÈÎsÑå˜mö~f»~¯ã¨£NhQMMœx>@ æîH9—#OÜ57¢‰#M>sÑ´/J!Ì1ã¯AjÿA”å²²JlŸŸwÄœgÊé…Ôt_s®¥¥V‰§Òµó›E<¥í÷ûëmDÛ€-°lÙ2ž|òIjjjšÍÕ~úé§;v,S¦LaãÆ,[¦î‰»ì² >ø ÷ß?+W®¬ô' iOЭù ¤Z…¶öø6Ÿ¹¥å¦ÒQA»­˜Æ¥å;í´"§åH9.CÄó²5~Š:ŽAyÍ ÎnÏ""Þet|i~Ž‹'"ò ¢@ÛÛ(CÄú{ØL›Šfû@çâKÁuüTVVÅýÇ´¾å’%K˜:Õ®³"ÞOÌ5|ˆ,Ž ‘uñ&²OnF?1ß-,ñÞeö¿­Õ¸ÉµO óM(;ä4äI×¢E †• Ü£¹?‡6À’¶{EöÒÒRJJJX¸p!¿þõ¯9ãŒ3¸ýöÛ·xïŠ+4H«Ú2„åË—7x}ÆŒl¿ýöoñÞv9©GëD¤›mÉ-Ñ'€t"èH$Buu5Ñh´ÉÒò'ŸüR™ýÐ#ùÝÈ"(Cu(X¶)Ï!› ˆåQ“ÿOáýú8¾‚ˆÿ|Dˆû!¬@„3Ç^ƒÈÜ~E2¯1û ÜÏÌ™3ücº}Ë]vÙ÷Gûc¤ÞÿŒÔþHÕþ9§¿4_û "«¨oBÅé(c4yØœæE(½îkDÞehrZi~þ¾˜5ë­ú{nŠ5ÝÆÓ”””pì±Ç²×^{ñè£òØc1~üø-ös*JÍS kg„B! Îþ׿îfܸ ú»übÈ{¶Ëb½<‚„Ï¢Üߟ›×ïBÄ5Þìw3 2¾…sBJD¸?Aä®"?Ÿù²AÄì²¢ºzË|â¹sç²~ý”‡¼©ä£~$òÅ_BЗ‘å±Ù2½ÑDñ²&&¢Bpsg´m/Âáp}“ÖtÊ‹Åbüò—V oFò½ˆh6!â}©ì‘…q&"ÎsáŽCÄ]‚¿ÂéÛÑ©ËÇŽx‘ïbœ¶§›Ì¶lœ^Õ¶(Æ­¦ëê¯ÑâðÃO0ç†üñ œ ᤒ£îr×"e¼;²'f"Õ¼²uÜKSE͸B½6º£‚ž^HÑ[u¶ÈŒíœB›Í!‡ÒüÍïd¤“— جtDæ0I è º¹å¦ÒvY›YÒš¢÷~Ó¦=†ˆæSD2!à7ˆ˜/BÖÁ§(Ûa,"äÿ!?ùCDds‘’½©Ôy潋QߎOA–!•i›%EÛñXmˤíZ†\|ñÅõc>∣é4ûmÆ=M&Ÿ£l”BDØöï0cÚ€RwÁf‹•ÈyÙ0cf^ÿê¬CU‡äáïjîÝ:ž}öÑ-îwWò|Óé|=‚nÃñ;z¹©dÂö0©®®&//¯ÝvÌñÇÏ· =êC$w RÁ+‘j¾òÙˆ4¯@~ìsÈ";äBD†·"r|‘ÿXDØ3Q6GNaJ g̱ ]Ûj€O?ý<Á`>˜‹l‡( x"Üըȫ¨Òзµh"y ©îŸáüëd™×§¡Ô°¹ö‘æõZœ¶¡óPÆË£fûEæ÷@ŸŽ8âˆænwZ  ­=c²1—tDFt: ¡uËM¥ì} ‡Ãmjü+V¬à¯ý+“&Mâ7¿ùú(-GÕuyèñÿŸÈ¾‘ó:dmtG=£·CÙg¡t´ È>Àì3æJ¤h7 ;eR¼6ýÎÂöý°ÖC˜XL×Ú§ÏD²½Ú¾5rêÈ<ŠŠSŠPàî-”ãý#Œ4:-wˆJÜs̱ÀI»ÛŒŠQV¡`è‘úþÐŒ=làý÷g6y¿=´Œö4ëOÇ>à ‚ ¢…ÃáVÑÒ>Ÿ¯>€éóùT0&‚òòrþüç¿0eÊ¿‰F«Q¬\)"àjD¼ˆx^2_ ‡;ÇNA²WP¦Ç ³í´lÔ¹¨ï諸ð|à+äý‡ì‘Dì6Åo­Ãf36pŠXl®¨fÙ²eÄby8Ùw¡”À,¤˜»#?ڇ슙ÈO¾ç_% ‘ø;Ȫ©E¹ÝVëD\ãXlŽ3 ô»[̵ýÓŒ¯–Áƒû1lØ0YYY ¾Òé&LÚó¿Ÿ®­F¡ 4¤&xáîœgÛšf l³t[*ŸèØï¿ÿ~.¹ä:êêêpòŽ‹Q~ï.HÑÎAÿaDÔCÌöµÈwžŒ¬ß ìŽkrœkŽ÷,²žB™ûO¢UVîC ÉvGävB¶ÈL< U-úh˜Ò–cŽmK©fü*b5j¤´GyÙ»"û1Ê*YdÎQ–àú9Rúö¾Åbþ+JÉ» ežX #å½Ñ¼1êÞw8  , ?*JÙŒ<ê:¾øB9¶ñšÜG"B¡Pƒ2åÎDW³8:’ _ýufÍšÅâÅ‹)..æhvÿŒ`›ÎÈâ°½'²³³ëU§+3‡©­­ÅçóQXXØb¡LUU'Ÿ|:³f½C,æGD¶="•ld7|Š|ã\ä o‹S}—ƒk2Zâé)DV¥Èú¸ )ÏP¶Æ“HYž繨4úŸ((x RÖ‡#ßyš ~f޻ɼ¯'/Ú*æ0ŽÒ·ßm0¯*8™ˆz¯ ,Rœ|å(m0ùÑ Éè 6Ö‡†ÿB#ã^œ~¶WôF½UY¾‚Ⱦˆ™3_ª?B¼•Iìç0 …ê…ˆ%lÛzÓCÛPUUåj”•ZqÄŒ=š &pÛm·µ¸FtG¦ÍE£Ñv/7ÕˆF£õÄ\\\\ÿssûï³ÏÁÌŸ¿y³~D >D‚ Œ µz jÁ9U¾A–Ä ¤Jó‘oÛ­=8õݘ„rŸEÖÄ8Ôi8ÊܘˆªùN4ïy×w™×æ#þ ";»Ðj)ŽJ©YÛÔô˜×K‘º>ùá³a—"µû0jæô{ó^Ù `V ü!rÞ„’kPûÔ•Èc>ºmÿòä¿2Û—£I.—½öÅ^{íïOSÛÙýY´Í€lC KØ©$í®¦ 7oÞÌàÁƒ“<¢ø¨©©a„ Üyç ùÞéipu¯ÐRTTÔáäÜ‹&^ßûm긯½ö……¥ÌŸ¿©¹oñ G÷“‘\‡üS«¤cæµëÌ{.D~íIHuoBä=ùÌ“‘m1ï9È*™€ˆñ,¤ ÷@ ù\Dú£Éa7¤®Ï@XRã›s„ÍØje`K¿Ae¾ú#½M0יߟCä|5N°1Œ&“ͨ×óæîhÿœ¬Œcql^{Ö„ÑY󹟄&eæÌé[ü]%íÜÜÜú¾ùùùdeeÅm»‰DÒ6×7YhÅÑQ«©\{íµø|>î¹çžxâ‰÷ÏêÙÚÚîZ:í9§õÉóóó)**jp¬¦Ž{Þy¿åá‡_C™ óPÐíló} J›‹i4R¶CZœTfOÔÓy R£³PEÞÃHmÎFäu"Ü+QÀíOˆ/CÊö¤À­Er6² F¡ b[¤ä§!/{ªöÛy¹Õ4,±E+¶©-z:¨Aý3æ¡Â_‡JÖmÓy¨5êHsŽ;‹ÐÓÃ2Dêëáîe~î“v·Mdÿ@^øs/ßE“H”U«¾÷§i3šRÚ‘H¤ÞÓ¶û5×v3Ñs¥Ú»šJGôÍ7ßܪý3‚ S…Æv@"àT>ÞµöØ‰Ž¿±rzñÅyøáGáNA¤Ô­ÒceXŒEVÂ辿Ù~:*ĸ©ÄóPÄ+ˆˆG#¢;©å·Pžqw”.góŒâô\> Ù Ç!"?MµhÅðß"{à”Ùñ9"B»—Ͱð! ! ëójûÏÌ5ŒHýoˆ4Ï5wfê 2©é/ЂÅä[e®ÿ~sÍ  àˆ”§#Kä?æûÍ}ÚÍ܇?|oÒ;ŸÅƒÏçÛ"8l­»ÞŸÝ/Ñ•¶ÓQ‰·— ;âoÑdA'›­‰DZå3§R5´¶­ªm—™ÈBn<öØTÎ9g"ÅQHÍ^‰*ò6 ˆj= ©È'q• ,† Ùöz¬¿‘Ó'ˆÔkYf#Ò~àŸI~‚ûadT£4½_š±œœŠ<íéûÐÇ7ŠªóV™Ÿí6Šö™ßK‘ ¿0oD…"÷ R} yä#Ñê0 É` ¹Ï¡'…ñȪÙhŽiïïJd‡ü ‘òæx{˜óí‚Ró¢rÈœtÒIt§ï%²þ_ãt¿tSÐíA,KÛXSFtkÐÜL‹Åê×2óûýÄݯ)¤rÕ–Dó¸ÝvF¢³¾û¸çœs Ò½‹<ÖrT¹—g"¢¿![`=òPoEÞr_;b² ‚ȇlˆ‹Q n*ÊØ°Y ÅÈšø5 (.CÊóqd™\‹Ói-JÏ;y·§"¢û¥ÛíÈ‚¹e~Tã4M²öFÔœ³·¹Î?àTÞ‚žÂæ<}’žåºsKqŠIÎD¶ËóÚt”@=G*‘B“Qùë?2ÇX D6l/¼ðÜ–¤NDs‹¶ºÓý€z;Ý…íO:]‹]Š ›#Ц–›j-:ëñÎÚ¶¿t[úf\ýŸyŒBén‹žˆ¦©F«ˆàö@~q1‰Þ…‚‰— Ÿ÷߈HByÂO¡ `ODòÛ R›ŒÈýHÅÿöƒÈÂXŒHò8Dð‡¡Iàwfÿ1c^¿'ÚÝ{Ùýw*um{¥ö@yyà#Ìy{ Éáß8}©‡"+ÅŠõµ¹?¯  èôït z"¹ M*b(•ñÙg’ ˆ—îgUv8NËt¿t%Ùö #º5dÔ˜@Ý>m{ûN¤²Z±©c·Õމ‡¿þõ>¤&ÏBêõkDÆÿE^l/TòÎ"§+q=ÝŒ”ð¤?Aö”"7Ù—!ÛYß UÞ‘Wò¯Eä~ ê½< ©õ{]r².@YŸâ¤ÙõE½þ¨Ó]OD¶¶Hsì"³½å ÿò»ÿ‰Ó[ÚªâÈ×þÄœûDÎ dODÚÿEÁîfÛÇhÒz µ,}ÃŒãqDâA|>?«W'7(ØÑp[vìÎL÷s#}ñd #:Q¸I.™Äæ>~*ÑøCf팶Ø1 ‰¿e2LB™=‘2f¶¯F°5H±ÆÐãýö(y²¾FV†¥»í¼â«Ê`^[‡¬“k‘â¶¥Ï}Y¾† aöFÊõWæç/ÿ+jÕF*ü?HíÞ‹²@ÊÑGøpä‰ÿ`®3lÆn{3ŸÈüF¤v¿CÃcFÁ‡(€x,Np¤€¿2ç(0ǘ€“B8Mx«Uò–¹þ2¤î³¨¨°cëZpgŽØUj,i»3G ãI»+ c:õjûN„B!‚Á ùùùm&¶¶Ž¡=ǶˆWŘT"U;•9ƒüâq‚] ÛÂ.⺑“mZT‹éåH©Zb.B>íZ³o_Ü«Bï(सW¡`Ü}ÈÛ¶åàÿ‡¬•—‘u‘숅(hxªðûʇ¼èwÌõX…j+ }Èo¿MF¨¢qDÎàdYìc®÷P³}ŽÙï süz2M6ƒPÐrˆ9Ï#H5¿Œ&­Ñ“EˆÍ›74þCtitdº_2®ýN ƒ:XÕœÊ|æT´µc"‘HÒVe±ÇŠ‘Ï{7R‚•ȶ8Y¶À#ˆÓa®ùLJ¢Ô¹ Pàë1¤¸KŠýßCäyòg¿AÁ\¤º÷F„÷5"4[Uw;*Bñ£4¾Gñ¿ anC“Â}ˆtwC#Íðø÷#{Åž&ÞAöÄžˆ„w2Ç›‚È=l®g0RúCÒÞÅ܃P»Õ‘sSˆ—îgI»­é~ÉB:Û#CÐÍ©WÛ­-‰ŸŸ_ïuäÚ‹p8L]]]}ÓÔ òÖ#å¼"£K‘Št{œ‡_!T¸ò "¹0 ´í‡28½AAÈ#‘¢¬D¹Ì«‘"ý1"ÄBœ‰`9RÔÃR_„‚wg Ò>×µÿ7È>„ÈyRÆß™mßcWP‘ºïŽ>â£)O6ç[Ž”ø‘æ=~œö¥cnÕþ œìÓÍõ¬Gød4yíz†Ø¥³>7×`Ó¦u[ü<8hLÚmI÷ëêÈ‚Žw>°ßï¯ÿ㦠© hkgø|¾«M'vÌÿûÕ\~¹õoïE*ô[Dj"…²l_äáÈŠÝ >ùÄVï‡÷›¯¡¨Èe!*smö›…ˆñKbO³ßÕæ¼—!‚ÿ%šlÙôóH _‡x1š<–!Ëd/d-€È³ø­æ{Rþù(û5¤€+ÌùªRÞ)wÌ÷í)ßú+süß!»å ”¶X „ÈήcãÆ–•s4eÑ¢EÌž=›o¿ý¶¾šµoß¾tëÖþýû3f̘´m…™l´6Ý/ÝýÒY=Ct¼òæp8œ+{'wS¦ÂÂÂz.Ùpx'N<Ë/ŸŒÈ-Ù{ råÙf›- ¡ì„‡PfÂj¤[“®6µ …öÈóQðoRÄÛ!ûá]”ÕáCd8ü<ä_OFäø ì=€üé_áäBÿ§Pd4¹|‹Hs 6Ú^¶EAÏ{Íû®0çß}ô›ñ¾”ÿyæØ7!Û&Šl›\sü<”F÷dõÜcÆû ÊZÙÌàÁÛðÅóX½z57Þx#ÿùÏ‹fáÚls_‹pV‚ñ›ãú̘Cf›íImLjæÄdÊ”)øýî'ž®‰¦ÒýÜmXÝ?·6Ý/¦m‘ dAÛÞ\­#—½j+ËXÅœJåoÇœ““C·nyTV^Žî0¤ˆ÷3_7!R<=®W#ëà6D˜¶É~”'ü ¾ÈÄ|äÿ!Òª@~ñDà>¤Æç›‘B¤´©c›‡½åGODD|ò¥ÿ³0ÀÙ¨'ô"d 1ïÿgÕï"¤Î+‘eq½WJÛ[Œò­CéC‘b/ÇéÄ—‹‚¦· _ý.äA?m®ç-sŸòØ~û‘|÷ÝJJl¾t¡¹¾b4igÁIñ‹™óe¡|m»ÆbŽê_…ȼ'‘HÏ=÷Ï=·3PA¯^½yúéGØsO[rÞõÑRKVwæHK9Úé\æ DÐv‘ÓX,Öd­£–½j+ìä¯X&Ucoü¡\¾üKJKK݈Të­(%®§ìùgˆ,Æ üÊû r ¥úªÙ~"ü…8= G"kÓëú¡ d%"©u(-­y_. Ô]Œð¤z÷@E.¢ÀÓYogÞ»a6"e»tU¹9ß?ÙõGO tº"3î*¤R¿AO Q¤î¿@Ž/›1¼‡üí÷‘j ÉB ,Z´‘rØlš{˜m~.5ûÖšqç I­;6¨¨cvÃY•%=)ä d/‰ø×¯_Ç¡‡ªkÞóÏOãÐCmÊÖ…¶¦ûmÞ¼¹Y ©¦¦†ñãÇSRRBYY“'+.F™0a999D"î»ï¾”\WÆ8îuuuäååQTTÔd  #t[Ðx-C¿ßßi)E~¿ŸþóäÝ^|hÛîïÈg=Ù»#«â7(Sa ò[o5ûMEöȤòAв©ÔˆüÖ#òÍC 8ÏœoNzßœ“g‘Ò¾ùÊ/#¥¾Ý44q¬CDù¥yíó¾sÜÓÍylC§›_}òÇýˆpCE*¶ÉÑufl£m²Øìû"š Ö#ö£‰Ê^CNþtNÃ&ëG¯5¯ç™í¹h2ÈFjºvy.½ß.>0÷t„Ù¾Ñχžf RÆŽÏС£ØÚÐTõ°%í¼¼¼¸-Yï¼óN®ºê*ž{î9üq¾úê«-ždŸ~úiÆŽË”)Sظq#Ë–-`Ö¬Yl·ÝvÜsÏ= 6ŒY³fmqþd c´ßï'·¸_:Yn;£¥%§R© ÷ÜsÏaêÔgùàƒïÙMFÄu1 îƒHû D}qVQ™†cÛ™×Bˆ`^E¤¼3RÎ…H©Î4Ûûá,Q•m^_ëÚž‹*€qðöˆ<»™í~sü·a½‹”iD®KpVý~ÈŒsRÓ' ‰¤RÁQöJ *dYˆ¼æ(R˧¡I«Ù8‡ É ‡8 hX±h-Œ\œ”½žHçâLPæ»]ý×}XoîkIÛErÌuZ¯z¹Ö¹À(ÊË¿¦oß!¬Y³”­ ­©6¶Jû·¿ý-sçÎeãÆ3mÚ4~ñ‹_°ÝvÛÕï¿bÅŠú§’!C†°|ùr¶ÙfV¬XÁ Aƒ:t(Ë—/OþE‘A :¤SÎd$¡ººšh4šð ÚQ~ûíWÙu׈d®C¶Ãß‘RþRÏ÷¢Š9Û´þ”|R˜ã”eß‹Hj"Ä—Qú›]q$ ‘M"šþ86@Pñ²pš}:Ƚ…ú‡¬6¯ÄYQeßÖæB× ´¾/‘‡>ÈüjÔô$*nù½9V JÅ;×£þ Ç#ÝMZÖÞ±ã³}@‚8„3?W"ÂÍ1ï±]õ"h’Š™×òÙæ›ï3ž\³_Žù½·9×nhA…ñÈöéaÞ³Bm­ŸÝv;˜T Ýš$Aûþoìj*G}4üã3ÀàÁƒYºT“ÝÒ¥KëIÙ½}É’%)[‘Å‹Å~@)­aÚ[BªMÿ–ދō­­%‹QPPpÞ¦µAŠŠŠZÞ¹hé¸gœ1ŽiÓf#º ¥™íŽl†ãAQ•ß|¤&KpHg3"‘~ˆœ¬º ›cõG¤ó?¤ûá¬pBDŸ…S8S€H° ‡Äz£ åDZ•(¥o6޲â`­9çOQ~öõ¨º±¿yÏÏQ€ñFœþÐ ÑS@_¤ä»™±|i®w¥9vkü–`í9qÝ›4aå»^ó›ûÕÝß’rN`s¡Ù¾»¹×Åf?êE²=á¬A„\mîGå­¯D“Ï|ûíWôîmI=9°+ܧªÖ -ˆD"D£Ñ6¥¨>ÿüóìµ×^ì°Ãq_¯©©áœsΡ´´”ââbFŒQOèçž{.~¿Ÿ`0˜2:cºqt¶)tAÛn(jÕ Úî÷WWW'}ìÍ´Í#¿ãŽ;ùãoGBªìL¤ ç!ÒÝõÜxÃD”f·ùÑ+Q.õ®ˆ4îF„r "¬¯Í¾›qÙ&úUÈÊð›¯Jœ%¡ªihD™ÎF2kä™×ìñH¹ÇPäÁf<™ãüó)(z "Ô‰èiàGÈòYŽHºGÛÔ6k1¸W/2¿ûÌû²Ìös ˆÀ»™m9fœÖ’yY2ƒÍµX¥ùàÖ6±O{" è/(³ä=sÏŠ€ZF*aΜÿ‘LXÛ.//¯å;í!èÇœO<‘¤`dí‡GЭD¼ãÛV¦¹¹¹äåå¥ÕÊM¿{™¯¼¼$šj´•jkk),,lyÇNBÆt:¡½vFg ÑŒ’·ß~o¿ý–vÚíƒq5ò·GG"Ü“yÏA¥á+IôAÄ}1N¾ó¾ˆÃiâ?©ìÍæ\V±Fp|Ü:µjã}ÍïÝÍëbÜlöjŽ7M~Ôwä9TŽÞß|/ñ# qÒïì’Y98+‡ÛÌ?"ãN ¡U϶aS¡¹g–˜Ãæë×}ˆÈvso³Q@ôuä¹CO*>ôDsZRl¹ÆP:áq¨ ÏÜ“\î¸ÃöIÒ5HØÖ1uf½DþÌÒ¤òCF©ªªêÔÀ[ ks$ºšÌˆ#6rÏ=Søýï¯@…+}m1Ѩúðy¤ŽcˆxÆ!•÷"­Ÿ¢U±ŸEŠ9)ÂQÀ«u€ëm¶ùPZš­¨ÛŒC‚QìŠØ²6lItN“$ë÷Új=Kü@*ùóšµ úãØ0…hR°Kfٌ۾Ԗjg›íÖ’°ø&dA «Æ–[«Ç.°?êsm«@DûOD®T‘y,οèz¤úg›s_fîÓ;¨¿wgÕ›ëŽ>úh¶tÕå® ƒºµ«ª$û¦ÛV Ñh”îÝ»§õÕ½hAIII«-˜‰ÏcâÄó¸ï¾û¹è¢«P•]zd¯@B6²(j›Žl…³ù=Œ¼SøŠlˆ"î#·“@‘9Þ·8VG" › a=_k9tÇñªëö@äÜÓŒíQäÛ›ãÚŠÃÕ8F ûbg#âMùæ}yæËöü°“Boó[ÑNs{dï¬E–ÏfœöË.X0‘ö§¨°&Œ&0"ìýÏ<©ó5(¨ùš¤^ê¸à‚óRb¹¥£‚îÊÈ‚†Ä›ö'ñ:æeÂÔ½K$i×?kYY)>_„XÌ*ÅoÙõB„û%¶ÜYdñ#¤ôæ™#ìŒúxD‘òRŸ½Å`{PØà[iµyÍfw4†ý,pªñªÍX*Í1×›ß7¡‰£ M—³Kë}[9‚“E“BÌ·‘®Í?ÆŒÑæuW›1ÄYd÷;3†1ˆÈW›1ï‹H~1*6‚lÌmºß:”á‘åÚ¶ÄÜŸñ(`xП&O¾1ÎýêšÈ”ÿɶ £:$³"Ïé`;æ¥reïd Þâ²Á`°MÇ7n<ÿþ÷Ó8eÈ%ˆh¬²­@…$–ìüˆœ^Cêµ=ª÷Bð"óz.J»ËF©zÕˆtJPjÛgˆ¨jM1Gµö2ÛHµÚÜä¨Ùn«øb89ÇY8Ëa¸öw—õæáä¨Zrâ IDAT/ƒÓ·ÚZ¶wÆj³=Ç{5Žg^†£àA¾?"Ïz~ÓŒ«*¡· Ú†Pÿ‘Û̸öFMšlŸˆU¨PsNÁé¼÷”9G°ž¥K‡SÖ?9?ûíñ ÓAÇ{¡Ùxžm:´[é·g ÆH$ÂGËœ9 ’ê…ÓÛbÊkÎÇ)&Y‹b‘÷7ˆÐ ‘êû¥ìÙì†<×qÖãY-ʠ胂fYÈó®1ÇÍÆé4çG$lÿ}8©i6ˆŽma‰8'Û¦¹ÙT¸0"ËÞèé ´T"¸Ü¼·ÊìSfƹÆc$ê—½yé_£òð7Í5ž‹£€cÈÿ;NVGÊ!¿ÖŒùA”½3òùW¢L™o±÷@ñ€µ8ŠËY·n)¹¹¹qû''cåítýìwUdA'jq´õ–É¥Û‡â+ý¶àÒK/ã®»îE‹¾(Õ·šý,GŠqò–û#Rí†È’å_µ'Êäð#ÒÎAJ¶õ¼°…¶bo"ð¨Ù·Ê¯ÇkÎ6ÛC8¶8ip6ØoÞç3ïÉ5ãQ9´^ÿùæyHÝÛÌ‘mÌûf b<Üì× =|‰&m²©þÌxÏFùâ=Ì>óP÷½þ準›ïÃÑÓÁ[H4û—›÷¾†<峑_Ÿ…&±[ÌõüÈÜ×5ì¼ó0Þ}×Y˜¶qÿätXyÛCë‘QÚJÐñHæñS¦rš[‹ 60pàHœ\]û¸_ŽÒ¿l «"°Uˆˆú#R‡ˆÆf6Ø\ár³­‡´ IZÂ⤵mrßMú¶E§Íq¶84´Ö¶“A N Ð¦¶ G»/"Þ÷PàíC=¢wsémDªÍõ¯4×aÓê¾G%Ùî—Û"kÃVD?µ\ŽüéYæÅP@ñI`?|'tM¡©Vœñqmii©tTÐmE&\K—$èÖ4¿oÉΈwüTt"šÖtÉk wÜq—_~="Œ ”m`— ZHè´üTÊ®°¯ZóšU¯‘Z-G ×v±³*{1NëÑ|ó³­¾ëaÞ×Ù Ö×¶‹¿Ú&Cµ8v 8V…»û›Mdz°ŠÜVûõ6×Q‚&™Íï~ôä`Õð‰È¶(E)zÍ}ˆš±ïŒHrNFI>RÚo#Õ{‘¹&‹Qç<Û¥sŸ~Šóuf›MU´„» É`*Rþÿ`Р¾,\¸†¶ Þ"®n•쥥<´ EЉ|@%Ðöx¶©\Ù»%4×ô¿µ8÷܉<úèsHýÑ6!Ÿó`d%|€|ÕWÌ~» &H‹܈v";k”#ålÓ㊴¾ózœå¯jpºÃU™ÑEqˆÜ¶ÝfýçÆK„Eq WlI88¹Ó6EÐf{ŒB„ý½Ùg¸ùnWgù/ÐSÃÈK.Adþ+Ta9²…m^ô_4ñ­Ç±tú™cÙ¼ep<ø›q:äílÆ{ Rð*èÞ½'ï¾ûÛl³ É„%c÷z€–´m ÙŠŸdøÙP(”’5@“‰Œ"èDA»íŒÖÖà§òÙ\†ˆ;§9eå'Ÿ|/¿ü"ÛUHÍõCYŸ¢Ì€íPž<¤”—£GöÞf¿QEÛbóÞwÐ#º]É{"\"¢2œ†F…ˆh—ã”j÷¤¡g\‰Ón³ÒìgÓèÂ8í8AJD‚¶ôÚZ$Ìy† kÇ V†!’€ºÝŒÔ~ʾx5S²‚QTQyŽ9×j4yBÅ:¶,ÝN"#Ì=¹ YAvµö*&y=©lÄÉBcîùçæ½+QvG„ÒÒ>ùäKzõêEG ž5êÞ»­·ÊÎÒ®ªª¢[·n-ïØ‰Øª:^ Z2Ÿ*¸sš Z~C 8ãŒq¼üò œž?Fí7×â4ú Ä"œ•¯b¾/@>kO<Ôß—ˆ(@¶}P®îzó5‘á œ2î=Éåãx»ˆxmÒ­µEÀix_ÓáÍæ)ÛÌŽ æ 3û-DÊÞv˜{§R0Ùÿa¯7Ûlõ`Zée4špz™ë¬0ßt³Ml_#»bN¹zRú¿2×õ5 $~ŽlKÚy~ø^L›ödZ,njIÛmdª5RYYI÷îÝ[Þ±‘1Ýì ±žÐñÚkºÕg{RÐ@dFSÒ×fbØñ¹'”ö,“åî’·råJFŒØÅ¼r$NÎññ(í«"—Ñ(xª \ŠÓúò:Dòj¤bKP¯çOùñžŽ¼Ûõ¨S]Ž9ÎHåNE$t2ò“ŸDäx("»ÏPªÚ‘þ:"¢Áˆ˜¿7ïï‡ÈRšVùZ[#Œ³DWwœFKÖî‹C˜ Ò~Ǿ8­“x.Z(wˆ¿]Ie3Nç;ù[Õn×$´ép~œ%±ráÚö¥'¡‰âCä}Hû}s}Eæþ½fþ»›ûôòßóÐÓÍ›8˃åQPàcõêï:|‘ˆd*èDàNõ‹Dœ´JKØ ë³-+¼<ôÐCœvÚiI_·1™È(ÝÔLisvv6ÅÅÅTWWÇÝ/YcHVGãœf·jHzôè³6Þˆ`#ÒxX5àˆHj>"º_ òžƒJ «‰÷CÁ»áüÔl{ù¯ýpšÎ¿„H¬©Åÿ"%y""ªïqH«g™(«”ÁQ¦¶b±§Õ¨…í }) úÍAŠúPsý«Ì5tG¹Å–ÈOE^üUhY†ú[ߎ²3BÈoß‘l¾ã±æzú þ/#ëg9Îj4mkîó*4Î6÷yšù~¶¹ßO"Å>eļe®ùdDô_R[[LiéPæÏŸÍ!Cèªhª Òv$©WÞn•ˆª®¬¬ôÒìR ›F;tÉ©ö’hs9Í© h;©haÌMÀÏP5[)RМ>Îë‚.B$tRuï"â9ù£Qà!D8'á4¤ÿEè#¶ ‘̈¤6 Ò³åæš1¬C„]‰&»:‰ý1c¶çÙÙ6cÃú϶0åF¤F÷CÖÌYH¹NBêôÿÏ>Î\ÿ+(Hw)"W?J³ëo®}5"㕈ܯDêÿD¦¨éþ”é2¥î„<üéf<ãÐ6¯û s¯ÿe~?Éã9sÝ;£àë̽Ü=‰±óÎcx晇9òÈ#ÙZà&mëaggg·:Õ/§Õêäñ‘í¶’•‘(ÚëA7—ÓÜ9Ö>úgžyR=EPÐð@»"Ë!ü<"ŽJ¤¼#ëá)D§š÷mDä<‘ç7H….@„ýN®ò ¤®×"ªB„¸Ùüœ…‚j¶C]7DºåÈ›ö¹Žcmp–ž*Bdû>²dÞ0ãY“¥ÈŸˆ A®BDy(Z>êDÀß r¿8Ÿ3ÛW™{w**Ì™bÎRÓBdüWdW¼‰l¥Íæ©ß_¡Žk¶yü먴9¶¾@Ä´"~›"öòy{""¶ëf#%p}³ÎŸ]Ðö^Þˆ³”T­ëX¶gG ‡¤mÚܾHÝ~löù"çÍ(3âs>E“Å (ü”¥q'zÚØíIæ~üOG„=‘n jzÔ=e,C ŒBä:Ã\Ç>æ8SÌ=¸©ä§ÑDr4²”f"µÞv£æxùæo3ÃÜã}xè¡?sôчҿR‰p8œVkpF£Ñz‚vÃÚ¶¨&''§^IoÚ´‰Ë/¿œyóæñÙgŸQ^^Nqqq“ĺdÉfΜɔ)S…BÌŸ?¿~2ÌÊÊbìØ±wÜq¬^½šªª*FŽ÷8mAF c±äçç7kg¸ÓÊRwáGK°i@65¯¹¬’T¥ðú©ÅW_}ÅèÑ{#Ò+CöÃ`Ô?b("a[RƒH¦"Ì·PC%[”B ƒà4¯#;¥Œ}”\‰³´”ídW“•‘g¶ÅpÒáJqzI۪µæüå8«¹Øôº"Õró}à.”u² ¥´‚“ǽ©ñ1æ\ PI÷[hòºYC$ß‘ôP´‚öl¤zkîáãHmï‚ö á@|Y&?AÎ3(Hy.š<CJp+š8§#~¦ùý)s?¯Djÿ{ ›¯¾úÈXY©AG [B]]]½ÑZÜzë­\xá…Ì;—òòrN?ýt¾ÿþ{Î?ÿüûí¿ÿþdeeqÕUWñÞ{ïñæ›orõÕW7ØgéÒ¥Lš4‰G}´M˦>Sa°ª9ÑžÐ]bÚÚ>Í©oã{¶Ã;PS³‰N8™7Þxõ.Åi*4®¦¢Çÿ R_""¶zì§¥ˆm‡»uˆ„#ˆC8ùÅv=Á,œsY®ßm~qx«1?i¾ÄYŽÊ’:8ÍïÃHÑÿàŽG–ÇÈš(E9Ò‡™ã<ù DÔÌ{·AJþr4AíŠÈú'H¿ŒÔ÷HsÌÉæ>ÙÕÊ"e<ΜwŠÙïB”Eò8z˜h^¿ ¥à…ì“íЊ)çš1¾Š&ˆÃ̶»Ìëg¡Üé—5êÊË¿ekA{WôîÙ³'ÇsLý¶aÆ1}úôû-Y²„É“'×ÿû￟Ã;Ú¼?‚“Úfÿ®ýR߈£!6"•¹©Î RôëÌïVAGÌÏÛ¡TÀQH5‘]Ôñ6È?~erÔ Rü›9Ƈ‘mÑÙ 5(˜¸'²2Ê‘mr ú7zY>4ã±ý5®BäüRÛ§¢ m-p¯¹g¡2ò5¨¨çdDÜ÷›×/1÷õß(3åh”r·¹+jn¼ñR~÷»†*0YH7 …ÈÉÉiS‚Àm·ÝƵ×^›Ð¾“&M¢ªªŠŠŠ î¿ÿ~¾ùæ¦M›Æ¤I“6lÇð¥(‹ã"”±Èì÷”½r "âùˆˆ¯0×xRºÛ!ý "áÞÈã~ etCJý sžþ(ÐxRò‡"’‘û$3þ{QfFZöê߈œ/CO Ÿ£àíÞÈž¹MšÝ‘µ23'w³yóRt#è`0ØæŠÛ[o½•ë®»®å;]’ ›SŒÉ@<‚vç4ççç·é¯ÑS2 ©Ÿ±}üjo›Îdû¢ü{gÞVy­ûŸgËCœyt&… a<@Ë !$……  %è…¤½¥·—r€0ÜØe(-iCiÏ9 -cÉl; 9Ž-[¶,éþñîOÚv,[Ö-%zŸ'OlYÚú´%½ßÚïz×Z‘6ÁÙ½{7£FFl*ó ƒ C„kz'û‘¬p‘ÕéHR€boIê!4°m£ Bh×í¨"ðMÛmÆQrê²÷HŠ8Ý:ÆýH )FÑê,dÕ+BnŒg­ûôE2Ï£Àw­Ç7!’nA¤ r¼|Hh¸îdä˜ùw 0Eë×Yý#ÒÆ§[·€4í{­ûºBžxân»Í´Euñ”U' MMM1¯çÉ'ŸäþûïwxE΢k˺]ÙÔD¢ÄÝ÷#‘ëöûý¸ÝnZZZ(**Ššœí½²³³ÉÏÏ'??Ÿììlü~?ÍÍÍx<šššÙH¿úê+‹œMÔ\DhìS.Šˆ7¢(¸ÚºýšY{k 5÷7U{¦ì»‰b´os¬ï —ʉÈ—ôâõˆAɶÇQû6Šb¿FQõÁ^mÝ'€Èþ.ë~Í(²þ"ð=èJàATœ³ÀºíDìÓQ$ß„ˆõBÞê›QDü8Ú8#ÁoCŽ‘ï ¢^€ÆvýodëF²Ì~~ûÛ×}CÄ34YF×u„”‹ [ZZZ•|¶‡D¶…Pw¸––G;å™cG;D 3‰)è‰V›7ö¿H2m;—­\¹’ /¼Œ6m¦~»‘ƒ$ E%ÖïÃÙšfLc‘¬qÒ^{êËá!DÐB½9LèL$‘ôAÂTT¸ò[ ›&FYkÚƒä‡_ZÇûÒ½O#4Af#’ELÏçkMXëi$äÇΰֺë7¬×ö,².š" Q$ld‘T´ÅZˈœ' '‡ÏZç$ß,FÇå@o23_ ¦ÆŒÔr¦þÀéDX<ˆUrñûý<ýôÓIA§”‹#RtEív»ãjüßUðù|Á)±¬5Zr†Ö•^{ö챑³iÊo&´ AQq ’>DäW Mì¾%ɦ¢2gÓÚhÞf$•™À"ZŠ;j­ŸW"çÃ>TR€¢×ZTÕø}´\…"g3YûFí^Jh¶à½„,u>¤eoB%òf&ã,ë~}­u¾†"b±ÿy«· õù¨èç1T.²¾€|ÒÑî<×vìÛÑÆe<ÒÏXˆßßÐÑ[R!âŒæŠ7Ù‘r‡“s £…}Ža^^^B½Öñ”“766’——GvvvTkµGÁ›ÐívsÔQ£ E¸µHj¨¶nó oï¹ÈÛ;E…~ÝŽAÄVˆq'¢HÕq&¡2ï:B]茥/YÍýÿd=þ>ä3þ?Ö}oFÅ#WêGr?*ÆiFE#¿³½²{ú¬×qÚt>!4•û>T)hF~}éῲ^_!rlµŽ…µÖ‡,òäÚÈCt ºz¸m$¿°Öv²õܦYÔLäÁN‰Ú³nC]]]ª9‰”#èH‚nii¡¾^Msss»¼‹X40k5Qs´’†]žˆuòûýôïo:Ôå"ò„œßB‘ôYˆd2YÿEŠw#yã $wT!"*GäYˆÈØÌ74Z·—Ð4”\”àE¤Ùˆì>G~äÞ(ñö ’;v¢êÀŸ =׃HñA$/¬F‘÷*ë±ãlp"è­Öï¥Öm÷:kä•ÿKÈñòckÝ?F:ø/­su4"ú›¬sðr´¼b½®ï ²ž‰¤’»ù{99~Ç¿ÉP[àR¡Q¦8w9f·£™>Íæ÷dƒ}­måŒH'›È9Þ/bqqó"cJœõG6´+‘ƒâ*¤Çްî?¹z ¨s."¤eˆ´Ö"™Âx°ßÚ´5ð½ÈýQmÝïT–½éÉ»ìñ+´<„¤‚sP$r\Èt!"r—µîf$·|‚¤”ˆX$ ãNn;n-!—Êü‘m“­µ=b;‹oZÇû•õ:g¢Íe¶õsІu¢õû$DÚã)-]œÄ ó»©A§T/ƒHÄÒ/£½c466Ý æÃíóù"žøËsƲn¯×ìûÜÖIbÜ%2MÏÝx£$ŸÏÇqÇD]]=Št YŽADZC¨„õ›¾ ‘\ JäíCÕw°n;ˆ"Ö (ê4}š3­ã™óe’ÇB-KÍD’H3Þˆ)‹–Ü1%(ÁV䌃H9‘è0Ô?úÇH¾%ü¾BZðP´• ~GYÏÝézëq'£ ÇTRþÉ+§"í{ºÂ•¡7 ŠÃó¬çú y9Qz!ÍþÔ¾õPÇ¿þõ}ûö ÚíÖÈ–––Vïs¤ïw¸¾݉X{ƒlذ^½zR˜lHž3í â|>õõõøý~ŠŠŠùtÇdïphk ÷a ·^»u.ž¹pFŸÿáHUÕD¹ˆÜÎ@‘ﱈ„Vjf4ÑÛˆxÆ")â÷ˆë­ÛV"’í…ˆ8‘\¡~Ñ&ªö[?7£¨¶‘åTð2Üú}%Ú8v éãë9g!ib%òB߉G#§…Á±ÖóÔ[¯á $7 E„~%’5~H¨MêÑ(r¾Þ:Æ›¶ãMC¤ÿ´í¶ã¬õð÷‘Ÿ$yŒGÑû„Ô—‹.ìm5'''¸yŸ~KK MMMAk¤!î#©"q–+"õ4'AB4Q³Ëå K®án7Z³Q³Çãá£>âÕWÒ#éb1JýÅzÄt¹^‰JšßD„~;Špw!™ÀL!Yˆt!yÃp³íù 1ƒ"ÏÖm×!M{ˆõÜ3ä’‡&Y…ˆù1ä2Ž4éYˆ¸ Q?ŒŸ"Ùáyd“{¥Íù‘u›¹Ò˰ó"ssÛ­ç^gÝVƒ6¡ÕH™‰tù›­õƒ4üL$e¼ŠŠÛ¬ÛF;Y°`ÁŒšÊÍÍ vNNN°Åãñàñx‚’íŸõÃE"I‰#å4èD}@:êÓܺ“ MÕbNNNDM˜Ú"ë\¸ã477“‘‘A^^W^yúH r.CÑä~¤!_‡’lÇ!l@º°Ùì¶¡(úäXè‡H³/J@‘èfkBÉBA™#Çúùk´9¼f=n?JàA},~‹"ýÏQt>%/ÿf=÷sh³8”lE„YŒ,rPd|3º0_š$ä4)@'ƒ •¥7¡^½2ÊzÜˈÔZ¯g "ìoZçø}ë¹>B=Fî 3s;v|µa®œÚŽ0¸3g¦–$‹ÌÏç·®®.éçB ´Óðûý466’‘‘±O8–†ßN Ö 2&âo›Œ‡œ–i-£FHÇLªÞ„.û›P‚®]‚Š"ÁÿD‰´ëœ±é´(!W‚tÖþH†4X“3Å(fª¶9¦aR6²ôí·"jÙÙÓº_3*|©Dë¹hóøYþ£í\d½{EÐyȯý=¤ŸŠ®"”àó!ýû—Öko±Ö™®NA‰ÊbëxÿBW wÛÎðÝÈ÷ü˜õ»×z ÷X똀ª"fгgÛ¶mÆ)ؽì¦e@4]‰xÚív;^–tÿ6ØMh+DãiîŽËDz{qõDöˆ×2 IDATÛýfëØÃi7¡ÀŒÍ2çÃDÐõHgˆ¹y“kiÖ^¤O T>þ¤õøíÈmRnóZDŽ'¡¨u"àÿ‡Èµ™ÐlÄ,B-MËІt,Ò—§[ç£/¡Ùg£ŠÆƒÖï¦Ò‡,y3‘gÛÌ`| m³\ý¿±mÛêCÞ«DÀôš1Òˆ;eײMÕjwË€Á\ $;R.‚v‚£íÓÜÞõákÛËÚèâ@\•€ ²XÅr‰Ú6j]\}õ „ÚžBh´Ô)(gݶâ y@ΈsÑ¥ûŸPIö0UŽGä—‡HÔy ºô¯&Խμ™„š'e¡ˆ»‘õ(DÐY·íFäÿ?(1w'"è:áž„œ$_Šî{[ÿßÈß$AŽ ÓÄïë9£%Ë:þo­û˜ 3õ¨Æ8Jz£„âv¤›cU" ¤šž=‹ùê«íÝ6᤽(Û]eÇA§Š§;å"'ȶoB{žæD>¼ˆ§u)„¾,@PW÷ù|´´´oäËc®6²²²é{pÞy—Z?õC:ê äd˜’~¿Bu-J|@¾çz¤£æ!Í÷ueîFæ·Ñ ÃSPô¼ûjBUˆ¦ñ’×¼bë5åÒ§O ûöùQdþ8ŠB}HÇîOhìéH ò7F}?Ú@ ‘s¢%åê¬×2 ‘±í˜%Èh.›QñÉ¿šRîEä¿ÙúJP4Ý5=zÜzlÚžDN’]Öó6ò³ŸÝÃÌ™w·Ú$»JîŒÔÚ› h'ms »/»;ˆ2ÈR” #AÛ7 ^²k‹DFÐæ’1žþÆ>×ö‹Û^ÄcHÛlhvÂ6Í©Úk¡ZSSCY™©¬«GÄv"Ö>HCŒû5$OT!]x="ðg­¿M°Ž³ñ¡$Þß Mï®!¤s{•ZÛõgؽ{ÿüç?¹îºï#_Šäƒ?Xùw´üt"÷sÐÆòk­3‘­nÚ€|H†1ø3­ãÖ  Š‚sÐEŽõZ?B›W!¡ÈÞmýmŠ êÝH¨k_=àã˜c†ððÃO§Øßã@ lý í'ýœ@,Ÿy{”m|øfÝm…h‹i⦒ 8¬ ÚìÞ¦O³Sõæš®±ùÅ¢‘Ù£æH¾ m nÌLQƒ±d™Ñöv f†cö@N‰¿¡(¸ I¹ˆ„"âÞˆlcç"2܃ˆh*"³·5ÊD䘢Í"$kT â‚PBÐXìœtÒ8²²²¸ôÒK­ÇGë‘Hnñ[Ïy7’ þÃ:î—„Úb­ï-õ¯@IÍ儦k»õû8h½îM(šÞ‹H6ÛúßÌ%Äz~3)毄zc·‘‘Enn99~Ž;n$wÞy;W]uU»ïcGÎ û?ƒDVÅó™27Û ]ÝÅ#q¤R’ #•bq…"ÿÁ„š B’Äÿµžï´¡ä#™£m$yTX÷›Ž$"äTù="ë¿ éãׄڤÞk½æ< ßüæEáO:‡j²]ebËÉÉÁårµŠ²srrºUËŽäûmßlòóó¹òÊ+ùÑ~Dqq1¯¾ú*7Þx#eeelÞ¼™‰'¶ú÷úë¯Û‘Ž1‚íÛ·ëñxxî¹çøñœPžII‡×륾¾¾COs²DÐö1Y‘Dªíõù°[¦œjnIC¨öðÜsÏ!éa5¡Ù€¿B=”±î•‰t߯Py"³? ’\ký};"ç7Q3¢f¤Yg¢(v„u ÓÇ¢ãu†Ç;š;ï¼³ÃõÞÿý<úèÓÖóÏFåÙ£>ÃQ™õ#H¶X…ú]œJ¨ßÆ÷¬5|Ž,xÿEþX¯ù6B½˜¯@ÒÅ&­ßŽJݧ ÝyÚØ&¢É…"óY·.ú>íY$ Y¶-DŠ%cºÙµ×Õ±­ó¢;|Ù±"++‹ÓO?›o¾¹Õíï¾ûn«ß·lÙÂÃ?üÙÞ;º¬¬ ·ÛÍ=÷Üúuë˜?>×^{­ãkMI‚ÎÊÊêÔÓœ íóùhhhˆ¹¤¼£‚“hÑ^™v,xöÙPôY€Ü/jÔ‘™ét¤-¯Dšì…ÈÍzT F–´W¡èõ uŸ*V#2 5äÏÊÊdÅŠ²N׫ךi­- myÈ*wŠ®ŸGõ¨1ÈB²øý7òf»‘eîÐUCŠòG 6s Måâ0BƒikÐæð,êéñï¨äüçh£¨eÞ¼¹í¶[;}Má®ôº#«Z{è¨r´£çnÏ*gOd'‹/;ÒNv#FŒ gÏžÜyçÔÖÖ2oÞ<*++Y°`<ðgŸ}6ëׯO9dÝ(ÌIØ=¹ݧ±±‘„¬¡¾¾>,éڻι\®¨>ˆv"u*j6U‰ñN˜(,4c«¼ˆ€_#äó5“N¬¿úHÒè…¼Ï;Q»ÿ¶~‹lwßCË:F>’6² Í.ô~8´&¥pçiöìÙÜ{ï/QAÌ?P ÔãÐf’‰Ê¶÷#)ãTTÄr¡>Ï·¢'ÖëzÊZÛOQÂÓH<Åh³:€6„Hªù#r¬CW'#²ß‚ôð‘èêƒ۽·Ý×àÚ#L{”mŠEòòòR;`²Ûö™Ž6Ê6í£Å²eËðûý\tQDzR2 9®9€DØÃßÈ/±Zç€`òʼn– MMMäææ:BÎBy•³‘ƒ!éШ4û&Bɽ„Z}®@„¼‘óUÞŠˆëLä‡.D;SÂí%äÞkÃív·òd‡4š·GkwÜqŠšZÏãF³±b½¦„ú17B?BɳÙ‚ú…,CÑðÏÑÆ5ù¢¢B—K¬×=ÉBßCåä—!íúÈ)R%\¿5U|íiÙ A|"ºÑ…sŒtµ–ýõ×_§D³~8Ì :‘GÛãÛ=Øm­s‘Â|)²²²Z%~¢EÔ^KPçàCVºèRß4*Dòˆ¨f£Hõ:DÜ«PãÓ©­A’Ç|ëË ÷BÄåBòA>!;Ÿ¯¿þºÕj ᘬ½y½mÝãÇŸBÈ R‡Ê¯°^ǧ„Š_®E­=›‘|Ó‚¤ CÊç¢(Dö&±8¤øQó§ÍÖÏ× ÿs&iõÚ°>Fÿ2ê¨W 43yò¾NÃT‹)®½MÏ8FñÜvÇŠq$Ò—]__ŸÍú!E :YÊ; i677ãv»ÉËË‹ª¯´ý8æÃg¤ˆpbg™z¯×ŒšcÙ$"ÃôÑù&ŠvG¡u?²Ó@{"ÅߢDÚÍ(šü"¯×­¿ŸPÿŠí(*·w¨3‘s]DÉ®öÜýëŸ W WÉãÖï¨KÝbBÃg‡"ô:” j)jÊÙ±Ö9]Id ’þÀ:7ç ÷F±õ˜2$‡˜nD.’5Ö9èÏ'Ÿ¬ìôõ9 s•e/PjoÓ3Q¶!ìDÎ0Œ4ÊŽÕ—*ã® E :`>, —í ‘XçÚ~YÂùaMk Qs«U£>ÍýPä·Ïº}$!öT¬ñ:*Ô¸²T!ºé°ýPBî(yhŠP@‘zÆRçv·Žœ£Aff&………™æJ9(²}I)Ï[ëÜI(yJb>C¨5©iŠ?”PS¥K‘B^nPtüŽõó÷‘ž¦sÿ%W¡s3ËÓµ>M<šššðûýagoÚÑvðl8i©+¢l“ŸÉÍÍ)ÊN•qW&è˜`>—ËѼ½cÄRpÒ^»}Î$yQÀ d#=Ö$ïQ4¸EÍg[÷+$tÉ¿‘ÒRTðñ‘õ{#ŠÆs‘]eýÜŒ)D)..Äí6“JâCeå2ë¸Päœuy¨ÉQ®õZ@$¼ m(O ¨ûEdË&4ÝûßP‘„$žB}ž÷¢:ÃzßAÄ}r†,Eçí&dÏëÉ{ï½çÈë {‡ÇXsᤥDGÙ¦¬Ûl±hÙ1ÛL»)IÐÝ)qø|>êëëÉÌÌŒ©ß‡“'¦ˆ +++8…<\ƒS_”!C† )ùºÑÇèt ÿ;äk^ìd?E@%"¹OQ5ßtED$h¦sƒi¿yË-7²{·‰TãGÿþý)..@›ÇK(™××ZO6º2øEÖ°ÂZë¿’F>@}£7ÚT@ÔY?O#tU1 |¡u¬åè<ž‹4|3ǰO<ñ”c¯¹-¼^/ÍÍÍÁ^N¢½¦ZÐq7˜À#œ/»=-»½êG¯×›42igHI‚†®'i{׹˜'œØ›ÅƒŽšµW&lïeÖ¬ûqÕ¢Ëþ{QûÌz$YÔ#çÆñHGþDJw£âŽˆ ^C¤]Šd’:B“¸[(/ÿœgžy:êõu†/¿\"õo ^Ð…À\TMØé´±´Øy2"ò(‰ØÉ¦å$•ô@ E/"Þu(j‡tìÐùzEÑ›­ÿ‹$ŽB–/7z·s0‰c ¦+¾XI7’àÁ¬=Z«¨)û¶GÙ{öì¡OŸ>)CÐ)éƒZ5ö‡Ž¼ÊÑÀ4^±7c1Ž#ùÀ8Ypb¢æÜÜܸ" ŸÏ×J¯‹¦â¬°°J Ö"Bó’n@–µ >Mˆ¸½ÖÏ#)ÿ7rl€H] ]ìÝ»3æ× N:éßøòËýÖZÖ¡Íâ‡È=É•Èåq'Ò7 ¨ÛLÙþ "ø"ä§~YçV Ù¢½æFa£«… &=­ü;"ç›QEæ@#n·¹J‰‰ô6Ç ó½°Krö¹™¦È&ÒF^áà÷ûY¹r%MMM\pÁ)CÐÉõn9Œx߄ެs‘ÚøìQs¼_5;qy®¯C$‘Íþð"ÒKOA2ÇÛhw¡éMÖ¿óQiôÙ(Úî‹qG„ÕˆH[rÏ_þòÇ„“3ÀÊ•‹QÄ^…¢öHgþ„P’nŒõšÞFçHO68™PÓ£‘¨Úñ"4²ê[H«~U‡¢ôÿƒÎK6’6þF¨ÈYÖÿňÜI G[0ÕUè(Ê6¾l“[‰U¢khhà£>bÀ€\xá…)CÎÂÉIŽÕ m’nYç:;¶“½šci -:ËÒÛí}W\q^x!Òa=ˆh‹Q£¤ã15 àÓˆAɸBNàå§?ýnw-_|±ã¯+Ük6íR$·œ<Œ¾ ¦ºÑ$ý\Àƒ¨|û^DêFöCÈz—ú’˜Rñó´"ò­ÖÏÇ#=ä 9?þ€ Yþ‚´ìè«ãÚÂ. DÛ«»a’Æ—m¿jV¢Û¹s'Ÿ|ò çwßøÆ7:½²!e :ÄBÐ>Ÿ·Û‘u.ܱšpbÊ´}>_Lc°âAgö¾?þñe¦M›D(¹—.ÙßE‘gDp&Ѷ9&êµ­‘™3‚Û}|°Ë^—Á믿FFF6JÖ݆"_7’7f*ÝÞ‡Hüw(ò½%G"^Ð$QOȆ—tîtކ#¹¤?:o'Z÷jÝg4°/.»Z{ÞæTqi˜žÔph ÑpÅHö+¾@ ÀªU«Ø¸q#Ó¦M£¨¨¨£§MZ¤ Ú‚‰8ÌÀÖÎ)ázp85{<ž a¿»Ñ^»Ë×^{‘òò¥äç7"¢ó"RÎDÑdŠš›ù5QPCeårÜîî¿ÿþîz9ìØ±m0¯ èù%D¼¯ äßJB¥à™¨|û%¤9ÿªù»ï"å"BW ß"ä옄\. $Ÿ!IãE´™M2Zµ¶ŒÑx›“ †d#ññ·'ÑìØ±ƒ·Þz‹7ÞxƒE‹1|øð®Xz²í¤ÄašþG3ÃÐ~l'­sm£ædÔ 2339æ˜c8p`+uuÕÌ›÷$§žZJ¯^23÷“——ÍYgaþü—¨««Æí>Ⱦ}»9ꨣº{éôìٓ믿 ÙÝþŠe~ˆõy¤™ÏA%ç ït=²þ] Ü…; É AK¬ŸÇ’CNFŽP%æÛhóúEòëµÑÆéà„·¹»à„c¢ìüü|\._|1ãÆã/ù o¾ùfçHR¤¬‹ÃT u„¦¦&222Â~`u.DM†f`@AA#Ä Îµíßuvvv0šé,CŸ,(.ˆäLrSüùGrÅ[È]ñ1Ò£G[ü J.@Q÷2$]|Éf’x6Òç_Eäªd|Ã\®@nB½:¾ ®nC«^ËáÎcFFF°#777å¢f§&@€õë׳cÇ.»ì²¤ŸG)’ç[%â M×¹œœœ˜¶šŠ¥xåŒÄ67J<š››ƒ_2»æi#£ÄU=vŸÏÇîݛԑ‹’›—£È¸ %ï^FM>C²†A/¤«@ö¤ÃŸŽÈùsÔ­î%ß‚H¸É!3‘lòÅÆL-·:s:˜Â‹Dt K$œr˜x½^/^Lss3S¦L9lÈR˜ #A{m¬s---quóûýäääÄ]­go š¸æF‰±åeffF¬y†³÷µÊÜDc¢°°M›Ö ­üäJ¹IÕÈUñ,pŠª_GnŽ~È>h‡ˆþäi.A‘õ+Hæ¸Ëzì­È >%S÷#¹¤JJVG´~Óo¼   ¡Õ£NÃI‡ÉÁƒùðÃ9á„8óÌ3Zaòàˆ!h£íš^Â.—+æþ¦Wsg¶´Ž¾ ©5›’áx‘6áqzΞÇã ÚȳÏþiÌo¡B•à>äí¹:A‰Á[P³#{§A¨y?ȱaï÷pŸÏ?WÒuêÔ©)÷Š)KБÂ|! bŠRMÔ­§¹½/ˆ)}9¼^oÌDÓèˆÜ‰HçìuD4æ ª³eîÜÙ ô{ì5¤ÏBÅ6F=¿DÞålÔ_ã8ë~3P¥á™ˆØût›mýn,yvOn J.îCÑúÃ<ñÄ¡¾p“@ŽçÜ›sd¤4t˜ Â4r:‰k?÷ñJõõõ,^¼˜±cÇ2räH‡V˜¼HYGgs Mä@ ssn§¦iƒ.5ÛF͆hÌe§ýË‘LQý –Œ…m]m‰&r»ë®ŸðòËCd» éÇÿ¹3¡qV£¤ß(ëQóP¢I$îB½JŽEÆlTú^‹ÜƒÎ…ä“›€Ÿáv‡4hSÕj$ŒDÂ.á9qµÎöÙ¾};_|ñ'NŒ* ohhàÖ[o¥GôêÕ+8©ÛàÖ[o%''‡9sæ„9B÷!ù¾m¢£HÉsQQn·»Ýûu„X£æö`—ÚÚýÌ%¦=¢‰62L4º+jŽáä%¯×tÙdggGõ~>ûì“””óä“¿CžæŸ£&GW!Ïôí("þ¹íQõÀwQ "õhŠK"æWP_F”H¬DZv9ð×^{uðh&yÚUMŽ¢™ ÉgÒ)IÃï÷SQQA}}=Ó¦M‹úsø§?ý‰©S§rõÕW3}út¶mÛÆ°aÃxùå—9÷ÜsY¸pa'Gé¤Vfª뜩á' ÎDÍáZ‚¶‡HúatUf¾;ÚS:c{´»Œö½ï?þã7,_þ"Ð1¨¹ÑƒÈ¥ñ"ê%rêdWƒ´èãí+A•?E÷PàQDê}P!ÌV¤O*xé¥ç}–Mc¬îL ǒĵvâ•4ùä“OèÕ«—\rILŸÃ;vPZZ ÀðáÃUšëׯ§ªªŠsÎ9'®5&)AÛaª¨L%`,o¢‰º ~b6—uñ¶&ñèä—Ø ½³;aÎ=r š /\dxüñÇsðàNzõ†z½Ñdîž(I859º 9:V K].аÍû²Çz HÖ0:ør¤C×ðÎ; ÕkÎ’¸&ȉץ°{÷nV¬XÁE]׈ª¡C‡²uëVÆÏÖ­[ƒdýÞ{ï±k×.xàÊÊÊ(++ã´ÓN‹kÍN#e5h  y½Þ°Í„êëë;l”bz5;ÑDT½tYUW<}Ûƒ=‘”JˆÆåБT=N›öÞÿs×ä"Âý1òG—£Hz8XPŒ’†÷¢Èùæ< ÙøÊP¥@5÷Ý7ƒ_þò¼^oJV’BHËÉÉ æo웟‘ô:C `Íš5ìÙ³‡I“&Å}.¸í¶ÛèÙ³'EEEŒ5Š¡C‡2qâD¶nÝʬY³˜={v\Ï“¤,A<ÔvÑaGídЩ¨9^ÄšxLå2séNnŒím~~¿ŸÁƒ¦©©'Ò£ÿ…ôäZÔóÙ|•æ"û\1*çÞÜY¨e<"ðµœwÞéüùÏè°-A2£³ÝÞD¬³@¢¹¹™¥K—Ò¯_?N9å”.Y2#e BÑjGh œpbØšŒ_®¶„ÝöR>Õ£æ®t˜ØÏåÂ… ™2å:$O4!§ÆTx2žPG¼L”T|xéØï£©áoðÝïNáÙgÿ3¦¨?k"Ó~.[ZZX¸p! `ûöí\pÁôíÛ7«N¤4AG:öÊNÐNFÍ©uÚ/åí%ëf"r*¡»µò@ @MM §žz6{öxQé÷~ä‹î…"æl”<<iÒë\z÷Φ²rqp2{ª{pÎáX½z5ååå¬]»–ýû÷3räH~ó›ß8¸ÚÔDJt$%Àn·›‚‚Ǭs&j‹vˆe²À¾þœœœ”è8gG²Fý»wïæÎ;Âßÿ¾%[Р…qãŽá©§ãä“O)%Óúº §flIDAT#…“Þì––ÊÊÊÈÍÍåì³Ïnu{2z=A744´"Ñ#1j¶#’õ;™xtÉ<µ=˜óhïa –’á|F '½Ùµµµ,]º”SO=•¡C‡:´Âà )MÐõ„6~LŸÏGvvv\Qa²Fm‘"­k×®eíÚµL›6+¯¼Ò¡Õ¦i‚Ž~¿ŸM›6±nÝ:@CT{÷îMiiiÌ3#}^3Ü$p’¡iQ4pºˆ“ˆ´à#&›w'#ÿmÛ¶±fÍ&MšÔ¥9œ#i‚Ž~¿Ÿ-[¶°fÍš`¿¤¤„!C†PRRâÈ—8­9Ù‹gRQh+3™îs©®ù;1±Åï÷SQQACC^xaJžTCš @ `ÇŽTVVÒÒÒB~~>%%%”––Ò³gϨ>Èm£æhב Å3‡ƒ`,’999­p¥ÂU‹“’Fcc#K–,aÔ¨QwÜq­0Î&è °k×.*++ñx<¸\.zôèÁ!CèÝ»wØ/‹Ó—ÒÝAØ©î2Ðkh¯*3Ù¯Z š››¹zÙµkååå\|ñÅÇ}¼4"Gš »@€}ûöQQQÁeÊÓûöíËÁƒq»Ý <8¡žÚD6Ù‰'òOÄbLd«ÕXतafîß¿Ÿ‰'&]áH@š »@€êêê`yºËåâ¸ãŽcذaôëׯ˾í5Ù‰…°‡$šSr@w6à7 Y'Þ‡¦¦&–-[Fÿþý9ùä“ZaÑâ°%è™3gRSSC]]/¾øâ!¥¸sçÎeÞ¼y”••uÓ á®»îb„ \{íµÔÖÖRQQAuu5.—‹‚‚Ì€ºTǦx&Yìsñ"ÑÉÌ®¨xtRÒØ¿?eee|ë[ߢOŸ>?.\:¿ßÏí·ßNvv6>Ÿ^x!ê5͘1ƒ›nº‰Ñ£GsÍ5×ðÒK/ö}8²~ýë_ÿ ͇?l°eË>øàžþyš››©¬¬ä¤“N þ½²²’õë׳gÏ®¿þún[ç%—\ÂØ±cƒMjFŒœ6Ñ»wo¾üòK*++Ù¹s'{÷î    ¡‘˜!ûe¾½gƒÝÝ`ìs©*iøý~<999 Ý`ÚžÓŒŒŒàù³ŸÓŒŒŒ¨#_'7É@ ÀÆY·nS¦L‰º±þïÿ{ƌÌ3xóÍ7;v,%%%|òÉ'x<~øaV¯^M `øðáQ{̘1<öØc :”ªª*&MšÕãS©ùͲaóæÍÜqÇ­n›0aBpJðˆ#øðÃóx<<÷ÜsÌž=›÷ß¿K×ÚEPÅÅÅœsÎ9Áß(//gõêÕäççãr¹4hPDûâ]£}öPöþÍ©æÖ0²LWVŠ´×iÎ Ÿˆ&ñ褤ÑÒÒÂòåËq¹\\qÅ1#\º;v›1‚íÛ·G}ló9ÿå/SžªHy‚9r$ï¾ûn«Û¶lÙ¼¼Ú²eK«‘îeee¸Ýnî¹çÖ­[Çüùó¹öÚk»tͱ    Ø^´Ñ¬Zµ*رÏår1`Àœ°Ku“´Ûç ¹x½^ ùmhöˆ3YŠ,Ú&Ûkµj?¯ÐºMn¼¨©©aÙ²eœ~úé 2$æã„ë@7tèP-Zèûhï< ®¹æ^|ñEGš1¥ [ zÆŒÔ××S[[˼yóøòË/Y°`<ð@ð>“&MâwÞéÆU:#ålÛ¶¼¼<òóóéß¿°”ÇÄ>—Ì6´d®j솰íç6;;›œœœ¸_ÇæÍ›Ù°a—]vYÜ{¸t—^z)?øÁÈÏϧ©©)¦xéҥ̚5‹Çœ£Ž:*®u¦[‚>ÒÑÒÒÂ_|ÁæÍ›ÉÉÉ9„°#%ËxísÉR<Ó‘·9U`ß`ì¤ Ñ'ý~?+V¬Àçóqî¹çvûæ™FûHôŸÏǺuëØ¸q#ÙÙÙäççÓ¯_?† ‚Ëåj÷ šû\Wv<ÝÛ’ m0Ñôiq»Ý,Y²„ã?žQ£F%|íiÄŽ4A¡ðûýÁŽ}™™™äåå;öedd°aÃN<ñÄ„Ûçé>ú6ÇÚ?»­Ô´wï^êêêÈÏÏgÆ Lœ8±Õˆ±4’i‚NÐzóæÍ¼ûî»Ô××3nܸàƒ=ztë„êh ;gì¥R£¦¶prÖ¡ÛíæóÏ?çÓO?eÛ¶msÝu×µr ¥‘|HyG* \ÑLKK ·Þz+.—‹0wîܘ& ;ÌÌL–/_NMM 3gÎ$++‹mÛ¶uJ{Ǿh@E»äa`,h‘¶iÔ”L\c“³=eee :”‡z€ÚÚZ¾þúë¸Fb‘Ž Œ-[¶0kÖ,æÌ™Ão¼×ëåÆo<ä~O?ý4Gu“'Oî†U F÷·ªª**++inn6€*--¥W¯^]*!„«Ì32I*7jrz$Øž={X±b\p={öt`…it%Ò´ƒˆ¶hÆ`ëÖ­,Z´ˆéÓ§wÉ:á#RËÈÈ ´´4èm ìÙ³‡U«VÑÐÐl5dÈúôé“Ðèµm„ÝÒÒ,×ÎÈÈÀëõ¦dñŒ“’F `ݺuìܹ“iÓ¦¥ôÕÄ‘Œ4A;ˆh‹f@eç>ú(/¾øbJé¥ 80X48pàååå¬\¹—Ë$ì¾}û&Œ Œü‘ŸŸ|ŽT+ž9fü~¿#’†×ëeéÒ¥ôêÕ‹Ë/¿ÜÕ¥Ñ]HK]€pE33fÌ`äÈ‘\~ùåäæærË-·púé§w÷rA ààÁƒTTTPSSƒË墰°ÁƒÓ¿G¢ÛH%sñŒÓ’Fuu5Ë—/g„ ôïßߦÑHt]†¯¿þšòòr8Ъc_ÿþý£¶ÅãmN–â§%M›6ñÕW_1yòä”m`•Fk¤ :nƒÛí¦¼¼œ½{÷’ŸŸOAAAP6 ç¿N„·¹;ÛHNT6ú|>ÊÊÊÈÊÊâ›ßü¦«K#Y&è4’TTT°sçÎC:ö™ñ˜cŽIéâ§{hýõ×,]º”“O>™aÆÅ|œT°‚‰HtI‹¦¦&V­ZŪU«¨©©áÄOdèС 4¨K{j85yÆiöÖ­[Y»v-“&MŠ«!V*YA4¤…ª#‰œx‘äåå±k×.***xä‘GÈÉÉaõêÕ|üñÇäææâr¹‚ÕŽ‰ìëoñ „$ 'Öé÷û)//Çãñ0mÚ´¨Ž—êVÐ# éúÂ+¯¼BAAW_}5Ó§Oç¿øÆ ãã?fÙ²eÜwß}<üðÃL˜0!i´L¯×Û¡½víZ6mÚÔªTiii—7âW<“™™é¨¤ÑØØÈ’%K8úè£9öØcã>„¬ sçÎm7‚6VÐ9sæc¦’ éúB"'^$ ‘Zvv6cÆŒa̘1€HrÆ |öÙgÁ†ü¦TAAAB »m„mi•™™Ôµã±îܹ“U«VqñÅ;J”#FŒ gÏžÜyçA+heeeÐ zÁpùå—sï½÷VVÐT@š  $zâEw#++‹Ñ£G3zôh@$¹iÓ&–,Y@~~>½{÷¦´´”¢¢¢„¶I0š!žâ™@ ÀêÕ«9pàS§NMHÑϬY³ZýnßøÌ<Ì4ºi‰ãB"'^¤ü~?[¶laÍš5ÁqQ={ödÈ!”””8Bئ“ž}æ`¸µDR<ÓÔÔÄÒ¥K8p ãÆ‹{}i¤ÒÆ‹@ ÀŽ;¨¬¬ –‹—””PZZSǾx\vkŸÇãá³Ï>càÀTUUqÑEѧOŸ¨Ž—Æá4A§‘†…@ À®]»¨¬¬Äãñ;ö 2„Þ½{wHØNNŸ |ñÅ”——³fÍöïßÏ€xâ‰'â:n©‡4A§‘FöíÛGEEn·—ËEqq1ƒ6€òz½¸Ýn qi´´´°lÙ2 9묳‚·›ŽiYHtiDˆ@ @uu5ÔÖÖ¨©©áÔSOeÔ¨Qq'ïjjjX¶lgœqƒvhÕi¤2ÒF·"\ñ̪U«xê©§ÈÌÌ$??Ÿgžy¦›WÚóçÏçwÞáÁdóæÍTWW·j5`À€¨,u_}õ7ndòäÉ /eO#u&è4ºáŠgìøö·¿Ík¯½–TE«V­b̘1‡èÍuuuTTT°oß>\..—+HØíu˜óù|¬\¹ŸÏǹçžÛííOÓH.¤}Ðit+Âϼ÷Þ{{ì±IEÎcÇŽm÷öââbÎ>ûìàï ”——SYY$lÓª¹¹™%K–p 'pÔQGuÕÒÓH!¤ :nE¸âŒ°zõê ì‘Š(((`üøñÁß=«V­bÍš5TWWóÝï~7üK#,ÒGÝŠpÅ3EEE\sÍ5L:•@ À#Ø»ùË/¿dÁ‚<ðÀÁûLš4‰wÞy§[Ö—†sHti´AGÅ3/¿ü2999,\¸°Û:#é$ai´}ÂŒ)žX¿~=UUUœsÎ9ݹ¼4Ž ¤ :4ÚÀÏ­ŠgÞ{ï=víÚÅ<À¢E‹Ò6¶4Ž´Ä‘Fm®xfâĉ€H{Ö¬YÌž=»›WšÆáŽ4A§‘Fi$)ÒGi¤‘F’"MÐi¤‘FIŠ4A§‘Fi$)ÒFi¤‘¤Hti¤‘F’âÿª±Ë¬0ü-†IEND®B`‚mpmath-1.0.0/doc/source/plots/spherharm41.py000066400000000000000000000005211316273626600207260ustar00rootroot00000000000000# Real part of spherical harmonic Y_(4,1)(theta,phi) def Y(l,m): def g(theta,phi): R = abs(fp.re(fp.spherharm(l,m,theta,phi))) x = R*fp.cos(phi)*fp.sin(theta) y = R*fp.sin(phi)*fp.sin(theta) z = R*fp.cos(theta) return [x,y,z] return g fp.splot(Y(4,1), [0,fp.pi], [0,2*fp.pi], points=300) mpmath-1.0.0/doc/source/plots/spherharm42.png000066400000000000000000001441621316273626600210750ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìw˜TEÚÅ“{3dE’¨ ¢ˆŠ0 †5}"êšE ˜u×°«®aÍ+®`^Ã*bv `V0 ˆ P‘œ3LžŽß§jî¦'tOêÁû>O?3Ý}Cݺ}O:o¨”H$2è‰gžyæ™gIe)‘Hd5°]s7Ä3Ï<ó̳ª–ÚÜ ðÌ3Ï<ó,¶yí™gžy–¤æ´gžyæY’šОyæ™gIj@{æ™gž%©yí™gžy–¤æ´gžyæY’šОyæ™gIj@{æ™gž%©yí™gžy–¤æ´gžyæY’šОyæ™gIj@{æ™gž%©yí™gžy–¤æ´gžyæY’Zzs7À³mÇ"‘@¿ßOff&iii¤¦¦’’’ÒÜMó̳i@{Vo‹D"„Ãa‘H„P(DYY)))•¯ôôtÒÓÓIKKó@Û3Ïê`@{V/ …BƒA"‘P݇©¨¨ ¢¢¢r;Ë®322HOO¹Ÿgžý‘ÍhÏ27c*Õ¾¶ê@;PQQQɪSRRHKK«dÚžDâÙÙ<€ö,.‹D"•òE}ÁÓrjj*©©Ž¿: ¶ÚÆJ$h{öG1 =«“E"‚Á ¡Pˆ@ @ZZiiir®XlÛJ)Ö,H»Ù¶'‘x¶­™ОÕhÖégÁ±¹@°:‰ÄjÛÑÎH Üh{Ö’ÍhÏbš;2ÃZ²m›É»Cýì6¡PˆÌÌL222<]Û³e@{¶•Ŋ̈¶êœÕmßÛÆs<·Ó2 ÅœÄbÛžy–Læ´g•‰Dðûý5sMŸƒd‡`0¸•㯹­¦Ð?÷6©©©ž®íYÒ˜ОUÊápHŒÕF"ÊËË …B€X¸èÝÒBôñkbãi5éÚn‰Ä ýó¬¹Ìè?°ÅrƳ¯ýë÷ûñûýø|>|>~¿¿ŠÄihÏ•ššJ$I*°‹–H¬Õúg#Z’é:<Û6Ìè? Ù¹ŠŠŠ„´×”””JÖ]^^Nff&yyy•Ÿ» fÖ,SµLÛ2oËP“¥Öúg%Û—žDâYC™Ð s3Y;ÏÈȈû8V»ÍÈȨæx-Z£NOO¯lŸµŽÞ6ÙXªÛÙhÛåý³×çI$ž%j@ÿA¬ºšñX8¦¬¬Œp8Lff&>Ÿ/æv‰ÊÈ¢ÃæÜº°m¿íêtí¦¶hi$:‰ÇËŽô,óz·š€uuι€ÙÙÙ•,·)¬:ж²H,];¥…Ú²#c…þY¶íÙ×<€ÞF­¡"3ÜÀìììÊÏ›ÓÜ ÔšÛ +¯Û~ …¥&Úñ„þyUÿþ˜æô6fñDfÔ,±€uµx·mÀÚà^,];õàê@Û”nIÇÓµ·}óz±xCæªûÞÛOKK«˜››E×Õ,hgffV~æÖµc9#“5ɦ®Uÿ¢£H]RRsßP(DiiéVްêl[èiÓ¦ñç?¡¢¢(Z9ÀjÔ­€"  >fÀz ii›ùé§étéÒ¥ò «»F Úáp8á$›¦èÚ®%´ÿÈUÿ<‰£™ÌN_KJJ**‰ÇFc4§ÐNÁ#‘1ë:'k1þúÚœ9s8ꨓ)--ÚÇ}€LàY`wàÀ^s1ð2ð!иÌlû;ð2¡Ð(úö=>z‰Özþú$Ù¸ïC$ivrM‰5Ûî?BèŸÐMlÑ‘îªkñ§¬¬ŒP(DNNNƒ:k³è‡º¢¢‚`0ˆÏç#==@ SOÚvšÛ³ƒÁ ÆÃ÷ßÏEÀœ \ X¶þ,Ð86jÏ/HŸ¼,vz#Íg—1lØiÌžý.={öŒ»mÕ%Ù¸uíèÁ3Ù‘Öj* + f[ ýó$Ž&´XEóËÊÊ*ËHÖÅ¢±¼¼ù$ãÇ_tN&B ØŒœYHÒØ8v.bÔ©H‹~8<À4³Ï `›6-"T+ Ô×bÕsÆK²©I⨹×É*¥³–úç1è&°XÀl­®?–h`nnn³ýÐìõÔVñ®6³SóH$R©A×Vi.´N:iï¿ÿb»[€Ç€žÀþ@wà'ຩ@ 0¸è œä:Zpð4p&ð?`“Ùg à£M›N¬]»´Ñ®ÇÞ‡P(T©ó¶Ä$›èÐ?;;­ia„dýóº­.‘uI6q;ëˆõ5·Îœ––Ö`õ;ÜæÖScUš‹Mù€íºë^¬\¹Ž4ä`#ð03HúøøOÀ\ÔÖr€ àqàd ð)î¤W¯½X¾ü—Æ»°(kiI65YuIEEEe蟽†¹sç²Ï>û4G3cÚ¶©¬7³¹Ùn}M¬Ñï÷“››‹Ïçk¶ ³òòrJKKÉÌÌlrönÁ"##ƒ¬¬,|>YYY•ìÛï÷S^^Nyy9~¿«UÂÂá0mÚìÀÊ•«‘CïWÄx#ÀŸìVˆ ŸŽ£Cƒv¶ï! à3`"pòè~Dè ·ðùçŸ7è5Ųšî«±èû`å-ë\^^^‡oWmO6‹å, ‡Ã¼ûî»ÍÝ´*æ1è´x‹æÛm¢Àn¦êóùârΜ9“W^y×_‡•+בžî#;»#>ìÅqÇý‰áÇ“••U£s®)d•úÊ#µ1<û ƒ OËý~?íÛwC®šÍÀÑÀÀƒHæósî‚£%LºCÍ{0 xÆüßEq¤#ç¡ ¹(ôÖßq g²~ý¢¸Ú%¤±2#í±b9#­|’ŒNádkxÝ æv²X‹çf»Ñu±+VpàǰbE š.—"ÇU `p>EE_RT4åËWñúëÓ€ŽhZ]ÊÈ‘G2iÒ#U$‹¦”UŠaÅ w½ˆD ñÚ·ïŽ",–— ž‰äŒW€<ÄžÃ\'™ÿ;#†}dÔQóÐïêú|W¤]1ï; $–.@&~¥¥¥ •—mj³¯ÛÜéìîâKÉ´’M²´'qÔÓléÎ襇êj–Aûý~Š‹‹IMM%77·Îàü÷¿ßKÏžG³bÅq(þv pŠØ1·î(¬ë^ÄÜÎC‰;7ðÒKy´i3Ÿ¯==ôp¥¬’““Ól²JC™Û!=-*gîi¹Mö¨¨¨ ]»n(p!ŠÄð!Iâ=à4Ä~ÏA޽óÑ=‡XïOf_wÿ­B>…×¹­‡9µn®÷YÀx`BCtKLklVë}>ßVR•}–ì½°RUSJ$Éö[÷:As;ü~½tf«UçååUI®Í®¸âZzè ôðÎEÓé“Ó{¸Ƚˆ©í‰ØØù¨/C!]¢8Ü]¸úêëi×® cÆ\÷µ´sÇ[Ðöù|[i©:tÚ ©!ó$¤ï쌡QÿÚÅ"µqð ÊXŒÂìÎG^Õ²í€ (Äîkà{$›LBl[&O~¯a;£™­:ÿBMhcêÚɦ—{Gœ–hÍŒh³‹³¦¤¤‘‘W\h8¦[·þ¬__‚øŽhJ=µõ}(ÍØ‡£8%Iì‚|ËòÖÊ™2å[¦LéÈ;´cΜïãŠØ¨KdJ2š{ŠÝ»÷nˆóQ”Æ;xÇ!íù4³×Ró¹Íø #§à)(µûL³}. ¡»ÈÛ p:[Ó¤öCHîØ ˜cö}E‹’_Þ¨Íj{fI²Ù3TÁè:[u53â#·0''§RÞˆÇ:tØ™’’#€œA@Û&ÆÖó€;‘žy€·Ð´¼8I"kÛ^L~dåÊѦMg:thÏo¿ýÐ(¡uÉf×_ÿWÖ¬Y®Ó{¦?¥h€ó輂â˜-0LFÚWóÞ‡€ö4@ºƒº †½›ù¾ù.3ß/EéßíÕWj¹VŸ»&];–3ÒÊ#ñä$À{G-f¹¢¢‚P(´•”QW€¶©ÙîP5ËÖâùÑ>üðÔ”ì„ôÊ^®oü(ƒ-ÚÊ© ÜùtžCÒÈ÷¬ASìW× ‡ÕËÀñ¬[WN›6»rÜq'×¹­-Ѿûî;~øQÔO§w ~€¤‡ÅÀ`¤õO:¡H Ð`Xì:â:ÔÇyTgÐàú5Ê$ŒJwx^ª÷´=Жo¿mÙ Ý h%’ÌÌÌ*º¶eÓÕ…`ÆzæÂáp³;)£ÍcÐÕX}#3ÜÇñûýøýþ˜‹³Æ{Ì+¯üÒ—g!ð½øM­· 62/r^½ƒ" Üã¾ö®GΪû£þJ¢xÅôCÑÛs™:u.>_WÞxãq†WÛ“ÝÂá0| ê§Q(q¤' c2 ©{ø*ä€}É›bïi)ºWço£¨¶æ» Ò©K€Kqî8,£«AC:W\q-Ÿ}öaƒ\sS[SH_îÄw†jMI6………¤¤¤ÔXú ´´”óÏ?Ÿüü|Ú´iÃwÜÀòå˹í¶Û*~ä‘GìZ<€Ža5¥fG[M Úz¥333« U‹_¯-@¬íÈ¡tb^ùœŸqm»’!^G€¾ ·<Òøð𤉞…¤k¸¤£Tå·€õwÜHöÞ{ _|±5PÄs=É4¥ìÝ»×` Êü1߇Ö|’&žF 9¤3ÑÀˆùÿ”ØU·û8Ý·§“q UNw‚Í@/BL=•¹sÝ‘-ÏšãžÇ ÁtWüûàƒxï½÷X½z5óçÏg¯½öbĈtîܹrû—^z‰ã?ž‘#Grá…²téRºuëF—.]˜8q"'œpBƒ†Bzí2ËvëÌÑû¹Í:ëZ«">€NGާ37HXËBµ‡·7ï[#öBÀRŽSb5š2Ÿ;#×gˆYŽ¢BNDéóHý¸Ÿï¾û Ÿ¯5K—þFÇŽì[¦=û쳬[·õE ÖÙh0üêËþœ7#¶¼—Ùû;Ô—'O—›¿‡ í¤gÿŒ2ßÂ:c•Òm­‚ªªã:œ”ðÍæRRZîcÛTÎãºèÉnÐ>å”SèׯË—/gذa|ÿý÷[ù†ìwÝ»wgÙ²etëÖ €O?ý” &PPPРqêÉ%¸4“Y`®¨¨¨¼±ug÷váp˜ÒÒRÊËËÉÉÉ!;;»N?’ºÚŠ+ÐC;s šr[;…͹íO”A’ÇaˆÙM@zê™ÈyµÆµÏ@Li¨"ã=Àµæ¼O!f¸+ݺ àÿ¸=¡k‚æm ‡ÃŒwb«å(„nw¤)¯F%D7!4Xضõù‰H ꋽ€ƒük€©èþu0ûf¸¶Ù‚µ(tŸÓåMÜÖT :Þó‘——GëÖ­9øàƒéÑ£G•ï»víÊ’%KX²dI•:è ¦L™Bvv6óæÍ«ãµÜ¡¸Ìs(ªWˆŽ»6s<€ñÚYg]Š4I›iÖø%¥€ÒŽÏG k-M‹©ê¤êŒ@äY”÷W4^ÿEqôALð$à<ס©ý߀¯ÌÿWûsë­ÏñÐC“X½zIÒ¦òVgÛmg#.vG ÷4uCÔ/Q¤#i(iÏ gë`µŽ¿£¢Îò%Ò—ÇàùdFÍôéÓ)((`êÔ©tíÚ•öíÛóÜsÏ ñûýôîÝ»>M¯bH€v×̰I&‰¼·oS³;múô°þ‚²Ç ¹Ât:Òç ­ÙÚP¤YŠ:bbäƒÍkÒ ‹QŒ4¤ž6¯S€»Û—P!ú¡hŠßÍ›óñùÚðûï?‘ŸŸ$?x|÷ÝwTT”#¶û!’ÞD³†KÑ õ%0Öìñ*êÌ6! Ÿy_hŽÑÁüo£;¦!&žMÕGn#ŽT^t rئ¡ûðœÙ.”arsó*ë[×¶rJ²V˜klKdu˜’’ ªý>''‡çŸ>æwƒ Šë\uµ?”ÄaÙ¦‘‚S¼%^ ZÃÍf>5®åg#§(²b zøÃÀçÈYøä8¼É›Ðƒ¹v(Šð°ÖiÐW"P¹MùS‘cñ.óÙÓ(¢a8b‹vê¿hO¯^{0cÆŒ3š#7–|ð¡Hm„Å$E´Glv1Ñó>¨¾Šf-Öž4ï÷B!Š ~\ƒ“Øâ¶uHÓþIN_!ö~ êÛ‘³vý¼*SëXY‘µU˜kÎ~Oæ™UQQ­ZµjîfT±? ƒ®.2#Þ(ŠX@w(^ãZÒ™ŸEQÖa8iœýQ¥µeÈm Ž5(üt4¥NöEŒú ³­Û"p8Äìs˜‘¬qºiË5HR¹Ô|Ÿ†’bò8á„Ó¸êªK¹é¦¿VɋŸì ÙÔLû™gžA}Ø1Ô"äìƒ#=¼XòƒÈQ×egúÐ,&ßl÷2æ.H›~E€¬D¬…$”EX€†¹çž œyæyUŽ‹ñÙÃдLû⋯AÛr4 ¢BR¿ ÙâQ4ƒ…2.wDa£Ñ WbŽ41p+5µ5ßÏGƒ™]UÅ„òŽÙçOæø)Tu.C>†08rÌ1Ö1xp1Ûïî¤[û% Uf¹Úâ_Qó¢)t¼ç)++KºJÛ,@»#3j+š_ÓÐèóùªd6µuèÐÉW¢$Š#ùFk½‘Cê×gmдýsÔ'!9ãA³Ý8&¶(ü ¤§ú€ßˆ÷à©e~Œ"C–!àùrfÃë¯Oåàƒ£ËmVµš¦éÐ8 }÷Ýw#@.CƒÚצO2›žh¾ŽÂÛÞÄqü½„@u#Òíß@˜ý}-7Ç>'°IT[P¿Ð@gRópس,SQŸ¶F,¾Èâè£Nøº£Í¦Ogff’––V%ÏÎl´ÃêSÛ:™l›hwjv]V3© ´+**(..®¬‰Ü”+gG[ àœsF¡©szàGSìþæýl×·¡©xÈõÙߨ»?ëƒâ¦ï@,ü}2–¦ßÖvB:v+@KCÿÙî~4H´E¬þ”íxß}÷{ï½\×›(h×Õn½õ>ÄNóЬÀJSžúi4kÉB:ð*¾»¢ÄâVY‡âœ3©Êˆ×¡AëqÔ¿;á€3ȱ»¯ùÿg4È‚úp°±üTÚ¶mKc˜[ö«.}:´mT]±©t¢çñº‘Ì Ìv•èDW4q;óòòêäl,V …(..& rÑEcÐÔyz¸_A=\ïĉ‹nì‡&¬å!füߨ³\RÆ» `ÓZÓk/MñwEŒûIÄ '™v\ŒBóö@ƒÃ¹ˆÎï¿/b¯½¬311« ´£ë ×´ôÕ£>Šf(å 4جC@x1ê爿l¶[›D¶I<;š÷åHî9ƒ­õæ3¾Ý»ŸP}iàÛÅ@©û¢~_Žj|RóËã豺[m¿ßê@;--­²ôn¢ íYõÖâÚídrͯ«¹Ú †yy eª+È7´ÅJzéÔ©ÎÛަâ @>ªµ‹Qaù•®ÏÆ£´ïM®Ïúã€t/A¬øM”òüŠkû`­@qÂ~$ƒ„d?Ò£ÿiŽ5Ø™… 3hÐÒ,hG×NOO¯´íê0´¯ºêF$/´A1à­‘V?9[£ ¿¡8‘/; ¢ÙƼ‹²-gšm&"ðn#m„Ñ,ãw¤][z1ßY6]Œ;õa;tÏ×!§¢n~s×rŽÚÕ*J6–j-ÛÕ¢Ú.ªj9Ñd“H$BII  9²þq¬ZÝš·¼ÌëÐ}b¨veŽ Ì{÷êÏ·£7 ¾¸)êÌ7#YÂm}=‚Àé$Äî@Ê›‘p²ù~$Š~ W @º1ÁL~ýu ‡r(inÐÎÌ̬dÜéééÌž=^'‰¤·ï€ªÖùÍ÷í‘|s„Ùæ=T›4Ë8Å‹/EÎ×½Û-A’‰­Ç±3’‘ìL¬ª {&\íÿÖ ø%æ!0ÿŽÌÌê‹ùÔÇJz¨®¿]5Åíˆl¬~µddü- Ý‘ ‹ûÑ€999 ;ë[çÖNÑk[öêž{nDÌïUóÉmˆQ[iãœJjÐT½…z‹ïsˆµýiœa 'bmîÚ ¾{ ?l^·"` #`yéÛÏ"Ú÷¾È™ø(bØ@³fý©§þ9žJÜ,hzèQH·ß‚2&O@ºò.æ³=P:ö`Ô‡kÀÎD’G+” âG+ÔØˆ ¸@œúê@sl÷ïj.ŽC0`ÎÛÉ.?¢~+Ea}Û¡Åd6pâ‰îÚ+-ÃÜ ívDÚYN2,ueÛ™lÖ¢:VdF¢Çq;ÓÓÓëå¬ïµ!|VZ©iÙ«ÓO?=¼KPôDWôð>d¶èˆœPg¡P¸oc.E ûAà·¡)úk¸m–áí(œÏÚHʰÅzG1ÏÅ(Z"Ï!çÖc(eúß(>zOÄ_AÚl7 =o¿=Ûofìk*~cúXÎFl:éÑ7¸Zq0JXùõľïFÀ3i§¡ªxýÌq¿A€ÕhËwÞÏG}T÷«§yäQ˜³¨ž€œ~Çá0ä»P’K̶— ÄŠ’yÍòX?‹Ø²ýU ~8ŠÔÝ›}Ìÿ¥ˆ}ÏFƒåÛøÏC3£óÐ}H5ûMAð·@6­[Ûôñ†µdÈð‹7r§!³"“áúcYRt]"3ê ŽÁ`ââbB¡PÜ‹³Öµ­ñlëÖ™mZn]íå—C xJJI÷¡Xå#|Õx±ÄÑ(nÙ¶uú ¼œZý+îæ ¤;¿‡¦ñ‹]­Ø1¼sÌë%óùiˆuŽBZïã(N{bûE솹üi¦ÌgãÛ·ßZý¹ØÅˆ1÷@ƒÛæýp$Cô2×ò5ê·h´ )Ï™ÿíì+ˆdÎ…t¯ìª63+Þ‚ˆNhÆQ†À»’9z ¾\ƒd”RzôèÔ0Ñ‚,hÇZà·!•MFvžô©ÞÑkF›è꾇Õ‹³ÖGc®Éâ©mY@VVVåê ñ¦ŠwîÜ™‚ز¥9£^E²F'œŠh©Hö‡BíZ#fü%ÒŒm†ß=Àÿ!Vh«ºÝŒ$’—ÍqÞGÀ4…èY7Æëe¤QOCåClúB$¥øž²)òýÌßÙhvÑnÉG"‡£}´l‘¤ æØkP¢Q.r¤Z°ÿEÁDÐ=êr‡P$M:o¾iÁضråJ–-[ƪU«(**" ‘••E»víèܹ3}úôIº%5÷¿ÖÜ‹ÊZg¤;•½¦ ‚@ P¹úJ2YR´íÜš¼¼Õ1hë ‡Ãdgg7êÃ_oC½lÒK"éæn›9ó#vÙåM0±°µ(’â¯HÎèˆ$ŽñHnÈ@¾‘X!°±ë>‹“Ê} Z¼ôTNsª½ñHƸE<Ü‹4Ò"€þ?sž|<ûãˆi p"¦¸°š6m:QX¸6®>ˆÇ=Ô.\ÐfrŒ‘¬Ñ1ûN8«œ´FìybÛ©HOŒä±8£:Ò¨úX}kŽõ Ûû³éß' æ¼ I-sÐl'ÅJïêygн»JœÎŸ?ŸÉ“_âÝw¿dáÂ¥”––‰lDL¾šä¢{m®!I;ää¤sà¹ôÒó8à96“uŠÙ¬H[ï%++«Î+×X(©ºå®~üñG|ðARSSñù|<ôÐCÕ#Kúá´.ïÝàfåƒâââÊ¥¦jçú†ÉÕ´¿uúý~rrrðù| ò tïÞŸ¯1Õ{ëÍG’D>Vö9¶mãS(êb•yß 1¿]g8»ÚÝ ˆI€‹·#­ÚîwbË)æ|Vý´¿!&>9ènAÌuЊÁƒmDÃÛúõ[pf˜k° ²®EÀ½rºî‡$Ÿa\{¡~x1êbs=Ç#ÀÛŒœ‚ÝÑ€µ'¾9`®×ÊK¿âÔòþ ª ¦¼/º?Ÿ¢È—σu-A¯^ÉÏoK~~; 8„þóI~úi %%~"[.õ`4ÚõRs ¹æÚó€Ã(-Ç{ïíÀQGM~~wþïÿÎbãÆõëà$5w*{uY‘&Làºë®ãÛo¿å«¯¾¢´tëXs»ÜÕĉÙ´iK—. _¿~<ñÄ<öØc¬X±¢2Á­¡,éº.fGL¿ß_¦–——WáüúêOÑûG×ð¨I^It€˜>ý=ô ÿŽØ®­üWT£ù ³å9ˆUYÐÎEÒÆ%8‰g!}؆ï@|"!ðŸ¦ýÿC¬ó!Ä íŠ,Û#mvb˜9(õûóù~ˆÕÿ ɧš}Ö1oÞrž{û¡6[°`ä6ˆñ–"ü+ÅúÐ Ò ¸†·Þ Ѻu7~øá‡:õk2[¼Ï´ßïgŸ}öaܸq<úè£ 0 Ê÷5-wõâ‹/òùçŸWÊ i)‘Hd5ΰtfë8W÷]II )))õª2WVVVYÍ+Ñ6úý~222*u溦‰•‹S&â¤X¾|9½z FÓêÒ–3‘¦\Фˆ›Ðt:Œ€t,NRÅ}8Gì²eÅÝ‹@总 …̲/AñÀ¶ÏÏEà»$–£ˆ+Ì~w#Fw báƒ@AƒB߀pƒéÑ‘H„‚‚æ] ²YhPøI[¶FrEêËsPh`JÈy±ì¿˜þ˜„SŸ$iÛÿÁYaý1ÓO³í¹'šë®@Úõ0¤Q§™sµB÷p3º/CLÛÃ(ž|5ÝE“¶ ‡m'4(Ú”ò48|bÎ×ÍZìo}5šÉØßǤ¦†™5ëzöìYÇ^®»YycšuÆB;uêTvÚi'öÞ{ï˜ß—––2zôhZ·nM^^={ö¤k×®äååqÊ)§püñljD¸óÎ;´¦tR; «3+¸õñN×Wƒ¶u"‘HB‘"))) O-»té A}ùæ› húz+€§ÀLDúç݈Á=Ž@úW$U”#]õÄ„ƒˆiFÚi,›â= G›sÝlZr3bsý‘£ðfs¬.¦- PÚ9¿ÒpÀy/¤µþlι…C=’?|/¡>q›¢€lÕº sî\TqîPs]»šóŽ¢3†¡ÙG*rdŽG`nëb„M»>0ÛEÜ”Ž"V~E` JÅÏG û=ÒßÓÑÀWˆºvhV³¯iã\”èÓ KQLô@Ô¿îÁÿèþ‰ı–†Ó¯‡  ~ ’>t?C{&p=áðöÝ÷O,[6 ŸÏGCY2­èmEEE•˴Ųš–»Z¹reÌÏÂZ@Û @»`zz:Á`°Þ+š$ ÐÖ! …HKKk¶bßï¼ó*:ôEáÓ(¢bŽÓpbr÷¡;ˆfÎzzg"G—­Úöz°ïCìì)ºm‘zbÆ?¡ôèî8ÕÙ¦ *FZó“m Ý?²³àÿŠ€j?ÄnKùæ›™7o}úô©Wßüãÿ@AEµ,G`íCºó§¦M;"éf?4pˆ¤[{ãcÄ”C‰(Íñ²8¿‰d‘k`³Ö§è>„PH^;äpÍ6í8 9#É¡ ¦O£ûU„ÀS W¯4sÞõHK‹#ãX›Š˜clrzþ‚²1×U€f\ï ëX**†3`ÀÁÌ™ó iÉ)RTT”t«©@ Р-xº€î: Q¨(ÞcD§ŠçææÖë‡WŸ¢´´”P(ć¾ˆàÏû{=po ë>Šãs›‚¤ˆÅæhO#þ¼?ß#§ÓåHöHA²Àõhº N Ì«Ð?Ë´ádÄHEàñ”Ex¢qŠíbÚú+Œ4>°Þ÷öFRM÷óÑT?fbùû ôù îg®c’1ïK›ŽtàQxìT$MÍ9V! ÍGý¾É ½q’ff˜>yE‡ÜîÓÙf›}QÁ«ƒõrÊYf›HB™€˜þ|ä—™m£¹Ó~ݳÑý9 ±ý¥@–-[Õ ÑÉÌ k ³k.Kz€¶:suÀ†‘ëú㱉PµVtCGÔ¶­ 222HOOgÈ!œtÒ Ä¬GŽ¢‰húü?B½pí€èËÇ?…ÄÝè!ÿÂìbÈG£¹— î†X÷(¶w¬9&èÁ¿±é)ˆïGƒÈ+T&#]øcsüN ‹€VôéÓ¯^u†C¡T8u3v5ŸMB²Í:Äf;¢Tî!¦ßÒÃt b¸›¸ŸiŽþ bä6æØ®ìü NÊû¨¯ÿnŽw˜Ù~É}[n@yù~*ÐÎB!öQýù®¨œì®X¯DúþÛ¨8Õˆ™GO’¿0û÷Dlÿ{4h`Îñgäà| ÊÍ7ß^}ç&`ɺÜU htm<Kz€¶Œ¹ºøá†bе™(ü~ÿVµ¢2 ¤6«n€xþù§hÕ*M‡ŸFSëǾŠâ¤m.AÓô¨.GlòYÄŽ7G}¥ŽÛÕZÎF õ<’6"ÐÿÔ|÷ˆù¿?µ± ÿ…¢ŽG@õ ’=Gl?‚¤†ãxt6°råZ–.]ZmqøšR{¥ëø¦à°ç‹m…@²Š ‚fýРµ„N0G|1íLÓÞU(*äädÜ +3ýÞôãO¦¯3PHân¦ßÏCž‰ôø<Äò4}:Ç_núvãèж€Ó³Èyx;<žÀ)|µÍ€Ö˜ãîî÷Ùh É%/à8“àí·§7Ø’WMÉ ·Kz º¶Ï-q¸’>Ÿ¯Q2ër î”õèLD·­Yó99í@>†ÆàG‘~ bkàäï‰ÀóbœÅdGiÚ!mù¿ˆÝŒ³Ðìp"àòÍçYæ\û¡)ö×(Ôo šŠwC:çOH㞈€çJ”¸r¥^\73pàP ×––VY¶¨¬/ìÎs§ö>ýôÓHã­0ýÐEeüŠk: ìX}¡éÿ!·«ªtD ‹i(k2 鸋q–¼úÊ\ãíæúf»\s¼Ó‘¼1ùö4Ûý1ü¹H‚(@ ßòhp³eJ­ýˆXÿ¾hp³œë|2ø/4äâdr[œÔörä[Ølúc%%|>_̾†­3òj3o¹«ø,étSX,€t˶p~s¬Iè.¬d^jú!¥¦¦²~ý2ô@GàüÁˆ wEÓû«HvGìêbĬ·Gì%(tn.á‹ØÜ‚ùÄÚÚ™ïOFšìT4ž…BºnEÀ2Õ¼@ ÐÞÅH÷<§¦HG Ĉ[×A޵ “{•ê›o¾N b‹`€"6rÃÍD—]Ee’[显Z‡5E`Ì@@?Ü´d’!BØ~twÓ‹ð¾oúcš¹þq’dòÐìÅJ3PôÍÓ·k`2ýwUg?º·æºÏbkp¡YЯhð¹ ;¡Dˆ²²Âjû:ÞÅe·%fÛT–ô º)Fµh€¶Ämªxc·¡:mÛá.¬TËËËãÕWŸàÄ/B@y7rbuF€t;[ÄèZ4e~É÷£‡ôr¤9»S…[!çã,ÿFìצ0Ÿfþ®B@x˜Ù§/4|H_~ݧ ^F !$11HÕhž1cÁ`°ÖìP›Ú PXhW.ÉÁ©}‘a>Ûˆ‡ïH€x¦9÷\sÄt4í? éå‹ç#À-3דŠSY0Õôõ(ÄnŸÂY$vé‹“Ív‹{³’ è>­C÷§Ñ)H~h…ØþÉ8iåÖÂ(¢äw4€ìf1/âhçva€ih ¼1í Nb À#¤¤TŸºlAÛM\jbÚɾ`l2šÇ q2Ñ5 ÂÜÝŽDXŽ:ê(†Ý ±¢ë‘óh=J–jr Þ‹JŠvELûróùíÈù×Å[èA>±¯! šˆ@þœ¥µò3ñtPèßyˆ}ž€éÿРð¥ÙÇ®Ôòbq>lHYÛ¶îU°ëb¶¿ý™—#€ÌA@»Í6£™Àž8«k@Õ•T2L»¦!§¨Ïw¦ùÿ!$gØzÓih–b}le¼\”Štã×NoÁy PCèÞu3Ÿï‚ôï³]¸íS4 ·G÷·ŒöEýº%=€¦ñH_OEL~>ïÙhà9ˆ6mºÕÆ´mѰú–mhKV@Oz »æ_,³e@F+IZ“Ù‡[ïnˆv¼ÿþ;´jµÀxÂw"~ðhF÷œù-bY# ?‡ØÕI8éÍ6˜ÿS@Û!`úÐd"%H‹¶ÒÄ©æµÇ9¸+áHË} §RÞHC]gŽßØÂŒ32¤ö…gå !¦™jÚÓV9ï2éPjÚÿ’$¾6Û.EÒÃ8óÝ 4}Ž4ö°ù¿Âœ«’ö@zòPÄÌ6ûŸoú«Í<ú ‡Ÿ½Ï¯¡YÙTMî]…î׎è~d!ùãAä+X„¤£>hp5 1}Ú % EÏÈ:šv~„3Èä0`À.1ŽŸYÐNOO'55µ’MGW™«kiÐÆ0 “ЬÎ*£Eš«–5gggÇUä j®‰½eËrrr:!½ùÄš.G,mäÅŸ€Þ+Ѓ?éÒÆYýc Ï^ˆ]‹"”ö@ ì2óÿ»(ÚcwNíÑÔÿ*fv9rR Í÷X¤©Þã^ÓÎõ¦FŒø……jí“éÓ§#0N5íËE`Ûݼ·an °ílÎÝ1þËPÂψ¡j[èÿp4ÃÀô£-U:Í(Ž@³›åw&N­çiæ½-¸dx/Ó'°ƒ(¢Ý'7hÛAêIJDz5è‚¢s^7×ÐI5ÑÛmAñÓëQ4Ið,))³?þºÇLÌÜ¿Q·åþ>™@;¬Et]t¼ºS´¾[RRRßf&dÁ`°²8PcèÝ©©©¬Zõ :íŽz(bŽç£©wgÄžïDû‘Hƒî†œ„÷ `[‚$‰ïXNDºõ±x­½‚œQöÁ®@,óïˆ Š´Ñ›¬ÐÞÓ:ônF¡} ´ëŸÑÏ5­·ÞÊ7ºK£nmwÝub’4ˆMgᬠX„Ài.Š?þ±Øþ°RL?üå@ÔÙhI3m¶‰-û¡„ >fÿ÷øvAázvåÒ“­Þ» É<î~üÌô›Õ¦Ý¿‹hàËBÅÏl º«#7€@¹#|¿Æqn–¢™ÒBäî‡E¢D"?2tèÐjz¸á­¹@ÛVÃLFk]›ÅsƒB¡eee¤¥¥58 Æ3HD‡ÍÙ¢O‰Xm«Ê´iÓ†Ÿþ”Ýw?9Š œ‡êcˆ9µBõÞ(IŲ¼æ³Ìg"`›m¶[‡@gÒŽÿë:{rfÎû¶CE{ÄÿôQ›ðr’DîE vJ YÄÝw?X+@õÕ7HvÈE eµì%æ}9bî9¦ý_ þ eQN2ßÏAŒÙúZšigg4Cˆ ÐÎÃѸ‡¡±ÍR4ý‚tä'L?T =I9Ϙ>¿šªrEæt/º›ÏCN¿~˜_3Ç…S4P|„€ù¤9ŽœÏ»®qPHÿþ;Ñ–ˆó.^жòIc·«©l›èÚ:Ù.ÓPún¬6ÔÅÜõ;{¥·õêÕ‹3^eÈ“¿„œE—¢iùsÈye“2æ )Ãm³‘׿µyuGaq ©ômDÎF’Áé8Óxx…Q©Ï“ƒ¾±ö³Ì>˜sŸ‹@p*šz߀®0‹üüά^=¿Úú'@Ieæo¡9ÿÄ&‹PµF¸…pBà51ë÷‘4°'Ü #1ôÕf¿t4+(EúúŸàýˆØ³­ub¶ Ñ,Æ:ú Ñ`¹õ»ÝÄÞ_EÅÑ(ÑÅý{;1÷é˜G¢#ÚÒ‘®þ/sÿçúnóÙÀjRRÂLúVŒc4¿ÕÚvõo÷rWiiiÄZÏÔZyyy³ÕÑ©ÍZ@Ç»ªŠÛbXj «Ë á÷û©¨¨¨\Á»¡Ï]›í¹çž¼ûîSŒq6b‘7 ö|%N ÍKC[˜\_œTä'‘ÖË:›ý_A€ò-ª…Hë=ᛈa§¢BJ%H#=ÿÕ8!§#¶}ÒbFŽÌ“WØ~û]Y±bN 5²Saå§B_È|g¿Œ¦û½Íµç#@gÚ¼Ù\›1Õåæuò‹ÍµþICmÑ ¸iîÙ8Eü÷@z¿% 3P&㱈}¿€ymÑ1 N'³uà••2Šß3F?šk[dÚmÔ÷%8™Šk¶ŒwBƒV²ƒÆeªnЇÕÉ5nжÛEƒvaaaBË]•——3vìX>ùä.\Ø8וìõ A:­]<6–ÙÌÑàkÑ.Ý^Ó£¸¸¸^«!”––V¦#G›•Ujª]Ÿó×VÏÚ-§dgg3oÞ<öÞ{8b[í“>%µtGLxW4½þI¸†")£UuÏyfÿ¢ÏŽœo¯ãô¿E$Do÷ ,Ù×O¢©ù-¦· ©ùË@€U«~ÙÊÁ›ŸßִߦÂç 턘yeÙýÛ]„õ94(€dw½Š<íÑE³\Œôâ¹H*JCaw½è¦ M}&š]ØpÁ HæØ¯ÄUHb1ùÃ]×am%ŽÆ<1û*êdm#æ5æ9¦ §»¶Ù„"oÖ#&þ,y,[ö mååå úñž'Wy=úè£,X°€¼¼<ÆGïÞ½·š]?ýôÓäää0räH.¼ðBþò—¿Ð­›~8bÄÞ}÷ÝF¹–Á k³héĦH4±mˆ¶†›«Éª[87Öì¡oß¾,Xð={î´d[ªÒN« Ð)À)?ZŽ˜×ˆí=j>ßi­_ãÈnKE¬nOÄ OGzìJäT;'Vyr¸½ƒØ}ä\ƒÖé» öc(,/(¤S§X»vMÔC™Š¤‡ ªjÐAœXâTÇØ,Är»âT¿;Éëû¶%K÷4mû E{L1ýx.òg„ÓI#gã5è‘ #v½¢[ŽXŒfmMŸÕŸ+ÆD’”Õ˜sÐbúömĪAÒhØÑü¿ škÌv· ºˆ÷ß“–jµ±ôèÕÀ/½ôR>þøcfÏžÍK/½Äüùó¹öÚkÙm·Ý*·Y¾|9Æ œå®Ü½ÿþû|öÙgÌŸ?Ÿ¼¼<üñ·o]€µL6""@¬ÏÌ=HØò¨~¿?¡°¹DÎm6:Ħ©GoÓ¹sgÖ®OÇŽ;¢)¾; $HÕ´b»ì‰¤€Á®Ï!†99¾Fް~Te}e2¯2n6Þ|ìבÃ0 …¤]ˆ˜èhP˜ŒXèÑæ€EtìØÑdZ £Ÿ·M¹¶E“Êkì€|!’º™öŸaÎÑÍ6á$žô©\÷ šeÜ…¼3rhúͶÓÐŒáGsL ’6#p?œ„Ìyl©Ö {±ò¾hó(FRÕùº_ëÐà ŒÖ¡ç¢ã)³íŸü± s8úèáìºkt½–eñ>Ãiii~øáì¿ÿþ1¿·Ë]í¿ÿþ[-w¯~øáìµ×^Œ3†ûï¿¿Öí[@×ÅÜ€˜ˆã­!X¶MxiÊ4q÷¹¡îE•òóóY»v1;öBŒñL±ö±¡XÑÖéÖ?#f;9ÅBÎÈ`/À)Xg^ËhLÀ)ldëXì‡4à3  EZðÄ. {°ýö;±zõBæÎ‹ È fÛ1ÇG_‰9Öž(^ù[sþî(:‚Øl~ÖÝÑæïP$Ná|4HÍB೦-—á$üøÍç›xºªg Éè}Ó§°µ6mþÌë äøŒ¶¥h0{ ÍŠz™öÞ‡töûÉËóñ OÇØ·åX"ár………tí½c'Ÿ|2£Gfúôé0uêTºvíʈ#?~|8Ý»w¯}ãzÚUW]Å¢E‹èÛ·/}ûöåÔSO­qûÁ «›Â[ç`vvvµ ËÆsŽú,{*ë$zþDÍ®‰˜7ȧ¤¤0`ÀP>ÿüwœEaÏG бý±4ËŽwDìÖ: m± hËCÒÅ9HÊØ97#ç×ñTžoPØ]+ÄVÿbŽûW4]¿É¯!Çãß#üb…¯pß}“8ö؃qŠô§›c¤£A²Ö9˜‹€º NCš1ˆ‰ž…¢-Æšk8 ±â[‘ƒ¯Òx¿4ÛtDìÞ®š}µùßÖš~ÕÖ¸gWÐLÅ.Æ{*sºÙõýĨG ~½ÙÖ–9¼-s?Ï\“M× û9ˆ–dñâüQ­¸¸¸É–»ºçž{jßÈe- ÝæžÂ[¹¡ ®Ä»ªI ¨ ›KOOOxáW÷1ãWÛ6¬(‘¢JC†ìÆçŸÏFnŠù[ŽèÎæ•‹÷Xôp„˜b¸0š¦G—´´VŠùxœ¥¹î6爯 gêo3óæ ÕÁC°:¢Lǘމ€é~ä@,ä­·ÞA Fl8ˆ@¹•¹¾ ó½ÔCÙ}P†dÒ‚7"­úTLêB¤3Ûôo»ØA$E ÀLGü­i£Miöمٹg| Ð, iìíÌç=PT‡]íe’ŒNŽêߟ`¿ˆØw’Ž"MvBÁOæ8[ûÿ’eËÎÁ`°23/Y7j³D—»ªOWcZ‹hËÍø¬{ IDATn«KðhªUU¬ÅŠ õjC<çwGgdggW† Õd………lܸ‘ùóç³lÙ2tïÞÃ?Œ;âz»"ÀYˆœSÖº!™#1¿}\ßý€",®G€Û È`œP<7KLEÉ*ãLõ¯B’ÈÛ(ÜÎDvCìob«aÄØOEν¿ ¹ãoˆöCiÖåd·˜÷yæ$»Å БH¤Yj½×ÅZ@‡ÃaŠ‹‹«MðhˆÑ¾®«šT—ØË^ÕàcÕˆ‡Ã|ýõ×Üzëmüüó"6m*Æ‘ˆ™ú0øClS2ÓÖG¾ÉP4† ÷ÄY›0ÚvFÌùßæ½¦?‡˜ë.8 ©FÿäRÑÔ{¤9ÿŽ´Ñ^ˆ©ÚLvCà4 ±ÖH ~1ìÏè-GrÈjˆY®¾°‹¾Z‰# Ç)Zf^ ¶š4äÉæœ7#úrþÝŽ$™éHWooúç;Ä€»™ó¿Œ—“ ÒÎç#];­9€¤’¦ƒ¨ªc®ãss¾L$µM βW«L;'™kþŽÂB³eî\[ŸÂ¦SÛߦk›è‘l¶-­¦- SSSkŒHhŠe¯jËFlì’¨Vΰ}¸úêk˜0á"‘4Ä wF`·=¸ °é¦ÊͰԼŠ(U ‡Ö®Ó·Å:Olj ÞM¯cY6NhÙ4ñ0Òp?GÒ1ç¡T¥Mæý%æýOH(CÓùCÑ 2±óQ:õˆ=ߨè­H:É6ÇÌAœŽd—nþ¦!vjåŽ6l—#ÀÍ@Úòy8+žB¬yrbÞïŒ}: ¯{ÙôÛ 83ˆÅæš&£r¬VʱݩÐm-ï÷qdpôëõh†r-’]ŽÚæ=œZ'·˜k±ì6n\V¹u,P³2‡›„ØPVëópƒ¶eÚÍ tÉ\W#kÝš˜‚ˆ67c­ÍW_‰£ºd+í¼øâ‹\uÕß(//F@R€S# =Ø?!@ÍE ³=ô³]7 ¶hPkľlmã=ÈŸ‡¦Ä­´ñÈ3qjSìØ±• bY*©íÃÞ‚¢ ®G`¹Ý2s.k{ €.FáwÏ#§[ßÓ‘´qJn…û^4Å·1Å6•;1ÊlÓ/!óýzs¾L4˜µ2}ØÚï5ÄÔ_DlþHœú!mqV«¹ ‚›KmS¬Ä³94ƒˆ ÿŒΫ‘Œ²±u7[^dúçSĪs‘Žo¥Žyè·Ð _škÝÓôõŦŸVÒ·o¾úê3±šVP ‡Ã5®U¸­gSY‹è¦27@F3ÖºÔiÈóƒ38Œ%ÿýï4"‘íÑ-…4OJÆapç,+ÐÃ<iÄÐZƒBé²QôÆ?MAšëÞæeÙô0Ùñ2ÊZÐT$=¸YaåÕ™¿¦çšv„´Ý5æûy(Äög’>ˆIŸ@ý<÷!¶8 Ûn@÷6m à¤uç™÷!óÞŸMçÞÜëæ»%ÓlƉ¿ÓÕv9«)ˆýžŠãä,CZö,žÛQµ2àJ”¾…ûG²„­ÅFÑ›6¶5¯1®¾\ˆ° tßËéß?>þø­¤¡ÔÔÔ*¡ ÕU›sëÙMÁ†“µX?´ €nLmëVD"ZµjÕ,^à`0H  ''‡cŽÅŒ?"ç—Ínº‰ªQ ‡v#b…èøp¢3òÌk;4%µï:4=Ÿ‡" *ÐC¿1½Îhz=1ß]QlòS8+¦Xë‚ÀÉÊ íP†R†S~´ :C‘t°9~‘ëx6”/ŒôÙ¿#`ú1çt€'£¥©Šp3Š\xÝ$ÍØzà€¶1ç¶æÿ5¦]Ì9G™k۞~|¾DZx%q—éï³å¦O÷G÷qc?J0ùÊ´éhœÃœ˜íɦß: Á²EÈ\ŽîÙW¦-Eh–ó)ð;?>‘#GRkŽ‚bÑuí ÖêÙ-=ܯ!¬E¤zƒôØšb}I•v'½deeQ^^^¯tñDÞ­œa„#GžÍ´iŸ#½rNì{ˆ©¥!2':arª…ÑôÝê®!œºÇ%4[!VÞ±ñÎTÍ\ŠBÈüHß]ަâÁ‘Væ @íˆXùÞHs}Ò/º¼¯Ä)£i«©}eÚjc¯ŸDl:ÚJ¦Ú…âíƒÀÑJ&§#0ˆXådÄv-ðoB@éÃbó[ó~ çµæïž¦/4Çx É*9ÈiÙ±ëÖ_£~ÿ‡9î s}SÏ6H*™ú}wœÊ|ÖŠ¾mÌÃpBôÖ¡ÙÐp$ m0mHA¬ÿ22*X²ä—:ÿmncõJ$ª†û…ÃáZÃýâM'D"<ðÀÜtÓMqµ«©¬Å0èÚ,ÑD6×Ôë’Y­;“““C(båÊ•L›6 I6­º1:N Îh»éŸ»ÅøÎÚxÄ è!_Šê o@@Dà†À  åGQ¸ÙLêv¨ùÿ-˜˜mlܱáT]c/GOE x6Nìî"¤ïŽ5û÷Gõ%vDà“eÚø³ý›8‘™c>BÉÆ¢°»/̾%æ¯'æsž"Ó®.¦M9¨ŽÆkæóùÌo@÷ã4ì`Žÿ. nA,ÿ'ĺCˆá»Ó¯g˜¾Ûˆfî‘…F~‰“væºÜè ä Ì6ç9 öºžãÞ{ÿÎèÑîzÉc‰ÎLc…ûYÐŽ÷³ßųô\²&©@ 躮ªRÛvÕ…Í5eÕ9wЏeáp˜‹.º=ì"æv;N¤FÒÇÇ8êå@þNÕØb·€ôoÔö‰ú>ˆ¦é¿˜óì„@å2¤…ŽCލÎfßÿ"À8's-ŒdéH¿ áH#ƒÍßOPH´õÀIãÅÿÞ‹¤ˆî(£Ïm2¯ï㲱ߋx]b®©+ÊÐà”BÕZmPŸ…qÊ¡N3û?…f ×"f<I P_wB’J*Ò–KÑ€u.Î}°qËkpV7sÈô÷'´wA2Ç+8à¼ÁôçÏè~üŸéËÅh@*" ÒŸwßµqÚñ[cÿþ’üÔ£ ©¨¨¨ü¼¶ídNó†$qÔ¶ªJm«Š¸‹õù|r³jÛ¿¦•UB¡:ô¦´4=œ“P¤€»÷#) z°7"`²+„lF`”SSœbóeh*Ÿ@*±æ¶ÈvBŒïy°›ù›ƒSšó.½ù24ÝwK3ƒ´‹º–#‰æK$M8íƒXòö®kœ`>‹®Ë;9C¡„Ç"°´÷:‚‰,‚ã̵žœy ýºvÓ|$¥˜~èƒS?ãy$›¼‹¢kÍñŸ6×t‘Ùg:ŠâèŒÀø¯x§#ÙÇ$B7Í V#ù¨h:"6éó_Q²K bÓvð‰ }ü œ‚‚ÖüòËõ’æ@%5–ƒÁJ¯1Í-q¸ÃýÜò¨[Ï^¾|9_ý5çœsNÌãU·ÜU8f̘1¤§§ …xôÑGcî__Ûfººe¯ÜRBvvvN†Æh÷Ê*Õµ! QPЃ`ðrä(z±çÓ¸½”՘ǡ‡»5P-C‘ ç ‹e/ Vx+a±Ò¼Ö›ó¬Ḛ7“bÐß!0É3ßg¢Ä{=Eœ¸Ãù¬Å‰Ïý}fñêVì¾E˜üI"½qЉï›(>ûó×zGwNE}›kÚÝG?±`[>uWzØÏôÛl?BÏΦ éÈqÚ±å=‘¶l+á7$CÕJ~ëьӞ}‘Cö?h@è‡ôú hpIgòä§1bD5}Uwk €nŠs@í´´'MšÄÌ™3 …BœrÊ) 8wÞ¹ÊóYÝrWŸ|ò 3gÎäšk®áŽ;î`È!xà ~=ÛœÄaͽª‰[JhJs˵­¬¢öG€óWTAmÒ[mÁüçà\FÕ»®ˆÝ†ä"ª®bšß¡)úibÙ:”;!ÙÅ‚ËihJ~3ªEñ‚9f{ó€ä”»Q‘£èòD¤ï^ïú¬Üó3ТéþPÄâ­s/ÏœãoæýläL³‹žV 6z„9þ,ÒW£YB±iOœ"8µ: ‡ç—(¤or nÁqdÞ„¤—ÿ Àü›ù|:  ›s[¶¼Î|þ  6 {¶9÷J¤KÏG »?rô¥#v= ŒÌuØú!ðÙgïѯŸÛñ˜¸5UrG2$¸c´/¹äfΜɦM›ÈËËcÊ”)Œ5ŠÞ½{Wn_ÝrWË—/¯\YeÇwdÙ²e1ÏW_k1]›¹ÚÖŠÎÈÈhÒUMܖȺˆ={îÄo¿-F@µé£ÝƒuÇeŸŽØÞH*8' `Ò¯g m:±Ew½lýñ4ÒC³{Í6sv<éá» xßE(¤m(ª>w¤+Ígû! }É/çâ|_¤%Cúµ-gŠùk_Æ# \ˆ…‡Mû{švaÚbÝý‘“ì,ÄÜ÷D3ˆû[¿eöÝŠ3XØU¾ÝÒPWÄb Ìqâ äð\‰yos¬õæûÅhé†$’¶ˆÅÿhö†BŸ0}PŒS'#1ô Óööhðœü=Ì=YгÆb.¿ÿ>—¶mÛ¶¸"FMañ^»]MeðàÁyä‘[}_ÝrW]»vå‹/¤ù/^¼˜!C†Ô¿ñ1¬ÅHÕ­ªbÍï÷WN]RRRZ¥!$ŽœœœÊŠwµI*n‹D"üþûïì±Ç 8÷˜ÿç 0°+rØcH.7ïÛ#ù¡;b]m‘úо8†­ÓÀ!6ÅØÚrœ…HæX‡[ã¡3ßÌv7"‡€Ó½pìEÈéUˆd‚M81ÛÛ!¦¼ST›>0Û^åú,l>›Œ´ÙNˆ©Šåq¹ŽÐ cOÄLÏD™u[L»3 Ú,ÌW¿-Fß\ïù¦^G 'cð¾‡@þ8Ĥ‹lÓÍ´eˆ9Nº9—])¦«9×áHžùмö2ç¶Å«¢lžéc…ÿù|¬^½d«ß”»†[¬k#¿ßOzzz£Æ7Å9ì¬9+«ºº0[Û믿ΠAƒª]‡±´´”Ñ£GÓºukòòòèÙ³']»våÈ#ä‚ .ÀçóQQQáiÐÑÅX܉D(--% ’———°ÎU€ŽD"‘’’’ÐB±‘H„’’†=–yóÊ0î€@¡©ÿ ™á0 %Hþˆ¦Ùß#ÿÑT•6lÙË/Ë; i®n›‡µjw= h=Œ˜äŸSþ \74=ÿ±w›œRŽd‚Ûpn@€ š!” k˜èîˆý>£—JPtÅDs®÷¨uCÒÈS8,ùMÓ_™Ïnv'õiº¹®¦­Ç#§àΈ±¿eúÁ®¾i̧£AåkÔïëÌvg ™ÌFä,ý1í6ˆáo‡€}l£¦xlE?;@ÚÌͧžúg&M²å\k·X²ÿgï¼Ã£¬Ò÷ÿI¯t"HYšŠ¢¸Š¢®Ô]ÛײöuÅuí •u-XËÚE±PwE±¡Ø]u±`+J“N’L’™Éä÷Ç}ž¼o&“df’ ñ·Ïuq‘LÞrÞ33÷¹Ïý´úR«+++ÉÌÌlQæ½5îaQ‰4®˜:u*üãéÖ­[ãÿÖêÚÂæ,–977V’C|–l_@“T"‘yyyMZ rss)(ز²ˆ§¡Ð/Ó&_@H âCðh…ˆý1ÂcжÚÿ<Ÿ 0®TÄ2#ˆ]H•¢-¿=CcœiXª(-F ™‚ØðÄ-R£3 ¼“Ú¨×#~Ü]w ^›¦…îžÝ=#Ðlƒµ“k#MÝ:oÿÉ5ÚetÆ+Áj²ŠÉ9ÙÊÑ( ¥ ìWÜx†¢¸ã¯‘¾¿-&ƒÑÂv:’&~rϳÚ)"‰ãwî&7¦#Ñ¢5±æ\äüÍrϽ("55ùóçѧOšjþ„?hG"‘# šÃ¶U€?~<ÇßfCíZ @ÛöÅ,:l.‰PYYÙ$€.++#777¡ w¿œaäd·qÆàÃá0íÛ÷!ˆôÔÈ!¶úÂ_‡òynÕG_<0^¶Ö…Hˬ«Öf †BØ‚0~‡˜·±ÿ·CLCÌxôb³Ÿ¢D xæ¢m ZHvw÷,u÷7ÍØ2ßu÷°è…š™@Nщx%4—»¿­G;†Ûâô_[¤«—¸ë<ˆLþíŽ3€ÎÅk\`õ/ÄV5—ÿAÀùG?>é½Ð$ -&O#°7}}€››[ÜÜ÷B²J´xYEÀ¥îïßû‘‚äª Äã?ÎI'”0èÄk–ÔQYYY“ä-£go« cï»ï>FµÍ¦·:€®/dÍÒ¶·Fgo„ˆ_Îh,»1óK,¥¥¥tîÜ}qOFÂU,wFL¯‡;s1rÌ# êÎ{OÄŠKö9Ä]Àx-bÕK`í¤«²V„¶ä €AÑ–fýªÜ¶Ò¡+bïo ˆˆS¬q žSl Ë%ha8-$];þÈ‹¢fi9ŠÓî‹À,ÓÝ/Ûw\éâ¨vÆðtô wïö;ÿ´f#ç ĺ­ùmš»Æ÷È·à9B¡¨–5îž]Ñû’x*ÑâA A.^Fe•›ã ` &L`ذa@r¬0Q‹;lÿš«(ÿÖèdRÖÇŽ˨Q£¶IÇ*´"€¶¶WÑ hfnS¶*ñ¬VÊÌ̬³e«/;^‹ÖÀƒÁ :ô¦ª*„tÒ2åÀ+n´7*8dšòçˆ-nAòÄyh+nLs!ε0ö@Ûñîx•ÝÞ@àT¤’wOÖ-‹ÜÏíñjz”»k§"íu3’6®DzëßÓ=¯ºÜ(ìmÜ3f¹{.D‘(;ºë3ºéÔö…7GÞÇîž=‘Ãò?H¦xI; 5pÌwÏ\„´ÄÊ?s¯ï‹$¦Ah'‡§>(²³»V•ß÷ó ´ð!°Þ„×q&Í=[;7W›j^öÙ§ëÄ5om€Že‰èÙÉÞ£9,Y€=ztãþBÖjÂììP_ÈZK÷%ôVj(l®9É233)+[ùç^ÀSOýÁX´>1ã÷PvZI äàº1Ì7»ÍDà31Kë6ò>Šù-Ç«~·w>Í"Ä’óÜ=þèÆÐ 1Ìw8墴󨾇Xü(‰#è»H‰Àî>”J]áÎÈ=O1ú¸Ú¸G¡߸kü %¾LD;ŠçñÊ„^‚€ósw7ŽjwM¿NÝéÊóÀEŠÜ³¾âÎÛEc¤ ŸÀÇhÁÈCµK¬cK%žìdÙ,i&%%…пæÏŸOii){ì±ýúõ«‘~ivW_'•†J…þ’Auuõ6+U$k­†Aµ £Ä²¦†ÉUTTÔê ñõ#43-/Ù¤˜Xã7­= ±Ï>‡²rå ¼m}×P´Íþ…”µG@1I/_ »µî÷¤ [Ýç0ФXŒ×»#ã®F€´Ð“‹r ûûO¬–¡Å"×bŽ)îœNÔ3ÜýóÑ"’\º#¦ùÒyÇ#ÖAìôF´XltãÎB ÒIÈùÙ…Ûå¢Åà¼Ô÷\wß¼.Þ; 6›‚˜¾Z*@ ÞÏÉ×-hwïíPHŸ‚²F¼¦çhXט4÷üö9±T|û?Œv¶ …ÐCÇŽ8öØc3f :Åê\“¸5»õ— ­ªªª£g‡B¡¤j¬'b¡P¨fˆ×¶uý?€öYee%)))5ÛɆäŒúÆ$½õ¿>­=0dÈïùöÛŸhî€j!^WëëÐ[: ¯$eõÝÜy ÿ‰€#ˆÂú:¸köC dõ†¸{Øý7î˜H~ ¯_àr÷Dù,wDŒq‰_™»Ng´Õß„¤–HŠøÞo$ ݱ'áUZ‡¤œ‡}3øÖ¶îÙ6ºŸOBÈn|éÙh!ªÂ‹Eîíb•»ž=ŸéÞV;oªÆ+š‚@:Ýýœ†'õ@»?HW!;è^3ÐNs×1æ_Z3—ÙÙm9äý1bûï]ˤak)ù!ºêœ1ð–j2›L¬õý÷߿͖…ÿtëƒ4,“3rrrâþÙø ”÷›? Ö©vËkÖ\zéeLžüÒMÛ!` é#/ö9„€ 3b¿¹¶Gޱµx‰#éø»"Ðl‡Àv=Áïݱ] tuÇ·Cãgža¼­œ1U{-Že¦#`ƒX³±ÜÙHb8-º{Ž@¬ºiÇm€oòɘ­ÁÀ²[&ÀrÔf!÷ìÈiîŸÅ…W"ÍpÿÛß3ñ:ž›c²ÜÍ[Ø#¯G¢e6¶G L÷Œ)î9ú¢Á ´+ ¹kvuïag7O2JK»2}ú{LŸ>Ç“O>ÁGXªüÖ·dôì­Õúj[´VÅ ã骒,ƒ…B5]¼“IVI"¦U'bVq¯²²’¶mÛ&åè(++cË–-üéO§ó駋Зº±¶Ç“/rо龙Ð2Üÿ]›¶ÞvEî_1—-h艤mÜH¬ß¡Õ_¶í¹é³þúV*5€ÇB«H¥!Mu×àuá6PÏD‹‚1b“*КTæžÃ€Ðo¤•x‘àiå¼ßß­15'ØÎo÷ ù®ÞB‰×¬6äž/Œ¢Ez¸ùÌsó¼-†ëÜœÝ9™îõã‘\ÕÖý¾µ/[…§ñ:”¯CNÓM@))Œ?ŽaÆmU5¦gןL7•qãÆqÓMõUOüå­U1èx,Q¯·?:#77—P(”ôj ƒ¶LÈìììš:"ÉÞ»K—.|øá{€žë‘Ga̘Û)+ÛŒ€!€˜m:“l‹À #’Aòðê@ØÝÏ‚M"°"LÙx-¤‚x%Q«|÷0à  ´‡*wíßõÀërbÆ2<0.wÿÒÜ}Šð¢%Bxao›ð€P˜³ñº»Øu ü­ xØÍG¾ÃZwíÑbF€j‹Q:^e¿.hQü¯”«éý¶(öqÿ—#çëF<ÏE‹åÞHŸÏF‘(o»ûΠöB×u5ÿ­{+ð´oÁìô¦ºú.¾øb.¾øZÒÓ#<øà]œqÆl æ/ÈoNù†º¨$êlMÖªtc5¡ÉôGg˜œQUUÕ¤lÄDη…!55µ¦@¢™Œ~‹'†ûñÇçÊ+GRQQ‰çà2†]†¾ìUxQ®æØ²©H;mÀÅÀÎÏA YŒ—aÆSÝq–èb’JŽû»¤¥@›–›Š·+HÁcÊ•¾cËÜkxÀ¹¯-”-0¸ßCHc˜âØ IDAT×^è^ëᎷE`W”€Á‹±Îs×[çÆ“ážog´È¥#p\„Xk‰{Vkp:rÔó]†€¿ÂÍa'$ãôÁs®.Cþ…<7†ÝP*½iË[Ü{²91n¾Êf}´›§¥HBZâ®]Š4ÿb` »ìÒ÷ÞûO“2rcYK°ôh=»ªªªÆIž]YYÉäÉ“¹öÚèÈÛŽýª:ÞL@Û+ÄES³-õ»¡w¬…!ÑñDzÆ:Vã‚… r×]w1sæ'¬_¿`ýšª?òÀ¯¿È®ÁsªY× Ñ+Á«©aqÕŒ:¢]&’Z,».cÆ–cÑÛ»ß{!Æ8–M>Ú%Tºë¯E`7ÚQ™n|ÛáÅ%wÅcÕðm^:!k€i™]ÝßÍéi»«0ØeSös×úw±;v;”(´'^ñ¦UÈI»È=‹I!{¢Ÿõ¬¿wsQíæ`?w?ûü¡(Ý}sØÕxÙÞÍÑTdÊØ5À×l·]æÍ›KÛ¶miª%Se.³ït¬z#±ôì7òúë¯3|øð†. Àµ×^KQQ%%%Lž<¹VÈàèÑ£yíµ×?~<ûî»o³>Ó¯JâhLbð³ÖXN¸¦:"»¿…íE÷Cl.«ïÞ~ŲóÎ;3eÊ”˜ŒsæÌá±ÇcΜ¹ h›sÌôÞ|ôå –hŒÛŠ÷g À±-û`Ÿlޝ]Ýks£Å(D°'”WÝñ°f¡Èk©51Ú”(óoT¤éw­l<¹Â4ç|bðÒ°û¢¸ïB¥’dƒL7¾Ùn–öA ›œ’Ý3鯒Žôý‘‘‰Às°{+)»1ÚwÐ"Õ±ñbªÝQA¬Läœçž¡3ä½ÜÜþ€ç £lûû©nÌÄè_BÑ7mPzûäl=‚ê͆ …ôèу<Œ7Þ˜Nk±”””Z¹ ~=Û_?{æÌ™”••Å•³°|ùrŠ‹‹™8q"Ó¦MãùçŸçÌ3ϬùûÍ7ßÜbK«èD»ª˜{¬ªªj0:£9¢DbobSîëšñÞ7Ú233:t(C‡­÷˜M›6qÐA`É’¨ h˜ö›Ž@`bï㵸‚my²(ÊCqÙ/#>E$<‡š샀$˜Œ€ÿŸˆnDÉ,cQfdÊ ÌB‡ÿ‹PIAm»‚b7öLæs‘ÑæÇ4wDøª(ÏEiö£Ü¹QGœ·øŠRíÍ1ú9Ðh1ëŽÀ¶¯’]*^X%´lïæ×jW!‡àùä vÙeâ±dê4'c‰ô /¼À!Cè×/V÷ùmÃ~U]^^N0$77·Y ÅcÖÁ»¬¬Œ6mÚ4‰':öP(D  ###©ð¨XÏèÕ«%% gØ0ôEŸ¾¬Ç¡/ú¿Ñ6ýw$òS¾Û]éÄ´S³{úYˆâ®1ÉÖ{9*št>Úúƒä‘i¨ú1ë+Pu¾ÿ"0*u¿ÿéÄÓܽžD@g’Vo³»–5ÍMqÿwD D _Û1Ý Ä:÷ALs Ò™ÐÖ#0Ü„$+ÐoYŒþZ!äØì…!c!‡–º>I El>€,~z6Z$N§vç3s¦¾âž·“w7sÐûÛiö|çÝ‚§eˆIñå—Ñ·o_3#MÉ–áÇ’‰™2e þóŸ)(ˆnÿ¶íX«èè®*f&g˜C ©m¯hïP(D›6m?)†%ZlÉ•bŒ9™P¦èg9òFÆ›ˆÀî6´­^†d„7{„ÂÍŽÂÓ3· Í·}ÉÛ¢"J ñ2çNGQÂv+Šl8 Ozøµ‘ƒ˜"ˆÉÞ‹êI/Dàø²H§î<ƒd–ÿ¢ÖXǻ뾂—bÙýðƒÖÖ«”I¿qç}˜ü1î˜ùhÁ)rã³0·Ýñ@´Â!‚šèµˆ›Ï‘<ñ{jkÐf_ &Ûø3ÒˆcÙî¸Ć¸1ÎBï_&Zìú¡Å« ¯=˜Ù÷H"ÊF=A‹ó.h1™ŒvQ?[زei=cñ,™:͉š¤Dtî|+¯¼²Å³(›b­ £c{-Æxkt¬Øâ¦H$ñ[Šå´4ø¦tqq1]»ö§ºº#ž‘óë”ìp=b’ÃdaLv"Ñ3ñ/H~øF&r¶ýäþùãª-ö¸G;w]cœ•xz;";…™œ3/¡^å½Ó\JíêrÝîÛ¯0’• MA޼.ˆ%—âZ…Øíþn^~@õ¬á9 Ãx¥TA;‚SÑb-?EвænĶÜqíÐüË ºù\âþ_…—êÝívvB‹Žß6  €?»ëù·úÏ @'ôž¸V£E÷?Àœ}v?Æ»·žñÊLzkÉž‡É8"·õn*ÐJÚVËèŠoÍÑö*^€­¯â\Së4²ÆÖ£€¦¿'ÃJKKyï½÷8唋‘L±m™Cq½ixóïQmåT è]Mq,ÒTýµïFÌë¯xiÜ$]¤¸ó-å»ùä°²ÂC©HÏ>i¨fSÀŽÀðe7¾~î~Ýý7 &xŸ»‡Id¹î,&:Õýn%UAŒ×  DÑÖ…æwHÚùoAY‹ÕvG@Vâî¿/’b-cµhÓÄ-6<-¹¾ãl¡²D¢j”áØÏÝ»IÝÝÿKý Z|þŠdŠX¶IAåÈ/ð)’]†!~1÷ߺãCè=RT´°AŸG(ªÉîk)KFçn Ýêâ ýrBtlosÄ1Û5ê{ÓüÑ!‰Ä'rïX毛›[ç Ñ”q\tÑå¼ðÂÓ(nø´ޤ‹åh›» ’6²ýJIG޹v¾+NGšæjG#”¢/öaîfiè—wDî wo?8ж¿=D&œ¢5‚ˆÑ~ŽZcÝçÆg5B,-à®]‚¤š×=W/#Å=ã×à÷A`h€¶r€þŒÀl^ |_$yìë®q"ZH¾rã4"Á+2F’ËSH÷Þo‡a•ñìkûZ8÷B¡ŽÑŸö(Ü®Ð=S5z_ý&èÆ³ÅÝ–ó_ÜßE¬¢›ó³Ñâx0ÒÆ'òâ‹/rÜqÇ5XÈh[Ámu\f­  AÇ(h¾ÉŽÐñ&»Ôw~"÷޶xc¹“YœöØã@.üÁPò2´U~1º+Ñ—Ñì ¤U^‹ªVÓâÄï¤öÇkÒ‡ã%\˜½…ÀôÖ¨×â9W"­vb„VÛc$Ú†/vcyéÍ'"0¾-Ó+·Z!!wŸx—"yá´˜ˆö>[Eº¯”Ð éÛ…Hg.B:ôi(e¸›ÇoQòJÐ×"EnE ØöxìÝÒ‡;£…à÷¬çS7ÚÊ .:£Ð¿1Ž+@ Ù|ÔÌ¡§›‡r¼Î;¡tÒ±G£÷½-Zl®BïûØÿ箽#óæÍãÄO¬·Q$iQö ¿l2LKZ«hs¶dMèX,Ö_»£±¶=MùDŸÛXjzSï;xðA,\¸Búš³ïi@#ð˜Y!JŸþåTÄÿ€ØÕ?‘Ãn±»V–»v¶aîZ«ñbn¿@v6bÑ…îß&¼:7 0ý-ŠÈx/ÌÎl.r\µCŽÍ*(ç#pn‡—¨’‚€©Ô£É+§£Êq‹}÷û¯±k:^YÕ|´” €;Ó÷1öÑîZCñØh9Ú¬–Æ•(¢ÅëÊ’ëþYŒòÍHB²H?Ø…Üû±±÷]ݹ%Hz±R®&í‹Þßõx~KChö@ïñ¹è=ü—{®¡x…¥*Y·nc>„þBF&?D— mn@Môz­Ð[@o ó¿i‰¤ßšÊ *¨ÔعñÚyç]Â7ß|†¾ ¡­,d—¢/æ42Û£hƒwPX[Ϩ«½€€öØÀÓ`_FÌí¤¿.ÃÛίF,n$!ä»{íŠXÜñH÷Û,¼‚@AÔösÄ„ïtçRÂSЮ`Ô /RÃô\ƾhë~¦»Ö5(¹¦“Çãxiáih1£)±Ø ’LþŽd•]ݼ­C@ÚùÞH–Œ‘ëñ´xkfP†H#~k'¼êÕx¡yÙh§ð‘ûÛyî½h§ÿûm>hcñÑÖI,ãÜõÏFÒG ú\Ì@ È:vÙå¤:gû óWWW×8着ªjÕÄh¬Æs¼ö?½XKwUIII©‰·N íü¦Þ»´´”ÌÌÌ„ *%rßµk×2uê?‘>ÜI1ÏÝQÜkŠûû}xYvwP—qE¬î6j3»$,ÆÓ®ýVèîs/f¿-G Î ‡Õ ´UOE[üÛQH^¤—¯G ö6>ßøÎ¯Æ«ùlŽÂ"wÜöÈé·ÒØïCα! ¬Àkáµ_ ZœªQTGŠ&1=wҩӑ̳²•v " ÿîñ9¿êŽ;/+0–ýÚý¼‚À·¾¯øž`Ç"_BZèæ£ðǼy~ÄkŸ±SЖdqÙeWƒ¯Qc5žýÁ[’µtw¦æ°VÐ-m‘H„`0HvvvRç’]@üw›6m’ªŽÏ}#‘}úôGà{3J^x i¥g!€6k‹@dg´Õ¾æ>àF#Pò;üÌÞB²Ãhê2¸ Šä¸Šºà\Øè6bšïãÕ9"–j1ÒAÄ6¯Bu1³¥(6ÚêBCíTïj”Ýж? t6rÀ}€vW mù-wÎîîgëú’˜í"ÕâðŽ·¦²En>6º{í€~{ãÉ3þF³v®5&¸¯,ªI;¡ÅÍêylpÏwuc´AŸ—rwß.ˆ=?DNλ¼ùæ'1ŽOÞbõ,´ÚÎ I#‰2hcïÛºµ:€Ž·[J"[#£ØH$Ò¤7.‰DµBö*++“¾wC÷:uç7^Ã÷(œë,¤5ÞŒ¾È‹Qd ÔÎZë‰jo\‡@%±Û H’°Ðµ€;ïNôå¶~a¼4èM(ÛÏmºïÞ!ðîBíбiÀpM÷Þ…í¡]À4”ŽüÍt¤û~5h5 ËtãªB ÀHT§âL7–¿¡Ã½H/¾ ißS.?±Üõîš«Üs‘¬QŠ€ñÚU(æø-wÿ›Üœö@ Ú¯i¯ßªÜùÒ¸ME |\ÇtA ÚÓÈ‘»íæ£E( ïý8x•””Õ|ýõ'ÍÞy%–Ç’FìûRUUUs\<ÒHkѬ[@7f‰Lº?éò±Æ´Íqÿd€ÉÞwذ ˜>ý%ôÅÞ ÁJ”¶;};#€Øi¶£©«…V о/TΟõ¶±ËÛÜï圌ݣš7" ²Fµfo¡­|¬’…îZcÐBp€»O^-Õ(|Íênä"P,sÏRDÝXas6fâuøîŒ$’«‘>ÿªk^RÎf$M܆ägñ¢w¸{EÐ\Z s7ļW¡ˆ•*7®ˆércZ€ò3´Ù"f} ;"Y*-jº—×TÁ˜ðŸÜœ×32€×ü×ú$®A`¼ÈÍ[o÷œ½ÝužGÓ•¤§—²rå¢&%„5ÅüÒˆ…š3?ZñëÙ~+//ß*‹KS­Õt¼Eû:®¡¤ÖÞUÅo‘H„`ùò%x£øàgÑvý:¼mùΈyÞ¾ ïQ»BZȹÔc/9d$±kET#0Al'WÖ¾×¶ †:ÿönŒuFÑ3‘,± b¹]àYYT“cŠð„a¼ð3®"$¥¼œ{÷!ý4bŽ“‘œò[T“c½;æJwh'ò ’[.tçü„€u9ÒÅ34Ô1å—ݸnF Üν~bÓ¦ÓG`¯BòÉB÷lÖH××Z[8ûÐûb}(-ƒ²£›Kës'Þ"»×L¼ È|ð>Î:ë¯lk–ˆ4²fÍÂápÜí¼êkw‡9ï¼óÈÉÉaãÆLš4‰bÅ¡'o­ ³Æ²ñ,E<'''fñ––êªb‹Ð숱,ЩS_ª«S([§înîçž“ Nãˆæ €…¾ì{¡0¸ã©¿NÄ]H~èVÏßg#Ú©ž¿‚ÇDà5•„$† È h¥A§ºãCÀœãÆû°ñÚš/r÷±ð4-èt÷9ÿŠ4áÛÝ5;¢ŒQFÝ(¤Ãžãžû)$ €}FNÐëݵöu¿…k[±ÞžnœÑ.b-Çun\¬Û!ÐNC‹ˆe-6ä·˜ŠèÝcü-‚Âeh—ò8bÓÖ@½o¹åþö·Ë¸Ç¶g±¤‘H$¢E‹˜>}:«W¯æ‹/¾`ï½÷椓NŠ ® µ»JOOç‰'žTxiöìÙsÌ1Íú ÿßtC)âñœß”û›°¾E¡¹mýúõôê5}¡ÏCVäþK8C‘¤1} nCÚªà9ÚýÛ„Øv%bzÓÝù=PìpOÄp·Gq½±¬iÆ7 Íz’#Ö¢…!I»#výRfÕhK^ˆBÞJP Ž3Ýs½é®ÖJ¼”ìB¤ê®eŬ¡­EKXÏÅÎHÆØŒ„‡³}Ý]çoˆE@Žº+‘3µ'ÌTÄæ-Åü&Ä´¯E²ÄëHâ¹îr¼øçÚådàzÊG Ý½7KÝý»#g£Eµ¤âÕó°ö9Ü€â¶_«ëñýý;£ÝS ˜¬¬W]u #GŽä×`Ʋ8â (++cÈ!|þùçTUU±lÙ²¤Ú]­X±‚?þ˜‹.º¨ÙÇÜê:Ѿ„þŠsõ¥ˆ7t~2ã³óÍ ØØ¢ÐœVQQA¯^;£-½9³º¢Jj÷#€»±µö8:"p‰U¸|^jr ÚF¸®AQK³»ºqÇuBZqœ»¢hŒíK{ED[1¢"<©¡?Ö7Pø]’2 œs{þÁÃJ‚Z§òb±ÆLí¹*ЂÔ¯ é}Hº¹êÍ(äî[áñw­ÇñJކpßdƒ[àŸƒµQH^zÛëhá|Ðc3æ {¶y|óܵ3ñb¨Û¹9í€ÞO«umÍz_ENÉxMs· q-^è]yy›Øÿî\wÝ?Ø{ï½c¼¿+))¡cÇŽäççsðÁйsgÞ|óÍZÇY»+ûÙÀÚì›o¾áî»ïfòäÉ-ÒÒ«UU³ƒÄÚ^%ÚèeeeIW¤3ÏrjjjRNÀ¦4 (**bÀ€ýؼyŠÐÕʆ.@ìè^¼º‹ÜïQНßAD@bѱì:”N]_áö2䤺§Ñÿ…íï~_Š˜æ 7ÞöˆþŠ@æCοE,ö!´ç臤Ó¯3™ƒÌ2 ­A«½?yxµœ{¢š‡ é:¤ÉwD‹IbÓw |iÍ碅ç}´ãë®wŸÛG! Ï@±Öÿp?ßäÆs;š÷«}(§ à7lÚ ªÊÏÄ«/b¯[£ZsZö¡´÷¼¼¶~øÁÜtÓôëׯEÉC¢N¶Æ=^{í5vÛm7Øè±õµ»9r$}úôáØc%33“sÎ9‡ÁƒëÛE&g¿:€¶ Àªªª„ûš5µ¦s  777©5Ù†@€Ã?‰ùó¢(‹ ˆáuAìõS´-þyæG"@ƒ×bê5ØPRÄQyÑú>t#]õâF÷4ḃÕó÷°K_p)H.‚XvŠÊ臤‚9ˆážà®½¯+v{”!W²Ý.BúùjÄâóX¾ü+z÷¶Tqë3hUhA0'äB$eü„‹?!àÌBlØ€Óv߸Ÿ _àÆw—Ó£Hr¹ÑÝ{Js?ÈwŠ1·è“;~ü…ûÛÀÏ\~ù…Üv[ta©ÆÍœfÖáÄ^ËÊÊJ(k/QÛzÚ´iqÄôê‹¿mÙ¶ŸJeEgøcšsrr¶Z¬cuu5@€P(TS«ykܳ¼¼œŠŠ žxb*ó狘㫈ž…tÙœÿˆÀeO¤=ÿ„—áÖÙ;r~âÎ{Þ½öo÷Úfß^BŽÁúÌŠçÿëÇT-žx¤û?èÆ{¥Ëñ:\‹b˜§»ßG#»Í]ÓÚRuÄëÊÒÓÝ×q{¬z[AA“&Y§ïÎÔn `õ96¸×GY–TóoÞÃÑböª‹IÝvBqÇÅH29ÅLâ®cñÎw¢Åãi$CXrÎwþEha»%÷ :óàƒrøáÇ60ï±ÍfYYYdgg“••US^ ²²’ŠŠ *++kBM[C"G²VRRB»ví?ð¶V§A×g&g¤§§“™™Ùâå Í¢#CÒÒÒ-~_¿|SXXÈÕW[Üg˜þàŽüÎEˆ•µERǹxû P0ö‘‚ä†gÐv¼/’¬cÇ,¼þ{a´5·8g¿£*ÉåHóî€Xe/$¿XJõ‡H~±.,UHšy-ÝqסôåQˆ™Z?¿+v{Šæ˜í®?ì,”Ðñµ/œqÆ,[¶‚;’f d-£-–¡x·»¿5¼ýæçÓÞóÿ¡]ÈB´Bí,¦y›ïÝd¹q}áÆü$Z„F»÷a JÝëžý·À\æÎý’v؃ü’dÍâ‰322j$@K ‡Ã5ùM)h´µB½GSdÌ­i­ -E;%%…üüü6°5,VdHK§F?oJJ }ûîŒX^&_ ‡Ú‚¤?1P˜ÛZ. Þ€€úX$‹˜ž»£;§»û÷;ßHn@Q Å}ÞŽb;5pÌ÷œ­&t ^›¦QBÍXÄ:wBàÿÒ£3ÝsuFàŒ;ž{¶,´HlFvEÍ]oºéæÎý”÷ßÿ³95ËÑ×ÂdŠøBì¾=Ñňõîôõëž…œ³W#F=-†Ån®¬ÁÀ $×XÙÖ·Ý3ŽCÌüR$iŒC ÄwÈéhïãŽlذœÎB]y IDATûðóÏ˘ßÄÌ ™ÅÊÚƒä µ”%[ûfk‘¸¦X«hû0Ô—×ÒÕîìÞVب¥]b]'V¸Þ[o½…—a61Þ ŒJðîGíÙˆY/C@w1ÒOÿåγ"=‘t= ëjœ­‘œ#Hƒ]XæR÷ûj$»\êî»Å#?áž­ÄÏÐ"A`^‰¦ ß=‚HйÉ]c;ÄÈóѳ×_™!Cã‹/>Æë²b)à›¸ï…hNGN»[ñjT?Œ"dîDZõÑH†8ÁÝ$í\ÄôGãe"Z3ÛkÝù‡»¹ºq/Õr7ZèC±×w!§ïãÀƒ÷Ю]wŠ‹­§bóZ¬¬=ìXY{Ñ,{k0èd+ÙýÒ K<Ö꜄ $Œ@ @fff­¾|Ðô( hØQçϬOgnŠ“±¬¬ŒÜÜÜ:u©-\ÏtC³ììíP’Äí@y=b¥çFÝ¡险”Š8ž‚¦“ËNCàgÅÞ·C•Mî¼#ðÂÔ"à,4lr2öFÀhíœòK·Ä‰ vºë|wˆÍ~ëîw¬»ß³H®8 ¥{Ov3ÇÞ7ý î‰×®jee%uæüŠ+þΣþÓÍI®ûߊ Y±¢ƒÓr¦»Çn|׸9"p„Øî¹î:SÜ|ãæçjöû¸×^EÚ¼µúú1ò»ÐBuñìó4ÚQ¼€ç œ¬gË–µuž­1kžŸeûµk몪ª¤šÇkÉ6Œ=zt‹©¹¬Õ1hÓ|óòòZ´íU´Å’ZÂü º±š³fÍB`×}ùÿŒç÷@NóÜ¿^Zr*b¯£¶¢9yîÿC|w«@Œ×ÂõÒX…ðÒ¦­0R[÷zTÑΘˆ»Î»˜¯vçì†@ðs¤Mg#Žç–7áeAnÄçWPöwã]é®ÙÑ=öÎêþûÇòÔSÓ(+«DrGÈ=GZ(   =Û2 §"­þT<ê/nŽï@zòwïG g çæßÝ\÷B‹‹½5Ùƒ@y ^úõ9èýèŽÞ»³“~ I0¯Ð¡C7 ŠYƳ%­¡²¡QUQQÑ`mŒ¦X2l¸5°gh…’’BNNÎV‘1 $Ko‰{[è\C…û;î/(SðÄ.íC_ëR”äa u.’ Ãç7ñ:}ÌGúª±Èyàz#ÜÖj÷sC1Ÿ+Q–\ ’RV¸ñlvãkë®1±Üÿä@;±É# €d‚‡ñÀÙÀ”)÷Þbð4Z¼¾sÏþ-iiõ¿w6¬%/¯^"ˆUß[€d˜CQ\õ™nÌSÐ߆*èDÈKˆñ_vO ©% Í>Ò”¯Gzr>J"ªFlø&¼˜›PßBó ÑÎá÷{ ’Pnö§ª*‡îÝû²víòš:³æÅÆÌÀØî‘‘Qom íælטµ–•Vаuºª@üéáÍmÒTëÛ%€º¢ix…NFøbàºg#À5«BòbtÄk» û ’BVºŸ?Ã+ÆcEêç!@õg Z¡ž°û?€j;$» qcú×L´ÏÄÓµ·G¹9 wG 1EFø›×®C2Ä&´°œ‚œz(êd€çf ž=c‡UÙN¥gÏn¬\¹ÚÍ‹%½¸gŸ‹Xì$Äø3Qí’W‘Vü b¶§áLÚ1ãBä¸ãæølÄ¢¯D»—Tc=¯øRW¤=ß„bîB Àwì9H«ž‰§SoOyy={îȺuËkIÕÕÕ„Ãášgn‰ž€õ™Ý§¾ÚM-ÎßZÀ6k•½5¬¾jw-i¡PˆP(T§Ú½ôÒKh >ÙƒHC¶ÄŒc© få(äìK`Ãñ€ûgÔ"©}ù ÜÏÏ!PÌA•<^}Ýëy(²"Oƒ¸ñ!¼Ô|¼ «¹ÑÕ·ØŒõ$´E u;b—6ÿsQLµÙwPá7O ¦¹É8ýôÓëÌc8&“••ÅÂ…ß‘—×ÑÓªÜmtó|8çëðd‡kÜkÇ¢ ÌþˆQ#ýÝB PdÇÈÉyÞÂt=^¿³ÐÁ$‘77 ð¿Åý>%=Œ@Ú’_:PRRLß¾Yºô›z¥ûçî–`Ù g"èbÙÕÕÕ »5tSÿt3ÌÎÎnñì'3¿¾™™—ŒòñÇóQ’È"6È÷×™ˆYV#iá¿÷FÌm"ÑJ$qlBLº^§íã=õtX§!@˜‡óä@,vçF€º1¿íû2^‡ðJįC@¸=’1†áÕ ^‰ÿ\¬Æ«O Ú-¬FÒÁöˆ™ç#Ie0Jâæ ¤VÑcÍ–mjvôчóúëÿuÏZvP&æ‰\¯GrÄ­n¼W¸Ÿ{"ßKh‘èŠWýo´@–# Fý2*]ºbüÇ¢êxÏ£AG$w܈ä¬=|³#˾õenW°~ýFÜo¾™‹ß  œ­&rC,»©`–S¯eû3ˆ£Yv2ÖZXwëXF¢¬%¶f‘H„²²2B¡PÜ Ù )++#++«†­7öá©®®fÁ‚eèË»Žºõ—«(?€tӣжy(zËEaZO"æ7ójÄÂ~D!oƒ ž€—%÷l¤•ÞŽ’'p¿Ÿá޹Ê]3Î_ñÂõþ‰@É꣬w?ûëD¿ƒBÑÌTÐdzõî>ç#ù´˜ãÆPŽjd¬t˪yOÃá0•••dffÖ©ÑòÜsÏà5” ¹ët@à;±â!™c4ÍŽ ç»g<éåˆõZË-+^Uê®ÿ{Ä€wB̺ƒûûFs*zoF¡ù‡v.SÑNáA$9ÝèÆ|§{öSXº4“Ãÿc­ç³Q€ììì@´ìW‹NJOO¯É2´]†?y%^k*Ú‚’‘‘QCš,rËÞG+ï‡ãº_kgh¥Åû&“*++#;;;nlªY÷îH$B~~~䀆ƉD())Å+ˆ“ŽXð;èK«¾ˆóð¢6 §ÛÛpÓ¸—¢h„W‹ý§£°KÜñ3 a󟑌° ±½ {;/Fzböû$ìé{ª§Qì°Yéê½}¯}Žç”üí2¨Ý×p#b–=еG1ÐY€2/@MHV}ÌpêÔÉXÖ¡¹éñ{£C;erZÐJ³~iø V½’œ.vs—ã~¾Åw·4<çâþÈÙøZ»¢…r¼{í~¼Hkª{?Z.G Åm¨èÕŸ€eÌž½Ž¿ÿýÀ+äkaò› °322j¾~À¶Ðº†¬¹ •%Ódff’MZZééé5ß劊 ***…BµêŽ˜E"‘V‘¤­ ã)9UUUQVV¨ˆ¾?Ù¥©ãk¨i€ENNNbNõÝÛïP6£˜àµÈ¹ô4¢‹XšÓ ´Å·n C°üÕyx1³~HÇ퀀{"gT/â 3çvܟËùµto‹ñ]‡X¹?\ïŸØí9‹úv^£Ù`Ï ÝÁÙÔnT[„¤aîzKÝ5¬–´fYYYddd‡k¾ÈÁ`°f^N8á÷Ì)xiìiÈYjñÑ?âÉ8«Q"ÍCHv¹Ãáh÷·ñˆñŸï®×…šµEÀ| ^}f+ñ:΋;ï÷úô>†‘¼‘‚të®î˜“‘ÆÎ¤Ioðâ‹/RUUUÚ1¢ŠŸegdd4ʲ·[µñ˶|[”¬ÎÈ’%KXµjmÚ´‰ëº×^{-]tÆ «i¸aö·¿ýK.¹„SN9…–x¬Ö™¨bµê³@ ÐàÑ_#:''§Îqþ’¥ÉXYYYÌëúCç¢l̬P?°ß2eç<üðÃŒù&b‹P ¿Ý‡í3ôe?¯~à‡„Û!¦l[ñ"”˜‘Àím$_d!&Ù1ê•äwERÀHJ6–;xÛÇë{¡qžoœPHÝ.¾×ƢŜ˜!Ä Ó‹=9É~Ķóú{¹»çt7ÆÖû#ýû÷cÞ¼/ˆe¶ðH[oÊ.]záÅww@Œ>€|E;ŒÓÝïO¡hŠ®ˆ-¿‹¤‡1xmÄ6"°^…|Sˆš½äæèßk?!@~ÄwìO„Ç¢ Rûÿ÷÷Çñê<ÿE˜¬aéÒ9´oß¾–Ó­¹,:bÄ€9“žžÞ¢a~ñ$ÛØ˜>úè#¦OŸÎâÅ‹Ùe—]Øk¯½8õÔSéÔ©n9‚åË—s×]w1a¦M›F(ªé¦â·ûî»ÝvÛ#Ž8¢ÙžÉ¬U2èÆ¬! …(--%==½Ád—¦í÷›¿ê\^^^lÀúÌÏš£CŽÎ9çÒÓ× Àúy#€!Ô0’ˆ .DLo)b`#°í„@ä4”pÑ©àɬóݱÆwu÷} Ä<ä\{®íÁ]Ǭ•¿Çar"8‡›ûQècûrªÙ½»±…‘ãòRÊ^¼ÿ~«Ë\×¢Ù—m÷Ý×J—âÆ´1é}QôÆUh÷bÒ(žÇ»¿ÝàþöŒû{'¼.6» ½ø3ßHŽwsò‘ïµß æ}uÔkW"™#„¿…hz¿;"ö~º»WGúöÝ£FÚ‰µƒhêg>šeƒçôkª–ÝT³ñ :”‹.ºˆ+¯¼’‡zˆÝwßêêj–-[ÆQGUëßÔ©SkuSY¹re­k®]»–sÎ9‡^xŒ§Ãzãn º±šÐVÕίëZ¤Djjj£5¢M»J6Š£¼¼¼¦¢^¢M윙™Y‡5GÛÍ—_.B(2£ ±¦½‘,ð:ú’Zk¨|’€ßº×vç¤ †7 9-:ä%¾§¡øçTˆ}/CÀ¾I/ix5§A ³/»ä¤ì'‰€tð¨~Èt¥q×ö׋¢BÞGÀy!Švø ^+®±(°”²²ä¶ yyíМe¸q¥ºñœŽñfÄVÙoŒ×nxvW#@Ï©}ñšjw[“õ4´\†¤ ¿„3 -ª~výbñãÐB2ÍÛ1î÷óÐbr!b÷3dȾ¼ùæôZ£0`‘þ(‰dX¯iÁÑßÁúX64-b$ÑtõO?ý”H$Âa‡ÕW£\fÝT&MšÔ ƒ~öÙgÙ´i_ÜP]ôäìWÏ íÃb²G<5¢›#Æ’ŸŸwG ÆùÒX þë¯?…¶ÉkÓ=}¹­]ÑuðÒ~A@—‹˜öÐÃMAì{úrB²Çx¤K÷p¯•#fžá~þ9¥@ Yx©á @›‰BÈð½¶Ì7V³/|qbŸ×#`‹nÇBLùKÄ+(ý„ÀîuÄð­AnröÙgsД¢9ËAQ#–s¯ëÏHR‡4á™H’¹Éà%™]á®{?’Q.G ÿ(Ño§¹ç{Ù÷Ú`wì(´ Žr÷‹"J:£EñYÄèwäÃ?dÁ‚µ®lÌ×âï›Â²MóÍÊʪ Õ-»9mË–-quôîÝ»7íÛ·gøðá¼þúëœrÊ)|óÍ7Œ5ŠââbFŒÁå—_΋/¾È‘GÙ"cýU2hÓÓÒÒ(//¯ù@$â<´¢ÿɘEgäææ&®gLÆÿᬯJ˜Ù»ïþ—O¼‚ªª3ïXÔT\'I[SÞ‚t ’ üe9ÿœuƒñzÖ}…*m¥¿FÌv¼ÁÃxµA …U{Î]'1Z¿¼ñ–û/wïÐ6=-"½Ñ‚Q†”×ûÎ5M: mõ³Ý}îE@Øe6PHjj9%%?Çšò¸làÀA,]jqÙ9îÿß¹qïãž¹-^ѣߠÝÅäd ¡…3…^Š·ƒ™„âØ-îGÔ à+$Kƒœ©î:CïƒÁz íœ.Bóu©;öQ7W£(™½Ý1k(+ó7^hÜbéôÑu5šê»‰¾W¼,;Q=cÆ ÌÎ;ïÜøÁ¿°µJ€¶Î)õ™•åLMMé¬kÌ"‘5Aü‰œgÅú͙֫苿´c}ÛÏ™3grÒI— Š$Þy&V³¹ˆíîƒNk‘,²¯ˆR%0ÏEN§ôå~Åu¬?§¶ÓïIbau¥ˆEöE 4ìÎ/ÁkxÚIïá%l˜}˜ø©Q¯½ˆ¶ûö|³QtÇ´Ðì„d™^xcÇÖ¯AÇcªÓaÝ1s«b—ŠØü>hŽo@z/ÒÔo@޾³÷¸ð!ˆù@»ÿbFó˜ïÏÄ¢­d*r\Þˆ€~zo7#‰§ƒûû%’\Æ!‡ âµ×jK‰˜¿zýo¡yÍÂ]-Ïo©©©ƒÁ„úÉ'Ÿäøã§[·nÍ:Ζ°_@‡B!ÊËËIKK#///æ1ñ\?Ä}~tÕ9c´}ð"‘HÜìÞï8´èŽ””JKK8p?JJÂ(Qâ}ô刷ۥV[„È&”ñÖE_X\õ“ˆ‘Fð"´Åþ ±îˆ¹ÞƒÍÓ» üÉÓHê{í[´Ý÷·ËªF‰Ñ[ûGQŠ9âæ"gã~xzv鯻" ¿%< „Ù¸q}“³B—.]ÊÀû"¦Ú±äbäLÝænhAû;’ ]‹9kg»ç ¢Ek#’9¾Fºÿ¥Qw]Ž´ã è}ù½?¢P<'fgUówôž/vó`À_ˆ /=àæjóæ}@ÿþý›4/~Ÿ Ð(Ën.³Ï¾É¶SGË?~<—^ziÒø°5íW“êíwæää4†Å«A[è\VVVMÕ¹x´º†XsCæ¯毳۾}{–/ÿŽyóæqÁ×±re5ápw¤Iæâé³ÿB R¾ðýñг]è+ÄÈÚ V–‹˜i¿ƒñÀ9ŒÒ¡¯ñÖªÁùå ¼qvÔkË#Œ¶Íxà<ÅtB ŠJ±²¢/!]ö¿ˆm6KÊ~ß¾}9òÈCyë­wÑ®` Z2Ýód#™fÚeŒ@;Ž£P”Ê-è=°jyc ÞŽ×\ö|jgKöFÐÓH2Ú¯5Øî¼a¾ã „Ç¡÷é/hA¸Ç{zþ¬aР(+K^ú©¬¬$%%¥ÖüÆ*ìÝ>+ºþF2f¹9ý£YvC•üÊËË“–/·¶µJ'atþh'`S3ã ó‡Îù5îÆÛúN’)“XYYIUUUMh*ìþûïÏ×_¿Çš5³¹ä’=éÕ«¹¹íHIi‹Öã\$K,ÁË&,EšåJ¤Q·';»ŒCéíŽï€ÂæNs£h@|ßȦ¢‚B~gèK¨~²ÿ˸PtÜéûÔíü]âÎ "GZ±ÌB¼D–WÐÖ¿›»÷r<@/!=½ù²Ø¦O¯z_ Ú ,F‹Ù&ºo#–?%½ƒœŠ“Üy÷â•HíéŽ3çé$‰øíL´û‰~ýRãowU€¶ AÙŒ¹ßwC ÆL´¸lÏ¥—úÔøÌÈeóÕgÑÙÙÙ¤§§×Hˆ–<oж™å1¤¦¦ÖÜßï€ÌÊʪIHJKK«“ý …þWº¥ÍrñcÕLnér¤…ÎÕwÿX '‰˜9/³²²ÜÂ¥¦¦’——Ç=÷ÜÍ=÷xL¦¤¤„ü‘… Ö„@åææÒµkWvÜqÇ:ží?ýéÏü–  µì«ÕhKmÏPŒ@Ó‘¦nÒH;þ}ÔkTP©oÔë‹‘fz;rríî^¯@ÝïQ\÷•ˆ]å ´ý_Åõפ¹¬ººšÂŸ((胸…$nBlùf$IŒrŸˆ¤Ž•hÇp b°—"͸§»ò`¤›ŸçŽß éÕÛ¡EçÝqo4éî>7¢…À>¿u×{9&/p÷ü…܇"<671eÊ•Ü{ï-qï2ü!¨É|†ýµ?ÀûlƒÁ:Õëb±l+MO.A4s®®®fåÊ•têÔéÝÒˆD"1“MZ  éªâ¿¿û•l\i0¬iV¨“éСƒfðàÁ5Z¡ëYUUUëKñÚk!Ð]…Ø1H;î‹u Š^xéÞþùxºì9‚BÑüYƒ Ù¢}ÔkAw «g‹‡É…xác©ˆ™[m‘"¤ïf0bÄ***j¾ðÉj¡"ÙÙÙÌšõx 1Ü…NCáŠ7 ,ΑîyÇ"ÇéÝh!ÙÎs#Z¨¬Öu*ÒÔ— €½ÉG§£…)éÏþ& Ýû¾/¦¤í_ƒâÖ! ¿ö÷ûù ößÿ÷Ì›7»Á篯ú_SÍ>›Ñ9 ±úÚ®3™ûG"æÏŸOee%W\qEã'l#Ö*% FóÝm¯ ýUçºGt?AÂdÀÁ*vY¨`sYZZZƒ[Ïyóæ¡/ð7Hz0 }ã9…Ø­q¯ïà»zÄ7$ê®ï#Y%zî>Â["î÷ ¦|9uknd!†x®0ZDÎCNÉAXĈ=_¬¸Þx·Öv¬Ég{î¹'§Ÿ~r®GúñPîö$1܇œƒo"¸7ZLp㟂•Ëð*î†tÿ}Qãå(TñäèctÇ£(œï}¯¥àÕ‡ Ï•îµ-H‚¹Ýý~)‹6¶jŸ‹ÆŠ,5—Egv¦§§ k|6þBHñX à½÷Þ£K—.üáh5ìZ1@o­r –p«ê\}fA÷ÌÉt¯°buuuRnµè/ʼn'ž†¶Ë[ð¶âo!ðËC,úÒ§D]í]w\ô\Í¡vá$ðœ—ýÜõoC }9–èy+DI!gâÍpãÌA Æ@:wÞ9¦æ¬X ’-¼~-Ôï\2`JKK«Óôô±Ç&Ñ©S^ç˜Ü|¼ˆ¢X®GìùÄ®OC1Í«ƒÀù:¼Æ¯–j¡’=ûž€œ¹Yî¹§ ­½Œï¢vBN;´€Ùì‚ôynnwD»£©ÀAy¤¿´«gþúè¿D‘{cÒæ_ò/¸ñhÙkÖ¬áƒ>àCa§vÚêãoªµÊ0;ðŠ ÕgMé¬ PRRRSõ,VÃֆ̪äÙÖ-Qµ±ƒ†Jb¶¤E"Ú´é¶îE(f· b…Wá9—#çW>bÕ¿üwœÔ u·ïP”B.Ú¾qç-FaiçøŽ­@ÌoW<‡åO(,0 É!»#ÇáÊÊ6ÆýÌÑöÙÊÊÊjðýS–l$]„Q‘©Uü>tãƒd…K8ߘöq¾+=‡:®œˆ¤GcÜ­Íß ÈÑW†±h¾Ú Gcî»wGô>np×¹9.-Öú`%%+k>oõ¥koM3]:žŽàþ|72wî\òóó)**âÏþs‹voIû@ǰp8LII yyy5i¨ñ˜?tÎ~÷Ç…6Öº'‰ k¢2~ ƒ”——Ó­Û zÛ!М‡²àð}ŠûÍBõ— sË¡nÝd¤IwA:öä¨*Çk埓K·ºÑVs91ö~xY.C E*Šdø‘ŒŒJŠŠÖ&üü~­ÕXZt\otV§’X²èU °ºt$kÌF Ö8÷¬#g¢¯‰W££ÒûbßÑZ=h·°±c;grÎu×2&î÷ îº}Ðc4’c@ÒÈ$`-W\qcÆÈ©kޏ_‚ 4uq¨¬¬dîܹ”••±jÕ*¾úê+†ÊYgÕüƒmakµmêõY2m¡s´ñ6Š7á$VQòx+Ý5·E"‘šbîçœs./¼ð*ª¯±1ä9Èñd_Ø¥ˆÅï»J9J6é‚€#ŒWø¾iÚy( p¸»Ýu£Ÿù¼éHcŒœ_¯#KGÀ2%­X¦Þ œ3¦4Z 'Úüý ë[@ýiÈÚUVVF÷î}ÐÎbw7Ýómb²ïBa‡¹g}zÅ.ûÓŽÿƒ´Ÿ›ƒþQºç”º åwHy8êõ¹îÞÖûp ’CÎu¿ßŠÍ~þù»Z=þšê\MÔâTªÏ ùüóÏ9äCèØ1V\}ë²VÅÑÜ:g…ü3cÉиs2VØO8®‰ 1GÖÖüB€·•´Ð©éÓ_ALx/ŽãѶÚ?¦¨Ë’F,û‚¨×ç£xÝ£^_‹z¬y ¢çgHǽÅNWº×ßvãù ¨F°)!pöGÉ4!P_¿¼ÜÜ\fÍšÉþí ºñ/E»‹ÃÑ"tZ ¦¡PÅ#¬s ÚAœåžíP¡r.b¾mÝó÷v?%EÏÿ®HÎøÆÁl?¤k‰]þâ®w’…†#FÞ…Í›7×J®/Ѥ¾]`SÌ>‡ÉD*UWW³hÑ"V­ZÅñÇßj:¦4f­ÖIØ\íØë«:×X¨^Cµšã5“irssÉÍÍ­a uûhN³°As‚™s³º:„„©ˆ gR;Æy5Ò;£{!Z_´½O݈{}¯¯oF@û$è+ð[Bh[n5@Êã삜ƒe ò»žº¶UUUQQQ‘T”Œí€233ÙsÏ=™>ýißøJÑŽá[Qr JÃ.Asy=ʼìˆÇ<-dîõnh—p!’w.C‹Ñ1h1ŠeÉíq^«tj·Þ²æ¸ÛqöÙµ×ú¢}r®&jþÄ“d´âP(Äœ9sƒwÜq¿p†V ÐYc€ÙXè\C¡‘¨ÅF»gôÂâ?›³¸:ˆ­˜wÜÿž9ÓRíFLeð( IDATóëècòïìg©]oÉPIíí8è‹A[þhû‰Ú[{³¥H7킘±Ú“gñzòMEuDª®[Ì+¯¼ãšu-:|®©vä‘GòðÃ÷¸±ü€$ îh±96_D`ýŠÿ'žÜp+bÙãñº’ƒBA€ú&rêmBÎÄhë‚">fE½ÞEÖ¼è~„v.K‘\r9°‚Y³¾£!‹UšHšTØg;ÙFÍ›7ofæÌ™ìºë®ì·ß~ Ÿ¿­Û¯ ØÆBçb߬¹>`¬Ïêc0þ>k‰¤ÊÖ·8˜÷úXØ6sÃ×ð»×»SÛ^&6Kþ/µÄš…Sô³ÖÚþ?…‡‡Q[þØ€¤ƒ´ç¡E¡;b¦«ÈÊÊmÔÁ=ÍigŸ}wÜq-z¶\ä$\éžëaT\jƉnÜGa‚]pwA@Í’;!EÖü 1a« nv.ÊL¬3:ábl÷RÑ‘…d•.ÔN,jÜš’Îmݸ“Y «««Y²d Ÿ~ú)Çs Ûo¿}ã'µBkµt2E÷ýUç¬{wCæ?ßz• Û2ç‡uZIÖK•m¨F´ÖËÞ&8‚" Ú"ôÄ`Šqæ2j—5›‡¶æÑö9µ“[f!ÆyJ/ß'êøÍк!Ýt Z4®CÅ`#óçECÖÔTåxìòËõ¼×]wZHº£äõh>Æ£99-~Ÿ EgÒˆOFsüÄlÿNíç©h3Å¿´êbʃÑWÛһͲOD»w8Ÿîþþ'àš¸ Ú×gñ¤sG"ÒÓÓ“Z «ªªøâ õ—<þøã[UâI¢Öjº1‹hsÆù«ÎÅs~²UçÌšš¦Ý˜E§ÊÚx£‹þ[\ucÛÈH$1µr¤[ ÌC‘&üµc“A:k?겯 b’±¢i>G ó羨°|6ÒYýã܈@å 䈌 mö T:Åù¦Ð«—¿;¸gþЭæLU®Ï.¿ü2:uêÈ\ƒâ¢SQQ¥*¤'?ŠbÅ¿E`ýzþ+ÎCÿU|-ŽÚpu( »;¯Â¼P„Œ…¦ y«D¬ý4§ËfýŠ@éÈš5kšÐÑæÿŒÚî/##£F{ÔëkLaVZZÊœ9sØ}÷ÝéÓ§OÜcœwÞy´mÛ–:pÇw°jÕ*n»í¶šzÖ&LhÚÃ6³ýê%«í\YYY§ê\cçG‡T%jMq@%kÑ:¶ÍCzzzNXŸF(@ÏC`°1U{úĸ@1ÏfïP»Þ³Ù»Äv–#6ù$ÒR/Gì;1t¿­F¡cg#9¤bò»"°z t)o¼1£fKí“·tùXm˜ZÒ† Æ[o=ƒ†+ QŠÂ ÿŽÂÞÒP˜è9;" ^Œ·^ÌG»… ° ôò¹QwÝŒ²þŒ Æþˆ»þ?Q,ûvhÜù*th±¢P(TSÏľ~Y¨å|´÷ЈÖÊ•+™5k‡~xBà ðÜsÏqüñÇ3qâD6oÞÌO?ý@=˜8q">ú(ëÖ­«i¸±­X«èxp8¦´´”ŒŒŒzëvÄ2û@Ø;Q/utIÐ_*ÐJBú;U7¤~òÉ'ûã5’õÛWXNE®GP‚Dw´}…¶Û*3`܇ôÙkP6¿sÍ:ßµ¾E€2Å—"=·E‹üZ@JŠ:6Û³¦¤¤ …(++# 6¹m²vÀ°`Á”õ·1è…p‡#ÇáqˆE/F²ÆhŽÖ#Æ rêMA!v7¢— ÄQ4;éÔÑ6 e.š…4òPÌôéÉwZ‰e~¦\Ÿ´dá‹Ñ}ƒÁ /¾ø"/¼ðÏ<ó :uJê}\µj=zÈÝ«W¯Zº?øàN9åÚµk—p¥–¶V Ð ™m£ÂápB [ýNÀ´´´šÜÿèз†²[ª¸Q"Ö˜#2ºî†ó¥—^BñÏ»!¦ìï¶± ±;ÓT¯Bq´¯!=x,Ú*ÿ÷÷úD´Õ¶/ý…ˆù "¶Cj%b~o¡Ôçkð*Ý!‰å2¢V…¤’sç¾WssàF"rrrÈÍÍ%---©&¨M1«cñ›ßü†’’Uh>¾Dsû"Òœÿæžï>ĨŸC:òÃ(Óð|j³ä½‘“ðÄŒ—#'a,æwZ@£­±s;çHjz èÈsϽãœä,ÙBK¶¬®®¦cÇŽ 4ˆ“O>™Å‹s÷Ýw'<Žž={²bÅ V¬XQÖC‡åùçŸ'''‡ï¿ÿ¾¾Kü"Öj3 cµ½ª®®& Õ$Ä_š0‘„“X¥:ýI&¿TšvS‘G}4￟‚Àó1¤‰Züñ£(ª"ºfóÝx QÄBªã‹¶‰(4®gŒ¿=…Ò§û^_…@ÿ´ˆX³Ú俦RXè1"ëôÑÐY_Vgch<ÖPªr¯^øùç-H¢Ù€Øð?ÿG”qXˆœ{k‘}#šË¿QwÎ^BNBË^<Iæï¸ ÕãˆöÌ@ò’%»XVá5´i3šuë&óèµÌ²ÉfÇ®[·ŽyóæqØa‡Ñ®]»&%pþùçÓ¾}{òóóéׯ={ö¤sçÎL:µfñž4iÒ/V{$–m;#IТß𪪪š-}~~~­z² Y2}ýÅÄmQ0G ±²–ʶªÏâ‰ÐhÌÖ¬)DÇLTuîU”Ýb¯ÑºßôÅ70HÇk[µ€Ú}^t˜Ô¡8a&\!ÚÞoïÆ7 E< À¢EŠÜð§«7¶@ÅÊꌎ4H&ÍÙߣ/Öy+V,`Ĉ«™<ùqs5JZy Ex܈vO"öœº°,A!v}Ð"e gO´h^ãæi*Zä2Ñ(ÕIù+µ7ÌCܽû"/EuªC4>YÓæd²ÕÕÕ,X°€õë×sâ‰'6‹D˜››ËSO=óoƒŽùú¶`­ ÁsäÅ ‹§hS;œø‹ùµ+cgûÙœì,Úš+| ==i¥?£HqÈYX‚Bâ¢Çþê†Ã™‰­KGxø¿tÅxhjƒó:ÄÞ/F²ÀsÈñø.fÿý÷¤cÇŽ5²S² T¬Âñ‰öÓ‹Õ£/–w'Ÿ|GùG4ÿ@»‚Í("#ÉãP$͵(Jf2Š«¾1ð³‘~_î®l}As9ù^AåPÓÜ¿ÄÈKä2elÎÚ1xp¬"MñY"‹d, ƒ|òÉ'pÌ1Ç$=Ž_‹µj€¶–WYYYu #5ÐMíp oßcgÍØÍÁšýÖ©SGv•‹€ã|Ô5‡Ølx)u3 ArD}ªÙr¼ñ o‘žÝmñý×ù'ÿ¯½sn²Ì÷ý'½Ä$Zè½)A70\Æ5r;ÂTÊ­#ÃqÎàâÌž=ƒ°<ƒ£cÇ®a¹G˜­®ÎTADŽ£#Ð}6Ç#ʰ—«`E(Mƒ[JC¡-´PJ±mÚ&yÏOß4 Isošöý¬ÅÒ$Mò$yßßû<¿çûýý„ÔoT÷ßG#‚x#ÐÊ?þñ1f³ÙoMm_8cw>T*•ÏɹsçÒÜ|ÔÔ±ttÄ fÄIˆ¼ôËôX*AÝ%ˆUÜî…ˆ"üZĪ™(D¾z "åª|éoé)H•ŠÒ'yå•w|–¿AÏêÁßãñÆ|óÍ7<øàƒ$%¹rž="z“Ðb±Ø¥sÎôÕ0'ò¦‡|I’¨®®fÑ¢E~»,¥dW`VV–ýñ#GŽ0~üøˆÎᛄ®plþékùCùùŽ6ípgyŒîÆà®.¯s!u_N€žú"f´ÇèÑÛ:rQXG&xãùbwuªè]äÿ[ÄFaB:¸ œE¤36!RŸ6RRâxãW½vu ÇÁ>œ7«lÛöGnܸÆO¬C¬Nl#ÑK“ÐzD¾þ·ˆTÐCäëÿ¥û¾“ˆ¼~#=eF-çgð ôú**+K<ŽU“¯i6GµËÈ‘#™9s&¹¹¹F¶mÛæùœè˸oß>Ž;fO{D:ë$„ž<-øf8qÕ[N>àÂÙ,‚7swlXë‹ñ"..Iz‘êØ‚Ø ZìôWo"Ô Üɫݮ«ßà3D4D†!Òò†çÿCÌÛÁ¥a²HD¥º@KKÃcwåêôuµäDzáÜŒìèè°ß.))aùòŸÓÞnC”^]„¸Ð™%M—!fÑ)ˆÙzDÚJB(BÌ@ý뛬[÷ ãðÆÙµµµ ²³³6l˜_¯!ãÎÇš5kX¹r%’$±uëÖ€ˆáfPè`mÊÍ2Ci,é ùD U~Õ9˜¹ Ø“'ßOuµ¼L~1ƒ}±D–¿‹CÌx]ñ:bcëŽwï~½«½ï¥÷ì¼³ûñ6„º£ÄG%ÔÖ^$!ÁÕ¡7ò…×S'nO¸ÛìOäãÒy _|?ûì36mú ]H’ñݵ".|íˆ.ê÷"¾g ââ÷ *UŸ}v€tÕ`¡7ò¢¯”†§çFn޼ɒ%KÂö]F* åŽ N\YsgŸ¡ØáÊw;lyrñâEfÌXŠØœÚ <†È+×#êgL@Ì 7¹xÅfD3Ù_uß¶!t¶ÅÝÿmCäCÇ9=¯!ËB¤KÆu¿ç=ÀIÎ;í¶Î³'üù-å/á*v¾Õ±›—••ñå—_òí·ßa2UÓØx“ÖV3K'II ¬\™Ã3Ï<ãµDÓS—sO˜ÍfŠ‹‹ÑëõL:Õóî ¢tQQÍÍÍÄÅÅ‘‘‘AJJŠ×†_–¯þ¦ ¼!Ô³foƒAll,6›¤¤ÑX,?DÔbÞ€È/· –Ír Ì¥ˆÃf"w,[‹/ R—»ÿn$¢zÝ}ˆÙõ¯é©1mE´ÊªFl8Z*d„šã§OgÂW} ý£¯ßð¸j‚•Vq^Iøâ„À/R œ>}š 0r¤+§£‚7Dt€–imm¥´´”††4 :Ž´´4ÒÒÒ\är@ dùêMºÀÓóíqWuí‹/¾ 'ç1DnøYzrÄ  žG䟯"6®@ì7ßBlò=Œ˜i;ŸÜ¯!”w!tÔ#Ô‹jŽ¿!|PɧŸþoæÏŸ¬ëù·»j3íÏ8B±ânßÅ•ª$ДÆùóç©­­%''GIiÈ Ðδ··c0¨¯¯·wìNKK³×{5kVÐ7}| ØaÖìiùš’2™ÖÖD+%Çåéçˆõl¯ú7„ÛïŸÜ¼ëkˆÜö?©ŒÿŽþ×zçû¦–«?þÓ§»³‹W3VW³ÏPW'tt©ö®Vrñ1/]]]œÿüã~Y2c ÖžÄ@PŠôuðF#IUUUTUU‘““ãóÊtïÞ½èt:»+ðùçŸïe:ÉÎÎæðáÃ~ÊÈeP: Y½zu¯Û±±±LŸ>ݾ„¶X,”——sìØ1bbbÐjµ$%%‘™™pÀv—kv.]Êe´cgq_ ¨E$&ŽE8‚p–!rÐÕ£Cê×qëÉ8ÔÚ111L™2…)SD¡x«ÕJEEÇ'::FCbb"™™™èt:¯D9×ìJÖä|ð‡ªÈ ³4FCYÙ1¦N‹H]¬BÌœ‹ªŒZ„sPBlª»ïwenD.g),äéÀ{ CeåÅ~Ii*s‡»"I®ªÚɵ£Ã©Þ5f¼Åñ¤×ë¹|ù2V«•òòrÖ®]˪U«øéOêÓ8dWàìÙ³ïp* ‘G Øl6ªªª8^ôiÓh4Œ5ŠÌÌLâââ\¶ß T¡¨ÛqÖ¨ž×f³ñÀQ^~ ±É÷®Í(åWۣݷo#T§yèD¾ùð=;v¼ÎºuëB–ß•Ž@¹¢Åbé%yëo3T0rÞ555œ;wŽGy$à€;W`vv6›6mâàÁƒ,]º”—^z‰ôôô€Þ+Q´Øl6L&çγ×fŽ'--Ó§O3kÖ,†îù…|À—€*¹VII sç>ŒØ,¼Qv4±‘(!$wŸ rÐ-Ý÷M@̺çÐj-üçþ_~ô£ü9½!”Ò5_p¶J»ûœÎ²·`èwa³Ù0 ´µµ±hÑ¢~½° U”$IâСC|üñÇ,Y²„øøxâããÉÌÌ$!!!$²«<** «ÕŠJ¥ ©\kûö¿òÜs[•x„ìNÓýÿ ˆ:ÿ1£®¾gíÚ•äçÿÕçÀȆ\K×\ám¼Pš¡ ð½'N0nܸ ‡úF ÐA ¡¡íÛ·óâ‹/¢Ñh$‰úúzŒF#f³­Vˈ#ÐëõŒ5*dvq¹“²L0OpW²k×nªª®sãÆ-,+11ÑhµjµŠG]N^^^Ðßß“æ\Þ ·tÍ»¶+‚Q*)úúzJKKY¼xqÐW† }£è~@’$1 ´¶¶¢Óéìöô¤¤¤€˜<;R«Õ½A nG_gPtüœògU«Õa Îrþßq8øZ*Д†$Iœ={–ëׯ“­¸ÃÀ  ÐøÃhnnæöíÛìÞ½»—‚bÓ¦MtvvÒØØH~~>ÉÉÉa£$I455a0hiiA«Õ2lØ0ôz=ÉÉÉ^Ÿ¾JÆBUš3Йb0pÜŽŽ¶3è' Œ» t¡z/wömùwö7¥ÑÑÑÁÉ“'IIIéG§‚kU€6™LlÛ¶·Þz‹>úˆ®®.üñ;þîõ×_gòäÉ,Y²$ £tMss3ƒ¦¦&´Z-:ŽŒŒ RSS]Pw³f_ð§Á©#AžgŠ¡t:"7ä7 ¹ª³¶Þ×UÓõë×9uêóæÍ#1ÑUÃ׸sÚl6~ó›ßƒÕje×®]¾}0 //uëÖ1qâDÖ¬Yûï¾;(:¦x"buÐÕÕÕlØÐ»iéœ9sìÍ'ÇŒÃÑ£G{=^__Ï /¼@yy9ëׯﷱzCBBóæÍ³ß¾}û6¥¥¥”••¡ÓéÐjµddd V«©¨¨`ÆŒ/ᣢ¢zIðÜ™g\l_]‰¡Â›.çžÚL°ó¼áÜ”´Ü•Üë±]ý¦’$QYYÉ¥K—X±b…Ï++w½¿úê+î»ï>ž}öY^}õU¾úê+¯jQ;òÔSO±eËÖ¯_ÏØ±c‡Dp†Ð÷ÜsÏP“Éd¿j›L¦;:§§§³gÏöïßÏûï¿ÏO<Ñoãõ•áÇ3wî\ûíÖÖVvìØA[[3fÌ ¤¤„ôôt·ûüÁyFØr “•"átÁ²ùåÊ èª/ 73Ï"ã“ÓLÎÎWç`ìü›‚póedd`0Ðjµ¬X±Â¯1¸s^¹rÅn@3f —/_öùµåãüÅ_ôk©Dl€vŘ1cHHH`ãÆÜºu‹wÞy£ÑHAAO?ý4›7oF’$®]»ÆÖ­[Ã=\ŸøôÓO=z4?ÿùÏíÍpËÊÊ8wîwÝuZ­–ÔÔTû,;8l¹'Ü™YNoô·Ù"ØŽ@ç€ wÎ<]lofï¡Æ1ÍäÍÓù7íêêâæÍ›QTTDRR~iw®ÀÑ£GSTTˆ‰“hNì;kÖ¬a÷îÝ>cŠtUz(ÓÙÙ‰Ñh¤¦¦ÆÞ€4%%Å^*¯ïœóîïÎ3ÁtGúŠ«î3111aíºŒ Éêêj***Xºt)jµšk×®a4½êðíŒ;WàO~ò~ýë_£Ñhèèèðk\\\̶mÛxíµ×;v¬ç' ”í#îT"‹…_ýêWhµZnܸÁÎ;ÃÚIÂb±ðí·ßR]]MllìÛÛê‹|.”»?Õ}áhã—RWÎØl6JJJ°Z­ÌŸ?_qP”íÞªD¶oßÎØ±cÉÉÉ Ã(]cµZ9þ<•••ÄÄÄ ÑhHNNF¯×£Õj]ž `¹ã‚¡X }u¶î/¥ˆ<Ž@4Ö­­­œ8q‚üàŒçÜRa 1¨rÐÁÄ•À¥K—(**p*‘èèh&MšÄ¤I“P***(**"**Š»îºË^± ²²’É“'” ´,ç@)fïÞ<ÔJy®"®\¹‚Ñh$;;Nç×k(ôJ€vƒ?*£ÑÈŸÿügvïÞÖܤ7DEE1aÂ{]›ÍFuu5û÷ï§µµ•iÓ¦qáÂ2221bDÐ6ã<•å”—y8Í/àÿ†d0•"Žãð·>¹$IvcTnn®’Òˆ”‡äååñý÷ßÛU".\   €¼¼<î¹ç–-[†Z­æ—¿ü%?þñÃ=\ŸøûßÿŽÉdâÙgŸ%::šššΞ=‹ÕjµWìÓëõ!+=5E w'êpÔNî+¥ ¼µâšÒ0›Í3zôh&Ožð¸ú%@+ØqlÉåê±ÚÚZŒF#öP™™™Œ92(ÛUå7w \C°½­@lœ¶J¥²ïø;Žk×®QRRÂÂ… IHHæpú%@@úª'òòË/sèÐ!òóóÃÚ9YÖ“—••ÑÖÖf/¥×ëILLô9Gê­M:Ô·B]y‹Åžîß>«$Iœ?žºº:–.]êwÎ:ŽÅÁŒ’ƒ`˜L&nݺÅÛo¿ÍG}DAAA/¥ÈÿøÇQUL¥R‘––f7 H’Ä7(--åÌ™3hµZ{Àî«bŸ¯6ioÝŽ¾nÆùjø%rjÅÙãmò T±ÌIDAT[´®®.Š‹‹9r$Ë–-ó{‘r,f”FüUŠ DT*IIIvƒƒ$IܼyƒÁ`ØÃ† ###ƒ””¢££¹|ù2III©újlê­zb h¬=©EúRŠX­VŽ=JZZuuu,X°€””¯ß{0‹ƒ %@‡”"‘‚J¥bÔ¨Q<ôÐCöûZZZì3ìÆÆFRRR˜:u*©©©A ŒžÔÎ[N­„Ó® þ©E?«$IÜ{|9s† .ðÉ'ŸÇÛo¿íÕë æc1’QrÐwJ‘-[¶ŸŸÏ{ï½ÇÝwßÍ“O>Ù«^$PWWdž ÈËËcêÔ©”––ÒÐЀF£A§ÓÙÓ&¡*_êhž‘¸ÆÄÄ„´óŒ'U‹X­VN:Ettt¯*qòª ó± (Z¡_±X,´µµ1bĈ;kooÇ`0PWW‡F£A«ÕÚ+öSê&ç¬å IG „¾U˜Œœ÷ö¶á‚+ZZZ(..fúôédeey„ áF Ð –ŽŽÊÊʸ|ù2FCZZééé~Ï ½ižÚ­Â‚Q‘ïÒ¥K”——óÈ#„}cS!4(zÊŽýAWWgÏžÅd2¡V«Ñjµ$''{U*Ûx°[…uvvø½*°Ùl”––b6›Y¸p¡â Ä(z±wï^t:½ãÅóÏ?OVV………œw¼‹…òòrªªªz€ÊÌÌì°;::ì³æ`jüiŒ”F{{;'NœàÞ{ïeüøñ~½†Bä ¨8†¡ìxbbb˜2e S¦LÄL·¢¢‚ãÇZ­¦¥¥…””î¿ÿþ Í4ýi&?ÈE¢®®Ž²²2/^ u•ùBîxÜÑñB¾?’åTÑÑÑLœ8‘+V0qâDvî܉$Iܺu‹£Gòõ×_S^^ÎíÛ·í‹‚¬Ã–óä111Øl6Ìf3f³™¶¶6{[, F***X¹r¥œ‡JŠcÊŽÂÂB&OžLRR’ý>›Í†ÉdâܹsH’„F£!!!½^O|||Ðs¹ŽîDùý}-=ÚÑÑAqq1iiiL›6- ñDJ³ …”­0d‘$É^Y.åOfffÀû¥|Îêo;Ï\¿~S§N1oÞ<ý Dv³‰¡Œ’ƒV*î”"f³™ 6PXXÈÅ‹Ã|8. @ù+ås Øz½ž+W®PSSCee%Ÿ|ò Ó§Oç™gžñúõ{³‰¡„ ‚Š;¥H$¢R©HIIáá‡Dnjj²€Òét 6 ½^ÙlæÆL›6ÍoCKss3'Ožä°¿'`—ó˜1cHHH`ãÆvÛ¶Ñh´7›X¸p!Ë–-ã÷¿ÿ}D6›¬(Z!¨ÈŠÙ³g÷RŠ T*‰‰‰ö ÀÍ›7Ù¾};†©S§RRRBFF©©©>¥&.^¼Hee%999wÔ! –ƒqÛ¶m½n;J‚ò ÁEÙ$T*î”"ÙÙÙlÚ´‰ƒ²téR^zé%ÒÓÓÃ=Ü€Ù³gÆ cÍš5ܾ}ƒÁ@cc#Z­­VkØ®ÒV«•3gÎ`µZ™?¾â Tè… BH[[¥¥¥\½zÕ°åPœ8q‚I“&1vìØpUa¢h…ˆÄZ¤¬¬Œ7ß|“¨¨(4 ;vìóH{c6›)++£¶¶–¦¦&{ì1t:]¸‡¥0@Q´BDâ®®ˆ#¹¹¹¼ÿþûŠóN!bQ¬Þ ^óù石yófL&kÖ¬ ª]ÚWë‡ÈjGŽ9Âøñã•à¬Ñ(*¯Y´h_ý5k×®åàÁƒaÝÐêK-²oß>Ξ=kO{ &úê²½iÓ&:;;ill$??Ÿäää0ŽT!(3hŸ¨­­%>>ž¶¶¶°ŽcõêÕ:tˆ7Ï‘#G8|ø0ÇŽãw¿ûMMM<ñÄܺu+¬ã &Ž]¶srr(((èõø_þòòóó™9s&%%%a¥B0QfÐ ^³k×.fΜÉòåËY¿~=ûöíó¹ø}°Ðét|øá‡.«««ëçÑìÚõõõ¼ð ”——+víA‚²I¨ !Èví;wöYðhÿþýö„Bd£Ì úÀœïÊ•+¼òÊ+Øl6¢££yë­·B>–¾ìÚO?ý4›7oF’$®]»ÆÖ­[C>…У̠úÀ9ߪU«øðÃ=³BÐQ6 ú /9ß—_~ÉêÕ«‰W‚³BHP´‚B¸k0oÞ< Ðjµ”——‡kˆ ƒ%Å¡ ÐîŠ?%%%ñÁ`±X0›Íìܹ3lŠ…Á‹ (JŠCAAAa€¢h…Š (J€VPPP üd^~ ;ÈÑ‘IEND®B`‚mpmath-1.0.0/doc/source/plots/spherharm42.py000066400000000000000000000005211316273626600207270ustar00rootroot00000000000000# Real part of spherical harmonic Y_(4,2)(theta,phi) def Y(l,m): def g(theta,phi): R = abs(fp.re(fp.spherharm(l,m,theta,phi))) x = R*fp.cos(phi)*fp.sin(theta) y = R*fp.sin(phi)*fp.sin(theta) z = R*fp.cos(theta) return [x,y,z] return g fp.splot(Y(4,2), [0,fp.pi], [0,2*fp.pi], points=300) mpmath-1.0.0/doc/source/plots/spherharm43.png000066400000000000000000001360151316273626600210740ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwœEúÆ¿³q6°ÀÉ‚€¢à z¢¢˜•3 "æp(Šá¼3ÇÓ3üPðTôÄ,žŠç™N9õ8E‘Ã*&¢¨dX6ÏNøýñTm÷³»3»³0 ý~>û™é®®®îzê©ç}ë-_$ùè‰gžyæ™g)e¾H$²è°½+â™gžyæYMKÛÞðÌ3Ï<ó,¶yí™gžy–¢æ´gžyæYŠšОyæ™g)j@{æ™gž¥¨yí™gžy–¢æ´gžyæYŠšОyæ™g)j@{æ™gž¥¨yí™gžy–¢æ´gžyæYŠšОyæ™g)j@{æ™gž¥¨yí™gžy–¢æ´gžyæYŠZÆö®€g;ŽE"ªªªdee‘žžNZZ>Ÿo{WÍ3Ïš¥yíY£-‰‡©ªª"‰ …(//ÀçóUÿedd‘‘AzzºÚžy‡yíY£,  ‰D"@M@v[8¦²²’ÊÊÊêãÒÒÒHOO¯Úp{æ™c@{Ö s3f Xíçh« ´Ãá0@`«c²³³=‰Ä³Þ<€ö,!³:s8hxÚs£Ë(//¯Q¾eÛV"ñ@Û³Å<€ö,.‹D"ƒAB¡Ð8`®Ï, »ÍJ)Ö,H{‰g;²yíYf~•••TUU‘““³]êQ—DRYY¹•3Ò·Úž5góÚ³˜æŽÌHU³À›žž^ý;ÔÏcyff¦§k{Ö¬Ìh϶²Ú"3âµí ~µéÚöž*++ñûýµ²mÏŸÌÌLouäNf@ï`ÖÔÀH$BEE¡Pˆœœœ­¦ò‰^Ó2F·•——“––V´êå´@µ¶ï…þí<æôbM Ì f[RR‚ßïoÒœ|¢—p[œ{•ãÎ䌌¾ÇÚtíè(Ïš¯yÝÌ-Z×mŠé¯uäçço—N_hÛigsFBݺ¶•I¼¬ÍÛ<€nÆ3£©€¥¥¥quìmµÔÛÍÝ×®ËioŽOëËúç…þ5/óºš;Þ8+++é«6`<¶½;ymÎH R¶í¬YpJu€jÌ2ûxBÿ‚Á YYY^è_Š™ÐÍÈÜIóÃá0¡P(©(`<–ŠÚ‚p0Äï÷Ž<´3:#¡&Û¶Ñ>^è_j™ÐÍÀb9}>_Ò’Ù,v@ É€©dž3rkK$ô϶ú×tæt []‘Éê î€Û˘JÖg䶨Ûö°x²þ3ˆy#$Ï<€NQs/Í®4†AG;½ŽT»Å댴[ƒ5ÅÊÈTKõZ[Ö¿X3=Û6‘”÷®Åo@§˜Å™ÑЗÜNÝ+**vzæX,gdEE™™™1uíæâŒl¬ÕúWQQAvvvõ1ÞÆñ™Ð)bM±4;º|ëLOO'///©å{&‹¥Q{ÎÈ­g ÞÆñ™ÐÛÙÜ‘Ð4Àí,))Iê5’m;Z§ôœ‘[[m‰—õ¯¦y½Ìj–¥¥¥ÕN•d›çL]KÔiÁ|G—êËúÎêÈ!ôÏèmlÑ‘VÒH¦ÅãlÊÕtÝtÖ–±#Q,«Ë ´“åŒLõ¶®+”mP(TíoG ýózZ´0ÙñÌáp˜ŠŠ "‘HÀ¦ziíÀ`ëbmgÒZ›¢L ÆÖÉކÛœ‘M1DK$@€ŒŒ ªªªv¨Ð? ·ÅfkÉxYÜ@¿ß¿UúΦ¶è! UßëÎî k*óœ‘[["¡V"Iõ¬@7¡Å™Ñm€••• ¯L«±y-ìòi;0X‡'Ôï ‹$©ó¥Bꌴç6uݶ—Õµ:Ò®´³”o¾ù†ÁƒojÆ4 ›Àš:2ä´ nu&˜«ªª¨¬¬$;;›¼¼¼„¯oÄîèËÈÝ:k*³œT¶xœ‘6‰T$i’4­©0xE[m =cÆ  wTkHÒüD´Û˜‘‘QC—Üf¹ddd$52Ä $áp¸zãYw¼ìΊÖT팴3»È¦)œ‘ÍapMÅ:zs/ùµ–ÈÃŽ c9ÏÜYÅN‘À6[˜H(šÚ ·H$R£íb¥imŒ32tm–j ít#Íæ_°rC¢¸>°¬MçÝVæ¾~zz:¹¹¹ÛôúÑ–h(Úΰ³JSÚÎæŒLµz{Ý@sO­†×‡[@Gë¼ùùùɨvòëû=úú%%%)3o2#p<úh7ÜuFZ†Þ,ÕØ¾Ð Z¬È ›¾1eº- R^^Nfff½:oC³¾ã«376¶; +™‘ Gbê¬MÚÓ\Á>ƒn]r”uh»æÞÌ&>ó:N«/2£¡€ä.'Ñ É~±íVW>Ÿ/¦ÎÜÜ;Rtü«57ó‹xãíTc^©`у¤ ¡¬kÏȆ ’ÉšÕ¥âìÐèz,žÈŒÆ>Ôp8LYYY½+k«_cn²¶ºJ¦mËÎKg­ ´Sm¥^2l[ÝK¬™ Änoض+#ÃápÊI1@×b‰Df4tJošTUU‘ŸŸŸ°0™ñÌñ.tIE–Ë***X°`Ë—/';;›¾}û²×^{Å}~mαP(TÃ9fÁ&™Kö·µ5õ3§üÆ8#“Uÿ’’’¤ûzk@ǰº–f×f‰tÎh\ô”;k((ƒA*++Ò™ãíÛ ¨6nÜȱǎdñâå@i@&² cƜν÷þ%a¶då·Y±ò—Õ¸S1'Fs³x‘ö}³Î߆²àââb ’R÷d™Ð.³Œ6Ñll‰tÀh P#¹K"ÖŽïN’ž———rSº†X0¤OŸýX»¶ ð-=€nÀ?€±Ààk`=öO{l:ÐwßýW£®mAÄNݳ²²šeÚöfÐñZ,жƒ£%> ³,..¦eË–I©g²Ìhjj°6Ma²Í²+ŸÏ—Ôxñ²U÷=fff6˜iÄs½m9Ý¿í¶Û¸ï¾©” ³€¶ÀÛÀl ¼h~ß | ¼Â¼y ((èÄÊ•_ÓªU«¤Õ©>æ—j Ý\¥·Ù•µÖâŒ,..®Sâ(++côèÑкukîºë.V­ZÅwÜA8&==Gy$i÷µS´ÛhµE›"Yæ^˜“““TƯô­3»Ã“}½mi—^zÏ>;ˆûO"Iã@`(ðp5bÐ ?€| #PB—.û0wî[ iÔ‰Z}ùG¢A{GÊ?²=ü‰8#}>ÿþ÷¿Ù¼y3{ï½w­eNŸ>“N:‰‘#G2nÜ8V®\I—.]Øm·ÝxôÑG8ùä“)++KÚ‚® cEf$›õm«€uÕ9‘xêæf£Ggúô™HÒ | |\tŽ::ènþN>çšs>ãÀ‡óᇯ1`À€ש!Ñ4u¶[n³ ÒT ÝœßDÂÔæŒl×®ü1|ð=ö~¿Ÿ;3:T·jÕ*† @×®]ùé§ŸèÒ¥ ³fÍ⡇¢eË–I]m»St]‘É”“é-«­\w™úòlϤQ©ÈèS›@­{ƲDt´°1©FÊÞ­f ÉÏϯvÄM™2•ƒ:‘H¤3ð,ŠN(E±¾+€ŸÓû¸1À1ÀÙæ¸Õ¨ãù€žH£=±ªƒ€Î”–9òRòó{Ó©SofΜ™‚,"Å3g#ÞÓ|¿íaÈa89ùŠê)¯ è<‚BîBÀ?!À'æ«PûåòÄÏnµøÃ†§UUUUOÛƒÁ`tɲXƒÝ=÷Üc$‹v\rÉuƒ…¦þÝL½{~à3íòZξiì'!Ö<Á´Åžèg¾/Îöeýú ;1kÖ¬¤Ô=Ú,hgffÖG¬~mó»¸Û9Ùml#”RÍRšAÛ)R¼©1}>_\ÇZ9×pÖæ¬‹×yiÜNÈÌÌÌa{ûï<_~ù)bC'!0zò9®R>7ŸÝ«ç>^CRÇÍ9íPÞ‰—ƒ²/âJþ_teĈ{ñ ÖŸ7ß|5¦ö¾-X†méç>ôš¶A¬ïWB«€õh¹÷ÀÁè>í½}`þŠ‘“0NŽ)ó``’;NC¹£[›s÷þ…fÎ Î]¿èeÖ–]×–Ð(,péÒ¥ v,7V¢Á|¤ËŒ3k¨@ºücd{ îˆøØ£H³wÛZĺݖ†òjE³–ùÝï.ࢋFrß}w7ê>â17Ó¶V_¦¿ÆÌfJJJhÑ¢®™×ö±”gЉ¼Ôõ±X Ì%%%dffnåll$F”––&|ɲÇI`7SÇ9HoøŠÖøæ˜;€ÿÔ­H z6¤ÏC so4íÿ±õ<4Y‡Ú>¯Þp»Ú–Y[¦Ýøî»ïRXØögãÆÍhÆiîé84èÌBZú4¤Ÿûѳ> àihÆQã K¨ ÚeQÇU v¼œ©S_fãÆqÕÛZ2£,Ó¶mœ••U툴³™†,ew'JJ%Ky€NÄêzªªª())!--­Î Z“á諯@:¸Ï=óÌ1HŽ‚@t³9Ûo>/w•x2J›éfx¹¨sÙóÒ#üƒù÷n$ŒFË£µ»ˆ$„—€{и«Ww M›vbíÚµ µEc-‰0mÚ+TÖ#fÜh7À§"Gá¡(/ˆØà‘Hêiã$ì\…Ï™«t1¿e"–øj£…H&jƒ˜e:S¦L©·ÎÑ÷]hÇ;uüñÇ)(èȨQ›ûïˆfL×¢Áåyàoˆ-ûР<͸bE-¢3­ýdŽu÷‡Ùh´ö5ý@;†?³Þ¶°¶-f\ÉÈ?²eË–”ÛR\âHÔbd")@ ,µ½ŒîTœuågþðé¬ àî‰(gñ%æóUHKœh>§¡E/PSú81ç ®ïüˆ¢N<ý4àÈ¡˜üÖü}x'ÊʦK—¡ää³páÇ[E€4•m@Àdµ÷ß fÛ (~4 1g<ˆ¦ýµ½Ö+ÑÊÁ hFÑ éϯ#°ÝûÓÈû›ƒ¼ôÒK\~ùåµÖ5^i,ž©û /¼À„ 7¢gUˆcPä¦îóÍ}vŽºÊ24p[É_Ç¢¶Ü€"c~BƒÐßoœ­×¸Îû`j¯¾ZZï}Fßó¶´xò¸3ýÍ›7M›6ÕÈïmµmwµpáBxàÒÒÒðûý<øàƒI½—”è†Jî¤õ6 f"ç'£ž±RqÖuîyç]‚@ø=´¨b8rüm@lnwJï!Çßrµ1 uG4= u¸Õæ;k$r¼ùÜ I æxÄ?˜cŸ@@0hKyy>½zíC=X¸p^ÌYˆŒB¡ÐVúkâÕ‡ã$,E`œBéz¢™@‘©cGsü1ȉú›å­B:õ©Hù Òøg!pÊDíB‘1mÆbéÒ• Ö=~³ ½páB†=I:~síÁTƒÀ[(‚§ð{$ÏÄêÂ"Ég¾9~#’vr¯À†"YÊ‘&ß Þ]Ìÿ+Í_kÖ¬YSc·‘Ú¬©t"cm ˜5k«W¯æÉ'Ÿ¤C‡\sÍ5´kç¬J­m»«½÷Þ›'žx€#FPRRR羆‰ZÊt"f„ êJZ_ÛùÉ8â)Ž®÷êÕëhZfÓãmD§!§ßÃÈùÓ1Æß™ßNAŽÃ5HG½[¹1é’GáÄ‚À¨äoQtÃ:`<š>_b†:°tiùù=z=ô@õ=Û$NÙÙÙÕÓÈXŒ%þ–ÈՇHÌ@À² Vo#™g>NŽõ¦ @ PÖ"F|$r0öB@u(¼kQŽ2Óf¯ qwZA BYYâ{8ÆkÁ`ÝvëNY™}÷òpR§~€À2„Àzûì3Ž=6š¹okLä•ÏçãÈ#¤¨¨ˆƒ>˜ÝwßÕ«Wo%wÔµÝÀ;ï¼Ã{ì‘Tp†Hƒv§mh2¡dtm:s<–““:Å•HưLêóùà)óÿ¤Cž‰äŠˆMþ ¸ë¨S…ØÒ]ˆ:¾óPL5ˆÝ‡´è·ØwE¬{:bsiÀh|>~;fÏž]#‰“)X¶RŸ6X»ÓÌ~›kŠ€tìlšš"zš|‹À¥?Ò×?Á™ú†w[ä$üÍF~BI™²þ Ǧ™¦ŸuÖÙö ¬¬zÖû"9a h6 âR‡1è9n6÷8iÑ+Ìñ£Ñ3> î+H.³Ý=€û\×w?s‘vjó#°> Ú Ð2û5 be¥º­©€$‹¡W; ;vìX½°ÆšÝî Øj»«_|‘Ù³gWËÉ´”èx®E›# 1;s7ô×ÏYp?öأг ?÷"Uˆ:Ÿ±»á(|Ì‚ìEÈßp•ü'Äz {z Ub£ÍyÿFLñ×¹» æÞ…øœgcPgý±ð+8òÈóéÚµo½mçžbÖé`gæ,óWfËpB˜C8:l×¥lr”q’,^0ÇEÌq_£˜áïLûíÀ9ÓÓ4ÌyÑ¢EtäÍ7¿GòL ”ÃÑ`1 ¿Gz»»«þ€Âå"Hú9ÍŽrͽ´qû.š‰u3ŸÃ(åêÁ8¡u[Ðà; é³z;™²ÓÑsXŸ2µd õ…ÙvÚiüë_ÿbüøñÕÛ]͘1ƒÙ³gsÕUW±qãF.¾øbŠŠê‹ÃOÌšµÄa€nç[cú4„A»uf»_C,‰0|ø‘¼òÊ[ÈIs6’#®Aøÿƒn:Î ˆÝÞƒ¦é>sÌÔ¡¬;uÞ‡¨e÷#ðŠ@jê”7 )e85á:ÄÎ'¢ÕŒ·˜2Æ#Y¤˜²²0¹óΛ¸â ·s²n«-¦XQ#>S/b‘6ÿƯæ>lÌójÄû í¬rq´wwç ™óÿŽk Òó/CRÈó]:b³›ÍõÓˆ‘¸…Ãa<€eË–˜ú¯1¿ 7÷ñ¼¹‹Í=.D!†h ]‰ÞtÇæÜ¯pÊ GïJdíM¤1ïg>—á¤oµewK?Ò|~ ‘‚õh+T/¶¥êêh«ªªÚŠ5»­®í®~ù¥é6vHyË¢Wæää$å%H¤ŒXI•£…tÐAÈùõÚÜôˆ­þ„ëM€tb^v#Ô4×¹– ·BIëÿˆ:#H²8-o‡¦ºO"ðz1¹«è„XyGз¢P½ó¶ù—¶À^ÜpÃdòòÚ%”¦3V{h µíA€TŒžÄ|;›¶ÙéÒo™{¨Mô!§àhfq„)3wOœåÏ>D>¼q¶hÑ"ZµjDzev/Å.º£Õ& IDATh;µñWHš8‡;ÍEÌþi¤)GÏü$WÉH¢: §Kÿ„Âå~ï:î¿æžìl£ùŽ3uxÍRN7Ÿ?Dþˆc‘~ÿ3~¿Ûñ¼}­¹ µ”hwã[¶ZVVVå-™yâeÐî˜ê¼¼¼Fç(°×UøÚ´a ¡û b¶¿"°„@úGsö HtkÖ·# -ã= 寰Ày:'«=ƒ–ŒG?±å9H¯´çõ@Ì» bw#†}š*ŸìIÛ¶]ÍB“†™–ÝZ` #  ™_«T±¡ãìñšYdR36ÜZzåOA0ÝücfœˆÚÒ‚³eÍñt]@±ÿþC2äx´ò/9vÏB³—7Ðs³KñAì_‘Œs"šíƒBÞZà„Ü…‘ƒøœ•ëÑÒu+Y€€w%z·0÷9-€²±Ñ³Ñ{g÷çhà»Í þÒ¿zÛÂZsÐT¬gÊ4$w7‘º¬>€…B”””Të̱vUi¬31¦"ÔAwE`û'Òí€Þ† CˆÙFnübÎß™cGýëpÀëûû‘ùœ†„k‘cm’)gO‚ºÎ=9¡2°T  Ø`Ž9‡«®º‹nÝú$Ü>ŸÏL73[pŽ˜Ï}À´ANÕ>æ˜>H6h§»M}n0u³ »'Εž(zai·°¹V…9¶Ê”i‡ØVÛ{³yóf Ú²x±Ýª« Í|²P{v6Ÿý¨ý¿@rÔ·¦.çáÈ5k‘£î×^EU?óy“¹×ãÑ ès¤9À¸ÍGÎãþæ¼ÿ˜6m>ÿ½£Aâ oþ3S¦Ü•2 ú›ÓÐkm—Ç»kuc^˜Xç†Ãá9’“%©Xs “'߉tÂN¨#=‰ØêH¦øôC(Úbž)åOÈ!v=ÈBähº1]€‘Ä®E€“†‡¢y ¹àp”‚÷ vAQ#w è/ÛúÒ&¯4õŽt^?7n¦  cµ<^S¸’hkvÍñ-œ6ˆ½÷4ǵ4í6Â÷g4û°;±#}y¾9ç]sÎFsœÁÓÌçÄ}'N¤K—=+.B{rÈ-@`8gÑÈÃ(Bå|40wlj:©4çƒÓmg¢A»Ia“гÈGÀ¼ÜÜ[1bߟ›ß'›ûùÊœûOsïœ?D¡‡JAªwDÑ2ûì³{ì±Gu®çúvUÙêôv4ŸÏG^^^ÜQÉ\lbuæ²²²˜y3’iîä:÷Ý÷' —!6=±$+oØiîȦ›R& v8ê´oDÀú{ +‘„ñÄÿŠØ¶]Œq޹¾-äüI {!gbšÛãT4mÖÔm7$!´¥ÿßpÿý“âng†dõá4Îå¶ÅÐ2õtĆ‹‘,FƒÖ~È™j5äÁæ·Çø€ôÝöhø-Îòx[^Î ‘˜ŒÕ»÷^Ü~û½¦ž™¨]vAítz¹hð ’ŽÎÇÙu|>’k0õþ;мø †÷ €ícîÍîŸxÚSM9=Ðûp8ÒïCæ÷ h˜ˆfY#L]ÿiê4 ~™ëæ_òþû3ÔB¾Úô»AÛF75ÓNV™© ò)ÐØ^ƒÉÚÙ$Ù:s]ýrŒ7±ªën\:d+Ä€A±­~nõŠöVÅuBÓÓQȱh—ñ‹ØäHß~Øü]k®|bÓëPxßkÄ@Àß×\ê Óž„@dç2SîHëΆsë­“0à· ´L9"Ã8ÌÙîÈn~KGìO,Ýk?4ÕwÛ/h6£AêPÄZ1õÍA3– ™c#Î&²ñ=ÿÊÊJ Z³zubïÝÑ,ã¿æ:T7¢¶|=Ç“P;…$1ÒÜo1ÒŠ7 ¥ É"-Ñó:”ù2ý]L[½hê<ÒÔì+4àŽAQåhp=û$Æéè¹£÷ìH4Ð> êì±@Û.HJõMg=€ÞFÖX€ŽD"M®3×uí@ @YYÇ?Ek\B§: ‰ÃN9?GkêlP‡œˆ@x²ù[ŠØÏTÔ!§#cšÂÚ•‰/"ý.@ pZ¡†ùþc´à#õˆíŽy>¦³`ôF ~!p*K—®£  cœ)d­¤‘‹€)€€#ˆ“ : 1fVø­©×–¨²Ö Ùgò®ßBòM\ŸiÚx³9'Ã|_Uï–M_~ù%íÚuÂɼ·'Òý§šúˆ¤¢—L[Y‡æW)o™6[ˆËûÐliÎscLAšóÙ8Àû¸¹¿áˆÿ=û+ÐóYiŽ9±o›ín#Z™¸ ü§#ùèIÀÇË/Û$Sñ›]›°³îÞXkh>ކ˜Õ™C¡P“èÌõY$¡´´”p8L~~>/¿ü„ù¥5 y;už+îx;ê„g!fø8’0.CSÖ¨“=€¦­iæÿ›Û˜2OAŽ ÍHx uò{Íq#ÐÀp6b§#6oãwo@ày? F!€£è—€<àÁ@ZµêĆ êi•lŽ%h@(¢¦Ý TKР“Žâ˜[#6Œ9¾ `­PäF™9¶½i«®ˆ8@µÁü²ÈĮ̀‘.×Ð^'NœÈСG›²J‘TQŒòùHú }ÑlçW¾»˜ºÎ2õù &û™úž‰¢ÏÐŒfœ©çèG›¶Øˆžßá(<² gFs‰¹ç9È1| bâß¡ä4°¼ƒñè>ìEaa6G}t=Ï+>K´ãMÚP³99RÑš@'b‰2èh9##£Q:s¢:z`°›´¦¥¥ñùçsP¼ï ÈױћÑRí,Ķ^G,rÊ»(ç¡Î÷9ÒH6Œ:èFäÉ¿ MÃWšk܃AøLAþ+bÝ™æxëD»éÝ× ©2h0È@€~ŠTÈF:qI÷î}™7Ï:9c™eÍ[p"[ªÃÍÂY0ñ ŠtXƒ¦]¦}’k2í“·Í:™:ÙD@!4£HG`2ådѾ}!{÷Q£Îâî»'"@ÛdÚäUS L2íy1Šœ(A`{" µ»ðhÓ¶9Hó?×ÜãóûXSßh)þÅæ¾– ñL¤½o@t?4W¢òWôlýæºï"ÐÞÜï§æóhVuð1K–,ªã95Þêí`0ؤ Ê‘ ;5@7Eô¢æjÂ*¤ÿŠf¹<«L¹Ì=å#àË6×(²Ùo¿ýp[AA;*+Ó÷6õÜ‚€ô œib¸‡˜¶| *ãL=¦! ´Ì÷Có›=ÃJÞ%8ο¦¾ á4×ç68òÓ¦-lžïg‘ÜubêO¡ÇÕhÆ1 ù2€—2d0]t©n6—›i'ÚÅÅÅu&*++ãÌ3Ïdܸq\wÝuÕßWTTpá…Ò£Gü++¾·&+y;Y,L$ž¹)vU‰^¢ž¨2--uë–!ædó"Ô)?CáZ bŸ¬BÓ× $9ä!@µ©Kû™Ï+Q4H4…¶¿ç˜óƒDÞBÐôXs›Ñ‚ˆOL=&¡(’ÓLmX½€˜å«hêbáW V—Åk¯½ÃÉ';«än¼ñFSF9f›À? 1år4XµD¬³;bÕ‡"‡ {›®t4 Uš2ÓͽøÌ9›qœ‚6¢£œšZ·¬  9¦ ß ÁáH4+éhÚ¶ ’UÒ‹í„‚G»Úõ4h-D¡‘¡â)süÉhFô$ “bÚëY܃ьd ©; O˜v>1ô)Èéx!Z”ôŠý> Í þ…Þ‘O€OèØ±=3fü“æju¶;Õí3Ï<Ã{ï½Giii­äÊ&ëôÑGÙ´i+Wj½€ßïçÉ'Ÿd=öˆ»^ï½÷7Ýt£FbôèÑõß,º¡‡ [KDgNöB{ýÆ.QoÑ¢ß}7ÆÔA¯AÓèë{¾1ØgÐw’5^D nA޳g‘~ügóÝ4$WÜŠtë!F<örÔÁA€¼;N6»%8úôs¨þ‚³ô{ÒŸ7#M{8’^¾E 3éûéÌœ9—áÕ„¾S§Næ~C81Ê™äV"VYaÎ # áWª6ÂãgVöU/B+ðJДÞ._@ÝsN>jç¹XÙ%Å3/B¹æ~ÒvëCám%4O@Àx†)÷94`íƒEúfžéh©öCH¯ÎDòÌ5(Ò"ùî@’Õ¹¦ŸAŽå h xÍh.G3¨§ÐŒé 4PM6Çå!¶]L«V¹|ÿý¤º%êÜ‹•êöˆ#Ž 3gÎÎ=÷\Î>ûl–/_^ã¼U«VUç¶ÉújGy$&L 0iRý ·š@'b`ƒÁ`°µxuædíª …j\¿19ª­uíÚ•¥Kç#Àl…¦¼H/´ž÷©ÌÎC@> 9©ŽG±Š9u~ƒ:İ\‹¦ù˜ïþ…¼ïBÄ̯DŒíSîsHë¼±úÿ3çœkê5êÿÐÀr'b“}„Ò•>úŒ“O>ÍÔ-ÓüU ¶0õÊA m“eá¼Î‹èΑ Ö êa~_aޱlÙn«0e†±¡w6‚£  Ð”çG²ÎjóùS4†¤ Ð,æGÓV»!måƒi(Ôî7t?0ß?ˆf!íQDޱþ«ÑŒ¤ ±ïSÐ UdÎËÀÉbhWZþÕ´í$©¼fÊ? 毢”c‘Ì´ èD9¬\éÎ žÚÖ˜¯Ïç£S§NtëÖ+¯¼’çž{Žçž{Ž®]»Ö8®®dý‰ZYYcǎ塇ŠK÷öE"‘Õ8oUJZ("Œ•,ö±ÅÅÅÕS›DCæÊËËÉÌÌlPDGeeeu"‘999q_¿¤¤$eeevEø;&¹¨s¶E Ñ9¦: Xä Äì6 Ž]‚ïÄ6wC`÷³QÙhØl~ßi­™Èرîq(þöbäü: ß"¶ý8bòcÀ½‹ÀæQSï#Ñ“Xð¯wÜ!̘ñól”F.ã\ÄHû"]††õ¦n? ù ±ÉшÝ÷F€ú³¹þæë´ç3÷™Å+¯<Ç)§ŒÂÙ·°†"à;ÉVÞØdêzÎ"¡Ó̳yI2U¦A4À¦£r´yFGà¼Å”2×¶YþìÒwûÿLœÍ ì;·Ñ|îgê^†©J4ê®2 =¿ûÝ`žþ’evYWžåÆX8& šÌ‡ ·^x£>z+`¶VVVÆE]D«V­ÈÏϧgÏžtîÜ™c=–+®¸‚W_}•ã?ž›nº‰]vÙ%fÖ®¾új–-[F¿~ýèׯgœqFÇ7 €¶ûÚÕeî-¯"‘Hƒ½²vðD:‰ÔˆgNôüÒÒRrssëèE‹qâ‰çðË/娣ï…tÉNH¾Ø Ü·¨ãeâÄúþŒ")ŽDSZ»KÆÏ8:#°ÙŒ:÷ZóÛÏ8«Ô,‹Í@?g·—³úG:ç£)xrBþE$ø(Þnê=飽³kƒîZzöÜ•%K~A`Ô K6ª- ÌïEˆ!ÎC`˜‡€p4’9Ö"Ùæ œ LyvQŒ·b¬1=B!+¯t3¿„³${w$5­F¡t M=z!p>ÆÔåuˆÝèîižÝ4ÓÆUæ¸L¨iæ¸hð)0¿§¡YOŠ{nd›…ïEó<Ž5íµÆÔ­Ø<»Jó‡ãĦ¯Ê:tžzêqÚ¶mKc­©: ‡=;:u*^x!­ZEý­Yï¨TïXYYIvv6ùùùÕ!l ±†HUUUÕ;»Ø˜æ†XmšÚúõë¹üò›˜1ãS**Ú¯Aþö8Ë·íF±kÑŠ¾ó®ìfð%hêûOÄxpý6É›XmXYØ\kºù~oþÿCLt=óRä|ʳæ»ö!}ç™r¦ ÙcÒnm~ê±(dp9É’%+ð´@€ÜLV k »¢×úTÄn3L›´6õ´@¸‡¹F¹);hÊ™ëd# ªÎ4jÎ쎜¦mÐó´©ÃMhFÒÙ”ÿ¨)Ûf”;ößp"}aî¡GK/GY޹ßb$×Xçh>Nì´]~2õ+Bƒé±h¶à7¿‡Ñ³ýéá9h ùÉœÛhͬY¯Ó«×‰ùÃÎáÒK/ið­T^â¶dïÄLk ÚŽÄÑf·¼²Â¿}Óàö:ñL›ìâiiiøýþj)Æï÷×{n´ÙwgøñÇÙwßcln‹Cq4Ìg=MÕûâ$˜ß€@î;xn ÕdÔYÏGSöuˆE-C`Ü 1<›>…ÈqØdzhŽEÚîrÄÀ‹Mýz"ð}±äSHOEκgPDÇ¿Íõ7"}üÿ˜}ãȳ º'?tÐ\§ƒùwÿÑ`d3Ù• ­w7L§ ÐK7e嘲-s.3e‡Í}¶1¿u2ß— 6ýµ9f r.EÌôIó!-º%Òy pfV¶Ë3õ·ÎÏUH.ÚßF>€Å(\ïœ7ˆ¢kïÍŸ‘Œ±'p bÜÑbƒi3»ã^è]ûø}û¶ç£>H˜x$K‚¨Í¬ìÙØf÷ß?7ß|sJ&Í’A[`ôù|M²«J}‰|lØ^("''§FdF2Œw̛ܹ÷áp)Ò#sQ'ú­ž{ÄüÿMó[?Wim|°'û݉¨ÃÏG¬Õf{›†€§…=fìGrÃ"f}¬EQ ‰ ˆÀìS¯³Íõ§"ÐØˆ¢:òPŒo‘9v4rœ}‹œ}8Ý€˜¶]9ر¼2sn+S_ˤ³Ì÷Ä<í¦¹6×ñ&s|OSßæ÷ÍÈìnÚ6S6Ž“0V+Ä„W›ëv2Ï$Íœ{ήØͽïeîç[SvÎõ\sý~æ¹d£Ac†ùîLs] Ì_#Pþ#Î`i·¹Z…@{„ë·.¦ÝþaîÿH´he¸"H2€fGÅhPì…)2Ù8†Å‹Ÿ¦cÇ}¹õÖñŒsiii¤§§× hÍ…ACêf³kV º.`t[c´Í¨‹»åWé¶P(D hÐÆ±ååådee1mÚ4ÆŽý3’EêO .DáqnFR‰:êÛˆñ^‰³'ß&ÄzßF ÙÀá^œ=è@ôiK<9ÿìØ½-TY‚Bµ†šï"–ÛE ä#0±98òP¼.(Bd5ÚµŽ2u{Iƒ°õÃðSn›aίB •cþßÇ©—ä€f¢Â`ÄZÿƒ@s‹9g7yÑÙ´¡•J*qÅXpîhžÃ¡h{ÚÔ·Ä´ç^(Š¢ƒù.ˆ;]`þ†#iäyÓÞ#͹? Õyh&d5æ¹È :G+=Óé8’É>Ô”±~EïC ¸{³u°Öb4Àd!†~ži·•£çPXù(àäç/gÑ¢Ùäçç×Èažžž^ZÔZ²4âÚ¬ªªªúÚ±û￟[n¹%IµJ®5€.))©£­1 cÊ¡Pˆòòò­ä·…Ãá¯ë¯¨¨à/™Ì½÷>… Ìm(|+Œôf»—]t§ !Éàï8Ô3qÙÜùÌ{»Ê¨Dúô?Í÷×™z€€õ~€L"ÔFÓçëq2Ûý ¿"–þóoÀf!†Üʦœ±¦ÎG¢µóð!ÐâÄCGp@ºÉ*´=— ±ëˆ˜¥ Ÿ+F¯ûRœÝºKpœlöß4œLs¿šï‡ ™d¨){’|–›r6ádÅ€•î¦-¿DrMNÎæJs~†ù7 „!So»œÝ:f#È×Ð pvE$ˆõÎA ÿhjÀ wb.JUˆ¤±Nˆù¿f6|Ïú4ŽC ˜f›²Ï6í÷K–|N»víˆD"„ÃaÂá0!G¬'==½šA7%@Û¡1æt#-‰T‡ÎÅ3I$d-Ú¢Y°ÝxÂæ¬ô’———ðuo¾ù&Nüˆpx5ê(«Qgú Îã)CSÒ÷Ó¼‡-Ûí±>DÊ:šE:s´ø9~ rÙñ Îü>Ò—ý¨{˜k,DDgŽRĆ—¢•pöúSqrzÌFÀÝ…Õ_mß•ˆ-?aêÒg‡“¦> °ô!€ÄÜWÒ[»ál0±Ñ OBÉx¾E ÷¸«ÄRÔqßC Ú±Ü]ÙÚV"O  û!m»0ê¸X/FŒõ|¤[[[Œ€ç—! ˜ƒ2¯e!kcΘsº¡ä$Å´7×^†±æÙLA ÿ{œä@# Tlî×î?¸ ³ RÞCŒü ¤beè•_€€Ò&‚j‹³7áS·ˆ©S;ó{ºùî4øì@ö9l§›c¬.û;$o,E\Í,lüòOèYo1ß‚ÐPDNKйˆ]ÿ–šCLÙï#)©-„Ý+K­­A~„BœU‘¿ERM,-EÀ>ßÔo z†ÖÞ¾`Ĉyú釷:;Yqmæ–8j ÷«´‹ŠŠxå•W¸üòË›¤Žµ -ÛŽ•¤ÅFiµ:›  cÅR·m;€’’LÔ¦"vç¶Õ¿3ÇL@L'–|S4ÝwPgì„m0b¹×£´¤û™²>À‰Ýçî®ò"(œë%v]Ì1{šß+Û}½By®òg!©Ã‡4ì½ãÇuæ¼×s±EnŒÂÙÝz5·RœXæ"SfZlÒ V¤ÆGhc‡€9v!Z•ØŽ­­Ì;ßÔs_4 ¼ˆ;kZü?±yóê˜ýh[t,sëÙîÙ·[Ï^µjŸ|ò \pAÌ2ÊÊÊ=z4´nÝš»îº ŽŒ;–ŒŒ B¡=öXroÎØ ÐÑ«ÝÙîê ›K6@ÛUbÅRt ‹ƒV ¶Cà,¶öÐ?„€gbœPÇù-[ƒ:ˆ~¤ƒE¨#‰‡Ñ ¬ ±É7‘LÑ9ú§¦½±Æ¥0Ö›k_˜ÞK(Ì®ÚÝ¥·9öQSç;žÂìz˜ûžj®%’b#ð{É,3‘þÜÁ´ÁF4 è‚@§7Êâ~¦qVÚ¹-ŒÿÃŒ– ›‹ÃâCæ~º#æØÉ/{›º÷E³ƒq¤†7M»0çþ±ã}¨ûqbš3Ðs„³‰ìǦ!Sþ!ÔŒ²™Ø¿Ï´y/ý±+[Giü‚õr‡å @^ƒüW›ºlD€¿'‘Ô‘8‹`@íÿ¦iÓ÷LÛ¼ÀêÕËc.ÎJ–¯6kHùnÐþÛßþÆüùó …Bœ~úéì·ß~ôîÝ»Fÿ|úé§ÉÍÍeäÈ‘Œ7Žë¯¿ž.]ºðÁ0þ|þô§?q×]w1dÈ9ä:®Ü0k6¹8³q¬Í6—Ýà, 1·œ‘““sPP I)b®“ãífDÇãtîÏÑôÔÎ V#@ü»ùn ê<–‰¥#@éŽBïîD,øz4eßM¿FLó·æ/bŽ{Ï”D y&ZlÑE™l2ÿ_† »¿ éØ"€lî'‚×)PC« Ç!&|’oÖ˜ú>ŒÀm¥i›BÄ€BÀtLî3ÇüÑÔÕ>÷ÄŒ-pøøÀe<¨Z#@d~ûÑ\#Vk4È´ET7'æ(ÊÂfÈÛˆf;¿ }Ò„ŸÂ ƒcî%ˆ³²/Œ@ô÷Ôtú®@ƒÓ/h@:±ëÞ¦|û—™r¾0õhf1§á¼/n+DÀ~¿)# dãÙzAæ¾>3÷ý>òt@¾4¾ûî;ŒŽ¯OM³!ééé\vÙeÌŸ?ŸM›6‘ŸŸÏË/¿Ì¨Q£èÕ«Wõñ«V­bذa€³›J—.]jì²Ò­[·Fí²R—5€NÄ,@[I!==üüümšÅ-gÔuíW^y‚ž=‡à°ÚƒÍ_ b/á$²»‰€ÀÑêf¨÷£©w;4%?Ø45í˜qM¯?@Z©]¼1iؽÌX>D[c­B iãmìï×Èñu7êüg![tôñæ§#þs á*Báz«»ßÜs6bCq2³M=nC`™Ž€°iCË~þ`ÊŒ5¿ÕÔ)Œä‰%¦½¿5×Í1u*DÚö(^yØN@ÒLks¯ÌÒÉË„1 éÛ—#VlC˜{ß°AÏñ}9¢#ŒöÀéªÃÐ Ï©8úx>znç;ª'Œ‘/Ì=Všû(FÏ5–3}@£6j®3Öü>¤K—ÍœcÙ–-[èܹ3ûï¿?ÇsÌV¿ÛÝT<ðÀ»©tîÜ™¹sç°|ùr† Ò$õk6G¢»ªØ}íÖì‰Xc–ŠWO‘âÝQå›o¾aß}GSö1ˆ©º¯½1Ô.¨£î‡@¼6çÎäš‹“5í jNsÝfuÇÿ öA`~"POEŒw¬9n±©ã ±`“Æo®½MÅOCabëŽù1šº_Š€p b…‡™rÓ[´©œÌ*;Œ¢KŽBLo&bÏçEÝOÉ%×á€O:|?Ò‰{˜6tÛíhûÜÔ%lÚn½ùý@ó}4»™‰Xî@$ |ŽŸLSöoÄ4±÷B4+Œq³ö/¦=ú¡çë~NV^šgêâÇÑžÏÖï@Ø”÷5Žï¢ÀÔs°±ñ¦Í~DƒÇjÔ¾û£Y• «¼ ÍTf›¿õlÙ²ŽÚ,%Žh{íµ×4h}úô‰ù{m»©sÌ1Œ3¿ßOee¥§AÇ»«Š•€ïªÒ¥â6ãžÍÅ‘h‚˜¾}±lYbekc9'¥ç5ˆ ÛeÞï#Ðk$ˆý‘.ì®ó-ˆÍæ!ýp!bq…$öC,4ú>‹`¿»uàÛ£´¶ é¦3MÛàä§ÎBì÷ ìéhEÞâS µÇ‰öøÖ”0’Ú 'àLÄÆÛ!¹gUaN¸4yg%·†n—doFƒ^WœéŽ#ò\S¯›Ð`awÎ.DïàDc"m¸ j‡™ëÍ@Q.6Zf9ÍQæ9|m®½+zv»ã &AÓ6  g#©j_ô¼,ÀÞ‰X³Ýf1Î"ŸV¦>ƒÙ:Ï^ãc4à´@ï…;ÔÎmœ\ùh6⢋zqß}wÅ([Ö”¬ÝZ¦M›Æ‰'žÈ®»ÆŠzÚþ¶ÃttØ\C–\[Kt©¸½vfffuð|¢±ŸÏ<ócÇþà>Pÿƒg0’žˆqæsqò$D }7Фˆ¶ÍæœÍÿsÑ4Ú.xp·Û×hqÉhÄš–!ëŠ4o lµë÷ —!P9 ËjÄ&g!ÐICÖ(™O)ÒÄ qtõÑT°WWÓ}°Ýˆ“”?ÚÆãlŠm? 6ïο@Þ­0¿ÅYzÞÃÜËÿЀyŠ}^jêq´©ßÛHJh…Ú ©ÛÇæÜhð³)D­¬U‚Xö"ô s`÷Ç™5Y‹ ÁéSî:œ¬}û¢w'–rYfêû¼*Ñ€·Æ´C¬ìˆKM½Všz†àŸ€øå—oêìcÍ §L™ÂøñãSvG•f£Aׯf›"y¼Û^¹3ÝÙk»—¨&bçw ~ÏÃß…BÕN@C1¶"Ä–:!æf÷¨+@Úî馤2’Ï Î~b]ƒ;íˆä óbƒŸ Áj›ùHj™‰ôäŽ8’@ ýú])bòƒCƒï °“Í}ìeÊ>1ã÷pâOFƒÐ枎FÂ*4Í^ ÷{`CêbY]³Ÿ¶8auÖ²PÛ¶A³?b¼×"G_¸_˜:EÌx&bûÌ}õALvÒßsР7 y)ZU1÷FmÝ f»P,· ö½ÇƒŒQȇà^Ðjë_ÐLåôDÌýí‹Þ•4œUŸÖ—°±ûoÌ9vÆrÊ = ìïóÚkOoWPKÖfååå J¼­¬Ù0èèm¯ê ›kL¨\};{ۺش¤îãšÄÖù“O>áøãOÇÙÜõx4XØ©Hãý±¶]0î@Ô¾´ ñÒ!g"6\ŽÀ§˜=PEôÀ¶E$|ˆ:b»³ë…ÞFÌzb\L=vG¬ëĺÎ1õ,FÜ`sß!vm7T=±ÃoÑ`p¨¹÷]°V p±Sy{Ïî7QsNÄõoÄÔÁ]ÿˆ9ϾcýL½ä›ÍH¢imî³1ú¡g›{Ì4÷0Èük÷ü gÇñBÄ–oÁqêEÌ5V˜öXÀ8IW©é,´ö*N^lÏ0õÜ=ãX+LCh¡Éçè}(EE¤µ[Њ Öf\Ë;ïü‹֛ب)t²¶ÓJåí® 1h·5uØ\]åƒÁjŽÑMgÝvøá‡3sæë~¸ Ѳ;¤ E;Å[[:Ú¨å!íu_œdB{˜?kaSÖ4-/B´SÄp· ˆŠîæ¼"ä³1¾˜ºõDrbi¿BŽ­'‘Äa·b:Ê\ë#S¾¦Ûï#çÙóýLĨ÷FÀÓÂÔ}5Ó«ºí Äük³ ˆº­Ê´Ë (y%Î^‚…Hžé$Ž¯Ñ ôû™vÎB z=ZÌÓÍlŒwÈ”ÝÑ´koj²[Ì1ëÑs™ž‡M“š†´ã>èˆN¶š MFí\…Ê¦Ž åYþ~:¨?o¿ýZŒrê6;Ë­mK¬Æì®’̽Su7hf ://¯Ñì4ÞkYËÊñJ)•8l–®p8LÛ¶mY·n)ï¼ó't‘È˨ãöB ëÅD^Çq<å" u1šš[–ÛÂP>CQ#?£Îš…:é2äë:ï0j.+"½ô+4¬F .±MÊd÷?l³*ršæovoï-I/û"àê†bŠ}8ƒÇ|œUP|AQ-Ñ˼­ùL÷s}vÛ·æzö‹‘£¶šüä ä„ó!°ë†fL½7"@ÿÅœÿ&ÎÆ·ùæÿ6”;îÙjäL=W™2JpöMlaÎ)F¾†Xabèù®D’ÑzsÍÄÉŽ@ï„s^Žž£6GØu×®Ìû……ÑÉ´â7÷Ê=KZÜË­mdV¢»«D"‘¤¤²5€NÔ,P6tÛ«ÊÊÊzWÖvÝxӢƺnIIÉVã}ôÑ”—odâĸñÆûúÎúÿìw|TeÚþ¿é…’лT  €`ÇÕUTD±»¶UWÖòsW]ÛŠmíØ^{{e]ëZpW×®k¥(Ѐ齷&™ÉÌïë¹sN&3ÉL2¢ïýùäCÈÌœóœç̹žë¹î¶bŠƒNk·´1 l”"þ޹èá´Ð±Žh»®F¨ÏÐX7K ÎBàÛë‘xÛáîõMhјƒBé6¸±§ãÕ_¶Z½° 1ü”ïS¨¶MƳ·ð:€Ä²ÿ #Ö#ðÚ ˜öÞþ w}»#éb€ûw3bÐ3Ñâcãk…vƒÑ}ÊB ¹ø?ñ²-7áµç á•NmëÆaõ™ý6Í÷¹iH–Z$Ûm´BÒÆ±hŽŸF lÍÞvÿ– ûSA^^3&L˜\%å9Y«éÙóƒ¶Ymzö®¤ e  “e§É´ÉVǶ®á7É2èp8Lii)‘H„fÍšÅóµ×^ɵ×^ÉùçàÍ7¿DÌvrÂ}‰çhj·¥>éŽw¡¸áè!ž‰mVøÞ2í²t@à°ÅwB¬Íïü)B rbÄëø”âUœ+E¬m›—ÕÕhá~,þx»–mˆá•"GÛ´í¶z–”RÛW·¶ûnéܱœjVñÍêE¯Ds³ÂÛ ÿ—!Ö¼/ZÐLª(rãßì®í[ª&Ãä¹kÙ†îánîœþk2æ¾Å½o:bÔëܱ 蛢˜vn,ÇPUö »1¬Bqñ¥hðº§{ºq}TðÑGo7XÚrMV›ž]ó97¸#rW°F£ACrEûKKKÉÉÉIø&ú#CÒÓÓ ƒ•½“±P(T©W×fõíäòÆopá…W ¥¡qwäÐj†$€уD ir.™Þܦ¬VŸbÞþGÖåxÌ7U6ÒL›"ݸ|>"ë ~‡MîÇê9 owǺ›¢‚@O â6÷ž ßR÷¡_ƒ^™4<ÙßïVc9/Üþ-wóÕ-"ñ*¸Ù"U„@Õ®1ßÍC3¼øtk„kuT,ê¢-sðºÐXC»ÆžLÔÊÍGĆ·# ùÿáÅVoB¾ Ýç­xJÀûX´ëXƒv³€­têÔ”¯¿þ’Ö­cÕñ¨›¥* ÎoþšÏÁ`°R ©«ž‰DxôÑGwÙ†±ÐÈt2–L²Itt†¿µNC׿ ø‚dXÿ™gžÉæÍ›¹êª;Ðø=Šxh‚€r$_ôDlÉzÉý1l+¯ÁëÝ—…²­‘Λ‡}"Àj‚§ýnD ±Ùý¿Ä½fMU¯G<À@ÈF~]Ù,„o0J„¹!ÆÕ߀a<»õAŒgO¢øê¾1^›‰¤8ã7x½ ·¹ñoÅëºÁcöö¯Í§ýä¡EÅ2 ¯F:r^6¦ùv¼XoÓ£¿Ã«#Ý9ò‚xõKÚ¢Åd4çï¡ÌB¹1 É)ނЮ]W¾øâÔ‚sC™_ ‡Ã•à__={W¶FÐõ)9mþ茼¼¼*L;޾xf Bzzz5};™ë[¼x1½{ˆ_!ÒCû£Ì°®xÝBþ‹Ö,.æ´ïþnM_["ÖW4àeˆI/pgìŒ$’4a<çxÀUA7 ±ìuî÷6¨"Q?aßOÐ÷>Ö[©žlQÛΨ¶¹ÌÁk«myxñÅÆ6·àéü¤ cï±cÅÖ ÜœkÐ|¾…7ixˆEÈä¡ûUàþ>-´O ûi»“RÖ¡ÓèW»óÐnÈRô-|ñÖ®}ƒ=÷<€ú3nÜ»)kO•Ê8åÚŽŸˆž«ñlyyyÂÑVýë_Ù²e EEEŒ3¦ ©ºí¶Ûxÿý÷yê©§8ðÀèÈ¡úY£èd¬¦/‡Ÿ½Æ“êàã/Þ‚àÿl"_ì‰'2dÈ0ʆ¢x`;Þ‘‰Øn®fRD. íú ðçЃž†€Û¾9xÀaŽÅvˆ‘":ºãfQ=îØ¶×Ötu$•ü€˜}€YdB‘ˆãé¨éî¹n\- }æ~oŠ'W˜ŽnEl.ýE‘Lr°ØßbÄj׺ã®uÿ¿ÚÍY_÷¯²VX&¯d¸sÂZL{^çæÎZˆeF]¿ËÎQŽ€}ŠªXƒÒuh'ÆkökšֻãäáéüÛQÒM%Y”Î8ô] üÌ?k5—-®6ÚZøÞgΪLw¼ÖpÖ!°ºôcx½DRê®=Þ=­M¢²…Â~7mx9Š)^†xG$çÌCúm>êbwÍYxµ¦ÓÐŽÃ ²-†¸kôG¤¹×M&Oê°tù¾(Î}0ЬyÁ½ïZj¾Ú EÁLA2QkT¥oÒ£ºë-wÇ®@NÅþè{6˜C=©Sß‹[̾&KU"ICZQQÍ›G÷ç¬nݺu£°°Ë/¿œ­[·òÜsÏ1sæLÆŽËwÜÁSO=Åûï¿ÏÌ™3¹âŠ+8üðÃS6ÆFf—HÑ~³`0Hii)ÙÙÙäææ&½ÝªkªxEEEEEäåå%ÝÑØêYûýË/¿dذQyc{ÿD±¹#ðâxC($n{m b¡Æîr¨êȪÀs\ùe€­èÃ̳|ŸÏGTèΛ‹@j ZÖãÕnÎÇ‹Ë^BMþèæ~_‚d«i± ¯ãÇûÌ3Paú¦î\ß!iâkôµµÐ¿t7cï îméÛ&}ص­uŸËÅÓ·["ÎAÚïån^Æ¡ª€=ݼâŽ7Õ?Ûý¿Z`~vc]éÎiUøìÜíܘV¡Ž(V†5àÆµz©ûL/¼0/J¦ žß ÚQé4f^ì®s(Šôˆf‚ËPI×Ãþ•ŸÒ¥ IDATk˜:õݤ“V‚Á`ƒMJE¥¼?þ˜ž={2pàÀ*õö‹h¿œaéáu±dÚß¹;ש›KtÉ“'sÄ¿G,ò)îýmÝ{"åf´#²ï–?¬ñ"´XtÆý¼Ý“É0 ߌšÃÜ—éûÉA~S¼ZňMÞŠËXóZ ‹‘ütŸß‚§3g †w0šÙH жçï#ÐnÀ|2\K+×ýƒÚ_™þ;Âó=÷¾äÔ:Àc:ñÇÝx-»1Ç÷³ 5°¯¸Éåh'°/ËÒºö@¡gËþý.ŠäÈ@ŒywàNœ£P÷C’Ã}n®:¸±üäÆÝÓÍõDäG»±o@ =ëæëcäì';™Ý j7ŸÍðvP¥xÌwÇ« RŒqbòHúõGõQÎB;¦XÏ¡zÝWdòÝwß1`À€ji×ñ2øv•(ŽxVTTTç¾¥;ʕī«ŠU~‹Õ°>%GkêìÝP絚ö#ÊÃsÀ탃ñ¾ô/¢ù¤¯…Ñ[„ÚÍ 6!¶l€]/ÝÖnÈžpŸµîÌ ä#fhÕÐö@²ÅvÄ|Ó‘Óª;çÛî=ç"} §e2nwcl†€0èˆá½„¢¢«¸Y(Úè-Ó.1˦ÈnGÌØo¥ˆÿÝ×®i¶åîú:ç¸c¿Â‡"éãUÄd-2â´ X‡–/ÜxÎsŸE¯D¸¥ÂB E&^£Ù•îõ€›Û-´tc¹ ݳB¼ðÊx¶í`î¥:”£zº'Ùc-|ûí{@Õ´ëXeDƒÁ 999 Ò©8võn*ÐÈ´™_Vˆ®ü–*‹wÓüQ!©>¯1è1cÆ õF:ó,´­þIéTO(CS7T£!:"‚ä&è¡nÈ"”î<øÄ— íþ4Ĥ-9£/b€¯!}¹ m•³Ñ1çYHy ýð!`l‰ûvTy1^Â=PèW ’@æá1ýwÿvcÍ$KÎèèÞíü‰ PÜêÎ=ÁÍÛBwíÖ§¯5^ªºÅoscŠ˜—ñjo|‰€w$ŠÙžŽ˜vOäÜ=Û½çÄ~G:÷JÔìJ7Þñ2÷ûBA’ëæ¥=b¾{¸ë¶êvÛÐ÷£5Ú5 À ¡´ÊvQP5 't{ª~_Ân.Ou×v óçÿ¡r&ã•­¨¨¨ü‰.ÖßX²w%kTí朗*Y¡¦sù¿Vq®!»¹Ø9zè)š íð¥xޤXv/¾X½çüÁ“0V£ˆˆæHN°EmñÒŠCû#vübˆ9(Æx„<ÄŽ÷Dúó,/CþàaÝùnÄ+Ùy;Ò€_BN¬}k[KUPýVr3øÍD먪±_í®Û¢UÂîÚš¸±,Bà~<Ú |Àu ¢…ìGt,rb;ZNCòÅt$s¢{÷ rˆÞæ®ñL¤©Ow×ÙéÛ“KÞ-8—"{+jV„À}®c/$ƒ¬v÷Ì"fº¹c4GÑ'Éd>†ä´£ã¼¾íŠZ³råJ:uêó]iii•Háp˜œœœJ¦]F´¾V~ í® ‘´I©êÞÈùêšäR×U^ŸËAE‚ ílS¼š Ѷ= VÁ­¯>Ã&÷ºi¯¦#·@ 8Åúf"†ú1• Ò:A ÿ6‡{»ÒýtE Ü=Äsï¿Ôó{÷³¯élÒI7¢H‹Å¨¨Qo¼‚öÅxÀjs`û¹»ñvÝu й ¯‘9C‹k~ -sТ³/ž9y…›‹–h‘ÉG€ÚE”¼åÎs&Š˜)Gìþ~¼ìÄfh4µüޤ‹9xù_Ðâw©›§+Üý| ->û¹y¿éÂyn®àeZu:Ü=iŠ—ßÜÍUÄ3§rsw¬ß»¹Šè2ôýi‹Ý:t QógðùÓ®ýµ2ÌŒ'Z¬ÿ×bJƒªÔ†­ÍêÛÙ;--­RKK¦lbII ùùùIt(¢´´”3ϼ˜/¿Ü ÂèölÇóÜ[Ö]²ÕÝ0Ï}KôPµC¬Ï¯ÕU †¸éŸ-0–à•Ñì‹Âàþ‹@øÄ?G,ÓZdý€€»‘9"Óñ*½ AÙŒVzóy´äá1êÁ¨º\é<¶àéçVÛÜ]–ì‘…W²ùÒ°XÇocжÀYF_¼Ú›ÝïæÀ4v×V‚•=`NBNËÖH?oœ¥gºãÝ‹öInެ|ë"$£˜vn²ÂzÔ N3Ùh[ºyÿÝÏyî~â?²4õ½QØâÁTí×hñéKÑ}·¯%x)üÛ¨gPu¡²r§ ÈÈÈfóæ¯IĒшM1à†ØÅÌì½õ•~øan½õÖz£¡­Q1èe¶º×GÎH–AƒÁÊ:!‡Ú/¿œôÎIˆQųwуÝ_Ï2ù~@€´죧 1Õ^ s«Ý€†µ 9ˆš  þI7#p-EZl.J¶èîÎ]Œœ‚aä°²8ôõ¨‹v)ÚŽ‡‡1ˆ¡Ÿ„àJ<4‚‚fE~,ÜtÜn‡¢/¦áøfªÖƒ¶d•r¤ÝŒØór´;ø›'¥,÷™<¼ï¾l­¹†º±GÌ@‘4iÈYy¥ïþ”¡ÌÎÙHаÜyHÇÏCòÏj´h2@‡ºkÛèþv¸{Ï|wÞcQèâ$$‡¼†—yÙ-ý©ºXûí ´ˆe«€‡¨¨Xçõú™_ØÅÀ“F~M ºÑtCvUñWœËÊÊ"33³NàœÌgüœš4iBYY—\r wÞÙÚ¼ÂB6Ví¬¯øÑ·ˆUàÉ!hËߨÝî"$ €´Ç³ñz öDà™ƒØØGˆÕÞâÆFòË,¤¿î뻚Ih«~†ûû2F 0†ØÝz¤ÃZüqOw ½Öi]_¬_^,¯Z„BÜ~@€t.Ï¥h»ž‹À±¯»ÆbÄþ¯v×{ÿ‰Hï‹@s-«ÅÍ£ÅL—¹ë6‡äxÁpc˜‚…ÝÜk“ÐBs’Îvóz!ÚÅ<éÆy bÀ÷ ­ûwßnvóð¬ÏŸ‘Ì1 xÈÍÓ_‘¬òûÌ>xÑ)[¨ÏÆK¸ñ×­n…×9g+ZxòñâÑËܼM~¦C‡ØÚsª-Vq#¿4 …*<i$ÚÐ7:€NÆ’¹aÑçü+w]Î[Ûgc•5æÐ¦MÎ<ódÞxc)z@>A`bi»yxápݨEÄ=Œ[C|±Ó•îï]Q¨×t‘:éÆÿBZëÍTíþ6ŠÇ½O2؊ꂤ£mÿî|íÑÒi˜óðÒ¶OwïÛŠØå4¼N›©šªl iÅ‚º p?±Îxq¼–1h׿bË›ñjbøcˆ[¹ãZÊù$ß9mqHÇ«yÒ É³¨.E ХܟÆcÁ'!9aŠ;î9ˆÍƒªÛÝk×!múh´è<€"L®GÎÙ¿!çècЯtã8-tÙx f£ˆŽNè^öþHõ¬Á0ú.,C»£^Q&›wk20•üü<æÍ›ÀÎ2ÔˆÀ+**…B I#Ѷ«× _@ׯ ãUœ«OóW¨yu®©[¸}îÿx‚·ÞêIE…eÞ]RÃÙJsÝ/Cmb@¹ˆ%µ@¹2æA¤@ ¼EZ¼Øöõx€¿ÅA·wïm‚€ÿGÄÜWã•·l†’J h·BLþ.”—!¶yZDŽ·CнC«bscŽ»’INÇkÿ4ĽÇÚ`™•ãmé ð :lrÖ¢ú&GáÉ!VGÄÀÊXu:çÝݹ¾G¡hï#mx”ûù ÒÿOFÀ{4bû¸ëüÝ·#m:ó(7¿Aü®;ÖïÑâöêôRŽ@yÚ}üÝÍçfwM›Vþ.ràFðšüî…¾#ò<‡Â£›Ò‚îñn¹åÚ¯í³g:YiÄ5’L"[¼bý¡Pˆ‹.ºˆ¼¼<6nÜȳÏ>K‹-j9ZrÖ蜄¡P¨J`|Mf +òÂ"BâUœ ƒTTTÔ)>VÑ#;§Õ눕àU›O<ñ4×^{zÛ#@ð×<6– Ú¶ƒ˜Øxà@`hÕã.AÑ=PW>^6aübJ–®mÈt¼¢øó(\ŒÇ²A ù0ñflFLÿßî=Aw¼>xý-¡Ä"*,ËÏœV!wœ¹HÏNGúlkä”û-g¸sÜŠª¾Ù\ÜèÞÚÎOD»‹ÛK‰çÄ´¨ sDZa¥t~}c†@³1ä—ñÂOB u†›o“aî@©ã'â9ð, ÅêžtÀsx†Ð‚B ÍQLÇ"ÿ½;ç7hÍÅk‹ÕÝ[Ü<.E»•ùè>/sç±ÂXàÝë°üülfÎüœ6mÚ¨¥"‘$žYSçDSΣj¾úê+V­ZÅâÅ‹yðÁk<Î’%K¸ï¾ûxúé§yíµ×ƒUŠõ›=öØcôèуáÇÇ8JÝíWÁ £ÍÏ`ã9S]´ßê„$S~täÈ?qüñÇ2hÐ0JK7!à‚”Ñö"ž<Ä–­›ô ÄúÚ!™âJ¤¡†‘3i>ë>¾cÍAúñ‘xãmÜ‹]€Âl5r´-F õˆ¥MCÀØÕxÂØ=À ²ªwþJ{eîß,äÌ4 ìîÆ}·ûü¾ñXX¡™?§±wqsÔ/iÇZPs¶ãå£Å¦—»¶<ä´{E¤ Dñܯ#øt_¬ljwîÅÈQxoƒäç¡]ŒU!ÌELø9äÃÑbõäàûƒûÿˆÍoFÝI*ݰ÷qŸ-q×~6Š<1 ãÕ¿‰¼†K.¹˜Æj±j8à&MšÄ§Ÿ~ÊþðÂá0W^y%mÚ´©S±þ¥K—2iÒ$.½ôÒ”¿Ñt}úúl“&Mj\9ëÓ—ÐÿÙú&¸tïÞ+¦Ó²e/¤W®C @áZ¼ Ï 0Ú 9¤Æ ý÷xQ? p<9m.BHú#€ð'¿Dn<¯kËRÄÈWºs¬CάÈQö¬;çŸÑ6þ6Ä$×#z/VÍñ*åEwf±ûÐ Z77Îÿ =|0Íw©º`X꺙•}kÈ ¨GQzz&Z„¬.3xòеš²øèExÍmïÆ÷^†åMh1º 1çR$qÌEÚõÍî=Æò³flzýp< §Zè>D²ÇHê9Io!Ð=ÉýíÄ’G¢ÅöU7ßV%±ûMnN ݵ­þ—Áƒ÷Þ%Á¹¾™„……… 8mÛ¶qñÅWÊ"™™™IëŸ9s&÷ß?cÆŒIis³F'q˜S ³ºYYYÕ*ÎÕfáp˜@ @~~~­ïu^Ó¯kêAËâÅnoÚ´‰óÏ¿€Ï>û1ªÎHclX¤m''¢È‹“hY’ÉßÑCirF>b]þsÍB@sÒ†ý@`Ûï·lÚ¢íz ì—¹1ÌDLq(Ò1?Á+Ìoå7—¹qotãÙŒ'Ýø:€WGÚ"SöB Ìß|×~µ› «i1×'„ØçÝùã®ñY€ÝÜy®C@:ß½fì9/>:¯»wG7ës‹Øôy7 ¹å17gÛ ZŒr1ºW/!Icw7_}ñ¢(žDlwUùÔV´¤!Çš6<çæf’;‚H>éèÞû únü¯¶ô´Ð,Æ“™™Ë#Üɹçž[gGZCJeeeI×Z¶Ÿþ™ùóçsÖY5uå‘Ýpà Wë_°`cÇŽå†n {÷îœp dggóÇ?þ‘ý÷ß¿Öã%c¿h€ƒ•šufffRÅ["‘¥¥¥uª'*ƒdWÕÚ’kB¡þóõ<ÿü xݼ‹Ð–|ÜK>ÙE:|…ZVÚÛwÔ0rè• M×þõHÛ‚èæÈ¹/^áùµˆ}¶B }¨û™’.º!@|À}þ·°û¢E¡/b¿ö ^K,k¸Z€ä#·k¸Ëý¿E2<íæ'ú|1r€ûÌd÷7«1q1’`òQüp ‡« XrVVVFNNM…šên©ÿéÓ§SRRÂqÇ—¢Q5Œ5:€N´«ŠlEEM›6Mš D"JJJêT´?“‘‘Q§[‰f?Ž?žk®¹Y³f¡‡²‰ûù bI~ÞŒê<¤!Û/åw bÍ]ˆ­AŒÖC¬!éeî=þy #ÙâsôŽäŒÅh;ÝiÛsQ”‰¥—oE ¼Ê)ÛÑ_àÉš„ÝX:"4Öx Úú›SfZˆüÑ.· ð>³/ÐBp²ûÿ6W|’ ~vã8 …žY—‹æ°Î2VcÙjº¸ÏuŸ;ÞgÒ˜·¹q·AD’>qóyŽ›ÛÑ"±/æ ÓNdž»Eî|ýÜ|´F2KJØÉB,üg<½¼-ò9˜óõQ$CmB ×&23›3lØF¾«Òhalu‰16ü® ÐãǧeË–rÈ!µ¿y'Z£Ó 1sÈeeeÕ¹ŠV²_H¿„$Üš«.‡4h&Œãþûäž{Æ ‡4mYoÁÓ^?A,ë2$ËÓž‹ôÇLĈ›£~O$…ˆµMGZ´'0îFW `X€‚&(Cˆ™·ÄK¿>Èýkõ™[»ãø£5L{/4® tÁixýÕ»ÇDß÷6ôÌšã-_  ¾Ý]“5F°,B“^,iƾeîý]Q¬so7–íHK~ ±ì‡S¿Å[_ŠœvË‘T³ÀÿïˆYˆvþŽ/å(:f!Z—!OsŸMG÷ú´PG¬s5ð'÷ž[ÑŽè@:ii­ùñǯèܹj1.½Œº9ÚÕ‹ѵk×Ú߸“íÐÑ…ûÃá0eeeµ0çôW×K4 0Y‹Nn9âˆaLºÂ,¤wÚ]ŠØRg䈲[ÝÍýíÆç൑2 £H‚b÷Y¨€˜W'"ö&ƒräÐj´Ï&t–!‡àgG Æ~(ªÁʈ–á…“Y2ŽeLšmuç ¹kiâÎgrÂbä¬ó[4@"&ê·æˆeŸƒôåÞˆ‰ÿ¯>I™;§…7Z O »[ƒ¢#6º¿¯sczÝ“ Ò·Oq×}¸;gsÔWº÷|ç®s Н>‹ª±ÉÙˆ¿çæñnª†7‚Øÿˆu_„"8¡Âû]Üù¬sË…D"{Ó§Ï‘¼üòœt’WK܈M]Š5† ½ÆÐM!@×T@?ºâ\}"1j3ÿ9£«ë5Äy£3ÛµëζmÝ+ü±5ç™<Ï¥z–UÈ™w Õë%ƒÅÑÕÃ4:#´;Ó'ݹ_EìñReñ_Äl‡¡­ú‹„{"†¹’ ¡¯¡-2´zæ¤Ësã™é~ï‚h4Å-H¾ñ[ô=h/Ž;ÿ&w,›‹#Ý1­aÁîÇĉßS5aÅ…æ£X€@z&Š ø7ç)ˆM߉îÉb¼æ¬³ÐBYŽvnW‚|Ð"ÖËÍg/w®Ð}¸9ýì·Ú ¼Ž"=îpǸ ù%þŒtz+°ÔØÈyçý•{îYÁÈ‘—ËjªÿìÏä3v½«ƒtQQµ•çÝùÖè:Ú¬€~NNN5Í·¡¶Y5ÓΛª/hth @³f…öAç~hûú=bF/! á¯xàa69‹þŒÀÕoaœo"€´l¾Óñ"@LøŸîÜ"–—‡€èsäxº 9®ˆ™>@ÄË–#ö¸}-¼Îd, ‚Ù³gзo_$‘ì‹z¼Ë‘î³Ea…%xìÚ,úëÝ/žz‘ûÜ>nfÜç¬ `¾ûîN:i(ÿùÏxµ,,.Ú²KÑâ×ëþȆÃÛPŒö?Ðb6éÍw#À~ -G!-û5ĺ/vóø¡›ót¼ÖY·"'àT]lM×Þ1îKÝuž¾/·£ûZŒö¥À#Œõ Á`ˆ«¯¾’D,^&Ÿ%y’§ü©×»Šô‘¬igY£h‘¡š’MR¹’ÇK e©8o¬î-Íšµ%²ç!fA (×#ñjª·Æz mÅot¯ÍÁ«W䎱 m‘¥z«¤Ÿñª½å!F˜ôÖ÷‹¾é› –·Ø7mß÷CáyQdƒ9Ëñz ª(Ò´i“iÛ¶­;wb½cOGL÷™K‘¶{;óÓû–n¬:Þmî®uï¿Ù÷ž5nl ÝûÛ¬åŸÿ|™ãŽÎøññœ˜éxEó-Ü®›ß-XE’Å%nnuËrÏrã¿ÙÍÁ{nwC÷s4bÉW¹ñm@a‹/"@Ï@»œA(þÙïÈí|4ðßáU|¯ô^(jåNn»ínZ·nÉyçG²æO¿¶îô&Xúµ½/Õ]V’5k-·«[£è@ t|q}¬¶´ðh«o¢¿]!hÕj7÷%!¶-ÚJÄFÀ}7^‚GbÃ"÷ºííè F:磈MíçMŒŸ`œ„´éQx‘­ ¬Fްî(9æEä8ì@»ó6ˆmZÑ­x !ZÔ¦L™@Ÿ>}¸îºë|ãØìÆÝ ¯¹Ù­[÷ ¤¤1Ã+ðj*zЮ¦z›£ bFÃPÆ], "p‚À¹9õf¸sü1Ò,¤;÷AÀÒ]µ­ˆ NF’Æi( ÄÊYÎD lÅ÷·#i†—’ÆÌ™ßÒ£Gžþe¼:ëÜx»#é·Yn^ÒÜøú íû$爂Xv´¼ÓESä#©äD”Ýb—ÿeÚ´i <˜O>ùSN9O?ýÌwÜt´è˜Ãn>éOݼ¾‰$†Öhñ¼ÈÍÑ_Ð>ˆ$—GPZÇxMÎF’Åpª&å -ùNwœNäÍl—’‹/‘ԑ䩽;¿ Ý«ë;1âRÖ¬ÙÈå—§6“°¦.+Ñ,»®a~‰Ž£1Ø®_o/ÊÒÒÒÈÊÊjð 6°Ü¾};ùùù ¾ TTTPRRP œ{öHq±U#» œßE€xÕÁ¹Á‰Äç0J戶öw£°°–÷¼BóãÕu¾9±>Gìõw(¤®9Ç¢Œ¹ˆõ6wc´”ôîÇŠ ¥±`ÁìJpŠ`‚X"œ»£´f³¥TïÙX‚W³Äßr©ZÕW<ÜÄ[šã1c9òÊÊìÒ×^{…óÎ;ÛÍ…%Ø”âÅ£¡«ZèÚ¢EiºWÿFsÎkÐôJië?ºëÿL3PVà5h3/™'Ã{-Ú嘥áI=' múZ7>ÐBr+r"Îvï?hÃ7ÞÁ“O>G²–,;5–Mnnn¥¤gÊÊÊ”——'œ¤–È9ƒ5:€Þ )..®,¢ß:™EƒØB-Ÿœzê¬\ia\xÀK%¾‚êzq1Úÿ1·h #F;é¦ß£ìÁ‘”@ÌvÂ{QtÆíˆÉMÀÛ–_ƒ^o!ÐÞà^? 1èýÑƒß T3w.«’§nÍš¥qúÝe!ƸÍý³ã,w›ä f IDAT\ÜkÑŸµ¹h+DZ»ßvG¡uû¡Å¤éZË«|.\DVVV%€<ýôSÜxã_ðÚ„Û-G 5·Ý†4÷Ùˆ¹ŽvsrJ‰o‰ä†©8‹ÑBqÒü¯B;š3Ñâ6À½ÿ2ä\¼Þ½w ’™®vÿ¾ãÚq×øg´CXëþÖÉwó°e{žÏ7ÞÁøñãã«áÌvNN¹¹¹äää‘‘QÉ´@€`0H8NÚ糫G™˜5J‰£¡Âx¢=ÑP«­?tÎ<Êþs½ÿþ|øá= é«"i‡8zlň‰]€6EHƒ9iO<ÆhA¬÷3†G"y-bƒ_¢ÅâFwÌû D qÚ®OA ? *Åc®þ&¶a6lXKZZZ¥îž‘‘Q¹›Ðy3ñÊ¢æ»ÿ_ƒŽ3ÜD/R%TbÁe-’DÌÞÇ‹¶0ÛŽ—4S€f²´´4n¾ùfúöí˹ç^äÞ·Á·bÞ?"½÷+$ù¼èÆ;ݽw7tO>A@Ü9ü^ANÅÛÜœ=vK½Ð.Åbš-E½-²/£PÍ{^:¹ßz!†~'Ò軸k¼|)k¥µŸpÂïY·nAR=B’0¹ ;;;n˜Ÿ_iìÖ(:ÕfNÀ`0XÍñØ …ÎÕtmÿâsúég#Æcå {£‡y=zø^E[{kØZ†¤…ä” a¡b¤¡< =Ò¯/¡6ÔSÐ"`NªLw¼Ðvü(Á«wÒKûã5 £}ÓŸC¤¥eP\\5q$ QVVÆÄ‰£fmä4³è¦h›ÿ0^­ÿN'@ìþ{­ñôlc«½ñ$ ³iî˜ë€ùCñ<;å”S˜1cú÷?/ãp™_S$Íìä ß I*1þéH~:-6½ÑünE,9íJ¬¦ZOé=¿C wºÿ‡áIYÅȉû2ÚµÀÓÈ[»› íúä£XœÍÝÜç?Ez÷ÉÀFzöÀÊ•scÎÁŽ6¿2^Á~séXa~‰îŠãë¸êª«(//gýúõ<õÔSIÕËNÔ~ñ][W¿0º»IC¬À:W[4Hß¾‘Öú<àxí‰<– °]€o^C^Áy¿mE z#b±Ó‘$Q†¤„¿â%ˆ|sm¿ËÝgW#f¶õaHg}-£­ø·ˆ%®ÆKã.Âì¶[gæÌ™UedV0//wÞyÇ]C¡ûÌáH29Ñ÷‰&(ü/hŽB‘,æ´‹U ¢¯ç qr”=Œ&·k¶›_õâ ‡Ã1ì^½z±yó*Z´èˆWƳÜ}¶3bËMQ³iîs‘Ìð)Š¿Ý¿ëÝÞ‡µgÜYÎE€|ˆ»Þñh1î‰vO¼{Ý-ì{¡ûy5ŠÚÙâ®±ØÍOĽïïî=&‡‘œ•ëæôMáúëoæþû­ßaÍÖPìµ&ÂTS/Cs@Nœ8‘qãÆQTTÄš5khß¾}Üã-Y²„­[·òÌ3ÏðÚk¯1vìØ*Åúyäzè!¦OŸÎСCSp…Q×ÔØŠ%Ar]UJKKÉÍÍ­ö`%ÒÝ$^g”D,ºè‘_>ÉÍÍû.++ãî»ïãþûïEΡAî•¢‡ÿ̘Ÿ“Ôp4ÆxAÛãèáßæ~†WÁ® Õ¥˜ŽðÜóî;Ô}æUºg ½³)ã)x} [!f^Œ@I^x=öh•¹±.6×}úìÃÒ¥E¨B[W”aw)’u÷]Ó”b}4Zf  ÊD`{$œµˆ}š£ólw]vß?t¿‹fg#&ü/Ä"Ç0qâD ¨i~¡E‹”—W¸ó¸c®p¿oBzïä˜{ ÝßÁ辊îï h'sÚ9¬EÙ%H*銉÷ ûòÚôpó°‡ïºV¡ÐcT—:Ì–#ñƒTýÜ‚¤µ(Y3€®I>‰e‹/¦w–[ŒðSÄ–/¦:#i¿]PÝ…h‹ @˜á~ŠqU‹ñoD·±ª£ÝßG»cìÀnÚ¦ÿΗh+</j¢b¦;nIAÞyç-Ž>ÚŽí±æè(™æÍÛSQQ„åTwí7!fÞæïEÄüáÙÄ.W¡-{’z ý<H¿ýŒú¤Iß€ØæÝHf¸Ÿ‘#Grß}÷U›áh:Ôb¥³Ð ÉÝQÞP$U F‹Üwh‡ò©»ÖËÜXB~€‹Ñb¹ 1ê¥n>Gá5`9"ßq×Ý-d‘Cø7oñì'Fù8¸£ù…À5ÀlÚ´ òS±XkC–­/@ƒvÍO>ùd°eV¬ÿÙgŸ­±ÝÕo¼Á¦M›øÓŸþTç1ųF)qÔµ½z²ÝMêëŒ …B˜òI<ë×ï žG!]ò_h+þbƒ³µà1p¢ô'ÄK8tE üvßq,½û ʆ!9Œ4ØÏѶø.´@Ü€c$bôy(yåßHæøâJLÝq¥·oذ¦RÃó³æX5³+*Ì¡¸;ÛåH.°(†Üëkñ³Öˆ÷¥j‡Üx¢Ãì@ ÜZøöàZà&  ³gÏŽñ¹êöÉ'ïñÞ{ïqÖY#Ðüà9["@ÞïR$ÓÜçÆz/^âÈîü GõB˜!$ÑÜŽ¦SÝøýÕï¬c¥§/B,ú4¤Gïû¸×nA‹ˆM_ãæãP´Àˆóê«/Vê½VDɬ>Í–k³H$R飯ââbš5kVëûºuëFaa!—_~ye±þ™3g2vìX®¹æn½õV"‘k×®eôèÑõS4GC²l ‰°mÛ6222ªRªÉæÍ›GÿþÇ¡íd:×»ûkƒ@¶Æ €ï£‡²/l­EP ÄKž¸1Áö>CÞéÖÖ£ð;Ì]Ñû ;gÐ}þÄ–OD‹À2,ã“´Ëõh!²Ûn™3gfåuÆcÍ~kÒ¤-(Ï"ÀÚ iÁ¿AàT€ä€›Q´C4È¿ˆv ±$‰¿¢ßÂH‡½ä>DšûÀ  hÏĉbŽ7–ƒA Û¡ùÈÇkC¶Ý›ŸÐ<¾†æv)bÐW ¶ü-Nv­»¡£7Ñ¢‹Ït¿Vºcìé~ˆ9›®ú?ˆ´à_ÿú§vZ•k-//'--­²Mœ?ª"še×µG*BøK%;h¤ :‘®*欨¨¨L0HÖŒ $òYè\^^@ šö]Û¹š65Vx8Š]$‡XfátÑÛ{¿mE >Ø@Ìh%HCþ±¤ãÑCÿ9ÝÃÑÃþ‚s‘þ¼É!"@û9©* “™™ÅÊ• +¥‰°f¿5iÒ±å¦h²öP‡Ñbó=bØÑu‘ŸB2ÑT7§•E(›òlÄ^Å«÷ñ<Ú]< ô¦U«å,[V{¨™ùÒÒÒ*¢o¾ù†!CŽCs_ˆtq«imÝÃFÒÑ…hwôú> FÚð"Ęû#F}“›3н²ïÚj´x-C‹Áh‘ÍF²È¹x¥KcÙÔëñßßÊQ‚Ë#À´jfÙ²ooáÍÊʪñûîlûÝ,Q–mç©HO:•p8\Ų«Ú/’A[G•¼¼¼Ê0›ºX¢´ÿ|Ñq™‰ÚÓO?'{ èëâ¼»éÒѯ[h×h»l¥)-^Ùlr®CòÄ(SÜyû"&÷b\ýãû_äø*@ ÄF¤«Fè¨ÓÉ'Ïßÿ®áòòòÊE2¹þŒ!ÄÎg"6½…ýYG:¯ÉL  ²ùRµ ’ßrÜØ-ùF´õ߀"Uº¹×ÎB ”’dÂam±-®6–Y nNNN•÷tÐAm S§žlÛ¶ÍWâFËÜu½‰$–÷ÐBy—ÇHÎhŽôèWÐÎê´›š…|!Ÿ@¼ïÆjt¯^E BGÄÀ!þŽ«=ZÈ_@r Üÿ€7ظQ» #1‰,¼ñÂà’aÙ©ÈKضm;v¬÷qv„ý¢:Vw“P(Tç›Z@›ÓÑ>ÿg“±Ñ£Ÿ@,®+œ^¤béß/"æ¼9Ïæ¢èŒzÄ ÇûWàoÐÃf¥)+¦<9äþ‚êÇûúJDi‹@Ę{S¤UnG[cÕØX²d^eÀ¾sFFF僜xÕ²t7ÎbÄf" Œ÷µ]Œ¢KÎG;Û(ì> Ð+Ñ´±æSÐfÖ¥´ÏAóÞË}f%ДH¤‚ôôôj™kv=V-^/ÊôôtV¯^Ì믿΅ŽDÀÿ ^—ƒQÈ\{÷ûnŒý‘ŒÑ 9G­õÕb´ˆ˜$õ>ŠNiîoÖv#(GáÙx º!Y£;úîØ"zš;î9n—#‰mrd>ÃܹséÑ£G½úÆm‹[6MÛÿÞp8\o‰£¸¸øÿ$ކ4ÛBúÿ¯»‰1šº4p×Ù;ºõT¬m]2!zz¨;à9»îE·9xMUÁKr(EYˆ°}©^¡ ôÐ>Š×¥¤ÚÂ["ÅWˆ%ïŽd„­ ÊP¼ñ|$ A ÖºbO@þrwÜ#G^Â}÷Éñ+®¹rDîá³ú ñj7iÒò6wM LÅÛ |ìæçXßV!Éæ¿dsñ*εB» ´¢e‘"¤µ– ]E ´k˜´§uë –.­*q˜óÙœW؉¤÷ì¹7kÖXŸÅ6nNhý±é¯Ý<_Î Mþ\²н<Ý›4ßû–º9FÕbRSТ|5rê~çα /Â'¯ls4÷Ç k"ЇÛnkÎõ×__ã5¦Âü‚Á`•gª.ZöË/¿ÌÉ'ŸÜ(Xt£gÐþz ÑÝ$ú³V4;;»V§cmçõׯõÒ g!Fs"U³æÌÞ@üýb¼bÄ ¨¬EÙň‚@èþû"§R Ú^[Áþ TB´r`ý9™ 6‹Ø[ˆÂÂ|–.]V ÄÖM#Þ–7úŠUOA ^&bkǹ±\Žôäé(^ø7Þý©jÝÏ ”è]å”ܱ¯V‰Y37_¿Gà Ò}÷æÓ¬YõEЛüüüÊïZ¼Tãè…|áÂY|ûí·~ø0´mF‹Ê;x=›¡]ÌãÈQû?(¬ñww£ÝÂãhguÒœG¹³L@º9{ƒ@Ûìë~bYr,>õ·—n4i«¸UêÍ¿¶gÎä[ ýï­MËnLNÂF Љv7©@ûi,='Tá®6ödÀl,²K—¶,_þbÇ5J_õz=س‘ìÉCP$Àhô /DrÇ6³|’û},bZÇ"0|ÛýýtÄž?@ôdwÜ"¬ØÑW_}Æ AJñ³æd¶¼Ñõ—„q×Ò-Æv.C!ƒùHGnçÈ–ÍËš"¶Ø-êï÷»k³Åo6Z˜Ú³hÙÒ{ÛEE_¯]ÿš Ä£;Šddd°ß~ûQR²ž?ÿù*þþ÷×ñvIÿv׸ í¬òñjn¯F@ý-Z„†#9$Œ›W¡‚uÇ9Ô½öÚlEzû$÷¾x­Ÿ2Юë[ßœd Ûûœ}ö7*דêìA›çŒŒŒ*ók¡OTËÞ¾}{vÔ;Ã-@[ w"Eõu,$šyè·x!z~Öì/D~è¡òÚk“QÜ©¿ØŽÿ _†€k6êx5'vG;üÛö"÷ùû¸ž€Ô¬-ˆA­DÀ|ÊlûErlt¯€ÀßÒ§ç Ð¹û+Cçl~jbÍÉš˜¦ÅtoBòÊx7¶L$q<Œ@¦>mVŽœo½ñ:wg"û'daúôQÞdcv=±š­úYöC=ÀC=@ÿþ°téFtŸ;àI<›Ñý¾æ3HÖø#ª¥ñ'µ2}¾DNÆ\t£]‡%4]v#cѽm¾C}Ð‚Ô ñᨒÞ@´c¾7[+K¯ÆÛ5ÔäLMÄ,D6ÚáËâiÙ±Xv0l4•î%@§¥¥Ñ¬Y³„€·>7ÂnlM}k²èñùWöècåç7E¬÷Гäañ®à5)‡¶û¦'û-€"¦ é¢;ä ‘Îø zèG ëK¤åvÇ|É!=Ü1òTRÎM7]ǨQ£*ÏTWÖœˆ¥§G‡›!=¹'ÚªCÛò\ä,‰+Õé· âGqâU§›EÎD[ý1h·a ?íÝ28ì°Ã(++#--­ÞŽ1?Ëöô™>}2@€½öÚ—¢¢ŸÜumB}bÈùÈ‘üÚñü…ßýIAÝߎ@÷þ#m ÷F‹”9qÇŸ„¾[ÑwÇÚz• ©£ úžœŒ¥¼¼¼RÚ‰µkðËVɲl[ôkª[S›ÅbÙË—/§U«V ¥“¨²Z×fÑ…‹j3B ¡´ÐhóÇPû·_ñ˜À?þÈàÁ—oC!n±l! w;+êï(ÏD̳bJùè{ÄýÛræÙèaî€9Ëýþ ^¢Ç6î¹çn®¼òŠ*gL5k޶=ú²v­±ý¤5ÿŒ¶øf·¡‚B/ ýPÿ9[cmÒ±·¡8ä¾Ï}‚ä€qHÇÍE¡eEü÷¿c9è ƒvH£Óp8Ìúõë0àP¶mÛˆ®¯ bµCQÄF7tÍ/"v}Ðÿ"¿A+ê}Ð<,ÄëÈ^Œ|ƒˆ/q˜]Œ’ð8ÙÙÙ¼yqR×ã΀Ø,Ûž½ºÖÀ©éüßÿ=eee 2¤Ñt£dÐ iÑ¡z^áøäÌ´o?k®éÁîׯçž{/½ô*rLu§:¸´CÛúÅHâXˆØN:bEã1êU(6v5^A(¹dr|âþÿ€Mî˜@:÷Þ{'W\1²Ê—¹!Y³ßŽ8â ^ý$áôElðR¸—{WÚ–ß…XîhÑ -TëH…Üï³ÐîcûÛõTç&‹>1èÐÜNa¿ýöÛa]¨ÓÓÓiÙ²%‹Ϥ¼¼œ8ŒåË—¹ë‹ä^(¬no´ˆ¼€ªÃ‘´Ú]ËF¶wœ{ßDļg#ž‰®{?$ó´ÇÛ}”áÅKoG,{2üzÒ×ãïCÕY6P™Ì”ÊfÐ¥¥¥Lž<™=÷Ü“=öˆ•¸´ëZ£eÐÖê&K„AûCçü¡zɲo3úd² Ú¶íBI‰õìKG d]šCˆù솊íôÇc~Vµn Ù\+Ýúçî³]@¯Aaz€ó€l23|þùÇ 4ˆŠŠŠ*Œ¨¬MÒÐ@õÉ'Ÿpê©»ëÌEÍVTTèž"MÖotýÏ"ð ²r¨{¸ÿ¿*ÈEÛ»x-½@ÙzC1””l‰ñþÔ›ß1Í"¯¼òjÆŒù'ºž º¿{£p¼h7ðÚi @å–h‡ôZô7¡ëóGa,Búòψä y*wÿ·náºvÍæ§Ÿ¢*ÔÏ‚Á ¡PˆÌÌÌ*Îsœy]lÕªU̘1ƒ¡C‡Öé9ÞÙöMÕP½èl·º´må‰÷¶ùóç³ï¾¿EΟ1Þñ1z0O@ÛÿEˆ=nF’ÆÁÈ3¿1¥ùć!=¯øÒOôr9ꨃxûíÅ›9k,¹$:I#•lǬ¼¼œ-Ú#€^ƒäŠ\´3x%§L¢ªäá·[Qq X¶ ±íè’£Q¤C…¯}@- , ¤$º—aêÍ Ëggg×ø=Ùºu+‡:„E‹V …¼#ú¾ÌA,ûä$‹€ö0t=›ÐÂ> nO$‹ôA‹´ßÂÈ!{’‚¾góæŸ“Ì ­Ùâå øµùX‰Aµ…¸Îœ9“Í›73tèжóIµýª:º~F¬^\\œp‘¥èйè×¢iÿüs.ºè:Ö­[€æ)-2„­Nw9^ÝðÐwh:òG,Á+<Õ}Ÿ¢Å±3°‚ôôM,_þ………õ¼RY2QþÏDŸh–]VVÆ”)SèСýû÷OÉXw–5Z º.þÏ$Úz*Q`Ž:}œÚ<ÝöEÛÿýÙ²e 7ÜpO=õŠSî‹´ÕÃÓù9» K*FÛÒ(îõÄþ‚XóOXÈÀýyñÅ·éÑ#;÷,­ÙÙ˜éíæÀMt×mT^¨ÜÑ(~w ÒGwCàüž»®s>¶,Çä(|ÔóFd™h§²;bšÛÙo¿>UšÚ¦r×h±¡x6dÈ/žÀ¢E‹¸úê«ùüóïˆD²ð  Ñ‚=É^× }gNFÌ;…¾í>³•fÍ*xï½—Øÿ褠º[]£4bEfX´Õ·ß~˺uëX¿~=½zõ¢gÏž5©qX£eÐÉtU)))© J´õ”Y¼–YfÆŒ¡þ}ØüŒÔ@?==·Þz‹Q£îbãÆm@"ˆ!ѵ°éÕ¥@¹¹Ùüö·ñ·¿ý}öÙ'ÎY«[ª"4’Ù5€—–oºý 'œÄ_LD:ê¾(’à&w/ `YޤŽcP˜¢™¿b],»EAX_Â=}¯Ý†ØæÝîE¬Z5‚‚‚j»†ú&i4t4Ì´iÓ¸þú›™:u.úžX‰ÒæîßLDJñ¾CEváä“ËwÞR%A'VŸNEñ,‰0oÞ<–-[F¯^½˜2e S§NåÖ[o¥S§N);ÏŽ¶F ÐÉí/--%''§²fB2Eûí³ÑïfÍ©4§¿µ¼Ÿ‘fdd Y´h6l S§NtéÒ¥^m€ æ©2¿6#2Àó÷²[°`ýûŠÀä^q²e>Ž¢z!pyI-Kü ­ßV£H™H{?ª} A1¿·¡jpŨ¦Å&JJVļžd!ÿçâ9Ú‚Á ëׯgùòåÌ›7´´4öÝw_öÞ{o ºt•ªLA“4’uœ×fÁ`iӦѴiS:(ºƒNã¶_@—””‡ÉÎÎNº™e¬HŒšNêcµ=´uƒD¬¡™\< …B•µ“íÇMš´Eì¶’:ž@_×%xbÌ"îï³Qœs¼BIþl¹ýPªt´ÑXsô@Ú´YÆ’%?%|M±!¿c+^IÒ†¶º. ©øÞ%›}™¨mÞ¼™©S§rÐAѡΩ ²#­ÑjЉ˜Õϰªsuñ<ûky$’pRWK “ѱe(;*®9–™VíwÐF§ gg§Q^žÂBÙƒO hŽè.Êi(~¼;Òào©áìÑs¼ öQ(ºå3wü¼øâß“º®èù7Fêwl×·è|²VŸE!™ï]¬è “4RùýŠD",Z´ˆ 0|øð¾ ÙQÖ8cO¨¹†B!Š‹‹+§®ƒ?áÄXQ*Á9¨‰i]Æ™‘‘Avvve]‹# ʚ̱².ƒÁ`åCÛP’F,³ñ¥§§W[ rrrÈÍÍåþg4ŠÍ=¥©GHW  Þç,µÍ£ÿž˜óÙ¨Ú[’Sú9üðë< óW²³ª‹Ö"ÊîS2QIÉZyyy%IIÕw7Ö÷βeee”——WÖKO%€VTT0mÚ46nÜÈÉ'Ÿü‹gø2hèœÕÏH&-<–…B¡¸Ñõ±†bEVÛñ‡%…B¡:·«%{Í#FŒ`äÈkQ4E ”HrŠå>…ËY–œÿë\›ü•ŽbÇ_Aìùä4³r­C€O4(~b¢ëšëÃH5ކ^€£3-ñÄü%þf¯õÑŸ‹‹‹™â-ãiժ˖ÍLz¼P?Í7–%㨳ç"•Ù~‰X²Q‰^S8fÆŒsÌ1Ç$ü*--墋.¢yóæ´hÑ‚{ïÕ÷eÅŠÜu×]„Ãa222\?Ð]Ó5@—••ÕÚz o{U—йD{G„°Å³de…ú.Bf© %»âŠ«xþù÷PìóÙ(ùPÔñ%ÞÒÀסĞB÷c6¯ŽGÒ³÷DE’n6²xñ,Ú¶mK²f‹pNN¬~’©³èûd"ÙÙÙ;ü;–ª( ÿ5MŸ>ÒÒRJJJèÑ£x`RÇzá…ÈÏÏçŒ3ÎàÒK/eÔ¨Qì¶ÛnUÞsÊ)§ðꫯ’ŸÝþl×°Fë$ŒD"”””¸P¬&5‚G"]UüÝ’ù‚Õæ¤+++«tÖí,gœÕ/Nôº¹¦Úšñ†B¡J6• 'Îã?‚*«ÍAL¹’$îDä£-ŒØso”žœ¤ŒoP5¼ã‘#ò ` î“48Ûedd488CÕû”‘‘A8&++‹ŠŠŠ*÷©¡œfeee„Ãáz9ãÍü×Ô£GÊçç•W^áÜsÏeÉ’% kÅŠtî¬^Œ]»veùò啯?žßýîwì²à XƒNOOO¸FÄ朗ê„¿“Θ»¿F@C¶ò[*ÑŽÇèP8=sÊÖ·¨},{÷Ý9ñÄKQ„EÕ?^¤‰V¨Ÿ9Žjâ!ë|3*2tzžÆâ¦ÿû߃ K=;+Žâk¾ñú=ÆêXk¨Ä“H$ÂO?ýÄÚµk9í´ÓHOOgĈI§K—.,]º”C9„¥K—V‚5Àá‡Îá‡Οþô'æÌ™CïÞ½S6þTZ£•8 ñ¢ýƶ£ &5T PéTŒfRѺ[*J*úmgH)¶ÀH™7¿!G1Œ©S·"Ö|ªê—†œzo àm‡ *¢=Ê‘ö¼ÕƒÞàþ *&@̹-0×_ŒN8!!©ggfÖ ízê[ડOÊËË™2e mÚ´aàÀõ:Vii)_|1………4mÚ”ž={Ò¥KZ·nÍ+¯¼B("ðì³ÏîpI(QûU4T­h× 'Ñõ$j³T:évgŽ©T騱¬°°#Á`&*‘Y„§ú»4¯FèbuITªtw¼" «QO¿#€Ï8眣xî¹'cž7:Úþ–êó‰Xªîut§“DC]«îÕf7ndÚ´ivØa´nÝ:¥Çn¬ö«è†LÓ¶­}}¿¸É‚ÛÎt@&º ¥²¾C  U«. @Ìyªym»¤»„ÏB2I•1}š{òõ×'4†òòòÊ(€T˜¯Íš±×Tƒ9--­Á$Ÿþ™%K–0|øð]–Íî kÔlMè¼¼¼˜¡sõ5Ûî5TÌi¬ºËVÕog°æúD+Ä’zìH$ÂìÙ³9ðÀß"Yâ Té+TËØŠ%݈*´Eƒq9r2~‹’T®D q_gàÀ½ùúëkwM¥Ak·TÚΪáa×\QQQyRåG±2¡ÙÙÙzè¡)ñ/Ç~m%F!µ1¾ÆfÒÓÓwh̩տµöñvM íxôŸ?ÕL*јXF(bÏ=`ݺõˆAŸæÞ5ÅCà¥|§!Gb?žw/ŠâXÁÈ‘#¹ï¾èÊwÕ­.ºk,Í·.‚;*t/–EK©ò£lݺ•)S¦0hÐ ºtéÒPÃoÔÖ¨º¶šÐ±NR¥64k®É¢õÇú°ÑdmG&ÚDß+ËìŒÈûï„Ûo¿ÉP·/Pg»7!ä8œ…Âô6’LJ¾RcGH­¬«#HM÷jG¦kÇk"ê²sX¼x1óæÍãøãOxщ—xòã?òè£VdzüñÇ“¼Ò]×~‘Lè\<ù Þkg{íÑš¢,éÎÔ¹±ÛycE lß¾+®¸×_É™(AÅßU$”‘“SÈÿx2>8ºÖs7´¬PÓ½²ÒÎ ©ÈþŒö9,_¾œvíÚ1þ|ÊËË9òÈ#“:v"‰'§žz*/½ôR£lË~qj|²Nâ²z±ôÞ]5×dÑå!ýmê)²3£CŒ±û“ ¢ï•Åš?õÔƒ<ûìÃüüóÏüíow³dÉ–/_C^^.;¶åœs†ñ»ßý.á9Ô†²x¥<ËÊÊ*;êøë¥ì3I£>qì±bçKJJøðÃ?~ù„=÷ÜóÎÐÈÚ©J8‰Ø/iÛÑšz¦ÚRQXÉ¿6K¤ŽôάcÕŸ®¢¢‚=zðâ‹c€ºívönÁ4v»õ-2”̹ëÓ±&[µj+W®äŒ3Î`Ĉ”””ðÃ?$u_jJ|‡Ëc¿4ûEt´mß¾3f°zõjrrrªv<Ø™ñ½@åò³ôÞT0×èëª °Š=&b‰.ˆ ÑÐ`g†j‚WÈ+###¥:v0dêÔ©4oÞ<éÚÍÿg±í ÐÑVVVÆÌ™3Y¶lYeãöíÛÓ¡CÖ­[G0¤k×®;$¬yª¿-W*Óƒk:wªj‡Ä³xºôôt‚ÁàNé,õwˆÕ'Ùig¥kCí’FM÷«¶yÚ´iÓ¦Mãàƒ¦}ûö 2þ_£ý*:Ú‚Á Ó§Oçý÷ß§sçÎôêÕ‹¶mÛÒ±cÇ”Ot ñ¶·É&Ï$k;³¦ƒ?E=33³N¥.ëj¶(¥Ú˜h!¨™®]—E)‘ëŠD",\¸… 2|øð¤æ5^f` à²Ë.cܸq,Z´(É+ýeÙ¯ .»ì2Î;ï<>ø`B¡sæÌaáÂ…dff’——GëÖ­éܹsÊ».ÛÛTV‚Û™zoô¢”lÚs}lG.J±ôyëvÒØ"Dü濮ŋ3wî\²³³‰D"œ~úéIß³Ú2‡ ÆG}T¯17vkÔ‰*õ±§žzªò÷ÌÌLöÙgöÙg@óüùó™0aêÈܪU+:wîL~~~Á£®N¡XÉ3æÐLØ’­SJó/Jþ„—x‰&±:µÔTwDF ßüÙv=YYY•’¤¾1o,Ku”†ÿº:uêÄòåË©¨¨`Μ9œwÞyœrÊ)œvÚiµÈYm™ÿg¿b€®É222èÝ»weœp8ÌÂ… ùæ›oÈÍÍ¥eË–tîÜ™¦M›&T3@ÕÕ Øü©ÜÑÀæìXéÒ;Ê’ Ÿ‹•¢ñ˜ °íÌÈðºkÇZÉä¬5dÂͲeËøé§Ÿ8î¸ãêõ}®)3ðÿLö«•8êcáp˜%K–ðÓO?U2³‚‚:uêDAAA}ngÔkö›%ñ4T ªš¬!ä”Dt;3#°.)Ó©”±laHµŒ‡™1c¥¥¥õÿÛ;Û˜¦î(Œ?¼I{‹”EÚ¢¼H¢nÃÍ-cSâpÓ Xdj2È’eY³1—%$në&ʆY&º}ØKâœ2" KøB²,cB¦À ¶…ñZ”—aQ¤´¥íÝvï RèËmoÿ/1ÑnÏÅôôÏ9Ïyξ}nÿ\íMfdd //ÕÕÕP(8uê¤R)Gw±² šhšÆàà 4 Ìf3«ÄîÝ»áõ˜leƒ8—Š-…7ås‹%6fÓ uv®>\ òäàÉÌÌ ššš°yóflݺ•ÓkìC4ÇÐ4Ë—/£¡¡¯¾ú*   ¹\Žððpžè¶qV³ì(ÞÔ“/„q œçÍâ­É@O6`— bJIžøadd*• û÷ïÇúõë9½6aiH šcŒF#D"ÊÊÊæ•:t:Ôj5¦§§AQ;žÉÙ)Ö™&¤+îvKÁ§0¿¸Ðåp©ú<xã7{¶¤Ì‰ûÁÄU 4M£½½ccc8|ø0™ är‚暦111µZ@(B$A.—C"‘8ýFðD3Ì-6Ÿþ!ÎÞ;×Np¾pïLIc©Ý•®È1[ZZ…;vx"|‚¬úýÉ'Ÿ`rrSSS¸xñ⼎z^^L&t:Š‹‹!‘Hx‹srrjµ … ( 2™ 6lXòDä­f˜=óÆLž}/÷îê(7ßãÚŽ”4\Õ™áúõëHMMuªboðÄjµâÝwßee‡.\pîf(•J¼õÖ[ضmrrrðã?®*c~{|þùçâÿ]õ« ­V‹?þøçÏŸ‡Éd‚F£ÁSO=Å>Ÿžž…BÁê9y‹U  ..Û¶mCbb"ÂÃÃÑÓÓFƒááaܽ{@QüýýñðáCèõzyåôƼ¹™“*ãgë‘Í|7N’ŒŸ„»÷n«µ¶=…3 paÙ‡yÎh4"88˜×rÎr÷¾ðÿ, €U1 æ·æ:ÝÝÝèììDVVD"‘SqUTT )) J¥¿üò ¶oß±XŒ†† œ9sííí i±±±N];)) _}õ6n܈¡¡!8pÀ©ï_©¬št?Ž;6ï±””v[p\\êêêæ=?22‚üü|ttt 77×k±:Âúõë±{÷nößz½*• íí혚š‚ÅbÁ3Ï<ãô›ˆ ˜fEQìcÞ¨õÿ×{=9¸°”c»Ñ„IÖ|4AÝ-eÙ[…vïÞ=Ô××Ãb±`xxiiilâv{ƒ'ƒƒƒ¬Æ9..wîÜqúÚŒ3åÉ“']:¯TVMÕ?>>¿þúë¼?o¼ñ̦®v—J¥¸téòòòP^^ÎGØCQvî܉ÚÚZèt:dggÃh4¢®®õõõhnn†V«e5°žÀb±`ffAAA(˜7pp0û¼Éd‚Á`€Ñh„ÙlvéÏ`2™0;; @àÕ†•íPPPP›,¹º·åðÄ©Ýö„Š—_~iiihllĹs眾3x`Þà‰í㋽%''‘‘‘kÊŒiÕ× •J%>|ˆû÷ïã‡~@OOªªªpüøq€¦iŒŽŽ¢¨¨ñññ|‡»,ccc‹.=eJ8·oßf“¤­”»¸kôãNsŽï‰Àå¦!=½ÌÀ“&Kýýýèêê‚B¡p[hoð$==ï¼óŒF£K'àææfœ={_ý5ÜŠs%±êôZÅl6ãæÍ›èïïgO}®8öyJ>çhsŽÏ‰@Àµ©<®”"žü`²Z­hmm…ÅbÁž={xùÙ–‡$h7°§1›Í8zô(„B!ÆÇÇQZZÊûÚ‹Å‚ÎÎNtww³[º% ärù#ÚaoKÈÏØNò-as÷ZÎ*E<9x2==¦¦&<þøãؼy3§×&p IÐ.¢ÕjqöìY”””àÊ•+˜Å›o¾ùÈ×}÷ÝwHHH@ff&QÚÇjµ¢«« ]]]ð÷÷Gpp0ëØÌuóŸ|òI^$dL#000Mn€wÞ9µ;²ÌÀ% Æ’ ##c^“—à›¬‡'qE!Ì5J®^½ês `.!lݺ•õU°Z­èïïGee%ôz=ž~úiôôô@&“!44Ôk'XF)±XÆVMÁÜ× ›Q¨pQ·_ŠÅ”"f³™Ý°Ã¬£reÈd1hšf£Ž9BJ+’ €QˆØ¢ÕjY!þbiFƒsçÎáâÅ‹¼˜ö8‹¿¿?®]»†™™|ôÑGð÷÷ÇíÛ·Ù:¥­c_XXçopÛz«½“ãb¾Ø¶ ÛæŸûÿË B¡þþþì½1êwîÍ`0 ¹¹7nÄ®]»}ÅÅŨ©©F£Á|€ÔÔTŽîˆ´OœZJKKWUÝïäÉ“8zô(âââÌ L¨T*ܽ{E±e®k®–Ýè©×wôÚׯ_G@@^|ñEN¯Mà’ }{ æÔrùòeÄÆÆ®ªSËÌÌ Ôj5†‡‡!  !•JíV‘K/ gxâõòàÁ477cÇŽØ´iç×'ð IПÅh4¢­­ wîÜañFGGC*•:”ì<¹D•a©-&Ì=xÊäi``8pà€Çkü@ô“/¼Áìì,ÚÛÛ¡Õj±nÝ:…BH$’E  ø2Y²0a¼D³|.w ªT* ìÝ»—L®bH‚^C”••¢(dgg#77'NœÀ¦M›P__––|üñÇ8sæ RRRVD-Ól6£££½½½¬TDD´Z-’’’ “Éx‰Ë¶¤ÁµéÌÌ ššš˜˜ˆ-[¶x z‚/ATkOn¼àƒÀÀ@$%%!)) pëÖ-œ>}iiièìì„V«e  (ŠòøIs1•ÆRZlgöðð0ÚÚÚ°ÿ~—÷ñ­$FIÐk f³Å®]»ÙxqõêUs ’””>Ãt™ššœ?ži¶Z­èííESS€¹½ááሉ‰AHH§ ›IºË­âZ.aJûhšF{{;ÆÇÇqèÐ!·¦íéëQVV`ÎñÏ?ÿô9Ƶ)q¬!<¹ñb%`µZ¡ÕjqëÖ-vP$,, r¹b±Øå„Í¥JÃÖ;úæÍ›MÓ‹ÅP(ÇhO_ïïï'NàÚµk¨««C~~þ¼¯€R©DyyùŠ0ùZíMX³Ð4Íú#›ÍfˆÅbÄÄÄ8äØçéU\cccøë¯¿@QZ[[ÑÑÑììldee¹t½åôõŒcII‰Ë%·Mà{ ƒÁ€cÇŽ¡¾¾}}}aeAš„N°§YÉøùù!** ¯¼ò `bb~ø!¶oßŽØØX466B$A.—C"‘¸}’žœœDKK ’““y“| ’  œ`O!²š¨­­…R©œ§?žœœ„Z­†J¥‚P(EQÉdذaƒS¥‰¾¾>tww#33“oj‚oBJN°§ÉÈÈ@^^ª««¡P(pêÔ)H¥R¾ÃõSSSP«ÕÐét … …lÂ^¬‘h±XpãÆ X,ìÙ³‡LæA4aE`¯ ÙÖÖ†o¿ý–õwþþûïyŽt>z½*• ÿüó›°(“É„¦¦&<ñÄHHHà;T‚B4aE°\Ž9‚òòrŸ–ˆ ´µµahhxýõ×AQßa|Rƒ&¬–kBþöÛoزe‹O'g`nš199™“k-µ-//&“ :ÅÅÅH$œ¼&Á»øÖÞ$‚OS[[‹‚‚hµZäää°£ÉÞ€iBx¤ YYY‰ÆÆF¶ì±°ÛÎÌÌDUUÕ¼ç¿ùæã…^@kk+OQÜ…”8NQXXˆÚÚZTWW#22Òk¯k¯ ‚œœ:t4M£¨¨b±ØkqyWƶGFFŸŸŽŽÔÖÖB$y;lÁ)††† ‹¡×ë½úºE¡¢¢bÑ熇‡½‹·qe™«T*Å¥K—ðóÏ?£¼¼ï½÷ž×â%p9AæÂ…  DVVrssQYYé•e¯ÞžRdpp_|ñkÀ_RRÂs¤sØÛ>~ü8 @Ó4FGGQTT„øøx¾Ã%¸IÐÂ8¢9|ø0***ˆò‚àH“@øÛÅŒR„¡¡¡¯½öÄb1IίA4ðK)ERSSQUU¡PˆŽŽ¾B$¬1H‰ƒ@ø{J‘ÈÈHüôÓO0›Í0 (--]Uµw‚ïB4@ ø(¤ÄA > IÐà£M > IÐà£M > IÐà£ü _¶®ÔV¦IEND®B`‚mpmath-1.0.0/doc/source/plots/spherharm43.py000066400000000000000000000005211316273626600207300ustar00rootroot00000000000000# Real part of spherical harmonic Y_(4,3)(theta,phi) def Y(l,m): def g(theta,phi): R = abs(fp.re(fp.spherharm(l,m,theta,phi))) x = R*fp.cos(phi)*fp.sin(theta) y = R*fp.sin(phi)*fp.sin(theta) z = R*fp.cos(theta) return [x,y,z] return g fp.splot(Y(4,3), [0,fp.pi], [0,2*fp.pi], points=300) mpmath-1.0.0/doc/source/plots/spherharm44.png000066400000000000000000001207741316273626600211020ustar00rootroot00000000000000‰PNG  IHDRh¤H’sBIT|dˆ pHYsëëL1žJ IDATxœìwœ\Uýþß³3»3[ÓHBBBJ  TÀ E‰¢`o_¯€ ðý¡€€"A°K‘* „ˆHhé…ô-³mÊïç|æÞLßÙìl2Ïë5¯MfîÜ{î™{žó9ϧœ@2™|˜JUTQE…@2™\ Œì†TQEUTÑ5ƒÝ€*ª¨¢Š*2£JÐUTQEŠ*AWQEUT(ª]EUTQ¡¨tUTQE…¢JÐUTQEŠ*AWQEUT(ª]EUTQ¡¨tUTQE…¢JÐUTQEŠ*AWQEUT(ª]EUTQ¡¨tUTQE…¢JÐUTQEŠ*AWQEUT(BƒÝ€*v$“Iz{{ééé¡®®Ž`0HMM @`°›VECU‚®¢ßH&“$ z{{I&“Äãq:;;©W("  «¤]E JÐUô ñxœX,F2™ú²‰D‚îînº»»ûWSS“²¶3}¯Š*vfT ºŠ’à·˜±ÚÿÓ‘‰|ãñ8ÝÝÝÄb±>ǃÁ”¥]•HªØ™Q%è*Š‚éÌÑh”H$Ò/òô[Ñ~Äb1z{{·9Æ$’*iW±³ JÐU„d2I,#²~Š$³YÛfi)’ö[ÛU‰¤Š U‚®"'Ìéç—!ÙtmÓ¶c±uuu)g¤w•´«ʨtáÌ0TÑY{‚Á ½½½>¡~vŒI$µµµU]»Š!…*AW± 2EfƒÁ$?»v.‰$=ôÏomWQE%¡JÐU¤L&ééé)™˜‰Äb±”Õj¯Á–r…þ¥S ý«¢RP%è*RÄÜÕÕE8.š’É$]]]Äãq"‘¡P(õ~<ß&¯¦¦†`0˜5$o{!›3²§§§úWEE JÐ;1ü@ûw1Ä“L&éî·—H$B}}}Ÿó¤‡Ð%“É”¶‹ÅRN¾d2¹µ=X(%ô/ V³#«T z'D¶ÈŒB-Z#ÙöövÂá0MMM}È)Q¥“ŸYîuuuÄãñ”µm0K{°Iª¡U ª½¡‘±XŒ®®.’É$ÍÍÍe!sÖejkz{ý–vº•[#»ä ýK$©I¦*‘TQ ª½“ _dF>ˆÇãtuuhhh fýN2™ì7™% ©­­M×OÚþ{±÷Ûbõ‡þY{ šYEi¨ô‹ N$@ñs2™¤³³“d2I$! D3 ‚Ÿ´ýíËåŒL]Ûoç“H2…þ™µ]Å΋*Aï °ÈŠD"Q’Ë€±X¬OdF¥Áo†ÃáÔûfQ§ëÚFz•`±úgm­­­­fGîd¨ÌQWEÉð;-»®r5‹»»»›p8LccãJT1dÒ¨M"ÉäŒ4­x°‘´{zzèéééS^Õµw|T zA¦ÈŒRM:::…BÛDfìÈ&‘˜µÝÓÓ“ ûó‡þ ¶Åê_%ø'lºvzICU‚âHßÍ$L ‰J°P‰DÙ"3 A%G:i[¸_(Ê™d3¤É±›M×6™¤ú7´Q%è!ŒôÈŒô%½ʆD"‘ ™Ë™Q ÊÅ1˜Èd­fJ²I?v e†BÃÿò…þÕÔÔÇSÅ£ªIe£JÐCÅDfdØé,Å9-Ã0—®m¿Ï`Ãúg°úÞÕпÊF• ‡ŒX ùOúçåp‚iPçÒµ­®‡a “l …_ «†þU6ª=àwvttÐÔÔTô9z{{éêꢶ¶v@€vdÄÎDØà‘¶UÅ3©)[¼¶_bÈÕWÛ£‹ ýógHVuíA• +ýÝÍ$Çioo' –˜ýZ³9ƒÁ áp¸Od„_#¯”ȈíLI1ºv¹¥ bú>—®máuuu©öV7F(ª]¡0b.5}Ùj3Çãqš››Ë¾,µö¤;kjjèéé)8ãÏî³JÚ¬Ÿüº¶É%å ¾r½ÿúþ{È$‘TCÿJG• + ù"3òÁ_›9ÓÛÛ;`E…2ՀΆldWW@E…³ 62%Ùê$[ñ¨J!¾BBÿ²‘v%´¿ÒP%è A9jfØrÓj3§ær¶Ó6iD"%,¿ÊOH¶|Œp6»V¥ÁïŒÌT<*}'œ|ºv¹î±Ê|‰ÿ˜@ÀKi¯J$U‚tX¸S<J8昫««ÛFg.§vi¥FC¡PŸºåF¶4íL5£ˆ*5\o '’lRR¦ŠfµVBøŸõKzÿø·L«†þU zÐ`„ÓÑÑ‘rª ¿c.“°\²éÙ@ ¥3G£Ñ²œ»PdZöûÃÙL ‡Ê)ô?“F:©ü«’xÓU‚.ü–ÕÜ-&lά´B#&úk¹šl2ívt«mÑ6•´â` Ÿãv Sÿ‹ý~¥ý>U‚î'²EfƒÞÞÞ¼†þ<@’kK«þ’¿i{~k²ÒúBºõh“`¶P¶JZò—ŠRƒÙœ‘¹Rÿ‹}žJy–+í·¨t‰È¤IÚßB iÎbsÅ>xùdC±§¿þ@(êãõ7ì(¤T ò…²Ur]íôè C¾,ÒlÏS)“G¥ùUª]$òEf¼É'þ”éúúúTjk!(æ³;•hRL;ü›Ø ÀtÙlEìýƒÌÞÛYI;_] # J#Ãö¯Ë¥kWòíå@•  D1‘ÙS&KÖÎW( ±Ðý¤ias…¢"°”áBvϵ¤-5ëoGB¾øc*ûÎö…%ÙØí@K;[UB,w:ªÅÍ϶Բ]³3Y²å.hÔÙÙ™Ú9¥£££àïúpúuæÆÆÆ’=ð6Xjkk³: ;+i›þje]s…ý i—3²¨?çJ'm›Ø‚Á`A;´'‰œÏr4eÞ¼y´´´0bľ÷½ïõù|Þ¼yÔÖÖrýõ×—|é¨tØ èèè(ªŠ–ßµP¶ÞÞ^êëë3ÖL.ÅËœIBñ[çýI4É5YøufÿåD!ƒŸ´wd ûó“v¦°¿ŒÕ®Té<ÂON3õ×üùóùïÿK,cáÂ…ì¿ÿþD"‘>ç»óÎ;ùÀ>À駟Χ?ýi–/_ΤI“¸å–[˜={6O<ñDYïaçy²‹€¥ÿšÖ\ìÌnK¬ööö”0[AûbœŠ™`Öygg'‘H„†††’b®¥ŸÝÉU )[»Œ°#‘‘H„p8œ*’d±ç]]]ôôôô‰ªÙà'l«Ñ‰D¨­­%¤ŠåwuuÑÝÝÒn+­¶Gá%ÈÜ_óæÍã‚ .`„ <þøã|ö³Ÿåá‡îó½•+W2aÂvß}wV¬XÀâÅ‹YµjGydÙÚn¨ZÐ>õ'dΖRÅìXÌ@1B÷×çÈf—…„æ Ò—³V¡-—£­ÐèˆJ¹Çþ"[¬¶m…VLDÄ΀d2É¡‡Ê)§œ’ñó‰'²lÙ2f͚ŲeËRd}ÿý÷³fÍ.»ì2.\ÈÂ… 9äCÊÒ¦*A“;2£P ×,8ó8§/²¡”Á`Áæ+hT ì^ýN©l¡yÙú¥¿«‚RQˆãhg¯dgÖc]]]ê½\ÛS÷ß^t6´µµåt¨ŸvÚi|ò“ŸäñÇgذaÜÿýLœ8‘Ïþó,[¶Œ+¯¼²lä ;9AâÌG6þMS#‘555E9æŠY³Éd’æææ¢â¦‹ÑÏ»ººú¤€ç:¶ÒQ,i'“ÉŠ ÑH‚¬¤XíÁ$èÖÖVÆŸõó††~ó›ßdý|÷Ýwçºë®+ªù°St±‘™ˆ(S-‹Bú$0PqÓ±X,åÐÜ‘SÀs…´™ïÁžJ°´Ë]«ÐɺXmó×”£¦Æ`Oø 6lPÛŽŠ ýáI†BÂæÒ3æ,Æx kYdšJÙ6ß 4Ë ÷Yþæ;ïŽó7Ø’> ö‰CÎV¼~g‹ IŸØÌ?‘)Œ­”°¿Á–8š››Ëvýr`§!h³˜;::ŠŠtðtzŒñ@s®I X§b6ø-󆆆TÜhÏ»£ÀÒfð“¶ŸvfÒÎÆVL‰ÖÁNimm­ZÐÛéÀb‚@ rÊ™Q*üiàµl6y¦Ø¬ÆŶÅÙ–#y¤R’A A)±Ú¦ÿ&AwvvÒÐÐ0h×Ï„– óÕÌ(–üÇinnP˨ЂFPZXž!W©Ñr8þüV¹?tkGF6Ò¶~èïÒG’2õô-„d¥ÒW#Û‹´·wf!Øáº`¾™ÚŸ1‡SNlo¡J}€Lg.ç* ]›7«¼¶¶6ãwg’l°›ƒ r/ýwÖÚ–j°þÊö·=bµ+­ïw‚.42#1§ïfmï D{íZ@qŠE¡–¹µ«øû1Ý*7-;Ó7› °3Ä#ç[úg#íÁˆâ ¤ß{!Õwô-Cž Óî|ˆ-ãÓIßœµT§\!H¿Ö@ÄM§O6áp8ïwŠ}À“É$ÛÔ³ÎOžKØY“H !m+7à—*ÅÒ.wrV¹bµýéý¥–h­„þLÇ&èX,–²˜‚–Íé:k¾¥9´2Á?XQ£rŸÌÒÔÔTrbG. [hÛÎHÚF@þ0ËB##å6\J!Ô\¤íφ-D^«D­H´9^¬ó ±Ó¿oN9ÈžÊÜß6Ú`I&½³³m[Ž¥§¥›û-ZÛV¾˜vçúÌÂÿêêêR¤œÈfigËüÛªÙÙ³aäÒŸ*v•,q”~ÒN/Ñš-V;‹¥žç\ÈVntåÊ•\qũҦ;m¹ÑôÈŒššš‚ãvýèîî&™L–}—ƒŸ˜·G¶¡Y´‰D‚H$Rr½éB’Y,üÏøí|–’ƒÖ]“ô#[dD®ÇËIЕLöþ¶å L$,X°€[o½•eË–ÑÖÖÆAĬY³Ø}÷Ýûœ3[¹Ñ &pà 7pòÉ'FË®7$Ld2™*™˜H$R^LX˜‘¥Edôgiž@ O¹ÑÆÆÆœä\jx›Ý“•mllÜæžú;€‰Ñh”®®.ˆD"1(´­i0ìS‚ÔÊkZ ÒJ,¯9PÈUzÔ&4+=ê׸w4äóEY?uÔQÜ|óÍœtÒI|ùË_¦¥¥…%K–lólåF}ôQN;í4† VÖXêŠ&h?1[ý‰Râv{{{iooÈha–¦Æãqššš Z:AñúW,KÝSSSS·?°vùwttPWW·ÍÎ)ùú~0|:i§×ʤÝßIÑÈ( ‡sÖ‹¶I¾¾©t º”ïŒ7Ž9sæpÜqÇmó¹•ú”8úè£ùÝï~G}}=/¿üré OCÅK¹öÌG™œr~‰¤œðkÚuuu„Ãá‚Þbr[ºöôôäh4«©˜vXJû@”3ÝÞðË#éE2ÅÙÚ ­’0PavÙêE§ï í׿‡ŠtTìäÑÛÛ›·M¶r£»ì² óçÏOË=÷ܳ¿ÍO¡¢ ÚŒl“ s9K•²ÁŸÔbš¶…ŽŠBÚä¿N0”T[þZ\öPˆ¥ —¦mº­Eíl…ìÓG ;iÛßJ¶¤ E{{{ÞBI¹ÊΜ9s šUÙ Å•ÍD–™ÎWêò'Ýn –Ô’­]ýA¦ë˜´Q’ü‡ŠÌŽ€l–ö`H匼(ü!–þ°¿J’GŠ%è–––lMiÒ Z–³ýS)ˆ¨Å3ç“J±ÒýÇR8© !S[¶WÒÌPC¾ß­ ÀÂÝú›@R©B2™ÜF>ÌÔ7ƒQW£Ø>kkk«t)ÈÖÉf]&“ÅmÿT*yš¦]HH1Ž9;Þ®“O¢ñ_̹ ù’fú #~U²ÁÈrÛžÈFL–mYHÉöÄö¶b ­«a´‹%èöövƌӯk*ž Ó‘n]F£Ñ¢ «˜ØiÛ©¾¾¾¨ŒÅb'\zvaÖÿ@îîŸ\lwm=‰ôì­Jª'1PHßœ5WÉö"írû J]‘¦“¶iÙƒµÛxÕ‚î' µ.Ë= ‹¥-ÅÈ“Éd*‹±PýßÈØH»««+¼3G*d»(#©P(TQ»³ 4Š‘G2‘v±G¥íGC€ M“ÊFåŠÃLߟ/S1Èv¼¿>‡­ü¥ A!¡‡þ ÝÝÝe”þÕLKKK¿tl¿õì?¾âHC…dŠE¦I¬»»;Õ?•´;Ë`ÔõÈEÚþ •Íà)ôyéíí-ºèÚö@Åt(ÊùPõ—  )hT¬c1[[L Hßnª”¶gkOzñür"=&Û&ÏtôwÐ:ÁÓ(w¤˜ìtøCÕòúß™v­1øŸËµUpúóRê$Ÿ­’ÝóÏ?ÏÿýßÿQSSC$áÚk¯-ë½Uü/8PV9Í )hÔ߸fÛt6‘Hd¬ÏQŽ À®a5šý×(yÅãq:::R÷«öG±ýµ~ýz.¸à³Œ9––ñ´´Œ¢¥et(üãSçÌTg£¦¦&¥y[Kb(Ãoe[mp8œ2hl¢¶º#~»\ ºPd{^Ò벬X±‚«¯¾š 6ÐÚÚšõ|VÉî†n`óæÍ,_¾€8€ŸÿüçÜtÓM¬Zµª¨$²BPñ¥„Í%‰>d“¯ Q©¡yY Î_Ô¨³³3uúúúmÈ¿¿×¨{X²d ãÆíÍ´i‡óë_?L,Ö¼Ø hdÉ’•œsΗhiÅØ±“yã7ú|ßa]]Á`H$’ú-ãñø6€¶wÕ¶ÁXþ×ÔÔP[[›•´­,«‘öŽ<‰¥#iïºë®sÌ1lÚ´‰ /¼³Ï>›K.¹d›ïæªdpÿý÷³÷Þ{—}뺊—8 q<ú™c.‘Hd,ÍYŽkl#ØBê@—bAÛ Àä†rU³3øåŒRÂòò‘ÊYgË]w=Ô{ÀÑÀÀqÀþÀÿíÀ$:;·ràÇm,]ú*#GŽÌxÞL1É…DJ „µà×´Aí ‡Ã©šJq̦'½l/ÔÖÖrà²×^{q饗¦Ú’«d7kÖ¬m*Ùýö·¿å…^HÉåÄNaA›•i„Y[[[ôÃP耳Ҧ@ oèRΞC³¹¡¤Ë厙ž6íîºëAôøuÿFäüWàr` p=ð`6pÿ Ô3yòÞüèG?*øzéõ‘ÃápªÏl2«²ÜVö<ÀŒÓÒ2ÒÉ7ÓiiÙ‹––‰îµ'--»rê©góä“O–íº¹ÍÒƒ©‰?]©” g oÕyÚi§q÷ÝwsÁ¤*ÙÝwß}üóŸÿäË_þ2›6mâ3Ÿù [·n-k»*Þ‚†Ü$œë³l5:Šu,r\zx^GGGYÏ}Wáp¸ì^çd2™ŠËîo–a¶{Úk¯xë­µÀ1@ X†È÷VDÀÚ€ïK€'€("ï1Àn@;—]v%wÞù,øgImK”0§›É!æX*Ū¼ùæ›ùò—/F“Op °°Xîîý@àN ÄÜÆ¼¬àŠ+¾Áç?AÑ÷ÕäsÌfЦ©ÔˆRïÚ¹*Ù­^½z š ‚ÎKÄHG®]ºK•2a S§íþH“r[yþ‰Ì¦ùóç³vmØx 8ø0éÎ3__>ìü/p6ÐüØÄ+¯¼Æn»MeÕª×ûÝ6#m«hç¯fWH¸_ww7t8+VlDrÍ(àX4 ½ ÄóÐdóm4ñt+€áÀZ ‘o}ëû\zé÷Y±âåÔöbƒA^ùH;}SÖ=r00$:ŸíG¡E€ú×ìOÈýÓÃæ@Ÿ°ªþÂ,f«Ì×ÑÑQ–ófÂù瘄͈´Æ""> x8 ¸è®‚Hîˆ?L{>ø+mm5L˜0•%K^,{{ ÷ëììdï½gÐÕÕ$›a@’eÆ¡I'áîå" Å½÷ð?ÀÐJáLà àbàJâñaŒ¿/?ûÙ8ùä”ýÞJ…¿Oü›²f ,†´"Š£PØê©1$:Œ¼‹±dûÖæ·ÎýñÌå„E€d›húû@ù­Ÿr[þ6`ýóßÿþ7ЋºYŽo!ÙâUàxà^à `)"­‡€Ç€wç"ÿ0p;"ëZ[Ûyç;eáÂ×pý5kÖ‘,^¼Êµ#LCV~M(×»ö·o^¾îÎt"ô$…€&#PŸlà¼ó¾EKK3sæÌð{+™â³eü媭Qî§bޝT«È; ÁsÌeÚ;/Jý1Òc‹ÙÖªPøšõõõÛ„ÍAÿd“Kl¯Ár“sOOÛìs7gÎéÀd=7I$Wa‡Ýß&¤Óþ¸ÉïERÁàà;Èúþ8Ò«ëyõÕ×Ë–$¯Ÿ}öYZZưxñî>Ú€=só×Ö{Io¾œ‚ôhÐ}‰¬C–vÒ}ÔÍÈÚ>›3Ïü===e¹·íd¦¸uÿþå,–pÍçR‰­³{{{‰F£EEkA§;Ï2‘fáOœ±Ú¹Ê–ò0§o4›­¿J9·?§±±q›ˆ‰h´ó(d9ÇùnE ¹"iv׋€ éÀ7Ýg³ Žj]t)ëׯ/ºíÅ`îÜ“™={rVÝo }ù«h‚¹IßD÷t÷g¼ïþýp°…‚îy4"ø½F;löÞÕöA.Ò6ÃÁOÚÛ+Ù¨µµµ"ëpÀ•8ú1…×kÞ^Î3+önamAþÖGùÎ_ìµ­.G"‘HYãþAÜNÈ!¤7¯ÞD¤5YŸã ˆ´Á³4¯ âû "eeù"í{PäÇ( ÆÔ©{ÒÚº¥¨{H¿ŸLH$Œ1–d²Y·k\{CÀÀ<à&׎&à]î›FÊkÝ÷@²ÇltïQ÷þÀ€×Ý÷{$Fñúëo•|O• ·„…Íh€kï!À_Ð䲑ü.ÈyجèvàÀýÀÁÈÂ>x”Ûn»3Ï<³bõÒr!›s6ÛvZéµ´+™ xà{ì1^{í5ššš¸ùæ›s?dÚvé(G-è\ç/Úk6ß Ÿ^<¿Ü9ük×®åñÇçÞ{ï套^fýúV’ɉD¯›Øâ477±ß~ûpÜqÇ1gΆžj_¾‰%’LfßÍÆŽ¿ÿýQdIÖ rÌ@¤5Û|`ðdQv#Kz Òhg_FN¸ÃŸû ÇÜѰóÃ^S6‚~饗8üð#”2 Yÿu®­1älrmžŠ& VO»»¶¾î¾³IG¸ïþ/ðÿξóÝHºeS~ xŒ /¼’SO=u§ªîgÈ”!j¤ž!j %êöövFŒQþFgÀ»ßýn<ð@Î;ï<®¾úê¼Ç ‚îíí% •­t&‚¶¥z¹'ô$Ý2/e`¥·¿»»›k¯½–Ë/¿Šîî:$$‘56…®5"Ö>À,dÅnbñâ[ùã_ä‚ nBVkEX´ÒÜÜÄܹ'qÞyçqðÁúô‘Mdù°lÙ›èQkB2Ç>({p3²_r×<‘Ø?QG/"¶ñH2¸ /ÒaÞ}§ IDAT7à×îþÎDì^®ý=œtÒû¹ûî¿×±ixì±Ç8餓‘Ü‚¬Þ³\ûï@οº{ø¾ûÖ«îÿ<ŠH»òÑÀO€¹ÀOÿE×Dà7ˆ”‰ôö¸s-ÞÆ–-Ϥ’“òU÷hÒ®„ȇliýætLßm<Û®5­­­Lœ8q»´9rÞyçñ“Ÿü¤ Ý{Ht]]±X,ÿEÀ_l¨˜ÁK¹f™ûÐô£ó¸óÎ ënø§!»ø,²P·"ò !³I‹PÛ}g]…ˆçlÚÚº™?ÿ9æÏÿ²î¶ÒÐÐÌ·¾õu>ÿùÏÜÎD¢éµSPRÊ‹H“Ý…¨=ˆÈ{צ‰À³®Ý½î~à‘ôÈ0÷w÷ôgäTÃý¿ƒÇ{¢_ûÛÝsÏ=œyæGQ?½IBŽÁ#¹¦ÉQŸÆPÆ#ˆÌ'!B¿ ¸‘óéhªGù­È©x’M^D’χ€'ÝyæH<˜j_¡¡m~ív jŽTü™Ÿ&æªÅ²nÝ:Z[[s­ÔhWWçŸ><òÈ6…¼²á’K.!pýõ׳ï¾ûræ™gæ<>L&×¢iºb‘n%¤£½½½¨*Ræ4‹D"©$|í:::hhh(ø7+¹¦¦¦ ˼Ðó/Z´ˆSOý$Ë—¿ŠÈâ[h_„¬ÊVDhh¹½^$Á³¨0‘…´u¢%ûxD„ImМŠ4Ó&DÚ' ‹öuDž[>|WæÏ¿žw½Ëœb^¡%CKËh$SŒEVsI»O#b;YŸK„Ñ€œo“ݱM®í›‘n}µû÷÷~}1r4Ö m7ÂÇ?~&W^yeª…X—ÝÝÝ<õÔS¼ï}§¸>ÙYå3]_Y¤É'‘üð dí?ˆ:Ь飉﷈Ä[‘ö<IßrÇœ‰B·¢ä›ëa_…â½ïBÒM袵õ¥ŒíΓŒ¤ü;³ôgDûý[Tõ]]]û`ò¡§§'u™`y‰D‚þð‡<óÌ3Œ9’©S§rÈ!‡0wîÜ>ãô—¿ü% œ~úé|úÓŸæÂ /dÒ¤I©ÏO<ñDî»ï¾²´=C"̮ܰ°¹žž Žg.6¹Åâ³ó…ÍzþùóÃÌ™fùòsy®G‰óQ"D‘ÆÿCÑ÷5¤ß~ÅWQºñû^$ü?”ݶ%„\D¾—%÷´¿Á–-œtÒ<"‘"‘Ñ|ç;ßÉÐò8š Ö"Ëq?dé>ŠBäC–ó«Èêˆ{’¢¨†:#ÝíŽ_„HúKˆ¼×!"rË-¿Êƒ›© é²eËxßûNuíšáÚyš°F¢Ià4ùÕº~ºIS€¡(½7\EVÿ‡Ñ¤s>ðsàP¤5¿Œˆû׿?G¤¾Úõ{-²¶‹…6ÀöÖ …BÔÖÖ¶‰U7 ³Pt¥"ßJÔ_‡å›ßü&Gy$óçÏç3ŸùLËÛ¯Ôè@bHt>ò,&ªÁ’@‚Á`Qq1V†‘@</¸Ú\®óßÿýŒsóæ} T‘£,Þï"Rý ²Lç¾Uƒ:¾,7P­åc5ÜéÞ» -Ëÿ…~ÒF× ëô:D*ÈÁõ-Rv)"¥Ÿ¢ â€i\~ùÕÔ×70jÔnüýïw×Hº×xD¾o ¥üDw½…¨hÒTd±>„ˆÍ¬ýv$q´#Bû ²BÿáþÝ€¬ð±hhA 0ZÂZÿ¦ÇàڪɈª££ƒCy"½ÜýF1ÿĵ½Ùõí]ïtŸŠÈ{¢ëËã€?¡ˆŒ_ ¹é$1ýMv£û€O#kúc(l°Åç^$Yµºûë_¥4#®B«ûùI{GF2™$ 1qâDæÎ»ÍX´R£À6¥FCBâ08¬Œh®%«¦ÚÚÚ¢e“,rYÁþtót}°ÔóoÙ²…Ýv;’x|?T`g²lƒ(Jà÷ˆdí^¾ƒHüùÉO2|øpššš˜:u*'NäÄOä‹_ü"úÓŸ˜3g_|1ãÆ+Ç-¤°Ct.ò´ @ÛÈfÇb ÚΑ)–8SØœµ·P.Ó=<ôÐC|ðƒç¶£}"ç™ÀûÜQÏ"ÉáKˆä@Ž´…ˆ˜Ç R¸é˜_@Dù²ÏBbÇ4ºsÕºó¾‚BÁ¡<‡¬öû|ƒ;ç3ˆÀ—#‚ž‡d€kQ”†¥uÏ@ÿ"Iî¸å®í»¸W²`“ÈšœÈj Z|× c‹" }këw¿½´¶nÎÑó”)SÙ°a+š,Þœ€ç!Éh#š6»kY1¤SP´Æ ´îÚ»Õµs•»¿õ®Mxavvçÿ"ç'\Ÿâúùd4IÝˈв Ǹ~ªV"¹çl4ö «ûI×'‡ «?Žœ¯ (‘·Ðʨúú Ç{çœó1Ž;ϹßáfEöûîWé=˜ ¤Bf2¡³³“ÚÚÚ>•?j"“u] Ag²ˆýas~G£i›…>té@WW£FÍ 7ÇÝ(j!Èid=Ö¢Ž+–{:ÐK¦|,Ò§ŸFV\"×f÷· I Ó‘œ`å1G¹W²Äš»iÉ?pï]Œ´×sÝ|éµÿB$Ù†,í7™­s×Ù‘ÖZ×Þ]¡nv/Ü绺ë¼åÞ Çá*4IýÜõÇeHK¿YÀ¯¹¾éeýúõ9‡Ûn»Oú|×·»¸kÔº×hR:ÙÝó\ÿ¼…Ú$ž9îþÞæ> É+èú4ìúÚ4õsPÕ¾sQxÝ×Ï–âÞ‹V G»>|˽V¹v…ݹmÓƒN×/Öî€k÷^îÿ]h…ÒîŽmÂK¯orýeaŽ«MüâWóÁ~0cŸYT•íñgHC1á~Føƒåp¬t‹ ýä鯜+j¢X‚îîî&¤"ÿ©6G)ퟞ}öYfÍz²ÜÆ¡eýˆ0@Kè"ëu÷Þ­ÈBú*c¹ à•h‰>iŸVTè ˆþ…–ÔgºãÖ"›…ôè%®{º×hð7" q ²ê¿†,Éo#Ͷø?q}Y“VF´iЛy€,Ðn×Î ˆÜ:‘UXV w!â9­nBdy$"ë]];Â@oû<úè£Yû^Yd5hô¢Ô7»÷¾†&¿€kǧ<4ÙÝÿ"Dl@$8MBÓÜ}˜s/ˆ¬Ú.D’=ˆˆkÝqǸk¼å¾ßáúbW÷ÚÍ}÷Q¤÷Ûs½ùÎvý"Þ;ܽœã»S+æôQwlYû!‚åþo«ÕUhõÒÉI'Ãüù7¤ #è\–¶É#†l¤]%èì2í/˜ž#Oûw8ÎûcKÐ&YÔÖÖ4Äb±TýBÐÝÝÚ†hñâÅ̘q8"©ÓiÆùŒD–s=ÙE–ØãÀßÜ;Æ< Ì 2¸ ø—‰¾ Ø Ò—7 ]t2Z~?‡¢>¦¹ë·"RìED1 éÉÿ@úž®‘vÛ€œ__um{Í<¤ã®q×Þ ^Ô}¾˜‘TYý»  b ²b·"=¼ÕÝs-šÖ¹>j’Ywlni±úÒIwîãQØ[«”'¢:ȳiù÷¹{[‡Hò®û»ß%„Èz#úº¶4ºû™äον&º×žî˜ÛÑïlí[„œ†ŸÃó7<œŠç¸þMv¿rç1 $…݃&IKÊH¢ÉóIôûؘéEÙ™cÐót÷ºŒ¯}í|æÍ;—Ñ£G§¯… =ܼh û|°úšk®áâ‹/.˵Ë‚ ÍãlÛ@šÞYL-gÛ)§¼Þ¹¾kršøb÷§ØÌñÝïþæ¥H~8 Yt#ýr.’/jµ÷$H?BëuDcÑ ‹ÈåFDwÇ݃¢8Þ4ÕuhpN@Öb YÄQ$›À5îØ“Üg=È™ø(Ò¡OAäñ„»Æ‘®}?ED{ "¨½‘^ýwŽ4¡„Üucˆü6 ²èŒ²›ùßâÚv;Jö¸ÑGÖi c¥Ûo¿óÎ;ßõ[M4Ãs´JÙàúïo(Rc=Òp7º{ˆ!Íúi`_÷~«éÊ®ÿ[Ýý sŸïïîc+ž¥û¦ëóÝ=÷¸ÿ¯EŽéËÏ¢ éhD¬!d¿ŽV=æØˆ¬éÒ¼Íâ5"†ž“;Ðjj Áoq}k¡-ì¿ÿn<úèûå$LOÕ6˺¿›ùKÐW_}uƼ+C† M2ðÊ Yð}1Y€Å$žØÝ@ÁéÙjWhÙh4Joo/ üž|r ŠhFÒÅ+h€íé/Ð`¬C„ûId ݃bhOsß}Þ}ˆ‘5v"€sÐÏÿ+äè;ï3ˆørÇ,@Zé»Ü¹„¬Ø¯" óFDèãiŸ‹ï‹ÀxòÑHžxÐ]çWˆôND (–=ha "ä ˆ Ç Ò«Gèþˆ' ÂïAÎ÷y ft*j#è¾Gò‘EVÜŠd›Ù5¢If«{ßœ‘»»ßÆ6"xѳÁ]œkÓ0DŠP=;W¸_¦Í|‹!èd2É5×\S%èþÂÚ¿GŸÉ ÅÊ ;4/SÜt±×H&“D£Ñ¬5¤ýä___Ÿ*¥¨z »“Lþ/˜ßCçdŽ‚¬»Íˆ@߇à¯ÐÀ;"…áîÿ·¢ô~´D߈¬ÝõHÖx²noDÖÛP4È|D~3Ñà¿9“f¹sýÕ§™ýÇ$¤]Ÿ„ÈÇ,Ò¿"mùˆ”?‚&’§T³MJ¿ÄÛ k™kÓp_Ïa4!Íx¥û·Sƒr)"¡. †qãÆ²xñâÔYä´¶Yˆ¿†¨\_/u×߈,JK©GÉˈ´Ã®MÃO@þ€w"ës3žÌa…ùÏvmý£;ï9îÞîrýù!d}?ƒ¬Ú)(:&‰&0‹«¶ZVºï¶"gðîN—£•ÉFDغ÷»PÄËÑDbqß' Éè/HÒ8 Yð†çÝ÷Îumº x˜ü=3gΤôöö¦È¶ä"í`0XÔ8Çãüô§?墋.*©í!CÐÝÝÝ´··§¬Ìt/p±ÛÖd‹kÎ7]ì5¬ÞGº#2ùÛumE‰˜ÃÌ"4Cá D¾w!‚µ’—sÐ29€,ªûu7-{· ‡ÜR4pßï>¿Ó$4G!=ûuDÒ§ ÇÔ݈|zð ЯB4ˆ–çîœHÇîÚs"©=Ðq »»¯þÆðvWù6"}‹\XŠ,〻†íL²Å}§Å]ߢšÜyÖ¹v°P7s6鲯“®/CȲµ¨Ž®op×Lºs­Á g«wï7£Iéxdm[[&û‘0šœ^Bì$$M-w¿åÞx$<…øu»ï/A>‰÷¹s/tdž›n½I?´b2Çà*DØæø<ÞÝwÉOº~žíÚbX&á°û}ÌB]Š&÷.öÝwož|òÞ¢ë´KЙà—Fb±Xª ùb´·nÝÊþð¾ð…/”|íÄ!èh4ÚÇëëG>k5ÒÃÚòÅM—rôH“3ÒÉß>³™_}ŠcÞI h`ý -¿…ôÏvd%/AËô ¿Y£ëÜ9ÞgÙý Êãa¼·”GqDFG#Ëü¯ˆx>„,²?¹6œŒ&€N$©üY_sÜ1Ñt"ò¬G–¹9' Iawdqïîî÷@d=ÆÝ}v»ïZâÆ4Ô»ÏAŽP+Uƒ¬W9[[[‰ÅbŒ¹‹ëõ&Dr‡#§[Ò]ûEwΞS2†Õaz³ÐD¹‘úV$Óœj»»cî@“ÉûÑdô4š¬ÞŽ&ÀÕh%3÷ëÈj=àîÚÇáéߣÆ^h"®u¿ãƒ®¿§»þ·Tù§™‡¹ïéú Š&‚¹{ú ;×Ýýެø ²ò-S.†&•gQgø!×\s1ŸøÄ'(ùЧBÂýV®\ÉÓO?ÍÇ?þñŒçËVÉ.‘HpÞyç …ˆÇãÜxãýn{& ‚ŽÅb}áÓQj\³?l.‰äܧ/“Eœ Ö& x}}}ÆÑOÐÓ§ÏäÍ7›‘ýÄ£þ*Ä1d)ƒ–Òõhùùg4˜sŸFó.´¬=YÑ‹yšSÊÚ´-Ó›Ü{d=mÂ['Üë4`Üybîo;g-Ÿ-,í@¼:"RhAÛ±HÛ>é¡»!kn–ûÿ® fÍváiÎ5h‰? O~èvÇÅyë­·3f,"ìš^smìv÷aÉ£Ü5zÝ9ÍJÞMzÃñjoìÚ8Y¦Ë >莅gív¡Õmg…{¯/ë³ÿ×§Sðœ/ ‰Ã,í5ȹ÷†kÓ\¼˜é…ˆ|{Ðd`Ör/^”M’oNÀ ³[䬗\ßí|Æ}·Mò¹sžì¾Ó|‡@`›7/-ŠlËIÐùbªý¤ý³ŸýŒ Ç9ãŒ38äCØk¯½ú´#[%»Gy„ ðõ¯ï}ï{qÄuÔQýn:† AÛÒ%J‰k¶s6WÊ5ÚÚÚ‡ÃtwwçÝrÊ/¡<òÈ#œpÂǵúDÿ@ƒf+"êÐ@û=ŠUnF„|T"Ëk3^A½{@„2éÐëÝk"M«­l™j ¼ ‘ŸõS"©D´féFñÈ=ŠÈ§€lðì‡,í4©lÄÛ=e"fº¶µãUÇkA¤Õ펹¾Z…1‚ÅACœÖÖV_½d)6¸ãÇ U‡?”/êŽ "²펙àúk×îÍî^îq÷9Þ½ßåÚ•DRS="X³b×"mDĺ_;"ýþÓÝÛ ¼¬B“nZö€ûì9dÕv!?ÁÝc§ûl;n zŽl«§ î:FÊ'¸6àÚp·ëÛu®'ã9 — Ô»Ùm·õ¼üò3Šîîî¼å~ …YË…†ÿ-X°€Í›7ÓÔÔÄ3Ï<Ç>ô!öÜsÏÔçW\qÇ{,³fÍâ{ßûGuGqóçϧ¦¦†øÃÜ~ûí$ Î:ë¬~·?C¢`¹áßma 6i…Ò6‚5gÇìÙ³Ý;G‘õÈQ÷.TãQDØÓÑ2øÃˆ<¯EásÃaGD2U}{ ÒÕh€>‹,éCÜÿ@Zôíˆ ?…$Ðdð+Dü³ÐÄa‘?D¤òD*‹QtG%ÁlE’ÉKÈzìqÇ?‚§-ÇÜõW"ÇÕd5ŠˆöOˆ¼ÛÝý™µÜŒgš>lο¾ÛˆMŸ>=ò6éÄ\û›]?Y;Lit/³ ×£ p!"¿ÇÜyvqm&[)´£ÕM»ëëQˆŸv÷3Ýõ÷ãÈ)»’³V"â¶ë\~ß'Ðd0MXµî÷ø ²±®}ç¡gfšÔ_v}¾rÄ6ãÅ’›®]‹~×S|ý³Þ]ó×öÕÈ98ÍõÇ+H É#€‰¬Yc™ª•ÛMå°Ãã„NØæs«d7kÖ¬>•ì&NœÈ“O> ÀÒ¥K9âˆ#¶ùn9°SYÐþm­êêêH$EÅKz “3‰DÁÛ¹§kÜgœq6ùËSxÚnÅ˲;‘ÀƒHß4gÕR¤Ÿƒä‚‡QÄÜwÏ@$¸’0Ö"gÝ $CX¨hpߊç>hз Aúkd-ZJé¦ÿA„6‘èkî<“Ð$°M.SPèÝŸ ioDdhqÀ­Èjípm~ÉuîøD~Evm±l­xŽ?¿<p÷bßiwýaÐZzÄ}²»¿fdmw÷‰;¦ ‘ÙT×—A×g¯£ c¢ûîîwšáÚö†kÇldÕ>íîi*’|V#ýwƒ;î]®ï^A¾Á]ûPdÕÿYÈÝ}4¸~Ÿåîc+š$"Â…B gàÅ›¿Ž¤¥e®B²S ^xݾxÒÐGК~ Ô°|ùã©=.ó¡œÅús…ìeŸÿügfΜÉ>ûì“ñól•ìN8á>õ©O‰Dèîî®jÐýÙU¥as…\#ÓF°…J"éw"‘ ¥e2±˜ÕŸ8 ˆ«ÐàØŠ,©sÐZ‹R¯%³/²ÞöA„ñ'd-Ùwöò]½9öAùX4x_FÖÕóîVWbodÝGÅ‹ˆHÏqmý›{…‘…¸+"{Û½¥÷zD„\{Bˆ@F¡A¿‘§­>†¹û ¸ÏŒPˆL¢î3+kj;ˆ'ð²ëÜû D²î=ÛZ+„H·Þõ‹Û÷~Ì» O/¶L¾nfÌ{I$Û}Äb÷õ”_¢%ÿƒ„!CÐ…j¸éqËɤЕ§{ˆËAÐù®Ñ_Ì;—Q£.bãÆ_ }”7! ôr40ŽÇ³2­ÝãH»ÜŒ¬¡SÑòØG kõ̉&âx^Ìl+r]‰—)w$^méç‘åt¸‡£ZÒkP4É«ˆ ç¸ö~îÑÈâÿ¦»Î;ð*ì½C# Ûê®edmòF`ƒ{%ðȺÚ0DšIw|o'“ËLΰßÎʱð¬åšÚð&É}îCè8D´[ó.¼P´7qïƒ&º·PU¹°ë‹ažŽHnòÔ +ØŽ›½Éµ§Mˆ«Ý=4¢•ÓYx…šþ‹ž—{\ßBòØçð²× ‰÷ô›Óó#îx\?¼†'´¹6¯äé½®ö`üøñ7i-4]»TKÐEåOlo ‚ÎûQ2I ÙP*AsRÐÛÛËqÇÍaÁ‚7'}T— kå$g¬BšßŸÐà?YT!¤kÎF–ÜãHË®Á«#üdѶ ýòzD¦IDæÇ"‚ DŠ¡ìÍxç'Ð ¿‘A£k‡Y³÷#òˆlªkK¯»Ÿ1(Ôk³kÇX¼h…wÝ®µxÅ”¬Öro+*{ϬX?LæN˜»ðä ´cm2ˆº¶®A“ÛH÷ú½;î`4=޲)Ç¢ g_D¢"B®sÇî¾ÿ†ûì><Ò AYñ¨8"Ç{ÐÊÅ¢T†!Â| É+ÝoÐ…|w´Ây‘ÿ;ÝõnG¿³EÀì‡&{Ó{ðâª_w狞‡yÈ1¼²ØÄ+9ûàÇì·ß~©P7ÿ&­½½½Û¤kæþ†•¾ÓùÑ  Ùö* ¥Bv Û)6l®½½H$’±@¶ã‹©˜×ÞÞÎ~t5ßÿþ-hYú~´œü+6nþ IDAT ³PQ¤ô ¡I ÁÝ„ÿD÷݈<ÎBäó,"Ó€'¸ãDD²¤^D²Ãdy6#+ïhD”w «©r;" K„x‘ÊfDJoCÄó"•^ ãåî¯9÷¬f²iĶ‹Éf¶Üˆ#B àIû<ä;ƈÙït¶Ï›Üß:w.Ó”{ðœƒëÝ9÷p}ü2žs°M2f±[(â(âfºë¯%®oW¸¶ìŠno÷ÝEȸ̵e Õû ^Öä2wÌ«®Ÿ"®M>Ê{‰ëÓõx/Ìt¿•M”+‘óñe49Æ]›fámž‹ëÿEè¹ìD“í\÷·Õûx’ÖÖÕä‚w–žžž”fÜßÝYŠ Ù«äZÐ0„²íO$´µµ …ŠÚ¶‚N$´¶¶R[[[ð5Š©˜·jÕ*8àX::lÀM(„éHç­AÖÓ#h°¼¯ÞEŸ»BVð¼´ß²Äf"ýÚ¿¤ëFK×ÿ «ÐêMŒFdq²ã(ÙåFw «ª7ÜýûíîµM/¢nÙyÓ<‡&‘^ääjDä¼Ñý{žnC±µ]î¾q÷Òãîm+éö RŠãéĵîúFÄ–ÐbÉ-1×þ÷ÏéhI.¼­¬Z\›»\{ƒˆ§»¶¼Š~·0"··£Ãch² kE+¢#]¿Øï±9ü–¸¾kt¿Á DžÿvmÛEn<ïÎD’Ê*Džµ®­ Ý}‡²?Û‘ìu:²ŠWà9awA¿ó¡xVtÌý6/"ⶨ«š7Êý>+ÑDý&0ƒéÓßâé§ï¥P˜“0SæŸeº;ËŽT¬†A§×„ö‡ÍÕÔÔPWWW”ÜPhØœe&“I ÖÐ ­˜7{öI<ýôë(s°é±”êiSÏõÈ~ šf4¸6 Aò”Hà×U#ËõU<ë´Ä D&ö`÷ ¹-»ŸC„GÊtd €·½Ö îæ\Œ ršâ®³ tû<€ˆÊ®¹ ‘I-rZbÊÿC2@Þ.+f=®v÷ÒŒg)wã‘r/5»¯N‡Eƒ„QíëÚ²OË7ÉÄvxiÀ«Å<Ïâ¶íÃöFNÙÍ®×âeTŽFÔ4wíÝogçïBÎH×–ixq͆uhÒ} oK°5Èz=oRÃ]û×èyá~§…î hB=ýŽ!ן›a¿ž¡¨ë·QˆÇKj‰" } žLu ²¢/âñÇçsÀV¬)?r‘j¶BÿÙjFW zá'èžžž>asþI E>‚Nßo°³³3/áúF ‡Ã9w]yï{Oã±Ç6¢”!ËìKxé´#‘îw0ÜéX‡<ý–!¸Yi¶ÕhI;2í{½ÈâzYGKñ¶–2© ‘ÐGQ–b‘Â2DÆKaÙÒÈÛÝýmríYŒ§wnF$l–n"ŒÏ"kt1ÒKïÆ+T4 ~ÛüDzÏl4«mNÏ„;ÆäŠz÷ž¢m9õ"šÔöE5.^¦oÕ:Ë| »ÿ×âí>nšñ$ôû쎷«ŒM˜+Ý}[$†m–;Õõ˳®]‡#Ò|Í}ï-×Ö°k¯‘ü®î¾º]?½ˆV“Ð*h³û÷\×Îñd¢ÈBÞÏ™Úãîk7DÆàYõ]ˆ¸_w¿Í&÷M(–}*"ìû˜‹±Äœ/"kÿ:xà7%E4õ7ŠÂdŽšššTMu¿ÒŸàVÌnã~|ãß`Ë–-´µµqóÍ7÷±Ò/½ôRî¾ûn®»î:;ì°~ÝË6÷6”,è\;{Û~¥¦ngÚ é%JóÁ¼?™eîÜòÈ# ò{mÂjéÊw!«$‰ˆð dO@æGhÀ~ OL ‹Ç, ¥ˆ,ºÑ@´Šu-ˆÆ Ÿ|ì?E„ô?ˆüâˆ\,ìm ¤–(bŽÄ¸ïeî¬Êœéš#Ñò$Šú˜‡–Ño +î ”¢<¯FDO^hpíX‡´Ö:w½("­×yìâþßåú$ެ[Ó­×»ïÃsÖ½‰,zÛ¥MTßpíN ˜ï ‹ßœ§–mØ€W€ªÁõ¥9ïw¿×»\ÿw¸6›CÒä$‹L ú^ î~t° JµCf˜ôôŠëO‹ÎI ký“È©ìŸV¡‰>æúa$r>NpŸmt÷Ûügºó>Œd¯Çsy wÜñsN<ñÄ,íË3ZÂápþƒ @>=Û¤‘‡~˜;7rî¹ç2sæL¦M›–Ñð[ºt)W^y%×_=·ß~;½½½|ô£ísÌ·¿ýmN8ᄲô² kjj¶Ù—ÐPjâI<§««‹@ 7 °Ø™ÞÚFI&“D";ìD^|1ŠÑVd5ÚÃÙ€"6Îpÿ·º¿VwÁjO¼Ó½oZï.ˆpÇâ•õö`2 ׬ޛ¡MBƒùxdwß«Á[Ú[ r=žEhïYõº8²G ëì.DÊId…ov÷þ6DW ‹ùB<§YMBmH›ŠôtàM8Mî^–")ÀœŒ5hr²I´ o¢ ã’jÆË¶´vÛät£;W‡kÏÍ($-‰&„1îßx!{ƒtßµXo«‡}:ZÕÔᑹ|¦ah›시´?rm°J~vmû †»Ïg#2µÉ{5ŠO_Œœ¯õ®OžsýÒ‚´çÑeýŠß/þz­ëççu?ÅßïtðÐCí³X±Ø^qÈæ\ ƒüñ¼ç=ïá»ßý.#GŽä·¿ý-|0ûî»/çŸ~ŸïqÄLœ¨ä­É“'óÐCm—öÂ#è|äY A›fÕÙÙ™QÎèï5’Édj—”ÆÆFB¡gžùi^|ÑŠ²¼‚Ò¯MÜ ’}ðzãP¥ºuˆ¨¾„¬é7ùÄÎfiǦ™w玈ɪ³F©º{ l¾^]…>wçÈëvmyßëû·9æÖ¹óžŠÈ` "´Ï!ÙåMDw"KßÊ{F€OãYàÖÇ[ÜýlDñµ&7Ý¿_B1ÙVƒ#€WTß,SÛKð8wýàY°o¢ÕʱxVñþÀÿ¡dœñî½·Ð~‹W +ÜÞÊÁ ûAAM¨›ñ²4 FðÖ~ûý‚x{6£˜x«»ñ!¼HùFÞGñnBÏØÛQòR‹ë«ÛÝýîŠ&Ö½|÷1µc!JDiCrÇ=Üu×-ý"çÁLRéééaøðáœxâ‰}¬ÿûÏqK—.Mê_ºtiЬ·†AçB1äirFMMMQ)Ú@ «ï‡#Øp8œÒåV®\Šú·Ð^ƒ!T–<½õx•Ô,Æø~¤COÆs ù‹eÂVÈâ|o/?[qÔ!B¬G¡Yëî½{QŸŸáþoE– Õƒž4æ—Ð3`é¶ãmšk™I:ÐÄ´+šèâHò°Š|u(kñi´£ÅuOE¿çî{cQáZöÞ{žzêµ~mSe¬L¾ööö‚ªMNž<™áÇsÁ°uëVnºé&-ZÄï~÷;.»ì2®»î:î¾ûn-ZÄç>÷9Ž>úè²µqHiйvU)dNjΨ©©!‰ÐÕÕUTTF>;}ç‹ß ‡Ã|ä#Ÿã÷¿_ˆ,Çaˆ4Þg‰eÂRdÍìÈÇ3L^0¹Á,œ&4èšðÂÃj}Ç‘|4Þ†68Œd쯽L'µm¤¢xû¶!rxï—ݵ~Œ{_´R°"Cvn+JdÙþë÷"R´Ð2s°5!¢ÙÃÝãµh%`Ët+Uº/&Dˆ{¹sÆQݨûÿ´‚Ù¾Vw ÒV÷GRÌhd]>ŠôîÏ!+û9wþž¥;oÇo«YÝé{­C &{¢ !Ó„o“¢² à‘Äõý¿P“é®OZÜ+_$ÓshÁ3ñ2׺6¿M$6Á<áúå³îï|õ«æk_ûJŸÂc¥ÖÙ(¶À~.«g/]º”ÿþ÷¿|ä#é÷µ CŠ K­ íOhñËÙ6ŽÍ†X,–5Î2=.ÛŽ·íwš›"zð߇WÎý÷DÖ™…d…á}E6DѠߌÜoQ™a¯—ñ$#[bÛî)F˜fM›U˜î«Eî=îºÿƒ´ño  å¾s6¸Ï¿‚·í“YäFÄ›”ð3¼Ðµg±Ú«(mº‘K;n+š8¬üh¯ëÏ&mp!zÔãH{>Ð}oJƒ÷cÚ,ÁŸÄDõPêÁ׺ïŽA¿áDhÂ0ÍÜ&>ðtîV4©tßæ¾ßìŽ)„è6£ çxdí®/6¢>7ÝßRè»QßnF¿ÑgðVgvŸA‘-V‡¤†ñã›Y°àQS¤šo‡í|ÑÅÖoÎ…b úùçŸgãÆ¼ÿýïï÷µ ;EL@Ëi+Žÿ4Ò´W»¶½é®±Y²–c‚Åçöà9K-–üfw/c1ÎrÇ| Y×Ãܽ¹šrYÚïórÐ^ˆ4öEh22=:âîcO‘×|D$ ‹ú)dúGü¿§É&‡ ’é.pçú’gŒÌç#©`2Þ g’뇕xU÷èwZb“ߢ@nÂË0´UÏk®½môMñ¶¤1hâú5š0¶¸kýÏßà÷ ø-|K3¯Ã#äU(nÛ?é[]› ¬«?YÓÐ ýxÚÑíîóx©ß¿DdÅsÙ6ÝÁgËàmZˆo”6˜SqdéER„í h)ɫ첑I ²[P¢Âyîœ÷!‰c²D‡¡Çk±ûþ(À’]¶àEÔºkƒtÙÓ]»6!gÖOá Cäóšk³iÏ–ã—nÀ+$ÿ2J¡­Jæ Í9ä¾c›ÜÜ}÷àÅÇQˆ£í”b»šœŽd£¹kÝ‹¤+'ºM°¸vïƒW·âMäàÛä>ïB™¡Ó\ÿMw÷?’m‡¨®ífnª‘ùî=+¤odö½²éÛ{#Yãß1–~/lôèýyðÁÛ˜1cF–s#ãP(”ª m¶?)­Ðì¿b‹õ·µµUôn*0Ä:[盜‘L&inn.øG*” ýVy0,ªK2™äÙg¡¾Y‡ hIl‚VÇâmî½ÈAX,F©Üçà97!^j|ø-5Ó/G#Íô(DJÿEŽ£kñ,´çPHÚGÝ9×á9¥V#«ø5DŽ=ˆt¦!²5M4„V PBË#(Bb³ûüX÷û;dõZãE®ëñv?±Ò£þÈ“or÷u,êëÿqï¿M ã³,Ó³óTô¾1íý刘q÷mrPÈý?àλZ±<‚V*s½"ãIh☂&®Ç]¶áÅF›$dNÅáôÞ±0Á¯¢ V# '¬Z_žt™;·ùBöB« ß7òÞ÷žËªU 8wqð'’ØÊÔŸýgò¦¥u›•]j˜^[[[Á›:†A§Ã¯744FóɇBÚŸ^__O{{{ÎãÓÏÐÙiß™‹¢ˆ_D ›ð4SKQ¾Œ¾‘¦o¬Ðº¿8®Oú^]Èjû9Þ†²» 2x'šº‘•»‘Îj÷z´£ˆŒ¿ƒâ—Ÿpíü"‘Qô-Ú…&™«Ø¶’î~ŸEÑ ¹\Œ¤‘£Éáeduÿ …Úx3ðj6[¤ ¾þ 0iÒD–/·jpÝH_]…4íË1/CNÇ;ܽüÐõÉô­³=ÕI95íf"ùè(º/Î:¤‚Ix%PRNB £É´K7W ú:ý2}æ™¶s–² KCCÓ¦ÀêÕ½ˆhDn¦‡iÒ -׿Y_þL5ð2Ír9DhOÁEÈò´h s6Z­…^%·=Û…Wbò¦övD7£eïw97áÕI¾Çý{2"‹n°}#¾ÏšÐ¦¥wÍߣ‰b2ªk½ÉÃsu’ á•Ë4 ZN¾;#ÓO·P¿q®ŸŽD«€aÁÛJë7®_ƸkÛ.ÛvÎ(žƒÓ´í]Ýy›QÆ'ˆ¨î<Óð†,ºe´²°M[îÿf yâkˆÐ#™Äö ám%¶›;ÿdIgr&.CÚöEç4ÄÝó·Ñký³M¦Ê^=ðÀÃyì±?yÞmQì(™`¡~é;.å õ»êª«¸ä’K*zË«!eA¬»tÛçÅèP™,è|íJAMM GywÜñÔå·!‰Á´AhÍh0-F$ä×›Mgô'øC³¬øŽÅ<›†Zë®e„²’F åô¼P³W‘ƒ÷ùžˆœ' rL …«u»ï¯Fak]® +Ý5߬²)hå»G\?‡¬Ù‹]{&¸ö½ Y¦× ív4¹DÝ1Kéë@³(–$Á`È…NY„ËD4)þów¹ÿØ}o.*­z#*Œ” ßÎÆËŠ4ô"¹äCˆðöùkÃ#ç}Ñoüš”ZP4Ê DÔϸã¯DÈn(¶y úÝjÐo½ý^/¸ãm"±IÃ$Dî·»sÔãiÐ~«ÚêØ³c[t@+ Kªu}ø]à‡<÷\;·ß~;gžyf–þ* ÅêÆ™à¯f—®gg’Fü²H!×ÎVÉ.‹1oÞ<êëëÙ¸q#?ûÙÏ1bDž³‡!EÐ6KfKÏ.¥`’ÿx«5‡‹ÚK°|å+_àŽ;Þƒ©eÜ6à¥doEÜ+ô­gq¸ö #¢2-Ò ÐüÎÁYÀ½hÐÕ!KlOd©‚–âV+ø^Dn)LAÒËGÐÀ/ºÁC²Çñ öø±YõÿÆÛ;o=*†4 ‘ÎÿoïÌã¤(¯½ÿíÙ˜öefU…(1J ¨AeË“¸äÆ\cLD½ILŒÁ‹q#¾¯ËUoÜXÄDÍ5ŠroôMrõjŒâ‚l#23ìÛ° 80 ÌLÏÖËûÇ©§«º©ê®ê®ž¡¡ŸÏ|`zºªžÚÎsžs~çw^BB2 1û%ÚõøRŠÏF í=è…,ÿ‰Äç‡kß9¹Ÿkc9i=ö%²Z8ŠÜϳC| ò |ލ×>ÏEîÇp„™2€½ç2ÑÕiÇ}™|T²Yu³½ÓŒòÐl¢IwüzNœ”®ž¥µµ•“ FcoQT¿ÚÚZxà8€ÏçcüøñŒ?ž¾}#ï¹T;vŒE‹ñÚk¯±lÙ²’]VV/½ôO?ý4+V¬`ÆŒ®žSJhÇâ [ýÝ)mÂúí°3œ@M*C‡eùò·˜<ùJ$¶¨$•@6RÕq£‘%²ŠªvN­è…ª±«â+V±”zÛXÄ#ÿbxêãXx}Ÿ!KWUr!b”ÿ1<ªÏa-z±Äôrf#–!†f bd”üe‹a<*Îü4âÍf!!‘ÿ@<½©H¨àˆfÉ5ÚX_Õ¶­DO ªë£k‡è“·óï…„^AŒÖO‘ ¤/B»û‘öýÛÿèÌ£Þt‰Î£ÚO«vÝšo?1nŸ£÷ÌG<_¯vm† žô!í|/Fde·!¡–´ãöÑîÅ($üÔ¡]×MH"±‘p¦ÆÄ€÷ÕîÍÚ8¾B|ÍÀêê@&XŸ¾•F’‘Nb(ªß AƒøýïÏ“O>É~ðV¯^Í;ï¼Ã%—\—’Ýž={øì³Ï˜3gŽûcN¥4œØ—Ч•Á`ãLJ˜vÂNbÐ~¿ŸÆÆFrssCU†ãÆ]BUHÌu7bÀ"O-ӛϷ7òâ“…ÊÓQÚ }‘©zbËΪPúÐißQ»Ähо» ­¨ê¹/‘ÐƒŠ­ª¤ßõˆ±T *µDF=FQúghã‹4æ»å¼êL2á!g#eÞ»C=©vkB/9d¸NÆØs€úúºß¶¨¨/:‡; Q<©×L„êöÿþ#D–óŸÐ»‘eZ›Ð…„F!F»—öãAÂ#cµóx1¶HXÀ‡LnƒµëQLeHR² qÖ¶¹™ˆZd¬êˆ“ÎY¦m¯|¬v$L¥ž§zô0X+zSU ¤djÿ*¹R0<†L5Ú1;gç|Dp ™™{9zt‰ Ñn*‰ìËN7¥d·xñbS-說*{ì1.\è(7e)g ;::,圴½RáŒ@ @QQ‘«À´ |¡·r_/@îñ&m¬ÅˆQƒÜ§ˆWlì²­ ÷íøý g¡ÜGx5¤*³W²«Fž½’ è©ís™¶ßÈûþ:™™ïQ_¿?¡gWh» cçÎKSSSHÉnÇŽ,[¶Œ¹sç2tèPfΜINN7ÝtãÆEv0J §”V‹FQÌ €¼¼¼˜ x‘hjjŠŸŽ¬2´2èÿþïÏpï½O"‰ zÂu/”Gªô•B™b?(J”¢Ì¶%‘¹WûWU/=šú IDAT‘å#ß>Äs½ ñš÷ {Y#Cú²”ýY"ïÓ>³Â1„~÷ âq~¾}è eÏF^ôaˆ7þ8Rìñ‰v×jçògÄ»‰LRiWMW£ e ¨v õa¹‰¢¢èR¢™Hl÷$„°I ]…$%ÑŽõdpT;Ö0t¯¹¢=¢&-´±¬Ñ~ö!‰ÑYÚ¸®C ¦g v2®×Îc,Zz]ge$21u×îÁ&í»È3ZÛ&_Ûï$ܵ}²VU†uÈs6@»ŽÅ†ãÄZ5V!÷â;Ú~*g¦^½ÚÙ²E<èx¹É]i ÷»ßqï½÷ºrìd!¥bÐv`þP±`%^oí¿Õƒg¤åÙ‰cßu×O5j(ßýî‚Á"ä…TM9•¤d²¯A*ß|è¢FG´Ï7 ÓÌÚ‘®Âƒ‹£ˆ‡ªªú<ˆá~ñ F Flâ!öׯq5bp~§»Ð¹×Ù„‹ø4¡—ijûœ„&cf; S3Û¼ñîr‘˜÷3Úgw ¡1èIAÕqÅØ$@ñÆŽ=?LçAUžÚ±ÎAVèÍþ/¶¸I’~]»nÿ¦U…~v!U“JDêÄpf —£_‡xÂ[µÏkÑ VŒ= U1ˆ2ÎJöu‰¶Ý¹ð ’@¢¡á!ƒhÅMŽ·l;ÙPÔ¼“)g ãéªbì˜h0’ʧ ¿’!5‹c[Q‰f̘AKK ÷ÞûÿþïÿxIÐ L”NGº ÛùèUxc8obL¤1•èzÉC݈nˆÑÙ€^õ¦²þ»´ý*†ˆa‚°Œ2Sûw.’$3ƒJ8~¡µIüMA^þ7ôÄX¿Œ”_nThã0Jx*B;Ÿ|òqèÞ(zÕ£>Ì]wý™0jïý}m¬/jÇ»Q;ß×µq(A¥ 8žðåýß´óiržƒÉ§)zy {µq{‰ïbìG" Ú&í:^­u©vJ‰y²ÊX¤]/ö˜‰L(~ÄÓ]‡„j:Ð'ùRÄØª&µF n;8€„ž~cøìKà̘¡_cÙ6„+ÚÅS¶l¸Aïë ¤\ˆ#šh¿ßï§­­-Tx) oFÍsZxÒÒÒùWq윜K²½Ýâ™@ À·¾u5ï¿¿]x¿ò’)oub””Gjäÿ*]2dYÞy‘T›yq‹‘%ò@ÄãÛ†Þ&Ê£w²\þ9²œŸË‰´3#ÞAâà7¢WI®B’VmÚ¸Æi?ňRß$”±I:]‰ñ÷ѽþ0Œ2zÑðÛPZåååŒeÎR(((ÖÎMUä5jç+˜؎„[zk×ç_µÿ·i×ñRÂ^d²4K.)Âv$wðij.Bó€¾âPIß¾Úq"žu¡ö{íšìÓ>;™,º#,Èä× ™¼¾‚„=z¢Çé7 ¡“ᄇ>”P’znM3ºçC§û G׸Îj8~|ŸÉ5°†™¢ßï§[·nq‰ýGÂIˆ£¹¹™?ýéOÜyç 3ÙH9MZ…òóóC•†±Â±bÊ‘PE2j)geø¼^/¹¹¹¶¾ÆÆFÊË˹ýö{صkòâ AÏÉGŒÊZäE:½ƒ¶Q~4vÕñ„¶#±b¿öÙ@tmdŹ[Ûç&Ä“=¢}¯]^UØÕk?»Ðû*5·ó¥¿1Ùv 1,A&’ï!/þGˆgz^ í#1òAÄ.@_šKH§¬ì ¶nÝly= ƒ£HÛÿçHüփΤyI»V· T¿ïjç¼ñìkÐEî»k×R‰©Üª ,ÑîÇíˆQ¾]°EÛo3bô´ÿM»Î;µí'!±Þ-Ú5¸™Ü*´ñGBN_C{lEÂj¬ªª]ûîõœ¨%âCﯨjòq *gè›HE•Û?Áñãµ$•LÏÊÊŠKì?N ôÁƒY¾|9?þñã{g!åBÑ z677›VZmãd¹£*“òóómDZ 2Mš4‰M›>à­·ÞâþûËÖ­Ÿ Ç‹Ð;Sï@¼¨ íóˆ!lE×eV;g õKÄCmB—3UŠ*.yò2Þ¤m{z•¡mS¢§¡Ì™]#ˆ7½1Xg ÉÂ;¸î"Äcÿ-âQ?xâ¯#F\yàJyNé5w™Q³@é3£]\ô’û¸úoµ±ÌÓÎ?°‹^A :sæ?Ðùëˆì«]—6ôpÀsHQÏߴ㪕Oö½ôûµ™ÌÎE8é_jç9²ÊyF;çÑH¨ª§ö½gµÏ{ ÷ì2ÄfiÛ=ެF÷žÕXÊÐU KÑ›@¨çÌ„¥®×ÆúâìãÓOß5¿Ü ’‰FZ¬14â¶8’© ”§­ÂíííÙöXíz¸ªÄ…4ìÀ±‚‘ùÑÖÖ5ä²~ýzxàAÖ­«âðácF%ºt–ƒ‘7@—¦TÙ{%"¤˜Š~v)Né‹$—ž zÌò5í»J ºñ¾?GB+Jù*ÄüˆÁnC õ ÚwÿŒe” ê{ÓÐ+ FLèVÀÃÞ½»((¯ÐÊëzòÉ'¹÷ÞG´ß†#Z„ï<™ ¾ƒ$á‚Úùü1Зhçy¯ÿŒLZßÄ÷¡3mæ ¡¢fô2÷œ±cÇrÖYgqá…_§²r2âá>«žˆ݇pax?zÏ»…ˆØ®¨¦ŒÉÙê*"ñÒ¿ ý…ˆÔ$ŒÒKûýÚ1†#Ʀ ]¾Ô(:ä‰'«ÜR‰AµT6z]Ý»÷ÕÆŸœH¨à"$Qù;m¿s´cü7¢Üö²œoÖ®ÁhÄ£V†Ü¿lAèh+‘ åà6d•r§¶|í<е}¨îßèÝnj‘Ij02qùæÄÚ¾!ÆòH’ñctFHOí»ý‘äêí~lGŒµbßôB v⵫žˆFCYƒÈ¾þV;æ&àïœ}v>þømW¨qJôÌî»dÜά¢¢ØÚ |ôÑGôêÕ‹‹/¶#ÉÚuHimÖÐiÒ/š5Jª‡È×:rÿF}[ˆÎüˆ×@«ýZµá²*âQKÊââþø|ßCRqw R¶Ý ) ùéæq5bprƒ— å5KBtĈÁTT¬‹zmŒlŽž=û!Þcz‰ú-Ú1 ‘„Þv¤f â“€ˆg»Uû9†Ò~èr¹ÈĤÚ'½$W_ör饽ٰauuûÛ^””­I­†" ÃÄ“Îʵ¿] }ö)£ÎAbýk×óIôn8ý´ë~>F µN;íÈØŒÜc6žvô˜zr¿·ó³Ÿý’‡šçwÙiÁhP¡G¡VŠ—-4ò·¿ýÑ£G3f̘„L¤d :R:‘ì¯5/–6G_."Ž£¸Øm£!6 XÅi›ó3ÄëꎔUß‚5Úçÿèa4"Þë0Äc} I}‚xŒ;µý¶#Æ©'#¦qVç«ÄræÏ¿—ûî{Ý‹‡Î9HìAm<ÿGã‹HÌö;ˆaËF¼úáèدµíÌ–#«„ ¬_ÿ?TWo'##ƒµk×2sæux½‡µïö@Œ±Š%ïC÷Ú›ÐéŽÑþ]¦}_ÅÉÿŽè\«Â¥Ú9ŽD ýgÚ5mD/í.BâÎãZ)ÝmA¨z7 †ü àÿû¿IŠ·éÕMc£±·âfWVVR__o»›Š•šÀwÜA{{;uuu,X°ÀTp)¡óJ5Úï÷sôèQKCäÔƒ6z–v8ͪš]Bí?;;;f“Y§ãWMoUØ%///j…£òü•wiLŽœ‰$ÌžC-Ü‹¹Ö°RLSB÷HÜ;ˆ´+%4ˆ·ùâªb‰Ÿ"²ÑÀø b¸'#qç!ˆ‘R¬:ñÓÜÜ`ëÚD¢ @QÛƒ4[;î?#ËüHXfÂÅþâQG “´sS+§û Ìì…܉L<ƒ ß23+©««ûVFF«W¯æšknàØ1ÿUüîBíØ¹Ú1¢7ð#IÄbmì*©y>âÁ7!ÍdQMlÏAV}Ñ“û{­Ú›)zç.<xä‘ùÜzë-aãv˃ŽÕÜí}©çþÕW_åþç((( W¯^\xá…üð‡?4}wvïÞÍ£>ÊÂ… Mµ8žxâ FÍ•W^™ð¹‘rt²çü~?^¯—œœœ¨žm<’¦>Ÿï„æn@-ë b2JŒE@À$Þ†¼˜!†i;’,TIÆtεRÊ;Œ´I„7*mC¼Ç刑Œô1<Œ”‹?‰´·ªC ÙÄȯBŒÇÄCT:Å’×8pü¸ !!ÉÊ[oYï%$´@Œë̼yóhii¡ªª ÇCuuµc5»ÚÚZî¹ç6oÞœV³=~k§¼æöööPœ8§¢wa1ûns³dÅíN*v<è@ jï•m+®xá999¦I”‚‚¾È’ø×ˆÄä×§˜™á~d™D<ºÕH1M#b@f#žàn$©æEŒÂ,ÄS.DØÿ©o5z¥ˆ#}ìØá¸ÊóU†@ @ß¾¥è2žÃƒ5) Å+>$©×™|&p¢^…©ö;€$<=èNÔò÷/HhäsÄHþ…ææ/-Ǩ&Ncª££ƒgŸ}–E‹~O]ÒsîŽLªS¸R5TÕ§>m =‘˜ót9Z%£ý¿QÛ¦ˆ!Cúò׿¾ÆàÁƒCc²bN8YAFƒZùÅ+»È¾ìvS‰¥f§ðúë¯S__Ï­·Þê|ðQ’t"7Âhœ]ËbyÐFÝ:qÚåÅìû‘!˜ÈÚj,j¼ÙÙÙø|¾Ð&¡œ\d‰|òòŽAo‡e„Z^@¼²ß¢WÅG ]rãú±ö“…p›ófÀ$ö¢71Qû^oÄ“SÅ6ÂÜ8r¤.®Î6*¥&%]Ô¿I`^ÐìnÒÎå>„ó[ˆp™_A 툗?½sÉ$ö;ÙäÈAd"xIˆ¶mø‘âòêž~þóŸó‹_ü"ì»7näÍ7ßäý÷?dÛ¶½ø|mttE&Š|dõq™ü@O6ÐJAA!'~•ûïÿ5£GŽ:&£±Scòù|a‚c‰–n»ÙÛÐI.Êî;9dÈzôèÁí·ßR³«ªªbÙ²eÜyçÜwß}ƒA:Ä#<sN‘r4Dׄ¶ÃkV¨bW(ƒgÁ`¯×kiÐIÀœœœPÂîþ­JÃ#÷ëñxb2JŒÜìaT’ßïgòäiTU}I0ýYîzCcÄoG¼³þˆþÃ#èüZ’$ü‰gžë(-å$iø'ÄË»IByø«ÒÜP½½444„ZEÒç¬î±òš#“FG¥¬lbĺ#†v2Q\Œðš‡xü á DßkcËG ö $„s³¶U‰¹^;Ï\ÄPÏ~Möïßn:ÞHÚÛÛÉÎÎ3Úf^6èžm4$ƒyaæe'›XP±.Üh+çt_v¥F»)çAÇB´±Y¿A#2‘ý[1KœzfbLVŒ•hcQ/O´רâ~ùò·éÝû,Ä{ˆPâJcŒö~déü1bh# ¾okÛî@8Õ‡Ï4ñJ³µc|€ÄO×#AªAnNNG6‡Ž)£<9/RQ…Lº×¬£gÏž Tƾ}ŠÂÖiwõ„é° ©pœ‹xú=‘rôèbQHhdCÿ32¡(ÿ+´ï7"“×3ÀÆŽ-ÆçóÅ4¦!}ŠÈ¸¯™—­&.cñ–±G_2aåeûýþ0'*š—í¦íd_© ”§‘6ö4ÆxãIúE"RÚÎx¢Á.uÎø]…Ș¡]ˆw•‡hïB<^UR¬ÄšŽ#¡€íèåâÏ"p?AŒT’ˆz‰~1j¯iGúž¶ïÚ~7jŸByÎ3fÌäõ×—šŽÓ¬×œZ(Õ45ñš]ƒ-[ª4FGâ ÷Gk ñïûÏ÷!tŽDŠT]sµŸ ‹UŒP×G:¡?õÔL'•ˆkkk#++Ë–§kf„#½l£§í–´f4CmL‘Í[Õ=rÃ{6ß.RAjRÔ@G3z‘³Óo0Þ›egßñôITaˆž\4~nF³ åñ\}õ7ùóŸŸê}½Cx$N|â)?‡xŸ¹ˆFÃJÄÈ~InAªƒH,öÄPUû›¶ÿm$Ýøàƒ÷?>Z×–¡¼6ÚR¿[×^ZÌ7Þ¢;1ºÕÕì^$QúRÝx/2Á¨ž‰ª<û $¬±ñþ[FÅfí¼³‘ oðÇ+ýÊpµ··‡«@ —÷kåewtt„Ñ1Õw;ËË6›P•Ÿ‘a«x¼ÛT1¸N‘’1h;m¯²³³m ô;åN766’““ckßÁ`ÐQ×–æææPYy¬Œ´òsss£Æš£­½½ÇŠÕôAטþb”Õ>ƒˆ1=„¦‘°D?Ä£¼JûÞû·¢ ÷ÄhG»©@ŠzÐÑ <•dq›3m|ìªåÙJ\* S»/€òz'2>x÷ßÿ_ˆ~ 14J”ôg#µg¤âj$ÞÜ‚0~†Pé ¡Ϲbà|¨¦³o¼ñŸLŸ>ÝöØÕy+¡;F]e¨ª«·QXØ[;·jÄŒ°MžAbÓw!¡?"‰ÍáˆÆpD5n9æ!Ž:íû>`,W\qb×lü*¦k¼÷VáXI8«ë“h,ÛMOÕ¸Ú³ò²#«ñ²# HImusŒœ×ÂÂBW—oFѤÌÌL×ú¨ER笴®#·Q?F¦Äö¸Œ ³søÕ¯~ƾ}xá…­ÓáûèB>AÄë=‚hSüa.ÌC ×­H|ú}$é6 ñ”?EX>„Ý!Íj'L¸üÙl¥Ñë´ËŒ1ƒÇãáðáýôéSŠxÆ[‘XúóÚyŸ‹„iÆ#¢GH2ó¯È "O;÷…Hbµ ]Â5CÛ®Xòe{ÂŽ­hvÆ9±˜%á"﹓ý;eÇ~qŠhZÌdHÜT1΢Ú JÑ.''Çõ‡È˜`ÌËË£©©)öF6`¦Ëaä)›!2ÖéiGó¸¢1Œxê©GèèòòËÏ#:ÏJ¤?‰­!÷ÛHÇ;ÇZ$æ:‰G€DÏüˆn‡h¥wïžlÝZIfffˆOkg)ïÔkŽ…¼¼<*+×ò•¯LÐ>ÙŒ®š÷²2ø¡Ü•!]_î@ 0ÈÄ4‰=#…!¹È*ây`?gu~è©öO±äg£!–—­˜;ÙÙÙqå#Ô1¬¼ìHO»+bÙ‘“• y¶¶¶Úêƒèvr2™HIm¼ðFNsaaá =Ð$`<ˆE³ÚFçh193ËçóáõzC/’ŠÃF{©,x”«®šÈõ×ÿñ("†ÙƒxЪçab¸Vk[nBxÀYˆ¡Û€*\>|ëÖ­µ”^¶”Wº#‰xÍf>|8k×~ĸq_Gbɪ¥Ø%Õ®ICŠVþ€„i†¢«ì!+‹íˆ—]‡P X±âo€NŸS²²n¨à¦*\­¨nñ&Ǻ?ÆD¬Z§3¼lãd C¥ôFFöy<¢xiW¬?šPÀâÅ‹Y²d åå实›BJh0ç4ƒ;´9•ùŽÖ2+^ï$QÕ9§ÇT=UñK4qäËû­o}‹ææo1{ö5¼÷Þ ÄÐöÒ~ò%}+RÞ­º„Ô>ïFQQK—¾Â¤I“¢ŽÓj)ßÖÖò Uk$7_þ@ À°aÃX»öSƧc&Rþ]‚ÐäþC;¿ËDbás·# Ðfăò­Þá¹çæ“——’…u+,f„z"Ãn‘^¶2¤NcÙ ‹r÷é9Ÿ,¼luœÈçH=ﯾú*»ví";;›úúzzõêe¹¿Ý»wsìØ1-ZÄk¯½Æ²eËÂʼ«ªªðz½ôë×/iç”’ÚçóÑÔÔt§7ÐFéhÔ9§ƒ¡Ž,v½q»'fPÕh‘†!Øêå}óÍ7Ø´iÿú¯?£¼¼ ¿_µO¥8WXØóΛÌ÷¿-ßÿþ÷–õûýx<žPÕ¦u.Þ¤‘±(äœsΡ¹¹™~ý†ÐÜ|¡Î5#Ò›C‘’îUH :ñ¨G"ŒÂ{Þ†´öú’ &pÍ5×àõzÉÊÊJJa„“Ux š—í$$cËŽæew"À7Þx#Ë—/çÃ?äþûïçèѣ̟?ÇãH(©µµ•çž{Ž ðÞ{ï%mü)i U8Ã-㩼Vå­ÅÒ˜Ž¬ö‹…@ @SS“-v†Ñ˧àñj#«Ñ¬+¥^¼³Ï>›>xß’âÔ±# ƒÕÄ¢âöFjV¬R³É àË/wó /ðóŸß„qz"‰¿?!†xb”#L–èô»b`/gŸ}o¿ýßx<žP,8&F48IšÁ,–­bÌFkvvvÜ÷8š—­ëwn,;##ƒÂÂB¦OŸÎ”)SÂþöÎ;ï„ý®„’Ôÿ•±(//§¹¹™;3-[¶°téR®»î:×Ç›’BATeüHhG”ú^|q!3gÎŒzÿÌøÎjŒvÔ“qcS!UíÏ8£ÁxÍŒ¶‚“X¶ôûï¿OII‰­‚¨¹sçÒÔÔJÚ±cË–-cþüù¡ïL›6·ß~ÛÖ±â´6Ð*ì`WSYA1/¬¾Ikii±5£GèT|F=ôJHÉmDzÍ‘…‰z…n0¬ö«Æid88çŠ+˜5ë¼^E3T±3?}û󿛝rî¹çÆ=¹¨ñE»ïêØ]Å3†X!;ã´‚±œ=Ú»fœŒáJ+/[½ov¯û[o½Å¸qã8ûì³c¹‹‘’!7NEËS]Hœì3V€YK«h!#u.RÍ*Ü`2 ¸«$”ݰˆoKm“l†ƒº×f±×hãœ8q¢ÖKÐjrIdE¹mäõTüûììì¤g»!«‚’X×S…NìL.‘žs¬X¶ÓëÑØØh»ÝUW#% t"0KÆâGÂ,™,ê\d¬P}¿££#,Ü 8‰5[3[$Y^³‚†C´qÚyù“EŸS×ÓãñÐÞÞ¿YQR"•uv½Z+D”¨1¯§bÞÄëù›yÎÆ"õ¨cŲ)..v<Ž®Àic ´<»²Vˆü¾ê\¤YpâäØ hnnn¨ÅöqCxÆÌ°9A,¶ˆI¨hPlj5¹ÄÃjpÖ ú˜{µ±’¤vW-¼‰Q¡¯µµ5äõ;YµÄ‚šÔsª&;¼ì––×ùôÉBJh»5cìÎLjÔ¸?§Ô<åýÆK‹Upbµ­Y™s$…ÊŠÝ`'Nh7‰ÔK¢öo Ѹ™„2ãí:g´ð±Ì>«20 öG§‚Ž{¢×(ŒÍ•ÕsÍ˶Sh„š #¯Q4/[A©û¥RÒ@ClÉQ°Ï=6+‰u쎎[jvƱ&Zpb7Ü`öâÆ2„nxͱ`ÌÞ_Z'a‘hHV<ÞÈZ1Æšý~X©ºc…D&H;«õY²&°gücŲ£­ìƳÍÞƒ}ûöÑ»wï”1Ð)Éâ€Øm¯233mPc1ç`[ZZB/®SÏPÎÈäa¢0fã•1L¶GOœÓ.[$zžÄb8¨ëè¤5—Æ ÒÍÎïF¨ç\ÑçÜ(7®çoj²62FTÂ×ãñ8¾Ï@€/¾ø‚¶¶6.¿üò”1Ð)ëA[Á‹µk@í„8ŒÔ¹ÜÜÜPBÂÎx222B¡ 'a2 B”¸¼›ž IDAT3¾PFÐb p^4 »áÕ«1PºÑâ–‘É2'«·E "ku”H¸‚ÛñìÈÕ€J(«ëÓÚÚj{ôz½¬\¹’‘#GrÖYg%<¶ÎDÊzБ¢ýÆ$ ò6h*+oÛêïÆ†­êaQÂ4f°JÚñ;Ó›²z¡"‹)œz„É.¨Ýø+ŽxÂ"Ñà6ËÄìÞ+Ç Ya¥xŒ¿ÓBÒHÖiÒ°ò²U‚2++‹PQQÁ•W^é¨xídÁ)áAG&ÛÚÚ¦ÍAôF°Ñö-ÖË#TÛÙ©TŒÑÊœˆ‡6§ÌDcä9˜;,ŒXH7ÛxïÜiõœ;IR…xËÁ#ï=˜'õµ-Y4I¿fã´Š¹/_¾œÆÆF***8çœsØ¿?guVÊ„6RÚƒVž-èE ·½²;£ƒÒP‰ò@têœÙ÷ÕçñPç@7:ʈ¸]^ îN3Ðï÷“Ýež¿œx„‰ò‚í Ú9DVêÅC™ìŒshoo­VÇ+¬XHäÚÚÚX½z5dÈ!¬Y³†òòrî¾ûî´î,x½^¼^¯iP…?ì&‚A½o ‘ùa4úVßW¿©sN+NkõÒÚõZ:+Üà÷ûCá#½Ï‰¦‚Ü6:f×T}žŒŠFˆ/te\ÂÛ¹¦É.W¹ã*P}nnpê]Ûå°›¡®®Žòòr.½ôÒ¨R¢©‚” qdfFW´sâ€ðòïhF 2fô @-sc%¸â)¤PH4I FÃyêÚûÊųH†Ñ1^SbP¼tSu#Iª¯Ñ±¢Lš…šTâ:Yñlõ¼šÅ³üD›°£…4¢! ²uëVjjj˜5kVÒB.”õ ÕCjõ·hI¿HŽ?N·nÝl{OMMMäçç'ä5«b‡D €YBÏn芥ºœ,á;#Yj•Dsš(‹†d'ÑT“dußÝž\Àð˜Ù55ÞÿxWH¬]»–ÂÂB&L˜{ƒÂ)i éOeáÔ¹`0h» ŽâB«S'³u²Å@7ddd¸Çw §«E½ÌÉÒœç†Ói¨)ÙZ#`n8Ýœ\’=IueŒÅ>v'—£G²fÍ&L˜ÀÀ]_Wã”4ÐVI¼ÈíÔ9cLÙ *Öì÷ûCa;Ej[•¼LV1E´Xs¢ql…Î`h(Ž2&nN.Æc$j8­&UžÌëäÔpÆ“|ŒÒp ‘ù"»“K0d×®]ìØ±ƒ3f$m…ÕÕHYm$ÖG"2‰ù7EËËË ÝôXÒvÊ´ÍB ʨøc²éHvC&‘Æ%V©rW†Üš\ ¹ºÙÁ ôâ‹­rsrw [¬’ꚪw²œ 'I_ãýß¾};‡Dh몫®J9f†œ’Ì n4꜕N”:×YÞ`¢±f³Re5NÅ>Y vË¿è ê™Y"ÐÍÉ’WÒnt.T¸!++Ë•ðH$â™766²råJ<ÈÆ9zô(·Ýv_|qÔí¼^/7ß|3EEEôìÙ3ÔÊJáæ›o&;;›… :>Ÿd"eYN`W4)nˆ™yƒÆ |"ÛÍb ³ReÕ~KýÝèm»…x ±Š}Œœ\•,M&õ ¬‚aà‘ì F%+K7JÀ#¡Bñ<³ûöícãÆL:ÕqñÍo¼Á¬Y³¸æšk˜3g{÷îåŒ3ÎàÅ_dòäɬX±ÂÑ>;)k T„٥Ω—;¯9–îAä kE™Šf¬:#ù¤¼©ÜÜÜ0o0^¥93¸5Á˜U=*#hljÏýŒ§÷"Öä'NÚÉæ6ƒµö´1¤åDq.Æ÷"¡£ŠŠ ššš˜={v\× ¦¦†Ë.» €Áƒ³oß>Î8ã ¶nÝÊþýû¹á†Òº3 ijjŠÊ—6ByÆ>*æ$àÔÃJf{(ˆ>ÁÄ«]ÉM7UÏÌ î28ÊŒ·kŠÜ覫¬Z±q’÷wâ™Ç+•HH£¥¥…U«V1tèP&Nœèðìt 4ˆ={öpñųgÏÊÊÊx÷Ýw©­­eþüù”——S^^Î×¾öµ¸ã6R6mdE˜}ÞÒÒB÷îÝm%QÏòÍX¦íö‹d,L0¾¬nr\UÏ‹–xRcM6 ìųíŒÕ Ï6zæ*Lã$æn‰TìE·q¬jUq>xð ëÖ­cÊ”) ·¨òz½üøÇ?¦G2|øp ÄÔ©Sسg>ú( ,Hè8n#e 4è2 Fê\{{»-^³¢Î)ãä”7ÚÇÈ<=üàÇYMjnSOjyœ™™™´dc"¡»ô®dµH8U´k4$[?ô‰R­`ìŽ5 ²iÓ&:Ä´iÓ’vS)m šÀ‘Ô¹¦¦¦°®Úf°Jšé D>T¡oa·¨%’)àäeM¦æ´‚1ô£Œ‹ÛÒ É ÏE^×@ ±æ§±•Ñ.Ϲ3½+¯Ùl¬ª¶ ##ƒÕ«WÓ·o_¾úÕ¯&e|©„”A[QçbeÄ•¡0{€ÌtŒqÁdK‚‚=‘x…xF¯9YÚ VñìXql'±ádN”êš©Œ ß7Kªå6[åŒ})ÕçÉÊ_€y/B;cmhh`íÚµìÛ·;w2~üxúöíË AƒbÓŠBWSSÃC=Z¹l:;Hiº¡¡!”Š|¼^oA!êœñE5V‹{ž`2JÁ#ã‚ê³dN0ñzæNbÃ^Šv ³Â¤x$7;+Ü`d)ûœ|ÕñÄ©÷ Ù¾};»wïfÆŒ477³jÕ*rrr¸ôÒKcnÿÒK/‘ŸŸ¢ÐÍ›7/D¡S˜={6úÓŸbÊ?œlHi:šw©h—uÌ)aƇ1^~«N¼f'0fßUb5;;;Tõæ¦'˜¨gn¥ÞICóù|1›$c(Àêfô>;¬³c$3Ü`Řq‹Ù’HìßçóQ^^NNN³fÍ ¸¸˜+¯¼Òö>¬(t}ôÏ>û,ÅÅÅ)gœ!Å ´ªr3ƒÑ@'â5Ûõh#ù­fœQ+#ØJÑ–Ðv¸¸váv-Ò*å¶ÌÌÌ÷êÖêE!^ïß*4f,öPcU‰édzÿ±øÓvÂ"±&n;! +;vŒÕ«WsÁØ eXÁŠB0iÒ$&MšÄ­·ÞÊæÍ›5jTÜÇé ¤tˆCQÏÌ`Ôô·àÄMfƒÕrX˜dIQÆsv’¤‘H¶¤f´c˜éŠÄËqNöyD–ÿ»¹z1ÂóˆÆQœüxQ]]ÍÖ­[™>}z¡+ ]Ÿ>}xå•WB±‹/NÚJ%Y8% ´2Jqq†Ý£‰å ÷ïvLÐMÏÜŠ%$Ýûwº„އãÜÕ™fÇpƒ2ënByØJ¯Ã8V»IÝ/¾ø‚ööv.»ì²SZèÈ œrZ=ðêÿf@V/j²øÀv‘].*žLiÓÎðÝ ÏÅòU6 w Nšñ ,uFIxä1œL†^¯—•+W2jÔ(FŒ‘”ñjHi­fs°×Ð,Ì &µ¯dòzæñ¼¨Ï6K¡ñ5¿¹°°k¯½–Y³f yä‘G–#=YqJh#:::xì±Ç8pà“'O¦  €ÜÜ\ ÀÀ]‹ªdcvvvÕÏÍ—4B÷VÊb™™™I-:‰'FëTû¢3&™ha;ì ;èŒØ¼:†±¨Ëɳ[__ÏÚµk¹è¢‹0`@RÆx:â”7Л6mbÿþýL™2%ôYGG6l`÷îÝäää——Gß¾})))qì9ÄzyÜzI“ÙZAM2*a î%›ܤÏY­222Bç‘ÌIÆi¸,q¥Î(š²ZeØyvƒÁ ;wîdçÎ̘1#©ÉÝÓ§¼¶ŸÏÇæÍ›Ù¹s'YYYäååѧOÊÊÊ¢ìxbÍNù¡;èfug©Ï© M£t“ßì–G-ääñxèèèH:ĉ~ŠñÙ­®®fË–-!Éw¾ótU`6Ð&ðûýlÛ¶mÛ¶…2å½{÷¦¬¬Œüü|šššðz½ôêÕ+aÁÊ`+†F²½f§Z<ô³Î¢Ï™­2Ì&§l#’íѪ±*•ÁdÐ@bTÀÆÆFV­Z…ßïgóæÍlÞ¼™Ù³góío;æ¶VüæÖÖVn»í6–/_ή]»éTDÚ@Û@ `çÎlÞ¼™ƒâñx3f C‡µÕÖ TñŒòh•±v»xÜ)l‰µ"è F‹“D`"üæÎà6GNn…ÈŒH4qºwï^6mÚÄ´iÓâb÷Äâ7O:•wÞyÇñ~OE¤4Í®³‘‘Á™gžÉO<ÁرcùÑ~Äž={X»v-Á 4 (..¦´´”âââ„ ¶*¼ÉÏÏÇãñ„  ZîBâÅ3n ê˜ÑÏ”‘QeÔÉôš&cñ›ÍâÂÅQc0êGÒå¥N&²TTTàõz™={vÜÏy,~s:ÒÚ~÷»ß…<†aÆ1lØ0@^šššÖ¯_¢(SVVF=l«|©XsdñL¤aˆ·xçÇ‚Çã QÍT§›H¾°åônÅâ7«šœœœ¤žØ™ìð±­®¯¢éÅÓ¢¥¥…U«V1|øp&Nœèx{#¢ñ›ÓG:Ä‘ƒAjkk©ªª¢µµ•¼¼<ŠŠŠ(--¥W¯^'ÆD“gvTð:#ÙöÂñªµ·O6³Â5Å“QF ‰•RGÛ§q¼j’TzNQ[[Ëúõë¹âŠ+lWFƒ¿yêÔ©ÜqǼùæ›LŸ>{ï½—&|¼TFÚ@w‚Á uuuTTTÐÜÜ*œéÑ£UUU\uÕU®†"_PIf³ÐD8Ú±D ŒèŒ8p¬[ÌUJL* ßïyçFƒm'Ž Ù°a‡fêÔ©I Ó0Ç)e ï¾ûnhllä…^8a)·xñb–,YByyyPX´h•••L™2…ÂÂB (--¥oß¾®½Á`ÖÖÖЋhÇÆ·ésf‰1ÅjÉÎÎNê žsqšxLDÎ ¬*íð±ÛÚÚX³f ýúõcìØ±IcÑqÊÄ wïÞͱcÇX´h¯½öË–-ã?øAèïUUUx½^úõë×…£lܸ‘îÝ»³páÂЋÓÐÐ@EEëׯ'//üü|JJJèß¿\/±24F¯ÙªÁm¼ •hO¢ˆLŒutt„ OTÕ-…DÎÅIâQÅ‹“É7ž‹ÙJ#Z{åÊ•;vŒ#GŽ0f̘ XÑç·Ür YYYøý~žþyÇç4wî\n¼ñFFŵ×^ËïÿûSZ$I!% tuu5·Ýv[Øg'N 5ž2d|ðAèo­­­<÷Üs,X°€÷Þ{¯SÇj†1cÆ0f̘°ÏzôèÁ¤I“B¿766²~ýz*++ÉÏÏ'///d°£yv ™ŽÑ`ÛYw}N;2›ÀD ¶Û1m+f‹RM2¨“vÅ”"Ç«Æ2pà@Z[[;v,+V¬à…^àþûïgøðá1÷óÆo0kÖ¬}nïÞ½œqÆ|üñÇœyæ™üú׿æá‡æã?æßø†£óúÅ/~Áüùó™3gÆ ;-Œ3¤¨:tè <ÉÝ»w‡fìÝ»w‡u .//§¹¹™;3-[¶°téR[‚á]‰îÝ»sÉ%—„~÷z½¬_¿ž 6››K^^ Sì;vìݺusl4íP¹Œ!‘d˨Bt£Ú甊hFmsŠÛÞ­[·Ð5´£Šèf«&»ðù|¬]»–¼¼{÷î¥[·näææÒ¯_¿T¢0²'âý±ƒdRÌ–Îà6ƒ½Î-V°›xŒ'¤aDuu5Û¶mcúôé ³I¬èsW]u?ùÉOÈÍÍ¥­­-.xõêÕ<úè£<þøã¡úƒÓiÝ»wó裲páB^{í5:::Â’ O<ñ£GæÊ+¯ì‚QêØ»w/ 8áåòù|lܸ‘êêj²³³O0ØN ±èsNt¦­ÐÒ Îmv»¡‚›•š f“¢:V U+öíÛ—ÒÒÒPÅ_$ìRÎ"cÔêxvªÛŒ‰ÀdÆ´ÍŒ¦Q¼)žD©‰GCd§µµ5´rQš*v'ÅææfV­ZÅ9çœc+ù—F×!íAG@%/^Õƒ~ýõש¯¯çÖ[oí‚Q&Ž@ RìS`”bŸÒø=z´k!³êA%¦”ìŠÀx¸ÍNeaM2µG¢yçv*4kjj¨ªªbêÔ©a̘4NN¤ ´ æÎKSSS(Ù¸cÇ–-[ÆwÞÉ}÷ÝG0äСC<òÈ# :4꾬âÙ>Ÿ›o¾™¼¼<Ž9ÂâŋÚkv6ÕÕÕüõ¯¥µµ•óÏ??ÔÄ ¨¨ÈuÅ>«î'£n³Ú—UÜ]çdO4NÃ@jUpäÈ>ùäòòò¨¯¯ç{ßûEEEq!Z~æþûïçoû ,p¥åUiTØg?ýôÓ 6Œ3ftÁ(u¼üòË|ùå—üò—¿$##ƒ½{÷²aÃü~˜bŸ](3X%”{ÛA²õ:Œ*ƒ@ 4Ödp›!±„ckk+«V­¢[·nÔÔÔ°råJ Ä=÷Üãh?vžç|«®º*m ]ÂiƒvñijöìÙÃgŸ}vRijðƒ„ÞÁƒ3xð`@ Òþýû©¬¬¤½½=$UVVFÏž=mìh`¬â'I¼Îà6ƒœQ€(ÜæDûP:tˆuëÖqùå—Ó£Gþå_þ%ævñ>Ïi¸‹´v N‹g@ÊÏ{ì1^xá…¤ æØE¬D`YYYˆÛªÂ<•••x½ÞTii)½{÷>¡ôÙiµ•ÁV]f¬úãu†Æ…µÍ,Qj6ÉØ["Ì–`0È–-[8pà³gÏvìÕÇó<§á>Ò!Ž$Ã*ž=wî\†ÊÌ™3ÉÉÉᦛnbܸq]=ܸ 9räëׯ§©©‰¼¼< éÖ­ûöícÊ”)®.ý#cÂê'777é G3";p¢‚—HH£££ƒÕ«WÓ³gOן)«çyþüù,X°€_|‘ÁƒóÓŸþ4Lº ø6Ð)„TJÐtttðÐCáõz¹è¢‹ÈÏϧ  €’’úõë窇k¤™Ùe]8E2*ÍŠQ”NG¼êúúzÖ®]ËĉO a°4C:Ä‘"ˆ¥Ö÷àƒžTz½+W®dâĉ\qšώ?€2*öõë×/.£gF9sCŸ#ÉJ8FªàUû:::B‚Jv&Eܵk3gÎLj…d‡ô]< q*$hÌÔÊŠŠŠÂ>onnfýúõTUU‘››K~~> €²‚ 5X„$ÒʈÎJ8*ñþhª}Vcöûý”——“™™É¬Y³’:Î4:i}âtIЄ ç´´´PQQÁÆOPìS±XÅŸ¶Ò:¶‚ÓjÇÎSŠvœX“̇~Hqq1uuu\tÑE 2$iãL£kŽA§N·M[[•••ìÛ·ÜÜ\:::8~ü8S¦L‰»Ð"TOÅ…•qL#$Ñ~„ÕÕÕ|ñÅÔÔÔ°qãF<O?ýtˆNg©RLu:"m O#$³ãE2áóùøíoK[[ßþö·©©©!''‡¼¼¼Pµ£[Ú*œ““Æw«é­X¿~=­­­\~ùå¡óöûýŽÅžR­˜êtC:Äq!™/’‰`0È”)SBšÞŠ:æóùؼyó PeeeŽ ¶Y¨A±*bÏ81؉†NZZZXµj#FŒ`äÈ‘a‹5ŽS¡˜êtCÚ@ŸFHfÇ‹d";;;dœÈÊÊ kæ÷ûÙ¶mŸ~úi¨(F @åççÇlß+Ôh«0õÝxÛ„8p€ÊÊJ®¸âЏZ> ÅT§Òú4B²;^t52335j£FÄ€îܹ“U«V››K¯^½(++£°°@ Àèß¿\R§VÛ¬UXGGG¨Æ)‚Á 6làÈ‘#Ìš5ËUª_´NDsçÎåòË/gæÌ™Üu×])_L•ŠHÇ O#¸ÙñÂ*žÝÚÚÊm·ÝÆòåËÙµkW²OÉ»wïfÓ¦Mx½^êëë9r$#Gޤ¸¸ØuÑzÕ‹Põp4 *Ù=V[[«W¯fÀ€œþù®Ž/“iF\x饗ÈÏÏųçÍ›Ö<`êÔ©',§Oüãÿ`É’%<õÔS´··SUU…Ïç#77—ââbÊÊÊRìSˆ,pqª1}øðaÊËË™4i½{÷Nh,i¤&Ò!Ž4â‚U<;0fÌ^}õÕP¨@Å]ƒÁ µµµTUUÑÚÚRì+--¥W¯^Ž;«°;ÝÈkjjèÑ£‡¦¦¦†ú§JªðS'7Ò:¸`ÏNXiTx<JJJ())Ä€ÖÕÕQQQAss3yyytïÞ’’úôéc 6²4bQèÌ vFF«W¯æïÿ;>Ÿýû÷óÝï~—>}ú8>ÏTj~œ†9Ò!Ž4â‚U<{êÔ©ÜqǼùæ›LŸ>{ï½—võp]A0¤¾¾žŠŠ Ž;€*--¥oß¾ÔÖÖ(--+‘×ÐÐÀš5k¸ð )))¡­­µk×2bÄ àh_©Öü8 s¤ t]«„cee%O=õT¨¡ì3Ï<ÓÅ#= ¬_¿žuëÖѽ{wÎ:ë,JKKéß¿¿£ÐÄ®]»Ø¾};3fÌpܞˊߜ‘‘Á¼yóX¹r%|ðAXcóã÷ߟ‚‚GÇL£s6Ðit9b%®¾újþøÇ?ÆÅÿM6æÍ›Ç™gžÉøC©¨¨ ®®Ž¼¼<òòò())¡ÿþ¦…)~¿Ÿ/¾ø¿ßÏäÉ“]c’œ.ÍOu¤cÐit9b%ß}÷]FŽyRg€x TÄѽ{÷°¢¯×RìS[ @µ··³jÕ*Î=÷\† æê˜¢ñ›Íš§qr"íA§Ñåxùå—ÉÉÉáúë¯gΜ9üÛ¿ý[¨âÒ¥KÙ°a=ôPÒ´¶¶RYYÉþýû©¯¯çú믓M# #Ò:.‡U±°°k¯½–Y³f yä‘G(..îêᦑF§!m Ó°÷ߟ?þ˜›nº‰¹sç²téR׫ïÜ€UÒ±¦¦†‡zˆ@ @ff& .ì⑦‘Ftœ<=’Ò8éñÍo~“ÌÌLn¸áž{Ò8ƒ®Ú·hÑ"Ž=ÊÞ½{(++cÑ¢E<ÿüó©›QO%>úè#¾ûÝïR\\œr±_c_Ê3f°lÙ²°¿WUUáõzÓÍbO!¤©^OŠbIDAT t¶ñüóÏ3aÂ^zé%~ùË_âóùºzH¦PUŽÀ UŽ“&MbÙ²eäåå±yóæ®bLTWW3uêÔ°ŸW^y%L»Ù8ñ´¶¶òÜsÏñóŸÿ¼òÊ+ø|>Z[[Y¼xqJu¿ŽÆmþôÓOY¼x1}úôá­·Þâá‡æºë®ëâ§‘(Ò:4¢À*á¨póÍ7“Ýi Çh})¦M›ÆÛo¿Ý)ãI#¹Hè4Òˆ‚hUŽ/¾ø"ÙÙÙ¬X±"ÍI#)HÇ ÓH# ¬Ž[·neÿþý\rÉ%]9¼4Nq¤ tiDUÂñÝwߥ¶¶–ùóçóÙgŸQ^^Þ•ÃLãE:Ä‘FQMVÄh?úè£,X° ‹GšÆ©ˆ´N#4Ò8I‘q¤‘Fiœ¤Hè4ÒH#“iFi¤q’"m ÓH#4NRü\êÑÂ,À/IEND®B`‚mpmath-1.0.0/doc/source/plots/spherharm44.py000066400000000000000000000006141316273626600207340ustar00rootroot00000000000000from mpmath import fp # Real part of spherical harmonic Y_(4,4)(theta,phi) def Y(l,m): def g(theta,phi): R = abs(fp.re(fp.spherharm(l,m,theta,phi))) x = R*fp.cos(phi)*fp.sin(theta) y = R*fp.sin(phi)*fp.sin(theta) z = R*fp.cos(theta) return [x,y,z] return g fp.splot(Y(4,4), [0,fp.pi], [0,2*fp.pi], points=300, dpi=45, file="spherharm44.png") mpmath-1.0.0/doc/source/plotting.txt000066400000000000000000000012741316273626600174640ustar00rootroot00000000000000Plotting ======== If `matplotlib `_ is available, the functions ``plot`` and ``cplot`` in mpmath can be used to plot functions respectively as x-y graphs and in the complex plane. Also, ``splot`` can be used to produce 3D surface plots. Function curve plots ----------------------- .. image:: plot.png Output of ``plot([cos, sin], [-4, 4])`` .. autofunction:: mpmath.plot Complex function plots ------------------------- .. image:: cplot.png Output of ``fp.cplot(fp.gamma, points=100000)`` .. autofunction:: mpmath.cplot 3D surface plots ---------------- .. image:: splot.png Output of ``splot`` for the donut example. .. autofunction:: mpmath.splot mpmath-1.0.0/doc/source/references.txt000066400000000000000000000057001316273626600177430ustar00rootroot00000000000000References =================== The following is a non-comprehensive list of works used in the development of mpmath or cited for examples or mathematical definitions used in this documentation. References not listed here can be found in the source code. .. [AbramowitzStegun] M Abramowitz & I Stegun. *Handbook of Mathematical Functions, 9th Ed.*, Tenth Printing, December 1972, with corrections (electronic copy: http://people.math.sfu.ca/~cbm/aands/) .. [Bailey] D H Bailey. "Tanh-Sinh High-Precision Quadrature", http://crd.lbl.gov/~dhbailey/dhbpapers/dhb-tanh-sinh.pdf .. [BenderOrszag] C M Bender & S A Orszag. *Advanced Mathematical Methods for Scientists and Engineers*, Springer 1999 .. [BorweinBailey] J Borwein, D H Bailey & R Girgensohn. *Experimentation in Mathematics - Computational Paths to Discovery*, A K Peters, 2003 .. [BorweinBorwein] J Borwein & P B Borwein. *Pi and the AGM: A Study in Analytic Number Theory and Computational Complexity*, Wiley 1987 .. [BorweinZeta] P Borwein. "An Efficient Algorithm for the Riemann Zeta Function", http://www.cecm.sfu.ca/personal/pborwein/PAPERS/P155.pdf .. [CabralRosetti] L G Cabral-Rosetti & M A Sanchis-Lozano. "Appell Functions and the Scalar One-Loop Three-point Integrals in Feynman Diagrams". http://arxiv.org/abs/hep-ph/0206081 .. [Carlson] B C Carlson. "Numerical computation of real or complex elliptic integrals". http://arxiv.org/abs/math/9409227v1 .. [Corless] R M Corless et al. "On the Lambert W function", Adv. Comp. Math. 5 (1996) 329-359. http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf .. [DLMF] NIST Digital Library of Mathematical Functions. http://dlmf.nist.gov/ .. [GradshteynRyzhik] I S Gradshteyn & I M Ryzhik, A Jeffrey & D Zwillinger (eds.), *Table of Integrals, Series and Products*, Seventh edition (2007), Elsevier .. [GravesMorris] P R Graves-Morris, D E Roberts & A Salam. "The epsilon algorithm and related topics", *Journal of Computational and Applied Mathematics*, Volume 122, Issue 1-2 (October 2000) .. [MPFR] The MPFR team. "The MPFR Library: Algorithms and Proofs", http://www.mpfr.org/algorithms.pdf .. [Slater] L J Slater. *Generalized Hypergeometric Functions*. Cambridge University Press, 1966 .. [Spouge] J L Spouge. "Computation of the gamma, digamma, and trigamma functions", SIAM J. Numer. Anal. Vol. 31, No. 3, pp. 931-944, June 1994. .. [SrivastavaKarlsson] H M Srivastava & P W Karlsson. *Multiple Gaussian Hypergeometric Series*. Ellis Horwood, 1985. .. [Vidunas] R Vidunas. "Identities between Appell's and hypergeometric functions". http://arxiv.org/abs/0804.0655 .. [Weisstein] E W Weisstein. *MathWorld*. http://mathworld.wolfram.com/ .. [WhittakerWatson] E T Whittaker & G N Watson. *A Course of Modern Analysis*. 4th Ed. 1946 Cambridge University Press .. [Wikipedia] *Wikipedia, the free encyclopedia*. http://en.wikipedia.org/wiki/Main_Page .. [WolframFunctions] Wolfram Research, Inc. *The Wolfram Functions Site*. http://functions.wolfram.com/ mpmath-1.0.0/doc/source/setup.txt000066400000000000000000000145741316273626600167730ustar00rootroot00000000000000Setting up mpmath ================= Download and installation ------------------------- Installer ......... The mpmath setup files can be downloaded from the `Python Package Index `_. Download the source package (available as both .zip and .tar.gz), extract it, open the extracted directory, and run ``python setup.py install`` Using pip ......... Releases are registered on PyPI, so you can install latest release of the Mpmath with pip ``pip install mpmath`` or some specific version with ``pip install mpmath==0.19`` Using setuptools ................ If you have `setuptools `_ installed, you can download and install mpmath in one step by running: ``easy_install mpmath`` or ``python -m easy_install mpmath`` If you have an old version of mpmath installed already, you may have to pass ``easy_install`` the ``-U`` flag to force an upgrade. Debian/Ubuntu ............. Debian and Ubuntu users can install mpmath with ``sudo apt-get install python-mpmath`` See `debian `_ and `ubuntu `_ package information; please verify that you are getting the latest version. OpenSUSE ........ Mpmath is provided in the "Science" repository for all recent versions of `openSUSE `_. To add this repository to the YAST software management tool, see http://en.opensuse.org/SDB:Add_package_repositories Look up http://download.opensuse.org/repositories/science/ for a list of supported OpenSUSE versions and use http://download.opensuse.org/repositories/science/openSUSE_11.1/ (or accordingly for your OpenSUSE version) as the repository URL for YAST. Current development version ........................... The git repository is https://github.com/fredrik-johansson/mpmath Checking that it works ...................... After the setup has completed, you should be able to fire up the interactive Python interpreter and do the following:: >>> from mpmath import * >>> mp.dps = 50 >>> print(mpf(2) ** mpf('0.5')) 1.4142135623730950488016887242096980785696718753769 >>> print(2*pi) 6.2831853071795864769252867665590057683943387987502 *Note: if you have are upgrading mpmath from an earlier version, you may have to manually uninstall the old version or remove the old files.* Using gmpy (optional) --------------------- By default, mpmath uses Python integers internally. If `gmpy `_ version 1.03 or later is installed on your system, mpmath will automatically detect it and transparently use gmpy integers intead. This makes mpmath much faster, especially at high precision (approximately above 100 digits). To verify that mpmath uses gmpy, check the internal variable ``BACKEND`` is not equal to 'python': >>> import mpmath.libmp >>> mpmath.libmp.BACKEND # doctest:+SKIP 'gmpy' The gmpy mode can be disabled by setting the MPMATH_NOGMPY environment variable. Note that the mode cannot be switched during runtime; mpmath must be re-imported for this change to take effect. Running tests ------------- It is recommended that you run mpmath's full set of unit tests to make sure everything works. The tests are located in the ``tests`` subdirectory of the main mpmath directory. They can be run in the interactive interpreter using the ``runtests()`` function:: import mpmath mpmath.runtests() Alternatively, they can be run from the ``tests`` directory via ``python runtests.py`` The tests should finish in about a minute. If you have `psyco `_ installed, the tests can also be run with ``python runtests.py -psyco`` which will cut the running time in half. If any test fails, please send a detailed bug report to the `mpmath issue tracker `_. The tests can also be run with `py.test `_. This will sometimes generate more useful information in case of a failure. To run the tests with support for gmpy disabled, use ``python runtests.py -nogmpy`` To enable extra diagnostics, use ``python runtests.py -strict`` Compiling the documentation --------------------------- If you downloaded the source package, the text source for these documentation pages is included in the ``doc`` directory. The documentation can be compiled to pretty HTML using `Sphinx `_. Go to the ``doc`` directory and run ``python build.py`` You can also test that all the interactive examples in the documentation work by running ``python run_doctest.py`` and by running the individual ``.py`` files in the mpmath source. (The doctests may take several minutes.) Finally, some additional demo scripts are available in the ``demo`` directory included in the source package. Mpmath under Sage ------------------- Mpmath is a standard package in `Sage `_, in version 4.1 or later of Sage. Mpmath is preinstalled a regular Python module, and can be imported as usual within Sage:: ---------------------------------------------------------------------- | Sage Version 4.1, Release Date: 2009-07-09 | | Type notebook() for the GUI, and license() for information. | ---------------------------------------------------------------------- sage: import mpmath sage: mpmath.mp.dps = 50 sage: print mpmath.mpf(2) ** 0.5 1.4142135623730950488016887242096980785696718753769 The mpmath installation under Sage automatically use Sage integers for asymptotically fast arithmetic, so there is no need to install GMPY:: sage: mpmath.libmp.BACKEND 'sage' In Sage, mpmath can alternatively be imported via the interface library ``sage.libs.mpmath.all``. For example:: sage: import sage.libs.mpmath.all as mpmath This module provides a few extra conversion functions, including :func:`call` which permits calling any mpmath function with Sage numbers as input, and getting Sage ``RealNumber`` or ``ComplexNumber`` instances with the appropriate precision back:: sage: w = mpmath.call(mpmath.erf, 2+3*I, prec=100) sage: w -20.829461427614568389103088452 + 8.6873182714701631444280787545*I sage: type(w) sage: w.prec() 100 See the help for ``sage.libs.mpmath.all`` for further information. mpmath-1.0.0/doc/source/splot.png000066400000000000000000000563061316273626600167400ustar00rootroot00000000000000‰PNG  IHDRàh¸éØPLTE             "$&(*,.02468:<>   % $) ### %""%$$$&&&!!)##,%%*$$-(((***,,,...&&0((2--3..5//800022233444455666611866:66=88899::::99=<<<>>?@BEHJMPRUY]`bdfhjlnprtvy|~<>E@@@@@BCCCAAEDDDDDGFFFEEJGGNHHHJJJJJNLLLMMONNNMMQPPPPPSRRRRRTTTTVVVXXXXX[ZZZ]]]]]^^^^^^`__d```aacbbbdddfffhhhjjjkkllllnnnppprrrtttvvvxxxyy{zzz|||~~~€€€€‚‚‚‚ƒƒ…„„„……††††ˆˆˆŠŠŠŒŒŽŽŽ’’’”””–––˜˜˜šššœœœžžž   ¢¢¢¤¤¤¦¦¦¨¨¨ªªª¬¬¬®®®°°°²²²´´´¶¶¶¸¸¸ººº¼¼¼¾¾¾ÀÀÀÂÂÂÄÄÄÆÆÆÈÈÈÊÊÊÌÌÌÎÎÎÐÐÐÒÒÒÔÔÔÖÖÖØØØÚÚÚÜÜÜÞÞÞàààâââäääæææêêêìììðððòòòøøøöööîîîüüüúúúèèèôôôþþþ)CöYIDATx^ìÕ[ Â@EA÷¿à~Ì$Q”H>ÿ3ÔÙBÑ·Ï¥`À,À,À,À€x ° ° °``àÙÛ\”ð¬Îˆ1Fµ-'¸ºëˆÌü(Gd-tÌ€·î®8Oåˆk²/À{_Ê1ö‘GMÀ·ç=ÚÏc¾éc<ëÍû8¾“=Æí&ð‹]»Ûq†ì÷ÝÆÎkΑRĨ륈„Ò¤Mn¹ü.˜Eª€ñ½´K à̋硖lux%¹‡ì$'£KµyãG­_ —lå÷€Ó3 Q‡Á\̧û]j‡•À¼RªdûJ`¯bâWðñ.5€b.·{«pðcürIä0oã,».E Fç `ì­Î¶ñ«¸Ù³lj1:³žùž­ŒùÀPN¼l¿N¶§8ón/Ùê5À¦1«j’€ßÞ¥¨ís:kÎV¯ +âW °ø­]ŠÚã0ü¼j4æ¯ö‰Mü: ÜÄY65Ç‹cP:ö.\lã§2`t)¾d0SC[g Œ½U|°_µÀèa—œP;[g{Œƒ½ÕŸÀî2`û[jØíóã)Áçƒ×coõ½À6d—ÿ¬°C]êó€ÿSsÿ¬QaÀ¼f.¤Ž„\rUD »Eµ+;A,DD $A$!\’/`!V"AÔB”kM! ‚`’Jÿ@vv6³fVo³Æ'Ç;Élö6sëTI‘\ñÛì>ï“÷NÄ7Yß@oeØ¢D¨âWF`+kÙN§³þ'D€Ñ[#_;Àøíˆ_¡Èle-ÛétttÀáé­(0r—Jtý=&ñË lŒáPŽ™ó˜¥œNg«m€Ñ[™ãùFZ²-`¿¡²ã„* r:Ë‹>ªµ£J²U*àˆÇSgìÓ­ 4ÀÜÌóXËv:õÀ2ôBðꀑ»¤¯‚» QŽ#ÐãÇuÊœsÑ6pkÙN§{«ˆGœSt=0¦(ª%8V6¬D!~eöYjyµÐÀà¥Y½US”úƒj"o`%Œ!KÙZ`‘%f‹—ß ^ ŒÞ*Jy˜¢äN)ÊVµ/Ž£2ϼ"#[Ñ,ŒÞJ,[y¥¯<`K#”-‡ú¥ìvdaÁ«Foq° •*0UŽs®]`(cŽS"Óõ È!+ ¤> £·Ú˜oãRØ ,ÌDô͇팩*SHÆ´záðÿ xoò%À­½•Ü—B6`({X¥´ŒT€½+à‡ÅF¶8aBoe–ÿ.ã-Ú$$„åÝ·Ûc(¤à Vì[4x“Ž™L³àRà_M°ÎRqZÖÇ/Ux`ZKê€=L³`ä°‰r^À¬]Ê6‹ÂƒÀtšMq¼¹ãlÝËám«´À4~‰^AèŒbC³èŠÞJÁŒÒáø¾˜œr†²R\ùbOüô㺘/˜Ö’Fo•˜ûxøæ¼ºüöÕã»×. öuw³î¾Ás÷¿&Ê -£M`(ëßßúãy&`ûµ$z+žX ÏgÀêÉ!—¹û×­ ô0·«ÿÄÈ©¡.¶qÜÒþëK¤ü² eOñ¿¼.0–a)0òÌÀoj­åüñcµ›7j]=§'gÍ3?VcnÅu‡'§fêõ©Ûã#G*néêwRq¦Úܺ ”.~­¼Él»–DYaF R`ž øÓa·wtº~¼\iÄgn¤Ê†GïÌ7æ&ޱêXãï™m~ç>¤È¶L·–ÞµÈ˗ο°Œ¿^šŽIoåë€%YŒÎX¼?èöÞª7&úÙÉéıùåÑñ¹MÕùñZi`¸ZaŒ•ˬÌJΙŸ¤ÈÎ84 Eãׇ‹÷­­Â¿×¯|¶¼žXR`¥–"™|ÍÀæÍfñìêÞÈ•ì,ì×ü¥¤þ}ÂioÊéGZ`‚ ¬÷kô€˜‚JÙ Ø µÁÄ¡’8#iôh=FšIÝM¨!ep‘„€³Ä±ÙkCbÞÀ®³866ØŒ»^¯×뵉{õðÌîÌÍ>çÌtK:¾³÷êÚ]嫞V«·Ê¿þÞßùNPÊ"djj‹ µK²Þ´;ú èq)=rÈ×Çj\ ü×ÏúëB7¶˜Ï>ôÀ[ìµO\Íð¿îsÛÌ}+ÂÒ¯z}y+l\×¢[°ÈדÇö*w1àÇ^ î$ªårZU-Â/²N·—”µ½¾Ða\éòËÇIiç•ò®¿AüŸ;xå ~·;]V•?ü×ß±EÍ]ç5€O|y«Óu€¹&>Ÿb µðüwþj (=‘M‡”l2"%ZLƒüˆa´ËŠV?¦P;rÊAˆÿˇ==‰ì[<»–ˆ?ô´À|›*šß³“U€‰o%|îÓäóU€yý»A+Ï:Ú‘j6Bv4–䜣”¤£îªç£È Ð¥ÃÊ*‡ýz6fD‘Xª ª¦úCÏx¨'Åyk€g×üŽ/ú<ôðös×yz²*-I˜ø"ùÑQM.Ìê¾T#|úcR$ ²„PîZ`W1‘e¦@¤y7kø:?FÕ@¶Ö2;½N»Q4€d$¥G}€×S¾–ˆ?0» `¶¸yò†n 0ÁëLA±ž/ΰñÝ ˜(¢óW$”]y‹ï…õ!–ʨæJ©—Mrf·£’° óã0§È™Öñ@®"~´%M ~ÛŒ^ŸÈ¾>`ñ ÷å*€gîûáW¿k6˜_¿äy+J]@î+Ó©OÔç§+Ÿ»w®*ܸ©O†Ôn Ô°Zn€=Ç…J<.ÊÈpùµ+ŠR.o)Äj0ô6A*™5R Ÿ^ ð›·Ð-ÂËÅË—·Z øt]ã»06Óë½èééì߯89ÂàbÚÐߘzÀ°5`vŒ&EP ì ÿ+5Ćl;-|ü«J%߸!ê×ø:Ìñú£ž·šž‹Q_:-V&Åÿõ€?ŠMXÅì0ï mç’øŽ#:Á9Jc}…µÉS,·?vc8p–Þ$L¾g^ßu :v¶˜»Î~çØí`ÌrKã{*L]¶þÇ À?Z(/÷1›0)%¹ÇˆÕAÝaA°5à>AÏ~ Uݬ– ä„òKNq”*ìOqŠ‹oؾs×ÙØ—·š-€‰I¦¡Ñßµðã!clé l]„îF¸“plÂÅ7|ÄQÚ)Iê^ë´ã Œ‚öP·Ͳ$EꎕM…€ñ÷‚yä×<¿€¿Âü]¿sL£M€gWÒÎôÇkoã¡Ñé&ÀÿVª:¢ž--c»b kLdM€Ï¹0ïZXå̈6Ž”Í"~ff'ÙÐÙ©ðÊŽlAß½ð ˜o_E?¿&+9ŸSßJÔ8÷Ì‘æÝøÉì£ÑËFupÍËÜ‘f ±ÉÕÓä‚U”#M‹œÂK÷Y`‚FE°›žMÅiŠëKÅ-=Û,ö­htëó|y+Θ@co‡ÿ6˶ ðÿF&£ÔŽQ5hÔºK .(L%O°îfG4ÝâBÂp'@~È ¶4ÄR¿)zÉ5Ó´ÈÚMÄ€Ÿ}ÛÖs×y5àÅ)ñ­Ä€§ÜøŠs=Οæß@øìƒ!쨥FÛ43p/@KjcڇܻBÇztÄ£âð8*⇣™ð’<ÜùÉkæ”WõÝ‹ÿÅÛ·˜ûVÓ•€Ï¸oÅÁ­L–q{Åߘëñ€H°Ð5bK©-+Ľ²»ÌÕ ñ ›TU“?Î%œÁP™àe‡©£I»ZÌe‹Õö$BhOŒÐ#×Ìù­HqŠ“ÙO½k;€9^tK9ˆ’¼Íƒ@ž² ê+ÿúŽd:¶žYRËicW'+ÇVu˜:@»ò!šV?úZ8»‚×îí$%ž/VkåBB‘@ay¿ ƒŸ½v±ˆóóP~üÑm&x}Ñ-w‚³Ub½ ð6¾‚û`Ò8»ðËàYjqÉ7±\5 뮎­)!iÌU®š¶8L+[ÈŽ9ÝvèÙ\Šó>„%UÁ)ÏF04}áÓ†ý‰ìÍ€?òþ-fÆ×üp'ˆ5؉ÁÝ8ÝGÝ7xgî<û+;ò²”=´äuãl1‘$3 å"î\QÏ&Ìâ¿&´qþ~$sÀ¸¸ž%Ç…—Ìo`"{-à~x;€ŸÃx7Í% v‚`Ö¡r&º$‚¾ð¤Žß´áò“ ©–wФâØ4×aïr˜þu-œæÐZœP‡œ°z´lò€f²žø7·0¥Ö./}ïÇ·X4;”ô_mŠuøJ2!`.èÀ_)ê„ñͬà;QÊi¤I+ÏÂ&LUN3aÞ‹:m%ÜáIèœ Ù鞬¶öû·°Hc“ãÝOÞ ÀsÿìP1`ž9[}ŸXÐç§W?}Oø‚¯­’"_–ò=ä|ǰζ®y÷ÙMê=Äv”ŸgÝ'X É:’>'*\¿ï}åòÒßùÜ–œ,¿Ï»qí—Co…I˜¿6'BÀOݽàëèDÜŠaÚÚL~á>GšÓ¬î`%Õ1gx—!º|ªÈtͶÙÚù}€¤Lö¿ùΞ®Jd?øå+¾ü†{_ýÈVsbÃÌe’õÈ®xh$üÔ=Ie‚P”ÄG5eB…–ó•ë\HS†ƒ:¨åc²Š?¨ x ñ ÝRB=bÄ¢ ä¢[¸€u81• ®?/ÜŸâ|ê o_ÁpöÌÍÅ«>{Ç/øìPà³ËÆW øòsÏ6úÚçOÝ““G¥bKT-|ŽKaBkÉœš‹c¤VF,óZçP‹YØ"_ ”Ây‰ó— Poâ3Ū+Cé욀§·˜R~äÇ¿óçú¨gŽÒ/|ìΞy: 97?` bz²^ÒÉsÅ€O>sO"T й]¿×ÑËŒ¯r‰o$MÍ+¨·w§œ=°„‡HÆj˜NSCÄ}ˆœNT1’-”7rß&,àw‹7¼ùsüà¯øâ+wðù”ûV>nêL• s£.|þ¹{öÀBuÅ"f—×hÖA>ÔÈ6Ò¼/®fo ™4\ –ìj†rŒ]éóóë¾=;‹×ýÙ·Á'sÖB%ìÉF­ËtbštAÿzÀ3*æ_ø–=,†pLt1MkdâL·Æ²×ÏI.²E%¡}]Xa÷€nXm3ªÜS¨¨Ã΄Ôß^Ù²1ßÀÞjáó?óèõ¢Iˆ —€¦DŒ¯0uÀ‰=û»e¹Ð±+¸a¶V5Š¥cœoüßœj;EÕZžWa— öhr‰çÜŒ#¦Üø_NWÄ3bÀ³Ûø—¼CaÒó—} ¿ƒëÏPûe]°úŒh}`"æ?”ì"dË Â’ŠmbO‹MŒi*Žøys¯bÍn§të’'K!v U49ìwzƒ±“h0Ô‘eßt,ð›«âñ(KqϸÞÿDà‡ï»ïcw 0÷ü€ýjÂâìDp#¥É«Fœ¹0óÿÏÍB UÓ#Q-X:Ä÷ …ç4 a‡óÅõ}BxN²ë=9aõ5晑€ªÖU‚Qš½Nî°Ú8”þòª bÀ[hÉz¡€™”qÀëÛsˆñ Sµ€ó’À̹{ÔL”#F08èîrZr$׿:¶¸US¹,§#”iY•‹L|‹ÐDÈ„nÓa¥@Ù7Œf$ñ]ÀF‡¸®œ |nUc¦|ÛÏ~yk€™‹»ðÜŸvÆ€ÅoÂ)ÉK “¹Ü‘™òd vðǸ³ )ɶCX<jÉã›å²|ó´i$Lе‘#éO”>B“*H[¨Á¢-´øÏ+PÜðÙe±{i_úïÛŒƒ.\Àl÷ô\˜¼7gB¯kgL}L*`»úØ ~p)âÖc \ž8ÏctÁ1ã›ç|{ Þ#§-àZYˆz†\Ƭ s¬ÂD¬ °£uðY%ŠêÀ ‚¶hàuFü™ßÞà¯Ð`‡GDj=<Þ™ DݽõìD›œïšIÍh! ±eÖRêìNJ$8¦2=ö4Æ·ºhøþëö€1ÙÕñ…]{4ìŽl›%¯{¸Ñu£”–¾¸‚¨-úZ€Ÿüým>Yœˆ"¢ù©` ‡ïM ¡‘0{0àgËØfSÁê:Sd$kZ„›Ž'o‰\W›àK§‚eÄl÷9©Nj!-¬«`䮸«JÆm%ˆµõŸßØ_ÿ»>à¿g[€Ÿ:$ÏäȱX˜;mkŸ_ñ×HÆúi],ªB‹c טu…ÇÈ6£03FN,‡8Ô—_B-^>Vv]~M˜•ðçÁ.Tå¨EëÊŠ¢-ß‘ºaGI6,³c5‚"À~ÊbÀ+ýÑ]¼Xݽ™‰;ßç§þÆèéÀ|«•é§À‘Üá`ceö² – IwTÑŒvpÀÌ2¦Ž%àëI\Ždd7Uµ8ªÔ&BN/ªvÐ#;\&?·,éTÀÇOùìt~ ÀøÈ×`RéóÙ[?`côt}>„?óäÙo0ãœq&`÷u›¶=³°×Ø¥gv2Ä:œGÐä!•úN0A{³Š™‘:4ðWÉ¢+ÕÉŒ{ŸœU÷YïVäQìaÿ8ò”bÀïylû€ýrÉL¯°óër®È¹¸úsíLÿh¾©ØÕuRÕG. ™á«pOù M ¶õ=Þ%ÙaJÛ„Y‚}¼^m'º|\KuŸPd²°É»a! Óü;טtÈ4ö- qyø©m¾)À†‹:ß¹¨SE.ì]Êö‡Ê1"4rÁê4‹˜Ê³#·´6ö³SÕûÈI§øJ…& á%긥·ú #R×}Âp<Y¨Â$e½HórS(QK×eé¡,Œ7MÚ`6Œâì«ì|_L±Kì§éOx]­#YF°/&–³LË m…¢p¾~;— —Zr¬¬2YÔ¨(·áVËh(—ðH%˜ÓðÍÃ:ES”ª4‚®ª¸—1–-7…::R>)lØØÄ÷¾ ð7¶ ØÊs’¬>!ý’bÀsÆYmkÍzØUд‡ƒûOÙô¥ s»bÒ.=5¨¬›˜/²A7pj1Ëh¢ÃTvrÖòÆ´ÞNÁhC/céur±åÏ$¬à8÷šëö¯pXø-'Ûìï႞‰;߉›=å§É{àÑøï OpŠÿƒpƒõÔO<ü‡¼³²WˆTG™ý% {ÔM°:J'*çzJ™üZ["šJldgIÍÉYbÅV…R;x=Àë(Ÿ^| êýÛ<óæ’½í°þ;yht.Lײ]µ_’Ž¢X¿DÉÖ"TA3[i³¨ã`§‘ VÈìu+ÍTà5©ŠìœrŒ,9¤5ñrqúë2õÙF¨ÛX“wÃÇàz€7P¾±jåáý[ìïrå~ 1š…F'SaûãžKßRkb;ˆÿÁb Ž(UV#Lîò´d„–"$ÒUG=ªÔA‡Ü%ïîŽÃÃÁ6rªRÝìt¢ë7%˜¥çuÃÇËêƒ i~‹=uâ¦J*Ëó¯ÀSO«0_è+ÌT‚ÇUD³áó$Y(ƒÊXªÀ4s{`®B‹rƒä»9ç²bí%å rö¤§WRBP3 €PÝýõ$#÷­h†ª98@¨Ž}·X[úômLÖŠSÊ[ü¼·GŽ‹ä¦ÓùÔW`Ze¬Mžáº x& 3ØAÊæ‰dQ¿¸ËÌ®ÃûolµÅ[ßûô¢$‘ †¥Wˆüª6Ê›èPIy(ʘ} d¬NdGø•€9!›6ï5€Š¡¡Z<âåóBÛ¢Y½˜SöþÕo¿wK€ùhAבVV5¦jÜ‹ýƒâ‹â!´Ì‹:̃Îp­œ`8¾Ë‡^M"Øž:‰4±¿Š…L©†š@ …vB9ÝÈççA£­¸3yÆKÓn”‘Ò[J/B=IúÅk7ðÆ÷þÌþüJœôÄÓ~Àï»ï¾ø©;˜_1`Ok¥0¥ÉÕ¸ðcÐ^6Ÿ‡›VŠ:A eZLAóӦƗŠÚÈNFÑÒâRÇY¨†R@5 ä: ­j’Ä^.tБwP3Š˜ÀÚ`ïGî`þЧ~êÁ7¼úáËMÑ÷®Bó†Þ6ÀQ¤‚l”çUfM#þZj7pôÛ 9Ê Ëøy9Ÿ·¼:Z“KGìì• ›„¾ ÇØ'–5I H‰J^j")ë&iî*£1“žÉÕAtíÅéó=·x*ì¹[³iÒs§"ÀüîÍÛ˜*RQ‘¿ À§\;û¿% JB( èñ‚Z¡!0K1Wcˆîµ’’ Ôh±ët™ßl1QEG܃Þ³°É…n+JË34Q ;R 3´ÇUMn9¤Öß%˜îÓ¥uT%å„k::¦\M§Ë»/ºÜ´!|z-ÀO¿S ø3÷žÞVÀDãÞ8¶Uú_…MîöbÆäÜŸÛÉ[`Œ)9RMäµKtÐ$KLjY…F`ÄÂ&ËU¶IKn#[­ãñßP¡Ñît»u®íÆ &ê=Èü§»)Xq&îïm€#ñê´bðjkÎLø:=wO¼[ øW¿ó¾ûÞv»3;9uÝñWSž³pÚøÿJ“%À¡Ø 9¬z¤‘’åXÍB}·5†:Vö†MMÙ¹ k'ÒèvLIìI fDpsu ß&’ ;\´#òr¬CÖ}T¬…PY²PW‡ó+Å¡©ð5:v|›&½ùïýÿßý¨˜ÙÉé¹0 Ϋ˜¨ï<]ŸÆ~Iu¹!IèÀå4ÂV*R‰¹¿rŸ¡VùÄIª½±"/¨º3‘¦¤’%ˆ”=õ×\Áwzy‰®5î+ä³–v Š„Ð¡¢<{¥iC´'Ëéì:€ÿäCÛKt<Çšä˜?%¨ý’ÐH˜8Ù‹ÙÚ4öÇ¡Á 1‰¥$ÅÆRLÅ‘*©ØÒoÑ (1h_6ªmid‡K])ÇH-š©«6óÒ4ig V>€Íb|5ud\öןöD9¬l ˆ‚nð~t»€ù2îÙBP$÷2˜¾xÊ×0¹p¨ÕÇ¥¿¢†mYÌÂ:ðÙfèÅñ`!pžò·iU‰’¼E¬”‹HÕvʹÖa—FÍÉ‚ûà>Ôd]¾0qÚa](¹ùÎ Iuã+¢œùœ½=3Z}b{€oãËü)AiÝËaúã)®|€ù¥÷+NøRŽ#—ÇÜ"ól‡Ó+@™°l‡ÍFèðaIØ +w¡r„ãÚØþ¨WAPÉTêÍV»Š{»IB=:FÌm&G;äCCÅ-ù=„@ôãëœ`î|½`À}v‹€ÙÊnný"çOQÏ6æ)óé:À¡öR€ñ?X¼hŽcÄdÕæ!Rä^ÃdpÃ6Ù¤Û£A]0”s˜¸B S¡r!“ˆÇâá`¾Òàkz›)‡ ý £ ¬£D ¡Z!^ x-eñ†՛&mQEO~sëÌÓ›/< j`~é}ŠnqÎRŽWYºÀsXmätÓ ÚA-^sM7*ÅÝŒ¦%";E|IÐehÌAkG˜¢§ž¸Ø“«jÇRô €ý”¯ÙýÀl;€Å=;\ä¸Pr˜~ÀT;sQ^8Ôî)+ø˜ ð˜'6Ú„ªÕ C©ë ›†ÐZбé$R@+I‘®ƒr%÷ ¶«ÌY½Bf::¼|bC¤¬™D¨AHS? Ì© Ìóù­¾ÿùíææv5.”~kͯ1í,ü^|œ,#ˆ”Vѽ|Í!-˜ù$Ú×Ê;öXijê>]¬w¨¶éCë|­¿ÕŠƒhw?E€õu„4ùoe‚ÃüL0-z~&èØÙ6àÙê¡X$4žsí¼²„È™‡ÚCª }l3¶xËâí ‚u‡•›ê·.tºR9Z¥!²;å]á1Ý“¦6{’£M{YîÐ%ò?-øŒ°÷{Þu׋« ç+“~˜~ÀäE>ùtbX˜bD¢òy¿Wè™E(n©{q˜“,—øh)ÎG¯+6¿øoG C˜¬÷d§ÙŒYÇê7óÐWgŒöOÕàLÆú¾÷RâbÄýw ðšÙÁl ‡À;ú_„€ÏΧ¡úØÌJ:áh•WãôìØldR~yš)¸­Š‘X˜õ¥æNÕ‘UOiPÒRÅZ³Ýi‡º]³ÝØË'¤ Ð{C„ê)ŠœØwˆÐXAc)°¸àõÔé×àÍ&szã«kŒ^áðBÀ7Î> ìtƒ(„I&¶«x„¼ò݇Ç9Pt.>eÉÁ‚&øHg©›]ñ ï7ËÙDÔˆà†ñd~¯]Èñ˜q+c5® ØOy-àù]ìáAB#Aç;Ë`žâk"À‹‹:ÅKK6ö‘m×Q–”%uœ'\€÷˜ó#vÍŽS°¡µI#€£×€Ù—âo‘½’¼ ­@…{Ìó¹¤äpë0ËðE·X0,zö5 ˜{Ä‚ÎwvçB˜¤JÎÒ¸´¬qÂS2®šb”.­àhR"pd¶]CGõp44éEvA#Ñ\ªpÝÕîôÉ›`陥»€í]ÉDà›¼E€Å{[Îçwð:Ü#>;u¾“ ¦0M•œýë$’qÅ’U *‰f¸)F63NðIßl¥R×eT%dè£ätbè0²“¶1=r+“dT¤1—½Cï"=¸£*BÒwÜÀü˜MW,J{ö×¶ ø¹u<¸G<¦w.f›kÄtp¸Ô7užWê+¢¦˜òÈ"†Ú/ÀÍ0SÞãh8›AÉ<ÔÀnSLåc6“r¨Ó pÚËQÒÑî²[KŠtdIß›c§ÜH}þíwð‰§j´®°p>ó¬pæ/Ì£ŠÁÆS'ÑilŸZÃË!J&ê`^8ž`1w2à¨+§þKP%žU¢5Ê@½F&2IFfœqõîán-€P/ŒŽÀOÞ^À$>v1ñ7nœÎ¿8ÀèÝ]*I#m¿ €ÑBݰ–Žõ¶Zqò¹Ÿw÷3Š©5âh/à¯×o,èŸÎ®øæV?O«F„¥` 󉧛Ûø=DCSCK•p_e«øùt»àR”ë4¢Î– ,Bg‰)V·@ò×Ooœ}&\Æ9ˆPæzX9Fvg/Õ@j±Ìî^=/›e<œ 7ë•B2"`8UïËK(Ü(¡¼ÔûÂڢ߼mÀdàŠ0ÏðüåÚLöb¥þWC = yD),7YÉà0ª‘–¡¢ö\§)J»éˆz¯/š-Îæo ¶P[_3zE:pè‰í™û•BF–ˆãa¨&Ò…½fß0©`G;þ“€9eb–Å€ç_ LÒLœåº¼3t`¦W–F¬¡]77Y£ØÂ…2qdêMOh©¦E„ŸŽæÏ˜ùO8Ù ÖçþLÕÍ@ël·CÄJ WËÀˆ,”¨eðÙDú­¯ÊÆr³<ýz<dqƒiçÍ êé -­ ±žPŽ!¹ðè~H&Ö¯9“n¾ÎÄ9¨Çö–гeâH·uø¥ Àg;; Īñ×û® êž´´3ž<\âÚ<Õ@cu¤'€½sÎnøÍ²ð|Û6ØÏÒß­+JPOé Ùu!ÖkŠv¢ k0¬ü›Ù£g) =žÈ) \è›”œÂ™×c3÷p bÇ,ömàx.Å]©’ÛóFIG ùì!—'¸™g/p««Cg3Yi€»øl5`†út5`R6ZXê5cX»–×hè®Î+ý|ŒÃeËê”!-Ýv”ƒ!TÇ€¿_:DFû¸ …­1‹|06ú¶D:ÞEgíb,½\@ÆKoðôÔg–Å€g¿¼ÀÂ–Ž«‰vž-ˆv^x!9q,¬êõ¡=:QG”¥„1Ï%­Û¯E +†ðÅ ‚̹¨¬äÚ4ƒ=áyg‹6ÑÄY¡L›µè{eté->BÀ>³<æ›&Ý}À<ï|.JPI÷ˆ¹7°~{Á1“ÉCeƒ†N°ka"~,‹1\þ,]¨ï\.ÕÛ© ¬åÑ^“ûx1a5ëí DQkWÈ-w „œðØus³Ì£e®Ä›&m°x Ç|îw¶Ï›“$/màº+ª¥ˆ½ºÇ54‹pFTÇîI±@4x+ –òóÒ120ûv”ü@¶ö“Ð Jñ§i2‡k{äÞKTxõ5TÛYÜ2àù¦µ‡k~ÿäÃwð‰` ‡0}ÏO€ÁÑòÿëEÝöµMºN 5râÀ1‰ˆ#™×/å! »;êŽË+’© d.4¶Ûæ¯iž¶÷¶AߦZE_*,*ù)OW½ÿ?wð”³ä!ÏT8Ôÿdµ³ð)p–úXW„4[Ù¤¡õ?á ?#æêÅ ~.ÔD• ÕÐÔÀ“¬‡sP‰k@Ù©˜GÎ\.Ïl•æÑ¢¦-ý¦`N°Ÿò™wí!Ù4i»€ozaã;¿è7®\̉]Þ”æüñfKå¨AK€¬Tt¨¬ÓÐ\›¢L•\­FÿÆRT¾ØHÅo•(þ#™&°©ß×r¨ÉJ[¥¢¬ //ô/ç°w¥Ï_°ÈFs³,Ø4i[€gœ%Ma Ó™^;‚zg qmy n”‘ñkè•ÈU5ûsÁòngµF$<ãê‡YöØRu›ÎTÛýCè¾Q2Á}€ã§ÝÀ*@·¥çn>¿-¿çq/¿öÿûÌÖ/.kgN}ƒîå‰Éù*ÀìdºcvyT*=k;‰QæÃ#ÝÊŸWC“«GPûFð7¥#ÛgIN{µbÈKºÃ±|L‡AI—f)j9¸§í8Ê·Ý À>³üÔ“¿ïÛ4éóñSÛLÌ(×Μº_÷ò²ÑƽX¸K©ÎLð˜æ‡ Ó§—8ñ¦žFУ¡cK ýXöÍ[ZQšÜhs¬È“ÙŠµ¬^£˜Š aH‡$ ½ëžûÌò‡ßøŠöŽÉÃ`‹€ç©¤Ôý¢Éµ³0Éo=©! ÝF7ãÍBì'X¥oôKy5â=ÓÐù ¼LŠ¡P£ÙÀÑ•FÛ Ë„mJÌq/áⵡ)Ûõl(_8`±þ§ÿì·ú+w0×ÎüâJÀ¾ÆÙÅ Àgìq¿”·dÔÔ‚Ñ'ÞcÁFz§¦$ë\úxHe˜cùÈ2FÒŒí¡©« Ðâ•¶¯EĶ/%¡ÕGŠ{/ƒôïc†Ò/×¼yÓ¤Ÿ¾¾MÀó9ig÷\Ü0¹C˜)û—µI,cÔëÇijˆ…§Ž¹½åu.tÅŦ±\Èû’‰ 9w‘š=h¤¯./o*æ})±xó²÷…;ƒÔÁDz?5”<²/¾~½‹üüÕð–H¥ðçs¼ü€Y¥ëĹê¦d9dZÜ3£ÌóL\`¹o…rH|ìXÏÞÿB@qì¥Wµ›¥“†Í¬ Æìxƒ06±cÂ4´ã«ŽeÔr–,²ž_ ðýwð‘JñN…¼!vC»ÀÉé f£%Gﱕ×{JhEsÂMp-ƒ¼5¡’#W¹ §«6ÈâþÇŸ”ÚT€//p±º÷à6,"Ÿä(å<ªš|ÚÀÆ!tø»×ìÿÙwÿµoã“ù¿'‚¤¡ÎDÛe}ƒmq&#h³â{r¡AÑ€0XïYÔÊR»\WsõÍ]-hõUù³ÓÙ3Õ±ÀˆÏó•ŠŽ3ÜOB%Îæ€Ûpìži=ª²©AV†#éOV¼A×õÞ1ÀüØ`Ìc1´U²jà©?ÏÉn{Ü’yˆ«¸2IéPŽWÌ#ž§Ô^]=†´ºGtí^Rº±×K”*^šó¨x­WBPN4,Ò¨GŽL[p"ì ~@\aûO¿Nóˆ3H&ML û|üRÅŒñ4°/9:V+o(’/5ñrO øú¡ÛQ$1G. Ÿxš8{©kÔÇöÑq3•T[£.V¾xYeƒ=7åG7â"1`qÇÎöÓˆ–8Çp¸l´²î„ìKOsÀßÛ.i‹—hÕCjÓ“v1¡Ë@Ö`¥ÙNðÊ„bãrx²:‘ß•‚o_,^) QdÿÒ†JFƒ>”Â<&=XÎa]—Ôü€.ŠàU)TMⳡôI±úKú§_€Ÿ£™ âõ®ÌËFëŸùÒÓü¶ â-ÖíVÍy*´(E#^+i†&(‡ôt¡\Ûo¶@Ã4ÛífV)$u …“²öéŇvr¨µU­uu_¼&ÛÄ=^cAv½WÖ`´n×â——):ò!öÃòŠõ{Ø×|ö«[L´3g´Z2½•Ó €y¨Åƒ‰v@[YY9°Çª :kˆ6:uÐlT‹¹t2ŠF4ž D÷ZÃcÕ“`11èÕáX<¡jæ³êzç>BûÊ€€I;@êðR*³«b+lK¿.,ž‚%°Ñ|Ó¤­æâFTêZpôFÁÒì\ùo“hÑ`ˆu¶.µ65Ê^¡hžâ´H‘>YùÖů% $­V]*g£ a Nb¥]V½0êô,Ye[z”T9ÙÁÄÝÈ#ˆZ¡©°Ÿ2ÙX¸øÐ¿iÒ¶Ë…XÜD€¹\nì|gΕð "À51´XÒ›±fC¶º {UhÞÃÁ%áãz*qÇPÊ ý»®—©šM™Âæ›&m_‚7ôìppÞý³U€©÷¿EÆ i¢C4xåeÞÑÊ×’ñRaß»¿ñbéØ^êäºNØiÍå˜àZLWÇ«&³ÀÔwèqÉ1•²xžâPúØ5Ï|¶¸ëö£ïÛ*`KÇjÀD;‹:ßÏèm~ÀïKšQ² Ë–áUÌ)¶:©P¡gÊøªÒ®äÉ}Íxk¨Ž’…KûTãŽ+öúA5¼Ü§u¼³>Íd È­¦¥j(X\°ÏÃö|/Þ4iû€ÏW&ÚYø½Í/èïÌWóŒh¥À yÇ…¢Hß;NòPåú›ÌfBNSµ±Êm¸óg'4Ñ<ÄÏ5³@ ôÖöå)—p€)e)CUP5=–M'”j‡-Ra®š dwïðJüÊ~m ÇÁŽüƒ×ž’4vÍ®X–ök³» xî/`À‹Ä$¹ð÷<@#KâÀª€Þˆåªô zÖ™‹äêXnî€lÝì‚ÆèhÐmg@È‘ÝrtFµvø‡N'*—ltLÛ+s9*ÀCè´Cψ×o‹ž¯ð°ï~뀟÷ &W»k=æÅ)¿e3Ö/R{¥ _‚ô(+^‡*jr¹]çD'›„ö@ËŽ²Tò* A¡±Yà[ÉÒ3TŽ-Ÿ‘ÙX…ííA]¯DÕQ_ŽÕ赋¿çÑDaû;v|Ík~v¶=À§+rœ®Ì+np×>™O_JÙ$[Áë@o ˜ècNõLÆÑŽHÆ«–RÙZÙÅeR›­ïÊJæðŠSúԌ㡴Ųdk­ì˜ÒTÀî `îa¿ù¾ùÏ{Æ(=þÜÍßzp[€97ªv%ëˆÝx>'ªà;RR;$án#é!iùÜiÓàV™‹{OGÍPA–Zrß6ÕÊÊäwEQ‹“0ß³E6³Ï» o#ÔQÈí.19êËx‘ˆ‰2|û{î¾ô¦‡Þôj_½áÏq{€gL;{(ùºü ¶§«Uð=€öò<õ©‰QöµÞÕSW½iì#MIׯòPÆwßݗФõµœd–Ùö‹³qÖl¹K7ûè)¨-=¶"„½C€yCÇ©Á›>¸ ÀœFâÓÛ~ÀDÊ€O‰Œo dI`Ï";õâ£Z Á¯Âû(})Ë8ax¼¼§¡u7]$SÒe]fV·nêJÝYRg­™|è´ääèmGyùÆzïì6æõ~[ôïýÂu²žó÷IÙHxʥܧÊýmš¯ì‚åˆÊÈ$.Ã=ûK *›ú…ÁŽ)Ãa¡’J(ËÁD“èö áËTu?+ê±ÂÒö¨‡Òþ°P[GÍЧ6Ô{ç³; ˜ô/N¶ødJÊFÂ]IÏÏÎ~}¼v;´Ø$m—•PúÀq§‘£•`Š™sõÁÕÑGfdT•µXeêé¥ä[áH{/!C£tœÑƈ©ê!™†%&ßN¢@˜u+'÷£Ž½,þýMõ^"ÊwðÇ^;½¹EÀ7Dƒø@añ²ÿÙ” ÿ?6‹‹ô¸ ÓÍc^ ®æ½-³„+·ÏÎ0‚©C”«¡T#‡mw—›˜ÙHöýªº¿#µéUªª÷ÃØŽÃ4žàCÕà§õ^o%ðºÿ7nšôªWÜwßÛ̹y ³/Áu¶!ùÁwZ¡ïÆ¿i ÏT°êq€|gì\-fk^¿ËV¯–*ˆ¹³éý’„¬„Ü£úVŽjšR°°ªV_ÛÈ÷tý„Åcº/üˆŒÁŒ¡˜L¤Ÿ˜ ËBN&JxZéGJîÅJÔyÇŽ„œô+3!`¿ïÅ!_kàÿãnðM^6¢=;þ¶J/9 X¼ìŸ~OØØ3°t¼3ËTNV#P©V«µF«cÊžÖ»\Õõ­óÕ®„—æhµ‹øÞh嶸|YÝÐ Qeß%é[1‘-ƒŽ8žž®o›^Fäýw0/­L`2rÀüa\ø?a`÷CæÝîÊÈÛ)‹dÇ»OhOcõ"Áå]Rì·÷Õ1ê^q~Òi¤…`|QU5"d¦$/C!‰ÐnÒ”Bï]on›½à?þÓ»˜hçMY^r~QçâÊó𪒒äå`yâkØkWŽf0`\­¨e{,eté9ÈÚWÕ}¬vå1¿v 4,#Áø6eË©àš-¹)àÙÁ/¿àt À‚0JÔs÷ÞOÜ ÀتnnÊâFzM{§y‚‹K~í.…»©6ðd õà®îÉIg1`&5ã…€¤‚(mÉëÅ佨l">Bʱ?Ú`i©‰v£,åa«m”Ùyï¹1cˆÄ€ýêó½=wdÓ¤í¾’˜œ­Ì+`R\ò>á6Bêé|õTŽÔ¡/)Ý1<€s5w'஌ÀñQ Dtš$q¾hîBŠÛn æd›LäÈ/7ýïJß|~¡BÏ/$ñtvºÑt.ì)÷ ÓM“¶xq"è–Äê˜9WDý„¤/ýæûä|qO¸FÐòFy¼°ñÎW—ôòè$jÁ@Þ¶Ð8vÌ”¬7íŽwµe„G¨/]¾T5´$R=®éØÙ²m¸3›žž“Sæ¢ì/÷‰U0£„€|v‹€Å=;0u®6Šú9ŸKËc¼ç‹ó¿¥gi·]¸ëq²´_‚ÃQ.•ÜJcX² U`'Z_*»LêJM°ç`Elà>é6dCô`âïû`‚,¹ƒ Á^ˆï¥ƒ‹²ðZ€|¾²›&m ðóÞ‚0ÉO “4˜ðÉÿcîú})¢°-o³[ö‡ä=Sð %v;¯-úk®àj„N‰sþ•ÄNlg㢢@ Dƒh!¦» ( ~ItTé¸Sl‡,dÃŽwÖ“Û‰w/‘ðÝk7Š”|zóÞûæ{ó¹ôù¥t):f¥2à5XؼYb×…(acP+ÐØï¬Î¼h»J÷2ƒm¯jv õg— ²]b¡6ÁùÙ‘o]!x*_ `ábyäDš&-`Î'‹u“9zÉxúòÔõSe,¡€‰Ì×CËÁzGl²ŒP·U_ñ 9”¥6Éé ©ˆê4óç_¹Ž l‚4é‡juʉ Êô qˆ’EtÅTŽ8rŒ:½à³'°#¶N|8Îò8úòäÔagaRøÆµÍPâê»ó»è=í¼H~ªt%±©dRMQܬÌE7 T@„ehJP–u¿"—a™þ‹’_»bˆ©|äDõ™[v<5‹t#WÄŽ#„ÑQôåɉW›Æ#¯0¹î+©UìÛ€V×C^ Æ68¼×0PÎ ¦ÛÀ´ÿ²e%6ÙØÅÄ^Õ;ÕkmÙ¤zAÞ§MRѰ­È4¹5¹=奛Òm÷1‚^&…ªò%ߢu&\#òÌoŽ8i1>Ž˜ÍF"À'. zjÝKJëþ2R½Z]n ì}5dzÔWȰ„º†o¸_LîÊî /¤RËÏÖ–_ví2UHãâ=Ÿµë„}k+8»Núò3”m¢Èæp†YN>Œ¾`±Ò&Ê~ávFMu‚’ÜUIÁ¤t2ÔH¾½s3,¡¼÷Ù">ñ©'ú1C‡ý”@_2j#÷åm²f`c¨ô ÛëgK‚>ײ6Òz›}ÂhHpz€†× Doj,ßóÂ?¬¨ZS÷¸‚r¥€è ;e[–þ Á&¦²3Žk°ÙuYô'^Ë3yôŒ~ᆳP€O¹î=à1›€Yú ‘¸N­2ò€šø‘ýï=°¨ÃíX9@+}¶|Æ^ù¨Õ´›e¼ôTYÙJ7V5XëbÒ v¬¬1<œŠtö)¾Ô"™dò—‡˜Ê¬»z¬)Êë’/ŸÁŸ‹¢Ù³{-`§lꉕUŽEÝìÈåðŠñqÚ—¯H›]Ìw“0ˆ~:Ó}ñNUG`ðÁ‰=.y {(wa‹vÉ}9›$§j]ìøKŒˆ6i ³/jÒ…¨-b£ä›!¬„Tñã9nŠ¢¶3‰SìÄ›&=¸ñ?|6ÿAŽ_áã t³c7_w’LY©^I…—@‚MB–°¸²T΀VêŽÎ­X˜‰Çž\¥¿2Ó̓0ÓîP=ž•Owý?Ü–Ïfá|êŸñÈÃŒ¥rÜ5«²p¼iÒ_^“õîbæmS”¯°{zÑ>¿ëQó'g7Ér=Xã·€ô²ÙØÞ·XQ¦_¬ýíF%¯Èë;˜¯r:d¹Ž ÑO5ß˔͢¥Û[°Ž Û‡†Ë„”¥ÔÃXØX*Fã¨)ÊáSC™‚ðß…xçÖÍ·°ø G„¯ð‰÷Ž.²§ŒÊ ÷7…Ù%¡!;†[fÎÐÒÈE»–_oôIO o¦m”Ø#„uÖii 2& 9€ÙN0 lp6à5Ðüõð½ ÒÑø:ãPUöró2SKeQsgš´(€ùƒ"À¿å·Û‚ÐC|Áä!ïÛ€¹[N#'6Ï Ìî&cxŒ`@, [Gï(¹C߉…[a 聆f dK1 i¼÷s×ÛHVEÙª'^ ‰år«ì‚ H#Íù—ØNb{…ŸÙÍH¨G#B Û±’´Ä.×±`X ©4,†šè¦{†n˜º¡5 ÓÝÓºÜqÕ«ÏKå¹|“ÙØµ‰Ryʢλ÷{î}÷ÂÚ}¼Myè>¦Sx—d]¼1W€ ¹šÚg§ÇöuÐÇÌ*²‘§ú¶¾iŸHkâ. ¬`æîJ¸ÆˆZå˜kÚN—¢jPònųäïfww¥G‘¦3‰c—Ok«ÅŸ78—ðU¤]±¸¨)S÷ìMÔÌ0j:À¯Þž#À¹b .0il4fà=îÛ†Ó„ƒ·9…ÌC±‰VN6ÌJç˜fNsÃtÆÌ á¤u‰>¢HÞ(7õ¢/-¡™9+[/ôªBCä}`W@`DL™ºg8Œê Xîõ«»s˜+¯š—‘»ß±Òù û$¾b›ð#¤¸ÓHHaæíÓÙeö6ؘ¹¡¢Lb­¢•¬hãj&Ë+||G=ÖZ«%I’DªøÆ>5ØŒ‰¢|©¦ä)~6ž ÀG¶ßõ®Ùq¹ë·´aúk—G»ˆUÑ8¥½kæBZÁÌ\JçU…݃Àš«÷y¿ê>­ Éc÷È»9´iüq‰†€¹úÔx3™ì~ú=jÊ0_£§2š4€©ßõªÙaäiòŽ…—%W=—¿þ`6Ÿ¤ ÷m¡CËkSÂ멯rËüiuýà O2J9\—´ZûØ!=N‡»hóo¾6Ñ0ꇓù|\“LX§FNßAøBâVôor5Ô¡Épûäö8ÛQ©k-Vóvî€\ Mä¤pDz`÷vQ«~È ¼®U#”=÷#Jì  aö!4„ºìçð˜@h‚Iäi`]6²;àø'åɈg:”ÃÕ¬r+ÊVj+‚_XZ[‹F'oµ›GyÕbh””w6y)T6óþ MËa\8÷îÔÓc°+€†1¦ $+£ßšÀ€ „FÁ¼°ÀftPîqûK>à K1·ö,Ó{£]—áÚ3º»TÐ3wD2kIÃòãx­. ;ÕŠ] æm!Ú5:¡¡â¹»^ù…~`W £Å°Ã¿s©7€?¦äо›"<Ã'Ûð·$ckŽõµ~Ð`׿_tØ YØÞâ£ÆÊ‚l½jbN1ûâ¢ùjs¯Yßô§H&••ë¹vН‘š<_ñÜý¤©q&ØSSž¹pxãõ£Éœ† O{Ó„g|búÜŠ?¼¯%ò¦.ÛÖ§8³¾™wêš_Ú± ®Z¯ÂKy› ­VÖbÁ`P^å -{oÈ(¥¥á¾ìAˆ3Á~œšrÏßñ¤‘ð|†&Ž{é³7yžáù~X ¢l w] YÞb<³5C´Sä%_ÓN7YAq%ÐF:EÍÕdK)rA׫%TäžV r&8J¦ û^›åÝË& p@¨OQ?ô¾wðØŸW^ç¸V!“_ñ¨6áÞm­ª'P¬©•("„ µŒH×­:'‡•îeP„°óN4Ø>><¥Uz›òè 4Û«èæk& °ÎN œÚß2QÀ|Ùç÷Ëq­áâõ®¦eW©¹Ò™UæsÀ­¢`QµZKZë"i£)Ñ"[1œQJÑã-ÄÊ!>Õ&u5¼¾xúL¤‰EÐ&=Ù³ûëôÿN¯Ï`*`ÐÒÑ€žÝù çÕý[šŠˆ(QÙCí“ù\Ã*\¡¸b£îÌÈQÙ®œ¶¹V¡õ ¦Oï&k>Z3;.l7ÐgOÇð½“HìnH%{*ÿg|ÿow's˜-é`…çÁ€Å—Ýó§ÿ ßEmc˜d·$ó¾`¶ºÓV©‚Ýý¤œ‰òXJ7Œ«øŽâh]í€Óœ§ã"Fc„99o‘¬d¾„ÖÕMî% ˜÷{À2f¯^zùGo-À´.šªžÒ†ÅQN-|Rêjñ,ñþT„¤ü}XHÊ_ò¯V•“ÃËÚØæR݈o…VƆÊôj¿ýNA|¨Õ‰øo@`ÀVÙ äáJÌÑõ7õÿá7 `j¾,Àº÷žïiÆørþUA„`¥“–\Éí)&p9§Œv9ãXjî„âÝxpߥlTé¸~µDu­?m–dì ¶J–z±·Gxð:±(ëô£~Ì”6ú#èkP^:ò´-25Eµ¯Œ%2ÚÉù’ZÚÁZËK*™3¹AâÒ/š$–œðªC~l‰‚ï »ÆýÎušì  Ù”zÕ#¼s©?Y4€{º1ê˜X€«™(y‡+jr°IÓ#:ÉÛHÒ«6ÖB6¯“UµŒ¶L‚ÇY•´Û°ŸMÙèF¡úJ²}w™è`W ÍfÂØ=Þºòx²x?1c#Fý•IöPžµnùó]Lb^É:i3Nû#©D›ò8ÇåˆèüÖZArŽ’0o×R8°®h[8Á}iè¡ì °J׿…èë·&“…øÈ­P™Éa¶AÒÈ|¡-ïÞwüé&i“ÒFV °å¬D@e«èº}”¼Ÿ“Ò…JµºU\ úp(g8é]ηtÅ´þ˜š äžá( òøÿ»|8YH€Ç}­ºƒÌ–áÙ0ö‰›Ø@rS4k:-¼ !ʄəժÞ(À¡¬îäS±H4ººÊYЊÜò3=Qƒ)“ 58½0êy.xûµ£É¬GÓÊ*½à…Ï5*‡°áëœÈï ÆUÓI;‡o$íxf)©jjU$µ>T²WtĬFƒ¨±éò-ý@R&ÈÁ ÷<ÿOïM-À¤(§?˜VVy:óüÚ˜YùÏå%ÜÒœ¡VWU(C¸È-º¼/‰uÕÔ;6|»’A­·ˆó=3†Qóà×ð¡Êºõºwùþd&±ÑˆX×ÉNò‚°–7í£þr™[ki _²ò%§è®j¡WrÜõÌU1PQ´&ŸwÞ¨±¸º½Î ©€ÿªwœ°{f Ý“zݺ<­ºNáüç~>7€Øˆ-ÊÒ];J,4<¹ã‡ß[âù_´œ-É2Y3‘Ôæf…ÊjJhiôiDP˜Ë(6¼í(Š q½ã¾qbïìóÀ†N?PÿšÇ`}rôÅóø1ÍQÕŠ‘6(8Ùü8“£8|Š ~ºÚêÕ8e[g·È…P QU­vÇ´’DÑ Æ|( b„p²ÚÝpÏÎÆ‰Y¾7¡“ôÖŸ®ýÕûþ“þ;'€iáìpÄâ˺µ3›ïLËyåCJû„p@à‚¢€/FS8å Ú‘ù‚dr2eg{·Ùà74¥à¾?±€yñ:o`6¼õ—Ÿžþ'GS éÙ¼<™ À¶ðLU+^Æ{g5_ïÅ“ñ7p®“æw5uÿB=Ú³WiO£›ª¦&azw’‰ 3^+æÕT '¥ZÙ$@¶H>rÈó&¢X§2nHÿ‹#S+¾6®Ë°Ä i') $Úb%ä|›Ðyº½ýb¬'ó]Ñ ÀÊ\6ñP{­I_” –BÉÇZ,©[ö·oê:Ìk¾9€_ÊÆ‰S}abØWWDÜÆˆ“”Ø&`Ÿí•²Aój8 àßÊRƒg·6ÑbM Ð°ÏÆšÀª-!»%ÍŒ!7ÖåöŽÅw½èš@ ñG êFPúU³ÂÛS+ï%/ àãÅ¿Ggí¼•-µ»‹ÈŸ,x@4PB˜šOwã½`16¯Ù¼*×/`ï? ê¬ì«&^üF]b ͇Mge†æui=I½°µöªc$`|zÅ)ä† ,‚ÌÐ\ f†<«Hü稆õ|%ùuÅTÀü3xee‹GLý‚²ÇñÙ4ÿŸ†Db¼©VÊò<&æg×z¹SÀÇ%!´‘@¦Ah*g¸k:`þ{Sȵþ@w¬H —à ×r…Ë«©ËkzËêË9Œ·ŸÎ Ï{Ñ»ˆ ÃÝP4ˆÎtjù±<—Ñbìï¿qõ£óOë›ß§«½hÕd .Ô )¸¦c7¨FüÅØù}z)óð‡¢Ñ€×¯&Χ0ƒå•掚P€œ¤"‹ÝÌ+yoëöW«ÙPéRÚ¿†’Ä 3MÖÝdp A¯œ+г¼ N¿@vPN26ð°’Q@F[-ƺ…¿BØzÀòÁŸ¦»ènâ¢"wƒ1úD(  +yÔî™#ô—fþ]9èpöréÄhÀ)·.Ô$¸¥` 59I*)rWüµ\,Ïø£ÃkS“U »ÒL¬J£ß_\Xè/¯.,,»Ü1ÈI¸+Ô›¤¡°<«_£û—½³×qˆ¢0âx JÄcP° Ùn%:^e „¢B QQ@ƒD‹–ð#­²`;¬q€8dœ8 ö˜üØaв<3òÍ4øÞ:šb>ÏH7眹r^íZý¿ü£ãËrý¬Ü'šøNË=™êIÁ™¤YðYm¡ÝN@…Ä·ü ž}m¶Žû“¬ßÉÐÇD·à‰Dã ›ÁºÊ€ï:Ä ŒýÚòCí¡ždh<@– '0ÆV0º¨ƒ{Ä•üÝ‚2Z}2ÈlÇ‚¥Å¿]tÜåºz€QÖ j.çí(”Q÷Éh|Ò–-\j†itÕìÕ¢íe„^Ÿ È¥¤#,[¬[~·ãuµ_½¼·÷d»ö`#C-ôÜ€\R:²y[n"™F÷¾vþ´ªz0}”‘0£?‚‡[?ïÛ9ÞʦÑýö0m&®Ýþ4Œõ˜2˜jôf…Ú‚ç.·wÿ* CqÇ}_C_CÐÅš©P2ú,â "*Šà"ŠTÐAAqƒ6¨ þÅvðÁ¶1mŽK—’áÂår>¯ð]ïýâéKyíÕõ^ÿ£LÞO­ (0¡v9ðQfÀGðK)0¿(Óz S@‹¼÷Øyû‹2qø (°èÕåü¢L=ˆa+æW—Ó(A‘øÍëd¥& ˆÕeêø›ó«;g0 V—¹ão<îz> ˆÕeòøOã‰Rbu™;þÆSàÅ›“]«ËÔñ7ž+Hý9Äê2süÍþÀ’TÊ“{Äñ7ÛK‚®Ç߬,Y¥ ‚Ý%õFªp9°´üÈéÀr|êl`ùm#™­;Xeoê ,.–+?"Ú.ÄIEND®B`‚mpmath-1.0.0/doc/source/technical.txt000066400000000000000000000357211316273626600175620ustar00rootroot00000000000000Precision and representation issues =================================== Most of the time, using mpmath is simply a matter of setting the desired precision and entering a formula. For verification purposes, a quite (but not always!) reliable technique is to calculate the same thing a second time at a higher precision and verifying that the results agree. To perform more advanced calculations, it is important to have some understanding of how mpmath works internally and what the possible sources of error are. This section gives an overview of arbitrary-precision binary floating-point arithmetic and some concepts from numerical analysis. The following concepts are important to understand: * The main sources of numerical errors are rounding and cancellation, which are due to the use of finite-precision arithmetic, and truncation or approximation errors, which are due to approximating infinite sequences or continuous functions by a finite number of samples. * Errors propagate between calculations. A small error in the input may result in a large error in the output. * Most numerical algorithms for complex problems (e.g. integrals, derivatives) give wrong answers for sufficiently ill-behaved input. Sometimes virtually the only way to get a wrong answer is to design some very contrived input, but at other times the chance of accidentally obtaining a wrong result even for reasonable-looking input is quite high. * Like any complex numerical software, mpmath has implementation bugs. You should be reasonably suspicious about any results computed by mpmath, even those it claims to be able to compute correctly! If possible, verify results analytically, try different algorithms, and cross-compare with other software. Precision, error and tolerance ------------------------------ The following terms are common in this documentation: - *Precision* (or *working precision*) is the precision at which floating-point arithmetic operations are performed. - *Error* is the difference between a computed approximation and the exact result. - *Accuracy* is the inverse of error. - *Tolerance* is the maximum error (or minimum accuracy) desired in a result. Error and accuracy can be measured either directly, or logarithmically in bits or digits. Specifically, if a `\hat y` is an approximation for `y`, then - (Direct) absolute error = `|\hat y - y|` - (Direct) relative error = `|\hat y - y| |y|^{-1}` - (Direct) absolute accuracy = `|\hat y - y|^{-1}` - (Direct) relative accuracy = `|\hat y - y|^{-1} |y|` - (Logarithmic) absolute error = `\log_b |\hat y - y|` - (Logarithmic) relative error = `\log_b |\hat y - y| - \log_b |y|` - (Logarithmic) absolute accuracy = `-\log_b |\hat y - y|` - (Logarithmic) relative accuracy = `-\log_b |\hat y - y| + \log_b |y|` where `b = 2` and `b = 10` for bits and digits respectively. Note that: - The logarithmic error roughly equals the position of the first incorrect bit or digit - The logarithmic accuracy roughly equals the number of correct bits or digits in the result These definitions also hold for complex numbers, using `|a+bi| = \sqrt{a^2+b^2}`. *Full accuracy* means that the accuracy of a result at least equals *prec*-1, i.e. it is correct except possibly for the last bit. Representation of numbers ------------------------- Mpmath uses binary arithmetic. A binary floating-point number is a number of the form `man \times 2^{exp}` where both *man* (the *mantissa*) and *exp* (the *exponent*) are integers. Some examples of floating-point numbers are given in the following table. +--------+----------+----------+ | Number | Mantissa | Exponent | +========+==========+==========+ | 3 | 3 | 0 | +--------+----------+----------+ | 10 | 5 | 1 | +--------+----------+----------+ | -16 | -1 | 4 | +--------+----------+----------+ | 1.25 | 5 | -2 | +--------+----------+----------+ The representation as defined so far is not unique; one can always multiply the mantissa by 2 and subtract 1 from the exponent with no change in the numerical value. In mpmath, numbers are always normalized so that *man* is an odd number, with the exception of zero which is always taken to have *man = exp = 0*. With these conventions, every representable number has a unique representation. (Mpmath does not currently distinguish between positive and negative zero.) Simple mathematical operations are now easy to define. Due to uniqueness, equality testing of two numbers simply amounts to separately checking equality of the mantissas and the exponents. Multiplication of nonzero numbers is straightforward: `(m 2^e) \times (n 2^f) = (m n) \times 2^{e+f}`. Addition is a bit more involved: we first need to multiply the mantissa of one of the operands by a suitable power of 2 to obtain equal exponents. More technically, mpmath represents a floating-point number as a 4-tuple *(sign, man, exp, bc)* where *sign* is 0 or 1 (indicating positive vs negative) and the mantissa is nonnegative; *bc* (*bitcount*) is the size of the absolute value of the mantissa as measured in bits. Though redundant, keeping a separate sign field and explicitly keeping track of the bitcount significantly speeds up arithmetic (the bitcount, especially, is frequently needed but slow to compute from scratch due to the lack of a Python built-in function for the purpose). Contrary to popular belief, floating-point *numbers* do not come with an inherent "small uncertainty", although floating-point *arithmetic* generally is inexact. Every binary floating-point number is an exact rational number. With arbitrary-precision integers used for the mantissa and exponent, floating-point numbers can be added, subtracted and multiplied *exactly*. In particular, integers and integer multiples of 1/2, 1/4, 1/8, 1/16, etc. can be represented, added and multiplied exactly in binary floating-point arithmetic. Floating-point arithmetic is generally approximate because the size of the mantissa must be limited for efficiency reasons. The maximum allowed width (bitcount) of the mantissa is called the precision or *prec* for short. Sums and products of floating-point numbers are exact as long as the absolute value of the mantissa is smaller than `2^{prec}`. As soon as the mantissa becomes larger than this, it is truncated to contain at most *prec* bits (the exponent is incremented accordingly to preserve the magnitude of the number), and this operation introduces a rounding error. Division is also generally inexact; although we can add and multiply exactly by setting the precision high enough, no precision is high enough to represent for example 1/3 exactly (the same obviously applies for roots, trigonometric functions, etc). The special numbers ``+inf``, ``-inf`` and ``nan`` are represented internally by a zero mantissa and a nonzero exponent. Mpmath uses arbitrary precision integers for both the mantissa and the exponent, so numbers can be as large in magnitude as permitted by the computer's memory. Some care may be necessary when working with extremely large numbers. Although standard arithmetic operators are safe, it is for example futile to attempt to compute the exponential function of of `10^{100000}`. Mpmath does not complain when asked to perform such a calculation, but instead chugs away on the problem to the best of its ability, assuming that computer resources are infinite. In the worst case, this will be slow and allocate a huge amount of memory; if entirely impossible Python will at some point raise ``OverflowError: long int too large to convert to int``. For further details on how the arithmetic is implemented, refer to the mpmath source code. The basic arithmetic operations are found in the ``libmp`` directory; many functions there are commented extensively. Decimal issues -------------- Mpmath uses binary arithmetic internally, while most interaction with the user is done via the decimal number system. Translating between binary and decimal numbers is a somewhat subtle matter; many Python novices run into the following "bug" (addressed in the `General Python FAQ `_):: >>> 1.2 - 1.0 0.19999999999999996 Decimal fractions fall into the category of numbers that generally cannot be represented exactly in binary floating-point form. For example, none of the numbers 0.1, 0.01, 0.001 has an exact representation as a binary floating-point number. Although mpmath can approximate decimal fractions with any accuracy, it does not solve this problem for all uses; users who need *exact* decimal fractions should look at the ``decimal`` module in Python's standard library (or perhaps use fractions, which are much faster). With *prec* bits of precision, an arbitrary number can be approximated relatively to within `2^{-prec}`, or within `10^{-dps}` for *dps* decimal digits. The equivalent values for *prec* and *dps* are therefore related proportionally via the factor `C = \log(10)/\log(2)`, or roughly 3.32. For example, the standard (binary) precision in mpmath is 53 bits, which corresponds to a decimal precision of 15.95 digits. More precisely, mpmath uses the following formulas to translate between *prec* and *dps*:: dps(prec) = max(1, int(round(int(prec) / C - 1))) prec(dps) = max(1, int(round((int(dps) + 1) * C))) Note that the dps is set 1 decimal digit lower than the corresponding binary precision. This is done to hide minor rounding errors and artifacts resulting from binary-decimal conversion. As a result, mpmath interprets 53 bits as giving 15 digits of decimal precision, not 16. The *dps* value controls the number of digits to display when printing numbers with :func:`str`, while the decimal precision used by :func:`repr` is set two or three digits higher. For example, with 15 dps we have:: >>> from mpmath import * >>> mp.dps = 15 >>> str(pi) '3.14159265358979' >>> repr(+pi) "mpf('3.1415926535897931')" The extra digits in the output from ``repr`` ensure that ``x == eval(repr(x))`` holds, i.e. that numbers can be converted to strings and back losslessly. It should be noted that precision and accuracy do not always correlate when translating between binary and decimal. As a simple example, the number 0.1 has a decimal precision of 1 digit but is an infinitely accurate representation of 1/10. Conversely, the number `2^{-50}` has a binary representation with 1 bit of precision that is infinitely accurate; the same number can actually be represented exactly as a decimal, but doing so requires 35 significant digits:: 0.00000000000000088817841970012523233890533447265625 All binary floating-point numbers can be represented exactly as decimals (possibly requiring many digits), but the converse is false. Correctness guarantees ---------------------- Basic arithmetic operations (with the ``mp`` context) are always performed with correct rounding. Results that can be represented exactly are guranteed to be exact, and results from single inexact operations are guaranteed to be the best possible rounded values. For higher-level operations, mpmath does not generally guarantee correct rounding. In general, mpmath only guarantees that it will use at least the user-set precision to perform a given calculation. *The user may have to manually set the working precision higher than the desired accuracy for the result, possibly much higher.* Functions for evaluation of transcendental functions, linear algebra operations, numerical integration, etc., usually automatically increase the working precision and use a stricter tolerance to give a correctly rounded result with high probability: for example, at 50 bits the temporary precision might be set to 70 bits and the tolerance might be set to 60 bits. It can often be assumed that such functions return values that have full accuracy, given inputs that are exact (or sufficiently precise approximations of exact values), but the user must exercise judgement about whether to trust mpmath. The level of rigor in mpmath covers the entire spectrum from "always correct by design" through "nearly always correct" and "handling the most common errors" to "just computing blindly and hoping for the best". Of course, a long-term development goal is to successively increase the rigor where possible. The following list might give an idea of the current state. Operations that are correctly rounded: * Addition, subtraction and multiplication of real and complex numbers. * Division and square roots of real numbers. * Powers of real numbers, assuming sufficiently small integer exponents (huge powers are rounded in the right direction, but possibly farther than necessary). * Conversion from decimal to binary, for reasonably sized numbers (roughly between `10^{-100}` and `10^{100}`). * Typically, transcendental functions for exact input-output pairs. Operations that should be fully accurate (however, the current implementation may be based on a heuristic error analysis): * Radix conversion (large or small numbers). * Mathematical constants like `\pi`. * Both real and imaginary parts of exp, cos, sin, cosh, sinh, log. * Other elementary functions (the largest of the real and imaginary part). * The gamma and log-gamma functions (the largest of the real and the imaginary part; both, when close to real axis). * Some functions based on hypergeometric series (the largest of the real and imaginary part). Correctness of root-finding, numerical integration, etc. largely depends on the well-behavedness of the input functions. Specific limitations are sometimes noted in the respective sections of the documentation. Double precision emulation -------------------------- On most systems, Python's ``float`` type represents an IEEE 754 *double precision* number, with a precision of 53 bits and rounding-to-nearest. With default precision (``mp.prec = 53``), the mpmath ``mpf`` type roughly emulates the behavior of the ``float`` type. Sources of incompatibility include the following: * In hardware floating-point arithmetic, the size of the exponent is restricted to a fixed range: regular Python floats have a range between roughly `10^{-300}` and `10^{300}`. Mpmath does not emulate overflow or underflow when exponents fall outside this range. * On some systems, Python uses 80-bit (extended double) registers for floating-point operations. Due to double rounding, this makes the ``float`` type less accurate. This problem is only known to occur with Python versions compiled with GCC on 32-bit systems. * Machine floats very close to the exponent limit round subnormally, meaning that they lose accuracy (Python may raise an exception instead of rounding a ``float`` subnormally). * Mpmath is able to produce more accurate results for transcendental functions. Further reading --------------- There are many excellent textbooks on numerical analysis and floating-point arithmetic. Some good web resources are: * `David Goldberg, What Every Computer Scientist Should Know About Floating-Point Arithmetic `_ * `The Wikipedia article about numerical analysis `_ mpmath-1.0.0/epydoc.conf000066400000000000000000000105721316273626600151510ustar00rootroot00000000000000[epydoc] # Epydoc section marker (required by ConfigParser) # The list of objects to document. Objects can be named using # dotted names, module filenames, or package directory names. # Alases for this option include "objects" and "values". modules: mpmath # The type of output that should be generated. Should be one # of: html, text, latex, dvi, ps, pdf. output: html # The path to the output directory. May be relative or absolute. target: doc_api # An integer indicating how verbose epydoc should be. The default # value is 0; negative values will supress warnings and errors; # positive values will give more verbose output. verbosity: 0 # A boolean value indicating that Epydoc should show a tracaback # in case of unexpected error. By default don't show tracebacks debug: 0 # If True, don't try to use colors or cursor control when doing # textual output. The default False assumes a rich text prompt simple-term: 0 ### Generation options # The default markup language for docstrings, for modules that do # not define __docformat__. Defaults to epytext. docformat: restructuredtext # Whether or not parsing should be used to examine objects. parse: yes # Whether or not introspection should be used to examine objects. introspect: yes # Don't examine in any way the modules whose dotted name match this # regular expression pattern. #exclude: # Don't perform introspection on the modules whose dotted name match this # regular expression pattern. #exclude-introspect # Don't perform parsing on the modules whose dotted name match this # regular expression pattern. #exclude-parse # The format for showing inheritance objects. # It should be one of: 'grouped', 'listed', 'included'. inheritance: listed # Whether or not to inclue private variables. (Even if included, # private variables will be hidden by default.) private: yes # Whether or not to list each module's imports. imports: no # Whether or not to include syntax highlighted source code in # the output (HTML only). sourcecode: yes # Whether or not to includea a page with Epydoc log, containing # effective option at the time of generation and the reported logs. include-log: no ### Output options # The documented project's name. name: Mpmath - Python library for arbitrary-precision floating-point arithmetic # The CSS stylesheet for HTML output. Can be the name of a builtin # stylesheet, or the name of a file. css: white # The documented project's URL. url: http://mpmath.googlecode.com/ # HTML code for the project link in the navigation bar. If left # unspecified, the project link will be generated based on the # project's name and URL. #link: My Cool Project # The "top" page for the documentation. Can be a URL, the name # of a module or class, or one of the special names "trees.html", # "indices.html", or "help.html" #top: os.path # An alternative help file. The named file should contain the # body of an HTML file; navigation bars will be added to it. #help: my_helpfile.html # Whether or not to include a frames-based table of contents. frames: yes # Whether each class should be listed in its own section when # generating LaTeX or PDF output. separate-classes: no ### API linking options # Define a new API document. A new interpreted text role # will be created #external-api: epydoc # Use the records in this file to resolve objects in the API named NAME. #external-api-file: epydoc:api-objects.txt # Use this URL prefix to configure the string returned for external API. #external-api-root: epydoc:http://epydoc.sourceforge.net/api ### Graph options # The list of graph types that should be automatically included # in the output. Graphs are generated using the Graphviz "dot" # executable. Graph types include: "classtree", "callgraph", # "umlclass". Use "all" to include all graph types graph: all # The path to the Graphviz "dot" executable, used to generate # graphs. dotpath: /usr/bin/dot # The name of one or more pstat files (generated by the profile # or hotshot module). These are used to generate call graphs. pstat: ./mpmath_profile.out # Specify the font used to generate Graphviz graphs. # (e.g., helvetica or times). graph-font: Courier # Specify the font size used to generate Graphviz graphs. graph-font-size: 10 ### Return value options # The condition upon which Epydoc should exit with a non-zero # exit status. Possible values are error, warning, docstring_warning #fail-on: error mpmath-1.0.0/mpmath/000077500000000000000000000000001316273626600143005ustar00rootroot00000000000000mpmath-1.0.0/mpmath/__init__.py000066400000000000000000000207301316273626600164130ustar00rootroot00000000000000__version__ = '1.0.0' from .usertools import monitor, timing from .ctx_fp import FPContext from .ctx_mp import MPContext from .ctx_iv import MPIntervalContext fp = FPContext() mp = MPContext() iv = MPIntervalContext() fp._mp = mp mp._mp = mp iv._mp = mp mp._fp = fp fp._fp = fp mp._iv = iv fp._iv = iv iv._iv = iv # XXX: extremely bad pickle hack from . import ctx_mp as _ctx_mp _ctx_mp._mpf_module.mpf = mp.mpf _ctx_mp._mpf_module.mpc = mp.mpc make_mpf = mp.make_mpf make_mpc = mp.make_mpc extraprec = mp.extraprec extradps = mp.extradps workprec = mp.workprec workdps = mp.workdps autoprec = mp.autoprec maxcalls = mp.maxcalls memoize = mp.memoize mag = mp.mag bernfrac = mp.bernfrac qfrom = mp.qfrom mfrom = mp.mfrom kfrom = mp.kfrom taufrom = mp.taufrom qbarfrom = mp.qbarfrom ellipfun = mp.ellipfun jtheta = mp.jtheta kleinj = mp.kleinj qp = mp.qp qhyper = mp.qhyper qgamma = mp.qgamma qfac = mp.qfac nint_distance = mp.nint_distance plot = mp.plot cplot = mp.cplot splot = mp.splot odefun = mp.odefun jacobian = mp.jacobian findroot = mp.findroot multiplicity = mp.multiplicity isinf = mp.isinf isnan = mp.isnan isnormal = mp.isnormal isint = mp.isint isfinite = mp.isfinite almosteq = mp.almosteq nan = mp.nan rand = mp.rand absmin = mp.absmin absmax = mp.absmax fraction = mp.fraction linspace = mp.linspace arange = mp.arange mpmathify = convert = mp.convert mpc = mp.mpc mpi = iv._mpi nstr = mp.nstr nprint = mp.nprint chop = mp.chop fneg = mp.fneg fadd = mp.fadd fsub = mp.fsub fmul = mp.fmul fdiv = mp.fdiv fprod = mp.fprod quad = mp.quad quadgl = mp.quadgl quadts = mp.quadts quadosc = mp.quadosc invertlaplace = mp.invertlaplace invlaptalbot = mp.invlaptalbot invlapstehfest = mp.invlapstehfest invlapdehoog = mp.invlapdehoog pslq = mp.pslq identify = mp.identify findpoly = mp.findpoly richardson = mp.richardson shanks = mp.shanks levin = mp.levin cohen_alt = mp.cohen_alt nsum = mp.nsum nprod = mp.nprod difference = mp.difference diff = mp.diff diffs = mp.diffs diffs_prod = mp.diffs_prod diffs_exp = mp.diffs_exp diffun = mp.diffun differint = mp.differint taylor = mp.taylor pade = mp.pade polyval = mp.polyval polyroots = mp.polyroots fourier = mp.fourier fourierval = mp.fourierval sumem = mp.sumem sumap = mp.sumap chebyfit = mp.chebyfit limit = mp.limit matrix = mp.matrix eye = mp.eye diag = mp.diag zeros = mp.zeros ones = mp.ones hilbert = mp.hilbert randmatrix = mp.randmatrix swap_row = mp.swap_row extend = mp.extend norm = mp.norm mnorm = mp.mnorm lu_solve = mp.lu_solve lu = mp.lu qr = mp.qr unitvector = mp.unitvector inverse = mp.inverse residual = mp.residual qr_solve = mp.qr_solve cholesky = mp.cholesky cholesky_solve = mp.cholesky_solve det = mp.det cond = mp.cond hessenberg = mp.hessenberg schur = mp.schur eig = mp.eig eig_sort = mp.eig_sort eigsy = mp.eigsy eighe = mp.eighe eigh = mp.eigh svd_r = mp.svd_r svd_c = mp.svd_c svd = mp.svd gauss_quadrature = mp.gauss_quadrature expm = mp.expm sqrtm = mp.sqrtm powm = mp.powm logm = mp.logm sinm = mp.sinm cosm = mp.cosm mpf = mp.mpf j = mp.j exp = mp.exp expj = mp.expj expjpi = mp.expjpi ln = mp.ln im = mp.im re = mp.re inf = mp.inf ninf = mp.ninf sign = mp.sign eps = mp.eps pi = mp.pi ln2 = mp.ln2 ln10 = mp.ln10 phi = mp.phi e = mp.e euler = mp.euler catalan = mp.catalan khinchin = mp.khinchin glaisher = mp.glaisher apery = mp.apery degree = mp.degree twinprime = mp.twinprime mertens = mp.mertens ldexp = mp.ldexp frexp = mp.frexp fsum = mp.fsum fdot = mp.fdot sqrt = mp.sqrt cbrt = mp.cbrt exp = mp.exp ln = mp.ln log = mp.log log10 = mp.log10 power = mp.power cos = mp.cos sin = mp.sin tan = mp.tan cosh = mp.cosh sinh = mp.sinh tanh = mp.tanh acos = mp.acos asin = mp.asin atan = mp.atan asinh = mp.asinh acosh = mp.acosh atanh = mp.atanh sec = mp.sec csc = mp.csc cot = mp.cot sech = mp.sech csch = mp.csch coth = mp.coth asec = mp.asec acsc = mp.acsc acot = mp.acot asech = mp.asech acsch = mp.acsch acoth = mp.acoth cospi = mp.cospi sinpi = mp.sinpi sinc = mp.sinc sincpi = mp.sincpi cos_sin = mp.cos_sin cospi_sinpi = mp.cospi_sinpi fabs = mp.fabs re = mp.re im = mp.im conj = mp.conj floor = mp.floor ceil = mp.ceil nint = mp.nint frac = mp.frac root = mp.root nthroot = mp.nthroot hypot = mp.hypot fmod = mp.fmod ldexp = mp.ldexp frexp = mp.frexp sign = mp.sign arg = mp.arg phase = mp.phase polar = mp.polar rect = mp.rect degrees = mp.degrees radians = mp.radians atan2 = mp.atan2 fib = mp.fib fibonacci = mp.fibonacci lambertw = mp.lambertw zeta = mp.zeta altzeta = mp.altzeta gamma = mp.gamma rgamma = mp.rgamma factorial = mp.factorial fac = mp.fac fac2 = mp.fac2 beta = mp.beta betainc = mp.betainc psi = mp.psi #psi0 = mp.psi0 #psi1 = mp.psi1 #psi2 = mp.psi2 #psi3 = mp.psi3 polygamma = mp.polygamma digamma = mp.digamma #trigamma = mp.trigamma #tetragamma = mp.tetragamma #pentagamma = mp.pentagamma harmonic = mp.harmonic bernoulli = mp.bernoulli bernfrac = mp.bernfrac stieltjes = mp.stieltjes hurwitz = mp.hurwitz dirichlet = mp.dirichlet bernpoly = mp.bernpoly eulerpoly = mp.eulerpoly eulernum = mp.eulernum polylog = mp.polylog clsin = mp.clsin clcos = mp.clcos gammainc = mp.gammainc gammaprod = mp.gammaprod binomial = mp.binomial rf = mp.rf ff = mp.ff hyper = mp.hyper hyp0f1 = mp.hyp0f1 hyp1f1 = mp.hyp1f1 hyp1f2 = mp.hyp1f2 hyp2f1 = mp.hyp2f1 hyp2f2 = mp.hyp2f2 hyp2f0 = mp.hyp2f0 hyp2f3 = mp.hyp2f3 hyp3f2 = mp.hyp3f2 hyperu = mp.hyperu hypercomb = mp.hypercomb meijerg = mp.meijerg appellf1 = mp.appellf1 appellf2 = mp.appellf2 appellf3 = mp.appellf3 appellf4 = mp.appellf4 hyper2d = mp.hyper2d bihyper = mp.bihyper erf = mp.erf erfc = mp.erfc erfi = mp.erfi erfinv = mp.erfinv npdf = mp.npdf ncdf = mp.ncdf expint = mp.expint e1 = mp.e1 ei = mp.ei li = mp.li ci = mp.ci si = mp.si chi = mp.chi shi = mp.shi fresnels = mp.fresnels fresnelc = mp.fresnelc airyai = mp.airyai airybi = mp.airybi airyaizero = mp.airyaizero airybizero = mp.airybizero scorergi = mp.scorergi scorerhi = mp.scorerhi ellipk = mp.ellipk ellipe = mp.ellipe ellipf = mp.ellipf ellippi = mp.ellippi elliprc = mp.elliprc elliprj = mp.elliprj elliprf = mp.elliprf elliprd = mp.elliprd elliprg = mp.elliprg agm = mp.agm jacobi = mp.jacobi chebyt = mp.chebyt chebyu = mp.chebyu legendre = mp.legendre legenp = mp.legenp legenq = mp.legenq hermite = mp.hermite pcfd = mp.pcfd pcfu = mp.pcfu pcfv = mp.pcfv pcfw = mp.pcfw gegenbauer = mp.gegenbauer laguerre = mp.laguerre spherharm = mp.spherharm besselj = mp.besselj j0 = mp.j0 j1 = mp.j1 besseli = mp.besseli bessely = mp.bessely besselk = mp.besselk besseljzero = mp.besseljzero besselyzero = mp.besselyzero hankel1 = mp.hankel1 hankel2 = mp.hankel2 struveh = mp.struveh struvel = mp.struvel angerj = mp.angerj webere = mp.webere lommels1 = mp.lommels1 lommels2 = mp.lommels2 whitm = mp.whitm whitw = mp.whitw ber = mp.ber bei = mp.bei ker = mp.ker kei = mp.kei coulombc = mp.coulombc coulombf = mp.coulombf coulombg = mp.coulombg barnesg = mp.barnesg superfac = mp.superfac hyperfac = mp.hyperfac loggamma = mp.loggamma siegeltheta = mp.siegeltheta siegelz = mp.siegelz grampoint = mp.grampoint zetazero = mp.zetazero riemannr = mp.riemannr primepi = mp.primepi primepi2 = mp.primepi2 primezeta = mp.primezeta bell = mp.bell polyexp = mp.polyexp expm1 = mp.expm1 powm1 = mp.powm1 unitroots = mp.unitroots cyclotomic = mp.cyclotomic mangoldt = mp.mangoldt secondzeta = mp.secondzeta nzeros = mp.nzeros backlunds = mp.backlunds lerchphi = mp.lerchphi stirling1 = mp.stirling1 stirling2 = mp.stirling2 # be careful when changing this name, don't use test*! def runtests(): """ Run all mpmath tests and print output. """ import os.path from inspect import getsourcefile from .tests import runtests as tests testdir = os.path.dirname(os.path.abspath(getsourcefile(tests))) importdir = os.path.abspath(testdir + '/../..') tests.testit(importdir, testdir) def doctests(filter=[]): try: import psyco; psyco.full() except ImportError: pass import sys from timeit import default_timer as clock for i, arg in enumerate(sys.argv): if '__init__.py' in arg: filter = [sn for sn in sys.argv[i+1:] if not sn.startswith("-")] break import doctest globs = globals().copy() for obj in globs: #sorted(globs.keys()): if filter: if not sum([pat in obj for pat in filter]): continue sys.stdout.write(str(obj) + " ") sys.stdout.flush() t1 = clock() doctest.run_docstring_examples(globs[obj], {}, verbose=("-v" in sys.argv)) t2 = clock() print(round(t2-t1, 3)) if __name__ == '__main__': doctests() mpmath-1.0.0/mpmath/calculus/000077500000000000000000000000001316273626600161135ustar00rootroot00000000000000mpmath-1.0.0/mpmath/calculus/__init__.py000066400000000000000000000002421316273626600202220ustar00rootroot00000000000000from . import calculus # XXX: hack to set methods from . import approximation from . import differentiation from . import extrapolation from . import polynomials mpmath-1.0.0/mpmath/calculus/approximation.py000066400000000000000000000211611316273626600213600ustar00rootroot00000000000000from ..libmp.backend import xrange from .calculus import defun #----------------------------------------------------------------------------# # Approximation methods # #----------------------------------------------------------------------------# # The Chebyshev approximation formula is given at: # http://mathworld.wolfram.com/ChebyshevApproximationFormula.html # The only major changes in the following code is that we return the # expanded polynomial coefficients instead of Chebyshev coefficients, # and that we automatically transform [a,b] -> [-1,1] and back # for convenience. # Coefficient in Chebyshev approximation def chebcoeff(ctx,f,a,b,j,N): s = ctx.mpf(0) h = ctx.mpf(0.5) for k in range(1, N+1): t = ctx.cospi((k-h)/N) s += f(t*(b-a)*h + (b+a)*h) * ctx.cospi(j*(k-h)/N) return 2*s/N # Generate Chebyshev polynomials T_n(ax+b) in expanded form def chebT(ctx, a=1, b=0): Tb = [1] yield Tb Ta = [b, a] while 1: yield Ta # Recurrence: T[n+1](ax+b) = 2*(ax+b)*T[n](ax+b) - T[n-1](ax+b) Tmp = [0] + [2*a*t for t in Ta] for i, c in enumerate(Ta): Tmp[i] += 2*b*c for i, c in enumerate(Tb): Tmp[i] -= c Ta, Tb = Tmp, Ta @defun def chebyfit(ctx, f, interval, N, error=False): r""" Computes a polynomial of degree `N-1` that approximates the given function `f` on the interval `[a, b]`. With ``error=True``, :func:`~mpmath.chebyfit` also returns an accurate estimate of the maximum absolute error; that is, the maximum value of `|f(x) - P(x)|` for `x \in [a, b]`. :func:`~mpmath.chebyfit` uses the Chebyshev approximation formula, which gives a nearly optimal solution: that is, the maximum error of the approximating polynomial is very close to the smallest possible for any polynomial of the same degree. Chebyshev approximation is very useful if one needs repeated evaluation of an expensive function, such as function defined implicitly by an integral or a differential equation. (For example, it could be used to turn a slow mpmath function into a fast machine-precision version of the same.) **Examples** Here we use :func:`~mpmath.chebyfit` to generate a low-degree approximation of `f(x) = \cos(x)`, valid on the interval `[1, 2]`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> poly, err = chebyfit(cos, [1, 2], 5, error=True) >>> nprint(poly) [0.00291682, 0.146166, -0.732491, 0.174141, 0.949553] >>> nprint(err, 12) 1.61351758081e-5 The polynomial can be evaluated using ``polyval``:: >>> nprint(polyval(poly, 1.6), 12) -0.0291858904138 >>> nprint(cos(1.6), 12) -0.0291995223013 Sampling the true error at 1000 points shows that the error estimate generated by ``chebyfit`` is remarkably good:: >>> error = lambda x: abs(cos(x) - polyval(poly, x)) >>> nprint(max([error(1+n/1000.) for n in range(1000)]), 12) 1.61349954245e-5 **Choice of degree** The degree `N` can be set arbitrarily high, to obtain an arbitrarily good approximation. As a rule of thumb, an `N`-term Chebyshev approximation is good to `N/(b-a)` decimal places on a unit interval (although this depends on how well-behaved `f` is). The cost grows accordingly: ``chebyfit`` evaluates the function `(N^2)/2` times to compute the coefficients and an additional `N` times to estimate the error. **Possible issues** One should be careful to use a sufficiently high working precision both when calling ``chebyfit`` and when evaluating the resulting polynomial, as the polynomial is sometimes ill-conditioned. It is for example difficult to reach 15-digit accuracy when evaluating the polynomial using machine precision floats, no matter the theoretical accuracy of the polynomial. (The option to return the coefficients in Chebyshev form should be made available in the future.) It is important to note the Chebyshev approximation works poorly if `f` is not smooth. A function containing singularities, rapid oscillation, etc can be approximated more effectively by multiplying it by a weight function that cancels out the nonsmooth features, or by dividing the interval into several segments. """ a, b = ctx._as_points(interval) orig = ctx.prec try: ctx.prec = orig + int(N**0.5) + 20 c = [chebcoeff(ctx,f,a,b,k,N) for k in range(N)] d = [ctx.zero] * N d[0] = -c[0]/2 h = ctx.mpf(0.5) T = chebT(ctx, ctx.mpf(2)/(b-a), ctx.mpf(-1)*(b+a)/(b-a)) for (k, Tk) in zip(range(N), T): for i in range(len(Tk)): d[i] += c[k]*Tk[i] d = d[::-1] # Estimate maximum error err = ctx.zero for k in range(N): x = ctx.cos(ctx.pi*k/N) * (b-a)*h + (b+a)*h err = max(err, abs(f(x) - ctx.polyval(d, x))) finally: ctx.prec = orig if error: return d, +err else: return d @defun def fourier(ctx, f, interval, N): r""" Computes the Fourier series of degree `N` of the given function on the interval `[a, b]`. More precisely, :func:`~mpmath.fourier` returns two lists `(c, s)` of coefficients (the cosine series and sine series, respectively), such that .. math :: f(x) \sim \sum_{k=0}^N c_k \cos(k m x) + s_k \sin(k m x) where `m = 2 \pi / (b-a)`. Note that many texts define the first coefficient as `2 c_0` instead of `c_0`. The easiest way to evaluate the computed series correctly is to pass it to :func:`~mpmath.fourierval`. **Examples** The function `f(x) = x` has a simple Fourier series on the standard interval `[-\pi, \pi]`. The cosine coefficients are all zero (because the function has odd symmetry), and the sine coefficients are rational numbers:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> c, s = fourier(lambda x: x, [-pi, pi], 5) >>> nprint(c) [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] >>> nprint(s) [0.0, 2.0, -1.0, 0.666667, -0.5, 0.4] This computes a Fourier series of a nonsymmetric function on a nonstandard interval:: >>> I = [-1, 1.5] >>> f = lambda x: x**2 - 4*x + 1 >>> cs = fourier(f, I, 4) >>> nprint(cs[0]) [0.583333, 1.12479, -1.27552, 0.904708, -0.441296] >>> nprint(cs[1]) [0.0, -2.6255, 0.580905, 0.219974, -0.540057] It is instructive to plot a function along with its truncated Fourier series:: >>> plot([f, lambda x: fourierval(cs, I, x)], I) #doctest: +SKIP Fourier series generally converge slowly (and may not converge pointwise). For example, if `f(x) = \cosh(x)`, a 10-term Fourier series gives an `L^2` error corresponding to 2-digit accuracy:: >>> I = [-1, 1] >>> cs = fourier(cosh, I, 9) >>> g = lambda x: (cosh(x) - fourierval(cs, I, x))**2 >>> nprint(sqrt(quad(g, I))) 0.00467963 :func:`~mpmath.fourier` uses numerical quadrature. For nonsmooth functions, the accuracy (and speed) can be improved by including all singular points in the interval specification:: >>> nprint(fourier(abs, [-1, 1], 0), 10) ([0.5000441648], [0.0]) >>> nprint(fourier(abs, [-1, 0, 1], 0), 10) ([0.5], [0.0]) """ interval = ctx._as_points(interval) a = interval[0] b = interval[-1] L = b-a cos_series = [] sin_series = [] cutoff = ctx.eps*10 for n in xrange(N+1): m = 2*n*ctx.pi/L an = 2*ctx.quadgl(lambda t: f(t)*ctx.cos(m*t), interval)/L bn = 2*ctx.quadgl(lambda t: f(t)*ctx.sin(m*t), interval)/L if n == 0: an /= 2 if abs(an) < cutoff: an = ctx.zero if abs(bn) < cutoff: bn = ctx.zero cos_series.append(an) sin_series.append(bn) return cos_series, sin_series @defun def fourierval(ctx, series, interval, x): """ Evaluates a Fourier series (in the format computed by by :func:`~mpmath.fourier` for the given interval) at the point `x`. The series should be a pair `(c, s)` where `c` is the cosine series and `s` is the sine series. The two lists need not have the same length. """ cs, ss = series ab = ctx._as_points(interval) a = interval[0] b = interval[-1] m = 2*ctx.pi/(ab[-1]-ab[0]) s = ctx.zero s += ctx.fsum(cs[n]*ctx.cos(m*n*x) for n in xrange(len(cs)) if cs[n]) s += ctx.fsum(ss[n]*ctx.sin(m*n*x) for n in xrange(len(ss)) if ss[n]) return s mpmath-1.0.0/mpmath/calculus/calculus.py000066400000000000000000000001431316273626600202760ustar00rootroot00000000000000class CalculusMethods(object): pass def defun(f): setattr(CalculusMethods, f.__name__, f) mpmath-1.0.0/mpmath/calculus/differentiation.py000066400000000000000000000474021316273626600216460ustar00rootroot00000000000000from ..libmp.backend import xrange from .calculus import defun try: iteritems = dict.iteritems except AttributeError: iteritems = dict.items #----------------------------------------------------------------------------# # Differentiation # #----------------------------------------------------------------------------# @defun def difference(ctx, s, n): r""" Given a sequence `(s_k)` containing at least `n+1` items, returns the `n`-th forward difference, .. math :: \Delta^n = \sum_{k=0}^{\infty} (-1)^{k+n} {n \choose k} s_k. """ n = int(n) d = ctx.zero b = (-1) ** (n & 1) for k in xrange(n+1): d += b * s[k] b = (b * (k-n)) // (k+1) return d def hsteps(ctx, f, x, n, prec, **options): singular = options.get('singular') addprec = options.get('addprec', 10) direction = options.get('direction', 0) workprec = (prec+2*addprec) * (n+1) orig = ctx.prec try: ctx.prec = workprec h = options.get('h') if h is None: if options.get('relative'): hextramag = int(ctx.mag(x)) else: hextramag = 0 h = ctx.ldexp(1, -prec-addprec-hextramag) else: h = ctx.convert(h) # Directed: steps x, x+h, ... x+n*h direction = options.get('direction', 0) if direction: h *= ctx.sign(direction) steps = xrange(n+1) norm = h # Central: steps x-n*h, x-(n-2)*h ..., x, ..., x+(n-2)*h, x+n*h else: steps = xrange(-n, n+1, 2) norm = (2*h) # Perturb if singular: x += 0.5*h values = [f(x+k*h) for k in steps] return values, norm, workprec finally: ctx.prec = orig @defun def diff(ctx, f, x, n=1, **options): r""" Numerically computes the derivative of `f`, `f'(x)`, or generally for an integer `n \ge 0`, the `n`-th derivative `f^{(n)}(x)`. A few basic examples are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> diff(lambda x: x**2 + x, 1.0) 3.0 >>> diff(lambda x: x**2 + x, 1.0, 2) 2.0 >>> diff(lambda x: x**2 + x, 1.0, 3) 0.0 >>> nprint([diff(exp, 3, n) for n in range(5)]) # exp'(x) = exp(x) [20.0855, 20.0855, 20.0855, 20.0855, 20.0855] Even more generally, given a tuple of arguments `(x_1, \ldots, x_k)` and order `(n_1, \ldots, n_k)`, the partial derivative `f^{(n_1,\ldots,n_k)}(x_1,\ldots,x_k)` is evaluated. For example:: >>> diff(lambda x,y: 3*x*y + 2*y - x, (0.25, 0.5), (0,1)) 2.75 >>> diff(lambda x,y: 3*x*y + 2*y - x, (0.25, 0.5), (1,1)) 3.0 **Options** The following optional keyword arguments are recognized: ``method`` Supported methods are ``'step'`` or ``'quad'``: derivatives may be computed using either a finite difference with a small step size `h` (default), or numerical quadrature. ``direction`` Direction of finite difference: can be -1 for a left difference, 0 for a central difference (default), or +1 for a right difference; more generally can be any complex number. ``addprec`` Extra precision for `h` used to account for the function's sensitivity to perturbations (default = 10). ``relative`` Choose `h` relative to the magnitude of `x`, rather than an absolute value; useful for large or tiny `x` (default = False). ``h`` As an alternative to ``addprec`` and ``relative``, manually select the step size `h`. ``singular`` If True, evaluation exactly at the point `x` is avoided; this is useful for differentiating functions with removable singularities. Default = False. ``radius`` Radius of integration contour (with ``method = 'quad'``). Default = 0.25. A larger radius typically is faster and more accurate, but it must be chosen so that `f` has no singularities within the radius from the evaluation point. A finite difference requires `n+1` function evaluations and must be performed at `(n+1)` times the target precision. Accordingly, `f` must support fast evaluation at high precision. With integration, a larger number of function evaluations is required, but not much extra precision is required. For high order derivatives, this method may thus be faster if f is very expensive to evaluate at high precision. **Further examples** The direction option is useful for computing left- or right-sided derivatives of nonsmooth functions:: >>> diff(abs, 0, direction=0) 0.0 >>> diff(abs, 0, direction=1) 1.0 >>> diff(abs, 0, direction=-1) -1.0 More generally, if the direction is nonzero, a right difference is computed where the step size is multiplied by sign(direction). For example, with direction=+j, the derivative from the positive imaginary direction will be computed:: >>> diff(abs, 0, direction=j) (0.0 - 1.0j) With integration, the result may have a small imaginary part even even if the result is purely real:: >>> diff(sqrt, 1, method='quad') # doctest:+ELLIPSIS (0.5 - 4.59...e-26j) >>> chop(_) 0.5 Adding precision to obtain an accurate value:: >>> diff(cos, 1e-30) 0.0 >>> diff(cos, 1e-30, h=0.0001) -9.99999998328279e-31 >>> diff(cos, 1e-30, addprec=100) -1.0e-30 """ partial = False try: orders = list(n) x = list(x) partial = True except TypeError: pass if partial: x = [ctx.convert(_) for _ in x] return _partial_diff(ctx, f, x, orders, options) method = options.get('method', 'step') if n == 0 and method != 'quad' and not options.get('singular'): return f(ctx.convert(x)) prec = ctx.prec try: if method == 'step': values, norm, workprec = hsteps(ctx, f, x, n, prec, **options) ctx.prec = workprec v = ctx.difference(values, n) / norm**n elif method == 'quad': ctx.prec += 10 radius = ctx.convert(options.get('radius', 0.25)) def g(t): rei = radius*ctx.expj(t) z = x + rei return f(z) / rei**n d = ctx.quadts(g, [0, 2*ctx.pi]) v = d * ctx.factorial(n) / (2*ctx.pi) else: raise ValueError("unknown method: %r" % method) finally: ctx.prec = prec return +v def _partial_diff(ctx, f, xs, orders, options): if not orders: return f() if not sum(orders): return f(*xs) i = 0 for i in range(len(orders)): if orders[i]: break order = orders[i] def fdiff_inner(*f_args): def inner(t): return f(*(f_args[:i] + (t,) + f_args[i+1:])) return ctx.diff(inner, f_args[i], order, **options) orders[i] = 0 return _partial_diff(ctx, fdiff_inner, xs, orders, options) @defun def diffs(ctx, f, x, n=None, **options): r""" Returns a generator that yields the sequence of derivatives .. math :: f(x), f'(x), f''(x), \ldots, f^{(k)}(x), \ldots With ``method='step'``, :func:`~mpmath.diffs` uses only `O(k)` function evaluations to generate the first `k` derivatives, rather than the roughly `O(k^2)` evaluations required if one calls :func:`~mpmath.diff` `k` separate times. With `n < \infty`, the generator stops as soon as the `n`-th derivative has been generated. If the exact number of needed derivatives is known in advance, this is further slightly more efficient. Options are the same as for :func:`~mpmath.diff`. **Examples** >>> from mpmath import * >>> mp.dps = 15 >>> nprint(list(diffs(cos, 1, 5))) [0.540302, -0.841471, -0.540302, 0.841471, 0.540302, -0.841471] >>> for i, d in zip(range(6), diffs(cos, 1)): ... print("%s %s" % (i, d)) ... 0 0.54030230586814 1 -0.841470984807897 2 -0.54030230586814 3 0.841470984807897 4 0.54030230586814 5 -0.841470984807897 """ if n is None: n = ctx.inf else: n = int(n) if options.get('method', 'step') != 'step': k = 0 while k < n + 1: yield ctx.diff(f, x, k, **options) k += 1 return singular = options.get('singular') if singular: yield ctx.diff(f, x, 0, singular=True) else: yield f(ctx.convert(x)) if n < 1: return if n == ctx.inf: A, B = 1, 2 else: A, B = 1, n+1 while 1: callprec = ctx.prec y, norm, workprec = hsteps(ctx, f, x, B, callprec, **options) for k in xrange(A, B): try: ctx.prec = workprec d = ctx.difference(y, k) / norm**k finally: ctx.prec = callprec yield +d if k >= n: return A, B = B, int(A*1.4+1) B = min(B, n) def iterable_to_function(gen): gen = iter(gen) data = [] def f(k): for i in xrange(len(data), k+1): data.append(next(gen)) return data[k] return f @defun def diffs_prod(ctx, factors): r""" Given a list of `N` iterables or generators yielding `f_k(x), f'_k(x), f''_k(x), \ldots` for `k = 1, \ldots, N`, generate `g(x), g'(x), g''(x), \ldots` where `g(x) = f_1(x) f_2(x) \cdots f_N(x)`. At high precision and for large orders, this is typically more efficient than numerical differentiation if the derivatives of each `f_k(x)` admit direct computation. Note: This function does not increase the working precision internally, so guard digits may have to be added externally for full accuracy. **Examples** >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> f = lambda x: exp(x)*cos(x)*sin(x) >>> u = diffs(f, 1) >>> v = mp.diffs_prod([diffs(exp,1), diffs(cos,1), diffs(sin,1)]) >>> next(u); next(v) 1.23586333600241 1.23586333600241 >>> next(u); next(v) 0.104658952245596 0.104658952245596 >>> next(u); next(v) -5.96999877552086 -5.96999877552086 >>> next(u); next(v) -12.4632923122697 -12.4632923122697 """ N = len(factors) if N == 1: for c in factors[0]: yield c else: u = iterable_to_function(ctx.diffs_prod(factors[:N//2])) v = iterable_to_function(ctx.diffs_prod(factors[N//2:])) n = 0 while 1: #yield sum(binomial(n,k)*u(n-k)*v(k) for k in xrange(n+1)) s = u(n) * v(0) a = 1 for k in xrange(1,n+1): a = a * (n-k+1) // k s += a * u(n-k) * v(k) yield s n += 1 def dpoly(n, _cache={}): """ nth differentiation polynomial for exp (Faa di Bruno's formula). TODO: most exponents are zero, so maybe a sparse representation would be better. """ if n in _cache: return _cache[n] if not _cache: _cache[0] = {(0,):1} R = dpoly(n-1) R = dict((c+(0,),v) for (c,v) in iteritems(R)) Ra = {} for powers, count in iteritems(R): powers1 = (powers[0]+1,) + powers[1:] if powers1 in Ra: Ra[powers1] += count else: Ra[powers1] = count for powers, count in iteritems(R): if not sum(powers): continue for k,p in enumerate(powers): if p: powers2 = powers[:k] + (p-1,powers[k+1]+1) + powers[k+2:] if powers2 in Ra: Ra[powers2] += p*count else: Ra[powers2] = p*count _cache[n] = Ra return _cache[n] @defun def diffs_exp(ctx, fdiffs): r""" Given an iterable or generator yielding `f(x), f'(x), f''(x), \ldots` generate `g(x), g'(x), g''(x), \ldots` where `g(x) = \exp(f(x))`. At high precision and for large orders, this is typically more efficient than numerical differentiation if the derivatives of `f(x)` admit direct computation. Note: This function does not increase the working precision internally, so guard digits may have to be added externally for full accuracy. **Examples** The derivatives of the gamma function can be computed using logarithmic differentiation:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> >>> def diffs_loggamma(x): ... yield loggamma(x) ... i = 0 ... while 1: ... yield psi(i,x) ... i += 1 ... >>> u = diffs_exp(diffs_loggamma(3)) >>> v = diffs(gamma, 3) >>> next(u); next(v) 2.0 2.0 >>> next(u); next(v) 1.84556867019693 1.84556867019693 >>> next(u); next(v) 2.49292999190269 2.49292999190269 >>> next(u); next(v) 3.44996501352367 3.44996501352367 """ fn = iterable_to_function(fdiffs) f0 = ctx.exp(fn(0)) yield f0 i = 1 while 1: s = ctx.mpf(0) for powers, c in iteritems(dpoly(i)): s += c*ctx.fprod(fn(k+1)**p for (k,p) in enumerate(powers) if p) yield s * f0 i += 1 @defun def differint(ctx, f, x, n=1, x0=0): r""" Calculates the Riemann-Liouville differintegral, or fractional derivative, defined by .. math :: \,_{x_0}{\mathbb{D}}^n_xf(x) = \frac{1}{\Gamma(m-n)} \frac{d^m}{dx^m} \int_{x_0}^{x}(x-t)^{m-n-1}f(t)dt where `f` is a given (presumably well-behaved) function, `x` is the evaluation point, `n` is the order, and `x_0` is the reference point of integration (`m` is an arbitrary parameter selected automatically). With `n = 1`, this is just the standard derivative `f'(x)`; with `n = 2`, the second derivative `f''(x)`, etc. With `n = -1`, it gives `\int_{x_0}^x f(t) dt`, with `n = -2` it gives `\int_{x_0}^x \left( \int_{x_0}^t f(u) du \right) dt`, etc. As `n` is permitted to be any number, this operator generalizes iterated differentiation and iterated integration to a single operator with a continuous order parameter. **Examples** There is an exact formula for the fractional derivative of a monomial `x^p`, which may be used as a reference. For example, the following gives a half-derivative (order 0.5):: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> x = mpf(3); p = 2; n = 0.5 >>> differint(lambda t: t**p, x, n) 7.81764019044672 >>> gamma(p+1)/gamma(p-n+1) * x**(p-n) 7.81764019044672 Another useful test function is the exponential function, whose integration / differentiation formula easy generalizes to arbitrary order. Here we first compute a third derivative, and then a triply nested integral. (The reference point `x_0` is set to `-\infty` to avoid nonzero endpoint terms.):: >>> differint(lambda x: exp(pi*x), -1.5, 3) 0.278538406900792 >>> exp(pi*-1.5) * pi**3 0.278538406900792 >>> differint(lambda x: exp(pi*x), 3.5, -3, -inf) 1922.50563031149 >>> exp(pi*3.5) / pi**3 1922.50563031149 However, for noninteger `n`, the differentiation formula for the exponential function must be modified to give the same result as the Riemann-Liouville differintegral:: >>> x = mpf(3.5) >>> c = pi >>> n = 1+2*j >>> differint(lambda x: exp(c*x), x, n) (-123295.005390743 + 140955.117867654j) >>> x**(-n) * exp(c)**x * (x*c)**n * gammainc(-n, 0, x*c) / gamma(-n) (-123295.005390743 + 140955.117867654j) """ m = max(int(ctx.ceil(ctx.re(n)))+1, 1) r = m-n-1 g = lambda x: ctx.quad(lambda t: (x-t)**r * f(t), [x0, x]) return ctx.diff(g, x, m) / ctx.gamma(m-n) @defun def diffun(ctx, f, n=1, **options): r""" Given a function `f`, returns a function `g(x)` that evaluates the nth derivative `f^{(n)}(x)`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> cos2 = diffun(sin) >>> sin2 = diffun(sin, 4) >>> cos(1.3), cos2(1.3) (0.267498828624587, 0.267498828624587) >>> sin(1.3), sin2(1.3) (0.963558185417193, 0.963558185417193) The function `f` must support arbitrary precision evaluation. See :func:`~mpmath.diff` for additional details and supported keyword options. """ if n == 0: return f def g(x): return ctx.diff(f, x, n, **options) return g @defun def taylor(ctx, f, x, n, **options): r""" Produces a degree-`n` Taylor polynomial around the point `x` of the given function `f`. The coefficients are returned as a list. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nprint(chop(taylor(sin, 0, 5))) [0.0, 1.0, 0.0, -0.166667, 0.0, 0.00833333] The coefficients are computed using high-order numerical differentiation. The function must be possible to evaluate to arbitrary precision. See :func:`~mpmath.diff` for additional details and supported keyword options. Note that to evaluate the Taylor polynomial as an approximation of `f`, e.g. with :func:`~mpmath.polyval`, the coefficients must be reversed, and the point of the Taylor expansion must be subtracted from the argument: >>> p = taylor(exp, 2.0, 10) >>> polyval(p[::-1], 2.5 - 2.0) 12.1824939606092 >>> exp(2.5) 12.1824939607035 """ gen = enumerate(ctx.diffs(f, x, n, **options)) if options.get("chop", True): return [ctx.chop(d)/ctx.factorial(i) for i, d in gen] else: return [d/ctx.factorial(i) for i, d in gen] @defun def pade(ctx, a, L, M): r""" Computes a Pade approximation of degree `(L, M)` to a function. Given at least `L+M+1` Taylor coefficients `a` approximating a function `A(x)`, :func:`~mpmath.pade` returns coefficients of polynomials `P, Q` satisfying .. math :: P = \sum_{k=0}^L p_k x^k Q = \sum_{k=0}^M q_k x^k Q_0 = 1 A(x) Q(x) = P(x) + O(x^{L+M+1}) `P(x)/Q(x)` can provide a good approximation to an analytic function beyond the radius of convergence of its Taylor series (example from G.A. Baker 'Essentials of Pade Approximants' Academic Press, Ch.1A):: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> one = mpf(1) >>> def f(x): ... return sqrt((one + 2*x)/(one + x)) ... >>> a = taylor(f, 0, 6) >>> p, q = pade(a, 3, 3) >>> x = 10 >>> polyval(p[::-1], x)/polyval(q[::-1], x) 1.38169105566806 >>> f(x) 1.38169855941551 """ # To determine L+1 coefficients of P and M coefficients of Q # L+M+1 coefficients of A must be provided if len(a) < L+M+1: raise ValueError("L+M+1 Coefficients should be provided") if M == 0: if L == 0: return [ctx.one], [ctx.one] else: return a[:L+1], [ctx.one] # Solve first # a[L]*q[1] + ... + a[L-M+1]*q[M] = -a[L+1] # ... # a[L+M-1]*q[1] + ... + a[L]*q[M] = -a[L+M] A = ctx.matrix(M) for j in range(M): for i in range(min(M, L+j+1)): A[j, i] = a[L+j-i] v = -ctx.matrix(a[(L+1):(L+M+1)]) x = ctx.lu_solve(A, v) q = [ctx.one] + list(x) # compute p p = [0]*(L+1) for i in range(L+1): s = a[i] for j in range(1, min(M,i) + 1): s += q[j]*a[i-j] p[i] = s return p, q mpmath-1.0.0/mpmath/calculus/extrapolation.py000066400000000000000000002171101316273626600213600ustar00rootroot00000000000000try: from itertools import izip except ImportError: izip = zip from ..libmp.backend import xrange from .calculus import defun try: next = next except NameError: next = lambda _: _.next() @defun def richardson(ctx, seq): r""" Given a list ``seq`` of the first `N` elements of a slowly convergent infinite sequence, :func:`~mpmath.richardson` computes the `N`-term Richardson extrapolate for the limit. :func:`~mpmath.richardson` returns `(v, c)` where `v` is the estimated limit and `c` is the magnitude of the largest weight used during the computation. The weight provides an estimate of the precision lost to cancellation. Due to cancellation effects, the sequence must be typically be computed at a much higher precision than the target accuracy of the extrapolation. **Applicability and issues** The `N`-step Richardson extrapolation algorithm used by :func:`~mpmath.richardson` is described in [1]. Richardson extrapolation only works for a specific type of sequence, namely one converging like partial sums of `P(1)/Q(1) + P(2)/Q(2) + \ldots` where `P` and `Q` are polynomials. When the sequence does not convergence at such a rate :func:`~mpmath.richardson` generally produces garbage. Richardson extrapolation has the advantage of being fast: the `N`-term extrapolate requires only `O(N)` arithmetic operations, and usually produces an estimate that is accurate to `O(N)` digits. Contrast with the Shanks transformation (see :func:`~mpmath.shanks`), which requires `O(N^2)` operations. :func:`~mpmath.richardson` is unable to produce an estimate for the approximation error. One way to estimate the error is to perform two extrapolations with slightly different `N` and comparing the results. Richardson extrapolation does not work for oscillating sequences. As a simple workaround, :func:`~mpmath.richardson` detects if the last three elements do not differ monotonically, and in that case applies extrapolation only to the even-index elements. **Example** Applying Richardson extrapolation to the Leibniz series for `\pi`:: >>> from mpmath import * >>> mp.dps = 30; mp.pretty = True >>> S = [4*sum(mpf(-1)**n/(2*n+1) for n in range(m)) ... for m in range(1,30)] >>> v, c = richardson(S[:10]) >>> v 3.2126984126984126984126984127 >>> nprint([v-pi, c]) [0.0711058, 2.0] >>> v, c = richardson(S[:30]) >>> v 3.14159265468624052829954206226 >>> nprint([v-pi, c]) [1.09645e-9, 20833.3] **References** 1. [BenderOrszag]_ pp. 375-376 """ if len(seq) < 3: raise ValueError("seq should be of minimum length 3") if ctx.sign(seq[-1]-seq[-2]) != ctx.sign(seq[-2]-seq[-3]): seq = seq[::2] N = len(seq)//2-1 s = ctx.zero # The general weight is c[k] = (N+k)**N * (-1)**(k+N) / k! / (N-k)! # To avoid repeated factorials, we simplify the quotient # of successive weights to obtain a recurrence relation c = (-1)**N * N**N / ctx.mpf(ctx._ifac(N)) maxc = 1 for k in xrange(N+1): s += c * seq[N+k] maxc = max(abs(c), maxc) c *= (k-N)*ctx.mpf(k+N+1)**N c /= ((1+k)*ctx.mpf(k+N)**N) return s, maxc @defun def shanks(ctx, seq, table=None, randomized=False): r""" Given a list ``seq`` of the first `N` elements of a slowly convergent infinite sequence `(A_k)`, :func:`~mpmath.shanks` computes the iterated Shanks transformation `S(A), S(S(A)), \ldots, S^{N/2}(A)`. The Shanks transformation often provides strong convergence acceleration, especially if the sequence is oscillating. The iterated Shanks transformation is computed using the Wynn epsilon algorithm (see [1]). :func:`~mpmath.shanks` returns the full epsilon table generated by Wynn's algorithm, which can be read off as follows: * The table is a list of lists forming a lower triangular matrix, where higher row and column indices correspond to more accurate values. * The columns with even index hold dummy entries (required for the computation) and the columns with odd index hold the actual extrapolates. * The last element in the last row is typically the most accurate estimate of the limit. * The difference to the third last element in the last row provides an estimate of the approximation error. * The magnitude of the second last element provides an estimate of the numerical accuracy lost to cancellation. For convenience, so the extrapolation is stopped at an odd index so that ``shanks(seq)[-1][-1]`` always gives an estimate of the limit. Optionally, an existing table can be passed to :func:`~mpmath.shanks`. This can be used to efficiently extend a previous computation after new elements have been appended to the sequence. The table will then be updated in-place. **The Shanks transformation** The Shanks transformation is defined as follows (see [2]): given the input sequence `(A_0, A_1, \ldots)`, the transformed sequence is given by .. math :: S(A_k) = \frac{A_{k+1}A_{k-1}-A_k^2}{A_{k+1}+A_{k-1}-2 A_k} The Shanks transformation gives the exact limit `A_{\infty}` in a single step if `A_k = A + a q^k`. Note in particular that it extrapolates the exact sum of a geometric series in a single step. Applying the Shanks transformation once often improves convergence substantially for an arbitrary sequence, but the optimal effect is obtained by applying it iteratively: `S(S(A_k)), S(S(S(A_k))), \ldots`. Wynn's epsilon algorithm provides an efficient way to generate the table of iterated Shanks transformations. It reduces the computation of each element to essentially a single division, at the cost of requiring dummy elements in the table. See [1] for details. **Precision issues** Due to cancellation effects, the sequence must be typically be computed at a much higher precision than the target accuracy of the extrapolation. If the Shanks transformation converges to the exact limit (such as if the sequence is a geometric series), then a division by zero occurs. By default, :func:`~mpmath.shanks` handles this case by terminating the iteration and returning the table it has generated so far. With *randomized=True*, it will instead replace the zero by a pseudorandom number close to zero. (TODO: find a better solution to this problem.) **Examples** We illustrate by applying Shanks transformation to the Leibniz series for `\pi`:: >>> from mpmath import * >>> mp.dps = 50 >>> S = [4*sum(mpf(-1)**n/(2*n+1) for n in range(m)) ... for m in range(1,30)] >>> >>> T = shanks(S[:7]) >>> for row in T: ... nprint(row) ... [-0.75] [1.25, 3.16667] [-1.75, 3.13333, -28.75] [2.25, 3.14524, 82.25, 3.14234] [-2.75, 3.13968, -177.75, 3.14139, -969.937] [3.25, 3.14271, 327.25, 3.14166, 3515.06, 3.14161] The extrapolated accuracy is about 4 digits, and about 4 digits may have been lost due to cancellation:: >>> L = T[-1] >>> nprint([abs(L[-1] - pi), abs(L[-1] - L[-3]), abs(L[-2])]) [2.22532e-5, 4.78309e-5, 3515.06] Now we extend the computation:: >>> T = shanks(S[:25], T) >>> L = T[-1] >>> nprint([abs(L[-1] - pi), abs(L[-1] - L[-3]), abs(L[-2])]) [3.75527e-19, 1.48478e-19, 2.96014e+17] The value for pi is now accurate to 18 digits. About 18 digits may also have been lost to cancellation. Here is an example with a geometric series, where the convergence is immediate (the sum is exactly 1):: >>> mp.dps = 15 >>> for row in shanks([0.5, 0.75, 0.875, 0.9375, 0.96875]): ... nprint(row) [4.0] [8.0, 1.0] **References** 1. [GravesMorris]_ 2. [BenderOrszag]_ pp. 368-375 """ if len(seq) < 2: raise ValueError("seq should be of minimum length 2") if table: START = len(table) else: START = 0 table = [] STOP = len(seq) - 1 if STOP & 1: STOP -= 1 one = ctx.one eps = +ctx.eps if randomized: from random import Random rnd = Random() rnd.seed(START) for i in xrange(START, STOP): row = [] for j in xrange(i+1): if j == 0: a, b = 0, seq[i+1]-seq[i] else: if j == 1: a = seq[i] else: a = table[i-1][j-2] b = row[j-1] - table[i-1][j-1] if not b: if randomized: b = rnd.getrandbits(10)*eps elif i & 1: return table[:-1] else: return table row.append(a + one/b) table.append(row) return table class levin_class: # levin: Copyright 2013 Timo Hartmann (thartmann15 at gmail.com) r""" This interface implements Levin's (nonlinear) sequence transformation for convergence acceleration and summation of divergent series. It performs better than the Shanks/Wynn-epsilon algorithm for logarithmic convergent or alternating divergent series. Let *A* be the series we want to sum: .. math :: A = \sum_{k=0}^{\infty} a_k Attention: all `a_k` must be non-zero! Let `s_n` be the partial sums of this series: .. math :: s_n = \sum_{k=0}^n a_k. **Methods** Calling ``levin`` returns an object with the following methods. ``update(...)`` works with the list of individual terms `a_k` of *A*, and ``update_step(...)`` works with the list of partial sums `s_k` of *A*: .. code :: v, e = ...update([a_0, a_1,..., a_k]) v, e = ...update_psum([s_0, s_1,..., s_k]) ``step(...)`` works with the individual terms `a_k` and ``step_psum(...)`` works with the partial sums `s_k`: .. code :: v, e = ...step(a_k) v, e = ...step_psum(s_k) *v* is the current estimate for *A*, and *e* is an error estimate which is simply the difference between the current estimate and the last estimate. One should not mix ``update``, ``update_psum``, ``step`` and ``step_psum``. **A word of caution** One can only hope for good results (i.e. convergence acceleration or resummation) if the `s_n` have some well defind asymptotic behavior for large `n` and are not erratic or random. Furthermore one usually needs very high working precision because of the numerical cancellation. If the working precision is insufficient, levin may produce silently numerical garbage. Furthermore even if the Levin-transformation converges, in the general case there is no proof that the result is mathematically sound. Only for very special classes of problems one can prove that the Levin-transformation converges to the expected result (for example Stieltjes-type integrals). Furthermore the Levin-transform is quite expensive (i.e. slow) in comparison to Shanks/Wynn-epsilon, Richardson & co. In summary one can say that the Levin-transformation is powerful but unreliable and that it may need a copious amount of working precision. The Levin transform has several variants differing in the choice of weights. Some variants are better suited for the possible flavours of convergence behaviour of *A* than other variants: .. code :: convergence behaviour levin-u levin-t levin-v shanks/wynn-epsilon logarithmic + - + - linear + + + + alternating divergent + + + + "+" means the variant is suitable,"-" means the variant is not suitable; for comparison the Shanks/Wynn-epsilon transform is listed, too. The variant is controlled though the variant keyword (i.e. ``variant="u"``, ``variant="t"`` or ``variant="v"``). Overall "u" is probably the best choice. Finally it is possible to use the Sidi-S transform instead of the Levin transform by using the keyword ``method='sidi'``. The Sidi-S transform works better than the Levin transformation for some divergent series (see the examples). Parameters: .. code :: method "levin" or "sidi" chooses either the Levin or the Sidi-S transformation variant "u","t" or "v" chooses the weight variant. The Levin transform is also accessible through the nsum interface. ``method="l"`` or ``method="levin"`` select the normal Levin transform while ``method="sidi"`` selects the Sidi-S transform. The variant is in both cases selected through the levin_variant keyword. The stepsize in :func:`~mpmath.nsum` must not be chosen too large, otherwise it will miss the point where the Levin transform converges resulting in numerical overflow/garbage. For highly divergent series a copious amount of working precision must be chosen. **Examples** First we sum the zeta function:: >>> from mpmath import mp >>> mp.prec = 53 >>> eps = mp.mpf(mp.eps) >>> with mp.extraprec(2 * mp.prec): # levin needs a high working precision ... L = mp.levin(method = "levin", variant = "u") ... S, s, n = [], 0, 1 ... while 1: ... s += mp.one / (n * n) ... n += 1 ... S.append(s) ... v, e = L.update_psum(S) ... if e < eps: ... break ... if n > 1000: raise RuntimeError("iteration limit exceeded") >>> print(mp.chop(v - mp.pi ** 2 / 6)) 0.0 >>> w = mp.nsum(lambda n: 1 / (n*n), [1, mp.inf], method = "levin", levin_variant = "u") >>> print(mp.chop(v - w)) 0.0 Now we sum the zeta function outside its range of convergence (attention: This does not work at the negative integers!):: >>> eps = mp.mpf(mp.eps) >>> with mp.extraprec(2 * mp.prec): # levin needs a high working precision ... L = mp.levin(method = "levin", variant = "v") ... A, n = [], 1 ... while 1: ... s = mp.mpf(n) ** (2 + 3j) ... n += 1 ... A.append(s) ... v, e = L.update(A) ... if e < eps: ... break ... if n > 1000: raise RuntimeError("iteration limit exceeded") >>> print(mp.chop(v - mp.zeta(-2-3j))) 0.0 >>> w = mp.nsum(lambda n: n ** (2 + 3j), [1, mp.inf], method = "levin", levin_variant = "v") >>> print(mp.chop(v - w)) 0.0 Now we sum the divergent asymptotic expansion of an integral related to the exponential integral (see also [2] p.373). The Sidi-S transform works best here:: >>> z = mp.mpf(10) >>> exact = mp.quad(lambda x: mp.exp(-x)/(1+x/z),[0,mp.inf]) >>> # exact = z * mp.exp(z) * mp.expint(1,z) # this is the symbolic expression for the integral >>> eps = mp.mpf(mp.eps) >>> with mp.extraprec(2 * mp.prec): # high working precisions are mandatory for divergent resummation ... L = mp.levin(method = "sidi", variant = "t") ... n = 0 ... while 1: ... s = (-1)**n * mp.fac(n) * z ** (-n) ... v, e = L.step(s) ... n += 1 ... if e < eps: ... break ... if n > 1000: raise RuntimeError("iteration limit exceeded") >>> print(mp.chop(v - exact)) 0.0 >>> w = mp.nsum(lambda n: (-1) ** n * mp.fac(n) * z ** (-n), [0, mp.inf], method = "sidi", levin_variant = "t") >>> print(mp.chop(v - w)) 0.0 Another highly divergent integral is also summable:: >>> z = mp.mpf(2) >>> eps = mp.mpf(mp.eps) >>> exact = mp.quad(lambda x: mp.exp( -x * x / 2 - z * x ** 4), [0,mp.inf]) * 2 / mp.sqrt(2 * mp.pi) >>> # exact = mp.exp(mp.one / (32 * z)) * mp.besselk(mp.one / 4, mp.one / (32 * z)) / (4 * mp.sqrt(z * mp.pi)) # this is the symbolic expression for the integral >>> with mp.extraprec(7 * mp.prec): # we need copious amount of precision to sum this highly divergent series ... L = mp.levin(method = "levin", variant = "t") ... n, s = 0, 0 ... while 1: ... s += (-z)**n * mp.fac(4 * n) / (mp.fac(n) * mp.fac(2 * n) * (4 ** n)) ... n += 1 ... v, e = L.step_psum(s) ... if e < eps: ... break ... if n > 1000: raise RuntimeError("iteration limit exceeded") >>> print(mp.chop(v - exact)) 0.0 >>> w = mp.nsum(lambda n: (-z)**n * mp.fac(4 * n) / (mp.fac(n) * mp.fac(2 * n) * (4 ** n)), ... [0, mp.inf], method = "levin", levin_variant = "t", workprec = 8*mp.prec, steps = [2] + [1 for x in xrange(1000)]) >>> print(mp.chop(v - w)) 0.0 These examples run with 15-20 decimal digits precision. For higher precision the working precision must be raised. **Examples for nsum** Here we calculate Euler's constant as the constant term in the Laurent expansion of `\zeta(s)` at `s=1`. This sum converges extremly slowly because of the logarithmic convergence behaviour of the Dirichlet series for zeta:: >>> mp.dps = 30 >>> z = mp.mpf(10) ** (-10) >>> a = mp.nsum(lambda n: n**(-(1+z)), [1, mp.inf], method = "l") - 1 / z >>> print(mp.chop(a - mp.euler, tol = 1e-10)) 0.0 The Sidi-S transform performs excellently for the alternating series of `\log(2)`:: >>> a = mp.nsum(lambda n: (-1)**(n-1) / n, [1, mp.inf], method = "sidi") >>> print(mp.chop(a - mp.log(2))) 0.0 Hypergeometric series can also be summed outside their range of convergence. The stepsize in :func:`~mpmath.nsum` must not be chosen too large, otherwise it will miss the point where the Levin transform converges resulting in numerical overflow/garbage:: >>> z = 2 + 1j >>> exact = mp.hyp2f1(2 / mp.mpf(3), 4 / mp.mpf(3), 1 / mp.mpf(3), z) >>> f = lambda n: mp.rf(2 / mp.mpf(3), n) * mp.rf(4 / mp.mpf(3), n) * z**n / (mp.rf(1 / mp.mpf(3), n) * mp.fac(n)) >>> v = mp.nsum(f, [0, mp.inf], method = "levin", steps = [10 for x in xrange(1000)]) >>> print(mp.chop(exact-v)) 0.0 References: [1] E.J. Weniger - "Nonlinear Sequence Transformations for the Acceleration of Convergence and the Summation of Divergent Series" arXiv:math/0306302 [2] A. Sidi - "Pratical Extrapolation Methods" [3] H.H.H. Homeier - "Scalar Levin-Type Sequence Transformations" arXiv:math/0005209 """ def __init__(self, method = "levin", variant = "u"): self.variant = variant self.n = 0 self.a0 = 0 self.theta = 1 self.A = [] self.B = [] self.last = 0 self.last_s = False if method == "levin": self.factor = self.factor_levin elif method == "sidi": self.factor = self.factor_sidi else: raise ValueError("levin: unknown method \"%s\"" % method) def factor_levin(self, i): # original levin # [1] p.50,e.7.5-7 (with n-j replaced by i) return (self.theta + i) * (self.theta + self.n - 1) ** (self.n - i - 2) / self.ctx.mpf(self.theta + self.n) ** (self.n - i - 1) def factor_sidi(self, i): # sidi analogon to levin (factorial series) # [1] p.59,e.8.3-16 (with n-j replaced by i) return (self.theta + self.n - 1) * (self.theta + self.n - 2) / self.ctx.mpf((self.theta + 2 * self.n - i - 2) * (self.theta + 2 * self.n - i - 3)) def run(self, s, a0, a1 = 0): if self.variant=="t": # levin t w=a0 elif self.variant=="u": # levin u w=a0*(self.theta+self.n) elif self.variant=="v": # levin v w=a0*a1/(a0-a1) else: assert False, "unknown variant" if w==0: raise ValueError("levin: zero weight") self.A.append(s/w) self.B.append(1/w) for i in range(self.n-1,-1,-1): if i==self.n-1: f=1 else: f=self.factor(i) self.A[i]=self.A[i+1]-f*self.A[i] self.B[i]=self.B[i+1]-f*self.B[i] self.n+=1 ########################################################################### def update_psum(self,S): """ This routine applies the convergence acceleration to the list of partial sums. A = sum(a_k, k = 0..infinity) s_n = sum(a_k, k = 0..n) v, e = ...update_psum([s_0, s_1,..., s_k]) output: v current estimate of the series A e an error estimate which is simply the difference between the current estimate and the last estimate. """ if self.variant!="v": if self.n==0: self.run(S[0],S[0]) while self.n>> from mpmath import mp >>> AC = mp.cohen_alt() >>> S, s, n = [], 0, 1 >>> while 1: ... s += -((-1) ** n) * mp.one / (n * n) ... n += 1 ... S.append(s) ... v, e = AC.update_psum(S) ... if e < mp.eps: ... break ... if n > 1000: raise RuntimeError("iteration limit exceeded") >>> print(mp.chop(v - mp.pi ** 2 / 12)) 0.0 Here we compute the product `\prod_{n=1}^{\infty} \Gamma(1+1/(2n-1)) / \Gamma(1+1/(2n))`:: >>> A = [] >>> AC = mp.cohen_alt() >>> n = 1 >>> while 1: ... A.append( mp.loggamma(1 + mp.one / (2 * n - 1))) ... A.append(-mp.loggamma(1 + mp.one / (2 * n))) ... n += 1 ... v, e = AC.update(A) ... if e < mp.eps: ... break ... if n > 1000: raise RuntimeError("iteration limit exceeded") >>> v = mp.exp(v) >>> print(mp.chop(v - 1.06215090557106, tol = 1e-12)) 0.0 ``cohen_alt`` is also accessible through the :func:`~mpmath.nsum` interface:: >>> v = mp.nsum(lambda n: (-1)**(n-1) / n, [1, mp.inf], method = "a") >>> print(mp.chop(v - mp.log(2))) 0.0 >>> v = mp.nsum(lambda n: (-1)**n / (2 * n + 1), [0, mp.inf], method = "a") >>> print(mp.chop(v - mp.pi / 4)) 0.0 >>> v = mp.nsum(lambda n: (-1)**n * mp.log(n) * n, [1, mp.inf], method = "a") >>> print(mp.chop(v - mp.diff(lambda s: mp.altzeta(s), -1))) 0.0 """ def __init__(self): self.last=0 def update(self, A): """ This routine applies the convergence acceleration to the list of individual terms. A = sum(a_k, k = 0..infinity) v, e = ...update([a_0, a_1,..., a_k]) output: v current estimate of the series A e an error estimate which is simply the difference between the current estimate and the last estimate. """ n = len(A) d = (3 + self.ctx.sqrt(8)) ** n d = (d + 1 / d) / 2 b = -self.ctx.one c = -d s = 0 for k in xrange(n): c = b - c if k % 2 == 0: s = s + c * A[k] else: s = s - c * A[k] b = 2 * (k + n) * (k - n) * b / ((2 * k + 1) * (k + self.ctx.one)) value = s / d err = abs(value - self.last) self.last = value return value, err def update_psum(self, S): """ This routine applies the convergence acceleration to the list of partial sums. A = sum(a_k, k = 0..infinity) s_n = sum(a_k ,k = 0..n) v, e = ...update_psum([s_0, s_1,..., s_k]) output: v current estimate of the series A e an error estimate which is simply the difference between the current estimate and the last estimate. """ n = len(S) d = (3 + self.ctx.sqrt(8)) ** n d = (d + 1 / d) / 2 b = self.ctx.one s = 0 for k in xrange(n): b = 2 * (n + k) * (n - k) * b / ((2 * k + 1) * (k + self.ctx.one)) s += b * S[k] value = s / d err = abs(value - self.last) self.last = value return value, err def cohen_alt(ctx): L = cohen_alt_class() L.ctx = ctx return L cohen_alt.__doc__ = cohen_alt_class.__doc__ defun(cohen_alt) @defun def sumap(ctx, f, interval, integral=None, error=False): r""" Evaluates an infinite series of an analytic summand *f* using the Abel-Plana formula .. math :: \sum_{k=0}^{\infty} f(k) = \int_0^{\infty} f(t) dt + \frac{1}{2} f(0) + i \int_0^{\infty} \frac{f(it)-f(-it)}{e^{2\pi t}-1} dt. Unlike the Euler-Maclaurin formula (see :func:`~mpmath.sumem`), the Abel-Plana formula does not require derivatives. However, it only works when `|f(it)-f(-it)|` does not increase too rapidly with `t`. **Examples** The Abel-Plana formula is particularly useful when the summand decreases like a power of `k`; for example when the sum is a pure zeta function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> sumap(lambda k: 1/k**2.5, [1,inf]) 1.34148725725091717975677 >>> zeta(2.5) 1.34148725725091717975677 >>> sumap(lambda k: 1/(k+1j)**(2.5+2.5j), [1,inf]) (-3.385361068546473342286084 - 0.7432082105196321803869551j) >>> zeta(2.5+2.5j, 1+1j) (-3.385361068546473342286084 - 0.7432082105196321803869551j) If the series is alternating, numerical quadrature along the real line is likely to give poor results, so it is better to evaluate the first term symbolically whenever possible: >>> n=3; z=-0.75 >>> I = expint(n,-log(z)) >>> chop(sumap(lambda k: z**k / k**n, [1,inf], integral=I)) -0.6917036036904594510141448 >>> polylog(n,z) -0.6917036036904594510141448 """ prec = ctx.prec try: ctx.prec += 10 a, b = interval if b != ctx.inf: raise ValueError("b should be equal to ctx.inf") g = lambda x: f(x+a) if integral is None: i1, err1 = ctx.quad(g, [0,ctx.inf], error=True) else: i1, err1 = integral, 0 j = ctx.j p = ctx.pi * 2 if ctx._is_real_type(i1): h = lambda t: -2 * ctx.im(g(j*t)) / ctx.expm1(p*t) else: h = lambda t: j*(g(j*t)-g(-j*t)) / ctx.expm1(p*t) i2, err2 = ctx.quad(h, [0,ctx.inf], error=True) err = err1+err2 v = i1+i2+0.5*g(ctx.mpf(0)) finally: ctx.prec = prec if error: return +v, err return +v @defun def sumem(ctx, f, interval, tol=None, reject=10, integral=None, adiffs=None, bdiffs=None, verbose=False, error=False, _fast_abort=False): r""" Uses the Euler-Maclaurin formula to compute an approximation accurate to within ``tol`` (which defaults to the present epsilon) of the sum .. math :: S = \sum_{k=a}^b f(k) where `(a,b)` are given by ``interval`` and `a` or `b` may be infinite. The approximation is .. math :: S \sim \int_a^b f(x) \,dx + \frac{f(a)+f(b)}{2} + \sum_{k=1}^{\infty} \frac{B_{2k}}{(2k)!} \left(f^{(2k-1)}(b)-f^{(2k-1)}(a)\right). The last sum in the Euler-Maclaurin formula is not generally convergent (a notable exception is if `f` is a polynomial, in which case Euler-Maclaurin actually gives an exact result). The summation is stopped as soon as the quotient between two consecutive terms falls below *reject*. That is, by default (*reject* = 10), the summation is continued as long as each term adds at least one decimal. Although not convergent, convergence to a given tolerance can often be "forced" if `b = \infty` by summing up to `a+N` and then applying the Euler-Maclaurin formula to the sum over the range `(a+N+1, \ldots, \infty)`. This procedure is implemented by :func:`~mpmath.nsum`. By default numerical quadrature and differentiation is used. If the symbolic values of the integral and endpoint derivatives are known, it is more efficient to pass the value of the integral explicitly as ``integral`` and the derivatives explicitly as ``adiffs`` and ``bdiffs``. The derivatives should be given as iterables that yield `f(a), f'(a), f''(a), \ldots` (and the equivalent for `b`). **Examples** Summation of an infinite series, with automatic and symbolic integral and derivative values (the second should be much faster):: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> sumem(lambda n: 1/n**2, [32, inf]) 0.03174336652030209012658168043874142714132886413417 >>> I = mpf(1)/32 >>> D = adiffs=((-1)**n*fac(n+1)*32**(-2-n) for n in range(999)) >>> sumem(lambda n: 1/n**2, [32, inf], integral=I, adiffs=D) 0.03174336652030209012658168043874142714132886413417 An exact evaluation of a finite polynomial sum:: >>> sumem(lambda n: n**5-12*n**2+3*n, [-100000, 200000]) 10500155000624963999742499550000.0 >>> print(sum(n**5-12*n**2+3*n for n in range(-100000, 200001))) 10500155000624963999742499550000 """ tol = tol or +ctx.eps interval = ctx._as_points(interval) a = ctx.convert(interval[0]) b = ctx.convert(interval[-1]) err = ctx.zero prev = 0 M = 10000 if a == ctx.ninf: adiffs = (0 for n in xrange(M)) else: adiffs = adiffs or ctx.diffs(f, a) if b == ctx.inf: bdiffs = (0 for n in xrange(M)) else: bdiffs = bdiffs or ctx.diffs(f, b) orig = ctx.prec #verbose = 1 try: ctx.prec += 10 s = ctx.zero for k, (da, db) in enumerate(izip(adiffs, bdiffs)): if k & 1: term = (db-da) * ctx.bernoulli(k+1) / ctx.factorial(k+1) mag = abs(term) if verbose: print("term", k, "magnitude =", ctx.nstr(mag)) if k > 4 and mag < tol: s += term break elif k > 4 and abs(prev) / mag < reject: err += mag if _fast_abort: return [s, (s, err)][error] if verbose: print("Failed to converge") break else: s += term prev = term # Endpoint correction if a != ctx.ninf: s += f(a)/2 if b != ctx.inf: s += f(b)/2 # Tail integral if verbose: print("Integrating f(x) from x = %s to %s" % (ctx.nstr(a), ctx.nstr(b))) if integral: s += integral else: integral, ierr = ctx.quad(f, interval, error=True) if verbose: print("Integration error:", ierr) s += integral err += ierr finally: ctx.prec = orig if error: return s, err else: return s @defun def adaptive_extrapolation(ctx, update, emfun, kwargs): option = kwargs.get if ctx._fixed_precision: tol = option('tol', ctx.eps*2**10) else: tol = option('tol', ctx.eps/2**10) verbose = option('verbose', False) maxterms = option('maxterms', ctx.dps*10) method = set(option('method', 'r+s').split('+')) skip = option('skip', 0) steps = iter(option('steps', xrange(10, 10**9, 10))) strict = option('strict') #steps = (10 for i in xrange(1000)) summer=[] if 'd' in method or 'direct' in method: TRY_RICHARDSON = TRY_SHANKS = TRY_EULER_MACLAURIN = False else: TRY_RICHARDSON = ('r' in method) or ('richardson' in method) TRY_SHANKS = ('s' in method) or ('shanks' in method) TRY_EULER_MACLAURIN = ('e' in method) or \ ('euler-maclaurin' in method) def init_levin(m): variant = kwargs.get("levin_variant", "u") if isinstance(variant, str): if variant == "all": variant = ["u", "v", "t"] else: variant = [variant] for s in variant: L = levin_class(method = m, variant = s) L.ctx = ctx L.name = m + "(" + s + ")" summer.append(L) if ('l' in method) or ('levin' in method): init_levin("levin") if ('sidi' in method): init_levin("sidi") if ('a' in method) or ('alternating' in method): L = cohen_alt_class() L.ctx = ctx L.name = "alternating" summer.append(L) last_richardson_value = 0 shanks_table = [] index = 0 step = 10 partial = [] best = ctx.zero orig = ctx.prec try: if 'workprec' in kwargs: ctx.prec = kwargs['workprec'] elif TRY_RICHARDSON or TRY_SHANKS or len(summer)!=0: ctx.prec = (ctx.prec+10) * 4 else: ctx.prec += 30 while 1: if index >= maxterms: break # Get new batch of terms try: step = next(steps) except StopIteration: pass if verbose: print("-"*70) print("Adding terms #%i-#%i" % (index, index+step)) update(partial, xrange(index, index+step)) index += step # Check direct error best = partial[-1] error = abs(best - partial[-2]) if verbose: print("Direct error: %s" % ctx.nstr(error)) if error <= tol: return best # Check each extrapolation method if TRY_RICHARDSON: value, maxc = ctx.richardson(partial) # Convergence richardson_error = abs(value - last_richardson_value) if verbose: print("Richardson error: %s" % ctx.nstr(richardson_error)) # Convergence if richardson_error <= tol: return value last_richardson_value = value # Unreliable due to cancellation if ctx.eps*maxc > tol: if verbose: print("Ran out of precision for Richardson") TRY_RICHARDSON = False if richardson_error < error: error = richardson_error best = value if TRY_SHANKS: shanks_table = ctx.shanks(partial, shanks_table, randomized=True) row = shanks_table[-1] if len(row) == 2: est1 = row[-1] shanks_error = 0 else: est1, maxc, est2 = row[-1], abs(row[-2]), row[-3] shanks_error = abs(est1-est2) if verbose: print("Shanks error: %s" % ctx.nstr(shanks_error)) if shanks_error <= tol: return est1 if ctx.eps*maxc > tol: if verbose: print("Ran out of precision for Shanks") TRY_SHANKS = False if shanks_error < error: error = shanks_error best = est1 for L in summer: est, lerror = L.update_psum(partial) if verbose: print("%s error: %s" % (L.name, ctx.nstr(lerror))) if lerror <= tol: return est if lerror < error: error = lerror best = est if TRY_EULER_MACLAURIN: if ctx.mpc(ctx.sign(partial[-1]) / ctx.sign(partial[-2])).ae(-1): if verbose: print ("NOT using Euler-Maclaurin: the series appears" " to be alternating, so numerical\n quadrature" " will most likely fail") TRY_EULER_MACLAURIN = False else: value, em_error = emfun(index, tol) value += partial[-1] if verbose: print("Euler-Maclaurin error: %s" % ctx.nstr(em_error)) if em_error <= tol: return value if em_error < error: best = value finally: ctx.prec = orig if strict: raise ctx.NoConvergence if verbose: print("Warning: failed to converge to target accuracy") return best @defun def nsum(ctx, f, *intervals, **options): r""" Computes the sum .. math :: S = \sum_{k=a}^b f(k) where `(a, b)` = *interval*, and where `a = -\infty` and/or `b = \infty` are allowed, or more generally .. math :: S = \sum_{k_1=a_1}^{b_1} \cdots \sum_{k_n=a_n}^{b_n} f(k_1,\ldots,k_n) if multiple intervals are given. Two examples of infinite series that can be summed by :func:`~mpmath.nsum`, where the first converges rapidly and the second converges slowly, are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nsum(lambda n: 1/fac(n), [0, inf]) 2.71828182845905 >>> nsum(lambda n: 1/n**2, [1, inf]) 1.64493406684823 When appropriate, :func:`~mpmath.nsum` applies convergence acceleration to accurately estimate the sums of slowly convergent series. If the series is finite, :func:`~mpmath.nsum` currently does not attempt to perform any extrapolation, and simply calls :func:`~mpmath.fsum`. Multidimensional infinite series are reduced to a single-dimensional series over expanding hypercubes; if both infinite and finite dimensions are present, the finite ranges are moved innermost. For more advanced control over the summation order, use nested calls to :func:`~mpmath.nsum`, or manually rewrite the sum as a single-dimensional series. **Options** *tol* Desired maximum final error. Defaults roughly to the epsilon of the working precision. *method* Which summation algorithm to use (described below). Default: ``'richardson+shanks'``. *maxterms* Cancel after at most this many terms. Default: 10*dps. *steps* An iterable giving the number of terms to add between each extrapolation attempt. The default sequence is [10, 20, 30, 40, ...]. For example, if you know that approximately 100 terms will be required, efficiency might be improved by setting this to [100, 10]. Then the first extrapolation will be performed after 100 terms, the second after 110, etc. *verbose* Print details about progress. *ignore* If enabled, any term that raises ``ArithmeticError`` or ``ValueError`` (e.g. through division by zero) is replaced by a zero. This is convenient for lattice sums with a singular term near the origin. **Methods** Unfortunately, an algorithm that can efficiently sum any infinite series does not exist. :func:`~mpmath.nsum` implements several different algorithms that each work well in different cases. The *method* keyword argument selects a method. The default method is ``'r+s'``, i.e. both Richardson extrapolation and Shanks transformation is attempted. A slower method that handles more cases is ``'r+s+e'``. For very high precision summation, or if the summation needs to be fast (for example if multiple sums need to be evaluated), it is a good idea to investigate which one method works best and only use that. ``'richardson'`` / ``'r'``: Uses Richardson extrapolation. Provides useful extrapolation when `f(k) \sim P(k)/Q(k)` or when `f(k) \sim (-1)^k P(k)/Q(k)` for polynomials `P` and `Q`. See :func:`~mpmath.richardson` for additional information. ``'shanks'`` / ``'s'``: Uses Shanks transformation. Typically provides useful extrapolation when `f(k) \sim c^k` or when successive terms alternate signs. Is able to sum some divergent series. See :func:`~mpmath.shanks` for additional information. ``'levin'`` / ``'l'``: Uses the Levin transformation. It performs better than the Shanks transformation for logarithmic convergent or alternating divergent series. The ``'levin_variant'``-keyword selects the variant. Valid choices are "u", "t", "v" and "all" whereby "all" uses all three u,t and v simultanously (This is good for performance comparison in conjunction with "verbose=True"). Instead of the Levin transform one can also use the Sidi-S transform by selecting the method ``'sidi'``. See :func:`~mpmath.levin` for additional details. ``'alternating'`` / ``'a'``: This is the convergence acceleration of alternating series developped by Cohen, Villegras and Zagier. See :func:`~mpmath.cohen_alt` for additional details. ``'euler-maclaurin'`` / ``'e'``: Uses the Euler-Maclaurin summation formula to approximate the remainder sum by an integral. This requires high-order numerical derivatives and numerical integration. The advantage of this algorithm is that it works regardless of the decay rate of `f`, as long as `f` is sufficiently smooth. See :func:`~mpmath.sumem` for additional information. ``'direct'`` / ``'d'``: Does not perform any extrapolation. This can be used (and should only be used for) rapidly convergent series. The summation automatically stops when the terms decrease below the target tolerance. **Basic examples** A finite sum:: >>> nsum(lambda k: 1/k, [1, 6]) 2.45 Summation of a series going to negative infinity and a doubly infinite series:: >>> nsum(lambda k: 1/k**2, [-inf, -1]) 1.64493406684823 >>> nsum(lambda k: 1/(1+k**2), [-inf, inf]) 3.15334809493716 :func:`~mpmath.nsum` handles sums of complex numbers:: >>> nsum(lambda k: (0.5+0.25j)**k, [0, inf]) (1.6 + 0.8j) The following sum converges very rapidly, so it is most efficient to sum it by disabling convergence acceleration:: >>> mp.dps = 1000 >>> a = nsum(lambda k: -(-1)**k * k**2 / fac(2*k), [1, inf], ... method='direct') >>> b = (cos(1)+sin(1))/4 >>> abs(a-b) < mpf('1e-998') True **Examples with Richardson extrapolation** Richardson extrapolation works well for sums over rational functions, as well as their alternating counterparts:: >>> mp.dps = 50 >>> nsum(lambda k: 1 / k**3, [1, inf], ... method='richardson') 1.2020569031595942853997381615114499907649862923405 >>> zeta(3) 1.2020569031595942853997381615114499907649862923405 >>> nsum(lambda n: (n + 3)/(n**3 + n**2), [1, inf], ... method='richardson') 2.9348022005446793094172454999380755676568497036204 >>> pi**2/2-2 2.9348022005446793094172454999380755676568497036204 >>> nsum(lambda k: (-1)**k / k**3, [1, inf], ... method='richardson') -0.90154267736969571404980362113358749307373971925537 >>> -3*zeta(3)/4 -0.90154267736969571404980362113358749307373971925538 **Examples with Shanks transformation** The Shanks transformation works well for geometric series and typically provides excellent acceleration for Taylor series near the border of their disk of convergence. Here we apply it to a series for `\log(2)`, which can be seen as the Taylor series for `\log(1+x)` with `x = 1`:: >>> nsum(lambda k: -(-1)**k/k, [1, inf], ... method='shanks') 0.69314718055994530941723212145817656807550013436025 >>> log(2) 0.69314718055994530941723212145817656807550013436025 Here we apply it to a slowly convergent geometric series:: >>> nsum(lambda k: mpf('0.995')**k, [0, inf], ... method='shanks') 200.0 Finally, Shanks' method works very well for alternating series where `f(k) = (-1)^k g(k)`, and often does so regardless of the exact decay rate of `g(k)`:: >>> mp.dps = 15 >>> nsum(lambda k: (-1)**(k+1) / k**1.5, [1, inf], ... method='shanks') 0.765147024625408 >>> (2-sqrt(2))*zeta(1.5)/2 0.765147024625408 The following slowly convergent alternating series has no known closed-form value. Evaluating the sum a second time at higher precision indicates that the value is probably correct:: >>> nsum(lambda k: (-1)**k / log(k), [2, inf], ... method='shanks') 0.924299897222939 >>> mp.dps = 30 >>> nsum(lambda k: (-1)**k / log(k), [2, inf], ... method='shanks') 0.92429989722293885595957018136 **Examples with Levin transformation** The following example calculates Euler's constant as the constant term in the Laurent expansion of zeta(s) at s=1. This sum converges extremly slow because of the logarithmic convergence behaviour of the Dirichlet series for zeta. >>> mp.dps = 30 >>> z = mp.mpf(10) ** (-10) >>> a = mp.nsum(lambda n: n**(-(1+z)), [1, mp.inf], method = "levin") - 1 / z >>> print(mp.chop(a - mp.euler, tol = 1e-10)) 0.0 Now we sum the zeta function outside its range of convergence (attention: This does not work at the negative integers!): >>> mp.dps = 15 >>> w = mp.nsum(lambda n: n ** (2 + 3j), [1, mp.inf], method = "levin", levin_variant = "v") >>> print(mp.chop(w - mp.zeta(-2-3j))) 0.0 The next example resummates an asymptotic series expansion of an integral related to the exponential integral. >>> mp.dps = 15 >>> z = mp.mpf(10) >>> # exact = mp.quad(lambda x: mp.exp(-x)/(1+x/z),[0,mp.inf]) >>> exact = z * mp.exp(z) * mp.expint(1,z) # this is the symbolic expression for the integral >>> w = mp.nsum(lambda n: (-1) ** n * mp.fac(n) * z ** (-n), [0, mp.inf], method = "sidi", levin_variant = "t") >>> print(mp.chop(w - exact)) 0.0 Following highly divergent asymptotic expansion needs some care. Firstly we need copious amount of working precision. Secondly the stepsize must not be chosen to large, otherwise nsum may miss the point where the Levin transform converges and reach the point where only numerical garbage is produced due to numerical cancellation. >>> mp.dps = 15 >>> z = mp.mpf(2) >>> # exact = mp.quad(lambda x: mp.exp( -x * x / 2 - z * x ** 4), [0,mp.inf]) * 2 / mp.sqrt(2 * mp.pi) >>> exact = mp.exp(mp.one / (32 * z)) * mp.besselk(mp.one / 4, mp.one / (32 * z)) / (4 * mp.sqrt(z * mp.pi)) # this is the symbolic expression for the integral >>> w = mp.nsum(lambda n: (-z)**n * mp.fac(4 * n) / (mp.fac(n) * mp.fac(2 * n) * (4 ** n)), ... [0, mp.inf], method = "levin", levin_variant = "t", workprec = 8*mp.prec, steps = [2] + [1 for x in xrange(1000)]) >>> print(mp.chop(w - exact)) 0.0 The hypergeoemtric function can also be summed outside its range of convergence: >>> mp.dps = 15 >>> z = 2 + 1j >>> exact = mp.hyp2f1(2 / mp.mpf(3), 4 / mp.mpf(3), 1 / mp.mpf(3), z) >>> f = lambda n: mp.rf(2 / mp.mpf(3), n) * mp.rf(4 / mp.mpf(3), n) * z**n / (mp.rf(1 / mp.mpf(3), n) * mp.fac(n)) >>> v = mp.nsum(f, [0, mp.inf], method = "levin", steps = [10 for x in xrange(1000)]) >>> print(mp.chop(exact-v)) 0.0 **Examples with Cohen's alternating series resummation** The next example sums the alternating zeta function: >>> v = mp.nsum(lambda n: (-1)**(n-1) / n, [1, mp.inf], method = "a") >>> print(mp.chop(v - mp.log(2))) 0.0 The derivate of the alternating zeta function outside its range of convergence: >>> v = mp.nsum(lambda n: (-1)**n * mp.log(n) * n, [1, mp.inf], method = "a") >>> print(mp.chop(v - mp.diff(lambda s: mp.altzeta(s), -1))) 0.0 **Examples with Euler-Maclaurin summation** The sum in the following example has the wrong rate of convergence for either Richardson or Shanks to be effective. >>> f = lambda k: log(k)/k**2.5 >>> mp.dps = 15 >>> nsum(f, [1, inf], method='euler-maclaurin') 0.38734195032621 >>> -diff(zeta, 2.5) 0.38734195032621 Increasing ``steps`` improves speed at higher precision:: >>> mp.dps = 50 >>> nsum(f, [1, inf], method='euler-maclaurin', steps=[250]) 0.38734195032620997271199237593105101319948228874688 >>> -diff(zeta, 2.5) 0.38734195032620997271199237593105101319948228874688 **Divergent series** The Shanks transformation is able to sum some *divergent* series. In particular, it is often able to sum Taylor series beyond their radius of convergence (this is due to a relation between the Shanks transformation and Pade approximations; see :func:`~mpmath.pade` for an alternative way to evaluate divergent Taylor series). Furthermore the Levin-transform examples above contain some divergent series resummation. Here we apply it to `\log(1+x)` far outside the region of convergence:: >>> mp.dps = 50 >>> nsum(lambda k: -(-9)**k/k, [1, inf], ... method='shanks') 2.3025850929940456840179914546843642076011014886288 >>> log(10) 2.3025850929940456840179914546843642076011014886288 A particular type of divergent series that can be summed using the Shanks transformation is geometric series. The result is the same as using the closed-form formula for an infinite geometric series:: >>> mp.dps = 15 >>> for n in range(-8, 8): ... if n == 1: ... continue ... print("%s %s %s" % (mpf(n), mpf(1)/(1-n), ... nsum(lambda k: n**k, [0, inf], method='shanks'))) ... -8.0 0.111111111111111 0.111111111111111 -7.0 0.125 0.125 -6.0 0.142857142857143 0.142857142857143 -5.0 0.166666666666667 0.166666666666667 -4.0 0.2 0.2 -3.0 0.25 0.25 -2.0 0.333333333333333 0.333333333333333 -1.0 0.5 0.5 0.0 1.0 1.0 2.0 -1.0 -1.0 3.0 -0.5 -0.5 4.0 -0.333333333333333 -0.333333333333333 5.0 -0.25 -0.25 6.0 -0.2 -0.2 7.0 -0.166666666666667 -0.166666666666667 **Multidimensional sums** Any combination of finite and infinite ranges is allowed for the summation indices:: >>> mp.dps = 15 >>> nsum(lambda x,y: x+y, [2,3], [4,5]) 28.0 >>> nsum(lambda x,y: x/2**y, [1,3], [1,inf]) 6.0 >>> nsum(lambda x,y: y/2**x, [1,inf], [1,3]) 6.0 >>> nsum(lambda x,y,z: z/(2**x*2**y), [1,inf], [1,inf], [3,4]) 7.0 >>> nsum(lambda x,y,z: y/(2**x*2**z), [1,inf], [3,4], [1,inf]) 7.0 >>> nsum(lambda x,y,z: x/(2**z*2**y), [3,4], [1,inf], [1,inf]) 7.0 Some nice examples of double series with analytic solutions or reductions to single-dimensional series (see [1]):: >>> nsum(lambda m, n: 1/2**(m*n), [1,inf], [1,inf]) 1.60669515241529 >>> nsum(lambda n: 1/(2**n-1), [1,inf]) 1.60669515241529 >>> nsum(lambda i,j: (-1)**(i+j)/(i**2+j**2), [1,inf], [1,inf]) 0.278070510848213 >>> pi*(pi-3*ln2)/12 0.278070510848213 >>> nsum(lambda i,j: (-1)**(i+j)/(i+j)**2, [1,inf], [1,inf]) 0.129319852864168 >>> altzeta(2) - altzeta(1) 0.129319852864168 >>> nsum(lambda i,j: (-1)**(i+j)/(i+j)**3, [1,inf], [1,inf]) 0.0790756439455825 >>> altzeta(3) - altzeta(2) 0.0790756439455825 >>> nsum(lambda m,n: m**2*n/(3**m*(n*3**m+m*3**n)), ... [1,inf], [1,inf]) 0.28125 >>> mpf(9)/32 0.28125 >>> nsum(lambda i,j: fac(i-1)*fac(j-1)/fac(i+j), ... [1,inf], [1,inf], workprec=400) 1.64493406684823 >>> zeta(2) 1.64493406684823 A hard example of a multidimensional sum is the Madelung constant in three dimensions (see [2]). The defining sum converges very slowly and only conditionally, so :func:`~mpmath.nsum` is lucky to obtain an accurate value through convergence acceleration. The second evaluation below uses a much more efficient, rapidly convergent 2D sum:: >>> nsum(lambda x,y,z: (-1)**(x+y+z)/(x*x+y*y+z*z)**0.5, ... [-inf,inf], [-inf,inf], [-inf,inf], ignore=True) -1.74756459463318 >>> nsum(lambda x,y: -12*pi*sech(0.5*pi * \ ... sqrt((2*x+1)**2+(2*y+1)**2))**2, [0,inf], [0,inf]) -1.74756459463318 Another example of a lattice sum in 2D:: >>> nsum(lambda x,y: (-1)**(x+y) / (x**2+y**2), [-inf,inf], ... [-inf,inf], ignore=True) -2.1775860903036 >>> -pi*ln2 -2.1775860903036 An example of an Eisenstein series:: >>> nsum(lambda m,n: (m+n*1j)**(-4), [-inf,inf], [-inf,inf], ... ignore=True) (3.1512120021539 + 0.0j) **References** 1. [Weisstein]_ http://mathworld.wolfram.com/DoubleSeries.html, 2. [Weisstein]_ http://mathworld.wolfram.com/MadelungConstants.html """ infinite, g = standardize(ctx, f, intervals, options) if not infinite: return +g() def update(partial_sums, indices): if partial_sums: psum = partial_sums[-1] else: psum = ctx.zero for k in indices: psum = psum + g(ctx.mpf(k)) partial_sums.append(psum) prec = ctx.prec def emfun(point, tol): workprec = ctx.prec ctx.prec = prec + 10 v = ctx.sumem(g, [point, ctx.inf], tol, error=1) ctx.prec = workprec return v return +ctx.adaptive_extrapolation(update, emfun, options) def wrapsafe(f): def g(*args): try: return f(*args) except (ArithmeticError, ValueError): return 0 return g def standardize(ctx, f, intervals, options): if options.get("ignore"): f = wrapsafe(f) finite = [] infinite = [] for k, points in enumerate(intervals): a, b = ctx._as_points(points) if b < a: return False, (lambda: ctx.zero) if a == ctx.ninf or b == ctx.inf: infinite.append((k, (a,b))) else: finite.append((k, (int(a), int(b)))) if finite: f = fold_finite(ctx, f, finite) if not infinite: return False, lambda: f(*([0]*len(intervals))) if infinite: f = standardize_infinite(ctx, f, infinite) f = fold_infinite(ctx, f, infinite) args = [0] * len(intervals) d = infinite[0][0] def g(k): args[d] = k return f(*args) return True, g # backwards compatible itertools.product def cartesian_product(args): pools = map(tuple, args) result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod) def fold_finite(ctx, f, intervals): if not intervals: return f indices = [v[0] for v in intervals] points = [v[1] for v in intervals] ranges = [xrange(a, b+1) for (a,b) in points] def g(*args): args = list(args) s = ctx.zero for xs in cartesian_product(ranges): for dim, x in zip(indices, xs): args[dim] = ctx.mpf(x) s += f(*args) return s #print "Folded finite", indices return g # Standardize each interval to [0,inf] def standardize_infinite(ctx, f, intervals): if not intervals: return f dim, [a,b] = intervals[-1] if a == ctx.ninf: if b == ctx.inf: def g(*args): args = list(args) k = args[dim] if k: s = f(*args) args[dim] = -k s += f(*args) return s else: return f(*args) else: def g(*args): args = list(args) args[dim] = b - args[dim] return f(*args) else: def g(*args): args = list(args) args[dim] += a return f(*args) #print "Standardized infinity along dimension", dim, a, b return standardize_infinite(ctx, g, intervals[:-1]) def fold_infinite(ctx, f, intervals): if len(intervals) < 2: return f dim1 = intervals[-2][0] dim2 = intervals[-1][0] # Assume intervals are [0,inf] x [0,inf] x ... def g(*args): args = list(args) #args.insert(dim2, None) n = int(args[dim1]) s = ctx.zero #y = ctx.mpf(n) args[dim2] = ctx.mpf(n) #y for x in xrange(n+1): args[dim1] = ctx.mpf(x) s += f(*args) args[dim1] = ctx.mpf(n) #ctx.mpf(n) for y in xrange(n): args[dim2] = ctx.mpf(y) s += f(*args) return s #print "Folded infinite from", len(intervals), "to", (len(intervals)-1) return fold_infinite(ctx, g, intervals[:-1]) @defun def nprod(ctx, f, interval, nsum=False, **kwargs): r""" Computes the product .. math :: P = \prod_{k=a}^b f(k) where `(a, b)` = *interval*, and where `a = -\infty` and/or `b = \infty` are allowed. By default, :func:`~mpmath.nprod` uses the same extrapolation methods as :func:`~mpmath.nsum`, except applied to the partial products rather than partial sums, and the same keyword options as for :func:`~mpmath.nsum` are supported. If ``nsum=True``, the product is instead computed via :func:`~mpmath.nsum` as .. math :: P = \exp\left( \sum_{k=a}^b \log(f(k)) \right). This is slower, but can sometimes yield better results. It is also required (and used automatically) when Euler-Maclaurin summation is requested. **Examples** A simple finite product:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> nprod(lambda k: k, [1, 4]) 24.0 A large number of infinite products have known exact values, and can therefore be used as a reference. Most of the following examples are taken from MathWorld [1]. A few infinite products with simple values are:: >>> 2*nprod(lambda k: (4*k**2)/(4*k**2-1), [1, inf]) 3.141592653589793238462643 >>> nprod(lambda k: (1+1/k)**2/(1+2/k), [1, inf]) 2.0 >>> nprod(lambda k: (k**3-1)/(k**3+1), [2, inf]) 0.6666666666666666666666667 >>> nprod(lambda k: (1-1/k**2), [2, inf]) 0.5 Next, several more infinite products with more complicated values:: >>> nprod(lambda k: exp(1/k**2), [1, inf]); exp(pi**2/6) 5.180668317897115748416626 5.180668317897115748416626 >>> nprod(lambda k: (k**2-1)/(k**2+1), [2, inf]); pi*csch(pi) 0.2720290549821331629502366 0.2720290549821331629502366 >>> nprod(lambda k: (k**4-1)/(k**4+1), [2, inf]) 0.8480540493529003921296502 >>> pi*sinh(pi)/(cosh(sqrt(2)*pi)-cos(sqrt(2)*pi)) 0.8480540493529003921296502 >>> nprod(lambda k: (1+1/k+1/k**2)**2/(1+2/k+3/k**2), [1, inf]) 1.848936182858244485224927 >>> 3*sqrt(2)*cosh(pi*sqrt(3)/2)**2*csch(pi*sqrt(2))/pi 1.848936182858244485224927 >>> nprod(lambda k: (1-1/k**4), [2, inf]); sinh(pi)/(4*pi) 0.9190194775937444301739244 0.9190194775937444301739244 >>> nprod(lambda k: (1-1/k**6), [2, inf]) 0.9826842777421925183244759 >>> (1+cosh(pi*sqrt(3)))/(12*pi**2) 0.9826842777421925183244759 >>> nprod(lambda k: (1+1/k**2), [2, inf]); sinh(pi)/(2*pi) 1.838038955187488860347849 1.838038955187488860347849 >>> nprod(lambda n: (1+1/n)**n * exp(1/(2*n)-1), [1, inf]) 1.447255926890365298959138 >>> exp(1+euler/2)/sqrt(2*pi) 1.447255926890365298959138 The following two products are equivalent and can be evaluated in terms of a Jacobi theta function. Pi can be replaced by any value (as long as convergence is preserved):: >>> nprod(lambda k: (1-pi**-k)/(1+pi**-k), [1, inf]) 0.3838451207481672404778686 >>> nprod(lambda k: tanh(k*log(pi)/2), [1, inf]) 0.3838451207481672404778686 >>> jtheta(4,0,1/pi) 0.3838451207481672404778686 This product does not have a known closed form value:: >>> nprod(lambda k: (1-1/2**k), [1, inf]) 0.2887880950866024212788997 A product taken from `-\infty`:: >>> nprod(lambda k: 1-k**(-3), [-inf,-2]) 0.8093965973662901095786805 >>> cosh(pi*sqrt(3)/2)/(3*pi) 0.8093965973662901095786805 A doubly infinite product:: >>> nprod(lambda k: exp(1/(1+k**2)), [-inf, inf]) 23.41432688231864337420035 >>> exp(pi/tanh(pi)) 23.41432688231864337420035 A product requiring the use of Euler-Maclaurin summation to compute an accurate value:: >>> nprod(lambda k: (1-1/k**2.5), [2, inf], method='e') 0.696155111336231052898125 **References** 1. [Weisstein]_ http://mathworld.wolfram.com/InfiniteProduct.html """ if nsum or ('e' in kwargs.get('method', '')): orig = ctx.prec try: # TODO: we are evaluating log(1+eps) -> eps, which is # inaccurate. This currently works because nsum greatly # increases the working precision. But we should be # more intelligent and handle the precision here. ctx.prec += 10 v = ctx.nsum(lambda n: ctx.ln(f(n)), interval, **kwargs) finally: ctx.prec = orig return +ctx.exp(v) a, b = ctx._as_points(interval) if a == ctx.ninf: if b == ctx.inf: return f(0) * ctx.nprod(lambda k: f(-k) * f(k), [1, ctx.inf], **kwargs) return ctx.nprod(f, [-b, ctx.inf], **kwargs) elif b != ctx.inf: return ctx.fprod(f(ctx.mpf(k)) for k in xrange(int(a), int(b)+1)) a = int(a) def update(partial_products, indices): if partial_products: pprod = partial_products[-1] else: pprod = ctx.one for k in indices: pprod = pprod * f(a + ctx.mpf(k)) partial_products.append(pprod) return +ctx.adaptive_extrapolation(update, None, kwargs) @defun def limit(ctx, f, x, direction=1, exp=False, **kwargs): r""" Computes an estimate of the limit .. math :: \lim_{t \to x} f(t) where `x` may be finite or infinite. For finite `x`, :func:`~mpmath.limit` evaluates `f(x + d/n)` for consecutive integer values of `n`, where the approach direction `d` may be specified using the *direction* keyword argument. For infinite `x`, :func:`~mpmath.limit` evaluates values of `f(\mathrm{sign}(x) \cdot n)`. If the approach to the limit is not sufficiently fast to give an accurate estimate directly, :func:`~mpmath.limit` attempts to find the limit using Richardson extrapolation or the Shanks transformation. You can select between these methods using the *method* keyword (see documentation of :func:`~mpmath.nsum` for more information). **Options** The following options are available with essentially the same meaning as for :func:`~mpmath.nsum`: *tol*, *method*, *maxterms*, *steps*, *verbose*. If the option *exp=True* is set, `f` will be sampled at exponentially spaced points `n = 2^1, 2^2, 2^3, \ldots` instead of the linearly spaced points `n = 1, 2, 3, \ldots`. This can sometimes improve the rate of convergence so that :func:`~mpmath.limit` may return a more accurate answer (and faster). However, do note that this can only be used if `f` supports fast and accurate evaluation for arguments that are extremely close to the limit point (or if infinite, very large arguments). **Examples** A basic evaluation of a removable singularity:: >>> from mpmath import * >>> mp.dps = 30; mp.pretty = True >>> limit(lambda x: (x-sin(x))/x**3, 0) 0.166666666666666666666666666667 Computing the exponential function using its limit definition:: >>> limit(lambda n: (1+3/n)**n, inf) 20.0855369231876677409285296546 >>> exp(3) 20.0855369231876677409285296546 A limit for `\pi`:: >>> f = lambda n: 2**(4*n+1)*fac(n)**4/(2*n+1)/fac(2*n)**2 >>> limit(f, inf) 3.14159265358979323846264338328 Calculating the coefficient in Stirling's formula:: >>> limit(lambda n: fac(n) / (sqrt(n)*(n/e)**n), inf) 2.50662827463100050241576528481 >>> sqrt(2*pi) 2.50662827463100050241576528481 Evaluating Euler's constant `\gamma` using the limit representation .. math :: \gamma = \lim_{n \rightarrow \infty } \left[ \left( \sum_{k=1}^n \frac{1}{k} \right) - \log(n) \right] (which converges notoriously slowly):: >>> f = lambda n: sum([mpf(1)/k for k in range(1,int(n)+1)]) - log(n) >>> limit(f, inf) 0.577215664901532860606512090082 >>> +euler 0.577215664901532860606512090082 With default settings, the following limit converges too slowly to be evaluated accurately. Changing to exponential sampling however gives a perfect result:: >>> f = lambda x: sqrt(x**3+x**2)/(sqrt(x**3)+x) >>> limit(f, inf) 0.992831158558330281129249686491 >>> limit(f, inf, exp=True) 1.0 """ if ctx.isinf(x): direction = ctx.sign(x) g = lambda k: f(ctx.mpf(k+1)*direction) else: direction *= ctx.one g = lambda k: f(x + direction/(k+1)) if exp: h = g g = lambda k: h(2**k) def update(values, indices): for k in indices: values.append(g(k+1)) # XXX: steps used by nsum don't work well if not 'steps' in kwargs: kwargs['steps'] = [10] return +ctx.adaptive_extrapolation(update, None, kwargs) mpmath-1.0.0/mpmath/calculus/inverselaplace.py000066400000000000000000000746371316273626600215030ustar00rootroot00000000000000# contributed to mpmath by Kristopher L. Kuhlman, February 2017 class InverseLaplaceTransform(object): r""" Inverse Laplace transform methods are implemented using this class, in order to simplify the code and provide a common infrastructure. Implement a custom inverse Laplace transform algorithm by subclassing :class:`InverseLaplaceTransform` and implementing the appropriate methods. The subclass can then be used by :func:`~mpmath.invertlaplace` by passing it as the *method* argument. """ def __init__(self,ctx): self.ctx = ctx def calc_laplace_parameter(self,t,**kwargs): r""" Determine the vector of Laplace parameter values needed for an algorithm, this will depend on the choice of algorithm (de Hoog is default), the algorithm-specific parameters passed (or default ones), and desired time. """ raise NotImplementedError def calc_time_domain_solution(self,fp): r""" Compute the time domain solution, after computing the Laplace-space function evaluations at the abscissa required for the algorithm. Abscissa computed for one algorithm are typically not useful for another algorithm. """ raise NotImplementedError class FixedTalbot(InverseLaplaceTransform): def calc_laplace_parameter(self,t,**kwargs): r"""The "fixed" Talbot method deforms the Bromwich contour towards `-\infty` in the shape of a parabola. Traditionally the Talbot algorithm has adjustable parameters, but the "fixed" version does not. The `r` parameter could be passed in as a parameter, if you want to override the default given by (Abate & Valko, 2004). The Laplace parameter is sampled along a parabola opening along the negative imaginary axis, with the base of the parabola along the real axis at `p=\frac{r}{t_\mathrm{max}}`. As the number of terms used in the approximation (degree) grows, the abscissa required for function evaluation tend towards `-\infty`, requiring high precision to prevent overflow. If any poles, branch cuts or other singularities exist such that the deformed Bromwich contour lies to the left of the singularity, the method will fail. **Optional arguments** :class:`~mpmath.calculus.inverselaplace.FixedTalbot.calc_laplace_parameter` recognizes the following keywords *tmax* maximum time associated with vector of times (typically just the time requested) *degree* integer order of approximation (M = number of terms) *r* abscissa for `p_0` (otherwise computed using rule of thumb `2M/5`) The working precision will be increased according to a rule of thumb. If 'degree' is not specified, the working precision and degree are chosen to hopefully achieve the dps of the calling context. If 'degree' is specified, the working precision is chosen to achieve maximum resulting precision for the specified degree. .. math :: p_0=\frac{r}{t} .. math :: p_i=\frac{i r \pi}{Mt_\mathrm{max}}\left[\cot\left( \frac{i\pi}{M}\right) + j \right] \qquad 1\le i 0: self.degree += 1 M = self.degree # this is adjusting the dps of the calling context # hopefully the caller doesn't monkey around with it # between calling this routine and calc_time_domain_solution() self.dps_orig = self.ctx.dps self.ctx.dps = self.dps_goal self.V = self._coeff() self.p = self.ctx.matrix(self.ctx.arange(1,M+1))*self.ctx.ln2/self.t # NB: p is real (mpf) def _coeff(self): r"""Salzer summation weights (aka, "Stehfest coefficients") only depend on the approximation order (M) and the precision""" M = self.degree M2 = int(M/2) # checked earlier that M is even V = self.ctx.matrix(M,1) # Salzer summation weights # get very large in magnitude and oscillate in sign, # if the precision is not high enough, there will be # catastrophic cancellation for k in range(1,M+1): z = self.ctx.matrix(min(k,M2)+1,1) for j in range(int((k+1)/2),min(k,M2)+1): z[j] = (self.ctx.power(j,M2)*self.ctx.fac(2*j)/ (self.ctx.fac(M2-j)*self.ctx.fac(j)* self.ctx.fac(j-1)*self.ctx.fac(k-j)* self.ctx.fac(2*j-k))) V[k-1] = self.ctx.power(-1,k+M2)*self.ctx.fsum(z) return V def calc_time_domain_solution(self,fp,t,manual_prec=False): r"""Compute time-domain Stehfest algorithm solution. .. math :: f(t,M) = \frac{\log 2}{t} \sum_{k=1}^{M} V_k \bar{f}\left( p_k \right) where .. math :: V_k = (-1)^{k + N/2} \sum^{\min(k,N/2)}_{i=\lfloor(k+1)/2 \rfloor} \frac{i^{\frac{N}{2}}(2i)!}{\left(\frac{N}{2}-i \right)! \, i! \, \left(i-1 \right)! \, \left(k-i\right)! \, \left(2i-k \right)!} As the degree increases, the abscissa (`p_k`) only increase linearly towards `\infty`, but the Stehfest coefficients (`V_k`) alternate in sign and increase rapidly in sign, requiring high precision to prevent overflow or loss of significance when evaluating the sum. **References** 1. Widder, D. (1941). *The Laplace Transform*. Princeton. 2. Stehfest, H. (1970). Algorithm 368: numerical inversion of Laplace transforms. *Communications of the ACM* 13(1):47-49, http://dx.doi.org/10.1145/361953.361969 """ # required self.t = self.ctx.convert(t) # assume fp was computed from p matrix returned from # calc_laplace_parameter(), so is already # a list or matrix of mpmath 'mpf' types result = self.ctx.fdot(self.V,fp)*self.ctx.ln2/self.t # setting dps back to value when calc_laplace_parameter was called if not manual_prec: self.ctx.dps = self.dps_orig # ignore any small imaginary part return result.real # **************************************** class deHoog(InverseLaplaceTransform): def calc_laplace_parameter(self,t,**kwargs): r"""the de Hoog, Knight & Stokes algorithm is an accelerated form of the Fourier series numerical inverse Laplace transform algorithms. .. math :: p_k = \gamma + \frac{jk}{T} \qquad 0 \le k < 2M+1 where .. math :: \gamma = \alpha - \frac{\log \mathrm{tol}}{2T}, `j=\sqrt{-1}`, `T = 2t_\mathrm{max}` is a scaled time, `\alpha=10^{-\mathrm{dps\_goal}}` is the real part of the rightmost pole or singularity, which is chosen based on the desired accuracy (assuming the rightmost singularity is 0), and `\mathrm{tol}=10\alpha` is the desired tolerance, which is chosen in relation to `\alpha`.` When increasing the degree, the abscissa increase towards `j\infty`, but more slowly than the fixed Talbot algorithm. The de Hoog et al. algorithm typically does better with oscillatory functions of time, and less well-behaved functions. The method tends to be slower than the Talbot and Stehfest algorithsm, especially so at very high precision (e.g., `>500` digits precision). """ # required # ------------------------------ self.t = self.ctx.convert(t) # optional # ------------------------------ self.tmax = kwargs.get('tmax',self.t) # empirical relationships used here based on a linear fit of # requested and delivered dps for exponentially decaying time # functions for requested dps up to 512. if 'degree' in kwargs: self.degree = kwargs['degree'] self.dps_goal = int(1.38*self.degree) else: self.dps_goal = int(self.ctx.dps*1.36) self.degree = max(10,self.dps_goal) # 2*M+1 terms in approximation M = self.degree # adjust alpha component of abscissa of convergence for higher # precision tmp = self.ctx.power(10.0,-self.dps_goal) self.alpha = self.ctx.convert(kwargs.get('alpha',tmp)) # desired tolerance (here simply related to alpha) self.tol = self.ctx.convert(kwargs.get('tol',self.alpha*10.0)) self.np = 2*self.degree+1 # number of terms in approximation # this is adjusting the dps of the calling context # hopefully the caller doesn't monkey around with it # between calling this routine and calc_time_domain_solution() self.dps_orig = self.ctx.dps self.ctx.dps = self.dps_goal # scaling factor (likely tun-able, but 2 is typical) self.scale = kwargs.get('scale',2) self.T = self.ctx.convert(kwargs.get('T',self.scale*self.tmax)) self.p = self.ctx.matrix(2*M+1,1) self.gamma = self.alpha - self.ctx.log(self.tol)/(self.scale*self.T) self.p = (self.gamma + self.ctx.pi* self.ctx.matrix(self.ctx.arange(self.np))/self.T*1j) # NB: p is complex (mpc) def calc_time_domain_solution(self,fp,t,manual_prec=False): r"""Calculate time-domain solution for de Hoog, Knight & Stokes algorithm. The un-accelerated Fourier series approach is: .. math :: f(t,2M+1) = \frac{e^{\gamma t}}{T} \sum_{k=0}^{2M}{}^{'} \Re\left[\bar{f}\left( p_k \right) e^{i\pi t/T} \right], where the prime on the summation indicates the first term is halved. This simplistic approach requires so many function evaluations that it is not practical. Non-linear acceleration is accomplished via Pade-approximation and an analytic expression for the remainder of the continued fraction. See the original paper (reference 2 below) a detailed description of the numerical approach. **References** 1. Davies, B. (2005). *Integral Transforms and their Applications*, Third Edition. Springer. 2. de Hoog, F., J. Knight, A. Stokes (1982). An improved method for numerical inversion of Laplace transforms. *SIAM Journal of Scientific and Statistical Computing* 3:357-366, http://dx.doi.org/10.1137/0903022 """ M = self.degree np = self.np T = self.T self.t = self.ctx.convert(t) # would it be useful to try re-using # space between e&q and A&B? e = self.ctx.zeros(np,M+1) q = self.ctx.matrix(np,M) d = self.ctx.matrix(np,1) A = self.ctx.zeros(np+2,1) B = self.ctx.ones(np+2,1) # initialize Q-D table # e[0:2*M,0] = 0.0 + 0.0j q[0,0] = fp[1]/(fp[0]/2) for i in range(1,2*M): q[i,0] = fp[i+1]/fp[i] # rhombus rule for filling triangular Q-D table (e & q) for r in range(1,M+1): # start with e, column 1, 0:2*M-2 mr = 2*(M-r) e[0:mr,r] = q[1:mr+1,r-1] - q[0:mr,r-1] + e[1:mr+1,r-1] if not r == M: rq = r+1 mr = 2*(M-rq)+1 for i in range(mr): q[i,rq-1] = q[i+1,rq-2]*e[i+1,rq-1]/e[i,rq-1] # build up continued fraction coefficients (d) d[0] = fp[0]/2 for r in range(1,M+1): d[2*r-1] = -q[0,r-1] # even terms d[2*r] = -e[0,r] # odd terms # seed A and B for recurrence #A[0] = 0.0 + 0.0j A[1] = d[0] #B[0:2] = 1.0 + 0.0j # base of the power series z = self.ctx.expjpi(self.t/T) # i*pi is already in fcn # coefficients of Pade approximation (A & B) # using recurrence for all but last term for i in range(1,2*M): A[i+1] = A[i] + d[i]*A[i-1]*z B[i+1] = B[i] + d[i]*B[i-1]*z # "improved remainder" to continued fraction brem = (1 + (d[2*M-1] - d[2*M])*z)/2 # powm1(x,y) computes x^y - 1 more accurately near zero rem = brem*self.ctx.powm1(1 + d[2*M]*z/brem, self.ctx.fraction(1,2)) # last term of recurrence using new remainder A[np] = A[2*M] + rem*A[2*M-1] B[np] = B[2*M] + rem*B[2*M-1] # diagonal Pade approximation # F=A/B represents accelerated trapezoid rule result = self.ctx.exp(self.gamma*self.t)/T*(A[np]/B[np]).real # setting dps back to value when calc_laplace_parameter was called if not manual_prec: self.ctx.dps = self.dps_orig return result # **************************************** class LaplaceTransformInversionMethods(object): def __init__(ctx, *args, **kwargs): ctx._fixed_talbot = FixedTalbot(ctx) ctx._stehfest = Stehfest(ctx) ctx._de_hoog = deHoog(ctx) def invertlaplace(ctx, f, t, **kwargs): r"""Computes the numerical inverse Laplace transform for a Laplace-space function at a given time. The function being evaluated is assumed to be a real-valued function of time. The user must supply a Laplace-space function `\bar{f}(p)`, and a desired time at which to estimate the time-domain solution `f(t)`. A few basic examples of Laplace-space functions with known inverses (see references [1,2]) : .. math :: \mathcal{L}\left\lbrace f(t) \right\rbrace=\bar{f}(p) .. math :: \mathcal{L}^{-1}\left\lbrace \bar{f}(p) \right\rbrace = f(t) .. math :: \bar{f}(p) = \frac{1}{(p+1)^2} .. math :: f(t) = t e^{-t} >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> tt = [0.001, 0.01, 0.1, 1, 10] >>> fp = lambda p: 1/(p+1)**2 >>> ft = lambda t: t*exp(-t) >>> ft(tt[0]),ft(tt[0])-invertlaplace(fp,tt[0],method='talbot') (0.000999000499833375, 8.57923043561212e-20) >>> ft(tt[1]),ft(tt[1])-invertlaplace(fp,tt[1],method='talbot') (0.00990049833749168, 3.27007646698047e-19) >>> ft(tt[2]),ft(tt[2])-invertlaplace(fp,tt[2],method='talbot') (0.090483741803596, -1.75215800052168e-18) >>> ft(tt[3]),ft(tt[3])-invertlaplace(fp,tt[3],method='talbot') (0.367879441171442, 1.2428864009344e-17) >>> ft(tt[4]),ft(tt[4])-invertlaplace(fp,tt[4],method='talbot') (0.000453999297624849, 4.04513489306658e-20) The methods also work for higher precision: >>> mp.dps = 100; mp.pretty = True >>> nstr(ft(tt[0]),15),nstr(ft(tt[0])-invertlaplace(fp,tt[0],method='talbot'),15) ('0.000999000499833375', '-4.96868310693356e-105') >>> nstr(ft(tt[1]),15),nstr(ft(tt[1])-invertlaplace(fp,tt[1],method='talbot'),15) ('0.00990049833749168', '1.23032291513122e-104') .. math :: \bar{f}(p) = \frac{1}{p^2+1} .. math :: f(t) = \mathrm{J}_0(t) >>> mp.dps = 15; mp.pretty = True >>> fp = lambda p: 1/sqrt(p*p + 1) >>> ft = lambda t: besselj(0,t) >>> ft(tt[0]),ft(tt[0])-invertlaplace(fp,tt[0]) (0.999999750000016, -8.2477943034014e-18) >>> ft(tt[1]),ft(tt[1])-invertlaplace(fp,tt[1]) (0.99997500015625, -3.69810144898872e-17) .. math :: \bar{f}(p) = \frac{\log p}{p} .. math :: f(t) = -\gamma -\log t >>> mp.dps = 15; mp.pretty = True >>> fp = lambda p: log(p)/p >>> ft = lambda t: -euler-log(t) >>> ft(tt[0]),ft(tt[0])-invertlaplace(fp,tt[0],method='stehfest') (6.3305396140806, -1.92126634837863e-16) >>> ft(tt[1]),ft(tt[1])-invertlaplace(fp,tt[1],method='stehfest') (4.02795452108656, -4.81486093200704e-16) **Options** :func:`~mpmath.invertlaplace` recognizes the following optional keywords valid for all methods: *method* Chooses numerical inverse Laplace transform algorithm (described below). *degree* Number of terms used in the approximation **Algorithms** Mpmath implements three numerical inverse Laplace transform algorithms, attributed to: Talbot, Stehfest, and de Hoog, Knight and Stokes. These can be selected by using *method='talbot'*, *method='stehfest'*, or *method='dehoog'* or by passing the classes *method=FixedTalbot*, *method=Stehfest*, or *method=deHoog*. The functions :func:`~mpmath.invlaptalbot`, :func:`~mpmath.invlapstehfest`, and :func:`~mpmath.invlapdehoog` are also available as shortcuts. All three algorithms implement a heuristic balance between the requested precision and the precision used internally for the calculations. This has been tuned for a typical exponentially decaying function and precision up to few hundred decimal digits. The Laplace transform converts the variable time (i.e., along a line) into a parameter given by the right half of the complex `p`-plane. Singularities, poles, and branch cuts in the complex `p`-plane contain all the information regarding the time behavior of the corresponding function. Any numerical method must therefore sample `p`-plane "close enough" to the singularities to accurately characterize them, while not getting too close to have catastrophic cancellation, overflow, or underflow issues. Most significantly, if one or more of the singularities in the `p`-plane is not on the left side of the Bromwich contour, its effects will be left out of the computed solution, and the answer will be completely wrong. *Talbot* The fixed Talbot method is high accuracy and fast, but the method can catastrophically fail for certain classes of time-domain behavior, including a Heaviside step function for positive time (e.g., `H(t-2)`), or some oscillatory behaviors. The Talbot method usually has adjustable parameters, but the "fixed" variety implemented here does not. This method deforms the Bromwich integral contour in the shape of a parabola towards `-\infty`, which leads to problems when the solution has a decaying exponential in it (e.g., a Heaviside step function is equivalent to multiplying by a decaying exponential in Laplace space). *Stehfest* The Stehfest algorithm only uses abscissa along the real axis of the complex `p`-plane to estimate the time-domain function. Oscillatory time-domain functions have poles away from the real axis, so this method does not work well with oscillatory functions, especially high-frequency ones. This method also depends on summation of terms in a series that grows very large, and will have catastrophic cancellation during summation if the working precision is too low. *de Hoog et al.* The de Hoog, Knight, and Stokes method is essentially a Fourier-series quadrature-type approximation to the Bromwich contour integral, with non-linear series acceleration and an analytical expression for the remainder term. This method is typically the most robust and is therefore the default method. This method also involves the greatest amount of overhead, so it is typically the slowest of the three methods at high precision. **Singularities** All numerical inverse Laplace transform methods have problems at large time when the Laplace-space function has poles, singularities, or branch cuts to the right of the origin in the complex plane. For simple poles in `\bar{f}(p)` at the `p`-plane origin, the time function is constant in time (e.g., `\mathcal{L}\left\lbrace 1 \right\rbrace=1/p` has a pole at `p=0`). A pole in `\bar{f}(p)` to the left of the origin is a decreasing function of time (e.g., `\mathcal{L}\left\lbrace e^{-t/2} \right\rbrace=1/(p+1/2)` has a pole at `p=-1/2`), and a pole to the right of the origin leads to an increasing function in time (e.g., `\mathcal{L}\left\lbrace t e^{t/4} \right\rbrace = 1/(p-1/4)^2` has a pole at `p=1/4`). When singularities occur off the real `p` axis, the time-domain function is oscillatory. For example `\mathcal{L}\left\lbrace \mathrm{J}_0(t) \right\rbrace=1/\sqrt{p^2+1}` has a branch cut starting at `p=j=\sqrt{-1}` and is a decaying oscillatory function, This range of behaviors is illustrated in Duffy [3] Figure 4.10.4, p. 228. In general as `p \rightarrow \infty` `t \rightarrow 0` and vice-versa. All numerical inverse Laplace transform methods require their abscissa to shift closer to the origin for larger times. If the abscissa shift left of the rightmost singularity in the Laplace domain, the answer will be completely wrong (the effect of singularities to the right of the Bromwich contour are not included in the results). For example, the following exponentially growing function has a pole at `p=3`: .. math :: \bar{f}(p)=\frac{1}{p^2-9} .. math :: f(t)=\frac{1}{3}\sinh 3t >>> mp.dps = 15; mp.pretty = True >>> fp = lambda p: 1/(p*p-9) >>> ft = lambda t: sinh(3*t)/3 >>> tt = [0.01,0.1,1.0,10.0] >>> ft(tt[0]),invertlaplace(fp,tt[0],method='talbot') (0.0100015000675014, 0.0100015000675014) >>> ft(tt[1]),invertlaplace(fp,tt[1],method='talbot') (0.101506764482381, 0.101506764482381) >>> ft(tt[2]),invertlaplace(fp,tt[2],method='talbot') (3.33929164246997, 3.33929164246997) >>> ft(tt[3]),invertlaplace(fp,tt[3],method='talbot') (1781079096920.74, -1.61331069624091e-14) **References** 1. [DLMF]_ section 1.14 (http://dlmf.nist.gov/1.14T4) 2. Cohen, A.M. (2007). Numerical Methods for Laplace Transform Inversion, Springer. 3. Duffy, D.G. (1998). Advanced Engineering Mathematics, CRC Press. **Numerical Inverse Laplace Transform Reviews** 1. Bellman, R., R.E. Kalaba, J.A. Lockett (1966). *Numerical inversion of the Laplace transform: Applications to Biology, Economics, Engineering, and Physics*. Elsevier. 2. Davies, B., B. Martin (1979). Numerical inversion of the Laplace transform: a survey and comparison of methods. *Journal of Computational Physics* 33:1-32, http://dx.doi.org/10.1016/0021-9991(79)90025-1 3. Duffy, D.G. (1993). On the numerical inversion of Laplace transforms: Comparison of three new methods on characteristic problems from applications. *ACM Transactions on Mathematical Software* 19(3):333-359, http://dx.doi.org/10.1145/155743.155788 4. Kuhlman, K.L., (2013). Review of Inverse Laplace Transform Algorithms for Laplace-Space Numerical Approaches, *Numerical Algorithms*, 63(2):339-355. http://dx.doi.org/10.1007/s11075-012-9625-3 """ rule = kwargs.get('method','dehoog') if type(rule) is str: lrule = rule.lower() if lrule == 'talbot': rule = ctx._fixed_talbot elif lrule == 'stehfest': rule = ctx._stehfest elif lrule == 'dehoog': rule = ctx._de_hoog else: raise ValueError("unknown invlap algorithm: %s" % rule) else: rule = rule(ctx) # determine the vector of Laplace-space parameter # needed for the requested method and desired time rule.calc_laplace_parameter(t,**kwargs) # compute the Laplace-space function evalutations # at the required abscissa. fp = [f(p) for p in rule.p] # compute the time-domain solution from the # Laplace-space function evaluations return rule.calc_time_domain_solution(fp,t) # shortcuts for the above function for specific methods def invlaptalbot(ctx, *args, **kwargs): kwargs['method'] = 'talbot' return ctx.invertlaplace(*args, **kwargs) def invlapstehfest(ctx, *args, **kwargs): kwargs['method'] = 'stehfest' return ctx.invertlaplace(*args, **kwargs) def invlapdehoog(ctx, *args, **kwargs): kwargs['method'] = 'dehoog' return ctx.invertlaplace(*args, **kwargs) # **************************************** if __name__ == '__main__': import doctest doctest.testmod() mpmath-1.0.0/mpmath/calculus/odes.py000066400000000000000000000232641316273626600174260ustar00rootroot00000000000000from bisect import bisect from ..libmp.backend import xrange class ODEMethods(object): pass def ode_taylor(ctx, derivs, x0, y0, tol_prec, n): h = tol = ctx.ldexp(1, -tol_prec) dim = len(y0) xs = [x0] ys = [y0] x = x0 y = y0 orig = ctx.prec try: ctx.prec = orig*(1+n) # Use n steps with Euler's method to get # evaluation points for derivatives for i in range(n): fxy = derivs(x, y) y = [y[i]+h*fxy[i] for i in xrange(len(y))] x += h xs.append(x) ys.append(y) # Compute derivatives ser = [[] for d in range(dim)] for j in range(n+1): s = [0]*dim b = (-1) ** (j & 1) k = 1 for i in range(j+1): for d in range(dim): s[d] += b * ys[i][d] b = (b * (j-k+1)) // (-k) k += 1 scale = h**(-j) / ctx.fac(j) for d in range(dim): s[d] = s[d] * scale ser[d].append(s[d]) finally: ctx.prec = orig # Estimate radius for which we can get full accuracy. # XXX: do this right for zeros radius = ctx.one for ts in ser: if ts[-1]: radius = min(radius, ctx.nthroot(tol/abs(ts[-1]), n)) radius /= 2 # XXX return ser, x0+radius def odefun(ctx, F, x0, y0, tol=None, degree=None, method='taylor', verbose=False): r""" Returns a function `y(x) = [y_0(x), y_1(x), \ldots, y_n(x)]` that is a numerical solution of the `n+1`-dimensional first-order ordinary differential equation (ODE) system .. math :: y_0'(x) = F_0(x, [y_0(x), y_1(x), \ldots, y_n(x)]) y_1'(x) = F_1(x, [y_0(x), y_1(x), \ldots, y_n(x)]) \vdots y_n'(x) = F_n(x, [y_0(x), y_1(x), \ldots, y_n(x)]) The derivatives are specified by the vector-valued function *F* that evaluates `[y_0', \ldots, y_n'] = F(x, [y_0, \ldots, y_n])`. The initial point `x_0` is specified by the scalar argument *x0*, and the initial value `y(x_0) = [y_0(x_0), \ldots, y_n(x_0)]` is specified by the vector argument *y0*. For convenience, if the system is one-dimensional, you may optionally provide just a scalar value for *y0*. In this case, *F* should accept a scalar *y* argument and return a scalar. The solution function *y* will return scalar values instead of length-1 vectors. Evaluation of the solution function `y(x)` is permitted for any `x \ge x_0`. A high-order ODE can be solved by transforming it into first-order vector form. This transformation is described in standard texts on ODEs. Examples will also be given below. **Options, speed and accuracy** By default, :func:`~mpmath.odefun` uses a high-order Taylor series method. For reasonably well-behaved problems, the solution will be fully accurate to within the working precision. Note that *F* must be possible to evaluate to very high precision for the generation of Taylor series to work. To get a faster but less accurate solution, you can set a large value for *tol* (which defaults roughly to *eps*). If you just want to plot the solution or perform a basic simulation, *tol = 0.01* is likely sufficient. The *degree* argument controls the degree of the solver (with *method='taylor'*, this is the degree of the Taylor series expansion). A higher degree means that a longer step can be taken before a new local solution must be generated from *F*, meaning that fewer steps are required to get from `x_0` to a given `x_1`. On the other hand, a higher degree also means that each local solution becomes more expensive (i.e., more evaluations of *F* are required per step, and at higher precision). The optimal setting therefore involves a tradeoff. Generally, decreasing the *degree* for Taylor series is likely to give faster solution at low precision, while increasing is likely to be better at higher precision. The function object returned by :func:`~mpmath.odefun` caches the solutions at all step points and uses polynomial interpolation between step points. Therefore, once `y(x_1)` has been evaluated for some `x_1`, `y(x)` can be evaluated very quickly for any `x_0 \le x \le x_1`. and continuing the evaluation up to `x_2 > x_1` is also fast. **Examples of first-order ODEs** We will solve the standard test problem `y'(x) = y(x), y(0) = 1` which has explicit solution `y(x) = \exp(x)`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> f = odefun(lambda x, y: y, 0, 1) >>> for x in [0, 1, 2.5]: ... print((f(x), exp(x))) ... (1.0, 1.0) (2.71828182845905, 2.71828182845905) (12.1824939607035, 12.1824939607035) The solution with high precision:: >>> mp.dps = 50 >>> f = odefun(lambda x, y: y, 0, 1) >>> f(1) 2.7182818284590452353602874713526624977572470937 >>> exp(1) 2.7182818284590452353602874713526624977572470937 Using the more general vectorized form, the test problem can be input as (note that *f* returns a 1-element vector):: >>> mp.dps = 15 >>> f = odefun(lambda x, y: [y[0]], 0, [1]) >>> f(1) [2.71828182845905] :func:`~mpmath.odefun` can solve nonlinear ODEs, which are generally impossible (and at best difficult) to solve analytically. As an example of a nonlinear ODE, we will solve `y'(x) = x \sin(y(x))` for `y(0) = \pi/2`. An exact solution happens to be known for this problem, and is given by `y(x) = 2 \tan^{-1}\left(\exp\left(x^2/2\right)\right)`:: >>> f = odefun(lambda x, y: x*sin(y), 0, pi/2) >>> for x in [2, 5, 10]: ... print((f(x), 2*atan(exp(mpf(x)**2/2)))) ... (2.87255666284091, 2.87255666284091) (3.14158520028345, 3.14158520028345) (3.14159265358979, 3.14159265358979) If `F` is independent of `y`, an ODE can be solved using direct integration. We can therefore obtain a reference solution with :func:`~mpmath.quad`:: >>> f = lambda x: (1+x**2)/(1+x**3) >>> g = odefun(lambda x, y: f(x), pi, 0) >>> g(2*pi) 0.72128263801696 >>> quad(f, [pi, 2*pi]) 0.72128263801696 **Examples of second-order ODEs** We will solve the harmonic oscillator equation `y''(x) + y(x) = 0`. To do this, we introduce the helper functions `y_0 = y, y_1 = y_0'` whereby the original equation can be written as `y_1' + y_0' = 0`. Put together, we get the first-order, two-dimensional vector ODE .. math :: \begin{cases} y_0' = y_1 \\ y_1' = -y_0 \end{cases} To get a well-defined IVP, we need two initial values. With `y(0) = y_0(0) = 1` and `-y'(0) = y_1(0) = 0`, the problem will of course be solved by `y(x) = y_0(x) = \cos(x)` and `-y'(x) = y_1(x) = \sin(x)`. We check this:: >>> f = odefun(lambda x, y: [-y[1], y[0]], 0, [1, 0]) >>> for x in [0, 1, 2.5, 10]: ... nprint(f(x), 15) ... nprint([cos(x), sin(x)], 15) ... print("---") ... [1.0, 0.0] [1.0, 0.0] --- [0.54030230586814, 0.841470984807897] [0.54030230586814, 0.841470984807897] --- [-0.801143615546934, 0.598472144103957] [-0.801143615546934, 0.598472144103957] --- [-0.839071529076452, -0.54402111088937] [-0.839071529076452, -0.54402111088937] --- Note that we get both the sine and the cosine solutions simultaneously. **TODO** * Better automatic choice of degree and step size * Make determination of Taylor series convergence radius more robust * Allow solution for `x < x_0` * Allow solution for complex `x` * Test for difficult (ill-conditioned) problems * Implement Runge-Kutta and other algorithms """ if tol: tol_prec = int(-ctx.log(tol, 2))+10 else: tol_prec = ctx.prec+10 degree = degree or (3 + int(3*ctx.dps/2.)) workprec = ctx.prec + 40 try: len(y0) return_vector = True except TypeError: F_ = F F = lambda x, y: [F_(x, y[0])] y0 = [y0] return_vector = False ser, xb = ode_taylor(ctx, F, x0, y0, tol_prec, degree) series_boundaries = [x0, xb] series_data = [(ser, x0, xb)] # We will be working with vectors of Taylor series def mpolyval(ser, a): return [ctx.polyval(s[::-1], a) for s in ser] # Find nearest expansion point; compute if necessary def get_series(x): if x < x0: raise ValueError n = bisect(series_boundaries, x) if n < len(series_boundaries): return series_data[n-1] while 1: ser, xa, xb = series_data[-1] if verbose: print("Computing Taylor series for [%f, %f]" % (xa, xb)) y = mpolyval(ser, xb-xa) xa = xb ser, xb = ode_taylor(ctx, F, xb, y, tol_prec, degree) series_boundaries.append(xb) series_data.append((ser, xa, xb)) if x <= xb: return series_data[-1] # Evaluation function def interpolant(x): x = ctx.convert(x) orig = ctx.prec try: ctx.prec = workprec ser, xa, xb = get_series(x) y = mpolyval(ser, x-xa) finally: ctx.prec = orig if return_vector: return [+yk for yk in y] else: return +y[0] return interpolant ODEMethods.odefun = odefun if __name__ == "__main__": import doctest doctest.testmod() mpmath-1.0.0/mpmath/calculus/optimization.py000066400000000000000000000767331316273626600212330ustar00rootroot00000000000000from copy import copy from ..libmp.backend import xrange, print_ class OptimizationMethods(object): def __init__(ctx): pass ############## # 1D-SOLVERS # ############## class Newton: """ 1d-solver generating pairs of approximative root and error. Needs starting points x0 close to the root. Pro: * converges fast * sometimes more robust than secant with bad second starting point Contra: * converges slowly for multiple roots * needs first derivative * 2 function evaluations per iteration """ maxsteps = 20 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if len(x0) == 1: self.x0 = x0[0] else: raise ValueError('expected 1 starting point, got %i' % len(x0)) self.f = f if not 'df' in kwargs: def df(x): return self.ctx.diff(f, x) else: df = kwargs['df'] self.df = df def __iter__(self): f = self.f df = self.df x0 = self.x0 while True: x1 = x0 - f(x0) / df(x0) error = abs(x1 - x0) x0 = x1 yield (x1, error) class Secant: """ 1d-solver generating pairs of approximative root and error. Needs starting points x0 and x1 close to the root. x1 defaults to x0 + 0.25. Pro: * converges fast Contra: * converges slowly for multiple roots """ maxsteps = 30 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if len(x0) == 1: self.x0 = x0[0] self.x1 = self.x0 + 0.25 elif len(x0) == 2: self.x0 = x0[0] self.x1 = x0[1] else: raise ValueError('expected 1 or 2 starting points, got %i' % len(x0)) self.f = f def __iter__(self): f = self.f x0 = self.x0 x1 = self.x1 f0 = f(x0) while True: f1 = f(x1) l = x1 - x0 if not l: break s = (f1 - f0) / l if not s: break x0, x1 = x1, x1 - f1/s f0 = f1 yield x1, abs(l) class MNewton: """ 1d-solver generating pairs of approximative root and error. Needs starting point x0 close to the root. Uses modified Newton's method that converges fast regardless of the multiplicity of the root. Pro: * converges fast for multiple roots Contra: * needs first and second derivative of f * 3 function evaluations per iteration """ maxsteps = 20 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if not len(x0) == 1: raise ValueError('expected 1 starting point, got %i' % len(x0)) self.x0 = x0[0] self.f = f if not 'df' in kwargs: def df(x): return self.ctx.diff(f, x) else: df = kwargs['df'] self.df = df if not 'd2f' in kwargs: def d2f(x): return self.ctx.diff(df, x) else: d2f = kwargs['df'] self.d2f = d2f def __iter__(self): x = self.x0 f = self.f df = self.df d2f = self.d2f while True: prevx = x fx = f(x) if fx == 0: break dfx = df(x) d2fx = d2f(x) # x = x - F(x)/F'(x) with F(x) = f(x)/f'(x) x -= fx / (dfx - fx * d2fx / dfx) error = abs(x - prevx) yield x, error class Halley: """ 1d-solver generating pairs of approximative root and error. Needs a starting point x0 close to the root. Uses Halley's method with cubic convergence rate. Pro: * converges even faster the Newton's method * useful when computing with *many* digits Contra: * needs first and second derivative of f * 3 function evaluations per iteration * converges slowly for multiple roots """ maxsteps = 20 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if not len(x0) == 1: raise ValueError('expected 1 starting point, got %i' % len(x0)) self.x0 = x0[0] self.f = f if not 'df' in kwargs: def df(x): return self.ctx.diff(f, x) else: df = kwargs['df'] self.df = df if not 'd2f' in kwargs: def d2f(x): return self.ctx.diff(df, x) else: d2f = kwargs['df'] self.d2f = d2f def __iter__(self): x = self.x0 f = self.f df = self.df d2f = self.d2f while True: prevx = x fx = f(x) dfx = df(x) d2fx = d2f(x) x -= 2*fx*dfx / (2*dfx**2 - fx*d2fx) error = abs(x - prevx) yield x, error class Muller: """ 1d-solver generating pairs of approximative root and error. Needs starting points x0, x1 and x2 close to the root. x1 defaults to x0 + 0.25; x2 to x1 + 0.25. Uses Muller's method that converges towards complex roots. Pro: * converges fast (somewhat faster than secant) * can find complex roots Contra: * converges slowly for multiple roots * may have complex values for real starting points and real roots http://en.wikipedia.org/wiki/Muller's_method """ maxsteps = 30 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if len(x0) == 1: self.x0 = x0[0] self.x1 = self.x0 + 0.25 self.x2 = self.x1 + 0.25 elif len(x0) == 2: self.x0 = x0[0] self.x1 = x0[1] self.x2 = self.x1 + 0.25 elif len(x0) == 3: self.x0 = x0[0] self.x1 = x0[1] self.x2 = x0[2] else: raise ValueError('expected 1, 2 or 3 starting points, got %i' % len(x0)) self.f = f self.verbose = kwargs['verbose'] def __iter__(self): f = self.f x0 = self.x0 x1 = self.x1 x2 = self.x2 fx0 = f(x0) fx1 = f(x1) fx2 = f(x2) while True: # TODO: maybe refactoring with function for divided differences # calculate divided differences fx2x1 = (fx1 - fx2) / (x1 - x2) fx2x0 = (fx0 - fx2) / (x0 - x2) fx1x0 = (fx0 - fx1) / (x0 - x1) w = fx2x1 + fx2x0 - fx1x0 fx2x1x0 = (fx1x0 - fx2x1) / (x0 - x2) if w == 0 and fx2x1x0 == 0: if self.verbose: print_('canceled with') print_('x0 =', x0, ', x1 =', x1, 'and x2 =', x2) break x0 = x1 fx0 = fx1 x1 = x2 fx1 = fx2 # denominator should be as large as possible => choose sign r = self.ctx.sqrt(w**2 - 4*fx2*fx2x1x0) if abs(w - r) > abs(w + r): r = -r x2 -= 2*fx2 / (w + r) fx2 = f(x2) error = abs(x2 - x1) yield x2, error # TODO: consider raising a ValueError when there's no sign change in a and b class Bisection: """ 1d-solver generating pairs of approximative root and error. Uses bisection method to find a root of f in [a, b]. Might fail for multiple roots (needs sign change). Pro: * robust and reliable Contra: * converges slowly * needs sign change """ maxsteps = 100 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if len(x0) != 2: raise ValueError('expected interval of 2 points, got %i' % len(x0)) self.f = f self.a = x0[0] self.b = x0[1] def __iter__(self): f = self.f a = self.a b = self.b l = b - a fb = f(b) while True: m = self.ctx.ldexp(a + b, -1) fm = f(m) sign = fm * fb if sign < 0: a = m elif sign > 0: b = m fb = fm else: yield m, self.ctx.zero l /= 2 yield (a + b)/2, abs(l) def _getm(method): """ Return a function to calculate m for Illinois-like methods. """ if method == 'illinois': def getm(fz, fb): return 0.5 elif method == 'pegasus': def getm(fz, fb): return fb/(fb + fz) elif method == 'anderson': def getm(fz, fb): m = 1 - fz/fb if m > 0: return m else: return 0.5 else: raise ValueError("method '%s' not recognized" % method) return getm class Illinois: """ 1d-solver generating pairs of approximative root and error. Uses Illinois method or similar to find a root of f in [a, b]. Might fail for multiple roots (needs sign change). Combines bisect with secant (improved regula falsi). The only difference between the methods is the scaling factor m, which is used to ensure convergence (you can choose one using the 'method' keyword): Illinois method ('illinois'): m = 0.5 Pegasus method ('pegasus'): m = fb/(fb + fz) Anderson-Bjoerk method ('anderson'): m = 1 - fz/fb if positive else 0.5 Pro: * converges very fast Contra: * has problems with multiple roots * needs sign change """ maxsteps = 30 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if len(x0) != 2: raise ValueError('expected interval of 2 points, got %i' % len(x0)) self.a = x0[0] self.b = x0[1] self.f = f self.tol = kwargs['tol'] self.verbose = kwargs['verbose'] self.method = kwargs.get('method', 'illinois') self.getm = _getm(self.method) if self.verbose: print_('using %s method' % self.method) def __iter__(self): method = self.method f = self.f a = self.a b = self.b fa = f(a) fb = f(b) m = None while True: l = b - a if l == 0: break s = (fb - fa) / l z = a - fa/s fz = f(z) if abs(fz) < self.tol: # TODO: better condition (when f is very flat) if self.verbose: print_('canceled with z =', z) yield z, l break if fz * fb < 0: # root in [z, b] a = b fa = fb b = z fb = fz else: # root in [a, z] m = self.getm(fz, fb) b = z fb = fz fa = m*fa # scale down to ensure convergence if self.verbose and m and not method == 'illinois': print_('m:', m) yield (a + b)/2, abs(l) def Pegasus(*args, **kwargs): """ 1d-solver generating pairs of approximative root and error. Uses Pegasus method to find a root of f in [a, b]. Wrapper for illinois to use method='pegasus'. """ kwargs['method'] = 'pegasus' return Illinois(*args, **kwargs) def Anderson(*args, **kwargs): """ 1d-solver generating pairs of approximative root and error. Uses Anderson-Bjoerk method to find a root of f in [a, b]. Wrapper for illinois to use method='pegasus'. """ kwargs['method'] = 'anderson' return Illinois(*args, **kwargs) # TODO: check whether it's possible to combine it with Illinois stuff class Ridder: """ 1d-solver generating pairs of approximative root and error. Ridders' method to find a root of f in [a, b]. Is told to perform as well as Brent's method while being simpler. Pro: * very fast * simpler than Brent's method Contra: * two function evaluations per step * has problems with multiple roots * needs sign change http://en.wikipedia.org/wiki/Ridders'_method """ maxsteps = 30 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx self.f = f if len(x0) != 2: raise ValueError('expected interval of 2 points, got %i' % len(x0)) self.x1 = x0[0] self.x2 = x0[1] self.verbose = kwargs['verbose'] self.tol = kwargs['tol'] def __iter__(self): ctx = self.ctx f = self.f x1 = self.x1 fx1 = f(x1) x2 = self.x2 fx2 = f(x2) while True: x3 = 0.5*(x1 + x2) fx3 = f(x3) x4 = x3 + (x3 - x1) * ctx.sign(fx1 - fx2) * fx3 / ctx.sqrt(fx3**2 - fx1*fx2) fx4 = f(x4) if abs(fx4) < self.tol: # TODO: better condition (when f is very flat) if self.verbose: print_('canceled with f(x4) =', fx4) yield x4, abs(x1 - x2) break if fx4 * fx2 < 0: # root in [x4, x2] x1 = x4 fx1 = fx4 else: # root in [x1, x4] x2 = x4 fx2 = fx4 error = abs(x1 - x2) yield (x1 + x2)/2, error class ANewton: """ EXPERIMENTAL 1d-solver generating pairs of approximative root and error. Uses Newton's method modified to use Steffensens method when convergence is slow. (I.e. for multiple roots.) """ maxsteps = 20 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx if not len(x0) == 1: raise ValueError('expected 1 starting point, got %i' % len(x0)) self.x0 = x0[0] self.f = f if not 'df' in kwargs: def df(x): return self.ctx.diff(f, x) else: df = kwargs['df'] self.df = df def phi(x): return x - f(x) / df(x) self.phi = phi self.verbose = kwargs['verbose'] def __iter__(self): x0 = self.x0 f = self.f df = self.df phi = self.phi error = 0 counter = 0 while True: prevx = x0 try: x0 = phi(x0) except ZeroDivisionError: if self.verbose: print_('ZeroDivisionError: canceled with x =', x0) break preverror = error error = abs(prevx - x0) # TODO: decide not to use convergence acceleration if error and abs(error - preverror) / error < 1: if self.verbose: print_('converging slowly') counter += 1 if counter >= 3: # accelerate convergence phi = steffensen(phi) counter = 0 if self.verbose: print_('accelerating convergence') yield x0, error # TODO: add Brent ############################ # MULTIDIMENSIONAL SOLVERS # ############################ def jacobian(ctx, f, x): """ Calculate the Jacobian matrix of a function at the point x0. This is the first derivative of a vectorial function: f : R^m -> R^n with m >= n """ x = ctx.matrix(x) h = ctx.sqrt(ctx.eps) fx = ctx.matrix(f(*x)) m = len(fx) n = len(x) J = ctx.matrix(m, n) for j in xrange(n): xj = x.copy() xj[j] += h Jj = (ctx.matrix(f(*xj)) - fx) / h for i in xrange(m): J[i,j] = Jj[i] return J # TODO: test with user-specified jacobian matrix, support force_type class MDNewton: """ Find the root of a vector function numerically using Newton's method. f is a vector function representing a nonlinear equation system. x0 is the starting point close to the root. J is a function returning the Jacobian matrix for a point. Supports overdetermined systems. Use the 'norm' keyword to specify which norm to use. Defaults to max-norm. The function to calculate the Jacobian matrix can be given using the keyword 'J'. Otherwise it will be calculated numerically. Please note that this method converges only locally. Especially for high- dimensional systems it is not trivial to find a good starting point being close enough to the root. It is recommended to use a faster, low-precision solver from SciPy [1] or OpenOpt [2] to get an initial guess. Afterwards you can use this method for root-polishing to any precision. [1] http://scipy.org [2] http://openopt.org/Welcome """ maxsteps = 10 def __init__(self, ctx, f, x0, **kwargs): self.ctx = ctx self.f = f if isinstance(x0, (tuple, list)): x0 = ctx.matrix(x0) assert x0.cols == 1, 'need a vector' self.x0 = x0 if 'J' in kwargs: self.J = kwargs['J'] else: def J(*x): return ctx.jacobian(f, x) self.J = J self.norm = kwargs['norm'] self.verbose = kwargs['verbose'] def __iter__(self): f = self.f x0 = self.x0 norm = self.norm J = self.J fx = self.ctx.matrix(f(*x0)) fxnorm = norm(fx) cancel = False while not cancel: # get direction of descent fxn = -fx Jx = J(*x0) s = self.ctx.lu_solve(Jx, fxn) if self.verbose: print_('Jx:') print_(Jx) print_('s:', s) # damping step size TODO: better strategy (hard task) l = self.ctx.one x1 = x0 + s while True: if x1 == x0: if self.verbose: print_("canceled, won't get more excact") cancel = True break fx = self.ctx.matrix(f(*x1)) newnorm = norm(fx) if newnorm < fxnorm: # new x accepted fxnorm = newnorm x0 = x1 break l /= 2 x1 = x0 + l*s yield (x0, fxnorm) ############# # UTILITIES # ############# str2solver = {'newton':Newton, 'secant':Secant, 'mnewton':MNewton, 'halley':Halley, 'muller':Muller, 'bisect':Bisection, 'illinois':Illinois, 'pegasus':Pegasus, 'anderson':Anderson, 'ridder':Ridder, 'anewton':ANewton, 'mdnewton':MDNewton} def findroot(ctx, f, x0, solver='secant', tol=None, verbose=False, verify=True, **kwargs): r""" Find a solution to `f(x) = 0`, using *x0* as starting point or interval for *x*. Multidimensional overdetermined systems are supported. You can specify them using a function or a list of functions. If the found root does not satisfy `|f(x)|^2 \leq \mathrm{tol}`, an exception is raised (this can be disabled with *verify=False*). **Arguments** *f* one dimensional function *x0* starting point, several starting points or interval (depends on solver) *tol* the returned solution has an error smaller than this *verbose* print additional information for each iteration if true *verify* verify the solution and raise a ValueError if `|f(x)|^2 > \mathrm{tol}` *solver* a generator for *f* and *x0* returning approximative solution and error *maxsteps* after how many steps the solver will cancel *df* first derivative of *f* (used by some solvers) *d2f* second derivative of *f* (used by some solvers) *multidimensional* force multidimensional solving *J* Jacobian matrix of *f* (used by multidimensional solvers) *norm* used vector norm (used by multidimensional solvers) solver has to be callable with ``(f, x0, **kwargs)`` and return an generator yielding pairs of approximative solution and estimated error (which is expected to be positive). You can use the following string aliases: 'secant', 'mnewton', 'halley', 'muller', 'illinois', 'pegasus', 'anderson', 'ridder', 'anewton', 'bisect' See mpmath.calculus.optimization for their documentation. **Examples** The function :func:`~mpmath.findroot` locates a root of a given function using the secant method by default. A simple example use of the secant method is to compute `\pi` as the root of `\sin x` closest to `x_0 = 3`:: >>> from mpmath import * >>> mp.dps = 30; mp.pretty = True >>> findroot(sin, 3) 3.14159265358979323846264338328 The secant method can be used to find complex roots of analytic functions, although it must in that case generally be given a nonreal starting value (or else it will never leave the real line):: >>> mp.dps = 15 >>> findroot(lambda x: x**3 + 2*x + 1, j) (0.226698825758202 + 1.46771150871022j) A nice application is to compute nontrivial roots of the Riemann zeta function with many digits (good initial values are needed for convergence):: >>> mp.dps = 30 >>> findroot(zeta, 0.5+14j) (0.5 + 14.1347251417346937904572519836j) The secant method can also be used as an optimization algorithm, by passing it a derivative of a function. The following example locates the positive minimum of the gamma function:: >>> mp.dps = 20 >>> findroot(lambda x: diff(gamma, x), 1) 1.4616321449683623413 Finally, a useful application is to compute inverse functions, such as the Lambert W function which is the inverse of `w e^w`, given the first term of the solution's asymptotic expansion as the initial value. In basic cases, this gives identical results to mpmath's built-in ``lambertw`` function:: >>> def lambert(x): ... return findroot(lambda w: w*exp(w) - x, log(1+x)) ... >>> mp.dps = 15 >>> lambert(1); lambertw(1) 0.567143290409784 0.567143290409784 >>> lambert(1000); lambert(1000) 5.2496028524016 5.2496028524016 Multidimensional functions are also supported:: >>> f = [lambda x1, x2: x1**2 + x2, ... lambda x1, x2: 5*x1**2 - 3*x1 + 2*x2 - 3] >>> findroot(f, (0, 0)) [-0.618033988749895] [-0.381966011250105] >>> findroot(f, (10, 10)) [ 1.61803398874989] [-2.61803398874989] You can verify this by solving the system manually. Please note that the following (more general) syntax also works:: >>> def f(x1, x2): ... return x1**2 + x2, 5*x1**2 - 3*x1 + 2*x2 - 3 ... >>> findroot(f, (0, 0)) [-0.618033988749895] [-0.381966011250105] **Multiple roots** For multiple roots all methods of the Newtonian family (including secant) converge slowly. Consider this example:: >>> f = lambda x: (x - 1)**99 >>> findroot(f, 0.9, verify=False) 0.918073542444929 Even for a very close starting point the secant method converges very slowly. Use ``verbose=True`` to illustrate this. It is possible to modify Newton's method to make it converge regardless of the root's multiplicity:: >>> findroot(f, -10, solver='mnewton') 1.0 This variant uses the first and second derivative of the function, which is not very efficient. Alternatively you can use an experimental Newtonian solver that keeps track of the speed of convergence and accelerates it using Steffensen's method if necessary:: >>> findroot(f, -10, solver='anewton', verbose=True) x: -9.88888888888888888889 error: 0.111111111111111111111 converging slowly x: -9.77890011223344556678 error: 0.10998877665544332211 converging slowly x: -9.67002233332199662166 error: 0.108877778911448945119 converging slowly accelerating convergence x: -9.5622443299551077669 error: 0.107778003366888854764 converging slowly x: 0.99999999999999999214 error: 10.562244329955107759 x: 1.0 error: 7.8598304758094664213e-18 ZeroDivisionError: canceled with x = 1.0 1.0 **Complex roots** For complex roots it's recommended to use Muller's method as it converges even for real starting points very fast:: >>> findroot(lambda x: x**4 + x + 1, (0, 1, 2), solver='muller') (0.727136084491197 + 0.934099289460529j) **Intersection methods** When you need to find a root in a known interval, it's highly recommended to use an intersection-based solver like ``'anderson'`` or ``'ridder'``. Usually they converge faster and more reliable. They have however problems with multiple roots and usually need a sign change to find a root:: >>> findroot(lambda x: x**3, (-1, 1), solver='anderson') 0.0 Be careful with symmetric functions:: >>> findroot(lambda x: x**2, (-1, 1), solver='anderson') #doctest:+ELLIPSIS Traceback (most recent call last): ... ZeroDivisionError It fails even for better starting points, because there is no sign change:: >>> findroot(lambda x: x**2, (-1, .5), solver='anderson') Traceback (most recent call last): ... ValueError: Could not find root within given tolerance. (1.0 > 2.16840434497100886801e-19) Try another starting point or tweak arguments. """ prec = ctx.prec try: ctx.prec += 20 # initialize arguments if tol is None: tol = ctx.eps * 2**10 kwargs['verbose'] = kwargs.get('verbose', verbose) if 'd1f' in kwargs: kwargs['df'] = kwargs['d1f'] kwargs['tol'] = tol if isinstance(x0, (list, tuple)): x0 = [ctx.convert(x) for x in x0] else: x0 = [ctx.convert(x0)] if isinstance(solver, str): try: solver = str2solver[solver] except KeyError: raise ValueError('could not recognize solver') # accept list of functions if isinstance(f, (list, tuple)): f2 = copy(f) def tmp(*args): return [fn(*args) for fn in f2] f = tmp # detect multidimensional functions try: fx = f(*x0) multidimensional = isinstance(fx, (list, tuple, ctx.matrix)) except TypeError: fx = f(x0[0]) multidimensional = False if 'multidimensional' in kwargs: multidimensional = kwargs['multidimensional'] if multidimensional: # only one multidimensional solver available at the moment solver = MDNewton if not 'norm' in kwargs: norm = lambda x: ctx.norm(x, 'inf') kwargs['norm'] = norm else: norm = kwargs['norm'] else: norm = abs # happily return starting point if it's a root if norm(fx) == 0: if multidimensional: return ctx.matrix(x0) else: return x0[0] # use solver iterations = solver(ctx, f, x0, **kwargs) if 'maxsteps' in kwargs: maxsteps = kwargs['maxsteps'] else: maxsteps = iterations.maxsteps i = 0 for x, error in iterations: if verbose: print_('x: ', x) print_('error:', error) i += 1 if error < tol * max(1, norm(x)) or i >= maxsteps: break if not isinstance(x, (list, tuple, ctx.matrix)): xl = [x] else: xl = x if verify and norm(f(*xl))**2 > tol: # TODO: better condition? raise ValueError('Could not find root within given tolerance. ' '(%s > %s)\n' 'Try another starting point or tweak arguments.' % (norm(f(*xl))**2, tol)) return x finally: ctx.prec = prec def multiplicity(ctx, f, root, tol=None, maxsteps=10, **kwargs): """ Return the multiplicity of a given root of f. Internally, numerical derivatives are used. This might be inefficient for higher order derviatives. Due to this, ``multiplicity`` cancels after evaluating 10 derivatives by default. You can be specify the n-th derivative using the dnf keyword. >>> from mpmath import * >>> multiplicity(lambda x: sin(x) - 1, pi/2) 2 """ if tol is None: tol = ctx.eps ** 0.8 kwargs['d0f'] = f for i in xrange(maxsteps): dfstr = 'd' + str(i) + 'f' if dfstr in kwargs: df = kwargs[dfstr] else: df = lambda x: ctx.diff(f, x, i) if not abs(df(root)) < tol: break return i def steffensen(f): """ linear convergent function -> quadratic convergent function Steffensen's method for quadratic convergence of a linear converging sequence. Don not use it for higher rates of convergence. It may even work for divergent sequences. Definition: F(x) = (x*f(f(x)) - f(x)**2) / (f(f(x)) - 2*f(x) + x) Example ....... You can use Steffensen's method to accelerate a fixpoint iteration of linear (or less) convergence. x* is a fixpoint of the iteration x_{k+1} = phi(x_k) if x* = phi(x*). For phi(x) = x**2 there are two fixpoints: 0 and 1. Let's try Steffensen's method: >>> f = lambda x: x**2 >>> from mpmath.calculus.optimization import steffensen >>> F = steffensen(f) >>> for x in [0.5, 0.9, 2.0]: ... fx = Fx = x ... for i in xrange(9): ... try: ... fx = f(fx) ... except OverflowError: ... pass ... try: ... Fx = F(Fx) ... except ZeroDivisionError: ... pass ... print('%20g %20g' % (fx, Fx)) 0.25 -0.5 0.0625 0.1 0.00390625 -0.0011236 1.52588e-05 1.41691e-09 2.32831e-10 -2.84465e-27 5.42101e-20 2.30189e-80 2.93874e-39 -1.2197e-239 8.63617e-78 0 7.45834e-155 0 0.81 1.02676 0.6561 1.00134 0.430467 1 0.185302 1 0.0343368 1 0.00117902 1 1.39008e-06 1 1.93233e-12 1 3.73392e-24 1 4 1.6 16 1.2962 256 1.10194 65536 1.01659 4.29497e+09 1.00053 1.84467e+19 1 3.40282e+38 1 1.15792e+77 1 1.34078e+154 1 Unmodified, the iteration converges only towards 0. Modified it converges not only much faster, it converges even to the repelling fixpoint 1. """ def F(x): fx = f(x) ffx = f(fx) return (x*ffx - fx**2) / (ffx - 2*fx + x) return F OptimizationMethods.jacobian = jacobian OptimizationMethods.findroot = findroot OptimizationMethods.multiplicity = multiplicity if __name__ == '__main__': import doctest doctest.testmod() mpmath-1.0.0/mpmath/calculus/polynomials.py000066400000000000000000000172561316273626600210460ustar00rootroot00000000000000from ..libmp.backend import xrange from .calculus import defun #----------------------------------------------------------------------------# # Polynomials # #----------------------------------------------------------------------------# # XXX: extra precision @defun def polyval(ctx, coeffs, x, derivative=False): r""" Given coefficients `[c_n, \ldots, c_2, c_1, c_0]` and a number `x`, :func:`~mpmath.polyval` evaluates the polynomial .. math :: P(x) = c_n x^n + \ldots + c_2 x^2 + c_1 x + c_0. If *derivative=True* is set, :func:`~mpmath.polyval` simultaneously evaluates `P(x)` with the derivative, `P'(x)`, and returns the tuple `(P(x), P'(x))`. >>> from mpmath import * >>> mp.pretty = True >>> polyval([3, 0, 2], 0.5) 2.75 >>> polyval([3, 0, 2], 0.5, derivative=True) (2.75, 3.0) The coefficients and the evaluation point may be any combination of real or complex numbers. """ if not coeffs: return ctx.zero p = ctx.convert(coeffs[0]) q = ctx.zero for c in coeffs[1:]: if derivative: q = p + x*q p = c + x*p if derivative: return p, q else: return p @defun def polyroots(ctx, coeffs, maxsteps=50, cleanup=True, extraprec=10, error=False, roots_init=None): """ Computes all roots (real or complex) of a given polynomial. The roots are returned as a sorted list, where real roots appear first followed by complex conjugate roots as adjacent elements. The polynomial should be given as a list of coefficients, in the format used by :func:`~mpmath.polyval`. The leading coefficient must be nonzero. With *error=True*, :func:`~mpmath.polyroots` returns a tuple *(roots, err)* where *err* is an estimate of the maximum error among the computed roots. **Examples** Finding the three real roots of `x^3 - x^2 - 14x + 24`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nprint(polyroots([1,-1,-14,24]), 4) [-4.0, 2.0, 3.0] Finding the two complex conjugate roots of `4x^2 + 3x + 2`, with an error estimate:: >>> roots, err = polyroots([4,3,2], error=True) >>> for r in roots: ... print(r) ... (-0.375 + 0.59947894041409j) (-0.375 - 0.59947894041409j) >>> >>> err 2.22044604925031e-16 >>> >>> polyval([4,3,2], roots[0]) (2.22044604925031e-16 + 0.0j) >>> polyval([4,3,2], roots[1]) (2.22044604925031e-16 + 0.0j) The following example computes all the 5th roots of unity; that is, the roots of `x^5 - 1`:: >>> mp.dps = 20 >>> for r in polyroots([1, 0, 0, 0, 0, -1]): ... print(r) ... 1.0 (-0.8090169943749474241 + 0.58778525229247312917j) (-0.8090169943749474241 - 0.58778525229247312917j) (0.3090169943749474241 + 0.95105651629515357212j) (0.3090169943749474241 - 0.95105651629515357212j) **Precision and conditioning** The roots are computed to the current working precision accuracy. If this accuracy cannot be achieved in `maxsteps` steps, then a `NoConvergence` exception is raised. The algorithm internally is using the current working precision extended by `extraprec`. If `NoConvergence` was raised, that is caused either by not having enough extra precision to achieve convergence (in which case increasing `extraprec` should fix the problem) or too low `maxsteps` (in which case increasing `maxsteps` should fix the problem), or a combination of both. The user should always do a convergence study with regards to `extraprec` to ensure accurate results. It is possible to get convergence to a wrong answer with too low `extraprec`. Provided there are no repeated roots, :func:`~mpmath.polyroots` can typically compute all roots of an arbitrary polynomial to high precision:: >>> mp.dps = 60 >>> for r in polyroots([1, 0, -10, 0, 1]): ... print r ... -3.14626436994197234232913506571557044551247712918732870123249 -0.317837245195782244725757617296174288373133378433432554879127 0.317837245195782244725757617296174288373133378433432554879127 3.14626436994197234232913506571557044551247712918732870123249 >>> >>> sqrt(3) + sqrt(2) 3.14626436994197234232913506571557044551247712918732870123249 >>> sqrt(3) - sqrt(2) 0.317837245195782244725757617296174288373133378433432554879127 **Algorithm** :func:`~mpmath.polyroots` implements the Durand-Kerner method [1], which uses complex arithmetic to locate all roots simultaneously. The Durand-Kerner method can be viewed as approximately performing simultaneous Newton iteration for all the roots. In particular, the convergence to simple roots is quadratic, just like Newton's method. Although all roots are internally calculated using complex arithmetic, any root found to have an imaginary part smaller than the estimated numerical error is truncated to a real number (small real parts are also chopped). Real roots are placed first in the returned list, sorted by value. The remaining complex roots are sorted by their real parts so that conjugate roots end up next to each other. **References** 1. http://en.wikipedia.org/wiki/Durand-Kerner_method """ if len(coeffs) <= 1: if not coeffs or not coeffs[0]: raise ValueError("Input to polyroots must not be the zero polynomial") # Constant polynomial with no roots return [] orig = ctx.prec tol = +ctx.eps with ctx.extraprec(extraprec): deg = len(coeffs) - 1 # Must be monic lead = ctx.convert(coeffs[0]) if lead == 1: coeffs = [ctx.convert(c) for c in coeffs] else: coeffs = [c/lead for c in coeffs] f = lambda x: ctx.polyval(coeffs, x) if roots_init is None: roots = [ctx.mpc((0.4+0.9j)**n) for n in xrange(deg)] else: roots = [None]*deg; deg_init = min(deg, len(roots_init)) roots[:deg_init] = list(roots_init[:deg_init]) roots[deg_init:] = [ctx.mpc((0.4+0.9j)**n) for n in xrange(deg_init,deg)] err = [ctx.one for n in xrange(deg)] # Durand-Kerner iteration until convergence for step in xrange(maxsteps): if abs(max(err)) < tol: break for i in xrange(deg): p = roots[i] x = f(p) for j in range(deg): if i != j: try: x /= (p-roots[j]) except ZeroDivisionError: continue roots[i] = p - x err[i] = abs(x) if abs(max(err)) >= tol: raise ctx.NoConvergence("Didn't converge in maxsteps=%d steps." \ % maxsteps) # Remove small real or imaginary parts if cleanup: for i in xrange(deg): if abs(roots[i]) < tol: roots[i] = ctx.zero elif abs(ctx._im(roots[i])) < tol: roots[i] = roots[i].real elif abs(ctx._re(roots[i])) < tol: roots[i] = roots[i].imag * 1j roots.sort(key=lambda x: (abs(ctx._im(x)), ctx._re(x))) if error: err = max(err) err = max(err, ctx.ldexp(1, -orig+1)) return [+r for r in roots], +err else: return [+r for r in roots] mpmath-1.0.0/mpmath/calculus/quadrature.py000066400000000000000000001126761316273626600206570ustar00rootroot00000000000000import math from ..libmp.backend import xrange class QuadratureRule(object): """ Quadrature rules are implemented using this class, in order to simplify the code and provide a common infrastructure for tasks such as error estimation and node caching. You can implement a custom quadrature rule by subclassing :class:`QuadratureRule` and implementing the appropriate methods. The subclass can then be used by :func:`~mpmath.quad` by passing it as the *method* argument. :class:`QuadratureRule` instances are supposed to be singletons. :class:`QuadratureRule` therefore implements instance caching in :func:`~mpmath.__new__`. """ def __init__(self, ctx): self.ctx = ctx self.standard_cache = {} self.transformed_cache = {} self.interval_count = {} def clear(self): """ Delete cached node data. """ self.standard_cache = {} self.transformed_cache = {} self.interval_count = {} def calc_nodes(self, degree, prec, verbose=False): r""" Compute nodes for the standard interval `[-1, 1]`. Subclasses should probably implement only this method, and use :func:`~mpmath.get_nodes` method to retrieve the nodes. """ raise NotImplementedError def get_nodes(self, a, b, degree, prec, verbose=False): """ Return nodes for given interval, degree and precision. The nodes are retrieved from a cache if already computed; otherwise they are computed by calling :func:`~mpmath.calc_nodes` and are then cached. Subclasses should probably not implement this method, but just implement :func:`~mpmath.calc_nodes` for the actual node computation. """ key = (a, b, degree, prec) if key in self.transformed_cache: return self.transformed_cache[key] orig = self.ctx.prec try: self.ctx.prec = prec+20 # Get nodes on standard interval if (degree, prec) in self.standard_cache: nodes = self.standard_cache[degree, prec] else: nodes = self.calc_nodes(degree, prec, verbose) self.standard_cache[degree, prec] = nodes # Transform to general interval nodes = self.transform_nodes(nodes, a, b, verbose) if key in self.interval_count: self.transformed_cache[key] = nodes else: self.interval_count[key] = True finally: self.ctx.prec = orig return nodes def transform_nodes(self, nodes, a, b, verbose=False): r""" Rescale standardized nodes (for `[-1, 1]`) to a general interval `[a, b]`. For a finite interval, a simple linear change of variables is used. Otherwise, the following transformations are used: .. math :: \lbrack a, \infty \rbrack : t = \frac{1}{x} + (a-1) \lbrack -\infty, b \rbrack : t = (b+1) - \frac{1}{x} \lbrack -\infty, \infty \rbrack : t = \frac{x}{\sqrt{1-x^2}} """ ctx = self.ctx a = ctx.convert(a) b = ctx.convert(b) one = ctx.one if (a, b) == (-one, one): return nodes half = ctx.mpf(0.5) new_nodes = [] if ctx.isinf(a) or ctx.isinf(b): if (a, b) == (ctx.ninf, ctx.inf): p05 = -half for x, w in nodes: x2 = x*x px1 = one-x2 spx1 = px1**p05 x = x*spx1 w *= spx1/px1 new_nodes.append((x, w)) elif a == ctx.ninf: b1 = b+1 for x, w in nodes: u = 2/(x+one) x = b1-u w *= half*u**2 new_nodes.append((x, w)) elif b == ctx.inf: a1 = a-1 for x, w in nodes: u = 2/(x+one) x = a1+u w *= half*u**2 new_nodes.append((x, w)) elif a == ctx.inf or b == ctx.ninf: return [(x,-w) for (x,w) in self.transform_nodes(nodes, b, a, verbose)] else: raise NotImplementedError else: # Simple linear change of variables C = (b-a)/2 D = (b+a)/2 for x, w in nodes: new_nodes.append((D+C*x, C*w)) return new_nodes def guess_degree(self, prec): """ Given a desired precision `p` in bits, estimate the degree `m` of the quadrature required to accomplish full accuracy for typical integrals. By default, :func:`~mpmath.quad` will perform up to `m` iterations. The value of `m` should be a slight overestimate, so that "slightly bad" integrals can be dealt with automatically using a few extra iterations. On the other hand, it should not be too big, so :func:`~mpmath.quad` can quit within a reasonable amount of time when it is given an "unsolvable" integral. The default formula used by :func:`~mpmath.guess_degree` is tuned for both :class:`TanhSinh` and :class:`GaussLegendre`. The output is roughly as follows: +---------+---------+ | `p` | `m` | +=========+=========+ | 50 | 6 | +---------+---------+ | 100 | 7 | +---------+---------+ | 500 | 10 | +---------+---------+ | 3000 | 12 | +---------+---------+ This formula is based purely on a limited amount of experimentation and will sometimes be wrong. """ # Expected degree # XXX: use mag g = int(4 + max(0, self.ctx.log(prec/30.0, 2))) # Reasonable "worst case" g += 2 return g def estimate_error(self, results, prec, epsilon): r""" Given results from integrations `[I_1, I_2, \ldots, I_k]` done with a quadrature of rule of degree `1, 2, \ldots, k`, estimate the error of `I_k`. For `k = 2`, we estimate `|I_{\infty}-I_2|` as `|I_2-I_1|`. For `k > 2`, we extrapolate `|I_{\infty}-I_k| \approx |I_{k+1}-I_k|` from `|I_k-I_{k-1}|` and `|I_k-I_{k-2}|` under the assumption that each degree increment roughly doubles the accuracy of the quadrature rule (this is true for both :class:`TanhSinh` and :class:`GaussLegendre`). The extrapolation formula is given by Borwein, Bailey & Girgensohn. Although not very conservative, this method seems to be very robust in practice. """ if len(results) == 2: return abs(results[0]-results[1]) try: if results[-1] == results[-2] == results[-3]: return self.ctx.zero D1 = self.ctx.log(abs(results[-1]-results[-2]), 10) D2 = self.ctx.log(abs(results[-1]-results[-3]), 10) except ValueError: return epsilon D3 = -prec D4 = min(0, max(D1**2/D2, 2*D1, D3)) return self.ctx.mpf(10) ** int(D4) def summation(self, f, points, prec, epsilon, max_degree, verbose=False): """ Main integration function. Computes the 1D integral over the interval specified by *points*. For each subinterval, performs quadrature of degree from 1 up to *max_degree* until :func:`~mpmath.estimate_error` signals convergence. :func:`~mpmath.summation` transforms each subintegration to the standard interval and then calls :func:`~mpmath.sum_next`. """ ctx = self.ctx I = err = ctx.zero for i in xrange(len(points)-1): a, b = points[i], points[i+1] if a == b: continue # XXX: we could use a single variable transformation, # but this is not good in practice. We get better accuracy # by having 0 as an endpoint. if (a, b) == (ctx.ninf, ctx.inf): _f = f f = lambda x: _f(-x) + _f(x) a, b = (ctx.zero, ctx.inf) results = [] for degree in xrange(1, max_degree+1): nodes = self.get_nodes(a, b, degree, prec, verbose) if verbose: print("Integrating from %s to %s (degree %s of %s)" % \ (ctx.nstr(a), ctx.nstr(b), degree, max_degree)) results.append(self.sum_next(f, nodes, degree, prec, results, verbose)) if degree > 1: err = self.estimate_error(results, prec, epsilon) if err <= epsilon: break if verbose: print("Estimated error:", ctx.nstr(err)) I += results[-1] if err > epsilon: if verbose: print("Failed to reach full accuracy. Estimated error:", ctx.nstr(err)) return I, err def sum_next(self, f, nodes, degree, prec, previous, verbose=False): r""" Evaluates the step sum `\sum w_k f(x_k)` where the *nodes* list contains the `(w_k, x_k)` pairs. :func:`~mpmath.summation` will supply the list *results* of values computed by :func:`~mpmath.sum_next` at previous degrees, in case the quadrature rule is able to reuse them. """ return self.ctx.fdot((w, f(x)) for (x,w) in nodes) class TanhSinh(QuadratureRule): r""" This class implements "tanh-sinh" or "doubly exponential" quadrature. This quadrature rule is based on the Euler-Maclaurin integral formula. By performing a change of variables involving nested exponentials / hyperbolic functions (hence the name), the derivatives at the endpoints vanish rapidly. Since the error term in the Euler-Maclaurin formula depends on the derivatives at the endpoints, a simple step sum becomes extremely accurate. In practice, this means that doubling the number of evaluation points roughly doubles the number of accurate digits. Comparison to Gauss-Legendre: * Initial computation of nodes is usually faster * Handles endpoint singularities better * Handles infinite integration intervals better * Is slower for smooth integrands once nodes have been computed The implementation of the tanh-sinh algorithm is based on the description given in Borwein, Bailey & Girgensohn, "Experimentation in Mathematics - Computational Paths to Discovery", A K Peters, 2003, pages 312-313. In the present implementation, a few improvements have been made: * A more efficient scheme is used to compute nodes (exploiting recurrence for the exponential function) * The nodes are computed successively instead of all at once Various documents describing the algorithm are available online, e.g.: * http://crd.lbl.gov/~dhbailey/dhbpapers/dhb-tanh-sinh.pdf * http://users.cs.dal.ca/~jborwein/tanh-sinh.pdf """ def sum_next(self, f, nodes, degree, prec, previous, verbose=False): """ Step sum for tanh-sinh quadrature of degree `m`. We exploit the fact that half of the abscissas at degree `m` are precisely the abscissas from degree `m-1`. Thus reusing the result from the previous level allows a 2x speedup. """ h = self.ctx.mpf(2)**(-degree) # Abscissas overlap, so reusing saves half of the time if previous: S = previous[-1]/(h*2) else: S = self.ctx.zero S += self.ctx.fdot((w,f(x)) for (x,w) in nodes) return h*S def calc_nodes(self, degree, prec, verbose=False): r""" The abscissas and weights for tanh-sinh quadrature of degree `m` are given by .. math:: x_k = \tanh(\pi/2 \sinh(t_k)) w_k = \pi/2 \cosh(t_k) / \cosh(\pi/2 \sinh(t_k))^2 where `t_k = t_0 + hk` for a step length `h \sim 2^{-m}`. The list of nodes is actually infinite, but the weights die off so rapidly that only a few are needed. """ ctx = self.ctx nodes = [] extra = 20 ctx.prec += extra tol = ctx.ldexp(1, -prec-10) pi4 = ctx.pi/4 # For simplicity, we work in steps h = 1/2^n, with the first point # offset so that we can reuse the sum from the previous degree # We define degree 1 to include the "degree 0" steps, including # the point x = 0. (It doesn't work well otherwise; not sure why.) t0 = ctx.ldexp(1, -degree) if degree == 1: #nodes.append((mpf(0), pi4)) #nodes.append((-mpf(0), pi4)) nodes.append((ctx.zero, ctx.pi/2)) h = t0 else: h = t0*2 # Since h is fixed, we can compute the next exponential # by simply multiplying by exp(h) expt0 = ctx.exp(t0) a = pi4 * expt0 b = pi4 / expt0 udelta = ctx.exp(h) urdelta = 1/udelta for k in xrange(0, 20*2**degree+1): # Reference implementation: # t = t0 + k*h # x = tanh(pi/2 * sinh(t)) # w = pi/2 * cosh(t) / cosh(pi/2 * sinh(t))**2 # Fast implementation. Note that c = exp(pi/2 * sinh(t)) c = ctx.exp(a-b) d = 1/c co = (c+d)/2 si = (c-d)/2 x = si / co w = (a+b) / co**2 diff = abs(x-1) if diff <= tol: break nodes.append((x, w)) nodes.append((-x, w)) a *= udelta b *= urdelta if verbose and k % 300 == 150: # Note: the number displayed is rather arbitrary. Should # figure out how to print something that looks more like a # percentage print("Calculating nodes:", ctx.nstr(-ctx.log(diff, 10) / prec)) ctx.prec -= extra return nodes class GaussLegendre(QuadratureRule): """ This class implements Gauss-Legendre quadrature, which is exceptionally efficient for polynomials and polynomial-like (i.e. very smooth) integrands. The abscissas and weights are given by roots and values of Legendre polynomials, which are the orthogonal polynomials on `[-1, 1]` with respect to the unit weight (see :func:`~mpmath.legendre`). In this implementation, we take the "degree" `m` of the quadrature to denote a Gauss-Legendre rule of degree `3 \cdot 2^m` (following Borwein, Bailey & Girgensohn). This way we get quadratic, rather than linear, convergence as the degree is incremented. Comparison to tanh-sinh quadrature: * Is faster for smooth integrands once nodes have been computed * Initial computation of nodes is usually slower * Handles endpoint singularities worse * Handles infinite integration intervals worse """ def calc_nodes(self, degree, prec, verbose=False): """ Calculates the abscissas and weights for Gauss-Legendre quadrature of degree of given degree (actually `3 \cdot 2^m`). """ ctx = self.ctx # It is important that the epsilon is set lower than the # "real" epsilon epsilon = ctx.ldexp(1, -prec-8) # Fairly high precision might be required for accurate # evaluation of the roots orig = ctx.prec ctx.prec = int(prec*1.5) if degree == 1: x = ctx.sqrt(ctx.mpf(3)/5) w = ctx.mpf(5)/9 nodes = [(-x,w),(ctx.zero,ctx.mpf(8)/9),(x,w)] ctx.prec = orig return nodes nodes = [] n = 3*2**(degree-1) upto = n//2 + 1 for j in xrange(1, upto): # Asymptotic formula for the roots r = ctx.mpf(math.cos(math.pi*(j-0.25)/(n+0.5))) # Newton iteration while 1: t1, t2 = 1, 0 # Evaluates the Legendre polynomial using its defining # recurrence relation for j1 in xrange(1,n+1): t3, t2, t1 = t2, t1, ((2*j1-1)*r*t1 - (j1-1)*t2)/j1 t4 = n*(r*t1- t2)/(r**2-1) t5 = r a = t1/t4 r = r - a if abs(a) < epsilon: break x = r w = 2/((1-r**2)*t4**2) if verbose and j % 30 == 15: print("Computing nodes (%i of %i)" % (j, upto)) nodes.append((x, w)) nodes.append((-x, w)) ctx.prec = orig return nodes class QuadratureMethods(object): def __init__(ctx, *args, **kwargs): ctx._gauss_legendre = GaussLegendre(ctx) ctx._tanh_sinh = TanhSinh(ctx) def quad(ctx, f, *points, **kwargs): r""" Computes a single, double or triple integral over a given 1D interval, 2D rectangle, or 3D cuboid. A basic example:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> quad(sin, [0, pi]) 2.0 A basic 2D integral:: >>> f = lambda x, y: cos(x+y/2) >>> quad(f, [-pi/2, pi/2], [0, pi]) 4.0 **Interval format** The integration range for each dimension may be specified using a list or tuple. Arguments are interpreted as follows: ``quad(f, [x1, x2])`` -- calculates `\int_{x_1}^{x_2} f(x) \, dx` ``quad(f, [x1, x2], [y1, y2])`` -- calculates `\int_{x_1}^{x_2} \int_{y_1}^{y_2} f(x,y) \, dy \, dx` ``quad(f, [x1, x2], [y1, y2], [z1, z2])`` -- calculates `\int_{x_1}^{x_2} \int_{y_1}^{y_2} \int_{z_1}^{z_2} f(x,y,z) \, dz \, dy \, dx` Endpoints may be finite or infinite. An interval descriptor may also contain more than two points. In this case, the integration is split into subintervals, between each pair of consecutive points. This is useful for dealing with mid-interval discontinuities, or integrating over large intervals where the function is irregular or oscillates. **Options** :func:`~mpmath.quad` recognizes the following keyword arguments: *method* Chooses integration algorithm (described below). *error* If set to true, :func:`~mpmath.quad` returns `(v, e)` where `v` is the integral and `e` is the estimated error. *maxdegree* Maximum degree of the quadrature rule to try before quitting. *verbose* Print details about progress. **Algorithms** Mpmath presently implements two integration algorithms: tanh-sinh quadrature and Gauss-Legendre quadrature. These can be selected using *method='tanh-sinh'* or *method='gauss-legendre'* or by passing the classes *method=TanhSinh*, *method=GaussLegendre*. The functions :func:`~mpmath.quadts` and :func:`~mpmath.quadgl` are also available as shortcuts. Both algorithms have the property that doubling the number of evaluation points roughly doubles the accuracy, so both are ideal for high precision quadrature (hundreds or thousands of digits). At high precision, computing the nodes and weights for the integration can be expensive (more expensive than computing the function values). To make repeated integrations fast, nodes are automatically cached. The advantages of the tanh-sinh algorithm are that it tends to handle endpoint singularities well, and that the nodes are cheap to compute on the first run. For these reasons, it is used by :func:`~mpmath.quad` as the default algorithm. Gauss-Legendre quadrature often requires fewer function evaluations, and is therefore often faster for repeated use, but the algorithm does not handle endpoint singularities as well and the nodes are more expensive to compute. Gauss-Legendre quadrature can be a better choice if the integrand is smooth and repeated integrations are required (e.g. for multiple integrals). See the documentation for :class:`TanhSinh` and :class:`GaussLegendre` for additional details. **Examples of 1D integrals** Intervals may be infinite or half-infinite. The following two examples evaluate the limits of the inverse tangent function (`\int 1/(1+x^2) = \tan^{-1} x`), and the Gaussian integral `\int_{\infty}^{\infty} \exp(-x^2)\,dx = \sqrt{\pi}`:: >>> mp.dps = 15 >>> quad(lambda x: 2/(x**2+1), [0, inf]) 3.14159265358979 >>> quad(lambda x: exp(-x**2), [-inf, inf])**2 3.14159265358979 Integrals can typically be resolved to high precision. The following computes 50 digits of `\pi` by integrating the area of the half-circle defined by `x^2 + y^2 \le 1`, `-1 \le x \le 1`, `y \ge 0`:: >>> mp.dps = 50 >>> 2*quad(lambda x: sqrt(1-x**2), [-1, 1]) 3.1415926535897932384626433832795028841971693993751 One can just as well compute 1000 digits (output truncated):: >>> mp.dps = 1000 >>> 2*quad(lambda x: sqrt(1-x**2), [-1, 1]) #doctest:+ELLIPSIS 3.141592653589793238462643383279502884...216420198 Complex integrals are supported. The following computes a residue at `z = 0` by integrating counterclockwise along the diamond-shaped path from `1` to `+i` to `-1` to `-i` to `1`:: >>> mp.dps = 15 >>> chop(quad(lambda z: 1/z, [1,j,-1,-j,1])) (0.0 + 6.28318530717959j) **Examples of 2D and 3D integrals** Here are several nice examples of analytically solvable 2D integrals (taken from MathWorld [1]) that can be evaluated to high precision fairly rapidly by :func:`~mpmath.quad`:: >>> mp.dps = 30 >>> f = lambda x, y: (x-1)/((1-x*y)*log(x*y)) >>> quad(f, [0, 1], [0, 1]) 0.577215664901532860606512090082 >>> +euler 0.577215664901532860606512090082 >>> f = lambda x, y: 1/sqrt(1+x**2+y**2) >>> quad(f, [-1, 1], [-1, 1]) 3.17343648530607134219175646705 >>> 4*log(2+sqrt(3))-2*pi/3 3.17343648530607134219175646705 >>> f = lambda x, y: 1/(1-x**2 * y**2) >>> quad(f, [0, 1], [0, 1]) 1.23370055013616982735431137498 >>> pi**2 / 8 1.23370055013616982735431137498 >>> quad(lambda x, y: 1/(1-x*y), [0, 1], [0, 1]) 1.64493406684822643647241516665 >>> pi**2 / 6 1.64493406684822643647241516665 Multiple integrals may be done over infinite ranges:: >>> mp.dps = 15 >>> print(quad(lambda x,y: exp(-x-y), [0, inf], [1, inf])) 0.367879441171442 >>> print(1/e) 0.367879441171442 For nonrectangular areas, one can call :func:`~mpmath.quad` recursively. For example, we can replicate the earlier example of calculating `\pi` by integrating over the unit-circle, and actually use double quadrature to actually measure the area circle:: >>> f = lambda x: quad(lambda y: 1, [-sqrt(1-x**2), sqrt(1-x**2)]) >>> quad(f, [-1, 1]) 3.14159265358979 Here is a simple triple integral:: >>> mp.dps = 15 >>> f = lambda x,y,z: x*y/(1+z) >>> quad(f, [0,1], [0,1], [1,2], method='gauss-legendre') 0.101366277027041 >>> (log(3)-log(2))/4 0.101366277027041 **Singularities** Both tanh-sinh and Gauss-Legendre quadrature are designed to integrate smooth (infinitely differentiable) functions. Neither algorithm copes well with mid-interval singularities (such as mid-interval discontinuities in `f(x)` or `f'(x)`). The best solution is to split the integral into parts:: >>> mp.dps = 15 >>> quad(lambda x: abs(sin(x)), [0, 2*pi]) # Bad 3.99900894176779 >>> quad(lambda x: abs(sin(x)), [0, pi, 2*pi]) # Good 4.0 The tanh-sinh rule often works well for integrands having a singularity at one or both endpoints:: >>> mp.dps = 15 >>> quad(log, [0, 1], method='tanh-sinh') # Good -1.0 >>> quad(log, [0, 1], method='gauss-legendre') # Bad -0.999932197413801 However, the result may still be inaccurate for some functions:: >>> quad(lambda x: 1/sqrt(x), [0, 1], method='tanh-sinh') 1.99999999946942 This problem is not due to the quadrature rule per se, but to numerical amplification of errors in the nodes. The problem can be circumvented by temporarily increasing the precision:: >>> mp.dps = 30 >>> a = quad(lambda x: 1/sqrt(x), [0, 1], method='tanh-sinh') >>> mp.dps = 15 >>> +a 2.0 **Highly variable functions** For functions that are smooth (in the sense of being infinitely differentiable) but contain sharp mid-interval peaks or many "bumps", :func:`~mpmath.quad` may fail to provide full accuracy. For example, with default settings, :func:`~mpmath.quad` is able to integrate `\sin(x)` accurately over an interval of length 100 but not over length 1000:: >>> quad(sin, [0, 100]); 1-cos(100) # Good 0.137681127712316 0.137681127712316 >>> quad(sin, [0, 1000]); 1-cos(1000) # Bad -37.8587612408485 0.437620923709297 One solution is to break the integration into 10 intervals of length 100:: >>> quad(sin, linspace(0, 1000, 10)) # Good 0.437620923709297 Another is to increase the degree of the quadrature:: >>> quad(sin, [0, 1000], maxdegree=10) # Also good 0.437620923709297 Whether splitting the interval or increasing the degree is more efficient differs from case to case. Another example is the function `1/(1+x^2)`, which has a sharp peak centered around `x = 0`:: >>> f = lambda x: 1/(1+x**2) >>> quad(f, [-100, 100]) # Bad 3.64804647105268 >>> quad(f, [-100, 100], maxdegree=10) # Good 3.12159332021646 >>> quad(f, [-100, 0, 100]) # Also good 3.12159332021646 **References** 1. http://mathworld.wolfram.com/DoubleIntegral.html """ rule = kwargs.get('method', 'tanh-sinh') if type(rule) is str: if rule == 'tanh-sinh': rule = ctx._tanh_sinh elif rule == 'gauss-legendre': rule = ctx._gauss_legendre else: raise ValueError("unknown quadrature rule: %s" % rule) else: rule = rule(ctx) verbose = kwargs.get('verbose') dim = len(points) orig = prec = ctx.prec epsilon = ctx.eps/8 m = kwargs.get('maxdegree') or rule.guess_degree(prec) points = [ctx._as_points(p) for p in points] try: ctx.prec += 20 if dim == 1: v, err = rule.summation(f, points[0], prec, epsilon, m, verbose) elif dim == 2: v, err = rule.summation(lambda x: \ rule.summation(lambda y: f(x,y), \ points[1], prec, epsilon, m)[0], points[0], prec, epsilon, m, verbose) elif dim == 3: v, err = rule.summation(lambda x: \ rule.summation(lambda y: \ rule.summation(lambda z: f(x,y,z), \ points[2], prec, epsilon, m)[0], points[1], prec, epsilon, m)[0], points[0], prec, epsilon, m, verbose) else: raise NotImplementedError("quadrature must have dim 1, 2 or 3") finally: ctx.prec = orig if kwargs.get("error"): return +v, err return +v def quadts(ctx, *args, **kwargs): """ Performs tanh-sinh quadrature. The call quadts(func, *points, ...) is simply a shortcut for: quad(func, *points, ..., method=TanhSinh) For example, a single integral and a double integral: quadts(lambda x: exp(cos(x)), [0, 1]) quadts(lambda x, y: exp(cos(x+y)), [0, 1], [0, 1]) See the documentation for quad for information about how points arguments and keyword arguments are parsed. See documentation for TanhSinh for algorithmic information about tanh-sinh quadrature. """ kwargs['method'] = 'tanh-sinh' return ctx.quad(*args, **kwargs) def quadgl(ctx, *args, **kwargs): """ Performs Gauss-Legendre quadrature. The call quadgl(func, *points, ...) is simply a shortcut for: quad(func, *points, ..., method=GaussLegendre) For example, a single integral and a double integral: quadgl(lambda x: exp(cos(x)), [0, 1]) quadgl(lambda x, y: exp(cos(x+y)), [0, 1], [0, 1]) See the documentation for quad for information about how points arguments and keyword arguments are parsed. See documentation for TanhSinh for algorithmic information about tanh-sinh quadrature. """ kwargs['method'] = 'gauss-legendre' return ctx.quad(*args, **kwargs) def quadosc(ctx, f, interval, omega=None, period=None, zeros=None): r""" Calculates .. math :: I = \int_a^b f(x) dx where at least one of `a` and `b` is infinite and where `f(x) = g(x) \cos(\omega x + \phi)` for some slowly decreasing function `g(x)`. With proper input, :func:`~mpmath.quadosc` can also handle oscillatory integrals where the oscillation rate is different from a pure sine or cosine wave. In the standard case when `|a| < \infty, b = \infty`, :func:`~mpmath.quadosc` works by evaluating the infinite series .. math :: I = \int_a^{x_1} f(x) dx + \sum_{k=1}^{\infty} \int_{x_k}^{x_{k+1}} f(x) dx where `x_k` are consecutive zeros (alternatively some other periodic reference point) of `f(x)`. Accordingly, :func:`~mpmath.quadosc` requires information about the zeros of `f(x)`. For a periodic function, you can specify the zeros by either providing the angular frequency `\omega` (*omega*) or the *period* `2 \pi/\omega`. In general, you can specify the `n`-th zero by providing the *zeros* arguments. Below is an example of each:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> f = lambda x: sin(3*x)/(x**2+1) >>> quadosc(f, [0,inf], omega=3) 0.37833007080198 >>> quadosc(f, [0,inf], period=2*pi/3) 0.37833007080198 >>> quadosc(f, [0,inf], zeros=lambda n: pi*n/3) 0.37833007080198 >>> (ei(3)*exp(-3)-exp(3)*ei(-3))/2 # Computed by Mathematica 0.37833007080198 Note that *zeros* was specified to multiply `n` by the *half-period*, not the full period. In theory, it does not matter whether each partial integral is done over a half period or a full period. However, if done over half-periods, the infinite series passed to :func:`~mpmath.nsum` becomes an *alternating series* and this typically makes the extrapolation much more efficient. Here is an example of an integration over the entire real line, and a half-infinite integration starting at `-\infty`:: >>> quadosc(lambda x: cos(x)/(1+x**2), [-inf, inf], omega=1) 1.15572734979092 >>> pi/e 1.15572734979092 >>> quadosc(lambda x: cos(x)/x**2, [-inf, -1], period=2*pi) -0.0844109505595739 >>> cos(1)+si(1)-pi/2 -0.0844109505595738 Of course, the integrand may contain a complex exponential just as well as a real sine or cosine:: >>> quadosc(lambda x: exp(3*j*x)/(1+x**2), [-inf,inf], omega=3) (0.156410688228254 + 0.0j) >>> pi/e**3 0.156410688228254 >>> quadosc(lambda x: exp(3*j*x)/(2+x+x**2), [-inf,inf], omega=3) (0.00317486988463794 - 0.0447701735209082j) >>> 2*pi/sqrt(7)/exp(3*(j+sqrt(7))/2) (0.00317486988463794 - 0.0447701735209082j) **Non-periodic functions** If `f(x) = g(x) h(x)` for some function `h(x)` that is not strictly periodic, *omega* or *period* might not work, and it might be necessary to use *zeros*. A notable exception can be made for Bessel functions which, though not periodic, are "asymptotically periodic" in a sufficiently strong sense that the sum extrapolation will work out:: >>> quadosc(j0, [0, inf], period=2*pi) 1.0 >>> quadosc(j1, [0, inf], period=2*pi) 1.0 More properly, one should provide the exact Bessel function zeros:: >>> j0zero = lambda n: findroot(j0, pi*(n-0.25)) >>> quadosc(j0, [0, inf], zeros=j0zero) 1.0 For an example where *zeros* becomes necessary, consider the complete Fresnel integrals .. math :: \int_0^{\infty} \cos x^2\,dx = \int_0^{\infty} \sin x^2\,dx = \sqrt{\frac{\pi}{8}}. Although the integrands do not decrease in magnitude as `x \to \infty`, the integrals are convergent since the oscillation rate increases (causing consecutive periods to asymptotically cancel out). These integrals are virtually impossible to calculate to any kind of accuracy using standard quadrature rules. However, if one provides the correct asymptotic distribution of zeros (`x_n \sim \sqrt{n}`), :func:`~mpmath.quadosc` works:: >>> mp.dps = 30 >>> f = lambda x: cos(x**2) >>> quadosc(f, [0,inf], zeros=lambda n:sqrt(pi*n)) 0.626657068657750125603941321203 >>> f = lambda x: sin(x**2) >>> quadosc(f, [0,inf], zeros=lambda n:sqrt(pi*n)) 0.626657068657750125603941321203 >>> sqrt(pi/8) 0.626657068657750125603941321203 (Interestingly, these integrals can still be evaluated if one places some other constant than `\pi` in the square root sign.) In general, if `f(x) \sim g(x) \cos(h(x))`, the zeros follow the inverse-function distribution `h^{-1}(x)`:: >>> mp.dps = 15 >>> f = lambda x: sin(exp(x)) >>> quadosc(f, [1,inf], zeros=lambda n: log(n)) -0.25024394235267 >>> pi/2-si(e) -0.250243942352671 **Non-alternating functions** If the integrand oscillates around a positive value, without alternating signs, the extrapolation might fail. A simple trick that sometimes works is to multiply or divide the frequency by 2:: >>> f = lambda x: 1/x**2+sin(x)/x**4 >>> quadosc(f, [1,inf], omega=1) # Bad 1.28642190869861 >>> quadosc(f, [1,inf], omega=0.5) # Perfect 1.28652953559617 >>> 1+(cos(1)+ci(1)+sin(1))/6 1.28652953559617 **Fast decay** :func:`~mpmath.quadosc` is primarily useful for slowly decaying integrands. If the integrand decreases exponentially or faster, :func:`~mpmath.quad` will likely handle it without trouble (and generally be much faster than :func:`~mpmath.quadosc`):: >>> quadosc(lambda x: cos(x)/exp(x), [0, inf], omega=1) 0.5 >>> quad(lambda x: cos(x)/exp(x), [0, inf]) 0.5 """ a, b = ctx._as_points(interval) a = ctx.convert(a) b = ctx.convert(b) if [omega, period, zeros].count(None) != 2: raise ValueError( \ "must specify exactly one of omega, period, zeros") if a == ctx.ninf and b == ctx.inf: s1 = ctx.quadosc(f, [a, 0], omega=omega, zeros=zeros, period=period) s2 = ctx.quadosc(f, [0, b], omega=omega, zeros=zeros, period=period) return s1 + s2 if a == ctx.ninf: if zeros: return ctx.quadosc(lambda x:f(-x), [-b,-a], lambda n: zeros(-n)) else: return ctx.quadosc(lambda x:f(-x), [-b,-a], omega=omega, period=period) if b != ctx.inf: raise ValueError("quadosc requires an infinite integration interval") if not zeros: if omega: period = 2*ctx.pi/omega zeros = lambda n: n*period/2 #for n in range(1,10): # p = zeros(n) # if p > a: # break #if n >= 9: # raise ValueError("zeros do not appear to be correctly indexed") n = 1 s = ctx.quadgl(f, [a, zeros(n)]) def term(k): return ctx.quadgl(f, [zeros(k), zeros(k+1)]) s += ctx.nsum(term, [n, ctx.inf]) return s if __name__ == '__main__': import doctest doctest.testmod() mpmath-1.0.0/mpmath/conftest.py000066400000000000000000000002401316273626600164730ustar00rootroot00000000000000import os # This makes py.test put mpath directory into the sys.path, so that we can # import mpmath" from tests nicely rootdir = os.path.abspath(os.getcwd()) mpmath-1.0.0/mpmath/ctx_base.py000066400000000000000000000371611316273626600164520ustar00rootroot00000000000000from operator import gt, lt from .libmp.backend import xrange from .functions.functions import SpecialFunctions from .functions.rszeta import RSCache from .calculus.quadrature import QuadratureMethods from .calculus.inverselaplace import LaplaceTransformInversionMethods from .calculus.calculus import CalculusMethods from .calculus.optimization import OptimizationMethods from .calculus.odes import ODEMethods from .matrices.matrices import MatrixMethods from .matrices.calculus import MatrixCalculusMethods from .matrices.linalg import LinearAlgebraMethods from .matrices.eigen import Eigen from .identification import IdentificationMethods from .visualization import VisualizationMethods from . import libmp class Context(object): pass class StandardBaseContext(Context, SpecialFunctions, RSCache, QuadratureMethods, LaplaceTransformInversionMethods, CalculusMethods, MatrixMethods, MatrixCalculusMethods, LinearAlgebraMethods, Eigen, IdentificationMethods, OptimizationMethods, ODEMethods, VisualizationMethods): NoConvergence = libmp.NoConvergence ComplexResult = libmp.ComplexResult def __init__(ctx): ctx._aliases = {} # Call those that need preinitialization (e.g. for wrappers) SpecialFunctions.__init__(ctx) RSCache.__init__(ctx) QuadratureMethods.__init__(ctx) LaplaceTransformInversionMethods.__init__(ctx) CalculusMethods.__init__(ctx) MatrixMethods.__init__(ctx) def _init_aliases(ctx): for alias, value in ctx._aliases.items(): try: setattr(ctx, alias, getattr(ctx, value)) except AttributeError: pass _fixed_precision = False # XXX verbose = False def warn(ctx, msg): print("Warning:", msg) def bad_domain(ctx, msg): raise ValueError(msg) def _re(ctx, x): if hasattr(x, "real"): return x.real return x def _im(ctx, x): if hasattr(x, "imag"): return x.imag return ctx.zero def _as_points(ctx, x): return x def fneg(ctx, x, **kwargs): return -ctx.convert(x) def fadd(ctx, x, y, **kwargs): return ctx.convert(x)+ctx.convert(y) def fsub(ctx, x, y, **kwargs): return ctx.convert(x)-ctx.convert(y) def fmul(ctx, x, y, **kwargs): return ctx.convert(x)*ctx.convert(y) def fdiv(ctx, x, y, **kwargs): return ctx.convert(x)/ctx.convert(y) def fsum(ctx, args, absolute=False, squared=False): if absolute: if squared: return sum((abs(x)**2 for x in args), ctx.zero) return sum((abs(x) for x in args), ctx.zero) if squared: return sum((x**2 for x in args), ctx.zero) return sum(args, ctx.zero) def fdot(ctx, xs, ys=None, conjugate=False): if ys is not None: xs = zip(xs, ys) if conjugate: cf = ctx.conj return sum((x*cf(y) for (x,y) in xs), ctx.zero) else: return sum((x*y for (x,y) in xs), ctx.zero) def fprod(ctx, args): prod = ctx.one for arg in args: prod *= arg return prod def nprint(ctx, x, n=6, **kwargs): """ Equivalent to ``print(nstr(x, n))``. """ print(ctx.nstr(x, n, **kwargs)) def chop(ctx, x, tol=None): """ Chops off small real or imaginary parts, or converts numbers close to zero to exact zeros. The input can be a single number or an iterable:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> chop(5+1e-10j, tol=1e-9) mpf('5.0') >>> nprint(chop([1.0, 1e-20, 3+1e-18j, -4, 2])) [1.0, 0.0, 3.0, -4.0, 2.0] The tolerance defaults to ``100*eps``. """ if tol is None: tol = 100*ctx.eps try: x = ctx.convert(x) absx = abs(x) if abs(x) < tol: return ctx.zero if ctx._is_complex_type(x): #part_tol = min(tol, absx*tol) part_tol = max(tol, absx*tol) if abs(x.imag) < part_tol: return x.real if abs(x.real) < part_tol: return ctx.mpc(0, x.imag) except TypeError: if isinstance(x, ctx.matrix): return x.apply(lambda a: ctx.chop(a, tol)) if hasattr(x, "__iter__"): return [ctx.chop(a, tol) for a in x] return x def almosteq(ctx, s, t, rel_eps=None, abs_eps=None): r""" Determine whether the difference between `s` and `t` is smaller than a given epsilon, either relatively or absolutely. Both a maximum relative difference and a maximum difference ('epsilons') may be specified. The absolute difference is defined as `|s-t|` and the relative difference is defined as `|s-t|/\max(|s|, |t|)`. If only one epsilon is given, both are set to the same value. If none is given, both epsilons are set to `2^{-p+m}` where `p` is the current working precision and `m` is a small integer. The default setting typically allows :func:`~mpmath.almosteq` to be used to check for mathematical equality in the presence of small rounding errors. **Examples** >>> from mpmath import * >>> mp.dps = 15 >>> almosteq(3.141592653589793, 3.141592653589790) True >>> almosteq(3.141592653589793, 3.141592653589700) False >>> almosteq(3.141592653589793, 3.141592653589700, 1e-10) True >>> almosteq(1e-20, 2e-20) True >>> almosteq(1e-20, 2e-20, rel_eps=0, abs_eps=0) False """ t = ctx.convert(t) if abs_eps is None and rel_eps is None: rel_eps = abs_eps = ctx.ldexp(1, -ctx.prec+4) if abs_eps is None: abs_eps = rel_eps elif rel_eps is None: rel_eps = abs_eps diff = abs(s-t) if diff <= abs_eps: return True abss = abs(s) abst = abs(t) if abss < abst: err = diff/abst else: err = diff/abss return err <= rel_eps def arange(ctx, *args): r""" This is a generalized version of Python's :func:`~mpmath.range` function that accepts fractional endpoints and step sizes and returns a list of ``mpf`` instances. Like :func:`~mpmath.range`, :func:`~mpmath.arange` can be called with 1, 2 or 3 arguments: ``arange(b)`` `[0, 1, 2, \ldots, x]` ``arange(a, b)`` `[a, a+1, a+2, \ldots, x]` ``arange(a, b, h)`` `[a, a+h, a+h, \ldots, x]` where `b-1 \le x < b` (in the third case, `b-h \le x < b`). Like Python's :func:`~mpmath.range`, the endpoint is not included. To produce ranges where the endpoint is included, :func:`~mpmath.linspace` is more convenient. **Examples** >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> arange(4) [mpf('0.0'), mpf('1.0'), mpf('2.0'), mpf('3.0')] >>> arange(1, 2, 0.25) [mpf('1.0'), mpf('1.25'), mpf('1.5'), mpf('1.75')] >>> arange(1, -1, -0.75) [mpf('1.0'), mpf('0.25'), mpf('-0.5')] """ if not len(args) <= 3: raise TypeError('arange expected at most 3 arguments, got %i' % len(args)) if not len(args) >= 1: raise TypeError('arange expected at least 1 argument, got %i' % len(args)) # set default a = 0 dt = 1 # interpret arguments if len(args) == 1: b = args[0] elif len(args) >= 2: a = args[0] b = args[1] if len(args) == 3: dt = args[2] a, b, dt = ctx.mpf(a), ctx.mpf(b), ctx.mpf(dt) assert a + dt != a, 'dt is too small and would cause an infinite loop' # adapt code for sign of dt if a > b: if dt > 0: return [] op = gt else: if dt < 0: return [] op = lt # create list result = [] i = 0 t = a while 1: t = a + dt*i i += 1 if op(t, b): result.append(t) else: break return result def linspace(ctx, *args, **kwargs): """ ``linspace(a, b, n)`` returns a list of `n` evenly spaced samples from `a` to `b`. The syntax ``linspace(mpi(a,b), n)`` is also valid. This function is often more convenient than :func:`~mpmath.arange` for partitioning an interval into subintervals, since the endpoint is included:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> linspace(1, 4, 4) [mpf('1.0'), mpf('2.0'), mpf('3.0'), mpf('4.0')] You may also provide the keyword argument ``endpoint=False``:: >>> linspace(1, 4, 4, endpoint=False) [mpf('1.0'), mpf('1.75'), mpf('2.5'), mpf('3.25')] """ if len(args) == 3: a = ctx.mpf(args[0]) b = ctx.mpf(args[1]) n = int(args[2]) elif len(args) == 2: assert hasattr(args[0], '_mpi_') a = args[0].a b = args[0].b n = int(args[1]) else: raise TypeError('linspace expected 2 or 3 arguments, got %i' \ % len(args)) if n < 1: raise ValueError('n must be greater than 0') if not 'endpoint' in kwargs or kwargs['endpoint']: if n == 1: return [ctx.mpf(a)] step = (b - a) / ctx.mpf(n - 1) y = [i*step + a for i in xrange(n)] y[-1] = b else: step = (b - a) / ctx.mpf(n) y = [i*step + a for i in xrange(n)] return y def cos_sin(ctx, z, **kwargs): return ctx.cos(z, **kwargs), ctx.sin(z, **kwargs) def cospi_sinpi(ctx, z, **kwargs): return ctx.cospi(z, **kwargs), ctx.sinpi(z, **kwargs) def _default_hyper_maxprec(ctx, p): return int(1000 * p**0.25 + 4*p) _gcd = staticmethod(libmp.gcd) list_primes = staticmethod(libmp.list_primes) isprime = staticmethod(libmp.isprime) bernfrac = staticmethod(libmp.bernfrac) moebius = staticmethod(libmp.moebius) _ifac = staticmethod(libmp.ifac) _eulernum = staticmethod(libmp.eulernum) _stirling1 = staticmethod(libmp.stirling1) _stirling2 = staticmethod(libmp.stirling2) def sum_accurately(ctx, terms, check_step=1): prec = ctx.prec try: extraprec = 10 while 1: ctx.prec = prec + extraprec + 5 max_mag = ctx.ninf s = ctx.zero k = 0 for term in terms(): s += term if (not k % check_step) and term: term_mag = ctx.mag(term) max_mag = max(max_mag, term_mag) sum_mag = ctx.mag(s) if sum_mag - term_mag > ctx.prec: break k += 1 cancellation = max_mag - sum_mag if cancellation != cancellation: break if cancellation < extraprec or ctx._fixed_precision: break extraprec += min(ctx.prec, cancellation) return s finally: ctx.prec = prec def mul_accurately(ctx, factors, check_step=1): prec = ctx.prec try: extraprec = 10 while 1: ctx.prec = prec + extraprec + 5 max_mag = ctx.ninf one = ctx.one s = one k = 0 for factor in factors(): s *= factor term = factor - one if (not k % check_step): term_mag = ctx.mag(term) max_mag = max(max_mag, term_mag) sum_mag = ctx.mag(s-one) #if sum_mag - term_mag > ctx.prec: # break if -term_mag > ctx.prec: break k += 1 cancellation = max_mag - sum_mag if cancellation != cancellation: break if cancellation < extraprec or ctx._fixed_precision: break extraprec += min(ctx.prec, cancellation) return s finally: ctx.prec = prec def power(ctx, x, y): r"""Converts `x` and `y` to mpmath numbers and evaluates `x^y = \exp(y \log(x))`:: >>> from mpmath import * >>> mp.dps = 30; mp.pretty = True >>> power(2, 0.5) 1.41421356237309504880168872421 This shows the leading few digits of a large Mersenne prime (performing the exact calculation ``2**43112609-1`` and displaying the result in Python would be very slow):: >>> power(2, 43112609)-1 3.16470269330255923143453723949e+12978188 """ return ctx.convert(x) ** ctx.convert(y) def _zeta_int(ctx, n): return ctx.zeta(n) def maxcalls(ctx, f, N): """ Return a wrapped copy of *f* that raises ``NoConvergence`` when *f* has been called more than *N* times:: >>> from mpmath import * >>> mp.dps = 15 >>> f = maxcalls(sin, 10) >>> print(sum(f(n) for n in range(10))) 1.95520948210738 >>> f(10) # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... NoConvergence: maxcalls: function evaluated 10 times """ counter = [0] def f_maxcalls_wrapped(*args, **kwargs): counter[0] += 1 if counter[0] > N: raise ctx.NoConvergence("maxcalls: function evaluated %i times" % N) return f(*args, **kwargs) return f_maxcalls_wrapped def memoize(ctx, f): """ Return a wrapped copy of *f* that caches computed values, i.e. a memoized copy of *f*. Values are only reused if the cached precision is equal to or higher than the working precision:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> f = memoize(maxcalls(sin, 1)) >>> f(2) 0.909297426825682 >>> f(2) 0.909297426825682 >>> mp.dps = 25 >>> f(2) # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... NoConvergence: maxcalls: function evaluated 1 times """ f_cache = {} def f_cached(*args, **kwargs): if kwargs: key = args, tuple(kwargs.items()) else: key = args prec = ctx.prec if key in f_cache: cprec, cvalue = f_cache[key] if cprec >= prec: return +cvalue value = f(*args, **kwargs) f_cache[key] = (prec, value) return value f_cached.__name__ = f.__name__ f_cached.__doc__ = f.__doc__ return f_cached mpmath-1.0.0/mpmath/ctx_fp.py000066400000000000000000000146541316273626600161470ustar00rootroot00000000000000from .ctx_base import StandardBaseContext import math import cmath from . import math2 from . import function_docs from .libmp import mpf_bernoulli, to_float, int_types from . import libmp class FPContext(StandardBaseContext): """ Context for fast low-precision arithmetic (53-bit precision, giving at most about 15-digit accuracy), using Python's builtin float and complex. """ def __init__(ctx): StandardBaseContext.__init__(ctx) # Override SpecialFunctions implementation ctx.loggamma = math2.loggamma ctx._bernoulli_cache = {} ctx.pretty = False ctx._init_aliases() _mpq = lambda cls, x: float(x[0])/x[1] NoConvergence = libmp.NoConvergence def _get_prec(ctx): return 53 def _set_prec(ctx, p): return def _get_dps(ctx): return 15 def _set_dps(ctx, p): return _fixed_precision = True prec = property(_get_prec, _set_prec) dps = property(_get_dps, _set_dps) zero = 0.0 one = 1.0 eps = math2.EPS inf = math2.INF ninf = math2.NINF nan = math2.NAN j = 1j # Called by SpecialFunctions.__init__() @classmethod def _wrap_specfun(cls, name, f, wrap): if wrap: def f_wrapped(ctx, *args, **kwargs): convert = ctx.convert args = [convert(a) for a in args] return f(ctx, *args, **kwargs) else: f_wrapped = f f_wrapped.__doc__ = function_docs.__dict__.get(name, f.__doc__) setattr(cls, name, f_wrapped) def bernoulli(ctx, n): cache = ctx._bernoulli_cache if n in cache: return cache[n] cache[n] = to_float(mpf_bernoulli(n, 53, 'n'), strict=True) return cache[n] pi = math2.pi e = math2.e euler = math2.euler sqrt2 = 1.4142135623730950488 sqrt5 = 2.2360679774997896964 phi = 1.6180339887498948482 ln2 = 0.69314718055994530942 ln10 = 2.302585092994045684 euler = 0.57721566490153286061 catalan = 0.91596559417721901505 khinchin = 2.6854520010653064453 apery = 1.2020569031595942854 glaisher = 1.2824271291006226369 absmin = absmax = abs def is_special(ctx, x): return x - x != 0.0 def isnan(ctx, x): return x != x def isinf(ctx, x): return abs(x) == math2.INF def isnormal(ctx, x): if x: return x - x == 0.0 return False def isnpint(ctx, x): if type(x) is complex: if x.imag: return False x = x.real return x <= 0.0 and round(x) == x mpf = float mpc = complex def convert(ctx, x): try: return float(x) except: return complex(x) power = staticmethod(math2.pow) sqrt = staticmethod(math2.sqrt) exp = staticmethod(math2.exp) ln = log = staticmethod(math2.log) cos = staticmethod(math2.cos) sin = staticmethod(math2.sin) tan = staticmethod(math2.tan) cos_sin = staticmethod(math2.cos_sin) acos = staticmethod(math2.acos) asin = staticmethod(math2.asin) atan = staticmethod(math2.atan) cosh = staticmethod(math2.cosh) sinh = staticmethod(math2.sinh) tanh = staticmethod(math2.tanh) gamma = staticmethod(math2.gamma) rgamma = staticmethod(math2.rgamma) fac = factorial = staticmethod(math2.factorial) floor = staticmethod(math2.floor) ceil = staticmethod(math2.ceil) cospi = staticmethod(math2.cospi) sinpi = staticmethod(math2.sinpi) cbrt = staticmethod(math2.cbrt) _nthroot = staticmethod(math2.nthroot) _ei = staticmethod(math2.ei) _e1 = staticmethod(math2.e1) _zeta = _zeta_int = staticmethod(math2.zeta) # XXX: math2 def arg(ctx, z): z = complex(z) return math.atan2(z.imag, z.real) def expj(ctx, x): return ctx.exp(ctx.j*x) def expjpi(ctx, x): return ctx.exp(ctx.j*ctx.pi*x) ldexp = math.ldexp frexp = math.frexp def mag(ctx, z): if z: return ctx.frexp(abs(z))[1] return ctx.ninf def isint(ctx, z): if hasattr(z, "imag"): # float/int don't have .real/.imag in py2.5 if z.imag: return False z = z.real try: return z == int(z) except: return False def nint_distance(ctx, z): if hasattr(z, "imag"): # float/int don't have .real/.imag in py2.5 n = round(z.real) else: n = round(z) if n == z: return n, ctx.ninf return n, ctx.mag(abs(z-n)) def _convert_param(ctx, z): if type(z) is tuple: p, q = z return ctx.mpf(p) / q, 'R' if hasattr(z, "imag"): # float/int don't have .real/.imag in py2.5 intz = int(z.real) else: intz = int(z) if z == intz: return intz, 'Z' return z, 'R' def _is_real_type(ctx, z): return isinstance(z, float) or isinstance(z, int_types) def _is_complex_type(ctx, z): return isinstance(z, complex) def hypsum(ctx, p, q, types, coeffs, z, maxterms=6000, **kwargs): coeffs = list(coeffs) num = range(p) den = range(p,p+q) tol = ctx.eps s = t = 1.0 k = 0 while 1: for i in num: t *= (coeffs[i]+k) for i in den: t /= (coeffs[i]+k) k += 1; t /= k; t *= z; s += t if abs(t) < tol: return s if k > maxterms: raise ctx.NoConvergence def atan2(ctx, x, y): return math.atan2(x, y) def psi(ctx, m, z): m = int(m) if m == 0: return ctx.digamma(z) return (-1)**(m+1) * ctx.fac(m) * ctx.zeta(m+1, z) digamma = staticmethod(math2.digamma) def harmonic(ctx, x): x = ctx.convert(x) if x == 0 or x == 1: return x return ctx.digamma(x+1) + ctx.euler nstr = str def to_fixed(ctx, x, prec): return int(math.ldexp(x, prec)) def rand(ctx): import random return random.random() _erf = staticmethod(math2.erf) _erfc = staticmethod(math2.erfc) def sum_accurately(ctx, terms, check_step=1): s = ctx.zero k = 0 for term in terms(): s += term if (not k % check_step) and term: if abs(term) <= 1e-18*abs(s): break k += 1 return s mpmath-1.0.0/mpmath/ctx_iv.py000066400000000000000000000406361316273626600161570ustar00rootroot00000000000000import operator from . import libmp from .libmp.backend import basestring from .libmp import ( int_types, MPZ_ONE, prec_to_dps, dps_to_prec, repr_dps, round_floor, round_ceiling, fzero, finf, fninf, fnan, mpf_le, mpf_neg, from_int, from_float, from_str, from_rational, mpi_mid, mpi_delta, mpi_str, mpi_abs, mpi_pos, mpi_neg, mpi_add, mpi_sub, mpi_mul, mpi_div, mpi_pow_int, mpi_pow, mpi_from_str, mpci_pos, mpci_neg, mpci_add, mpci_sub, mpci_mul, mpci_div, mpci_pow, mpci_abs, mpci_pow, mpci_exp, mpci_log, ComplexResult, mpf_hash, mpc_hash) mpi_zero = (fzero, fzero) from .ctx_base import StandardBaseContext new = object.__new__ def convert_mpf_(x, prec, rounding): if hasattr(x, "_mpf_"): return x._mpf_ if isinstance(x, int_types): return from_int(x, prec, rounding) if isinstance(x, float): return from_float(x, prec, rounding) if isinstance(x, basestring): return from_str(x, prec, rounding) class ivmpf(object): """ Interval arithmetic class. Precision is controlled by iv.prec. """ def __new__(cls, x=0): return cls.ctx.convert(x) def __int__(self): a, b = self._mpi_ if a == b: return int(libmp.to_int(a)) raise ValueError def __hash__(self): a, b = self._mpi_ if a == b: return mpf_hash(a) else: return hash(self._mpi_) @property def real(self): return self @property def imag(self): return self.ctx.zero def conjugate(self): return self @property def a(self): a, b = self._mpi_ return self.ctx.make_mpf((a, a)) @property def b(self): a, b = self._mpi_ return self.ctx.make_mpf((b, b)) @property def mid(self): ctx = self.ctx v = mpi_mid(self._mpi_, ctx.prec) return ctx.make_mpf((v, v)) @property def delta(self): ctx = self.ctx v = mpi_delta(self._mpi_, ctx.prec) return ctx.make_mpf((v,v)) @property def _mpci_(self): return self._mpi_, mpi_zero def _compare(*args): raise TypeError("no ordering relation is defined for intervals") __gt__ = _compare __le__ = _compare __gt__ = _compare __ge__ = _compare def __contains__(self, t): t = self.ctx.mpf(t) return (self.a <= t.a) and (t.b <= self.b) def __str__(self): return mpi_str(self._mpi_, self.ctx.prec) def __repr__(self): if self.ctx.pretty: return str(self) a, b = self._mpi_ n = repr_dps(self.ctx.prec) a = libmp.to_str(a, n) b = libmp.to_str(b, n) return "mpi(%r, %r)" % (a, b) def _compare(s, t, cmpfun): if not hasattr(t, "_mpi_"): try: t = s.ctx.convert(t) except: return NotImplemented return cmpfun(s._mpi_, t._mpi_) def __eq__(s, t): return s._compare(t, libmp.mpi_eq) def __ne__(s, t): return s._compare(t, libmp.mpi_ne) def __lt__(s, t): return s._compare(t, libmp.mpi_lt) def __le__(s, t): return s._compare(t, libmp.mpi_le) def __gt__(s, t): return s._compare(t, libmp.mpi_gt) def __ge__(s, t): return s._compare(t, libmp.mpi_ge) def __abs__(self): return self.ctx.make_mpf(mpi_abs(self._mpi_, self.ctx.prec)) def __pos__(self): return self.ctx.make_mpf(mpi_pos(self._mpi_, self.ctx.prec)) def __neg__(self): return self.ctx.make_mpf(mpi_neg(self._mpi_, self.ctx.prec)) def ae(s, t, rel_eps=None, abs_eps=None): return s.ctx.almosteq(s, t, rel_eps, abs_eps) class ivmpc(object): def __new__(cls, re=0, im=0): re = cls.ctx.convert(re) im = cls.ctx.convert(im) y = new(cls) y._mpci_ = re._mpi_, im._mpi_ return y def __hash__(self): (a, b), (c,d) = self._mpci_ if a == b and c == d: return mpc_hash((a, c)) else: return hash(self._mpci_) def __repr__(s): if s.ctx.pretty: return str(s) return "iv.mpc(%s, %s)" % (repr(s.real), repr(s.imag)) def __str__(s): return "(%s + %s*j)" % (str(s.real), str(s.imag)) @property def a(self): (a, b), (c,d) = self._mpci_ return self.ctx.make_mpf((a, a)) @property def b(self): (a, b), (c,d) = self._mpci_ return self.ctx.make_mpf((b, b)) @property def c(self): (a, b), (c,d) = self._mpci_ return self.ctx.make_mpf((c, c)) @property def d(self): (a, b), (c,d) = self._mpci_ return self.ctx.make_mpf((d, d)) @property def real(s): return s.ctx.make_mpf(s._mpci_[0]) @property def imag(s): return s.ctx.make_mpf(s._mpci_[1]) def conjugate(s): a, b = s._mpci_ return s.ctx.make_mpc((a, mpf_neg(b))) def overlap(s, t): t = s.ctx.convert(t) real_overlap = (s.a <= t.a <= s.b) or (s.a <= t.b <= s.b) or (t.a <= s.a <= t.b) or (t.a <= s.b <= t.b) imag_overlap = (s.c <= t.c <= s.d) or (s.c <= t.d <= s.d) or (t.c <= s.c <= t.d) or (t.c <= s.d <= t.d) return real_overlap and imag_overlap def __contains__(s, t): t = s.ctx.convert(t) return t.real in s.real and t.imag in s.imag def _compare(s, t, ne=False): if not isinstance(t, s.ctx._types): try: t = s.ctx.convert(t) except: return NotImplemented if hasattr(t, '_mpi_'): tval = t._mpi_, mpi_zero elif hasattr(t, '_mpci_'): tval = t._mpci_ if ne: return s._mpci_ != tval return s._mpci_ == tval def __eq__(s, t): return s._compare(t) def __ne__(s, t): return s._compare(t, True) def __lt__(s, t): raise TypeError("complex intervals cannot be ordered") __le__ = __gt__ = __ge__ = __lt__ def __neg__(s): return s.ctx.make_mpc(mpci_neg(s._mpci_, s.ctx.prec)) def __pos__(s): return s.ctx.make_mpc(mpci_pos(s._mpci_, s.ctx.prec)) def __abs__(s): return s.ctx.make_mpf(mpci_abs(s._mpci_, s.ctx.prec)) def ae(s, t, rel_eps=None, abs_eps=None): return s.ctx.almosteq(s, t, rel_eps, abs_eps) def _binary_op(f_real, f_complex): def g_complex(ctx, sval, tval): return ctx.make_mpc(f_complex(sval, tval, ctx.prec)) def g_real(ctx, sval, tval): try: return ctx.make_mpf(f_real(sval, tval, ctx.prec)) except ComplexResult: sval = (sval, mpi_zero) tval = (tval, mpi_zero) return g_complex(ctx, sval, tval) def lop_real(s, t): ctx = s.ctx if not isinstance(t, ctx._types): t = ctx.convert(t) if hasattr(t, "_mpi_"): return g_real(ctx, s._mpi_, t._mpi_) if hasattr(t, "_mpci_"): return g_complex(ctx, (s._mpi_, mpi_zero), t._mpci_) return NotImplemented def rop_real(s, t): ctx = s.ctx if not isinstance(t, ctx._types): t = ctx.convert(t) if hasattr(t, "_mpi_"): return g_real(ctx, t._mpi_, s._mpi_) if hasattr(t, "_mpci_"): return g_complex(ctx, t._mpci_, (s._mpi_, mpi_zero)) return NotImplemented def lop_complex(s, t): ctx = s.ctx if not isinstance(t, s.ctx._types): try: t = s.ctx.convert(t) except (ValueError, TypeError): return NotImplemented return g_complex(ctx, s._mpci_, t._mpci_) def rop_complex(s, t): ctx = s.ctx if not isinstance(t, s.ctx._types): t = s.ctx.convert(t) return g_complex(ctx, t._mpci_, s._mpci_) return lop_real, rop_real, lop_complex, rop_complex ivmpf.__add__, ivmpf.__radd__, ivmpc.__add__, ivmpc.__radd__ = _binary_op(mpi_add, mpci_add) ivmpf.__sub__, ivmpf.__rsub__, ivmpc.__sub__, ivmpc.__rsub__ = _binary_op(mpi_sub, mpci_sub) ivmpf.__mul__, ivmpf.__rmul__, ivmpc.__mul__, ivmpc.__rmul__ = _binary_op(mpi_mul, mpci_mul) ivmpf.__div__, ivmpf.__rdiv__, ivmpc.__div__, ivmpc.__rdiv__ = _binary_op(mpi_div, mpci_div) ivmpf.__pow__, ivmpf.__rpow__, ivmpc.__pow__, ivmpc.__rpow__ = _binary_op(mpi_pow, mpci_pow) ivmpf.__truediv__ = ivmpf.__div__; ivmpf.__rtruediv__ = ivmpf.__rdiv__ ivmpc.__truediv__ = ivmpc.__div__; ivmpc.__rtruediv__ = ivmpc.__rdiv__ class ivmpf_constant(ivmpf): def __new__(cls, f): self = new(cls) self._f = f return self def _get_mpi_(self): prec = self.ctx._prec[0] a = self._f(prec, round_floor) b = self._f(prec, round_ceiling) return a, b _mpi_ = property(_get_mpi_) class MPIntervalContext(StandardBaseContext): def __init__(ctx): ctx.mpf = type('ivmpf', (ivmpf,), {}) ctx.mpc = type('ivmpc', (ivmpc,), {}) ctx._types = (ctx.mpf, ctx.mpc) ctx._constant = type('ivmpf_constant', (ivmpf_constant,), {}) ctx._prec = [53] ctx._set_prec(53) ctx._constant._ctxdata = ctx.mpf._ctxdata = ctx.mpc._ctxdata = [ctx.mpf, new, ctx._prec] ctx._constant.ctx = ctx.mpf.ctx = ctx.mpc.ctx = ctx ctx.pretty = False StandardBaseContext.__init__(ctx) ctx._init_builtins() def _mpi(ctx, a, b=None): if b is None: return ctx.mpf(a) return ctx.mpf((a,b)) def _init_builtins(ctx): ctx.one = ctx.mpf(1) ctx.zero = ctx.mpf(0) ctx.inf = ctx.mpf('inf') ctx.ninf = -ctx.inf ctx.nan = ctx.mpf('nan') ctx.j = ctx.mpc(0,1) ctx.exp = ctx._wrap_mpi_function(libmp.mpi_exp, libmp.mpci_exp) ctx.sqrt = ctx._wrap_mpi_function(libmp.mpi_sqrt) ctx.ln = ctx._wrap_mpi_function(libmp.mpi_log, libmp.mpci_log) ctx.cos = ctx._wrap_mpi_function(libmp.mpi_cos, libmp.mpci_cos) ctx.sin = ctx._wrap_mpi_function(libmp.mpi_sin, libmp.mpci_sin) ctx.tan = ctx._wrap_mpi_function(libmp.mpi_tan) ctx.gamma = ctx._wrap_mpi_function(libmp.mpi_gamma, libmp.mpci_gamma) ctx.loggamma = ctx._wrap_mpi_function(libmp.mpi_loggamma, libmp.mpci_loggamma) ctx.rgamma = ctx._wrap_mpi_function(libmp.mpi_rgamma, libmp.mpci_rgamma) ctx.factorial = ctx._wrap_mpi_function(libmp.mpi_factorial, libmp.mpci_factorial) ctx.fac = ctx.factorial ctx.eps = ctx._constant(lambda prec, rnd: (0, MPZ_ONE, 1-prec, 1)) ctx.pi = ctx._constant(libmp.mpf_pi) ctx.e = ctx._constant(libmp.mpf_e) ctx.ln2 = ctx._constant(libmp.mpf_ln2) ctx.ln10 = ctx._constant(libmp.mpf_ln10) ctx.phi = ctx._constant(libmp.mpf_phi) ctx.euler = ctx._constant(libmp.mpf_euler) ctx.catalan = ctx._constant(libmp.mpf_catalan) ctx.glaisher = ctx._constant(libmp.mpf_glaisher) ctx.khinchin = ctx._constant(libmp.mpf_khinchin) ctx.twinprime = ctx._constant(libmp.mpf_twinprime) def _wrap_mpi_function(ctx, f_real, f_complex=None): def g(x, **kwargs): if kwargs: prec = kwargs.get('prec', ctx._prec[0]) else: prec = ctx._prec[0] x = ctx.convert(x) if hasattr(x, "_mpi_"): return ctx.make_mpf(f_real(x._mpi_, prec)) if hasattr(x, "_mpci_"): return ctx.make_mpc(f_complex(x._mpci_, prec)) raise ValueError return g @classmethod def _wrap_specfun(cls, name, f, wrap): if wrap: def f_wrapped(ctx, *args, **kwargs): convert = ctx.convert args = [convert(a) for a in args] prec = ctx.prec try: ctx.prec += 10 retval = f(ctx, *args, **kwargs) finally: ctx.prec = prec return +retval else: f_wrapped = f setattr(cls, name, f_wrapped) def _set_prec(ctx, n): ctx._prec[0] = max(1, int(n)) ctx._dps = prec_to_dps(n) def _set_dps(ctx, n): ctx._prec[0] = dps_to_prec(n) ctx._dps = max(1, int(n)) prec = property(lambda ctx: ctx._prec[0], _set_prec) dps = property(lambda ctx: ctx._dps, _set_dps) def make_mpf(ctx, v): a = new(ctx.mpf) a._mpi_ = v return a def make_mpc(ctx, v): a = new(ctx.mpc) a._mpci_ = v return a def _mpq(ctx, pq): p, q = pq a = libmp.from_rational(p, q, ctx.prec, round_floor) b = libmp.from_rational(p, q, ctx.prec, round_ceiling) return ctx.make_mpf((a, b)) def convert(ctx, x): if isinstance(x, (ctx.mpf, ctx.mpc)): return x if isinstance(x, ctx._constant): return +x if isinstance(x, complex) or hasattr(x, "_mpc_"): re = ctx.convert(x.real) im = ctx.convert(x.imag) return ctx.mpc(re,im) if isinstance(x, basestring): v = mpi_from_str(x, ctx.prec) return ctx.make_mpf(v) if hasattr(x, "_mpi_"): a, b = x._mpi_ else: try: a, b = x except (TypeError, ValueError): a = b = x if hasattr(a, "_mpi_"): a = a._mpi_[0] else: a = convert_mpf_(a, ctx.prec, round_floor) if hasattr(b, "_mpi_"): b = b._mpi_[1] else: b = convert_mpf_(b, ctx.prec, round_ceiling) if a == fnan or b == fnan: a = fninf b = finf assert mpf_le(a, b), "endpoints must be properly ordered" return ctx.make_mpf((a, b)) def nstr(ctx, x, n=5, **kwargs): x = ctx.convert(x) if hasattr(x, "_mpi_"): return libmp.mpi_to_str(x._mpi_, n, **kwargs) if hasattr(x, "_mpci_"): re = libmp.mpi_to_str(x._mpci_[0], n, **kwargs) im = libmp.mpi_to_str(x._mpci_[1], n, **kwargs) return "(%s + %s*j)" % (re, im) def mag(ctx, x): x = ctx.convert(x) if isinstance(x, ctx.mpc): return max(ctx.mag(x.real), ctx.mag(x.imag)) + 1 a, b = libmp.mpi_abs(x._mpi_) sign, man, exp, bc = b if man: return exp+bc if b == fzero: return ctx.ninf if b == fnan: return ctx.nan return ctx.inf def isnan(ctx, x): return False def isinf(ctx, x): return x == ctx.inf def isint(ctx, x): x = ctx.convert(x) a, b = x._mpi_ if a == b: sign, man, exp, bc = a if man: return exp >= 0 return a == fzero return None def ldexp(ctx, x, n): a, b = ctx.convert(x)._mpi_ a = libmp.mpf_shift(a, n) b = libmp.mpf_shift(b, n) return ctx.make_mpf((a,b)) def absmin(ctx, x): return abs(ctx.convert(x)).a def absmax(ctx, x): return abs(ctx.convert(x)).b def atan2(ctx, y, x): y = ctx.convert(y)._mpi_ x = ctx.convert(x)._mpi_ return ctx.make_mpf(libmp.mpi_atan2(y,x,ctx.prec)) def _convert_param(ctx, x): if isinstance(x, libmp.int_types): return x, 'Z' if isinstance(x, tuple): p, q = x return (ctx.mpf(p) / ctx.mpf(q), 'R') x = ctx.convert(x) if isinstance(x, ctx.mpf): return x, 'R' if isinstance(x, ctx.mpc): return x, 'C' raise ValueError def _is_real_type(ctx, z): return isinstance(z, ctx.mpf) or isinstance(z, int_types) def _is_complex_type(ctx, z): return isinstance(z, ctx.mpc) def hypsum(ctx, p, q, types, coeffs, z, maxterms=6000, **kwargs): coeffs = list(coeffs) num = range(p) den = range(p,p+q) #tol = ctx.eps s = t = ctx.one k = 0 while 1: for i in num: t *= (coeffs[i]+k) for i in den: t /= (coeffs[i]+k) k += 1; t /= k; t *= z; s += t if t == 0: return s #if abs(t) < tol: # return s if k > maxterms: raise ctx.NoConvergence # Register with "numbers" ABC # We do not subclass, hence we do not use the @abstractmethod checks. While # this is less invasive it may turn out that we do not actually support # parts of the expected interfaces. See # http://docs.python.org/2/library/numbers.html for list of abstract # methods. try: import numbers numbers.Complex.register(ivmpc) numbers.Real.register(ivmpf) except ImportError: pass mpmath-1.0.0/mpmath/ctx_mp.py000066400000000000000000001410071316273626600161470ustar00rootroot00000000000000""" This module defines the mpf, mpc classes, and standard functions for operating with them. """ __docformat__ = 'plaintext' import re from .ctx_base import StandardBaseContext from .libmp.backend import basestring, BACKEND from . import libmp from .libmp import (MPZ, MPZ_ZERO, MPZ_ONE, int_types, repr_dps, round_floor, round_ceiling, dps_to_prec, round_nearest, prec_to_dps, ComplexResult, to_pickable, from_pickable, normalize, from_int, from_float, from_str, to_int, to_float, to_str, from_rational, from_man_exp, fone, fzero, finf, fninf, fnan, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_mul_int, mpf_div, mpf_rdiv_int, mpf_pow_int, mpf_mod, mpf_eq, mpf_cmp, mpf_lt, mpf_gt, mpf_le, mpf_ge, mpf_hash, mpf_rand, mpf_sum, bitcount, to_fixed, mpc_to_str, mpc_to_complex, mpc_hash, mpc_pos, mpc_is_nonzero, mpc_neg, mpc_conjugate, mpc_abs, mpc_add, mpc_add_mpf, mpc_sub, mpc_sub_mpf, mpc_mul, mpc_mul_mpf, mpc_mul_int, mpc_div, mpc_div_mpf, mpc_pow, mpc_pow_mpf, mpc_pow_int, mpc_mpf_div, mpf_pow, mpf_pi, mpf_degree, mpf_e, mpf_phi, mpf_ln2, mpf_ln10, mpf_euler, mpf_catalan, mpf_apery, mpf_khinchin, mpf_glaisher, mpf_twinprime, mpf_mertens, int_types) from . import function_docs from . import rational new = object.__new__ get_complex = re.compile(r'^\(?(?P[\+\-]?\d*\.?\d*(e[\+\-]?\d+)?)??' r'(?P[\+\-]?\d*\.?\d*(e[\+\-]?\d+)?j)?\)?$') if BACKEND == 'sage': from sage.libs.mpmath.ext_main import Context as BaseMPContext # pickle hack import sage.libs.mpmath.ext_main as _mpf_module else: from .ctx_mp_python import PythonMPContext as BaseMPContext from . import ctx_mp_python as _mpf_module from .ctx_mp_python import _mpf, _mpc, mpnumeric class MPContext(BaseMPContext, StandardBaseContext): """ Context for multiprecision arithmetic with a global precision. """ def __init__(ctx): BaseMPContext.__init__(ctx) ctx.trap_complex = False ctx.pretty = False ctx.types = [ctx.mpf, ctx.mpc, ctx.constant] ctx._mpq = rational.mpq ctx.default() StandardBaseContext.__init__(ctx) ctx.mpq = rational.mpq ctx.init_builtins() ctx.hyp_summators = {} ctx._init_aliases() # XXX: automate try: ctx.bernoulli.im_func.func_doc = function_docs.bernoulli ctx.primepi.im_func.func_doc = function_docs.primepi ctx.psi.im_func.func_doc = function_docs.psi ctx.atan2.im_func.func_doc = function_docs.atan2 except AttributeError: # python 3 ctx.bernoulli.__func__.func_doc = function_docs.bernoulli ctx.primepi.__func__.func_doc = function_docs.primepi ctx.psi.__func__.func_doc = function_docs.psi ctx.atan2.__func__.func_doc = function_docs.atan2 ctx.digamma.func_doc = function_docs.digamma ctx.cospi.func_doc = function_docs.cospi ctx.sinpi.func_doc = function_docs.sinpi def init_builtins(ctx): mpf = ctx.mpf mpc = ctx.mpc # Exact constants ctx.one = ctx.make_mpf(fone) ctx.zero = ctx.make_mpf(fzero) ctx.j = ctx.make_mpc((fzero,fone)) ctx.inf = ctx.make_mpf(finf) ctx.ninf = ctx.make_mpf(fninf) ctx.nan = ctx.make_mpf(fnan) eps = ctx.constant(lambda prec, rnd: (0, MPZ_ONE, 1-prec, 1), "epsilon of working precision", "eps") ctx.eps = eps # Approximate constants ctx.pi = ctx.constant(mpf_pi, "pi", "pi") ctx.ln2 = ctx.constant(mpf_ln2, "ln(2)", "ln2") ctx.ln10 = ctx.constant(mpf_ln10, "ln(10)", "ln10") ctx.phi = ctx.constant(mpf_phi, "Golden ratio phi", "phi") ctx.e = ctx.constant(mpf_e, "e = exp(1)", "e") ctx.euler = ctx.constant(mpf_euler, "Euler's constant", "euler") ctx.catalan = ctx.constant(mpf_catalan, "Catalan's constant", "catalan") ctx.khinchin = ctx.constant(mpf_khinchin, "Khinchin's constant", "khinchin") ctx.glaisher = ctx.constant(mpf_glaisher, "Glaisher's constant", "glaisher") ctx.apery = ctx.constant(mpf_apery, "Apery's constant", "apery") ctx.degree = ctx.constant(mpf_degree, "1 deg = pi / 180", "degree") ctx.twinprime = ctx.constant(mpf_twinprime, "Twin prime constant", "twinprime") ctx.mertens = ctx.constant(mpf_mertens, "Mertens' constant", "mertens") # Standard functions ctx.sqrt = ctx._wrap_libmp_function(libmp.mpf_sqrt, libmp.mpc_sqrt) ctx.cbrt = ctx._wrap_libmp_function(libmp.mpf_cbrt, libmp.mpc_cbrt) ctx.ln = ctx._wrap_libmp_function(libmp.mpf_log, libmp.mpc_log) ctx.atan = ctx._wrap_libmp_function(libmp.mpf_atan, libmp.mpc_atan) ctx.exp = ctx._wrap_libmp_function(libmp.mpf_exp, libmp.mpc_exp) ctx.expj = ctx._wrap_libmp_function(libmp.mpf_expj, libmp.mpc_expj) ctx.expjpi = ctx._wrap_libmp_function(libmp.mpf_expjpi, libmp.mpc_expjpi) ctx.sin = ctx._wrap_libmp_function(libmp.mpf_sin, libmp.mpc_sin) ctx.cos = ctx._wrap_libmp_function(libmp.mpf_cos, libmp.mpc_cos) ctx.tan = ctx._wrap_libmp_function(libmp.mpf_tan, libmp.mpc_tan) ctx.sinh = ctx._wrap_libmp_function(libmp.mpf_sinh, libmp.mpc_sinh) ctx.cosh = ctx._wrap_libmp_function(libmp.mpf_cosh, libmp.mpc_cosh) ctx.tanh = ctx._wrap_libmp_function(libmp.mpf_tanh, libmp.mpc_tanh) ctx.asin = ctx._wrap_libmp_function(libmp.mpf_asin, libmp.mpc_asin) ctx.acos = ctx._wrap_libmp_function(libmp.mpf_acos, libmp.mpc_acos) ctx.atan = ctx._wrap_libmp_function(libmp.mpf_atan, libmp.mpc_atan) ctx.asinh = ctx._wrap_libmp_function(libmp.mpf_asinh, libmp.mpc_asinh) ctx.acosh = ctx._wrap_libmp_function(libmp.mpf_acosh, libmp.mpc_acosh) ctx.atanh = ctx._wrap_libmp_function(libmp.mpf_atanh, libmp.mpc_atanh) ctx.sinpi = ctx._wrap_libmp_function(libmp.mpf_sin_pi, libmp.mpc_sin_pi) ctx.cospi = ctx._wrap_libmp_function(libmp.mpf_cos_pi, libmp.mpc_cos_pi) ctx.floor = ctx._wrap_libmp_function(libmp.mpf_floor, libmp.mpc_floor) ctx.ceil = ctx._wrap_libmp_function(libmp.mpf_ceil, libmp.mpc_ceil) ctx.nint = ctx._wrap_libmp_function(libmp.mpf_nint, libmp.mpc_nint) ctx.frac = ctx._wrap_libmp_function(libmp.mpf_frac, libmp.mpc_frac) ctx.fib = ctx.fibonacci = ctx._wrap_libmp_function(libmp.mpf_fibonacci, libmp.mpc_fibonacci) ctx.gamma = ctx._wrap_libmp_function(libmp.mpf_gamma, libmp.mpc_gamma) ctx.rgamma = ctx._wrap_libmp_function(libmp.mpf_rgamma, libmp.mpc_rgamma) ctx.loggamma = ctx._wrap_libmp_function(libmp.mpf_loggamma, libmp.mpc_loggamma) ctx.fac = ctx.factorial = ctx._wrap_libmp_function(libmp.mpf_factorial, libmp.mpc_factorial) ctx.gamma_old = ctx._wrap_libmp_function(libmp.mpf_gamma_old, libmp.mpc_gamma_old) ctx.fac_old = ctx.factorial_old = ctx._wrap_libmp_function(libmp.mpf_factorial_old, libmp.mpc_factorial_old) ctx.digamma = ctx._wrap_libmp_function(libmp.mpf_psi0, libmp.mpc_psi0) ctx.harmonic = ctx._wrap_libmp_function(libmp.mpf_harmonic, libmp.mpc_harmonic) ctx.ei = ctx._wrap_libmp_function(libmp.mpf_ei, libmp.mpc_ei) ctx.e1 = ctx._wrap_libmp_function(libmp.mpf_e1, libmp.mpc_e1) ctx._ci = ctx._wrap_libmp_function(libmp.mpf_ci, libmp.mpc_ci) ctx._si = ctx._wrap_libmp_function(libmp.mpf_si, libmp.mpc_si) ctx.ellipk = ctx._wrap_libmp_function(libmp.mpf_ellipk, libmp.mpc_ellipk) ctx._ellipe = ctx._wrap_libmp_function(libmp.mpf_ellipe, libmp.mpc_ellipe) ctx.agm1 = ctx._wrap_libmp_function(libmp.mpf_agm1, libmp.mpc_agm1) ctx._erf = ctx._wrap_libmp_function(libmp.mpf_erf, None) ctx._erfc = ctx._wrap_libmp_function(libmp.mpf_erfc, None) ctx._zeta = ctx._wrap_libmp_function(libmp.mpf_zeta, libmp.mpc_zeta) ctx._altzeta = ctx._wrap_libmp_function(libmp.mpf_altzeta, libmp.mpc_altzeta) # Faster versions ctx.sqrt = getattr(ctx, "_sage_sqrt", ctx.sqrt) ctx.exp = getattr(ctx, "_sage_exp", ctx.exp) ctx.ln = getattr(ctx, "_sage_ln", ctx.ln) ctx.cos = getattr(ctx, "_sage_cos", ctx.cos) ctx.sin = getattr(ctx, "_sage_sin", ctx.sin) def to_fixed(ctx, x, prec): return x.to_fixed(prec) def hypot(ctx, x, y): r""" Computes the Euclidean norm of the vector `(x, y)`, equal to `\sqrt{x^2 + y^2}`. Both `x` and `y` must be real.""" x = ctx.convert(x) y = ctx.convert(y) return ctx.make_mpf(libmp.mpf_hypot(x._mpf_, y._mpf_, *ctx._prec_rounding)) def _gamma_upper_int(ctx, n, z): n = int(ctx._re(n)) if n == 0: return ctx.e1(z) if not hasattr(z, '_mpf_'): raise NotImplementedError prec, rounding = ctx._prec_rounding real, imag = libmp.mpf_expint(n, z._mpf_, prec, rounding, gamma=True) if imag is None: return ctx.make_mpf(real) else: return ctx.make_mpc((real, imag)) def _expint_int(ctx, n, z): n = int(n) if n == 1: return ctx.e1(z) if not hasattr(z, '_mpf_'): raise NotImplementedError prec, rounding = ctx._prec_rounding real, imag = libmp.mpf_expint(n, z._mpf_, prec, rounding) if imag is None: return ctx.make_mpf(real) else: return ctx.make_mpc((real, imag)) def _nthroot(ctx, x, n): if hasattr(x, '_mpf_'): try: return ctx.make_mpf(libmp.mpf_nthroot(x._mpf_, n, *ctx._prec_rounding)) except ComplexResult: if ctx.trap_complex: raise x = (x._mpf_, libmp.fzero) else: x = x._mpc_ return ctx.make_mpc(libmp.mpc_nthroot(x, n, *ctx._prec_rounding)) def _besselj(ctx, n, z): prec, rounding = ctx._prec_rounding if hasattr(z, '_mpf_'): return ctx.make_mpf(libmp.mpf_besseljn(n, z._mpf_, prec, rounding)) elif hasattr(z, '_mpc_'): return ctx.make_mpc(libmp.mpc_besseljn(n, z._mpc_, prec, rounding)) def _agm(ctx, a, b=1): prec, rounding = ctx._prec_rounding if hasattr(a, '_mpf_') and hasattr(b, '_mpf_'): try: v = libmp.mpf_agm(a._mpf_, b._mpf_, prec, rounding) return ctx.make_mpf(v) except ComplexResult: pass if hasattr(a, '_mpf_'): a = (a._mpf_, libmp.fzero) else: a = a._mpc_ if hasattr(b, '_mpf_'): b = (b._mpf_, libmp.fzero) else: b = b._mpc_ return ctx.make_mpc(libmp.mpc_agm(a, b, prec, rounding)) def bernoulli(ctx, n): return ctx.make_mpf(libmp.mpf_bernoulli(int(n), *ctx._prec_rounding)) def _zeta_int(ctx, n): return ctx.make_mpf(libmp.mpf_zeta_int(int(n), *ctx._prec_rounding)) def atan2(ctx, y, x): x = ctx.convert(x) y = ctx.convert(y) return ctx.make_mpf(libmp.mpf_atan2(y._mpf_, x._mpf_, *ctx._prec_rounding)) def psi(ctx, m, z): z = ctx.convert(z) m = int(m) if ctx._is_real_type(z): return ctx.make_mpf(libmp.mpf_psi(m, z._mpf_, *ctx._prec_rounding)) else: return ctx.make_mpc(libmp.mpc_psi(m, z._mpc_, *ctx._prec_rounding)) def cos_sin(ctx, x, **kwargs): if type(x) not in ctx.types: x = ctx.convert(x) prec, rounding = ctx._parse_prec(kwargs) if hasattr(x, '_mpf_'): c, s = libmp.mpf_cos_sin(x._mpf_, prec, rounding) return ctx.make_mpf(c), ctx.make_mpf(s) elif hasattr(x, '_mpc_'): c, s = libmp.mpc_cos_sin(x._mpc_, prec, rounding) return ctx.make_mpc(c), ctx.make_mpc(s) else: return ctx.cos(x, **kwargs), ctx.sin(x, **kwargs) def cospi_sinpi(ctx, x, **kwargs): if type(x) not in ctx.types: x = ctx.convert(x) prec, rounding = ctx._parse_prec(kwargs) if hasattr(x, '_mpf_'): c, s = libmp.mpf_cos_sin_pi(x._mpf_, prec, rounding) return ctx.make_mpf(c), ctx.make_mpf(s) elif hasattr(x, '_mpc_'): c, s = libmp.mpc_cos_sin_pi(x._mpc_, prec, rounding) return ctx.make_mpc(c), ctx.make_mpc(s) else: return ctx.cos(x, **kwargs), ctx.sin(x, **kwargs) def clone(ctx): """ Create a copy of the context, with the same working precision. """ a = ctx.__class__() a.prec = ctx.prec return a # Several helper methods # TODO: add more of these, make consistent, write docstrings, ... def _is_real_type(ctx, x): if hasattr(x, '_mpc_') or type(x) is complex: return False return True def _is_complex_type(ctx, x): if hasattr(x, '_mpc_') or type(x) is complex: return True return False def isnan(ctx, x): """ Return *True* if *x* is a NaN (not-a-number), or for a complex number, whether either the real or complex part is NaN; otherwise return *False*:: >>> from mpmath import * >>> isnan(3.14) False >>> isnan(nan) True >>> isnan(mpc(3.14,2.72)) False >>> isnan(mpc(3.14,nan)) True """ if hasattr(x, "_mpf_"): return x._mpf_ == fnan if hasattr(x, "_mpc_"): return fnan in x._mpc_ if isinstance(x, int_types) or isinstance(x, rational.mpq): return False x = ctx.convert(x) if hasattr(x, '_mpf_') or hasattr(x, '_mpc_'): return ctx.isnan(x) raise TypeError("isnan() needs a number as input") def isfinite(ctx, x): """ Return *True* if *x* is a finite number, i.e. neither an infinity or a NaN. >>> from mpmath import * >>> isfinite(inf) False >>> isfinite(-inf) False >>> isfinite(3) True >>> isfinite(nan) False >>> isfinite(3+4j) True >>> isfinite(mpc(3,inf)) False >>> isfinite(mpc(nan,3)) False """ if ctx.isinf(x) or ctx.isnan(x): return False return True def isnpint(ctx, x): """ Determine if *x* is a nonpositive integer. """ if not x: return True if hasattr(x, '_mpf_'): sign, man, exp, bc = x._mpf_ return sign and exp >= 0 if hasattr(x, '_mpc_'): return not x.imag and ctx.isnpint(x.real) if type(x) in int_types: return x <= 0 if isinstance(x, ctx.mpq): p, q = x._mpq_ if not p: return True return q == 1 and p <= 0 return ctx.isnpint(ctx.convert(x)) def __str__(ctx): lines = ["Mpmath settings:", (" mp.prec = %s" % ctx.prec).ljust(30) + "[default: 53]", (" mp.dps = %s" % ctx.dps).ljust(30) + "[default: 15]", (" mp.trap_complex = %s" % ctx.trap_complex).ljust(30) + "[default: False]", ] return "\n".join(lines) @property def _repr_digits(ctx): return repr_dps(ctx._prec) @property def _str_digits(ctx): return ctx._dps def extraprec(ctx, n, normalize_output=False): """ The block with extraprec(n): increases the precision n bits, executes , and then restores the precision. extraprec(n)(f) returns a decorated version of the function f that increases the working precision by n bits before execution, and restores the parent precision afterwards. With normalize_output=True, it rounds the return value to the parent precision. """ return PrecisionManager(ctx, lambda p: p + n, None, normalize_output) def extradps(ctx, n, normalize_output=False): """ This function is analogous to extraprec (see documentation) but changes the decimal precision instead of the number of bits. """ return PrecisionManager(ctx, None, lambda d: d + n, normalize_output) def workprec(ctx, n, normalize_output=False): """ The block with workprec(n): sets the precision to n bits, executes , and then restores the precision. workprec(n)(f) returns a decorated version of the function f that sets the precision to n bits before execution, and restores the precision afterwards. With normalize_output=True, it rounds the return value to the parent precision. """ return PrecisionManager(ctx, lambda p: n, None, normalize_output) def workdps(ctx, n, normalize_output=False): """ This function is analogous to workprec (see documentation) but changes the decimal precision instead of the number of bits. """ return PrecisionManager(ctx, None, lambda d: n, normalize_output) def autoprec(ctx, f, maxprec=None, catch=(), verbose=False): """ Return a wrapped copy of *f* that repeatedly evaluates *f* with increasing precision until the result converges to the full precision used at the point of the call. This heuristically protects against rounding errors, at the cost of roughly a 2x slowdown compared to manually setting the optimal precision. This method can, however, easily be fooled if the results from *f* depend "discontinuously" on the precision, for instance if catastrophic cancellation can occur. Therefore, :func:`~mpmath.autoprec` should be used judiciously. **Examples** Many functions are sensitive to perturbations of the input arguments. If the arguments are decimal numbers, they may have to be converted to binary at a much higher precision. If the amount of required extra precision is unknown, :func:`~mpmath.autoprec` is convenient:: >>> from mpmath import * >>> mp.dps = 15 >>> mp.pretty = True >>> besselj(5, 125 * 10**28) # Exact input -8.03284785591801e-17 >>> besselj(5, '1.25e30') # Bad 7.12954868316652e-16 >>> autoprec(besselj)(5, '1.25e30') # Good -8.03284785591801e-17 The following fails to converge because `\sin(\pi) = 0` whereas all finite-precision approximations of `\pi` give nonzero values:: >>> autoprec(sin)(pi) # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... NoConvergence: autoprec: prec increased to 2910 without convergence As the following example shows, :func:`~mpmath.autoprec` can protect against cancellation, but is fooled by too severe cancellation:: >>> x = 1e-10 >>> exp(x)-1; expm1(x); autoprec(lambda t: exp(t)-1)(x) 1.00000008274037e-10 1.00000000005e-10 1.00000000005e-10 >>> x = 1e-50 >>> exp(x)-1; expm1(x); autoprec(lambda t: exp(t)-1)(x) 0.0 1.0e-50 0.0 With *catch*, an exception or list of exceptions to intercept may be specified. The raised exception is interpreted as signaling insufficient precision. This permits, for example, evaluating a function where a too low precision results in a division by zero:: >>> f = lambda x: 1/(exp(x)-1) >>> f(1e-30) Traceback (most recent call last): ... ZeroDivisionError >>> autoprec(f, catch=ZeroDivisionError)(1e-30) 1.0e+30 """ def f_autoprec_wrapped(*args, **kwargs): prec = ctx.prec if maxprec is None: maxprec2 = ctx._default_hyper_maxprec(prec) else: maxprec2 = maxprec try: ctx.prec = prec + 10 try: v1 = f(*args, **kwargs) except catch: v1 = ctx.nan prec2 = prec + 20 while 1: ctx.prec = prec2 try: v2 = f(*args, **kwargs) except catch: v2 = ctx.nan if v1 == v2: break err = ctx.mag(v2-v1) - ctx.mag(v2) if err < (-prec): break if verbose: print("autoprec: target=%s, prec=%s, accuracy=%s" \ % (prec, prec2, -err)) v1 = v2 if prec2 >= maxprec2: raise ctx.NoConvergence(\ "autoprec: prec increased to %i without convergence"\ % prec2) prec2 += int(prec2*2) prec2 = min(prec2, maxprec2) finally: ctx.prec = prec return +v2 return f_autoprec_wrapped def nstr(ctx, x, n=6, **kwargs): """ Convert an ``mpf`` or ``mpc`` to a decimal string literal with *n* significant digits. The small default value for *n* is chosen to make this function useful for printing collections of numbers (lists, matrices, etc). If *x* is a list or tuple, :func:`~mpmath.nstr` is applied recursively to each element. For unrecognized classes, :func:`~mpmath.nstr` simply returns ``str(x)``. The companion function :func:`~mpmath.nprint` prints the result instead of returning it. The keyword arguments *strip_zeros*, *min_fixed*, *max_fixed* and *show_zero_exponent* are forwarded to :func:`~mpmath.libmp.to_str`. The number will be printed in fixed-point format if the position of the leading digit is strictly between min_fixed (default = min(-dps/3,-5)) and max_fixed (default = dps). To force fixed-point format always, set min_fixed = -inf, max_fixed = +inf. To force floating-point format, set min_fixed >= max_fixed. >>> from mpmath import * >>> nstr([+pi, ldexp(1,-500)]) '[3.14159, 3.05494e-151]' >>> nprint([+pi, ldexp(1,-500)]) [3.14159, 3.05494e-151] >>> nstr(mpf("5e-10"), 5) '5.0e-10' >>> nstr(mpf("5e-10"), 5, strip_zeros=False) '5.0000e-10' >>> nstr(mpf("5e-10"), 5, strip_zeros=False, min_fixed=-11) '0.00000000050000' >>> nstr(mpf(0), 5, show_zero_exponent=True) '0.0e+0' """ if isinstance(x, list): return "[%s]" % (", ".join(ctx.nstr(c, n, **kwargs) for c in x)) if isinstance(x, tuple): return "(%s)" % (", ".join(ctx.nstr(c, n, **kwargs) for c in x)) if hasattr(x, '_mpf_'): return to_str(x._mpf_, n, **kwargs) if hasattr(x, '_mpc_'): return "(" + mpc_to_str(x._mpc_, n, **kwargs) + ")" if isinstance(x, basestring): return repr(x) if isinstance(x, ctx.matrix): return x.__nstr__(n, **kwargs) return str(x) def _convert_fallback(ctx, x, strings): if strings and isinstance(x, basestring): if 'j' in x.lower(): x = x.lower().replace(' ', '') match = get_complex.match(x) re = match.group('re') if not re: re = 0 im = match.group('im').rstrip('j') return ctx.mpc(ctx.convert(re), ctx.convert(im)) if hasattr(x, "_mpi_"): a, b = x._mpi_ if a == b: return ctx.make_mpf(a) else: raise ValueError("can only create mpf from zero-width interval") raise TypeError("cannot create mpf from " + repr(x)) def mpmathify(ctx, *args, **kwargs): return ctx.convert(*args, **kwargs) def _parse_prec(ctx, kwargs): if kwargs: if kwargs.get('exact'): return 0, 'f' prec, rounding = ctx._prec_rounding if 'rounding' in kwargs: rounding = kwargs['rounding'] if 'prec' in kwargs: prec = kwargs['prec'] if prec == ctx.inf: return 0, 'f' else: prec = int(prec) elif 'dps' in kwargs: dps = kwargs['dps'] if dps == ctx.inf: return 0, 'f' prec = dps_to_prec(dps) return prec, rounding return ctx._prec_rounding _exact_overflow_msg = "the exact result does not fit in memory" _hypsum_msg = """hypsum() failed to converge to the requested %i bits of accuracy using a working precision of %i bits. Try with a higher maxprec, maxterms, or set zeroprec.""" def hypsum(ctx, p, q, flags, coeffs, z, accurate_small=True, **kwargs): if hasattr(z, "_mpf_"): key = p, q, flags, 'R' v = z._mpf_ elif hasattr(z, "_mpc_"): key = p, q, flags, 'C' v = z._mpc_ if key not in ctx.hyp_summators: ctx.hyp_summators[key] = libmp.make_hyp_summator(key)[1] summator = ctx.hyp_summators[key] prec = ctx.prec maxprec = kwargs.get('maxprec', ctx._default_hyper_maxprec(prec)) extraprec = 50 epsshift = 25 # Jumps in magnitude occur when parameters are close to negative # integers. We must ensure that these terms are included in # the sum and added accurately magnitude_check = {} max_total_jump = 0 for i, c in enumerate(coeffs): if flags[i] == 'Z': if i >= p and c <= 0: ok = False for ii, cc in enumerate(coeffs[:p]): # Note: c <= cc or c < cc, depending on convention if flags[ii] == 'Z' and cc <= 0 and c <= cc: ok = True if not ok: raise ZeroDivisionError("pole in hypergeometric series") continue n, d = ctx.nint_distance(c) n = -int(n) d = -d if i >= p and n >= 0 and d > 4: if n in magnitude_check: magnitude_check[n] += d else: magnitude_check[n] = d extraprec = max(extraprec, d - prec + 60) max_total_jump += abs(d) while 1: if extraprec > maxprec: raise ValueError(ctx._hypsum_msg % (prec, prec+extraprec)) wp = prec + extraprec if magnitude_check: mag_dict = dict((n,None) for n in magnitude_check) else: mag_dict = {} zv, have_complex, magnitude = summator(coeffs, v, prec, wp, \ epsshift, mag_dict, **kwargs) cancel = -magnitude jumps_resolved = True if extraprec < max_total_jump: for n in mag_dict.values(): if (n is None) or (n < prec): jumps_resolved = False break accurate = (cancel < extraprec-25-5 or not accurate_small) if jumps_resolved: if accurate: break # zero? zeroprec = kwargs.get('zeroprec') if zeroprec is not None: if cancel > zeroprec: if have_complex: return ctx.mpc(0) else: return ctx.zero # Some near-singularities were not included, so increase # precision and repeat until they are extraprec *= 2 # Possible workaround for bad roundoff in fixed-point arithmetic epsshift += 5 extraprec += 5 if type(zv) is tuple: if have_complex: return ctx.make_mpc(zv) else: return ctx.make_mpf(zv) else: return zv def ldexp(ctx, x, n): r""" Computes `x 2^n` efficiently. No rounding is performed. The argument `x` must be a real floating-point number (or possible to convert into one) and `n` must be a Python ``int``. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> ldexp(1, 10) mpf('1024.0') >>> ldexp(1, -3) mpf('0.125') """ x = ctx.convert(x) return ctx.make_mpf(libmp.mpf_shift(x._mpf_, n)) def frexp(ctx, x): r""" Given a real number `x`, returns `(y, n)` with `y \in [0.5, 1)`, `n` a Python integer, and such that `x = y 2^n`. No rounding is performed. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> frexp(7.5) (mpf('0.9375'), 3) """ x = ctx.convert(x) y, n = libmp.mpf_frexp(x._mpf_) return ctx.make_mpf(y), n def fneg(ctx, x, **kwargs): """ Negates the number *x*, giving a floating-point result, optionally using a custom precision and rounding mode. See the documentation of :func:`~mpmath.fadd` for a detailed description of how to specify precision and rounding. **Examples** An mpmath number is returned:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fneg(2.5) mpf('-2.5') >>> fneg(-5+2j) mpc(real='5.0', imag='-2.0') Precise control over rounding is possible:: >>> x = fadd(2, 1e-100, exact=True) >>> fneg(x) mpf('-2.0') >>> fneg(x, rounding='f') mpf('-2.0000000000000004') Negating with and without roundoff:: >>> n = 200000000000000000000001 >>> print(int(-mpf(n))) -200000000000000016777216 >>> print(int(fneg(n))) -200000000000000016777216 >>> print(int(fneg(n, prec=log(n,2)+1))) -200000000000000000000001 >>> print(int(fneg(n, dps=log(n,10)+1))) -200000000000000000000001 >>> print(int(fneg(n, prec=inf))) -200000000000000000000001 >>> print(int(fneg(n, dps=inf))) -200000000000000000000001 >>> print(int(fneg(n, exact=True))) -200000000000000000000001 """ prec, rounding = ctx._parse_prec(kwargs) x = ctx.convert(x) if hasattr(x, '_mpf_'): return ctx.make_mpf(mpf_neg(x._mpf_, prec, rounding)) if hasattr(x, '_mpc_'): return ctx.make_mpc(mpc_neg(x._mpc_, prec, rounding)) raise ValueError("Arguments need to be mpf or mpc compatible numbers") def fadd(ctx, x, y, **kwargs): """ Adds the numbers *x* and *y*, giving a floating-point result, optionally using a custom precision and rounding mode. The default precision is the working precision of the context. You can specify a custom precision in bits by passing the *prec* keyword argument, or by providing an equivalent decimal precision with the *dps* keyword argument. If the precision is set to ``+inf``, or if the flag *exact=True* is passed, an exact addition with no rounding is performed. When the precision is finite, the optional *rounding* keyword argument specifies the direction of rounding. Valid options are ``'n'`` for nearest (default), ``'f'`` for floor, ``'c'`` for ceiling, ``'d'`` for down, ``'u'`` for up. **Examples** Using :func:`~mpmath.fadd` with precision and rounding control:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fadd(2, 1e-20) mpf('2.0') >>> fadd(2, 1e-20, rounding='u') mpf('2.0000000000000004') >>> nprint(fadd(2, 1e-20, prec=100), 25) 2.00000000000000000001 >>> nprint(fadd(2, 1e-20, dps=15), 25) 2.0 >>> nprint(fadd(2, 1e-20, dps=25), 25) 2.00000000000000000001 >>> nprint(fadd(2, 1e-20, exact=True), 25) 2.00000000000000000001 Exact addition avoids cancellation errors, enforcing familiar laws of numbers such as `x+y-x = y`, which don't hold in floating-point arithmetic with finite precision:: >>> x, y = mpf(2), mpf('1e-1000') >>> print(x + y - x) 0.0 >>> print(fadd(x, y, prec=inf) - x) 1.0e-1000 >>> print(fadd(x, y, exact=True) - x) 1.0e-1000 Exact addition can be inefficient and may be impossible to perform with large magnitude differences:: >>> fadd(1, '1e-100000000000000000000', prec=inf) Traceback (most recent call last): ... OverflowError: the exact result does not fit in memory """ prec, rounding = ctx._parse_prec(kwargs) x = ctx.convert(x) y = ctx.convert(y) try: if hasattr(x, '_mpf_'): if hasattr(y, '_mpf_'): return ctx.make_mpf(mpf_add(x._mpf_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_add_mpf(y._mpc_, x._mpf_, prec, rounding)) if hasattr(x, '_mpc_'): if hasattr(y, '_mpf_'): return ctx.make_mpc(mpc_add_mpf(x._mpc_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_add(x._mpc_, y._mpc_, prec, rounding)) except (ValueError, OverflowError): raise OverflowError(ctx._exact_overflow_msg) raise ValueError("Arguments need to be mpf or mpc compatible numbers") def fsub(ctx, x, y, **kwargs): """ Subtracts the numbers *x* and *y*, giving a floating-point result, optionally using a custom precision and rounding mode. See the documentation of :func:`~mpmath.fadd` for a detailed description of how to specify precision and rounding. **Examples** Using :func:`~mpmath.fsub` with precision and rounding control:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fsub(2, 1e-20) mpf('2.0') >>> fsub(2, 1e-20, rounding='d') mpf('1.9999999999999998') >>> nprint(fsub(2, 1e-20, prec=100), 25) 1.99999999999999999999 >>> nprint(fsub(2, 1e-20, dps=15), 25) 2.0 >>> nprint(fsub(2, 1e-20, dps=25), 25) 1.99999999999999999999 >>> nprint(fsub(2, 1e-20, exact=True), 25) 1.99999999999999999999 Exact subtraction avoids cancellation errors, enforcing familiar laws of numbers such as `x-y+y = x`, which don't hold in floating-point arithmetic with finite precision:: >>> x, y = mpf(2), mpf('1e1000') >>> print(x - y + y) 0.0 >>> print(fsub(x, y, prec=inf) + y) 2.0 >>> print(fsub(x, y, exact=True) + y) 2.0 Exact addition can be inefficient and may be impossible to perform with large magnitude differences:: >>> fsub(1, '1e-100000000000000000000', prec=inf) Traceback (most recent call last): ... OverflowError: the exact result does not fit in memory """ prec, rounding = ctx._parse_prec(kwargs) x = ctx.convert(x) y = ctx.convert(y) try: if hasattr(x, '_mpf_'): if hasattr(y, '_mpf_'): return ctx.make_mpf(mpf_sub(x._mpf_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_sub((x._mpf_, fzero), y._mpc_, prec, rounding)) if hasattr(x, '_mpc_'): if hasattr(y, '_mpf_'): return ctx.make_mpc(mpc_sub_mpf(x._mpc_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_sub(x._mpc_, y._mpc_, prec, rounding)) except (ValueError, OverflowError): raise OverflowError(ctx._exact_overflow_msg) raise ValueError("Arguments need to be mpf or mpc compatible numbers") def fmul(ctx, x, y, **kwargs): """ Multiplies the numbers *x* and *y*, giving a floating-point result, optionally using a custom precision and rounding mode. See the documentation of :func:`~mpmath.fadd` for a detailed description of how to specify precision and rounding. **Examples** The result is an mpmath number:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fmul(2, 5.0) mpf('10.0') >>> fmul(0.5j, 0.5) mpc(real='0.0', imag='0.25') Avoiding roundoff:: >>> x, y = 10**10+1, 10**15+1 >>> print(x*y) 10000000001000010000000001 >>> print(mpf(x) * mpf(y)) 1.0000000001e+25 >>> print(int(mpf(x) * mpf(y))) 10000000001000011026399232 >>> print(int(fmul(x, y))) 10000000001000011026399232 >>> print(int(fmul(x, y, dps=25))) 10000000001000010000000001 >>> print(int(fmul(x, y, exact=True))) 10000000001000010000000001 Exact multiplication with complex numbers can be inefficient and may be impossible to perform with large magnitude differences between real and imaginary parts:: >>> x = 1+2j >>> y = mpc(2, '1e-100000000000000000000') >>> fmul(x, y) mpc(real='2.0', imag='4.0') >>> fmul(x, y, rounding='u') mpc(real='2.0', imag='4.0000000000000009') >>> fmul(x, y, exact=True) Traceback (most recent call last): ... OverflowError: the exact result does not fit in memory """ prec, rounding = ctx._parse_prec(kwargs) x = ctx.convert(x) y = ctx.convert(y) try: if hasattr(x, '_mpf_'): if hasattr(y, '_mpf_'): return ctx.make_mpf(mpf_mul(x._mpf_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_mul_mpf(y._mpc_, x._mpf_, prec, rounding)) if hasattr(x, '_mpc_'): if hasattr(y, '_mpf_'): return ctx.make_mpc(mpc_mul_mpf(x._mpc_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_mul(x._mpc_, y._mpc_, prec, rounding)) except (ValueError, OverflowError): raise OverflowError(ctx._exact_overflow_msg) raise ValueError("Arguments need to be mpf or mpc compatible numbers") def fdiv(ctx, x, y, **kwargs): """ Divides the numbers *x* and *y*, giving a floating-point result, optionally using a custom precision and rounding mode. See the documentation of :func:`~mpmath.fadd` for a detailed description of how to specify precision and rounding. **Examples** The result is an mpmath number:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fdiv(3, 2) mpf('1.5') >>> fdiv(2, 3) mpf('0.66666666666666663') >>> fdiv(2+4j, 0.5) mpc(real='4.0', imag='8.0') The rounding direction and precision can be controlled:: >>> fdiv(2, 3, dps=3) # Should be accurate to at least 3 digits mpf('0.6666259765625') >>> fdiv(2, 3, rounding='d') mpf('0.66666666666666663') >>> fdiv(2, 3, prec=60) mpf('0.66666666666666667') >>> fdiv(2, 3, rounding='u') mpf('0.66666666666666674') Checking the error of a division by performing it at higher precision:: >>> fdiv(2, 3) - fdiv(2, 3, prec=100) mpf('-3.7007434154172148e-17') Unlike :func:`~mpmath.fadd`, :func:`~mpmath.fmul`, etc., exact division is not allowed since the quotient of two floating-point numbers generally does not have an exact floating-point representation. (In the future this might be changed to allow the case where the division is actually exact.) >>> fdiv(2, 3, exact=True) Traceback (most recent call last): ... ValueError: division is not an exact operation """ prec, rounding = ctx._parse_prec(kwargs) if not prec: raise ValueError("division is not an exact operation") x = ctx.convert(x) y = ctx.convert(y) if hasattr(x, '_mpf_'): if hasattr(y, '_mpf_'): return ctx.make_mpf(mpf_div(x._mpf_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_div((x._mpf_, fzero), y._mpc_, prec, rounding)) if hasattr(x, '_mpc_'): if hasattr(y, '_mpf_'): return ctx.make_mpc(mpc_div_mpf(x._mpc_, y._mpf_, prec, rounding)) if hasattr(y, '_mpc_'): return ctx.make_mpc(mpc_div(x._mpc_, y._mpc_, prec, rounding)) raise ValueError("Arguments need to be mpf or mpc compatible numbers") def nint_distance(ctx, x): r""" Return `(n,d)` where `n` is the nearest integer to `x` and `d` is an estimate of `\log_2(|x-n|)`. If `d < 0`, `-d` gives the precision (measured in bits) lost to cancellation when computing `x-n`. >>> from mpmath import * >>> n, d = nint_distance(5) >>> print(n); print(d) 5 -inf >>> n, d = nint_distance(mpf(5)) >>> print(n); print(d) 5 -inf >>> n, d = nint_distance(mpf(5.00000001)) >>> print(n); print(d) 5 -26 >>> n, d = nint_distance(mpf(4.99999999)) >>> print(n); print(d) 5 -26 >>> n, d = nint_distance(mpc(5,10)) >>> print(n); print(d) 5 4 >>> n, d = nint_distance(mpc(5,0.000001)) >>> print(n); print(d) 5 -19 """ typx = type(x) if typx in int_types: return int(x), ctx.ninf elif typx is rational.mpq: p, q = x._mpq_ n, r = divmod(p, q) if 2*r >= q: n += 1 elif not r: return n, ctx.ninf # log(p/q-n) = log((p-nq)/q) = log(p-nq) - log(q) d = bitcount(abs(p-n*q)) - bitcount(q) return n, d if hasattr(x, "_mpf_"): re = x._mpf_ im_dist = ctx.ninf elif hasattr(x, "_mpc_"): re, im = x._mpc_ isign, iman, iexp, ibc = im if iman: im_dist = iexp + ibc elif im == fzero: im_dist = ctx.ninf else: raise ValueError("requires a finite number") else: x = ctx.convert(x) if hasattr(x, "_mpf_") or hasattr(x, "_mpc_"): return ctx.nint_distance(x) else: raise TypeError("requires an mpf/mpc") sign, man, exp, bc = re mag = exp+bc # |x| < 0.5 if mag < 0: n = 0 re_dist = mag elif man: # exact integer if exp >= 0: n = man << exp re_dist = ctx.ninf # exact half-integer elif exp == -1: n = (man>>1)+1 re_dist = 0 else: d = (-exp-1) t = man >> d if t & 1: t += 1 man = (t<>1 # int(t)>>1 re_dist = exp+bitcount(man) if sign: n = -n elif re == fzero: re_dist = ctx.ninf n = 0 else: raise ValueError("requires a finite number") return n, max(re_dist, im_dist) def fprod(ctx, factors): r""" Calculates a product containing a finite number of factors (for infinite products, see :func:`~mpmath.nprod`). The factors will be converted to mpmath numbers. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fprod([1, 2, 0.5, 7]) mpf('7.0') """ orig = ctx.prec try: v = ctx.one for p in factors: v *= p finally: ctx.prec = orig return +v def rand(ctx): """ Returns an ``mpf`` with value chosen randomly from `[0, 1)`. The number of randomly generated bits in the mantissa is equal to the working precision. """ return ctx.make_mpf(mpf_rand(ctx._prec)) def fraction(ctx, p, q): """ Given Python integers `(p, q)`, returns a lazy ``mpf`` representing the fraction `p/q`. The value is updated with the precision. >>> from mpmath import * >>> mp.dps = 15 >>> a = fraction(1,100) >>> b = mpf(1)/100 >>> print(a); print(b) 0.01 0.01 >>> mp.dps = 30 >>> print(a); print(b) # a will be accurate 0.01 0.0100000000000000002081668171172 >>> mp.dps = 15 """ return ctx.constant(lambda prec, rnd: from_rational(p, q, prec, rnd), '%s/%s' % (p, q)) def absmin(ctx, x): return abs(ctx.convert(x)) def absmax(ctx, x): return abs(ctx.convert(x)) def _as_points(ctx, x): # XXX: remove this? if hasattr(x, '_mpi_'): a, b = x._mpi_ return [ctx.make_mpf(a), ctx.make_mpf(b)] return x ''' def _zetasum(ctx, s, a, b): """ Computes sum of k^(-s) for k = a, a+1, ..., b with a, b both small integers. """ a = int(a) b = int(b) s = ctx.convert(s) prec, rounding = ctx._prec_rounding if hasattr(s, '_mpf_'): v = ctx.make_mpf(libmp.mpf_zetasum(s._mpf_, a, b, prec)) elif hasattr(s, '_mpc_'): v = ctx.make_mpc(libmp.mpc_zetasum(s._mpc_, a, b, prec)) return v ''' def _zetasum_fast(ctx, s, a, n, derivatives=[0], reflect=False): if not (ctx.isint(a) and hasattr(s, "_mpc_")): raise NotImplementedError a = int(a) prec = ctx._prec xs, ys = libmp.mpc_zetasum(s._mpc_, a, n, derivatives, reflect, prec) xs = [ctx.make_mpc(x) for x in xs] ys = [ctx.make_mpc(y) for y in ys] return xs, ys class PrecisionManager: def __init__(self, ctx, precfun, dpsfun, normalize_output=False): self.ctx = ctx self.precfun = precfun self.dpsfun = dpsfun self.normalize_output = normalize_output def __call__(self, f): def g(*args, **kwargs): orig = self.ctx.prec try: if self.precfun: self.ctx.prec = self.precfun(self.ctx.prec) else: self.ctx.dps = self.dpsfun(self.ctx.dps) if self.normalize_output: v = f(*args, **kwargs) if type(v) is tuple: return tuple([+a for a in v]) return +v else: return f(*args, **kwargs) finally: self.ctx.prec = orig g.__name__ = f.__name__ g.__doc__ = f.__doc__ return g def __enter__(self): self.origp = self.ctx.prec if self.precfun: self.ctx.prec = self.precfun(self.ctx.prec) else: self.ctx.dps = self.dpsfun(self.ctx.dps) def __exit__(self, exc_type, exc_val, exc_tb): self.ctx.prec = self.origp return False if __name__ == '__main__': import doctest doctest.testmod() mpmath-1.0.0/mpmath/ctx_mp_python.py000066400000000000000000001105321316273626600175470ustar00rootroot00000000000000#from ctx_base import StandardBaseContext from .libmp.backend import basestring, exec_ from .libmp import (MPZ, MPZ_ZERO, MPZ_ONE, int_types, repr_dps, round_floor, round_ceiling, dps_to_prec, round_nearest, prec_to_dps, ComplexResult, to_pickable, from_pickable, normalize, from_int, from_float, from_str, to_int, to_float, to_str, from_rational, from_man_exp, fone, fzero, finf, fninf, fnan, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_mul_int, mpf_div, mpf_rdiv_int, mpf_pow_int, mpf_mod, mpf_eq, mpf_cmp, mpf_lt, mpf_gt, mpf_le, mpf_ge, mpf_hash, mpf_rand, mpf_sum, bitcount, to_fixed, mpc_to_str, mpc_to_complex, mpc_hash, mpc_pos, mpc_is_nonzero, mpc_neg, mpc_conjugate, mpc_abs, mpc_add, mpc_add_mpf, mpc_sub, mpc_sub_mpf, mpc_mul, mpc_mul_mpf, mpc_mul_int, mpc_div, mpc_div_mpf, mpc_pow, mpc_pow_mpf, mpc_pow_int, mpc_mpf_div, mpf_pow, mpf_pi, mpf_degree, mpf_e, mpf_phi, mpf_ln2, mpf_ln10, mpf_euler, mpf_catalan, mpf_apery, mpf_khinchin, mpf_glaisher, mpf_twinprime, mpf_mertens, int_types) from . import rational from . import function_docs new = object.__new__ class mpnumeric(object): """Base class for mpf and mpc.""" __slots__ = [] def __new__(cls, val): raise NotImplementedError class _mpf(mpnumeric): """ An mpf instance holds a real-valued floating-point number. mpf:s work analogously to Python floats, but support arbitrary-precision arithmetic. """ __slots__ = ['_mpf_'] def __new__(cls, val=fzero, **kwargs): """A new mpf can be created from a Python float, an int, a or a decimal string representing a number in floating-point format.""" prec, rounding = cls.context._prec_rounding if kwargs: prec = kwargs.get('prec', prec) if 'dps' in kwargs: prec = dps_to_prec(kwargs['dps']) rounding = kwargs.get('rounding', rounding) if type(val) is cls: sign, man, exp, bc = val._mpf_ if (not man) and exp: return val v = new(cls) v._mpf_ = normalize(sign, man, exp, bc, prec, rounding) return v elif type(val) is tuple: if len(val) == 2: v = new(cls) v._mpf_ = from_man_exp(val[0], val[1], prec, rounding) return v if len(val) == 4: sign, man, exp, bc = val v = new(cls) v._mpf_ = normalize(sign, MPZ(man), exp, bc, prec, rounding) return v raise ValueError else: v = new(cls) v._mpf_ = mpf_pos(cls.mpf_convert_arg(val, prec, rounding), prec, rounding) return v @classmethod def mpf_convert_arg(cls, x, prec, rounding): if isinstance(x, int_types): return from_int(x) if isinstance(x, float): return from_float(x) if isinstance(x, basestring): return from_str(x, prec, rounding) if isinstance(x, cls.context.constant): return x.func(prec, rounding) if hasattr(x, '_mpf_'): return x._mpf_ if hasattr(x, '_mpmath_'): t = cls.context.convert(x._mpmath_(prec, rounding)) if hasattr(t, '_mpf_'): return t._mpf_ if hasattr(x, '_mpi_'): a, b = x._mpi_ if a == b: return a raise ValueError("can only create mpf from zero-width interval") raise TypeError("cannot create mpf from " + repr(x)) @classmethod def mpf_convert_rhs(cls, x): if isinstance(x, int_types): return from_int(x) if isinstance(x, float): return from_float(x) if isinstance(x, complex_types): return cls.context.mpc(x) if isinstance(x, rational.mpq): p, q = x._mpq_ return from_rational(p, q, cls.context.prec) if hasattr(x, '_mpf_'): return x._mpf_ if hasattr(x, '_mpmath_'): t = cls.context.convert(x._mpmath_(*cls.context._prec_rounding)) if hasattr(t, '_mpf_'): return t._mpf_ return t return NotImplemented @classmethod def mpf_convert_lhs(cls, x): x = cls.mpf_convert_rhs(x) if type(x) is tuple: return cls.context.make_mpf(x) return x man_exp = property(lambda self: self._mpf_[1:3]) man = property(lambda self: self._mpf_[1]) exp = property(lambda self: self._mpf_[2]) bc = property(lambda self: self._mpf_[3]) real = property(lambda self: self) imag = property(lambda self: self.context.zero) conjugate = lambda self: self def __getstate__(self): return to_pickable(self._mpf_) def __setstate__(self, val): self._mpf_ = from_pickable(val) def __repr__(s): if s.context.pretty: return str(s) return "mpf('%s')" % to_str(s._mpf_, s.context._repr_digits) def __str__(s): return to_str(s._mpf_, s.context._str_digits) def __hash__(s): return mpf_hash(s._mpf_) def __int__(s): return int(to_int(s._mpf_)) def __long__(s): return long(to_int(s._mpf_)) def __float__(s): return to_float(s._mpf_, rnd=s.context._prec_rounding[1]) def __complex__(s): return complex(float(s)) def __nonzero__(s): return s._mpf_ != fzero __bool__ = __nonzero__ def __abs__(s): cls, new, (prec, rounding) = s._ctxdata v = new(cls) v._mpf_ = mpf_abs(s._mpf_, prec, rounding) return v def __pos__(s): cls, new, (prec, rounding) = s._ctxdata v = new(cls) v._mpf_ = mpf_pos(s._mpf_, prec, rounding) return v def __neg__(s): cls, new, (prec, rounding) = s._ctxdata v = new(cls) v._mpf_ = mpf_neg(s._mpf_, prec, rounding) return v def _cmp(s, t, func): if hasattr(t, '_mpf_'): t = t._mpf_ else: t = s.mpf_convert_rhs(t) if t is NotImplemented: return t return func(s._mpf_, t) def __cmp__(s, t): return s._cmp(t, mpf_cmp) def __lt__(s, t): return s._cmp(t, mpf_lt) def __gt__(s, t): return s._cmp(t, mpf_gt) def __le__(s, t): return s._cmp(t, mpf_le) def __ge__(s, t): return s._cmp(t, mpf_ge) def __ne__(s, t): v = s.__eq__(t) if v is NotImplemented: return v return not v def __rsub__(s, t): cls, new, (prec, rounding) = s._ctxdata if type(t) in int_types: v = new(cls) v._mpf_ = mpf_sub(from_int(t), s._mpf_, prec, rounding) return v t = s.mpf_convert_lhs(t) if t is NotImplemented: return t return t - s def __rdiv__(s, t): cls, new, (prec, rounding) = s._ctxdata if isinstance(t, int_types): v = new(cls) v._mpf_ = mpf_rdiv_int(t, s._mpf_, prec, rounding) return v t = s.mpf_convert_lhs(t) if t is NotImplemented: return t return t / s def __rpow__(s, t): t = s.mpf_convert_lhs(t) if t is NotImplemented: return t return t ** s def __rmod__(s, t): t = s.mpf_convert_lhs(t) if t is NotImplemented: return t return t % s def sqrt(s): return s.context.sqrt(s) def ae(s, t, rel_eps=None, abs_eps=None): return s.context.almosteq(s, t, rel_eps, abs_eps) def to_fixed(self, prec): return to_fixed(self._mpf_, prec) def __round__(self, *args): return round(float(self), *args) mpf_binary_op = """ def %NAME%(self, other): mpf, new, (prec, rounding) = self._ctxdata sval = self._mpf_ if hasattr(other, '_mpf_'): tval = other._mpf_ %WITH_MPF% ttype = type(other) if ttype in int_types: %WITH_INT% elif ttype is float: tval = from_float(other) %WITH_MPF% elif hasattr(other, '_mpc_'): tval = other._mpc_ mpc = type(other) %WITH_MPC% elif ttype is complex: tval = from_float(other.real), from_float(other.imag) mpc = self.context.mpc %WITH_MPC% if isinstance(other, mpnumeric): return NotImplemented try: other = mpf.context.convert(other, strings=False) except TypeError: return NotImplemented return self.%NAME%(other) """ return_mpf = "; obj = new(mpf); obj._mpf_ = val; return obj" return_mpc = "; obj = new(mpc); obj._mpc_ = val; return obj" mpf_pow_same = """ try: val = mpf_pow(sval, tval, prec, rounding) %s except ComplexResult: if mpf.context.trap_complex: raise mpc = mpf.context.mpc val = mpc_pow((sval, fzero), (tval, fzero), prec, rounding) %s """ % (return_mpf, return_mpc) def binary_op(name, with_mpf='', with_int='', with_mpc=''): code = mpf_binary_op code = code.replace("%WITH_INT%", with_int) code = code.replace("%WITH_MPC%", with_mpc) code = code.replace("%WITH_MPF%", with_mpf) code = code.replace("%NAME%", name) np = {} exec_(code, globals(), np) return np[name] _mpf.__eq__ = binary_op('__eq__', 'return mpf_eq(sval, tval)', 'return mpf_eq(sval, from_int(other))', 'return (tval[1] == fzero) and mpf_eq(tval[0], sval)') _mpf.__add__ = binary_op('__add__', 'val = mpf_add(sval, tval, prec, rounding)' + return_mpf, 'val = mpf_add(sval, from_int(other), prec, rounding)' + return_mpf, 'val = mpc_add_mpf(tval, sval, prec, rounding)' + return_mpc) _mpf.__sub__ = binary_op('__sub__', 'val = mpf_sub(sval, tval, prec, rounding)' + return_mpf, 'val = mpf_sub(sval, from_int(other), prec, rounding)' + return_mpf, 'val = mpc_sub((sval, fzero), tval, prec, rounding)' + return_mpc) _mpf.__mul__ = binary_op('__mul__', 'val = mpf_mul(sval, tval, prec, rounding)' + return_mpf, 'val = mpf_mul_int(sval, other, prec, rounding)' + return_mpf, 'val = mpc_mul_mpf(tval, sval, prec, rounding)' + return_mpc) _mpf.__div__ = binary_op('__div__', 'val = mpf_div(sval, tval, prec, rounding)' + return_mpf, 'val = mpf_div(sval, from_int(other), prec, rounding)' + return_mpf, 'val = mpc_mpf_div(sval, tval, prec, rounding)' + return_mpc) _mpf.__mod__ = binary_op('__mod__', 'val = mpf_mod(sval, tval, prec, rounding)' + return_mpf, 'val = mpf_mod(sval, from_int(other), prec, rounding)' + return_mpf, 'raise NotImplementedError("complex modulo")') _mpf.__pow__ = binary_op('__pow__', mpf_pow_same, 'val = mpf_pow_int(sval, other, prec, rounding)' + return_mpf, 'val = mpc_pow((sval, fzero), tval, prec, rounding)' + return_mpc) _mpf.__radd__ = _mpf.__add__ _mpf.__rmul__ = _mpf.__mul__ _mpf.__truediv__ = _mpf.__div__ _mpf.__rtruediv__ = _mpf.__rdiv__ class _constant(_mpf): """Represents a mathematical constant with dynamic precision. When printed or used in an arithmetic operation, a constant is converted to a regular mpf at the working precision. A regular mpf can also be obtained using the operation +x.""" def __new__(cls, func, name, docname=''): a = object.__new__(cls) a.name = name a.func = func a.__doc__ = getattr(function_docs, docname, '') return a def __call__(self, prec=None, dps=None, rounding=None): prec2, rounding2 = self.context._prec_rounding if not prec: prec = prec2 if not rounding: rounding = rounding2 if dps: prec = dps_to_prec(dps) return self.context.make_mpf(self.func(prec, rounding)) @property def _mpf_(self): prec, rounding = self.context._prec_rounding return self.func(prec, rounding) def __repr__(self): return "<%s: %s~>" % (self.name, self.context.nstr(self(dps=15))) class _mpc(mpnumeric): """ An mpc represents a complex number using a pair of mpf:s (one for the real part and another for the imaginary part.) The mpc class behaves fairly similarly to Python's complex type. """ __slots__ = ['_mpc_'] def __new__(cls, real=0, imag=0): s = object.__new__(cls) if isinstance(real, complex_types): real, imag = real.real, real.imag elif hasattr(real, '_mpc_'): s._mpc_ = real._mpc_ return s real = cls.context.mpf(real) imag = cls.context.mpf(imag) s._mpc_ = (real._mpf_, imag._mpf_) return s real = property(lambda self: self.context.make_mpf(self._mpc_[0])) imag = property(lambda self: self.context.make_mpf(self._mpc_[1])) def __getstate__(self): return to_pickable(self._mpc_[0]), to_pickable(self._mpc_[1]) def __setstate__(self, val): self._mpc_ = from_pickable(val[0]), from_pickable(val[1]) def __repr__(s): if s.context.pretty: return str(s) r = repr(s.real)[4:-1] i = repr(s.imag)[4:-1] return "%s(real=%s, imag=%s)" % (type(s).__name__, r, i) def __str__(s): return "(%s)" % mpc_to_str(s._mpc_, s.context._str_digits) def __complex__(s): return mpc_to_complex(s._mpc_, rnd=s.context._prec_rounding[1]) def __pos__(s): cls, new, (prec, rounding) = s._ctxdata v = new(cls) v._mpc_ = mpc_pos(s._mpc_, prec, rounding) return v def __abs__(s): prec, rounding = s.context._prec_rounding v = new(s.context.mpf) v._mpf_ = mpc_abs(s._mpc_, prec, rounding) return v def __neg__(s): cls, new, (prec, rounding) = s._ctxdata v = new(cls) v._mpc_ = mpc_neg(s._mpc_, prec, rounding) return v def conjugate(s): cls, new, (prec, rounding) = s._ctxdata v = new(cls) v._mpc_ = mpc_conjugate(s._mpc_, prec, rounding) return v def __nonzero__(s): return mpc_is_nonzero(s._mpc_) __bool__ = __nonzero__ def __hash__(s): return mpc_hash(s._mpc_) @classmethod def mpc_convert_lhs(cls, x): try: y = cls.context.convert(x) return y except TypeError: return NotImplemented def __eq__(s, t): if not hasattr(t, '_mpc_'): if isinstance(t, str): return False t = s.mpc_convert_lhs(t) if t is NotImplemented: return t return s.real == t.real and s.imag == t.imag def __ne__(s, t): b = s.__eq__(t) if b is NotImplemented: return b return not b def _compare(*args): raise TypeError("no ordering relation is defined for complex numbers") __gt__ = _compare __le__ = _compare __gt__ = _compare __ge__ = _compare def __add__(s, t): cls, new, (prec, rounding) = s._ctxdata if not hasattr(t, '_mpc_'): t = s.mpc_convert_lhs(t) if t is NotImplemented: return t if hasattr(t, '_mpf_'): v = new(cls) v._mpc_ = mpc_add_mpf(s._mpc_, t._mpf_, prec, rounding) return v v = new(cls) v._mpc_ = mpc_add(s._mpc_, t._mpc_, prec, rounding) return v def __sub__(s, t): cls, new, (prec, rounding) = s._ctxdata if not hasattr(t, '_mpc_'): t = s.mpc_convert_lhs(t) if t is NotImplemented: return t if hasattr(t, '_mpf_'): v = new(cls) v._mpc_ = mpc_sub_mpf(s._mpc_, t._mpf_, prec, rounding) return v v = new(cls) v._mpc_ = mpc_sub(s._mpc_, t._mpc_, prec, rounding) return v def __mul__(s, t): cls, new, (prec, rounding) = s._ctxdata if not hasattr(t, '_mpc_'): if isinstance(t, int_types): v = new(cls) v._mpc_ = mpc_mul_int(s._mpc_, t, prec, rounding) return v t = s.mpc_convert_lhs(t) if t is NotImplemented: return t if hasattr(t, '_mpf_'): v = new(cls) v._mpc_ = mpc_mul_mpf(s._mpc_, t._mpf_, prec, rounding) return v t = s.mpc_convert_lhs(t) v = new(cls) v._mpc_ = mpc_mul(s._mpc_, t._mpc_, prec, rounding) return v def __div__(s, t): cls, new, (prec, rounding) = s._ctxdata if not hasattr(t, '_mpc_'): t = s.mpc_convert_lhs(t) if t is NotImplemented: return t if hasattr(t, '_mpf_'): v = new(cls) v._mpc_ = mpc_div_mpf(s._mpc_, t._mpf_, prec, rounding) return v v = new(cls) v._mpc_ = mpc_div(s._mpc_, t._mpc_, prec, rounding) return v def __pow__(s, t): cls, new, (prec, rounding) = s._ctxdata if isinstance(t, int_types): v = new(cls) v._mpc_ = mpc_pow_int(s._mpc_, t, prec, rounding) return v t = s.mpc_convert_lhs(t) if t is NotImplemented: return t v = new(cls) if hasattr(t, '_mpf_'): v._mpc_ = mpc_pow_mpf(s._mpc_, t._mpf_, prec, rounding) else: v._mpc_ = mpc_pow(s._mpc_, t._mpc_, prec, rounding) return v __radd__ = __add__ def __rsub__(s, t): t = s.mpc_convert_lhs(t) if t is NotImplemented: return t return t - s def __rmul__(s, t): cls, new, (prec, rounding) = s._ctxdata if isinstance(t, int_types): v = new(cls) v._mpc_ = mpc_mul_int(s._mpc_, t, prec, rounding) return v t = s.mpc_convert_lhs(t) if t is NotImplemented: return t return t * s def __rdiv__(s, t): t = s.mpc_convert_lhs(t) if t is NotImplemented: return t return t / s def __rpow__(s, t): t = s.mpc_convert_lhs(t) if t is NotImplemented: return t return t ** s __truediv__ = __div__ __rtruediv__ = __rdiv__ def ae(s, t, rel_eps=None, abs_eps=None): return s.context.almosteq(s, t, rel_eps, abs_eps) complex_types = (complex, _mpc) class PythonMPContext(object): def __init__(ctx): ctx._prec_rounding = [53, round_nearest] ctx.mpf = type('mpf', (_mpf,), {}) ctx.mpc = type('mpc', (_mpc,), {}) ctx.mpf._ctxdata = [ctx.mpf, new, ctx._prec_rounding] ctx.mpc._ctxdata = [ctx.mpc, new, ctx._prec_rounding] ctx.mpf.context = ctx ctx.mpc.context = ctx ctx.constant = type('constant', (_constant,), {}) ctx.constant._ctxdata = [ctx.mpf, new, ctx._prec_rounding] ctx.constant.context = ctx def make_mpf(ctx, v): a = new(ctx.mpf) a._mpf_ = v return a def make_mpc(ctx, v): a = new(ctx.mpc) a._mpc_ = v return a def default(ctx): ctx._prec = ctx._prec_rounding[0] = 53 ctx._dps = 15 ctx.trap_complex = False def _set_prec(ctx, n): ctx._prec = ctx._prec_rounding[0] = max(1, int(n)) ctx._dps = prec_to_dps(n) def _set_dps(ctx, n): ctx._prec = ctx._prec_rounding[0] = dps_to_prec(n) ctx._dps = max(1, int(n)) prec = property(lambda ctx: ctx._prec, _set_prec) dps = property(lambda ctx: ctx._dps, _set_dps) def convert(ctx, x, strings=True): """ Converts *x* to an ``mpf`` or ``mpc``. If *x* is of type ``mpf``, ``mpc``, ``int``, ``float``, ``complex``, the conversion will be performed losslessly. If *x* is a string, the result will be rounded to the present working precision. Strings representing fractions or complex numbers are permitted. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> mpmathify(3.5) mpf('3.5') >>> mpmathify('2.1') mpf('2.1000000000000001') >>> mpmathify('3/4') mpf('0.75') >>> mpmathify('2+3j') mpc(real='2.0', imag='3.0') """ if type(x) in ctx.types: return x if isinstance(x, int_types): return ctx.make_mpf(from_int(x)) if isinstance(x, float): return ctx.make_mpf(from_float(x)) if isinstance(x, complex): return ctx.make_mpc((from_float(x.real), from_float(x.imag))) prec, rounding = ctx._prec_rounding if isinstance(x, rational.mpq): p, q = x._mpq_ return ctx.make_mpf(from_rational(p, q, prec)) if strings and isinstance(x, basestring): try: _mpf_ = from_str(x, prec, rounding) return ctx.make_mpf(_mpf_) except ValueError: pass if hasattr(x, '_mpf_'): return ctx.make_mpf(x._mpf_) if hasattr(x, '_mpc_'): return ctx.make_mpc(x._mpc_) if hasattr(x, '_mpmath_'): return ctx.convert(x._mpmath_(prec, rounding)) return ctx._convert_fallback(x, strings) def isnan(ctx, x): """ Return *True* if *x* is a NaN (not-a-number), or for a complex number, whether either the real or complex part is NaN; otherwise return *False*:: >>> from mpmath import * >>> isnan(3.14) False >>> isnan(nan) True >>> isnan(mpc(3.14,2.72)) False >>> isnan(mpc(3.14,nan)) True """ if hasattr(x, "_mpf_"): return x._mpf_ == fnan if hasattr(x, "_mpc_"): return fnan in x._mpc_ if isinstance(x, int_types) or isinstance(x, rational.mpq): return False x = ctx.convert(x) if hasattr(x, '_mpf_') or hasattr(x, '_mpc_'): return ctx.isnan(x) raise TypeError("isnan() needs a number as input") def isinf(ctx, x): """ Return *True* if the absolute value of *x* is infinite; otherwise return *False*:: >>> from mpmath import * >>> isinf(inf) True >>> isinf(-inf) True >>> isinf(3) False >>> isinf(3+4j) False >>> isinf(mpc(3,inf)) True >>> isinf(mpc(inf,3)) True """ if hasattr(x, "_mpf_"): return x._mpf_ in (finf, fninf) if hasattr(x, "_mpc_"): re, im = x._mpc_ return re in (finf, fninf) or im in (finf, fninf) if isinstance(x, int_types) or isinstance(x, rational.mpq): return False x = ctx.convert(x) if hasattr(x, '_mpf_') or hasattr(x, '_mpc_'): return ctx.isinf(x) raise TypeError("isinf() needs a number as input") def isnormal(ctx, x): """ Determine whether *x* is "normal" in the sense of floating-point representation; that is, return *False* if *x* is zero, an infinity or NaN; otherwise return *True*. By extension, a complex number *x* is considered "normal" if its magnitude is normal:: >>> from mpmath import * >>> isnormal(3) True >>> isnormal(0) False >>> isnormal(inf); isnormal(-inf); isnormal(nan) False False False >>> isnormal(0+0j) False >>> isnormal(0+3j) True >>> isnormal(mpc(2,nan)) False """ if hasattr(x, "_mpf_"): return bool(x._mpf_[1]) if hasattr(x, "_mpc_"): re, im = x._mpc_ re_normal = bool(re[1]) im_normal = bool(im[1]) if re == fzero: return im_normal if im == fzero: return re_normal return re_normal and im_normal if isinstance(x, int_types) or isinstance(x, rational.mpq): return bool(x) x = ctx.convert(x) if hasattr(x, '_mpf_') or hasattr(x, '_mpc_'): return ctx.isnormal(x) raise TypeError("isnormal() needs a number as input") def isint(ctx, x, gaussian=False): """ Return *True* if *x* is integer-valued; otherwise return *False*:: >>> from mpmath import * >>> isint(3) True >>> isint(mpf(3)) True >>> isint(3.2) False >>> isint(inf) False Optionally, Gaussian integers can be checked for:: >>> isint(3+0j) True >>> isint(3+2j) False >>> isint(3+2j, gaussian=True) True """ if isinstance(x, int_types): return True if hasattr(x, "_mpf_"): sign, man, exp, bc = xval = x._mpf_ return bool((man and exp >= 0) or xval == fzero) if hasattr(x, "_mpc_"): re, im = x._mpc_ rsign, rman, rexp, rbc = re isign, iman, iexp, ibc = im re_isint = (rman and rexp >= 0) or re == fzero if gaussian: im_isint = (iman and iexp >= 0) or im == fzero return re_isint and im_isint return re_isint and im == fzero if isinstance(x, rational.mpq): p, q = x._mpq_ return p % q == 0 x = ctx.convert(x) if hasattr(x, '_mpf_') or hasattr(x, '_mpc_'): return ctx.isint(x, gaussian) raise TypeError("isint() needs a number as input") def fsum(ctx, terms, absolute=False, squared=False): """ Calculates a sum containing a finite number of terms (for infinite series, see :func:`~mpmath.nsum`). The terms will be converted to mpmath numbers. For len(terms) > 2, this function is generally faster and produces more accurate results than the builtin Python function :func:`sum`. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fsum([1, 2, 0.5, 7]) mpf('10.5') With squared=True each term is squared, and with absolute=True the absolute value of each term is used. """ prec, rnd = ctx._prec_rounding real = [] imag = [] other = 0 for term in terms: reval = imval = 0 if hasattr(term, "_mpf_"): reval = term._mpf_ elif hasattr(term, "_mpc_"): reval, imval = term._mpc_ else: term = ctx.convert(term) if hasattr(term, "_mpf_"): reval = term._mpf_ elif hasattr(term, "_mpc_"): reval, imval = term._mpc_ else: if absolute: term = ctx.absmax(term) if squared: term = term**2 other += term continue if imval: if squared: if absolute: real.append(mpf_mul(reval,reval)) real.append(mpf_mul(imval,imval)) else: reval, imval = mpc_pow_int((reval,imval),2,prec+10) real.append(reval) imag.append(imval) elif absolute: real.append(mpc_abs((reval,imval), prec)) else: real.append(reval) imag.append(imval) else: if squared: reval = mpf_mul(reval, reval) elif absolute: reval = mpf_abs(reval) real.append(reval) s = mpf_sum(real, prec, rnd, absolute) if imag: s = ctx.make_mpc((s, mpf_sum(imag, prec, rnd))) else: s = ctx.make_mpf(s) if other is 0: return s else: return s + other def fdot(ctx, A, B=None, conjugate=False): r""" Computes the dot product of the iterables `A` and `B`, .. math :: \sum_{k=0} A_k B_k. Alternatively, :func:`~mpmath.fdot` accepts a single iterable of pairs. In other words, ``fdot(A,B)`` and ``fdot(zip(A,B))`` are equivalent. The elements are automatically converted to mpmath numbers. With ``conjugate=True``, the elements in the second vector will be conjugated: .. math :: \sum_{k=0} A_k \overline{B_k} **Examples** >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> A = [2, 1.5, 3] >>> B = [1, -1, 2] >>> fdot(A, B) mpf('6.5') >>> list(zip(A, B)) [(2, 1), (1.5, -1), (3, 2)] >>> fdot(_) mpf('6.5') >>> A = [2, 1.5, 3j] >>> B = [1+j, 3, -1-j] >>> fdot(A, B) mpc(real='9.5', imag='-1.0') >>> fdot(A, B, conjugate=True) mpc(real='3.5', imag='-5.0') """ if B: A = zip(A, B) prec, rnd = ctx._prec_rounding real = [] imag = [] other = 0 hasattr_ = hasattr types = (ctx.mpf, ctx.mpc) for a, b in A: if type(a) not in types: a = ctx.convert(a) if type(b) not in types: b = ctx.convert(b) a_real = hasattr_(a, "_mpf_") b_real = hasattr_(b, "_mpf_") if a_real and b_real: real.append(mpf_mul(a._mpf_, b._mpf_)) continue a_complex = hasattr_(a, "_mpc_") b_complex = hasattr_(b, "_mpc_") if a_real and b_complex: aval = a._mpf_ bre, bim = b._mpc_ if conjugate: bim = mpf_neg(bim) real.append(mpf_mul(aval, bre)) imag.append(mpf_mul(aval, bim)) elif b_real and a_complex: are, aim = a._mpc_ bval = b._mpf_ real.append(mpf_mul(are, bval)) imag.append(mpf_mul(aim, bval)) elif a_complex and b_complex: #re, im = mpc_mul(a._mpc_, b._mpc_, prec+20) are, aim = a._mpc_ bre, bim = b._mpc_ if conjugate: bim = mpf_neg(bim) real.append(mpf_mul(are, bre)) real.append(mpf_neg(mpf_mul(aim, bim))) imag.append(mpf_mul(are, bim)) imag.append(mpf_mul(aim, bre)) else: if conjugate: other += a*ctx.conj(b) else: other += a*b s = mpf_sum(real, prec, rnd) if imag: s = ctx.make_mpc((s, mpf_sum(imag, prec, rnd))) else: s = ctx.make_mpf(s) if other is 0: return s else: return s + other def _wrap_libmp_function(ctx, mpf_f, mpc_f=None, mpi_f=None, doc=""): """ Given a low-level mpf_ function, and optionally similar functions for mpc_ and mpi_, defines the function as a context method. It is assumed that the return type is the same as that of the input; the exception is that propagation from mpf to mpc is possible by raising ComplexResult. """ def f(x, **kwargs): if type(x) not in ctx.types: x = ctx.convert(x) prec, rounding = ctx._prec_rounding if kwargs: prec = kwargs.get('prec', prec) if 'dps' in kwargs: prec = dps_to_prec(kwargs['dps']) rounding = kwargs.get('rounding', rounding) if hasattr(x, '_mpf_'): try: return ctx.make_mpf(mpf_f(x._mpf_, prec, rounding)) except ComplexResult: # Handle propagation to complex if ctx.trap_complex: raise return ctx.make_mpc(mpc_f((x._mpf_, fzero), prec, rounding)) elif hasattr(x, '_mpc_'): return ctx.make_mpc(mpc_f(x._mpc_, prec, rounding)) raise NotImplementedError("%s of a %s" % (name, type(x))) name = mpf_f.__name__[4:] f.__doc__ = function_docs.__dict__.get(name, "Computes the %s of x" % doc) return f # Called by SpecialFunctions.__init__() @classmethod def _wrap_specfun(cls, name, f, wrap): if wrap: def f_wrapped(ctx, *args, **kwargs): convert = ctx.convert args = [convert(a) for a in args] prec = ctx.prec try: ctx.prec += 10 retval = f(ctx, *args, **kwargs) finally: ctx.prec = prec return +retval else: f_wrapped = f f_wrapped.__doc__ = function_docs.__dict__.get(name, f.__doc__) setattr(cls, name, f_wrapped) def _convert_param(ctx, x): if hasattr(x, "_mpc_"): v, im = x._mpc_ if im != fzero: return x, 'C' elif hasattr(x, "_mpf_"): v = x._mpf_ else: if type(x) in int_types: return int(x), 'Z' p = None if isinstance(x, tuple): p, q = x elif hasattr(x, '_mpq_'): p, q = x._mpq_ elif isinstance(x, basestring) and '/' in x: p, q = x.split('/') p = int(p) q = int(q) if p is not None: if not p % q: return p // q, 'Z' return ctx.mpq(p,q), 'Q' x = ctx.convert(x) if hasattr(x, "_mpc_"): v, im = x._mpc_ if im != fzero: return x, 'C' elif hasattr(x, "_mpf_"): v = x._mpf_ else: return x, 'U' sign, man, exp, bc = v if man: if exp >= -4: if sign: man = -man if exp >= 0: return int(man) << exp, 'Z' if exp >= -4: p, q = int(man), (1<<(-exp)) return ctx.mpq(p,q), 'Q' x = ctx.make_mpf(v) return x, 'R' elif not exp: return 0, 'Z' else: return x, 'U' def _mpf_mag(ctx, x): sign, man, exp, bc = x if man: return exp+bc if x == fzero: return ctx.ninf if x == finf or x == fninf: return ctx.inf return ctx.nan def mag(ctx, x): """ Quick logarithmic magnitude estimate of a number. Returns an integer or infinity `m` such that `|x| <= 2^m`. It is not guaranteed that `m` is an optimal bound, but it will never be too large by more than 2 (and probably not more than 1). **Examples** >>> from mpmath import * >>> mp.pretty = True >>> mag(10), mag(10.0), mag(mpf(10)), int(ceil(log(10,2))) (4, 4, 4, 4) >>> mag(10j), mag(10+10j) (4, 5) >>> mag(0.01), int(ceil(log(0.01,2))) (-6, -6) >>> mag(0), mag(inf), mag(-inf), mag(nan) (-inf, +inf, +inf, nan) """ if hasattr(x, "_mpf_"): return ctx._mpf_mag(x._mpf_) elif hasattr(x, "_mpc_"): r, i = x._mpc_ if r == fzero: return ctx._mpf_mag(i) if i == fzero: return ctx._mpf_mag(r) return 1+max(ctx._mpf_mag(r), ctx._mpf_mag(i)) elif isinstance(x, int_types): if x: return bitcount(abs(x)) return ctx.ninf elif isinstance(x, rational.mpq): p, q = x._mpq_ if p: return 1 + bitcount(abs(p)) - bitcount(q) return ctx.ninf else: x = ctx.convert(x) if hasattr(x, "_mpf_") or hasattr(x, "_mpc_"): return ctx.mag(x) else: raise TypeError("requires an mpf/mpc") # Register with "numbers" ABC # We do not subclass, hence we do not use the @abstractmethod checks. While # this is less invasive it may turn out that we do not actually support # parts of the expected interfaces. See # http://docs.python.org/2/library/numbers.html for list of abstract # methods. try: import numbers numbers.Complex.register(_mpc) numbers.Real.register(_mpf) except ImportError: pass mpmath-1.0.0/mpmath/function_docs.py000066400000000000000000010424071316273626600175170ustar00rootroot00000000000000""" Extended docstrings for functions.py """ pi = r""" `\pi`, roughly equal to 3.141592654, represents the area of the unit circle, the half-period of trigonometric functions, and many other things in mathematics. Mpmath can evaluate `\pi` to arbitrary precision:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +pi 3.1415926535897932384626433832795028841971693993751 This shows digits 99991-100000 of `\pi`:: >>> mp.dps = 100000 >>> str(pi)[-10:] '5549362464' **Possible issues** :data:`pi` always rounds to the nearest floating-point number when used. This means that exact mathematical identities involving `\pi` will generally not be preserved in floating-point arithmetic. In particular, multiples of :data:`pi` (except for the trivial case ``0*pi``) are *not* the exact roots of :func:`~mpmath.sin`, but differ roughly by the current epsilon:: >>> mp.dps = 15 >>> sin(pi) 1.22464679914735e-16 One solution is to use the :func:`~mpmath.sinpi` function instead:: >>> sinpi(1) 0.0 See the documentation of trigonometric functions for additional details. """ degree = r""" Represents one degree of angle, `1^{\circ} = \pi/180`, or about 0.01745329. This constant may be evaluated to arbitrary precision:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +degree 0.017453292519943295769236907684886127134428718885417 The :data:`degree` object is convenient for conversion to radians:: >>> sin(30 * degree) 0.5 >>> asin(0.5) / degree 30.0 """ e = r""" The transcendental number `e` = 2.718281828... is the base of the natural logarithm (:func:`~mpmath.ln`) and of the exponential function (:func:`~mpmath.exp`). Mpmath can be evaluate `e` to arbitrary precision:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +e 2.7182818284590452353602874713526624977572470937 This shows digits 99991-100000 of `e`:: >>> mp.dps = 100000 >>> str(e)[-10:] '2100427165' **Possible issues** :data:`e` always rounds to the nearest floating-point number when used, and mathematical identities involving `e` may not hold in floating-point arithmetic. For example, ``ln(e)`` might not evaluate exactly to 1. In particular, don't use ``e**x`` to compute the exponential function. Use ``exp(x)`` instead; this is both faster and more accurate. """ phi = r""" Represents the golden ratio `\phi = (1+\sqrt 5)/2`, approximately equal to 1.6180339887. To high precision, its value is:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +phi 1.6180339887498948482045868343656381177203091798058 Formulas for the golden ratio include the following:: >>> (1+sqrt(5))/2 1.6180339887498948482045868343656381177203091798058 >>> findroot(lambda x: x**2-x-1, 1) 1.6180339887498948482045868343656381177203091798058 >>> limit(lambda n: fib(n+1)/fib(n), inf) 1.6180339887498948482045868343656381177203091798058 """ euler = r""" Euler's constant or the Euler-Mascheroni constant `\gamma` = 0.57721566... is a number of central importance to number theory and special functions. It is defined as the limit .. math :: \gamma = \lim_{n\to\infty} H_n - \log n where `H_n = 1 + \frac{1}{2} + \ldots + \frac{1}{n}` is a harmonic number (see :func:`~mpmath.harmonic`). Evaluation of `\gamma` is supported at arbitrary precision:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +euler 0.57721566490153286060651209008240243104215933593992 We can also compute `\gamma` directly from the definition, although this is less efficient:: >>> limit(lambda n: harmonic(n)-log(n), inf) 0.57721566490153286060651209008240243104215933593992 This shows digits 9991-10000 of `\gamma`:: >>> mp.dps = 10000 >>> str(euler)[-10:] '4679858165' Integrals, series, and representations for `\gamma` in terms of special functions include the following (there are many others):: >>> mp.dps = 25 >>> -quad(lambda x: exp(-x)*log(x), [0,inf]) 0.5772156649015328606065121 >>> quad(lambda x,y: (x-1)/(1-x*y)/log(x*y), [0,1], [0,1]) 0.5772156649015328606065121 >>> nsum(lambda k: 1/k-log(1+1/k), [1,inf]) 0.5772156649015328606065121 >>> nsum(lambda k: (-1)**k*zeta(k)/k, [2,inf]) 0.5772156649015328606065121 >>> -diff(gamma, 1) 0.5772156649015328606065121 >>> limit(lambda x: 1/x-gamma(x), 0) 0.5772156649015328606065121 >>> limit(lambda x: zeta(x)-1/(x-1), 1) 0.5772156649015328606065121 >>> (log(2*pi*nprod(lambda n: ... exp(-2+2/n)*(1+2/n)**n, [1,inf]))-3)/2 0.5772156649015328606065121 For generalizations of the identities `\gamma = -\Gamma'(1)` and `\gamma = \lim_{x\to1} \zeta(x)-1/(x-1)`, see :func:`~mpmath.psi` and :func:`~mpmath.stieltjes` respectively. """ catalan = r""" Catalan's constant `K` = 0.91596559... is given by the infinite series .. math :: K = \sum_{k=0}^{\infty} \frac{(-1)^k}{(2k+1)^2}. Mpmath can evaluate it to arbitrary precision:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +catalan 0.91596559417721901505460351493238411077414937428167 One can also compute `K` directly from the definition, although this is significantly less efficient:: >>> nsum(lambda k: (-1)**k/(2*k+1)**2, [0, inf]) 0.91596559417721901505460351493238411077414937428167 This shows digits 9991-10000 of `K`:: >>> mp.dps = 10000 >>> str(catalan)[-10:] '9537871503' Catalan's constant has numerous integral representations:: >>> mp.dps = 50 >>> quad(lambda x: -log(x)/(1+x**2), [0, 1]) 0.91596559417721901505460351493238411077414937428167 >>> quad(lambda x: atan(x)/x, [0, 1]) 0.91596559417721901505460351493238411077414937428167 >>> quad(lambda x: ellipk(x**2)/2, [0, 1]) 0.91596559417721901505460351493238411077414937428167 >>> quad(lambda x,y: 1/(1+(x*y)**2), [0, 1], [0, 1]) 0.91596559417721901505460351493238411077414937428167 As well as series representations:: >>> pi*log(sqrt(3)+2)/8 + 3*nsum(lambda n: ... (fac(n)/(2*n+1))**2/fac(2*n), [0, inf])/8 0.91596559417721901505460351493238411077414937428167 >>> 1-nsum(lambda n: n*zeta(2*n+1)/16**n, [1,inf]) 0.91596559417721901505460351493238411077414937428167 """ khinchin = r""" Khinchin's constant `K` = 2.68542... is a number that appears in the theory of continued fractions. Mpmath can evaluate it to arbitrary precision:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +khinchin 2.6854520010653064453097148354817956938203822939945 An integral representation is:: >>> I = quad(lambda x: log((1-x**2)/sincpi(x))/x/(1+x), [0, 1]) >>> 2*exp(1/log(2)*I) 2.6854520010653064453097148354817956938203822939945 The computation of ``khinchin`` is based on an efficient implementation of the following series:: >>> f = lambda n: (zeta(2*n)-1)/n*sum((-1)**(k+1)/mpf(k) ... for k in range(1,2*int(n))) >>> exp(nsum(f, [1,inf])/log(2)) 2.6854520010653064453097148354817956938203822939945 """ glaisher = r""" Glaisher's constant `A`, also known as the Glaisher-Kinkelin constant, is a number approximately equal to 1.282427129 that sometimes appears in formulas related to gamma and zeta functions. It is also related to the Barnes G-function (see :func:`~mpmath.barnesg`). The constant is defined as `A = \exp(1/12-\zeta'(-1))` where `\zeta'(s)` denotes the derivative of the Riemann zeta function (see :func:`~mpmath.zeta`). Mpmath can evaluate Glaisher's constant to arbitrary precision: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +glaisher 1.282427129100622636875342568869791727767688927325 We can verify that the value computed by :data:`glaisher` is correct using mpmath's facilities for numerical differentiation and arbitrary evaluation of the zeta function: >>> exp(mpf(1)/12 - diff(zeta, -1)) 1.282427129100622636875342568869791727767688927325 Here is an example of an integral that can be evaluated in terms of Glaisher's constant: >>> mp.dps = 15 >>> quad(lambda x: log(gamma(x)), [1, 1.5]) -0.0428537406502909 >>> -0.5 - 7*log(2)/24 + log(pi)/4 + 3*log(glaisher)/2 -0.042853740650291 Mpmath computes Glaisher's constant by applying Euler-Maclaurin summation to a slowly convergent series. The implementation is reasonably efficient up to about 10,000 digits. See the source code for additional details. References: http://mathworld.wolfram.com/Glaisher-KinkelinConstant.html """ apery = r""" Represents Apery's constant, which is the irrational number approximately equal to 1.2020569 given by .. math :: \zeta(3) = \sum_{k=1}^\infty\frac{1}{k^3}. The calculation is based on an efficient hypergeometric series. To 50 decimal places, the value is given by:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +apery 1.2020569031595942853997381615114499907649862923405 Other ways to evaluate Apery's constant using mpmath include:: >>> zeta(3) 1.2020569031595942853997381615114499907649862923405 >>> -psi(2,1)/2 1.2020569031595942853997381615114499907649862923405 >>> 8*nsum(lambda k: 1/(2*k+1)**3, [0,inf])/7 1.2020569031595942853997381615114499907649862923405 >>> f = lambda k: 2/k**3/(exp(2*pi*k)-1) >>> 7*pi**3/180 - nsum(f, [1,inf]) 1.2020569031595942853997381615114499907649862923405 This shows digits 9991-10000 of Apery's constant:: >>> mp.dps = 10000 >>> str(apery)[-10:] '3189504235' """ mertens = r""" Represents the Mertens or Meissel-Mertens constant, which is the prime number analog of Euler's constant: .. math :: B_1 = \lim_{N\to\infty} \left(\sum_{p_k \le N} \frac{1}{p_k} - \log \log N \right) Here `p_k` denotes the `k`-th prime number. Other names for this constant include the Hadamard-de la Vallee-Poussin constant or the prime reciprocal constant. The following gives the Mertens constant to 50 digits:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +mertens 0.2614972128476427837554268386086958590515666482612 References: http://mathworld.wolfram.com/MertensConstant.html """ twinprime = r""" Represents the twin prime constant, which is the factor `C_2` featuring in the Hardy-Littlewood conjecture for the growth of the twin prime counting function, .. math :: \pi_2(n) \sim 2 C_2 \frac{n}{\log^2 n}. It is given by the product over primes .. math :: C_2 = \prod_{p\ge3} \frac{p(p-2)}{(p-1)^2} \approx 0.66016 Computing `C_2` to 50 digits:: >>> from mpmath import * >>> mp.dps = 50; mp.pretty = True >>> +twinprime 0.66016181584686957392781211001455577843262336028473 References: http://mathworld.wolfram.com/TwinPrimesConstant.html """ ln = r""" Computes the natural logarithm of `x`, `\ln x`. See :func:`~mpmath.log` for additional documentation.""" sqrt = r""" ``sqrt(x)`` gives the principal square root of `x`, `\sqrt x`. For positive real numbers, the principal root is simply the positive square root. For arbitrary complex numbers, the principal square root is defined to satisfy `\sqrt x = \exp(\log(x)/2)`. The function thus has a branch cut along the negative half real axis. For all mpmath numbers ``x``, calling ``sqrt(x)`` is equivalent to performing ``x**0.5``. **Examples** Basic examples and limits:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> sqrt(10) 3.16227766016838 >>> sqrt(100) 10.0 >>> sqrt(-4) (0.0 + 2.0j) >>> sqrt(1+1j) (1.09868411346781 + 0.455089860562227j) >>> sqrt(inf) +inf Square root evaluation is fast at huge precision:: >>> mp.dps = 50000 >>> a = sqrt(3) >>> str(a)[-10:] '9329332814' :func:`mpmath.iv.sqrt` supports interval arguments:: >>> iv.dps = 15; iv.pretty = True >>> iv.sqrt([16,100]) [4.0, 10.0] >>> iv.sqrt(2) [1.4142135623730949234, 1.4142135623730951455] >>> iv.sqrt(2) ** 2 [1.9999999999999995559, 2.0000000000000004441] """ cbrt = r""" ``cbrt(x)`` computes the cube root of `x`, `x^{1/3}`. This function is faster and more accurate than raising to a floating-point fraction:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> 125**(mpf(1)/3) mpf('4.9999999999999991') >>> cbrt(125) mpf('5.0') Every nonzero complex number has three cube roots. This function returns the cube root defined by `\exp(\log(x)/3)` where the principal branch of the natural logarithm is used. Note that this does not give a real cube root for negative real numbers:: >>> mp.pretty = True >>> cbrt(-1) (0.5 + 0.866025403784439j) """ exp = r""" Computes the exponential function, .. math :: \exp(x) = e^x = \sum_{k=0}^{\infty} \frac{x^k}{k!}. For complex numbers, the exponential function also satisfies .. math :: \exp(x+yi) = e^x (\cos y + i \sin y). **Basic examples** Some values of the exponential function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> exp(0) 1.0 >>> exp(1) 2.718281828459045235360287 >>> exp(-1) 0.3678794411714423215955238 >>> exp(inf) +inf >>> exp(-inf) 0.0 Arguments can be arbitrarily large:: >>> exp(10000) 8.806818225662921587261496e+4342 >>> exp(-10000) 1.135483865314736098540939e-4343 Evaluation is supported for interval arguments via :func:`mpmath.iv.exp`:: >>> iv.dps = 25; iv.pretty = True >>> iv.exp([-inf,0]) [0.0, 1.0] >>> iv.exp([0,1]) [1.0, 2.71828182845904523536028749558] The exponential function can be evaluated efficiently to arbitrary precision:: >>> mp.dps = 10000 >>> exp(pi) #doctest: +ELLIPSIS 23.140692632779269005729...8984304016040616 **Functional properties** Numerical verification of Euler's identity for the complex exponential function:: >>> mp.dps = 15 >>> exp(j*pi)+1 (0.0 + 1.22464679914735e-16j) >>> chop(exp(j*pi)+1) 0.0 This recovers the coefficients (reciprocal factorials) in the Maclaurin series expansion of exp:: >>> nprint(taylor(exp, 0, 5)) [1.0, 1.0, 0.5, 0.166667, 0.0416667, 0.00833333] The exponential function is its own derivative and antiderivative:: >>> exp(pi) 23.1406926327793 >>> diff(exp, pi) 23.1406926327793 >>> quad(exp, [-inf, pi]) 23.1406926327793 The exponential function can be evaluated using various methods, including direct summation of the series, limits, and solving the defining differential equation:: >>> nsum(lambda k: pi**k/fac(k), [0,inf]) 23.1406926327793 >>> limit(lambda k: (1+pi/k)**k, inf) 23.1406926327793 >>> odefun(lambda t, x: x, 0, 1)(pi) 23.1406926327793 """ cosh = r""" Computes the hyperbolic cosine of `x`, `\cosh(x) = (e^x + e^{-x})/2`. Values and limits include:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> cosh(0) 1.0 >>> cosh(1) 1.543080634815243778477906 >>> cosh(-inf), cosh(+inf) (+inf, +inf) The hyperbolic cosine is an even, convex function with a global minimum at `x = 0`, having a Maclaurin series that starts:: >>> nprint(chop(taylor(cosh, 0, 5))) [1.0, 0.0, 0.5, 0.0, 0.0416667, 0.0] Generalized to complex numbers, the hyperbolic cosine is equivalent to a cosine with the argument rotated in the imaginary direction, or `\cosh x = \cos ix`:: >>> cosh(2+3j) (-3.724545504915322565473971 + 0.5118225699873846088344638j) >>> cos(3-2j) (-3.724545504915322565473971 + 0.5118225699873846088344638j) """ sinh = r""" Computes the hyperbolic sine of `x`, `\sinh(x) = (e^x - e^{-x})/2`. Values and limits include:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> sinh(0) 0.0 >>> sinh(1) 1.175201193643801456882382 >>> sinh(-inf), sinh(+inf) (-inf, +inf) The hyperbolic sine is an odd function, with a Maclaurin series that starts:: >>> nprint(chop(taylor(sinh, 0, 5))) [0.0, 1.0, 0.0, 0.166667, 0.0, 0.00833333] Generalized to complex numbers, the hyperbolic sine is essentially a sine with a rotation `i` applied to the argument; more precisely, `\sinh x = -i \sin ix`:: >>> sinh(2+3j) (-3.590564589985779952012565 + 0.5309210862485198052670401j) >>> j*sin(3-2j) (-3.590564589985779952012565 + 0.5309210862485198052670401j) """ tanh = r""" Computes the hyperbolic tangent of `x`, `\tanh(x) = \sinh(x)/\cosh(x)`. Values and limits include:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> tanh(0) 0.0 >>> tanh(1) 0.7615941559557648881194583 >>> tanh(-inf), tanh(inf) (-1.0, 1.0) The hyperbolic tangent is an odd, sigmoidal function, similar to the inverse tangent and error function. Its Maclaurin series is:: >>> nprint(chop(taylor(tanh, 0, 5))) [0.0, 1.0, 0.0, -0.333333, 0.0, 0.133333] Generalized to complex numbers, the hyperbolic tangent is essentially a tangent with a rotation `i` applied to the argument; more precisely, `\tanh x = -i \tan ix`:: >>> tanh(2+3j) (0.9653858790221331242784803 - 0.009884375038322493720314034j) >>> j*tan(3-2j) (0.9653858790221331242784803 - 0.009884375038322493720314034j) """ cos = r""" Computes the cosine of `x`, `\cos(x)`. >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> cos(pi/3) 0.5 >>> cos(100000001) -0.9802850113244713353133243 >>> cos(2+3j) (-4.189625690968807230132555 - 9.109227893755336597979197j) >>> cos(inf) nan >>> nprint(chop(taylor(cos, 0, 6))) [1.0, 0.0, -0.5, 0.0, 0.0416667, 0.0, -0.00138889] Intervals are supported via :func:`mpmath.iv.cos`:: >>> iv.dps = 25; iv.pretty = True >>> iv.cos([0,1]) [0.540302305868139717400936602301, 1.0] >>> iv.cos([0,2]) [-0.41614683654714238699756823214, 1.0] """ sin = r""" Computes the sine of `x`, `\sin(x)`. >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> sin(pi/3) 0.8660254037844386467637232 >>> sin(100000001) 0.1975887055794968911438743 >>> sin(2+3j) (9.1544991469114295734673 - 4.168906959966564350754813j) >>> sin(inf) nan >>> nprint(chop(taylor(sin, 0, 6))) [0.0, 1.0, 0.0, -0.166667, 0.0, 0.00833333, 0.0] Intervals are supported via :func:`mpmath.iv.sin`:: >>> iv.dps = 25; iv.pretty = True >>> iv.sin([0,1]) [0.0, 0.841470984807896506652502331201] >>> iv.sin([0,2]) [0.0, 1.0] """ tan = r""" Computes the tangent of `x`, `\tan(x) = \frac{\sin(x)}{\cos(x)}`. The tangent function is singular at `x = (n+1/2)\pi`, but ``tan(x)`` always returns a finite result since `(n+1/2)\pi` cannot be represented exactly using floating-point arithmetic. >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> tan(pi/3) 1.732050807568877293527446 >>> tan(100000001) -0.2015625081449864533091058 >>> tan(2+3j) (-0.003764025641504248292751221 + 1.003238627353609801446359j) >>> tan(inf) nan >>> nprint(chop(taylor(tan, 0, 6))) [0.0, 1.0, 0.0, 0.333333, 0.0, 0.133333, 0.0] Intervals are supported via :func:`mpmath.iv.tan`:: >>> iv.dps = 25; iv.pretty = True >>> iv.tan([0,1]) [0.0, 1.55740772465490223050697482944] >>> iv.tan([0,2]) # Interval includes a singularity [-inf, +inf] """ sec = r""" Computes the secant of `x`, `\mathrm{sec}(x) = \frac{1}{\cos(x)}`. The secant function is singular at `x = (n+1/2)\pi`, but ``sec(x)`` always returns a finite result since `(n+1/2)\pi` cannot be represented exactly using floating-point arithmetic. >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> sec(pi/3) 2.0 >>> sec(10000001) -1.184723164360392819100265 >>> sec(2+3j) (-0.04167496441114427004834991 + 0.0906111371962375965296612j) >>> sec(inf) nan >>> nprint(chop(taylor(sec, 0, 6))) [1.0, 0.0, 0.5, 0.0, 0.208333, 0.0, 0.0847222] Intervals are supported via :func:`mpmath.iv.sec`:: >>> iv.dps = 25; iv.pretty = True >>> iv.sec([0,1]) [1.0, 1.85081571768092561791175326276] >>> iv.sec([0,2]) # Interval includes a singularity [-inf, +inf] """ csc = r""" Computes the cosecant of `x`, `\mathrm{csc}(x) = \frac{1}{\sin(x)}`. This cosecant function is singular at `x = n \pi`, but with the exception of the point `x = 0`, ``csc(x)`` returns a finite result since `n \pi` cannot be represented exactly using floating-point arithmetic. >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> csc(pi/3) 1.154700538379251529018298 >>> csc(10000001) -1.864910497503629858938891 >>> csc(2+3j) (0.09047320975320743980579048 + 0.04120098628857412646300981j) >>> csc(inf) nan Intervals are supported via :func:`mpmath.iv.csc`:: >>> iv.dps = 25; iv.pretty = True >>> iv.csc([0,1]) # Interval includes a singularity [1.18839510577812121626159943988, +inf] >>> iv.csc([0,2]) [1.0, +inf] """ cot = r""" Computes the cotangent of `x`, `\mathrm{cot}(x) = \frac{1}{\tan(x)} = \frac{\cos(x)}{\sin(x)}`. This cotangent function is singular at `x = n \pi`, but with the exception of the point `x = 0`, ``cot(x)`` returns a finite result since `n \pi` cannot be represented exactly using floating-point arithmetic. >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> cot(pi/3) 0.5773502691896257645091488 >>> cot(10000001) 1.574131876209625656003562 >>> cot(2+3j) (-0.003739710376336956660117409 - 0.9967577965693583104609688j) >>> cot(inf) nan Intervals are supported via :func:`mpmath.iv.cot`:: >>> iv.dps = 25; iv.pretty = True >>> iv.cot([0,1]) # Interval includes a singularity [0.642092615934330703006419974862, +inf] >>> iv.cot([1,2]) [-inf, +inf] """ acos = r""" Computes the inverse cosine or arccosine of `x`, `\cos^{-1}(x)`. Since `-1 \le \cos(x) \le 1` for real `x`, the inverse cosine is real-valued only for `-1 \le x \le 1`. On this interval, :func:`~mpmath.acos` is defined to be a monotonically decreasing function assuming values between `+\pi` and `0`. Basic values are:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> acos(-1) 3.141592653589793238462643 >>> acos(0) 1.570796326794896619231322 >>> acos(1) 0.0 >>> nprint(chop(taylor(acos, 0, 6))) [1.5708, -1.0, 0.0, -0.166667, 0.0, -0.075, 0.0] :func:`~mpmath.acos` is defined so as to be a proper inverse function of `\cos(\theta)` for `0 \le \theta < \pi`. We have `\cos(\cos^{-1}(x)) = x` for all `x`, but `\cos^{-1}(\cos(x)) = x` only for `0 \le \Re[x] < \pi`:: >>> for x in [1, 10, -1, 2+3j, 10+3j]: ... print("%s %s" % (cos(acos(x)), acos(cos(x)))) ... 1.0 1.0 (10.0 + 0.0j) 2.566370614359172953850574 -1.0 1.0 (2.0 + 3.0j) (2.0 + 3.0j) (10.0 + 3.0j) (2.566370614359172953850574 - 3.0j) The inverse cosine has two branch points: `x = \pm 1`. :func:`~mpmath.acos` places the branch cuts along the line segments `(-\infty, -1)` and `(+1, +\infty)`. In general, .. math :: \cos^{-1}(x) = \frac{\pi}{2} + i \log\left(ix + \sqrt{1-x^2} \right) where the principal-branch log and square root are implied. """ asin = r""" Computes the inverse sine or arcsine of `x`, `\sin^{-1}(x)`. Since `-1 \le \sin(x) \le 1` for real `x`, the inverse sine is real-valued only for `-1 \le x \le 1`. On this interval, it is defined to be a monotonically increasing function assuming values between `-\pi/2` and `\pi/2`. Basic values are:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> asin(-1) -1.570796326794896619231322 >>> asin(0) 0.0 >>> asin(1) 1.570796326794896619231322 >>> nprint(chop(taylor(asin, 0, 6))) [0.0, 1.0, 0.0, 0.166667, 0.0, 0.075, 0.0] :func:`~mpmath.asin` is defined so as to be a proper inverse function of `\sin(\theta)` for `-\pi/2 < \theta < \pi/2`. We have `\sin(\sin^{-1}(x)) = x` for all `x`, but `\sin^{-1}(\sin(x)) = x` only for `-\pi/2 < \Re[x] < \pi/2`:: >>> for x in [1, 10, -1, 1+3j, -2+3j]: ... print("%s %s" % (chop(sin(asin(x))), asin(sin(x)))) ... 1.0 1.0 10.0 -0.5752220392306202846120698 -1.0 -1.0 (1.0 + 3.0j) (1.0 + 3.0j) (-2.0 + 3.0j) (-1.141592653589793238462643 - 3.0j) The inverse sine has two branch points: `x = \pm 1`. :func:`~mpmath.asin` places the branch cuts along the line segments `(-\infty, -1)` and `(+1, +\infty)`. In general, .. math :: \sin^{-1}(x) = -i \log\left(ix + \sqrt{1-x^2} \right) where the principal-branch log and square root are implied. """ atan = r""" Computes the inverse tangent or arctangent of `x`, `\tan^{-1}(x)`. This is a real-valued function for all real `x`, with range `(-\pi/2, \pi/2)`. Basic values are:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> atan(-inf) -1.570796326794896619231322 >>> atan(-1) -0.7853981633974483096156609 >>> atan(0) 0.0 >>> atan(1) 0.7853981633974483096156609 >>> atan(inf) 1.570796326794896619231322 >>> nprint(chop(taylor(atan, 0, 6))) [0.0, 1.0, 0.0, -0.333333, 0.0, 0.2, 0.0] The inverse tangent is often used to compute angles. However, the atan2 function is often better for this as it preserves sign (see :func:`~mpmath.atan2`). :func:`~mpmath.atan` is defined so as to be a proper inverse function of `\tan(\theta)` for `-\pi/2 < \theta < \pi/2`. We have `\tan(\tan^{-1}(x)) = x` for all `x`, but `\tan^{-1}(\tan(x)) = x` only for `-\pi/2 < \Re[x] < \pi/2`:: >>> mp.dps = 25 >>> for x in [1, 10, -1, 1+3j, -2+3j]: ... print("%s %s" % (tan(atan(x)), atan(tan(x)))) ... 1.0 1.0 10.0 0.5752220392306202846120698 -1.0 -1.0 (1.0 + 3.0j) (1.000000000000000000000001 + 3.0j) (-2.0 + 3.0j) (1.141592653589793238462644 + 3.0j) The inverse tangent has two branch points: `x = \pm i`. :func:`~mpmath.atan` places the branch cuts along the line segments `(-i \infty, -i)` and `(+i, +i \infty)`. In general, .. math :: \tan^{-1}(x) = \frac{i}{2}\left(\log(1-ix)-\log(1+ix)\right) where the principal-branch log is implied. """ acot = r"""Computes the inverse cotangent of `x`, `\mathrm{cot}^{-1}(x) = \tan^{-1}(1/x)`.""" asec = r"""Computes the inverse secant of `x`, `\mathrm{sec}^{-1}(x) = \cos^{-1}(1/x)`.""" acsc = r"""Computes the inverse cosecant of `x`, `\mathrm{csc}^{-1}(x) = \sin^{-1}(1/x)`.""" coth = r"""Computes the hyperbolic cotangent of `x`, `\mathrm{coth}(x) = \frac{\cosh(x)}{\sinh(x)}`. """ sech = r"""Computes the hyperbolic secant of `x`, `\mathrm{sech}(x) = \frac{1}{\cosh(x)}`. """ csch = r"""Computes the hyperbolic cosecant of `x`, `\mathrm{csch}(x) = \frac{1}{\sinh(x)}`. """ acosh = r"""Computes the inverse hyperbolic cosine of `x`, `\mathrm{cosh}^{-1}(x) = \log(x+\sqrt{x+1}\sqrt{x-1})`. """ asinh = r"""Computes the inverse hyperbolic sine of `x`, `\mathrm{sinh}^{-1}(x) = \log(x+\sqrt{1+x^2})`. """ atanh = r"""Computes the inverse hyperbolic tangent of `x`, `\mathrm{tanh}^{-1}(x) = \frac{1}{2}\left(\log(1+x)-\log(1-x)\right)`. """ acoth = r"""Computes the inverse hyperbolic cotangent of `x`, `\mathrm{coth}^{-1}(x) = \tanh^{-1}(1/x)`.""" asech = r"""Computes the inverse hyperbolic secant of `x`, `\mathrm{sech}^{-1}(x) = \cosh^{-1}(1/x)`.""" acsch = r"""Computes the inverse hyperbolic cosecant of `x`, `\mathrm{csch}^{-1}(x) = \sinh^{-1}(1/x)`.""" sinpi = r""" Computes `\sin(\pi x)`, more accurately than the expression ``sin(pi*x)``:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> sinpi(10**10), sin(pi*(10**10)) (0.0, -2.23936276195592e-6) >>> sinpi(10**10+0.5), sin(pi*(10**10+0.5)) (1.0, 0.999999999998721) """ cospi = r""" Computes `\cos(\pi x)`, more accurately than the expression ``cos(pi*x)``:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> cospi(10**10), cos(pi*(10**10)) (1.0, 0.999999999997493) >>> cospi(10**10+0.5), cos(pi*(10**10+0.5)) (0.0, 1.59960492420134e-6) """ sinc = r""" ``sinc(x)`` computes the unnormalized sinc function, defined as .. math :: \mathrm{sinc}(x) = \begin{cases} \sin(x)/x, & \mbox{if } x \ne 0 \\ 1, & \mbox{if } x = 0. \end{cases} See :func:`~mpmath.sincpi` for the normalized sinc function. Simple values and limits include:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> sinc(0) 1.0 >>> sinc(1) 0.841470984807897 >>> sinc(inf) 0.0 The integral of the sinc function is the sine integral Si:: >>> quad(sinc, [0, 1]) 0.946083070367183 >>> si(1) 0.946083070367183 """ sincpi = r""" ``sincpi(x)`` computes the normalized sinc function, defined as .. math :: \mathrm{sinc}_{\pi}(x) = \begin{cases} \sin(\pi x)/(\pi x), & \mbox{if } x \ne 0 \\ 1, & \mbox{if } x = 0. \end{cases} Equivalently, we have `\mathrm{sinc}_{\pi}(x) = \mathrm{sinc}(\pi x)`. The normalization entails that the function integrates to unity over the entire real line:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> quadosc(sincpi, [-inf, inf], period=2.0) 1.0 Like, :func:`~mpmath.sinpi`, :func:`~mpmath.sincpi` is evaluated accurately at its roots:: >>> sincpi(10) 0.0 """ expj = r""" Convenience function for computing `e^{ix}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> expj(0) (1.0 + 0.0j) >>> expj(-1) (0.5403023058681397174009366 - 0.8414709848078965066525023j) >>> expj(j) (0.3678794411714423215955238 + 0.0j) >>> expj(1+j) (0.1987661103464129406288032 + 0.3095598756531121984439128j) """ expjpi = r""" Convenience function for computing `e^{i \pi x}`. Evaluation is accurate near zeros (see also :func:`~mpmath.cospi`, :func:`~mpmath.sinpi`):: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> expjpi(0) (1.0 + 0.0j) >>> expjpi(1) (-1.0 + 0.0j) >>> expjpi(0.5) (0.0 + 1.0j) >>> expjpi(-1) (-1.0 + 0.0j) >>> expjpi(j) (0.04321391826377224977441774 + 0.0j) >>> expjpi(1+j) (-0.04321391826377224977441774 + 0.0j) """ floor = r""" Computes the floor of `x`, `\lfloor x \rfloor`, defined as the largest integer less than or equal to `x`:: >>> from mpmath import * >>> mp.pretty = False >>> floor(3.5) mpf('3.0') .. note :: :func:`~mpmath.floor`, :func:`~mpmath.ceil` and :func:`~mpmath.nint` return a floating-point number, not a Python ``int``. If `\lfloor x \rfloor` is too large to be represented exactly at the present working precision, the result will be rounded, not necessarily in the direction implied by the mathematical definition of the function. To avoid rounding, use *prec=0*:: >>> mp.dps = 15 >>> print(int(floor(10**30+1))) 1000000000000000019884624838656 >>> print(int(floor(10**30+1, prec=0))) 1000000000000000000000000000001 The floor function is defined for complex numbers and acts on the real and imaginary parts separately:: >>> floor(3.25+4.75j) mpc(real='3.0', imag='4.0') """ ceil = r""" Computes the ceiling of `x`, `\lceil x \rceil`, defined as the smallest integer greater than or equal to `x`:: >>> from mpmath import * >>> mp.pretty = False >>> ceil(3.5) mpf('4.0') The ceiling function is defined for complex numbers and acts on the real and imaginary parts separately:: >>> ceil(3.25+4.75j) mpc(real='4.0', imag='5.0') See notes about rounding for :func:`~mpmath.floor`. """ nint = r""" Evaluates the nearest integer function, `\mathrm{nint}(x)`. This gives the nearest integer to `x`; on a tie, it gives the nearest even integer:: >>> from mpmath import * >>> mp.pretty = False >>> nint(3.2) mpf('3.0') >>> nint(3.8) mpf('4.0') >>> nint(3.5) mpf('4.0') >>> nint(4.5) mpf('4.0') The nearest integer function is defined for complex numbers and acts on the real and imaginary parts separately:: >>> nint(3.25+4.75j) mpc(real='3.0', imag='5.0') See notes about rounding for :func:`~mpmath.floor`. """ frac = r""" Gives the fractional part of `x`, defined as `\mathrm{frac}(x) = x - \lfloor x \rfloor` (see :func:`~mpmath.floor`). In effect, this computes `x` modulo 1, or `x+n` where `n \in \mathbb{Z}` is such that `x+n \in [0,1)`:: >>> from mpmath import * >>> mp.pretty = False >>> frac(1.25) mpf('0.25') >>> frac(3) mpf('0.0') >>> frac(-1.25) mpf('0.75') For a complex number, the fractional part function applies to the real and imaginary parts separately:: >>> frac(2.25+3.75j) mpc(real='0.25', imag='0.75') Plotted, the fractional part function gives a sawtooth wave. The Fourier series coefficients have a simple form:: >>> mp.dps = 15 >>> nprint(fourier(lambda x: frac(x)-0.5, [0,1], 4)) ([0.0, 0.0, 0.0, 0.0, 0.0], [0.0, -0.31831, -0.159155, -0.106103, -0.0795775]) >>> nprint([-1/(pi*k) for k in range(1,5)]) [-0.31831, -0.159155, -0.106103, -0.0795775] .. note:: The fractional part is sometimes defined as a symmetric function, i.e. returning `-\mathrm{frac}(-x)` if `x < 0`. This convention is used, for instance, by Mathematica's ``FractionalPart``. """ sign = r""" Returns the sign of `x`, defined as `\mathrm{sign}(x) = x / |x|` (with the special case `\mathrm{sign}(0) = 0`):: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> sign(10) mpf('1.0') >>> sign(-10) mpf('-1.0') >>> sign(0) mpf('0.0') Note that the sign function is also defined for complex numbers, for which it gives the projection onto the unit circle:: >>> mp.dps = 15; mp.pretty = True >>> sign(1+j) (0.707106781186547 + 0.707106781186547j) """ arg = r""" Computes the complex argument (phase) of `x`, defined as the signed angle between the positive real axis and `x` in the complex plane:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> arg(3) 0.0 >>> arg(3+3j) 0.785398163397448 >>> arg(3j) 1.5707963267949 >>> arg(-3) 3.14159265358979 >>> arg(-3j) -1.5707963267949 The angle is defined to satisfy `-\pi < \arg(x) \le \pi` and with the sign convention that a nonnegative imaginary part results in a nonnegative argument. The value returned by :func:`~mpmath.arg` is an ``mpf`` instance. """ fabs = r""" Returns the absolute value of `x`, `|x|`. Unlike :func:`abs`, :func:`~mpmath.fabs` converts non-mpmath numbers (such as ``int``) into mpmath numbers:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> fabs(3) mpf('3.0') >>> fabs(-3) mpf('3.0') >>> fabs(3+4j) mpf('5.0') """ re = r""" Returns the real part of `x`, `\Re(x)`. :func:`~mpmath.re` converts a non-mpmath number to an mpmath number:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> re(3) mpf('3.0') >>> re(-1+4j) mpf('-1.0') """ im = r""" Returns the imaginary part of `x`, `\Im(x)`. :func:`~mpmath.im` converts a non-mpmath number to an mpmath number:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> im(3) mpf('0.0') >>> im(-1+4j) mpf('4.0') """ conj = r""" Returns the complex conjugate of `x`, `\overline{x}`. Unlike ``x.conjugate()``, :func:`~mpmath.im` converts `x` to a mpmath number:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> conj(3) mpf('3.0') >>> conj(-1+4j) mpc(real='-1.0', imag='-4.0') """ polar = r""" Returns the polar representation of the complex number `z` as a pair `(r, \phi)` such that `z = r e^{i \phi}`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> polar(-2) (2.0, 3.14159265358979) >>> polar(3-4j) (5.0, -0.927295218001612) """ rect = r""" Returns the complex number represented by polar coordinates `(r, \phi)`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> chop(rect(2, pi)) -2.0 >>> rect(sqrt(2), -pi/4) (1.0 - 1.0j) """ expm1 = r""" Computes `e^x - 1`, accurately for small `x`. Unlike the expression ``exp(x) - 1``, ``expm1(x)`` does not suffer from potentially catastrophic cancellation:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> exp(1e-10)-1; print(expm1(1e-10)) 1.00000008274037e-10 1.00000000005e-10 >>> exp(1e-20)-1; print(expm1(1e-20)) 0.0 1.0e-20 >>> 1/(exp(1e-20)-1) Traceback (most recent call last): ... ZeroDivisionError >>> 1/expm1(1e-20) 1.0e+20 Evaluation works for extremely tiny values:: >>> expm1(0) 0.0 >>> expm1('1e-10000000') 1.0e-10000000 """ powm1 = r""" Computes `x^y - 1`, accurately when `x^y` is very close to 1. This avoids potentially catastrophic cancellation:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> power(0.99999995, 1e-10) - 1 0.0 >>> powm1(0.99999995, 1e-10) -5.00000012791934e-18 Powers exactly equal to 1, and only those powers, yield 0 exactly:: >>> powm1(-j, 4) (0.0 + 0.0j) >>> powm1(3, 0) 0.0 >>> powm1(fadd(-1, 1e-100, exact=True), 4) -4.0e-100 Evaluation works for extremely tiny `y`:: >>> powm1(2, '1e-100000') 6.93147180559945e-100001 >>> powm1(j, '1e-1000') (-1.23370055013617e-2000 + 1.5707963267949e-1000j) """ root = r""" ``root(z, n, k=0)`` computes an `n`-th root of `z`, i.e. returns a number `r` that (up to possible approximation error) satisfies `r^n = z`. (``nthroot`` is available as an alias for ``root``.) Every complex number `z \ne 0` has `n` distinct `n`-th roots, which are equidistant points on a circle with radius `|z|^{1/n}`, centered around the origin. A specific root may be selected using the optional index `k`. The roots are indexed counterclockwise, starting with `k = 0` for the root closest to the positive real half-axis. The `k = 0` root is the so-called principal `n`-th root, often denoted by `\sqrt[n]{z}` or `z^{1/n}`, and also given by `\exp(\log(z) / n)`. If `z` is a positive real number, the principal root is just the unique positive `n`-th root of `z`. Under some circumstances, non-principal real roots exist: for positive real `z`, `n` even, there is a negative root given by `k = n/2`; for negative real `z`, `n` odd, there is a negative root given by `k = (n-1)/2`. To obtain all roots with a simple expression, use ``[root(z,n,k) for k in range(n)]``. An important special case, ``root(1, n, k)`` returns the `k`-th `n`-th root of unity, `\zeta_k = e^{2 \pi i k / n}`. Alternatively, :func:`~mpmath.unitroots` provides a slightly more convenient way to obtain the roots of unity, including the option to compute only the primitive roots of unity. Both `k` and `n` should be integers; `k` outside of ``range(n)`` will be reduced modulo `n`. If `n` is negative, `x^{-1/n} = 1/x^{1/n}` (or the equivalent reciprocal for a non-principal root with `k \ne 0`) is computed. :func:`~mpmath.root` is implemented to use Newton's method for small `n`. At high precision, this makes `x^{1/n}` not much more expensive than the regular exponentiation, `x^n`. For very large `n`, :func:`~mpmath.nthroot` falls back to use the exponential function. **Examples** :func:`~mpmath.nthroot`/:func:`~mpmath.root` is faster and more accurate than raising to a floating-point fraction:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> 16807 ** (mpf(1)/5) mpf('7.0000000000000009') >>> root(16807, 5) mpf('7.0') >>> nthroot(16807, 5) # Alias mpf('7.0') A high-precision root:: >>> mp.dps = 50; mp.pretty = True >>> nthroot(10, 5) 1.584893192461113485202101373391507013269442133825 >>> nthroot(10, 5) ** 5 10.0 Computing principal and non-principal square and cube roots:: >>> mp.dps = 15 >>> root(10, 2) 3.16227766016838 >>> root(10, 2, 1) -3.16227766016838 >>> root(-10, 3) (1.07721734501594 + 1.86579517236206j) >>> root(-10, 3, 1) -2.15443469003188 >>> root(-10, 3, 2) (1.07721734501594 - 1.86579517236206j) All the 7th roots of a complex number:: >>> for r in [root(3+4j, 7, k) for k in range(7)]: ... print("%s %s" % (r, r**7)) ... (1.24747270589553 + 0.166227124177353j) (3.0 + 4.0j) (0.647824911301003 + 1.07895435170559j) (3.0 + 4.0j) (-0.439648254723098 + 1.17920694574172j) (3.0 + 4.0j) (-1.19605731775069 + 0.391492658196305j) (3.0 + 4.0j) (-1.05181082538903 - 0.691023585965793j) (3.0 + 4.0j) (-0.115529328478668 - 1.25318497558335j) (3.0 + 4.0j) (0.907748109144957 - 0.871672518271819j) (3.0 + 4.0j) Cube roots of unity:: >>> for k in range(3): print(root(1, 3, k)) ... 1.0 (-0.5 + 0.866025403784439j) (-0.5 - 0.866025403784439j) Some exact high order roots:: >>> root(75**210, 105) 5625.0 >>> root(1, 128, 96) (0.0 - 1.0j) >>> root(4**128, 128, 96) (0.0 - 4.0j) """ unitroots = r""" ``unitroots(n)`` returns `\zeta_0, \zeta_1, \ldots, \zeta_{n-1}`, all the distinct `n`-th roots of unity, as a list. If the option *primitive=True* is passed, only the primitive roots are returned. Every `n`-th root of unity satisfies `(\zeta_k)^n = 1`. There are `n` distinct roots for each `n` (`\zeta_k` and `\zeta_j` are the same when `k = j \pmod n`), which form a regular polygon with vertices on the unit circle. They are ordered counterclockwise with increasing `k`, starting with `\zeta_0 = 1`. **Examples** The roots of unity up to `n = 4`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nprint(unitroots(1)) [1.0] >>> nprint(unitroots(2)) [1.0, -1.0] >>> nprint(unitroots(3)) [1.0, (-0.5 + 0.866025j), (-0.5 - 0.866025j)] >>> nprint(unitroots(4)) [1.0, (0.0 + 1.0j), -1.0, (0.0 - 1.0j)] Roots of unity form a geometric series that sums to 0:: >>> mp.dps = 50 >>> chop(fsum(unitroots(25))) 0.0 Primitive roots up to `n = 4`:: >>> mp.dps = 15 >>> nprint(unitroots(1, primitive=True)) [1.0] >>> nprint(unitroots(2, primitive=True)) [-1.0] >>> nprint(unitroots(3, primitive=True)) [(-0.5 + 0.866025j), (-0.5 - 0.866025j)] >>> nprint(unitroots(4, primitive=True)) [(0.0 + 1.0j), (0.0 - 1.0j)] There are only four primitive 12th roots:: >>> nprint(unitroots(12, primitive=True)) [(0.866025 + 0.5j), (-0.866025 + 0.5j), (-0.866025 - 0.5j), (0.866025 - 0.5j)] The `n`-th roots of unity form a group, the cyclic group of order `n`. Any primitive root `r` is a generator for this group, meaning that `r^0, r^1, \ldots, r^{n-1}` gives the whole set of unit roots (in some permuted order):: >>> for r in unitroots(6): print(r) ... 1.0 (0.5 + 0.866025403784439j) (-0.5 + 0.866025403784439j) -1.0 (-0.5 - 0.866025403784439j) (0.5 - 0.866025403784439j) >>> r = unitroots(6, primitive=True)[1] >>> for k in range(6): print(chop(r**k)) ... 1.0 (0.5 - 0.866025403784439j) (-0.5 - 0.866025403784439j) -1.0 (-0.5 + 0.866025403784438j) (0.5 + 0.866025403784438j) The number of primitive roots equals the Euler totient function `\phi(n)`:: >>> [len(unitroots(n, primitive=True)) for n in range(1,20)] [1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18] """ log = r""" Computes the base-`b` logarithm of `x`, `\log_b(x)`. If `b` is unspecified, :func:`~mpmath.log` computes the natural (base `e`) logarithm and is equivalent to :func:`~mpmath.ln`. In general, the base `b` logarithm is defined in terms of the natural logarithm as `\log_b(x) = \ln(x)/\ln(b)`. By convention, we take `\log(0) = -\infty`. The natural logarithm is real if `x > 0` and complex if `x < 0` or if `x` is complex. The principal branch of the complex logarithm is used, meaning that `\Im(\ln(x)) = -\pi < \arg(x) \le \pi`. **Examples** Some basic values and limits:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> log(1) 0.0 >>> log(2) 0.693147180559945 >>> log(1000,10) 3.0 >>> log(4, 16) 0.5 >>> log(j) (0.0 + 1.5707963267949j) >>> log(-1) (0.0 + 3.14159265358979j) >>> log(0) -inf >>> log(inf) +inf The natural logarithm is the antiderivative of `1/x`:: >>> quad(lambda x: 1/x, [1, 5]) 1.6094379124341 >>> log(5) 1.6094379124341 >>> diff(log, 10) 0.1 The Taylor series expansion of the natural logarithm around `x = 1` has coefficients `(-1)^{n+1}/n`:: >>> nprint(taylor(log, 1, 7)) [0.0, 1.0, -0.5, 0.333333, -0.25, 0.2, -0.166667, 0.142857] :func:`~mpmath.log` supports arbitrary precision evaluation:: >>> mp.dps = 50 >>> log(pi) 1.1447298858494001741434273513530587116472948129153 >>> log(pi, pi**3) 0.33333333333333333333333333333333333333333333333333 >>> mp.dps = 25 >>> log(3+4j) (1.609437912434100374600759 + 0.9272952180016122324285125j) """ log10 = r""" Computes the base-10 logarithm of `x`, `\log_{10}(x)`. ``log10(x)`` is equivalent to ``log(x, 10)``. """ fmod = r""" Converts `x` and `y` to mpmath numbers and returns `x \mod y`. For mpmath numbers, this is equivalent to ``x % y``. >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> fmod(100, pi) 2.61062773871641 You can use :func:`~mpmath.fmod` to compute fractional parts of numbers:: >>> fmod(10.25, 1) 0.25 """ radians = r""" Converts the degree angle `x` to radians:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> radians(60) 1.0471975511966 """ degrees = r""" Converts the radian angle `x` to a degree angle:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> degrees(pi/3) 60.0 """ atan2 = r""" Computes the two-argument arctangent, `\mathrm{atan2}(y, x)`, giving the signed angle between the positive `x`-axis and the point `(x, y)` in the 2D plane. This function is defined for real `x` and `y` only. The two-argument arctangent essentially computes `\mathrm{atan}(y/x)`, but accounts for the signs of both `x` and `y` to give the angle for the correct quadrant. The following examples illustrate the difference:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> atan2(1,1), atan(1/1.) (0.785398163397448, 0.785398163397448) >>> atan2(1,-1), atan(1/-1.) (2.35619449019234, -0.785398163397448) >>> atan2(-1,1), atan(-1/1.) (-0.785398163397448, -0.785398163397448) >>> atan2(-1,-1), atan(-1/-1.) (-2.35619449019234, 0.785398163397448) The angle convention is the same as that used for the complex argument; see :func:`~mpmath.arg`. """ fibonacci = r""" ``fibonacci(n)`` computes the `n`-th Fibonacci number, `F(n)`. The Fibonacci numbers are defined by the recurrence `F(n) = F(n-1) + F(n-2)` with the initial values `F(0) = 0`, `F(1) = 1`. :func:`~mpmath.fibonacci` extends this definition to arbitrary real and complex arguments using the formula .. math :: F(z) = \frac{\phi^z - \cos(\pi z) \phi^{-z}}{\sqrt 5} where `\phi` is the golden ratio. :func:`~mpmath.fibonacci` also uses this continuous formula to compute `F(n)` for extremely large `n`, where calculating the exact integer would be wasteful. For convenience, :func:`~mpmath.fib` is available as an alias for :func:`~mpmath.fibonacci`. **Basic examples** Some small Fibonacci numbers are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for i in range(10): ... print(fibonacci(i)) ... 0.0 1.0 1.0 2.0 3.0 5.0 8.0 13.0 21.0 34.0 >>> fibonacci(50) 12586269025.0 The recurrence for `F(n)` extends backwards to negative `n`:: >>> for i in range(10): ... print(fibonacci(-i)) ... 0.0 1.0 -1.0 2.0 -3.0 5.0 -8.0 13.0 -21.0 34.0 Large Fibonacci numbers will be computed approximately unless the precision is set high enough:: >>> fib(200) 2.8057117299251e+41 >>> mp.dps = 45 >>> fib(200) 280571172992510140037611932413038677189525.0 :func:`~mpmath.fibonacci` can compute approximate Fibonacci numbers of stupendous size:: >>> mp.dps = 15 >>> fibonacci(10**25) 3.49052338550226e+2089876402499787337692720 **Real and complex arguments** The extended Fibonacci function is an analytic function. The property `F(z) = F(z-1) + F(z-2)` holds for arbitrary `z`:: >>> mp.dps = 15 >>> fib(pi) 2.1170270579161 >>> fib(pi-1) + fib(pi-2) 2.1170270579161 >>> fib(3+4j) (-5248.51130728372 - 14195.962288353j) >>> fib(2+4j) + fib(1+4j) (-5248.51130728372 - 14195.962288353j) The Fibonacci function has infinitely many roots on the negative half-real axis. The first root is at 0, the second is close to -0.18, and then there are infinitely many roots that asymptotically approach `-n+1/2`:: >>> findroot(fib, -0.2) -0.183802359692956 >>> findroot(fib, -2) -1.57077646820395 >>> findroot(fib, -17) -16.4999999596115 >>> findroot(fib, -24) -23.5000000000479 **Mathematical relationships** For large `n`, `F(n+1)/F(n)` approaches the golden ratio:: >>> mp.dps = 50 >>> fibonacci(101)/fibonacci(100) 1.6180339887498948482045868343656381177203127439638 >>> +phi 1.6180339887498948482045868343656381177203091798058 The sum of reciprocal Fibonacci numbers converges to an irrational number for which no closed form expression is known:: >>> mp.dps = 15 >>> nsum(lambda n: 1/fib(n), [1, inf]) 3.35988566624318 Amazingly, however, the sum of odd-index reciprocal Fibonacci numbers can be expressed in terms of a Jacobi theta function:: >>> nsum(lambda n: 1/fib(2*n+1), [0, inf]) 1.82451515740692 >>> sqrt(5)*jtheta(2,0,(3-sqrt(5))/2)**2/4 1.82451515740692 Some related sums can be done in closed form:: >>> nsum(lambda k: 1/(1+fib(2*k+1)), [0, inf]) 1.11803398874989 >>> phi - 0.5 1.11803398874989 >>> f = lambda k:(-1)**(k+1) / sum(fib(n)**2 for n in range(1,int(k+1))) >>> nsum(f, [1, inf]) 0.618033988749895 >>> phi-1 0.618033988749895 **References** 1. http://mathworld.wolfram.com/FibonacciNumber.html """ altzeta = r""" Gives the Dirichlet eta function, `\eta(s)`, also known as the alternating zeta function. This function is defined in analogy with the Riemann zeta function as providing the sum of the alternating series .. math :: \eta(s) = \sum_{k=0}^{\infty} \frac{(-1)^k}{k^s} = 1-\frac{1}{2^s}+\frac{1}{3^s}-\frac{1}{4^s}+\ldots The eta function, unlike the Riemann zeta function, is an entire function, having a finite value for all complex `s`. The special case `\eta(1) = \log(2)` gives the value of the alternating harmonic series. The alternating zeta function may expressed using the Riemann zeta function as `\eta(s) = (1 - 2^{1-s}) \zeta(s)`. It can also be expressed in terms of the Hurwitz zeta function, for example using :func:`~mpmath.dirichlet` (see documentation for that function). **Examples** Some special values are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> altzeta(1) 0.693147180559945 >>> altzeta(0) 0.5 >>> altzeta(-1) 0.25 >>> altzeta(-2) 0.0 An example of a sum that can be computed more accurately and efficiently via :func:`~mpmath.altzeta` than via numerical summation:: >>> sum(-(-1)**n / mpf(n)**2.5 for n in range(1, 100)) 0.867204951503984 >>> altzeta(2.5) 0.867199889012184 At positive even integers, the Dirichlet eta function evaluates to a rational multiple of a power of `\pi`:: >>> altzeta(2) 0.822467033424113 >>> pi**2/12 0.822467033424113 Like the Riemann zeta function, `\eta(s)`, approaches 1 as `s` approaches positive infinity, although it does so from below rather than from above:: >>> altzeta(30) 0.999999999068682 >>> altzeta(inf) 1.0 >>> mp.pretty = False >>> altzeta(1000, rounding='d') mpf('0.99999999999999989') >>> altzeta(1000, rounding='u') mpf('1.0') **References** 1. http://mathworld.wolfram.com/DirichletEtaFunction.html 2. http://en.wikipedia.org/wiki/Dirichlet_eta_function """ factorial = r""" Computes the factorial, `x!`. For integers `n \ge 0`, we have `n! = 1 \cdot 2 \cdots (n-1) \cdot n` and more generally the factorial is defined for real or complex `x` by `x! = \Gamma(x+1)`. **Examples** Basic values and limits:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for k in range(6): ... print("%s %s" % (k, fac(k))) ... 0 1.0 1 1.0 2 2.0 3 6.0 4 24.0 5 120.0 >>> fac(inf) +inf >>> fac(0.5), sqrt(pi)/2 (0.886226925452758, 0.886226925452758) For large positive `x`, `x!` can be approximated by Stirling's formula:: >>> x = 10**10 >>> fac(x) 2.32579620567308e+95657055186 >>> sqrt(2*pi*x)*(x/e)**x 2.32579597597705e+95657055186 :func:`~mpmath.fac` supports evaluation for astronomically large values:: >>> fac(10**30) 6.22311232304258e+29565705518096748172348871081098 Reciprocal factorials appear in the Taylor series of the exponential function (among many other contexts):: >>> nsum(lambda k: 1/fac(k), [0, inf]), exp(1) (2.71828182845905, 2.71828182845905) >>> nsum(lambda k: pi**k/fac(k), [0, inf]), exp(pi) (23.1406926327793, 23.1406926327793) """ gamma = r""" Computes the gamma function, `\Gamma(x)`. The gamma function is a shifted version of the ordinary factorial, satisfying `\Gamma(n) = (n-1)!` for integers `n > 0`. More generally, it is defined by .. math :: \Gamma(x) = \int_0^{\infty} t^{x-1} e^{-t}\, dt for any real or complex `x` with `\Re(x) > 0` and for `\Re(x) < 0` by analytic continuation. **Examples** Basic values and limits:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for k in range(1, 6): ... print("%s %s" % (k, gamma(k))) ... 1 1.0 2 1.0 3 2.0 4 6.0 5 24.0 >>> gamma(inf) +inf >>> gamma(0) Traceback (most recent call last): ... ValueError: gamma function pole The gamma function of a half-integer is a rational multiple of `\sqrt{\pi}`:: >>> gamma(0.5), sqrt(pi) (1.77245385090552, 1.77245385090552) >>> gamma(1.5), sqrt(pi)/2 (0.886226925452758, 0.886226925452758) We can check the integral definition:: >>> gamma(3.5) 3.32335097044784 >>> quad(lambda t: t**2.5*exp(-t), [0,inf]) 3.32335097044784 :func:`~mpmath.gamma` supports arbitrary-precision evaluation and complex arguments:: >>> mp.dps = 50 >>> gamma(sqrt(3)) 0.91510229697308632046045539308226554038315280564184 >>> mp.dps = 25 >>> gamma(2j) (0.009902440080927490985955066 - 0.07595200133501806872408048j) Arguments can also be large. Note that the gamma function grows very quickly:: >>> mp.dps = 15 >>> gamma(10**20) 1.9328495143101e+1956570551809674817225 """ psi = r""" Gives the polygamma function of order `m` of `z`, `\psi^{(m)}(z)`. Special cases are known as the *digamma function* (`\psi^{(0)}(z)`), the *trigamma function* (`\psi^{(1)}(z)`), etc. The polygamma functions are defined as the logarithmic derivatives of the gamma function: .. math :: \psi^{(m)}(z) = \left(\frac{d}{dz}\right)^{m+1} \log \Gamma(z) In particular, `\psi^{(0)}(z) = \Gamma'(z)/\Gamma(z)`. In the present implementation of :func:`~mpmath.psi`, the order `m` must be a nonnegative integer, while the argument `z` may be an arbitrary complex number (with exception for the polygamma function's poles at `z = 0, -1, -2, \ldots`). **Examples** For various rational arguments, the polygamma function reduces to a combination of standard mathematical constants:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> psi(0, 1), -euler (-0.5772156649015328606065121, -0.5772156649015328606065121) >>> psi(1, '1/4'), pi**2+8*catalan (17.19732915450711073927132, 17.19732915450711073927132) >>> psi(2, '1/2'), -14*apery (-16.82879664423431999559633, -16.82879664423431999559633) The polygamma functions are derivatives of each other:: >>> diff(lambda x: psi(3, x), pi), psi(4, pi) (-0.1105749312578862734526952, -0.1105749312578862734526952) >>> quad(lambda x: psi(4, x), [2, 3]), psi(3,3)-psi(3,2) (-0.375, -0.375) The digamma function diverges logarithmically as `z \to \infty`, while higher orders tend to zero:: >>> psi(0,inf), psi(1,inf), psi(2,inf) (+inf, 0.0, 0.0) Evaluation for a complex argument:: >>> psi(2, -1-2j) (0.03902435405364952654838445 + 0.1574325240413029954685366j) Evaluation is supported for large orders `m` and/or large arguments `z`:: >>> psi(3, 10**100) 2.0e-300 >>> psi(250, 10**30+10**20*j) (-1.293142504363642687204865e-7010 + 3.232856260909107391513108e-7018j) **Application to infinite series** Any infinite series where the summand is a rational function of the index `k` can be evaluated in closed form in terms of polygamma functions of the roots and poles of the summand:: >>> a = sqrt(2) >>> b = sqrt(3) >>> nsum(lambda k: 1/((k+a)**2*(k+b)), [0, inf]) 0.4049668927517857061917531 >>> (psi(0,a)-psi(0,b)-a*psi(1,a)+b*psi(1,a))/(a-b)**2 0.4049668927517857061917531 This follows from the series representation (`m > 0`) .. math :: \psi^{(m)}(z) = (-1)^{m+1} m! \sum_{k=0}^{\infty} \frac{1}{(z+k)^{m+1}}. Since the roots of a polynomial may be complex, it is sometimes necessary to use the complex polygamma function to evaluate an entirely real-valued sum:: >>> nsum(lambda k: 1/(k**2-2*k+3), [0, inf]) 1.694361433907061256154665 >>> nprint(polyroots([1,-2,3])) [(1.0 - 1.41421j), (1.0 + 1.41421j)] >>> r1 = 1-sqrt(2)*j >>> r2 = r1.conjugate() >>> (psi(0,-r2)-psi(0,-r1))/(r1-r2) (1.694361433907061256154665 + 0.0j) """ digamma = r""" Shortcut for ``psi(0,z)``. """ harmonic = r""" If `n` is an integer, ``harmonic(n)`` gives a floating-point approximation of the `n`-th harmonic number `H(n)`, defined as .. math :: H(n) = 1 + \frac{1}{2} + \frac{1}{3} + \ldots + \frac{1}{n} The first few harmonic numbers are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(8): ... print("%s %s" % (n, harmonic(n))) ... 0 0.0 1 1.0 2 1.5 3 1.83333333333333 4 2.08333333333333 5 2.28333333333333 6 2.45 7 2.59285714285714 The infinite harmonic series `1 + 1/2 + 1/3 + \ldots` diverges:: >>> harmonic(inf) +inf :func:`~mpmath.harmonic` is evaluated using the digamma function rather than by summing the harmonic series term by term. It can therefore be computed quickly for arbitrarily large `n`, and even for nonintegral arguments:: >>> harmonic(10**100) 230.835724964306 >>> harmonic(0.5) 0.613705638880109 >>> harmonic(3+4j) (2.24757548223494 + 0.850502209186044j) :func:`~mpmath.harmonic` supports arbitrary precision evaluation:: >>> mp.dps = 50 >>> harmonic(11) 3.0198773448773448773448773448773448773448773448773 >>> harmonic(pi) 1.8727388590273302654363491032336134987519132374152 The harmonic series diverges, but at a glacial pace. It is possible to calculate the exact number of terms required before the sum exceeds a given amount, say 100:: >>> mp.dps = 50 >>> v = 10**findroot(lambda x: harmonic(10**x) - 100, 10) >>> v 15092688622113788323693563264538101449859496.864101 >>> v = int(ceil(v)) >>> print(v) 15092688622113788323693563264538101449859497 >>> harmonic(v-1) 99.999999999999999999999999999999999999999999942747 >>> harmonic(v) 100.000000000000000000000000000000000000000000009 """ bernoulli = r""" Computes the nth Bernoulli number, `B_n`, for any integer `n \ge 0`. The Bernoulli numbers are rational numbers, but this function returns a floating-point approximation. To obtain an exact fraction, use :func:`~mpmath.bernfrac` instead. **Examples** Numerical values of the first few Bernoulli numbers:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(15): ... print("%s %s" % (n, bernoulli(n))) ... 0 1.0 1 -0.5 2 0.166666666666667 3 0.0 4 -0.0333333333333333 5 0.0 6 0.0238095238095238 7 0.0 8 -0.0333333333333333 9 0.0 10 0.0757575757575758 11 0.0 12 -0.253113553113553 13 0.0 14 1.16666666666667 Bernoulli numbers can be approximated with arbitrary precision:: >>> mp.dps = 50 >>> bernoulli(100) -2.8382249570693706959264156336481764738284680928013e+78 Arbitrarily large `n` are supported:: >>> mp.dps = 15 >>> bernoulli(10**20 + 2) 3.09136296657021e+1876752564973863312327 The Bernoulli numbers are related to the Riemann zeta function at integer arguments:: >>> -bernoulli(8) * (2*pi)**8 / (2*fac(8)) 1.00407735619794 >>> zeta(8) 1.00407735619794 **Algorithm** For small `n` (`n < 3000`) :func:`~mpmath.bernoulli` uses a recurrence formula due to Ramanujan. All results in this range are cached, so sequential computation of small Bernoulli numbers is guaranteed to be fast. For larger `n`, `B_n` is evaluated in terms of the Riemann zeta function. """ stieltjes = r""" For a nonnegative integer `n`, ``stieltjes(n)`` computes the `n`-th Stieltjes constant `\gamma_n`, defined as the `n`-th coefficient in the Laurent series expansion of the Riemann zeta function around the pole at `s = 1`. That is, we have: .. math :: \zeta(s) = \frac{1}{s-1} \sum_{n=0}^{\infty} \frac{(-1)^n}{n!} \gamma_n (s-1)^n More generally, ``stieltjes(n, a)`` gives the corresponding coefficient `\gamma_n(a)` for the Hurwitz zeta function `\zeta(s,a)` (with `\gamma_n = \gamma_n(1)`). **Examples** The zeroth Stieltjes constant is just Euler's constant `\gamma`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> stieltjes(0) 0.577215664901533 Some more values are:: >>> stieltjes(1) -0.0728158454836767 >>> stieltjes(10) 0.000205332814909065 >>> stieltjes(30) 0.00355772885557316 >>> stieltjes(1000) -1.57095384420474e+486 >>> stieltjes(2000) 2.680424678918e+1109 >>> stieltjes(1, 2.5) -0.23747539175716 An alternative way to compute `\gamma_1`:: >>> diff(extradps(15)(lambda x: 1/(x-1) - zeta(x)), 1) -0.0728158454836767 :func:`~mpmath.stieltjes` supports arbitrary precision evaluation:: >>> mp.dps = 50 >>> stieltjes(2) -0.0096903631928723184845303860352125293590658061013408 **Algorithm** :func:`~mpmath.stieltjes` numerically evaluates the integral in the following representation due to Ainsworth, Howell and Coffey [1], [2]: .. math :: \gamma_n(a) = \frac{\log^n a}{2a} - \frac{\log^{n+1}(a)}{n+1} + \frac{2}{a} \Re \int_0^{\infty} \frac{(x/a-i)\log^n(a-ix)}{(1+x^2/a^2)(e^{2\pi x}-1)} dx. For some reference values with `a = 1`, see e.g. [4]. **References** 1. O. R. Ainsworth & L. W. Howell, "An integral representation of the generalized Euler-Mascheroni constants", NASA Technical Paper 2456 (1985), http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19850014994_1985014994.pdf 2. M. W. Coffey, "The Stieltjes constants, their relation to the `\eta_j` coefficients, and representation of the Hurwitz zeta function", arXiv:0706.0343v1 http://arxiv.org/abs/0706.0343 3. http://mathworld.wolfram.com/StieltjesConstants.html 4. http://pi.lacim.uqam.ca/piDATA/stieltjesgamma.txt """ gammaprod = r""" Given iterables `a` and `b`, ``gammaprod(a, b)`` computes the product / quotient of gamma functions: .. math :: \frac{\Gamma(a_0) \Gamma(a_1) \cdots \Gamma(a_p)} {\Gamma(b_0) \Gamma(b_1) \cdots \Gamma(b_q)} Unlike direct calls to :func:`~mpmath.gamma`, :func:`~mpmath.gammaprod` considers the entire product as a limit and evaluates this limit properly if any of the numerator or denominator arguments are nonpositive integers such that poles of the gamma function are encountered. That is, :func:`~mpmath.gammaprod` evaluates .. math :: \lim_{\epsilon \to 0} \frac{\Gamma(a_0+\epsilon) \Gamma(a_1+\epsilon) \cdots \Gamma(a_p+\epsilon)} {\Gamma(b_0+\epsilon) \Gamma(b_1+\epsilon) \cdots \Gamma(b_q+\epsilon)} In particular: * If there are equally many poles in the numerator and the denominator, the limit is a rational number times the remaining, regular part of the product. * If there are more poles in the numerator, :func:`~mpmath.gammaprod` returns ``+inf``. * If there are more poles in the denominator, :func:`~mpmath.gammaprod` returns 0. **Examples** The reciprocal gamma function `1/\Gamma(x)` evaluated at `x = 0`:: >>> from mpmath import * >>> mp.dps = 15 >>> gammaprod([], [0]) 0.0 A limit:: >>> gammaprod([-4], [-3]) -0.25 >>> limit(lambda x: gamma(x-1)/gamma(x), -3, direction=1) -0.25 >>> limit(lambda x: gamma(x-1)/gamma(x), -3, direction=-1) -0.25 """ beta = r""" Computes the beta function, `B(x,y) = \Gamma(x) \Gamma(y) / \Gamma(x+y)`. The beta function is also commonly defined by the integral representation .. math :: B(x,y) = \int_0^1 t^{x-1} (1-t)^{y-1} \, dt **Examples** For integer and half-integer arguments where all three gamma functions are finite, the beta function becomes either rational number or a rational multiple of `\pi`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> beta(5, 2) 0.0333333333333333 >>> beta(1.5, 2) 0.266666666666667 >>> 16*beta(2.5, 1.5) 3.14159265358979 Where appropriate, :func:`~mpmath.beta` evaluates limits. A pole of the beta function is taken to result in ``+inf``:: >>> beta(-0.5, 0.5) 0.0 >>> beta(-3, 3) -0.333333333333333 >>> beta(-2, 3) +inf >>> beta(inf, 1) 0.0 >>> beta(inf, 0) nan :func:`~mpmath.beta` supports complex numbers and arbitrary precision evaluation:: >>> beta(1, 2+j) (0.4 - 0.2j) >>> mp.dps = 25 >>> beta(j,0.5) (1.079424249270925780135675 - 1.410032405664160838288752j) >>> mp.dps = 50 >>> beta(pi, e) 0.037890298781212201348153837138927165984170287886464 Various integrals can be computed by means of the beta function:: >>> mp.dps = 15 >>> quad(lambda t: t**2.5*(1-t)**2, [0, 1]) 0.0230880230880231 >>> beta(3.5, 3) 0.0230880230880231 >>> quad(lambda t: sin(t)**4 * sqrt(cos(t)), [0, pi/2]) 0.319504062596158 >>> beta(2.5, 0.75)/2 0.319504062596158 """ betainc = r""" ``betainc(a, b, x1=0, x2=1, regularized=False)`` gives the generalized incomplete beta function, .. math :: I_{x_1}^{x_2}(a,b) = \int_{x_1}^{x_2} t^{a-1} (1-t)^{b-1} dt. When `x_1 = 0, x_2 = 1`, this reduces to the ordinary (complete) beta function `B(a,b)`; see :func:`~mpmath.beta`. With the keyword argument ``regularized=True``, :func:`~mpmath.betainc` computes the regularized incomplete beta function `I_{x_1}^{x_2}(a,b) / B(a,b)`. This is the cumulative distribution of the beta distribution with parameters `a`, `b`. .. note : Implementations of the incomplete beta function in some other software uses a different argument order. For example, Mathematica uses the reversed argument order ``Beta[x1,x2,a,b]``. For the equivalent of SciPy's three-argument incomplete beta integral (implicitly with `x1 = 0`), use ``betainc(a,b,0,x2,regularized=True)``. **Examples** Verifying that :func:`~mpmath.betainc` computes the integral in the definition:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> x,y,a,b = 3, 4, 0, 6 >>> betainc(x, y, a, b) -4010.4 >>> quad(lambda t: t**(x-1) * (1-t)**(y-1), [a, b]) -4010.4 The arguments may be arbitrary complex numbers:: >>> betainc(0.75, 1-4j, 0, 2+3j) (0.2241657956955709603655887 + 0.3619619242700451992411724j) With regularization:: >>> betainc(1, 2, 0, 0.25, regularized=True) 0.4375 >>> betainc(pi, e, 0, 1, regularized=True) # Complete 1.0 The beta integral satisfies some simple argument transformation symmetries:: >>> mp.dps = 15 >>> betainc(2,3,4,5), -betainc(2,3,5,4), betainc(3,2,1-5,1-4) (56.0833333333333, 56.0833333333333, 56.0833333333333) The beta integral can often be evaluated analytically. For integer and rational arguments, the incomplete beta function typically reduces to a simple algebraic-logarithmic expression:: >>> mp.dps = 25 >>> identify(chop(betainc(0, 0, 3, 4))) '-(log((9/8)))' >>> identify(betainc(2, 3, 4, 5)) '(673/12)' >>> identify(betainc(1.5, 1, 1, 2)) '((-12+sqrt(1152))/18)' """ binomial = r""" Computes the binomial coefficient .. math :: {n \choose k} = \frac{n!}{k!(n-k)!}. The binomial coefficient gives the number of ways that `k` items can be chosen from a set of `n` items. More generally, the binomial coefficient is a well-defined function of arbitrary real or complex `n` and `k`, via the gamma function. **Examples** Generate Pascal's triangle:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(5): ... nprint([binomial(n,k) for k in range(n+1)]) ... [1.0] [1.0, 1.0] [1.0, 2.0, 1.0] [1.0, 3.0, 3.0, 1.0] [1.0, 4.0, 6.0, 4.0, 1.0] There is 1 way to select 0 items from the empty set, and 0 ways to select 1 item from the empty set:: >>> binomial(0, 0) 1.0 >>> binomial(0, 1) 0.0 :func:`~mpmath.binomial` supports large arguments:: >>> binomial(10**20, 10**20-5) 8.33333333333333e+97 >>> binomial(10**20, 10**10) 2.60784095465201e+104342944813 Nonintegral binomial coefficients find use in series expansions:: >>> nprint(taylor(lambda x: (1+x)**0.25, 0, 4)) [1.0, 0.25, -0.09375, 0.0546875, -0.0375977] >>> nprint([binomial(0.25, k) for k in range(5)]) [1.0, 0.25, -0.09375, 0.0546875, -0.0375977] An integral representation:: >>> n, k = 5, 3 >>> f = lambda t: exp(-j*k*t)*(1+exp(j*t))**n >>> chop(quad(f, [-pi,pi])/(2*pi)) 10.0 >>> binomial(n,k) 10.0 """ rf = r""" Computes the rising factorial or Pochhammer symbol, .. math :: x^{(n)} = x (x+1) \cdots (x+n-1) = \frac{\Gamma(x+n)}{\Gamma(x)} where the rightmost expression is valid for nonintegral `n`. **Examples** For integral `n`, the rising factorial is a polynomial:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(5): ... nprint(taylor(lambda x: rf(x,n), 0, n)) ... [1.0] [0.0, 1.0] [0.0, 1.0, 1.0] [0.0, 2.0, 3.0, 1.0] [0.0, 6.0, 11.0, 6.0, 1.0] Evaluation is supported for arbitrary arguments:: >>> rf(2+3j, 5.5) (-7202.03920483347 - 3777.58810701527j) """ ff = r""" Computes the falling factorial, .. math :: (x)_n = x (x-1) \cdots (x-n+1) = \frac{\Gamma(x+1)}{\Gamma(x-n+1)} where the rightmost expression is valid for nonintegral `n`. **Examples** For integral `n`, the falling factorial is a polynomial:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(5): ... nprint(taylor(lambda x: ff(x,n), 0, n)) ... [1.0] [0.0, 1.0] [0.0, -1.0, 1.0] [0.0, 2.0, -3.0, 1.0] [0.0, -6.0, 11.0, -6.0, 1.0] Evaluation is supported for arbitrary arguments:: >>> ff(2+3j, 5.5) (-720.41085888203 + 316.101124983878j) """ fac2 = r""" Computes the double factorial `x!!`, defined for integers `x > 0` by .. math :: x!! = \begin{cases} 1 \cdot 3 \cdots (x-2) \cdot x & x \;\mathrm{odd} \\ 2 \cdot 4 \cdots (x-2) \cdot x & x \;\mathrm{even} \end{cases} and more generally by [1] .. math :: x!! = 2^{x/2} \left(\frac{\pi}{2}\right)^{(\cos(\pi x)-1)/4} \Gamma\left(\frac{x}{2}+1\right). **Examples** The integer sequence of double factorials begins:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nprint([fac2(n) for n in range(10)]) [1.0, 1.0, 2.0, 3.0, 8.0, 15.0, 48.0, 105.0, 384.0, 945.0] For large `x`, double factorials follow a Stirling-like asymptotic approximation:: >>> x = mpf(10000) >>> fac2(x) 5.97272691416282e+17830 >>> sqrt(pi)*x**((x+1)/2)*exp(-x/2) 5.97262736954392e+17830 The recurrence formula `x!! = x (x-2)!!` can be reversed to define the double factorial of negative odd integers (but not negative even integers):: >>> fac2(-1), fac2(-3), fac2(-5), fac2(-7) (1.0, -1.0, 0.333333333333333, -0.0666666666666667) >>> fac2(-2) Traceback (most recent call last): ... ValueError: gamma function pole With the exception of the poles at negative even integers, :func:`~mpmath.fac2` supports evaluation for arbitrary complex arguments. The recurrence formula is valid generally:: >>> fac2(pi+2j) (-1.3697207890154e-12 + 3.93665300979176e-12j) >>> (pi+2j)*fac2(pi-2+2j) (-1.3697207890154e-12 + 3.93665300979176e-12j) Double factorials should not be confused with nested factorials, which are immensely larger:: >>> fac(fac(20)) 5.13805976125208e+43675043585825292774 >>> fac2(20) 3715891200.0 Double factorials appear, among other things, in series expansions of Gaussian functions and the error function. Infinite series include:: >>> nsum(lambda k: 1/fac2(k), [0, inf]) 3.05940740534258 >>> sqrt(e)*(1+sqrt(pi/2)*erf(sqrt(2)/2)) 3.05940740534258 >>> nsum(lambda k: 2**k/fac2(2*k-1), [1, inf]) 4.06015693855741 >>> e * erf(1) * sqrt(pi) 4.06015693855741 A beautiful Ramanujan sum:: >>> nsum(lambda k: (-1)**k*(fac2(2*k-1)/fac2(2*k))**3, [0,inf]) 0.90917279454693 >>> (gamma('9/8')/gamma('5/4')/gamma('7/8'))**2 0.90917279454693 **References** 1. http://functions.wolfram.com/GammaBetaErf/Factorial2/27/01/0002/ 2. http://mathworld.wolfram.com/DoubleFactorial.html """ hyper = r""" Evaluates the generalized hypergeometric function .. math :: \,_pF_q(a_1,\ldots,a_p; b_1,\ldots,b_q; z) = \sum_{n=0}^\infty \frac{(a_1)_n (a_2)_n \ldots (a_p)_n} {(b_1)_n(b_2)_n\ldots(b_q)_n} \frac{z^n}{n!} where `(x)_n` denotes the rising factorial (see :func:`~mpmath.rf`). The parameters lists ``a_s`` and ``b_s`` may contain integers, real numbers, complex numbers, as well as exact fractions given in the form of tuples `(p, q)`. :func:`~mpmath.hyper` is optimized to handle integers and fractions more efficiently than arbitrary floating-point parameters (since rational parameters are by far the most common). **Examples** Verifying that :func:`~mpmath.hyper` gives the sum in the definition, by comparison with :func:`~mpmath.nsum`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a,b,c,d = 2,3,4,5 >>> x = 0.25 >>> hyper([a,b],[c,d],x) 1.078903941164934876086237 >>> fn = lambda n: rf(a,n)*rf(b,n)/rf(c,n)/rf(d,n)*x**n/fac(n) >>> nsum(fn, [0, inf]) 1.078903941164934876086237 The parameters can be any combination of integers, fractions, floats and complex numbers:: >>> a, b, c, d, e = 1, (-1,2), pi, 3+4j, (2,3) >>> x = 0.2j >>> hyper([a,b],[c,d,e],x) (0.9923571616434024810831887 - 0.005753848733883879742993122j) >>> b, e = -0.5, mpf(2)/3 >>> fn = lambda n: rf(a,n)*rf(b,n)/rf(c,n)/rf(d,n)/rf(e,n)*x**n/fac(n) >>> nsum(fn, [0, inf]) (0.9923571616434024810831887 - 0.005753848733883879742993122j) The `\,_0F_0` and `\,_1F_0` series are just elementary functions:: >>> a, z = sqrt(2), +pi >>> hyper([],[],z) 23.14069263277926900572909 >>> exp(z) 23.14069263277926900572909 >>> hyper([a],[],z) (-0.09069132879922920160334114 + 0.3283224323946162083579656j) >>> (1-z)**(-a) (-0.09069132879922920160334114 + 0.3283224323946162083579656j) If any `a_k` coefficient is a nonpositive integer, the series terminates into a finite polynomial:: >>> hyper([1,1,1,-3],[2,5],1) 0.7904761904761904761904762 >>> identify(_) '(83/105)' If any `b_k` is a nonpositive integer, the function is undefined (unless the series terminates before the division by zero occurs):: >>> hyper([1,1,1,-3],[-2,5],1) Traceback (most recent call last): ... ZeroDivisionError: pole in hypergeometric series >>> hyper([1,1,1,-1],[-2,5],1) 1.1 Except for polynomial cases, the radius of convergence `R` of the hypergeometric series is either `R = \infty` (if `p \le q`), `R = 1` (if `p = q+1`), or `R = 0` (if `p > q+1`). The analytic continuations of the functions with `p = q+1`, i.e. `\,_2F_1`, `\,_3F_2`, `\,_4F_3`, etc, are all implemented and therefore these functions can be evaluated for `|z| \ge 1`. The shortcuts :func:`~mpmath.hyp2f1`, :func:`~mpmath.hyp3f2` are available to handle the most common cases (see their documentation), but functions of higher degree are also supported via :func:`~mpmath.hyper`:: >>> hyper([1,2,3,4], [5,6,7], 1) # 4F3 at finite-valued branch point 1.141783505526870731311423 >>> hyper([4,5,6,7], [1,2,3], 1) # 4F3 at pole +inf >>> hyper([1,2,3,4,5], [6,7,8,9], 10) # 5F4 (1.543998916527972259717257 - 0.5876309929580408028816365j) >>> hyper([1,2,3,4,5,6], [7,8,9,10,11], 1j) # 6F5 (0.9996565821853579063502466 + 0.0129721075905630604445669j) Near `z = 1` with noninteger parameters:: >>> hyper(['1/3',1,'3/2',2], ['1/5','11/6','41/8'], 1) 2.219433352235586121250027 >>> hyper(['1/3',1,'3/2',2], ['1/5','11/6','5/4'], 1) +inf >>> eps1 = extradps(6)(lambda: 1 - mpf('1e-6'))() >>> hyper(['1/3',1,'3/2',2], ['1/5','11/6','5/4'], eps1) 2923978034.412973409330956 Please note that, as currently implemented, evaluation of `\,_pF_{p-1}` with `p \ge 3` may be slow or inaccurate when `|z-1|` is small, for some parameter values. Evaluation may be aborted if convergence appears to be too slow. The optional ``maxterms`` (limiting the number of series terms) and ``maxprec`` (limiting the internal precision) keyword arguments can be used to control evaluation:: >>> hyper([1,2,3], [4,5,6], 10000) Traceback (most recent call last): ... NoConvergence: Hypergeometric series converges too slowly. Try increasing maxterms. >>> hyper([1,2,3], [4,5,6], 10000, maxterms=10**6) 7.622806053177969474396918e+4310 Additional options include ``force_series`` (which forces direct use of a hypergeometric series even if another evaluation method might work better) and ``asymp_tol`` which controls the target tolerance for using asymptotic series. When `p > q+1`, ``hyper`` computes the (iterated) Borel sum of the divergent series. For `\,_2F_0` the Borel sum has an analytic solution and can be computed efficiently (see :func:`~mpmath.hyp2f0`). For higher degrees, the functions is evaluated first by attempting to sum it directly as an asymptotic series (this only works for tiny `|z|`), and then by evaluating the Borel regularized sum using numerical integration. Except for special parameter combinations, this can be extremely slow. >>> hyper([1,1], [], 0.5) # regularization of 2F0 (1.340965419580146562086448 + 0.8503366631752726568782447j) >>> hyper([1,1,1,1], [1], 0.5) # regularization of 4F1 (1.108287213689475145830699 + 0.5327107430640678181200491j) With the following magnitude of argument, the asymptotic series for `\,_3F_1` gives only a few digits. Using Borel summation, ``hyper`` can produce a value with full accuracy:: >>> mp.dps = 15 >>> hyper([2,0.5,4], [5.25], '0.08', force_series=True) Traceback (most recent call last): ... NoConvergence: Hypergeometric series converges too slowly. Try increasing maxterms. >>> hyper([2,0.5,4], [5.25], '0.08', asymp_tol=1e-4) 1.0725535790737 >>> hyper([2,0.5,4], [5.25], '0.08') (1.07269542893559 + 5.54668863216891e-5j) >>> hyper([2,0.5,4], [5.25], '-0.08', asymp_tol=1e-4) 0.946344925484879 >>> hyper([2,0.5,4], [5.25], '-0.08') 0.946312503737771 >>> mp.dps = 25 >>> hyper([2,0.5,4], [5.25], '-0.08') 0.9463125037377662296700858 Note that with the positive `z` value, there is a complex part in the correct result, which falls below the tolerance of the asymptotic series. By default, a parameter that appears in both ``a_s`` and ``b_s`` will be removed unless it is a nonpositive integer. This generally speeds up evaluation by producing a hypergeometric function of lower order. This optimization can be disabled by passing ``eliminate=False``. >>> hyper([1,2,3], [4,5,3], 10000) 1.268943190440206905892212e+4321 >>> hyper([1,2,3], [4,5,3], 10000, eliminate=False) Traceback (most recent call last): ... NoConvergence: Hypergeometric series converges too slowly. Try increasing maxterms. >>> hyper([1,2,3], [4,5,3], 10000, eliminate=False, maxterms=10**6) 1.268943190440206905892212e+4321 If a nonpositive integer `-n` appears in both ``a_s`` and ``b_s``, this parameter cannot be unambiguously removed since it creates a term 0 / 0. In this case the hypergeometric series is understood to terminate before the division by zero occurs. This convention is consistent with Mathematica. An alternative convention of eliminating the parameters can be toggled with ``eliminate_all=True``: >>> hyper([2,-1], [-1], 3) 7.0 >>> hyper([2,-1], [-1], 3, eliminate_all=True) 0.25 >>> hyper([2], [], 3) 0.25 """ hypercomb = r""" Computes a weighted combination of hypergeometric functions .. math :: \sum_{r=1}^N \left[ \prod_{k=1}^{l_r} {w_{r,k}}^{c_{r,k}} \frac{\prod_{k=1}^{m_r} \Gamma(\alpha_{r,k})}{\prod_{k=1}^{n_r} \Gamma(\beta_{r,k})} \,_{p_r}F_{q_r}(a_{r,1},\ldots,a_{r,p}; b_{r,1}, \ldots, b_{r,q}; z_r)\right]. Typically the parameters are linear combinations of a small set of base parameters; :func:`~mpmath.hypercomb` permits computing a correct value in the case that some of the `\alpha`, `\beta`, `b` turn out to be nonpositive integers, or if division by zero occurs for some `w^c`, assuming that there are opposing singularities that cancel out. The limit is computed by evaluating the function with the base parameters perturbed, at a higher working precision. The first argument should be a function that takes the perturbable base parameters ``params`` as input and returns `N` tuples ``(w, c, alpha, beta, a, b, z)``, where the coefficients ``w``, ``c``, gamma factors ``alpha``, ``beta``, and hypergeometric coefficients ``a``, ``b`` each should be lists of numbers, and ``z`` should be a single number. **Examples** The following evaluates .. math :: (a-1) \frac{\Gamma(a-3)}{\Gamma(a-4)} \,_1F_1(a,a-1,z) = e^z(a-4)(a+z-1) with `a=1, z=3`. There is a zero factor, two gamma function poles, and the 1F1 function is singular; all singularities cancel out to give a finite value:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> hypercomb(lambda a: [([a-1],[1],[a-3],[a-4],[a],[a-1],3)], [1]) -180.769832308689 >>> -9*exp(3) -180.769832308689 """ hyp0f1 = r""" Gives the hypergeometric function `\,_0F_1`, sometimes known as the confluent limit function, defined as .. math :: \,_0F_1(a,z) = \sum_{k=0}^{\infty} \frac{1}{(a)_k} \frac{z^k}{k!}. This function satisfies the differential equation `z f''(z) + a f'(z) = f(z)`, and is related to the Bessel function of the first kind (see :func:`~mpmath.besselj`). ``hyp0f1(a,z)`` is equivalent to ``hyper([],[a],z)``; see documentation for :func:`~mpmath.hyper` for more information. **Examples** Evaluation for arbitrary arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hyp0f1(2, 0.25) 1.130318207984970054415392 >>> hyp0f1((1,2), 1234567) 6.27287187546220705604627e+964 >>> hyp0f1(3+4j, 1000000j) (3.905169561300910030267132e+606 + 3.807708544441684513934213e+606j) Evaluation is supported for arbitrarily large values of `z`, using asymptotic expansions:: >>> hyp0f1(1, 10**50) 2.131705322874965310390701e+8685889638065036553022565 >>> hyp0f1(1, -10**50) 1.115945364792025420300208e-13 Verifying the differential equation:: >>> a = 2.5 >>> f = lambda z: hyp0f1(a,z) >>> for z in [0, 10, 3+4j]: ... chop(z*diff(f,z,2) + a*diff(f,z) - f(z)) ... 0.0 0.0 0.0 """ hyp1f1 = r""" Gives the confluent hypergeometric function of the first kind, .. math :: \,_1F_1(a,b,z) = \sum_{k=0}^{\infty} \frac{(a)_k}{(b)_k} \frac{z^k}{k!}, also known as Kummer's function and sometimes denoted by `M(a,b,z)`. This function gives one solution to the confluent (Kummer's) differential equation .. math :: z f''(z) + (b-z) f'(z) - af(z) = 0. A second solution is given by the `U` function; see :func:`~mpmath.hyperu`. Solutions are also given in an alternate form by the Whittaker functions (:func:`~mpmath.whitm`, :func:`~mpmath.whitw`). ``hyp1f1(a,b,z)`` is equivalent to ``hyper([a],[b],z)``; see documentation for :func:`~mpmath.hyper` for more information. **Examples** Evaluation for real and complex values of the argument `z`, with fixed parameters `a = 2, b = -1/3`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hyp1f1(2, (-1,3), 3.25) -2815.956856924817275640248 >>> hyp1f1(2, (-1,3), -3.25) -1.145036502407444445553107 >>> hyp1f1(2, (-1,3), 1000) -8.021799872770764149793693e+441 >>> hyp1f1(2, (-1,3), -1000) 0.000003131987633006813594535331 >>> hyp1f1(2, (-1,3), 100+100j) (-3.189190365227034385898282e+48 - 1.106169926814270418999315e+49j) Parameters may be complex:: >>> hyp1f1(2+3j, -1+j, 10j) (261.8977905181045142673351 + 160.8930312845682213562172j) Arbitrarily large values of `z` are supported:: >>> hyp1f1(3, 4, 10**20) 3.890569218254486878220752e+43429448190325182745 >>> hyp1f1(3, 4, -10**20) 6.0e-60 >>> hyp1f1(3, 4, 10**20*j) (-1.935753855797342532571597e-20 - 2.291911213325184901239155e-20j) Verifying the differential equation:: >>> a, b = 1.5, 2 >>> f = lambda z: hyp1f1(a,b,z) >>> for z in [0, -10, 3, 3+4j]: ... chop(z*diff(f,z,2) + (b-z)*diff(f,z) - a*f(z)) ... 0.0 0.0 0.0 0.0 An integral representation:: >>> a, b = 1.5, 3 >>> z = 1.5 >>> hyp1f1(a,b,z) 2.269381460919952778587441 >>> g = lambda t: exp(z*t)*t**(a-1)*(1-t)**(b-a-1) >>> gammaprod([b],[a,b-a])*quad(g, [0,1]) 2.269381460919952778587441 """ hyp1f2 = r""" Gives the hypergeometric function `\,_1F_2(a_1,a_2;b_1,b_2; z)`. The call ``hyp1f2(a1,b1,b2,z)`` is equivalent to ``hyper([a1],[b1,b2],z)``. Evaluation works for complex and arbitrarily large arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a, b, c = 1.5, (-1,3), 2.25 >>> hyp1f2(a, b, c, 10**20) -1.159388148811981535941434e+8685889639 >>> hyp1f2(a, b, c, -10**20) -12.60262607892655945795907 >>> hyp1f2(a, b, c, 10**20*j) (4.237220401382240876065501e+6141851464 - 2.950930337531768015892987e+6141851464j) >>> hyp1f2(2+3j, -2j, 0.5j, 10-20j) (135881.9905586966432662004 - 86681.95885418079535738828j) """ hyp2f2 = r""" Gives the hypergeometric function `\,_2F_2(a_1,a_2;b_1,b_2; z)`. The call ``hyp2f2(a1,a2,b1,b2,z)`` is equivalent to ``hyper([a1,a2],[b1,b2],z)``. Evaluation works for complex and arbitrarily large arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a, b, c, d = 1.5, (-1,3), 2.25, 4 >>> hyp2f2(a, b, c, d, 10**20) -5.275758229007902299823821e+43429448190325182663 >>> hyp2f2(a, b, c, d, -10**20) 2561445.079983207701073448 >>> hyp2f2(a, b, c, d, 10**20*j) (2218276.509664121194836667 - 1280722.539991603850462856j) >>> hyp2f2(2+3j, -2j, 0.5j, 4j, 10-20j) (80500.68321405666957342788 - 20346.82752982813540993502j) """ hyp2f3 = r""" Gives the hypergeometric function `\,_2F_3(a_1,a_2;b_1,b_2,b_3; z)`. The call ``hyp2f3(a1,a2,b1,b2,b3,z)`` is equivalent to ``hyper([a1,a2],[b1,b2,b3],z)``. Evaluation works for arbitrarily large arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a1,a2,b1,b2,b3 = 1.5, (-1,3), 2.25, 4, (1,5) >>> hyp2f3(a1,a2,b1,b2,b3,10**20) -4.169178177065714963568963e+8685889590 >>> hyp2f3(a1,a2,b1,b2,b3,-10**20) 7064472.587757755088178629 >>> hyp2f3(a1,a2,b1,b2,b3,10**20*j) (-5.163368465314934589818543e+6141851415 + 1.783578125755972803440364e+6141851416j) >>> hyp2f3(2+3j, -2j, 0.5j, 4j, -1-j, 10-20j) (-2280.938956687033150740228 + 13620.97336609573659199632j) >>> hyp2f3(2+3j, -2j, 0.5j, 4j, -1-j, 10000000-20000000j) (4.849835186175096516193e+3504 - 3.365981529122220091353633e+3504j) """ hyp2f1 = r""" Gives the Gauss hypergeometric function `\,_2F_1` (often simply referred to as *the* hypergeometric function), defined for `|z| < 1` as .. math :: \,_2F_1(a,b,c,z) = \sum_{k=0}^{\infty} \frac{(a)_k (b)_k}{(c)_k} \frac{z^k}{k!}. and for `|z| \ge 1` by analytic continuation, with a branch cut on `(1, \infty)` when necessary. Special cases of this function include many of the orthogonal polynomials as well as the incomplete beta function and other functions. Properties of the Gauss hypergeometric function are documented comprehensively in many references, for example Abramowitz & Stegun, section 15. The implementation supports the analytic continuation as well as evaluation close to the unit circle where `|z| \approx 1`. The syntax ``hyp2f1(a,b,c,z)`` is equivalent to ``hyper([a,b],[c],z)``. **Examples** Evaluation with `z` inside, outside and on the unit circle, for fixed parameters:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hyp2f1(2, (1,2), 4, 0.75) 1.303703703703703703703704 >>> hyp2f1(2, (1,2), 4, -1.75) 0.7431290566046919177853916 >>> hyp2f1(2, (1,2), 4, 1.75) (1.418075801749271137026239 - 1.114976146679907015775102j) >>> hyp2f1(2, (1,2), 4, 1) 1.6 >>> hyp2f1(2, (1,2), 4, -1) 0.8235498012182875315037882 >>> hyp2f1(2, (1,2), 4, j) (0.9144026291433065674259078 + 0.2050415770437884900574923j) >>> hyp2f1(2, (1,2), 4, 2+j) (0.9274013540258103029011549 + 0.7455257875808100868984496j) >>> hyp2f1(2, (1,2), 4, 0.25j) (0.9931169055799728251931672 + 0.06154836525312066938147793j) Evaluation with complex parameter values:: >>> hyp2f1(1+j, 0.75, 10j, 1+5j) (0.8834833319713479923389638 + 0.7053886880648105068343509j) Evaluation with `z = 1`:: >>> hyp2f1(-2.5, 3.5, 1.5, 1) 0.0 >>> hyp2f1(-2.5, 3, 4, 1) 0.06926406926406926406926407 >>> hyp2f1(2, 3, 4, 1) +inf Evaluation for huge arguments:: >>> hyp2f1((-1,3), 1.75, 4, '1e100') (7.883714220959876246415651e+32 + 1.365499358305579597618785e+33j) >>> hyp2f1((-1,3), 1.75, 4, '1e1000000') (7.883714220959876246415651e+333332 + 1.365499358305579597618785e+333333j) >>> hyp2f1((-1,3), 1.75, 4, '1e1000000j') (1.365499358305579597618785e+333333 - 7.883714220959876246415651e+333332j) An integral representation:: >>> a,b,c,z = -0.5, 1, 2.5, 0.25 >>> g = lambda t: t**(b-1) * (1-t)**(c-b-1) * (1-t*z)**(-a) >>> gammaprod([c],[b,c-b]) * quad(g, [0,1]) 0.9480458814362824478852618 >>> hyp2f1(a,b,c,z) 0.9480458814362824478852618 Verifying the hypergeometric differential equation:: >>> f = lambda z: hyp2f1(a,b,c,z) >>> chop(z*(1-z)*diff(f,z,2) + (c-(a+b+1)*z)*diff(f,z) - a*b*f(z)) 0.0 """ hyp3f2 = r""" Gives the generalized hypergeometric function `\,_3F_2`, defined for `|z| < 1` as .. math :: \,_3F_2(a_1,a_2,a_3,b_1,b_2,z) = \sum_{k=0}^{\infty} \frac{(a_1)_k (a_2)_k (a_3)_k}{(b_1)_k (b_2)_k} \frac{z^k}{k!}. and for `|z| \ge 1` by analytic continuation. The analytic structure of this function is similar to that of `\,_2F_1`, generally with a singularity at `z = 1` and a branch cut on `(1, \infty)`. Evaluation is supported inside, on, and outside the circle of convergence `|z| = 1`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hyp3f2(1,2,3,4,5,0.25) 1.083533123380934241548707 >>> hyp3f2(1,2+2j,3,4,5,-10+10j) (0.1574651066006004632914361 - 0.03194209021885226400892963j) >>> hyp3f2(1,2,3,4,5,-10) 0.3071141169208772603266489 >>> hyp3f2(1,2,3,4,5,10) (-0.4857045320523947050581423 - 0.5988311440454888436888028j) >>> hyp3f2(0.25,1,1,2,1.5,1) 1.157370995096772047567631 >>> (8-pi-2*ln2)/3 1.157370995096772047567631 >>> hyp3f2(1+j,0.5j,2,1,-2j,-1) (1.74518490615029486475959 + 0.1454701525056682297614029j) >>> hyp3f2(1+j,0.5j,2,1,-2j,sqrt(j)) (0.9829816481834277511138055 - 0.4059040020276937085081127j) >>> hyp3f2(-3,2,1,-5,4,1) 1.41 >>> hyp3f2(-3,2,1,-5,4,2) 2.12 Evaluation very close to the unit circle:: >>> hyp3f2(1,2,3,4,5,'1.0001') (1.564877796743282766872279 - 3.76821518787438186031973e-11j) >>> hyp3f2(1,2,3,4,5,'1+0.0001j') (1.564747153061671573212831 + 0.0001305757570366084557648482j) >>> hyp3f2(1,2,3,4,5,'0.9999') 1.564616644881686134983664 >>> hyp3f2(1,2,3,4,5,'-0.9999') 0.7823896253461678060196207 .. note :: Evaluation for `|z-1|` small can currently be inaccurate or slow for some parameter combinations. For various parameter combinations, `\,_3F_2` admits representation in terms of hypergeometric functions of lower degree, or in terms of simpler functions:: >>> for a, b, z in [(1,2,-1), (2,0.5,1)]: ... hyp2f1(a,b,a+b+0.5,z)**2 ... hyp3f2(2*a,a+b,2*b,a+b+0.5,2*a+2*b,z) ... 0.4246104461966439006086308 0.4246104461966439006086308 7.111111111111111111111111 7.111111111111111111111111 >>> z = 2+3j >>> hyp3f2(0.5,1,1.5,2,2,z) (0.7621440939243342419729144 + 0.4249117735058037649915723j) >>> 4*(pi-2*ellipe(z))/(pi*z) (0.7621440939243342419729144 + 0.4249117735058037649915723j) """ hyperu = r""" Gives the Tricomi confluent hypergeometric function `U`, also known as the Kummer or confluent hypergeometric function of the second kind. This function gives a second linearly independent solution to the confluent hypergeometric differential equation (the first is provided by `\,_1F_1` -- see :func:`~mpmath.hyp1f1`). **Examples** Evaluation for arbitrary complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hyperu(2,3,4) 0.0625 >>> hyperu(0.25, 5, 1000) 0.1779949416140579573763523 >>> hyperu(0.25, 5, -1000) (0.1256256609322773150118907 - 0.1256256609322773150118907j) The `U` function may be singular at `z = 0`:: >>> hyperu(1.5, 2, 0) +inf >>> hyperu(1.5, -2, 0) 0.1719434921288400112603671 Verifying the differential equation:: >>> a, b = 1.5, 2 >>> f = lambda z: hyperu(a,b,z) >>> for z in [-10, 3, 3+4j]: ... chop(z*diff(f,z,2) + (b-z)*diff(f,z) - a*f(z)) ... 0.0 0.0 0.0 An integral representation:: >>> a,b,z = 2, 3.5, 4.25 >>> hyperu(a,b,z) 0.06674960718150520648014567 >>> quad(lambda t: exp(-z*t)*t**(a-1)*(1+t)**(b-a-1),[0,inf]) / gamma(a) 0.06674960718150520648014567 [1] http://people.math.sfu.ca/~cbm/aands/page_504.htm """ hyp2f0 = r""" Gives the hypergeometric function `\,_2F_0`, defined formally by the series .. math :: \,_2F_0(a,b;;z) = \sum_{n=0}^{\infty} (a)_n (b)_n \frac{z^n}{n!}. This series usually does not converge. For small enough `z`, it can be viewed as an asymptotic series that may be summed directly with an appropriate truncation. When this is not the case, :func:`~mpmath.hyp2f0` gives a regularized sum, or equivalently, it uses a representation in terms of the hypergeometric U function [1]. The series also converges when either `a` or `b` is a nonpositive integer, as it then terminates into a polynomial after `-a` or `-b` terms. **Examples** Evaluation is supported for arbitrary complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hyp2f0((2,3), 1.25, -100) 0.07095851870980052763312791 >>> hyp2f0((2,3), 1.25, 100) (-0.03254379032170590665041131 + 0.07269254613282301012735797j) >>> hyp2f0(-0.75, 1-j, 4j) (-0.3579987031082732264862155 - 3.052951783922142735255881j) Even with real arguments, the regularized value of 2F0 is often complex-valued, but the imaginary part decreases exponentially as `z \to 0`. In the following example, the first call uses complex evaluation while the second has a small enough `z` to evaluate using the direct series and thus the returned value is strictly real (this should be taken to indicate that the imaginary part is less than ``eps``):: >>> mp.dps = 15 >>> hyp2f0(1.5, 0.5, 0.05) (1.04166637647907 + 8.34584913683906e-8j) >>> hyp2f0(1.5, 0.5, 0.0005) 1.00037535207621 The imaginary part can be retrieved by increasing the working precision:: >>> mp.dps = 80 >>> nprint(hyp2f0(1.5, 0.5, 0.009).imag) 1.23828e-46 In the polynomial case (the series terminating), 2F0 can evaluate exactly:: >>> mp.dps = 15 >>> hyp2f0(-6,-6,2) 291793.0 >>> identify(hyp2f0(-2,1,0.25)) '(5/8)' The coefficients of the polynomials can be recovered using Taylor expansion:: >>> nprint(taylor(lambda x: hyp2f0(-3,0.5,x), 0, 10)) [1.0, -1.5, 2.25, -1.875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] >>> nprint(taylor(lambda x: hyp2f0(-4,0.5,x), 0, 10)) [1.0, -2.0, 4.5, -7.5, 6.5625, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] [1] http://people.math.sfu.ca/~cbm/aands/page_504.htm """ gammainc = r""" ``gammainc(z, a=0, b=inf)`` computes the (generalized) incomplete gamma function with integration limits `[a, b]`: .. math :: \Gamma(z,a,b) = \int_a^b t^{z-1} e^{-t} \, dt The generalized incomplete gamma function reduces to the following special cases when one or both endpoints are fixed: * `\Gamma(z,0,\infty)` is the standard ("complete") gamma function, `\Gamma(z)` (available directly as the mpmath function :func:`~mpmath.gamma`) * `\Gamma(z,a,\infty)` is the "upper" incomplete gamma function, `\Gamma(z,a)` * `\Gamma(z,0,b)` is the "lower" incomplete gamma function, `\gamma(z,b)`. Of course, we have `\Gamma(z,0,x) + \Gamma(z,x,\infty) = \Gamma(z)` for all `z` and `x`. Note however that some authors reverse the order of the arguments when defining the lower and upper incomplete gamma function, so one should be careful to get the correct definition. If also given the keyword argument ``regularized=True``, :func:`~mpmath.gammainc` computes the "regularized" incomplete gamma function .. math :: P(z,a,b) = \frac{\Gamma(z,a,b)}{\Gamma(z)}. **Examples** We can compare with numerical quadrature to verify that :func:`~mpmath.gammainc` computes the integral in the definition:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> gammainc(2+3j, 4, 10) (0.00977212668627705160602312 - 0.0770637306312989892451977j) >>> quad(lambda t: t**(2+3j-1) * exp(-t), [4, 10]) (0.00977212668627705160602312 - 0.0770637306312989892451977j) Argument symmetries follow directly from the integral definition:: >>> gammainc(3, 4, 5) + gammainc(3, 5, 4) 0.0 >>> gammainc(3,0,2) + gammainc(3,2,4); gammainc(3,0,4) 1.523793388892911312363331 1.523793388892911312363331 >>> findroot(lambda z: gammainc(2,z,3), 1) 3.0 Evaluation for arbitrarily large arguments:: >>> gammainc(10, 100) 4.083660630910611272288592e-26 >>> gammainc(10, 10000000000000000) 5.290402449901174752972486e-4342944819032375 >>> gammainc(3+4j, 1000000+1000000j) (-1.257913707524362408877881e-434284 + 2.556691003883483531962095e-434284j) Evaluation of a generalized incomplete gamma function automatically chooses the representation that gives a more accurate result, depending on which parameter is larger:: >>> gammainc(10000000, 3) - gammainc(10000000, 2) # Bad 0.0 >>> gammainc(10000000, 2, 3) # Good 1.755146243738946045873491e+4771204 >>> gammainc(2, 0, 100000001) - gammainc(2, 0, 100000000) # Bad 0.0 >>> gammainc(2, 100000000, 100000001) # Good 4.078258353474186729184421e-43429441 The incomplete gamma functions satisfy simple recurrence relations:: >>> mp.dps = 25 >>> z, a = mpf(3.5), mpf(2) >>> gammainc(z+1, a); z*gammainc(z,a) + a**z*exp(-a) 10.60130296933533459267329 10.60130296933533459267329 >>> gammainc(z+1,0,a); z*gammainc(z,0,a) - a**z*exp(-a) 1.030425427232114336470932 1.030425427232114336470932 Evaluation at integers and poles:: >>> gammainc(-3, -4, -5) (-0.2214577048967798566234192 + 0.0j) >>> gammainc(-3, 0, 5) +inf If `z` is an integer, the recurrence reduces the incomplete gamma function to `P(a) \exp(-a) + Q(b) \exp(-b)` where `P` and `Q` are polynomials:: >>> gammainc(1, 2); exp(-2) 0.1353352832366126918939995 0.1353352832366126918939995 >>> mp.dps = 50 >>> identify(gammainc(6, 1, 2), ['exp(-1)', 'exp(-2)']) '(326*exp(-1) + (-872)*exp(-2))' The incomplete gamma functions reduce to functions such as the exponential integral Ei and the error function for special arguments:: >>> mp.dps = 25 >>> gammainc(0, 4); -ei(-4) 0.00377935240984890647887486 0.00377935240984890647887486 >>> gammainc(0.5, 0, 2); sqrt(pi)*erf(sqrt(2)) 1.691806732945198336509541 1.691806732945198336509541 """ erf = r""" Computes the error function, `\mathrm{erf}(x)`. The error function is the normalized antiderivative of the Gaussian function `\exp(-t^2)`. More precisely, .. math:: \mathrm{erf}(x) = \frac{2}{\sqrt \pi} \int_0^x \exp(-t^2) \,dt **Basic examples** Simple values and limits include:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> erf(0) 0.0 >>> erf(1) 0.842700792949715 >>> erf(-1) -0.842700792949715 >>> erf(inf) 1.0 >>> erf(-inf) -1.0 For large real `x`, `\mathrm{erf}(x)` approaches 1 very rapidly:: >>> erf(3) 0.999977909503001 >>> erf(5) 0.999999999998463 The error function is an odd function:: >>> nprint(chop(taylor(erf, 0, 5))) [0.0, 1.12838, 0.0, -0.376126, 0.0, 0.112838] :func:`~mpmath.erf` implements arbitrary-precision evaluation and supports complex numbers:: >>> mp.dps = 50 >>> erf(0.5) 0.52049987781304653768274665389196452873645157575796 >>> mp.dps = 25 >>> erf(1+j) (1.316151281697947644880271 + 0.1904534692378346862841089j) Evaluation is supported for large arguments:: >>> mp.dps = 25 >>> erf('1e1000') 1.0 >>> erf('-1e1000') -1.0 >>> erf('1e-1000') 1.128379167095512573896159e-1000 >>> erf('1e7j') (0.0 + 8.593897639029319267398803e+43429448190317j) >>> erf('1e7+1e7j') (0.9999999858172446172631323 + 3.728805278735270407053139e-8j) **Related functions** See also :func:`~mpmath.erfc`, which is more accurate for large `x`, and :func:`~mpmath.erfi` which gives the antiderivative of `\exp(t^2)`. The Fresnel integrals :func:`~mpmath.fresnels` and :func:`~mpmath.fresnelc` are also related to the error function. """ erfc = r""" Computes the complementary error function, `\mathrm{erfc}(x) = 1-\mathrm{erf}(x)`. This function avoids cancellation that occurs when naively computing the complementary error function as ``1-erf(x)``:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> 1 - erf(10) 0.0 >>> erfc(10) 2.08848758376254e-45 :func:`~mpmath.erfc` works accurately even for ludicrously large arguments:: >>> erfc(10**10) 4.3504398860243e-43429448190325182776 Complex arguments are supported:: >>> erfc(500+50j) (1.19739830969552e-107492 + 1.46072418957528e-107491j) """ erfi = r""" Computes the imaginary error function, `\mathrm{erfi}(x)`. The imaginary error function is defined in analogy with the error function, but with a positive sign in the integrand: .. math :: \mathrm{erfi}(x) = \frac{2}{\sqrt \pi} \int_0^x \exp(t^2) \,dt Whereas the error function rapidly converges to 1 as `x` grows, the imaginary error function rapidly diverges to infinity. The functions are related as `\mathrm{erfi}(x) = -i\,\mathrm{erf}(ix)` for all complex numbers `x`. **Examples** Basic values and limits:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> erfi(0) 0.0 >>> erfi(1) 1.65042575879754 >>> erfi(-1) -1.65042575879754 >>> erfi(inf) +inf >>> erfi(-inf) -inf Note the symmetry between erf and erfi:: >>> erfi(3j) (0.0 + 0.999977909503001j) >>> erf(3) 0.999977909503001 >>> erf(1+2j) (-0.536643565778565 - 5.04914370344703j) >>> erfi(2+1j) (-5.04914370344703 - 0.536643565778565j) Large arguments are supported:: >>> erfi(1000) 1.71130938718796e+434291 >>> erfi(10**10) 7.3167287567024e+43429448190325182754 >>> erfi(-10**10) -7.3167287567024e+43429448190325182754 >>> erfi(1000-500j) (2.49895233563961e+325717 + 2.6846779342253e+325717j) >>> erfi(100000j) (0.0 + 1.0j) >>> erfi(-100000j) (0.0 - 1.0j) """ erfinv = r""" Computes the inverse error function, satisfying .. math :: \mathrm{erf}(\mathrm{erfinv}(x)) = \mathrm{erfinv}(\mathrm{erf}(x)) = x. This function is defined only for `-1 \le x \le 1`. **Examples** Special values include:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> erfinv(0) 0.0 >>> erfinv(1) +inf >>> erfinv(-1) -inf The domain is limited to the standard interval:: >>> erfinv(2) Traceback (most recent call last): ... ValueError: erfinv(x) is defined only for -1 <= x <= 1 It is simple to check that :func:`~mpmath.erfinv` computes inverse values of :func:`~mpmath.erf` as promised:: >>> erf(erfinv(0.75)) 0.75 >>> erf(erfinv(-0.995)) -0.995 :func:`~mpmath.erfinv` supports arbitrary-precision evaluation:: >>> mp.dps = 50 >>> x = erf(2) >>> x 0.99532226501895273416206925636725292861089179704006 >>> erfinv(x) 2.0 A definite integral involving the inverse error function:: >>> mp.dps = 15 >>> quad(erfinv, [0, 1]) 0.564189583547756 >>> 1/sqrt(pi) 0.564189583547756 The inverse error function can be used to generate random numbers with a Gaussian distribution (although this is a relatively inefficient algorithm):: >>> nprint([erfinv(2*rand()-1) for n in range(6)]) # doctest: +SKIP [-0.586747, 1.10233, -0.376796, 0.926037, -0.708142, -0.732012] """ npdf = r""" ``npdf(x, mu=0, sigma=1)`` evaluates the probability density function of a normal distribution with mean value `\mu` and variance `\sigma^2`. Elementary properties of the probability distribution can be verified using numerical integration:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> quad(npdf, [-inf, inf]) 1.0 >>> quad(lambda x: npdf(x, 3), [3, inf]) 0.5 >>> quad(lambda x: npdf(x, 3, 2), [3, inf]) 0.5 See also :func:`~mpmath.ncdf`, which gives the cumulative distribution. """ ncdf = r""" ``ncdf(x, mu=0, sigma=1)`` evaluates the cumulative distribution function of a normal distribution with mean value `\mu` and variance `\sigma^2`. See also :func:`~mpmath.npdf`, which gives the probability density. Elementary properties include:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> ncdf(pi, mu=pi) 0.5 >>> ncdf(-inf) 0.0 >>> ncdf(+inf) 1.0 The cumulative distribution is the integral of the density function having identical mu and sigma:: >>> mp.dps = 15 >>> diff(ncdf, 2) 0.053990966513188 >>> npdf(2) 0.053990966513188 >>> diff(lambda x: ncdf(x, 1, 0.5), 0) 0.107981933026376 >>> npdf(0, 1, 0.5) 0.107981933026376 """ expint = r""" :func:`~mpmath.expint(n,z)` gives the generalized exponential integral or En-function, .. math :: \mathrm{E}_n(z) = \int_1^{\infty} \frac{e^{-zt}}{t^n} dt, where `n` and `z` may both be complex numbers. The case with `n = 1` is also given by :func:`~mpmath.e1`. **Examples** Evaluation at real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> expint(1, 6.25) 0.0002704758872637179088496194 >>> expint(-3, 2+3j) (0.00299658467335472929656159 + 0.06100816202125885450319632j) >>> expint(2+3j, 4-5j) (0.001803529474663565056945248 - 0.002235061547756185403349091j) At negative integer values of `n`, `E_n(z)` reduces to a rational-exponential function:: >>> f = lambda n, z: fac(n)*sum(z**k/fac(k-1) for k in range(1,n+2))/\ ... exp(z)/z**(n+2) >>> n = 3 >>> z = 1/pi >>> expint(-n,z) 584.2604820613019908668219 >>> f(n,z) 584.2604820613019908668219 >>> n = 5 >>> expint(-n,z) 115366.5762594725451811138 >>> f(n,z) 115366.5762594725451811138 """ e1 = r""" Computes the exponential integral `\mathrm{E}_1(z)`, given by .. math :: \mathrm{E}_1(z) = \int_z^{\infty} \frac{e^{-t}}{t} dt. This is equivalent to :func:`~mpmath.expint` with `n = 1`. **Examples** Two ways to evaluate this function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> e1(6.25) 0.0002704758872637179088496194 >>> expint(1,6.25) 0.0002704758872637179088496194 The E1-function is essentially the same as the Ei-function (:func:`~mpmath.ei`) with negated argument, except for an imaginary branch cut term:: >>> e1(2.5) 0.02491491787026973549562801 >>> -ei(-2.5) 0.02491491787026973549562801 >>> e1(-2.5) (-7.073765894578600711923552 - 3.141592653589793238462643j) >>> -ei(2.5) -7.073765894578600711923552 """ ei = r""" Computes the exponential integral or Ei-function, `\mathrm{Ei}(x)`. The exponential integral is defined as .. math :: \mathrm{Ei}(x) = \int_{-\infty\,}^x \frac{e^t}{t} \, dt. When the integration range includes `t = 0`, the exponential integral is interpreted as providing the Cauchy principal value. For real `x`, the Ei-function behaves roughly like `\mathrm{Ei}(x) \approx \exp(x) + \log(|x|)`. The Ei-function is related to the more general family of exponential integral functions denoted by `E_n`, which are available as :func:`~mpmath.expint`. **Basic examples** Some basic values and limits are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> ei(0) -inf >>> ei(1) 1.89511781635594 >>> ei(inf) +inf >>> ei(-inf) 0.0 For `x < 0`, the defining integral can be evaluated numerically as a reference:: >>> ei(-4) -0.00377935240984891 >>> quad(lambda t: exp(t)/t, [-inf, -4]) -0.00377935240984891 :func:`~mpmath.ei` supports complex arguments and arbitrary precision evaluation:: >>> mp.dps = 50 >>> ei(pi) 10.928374389331410348638445906907535171566338835056 >>> mp.dps = 25 >>> ei(3+4j) (-4.154091651642689822535359 + 4.294418620024357476985535j) **Related functions** The exponential integral is closely related to the logarithmic integral. See :func:`~mpmath.li` for additional information. The exponential integral is related to the hyperbolic and trigonometric integrals (see :func:`~mpmath.chi`, :func:`~mpmath.shi`, :func:`~mpmath.ci`, :func:`~mpmath.si`) similarly to how the ordinary exponential function is related to the hyperbolic and trigonometric functions:: >>> mp.dps = 15 >>> ei(3) 9.93383257062542 >>> chi(3) + shi(3) 9.93383257062542 >>> chop(ci(3j) - j*si(3j) - pi*j/2) 9.93383257062542 Beware that logarithmic corrections, as in the last example above, are required to obtain the correct branch in general. For details, see [1]. The exponential integral is also a special case of the hypergeometric function `\,_2F_2`:: >>> z = 0.6 >>> z*hyper([1,1],[2,2],z) + (ln(z)-ln(1/z))/2 + euler 0.769881289937359 >>> ei(z) 0.769881289937359 **References** 1. Relations between Ei and other functions: http://functions.wolfram.com/GammaBetaErf/ExpIntegralEi/27/01/ 2. Abramowitz & Stegun, section 5: http://people.math.sfu.ca/~cbm/aands/page_228.htm 3. Asymptotic expansion for Ei: http://mathworld.wolfram.com/En-Function.html """ li = r""" Computes the logarithmic integral or li-function `\mathrm{li}(x)`, defined by .. math :: \mathrm{li}(x) = \int_0^x \frac{1}{\log t} \, dt The logarithmic integral has a singularity at `x = 1`. Alternatively, ``li(x, offset=True)`` computes the offset logarithmic integral (used in number theory) .. math :: \mathrm{Li}(x) = \int_2^x \frac{1}{\log t} \, dt. These two functions are related via the simple identity `\mathrm{Li}(x) = \mathrm{li}(x) - \mathrm{li}(2)`. The logarithmic integral should also not be confused with the polylogarithm (also denoted by Li), which is implemented as :func:`~mpmath.polylog`. **Examples** Some basic values and limits:: >>> from mpmath import * >>> mp.dps = 30; mp.pretty = True >>> li(0) 0.0 >>> li(1) -inf >>> li(1) -inf >>> li(2) 1.04516378011749278484458888919 >>> findroot(li, 2) 1.45136923488338105028396848589 >>> li(inf) +inf >>> li(2, offset=True) 0.0 >>> li(1, offset=True) -inf >>> li(0, offset=True) -1.04516378011749278484458888919 >>> li(10, offset=True) 5.12043572466980515267839286347 The logarithmic integral can be evaluated for arbitrary complex arguments:: >>> mp.dps = 20 >>> li(3+4j) (3.1343755504645775265 + 2.6769247817778742392j) The logarithmic integral is related to the exponential integral:: >>> ei(log(3)) 2.1635885946671919729 >>> li(3) 2.1635885946671919729 The logarithmic integral grows like `O(x/\log(x))`:: >>> mp.dps = 15 >>> x = 10**100 >>> x/log(x) 4.34294481903252e+97 >>> li(x) 4.3619719871407e+97 The prime number theorem states that the number of primes less than `x` is asymptotic to `\mathrm{Li}(x)` (equivalently `\mathrm{li}(x)`). For example, it is known that there are exactly 1,925,320,391,606,803,968,923 prime numbers less than `10^{23}` [1]. The logarithmic integral provides a very accurate estimate:: >>> li(10**23, offset=True) 1.92532039161405e+21 A definite integral is:: >>> quad(li, [0, 1]) -0.693147180559945 >>> -ln(2) -0.693147180559945 **References** 1. http://mathworld.wolfram.com/PrimeCountingFunction.html 2. http://mathworld.wolfram.com/LogarithmicIntegral.html """ ci = r""" Computes the cosine integral, .. math :: \mathrm{Ci}(x) = -\int_x^{\infty} \frac{\cos t}{t}\,dt = \gamma + \log x + \int_0^x \frac{\cos t - 1}{t}\,dt **Examples** Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> ci(0) -inf >>> ci(1) 0.3374039229009681346626462 >>> ci(pi) 0.07366791204642548599010096 >>> ci(inf) 0.0 >>> ci(-inf) (0.0 + 3.141592653589793238462643j) >>> ci(2+3j) (1.408292501520849518759125 - 2.983617742029605093121118j) The cosine integral behaves roughly like the sinc function (see :func:`~mpmath.sinc`) for large real `x`:: >>> ci(10**10) -4.875060251748226537857298e-11 >>> sinc(10**10) -4.875060250875106915277943e-11 >>> chop(limit(ci, inf)) 0.0 It has infinitely many roots on the positive real axis:: >>> findroot(ci, 1) 0.6165054856207162337971104 >>> findroot(ci, 2) 3.384180422551186426397851 Evaluation is supported for `z` anywhere in the complex plane:: >>> ci(10**6*(1+j)) (4.449410587611035724984376e+434287 + 9.75744874290013526417059e+434287j) We can evaluate the defining integral as a reference:: >>> mp.dps = 15 >>> -quadosc(lambda t: cos(t)/t, [5, inf], omega=1) -0.190029749656644 >>> ci(5) -0.190029749656644 Some infinite series can be evaluated using the cosine integral:: >>> nsum(lambda k: (-1)**k/(fac(2*k)*(2*k)), [1,inf]) -0.239811742000565 >>> ci(1) - euler -0.239811742000565 """ si = r""" Computes the sine integral, .. math :: \mathrm{Si}(x) = \int_0^x \frac{\sin t}{t}\,dt. The sine integral is thus the antiderivative of the sinc function (see :func:`~mpmath.sinc`). **Examples** Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> si(0) 0.0 >>> si(1) 0.9460830703671830149413533 >>> si(-1) -0.9460830703671830149413533 >>> si(pi) 1.851937051982466170361053 >>> si(inf) 1.570796326794896619231322 >>> si(-inf) -1.570796326794896619231322 >>> si(2+3j) (4.547513889562289219853204 + 1.399196580646054789459839j) The sine integral approaches `\pi/2` for large real `x`:: >>> si(10**10) 1.570796326707584656968511 >>> pi/2 1.570796326794896619231322 Evaluation is supported for `z` anywhere in the complex plane:: >>> si(10**6*(1+j)) (-9.75744874290013526417059e+434287 + 4.449410587611035724984376e+434287j) We can evaluate the defining integral as a reference:: >>> mp.dps = 15 >>> quad(sinc, [0, 5]) 1.54993124494467 >>> si(5) 1.54993124494467 Some infinite series can be evaluated using the sine integral:: >>> nsum(lambda k: (-1)**k/(fac(2*k+1)*(2*k+1)), [0,inf]) 0.946083070367183 >>> si(1) 0.946083070367183 """ chi = r""" Computes the hyperbolic cosine integral, defined in analogy with the cosine integral (see :func:`~mpmath.ci`) as .. math :: \mathrm{Chi}(x) = -\int_x^{\infty} \frac{\cosh t}{t}\,dt = \gamma + \log x + \int_0^x \frac{\cosh t - 1}{t}\,dt Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> chi(0) -inf >>> chi(1) 0.8378669409802082408946786 >>> chi(inf) +inf >>> findroot(chi, 0.5) 0.5238225713898644064509583 >>> chi(2+3j) (-0.1683628683277204662429321 + 2.625115880451325002151688j) Evaluation is supported for `z` anywhere in the complex plane:: >>> chi(10**6*(1+j)) (4.449410587611035724984376e+434287 - 9.75744874290013526417059e+434287j) """ shi = r""" Computes the hyperbolic sine integral, defined in analogy with the sine integral (see :func:`~mpmath.si`) as .. math :: \mathrm{Shi}(x) = \int_0^x \frac{\sinh t}{t}\,dt. Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> shi(0) 0.0 >>> shi(1) 1.057250875375728514571842 >>> shi(-1) -1.057250875375728514571842 >>> shi(inf) +inf >>> shi(2+3j) (-0.1931890762719198291678095 + 2.645432555362369624818525j) Evaluation is supported for `z` anywhere in the complex plane:: >>> shi(10**6*(1+j)) (4.449410587611035724984376e+434287 - 9.75744874290013526417059e+434287j) """ fresnels = r""" Computes the Fresnel sine integral .. math :: S(x) = \int_0^x \sin\left(\frac{\pi t^2}{2}\right) \,dt Note that some sources define this function without the normalization factor `\pi/2`. **Examples** Some basic values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> fresnels(0) 0.0 >>> fresnels(inf) 0.5 >>> fresnels(-inf) -0.5 >>> fresnels(1) 0.4382591473903547660767567 >>> fresnels(1+2j) (36.72546488399143842838788 + 15.58775110440458732748279j) Comparing with the definition:: >>> fresnels(3) 0.4963129989673750360976123 >>> quad(lambda t: sin(pi*t**2/2), [0,3]) 0.4963129989673750360976123 """ fresnelc = r""" Computes the Fresnel cosine integral .. math :: C(x) = \int_0^x \cos\left(\frac{\pi t^2}{2}\right) \,dt Note that some sources define this function without the normalization factor `\pi/2`. **Examples** Some basic values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> fresnelc(0) 0.0 >>> fresnelc(inf) 0.5 >>> fresnelc(-inf) -0.5 >>> fresnelc(1) 0.7798934003768228294742064 >>> fresnelc(1+2j) (16.08787137412548041729489 - 36.22568799288165021578758j) Comparing with the definition:: >>> fresnelc(3) 0.6057207892976856295561611 >>> quad(lambda t: cos(pi*t**2/2), [0,3]) 0.6057207892976856295561611 """ airyai = r""" Computes the Airy function `\operatorname{Ai}(z)`, which is the solution of the Airy differential equation `f''(z) - z f(z) = 0` with initial conditions .. math :: \operatorname{Ai}(0) = \frac{1}{3^{2/3}\Gamma\left(\frac{2}{3}\right)} \operatorname{Ai}'(0) = -\frac{1}{3^{1/3}\Gamma\left(\frac{1}{3}\right)}. Other common ways of defining the Ai-function include integrals such as .. math :: \operatorname{Ai}(x) = \frac{1}{\pi} \int_0^{\infty} \cos\left(\frac{1}{3}t^3+xt\right) dt \qquad x \in \mathbb{R} \operatorname{Ai}(z) = \frac{\sqrt{3}}{2\pi} \int_0^{\infty} \exp\left(-\frac{t^3}{3}-\frac{z^3}{3t^3}\right) dt. The Ai-function is an entire function with a turning point, behaving roughly like a slowly decaying sine wave for `z < 0` and like a rapidly decreasing exponential for `z > 0`. A second solution of the Airy differential equation is given by `\operatorname{Bi}(z)` (see :func:`~mpmath.airybi`). Optionally, with *derivative=alpha*, :func:`airyai` can compute the `\alpha`-th order fractional derivative with respect to `z`. For `\alpha = n = 1,2,3,\ldots` this gives the derivative `\operatorname{Ai}^{(n)}(z)`, and for `\alpha = -n = -1,-2,-3,\ldots` this gives the `n`-fold iterated integral .. math :: f_0(z) = \operatorname{Ai}(z) f_n(z) = \int_0^z f_{n-1}(t) dt. The Ai-function has infinitely many zeros, all located along the negative half of the real axis. They can be computed with :func:`~mpmath.airyaizero`. **Plots** .. literalinclude :: /plots/ai.py .. image :: /plots/ai.png .. literalinclude :: /plots/ai_c.py .. image :: /plots/ai_c.png **Basic examples** Limits and values include:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> airyai(0); 1/(power(3,'2/3')*gamma('2/3')) 0.3550280538878172392600632 0.3550280538878172392600632 >>> airyai(1) 0.1352924163128814155241474 >>> airyai(-1) 0.5355608832923521187995166 >>> airyai(inf); airyai(-inf) 0.0 0.0 Evaluation is supported for large magnitudes of the argument:: >>> airyai(-100) 0.1767533932395528780908311 >>> airyai(100) 2.634482152088184489550553e-291 >>> airyai(50+50j) (-5.31790195707456404099817e-68 - 1.163588003770709748720107e-67j) >>> airyai(-50+50j) (1.041242537363167632587245e+158 + 3.347525544923600321838281e+157j) Huge arguments are also fine:: >>> airyai(10**10) 1.162235978298741779953693e-289529654602171 >>> airyai(-10**10) 0.0001736206448152818510510181 >>> w = airyai(10**10*(1+j)) >>> w.real 5.711508683721355528322567e-186339621747698 >>> w.imag 1.867245506962312577848166e-186339621747697 The first root of the Ai-function is:: >>> findroot(airyai, -2) -2.338107410459767038489197 >>> airyaizero(1) -2.338107410459767038489197 **Properties and relations** Verifying the Airy differential equation:: >>> for z in [-3.4, 0, 2.5, 1+2j]: ... chop(airyai(z,2) - z*airyai(z)) ... 0.0 0.0 0.0 0.0 The first few terms of the Taylor series expansion around `z = 0` (every third term is zero):: >>> nprint(taylor(airyai, 0, 5)) [0.355028, -0.258819, 0.0, 0.0591713, -0.0215683, 0.0] The Airy functions satisfy the Wronskian relation `\operatorname{Ai}(z) \operatorname{Bi}'(z) - \operatorname{Ai}'(z) \operatorname{Bi}(z) = 1/\pi`:: >>> z = -0.5 >>> airyai(z)*airybi(z,1) - airyai(z,1)*airybi(z) 0.3183098861837906715377675 >>> 1/pi 0.3183098861837906715377675 The Airy functions can be expressed in terms of Bessel functions of order `\pm 1/3`. For `\Re[z] \le 0`, we have:: >>> z = -3 >>> airyai(z) -0.3788142936776580743472439 >>> y = 2*power(-z,'3/2')/3 >>> (sqrt(-z) * (besselj('1/3',y) + besselj('-1/3',y)))/3 -0.3788142936776580743472439 **Derivatives and integrals** Derivatives of the Ai-function (directly and using :func:`~mpmath.diff`):: >>> airyai(-3,1); diff(airyai,-3) 0.3145837692165988136507873 0.3145837692165988136507873 >>> airyai(-3,2); diff(airyai,-3,2) 1.136442881032974223041732 1.136442881032974223041732 >>> airyai(1000,1); diff(airyai,1000) -2.943133917910336090459748e-9156 -2.943133917910336090459748e-9156 Several derivatives at `z = 0`:: >>> airyai(0,0); airyai(0,1); airyai(0,2) 0.3550280538878172392600632 -0.2588194037928067984051836 0.0 >>> airyai(0,3); airyai(0,4); airyai(0,5) 0.3550280538878172392600632 -0.5176388075856135968103671 0.0 >>> airyai(0,15); airyai(0,16); airyai(0,17) 1292.30211615165475090663 -3188.655054727379756351861 0.0 The integral of the Ai-function:: >>> airyai(3,-1); quad(airyai, [0,3]) 0.3299203760070217725002701 0.3299203760070217725002701 >>> airyai(-10,-1); quad(airyai, [0,-10]) -0.765698403134212917425148 -0.765698403134212917425148 Integrals of high or fractional order:: >>> airyai(-2,0.5); differint(airyai,-2,0.5,0) (0.0 + 0.2453596101351438273844725j) (0.0 + 0.2453596101351438273844725j) >>> airyai(-2,-4); differint(airyai,-2,-4,0) 0.2939176441636809580339365 0.2939176441636809580339365 >>> airyai(0,-1); airyai(0,-2); airyai(0,-3) 0.0 0.0 0.0 Integrals of the Ai-function can be evaluated at limit points:: >>> airyai(-1000000,-1); airyai(-inf,-1) -0.6666843728311539978751512 -0.6666666666666666666666667 >>> airyai(10,-1); airyai(+inf,-1) 0.3333333332991690159427932 0.3333333333333333333333333 >>> airyai(+inf,-2); airyai(+inf,-3) +inf +inf >>> airyai(-1000000,-2); airyai(-inf,-2) 666666.4078472650651209742 +inf >>> airyai(-1000000,-3); airyai(-inf,-3) -333333074513.7520264995733 -inf **References** 1. [DLMF]_ Chapter 9: Airy and Related Functions 2. [WolframFunctions]_ section: Bessel-Type Functions """ airybi = r""" Computes the Airy function `\operatorname{Bi}(z)`, which is the solution of the Airy differential equation `f''(z) - z f(z) = 0` with initial conditions .. math :: \operatorname{Bi}(0) = \frac{1}{3^{1/6}\Gamma\left(\frac{2}{3}\right)} \operatorname{Bi}'(0) = \frac{3^{1/6}}{\Gamma\left(\frac{1}{3}\right)}. Like the Ai-function (see :func:`~mpmath.airyai`), the Bi-function is oscillatory for `z < 0`, but it grows rather than decreases for `z > 0`. Optionally, as for :func:`~mpmath.airyai`, derivatives, integrals and fractional derivatives can be computed with the *derivative* parameter. The Bi-function has infinitely many zeros along the negative half-axis, as well as complex zeros, which can all be computed with :func:`~mpmath.airybizero`. **Plots** .. literalinclude :: /plots/bi.py .. image :: /plots/bi.png .. literalinclude :: /plots/bi_c.py .. image :: /plots/bi_c.png **Basic examples** Limits and values include:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> airybi(0); 1/(power(3,'1/6')*gamma('2/3')) 0.6149266274460007351509224 0.6149266274460007351509224 >>> airybi(1) 1.207423594952871259436379 >>> airybi(-1) 0.10399738949694461188869 >>> airybi(inf); airybi(-inf) +inf 0.0 Evaluation is supported for large magnitudes of the argument:: >>> airybi(-100) 0.02427388768016013160566747 >>> airybi(100) 6.041223996670201399005265e+288 >>> airybi(50+50j) (-5.322076267321435669290334e+63 + 1.478450291165243789749427e+65j) >>> airybi(-50+50j) (-3.347525544923600321838281e+157 + 1.041242537363167632587245e+158j) Huge arguments:: >>> airybi(10**10) 1.369385787943539818688433e+289529654602165 >>> airybi(-10**10) 0.001775656141692932747610973 >>> w = airybi(10**10*(1+j)) >>> w.real -6.559955931096196875845858e+186339621747689 >>> w.imag -6.822462726981357180929024e+186339621747690 The first real root of the Bi-function is:: >>> findroot(airybi, -1); airybizero(1) -1.17371322270912792491998 -1.17371322270912792491998 **Properties and relations** Verifying the Airy differential equation:: >>> for z in [-3.4, 0, 2.5, 1+2j]: ... chop(airybi(z,2) - z*airybi(z)) ... 0.0 0.0 0.0 0.0 The first few terms of the Taylor series expansion around `z = 0` (every third term is zero):: >>> nprint(taylor(airybi, 0, 5)) [0.614927, 0.448288, 0.0, 0.102488, 0.0373574, 0.0] The Airy functions can be expressed in terms of Bessel functions of order `\pm 1/3`. For `\Re[z] \le 0`, we have:: >>> z = -3 >>> airybi(z) -0.1982896263749265432206449 >>> p = 2*power(-z,'3/2')/3 >>> sqrt(-mpf(z)/3)*(besselj('-1/3',p) - besselj('1/3',p)) -0.1982896263749265432206449 **Derivatives and integrals** Derivatives of the Bi-function (directly and using :func:`~mpmath.diff`):: >>> airybi(-3,1); diff(airybi,-3) -0.675611222685258537668032 -0.675611222685258537668032 >>> airybi(-3,2); diff(airybi,-3,2) 0.5948688791247796296619346 0.5948688791247796296619346 >>> airybi(1000,1); diff(airybi,1000) 1.710055114624614989262335e+9156 1.710055114624614989262335e+9156 Several derivatives at `z = 0`:: >>> airybi(0,0); airybi(0,1); airybi(0,2) 0.6149266274460007351509224 0.4482883573538263579148237 0.0 >>> airybi(0,3); airybi(0,4); airybi(0,5) 0.6149266274460007351509224 0.8965767147076527158296474 0.0 >>> airybi(0,15); airybi(0,16); airybi(0,17) 2238.332923903442675949357 5522.912562599140729510628 0.0 The integral of the Bi-function:: >>> airybi(3,-1); quad(airybi, [0,3]) 10.06200303130620056316655 10.06200303130620056316655 >>> airybi(-10,-1); quad(airybi, [0,-10]) -0.01504042480614002045135483 -0.01504042480614002045135483 Integrals of high or fractional order:: >>> airybi(-2,0.5); differint(airybi, -2, 0.5, 0) (0.0 + 0.5019859055341699223453257j) (0.0 + 0.5019859055341699223453257j) >>> airybi(-2,-4); differint(airybi,-2,-4,0) 0.2809314599922447252139092 0.2809314599922447252139092 >>> airybi(0,-1); airybi(0,-2); airybi(0,-3) 0.0 0.0 0.0 Integrals of the Bi-function can be evaluated at limit points:: >>> airybi(-1000000,-1); airybi(-inf,-1) 0.000002191261128063434047966873 0.0 >>> airybi(10,-1); airybi(+inf,-1) 147809803.1074067161675853 +inf >>> airybi(+inf,-2); airybi(+inf,-3) +inf +inf >>> airybi(-1000000,-2); airybi(-inf,-2) 0.4482883750599908479851085 0.4482883573538263579148237 >>> gamma('2/3')*power(3,'2/3')/(2*pi) 0.4482883573538263579148237 >>> airybi(-100000,-3); airybi(-inf,-3) -44828.52827206932872493133 -inf >>> airybi(-100000,-4); airybi(-inf,-4) 2241411040.437759489540248 +inf """ airyaizero = r""" Gives the `k`-th zero of the Airy Ai-function, i.e. the `k`-th number `a_k` ordered by magnitude for which `\operatorname{Ai}(a_k) = 0`. Optionally, with *derivative=1*, the corresponding zero `a'_k` of the derivative function, i.e. `\operatorname{Ai}'(a'_k) = 0`, is computed. **Examples** Some values of `a_k`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> airyaizero(1) -2.338107410459767038489197 >>> airyaizero(2) -4.087949444130970616636989 >>> airyaizero(3) -5.520559828095551059129856 >>> airyaizero(1000) -281.0315196125215528353364 Some values of `a'_k`:: >>> airyaizero(1,1) -1.018792971647471089017325 >>> airyaizero(2,1) -3.248197582179836537875424 >>> airyaizero(3,1) -4.820099211178735639400616 >>> airyaizero(1000,1) -280.9378080358935070607097 Verification:: >>> chop(airyai(airyaizero(1))) 0.0 >>> chop(airyai(airyaizero(1,1),1)) 0.0 """ airybizero = r""" With *complex=False*, gives the `k`-th real zero of the Airy Bi-function, i.e. the `k`-th number `b_k` ordered by magnitude for which `\operatorname{Bi}(b_k) = 0`. With *complex=True*, gives the `k`-th complex zero in the upper half plane `\beta_k`. Also the conjugate `\overline{\beta_k}` is a zero. Optionally, with *derivative=1*, the corresponding zero `b'_k` or `\beta'_k` of the derivative function, i.e. `\operatorname{Bi}'(b'_k) = 0` or `\operatorname{Bi}'(\beta'_k) = 0`, is computed. **Examples** Some values of `b_k`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> airybizero(1) -1.17371322270912792491998 >>> airybizero(2) -3.271093302836352715680228 >>> airybizero(3) -4.830737841662015932667709 >>> airybizero(1000) -280.9378112034152401578834 Some values of `b_k`:: >>> airybizero(1,1) -2.294439682614123246622459 >>> airybizero(2,1) -4.073155089071828215552369 >>> airybizero(3,1) -5.512395729663599496259593 >>> airybizero(1000,1) -281.0315164471118527161362 Some values of `\beta_k`:: >>> airybizero(1,complex=True) (0.9775448867316206859469927 + 2.141290706038744575749139j) >>> airybizero(2,complex=True) (1.896775013895336346627217 + 3.627291764358919410440499j) >>> airybizero(3,complex=True) (2.633157739354946595708019 + 4.855468179979844983174628j) >>> airybizero(1000,complex=True) (140.4978560578493018899793 + 243.3907724215792121244867j) Some values of `\beta'_k`:: >>> airybizero(1,1,complex=True) (0.2149470745374305676088329 + 1.100600143302797880647194j) >>> airybizero(2,1,complex=True) (1.458168309223507392028211 + 2.912249367458445419235083j) >>> airybizero(3,1,complex=True) (2.273760763013482299792362 + 4.254528549217097862167015j) >>> airybizero(1000,1,complex=True) (140.4509972835270559730423 + 243.3096175398562811896208j) Verification:: >>> chop(airybi(airybizero(1))) 0.0 >>> chop(airybi(airybizero(1,1),1)) 0.0 >>> u = airybizero(1,complex=True) >>> chop(airybi(u)) 0.0 >>> chop(airybi(conj(u))) 0.0 The complex zeros (in the upper and lower half-planes respectively) asymptotically approach the rays `z = R \exp(\pm i \pi /3)`:: >>> arg(airybizero(1,complex=True)) 1.142532510286334022305364 >>> arg(airybizero(1000,complex=True)) 1.047271114786212061583917 >>> arg(airybizero(1000000,complex=True)) 1.047197624741816183341355 >>> pi/3 1.047197551196597746154214 """ ellipk = r""" Evaluates the complete elliptic integral of the first kind, `K(m)`, defined by .. math :: K(m) = \int_0^{\pi/2} \frac{dt}{\sqrt{1-m \sin^2 t}} \, = \, \frac{\pi}{2} \,_2F_1\left(\frac{1}{2}, \frac{1}{2}, 1, m\right). Note that the argument is the parameter `m = k^2`, not the modulus `k` which is sometimes used. **Plots** .. literalinclude :: /plots/ellipk.py .. image :: /plots/ellipk.png **Examples** Values and limits include:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> ellipk(0) 1.570796326794896619231322 >>> ellipk(inf) (0.0 + 0.0j) >>> ellipk(-inf) 0.0 >>> ellipk(1) +inf >>> ellipk(-1) 1.31102877714605990523242 >>> ellipk(2) (1.31102877714605990523242 - 1.31102877714605990523242j) Verifying the defining integral and hypergeometric representation:: >>> ellipk(0.5) 1.85407467730137191843385 >>> quad(lambda t: (1-0.5*sin(t)**2)**-0.5, [0, pi/2]) 1.85407467730137191843385 >>> pi/2*hyp2f1(0.5,0.5,1,0.5) 1.85407467730137191843385 Evaluation is supported for arbitrary complex `m`:: >>> ellipk(3+4j) (0.9111955638049650086562171 + 0.6313342832413452438845091j) A definite integral:: >>> quad(ellipk, [0, 1]) 2.0 """ agm = r""" ``agm(a, b)`` computes the arithmetic-geometric mean of `a` and `b`, defined as the limit of the following iteration: .. math :: a_0 = a b_0 = b a_{n+1} = \frac{a_n+b_n}{2} b_{n+1} = \sqrt{a_n b_n} This function can be called with a single argument, computing `\mathrm{agm}(a,1) = \mathrm{agm}(1,a)`. **Examples** It is a well-known theorem that the geometric mean of two distinct positive numbers is less than the arithmetic mean. It follows that the arithmetic-geometric mean lies between the two means:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> a = mpf(3) >>> b = mpf(4) >>> sqrt(a*b) 3.46410161513775 >>> agm(a,b) 3.48202767635957 >>> (a+b)/2 3.5 The arithmetic-geometric mean is scale-invariant:: >>> agm(10*e, 10*pi) 29.261085515723 >>> 10*agm(e, pi) 29.261085515723 As an order-of-magnitude estimate, `\mathrm{agm}(1,x) \approx x` for large `x`:: >>> agm(10**10) 643448704.760133 >>> agm(10**50) 1.34814309345871e+48 For tiny `x`, `\mathrm{agm}(1,x) \approx -\pi/(2 \log(x/4))`:: >>> agm('0.01') 0.262166887202249 >>> -pi/2/log('0.0025') 0.262172347753122 The arithmetic-geometric mean can also be computed for complex numbers:: >>> agm(3, 2+j) (2.51055133276184 + 0.547394054060638j) The AGM iteration converges very quickly (each step doubles the number of correct digits), so :func:`~mpmath.agm` supports efficient high-precision evaluation:: >>> mp.dps = 10000 >>> a = agm(1,2) >>> str(a)[-10:] '1679581912' **Mathematical relations** The arithmetic-geometric mean may be used to evaluate the following two parametric definite integrals: .. math :: I_1 = \int_0^{\infty} \frac{1}{\sqrt{(x^2+a^2)(x^2+b^2)}} \,dx I_2 = \int_0^{\pi/2} \frac{1}{\sqrt{a^2 \cos^2(x) + b^2 \sin^2(x)}} \,dx We have:: >>> mp.dps = 15 >>> a = 3 >>> b = 4 >>> f1 = lambda x: ((x**2+a**2)*(x**2+b**2))**-0.5 >>> f2 = lambda x: ((a*cos(x))**2 + (b*sin(x))**2)**-0.5 >>> quad(f1, [0, inf]) 0.451115405388492 >>> quad(f2, [0, pi/2]) 0.451115405388492 >>> pi/(2*agm(a,b)) 0.451115405388492 A formula for `\Gamma(1/4)`:: >>> gamma(0.25) 3.62560990822191 >>> sqrt(2*sqrt(2*pi**3)/agm(1,sqrt(2))) 3.62560990822191 **Possible issues** The branch cut chosen for complex `a` and `b` is somewhat arbitrary. """ gegenbauer = r""" Evaluates the Gegenbauer polynomial, or ultraspherical polynomial, .. math :: C_n^{(a)}(z) = {n+2a-1 \choose n} \,_2F_1\left(-n, n+2a; a+\frac{1}{2}; \frac{1}{2}(1-z)\right). When `n` is a nonnegative integer, this formula gives a polynomial in `z` of degree `n`, but all parameters are permitted to be complex numbers. With `a = 1/2`, the Gegenbauer polynomial reduces to a Legendre polynomial. **Examples** Evaluation for arbitrary arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> gegenbauer(3, 0.5, -10) -2485.0 >>> gegenbauer(1000, 10, 100) 3.012757178975667428359374e+2322 >>> gegenbauer(2+3j, -0.75, -1000j) (-5038991.358609026523401901 + 9414549.285447104177860806j) Evaluation at negative integer orders:: >>> gegenbauer(-4, 2, 1.75) -1.0 >>> gegenbauer(-4, 3, 1.75) 0.0 >>> gegenbauer(-4, 2j, 1.75) 0.0 >>> gegenbauer(-7, 0.5, 3) 8989.0 The Gegenbauer polynomials solve the differential equation:: >>> n, a = 4.5, 1+2j >>> f = lambda z: gegenbauer(n, a, z) >>> for z in [0, 0.75, -0.5j]: ... chop((1-z**2)*diff(f,z,2) - (2*a+1)*z*diff(f,z) + n*(n+2*a)*f(z)) ... 0.0 0.0 0.0 The Gegenbauer polynomials have generating function `(1-2zt+t^2)^{-a}`:: >>> a, z = 2.5, 1 >>> taylor(lambda t: (1-2*z*t+t**2)**(-a), 0, 3) [1.0, 5.0, 15.0, 35.0] >>> [gegenbauer(n,a,z) for n in range(4)] [1.0, 5.0, 15.0, 35.0] The Gegenbauer polynomials are orthogonal on `[-1, 1]` with respect to the weight `(1-z^2)^{a-\frac{1}{2}}`:: >>> a, n, m = 2.5, 4, 5 >>> Cn = lambda z: gegenbauer(n, a, z, zeroprec=1000) >>> Cm = lambda z: gegenbauer(m, a, z, zeroprec=1000) >>> chop(quad(lambda z: Cn(z)*Cm(z)*(1-z**2)*(a-0.5), [-1, 1])) 0.0 """ laguerre = r""" Gives the generalized (associated) Laguerre polynomial, defined by .. math :: L_n^a(z) = \frac{\Gamma(n+b+1)}{\Gamma(b+1) \Gamma(n+1)} \,_1F_1(-n, a+1, z). With `a = 0` and `n` a nonnegative integer, this reduces to an ordinary Laguerre polynomial, the sequence of which begins `L_0(z) = 1, L_1(z) = 1-z, L_2(z) = z^2-2z+1, \ldots`. The Laguerre polynomials are orthogonal with respect to the weight `z^a e^{-z}` on `[0, \infty)`. **Plots** .. literalinclude :: /plots/laguerre.py .. image :: /plots/laguerre.png **Examples** Evaluation for arbitrary arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> laguerre(5, 0, 0.25) 0.03726399739583333333333333 >>> laguerre(1+j, 0.5, 2+3j) (4.474921610704496808379097 - 11.02058050372068958069241j) >>> laguerre(2, 0, 10000) 49980001.0 >>> laguerre(2.5, 0, 10000) -9.327764910194842158583189e+4328 The first few Laguerre polynomials, normalized to have integer coefficients:: >>> for n in range(7): ... chop(taylor(lambda z: fac(n)*laguerre(n, 0, z), 0, n)) ... [1.0] [1.0, -1.0] [2.0, -4.0, 1.0] [6.0, -18.0, 9.0, -1.0] [24.0, -96.0, 72.0, -16.0, 1.0] [120.0, -600.0, 600.0, -200.0, 25.0, -1.0] [720.0, -4320.0, 5400.0, -2400.0, 450.0, -36.0, 1.0] Verifying orthogonality:: >>> Lm = lambda t: laguerre(m,a,t) >>> Ln = lambda t: laguerre(n,a,t) >>> a, n, m = 2.5, 2, 3 >>> chop(quad(lambda t: exp(-t)*t**a*Lm(t)*Ln(t), [0,inf])) 0.0 """ hermite = r""" Evaluates the Hermite polynomial `H_n(z)`, which may be defined using the recurrence .. math :: H_0(z) = 1 H_1(z) = 2z H_{n+1} = 2z H_n(z) - 2n H_{n-1}(z). The Hermite polynomials are orthogonal on `(-\infty, \infty)` with respect to the weight `e^{-z^2}`. More generally, allowing arbitrary complex values of `n`, the Hermite function `H_n(z)` is defined as .. math :: H_n(z) = (2z)^n \,_2F_0\left(-\frac{n}{2}, \frac{1-n}{2}, -\frac{1}{z^2}\right) for `\Re{z} > 0`, or generally .. math :: H_n(z) = 2^n \sqrt{\pi} \left( \frac{1}{\Gamma\left(\frac{1-n}{2}\right)} \,_1F_1\left(-\frac{n}{2}, \frac{1}{2}, z^2\right) - \frac{2z}{\Gamma\left(-\frac{n}{2}\right)} \,_1F_1\left(\frac{1-n}{2}, \frac{3}{2}, z^2\right) \right). **Plots** .. literalinclude :: /plots/hermite.py .. image :: /plots/hermite.png **Examples** Evaluation for arbitrary arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hermite(0, 10) 1.0 >>> hermite(1, 10); hermite(2, 10) 20.0 398.0 >>> hermite(10000, 2) 4.950440066552087387515653e+19334 >>> hermite(3, -10**8) -7999999999999998800000000.0 >>> hermite(-3, -10**8) 1.675159751729877682920301e+4342944819032534 >>> hermite(2+3j, -1+2j) (-0.07652130602993513389421901 - 0.1084662449961914580276007j) Coefficients of the first few Hermite polynomials are:: >>> for n in range(7): ... chop(taylor(lambda z: hermite(n, z), 0, n)) ... [1.0] [0.0, 2.0] [-2.0, 0.0, 4.0] [0.0, -12.0, 0.0, 8.0] [12.0, 0.0, -48.0, 0.0, 16.0] [0.0, 120.0, 0.0, -160.0, 0.0, 32.0] [-120.0, 0.0, 720.0, 0.0, -480.0, 0.0, 64.0] Values at `z = 0`:: >>> for n in range(-5, 9): ... hermite(n, 0) ... 0.02769459142039868792653387 0.08333333333333333333333333 0.2215567313631895034122709 0.5 0.8862269254527580136490837 1.0 0.0 -2.0 0.0 12.0 0.0 -120.0 0.0 1680.0 Hermite functions satisfy the differential equation:: >>> n = 4 >>> f = lambda z: hermite(n, z) >>> z = 1.5 >>> chop(diff(f,z,2) - 2*z*diff(f,z) + 2*n*f(z)) 0.0 Verifying orthogonality:: >>> chop(quad(lambda t: hermite(2,t)*hermite(4,t)*exp(-t**2), [-inf,inf])) 0.0 """ jacobi = r""" ``jacobi(n, a, b, x)`` evaluates the Jacobi polynomial `P_n^{(a,b)}(x)`. The Jacobi polynomials are a special case of the hypergeometric function `\,_2F_1` given by: .. math :: P_n^{(a,b)}(x) = {n+a \choose n} \,_2F_1\left(-n,1+a+b+n,a+1,\frac{1-x}{2}\right). Note that this definition generalizes to nonintegral values of `n`. When `n` is an integer, the hypergeometric series terminates after a finite number of terms, giving a polynomial in `x`. **Evaluation of Jacobi polynomials** A special evaluation is `P_n^{(a,b)}(1) = {n+a \choose n}`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> jacobi(4, 0.5, 0.25, 1) 2.4609375 >>> binomial(4+0.5, 4) 2.4609375 A Jacobi polynomial of degree `n` is equal to its Taylor polynomial of degree `n`. The explicit coefficients of Jacobi polynomials can therefore be recovered easily using :func:`~mpmath.taylor`:: >>> for n in range(5): ... nprint(taylor(lambda x: jacobi(n,1,2,x), 0, n)) ... [1.0] [-0.5, 2.5] [-0.75, -1.5, 5.25] [0.5, -3.5, -3.5, 10.5] [0.625, 2.5, -11.25, -7.5, 20.625] For nonintegral `n`, the Jacobi "polynomial" is no longer a polynomial:: >>> nprint(taylor(lambda x: jacobi(0.5,1,2,x), 0, 4)) [0.309983, 1.84119, -1.26933, 1.26699, -1.34808] **Orthogonality** The Jacobi polynomials are orthogonal on the interval `[-1, 1]` with respect to the weight function `w(x) = (1-x)^a (1+x)^b`. That is, `w(x) P_n^{(a,b)}(x) P_m^{(a,b)}(x)` integrates to zero if `m \ne n` and to a nonzero number if `m = n`. The orthogonality is easy to verify using numerical quadrature:: >>> P = jacobi >>> f = lambda x: (1-x)**a * (1+x)**b * P(m,a,b,x) * P(n,a,b,x) >>> a = 2 >>> b = 3 >>> m, n = 3, 4 >>> chop(quad(f, [-1, 1]), 1) 0.0 >>> m, n = 4, 4 >>> quad(f, [-1, 1]) 1.9047619047619 **Differential equation** The Jacobi polynomials are solutions of the differential equation .. math :: (1-x^2) y'' + (b-a-(a+b+2)x) y' + n (n+a+b+1) y = 0. We can verify that :func:`~mpmath.jacobi` approximately satisfies this equation:: >>> from mpmath import * >>> mp.dps = 15 >>> a = 2.5 >>> b = 4 >>> n = 3 >>> y = lambda x: jacobi(n,a,b,x) >>> x = pi >>> A0 = n*(n+a+b+1)*y(x) >>> A1 = (b-a-(a+b+2)*x)*diff(y,x) >>> A2 = (1-x**2)*diff(y,x,2) >>> nprint(A2 + A1 + A0, 1) 4.0e-12 The difference of order `10^{-12}` is as close to zero as it could be at 15-digit working precision, since the terms are large:: >>> A0, A1, A2 (26560.2328981879, -21503.7641037294, -5056.46879445852) """ legendre = r""" ``legendre(n, x)`` evaluates the Legendre polynomial `P_n(x)`. The Legendre polynomials are given by the formula .. math :: P_n(x) = \frac{1}{2^n n!} \frac{d^n}{dx^n} (x^2 -1)^n. Alternatively, they can be computed recursively using .. math :: P_0(x) = 1 P_1(x) = x (n+1) P_{n+1}(x) = (2n+1) x P_n(x) - n P_{n-1}(x). A third definition is in terms of the hypergeometric function `\,_2F_1`, whereby they can be generalized to arbitrary `n`: .. math :: P_n(x) = \,_2F_1\left(-n, n+1, 1, \frac{1-x}{2}\right) **Plots** .. literalinclude :: /plots/legendre.py .. image :: /plots/legendre.png **Basic evaluation** The Legendre polynomials assume fixed values at the points `x = -1` and `x = 1`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nprint([legendre(n, 1) for n in range(6)]) [1.0, 1.0, 1.0, 1.0, 1.0, 1.0] >>> nprint([legendre(n, -1) for n in range(6)]) [1.0, -1.0, 1.0, -1.0, 1.0, -1.0] The coefficients of Legendre polynomials can be recovered using degree-`n` Taylor expansion:: >>> for n in range(5): ... nprint(chop(taylor(lambda x: legendre(n, x), 0, n))) ... [1.0] [0.0, 1.0] [-0.5, 0.0, 1.5] [0.0, -1.5, 0.0, 2.5] [0.375, 0.0, -3.75, 0.0, 4.375] The roots of Legendre polynomials are located symmetrically on the interval `[-1, 1]`:: >>> for n in range(5): ... nprint(polyroots(taylor(lambda x: legendre(n, x), 0, n)[::-1])) ... [] [0.0] [-0.57735, 0.57735] [-0.774597, 0.0, 0.774597] [-0.861136, -0.339981, 0.339981, 0.861136] An example of an evaluation for arbitrary `n`:: >>> legendre(0.75, 2+4j) (1.94952805264875 + 2.1071073099422j) **Orthogonality** The Legendre polynomials are orthogonal on `[-1, 1]` with respect to the trivial weight `w(x) = 1`. That is, `P_m(x) P_n(x)` integrates to zero if `m \ne n` and to `2/(2n+1)` if `m = n`:: >>> m, n = 3, 4 >>> quad(lambda x: legendre(m,x)*legendre(n,x), [-1, 1]) 0.0 >>> m, n = 4, 4 >>> quad(lambda x: legendre(m,x)*legendre(n,x), [-1, 1]) 0.222222222222222 **Differential equation** The Legendre polynomials satisfy the differential equation .. math :: ((1-x^2) y')' + n(n+1) y' = 0. We can verify this numerically:: >>> n = 3.6 >>> x = 0.73 >>> P = legendre >>> A = diff(lambda t: (1-t**2)*diff(lambda u: P(n,u), t), x) >>> B = n*(n+1)*P(n,x) >>> nprint(A+B,1) 9.0e-16 """ legenp = r""" Calculates the (associated) Legendre function of the first kind of degree *n* and order *m*, `P_n^m(z)`. Taking `m = 0` gives the ordinary Legendre function of the first kind, `P_n(z)`. The parameters may be complex numbers. In terms of the Gauss hypergeometric function, the (associated) Legendre function is defined as .. math :: P_n^m(z) = \frac{1}{\Gamma(1-m)} \frac{(1+z)^{m/2}}{(1-z)^{m/2}} \,_2F_1\left(-n, n+1, 1-m, \frac{1-z}{2}\right). With *type=3* instead of *type=2*, the alternative definition .. math :: \hat{P}_n^m(z) = \frac{1}{\Gamma(1-m)} \frac{(z+1)^{m/2}}{(z-1)^{m/2}} \,_2F_1\left(-n, n+1, 1-m, \frac{1-z}{2}\right). is used. These functions correspond respectively to ``LegendreP[n,m,2,z]`` and ``LegendreP[n,m,3,z]`` in Mathematica. The general solution of the (associated) Legendre differential equation .. math :: (1-z^2) f''(z) - 2zf'(z) + \left(n(n+1)-\frac{m^2}{1-z^2}\right)f(z) = 0 is given by `C_1 P_n^m(z) + C_2 Q_n^m(z)` for arbitrary constants `C_1`, `C_2`, where `Q_n^m(z)` is a Legendre function of the second kind as implemented by :func:`~mpmath.legenq`. **Examples** Evaluation for arbitrary parameters and arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> legenp(2, 0, 10); legendre(2, 10) 149.5 149.5 >>> legenp(-2, 0.5, 2.5) (1.972260393822275434196053 - 1.972260393822275434196053j) >>> legenp(2+3j, 1-j, -0.5+4j) (-3.335677248386698208736542 - 5.663270217461022307645625j) >>> chop(legenp(3, 2, -1.5, type=2)) 28.125 >>> chop(legenp(3, 2, -1.5, type=3)) -28.125 Verifying the associated Legendre differential equation:: >>> n, m = 2, -0.5 >>> C1, C2 = 1, -3 >>> f = lambda z: C1*legenp(n,m,z) + C2*legenq(n,m,z) >>> deq = lambda z: (1-z**2)*diff(f,z,2) - 2*z*diff(f,z) + \ ... (n*(n+1)-m**2/(1-z**2))*f(z) >>> for z in [0, 2, -1.5, 0.5+2j]: ... chop(deq(mpmathify(z))) ... 0.0 0.0 0.0 0.0 """ legenq = r""" Calculates the (associated) Legendre function of the second kind of degree *n* and order *m*, `Q_n^m(z)`. Taking `m = 0` gives the ordinary Legendre function of the second kind, `Q_n(z)`. The parameters may be complex numbers. The Legendre functions of the second kind give a second set of solutions to the (associated) Legendre differential equation. (See :func:`~mpmath.legenp`.) Unlike the Legendre functions of the first kind, they are not polynomials of `z` for integer `n`, `m` but rational or logarithmic functions with poles at `z = \pm 1`. There are various ways to define Legendre functions of the second kind, giving rise to different complex structure. A version can be selected using the *type* keyword argument. The *type=2* and *type=3* functions are given respectively by .. math :: Q_n^m(z) = \frac{\pi}{2 \sin(\pi m)} \left( \cos(\pi m) P_n^m(z) - \frac{\Gamma(1+m+n)}{\Gamma(1-m+n)} P_n^{-m}(z)\right) \hat{Q}_n^m(z) = \frac{\pi}{2 \sin(\pi m)} e^{\pi i m} \left( \hat{P}_n^m(z) - \frac{\Gamma(1+m+n)}{\Gamma(1-m+n)} \hat{P}_n^{-m}(z)\right) where `P` and `\hat{P}` are the *type=2* and *type=3* Legendre functions of the first kind. The formulas above should be understood as limits when `m` is an integer. These functions correspond to ``LegendreQ[n,m,2,z]`` (or ``LegendreQ[n,m,z]``) and ``LegendreQ[n,m,3,z]`` in Mathematica. The *type=3* function is essentially the same as the function defined in Abramowitz & Stegun (eq. 8.1.3) but with `(z+1)^{m/2}(z-1)^{m/2}` instead of `(z^2-1)^{m/2}`, giving slightly different branches. **Examples** Evaluation for arbitrary parameters and arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> legenq(2, 0, 0.5) -0.8186632680417568557122028 >>> legenq(-1.5, -2, 2.5) (0.6655964618250228714288277 + 0.3937692045497259717762649j) >>> legenq(2-j, 3+4j, -6+5j) (-10001.95256487468541686564 - 6011.691337610097577791134j) Different versions of the function:: >>> legenq(2, 1, 0.5) 0.7298060598018049369381857 >>> legenq(2, 1, 1.5) (-7.902916572420817192300921 + 0.1998650072605976600724502j) >>> legenq(2, 1, 0.5, type=3) (2.040524284763495081918338 - 0.7298060598018049369381857j) >>> chop(legenq(2, 1, 1.5, type=3)) -0.1998650072605976600724502 """ chebyt = r""" ``chebyt(n, x)`` evaluates the Chebyshev polynomial of the first kind `T_n(x)`, defined by the identity .. math :: T_n(\cos x) = \cos(n x). The Chebyshev polynomials of the first kind are a special case of the Jacobi polynomials, and by extension of the hypergeometric function `\,_2F_1`. They can thus also be evaluated for nonintegral `n`. **Plots** .. literalinclude :: /plots/chebyt.py .. image :: /plots/chebyt.png **Basic evaluation** The coefficients of the `n`-th polynomial can be recovered using using degree-`n` Taylor expansion:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(5): ... nprint(chop(taylor(lambda x: chebyt(n, x), 0, n))) ... [1.0] [0.0, 1.0] [-1.0, 0.0, 2.0] [0.0, -3.0, 0.0, 4.0] [1.0, 0.0, -8.0, 0.0, 8.0] **Orthogonality** The Chebyshev polynomials of the first kind are orthogonal on the interval `[-1, 1]` with respect to the weight function `w(x) = 1/\sqrt{1-x^2}`:: >>> f = lambda x: chebyt(m,x)*chebyt(n,x)/sqrt(1-x**2) >>> m, n = 3, 4 >>> nprint(quad(f, [-1, 1]),1) 0.0 >>> m, n = 4, 4 >>> quad(f, [-1, 1]) 1.57079632596448 """ chebyu = r""" ``chebyu(n, x)`` evaluates the Chebyshev polynomial of the second kind `U_n(x)`, defined by the identity .. math :: U_n(\cos x) = \frac{\sin((n+1)x)}{\sin(x)}. The Chebyshev polynomials of the second kind are a special case of the Jacobi polynomials, and by extension of the hypergeometric function `\,_2F_1`. They can thus also be evaluated for nonintegral `n`. **Plots** .. literalinclude :: /plots/chebyu.py .. image :: /plots/chebyu.png **Basic evaluation** The coefficients of the `n`-th polynomial can be recovered using using degree-`n` Taylor expansion:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(5): ... nprint(chop(taylor(lambda x: chebyu(n, x), 0, n))) ... [1.0] [0.0, 2.0] [-1.0, 0.0, 4.0] [0.0, -4.0, 0.0, 8.0] [1.0, 0.0, -12.0, 0.0, 16.0] **Orthogonality** The Chebyshev polynomials of the second kind are orthogonal on the interval `[-1, 1]` with respect to the weight function `w(x) = \sqrt{1-x^2}`:: >>> f = lambda x: chebyu(m,x)*chebyu(n,x)*sqrt(1-x**2) >>> m, n = 3, 4 >>> quad(f, [-1, 1]) 0.0 >>> m, n = 4, 4 >>> quad(f, [-1, 1]) 1.5707963267949 """ besselj = r""" ``besselj(n, x, derivative=0)`` gives the Bessel function of the first kind `J_n(x)`. Bessel functions of the first kind are defined as solutions of the differential equation .. math :: x^2 y'' + x y' + (x^2 - n^2) y = 0 which appears, among other things, when solving the radial part of Laplace's equation in cylindrical coordinates. This equation has two solutions for given `n`, where the `J_n`-function is the solution that is nonsingular at `x = 0`. For positive integer `n`, `J_n(x)` behaves roughly like a sine (odd `n`) or cosine (even `n`) multiplied by a magnitude factor that decays slowly as `x \to \pm\infty`. Generally, `J_n` is a special case of the hypergeometric function `\,_0F_1`: .. math :: J_n(x) = \frac{x^n}{2^n \Gamma(n+1)} \,_0F_1\left(n+1,-\frac{x^2}{4}\right) With *derivative* = `m \ne 0`, the `m`-th derivative .. math :: \frac{d^m}{dx^m} J_n(x) is computed. **Plots** .. literalinclude :: /plots/besselj.py .. image :: /plots/besselj.png .. literalinclude :: /plots/besselj_c.py .. image :: /plots/besselj_c.png **Examples** Evaluation is supported for arbitrary arguments, and at arbitrary precision:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> besselj(2, 1000) -0.024777229528606 >>> besselj(4, 0.75) 0.000801070086542314 >>> besselj(2, 1000j) (-2.48071721019185e+432 + 6.41567059811949e-437j) >>> mp.dps = 25 >>> besselj(0.75j, 3+4j) (-2.778118364828153309919653 - 1.5863603889018621585533j) >>> mp.dps = 50 >>> besselj(1, pi) 0.28461534317975275734531059968613140570981118184947 Arguments may be large:: >>> mp.dps = 25 >>> besselj(0, 10000) -0.007096160353388801477265164 >>> besselj(0, 10**10) 0.000002175591750246891726859055 >>> besselj(2, 10**100) 7.337048736538615712436929e-51 >>> besselj(2, 10**5*j) (-3.540725411970948860173735e+43426 + 4.4949812409615803110051e-43433j) The Bessel functions of the first kind satisfy simple symmetries around `x = 0`:: >>> mp.dps = 15 >>> nprint([besselj(n,0) for n in range(5)]) [1.0, 0.0, 0.0, 0.0, 0.0] >>> nprint([besselj(n,pi) for n in range(5)]) [-0.304242, 0.284615, 0.485434, 0.333458, 0.151425] >>> nprint([besselj(n,-pi) for n in range(5)]) [-0.304242, -0.284615, 0.485434, -0.333458, 0.151425] Roots of Bessel functions are often used:: >>> nprint([findroot(j0, k) for k in [2, 5, 8, 11, 14]]) [2.40483, 5.52008, 8.65373, 11.7915, 14.9309] >>> nprint([findroot(j1, k) for k in [3, 7, 10, 13, 16]]) [3.83171, 7.01559, 10.1735, 13.3237, 16.4706] The roots are not periodic, but the distance between successive roots asymptotically approaches `2 \pi`. Bessel functions of the first kind have the following normalization:: >>> quadosc(j0, [0, inf], period=2*pi) 1.0 >>> quadosc(j1, [0, inf], period=2*pi) 1.0 For `n = 1/2` or `n = -1/2`, the Bessel function reduces to a trigonometric function:: >>> x = 10 >>> besselj(0.5, x), sqrt(2/(pi*x))*sin(x) (-0.13726373575505, -0.13726373575505) >>> besselj(-0.5, x), sqrt(2/(pi*x))*cos(x) (-0.211708866331398, -0.211708866331398) Derivatives of any order can be computed (negative orders correspond to integration):: >>> mp.dps = 25 >>> besselj(0, 7.5, 1) -0.1352484275797055051822405 >>> diff(lambda x: besselj(0,x), 7.5) -0.1352484275797055051822405 >>> besselj(0, 7.5, 10) -0.1377811164763244890135677 >>> diff(lambda x: besselj(0,x), 7.5, 10) -0.1377811164763244890135677 >>> besselj(0,7.5,-1) - besselj(0,3.5,-1) -0.1241343240399987693521378 >>> quad(j0, [3.5, 7.5]) -0.1241343240399987693521378 Differentiation with a noninteger order gives the fractional derivative in the sense of the Riemann-Liouville differintegral, as computed by :func:`~mpmath.differint`:: >>> mp.dps = 15 >>> besselj(1, 3.5, 0.75) -0.385977722939384 >>> differint(lambda x: besselj(1, x), 3.5, 0.75) -0.385977722939384 """ besseli = r""" ``besseli(n, x, derivative=0)`` gives the modified Bessel function of the first kind, .. math :: I_n(x) = i^{-n} J_n(ix). With *derivative* = `m \ne 0`, the `m`-th derivative .. math :: \frac{d^m}{dx^m} I_n(x) is computed. **Plots** .. literalinclude :: /plots/besseli.py .. image :: /plots/besseli.png .. literalinclude :: /plots/besseli_c.py .. image :: /plots/besseli_c.png **Examples** Some values of `I_n(x)`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> besseli(0,0) 1.0 >>> besseli(1,0) 0.0 >>> besseli(0,1) 1.266065877752008335598245 >>> besseli(3.5, 2+3j) (-0.2904369752642538144289025 - 0.4469098397654815837307006j) Arguments may be large:: >>> besseli(2, 1000) 2.480717210191852440616782e+432 >>> besseli(2, 10**10) 4.299602851624027900335391e+4342944813 >>> besseli(2, 6000+10000j) (-2.114650753239580827144204e+2603 + 4.385040221241629041351886e+2602j) For integers `n`, the following integral representation holds:: >>> mp.dps = 15 >>> n = 3 >>> x = 2.3 >>> quad(lambda t: exp(x*cos(t))*cos(n*t), [0,pi])/pi 0.349223221159309 >>> besseli(n,x) 0.349223221159309 Derivatives and antiderivatives of any order can be computed:: >>> mp.dps = 25 >>> besseli(2, 7.5, 1) 195.8229038931399062565883 >>> diff(lambda x: besseli(2,x), 7.5) 195.8229038931399062565883 >>> besseli(2, 7.5, 10) 153.3296508971734525525176 >>> diff(lambda x: besseli(2,x), 7.5, 10) 153.3296508971734525525176 >>> besseli(2,7.5,-1) - besseli(2,3.5,-1) 202.5043900051930141956876 >>> quad(lambda x: besseli(2,x), [3.5, 7.5]) 202.5043900051930141956876 """ bessely = r""" ``bessely(n, x, derivative=0)`` gives the Bessel function of the second kind, .. math :: Y_n(x) = \frac{J_n(x) \cos(\pi n) - J_{-n}(x)}{\sin(\pi n)}. For `n` an integer, this formula should be understood as a limit. With *derivative* = `m \ne 0`, the `m`-th derivative .. math :: \frac{d^m}{dx^m} Y_n(x) is computed. **Plots** .. literalinclude :: /plots/bessely.py .. image :: /plots/bessely.png .. literalinclude :: /plots/bessely_c.py .. image :: /plots/bessely_c.png **Examples** Some values of `Y_n(x)`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> bessely(0,0), bessely(1,0), bessely(2,0) (-inf, -inf, -inf) >>> bessely(1, pi) 0.3588729167767189594679827 >>> bessely(0.5, 3+4j) (9.242861436961450520325216 - 3.085042824915332562522402j) Arguments may be large:: >>> bessely(0, 10000) 0.00364780555898660588668872 >>> bessely(2.5, 10**50) -4.8952500412050989295774e-26 >>> bessely(2.5, -10**50) (0.0 + 4.8952500412050989295774e-26j) Derivatives and antiderivatives of any order can be computed:: >>> bessely(2, 3.5, 1) 0.3842618820422660066089231 >>> diff(lambda x: bessely(2, x), 3.5) 0.3842618820422660066089231 >>> bessely(0.5, 3.5, 1) -0.2066598304156764337900417 >>> diff(lambda x: bessely(0.5, x), 3.5) -0.2066598304156764337900417 >>> diff(lambda x: bessely(2, x), 0.5, 10) -208173867409.5547350101511 >>> bessely(2, 0.5, 10) -208173867409.5547350101511 >>> bessely(2, 100.5, 100) 0.02668487547301372334849043 >>> quad(lambda x: bessely(2,x), [1,3]) -1.377046859093181969213262 >>> bessely(2,3,-1) - bessely(2,1,-1) -1.377046859093181969213262 """ besselk = r""" ``besselk(n, x)`` gives the modified Bessel function of the second kind, .. math :: K_n(x) = \frac{\pi}{2} \frac{I_{-n}(x)-I_{n}(x)}{\sin(\pi n)} For `n` an integer, this formula should be understood as a limit. **Plots** .. literalinclude :: /plots/besselk.py .. image :: /plots/besselk.png .. literalinclude :: /plots/besselk_c.py .. image :: /plots/besselk_c.png **Examples** Evaluation is supported for arbitrary complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> besselk(0,1) 0.4210244382407083333356274 >>> besselk(0, -1) (0.4210244382407083333356274 - 3.97746326050642263725661j) >>> besselk(3.5, 2+3j) (-0.02090732889633760668464128 + 0.2464022641351420167819697j) >>> besselk(2+3j, 0.5) (0.9615816021726349402626083 + 0.1918250181801757416908224j) Arguments may be large:: >>> besselk(0, 100) 4.656628229175902018939005e-45 >>> besselk(1, 10**6) 4.131967049321725588398296e-434298 >>> besselk(1, 10**6*j) (0.001140348428252385844876706 - 0.0005200017201681152909000961j) >>> besselk(4.5, fmul(10**50, j, exact=True)) (1.561034538142413947789221e-26 + 1.243554598118700063281496e-25j) The point `x = 0` is a singularity (logarithmic if `n = 0`):: >>> besselk(0,0) +inf >>> besselk(1,0) +inf >>> for n in range(-4, 5): ... print(besselk(n, '1e-1000')) ... 4.8e+4001 8.0e+3000 2.0e+2000 1.0e+1000 2302.701024509704096466802 1.0e+1000 2.0e+2000 8.0e+3000 4.8e+4001 """ hankel1 = r""" ``hankel1(n,x)`` computes the Hankel function of the first kind, which is the complex combination of Bessel functions given by .. math :: H_n^{(1)}(x) = J_n(x) + i Y_n(x). **Plots** .. literalinclude :: /plots/hankel1.py .. image :: /plots/hankel1.png .. literalinclude :: /plots/hankel1_c.py .. image :: /plots/hankel1_c.png **Examples** The Hankel function is generally complex-valued:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hankel1(2, pi) (0.4854339326315091097054957 - 0.0999007139290278787734903j) >>> hankel1(3.5, pi) (0.2340002029630507922628888 - 0.6419643823412927142424049j) """ hankel2 = r""" ``hankel2(n,x)`` computes the Hankel function of the second kind, which is the complex combination of Bessel functions given by .. math :: H_n^{(2)}(x) = J_n(x) - i Y_n(x). **Plots** .. literalinclude :: /plots/hankel2.py .. image :: /plots/hankel2.png .. literalinclude :: /plots/hankel2_c.py .. image :: /plots/hankel2_c.png **Examples** The Hankel function is generally complex-valued:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> hankel2(2, pi) (0.4854339326315091097054957 + 0.0999007139290278787734903j) >>> hankel2(3.5, pi) (0.2340002029630507922628888 + 0.6419643823412927142424049j) """ lambertw = r""" The Lambert W function `W(z)` is defined as the inverse function of `w \exp(w)`. In other words, the value of `W(z)` is such that `z = W(z) \exp(W(z))` for any complex number `z`. The Lambert W function is a multivalued function with infinitely many branches `W_k(z)`, indexed by `k \in \mathbb{Z}`. Each branch gives a different solution `w` of the equation `z = w \exp(w)`. All branches are supported by :func:`~mpmath.lambertw`: * ``lambertw(z)`` gives the principal solution (branch 0) * ``lambertw(z, k)`` gives the solution on branch `k` The Lambert W function has two partially real branches: the principal branch (`k = 0`) is real for real `z > -1/e`, and the `k = -1` branch is real for `-1/e < z < 0`. All branches except `k = 0` have a logarithmic singularity at `z = 0`. The definition, implementation and choice of branches is based on [Corless]_. **Plots** .. literalinclude :: /plots/lambertw.py .. image :: /plots/lambertw.png .. literalinclude :: /plots/lambertw_c.py .. image :: /plots/lambertw_c.png **Basic examples** The Lambert W function is the inverse of `w \exp(w)`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> w = lambertw(1) >>> w 0.5671432904097838729999687 >>> w*exp(w) 1.0 Any branch gives a valid inverse:: >>> w = lambertw(1, k=3) >>> w (-2.853581755409037807206819 + 17.11353553941214591260783j) >>> w = lambertw(1, k=25) >>> w (-5.047020464221569709378686 + 155.4763860949415867162066j) >>> chop(w*exp(w)) 1.0 **Applications to equation-solving** The Lambert W function may be used to solve various kinds of equations, such as finding the value of the infinite power tower `z^{z^{z^{\ldots}}}`:: >>> def tower(z, n): ... if n == 0: ... return z ... return z ** tower(z, n-1) ... >>> tower(mpf(0.5), 100) 0.6411857445049859844862005 >>> -lambertw(-log(0.5))/log(0.5) 0.6411857445049859844862005 **Properties** The Lambert W function grows roughly like the natural logarithm for large arguments:: >>> lambertw(1000); log(1000) 5.249602852401596227126056 6.907755278982137052053974 >>> lambertw(10**100); log(10**100) 224.8431064451185015393731 230.2585092994045684017991 The principal branch of the Lambert W function has a rational Taylor series expansion around `z = 0`:: >>> nprint(taylor(lambertw, 0, 6), 10) [0.0, 1.0, -1.0, 1.5, -2.666666667, 5.208333333, -10.8] Some special values and limits are:: >>> lambertw(0) 0.0 >>> lambertw(1) 0.5671432904097838729999687 >>> lambertw(e) 1.0 >>> lambertw(inf) +inf >>> lambertw(0, k=-1) -inf >>> lambertw(0, k=3) -inf >>> lambertw(inf, k=2) (+inf + 12.56637061435917295385057j) >>> lambertw(inf, k=3) (+inf + 18.84955592153875943077586j) >>> lambertw(-inf, k=3) (+inf + 21.9911485751285526692385j) The `k = 0` and `k = -1` branches join at `z = -1/e` where `W(z) = -1` for both branches. Since `-1/e` can only be represented approximately with binary floating-point numbers, evaluating the Lambert W function at this point only gives `-1` approximately:: >>> lambertw(-1/e, 0) -0.9999999999998371330228251 >>> lambertw(-1/e, -1) -1.000000000000162866977175 If `-1/e` happens to round in the negative direction, there might be a small imaginary part:: >>> mp.dps = 15 >>> lambertw(-1/e) (-1.0 + 8.22007971483662e-9j) >>> lambertw(-1/e+eps) -0.999999966242188 **References** 1. [Corless]_ """ barnesg = r""" Evaluates the Barnes G-function, which generalizes the superfactorial (:func:`~mpmath.superfac`) and by extension also the hyperfactorial (:func:`~mpmath.hyperfac`) to the complex numbers in an analogous way to how the gamma function generalizes the ordinary factorial. The Barnes G-function may be defined in terms of a Weierstrass product: .. math :: G(z+1) = (2\pi)^{z/2} e^{-[z(z+1)+\gamma z^2]/2} \prod_{n=1}^\infty \left[\left(1+\frac{z}{n}\right)^ne^{-z+z^2/(2n)}\right] For positive integers `n`, we have have relation to superfactorials `G(n) = \mathrm{sf}(n-2) = 0! \cdot 1! \cdots (n-2)!`. **Examples** Some elementary values and limits of the Barnes G-function:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> barnesg(1), barnesg(2), barnesg(3) (1.0, 1.0, 1.0) >>> barnesg(4) 2.0 >>> barnesg(5) 12.0 >>> barnesg(6) 288.0 >>> barnesg(7) 34560.0 >>> barnesg(8) 24883200.0 >>> barnesg(inf) +inf >>> barnesg(0), barnesg(-1), barnesg(-2) (0.0, 0.0, 0.0) Closed-form values are known for some rational arguments:: >>> barnesg('1/2') 0.603244281209446 >>> sqrt(exp(0.25+log(2)/12)/sqrt(pi)/glaisher**3) 0.603244281209446 >>> barnesg('1/4') 0.29375596533861 >>> nthroot(exp('3/8')/exp(catalan/pi)/ ... gamma(0.25)**3/sqrt(glaisher)**9, 4) 0.29375596533861 The Barnes G-function satisfies the functional equation `G(z+1) = \Gamma(z) G(z)`:: >>> z = pi >>> barnesg(z+1) 2.39292119327948 >>> gamma(z)*barnesg(z) 2.39292119327948 The asymptotic growth rate of the Barnes G-function is related to the Glaisher-Kinkelin constant:: >>> limit(lambda n: barnesg(n+1)/(n**(n**2/2-mpf(1)/12)* ... (2*pi)**(n/2)*exp(-3*n**2/4)), inf) 0.847536694177301 >>> exp('1/12')/glaisher 0.847536694177301 The Barnes G-function can be differentiated in closed form:: >>> z = 3 >>> diff(barnesg, z) 0.264507203401607 >>> barnesg(z)*((z-1)*psi(0,z)-z+(log(2*pi)+1)/2) 0.264507203401607 Evaluation is supported for arbitrary arguments and at arbitrary precision:: >>> barnesg(6.5) 2548.7457695685 >>> barnesg(-pi) 0.00535976768353037 >>> barnesg(3+4j) (-0.000676375932234244 - 4.42236140124728e-5j) >>> mp.dps = 50 >>> barnesg(1/sqrt(2)) 0.81305501090451340843586085064413533788206204124732 >>> q = barnesg(10j) >>> q.real 0.000000000021852360840356557241543036724799812371995850552234 >>> q.imag -0.00000000000070035335320062304849020654215545839053210041457588 >>> mp.dps = 15 >>> barnesg(100) 3.10361006263698e+6626 >>> barnesg(-101) 0.0 >>> barnesg(-10.5) 5.94463017605008e+25 >>> barnesg(-10000.5) -6.14322868174828e+167480422 >>> barnesg(1000j) (5.21133054865546e-1173597 + 4.27461836811016e-1173597j) >>> barnesg(-1000+1000j) (2.43114569750291e+1026623 + 2.24851410674842e+1026623j) **References** 1. Whittaker & Watson, *A Course of Modern Analysis*, Cambridge University Press, 4th edition (1927), p.264 2. http://en.wikipedia.org/wiki/Barnes_G-function 3. http://mathworld.wolfram.com/BarnesG-Function.html """ superfac = r""" Computes the superfactorial, defined as the product of consecutive factorials .. math :: \mathrm{sf}(n) = \prod_{k=1}^n k! For general complex `z`, `\mathrm{sf}(z)` is defined in terms of the Barnes G-function (see :func:`~mpmath.barnesg`). **Examples** The first few superfactorials are (OEIS A000178):: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(10): ... print("%s %s" % (n, superfac(n))) ... 0 1.0 1 1.0 2 2.0 3 12.0 4 288.0 5 34560.0 6 24883200.0 7 125411328000.0 8 5.05658474496e+15 9 1.83493347225108e+21 Superfactorials grow very rapidly:: >>> superfac(1000) 3.24570818422368e+1177245 >>> superfac(10**10) 2.61398543581249e+467427913956904067453 Evaluation is supported for arbitrary arguments:: >>> mp.dps = 25 >>> superfac(pi) 17.20051550121297985285333 >>> superfac(2+3j) (-0.005915485633199789627466468 + 0.008156449464604044948738263j) >>> diff(superfac, 1) 0.2645072034016070205673056 **References** 1. http://oeis.org/A000178 """ hyperfac = r""" Computes the hyperfactorial, defined for integers as the product .. math :: H(n) = \prod_{k=1}^n k^k. The hyperfactorial satisfies the recurrence formula `H(z) = z^z H(z-1)`. It can be defined more generally in terms of the Barnes G-function (see :func:`~mpmath.barnesg`) and the gamma function by the formula .. math :: H(z) = \frac{\Gamma(z+1)^z}{G(z)}. The extension to complex numbers can also be done via the integral representation .. math :: H(z) = (2\pi)^{-z/2} \exp \left[ {z+1 \choose 2} + \int_0^z \log(t!)\,dt \right]. **Examples** The rapidly-growing sequence of hyperfactorials begins (OEIS A002109):: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(10): ... print("%s %s" % (n, hyperfac(n))) ... 0 1.0 1 1.0 2 4.0 3 108.0 4 27648.0 5 86400000.0 6 4031078400000.0 7 3.3197663987712e+18 8 5.56964379417266e+25 9 2.15779412229419e+34 Some even larger hyperfactorials are:: >>> hyperfac(1000) 5.46458120882585e+1392926 >>> hyperfac(10**10) 4.60408207642219e+489142638002418704309 The hyperfactorial can be evaluated for arbitrary arguments:: >>> hyperfac(0.5) 0.880449235173423 >>> diff(hyperfac, 1) 0.581061466795327 >>> hyperfac(pi) 205.211134637462 >>> hyperfac(-10+1j) (3.01144471378225e+46 - 2.45285242480185e+46j) The recurrence property of the hyperfactorial holds generally:: >>> z = 3-4*j >>> hyperfac(z) (-4.49795891462086e-7 - 6.33262283196162e-7j) >>> z**z * hyperfac(z-1) (-4.49795891462086e-7 - 6.33262283196162e-7j) >>> z = mpf(-0.6) >>> chop(z**z * hyperfac(z-1)) 1.28170142849352 >>> hyperfac(z) 1.28170142849352 The hyperfactorial may also be computed using the integral definition:: >>> z = 2.5 >>> hyperfac(z) 15.9842119922237 >>> (2*pi)**(-z/2)*exp(binomial(z+1,2) + ... quad(lambda t: loggamma(t+1), [0, z])) 15.9842119922237 :func:`~mpmath.hyperfac` supports arbitrary-precision evaluation:: >>> mp.dps = 50 >>> hyperfac(10) 215779412229418562091680268288000000000000000.0 >>> hyperfac(1/sqrt(2)) 0.89404818005227001975423476035729076375705084390942 **References** 1. http://oeis.org/A002109 2. http://mathworld.wolfram.com/Hyperfactorial.html """ rgamma = r""" Computes the reciprocal of the gamma function, `1/\Gamma(z)`. This function evaluates to zero at the poles of the gamma function, `z = 0, -1, -2, \ldots`. **Examples** Basic examples:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> rgamma(1) 1.0 >>> rgamma(4) 0.1666666666666666666666667 >>> rgamma(0); rgamma(-1) 0.0 0.0 >>> rgamma(1000) 2.485168143266784862783596e-2565 >>> rgamma(inf) 0.0 A definite integral that can be evaluated in terms of elementary integrals:: >>> quad(rgamma, [0,inf]) 2.807770242028519365221501 >>> e + quad(lambda t: exp(-t)/(pi**2+log(t)**2), [0,inf]) 2.807770242028519365221501 """ loggamma = r""" Computes the principal branch of the log-gamma function, `\ln \Gamma(z)`. Unlike `\ln(\Gamma(z))`, which has infinitely many complex branch cuts, the principal log-gamma function only has a single branch cut along the negative half-axis. The principal branch continuously matches the asymptotic Stirling expansion .. math :: \ln \Gamma(z) \sim \frac{\ln(2 \pi)}{2} + \left(z-\frac{1}{2}\right) \ln(z) - z + O(z^{-1}). The real parts of both functions agree, but their imaginary parts generally differ by `2 n \pi` for some `n \in \mathbb{Z}`. They coincide for `z \in \mathbb{R}, z > 0`. Computationally, it is advantageous to use :func:`~mpmath.loggamma` instead of :func:`~mpmath.gamma` for extremely large arguments. **Examples** Comparing with `\ln(\Gamma(z))`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> loggamma('13.2'); log(gamma('13.2')) 20.49400419456603678498394 20.49400419456603678498394 >>> loggamma(3+4j) (-1.756626784603784110530604 + 4.742664438034657928194889j) >>> log(gamma(3+4j)) (-1.756626784603784110530604 - 1.540520869144928548730397j) >>> log(gamma(3+4j)) + 2*pi*j (-1.756626784603784110530604 + 4.742664438034657928194889j) Note the imaginary parts for negative arguments:: >>> loggamma(-0.5); loggamma(-1.5); loggamma(-2.5) (1.265512123484645396488946 - 3.141592653589793238462643j) (0.8600470153764810145109327 - 6.283185307179586476925287j) (-0.05624371649767405067259453 - 9.42477796076937971538793j) Some special values:: >>> loggamma(1); loggamma(2) 0.0 0.0 >>> loggamma(3); +ln2 0.6931471805599453094172321 0.6931471805599453094172321 >>> loggamma(3.5); log(15*sqrt(pi)/8) 1.200973602347074224816022 1.200973602347074224816022 >>> loggamma(inf) +inf Huge arguments are permitted:: >>> loggamma('1e30') 6.807755278982137052053974e+31 >>> loggamma('1e300') 6.897755278982137052053974e+302 >>> loggamma('1e3000') 6.906755278982137052053974e+3003 >>> loggamma('1e100000000000000000000') 2.302585092994045684007991e+100000000000000000020 >>> loggamma('1e30j') (-1.570796326794896619231322e+30 + 6.807755278982137052053974e+31j) >>> loggamma('1e300j') (-1.570796326794896619231322e+300 + 6.897755278982137052053974e+302j) >>> loggamma('1e3000j') (-1.570796326794896619231322e+3000 + 6.906755278982137052053974e+3003j) The log-gamma function can be integrated analytically on any interval of unit length:: >>> z = 0 >>> quad(loggamma, [z,z+1]); log(2*pi)/2 0.9189385332046727417803297 0.9189385332046727417803297 >>> z = 3+4j >>> quad(loggamma, [z,z+1]); (log(z)-1)*z + log(2*pi)/2 (-0.9619286014994750641314421 + 5.219637303741238195688575j) (-0.9619286014994750641314421 + 5.219637303741238195688575j) The derivatives of the log-gamma function are given by the polygamma function (:func:`~mpmath.psi`):: >>> diff(loggamma, -4+3j); psi(0, -4+3j) (1.688493531222971393607153 + 2.554898911356806978892748j) (1.688493531222971393607153 + 2.554898911356806978892748j) >>> diff(loggamma, -4+3j, 2); psi(1, -4+3j) (-0.1539414829219882371561038 - 0.1020485197430267719746479j) (-0.1539414829219882371561038 - 0.1020485197430267719746479j) The log-gamma function satisfies an additive form of the recurrence relation for the ordinary gamma function:: >>> z = 2+3j >>> loggamma(z); loggamma(z+1) - log(z) (-2.092851753092733349564189 + 2.302396543466867626153708j) (-2.092851753092733349564189 + 2.302396543466867626153708j) """ siegeltheta = r""" Computes the Riemann-Siegel theta function, .. math :: \theta(t) = \frac{ \log\Gamma\left(\frac{1+2it}{4}\right) - \log\Gamma\left(\frac{1-2it}{4}\right) }{2i} - \frac{\log \pi}{2} t. The Riemann-Siegel theta function is important in providing the phase factor for the Z-function (see :func:`~mpmath.siegelz`). Evaluation is supported for real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> siegeltheta(0) 0.0 >>> siegeltheta(inf) +inf >>> siegeltheta(-inf) -inf >>> siegeltheta(1) -1.767547952812290388302216 >>> siegeltheta(10+0.25j) (-3.068638039426838572528867 + 0.05804937947429712998395177j) Arbitrary derivatives may be computed with derivative = k >>> siegeltheta(1234, derivative=2) 0.0004051864079114053109473741 >>> diff(siegeltheta, 1234, n=2) 0.0004051864079114053109473741 The Riemann-Siegel theta function has odd symmetry around `t = 0`, two local extreme points and three real roots including 0 (located symmetrically):: >>> nprint(chop(taylor(siegeltheta, 0, 5))) [0.0, -2.68609, 0.0, 2.69433, 0.0, -6.40218] >>> findroot(diffun(siegeltheta), 7) 6.28983598883690277966509 >>> findroot(siegeltheta, 20) 17.84559954041086081682634 For large `t`, there is a famous asymptotic formula for `\theta(t)`, to first order given by:: >>> t = mpf(10**6) >>> siegeltheta(t) 5488816.353078403444882823 >>> -t*log(2*pi/t)/2-t/2 5488816.745777464310273645 """ grampoint = r""" Gives the `n`-th Gram point `g_n`, defined as the solution to the equation `\theta(g_n) = \pi n` where `\theta(t)` is the Riemann-Siegel theta function (:func:`~mpmath.siegeltheta`). The first few Gram points are:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> grampoint(0) 17.84559954041086081682634 >>> grampoint(1) 23.17028270124630927899664 >>> grampoint(2) 27.67018221781633796093849 >>> grampoint(3) 31.71797995476405317955149 Checking the definition:: >>> siegeltheta(grampoint(3)) 9.42477796076937971538793 >>> 3*pi 9.42477796076937971538793 A large Gram point:: >>> grampoint(10**10) 3293531632.728335454561153 Gram points are useful when studying the Z-function (:func:`~mpmath.siegelz`). See the documentation of that function for additional examples. :func:`~mpmath.grampoint` can solve the defining equation for nonintegral `n`. There is a fixed point where `g(x) = x`:: >>> findroot(lambda x: grampoint(x) - x, 10000) 9146.698193171459265866198 **References** 1. http://mathworld.wolfram.com/GramPoint.html """ siegelz = r""" Computes the Z-function, also known as the Riemann-Siegel Z function, .. math :: Z(t) = e^{i \theta(t)} \zeta(1/2+it) where `\zeta(s)` is the Riemann zeta function (:func:`~mpmath.zeta`) and where `\theta(t)` denotes the Riemann-Siegel theta function (see :func:`~mpmath.siegeltheta`). Evaluation is supported for real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> siegelz(1) -0.7363054628673177346778998 >>> siegelz(3+4j) (-0.1852895764366314976003936 - 0.2773099198055652246992479j) The first four derivatives are supported, using the optional *derivative* keyword argument:: >>> siegelz(1234567, derivative=3) 56.89689348495089294249178 >>> diff(siegelz, 1234567, n=3) 56.89689348495089294249178 The Z-function has a Maclaurin expansion:: >>> nprint(chop(taylor(siegelz, 0, 4))) [-1.46035, 0.0, 2.73588, 0.0, -8.39357] The Z-function `Z(t)` is equal to `\pm |\zeta(s)|` on the critical line `s = 1/2+it` (i.e. for real arguments `t` to `Z`). Its zeros coincide with those of the Riemann zeta function:: >>> findroot(siegelz, 14) 14.13472514173469379045725 >>> findroot(siegelz, 20) 21.02203963877155499262848 >>> findroot(zeta, 0.5+14j) (0.5 + 14.13472514173469379045725j) >>> findroot(zeta, 0.5+20j) (0.5 + 21.02203963877155499262848j) Since the Z-function is real-valued on the critical line (and unlike `|\zeta(s)|` analytic), it is useful for investigating the zeros of the Riemann zeta function. For example, one can use a root-finding algorithm based on sign changes:: >>> findroot(siegelz, [100, 200], solver='bisect') 176.4414342977104188888926 To locate roots, Gram points `g_n` which can be computed by :func:`~mpmath.grampoint` are useful. If `(-1)^n Z(g_n)` is positive for two consecutive `n`, then `Z(t)` must have a zero between those points:: >>> g10 = grampoint(10) >>> g11 = grampoint(11) >>> (-1)**10 * siegelz(g10) > 0 True >>> (-1)**11 * siegelz(g11) > 0 True >>> findroot(siegelz, [g10, g11], solver='bisect') 56.44624769706339480436776 >>> g10, g11 (54.67523744685325626632663, 57.54516517954725443703014) """ riemannr = r""" Evaluates the Riemann R function, a smooth approximation of the prime counting function `\pi(x)` (see :func:`~mpmath.primepi`). The Riemann R function gives a fast numerical approximation useful e.g. to roughly estimate the number of primes in a given interval. The Riemann R function is computed using the rapidly convergent Gram series, .. math :: R(x) = 1 + \sum_{k=1}^{\infty} \frac{\log^k x}{k k! \zeta(k+1)}. From the Gram series, one sees that the Riemann R function is a well-defined analytic function (except for a branch cut along the negative real half-axis); it can be evaluated for arbitrary real or complex arguments. The Riemann R function gives a very accurate approximation of the prime counting function. For example, it is wrong by at most 2 for `x < 1000`, and for `x = 10^9` differs from the exact value of `\pi(x)` by 79, or less than two parts in a million. It is about 10 times more accurate than the logarithmic integral estimate (see :func:`~mpmath.li`), which however is even faster to evaluate. It is orders of magnitude more accurate than the extremely fast `x/\log x` estimate. **Examples** For small arguments, the Riemann R function almost exactly gives the prime counting function if rounded to the nearest integer:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> primepi(50), riemannr(50) (15, 14.9757023241462) >>> max(abs(primepi(n)-int(round(riemannr(n)))) for n in range(100)) 1 >>> max(abs(primepi(n)-int(round(riemannr(n)))) for n in range(300)) 2 The Riemann R function can be evaluated for arguments far too large for exact determination of `\pi(x)` to be computationally feasible with any presently known algorithm:: >>> riemannr(10**30) 1.46923988977204e+28 >>> riemannr(10**100) 4.3619719871407e+97 >>> riemannr(10**1000) 4.3448325764012e+996 A comparison of the Riemann R function and logarithmic integral estimates for `\pi(x)` using exact values of `\pi(10^n)` up to `n = 9`. The fractional error is shown in parentheses:: >>> exact = [4,25,168,1229,9592,78498,664579,5761455,50847534] >>> for n, p in enumerate(exact): ... n += 1 ... r, l = riemannr(10**n), li(10**n) ... rerr, lerr = nstr((r-p)/p,3), nstr((l-p)/p,3) ... print("%i %i %s(%s) %s(%s)" % (n, p, r, rerr, l, lerr)) ... 1 4 4.56458314100509(0.141) 6.1655995047873(0.541) 2 25 25.6616332669242(0.0265) 30.1261415840796(0.205) 3 168 168.359446281167(0.00214) 177.609657990152(0.0572) 4 1229 1226.93121834343(-0.00168) 1246.13721589939(0.0139) 5 9592 9587.43173884197(-0.000476) 9629.8090010508(0.00394) 6 78498 78527.3994291277(0.000375) 78627.5491594622(0.00165) 7 664579 664667.447564748(0.000133) 664918.405048569(0.000511) 8 5761455 5761551.86732017(1.68e-5) 5762209.37544803(0.000131) 9 50847534 50847455.4277214(-1.55e-6) 50849234.9570018(3.35e-5) The derivative of the Riemann R function gives the approximate probability for a number of magnitude `x` to be prime:: >>> diff(riemannr, 1000) 0.141903028110784 >>> mpf(primepi(1050) - primepi(950)) / 100 0.15 Evaluation is supported for arbitrary arguments and at arbitrary precision:: >>> mp.dps = 30 >>> riemannr(7.5) 3.72934743264966261918857135136 >>> riemannr(-4+2j) (-0.551002208155486427591793957644 + 2.16966398138119450043195899746j) """ primepi = r""" Evaluates the prime counting function, `\pi(x)`, which gives the number of primes less than or equal to `x`. The argument `x` may be fractional. The prime counting function is very expensive to evaluate precisely for large `x`, and the present implementation is not optimized in any way. For numerical approximation of the prime counting function, it is better to use :func:`~mpmath.primepi2` or :func:`~mpmath.riemannr`. Some values of the prime counting function:: >>> from mpmath import * >>> [primepi(k) for k in range(20)] [0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 8] >>> primepi(3.5) 2 >>> primepi(100000) 9592 """ primepi2 = r""" Returns an interval (as an ``mpi`` instance) providing bounds for the value of the prime counting function `\pi(x)`. For small `x`, :func:`~mpmath.primepi2` returns an exact interval based on the output of :func:`~mpmath.primepi`. For `x > 2656`, a loose interval based on Schoenfeld's inequality .. math :: |\pi(x) - \mathrm{li}(x)| < \frac{\sqrt x \log x}{8 \pi} is returned. This estimate is rigorous assuming the truth of the Riemann hypothesis, and can be computed very quickly. **Examples** Exact values of the prime counting function for small `x`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> iv.dps = 15; iv.pretty = True >>> primepi2(10) [4.0, 4.0] >>> primepi2(100) [25.0, 25.0] >>> primepi2(1000) [168.0, 168.0] Loose intervals are generated for moderately large `x`: >>> primepi2(10000), primepi(10000) ([1209.0, 1283.0], 1229) >>> primepi2(50000), primepi(50000) ([5070.0, 5263.0], 5133) As `x` increases, the absolute error gets worse while the relative error improves. The exact value of `\pi(10^{23})` is 1925320391606803968923, and :func:`~mpmath.primepi2` gives 9 significant digits:: >>> p = primepi2(10**23) >>> p [1.9253203909477020467e+21, 1.925320392280406229e+21] >>> mpf(p.delta) / mpf(p.a) 6.9219865355293e-10 A more precise, nonrigorous estimate for `\pi(x)` can be obtained using the Riemann R function (:func:`~mpmath.riemannr`). For large enough `x`, the value returned by :func:`~mpmath.primepi2` essentially amounts to a small perturbation of the value returned by :func:`~mpmath.riemannr`:: >>> primepi2(10**100) [4.3619719871407024816e+97, 4.3619719871407032404e+97] >>> riemannr(10**100) 4.3619719871407e+97 """ primezeta = r""" Computes the prime zeta function, which is defined in analogy with the Riemann zeta function (:func:`~mpmath.zeta`) as .. math :: P(s) = \sum_p \frac{1}{p^s} where the sum is taken over all prime numbers `p`. Although this sum only converges for `\mathrm{Re}(s) > 1`, the function is defined by analytic continuation in the half-plane `\mathrm{Re}(s) > 0`. **Examples** Arbitrary-precision evaluation for real and complex arguments is supported:: >>> from mpmath import * >>> mp.dps = 30; mp.pretty = True >>> primezeta(2) 0.452247420041065498506543364832 >>> primezeta(pi) 0.15483752698840284272036497397 >>> mp.dps = 50 >>> primezeta(3) 0.17476263929944353642311331466570670097541212192615 >>> mp.dps = 20 >>> primezeta(3+4j) (-0.12085382601645763295 - 0.013370403397787023602j) The prime zeta function has a logarithmic pole at `s = 1`, with residue equal to the difference of the Mertens and Euler constants:: >>> primezeta(1) +inf >>> extradps(25)(lambda x: primezeta(1+x)+log(x))(+eps) -0.31571845205389007685 >>> mertens-euler -0.31571845205389007685 The analytic continuation to `0 < \mathrm{Re}(s) \le 1` is implemented. In this strip the function exhibits very complex behavior; on the unit interval, it has poles at `1/n` for every squarefree integer `n`:: >>> primezeta(0.5) # Pole at s = 1/2 (-inf + 3.1415926535897932385j) >>> primezeta(0.25) (-1.0416106801757269036 + 0.52359877559829887308j) >>> primezeta(0.5+10j) (0.54892423556409790529 + 0.45626803423487934264j) Although evaluation works in principle for any `\mathrm{Re}(s) > 0`, it should be noted that the evaluation time increases exponentially as `s` approaches the imaginary axis. For large `\mathrm{Re}(s)`, `P(s)` is asymptotic to `2^{-s}`:: >>> primezeta(inf) 0.0 >>> primezeta(10), mpf(2)**-10 (0.00099360357443698021786, 0.0009765625) >>> primezeta(1000) 9.3326361850321887899e-302 >>> primezeta(1000+1000j) (-3.8565440833654995949e-302 - 8.4985390447553234305e-302j) **References** Carl-Erik Froberg, "On the prime zeta function", BIT 8 (1968), pp. 187-202. """ bernpoly = r""" Evaluates the Bernoulli polynomial `B_n(z)`. The first few Bernoulli polynomials are:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(6): ... nprint(chop(taylor(lambda x: bernpoly(n,x), 0, n))) ... [1.0] [-0.5, 1.0] [0.166667, -1.0, 1.0] [0.0, 0.5, -1.5, 1.0] [-0.0333333, 0.0, 1.0, -2.0, 1.0] [0.0, -0.166667, 0.0, 1.66667, -2.5, 1.0] At `z = 0`, the Bernoulli polynomial evaluates to a Bernoulli number (see :func:`~mpmath.bernoulli`):: >>> bernpoly(12, 0), bernoulli(12) (-0.253113553113553, -0.253113553113553) >>> bernpoly(13, 0), bernoulli(13) (0.0, 0.0) Evaluation is accurate for large `n` and small `z`:: >>> mp.dps = 25 >>> bernpoly(100, 0.5) 2.838224957069370695926416e+78 >>> bernpoly(1000, 10.5) 5.318704469415522036482914e+1769 """ polylog = r""" Computes the polylogarithm, defined by the sum .. math :: \mathrm{Li}_s(z) = \sum_{k=1}^{\infty} \frac{z^k}{k^s}. This series is convergent only for `|z| < 1`, so elsewhere the analytic continuation is implied. The polylogarithm should not be confused with the logarithmic integral (also denoted by Li or li), which is implemented as :func:`~mpmath.li`. **Examples** The polylogarithm satisfies a huge number of functional identities. A sample of polylogarithm evaluations is shown below:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> polylog(1,0.5), log(2) (0.693147180559945, 0.693147180559945) >>> polylog(2,0.5), (pi**2-6*log(2)**2)/12 (0.582240526465012, 0.582240526465012) >>> polylog(2,-phi), -log(phi)**2-pi**2/10 (-1.21852526068613, -1.21852526068613) >>> polylog(3,0.5), 7*zeta(3)/8-pi**2*log(2)/12+log(2)**3/6 (0.53721319360804, 0.53721319360804) :func:`~mpmath.polylog` can evaluate the analytic continuation of the polylogarithm when `s` is an integer:: >>> polylog(2, 10) (0.536301287357863 - 7.23378441241546j) >>> polylog(2, -10) -4.1982778868581 >>> polylog(2, 10j) (-3.05968879432873 + 3.71678149306807j) >>> polylog(-2, 10) -0.150891632373114 >>> polylog(-2, -10) 0.067618332081142 >>> polylog(-2, 10j) (0.0384353698579347 + 0.0912451798066779j) Some more examples, with arguments on the unit circle (note that the series definition cannot be used for computation here):: >>> polylog(2,j) (-0.205616758356028 + 0.915965594177219j) >>> j*catalan-pi**2/48 (-0.205616758356028 + 0.915965594177219j) >>> polylog(3,exp(2*pi*j/3)) (-0.534247512515375 + 0.765587078525922j) >>> -4*zeta(3)/9 + 2*j*pi**3/81 (-0.534247512515375 + 0.765587078525921j) Polylogarithms of different order are related by integration and differentiation:: >>> s, z = 3, 0.5 >>> polylog(s+1, z) 0.517479061673899 >>> quad(lambda t: polylog(s,t)/t, [0, z]) 0.517479061673899 >>> z*diff(lambda t: polylog(s+2,t), z) 0.517479061673899 Taylor series expansions around `z = 0` are:: >>> for n in range(-3, 4): ... nprint(taylor(lambda x: polylog(n,x), 0, 5)) ... [0.0, 1.0, 8.0, 27.0, 64.0, 125.0] [0.0, 1.0, 4.0, 9.0, 16.0, 25.0] [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] [0.0, 1.0, 1.0, 1.0, 1.0, 1.0] [0.0, 1.0, 0.5, 0.333333, 0.25, 0.2] [0.0, 1.0, 0.25, 0.111111, 0.0625, 0.04] [0.0, 1.0, 0.125, 0.037037, 0.015625, 0.008] The series defining the polylogarithm is simultaneously a Taylor series and an L-series. For certain values of `z`, the polylogarithm reduces to a pure zeta function:: >>> polylog(pi, 1), zeta(pi) (1.17624173838258, 1.17624173838258) >>> polylog(pi, -1), -altzeta(pi) (-0.909670702980385, -0.909670702980385) Evaluation for arbitrary, nonintegral `s` is supported for `z` within the unit circle: >>> polylog(3+4j, 0.25) (0.24258605789446 - 0.00222938275488344j) >>> nsum(lambda k: 0.25**k / k**(3+4j), [1,inf]) (0.24258605789446 - 0.00222938275488344j) It is also currently supported outside of the unit circle for `z` not too large in magnitude:: >>> polylog(1+j, 20+40j) (-7.1421172179728 - 3.92726697721369j) >>> polylog(1+j, 200+400j) Traceback (most recent call last): ... NotImplementedError: polylog for arbitrary s and z **References** 1. Richard Crandall, "Note on fast polylogarithm computation" http://people.reed.edu/~crandall/papers/Polylog.pdf 2. http://en.wikipedia.org/wiki/Polylogarithm 3. http://mathworld.wolfram.com/Polylogarithm.html """ bell = r""" For `n` a nonnegative integer, ``bell(n,x)`` evaluates the Bell polynomial `B_n(x)`, the first few of which are .. math :: B_0(x) = 1 B_1(x) = x B_2(x) = x^2+x B_3(x) = x^3+3x^2+x If `x = 1` or :func:`~mpmath.bell` is called with only one argument, it gives the `n`-th Bell number `B_n`, which is the number of partitions of a set with `n` elements. By setting the precision to at least `\log_{10} B_n` digits, :func:`~mpmath.bell` provides fast calculation of exact Bell numbers. In general, :func:`~mpmath.bell` computes .. math :: B_n(x) = e^{-x} \left(\mathrm{sinc}(\pi n) + E_n(x)\right) where `E_n(x)` is the generalized exponential function implemented by :func:`~mpmath.polyexp`. This is an extension of Dobinski's formula [1], where the modification is the sinc term ensuring that `B_n(x)` is continuous in `n`; :func:`~mpmath.bell` can thus be evaluated, differentiated, etc for arbitrary complex arguments. **Examples** Simple evaluations:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> bell(0, 2.5) 1.0 >>> bell(1, 2.5) 2.5 >>> bell(2, 2.5) 8.75 Evaluation for arbitrary complex arguments:: >>> bell(5.75+1j, 2-3j) (-10767.71345136587098445143 - 15449.55065599872579097221j) The first few Bell polynomials:: >>> for k in range(7): ... nprint(taylor(lambda x: bell(k,x), 0, k)) ... [1.0] [0.0, 1.0] [0.0, 1.0, 1.0] [0.0, 1.0, 3.0, 1.0] [0.0, 1.0, 7.0, 6.0, 1.0] [0.0, 1.0, 15.0, 25.0, 10.0, 1.0] [0.0, 1.0, 31.0, 90.0, 65.0, 15.0, 1.0] The first few Bell numbers and complementary Bell numbers:: >>> [int(bell(k)) for k in range(10)] [1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147] >>> [int(bell(k,-1)) for k in range(10)] [1, -1, 0, 1, 1, -2, -9, -9, 50, 267] Large Bell numbers:: >>> mp.dps = 50 >>> bell(50) 185724268771078270438257767181908917499221852770.0 >>> bell(50,-1) -29113173035759403920216141265491160286912.0 Some even larger values:: >>> mp.dps = 25 >>> bell(1000,-1) -1.237132026969293954162816e+1869 >>> bell(1000) 2.989901335682408421480422e+1927 >>> bell(1000,2) 6.591553486811969380442171e+1987 >>> bell(1000,100.5) 9.101014101401543575679639e+2529 A determinant identity satisfied by Bell numbers:: >>> mp.dps = 15 >>> N = 8 >>> det([[bell(k+j) for j in range(N)] for k in range(N)]) 125411328000.0 >>> superfac(N-1) 125411328000.0 **References** 1. http://mathworld.wolfram.com/DobinskisFormula.html """ polyexp = r""" Evaluates the polyexponential function, defined for arbitrary complex `s`, `z` by the series .. math :: E_s(z) = \sum_{k=1}^{\infty} \frac{k^s}{k!} z^k. `E_s(z)` is constructed from the exponential function analogously to how the polylogarithm is constructed from the ordinary logarithm; as a function of `s` (with `z` fixed), `E_s` is an L-series It is an entire function of both `s` and `z`. The polyexponential function provides a generalization of the Bell polynomials `B_n(x)` (see :func:`~mpmath.bell`) to noninteger orders `n`. In terms of the Bell polynomials, .. math :: E_s(z) = e^z B_s(z) - \mathrm{sinc}(\pi s). Note that `B_n(x)` and `e^{-x} E_n(x)` are identical if `n` is a nonzero integer, but not otherwise. In particular, they differ at `n = 0`. **Examples** Evaluating a series:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> nsum(lambda k: sqrt(k)/fac(k), [1,inf]) 2.101755547733791780315904 >>> polyexp(0.5,1) 2.101755547733791780315904 Evaluation for arbitrary arguments:: >>> polyexp(-3-4j, 2.5+2j) (2.351660261190434618268706 + 1.202966666673054671364215j) Evaluation is accurate for tiny function values:: >>> polyexp(4, -100) 3.499471750566824369520223e-36 If `n` is a nonpositive integer, `E_n` reduces to a special instance of the hypergeometric function `\,_pF_q`:: >>> n = 3 >>> x = pi >>> polyexp(-n,x) 4.042192318847986561771779 >>> x*hyper([1]*(n+1), [2]*(n+1), x) 4.042192318847986561771779 """ cyclotomic = r""" Evaluates the cyclotomic polynomial `\Phi_n(x)`, defined by .. math :: \Phi_n(x) = \prod_{\zeta} (x - \zeta) where `\zeta` ranges over all primitive `n`-th roots of unity (see :func:`~mpmath.unitroots`). An equivalent representation, used for computation, is .. math :: \Phi_n(x) = \prod_{d\mid n}(x^d-1)^{\mu(n/d)} = \Phi_n(x) where `\mu(m)` denotes the Moebius function. The cyclotomic polynomials are integer polynomials, the first of which can be written explicitly as .. math :: \Phi_0(x) = 1 \Phi_1(x) = x - 1 \Phi_2(x) = x + 1 \Phi_3(x) = x^3 + x^2 + 1 \Phi_4(x) = x^2 + 1 \Phi_5(x) = x^4 + x^3 + x^2 + x + 1 \Phi_6(x) = x^2 - x + 1 **Examples** The coefficients of low-order cyclotomic polynomials can be recovered using Taylor expansion:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> for n in range(9): ... p = chop(taylor(lambda x: cyclotomic(n,x), 0, 10)) ... print("%s %s" % (n, nstr(p[:10+1-p[::-1].index(1)]))) ... 0 [1.0] 1 [-1.0, 1.0] 2 [1.0, 1.0] 3 [1.0, 1.0, 1.0] 4 [1.0, 0.0, 1.0] 5 [1.0, 1.0, 1.0, 1.0, 1.0] 6 [1.0, -1.0, 1.0] 7 [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] 8 [1.0, 0.0, 0.0, 0.0, 1.0] The definition as a product over primitive roots may be checked by computing the product explicitly (for a real argument, this method will generally introduce numerical noise in the imaginary part):: >>> mp.dps = 25 >>> z = 3+4j >>> cyclotomic(10, z) (-419.0 - 360.0j) >>> fprod(z-r for r in unitroots(10, primitive=True)) (-419.0 - 360.0j) >>> z = 3 >>> cyclotomic(10, z) 61.0 >>> fprod(z-r for r in unitroots(10, primitive=True)) (61.0 - 3.146045605088568607055454e-25j) Up to permutation, the roots of a given cyclotomic polynomial can be checked to agree with the list of primitive roots:: >>> p = taylor(lambda x: cyclotomic(6,x), 0, 6)[:3] >>> for r in polyroots(p[::-1]): ... print(r) ... (0.5 - 0.8660254037844386467637232j) (0.5 + 0.8660254037844386467637232j) >>> >>> for r in unitroots(6, primitive=True): ... print(r) ... (0.5 + 0.8660254037844386467637232j) (0.5 - 0.8660254037844386467637232j) """ meijerg = r""" Evaluates the Meijer G-function, defined as .. math :: G^{m,n}_{p,q} \left( \left. \begin{matrix} a_1, \dots, a_n ; a_{n+1} \dots a_p \\ b_1, \dots, b_m ; b_{m+1} \dots b_q \end{matrix}\; \right| \; z ; r \right) = \frac{1}{2 \pi i} \int_L \frac{\prod_{j=1}^m \Gamma(b_j+s) \prod_{j=1}^n\Gamma(1-a_j-s)} {\prod_{j=n+1}^{p}\Gamma(a_j+s) \prod_{j=m+1}^q \Gamma(1-b_j-s)} z^{-s/r} ds for an appropriate choice of the contour `L` (see references). There are `p` elements `a_j`. The argument *a_s* should be a pair of lists, the first containing the `n` elements `a_1, \ldots, a_n` and the second containing the `p-n` elements `a_{n+1}, \ldots a_p`. There are `q` elements `b_j`. The argument *b_s* should be a pair of lists, the first containing the `m` elements `b_1, \ldots, b_m` and the second containing the `q-m` elements `b_{m+1}, \ldots b_q`. The implicit tuple `(m, n, p, q)` constitutes the order or degree of the Meijer G-function, and is determined by the lengths of the coefficient vectors. Confusingly, the indices in this tuple appear in a different order from the coefficients, but this notation is standard. The many examples given below should hopefully clear up any potential confusion. **Algorithm** The Meijer G-function is evaluated as a combination of hypergeometric series. There are two versions of the function, which can be selected with the optional *series* argument. *series=1* uses a sum of `m` `\,_pF_{q-1}` functions of `z` *series=2* uses a sum of `n` `\,_qF_{p-1}` functions of `1/z` The default series is chosen based on the degree and `|z|` in order to be consistent with Mathematica's. This definition of the Meijer G-function has a discontinuity at `|z| = 1` for some orders, which can be avoided by explicitly specifying a series. Keyword arguments are forwarded to :func:`~mpmath.hypercomb`. **Examples** Many standard functions are special cases of the Meijer G-function (possibly rescaled and/or with branch cut corrections). We define some test parameters:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a = mpf(0.75) >>> b = mpf(1.5) >>> z = mpf(2.25) The exponential function: `e^z = G^{1,0}_{0,1} \left( \left. \begin{matrix} - \\ 0 \end{matrix} \; \right| \; -z \right)` >>> meijerg([[],[]], [[0],[]], -z) 9.487735836358525720550369 >>> exp(z) 9.487735836358525720550369 The natural logarithm: `\log(1+z) = G^{1,2}_{2,2} \left( \left. \begin{matrix} 1, 1 \\ 1, 0 \end{matrix} \; \right| \; -z \right)` >>> meijerg([[1,1],[]], [[1],[0]], z) 1.178654996341646117219023 >>> log(1+z) 1.178654996341646117219023 A rational function: `\frac{z}{z+1} = G^{1,2}_{2,2} \left( \left. \begin{matrix} 1, 1 \\ 1, 1 \end{matrix} \; \right| \; z \right)` >>> meijerg([[1,1],[]], [[1],[1]], z) 0.6923076923076923076923077 >>> z/(z+1) 0.6923076923076923076923077 The sine and cosine functions: `\frac{1}{\sqrt \pi} \sin(2 \sqrt z) = G^{1,0}_{0,2} \left( \left. \begin{matrix} - \\ \frac{1}{2}, 0 \end{matrix} \; \right| \; z \right)` `\frac{1}{\sqrt \pi} \cos(2 \sqrt z) = G^{1,0}_{0,2} \left( \left. \begin{matrix} - \\ 0, \frac{1}{2} \end{matrix} \; \right| \; z \right)` >>> meijerg([[],[]], [[0.5],[0]], (z/2)**2) 0.4389807929218676682296453 >>> sin(z)/sqrt(pi) 0.4389807929218676682296453 >>> meijerg([[],[]], [[0],[0.5]], (z/2)**2) -0.3544090145996275423331762 >>> cos(z)/sqrt(pi) -0.3544090145996275423331762 Bessel functions: `J_a(2 \sqrt z) = G^{1,0}_{0,2} \left( \left. \begin{matrix} - \\ \frac{a}{2}, -\frac{a}{2} \end{matrix} \; \right| \; z \right)` `Y_a(2 \sqrt z) = G^{2,0}_{1,3} \left( \left. \begin{matrix} \frac{-a-1}{2} \\ \frac{a}{2}, -\frac{a}{2}, \frac{-a-1}{2} \end{matrix} \; \right| \; z \right)` `(-z)^{a/2} z^{-a/2} I_a(2 \sqrt z) = G^{1,0}_{0,2} \left( \left. \begin{matrix} - \\ \frac{a}{2}, -\frac{a}{2} \end{matrix} \; \right| \; -z \right)` `2 K_a(2 \sqrt z) = G^{2,0}_{0,2} \left( \left. \begin{matrix} - \\ \frac{a}{2}, -\frac{a}{2} \end{matrix} \; \right| \; z \right)` As the example with the Bessel *I* function shows, a branch factor is required for some arguments when inverting the square root. >>> meijerg([[],[]], [[a/2],[-a/2]], (z/2)**2) 0.5059425789597154858527264 >>> besselj(a,z) 0.5059425789597154858527264 >>> meijerg([[],[(-a-1)/2]], [[a/2,-a/2],[(-a-1)/2]], (z/2)**2) 0.1853868950066556941442559 >>> bessely(a, z) 0.1853868950066556941442559 >>> meijerg([[],[]], [[a/2],[-a/2]], -(z/2)**2) (0.8685913322427653875717476 + 2.096964974460199200551738j) >>> (-z)**(a/2) / z**(a/2) * besseli(a, z) (0.8685913322427653875717476 + 2.096964974460199200551738j) >>> 0.5*meijerg([[],[]], [[a/2,-a/2],[]], (z/2)**2) 0.09334163695597828403796071 >>> besselk(a,z) 0.09334163695597828403796071 Error functions: `\sqrt{\pi} z^{2(a-1)} \mathrm{erfc}(z) = G^{2,0}_{1,2} \left( \left. \begin{matrix} a \\ a-1, a-\frac{1}{2} \end{matrix} \; \right| \; z, \frac{1}{2} \right)` >>> meijerg([[],[a]], [[a-1,a-0.5],[]], z, 0.5) 0.00172839843123091957468712 >>> sqrt(pi) * z**(2*a-2) * erfc(z) 0.00172839843123091957468712 A Meijer G-function of higher degree, (1,1,2,3): >>> meijerg([[a],[b]], [[a],[b,a-1]], z) 1.55984467443050210115617 >>> sin((b-a)*pi)/pi*(exp(z)-1)*z**(a-1) 1.55984467443050210115617 A Meijer G-function of still higher degree, (4,1,2,4), that can be expanded as a messy combination of exponential integrals: >>> meijerg([[a],[2*b-a]], [[b,a,b-0.5,-1-a+2*b],[]], z) 0.3323667133658557271898061 >>> chop(4**(a-b+1)*sqrt(pi)*gamma(2*b-2*a)*z**a*\ ... expint(2*b-2*a, -2*sqrt(-z))*expint(2*b-2*a, 2*sqrt(-z))) 0.3323667133658557271898061 In the following case, different series give different values:: >>> chop(meijerg([[1],[0.25]],[[3],[0.5]],-2)) -0.06417628097442437076207337 >>> meijerg([[1],[0.25]],[[3],[0.5]],-2,series=1) 0.1428699426155117511873047 >>> chop(meijerg([[1],[0.25]],[[3],[0.5]],-2,series=2)) -0.06417628097442437076207337 **References** 1. http://en.wikipedia.org/wiki/Meijer_G-function 2. http://mathworld.wolfram.com/MeijerG-Function.html 3. http://functions.wolfram.com/HypergeometricFunctions/MeijerG/ 4. http://functions.wolfram.com/HypergeometricFunctions/MeijerG1/ """ clsin = r""" Computes the Clausen sine function, defined formally by the series .. math :: \mathrm{Cl}_s(z) = \sum_{k=1}^{\infty} \frac{\sin(kz)}{k^s}. The special case `\mathrm{Cl}_2(z)` (i.e. ``clsin(2,z)``) is the classical "Clausen function". More generally, the Clausen function is defined for complex `s` and `z`, even when the series does not converge. The Clausen function is related to the polylogarithm (:func:`~mpmath.polylog`) as .. math :: \mathrm{Cl}_s(z) = \frac{1}{2i}\left(\mathrm{Li}_s\left(e^{iz}\right) - \mathrm{Li}_s\left(e^{-iz}\right)\right) = \mathrm{Im}\left[\mathrm{Li}_s(e^{iz})\right] \quad (s, z \in \mathbb{R}), and this representation can be taken to provide the analytic continuation of the series. The complementary function :func:`~mpmath.clcos` gives the corresponding cosine sum. **Examples** Evaluation for arbitrarily chosen `s` and `z`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> s, z = 3, 4 >>> clsin(s, z); nsum(lambda k: sin(z*k)/k**s, [1,inf]) -0.6533010136329338746275795 -0.6533010136329338746275795 Using `z + \pi` instead of `z` gives an alternating series:: >>> clsin(s, z+pi) 0.8860032351260589402871624 >>> nsum(lambda k: (-1)**k*sin(z*k)/k**s, [1,inf]) 0.8860032351260589402871624 With `s = 1`, the sum can be expressed in closed form using elementary functions:: >>> z = 1 + sqrt(3) >>> clsin(1, z) 0.2047709230104579724675985 >>> chop((log(1-exp(-j*z)) - log(1-exp(j*z)))/(2*j)) 0.2047709230104579724675985 >>> nsum(lambda k: sin(k*z)/k, [1,inf]) 0.2047709230104579724675985 The classical Clausen function `\mathrm{Cl}_2(\theta)` gives the value of the integral `\int_0^{\theta} -\ln(2\sin(x/2)) dx` for `0 < \theta < 2 \pi`:: >>> cl2 = lambda t: clsin(2, t) >>> cl2(3.5) -0.2465045302347694216534255 >>> -quad(lambda x: ln(2*sin(0.5*x)), [0, 3.5]) -0.2465045302347694216534255 This function is symmetric about `\theta = \pi` with zeros and extreme points:: >>> cl2(0); cl2(pi/3); chop(cl2(pi)); cl2(5*pi/3); chop(cl2(2*pi)) 0.0 1.014941606409653625021203 0.0 -1.014941606409653625021203 0.0 Catalan's constant is a special value:: >>> cl2(pi/2) 0.9159655941772190150546035 >>> +catalan 0.9159655941772190150546035 The Clausen sine function can be expressed in closed form when `s` is an odd integer (becoming zero when `s` < 0):: >>> z = 1 + sqrt(2) >>> clsin(1, z); (pi-z)/2 0.3636895456083490948304773 0.3636895456083490948304773 >>> clsin(3, z); pi**2/6*z - pi*z**2/4 + z**3/12 0.5661751584451144991707161 0.5661751584451144991707161 >>> clsin(-1, z) 0.0 >>> clsin(-3, z) 0.0 It can also be expressed in closed form for even integer `s \le 0`, providing a finite sum for series such as `\sin(z) + \sin(2z) + \sin(3z) + \ldots`:: >>> z = 1 + sqrt(2) >>> clsin(0, z) 0.1903105029507513881275865 >>> cot(z/2)/2 0.1903105029507513881275865 >>> clsin(-2, z) -0.1089406163841548817581392 >>> -cot(z/2)*csc(z/2)**2/4 -0.1089406163841548817581392 Call with ``pi=True`` to multiply `z` by `\pi` exactly:: >>> clsin(3, 3*pi) -8.892316224968072424732898e-26 >>> clsin(3, 3, pi=True) 0.0 Evaluation for complex `s`, `z` in a nonconvergent case:: >>> s, z = -1-j, 1+2j >>> clsin(s, z) (-0.593079480117379002516034 + 0.9038644233367868273362446j) >>> extraprec(20)(nsum)(lambda k: sin(k*z)/k**s, [1,inf]) (-0.593079480117379002516034 + 0.9038644233367868273362446j) """ clcos = r""" Computes the Clausen cosine function, defined formally by the series .. math :: \mathrm{\widetilde{Cl}}_s(z) = \sum_{k=1}^{\infty} \frac{\cos(kz)}{k^s}. This function is complementary to the Clausen sine function :func:`~mpmath.clsin`. In terms of the polylogarithm, .. math :: \mathrm{\widetilde{Cl}}_s(z) = \frac{1}{2}\left(\mathrm{Li}_s\left(e^{iz}\right) + \mathrm{Li}_s\left(e^{-iz}\right)\right) = \mathrm{Re}\left[\mathrm{Li}_s(e^{iz})\right] \quad (s, z \in \mathbb{R}). **Examples** Evaluation for arbitrarily chosen `s` and `z`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> s, z = 3, 4 >>> clcos(s, z); nsum(lambda k: cos(z*k)/k**s, [1,inf]) -0.6518926267198991308332759 -0.6518926267198991308332759 Using `z + \pi` instead of `z` gives an alternating series:: >>> s, z = 3, 0.5 >>> clcos(s, z+pi) -0.8155530586502260817855618 >>> nsum(lambda k: (-1)**k*cos(z*k)/k**s, [1,inf]) -0.8155530586502260817855618 With `s = 1`, the sum can be expressed in closed form using elementary functions:: >>> z = 1 + sqrt(3) >>> clcos(1, z) -0.6720334373369714849797918 >>> chop(-0.5*(log(1-exp(j*z))+log(1-exp(-j*z)))) -0.6720334373369714849797918 >>> -log(abs(2*sin(0.5*z))) # Equivalent to above when z is real -0.6720334373369714849797918 >>> nsum(lambda k: cos(k*z)/k, [1,inf]) -0.6720334373369714849797918 It can also be expressed in closed form when `s` is an even integer. For example, >>> clcos(2,z) -0.7805359025135583118863007 >>> pi**2/6 - pi*z/2 + z**2/4 -0.7805359025135583118863007 The case `s = 0` gives the renormalized sum of `\cos(z) + \cos(2z) + \cos(3z) + \ldots` (which happens to be the same for any value of `z`):: >>> clcos(0, z) -0.5 >>> nsum(lambda k: cos(k*z), [1,inf]) -0.5 Also the sums .. math :: \cos(z) + 2\cos(2z) + 3\cos(3z) + \ldots and .. math :: \cos(z) + 2^n \cos(2z) + 3^n \cos(3z) + \ldots for higher integer powers `n = -s` can be done in closed form. They are zero when `n` is positive and even (`s` negative and even):: >>> clcos(-1, z); 1/(2*cos(z)-2) -0.2607829375240542480694126 -0.2607829375240542480694126 >>> clcos(-3, z); (2+cos(z))*csc(z/2)**4/8 0.1472635054979944390848006 0.1472635054979944390848006 >>> clcos(-2, z); clcos(-4, z); clcos(-6, z) 0.0 0.0 0.0 With `z = \pi`, the series reduces to that of the Riemann zeta function (more generally, if `z = p \pi/q`, it is a finite sum over Hurwitz zeta function values):: >>> clcos(2.5, 0); zeta(2.5) 1.34148725725091717975677 1.34148725725091717975677 >>> clcos(2.5, pi); -altzeta(2.5) -0.8671998890121841381913472 -0.8671998890121841381913472 Call with ``pi=True`` to multiply `z` by `\pi` exactly:: >>> clcos(-3, 2*pi) 2.997921055881167659267063e+102 >>> clcos(-3, 2, pi=True) 0.008333333333333333333333333 Evaluation for complex `s`, `z` in a nonconvergent case:: >>> s, z = -1-j, 1+2j >>> clcos(s, z) (0.9407430121562251476136807 + 0.715826296033590204557054j) >>> extraprec(20)(nsum)(lambda k: cos(k*z)/k**s, [1,inf]) (0.9407430121562251476136807 + 0.715826296033590204557054j) """ whitm = r""" Evaluates the Whittaker function `M(k,m,z)`, which gives a solution to the Whittaker differential equation .. math :: \frac{d^2f}{dz^2} + \left(-\frac{1}{4}+\frac{k}{z}+ \frac{(\frac{1}{4}-m^2)}{z^2}\right) f = 0. A second solution is given by :func:`~mpmath.whitw`. The Whittaker functions are defined in Abramowitz & Stegun, section 13.1. They are alternate forms of the confluent hypergeometric functions `\,_1F_1` and `U`: .. math :: M(k,m,z) = e^{-\frac{1}{2}z} z^{\frac{1}{2}+m} \,_1F_1(\tfrac{1}{2}+m-k, 1+2m, z) W(k,m,z) = e^{-\frac{1}{2}z} z^{\frac{1}{2}+m} U(\tfrac{1}{2}+m-k, 1+2m, z). **Examples** Evaluation for arbitrary real and complex arguments is supported:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> whitm(1, 1, 1) 0.7302596799460411820509668 >>> whitm(1, 1, -1) (0.0 - 1.417977827655098025684246j) >>> whitm(j, j/2, 2+3j) (3.245477713363581112736478 - 0.822879187542699127327782j) >>> whitm(2, 3, 100000) 4.303985255686378497193063e+21707 Evaluation at zero:: >>> whitm(1,-1,0); whitm(1,-0.5,0); whitm(1,0,0) +inf nan 0.0 We can verify that :func:`~mpmath.whitm` numerically satisfies the differential equation for arbitrarily chosen values:: >>> k = mpf(0.25) >>> m = mpf(1.5) >>> f = lambda z: whitm(k,m,z) >>> for z in [-1, 2.5, 3, 1+2j]: ... chop(diff(f,z,2) + (-0.25 + k/z + (0.25-m**2)/z**2)*f(z)) ... 0.0 0.0 0.0 0.0 An integral involving both :func:`~mpmath.whitm` and :func:`~mpmath.whitw`, verifying evaluation along the real axis:: >>> quad(lambda x: exp(-x)*whitm(3,2,x)*whitw(1,-2,x), [0,inf]) 3.438869842576800225207341 >>> 128/(21*sqrt(pi)) 3.438869842576800225207341 """ whitw = r""" Evaluates the Whittaker function `W(k,m,z)`, which gives a second solution to the Whittaker differential equation. (See :func:`~mpmath.whitm`.) **Examples** Evaluation for arbitrary real and complex arguments is supported:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> whitw(1, 1, 1) 1.19532063107581155661012 >>> whitw(1, 1, -1) (-0.9424875979222187313924639 - 0.2607738054097702293308689j) >>> whitw(j, j/2, 2+3j) (0.1782899315111033879430369 - 0.01609578360403649340169406j) >>> whitw(2, 3, 100000) 1.887705114889527446891274e-21705 >>> whitw(-1, -1, 100) 1.905250692824046162462058e-24 Evaluation at zero:: >>> for m in [-1, -0.5, 0, 0.5, 1]: ... whitw(1, m, 0) ... +inf nan 0.0 nan +inf We can verify that :func:`~mpmath.whitw` numerically satisfies the differential equation for arbitrarily chosen values:: >>> k = mpf(0.25) >>> m = mpf(1.5) >>> f = lambda z: whitw(k,m,z) >>> for z in [-1, 2.5, 3, 1+2j]: ... chop(diff(f,z,2) + (-0.25 + k/z + (0.25-m**2)/z**2)*f(z)) ... 0.0 0.0 0.0 0.0 """ ber = r""" Computes the Kelvin function ber, which for real arguments gives the real part of the Bessel J function of a rotated argument .. math :: J_n\left(x e^{3\pi i/4}\right) = \mathrm{ber}_n(x) + i \mathrm{bei}_n(x). The imaginary part is given by :func:`~mpmath.bei`. **Plots** .. literalinclude :: /plots/ber.py .. image :: /plots/ber.png **Examples** Verifying the defining relation:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> n, x = 2, 3.5 >>> ber(n,x) 1.442338852571888752631129 >>> bei(n,x) -0.948359035324558320217678 >>> besselj(n, x*root(1,8,3)) (1.442338852571888752631129 - 0.948359035324558320217678j) The ber and bei functions are also defined by analytic continuation for complex arguments:: >>> ber(1+j, 2+3j) (4.675445984756614424069563 - 15.84901771719130765656316j) >>> bei(1+j, 2+3j) (15.83886679193707699364398 + 4.684053288183046528703611j) """ bei = r""" Computes the Kelvin function bei, which for real arguments gives the imaginary part of the Bessel J function of a rotated argument. See :func:`~mpmath.ber`. """ ker = r""" Computes the Kelvin function ker, which for real arguments gives the real part of the (rescaled) Bessel K function of a rotated argument .. math :: e^{-\pi i/2} K_n\left(x e^{3\pi i/4}\right) = \mathrm{ker}_n(x) + i \mathrm{kei}_n(x). The imaginary part is given by :func:`~mpmath.kei`. **Plots** .. literalinclude :: /plots/ker.py .. image :: /plots/ker.png **Examples** Verifying the defining relation:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> n, x = 2, 4.5 >>> ker(n,x) 0.02542895201906369640249801 >>> kei(n,x) -0.02074960467222823237055351 >>> exp(-n*pi*j/2) * besselk(n, x*root(1,8,1)) (0.02542895201906369640249801 - 0.02074960467222823237055351j) The ker and kei functions are also defined by analytic continuation for complex arguments:: >>> ker(1+j, 3+4j) (1.586084268115490421090533 - 2.939717517906339193598719j) >>> kei(1+j, 3+4j) (-2.940403256319453402690132 - 1.585621643835618941044855j) """ kei = r""" Computes the Kelvin function kei, which for real arguments gives the imaginary part of the (rescaled) Bessel K function of a rotated argument. See :func:`~mpmath.ker`. """ struveh = r""" Gives the Struve function .. math :: \,\mathbf{H}_n(z) = \sum_{k=0}^\infty \frac{(-1)^k}{\Gamma(k+\frac{3}{2}) \Gamma(k+n+\frac{3}{2})} {\left({\frac{z}{2}}\right)}^{2k+n+1} which is a solution to the Struve differential equation .. math :: z^2 f''(z) + z f'(z) + (z^2-n^2) f(z) = \frac{2 z^{n+1}}{\pi (2n-1)!!}. **Examples** Evaluation for arbitrary real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> struveh(0, 3.5) 0.3608207733778295024977797 >>> struveh(-1, 10) -0.255212719726956768034732 >>> struveh(1, -100.5) 0.5819566816797362287502246 >>> struveh(2.5, 10000000000000) 3153915652525200060.308937 >>> struveh(2.5, -10000000000000) (0.0 - 3153915652525200060.308937j) >>> struveh(1+j, 1000000+4000000j) (-3.066421087689197632388731e+1737173 - 1.596619701076529803290973e+1737173j) A Struve function of half-integer order is elementary; for example: >>> z = 3 >>> struveh(0.5, 3) 0.9167076867564138178671595 >>> sqrt(2/(pi*z))*(1-cos(z)) 0.9167076867564138178671595 Numerically verifying the differential equation:: >>> z = mpf(4.5) >>> n = 3 >>> f = lambda z: struveh(n,z) >>> lhs = z**2*diff(f,z,2) + z*diff(f,z) + (z**2-n**2)*f(z) >>> rhs = 2*z**(n+1)/fac2(2*n-1)/pi >>> lhs 17.40359302709875496632744 >>> rhs 17.40359302709875496632744 """ struvel = r""" Gives the modified Struve function .. math :: \,\mathbf{L}_n(z) = -i e^{-n\pi i/2} \mathbf{H}_n(i z) which solves to the modified Struve differential equation .. math :: z^2 f''(z) + z f'(z) - (z^2+n^2) f(z) = \frac{2 z^{n+1}}{\pi (2n-1)!!}. **Examples** Evaluation for arbitrary real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> struvel(0, 3.5) 7.180846515103737996249972 >>> struvel(-1, 10) 2670.994904980850550721511 >>> struvel(1, -100.5) 1.757089288053346261497686e+42 >>> struvel(2.5, 10000000000000) 4.160893281017115450519948e+4342944819025 >>> struvel(2.5, -10000000000000) (0.0 - 4.160893281017115450519948e+4342944819025j) >>> struvel(1+j, 700j) (-0.1721150049480079451246076 + 0.1240770953126831093464055j) >>> struvel(1+j, 1000000+4000000j) (-2.973341637511505389128708e+434290 - 5.164633059729968297147448e+434290j) Numerically verifying the differential equation:: >>> z = mpf(3.5) >>> n = 3 >>> f = lambda z: struvel(n,z) >>> lhs = z**2*diff(f,z,2) + z*diff(f,z) - (z**2+n**2)*f(z) >>> rhs = 2*z**(n+1)/fac2(2*n-1)/pi >>> lhs 6.368850306060678353018165 >>> rhs 6.368850306060678353018165 """ appellf1 = r""" Gives the Appell F1 hypergeometric function of two variables, .. math :: F_1(a,b_1,b_2,c,x,y) = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{(a)_{m+n} (b_1)_m (b_2)_n}{(c)_{m+n}} \frac{x^m y^n}{m! n!}. This series is only generally convergent when `|x| < 1` and `|y| < 1`, although :func:`~mpmath.appellf1` can evaluate an analytic continuation with respecto to either variable, and sometimes both. **Examples** Evaluation is supported for real and complex parameters:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> appellf1(1,0,0.5,1,0.5,0.25) 1.154700538379251529018298 >>> appellf1(1,1+j,0.5,1,0.5,0.5j) (1.138403860350148085179415 + 1.510544741058517621110615j) For some integer parameters, the F1 series reduces to a polynomial:: >>> appellf1(2,-4,-3,1,2,5) -816.0 >>> appellf1(-5,1,2,1,4,5) -20528.0 The analytic continuation with respect to either `x` or `y`, and sometimes with respect to both, can be evaluated:: >>> appellf1(2,3,4,5,100,0.5) (0.0006231042714165329279738662 + 0.0000005769149277148425774499857j) >>> appellf1('1.1', '0.3', '0.2+2j', '0.4', '0.2', 1.5+3j) (-0.1782604566893954897128702 + 0.002472407104546216117161499j) >>> appellf1(1,2,3,4,10,12) -0.07122993830066776374929313 For certain arguments, F1 reduces to an ordinary hypergeometric function:: >>> appellf1(1,2,3,5,0.5,0.25) 1.547902270302684019335555 >>> 4*hyp2f1(1,2,5,'1/3')/3 1.547902270302684019335555 >>> appellf1(1,2,3,4,0,1.5) (-1.717202506168937502740238 - 2.792526803190927323077905j) >>> hyp2f1(1,3,4,1.5) (-1.717202506168937502740238 - 2.792526803190927323077905j) The F1 function satisfies a system of partial differential equations:: >>> a,b1,b2,c,x,y = map(mpf, [1,0.5,0.25,1.125,0.25,-0.25]) >>> F = lambda x,y: appellf1(a,b1,b2,c,x,y) >>> chop(x*(1-x)*diff(F,(x,y),(2,0)) + ... y*(1-x)*diff(F,(x,y),(1,1)) + ... (c-(a+b1+1)*x)*diff(F,(x,y),(1,0)) - ... b1*y*diff(F,(x,y),(0,1)) - ... a*b1*F(x,y)) 0.0 >>> >>> chop(y*(1-y)*diff(F,(x,y),(0,2)) + ... x*(1-y)*diff(F,(x,y),(1,1)) + ... (c-(a+b2+1)*y)*diff(F,(x,y),(0,1)) - ... b2*x*diff(F,(x,y),(1,0)) - ... a*b2*F(x,y)) 0.0 The Appell F1 function allows for closed-form evaluation of various integrals, such as any integral of the form `\int x^r (x+a)^p (x+b)^q dx`:: >>> def integral(a,b,p,q,r,x1,x2): ... a,b,p,q,r,x1,x2 = map(mpmathify, [a,b,p,q,r,x1,x2]) ... f = lambda x: x**r * (x+a)**p * (x+b)**q ... def F(x): ... v = x**(r+1)/(r+1) * (a+x)**p * (b+x)**q ... v *= (1+x/a)**(-p) ... v *= (1+x/b)**(-q) ... v *= appellf1(r+1,-p,-q,2+r,-x/a,-x/b) ... return v ... print("Num. quad: %s" % quad(f, [x1,x2])) ... print("Appell F1: %s" % (F(x2)-F(x1))) ... >>> integral('1/5','4/3','-2','3','1/2',0,1) Num. quad: 9.073335358785776206576981 Appell F1: 9.073335358785776206576981 >>> integral('3/2','4/3','-2','3','1/2',0,1) Num. quad: 1.092829171999626454344678 Appell F1: 1.092829171999626454344678 >>> integral('3/2','4/3','-2','3','1/2',12,25) Num. quad: 1106.323225040235116498927 Appell F1: 1106.323225040235116498927 Also incomplete elliptic integrals fall into this category [1]:: >>> def E(z, m): ... if (pi/2).ae(z): ... return ellipe(m) ... return 2*round(re(z)/pi)*ellipe(m) + mpf(-1)**round(re(z)/pi)*\ ... sin(z)*appellf1(0.5,0.5,-0.5,1.5,sin(z)**2,m*sin(z)**2) ... >>> z, m = 1, 0.5 >>> E(z,m); quad(lambda t: sqrt(1-m*sin(t)**2), [0,pi/4,3*pi/4,z]) 0.9273298836244400669659042 0.9273298836244400669659042 >>> z, m = 3, 2 >>> E(z,m); quad(lambda t: sqrt(1-m*sin(t)**2), [0,pi/4,3*pi/4,z]) (1.057495752337234229715836 + 1.198140234735592207439922j) (1.057495752337234229715836 + 1.198140234735592207439922j) **References** 1. [WolframFunctions]_ http://functions.wolfram.com/EllipticIntegrals/EllipticE2/26/01/ 2. [SrivastavaKarlsson]_ 3. [CabralRosetti]_ 4. [Vidunas]_ 5. [Slater]_ """ angerj = r""" Gives the Anger function .. math :: \mathbf{J}_{\nu}(z) = \frac{1}{\pi} \int_0^{\pi} \cos(\nu t - z \sin t) dt which is an entire function of both the parameter `\nu` and the argument `z`. It solves the inhomogeneous Bessel differential equation .. math :: f''(z) + \frac{1}{z}f'(z) + \left(1-\frac{\nu^2}{z^2}\right) f(z) = \frac{(z-\nu)}{\pi z^2} \sin(\pi \nu). **Examples** Evaluation for real and complex parameter and argument:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> angerj(2,3) 0.4860912605858910769078311 >>> angerj(-3+4j, 2+5j) (-5033.358320403384472395612 + 585.8011892476145118551756j) >>> angerj(3.25, 1e6j) (4.630743639715893346570743e+434290 - 1.117960409887505906848456e+434291j) >>> angerj(-1.5, 1e6) 0.0002795719747073879393087011 The Anger function coincides with the Bessel J-function when `\nu` is an integer:: >>> angerj(1,3); besselj(1,3) 0.3390589585259364589255146 0.3390589585259364589255146 >>> angerj(1.5,3); besselj(1.5,3) 0.4088969848691080859328847 0.4777182150870917715515015 Verifying the differential equation:: >>> v,z = mpf(2.25), 0.75 >>> f = lambda z: angerj(v,z) >>> diff(f,z,2) + diff(f,z)/z + (1-(v/z)**2)*f(z) -0.6002108774380707130367995 >>> (z-v)/(pi*z**2) * sinpi(v) -0.6002108774380707130367995 Verifying the integral representation:: >>> angerj(v,z) 0.1145380759919333180900501 >>> quad(lambda t: cos(v*t-z*sin(t))/pi, [0,pi]) 0.1145380759919333180900501 **References** 1. [DLMF]_ section 11.10: Anger-Weber Functions """ webere = r""" Gives the Weber function .. math :: \mathbf{E}_{\nu}(z) = \frac{1}{\pi} \int_0^{\pi} \sin(\nu t - z \sin t) dt which is an entire function of both the parameter `\nu` and the argument `z`. It solves the inhomogeneous Bessel differential equation .. math :: f''(z) + \frac{1}{z}f'(z) + \left(1-\frac{\nu^2}{z^2}\right) f(z) = -\frac{1}{\pi z^2} (z+\nu+(z-\nu)\cos(\pi \nu)). **Examples** Evaluation for real and complex parameter and argument:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> webere(2,3) -0.1057668973099018425662646 >>> webere(-3+4j, 2+5j) (-585.8081418209852019290498 - 5033.314488899926921597203j) >>> webere(3.25, 1e6j) (-1.117960409887505906848456e+434291 - 4.630743639715893346570743e+434290j) >>> webere(3.25, 1e6) -0.00002812518265894315604914453 Up to addition of a rational function of `z`, the Weber function coincides with the Struve H-function when `\nu` is an integer:: >>> webere(1,3); 2/pi-struveh(1,3) -0.3834897968188690177372881 -0.3834897968188690177372881 >>> webere(5,3); 26/(35*pi)-struveh(5,3) 0.2009680659308154011878075 0.2009680659308154011878075 Verifying the differential equation:: >>> v,z = mpf(2.25), 0.75 >>> f = lambda z: webere(v,z) >>> diff(f,z,2) + diff(f,z)/z + (1-(v/z)**2)*f(z) -1.097441848875479535164627 >>> -(z+v+(z-v)*cospi(v))/(pi*z**2) -1.097441848875479535164627 Verifying the integral representation:: >>> webere(v,z) 0.1486507351534283744485421 >>> quad(lambda t: sin(v*t-z*sin(t))/pi, [0,pi]) 0.1486507351534283744485421 **References** 1. [DLMF]_ section 11.10: Anger-Weber Functions """ lommels1 = r""" Gives the Lommel function `s_{\mu,\nu}` or `s^{(1)}_{\mu,\nu}` .. math :: s_{\mu,\nu}(z) = \frac{z^{\mu+1}}{(\mu-\nu+1)(\mu+\nu+1)} \,_1F_2\left(1; \frac{\mu-\nu+3}{2}, \frac{\mu+\nu+3}{2}; -\frac{z^2}{4} \right) which solves the inhomogeneous Bessel equation .. math :: z^2 f''(z) + z f'(z) + (z^2-\nu^2) f(z) = z^{\mu+1}. A second solution is given by :func:`~mpmath.lommels2`. **Plots** .. literalinclude :: /plots/lommels1.py .. image :: /plots/lommels1.png **Examples** An integral representation:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> u,v,z = 0.25, 0.125, mpf(0.75) >>> lommels1(u,v,z) 0.4276243877565150372999126 >>> (bessely(v,z)*quad(lambda t: t**u*besselj(v,t), [0,z]) - \ ... besselj(v,z)*quad(lambda t: t**u*bessely(v,t), [0,z]))*(pi/2) 0.4276243877565150372999126 A special value:: >>> lommels1(v,v,z) 0.5461221367746048054932553 >>> gamma(v+0.5)*sqrt(pi)*power(2,v-1)*struveh(v,z) 0.5461221367746048054932553 Verifying the differential equation:: >>> f = lambda z: lommels1(u,v,z) >>> z**2*diff(f,z,2) + z*diff(f,z) + (z**2-v**2)*f(z) 0.6979536443265746992059141 >>> z**(u+1) 0.6979536443265746992059141 **References** 1. [GradshteynRyzhik]_ 2. [Weisstein]_ http://mathworld.wolfram.com/LommelFunction.html """ lommels2 = r""" Gives the second Lommel function `S_{\mu,\nu}` or `s^{(2)}_{\mu,\nu}` .. math :: S_{\mu,\nu}(z) = s_{\mu,\nu}(z) + 2^{\mu-1} \Gamma\left(\tfrac{1}{2}(\mu-\nu+1)\right) \Gamma\left(\tfrac{1}{2}(\mu+\nu+1)\right) \times \left[\sin(\tfrac{1}{2}(\mu-\nu)\pi) J_{\nu}(z) - \cos(\tfrac{1}{2}(\mu-\nu)\pi) Y_{\nu}(z) \right] which solves the same differential equation as :func:`~mpmath.lommels1`. **Plots** .. literalinclude :: /plots/lommels2.py .. image :: /plots/lommels2.png **Examples** For large `|z|`, `S_{\mu,\nu} \sim z^{\mu-1}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> lommels2(10,2,30000) 1.968299831601008419949804e+40 >>> power(30000,9) 1.9683e+40 A special value:: >>> u,v,z = 0.5, 0.125, mpf(0.75) >>> lommels2(v,v,z) 0.9589683199624672099969765 >>> (struveh(v,z)-bessely(v,z))*power(2,v-1)*sqrt(pi)*gamma(v+0.5) 0.9589683199624672099969765 Verifying the differential equation:: >>> f = lambda z: lommels2(u,v,z) >>> z**2*diff(f,z,2) + z*diff(f,z) + (z**2-v**2)*f(z) 0.6495190528383289850727924 >>> z**(u+1) 0.6495190528383289850727924 **References** 1. [GradshteynRyzhik]_ 2. [Weisstein]_ http://mathworld.wolfram.com/LommelFunction.html """ appellf2 = r""" Gives the Appell F2 hypergeometric function of two variables .. math :: F_2(a,b_1,b_2,c_1,c_2,x,y) = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{(a)_{m+n} (b_1)_m (b_2)_n}{(c_1)_m (c_2)_n} \frac{x^m y^n}{m! n!}. The series is generally absolutely convergent for `|x| + |y| < 1`. **Examples** Evaluation for real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> appellf2(1,2,3,4,5,0.25,0.125) 1.257417193533135344785602 >>> appellf2(1,-3,-4,2,3,2,3) -42.8 >>> appellf2(0.5,0.25,-0.25,2,3,0.25j,0.25) (0.9880539519421899867041719 + 0.01497616165031102661476978j) >>> chop(appellf2(1,1+j,1-j,3j,-3j,0.25,0.25)) 1.201311219287411337955192 >>> appellf2(1,1,1,4,6,0.125,16) (-0.09455532250274744282125152 - 0.7647282253046207836769297j) A transformation formula:: >>> a,b1,b2,c1,c2,x,y = map(mpf, [1,2,0.5,0.25,1.625,-0.125,0.125]) >>> appellf2(a,b1,b2,c1,c2,x,y) 0.2299211717841180783309688 >>> (1-x)**(-a)*appellf2(a,c1-b1,b2,c1,c2,x/(x-1),y/(1-x)) 0.2299211717841180783309688 A system of partial differential equations satisfied by F2:: >>> a,b1,b2,c1,c2,x,y = map(mpf, [1,0.5,0.25,1.125,1.5,0.0625,-0.0625]) >>> F = lambda x,y: appellf2(a,b1,b2,c1,c2,x,y) >>> chop(x*(1-x)*diff(F,(x,y),(2,0)) - ... x*y*diff(F,(x,y),(1,1)) + ... (c1-(a+b1+1)*x)*diff(F,(x,y),(1,0)) - ... b1*y*diff(F,(x,y),(0,1)) - ... a*b1*F(x,y)) 0.0 >>> chop(y*(1-y)*diff(F,(x,y),(0,2)) - ... x*y*diff(F,(x,y),(1,1)) + ... (c2-(a+b2+1)*y)*diff(F,(x,y),(0,1)) - ... b2*x*diff(F,(x,y),(1,0)) - ... a*b2*F(x,y)) 0.0 **References** See references for :func:`~mpmath.appellf1`. """ appellf3 = r""" Gives the Appell F3 hypergeometric function of two variables .. math :: F_3(a_1,a_2,b_1,b_2,c,x,y) = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{(a_1)_m (a_2)_n (b_1)_m (b_2)_n}{(c)_{m+n}} \frac{x^m y^n}{m! n!}. The series is generally absolutely convergent for `|x| < 1, |y| < 1`. **Examples** Evaluation for various parameters and variables:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> appellf3(1,2,3,4,5,0.5,0.25) 2.221557778107438938158705 >>> appellf3(1,2,3,4,5,6,0); hyp2f1(1,3,5,6) (-0.5189554589089861284537389 - 0.1454441043328607980769742j) (-0.5189554589089861284537389 - 0.1454441043328607980769742j) >>> appellf3(1,-2,-3,1,1,4,6) -17.4 >>> appellf3(1,2,-3,1,1,4,6) (17.7876136773677356641825 + 19.54768762233649126154534j) >>> appellf3(1,2,-3,1,1,6,4) (85.02054175067929402953645 + 148.4402528821177305173599j) >>> chop(appellf3(1+j,2,1-j,2,3,0.25,0.25)) 1.719992169545200286696007 Many transformations and evaluations for special combinations of the parameters are possible, e.g.: >>> a,b,c,x,y = map(mpf, [0.5,0.25,0.125,0.125,-0.125]) >>> appellf3(a,c-a,b,c-b,c,x,y) 1.093432340896087107444363 >>> (1-y)**(a+b-c)*hyp2f1(a,b,c,x+y-x*y) 1.093432340896087107444363 >>> x**2*appellf3(1,1,1,1,3,x,-x) 0.01568646277445385390945083 >>> polylog(2,x**2) 0.01568646277445385390945083 >>> a1,a2,b1,b2,c,x = map(mpf, [0.5,0.25,0.125,0.5,4.25,0.125]) >>> appellf3(a1,a2,b1,b2,c,x,1) 1.03947361709111140096947 >>> gammaprod([c,c-a2-b2],[c-a2,c-b2])*hyp3f2(a1,b1,c-a2-b2,c-a2,c-b2,x) 1.03947361709111140096947 The Appell F3 function satisfies a pair of partial differential equations:: >>> a1,a2,b1,b2,c,x,y = map(mpf, [0.5,0.25,0.125,0.5,0.625,0.0625,-0.0625]) >>> F = lambda x,y: appellf3(a1,a2,b1,b2,c,x,y) >>> chop(x*(1-x)*diff(F,(x,y),(2,0)) + ... y*diff(F,(x,y),(1,1)) + ... (c-(a1+b1+1)*x)*diff(F,(x,y),(1,0)) - ... a1*b1*F(x,y)) 0.0 >>> chop(y*(1-y)*diff(F,(x,y),(0,2)) + ... x*diff(F,(x,y),(1,1)) + ... (c-(a2+b2+1)*y)*diff(F,(x,y),(0,1)) - ... a2*b2*F(x,y)) 0.0 **References** See references for :func:`~mpmath.appellf1`. """ appellf4 = r""" Gives the Appell F4 hypergeometric function of two variables .. math :: F_4(a,b,c_1,c_2,x,y) = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{(a)_{m+n} (b)_{m+n}}{(c_1)_m (c_2)_n} \frac{x^m y^n}{m! n!}. The series is generally absolutely convergent for `\sqrt{|x|} + \sqrt{|y|} < 1`. **Examples** Evaluation for various parameters and arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> appellf4(1,1,2,2,0.25,0.125) 1.286182069079718313546608 >>> appellf4(-2,-3,4,5,4,5) 34.8 >>> appellf4(5,4,2,3,0.25j,-0.125j) (-0.2585967215437846642163352 + 2.436102233553582711818743j) Reduction to `\,_2F_1` in a special case:: >>> a,b,c,x,y = map(mpf, [0.5,0.25,0.125,0.125,-0.125]) >>> appellf4(a,b,c,a+b-c+1,x*(1-y),y*(1-x)) 1.129143488466850868248364 >>> hyp2f1(a,b,c,x)*hyp2f1(a,b,a+b-c+1,y) 1.129143488466850868248364 A system of partial differential equations satisfied by F4:: >>> a,b,c1,c2,x,y = map(mpf, [1,0.5,0.25,1.125,0.0625,-0.0625]) >>> F = lambda x,y: appellf4(a,b,c1,c2,x,y) >>> chop(x*(1-x)*diff(F,(x,y),(2,0)) - ... y**2*diff(F,(x,y),(0,2)) - ... 2*x*y*diff(F,(x,y),(1,1)) + ... (c1-(a+b+1)*x)*diff(F,(x,y),(1,0)) - ... ((a+b+1)*y)*diff(F,(x,y),(0,1)) - ... a*b*F(x,y)) 0.0 >>> chop(y*(1-y)*diff(F,(x,y),(0,2)) - ... x**2*diff(F,(x,y),(2,0)) - ... 2*x*y*diff(F,(x,y),(1,1)) + ... (c2-(a+b+1)*y)*diff(F,(x,y),(0,1)) - ... ((a+b+1)*x)*diff(F,(x,y),(1,0)) - ... a*b*F(x,y)) 0.0 **References** See references for :func:`~mpmath.appellf1`. """ zeta = r""" Computes the Riemann zeta function .. math :: \zeta(s) = 1+\frac{1}{2^s}+\frac{1}{3^s}+\frac{1}{4^s}+\ldots or, with `a \ne 1`, the more general Hurwitz zeta function .. math :: \zeta(s,a) = \sum_{k=0}^\infty \frac{1}{(a+k)^s}. Optionally, ``zeta(s, a, n)`` computes the `n`-th derivative with respect to `s`, .. math :: \zeta^{(n)}(s,a) = (-1)^n \sum_{k=0}^\infty \frac{\log^n(a+k)}{(a+k)^s}. Although these series only converge for `\Re(s) > 1`, the Riemann and Hurwitz zeta functions are defined through analytic continuation for arbitrary complex `s \ne 1` (`s = 1` is a pole). The implementation uses three algorithms: the Borwein algorithm for the Riemann zeta function when `s` is close to the real line; the Riemann-Siegel formula for the Riemann zeta function when `s` is large imaginary, and Euler-Maclaurin summation in all other cases. The reflection formula for `\Re(s) < 0` is implemented in some cases. The algorithm can be chosen with ``method = 'borwein'``, ``method='riemann-siegel'`` or ``method = 'euler-maclaurin'``. The parameter `a` is usually a rational number `a = p/q`, and may be specified as such by passing an integer tuple `(p, q)`. Evaluation is supported for arbitrary complex `a`, but may be slow and/or inaccurate when `\Re(s) < 0` for nonrational `a` or when computing derivatives. **Examples** Some values of the Riemann zeta function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> zeta(2); pi**2 / 6 1.644934066848226436472415 1.644934066848226436472415 >>> zeta(0) -0.5 >>> zeta(-1) -0.08333333333333333333333333 >>> zeta(-2) 0.0 For large positive `s`, `\zeta(s)` rapidly approaches 1:: >>> zeta(50) 1.000000000000000888178421 >>> zeta(100) 1.0 >>> zeta(inf) 1.0 >>> 1-sum((zeta(k)-1)/k for k in range(2,85)); +euler 0.5772156649015328606065121 0.5772156649015328606065121 >>> nsum(lambda k: zeta(k)-1, [2, inf]) 1.0 Evaluation is supported for complex `s` and `a`: >>> zeta(-3+4j) (-0.03373057338827757067584698 + 0.2774499251557093745297677j) >>> zeta(2+3j, -1+j) (389.6841230140842816370741 + 295.2674610150305334025962j) The Riemann zeta function has so-called nontrivial zeros on the critical line `s = 1/2 + it`:: >>> findroot(zeta, 0.5+14j); zetazero(1) (0.5 + 14.13472514173469379045725j) (0.5 + 14.13472514173469379045725j) >>> findroot(zeta, 0.5+21j); zetazero(2) (0.5 + 21.02203963877155499262848j) (0.5 + 21.02203963877155499262848j) >>> findroot(zeta, 0.5+25j); zetazero(3) (0.5 + 25.01085758014568876321379j) (0.5 + 25.01085758014568876321379j) >>> chop(zeta(zetazero(10))) 0.0 Evaluation on and near the critical line is supported for large heights `t` by means of the Riemann-Siegel formula (currently for `a = 1`, `n \le 4`):: >>> zeta(0.5+100000j) (1.073032014857753132114076 + 5.780848544363503984261041j) >>> zeta(0.75+1000000j) (0.9535316058375145020351559 + 0.9525945894834273060175651j) >>> zeta(0.5+10000000j) (11.45804061057709254500227 - 8.643437226836021723818215j) >>> zeta(0.5+100000000j, derivative=1) (51.12433106710194942681869 + 43.87221167872304520599418j) >>> zeta(0.5+100000000j, derivative=2) (-444.2760822795430400549229 - 896.3789978119185981665403j) >>> zeta(0.5+100000000j, derivative=3) (3230.72682687670422215339 + 14374.36950073615897616781j) >>> zeta(0.5+100000000j, derivative=4) (-11967.35573095046402130602 - 218945.7817789262839266148j) >>> zeta(1+10000000j) # off the line (2.859846483332530337008882 + 0.491808047480981808903986j) >>> zeta(1+10000000j, derivative=1) (-4.333835494679647915673205 - 0.08405337962602933636096103j) >>> zeta(1+10000000j, derivative=4) (453.2764822702057701894278 - 581.963625832768189140995j) For investigation of the zeta function zeros, the Riemann-Siegel Z-function is often more convenient than working with the Riemann zeta function directly (see :func:`~mpmath.siegelz`). Some values of the Hurwitz zeta function:: >>> zeta(2, 3); -5./4 + pi**2/6 0.3949340668482264364724152 0.3949340668482264364724152 >>> zeta(2, (3,4)); pi**2 - 8*catalan 2.541879647671606498397663 2.541879647671606498397663 For positive integer values of `s`, the Hurwitz zeta function is equivalent to a polygamma function (except for a normalizing factor):: >>> zeta(4, (1,5)); psi(3, '1/5')/6 625.5408324774542966919938 625.5408324774542966919938 Evaluation of derivatives:: >>> zeta(0, 3+4j, 1); loggamma(3+4j) - ln(2*pi)/2 (-2.675565317808456852310934 + 4.742664438034657928194889j) (-2.675565317808456852310934 + 4.742664438034657928194889j) >>> zeta(2, 1, 20) 2432902008176640000.000242 >>> zeta(3+4j, 5.5+2j, 4) (-0.140075548947797130681075 - 0.3109263360275413251313634j) >>> zeta(0.5+100000j, 1, 4) (-10407.16081931495861539236 + 13777.78669862804508537384j) >>> zeta(-100+0.5j, (1,3), derivative=4) (4.007180821099823942702249e+79 + 4.916117957092593868321778e+78j) Generating a Taylor series at `s = 2` using derivatives:: >>> for k in range(11): print("%s * (s-2)^%i" % (zeta(2,1,k)/fac(k), k)) ... 1.644934066848226436472415 * (s-2)^0 -0.9375482543158437537025741 * (s-2)^1 0.9946401171494505117104293 * (s-2)^2 -1.000024300473840810940657 * (s-2)^3 1.000061933072352565457512 * (s-2)^4 -1.000006869443931806408941 * (s-2)^5 1.000000173233769531820592 * (s-2)^6 -0.9999999569989868493432399 * (s-2)^7 0.9999999937218844508684206 * (s-2)^8 -0.9999999996355013916608284 * (s-2)^9 1.000000000004610645020747 * (s-2)^10 Evaluation at zero and for negative integer `s`:: >>> zeta(0, 10) -9.5 >>> zeta(-2, (2,3)); mpf(1)/81 0.01234567901234567901234568 0.01234567901234567901234568 >>> zeta(-3+4j, (5,4)) (0.2899236037682695182085988 + 0.06561206166091757973112783j) >>> zeta(-3.25, 1/pi) -0.0005117269627574430494396877 >>> zeta(-3.5, pi, 1) 11.156360390440003294709 >>> zeta(-100.5, (8,3)) -4.68162300487989766727122e+77 >>> zeta(-10.5, (-8,3)) (-0.01521913704446246609237979 + 29907.72510874248161608216j) >>> zeta(-1000.5, (-8,3)) (1.031911949062334538202567e+1770 + 1.519555750556794218804724e+426j) >>> zeta(-1+j, 3+4j) (-16.32988355630802510888631 - 22.17706465801374033261383j) >>> zeta(-1+j, 3+4j, 2) (32.48985276392056641594055 - 51.11604466157397267043655j) >>> diff(lambda s: zeta(s, 3+4j), -1+j, 2) (32.48985276392056641594055 - 51.11604466157397267043655j) **References** 1. http://mathworld.wolfram.com/RiemannZetaFunction.html 2. http://mathworld.wolfram.com/HurwitzZetaFunction.html 3. http://www.cecm.sfu.ca/personal/pborwein/PAPERS/P155.pdf """ dirichlet = r""" Evaluates the Dirichlet L-function .. math :: L(s,\chi) = \sum_{k=1}^\infty \frac{\chi(k)}{k^s}. where `\chi` is a periodic sequence of length `q` which should be supplied in the form of a list `[\chi(0), \chi(1), \ldots, \chi(q-1)]`. Strictly, `\chi` should be a Dirichlet character, but any periodic sequence will work. For example, ``dirichlet(s, [1])`` gives the ordinary Riemann zeta function and ``dirichlet(s, [-1,1])`` gives the alternating zeta function (Dirichlet eta function). Also the derivative with respect to `s` (currently only a first derivative) can be evaluated. **Examples** The ordinary Riemann zeta function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> dirichlet(3, [1]); zeta(3) 1.202056903159594285399738 1.202056903159594285399738 >>> dirichlet(1, [1]) +inf The alternating zeta function:: >>> dirichlet(1, [-1,1]); ln(2) 0.6931471805599453094172321 0.6931471805599453094172321 The following defines the Dirichlet beta function `\beta(s) = \sum_{k=0}^\infty \frac{(-1)^k}{(2k+1)^s}` and verifies several values of this function:: >>> B = lambda s, d=0: dirichlet(s, [0, 1, 0, -1], d) >>> B(0); 1./2 0.5 0.5 >>> B(1); pi/4 0.7853981633974483096156609 0.7853981633974483096156609 >>> B(2); +catalan 0.9159655941772190150546035 0.9159655941772190150546035 >>> B(2,1); diff(B, 2) 0.08158073611659279510291217 0.08158073611659279510291217 >>> B(-1,1); 2*catalan/pi 0.5831218080616375602767689 0.5831218080616375602767689 >>> B(0,1); log(gamma(0.25)**2/(2*pi*sqrt(2))) 0.3915943927068367764719453 0.3915943927068367764719454 >>> B(1,1); 0.25*pi*(euler+2*ln2+3*ln(pi)-4*ln(gamma(0.25))) 0.1929013167969124293631898 0.1929013167969124293631898 A custom L-series of period 3:: >>> dirichlet(2, [2,0,1]) 0.7059715047839078092146831 >>> 2*nsum(lambda k: (3*k)**-2, [1,inf]) + \ ... nsum(lambda k: (3*k+2)**-2, [0,inf]) 0.7059715047839078092146831 """ coulombf = r""" Calculates the regular Coulomb wave function .. math :: F_l(\eta,z) = C_l(\eta) z^{l+1} e^{-iz} \,_1F_1(l+1-i\eta, 2l+2, 2iz) where the normalization constant `C_l(\eta)` is as calculated by :func:`~mpmath.coulombc`. This function solves the differential equation .. math :: f''(z) + \left(1-\frac{2\eta}{z}-\frac{l(l+1)}{z^2}\right) f(z) = 0. A second linearly independent solution is given by the irregular Coulomb wave function `G_l(\eta,z)` (see :func:`~mpmath.coulombg`) and thus the general solution is `f(z) = C_1 F_l(\eta,z) + C_2 G_l(\eta,z)` for arbitrary constants `C_1`, `C_2`. Physically, the Coulomb wave functions give the radial solution to the Schrodinger equation for a point particle in a `1/z` potential; `z` is then the radius and `l`, `\eta` are quantum numbers. The Coulomb wave functions with real parameters are defined in Abramowitz & Stegun, section 14. However, all parameters are permitted to be complex in this implementation (see references). **Plots** .. literalinclude :: /plots/coulombf.py .. image :: /plots/coulombf.png .. literalinclude :: /plots/coulombf_c.py .. image :: /plots/coulombf_c.png **Examples** Evaluation is supported for arbitrary magnitudes of `z`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> coulombf(2, 1.5, 3.5) 0.4080998961088761187426445 >>> coulombf(-2, 1.5, 3.5) 0.7103040849492536747533465 >>> coulombf(2, 1.5, '1e-10') 4.143324917492256448770769e-33 >>> coulombf(2, 1.5, 1000) 0.4482623140325567050716179 >>> coulombf(2, 1.5, 10**10) -0.066804196437694360046619 Verifying the differential equation:: >>> l, eta, z = 2, 3, mpf(2.75) >>> A, B = 1, 2 >>> f = lambda z: A*coulombf(l,eta,z) + B*coulombg(l,eta,z) >>> chop(diff(f,z,2) + (1-2*eta/z - l*(l+1)/z**2)*f(z)) 0.0 A Wronskian relation satisfied by the Coulomb wave functions:: >>> l = 2 >>> eta = 1.5 >>> F = lambda z: coulombf(l,eta,z) >>> G = lambda z: coulombg(l,eta,z) >>> for z in [3.5, -1, 2+3j]: ... chop(diff(F,z)*G(z) - F(z)*diff(G,z)) ... 1.0 1.0 1.0 Another Wronskian relation:: >>> F = coulombf >>> G = coulombg >>> for z in [3.5, -1, 2+3j]: ... chop(F(l-1,eta,z)*G(l,eta,z)-F(l,eta,z)*G(l-1,eta,z) - l/sqrt(l**2+eta**2)) ... 0.0 0.0 0.0 An integral identity connecting the regular and irregular wave functions:: >>> l, eta, z = 4+j, 2-j, 5+2j >>> coulombf(l,eta,z) + j*coulombg(l,eta,z) (0.7997977752284033239714479 + 0.9294486669502295512503127j) >>> g = lambda t: exp(-t)*t**(l-j*eta)*(t+2*j*z)**(l+j*eta) >>> j*exp(-j*z)*z**(-l)/fac(2*l+1)/coulombc(l,eta)*quad(g, [0,inf]) (0.7997977752284033239714479 + 0.9294486669502295512503127j) Some test case with complex parameters, taken from Michel [2]:: >>> mp.dps = 15 >>> coulombf(1+0.1j, 50+50j, 100.156) (-1.02107292320897e+15 - 2.83675545731519e+15j) >>> coulombg(1+0.1j, 50+50j, 100.156) (2.83675545731519e+15 - 1.02107292320897e+15j) >>> coulombf(1e-5j, 10+1e-5j, 0.1+1e-6j) (4.30566371247811e-14 - 9.03347835361657e-19j) >>> coulombg(1e-5j, 10+1e-5j, 0.1+1e-6j) (778709182061.134 + 18418936.2660553j) The following reproduces a table in Abramowitz & Stegun, at twice the precision:: >>> mp.dps = 10 >>> eta = 2; z = 5 >>> for l in [5, 4, 3, 2, 1, 0]: ... print("%s %s %s" % (l, coulombf(l,eta,z), ... diff(lambda z: coulombf(l,eta,z), z))) ... 5 0.09079533488 0.1042553261 4 0.2148205331 0.2029591779 3 0.4313159311 0.320534053 2 0.7212774133 0.3952408216 1 0.9935056752 0.3708676452 0 1.143337392 0.2937960375 **References** 1. I.J. Thompson & A.R. Barnett, "Coulomb and Bessel Functions of Complex Arguments and Order", J. Comp. Phys., vol 64, no. 2, June 1986. 2. N. Michel, "Precise Coulomb wave functions for a wide range of complex `l`, `\eta` and `z`", http://arxiv.org/abs/physics/0702051v1 """ coulombg = r""" Calculates the irregular Coulomb wave function .. math :: G_l(\eta,z) = \frac{F_l(\eta,z) \cos(\chi) - F_{-l-1}(\eta,z)}{\sin(\chi)} where `\chi = \sigma_l - \sigma_{-l-1} - (l+1/2) \pi` and `\sigma_l(\eta) = (\ln \Gamma(1+l+i\eta)-\ln \Gamma(1+l-i\eta))/(2i)`. See :func:`~mpmath.coulombf` for additional information. **Plots** .. literalinclude :: /plots/coulombg.py .. image :: /plots/coulombg.png .. literalinclude :: /plots/coulombg_c.py .. image :: /plots/coulombg_c.png **Examples** Evaluation is supported for arbitrary magnitudes of `z`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> coulombg(-2, 1.5, 3.5) 1.380011900612186346255524 >>> coulombg(2, 1.5, 3.5) 1.919153700722748795245926 >>> coulombg(-2, 1.5, '1e-10') 201126715824.7329115106793 >>> coulombg(-2, 1.5, 1000) 0.1802071520691149410425512 >>> coulombg(-2, 1.5, 10**10) 0.652103020061678070929794 The following reproduces a table in Abramowitz & Stegun, at twice the precision:: >>> mp.dps = 10 >>> eta = 2; z = 5 >>> for l in [1, 2, 3, 4, 5]: ... print("%s %s %s" % (l, coulombg(l,eta,z), ... -diff(lambda z: coulombg(l,eta,z), z))) ... 1 1.08148276 0.6028279961 2 1.496877075 0.5661803178 3 2.048694714 0.7959909551 4 3.09408669 1.731802374 5 5.629840456 4.549343289 Evaluation close to the singularity at `z = 0`:: >>> mp.dps = 15 >>> coulombg(0,10,1) 3088184933.67358 >>> coulombg(0,10,'1e-10') 5554866000719.8 >>> coulombg(0,10,'1e-100') 5554866221524.1 Evaluation with a half-integer value for `l`:: >>> coulombg(1.5, 1, 10) 0.852320038297334 """ coulombc = r""" Gives the normalizing Gamow constant for Coulomb wave functions, .. math :: C_l(\eta) = 2^l \exp\left(-\pi \eta/2 + [\ln \Gamma(1+l+i\eta) + \ln \Gamma(1+l-i\eta)]/2 - \ln \Gamma(2l+2)\right), where the log gamma function with continuous imaginary part away from the negative half axis (see :func:`~mpmath.loggamma`) is implied. This function is used internally for the calculation of Coulomb wave functions, and automatically cached to make multiple evaluations with fixed `l`, `\eta` fast. """ ellipfun = r""" Computes any of the Jacobi elliptic functions, defined in terms of Jacobi theta functions as .. math :: \mathrm{sn}(u,m) = \frac{\vartheta_3(0,q)}{\vartheta_2(0,q)} \frac{\vartheta_1(t,q)}{\vartheta_4(t,q)} \mathrm{cn}(u,m) = \frac{\vartheta_4(0,q)}{\vartheta_2(0,q)} \frac{\vartheta_2(t,q)}{\vartheta_4(t,q)} \mathrm{dn}(u,m) = \frac{\vartheta_4(0,q)}{\vartheta_3(0,q)} \frac{\vartheta_3(t,q)}{\vartheta_4(t,q)}, or more generally computes a ratio of two such functions. Here `t = u/\vartheta_3(0,q)^2`, and `q = q(m)` denotes the nome (see :func:`~mpmath.nome`). Optionally, you can specify the nome directly instead of `m` by passing ``q=``, or you can directly specify the elliptic parameter `k` with ``k=``. The first argument should be a two-character string specifying the function using any combination of ``'s'``, ``'c'``, ``'d'``, ``'n'``. These letters respectively denote the basic functions `\mathrm{sn}(u,m)`, `\mathrm{cn}(u,m)`, `\mathrm{dn}(u,m)`, and `1`. The identifier specifies the ratio of two such functions. For example, ``'ns'`` identifies the function .. math :: \mathrm{ns}(u,m) = \frac{1}{\mathrm{sn}(u,m)} and ``'cd'`` identifies the function .. math :: \mathrm{cd}(u,m) = \frac{\mathrm{cn}(u,m)}{\mathrm{dn}(u,m)}. If called with only the first argument, a function object evaluating the chosen function for given arguments is returned. **Examples** Basic evaluation:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> ellipfun('cd', 3.5, 0.5) -0.9891101840595543931308394 >>> ellipfun('cd', 3.5, q=0.25) 0.07111979240214668158441418 The sn-function is doubly periodic in the complex plane with periods `4 K(m)` and `2 i K(1-m)` (see :func:`~mpmath.ellipk`):: >>> sn = ellipfun('sn') >>> sn(2, 0.25) 0.9628981775982774425751399 >>> sn(2+4*ellipk(0.25), 0.25) 0.9628981775982774425751399 >>> chop(sn(2+2*j*ellipk(1-0.25), 0.25)) 0.9628981775982774425751399 The cn-function is doubly periodic with periods `4 K(m)` and `4 i K(1-m)`:: >>> cn = ellipfun('cn') >>> cn(2, 0.25) -0.2698649654510865792581416 >>> cn(2+4*ellipk(0.25), 0.25) -0.2698649654510865792581416 >>> chop(cn(2+4*j*ellipk(1-0.25), 0.25)) -0.2698649654510865792581416 The dn-function is doubly periodic with periods `2 K(m)` and `4 i K(1-m)`:: >>> dn = ellipfun('dn') >>> dn(2, 0.25) 0.8764740583123262286931578 >>> dn(2+2*ellipk(0.25), 0.25) 0.8764740583123262286931578 >>> chop(dn(2+4*j*ellipk(1-0.25), 0.25)) 0.8764740583123262286931578 """ jtheta = r""" Computes the Jacobi theta function `\vartheta_n(z, q)`, where `n = 1, 2, 3, 4`, defined by the infinite series: .. math :: \vartheta_1(z,q) = 2 q^{1/4} \sum_{n=0}^{\infty} (-1)^n q^{n^2+n\,} \sin((2n+1)z) \vartheta_2(z,q) = 2 q^{1/4} \sum_{n=0}^{\infty} q^{n^{2\,} + n} \cos((2n+1)z) \vartheta_3(z,q) = 1 + 2 \sum_{n=1}^{\infty} q^{n^2\,} \cos(2 n z) \vartheta_4(z,q) = 1 + 2 \sum_{n=1}^{\infty} (-q)^{n^2\,} \cos(2 n z) The theta functions are functions of two variables: * `z` is the *argument*, an arbitrary real or complex number * `q` is the *nome*, which must be a real or complex number in the unit disk (i.e. `|q| < 1`). For `|q| \ll 1`, the series converge very quickly, so the Jacobi theta functions can efficiently be evaluated to high precision. The compact notations `\vartheta_n(q) = \vartheta_n(0,q)` and `\vartheta_n = \vartheta_n(0,q)` are also frequently encountered. Finally, Jacobi theta functions are frequently considered as functions of the half-period ratio `\tau` and then usually denoted by `\vartheta_n(z|\tau)`. Optionally, ``jtheta(n, z, q, derivative=d)`` with `d > 0` computes a `d`-th derivative with respect to `z`. **Examples and basic properties** Considered as functions of `z`, the Jacobi theta functions may be viewed as generalizations of the ordinary trigonometric functions cos and sin. They are periodic functions:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> jtheta(1, 0.25, '0.2') 0.2945120798627300045053104 >>> jtheta(1, 0.25 + 2*pi, '0.2') 0.2945120798627300045053104 Indeed, the series defining the theta functions are essentially trigonometric Fourier series. The coefficients can be retrieved using :func:`~mpmath.fourier`:: >>> mp.dps = 10 >>> nprint(fourier(lambda x: jtheta(2, x, 0.5), [-pi, pi], 4)) ([0.0, 1.68179, 0.0, 0.420448, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0]) The Jacobi theta functions are also so-called quasiperiodic functions of `z` and `\tau`, meaning that for fixed `\tau`, `\vartheta_n(z, q)` and `\vartheta_n(z+\pi \tau, q)` are the same except for an exponential factor:: >>> mp.dps = 25 >>> tau = 3*j/10 >>> q = exp(pi*j*tau) >>> z = 10 >>> jtheta(4, z+tau*pi, q) (-0.682420280786034687520568 + 1.526683999721399103332021j) >>> -exp(-2*j*z)/q * jtheta(4, z, q) (-0.682420280786034687520568 + 1.526683999721399103332021j) The Jacobi theta functions satisfy a huge number of other functional equations, such as the following identity (valid for any `q`):: >>> q = mpf(3)/10 >>> jtheta(3,0,q)**4 6.823744089352763305137427 >>> jtheta(2,0,q)**4 + jtheta(4,0,q)**4 6.823744089352763305137427 Extensive listings of identities satisfied by the Jacobi theta functions can be found in standard reference works. The Jacobi theta functions are related to the gamma function for special arguments:: >>> jtheta(3, 0, exp(-pi)) 1.086434811213308014575316 >>> pi**(1/4.) / gamma(3/4.) 1.086434811213308014575316 :func:`~mpmath.jtheta` supports arbitrary precision evaluation and complex arguments:: >>> mp.dps = 50 >>> jtheta(4, sqrt(2), 0.5) 2.0549510717571539127004115835148878097035750653737 >>> mp.dps = 25 >>> jtheta(4, 1+2j, (1+j)/5) (7.180331760146805926356634 - 1.634292858119162417301683j) Evaluation of derivatives:: >>> mp.dps = 25 >>> jtheta(1, 7, 0.25, 1); diff(lambda z: jtheta(1, z, 0.25), 7) 1.209857192844475388637236 1.209857192844475388637236 >>> jtheta(1, 7, 0.25, 2); diff(lambda z: jtheta(1, z, 0.25), 7, 2) -0.2598718791650217206533052 -0.2598718791650217206533052 >>> jtheta(2, 7, 0.25, 1); diff(lambda z: jtheta(2, z, 0.25), 7) -1.150231437070259644461474 -1.150231437070259644461474 >>> jtheta(2, 7, 0.25, 2); diff(lambda z: jtheta(2, z, 0.25), 7, 2) -0.6226636990043777445898114 -0.6226636990043777445898114 >>> jtheta(3, 7, 0.25, 1); diff(lambda z: jtheta(3, z, 0.25), 7) -0.9990312046096634316587882 -0.9990312046096634316587882 >>> jtheta(3, 7, 0.25, 2); diff(lambda z: jtheta(3, z, 0.25), 7, 2) -0.1530388693066334936151174 -0.1530388693066334936151174 >>> jtheta(4, 7, 0.25, 1); diff(lambda z: jtheta(4, z, 0.25), 7) 0.9820995967262793943571139 0.9820995967262793943571139 >>> jtheta(4, 7, 0.25, 2); diff(lambda z: jtheta(4, z, 0.25), 7, 2) 0.3936902850291437081667755 0.3936902850291437081667755 **Possible issues** For `|q| \ge 1` or `\Im(\tau) \le 0`, :func:`~mpmath.jtheta` raises ``ValueError``. This exception is also raised for `|q|` extremely close to 1 (or equivalently `\tau` very close to 0), since the series would converge too slowly:: >>> jtheta(1, 10, 0.99999999 * exp(0.5*j)) Traceback (most recent call last): ... ValueError: abs(q) > THETA_Q_LIM = 1.000000 """ eulernum = r""" Gives the `n`-th Euler number, defined as the `n`-th derivative of `\mathrm{sech}(t) = 1/\cosh(t)` evaluated at `t = 0`. Equivalently, the Euler numbers give the coefficients of the Taylor series .. math :: \mathrm{sech}(t) = \sum_{n=0}^{\infty} \frac{E_n}{n!} t^n. The Euler numbers are closely related to Bernoulli numbers and Bernoulli polynomials. They can also be evaluated in terms of Euler polynomials (see :func:`~mpmath.eulerpoly`) as `E_n = 2^n E_n(1/2)`. **Examples** Computing the first few Euler numbers and verifying that they agree with the Taylor series:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> [eulernum(n) for n in range(11)] [1.0, 0.0, -1.0, 0.0, 5.0, 0.0, -61.0, 0.0, 1385.0, 0.0, -50521.0] >>> chop(diffs(sech, 0, 10)) [1.0, 0.0, -1.0, 0.0, 5.0, 0.0, -61.0, 0.0, 1385.0, 0.0, -50521.0] Euler numbers grow very rapidly. :func:`~mpmath.eulernum` efficiently computes numerical approximations for large indices:: >>> eulernum(50) -6.053285248188621896314384e+54 >>> eulernum(1000) 3.887561841253070615257336e+2371 >>> eulernum(10**20) 4.346791453661149089338186e+1936958564106659551331 Comparing with an asymptotic formula for the Euler numbers:: >>> n = 10**5 >>> (-1)**(n//2) * 8 * sqrt(n/(2*pi)) * (2*n/(pi*e))**n 3.69919063017432362805663e+436961 >>> eulernum(n) 3.699193712834466537941283e+436961 Pass ``exact=True`` to obtain exact values of Euler numbers as integers:: >>> print(eulernum(50, exact=True)) -6053285248188621896314383785111649088103498225146815121 >>> print(eulernum(200, exact=True) % 10**10) 1925859625 >>> eulernum(1001, exact=True) 0 """ eulerpoly = r""" Evaluates the Euler polynomial `E_n(z)`, defined by the generating function representation .. math :: \frac{2e^{zt}}{e^t+1} = \sum_{n=0}^\infty E_n(z) \frac{t^n}{n!}. The Euler polynomials may also be represented in terms of Bernoulli polynomials (see :func:`~mpmath.bernpoly`) using various formulas, for example .. math :: E_n(z) = \frac{2}{n+1} \left( B_n(z)-2^{n+1}B_n\left(\frac{z}{2}\right) \right). Special values include the Euler numbers `E_n = 2^n E_n(1/2)` (see :func:`~mpmath.eulernum`). **Examples** Computing the coefficients of the first few Euler polynomials:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> for n in range(6): ... chop(taylor(lambda z: eulerpoly(n,z), 0, n)) ... [1.0] [-0.5, 1.0] [0.0, -1.0, 1.0] [0.25, 0.0, -1.5, 1.0] [0.0, 1.0, 0.0, -2.0, 1.0] [-0.5, 0.0, 2.5, 0.0, -2.5, 1.0] Evaluation for arbitrary `z`:: >>> eulerpoly(2,3) 6.0 >>> eulerpoly(5,4) 423.5 >>> eulerpoly(35, 11111111112) 3.994957561486776072734601e+351 >>> eulerpoly(4, 10+20j) (-47990.0 - 235980.0j) >>> eulerpoly(2, '-3.5e-5') 0.000035001225 >>> eulerpoly(3, 0.5) 0.0 >>> eulerpoly(55, -10**80) -1.0e+4400 >>> eulerpoly(5, -inf) -inf >>> eulerpoly(6, -inf) +inf Computing Euler numbers:: >>> 2**26 * eulerpoly(26,0.5) -4087072509293123892361.0 >>> eulernum(26) -4087072509293123892361.0 Evaluation is accurate for large `n` and small `z`:: >>> eulerpoly(100, 0.5) 2.29047999988194114177943e+108 >>> eulerpoly(1000, 10.5) 3.628120031122876847764566e+2070 >>> eulerpoly(10000, 10.5) 1.149364285543783412210773e+30688 """ spherharm = r""" Evaluates the spherical harmonic `Y_l^m(\theta,\phi)`, .. math :: Y_l^m(\theta,\phi) = \sqrt{\frac{2l+1}{4\pi}\frac{(l-m)!}{(l+m)!}} P_l^m(\cos \theta) e^{i m \phi} where `P_l^m` is an associated Legendre function (see :func:`~mpmath.legenp`). Here `\theta \in [0, \pi]` denotes the polar coordinate (ranging from the north pole to the south pole) and `\phi \in [0, 2 \pi]` denotes the azimuthal coordinate on a sphere. Care should be used since many different conventions for spherical coordinate variables are used. Usually spherical harmonics are considered for `l \in \mathbb{N}`, `m \in \mathbb{Z}`, `|m| \le l`. More generally, `l,m,\theta,\phi` are permitted to be complex numbers. .. note :: :func:`~mpmath.spherharm` returns a complex number, even if the value is purely real. **Plots** .. literalinclude :: /plots/spherharm40.py `Y_{4,0}`: .. image :: /plots/spherharm40.png `Y_{4,1}`: .. image :: /plots/spherharm41.png `Y_{4,2}`: .. image :: /plots/spherharm42.png `Y_{4,3}`: .. image :: /plots/spherharm43.png `Y_{4,4}`: .. image :: /plots/spherharm44.png **Examples** Some low-order spherical harmonics with reference values:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> theta = pi/4 >>> phi = pi/3 >>> spherharm(0,0,theta,phi); 0.5*sqrt(1/pi)*expj(0) (0.2820947917738781434740397 + 0.0j) (0.2820947917738781434740397 + 0.0j) >>> spherharm(1,-1,theta,phi); 0.5*sqrt(3/(2*pi))*expj(-phi)*sin(theta) (0.1221506279757299803965962 - 0.2115710938304086076055298j) (0.1221506279757299803965962 - 0.2115710938304086076055298j) >>> spherharm(1,0,theta,phi); 0.5*sqrt(3/pi)*cos(theta)*expj(0) (0.3454941494713354792652446 + 0.0j) (0.3454941494713354792652446 + 0.0j) >>> spherharm(1,1,theta,phi); -0.5*sqrt(3/(2*pi))*expj(phi)*sin(theta) (-0.1221506279757299803965962 - 0.2115710938304086076055298j) (-0.1221506279757299803965962 - 0.2115710938304086076055298j) With the normalization convention used, the spherical harmonics are orthonormal on the unit sphere:: >>> sphere = [0,pi], [0,2*pi] >>> dS = lambda t,p: fp.sin(t) # differential element >>> Y1 = lambda t,p: fp.spherharm(l1,m1,t,p) >>> Y2 = lambda t,p: fp.conj(fp.spherharm(l2,m2,t,p)) >>> l1 = l2 = 3; m1 = m2 = 2 >>> print(fp.quad(lambda t,p: Y1(t,p)*Y2(t,p)*dS(t,p), *sphere)) (1+0j) >>> m2 = 1 # m1 != m2 >>> print(fp.chop(fp.quad(lambda t,p: Y1(t,p)*Y2(t,p)*dS(t,p), *sphere))) 0.0 Evaluation is accurate for large orders:: >>> spherharm(1000,750,0.5,0.25) (3.776445785304252879026585e-102 - 5.82441278771834794493484e-102j) Evaluation works with complex parameter values:: >>> spherharm(1+j, 2j, 2+3j, -0.5j) (64.44922331113759992154992 + 1981.693919841408089681743j) """ scorergi = r""" Evaluates the Scorer function .. math :: \operatorname{Gi}(z) = \operatorname{Ai}(z) \int_0^z \operatorname{Bi}(t) dt + \operatorname{Bi}(z) \int_z^{\infty} \operatorname{Ai}(t) dt which gives a particular solution to the inhomogeneous Airy differential equation `f''(z) - z f(z) = 1/\pi`. Another particular solution is given by the Scorer Hi-function (:func:`~mpmath.scorerhi`). The two functions are related as `\operatorname{Gi}(z) + \operatorname{Hi}(z) = \operatorname{Bi}(z)`. **Plots** .. literalinclude :: /plots/gi.py .. image :: /plots/gi.png .. literalinclude :: /plots/gi_c.py .. image :: /plots/gi_c.png **Examples** Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> scorergi(0); 1/(power(3,'7/6')*gamma('2/3')) 0.2049755424820002450503075 0.2049755424820002450503075 >>> diff(scorergi, 0); 1/(power(3,'5/6')*gamma('1/3')) 0.1494294524512754526382746 0.1494294524512754526382746 >>> scorergi(+inf); scorergi(-inf) 0.0 0.0 >>> scorergi(1) 0.2352184398104379375986902 >>> scorergi(-1) -0.1166722172960152826494198 Evaluation for large arguments:: >>> scorergi(10) 0.03189600510067958798062034 >>> scorergi(100) 0.003183105228162961476590531 >>> scorergi(1000000) 0.0000003183098861837906721743873 >>> 1/(pi*1000000) 0.0000003183098861837906715377675 >>> scorergi(-1000) -0.08358288400262780392338014 >>> scorergi(-100000) 0.02886866118619660226809581 >>> scorergi(50+10j) (0.0061214102799778578790984 - 0.001224335676457532180747917j) >>> scorergi(-50-10j) (5.236047850352252236372551e+29 - 3.08254224233701381482228e+29j) >>> scorergi(100000j) (-8.806659285336231052679025e+6474077 + 8.684731303500835514850962e+6474077j) Verifying the connection between Gi and Hi:: >>> z = 0.25 >>> scorergi(z) + scorerhi(z) 0.7287469039362150078694543 >>> airybi(z) 0.7287469039362150078694543 Verifying the differential equation:: >>> for z in [-3.4, 0, 2.5, 1+2j]: ... chop(diff(scorergi,z,2) - z*scorergi(z)) ... -0.3183098861837906715377675 -0.3183098861837906715377675 -0.3183098861837906715377675 -0.3183098861837906715377675 Verifying the integral representation:: >>> z = 0.5 >>> scorergi(z) 0.2447210432765581976910539 >>> Ai,Bi = airyai,airybi >>> Bi(z)*(Ai(inf,-1)-Ai(z,-1)) + Ai(z)*(Bi(z,-1)-Bi(0,-1)) 0.2447210432765581976910539 **References** 1. [DLMF]_ section 9.12: Scorer Functions """ scorerhi = r""" Evaluates the second Scorer function .. math :: \operatorname{Hi}(z) = \operatorname{Bi}(z) \int_{-\infty}^z \operatorname{Ai}(t) dt - \operatorname{Ai}(z) \int_{-\infty}^z \operatorname{Bi}(t) dt which gives a particular solution to the inhomogeneous Airy differential equation `f''(z) - z f(z) = 1/\pi`. See also :func:`~mpmath.scorergi`. **Plots** .. literalinclude :: /plots/hi.py .. image :: /plots/hi.png .. literalinclude :: /plots/hi_c.py .. image :: /plots/hi_c.png **Examples** Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> scorerhi(0); 2/(power(3,'7/6')*gamma('2/3')) 0.4099510849640004901006149 0.4099510849640004901006149 >>> diff(scorerhi,0); 2/(power(3,'5/6')*gamma('1/3')) 0.2988589049025509052765491 0.2988589049025509052765491 >>> scorerhi(+inf); scorerhi(-inf) +inf 0.0 >>> scorerhi(1) 0.9722051551424333218376886 >>> scorerhi(-1) 0.2206696067929598945381098 Evaluation for large arguments:: >>> scorerhi(10) 455641153.5163291358991077 >>> scorerhi(100) 6.041223996670201399005265e+288 >>> scorerhi(1000000) 7.138269638197858094311122e+289529652 >>> scorerhi(-10) 0.0317685352825022727415011 >>> scorerhi(-100) 0.003183092495767499864680483 >>> scorerhi(100j) (-6.366197716545672122983857e-9 + 0.003183098861710582761688475j) >>> scorerhi(50+50j) (-5.322076267321435669290334e+63 + 1.478450291165243789749427e+65j) >>> scorerhi(-1000-1000j) (0.0001591549432510502796565538 - 0.000159154943091895334973109j) Verifying the differential equation:: >>> for z in [-3.4, 0, 2, 1+2j]: ... chop(diff(scorerhi,z,2) - z*scorerhi(z)) ... 0.3183098861837906715377675 0.3183098861837906715377675 0.3183098861837906715377675 0.3183098861837906715377675 Verifying the integral representation:: >>> z = 0.5 >>> scorerhi(z) 0.6095559998265972956089949 >>> Ai,Bi = airyai,airybi >>> Bi(z)*(Ai(z,-1)-Ai(-inf,-1)) - Ai(z)*(Bi(z,-1)-Bi(-inf,-1)) 0.6095559998265972956089949 """ stirling1 = r""" Gives the Stirling number of the first kind `s(n,k)`, defined by .. math :: x(x-1)(x-2)\cdots(x-n+1) = \sum_{k=0}^n s(n,k) x^k. The value is computed using an integer recurrence. The implementation is not optimized for approximating large values quickly. **Examples** Comparing with the generating function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> taylor(lambda x: ff(x, 5), 0, 5) [0.0, 24.0, -50.0, 35.0, -10.0, 1.0] >>> [stirling1(5, k) for k in range(6)] [0.0, 24.0, -50.0, 35.0, -10.0, 1.0] Recurrence relation:: >>> n, k = 5, 3 >>> stirling1(n+1,k) + n*stirling1(n,k) - stirling1(n,k-1) 0.0 The matrices of Stirling numbers of first and second kind are inverses of each other:: >>> A = matrix(5, 5); B = matrix(5, 5) >>> for n in range(5): ... for k in range(5): ... A[n,k] = stirling1(n,k) ... B[n,k] = stirling2(n,k) ... >>> A * B [1.0 0.0 0.0 0.0 0.0] [0.0 1.0 0.0 0.0 0.0] [0.0 0.0 1.0 0.0 0.0] [0.0 0.0 0.0 1.0 0.0] [0.0 0.0 0.0 0.0 1.0] Pass ``exact=True`` to obtain exact values of Stirling numbers as integers:: >>> stirling1(42, 5) -2.864498971768501633736628e+50 >>> print stirling1(42, 5, exact=True) -286449897176850163373662803014001546235808317440000 """ stirling2 = r""" Gives the Stirling number of the second kind `S(n,k)`, defined by .. math :: x^n = \sum_{k=0}^n S(n,k) x(x-1)(x-2)\cdots(x-k+1) The value is computed using integer arithmetic to evaluate a power sum. The implementation is not optimized for approximating large values quickly. **Examples** Comparing with the generating function:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> taylor(lambda x: sum(stirling2(5,k) * ff(x,k) for k in range(6)), 0, 5) [0.0, 0.0, 0.0, 0.0, 0.0, 1.0] Recurrence relation:: >>> n, k = 5, 3 >>> stirling2(n+1,k) - k*stirling2(n,k) - stirling2(n,k-1) 0.0 Pass ``exact=True`` to obtain exact values of Stirling numbers as integers:: >>> stirling2(52, 10) 2.641822121003543906807485e+45 >>> print stirling2(52, 10, exact=True) 2641822121003543906807485307053638921722527655 """ mpmath-1.0.0/mpmath/functions/000077500000000000000000000000001316273626600163105ustar00rootroot00000000000000mpmath-1.0.0/mpmath/functions/__init__.py000066400000000000000000000004641316273626600204250ustar00rootroot00000000000000from . import functions # Hack to update methods from . import factorials from . import hypergeometric from . import expintegrals from . import bessel from . import orthogonal from . import theta from . import elliptic from . import zeta from . import rszeta from . import zetazeros from . import qfunctions mpmath-1.0.0/mpmath/functions/bessel.py000066400000000000000000001120621316273626600201410ustar00rootroot00000000000000from .functions import defun, defun_wrapped @defun def j0(ctx, x): """Computes the Bessel function `J_0(x)`. See :func:`~mpmath.besselj`.""" return ctx.besselj(0, x) @defun def j1(ctx, x): """Computes the Bessel function `J_1(x)`. See :func:`~mpmath.besselj`.""" return ctx.besselj(1, x) @defun def besselj(ctx, n, z, derivative=0, **kwargs): if type(n) is int: n_isint = True else: n = ctx.convert(n) n_isint = ctx.isint(n) if n_isint: n = int(ctx._re(n)) if n_isint and n < 0: return (-1)**n * ctx.besselj(-n, z, derivative, **kwargs) z = ctx.convert(z) M = ctx.mag(z) if derivative: d = ctx.convert(derivative) # TODO: the integer special-casing shouldn't be necessary. # However, the hypergeometric series gets inaccurate for large d # because of inaccurate pole cancellation at a pole far from # zero (needs to be fixed in hypercomb or hypsum) if ctx.isint(d) and d >= 0: d = int(d) orig = ctx.prec try: ctx.prec += 15 v = ctx.fsum((-1)**k * ctx.binomial(d,k) * ctx.besselj(2*k+n-d,z) for k in range(d+1)) finally: ctx.prec = orig v *= ctx.mpf(2)**(-d) else: def h(n,d): r = ctx.fmul(ctx.fmul(z, z, prec=ctx.prec+M), -0.25, exact=True) B = [0.5*(n-d+1), 0.5*(n-d+2)] T = [([2,ctx.pi,z],[d-2*n,0.5,n-d],[],B,[(n+1)*0.5,(n+2)*0.5],B+[n+1],r)] return T v = ctx.hypercomb(h, [n,d], **kwargs) else: # Fast case: J_n(x), n int, appropriate magnitude for fixed-point calculation if (not derivative) and n_isint and abs(M) < 10 and abs(n) < 20: try: return ctx._besselj(n, z) except NotImplementedError: pass if not z: if not n: v = ctx.one + n+z elif ctx.re(n) > 0: v = n*z else: v = ctx.inf + z + n else: #v = 0 orig = ctx.prec try: # XXX: workaround for accuracy in low level hypergeometric series # when alternating, large arguments ctx.prec += min(3*abs(M), ctx.prec) w = ctx.fmul(z, 0.5, exact=True) def h(n): r = ctx.fneg(ctx.fmul(w, w, prec=max(0,ctx.prec+M)), exact=True) return [([w], [n], [], [n+1], [], [n+1], r)] v = ctx.hypercomb(h, [n], **kwargs) finally: ctx.prec = orig v = +v return v @defun def besseli(ctx, n, z, derivative=0, **kwargs): n = ctx.convert(n) z = ctx.convert(z) if not z: if derivative: raise ValueError if not n: # I(0,0) = 1 return 1+n+z if ctx.isint(n): return 0*(n+z) r = ctx.re(n) if r == 0: return ctx.nan*(n+z) elif r > 0: return 0*(n+z) else: return ctx.inf+(n+z) M = ctx.mag(z) if derivative: d = ctx.convert(derivative) def h(n,d): r = ctx.fmul(ctx.fmul(z, z, prec=ctx.prec+M), 0.25, exact=True) B = [0.5*(n-d+1), 0.5*(n-d+2), n+1] T = [([2,ctx.pi,z],[d-2*n,0.5,n-d],[n+1],B,[(n+1)*0.5,(n+2)*0.5],B,r)] return T v = ctx.hypercomb(h, [n,d], **kwargs) else: def h(n): w = ctx.fmul(z, 0.5, exact=True) r = ctx.fmul(w, w, prec=max(0,ctx.prec+M)) return [([w], [n], [], [n+1], [], [n+1], r)] v = ctx.hypercomb(h, [n], **kwargs) return v @defun_wrapped def bessely(ctx, n, z, derivative=0, **kwargs): if not z: if derivative: # Not implemented raise ValueError if not n: # ~ log(z/2) return -ctx.inf + (n+z) if ctx.im(n): return ctx.nan * (n+z) r = ctx.re(n) q = n+0.5 if ctx.isint(q): if n > 0: return -ctx.inf + (n+z) else: return 0 * (n+z) if r < 0 and int(ctx.floor(q)) % 2: return ctx.inf + (n+z) else: return ctx.ninf + (n+z) # XXX: use hypercomb ctx.prec += 10 m, d = ctx.nint_distance(n) if d < -ctx.prec: h = +ctx.eps ctx.prec *= 2 n += h elif d < 0: ctx.prec -= d # TODO: avoid cancellation for imaginary arguments cos, sin = ctx.cospi_sinpi(n) return (ctx.besselj(n,z,derivative,**kwargs)*cos - \ ctx.besselj(-n,z,derivative,**kwargs))/sin @defun_wrapped def besselk(ctx, n, z, **kwargs): if not z: return ctx.inf M = ctx.mag(z) if M < 1: # Represent as limit definition def h(n): r = (z/2)**2 T1 = [z, 2], [-n, n-1], [n], [], [], [1-n], r T2 = [z, 2], [n, -n-1], [-n], [], [], [1+n], r return T1, T2 # We could use the limit definition always, but it leads # to very bad cancellation (of exponentially large terms) # for large real z # Instead represent in terms of 2F0 else: ctx.prec += M def h(n): return [([ctx.pi/2, z, ctx.exp(-z)], [0.5,-0.5,1], [], [], \ [n+0.5, 0.5-n], [], -1/(2*z))] return ctx.hypercomb(h, [n], **kwargs) @defun_wrapped def hankel1(ctx,n,x,**kwargs): return ctx.besselj(n,x,**kwargs) + ctx.j*ctx.bessely(n,x,**kwargs) @defun_wrapped def hankel2(ctx,n,x,**kwargs): return ctx.besselj(n,x,**kwargs) - ctx.j*ctx.bessely(n,x,**kwargs) @defun_wrapped def whitm(ctx,k,m,z,**kwargs): if z == 0: # M(k,m,z) = 0^(1/2+m) if ctx.re(m) > -0.5: return z elif ctx.re(m) < -0.5: return ctx.inf + z else: return ctx.nan * z x = ctx.fmul(-0.5, z, exact=True) y = 0.5+m return ctx.exp(x) * z**y * ctx.hyp1f1(y-k, 1+2*m, z, **kwargs) @defun_wrapped def whitw(ctx,k,m,z,**kwargs): if z == 0: g = abs(ctx.re(m)) if g < 0.5: return z elif g > 0.5: return ctx.inf + z else: return ctx.nan * z x = ctx.fmul(-0.5, z, exact=True) y = 0.5+m return ctx.exp(x) * z**y * ctx.hyperu(y-k, 1+2*m, z, **kwargs) @defun def hyperu(ctx, a, b, z, **kwargs): a, atype = ctx._convert_param(a) b, btype = ctx._convert_param(b) z = ctx.convert(z) if not z: if ctx.re(b) <= 1: return ctx.gammaprod([1-b],[a-b+1]) else: return ctx.inf + z bb = 1+a-b bb, bbtype = ctx._convert_param(bb) try: orig = ctx.prec try: ctx.prec += 10 v = ctx.hypsum(2, 0, (atype, bbtype), [a, bb], -1/z, maxterms=ctx.prec) return v / z**a finally: ctx.prec = orig except ctx.NoConvergence: pass def h(a,b): w = ctx.sinpi(b) T1 = ([ctx.pi,w],[1,-1],[],[a-b+1,b],[a],[b],z) T2 = ([-ctx.pi,w,z],[1,-1,1-b],[],[a,2-b],[a-b+1],[2-b],z) return T1, T2 return ctx.hypercomb(h, [a,b], **kwargs) @defun def struveh(ctx,n,z, **kwargs): n = ctx.convert(n) z = ctx.convert(z) # http://functions.wolfram.com/Bessel-TypeFunctions/StruveH/26/01/02/ def h(n): return [([z/2, 0.5*ctx.sqrt(ctx.pi)], [n+1, -1], [], [n+1.5], [1], [1.5, n+1.5], -(z/2)**2)] return ctx.hypercomb(h, [n], **kwargs) @defun def struvel(ctx,n,z, **kwargs): n = ctx.convert(n) z = ctx.convert(z) # http://functions.wolfram.com/Bessel-TypeFunctions/StruveL/26/01/02/ def h(n): return [([z/2, 0.5*ctx.sqrt(ctx.pi)], [n+1, -1], [], [n+1.5], [1], [1.5, n+1.5], (z/2)**2)] return ctx.hypercomb(h, [n], **kwargs) def _anger(ctx,which,v,z,**kwargs): v = ctx._convert_param(v)[0] z = ctx.convert(z) def h(v): b = ctx.mpq_1_2 u = v*b m = b*3 a1,a2,b1,b2 = m-u, m+u, 1-u, 1+u c, s = ctx.cospi_sinpi(u) if which == 0: A, B = [b*z, s], [c] if which == 1: A, B = [b*z, -c], [s] w = ctx.square_exp_arg(z, mult=-0.25) T1 = A, [1, 1], [], [a1,a2], [1], [a1,a2], w T2 = B, [1], [], [b1,b2], [1], [b1,b2], w return T1, T2 return ctx.hypercomb(h, [v], **kwargs) @defun def angerj(ctx, v, z, **kwargs): return _anger(ctx, 0, v, z, **kwargs) @defun def webere(ctx, v, z, **kwargs): return _anger(ctx, 1, v, z, **kwargs) @defun def lommels1(ctx, u, v, z, **kwargs): u = ctx._convert_param(u)[0] v = ctx._convert_param(v)[0] z = ctx.convert(z) def h(u,v): b = ctx.mpq_1_2 w = ctx.square_exp_arg(z, mult=-0.25) return ([u-v+1, u+v+1, z], [-1, -1, u+1], [], [], [1], \ [b*(u-v+3),b*(u+v+3)], w), return ctx.hypercomb(h, [u,v], **kwargs) @defun def lommels2(ctx, u, v, z, **kwargs): u = ctx._convert_param(u)[0] v = ctx._convert_param(v)[0] z = ctx.convert(z) # Asymptotic expansion (GR p. 947) -- need to be careful # not to use for small arguments # def h(u,v): # b = ctx.mpq_1_2 # w = -(z/2)**(-2) # return ([z], [u-1], [], [], [b*(1-u+v)], [b*(1-u-v)], w), def h(u,v): b = ctx.mpq_1_2 w = ctx.square_exp_arg(z, mult=-0.25) T1 = [u-v+1, u+v+1, z], [-1, -1, u+1], [], [], [1], [b*(u-v+3),b*(u+v+3)], w T2 = [2, z], [u+v-1, -v], [v, b*(u+v+1)], [b*(v-u+1)], [], [1-v], w T3 = [2, z], [u-v-1, v], [-v, b*(u-v+1)], [b*(1-u-v)], [], [1+v], w #c1 = ctx.cospi((u-v)*b) #c2 = ctx.cospi((u+v)*b) #s = ctx.sinpi(v) #r1 = (u-v+1)*b #r2 = (u+v+1)*b #T2 = [c1, s, z, 2], [1, -1, -v, v], [], [-v+1], [], [-v+1], w #T3 = [-c2, s, z, 2], [1, -1, v, -v], [], [v+1], [], [v+1], w #T2 = [c1, s, z, 2], [1, -1, -v, v+u-1], [r1, r2], [-v+1], [], [-v+1], w #T3 = [-c2, s, z, 2], [1, -1, v, -v+u-1], [r1, r2], [v+1], [], [v+1], w return T1, T2, T3 return ctx.hypercomb(h, [u,v], **kwargs) @defun def ber(ctx, n, z, **kwargs): n = ctx.convert(n) z = ctx.convert(z) # http://functions.wolfram.com/Bessel-TypeFunctions/KelvinBer2/26/01/02/0001/ def h(n): r = -(z/4)**4 cos, sin = ctx.cospi_sinpi(-0.75*n) T1 = [cos, z/2], [1, n], [], [n+1], [], [0.5, 0.5*(n+1), 0.5*n+1], r T2 = [sin, z/2], [1, n+2], [], [n+2], [], [1.5, 0.5*(n+3), 0.5*n+1], r return T1, T2 return ctx.hypercomb(h, [n], **kwargs) @defun def bei(ctx, n, z, **kwargs): n = ctx.convert(n) z = ctx.convert(z) # http://functions.wolfram.com/Bessel-TypeFunctions/KelvinBei2/26/01/02/0001/ def h(n): r = -(z/4)**4 cos, sin = ctx.cospi_sinpi(0.75*n) T1 = [cos, z/2], [1, n+2], [], [n+2], [], [1.5, 0.5*(n+3), 0.5*n+1], r T2 = [sin, z/2], [1, n], [], [n+1], [], [0.5, 0.5*(n+1), 0.5*n+1], r return T1, T2 return ctx.hypercomb(h, [n], **kwargs) @defun def ker(ctx, n, z, **kwargs): n = ctx.convert(n) z = ctx.convert(z) # http://functions.wolfram.com/Bessel-TypeFunctions/KelvinKer2/26/01/02/0001/ def h(n): r = -(z/4)**4 cos1, sin1 = ctx.cospi_sinpi(0.25*n) cos2, sin2 = ctx.cospi_sinpi(0.75*n) T1 = [2, z, 4*cos1], [-n-3, n, 1], [-n], [], [], [0.5, 0.5*(1+n), 0.5*(n+2)], r T2 = [2, z, -sin1], [-n-3, 2+n, 1], [-n-1], [], [], [1.5, 0.5*(3+n), 0.5*(n+2)], r T3 = [2, z, 4*cos2], [n-3, -n, 1], [n], [], [], [0.5, 0.5*(1-n), 1-0.5*n], r T4 = [2, z, -sin2], [n-3, 2-n, 1], [n-1], [], [], [1.5, 0.5*(3-n), 1-0.5*n], r return T1, T2, T3, T4 return ctx.hypercomb(h, [n], **kwargs) @defun def kei(ctx, n, z, **kwargs): n = ctx.convert(n) z = ctx.convert(z) # http://functions.wolfram.com/Bessel-TypeFunctions/KelvinKei2/26/01/02/0001/ def h(n): r = -(z/4)**4 cos1, sin1 = ctx.cospi_sinpi(0.75*n) cos2, sin2 = ctx.cospi_sinpi(0.25*n) T1 = [-cos1, 2, z], [1, n-3, 2-n], [n-1], [], [], [1.5, 0.5*(3-n), 1-0.5*n], r T2 = [-sin1, 2, z], [1, n-1, -n], [n], [], [], [0.5, 0.5*(1-n), 1-0.5*n], r T3 = [-sin2, 2, z], [1, -n-1, n], [-n], [], [], [0.5, 0.5*(n+1), 0.5*(n+2)], r T4 = [-cos2, 2, z], [1, -n-3, n+2], [-n-1], [], [], [1.5, 0.5*(n+3), 0.5*(n+2)], r return T1, T2, T3, T4 return ctx.hypercomb(h, [n], **kwargs) # TODO: do this more generically? def c_memo(f): name = f.__name__ def f_wrapped(ctx): cache = ctx._misc_const_cache prec = ctx.prec p,v = cache.get(name, (-1,0)) if p >= prec: return +v else: cache[name] = (prec, f(ctx)) return cache[name][1] return f_wrapped @c_memo def _airyai_C1(ctx): return 1 / (ctx.cbrt(9) * ctx.gamma(ctx.mpf(2)/3)) @c_memo def _airyai_C2(ctx): return -1 / (ctx.cbrt(3) * ctx.gamma(ctx.mpf(1)/3)) @c_memo def _airybi_C1(ctx): return 1 / (ctx.nthroot(3,6) * ctx.gamma(ctx.mpf(2)/3)) @c_memo def _airybi_C2(ctx): return ctx.nthroot(3,6) / ctx.gamma(ctx.mpf(1)/3) def _airybi_n2_inf(ctx): prec = ctx.prec try: v = ctx.power(3,'2/3')*ctx.gamma('2/3')/(2*ctx.pi) finally: ctx.prec = prec return +v # Derivatives at z = 0 # TODO: could be expressed more elegantly using triple factorials def _airyderiv_0(ctx, z, n, ntype, which): if ntype == 'Z': if n < 0: return z r = ctx.mpq_1_3 prec = ctx.prec try: ctx.prec += 10 v = ctx.gamma((n+1)*r) * ctx.power(3,n*r) / ctx.pi if which == 0: v *= ctx.sinpi(2*(n+1)*r) v /= ctx.power(3,'2/3') else: v *= abs(ctx.sinpi(2*(n+1)*r)) v /= ctx.power(3,'1/6') finally: ctx.prec = prec return +v + z else: # singular (does the limit exist?) raise NotImplementedError @defun def airyai(ctx, z, derivative=0, **kwargs): z = ctx.convert(z) if derivative: n, ntype = ctx._convert_param(derivative) else: n = 0 # Values at infinities if not ctx.isnormal(z) and z: if n and ntype == 'Z': if n == -1: if z == ctx.inf: return ctx.mpf(1)/3 + 1/z if z == ctx.ninf: return ctx.mpf(-2)/3 + 1/z if n < -1: if z == ctx.inf: return z if z == ctx.ninf: return (-1)**n * (-z) if (not n) and z == ctx.inf or z == ctx.ninf: return 1/z # TODO: limits raise ValueError("essential singularity of Ai(z)") # Account for exponential scaling if z: extraprec = max(0, int(1.5*ctx.mag(z))) else: extraprec = 0 if n: if n == 1: def h(): # http://functions.wolfram.com/03.07.06.0005.01 if ctx._re(z) > 4: ctx.prec += extraprec w = z**1.5; r = -0.75/w; u = -2*w/3 ctx.prec -= extraprec C = -ctx.exp(u)/(2*ctx.sqrt(ctx.pi))*ctx.nthroot(z,4) return ([C],[1],[],[],[(-1,6),(7,6)],[],r), # http://functions.wolfram.com/03.07.26.0001.01 else: ctx.prec += extraprec w = z**3 / 9 ctx.prec -= extraprec C1 = _airyai_C1(ctx) * 0.5 C2 = _airyai_C2(ctx) T1 = [C1,z],[1,2],[],[],[],[ctx.mpq_5_3],w T2 = [C2],[1],[],[],[],[ctx.mpq_1_3],w return T1, T2 return ctx.hypercomb(h, [], **kwargs) else: if z == 0: return _airyderiv_0(ctx, z, n, ntype, 0) # http://functions.wolfram.com/03.05.20.0004.01 def h(n): ctx.prec += extraprec w = z**3/9 ctx.prec -= extraprec q13,q23,q43 = ctx.mpq_1_3, ctx.mpq_2_3, ctx.mpq_4_3 a1=q13; a2=1; b1=(1-n)*q13; b2=(2-n)*q13; b3=1-n*q13 T1 = [3, z], [n-q23, -n], [a1], [b1,b2,b3], \ [a1,a2], [b1,b2,b3], w a1=q23; b1=(2-n)*q13; b2=1-n*q13; b3=(4-n)*q13 T2 = [3, z, -z], [n-q43, -n, 1], [a1], [b1,b2,b3], \ [a1,a2], [b1,b2,b3], w return T1, T2 v = ctx.hypercomb(h, [n], **kwargs) if ctx._is_real_type(z) and ctx.isint(n): v = ctx._re(v) return v else: def h(): if ctx._re(z) > 4: # We could use 1F1, but it results in huge cancellation; # the following expansion is better. # TODO: asymptotic series for derivatives ctx.prec += extraprec w = z**1.5; r = -0.75/w; u = -2*w/3 ctx.prec -= extraprec C = ctx.exp(u)/(2*ctx.sqrt(ctx.pi)*ctx.nthroot(z,4)) return ([C],[1],[],[],[(1,6),(5,6)],[],r), else: ctx.prec += extraprec w = z**3 / 9 ctx.prec -= extraprec C1 = _airyai_C1(ctx) C2 = _airyai_C2(ctx) T1 = [C1],[1],[],[],[],[ctx.mpq_2_3],w T2 = [z*C2],[1],[],[],[],[ctx.mpq_4_3],w return T1, T2 return ctx.hypercomb(h, [], **kwargs) @defun def airybi(ctx, z, derivative=0, **kwargs): z = ctx.convert(z) if derivative: n, ntype = ctx._convert_param(derivative) else: n = 0 # Values at infinities if not ctx.isnormal(z) and z: if n and ntype == 'Z': if z == ctx.inf: return z if z == ctx.ninf: if n == -1: return 1/z if n == -2: return _airybi_n2_inf(ctx) if n < -2: return (-1)**n * (-z) if not n: if z == ctx.inf: return z if z == ctx.ninf: return 1/z # TODO: limits raise ValueError("essential singularity of Bi(z)") if z: extraprec = max(0, int(1.5*ctx.mag(z))) else: extraprec = 0 if n: if n == 1: # http://functions.wolfram.com/03.08.26.0001.01 def h(): ctx.prec += extraprec w = z**3 / 9 ctx.prec -= extraprec C1 = _airybi_C1(ctx)*0.5 C2 = _airybi_C2(ctx) T1 = [C1,z],[1,2],[],[],[],[ctx.mpq_5_3],w T2 = [C2],[1],[],[],[],[ctx.mpq_1_3],w return T1, T2 return ctx.hypercomb(h, [], **kwargs) else: if z == 0: return _airyderiv_0(ctx, z, n, ntype, 1) def h(n): ctx.prec += extraprec w = z**3/9 ctx.prec -= extraprec q13,q23,q43 = ctx.mpq_1_3, ctx.mpq_2_3, ctx.mpq_4_3 q16 = ctx.mpq_1_6 q56 = ctx.mpq_5_6 a1=q13; a2=1; b1=(1-n)*q13; b2=(2-n)*q13; b3=1-n*q13 T1 = [3, z], [n-q16, -n], [a1], [b1,b2,b3], \ [a1,a2], [b1,b2,b3], w a1=q23; b1=(2-n)*q13; b2=1-n*q13; b3=(4-n)*q13 T2 = [3, z], [n-q56, 1-n], [a1], [b1,b2,b3], \ [a1,a2], [b1,b2,b3], w return T1, T2 v = ctx.hypercomb(h, [n], **kwargs) if ctx._is_real_type(z) and ctx.isint(n): v = ctx._re(v) return v else: def h(): ctx.prec += extraprec w = z**3 / 9 ctx.prec -= extraprec C1 = _airybi_C1(ctx) C2 = _airybi_C2(ctx) T1 = [C1],[1],[],[],[],[ctx.mpq_2_3],w T2 = [z*C2],[1],[],[],[],[ctx.mpq_4_3],w return T1, T2 return ctx.hypercomb(h, [], **kwargs) def _airy_zero(ctx, which, k, derivative, complex=False): # Asymptotic formulas are given in DLMF section 9.9 def U(t): return t**(2/3.)*(1-7/(t**2*48)) def T(t): return t**(2/3.)*(1+5/(t**2*48)) k = int(k) if k < 1: raise ValueError("k cannot be less than 1") if not derivative in (0,1): raise ValueError("Derivative should lie between 0 and 1") if which == 0: if derivative: return ctx.findroot(lambda z: ctx.airyai(z,1), -U(3*ctx.pi*(4*k-3)/8)) return ctx.findroot(ctx.airyai, -T(3*ctx.pi*(4*k-1)/8)) if which == 1 and complex == False: if derivative: return ctx.findroot(lambda z: ctx.airybi(z,1), -U(3*ctx.pi*(4*k-1)/8)) return ctx.findroot(ctx.airybi, -T(3*ctx.pi*(4*k-3)/8)) if which == 1 and complex == True: if derivative: t = 3*ctx.pi*(4*k-3)/8 + 0.75j*ctx.ln2 s = ctx.expjpi(ctx.mpf(1)/3) * T(t) return ctx.findroot(lambda z: ctx.airybi(z,1), s) t = 3*ctx.pi*(4*k-1)/8 + 0.75j*ctx.ln2 s = ctx.expjpi(ctx.mpf(1)/3) * U(t) return ctx.findroot(ctx.airybi, s) @defun def airyaizero(ctx, k, derivative=0): return _airy_zero(ctx, 0, k, derivative, False) @defun def airybizero(ctx, k, derivative=0, complex=False): return _airy_zero(ctx, 1, k, derivative, complex) def _scorer(ctx, z, which, kwargs): z = ctx.convert(z) if ctx.isinf(z): if z == ctx.inf: if which == 0: return 1/z if which == 1: return z if z == ctx.ninf: return 1/z raise ValueError("essential singularity") if z: extraprec = max(0, int(1.5*ctx.mag(z))) else: extraprec = 0 if kwargs.get('derivative'): raise NotImplementedError # Direct asymptotic expansions, to avoid # exponentially large cancellation try: if ctx.mag(z) > 3: if which == 0 and abs(ctx.arg(z)) < ctx.pi/3 * 0.999: def h(): return (([ctx.pi,z],[-1,-1],[],[],[(1,3),(2,3),1],[],9/z**3),) return ctx.hypercomb(h, [], maxterms=ctx.prec, force_series=True) if which == 1 and abs(ctx.arg(-z)) < 2*ctx.pi/3 * 0.999: def h(): return (([-ctx.pi,z],[-1,-1],[],[],[(1,3),(2,3),1],[],9/z**3),) return ctx.hypercomb(h, [], maxterms=ctx.prec, force_series=True) except ctx.NoConvergence: pass def h(): A = ctx.airybi(z, **kwargs)/3 B = -2*ctx.pi if which == 1: A *= 2 B *= -1 ctx.prec += extraprec w = z**3/9 ctx.prec -= extraprec T1 = [A], [1], [], [], [], [], 0 T2 = [B,z], [-1,2], [], [], [1], [ctx.mpq_4_3,ctx.mpq_5_3], w return T1, T2 return ctx.hypercomb(h, [], **kwargs) @defun def scorergi(ctx, z, **kwargs): return _scorer(ctx, z, 0, kwargs) @defun def scorerhi(ctx, z, **kwargs): return _scorer(ctx, z, 1, kwargs) @defun_wrapped def coulombc(ctx, l, eta, _cache={}): if (l, eta) in _cache and _cache[l,eta][0] >= ctx.prec: return +_cache[l,eta][1] G3 = ctx.loggamma(2*l+2) G1 = ctx.loggamma(1+l+ctx.j*eta) G2 = ctx.loggamma(1+l-ctx.j*eta) v = 2**l * ctx.exp((-ctx.pi*eta+G1+G2)/2 - G3) if not (ctx.im(l) or ctx.im(eta)): v = ctx.re(v) _cache[l,eta] = (ctx.prec, v) return v @defun_wrapped def coulombf(ctx, l, eta, z, w=1, chop=True, **kwargs): # Regular Coulomb wave function # Note: w can be either 1 or -1; the other may be better in some cases # TODO: check that chop=True chops when and only when it should #ctx.prec += 10 def h(l, eta): try: jw = ctx.j*w jwz = ctx.fmul(jw, z, exact=True) jwz2 = ctx.fmul(jwz, -2, exact=True) C = ctx.coulombc(l, eta) T1 = [C, z, ctx.exp(jwz)], [1, l+1, 1], [], [], [1+l+jw*eta], \ [2*l+2], jwz2 except ValueError: T1 = [0], [-1], [], [], [], [], 0 return (T1,) v = ctx.hypercomb(h, [l,eta], **kwargs) if chop and (not ctx.im(l)) and (not ctx.im(eta)) and (not ctx.im(z)) and \ (ctx.re(z) >= 0): v = ctx.re(v) return v @defun_wrapped def _coulomb_chi(ctx, l, eta, _cache={}): if (l, eta) in _cache and _cache[l,eta][0] >= ctx.prec: return _cache[l,eta][1] def terms(): l2 = -l-1 jeta = ctx.j*eta return [ctx.loggamma(1+l+jeta) * (-0.5j), ctx.loggamma(1+l-jeta) * (0.5j), ctx.loggamma(1+l2+jeta) * (0.5j), ctx.loggamma(1+l2-jeta) * (-0.5j), -(l+0.5)*ctx.pi] v = ctx.sum_accurately(terms, 1) _cache[l,eta] = (ctx.prec, v) return v @defun_wrapped def coulombg(ctx, l, eta, z, w=1, chop=True, **kwargs): # Irregular Coulomb wave function # Note: w can be either 1 or -1; the other may be better in some cases # TODO: check that chop=True chops when and only when it should if not ctx._im(l): l = ctx._re(l) # XXX: for isint def h(l, eta): # Force perturbation for integers and half-integers if ctx.isint(l*2): T1 = [0], [-1], [], [], [], [], 0 return (T1,) l2 = -l-1 try: chi = ctx._coulomb_chi(l, eta) jw = ctx.j*w s = ctx.sin(chi); c = ctx.cos(chi) C1 = ctx.coulombc(l,eta) C2 = ctx.coulombc(l2,eta) u = ctx.exp(jw*z) x = -2*jw*z T1 = [s, C1, z, u, c], [-1, 1, l+1, 1, 1], [], [], \ [1+l+jw*eta], [2*l+2], x T2 = [-s, C2, z, u], [-1, 1, l2+1, 1], [], [], \ [1+l2+jw*eta], [2*l2+2], x return T1, T2 except ValueError: T1 = [0], [-1], [], [], [], [], 0 return (T1,) v = ctx.hypercomb(h, [l,eta], **kwargs) if chop and (not ctx._im(l)) and (not ctx._im(eta)) and (not ctx._im(z)) and \ (ctx._re(z) >= 0): v = ctx._re(v) return v def mcmahon(ctx,kind,prime,v,m): """ Computes an estimate for the location of the Bessel function zero j_{v,m}, y_{v,m}, j'_{v,m} or y'_{v,m} using McMahon's asymptotic expansion (Abramowitz & Stegun 9.5.12-13, DLMF 20.21(vi)). Returns (r,err) where r is the estimated location of the root and err is a positive number estimating the error of the asymptotic expansion. """ u = 4*v**2 if kind == 1 and not prime: b = (4*m+2*v-1)*ctx.pi/4 if kind == 2 and not prime: b = (4*m+2*v-3)*ctx.pi/4 if kind == 1 and prime: b = (4*m+2*v-3)*ctx.pi/4 if kind == 2 and prime: b = (4*m+2*v-1)*ctx.pi/4 if not prime: s1 = b s2 = -(u-1)/(8*b) s3 = -4*(u-1)*(7*u-31)/(3*(8*b)**3) s4 = -32*(u-1)*(83*u**2-982*u+3779)/(15*(8*b)**5) s5 = -64*(u-1)*(6949*u**3-153855*u**2+1585743*u-6277237)/(105*(8*b)**7) if prime: s1 = b s2 = -(u+3)/(8*b) s3 = -4*(7*u**2+82*u-9)/(3*(8*b)**3) s4 = -32*(83*u**3+2075*u**2-3039*u+3537)/(15*(8*b)**5) s5 = -64*(6949*u**4+296492*u**3-1248002*u**2+7414380*u-5853627)/(105*(8*b)**7) terms = [s1,s2,s3,s4,s5] s = s1 err = 0.0 for i in range(1,len(terms)): if abs(terms[i]) < abs(terms[i-1]): s += terms[i] else: err = abs(terms[i]) if i == len(terms)-1: err = abs(terms[-1]) return s, err def generalized_bisection(ctx,f,a,b,n): """ Given f known to have exactly n simple roots within [a,b], return a list of n intervals isolating the roots and having opposite signs at the endpoints. TODO: this can be optimized, e.g. by reusing evaluation points. """ if n < 1: raise ValueError("n cannot be less than 1") N = n+1 points = [] signs = [] while 1: points = ctx.linspace(a,b,N) signs = [ctx.sign(f(x)) for x in points] ok_intervals = [(points[i],points[i+1]) for i in range(N-1) \ if signs[i]*signs[i+1] == -1] if len(ok_intervals) == n: return ok_intervals N = N*2 def find_in_interval(ctx, f, ab): return ctx.findroot(f, ab, solver='illinois', verify=False) def bessel_zero(ctx, kind, prime, v, m, isoltol=0.01, _interval_cache={}): prec = ctx.prec workprec = max(prec, ctx.mag(v), ctx.mag(m))+10 try: ctx.prec = workprec v = ctx.mpf(v) m = int(m) prime = int(prime) if v < 0: raise ValueError("v cannot be negative") if m < 1: raise ValueError("m cannot be less than 1") if not prime in (0,1): raise ValueError("prime should lie between 0 and 1") if kind == 1: if prime: f = lambda x: ctx.besselj(v,x,derivative=1) else: f = lambda x: ctx.besselj(v,x) if kind == 2: if prime: f = lambda x: ctx.bessely(v,x,derivative=1) else: f = lambda x: ctx.bessely(v,x) # The first root of J' is very close to 0 for small # orders, and this needs to be special-cased if kind == 1 and prime and m == 1: if v == 0: return ctx.zero if v <= 1: # TODO: use v <= j'_{v,1} < y_{v,1}? r = 2*ctx.sqrt(v*(1+v)/(v+2)) return find_in_interval(ctx, f, (r/10, 2*r)) if (kind,prime,v,m) in _interval_cache: return find_in_interval(ctx, f, _interval_cache[kind,prime,v,m]) r, err = mcmahon(ctx, kind, prime, v, m) if err < isoltol: return find_in_interval(ctx, f, (r-isoltol, r+isoltol)) # An x such that 0 < x < r_{v,1} if kind == 1 and not prime: low = 2.4 if kind == 1 and prime: low = 1.8 if kind == 2 and not prime: low = 0.8 if kind == 2 and prime: low = 2.0 n = m+1 while 1: r1, err = mcmahon(ctx, kind, prime, v, n) if err < isoltol: r2, err2 = mcmahon(ctx, kind, prime, v, n+1) intervals = generalized_bisection(ctx, f, low, 0.5*(r1+r2), n) for k, ab in enumerate(intervals): _interval_cache[kind,prime,v,k+1] = ab return find_in_interval(ctx, f, intervals[m-1]) else: n = n*2 finally: ctx.prec = prec @defun def besseljzero(ctx, v, m, derivative=0): r""" For a real order `\nu \ge 0` and a positive integer `m`, returns `j_{\nu,m}`, the `m`-th positive zero of the Bessel function of the first kind `J_{\nu}(z)` (see :func:`~mpmath.besselj`). Alternatively, with *derivative=1*, gives the first nonnegative simple zero `j'_{\nu,m}` of `J'_{\nu}(z)`. The indexing convention is that used by Abramowitz & Stegun and the DLMF. Note the special case `j'_{0,1} = 0`, while all other zeros are positive. In effect, only simple zeros are counted (all zeros of Bessel functions are simple except possibly `z = 0`) and `j_{\nu,m}` becomes a monotonic function of both `\nu` and `m`. The zeros are interlaced according to the inequalities .. math :: j'_{\nu,k} < j_{\nu,k} < j'_{\nu,k+1} j_{\nu,1} < j_{\nu+1,2} < j_{\nu,2} < j_{\nu+1,2} < j_{\nu,3} < \cdots **Examples** Initial zeros of the Bessel functions `J_0(z), J_1(z), J_2(z)`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> besseljzero(0,1); besseljzero(0,2); besseljzero(0,3) 2.404825557695772768621632 5.520078110286310649596604 8.653727912911012216954199 >>> besseljzero(1,1); besseljzero(1,2); besseljzero(1,3) 3.831705970207512315614436 7.01558666981561875353705 10.17346813506272207718571 >>> besseljzero(2,1); besseljzero(2,2); besseljzero(2,3) 5.135622301840682556301402 8.417244140399864857783614 11.61984117214905942709415 Initial zeros of `J'_0(z), J'_1(z), J'_2(z)`:: 0.0 3.831705970207512315614436 7.01558666981561875353705 >>> besseljzero(1,1,1); besseljzero(1,2,1); besseljzero(1,3,1) 1.84118378134065930264363 5.331442773525032636884016 8.536316366346285834358961 >>> besseljzero(2,1,1); besseljzero(2,2,1); besseljzero(2,3,1) 3.054236928227140322755932 6.706133194158459146634394 9.969467823087595793179143 Zeros with large index:: >>> besseljzero(0,100); besseljzero(0,1000); besseljzero(0,10000) 313.3742660775278447196902 3140.807295225078628895545 31415.14114171350798533666 >>> besseljzero(5,100); besseljzero(5,1000); besseljzero(5,10000) 321.1893195676003157339222 3148.657306813047523500494 31422.9947255486291798943 >>> besseljzero(0,100,1); besseljzero(0,1000,1); besseljzero(0,10000,1) 311.8018681873704508125112 3139.236339643802482833973 31413.57032947022399485808 Zeros of functions with large order:: >>> besseljzero(50,1) 57.11689916011917411936228 >>> besseljzero(50,2) 62.80769876483536093435393 >>> besseljzero(50,100) 388.6936600656058834640981 >>> besseljzero(50,1,1) 52.99764038731665010944037 >>> besseljzero(50,2,1) 60.02631933279942589882363 >>> besseljzero(50,100,1) 387.1083151608726181086283 Zeros of functions with fractional order:: >>> besseljzero(0.5,1); besseljzero(1.5,1); besseljzero(2.25,4) 3.141592653589793238462643 4.493409457909064175307881 15.15657692957458622921634 Both `J_{\nu}(z)` and `J'_{\nu}(z)` can be expressed as infinite products over their zeros:: >>> v,z = 2, mpf(1) >>> (z/2)**v/gamma(v+1) * \ ... nprod(lambda k: 1-(z/besseljzero(v,k))**2, [1,inf]) ... 0.1149034849319004804696469 >>> besselj(v,z) 0.1149034849319004804696469 >>> (z/2)**(v-1)/2/gamma(v) * \ ... nprod(lambda k: 1-(z/besseljzero(v,k,1))**2, [1,inf]) ... 0.2102436158811325550203884 >>> besselj(v,z,1) 0.2102436158811325550203884 """ return +bessel_zero(ctx, 1, derivative, v, m) @defun def besselyzero(ctx, v, m, derivative=0): r""" For a real order `\nu \ge 0` and a positive integer `m`, returns `y_{\nu,m}`, the `m`-th positive zero of the Bessel function of the second kind `Y_{\nu}(z)` (see :func:`~mpmath.bessely`). Alternatively, with *derivative=1*, gives the first positive zero `y'_{\nu,m}` of `Y'_{\nu}(z)`. The zeros are interlaced according to the inequalities .. math :: y_{\nu,k} < y'_{\nu,k} < y_{\nu,k+1} y_{\nu,1} < y_{\nu+1,2} < y_{\nu,2} < y_{\nu+1,2} < y_{\nu,3} < \cdots **Examples** Initial zeros of the Bessel functions `Y_0(z), Y_1(z), Y_2(z)`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> besselyzero(0,1); besselyzero(0,2); besselyzero(0,3) 0.8935769662791675215848871 3.957678419314857868375677 7.086051060301772697623625 >>> besselyzero(1,1); besselyzero(1,2); besselyzero(1,3) 2.197141326031017035149034 5.429681040794135132772005 8.596005868331168926429606 >>> besselyzero(2,1); besselyzero(2,2); besselyzero(2,3) 3.384241767149593472701426 6.793807513268267538291167 10.02347797936003797850539 Initial zeros of `Y'_0(z), Y'_1(z), Y'_2(z)`:: >>> besselyzero(0,1,1); besselyzero(0,2,1); besselyzero(0,3,1) 2.197141326031017035149034 5.429681040794135132772005 8.596005868331168926429606 >>> besselyzero(1,1,1); besselyzero(1,2,1); besselyzero(1,3,1) 3.683022856585177699898967 6.941499953654175655751944 10.12340465543661307978775 >>> besselyzero(2,1,1); besselyzero(2,2,1); besselyzero(2,3,1) 5.002582931446063945200176 8.350724701413079526349714 11.57419546521764654624265 Zeros with large index:: >>> besselyzero(0,100); besselyzero(0,1000); besselyzero(0,10000) 311.8034717601871549333419 3139.236498918198006794026 31413.57034538691205229188 >>> besselyzero(5,100); besselyzero(5,1000); besselyzero(5,10000) 319.6183338562782156235062 3147.086508524556404473186 31421.42392920214673402828 >>> besselyzero(0,100,1); besselyzero(0,1000,1); besselyzero(0,10000,1) 313.3726705426359345050449 3140.807136030340213610065 31415.14112579761578220175 Zeros of functions with large order:: >>> besselyzero(50,1) 53.50285882040036394680237 >>> besselyzero(50,2) 60.11244442774058114686022 >>> besselyzero(50,100) 387.1096509824943957706835 >>> besselyzero(50,1,1) 56.96290427516751320063605 >>> besselyzero(50,2,1) 62.74888166945933944036623 >>> besselyzero(50,100,1) 388.6923300548309258355475 Zeros of functions with fractional order:: >>> besselyzero(0.5,1); besselyzero(1.5,1); besselyzero(2.25,4) 1.570796326794896619231322 2.798386045783887136720249 13.56721208770735123376018 """ return +bessel_zero(ctx, 2, derivative, v, m) mpmath-1.0.0/mpmath/functions/elliptic.py000066400000000000000000001141661316273626600205000ustar00rootroot00000000000000r""" Elliptic functions historically comprise the elliptic integrals and their inverses, and originate from the problem of computing the arc length of an ellipse. From a more modern point of view, an elliptic function is defined as a doubly periodic function, i.e. a function which satisfies .. math :: f(z + 2 \omega_1) = f(z + 2 \omega_2) = f(z) for some half-periods `\omega_1, \omega_2` with `\mathrm{Im}[\omega_1 / \omega_2] > 0`. The canonical elliptic functions are the Jacobi elliptic functions. More broadly, this section includes quasi-doubly periodic functions (such as the Jacobi theta functions) and other functions useful in the study of elliptic functions. Many different conventions for the arguments of elliptic functions are in use. It is even standard to use different parameterizations for different functions in the same text or software (and mpmath is no exception). The usual parameters are the elliptic nome `q`, which usually must satisfy `|q| < 1`; the elliptic parameter `m` (an arbitrary complex number); the elliptic modulus `k` (an arbitrary complex number); and the half-period ratio `\tau`, which usually must satisfy `\mathrm{Im}[\tau] > 0`. These quantities can be expressed in terms of each other using the following relations: .. math :: m = k^2 .. math :: \tau = i \frac{K(1-m)}{K(m)} .. math :: q = e^{i \pi \tau} .. math :: k = \frac{\vartheta_2^4(q)}{\vartheta_3^4(q)} In addition, an alternative definition is used for the nome in number theory, which we here denote by q-bar: .. math :: \bar{q} = q^2 = e^{2 i \pi \tau} For convenience, mpmath provides functions to convert between the various parameters (:func:`~mpmath.qfrom`, :func:`~mpmath.mfrom`, :func:`~mpmath.kfrom`, :func:`~mpmath.taufrom`, :func:`~mpmath.qbarfrom`). **References** 1. [AbramowitzStegun]_ 2. [WhittakerWatson]_ """ from .functions import defun, defun_wrapped def nome(ctx, m): m = ctx.convert(m) if not m: return m if m == ctx.one: return m if ctx.isnan(m): return m if ctx.isinf(m): if m == ctx.ninf: return type(m)(-1) else: return ctx.mpc(-1) a = ctx.ellipk(ctx.one-m) b = ctx.ellipk(m) v = ctx.exp(-ctx.pi*a/b) if not ctx._im(m) and ctx._re(m) < 1: if ctx._is_real_type(m): return v.real else: return v.real + 0j elif m == 2: v = ctx.mpc(0, v.imag) return v @defun_wrapped def qfrom(ctx, q=None, m=None, k=None, tau=None, qbar=None): r""" Returns the elliptic nome `q`, given any of `q, m, k, \tau, \bar{q}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> qfrom(q=0.25) 0.25 >>> qfrom(m=mfrom(q=0.25)) 0.25 >>> qfrom(k=kfrom(q=0.25)) 0.25 >>> qfrom(tau=taufrom(q=0.25)) (0.25 + 0.0j) >>> qfrom(qbar=qbarfrom(q=0.25)) 0.25 """ if q is not None: return ctx.convert(q) if m is not None: return nome(ctx, m) if k is not None: return nome(ctx, ctx.convert(k)**2) if tau is not None: return ctx.expjpi(tau) if qbar is not None: return ctx.sqrt(qbar) @defun_wrapped def qbarfrom(ctx, q=None, m=None, k=None, tau=None, qbar=None): r""" Returns the number-theoretic nome `\bar q`, given any of `q, m, k, \tau, \bar{q}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> qbarfrom(qbar=0.25) 0.25 >>> qbarfrom(q=qfrom(qbar=0.25)) 0.25 >>> qbarfrom(m=extraprec(20)(mfrom)(qbar=0.25)) # ill-conditioned 0.25 >>> qbarfrom(k=extraprec(20)(kfrom)(qbar=0.25)) # ill-conditioned 0.25 >>> qbarfrom(tau=taufrom(qbar=0.25)) (0.25 + 0.0j) """ if qbar is not None: return ctx.convert(qbar) if q is not None: return ctx.convert(q) ** 2 if m is not None: return nome(ctx, m) ** 2 if k is not None: return nome(ctx, ctx.convert(k)**2) ** 2 if tau is not None: return ctx.expjpi(2*tau) @defun_wrapped def taufrom(ctx, q=None, m=None, k=None, tau=None, qbar=None): r""" Returns the elliptic half-period ratio `\tau`, given any of `q, m, k, \tau, \bar{q}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> taufrom(tau=0.5j) (0.0 + 0.5j) >>> taufrom(q=qfrom(tau=0.5j)) (0.0 + 0.5j) >>> taufrom(m=mfrom(tau=0.5j)) (0.0 + 0.5j) >>> taufrom(k=kfrom(tau=0.5j)) (0.0 + 0.5j) >>> taufrom(qbar=qbarfrom(tau=0.5j)) (0.0 + 0.5j) """ if tau is not None: return ctx.convert(tau) if m is not None: m = ctx.convert(m) return ctx.j*ctx.ellipk(1-m)/ctx.ellipk(m) if k is not None: k = ctx.convert(k) return ctx.j*ctx.ellipk(1-k**2)/ctx.ellipk(k**2) if q is not None: return ctx.log(q) / (ctx.pi*ctx.j) if qbar is not None: qbar = ctx.convert(qbar) return ctx.log(qbar) / (2*ctx.pi*ctx.j) @defun_wrapped def kfrom(ctx, q=None, m=None, k=None, tau=None, qbar=None): r""" Returns the elliptic modulus `k`, given any of `q, m, k, \tau, \bar{q}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> kfrom(k=0.25) 0.25 >>> kfrom(m=mfrom(k=0.25)) 0.25 >>> kfrom(q=qfrom(k=0.25)) 0.25 >>> kfrom(tau=taufrom(k=0.25)) (0.25 + 0.0j) >>> kfrom(qbar=qbarfrom(k=0.25)) 0.25 As `q \to 1` and `q \to -1`, `k` rapidly approaches `1` and `i \infty` respectively:: >>> kfrom(q=0.75) 0.9999999999999899166471767 >>> kfrom(q=-0.75) (0.0 + 7041781.096692038332790615j) >>> kfrom(q=1) 1 >>> kfrom(q=-1) (0.0 + +infj) """ if k is not None: return ctx.convert(k) if m is not None: return ctx.sqrt(m) if tau is not None: q = ctx.expjpi(tau) if qbar is not None: q = ctx.sqrt(qbar) if q == 1: return q if q == -1: return ctx.mpc(0,'inf') return (ctx.jtheta(2,0,q)/ctx.jtheta(3,0,q))**2 @defun_wrapped def mfrom(ctx, q=None, m=None, k=None, tau=None, qbar=None): r""" Returns the elliptic parameter `m`, given any of `q, m, k, \tau, \bar{q}`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> mfrom(m=0.25) 0.25 >>> mfrom(q=qfrom(m=0.25)) 0.25 >>> mfrom(k=kfrom(m=0.25)) 0.25 >>> mfrom(tau=taufrom(m=0.25)) (0.25 + 0.0j) >>> mfrom(qbar=qbarfrom(m=0.25)) 0.25 As `q \to 1` and `q \to -1`, `m` rapidly approaches `1` and `-\infty` respectively:: >>> mfrom(q=0.75) 0.9999999999999798332943533 >>> mfrom(q=-0.75) -49586681013729.32611558353 >>> mfrom(q=1) 1.0 >>> mfrom(q=-1) -inf The inverse nome as a function of `q` has an integer Taylor series expansion:: >>> taylor(lambda q: mfrom(q), 0, 7) [0.0, 16.0, -128.0, 704.0, -3072.0, 11488.0, -38400.0, 117632.0] """ if m is not None: return m if k is not None: return k**2 if tau is not None: q = ctx.expjpi(tau) if qbar is not None: q = ctx.sqrt(qbar) if q == 1: return ctx.convert(q) if q == -1: return q*ctx.inf v = (ctx.jtheta(2,0,q)/ctx.jtheta(3,0,q))**4 if ctx._is_real_type(q) and q < 0: v = v.real return v jacobi_spec = { 'sn' : ([3],[2],[1],[4], 'sin', 'tanh'), 'cn' : ([4],[2],[2],[4], 'cos', 'sech'), 'dn' : ([4],[3],[3],[4], '1', 'sech'), 'ns' : ([2],[3],[4],[1], 'csc', 'coth'), 'nc' : ([2],[4],[4],[2], 'sec', 'cosh'), 'nd' : ([3],[4],[4],[3], '1', 'cosh'), 'sc' : ([3],[4],[1],[2], 'tan', 'sinh'), 'sd' : ([3,3],[2,4],[1],[3], 'sin', 'sinh'), 'cd' : ([3],[2],[2],[3], 'cos', '1'), 'cs' : ([4],[3],[2],[1], 'cot', 'csch'), 'dc' : ([2],[3],[3],[2], 'sec', '1'), 'ds' : ([2,4],[3,3],[3],[1], 'csc', 'csch'), 'cc' : None, 'ss' : None, 'nn' : None, 'dd' : None } @defun def ellipfun(ctx, kind, u=None, m=None, q=None, k=None, tau=None): try: S = jacobi_spec[kind] except KeyError: raise ValueError("First argument must be a two-character string " "containing 's', 'c', 'd' or 'n', e.g.: 'sn'") if u is None: def f(*args, **kwargs): return ctx.ellipfun(kind, *args, **kwargs) f.__name__ = kind return f prec = ctx.prec try: ctx.prec += 10 u = ctx.convert(u) q = ctx.qfrom(m=m, q=q, k=k, tau=tau) if S is None: v = ctx.one + 0*q*u elif q == ctx.zero: if S[4] == '1': v = ctx.one else: v = getattr(ctx, S[4])(u) v += 0*q*u elif q == ctx.one: if S[5] == '1': v = ctx.one else: v = getattr(ctx, S[5])(u) v += 0*q*u else: t = u / ctx.jtheta(3, 0, q)**2 v = ctx.one for a in S[0]: v *= ctx.jtheta(a, 0, q) for b in S[1]: v /= ctx.jtheta(b, 0, q) for c in S[2]: v *= ctx.jtheta(c, t, q) for d in S[3]: v /= ctx.jtheta(d, t, q) finally: ctx.prec = prec return +v @defun_wrapped def kleinj(ctx, tau=None, **kwargs): r""" Evaluates the Klein j-invariant, which is a modular function defined for `\tau` in the upper half-plane as .. math :: J(\tau) = \frac{g_2^3(\tau)}{g_2^3(\tau) - 27 g_3^2(\tau)} where `g_2` and `g_3` are the modular invariants of the Weierstrass elliptic function, .. math :: g_2(\tau) = 60 \sum_{(m,n) \in \mathbb{Z}^2 \setminus (0,0)} (m \tau+n)^{-4} g_3(\tau) = 140 \sum_{(m,n) \in \mathbb{Z}^2 \setminus (0,0)} (m \tau+n)^{-6}. An alternative, common notation is that of the j-function `j(\tau) = 1728 J(\tau)`. **Plots** .. literalinclude :: /plots/kleinj.py .. image :: /plots/kleinj.png .. literalinclude :: /plots/kleinj2.py .. image :: /plots/kleinj2.png **Examples** Verifying the functional equation `J(\tau) = J(\tau+1) = J(-\tau^{-1})`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> tau = 0.625+0.75*j >>> tau = 0.625+0.75*j >>> kleinj(tau) (-0.1507492166511182267125242 + 0.07595948379084571927228948j) >>> kleinj(tau+1) (-0.1507492166511182267125242 + 0.07595948379084571927228948j) >>> kleinj(-1/tau) (-0.1507492166511182267125242 + 0.07595948379084571927228946j) The j-function has a famous Laurent series expansion in terms of the nome `\bar{q}`, `j(\tau) = \bar{q}^{-1} + 744 + 196884\bar{q} + \ldots`:: >>> mp.dps = 15 >>> taylor(lambda q: 1728*q*kleinj(qbar=q), 0, 5, singular=True) [1.0, 744.0, 196884.0, 21493760.0, 864299970.0, 20245856256.0] The j-function admits exact evaluation at special algebraic points related to the Heegner numbers 1, 2, 3, 7, 11, 19, 43, 67, 163:: >>> @extraprec(10) ... def h(n): ... v = (1+sqrt(n)*j) ... if n > 2: ... v *= 0.5 ... return v ... >>> mp.dps = 25 >>> for n in [1,2,3,7,11,19,43,67,163]: ... n, chop(1728*kleinj(h(n))) ... (1, 1728.0) (2, 8000.0) (3, 0.0) (7, -3375.0) (11, -32768.0) (19, -884736.0) (43, -884736000.0) (67, -147197952000.0) (163, -262537412640768000.0) Also at other special points, the j-function assumes explicit algebraic values, e.g.:: >>> chop(1728*kleinj(j*sqrt(5))) 1264538.909475140509320227 >>> identify(cbrt(_)) # note: not simplified '((100+sqrt(13520))/2)' >>> (50+26*sqrt(5))**3 1264538.909475140509320227 """ q = ctx.qfrom(tau=tau, **kwargs) t2 = ctx.jtheta(2,0,q) t3 = ctx.jtheta(3,0,q) t4 = ctx.jtheta(4,0,q) P = (t2**8 + t3**8 + t4**8)**3 Q = 54*(t2*t3*t4)**8 return P/Q def RF_calc(ctx, x, y, z, r): if y == z: return RC_calc(ctx, x, y, r) if x == z: return RC_calc(ctx, y, x, r) if x == y: return RC_calc(ctx, z, x, r) if not (ctx.isnormal(x) and ctx.isnormal(y) and ctx.isnormal(z)): if ctx.isnan(x) or ctx.isnan(y) or ctx.isnan(z): return x*y*z if ctx.isinf(x) or ctx.isinf(y) or ctx.isinf(z): return ctx.zero xm,ym,zm = x,y,z A0 = Am = (x+y+z)/3 Q = ctx.root(3*r, -6) * max(abs(A0-x),abs(A0-y),abs(A0-z)) g = ctx.mpf(0.25) pow4 = ctx.one m = 0 while 1: xs = ctx.sqrt(xm) ys = ctx.sqrt(ym) zs = ctx.sqrt(zm) lm = xs*ys + xs*zs + ys*zs Am1 = (Am+lm)*g xm, ym, zm = (xm+lm)*g, (ym+lm)*g, (zm+lm)*g if pow4 * Q < abs(Am): break Am = Am1 m += 1 pow4 *= g t = pow4/Am X = (A0-x)*t Y = (A0-y)*t Z = -X-Y E2 = X*Y-Z**2 E3 = X*Y*Z return ctx.power(Am,-0.5) * (9240-924*E2+385*E2**2+660*E3-630*E2*E3)/9240 def RC_calc(ctx, x, y, r, pv=True): if not (ctx.isnormal(x) and ctx.isnormal(y)): if ctx.isinf(x) or ctx.isinf(y): return 1/(x*y) if y == 0: return ctx.inf if x == 0: return ctx.pi / ctx.sqrt(y) / 2 raise ValueError # Cauchy principal value if pv and ctx._im(y) == 0 and ctx._re(y) < 0: return ctx.sqrt(x/(x-y)) * RC_calc(ctx, x-y, -y, r) if x == y: return 1/ctx.sqrt(x) extraprec = 2*max(0,-ctx.mag(x-y)+ctx.mag(x)) ctx.prec += extraprec if ctx._is_real_type(x) and ctx._is_real_type(y): x = ctx._re(x) y = ctx._re(y) a = ctx.sqrt(x/y) if x < y: b = ctx.sqrt(y-x) v = ctx.acos(a)/b else: b = ctx.sqrt(x-y) v = ctx.acosh(a)/b else: sx = ctx.sqrt(x) sy = ctx.sqrt(y) v = ctx.acos(sx/sy)/(ctx.sqrt((1-x/y))*sy) ctx.prec -= extraprec return v def RJ_calc(ctx, x, y, z, p, r): if not (ctx.isnormal(x) and ctx.isnormal(y) and \ ctx.isnormal(z) and ctx.isnormal(p)): if ctx.isnan(x) or ctx.isnan(y) or ctx.isnan(z) or ctx.isnan(p): return x*y*z if ctx.isinf(x) or ctx.isinf(y) or ctx.isinf(z) or ctx.isinf(p): return ctx.zero if not p: return ctx.inf xm,ym,zm,pm = x,y,z,p A0 = Am = (x + y + z + 2*p)/5 delta = (p-x)*(p-y)*(p-z) Q = ctx.root(0.25*r, -6) * max(abs(A0-x),abs(A0-y),abs(A0-z),abs(A0-p)) m = 0 g = ctx.mpf(0.25) pow4 = ctx.one S = 0 while 1: sx = ctx.sqrt(xm) sy = ctx.sqrt(ym) sz = ctx.sqrt(zm) sp = ctx.sqrt(pm) lm = sx*sy + sx*sz + sy*sz Am1 = (Am+lm)*g xm = (xm+lm)*g; ym = (ym+lm)*g; zm = (zm+lm)*g; pm = (pm+lm)*g dm = (sp+sx) * (sp+sy) * (sp+sz) em = delta * ctx.power(4, -3*m) / dm**2 if pow4 * Q < abs(Am): break T = RC_calc(ctx, ctx.one, ctx.one+em, r) * pow4 / dm S += T pow4 *= g m += 1 Am = Am1 t = ctx.ldexp(1,-2*m) / Am X = (A0-x)*t Y = (A0-y)*t Z = (A0-z)*t P = (-X-Y-Z)/2 E2 = X*Y + X*Z + Y*Z - 3*P**2 E3 = X*Y*Z + 2*E2*P + 4*P**3 E4 = (2*X*Y*Z + E2*P + 3*P**3)*P E5 = X*Y*Z*P**2 P = 24024 - 5148*E2 + 2457*E2**2 + 4004*E3 - 4158*E2*E3 - 3276*E4 + 2772*E5 Q = 24024 v1 = g**m * ctx.power(Am, -1.5) * P/Q v2 = 6*S return v1 + v2 @defun def elliprf(ctx, x, y, z): r""" Evaluates the Carlson symmetric elliptic integral of the first kind .. math :: R_F(x,y,z) = \frac{1}{2} \int_0^{\infty} \frac{dt}{\sqrt{(t+x)(t+y)(t+z)}} which is defined for `x,y,z \notin (-\infty,0)`, and with at most one of `x,y,z` being zero. For real `x,y,z \ge 0`, the principal square root is taken in the integrand. For complex `x,y,z`, the principal square root is taken as `t \to \infty` and as `t \to 0` non-principal branches are chosen as necessary so as to make the integrand continuous. **Examples** Some basic values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> elliprf(0,1,1); pi/2 1.570796326794896619231322 1.570796326794896619231322 >>> elliprf(0,1,inf) 0.0 >>> elliprf(1,1,1) 1.0 >>> elliprf(2,2,2)**2 0.5 >>> elliprf(1,0,0); elliprf(0,0,1); elliprf(0,1,0); elliprf(0,0,0) +inf +inf +inf +inf Representing complete elliptic integrals in terms of `R_F`:: >>> m = mpf(0.75) >>> ellipk(m); elliprf(0,1-m,1) 2.156515647499643235438675 2.156515647499643235438675 >>> ellipe(m); elliprf(0,1-m,1)-m*elliprd(0,1-m,1)/3 1.211056027568459524803563 1.211056027568459524803563 Some symmetries and argument transformations:: >>> x,y,z = 2,3,4 >>> elliprf(x,y,z); elliprf(y,x,z); elliprf(z,y,x) 0.5840828416771517066928492 0.5840828416771517066928492 0.5840828416771517066928492 >>> k = mpf(100000) >>> elliprf(k*x,k*y,k*z); k**(-0.5) * elliprf(x,y,z) 0.001847032121923321253219284 0.001847032121923321253219284 >>> l = sqrt(x*y) + sqrt(y*z) + sqrt(z*x) >>> elliprf(x,y,z); 2*elliprf(x+l,y+l,z+l) 0.5840828416771517066928492 0.5840828416771517066928492 >>> elliprf((x+l)/4,(y+l)/4,(z+l)/4) 0.5840828416771517066928492 Comparing with numerical integration:: >>> x,y,z = 2,3,4 >>> elliprf(x,y,z) 0.5840828416771517066928492 >>> f = lambda t: 0.5*((t+x)*(t+y)*(t+z))**(-0.5) >>> q = extradps(25)(quad) >>> q(f, [0,inf]) 0.5840828416771517066928492 With the following arguments, the square root in the integrand becomes discontinuous at `t = 1/2` if the principal branch is used. To obtain the right value, `-\sqrt{r}` must be taken instead of `\sqrt{r}` on `t \in (0, 1/2)`:: >>> x,y,z = j-1,j,0 >>> elliprf(x,y,z) (0.7961258658423391329305694 - 1.213856669836495986430094j) >>> -q(f, [0,0.5]) + q(f, [0.5,inf]) (0.7961258658423391329305694 - 1.213856669836495986430094j) The so-called *first lemniscate constant*, a transcendental number:: >>> elliprf(0,1,2) 1.31102877714605990523242 >>> extradps(25)(quad)(lambda t: 1/sqrt(1-t**4), [0,1]) 1.31102877714605990523242 >>> gamma('1/4')**2/(4*sqrt(2*pi)) 1.31102877714605990523242 **References** 1. [Carlson]_ 2. [DLMF]_ Chapter 19. Elliptic Integrals """ x = ctx.convert(x) y = ctx.convert(y) z = ctx.convert(z) prec = ctx.prec try: ctx.prec += 20 tol = ctx.eps * 2**10 v = RF_calc(ctx, x, y, z, tol) finally: ctx.prec = prec return +v @defun def elliprc(ctx, x, y, pv=True): r""" Evaluates the degenerate Carlson symmetric elliptic integral of the first kind .. math :: R_C(x,y) = R_F(x,y,y) = \frac{1}{2} \int_0^{\infty} \frac{dt}{(t+y) \sqrt{(t+x)}}. If `y \in (-\infty,0)`, either a value defined by continuity, or with *pv=True* the Cauchy principal value, can be computed. If `x \ge 0, y > 0`, the value can be expressed in terms of elementary functions as .. math :: R_C(x,y) = \begin{cases} \dfrac{1}{\sqrt{y-x}} \cos^{-1}\left(\sqrt{\dfrac{x}{y}}\right), & x < y \\ \dfrac{1}{\sqrt{y}}, & x = y \\ \dfrac{1}{\sqrt{x-y}} \cosh^{-1}\left(\sqrt{\dfrac{x}{y}}\right), & x > y \\ \end{cases}. **Examples** Some special values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> elliprc(1,2)*4; elliprc(0,1)*2; +pi 3.141592653589793238462643 3.141592653589793238462643 3.141592653589793238462643 >>> elliprc(1,0) +inf >>> elliprc(5,5)**2 0.2 >>> elliprc(1,inf); elliprc(inf,1); elliprc(inf,inf) 0.0 0.0 0.0 Comparing with the elementary closed-form solution:: >>> elliprc('1/3', '1/5'); sqrt(7.5)*acosh(sqrt('5/3')) 2.041630778983498390751238 2.041630778983498390751238 >>> elliprc('1/5', '1/3'); sqrt(7.5)*acos(sqrt('3/5')) 1.875180765206547065111085 1.875180765206547065111085 Comparing with numerical integration:: >>> q = extradps(25)(quad) >>> elliprc(2, -3, pv=True) 0.3333969101113672670749334 >>> elliprc(2, -3, pv=False) (0.3333969101113672670749334 + 0.7024814731040726393156375j) >>> 0.5*q(lambda t: 1/(sqrt(t+2)*(t-3)), [0,3-j,6,inf]) (0.3333969101113672670749334 + 0.7024814731040726393156375j) """ x = ctx.convert(x) y = ctx.convert(y) prec = ctx.prec try: ctx.prec += 20 tol = ctx.eps * 2**10 v = RC_calc(ctx, x, y, tol, pv) finally: ctx.prec = prec return +v @defun def elliprj(ctx, x, y, z, p): r""" Evaluates the Carlson symmetric elliptic integral of the third kind .. math :: R_J(x,y,z,p) = \frac{3}{2} \int_0^{\infty} \frac{dt}{(t+p)\sqrt{(t+x)(t+y)(t+z)}}. Like :func:`~mpmath.elliprf`, the branch of the square root in the integrand is defined so as to be continuous along the path of integration for complex values of the arguments. **Examples** Some values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> elliprj(1,1,1,1) 1.0 >>> elliprj(2,2,2,2); 1/(2*sqrt(2)) 0.3535533905932737622004222 0.3535533905932737622004222 >>> elliprj(0,1,2,2) 1.067937989667395702268688 >>> 3*(2*gamma('5/4')**2-pi**2/gamma('1/4')**2)/(sqrt(2*pi)) 1.067937989667395702268688 >>> elliprj(0,1,1,2); 3*pi*(2-sqrt(2))/4 1.380226776765915172432054 1.380226776765915172432054 >>> elliprj(1,3,2,0); elliprj(0,1,1,0); elliprj(0,0,0,0) +inf +inf +inf >>> elliprj(1,inf,1,0); elliprj(1,1,1,inf) 0.0 0.0 >>> chop(elliprj(1+j, 1-j, 1, 1)) 0.8505007163686739432927844 Scale transformation:: >>> x,y,z,p = 2,3,4,5 >>> k = mpf(100000) >>> elliprj(k*x,k*y,k*z,k*p); k**(-1.5)*elliprj(x,y,z,p) 4.521291677592745527851168e-9 4.521291677592745527851168e-9 Comparing with numerical integration:: >>> elliprj(1,2,3,4) 0.2398480997495677621758617 >>> f = lambda t: 1/((t+4)*sqrt((t+1)*(t+2)*(t+3))) >>> 1.5*quad(f, [0,inf]) 0.2398480997495677621758617 >>> elliprj(1,2+1j,3,4-2j) (0.216888906014633498739952 + 0.04081912627366673332369512j) >>> f = lambda t: 1/((t+4-2j)*sqrt((t+1)*(t+2+1j)*(t+3))) >>> 1.5*quad(f, [0,inf]) (0.216888906014633498739952 + 0.04081912627366673332369511j) """ x = ctx.convert(x) y = ctx.convert(y) z = ctx.convert(z) p = ctx.convert(p) prec = ctx.prec try: ctx.prec += 20 tol = ctx.eps * 2**10 v = RJ_calc(ctx, x, y, z, p, tol) finally: ctx.prec = prec return +v @defun def elliprd(ctx, x, y, z): r""" Evaluates the degenerate Carlson symmetric elliptic integral of the third kind or Carlson elliptic integral of the second kind `R_D(x,y,z) = R_J(x,y,z,z)`. See :func:`~mpmath.elliprj` for additional information. **Examples** >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> elliprd(1,2,3) 0.2904602810289906442326534 >>> elliprj(1,2,3,3) 0.2904602810289906442326534 The so-called *second lemniscate constant*, a transcendental number:: >>> elliprd(0,2,1)/3 0.5990701173677961037199612 >>> extradps(25)(quad)(lambda t: t**2/sqrt(1-t**4), [0,1]) 0.5990701173677961037199612 >>> gamma('3/4')**2/sqrt(2*pi) 0.5990701173677961037199612 """ return ctx.elliprj(x,y,z,z) @defun def elliprg(ctx, x, y, z): r""" Evaluates the Carlson completely symmetric elliptic integral of the second kind .. math :: R_G(x,y,z) = \frac{1}{4} \int_0^{\infty} \frac{t}{\sqrt{(t+x)(t+y)(t+z)}} \left( \frac{x}{t+x} + \frac{y}{t+y} + \frac{z}{t+z}\right) dt. **Examples** Evaluation for real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> elliprg(0,1,1)*4; +pi 3.141592653589793238462643 3.141592653589793238462643 >>> elliprg(0,0.5,1) 0.6753219405238377512600874 >>> chop(elliprg(1+j, 1-j, 2)) 1.172431327676416604532822 A double integral that can be evaluated in terms of `R_G`:: >>> x,y,z = 2,3,4 >>> def f(t,u): ... st = fp.sin(t); ct = fp.cos(t) ... su = fp.sin(u); cu = fp.cos(u) ... return (x*(st*cu)**2 + y*(st*su)**2 + z*ct**2)**0.5 * st ... >>> nprint(mpf(fp.quad(f, [0,fp.pi], [0,2*fp.pi])/(4*fp.pi)), 13) 1.725503028069 >>> nprint(elliprg(x,y,z), 13) 1.725503028069 """ x = ctx.convert(x) y = ctx.convert(y) z = ctx.convert(z) zeros = (not x) + (not y) + (not z) if zeros == 3: return (x+y+z)*0 if zeros == 2: if x: return 0.5*ctx.sqrt(x) if y: return 0.5*ctx.sqrt(y) return 0.5*ctx.sqrt(z) if zeros == 1: if not z: x, z = z, x def terms(): T1 = 0.5*z*ctx.elliprf(x,y,z) T2 = -0.5*(x-z)*(y-z)*ctx.elliprd(x,y,z)/3 T3 = 0.5*ctx.sqrt(x)*ctx.sqrt(y)/ctx.sqrt(z) return T1,T2,T3 return ctx.sum_accurately(terms) @defun_wrapped def ellipf(ctx, phi, m): r""" Evaluates the Legendre incomplete elliptic integral of the first kind .. math :: F(\phi,m) = \int_0^{\phi} \frac{dt}{\sqrt{1-m \sin^2 t}} or equivalently .. math :: F(\phi,m) = \int_0^{\sin \phi} \frac{dt}{\left(\sqrt{1-t^2}\right)\left(\sqrt{1-mt^2}\right)}. The function reduces to a complete elliptic integral of the first kind (see :func:`~mpmath.ellipk`) when `\phi = \frac{\pi}{2}`; that is, .. math :: F\left(\frac{\pi}{2}, m\right) = K(m). In the defining integral, it is assumed that the principal branch of the square root is taken and that the path of integration avoids crossing any branch cuts. Outside `-\pi/2 \le \Re(\phi) \le \pi/2`, the function extends quasi-periodically as .. math :: F(\phi + n \pi, m) = 2 n K(m) + F(\phi,m), n \in \mathbb{Z}. **Plots** .. literalinclude :: /plots/ellipf.py .. image :: /plots/ellipf.png **Examples** Basic values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> ellipf(0,1) 0.0 >>> ellipf(0,0) 0.0 >>> ellipf(1,0); ellipf(2+3j,0) 1.0 (2.0 + 3.0j) >>> ellipf(1,1); log(sec(1)+tan(1)) 1.226191170883517070813061 1.226191170883517070813061 >>> ellipf(pi/2, -0.5); ellipk(-0.5) 1.415737208425956198892166 1.415737208425956198892166 >>> ellipf(pi/2+eps, 1); ellipf(-pi/2-eps, 1) +inf +inf >>> ellipf(1.5, 1) 3.340677542798311003320813 Comparing with numerical integration:: >>> z,m = 0.5, 1.25 >>> ellipf(z,m) 0.5287219202206327872978255 >>> quad(lambda t: (1-m*sin(t)**2)**(-0.5), [0,z]) 0.5287219202206327872978255 The arguments may be complex numbers:: >>> ellipf(3j, 0.5) (0.0 + 1.713602407841590234804143j) >>> ellipf(3+4j, 5-6j) (1.269131241950351323305741 - 0.3561052815014558335412538j) >>> z,m = 2+3j, 1.25 >>> k = 1011 >>> ellipf(z+pi*k,m); ellipf(z,m) + 2*k*ellipk(m) (4086.184383622179764082821 - 3003.003538923749396546871j) (4086.184383622179764082821 - 3003.003538923749396546871j) For `|\Re(z)| < \pi/2`, the function can be expressed as a hypergeometric series of two variables (see :func:`~mpmath.appellf1`):: >>> z,m = 0.5, 0.25 >>> ellipf(z,m) 0.5050887275786480788831083 >>> sin(z)*appellf1(0.5,0.5,0.5,1.5,sin(z)**2,m*sin(z)**2) 0.5050887275786480788831083 """ z = phi if not (ctx.isnormal(z) and ctx.isnormal(m)): if m == 0: return z + m if z == 0: return z * m if m == ctx.inf or m == ctx.ninf: return z/m raise ValueError x = z.real ctx.prec += max(0, ctx.mag(x)) pi = +ctx.pi away = abs(x) > pi/2 if m == 1: if away: return ctx.inf if away: d = ctx.nint(x/pi) z = z-pi*d P = 2*d*ctx.ellipk(m) else: P = 0 c, s = ctx.cos_sin(z) return s * ctx.elliprf(c**2, 1-m*s**2, 1) + P @defun_wrapped def ellipe(ctx, *args): r""" Called with a single argument `m`, evaluates the Legendre complete elliptic integral of the second kind, `E(m)`, defined by .. math :: E(m) = \int_0^{\pi/2} \sqrt{1-m \sin^2 t} \, dt \,=\, \frac{\pi}{2} \,_2F_1\left(\frac{1}{2}, -\frac{1}{2}, 1, m\right). Called with two arguments `\phi, m`, evaluates the incomplete elliptic integral of the second kind .. math :: E(\phi,m) = \int_0^{\phi} \sqrt{1-m \sin^2 t} \, dt = \int_0^{\sin z} \frac{\sqrt{1-mt^2}}{\sqrt{1-t^2}} \, dt. The incomplete integral reduces to a complete integral when `\phi = \frac{\pi}{2}`; that is, .. math :: E\left(\frac{\pi}{2}, m\right) = E(m). In the defining integral, it is assumed that the principal branch of the square root is taken and that the path of integration avoids crossing any branch cuts. Outside `-\pi/2 \le \Re(z) \le \pi/2`, the function extends quasi-periodically as .. math :: E(\phi + n \pi, m) = 2 n E(m) + F(\phi,m), n \in \mathbb{Z}. **Plots** .. literalinclude :: /plots/ellipe.py .. image :: /plots/ellipe.png **Examples for the complete integral** Basic values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> ellipe(0) 1.570796326794896619231322 >>> ellipe(1) 1.0 >>> ellipe(-1) 1.910098894513856008952381 >>> ellipe(2) (0.5990701173677961037199612 + 0.5990701173677961037199612j) >>> ellipe(inf) (0.0 + +infj) >>> ellipe(-inf) +inf Verifying the defining integral and hypergeometric representation:: >>> ellipe(0.5) 1.350643881047675502520175 >>> quad(lambda t: sqrt(1-0.5*sin(t)**2), [0, pi/2]) 1.350643881047675502520175 >>> pi/2*hyp2f1(0.5,-0.5,1,0.5) 1.350643881047675502520175 Evaluation is supported for arbitrary complex `m`:: >>> ellipe(0.5+0.25j) (1.360868682163129682716687 - 0.1238733442561786843557315j) >>> ellipe(3+4j) (1.499553520933346954333612 - 1.577879007912758274533309j) A definite integral:: >>> quad(ellipe, [0,1]) 1.333333333333333333333333 **Examples for the incomplete integral** Basic values and limits:: >>> ellipe(0,1) 0.0 >>> ellipe(0,0) 0.0 >>> ellipe(1,0) 1.0 >>> ellipe(2+3j,0) (2.0 + 3.0j) >>> ellipe(1,1); sin(1) 0.8414709848078965066525023 0.8414709848078965066525023 >>> ellipe(pi/2, -0.5); ellipe(-0.5) 1.751771275694817862026502 1.751771275694817862026502 >>> ellipe(pi/2, 1); ellipe(-pi/2, 1) 1.0 -1.0 >>> ellipe(1.5, 1) 0.9974949866040544309417234 Comparing with numerical integration:: >>> z,m = 0.5, 1.25 >>> ellipe(z,m) 0.4740152182652628394264449 >>> quad(lambda t: sqrt(1-m*sin(t)**2), [0,z]) 0.4740152182652628394264449 The arguments may be complex numbers:: >>> ellipe(3j, 0.5) (0.0 + 7.551991234890371873502105j) >>> ellipe(3+4j, 5-6j) (24.15299022574220502424466 + 75.2503670480325997418156j) >>> k = 35 >>> z,m = 2+3j, 1.25 >>> ellipe(z+pi*k,m); ellipe(z,m) + 2*k*ellipe(m) (48.30138799412005235090766 + 17.47255216721987688224357j) (48.30138799412005235090766 + 17.47255216721987688224357j) For `|\Re(z)| < \pi/2`, the function can be expressed as a hypergeometric series of two variables (see :func:`~mpmath.appellf1`):: >>> z,m = 0.5, 0.25 >>> ellipe(z,m) 0.4950017030164151928870375 >>> sin(z)*appellf1(0.5,0.5,-0.5,1.5,sin(z)**2,m*sin(z)**2) 0.4950017030164151928870376 """ if len(args) == 1: return ctx._ellipe(args[0]) else: phi, m = args z = phi if not (ctx.isnormal(z) and ctx.isnormal(m)): if m == 0: return z + m if z == 0: return z * m if m == ctx.inf or m == ctx.ninf: return ctx.inf raise ValueError x = z.real ctx.prec += max(0, ctx.mag(x)) pi = +ctx.pi away = abs(x) > pi/2 if away: d = ctx.nint(x/pi) z = z-pi*d P = 2*d*ctx.ellipe(m) else: P = 0 def terms(): c, s = ctx.cos_sin(z) x = c**2 y = 1-m*s**2 RF = ctx.elliprf(x, y, 1) RD = ctx.elliprd(x, y, 1) return s*RF, -m*s**3*RD/3 return ctx.sum_accurately(terms) + P @defun_wrapped def ellippi(ctx, *args): r""" Called with three arguments `n, \phi, m`, evaluates the Legendre incomplete elliptic integral of the third kind .. math :: \Pi(n; \phi, m) = \int_0^{\phi} \frac{dt}{(1-n \sin^2 t) \sqrt{1-m \sin^2 t}} = \int_0^{\sin \phi} \frac{dt}{(1-nt^2) \sqrt{1-t^2} \sqrt{1-mt^2}}. Called with two arguments `n, m`, evaluates the complete elliptic integral of the third kind `\Pi(n,m) = \Pi(n; \frac{\pi}{2},m)`. In the defining integral, it is assumed that the principal branch of the square root is taken and that the path of integration avoids crossing any branch cuts. Outside `-\pi/2 \le \Re(\phi) \le \pi/2`, the function extends quasi-periodically as .. math :: \Pi(n,\phi+k\pi,m) = 2k\Pi(n,m) + \Pi(n,\phi,m), k \in \mathbb{Z}. **Plots** .. literalinclude :: /plots/ellippi.py .. image :: /plots/ellippi.png **Examples for the complete integral** Some basic values and limits:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> ellippi(0,-5); ellipk(-5) 0.9555039270640439337379334 0.9555039270640439337379334 >>> ellippi(inf,2) 0.0 >>> ellippi(2,inf) 0.0 >>> abs(ellippi(1,5)) +inf >>> abs(ellippi(0.25,1)) +inf Evaluation in terms of simpler functions:: >>> ellippi(0.25,0.25); ellipe(0.25)/(1-0.25) 1.956616279119236207279727 1.956616279119236207279727 >>> ellippi(3,0); pi/(2*sqrt(-2)) (0.0 - 1.11072073453959156175397j) (0.0 - 1.11072073453959156175397j) >>> ellippi(-3,0); pi/(2*sqrt(4)) 0.7853981633974483096156609 0.7853981633974483096156609 **Examples for the incomplete integral** Basic values and limits:: >>> ellippi(0.25,-0.5); ellippi(0.25,pi/2,-0.5) 1.622944760954741603710555 1.622944760954741603710555 >>> ellippi(1,0,1) 0.0 >>> ellippi(inf,0,1) 0.0 >>> ellippi(0,0.25,0.5); ellipf(0.25,0.5) 0.2513040086544925794134591 0.2513040086544925794134591 >>> ellippi(1,1,1); (log(sec(1)+tan(1))+sec(1)*tan(1))/2 2.054332933256248668692452 2.054332933256248668692452 >>> ellippi(0.25, 53*pi/2, 0.75); 53*ellippi(0.25,0.75) 135.240868757890840755058 135.240868757890840755058 >>> ellippi(0.5,pi/4,0.5); 2*ellipe(pi/4,0.5)-1/sqrt(3) 0.9190227391656969903987269 0.9190227391656969903987269 Complex arguments are supported:: >>> ellippi(0.5, 5+6j-2*pi, -7-8j) (-0.3612856620076747660410167 + 0.5217735339984807829755815j) Some degenerate cases:: >>> ellippi(1,1) +inf >>> ellippi(1,0) +inf >>> ellippi(1,2,0) +inf >>> ellippi(1,2,1) +inf >>> ellippi(1,0,1) 0.0 """ if len(args) == 2: n, m = args complete = True z = phi = ctx.pi/2 else: n, phi, m = args complete = False z = phi if not (ctx.isnormal(n) and ctx.isnormal(z) and ctx.isnormal(m)): if ctx.isnan(n) or ctx.isnan(z) or ctx.isnan(m): raise ValueError if complete: if m == 0: if n == 1: return ctx.inf return ctx.pi/(2*ctx.sqrt(1-n)) if n == 0: return ctx.ellipk(m) if ctx.isinf(n) or ctx.isinf(m): return ctx.zero else: if z == 0: return z if ctx.isinf(n): return ctx.zero if ctx.isinf(m): return ctx.zero if ctx.isinf(n) or ctx.isinf(z) or ctx.isinf(m): raise ValueError if complete: if m == 1: if n == 1: return ctx.inf return -ctx.inf/ctx.sign(n-1) away = False else: x = z.real ctx.prec += max(0, ctx.mag(x)) pi = +ctx.pi away = abs(x) > pi/2 if away: d = ctx.nint(x/pi) z = z-pi*d P = 2*d*ctx.ellippi(n,m) if ctx.isinf(P): return ctx.inf else: P = 0 def terms(): if complete: c, s = ctx.zero, ctx.one else: c, s = ctx.cos_sin(z) x = c**2 y = 1-m*s**2 RF = ctx.elliprf(x, y, 1) RJ = ctx.elliprj(x, y, 1, 1-n*s**2) return s*RF, n*s**3*RJ/3 return ctx.sum_accurately(terms) + P mpmath-1.0.0/mpmath/functions/expintegrals.py000066400000000000000000000265741316273626600214050ustar00rootroot00000000000000from .functions import defun, defun_wrapped @defun_wrapped def _erf_complex(ctx, z): z2 = ctx.square_exp_arg(z, -1) #z2 = -z**2 v = (2/ctx.sqrt(ctx.pi))*z * ctx.hyp1f1((1,2),(3,2), z2) if not ctx._re(z): v = ctx._im(v)*ctx.j return v @defun_wrapped def _erfc_complex(ctx, z): if ctx.re(z) > 2: z2 = ctx.square_exp_arg(z) nz2 = ctx.fneg(z2, exact=True) v = ctx.exp(nz2)/ctx.sqrt(ctx.pi) * ctx.hyperu((1,2),(1,2), z2) else: v = 1 - ctx._erf_complex(z) if not ctx._re(z): v = 1+ctx._im(v)*ctx.j return v @defun def erf(ctx, z): z = ctx.convert(z) if ctx._is_real_type(z): try: return ctx._erf(z) except NotImplementedError: pass if ctx._is_complex_type(z) and not z.imag: try: return type(z)(ctx._erf(z.real)) except NotImplementedError: pass return ctx._erf_complex(z) @defun def erfc(ctx, z): z = ctx.convert(z) if ctx._is_real_type(z): try: return ctx._erfc(z) except NotImplementedError: pass if ctx._is_complex_type(z) and not z.imag: try: return type(z)(ctx._erfc(z.real)) except NotImplementedError: pass return ctx._erfc_complex(z) @defun def square_exp_arg(ctx, z, mult=1, reciprocal=False): prec = ctx.prec*4+20 if reciprocal: z2 = ctx.fmul(z, z, prec=prec) z2 = ctx.fdiv(ctx.one, z2, prec=prec) else: z2 = ctx.fmul(z, z, prec=prec) if mult != 1: z2 = ctx.fmul(z2, mult, exact=True) return z2 @defun_wrapped def erfi(ctx, z): if not z: return z z2 = ctx.square_exp_arg(z) v = (2/ctx.sqrt(ctx.pi)*z) * ctx.hyp1f1((1,2), (3,2), z2) if not ctx._re(z): v = ctx._im(v)*ctx.j return v @defun_wrapped def erfinv(ctx, x): xre = ctx._re(x) if (xre != x) or (xre < -1) or (xre > 1): return ctx.bad_domain("erfinv(x) is defined only for -1 <= x <= 1") x = xre #if ctx.isnan(x): return x if not x: return x if x == 1: return ctx.inf if x == -1: return ctx.ninf if abs(x) < 0.9: a = 0.53728*x**3 + 0.813198*x else: # An asymptotic formula u = ctx.ln(2/ctx.pi/(abs(x)-1)**2) a = ctx.sign(x) * ctx.sqrt(u - ctx.ln(u))/ctx.sqrt(2) ctx.prec += 10 return ctx.findroot(lambda t: ctx.erf(t)-x, a) @defun_wrapped def npdf(ctx, x, mu=0, sigma=1): sigma = ctx.convert(sigma) return ctx.exp(-(x-mu)**2/(2*sigma**2)) / (sigma*ctx.sqrt(2*ctx.pi)) @defun_wrapped def ncdf(ctx, x, mu=0, sigma=1): a = (x-mu)/(sigma*ctx.sqrt(2)) if a < 0: return ctx.erfc(-a)/2 else: return (1+ctx.erf(a))/2 @defun_wrapped def betainc(ctx, a, b, x1=0, x2=1, regularized=False): if x1 == x2: v = 0 elif not x1: if x1 == 0 and x2 == 1: v = ctx.beta(a, b) else: v = x2**a * ctx.hyp2f1(a, 1-b, a+1, x2) / a else: m, d = ctx.nint_distance(a) if m <= 0: if d < -ctx.prec: h = +ctx.eps ctx.prec *= 2 a += h elif d < -4: ctx.prec -= d s1 = x2**a * ctx.hyp2f1(a,1-b,a+1,x2) s2 = x1**a * ctx.hyp2f1(a,1-b,a+1,x1) v = (s1 - s2) / a if regularized: v /= ctx.beta(a,b) return v @defun def gammainc(ctx, z, a=0, b=None, regularized=False): regularized = bool(regularized) z = ctx.convert(z) if a is None: a = ctx.zero lower_modified = False else: a = ctx.convert(a) lower_modified = a != ctx.zero if b is None: b = ctx.inf upper_modified = False else: b = ctx.convert(b) upper_modified = b != ctx.inf # Complete gamma function if not (upper_modified or lower_modified): if regularized: if ctx.re(z) < 0: return ctx.inf elif ctx.re(z) > 0: return ctx.one else: return ctx.nan return ctx.gamma(z) if a == b: return ctx.zero # Standardize if ctx.re(a) > ctx.re(b): return -ctx.gammainc(z, b, a, regularized) # Generalized gamma if upper_modified and lower_modified: return +ctx._gamma3(z, a, b, regularized) # Upper gamma elif lower_modified: return ctx._upper_gamma(z, a, regularized) # Lower gamma elif upper_modified: return ctx._lower_gamma(z, b, regularized) @defun def _lower_gamma(ctx, z, b, regularized=False): # Pole if ctx.isnpint(z): return type(z)(ctx.inf) G = [z] * regularized negb = ctx.fneg(b, exact=True) def h(z): T1 = [ctx.exp(negb), b, z], [1, z, -1], [], G, [1], [1+z], b return (T1,) return ctx.hypercomb(h, [z]) @defun def _upper_gamma(ctx, z, a, regularized=False): # Fast integer case, when available if ctx.isint(z): try: if regularized: # Gamma pole if ctx.isnpint(z): return type(z)(ctx.zero) orig = ctx.prec try: ctx.prec += 10 return ctx._gamma_upper_int(z, a) / ctx.gamma(z) finally: ctx.prec = orig else: return ctx._gamma_upper_int(z, a) except NotImplementedError: pass # hypercomb is unable to detect the exact zeros, so handle them here if z == 2 and a == -1: return (z+a)*0 if z == 3 and (a == -1-1j or a == -1+1j): return (z+a)*0 nega = ctx.fneg(a, exact=True) G = [z] * regularized # Use 2F0 series when possible; fall back to lower gamma representation try: def h(z): r = z-1 return [([ctx.exp(nega), a], [1, r], [], G, [1, -r], [], 1/nega)] return ctx.hypercomb(h, [z], force_series=True) except ctx.NoConvergence: def h(z): T1 = [], [1, z-1], [z], G, [], [], 0 T2 = [-ctx.exp(nega), a, z], [1, z, -1], [], G, [1], [1+z], a return T1, T2 return ctx.hypercomb(h, [z]) @defun def _gamma3(ctx, z, a, b, regularized=False): pole = ctx.isnpint(z) if regularized and pole: return ctx.zero try: ctx.prec += 15 # We don't know in advance whether it's better to write as a difference # of lower or upper gamma functions, so try both T1 = ctx.gammainc(z, a, regularized=regularized) T2 = ctx.gammainc(z, b, regularized=regularized) R = T1 - T2 if ctx.mag(R) - max(ctx.mag(T1), ctx.mag(T2)) > -10: return R if not pole: T1 = ctx.gammainc(z, 0, b, regularized=regularized) T2 = ctx.gammainc(z, 0, a, regularized=regularized) R = T1 - T2 # May be ok, but should probably at least print a warning # about possible cancellation if 1: #ctx.mag(R) - max(ctx.mag(T1), ctx.mag(T2)) > -10: return R finally: ctx.prec -= 15 raise NotImplementedError @defun_wrapped def expint(ctx, n, z): if ctx.isint(n) and ctx._is_real_type(z): try: return ctx._expint_int(n, z) except NotImplementedError: pass if ctx.isnan(n) or ctx.isnan(z): return z*n if z == ctx.inf: return 1/z if z == 0: # integral from 1 to infinity of t^n if ctx.re(n) <= 1: # TODO: reasonable sign of infinity return type(z)(ctx.inf) else: return ctx.one/(n-1) if n == 0: return ctx.exp(-z)/z if n == -1: return ctx.exp(-z)*(z+1)/z**2 return z**(n-1) * ctx.gammainc(1-n, z) @defun_wrapped def li(ctx, z, offset=False): if offset: if z == 2: return ctx.zero return ctx.ei(ctx.ln(z)) - ctx.ei(ctx.ln2) if not z: return z if z == 1: return ctx.ninf return ctx.ei(ctx.ln(z)) @defun def ei(ctx, z): try: return ctx._ei(z) except NotImplementedError: return ctx._ei_generic(z) @defun_wrapped def _ei_generic(ctx, z): # Note: the following is currently untested because mp and fp # both use special-case ei code if z == ctx.inf: return z if z == ctx.ninf: return ctx.zero if ctx.mag(z) > 1: try: r = ctx.one/z v = ctx.exp(z)*ctx.hyper([1,1],[],r, maxterms=ctx.prec, force_series=True)/z im = ctx._im(z) if im > 0: v += ctx.pi*ctx.j if im < 0: v -= ctx.pi*ctx.j return v except ctx.NoConvergence: pass v = z*ctx.hyp2f2(1,1,2,2,z) + ctx.euler if ctx._im(z): v += 0.5*(ctx.log(z) - ctx.log(ctx.one/z)) else: v += ctx.log(abs(z)) return v @defun def e1(ctx, z): try: return ctx._e1(z) except NotImplementedError: return ctx.expint(1, z) @defun def ci(ctx, z): try: return ctx._ci(z) except NotImplementedError: return ctx._ci_generic(z) @defun_wrapped def _ci_generic(ctx, z): if ctx.isinf(z): if z == ctx.inf: return ctx.zero if z == ctx.ninf: return ctx.pi*1j jz = ctx.fmul(ctx.j,z,exact=True) njz = ctx.fneg(jz,exact=True) v = 0.5*(ctx.ei(jz) + ctx.ei(njz)) zreal = ctx._re(z) zimag = ctx._im(z) if zreal == 0: if zimag > 0: v += ctx.pi*0.5j if zimag < 0: v -= ctx.pi*0.5j if zreal < 0: if zimag >= 0: v += ctx.pi*1j if zimag < 0: v -= ctx.pi*1j if ctx._is_real_type(z) and zreal > 0: v = ctx._re(v) return v @defun def si(ctx, z): try: return ctx._si(z) except NotImplementedError: return ctx._si_generic(z) @defun_wrapped def _si_generic(ctx, z): if ctx.isinf(z): if z == ctx.inf: return 0.5*ctx.pi if z == ctx.ninf: return -0.5*ctx.pi # Suffers from cancellation near 0 if ctx.mag(z) >= -1: jz = ctx.fmul(ctx.j,z,exact=True) njz = ctx.fneg(jz,exact=True) v = (-0.5j)*(ctx.ei(jz) - ctx.ei(njz)) zreal = ctx._re(z) if zreal > 0: v -= 0.5*ctx.pi if zreal < 0: v += 0.5*ctx.pi if ctx._is_real_type(z): v = ctx._re(v) return v else: return z*ctx.hyp1f2((1,2),(3,2),(3,2),-0.25*z*z) @defun_wrapped def chi(ctx, z): nz = ctx.fneg(z, exact=True) v = 0.5*(ctx.ei(z) + ctx.ei(nz)) zreal = ctx._re(z) zimag = ctx._im(z) if zimag > 0: v += ctx.pi*0.5j elif zimag < 0: v -= ctx.pi*0.5j elif zreal < 0: v += ctx.pi*1j return v @defun_wrapped def shi(ctx, z): # Suffers from cancellation near 0 if ctx.mag(z) >= -1: nz = ctx.fneg(z, exact=True) v = 0.5*(ctx.ei(z) - ctx.ei(nz)) zimag = ctx._im(z) if zimag > 0: v -= 0.5j*ctx.pi if zimag < 0: v += 0.5j*ctx.pi return v else: return z * ctx.hyp1f2((1,2),(3,2),(3,2),0.25*z*z) @defun_wrapped def fresnels(ctx, z): if z == ctx.inf: return ctx.mpf(0.5) if z == ctx.ninf: return ctx.mpf(-0.5) return ctx.pi*z**3/6*ctx.hyp1f2((3,4),(3,2),(7,4),-ctx.pi**2*z**4/16) @defun_wrapped def fresnelc(ctx, z): if z == ctx.inf: return ctx.mpf(0.5) if z == ctx.ninf: return ctx.mpf(-0.5) return z*ctx.hyp1f2((1,4),(1,2),(5,4),-ctx.pi**2*z**4/16) mpmath-1.0.0/mpmath/functions/factorials.py000066400000000000000000000124341316273626600210150ustar00rootroot00000000000000from ..libmp.backend import xrange from .functions import defun, defun_wrapped @defun def gammaprod(ctx, a, b, _infsign=False): a = [ctx.convert(x) for x in a] b = [ctx.convert(x) for x in b] poles_num = [] poles_den = [] regular_num = [] regular_den = [] for x in a: [regular_num, poles_num][ctx.isnpint(x)].append(x) for x in b: [regular_den, poles_den][ctx.isnpint(x)].append(x) # One more pole in numerator or denominator gives 0 or inf if len(poles_num) < len(poles_den): return ctx.zero if len(poles_num) > len(poles_den): # Get correct sign of infinity for x+h, h -> 0 from above # XXX: hack, this should be done properly if _infsign: a = [x and x*(1+ctx.eps) or x+ctx.eps for x in poles_num] b = [x and x*(1+ctx.eps) or x+ctx.eps for x in poles_den] return ctx.sign(ctx.gammaprod(a+regular_num,b+regular_den)) * ctx.inf else: return ctx.inf # All poles cancel # lim G(i)/G(j) = (-1)**(i+j) * gamma(1-j) / gamma(1-i) p = ctx.one orig = ctx.prec try: ctx.prec = orig + 15 while poles_num: i = poles_num.pop() j = poles_den.pop() p *= (-1)**(i+j) * ctx.gamma(1-j) / ctx.gamma(1-i) for x in regular_num: p *= ctx.gamma(x) for x in regular_den: p /= ctx.gamma(x) finally: ctx.prec = orig return +p @defun def beta(ctx, x, y): x = ctx.convert(x) y = ctx.convert(y) if ctx.isinf(y): x, y = y, x if ctx.isinf(x): if x == ctx.inf and not ctx._im(y): if y == ctx.ninf: return ctx.nan if y > 0: return ctx.zero if ctx.isint(y): return ctx.nan if y < 0: return ctx.sign(ctx.gamma(y)) * ctx.inf return ctx.nan return ctx.gammaprod([x, y], [x+y]) @defun def binomial(ctx, n, k): return ctx.gammaprod([n+1], [k+1, n-k+1]) @defun def rf(ctx, x, n): return ctx.gammaprod([x+n], [x]) @defun def ff(ctx, x, n): return ctx.gammaprod([x+1], [x-n+1]) @defun_wrapped def fac2(ctx, x): if ctx.isinf(x): if x == ctx.inf: return x return ctx.nan return 2**(x/2)*(ctx.pi/2)**((ctx.cospi(x)-1)/4)*ctx.gamma(x/2+1) @defun_wrapped def barnesg(ctx, z): if ctx.isinf(z): if z == ctx.inf: return z return ctx.nan if ctx.isnan(z): return z if (not ctx._im(z)) and ctx._re(z) <= 0 and ctx.isint(ctx._re(z)): return z*0 # Account for size (would not be needed if computing log(G)) if abs(z) > 5: ctx.dps += 2*ctx.log(abs(z),2) # Reflection formula if ctx.re(z) < -ctx.dps: w = 1-z pi2 = 2*ctx.pi u = ctx.expjpi(2*w) v = ctx.j*ctx.pi/12 - ctx.j*ctx.pi*w**2/2 + w*ctx.ln(1-u) - \ ctx.j*ctx.polylog(2, u)/pi2 v = ctx.barnesg(2-z)*ctx.exp(v)/pi2**w if ctx._is_real_type(z): v = ctx._re(v) return v # Estimate terms for asymptotic expansion # TODO: fixme, obviously N = ctx.dps // 2 + 5 G = 1 while abs(z) < N or ctx.re(z) < 1: G /= ctx.gamma(z) z += 1 z -= 1 s = ctx.mpf(1)/12 s -= ctx.log(ctx.glaisher) s += z*ctx.log(2*ctx.pi)/2 s += (z**2/2-ctx.mpf(1)/12)*ctx.log(z) s -= 3*z**2/4 z2k = z2 = z**2 for k in xrange(1, N+1): t = ctx.bernoulli(2*k+2) / (4*k*(k+1)*z2k) if abs(t) < ctx.eps: #print k, N # check how many terms were needed break z2k *= z2 s += t #if k == N: # print "warning: series for barnesg failed to converge", ctx.dps return G*ctx.exp(s) @defun def superfac(ctx, z): return ctx.barnesg(z+2) @defun_wrapped def hyperfac(ctx, z): # XXX: estimate needed extra bits accurately if z == ctx.inf: return z if abs(z) > 5: extra = 4*int(ctx.log(abs(z),2)) else: extra = 0 ctx.prec += extra if not ctx._im(z) and ctx._re(z) < 0 and ctx.isint(ctx._re(z)): n = int(ctx.re(z)) h = ctx.hyperfac(-n-1) if ((n+1)//2) & 1: h = -h if ctx._is_complex_type(z): return h + 0j return h zp1 = z+1 # Wrong branch cut #v = ctx.gamma(zp1)**z #ctx.prec -= extra #return v / ctx.barnesg(zp1) v = ctx.exp(z*ctx.loggamma(zp1)) ctx.prec -= extra return v / ctx.barnesg(zp1) @defun_wrapped def loggamma_old(ctx, z): a = ctx._re(z) b = ctx._im(z) if not b and a > 0: return ctx.ln(ctx.gamma_old(z)) u = ctx.arg(z) w = ctx.ln(ctx.gamma_old(z)) if b: gi = -b - u/2 + a*u + b*ctx.ln(abs(z)) n = ctx.floor((gi-ctx._im(w))/(2*ctx.pi)+0.5) * (2*ctx.pi) return w + n*ctx.j elif a < 0: n = int(ctx.floor(a)) w += (n-(n%2))*ctx.pi*ctx.j return w ''' @defun def psi0(ctx, z): """Shortcut for psi(0,z) (the digamma function)""" return ctx.psi(0, z) @defun def psi1(ctx, z): """Shortcut for psi(1,z) (the trigamma function)""" return ctx.psi(1, z) @defun def psi2(ctx, z): """Shortcut for psi(2,z) (the tetragamma function)""" return ctx.psi(2, z) @defun def psi3(ctx, z): """Shortcut for psi(3,z) (the pentagamma function)""" return ctx.psi(3, z) ''' mpmath-1.0.0/mpmath/functions/functions.py000066400000000000000000000427251316273626600207040ustar00rootroot00000000000000from ..libmp.backend import xrange class SpecialFunctions(object): """ This class implements special functions using high-level code. Elementary and some other functions (e.g. gamma function, basecase hypergeometric series) are assumed to be predefined by the context as "builtins" or "low-level" functions. """ defined_functions = {} # The series for the Jacobi theta functions converge for |q| < 1; # in the current implementation they throw a ValueError for # abs(q) > THETA_Q_LIM THETA_Q_LIM = 1 - 10**-7 def __init__(self): cls = self.__class__ for name in cls.defined_functions: f, wrap = cls.defined_functions[name] cls._wrap_specfun(name, f, wrap) self.mpq_1 = self._mpq((1,1)) self.mpq_0 = self._mpq((0,1)) self.mpq_1_2 = self._mpq((1,2)) self.mpq_3_2 = self._mpq((3,2)) self.mpq_1_4 = self._mpq((1,4)) self.mpq_1_16 = self._mpq((1,16)) self.mpq_3_16 = self._mpq((3,16)) self.mpq_5_2 = self._mpq((5,2)) self.mpq_3_4 = self._mpq((3,4)) self.mpq_7_4 = self._mpq((7,4)) self.mpq_5_4 = self._mpq((5,4)) self.mpq_1_3 = self._mpq((1,3)) self.mpq_2_3 = self._mpq((2,3)) self.mpq_4_3 = self._mpq((4,3)) self.mpq_1_6 = self._mpq((1,6)) self.mpq_5_6 = self._mpq((5,6)) self.mpq_5_3 = self._mpq((5,3)) self._misc_const_cache = {} self._aliases.update({ 'phase' : 'arg', 'conjugate' : 'conj', 'nthroot' : 'root', 'polygamma' : 'psi', 'hurwitz' : 'zeta', #'digamma' : 'psi0', #'trigamma' : 'psi1', #'tetragamma' : 'psi2', #'pentagamma' : 'psi3', 'fibonacci' : 'fib', 'factorial' : 'fac', }) self.zetazero_memoized = self.memoize(self.zetazero) # Default -- do nothing @classmethod def _wrap_specfun(cls, name, f, wrap): setattr(cls, name, f) # Optional fast versions of common functions in common cases. # If not overridden, default (generic hypergeometric series) # implementations will be used def _besselj(ctx, n, z): raise NotImplementedError def _erf(ctx, z): raise NotImplementedError def _erfc(ctx, z): raise NotImplementedError def _gamma_upper_int(ctx, z, a): raise NotImplementedError def _expint_int(ctx, n, z): raise NotImplementedError def _zeta(ctx, s): raise NotImplementedError def _zetasum_fast(ctx, s, a, n, derivatives, reflect): raise NotImplementedError def _ei(ctx, z): raise NotImplementedError def _e1(ctx, z): raise NotImplementedError def _ci(ctx, z): raise NotImplementedError def _si(ctx, z): raise NotImplementedError def _altzeta(ctx, s): raise NotImplementedError def defun_wrapped(f): SpecialFunctions.defined_functions[f.__name__] = f, True def defun(f): SpecialFunctions.defined_functions[f.__name__] = f, False def defun_static(f): setattr(SpecialFunctions, f.__name__, f) @defun_wrapped def cot(ctx, z): return ctx.one / ctx.tan(z) @defun_wrapped def sec(ctx, z): return ctx.one / ctx.cos(z) @defun_wrapped def csc(ctx, z): return ctx.one / ctx.sin(z) @defun_wrapped def coth(ctx, z): return ctx.one / ctx.tanh(z) @defun_wrapped def sech(ctx, z): return ctx.one / ctx.cosh(z) @defun_wrapped def csch(ctx, z): return ctx.one / ctx.sinh(z) @defun_wrapped def acot(ctx, z): if not z: return ctx.pi * 0.5 else: return ctx.atan(ctx.one / z) @defun_wrapped def asec(ctx, z): return ctx.acos(ctx.one / z) @defun_wrapped def acsc(ctx, z): return ctx.asin(ctx.one / z) @defun_wrapped def acoth(ctx, z): if not z: return ctx.pi * 0.5j else: return ctx.atanh(ctx.one / z) @defun_wrapped def asech(ctx, z): return ctx.acosh(ctx.one / z) @defun_wrapped def acsch(ctx, z): return ctx.asinh(ctx.one / z) @defun def sign(ctx, x): x = ctx.convert(x) if not x or ctx.isnan(x): return x if ctx._is_real_type(x): if x > 0: return ctx.one else: return -ctx.one return x / abs(x) @defun def agm(ctx, a, b=1): if b == 1: return ctx.agm1(a) a = ctx.convert(a) b = ctx.convert(b) return ctx._agm(a, b) @defun_wrapped def sinc(ctx, x): if ctx.isinf(x): return 1/x if not x: return x+1 return ctx.sin(x)/x @defun_wrapped def sincpi(ctx, x): if ctx.isinf(x): return 1/x if not x: return x+1 return ctx.sinpi(x)/(ctx.pi*x) # TODO: tests; improve implementation @defun_wrapped def expm1(ctx, x): if not x: return ctx.zero # exp(x) - 1 ~ x if ctx.mag(x) < -ctx.prec: return x + 0.5*x**2 # TODO: accurately eval the smaller of the real/imag parts return ctx.sum_accurately(lambda: iter([ctx.exp(x),-1]),1) @defun_wrapped def powm1(ctx, x, y): mag = ctx.mag one = ctx.one w = x**y - one M = mag(w) # Only moderate cancellation if M > -8: return w # Check for the only possible exact cases if not w: if (not y) or (x in (1, -1, 1j, -1j) and ctx.isint(y)): return w x1 = x - one magy = mag(y) lnx = ctx.ln(x) # Small y: x^y - 1 ~ log(x)*y + O(log(x)^2 * y^2) if magy + mag(lnx) < -ctx.prec: return lnx*y + (lnx*y)**2/2 # TODO: accurately eval the smaller of the real/imag part return ctx.sum_accurately(lambda: iter([x**y, -1]), 1) @defun def _rootof1(ctx, k, n): k = int(k) n = int(n) k %= n if not k: return ctx.one elif 2*k == n: return -ctx.one elif 4*k == n: return ctx.j elif 4*k == 3*n: return -ctx.j return ctx.expjpi(2*ctx.mpf(k)/n) @defun def root(ctx, x, n, k=0): n = int(n) x = ctx.convert(x) if k: # Special case: there is an exact real root if (n & 1 and 2*k == n-1) and (not ctx.im(x)) and (ctx.re(x) < 0): return -ctx.root(-x, n) # Multiply by root of unity prec = ctx.prec try: ctx.prec += 10 v = ctx.root(x, n, 0) * ctx._rootof1(k, n) finally: ctx.prec = prec return +v return ctx._nthroot(x, n) @defun def unitroots(ctx, n, primitive=False): gcd = ctx._gcd prec = ctx.prec try: ctx.prec += 10 if primitive: v = [ctx._rootof1(k,n) for k in range(n) if gcd(k,n) == 1] else: # TODO: this can be done *much* faster v = [ctx._rootof1(k,n) for k in range(n)] finally: ctx.prec = prec return [+x for x in v] @defun def arg(ctx, x): x = ctx.convert(x) re = ctx._re(x) im = ctx._im(x) return ctx.atan2(im, re) @defun def fabs(ctx, x): return abs(ctx.convert(x)) @defun def re(ctx, x): x = ctx.convert(x) if hasattr(x, "real"): # py2.5 doesn't have .real/.imag for all numbers return x.real return x @defun def im(ctx, x): x = ctx.convert(x) if hasattr(x, "imag"): # py2.5 doesn't have .real/.imag for all numbers return x.imag return ctx.zero @defun def conj(ctx, x): x = ctx.convert(x) try: return x.conjugate() except AttributeError: return x @defun def polar(ctx, z): return (ctx.fabs(z), ctx.arg(z)) @defun_wrapped def rect(ctx, r, phi): return r * ctx.mpc(*ctx.cos_sin(phi)) @defun def log(ctx, x, b=None): if b is None: return ctx.ln(x) wp = ctx.prec + 20 return ctx.ln(x, prec=wp) / ctx.ln(b, prec=wp) @defun def log10(ctx, x): return ctx.log(x, 10) @defun def fmod(ctx, x, y): return ctx.convert(x) % ctx.convert(y) @defun def degrees(ctx, x): return x / ctx.degree @defun def radians(ctx, x): return x * ctx.degree def _lambertw_special(ctx, z, k): # W(0,0) = 0; all other branches are singular if not z: if not k: return z return ctx.ninf + z if z == ctx.inf: if k == 0: return z else: return z + 2*k*ctx.pi*ctx.j if z == ctx.ninf: return (-z) + (2*k+1)*ctx.pi*ctx.j # Some kind of nan or complex inf/nan? return ctx.ln(z) import math import cmath def _lambertw_approx_hybrid(z, k): imag_sign = 0 if hasattr(z, "imag"): x = float(z.real) y = z.imag if y: imag_sign = (-1) ** (y < 0) y = float(y) else: x = float(z) y = 0.0 imag_sign = 0 # hack to work regardless of whether Python supports -0.0 if not y: y = 0.0 z = complex(x,y) if k == 0: if -4.0 < y < 4.0 and -1.0 < x < 2.5: if imag_sign: # Taylor series in upper/lower half-plane if y > 1.00: return (0.876+0.645j) + (0.118-0.174j)*(z-(0.75+2.5j)) if y > 0.25: return (0.505+0.204j) + (0.375-0.132j)*(z-(0.75+0.5j)) if y < -1.00: return (0.876-0.645j) + (0.118+0.174j)*(z-(0.75-2.5j)) if y < -0.25: return (0.505-0.204j) + (0.375+0.132j)*(z-(0.75-0.5j)) # Taylor series near -1 if x < -0.5: if imag_sign >= 0: return (-0.318+1.34j) + (-0.697-0.593j)*(z+1) else: return (-0.318-1.34j) + (-0.697+0.593j)*(z+1) # return real type r = -0.367879441171442 if (not imag_sign) and x > r: z = x # Singularity near -1/e if x < -0.2: return -1 + 2.33164398159712*(z-r)**0.5 - 1.81218788563936*(z-r) # Taylor series near 0 if x < 0.5: return z # Simple linear approximation return 0.2 + 0.3*z if (not imag_sign) and x > 0.0: L1 = math.log(x); L2 = math.log(L1) else: L1 = cmath.log(z); L2 = cmath.log(L1) elif k == -1: # return real type r = -0.367879441171442 if (not imag_sign) and r < x < 0.0: z = x if (imag_sign >= 0) and y < 0.1 and -0.6 < x < -0.2: return -1 - 2.33164398159712*(z-r)**0.5 - 1.81218788563936*(z-r) if (not imag_sign) and -0.2 <= x < 0.0: L1 = math.log(-x) return L1 - math.log(-L1) else: if imag_sign == -1 and (not y) and x < 0.0: L1 = cmath.log(z) - 3.1415926535897932j else: L1 = cmath.log(z) - 6.2831853071795865j L2 = cmath.log(L1) return L1 - L2 + L2/L1 + L2*(L2-2)/(2*L1**2) def _lambertw_series(ctx, z, k, tol): """ Return rough approximation for W_k(z) from an asymptotic series, sufficiently accurate for the Halley iteration to converge to the correct value. """ magz = ctx.mag(z) if (-10 < magz < 900) and (-1000 < k < 1000): # Near the branch point at -1/e if magz < 1 and abs(z+0.36787944117144) < 0.05: if k == 0 or (k == -1 and ctx._im(z) >= 0) or \ (k == 1 and ctx._im(z) < 0): delta = ctx.sum_accurately(lambda: [z, ctx.exp(-1)]) cancellation = -ctx.mag(delta) ctx.prec += cancellation # Use series given in Corless et al. p = ctx.sqrt(2*(ctx.e*z+1)) ctx.prec -= cancellation u = {0:ctx.mpf(-1), 1:ctx.mpf(1)} a = {0:ctx.mpf(2), 1:ctx.mpf(-1)} if k != 0: p = -p s = ctx.zero # The series converges, so we could use it directly, but unless # *extremely* close, it is better to just use the first few # terms to get a good approximation for the iteration for l in xrange(max(2,cancellation)): if l not in u: a[l] = ctx.fsum(u[j]*u[l+1-j] for j in xrange(2,l)) u[l] = (l-1)*(u[l-2]/2+a[l-2]/4)/(l+1)-a[l]/2-u[l-1]/(l+1) term = u[l] * p**l s += term if ctx.mag(term) < -tol: return s, True l += 1 ctx.prec += cancellation//2 return s, False if k == 0 or k == -1: return _lambertw_approx_hybrid(z, k), False if k == 0: if magz < -1: return z*(1-z), False L1 = ctx.ln(z) L2 = ctx.ln(L1) elif k == -1 and (not ctx._im(z)) and (-0.36787944117144 < ctx._re(z) < 0): L1 = ctx.ln(-z) return L1 - ctx.ln(-L1), False else: # This holds both as z -> 0 and z -> inf. # Relative error is O(1/log(z)). L1 = ctx.ln(z) + 2j*ctx.pi*k L2 = ctx.ln(L1) return L1 - L2 + L2/L1 + L2*(L2-2)/(2*L1**2), False @defun def lambertw(ctx, z, k=0): z = ctx.convert(z) k = int(k) if not ctx.isnormal(z): return _lambertw_special(ctx, z, k) prec = ctx.prec ctx.prec += 20 + ctx.mag(k or 1) wp = ctx.prec tol = wp - 5 w, done = _lambertw_series(ctx, z, k, tol) if not done: # Use Halley iteration to solve w*exp(w) = z two = ctx.mpf(2) for i in xrange(100): ew = ctx.exp(w) wew = w*ew wewz = wew-z wn = w - wewz/(wew+ew-(w+two)*wewz/(two*w+two)) if ctx.mag(wn-w) <= ctx.mag(wn) - tol: w = wn break else: w = wn if i == 100: ctx.warn("Lambert W iteration failed to converge for z = %s" % z) ctx.prec = prec return +w @defun_wrapped def bell(ctx, n, x=1): x = ctx.convert(x) if not n: if ctx.isnan(x): return x return type(x)(1) if ctx.isinf(x) or ctx.isinf(n) or ctx.isnan(x) or ctx.isnan(n): return x**n if n == 1: return x if n == 2: return x*(x+1) if x == 0: return ctx.sincpi(n) return _polyexp(ctx, n, x, True) / ctx.exp(x) def _polyexp(ctx, n, x, extra=False): def _terms(): if extra: yield ctx.sincpi(n) t = x k = 1 while 1: yield k**n * t k += 1 t = t*x/k return ctx.sum_accurately(_terms, check_step=4) @defun_wrapped def polyexp(ctx, s, z): if ctx.isinf(z) or ctx.isinf(s) or ctx.isnan(z) or ctx.isnan(s): return z**s if z == 0: return z*s if s == 0: return ctx.expm1(z) if s == 1: return ctx.exp(z)*z if s == 2: return ctx.exp(z)*z*(z+1) return _polyexp(ctx, s, z) @defun_wrapped def cyclotomic(ctx, n, z): n = int(n) if n < 0: raise ValueError("n cannot be negative") p = ctx.one if n == 0: return p if n == 1: return z - p if n == 2: return z + p # Use divisor product representation. Unfortunately, this sometimes # includes singularities for roots of unity, which we have to cancel out. # Matching zeros/poles pairwise, we have (1-z^a)/(1-z^b) ~ a/b + O(z-1). a_prod = 1 b_prod = 1 num_zeros = 0 num_poles = 0 for d in range(1,n+1): if not n % d: w = ctx.moebius(n//d) # Use powm1 because it is important that we get 0 only # if it really is exactly 0 b = -ctx.powm1(z, d) if b: p *= b**w else: if w == 1: a_prod *= d num_zeros += 1 elif w == -1: b_prod *= d num_poles += 1 #print n, num_zeros, num_poles if num_zeros: if num_zeros > num_poles: p *= 0 else: p *= a_prod p /= b_prod return p @defun def mangoldt(ctx, n): r""" Evaluates the von Mangoldt function `\Lambda(n) = \log p` if `n = p^k` a power of a prime, and `\Lambda(n) = 0` otherwise. **Examples** >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> [mangoldt(n) for n in range(-2,3)] [0.0, 0.0, 0.0, 0.0, 0.6931471805599453094172321] >>> mangoldt(6) 0.0 >>> mangoldt(7) 1.945910149055313305105353 >>> mangoldt(8) 0.6931471805599453094172321 >>> fsum(mangoldt(n) for n in range(101)) 94.04531122935739224600493 >>> fsum(mangoldt(n) for n in range(10001)) 10013.39669326311478372032 """ n = int(n) if n < 2: return ctx.zero if n % 2 == 0: # Must be a power of two if n & (n-1) == 0: return +ctx.ln2 else: return ctx.zero # TODO: the following could be generalized into a perfect # power testing function # --- # Look for a small factor for p in (3,5,7,11,13,17,19,23,29,31): if not n % p: q, r = n // p, 0 while q > 1: q, r = divmod(q, p) if r: return ctx.zero return ctx.ln(p) if ctx.isprime(n): return ctx.ln(n) # Obviously, we could use arbitrary-precision arithmetic for this... if n > 10**30: raise NotImplementedError k = 2 while 1: p = int(n**(1./k) + 0.5) if p < 2: return ctx.zero if p ** k == n: if ctx.isprime(p): return ctx.ln(p) k += 1 @defun def stirling1(ctx, n, k, exact=False): v = ctx._stirling1(int(n), int(k)) if exact: return int(v) else: return ctx.mpf(v) @defun def stirling2(ctx, n, k, exact=False): v = ctx._stirling2(int(n), int(k)) if exact: return int(v) else: return ctx.mpf(v) mpmath-1.0.0/mpmath/functions/hypergeometric.py000066400000000000000000001445621316273626600217240ustar00rootroot00000000000000from ..libmp.backend import xrange from .functions import defun, defun_wrapped def _check_need_perturb(ctx, terms, prec, discard_known_zeros): perturb = recompute = False extraprec = 0 discard = [] for term_index, term in enumerate(terms): w_s, c_s, alpha_s, beta_s, a_s, b_s, z = term have_singular_nongamma_weight = False # Avoid division by zero in leading factors (TODO: # also check for near division by zero?) for k, w in enumerate(w_s): if not w: if ctx.re(c_s[k]) <= 0 and c_s[k]: perturb = recompute = True have_singular_nongamma_weight = True pole_count = [0, 0, 0] # Check for gamma and series poles and near-poles for data_index, data in enumerate([alpha_s, beta_s, b_s]): for i, x in enumerate(data): n, d = ctx.nint_distance(x) # Poles if n > 0: continue if d == ctx.ninf: # OK if we have a polynomial # ------------------------------ ok = False if data_index == 2: for u in a_s: if ctx.isnpint(u) and u >= int(n): ok = True break if ok: continue pole_count[data_index] += 1 # ------------------------------ #perturb = recompute = True #return perturb, recompute, extraprec elif d < -4: extraprec += -d recompute = True if discard_known_zeros and pole_count[1] > pole_count[0] + pole_count[2] \ and not have_singular_nongamma_weight: discard.append(term_index) elif sum(pole_count): perturb = recompute = True return perturb, recompute, extraprec, discard _hypercomb_msg = """ hypercomb() failed to converge to the requested %i bits of accuracy using a working precision of %i bits. The function value may be zero or infinite; try passing zeroprec=N or infprec=M to bound finite values between 2^(-N) and 2^M. Otherwise try a higher maxprec or maxterms. """ @defun def hypercomb(ctx, function, params=[], discard_known_zeros=True, **kwargs): orig = ctx.prec sumvalue = ctx.zero dist = ctx.nint_distance ninf = ctx.ninf orig_params = params[:] verbose = kwargs.get('verbose', False) maxprec = kwargs.get('maxprec', ctx._default_hyper_maxprec(orig)) kwargs['maxprec'] = maxprec # For calls to hypsum zeroprec = kwargs.get('zeroprec') infprec = kwargs.get('infprec') perturbed_reference_value = None hextra = 0 try: while 1: ctx.prec += 10 if ctx.prec > maxprec: raise ValueError(_hypercomb_msg % (orig, ctx.prec)) orig2 = ctx.prec params = orig_params[:] terms = function(*params) if verbose: print() print("ENTERING hypercomb main loop") print("prec =", ctx.prec) print("hextra", hextra) perturb, recompute, extraprec, discard = \ _check_need_perturb(ctx, terms, orig, discard_known_zeros) ctx.prec += extraprec if perturb: if "hmag" in kwargs: hmag = kwargs["hmag"] elif ctx._fixed_precision: hmag = int(ctx.prec*0.3) else: hmag = orig + 10 + hextra h = ctx.ldexp(ctx.one, -hmag) ctx.prec = orig2 + 10 + hmag + 10 for k in range(len(params)): params[k] += h # Heuristically ensure that the perturbations # are "independent" so that two perturbations # don't accidentally cancel each other out # in a subtraction. h += h/(k+1) if recompute: terms = function(*params) if discard_known_zeros: terms = [term for (i, term) in enumerate(terms) if i not in discard] if not terms: return ctx.zero evaluated_terms = [] for term_index, term_data in enumerate(terms): w_s, c_s, alpha_s, beta_s, a_s, b_s, z = term_data if verbose: print() print(" Evaluating term %i/%i : %iF%i" % \ (term_index+1, len(terms), len(a_s), len(b_s))) print(" powers", ctx.nstr(w_s), ctx.nstr(c_s)) print(" gamma", ctx.nstr(alpha_s), ctx.nstr(beta_s)) print(" hyper", ctx.nstr(a_s), ctx.nstr(b_s)) print(" z", ctx.nstr(z)) #v = ctx.hyper(a_s, b_s, z, **kwargs) #for a in alpha_s: v *= ctx.gamma(a) #for b in beta_s: v *= ctx.rgamma(b) #for w, c in zip(w_s, c_s): v *= ctx.power(w, c) v = ctx.fprod([ctx.hyper(a_s, b_s, z, **kwargs)] + \ [ctx.gamma(a) for a in alpha_s] + \ [ctx.rgamma(b) for b in beta_s] + \ [ctx.power(w,c) for (w,c) in zip(w_s,c_s)]) if verbose: print(" Value:", v) evaluated_terms.append(v) if len(terms) == 1 and (not perturb): sumvalue = evaluated_terms[0] break if ctx._fixed_precision: sumvalue = ctx.fsum(evaluated_terms) break sumvalue = ctx.fsum(evaluated_terms) term_magnitudes = [ctx.mag(x) for x in evaluated_terms] max_magnitude = max(term_magnitudes) sum_magnitude = ctx.mag(sumvalue) cancellation = max_magnitude - sum_magnitude if verbose: print() print(" Cancellation:", cancellation, "bits") print(" Increased precision:", ctx.prec - orig, "bits") precision_ok = cancellation < ctx.prec - orig if zeroprec is None: zero_ok = False else: zero_ok = max_magnitude - ctx.prec < -zeroprec if infprec is None: inf_ok = False else: inf_ok = max_magnitude > infprec if precision_ok and (not perturb) or ctx.isnan(cancellation): break elif precision_ok: if perturbed_reference_value is None: hextra += 20 perturbed_reference_value = sumvalue continue elif ctx.mag(sumvalue - perturbed_reference_value) <= \ ctx.mag(sumvalue) - orig: break elif zero_ok: sumvalue = ctx.zero break elif inf_ok: sumvalue = ctx.inf break elif 'hmag' in kwargs: break else: hextra *= 2 perturbed_reference_value = sumvalue # Increase precision else: increment = min(max(cancellation, orig//2), max(extraprec,orig)) ctx.prec += increment if verbose: print(" Must start over with increased precision") continue finally: ctx.prec = orig return +sumvalue @defun def hyper(ctx, a_s, b_s, z, **kwargs): """ Hypergeometric function, general case. """ z = ctx.convert(z) p = len(a_s) q = len(b_s) a_s = [ctx._convert_param(a) for a in a_s] b_s = [ctx._convert_param(b) for b in b_s] # Reduce degree by eliminating common parameters if kwargs.get('eliminate', True): elim_nonpositive = kwargs.get('eliminate_all', False) i = 0 while i < q and a_s: b = b_s[i] if b in a_s and (elim_nonpositive or not ctx.isnpint(b[0])): a_s.remove(b) b_s.remove(b) p -= 1 q -= 1 else: i += 1 # Handle special cases if p == 0: if q == 1: return ctx._hyp0f1(b_s, z, **kwargs) elif q == 0: return ctx.exp(z) elif p == 1: if q == 1: return ctx._hyp1f1(a_s, b_s, z, **kwargs) elif q == 2: return ctx._hyp1f2(a_s, b_s, z, **kwargs) elif q == 0: return ctx._hyp1f0(a_s[0][0], z) elif p == 2: if q == 1: return ctx._hyp2f1(a_s, b_s, z, **kwargs) elif q == 2: return ctx._hyp2f2(a_s, b_s, z, **kwargs) elif q == 3: return ctx._hyp2f3(a_s, b_s, z, **kwargs) elif q == 0: return ctx._hyp2f0(a_s, b_s, z, **kwargs) elif p == q+1: return ctx._hypq1fq(p, q, a_s, b_s, z, **kwargs) elif p > q+1 and not kwargs.get('force_series'): return ctx._hyp_borel(p, q, a_s, b_s, z, **kwargs) coeffs, types = zip(*(a_s+b_s)) return ctx.hypsum(p, q, types, coeffs, z, **kwargs) @defun def hyp0f1(ctx,b,z,**kwargs): return ctx.hyper([],[b],z,**kwargs) @defun def hyp1f1(ctx,a,b,z,**kwargs): return ctx.hyper([a],[b],z,**kwargs) @defun def hyp1f2(ctx,a1,b1,b2,z,**kwargs): return ctx.hyper([a1],[b1,b2],z,**kwargs) @defun def hyp2f1(ctx,a,b,c,z,**kwargs): return ctx.hyper([a,b],[c],z,**kwargs) @defun def hyp2f2(ctx,a1,a2,b1,b2,z,**kwargs): return ctx.hyper([a1,a2],[b1,b2],z,**kwargs) @defun def hyp2f3(ctx,a1,a2,b1,b2,b3,z,**kwargs): return ctx.hyper([a1,a2],[b1,b2,b3],z,**kwargs) @defun def hyp2f0(ctx,a,b,z,**kwargs): return ctx.hyper([a,b],[],z,**kwargs) @defun def hyp3f2(ctx,a1,a2,a3,b1,b2,z,**kwargs): return ctx.hyper([a1,a2,a3],[b1,b2],z,**kwargs) @defun_wrapped def _hyp1f0(ctx, a, z): return (1-z) ** (-a) @defun def _hyp0f1(ctx, b_s, z, **kwargs): (b, btype), = b_s if z: magz = ctx.mag(z) else: magz = 0 if magz >= 8 and not kwargs.get('force_series'): try: # http://functions.wolfram.com/HypergeometricFunctions/ # Hypergeometric0F1/06/02/03/0004/ # TODO: handle the all-real case more efficiently! # TODO: figure out how much precision is needed (exponential growth) orig = ctx.prec try: ctx.prec += 12 + magz//2 def h(): w = ctx.sqrt(-z) jw = ctx.j*w u = 1/(4*jw) c = ctx.mpq_1_2 - b E = ctx.exp(2*jw) T1 = ([-jw,E], [c,-1], [], [], [b-ctx.mpq_1_2, ctx.mpq_3_2-b], [], -u) T2 = ([jw,E], [c,1], [], [], [b-ctx.mpq_1_2, ctx.mpq_3_2-b], [], u) return T1, T2 v = ctx.hypercomb(h, [], force_series=True) v = ctx.gamma(b)/(2*ctx.sqrt(ctx.pi))*v finally: ctx.prec = orig if ctx._is_real_type(b) and ctx._is_real_type(z): v = ctx._re(v) return +v except ctx.NoConvergence: pass return ctx.hypsum(0, 1, (btype,), [b], z, **kwargs) @defun def _hyp1f1(ctx, a_s, b_s, z, **kwargs): (a, atype), = a_s (b, btype), = b_s if not z: return ctx.one+z magz = ctx.mag(z) if magz >= 7 and not (ctx.isint(a) and ctx.re(a) <= 0): if ctx.isinf(z): if ctx.sign(a) == ctx.sign(b) == ctx.sign(z) == 1: return ctx.inf return ctx.nan * z try: try: ctx.prec += magz sector = ctx._im(z) < 0 def h(a,b): if sector: E = ctx.expjpi(ctx.fneg(a, exact=True)) else: E = ctx.expjpi(a) rz = 1/z T1 = ([E,z], [1,-a], [b], [b-a], [a, 1+a-b], [], -rz) T2 = ([ctx.exp(z),z], [1,a-b], [b], [a], [b-a, 1-a], [], rz) return T1, T2 v = ctx.hypercomb(h, [a,b], force_series=True) if ctx._is_real_type(a) and ctx._is_real_type(b) and ctx._is_real_type(z): v = ctx._re(v) return +v except ctx.NoConvergence: pass finally: ctx.prec -= magz v = ctx.hypsum(1, 1, (atype, btype), [a, b], z, **kwargs) return v def _hyp2f1_gosper(ctx,a,b,c,z,**kwargs): # Use Gosper's recurrence # See http://www.math.utexas.edu/pipermail/maxima/2006/000126.html _a,_b,_c,_z = a, b, c, z orig = ctx.prec maxprec = kwargs.get('maxprec', 100*orig) extra = 10 while 1: ctx.prec = orig + extra #a = ctx.convert(_a) #b = ctx.convert(_b) #c = ctx.convert(_c) z = ctx.convert(_z) d = ctx.mpf(0) e = ctx.mpf(1) f = ctx.mpf(0) k = 0 # Common subexpression elimination, unfortunately making # things a bit unreadable. The formula is quite messy to begin # with, though... abz = a*b*z ch = c * ctx.mpq_1_2 c1h = (c+1) * ctx.mpq_1_2 nz = 1-z g = z/nz abg = a*b*g cba = c-b-a z2 = z-2 tol = -ctx.prec - 10 nstr = ctx.nstr nprint = ctx.nprint mag = ctx.mag maxmag = ctx.ninf while 1: kch = k+ch kakbz = (k+a)*(k+b)*z / (4*(k+1)*kch*(k+c1h)) d1 = kakbz*(e-(k+cba)*d*g) e1 = kakbz*(d*abg+(k+c)*e) ft = d*(k*(cba*z+k*z2-c)-abz)/(2*kch*nz) f1 = f + e - ft maxmag = max(maxmag, mag(f1)) if mag(f1-f) < tol: break d, e, f = d1, e1, f1 k += 1 cancellation = maxmag - mag(f1) if cancellation < extra: break else: extra += cancellation if extra > maxprec: raise ctx.NoConvergence return f1 @defun def _hyp2f1(ctx, a_s, b_s, z, **kwargs): (a, atype), (b, btype) = a_s (c, ctype), = b_s if z == 1: # TODO: the following logic can be simplified convergent = ctx.re(c-a-b) > 0 finite = (ctx.isint(a) and a <= 0) or (ctx.isint(b) and b <= 0) zerodiv = ctx.isint(c) and c <= 0 and not \ ((ctx.isint(a) and c <= a <= 0) or (ctx.isint(b) and c <= b <= 0)) #print "bz", a, b, c, z, convergent, finite, zerodiv # Gauss's theorem gives the value if convergent if (convergent or finite) and not zerodiv: return ctx.gammaprod([c, c-a-b], [c-a, c-b], _infsign=True) # Otherwise, there is a pole and we take the # sign to be that when approaching from below # XXX: this evaluation is not necessarily correct in all cases return ctx.hyp2f1(a,b,c,1-ctx.eps*2) * ctx.inf # Equal to 1 (first term), unless there is a subsequent # division by zero if not z: # Division by zero but power of z is higher than # first order so cancels if c or a == 0 or b == 0: return 1+z # Indeterminate return ctx.nan # Hit zero denominator unless numerator goes to 0 first if ctx.isint(c) and c <= 0: if (ctx.isint(a) and c <= a <= 0) or \ (ctx.isint(b) and c <= b <= 0): pass else: # Pole in series return ctx.inf absz = abs(z) # Fast case: standard series converges rapidly, # possibly in finitely many terms if absz <= 0.8 or (ctx.isint(a) and a <= 0 and a >= -1000) or \ (ctx.isint(b) and b <= 0 and b >= -1000): return ctx.hypsum(2, 1, (atype, btype, ctype), [a, b, c], z, **kwargs) orig = ctx.prec try: ctx.prec += 10 # Use 1/z transformation if absz >= 1.3: def h(a,b): t = ctx.mpq_1-c; ab = a-b; rz = 1/z T1 = ([-z],[-a], [c,-ab],[b,c-a], [a,t+a],[ctx.mpq_1+ab], rz) T2 = ([-z],[-b], [c,ab],[a,c-b], [b,t+b],[ctx.mpq_1-ab], rz) return T1, T2 v = ctx.hypercomb(h, [a,b], **kwargs) # Use 1-z transformation elif abs(1-z) <= 0.75: def h(a,b): t = c-a-b; ca = c-a; cb = c-b; rz = 1-z T1 = [], [], [c,t], [ca,cb], [a,b], [1-t], rz T2 = [rz], [t], [c,a+b-c], [a,b], [ca,cb], [1+t], rz return T1, T2 v = ctx.hypercomb(h, [a,b], **kwargs) # Use z/(z-1) transformation elif abs(z/(z-1)) <= 0.75: v = ctx.hyp2f1(a, c-b, c, z/(z-1)) / (1-z)**a # Remaining part of unit circle else: v = _hyp2f1_gosper(ctx,a,b,c,z,**kwargs) finally: ctx.prec = orig return +v @defun def _hypq1fq(ctx, p, q, a_s, b_s, z, **kwargs): r""" Evaluates 3F2, 4F3, 5F4, ... """ a_s, a_types = zip(*a_s) b_s, b_types = zip(*b_s) a_s = list(a_s) b_s = list(b_s) absz = abs(z) ispoly = False for a in a_s: if ctx.isint(a) and a <= 0: ispoly = True break # Direct summation if absz < 1 or ispoly: try: return ctx.hypsum(p, q, a_types+b_types, a_s+b_s, z, **kwargs) except ctx.NoConvergence: if absz > 1.1 or ispoly: raise # Use expansion at |z-1| -> 0. # Reference: Wolfgang Buhring, "Generalized Hypergeometric Functions at # Unit Argument", Proc. Amer. Math. Soc., Vol. 114, No. 1 (Jan. 1992), # pp.145-153 # The current implementation has several problems: # 1. We only implement it for 3F2. The expansion coefficients are # given by extremely messy nested sums in the higher degree cases # (see reference). Is efficient sequential generation of the coefficients # possible in the > 3F2 case? # 2. Although the series converges, it may do so slowly, so we need # convergence acceleration. The acceleration implemented by # nsum does not always help, so results returned are sometimes # inaccurate! Can we do better? # 3. We should check conditions for convergence, and possibly # do a better job of cancelling out gamma poles if possible. if z == 1: # XXX: should also check for division by zero in the # denominator of the series (cf. hyp2f1) S = ctx.re(sum(b_s)-sum(a_s)) if S <= 0: #return ctx.hyper(a_s, b_s, 1-ctx.eps*2, **kwargs) * ctx.inf return ctx.hyper(a_s, b_s, 0.9, **kwargs) * ctx.inf if (p,q) == (3,2) and abs(z-1) < 0.05: # and kwargs.get('sum1') #print "Using alternate summation (experimental)" a1,a2,a3 = a_s b1,b2 = b_s u = b1+b2-a3 initial = ctx.gammaprod([b2-a3,b1-a3,a1,a2],[b2-a3,b1-a3,1,u]) def term(k, _cache={0:initial}): u = b1+b2-a3+k if k in _cache: t = _cache[k] else: t = _cache[k-1] t *= (b1+k-a3-1)*(b2+k-a3-1) t /= k*(u-1) _cache[k] = t return t * ctx.hyp2f1(a1,a2,u,z) try: S = ctx.nsum(term, [0,ctx.inf], verbose=kwargs.get('verbose'), strict=kwargs.get('strict', True)) return S * ctx.gammaprod([b1,b2],[a1,a2,a3]) except ctx.NoConvergence: pass # Try to use convergence acceleration on and close to the unit circle. # Problem: the convergence acceleration degenerates as |z-1| -> 0, # except for special cases. Everywhere else, the Shanks transformation # is very efficient. if absz < 1.1 and ctx._re(z) <= 1: def term(kk, _cache={0:ctx.one}): k = int(kk) if k != kk: t = z ** ctx.mpf(kk) / ctx.fac(kk) for a in a_s: t *= ctx.rf(a,kk) for b in b_s: t /= ctx.rf(b,kk) return t if k in _cache: return _cache[k] t = term(k-1) m = k-1 for j in xrange(p): t *= (a_s[j]+m) for j in xrange(q): t /= (b_s[j]+m) t *= z t /= k _cache[k] = t return t sum_method = kwargs.get('sum_method', 'r+s+e') try: return ctx.nsum(term, [0,ctx.inf], verbose=kwargs.get('verbose'), strict=kwargs.get('strict', True), method=sum_method.replace('e','')) except ctx.NoConvergence: if 'e' not in sum_method: raise pass if kwargs.get('verbose'): print("Attempting Euler-Maclaurin summation") """ Somewhat slower version (one diffs_exp for each factor). However, this would be faster with fast direct derivatives of the gamma function. def power_diffs(k0): r = 0 l = ctx.log(z) while 1: yield z**ctx.mpf(k0) * l**r r += 1 def loggamma_diffs(x, reciprocal=False): sign = (-1) ** reciprocal yield sign * ctx.loggamma(x) i = 0 while 1: yield sign * ctx.psi(i,x) i += 1 def hyper_diffs(k0): b2 = b_s + [1] A = [ctx.diffs_exp(loggamma_diffs(a+k0)) for a in a_s] B = [ctx.diffs_exp(loggamma_diffs(b+k0,True)) for b in b2] Z = [power_diffs(k0)] C = ctx.gammaprod([b for b in b2], [a for a in a_s]) for d in ctx.diffs_prod(A + B + Z): v = C * d yield v """ def log_diffs(k0): b2 = b_s + [1] yield sum(ctx.loggamma(a+k0) for a in a_s) - \ sum(ctx.loggamma(b+k0) for b in b2) + k0*ctx.log(z) i = 0 while 1: v = sum(ctx.psi(i,a+k0) for a in a_s) - \ sum(ctx.psi(i,b+k0) for b in b2) if i == 0: v += ctx.log(z) yield v i += 1 def hyper_diffs(k0): C = ctx.gammaprod([b for b in b_s], [a for a in a_s]) for d in ctx.diffs_exp(log_diffs(k0)): v = C * d yield v tol = ctx.eps / 1024 prec = ctx.prec try: trunc = 50 * ctx.dps ctx.prec += 20 for i in xrange(5): head = ctx.fsum(term(k) for k in xrange(trunc)) tail, err = ctx.sumem(term, [trunc, ctx.inf], tol=tol, adiffs=hyper_diffs(trunc), verbose=kwargs.get('verbose'), error=True, _fast_abort=True) if err < tol: v = head + tail break trunc *= 2 # Need to increase precision because calculation of # derivatives may be inaccurate ctx.prec += ctx.prec//2 if i == 4: raise ctx.NoConvergence(\ "Euler-Maclaurin summation did not converge") finally: ctx.prec = prec return +v # Use 1/z transformation # http://functions.wolfram.com/HypergeometricFunctions/ # HypergeometricPFQ/06/01/05/02/0004/ def h(*args): a_s = list(args[:p]) b_s = list(args[p:]) Ts = [] recz = ctx.one/z negz = ctx.fneg(z, exact=True) for k in range(q+1): ak = a_s[k] C = [negz] Cp = [-ak] Gn = b_s + [ak] + [a_s[j]-ak for j in range(q+1) if j != k] Gd = a_s + [b_s[j]-ak for j in range(q)] Fn = [ak] + [ak-b_s[j]+1 for j in range(q)] Fd = [1-a_s[j]+ak for j in range(q+1) if j != k] Ts.append((C, Cp, Gn, Gd, Fn, Fd, recz)) return Ts return ctx.hypercomb(h, a_s+b_s, **kwargs) @defun def _hyp_borel(ctx, p, q, a_s, b_s, z, **kwargs): if a_s: a_s, a_types = zip(*a_s) a_s = list(a_s) else: a_s, a_types = [], () if b_s: b_s, b_types = zip(*b_s) b_s = list(b_s) else: b_s, b_types = [], () kwargs['maxterms'] = kwargs.get('maxterms', ctx.prec) try: return ctx.hypsum(p, q, a_types+b_types, a_s+b_s, z, **kwargs) except ctx.NoConvergence: pass prec = ctx.prec try: tol = kwargs.get('asymp_tol', ctx.eps/4) ctx.prec += 10 # hypsum is has a conservative tolerance. So we try again: def term(k, cache={0:ctx.one}): if k in cache: return cache[k] t = term(k-1) for a in a_s: t *= (a+(k-1)) for b in b_s: t /= (b+(k-1)) t *= z t /= k cache[k] = t return t s = ctx.one for k in xrange(1, ctx.prec): t = term(k) s += t if abs(t) <= tol: return s finally: ctx.prec = prec if p <= q+3: contour = kwargs.get('contour') if not contour: if ctx.arg(z) < 0.25: u = z / max(1, abs(z)) if ctx.arg(z) >= 0: contour = [0, 2j, (2j+2)/u, 2/u, ctx.inf] else: contour = [0, -2j, (-2j+2)/u, 2/u, ctx.inf] #contour = [0, 2j/z, 2/z, ctx.inf] #contour = [0, 2j, 2/z, ctx.inf] #contour = [0, 2j, ctx.inf] else: contour = [0, ctx.inf] quad_kwargs = kwargs.get('quad_kwargs', {}) def g(t): return ctx.exp(-t)*ctx.hyper(a_s, b_s+[1], t*z) I, err = ctx.quad(g, contour, error=True, **quad_kwargs) if err <= abs(I)*ctx.eps*8: return I raise ctx.NoConvergence @defun def _hyp2f2(ctx, a_s, b_s, z, **kwargs): (a1, a1type), (a2, a2type) = a_s (b1, b1type), (b2, b2type) = b_s absz = abs(z) magz = ctx.mag(z) orig = ctx.prec # Asymptotic expansion is ~ exp(z) asymp_extraprec = magz # Asymptotic series is in terms of 3F1 can_use_asymptotic = (not kwargs.get('force_series')) and \ (ctx.mag(absz) > 3) # TODO: much of the following could be shared with 2F3 instead of # copypasted if can_use_asymptotic: #print "using asymp" try: try: ctx.prec += asymp_extraprec # http://functions.wolfram.com/HypergeometricFunctions/ # Hypergeometric2F2/06/02/02/0002/ def h(a1,a2,b1,b2): X = a1+a2-b1-b2 A2 = a1+a2 B2 = b1+b2 c = {} c[0] = ctx.one c[1] = (A2-1)*X+b1*b2-a1*a2 s1 = 0 k = 0 tprev = 0 while 1: if k not in c: uu1 = 1-B2+2*a1+a1**2+2*a2+a2**2-A2*B2+a1*a2+b1*b2+(2*B2-3*(A2+1))*k+2*k**2 uu2 = (k-A2+b1-1)*(k-A2+b2-1)*(k-X-2) c[k] = ctx.one/k * (uu1*c[k-1]-uu2*c[k-2]) t1 = c[k] * z**(-k) if abs(t1) < 0.1*ctx.eps: #print "Convergence :)" break # Quit if the series doesn't converge quickly enough if k > 5 and abs(tprev) / abs(t1) < 1.5: #print "No convergence :(" raise ctx.NoConvergence s1 += t1 tprev = t1 k += 1 S = ctx.exp(z)*s1 T1 = [z,S], [X,1], [b1,b2],[a1,a2],[],[],0 T2 = [-z],[-a1],[b1,b2,a2-a1],[a2,b1-a1,b2-a1],[a1,a1-b1+1,a1-b2+1],[a1-a2+1],-1/z T3 = [-z],[-a2],[b1,b2,a1-a2],[a1,b1-a2,b2-a2],[a2,a2-b1+1,a2-b2+1],[-a1+a2+1],-1/z return T1, T2, T3 v = ctx.hypercomb(h, [a1,a2,b1,b2], force_series=True, maxterms=4*ctx.prec) if sum(ctx._is_real_type(u) for u in [a1,a2,b1,b2,z]) == 5: v = ctx.re(v) return v except ctx.NoConvergence: pass finally: ctx.prec = orig return ctx.hypsum(2, 2, (a1type, a2type, b1type, b2type), [a1, a2, b1, b2], z, **kwargs) @defun def _hyp1f2(ctx, a_s, b_s, z, **kwargs): (a1, a1type), = a_s (b1, b1type), (b2, b2type) = b_s absz = abs(z) magz = ctx.mag(z) orig = ctx.prec # Asymptotic expansion is ~ exp(sqrt(z)) asymp_extraprec = z and magz//2 # Asymptotic series is in terms of 3F0 can_use_asymptotic = (not kwargs.get('force_series')) and \ (ctx.mag(absz) > 19) and \ (ctx.sqrt(absz) > 1.5*orig) # and \ # ctx._hyp_check_convergence([a1, a1-b1+1, a1-b2+1], [], # 1/absz, orig+40+asymp_extraprec) # TODO: much of the following could be shared with 2F3 instead of # copypasted if can_use_asymptotic: #print "using asymp" try: try: ctx.prec += asymp_extraprec # http://functions.wolfram.com/HypergeometricFunctions/ # Hypergeometric1F2/06/02/03/ def h(a1,b1,b2): X = ctx.mpq_1_2*(a1-b1-b2+ctx.mpq_1_2) c = {} c[0] = ctx.one c[1] = 2*(ctx.mpq_1_4*(3*a1+b1+b2-2)*(a1-b1-b2)+b1*b2-ctx.mpq_3_16) c[2] = 2*(b1*b2+ctx.mpq_1_4*(a1-b1-b2)*(3*a1+b1+b2-2)-ctx.mpq_3_16)**2+\ ctx.mpq_1_16*(-16*(2*a1-3)*b1*b2 + \ 4*(a1-b1-b2)*(-8*a1**2+11*a1+b1+b2-2)-3) s1 = 0 s2 = 0 k = 0 tprev = 0 while 1: if k not in c: uu1 = (3*k**2+(-6*a1+2*b1+2*b2-4)*k + 3*a1**2 - \ (b1-b2)**2 - 2*a1*(b1+b2-2) + ctx.mpq_1_4) uu2 = (k-a1+b1-b2-ctx.mpq_1_2)*(k-a1-b1+b2-ctx.mpq_1_2)*\ (k-a1+b1+b2-ctx.mpq_5_2) c[k] = ctx.one/(2*k)*(uu1*c[k-1]-uu2*c[k-2]) w = c[k] * (-z)**(-0.5*k) t1 = (-ctx.j)**k * ctx.mpf(2)**(-k) * w t2 = ctx.j**k * ctx.mpf(2)**(-k) * w if abs(t1) < 0.1*ctx.eps: #print "Convergence :)" break # Quit if the series doesn't converge quickly enough if k > 5 and abs(tprev) / abs(t1) < 1.5: #print "No convergence :(" raise ctx.NoConvergence s1 += t1 s2 += t2 tprev = t1 k += 1 S = ctx.expj(ctx.pi*X+2*ctx.sqrt(-z))*s1 + \ ctx.expj(-(ctx.pi*X+2*ctx.sqrt(-z)))*s2 T1 = [0.5*S, ctx.pi, -z], [1, -0.5, X], [b1, b2], [a1],\ [], [], 0 T2 = [-z], [-a1], [b1,b2],[b1-a1,b2-a1], \ [a1,a1-b1+1,a1-b2+1], [], 1/z return T1, T2 v = ctx.hypercomb(h, [a1,b1,b2], force_series=True, maxterms=4*ctx.prec) if sum(ctx._is_real_type(u) for u in [a1,b1,b2,z]) == 4: v = ctx.re(v) return v except ctx.NoConvergence: pass finally: ctx.prec = orig #print "not using asymp" return ctx.hypsum(1, 2, (a1type, b1type, b2type), [a1, b1, b2], z, **kwargs) @defun def _hyp2f3(ctx, a_s, b_s, z, **kwargs): (a1, a1type), (a2, a2type) = a_s (b1, b1type), (b2, b2type), (b3, b3type) = b_s absz = abs(z) magz = ctx.mag(z) # Asymptotic expansion is ~ exp(sqrt(z)) asymp_extraprec = z and magz//2 orig = ctx.prec # Asymptotic series is in terms of 4F1 # The square root below empirically provides a plausible criterion # for the leading series to converge can_use_asymptotic = (not kwargs.get('force_series')) and \ (ctx.mag(absz) > 19) and (ctx.sqrt(absz) > 1.5*orig) if can_use_asymptotic: #print "using asymp" try: try: ctx.prec += asymp_extraprec # http://functions.wolfram.com/HypergeometricFunctions/ # Hypergeometric2F3/06/02/03/01/0002/ def h(a1,a2,b1,b2,b3): X = ctx.mpq_1_2*(a1+a2-b1-b2-b3+ctx.mpq_1_2) A2 = a1+a2 B3 = b1+b2+b3 A = a1*a2 B = b1*b2+b3*b2+b1*b3 R = b1*b2*b3 c = {} c[0] = ctx.one c[1] = 2*(B - A + ctx.mpq_1_4*(3*A2+B3-2)*(A2-B3) - ctx.mpq_3_16) c[2] = ctx.mpq_1_2*c[1]**2 + ctx.mpq_1_16*(-16*(2*A2-3)*(B-A) + 32*R +\ 4*(-8*A2**2 + 11*A2 + 8*A + B3 - 2)*(A2-B3)-3) s1 = 0 s2 = 0 k = 0 tprev = 0 while 1: if k not in c: uu1 = (k-2*X-3)*(k-2*X-2*b1-1)*(k-2*X-2*b2-1)*\ (k-2*X-2*b3-1) uu2 = (4*(k-1)**3 - 6*(4*X+B3)*(k-1)**2 + \ 2*(24*X**2+12*B3*X+4*B+B3-1)*(k-1) - 32*X**3 - \ 24*B3*X**2 - 4*B - 8*R - 4*(4*B+B3-1)*X + 2*B3-1) uu3 = (5*(k-1)**2+2*(-10*X+A2-3*B3+3)*(k-1)+2*c[1]) c[k] = ctx.one/(2*k)*(uu1*c[k-3]-uu2*c[k-2]+uu3*c[k-1]) w = c[k] * ctx.power(-z, -0.5*k) t1 = (-ctx.j)**k * ctx.mpf(2)**(-k) * w t2 = ctx.j**k * ctx.mpf(2)**(-k) * w if abs(t1) < 0.1*ctx.eps: break # Quit if the series doesn't converge quickly enough if k > 5 and abs(tprev) / abs(t1) < 1.5: raise ctx.NoConvergence s1 += t1 s2 += t2 tprev = t1 k += 1 S = ctx.expj(ctx.pi*X+2*ctx.sqrt(-z))*s1 + \ ctx.expj(-(ctx.pi*X+2*ctx.sqrt(-z)))*s2 T1 = [0.5*S, ctx.pi, -z], [1, -0.5, X], [b1, b2, b3], [a1, a2],\ [], [], 0 T2 = [-z], [-a1], [b1,b2,b3,a2-a1],[a2,b1-a1,b2-a1,b3-a1], \ [a1,a1-b1+1,a1-b2+1,a1-b3+1], [a1-a2+1], 1/z T3 = [-z], [-a2], [b1,b2,b3,a1-a2],[a1,b1-a2,b2-a2,b3-a2], \ [a2,a2-b1+1,a2-b2+1,a2-b3+1],[-a1+a2+1], 1/z return T1, T2, T3 v = ctx.hypercomb(h, [a1,a2,b1,b2,b3], force_series=True, maxterms=4*ctx.prec) if sum(ctx._is_real_type(u) for u in [a1,a2,b1,b2,b3,z]) == 6: v = ctx.re(v) return v except ctx.NoConvergence: pass finally: ctx.prec = orig return ctx.hypsum(2, 3, (a1type, a2type, b1type, b2type, b3type), [a1, a2, b1, b2, b3], z, **kwargs) @defun def _hyp2f0(ctx, a_s, b_s, z, **kwargs): (a, atype), (b, btype) = a_s # We want to try aggressively to use the asymptotic expansion, # and fall back only when absolutely necessary try: kwargsb = kwargs.copy() kwargsb['maxterms'] = kwargsb.get('maxterms', ctx.prec) return ctx.hypsum(2, 0, (atype,btype), [a,b], z, **kwargsb) except ctx.NoConvergence: if kwargs.get('force_series'): raise pass def h(a, b): w = ctx.sinpi(b) rz = -1/z T1 = ([ctx.pi,w,rz],[1,-1,a],[],[a-b+1,b],[a],[b],rz) T2 = ([-ctx.pi,w,rz],[1,-1,1+a-b],[],[a,2-b],[a-b+1],[2-b],rz) return T1, T2 return ctx.hypercomb(h, [a, 1+a-b], **kwargs) @defun def meijerg(ctx, a_s, b_s, z, r=1, series=None, **kwargs): an, ap = a_s bm, bq = b_s n = len(an) p = n + len(ap) m = len(bm) q = m + len(bq) a = an+ap b = bm+bq a = [ctx.convert(_) for _ in a] b = [ctx.convert(_) for _ in b] z = ctx.convert(z) if series is None: if p < q: series = 1 if p > q: series = 2 if p == q: if m+n == p and abs(z) > 1: series = 2 else: series = 1 if kwargs.get('verbose'): print("Meijer G m,n,p,q,series =", m,n,p,q,series) if series == 1: def h(*args): a = args[:p] b = args[p:] terms = [] for k in range(m): bases = [z] expts = [b[k]/r] gn = [b[j]-b[k] for j in range(m) if j != k] gn += [1-a[j]+b[k] for j in range(n)] gd = [a[j]-b[k] for j in range(n,p)] gd += [1-b[j]+b[k] for j in range(m,q)] hn = [1-a[j]+b[k] for j in range(p)] hd = [1-b[j]+b[k] for j in range(q) if j != k] hz = (-ctx.one)**(p-m-n) * z**(ctx.one/r) terms.append((bases, expts, gn, gd, hn, hd, hz)) return terms else: def h(*args): a = args[:p] b = args[p:] terms = [] for k in range(n): bases = [z] if r == 1: expts = [a[k]-1] else: expts = [(a[k]-1)/ctx.convert(r)] gn = [a[k]-a[j] for j in range(n) if j != k] gn += [1-a[k]+b[j] for j in range(m)] gd = [a[k]-b[j] for j in range(m,q)] gd += [1-a[k]+a[j] for j in range(n,p)] hn = [1-a[k]+b[j] for j in range(q)] hd = [1+a[j]-a[k] for j in range(p) if j != k] hz = (-ctx.one)**(q-m-n) / z**(ctx.one/r) terms.append((bases, expts, gn, gd, hn, hd, hz)) return terms return ctx.hypercomb(h, a+b, **kwargs) @defun_wrapped def appellf1(ctx,a,b1,b2,c,x,y,**kwargs): # Assume x smaller # We will use x for the outer loop if abs(x) > abs(y): x, y = y, x b1, b2 = b2, b1 def ok(x): return abs(x) < 0.99 # Finite cases if ctx.isnpint(a): pass elif ctx.isnpint(b1): pass elif ctx.isnpint(b2): x, y, b1, b2 = y, x, b2, b1 else: #print x, y # Note: ok if |y| > 1, because # 2F1 implements analytic continuation if not ok(x): u1 = (x-y)/(x-1) if not ok(u1): raise ValueError("Analytic continuation not implemented") #print "Using analytic continuation" return (1-x)**(-b1)*(1-y)**(c-a-b2)*\ ctx.appellf1(c-a,b1,c-b1-b2,c,u1,y,**kwargs) return ctx.hyper2d({'m+n':[a],'m':[b1],'n':[b2]}, {'m+n':[c]}, x,y, **kwargs) @defun def appellf2(ctx,a,b1,b2,c1,c2,x,y,**kwargs): # TODO: continuation return ctx.hyper2d({'m+n':[a],'m':[b1],'n':[b2]}, {'m':[c1],'n':[c2]}, x,y, **kwargs) @defun def appellf3(ctx,a1,a2,b1,b2,c,x,y,**kwargs): outer_polynomial = ctx.isnpint(a1) or ctx.isnpint(b1) inner_polynomial = ctx.isnpint(a2) or ctx.isnpint(b2) if not outer_polynomial: if inner_polynomial or abs(x) > abs(y): x, y = y, x a1,a2,b1,b2 = a2,a1,b2,b1 return ctx.hyper2d({'m':[a1,b1],'n':[a2,b2]}, {'m+n':[c]},x,y,**kwargs) @defun def appellf4(ctx,a,b,c1,c2,x,y,**kwargs): # TODO: continuation return ctx.hyper2d({'m+n':[a,b]}, {'m':[c1],'n':[c2]},x,y,**kwargs) @defun def hyper2d(ctx, a, b, x, y, **kwargs): r""" Sums the generalized 2D hypergeometric series .. math :: \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{P((a),m,n)}{Q((b),m,n)} \frac{x^m y^n} {m! n!} where `(a) = (a_1,\ldots,a_r)`, `(b) = (b_1,\ldots,b_s)` and where `P` and `Q` are products of rising factorials such as `(a_j)_n` or `(a_j)_{m+n}`. `P` and `Q` are specified in the form of dicts, with the `m` and `n` dependence as keys and parameter lists as values. The supported rising factorials are given in the following table (note that only a few are supported in `Q`): +------------+-------------------+--------+ | Key | Rising factorial | `Q` | +============+===================+========+ | ``'m'`` | `(a_j)_m` | Yes | +------------+-------------------+--------+ | ``'n'`` | `(a_j)_n` | Yes | +------------+-------------------+--------+ | ``'m+n'`` | `(a_j)_{m+n}` | Yes | +------------+-------------------+--------+ | ``'m-n'`` | `(a_j)_{m-n}` | No | +------------+-------------------+--------+ | ``'n-m'`` | `(a_j)_{n-m}` | No | +------------+-------------------+--------+ | ``'2m+n'`` | `(a_j)_{2m+n}` | No | +------------+-------------------+--------+ | ``'2m-n'`` | `(a_j)_{2m-n}` | No | +------------+-------------------+--------+ | ``'2n-m'`` | `(a_j)_{2n-m}` | No | +------------+-------------------+--------+ For example, the Appell F1 and F4 functions .. math :: F_1 = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{(a)_{m+n} (b)_m (c)_n}{(d)_{m+n}} \frac{x^m y^n}{m! n!} F_4 = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty} \frac{(a)_{m+n} (b)_{m+n}}{(c)_m (d)_{n}} \frac{x^m y^n}{m! n!} can be represented respectively as ``hyper2d({'m+n':[a], 'm':[b], 'n':[c]}, {'m+n':[d]}, x, y)`` ``hyper2d({'m+n':[a,b]}, {'m':[c], 'n':[d]}, x, y)`` More generally, :func:`~mpmath.hyper2d` can evaluate any of the 34 distinct convergent second-order (generalized Gaussian) hypergeometric series enumerated by Horn, as well as the Kampe de Feriet function. The series is computed by rewriting it so that the inner series (i.e. the series containing `n` and `y`) has the form of an ordinary generalized hypergeometric series and thereby can be evaluated efficiently using :func:`~mpmath.hyper`. If possible, manually swapping `x` and `y` and the corresponding parameters can sometimes give better results. **Examples** Two separable cases: a product of two geometric series, and a product of two Gaussian hypergeometric functions:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> x, y = mpf(0.25), mpf(0.5) >>> hyper2d({'m':1,'n':1}, {}, x,y) 2.666666666666666666666667 >>> 1/(1-x)/(1-y) 2.666666666666666666666667 >>> hyper2d({'m':[1,2],'n':[3,4]}, {'m':[5],'n':[6]}, x,y) 4.164358531238938319669856 >>> hyp2f1(1,2,5,x)*hyp2f1(3,4,6,y) 4.164358531238938319669856 Some more series that can be done in closed form:: >>> hyper2d({'m':1,'n':1},{'m+n':1},x,y) 2.013417124712514809623881 >>> (exp(x)*x-exp(y)*y)/(x-y) 2.013417124712514809623881 Six of the 34 Horn functions, G1-G3 and H1-H3:: >>> from mpmath import * >>> mp.dps = 10; mp.pretty = True >>> x, y = 0.0625, 0.125 >>> a1,a2,b1,b2,c1,c2,d = 1.1,-1.2,-1.3,-1.4,1.5,-1.6,1.7 >>> hyper2d({'m+n':a1,'n-m':b1,'m-n':b2},{},x,y) # G1 1.139090746 >>> nsum(lambda m,n: rf(a1,m+n)*rf(b1,n-m)*rf(b2,m-n)*\ ... x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf]) 1.139090746 >>> hyper2d({'m':a1,'n':a2,'n-m':b1,'m-n':b2},{},x,y) # G2 0.9503682696 >>> nsum(lambda m,n: rf(a1,m)*rf(a2,n)*rf(b1,n-m)*rf(b2,m-n)*\ ... x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf]) 0.9503682696 >>> hyper2d({'2n-m':a1,'2m-n':a2},{},x,y) # G3 1.029372029 >>> nsum(lambda m,n: rf(a1,2*n-m)*rf(a2,2*m-n)*\ ... x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf]) 1.029372029 >>> hyper2d({'m-n':a1,'m+n':b1,'n':c1},{'m':d},x,y) # H1 -1.605331256 >>> nsum(lambda m,n: rf(a1,m-n)*rf(b1,m+n)*rf(c1,n)/rf(d,m)*\ ... x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf]) -1.605331256 >>> hyper2d({'m-n':a1,'m':b1,'n':[c1,c2]},{'m':d},x,y) # H2 -2.35405404 >>> nsum(lambda m,n: rf(a1,m-n)*rf(b1,m)*rf(c1,n)*rf(c2,n)/rf(d,m)*\ ... x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf]) -2.35405404 >>> hyper2d({'2m+n':a1,'n':b1},{'m+n':c1},x,y) # H3 0.974479074 >>> nsum(lambda m,n: rf(a1,2*m+n)*rf(b1,n)/rf(c1,m+n)*\ ... x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf]) 0.974479074 **References** 1. [SrivastavaKarlsson]_ 2. [Weisstein]_ http://mathworld.wolfram.com/HornFunction.html 3. [Weisstein]_ http://mathworld.wolfram.com/AppellHypergeometricFunction.html """ x = ctx.convert(x) y = ctx.convert(y) def parse(dct, key): args = dct.pop(key, []) try: args = list(args) except TypeError: args = [args] return [ctx.convert(arg) for arg in args] a_s = dict(a) b_s = dict(b) a_m = parse(a, 'm') a_n = parse(a, 'n') a_m_add_n = parse(a, 'm+n') a_m_sub_n = parse(a, 'm-n') a_n_sub_m = parse(a, 'n-m') a_2m_add_n = parse(a, '2m+n') a_2m_sub_n = parse(a, '2m-n') a_2n_sub_m = parse(a, '2n-m') b_m = parse(b, 'm') b_n = parse(b, 'n') b_m_add_n = parse(b, 'm+n') if a: raise ValueError("unsupported key: %r" % a.keys()[0]) if b: raise ValueError("unsupported key: %r" % b.keys()[0]) s = 0 outer = ctx.one m = ctx.mpf(0) ok_count = 0 prec = ctx.prec maxterms = kwargs.get('maxterms', 20*prec) try: ctx.prec += 10 tol = +ctx.eps while 1: inner_sign = 1 outer_sign = 1 inner_a = list(a_n) inner_b = list(b_n) outer_a = [a+m for a in a_m] outer_b = [b+m for b in b_m] # (a)_{m+n} = (a)_m (a+m)_n for a in a_m_add_n: a = a+m inner_a.append(a) outer_a.append(a) # (b)_{m+n} = (b)_m (b+m)_n for b in b_m_add_n: b = b+m inner_b.append(b) outer_b.append(b) # (a)_{n-m} = (a-m)_n / (a-m)_m for a in a_n_sub_m: inner_a.append(a-m) outer_b.append(a-m-1) # (a)_{m-n} = (-1)^(m+n) (1-a-m)_m / (1-a-m)_n for a in a_m_sub_n: inner_sign *= (-1) outer_sign *= (-1)**(m) inner_b.append(1-a-m) outer_a.append(-a-m) # (a)_{2m+n} = (a)_{2m} (a+2m)_n for a in a_2m_add_n: inner_a.append(a+2*m) outer_a.append((a+2*m)*(1+a+2*m)) # (a)_{2m-n} = (-1)^(2m+n) (1-a-2m)_{2m} / (1-a-2m)_n for a in a_2m_sub_n: inner_sign *= (-1) inner_b.append(1-a-2*m) outer_a.append((a+2*m)*(1+a+2*m)) # (a)_{2n-m} = 4^n ((a-m)/2)_n ((a-m+1)/2)_n / (a-m)_m for a in a_2n_sub_m: inner_sign *= 4 inner_a.append(0.5*(a-m)) inner_a.append(0.5*(a-m+1)) outer_b.append(a-m-1) inner = ctx.hyper(inner_a, inner_b, inner_sign*y, zeroprec=ctx.prec, **kwargs) term = outer * inner * outer_sign if abs(term) < tol: ok_count += 1 else: ok_count = 0 if ok_count >= 3 or not outer: break s += term for a in outer_a: outer *= a for b in outer_b: outer /= b m += 1 outer = outer * x / m if m > maxterms: raise ctx.NoConvergence("maxterms exceeded in hyper2d") finally: ctx.prec = prec return +s """ @defun def kampe_de_feriet(ctx,a,b,c,d,e,f,x,y,**kwargs): return ctx.hyper2d({'m+n':a,'m':b,'n':c}, {'m+n':d,'m':e,'n':f}, x,y, **kwargs) """ @defun def bihyper(ctx, a_s, b_s, z, **kwargs): r""" Evaluates the bilateral hypergeometric series .. math :: \,_AH_B(a_1, \ldots, a_k; b_1, \ldots, b_B; z) = \sum_{n=-\infty}^{\infty} \frac{(a_1)_n \ldots (a_A)_n} {(b_1)_n \ldots (b_B)_n} \, z^n where, for direct convergence, `A = B` and `|z| = 1`, although a regularized sum exists more generally by considering the bilateral series as a sum of two ordinary hypergeometric functions. In order for the series to make sense, none of the parameters may be integers. **Examples** The value of `\,_2H_2` at `z = 1` is given by Dougall's formula:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a,b,c,d = 0.5, 1.5, 2.25, 3.25 >>> bihyper([a,b],[c,d],1) -14.49118026212345786148847 >>> gammaprod([c,d,1-a,1-b,c+d-a-b-1],[c-a,d-a,c-b,d-b]) -14.49118026212345786148847 The regularized function `\,_1H_0` can be expressed as the sum of one `\,_2F_0` function and one `\,_1F_1` function:: >>> a = mpf(0.25) >>> z = mpf(0.75) >>> bihyper([a], [], z) (0.2454393389657273841385582 + 0.2454393389657273841385582j) >>> hyper([a,1],[],z) + (hyper([1],[1-a],-1/z)-1) (0.2454393389657273841385582 + 0.2454393389657273841385582j) >>> hyper([a,1],[],z) + hyper([1],[2-a],-1/z)/z/(a-1) (0.2454393389657273841385582 + 0.2454393389657273841385582j) **References** 1. [Slater]_ (chapter 6: "Bilateral Series", pp. 180-189) 2. [Wikipedia]_ http://en.wikipedia.org/wiki/Bilateral_hypergeometric_series """ z = ctx.convert(z) c_s = a_s + b_s p = len(a_s) q = len(b_s) if (p, q) == (0,0) or (p, q) == (1,1): return ctx.zero * z neg = (p-q) % 2 def h(*c_s): a_s = list(c_s[:p]) b_s = list(c_s[p:]) aa_s = [2-b for b in b_s] bb_s = [2-a for a in a_s] rp = [(-1)**neg * z] + [1-b for b in b_s] + [1-a for a in a_s] rc = [-1] + [1]*len(b_s) + [-1]*len(a_s) T1 = [], [], [], [], a_s + [1], b_s, z T2 = rp, rc, [], [], aa_s + [1], bb_s, (-1)**neg / z return T1, T2 return ctx.hypercomb(h, c_s, **kwargs) mpmath-1.0.0/mpmath/functions/orthogonal.py000066400000000000000000000373411316273626600210460ustar00rootroot00000000000000from .functions import defun, defun_wrapped def _hermite_param(ctx, n, z, parabolic_cylinder): """ Combined calculation of the Hermite polynomial H_n(z) (and its generalization to complex n) and the parabolic cylinder function D. """ n, ntyp = ctx._convert_param(n) z = ctx.convert(z) q = -ctx.mpq_1_2 # For re(z) > 0, 2F0 -- http://functions.wolfram.com/ # HypergeometricFunctions/HermiteHGeneral/06/02/0009/ # Otherwise, there is a reflection formula # 2F0 + http://functions.wolfram.com/HypergeometricFunctions/ # HermiteHGeneral/16/01/01/0006/ # # TODO: # An alternative would be to use # http://functions.wolfram.com/HypergeometricFunctions/ # HermiteHGeneral/06/02/0006/ # # Also, the 1F1 expansion # http://functions.wolfram.com/HypergeometricFunctions/ # HermiteHGeneral/26/01/02/0001/ # should probably be used for tiny z if not z: T1 = [2, ctx.pi], [n, 0.5], [], [q*(n-1)], [], [], 0 if parabolic_cylinder: T1[1][0] += q*n return T1, can_use_2f0 = ctx.isnpint(-n) or ctx.re(z) > 0 or \ (ctx.re(z) == 0 and ctx.im(z) > 0) expprec = ctx.prec*4 + 20 if parabolic_cylinder: u = ctx.fmul(ctx.fmul(z,z,prec=expprec), -0.25, exact=True) w = ctx.fmul(z, ctx.sqrt(0.5,prec=expprec), prec=expprec) else: w = z w2 = ctx.fmul(w, w, prec=expprec) rw2 = ctx.fdiv(1, w2, prec=expprec) nrw2 = ctx.fneg(rw2, exact=True) nw = ctx.fneg(w, exact=True) if can_use_2f0: T1 = [2, w], [n, n], [], [], [q*n, q*(n-1)], [], nrw2 terms = [T1] else: T1 = [2, nw], [n, n], [], [], [q*n, q*(n-1)], [], nrw2 T2 = [2, ctx.pi, nw], [n+2, 0.5, 1], [], [q*n], [q*(n-1)], [1-q], w2 terms = [T1,T2] # Multiply by prefactor for D_n if parabolic_cylinder: expu = ctx.exp(u) for i in range(len(terms)): terms[i][1][0] += q*n terms[i][0].append(expu) terms[i][1].append(1) return tuple(terms) @defun def hermite(ctx, n, z, **kwargs): return ctx.hypercomb(lambda: _hermite_param(ctx, n, z, 0), [], **kwargs) @defun def pcfd(ctx, n, z, **kwargs): r""" Gives the parabolic cylinder function in Whittaker's notation `D_n(z) = U(-n-1/2, z)` (see :func:`~mpmath.pcfu`). It solves the differential equation .. math :: y'' + \left(n + \frac{1}{2} - \frac{1}{4} z^2\right) y = 0. and can be represented in terms of Hermite polynomials (see :func:`~mpmath.hermite`) as .. math :: D_n(z) = 2^{-n/2} e^{-z^2/4} H_n\left(\frac{z}{\sqrt{2}}\right). **Plots** .. literalinclude :: /plots/pcfd.py .. image :: /plots/pcfd.png **Examples** >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> pcfd(0,0); pcfd(1,0); pcfd(2,0); pcfd(3,0) 1.0 0.0 -1.0 0.0 >>> pcfd(4,0); pcfd(-3,0) 3.0 0.6266570686577501256039413 >>> pcfd('1/2', 2+3j) (-5.363331161232920734849056 - 3.858877821790010714163487j) >>> pcfd(2, -10) 1.374906442631438038871515e-9 Verifying the differential equation:: >>> n = mpf(2.5) >>> y = lambda z: pcfd(n,z) >>> z = 1.75 >>> chop(diff(y,z,2) + (n+0.5-0.25*z**2)*y(z)) 0.0 Rational Taylor series expansion when `n` is an integer:: >>> taylor(lambda z: pcfd(5,z), 0, 7) [0.0, 15.0, 0.0, -13.75, 0.0, 3.96875, 0.0, -0.6015625] """ return ctx.hypercomb(lambda: _hermite_param(ctx, n, z, 1), [], **kwargs) @defun def pcfu(ctx, a, z, **kwargs): r""" Gives the parabolic cylinder function `U(a,z)`, which may be defined for `\Re(z) > 0` in terms of the confluent U-function (see :func:`~mpmath.hyperu`) by .. math :: U(a,z) = 2^{-\frac{1}{4}-\frac{a}{2}} e^{-\frac{1}{4} z^2} U\left(\frac{a}{2}+\frac{1}{4}, \frac{1}{2}, \frac{1}{2}z^2\right) or, for arbitrary `z`, .. math :: e^{-\frac{1}{4}z^2} U(a,z) = U(a,0) \,_1F_1\left(-\tfrac{a}{2}+\tfrac{1}{4}; \tfrac{1}{2}; -\tfrac{1}{2}z^2\right) + U'(a,0) z \,_1F_1\left(-\tfrac{a}{2}+\tfrac{3}{4}; \tfrac{3}{2}; -\tfrac{1}{2}z^2\right). **Examples** Connection to other functions:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> z = mpf(3) >>> pcfu(0.5,z) 0.03210358129311151450551963 >>> sqrt(pi/2)*exp(z**2/4)*erfc(z/sqrt(2)) 0.03210358129311151450551963 >>> pcfu(0.5,-z) 23.75012332835297233711255 >>> sqrt(pi/2)*exp(z**2/4)*erfc(-z/sqrt(2)) 23.75012332835297233711255 >>> pcfu(0.5,-z) 23.75012332835297233711255 >>> sqrt(pi/2)*exp(z**2/4)*erfc(-z/sqrt(2)) 23.75012332835297233711255 """ n, _ = ctx._convert_param(a) return ctx.pcfd(-n-ctx.mpq_1_2, z) @defun def pcfv(ctx, a, z, **kwargs): r""" Gives the parabolic cylinder function `V(a,z)`, which can be represented in terms of :func:`~mpmath.pcfu` as .. math :: V(a,z) = \frac{\Gamma(a+\tfrac{1}{2}) (U(a,-z)-\sin(\pi a) U(a,z)}{\pi}. **Examples** Wronskian relation between `U` and `V`:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a, z = 2, 3 >>> pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z) 0.7978845608028653558798921 >>> sqrt(2/pi) 0.7978845608028653558798921 >>> a, z = 2.5, 3 >>> pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z) 0.7978845608028653558798921 >>> a, z = 0.25, -1 >>> pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z) 0.7978845608028653558798921 >>> a, z = 2+1j, 2+3j >>> chop(pcfu(a,z)*diff(pcfv,(a,z),(0,1))-diff(pcfu,(a,z),(0,1))*pcfv(a,z)) 0.7978845608028653558798921 """ n, ntype = ctx._convert_param(a) z = ctx.convert(z) q = ctx.mpq_1_2 r = ctx.mpq_1_4 if ntype == 'Q' and ctx.isint(n*2): # Faster for half-integers def h(): jz = ctx.fmul(z, -1j, exact=True) T1terms = _hermite_param(ctx, -n-q, z, 1) T2terms = _hermite_param(ctx, n-q, jz, 1) for T in T1terms: T[0].append(1j) T[1].append(1) T[3].append(q-n) u = ctx.expjpi((q*n-r)) * ctx.sqrt(2/ctx.pi) for T in T2terms: T[0].append(u) T[1].append(1) return T1terms + T2terms v = ctx.hypercomb(h, [], **kwargs) if ctx._is_real_type(n) and ctx._is_real_type(z): v = ctx._re(v) return v else: def h(n): w = ctx.square_exp_arg(z, -0.25) u = ctx.square_exp_arg(z, 0.5) e = ctx.exp(w) l = [ctx.pi, q, ctx.exp(w)] Y1 = l, [-q, n*q+r, 1], [r-q*n], [], [q*n+r], [q], u Y2 = l + [z], [-q, n*q-r, 1, 1], [1-r-q*n], [], [q*n+1-r], [1+q], u c, s = ctx.cospi_sinpi(r+q*n) Y1[0].append(s) Y2[0].append(c) for Y in (Y1, Y2): Y[1].append(1) Y[3].append(q-n) return Y1, Y2 return ctx.hypercomb(h, [n], **kwargs) @defun def pcfw(ctx, a, z, **kwargs): r""" Gives the parabolic cylinder function `W(a,z)` defined in (DLMF 12.14). **Examples** Value at the origin:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> a = mpf(0.25) >>> pcfw(a,0) 0.9722833245718180765617104 >>> power(2,-0.75)*sqrt(abs(gamma(0.25+0.5j*a)/gamma(0.75+0.5j*a))) 0.9722833245718180765617104 >>> diff(pcfw,(a,0),(0,1)) -0.5142533944210078966003624 >>> -power(2,-0.25)*sqrt(abs(gamma(0.75+0.5j*a)/gamma(0.25+0.5j*a))) -0.5142533944210078966003624 """ n, _ = ctx._convert_param(a) z = ctx.convert(z) def terms(): phi2 = ctx.arg(ctx.gamma(0.5 + ctx.j*n)) phi2 = (ctx.loggamma(0.5+ctx.j*n) - ctx.loggamma(0.5-ctx.j*n))/2j rho = ctx.pi/8 + 0.5*phi2 # XXX: cancellation computing k k = ctx.sqrt(1 + ctx.exp(2*ctx.pi*n)) - ctx.exp(ctx.pi*n) C = ctx.sqrt(k/2) * ctx.exp(0.25*ctx.pi*n) yield C * ctx.expj(rho) * ctx.pcfu(ctx.j*n, z*ctx.expjpi(-0.25)) yield C * ctx.expj(-rho) * ctx.pcfu(-ctx.j*n, z*ctx.expjpi(0.25)) v = ctx.sum_accurately(terms) if ctx._is_real_type(n) and ctx._is_real_type(z): v = ctx._re(v) return v """ Even/odd PCFs. Useful? @defun def pcfy1(ctx, a, z, **kwargs): a, _ = ctx._convert_param(n) z = ctx.convert(z) def h(): w = ctx.square_exp_arg(z) w1 = ctx.fmul(w, -0.25, exact=True) w2 = ctx.fmul(w, 0.5, exact=True) e = ctx.exp(w1) return [e], [1], [], [], [ctx.mpq_1_2*a+ctx.mpq_1_4], [ctx.mpq_1_2], w2 return ctx.hypercomb(h, [], **kwargs) @defun def pcfy2(ctx, a, z, **kwargs): a, _ = ctx._convert_param(n) z = ctx.convert(z) def h(): w = ctx.square_exp_arg(z) w1 = ctx.fmul(w, -0.25, exact=True) w2 = ctx.fmul(w, 0.5, exact=True) e = ctx.exp(w1) return [e, z], [1, 1], [], [], [ctx.mpq_1_2*a+ctx.mpq_3_4], \ [ctx.mpq_3_2], w2 return ctx.hypercomb(h, [], **kwargs) """ @defun_wrapped def gegenbauer(ctx, n, a, z, **kwargs): # Special cases: a+0.5, a*2 poles if ctx.isnpint(a): return 0*(z+n) if ctx.isnpint(a+0.5): # TODO: something else is required here # E.g.: gegenbauer(-2, -0.5, 3) == -12 if ctx.isnpint(n+1): raise NotImplementedError("Gegenbauer function with two limits") def h(a): a2 = 2*a T = [], [], [n+a2], [n+1, a2], [-n, n+a2], [a+0.5], 0.5*(1-z) return [T] return ctx.hypercomb(h, [a], **kwargs) def h(n): a2 = 2*a T = [], [], [n+a2], [n+1, a2], [-n, n+a2], [a+0.5], 0.5*(1-z) return [T] return ctx.hypercomb(h, [n], **kwargs) @defun_wrapped def jacobi(ctx, n, a, b, x, **kwargs): if not ctx.isnpint(a): def h(n): return (([], [], [a+n+1], [n+1, a+1], [-n, a+b+n+1], [a+1], (1-x)*0.5),) return ctx.hypercomb(h, [n], **kwargs) if not ctx.isint(b): def h(n, a): return (([], [], [-b], [n+1, -b-n], [-n, a+b+n+1], [b+1], (x+1)*0.5),) return ctx.hypercomb(h, [n, a], **kwargs) # XXX: determine appropriate limit return ctx.binomial(n+a,n) * ctx.hyp2f1(-n,1+n+a+b,a+1,(1-x)/2, **kwargs) @defun_wrapped def laguerre(ctx, n, a, z, **kwargs): # XXX: limits, poles #if ctx.isnpint(n): # return 0*(a+z) def h(a): return (([], [], [a+n+1], [a+1, n+1], [-n], [a+1], z),) return ctx.hypercomb(h, [a], **kwargs) @defun_wrapped def legendre(ctx, n, x, **kwargs): if ctx.isint(n): n = int(n) # Accuracy near zeros if (n + (n < 0)) & 1: if not x: return x mag = ctx.mag(x) if mag < -2*ctx.prec-10: return x if mag < -5: ctx.prec += -mag return ctx.hyp2f1(-n,n+1,1,(1-x)/2, **kwargs) @defun def legenp(ctx, n, m, z, type=2, **kwargs): # Legendre function, 1st kind n = ctx.convert(n) m = ctx.convert(m) # Faster if not m: return ctx.legendre(n, z, **kwargs) # TODO: correct evaluation at singularities if type == 2: def h(n,m): g = m*0.5 T = [1+z, 1-z], [g, -g], [], [1-m], [-n, n+1], [1-m], 0.5*(1-z) return (T,) return ctx.hypercomb(h, [n,m], **kwargs) if type == 3: def h(n,m): g = m*0.5 T = [z+1, z-1], [g, -g], [], [1-m], [-n, n+1], [1-m], 0.5*(1-z) return (T,) return ctx.hypercomb(h, [n,m], **kwargs) raise ValueError("requires type=2 or type=3") @defun def legenq(ctx, n, m, z, type=2, **kwargs): # Legendre function, 2nd kind n = ctx.convert(n) m = ctx.convert(m) z = ctx.convert(z) if z in (1, -1): #if ctx.isint(m): # return ctx.nan #return ctx.inf # unsigned return ctx.nan if type == 2: def h(n, m): cos, sin = ctx.cospi_sinpi(m) s = 2 * sin / ctx.pi c = cos a = 1+z b = 1-z u = m/2 w = (1-z)/2 T1 = [s, c, a, b], [-1, 1, u, -u], [], [1-m], \ [-n, n+1], [1-m], w T2 = [-s, a, b], [-1, -u, u], [n+m+1], [n-m+1, m+1], \ [-n, n+1], [m+1], w return T1, T2 return ctx.hypercomb(h, [n, m], **kwargs) if type == 3: # The following is faster when there only is a single series # Note: not valid for -1 < z < 0 (?) if abs(z) > 1: def h(n, m): T1 = [ctx.expjpi(m), 2, ctx.pi, z, z-1, z+1], \ [1, -n-1, 0.5, -n-m-1, 0.5*m, 0.5*m], \ [n+m+1], [n+1.5], \ [0.5*(2+n+m), 0.5*(1+n+m)], [n+1.5], z**(-2) return [T1] return ctx.hypercomb(h, [n, m], **kwargs) else: # not valid for 1 < z < inf ? def h(n, m): s = 2 * ctx.sinpi(m) / ctx.pi c = ctx.expjpi(m) a = 1+z b = z-1 u = m/2 w = (1-z)/2 T1 = [s, c, a, b], [-1, 1, u, -u], [], [1-m], \ [-n, n+1], [1-m], w T2 = [-s, c, a, b], [-1, 1, -u, u], [n+m+1], [n-m+1, m+1], \ [-n, n+1], [m+1], w return T1, T2 return ctx.hypercomb(h, [n, m], **kwargs) raise ValueError("requires type=2 or type=3") @defun_wrapped def chebyt(ctx, n, x, **kwargs): if (not x) and ctx.isint(n) and int(ctx._re(n)) % 2 == 1: return x * 0 return ctx.hyp2f1(-n,n,(1,2),(1-x)/2, **kwargs) @defun_wrapped def chebyu(ctx, n, x, **kwargs): if (not x) and ctx.isint(n) and int(ctx._re(n)) % 2 == 1: return x * 0 return (n+1) * ctx.hyp2f1(-n, n+2, (3,2), (1-x)/2, **kwargs) @defun def spherharm(ctx, l, m, theta, phi, **kwargs): l = ctx.convert(l) m = ctx.convert(m) theta = ctx.convert(theta) phi = ctx.convert(phi) l_isint = ctx.isint(l) l_natural = l_isint and l >= 0 m_isint = ctx.isint(m) if l_isint and l < 0 and m_isint: return ctx.spherharm(-(l+1), m, theta, phi, **kwargs) if theta == 0 and m_isint and m < 0: return ctx.zero * 1j if l_natural and m_isint: if abs(m) > l: return ctx.zero * 1j # http://functions.wolfram.com/Polynomials/ # SphericalHarmonicY/26/01/02/0004/ def h(l,m): absm = abs(m) C = [-1, ctx.expj(m*phi), (2*l+1)*ctx.fac(l+absm)/ctx.pi/ctx.fac(l-absm), ctx.sin(theta)**2, ctx.fac(absm), 2] P = [0.5*m*(ctx.sign(m)+1), 1, 0.5, 0.5*absm, -1, -absm-1] return ((C, P, [], [], [absm-l, l+absm+1], [absm+1], ctx.sin(0.5*theta)**2),) else: # http://functions.wolfram.com/HypergeometricFunctions/ # SphericalHarmonicYGeneral/26/01/02/0001/ def h(l,m): if ctx.isnpint(l-m+1) or ctx.isnpint(l+m+1) or ctx.isnpint(1-m): return (([0], [-1], [], [], [], [], 0),) cos, sin = ctx.cos_sin(0.5*theta) C = [0.5*ctx.expj(m*phi), (2*l+1)/ctx.pi, ctx.gamma(l-m+1), ctx.gamma(l+m+1), cos**2, sin**2] P = [1, 0.5, 0.5, -0.5, 0.5*m, -0.5*m] return ((C, P, [], [1-m], [-l,l+1], [1-m], sin**2),) return ctx.hypercomb(h, [l,m], **kwargs) mpmath-1.0.0/mpmath/functions/qfunctions.py000066400000000000000000000167361316273626600210700ustar00rootroot00000000000000from .functions import defun, defun_wrapped @defun def qp(ctx, a, q=None, n=None, **kwargs): r""" Evaluates the q-Pochhammer symbol (or q-rising factorial) .. math :: (a; q)_n = \prod_{k=0}^{n-1} (1-a q^k) where `n = \infty` is permitted if `|q| < 1`. Called with two arguments, ``qp(a,q)`` computes `(a;q)_{\infty}`; with a single argument, ``qp(q)`` computes `(q;q)_{\infty}`. The special case .. math :: \phi(q) = (q; q)_{\infty} = \prod_{k=1}^{\infty} (1-q^k) = \sum_{k=-\infty}^{\infty} (-1)^k q^{(3k^2-k)/2} is also known as the Euler function, or (up to a factor `q^{-1/24}`) the Dedekind eta function. **Examples** If `n` is a positive integer, the function amounts to a finite product:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> qp(2,3,5) -725305.0 >>> fprod(1-2*3**k for k in range(5)) -725305.0 >>> qp(2,3,0) 1.0 Complex arguments are allowed:: >>> qp(2-1j, 0.75j) (0.4628842231660149089976379 + 4.481821753552703090628793j) The regular Pochhammer symbol `(a)_n` is obtained in the following limit as `q \to 1`:: >>> a, n = 4, 7 >>> limit(lambda q: qp(q**a,q,n) / (1-q)**n, 1) 604800.0 >>> rf(a,n) 604800.0 The Taylor series of the reciprocal Euler function gives the partition function `P(n)`, i.e. the number of ways of writing `n` as a sum of positive integers:: >>> taylor(lambda q: 1/qp(q), 0, 10) [1.0, 1.0, 2.0, 3.0, 5.0, 7.0, 11.0, 15.0, 22.0, 30.0, 42.0] Special values include:: >>> qp(0) 1.0 >>> findroot(diffun(qp), -0.4) # location of maximum -0.4112484791779547734440257 >>> qp(_) 1.228348867038575112586878 The q-Pochhammer symbol is related to the Jacobi theta functions. For example, the following identity holds:: >>> q = mpf(0.5) # arbitrary >>> qp(q) 0.2887880950866024212788997 >>> root(3,-2)*root(q,-24)*jtheta(2,pi/6,root(q,6)) 0.2887880950866024212788997 """ a = ctx.convert(a) if n is None: n = ctx.inf else: n = ctx.convert(n) if n < 0: raise ValueError("n cannot be negative") if q is None: q = a else: q = ctx.convert(q) if n == 0: return ctx.one + 0*(a+q) infinite = (n == ctx.inf) same = (a == q) if infinite: if abs(q) >= 1: if same and (q == -1 or q == 1): return ctx.zero * q raise ValueError("q-function only defined for |q| < 1") elif q == 0: return ctx.one - a maxterms = kwargs.get('maxterms', 50*ctx.prec) if infinite and same: # Euler's pentagonal theorem def terms(): t = 1 yield t k = 1 x1 = q x2 = q**2 while 1: yield (-1)**k * x1 yield (-1)**k * x2 x1 *= q**(3*k+1) x2 *= q**(3*k+2) k += 1 if k > maxterms: raise ctx.NoConvergence return ctx.sum_accurately(terms) # return ctx.nprod(lambda k: 1-a*q**k, [0,n-1]) def factors(): k = 0 r = ctx.one while 1: yield 1 - a*r r *= q k += 1 if k >= n: raise StopIteration if k > maxterms: raise ctx.NoConvergence return ctx.mul_accurately(factors) @defun_wrapped def qgamma(ctx, z, q, **kwargs): r""" Evaluates the q-gamma function .. math :: \Gamma_q(z) = \frac{(q; q)_{\infty}}{(q^z; q)_{\infty}} (1-q)^{1-z}. **Examples** Evaluation for real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> qgamma(4,0.75) 4.046875 >>> qgamma(6,6) 121226245.0 >>> qgamma(3+4j, 0.5j) (0.1663082382255199834630088 + 0.01952474576025952984418217j) The q-gamma function satisfies a functional equation similar to that of the ordinary gamma function:: >>> q = mpf(0.25) >>> z = mpf(2.5) >>> qgamma(z+1,q) 1.428277424823760954685912 >>> (1-q**z)/(1-q)*qgamma(z,q) 1.428277424823760954685912 """ if abs(q) > 1: return ctx.qgamma(z,1/q)*q**((z-2)*(z-1)*0.5) return ctx.qp(q, q, None, **kwargs) / \ ctx.qp(q**z, q, None, **kwargs) * (1-q)**(1-z) @defun_wrapped def qfac(ctx, z, q, **kwargs): r""" Evaluates the q-factorial, .. math :: [n]_q! = (1+q)(1+q+q^2)\cdots(1+q+\cdots+q^{n-1}) or more generally .. math :: [z]_q! = \frac{(q;q)_z}{(1-q)^z}. **Examples** >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> qfac(0,0) 1.0 >>> qfac(4,3) 2080.0 >>> qfac(5,6) 121226245.0 >>> qfac(1+1j, 2+1j) (0.4370556551322672478613695 + 0.2609739839216039203708921j) """ if ctx.isint(z) and ctx._re(z) > 0: n = int(ctx._re(z)) return ctx.qp(q, q, n, **kwargs) / (1-q)**n return ctx.qgamma(z+1, q, **kwargs) @defun def qhyper(ctx, a_s, b_s, q, z, **kwargs): r""" Evaluates the basic hypergeometric series or hypergeometric q-series .. math :: \,_r\phi_s \left[\begin{matrix} a_1 & a_2 & \ldots & a_r \\ b_1 & b_2 & \ldots & b_s \end{matrix} ; q,z \right] = \sum_{n=0}^\infty \frac{(a_1;q)_n, \ldots, (a_r;q)_n} {(b_1;q)_n, \ldots, (b_s;q)_n} \left((-1)^n q^{n\choose 2}\right)^{1+s-r} \frac{z^n}{(q;q)_n} where `(a;q)_n` denotes the q-Pochhammer symbol (see :func:`~mpmath.qp`). **Examples** Evaluation works for real and complex arguments:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> qhyper([0.5], [2.25], 0.25, 4) -0.1975849091263356009534385 >>> qhyper([0.5], [2.25], 0.25-0.25j, 4) (2.806330244925716649839237 + 3.568997623337943121769938j) >>> qhyper([1+j], [2,3+0.5j], 0.25, 3+4j) (9.112885171773400017270226 - 1.272756997166375050700388j) Comparing with a summation of the defining series, using :func:`~mpmath.nsum`:: >>> b, q, z = 3, 0.25, 0.5 >>> qhyper([], [b], q, z) 0.6221136748254495583228324 >>> nsum(lambda n: z**n / qp(q,q,n)/qp(b,q,n) * q**(n*(n-1)), [0,inf]) 0.6221136748254495583228324 """ #a_s = [ctx._convert_param(a)[0] for a in a_s] #b_s = [ctx._convert_param(b)[0] for b in b_s] #q = ctx._convert_param(q)[0] a_s = [ctx.convert(a) for a in a_s] b_s = [ctx.convert(b) for b in b_s] q = ctx.convert(q) z = ctx.convert(z) r = len(a_s) s = len(b_s) d = 1+s-r maxterms = kwargs.get('maxterms', 50*ctx.prec) def terms(): t = ctx.one yield t qk = 1 k = 0 x = 1 while 1: for a in a_s: p = 1 - a*qk t *= p for b in b_s: p = 1 - b*qk if not p: raise ValueError t /= p t *= z x *= (-1)**d * qk ** d qk *= q t /= (1 - qk) k += 1 yield t * x if k > maxterms: raise ctx.NoConvergence return ctx.sum_accurately(terms) mpmath-1.0.0/mpmath/functions/rszeta.py000066400000000000000000001321501316273626600201740ustar00rootroot00000000000000""" --------------------------------------------------------------------- .. sectionauthor:: Juan Arias de Reyna This module implements zeta-related functions using the Riemann-Siegel expansion: zeta_offline(s,k=0) * coef(J, eps): Need in the computation of Rzeta(s,k) * Rzeta_simul(s, der=0) computes Rzeta^(k)(s) and Rzeta^(k)(1-s) simultaneously for 0 <= k <= der. Used by zeta_offline and z_offline * Rzeta_set(s, derivatives) computes Rzeta^(k)(s) for given derivatives, used by z_half(t,k) and zeta_half * z_offline(w,k): Z(w) and its derivatives of order k <= 4 * z_half(t,k): Z(t) (Riemann Siegel function) and its derivatives of order k <= 4 * zeta_offline(s): zeta(s) and its derivatives of order k<= 4 * zeta_half(1/2+it,k): zeta(s) and its derivatives of order k<= 4 * rs_zeta(s,k=0) Computes zeta^(k)(s) Unifies zeta_half and zeta_offline * rs_z(w,k=0) Computes Z^(k)(w) Unifies z_offline and z_half ---------------------------------------------------------------------- This program uses Riemann-Siegel expansion even to compute zeta(s) on points s = sigma + i t with sigma arbitrary not necessarily equal to 1/2. It is founded on a new deduction of the formula, with rigorous and sharp bounds for the terms and rest of this expansion. More information on the papers: J. Arias de Reyna, High Precision Computation of Riemann's Zeta Function by the Riemann-Siegel Formula I, II We refer to them as I, II. In them we shall find detailed explanation of all the procedure. The program uses Riemann-Siegel expansion. This is useful when t is big, ( say t > 10000 ). The precision is limited, roughly it can compute zeta(sigma+it) with an error less than exp(-c t) for some constant c depending on sigma. The program gives an error when the Riemann-Siegel formula can not compute to the wanted precision. """ import math class RSCache(object): def __init__(ctx): ctx._rs_cache = [0, 10, {}, {}] from .functions import defun #-------------------------------------------------------------------------------# # # # coef(ctx, J, eps, _cache=[0, 10, {} ] ) # # # #-------------------------------------------------------------------------------# # This function computes the coefficients c[n] defined on (I, equation (47)) # but see also (II, section 3.14). # # Since these coefficients are very difficult to compute we save the values # in a cache. So if we compute several values of the functions Rzeta(s) for # near values of s, we do not recompute these coefficients. # # c[n] are the Taylor coefficients of the function: # # F(z):= (exp(pi*j*(z*z/2+3/8))-j* sqrt(2) cos(pi*z/2))/(2*cos(pi *z)) # # def _coef(ctx, J, eps): r""" Computes the coefficients `c_n` for `0\le n\le 2J` with error less than eps **Definition** The coefficients c_n are defined by .. math :: \begin{equation} F(z)=\frac{e^{\pi i \bigl(\frac{z^2}{2}+\frac38\bigr)}-i\sqrt{2}\cos\frac{\pi}{2}z}{2\cos\pi z}=\sum_{n=0}^\infty c_{2n} z^{2n} \end{equation} they are computed applying the relation .. math :: \begin{multline} c_{2n}=-\frac{i}{\sqrt{2}}\Bigl(\frac{\pi}{2}\Bigr)^{2n} \sum_{k=0}^n\frac{(-1)^k}{(2k)!} 2^{2n-2k}\frac{(-1)^{n-k}E_{2n-2k}}{(2n-2k)!}+\\ +e^{3\pi i/8}\sum_{j=0}^n(-1)^j\frac{ E_{2j}}{(2j)!}\frac{i^{n-j}\pi^{n+j}}{(n-j)!2^{n-j+1}}. \end{multline} """ newJ = J+2 # compute more coefficients that are needed neweps6 = eps/2. # compute with a slight more precision that are needed # PREPARATION FOR THE COMPUTATION OF V(N) AND W(N) # See II Section 3.16 # # Computing the exponent wpvw of the error II equation (81) wpvw = max(ctx.mag(10*(newJ+3)), 4*newJ+5-ctx.mag(neweps6)) # Preparation of Euler numbers (we need until the 2*RS_NEWJ) E = ctx._eulernum(2*newJ) # Now we have in the cache all the needed Euler numbers. # # Computing the powers of pi # # We need to compute the powers pi**n for 1<= n <= 2*J # with relative error less than 2**(-wpvw) # it is easy to show that this is obtained # taking wppi as the least d with # 2**d>40*J and 2**d> 4.24 *newJ + 2**wpvw # In II Section 3.9 we need also that # wppi > wptcoef[0], and that the powers # here computed 0<= k <= 2*newJ are more # than those needed there that are 2*L-2. # so we need J >= L this will be checked # before computing tcoef[] wppi = max(ctx.mag(40*newJ), ctx.mag(newJ)+3 +wpvw) ctx.prec = wppi pipower = {} pipower[0] = ctx.one pipower[1] = ctx.pi for n in range(2,2*newJ+1): pipower[n] = pipower[n-1]*ctx.pi # COMPUTING THE COEFFICIENTS v(n) AND w(n) # see II equation (61) and equations (81) and (82) ctx.prec = wpvw+2 v={} w={} for n in range(0,newJ+1): va = (-1)**n * ctx._eulernum(2*n) va = ctx.mpf(va)/ctx.fac(2*n) v[n]=va*pipower[2*n] for n in range(0,2*newJ+1): wa = ctx.one/ctx.fac(n) wa=wa/(2**n) w[n]=wa*pipower[n] # COMPUTATION OF THE CONVOLUTIONS RS_P1 AND RS_P2 # See II Section 3.16 ctx.prec = 15 wpp1a = 9 - ctx.mag(neweps6) P1 = {} for n in range(0,newJ+1): ctx.prec = 15 wpp1 = max(ctx.mag(10*(n+4)),4*n+wpp1a) ctx.prec = wpp1 sump = 0 for k in range(0,n+1): sump += ((-1)**k) * v[k]*w[2*n-2*k] P1[n]=((-1)**(n+1))*ctx.j*sump P2={} for n in range(0,newJ+1): ctx.prec = 15 wpp2 = max(ctx.mag(10*(n+4)),4*n+wpp1a) ctx.prec = wpp2 sump = 0 for k in range(0,n+1): sump += (ctx.j**(n-k)) * v[k]*w[n-k] P2[n]=sump # COMPUTING THE COEFFICIENTS c[2n] # See II Section 3.14 ctx.prec = 15 wpc0 = 5 - ctx.mag(neweps6) wpc = max(6,4*newJ+wpc0) ctx.prec = wpc mu = ctx.sqrt(ctx.mpf('2'))/2 nu = ctx.expjpi(3./8)/2 c={} for n in range(0,newJ): ctx.prec = 15 wpc = max(6,4*n+wpc0) ctx.prec = wpc c[2*n] = mu*P1[n]+nu*P2[n] for n in range(1,2*newJ,2): c[n] = 0 return [newJ, neweps6, c, pipower] def coef(ctx, J, eps): _cache = ctx._rs_cache if J <= _cache[0] and eps >= _cache[1]: return _cache[2], _cache[3] orig = ctx._mp.prec try: data = _coef(ctx._mp, J, eps) finally: ctx._mp.prec = orig if ctx is not ctx._mp: data[2] = dict((k,ctx.convert(v)) for (k,v) in data[2].items()) data[3] = dict((k,ctx.convert(v)) for (k,v) in data[3].items()) ctx._rs_cache[:] = data return ctx._rs_cache[2], ctx._rs_cache[3] #-------------------------------------------------------------------------------# # # # Rzeta_simul(s,k=0) # # # #-------------------------------------------------------------------------------# # This function return a list with the values: # Rzeta(sigma+it), conj(Rzeta(1-sigma+it)),Rzeta'(sigma+it), conj(Rzeta'(1-sigma+it)), # .... , Rzeta^{(k)}(sigma+it), conj(Rzeta^{(k)}(1-sigma+it)) # # Useful to compute the function zeta(s) and Z(w) or its derivatives. # def aux_M_Fp(ctx, xA, xeps4, a, xB1, xL): # COMPUTING M NUMBER OF DERIVATIVES Fp[m] TO COMPUTE # See II Section 3.11 equations (47) and (48) aux1 = 126.0657606*xA/xeps4 # 126.06.. = 316/sqrt(2*pi) aux1 = ctx.ln(aux1) aux2 = (2*ctx.ln(ctx.pi)+ctx.ln(xB1)+ctx.ln(a))/3 -ctx.ln(2*ctx.pi)/2 m = 3*xL-3 aux3= (ctx.loggamma(m+1)-ctx.loggamma(m/3.0+2))/2 -ctx.loggamma((m+1)/2.) while((aux1 < m*aux2+ aux3)and (m>1)): m = m - 1 aux3 = (ctx.loggamma(m+1)-ctx.loggamma(m/3.0+2))/2 -ctx.loggamma((m+1)/2.) xM = m return xM def aux_J_needed(ctx, xA, xeps4, a, xB1, xM): # DETERMINATION OF J THE NUMBER OF TERMS NEEDED # IN THE TAYLOR SERIES OF F. # See II Section 3.11 equation (49)) # Only determine one h1 = xeps4/(632*xA) h2 = xB1*a * 126.31337419529260248 # = pi^2*e^2*sqrt(3) h2 = h1 * ctx.power((h2/xM**2),(xM-1)/3) / xM h3 = min(h1,h2) return h3 def Rzeta_simul(ctx, s, der=0): # First we take the value of ctx.prec wpinitial = ctx.prec # INITIALIZATION # Take the real and imaginary part of s t = ctx._im(s) xsigma = ctx._re(s) ysigma = 1 - xsigma # Now compute several parameter that appear on the program ctx.prec = 15 a = ctx.sqrt(t/(2*ctx.pi)) xasigma = a ** xsigma yasigma = a ** ysigma # We need a simple bound A1 < asigma (see II Section 3.1 and 3.3) xA1=ctx.power(2, ctx.mag(xasigma)-1) yA1=ctx.power(2, ctx.mag(yasigma)-1) # We compute various epsilon's (see II end of Section 3.1) eps = ctx.power(2, -wpinitial) eps1 = eps/6. xeps2 = eps * xA1/3. yeps2 = eps * yA1/3. # COMPUTING SOME COEFFICIENTS THAT DEPENDS # ON sigma # constant b and c (see I Theorem 2 formula (26) ) # coefficients A and B1 (see I Section 6.1 equation (50)) # # here we not need high precision ctx.prec = 15 if xsigma > 0: xb = 2. xc = math.pow(9,xsigma)/4.44288 # 4.44288 =(math.sqrt(2)*math.pi) xA = math.pow(9,xsigma) xB1 = 1 else: xb = 2.25158 # math.sqrt( (3-2* math.log(2))*math.pi ) xc = math.pow(2,-xsigma)/4.44288 xA = math.pow(2,-xsigma) xB1 = 1.10789 # = 2*sqrt(1-log(2)) if(ysigma > 0): yb = 2. yc = math.pow(9,ysigma)/4.44288 # 4.44288 =(math.sqrt(2)*math.pi) yA = math.pow(9,ysigma) yB1 = 1 else: yb = 2.25158 # math.sqrt( (3-2* math.log(2))*math.pi ) yc = math.pow(2,-ysigma)/4.44288 yA = math.pow(2,-ysigma) yB1 = 1.10789 # = 2*sqrt(1-log(2)) # COMPUTING L THE NUMBER OF TERMS NEEDED IN THE RIEMANN-SIEGEL # CORRECTION # See II Section 3.2 ctx.prec = 15 xL = 1 while 3*xc*ctx.gamma(xL*0.5) * ctx.power(xb*a,-xL) >= xeps2: xL = xL+1 xL = max(2,xL) yL = 1 while 3*yc*ctx.gamma(yL*0.5) * ctx.power(yb*a,-yL) >= yeps2: yL = yL+1 yL = max(2,yL) # The number L has to satify some conditions. # If not RS can not compute Rzeta(s) with the prescribed precision # (see II, Section 3.2 condition (20) ) and # (II, Section 3.3 condition (22) ). Also we have added # an additional technical condition in Section 3.17 Proposition 17 if ((3*xL >= 2*a*a/25.) or (3*xL+2+xsigma<0) or (abs(xsigma) > a/2.) or \ (3*yL >= 2*a*a/25.) or (3*yL+2+ysigma<0) or (abs(ysigma) > a/2.)): ctx.prec = wpinitial raise NotImplementedError("Riemann-Siegel can not compute with such precision") # We take the maximum of the two values L = max(xL, yL) # INITIALIZATION (CONTINUATION) # # eps3 is the constant defined on (II, Section 3.5 equation (27) ) # each term of the RS correction must be computed with error <= eps3 xeps3 = xeps2/(4*xL) yeps3 = yeps2/(4*yL) # eps4 is defined on (II Section 3.6 equation (30) ) # each component of the formula (II Section 3.6 equation (29) ) # must be computed with error <= eps4 xeps4 = xeps3/(3*xL) yeps4 = yeps3/(3*yL) # COMPUTING M NUMBER OF DERIVATIVES Fp[m] TO COMPUTE xM = aux_M_Fp(ctx, xA, xeps4, a, xB1, xL) yM = aux_M_Fp(ctx, yA, yeps4, a, yB1, yL) M = max(xM, yM) # COMPUTING NUMBER OF TERMS J NEEDED h3 = aux_J_needed(ctx, xA, xeps4, a, xB1, xM) h4 = aux_J_needed(ctx, yA, yeps4, a, yB1, yM) h3 = min(h3,h4) J = 12 jvalue = (2*ctx.pi)**J / ctx.gamma(J+1) while jvalue > h3: J = J+1 jvalue = (2*ctx.pi)*jvalue/J # COMPUTING eps5[m] for 1 <= m <= 21 # See II Section 10 equation (43) # We choose the minimum of the two possibilities eps5={} xforeps5 = math.pi*math.pi*xB1*a yforeps5 = math.pi*math.pi*yB1*a for m in range(0,22): xaux1 = math.pow(xforeps5, m/3)/(316.*xA) yaux1 = math.pow(yforeps5, m/3)/(316.*yA) aux1 = min(xaux1, yaux1) aux2 = ctx.gamma(m+1)/ctx.gamma(m/3.0+0.5) aux2 = math.sqrt(aux2) eps5[m] = (aux1*aux2*min(xeps4,yeps4)) # COMPUTING wpfp # See II Section 3.13 equation (59) twenty = min(3*L-3, 21)+1 aux = 6812*J wpfp = ctx.mag(44*J) for m in range(0,twenty): wpfp = max(wpfp, ctx.mag(aux*ctx.gamma(m+1)/eps5[m])) # COMPUTING N AND p # See II Section ctx.prec = wpfp + ctx.mag(t)+20 a = ctx.sqrt(t/(2*ctx.pi)) N = ctx.floor(a) p = 1-2*(a-N) # now we get a rounded version of p # to the precision wpfp # this possibly is not necessary num=ctx.floor(p*(ctx.mpf('2')**wpfp)) difference = p * (ctx.mpf('2')**wpfp)-num if (difference < 0.5): num = num else: num = num+1 p = ctx.convert(num * (ctx.mpf('2')**(-wpfp))) # COMPUTING THE COEFFICIENTS c[n] = cc[n] # We shall use the notation cc[n], since there is # a constant that is called c # See II Section 3.14 # We compute the coefficients and also save then in a # cache. The bulk of the computation is passed to # the function coef() # # eps6 is defined in II Section 3.13 equation (58) eps6 = ctx.power(ctx.convert(2*ctx.pi), J)/(ctx.gamma(J+1)*3*J) # Now we compute the coefficients cc = {} cont = {} cont, pipowers = coef(ctx, J, eps6) cc=cont.copy() # we need a copy since we have to change his values. Fp={} # this is the adequate locus of this for n in range(M, 3*L-2): Fp[n] = 0 Fp={} ctx.prec = wpfp for m in range(0,M+1): sumP = 0 for k in range(2*J-m-1,-1,-1): sumP = (sumP * p)+ cc[k] Fp[m] = sumP # preparation of the new coefficients for k in range(0,2*J-m-1): cc[k] = (k+1)* cc[k+1] # COMPUTING THE NUMBERS xd[u,n,k], yd[u,n,k] # See II Section 3.17 # # First we compute the working precisions xwpd[k] # Se II equation (92) xwpd={} d1 = max(6,ctx.mag(40*L*L)) xd2 = 13+ctx.mag((1+abs(xsigma))*xA)-ctx.mag(xeps4)-1 xconst = ctx.ln(8/(ctx.pi*ctx.pi*a*a*xB1*xB1)) /2 for n in range(0,L): xd3 = ctx.mag(ctx.sqrt(ctx.gamma(n-0.5)))-ctx.floor(n*xconst)+xd2 xwpd[n]=max(xd3,d1) # procedure of II Section 3.17 ctx.prec = xwpd[1]+10 xpsigma = 1-(2*xsigma) xd = {} xd[0,0,-2]=0; xd[0,0,-1]=0; xd[0,0,0]=1; xd[0,0,1]=0 xd[0,-1,-2]=0; xd[0,-1,-1]=0; xd[0,-1,0]=1; xd[0,-1,1]=0 for n in range(1,L): ctx.prec = xwpd[n]+10 for k in range(0,3*n//2+1): m = 3*n-2*k if(m!=0): m1 = ctx.one/m c1= m1/4 c2=(xpsigma*m1)/2 c3=-(m+1) xd[0,n,k]=c3*xd[0,n-1,k-2]+c1*xd[0,n-1,k]+c2*xd[0,n-1,k-1] else: xd[0,n,k]=0 for r in range(0,k): add=xd[0,n,r]*(ctx.mpf('1.0')*ctx.fac(2*k-2*r)/ctx.fac(k-r)) xd[0,n,k] -= ((-1)**(k-r))*add xd[0,n,-2]=0; xd[0,n,-1]=0; xd[0,n,3*n//2+1]=0 for mu in range(-2,der+1): for n in range(-2,L): for k in range(-3,max(1,3*n//2+2)): if( (mu<0)or (n<0) or(k<0)or (k>3*n//2)): xd[mu,n,k] = 0 for mu in range(1,der+1): for n in range(0,L): ctx.prec = xwpd[n]+10 for k in range(0,3*n//2+1): aux=(2*mu-2)*xd[mu-2,n-2,k-3]+2*(xsigma+n-2)*xd[mu-1,n-2,k-3] xd[mu,n,k] = aux - xd[mu-1,n-1,k-1] # Now we compute the working precisions ywpd[k] # Se II equation (92) ywpd={} d1 = max(6,ctx.mag(40*L*L)) yd2 = 13+ctx.mag((1+abs(ysigma))*yA)-ctx.mag(yeps4)-1 yconst = ctx.ln(8/(ctx.pi*ctx.pi*a*a*yB1*yB1)) /2 for n in range(0,L): yd3 = ctx.mag(ctx.sqrt(ctx.gamma(n-0.5)))-ctx.floor(n*yconst)+yd2 ywpd[n]=max(yd3,d1) # procedure of II Section 3.17 ctx.prec = ywpd[1]+10 ypsigma = 1-(2*ysigma) yd = {} yd[0,0,-2]=0; yd[0,0,-1]=0; yd[0,0,0]=1; yd[0,0,1]=0 yd[0,-1,-2]=0; yd[0,-1,-1]=0; yd[0,-1,0]=1; yd[0,-1,1]=0 for n in range(1,L): ctx.prec = ywpd[n]+10 for k in range(0,3*n//2+1): m = 3*n-2*k if(m!=0): m1 = ctx.one/m c1= m1/4 c2=(ypsigma*m1)/2 c3=-(m+1) yd[0,n,k]=c3*yd[0,n-1,k-2]+c1*yd[0,n-1,k]+c2*yd[0,n-1,k-1] else: yd[0,n,k]=0 for r in range(0,k): add=yd[0,n,r]*(ctx.mpf('1.0')*ctx.fac(2*k-2*r)/ctx.fac(k-r)) yd[0,n,k] -= ((-1)**(k-r))*add yd[0,n,-2]=0; yd[0,n,-1]=0; yd[0,n,3*n//2+1]=0 for mu in range(-2,der+1): for n in range(-2,L): for k in range(-3,max(1,3*n//2+2)): if( (mu<0)or (n<0) or(k<0)or (k>3*n//2)): yd[mu,n,k] = 0 for mu in range(1,der+1): for n in range(0,L): ctx.prec = ywpd[n]+10 for k in range(0,3*n//2+1): aux=(2*mu-2)*yd[mu-2,n-2,k-3]+2*(ysigma+n-2)*yd[mu-1,n-2,k-3] yd[mu,n,k] = aux - yd[mu-1,n-1,k-1] # COMPUTING THE COEFFICIENTS xtcoef[k,l] # See II Section 3.9 # # computing the needed wp xwptcoef={} xwpterm={} ctx.prec = 15 c1 = ctx.mag(40*(L+2)) xc2 = ctx.mag(68*(L+2)*xA) xc4 = ctx.mag(xB1*a*math.sqrt(ctx.pi))-1 for k in range(0,L): xc3 = xc2 - k*xc4+ctx.mag(ctx.fac(k+0.5))/2. xwptcoef[k] = (max(c1,xc3-ctx.mag(xeps4)+1)+1 +20)*1.5 xwpterm[k] = (max(c1,ctx.mag(L+2)+xc3-ctx.mag(xeps3)+1)+1 +20) ywptcoef={} ywpterm={} ctx.prec = 15 c1 = ctx.mag(40*(L+2)) yc2 = ctx.mag(68*(L+2)*yA) yc4 = ctx.mag(yB1*a*math.sqrt(ctx.pi))-1 for k in range(0,L): yc3 = yc2 - k*yc4+ctx.mag(ctx.fac(k+0.5))/2. ywptcoef[k] = ((max(c1,yc3-ctx.mag(yeps4)+1))+10)*1.5 ywpterm[k] = (max(c1,ctx.mag(L+2)+yc3-ctx.mag(yeps3)+1)+1)+10 # check of power of pi # computing the fortcoef[mu,k,ell] xfortcoef={} for mu in range(0,der+1): for k in range(0,L): for ell in range(-2,3*k//2+1): xfortcoef[mu,k,ell]=0 for mu in range(0,der+1): for k in range(0,L): ctx.prec = xwptcoef[k] for ell in range(0,3*k//2+1): xfortcoef[mu,k,ell]=xd[mu,k,ell]*Fp[3*k-2*ell]/pipowers[2*k-ell] xfortcoef[mu,k,ell]=xfortcoef[mu,k,ell]/((2*ctx.j)**ell) def trunc_a(t): wp = ctx.prec ctx.prec = wp + 2 aa = ctx.sqrt(t/(2*ctx.pi)) ctx.prec = wp return aa # computing the tcoef[k,ell] xtcoef={} for mu in range(0,der+1): for k in range(0,L): for ell in range(-2,3*k//2+1): xtcoef[mu,k,ell]=0 ctx.prec = max(xwptcoef[0],ywptcoef[0])+3 aa= trunc_a(t) la = -ctx.ln(aa) for chi in range(0,der+1): for k in range(0,L): ctx.prec = xwptcoef[k] for ell in range(0,3*k//2+1): xtcoef[chi,k,ell] =0 for mu in range(0, chi+1): tcoefter=ctx.binomial(chi,mu)*ctx.power(la,mu)*xfortcoef[chi-mu,k,ell] xtcoef[chi,k,ell] += tcoefter # COMPUTING THE COEFFICIENTS ytcoef[k,l] # See II Section 3.9 # # computing the needed wp # check of power of pi # computing the fortcoef[mu,k,ell] yfortcoef={} for mu in range(0,der+1): for k in range(0,L): for ell in range(-2,3*k//2+1): yfortcoef[mu,k,ell]=0 for mu in range(0,der+1): for k in range(0,L): ctx.prec = ywptcoef[k] for ell in range(0,3*k//2+1): yfortcoef[mu,k,ell]=yd[mu,k,ell]*Fp[3*k-2*ell]/pipowers[2*k-ell] yfortcoef[mu,k,ell]=yfortcoef[mu,k,ell]/((2*ctx.j)**ell) # computing the tcoef[k,ell] ytcoef={} for chi in range(0,der+1): for k in range(0,L): for ell in range(-2,3*k//2+1): ytcoef[chi,k,ell]=0 for chi in range(0,der+1): for k in range(0,L): ctx.prec = ywptcoef[k] for ell in range(0,3*k//2+1): ytcoef[chi,k,ell] =0 for mu in range(0, chi+1): tcoefter=ctx.binomial(chi,mu)*ctx.power(la,mu)*yfortcoef[chi-mu,k,ell] ytcoef[chi,k,ell] += tcoefter # COMPUTING tv[k,ell] # See II Section 3.8 # # a has a good value ctx.prec = max(xwptcoef[0], ywptcoef[0])+2 av = {} av[0] = 1 av[1] = av[0]/a ctx.prec = max(xwptcoef[0],ywptcoef[0]) for k in range(2,L): av[k] = av[k-1] * av[1] # Computing the quotients xtv = {} for chi in range(0,der+1): for k in range(0,L): ctx.prec = xwptcoef[k] for ell in range(0,3*k//2+1): xtv[chi,k,ell] = xtcoef[chi,k,ell]* av[k] # Computing the quotients ytv = {} for chi in range(0,der+1): for k in range(0,L): ctx.prec = ywptcoef[k] for ell in range(0,3*k//2+1): ytv[chi,k,ell] = ytcoef[chi,k,ell]* av[k] # COMPUTING THE TERMS xterm[k] # See II Section 3.6 xterm = {} for chi in range(0,der+1): for n in range(0,L): ctx.prec = xwpterm[n] te = 0 for k in range(0, 3*n//2+1): te += xtv[chi,n,k] xterm[chi,n] = te # COMPUTING THE TERMS yterm[k] # See II Section 3.6 yterm = {} for chi in range(0,der+1): for n in range(0,L): ctx.prec = ywpterm[n] te = 0 for k in range(0, 3*n//2+1): te += ytv[chi,n,k] yterm[chi,n] = te # COMPUTING rssum # See II Section 3.5 xrssum={} ctx.prec=15 xrsbound = math.sqrt(ctx.pi) * xc /(xb*a) ctx.prec=15 xwprssum = ctx.mag(4.4*((L+3)**2)*xrsbound / xeps2) xwprssum = max(xwprssum, ctx.mag(10*(L+1))) ctx.prec = xwprssum for chi in range(0,der+1): xrssum[chi] = 0 for k in range(1,L+1): xrssum[chi] += xterm[chi,L-k] yrssum={} ctx.prec=15 yrsbound = math.sqrt(ctx.pi) * yc /(yb*a) ctx.prec=15 ywprssum = ctx.mag(4.4*((L+3)**2)*yrsbound / yeps2) ywprssum = max(ywprssum, ctx.mag(10*(L+1))) ctx.prec = ywprssum for chi in range(0,der+1): yrssum[chi] = 0 for k in range(1,L+1): yrssum[chi] += yterm[chi,L-k] # COMPUTING S3 # See II Section 3.19 ctx.prec = 15 A2 = 2**(max(ctx.mag(abs(xrssum[0])), ctx.mag(abs(yrssum[0])))) eps8 = eps/(3*A2) T = t *ctx.ln(t/(2*ctx.pi)) xwps3 = 5 + ctx.mag((1+(2/eps8)*ctx.power(a,-xsigma))*T) ywps3 = 5 + ctx.mag((1+(2/eps8)*ctx.power(a,-ysigma))*T) ctx.prec = max(xwps3, ywps3) tpi = t/(2*ctx.pi) arg = (t/2)*ctx.ln(tpi)-(t/2)-ctx.pi/8 U = ctx.expj(-arg) a = trunc_a(t) xasigma = ctx.power(a, -xsigma) yasigma = ctx.power(a, -ysigma) xS3 = ((-1)**(N-1)) * xasigma * U yS3 = ((-1)**(N-1)) * yasigma * U # COMPUTING S1 the zetasum # See II Section 3.18 ctx.prec = 15 xwpsum = 4+ ctx.mag((N+ctx.power(N,1-xsigma))*ctx.ln(N) /eps1) ywpsum = 4+ ctx.mag((N+ctx.power(N,1-ysigma))*ctx.ln(N) /eps1) wpsum = max(xwpsum, ywpsum) ctx.prec = wpsum +10 ''' # This can be improved xS1={} yS1={} for chi in range(0,der+1): xS1[chi] = 0 yS1[chi] = 0 for n in range(1,int(N)+1): ln = ctx.ln(n) xexpn = ctx.exp(-ln*(xsigma+ctx.j*t)) yexpn = ctx.conj(1/(n*xexpn)) for chi in range(0,der+1): pown = ctx.power(-ln, chi) xterm = pown*xexpn yterm = pown*yexpn xS1[chi] += xterm yS1[chi] += yterm ''' xS1, yS1 = ctx._zetasum(s, 1, int(N)-1, range(0,der+1), True) # END OF COMPUTATION of xrz, yrz # See II Section 3.1 ctx.prec = 15 xabsS1 = abs(xS1[der]) xabsS2 = abs(xrssum[der] * xS3) xwpend = max(6, wpinitial+ctx.mag(6*(3*xabsS1+7*xabsS2) ) ) ctx.prec = xwpend xrz={} for chi in range(0,der+1): xrz[chi] = xS1[chi]+xrssum[chi]*xS3 ctx.prec = 15 yabsS1 = abs(yS1[der]) yabsS2 = abs(yrssum[der] * yS3) ywpend = max(6, wpinitial+ctx.mag(6*(3*yabsS1+7*yabsS2) ) ) ctx.prec = ywpend yrz={} for chi in range(0,der+1): yrz[chi] = yS1[chi]+yrssum[chi]*yS3 yrz[chi] = ctx.conj(yrz[chi]) ctx.prec = wpinitial return xrz, yrz def Rzeta_set(ctx, s, derivatives=[0]): r""" Computes several derivatives of the auxiliary function of Riemann `R(s)`. **Definition** The function is defined by .. math :: \begin{equation} {\mathop{\mathcal R }\nolimits}(s)= \int_{0\swarrow1}\frac{x^{-s} e^{\pi i x^2}}{e^{\pi i x}- e^{-\pi i x}}\,dx \end{equation} To this function we apply the Riemann-Siegel expansion. """ der = max(derivatives) # First we take the value of ctx.prec # During the computation we will change ctx.prec, and finally we will # restaurate the initial value wpinitial = ctx.prec # Take the real and imaginary part of s t = ctx._im(s) sigma = ctx._re(s) # Now compute several parameter that appear on the program ctx.prec = 15 a = ctx.sqrt(t/(2*ctx.pi)) # Careful asigma = ctx.power(a, sigma) # Careful # We need a simple bound A1 < asigma (see II Section 3.1 and 3.3) A1 = ctx.power(2, ctx.mag(asigma)-1) # We compute various epsilon's (see II end of Section 3.1) eps = ctx.power(2, -wpinitial) eps1 = eps/6. eps2 = eps * A1/3. # COMPUTING SOME COEFFICIENTS THAT DEPENDS # ON sigma # constant b and c (see I Theorem 2 formula (26) ) # coefficients A and B1 (see I Section 6.1 equation (50)) # here we not need high precision ctx.prec = 15 if sigma > 0: b = 2. c = math.pow(9,sigma)/4.44288 # 4.44288 =(math.sqrt(2)*math.pi) A = math.pow(9,sigma) B1 = 1 else: b = 2.25158 # math.sqrt( (3-2* math.log(2))*math.pi ) c = math.pow(2,-sigma)/4.44288 A = math.pow(2,-sigma) B1 = 1.10789 # = 2*sqrt(1-log(2)) # COMPUTING L THE NUMBER OF TERMS NEEDED IN THE RIEMANN-SIEGEL # CORRECTION # See II Section 3.2 ctx.prec = 15 L = 1 while 3*c*ctx.gamma(L*0.5) * ctx.power(b*a,-L) >= eps2: L = L+1 L = max(2,L) # The number L has to satify some conditions. # If not RS can not compute Rzeta(s) with the prescribed precision # (see II, Section 3.2 condition (20) ) and # (II, Section 3.3 condition (22) ). Also we have added # an additional technical condition in Section 3.17 Proposition 17 if ((3*L >= 2*a*a/25.) or (3*L+2+sigma<0) or (abs(sigma)> a/2.)): #print 'Error Riemann-Siegel can not compute with such precision' ctx.prec = wpinitial raise NotImplementedError("Riemann-Siegel can not compute with such precision") # INITIALIZATION (CONTINUATION) # # eps3 is the constant defined on (II, Section 3.5 equation (27) ) # each term of the RS correction must be computed with error <= eps3 eps3 = eps2/(4*L) # eps4 is defined on (II Section 3.6 equation (30) ) # each component of the formula (II Section 3.6 equation (29) ) # must be computed with error <= eps4 eps4 = eps3/(3*L) # COMPUTING M. NUMBER OF DERIVATIVES Fp[m] TO COMPUTE M = aux_M_Fp(ctx, A, eps4, a, B1, L) Fp = {} for n in range(M, 3*L-2): Fp[n] = 0 # But I have not seen an instance of M != 3*L-3 # # DETERMINATION OF J THE NUMBER OF TERMS NEEDED # IN THE TAYLOR SERIES OF F. # See II Section 3.11 equation (49)) h1 = eps4/(632*A) h2 = ctx.pi*ctx.pi*B1*a *ctx.sqrt(3)*math.e*math.e h2 = h1 * ctx.power((h2/M**2),(M-1)/3) / M h3 = min(h1,h2) J=12 jvalue = (2*ctx.pi)**J / ctx.gamma(J+1) while jvalue > h3: J = J+1 jvalue = (2*ctx.pi)*jvalue/J # COMPUTING eps5[m] for 1 <= m <= 21 # See II Section 10 equation (43) eps5={} foreps5 = math.pi*math.pi*B1*a for m in range(0,22): aux1 = math.pow(foreps5, m/3)/(316.*A) aux2 = ctx.gamma(m+1)/ctx.gamma(m/3.0+0.5) aux2 = math.sqrt(aux2) eps5[m] = aux1*aux2*eps4 # COMPUTING wpfp # See II Section 3.13 equation (59) twenty = min(3*L-3, 21)+1 aux = 6812*J wpfp = ctx.mag(44*J) for m in range(0, twenty): wpfp = max(wpfp, ctx.mag(aux*ctx.gamma(m+1)/eps5[m])) # COMPUTING N AND p # See II Section ctx.prec = wpfp + ctx.mag(t) + 20 a = ctx.sqrt(t/(2*ctx.pi)) N = ctx.floor(a) p = 1-2*(a-N) # now we get a rounded version of p to the precision wpfp # this possibly is not necessary num = ctx.floor(p*(ctx.mpf(2)**wpfp)) difference = p * (ctx.mpf(2)**wpfp)-num if difference < 0.5: num = num else: num = num+1 p = ctx.convert(num * (ctx.mpf(2)**(-wpfp))) # COMPUTING THE COEFFICIENTS c[n] = cc[n] # We shall use the notation cc[n], since there is # a constant that is called c # See II Section 3.14 # We compute the coefficients and also save then in a # cache. The bulk of the computation is passed to # the function coef() # # eps6 is defined in II Section 3.13 equation (58) eps6 = ctx.power(2*ctx.pi, J)/(ctx.gamma(J+1)*3*J) # Now we compute the coefficients cc={} cont={} cont, pipowers = coef(ctx, J, eps6) cc = cont.copy() # we need a copy since we have Fp={} for n in range(M, 3*L-2): Fp[n] = 0 ctx.prec = wpfp for m in range(0,M+1): sumP = 0 for k in range(2*J-m-1,-1,-1): sumP = (sumP * p) + cc[k] Fp[m] = sumP # preparation of the new coefficients for k in range(0, 2*J-m-1): cc[k] = (k+1) * cc[k+1] # COMPUTING THE NUMBERS d[n,k] # See II Section 3.17 # First we compute the working precisions wpd[k] # Se II equation (92) wpd = {} d1 = max(6, ctx.mag(40*L*L)) d2 = 13+ctx.mag((1+abs(sigma))*A)-ctx.mag(eps4)-1 const = ctx.ln(8/(ctx.pi*ctx.pi*a*a*B1*B1)) /2 for n in range(0,L): d3 = ctx.mag(ctx.sqrt(ctx.gamma(n-0.5)))-ctx.floor(n*const)+d2 wpd[n] = max(d3,d1) # procedure of II Section 3.17 ctx.prec = wpd[1]+10 psigma = 1-(2*sigma) d = {} d[0,0,-2]=0; d[0,0,-1]=0; d[0,0,0]=1; d[0,0,1]=0 d[0,-1,-2]=0; d[0,-1,-1]=0; d[0,-1,0]=1; d[0,-1,1]=0 for n in range(1,L): ctx.prec = wpd[n]+10 for k in range(0,3*n//2+1): m = 3*n-2*k if (m!=0): m1 = ctx.one/m c1 = m1/4 c2 = (psigma*m1)/2 c3 = -(m+1) d[0,n,k] = c3*d[0,n-1,k-2]+c1*d[0,n-1,k]+c2*d[0,n-1,k-1] else: d[0,n,k]=0 for r in range(0,k): add = d[0,n,r]*(ctx.one*ctx.fac(2*k-2*r)/ctx.fac(k-r)) d[0,n,k] -= ((-1)**(k-r))*add d[0,n,-2]=0; d[0,n,-1]=0; d[0,n,3*n//2+1]=0 for mu in range(-2,der+1): for n in range(-2,L): for k in range(-3,max(1,3*n//2+2)): if ((mu<0)or (n<0) or(k<0)or (k>3*n//2)): d[mu,n,k] = 0 for mu in range(1,der+1): for n in range(0,L): ctx.prec = wpd[n]+10 for k in range(0,3*n//2+1): aux=(2*mu-2)*d[mu-2,n-2,k-3]+2*(sigma+n-2)*d[mu-1,n-2,k-3] d[mu,n,k] = aux - d[mu-1,n-1,k-1] # COMPUTING THE COEFFICIENTS t[k,l] # See II Section 3.9 # # computing the needed wp wptcoef = {} wpterm = {} ctx.prec = 15 c1 = ctx.mag(40*(L+2)) c2 = ctx.mag(68*(L+2)*A) c4 = ctx.mag(B1*a*math.sqrt(ctx.pi))-1 for k in range(0,L): c3 = c2 - k*c4+ctx.mag(ctx.fac(k+0.5))/2. wptcoef[k] = max(c1,c3-ctx.mag(eps4)+1)+1 +10 wpterm[k] = max(c1,ctx.mag(L+2)+c3-ctx.mag(eps3)+1)+1 +10 # check of power of pi # computing the fortcoef[mu,k,ell] fortcoef={} for mu in derivatives: for k in range(0,L): for ell in range(-2,3*k//2+1): fortcoef[mu,k,ell]=0 for mu in derivatives: for k in range(0,L): ctx.prec = wptcoef[k] for ell in range(0,3*k//2+1): fortcoef[mu,k,ell]=d[mu,k,ell]*Fp[3*k-2*ell]/pipowers[2*k-ell] fortcoef[mu,k,ell]=fortcoef[mu,k,ell]/((2*ctx.j)**ell) def trunc_a(t): wp = ctx.prec ctx.prec = wp + 2 aa = ctx.sqrt(t/(2*ctx.pi)) ctx.prec = wp return aa # computing the tcoef[chi,k,ell] tcoef={} for chi in derivatives: for k in range(0,L): for ell in range(-2,3*k//2+1): tcoef[chi,k,ell]=0 ctx.prec = wptcoef[0]+3 aa = trunc_a(t) la = -ctx.ln(aa) for chi in derivatives: for k in range(0,L): ctx.prec = wptcoef[k] for ell in range(0,3*k//2+1): tcoef[chi,k,ell] = 0 for mu in range(0, chi+1): tcoefter = ctx.binomial(chi,mu) * la**mu * \ fortcoef[chi-mu,k,ell] tcoef[chi,k,ell] += tcoefter # COMPUTING tv[k,ell] # See II Section 3.8 # Computing the powers av[k] = a**(-k) ctx.prec = wptcoef[0] + 2 # a has a good value of a. # See II Section 3.6 av = {} av[0] = 1 av[1] = av[0]/a ctx.prec = wptcoef[0] for k in range(2,L): av[k] = av[k-1] * av[1] # Computing the quotients tv = {} for chi in derivatives: for k in range(0,L): ctx.prec = wptcoef[k] for ell in range(0,3*k//2+1): tv[chi,k,ell] = tcoef[chi,k,ell]* av[k] # COMPUTING THE TERMS term[k] # See II Section 3.6 term = {} for chi in derivatives: for n in range(0,L): ctx.prec = wpterm[n] te = 0 for k in range(0, 3*n//2+1): te += tv[chi,n,k] term[chi,n] = te # COMPUTING rssum # See II Section 3.5 rssum={} ctx.prec=15 rsbound = math.sqrt(ctx.pi) * c /(b*a) ctx.prec=15 wprssum = ctx.mag(4.4*((L+3)**2)*rsbound / eps2) wprssum = max(wprssum, ctx.mag(10*(L+1))) ctx.prec = wprssum for chi in derivatives: rssum[chi] = 0 for k in range(1,L+1): rssum[chi] += term[chi,L-k] # COMPUTING S3 # See II Section 3.19 ctx.prec = 15 A2 = 2**(ctx.mag(rssum[0])) eps8 = eps/(3* A2) T = t * ctx.ln(t/(2*ctx.pi)) wps3 = 5 + ctx.mag((1+(2/eps8)*ctx.power(a,-sigma))*T) ctx.prec = wps3 tpi = t/(2*ctx.pi) arg = (t/2)*ctx.ln(tpi)-(t/2)-ctx.pi/8 U = ctx.expj(-arg) a = trunc_a(t) asigma = ctx.power(a, -sigma) S3 = ((-1)**(N-1)) * asigma * U # COMPUTING S1 the zetasum # See II Section 3.18 ctx.prec = 15 wpsum = 4 + ctx.mag((N+ctx.power(N,1-sigma))*ctx.ln(N)/eps1) ctx.prec = wpsum + 10 ''' # This can be improved S1 = {} for chi in derivatives: S1[chi] = 0 for n in range(1,int(N)+1): ln = ctx.ln(n) expn = ctx.exp(-ln*(sigma+ctx.j*t)) for chi in derivatives: term = ctx.power(-ln, chi)*expn S1[chi] += term ''' S1 = ctx._zetasum(s, 1, int(N)-1, derivatives)[0] # END OF COMPUTATION # See II Section 3.1 ctx.prec = 15 absS1 = abs(S1[der]) absS2 = abs(rssum[der] * S3) wpend = max(6, wpinitial + ctx.mag(6*(3*absS1+7*absS2))) ctx.prec = wpend rz = {} for chi in derivatives: rz[chi] = S1[chi]+rssum[chi]*S3 ctx.prec = wpinitial return rz def z_half(ctx,t,der=0): r""" z_half(t,der=0) Computes Z^(der)(t) """ s=ctx.mpf('0.5')+ctx.j*t wpinitial = ctx.prec ctx.prec = 15 tt = t/(2*ctx.pi) wptheta = wpinitial +1 + ctx.mag(3*(tt**1.5)*ctx.ln(tt)) wpz = wpinitial + 1 + ctx.mag(12*tt*ctx.ln(tt)) ctx.prec = wptheta theta = ctx.siegeltheta(t) ctx.prec = wpz rz = Rzeta_set(ctx,s, range(der+1)) if der > 0: ps1 = ctx._re(ctx.psi(0,s/2)/2 - ctx.ln(ctx.pi)/2) if der > 1: ps2 = ctx._re(ctx.j*ctx.psi(1,s/2)/4) if der > 2: ps3 = ctx._re(-ctx.psi(2,s/2)/8) if der > 3: ps4 = ctx._re(-ctx.j*ctx.psi(3,s/2)/16) exptheta = ctx.expj(theta) if der == 0: z = 2*exptheta*rz[0] if der == 1: zf = 2j*exptheta z = zf*(ps1*rz[0]+rz[1]) if der == 2: zf = 2 * exptheta z = -zf*(2*rz[1]*ps1+rz[0]*ps1**2+rz[2]-ctx.j*rz[0]*ps2) if der == 3: zf = -2j*exptheta z = 3*rz[1]*ps1**2+rz[0]*ps1**3+3*ps1*rz[2] z = zf*(z-3j*rz[1]*ps2-3j*rz[0]*ps1*ps2+rz[3]-rz[0]*ps3) if der == 4: zf = 2*exptheta z = 4*rz[1]*ps1**3+rz[0]*ps1**4+6*ps1**2*rz[2] z = z-12j*rz[1]*ps1*ps2-6j*rz[0]*ps1**2*ps2-6j*rz[2]*ps2-3*rz[0]*ps2*ps2 z = z + 4*ps1*rz[3]-4*rz[1]*ps3-4*rz[0]*ps1*ps3+rz[4]+ctx.j*rz[0]*ps4 z = zf*z ctx.prec = wpinitial return ctx._re(z) def zeta_half(ctx, s, k=0): """ zeta_half(s,k=0) Computes zeta^(k)(s) when Re s = 0.5 """ wpinitial = ctx.prec sigma = ctx._re(s) t = ctx._im(s) #--- compute wptheta, wpR, wpbasic --- ctx.prec = 53 # X see II Section 3.21 (109) and (110) if sigma > 0: X = ctx.sqrt(abs(s)) else: X = (2*ctx.pi)**(sigma-1) * abs(1-s)**(0.5-sigma) # M1 see II Section 3.21 (111) and (112) if sigma > 0: M1 = 2*ctx.sqrt(t/(2*ctx.pi)) else: M1 = 4 * t * X # T see II Section 3.21 (113) abst = abs(0.5-s) T = 2* abst*math.log(abst) # computing wpbasic, wptheta, wpR see II Section 3.21 wpbasic = max(6,3+ctx.mag(t)) wpbasic2 = 2+ctx.mag(2.12*M1+21.2*M1*X+1.3*M1*X*T)+wpinitial+1 wpbasic = max(wpbasic, wpbasic2) wptheta = max(4, 3+ctx.mag(2.7*M1*X)+wpinitial+1) wpR = 3+ctx.mag(1.1+2*X)+wpinitial+1 ctx.prec = wptheta theta = ctx.siegeltheta(t-ctx.j*(sigma-ctx.mpf('0.5'))) if k > 0: ps1 = (ctx._re(ctx.psi(0,s/2)))/2 - ctx.ln(ctx.pi)/2 if k > 1: ps2 = -(ctx._im(ctx.psi(1,s/2)))/4 if k > 2: ps3 = -(ctx._re(ctx.psi(2,s/2)))/8 if k > 3: ps4 = (ctx._im(ctx.psi(3,s/2)))/16 ctx.prec = wpR xrz = Rzeta_set(ctx,s,range(k+1)) yrz={} for chi in range(0,k+1): yrz[chi] = ctx.conj(xrz[chi]) ctx.prec = wpbasic exptheta = ctx.expj(-2*theta) if k==0: zv = xrz[0]+exptheta*yrz[0] if k==1: zv1 = -yrz[1] - 2*yrz[0]*ps1 zv = xrz[1] + exptheta*zv1 if k==2: zv1 = 4*yrz[1]*ps1+4*yrz[0]*(ps1**2)+yrz[2]+2j*yrz[0]*ps2 zv = xrz[2]+exptheta*zv1 if k==3: zv1 = -12*yrz[1]*ps1**2-8*yrz[0]*ps1**3-6*yrz[2]*ps1-6j*yrz[1]*ps2 zv1 = zv1 - 12j*yrz[0]*ps1*ps2-yrz[3]+2*yrz[0]*ps3 zv = xrz[3]+exptheta*zv1 if k == 4: zv1 = 32*yrz[1]*ps1**3 +16*yrz[0]*ps1**4+24*yrz[2]*ps1**2 zv1 = zv1 +48j*yrz[1]*ps1*ps2+48j*yrz[0]*(ps1**2)*ps2 zv1 = zv1+12j*yrz[2]*ps2-12*yrz[0]*ps2**2+8*yrz[3]*ps1-8*yrz[1]*ps3 zv1 = zv1-16*yrz[0]*ps1*ps3+yrz[4]-2j*yrz[0]*ps4 zv = xrz[4]+exptheta*zv1 ctx.prec = wpinitial return zv def zeta_offline(ctx, s, k=0): """ Computes zeta^(k)(s) off the line """ wpinitial = ctx.prec sigma = ctx._re(s) t = ctx._im(s) #--- compute wptheta, wpR, wpbasic --- ctx.prec = 53 # X see II Section 3.21 (109) and (110) if sigma > 0: X = ctx.power(abs(s), 0.5) else: X = ctx.power(2*ctx.pi, sigma-1)*ctx.power(abs(1-s),0.5-sigma) # M1 see II Section 3.21 (111) and (112) if (sigma > 0): M1 = 2*ctx.sqrt(t/(2*ctx.pi)) else: M1 = 4 * t * X # M2 see II Section 3.21 (111) and (112) if (1-sigma > 0): M2 = 2*ctx.sqrt(t/(2*ctx.pi)) else: M2 = 4*t*ctx.power(2*ctx.pi, -sigma)*ctx.power(abs(s),sigma-0.5) # T see II Section 3.21 (113) abst = abs(0.5-s) T = 2* abst*math.log(abst) # computing wpbasic, wptheta, wpR see II Section 3.21 wpbasic = max(6,3+ctx.mag(t)) wpbasic2 = 2+ctx.mag(2.12*M1+21.2*M2*X+1.3*M2*X*T)+wpinitial+1 wpbasic = max(wpbasic, wpbasic2) wptheta = max(4, 3+ctx.mag(2.7*M2*X)+wpinitial+1) wpR = 3+ctx.mag(1.1+2*X)+wpinitial+1 ctx.prec = wptheta theta = ctx.siegeltheta(t-ctx.j*(sigma-ctx.mpf('0.5'))) s1 = s s2 = ctx.conj(1-s1) ctx.prec = wpR xrz, yrz = Rzeta_simul(ctx, s, k) if k > 0: ps1 = (ctx.psi(0,s1/2)+ctx.psi(0,(1-s1)/2))/4 - ctx.ln(ctx.pi)/2 if k > 1: ps2 = ctx.j*(ctx.psi(1,s1/2)-ctx.psi(1,(1-s1)/2))/8 if k > 2: ps3 = -(ctx.psi(2,s1/2)+ctx.psi(2,(1-s1)/2))/16 if k > 3: ps4 = -ctx.j*(ctx.psi(3,s1/2)-ctx.psi(3,(1-s1)/2))/32 ctx.prec = wpbasic exptheta = ctx.expj(-2*theta) if k == 0: zv = xrz[0]+exptheta*yrz[0] if k == 1: zv1 = -yrz[1]-2*yrz[0]*ps1 zv = xrz[1]+exptheta*zv1 if k == 2: zv1 = 4*yrz[1]*ps1+4*yrz[0]*(ps1**2) +yrz[2]+2j*yrz[0]*ps2 zv = xrz[2]+exptheta*zv1 if k == 3: zv1 = -12*yrz[1]*ps1**2 -8*yrz[0]*ps1**3-6*yrz[2]*ps1-6j*yrz[1]*ps2 zv1 = zv1 - 12j*yrz[0]*ps1*ps2-yrz[3]+2*yrz[0]*ps3 zv = xrz[3]+exptheta*zv1 if k == 4: zv1 = 32*yrz[1]*ps1**3 +16*yrz[0]*ps1**4+24*yrz[2]*ps1**2 zv1 = zv1 +48j*yrz[1]*ps1*ps2+48j*yrz[0]*(ps1**2)*ps2 zv1 = zv1+12j*yrz[2]*ps2-12*yrz[0]*ps2**2+8*yrz[3]*ps1-8*yrz[1]*ps3 zv1 = zv1-16*yrz[0]*ps1*ps3+yrz[4]-2j*yrz[0]*ps4 zv = xrz[4]+exptheta*zv1 ctx.prec = wpinitial return zv def z_offline(ctx, w, k=0): r""" Computes Z(w) and its derivatives off the line """ s = ctx.mpf('0.5')+ctx.j*w s1 = s s2 = ctx.conj(1-s1) wpinitial = ctx.prec ctx.prec = 35 # X see II Section 3.21 (109) and (110) # M1 see II Section 3.21 (111) and (112) if (ctx._re(s1) >= 0): M1 = 2*ctx.sqrt(ctx._im(s1)/(2 * ctx.pi)) X = ctx.sqrt(abs(s1)) else: X = (2*ctx.pi)**(ctx._re(s1)-1) * abs(1-s1)**(0.5-ctx._re(s1)) M1 = 4 * ctx._im(s1)*X # M2 see II Section 3.21 (111) and (112) if (ctx._re(s2) >= 0): M2 = 2*ctx.sqrt(ctx._im(s2)/(2 * ctx.pi)) else: M2 = 4 * ctx._im(s2)*(2*ctx.pi)**(ctx._re(s2)-1)*abs(1-s2)**(0.5-ctx._re(s2)) # T see II Section 3.21 Prop. 27 T = 2*abs(ctx.siegeltheta(w)) # defining some precisions # see II Section 3.22 (115), (116), (117) aux1 = ctx.sqrt(X) aux2 = aux1*(M1+M2) aux3 = 3 +wpinitial wpbasic = max(6, 3+ctx.mag(T), ctx.mag(aux2*(26+2*T))+aux3) wptheta = max(4,ctx.mag(2.04*aux2)+aux3) wpR = ctx.mag(4*aux1)+aux3 # now the computations ctx.prec = wptheta theta = ctx.siegeltheta(w) ctx.prec = wpR xrz, yrz = Rzeta_simul(ctx,s,k) pta = 0.25 + 0.5j*w ptb = 0.25 - 0.5j*w if k > 0: ps1 = 0.25*(ctx.psi(0,pta)+ctx.psi(0,ptb)) - ctx.ln(ctx.pi)/2 if k > 1: ps2 = (1j/8)*(ctx.psi(1,pta)-ctx.psi(1,ptb)) if k > 2: ps3 = (-1./16)*(ctx.psi(2,pta)+ctx.psi(2,ptb)) if k > 3: ps4 = (-1j/32)*(ctx.psi(3,pta)-ctx.psi(3,ptb)) ctx.prec = wpbasic exptheta = ctx.expj(theta) if k == 0: zv = exptheta*xrz[0]+yrz[0]/exptheta j = ctx.j if k == 1: zv = j*exptheta*(xrz[1]+xrz[0]*ps1)-j*(yrz[1]+yrz[0]*ps1)/exptheta if k == 2: zv = exptheta*(-2*xrz[1]*ps1-xrz[0]*ps1**2-xrz[2]+j*xrz[0]*ps2) zv =zv + (-2*yrz[1]*ps1-yrz[0]*ps1**2-yrz[2]-j*yrz[0]*ps2)/exptheta if k == 3: zv1 = -3*xrz[1]*ps1**2-xrz[0]*ps1**3-3*xrz[2]*ps1+j*3*xrz[1]*ps2 zv1 = (zv1+ 3j*xrz[0]*ps1*ps2-xrz[3]+xrz[0]*ps3)*j*exptheta zv2 = 3*yrz[1]*ps1**2+yrz[0]*ps1**3+3*yrz[2]*ps1+j*3*yrz[1]*ps2 zv2 = j*(zv2 + 3j*yrz[0]*ps1*ps2+ yrz[3]-yrz[0]*ps3)/exptheta zv = zv1+zv2 if k == 4: zv1 = 4*xrz[1]*ps1**3+xrz[0]*ps1**4 + 6*xrz[2]*ps1**2 zv1 = zv1-12j*xrz[1]*ps1*ps2-6j*xrz[0]*ps1**2*ps2-6j*xrz[2]*ps2 zv1 = zv1-3*xrz[0]*ps2*ps2+4*xrz[3]*ps1-4*xrz[1]*ps3-4*xrz[0]*ps1*ps3 zv1 = zv1+xrz[4]+j*xrz[0]*ps4 zv2 = 4*yrz[1]*ps1**3+yrz[0]*ps1**4 + 6*yrz[2]*ps1**2 zv2 = zv2+12j*yrz[1]*ps1*ps2+6j*yrz[0]*ps1**2*ps2+6j*yrz[2]*ps2 zv2 = zv2-3*yrz[0]*ps2*ps2+4*yrz[3]*ps1-4*yrz[1]*ps3-4*yrz[0]*ps1*ps3 zv2 = zv2+yrz[4]-j*yrz[0]*ps4 zv = exptheta*zv1+zv2/exptheta ctx.prec = wpinitial return zv @defun def rs_zeta(ctx, s, derivative=0, **kwargs): if derivative > 4: raise NotImplementedError s = ctx.convert(s) re = ctx._re(s); im = ctx._im(s) if im < 0: z = ctx.conj(ctx.rs_zeta(ctx.conj(s), derivative)) return z critical_line = (re == 0.5) if critical_line: return zeta_half(ctx, s, derivative) else: return zeta_offline(ctx, s, derivative) @defun def rs_z(ctx, w, derivative=0): w = ctx.convert(w) re = ctx._re(w); im = ctx._im(w) if re < 0: return rs_z(ctx, -w, derivative) critical_line = (im == 0) if critical_line : return z_half(ctx, w, derivative) else: return z_offline(ctx, w, derivative) mpmath-1.0.0/mpmath/functions/theta.py000066400000000000000000001107101316273626600177670ustar00rootroot00000000000000from .functions import defun, defun_wrapped @defun def _jacobi_theta2(ctx, z, q): extra1 = 10 extra2 = 20 # the loops below break when the fixed precision quantities # a and b go to zero; # right shifting small negative numbers by wp one obtains -1, not zero, # so the condition a**2 + b**2 > MIN is used to break the loops. MIN = 2 if z == ctx.zero: if (not ctx._im(q)): wp = ctx.prec + extra1 x = ctx.to_fixed(ctx._re(q), wp) x2 = (x*x) >> wp a = b = x2 s = x2 while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp s += a s = (1 << (wp+1)) + (s << 1) s = ctx.ldexp(s, -wp) else: wp = ctx.prec + extra1 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp-1) are = bre = x2re aim = bim = x2im sre = (1< MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp sre += are sim += aim sre = (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) else: if (not ctx._im(q)) and (not ctx._im(z)): wp = ctx.prec + extra1 x = ctx.to_fixed(ctx._re(q), wp) x2 = (x*x) >> wp a = b = x2 c1, s1 = ctx.cos_sin(ctx._re(z), prec=wp) cn = c1 = ctx.to_fixed(c1, wp) sn = s1 = ctx.to_fixed(s1, wp) c2 = (c1*c1 - s1*s1) >> wp s2 = (c1 * s1) >> (wp - 1) cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp s = c1 + ((a * cn) >> wp) while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp s += (a * cn) >> wp s = (s << 1) s = ctx.ldexp(s, -wp) s *= ctx.nthroot(q, 4) return s # case z real, q complex elif not ctx._im(z): wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = x2re aim = bim = x2im c1, s1 = ctx.cos_sin(ctx._re(z), prec=wp) cn = c1 = ctx.to_fixed(c1, wp) sn = s1 = ctx.to_fixed(s1, wp) c2 = (c1*c1 - s1*s1) >> wp s2 = (c1 * s1) >> (wp - 1) cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp sre = c1 + ((are * cn) >> wp) sim = ((aim * cn) >> wp) while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp sre += ((are * cn) >> wp) sim += ((aim * cn) >> wp) sre = (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) #case z complex, q real elif not ctx._im(q): wp = ctx.prec + extra2 x = ctx.to_fixed(ctx._re(q), wp) x2 = (x*x) >> wp a = b = x2 prec0 = ctx.prec ctx.prec = wp c1, s1 = ctx.cos_sin(z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) #c2 = (c1*c1 - s1*s1) >> wp c2re = (c1re*c1re - c1im*c1im - s1re*s1re + s1im*s1im) >> wp c2im = (c1re*c1im - s1re*s1im) >> (wp - 1) #s2 = (c1 * s1) >> (wp - 1) s2re = (c1re*s1re - c1im*s1im) >> (wp - 1) s2im = (c1re*s1im + c1im*s1re) >> (wp - 1) #cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 sre = c1re + ((a * cnre) >> wp) sim = c1im + ((a * cnim) >> wp) while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 sre += ((a * cnre) >> wp) sim += ((a * cnim) >> wp) sre = (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) # case z and q complex else: wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = x2re aim = bim = x2im prec0 = ctx.prec ctx.prec = wp # cos(z), sin(z) with z complex c1, s1 = ctx.cos_sin(z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) c2re = (c1re*c1re - c1im*c1im - s1re*s1re + s1im*s1im) >> wp c2im = (c1re*c1im - s1re*s1im) >> (wp - 1) s2re = (c1re*s1re - c1im*s1im) >> (wp - 1) s2im = (c1re*s1im + c1im*s1re) >> (wp - 1) t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 n = 1 termre = c1re termim = c1im sre = c1re + ((are * cnre - aim * cnim) >> wp) sim = c1im + ((are * cnim + aim * cnre) >> wp) n = 3 termre = ((are * cnre - aim * cnim) >> wp) termim = ((are * cnim + aim * cnre) >> wp) sre = c1re + ((are * cnre - aim * cnim) >> wp) sim = c1im + ((are * cnim + aim * cnre) >> wp) n = 5 while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp #cn, sn = (cn*c1 - sn*s1) >> wp, (sn*c1 + cn*s1) >> wp t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 termre = ((are * cnre - aim * cnim) >> wp) termim = ((aim * cnre + are * cnim) >> wp) sre += ((are * cnre - aim * cnim) >> wp) sim += ((aim * cnre + are * cnim) >> wp) n += 2 sre = (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) s *= ctx.nthroot(q, 4) return s @defun def _djacobi_theta2(ctx, z, q, nd): MIN = 2 extra1 = 10 extra2 = 20 if (not ctx._im(q)) and (not ctx._im(z)): wp = ctx.prec + extra1 x = ctx.to_fixed(ctx._re(q), wp) x2 = (x*x) >> wp a = b = x2 c1, s1 = ctx.cos_sin(ctx._re(z), prec=wp) cn = c1 = ctx.to_fixed(c1, wp) sn = s1 = ctx.to_fixed(s1, wp) c2 = (c1*c1 - s1*s1) >> wp s2 = (c1 * s1) >> (wp - 1) cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp if (nd&1): s = s1 + ((a * sn * 3**nd) >> wp) else: s = c1 + ((a * cn * 3**nd) >> wp) n = 2 while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp if nd&1: s += (a * sn * (2*n+1)**nd) >> wp else: s += (a * cn * (2*n+1)**nd) >> wp n += 1 s = -(s << 1) s = ctx.ldexp(s, -wp) # case z real, q complex elif not ctx._im(z): wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = x2re aim = bim = x2im c1, s1 = ctx.cos_sin(ctx._re(z), prec=wp) cn = c1 = ctx.to_fixed(c1, wp) sn = s1 = ctx.to_fixed(s1, wp) c2 = (c1*c1 - s1*s1) >> wp s2 = (c1 * s1) >> (wp - 1) cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp if (nd&1): sre = s1 + ((are * sn * 3**nd) >> wp) sim = ((aim * sn * 3**nd) >> wp) else: sre = c1 + ((are * cn * 3**nd) >> wp) sim = ((aim * cn * 3**nd) >> wp) n = 5 while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp if (nd&1): sre += ((are * sn * n**nd) >> wp) sim += ((aim * sn * n**nd) >> wp) else: sre += ((are * cn * n**nd) >> wp) sim += ((aim * cn * n**nd) >> wp) n += 2 sre = -(sre << 1) sim = -(sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) #case z complex, q real elif not ctx._im(q): wp = ctx.prec + extra2 x = ctx.to_fixed(ctx._re(q), wp) x2 = (x*x) >> wp a = b = x2 prec0 = ctx.prec ctx.prec = wp c1, s1 = ctx.cos_sin(z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) #c2 = (c1*c1 - s1*s1) >> wp c2re = (c1re*c1re - c1im*c1im - s1re*s1re + s1im*s1im) >> wp c2im = (c1re*c1im - s1re*s1im) >> (wp - 1) #s2 = (c1 * s1) >> (wp - 1) s2re = (c1re*s1re - c1im*s1im) >> (wp - 1) s2im = (c1re*s1im + c1im*s1re) >> (wp - 1) #cn, sn = (cn*c2 - sn*s2) >> wp, (sn*c2 + cn*s2) >> wp t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 if (nd&1): sre = s1re + ((a * snre * 3**nd) >> wp) sim = s1im + ((a * snim * 3**nd) >> wp) else: sre = c1re + ((a * cnre * 3**nd) >> wp) sim = c1im + ((a * cnim * 3**nd) >> wp) n = 5 while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 if (nd&1): sre += ((a * snre * n**nd) >> wp) sim += ((a * snim * n**nd) >> wp) else: sre += ((a * cnre * n**nd) >> wp) sim += ((a * cnim * n**nd) >> wp) n += 2 sre = -(sre << 1) sim = -(sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) # case z and q complex else: wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = x2re aim = bim = x2im prec0 = ctx.prec ctx.prec = wp # cos(2*z), sin(2*z) with z complex c1, s1 = ctx.cos_sin(z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) c2re = (c1re*c1re - c1im*c1im - s1re*s1re + s1im*s1im) >> wp c2im = (c1re*c1im - s1re*s1im) >> (wp - 1) s2re = (c1re*s1re - c1im*s1im) >> (wp - 1) s2im = (c1re*s1im + c1im*s1re) >> (wp - 1) t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 if (nd&1): sre = s1re + (((are * snre - aim * snim) * 3**nd) >> wp) sim = s1im + (((are * snim + aim * snre)* 3**nd) >> wp) else: sre = c1re + (((are * cnre - aim * cnim) * 3**nd) >> wp) sim = c1im + (((are * cnim + aim * cnre)* 3**nd) >> wp) n = 5 while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp #cn, sn = (cn*c1 - sn*s1) >> wp, (sn*c1 + cn*s1) >> wp t1 = (cnre*c2re - cnim*c2im - snre*s2re + snim*s2im) >> wp t2 = (cnre*c2im + cnim*c2re - snre*s2im - snim*s2re) >> wp t3 = (snre*c2re - snim*c2im + cnre*s2re - cnim*s2im) >> wp t4 = (snre*c2im + snim*c2re + cnre*s2im + cnim*s2re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 if (nd&1): sre += (((are * snre - aim * snim) * n**nd) >> wp) sim += (((aim * snre + are * snim) * n**nd) >> wp) else: sre += (((are * cnre - aim * cnim) * n**nd) >> wp) sim += (((aim * cnre + are * cnim) * n**nd) >> wp) n += 2 sre = -(sre << 1) sim = -(sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) s *= ctx.nthroot(q, 4) if (nd&1): return (-1)**(nd//2) * s else: return (-1)**(1 + nd//2) * s @defun def _jacobi_theta3(ctx, z, q): extra1 = 10 extra2 = 20 MIN = 2 if z == ctx.zero: if not ctx._im(q): wp = ctx.prec + extra1 x = ctx.to_fixed(ctx._re(q), wp) s = x a = b = x x2 = (x*x) >> wp while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp s += a s = (1 << wp) + (s << 1) s = ctx.ldexp(s, -wp) return s else: wp = ctx.prec + extra1 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) sre = are = bre = xre sim = aim = bim = xim while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp sre += are sim += aim sre = (1 << wp) + (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) return s else: if (not ctx._im(q)) and (not ctx._im(z)): s = 0 wp = ctx.prec + extra1 x = ctx.to_fixed(ctx._re(q), wp) a = b = x x2 = (x*x) >> wp c1, s1 = ctx.cos_sin(ctx._re(z)*2, prec=wp) c1 = ctx.to_fixed(c1, wp) s1 = ctx.to_fixed(s1, wp) cn = c1 sn = s1 s += (a * cn) >> wp while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp cn, sn = (cn*c1 - sn*s1) >> wp, (sn*c1 + cn*s1) >> wp s += (a * cn) >> wp s = (1 << wp) + (s << 1) s = ctx.ldexp(s, -wp) return s # case z real, q complex elif not ctx._im(z): wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = xre aim = bim = xim c1, s1 = ctx.cos_sin(ctx._re(z)*2, prec=wp) c1 = ctx.to_fixed(c1, wp) s1 = ctx.to_fixed(s1, wp) cn = c1 sn = s1 sre = (are * cn) >> wp sim = (aim * cn) >> wp while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp cn, sn = (cn*c1 - sn*s1) >> wp, (sn*c1 + cn*s1) >> wp sre += (are * cn) >> wp sim += (aim * cn) >> wp sre = (1 << wp) + (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) return s #case z complex, q real elif not ctx._im(q): wp = ctx.prec + extra2 x = ctx.to_fixed(ctx._re(q), wp) a = b = x x2 = (x*x) >> wp prec0 = ctx.prec ctx.prec = wp c1, s1 = ctx.cos_sin(2*z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) sre = (a * cnre) >> wp sim = (a * cnim) >> wp while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp t1 = (cnre*c1re - cnim*c1im - snre*s1re + snim*s1im) >> wp t2 = (cnre*c1im + cnim*c1re - snre*s1im - snim*s1re) >> wp t3 = (snre*c1re - snim*c1im + cnre*s1re - cnim*s1im) >> wp t4 = (snre*c1im + snim*c1re + cnre*s1im + cnim*s1re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 sre += (a * cnre) >> wp sim += (a * cnim) >> wp sre = (1 << wp) + (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) return s # case z and q complex else: wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = xre aim = bim = xim prec0 = ctx.prec ctx.prec = wp # cos(2*z), sin(2*z) with z complex c1, s1 = ctx.cos_sin(2*z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) sre = (are * cnre - aim * cnim) >> wp sim = (aim * cnre + are * cnim) >> wp while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp t1 = (cnre*c1re - cnim*c1im - snre*s1re + snim*s1im) >> wp t2 = (cnre*c1im + cnim*c1re - snre*s1im - snim*s1re) >> wp t3 = (snre*c1re - snim*c1im + cnre*s1re - cnim*s1im) >> wp t4 = (snre*c1im + snim*c1re + cnre*s1im + cnim*s1re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 sre += (are * cnre - aim * cnim) >> wp sim += (aim * cnre + are * cnim) >> wp sre = (1 << wp) + (sre << 1) sim = (sim << 1) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) return s @defun def _djacobi_theta3(ctx, z, q, nd): """nd=1,2,3 order of the derivative with respect to z""" MIN = 2 extra1 = 10 extra2 = 20 if (not ctx._im(q)) and (not ctx._im(z)): s = 0 wp = ctx.prec + extra1 x = ctx.to_fixed(ctx._re(q), wp) a = b = x x2 = (x*x) >> wp c1, s1 = ctx.cos_sin(ctx._re(z)*2, prec=wp) c1 = ctx.to_fixed(c1, wp) s1 = ctx.to_fixed(s1, wp) cn = c1 sn = s1 if (nd&1): s += (a * sn) >> wp else: s += (a * cn) >> wp n = 2 while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp cn, sn = (cn*c1 - sn*s1) >> wp, (sn*c1 + cn*s1) >> wp if nd&1: s += (a * sn * n**nd) >> wp else: s += (a * cn * n**nd) >> wp n += 1 s = -(s << (nd+1)) s = ctx.ldexp(s, -wp) # case z real, q complex elif not ctx._im(z): wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = xre aim = bim = xim c1, s1 = ctx.cos_sin(ctx._re(z)*2, prec=wp) c1 = ctx.to_fixed(c1, wp) s1 = ctx.to_fixed(s1, wp) cn = c1 sn = s1 if (nd&1): sre = (are * sn) >> wp sim = (aim * sn) >> wp else: sre = (are * cn) >> wp sim = (aim * cn) >> wp n = 2 while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp cn, sn = (cn*c1 - sn*s1) >> wp, (sn*c1 + cn*s1) >> wp if nd&1: sre += (are * sn * n**nd) >> wp sim += (aim * sn * n**nd) >> wp else: sre += (are * cn * n**nd) >> wp sim += (aim * cn * n**nd) >> wp n += 1 sre = -(sre << (nd+1)) sim = -(sim << (nd+1)) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) #case z complex, q real elif not ctx._im(q): wp = ctx.prec + extra2 x = ctx.to_fixed(ctx._re(q), wp) a = b = x x2 = (x*x) >> wp prec0 = ctx.prec ctx.prec = wp c1, s1 = ctx.cos_sin(2*z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) if (nd&1): sre = (a * snre) >> wp sim = (a * snim) >> wp else: sre = (a * cnre) >> wp sim = (a * cnim) >> wp n = 2 while abs(a) > MIN: b = (b*x2) >> wp a = (a*b) >> wp t1 = (cnre*c1re - cnim*c1im - snre*s1re + snim*s1im) >> wp t2 = (cnre*c1im + cnim*c1re - snre*s1im - snim*s1re) >> wp t3 = (snre*c1re - snim*c1im + cnre*s1re - cnim*s1im) >> wp t4 = (snre*c1im + snim*c1re + cnre*s1im + cnim*s1re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 if (nd&1): sre += (a * snre * n**nd) >> wp sim += (a * snim * n**nd) >> wp else: sre += (a * cnre * n**nd) >> wp sim += (a * cnim * n**nd) >> wp n += 1 sre = -(sre << (nd+1)) sim = -(sim << (nd+1)) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) # case z and q complex else: wp = ctx.prec + extra2 xre = ctx.to_fixed(ctx._re(q), wp) xim = ctx.to_fixed(ctx._im(q), wp) x2re = (xre*xre - xim*xim) >> wp x2im = (xre*xim) >> (wp - 1) are = bre = xre aim = bim = xim prec0 = ctx.prec ctx.prec = wp # cos(2*z), sin(2*z) with z complex c1, s1 = ctx.cos_sin(2*z) ctx.prec = prec0 cnre = c1re = ctx.to_fixed(ctx._re(c1), wp) cnim = c1im = ctx.to_fixed(ctx._im(c1), wp) snre = s1re = ctx.to_fixed(ctx._re(s1), wp) snim = s1im = ctx.to_fixed(ctx._im(s1), wp) if (nd&1): sre = (are * snre - aim * snim) >> wp sim = (aim * snre + are * snim) >> wp else: sre = (are * cnre - aim * cnim) >> wp sim = (aim * cnre + are * cnim) >> wp n = 2 while are**2 + aim**2 > MIN: bre, bim = (bre * x2re - bim * x2im) >> wp, \ (bre * x2im + bim * x2re) >> wp are, aim = (are * bre - aim * bim) >> wp, \ (are * bim + aim * bre) >> wp t1 = (cnre*c1re - cnim*c1im - snre*s1re + snim*s1im) >> wp t2 = (cnre*c1im + cnim*c1re - snre*s1im - snim*s1re) >> wp t3 = (snre*c1re - snim*c1im + cnre*s1re - cnim*s1im) >> wp t4 = (snre*c1im + snim*c1re + cnre*s1im + cnim*s1re) >> wp cnre = t1 cnim = t2 snre = t3 snim = t4 if(nd&1): sre += ((are * snre - aim * snim) * n**nd) >> wp sim += ((aim * snre + are * snim) * n**nd) >> wp else: sre += ((are * cnre - aim * cnim) * n**nd) >> wp sim += ((aim * cnre + are * cnim) * n**nd) >> wp n += 1 sre = -(sre << (nd+1)) sim = -(sim << (nd+1)) sre = ctx.ldexp(sre, -wp) sim = ctx.ldexp(sim, -wp) s = ctx.mpc(sre, sim) if (nd&1): return (-1)**(nd//2) * s else: return (-1)**(1 + nd//2) * s @defun def _jacobi_theta2a(ctx, z, q): """ case ctx._im(z) != 0 theta(2, z, q) = q**1/4 * Sum(q**(n*n + n) * exp(j*(2*n + 1)*z), n=-inf, inf) max term for minimum (2*n+1)*log(q).real - 2* ctx._im(z) n0 = int(ctx._im(z)/log(q).real - 1/2) theta(2, z, q) = q**1/4 * Sum(q**(n*n + n) * exp(j*(2*n + 1)*z), n=n0, inf) + q**1/4 * Sum(q**(n*n + n) * exp(j*(2*n + 1)*z), n, n0-1, -inf) """ n = n0 = int(ctx._im(z)/ctx._re(ctx.log(q)) - 1/2) e2 = ctx.expj(2*z) e = e0 = ctx.expj((2*n+1)*z) a = q**(n*n + n) # leading term term = a * e s = term eps1 = ctx.eps*abs(term) while 1: n += 1 e = e * e2 term = q**(n*n + n) * e if abs(term) < eps1: break s += term e = e0 e2 = ctx.expj(-2*z) n = n0 while 1: n -= 1 e = e * e2 term = q**(n*n + n) * e if abs(term) < eps1: break s += term s = s * ctx.nthroot(q, 4) return s @defun def _jacobi_theta3a(ctx, z, q): """ case ctx._im(z) != 0 theta3(z, q) = Sum(q**(n*n) * exp(j*2*n*z), n, -inf, inf) max term for n*abs(log(q).real) + ctx._im(z) ~= 0 n0 = int(- ctx._im(z)/abs(log(q).real)) """ n = n0 = int(-ctx._im(z)/abs(ctx._re(ctx.log(q)))) e2 = ctx.expj(2*z) e = e0 = ctx.expj(2*n*z) s = term = q**(n*n) * e eps1 = ctx.eps*abs(term) while 1: n += 1 e = e * e2 term = q**(n*n) * e if abs(term) < eps1: break s += term e = e0 e2 = ctx.expj(-2*z) n = n0 while 1: n -= 1 e = e * e2 term = q**(n*n) * e if abs(term) < eps1: break s += term return s @defun def _djacobi_theta2a(ctx, z, q, nd): """ case ctx._im(z) != 0 dtheta(2, z, q, nd) = j* q**1/4 * Sum(q**(n*n + n) * (2*n+1)*exp(j*(2*n + 1)*z), n=-inf, inf) max term for (2*n0+1)*log(q).real - 2* ctx._im(z) ~= 0 n0 = int(ctx._im(z)/log(q).real - 1/2) """ n = n0 = int(ctx._im(z)/ctx._re(ctx.log(q)) - 1/2) e2 = ctx.expj(2*z) e = e0 = ctx.expj((2*n + 1)*z) a = q**(n*n + n) # leading term term = (2*n+1)**nd * a * e s = term eps1 = ctx.eps*abs(term) while 1: n += 1 e = e * e2 term = (2*n+1)**nd * q**(n*n + n) * e if abs(term) < eps1: break s += term e = e0 e2 = ctx.expj(-2*z) n = n0 while 1: n -= 1 e = e * e2 term = (2*n+1)**nd * q**(n*n + n) * e if abs(term) < eps1: break s += term return ctx.j**nd * s * ctx.nthroot(q, 4) @defun def _djacobi_theta3a(ctx, z, q, nd): """ case ctx._im(z) != 0 djtheta3(z, q, nd) = (2*j)**nd * Sum(q**(n*n) * n**nd * exp(j*2*n*z), n, -inf, inf) max term for minimum n*abs(log(q).real) + ctx._im(z) """ n = n0 = int(-ctx._im(z)/abs(ctx._re(ctx.log(q)))) e2 = ctx.expj(2*z) e = e0 = ctx.expj(2*n*z) a = q**(n*n) * e s = term = n**nd * a if n != 0: eps1 = ctx.eps*abs(term) else: eps1 = ctx.eps*abs(a) while 1: n += 1 e = e * e2 a = q**(n*n) * e term = n**nd * a if n != 0: aterm = abs(term) else: aterm = abs(a) if aterm < eps1: break s += term e = e0 e2 = ctx.expj(-2*z) n = n0 while 1: n -= 1 e = e * e2 a = q**(n*n) * e term = n**nd * a if n != 0: aterm = abs(term) else: aterm = abs(a) if aterm < eps1: break s += term return (2*ctx.j)**nd * s @defun def jtheta(ctx, n, z, q, derivative=0): if derivative: return ctx._djtheta(n, z, q, derivative) z = ctx.convert(z) q = ctx.convert(q) # Implementation note # If ctx._im(z) is close to zero, _jacobi_theta2 and _jacobi_theta3 # are used, # which compute the series starting from n=0 using fixed precision # numbers; # otherwise _jacobi_theta2a and _jacobi_theta3a are used, which compute # the series starting from n=n0, which is the largest term. # TODO: write _jacobi_theta2a and _jacobi_theta3a using fixed-point if abs(q) > ctx.THETA_Q_LIM: raise ValueError('abs(q) > THETA_Q_LIM = %f' % ctx.THETA_Q_LIM) extra = 10 if z: M = ctx.mag(z) if M > 5 or (n == 1 and M < -5): extra += 2*abs(M) cz = 0.5 extra2 = 50 prec0 = ctx.prec try: ctx.prec += extra if n == 1: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._jacobi_theta2(z - ctx.pi/2, q) else: ctx.dps += 10 res = ctx._jacobi_theta2a(z - ctx.pi/2, q) else: res = ctx._jacobi_theta2(z - ctx.pi/2, q) elif n == 2: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._jacobi_theta2(z, q) else: ctx.dps += 10 res = ctx._jacobi_theta2a(z, q) else: res = ctx._jacobi_theta2(z, q) elif n == 3: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._jacobi_theta3(z, q) else: ctx.dps += 10 res = ctx._jacobi_theta3a(z, q) else: res = ctx._jacobi_theta3(z, q) elif n == 4: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._jacobi_theta3(z, -q) else: ctx.dps += 10 res = ctx._jacobi_theta3a(z, -q) else: res = ctx._jacobi_theta3(z, -q) else: raise ValueError finally: ctx.prec = prec0 return res @defun def _djtheta(ctx, n, z, q, derivative=1): z = ctx.convert(z) q = ctx.convert(q) nd = int(derivative) if abs(q) > ctx.THETA_Q_LIM: raise ValueError('abs(q) > THETA_Q_LIM = %f' % ctx.THETA_Q_LIM) extra = 10 + ctx.prec * nd // 10 if z: M = ctx.mag(z) if M > 5 or (n != 1 and M < -5): extra += 2*abs(M) cz = 0.5 extra2 = 50 prec0 = ctx.prec try: ctx.prec += extra if n == 1: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._djacobi_theta2(z - ctx.pi/2, q, nd) else: ctx.dps += 10 res = ctx._djacobi_theta2a(z - ctx.pi/2, q, nd) else: res = ctx._djacobi_theta2(z - ctx.pi/2, q, nd) elif n == 2: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._djacobi_theta2(z, q, nd) else: ctx.dps += 10 res = ctx._djacobi_theta2a(z, q, nd) else: res = ctx._djacobi_theta2(z, q, nd) elif n == 3: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._djacobi_theta3(z, q, nd) else: ctx.dps += 10 res = ctx._djacobi_theta3a(z, q, nd) else: res = ctx._djacobi_theta3(z, q, nd) elif n == 4: if ctx._im(z): if abs(ctx._im(z)) < cz * abs(ctx._re(ctx.log(q))): ctx.dps += extra2 res = ctx._djacobi_theta3(z, -q, nd) else: ctx.dps += 10 res = ctx._djacobi_theta3a(z, -q, nd) else: res = ctx._djacobi_theta3(z, -q, nd) else: raise ValueError finally: ctx.prec = prec0 return +res mpmath-1.0.0/mpmath/functions/zeta.py000066400000000000000000001077731316273626600176440ustar00rootroot00000000000000from ..libmp.backend import xrange, print_ from .functions import defun, defun_wrapped, defun_static @defun def stieltjes(ctx, n, a=1): n = ctx.convert(n) a = ctx.convert(a) if n < 0: return ctx.bad_domain("Stieltjes constants defined for n >= 0") if hasattr(ctx, "stieltjes_cache"): stieltjes_cache = ctx.stieltjes_cache else: stieltjes_cache = ctx.stieltjes_cache = {} if a == 1: if n == 0: return +ctx.euler if n in stieltjes_cache: prec, s = stieltjes_cache[n] if prec >= ctx.prec: return +s mag = 1 def f(x): xa = x/a v = (xa-ctx.j)*ctx.ln(a-ctx.j*x)**n/(1+xa**2)/(ctx.exp(2*ctx.pi*x)-1) return ctx._re(v) / mag orig = ctx.prec try: # Normalize integrand by approx. magnitude to # speed up quadrature (which uses absolute error) if n > 50: ctx.prec = 20 mag = ctx.quad(f, [0,ctx.inf], maxdegree=3) ctx.prec = orig + 10 + int(n**0.5) s = ctx.quad(f, [0,ctx.inf], maxdegree=20) v = ctx.ln(a)**n/(2*a) - ctx.ln(a)**(n+1)/(n+1) + 2*s/a*mag finally: ctx.prec = orig if a == 1 and ctx.isint(n): stieltjes_cache[n] = (ctx.prec, v) return +v @defun_wrapped def siegeltheta(ctx, t, derivative=0): d = int(derivative) if (t == ctx.inf or t == ctx.ninf): if d < 2: if t == ctx.ninf and d == 0: return ctx.ninf return ctx.inf else: return ctx.zero if d == 0: if ctx._im(t): # XXX: cancellation occurs a = ctx.loggamma(0.25+0.5j*t) b = ctx.loggamma(0.25-0.5j*t) return -ctx.ln(ctx.pi)/2*t - 0.5j*(a-b) else: if ctx.isinf(t): return t return ctx._im(ctx.loggamma(0.25+0.5j*t)) - ctx.ln(ctx.pi)/2*t if d > 0: a = (-0.5j)**(d-1)*ctx.polygamma(d-1, 0.25-0.5j*t) b = (0.5j)**(d-1)*ctx.polygamma(d-1, 0.25+0.5j*t) if ctx._im(t): if d == 1: return -0.5*ctx.log(ctx.pi)+0.25*(a+b) else: return 0.25*(a+b) else: if d == 1: return ctx._re(-0.5*ctx.log(ctx.pi)+0.25*(a+b)) else: return ctx._re(0.25*(a+b)) @defun_wrapped def grampoint(ctx, n): # asymptotic expansion, from # http://mathworld.wolfram.com/GramPoint.html g = 2*ctx.pi*ctx.exp(1+ctx.lambertw((8*n+1)/(8*ctx.e))) return ctx.findroot(lambda t: ctx.siegeltheta(t)-ctx.pi*n, g) @defun_wrapped def siegelz(ctx, t, **kwargs): d = int(kwargs.get("derivative", 0)) t = ctx.convert(t) t1 = ctx._re(t) t2 = ctx._im(t) prec = ctx.prec try: if abs(t1) > 500*prec and t2**2 < t1: v = ctx.rs_z(t, d) if ctx._is_real_type(t): return ctx._re(v) return v except NotImplementedError: pass ctx.prec += 21 e1 = ctx.expj(ctx.siegeltheta(t)) z = ctx.zeta(0.5+ctx.j*t) if d == 0: v = e1*z ctx.prec=prec if ctx._is_real_type(t): return ctx._re(v) return +v z1 = ctx.zeta(0.5+ctx.j*t, derivative=1) theta1 = ctx.siegeltheta(t, derivative=1) if d == 1: v = ctx.j*e1*(z1+z*theta1) ctx.prec=prec if ctx._is_real_type(t): return ctx._re(v) return +v z2 = ctx.zeta(0.5+ctx.j*t, derivative=2) theta2 = ctx.siegeltheta(t, derivative=2) comb1 = theta1**2-ctx.j*theta2 if d == 2: def terms(): return [2*z1*theta1, z2, z*comb1] v = ctx.sum_accurately(terms, 1) v = -e1*v ctx.prec = prec if ctx._is_real_type(t): return ctx._re(v) return +v ctx.prec += 10 z3 = ctx.zeta(0.5+ctx.j*t, derivative=3) theta3 = ctx.siegeltheta(t, derivative=3) comb2 = theta1**3-3*ctx.j*theta1*theta2-theta3 if d == 3: def terms(): return [3*theta1*z2, 3*z1*comb1, z3+z*comb2] v = ctx.sum_accurately(terms, 1) v = -ctx.j*e1*v ctx.prec = prec if ctx._is_real_type(t): return ctx._re(v) return +v z4 = ctx.zeta(0.5+ctx.j*t, derivative=4) theta4 = ctx.siegeltheta(t, derivative=4) def terms(): return [theta1**4, -6*ctx.j*theta1**2*theta2, -3*theta2**2, -4*theta1*theta3, ctx.j*theta4] comb3 = ctx.sum_accurately(terms, 1) if d == 4: def terms(): return [6*theta1**2*z2, -6*ctx.j*z2*theta2, 4*theta1*z3, 4*z1*comb2, z4, z*comb3] v = ctx.sum_accurately(terms, 1) v = e1*v ctx.prec = prec if ctx._is_real_type(t): return ctx._re(v) return +v if d > 4: h = lambda x: ctx.siegelz(x, derivative=4) return ctx.diff(h, t, n=d-4) _zeta_zeros = [ 14.134725142,21.022039639,25.010857580,30.424876126,32.935061588, 37.586178159,40.918719012,43.327073281,48.005150881,49.773832478, 52.970321478,56.446247697,59.347044003,60.831778525,65.112544048, 67.079810529,69.546401711,72.067157674,75.704690699,77.144840069, 79.337375020,82.910380854,84.735492981,87.425274613,88.809111208, 92.491899271,94.651344041,95.870634228,98.831194218,101.317851006, 103.725538040,105.446623052,107.168611184,111.029535543,111.874659177, 114.320220915,116.226680321,118.790782866,121.370125002,122.946829294, 124.256818554,127.516683880,129.578704200,131.087688531,133.497737203, 134.756509753,138.116042055,139.736208952,141.123707404,143.111845808, 146.000982487,147.422765343,150.053520421,150.925257612,153.024693811, 156.112909294,157.597591818,158.849988171,161.188964138,163.030709687, 165.537069188,167.184439978,169.094515416,169.911976479,173.411536520, 174.754191523,176.441434298,178.377407776,179.916484020,182.207078484, 184.874467848,185.598783678,187.228922584,189.416158656,192.026656361, 193.079726604,195.265396680,196.876481841,198.015309676,201.264751944, 202.493594514,204.189671803,205.394697202,207.906258888,209.576509717, 211.690862595,213.347919360,214.547044783,216.169538508,219.067596349, 220.714918839,221.430705555,224.007000255,224.983324670,227.421444280, 229.337413306,231.250188700,231.987235253,233.693404179,236.524229666, ] def _load_zeta_zeros(url): import urllib d = urllib.urlopen(url) L = [float(x) for x in d.readlines()] # Sanity check assert round(L[0]) == 14 _zeta_zeros[:] = L @defun def oldzetazero(ctx, n, url='http://www.dtc.umn.edu/~odlyzko/zeta_tables/zeros1'): n = int(n) if n < 0: return ctx.zetazero(-n).conjugate() if n == 0: raise ValueError("n must be nonzero") if n > len(_zeta_zeros) and n <= 100000: _load_zeta_zeros(url) if n > len(_zeta_zeros): raise NotImplementedError("n too large for zetazeros") return ctx.mpc(0.5, ctx.findroot(ctx.siegelz, _zeta_zeros[n-1])) @defun_wrapped def riemannr(ctx, x): if x == 0: return ctx.zero # Check if a simple asymptotic estimate is accurate enough if abs(x) > 1000: a = ctx.li(x) b = 0.5*ctx.li(ctx.sqrt(x)) if abs(b) < abs(a)*ctx.eps: return a if abs(x) < 0.01: # XXX ctx.prec += int(-ctx.log(abs(x),2)) # Sum Gram's series s = t = ctx.one u = ctx.ln(x) k = 1 while abs(t) > abs(s)*ctx.eps: t = t * u / k s += t / (k * ctx._zeta_int(k+1)) k += 1 return s @defun_static def primepi(ctx, x): x = int(x) if x < 2: return 0 return len(ctx.list_primes(x)) # TODO: fix the interface wrt contexts @defun_wrapped def primepi2(ctx, x): x = int(x) if x < 2: return ctx._iv.zero if x < 2657: return ctx._iv.mpf(ctx.primepi(x)) mid = ctx.li(x) # Schoenfeld's estimate for x >= 2657, assuming RH err = ctx.sqrt(x,rounding='u')*ctx.ln(x,rounding='u')/8/ctx.pi(rounding='d') a = ctx.floor((ctx._iv.mpf(mid)-err).a, rounding='d') b = ctx.ceil((ctx._iv.mpf(mid)+err).b, rounding='u') return ctx._iv.mpf([a,b]) @defun_wrapped def primezeta(ctx, s): if ctx.isnan(s): return s if ctx.re(s) <= 0: raise ValueError("prime zeta function defined only for re(s) > 0") if s == 1: return ctx.inf if s == 0.5: return ctx.mpc(ctx.ninf, ctx.pi) r = ctx.re(s) if r > ctx.prec: return 0.5**s else: wp = ctx.prec + int(r) def terms(): orig = ctx.prec # zeta ~ 1+eps; need to set precision # to get logarithm accurately k = 0 while 1: k += 1 u = ctx.moebius(k) if not u: continue ctx.prec = wp t = u*ctx.ln(ctx.zeta(k*s))/k if not t: return #print ctx.prec, ctx.nstr(t) ctx.prec = orig yield t return ctx.sum_accurately(terms) # TODO: for bernpoly and eulerpoly, ensure that all exact zeros are covered @defun_wrapped def bernpoly(ctx, n, z): # Slow implementation: #return sum(ctx.binomial(n,k)*ctx.bernoulli(k)*z**(n-k) for k in xrange(0,n+1)) n = int(n) if n < 0: raise ValueError("Bernoulli polynomials only defined for n >= 0") if z == 0 or (z == 1 and n > 1): return ctx.bernoulli(n) if z == 0.5: return (ctx.ldexp(1,1-n)-1)*ctx.bernoulli(n) if n <= 3: if n == 0: return z ** 0 if n == 1: return z - 0.5 if n == 2: return (6*z*(z-1)+1)/6 if n == 3: return z*(z*(z-1.5)+0.5) if ctx.isinf(z): return z ** n if ctx.isnan(z): return z if abs(z) > 2: def terms(): t = ctx.one yield t r = ctx.one/z k = 1 while k <= n: t = t*(n+1-k)/k*r if not (k > 2 and k & 1): yield t*ctx.bernoulli(k) k += 1 return ctx.sum_accurately(terms) * z**n else: def terms(): yield ctx.bernoulli(n) t = ctx.one k = 1 while k <= n: t = t*(n+1-k)/k * z m = n-k if not (m > 2 and m & 1): yield t*ctx.bernoulli(m) k += 1 return ctx.sum_accurately(terms) @defun_wrapped def eulerpoly(ctx, n, z): n = int(n) if n < 0: raise ValueError("Euler polynomials only defined for n >= 0") if n <= 2: if n == 0: return z ** 0 if n == 1: return z - 0.5 if n == 2: return z*(z-1) if ctx.isinf(z): return z**n if ctx.isnan(z): return z m = n+1 if z == 0: return -2*(ctx.ldexp(1,m)-1)*ctx.bernoulli(m)/m * z**0 if z == 1: return 2*(ctx.ldexp(1,m)-1)*ctx.bernoulli(m)/m * z**0 if z == 0.5: if n % 2: return ctx.zero # Use exact code for Euler numbers if n < 100 or n*ctx.mag(0.46839865*n) < ctx.prec*0.25: return ctx.ldexp(ctx._eulernum(n), -n) # http://functions.wolfram.com/Polynomials/EulerE2/06/01/02/01/0002/ def terms(): t = ctx.one k = 0 w = ctx.ldexp(1,n+2) while 1: v = n-k+1 if not (v > 2 and v & 1): yield (2-w)*ctx.bernoulli(v)*t k += 1 if k > n: break t = t*z*(n-k+2)/k w *= 0.5 return ctx.sum_accurately(terms) / m @defun def eulernum(ctx, n, exact=False): n = int(n) if exact: return int(ctx._eulernum(n)) if n < 100: return ctx.mpf(ctx._eulernum(n)) if n % 2: return ctx.zero return ctx.ldexp(ctx.eulerpoly(n,0.5), n) # TODO: this should be implemented low-level def polylog_series(ctx, s, z): tol = +ctx.eps l = ctx.zero k = 1 zk = z while 1: term = zk / k**s l += term if abs(term) < tol: break zk *= z k += 1 return l def polylog_continuation(ctx, n, z): if n < 0: return z*0 twopij = 2j * ctx.pi a = -twopij**n/ctx.fac(n) * ctx.bernpoly(n, ctx.ln(z)/twopij) if ctx._is_real_type(z) and z < 0: a = ctx._re(a) if ctx._im(z) < 0 or (ctx._im(z) == 0 and ctx._re(z) >= 1): a -= twopij*ctx.ln(z)**(n-1)/ctx.fac(n-1) return a def polylog_unitcircle(ctx, n, z): tol = +ctx.eps if n > 1: l = ctx.zero logz = ctx.ln(z) logmz = ctx.one m = 0 while 1: if (n-m) != 1: term = ctx.zeta(n-m) * logmz / ctx.fac(m) if term and abs(term) < tol: break l += term logmz *= logz m += 1 l += ctx.ln(z)**(n-1)/ctx.fac(n-1)*(ctx.harmonic(n-1)-ctx.ln(-ctx.ln(z))) elif n < 1: # else l = ctx.fac(-n)*(-ctx.ln(z))**(n-1) logz = ctx.ln(z) logkz = ctx.one k = 0 while 1: b = ctx.bernoulli(k-n+1) if b: term = b*logkz/(ctx.fac(k)*(k-n+1)) if abs(term) < tol: break l -= term logkz *= logz k += 1 else: raise ValueError if ctx._is_real_type(z) and z < 0: l = ctx._re(l) return l def polylog_general(ctx, s, z): v = ctx.zero u = ctx.ln(z) if not abs(u) < 5: # theoretically |u| < 2*pi raise NotImplementedError("polylog for arbitrary s and z") t = 1 k = 0 while 1: term = ctx.zeta(s-k) * t if abs(term) < ctx.eps: break v += term k += 1 t *= u t /= k return ctx.gamma(1-s)*(-u)**(s-1) + v @defun_wrapped def polylog(ctx, s, z): s = ctx.convert(s) z = ctx.convert(z) if z == 1: return ctx.zeta(s) if z == -1: return -ctx.altzeta(s) if s == 0: return z/(1-z) if s == 1: return -ctx.ln(1-z) if s == -1: return z/(1-z)**2 if abs(z) <= 0.75 or (not ctx.isint(s) and abs(z) < 0.9): return polylog_series(ctx, s, z) if abs(z) >= 1.4 and ctx.isint(s): return (-1)**(s+1)*polylog_series(ctx, s, 1/z) + polylog_continuation(ctx, s, z) if ctx.isint(s): return polylog_unitcircle(ctx, int(s), z) return polylog_general(ctx, s, z) #raise NotImplementedError("polylog for arbitrary s and z") # This could perhaps be used in some cases #from quadrature import quad #return quad(lambda t: t**(s-1)/(exp(t)/z-1),[0,inf])/gamma(s) @defun_wrapped def clsin(ctx, s, z, pi=False): if ctx.isint(s) and s < 0 and int(s) % 2 == 1: return z*0 if pi: a = ctx.expjpi(z) else: a = ctx.expj(z) if ctx._is_real_type(z) and ctx._is_real_type(s): return ctx.im(ctx.polylog(s,a)) b = 1/a return (-0.5j)*(ctx.polylog(s,a) - ctx.polylog(s,b)) @defun_wrapped def clcos(ctx, s, z, pi=False): if ctx.isint(s) and s < 0 and int(s) % 2 == 0: return z*0 if pi: a = ctx.expjpi(z) else: a = ctx.expj(z) if ctx._is_real_type(z) and ctx._is_real_type(s): return ctx.re(ctx.polylog(s,a)) b = 1/a return 0.5*(ctx.polylog(s,a) + ctx.polylog(s,b)) @defun def altzeta(ctx, s, **kwargs): try: return ctx._altzeta(s, **kwargs) except NotImplementedError: return ctx._altzeta_generic(s) @defun_wrapped def _altzeta_generic(ctx, s): if s == 1: return ctx.ln2 + 0*s return -ctx.powm1(2, 1-s) * ctx.zeta(s) @defun def zeta(ctx, s, a=1, derivative=0, method=None, **kwargs): d = int(derivative) if a == 1 and not (d or method): try: return ctx._zeta(s, **kwargs) except NotImplementedError: pass s = ctx.convert(s) prec = ctx.prec method = kwargs.get('method') verbose = kwargs.get('verbose') if (not s) and (not derivative): return ctx.mpf(0.5) - ctx._convert_param(a)[0] if a == 1 and method != 'euler-maclaurin': im = abs(ctx._im(s)) re = abs(ctx._re(s)) #if (im < prec or method == 'borwein') and not derivative: # try: # if verbose: # print "zeta: Attempting to use the Borwein algorithm" # return ctx._zeta(s, **kwargs) # except NotImplementedError: # if verbose: # print "zeta: Could not use the Borwein algorithm" # pass if abs(im) > 500*prec and 10*re < prec and derivative <= 4 or \ method == 'riemann-siegel': try: # py2.4 compatible try block try: if verbose: print("zeta: Attempting to use the Riemann-Siegel algorithm") return ctx.rs_zeta(s, derivative, **kwargs) except NotImplementedError: if verbose: print("zeta: Could not use the Riemann-Siegel algorithm") pass finally: ctx.prec = prec if s == 1: return ctx.inf abss = abs(s) if abss == ctx.inf: if ctx.re(s) == ctx.inf: if d == 0: return ctx.one return ctx.zero return s*0 elif ctx.isnan(abss): return 1/s if ctx.re(s) > 2*ctx.prec and a == 1 and not derivative: return ctx.one + ctx.power(2, -s) return +ctx._hurwitz(s, a, d, **kwargs) @defun def _hurwitz(ctx, s, a=1, d=0, **kwargs): prec = ctx.prec verbose = kwargs.get('verbose') try: extraprec = 10 ctx.prec += extraprec # We strongly want to special-case rational a a, atype = ctx._convert_param(a) if ctx.re(s) < 0: if verbose: print("zeta: Attempting reflection formula") try: return _hurwitz_reflection(ctx, s, a, d, atype) except NotImplementedError: pass if verbose: print("zeta: Reflection formula failed") if verbose: print("zeta: Using the Euler-Maclaurin algorithm") while 1: ctx.prec = prec + extraprec T1, T2 = _hurwitz_em(ctx, s, a, d, prec+10, verbose) cancellation = ctx.mag(T1) - ctx.mag(T1+T2) if verbose: print_("Term 1:", T1) print_("Term 2:", T2) print_("Cancellation:", cancellation, "bits") if cancellation < extraprec: return T1 + T2 else: extraprec = max(2*extraprec, min(cancellation + 5, 100*prec)) if extraprec > kwargs.get('maxprec', 100*prec): raise ctx.NoConvergence("zeta: too much cancellation") finally: ctx.prec = prec def _hurwitz_reflection(ctx, s, a, d, atype): # TODO: implement for derivatives if d != 0: raise NotImplementedError res = ctx.re(s) negs = -s # Integer reflection formula if ctx.isnpint(s): n = int(res) if n <= 0: return ctx.bernpoly(1-n, a) / (n-1) t = 1-s # We now require a to be standardized v = 0 shift = 0 b = a while ctx.re(b) > 1: b -= 1 v -= b**negs shift -= 1 while ctx.re(b) <= 0: v += b**negs b += 1 shift += 1 # Rational reflection formula if atype == 'Q' or atype == 'Z': try: p, q = a._mpq_ except: assert a == int(a) p = int(a) q = 1 p += shift*q assert 1 <= p <= q g = ctx.fsum(ctx.cospi(t/2-2*k*b)*ctx._hurwitz(t,(k,q)) \ for k in range(1,q+1)) g *= 2*ctx.gamma(t)/(2*ctx.pi*q)**t v += g return v # General reflection formula # Note: clcos/clsin can raise NotImplementedError else: C1, C2 = ctx.cospi_sinpi(0.5*t) # Clausen functions; could maybe use polylog directly if C1: C1 *= ctx.clcos(t, 2*a, pi=True) if C2: C2 *= ctx.clsin(t, 2*a, pi=True) v += 2*ctx.gamma(t)/(2*ctx.pi)**t*(C1+C2) return v def _hurwitz_em(ctx, s, a, d, prec, verbose): # May not be converted at this point a = ctx.convert(a) tol = -prec # Estimate number of terms for Euler-Maclaurin summation; could be improved M1 = 0 M2 = prec // 3 N = M2 lsum = 0 # This speeds up the recurrence for derivatives if ctx.isint(s): s = int(ctx._re(s)) s1 = s-1 while 1: # Truncated L-series l = ctx._zetasum(s, M1+a, M2-M1-1, [d])[0][0] #if d: # l = ctx.fsum((-ctx.ln(n+a))**d * (n+a)**negs for n in range(M1,M2)) #else: # l = ctx.fsum((n+a)**negs for n in range(M1,M2)) lsum += l M2a = M2+a logM2a = ctx.ln(M2a) logM2ad = logM2a**d logs = [logM2ad] logr = 1/logM2a rM2a = 1/M2a M2as = rM2a**s if d: tailsum = ctx.gammainc(d+1, s1*logM2a) / s1**(d+1) else: tailsum = 1/((s1)*(M2a)**s1) tailsum += 0.5 * logM2ad * M2as U = [1] r = M2as fact = 2 for j in range(1, N+1): # TODO: the following could perhaps be tidied a bit j2 = 2*j if j == 1: upds = [1] else: upds = [j2-2, j2-1] for m in upds: D = min(m,d+1) if m <= d: logs.append(logs[-1] * logr) Un = [0]*(D+1) for i in xrange(D): Un[i] = (1-m-s)*U[i] for i in xrange(1,D+1): Un[i] += (d-(i-1))*U[i-1] U = Un r *= rM2a t = ctx.fdot(U, logs) * r * ctx.bernoulli(j2)/(-fact) tailsum += t if ctx.mag(t) < tol: return lsum, (-1)**d * tailsum fact *= (j2+1)*(j2+2) if verbose: print_("Sum range:", M1, M2, "term magnitude", ctx.mag(t), "tolerance", tol) M1, M2 = M2, M2*2 if ctx.re(s) < 0: N += N//2 @defun def _zetasum(ctx, s, a, n, derivatives=[0], reflect=False): """ Returns [xd0,xd1,...,xdr], [yd0,yd1,...ydr] where xdk = D^k ( 1/a^s + 1/(a+1)^s + ... + 1/(a+n)^s ) ydk = D^k conj( 1/a^(1-s) + 1/(a+1)^(1-s) + ... + 1/(a+n)^(1-s) ) D^k = kth derivative with respect to s, k ranges over the given list of derivatives (which should consist of either a single element or a range 0,1,...r). If reflect=False, the ydks are not computed. """ #print "zetasum", s, a, n # don't use the fixed-point code if there are large exponentials if abs(ctx.re(s)) < 0.5 * ctx.prec: try: return ctx._zetasum_fast(s, a, n, derivatives, reflect) except NotImplementedError: pass negs = ctx.fneg(s, exact=True) have_derivatives = derivatives != [0] have_one_derivative = len(derivatives) == 1 if not reflect: if not have_derivatives: return [ctx.fsum((a+k)**negs for k in xrange(n+1))], [] if have_one_derivative: d = derivatives[0] x = ctx.fsum(ctx.ln(a+k)**d * (a+k)**negs for k in xrange(n+1)) return [(-1)**d * x], [] maxd = max(derivatives) if not have_one_derivative: derivatives = range(maxd+1) xs = [ctx.zero for d in derivatives] if reflect: ys = [ctx.zero for d in derivatives] else: ys = [] for k in xrange(n+1): w = a + k xterm = w ** negs if reflect: yterm = ctx.conj(ctx.one / (w * xterm)) if have_derivatives: logw = -ctx.ln(w) if have_one_derivative: logw = logw ** maxd xs[0] += xterm * logw if reflect: ys[0] += yterm * logw else: t = ctx.one for d in derivatives: xs[d] += xterm * t if reflect: ys[d] += yterm * t t *= logw else: xs[0] += xterm if reflect: ys[0] += yterm return xs, ys @defun def dirichlet(ctx, s, chi=[1], derivative=0): s = ctx.convert(s) q = len(chi) d = int(derivative) if d > 2: raise NotImplementedError("arbitrary order derivatives") prec = ctx.prec try: ctx.prec += 10 if s == 1: have_pole = True for x in chi: if x and x != 1: have_pole = False h = +ctx.eps ctx.prec *= 2*(d+1) s += h if have_pole: return +ctx.inf z = ctx.zero for p in range(1,q+1): if chi[p%q]: if d == 1: z += chi[p%q] * (ctx.zeta(s, (p,q), 1) - \ ctx.zeta(s, (p,q))*ctx.log(q)) else: z += chi[p%q] * ctx.zeta(s, (p,q)) z /= q**s finally: ctx.prec = prec return +z def secondzeta_main_term(ctx, s, a, **kwargs): tol = ctx.eps f = lambda n: ctx.gammainc(0.5*s, a*gamm**2, regularized=True)*gamm**(-s) totsum = term = ctx.zero mg = ctx.inf n = 0 while mg > tol: totsum += term n += 1 gamm = ctx.im(ctx.zetazero_memoized(n)) term = f(n) mg = abs(term) err = 0 if kwargs.get("error"): sg = ctx.re(s) err = 0.5*ctx.pi**(-1)*max(1,sg)*a**(sg-0.5)*ctx.log(gamm/(2*ctx.pi))*\ ctx.gammainc(-0.5, a*gamm**2)/abs(ctx.gamma(s/2)) err = abs(err) return +totsum, err, n def secondzeta_prime_term(ctx, s, a, **kwargs): tol = ctx.eps f = lambda n: ctx.gammainc(0.5*(1-s),0.25*ctx.log(n)**2 * a**(-1))*\ ((0.5*ctx.log(n))**(s-1))*ctx.mangoldt(n)/ctx.sqrt(n)/\ (2*ctx.gamma(0.5*s)*ctx.sqrt(ctx.pi)) totsum = term = ctx.zero mg = ctx.inf n = 1 while mg > tol or n < 9: totsum += term n += 1 term = f(n) if term == 0: mg = ctx.inf else: mg = abs(term) if kwargs.get("error"): err = mg return +totsum, err, n def secondzeta_exp_term(ctx, s, a): if ctx.isint(s) and ctx.re(s) <= 0: m = int(round(ctx.re(s))) if not m & 1: return ctx.mpf('-0.25')**(-m//2) tol = ctx.eps f = lambda n: (0.25*a)**n/((n+0.5*s)*ctx.fac(n)) totsum = ctx.zero term = f(0) mg = ctx.inf n = 0 while mg > tol: totsum += term n += 1 term = f(n) mg = abs(term) v = a**(0.5*s)*totsum/ctx.gamma(0.5*s) return v def secondzeta_singular_term(ctx, s, a, **kwargs): factor = a**(0.5*(s-1))/(4*ctx.sqrt(ctx.pi)*ctx.gamma(0.5*s)) extraprec = ctx.mag(factor) ctx.prec += extraprec factor = a**(0.5*(s-1))/(4*ctx.sqrt(ctx.pi)*ctx.gamma(0.5*s)) tol = ctx.eps f = lambda n: ctx.bernpoly(n,0.75)*(4*ctx.sqrt(a))**n*\ ctx.gamma(0.5*n)/((s+n-1)*ctx.fac(n)) totsum = ctx.zero mg1 = ctx.inf n = 1 term = f(n) mg2 = abs(term) while mg2 > tol and mg2 <= mg1: totsum += term n += 1 term = f(n) totsum += term n +=1 term = f(n) mg1 = mg2 mg2 = abs(term) totsum += term pole = -2*(s-1)**(-2)+(ctx.euler+ctx.log(16*ctx.pi**2*a))*(s-1)**(-1) st = factor*(pole+totsum) err = 0 if kwargs.get("error"): if not ((mg2 > tol) and (mg2 <= mg1)): if mg2 <= tol: err = ctx.mpf(10)**int(ctx.log(abs(factor*tol),10)) if mg2 > mg1: err = ctx.mpf(10)**int(ctx.log(abs(factor*mg1),10)) err = max(err, ctx.eps*1.) ctx.prec -= extraprec return +st, err @defun def secondzeta(ctx, s, a = 0.015, **kwargs): r""" Evaluates the secondary zeta function `Z(s)`, defined for `\mathrm{Re}(s)>1` by .. math :: Z(s) = \sum_{n=1}^{\infty} \frac{1}{\tau_n^s} where `\frac12+i\tau_n` runs through the zeros of `\zeta(s)` with imaginary part positive. `Z(s)` extends to a meromorphic function on `\mathbb{C}` with a double pole at `s=1` and simple poles at the points `-2n` for `n=0`, 1, 2, ... **Examples** >>> from mpmath import * >>> mp.pretty = True; mp.dps = 15 >>> secondzeta(2) 0.023104993115419 >>> xi = lambda s: 0.5*s*(s-1)*pi**(-0.5*s)*gamma(0.5*s)*zeta(s) >>> Xi = lambda t: xi(0.5+t*j) >>> -0.5*diff(Xi,0,n=2)/Xi(0) (0.023104993115419 + 0.0j) We may ask for an approximate error value:: >>> secondzeta(0.5+100j, error=True) ((-0.216272011276718 - 0.844952708937228j), 2.22044604925031e-16) The function has poles at the negative odd integers, and dyadic rational values at the negative even integers:: >>> mp.dps = 30 >>> secondzeta(-8) -0.67236328125 >>> secondzeta(-7) +inf **Implementation notes** The function is computed as sum of four terms `Z(s)=A(s)-P(s)+E(s)-S(s)` respectively main, prime, exponential and singular terms. The main term `A(s)` is computed from the zeros of zeta. The prime term depends on the von Mangoldt function. The singular term is responsible for the poles of the function. The four terms depends on a small parameter `a`. We may change the value of `a`. Theoretically this has no effect on the sum of the four terms, but in practice may be important. A smaller value of the parameter `a` makes `A(s)` depend on a smaller number of zeros of zeta, but `P(s)` uses more values of von Mangoldt function. We may also add a verbose option to obtain data about the values of the four terms. >>> mp.dps = 10 >>> secondzeta(0.5 + 40j, error=True, verbose=True) main term = (-30190318549.138656312556 - 13964804384.624622876523j) computed using 19 zeros of zeta prime term = (132717176.89212754625045 + 188980555.17563978290601j) computed using 9 values of the von Mangoldt function exponential term = (542447428666.07179812536 + 362434922978.80192435203j) singular term = (512124392939.98154322355 + 348281138038.65531023921j) ((0.059471043 + 0.3463514534j), 1.455191523e-11) >>> secondzeta(0.5 + 40j, a=0.04, error=True, verbose=True) main term = (-151962888.19606243907725 - 217930683.90210294051982j) computed using 9 zeros of zeta prime term = (2476659342.3038722372461 + 28711581821.921627163136j) computed using 37 values of the von Mangoldt function exponential term = (178506047114.7838188264 + 819674143244.45677330576j) singular term = (175877424884.22441310708 + 790744630738.28669174871j) ((0.059471043 + 0.3463514534j), 1.455191523e-11) Notice the great cancellation between the four terms. Changing `a`, the four terms are very different numbers but the cancellation gives the good value of Z(s). **References** A. Voros, Zeta functions for the Riemann zeros, Ann. Institute Fourier, 53, (2003) 665--699. A. Voros, Zeta functions over Zeros of Zeta Functions, Lecture Notes of the Unione Matematica Italiana, Springer, 2009. """ s = ctx.convert(s) a = ctx.convert(a) tol = ctx.eps if ctx.isint(s) and ctx.re(s) <= 1: if abs(s-1) < tol*1000: return ctx.inf m = int(round(ctx.re(s))) if m & 1: return ctx.inf else: return ((-1)**(-m//2)*\ ctx.fraction(8-ctx.eulernum(-m,exact=True),2**(-m+3))) prec = ctx.prec try: t3 = secondzeta_exp_term(ctx, s, a) extraprec = max(ctx.mag(t3),0) ctx.prec += extraprec + 3 t1, r1, gt = secondzeta_main_term(ctx,s,a,error='True', verbose='True') t2, r2, pt = secondzeta_prime_term(ctx,s,a,error='True', verbose='True') t4, r4 = secondzeta_singular_term(ctx,s,a,error='True') t3 = secondzeta_exp_term(ctx, s, a) err = r1+r2+r4 t = t1-t2+t3-t4 if kwargs.get("verbose"): print_('main term =', t1) print_(' computed using', gt, 'zeros of zeta') print_('prime term =', t2) print_(' computed using', pt, 'values of the von Mangoldt function') print_('exponential term =', t3) print_('singular term =', t4) finally: ctx.prec = prec if kwargs.get("error"): w = max(ctx.mag(abs(t)),0) err = max(err*2**w, ctx.eps*1.*2**w) return +t, err return +t @defun_wrapped def lerchphi(ctx, z, s, a): r""" Gives the Lerch transcendent, defined for `|z| < 1` and `\Re{a} > 0` by .. math :: \Phi(z,s,a) = \sum_{k=0}^{\infty} \frac{z^k}{(a+k)^s} and generally by the recurrence `\Phi(z,s,a) = z \Phi(z,s,a+1) + a^{-s}` along with the integral representation valid for `\Re{a} > 0` .. math :: \Phi(z,s,a) = \frac{1}{2 a^s} + \int_0^{\infty} \frac{z^t}{(a+t)^s} dt - 2 \int_0^{\infty} \frac{\sin(t \log z - s \operatorname{arctan}(t/a)}{(a^2 + t^2)^{s/2} (e^{2 \pi t}-1)} dt. The Lerch transcendent generalizes the Hurwitz zeta function :func:`zeta` (`z = 1`) and the polylogarithm :func:`polylog` (`a = 1`). **Examples** Several evaluations in terms of simpler functions:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> lerchphi(-1,2,0.5); 4*catalan 3.663862376708876060218414 3.663862376708876060218414 >>> diff(lerchphi, (-1,-2,1), (0,1,0)); 7*zeta(3)/(4*pi**2) 0.2131391994087528954617607 0.2131391994087528954617607 >>> lerchphi(-4,1,1); log(5)/4 0.4023594781085250936501898 0.4023594781085250936501898 >>> lerchphi(-3+2j,1,0.5); 2*atanh(sqrt(-3+2j))/sqrt(-3+2j) (1.142423447120257137774002 + 0.2118232380980201350495795j) (1.142423447120257137774002 + 0.2118232380980201350495795j) Evaluation works for complex arguments and `|z| \ge 1`:: >>> lerchphi(1+2j, 3-j, 4+2j) (0.002025009957009908600539469 + 0.003327897536813558807438089j) >>> lerchphi(-2,2,-2.5) -12.28676272353094275265944 >>> lerchphi(10,10,10) (-4.462130727102185701817349e-11 - 1.575172198981096218823481e-12j) >>> lerchphi(10,10,-10.5) (112658784011940.5605789002 - 498113185.5756221777743631j) Some degenerate cases:: >>> lerchphi(0,1,2) 0.5 >>> lerchphi(0,1,-2) -0.5 Reduction to simpler functions:: >>> lerchphi(1, 4.25+1j, 1) (1.044674457556746668033975 - 0.04674508654012658932271226j) >>> zeta(4.25+1j) (1.044674457556746668033975 - 0.04674508654012658932271226j) >>> lerchphi(1 - 0.5**10, 4.25+1j, 1) (1.044629338021507546737197 - 0.04667768813963388181708101j) >>> lerchphi(3, 4, 1) (1.249503297023366545192592 - 0.2314252413375664776474462j) >>> polylog(4, 3) / 3 (1.249503297023366545192592 - 0.2314252413375664776474462j) >>> lerchphi(3, 4, 1 - 0.5**10) (1.253978063946663945672674 - 0.2316736622836535468765376j) **References** 1. [DLMF]_ section 25.14 """ if z == 0: return a ** (-s) # Faster, but these cases are useful for testing right now if z == 1: return ctx.zeta(s, a) if a == 1: return ctx.polylog(s, z) / z if ctx.re(a) < 1: if ctx.isnpint(a): raise ValueError("Lerch transcendent complex infinity") m = int(ctx.ceil(1-ctx.re(a))) v = ctx.zero zpow = ctx.one for n in xrange(m): v += zpow / (a+n)**s zpow *= z return zpow * ctx.lerchphi(z,s, a+m) + v g = ctx.ln(z) v = 1/(2*a**s) + ctx.gammainc(1-s, -a*g) * (-g)**(s-1) / z**a h = s / 2 r = 2*ctx.pi f = lambda t: ctx.sin(s*ctx.atan(t/a)-t*g) / \ ((a**2+t**2)**h * ctx.expm1(r*t)) v += 2*ctx.quad(f, [0, ctx.inf]) if not ctx.im(z) and not ctx.im(s) and not ctx.im(a) and ctx.re(z) < 1: v = ctx.chop(v) return v mpmath-1.0.0/mpmath/functions/zetazeros.py000066400000000000000000000743471316273626600207270ustar00rootroot00000000000000""" The function zetazero(n) computes the n-th nontrivial zero of zeta(s). The general strategy is to locate a block of Gram intervals B where we know exactly the number of zeros contained and which of those zeros is that which we search. If n <= 400 000 000 we know exactly the Rosser exceptions, contained in a list in this file. Hence for n<=400 000 000 we simply look at these list of exceptions. If our zero is implicated in one of these exceptions we have our block B. In other case we simply locate the good Rosser block containing our zero. For n > 400 000 000 we apply the method of Turing, as complemented by Lehman, Brent and Trudgian to find a suitable B. """ from .functions import defun, defun_wrapped def find_rosser_block_zero(ctx, n): """for n<400 000 000 determines a block were one find our zero""" for k in range(len(_ROSSER_EXCEPTIONS)//2): a=_ROSSER_EXCEPTIONS[2*k][0] b=_ROSSER_EXCEPTIONS[2*k][1] if ((a<= n-2) and (n-1 <= b)): t0 = ctx.grampoint(a) t1 = ctx.grampoint(b) v0 = ctx._fp.siegelz(t0) v1 = ctx._fp.siegelz(t1) my_zero_number = n-a-1 zero_number_block = b-a pattern = _ROSSER_EXCEPTIONS[2*k+1] return (my_zero_number, [a,b], [t0,t1], [v0,v1]) k = n-2 t,v,b = compute_triple_tvb(ctx, k) T = [t] V = [v] while b < 0: k -= 1 t,v,b = compute_triple_tvb(ctx, k) T.insert(0,t) V.insert(0,v) my_zero_number = n-k-1 m = n-1 t,v,b = compute_triple_tvb(ctx, m) T.append(t) V.append(v) while b < 0: m += 1 t,v,b = compute_triple_tvb(ctx, m) T.append(t) V.append(v) return (my_zero_number, [k,m], T, V) def wpzeros(t): """Precision needed to compute higher zeros""" wp = 53 if t > 3*10**8: wp = 63 if t > 10**11: wp = 70 if t > 10**14: wp = 83 return wp def separate_zeros_in_block(ctx, zero_number_block, T, V, limitloop=None, fp_tolerance=None): """Separate the zeros contained in the block T, limitloop determines how long one must search""" if limitloop is None: limitloop = ctx.inf loopnumber = 0 variations = count_variations(V) while ((variations < zero_number_block) and (loopnumber 0): alpha = ctx.sqrt(u/v) b= (alpha*a+b2)/(alpha+1) else: b = (a+b2)/2 if fp_tolerance < 10: w = ctx._fp.siegelz(b) if abs(w)ITERATION_LIMIT)and(loopnumber>2)and(variations+2==zero_number_block): dtMax=0 dtSec=0 kMax = 0 for k1 in range(1,len(T)): dt = T[k1]-T[k1-1] if dt > dtMax: kMax=k1 dtSec = dtMax dtMax = dt elif (dtdtSec): dtSec = dt if dtMax>3*dtSec: f = lambda x: ctx.rs_z(x,derivative=1) t0=T[kMax-1] t1 = T[kMax] t=ctx.findroot(f, (t0,t1), solver ='illinois',verify=False, verbose=False) v = ctx.siegelz(t) if (t0 2*wpz: index +=1 precs = [precs[0] // 2 +3+2*index] + precs ctx.prec = precs[0] + guard r = ctx.findroot(lambda x:ctx.siegelz(x), (t0,t1), solver ='illinois', verbose=False) #print "first step at", ctx.dps, "digits" z=ctx.mpc(0.5,r) for prec in precs[1:]: ctx.prec = prec + guard #print "refining to", ctx.dps, "digits" znew = z - ctx.zeta(z) / ctx.zeta(z, derivative=1) #print "difference", ctx.nstr(abs(z-znew)) z=ctx.mpc(0.5,ctx.im(znew)) return ctx.im(z) def sure_number_block(ctx, n): """The number of good Rosser blocks needed to apply Turing method References: R. P. Brent, On the Zeros of the Riemann Zeta Function in the Critical Strip, Math. Comp. 33 (1979) 1361--1372 T. Trudgian, Improvements to Turing Method, Math. Comp.""" if n < 9*10**5: return(2) g = ctx.grampoint(n-100) lg = ctx._fp.ln(g) brent = 0.0061 * lg**2 +0.08*lg trudgian = 0.0031 * lg**2 +0.11*lg N = ctx.ceil(min(brent,trudgian)) N = int(N) return N def compute_triple_tvb(ctx, n): t = ctx.grampoint(n) v = ctx._fp.siegelz(t) if ctx.mag(abs(v))400 000 000""" sb = sure_number_block(ctx, n) number_goodblocks = 0 m2 = n-1 t, v, b = compute_triple_tvb(ctx, m2) Tf = [t] Vf = [v] while b < 0: m2 += 1 t,v,b = compute_triple_tvb(ctx, m2) Tf.append(t) Vf.append(v) goodpoints = [m2] T = [t] V = [v] while number_goodblocks < 2*sb: m2 += 1 t, v, b = compute_triple_tvb(ctx, m2) T.append(t) V.append(v) while b < 0: m2 += 1 t,v,b = compute_triple_tvb(ctx, m2) T.append(t) V.append(v) goodpoints.append(m2) zn = len(T)-1 A, B, separated =\ separate_zeros_in_block(ctx, zn, T, V, limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance) Tf.pop() Tf.extend(A) Vf.pop() Vf.extend(B) if separated: number_goodblocks += 1 else: number_goodblocks = 0 T = [t] V = [v] # Now the same procedure to the left number_goodblocks = 0 m2 = n-2 t, v, b = compute_triple_tvb(ctx, m2) Tf.insert(0,t) Vf.insert(0,v) while b < 0: m2 -= 1 t,v,b = compute_triple_tvb(ctx, m2) Tf.insert(0,t) Vf.insert(0,v) goodpoints.insert(0,m2) T = [t] V = [v] while number_goodblocks < 2*sb: m2 -= 1 t, v, b = compute_triple_tvb(ctx, m2) T.insert(0,t) V.insert(0,v) while b < 0: m2 -= 1 t,v,b = compute_triple_tvb(ctx, m2) T.insert(0,t) V.insert(0,v) goodpoints.insert(0,m2) zn = len(T)-1 A, B, separated =\ separate_zeros_in_block(ctx, zn, T, V, limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance) A.pop() Tf = A+Tf B.pop() Vf = B+Vf if separated: number_goodblocks += 1 else: number_goodblocks = 0 T = [t] V = [v] r = goodpoints[2*sb] lg = len(goodpoints) s = goodpoints[lg-2*sb-1] tr, vr, br = compute_triple_tvb(ctx, r) ar = Tf.index(tr) ts, vs, bs = compute_triple_tvb(ctx, s) as1 = Tf.index(ts) T = Tf[ar:as1+1] V = Vf[ar:as1+1] zn = s-r A, B, separated =\ separate_zeros_in_block(ctx, zn,T,V,limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance) if separated: return (n-r-1,[r,s],A,B) q = goodpoints[sb] lg = len(goodpoints) t = goodpoints[lg-sb-1] tq, vq, bq = compute_triple_tvb(ctx, q) aq = Tf.index(tq) tt, vt, bt = compute_triple_tvb(ctx, t) at = Tf.index(tt) T = Tf[aq:at+1] V = Vf[aq:at+1] return (n-q-1,[q,t],T,V) def count_variations(V): count = 0 vold = V[0] for n in range(1, len(V)): vnew = V[n] if vold*vnew < 0: count +=1 vold = vnew return count def pattern_construct(ctx, block, T, V): pattern = '(' a = block[0] b = block[1] t0,v0,b0 = compute_triple_tvb(ctx, a) k = 0 k0 = 0 for n in range(a+1,b+1): t1,v1,b1 = compute_triple_tvb(ctx, n) lgT =len(T) while (k < lgT) and (T[k] <= t1): k += 1 L = V[k0:k] L.append(v1) L.insert(0,v0) count = count_variations(L) pattern = pattern + ("%s" % count) if b1 > 0: pattern = pattern + ')(' k0 = k t0,v0,b0 = t1,v1,b1 pattern = pattern[:-1] return pattern @defun def zetazero(ctx, n, info=False, round=True): r""" Computes the `n`-th nontrivial zero of `\zeta(s)` on the critical line, i.e. returns an approximation of the `n`-th largest complex number `s = \frac{1}{2} + ti` for which `\zeta(s) = 0`. Equivalently, the imaginary part `t` is a zero of the Z-function (:func:`~mpmath.siegelz`). **Examples** The first few zeros:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> zetazero(1) (0.5 + 14.13472514173469379045725j) >>> zetazero(2) (0.5 + 21.02203963877155499262848j) >>> zetazero(20) (0.5 + 77.14484006887480537268266j) Verifying that the values are zeros:: >>> for n in range(1,5): ... s = zetazero(n) ... chop(zeta(s)), chop(siegelz(s.imag)) ... (0.0, 0.0) (0.0, 0.0) (0.0, 0.0) (0.0, 0.0) Negative indices give the conjugate zeros (`n = 0` is undefined):: >>> zetazero(-1) (0.5 - 14.13472514173469379045725j) :func:`~mpmath.zetazero` supports arbitrarily large `n` and arbitrary precision:: >>> mp.dps = 15 >>> zetazero(1234567) (0.5 + 727690.906948208j) >>> mp.dps = 50 >>> zetazero(1234567) (0.5 + 727690.9069482075392389420041147142092708393819935j) >>> chop(zeta(_)/_) 0.0 with *info=True*, :func:`~mpmath.zetazero` gives additional information:: >>> mp.dps = 15 >>> zetazero(542964976,info=True) ((0.5 + 209039046.578535j), [542964969, 542964978], 6, '(013111110)') This means that the zero is between Gram points 542964969 and 542964978; it is the 6-th zero between them. Finally (01311110) is the pattern of zeros in this interval. The numbers indicate the number of zeros in each Gram interval (Rosser blocks between parenthesis). In this case there is only one Rosser block of length nine. """ n = int(n) if n < 0: return ctx.zetazero(-n).conjugate() if n == 0: raise ValueError("n must be nonzero") wpinitial = ctx.prec try: wpz, fp_tolerance = comp_fp_tolerance(ctx, n) ctx.prec = wpz if n < 400000000: my_zero_number, block, T, V =\ find_rosser_block_zero(ctx, n) else: my_zero_number, block, T, V =\ search_supergood_block(ctx, n, fp_tolerance) zero_number_block = block[1]-block[0] T, V, separated = separate_zeros_in_block(ctx, zero_number_block, T, V, limitloop=ctx.inf, fp_tolerance=fp_tolerance) if info: pattern = pattern_construct(ctx,block,T,V) prec = max(wpinitial, wpz) t = separate_my_zero(ctx, my_zero_number, zero_number_block,T,V,prec) v = ctx.mpc(0.5,t) finally: ctx.prec = wpinitial if round: v =+v if info: return (v,block,my_zero_number,pattern) else: return v def gram_index(ctx, t): if t > 10**13: wp = 3*ctx.log(t, 10) else: wp = 0 prec = ctx.prec try: ctx.prec += wp x0 = (t/(2*ctx.pi))*ctx.log(t/(2*ctx.pi)) h = ctx.findroot(lambda x:ctx.siegeltheta(t)-ctx.pi*x, x0) h = int(h) finally: ctx.prec = prec return(h) def count_to(ctx, t, T, V): count = 0 vold = V[0] told = T[0] tnew = T[1] k = 1 while tnew < t: vnew = V[k] if vold*vnew < 0: count += 1 vold = vnew k += 1 tnew = T[k] a = ctx.siegelz(t) if a*vold < 0: count += 1 return count def comp_fp_tolerance(ctx, n): wpz = wpzeros(n*ctx.log(n)) if n < 15*10**8: fp_tolerance = 0.0005 elif n <= 10**14: fp_tolerance = 0.1 else: fp_tolerance = 100 return wpz, fp_tolerance @defun def nzeros(ctx, t): r""" Computes the number of zeros of the Riemann zeta function in `(0,1) \times (0,t]`, usually denoted by `N(t)`. **Examples** The first zero has imaginary part between 14 and 15:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> nzeros(14) 0 >>> nzeros(15) 1 >>> zetazero(1) (0.5 + 14.1347251417347j) Some closely spaced zeros:: >>> nzeros(10**7) 21136125 >>> zetazero(21136125) (0.5 + 9999999.32718175j) >>> zetazero(21136126) (0.5 + 10000000.2400236j) >>> nzeros(545439823.215) 1500000001 >>> zetazero(1500000001) (0.5 + 545439823.201985j) >>> zetazero(1500000002) (0.5 + 545439823.325697j) This confirms the data given by J. van de Lune, H. J. J. te Riele and D. T. Winter in 1986. """ if t < 14.1347251417347: return 0 x = gram_index(ctx, t) k = int(ctx.floor(x)) wpinitial = ctx.prec wpz, fp_tolerance = comp_fp_tolerance(ctx, k) ctx.prec = wpz a = ctx.siegelz(t) if k == -1 and a < 0: return 0 elif k == -1 and a > 0: return 1 if k+2 < 400000000: Rblock = find_rosser_block_zero(ctx, k+2) else: Rblock = search_supergood_block(ctx, k+2, fp_tolerance) n1, n2 = Rblock[1] if n2-n1 == 1: b = Rblock[3][0] if a*b > 0: ctx.prec = wpinitial return k+1 else: ctx.prec = wpinitial return k+2 my_zero_number,block, T, V = Rblock zero_number_block = n2-n1 T, V, separated = separate_zeros_in_block(ctx,\ zero_number_block, T, V,\ limitloop=ctx.inf,\ fp_tolerance=fp_tolerance) n = count_to(ctx, t, T, V) ctx.prec = wpinitial return n+n1+1 @defun_wrapped def backlunds(ctx, t): r""" Computes the function `S(t) = \operatorname{arg} \zeta(\frac{1}{2} + it) / \pi`. See Titchmarsh Section 9.3 for details of the definition. **Examples** >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> backlunds(217.3) 0.16302205431184 Generally, the value is a small number. At Gram points it is an integer, frequently equal to 0:: >>> chop(backlunds(grampoint(200))) 0.0 >>> backlunds(extraprec(10)(grampoint)(211)) 1.0 >>> backlunds(extraprec(10)(grampoint)(232)) -1.0 The number of zeros of the Riemann zeta function up to height `t` satisfies `N(t) = \theta(t)/\pi + 1 + S(t)` (see :func:nzeros` and :func:`siegeltheta`):: >>> t = 1234.55 >>> nzeros(t) 842 >>> siegeltheta(t)/pi+1+backlunds(t) 842.0 """ return ctx.nzeros(t)-1-ctx.siegeltheta(t)/ctx.pi """ _ROSSER_EXCEPTIONS is a list of all exceptions to Rosser's rule for n <= 400 000 000. Alternately the entry is of type [n,m], or a string. The string is the zero pattern of the Block and the relevant adjacent. For example (010)3 corresponds to a block composed of three Gram intervals, the first ant third without a zero and the intermediate with a zero. The next Gram interval contain three zeros. So that in total we have 4 zeros in 4 Gram blocks. n and m are the indices of the Gram points of this interval of four Gram intervals. The Rosser exception is therefore formed by the three Gram intervals that are signaled between parenthesis. We have included also some Rosser's exceptions beyond n=400 000 000 that are noted in the literature by some reason. The list is composed from the data published in the references: R. P. Brent, J. van de Lune, H. J. J. te Riele, D. T. Winter, 'On the Zeros of the Riemann Zeta Function in the Critical Strip. II', Math. Comp. 39 (1982) 681--688. See also Corrigenda in Math. Comp. 46 (1986) 771. J. van de Lune, H. J. J. te Riele, 'On the Zeros of the Riemann Zeta Function in the Critical Strip. III', Math. Comp. 41 (1983) 759--767. See also Corrigenda in Math. Comp. 46 (1986) 771. J. van de Lune, 'Sums of Equal Powers of Positive Integers', Dissertation, Vrije Universiteit te Amsterdam, Centrum voor Wiskunde en Informatica, Amsterdam, 1984. Thanks to the authors all this papers and those others that have contributed to make this possible. """ _ROSSER_EXCEPTIONS = \ [[13999525, 13999528], '(00)3', [30783329, 30783332], '(00)3', [30930926, 30930929], '3(00)', [37592215, 37592218], '(00)3', [40870156, 40870159], '(00)3', [43628107, 43628110], '(00)3', [46082042, 46082045], '(00)3', [46875667, 46875670], '(00)3', [49624540, 49624543], '3(00)', [50799238, 50799241], '(00)3', [55221453, 55221456], '3(00)', [56948779, 56948782], '3(00)', [60515663, 60515666], '(00)3', [61331766, 61331770], '(00)40', [69784843, 69784846], '3(00)', [75052114, 75052117], '(00)3', [79545240, 79545243], '3(00)', [79652247, 79652250], '3(00)', [83088043, 83088046], '(00)3', [83689522, 83689525], '3(00)', [85348958, 85348961], '(00)3', [86513820, 86513823], '(00)3', [87947596, 87947599], '3(00)', [88600095, 88600098], '(00)3', [93681183, 93681186], '(00)3', [100316551, 100316554], '3(00)', [100788444, 100788447], '(00)3', [106236172, 106236175], '(00)3', [106941327, 106941330], '3(00)', [107287955, 107287958], '(00)3', [107532016, 107532019], '3(00)', [110571044, 110571047], '(00)3', [111885253, 111885256], '3(00)', [113239783, 113239786], '(00)3', [120159903, 120159906], '(00)3', [121424391, 121424394], '3(00)', [121692931, 121692934], '3(00)', [121934170, 121934173], '3(00)', [122612848, 122612851], '3(00)', [126116567, 126116570], '(00)3', [127936513, 127936516], '(00)3', [128710277, 128710280], '3(00)', [129398902, 129398905], '3(00)', [130461096, 130461099], '3(00)', [131331947, 131331950], '3(00)', [137334071, 137334074], '3(00)', [137832603, 137832606], '(00)3', [138799471, 138799474], '3(00)', [139027791, 139027794], '(00)3', [141617806, 141617809], '(00)3', [144454931, 144454934], '(00)3', [145402379, 145402382], '3(00)', [146130245, 146130248], '3(00)', [147059770, 147059773], '(00)3', [147896099, 147896102], '3(00)', [151097113, 151097116], '(00)3', [152539438, 152539441], '(00)3', [152863168, 152863171], '3(00)', [153522726, 153522729], '3(00)', [155171524, 155171527], '3(00)', [155366607, 155366610], '(00)3', [157260686, 157260689], '3(00)', [157269224, 157269227], '(00)3', [157755123, 157755126], '(00)3', [158298484, 158298487], '3(00)', [160369050, 160369053], '3(00)', [162962787, 162962790], '(00)3', [163724709, 163724712], '(00)3', [164198113, 164198116], '3(00)', [164689301, 164689305], '(00)40', [164880228, 164880231], '3(00)', [166201932, 166201935], '(00)3', [168573836, 168573839], '(00)3', [169750763, 169750766], '(00)3', [170375507, 170375510], '(00)3', [170704879, 170704882], '3(00)', [172000992, 172000995], '3(00)', [173289941, 173289944], '(00)3', [173737613, 173737616], '3(00)', [174102513, 174102516], '(00)3', [174284990, 174284993], '(00)3', [174500513, 174500516], '(00)3', [175710609, 175710612], '(00)3', [176870843, 176870846], '3(00)', [177332732, 177332735], '3(00)', [177902861, 177902864], '3(00)', [179979095, 179979098], '(00)3', [181233726, 181233729], '3(00)', [181625435, 181625438], '(00)3', [182105255, 182105259], '22(00)', [182223559, 182223562], '3(00)', [191116404, 191116407], '3(00)', [191165599, 191165602], '3(00)', [191297535, 191297539], '(00)22', [192485616, 192485619], '(00)3', [193264634, 193264638], '22(00)', [194696968, 194696971], '(00)3', [195876805, 195876808], '(00)3', [195916548, 195916551], '3(00)', [196395160, 196395163], '3(00)', [196676303, 196676306], '(00)3', [197889882, 197889885], '3(00)', [198014122, 198014125], '(00)3', [199235289, 199235292], '(00)3', [201007375, 201007378], '(00)3', [201030605, 201030608], '3(00)', [201184290, 201184293], '3(00)', [201685414, 201685418], '(00)22', [202762875, 202762878], '3(00)', [202860957, 202860960], '3(00)', [203832577, 203832580], '3(00)', [205880544, 205880547], '(00)3', [206357111, 206357114], '(00)3', [207159767, 207159770], '3(00)', [207167343, 207167346], '3(00)', [207482539, 207482543], '3(010)', [207669540, 207669543], '3(00)', [208053426, 208053429], '(00)3', [208110027, 208110030], '3(00)', [209513826, 209513829], '3(00)', [212623522, 212623525], '(00)3', [213841715, 213841718], '(00)3', [214012333, 214012336], '(00)3', [214073567, 214073570], '(00)3', [215170600, 215170603], '3(00)', [215881039, 215881042], '3(00)', [216274604, 216274607], '3(00)', [216957120, 216957123], '3(00)', [217323208, 217323211], '(00)3', [218799264, 218799267], '(00)3', [218803557, 218803560], '3(00)', [219735146, 219735149], '(00)3', [219830062, 219830065], '3(00)', [219897904, 219897907], '(00)3', [221205545, 221205548], '(00)3', [223601929, 223601932], '(00)3', [223907076, 223907079], '3(00)', [223970397, 223970400], '(00)3', [224874044, 224874048], '22(00)', [225291157, 225291160], '(00)3', [227481734, 227481737], '(00)3', [228006442, 228006445], '3(00)', [228357900, 228357903], '(00)3', [228386399, 228386402], '(00)3', [228907446, 228907449], '(00)3', [228984552, 228984555], '3(00)', [229140285, 229140288], '3(00)', [231810024, 231810027], '(00)3', [232838062, 232838065], '3(00)', [234389088, 234389091], '3(00)', [235588194, 235588197], '(00)3', [236645695, 236645698], '(00)3', [236962876, 236962879], '3(00)', [237516723, 237516727], '04(00)', [240004911, 240004914], '(00)3', [240221306, 240221309], '3(00)', [241389213, 241389217], '(010)3', [241549003, 241549006], '(00)3', [241729717, 241729720], '(00)3', [241743684, 241743687], '3(00)', [243780200, 243780203], '3(00)', [243801317, 243801320], '(00)3', [244122072, 244122075], '(00)3', [244691224, 244691227], '3(00)', [244841577, 244841580], '(00)3', [245813461, 245813464], '(00)3', [246299475, 246299478], '(00)3', [246450176, 246450179], '3(00)', [249069349, 249069352], '(00)3', [250076378, 250076381], '(00)3', [252442157, 252442160], '3(00)', [252904231, 252904234], '3(00)', [255145220, 255145223], '(00)3', [255285971, 255285974], '3(00)', [256713230, 256713233], '(00)3', [257992082, 257992085], '(00)3', [258447955, 258447959], '22(00)', [259298045, 259298048], '3(00)', [262141503, 262141506], '(00)3', [263681743, 263681746], '3(00)', [266527881, 266527885], '(010)3', [266617122, 266617125], '(00)3', [266628044, 266628047], '3(00)', [267305763, 267305766], '(00)3', [267388404, 267388407], '3(00)', [267441672, 267441675], '3(00)', [267464886, 267464889], '(00)3', [267554907, 267554910], '3(00)', [269787480, 269787483], '(00)3', [270881434, 270881437], '(00)3', [270997583, 270997586], '3(00)', [272096378, 272096381], '3(00)', [272583009, 272583012], '(00)3', [274190881, 274190884], '3(00)', [274268747, 274268750], '(00)3', [275297429, 275297432], '3(00)', [275545476, 275545479], '3(00)', [275898479, 275898482], '3(00)', [275953000, 275953003], '(00)3', [277117197, 277117201], '(00)22', [277447310, 277447313], '3(00)', [279059657, 279059660], '3(00)', [279259144, 279259147], '3(00)', [279513636, 279513639], '3(00)', [279849069, 279849072], '3(00)', [280291419, 280291422], '(00)3', [281449425, 281449428], '3(00)', [281507953, 281507956], '3(00)', [281825600, 281825603], '(00)3', [282547093, 282547096], '3(00)', [283120963, 283120966], '3(00)', [283323493, 283323496], '(00)3', [284764535, 284764538], '3(00)', [286172639, 286172642], '3(00)', [286688824, 286688827], '(00)3', [287222172, 287222175], '3(00)', [287235534, 287235537], '3(00)', [287304861, 287304864], '3(00)', [287433571, 287433574], '(00)3', [287823551, 287823554], '(00)3', [287872422, 287872425], '3(00)', [288766615, 288766618], '3(00)', [290122963, 290122966], '3(00)', [290450849, 290450853], '(00)22', [291426141, 291426144], '3(00)', [292810353, 292810356], '3(00)', [293109861, 293109864], '3(00)', [293398054, 293398057], '3(00)', [294134426, 294134429], '3(00)', [294216438, 294216441], '(00)3', [295367141, 295367144], '3(00)', [297834111, 297834114], '3(00)', [299099969, 299099972], '3(00)', [300746958, 300746961], '3(00)', [301097423, 301097426], '(00)3', [301834209, 301834212], '(00)3', [302554791, 302554794], '(00)3', [303497445, 303497448], '3(00)', [304165344, 304165347], '3(00)', [304790218, 304790222], '3(010)', [305302352, 305302355], '(00)3', [306785996, 306785999], '3(00)', [307051443, 307051446], '3(00)', [307481539, 307481542], '3(00)', [308605569, 308605572], '3(00)', [309237610, 309237613], '3(00)', [310509287, 310509290], '(00)3', [310554057, 310554060], '3(00)', [310646345, 310646348], '3(00)', [311274896, 311274899], '(00)3', [311894272, 311894275], '3(00)', [312269470, 312269473], '(00)3', [312306601, 312306605], '(00)40', [312683193, 312683196], '3(00)', [314499804, 314499807], '3(00)', [314636802, 314636805], '(00)3', [314689897, 314689900], '3(00)', [314721319, 314721322], '3(00)', [316132890, 316132893], '3(00)', [316217470, 316217474], '(010)3', [316465705, 316465708], '3(00)', [316542790, 316542793], '(00)3', [320822347, 320822350], '3(00)', [321733242, 321733245], '3(00)', [324413970, 324413973], '(00)3', [325950140, 325950143], '(00)3', [326675884, 326675887], '(00)3', [326704208, 326704211], '3(00)', [327596247, 327596250], '3(00)', [328123172, 328123175], '3(00)', [328182212, 328182215], '(00)3', [328257498, 328257501], '3(00)', [328315836, 328315839], '(00)3', [328800974, 328800977], '(00)3', [328998509, 328998512], '3(00)', [329725370, 329725373], '(00)3', [332080601, 332080604], '(00)3', [332221246, 332221249], '(00)3', [332299899, 332299902], '(00)3', [332532822, 332532825], '(00)3', [333334544, 333334548], '(00)22', [333881266, 333881269], '3(00)', [334703267, 334703270], '3(00)', [334875138, 334875141], '3(00)', [336531451, 336531454], '3(00)', [336825907, 336825910], '(00)3', [336993167, 336993170], '(00)3', [337493998, 337494001], '3(00)', [337861034, 337861037], '3(00)', [337899191, 337899194], '(00)3', [337958123, 337958126], '(00)3', [342331982, 342331985], '3(00)', [342676068, 342676071], '3(00)', [347063781, 347063784], '3(00)', [347697348, 347697351], '3(00)', [347954319, 347954322], '3(00)', [348162775, 348162778], '3(00)', [349210702, 349210705], '(00)3', [349212913, 349212916], '3(00)', [349248650, 349248653], '(00)3', [349913500, 349913503], '3(00)', [350891529, 350891532], '3(00)', [351089323, 351089326], '3(00)', [351826158, 351826161], '3(00)', [352228580, 352228583], '(00)3', [352376244, 352376247], '3(00)', [352853758, 352853761], '(00)3', [355110439, 355110442], '(00)3', [355808090, 355808094], '(00)40', [355941556, 355941559], '3(00)', [356360231, 356360234], '(00)3', [356586657, 356586660], '3(00)', [356892926, 356892929], '(00)3', [356908232, 356908235], '3(00)', [357912730, 357912733], '3(00)', [358120344, 358120347], '3(00)', [359044096, 359044099], '(00)3', [360819357, 360819360], '3(00)', [361399662, 361399666], '(010)3', [362361315, 362361318], '(00)3', [363610112, 363610115], '(00)3', [363964804, 363964807], '3(00)', [364527375, 364527378], '(00)3', [365090327, 365090330], '(00)3', [365414539, 365414542], '3(00)', [366738474, 366738477], '3(00)', [368714778, 368714783], '04(010)', [368831545, 368831548], '(00)3', [368902387, 368902390], '(00)3', [370109769, 370109772], '3(00)', [370963333, 370963336], '3(00)', [372541136, 372541140], '3(010)', [372681562, 372681565], '(00)3', [373009410, 373009413], '(00)3', [373458970, 373458973], '3(00)', [375648658, 375648661], '3(00)', [376834728, 376834731], '3(00)', [377119945, 377119948], '(00)3', [377335703, 377335706], '(00)3', [378091745, 378091748], '3(00)', [379139522, 379139525], '3(00)', [380279160, 380279163], '(00)3', [380619442, 380619445], '3(00)', [381244231, 381244234], '3(00)', [382327446, 382327450], '(010)3', [382357073, 382357076], '3(00)', [383545479, 383545482], '3(00)', [384363766, 384363769], '(00)3', [384401786, 384401790], '22(00)', [385198212, 385198215], '3(00)', [385824476, 385824479], '(00)3', [385908194, 385908197], '3(00)', [386946806, 386946809], '3(00)', [387592175, 387592179], '22(00)', [388329293, 388329296], '(00)3', [388679566, 388679569], '3(00)', [388832142, 388832145], '3(00)', [390087103, 390087106], '(00)3', [390190926, 390190930], '(00)22', [390331207, 390331210], '3(00)', [391674495, 391674498], '3(00)', [391937831, 391937834], '3(00)', [391951632, 391951636], '(00)22', [392963986, 392963989], '(00)3', [393007921, 393007924], '3(00)', [393373210, 393373213], '3(00)', [393759572, 393759575], '(00)3', [394036662, 394036665], '(00)3', [395813866, 395813869], '(00)3', [395956690, 395956693], '3(00)', [396031670, 396031673], '3(00)', [397076433, 397076436], '3(00)', [397470601, 397470604], '3(00)', [398289458, 398289461], '3(00)', # [368714778, 368714783], '04(010)', [437953499, 437953504], '04(010)', [526196233, 526196238], '032(00)', [744719566, 744719571], '(010)40', [750375857, 750375862], '032(00)', [958241932, 958241937], '04(010)', [983377342, 983377347], '(00)410', [1003780080, 1003780085], '04(010)', [1070232754, 1070232759], '(00)230', [1209834865, 1209834870], '032(00)', [1257209100, 1257209105], '(00)410', [1368002233, 1368002238], '(00)230' ] mpmath-1.0.0/mpmath/identification.py000066400000000000000000000711251316273626600176510ustar00rootroot00000000000000""" Implements the PSLQ algorithm for integer relation detection, and derivative algorithms for constant recognition. """ from .libmp.backend import xrange from .libmp import int_types, sqrt_fixed # round to nearest integer (can be done more elegantly...) def round_fixed(x, prec): return ((x + (1<<(prec-1))) >> prec) << prec class IdentificationMethods(object): pass def pslq(ctx, x, tol=None, maxcoeff=1000, maxsteps=100, verbose=False): r""" Given a vector of real numbers `x = [x_0, x_1, ..., x_n]`, ``pslq(x)`` uses the PSLQ algorithm to find a list of integers `[c_0, c_1, ..., c_n]` such that .. math :: |c_1 x_1 + c_2 x_2 + ... + c_n x_n| < \mathrm{tol} and such that `\max |c_k| < \mathrm{maxcoeff}`. If no such vector exists, :func:`~mpmath.pslq` returns ``None``. The tolerance defaults to 3/4 of the working precision. **Examples** Find rational approximations for `\pi`:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> pslq([-1, pi], tol=0.01) [22, 7] >>> pslq([-1, pi], tol=0.001) [355, 113] >>> mpf(22)/7; mpf(355)/113; +pi 3.14285714285714 3.14159292035398 3.14159265358979 Pi is not a rational number with denominator less than 1000:: >>> pslq([-1, pi]) >>> To within the standard precision, it can however be approximated by at least one rational number with denominator less than `10^{12}`:: >>> p, q = pslq([-1, pi], maxcoeff=10**12) >>> print(p); print(q) 238410049439 75888275702 >>> mpf(p)/q 3.14159265358979 The PSLQ algorithm can be applied to long vectors. For example, we can investigate the rational (in)dependence of integer square roots:: >>> mp.dps = 30 >>> pslq([sqrt(n) for n in range(2, 5+1)]) >>> >>> pslq([sqrt(n) for n in range(2, 6+1)]) >>> >>> pslq([sqrt(n) for n in range(2, 8+1)]) [2, 0, 0, 0, 0, 0, -1] **Machin formulas** A famous formula for `\pi` is Machin's, .. math :: \frac{\pi}{4} = 4 \operatorname{acot} 5 - \operatorname{acot} 239 There are actually infinitely many formulas of this type. Two others are .. math :: \frac{\pi}{4} = \operatorname{acot} 1 \frac{\pi}{4} = 12 \operatorname{acot} 49 + 32 \operatorname{acot} 57 + 5 \operatorname{acot} 239 + 12 \operatorname{acot} 110443 We can easily verify the formulas using the PSLQ algorithm:: >>> mp.dps = 30 >>> pslq([pi/4, acot(1)]) [1, -1] >>> pslq([pi/4, acot(5), acot(239)]) [1, -4, 1] >>> pslq([pi/4, acot(49), acot(57), acot(239), acot(110443)]) [1, -12, -32, 5, -12] We could try to generate a custom Machin-like formula by running the PSLQ algorithm with a few inverse cotangent values, for example acot(2), acot(3) ... acot(10). Unfortunately, there is a linear dependence among these values, resulting in only that dependence being detected, with a zero coefficient for `\pi`:: >>> pslq([pi] + [acot(n) for n in range(2,11)]) [0, 1, -1, 0, 0, 0, -1, 0, 0, 0] We get better luck by removing linearly dependent terms:: >>> pslq([pi] + [acot(n) for n in range(2,11) if n not in (3, 5)]) [1, -8, 0, 0, 4, 0, 0, 0] In other words, we found the following formula:: >>> 8*acot(2) - 4*acot(7) 3.14159265358979323846264338328 >>> +pi 3.14159265358979323846264338328 **Algorithm** This is a fairly direct translation to Python of the pseudocode given by David Bailey, "The PSLQ Integer Relation Algorithm": http://www.cecm.sfu.ca/organics/papers/bailey/paper/html/node3.html The present implementation uses fixed-point instead of floating-point arithmetic, since this is significantly (about 7x) faster. """ n = len(x) if n < 2: raise ValueError("n cannot be less than 2") # At too low precision, the algorithm becomes meaningless prec = ctx.prec if prec < 53: raise ValueError("prec cannot be less than 53") if verbose and prec // max(2,n) < 5: print("Warning: precision for PSLQ may be too low") target = int(prec * 0.75) if tol is None: tol = ctx.mpf(2)**(-target) else: tol = ctx.convert(tol) extra = 60 prec += extra if verbose: print("PSLQ using prec %i and tol %s" % (prec, ctx.nstr(tol))) tol = ctx.to_fixed(tol, prec) assert tol # Convert to fixed-point numbers. The dummy None is added so we can # use 1-based indexing. (This just allows us to be consistent with # Bailey's indexing. The algorithm is 100 lines long, so debugging # a single wrong index can be painful.) x = [None] + [ctx.to_fixed(ctx.mpf(xk), prec) for xk in x] # Sanity check on magnitudes minx = min(abs(xx) for xx in x[1:]) if not minx: raise ValueError("PSLQ requires a vector of nonzero numbers") if minx < tol//100: if verbose: print("STOPPING: (one number is too small)") return None g = sqrt_fixed((4<> prec) s[k] = sqrt_fixed(t, prec) t = s[1] y = x[:] for k in xrange(1, n+1): y[k] = (x[k] << prec) // t s[k] = (s[k] << prec) // t # step 3 for i in xrange(1, n+1): for j in xrange(i+1, n): H[i,j] = 0 if i <= n-1: if s[i]: H[i,i] = (s[i+1] << prec) // s[i] else: H[i,i] = 0 for j in range(1, i): sjj1 = s[j]*s[j+1] if sjj1: H[i,j] = ((-y[i]*y[j])<> prec) for k in xrange(1, j+1): H[i,k] = H[i,k] - (t*H[j,k] >> prec) for k in xrange(1, n+1): A[i,k] = A[i,k] - (t*A[j,k] >> prec) B[k,j] = B[k,j] + (t*B[k,i] >> prec) # Main algorithm for REP in range(maxsteps): # Step 1 m = -1 szmax = -1 for i in range(1, n): h = H[i,i] sz = (g**i * abs(h)) >> (prec*(i-1)) if sz > szmax: m = i szmax = sz # Step 2 y[m], y[m+1] = y[m+1], y[m] tmp = {} for i in xrange(1,n+1): H[m,i], H[m+1,i] = H[m+1,i], H[m,i] for i in xrange(1,n+1): A[m,i], A[m+1,i] = A[m+1,i], A[m,i] for i in xrange(1,n+1): B[i,m], B[i,m+1] = B[i,m+1], B[i,m] # Step 3 if m <= n - 2: t0 = sqrt_fixed((H[m,m]**2 + H[m,m+1]**2)>>prec, prec) # A zero element probably indicates that the precision has # been exhausted. XXX: this could be spurious, due to # using fixed-point arithmetic if not t0: break t1 = (H[m,m] << prec) // t0 t2 = (H[m,m+1] << prec) // t0 for i in xrange(m, n+1): t3 = H[i,m] t4 = H[i,m+1] H[i,m] = (t1*t3+t2*t4) >> prec H[i,m+1] = (-t2*t3+t1*t4) >> prec # Step 4 for i in xrange(m+1, n+1): for j in xrange(min(i-1, m+1), 0, -1): try: t = round_fixed((H[i,j] << prec)//H[j,j], prec) # Precision probably exhausted except ZeroDivisionError: break y[j] = y[j] + ((t*y[i]) >> prec) for k in xrange(1, j+1): H[i,k] = H[i,k] - (t*H[j,k] >> prec) for k in xrange(1, n+1): A[i,k] = A[i,k] - (t*A[j,k] >> prec) B[k,j] = B[k,j] + (t*B[k,i] >> prec) # Until a relation is found, the error typically decreases # slowly (e.g. a factor 1-10) with each step TODO: we could # compare err from two successive iterations. If there is a # large drop (several orders of magnitude), that indicates a # "high quality" relation was detected. Reporting this to # the user somehow might be useful. best_err = maxcoeff<> prec) for j in \ range(1,n+1)] if max(abs(v) for v in vec) < maxcoeff: if verbose: print("FOUND relation at iter %i/%i, error: %s" % \ (REP, maxsteps, ctx.nstr(err / ctx.mpf(2)**prec, 1))) return vec best_err = min(err, best_err) # Calculate a lower bound for the norm. We could do this # more exactly (using the Euclidean norm) but there is probably # no practical benefit. recnorm = max(abs(h) for h in H.values()) if recnorm: norm = ((1 << (2*prec)) // recnorm) >> prec norm //= 100 else: norm = ctx.inf if verbose: print("%i/%i: Error: %8s Norm: %s" % \ (REP, maxsteps, ctx.nstr(best_err / ctx.mpf(2)**prec, 1), norm)) if norm >= maxcoeff: break if verbose: print("CANCELLING after step %i/%i." % (REP, maxsteps)) print("Could not find an integer relation. Norm bound: %s" % norm) return None def findpoly(ctx, x, n=1, **kwargs): r""" ``findpoly(x, n)`` returns the coefficients of an integer polynomial `P` of degree at most `n` such that `P(x) \approx 0`. If no polynomial having `x` as a root can be found, :func:`~mpmath.findpoly` returns ``None``. :func:`~mpmath.findpoly` works by successively calling :func:`~mpmath.pslq` with the vectors `[1, x]`, `[1, x, x^2]`, `[1, x, x^2, x^3]`, ..., `[1, x, x^2, .., x^n]` as input. Keyword arguments given to :func:`~mpmath.findpoly` are forwarded verbatim to :func:`~mpmath.pslq`. In particular, you can specify a tolerance for `P(x)` with ``tol`` and a maximum permitted coefficient size with ``maxcoeff``. For large values of `n`, it is recommended to run :func:`~mpmath.findpoly` at high precision; preferably 50 digits or more. **Examples** By default (degree `n = 1`), :func:`~mpmath.findpoly` simply finds a linear polynomial with a rational root:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> findpoly(0.7) [-10, 7] The generated coefficient list is valid input to ``polyval`` and ``polyroots``:: >>> nprint(polyval(findpoly(phi, 2), phi), 1) -2.0e-16 >>> for r in polyroots(findpoly(phi, 2)): ... print(r) ... -0.618033988749895 1.61803398874989 Numbers of the form `m + n \sqrt p` for integers `(m, n, p)` are solutions to quadratic equations. As we find here, `1+\sqrt 2` is a root of the polynomial `x^2 - 2x - 1`:: >>> findpoly(1+sqrt(2), 2) [1, -2, -1] >>> findroot(lambda x: x**2 - 2*x - 1, 1) 2.4142135623731 Despite only containing square roots, the following number results in a polynomial of degree 4:: >>> findpoly(sqrt(2)+sqrt(3), 4) [1, 0, -10, 0, 1] In fact, `x^4 - 10x^2 + 1` is the *minimal polynomial* of `r = \sqrt 2 + \sqrt 3`, meaning that a rational polynomial of lower degree having `r` as a root does not exist. Given sufficient precision, :func:`~mpmath.findpoly` will usually find the correct minimal polynomial of a given algebraic number. **Non-algebraic numbers** If :func:`~mpmath.findpoly` fails to find a polynomial with given coefficient size and tolerance constraints, that means no such polynomial exists. We can verify that `\pi` is not an algebraic number of degree 3 with coefficients less than 1000:: >>> mp.dps = 15 >>> findpoly(pi, 3) >>> It is always possible to find an algebraic approximation of a number using one (or several) of the following methods: 1. Increasing the permitted degree 2. Allowing larger coefficients 3. Reducing the tolerance One example of each method is shown below:: >>> mp.dps = 15 >>> findpoly(pi, 4) [95, -545, 863, -183, -298] >>> findpoly(pi, 3, maxcoeff=10000) [836, -1734, -2658, -457] >>> findpoly(pi, 3, tol=1e-7) [-4, 22, -29, -2] It is unknown whether Euler's constant is transcendental (or even irrational). We can use :func:`~mpmath.findpoly` to check that if is an algebraic number, its minimal polynomial must have degree at least 7 and a coefficient of magnitude at least 1000000:: >>> mp.dps = 200 >>> findpoly(euler, 6, maxcoeff=10**6, tol=1e-100, maxsteps=1000) >>> Note that the high precision and strict tolerance is necessary for such high-degree runs, since otherwise unwanted low-accuracy approximations will be detected. It may also be necessary to set maxsteps high to prevent a premature exit (before the coefficient bound has been reached). Running with ``verbose=True`` to get an idea what is happening can be useful. """ x = ctx.mpf(x) if n < 1: raise ValueError("n cannot be less than 1") if x == 0: return [1, 0] xs = [ctx.mpf(1)] for i in range(1,n+1): xs.append(x**i) a = ctx.pslq(xs, **kwargs) if a is not None: return a[::-1] def fracgcd(p, q): x, y = p, q while y: x, y = y, x % y if x != 1: p //= x q //= x if q == 1: return p return p, q def pslqstring(r, constants): q = r[0] r = r[1:] s = [] for i in range(len(r)): p = r[i] if p: z = fracgcd(-p,q) cs = constants[i][1] if cs == '1': cs = '' else: cs = '*' + cs if isinstance(z, int_types): if z > 0: term = str(z) + cs else: term = ("(%s)" % z) + cs else: term = ("(%s/%s)" % z) + cs s.append(term) s = ' + '.join(s) if '+' in s or '*' in s: s = '(' + s + ')' return s or '0' def prodstring(r, constants): q = r[0] r = r[1:] num = [] den = [] for i in range(len(r)): p = r[i] if p: z = fracgcd(-p,q) cs = constants[i][1] if isinstance(z, int_types): if abs(z) == 1: t = cs else: t = '%s**%s' % (cs, abs(z)) ([num,den][z<0]).append(t) else: t = '%s**(%s/%s)' % (cs, abs(z[0]), z[1]) ([num,den][z[0]<0]).append(t) num = '*'.join(num) den = '*'.join(den) if num and den: return "(%s)/(%s)" % (num, den) if num: return num if den: return "1/(%s)" % den def quadraticstring(ctx,t,a,b,c): if c < 0: a,b,c = -a,-b,-c u1 = (-b+ctx.sqrt(b**2-4*a*c))/(2*c) u2 = (-b-ctx.sqrt(b**2-4*a*c))/(2*c) if abs(u1-t) < abs(u2-t): if b: s = '((%s+sqrt(%s))/%s)' % (-b,b**2-4*a*c,2*c) else: s = '(sqrt(%s)/%s)' % (-4*a*c,2*c) else: if b: s = '((%s-sqrt(%s))/%s)' % (-b,b**2-4*a*c,2*c) else: s = '(-sqrt(%s)/%s)' % (-4*a*c,2*c) return s # Transformation y = f(x,c), with inverse function x = f(y,c) # The third entry indicates whether the transformation is # redundant when c = 1 transforms = [ (lambda ctx,x,c: x*c, '$y/$c', 0), (lambda ctx,x,c: x/c, '$c*$y', 1), (lambda ctx,x,c: c/x, '$c/$y', 0), (lambda ctx,x,c: (x*c)**2, 'sqrt($y)/$c', 0), (lambda ctx,x,c: (x/c)**2, '$c*sqrt($y)', 1), (lambda ctx,x,c: (c/x)**2, '$c/sqrt($y)', 0), (lambda ctx,x,c: c*x**2, 'sqrt($y)/sqrt($c)', 1), (lambda ctx,x,c: x**2/c, 'sqrt($c)*sqrt($y)', 1), (lambda ctx,x,c: c/x**2, 'sqrt($c)/sqrt($y)', 1), (lambda ctx,x,c: ctx.sqrt(x*c), '$y**2/$c', 0), (lambda ctx,x,c: ctx.sqrt(x/c), '$c*$y**2', 1), (lambda ctx,x,c: ctx.sqrt(c/x), '$c/$y**2', 0), (lambda ctx,x,c: c*ctx.sqrt(x), '$y**2/$c**2', 1), (lambda ctx,x,c: ctx.sqrt(x)/c, '$c**2*$y**2', 1), (lambda ctx,x,c: c/ctx.sqrt(x), '$c**2/$y**2', 1), (lambda ctx,x,c: ctx.exp(x*c), 'log($y)/$c', 0), (lambda ctx,x,c: ctx.exp(x/c), '$c*log($y)', 1), (lambda ctx,x,c: ctx.exp(c/x), '$c/log($y)', 0), (lambda ctx,x,c: c*ctx.exp(x), 'log($y/$c)', 1), (lambda ctx,x,c: ctx.exp(x)/c, 'log($c*$y)', 1), (lambda ctx,x,c: c/ctx.exp(x), 'log($c/$y)', 0), (lambda ctx,x,c: ctx.ln(x*c), 'exp($y)/$c', 0), (lambda ctx,x,c: ctx.ln(x/c), '$c*exp($y)', 1), (lambda ctx,x,c: ctx.ln(c/x), '$c/exp($y)', 0), (lambda ctx,x,c: c*ctx.ln(x), 'exp($y/$c)', 1), (lambda ctx,x,c: ctx.ln(x)/c, 'exp($c*$y)', 1), (lambda ctx,x,c: c/ctx.ln(x), 'exp($c/$y)', 0), ] def identify(ctx, x, constants=[], tol=None, maxcoeff=1000, full=False, verbose=False): """ Given a real number `x`, ``identify(x)`` attempts to find an exact formula for `x`. This formula is returned as a string. If no match is found, ``None`` is returned. With ``full=True``, a list of matching formulas is returned. As a simple example, :func:`~mpmath.identify` will find an algebraic formula for the golden ratio:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> identify(phi) '((1+sqrt(5))/2)' :func:`~mpmath.identify` can identify simple algebraic numbers and simple combinations of given base constants, as well as certain basic transformations thereof. More specifically, :func:`~mpmath.identify` looks for the following: 1. Fractions 2. Quadratic algebraic numbers 3. Rational linear combinations of the base constants 4. Any of the above after first transforming `x` into `f(x)` where `f(x)` is `1/x`, `\sqrt x`, `x^2`, `\log x` or `\exp x`, either directly or with `x` or `f(x)` multiplied or divided by one of the base constants 5. Products of fractional powers of the base constants and small integers Base constants can be given as a list of strings representing mpmath expressions (:func:`~mpmath.identify` will ``eval`` the strings to numerical values and use the original strings for the output), or as a dict of formula:value pairs. In order not to produce spurious results, :func:`~mpmath.identify` should be used with high precision; preferably 50 digits or more. **Examples** Simple identifications can be performed safely at standard precision. Here the default recognition of rational, algebraic, and exp/log of algebraic numbers is demonstrated:: >>> mp.dps = 15 >>> identify(0.22222222222222222) '(2/9)' >>> identify(1.9662210973805663) 'sqrt(((24+sqrt(48))/8))' >>> identify(4.1132503787829275) 'exp((sqrt(8)/2))' >>> identify(0.881373587019543) 'log(((2+sqrt(8))/2))' By default, :func:`~mpmath.identify` does not recognize `\pi`. At standard precision it finds a not too useful approximation. At slightly increased precision, this approximation is no longer accurate enough and :func:`~mpmath.identify` more correctly returns ``None``:: >>> identify(pi) '(2**(176/117)*3**(20/117)*5**(35/39))/(7**(92/117))' >>> mp.dps = 30 >>> identify(pi) >>> Numbers such as `\pi`, and simple combinations of user-defined constants, can be identified if they are provided explicitly:: >>> identify(3*pi-2*e, ['pi', 'e']) '(3*pi + (-2)*e)' Here is an example using a dict of constants. Note that the constants need not be "atomic"; :func:`~mpmath.identify` can just as well express the given number in terms of expressions given by formulas:: >>> identify(pi+e, {'a':pi+2, 'b':2*e}) '((-2) + 1*a + (1/2)*b)' Next, we attempt some identifications with a set of base constants. It is necessary to increase the precision a bit. >>> mp.dps = 50 >>> base = ['sqrt(2)','pi','log(2)'] >>> identify(0.25, base) '(1/4)' >>> identify(3*pi + 2*sqrt(2) + 5*log(2)/7, base) '(2*sqrt(2) + 3*pi + (5/7)*log(2))' >>> identify(exp(pi+2), base) 'exp((2 + 1*pi))' >>> identify(1/(3+sqrt(2)), base) '((3/7) + (-1/7)*sqrt(2))' >>> identify(sqrt(2)/(3*pi+4), base) 'sqrt(2)/(4 + 3*pi)' >>> identify(5**(mpf(1)/3)*pi*log(2)**2, base) '5**(1/3)*pi*log(2)**2' An example of an erroneous solution being found when too low precision is used:: >>> mp.dps = 15 >>> identify(1/(3*pi-4*e+sqrt(8)), ['pi', 'e', 'sqrt(2)']) '((11/25) + (-158/75)*pi + (76/75)*e + (44/15)*sqrt(2))' >>> mp.dps = 50 >>> identify(1/(3*pi-4*e+sqrt(8)), ['pi', 'e', 'sqrt(2)']) '1/(3*pi + (-4)*e + 2*sqrt(2))' **Finding approximate solutions** The tolerance ``tol`` defaults to 3/4 of the working precision. Lowering the tolerance is useful for finding approximate matches. We can for example try to generate approximations for pi:: >>> mp.dps = 15 >>> identify(pi, tol=1e-2) '(22/7)' >>> identify(pi, tol=1e-3) '(355/113)' >>> identify(pi, tol=1e-10) '(5**(339/269))/(2**(64/269)*3**(13/269)*7**(92/269))' With ``full=True``, and by supplying a few base constants, ``identify`` can generate almost endless lists of approximations for any number (the output below has been truncated to show only the first few):: >>> for p in identify(pi, ['e', 'catalan'], tol=1e-5, full=True): ... print(p) ... # doctest: +ELLIPSIS e/log((6 + (-4/3)*e)) (3**3*5*e*catalan**2)/(2*7**2) sqrt(((-13) + 1*e + 22*catalan)) log(((-6) + 24*e + 4*catalan)/e) exp(catalan*((-1/5) + (8/15)*e)) catalan*(6 + (-6)*e + 15*catalan) sqrt((5 + 26*e + (-3)*catalan))/e e*sqrt(((-27) + 2*e + 25*catalan)) log(((-1) + (-11)*e + 59*catalan)) ((3/20) + (21/20)*e + (3/20)*catalan) ... The numerical values are roughly as close to `\pi` as permitted by the specified tolerance: >>> e/log(6-4*e/3) 3.14157719846001 >>> 135*e*catalan**2/98 3.14166950419369 >>> sqrt(e-13+22*catalan) 3.14158000062992 >>> log(24*e-6+4*catalan)-1 3.14158791577159 **Symbolic processing** The output formula can be evaluated as a Python expression. Note however that if fractions (like '2/3') are present in the formula, Python's :func:`~mpmath.eval()` may erroneously perform integer division. Note also that the output is not necessarily in the algebraically simplest form:: >>> identify(sqrt(2)) '(sqrt(8)/2)' As a solution to both problems, consider using SymPy's :func:`~mpmath.sympify` to convert the formula into a symbolic expression. SymPy can be used to pretty-print or further simplify the formula symbolically:: >>> from sympy import sympify # doctest: +SKIP >>> sympify(identify(sqrt(2))) # doctest: +SKIP 2**(1/2) Sometimes :func:`~mpmath.identify` can simplify an expression further than a symbolic algorithm:: >>> from sympy import simplify # doctest: +SKIP >>> x = sympify('-1/(-3/2+(1/2)*5**(1/2))*(3/2-1/2*5**(1/2))**(1/2)') # doctest: +SKIP >>> x # doctest: +SKIP (3/2 - 5**(1/2)/2)**(-1/2) >>> x = simplify(x) # doctest: +SKIP >>> x # doctest: +SKIP 2/(6 - 2*5**(1/2))**(1/2) >>> mp.dps = 30 # doctest: +SKIP >>> x = sympify(identify(x.evalf(30))) # doctest: +SKIP >>> x # doctest: +SKIP 1/2 + 5**(1/2)/2 (In fact, this functionality is available directly in SymPy as the function :func:`~mpmath.nsimplify`, which is essentially a wrapper for :func:`~mpmath.identify`.) **Miscellaneous issues and limitations** The input `x` must be a real number. All base constants must be positive real numbers and must not be rationals or rational linear combinations of each other. The worst-case computation time grows quickly with the number of base constants. Already with 3 or 4 base constants, :func:`~mpmath.identify` may require several seconds to finish. To search for relations among a large number of constants, you should consider using :func:`~mpmath.pslq` directly. The extended transformations are applied to x, not the constants separately. As a result, ``identify`` will for example be able to recognize ``exp(2*pi+3)`` with ``pi`` given as a base constant, but not ``2*exp(pi)+3``. It will be able to recognize the latter if ``exp(pi)`` is given explicitly as a base constant. """ solutions = [] def addsolution(s): if verbose: print("Found: ", s) solutions.append(s) x = ctx.mpf(x) # Further along, x will be assumed positive if x == 0: if full: return ['0'] else: return '0' if x < 0: sol = ctx.identify(-x, constants, tol, maxcoeff, full, verbose) if sol is None: return sol if full: return ["-(%s)"%s for s in sol] else: return "-(%s)" % sol if tol: tol = ctx.mpf(tol) else: tol = ctx.eps**0.7 M = maxcoeff if constants: if isinstance(constants, dict): constants = [(ctx.mpf(v), name) for (name, v) in sorted(constants.items())] else: namespace = dict((name, getattr(ctx,name)) for name in dir(ctx)) constants = [(eval(p, namespace), p) for p in constants] else: constants = [] # We always want to find at least rational terms if 1 not in [value for (name, value) in constants]: constants = [(ctx.mpf(1), '1')] + constants # PSLQ with simple algebraic and functional transformations for ft, ftn, red in transforms: for c, cn in constants: if red and cn == '1': continue t = ft(ctx,x,c) # Prevent exponential transforms from wreaking havoc if abs(t) > M**2 or abs(t) < tol: continue # Linear combination of base constants r = ctx.pslq([t] + [a[0] for a in constants], tol, M) s = None if r is not None and max(abs(uw) for uw in r) <= M and r[0]: s = pslqstring(r, constants) # Quadratic algebraic numbers else: q = ctx.pslq([ctx.one, t, t**2], tol, M) if q is not None and len(q) == 3 and q[2]: aa, bb, cc = q if max(abs(aa),abs(bb),abs(cc)) <= M: s = quadraticstring(ctx,t,aa,bb,cc) if s: if cn == '1' and ('/$c' in ftn): s = ftn.replace('$y', s).replace('/$c', '') else: s = ftn.replace('$y', s).replace('$c', cn) addsolution(s) if not full: return solutions[0] if verbose: print(".") # Check for a direct multiplicative formula if x != 1: # Allow fractional powers of fractions ilogs = [2,3,5,7] # Watch out for existing fractional powers of fractions logs = [] for a, s in constants: if not sum(bool(ctx.findpoly(ctx.ln(a)/ctx.ln(i),1)) for i in ilogs): logs.append((ctx.ln(a), s)) logs = [(ctx.ln(i),str(i)) for i in ilogs] + logs r = ctx.pslq([ctx.ln(x)] + [a[0] for a in logs], tol, M) if r is not None and max(abs(uw) for uw in r) <= M and r[0]: addsolution(prodstring(r, logs)) if not full: return solutions[0] if full: return sorted(solutions, key=len) else: return None IdentificationMethods.pslq = pslq IdentificationMethods.findpoly = findpoly IdentificationMethods.identify = identify if __name__ == '__main__': import doctest doctest.testmod() mpmath-1.0.0/mpmath/libmp/000077500000000000000000000000001316273626600154035ustar00rootroot00000000000000mpmath-1.0.0/mpmath/libmp/__init__.py000066400000000000000000000073701316273626600175230ustar00rootroot00000000000000from .libmpf import (prec_to_dps, dps_to_prec, repr_dps, round_down, round_up, round_floor, round_ceiling, round_nearest, to_pickable, from_pickable, ComplexResult, fzero, fnzero, fone, fnone, ftwo, ften, fhalf, fnan, finf, fninf, math_float_inf, round_int, normalize, normalize1, from_man_exp, from_int, to_man_exp, to_int, mpf_ceil, mpf_floor, mpf_nint, mpf_frac, from_float, to_float, from_rational, to_rational, to_fixed, mpf_rand, mpf_eq, mpf_hash, mpf_cmp, mpf_lt, mpf_le, mpf_gt, mpf_ge, mpf_pos, mpf_neg, mpf_abs, mpf_sign, mpf_add, mpf_sub, mpf_sum, mpf_mul, mpf_mul_int, mpf_shift, mpf_frexp, mpf_div, mpf_rdiv_int, mpf_mod, mpf_pow_int, mpf_perturb, to_digits_exp, to_str, str_to_man_exp, from_str, from_bstr, to_bstr, mpf_sqrt, mpf_hypot) from .libmpc import (mpc_one, mpc_zero, mpc_two, mpc_half, mpc_is_inf, mpc_is_infnan, mpc_to_str, mpc_to_complex, mpc_hash, mpc_conjugate, mpc_is_nonzero, mpc_add, mpc_add_mpf, mpc_sub, mpc_sub_mpf, mpc_pos, mpc_neg, mpc_shift, mpc_abs, mpc_arg, mpc_floor, mpc_ceil, mpc_nint, mpc_frac, mpc_mul, mpc_square, mpc_mul_mpf, mpc_mul_imag_mpf, mpc_mul_int, mpc_div, mpc_div_mpf, mpc_reciprocal, mpc_mpf_div, complex_int_pow, mpc_pow, mpc_pow_mpf, mpc_pow_int, mpc_sqrt, mpc_nthroot, mpc_cbrt, mpc_exp, mpc_log, mpc_cos, mpc_sin, mpc_tan, mpc_cos_pi, mpc_sin_pi, mpc_cosh, mpc_sinh, mpc_tanh, mpc_atan, mpc_acos, mpc_asin, mpc_asinh, mpc_acosh, mpc_atanh, mpc_fibonacci, mpf_expj, mpf_expjpi, mpc_expj, mpc_expjpi, mpc_cos_sin, mpc_cos_sin_pi) from .libelefun import (ln2_fixed, mpf_ln2, ln10_fixed, mpf_ln10, pi_fixed, mpf_pi, e_fixed, mpf_e, phi_fixed, mpf_phi, degree_fixed, mpf_degree, mpf_pow, mpf_nthroot, mpf_cbrt, log_int_fixed, agm_fixed, mpf_log, mpf_log_hypot, mpf_exp, mpf_cos_sin, mpf_cos, mpf_sin, mpf_tan, mpf_cos_sin_pi, mpf_cos_pi, mpf_sin_pi, mpf_cosh_sinh, mpf_cosh, mpf_sinh, mpf_tanh, mpf_atan, mpf_atan2, mpf_asin, mpf_acos, mpf_asinh, mpf_acosh, mpf_atanh, mpf_fibonacci) from .libhyper import (NoConvergence, make_hyp_summator, mpf_erf, mpf_erfc, mpf_ei, mpc_ei, mpf_e1, mpc_e1, mpf_expint, mpf_ci_si, mpf_ci, mpf_si, mpc_ci, mpc_si, mpf_besseljn, mpc_besseljn, mpf_agm, mpf_agm1, mpc_agm, mpc_agm1, mpf_ellipk, mpc_ellipk, mpf_ellipe, mpc_ellipe) from .gammazeta import (catalan_fixed, mpf_catalan, khinchin_fixed, mpf_khinchin, glaisher_fixed, mpf_glaisher, apery_fixed, mpf_apery, euler_fixed, mpf_euler, mertens_fixed, mpf_mertens, twinprime_fixed, mpf_twinprime, mpf_bernoulli, bernfrac, mpf_gamma_int, mpf_factorial, mpc_factorial, mpf_gamma, mpc_gamma, mpf_loggamma, mpc_loggamma, mpf_rgamma, mpc_rgamma, mpf_gamma_old, mpc_gamma_old, mpf_factorial_old, mpc_factorial_old, mpf_harmonic, mpc_harmonic, mpf_psi0, mpc_psi0, mpf_psi, mpc_psi, mpf_zeta_int, mpf_zeta, mpc_zeta, mpf_altzeta, mpc_altzeta, mpf_zetasum, mpc_zetasum) from .libmpi import (mpi_str, mpi_from_str, mpi_to_str, mpi_eq, mpi_ne, mpi_lt, mpi_le, mpi_gt, mpi_ge, mpi_add, mpi_sub, mpi_delta, mpi_mid, mpi_pos, mpi_neg, mpi_abs, mpi_mul, mpi_div, mpi_exp, mpi_log, mpi_sqrt, mpi_pow_int, mpi_pow, mpi_cos_sin, mpi_cos, mpi_sin, mpi_tan, mpi_cot, mpi_atan, mpi_atan2, mpci_pos, mpci_neg, mpci_add, mpci_sub, mpci_mul, mpci_div, mpci_pow, mpci_abs, mpci_pow, mpci_exp, mpci_log, mpci_cos, mpci_sin, mpi_gamma, mpci_gamma, mpi_loggamma, mpci_loggamma, mpi_rgamma, mpci_rgamma, mpi_factorial, mpci_factorial) from .libintmath import (trailing, bitcount, numeral, bin_to_radix, isqrt, isqrt_small, isqrt_fast, sqrt_fixed, sqrtrem, ifib, ifac, list_primes, isprime, moebius, gcd, eulernum, stirling1, stirling2) from .backend import (gmpy, sage, BACKEND, STRICT, MPZ, MPZ_TYPE, MPZ_ZERO, MPZ_ONE, MPZ_TWO, MPZ_THREE, MPZ_FIVE, int_types, HASH_MODULUS, HASH_BITS) mpmath-1.0.0/mpmath/libmp/backend.py000066400000000000000000000054511316273626600173510ustar00rootroot00000000000000import os import sys #----------------------------------------------------------------------------# # Support GMPY for high-speed large integer arithmetic. # # # # To allow an external module to handle arithmetic, we need to make sure # # that all high-precision variables are declared of the correct type. MPZ # # is the constructor for the high-precision type. It defaults to Python's # # long type but can be assinged another type, typically gmpy.mpz. # # # # MPZ must be used for the mantissa component of an mpf and must be used # # for internal fixed-point operations. # # # # Side-effects # # 1) "is" cannot be used to test for special values. Must use "==". # # 2) There are bugs in GMPY prior to v1.02 so we must use v1.03 or later. # #----------------------------------------------------------------------------# # So we can import it from this module gmpy = None sage = None sage_utils = None if sys.version_info[0] < 3: python3 = False else: python3 = True BACKEND = 'python' from .six import exec_, print_ if not python3: MPZ = long xrange = xrange basestring = basestring else: MPZ = int xrange = range basestring = str # Define constants for calculating hash on Python 3.2. if sys.version >= "3.2": HASH_MODULUS = sys.hash_info.modulus if sys.hash_info.width == 32: HASH_BITS = 31 else: HASH_BITS = 61 else: HASH_MODULUS = None HASH_BITS = None if 'MPMATH_NOGMPY' not in os.environ: try: try: import gmpy2 as gmpy except ImportError: try: import gmpy except ImportError: raise ImportError if gmpy.version() >= '1.03': BACKEND = 'gmpy' MPZ = gmpy.mpz except: pass if 'MPMATH_NOSAGE' not in os.environ: try: import sage.all import sage.libs.mpmath.utils as _sage_utils sage = sage.all sage_utils = _sage_utils BACKEND = 'sage' MPZ = sage.Integer except: pass if 'MPMATH_STRICT' in os.environ: STRICT = True else: STRICT = False MPZ_TYPE = type(MPZ(0)) MPZ_ZERO = MPZ(0) MPZ_ONE = MPZ(1) MPZ_TWO = MPZ(2) MPZ_THREE = MPZ(3) MPZ_FIVE = MPZ(5) try: if BACKEND == 'python': int_types = (int, long) else: int_types = (int, long, MPZ_TYPE) except NameError: if BACKEND == 'python': int_types = (int,) else: int_types = (int, MPZ_TYPE) mpmath-1.0.0/mpmath/libmp/gammazeta.py000066400000000000000000002316071316273626600177340ustar00rootroot00000000000000""" ----------------------------------------------------------------------- This module implements gamma- and zeta-related functions: * Bernoulli numbers * Factorials * The gamma function * Polygamma functions * Harmonic numbers * The Riemann zeta function * Constants related to these functions ----------------------------------------------------------------------- """ import math import sys from .backend import xrange from .backend import MPZ, MPZ_ZERO, MPZ_ONE, MPZ_THREE, gmpy from .libintmath import list_primes, ifac, ifac2, moebius from .libmpf import (\ round_floor, round_ceiling, round_down, round_up, round_nearest, round_fast, lshift, sqrt_fixed, isqrt_fast, fzero, fone, fnone, fhalf, ftwo, finf, fninf, fnan, from_int, to_int, to_fixed, from_man_exp, from_rational, mpf_pos, mpf_neg, mpf_abs, mpf_add, mpf_sub, mpf_mul, mpf_mul_int, mpf_div, mpf_sqrt, mpf_pow_int, mpf_rdiv_int, mpf_perturb, mpf_le, mpf_lt, mpf_gt, mpf_shift, negative_rnd, reciprocal_rnd, bitcount, to_float, mpf_floor, mpf_sign, ComplexResult ) from .libelefun import (\ constant_memo, def_mpf_constant, mpf_pi, pi_fixed, ln2_fixed, log_int_fixed, mpf_ln2, mpf_exp, mpf_log, mpf_pow, mpf_cosh, mpf_cos_sin, mpf_cosh_sinh, mpf_cos_sin_pi, mpf_cos_pi, mpf_sin_pi, ln_sqrt2pi_fixed, mpf_ln_sqrt2pi, sqrtpi_fixed, mpf_sqrtpi, cos_sin_fixed, exp_fixed ) from .libmpc import (\ mpc_zero, mpc_one, mpc_half, mpc_two, mpc_abs, mpc_shift, mpc_pos, mpc_neg, mpc_add, mpc_sub, mpc_mul, mpc_div, mpc_add_mpf, mpc_mul_mpf, mpc_div_mpf, mpc_mpf_div, mpc_mul_int, mpc_pow_int, mpc_log, mpc_exp, mpc_pow, mpc_cos_pi, mpc_sin_pi, mpc_reciprocal, mpc_square, mpc_sub_mpf ) # Catalan's constant is computed using Lupas's rapidly convergent series # (listed on http://mathworld.wolfram.com/CatalansConstant.html) # oo # ___ n-1 8n 2 3 2 # 1 \ (-1) 2 (40n - 24n + 3) [(2n)!] (n!) # K = --- ) ----------------------------------------- # 64 /___ 3 2 # n (2n-1) [(4n)!] # n = 1 @constant_memo def catalan_fixed(prec): prec = prec + 20 a = one = MPZ_ONE << prec s, t, n = 0, 1, 1 while t: a *= 32 * n**3 * (2*n-1) a //= (3-16*n+16*n**2)**2 t = a * (-1)**(n-1) * (40*n**2-24*n+3) // (n**3 * (2*n-1)) s += t n += 1 return s >> (20 + 6) # Khinchin's constant is relatively difficult to compute. Here # we use the rational zeta series # oo 2*n-1 # ___ ___ # \ ` zeta(2*n)-1 \ ` (-1)^(k+1) # log(K)*log(2) = ) ------------ ) ---------- # /___. n /___. k # n = 1 k = 1 # which adds half a digit per term. The essential trick for achieving # reasonable efficiency is to recycle both the values of the zeta # function (essentially Bernoulli numbers) and the partial terms of # the inner sum. # An alternative might be to use K = 2*exp[1/log(2) X] where # / 1 1 [ pi*x*(1-x^2) ] # X = | ------ log [ ------------ ]. # / 0 x(1+x) [ sin(pi*x) ] # and integrate numerically. In practice, this seems to be slightly # slower than the zeta series at high precision. @constant_memo def khinchin_fixed(prec): wp = int(prec + prec**0.5 + 15) s = MPZ_ZERO fac = from_int(4) t = ONE = MPZ_ONE << wp pi = mpf_pi(wp) pipow = twopi2 = mpf_shift(mpf_mul(pi, pi, wp), 2) n = 1 while 1: zeta2n = mpf_abs(mpf_bernoulli(2*n, wp)) zeta2n = mpf_mul(zeta2n, pipow, wp) zeta2n = mpf_div(zeta2n, fac, wp) zeta2n = to_fixed(zeta2n, wp) term = (((zeta2n - ONE) * t) // n) >> wp if term < 100: break #if not n % 10: # print n, math.log(int(abs(term))) s += term t += ONE//(2*n+1) - ONE//(2*n) n += 1 fac = mpf_mul_int(fac, (2*n)*(2*n-1), wp) pipow = mpf_mul(pipow, twopi2, wp) s = (s << wp) // ln2_fixed(wp) K = mpf_exp(from_man_exp(s, -wp), wp) K = to_fixed(K, prec) return K # Glaisher's constant is defined as A = exp(1/2 - zeta'(-1)). # One way to compute it would be to perform direct numerical # differentiation, but computing arbitrary Riemann zeta function # values at high precision is expensive. We instead use the formula # A = exp((6 (-zeta'(2))/pi^2 + log 2 pi + gamma)/12) # and compute zeta'(2) from the series representation # oo # ___ # \ log k # -zeta'(2) = ) ----- # /___ 2 # k # k = 2 # This series converges exceptionally slowly, but can be accelerated # using Euler-Maclaurin formula. The important insight is that the # E-M integral can be done in closed form and that the high order # are given by # n / \ # d | log x | a + b log x # --- | ----- | = ----------- # n | 2 | 2 + n # dx \ x / x # where a and b are integers given by a simple recurrence. Note # that just one logarithm is needed. However, lots of integer # logarithms are required for the initial summation. # This algorithm could possibly be turned into a faster algorithm # for general evaluation of zeta(s) or zeta'(s); this should be # looked into. @constant_memo def glaisher_fixed(prec): wp = prec + 30 # Number of direct terms to sum before applying the Euler-Maclaurin # formula to the tail. TODO: choose more intelligently N = int(0.33*prec + 5) ONE = MPZ_ONE << wp # Euler-Maclaurin, step 1: sum log(k)/k**2 for k from 2 to N-1 s = MPZ_ZERO for k in range(2, N): #print k, N s += log_int_fixed(k, wp) // k**2 logN = log_int_fixed(N, wp) #logN = to_fixed(mpf_log(from_int(N), wp+20), wp) # E-M step 2: integral of log(x)/x**2 from N to inf s += (ONE + logN) // N # E-M step 3: endpoint correction term f(N)/2 s += logN // (N**2 * 2) # E-M step 4: the series of derivatives pN = N**3 a = 1 b = -2 j = 3 fac = from_int(2) k = 1 while 1: # D(2*k-1) * B(2*k) / fac(2*k) [D(n) = nth derivative] D = ((a << wp) + b*logN) // pN D = from_man_exp(D, -wp) B = mpf_bernoulli(2*k, wp) term = mpf_mul(B, D, wp) term = mpf_div(term, fac, wp) term = to_fixed(term, wp) if abs(term) < 100: break #if not k % 10: # print k, math.log(int(abs(term)), 10) s -= term # Advance derivative twice a, b, pN, j = b-a*j, -j*b, pN*N, j+1 a, b, pN, j = b-a*j, -j*b, pN*N, j+1 k += 1 fac = mpf_mul_int(fac, (2*k)*(2*k-1), wp) # A = exp((6*s/pi**2 + log(2*pi) + euler)/12) pi = pi_fixed(wp) s *= 6 s = (s << wp) // (pi**2 >> wp) s += euler_fixed(wp) s += to_fixed(mpf_log(from_man_exp(2*pi, -wp), wp), wp) s //= 12 A = mpf_exp(from_man_exp(s, -wp), wp) return to_fixed(A, prec) # Apery's constant can be computed using the very rapidly convergent # series # oo # ___ 2 10 # \ n 205 n + 250 n + 77 (n!) # zeta(3) = ) (-1) ------------------- ---------- # /___ 64 5 # n = 0 ((2n+1)!) @constant_memo def apery_fixed(prec): prec += 20 d = MPZ_ONE << prec term = MPZ(77) << prec n = 1 s = MPZ_ZERO while term: s += term d *= (n**10) d //= (((2*n+1)**5) * (2*n)**5) term = (-1)**n * (205*(n**2) + 250*n + 77) * d n += 1 return s >> (20 + 6) """ Euler's constant (gamma) is computed using the Brent-McMillan formula, gamma ~= I(n)/J(n) - log(n), where I(n) = sum_{k=0,1,2,...} (n**k / k!)**2 * H(k) J(n) = sum_{k=0,1,2,...} (n**k / k!)**2 H(k) = 1 + 1/2 + 1/3 + ... + 1/k The error is bounded by O(exp(-4n)). Choosing n to be a power of two, 2**p, the logarithm becomes particularly easy to calculate.[1] We use the formulation of Algorithm 3.9 in [2] to make the summation more efficient. Reference: [1] Xavier Gourdon & Pascal Sebah, The Euler constant: gamma http://numbers.computation.free.fr/Constants/Gamma/gamma.pdf [2] Jonathan Borwein & David Bailey, Mathematics by Experiment, A K Peters, 2003 """ @constant_memo def euler_fixed(prec): extra = 30 prec += extra # choose p such that exp(-4*(2**p)) < 2**-n p = int(math.log((prec/4) * math.log(2), 2)) + 1 n = 2**p A = U = -p*ln2_fixed(prec) B = V = MPZ_ONE << prec k = 1 while 1: B = B*n**2//k**2 A = (A*n**2//k + B)//k U += A V += B if max(abs(A), abs(B)) < 100: break k += 1 return (U<<(prec-extra))//V # Use zeta accelerated formulas for the Mertens and twin # prime constants; see # http://mathworld.wolfram.com/MertensConstant.html # http://mathworld.wolfram.com/TwinPrimesConstant.html @constant_memo def mertens_fixed(prec): wp = prec + 20 m = 2 s = mpf_euler(wp) while 1: t = mpf_zeta_int(m, wp) if t == fone: break t = mpf_log(t, wp) t = mpf_mul_int(t, moebius(m), wp) t = mpf_div(t, from_int(m), wp) s = mpf_add(s, t) m += 1 return to_fixed(s, prec) @constant_memo def twinprime_fixed(prec): def I(n): return sum(moebius(d)<<(n//d) for d in xrange(1,n+1) if not n%d)//n wp = 2*prec + 30 res = fone primes = [from_rational(1,p,wp) for p in [2,3,5,7]] ppowers = [mpf_mul(p,p,wp) for p in primes] n = 2 while 1: a = mpf_zeta_int(n, wp) for i in range(4): a = mpf_mul(a, mpf_sub(fone, ppowers[i]), wp) ppowers[i] = mpf_mul(ppowers[i], primes[i], wp) a = mpf_pow_int(a, -I(n), wp) if mpf_pos(a, prec+10, 'n') == fone: break #from libmpf import to_str #print n, to_str(mpf_sub(fone, a), 6) res = mpf_mul(res, a, wp) n += 1 res = mpf_mul(res, from_int(3*15*35), wp) res = mpf_div(res, from_int(4*16*36), wp) return to_fixed(res, prec) mpf_euler = def_mpf_constant(euler_fixed) mpf_apery = def_mpf_constant(apery_fixed) mpf_khinchin = def_mpf_constant(khinchin_fixed) mpf_glaisher = def_mpf_constant(glaisher_fixed) mpf_catalan = def_mpf_constant(catalan_fixed) mpf_mertens = def_mpf_constant(mertens_fixed) mpf_twinprime = def_mpf_constant(twinprime_fixed) #-----------------------------------------------------------------------# # # # Bernoulli numbers # # # #-----------------------------------------------------------------------# MAX_BERNOULLI_CACHE = 3000 """ Small Bernoulli numbers and factorials are used in numerous summations, so it is critical for speed that sequential computation is fast and that values are cached up to a fairly high threshold. On the other hand, we also want to support fast computation of isolated large numbers. Currently, no such acceleration is provided for integer factorials (though it is for large floating-point factorials, which are computed via gamma if the precision is low enough). For sequential computation of Bernoulli numbers, we use Ramanujan's formula / n + 3 \ B = (A(n) - S(n)) / | | n \ n / where A(n) = (n+3)/3 when n = 0 or 2 (mod 6), A(n) = -(n+3)/6 when n = 4 (mod 6), and [n/6] ___ \ / n + 3 \ S(n) = ) | | * B /___ \ n - 6*k / n-6*k k = 1 For isolated large Bernoulli numbers, we use the Riemann zeta function to calculate a numerical value for B_n. The von Staudt-Clausen theorem can then be used to optionally find the exact value of the numerator and denominator. """ bernoulli_cache = {} f3 = from_int(3) f6 = from_int(6) def bernoulli_size(n): """Accurately estimate the size of B_n (even n > 2 only)""" lgn = math.log(n,2) return int(2.326 + 0.5*lgn + n*(lgn - 4.094)) BERNOULLI_PREC_CUTOFF = bernoulli_size(MAX_BERNOULLI_CACHE) def mpf_bernoulli(n, prec, rnd=None): """Computation of Bernoulli numbers (numerically)""" if n < 2: if n < 0: raise ValueError("Bernoulli numbers only defined for n >= 0") if n == 0: return fone if n == 1: return mpf_neg(fhalf) # For odd n > 1, the Bernoulli numbers are zero if n & 1: return fzero # If precision is extremely high, we can save time by computing # the Bernoulli number at a lower precision that is sufficient to # obtain the exact fraction, round to the exact fraction, and # convert the fraction back to an mpf value at the original precision if prec > BERNOULLI_PREC_CUTOFF and prec > bernoulli_size(n)*1.1 + 1000: p, q = bernfrac(n) return from_rational(p, q, prec, rnd or round_floor) if n > MAX_BERNOULLI_CACHE: return mpf_bernoulli_huge(n, prec, rnd) wp = prec + 30 # Reuse nearby precisions wp += 32 - (prec & 31) cached = bernoulli_cache.get(wp) if cached: numbers, state = cached if n in numbers: if not rnd: return numbers[n] return mpf_pos(numbers[n], prec, rnd) m, bin, bin1 = state if n - m > 10: return mpf_bernoulli_huge(n, prec, rnd) else: if n > 10: return mpf_bernoulli_huge(n, prec, rnd) numbers = {0:fone} m, bin, bin1 = state = [2, MPZ(10), MPZ_ONE] bernoulli_cache[wp] = (numbers, state) while m <= n: #print m case = m % 6 # Accurately estimate size of B_m so we can use # fixed point math without using too much precision szbm = bernoulli_size(m) s = 0 sexp = max(0, szbm) - wp if m < 6: a = MPZ_ZERO else: a = bin1 for j in xrange(1, m//6+1): usign, uman, uexp, ubc = u = numbers[m-6*j] if usign: uman = -uman s += lshift(a*uman, uexp-sexp) # Update inner binomial coefficient j6 = 6*j a *= ((m-5-j6)*(m-4-j6)*(m-3-j6)*(m-2-j6)*(m-1-j6)*(m-j6)) a //= ((4+j6)*(5+j6)*(6+j6)*(7+j6)*(8+j6)*(9+j6)) if case == 0: b = mpf_rdiv_int(m+3, f3, wp) if case == 2: b = mpf_rdiv_int(m+3, f3, wp) if case == 4: b = mpf_rdiv_int(-m-3, f6, wp) s = from_man_exp(s, sexp, wp) b = mpf_div(mpf_sub(b, s, wp), from_int(bin), wp) numbers[m] = b m += 2 # Update outer binomial coefficient bin = bin * ((m+2)*(m+3)) // (m*(m-1)) if m > 6: bin1 = bin1 * ((2+m)*(3+m)) // ((m-7)*(m-6)) state[:] = [m, bin, bin1] return numbers[n] def mpf_bernoulli_huge(n, prec, rnd=None): wp = prec + 10 piprec = wp + int(math.log(n,2)) v = mpf_gamma_int(n+1, wp) v = mpf_mul(v, mpf_zeta_int(n, wp), wp) v = mpf_mul(v, mpf_pow_int(mpf_pi(piprec), -n, wp)) v = mpf_shift(v, 1-n) if not n & 3: v = mpf_neg(v) return mpf_pos(v, prec, rnd or round_fast) def bernfrac(n): r""" Returns a tuple of integers `(p, q)` such that `p/q = B_n` exactly, where `B_n` denotes the `n`-th Bernoulli number. The fraction is always reduced to lowest terms. Note that for `n > 1` and `n` odd, `B_n = 0`, and `(0, 1)` is returned. **Examples** The first few Bernoulli numbers are exactly:: >>> from mpmath import * >>> for n in range(15): ... p, q = bernfrac(n) ... print("%s %s/%s" % (n, p, q)) ... 0 1/1 1 -1/2 2 1/6 3 0/1 4 -1/30 5 0/1 6 1/42 7 0/1 8 -1/30 9 0/1 10 5/66 11 0/1 12 -691/2730 13 0/1 14 7/6 This function works for arbitrarily large `n`:: >>> p, q = bernfrac(10**4) >>> print(q) 2338224387510 >>> print(len(str(p))) 27692 >>> mp.dps = 15 >>> print(mpf(p) / q) -9.04942396360948e+27677 >>> print(bernoulli(10**4)) -9.04942396360948e+27677 .. note :: :func:`~mpmath.bernoulli` computes a floating-point approximation directly, without computing the exact fraction first. This is much faster for large `n`. **Algorithm** :func:`~mpmath.bernfrac` works by computing the value of `B_n` numerically and then using the von Staudt-Clausen theorem [1] to reconstruct the exact fraction. For large `n`, this is significantly faster than computing `B_1, B_2, \ldots, B_2` recursively with exact arithmetic. The implementation has been tested for `n = 10^m` up to `m = 6`. In practice, :func:`~mpmath.bernfrac` appears to be about three times slower than the specialized program calcbn.exe [2] **References** 1. MathWorld, von Staudt-Clausen Theorem: http://mathworld.wolfram.com/vonStaudt-ClausenTheorem.html 2. The Bernoulli Number Page: http://www.bernoulli.org/ """ n = int(n) if n < 3: return [(1, 1), (-1, 2), (1, 6)][n] if n & 1: return (0, 1) q = 1 for k in list_primes(n+1): if not (n % (k-1)): q *= k prec = bernoulli_size(n) + int(math.log(q,2)) + 20 b = mpf_bernoulli(n, prec) p = mpf_mul(b, from_int(q)) pint = to_int(p, round_nearest) return (pint, q) #-----------------------------------------------------------------------# # # # The gamma function (OLD IMPLEMENTATION) # # # #-----------------------------------------------------------------------# """ We compute the real factorial / gamma function using Spouge's approximation x! = (x+a)**(x+1/2) * exp(-x-a) * [c_0 + S(x) + eps] where S(x) is the sum of c_k/(x+k) from k = 1 to a-1 and the coefficients are given by c_0 = sqrt(2*pi) (-1)**(k-1) c_k = ----------- (a-k)**(k-1/2) exp(-k+a), k = 1,2,...,a-1 (k - 1)! As proved by Spouge, if we choose a = log(2)/log(2*pi)*n = 0.38*n, the relative error eps is less than 2^(-n) for any x in the right complex half-plane (assuming a > 2). In practice, it seems that a can be chosen quite a bit lower still (30-50%); this possibility should be investigated. For negative x, we use the reflection formula. References: ----------- John L. Spouge, "Computation of the gamma, digamma, and trigamma functions", SIAM Journal on Numerical Analysis 31 (1994), no. 3, 931-944. """ spouge_cache = {} def calc_spouge_coefficients(a, prec): wp = prec + int(a*1.4) c = [0] * a # b = exp(a-1) b = mpf_exp(from_int(a-1), wp) # e = exp(1) e = mpf_exp(fone, wp) # sqrt(2*pi) sq2pi = mpf_sqrt(mpf_shift(mpf_pi(wp), 1), wp) c[0] = to_fixed(sq2pi, prec) for k in xrange(1, a): # c[k] = ((-1)**(k-1) * (a-k)**k) * b / sqrt(a-k) term = mpf_mul_int(b, ((-1)**(k-1) * (a-k)**k), wp) term = mpf_div(term, mpf_sqrt(from_int(a-k), wp), wp) c[k] = to_fixed(term, prec) # b = b / (e * k) b = mpf_div(b, mpf_mul(e, from_int(k), wp), wp) return c # Cached lookup of coefficients def get_spouge_coefficients(prec): # This exact precision has been used before if prec in spouge_cache: return spouge_cache[prec] for p in spouge_cache: if 0.8 <= prec/float(p) < 1: return spouge_cache[p] # Here we estimate the value of a based on Spouge's inequality for # the relative error a = max(3, int(0.38*prec)) # 0.38 = log(2)/log(2*pi), ~= 1.26*n coefs = calc_spouge_coefficients(a, prec) spouge_cache[prec] = (prec, a, coefs) return spouge_cache[prec] def spouge_sum_real(x, prec, a, c): x = to_fixed(x, prec) s = c[0] for k in xrange(1, a): s += (c[k] << prec) // (x + (k << prec)) return from_man_exp(s, -prec, prec, round_floor) # Unused: for fast computation of gamma(p/q) def spouge_sum_rational(p, q, prec, a, c): s = c[0] for k in xrange(1, a): s += c[k] * q // (p+q*k) return from_man_exp(s, -prec, prec, round_floor) # For a complex number a + b*I, we have # # c_k (a+k)*c_k b * c_k # ------------- = --------- - ------- * I # (a + b*I) + k M M # # 2 2 2 2 2 # where M = (a+k) + b = (a + b ) + (2*a*k + k ) def spouge_sum_complex(re, im, prec, a, c): re = to_fixed(re, prec) im = to_fixed(im, prec) sre, sim = c[0], 0 mag = ((re**2)>>prec) + ((im**2)>>prec) for k in xrange(1, a): M = mag + re*(2*k) + ((k**2) << prec) sre += (c[k] * (re + (k << prec))) // M sim -= (c[k] * im) // M re = from_man_exp(sre, -prec, prec, round_floor) im = from_man_exp(sim, -prec, prec, round_floor) return re, im def mpf_gamma_int_old(n, prec, rounding=round_fast): if n < 1000: return from_int(ifac(n-1), prec, rounding) # XXX: choose the cutoff less arbitrarily size = int(n*math.log(n,2)) if prec > size/20.0: return from_int(ifac(n-1), prec, rounding) return mpf_gamma(from_int(n), prec, rounding) def mpf_factorial_old(x, prec, rounding=round_fast): return mpf_gamma_old(x, prec, rounding, p1=0) def mpc_factorial_old(x, prec, rounding=round_fast): return mpc_gamma_old(x, prec, rounding, p1=0) def mpf_gamma_old(x, prec, rounding=round_fast, p1=1): """ Computes the gamma function of a real floating-point argument. With p1=0, computes a factorial instead. """ sign, man, exp, bc = x if not man: if x == finf: return finf if x == fninf or x == fnan: return fnan # More precision is needed for enormous x. TODO: # use Stirling's formula + Euler-Maclaurin summation size = exp + bc if size > 5: size = int(size * math.log(size,2)) wp = prec + max(0, size) + 15 if exp >= 0: if sign or (p1 and not man): raise ValueError("gamma function pole") # A direct factorial is fastest if exp + bc <= 10: return from_int(ifac((man< 5: size = int(size * math.log(size,2)) reflect = sign or (exp+bc < -1) wp = prec + max(0, size) + 25 # Near x = 0 pole (TODO: other poles) if p1: if size < -prec-5: return mpc_add_mpf(mpc_div(mpc_one, x, 2*prec+10), \ mpf_neg(mpf_euler(2*prec+10)), prec, rounding) elif size < -5: wp += (-2*size) if p1: # Should be done exactly! re_orig = re re = mpf_sub(re, fone, bc+abs(exp)+2) x = re, im if reflect: # Reflection formula wp += 15 pi = mpf_pi(wp), fzero pix = mpc_mul(x, pi, wp) t = mpc_sin_pi(x, wp) u = mpc_sub(mpc_one, x, wp) g = mpc_gamma_old(u, wp) w = mpc_mul(t, g, wp) return mpc_div(pix, w, wp) # Extremely close to the real line? # XXX: reflection formula if iexp+ibc < -wp: a = mpf_gamma_old(re_orig, wp) b = mpf_psi0(re_orig, wp) gamma_diff = mpf_div(a, b, wp) return mpf_pos(a, prec, rounding), mpf_mul(gamma_diff, im, prec, rounding) sprec, a, c = get_spouge_coefficients(wp) s = spouge_sum_complex(re, im, sprec, a, c) # gamma = exp(log(x+a)*(x+0.5) - xpa) * s repa = mpf_add(re, from_int(a), wp) logxpa = mpc_log((repa, im), wp) reph = mpf_add(re, fhalf, wp) t = mpc_sub(mpc_mul(logxpa, (reph, im), wp), (repa, im), wp) t = mpc_mul(mpc_exp(t, wp), s, prec, rounding) return t #-----------------------------------------------------------------------# # # # Polygamma functions # # # #-----------------------------------------------------------------------# """ For all polygamma (psi) functions, we use the Euler-Maclaurin summation formula. It looks slightly different in the m = 0 and m > 0 cases. For m = 0, we have oo ___ B (0) 1 \ 2 k -2 k psi (z) ~ log z + --- - ) ------ z 2 z /___ (2 k)! k = 1 Experiment shows that the minimum term of the asymptotic series reaches 2^(-p) when Re(z) > 0.11*p. So we simply use the recurrence for psi (equivalent, in fact, to summing to the first few terms directly before applying E-M) to obtain z large enough. Since, very crudely, log z ~= 1 for Re(z) > 1, we can use fixed-point arithmetic (if z is extremely large, log(z) itself is a sufficient approximation, so we can stop there already). For Re(z) << 0, we could use recurrence, but this is of course inefficient for large negative z, so there we use the reflection formula instead. For m > 0, we have N - 1 ___ ~~~(m) [ \ 1 ] 1 1 psi (z) ~ [ ) -------- ] + ---------- + -------- + [ /___ m+1 ] m+1 m k = 1 (z+k) ] 2 (z+N) m (z+N) oo ___ B \ 2 k (m+1) (m+2) ... (m+2k-1) + ) ------ ------------------------ /___ (2 k)! m + 2 k k = 1 (z+N) where ~~~ denotes the function rescaled by 1/((-1)^(m+1) m!). Here again N is chosen to make z+N large enough for the minimum term in the last series to become smaller than eps. TODO: the current estimation of N for m > 0 is *very suboptimal*. TODO: implement the reflection formula for m > 0, Re(z) << 0. It is generally a combination of multiple cotangents. Need to figure out a reasonably simple way to generate these formulas on the fly. TODO: maybe use exact algorithms to compute psi for integral and certain rational arguments, as this can be much more efficient. (On the other hand, the availability of these special values provides a convenient way to test the general algorithm.) """ # Harmonic numbers are just shifted digamma functions # We should calculate these exactly when x is an integer # and when doing so is faster. def mpf_harmonic(x, prec, rnd): if x in (fzero, fnan, finf): return x a = mpf_psi0(mpf_add(fone, x, prec+5), prec) return mpf_add(a, mpf_euler(prec+5, rnd), prec, rnd) def mpc_harmonic(z, prec, rnd): if z[1] == fzero: return (mpf_harmonic(z[0], prec, rnd), fzero) a = mpc_psi0(mpc_add_mpf(z, fone, prec+5), prec) return mpc_add_mpf(a, mpf_euler(prec+5, rnd), prec, rnd) def mpf_psi0(x, prec, rnd=round_fast): """ Computation of the digamma function (psi function of order 0) of a real argument. """ sign, man, exp, bc = x wp = prec + 10 if not man: if x == finf: return x if x == fninf or x == fnan: return fnan if x == fzero or (exp >= 0 and sign): raise ValueError("polygamma pole") # Reflection formula if sign and exp+bc > 3: c, s = mpf_cos_sin_pi(x, wp) q = mpf_mul(mpf_div(c, s, wp), mpf_pi(wp), wp) p = mpf_psi0(mpf_sub(fone, x, wp), wp) return mpf_sub(p, q, prec, rnd) # The logarithmic term is accurate enough if (not sign) and bc + exp > wp: return mpf_log(mpf_sub(x, fone, wp), prec, rnd) # Initial recurrence to obtain a large enough x m = to_int(x) n = int(0.11*wp) + 2 s = MPZ_ZERO x = to_fixed(x, wp) one = MPZ_ONE << wp if m < n: for k in xrange(m, n): s -= (one << wp) // x x += one x -= one # Logarithmic term s += to_fixed(mpf_log(from_man_exp(x, -wp, wp), wp), wp) # Endpoint term in Euler-Maclaurin expansion s += (one << wp) // (2*x) # Euler-Maclaurin remainder sum x2 = (x*x) >> wp t = one prev = 0 k = 1 while 1: t = (t*x2) >> wp bsign, bman, bexp, bbc = mpf_bernoulli(2*k, wp) offset = (bexp + 2*wp) if offset >= 0: term = (bman << offset) // (t*(2*k)) else: term = (bman >> (-offset)) // (t*(2*k)) if k & 1: s -= term else: s += term if k > 2 and term >= prev: break prev = term k += 1 return from_man_exp(s, -wp, wp, rnd) def mpc_psi0(z, prec, rnd=round_fast): """ Computation of the digamma function (psi function of order 0) of a complex argument. """ re, im = z # Fall back to the real case if im == fzero: return (mpf_psi0(re, prec, rnd), fzero) wp = prec + 20 sign, man, exp, bc = re # Reflection formula if sign and exp+bc > 3: c = mpc_cos_pi(z, wp) s = mpc_sin_pi(z, wp) q = mpc_mul_mpf(mpc_div(c, s, wp), mpf_pi(wp), wp) p = mpc_psi0(mpc_sub(mpc_one, z, wp), wp) return mpc_sub(p, q, prec, rnd) # Just the logarithmic term if (not sign) and bc + exp > wp: return mpc_log(mpc_sub(z, mpc_one, wp), prec, rnd) # Initial recurrence to obtain a large enough z w = to_int(re) n = int(0.11*wp) + 2 s = mpc_zero if w < n: for k in xrange(w, n): s = mpc_sub(s, mpc_reciprocal(z, wp), wp) z = mpc_add_mpf(z, fone, wp) z = mpc_sub(z, mpc_one, wp) # Logarithmic and endpoint term s = mpc_add(s, mpc_log(z, wp), wp) s = mpc_add(s, mpc_div(mpc_half, z, wp), wp) # Euler-Maclaurin remainder sum z2 = mpc_square(z, wp) t = mpc_one prev = mpc_zero k = 1 eps = mpf_shift(fone, -wp+2) while 1: t = mpc_mul(t, z2, wp) bern = mpf_bernoulli(2*k, wp) term = mpc_mpf_div(bern, mpc_mul_int(t, 2*k, wp), wp) s = mpc_sub(s, term, wp) szterm = mpc_abs(term, 10) if k > 2 and mpf_le(szterm, eps): break prev = term k += 1 return s # Currently unoptimized def mpf_psi(m, x, prec, rnd=round_fast): """ Computation of the polygamma function of arbitrary integer order m >= 0, for a real argument x. """ if m == 0: return mpf_psi0(x, prec, rnd=round_fast) return mpc_psi(m, (x, fzero), prec, rnd)[0] def mpc_psi(m, z, prec, rnd=round_fast): """ Computation of the polygamma function of arbitrary integer order m >= 0, for a complex argument z. """ if m == 0: return mpc_psi0(z, prec, rnd) re, im = z wp = prec + 20 sign, man, exp, bc = re if not im[1]: if im in (finf, fninf, fnan): return (fnan, fnan) if not man: if re == finf and im == fzero: return (fzero, fzero) if re == fnan: return (fnan, fnan) # Recurrence w = to_int(re) n = int(0.4*wp + 4*m) s = mpc_zero if w < n: for k in xrange(w, n): t = mpc_pow_int(z, -m-1, wp) s = mpc_add(s, t, wp) z = mpc_add_mpf(z, fone, wp) zm = mpc_pow_int(z, -m, wp) z2 = mpc_pow_int(z, -2, wp) # 1/m*(z+N)^m integral_term = mpc_div_mpf(zm, from_int(m), wp) s = mpc_add(s, integral_term, wp) # 1/2*(z+N)^(-(m+1)) s = mpc_add(s, mpc_mul_mpf(mpc_div(zm, z, wp), fhalf, wp), wp) a = m + 1 b = 2 k = 1 # Important: we want to sum up to the *relative* error, # not the absolute error, because psi^(m)(z) might be tiny magn = mpc_abs(s, 10) magn = magn[2]+magn[3] eps = mpf_shift(fone, magn-wp+2) while 1: zm = mpc_mul(zm, z2, wp) bern = mpf_bernoulli(2*k, wp) scal = mpf_mul_int(bern, a, wp) scal = mpf_div(scal, from_int(b), wp) term = mpc_mul_mpf(zm, scal, wp) s = mpc_add(s, term, wp) szterm = mpc_abs(term, 10) if k > 2 and mpf_le(szterm, eps): break #print k, to_str(szterm, 10), to_str(eps, 10) a *= (m+2*k)*(m+2*k+1) b *= (2*k+1)*(2*k+2) k += 1 # Scale and sign factor v = mpc_mul_mpf(s, mpf_gamma(from_int(m+1), wp), prec, rnd) if not (m & 1): v = mpf_neg(v[0]), mpf_neg(v[1]) return v #-----------------------------------------------------------------------# # # # Riemann zeta function # # # #-----------------------------------------------------------------------# """ We use zeta(s) = eta(s) / (1 - 2**(1-s)) and Borwein's approximation n-1 ___ k -1 \ (-1) (d_k - d_n) eta(s) ~= ---- ) ------------------ d_n /___ s k = 0 (k + 1) where k ___ i \ (n + i - 1)! 4 d_k = n ) ---------------. /___ (n - i)! (2i)! i = 0 If s = a + b*I, the absolute error for eta(s) is bounded by 3 (1 + 2|b|) ------------ * exp(|b| pi/2) n (3+sqrt(8)) Disregarding the linear term, we have approximately, log(err) ~= log(exp(1.58*|b|)) - log(5.8**n) log(err) ~= 1.58*|b| - log(5.8)*n log(err) ~= 1.58*|b| - 1.76*n log2(err) ~= 2.28*|b| - 2.54*n So for p bits, we should choose n > (p + 2.28*|b|) / 2.54. References: ----------- Peter Borwein, "An Efficient Algorithm for the Riemann Zeta Function" http://www.cecm.sfu.ca/personal/pborwein/PAPERS/P117.ps http://en.wikipedia.org/wiki/Dirichlet_eta_function """ borwein_cache = {} def borwein_coefficients(n): if n in borwein_cache: return borwein_cache[n] ds = [MPZ_ZERO] * (n+1) d = MPZ_ONE s = ds[0] = MPZ_ONE for i in range(1, n+1): d = d * 4 * (n+i-1) * (n-i+1) d //= ((2*i) * ((2*i)-1)) s += d ds[i] = s borwein_cache[n] = ds return ds ZETA_INT_CACHE_MAX_PREC = 1000 zeta_int_cache = {} def mpf_zeta_int(s, prec, rnd=round_fast): """ Optimized computation of zeta(s) for an integer s. """ wp = prec + 20 s = int(s) if s in zeta_int_cache and zeta_int_cache[s][0] >= wp: return mpf_pos(zeta_int_cache[s][1], prec, rnd) if s < 2: if s == 1: raise ValueError("zeta(1) pole") if not s: return mpf_neg(fhalf) return mpf_div(mpf_bernoulli(-s+1, wp), from_int(s-1), prec, rnd) # 2^-s term vanishes? if s >= wp: return mpf_perturb(fone, 0, prec, rnd) # 5^-s term vanishes? elif s >= wp*0.431: t = one = 1 << wp t += 1 << (wp - s) t += one // (MPZ_THREE ** s) t += 1 << max(0, wp - s*2) return from_man_exp(t, -wp, prec, rnd) else: # Fast enough to sum directly? # Even better, we use the Euler product (idea stolen from pari) m = (float(wp)/(s-1) + 1) if m < 30: needed_terms = int(2.0**m + 1) if needed_terms < int(wp/2.54 + 5) / 10: t = fone for k in list_primes(needed_terms): #print k, needed_terms powprec = int(wp - s*math.log(k,2)) if powprec < 2: break a = mpf_sub(fone, mpf_pow_int(from_int(k), -s, powprec), wp) t = mpf_mul(t, a, wp) return mpf_div(fone, t, wp) # Use Borwein's algorithm n = int(wp/2.54 + 5) d = borwein_coefficients(n) t = MPZ_ZERO s = MPZ(s) for k in xrange(n): t += (((-1)**k * (d[k] - d[n])) << wp) // (k+1)**s t = (t << wp) // (-d[n]) t = (t << wp) // ((1 << wp) - (1 << (wp+1-s))) if (s in zeta_int_cache and zeta_int_cache[s][0] < wp) or (s not in zeta_int_cache): zeta_int_cache[s] = (wp, from_man_exp(t, -wp-wp)) return from_man_exp(t, -wp-wp, prec, rnd) def mpf_zeta(s, prec, rnd=round_fast, alt=0): sign, man, exp, bc = s if not man: if s == fzero: if alt: return fhalf else: return mpf_neg(fhalf) if s == finf: return fone return fnan wp = prec + 20 # First term vanishes? if (not sign) and (exp + bc > (math.log(wp,2) + 2)): return mpf_perturb(fone, alt, prec, rnd) # Optimize for integer arguments elif exp >= 0: if alt: if s == fone: return mpf_ln2(prec, rnd) z = mpf_zeta_int(to_int(s), wp, negative_rnd[rnd]) q = mpf_sub(fone, mpf_pow(ftwo, mpf_sub(fone, s, wp), wp), wp) return mpf_mul(z, q, prec, rnd) else: return mpf_zeta_int(to_int(s), prec, rnd) # Negative: use the reflection formula # Borwein only proves the accuracy bound for x >= 1/2. However, based on # tests, the accuracy without reflection is quite good even some distance # to the left of 1/2. XXX: verify this. if sign: # XXX: could use the separate refl. formula for Dirichlet eta if alt: q = mpf_sub(fone, mpf_pow(ftwo, mpf_sub(fone, s, wp), wp), wp) return mpf_mul(mpf_zeta(s, wp), q, prec, rnd) # XXX: -1 should be done exactly y = mpf_sub(fone, s, 10*wp) a = mpf_gamma(y, wp) b = mpf_zeta(y, wp) c = mpf_sin_pi(mpf_shift(s, -1), wp) wp2 = wp + max(0,exp+bc) pi = mpf_pi(wp+wp2) d = mpf_div(mpf_pow(mpf_shift(pi, 1), s, wp2), pi, wp2) return mpf_mul(a,mpf_mul(b,mpf_mul(c,d,wp),wp),prec,rnd) # Near pole r = mpf_sub(fone, s, wp) asign, aman, aexp, abc = mpf_abs(r) pole_dist = -2*(aexp+abc) if pole_dist > wp: if alt: return mpf_ln2(prec, rnd) else: q = mpf_neg(mpf_div(fone, r, wp)) return mpf_add(q, mpf_euler(wp), prec, rnd) else: wp += max(0, pole_dist) t = MPZ_ZERO #wp += 16 - (prec & 15) # Use Borwein's algorithm n = int(wp/2.54 + 5) d = borwein_coefficients(n) t = MPZ_ZERO sf = to_fixed(s, wp) ln2 = ln2_fixed(wp) for k in xrange(n): u = (-sf*log_int_fixed(k+1, wp, ln2)) >> wp #esign, eman, eexp, ebc = mpf_exp(u, wp) #offset = eexp + wp #if offset >= 0: # w = ((d[k] - d[n]) * eman) << offset #else: # w = ((d[k] - d[n]) * eman) >> (-offset) eman = exp_fixed(u, wp, ln2) w = (d[k] - d[n]) * eman if k & 1: t -= w else: t += w t = t // (-d[n]) t = from_man_exp(t, -wp, wp) if alt: return mpf_pos(t, prec, rnd) else: q = mpf_sub(fone, mpf_pow(ftwo, mpf_sub(fone, s, wp), wp), wp) return mpf_div(t, q, prec, rnd) def mpc_zeta(s, prec, rnd=round_fast, alt=0, force=False): re, im = s if im == fzero: return mpf_zeta(re, prec, rnd, alt), fzero # slow for large s if (not force) and mpf_gt(mpc_abs(s, 10), from_int(prec)): raise NotImplementedError wp = prec + 20 # Near pole r = mpc_sub(mpc_one, s, wp) asign, aman, aexp, abc = mpc_abs(r, 10) pole_dist = -2*(aexp+abc) if pole_dist > wp: if alt: q = mpf_ln2(wp) y = mpf_mul(q, mpf_euler(wp), wp) g = mpf_shift(mpf_mul(q, q, wp), -1) g = mpf_sub(y, g) z = mpc_mul_mpf(r, mpf_neg(g), wp) z = mpc_add_mpf(z, q, wp) return mpc_pos(z, prec, rnd) else: q = mpc_neg(mpc_div(mpc_one, r, wp)) q = mpc_add_mpf(q, mpf_euler(wp), wp) return mpc_pos(q, prec, rnd) else: wp += max(0, pole_dist) # Reflection formula. To be rigorous, we should reflect to the left of # re = 1/2 (see comments for mpf_zeta), but this leads to unnecessary # slowdown for interesting values of s if mpf_lt(re, fzero): # XXX: could use the separate refl. formula for Dirichlet eta if alt: q = mpc_sub(mpc_one, mpc_pow(mpc_two, mpc_sub(mpc_one, s, wp), wp), wp) return mpc_mul(mpc_zeta(s, wp), q, prec, rnd) # XXX: -1 should be done exactly y = mpc_sub(mpc_one, s, 10*wp) a = mpc_gamma(y, wp) b = mpc_zeta(y, wp) c = mpc_sin_pi(mpc_shift(s, -1), wp) rsign, rman, rexp, rbc = re isign, iman, iexp, ibc = im mag = max(rexp+rbc, iexp+ibc) wp2 = wp + max(0, mag) pi = mpf_pi(wp+wp2) pi2 = (mpf_shift(pi, 1), fzero) d = mpc_div_mpf(mpc_pow(pi2, s, wp2), pi, wp2) return mpc_mul(a,mpc_mul(b,mpc_mul(c,d,wp),wp),prec,rnd) n = int(wp/2.54 + 5) n += int(0.9*abs(to_int(im))) d = borwein_coefficients(n) ref = to_fixed(re, wp) imf = to_fixed(im, wp) tre = MPZ_ZERO tim = MPZ_ZERO one = MPZ_ONE << wp one_2wp = MPZ_ONE << (2*wp) critical_line = re == fhalf ln2 = ln2_fixed(wp) pi2 = pi_fixed(wp-1) wp2 = wp+wp for k in xrange(n): log = log_int_fixed(k+1, wp, ln2) # A square root is much cheaper than an exp if critical_line: w = one_2wp // isqrt_fast((k+1) << wp2) else: w = exp_fixed((-ref*log) >> wp, wp) if k & 1: w *= (d[n] - d[k]) else: w *= (d[k] - d[n]) wre, wim = cos_sin_fixed((-imf*log)>>wp, wp, pi2) tre += (w * wre) >> wp tim += (w * wim) >> wp tre //= (-d[n]) tim //= (-d[n]) tre = from_man_exp(tre, -wp, wp) tim = from_man_exp(tim, -wp, wp) if alt: return mpc_pos((tre, tim), prec, rnd) else: q = mpc_sub(mpc_one, mpc_pow(mpc_two, r, wp), wp) return mpc_div((tre, tim), q, prec, rnd) def mpf_altzeta(s, prec, rnd=round_fast): return mpf_zeta(s, prec, rnd, 1) def mpc_altzeta(s, prec, rnd=round_fast): return mpc_zeta(s, prec, rnd, 1) # Not optimized currently mpf_zetasum = None def pow_fixed(x, n, wp): if n == 1: return x y = MPZ_ONE << wp while n: if n & 1: y = (y*x) >> wp n -= 1 x = (x*x) >> wp n //= 2 return y # TODO: optimize / cleanup interface / unify with list_primes sieve_cache = [] primes_cache = [] mult_cache = [] def primesieve(n): global sieve_cache, primes_cache, mult_cache if n < len(sieve_cache): sieve = sieve_cache#[:n+1] primes = primes_cache[:primes_cache.index(max(sieve))+1] mult = mult_cache#[:n+1] return sieve, primes, mult sieve = [0] * (n+1) mult = [0] * (n+1) primes = list_primes(n) for p in primes: #sieve[p::p] = p for k in xrange(p,n+1,p): sieve[k] = p for i, p in enumerate(sieve): if i >= 2: m = 1 n = i // p while not n % p: n //= p m += 1 mult[i] = m sieve_cache = sieve primes_cache = primes mult_cache = mult return sieve, primes, mult def zetasum_sieved(critical_line, sre, sim, a, n, wp): if a < 1: raise ValueError("a cannot be less than 1") sieve, primes, mult = primesieve(a+n) basic_powers = {} one = MPZ_ONE << wp one_2wp = MPZ_ONE << (2*wp) wp2 = wp+wp ln2 = ln2_fixed(wp) pi2 = pi_fixed(wp-1) for p in primes: if p*2 > a+n: break log = log_int_fixed(p, wp, ln2) cos, sin = cos_sin_fixed((-sim*log)>>wp, wp, pi2) if critical_line: u = one_2wp // isqrt_fast(p<>wp, wp) pre = (u*cos) >> wp pim = (u*sin) >> wp basic_powers[p] = [(pre, pim)] tre, tim = pre, pim for m in range(1,int(math.log(a+n,p)+0.01)+1): tre, tim = ((pre*tre-pim*tim)>>wp), ((pim*tre+pre*tim)>>wp) basic_powers[p].append((tre,tim)) xre = MPZ_ZERO xim = MPZ_ZERO if a == 1: xre += one aa = max(a,2) for k in xrange(aa, a+n+1): p = sieve[k] if p in basic_powers: m = mult[k] tre, tim = basic_powers[p][m-1] while 1: k //= p**m if k == 1: break p = sieve[k] m = mult[k] pre, pim = basic_powers[p][m-1] tre, tim = ((pre*tre-pim*tim)>>wp), ((pim*tre+pre*tim)>>wp) else: log = log_int_fixed(k, wp, ln2) cos, sin = cos_sin_fixed((-sim*log)>>wp, wp, pi2) if critical_line: u = one_2wp // isqrt_fast(k<>wp, wp) tre = (u*cos) >> wp tim = (u*sin) >> wp xre += tre xim += tim return xre, xim # Set to something large to disable ZETASUM_SIEVE_CUTOFF = 10 def mpc_zetasum(s, a, n, derivatives, reflect, prec): """ Fast version of mp._zetasum, assuming s = complex, a = integer. """ wp = prec + 10 derivatives = list(derivatives) have_derivatives = derivatives != [0] have_one_derivative = len(derivatives) == 1 # parse s sre, sim = s critical_line = (sre == fhalf) sre = to_fixed(sre, wp) sim = to_fixed(sim, wp) if a > 0 and n > ZETASUM_SIEVE_CUTOFF and not have_derivatives \ and not reflect and (n < 4e7 or sys.maxsize > 2**32): re, im = zetasum_sieved(critical_line, sre, sim, a, n, wp) xs = [(from_man_exp(re, -wp, prec, 'n'), from_man_exp(im, -wp, prec, 'n'))] return xs, [] maxd = max(derivatives) if not have_one_derivative: derivatives = range(maxd+1) # x_d = 0, y_d = 0 xre = [MPZ_ZERO for d in derivatives] xim = [MPZ_ZERO for d in derivatives] if reflect: yre = [MPZ_ZERO for d in derivatives] yim = [MPZ_ZERO for d in derivatives] else: yre = yim = [] one = MPZ_ONE << wp one_2wp = MPZ_ONE << (2*wp) ln2 = ln2_fixed(wp) pi2 = pi_fixed(wp-1) wp2 = wp+wp for w in xrange(a, a+n+1): log = log_int_fixed(w, wp, ln2) cos, sin = cos_sin_fixed((-sim*log)>>wp, wp, pi2) if critical_line: u = one_2wp // isqrt_fast(w<>wp, wp) xterm_re = (u * cos) >> wp xterm_im = (u * sin) >> wp if reflect: reciprocal = (one_2wp // (u*w)) yterm_re = (reciprocal * cos) >> wp yterm_im = (reciprocal * sin) >> wp if have_derivatives: if have_one_derivative: log = pow_fixed(log, maxd, wp) xre[0] += (xterm_re * log) >> wp xim[0] += (xterm_im * log) >> wp if reflect: yre[0] += (yterm_re * log) >> wp yim[0] += (yterm_im * log) >> wp else: t = MPZ_ONE << wp for d in derivatives: xre[d] += (xterm_re * t) >> wp xim[d] += (xterm_im * t) >> wp if reflect: yre[d] += (yterm_re * t) >> wp yim[d] += (yterm_im * t) >> wp t = (t * log) >> wp else: xre[0] += xterm_re xim[0] += xterm_im if reflect: yre[0] += yterm_re yim[0] += yterm_im if have_derivatives: if have_one_derivative: if maxd % 2: xre[0] = -xre[0] xim[0] = -xim[0] if reflect: yre[0] = -yre[0] yim[0] = -yim[0] else: xre = [(-1)**d * xre[d] for d in derivatives] xim = [(-1)**d * xim[d] for d in derivatives] if reflect: yre = [(-1)**d * yre[d] for d in derivatives] yim = [(-1)**d * yim[d] for d in derivatives] xs = [(from_man_exp(xa, -wp, prec, 'n'), from_man_exp(xb, -wp, prec, 'n')) for (xa, xb) in zip(xre, xim)] ys = [(from_man_exp(ya, -wp, prec, 'n'), from_man_exp(yb, -wp, prec, 'n')) for (ya, yb) in zip(yre, yim)] return xs, ys #-----------------------------------------------------------------------# # # # The gamma function (NEW IMPLEMENTATION) # # # #-----------------------------------------------------------------------# # Higher means faster, but more precomputation time MAX_GAMMA_TAYLOR_PREC = 5000 # Need to derive higher bounds for Taylor series to go higher assert MAX_GAMMA_TAYLOR_PREC < 15000 # Use Stirling's series if abs(x) > beta*prec # Important: must be large enough for convergence! GAMMA_STIRLING_BETA = 0.2 SMALL_FACTORIAL_CACHE_SIZE = 150 gamma_taylor_cache = {} gamma_stirling_cache = {} small_factorial_cache = [from_int(ifac(n)) for \ n in range(SMALL_FACTORIAL_CACHE_SIZE+1)] def zeta_array(N, prec): """ zeta(n) = A * pi**n / n! + B where A is a rational number (A = Bernoulli number for n even) and B is an infinite sum over powers of exp(2*pi). (B = 0 for n even). TODO: this is currently only used for gamma, but could be very useful elsewhere. """ extra = 30 wp = prec+extra zeta_values = [MPZ_ZERO] * (N+2) pi = pi_fixed(wp) # STEP 1: one = MPZ_ONE << wp zeta_values[0] = -one//2 f_2pi = mpf_shift(mpf_pi(wp),1) exp_2pi_k = exp_2pi = mpf_exp(f_2pi, wp) # Compute exponential series # Store values of 1/(exp(2*pi*k)-1), # exp(2*pi*k)/(exp(2*pi*k)-1)**2, 1/(exp(2*pi*k)-1)**2 # pi*k*exp(2*pi*k)/(exp(2*pi*k)-1)**2 exps3 = [] k = 1 while 1: tp = wp - 9*k if tp < 1: break # 1/(exp(2*pi*k-1) q1 = mpf_div(fone, mpf_sub(exp_2pi_k, fone, tp), tp) # pi*k*exp(2*pi*k)/(exp(2*pi*k)-1)**2 q2 = mpf_mul(exp_2pi_k, mpf_mul(q1,q1,tp), tp) q1 = to_fixed(q1, wp) q2 = to_fixed(q2, wp) q2 = (k * q2 * pi) >> wp exps3.append((q1, q2)) # Multiply for next round exp_2pi_k = mpf_mul(exp_2pi_k, exp_2pi, wp) k += 1 # Exponential sum for n in xrange(3, N+1, 2): s = MPZ_ZERO k = 1 for e1, e2 in exps3: if n%4 == 3: t = e1 // k**n else: U = (n-1)//4 t = (e1 + e2//U) // k**n if not t: break s += t k += 1 zeta_values[n] = -2*s # Even zeta values B = [mpf_abs(mpf_bernoulli(k,wp)) for k in xrange(N+2)] pi_pow = fpi = mpf_pow_int(mpf_shift(mpf_pi(wp), 1), 2, wp) pi_pow = mpf_div(pi_pow, from_int(4), wp) for n in xrange(2,N+2,2): z = mpf_mul(B[n], pi_pow, wp) zeta_values[n] = to_fixed(z, wp) pi_pow = mpf_mul(pi_pow, fpi, wp) pi_pow = mpf_div(pi_pow, from_int((n+1)*(n+2)), wp) # Zeta sum reciprocal_pi = (one << wp) // pi for n in xrange(3, N+1, 4): U = (n-3)//4 s = zeta_values[4*U+4]*(4*U+7)//4 for k in xrange(1, U+1): s -= (zeta_values[4*k] * zeta_values[4*U+4-4*k]) >> wp zeta_values[n] += (2*s*reciprocal_pi) >> wp for n in xrange(5, N+1, 4): U = (n-1)//4 s = zeta_values[4*U+2]*(2*U+1) for k in xrange(1, 2*U+1): s += ((-1)**k*2*k* zeta_values[2*k] * zeta_values[4*U+2-2*k])>>wp zeta_values[n] += ((s*reciprocal_pi)>>wp)//(2*U) return [x>>extra for x in zeta_values] def gamma_taylor_coefficients(inprec): """ Gives the Taylor coefficients of 1/gamma(1+x) as a list of fixed-point numbers. Enough coefficients are returned to ensure that the series converges to the given precision when x is in [0.5, 1.5]. """ # Reuse nearby cache values (small case) if inprec < 400: prec = inprec + (10-(inprec%10)) elif inprec < 1000: prec = inprec + (30-(inprec%30)) else: prec = inprec if prec in gamma_taylor_cache: return gamma_taylor_cache[prec], prec # Experimentally determined bounds if prec < 1000: N = int(prec**0.76 + 2) else: # Valid to at least 15000 bits N = int(prec**0.787 + 2) # Reuse higher precision values for cprec in gamma_taylor_cache: if cprec > prec: coeffs = [x>>(cprec-prec) for x in gamma_taylor_cache[cprec][-N:]] if inprec < 1000: gamma_taylor_cache[prec] = coeffs return coeffs, prec # Cache at a higher precision (large case) if prec > 1000: prec = int(prec * 1.2) wp = prec + 20 A = [0] * N A[0] = MPZ_ZERO A[1] = MPZ_ONE << wp A[2] = euler_fixed(wp) # SLOW, reference implementation #zeta_values = [0,0]+[to_fixed(mpf_zeta_int(k,wp),wp) for k in xrange(2,N)] zeta_values = zeta_array(N, wp) for k in xrange(3, N): a = (-A[2]*A[k-1])>>wp for j in xrange(2,k): a += ((-1)**j * zeta_values[j] * A[k-j]) >> wp a //= (1-k) A[k] = a A = [a>>20 for a in A] A = A[::-1] A = A[:-1] gamma_taylor_cache[prec] = A #return A, prec return gamma_taylor_coefficients(inprec) def gamma_fixed_taylor(xmpf, x, wp, prec, rnd, type): # Determine nearest multiple of N/2 #n = int(x >> (wp-1)) #steps = (n-1)>>1 nearest_int = ((x >> (wp-1)) + MPZ_ONE) >> 1 one = MPZ_ONE << wp coeffs, cwp = gamma_taylor_coefficients(wp) if nearest_int > 0: r = one for i in xrange(nearest_int-1): x -= one r = (r*x) >> wp x -= one p = MPZ_ZERO for c in coeffs: p = c + ((x*p)>>wp) p >>= (cwp-wp) if type == 0: return from_man_exp((r<> wp x += one p = MPZ_ZERO for c in coeffs: p = c + ((x*p)>>wp) p >>= (cwp-wp) if wp - bitcount(abs(x)) > 10: # pass very close to 0, so do floating-point multiply g = mpf_add(xmpf, from_int(-nearest_int)) # exact r = from_man_exp(p*r,-wp-wp) r = mpf_mul(r, g, wp) if type == 0: return mpf_div(fone, r, prec, rnd) if type == 2: return mpf_pos(r, prec, rnd) if type == 3: return mpf_log(mpf_abs(mpf_div(fone, r, wp)), prec, rnd) else: r = from_man_exp(x*p*r,-3*wp) if type == 0: return mpf_div(fone, r, prec, rnd) if type == 2: return mpf_pos(r, prec, rnd) if type == 3: return mpf_neg(mpf_log(mpf_abs(r), prec, rnd)) def stirling_coefficient(n): if n in gamma_stirling_cache: return gamma_stirling_cache[n] p, q = bernfrac(n) q *= MPZ(n*(n-1)) gamma_stirling_cache[n] = p, q, bitcount(abs(p)), bitcount(q) return gamma_stirling_cache[n] def real_stirling_series(x, prec): """ Sums the rational part of Stirling's expansion, log(sqrt(2*pi)) - z + 1/(12*z) - 1/(360*z^3) + ... """ t = (MPZ_ONE<<(prec+prec)) // x # t = 1/x u = (t*t)>>prec # u = 1/x**2 s = ln_sqrt2pi_fixed(prec) - x # Add initial terms of Stirling's series s += t//12; t = (t*u)>>prec s -= t//360; t = (t*u)>>prec s += t//1260; t = (t*u)>>prec s -= t//1680; t = (t*u)>>prec if not t: return s s += t//1188; t = (t*u)>>prec s -= 691*t//360360; t = (t*u)>>prec s += t//156; t = (t*u)>>prec if not t: return s s -= 3617*t//122400; t = (t*u)>>prec s += 43867*t//244188; t = (t*u)>>prec s -= 174611*t//125400; t = (t*u)>>prec if not t: return s k = 22 # From here on, the coefficients are growing, so we # have to keep t at a roughly constant size usize = bitcount(abs(u)) tsize = bitcount(abs(t)) texp = 0 while 1: p, q, pb, qb = stirling_coefficient(k) term_mag = tsize + pb + texp shift = -texp m = pb - term_mag if m > 0 and shift < m: p >>= m shift -= m m = tsize - term_mag if m > 0 and shift < m: w = t >> m shift -= m else: w = t term = (t*p//q) >> shift if not term: break s += term t = (t*u) >> usize texp -= (prec - usize) k += 2 return s def complex_stirling_series(x, y, prec): # t = 1/z _m = (x*x + y*y) >> prec tre = (x << prec) // _m tim = (-y << prec) // _m # u = 1/z**2 ure = (tre*tre - tim*tim) >> prec uim = tim*tre >> (prec-1) # s = log(sqrt(2*pi)) - z sre = ln_sqrt2pi_fixed(prec) - x sim = -y # Add initial terms of Stirling's series sre += tre//12; sim += tim//12; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre -= tre//360; sim -= tim//360; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre += tre//1260; sim += tim//1260; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre -= tre//1680; sim -= tim//1680; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) if abs(tre) + abs(tim) < 5: return sre, sim sre += tre//1188; sim += tim//1188; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre -= 691*tre//360360; sim -= 691*tim//360360; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre += tre//156; sim += tim//156; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) if abs(tre) + abs(tim) < 5: return sre, sim sre -= 3617*tre//122400; sim -= 3617*tim//122400; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre += 43867*tre//244188; sim += 43867*tim//244188; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) sre -= 174611*tre//125400; sim -= 174611*tim//125400; tre, tim = ((tre*ure-tim*uim)>>prec), ((tre*uim+tim*ure)>>prec) if abs(tre) + abs(tim) < 5: return sre, sim k = 22 # From here on, the coefficients are growing, so we # have to keep t at a roughly constant size usize = bitcount(max(abs(ure), abs(uim))) tsize = bitcount(max(abs(tre), abs(tim))) texp = 0 while 1: p, q, pb, qb = stirling_coefficient(k) term_mag = tsize + pb + texp shift = -texp m = pb - term_mag if m > 0 and shift < m: p >>= m shift -= m m = tsize - term_mag if m > 0 and shift < m: wre = tre >> m wim = tim >> m shift -= m else: wre = tre wim = tim termre = (tre*p//q) >> shift termim = (tim*p//q) >> shift if abs(termre) + abs(termim) < 5: break sre += termre sim += termim tre, tim = ((tre*ure - tim*uim)>>usize), \ ((tre*uim + tim*ure)>>usize) texp -= (prec - usize) k += 2 return sre, sim def mpf_gamma(x, prec, rnd='d', type=0): """ This function implements multipurpose evaluation of the gamma function, G(x), as well as the following versions of the same: type = 0 -- G(x) [standard gamma function] type = 1 -- G(x+1) = x*G(x+1) = x! [factorial] type = 2 -- 1/G(x) [reciprocal gamma function] type = 3 -- log(|G(x)|) [log-gamma function, real part] """ # Specal values sign, man, exp, bc = x if not man: if x == fzero: if type == 1: return fone if type == 2: return fzero raise ValueError("gamma function pole") if x == finf: if type == 2: return fzero return finf return fnan # First of all, for log gamma, numbers can be well beyond the fixed-point # range, so we must take care of huge numbers before e.g. trying # to convert x to the nearest integer if type == 3: wp = prec+20 if exp+bc > wp and not sign: return mpf_sub(mpf_mul(x, mpf_log(x, wp), wp), x, prec, rnd) # We strongly want to special-case small integers is_integer = exp >= 0 if is_integer: # Poles if sign: if type == 2: return fzero raise ValueError("gamma function pole") # n = x n = man << exp if n < SMALL_FACTORIAL_CACHE_SIZE: if type == 0: return mpf_pos(small_factorial_cache[n-1], prec, rnd) if type == 1: return mpf_pos(small_factorial_cache[n], prec, rnd) if type == 2: return mpf_div(fone, small_factorial_cache[n-1], prec, rnd) if type == 3: return mpf_log(small_factorial_cache[n-1], prec, rnd) else: # floor(abs(x)) n = int(man >> (-exp)) # Estimate size and precision # Estimate log(gamma(|x|),2) as x*log(x,2) mag = exp + bc gamma_size = n*mag if type == 3: wp = prec + 20 else: wp = prec + bitcount(gamma_size) + 20 # Very close to 0, pole if mag < -wp: if type == 0: return mpf_sub(mpf_div(fone,x, wp),mpf_shift(fone,-wp),prec,rnd) if type == 1: return mpf_sub(fone, x, prec, rnd) if type == 2: return mpf_add(x, mpf_shift(fone,mag-wp), prec, rnd) if type == 3: return mpf_neg(mpf_log(mpf_abs(x), prec, rnd)) # From now on, we assume having a gamma function if type == 1: return mpf_gamma(mpf_add(x, fone), prec, rnd, 0) # Special case integers (those not small enough to be caught above, # but still small enough for an exact factorial to be faster # than an approximate algorithm), and half-integers if exp >= -1: if is_integer: if gamma_size < 10*wp: if type == 0: return from_int(ifac(n-1), prec, rnd) if type == 2: return from_rational(MPZ_ONE, ifac(n-1), prec, rnd) if type == 3: return mpf_log(from_int(ifac(n-1)), prec, rnd) # half-integer if n < 100 or gamma_size < 10*wp: if sign: w = sqrtpi_fixed(wp) if n % 2: f = ifac2(2*n+1) else: f = -ifac2(2*n+1) if type == 0: return mpf_shift(from_rational(w, f, prec, rnd), -wp+n+1) if type == 2: return mpf_shift(from_rational(f, w, prec, rnd), wp-n-1) if type == 3: return mpf_log(mpf_shift(from_rational(w, abs(f), prec, rnd), -wp+n+1), prec, rnd) elif n == 0: if type == 0: return mpf_sqrtpi(prec, rnd) if type == 2: return mpf_div(fone, mpf_sqrtpi(wp), prec, rnd) if type == 3: return mpf_log(mpf_sqrtpi(wp), prec, rnd) else: w = sqrtpi_fixed(wp) w = from_man_exp(w * ifac2(2*n-1), -wp-n) if type == 0: return mpf_pos(w, prec, rnd) if type == 2: return mpf_div(fone, w, prec, rnd) if type == 3: return mpf_log(mpf_abs(w), prec, rnd) # Convert to fixed point offset = exp + wp if offset >= 0: absxman = man << offset else: absxman = man >> (-offset) # For log gamma, provide accurate evaluation for x = 1+eps and 2+eps if type == 3 and not sign: one = MPZ_ONE << wp one_dist = abs(absxman-one) two_dist = abs(absxman-2*one) cancellation = (wp - bitcount(min(one_dist, two_dist))) if cancellation > 10: xsub1 = mpf_sub(fone, x) xsub2 = mpf_sub(ftwo, x) xsub1mag = xsub1[2]+xsub1[3] xsub2mag = xsub2[2]+xsub2[3] if xsub1mag < -wp: return mpf_mul(mpf_euler(wp), mpf_sub(fone, x), prec, rnd) if xsub2mag < -wp: return mpf_mul(mpf_sub(fone, mpf_euler(wp)), mpf_sub(x, ftwo), prec, rnd) # Proceed but increase precision wp += max(-xsub1mag, -xsub2mag) offset = exp + wp if offset >= 0: absxman = man << offset else: absxman = man >> (-offset) # Use Taylor series if appropriate n_for_stirling = int(GAMMA_STIRLING_BETA*wp) if n < max(100, n_for_stirling) and wp < MAX_GAMMA_TAYLOR_PREC: if sign: absxman = -absxman return gamma_fixed_taylor(x, absxman, wp, prec, rnd, type) # Use Stirling's series # First ensure that |x| is large enough for rapid convergence xorig = x # Argument reduction r = 0 if n < n_for_stirling: r = one = MPZ_ONE << wp d = n_for_stirling - n for k in xrange(d): r = (r * absxman) >> wp absxman += one x = xabs = from_man_exp(absxman, -wp) if sign: x = mpf_neg(x) else: xabs = mpf_abs(x) # Asymptotic series y = real_stirling_series(absxman, wp) u = to_fixed(mpf_log(xabs, wp), wp) u = ((absxman - (MPZ_ONE<<(wp-1))) * u) >> wp y += u w = from_man_exp(y, -wp) # Compute final value if sign: # Reflection formula A = mpf_mul(mpf_sin_pi(xorig, wp), xorig, wp) B = mpf_neg(mpf_pi(wp)) if type == 0 or type == 2: A = mpf_mul(A, mpf_exp(w, wp)) if r: B = mpf_mul(B, from_man_exp(r, -wp), wp) if type == 0: return mpf_div(B, A, prec, rnd) if type == 2: return mpf_div(A, B, prec, rnd) if type == 3: if r: B = mpf_mul(B, from_man_exp(r, -wp), wp) A = mpf_add(mpf_log(mpf_abs(A), wp), w, wp) return mpf_sub(mpf_log(mpf_abs(B), wp), A, prec, rnd) else: if type == 0: if r: return mpf_div(mpf_exp(w, wp), from_man_exp(r, -wp), prec, rnd) return mpf_exp(w, prec, rnd) if type == 2: if r: return mpf_div(from_man_exp(r, -wp), mpf_exp(w, wp), prec, rnd) return mpf_exp(mpf_neg(w), prec, rnd) if type == 3: if r: return mpf_sub(w, mpf_log(from_man_exp(r,-wp), wp), prec, rnd) return mpf_pos(w, prec, rnd) def mpc_gamma(z, prec, rnd='d', type=0): a, b = z asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b if b == fzero: # Imaginary part on negative half-axis for log-gamma function if type == 3 and asign: re = mpf_gamma(a, prec, rnd, 3) n = (-aman) >> (-aexp) im = mpf_mul_int(mpf_pi(prec+10), n, prec, rnd) return re, im return mpf_gamma(a, prec, rnd, type), fzero # Some kind of complex inf/nan if (not aman and aexp) or (not bman and bexp): return (fnan, fnan) # Initial working precision wp = prec + 20 amag = aexp+abc bmag = bexp+bbc if aman: mag = max(amag, bmag) else: mag = bmag # Close to 0 if mag < -8: if mag < -wp: # 1/gamma(z) = z + euler*z^2 + O(z^3) v = mpc_add(z, mpc_mul_mpf(mpc_mul(z,z,wp),mpf_euler(wp),wp), wp) if type == 0: return mpc_reciprocal(v, prec, rnd) if type == 1: return mpc_div(z, v, prec, rnd) if type == 2: return mpc_pos(v, prec, rnd) if type == 3: return mpc_log(mpc_reciprocal(v, prec), prec, rnd) elif type != 1: wp += (-mag) # Handle huge log-gamma values; must do this before converting to # a fixed-point value. TODO: determine a precise cutoff of validity # depending on amag and bmag if type == 3 and mag > wp and ((not asign) or (bmag >= amag)): return mpc_sub(mpc_mul(z, mpc_log(z, wp), wp), z, prec, rnd) # From now on, we assume having a gamma function if type == 1: return mpc_gamma((mpf_add(a, fone), b), prec, rnd, 0) an = abs(to_int(a)) bn = abs(to_int(b)) absn = max(an, bn) gamma_size = absn*mag if type == 3: pass else: wp += bitcount(gamma_size) # Reflect to the right half-plane. Note that Stirling's expansion # is valid in the left half-plane too, as long as we're not too close # to the real axis, but in order to use this argument reduction # in the negative direction must be implemented. #need_reflection = asign and ((bmag < 0) or (amag-bmag > 4)) need_reflection = asign zorig = z if need_reflection: z = mpc_neg(z) asign, aman, aexp, abc = a = z[0] bsign, bman, bexp, bbc = b = z[1] # Imaginary part very small compared to real one? yfinal = 0 balance_prec = 0 if bmag < -10: # Check z ~= 1 and z ~= 2 for loggamma if type == 3: zsub1 = mpc_sub_mpf(z, fone) if zsub1[0] == fzero: cancel1 = -bmag else: cancel1 = -max(zsub1[0][2]+zsub1[0][3], bmag) if cancel1 > wp: pi = mpf_pi(wp) x = mpc_mul_mpf(zsub1, pi, wp) x = mpc_mul(x, x, wp) x = mpc_div_mpf(x, from_int(12), wp) y = mpc_mul_mpf(zsub1, mpf_neg(mpf_euler(wp)), wp) yfinal = mpc_add(x, y, wp) if not need_reflection: return mpc_pos(yfinal, prec, rnd) elif cancel1 > 0: wp += cancel1 zsub2 = mpc_sub_mpf(z, ftwo) if zsub2[0] == fzero: cancel2 = -bmag else: cancel2 = -max(zsub2[0][2]+zsub2[0][3], bmag) if cancel2 > wp: pi = mpf_pi(wp) t = mpf_sub(mpf_mul(pi, pi), from_int(6)) x = mpc_mul_mpf(mpc_mul(zsub2, zsub2, wp), t, wp) x = mpc_div_mpf(x, from_int(12), wp) y = mpc_mul_mpf(zsub2, mpf_sub(fone, mpf_euler(wp)), wp) yfinal = mpc_add(x, y, wp) if not need_reflection: return mpc_pos(yfinal, prec, rnd) elif cancel2 > 0: wp += cancel2 if bmag < -wp: # Compute directly from the real gamma function. pp = 2*(wp+10) aabs = mpf_abs(a) eps = mpf_shift(fone, amag-wp) x1 = mpf_gamma(aabs, pp, type=type) x2 = mpf_gamma(mpf_add(aabs, eps), pp, type=type) xprime = mpf_div(mpf_sub(x2, x1, pp), eps, pp) y = mpf_mul(b, xprime, prec, rnd) yfinal = (x1, y) # Note: we still need to use the reflection formula for # near-poles, and the correct branch of the log-gamma function if not need_reflection: return mpc_pos(yfinal, prec, rnd) else: balance_prec += (-bmag) wp += balance_prec n_for_stirling = int(GAMMA_STIRLING_BETA*wp) need_reduction = absn < n_for_stirling afix = to_fixed(a, wp) bfix = to_fixed(b, wp) r = 0 if not yfinal: zprered = z # Argument reduction if absn < n_for_stirling: absn = complex(an, bn) d = int((1 + n_for_stirling**2 - bn**2)**0.5 - an) rre = one = MPZ_ONE << wp rim = MPZ_ZERO for k in xrange(d): rre, rim = ((afix*rre-bfix*rim)>>wp), ((afix*rim + bfix*rre)>>wp) afix += one r = from_man_exp(rre, -wp), from_man_exp(rim, -wp) a = from_man_exp(afix, -wp) z = a, b yre, yim = complex_stirling_series(afix, bfix, wp) # (z-1/2)*log(z) + S lre, lim = mpc_log(z, wp) lre = to_fixed(lre, wp) lim = to_fixed(lim, wp) yre = ((lre*afix - lim*bfix)>>wp) - (lre>>1) + yre yim = ((lre*bfix + lim*afix)>>wp) - (lim>>1) + yim y = from_man_exp(yre, -wp), from_man_exp(yim, -wp) if r and type == 3: # If re(z) > 0 and abs(z) <= 4, the branches of loggamma(z) # and log(gamma(z)) coincide. Otherwise, use the zeroth order # Stirling expansion to compute the correct imaginary part. y = mpc_sub(y, mpc_log(r, wp), wp) zfa = to_float(zprered[0]) zfb = to_float(zprered[1]) zfabs = math.hypot(zfa,zfb) #if not (zfa > 0.0 and zfabs <= 4): yfb = to_float(y[1]) u = math.atan2(zfb, zfa) if zfabs <= 0.5: gi = 0.577216*zfb - u else: gi = -zfb - 0.5*u + zfa*u + zfb*math.log(zfabs) n = int(math.floor((gi-yfb)/(2*math.pi)+0.5)) y = (y[0], mpf_add(y[1], mpf_mul_int(mpf_pi(wp), 2*n, wp), wp)) if need_reflection: if type == 0 or type == 2: A = mpc_mul(mpc_sin_pi(zorig, wp), zorig, wp) B = (mpf_neg(mpf_pi(wp)), fzero) if yfinal: if type == 2: A = mpc_div(A, yfinal, wp) else: A = mpc_mul(A, yfinal, wp) else: A = mpc_mul(A, mpc_exp(y, wp), wp) if r: B = mpc_mul(B, r, wp) if type == 0: return mpc_div(B, A, prec, rnd) if type == 2: return mpc_div(A, B, prec, rnd) # Reflection formula for the log-gamma function with correct branch # http://functions.wolfram.com/GammaBetaErf/LogGamma/16/01/01/0006/ # LogGamma[z] == -LogGamma[-z] - Log[-z] + # Sign[Im[z]] Floor[Re[z]] Pi I + Log[Pi] - # Log[Sin[Pi (z - Floor[Re[z]])]] - # Pi I (1 - Abs[Sign[Im[z]]]) Abs[Floor[Re[z]]] if type == 3: if yfinal: s1 = mpc_neg(yfinal) else: s1 = mpc_neg(y) # s -= log(-z) s1 = mpc_sub(s1, mpc_log(mpc_neg(zorig), wp), wp) # floor(re(z)) rezfloor = mpf_floor(zorig[0]) imzsign = mpf_sign(zorig[1]) pi = mpf_pi(wp) t = mpf_mul(pi, rezfloor) t = mpf_mul_int(t, imzsign, wp) s1 = (s1[0], mpf_add(s1[1], t, wp)) s1 = mpc_add_mpf(s1, mpf_log(pi, wp), wp) t = mpc_sin_pi(mpc_sub_mpf(zorig, rezfloor), wp) t = mpc_log(t, wp) s1 = mpc_sub(s1, t, wp) # Note: may actually be unused, because we fall back # to the mpf_ function for real arguments if not imzsign: t = mpf_mul(pi, mpf_floor(rezfloor), wp) s1 = (s1[0], mpf_sub(s1[1], t, wp)) return mpc_pos(s1, prec, rnd) else: if type == 0: if r: return mpc_div(mpc_exp(y, wp), r, prec, rnd) return mpc_exp(y, prec, rnd) if type == 2: if r: return mpc_div(r, mpc_exp(y, wp), prec, rnd) return mpc_exp(mpc_neg(y), prec, rnd) if type == 3: return mpc_pos(y, prec, rnd) def mpf_factorial(x, prec, rnd='d'): return mpf_gamma(x, prec, rnd, 1) def mpc_factorial(x, prec, rnd='d'): return mpc_gamma(x, prec, rnd, 1) def mpf_rgamma(x, prec, rnd='d'): return mpf_gamma(x, prec, rnd, 2) def mpc_rgamma(x, prec, rnd='d'): return mpc_gamma(x, prec, rnd, 2) def mpf_loggamma(x, prec, rnd='d'): sign, man, exp, bc = x if sign: raise ComplexResult return mpf_gamma(x, prec, rnd, 3) def mpc_loggamma(z, prec, rnd='d'): a, b = z asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b if b == fzero and asign: re = mpf_gamma(a, prec, rnd, 3) n = (-aman) >> (-aexp) im = mpf_mul_int(mpf_pi(prec+10), n, prec, rnd) return re, im return mpc_gamma(z, prec, rnd, 3) def mpf_gamma_int(n, prec, rnd=round_fast): if n < SMALL_FACTORIAL_CACHE_SIZE: return mpf_pos(small_factorial_cache[n-1], prec, rnd) return mpf_gamma(from_int(n), prec, rnd) mpmath-1.0.0/mpmath/libmp/libelefun.py000066400000000000000000001255241316273626600177330ustar00rootroot00000000000000""" This module implements computation of elementary transcendental functions (powers, logarithms, trigonometric and hyperbolic functions, inverse trigonometric and hyperbolic) for real floating-point numbers. For complex and interval implementations of the same functions, see libmpc and libmpi. """ import math from bisect import bisect from .backend import xrange from .backend import MPZ, MPZ_ZERO, MPZ_ONE, MPZ_TWO, MPZ_FIVE, BACKEND from .libmpf import ( round_floor, round_ceiling, round_down, round_up, round_nearest, round_fast, ComplexResult, bitcount, bctable, lshift, rshift, giant_steps, sqrt_fixed, from_int, to_int, from_man_exp, to_fixed, to_float, from_float, from_rational, normalize, fzero, fone, fnone, fhalf, finf, fninf, fnan, mpf_cmp, mpf_sign, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_div, mpf_shift, mpf_rdiv_int, mpf_pow_int, mpf_sqrt, reciprocal_rnd, negative_rnd, mpf_perturb, isqrt_fast ) from .libintmath import ifib #------------------------------------------------------------------------------- # Tuning parameters #------------------------------------------------------------------------------- # Cutoff for computing exp from cosh+sinh. This reduces the # number of terms by half, but also requires a square root which # is expensive with the pure-Python square root code. if BACKEND == 'python': EXP_COSH_CUTOFF = 600 else: EXP_COSH_CUTOFF = 400 # Cutoff for using more than 2 series EXP_SERIES_U_CUTOFF = 1500 # Also basically determined by sqrt if BACKEND == 'python': COS_SIN_CACHE_PREC = 400 else: COS_SIN_CACHE_PREC = 200 COS_SIN_CACHE_STEP = 8 cos_sin_cache = {} # Number of integer logarithms to cache (for zeta sums) MAX_LOG_INT_CACHE = 2000 log_int_cache = {} LOG_TAYLOR_PREC = 2500 # Use Taylor series with caching up to this prec LOG_TAYLOR_SHIFT = 9 # Cache log values in steps of size 2^-N log_taylor_cache = {} # prec/size ratio of x for fastest convergence in AGM formula LOG_AGM_MAG_PREC_RATIO = 20 ATAN_TAYLOR_PREC = 3000 # Same as for log ATAN_TAYLOR_SHIFT = 7 # steps of size 2^-N atan_taylor_cache = {} # ~= next power of two + 20 cache_prec_steps = [22,22] for k in xrange(1, bitcount(LOG_TAYLOR_PREC)+1): cache_prec_steps += [min(2**k,LOG_TAYLOR_PREC)+20] * 2**(k-1) #----------------------------------------------------------------------------# # # # Elementary mathematical constants # # # #----------------------------------------------------------------------------# def constant_memo(f): """ Decorator for caching computed values of mathematical constants. This decorator should be applied to a function taking a single argument prec as input and returning a fixed-point value with the given precision. """ f.memo_prec = -1 f.memo_val = None def g(prec, **kwargs): memo_prec = f.memo_prec if prec <= memo_prec: return f.memo_val >> (memo_prec-prec) newprec = int(prec*1.05+10) f.memo_val = f(newprec, **kwargs) f.memo_prec = newprec return f.memo_val >> (newprec-prec) g.__name__ = f.__name__ g.__doc__ = f.__doc__ return g def def_mpf_constant(fixed): """ Create a function that computes the mpf value for a mathematical constant, given a function that computes the fixed-point value. Assumptions: the constant is positive and has magnitude ~= 1; the fixed-point function rounds to floor. """ def f(prec, rnd=round_fast): wp = prec + 20 v = fixed(wp) if rnd in (round_up, round_ceiling): v += 1 return normalize(0, v, -wp, bitcount(v), prec, rnd) f.__doc__ = fixed.__doc__ return f def bsp_acot(q, a, b, hyperbolic): if b - a == 1: a1 = MPZ(2*a + 3) if hyperbolic or a&1: return MPZ_ONE, a1 * q**2, a1 else: return -MPZ_ONE, a1 * q**2, a1 m = (a+b)//2 p1, q1, r1 = bsp_acot(q, a, m, hyperbolic) p2, q2, r2 = bsp_acot(q, m, b, hyperbolic) return q2*p1 + r1*p2, q1*q2, r1*r2 # the acoth(x) series converges like the geometric series for x^2 # N = ceil(p*log(2)/(2*log(x))) def acot_fixed(a, prec, hyperbolic): """ Compute acot(a) or acoth(a) for an integer a with binary splitting; see http://numbers.computation.free.fr/Constants/Algorithms/splitting.html """ N = int(0.35 * prec/math.log(a) + 20) p, q, r = bsp_acot(a, 0,N, hyperbolic) return ((p+q)<> extraprec) # Logarithms of integers are needed for various computations involving # logarithms, powers, radix conversion, etc @constant_memo def ln2_fixed(prec): """ Computes ln(2). This is done with a hyperbolic Machin-type formula, with binary splitting at high precision. """ return machin([(18, 26), (-2, 4801), (8, 8749)], prec, True) @constant_memo def ln10_fixed(prec): """ Computes ln(10). This is done with a hyperbolic Machin-type formula. """ return machin([(46, 31), (34, 49), (20, 161)], prec, True) """ For computation of pi, we use the Chudnovsky series: oo ___ k 1 \ (-1) (6 k)! (A + B k) ----- = ) ----------------------- 12 pi /___ 3 3k+3/2 (3 k)! (k!) C k = 0 where A, B, and C are certain integer constants. This series adds roughly 14 digits per term. Note that C^(3/2) can be extracted so that the series contains only rational terms. This makes binary splitting very efficient. The recurrence formulas for the binary splitting were taken from ftp://ftp.gmplib.org/pub/src/gmp-chudnovsky.c Previously, Machin's formula was used at low precision and the AGM iteration was used at high precision. However, the Chudnovsky series is essentially as fast as the Machin formula at low precision and in practice about 3x faster than the AGM at high precision (despite theoretically having a worse asymptotic complexity), so there is no reason not to use it in all cases. """ # Constants in Chudnovsky's series CHUD_A = MPZ(13591409) CHUD_B = MPZ(545140134) CHUD_C = MPZ(640320) CHUD_D = MPZ(12) def bs_chudnovsky(a, b, level, verbose): """ Computes the sum from a to b of the series in the Chudnovsky formula. Returns g, p, q where p/q is the sum as an exact fraction and g is a temporary value used to save work for recursive calls. """ if b-a == 1: g = MPZ((6*b-5)*(2*b-1)*(6*b-1)) p = b**3 * CHUD_C**3 // 24 q = (-1)**b * g * (CHUD_A+CHUD_B*b) else: if verbose and level < 4: print(" binary splitting", a, b) mid = (a+b)//2 g1, p1, q1 = bs_chudnovsky(a, mid, level+1, verbose) g2, p2, q2 = bs_chudnovsky(mid, b, level+1, verbose) p = p1*p2 g = g1*g2 q = q1*p2 + q2*g1 return g, p, q @constant_memo def pi_fixed(prec, verbose=False, verbose_base=None): """ Compute floor(pi * 2**prec) as a big integer. This is done using Chudnovsky's series (see comments in libelefun.py for details). """ # The Chudnovsky series gives 14.18 digits per term N = int(prec/3.3219280948/14.181647462 + 2) if verbose: print("binary splitting with N =", N) g, p, q = bs_chudnovsky(0, N, 0, verbose) sqrtC = isqrt_fast(CHUD_C<<(2*prec)) v = p*CHUD_C*sqrtC//((q+CHUD_A*p)*CHUD_D) return v def degree_fixed(prec): return pi_fixed(prec)//180 def bspe(a, b): """ Sum series for exp(1)-1 between a, b, returning the result as an exact fraction (p, q). """ if b-a == 1: return MPZ_ONE, MPZ(b) m = (a+b)//2 p1, q1 = bspe(a, m) p2, q2 = bspe(m, b) return p1*q2+p2, q1*q2 @constant_memo def e_fixed(prec): """ Computes exp(1). This is done using the ordinary Taylor series for exp, with binary splitting. For a description of the algorithm, see: http://numbers.computation.free.fr/Constants/ Algorithms/splitting.html """ # Slight overestimate of N needed for 1/N! < 2**(-prec) # This could be tightened for large N. N = int(1.1*prec/math.log(prec) + 20) p, q = bspe(0,N) return ((p+q)<> 11 mpf_phi = def_mpf_constant(phi_fixed) mpf_pi = def_mpf_constant(pi_fixed) mpf_e = def_mpf_constant(e_fixed) mpf_degree = def_mpf_constant(degree_fixed) mpf_ln2 = def_mpf_constant(ln2_fixed) mpf_ln10 = def_mpf_constant(ln10_fixed) @constant_memo def ln_sqrt2pi_fixed(prec): wp = prec + 10 # ln(sqrt(2*pi)) = ln(2*pi)/2 return to_fixed(mpf_log(mpf_shift(mpf_pi(wp), 1), wp), prec-1) @constant_memo def sqrtpi_fixed(prec): return sqrt_fixed(pi_fixed(prec), prec) mpf_sqrtpi = def_mpf_constant(sqrtpi_fixed) mpf_ln_sqrt2pi = def_mpf_constant(ln_sqrt2pi_fixed) #----------------------------------------------------------------------------# # # # Powers # # # #----------------------------------------------------------------------------# def mpf_pow(s, t, prec, rnd=round_fast): """ Compute s**t. Raises ComplexResult if s is negative and t is fractional. """ ssign, sman, sexp, sbc = s tsign, tman, texp, tbc = t if ssign and texp < 0: raise ComplexResult("negative number raised to a fractional power") if texp >= 0: return mpf_pow_int(s, (-1)**tsign * (tman<> pbc)] if pbc > workprec: pm = pm >> (pbc-workprec) pe += pbc - workprec pbc = workprec n -= 1 if not n: break y = y*y exp = exp+exp bc = bc + bc - 2 bc = bc + bctable[int(y >> bc)] if bc > workprec: y = y >> (bc-workprec) exp += bc - workprec bc = workprec n = n // 2 return pm, pe # froot(s, n, prec, rnd) computes the real n-th root of a # positive mpf tuple s. # To compute the root we start from a 50-bit estimate for r # generated with ordinary floating-point arithmetic, and then refine # the value to full accuracy using the iteration # 1 / y \ # r = --- | (n-1) * r + ---------- | # n+1 n \ n r_n**(n-1) / # which is simply Newton's method applied to the equation r**n = y. # With giant_steps(start, prec+extra) = [p0,...,pm, prec+extra] # and y = man * 2**-shift one has # (man * 2**exp)**(1/n) = # y**(1/n) * 2**(start-prec/n) * 2**(p0-start) * ... * 2**(prec+extra-pm) * # 2**((exp+shift-(n-1)*prec)/n -extra)) # The last factor is accounted for in the last line of froot. def nthroot_fixed(y, n, prec, exp1): start = 50 try: y1 = rshift(y, prec - n*start) r = MPZ(int(y1**(1.0/n))) except OverflowError: y1 = from_int(y1, start) fn = from_int(n) fn = mpf_rdiv_int(1, fn, start) r = mpf_pow(y1, fn, start) r = to_int(r) extra = 10 extra1 = n prevp = start for p in giant_steps(start, prec+extra): pm, pe = int_pow_fixed(r, n-1, prevp) r2 = rshift(pm, (n-1)*prevp - p - pe - extra1) B = lshift(y, 2*p-prec+extra1)//r2 r = (B + (n-1) * lshift(r, p-prevp))//n prevp = p return r def mpf_nthroot(s, n, prec, rnd=round_fast): """nth-root of a positive number Use the Newton method when faster, otherwise use x**(1/n) """ sign, man, exp, bc = s if sign: raise ComplexResult("nth root of a negative number") if not man: if s == fnan: return fnan if s == fzero: if n > 0: return fzero if n == 0: return fone return finf # Infinity if not n: return fnan if n < 0: return fzero return finf flag_inverse = False if n < 2: if n == 0: return fone if n == 1: return mpf_pos(s, prec, rnd) if n == -1: return mpf_div(fone, s, prec, rnd) # n < 0 rnd = reciprocal_rnd[rnd] flag_inverse = True extra_inverse = 5 prec += extra_inverse n = -n if n > 20 and (n >= 20000 or prec < int(233 + 28.3 * n**0.62)): prec2 = prec + 10 fn = from_int(n) nth = mpf_rdiv_int(1, fn, prec2) r = mpf_pow(s, nth, prec2, rnd) s = normalize(r[0], r[1], r[2], r[3], prec, rnd) if flag_inverse: return mpf_div(fone, s, prec-extra_inverse, rnd) else: return s # Convert to a fixed-point number with prec2 bits. prec2 = prec + 2*n - (prec%n) # a few tests indicate that # for 10 < n < 10**4 a bit more precision is needed if n > 10: prec2 += prec2//10 prec2 = prec2 - prec2%n # Mantissa may have more bits than we need. Trim it down. shift = bc - prec2 # Adjust exponents to make prec2 and exp+shift multiples of n. sign1 = 0 es = exp+shift if es < 0: sign1 = 1 es = -es if sign1: shift += es%n else: shift -= es%n man = rshift(man, shift) extra = 10 exp1 = ((exp+shift-(n-1)*prec2)//n) - extra rnd_shift = 0 if flag_inverse: if rnd == 'u' or rnd == 'c': rnd_shift = 1 else: if rnd == 'd' or rnd == 'f': rnd_shift = 1 man = nthroot_fixed(man+rnd_shift, n, prec2, exp1) s = from_man_exp(man, exp1, prec, rnd) if flag_inverse: return mpf_div(fone, s, prec-extra_inverse, rnd) else: return s def mpf_cbrt(s, prec, rnd=round_fast): """cubic root of a positive number""" return mpf_nthroot(s, 3, prec, rnd) #----------------------------------------------------------------------------# # # # Logarithms # # # #----------------------------------------------------------------------------# def log_int_fixed(n, prec, ln2=None): """ Fast computation of log(n), caching the value for small n, intended for zeta sums. """ if n in log_int_cache: value, vprec = log_int_cache[n] if vprec >= prec: return value >> (vprec - prec) wp = prec + 10 if wp <= LOG_TAYLOR_SHIFT: if ln2 is None: ln2 = ln2_fixed(wp) r = bitcount(n) x = n << (wp-r) v = log_taylor_cached(x, wp) + r*ln2 else: v = to_fixed(mpf_log(from_int(n), wp+5), wp) if n < MAX_LOG_INT_CACHE: log_int_cache[n] = (v, wp) return v >> (wp-prec) def agm_fixed(a, b, prec): """ Fixed-point computation of agm(a,b), assuming a, b both close to unit magnitude. """ i = 0 while 1: anew = (a+b)>>1 if i > 4 and abs(a-anew) < 8: return a b = isqrt_fast(a*b) a = anew i += 1 return a def log_agm(x, prec): """ Fixed-point computation of -log(x) = log(1/x), suitable for large precision. It is required that 0 < x < 1. The algorithm used is the Sasaki-Kanada formula -log(x) = pi/agm(theta2(x)^2,theta3(x)^2). [1] For faster convergence in the theta functions, x should be chosen closer to 0. Guard bits must be added by the caller. HYPOTHESIS: if x = 2^(-n), n bits need to be added to account for the truncation to a fixed-point number, and this is the only significant cancellation error. The number of bits lost to roundoff is small and can be considered constant. [1] Richard P. Brent, "Fast Algorithms for High-Precision Computation of Elementary Functions (extended abstract)", http://wwwmaths.anu.edu.au/~brent/pd/RNC7-Brent.pdf """ x2 = (x*x) >> prec # Compute jtheta2(x)**2 s = a = b = x2 while a: b = (b*x2) >> prec a = (a*b) >> prec s += a s += (MPZ_ONE<>(prec-2) s = (s*isqrt_fast(x<>prec # Compute jtheta3(x)**2 t = a = b = x while a: b = (b*x2) >> prec a = (a*b) >> prec t += a t = (MPZ_ONE<>prec # Final formula p = agm_fixed(s, t, prec) return (pi_fixed(prec) << prec) // p def log_taylor(x, prec, r=0): """ Fixed-point calculation of log(x). It is assumed that x is close enough to 1 for the Taylor series to converge quickly. Convergence can be improved by specifying r > 0 to compute log(x^(1/2^r))*2^r, at the cost of performing r square roots. The caller must provide sufficient guard bits. """ for i in xrange(r): x = isqrt_fast(x<> prec v4 = (v2*v2) >> prec s0 = v s1 = v//3 v = (v*v4) >> prec k = 5 while v: s0 += v // k k += 2 s1 += v // k v = (v*v4) >> prec k += 2 s1 = (s1*v2) >> prec s = (s0+s1) << (1+r) if sign: return -s return s def log_taylor_cached(x, prec): """ Fixed-point computation of log(x), assuming x in (0.5, 2) and prec <= LOG_TAYLOR_PREC. """ n = x >> (prec-LOG_TAYLOR_SHIFT) cached_prec = cache_prec_steps[prec] dprec = cached_prec - prec if (n, cached_prec) in log_taylor_cache: a, log_a = log_taylor_cache[n, cached_prec] else: a = n << (cached_prec - LOG_TAYLOR_SHIFT) log_a = log_taylor(a, cached_prec, 8) log_taylor_cache[n, cached_prec] = (a, log_a) a >>= dprec log_a >>= dprec u = ((x - a) << prec) // a v = (u << prec) // ((MPZ_TWO << prec) + u) v2 = (v*v) >> prec v4 = (v2*v2) >> prec s0 = v s1 = v//3 v = (v*v4) >> prec k = 5 while v: s0 += v//k k += 2 s1 += v//k v = (v*v4) >> prec k += 2 s1 = (s1*v2) >> prec s = (s0+s1) << 1 return log_a + s def mpf_log(x, prec, rnd=round_fast): """ Compute the natural logarithm of the mpf value x. If x is negative, ComplexResult is raised. """ sign, man, exp, bc = x #------------------------------------------------------------------ # Handle special values if not man: if x == fzero: return fninf if x == finf: return finf if x == fnan: return fnan if sign: raise ComplexResult("logarithm of a negative number") wp = prec + 20 #------------------------------------------------------------------ # Handle log(2^n) = log(n)*2. # Here we catch the only possible exact value, log(1) = 0 if man == 1: if not exp: return fzero return from_man_exp(exp*ln2_fixed(wp), -wp, prec, rnd) mag = exp+bc abs_mag = abs(mag) #------------------------------------------------------------------ # Handle x = 1+eps, where log(x) ~ x. We need to check for # cancellation when moving to fixed-point math and compensate # by increasing the precision. Note that abs_mag in (0, 1) <=> # 0.5 < x < 2 and x != 1 if abs_mag <= 1: # Calculate t = x-1 to measure distance from 1 in bits tsign = 1-abs_mag if tsign: tman = (MPZ_ONE< wp: t = normalize(tsign, tman, abs_mag-bc, tbc, tbc, 'n') return mpf_perturb(t, tsign, prec, rnd) else: wp += cancellation # TODO: if close enough to 1, we could use Taylor series # even in the AGM precision range, since the Taylor series # converges rapidly #------------------------------------------------------------------ # Another special case: # n*log(2) is a good enough approximation if abs_mag > 10000: if bitcount(abs_mag) > wp: return from_man_exp(exp*ln2_fixed(wp), -wp, prec, rnd) #------------------------------------------------------------------ # General case. # Perform argument reduction using log(x) = log(x*2^n) - n*log(2): # If we are in the Taylor precision range, choose magnitude 0 or 1. # If we are in the AGM precision range, choose magnitude -m for # some large m; benchmarking on one machine showed m = prec/20 to be # optimal between 1000 and 100,000 digits. if wp <= LOG_TAYLOR_PREC: m = log_taylor_cached(lshift(man, wp-bc), wp) if mag: m += mag*ln2_fixed(wp) else: optimal_mag = -wp//LOG_AGM_MAG_PREC_RATIO n = optimal_mag - mag x = mpf_shift(x, n) wp += (-optimal_mag) m = -log_agm(to_fixed(x, wp), wp) m -= n*ln2_fixed(wp) return from_man_exp(m, -wp, prec, rnd) def mpf_log_hypot(a, b, prec, rnd): """ Computes log(sqrt(a^2+b^2)) accurately. """ # If either a or b is inf/nan/0, assume it to be a if not b[1]: a, b = b, a # a is inf/nan/0 if not a[1]: # both are inf/nan/0 if not b[1]: if a == b == fzero: return fninf if fnan in (a, b): return fnan # at least one term is (+/- inf)^2 return finf # only a is inf/nan/0 if a == fzero: # log(sqrt(0+b^2)) = log(|b|) return mpf_log(mpf_abs(b), prec, rnd) if a == fnan: return fnan return finf # Exact a2 = mpf_mul(a,a) b2 = mpf_mul(b,b) extra = 20 # Not exact h2 = mpf_add(a2, b2, prec+extra) cancelled = mpf_add(h2, fnone, 10) mag_cancelled = cancelled[2]+cancelled[3] # Just redo the sum exactly if necessary (could be smarter # and avoid memory allocation when a or b is precisely 1 # and the other is tiny...) if cancelled == fzero or mag_cancelled < -extra//2: h2 = mpf_add(a2, b2, prec+extra-min(a2[2],b2[2])) return mpf_shift(mpf_log(h2, prec, rnd), -1) #---------------------------------------------------------------------- # Inverse tangent # def atan_newton(x, prec): if prec >= 100: r = math.atan(int((x>>(prec-53)))/2.0**53) else: r = math.atan(int(x)/2.0**prec) prevp = 50 r = MPZ(int(r * 2.0**53) >> (53-prevp)) extra_p = 50 for wp in giant_steps(prevp, prec): wp += extra_p r = r << (wp-prevp) cos, sin = cos_sin_fixed(r, wp) tan = (sin << wp) // cos a = ((tan-rshift(x, prec-wp)) << wp) // ((MPZ_ONE<>wp)) r = r - a prevp = wp return rshift(r, prevp-prec) def atan_taylor_get_cached(n, prec): # Taylor series with caching wins up to huge precisions # To avoid unnecessary precomputation at low precision, we # do it in steps # Round to next power of 2 prec2 = (1<<(bitcount(prec-1))) + 20 dprec = prec2 - prec if (n, prec2) in atan_taylor_cache: a, atan_a = atan_taylor_cache[n, prec2] else: a = n << (prec2 - ATAN_TAYLOR_SHIFT) atan_a = atan_newton(a, prec2) atan_taylor_cache[n, prec2] = (a, atan_a) return (a >> dprec), (atan_a >> dprec) def atan_taylor(x, prec): n = (x >> (prec-ATAN_TAYLOR_SHIFT)) a, atan_a = atan_taylor_get_cached(n, prec) d = x - a s0 = v = (d << prec) // ((a**2 >> prec) + (a*d >> prec) + (MPZ_ONE << prec)) v2 = (v**2 >> prec) v4 = (v2 * v2) >> prec s1 = v//3 v = (v * v4) >> prec k = 5 while v: s0 += v // k k += 2 s1 += v // k v = (v * v4) >> prec k += 2 s1 = (s1 * v2) >> prec s = s0 - s1 return atan_a + s def atan_inf(sign, prec, rnd): if not sign: return mpf_shift(mpf_pi(prec, rnd), -1) return mpf_neg(mpf_shift(mpf_pi(prec, negative_rnd[rnd]), -1)) def mpf_atan(x, prec, rnd=round_fast): sign, man, exp, bc = x if not man: if x == fzero: return fzero if x == finf: return atan_inf(0, prec, rnd) if x == fninf: return atan_inf(1, prec, rnd) return fnan mag = exp + bc # Essentially infinity if mag > prec+20: return atan_inf(sign, prec, rnd) # Essentially ~ x if -mag > prec+20: return mpf_perturb(x, 1-sign, prec, rnd) wp = prec + 30 + abs(mag) # For large x, use atan(x) = pi/2 - atan(1/x) if mag >= 2: x = mpf_rdiv_int(1, x, wp) reciprocal = True else: reciprocal = False t = to_fixed(x, wp) if sign: t = -t if wp < ATAN_TAYLOR_PREC: a = atan_taylor(t, wp) else: a = atan_newton(t, wp) if reciprocal: a = ((pi_fixed(wp)>>1)+1) - a if sign: a = -a return from_man_exp(a, -wp, prec, rnd) # TODO: cleanup the special cases def mpf_atan2(y, x, prec, rnd=round_fast): xsign, xman, xexp, xbc = x ysign, yman, yexp, ybc = y if not yman: if y == fzero and x != fnan: if mpf_sign(x) >= 0: return fzero return mpf_pi(prec, rnd) if y in (finf, fninf): if x in (finf, fninf): return fnan # pi/2 if y == finf: return mpf_shift(mpf_pi(prec, rnd), -1) # -pi/2 return mpf_neg(mpf_shift(mpf_pi(prec, negative_rnd[rnd]), -1)) return fnan if ysign: return mpf_neg(mpf_atan2(mpf_neg(y), x, prec, negative_rnd[rnd])) if not xman: if x == fnan: return fnan if x == finf: return fzero if x == fninf: return mpf_pi(prec, rnd) if y == fzero: return fzero return mpf_shift(mpf_pi(prec, rnd), -1) tquo = mpf_atan(mpf_div(y, x, prec+4), prec+4) if xsign: return mpf_add(mpf_pi(prec+4), tquo, prec, rnd) else: return mpf_pos(tquo, prec, rnd) def mpf_asin(x, prec, rnd=round_fast): sign, man, exp, bc = x if bc+exp > 0 and x not in (fone, fnone): raise ComplexResult("asin(x) is real only for -1 <= x <= 1") # asin(x) = 2*atan(x/(1+sqrt(1-x**2))) wp = prec + 15 a = mpf_mul(x, x) b = mpf_add(fone, mpf_sqrt(mpf_sub(fone, a, wp), wp), wp) c = mpf_div(x, b, wp) return mpf_shift(mpf_atan(c, prec, rnd), 1) def mpf_acos(x, prec, rnd=round_fast): # acos(x) = 2*atan(sqrt(1-x**2)/(1+x)) sign, man, exp, bc = x if bc + exp > 0: if x not in (fone, fnone): raise ComplexResult("acos(x) is real only for -1 <= x <= 1") if x == fnone: return mpf_pi(prec, rnd) wp = prec + 15 a = mpf_mul(x, x) b = mpf_sqrt(mpf_sub(fone, a, wp), wp) c = mpf_div(b, mpf_add(fone, x, wp), wp) return mpf_shift(mpf_atan(c, prec, rnd), 1) def mpf_asinh(x, prec, rnd=round_fast): wp = prec + 20 sign, man, exp, bc = x mag = exp+bc if mag < -8: if mag < -wp: return mpf_perturb(x, 1-sign, prec, rnd) wp += (-mag) # asinh(x) = log(x+sqrt(x**2+1)) # use reflection symmetry to avoid cancellation q = mpf_sqrt(mpf_add(mpf_mul(x, x), fone, wp), wp) q = mpf_add(mpf_abs(x), q, wp) if sign: return mpf_neg(mpf_log(q, prec, negative_rnd[rnd])) else: return mpf_log(q, prec, rnd) def mpf_acosh(x, prec, rnd=round_fast): # acosh(x) = log(x+sqrt(x**2-1)) wp = prec + 15 if mpf_cmp(x, fone) == -1: raise ComplexResult("acosh(x) is real only for x >= 1") q = mpf_sqrt(mpf_add(mpf_mul(x,x), fnone, wp), wp) return mpf_log(mpf_add(x, q, wp), prec, rnd) def mpf_atanh(x, prec, rnd=round_fast): # atanh(x) = log((1+x)/(1-x))/2 sign, man, exp, bc = x if (not man) and exp: if x in (fzero, fnan): return x raise ComplexResult("atanh(x) is real only for -1 <= x <= 1") mag = bc + exp if mag > 0: if mag == 1 and man == 1: return [finf, fninf][sign] raise ComplexResult("atanh(x) is real only for -1 <= x <= 1") wp = prec + 15 if mag < -8: if mag < -wp: return mpf_perturb(x, sign, prec, rnd) wp += (-mag) a = mpf_add(x, fone, wp) b = mpf_sub(fone, x, wp) return mpf_shift(mpf_log(mpf_div(a, b, wp), prec, rnd), -1) def mpf_fibonacci(x, prec, rnd=round_fast): sign, man, exp, bc = x if not man: if x == fninf: return fnan return x # F(2^n) ~= 2^(2^n) size = abs(exp+bc) if exp >= 0: # Exact if size < 10 or size <= bitcount(prec): return from_int(ifib(to_int(x)), prec, rnd) # Use the modified Binet formula wp = prec + size + 20 a = mpf_phi(wp) b = mpf_add(mpf_shift(a, 1), fnone, wp) u = mpf_pow(a, x, wp) v = mpf_cos_pi(x, wp) v = mpf_div(v, u, wp) u = mpf_sub(u, v, wp) u = mpf_div(u, b, prec, rnd) return u #------------------------------------------------------------------------------- # Exponential-type functions #------------------------------------------------------------------------------- def exponential_series(x, prec, type=0): """ Taylor series for cosh/sinh or cos/sin. type = 0 -- returns exp(x) (slightly faster than cosh+sinh) type = 1 -- returns (cosh(x), sinh(x)) type = 2 -- returns (cos(x), sin(x)) """ if x < 0: x = -x sign = 1 else: sign = 0 r = int(0.5*prec**0.5) xmag = bitcount(x) - prec r = max(0, xmag + r) extra = 10 + 2*max(r,-xmag) wp = prec + extra x <<= (extra - r) one = MPZ_ONE << wp alt = (type == 2) if prec < EXP_SERIES_U_CUTOFF: x2 = a = (x*x) >> wp x4 = (x2*x2) >> wp s0 = s1 = MPZ_ZERO k = 2 while a: a //= (k-1)*k; s0 += a; k += 2 a //= (k-1)*k; s1 += a; k += 2 a = (a*x4) >> wp s1 = (x2*s1) >> wp if alt: c = s1 - s0 + one else: c = s1 + s0 + one else: u = int(0.3*prec**0.35) x2 = a = (x*x) >> wp xpowers = [one, x2] for i in xrange(1, u): xpowers.append((xpowers[-1]*x2)>>wp) sums = [MPZ_ZERO] * u k = 2 while a: for i in xrange(u): a //= (k-1)*k if alt and k & 2: sums[i] -= a else: sums[i] += a k += 2 a = (a*xpowers[-1]) >> wp for i in xrange(1, u): sums[i] = (sums[i]*xpowers[i]) >> wp c = sum(sums) + one if type == 0: s = isqrt_fast(c*c - (one<> wp return v >> extra else: # Repeatedly apply the double-angle formula # cosh(2*x) = 2*cosh(x)^2 - 1 # cos(2*x) = 2*cos(x)^2 - 1 pshift = wp-1 for i in xrange(r): c = ((c*c) >> pshift) - one # With the abs, this is the same for sinh and sin s = isqrt_fast(abs((one<>extra), (s>>extra) def exp_basecase(x, prec): """ Compute exp(x) as a fixed-point number. Works for any x, but for speed should have |x| < 1. For an arbitrary number, use exp(x) = exp(x-m*log(2)) * 2^m where m = floor(x/log(2)). """ if prec > EXP_COSH_CUTOFF: return exponential_series(x, prec, 0) r = int(prec**0.5) prec += r s0 = s1 = (MPZ_ONE << prec) k = 2 a = x2 = (x*x) >> prec while a: a //= k; s0 += a; k += 1 a //= k; s1 += a; k += 1 a = (a*x2) >> prec s1 = (s1*x) >> prec s = s0 + s1 u = r while r: s = (s*s) >> prec r -= 1 return s >> u def exp_expneg_basecase(x, prec): """ Computation of exp(x), exp(-x) """ if prec > EXP_COSH_CUTOFF: cosh, sinh = exponential_series(x, prec, 1) return cosh+sinh, cosh-sinh a = exp_basecase(x, prec) b = (MPZ_ONE << (prec+prec)) // a return a, b def cos_sin_basecase(x, prec): """ Compute cos(x), sin(x) as fixed-point numbers, assuming x in [0, pi/2). For an arbitrary number, use x' = x - m*(pi/2) where m = floor(x/(pi/2)) along with quarter-period symmetries. """ if prec > COS_SIN_CACHE_PREC: return exponential_series(x, prec, 2) precs = prec - COS_SIN_CACHE_STEP t = x >> precs n = int(t) if n not in cos_sin_cache: w = t<<(10+COS_SIN_CACHE_PREC-COS_SIN_CACHE_STEP) cos_t, sin_t = exponential_series(w, 10+COS_SIN_CACHE_PREC, 2) cos_sin_cache[n] = (cos_t>>10), (sin_t>>10) cos_t, sin_t = cos_sin_cache[n] offset = COS_SIN_CACHE_PREC - prec cos_t >>= offset sin_t >>= offset x -= t << precs cos = MPZ_ONE << prec sin = x k = 2 a = -((x*x) >> prec) while a: a //= k; cos += a; k += 1; a = (a*x) >> prec a //= k; sin += a; k += 1; a = -((a*x) >> prec) return ((cos*cos_t-sin*sin_t) >> prec), ((sin*cos_t+cos*sin_t) >> prec) def mpf_exp(x, prec, rnd=round_fast): sign, man, exp, bc = x if man: mag = bc + exp wp = prec + 14 if sign: man = -man # TODO: the best cutoff depends on both x and the precision. if prec > 600 and exp >= 0: # Need about log2(exp(n)) ~= 1.45*mag extra precision e = mpf_e(wp+int(1.45*mag)) return mpf_pow_int(e, man<= 2 if mag > 1: # For large arguments: exp(2^mag*(1+eps)) = # exp(2^mag)*exp(2^mag*eps) = exp(2^mag)*(1 + 2^mag*eps + ...) # so about mag extra bits is required. wpmod = wp + mag offset = exp + wpmod if offset >= 0: t = man << offset else: t = man >> (-offset) lg2 = ln2_fixed(wpmod) n, t = divmod(t, lg2) n = int(n) t >>= mag else: offset = exp + wp if offset >= 0: t = man << offset else: t = man >> (-offset) n = 0 man = exp_basecase(t, wp) return from_man_exp(man, n-wp, prec, rnd) if not exp: return fone if x == fninf: return fzero return x def mpf_cosh_sinh(x, prec, rnd=round_fast, tanh=0): """Simultaneously compute (cosh(x), sinh(x)) for real x""" sign, man, exp, bc = x if (not man) and exp: if tanh: if x == finf: return fone if x == fninf: return fnone return fnan if x == finf: return (finf, finf) if x == fninf: return (finf, fninf) return fnan, fnan mag = exp+bc wp = prec+14 if mag < -4: # Extremely close to 0, sinh(x) ~= x and cosh(x) ~= 1 if mag < -wp: if tanh: return mpf_perturb(x, 1-sign, prec, rnd) cosh = mpf_perturb(fone, 0, prec, rnd) sinh = mpf_perturb(x, sign, prec, rnd) return cosh, sinh # Fix for cancellation when computing sinh wp += (-mag) # Does exp(-2*x) vanish? if mag > 10: if 3*(1<<(mag-1)) > wp: # XXX: rounding if tanh: return mpf_perturb([fone,fnone][sign], 1-sign, prec, rnd) c = s = mpf_shift(mpf_exp(mpf_abs(x), prec, rnd), -1) if sign: s = mpf_neg(s) return c, s # |x| > 1 if mag > 1: wpmod = wp + mag offset = exp + wpmod if offset >= 0: t = man << offset else: t = man >> (-offset) lg2 = ln2_fixed(wpmod) n, t = divmod(t, lg2) n = int(n) t >>= mag else: offset = exp + wp if offset >= 0: t = man << offset else: t = man >> (-offset) n = 0 a, b = exp_expneg_basecase(t, wp) # TODO: optimize division precision cosh = a + (b>>(2*n)) sinh = a - (b>>(2*n)) if sign: sinh = -sinh if tanh: man = (sinh << wp) // cosh return from_man_exp(man, -wp, prec, rnd) else: cosh = from_man_exp(cosh, n-wp-1, prec, rnd) sinh = from_man_exp(sinh, n-wp-1, prec, rnd) return cosh, sinh def mod_pi2(man, exp, mag, wp): # Reduce to standard interval if mag > 0: i = 0 while 1: cancellation_prec = 20 << i wpmod = wp + mag + cancellation_prec pi2 = pi_fixed(wpmod-1) pi4 = pi2 >> 1 offset = wpmod + exp if offset >= 0: t = man << offset else: t = man >> (-offset) n, y = divmod(t, pi2) if y > pi4: small = pi2 - y else: small = y if small >> (wp+mag-10): n = int(n) t = y >> mag wp = wpmod - mag break i += 1 else: wp += (-mag) offset = exp + wp if offset >= 0: t = man << offset else: t = man >> (-offset) n = 0 return t, n, wp def mpf_cos_sin(x, prec, rnd=round_fast, which=0, pi=False): """ which: 0 -- return cos(x), sin(x) 1 -- return cos(x) 2 -- return sin(x) 3 -- return tan(x) if pi=True, compute for pi*x """ sign, man, exp, bc = x if not man: if exp: c, s = fnan, fnan else: c, s = fone, fzero if which == 0: return c, s if which == 1: return c if which == 2: return s if which == 3: return s mag = bc + exp wp = prec + 10 # Extremely small? if mag < 0: if mag < -wp: if pi: x = mpf_mul(x, mpf_pi(wp)) c = mpf_perturb(fone, 1, prec, rnd) s = mpf_perturb(x, 1-sign, prec, rnd) if which == 0: return c, s if which == 1: return c if which == 2: return s if which == 3: return mpf_perturb(x, sign, prec, rnd) if pi: if exp >= -1: if exp == -1: c = fzero s = (fone, fnone)[bool(man & 2) ^ sign] elif exp == 0: c, s = (fnone, fzero) else: c, s = (fone, fzero) if which == 0: return c, s if which == 1: return c if which == 2: return s if which == 3: return mpf_div(s, c, prec, rnd) # Subtract nearest half-integer (= mod by pi/2) n = ((man >> (-exp-2)) + 1) >> 1 man = man - (n << (-exp-1)) mag2 = bitcount(man) + exp wp = prec + 10 - mag2 offset = exp + wp if offset >= 0: t = man << offset else: t = man >> (-offset) t = (t*pi_fixed(wp)) >> wp else: t, n, wp = mod_pi2(man, exp, mag, wp) c, s = cos_sin_basecase(t, wp) m = n & 3 if m == 1: c, s = -s, c elif m == 2: c, s = -c, -s elif m == 3: c, s = s, -c if sign: s = -s if which == 0: c = from_man_exp(c, -wp, prec, rnd) s = from_man_exp(s, -wp, prec, rnd) return c, s if which == 1: return from_man_exp(c, -wp, prec, rnd) if which == 2: return from_man_exp(s, -wp, prec, rnd) if which == 3: return from_rational(s, c, prec, rnd) def mpf_cos(x, prec, rnd=round_fast): return mpf_cos_sin(x, prec, rnd, 1) def mpf_sin(x, prec, rnd=round_fast): return mpf_cos_sin(x, prec, rnd, 2) def mpf_tan(x, prec, rnd=round_fast): return mpf_cos_sin(x, prec, rnd, 3) def mpf_cos_sin_pi(x, prec, rnd=round_fast): return mpf_cos_sin(x, prec, rnd, 0, 1) def mpf_cos_pi(x, prec, rnd=round_fast): return mpf_cos_sin(x, prec, rnd, 1, 1) def mpf_sin_pi(x, prec, rnd=round_fast): return mpf_cos_sin(x, prec, rnd, 2, 1) def mpf_cosh(x, prec, rnd=round_fast): return mpf_cosh_sinh(x, prec, rnd)[0] def mpf_sinh(x, prec, rnd=round_fast): return mpf_cosh_sinh(x, prec, rnd)[1] def mpf_tanh(x, prec, rnd=round_fast): return mpf_cosh_sinh(x, prec, rnd, tanh=1) # Low-overhead fixed-point versions def cos_sin_fixed(x, prec, pi2=None): if pi2 is None: pi2 = pi_fixed(prec-1) n, t = divmod(x, pi2) n = int(n) c, s = cos_sin_basecase(t, prec) m = n & 3 if m == 0: return c, s if m == 1: return -s, c if m == 2: return -c, -s if m == 3: return s, -c def exp_fixed(x, prec, ln2=None): if ln2 is None: ln2 = ln2_fixed(prec) n, t = divmod(x, ln2) n = int(n) v = exp_basecase(t, prec) if n >= 0: return v << n else: return v >> (-n) if BACKEND == 'sage': try: import sage.libs.mpmath.ext_libmp as _lbmp mpf_sqrt = _lbmp.mpf_sqrt mpf_exp = _lbmp.mpf_exp mpf_log = _lbmp.mpf_log mpf_cos = _lbmp.mpf_cos mpf_sin = _lbmp.mpf_sin mpf_pow = _lbmp.mpf_pow exp_fixed = _lbmp.exp_fixed cos_sin_fixed = _lbmp.cos_sin_fixed log_int_fixed = _lbmp.log_int_fixed except (ImportError, AttributeError): print("Warning: Sage imports in libelefun failed") mpmath-1.0.0/mpmath/libmp/libhyper.py000066400000000000000000001074201316273626600175770ustar00rootroot00000000000000""" This module implements computation of hypergeometric and related functions. In particular, it provides code for generic summation of hypergeometric series. Optimized versions for various special cases are also provided. """ import operator import math from .backend import MPZ_ZERO, MPZ_ONE, BACKEND, xrange, exec_ from .libintmath import gcd from .libmpf import (\ ComplexResult, round_fast, round_nearest, negative_rnd, bitcount, to_fixed, from_man_exp, from_int, to_int, from_rational, fzero, fone, fnone, ftwo, finf, fninf, fnan, mpf_sign, mpf_add, mpf_abs, mpf_pos, mpf_cmp, mpf_lt, mpf_le, mpf_gt, mpf_min_max, mpf_perturb, mpf_neg, mpf_shift, mpf_sub, mpf_mul, mpf_div, sqrt_fixed, mpf_sqrt, mpf_rdiv_int, mpf_pow_int, to_rational, ) from .libelefun import (\ mpf_pi, mpf_exp, mpf_log, pi_fixed, mpf_cos_sin, mpf_cos, mpf_sin, mpf_sqrt, agm_fixed, ) from .libmpc import (\ mpc_one, mpc_sub, mpc_mul_mpf, mpc_mul, mpc_neg, complex_int_pow, mpc_div, mpc_add_mpf, mpc_sub_mpf, mpc_log, mpc_add, mpc_pos, mpc_shift, mpc_is_infnan, mpc_zero, mpc_sqrt, mpc_abs, mpc_mpf_div, mpc_square, mpc_exp ) from .libintmath import ifac from .gammazeta import mpf_gamma_int, mpf_euler, euler_fixed class NoConvergence(Exception): pass #-----------------------------------------------------------------------# # # # Generic hypergeometric series # # # #-----------------------------------------------------------------------# """ TODO: 1. proper mpq parsing 2. imaginary z special-cased (also: rational, integer?) 3. more clever handling of series that don't converge because of stupid upwards rounding 4. checking for cancellation """ def make_hyp_summator(key): """ Returns a function that sums a generalized hypergeometric series, for given parameter types (integer, rational, real, complex). """ p, q, param_types, ztype = key pstring = "".join(param_types) fname = "hypsum_%i_%i_%s_%s_%s" % (p, q, pstring[:p], pstring[p:], ztype) #print "generating hypsum", fname have_complex_param = 'C' in param_types have_complex_arg = ztype == 'C' have_complex = have_complex_param or have_complex_arg source = [] add = source.append aint = [] arat = [] bint = [] brat = [] areal = [] breal = [] acomplex = [] bcomplex = [] #add("wp = prec + 40") add("MAX = kwargs.get('maxterms', wp*100)") add("HIGH = MPZ_ONE<= 0:") add(" ZRE = xm << offset") add("else:") add(" ZRE = xm >> (-offset)") if have_complex_arg: add("offset = ye + wp") add("if offset >= 0:") add(" ZIM = ym << offset") add("else:") add(" ZIM = ym >> (-offset)") for i, flag in enumerate(param_types): W = ["A", "B"][i >= p] if flag == 'Z': ([aint,bint][i >= p]).append(i) add("%sINT_%i = coeffs[%i]" % (W, i, i)) elif flag == 'Q': ([arat,brat][i >= p]).append(i) add("%sP_%i, %sQ_%i = coeffs[%i]._mpq_" % (W, i, W, i, i)) elif flag == 'R': ([areal,breal][i >= p]).append(i) add("xsign, xm, xe, xbc = coeffs[%i]._mpf_" % i) add("if xsign: xm = -xm") add("offset = xe + wp") add("if offset >= 0:") add(" %sREAL_%i = xm << offset" % (W, i)) add("else:") add(" %sREAL_%i = xm >> (-offset)" % (W, i)) elif flag == 'C': ([acomplex,bcomplex][i >= p]).append(i) add("__re, __im = coeffs[%i]._mpc_" % i) add("xsign, xm, xe, xbc = __re") add("if xsign: xm = -xm") add("ysign, ym, ye, ybc = __im") add("if ysign: ym = -ym") add("offset = xe + wp") add("if offset >= 0:") add(" %sCRE_%i = xm << offset" % (W, i)) add("else:") add(" %sCRE_%i = xm >> (-offset)" % (W, i)) add("offset = ye + wp") add("if offset >= 0:") add(" %sCIM_%i = ym << offset" % (W, i)) add("else:") add(" %sCIM_%i = ym >> (-offset)" % (W, i)) else: raise ValueError l_areal = len(areal) l_breal = len(breal) cancellable_real = min(l_areal, l_breal) noncancellable_real_num = areal[cancellable_real:] noncancellable_real_den = breal[cancellable_real:] # LOOP add("for n in xrange(1,10**8):") add(" if n in magnitude_check:") add(" p_mag = bitcount(abs(PRE))") if have_complex: add(" p_mag = max(p_mag, bitcount(abs(PIM)))") add(" magnitude_check[n] = wp-p_mag") # Real factors multiplier = " * ".join(["AINT_#".replace("#", str(i)) for i in aint] + \ ["AP_#".replace("#", str(i)) for i in arat] + \ ["BQ_#".replace("#", str(i)) for i in brat]) divisor = " * ".join(["BINT_#".replace("#", str(i)) for i in bint] + \ ["BP_#".replace("#", str(i)) for i in brat] + \ ["AQ_#".replace("#", str(i)) for i in arat] + ["n"]) if multiplier: add(" mul = " + multiplier) add(" div = " + divisor) # Check for singular terms add(" if not div:") if multiplier: add(" if not mul:") add(" break") add(" raise ZeroDivisionError") # Update product if have_complex: # TODO: when there are several real parameters and just a few complex # (maybe just the complex argument), we only need to do about # half as many ops if we accumulate the real factor in a single real variable for k in range(cancellable_real): add(" PRE = PRE * AREAL_%i // BREAL_%i" % (areal[k], breal[k])) for i in noncancellable_real_num: add(" PRE = (PRE * AREAL_#) >> wp".replace("#", str(i))) for i in noncancellable_real_den: add(" PRE = (PRE << wp) // BREAL_#".replace("#", str(i))) for k in range(cancellable_real): add(" PIM = PIM * AREAL_%i // BREAL_%i" % (areal[k], breal[k])) for i in noncancellable_real_num: add(" PIM = (PIM * AREAL_#) >> wp".replace("#", str(i))) for i in noncancellable_real_den: add(" PIM = (PIM << wp) // BREAL_#".replace("#", str(i))) if multiplier: if have_complex_arg: add(" PRE, PIM = (mul*(PRE*ZRE-PIM*ZIM))//div, (mul*(PIM*ZRE+PRE*ZIM))//div") add(" PRE >>= wp") add(" PIM >>= wp") else: add(" PRE = ((mul * PRE * ZRE) >> wp) // div") add(" PIM = ((mul * PIM * ZRE) >> wp) // div") else: if have_complex_arg: add(" PRE, PIM = (PRE*ZRE-PIM*ZIM)//div, (PIM*ZRE+PRE*ZIM)//div") add(" PRE >>= wp") add(" PIM >>= wp") else: add(" PRE = ((PRE * ZRE) >> wp) // div") add(" PIM = ((PIM * ZRE) >> wp) // div") for i in acomplex: add(" PRE, PIM = PRE*ACRE_#-PIM*ACIM_#, PIM*ACRE_#+PRE*ACIM_#".replace("#", str(i))) add(" PRE >>= wp") add(" PIM >>= wp") for i in bcomplex: add(" mag = BCRE_#*BCRE_#+BCIM_#*BCIM_#".replace("#", str(i))) add(" re = PRE*BCRE_# + PIM*BCIM_#".replace("#", str(i))) add(" im = PIM*BCRE_# - PRE*BCIM_#".replace("#", str(i))) add(" PRE = (re << wp) // mag".replace("#", str(i))) add(" PIM = (im << wp) // mag".replace("#", str(i))) else: for k in range(cancellable_real): add(" PRE = PRE * AREAL_%i // BREAL_%i" % (areal[k], breal[k])) for i in noncancellable_real_num: add(" PRE = (PRE * AREAL_#) >> wp".replace("#", str(i))) for i in noncancellable_real_den: add(" PRE = (PRE << wp) // BREAL_#".replace("#", str(i))) if multiplier: add(" PRE = ((PRE * mul * ZRE) >> wp) // div") else: add(" PRE = ((PRE * ZRE) >> wp) // div") # Add product to sum if have_complex: add(" SRE += PRE") add(" SIM += PIM") add(" if (HIGH > PRE > LOW) and (HIGH > PIM > LOW):") add(" break") else: add(" SRE += PRE") add(" if HIGH > PRE > LOW:") add(" break") #add(" from mpmath import nprint, log, ldexp") #add(" nprint([n, log(abs(PRE),2), ldexp(PRE,-wp)])") add(" if n > MAX:") add(" raise NoConvergence('Hypergeometric series converges too slowly. Try increasing maxterms.')") # +1 all parameters for next loop for i in aint: add(" AINT_# += 1".replace("#", str(i))) for i in bint: add(" BINT_# += 1".replace("#", str(i))) for i in arat: add(" AP_# += AQ_#".replace("#", str(i))) for i in brat: add(" BP_# += BQ_#".replace("#", str(i))) for i in areal: add(" AREAL_# += one".replace("#", str(i))) for i in breal: add(" BREAL_# += one".replace("#", str(i))) for i in acomplex: add(" ACRE_# += one".replace("#", str(i))) for i in bcomplex: add(" BCRE_# += one".replace("#", str(i))) if have_complex: add("a = from_man_exp(SRE, -wp, prec, 'n')") add("b = from_man_exp(SIM, -wp, prec, 'n')") add("if SRE:") add(" if SIM:") add(" magn = max(a[2]+a[3], b[2]+b[3])") add(" else:") add(" magn = a[2]+a[3]") add("elif SIM:") add(" magn = b[2]+b[3]") add("else:") add(" magn = -wp+1") add("return (a, b), True, magn") else: add("a = from_man_exp(SRE, -wp, prec, 'n')") add("if SRE:") add(" magn = a[2]+a[3]") add("else:") add(" magn = -wp+1") add("return a, False, magn") source = "\n".join((" " + line) for line in source) source = ("def %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs):\n" % fname) + source namespace = {} exec_(source, globals(), namespace) #print source return source, namespace[fname] if BACKEND == 'sage': def make_hyp_summator(key): """ Returns a function that sums a generalized hypergeometric series, for given parameter types (integer, rational, real, complex). """ from sage.libs.mpmath.ext_main import hypsum_internal p, q, param_types, ztype = key def _hypsum(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs): return hypsum_internal(p, q, param_types, ztype, coeffs, z, prec, wp, epsshift, magnitude_check, kwargs) return "(none)", _hypsum #-----------------------------------------------------------------------# # # # Error functions # # # #-----------------------------------------------------------------------# # TODO: mpf_erf should call mpf_erfc when appropriate (currently # only the converse delegation is implemented) def mpf_erf(x, prec, rnd=round_fast): sign, man, exp, bc = x if not man: if x == fzero: return fzero if x == finf: return fone if x== fninf: return fnone return fnan size = exp + bc lg = math.log # The approximation erf(x) = 1 is accurate to > x^2 * log(e,2) bits if size > 3 and 2*(size-1) + 0.528766 > lg(prec,2): if sign: return mpf_perturb(fnone, 0, prec, rnd) else: return mpf_perturb(fone, 1, prec, rnd) # erf(x) ~ 2*x/sqrt(pi) close to 0 if size < -prec: # 2*x x = mpf_shift(x,1) c = mpf_sqrt(mpf_pi(prec+20), prec+20) # TODO: interval rounding return mpf_div(x, c, prec, rnd) wp = prec + abs(size) + 25 # Taylor series for erf, fixed-point summation t = abs(to_fixed(x, wp)) t2 = (t*t) >> wp s, term, k = t, 12345, 1 while term: t = ((t * t2) >> wp) // k term = t // (2*k+1) if k & 1: s -= term else: s += term k += 1 s = (s << (wp+1)) // sqrt_fixed(pi_fixed(wp), wp) if sign: s = -s return from_man_exp(s, -wp, prec, rnd) # If possible, we use the asymptotic series for erfc. # This is an alternating divergent asymptotic series, so # the error is at most equal to the first omitted term. # Here we check if the smallest term is small enough # for a given x and precision def erfc_check_series(x, prec): n = to_int(x) if n**2 * 1.44 > prec: return True return False def mpf_erfc(x, prec, rnd=round_fast): sign, man, exp, bc = x if not man: if x == fzero: return fone if x == finf: return fzero if x == fninf: return ftwo return fnan wp = prec + 20 mag = bc+exp # Preserve full accuracy when exponent grows huge wp += max(0, 2*mag) regular_erf = sign or mag < 2 if regular_erf or not erfc_check_series(x, wp): if regular_erf: return mpf_sub(fone, mpf_erf(x, prec+10, negative_rnd[rnd]), prec, rnd) # 1-erf(x) ~ exp(-x^2), increase prec to deal with cancellation n = to_int(x)+1 return mpf_sub(fone, mpf_erf(x, prec + int(n**2*1.44) + 10), prec, rnd) s = term = MPZ_ONE << wp term_prev = 0 t = (2 * to_fixed(x, wp) ** 2) >> wp k = 1 while 1: term = ((term * (2*k - 1)) << wp) // t if k > 4 and term > term_prev or not term: break if k & 1: s -= term else: s += term term_prev = term #print k, to_str(from_man_exp(term, -wp, 50), 10) k += 1 s = (s << wp) // sqrt_fixed(pi_fixed(wp), wp) s = from_man_exp(s, -wp, wp) z = mpf_exp(mpf_neg(mpf_mul(x,x,wp),wp),wp) y = mpf_div(mpf_mul(z, s, wp), x, prec, rnd) return y #-----------------------------------------------------------------------# # # # Exponential integrals # # # #-----------------------------------------------------------------------# def ei_taylor(x, prec): s = t = x k = 2 while t: t = ((t*x) >> prec) // k s += t // k k += 1 return s def complex_ei_taylor(zre, zim, prec): _abs = abs sre = tre = zre sim = tim = zim k = 2 while _abs(tre) + _abs(tim) > 5: tre, tim = ((tre*zre-tim*zim)//k)>>prec, ((tre*zim+tim*zre)//k)>>prec sre += tre // k sim += tim // k k += 1 return sre, sim def ei_asymptotic(x, prec): one = MPZ_ONE << prec x = t = ((one << prec) // x) s = one + x k = 2 while t: t = (k*t*x) >> prec s += t k += 1 return s def complex_ei_asymptotic(zre, zim, prec): _abs = abs one = MPZ_ONE << prec M = (zim*zim + zre*zre) >> prec # 1 / z xre = tre = (zre << prec) // M xim = tim = ((-zim) << prec) // M sre = one + xre sim = xim k = 2 while _abs(tre) + _abs(tim) > 1000: #print tre, tim tre, tim = ((tre*xre-tim*xim)*k)>>prec, ((tre*xim+tim*xre)*k)>>prec sre += tre sim += tim k += 1 if k > prec: raise NoConvergence return sre, sim def mpf_ei(x, prec, rnd=round_fast, e1=False): if e1: x = mpf_neg(x) sign, man, exp, bc = x if e1 and not sign: if x == fzero: return finf raise ComplexResult("E1(x) for x < 0") if man: xabs = 0, man, exp, bc xmag = exp+bc wp = prec + 20 can_use_asymp = xmag > wp if not can_use_asymp: if exp >= 0: xabsint = man << exp else: xabsint = man >> (-exp) can_use_asymp = xabsint > int(wp*0.693) + 10 if can_use_asymp: if xmag > wp: v = fone else: v = from_man_exp(ei_asymptotic(to_fixed(x, wp), wp), -wp) v = mpf_mul(v, mpf_exp(x, wp), wp) v = mpf_div(v, x, prec, rnd) else: wp += 2*int(to_int(xabs)) u = to_fixed(x, wp) v = ei_taylor(u, wp) + euler_fixed(wp) t1 = from_man_exp(v,-wp) t2 = mpf_log(xabs,wp) v = mpf_add(t1, t2, prec, rnd) else: if x == fzero: v = fninf elif x == finf: v = finf elif x == fninf: v = fzero else: v = fnan if e1: v = mpf_neg(v) return v def mpc_ei(z, prec, rnd=round_fast, e1=False): if e1: z = mpc_neg(z) a, b = z asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b if b == fzero: if e1: x = mpf_neg(mpf_ei(a, prec, rnd)) if not asign: y = mpf_neg(mpf_pi(prec, rnd)) else: y = fzero return x, y else: return mpf_ei(a, prec, rnd), fzero if a != fzero: if not aman or not bman: return (fnan, fnan) wp = prec + 40 amag = aexp+abc bmag = bexp+bbc zmag = max(amag, bmag) can_use_asymp = zmag > wp if not can_use_asymp: zabsint = abs(to_int(a)) + abs(to_int(b)) can_use_asymp = zabsint > int(wp*0.693) + 20 try: if can_use_asymp: if zmag > wp: v = fone, fzero else: zre = to_fixed(a, wp) zim = to_fixed(b, wp) vre, vim = complex_ei_asymptotic(zre, zim, wp) v = from_man_exp(vre, -wp), from_man_exp(vim, -wp) v = mpc_mul(v, mpc_exp(z, wp), wp) v = mpc_div(v, z, wp) if e1: v = mpc_neg(v, prec, rnd) else: x, y = v if bsign: v = mpf_pos(x, prec, rnd), mpf_sub(y, mpf_pi(wp), prec, rnd) else: v = mpf_pos(x, prec, rnd), mpf_add(y, mpf_pi(wp), prec, rnd) return v except NoConvergence: pass #wp += 2*max(0,zmag) wp += 2*int(to_int(mpc_abs(z, 5))) zre = to_fixed(a, wp) zim = to_fixed(b, wp) vre, vim = complex_ei_taylor(zre, zim, wp) vre += euler_fixed(wp) v = from_man_exp(vre,-wp), from_man_exp(vim,-wp) if e1: u = mpc_log(mpc_neg(z),wp) else: u = mpc_log(z,wp) v = mpc_add(v, u, prec, rnd) if e1: v = mpc_neg(v) return v def mpf_e1(x, prec, rnd=round_fast): return mpf_ei(x, prec, rnd, True) def mpc_e1(x, prec, rnd=round_fast): return mpc_ei(x, prec, rnd, True) def mpf_expint(n, x, prec, rnd=round_fast, gamma=False): """ E_n(x), n an integer, x real With gamma=True, computes Gamma(n,x) (upper incomplete gamma function) Returns (real, None) if real, otherwise (real, imag) The imaginary part is an optional branch cut term """ sign, man, exp, bc = x if not man: if gamma: if x == fzero: # Actually gamma function pole if n <= 0: return finf, None return mpf_gamma_int(n, prec, rnd), None if x == finf: return fzero, None # TODO: could return finite imaginary value at -inf return fnan, fnan else: if x == fzero: if n > 1: return from_rational(1, n-1, prec, rnd), None else: return finf, None if x == finf: return fzero, None return fnan, fnan n_orig = n if gamma: n = 1-n wp = prec + 20 xmag = exp + bc # Beware of near-poles if xmag < -10: raise NotImplementedError nmag = bitcount(abs(n)) have_imag = n > 0 and sign negx = mpf_neg(x) # Skip series if direct convergence if n == 0 or 2*nmag - xmag < -wp: if gamma: v = mpf_exp(negx, wp) re = mpf_mul(v, mpf_pow_int(x, n_orig-1, wp), prec, rnd) else: v = mpf_exp(negx, wp) re = mpf_div(v, x, prec, rnd) else: # Finite number of terms, or... can_use_asymptotic_series = -3*wp < n <= 0 # ...large enough? if not can_use_asymptotic_series: xi = abs(to_int(x)) m = min(max(1, xi-n), 2*wp) siz = -n*nmag + (m+n)*bitcount(abs(m+n)) - m*xmag - (144*m//100) tol = -wp-10 can_use_asymptotic_series = siz < tol if can_use_asymptotic_series: r = ((-MPZ_ONE) << (wp+wp)) // to_fixed(x, wp) m = n t = r*m s = MPZ_ONE << wp while m and t: s += t m += 1 t = (m*r*t) >> wp v = mpf_exp(negx, wp) if gamma: # ~ exp(-x) * x^(n-1) * (1 + ...) v = mpf_mul(v, mpf_pow_int(x, n_orig-1, wp), wp) else: # ~ exp(-x)/x * (1 + ...) v = mpf_div(v, x, wp) re = mpf_mul(v, from_man_exp(s, -wp), prec, rnd) elif n == 1: re = mpf_neg(mpf_ei(negx, prec, rnd)) elif n > 0 and n < 3*wp: T1 = mpf_neg(mpf_ei(negx, wp)) if gamma: if n_orig & 1: T1 = mpf_neg(T1) else: T1 = mpf_mul(T1, mpf_pow_int(negx, n-1, wp), wp) r = t = to_fixed(x, wp) facs = [1] * (n-1) for k in range(1,n-1): facs[k] = facs[k-1] * k facs = facs[::-1] s = facs[0] << wp for k in range(1, n-1): if k & 1: s -= facs[k] * t else: s += facs[k] * t t = (t*r) >> wp T2 = from_man_exp(s, -wp, wp) T2 = mpf_mul(T2, mpf_exp(negx, wp)) if gamma: T2 = mpf_mul(T2, mpf_pow_int(x, n_orig, wp), wp) R = mpf_add(T1, T2) re = mpf_div(R, from_int(ifac(n-1)), prec, rnd) else: raise NotImplementedError if have_imag: M = from_int(-ifac(n-1)) if gamma: im = mpf_div(mpf_pi(wp), M, prec, rnd) if n_orig & 1: im = mpf_neg(im) else: im = mpf_div(mpf_mul(mpf_pi(wp), mpf_pow_int(negx, n_orig-1, wp), wp), M, prec, rnd) return re, im else: return re, None def mpf_ci_si_taylor(x, wp, which=0): """ 0 - Ci(x) - (euler+log(x)) 1 - Si(x) """ x = to_fixed(x, wp) x2 = -(x*x) >> wp if which == 0: s, t, k = 0, (MPZ_ONE<>wp s += t//k k += 2 return from_man_exp(s, -wp) def mpc_ci_si_taylor(re, im, wp, which=0): # The following code is only designed for small arguments, # and not too small arguments (for relative accuracy) if re[1]: mag = re[2]+re[3] elif im[1]: mag = im[2]+im[3] if im[1]: mag = max(mag, im[2]+im[3]) if mag > 2 or mag < -wp: raise NotImplementedError wp += (2-mag) zre = to_fixed(re, wp) zim = to_fixed(im, wp) z2re = (zim*zim-zre*zre)>>wp z2im = (-2*zre*zim)>>wp tre = zre tim = zim one = MPZ_ONE< 2: f = k*(k-1) tre, tim = ((tre*z2re-tim*z2im)//f)>>wp, ((tre*z2im+tim*z2re)//f)>>wp sre += tre//k sim += tim//k k += 2 return from_man_exp(sre, -wp), from_man_exp(sim, -wp) def mpf_ci_si(x, prec, rnd=round_fast, which=2): """ Calculation of Ci(x), Si(x) for real x. which = 0 -- returns (Ci(x), -) which = 1 -- returns (Si(x), -) which = 2 -- returns (Ci(x), Si(x)) Note: if x < 0, Ci(x) needs an additional imaginary term, pi*i. """ wp = prec + 20 sign, man, exp, bc = x ci, si = None, None if not man: if x == fzero: return (fninf, fzero) if x == fnan: return (x, x) ci = fzero if which != 0: if x == finf: si = mpf_shift(mpf_pi(prec, rnd), -1) if x == fninf: si = mpf_neg(mpf_shift(mpf_pi(prec, negative_rnd[rnd]), -1)) return (ci, si) # For small x: Ci(x) ~ euler + log(x), Si(x) ~ x mag = exp+bc if mag < -wp: if which != 0: si = mpf_perturb(x, 1-sign, prec, rnd) if which != 1: y = mpf_euler(wp) xabs = mpf_abs(x) ci = mpf_add(y, mpf_log(xabs, wp), prec, rnd) return ci, si # For huge x: Ci(x) ~ sin(x)/x, Si(x) ~ pi/2 elif mag > wp: if which != 0: if sign: si = mpf_neg(mpf_pi(prec, negative_rnd[rnd])) else: si = mpf_pi(prec, rnd) si = mpf_shift(si, -1) if which != 1: ci = mpf_div(mpf_sin(x, wp), x, prec, rnd) return ci, si else: wp += abs(mag) # Use an asymptotic series? The smallest value of n!/x^n # occurs for n ~ x, where the magnitude is ~ exp(-x). asymptotic = mag-1 > math.log(wp, 2) # Case 1: convergent series near 0 if not asymptotic: if which != 0: si = mpf_pos(mpf_ci_si_taylor(x, wp, 1), prec, rnd) if which != 1: ci = mpf_ci_si_taylor(x, wp, 0) ci = mpf_add(ci, mpf_euler(wp), wp) ci = mpf_add(ci, mpf_log(mpf_abs(x), wp), prec, rnd) return ci, si x = mpf_abs(x) # Case 2: asymptotic series for x >> 1 xf = to_fixed(x, wp) xr = (MPZ_ONE<<(2*wp)) // xf # 1/x s1 = (MPZ_ONE << wp) s2 = xr t = xr k = 2 while t: t = -t t = (t*xr*k)>>wp k += 1 s1 += t t = (t*xr*k)>>wp k += 1 s2 += t s1 = from_man_exp(s1, -wp) s2 = from_man_exp(s2, -wp) s1 = mpf_div(s1, x, wp) s2 = mpf_div(s2, x, wp) cos, sin = mpf_cos_sin(x, wp) # Ci(x) = sin(x)*s1-cos(x)*s2 # Si(x) = pi/2-cos(x)*s1-sin(x)*s2 if which != 0: si = mpf_add(mpf_mul(cos, s1), mpf_mul(sin, s2), wp) si = mpf_sub(mpf_shift(mpf_pi(wp), -1), si, wp) if sign: si = mpf_neg(si) si = mpf_pos(si, prec, rnd) if which != 1: ci = mpf_sub(mpf_mul(sin, s1), mpf_mul(cos, s2), prec, rnd) return ci, si def mpf_ci(x, prec, rnd=round_fast): if mpf_sign(x) < 0: raise ComplexResult return mpf_ci_si(x, prec, rnd, 0)[0] def mpf_si(x, prec, rnd=round_fast): return mpf_ci_si(x, prec, rnd, 1)[1] def mpc_ci(z, prec, rnd=round_fast): re, im = z if im == fzero: ci = mpf_ci_si(re, prec, rnd, 0)[0] if mpf_sign(re) < 0: return (ci, mpf_pi(prec, rnd)) return (ci, fzero) wp = prec + 20 cre, cim = mpc_ci_si_taylor(re, im, wp, 0) cre = mpf_add(cre, mpf_euler(wp), wp) ci = mpc_add((cre, cim), mpc_log(z, wp), prec, rnd) return ci def mpc_si(z, prec, rnd=round_fast): re, im = z if im == fzero: return (mpf_ci_si(re, prec, rnd, 1)[1], fzero) wp = prec + 20 z = mpc_ci_si_taylor(re, im, wp, 1) return mpc_pos(z, prec, rnd) #-----------------------------------------------------------------------# # # # Bessel functions # # # #-----------------------------------------------------------------------# # A Bessel function of the first kind of integer order, J_n(x), is # given by the power series # oo # ___ k 2 k + n # \ (-1) / x \ # J_n(x) = ) ----------- | - | # /___ k! (k + n)! \ 2 / # k = 0 # Simplifying the quotient between two successive terms gives the # ratio x^2 / (-4*k*(k+n)). Hence, we only need one full-precision # multiplication and one division by a small integer per term. # The complex version is very similar, the only difference being # that the multiplication is actually 4 multiplies. # In the general case, we have # J_v(x) = (x/2)**v / v! * 0F1(v+1, (-1/4)*z**2) # TODO: for extremely large x, we could use an asymptotic # trigonometric approximation. # TODO: recompute at higher precision if the fixed-point mantissa # is very small def mpf_besseljn(n, x, prec, rounding=round_fast): prec += 50 negate = n < 0 and n & 1 mag = x[2]+x[3] n = abs(n) wp = prec + 20 + n*bitcount(n) if mag < 0: wp -= n * mag x = to_fixed(x, wp) x2 = (x**2) >> wp if not n: s = t = MPZ_ONE << wp else: s = t = (x**n // ifac(n)) >> ((n-1)*wp + n) k = 1 while t: t = ((t * x2) // (-4*k*(k+n))) >> wp s += t k += 1 if negate: s = -s return from_man_exp(s, -wp, prec, rounding) def mpc_besseljn(n, z, prec, rounding=round_fast): negate = n < 0 and n & 1 n = abs(n) origprec = prec zre, zim = z mag = max(zre[2]+zre[3], zim[2]+zim[3]) prec += 20 + n*bitcount(n) + abs(mag) if mag < 0: prec -= n * mag zre = to_fixed(zre, prec) zim = to_fixed(zim, prec) z2re = (zre**2 - zim**2) >> prec z2im = (zre*zim) >> (prec-1) if not n: sre = tre = MPZ_ONE << prec sim = tim = MPZ_ZERO else: re, im = complex_int_pow(zre, zim, n) sre = tre = (re // ifac(n)) >> ((n-1)*prec + n) sim = tim = (im // ifac(n)) >> ((n-1)*prec + n) k = 1 while abs(tre) + abs(tim) > 3: p = -4*k*(k+n) tre, tim = tre*z2re - tim*z2im, tim*z2re + tre*z2im tre = (tre // p) >> prec tim = (tim // p) >> prec sre += tre sim += tim k += 1 if negate: sre = -sre sim = -sim re = from_man_exp(sre, -prec, origprec, rounding) im = from_man_exp(sim, -prec, origprec, rounding) return (re, im) def mpf_agm(a, b, prec, rnd=round_fast): """ Computes the arithmetic-geometric mean agm(a,b) for nonnegative mpf values a, b. """ asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b if asign or bsign: raise ComplexResult("agm of a negative number") # Handle inf, nan or zero in either operand if not (aman and bman): if a == fnan or b == fnan: return fnan if a == finf: if b == fzero: return fnan return finf if b == finf: if a == fzero: return fnan return finf # agm(0,x) = agm(x,0) = 0 return fzero wp = prec + 20 amag = aexp+abc bmag = bexp+bbc mag_delta = amag - bmag # Reduce to roughly the same magnitude using floating-point AGM abs_mag_delta = abs(mag_delta) if abs_mag_delta > 10: while abs_mag_delta > 10: a, b = mpf_shift(mpf_add(a,b,wp),-1), \ mpf_sqrt(mpf_mul(a,b,wp),wp) abs_mag_delta //= 2 asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b amag = aexp+abc bmag = bexp+bbc mag_delta = amag - bmag #print to_float(a), to_float(b) # Use agm(a,b) = agm(x*a,x*b)/x to obtain a, b ~= 1 min_mag = min(amag,bmag) max_mag = max(amag,bmag) n = 0 # If too small, we lose precision when going to fixed-point if min_mag < -8: n = -min_mag # If too large, we waste time using fixed-point with large numbers elif max_mag > 20: n = -max_mag if n: a = mpf_shift(a, n) b = mpf_shift(b, n) #print to_float(a), to_float(b) af = to_fixed(a, wp) bf = to_fixed(b, wp) g = agm_fixed(af, bf, wp) return from_man_exp(g, -wp-n, prec, rnd) def mpf_agm1(a, prec, rnd=round_fast): """ Computes the arithmetic-geometric mean agm(1,a) for a nonnegative mpf value a. """ return mpf_agm(fone, a, prec, rnd) def mpc_agm(a, b, prec, rnd=round_fast): """ Complex AGM. TODO: * check that convergence works as intended * optimize * select a nonarbitrary branch """ if mpc_is_infnan(a) or mpc_is_infnan(b): return fnan, fnan if mpc_zero in (a, b): return fzero, fzero if mpc_neg(a) == b: return fzero, fzero wp = prec+20 eps = mpf_shift(fone, -wp+10) while 1: a1 = mpc_shift(mpc_add(a, b, wp), -1) b1 = mpc_sqrt(mpc_mul(a, b, wp), wp) a, b = a1, b1 size = mpf_min_max([mpc_abs(a,10), mpc_abs(b,10)])[1] err = mpc_abs(mpc_sub(a, b, 10), 10) if size == fzero or mpf_lt(err, mpf_mul(eps, size)): return a def mpc_agm1(a, prec, rnd=round_fast): return mpc_agm(mpc_one, a, prec, rnd) def mpf_ellipk(x, prec, rnd=round_fast): if not x[1]: if x == fzero: return mpf_shift(mpf_pi(prec, rnd), -1) if x == fninf: return fzero if x == fnan: return x if x == fone: return finf # TODO: for |x| << 1/2, one could use fall back to # pi/2 * hyp2f1_rat((1,2),(1,2),(1,1), x) wp = prec + 15 # Use K(x) = pi/2/agm(1,a) where a = sqrt(1-x) # The sqrt raises ComplexResult if x > 0 a = mpf_sqrt(mpf_sub(fone, x, wp), wp) v = mpf_agm1(a, wp) r = mpf_div(mpf_pi(wp), v, prec, rnd) return mpf_shift(r, -1) def mpc_ellipk(z, prec, rnd=round_fast): re, im = z if im == fzero: if re == finf: return mpc_zero if mpf_le(re, fone): return mpf_ellipk(re, prec, rnd), fzero wp = prec + 15 a = mpc_sqrt(mpc_sub(mpc_one, z, wp), wp) v = mpc_agm1(a, wp) r = mpc_mpf_div(mpf_pi(wp), v, prec, rnd) return mpc_shift(r, -1) def mpf_ellipe(x, prec, rnd=round_fast): # http://functions.wolfram.com/EllipticIntegrals/ # EllipticK/20/01/0001/ # E = (1-m)*(K'(m)*2*m + K(m)) sign, man, exp, bc = x if not man: if x == fzero: return mpf_shift(mpf_pi(prec, rnd), -1) if x == fninf: return finf if x == fnan: return x if x == finf: raise ComplexResult if x == fone: return fone wp = prec+20 mag = exp+bc if mag < -wp: return mpf_shift(mpf_pi(prec, rnd), -1) # Compute a finite difference for K' p = max(mag, 0) - wp h = mpf_shift(fone, p) K = mpf_ellipk(x, 2*wp) Kh = mpf_ellipk(mpf_sub(x, h), 2*wp) Kdiff = mpf_shift(mpf_sub(K, Kh), -p) t = mpf_sub(fone, x) b = mpf_mul(Kdiff, mpf_shift(x,1), wp) return mpf_mul(t, mpf_add(K, b), prec, rnd) def mpc_ellipe(z, prec, rnd=round_fast): re, im = z if im == fzero: if re == finf: return (fzero, finf) if mpf_le(re, fone): return mpf_ellipe(re, prec, rnd), fzero wp = prec + 15 mag = mpc_abs(z, 1) p = max(mag[2]+mag[3], 0) - wp h = mpf_shift(fone, p) K = mpc_ellipk(z, 2*wp) Kh = mpc_ellipk(mpc_add_mpf(z, h, 2*wp), 2*wp) Kdiff = mpc_shift(mpc_sub(Kh, K, wp), -p) t = mpc_sub(mpc_one, z, wp) b = mpc_mul(Kdiff, mpc_shift(z,1), wp) return mpc_mul(t, mpc_add(K, b, wp), prec, rnd) mpmath-1.0.0/mpmath/libmp/libintmath.py000066400000000000000000000401161316273626600201120ustar00rootroot00000000000000""" Utility functions for integer math. TODO: rename, cleanup, perhaps move the gmpy wrapper code here from settings.py """ import math from bisect import bisect from .backend import xrange from .backend import BACKEND, gmpy, sage, sage_utils, MPZ, MPZ_ONE, MPZ_ZERO def giant_steps(start, target, n=2): """ Return a list of integers ~= [start, n*start, ..., target/n^2, target/n, target] but conservatively rounded so that the quotient between two successive elements is actually slightly less than n. With n = 2, this describes suitable precision steps for a quadratically convergent algorithm such as Newton's method; with n = 3 steps for cubic convergence (Halley's method), etc. >>> giant_steps(50,1000) [66, 128, 253, 502, 1000] >>> giant_steps(50,1000,4) [65, 252, 1000] """ L = [target] while L[-1] > start*n: L = L + [L[-1]//n + 2] return L[::-1] def rshift(x, n): """For an integer x, calculate x >> n with the fastest (floor) rounding. Unlike the plain Python expression (x >> n), n is allowed to be negative, in which case a left shift is performed.""" if n >= 0: return x >> n else: return x << (-n) def lshift(x, n): """For an integer x, calculate x << n. Unlike the plain Python expression (x << n), n is allowed to be negative, in which case a right shift with default (floor) rounding is performed.""" if n >= 0: return x << n else: return x >> (-n) if BACKEND == 'sage': import operator rshift = operator.rshift lshift = operator.lshift def python_trailing(n): """Count the number of trailing zero bits in abs(n).""" if not n: return 0 t = 0 while not n & 1: n >>= 1 t += 1 return t if BACKEND == 'gmpy': if gmpy.version() >= '2': def gmpy_trailing(n): """Count the number of trailing zero bits in abs(n) using gmpy.""" if n: return MPZ(n).bit_scan1() else: return 0 else: def gmpy_trailing(n): """Count the number of trailing zero bits in abs(n) using gmpy.""" if n: return MPZ(n).scan1() else: return 0 # Small powers of 2 powers = [1<<_ for _ in range(300)] def python_bitcount(n): """Calculate bit size of the nonnegative integer n.""" bc = bisect(powers, n) if bc != 300: return bc bc = int(math.log(n, 2)) - 4 return bc + bctable[n>>bc] def gmpy_bitcount(n): """Calculate bit size of the nonnegative integer n.""" if n: return MPZ(n).numdigits(2) else: return 0 #def sage_bitcount(n): # if n: return MPZ(n).nbits() # else: return 0 def sage_trailing(n): return MPZ(n).trailing_zero_bits() if BACKEND == 'gmpy': bitcount = gmpy_bitcount trailing = gmpy_trailing elif BACKEND == 'sage': sage_bitcount = sage_utils.bitcount bitcount = sage_bitcount trailing = sage_trailing else: bitcount = python_bitcount trailing = python_trailing if BACKEND == 'gmpy' and 'bit_length' in dir(gmpy): bitcount = gmpy.bit_length # Used to avoid slow function calls as far as possible trailtable = [trailing(n) for n in range(256)] bctable = [bitcount(n) for n in range(1024)] # TODO: speed up for bases 2, 4, 8, 16, ... def bin_to_radix(x, xbits, base, bdigits): """Changes radix of a fixed-point number; i.e., converts x * 2**xbits to floor(x * 10**bdigits).""" return x * (MPZ(base)**bdigits) >> xbits stddigits = '0123456789abcdefghijklmnopqrstuvwxyz' def small_numeral(n, base=10, digits=stddigits): """Return the string numeral of a positive integer in an arbitrary base. Most efficient for small input.""" if base == 10: return str(n) digs = [] while n: n, digit = divmod(n, base) digs.append(digits[digit]) return "".join(digs[::-1]) def numeral_python(n, base=10, size=0, digits=stddigits): """Represent the integer n as a string of digits in the given base. Recursive division is used to make this function about 3x faster than Python's str() for converting integers to decimal strings. The 'size' parameters specifies the number of digits in n; this number is only used to determine splitting points and need not be exact.""" if n <= 0: if not n: return "0" return "-" + numeral(-n, base, size, digits) # Fast enough to do directly if size < 250: return small_numeral(n, base, digits) # Divide in half half = (size // 2) + (size & 1) A, B = divmod(n, base**half) ad = numeral(A, base, half, digits) bd = numeral(B, base, half, digits).rjust(half, "0") return ad + bd def numeral_gmpy(n, base=10, size=0, digits=stddigits): """Represent the integer n as a string of digits in the given base. Recursive division is used to make this function about 3x faster than Python's str() for converting integers to decimal strings. The 'size' parameters specifies the number of digits in n; this number is only used to determine splitting points and need not be exact.""" if n < 0: return "-" + numeral(-n, base, size, digits) # gmpy.digits() may cause a segmentation fault when trying to convert # extremely large values to a string. The size limit may need to be # adjusted on some platforms, but 1500000 works on Windows and Linux. if size < 1500000: return gmpy.digits(n, base) # Divide in half half = (size // 2) + (size & 1) A, B = divmod(n, MPZ(base)**half) ad = numeral(A, base, half, digits) bd = numeral(B, base, half, digits).rjust(half, "0") return ad + bd if BACKEND == "gmpy": numeral = numeral_gmpy else: numeral = numeral_python _1_800 = 1<<800 _1_600 = 1<<600 _1_400 = 1<<400 _1_200 = 1<<200 _1_100 = 1<<100 _1_50 = 1<<50 def isqrt_small_python(x): """ Correctly (floor) rounded integer square root, using division. Fast up to ~200 digits. """ if not x: return x if x < _1_800: # Exact with IEEE double precision arithmetic if x < _1_50: return int(x**0.5) # Initial estimate can be any integer >= the true root; round up r = int(x**0.5 * 1.00000000000001) + 1 else: bc = bitcount(x) n = bc//2 r = int((x>>(2*n-100))**0.5+2)<<(n-50) # +2 is to round up # The following iteration now precisely computes floor(sqrt(x)) # See e.g. Crandall & Pomerance, "Prime Numbers: A Computational # Perspective" while 1: y = (r+x//r)>>1 if y >= r: return r r = y def isqrt_fast_python(x): """ Fast approximate integer square root, computed using division-free Newton iteration for large x. For random integers the result is almost always correct (floor(sqrt(x))), but is 1 ulp too small with a roughly 0.1% probability. If x is very close to an exact square, the answer is 1 ulp wrong with high probability. With 0 guard bits, the largest error over a set of 10^5 random inputs of size 1-10^5 bits was 3 ulp. The use of 10 guard bits almost certainly guarantees a max 1 ulp error. """ # Use direct division-based iteration if sqrt(x) < 2^400 # Assume floating-point square root accurate to within 1 ulp, then: # 0 Newton iterations good to 52 bits # 1 Newton iterations good to 104 bits # 2 Newton iterations good to 208 bits # 3 Newton iterations good to 416 bits if x < _1_800: y = int(x**0.5) if x >= _1_100: y = (y + x//y) >> 1 if x >= _1_200: y = (y + x//y) >> 1 if x >= _1_400: y = (y + x//y) >> 1 return y bc = bitcount(x) guard_bits = 10 x <<= 2*guard_bits bc += 2*guard_bits bc += (bc&1) hbc = bc//2 startprec = min(50, hbc) # Newton iteration for 1/sqrt(x), with floating-point starting value r = int(2.0**(2*startprec) * (x >> (bc-2*startprec)) ** -0.5) pp = startprec for p in giant_steps(startprec, hbc): # r**2, scaled from real size 2**(-bc) to 2**p r2 = (r*r) >> (2*pp - p) # x*r**2, scaled from real size ~1.0 to 2**p xr2 = ((x >> (bc-p)) * r2) >> p # New value of r, scaled from real size 2**(-bc/2) to 2**p r = (r * ((3<> (pp+1) pp = p # (1/sqrt(x))*x = sqrt(x) return (r*(x>>hbc)) >> (p+guard_bits) def sqrtrem_python(x): """Correctly rounded integer (floor) square root with remainder.""" # to check cutoff: # plot(lambda x: timing(isqrt, 2**int(x)), [0,2000]) if x < _1_600: y = isqrt_small_python(x) return y, x - y*y y = isqrt_fast_python(x) + 1 rem = x - y*y # Correct remainder while rem < 0: y -= 1 rem += (1+2*y) else: if rem: while rem > 2*(1+y): y += 1 rem -= (1+2*y) return y, rem def isqrt_python(x): """Integer square root with correct (floor) rounding.""" return sqrtrem_python(x)[0] def sqrt_fixed(x, prec): return isqrt_fast(x<= '2': isqrt_small = isqrt_fast = isqrt = gmpy.isqrt sqrtrem = gmpy.isqrt_rem else: isqrt_small = isqrt_fast = isqrt = gmpy.sqrt sqrtrem = gmpy.sqrtrem elif BACKEND == 'sage': isqrt_small = isqrt_fast = isqrt = \ getattr(sage_utils, "isqrt", lambda n: MPZ(n).isqrt()) sqrtrem = lambda n: MPZ(n).sqrtrem() else: isqrt_small = isqrt_small_python isqrt_fast = isqrt_fast_python isqrt = isqrt_python sqrtrem = sqrtrem_python def ifib(n, _cache={}): """Computes the nth Fibonacci number as an integer, for integer n.""" if n < 0: return (-1)**(-n+1) * ifib(-n) if n in _cache: return _cache[n] m = n # Use Dijkstra's logarithmic algorithm # The following implementation is basically equivalent to # http://en.literateprograms.org/Fibonacci_numbers_(Scheme) a, b, p, q = MPZ_ONE, MPZ_ZERO, MPZ_ZERO, MPZ_ONE while n: if n & 1: aq = a*q a, b = b*q+aq+a*p, b*p+aq n -= 1 else: qq = q*q p, q = p*p+qq, qq+2*p*q n >>= 1 if m < 250: _cache[m] = b return b MAX_FACTORIAL_CACHE = 1000 def ifac(n, memo={0:1, 1:1}): """Return n factorial (for integers n >= 0 only).""" f = memo.get(n) if f: return f k = len(memo) p = memo[k-1] MAX = MAX_FACTORIAL_CACHE while k <= n: p *= k if k <= MAX: memo[k] = p k += 1 return p def ifac2(n, memo_pair=[{0:1}, {1:1}]): """Return n!! (double factorial), integers n >= 0 only.""" memo = memo_pair[n&1] f = memo.get(n) if f: return f k = max(memo) p = memo[k] MAX = MAX_FACTORIAL_CACHE while k < n: k += 2 p *= k if k <= MAX: memo[k] = p return p if BACKEND == 'gmpy': ifac = gmpy.fac elif BACKEND == 'sage': ifac = lambda n: int(sage.factorial(n)) ifib = sage.fibonacci def list_primes(n): n = n + 1 sieve = list(xrange(n)) sieve[:2] = [0, 0] for i in xrange(2, int(n**0.5)+1): if sieve[i]: for j in xrange(i**2, n, i): sieve[j] = 0 return [p for p in sieve if p] if BACKEND == 'sage': # Note: it is *VERY* important for performance that we convert # the list to Python ints. def list_primes(n): return [int(_) for _ in sage.primes(n+1)] small_odd_primes = (3,5,7,11,13,17,19,23,29,31,37,41,43,47) small_odd_primes_set = set(small_odd_primes) def isprime(n): """ Determines whether n is a prime number. A probabilistic test is performed if n is very large. No special trick is used for detecting perfect powers. >>> sum(list_primes(100000)) 454396537 >>> sum(n*isprime(n) for n in range(100000)) 454396537 """ n = int(n) if not n & 1: return n == 2 if n < 50: return n in small_odd_primes_set for p in small_odd_primes: if not n % p: return False m = n-1 s = trailing(m) d = m >> s def test(a): x = pow(a,d,n) if x == 1 or x == m: return True for r in xrange(1,s): x = x**2 % n if x == m: return True return False # See http://primes.utm.edu/prove/prove2_3.html if n < 1373653: witnesses = [2,3] elif n < 341550071728321: witnesses = [2,3,5,7,11,13,17] else: witnesses = small_odd_primes for a in witnesses: if not test(a): return False return True def moebius(n): """ Evaluates the Moebius function which is `mu(n) = (-1)^k` if `n` is a product of `k` distinct primes and `mu(n) = 0` otherwise. TODO: speed up using factorization """ n = abs(int(n)) if n < 2: return n factors = [] for p in xrange(2, n+1): if not (n % p): if not (n % p**2): return 0 if not sum(p % f for f in factors): factors.append(p) return (-1)**len(factors) def gcd(*args): a = 0 for b in args: if a: while b: a, b = b, a % b else: a = b return a # Comment by Juan Arias de Reyna: # # I learn this method to compute EulerE[2n] from van de Lune. # # We apply the formula EulerE[2n] = (-1)^n 2**(-2n) sum_{j=0}^n a(2n,2j+1) # # where the numbers a(n,j) vanish for j > n+1 or j <= -1 and satisfies # # a(0,-1) = a(0,0) = 0; a(0,1)= 1; a(0,2) = a(0,3) = 0 # # a(n,j) = a(n-1,j) when n+j is even # a(n,j) = (j-1) a(n-1,j-1) + (j+1) a(n-1,j+1) when n+j is odd # # # But we can use only one array unidimensional a(j) since to compute # a(n,j) we only need to know a(n-1,k) where k and j are of different parity # and we have not to conserve the used values. # # We cached up the values of Euler numbers to sufficiently high order. # # Important Observation: If we pretend to use the numbers # EulerE[1], EulerE[2], ... , EulerE[n] # it is convenient to compute first EulerE[n], since the algorithm # computes first all # the previous ones, and keeps them in the CACHE MAX_EULER_CACHE = 500 def eulernum(m, _cache={0:MPZ_ONE}): r""" Computes the Euler numbers `E(n)`, which can be defined as coefficients of the Taylor expansion of `1/cosh x`: .. math :: \frac{1}{\cosh x} = \sum_{n=0}^\infty \frac{E_n}{n!} x^n Example:: >>> [int(eulernum(n)) for n in range(11)] [1, 0, -1, 0, 5, 0, -61, 0, 1385, 0, -50521] >>> [int(eulernum(n)) for n in range(11)] # test cache [1, 0, -1, 0, 5, 0, -61, 0, 1385, 0, -50521] """ # for odd m > 1, the Euler numbers are zero if m & 1: return MPZ_ZERO f = _cache.get(m) if f: return f MAX = MAX_EULER_CACHE n = m a = [MPZ(_) for _ in [0,0,1,0,0,0]] for n in range(1, m+1): for j in range(n+1, -1, -2): a[j+1] = (j-1)*a[j] + (j+1)*a[j+2] a.append(0) suma = 0 for k in range(n+1, -1, -2): suma += a[k+1] if n <= MAX: _cache[n] = ((-1)**(n//2))*(suma // 2**n) if n == m: return ((-1)**(n//2))*suma // 2**n def stirling1(n, k): """ Stirling number of the first kind. """ if n < 0 or k < 0: raise ValueError if k >= n: return MPZ(n == k) if k < 1: return MPZ_ZERO L = [MPZ_ZERO] * (k+1) L[1] = MPZ_ONE for m in xrange(2, n+1): for j in xrange(min(k, m), 0, -1): L[j] = (m-1) * L[j] + L[j-1] return (-1)**(n+k) * L[k] def stirling2(n, k): """ Stirling number of the second kind. """ if n < 0 or k < 0: raise ValueError if k >= n: return MPZ(n == k) if k <= 1: return MPZ(k == 1) s = MPZ_ZERO t = MPZ_ONE for j in xrange(k+1): if (k + j) & 1: s -= t * MPZ(j)**n else: s += t * MPZ(j)**n t = t * (k - j) // (j + 1) return s // ifac(k) mpmath-1.0.0/mpmath/libmp/libmpc.py000066400000000000000000000643651316273626600172410ustar00rootroot00000000000000""" Low-level functions for complex arithmetic. """ import sys from .backend import MPZ, MPZ_ZERO, MPZ_ONE, MPZ_TWO, BACKEND from .libmpf import (\ round_floor, round_ceiling, round_down, round_up, round_nearest, round_fast, bitcount, bctable, normalize, normalize1, reciprocal_rnd, rshift, lshift, giant_steps, negative_rnd, to_str, to_fixed, from_man_exp, from_float, to_float, from_int, to_int, fzero, fone, ftwo, fhalf, finf, fninf, fnan, fnone, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_div, mpf_mul_int, mpf_shift, mpf_sqrt, mpf_hypot, mpf_rdiv_int, mpf_floor, mpf_ceil, mpf_nint, mpf_frac, mpf_sign, mpf_hash, ComplexResult ) from .libelefun import (\ mpf_pi, mpf_exp, mpf_log, mpf_cos_sin, mpf_cosh_sinh, mpf_tan, mpf_pow_int, mpf_log_hypot, mpf_cos_sin_pi, mpf_phi, mpf_cos, mpf_sin, mpf_cos_pi, mpf_sin_pi, mpf_atan, mpf_atan2, mpf_cosh, mpf_sinh, mpf_tanh, mpf_asin, mpf_acos, mpf_acosh, mpf_nthroot, mpf_fibonacci ) # An mpc value is a (real, imag) tuple mpc_one = fone, fzero mpc_zero = fzero, fzero mpc_two = ftwo, fzero mpc_half = (fhalf, fzero) _infs = (finf, fninf) _infs_nan = (finf, fninf, fnan) def mpc_is_inf(z): """Check if either real or imaginary part is infinite""" re, im = z if re in _infs: return True if im in _infs: return True return False def mpc_is_infnan(z): """Check if either real or imaginary part is infinite or nan""" re, im = z if re in _infs_nan: return True if im in _infs_nan: return True return False def mpc_to_str(z, dps, **kwargs): re, im = z rs = to_str(re, dps) if im[0]: return rs + " - " + to_str(mpf_neg(im), dps, **kwargs) + "j" else: return rs + " + " + to_str(im, dps, **kwargs) + "j" def mpc_to_complex(z, strict=False, rnd=round_fast): re, im = z return complex(to_float(re, strict, rnd), to_float(im, strict, rnd)) def mpc_hash(z): if sys.version >= "3.2": re, im = z h = mpf_hash(re) + sys.hash_info.imag * mpf_hash(im) # Need to reduce either module 2^32 or 2^64 h = h % (2**sys.hash_info.width) return int(h) else: try: return hash(mpc_to_complex(z, strict=True)) except OverflowError: return hash(z) def mpc_conjugate(z, prec, rnd=round_fast): re, im = z return re, mpf_neg(im, prec, rnd) def mpc_is_nonzero(z): return z != mpc_zero def mpc_add(z, w, prec, rnd=round_fast): a, b = z c, d = w return mpf_add(a, c, prec, rnd), mpf_add(b, d, prec, rnd) def mpc_add_mpf(z, x, prec, rnd=round_fast): a, b = z return mpf_add(a, x, prec, rnd), b def mpc_sub(z, w, prec=0, rnd=round_fast): a, b = z c, d = w return mpf_sub(a, c, prec, rnd), mpf_sub(b, d, prec, rnd) def mpc_sub_mpf(z, p, prec=0, rnd=round_fast): a, b = z return mpf_sub(a, p, prec, rnd), b def mpc_pos(z, prec, rnd=round_fast): a, b = z return mpf_pos(a, prec, rnd), mpf_pos(b, prec, rnd) def mpc_neg(z, prec=None, rnd=round_fast): a, b = z return mpf_neg(a, prec, rnd), mpf_neg(b, prec, rnd) def mpc_shift(z, n): a, b = z return mpf_shift(a, n), mpf_shift(b, n) def mpc_abs(z, prec, rnd=round_fast): """Absolute value of a complex number, |a+bi|. Returns an mpf value.""" a, b = z return mpf_hypot(a, b, prec, rnd) def mpc_arg(z, prec, rnd=round_fast): """Argument of a complex number. Returns an mpf value.""" a, b = z return mpf_atan2(b, a, prec, rnd) def mpc_floor(z, prec, rnd=round_fast): a, b = z return mpf_floor(a, prec, rnd), mpf_floor(b, prec, rnd) def mpc_ceil(z, prec, rnd=round_fast): a, b = z return mpf_ceil(a, prec, rnd), mpf_ceil(b, prec, rnd) def mpc_nint(z, prec, rnd=round_fast): a, b = z return mpf_nint(a, prec, rnd), mpf_nint(b, prec, rnd) def mpc_frac(z, prec, rnd=round_fast): a, b = z return mpf_frac(a, prec, rnd), mpf_frac(b, prec, rnd) def mpc_mul(z, w, prec, rnd=round_fast): """ Complex multiplication. Returns the real and imaginary part of (a+bi)*(c+di), rounded to the specified precision. The rounding mode applies to the real and imaginary parts separately. """ a, b = z c, d = w p = mpf_mul(a, c) q = mpf_mul(b, d) r = mpf_mul(a, d) s = mpf_mul(b, c) re = mpf_sub(p, q, prec, rnd) im = mpf_add(r, s, prec, rnd) return re, im def mpc_square(z, prec, rnd=round_fast): # (a+b*I)**2 == a**2 - b**2 + 2*I*a*b a, b = z p = mpf_mul(a,a) q = mpf_mul(b,b) r = mpf_mul(a,b, prec, rnd) re = mpf_sub(p, q, prec, rnd) im = mpf_shift(r, 1) return re, im def mpc_mul_mpf(z, p, prec, rnd=round_fast): a, b = z re = mpf_mul(a, p, prec, rnd) im = mpf_mul(b, p, prec, rnd) return re, im def mpc_mul_imag_mpf(z, x, prec, rnd=round_fast): """ Multiply the mpc value z by I*x where x is an mpf value. """ a, b = z re = mpf_neg(mpf_mul(b, x, prec, rnd)) im = mpf_mul(a, x, prec, rnd) return re, im def mpc_mul_int(z, n, prec, rnd=round_fast): a, b = z re = mpf_mul_int(a, n, prec, rnd) im = mpf_mul_int(b, n, prec, rnd) return re, im def mpc_div(z, w, prec, rnd=round_fast): a, b = z c, d = w wp = prec + 10 # mag = c*c + d*d mag = mpf_add(mpf_mul(c, c), mpf_mul(d, d), wp) # (a*c+b*d)/mag, (b*c-a*d)/mag t = mpf_add(mpf_mul(a,c), mpf_mul(b,d), wp) u = mpf_sub(mpf_mul(b,c), mpf_mul(a,d), wp) return mpf_div(t,mag,prec,rnd), mpf_div(u,mag,prec,rnd) def mpc_div_mpf(z, p, prec, rnd=round_fast): """Calculate z/p where p is real""" a, b = z re = mpf_div(a, p, prec, rnd) im = mpf_div(b, p, prec, rnd) return re, im def mpc_reciprocal(z, prec, rnd=round_fast): """Calculate 1/z efficiently""" a, b = z m = mpf_add(mpf_mul(a,a),mpf_mul(b,b),prec+10) re = mpf_div(a, m, prec, rnd) im = mpf_neg(mpf_div(b, m, prec, rnd)) return re, im def mpc_mpf_div(p, z, prec, rnd=round_fast): """Calculate p/z where p is real efficiently""" a, b = z m = mpf_add(mpf_mul(a,a),mpf_mul(b,b), prec+10) re = mpf_div(mpf_mul(a,p), m, prec, rnd) im = mpf_div(mpf_neg(mpf_mul(b,p)), m, prec, rnd) return re, im def complex_int_pow(a, b, n): """Complex integer power: computes (a+b*I)**n exactly for nonnegative n (a and b must be Python ints).""" wre = 1 wim = 0 while n: if n & 1: wre, wim = wre*a - wim*b, wim*a + wre*b n -= 1 a, b = a*a - b*b, 2*a*b n //= 2 return wre, wim def mpc_pow(z, w, prec, rnd=round_fast): if w[1] == fzero: return mpc_pow_mpf(z, w[0], prec, rnd) return mpc_exp(mpc_mul(mpc_log(z, prec+10), w, prec+10), prec, rnd) def mpc_pow_mpf(z, p, prec, rnd=round_fast): psign, pman, pexp, pbc = p if pexp >= 0: return mpc_pow_int(z, (-1)**psign * (pman< 0: aman <<= de aexp = bexp else: bman <<= (-de) bexp = aexp re, im = complex_int_pow(aman, bman, n) re = from_man_exp(re, int(n*aexp), prec, rnd) im = from_man_exp(im, int(n*bexp), prec, rnd) return re, im return mpc_exp(mpc_mul_int(mpc_log(z, prec+10), n, prec+10), prec, rnd) def mpc_sqrt(z, prec, rnd=round_fast): """Complex square root (principal branch). We have sqrt(a+bi) = sqrt((r+a)/2) + b/sqrt(2*(r+a))*i where r = abs(a+bi), when a+bi is not a negative real number.""" a, b = z if b == fzero: if a == fzero: return (a, b) # When a+bi is a negative real number, we get a real sqrt times i if a[0]: im = mpf_sqrt(mpf_neg(a), prec, rnd) return (fzero, im) else: re = mpf_sqrt(a, prec, rnd) return (re, fzero) wp = prec+20 if not a[0]: # case a positive t = mpf_add(mpc_abs((a, b), wp), a, wp) # t = abs(a+bi) + a u = mpf_shift(t, -1) # u = t/2 re = mpf_sqrt(u, prec, rnd) # re = sqrt(u) v = mpf_shift(t, 1) # v = 2*t w = mpf_sqrt(v, wp) # w = sqrt(v) im = mpf_div(b, w, prec, rnd) # im = b / w else: # case a negative t = mpf_sub(mpc_abs((a, b), wp), a, wp) # t = abs(a+bi) - a u = mpf_shift(t, -1) # u = t/2 im = mpf_sqrt(u, prec, rnd) # im = sqrt(u) v = mpf_shift(t, 1) # v = 2*t w = mpf_sqrt(v, wp) # w = sqrt(v) re = mpf_div(b, w, prec, rnd) # re = b/w if b[0]: re = mpf_neg(re) im = mpf_neg(im) return re, im def mpc_nthroot_fixed(a, b, n, prec): # a, b signed integers at fixed precision prec start = 50 a1 = int(rshift(a, prec - n*start)) b1 = int(rshift(b, prec - n*start)) try: r = (a1 + 1j * b1)**(1.0/n) re = r.real im = r.imag re = MPZ(int(re)) im = MPZ(int(im)) except OverflowError: a1 = from_int(a1, start) b1 = from_int(b1, start) fn = from_int(n) nth = mpf_rdiv_int(1, fn, start) re, im = mpc_pow((a1, b1), (nth, fzero), start) re = to_int(re) im = to_int(im) extra = 10 prevp = start extra1 = n for p in giant_steps(start, prec+extra): # this is slow for large n, unlike int_pow_fixed re2, im2 = complex_int_pow(re, im, n-1) re2 = rshift(re2, (n-1)*prevp - p - extra1) im2 = rshift(im2, (n-1)*prevp - p - extra1) r4 = (re2*re2 + im2*im2) >> (p + extra1) ap = rshift(a, prec - p) bp = rshift(b, prec - p) rec = (ap * re2 + bp * im2) >> p imc = (-ap * im2 + bp * re2) >> p reb = (rec << p) // r4 imb = (imc << p) // r4 re = (reb + (n-1)*lshift(re, p-prevp))//n im = (imb + (n-1)*lshift(im, p-prevp))//n prevp = p return re, im def mpc_nthroot(z, n, prec, rnd=round_fast): """ Complex n-th root. Use Newton method as in the real case when it is faster, otherwise use z**(1/n) """ a, b = z if a[0] == 0 and b == fzero: re = mpf_nthroot(a, n, prec, rnd) return (re, fzero) if n < 2: if n == 0: return mpc_one if n == 1: return mpc_pos((a, b), prec, rnd) if n == -1: return mpc_div(mpc_one, (a, b), prec, rnd) inverse = mpc_nthroot((a, b), -n, prec+5, reciprocal_rnd[rnd]) return mpc_div(mpc_one, inverse, prec, rnd) if n <= 20: prec2 = int(1.2 * (prec + 10)) asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b pf = mpc_abs((a,b), prec) if pf[-2] + pf[-1] > -10 and pf[-2] + pf[-1] < prec: af = to_fixed(a, prec2) bf = to_fixed(b, prec2) re, im = mpc_nthroot_fixed(af, bf, n, prec2) extra = 10 re = from_man_exp(re, -prec2-extra, prec2, rnd) im = from_man_exp(im, -prec2-extra, prec2, rnd) return re, im fn = from_int(n) prec2 = prec+10 + 10 nth = mpf_rdiv_int(1, fn, prec2) re, im = mpc_pow((a, b), (nth, fzero), prec2, rnd) re = normalize(re[0], re[1], re[2], re[3], prec, rnd) im = normalize(im[0], im[1], im[2], im[3], prec, rnd) return re, im def mpc_cbrt(z, prec, rnd=round_fast): """ Complex cubic root. """ return mpc_nthroot(z, 3, prec, rnd) def mpc_exp(z, prec, rnd=round_fast): """ Complex exponential function. We use the direct formula exp(a+bi) = exp(a) * (cos(b) + sin(b)*i) for the computation. This formula is very nice because it is pefectly stable; since we just do real multiplications, the only numerical errors that can creep in are single-ulp rounding errors. The formula is efficient since mpmath's real exp is quite fast and since we can compute cos and sin simultaneously. It is no problem if a and b are large; if the implementations of exp/cos/sin are accurate and efficient for all real numbers, then so is this function for all complex numbers. """ a, b = z if a == fzero: return mpf_cos_sin(b, prec, rnd) if b == fzero: return mpf_exp(a, prec, rnd), fzero mag = mpf_exp(a, prec+4, rnd) c, s = mpf_cos_sin(b, prec+4, rnd) re = mpf_mul(mag, c, prec, rnd) im = mpf_mul(mag, s, prec, rnd) return re, im def mpc_log(z, prec, rnd=round_fast): re = mpf_log_hypot(z[0], z[1], prec, rnd) im = mpc_arg(z, prec, rnd) return re, im def mpc_cos(z, prec, rnd=round_fast): """Complex cosine. The formula used is cos(a+bi) = cos(a)*cosh(b) - sin(a)*sinh(b)*i. The same comments apply as for the complex exp: only real multiplications are pewrormed, so no cancellation errors are possible. The formula is also efficient since we can compute both pairs (cos, sin) and (cosh, sinh) in single stwps.""" a, b = z if b == fzero: return mpf_cos(a, prec, rnd), fzero if a == fzero: return mpf_cosh(b, prec, rnd), fzero wp = prec + 6 c, s = mpf_cos_sin(a, wp) ch, sh = mpf_cosh_sinh(b, wp) re = mpf_mul(c, ch, prec, rnd) im = mpf_mul(s, sh, prec, rnd) return re, mpf_neg(im) def mpc_sin(z, prec, rnd=round_fast): """Complex sine. We have sin(a+bi) = sin(a)*cosh(b) + cos(a)*sinh(b)*i. See the docstring for mpc_cos for additional comments.""" a, b = z if b == fzero: return mpf_sin(a, prec, rnd), fzero if a == fzero: return fzero, mpf_sinh(b, prec, rnd) wp = prec + 6 c, s = mpf_cos_sin(a, wp) ch, sh = mpf_cosh_sinh(b, wp) re = mpf_mul(s, ch, prec, rnd) im = mpf_mul(c, sh, prec, rnd) return re, im def mpc_tan(z, prec, rnd=round_fast): """Complex tangent. Computed as tan(a+bi) = sin(2a)/M + sinh(2b)/M*i where M = cos(2a) + cosh(2b).""" a, b = z asign, aman, aexp, abc = a bsign, bman, bexp, bbc = b if b == fzero: return mpf_tan(a, prec, rnd), fzero if a == fzero: return fzero, mpf_tanh(b, prec, rnd) wp = prec + 15 a = mpf_shift(a, 1) b = mpf_shift(b, 1) c, s = mpf_cos_sin(a, wp) ch, sh = mpf_cosh_sinh(b, wp) # TODO: handle cancellation when c ~= -1 and ch ~= 1 mag = mpf_add(c, ch, wp) re = mpf_div(s, mag, prec, rnd) im = mpf_div(sh, mag, prec, rnd) return re, im def mpc_cos_pi(z, prec, rnd=round_fast): a, b = z if b == fzero: return mpf_cos_pi(a, prec, rnd), fzero b = mpf_mul(b, mpf_pi(prec+5), prec+5) if a == fzero: return mpf_cosh(b, prec, rnd), fzero wp = prec + 6 c, s = mpf_cos_sin_pi(a, wp) ch, sh = mpf_cosh_sinh(b, wp) re = mpf_mul(c, ch, prec, rnd) im = mpf_mul(s, sh, prec, rnd) return re, mpf_neg(im) def mpc_sin_pi(z, prec, rnd=round_fast): a, b = z if b == fzero: return mpf_sin_pi(a, prec, rnd), fzero b = mpf_mul(b, mpf_pi(prec+5), prec+5) if a == fzero: return fzero, mpf_sinh(b, prec, rnd) wp = prec + 6 c, s = mpf_cos_sin_pi(a, wp) ch, sh = mpf_cosh_sinh(b, wp) re = mpf_mul(s, ch, prec, rnd) im = mpf_mul(c, sh, prec, rnd) return re, im def mpc_cos_sin(z, prec, rnd=round_fast): a, b = z if a == fzero: ch, sh = mpf_cosh_sinh(b, prec, rnd) return (ch, fzero), (fzero, sh) if b == fzero: c, s = mpf_cos_sin(a, prec, rnd) return (c, fzero), (s, fzero) wp = prec + 6 c, s = mpf_cos_sin(a, wp) ch, sh = mpf_cosh_sinh(b, wp) cre = mpf_mul(c, ch, prec, rnd) cim = mpf_mul(s, sh, prec, rnd) sre = mpf_mul(s, ch, prec, rnd) sim = mpf_mul(c, sh, prec, rnd) return (cre, mpf_neg(cim)), (sre, sim) def mpc_cos_sin_pi(z, prec, rnd=round_fast): a, b = z if b == fzero: c, s = mpf_cos_sin_pi(a, prec, rnd) return (c, fzero), (s, fzero) b = mpf_mul(b, mpf_pi(prec+5), prec+5) if a == fzero: ch, sh = mpf_cosh_sinh(b, prec, rnd) return (ch, fzero), (fzero, sh) wp = prec + 6 c, s = mpf_cos_sin_pi(a, wp) ch, sh = mpf_cosh_sinh(b, wp) cre = mpf_mul(c, ch, prec, rnd) cim = mpf_mul(s, sh, prec, rnd) sre = mpf_mul(s, ch, prec, rnd) sim = mpf_mul(c, sh, prec, rnd) return (cre, mpf_neg(cim)), (sre, sim) def mpc_cosh(z, prec, rnd=round_fast): """Complex hyperbolic cosine. Computed as cosh(z) = cos(z*i).""" a, b = z return mpc_cos((b, mpf_neg(a)), prec, rnd) def mpc_sinh(z, prec, rnd=round_fast): """Complex hyperbolic sine. Computed as sinh(z) = -i*sin(z*i).""" a, b = z b, a = mpc_sin((b, a), prec, rnd) return a, b def mpc_tanh(z, prec, rnd=round_fast): """Complex hyperbolic tangent. Computed as tanh(z) = -i*tan(z*i).""" a, b = z b, a = mpc_tan((b, a), prec, rnd) return a, b # TODO: avoid loss of accuracy def mpc_atan(z, prec, rnd=round_fast): a, b = z # atan(z) = (I/2)*(log(1-I*z) - log(1+I*z)) # x = 1-I*z = 1 + b - I*a # y = 1+I*z = 1 - b + I*a wp = prec + 15 x = mpf_add(fone, b, wp), mpf_neg(a) y = mpf_sub(fone, b, wp), a l1 = mpc_log(x, wp) l2 = mpc_log(y, wp) a, b = mpc_sub(l1, l2, prec, rnd) # (I/2) * (a+b*I) = (-b/2 + a/2*I) v = mpf_neg(mpf_shift(b,-1)), mpf_shift(a,-1) # Subtraction at infinity gives correct real part but # wrong imaginary part (should be zero) if v[1] == fnan and mpc_is_inf(z): v = (v[0], fzero) return v beta_crossover = from_float(0.6417) alpha_crossover = from_float(1.5) def acos_asin(z, prec, rnd, n): """ complex acos for n = 0, asin for n = 1 The algorithm is described in T.E. Hull, T.F. Fairgrieve and P.T.P. Tang 'Implementing the Complex Arcsine and Arcosine Functions using Exception Handling', ACM Trans. on Math. Software Vol. 23 (1997), p299 The complex acos and asin can be defined as acos(z) = acos(beta) - I*sign(a)* log(alpha + sqrt(alpha**2 -1)) asin(z) = asin(beta) + I*sign(a)* log(alpha + sqrt(alpha**2 -1)) where z = a + I*b alpha = (1/2)*(r + s); beta = (1/2)*(r - s) = a/alpha r = sqrt((a+1)**2 + y**2); s = sqrt((a-1)**2 + y**2) These expressions are rewritten in different ways in different regions, delimited by two crossovers alpha_crossover and beta_crossover, and by abs(a) <= 1, in order to improve the numerical accuracy. """ a, b = z wp = prec + 10 # special cases with real argument if b == fzero: am = mpf_sub(fone, mpf_abs(a), wp) # case abs(a) <= 1 if not am[0]: if n == 0: return mpf_acos(a, prec, rnd), fzero else: return mpf_asin(a, prec, rnd), fzero # cases abs(a) > 1 else: # case a < -1 if a[0]: pi = mpf_pi(prec, rnd) c = mpf_acosh(mpf_neg(a), prec, rnd) if n == 0: return pi, mpf_neg(c) else: return mpf_neg(mpf_shift(pi, -1)), c # case a > 1 else: c = mpf_acosh(a, prec, rnd) if n == 0: return fzero, c else: pi = mpf_pi(prec, rnd) return mpf_shift(pi, -1), mpf_neg(c) asign = bsign = 0 if a[0]: a = mpf_neg(a) asign = 1 if b[0]: b = mpf_neg(b) bsign = 1 am = mpf_sub(fone, a, wp) ap = mpf_add(fone, a, wp) r = mpf_hypot(ap, b, wp) s = mpf_hypot(am, b, wp) alpha = mpf_shift(mpf_add(r, s, wp), -1) beta = mpf_div(a, alpha, wp) b2 = mpf_mul(b,b, wp) # case beta <= beta_crossover if not mpf_sub(beta_crossover, beta, wp)[0]: if n == 0: re = mpf_acos(beta, wp) else: re = mpf_asin(beta, wp) else: # to compute the real part in this region use the identity # asin(beta) = atan(beta/sqrt(1-beta**2)) # beta/sqrt(1-beta**2) = (alpha + a) * (alpha - a) # alpha + a is numerically accurate; alpha - a can have # cancellations leading to numerical inaccuracies, so rewrite # it in differente ways according to the region Ax = mpf_add(alpha, a, wp) # case a <= 1 if not am[0]: # c = b*b/(r + (a+1)); d = (s + (1-a)) # alpha - a = (1/2)*(c + d) # case n=0: re = atan(sqrt((1/2) * Ax * (c + d))/a) # case n=1: re = atan(a/sqrt((1/2) * Ax * (c + d))) c = mpf_div(b2, mpf_add(r, ap, wp), wp) d = mpf_add(s, am, wp) re = mpf_shift(mpf_mul(Ax, mpf_add(c, d, wp), wp), -1) if n == 0: re = mpf_atan(mpf_div(mpf_sqrt(re, wp), a, wp), wp) else: re = mpf_atan(mpf_div(a, mpf_sqrt(re, wp), wp), wp) else: # c = Ax/(r + (a+1)); d = Ax/(s - (1-a)) # alpha - a = (1/2)*(c + d) # case n = 0: re = atan(b*sqrt(c + d)/2/a) # case n = 1: re = atan(a/(b*sqrt(c + d)/2) c = mpf_div(Ax, mpf_add(r, ap, wp), wp) d = mpf_div(Ax, mpf_sub(s, am, wp), wp) re = mpf_shift(mpf_add(c, d, wp), -1) re = mpf_mul(b, mpf_sqrt(re, wp), wp) if n == 0: re = mpf_atan(mpf_div(re, a, wp), wp) else: re = mpf_atan(mpf_div(a, re, wp), wp) # to compute alpha + sqrt(alpha**2 - 1), if alpha <= alpha_crossover # replace it with 1 + Am1 + sqrt(Am1*(alpha+1))) # where Am1 = alpha -1 # if alpha <= alpha_crossover: if not mpf_sub(alpha_crossover, alpha, wp)[0]: c1 = mpf_div(b2, mpf_add(r, ap, wp), wp) # case a < 1 if mpf_neg(am)[0]: # Am1 = (1/2) * (b*b/(r + (a+1)) + b*b/(s + (1-a)) c2 = mpf_add(s, am, wp) c2 = mpf_div(b2, c2, wp) Am1 = mpf_shift(mpf_add(c1, c2, wp), -1) else: # Am1 = (1/2) * (b*b/(r + (a+1)) + (s - (1-a))) c2 = mpf_sub(s, am, wp) Am1 = mpf_shift(mpf_add(c1, c2, wp), -1) # im = log(1 + Am1 + sqrt(Am1*(alpha+1))) im = mpf_mul(Am1, mpf_add(alpha, fone, wp), wp) im = mpf_log(mpf_add(fone, mpf_add(Am1, mpf_sqrt(im, wp), wp), wp), wp) else: # im = log(alpha + sqrt(alpha*alpha - 1)) im = mpf_sqrt(mpf_sub(mpf_mul(alpha, alpha, wp), fone, wp), wp) im = mpf_log(mpf_add(alpha, im, wp), wp) if asign: if n == 0: re = mpf_sub(mpf_pi(wp), re, wp) else: re = mpf_neg(re) if not bsign and n == 0: im = mpf_neg(im) if bsign and n == 1: im = mpf_neg(im) re = normalize(re[0], re[1], re[2], re[3], prec, rnd) im = normalize(im[0], im[1], im[2], im[3], prec, rnd) return re, im def mpc_acos(z, prec, rnd=round_fast): return acos_asin(z, prec, rnd, 0) def mpc_asin(z, prec, rnd=round_fast): return acos_asin(z, prec, rnd, 1) def mpc_asinh(z, prec, rnd=round_fast): # asinh(z) = I * asin(-I z) a, b = z a, b = mpc_asin((b, mpf_neg(a)), prec, rnd) return mpf_neg(b), a def mpc_acosh(z, prec, rnd=round_fast): # acosh(z) = -I * acos(z) for Im(acos(z)) <= 0 # +I * acos(z) otherwise a, b = mpc_acos(z, prec, rnd) if b[0] or b == fzero: return mpf_neg(b), a else: return b, mpf_neg(a) def mpc_atanh(z, prec, rnd=round_fast): # atanh(z) = (log(1+z)-log(1-z))/2 wp = prec + 15 a = mpc_add(z, mpc_one, wp) b = mpc_sub(mpc_one, z, wp) a = mpc_log(a, wp) b = mpc_log(b, wp) v = mpc_shift(mpc_sub(a, b, wp), -1) # Subtraction at infinity gives correct imaginary part but # wrong real part (should be zero) if v[0] == fnan and mpc_is_inf(z): v = (fzero, v[1]) return v def mpc_fibonacci(z, prec, rnd=round_fast): re, im = z if im == fzero: return (mpf_fibonacci(re, prec, rnd), fzero) size = max(abs(re[2]+re[3]), abs(re[2]+re[3])) wp = prec + size + 20 a = mpf_phi(wp) b = mpf_add(mpf_shift(a, 1), fnone, wp) u = mpc_pow((a, fzero), z, wp) v = mpc_cos_pi(z, wp) v = mpc_div(v, u, wp) u = mpc_sub(u, v, wp) u = mpc_div_mpf(u, b, prec, rnd) return u def mpf_expj(x, prec, rnd='f'): raise ComplexResult def mpc_expj(z, prec, rnd='f'): re, im = z if im == fzero: return mpf_cos_sin(re, prec, rnd) if re == fzero: return mpf_exp(mpf_neg(im), prec, rnd), fzero ey = mpf_exp(mpf_neg(im), prec+10) c, s = mpf_cos_sin(re, prec+10) re = mpf_mul(ey, c, prec, rnd) im = mpf_mul(ey, s, prec, rnd) return re, im def mpf_expjpi(x, prec, rnd='f'): raise ComplexResult def mpc_expjpi(z, prec, rnd='f'): re, im = z if im == fzero: return mpf_cos_sin_pi(re, prec, rnd) sign, man, exp, bc = im wp = prec+10 if man: wp += max(0, exp+bc) im = mpf_neg(mpf_mul(mpf_pi(wp), im, wp)) if re == fzero: return mpf_exp(im, prec, rnd), fzero ey = mpf_exp(im, prec+10) c, s = mpf_cos_sin_pi(re, prec+10) re = mpf_mul(ey, c, prec, rnd) im = mpf_mul(ey, s, prec, rnd) return re, im if BACKEND == 'sage': try: import sage.libs.mpmath.ext_libmp as _lbmp mpc_exp = _lbmp.mpc_exp mpc_sqrt = _lbmp.mpc_sqrt except (ImportError, AttributeError): print("Warning: Sage imports in libmpc failed") mpmath-1.0.0/mpmath/libmp/libmpf.py000066400000000000000000001254711316273626600172400ustar00rootroot00000000000000""" Low-level functions for arbitrary-precision floating-point arithmetic. """ __docformat__ = 'plaintext' import math from bisect import bisect import sys # Importing random is slow #from random import getrandbits getrandbits = None from .backend import (MPZ, MPZ_TYPE, MPZ_ZERO, MPZ_ONE, MPZ_TWO, MPZ_FIVE, BACKEND, STRICT, HASH_MODULUS, HASH_BITS, gmpy, sage, sage_utils) from .libintmath import (giant_steps, trailtable, bctable, lshift, rshift, bitcount, trailing, sqrt_fixed, numeral, isqrt, isqrt_fast, sqrtrem, bin_to_radix) # We don't pickle tuples directly for the following reasons: # 1: pickle uses str() for ints, which is inefficient when they are large # 2: pickle doesn't work for gmpy mpzs # Both problems are solved by using hex() if BACKEND == 'sage': def to_pickable(x): sign, man, exp, bc = x return sign, hex(man), exp, bc else: def to_pickable(x): sign, man, exp, bc = x return sign, hex(man)[2:], exp, bc def from_pickable(x): sign, man, exp, bc = x return (sign, MPZ(man, 16), exp, bc) class ComplexResult(ValueError): pass try: intern except NameError: intern = lambda x: x # All supported rounding modes round_nearest = intern('n') round_floor = intern('f') round_ceiling = intern('c') round_up = intern('u') round_down = intern('d') round_fast = round_down def prec_to_dps(n): """Return number of accurate decimals that can be represented with a precision of n bits.""" return max(1, int(round(int(n)/3.3219280948873626)-1)) def dps_to_prec(n): """Return the number of bits required to represent n decimals accurately.""" return max(1, int(round((int(n)+1)*3.3219280948873626))) def repr_dps(n): """Return the number of decimal digits required to represent a number with n-bit precision so that it can be uniquely reconstructed from the representation.""" dps = prec_to_dps(n) if dps == 15: return 17 return dps + 3 #----------------------------------------------------------------------------# # Some commonly needed float values # #----------------------------------------------------------------------------# # Regular number format: # (-1)**sign * mantissa * 2**exponent, plus bitcount of mantissa fzero = (0, MPZ_ZERO, 0, 0) fnzero = (1, MPZ_ZERO, 0, 0) fone = (0, MPZ_ONE, 0, 1) fnone = (1, MPZ_ONE, 0, 1) ftwo = (0, MPZ_ONE, 1, 1) ften = (0, MPZ_FIVE, 1, 3) fhalf = (0, MPZ_ONE, -1, 1) # Arbitrary encoding for special numbers: zero mantissa, nonzero exponent fnan = (0, MPZ_ZERO, -123, -1) finf = (0, MPZ_ZERO, -456, -2) fninf = (1, MPZ_ZERO, -789, -3) # Was 1e1000; this is broken in Python 2.4 math_float_inf = 1e300 * 1e300 #----------------------------------------------------------------------------# # Rounding # #----------------------------------------------------------------------------# # This function can be used to round a mantissa generally. However, # we will try to do most rounding inline for efficiency. def round_int(x, n, rnd): if rnd == round_nearest: if x >= 0: t = x >> (n-1) if t & 1 and ((t & 2) or (x & h_mask[n<300][n])): return (t>>1)+1 else: return t>>1 else: return -round_int(-x, n, rnd) if rnd == round_floor: return x >> n if rnd == round_ceiling: return -((-x) >> n) if rnd == round_down: if x >= 0: return x >> n return -((-x) >> n) if rnd == round_up: if x >= 0: return -((-x) >> n) return x >> n # These masks are used to pick out segments of numbers to determine # which direction to round when rounding to nearest. class h_mask_big: def __getitem__(self, n): return (MPZ_ONE<<(n-1))-1 h_mask_small = [0]+[((MPZ_ONE<<(_-1))-1) for _ in range(1, 300)] h_mask = [h_mask_big(), h_mask_small] # The >> operator rounds to floor. shifts_down[rnd][sign] # tells whether this is the right direction to use, or if the # number should be negated before shifting shifts_down = {round_floor:(1,0), round_ceiling:(0,1), round_down:(1,1), round_up:(0,0)} #----------------------------------------------------------------------------# # Normalization of raw mpfs # #----------------------------------------------------------------------------# # This function is called almost every time an mpf is created. # It has been optimized accordingly. def _normalize(sign, man, exp, bc, prec, rnd): """ Create a raw mpf tuple with value (-1)**sign * man * 2**exp and normalized mantissa. The mantissa is rounded in the specified direction if its size exceeds the precision. Trailing zero bits are also stripped from the mantissa to ensure that the representation is canonical. Conditions on the input: * The input must represent a regular (finite) number * The sign bit must be 0 or 1 * The mantissa must be positive * The exponent must be an integer * The bitcount must be exact If these conditions are not met, use from_man_exp, mpf_pos, or any of the conversion functions to create normalized raw mpf tuples. """ if not man: return fzero # Cut mantissa down to size if larger than target precision n = bc - prec if n > 0: if rnd == round_nearest: t = man >> (n-1) if t & 1 and ((t & 2) or (man & h_mask[n<300][n])): man = (t>>1)+1 else: man = t>>1 elif shifts_down[rnd][sign]: man >>= n else: man = -((-man)>>n) exp += n bc = prec # Strip trailing bits if not man & 1: t = trailtable[int(man & 255)] if not t: while not man & 255: man >>= 8 exp += 8 bc -= 8 t = trailtable[int(man & 255)] man >>= t exp += t bc -= t # Bit count can be wrong if the input mantissa was 1 less than # a power of 2 and got rounded up, thereby adding an extra bit. # With trailing bits removed, all powers of two have mantissa 1, # so this is easy to check for. if man == 1: bc = 1 return sign, man, exp, bc def _normalize1(sign, man, exp, bc, prec, rnd): """same as normalize, but with the added condition that man is odd or zero """ if not man: return fzero if bc <= prec: return sign, man, exp, bc n = bc - prec if rnd == round_nearest: t = man >> (n-1) if t & 1 and ((t & 2) or (man & h_mask[n<300][n])): man = (t>>1)+1 else: man = t>>1 elif shifts_down[rnd][sign]: man >>= n else: man = -((-man)>>n) exp += n bc = prec # Strip trailing bits if not man & 1: t = trailtable[int(man & 255)] if not t: while not man & 255: man >>= 8 exp += 8 bc -= 8 t = trailtable[int(man & 255)] man >>= t exp += t bc -= t # Bit count can be wrong if the input mantissa was 1 less than # a power of 2 and got rounded up, thereby adding an extra bit. # With trailing bits removed, all powers of two have mantissa 1, # so this is easy to check for. if man == 1: bc = 1 return sign, man, exp, bc try: _exp_types = (int, long) except NameError: _exp_types = (int,) def strict_normalize(sign, man, exp, bc, prec, rnd): """Additional checks on the components of an mpf. Enable tests by setting the environment variable MPMATH_STRICT to Y.""" assert type(man) == MPZ_TYPE assert type(bc) in _exp_types assert type(exp) in _exp_types assert bc == bitcount(man) return _normalize(sign, man, exp, bc, prec, rnd) def strict_normalize1(sign, man, exp, bc, prec, rnd): """Additional checks on the components of an mpf. Enable tests by setting the environment variable MPMATH_STRICT to Y.""" assert type(man) == MPZ_TYPE assert type(bc) in _exp_types assert type(exp) in _exp_types assert bc == bitcount(man) assert (not man) or (man & 1) return _normalize1(sign, man, exp, bc, prec, rnd) if BACKEND == 'gmpy' and '_mpmath_normalize' in dir(gmpy): _normalize = gmpy._mpmath_normalize _normalize1 = gmpy._mpmath_normalize if BACKEND == 'sage': _normalize = _normalize1 = sage_utils.normalize if STRICT: normalize = strict_normalize normalize1 = strict_normalize1 else: normalize = _normalize normalize1 = _normalize1 #----------------------------------------------------------------------------# # Conversion functions # #----------------------------------------------------------------------------# def from_man_exp(man, exp, prec=None, rnd=round_fast): """Create raw mpf from (man, exp) pair. The mantissa may be signed. If no precision is specified, the mantissa is stored exactly.""" man = MPZ(man) sign = 0 if man < 0: sign = 1 man = -man if man < 1024: bc = bctable[int(man)] else: bc = bitcount(man) if not prec: if not man: return fzero if not man & 1: if man & 2: return (sign, man >> 1, exp + 1, bc - 1) t = trailtable[int(man & 255)] if not t: while not man & 255: man >>= 8 exp += 8 bc -= 8 t = trailtable[int(man & 255)] man >>= t exp += t bc -= t return (sign, man, exp, bc) return normalize(sign, man, exp, bc, prec, rnd) int_cache = dict((n, from_man_exp(n, 0)) for n in range(-10, 257)) if BACKEND == 'gmpy' and '_mpmath_create' in dir(gmpy): from_man_exp = gmpy._mpmath_create if BACKEND == 'sage': from_man_exp = sage_utils.from_man_exp def from_int(n, prec=0, rnd=round_fast): """Create a raw mpf from an integer. If no precision is specified, the mantissa is stored exactly.""" if not prec: if n in int_cache: return int_cache[n] return from_man_exp(n, 0, prec, rnd) def to_man_exp(s): """Return (man, exp) of a raw mpf. Raise an error if inf/nan.""" sign, man, exp, bc = s if (not man) and exp: raise ValueError("mantissa and exponent are undefined for %s" % man) return man, exp def to_int(s, rnd=None): """Convert a raw mpf to the nearest int. Rounding is done down by default (same as int(float) in Python), but can be changed. If the input is inf/nan, an exception is raised.""" sign, man, exp, bc = s if (not man) and exp: raise ValueError("cannot convert inf or nan to int") if exp >= 0: if sign: return (-man) << exp return man << exp # Make default rounding fast if not rnd: if sign: return -(man >> (-exp)) else: return man >> (-exp) if sign: return round_int(-man, -exp, rnd) else: return round_int(man, -exp, rnd) def mpf_round_int(s, rnd): sign, man, exp, bc = s if (not man) and exp: return s if exp >= 0: return s mag = exp+bc if mag < 1: if rnd == round_ceiling: if sign: return fzero else: return fone elif rnd == round_floor: if sign: return fnone else: return fzero elif rnd == round_nearest: if mag < 0 or man == MPZ_ONE: return fzero elif sign: return fnone else: return fone else: raise NotImplementedError return mpf_pos(s, min(bc, mag), rnd) def mpf_floor(s, prec=0, rnd=round_fast): v = mpf_round_int(s, round_floor) if prec: v = mpf_pos(v, prec, rnd) return v def mpf_ceil(s, prec=0, rnd=round_fast): v = mpf_round_int(s, round_ceiling) if prec: v = mpf_pos(v, prec, rnd) return v def mpf_nint(s, prec=0, rnd=round_fast): v = mpf_round_int(s, round_nearest) if prec: v = mpf_pos(v, prec, rnd) return v def mpf_frac(s, prec=0, rnd=round_fast): return mpf_sub(s, mpf_floor(s), prec, rnd) def from_float(x, prec=53, rnd=round_fast): """Create a raw mpf from a Python float, rounding if necessary. If prec >= 53, the result is guaranteed to represent exactly the same number as the input. If prec is not specified, use prec=53.""" # frexp only raises an exception for nan on some platforms if x != x: return fnan # in Python2.5 math.frexp gives an exception for float infinity # in Python2.6 it returns (float infinity, 0) try: m, e = math.frexp(x) except: if x == math_float_inf: return finf if x == -math_float_inf: return fninf return fnan if x == math_float_inf: return finf if x == -math_float_inf: return fninf return from_man_exp(int(m*(1<<53)), e-53, prec, rnd) def to_float(s, strict=False, rnd=round_fast): """ Convert a raw mpf to a Python float. The result is exact if the bitcount of s is <= 53 and no underflow/overflow occurs. If the number is too large or too small to represent as a regular float, it will be converted to inf or 0.0. Setting strict=True forces an OverflowError to be raised instead. Warning: with a directed rounding mode, the correct nearest representable floating-point number in the specified direction might not be computed in case of overflow or (gradual) underflow. """ sign, man, exp, bc = s if not man: if s == fzero: return 0.0 if s == finf: return math_float_inf if s == fninf: return -math_float_inf return math_float_inf/math_float_inf if bc > 53: sign, man, exp, bc = normalize1(sign, man, exp, bc, 53, rnd) if sign: man = -man try: return math.ldexp(man, exp) except OverflowError: if strict: raise # Overflow to infinity if exp + bc > 0: if sign: return -math_float_inf else: return math_float_inf # Underflow to zero return 0.0 def from_rational(p, q, prec, rnd=round_fast): """Create a raw mpf from a rational number p/q, round if necessary.""" return mpf_div(from_int(p), from_int(q), prec, rnd) def to_rational(s): """Convert a raw mpf to a rational number. Return integers (p, q) such that s = p/q exactly.""" sign, man, exp, bc = s if sign: man = -man if bc == -1: raise ValueError("cannot convert %s to a rational number" % man) if exp >= 0: return man * (1<= 0: return (-man) << offset else: return (-man) >> (-offset) else: if offset >= 0: return man << offset else: return man >> (-offset) ############################################################################## ############################################################################## #----------------------------------------------------------------------------# # Arithmetic operations, etc. # #----------------------------------------------------------------------------# def mpf_rand(prec): """Return a raw mpf chosen randomly from [0, 1), with prec bits in the mantissa.""" global getrandbits if not getrandbits: import random getrandbits = random.getrandbits return from_man_exp(getrandbits(prec), -prec, prec, round_floor) def mpf_eq(s, t): """Test equality of two raw mpfs. This is simply tuple comparison unless either number is nan, in which case the result is False.""" if not s[1] or not t[1]: if s == fnan or t == fnan: return False return s == t def mpf_hash(s): # Duplicate the new hash algorithm introduces in Python 3.2. if sys.version >= "3.2": ssign, sman, sexp, sbc = s # Handle special numbers if not sman: if s == fnan: return sys.hash_info.nan if s == finf: return sys.hash_info.inf if s == fninf: return -sys.hash_info.inf h = sman % HASH_MODULUS if sexp >= 0: sexp = sexp % HASH_BITS else: sexp = HASH_BITS - 1 - ((-1 - sexp) % HASH_BITS) h = (h << sexp) % HASH_MODULUS if ssign: h = -h if h == -1: h == -2 return int(h) else: try: # Try to be compatible with hash values for floats and ints return hash(to_float(s, strict=1)) except OverflowError: # We must unfortunately sacrifice compatibility with ints here. # We could do hash(man << exp) when the exponent is positive, but # this would cause unreasonable inefficiency for large numbers. return hash(s) def mpf_cmp(s, t): """Compare the raw mpfs s and t. Return -1 if s < t, 0 if s == t, and 1 if s > t. (Same convention as Python's cmp() function.)""" # In principle, a comparison amounts to determining the sign of s-t. # A full subtraction is relatively slow, however, so we first try to # look at the components. ssign, sman, sexp, sbc = s tsign, tman, texp, tbc = t # Handle zeros and special numbers if not sman or not tman: if s == fzero: return -mpf_sign(t) if t == fzero: return mpf_sign(s) if s == t: return 0 # Follow same convention as Python's cmp for float nan if t == fnan: return 1 if s == finf: return 1 if t == fninf: return 1 return -1 # Different sides of zero if ssign != tsign: if not ssign: return 1 return -1 # This reduces to direct integer comparison if sexp == texp: if sman == tman: return 0 if sman > tman: if ssign: return -1 else: return 1 else: if ssign: return 1 else: return -1 # Check position of the highest set bit in each number. If # different, there is certainly an inequality. a = sbc + sexp b = tbc + texp if ssign: if a < b: return 1 if a > b: return -1 else: if a < b: return -1 if a > b: return 1 # Both numbers have the same highest bit. Subtract to find # how the lower bits compare. delta = mpf_sub(s, t, 5, round_floor) if delta[0]: return -1 return 1 def mpf_lt(s, t): if s == fnan or t == fnan: return False return mpf_cmp(s, t) < 0 def mpf_le(s, t): if s == fnan or t == fnan: return False return mpf_cmp(s, t) <= 0 def mpf_gt(s, t): if s == fnan or t == fnan: return False return mpf_cmp(s, t) > 0 def mpf_ge(s, t): if s == fnan or t == fnan: return False return mpf_cmp(s, t) >= 0 def mpf_min_max(seq): min = max = seq[0] for x in seq[1:]: if mpf_lt(x, min): min = x if mpf_gt(x, max): max = x return min, max def mpf_pos(s, prec=0, rnd=round_fast): """Calculate 0+s for a raw mpf (i.e., just round s to the specified precision).""" if prec: sign, man, exp, bc = s if (not man) and exp: return s return normalize1(sign, man, exp, bc, prec, rnd) return s def mpf_neg(s, prec=None, rnd=round_fast): """Negate a raw mpf (return -s), rounding the result to the specified precision. The prec argument can be omitted to do the operation exactly.""" sign, man, exp, bc = s if not man: if exp: if s == finf: return fninf if s == fninf: return finf return s if not prec: return (1-sign, man, exp, bc) return normalize1(1-sign, man, exp, bc, prec, rnd) def mpf_abs(s, prec=None, rnd=round_fast): """Return abs(s) of the raw mpf s, rounded to the specified precision. The prec argument can be omitted to generate an exact result.""" sign, man, exp, bc = s if (not man) and exp: if s == fninf: return finf return s if not prec: if sign: return (0, man, exp, bc) return s return normalize1(0, man, exp, bc, prec, rnd) def mpf_sign(s): """Return -1, 0, or 1 (as a Python int, not a raw mpf) depending on whether s is negative, zero, or positive. (Nan is taken to give 0.)""" sign, man, exp, bc = s if not man: if s == finf: return 1 if s == fninf: return -1 return 0 return (-1) ** sign def mpf_add(s, t, prec=0, rnd=round_fast, _sub=0): """ Add the two raw mpf values s and t. With prec=0, no rounding is performed. Note that this can produce a very large mantissa (potentially too large to fit in memory) if exponents are far apart. """ ssign, sman, sexp, sbc = s tsign, tman, texp, tbc = t tsign ^= _sub # Standard case: two nonzero, regular numbers if sman and tman: offset = sexp - texp if offset: if offset > 0: # Outside precision range; only need to perturb if offset > 100 and prec: delta = sbc + sexp - tbc - texp if delta > prec + 4: offset = prec + 4 sman <<= offset if tsign == ssign: sman += 1 else: sman -= 1 return normalize1(ssign, sman, sexp-offset, bitcount(sman), prec, rnd) # Add if ssign == tsign: man = tman + (sman << offset) # Subtract else: if ssign: man = tman - (sman << offset) else: man = (sman << offset) - tman if man >= 0: ssign = 0 else: man = -man ssign = 1 bc = bitcount(man) return normalize1(ssign, man, texp, bc, prec or bc, rnd) elif offset < 0: # Outside precision range; only need to perturb if offset < -100 and prec: delta = tbc + texp - sbc - sexp if delta > prec + 4: offset = prec + 4 tman <<= offset if ssign == tsign: tman += 1 else: tman -= 1 return normalize1(tsign, tman, texp-offset, bitcount(tman), prec, rnd) # Add if ssign == tsign: man = sman + (tman << -offset) # Subtract else: if tsign: man = sman - (tman << -offset) else: man = (tman << -offset) - sman if man >= 0: ssign = 0 else: man = -man ssign = 1 bc = bitcount(man) return normalize1(ssign, man, sexp, bc, prec or bc, rnd) # Equal exponents; no shifting necessary if ssign == tsign: man = tman + sman else: if ssign: man = tman - sman else: man = sman - tman if man >= 0: ssign = 0 else: man = -man ssign = 1 bc = bitcount(man) return normalize(ssign, man, texp, bc, prec or bc, rnd) # Handle zeros and special numbers if _sub: t = mpf_neg(t) if not sman: if sexp: if s == t or tman or not texp: return s return fnan if tman: return normalize1(tsign, tman, texp, tbc, prec or tbc, rnd) return t if texp: return t if sman: return normalize1(ssign, sman, sexp, sbc, prec or sbc, rnd) return s def mpf_sub(s, t, prec=0, rnd=round_fast): """Return the difference of two raw mpfs, s-t. This function is simply a wrapper of mpf_add that changes the sign of t.""" return mpf_add(s, t, prec, rnd, 1) def mpf_sum(xs, prec=0, rnd=round_fast, absolute=False): """ Sum a list of mpf values efficiently and accurately (typically no temporary roundoff occurs). If prec=0, the final result will not be rounded either. There may be roundoff error or cancellation if extremely large exponent differences occur. With absolute=True, sums the absolute values. """ man = 0 exp = 0 max_extra_prec = prec*2 or 1000000 # XXX special = None for x in xs: xsign, xman, xexp, xbc = x if xman: if xsign and not absolute: xman = -xman delta = xexp - exp if xexp >= exp: # x much larger than existing sum? # first: quick test if (delta > max_extra_prec) and \ ((not man) or delta-bitcount(abs(man)) > max_extra_prec): man = xman exp = xexp else: man += (xman << delta) else: delta = -delta # x much smaller than existing sum? if delta-xbc > max_extra_prec: if not man: man, exp = xman, xexp else: man = (man << delta) + xman exp = xexp elif xexp: if absolute: x = mpf_abs(x) special = mpf_add(special or fzero, x, 1) # Will be inf or nan if special: return special return from_man_exp(man, exp, prec, rnd) def gmpy_mpf_mul(s, t, prec=0, rnd=round_fast): """Multiply two raw mpfs""" ssign, sman, sexp, sbc = s tsign, tman, texp, tbc = t sign = ssign ^ tsign man = sman*tman if man: bc = bitcount(man) if prec: return normalize1(sign, man, sexp+texp, bc, prec, rnd) else: return (sign, man, sexp+texp, bc) s_special = (not sman) and sexp t_special = (not tman) and texp if not s_special and not t_special: return fzero if fnan in (s, t): return fnan if (not tman) and texp: s, t = t, s if t == fzero: return fnan return {1:finf, -1:fninf}[mpf_sign(s) * mpf_sign(t)] def gmpy_mpf_mul_int(s, n, prec, rnd=round_fast): """Multiply by a Python integer.""" sign, man, exp, bc = s if not man: return mpf_mul(s, from_int(n), prec, rnd) if not n: return fzero if n < 0: sign ^= 1 n = -n man *= n return normalize(sign, man, exp, bitcount(man), prec, rnd) def python_mpf_mul(s, t, prec=0, rnd=round_fast): """Multiply two raw mpfs""" ssign, sman, sexp, sbc = s tsign, tman, texp, tbc = t sign = ssign ^ tsign man = sman*tman if man: bc = sbc + tbc - 1 bc += int(man>>bc) if prec: return normalize1(sign, man, sexp+texp, bc, prec, rnd) else: return (sign, man, sexp+texp, bc) s_special = (not sman) and sexp t_special = (not tman) and texp if not s_special and not t_special: return fzero if fnan in (s, t): return fnan if (not tman) and texp: s, t = t, s if t == fzero: return fnan return {1:finf, -1:fninf}[mpf_sign(s) * mpf_sign(t)] def python_mpf_mul_int(s, n, prec, rnd=round_fast): """Multiply by a Python integer.""" sign, man, exp, bc = s if not man: return mpf_mul(s, from_int(n), prec, rnd) if not n: return fzero if n < 0: sign ^= 1 n = -n man *= n # Generally n will be small if n < 1024: bc += bctable[int(n)] - 1 else: bc += bitcount(n) - 1 bc += int(man>>bc) return normalize(sign, man, exp, bc, prec, rnd) if BACKEND == 'gmpy': mpf_mul = gmpy_mpf_mul mpf_mul_int = gmpy_mpf_mul_int else: mpf_mul = python_mpf_mul mpf_mul_int = python_mpf_mul_int def mpf_shift(s, n): """Quickly multiply the raw mpf s by 2**n without rounding.""" sign, man, exp, bc = s if not man: return s return sign, man, exp+n, bc def mpf_frexp(x): """Convert x = y*2**n to (y, n) with abs(y) in [0.5, 1) if nonzero""" sign, man, exp, bc = x if not man: if x == fzero: return (fzero, 0) else: raise ValueError return mpf_shift(x, -bc-exp), bc+exp def mpf_div(s, t, prec, rnd=round_fast): """Floating-point division""" ssign, sman, sexp, sbc = s tsign, tman, texp, tbc = t if not sman or not tman: if s == fzero: if t == fzero: raise ZeroDivisionError if t == fnan: return fnan return fzero if t == fzero: raise ZeroDivisionError s_special = (not sman) and sexp t_special = (not tman) and texp if s_special and t_special: return fnan if s == fnan or t == fnan: return fnan if not t_special: if t == fzero: return fnan return {1:finf, -1:fninf}[mpf_sign(s) * mpf_sign(t)] return fzero sign = ssign ^ tsign if tman == 1: return normalize1(sign, sman, sexp-texp, sbc, prec, rnd) # Same strategy as for addition: if there is a remainder, perturb # the result a few bits outside the precision range before rounding extra = prec - sbc + tbc + 5 if extra < 5: extra = 5 quot, rem = divmod(sman< sexp+sbc: return s # Another important special case: this allows us to do e.g. x % 1.0 # to find the fractional part of x, and it will work when x is huge. if tman == 1 and sexp > texp+tbc: return fzero base = min(sexp, texp) sman = (-1)**ssign * sman tman = (-1)**tsign * tman man = (sman << (sexp-base)) % (tman << (texp-base)) if man >= 0: sign = 0 else: man = -man sign = 1 return normalize(sign, man, base, bitcount(man), prec, rnd) reciprocal_rnd = { round_down : round_up, round_up : round_down, round_floor : round_ceiling, round_ceiling : round_floor, round_nearest : round_nearest } negative_rnd = { round_down : round_down, round_up : round_up, round_floor : round_ceiling, round_ceiling : round_floor, round_nearest : round_nearest } def mpf_pow_int(s, n, prec, rnd=round_fast): """Compute s**n, where s is a raw mpf and n is a Python integer.""" sign, man, exp, bc = s if (not man) and exp: if s == finf: if n > 0: return s if n == 0: return fnan return fzero if s == fninf: if n > 0: return [finf, fninf][n & 1] if n == 0: return fnan return fzero return fnan n = int(n) if n == 0: return fone if n == 1: return mpf_pos(s, prec, rnd) if n == 2: _, man, exp, bc = s if not man: return fzero man = man*man if man == 1: return (0, MPZ_ONE, exp+exp, 1) bc = bc + bc - 2 bc += bctable[int(man>>bc)] return normalize1(0, man, exp+exp, bc, prec, rnd) if n == -1: return mpf_div(fone, s, prec, rnd) if n < 0: inverse = mpf_pow_int(s, -n, prec+5, reciprocal_rnd[rnd]) return mpf_div(fone, inverse, prec, rnd) result_sign = sign & n # Use exact integer power when the exact mantissa is small if man == 1: return (result_sign, MPZ_ONE, exp*n, 1) if bc*n < 1000: man **= n return normalize1(result_sign, man, exp*n, bitcount(man), prec, rnd) # Use directed rounding all the way through to maintain rigorous # bounds for interval arithmetic rounds_down = (rnd == round_nearest) or \ shifts_down[rnd][result_sign] # Now we perform binary exponentiation. Need to estimate precision # to avoid rounding errors from temporary operations. Roughly log_2(n) # operations are performed. workprec = prec + 4*bitcount(n) + 4 _, pm, pe, pbc = fone while 1: if n & 1: pm = pm*man pe = pe+exp pbc += bc - 2 pbc = pbc + bctable[int(pm >> pbc)] if pbc > workprec: if rounds_down: pm = pm >> (pbc-workprec) else: pm = -((-pm) >> (pbc-workprec)) pe += pbc - workprec pbc = workprec n -= 1 if not n: break man = man*man exp = exp+exp bc = bc + bc - 2 bc = bc + bctable[int(man >> bc)] if bc > workprec: if rounds_down: man = man >> (bc-workprec) else: man = -((-man) >> (bc-workprec)) exp += bc - workprec bc = workprec n = n // 2 return normalize(result_sign, pm, pe, pbc, prec, rnd) def mpf_perturb(x, eps_sign, prec, rnd): """ For nonzero x, calculate x + eps with directed rounding, where eps < prec relatively and eps has the given sign (0 for positive, 1 for negative). With rounding to nearest, this is taken to simply normalize x to the given precision. """ if rnd == round_nearest: return mpf_pos(x, prec, rnd) sign, man, exp, bc = x eps = (eps_sign, MPZ_ONE, exp+bc-prec-1, 1) if sign: away = (rnd in (round_down, round_ceiling)) ^ eps_sign else: away = (rnd in (round_up, round_ceiling)) ^ eps_sign if away: return mpf_add(x, eps, prec, rnd) else: return mpf_pos(x, prec, rnd) #----------------------------------------------------------------------------# # Radix conversion # #----------------------------------------------------------------------------# def to_digits_exp(s, dps): """Helper function for representing the floating-point number s as a decimal with dps digits. Returns (sign, string, exponent) where sign is '' or '-', string is the digit string, and exponent is the decimal exponent as an int. If inexact, the decimal representation is rounded toward zero.""" # Extract sign first so it doesn't mess up the string digit count if s[0]: sign = '-' s = mpf_neg(s) else: sign = '' _sign, man, exp, bc = s if not man: return '', '0', 0 bitprec = int(dps * math.log(10,2)) + 10 # Cut down to size # TODO: account for precision when doing this exp_from_1 = exp + bc if abs(exp_from_1) > 3500: from .libelefun import mpf_ln2, mpf_ln10 # Set b = int(exp * log(2)/log(10)) # If exp is huge, we must use high-precision arithmetic to # find the nearest power of ten expprec = bitcount(abs(exp)) + 5 tmp = from_int(exp) tmp = mpf_mul(tmp, mpf_ln2(expprec)) tmp = mpf_div(tmp, mpf_ln10(expprec), expprec) b = to_int(tmp) s = mpf_div(s, mpf_pow_int(ften, b, bitprec), bitprec) _sign, man, exp, bc = s exponent = b else: exponent = 0 # First, calculate mantissa digits by converting to a binary # fixed-point number and then converting that number to # a decimal fixed-point number. fixprec = max(bitprec - exp - bc, 0) fixdps = int(fixprec / math.log(10,2) + 0.5) sf = to_fixed(s, fixprec) sd = bin_to_radix(sf, fixprec, 10, fixdps) digits = numeral(sd, base=10, size=dps) exponent += len(digits) - fixdps - 1 return sign, digits, exponent def to_str(s, dps, strip_zeros=True, min_fixed=None, max_fixed=None, show_zero_exponent=False): """ Convert a raw mpf to a decimal floating-point literal with at most `dps` decimal digits in the mantissa (not counting extra zeros that may be inserted for visual purposes). The number will be printed in fixed-point format if the position of the leading digit is strictly between min_fixed (default = min(-dps/3,-5)) and max_fixed (default = dps). To force fixed-point format always, set min_fixed = -inf, max_fixed = +inf. To force floating-point format, set min_fixed >= max_fixed. The literal is formatted so that it can be parsed back to a number by to_str, float() or Decimal(). """ # Special numbers if not s[1]: if s == fzero: if dps: t = '0.0' else: t = '.0' if show_zero_exponent: t += 'e+0' return t if s == finf: return '+inf' if s == fninf: return '-inf' if s == fnan: return 'nan' raise ValueError if min_fixed is None: min_fixed = min(-(dps//3), -5) if max_fixed is None: max_fixed = dps # to_digits_exp rounds to floor. # This sometimes kills some instances of "...00001" sign, digits, exponent = to_digits_exp(s, dps+3) # No digits: show only .0; round exponent to nearest if not dps: if digits[0] in '56789': exponent += 1 digits = ".0" else: # Rounding up kills some instances of "...99999" if len(digits) > dps and digits[dps] in '56789' and \ (dps < 500 or digits[dps-4:dps] == '9999'): digits2 = str(int(digits[:dps]) + 1) if len(digits2) > dps: digits2 = digits2[:dps] exponent += 1 digits = digits2 else: digits = digits[:dps] # Prettify numbers close to unit magnitude if min_fixed < exponent < max_fixed: if exponent < 0: digits = ("0"*int(-exponent)) + digits split = 1 else: split = exponent + 1 if split > dps: digits += "0"*(split-dps) exponent = 0 else: split = 1 digits = (digits[:split] + "." + digits[split:]) if strip_zeros: # Clean up trailing zeros digits = digits.rstrip('0') if digits[-1] == ".": digits += "0" if exponent == 0 and dps and not show_zero_exponent: return sign + digits if exponent >= 0: return sign + digits + "e+" + str(exponent) if exponent < 0: return sign + digits + "e" + str(exponent) def str_to_man_exp(x, base=10): """Helper function for from_str.""" # Verify that the input is a valid float literal float(x) # Split into mantissa, exponent x = x.lower() parts = x.split('e') if len(parts) == 1: exp = 0 else: # == 2 x = parts[0] exp = int(parts[1]) # Look for radix point in mantissa parts = x.split('.') if len(parts) == 2: a, b = parts[0], parts[1].rstrip('0') exp -= len(b) x = a + b x = MPZ(int(x, base)) return x, exp special_str = {'inf':finf, '+inf':finf, '-inf':fninf, 'nan':fnan} def from_str(x, prec, rnd=round_fast): """Create a raw mpf from a decimal literal, rounding in the specified direction if the input number cannot be represented exactly as a binary floating-point number with the given number of bits. The literal syntax accepted is the same as for Python floats. TODO: the rounding does not work properly for large exponents. """ x = x.strip() if x in special_str: return special_str[x] if '/' in x: p, q = x.split('/') return from_rational(int(p), int(q), prec, rnd) man, exp = str_to_man_exp(x, base=10) # XXX: appropriate cutoffs & track direction # note no factors of 5 if abs(exp) > 400: s = from_int(man, prec+10) s = mpf_mul(s, mpf_pow_int(ften, exp, prec+10), prec, rnd) else: if exp >= 0: s = from_int(man * 10**exp, prec, rnd) else: s = from_rational(man, 10**-exp, prec, rnd) return s # Binary string conversion. These are currently mainly used for debugging # and could use some improvement in the future def from_bstr(x): man, exp = str_to_man_exp(x, base=2) man = MPZ(man) sign = 0 if man < 0: man = -man sign = 1 bc = bitcount(man) return normalize(sign, man, exp, bc, bc, round_floor) def to_bstr(x): sign, man, exp, bc = x return ['','-'][sign] + numeral(man, size=bitcount(man), base=2) + ("e%i" % exp) #----------------------------------------------------------------------------# # Square roots # #----------------------------------------------------------------------------# def mpf_sqrt(s, prec, rnd=round_fast): """ Compute the square root of a nonnegative mpf value. The result is correctly rounded. """ sign, man, exp, bc = s if sign: raise ComplexResult("square root of a negative number") if not man: return s if exp & 1: exp -= 1 man <<= 1 bc += 1 elif man == 1: return normalize1(sign, man, exp//2, bc, prec, rnd) shift = max(4, 2*prec-bc+4) shift += shift & 1 if rnd in 'fd': man = isqrt(man<= 0: a = mpf_pos(sa, prec, round_floor) b = mpf_pos(sb, prec, round_ceiling) # Upper point nonnegative? elif sbs >= 0: a = fzero negsa = mpf_neg(sa) if mpf_lt(negsa, sb): b = mpf_pos(sb, prec, round_ceiling) else: b = mpf_pos(negsa, prec, round_ceiling) # Both negative? else: a = mpf_neg(sb, prec, round_floor) b = mpf_neg(sa, prec, round_ceiling) return a, b # TODO: optimize def mpi_mul_mpf(s, t, prec): return mpi_mul(s, (t, t), prec) def mpi_div_mpf(s, t, prec): return mpi_div(s, (t, t), prec) def mpi_mul(s, t, prec=0): sa, sb = s ta, tb = t sas = mpf_sign(sa) sbs = mpf_sign(sb) tas = mpf_sign(ta) tbs = mpf_sign(tb) if sas == sbs == 0: # Should maybe be undefined if ta == fninf or tb == finf: return fninf, finf return fzero, fzero if tas == tbs == 0: # Should maybe be undefined if sa == fninf or sb == finf: return fninf, finf return fzero, fzero if sas >= 0: # positive * positive if tas >= 0: a = mpf_mul(sa, ta, prec, round_floor) b = mpf_mul(sb, tb, prec, round_ceiling) if a == fnan: a = fzero if b == fnan: b = finf # positive * negative elif tbs <= 0: a = mpf_mul(sb, ta, prec, round_floor) b = mpf_mul(sa, tb, prec, round_ceiling) if a == fnan: a = fninf if b == fnan: b = fzero # positive * both signs else: a = mpf_mul(sb, ta, prec, round_floor) b = mpf_mul(sb, tb, prec, round_ceiling) if a == fnan: a = fninf if b == fnan: b = finf elif sbs <= 0: # negative * positive if tas >= 0: a = mpf_mul(sa, tb, prec, round_floor) b = mpf_mul(sb, ta, prec, round_ceiling) if a == fnan: a = fninf if b == fnan: b = fzero # negative * negative elif tbs <= 0: a = mpf_mul(sb, tb, prec, round_floor) b = mpf_mul(sa, ta, prec, round_ceiling) if a == fnan: a = fzero if b == fnan: b = finf # negative * both signs else: a = mpf_mul(sa, tb, prec, round_floor) b = mpf_mul(sa, ta, prec, round_ceiling) if a == fnan: a = fninf if b == fnan: b = finf else: # General case: perform all cross-multiplications and compare # Since the multiplications can be done exactly, we need only # do 4 (instead of 8: two for each rounding mode) cases = [mpf_mul(sa, ta), mpf_mul(sa, tb), mpf_mul(sb, ta), mpf_mul(sb, tb)] if fnan in cases: a, b = (fninf, finf) else: a, b = mpf_min_max(cases) a = mpf_pos(a, prec, round_floor) b = mpf_pos(b, prec, round_ceiling) return a, b def mpi_square(s, prec=0): sa, sb = s if mpf_ge(sa, fzero): a = mpf_mul(sa, sa, prec, round_floor) b = mpf_mul(sb, sb, prec, round_ceiling) elif mpf_le(sb, fzero): a = mpf_mul(sb, sb, prec, round_floor) b = mpf_mul(sa, sa, prec, round_ceiling) else: sa = mpf_neg(sa) sa, sb = mpf_min_max([sa, sb]) a = fzero b = mpf_mul(sb, sb, prec, round_ceiling) return a, b def mpi_div(s, t, prec): sa, sb = s ta, tb = t sas = mpf_sign(sa) sbs = mpf_sign(sb) tas = mpf_sign(ta) tbs = mpf_sign(tb) # 0 / X if sas == sbs == 0: # 0 / if (tas < 0 and tbs > 0) or (tas == 0 or tbs == 0): return fninf, finf return fzero, fzero # Denominator contains both negative and positive numbers; # this should properly be a multi-interval, but the closest # match is the entire (extended) real line if tas < 0 and tbs > 0: return fninf, finf # Assume denominator to be nonnegative if tas < 0: return mpi_div(mpi_neg(s), mpi_neg(t), prec) # Division by zero # XXX: make sure all results make sense if tas == 0: # Numerator contains both signs? if sas < 0 and sbs > 0: return fninf, finf if tas == tbs: return fninf, finf # Numerator positive? if sas >= 0: a = mpf_div(sa, tb, prec, round_floor) b = finf if sbs <= 0: a = fninf b = mpf_div(sb, tb, prec, round_ceiling) # Division with positive denominator # We still have to handle nans resulting from inf/0 or inf/inf else: # Nonnegative numerator if sas >= 0: a = mpf_div(sa, tb, prec, round_floor) b = mpf_div(sb, ta, prec, round_ceiling) if a == fnan: a = fzero if b == fnan: b = finf # Nonpositive numerator elif sbs <= 0: a = mpf_div(sa, ta, prec, round_floor) b = mpf_div(sb, tb, prec, round_ceiling) if a == fnan: a = fninf if b == fnan: b = fzero # Numerator contains both signs? else: a = mpf_div(sa, ta, prec, round_floor) b = mpf_div(sb, ta, prec, round_ceiling) if a == fnan: a = fninf if b == fnan: b = finf return a, b def mpi_pi(prec): a = mpf_pi(prec, round_floor) b = mpf_pi(prec, round_ceiling) return a, b def mpi_exp(s, prec): sa, sb = s # exp is monotonic a = mpf_exp(sa, prec, round_floor) b = mpf_exp(sb, prec, round_ceiling) return a, b def mpi_log(s, prec): sa, sb = s # log is monotonic a = mpf_log(sa, prec, round_floor) b = mpf_log(sb, prec, round_ceiling) return a, b def mpi_sqrt(s, prec): sa, sb = s # sqrt is monotonic a = mpf_sqrt(sa, prec, round_floor) b = mpf_sqrt(sb, prec, round_ceiling) return a, b def mpi_atan(s, prec): sa, sb = s a = mpf_atan(sa, prec, round_floor) b = mpf_atan(sb, prec, round_ceiling) return a, b def mpi_pow_int(s, n, prec): sa, sb = s if n < 0: return mpi_div((fone, fone), mpi_pow_int(s, -n, prec+20), prec) if n == 0: return (fone, fone) if n == 1: return s if n == 2: return mpi_square(s, prec) # Odd -- signs are preserved if n & 1: a = mpf_pow_int(sa, n, prec, round_floor) b = mpf_pow_int(sb, n, prec, round_ceiling) # Even -- important to ensure positivity else: sas = mpf_sign(sa) sbs = mpf_sign(sb) # Nonnegative? if sas >= 0: a = mpf_pow_int(sa, n, prec, round_floor) b = mpf_pow_int(sb, n, prec, round_ceiling) # Nonpositive? elif sbs <= 0: a = mpf_pow_int(sb, n, prec, round_floor) b = mpf_pow_int(sa, n, prec, round_ceiling) # Mixed signs? else: a = fzero # max(-a,b)**n sa = mpf_neg(sa) if mpf_ge(sa, sb): b = mpf_pow_int(sa, n, prec, round_ceiling) else: b = mpf_pow_int(sb, n, prec, round_ceiling) return a, b def mpi_pow(s, t, prec): ta, tb = t if ta == tb and ta not in (finf, fninf): if ta == from_int(to_int(ta)): return mpi_pow_int(s, to_int(ta), prec) if ta == fhalf: return mpi_sqrt(s, prec) u = mpi_log(s, prec + 20) v = mpi_mul(u, t, prec + 20) return mpi_exp(v, prec) def MIN(x, y): if mpf_le(x, y): return x return y def MAX(x, y): if mpf_ge(x, y): return x return y def cos_sin_quadrant(x, wp): sign, man, exp, bc = x if x == fzero: return fone, fzero, 0 # TODO: combine evaluation code to avoid duplicate modulo c, s = mpf_cos_sin(x, wp) t, n, wp_ = mod_pi2(man, exp, exp+bc, 15) if sign: n = -1-n return c, s, n def mpi_cos_sin(x, prec): a, b = x if a == b == fzero: return (fone, fone), (fzero, fzero) # Guaranteed to contain both -1 and 1 if (finf in x) or (fninf in x): return (fnone, fone), (fnone, fone) wp = prec + 20 ca, sa, na = cos_sin_quadrant(a, wp) cb, sb, nb = cos_sin_quadrant(b, wp) ca, cb = mpf_min_max([ca, cb]) sa, sb = mpf_min_max([sa, sb]) # Both functions are monotonic within one quadrant if na == nb: pass # Guaranteed to contain both -1 and 1 elif nb - na >= 4: return (fnone, fone), (fnone, fone) else: # cos has maximum between a and b if na//4 != nb//4: cb = fone # cos has minimum if (na-2)//4 != (nb-2)//4: ca = fnone # sin has maximum if (na-1)//4 != (nb-1)//4: sb = fone # sin has minimum if (na-3)//4 != (nb-3)//4: sa = fnone # Perturb to force interval rounding more = from_man_exp((MPZ_ONE<= 1: if sign: return fnone return fone return v ca = finalize(ca, round_floor) cb = finalize(cb, round_ceiling) sa = finalize(sa, round_floor) sb = finalize(sb, round_ceiling) return (ca,cb), (sa,sb) def mpi_cos(x, prec): return mpi_cos_sin(x, prec)[0] def mpi_sin(x, prec): return mpi_cos_sin(x, prec)[1] def mpi_tan(x, prec): cos, sin = mpi_cos_sin(x, prec+20) return mpi_div(sin, cos, prec) def mpi_cot(x, prec): cos, sin = mpi_cos_sin(x, prec+20) return mpi_div(cos, sin, prec) def mpi_from_str_a_b(x, y, percent, prec): wp = prec + 20 xa = from_str(x, wp, round_floor) xb = from_str(x, wp, round_ceiling) #ya = from_str(y, wp, round_floor) y = from_str(y, wp, round_ceiling) assert mpf_ge(y, fzero) if percent: y = mpf_mul(MAX(mpf_abs(xa), mpf_abs(xb)), y, wp, round_ceiling) y = mpf_div(y, from_int(100), wp, round_ceiling) a = mpf_sub(xa, y, prec, round_floor) b = mpf_add(xb, y, prec, round_ceiling) return a, b def mpi_from_str(s, prec): """ Parse an interval number given as a string. Allowed forms are "-1.23e-27" Any single decimal floating-point literal. "a +- b" or "a (b)" a is the midpoint of the interval and b is the half-width "a +- b%" or "a (b%)" a is the midpoint of the interval and the half-width is b percent of a (`a \times b / 100`). "[a, b]" The interval indicated directly. "x[y,z]e" x are shared digits, y and z are unequal digits, e is the exponent. """ e = ValueError("Improperly formed interval number '%s'" % s) s = s.replace(" ", "") wp = prec + 20 if "+-" in s: x, y = s.split("+-") return mpi_from_str_a_b(x, y, False, prec) # case 2 elif "(" in s: # Don't confuse with a complex number (x,y) if s[0] == "(" or ")" not in s: raise e s = s.replace(")", "") percent = False if "%" in s: if s[-1] != "%": raise e percent = True s = s.replace("%", "") x, y = s.split("(") return mpi_from_str_a_b(x, y, percent, prec) elif "," in s: if ('[' not in s) or (']' not in s): raise e if s[0] == '[': # case 3 s = s.replace("[", "") s = s.replace("]", "") a, b = s.split(",") a = from_str(a, prec, round_floor) b = from_str(b, prec, round_ceiling) return a, b else: # case 4 x, y = s.split('[') y, z = y.split(',') if 'e' in s: z, e = z.split(']') else: z, e = z.rstrip(']'), '' a = from_str(x+y+e, prec, round_floor) b = from_str(x+z+e, prec, round_ceiling) return a, b else: a = from_str(s, prec, round_floor) b = from_str(s, prec, round_ceiling) return a, b def mpi_to_str(x, dps, use_spaces=True, brackets='[]', mode='brackets', error_dps=4, **kwargs): """ Convert a mpi interval to a string. **Arguments** *dps* decimal places to use for printing *use_spaces* use spaces for more readable output, defaults to true *brackets* pair of strings (or two-character string) giving left and right brackets *mode* mode of display: 'plusminus', 'percent', 'brackets' (default) or 'diff' *error_dps* limit the error to *error_dps* digits (mode 'plusminus and 'percent') Additional keyword arguments are forwarded to the mpf-to-string conversion for the components of the output. **Examples** >>> from mpmath import mpi, mp >>> mp.dps = 30 >>> x = mpi(1, 2)._mpi_ >>> mpi_to_str(x, 2, mode='plusminus') '1.5 +- 0.5' >>> mpi_to_str(x, 2, mode='percent') '1.5 (33.33%)' >>> mpi_to_str(x, 2, mode='brackets') '[1.0, 2.0]' >>> mpi_to_str(x, 2, mode='brackets' , brackets=('<', '>')) '<1.0, 2.0>' >>> x = mpi('5.2582327113062393041', '5.2582327113062749951')._mpi_ >>> mpi_to_str(x, 15, mode='diff') '5.2582327113062[4, 7]' >>> mpi_to_str(mpi(0)._mpi_, 2, mode='percent') '0.0 (0.0%)' """ prec = dps_to_prec(dps) wp = prec + 20 a, b = x mid = mpi_mid(x, prec) delta = mpi_delta(x, prec) a_str = to_str(a, dps, **kwargs) b_str = to_str(b, dps, **kwargs) mid_str = to_str(mid, dps, **kwargs) sp = "" if use_spaces: sp = " " br1, br2 = brackets if mode == 'plusminus': delta_str = to_str(mpf_shift(delta,-1), dps, **kwargs) s = mid_str + sp + "+-" + sp + delta_str elif mode == 'percent': if mid == fzero: p = fzero else: # p = 100 * delta(x) / (2*mid(x)) p = mpf_mul(delta, from_int(100)) p = mpf_div(p, mpf_mul(mid, from_int(2)), wp) s = mid_str + sp + "(" + to_str(p, error_dps) + "%)" elif mode == 'brackets': s = br1 + a_str + "," + sp + b_str + br2 elif mode == 'diff': # use more digits if str(x.a) and str(x.b) are equal if a_str == b_str: a_str = to_str(a, dps+3, **kwargs) b_str = to_str(b, dps+3, **kwargs) # separate mantissa and exponent a = a_str.split('e') if len(a) == 1: a.append('') b = b_str.split('e') if len(b) == 1: b.append('') if a[1] == b[1]: if a[0] != b[0]: for i in xrange(len(a[0]) + 1): if a[0][i] != b[0][i]: break s = (a[0][:i] + br1 + a[0][i:] + ',' + sp + b[0][i:] + br2 + 'e'*min(len(a[1]), 1) + a[1]) else: # no difference s = a[0] + br1 + br2 + 'e'*min(len(a[1]), 1) + a[1] else: s = br1 + 'e'.join(a) + ',' + sp + 'e'.join(b) + br2 else: raise ValueError("'%s' is unknown mode for printing mpi" % mode) return s def mpci_add(x, y, prec): a, b = x c, d = y return mpi_add(a, c, prec), mpi_add(b, d, prec) def mpci_sub(x, y, prec): a, b = x c, d = y return mpi_sub(a, c, prec), mpi_sub(b, d, prec) def mpci_neg(x, prec=0): a, b = x return mpi_neg(a, prec), mpi_neg(b, prec) def mpci_pos(x, prec): a, b = x return mpi_pos(a, prec), mpi_pos(b, prec) def mpci_mul(x, y, prec): # TODO: optimize for real/imag cases a, b = x c, d = y r1 = mpi_mul(a,c) r2 = mpi_mul(b,d) re = mpi_sub(r1,r2,prec) i1 = mpi_mul(a,d) i2 = mpi_mul(b,c) im = mpi_add(i1,i2,prec) return re, im def mpci_div(x, y, prec): # TODO: optimize for real/imag cases a, b = x c, d = y wp = prec+20 m1 = mpi_square(c) m2 = mpi_square(d) m = mpi_add(m1,m2,wp) re = mpi_add(mpi_mul(a,c), mpi_mul(b,d), wp) im = mpi_sub(mpi_mul(b,c), mpi_mul(a,d), wp) re = mpi_div(re, m, prec) im = mpi_div(im, m, prec) return re, im def mpci_exp(x, prec): a, b = x wp = prec+20 r = mpi_exp(a, wp) c, s = mpi_cos_sin(b, wp) a = mpi_mul(r, c, prec) b = mpi_mul(r, s, prec) return a, b def mpi_shift(x, n): a, b = x return mpf_shift(a,n), mpf_shift(b,n) def mpi_cosh_sinh(x, prec): # TODO: accuracy for small x wp = prec+20 e1 = mpi_exp(x, wp) e2 = mpi_div(mpi_one, e1, wp) c = mpi_add(e1, e2, prec) s = mpi_sub(e1, e2, prec) c = mpi_shift(c, -1) s = mpi_shift(s, -1) return c, s def mpci_cos(x, prec): a, b = x wp = prec+10 c, s = mpi_cos_sin(a, wp) ch, sh = mpi_cosh_sinh(b, wp) re = mpi_mul(c, ch, prec) im = mpi_mul(s, sh, prec) return re, mpi_neg(im) def mpci_sin(x, prec): a, b = x wp = prec+10 c, s = mpi_cos_sin(a, wp) ch, sh = mpi_cosh_sinh(b, wp) re = mpi_mul(s, ch, prec) im = mpi_mul(c, sh, prec) return re, im def mpci_abs(x, prec): a, b = x if a == mpi_zero: return mpi_abs(b) if b == mpi_zero: return mpi_abs(a) # Important: nonnegative a = mpi_square(a) b = mpi_square(b) t = mpi_add(a, b, prec+20) return mpi_sqrt(t, prec) def mpi_atan2(y, x, prec): ya, yb = y xa, xb = x # Constrained to the real line if ya == yb == fzero: if mpf_ge(xa, fzero): return mpi_zero return mpi_pi(prec) # Right half-plane if mpf_ge(xa, fzero): if mpf_ge(ya, fzero): a = mpf_atan2(ya, xb, prec, round_floor) else: a = mpf_atan2(ya, xa, prec, round_floor) if mpf_ge(yb, fzero): b = mpf_atan2(yb, xa, prec, round_ceiling) else: b = mpf_atan2(yb, xb, prec, round_ceiling) # Upper half-plane elif mpf_ge(ya, fzero): b = mpf_atan2(ya, xa, prec, round_ceiling) if mpf_le(xb, fzero): a = mpf_atan2(yb, xb, prec, round_floor) else: a = mpf_atan2(ya, xb, prec, round_floor) # Lower half-plane elif mpf_le(yb, fzero): a = mpf_atan2(yb, xa, prec, round_floor) if mpf_le(xb, fzero): b = mpf_atan2(ya, xb, prec, round_ceiling) else: b = mpf_atan2(yb, xb, prec, round_ceiling) # Covering the origin else: b = mpf_pi(prec, round_ceiling) a = mpf_neg(b) return a, b def mpci_arg(z, prec): x, y = z return mpi_atan2(y, x, prec) def mpci_log(z, prec): x, y = z re = mpi_log(mpci_abs(z, prec+20), prec) im = mpci_arg(z, prec) return re, im def mpci_pow(x, y, prec): # TODO: recognize/speed up real cases, integer y yre, yim = y if yim == mpi_zero: ya, yb = yre if ya == yb: sign, man, exp, bc = yb if man and exp >= 0: return mpci_pow_int(x, (-1)**sign * int(man<>= 1 return mpci_pos(result, prec) gamma_min_a = from_float(1.46163214496) gamma_min_b = from_float(1.46163214497) gamma_min = (gamma_min_a, gamma_min_b) gamma_mono_imag_a = from_float(-1.1) gamma_mono_imag_b = from_float(1.1) def mpi_overlap(x, y): a, b = x c, d = y if mpf_lt(d, a): return False if mpf_gt(c, b): return False return True # type = 0 -- gamma # type = 1 -- factorial # type = 2 -- 1/gamma # type = 3 -- log-gamma def mpi_gamma(z, prec, type=0): a, b = z wp = prec+20 if type == 1: return mpi_gamma(mpi_add(z, mpi_one, wp), prec, 0) # increasing if mpf_gt(a, gamma_min_b): if type == 0: c = mpf_gamma(a, prec, round_floor) d = mpf_gamma(b, prec, round_ceiling) elif type == 2: c = mpf_rgamma(b, prec, round_floor) d = mpf_rgamma(a, prec, round_ceiling) elif type == 3: c = mpf_loggamma(a, prec, round_floor) d = mpf_loggamma(b, prec, round_ceiling) # decreasing elif mpf_gt(a, fzero) and mpf_lt(b, gamma_min_a): if type == 0: c = mpf_gamma(b, prec, round_floor) d = mpf_gamma(a, prec, round_ceiling) elif type == 2: c = mpf_rgamma(a, prec, round_floor) d = mpf_rgamma(b, prec, round_ceiling) elif type == 3: c = mpf_loggamma(b, prec, round_floor) d = mpf_loggamma(a, prec, round_ceiling) else: # TODO: reflection formula znew = mpi_add(z, mpi_one, wp) if type == 0: return mpi_div(mpi_gamma(znew, prec+2, 0), z, prec) if type == 2: return mpi_mul(mpi_gamma(znew, prec+2, 2), z, prec) if type == 3: return mpi_sub(mpi_gamma(znew, prec+2, 3), mpi_log(z, prec+2), prec) return c, d def mpci_gamma(z, prec, type=0): (a1,a2), (b1,b2) = z # Real case if b1 == b2 == fzero and (type != 3 or mpf_gt(a1,fzero)): return mpi_gamma(z, prec, type), mpi_zero # Estimate precision wp = prec+20 if type != 3: amag = a2[2]+a2[3] bmag = b2[2]+b2[3] if a2 != fzero: mag = max(amag, bmag) else: mag = bmag an = abs(to_int(a2)) bn = abs(to_int(b2)) absn = max(an, bn) gamma_size = max(0,absn*mag) wp += bitcount(gamma_size) # Assume type != 1 if type == 1: (a1,a2) = mpi_add((a1,a2), mpi_one, wp); z = (a1,a2), (b1,b2) type = 0 # Avoid non-monotonic region near the negative real axis if mpf_lt(a1, gamma_min_b): if mpi_overlap((b1,b2), (gamma_mono_imag_a, gamma_mono_imag_b)): # TODO: reflection formula #if mpf_lt(a2, mpf_shift(fone,-1)): # znew = mpci_sub((mpi_one,mpi_zero),z,wp) # ... # Recurrence: # gamma(z) = gamma(z+1)/z znew = mpi_add((a1,a2), mpi_one, wp), (b1,b2) if type == 0: return mpci_div(mpci_gamma(znew, prec+2, 0), z, prec) if type == 2: return mpci_mul(mpci_gamma(znew, prec+2, 2), z, prec) if type == 3: return mpci_sub(mpci_gamma(znew, prec+2, 3), mpci_log(z,prec+2), prec) # Use monotonicity (except for a small region close to the # origin and near poles) # upper half-plane if mpf_ge(b1, fzero): minre = mpc_loggamma((a1,b2), wp, round_floor) maxre = mpc_loggamma((a2,b1), wp, round_ceiling) minim = mpc_loggamma((a1,b1), wp, round_floor) maxim = mpc_loggamma((a2,b2), wp, round_ceiling) # lower half-plane elif mpf_le(b2, fzero): minre = mpc_loggamma((a1,b1), wp, round_floor) maxre = mpc_loggamma((a2,b2), wp, round_ceiling) minim = mpc_loggamma((a2,b1), wp, round_floor) maxim = mpc_loggamma((a1,b2), wp, round_ceiling) # crosses real axis else: maxre = mpc_loggamma((a2,fzero), wp, round_ceiling) # stretches more into the lower half-plane if mpf_gt(mpf_neg(b1), b2): minre = mpc_loggamma((a1,b1), wp, round_ceiling) else: minre = mpc_loggamma((a1,b2), wp, round_ceiling) minim = mpc_loggamma((a2,b1), wp, round_floor) maxim = mpc_loggamma((a2,b2), wp, round_floor) w = (minre[0], maxre[0]), (minim[1], maxim[1]) if type == 3: return mpi_pos(w[0], prec), mpi_pos(w[1], prec) if type == 2: w = mpci_neg(w) return mpci_exp(w, prec) def mpi_loggamma(z, prec): return mpi_gamma(z, prec, type=3) def mpci_loggamma(z, prec): return mpci_gamma(z, prec, type=3) def mpi_rgamma(z, prec): return mpi_gamma(z, prec, type=2) def mpci_rgamma(z, prec): return mpci_gamma(z, prec, type=2) def mpi_factorial(z, prec): return mpi_gamma(z, prec, type=1) def mpci_factorial(z, prec): return mpci_gamma(z, prec, type=1) mpmath-1.0.0/mpmath/libmp/six.py000066400000000000000000000271171316273626600165700ustar00rootroot00000000000000"""Utilities for writing code that runs on Python 2 and 3""" # Copyright (c) 2010-2012 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of # the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import operator import sys import types __author__ = "Benjamin Peterson " __version__ = "1.2.0" # True if we are running on Python 3. PY3 = sys.version_info[0] == 3 if PY3: string_types = str, integer_types = int, class_types = type, text_type = str binary_type = bytes MAXSIZE = sys.maxsize else: string_types = basestring, integer_types = (int, long) class_types = (type, types.ClassType) text_type = unicode binary_type = str if sys.platform.startswith("java"): # Jython always uses 32 bits. MAXSIZE = int((1 << 31) - 1) else: # It's possible to have sizeof(long) != sizeof(Py_ssize_t). class X(object): def __len__(self): return 1 << 31 try: len(X()) except OverflowError: # 32-bit MAXSIZE = int((1 << 31) - 1) else: # 64-bit MAXSIZE = int((1 << 63) - 1) del X def _add_doc(func, doc): """Add documentation to a function.""" func.__doc__ = doc def _import_module(name): """Import module, returning the module after the last dot.""" __import__(name) return sys.modules[name] class _LazyDescr(object): def __init__(self, name): self.name = name def __get__(self, obj, tp): result = self._resolve() setattr(obj, self.name, result) # This is a bit ugly, but it avoids running this again. delattr(tp, self.name) return result class MovedModule(_LazyDescr): def __init__(self, name, old, new=None): super(MovedModule, self).__init__(name) if PY3: if new is None: new = name self.mod = new else: self.mod = old def _resolve(self): return _import_module(self.mod) class MovedAttribute(_LazyDescr): def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): super(MovedAttribute, self).__init__(name) if PY3: if new_mod is None: new_mod = name self.mod = new_mod if new_attr is None: if old_attr is None: new_attr = name else: new_attr = old_attr self.attr = new_attr else: self.mod = old_mod if old_attr is None: old_attr = name self.attr = old_attr def _resolve(self): module = _import_module(self.mod) return getattr(module, self.attr) class _MovedItems(types.ModuleType): """Lazy loading of moved objects""" _moved_attributes = [ MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), MovedAttribute("map", "itertools", "builtins", "imap", "map"), MovedAttribute("reload_module", "__builtin__", "imp", "reload"), MovedAttribute("reduce", "__builtin__", "functools"), MovedAttribute("StringIO", "StringIO", "io"), MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), MovedModule("builtins", "__builtin__"), MovedModule("configparser", "ConfigParser"), MovedModule("copyreg", "copy_reg"), MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), MovedModule("http_cookies", "Cookie", "http.cookies"), MovedModule("html_entities", "htmlentitydefs", "html.entities"), MovedModule("html_parser", "HTMLParser", "html.parser"), MovedModule("http_client", "httplib", "http.client"), MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), MovedModule("cPickle", "cPickle", "pickle"), MovedModule("queue", "Queue"), MovedModule("reprlib", "repr"), MovedModule("socketserver", "SocketServer"), MovedModule("tkinter", "Tkinter"), MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), MovedModule("tkinter_tix", "Tix", "tkinter.tix"), MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), MovedModule("tkinter_colorchooser", "tkColorChooser", "tkinter.colorchooser"), MovedModule("tkinter_commondialog", "tkCommonDialog", "tkinter.commondialog"), MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), MovedModule("tkinter_font", "tkFont", "tkinter.font"), MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", "tkinter.simpledialog"), MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), MovedModule("winreg", "_winreg"), ] for attr in _moved_attributes: setattr(_MovedItems, attr.name, attr) del attr moves = sys.modules[__name__ + ".moves"] = _MovedItems("moves") def add_move(move): """Add an item to six.moves.""" setattr(_MovedItems, move.name, move) def remove_move(name): """Remove item from six.moves.""" try: delattr(_MovedItems, name) except AttributeError: try: del moves.__dict__[name] except KeyError: raise AttributeError("no such move, %r" % (name,)) if PY3: _meth_func = "__func__" _meth_self = "__self__" _func_code = "__code__" _func_defaults = "__defaults__" _iterkeys = "keys" _itervalues = "values" _iteritems = "items" else: _meth_func = "im_func" _meth_self = "im_self" _func_code = "func_code" _func_defaults = "func_defaults" _iterkeys = "iterkeys" _itervalues = "itervalues" _iteritems = "iteritems" try: advance_iterator = next except NameError: def advance_iterator(it): return it.next() next = advance_iterator if PY3: def get_unbound_function(unbound): return unbound Iterator = object def callable(obj): return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) else: def get_unbound_function(unbound): return unbound.im_func class Iterator(object): def next(self): return type(self).__next__(self) callable = callable _add_doc(get_unbound_function, """Get the function out of a possibly unbound function""") get_method_function = operator.attrgetter(_meth_func) get_method_self = operator.attrgetter(_meth_self) get_function_code = operator.attrgetter(_func_code) get_function_defaults = operator.attrgetter(_func_defaults) def iterkeys(d): """Return an iterator over the keys of a dictionary.""" return iter(getattr(d, _iterkeys)()) def itervalues(d): """Return an iterator over the values of a dictionary.""" return iter(getattr(d, _itervalues)()) def iteritems(d): """Return an iterator over the (key, value) pairs of a dictionary.""" return iter(getattr(d, _iteritems)()) if PY3: def b(s): return s.encode("latin-1") def u(s): return s if sys.version_info[1] <= 1: def int2byte(i): return bytes((i,)) else: # This is about 2x faster than the implementation above on 3.2+ int2byte = operator.methodcaller("to_bytes", 1, "big") import io StringIO = io.StringIO BytesIO = io.BytesIO else: def b(s): return s def u(s): return unicode(s, "unicode_escape") int2byte = chr import StringIO StringIO = BytesIO = StringIO.StringIO _add_doc(b, """Byte literal""") _add_doc(u, """Text literal""") if PY3: import builtins exec_ = getattr(builtins, "exec") def reraise(tp, value, tb=None): if value.__traceback__ is not tb: raise value.with_traceback(tb) raise value print_ = getattr(builtins, "print") del builtins else: def exec_(code, globs=None, locs=None): """Execute code in a namespace.""" if globs is None: frame = sys._getframe(1) globs = frame.f_globals if locs is None: locs = frame.f_locals del frame elif locs is None: locs = globs exec("""exec code in globs, locs""") exec_("""def reraise(tp, value, tb=None): raise tp, value, tb """) def print_(*args, **kwargs): """The new-style print function.""" fp = kwargs.pop("file", sys.stdout) if fp is None: return def write(data): if not isinstance(data, basestring): data = str(data) fp.write(data) want_unicode = False sep = kwargs.pop("sep", None) if sep is not None: if isinstance(sep, unicode): want_unicode = True elif not isinstance(sep, str): raise TypeError("sep must be None or a string") end = kwargs.pop("end", None) if end is not None: if isinstance(end, unicode): want_unicode = True elif not isinstance(end, str): raise TypeError("end must be None or a string") if kwargs: raise TypeError("invalid keyword arguments to print()") if not want_unicode: for arg in args: if isinstance(arg, unicode): want_unicode = True break if want_unicode: newline = unicode("\n") space = unicode(" ") else: newline = "\n" space = " " if sep is None: sep = space if end is None: end = newline for i, arg in enumerate(args): if i: write(sep) write(arg) write(end) _add_doc(reraise, """Reraise an exception.""") def with_metaclass(meta, base=object): """Create a base class with a metaclass.""" return meta("NewBase", (base,), {}) mpmath-1.0.0/mpmath/math2.py000066400000000000000000000442011316273626600156660ustar00rootroot00000000000000""" This module complements the math and cmath builtin modules by providing fast machine precision versions of some additional functions (gamma, ...) and wrapping math/cmath functions so that they can be called with either real or complex arguments. """ import operator import math import cmath # Irrational (?) constants pi = 3.1415926535897932385 e = 2.7182818284590452354 sqrt2 = 1.4142135623730950488 sqrt5 = 2.2360679774997896964 phi = 1.6180339887498948482 ln2 = 0.69314718055994530942 ln10 = 2.302585092994045684 euler = 0.57721566490153286061 catalan = 0.91596559417721901505 khinchin = 2.6854520010653064453 apery = 1.2020569031595942854 logpi = 1.1447298858494001741 def _mathfun_real(f_real, f_complex): def f(x, **kwargs): if type(x) is float: return f_real(x) if type(x) is complex: return f_complex(x) try: x = float(x) return f_real(x) except (TypeError, ValueError): x = complex(x) return f_complex(x) f.__name__ = f_real.__name__ return f def _mathfun(f_real, f_complex): def f(x, **kwargs): if type(x) is complex: return f_complex(x) try: return f_real(float(x)) except (TypeError, ValueError): return f_complex(complex(x)) f.__name__ = f_real.__name__ return f def _mathfun_n(f_real, f_complex): def f(*args, **kwargs): try: return f_real(*(float(x) for x in args)) except (TypeError, ValueError): return f_complex(*(complex(x) for x in args)) f.__name__ = f_real.__name__ return f # Workaround for non-raising log and sqrt in Python 2.5 and 2.4 # on Unix system try: math.log(-2.0) def math_log(x): if x <= 0.0: raise ValueError("math domain error") return math.log(x) def math_sqrt(x): if x < 0.0: raise ValueError("math domain error") return math.sqrt(x) except (ValueError, TypeError): math_log = math.log math_sqrt = math.sqrt pow = _mathfun_n(operator.pow, lambda x, y: complex(x)**y) log = _mathfun_n(math_log, cmath.log) sqrt = _mathfun(math_sqrt, cmath.sqrt) exp = _mathfun_real(math.exp, cmath.exp) cos = _mathfun_real(math.cos, cmath.cos) sin = _mathfun_real(math.sin, cmath.sin) tan = _mathfun_real(math.tan, cmath.tan) acos = _mathfun(math.acos, cmath.acos) asin = _mathfun(math.asin, cmath.asin) atan = _mathfun_real(math.atan, cmath.atan) cosh = _mathfun_real(math.cosh, cmath.cosh) sinh = _mathfun_real(math.sinh, cmath.sinh) tanh = _mathfun_real(math.tanh, cmath.tanh) floor = _mathfun_real(math.floor, lambda z: complex(math.floor(z.real), math.floor(z.imag))) ceil = _mathfun_real(math.ceil, lambda z: complex(math.ceil(z.real), math.ceil(z.imag))) cos_sin = _mathfun_real(lambda x: (math.cos(x), math.sin(x)), lambda z: (cmath.cos(z), cmath.sin(z))) cbrt = _mathfun(lambda x: x**(1./3), lambda z: z**(1./3)) def nthroot(x, n): r = 1./n try: return float(x) ** r except (ValueError, TypeError): return complex(x) ** r def _sinpi_real(x): if x < 0: return -_sinpi_real(-x) n, r = divmod(x, 0.5) r *= pi n %= 4 if n == 0: return math.sin(r) if n == 1: return math.cos(r) if n == 2: return -math.sin(r) if n == 3: return -math.cos(r) def _cospi_real(x): if x < 0: x = -x n, r = divmod(x, 0.5) r *= pi n %= 4 if n == 0: return math.cos(r) if n == 1: return -math.sin(r) if n == 2: return -math.cos(r) if n == 3: return math.sin(r) def _sinpi_complex(z): if z.real < 0: return -_sinpi_complex(-z) n, r = divmod(z.real, 0.5) z = pi*complex(r, z.imag) n %= 4 if n == 0: return cmath.sin(z) if n == 1: return cmath.cos(z) if n == 2: return -cmath.sin(z) if n == 3: return -cmath.cos(z) def _cospi_complex(z): if z.real < 0: z = -z n, r = divmod(z.real, 0.5) z = pi*complex(r, z.imag) n %= 4 if n == 0: return cmath.cos(z) if n == 1: return -cmath.sin(z) if n == 2: return -cmath.cos(z) if n == 3: return cmath.sin(z) cospi = _mathfun_real(_cospi_real, _cospi_complex) sinpi = _mathfun_real(_sinpi_real, _sinpi_complex) def tanpi(x): try: return sinpi(x) / cospi(x) except OverflowError: if complex(x).imag > 10: return 1j if complex(x).imag < 10: return -1j raise def cotpi(x): try: return cospi(x) / sinpi(x) except OverflowError: if complex(x).imag > 10: return -1j if complex(x).imag < 10: return 1j raise INF = 1e300*1e300 NINF = -INF NAN = INF-INF EPS = 2.2204460492503131e-16 _exact_gamma = (INF, 1.0, 1.0, 2.0, 6.0, 24.0, 120.0, 720.0, 5040.0, 40320.0, 362880.0, 3628800.0, 39916800.0, 479001600.0, 6227020800.0, 87178291200.0, 1307674368000.0, 20922789888000.0, 355687428096000.0, 6402373705728000.0, 121645100408832000.0, 2432902008176640000.0) _max_exact_gamma = len(_exact_gamma)-1 # Lanczos coefficients used by the GNU Scientific Library _lanczos_g = 7 _lanczos_p = (0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313, -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7) def _gamma_real(x): _intx = int(x) if _intx == x: if _intx <= 0: #return (-1)**_intx * INF raise ZeroDivisionError("gamma function pole") if _intx <= _max_exact_gamma: return _exact_gamma[_intx] if x < 0.5: # TODO: sinpi return pi / (_sinpi_real(x)*_gamma_real(1-x)) else: x -= 1.0 r = _lanczos_p[0] for i in range(1, _lanczos_g+2): r += _lanczos_p[i]/(x+i) t = x + _lanczos_g + 0.5 return 2.506628274631000502417 * t**(x+0.5) * math.exp(-t) * r def _gamma_complex(x): if not x.imag: return complex(_gamma_real(x.real)) if x.real < 0.5: # TODO: sinpi return pi / (_sinpi_complex(x)*_gamma_complex(1-x)) else: x -= 1.0 r = _lanczos_p[0] for i in range(1, _lanczos_g+2): r += _lanczos_p[i]/(x+i) t = x + _lanczos_g + 0.5 return 2.506628274631000502417 * t**(x+0.5) * cmath.exp(-t) * r gamma = _mathfun_real(_gamma_real, _gamma_complex) def rgamma(x): try: return 1./gamma(x) except ZeroDivisionError: return x*0.0 def factorial(x): return gamma(x+1.0) def arg(x): if type(x) is float: return math.atan2(0.0,x) return math.atan2(x.imag,x.real) # XXX: broken for negatives def loggamma(x): if type(x) not in (float, complex): try: x = float(x) except (ValueError, TypeError): x = complex(x) try: xreal = x.real ximag = x.imag except AttributeError: # py2.5 xreal = x ximag = 0.0 # Reflection formula # http://functions.wolfram.com/GammaBetaErf/LogGamma/16/01/01/0003/ if xreal < 0.0: if abs(x) < 0.5: v = log(gamma(x)) if ximag == 0: v = v.conjugate() return v z = 1-x try: re = z.real im = z.imag except AttributeError: # py2.5 re = z im = 0.0 refloor = floor(re) if im == 0.0: imsign = 0 elif im < 0.0: imsign = -1 else: imsign = 1 return (-pi*1j)*abs(refloor)*(1-abs(imsign)) + logpi - \ log(sinpi(z-refloor)) - loggamma(z) + 1j*pi*refloor*imsign if x == 1.0 or x == 2.0: return x*0 p = 0. while abs(x) < 11: p -= log(x) x += 1.0 s = 0.918938533204672742 + (x-0.5)*log(x) - x r = 1./x r2 = r*r s += 0.083333333333333333333*r; r *= r2 s += -0.0027777777777777777778*r; r *= r2 s += 0.00079365079365079365079*r; r *= r2 s += -0.0005952380952380952381*r; r *= r2 s += 0.00084175084175084175084*r; r *= r2 s += -0.0019175269175269175269*r; r *= r2 s += 0.0064102564102564102564*r; r *= r2 s += -0.02955065359477124183*r return s + p _psi_coeff = [ 0.083333333333333333333, -0.0083333333333333333333, 0.003968253968253968254, -0.0041666666666666666667, 0.0075757575757575757576, -0.021092796092796092796, 0.083333333333333333333, -0.44325980392156862745, 3.0539543302701197438, -26.456212121212121212] def _digamma_real(x): _intx = int(x) if _intx == x: if _intx <= 0: raise ZeroDivisionError("polygamma pole") if x < 0.5: x = 1.0-x s = pi*cotpi(x) else: s = 0.0 while x < 10.0: s -= 1.0/x x += 1.0 x2 = x**-2 t = x2 for c in _psi_coeff: s -= c*t if t < 1e-20: break t *= x2 return s + math_log(x) - 0.5/x def _digamma_complex(x): if not x.imag: return complex(_digamma_real(x.real)) if x.real < 0.5: x = 1.0-x s = pi*cotpi(x) else: s = 0.0 while abs(x) < 10.0: s -= 1.0/x x += 1.0 x2 = x**-2 t = x2 for c in _psi_coeff: s -= c*t if abs(t) < 1e-20: break t *= x2 return s + cmath.log(x) - 0.5/x digamma = _mathfun_real(_digamma_real, _digamma_complex) # TODO: could implement complex erf and erfc here. Need # to find an accurate method (avoiding cancellation) # for approx. 1 < abs(x) < 9. _erfc_coeff_P = [ 1.0000000161203922312, 2.1275306946297962644, 2.2280433377390253297, 1.4695509105618423961, 0.66275911699770787537, 0.20924776504163751585, 0.045459713768411264339, 0.0063065951710717791934, 0.00044560259661560421715][::-1] _erfc_coeff_Q = [ 1.0000000000000000000, 3.2559100272784894318, 4.9019435608903239131, 4.4971472894498014205, 2.7845640601891186528, 1.2146026030046904138, 0.37647108453729465912, 0.080970149639040548613, 0.011178148899483545902, 0.00078981003831980423513][::-1] def _polyval(coeffs, x): p = coeffs[0] for c in coeffs[1:]: p = c + x*p return p def _erf_taylor(x): # Taylor series assuming 0 <= x <= 1 x2 = x*x s = t = x n = 1 while abs(t) > 1e-17: t *= x2/n s -= t/(n+n+1) n += 1 t *= x2/n s += t/(n+n+1) n += 1 return 1.1283791670955125739*s def _erfc_mid(x): # Rational approximation assuming 0 <= x <= 9 return exp(-x*x)*_polyval(_erfc_coeff_P,x)/_polyval(_erfc_coeff_Q,x) def _erfc_asymp(x): # Asymptotic expansion assuming x >= 9 x2 = x*x v = exp(-x2)/x*0.56418958354775628695 r = t = 0.5 / x2 s = 1.0 for n in range(1,22,4): s -= t t *= r * (n+2) s += t t *= r * (n+4) if abs(t) < 1e-17: break return s * v def erf(x): """ erf of a real number. """ x = float(x) if x != x: return x if x < 0.0: return -erf(-x) if x >= 1.0: if x >= 6.0: return 1.0 return 1.0 - _erfc_mid(x) return _erf_taylor(x) def erfc(x): """ erfc of a real number. """ x = float(x) if x != x: return x if x < 0.0: if x < -6.0: return 2.0 return 2.0-erfc(-x) if x > 9.0: return _erfc_asymp(x) if x >= 1.0: return _erfc_mid(x) return 1.0 - _erf_taylor(x) gauss42 = [\ (0.99839961899006235, 0.0041059986046490839), (-0.99839961899006235, 0.0041059986046490839), (0.9915772883408609, 0.009536220301748501), (-0.9915772883408609,0.009536220301748501), (0.97934250806374812, 0.014922443697357493), (-0.97934250806374812, 0.014922443697357493), (0.96175936533820439,0.020227869569052644), (-0.96175936533820439, 0.020227869569052644), (0.93892355735498811, 0.025422959526113047), (-0.93892355735498811,0.025422959526113047), (0.91095972490412735, 0.030479240699603467), (-0.91095972490412735, 0.030479240699603467), (0.87802056981217269,0.03536907109759211), (-0.87802056981217269, 0.03536907109759211), (0.8402859832618168, 0.040065735180692258), (-0.8402859832618168,0.040065735180692258), (0.7979620532554873, 0.044543577771965874), (-0.7979620532554873, 0.044543577771965874), (0.75127993568948048,0.048778140792803244), (-0.75127993568948048, 0.048778140792803244), (0.70049459055617114, 0.052746295699174064), (-0.70049459055617114,0.052746295699174064), (0.64588338886924779, 0.056426369358018376), (-0.64588338886924779, 0.056426369358018376), (0.58774459748510932, 0.059798262227586649), (-0.58774459748510932, 0.059798262227586649), (0.5263957499311922, 0.062843558045002565), (-0.5263957499311922, 0.062843558045002565), (0.46217191207042191, 0.065545624364908975), (-0.46217191207042191, 0.065545624364908975), (0.39542385204297503, 0.067889703376521934), (-0.39542385204297503, 0.067889703376521934), (0.32651612446541151, 0.069862992492594159), (-0.32651612446541151, 0.069862992492594159), (0.25582507934287907, 0.071454714265170971), (-0.25582507934287907, 0.071454714265170971), (0.18373680656485453, 0.072656175243804091), (-0.18373680656485453, 0.072656175243804091), (0.11064502720851986, 0.073460813453467527), (-0.11064502720851986, 0.073460813453467527), (0.036948943165351772, 0.073864234232172879), (-0.036948943165351772, 0.073864234232172879)] EI_ASYMP_CONVERGENCE_RADIUS = 40.0 def ei_asymp(z, _e1=False): r = 1./z s = t = 1.0 k = 1 while 1: t *= k*r s += t if abs(t) < 1e-16: break k += 1 v = s*exp(z)/z if _e1: if type(z) is complex: zreal = z.real zimag = z.imag else: zreal = z zimag = 0.0 if zimag == 0.0 and zreal > 0.0: v += pi*1j else: if type(z) is complex: if z.imag > 0: v += pi*1j if z.imag < 0: v -= pi*1j return v def ei_taylor(z, _e1=False): s = t = z k = 2 while 1: t = t*z/k term = t/k if abs(term) < 1e-17: break s += term k += 1 s += euler if _e1: s += log(-z) else: if type(z) is float or z.imag == 0.0: s += math_log(abs(z)) else: s += cmath.log(z) return s def ei(z, _e1=False): typez = type(z) if typez not in (float, complex): try: z = float(z) typez = float except (TypeError, ValueError): z = complex(z) typez = complex if not z: return -INF absz = abs(z) if absz > EI_ASYMP_CONVERGENCE_RADIUS: return ei_asymp(z, _e1) elif absz <= 2.0 or (typez is float and z > 0.0): return ei_taylor(z, _e1) # Integrate, starting from whichever is smaller of a Taylor # series value or an asymptotic series value if typez is complex and z.real > 0.0: zref = z / absz ref = ei_taylor(zref, _e1) else: zref = EI_ASYMP_CONVERGENCE_RADIUS * z / absz ref = ei_asymp(zref, _e1) C = (zref-z)*0.5 D = (zref+z)*0.5 s = 0.0 if type(z) is complex: _exp = cmath.exp else: _exp = math.exp for x,w in gauss42: t = C*x+D s += w*_exp(t)/t ref -= C*s return ref def e1(z): # hack to get consistent signs if the imaginary part if 0 # and signed typez = type(z) if type(z) not in (float, complex): try: z = float(z) typez = float except (TypeError, ValueError): z = complex(z) typez = complex if typez is complex and not z.imag: z = complex(z.real, 0.0) # end hack return -ei(-z, _e1=True) _zeta_int = [\ -0.5, 0.0, 1.6449340668482264365,1.2020569031595942854,1.0823232337111381915, 1.0369277551433699263,1.0173430619844491397,1.0083492773819228268, 1.0040773561979443394,1.0020083928260822144,1.0009945751278180853, 1.0004941886041194646,1.0002460865533080483,1.0001227133475784891, 1.0000612481350587048,1.0000305882363070205,1.0000152822594086519, 1.0000076371976378998,1.0000038172932649998,1.0000019082127165539, 1.0000009539620338728,1.0000004769329867878,1.0000002384505027277, 1.0000001192199259653,1.0000000596081890513,1.0000000298035035147, 1.0000000149015548284] _zeta_P = [-3.50000000087575873, -0.701274355654678147, -0.0672313458590012612, -0.00398731457954257841, -0.000160948723019303141, -4.67633010038383371e-6, -1.02078104417700585e-7, -1.68030037095896287e-9, -1.85231868742346722e-11][::-1] _zeta_Q = [1.00000000000000000, -0.936552848762465319, -0.0588835413263763741, -0.00441498861482948666, -0.000143416758067432622, -5.10691659585090782e-6, -9.58813053268913799e-8, -1.72963791443181972e-9, -1.83527919681474132e-11][::-1] _zeta_1 = [3.03768838606128127e-10, -1.21924525236601262e-8, 2.01201845887608893e-7, -1.53917240683468381e-6, -5.09890411005967954e-7, 0.000122464707271619326, -0.000905721539353130232, -0.00239315326074843037, 0.084239750013159168, 0.418938517907442414, 0.500000001921884009] _zeta_0 = [-3.46092485016748794e-10, -6.42610089468292485e-9, 1.76409071536679773e-7, -1.47141263991560698e-6, -6.38880222546167613e-7, 0.000122641099800668209, -0.000905894913516772796, -0.00239303348507992713, 0.0842396947501199816, 0.418938533204660256, 0.500000000000000052] def zeta(s): """ Riemann zeta function, real argument """ if not isinstance(s, (float, int)): try: s = float(s) except (ValueError, TypeError): try: s = complex(s) if not s.imag: return complex(zeta(s.real)) except (ValueError, TypeError): pass raise NotImplementedError if s == 1: raise ValueError("zeta(1) pole") if s >= 27: return 1.0 + 2.0**(-s) + 3.0**(-s) n = int(s) if n == s: if n >= 0: return _zeta_int[n] if not (n % 2): return 0.0 if s <= 0.0: return 2.**s*pi**(s-1)*_sinpi_real(0.5*s)*_gamma_real(1-s)*zeta(1-s) if s <= 2.0: if s <= 1.0: return _polyval(_zeta_0,s)/(s-1) return _polyval(_zeta_1,s)/(s-1) z = _polyval(_zeta_P,s) / _polyval(_zeta_Q,s) return 1.0 + 2.0**(-s) + 3.0**(-s) + 4.0**(-s)*z mpmath-1.0.0/mpmath/matrices/000077500000000000000000000000001316273626600161075ustar00rootroot00000000000000mpmath-1.0.0/mpmath/matrices/__init__.py000066400000000000000000000001361316273626600202200ustar00rootroot00000000000000from . import eigen # to set methods from . import eigen_symmetric # to set methods mpmath-1.0.0/mpmath/matrices/calculus.py000066400000000000000000000442611316273626600203030ustar00rootroot00000000000000from ..libmp.backend import xrange # TODO: should use diagonalization-based algorithms class MatrixCalculusMethods(object): def _exp_pade(ctx, a): """ Exponential of a matrix using Pade approximants. See G. H. Golub, C. F. van Loan 'Matrix Computations', third Ed., page 572 TODO: - find a good estimate for q - reduce the number of matrix multiplications to improve performance """ def eps_pade(p): return ctx.mpf(2)**(3-2*p) * \ ctx.factorial(p)**2/(ctx.factorial(2*p)**2 * (2*p + 1)) q = 4 extraq = 8 while 1: if eps_pade(q) < ctx.eps: break q += 1 q += extraq j = int(max(1, ctx.mag(ctx.mnorm(a,'inf')))) extra = q prec = ctx.prec ctx.dps += extra + 3 try: a = a/2**j na = a.rows den = ctx.eye(na) num = ctx.eye(na) x = ctx.eye(na) c = ctx.mpf(1) for k in range(1, q+1): c *= ctx.mpf(q - k + 1)/((2*q - k + 1) * k) x = a*x cx = c*x num += cx den += (-1)**k * cx f = ctx.lu_solve_mat(den, num) for k in range(j): f = f*f finally: ctx.prec = prec return f*1 def expm(ctx, A, method='taylor'): r""" Computes the matrix exponential of a square matrix `A`, which is defined by the power series .. math :: \exp(A) = I + A + \frac{A^2}{2!} + \frac{A^3}{3!} + \ldots With method='taylor', the matrix exponential is computed using the Taylor series. With method='pade', Pade approximants are used instead. **Examples** Basic examples:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> expm(zeros(3)) [1.0 0.0 0.0] [0.0 1.0 0.0] [0.0 0.0 1.0] >>> expm(eye(3)) [2.71828182845905 0.0 0.0] [ 0.0 2.71828182845905 0.0] [ 0.0 0.0 2.71828182845905] >>> expm([[1,1,0],[1,0,1],[0,1,0]]) [ 3.86814500615414 2.26812870852145 0.841130841230196] [ 2.26812870852145 2.44114713886289 1.42699786729125] [0.841130841230196 1.42699786729125 1.6000162976327] >>> expm([[1,1,0],[1,0,1],[0,1,0]], method='pade') [ 3.86814500615414 2.26812870852145 0.841130841230196] [ 2.26812870852145 2.44114713886289 1.42699786729125] [0.841130841230196 1.42699786729125 1.6000162976327] >>> expm([[1+j, 0], [1+j,1]]) [(1.46869393991589 + 2.28735528717884j) 0.0] [ (1.03776739863568 + 3.536943175722j) (2.71828182845905 + 0.0j)] Matrices with large entries are allowed:: >>> expm(matrix([[1,2],[2,3]])**25) [5.65024064048415e+2050488462815550 9.14228140091932e+2050488462815550] [9.14228140091932e+2050488462815550 1.47925220414035e+2050488462815551] The identity `\exp(A+B) = \exp(A) \exp(B)` does not hold for noncommuting matrices:: >>> A = hilbert(3) >>> B = A + eye(3) >>> chop(mnorm(A*B - B*A)) 0.0 >>> chop(mnorm(expm(A+B) - expm(A)*expm(B))) 0.0 >>> B = A + ones(3) >>> mnorm(A*B - B*A) 1.8 >>> mnorm(expm(A+B) - expm(A)*expm(B)) 42.0927851137247 """ if method == 'pade': prec = ctx.prec try: A = ctx.matrix(A) ctx.prec += 2*A.rows res = ctx._exp_pade(A) finally: ctx.prec = prec return res A = ctx.matrix(A) prec = ctx.prec j = int(max(1, ctx.mag(ctx.mnorm(A,'inf')))) j += int(0.5*prec**0.5) try: ctx.prec += 10 + 2*j tol = +ctx.eps A = A/2**j T = A Y = A**0 + A k = 2 while 1: T *= A * (1/ctx.mpf(k)) if ctx.mnorm(T, 'inf') < tol: break Y += T k += 1 for k in xrange(j): Y = Y*Y finally: ctx.prec = prec Y *= 1 return Y def cosm(ctx, A): r""" Gives the cosine of a square matrix `A`, defined in analogy with the matrix exponential. Examples:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> X = eye(3) >>> cosm(X) [0.54030230586814 0.0 0.0] [ 0.0 0.54030230586814 0.0] [ 0.0 0.0 0.54030230586814] >>> X = hilbert(3) >>> cosm(X) [ 0.424403834569555 -0.316643413047167 -0.221474945949293] [-0.316643413047167 0.820646708837824 -0.127183694770039] [-0.221474945949293 -0.127183694770039 0.909236687217541] >>> X = matrix([[1+j,-2],[0,-j]]) >>> cosm(X) [(0.833730025131149 - 0.988897705762865j) (1.07485840848393 - 0.17192140544213j)] [ 0.0 (1.54308063481524 + 0.0j)] """ B = 0.5 * (ctx.expm(A*ctx.j) + ctx.expm(A*(-ctx.j))) if not sum(A.apply(ctx.im).apply(abs)): B = B.apply(ctx.re) return B def sinm(ctx, A): r""" Gives the sine of a square matrix `A`, defined in analogy with the matrix exponential. Examples:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> X = eye(3) >>> sinm(X) [0.841470984807897 0.0 0.0] [ 0.0 0.841470984807897 0.0] [ 0.0 0.0 0.841470984807897] >>> X = hilbert(3) >>> sinm(X) [0.711608512150994 0.339783913247439 0.220742837314741] [0.339783913247439 0.244113865695532 0.187231271174372] [0.220742837314741 0.187231271174372 0.155816730769635] >>> X = matrix([[1+j,-2],[0,-j]]) >>> sinm(X) [(1.29845758141598 + 0.634963914784736j) (-1.96751511930922 + 0.314700021761367j)] [ 0.0 (0.0 - 1.1752011936438j)] """ B = (-0.5j) * (ctx.expm(A*ctx.j) - ctx.expm(A*(-ctx.j))) if not sum(A.apply(ctx.im).apply(abs)): B = B.apply(ctx.re) return B def _sqrtm_rot(ctx, A, _may_rotate): # If the iteration fails to converge, cheat by performing # a rotation by a complex number u = ctx.j**0.3 return ctx.sqrtm(u*A, _may_rotate) / ctx.sqrt(u) def sqrtm(ctx, A, _may_rotate=2): r""" Computes a square root of the square matrix `A`, i.e. returns a matrix `B = A^{1/2}` such that `B^2 = A`. The square root of a matrix, if it exists, is not unique. **Examples** Square roots of some simple matrices:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> sqrtm([[1,0], [0,1]]) [1.0 0.0] [0.0 1.0] >>> sqrtm([[0,0], [0,0]]) [0.0 0.0] [0.0 0.0] >>> sqrtm([[2,0],[0,1]]) [1.4142135623731 0.0] [ 0.0 1.0] >>> sqrtm([[1,1],[1,0]]) [ (0.920442065259926 - 0.21728689675164j) (0.568864481005783 + 0.351577584254143j)] [(0.568864481005783 + 0.351577584254143j) (0.351577584254143 - 0.568864481005783j)] >>> sqrtm([[1,0],[0,1]]) [1.0 0.0] [0.0 1.0] >>> sqrtm([[-1,0],[0,1]]) [(0.0 - 1.0j) 0.0] [ 0.0 (1.0 + 0.0j)] >>> sqrtm([[j,0],[0,j]]) [(0.707106781186547 + 0.707106781186547j) 0.0] [ 0.0 (0.707106781186547 + 0.707106781186547j)] A square root of a rotation matrix, giving the corresponding half-angle rotation matrix:: >>> t1 = 0.75 >>> t2 = t1 * 0.5 >>> A1 = matrix([[cos(t1), -sin(t1)], [sin(t1), cos(t1)]]) >>> A2 = matrix([[cos(t2), -sin(t2)], [sin(t2), cos(t2)]]) >>> sqrtm(A1) [0.930507621912314 -0.366272529086048] [0.366272529086048 0.930507621912314] >>> A2 [0.930507621912314 -0.366272529086048] [0.366272529086048 0.930507621912314] The identity `(A^2)^{1/2} = A` does not necessarily hold:: >>> A = matrix([[4,1,4],[7,8,9],[10,2,11]]) >>> sqrtm(A**2) [ 4.0 1.0 4.0] [ 7.0 8.0 9.0] [10.0 2.0 11.0] >>> sqrtm(A)**2 [ 4.0 1.0 4.0] [ 7.0 8.0 9.0] [10.0 2.0 11.0] >>> A = matrix([[-4,1,4],[7,-8,9],[10,2,11]]) >>> sqrtm(A**2) [ 7.43715112194995 -0.324127569985474 1.8481718827526] [-0.251549715716942 9.32699765900402 2.48221180985147] [ 4.11609388833616 0.775751877098258 13.017955697342] >>> chop(sqrtm(A)**2) [-4.0 1.0 4.0] [ 7.0 -8.0 9.0] [10.0 2.0 11.0] For some matrices, a square root does not exist:: >>> sqrtm([[0,1], [0,0]]) Traceback (most recent call last): ... ZeroDivisionError: matrix is numerically singular Two examples from the documentation for Matlab's ``sqrtm``:: >>> mp.dps = 15; mp.pretty = True >>> sqrtm([[7,10],[15,22]]) [1.56669890360128 1.74077655955698] [2.61116483933547 4.17786374293675] >>> >>> X = matrix(\ ... [[5,-4,1,0,0], ... [-4,6,-4,1,0], ... [1,-4,6,-4,1], ... [0,1,-4,6,-4], ... [0,0,1,-4,5]]) >>> Y = matrix(\ ... [[2,-1,-0,-0,-0], ... [-1,2,-1,0,-0], ... [0,-1,2,-1,0], ... [-0,0,-1,2,-1], ... [-0,-0,-0,-1,2]]) >>> mnorm(sqrtm(X) - Y) 4.53155328326114e-19 """ A = ctx.matrix(A) # Trivial if A*0 == A: return A prec = ctx.prec if _may_rotate: d = ctx.det(A) if abs(ctx.im(d)) < 16*ctx.eps and ctx.re(d) < 0: return ctx._sqrtm_rot(A, _may_rotate-1) try: ctx.prec += 10 tol = ctx.eps * 128 Y = A Z = I = A**0 k = 0 # Denman-Beavers iteration while 1: Yprev = Y try: Y, Z = 0.5*(Y+ctx.inverse(Z)), 0.5*(Z+ctx.inverse(Y)) except ZeroDivisionError: if _may_rotate: Y = ctx._sqrtm_rot(A, _may_rotate-1) break else: raise mag1 = ctx.mnorm(Y-Yprev, 'inf') mag2 = ctx.mnorm(Y, 'inf') if mag1 <= mag2*tol: break if _may_rotate and k > 6 and not mag1 < mag2 * 0.001: return ctx._sqrtm_rot(A, _may_rotate-1) k += 1 if k > ctx.prec: raise ctx.NoConvergence finally: ctx.prec = prec Y *= 1 return Y def logm(ctx, A): r""" Computes a logarithm of the square matrix `A`, i.e. returns a matrix `B = \log(A)` such that `\exp(B) = A`. The logarithm of a matrix, if it exists, is not unique. **Examples** Logarithms of some simple matrices:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> X = eye(3) >>> logm(X) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] >>> logm(2*X) [0.693147180559945 0.0 0.0] [ 0.0 0.693147180559945 0.0] [ 0.0 0.0 0.693147180559945] >>> logm(expm(X)) [1.0 0.0 0.0] [0.0 1.0 0.0] [0.0 0.0 1.0] A logarithm of a complex matrix:: >>> X = matrix([[2+j, 1, 3], [1-j, 1-2*j, 1], [-4, -5, j]]) >>> B = logm(X) >>> nprint(B) [ (0.808757 + 0.107759j) (2.20752 + 0.202762j) (1.07376 - 0.773874j)] [ (0.905709 - 0.107795j) (0.0287395 - 0.824993j) (0.111619 + 0.514272j)] [(-0.930151 + 0.399512j) (-2.06266 - 0.674397j) (0.791552 + 0.519839j)] >>> chop(expm(B)) [(2.0 + 1.0j) 1.0 3.0] [(1.0 - 1.0j) (1.0 - 2.0j) 1.0] [ -4.0 -5.0 (0.0 + 1.0j)] A matrix `X` close to the identity matrix, for which `\log(\exp(X)) = \exp(\log(X)) = X` holds:: >>> X = eye(3) + hilbert(3)/4 >>> X [ 1.25 0.125 0.0833333333333333] [ 0.125 1.08333333333333 0.0625] [0.0833333333333333 0.0625 1.05] >>> logm(expm(X)) [ 1.25 0.125 0.0833333333333333] [ 0.125 1.08333333333333 0.0625] [0.0833333333333333 0.0625 1.05] >>> expm(logm(X)) [ 1.25 0.125 0.0833333333333333] [ 0.125 1.08333333333333 0.0625] [0.0833333333333333 0.0625 1.05] A logarithm of a rotation matrix, giving back the angle of the rotation:: >>> t = 3.7 >>> A = matrix([[cos(t),sin(t)],[-sin(t),cos(t)]]) >>> chop(logm(A)) [ 0.0 -2.58318530717959] [2.58318530717959 0.0] >>> (2*pi-t) 2.58318530717959 For some matrices, a logarithm does not exist:: >>> logm([[1,0], [0,0]]) Traceback (most recent call last): ... ZeroDivisionError: matrix is numerically singular Logarithm of a matrix with large entries:: >>> logm(hilbert(3) * 10**20).apply(re) [ 45.5597513593433 1.27721006042799 0.317662687717978] [ 1.27721006042799 42.5222778973542 2.24003708791604] [0.317662687717978 2.24003708791604 42.395212822267] """ A = ctx.matrix(A) prec = ctx.prec try: ctx.prec += 10 tol = ctx.eps * 128 I = A**0 B = A n = 0 while 1: B = ctx.sqrtm(B) n += 1 if ctx.mnorm(B-I, 'inf') < 0.125: break T = X = B-I L = X*0 k = 1 while 1: if k & 1: L += T / k else: L -= T / k T *= X if ctx.mnorm(T, 'inf') < tol: break k += 1 if k > ctx.prec: raise ctx.NoConvergence finally: ctx.prec = prec L *= 2**n return L def powm(ctx, A, r): r""" Computes `A^r = \exp(A \log r)` for a matrix `A` and complex number `r`. **Examples** Powers and inverse powers of a matrix:: >>> from mpmath import * >>> mp.dps = 15; mp.pretty = True >>> A = matrix([[4,1,4],[7,8,9],[10,2,11]]) >>> powm(A, 2) [ 63.0 20.0 69.0] [174.0 89.0 199.0] [164.0 48.0 179.0] >>> chop(powm(powm(A, 4), 1/4.)) [ 4.0 1.0 4.0] [ 7.0 8.0 9.0] [10.0 2.0 11.0] >>> powm(extraprec(20)(powm)(A, -4), -1/4.) [ 4.0 1.0 4.0] [ 7.0 8.0 9.0] [10.0 2.0 11.0] >>> chop(powm(powm(A, 1+0.5j), 1/(1+0.5j))) [ 4.0 1.0 4.0] [ 7.0 8.0 9.0] [10.0 2.0 11.0] >>> powm(extraprec(5)(powm)(A, -1.5), -1/(1.5)) [ 4.0 1.0 4.0] [ 7.0 8.0 9.0] [10.0 2.0 11.0] A Fibonacci-generating matrix:: >>> powm([[1,1],[1,0]], 10) [89.0 55.0] [55.0 34.0] >>> fib(10) 55.0 >>> powm([[1,1],[1,0]], 6.5) [(16.5166626964253 - 0.0121089837381789j) (10.2078589271083 + 0.0195927472575932j)] [(10.2078589271083 + 0.0195927472575932j) (6.30880376931698 - 0.0317017309957721j)] >>> (phi**6.5 - (1-phi)**6.5)/sqrt(5) (10.2078589271083 - 0.0195927472575932j) >>> powm([[1,1],[1,0]], 6.2) [ (14.3076953002666 - 0.008222855781077j) (8.81733464837593 + 0.0133048601383712j)] [(8.81733464837593 + 0.0133048601383712j) (5.49036065189071 - 0.0215277159194482j)] >>> (phi**6.2 - (1-phi)**6.2)/sqrt(5) (8.81733464837593 - 0.0133048601383712j) """ A = ctx.matrix(A) r = ctx.convert(r) prec = ctx.prec try: ctx.prec += 10 if ctx.isint(r): v = A ** int(r) elif ctx.isint(r*2): y = int(r*2) v = ctx.sqrtm(A) ** y else: v = ctx.expm(r*ctx.logm(A)) finally: ctx.prec = prec v *= 1 return v mpmath-1.0.0/mpmath/matrices/eigen.py000066400000000000000000000577141316273626600175660ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- ################################################################################################## # module for the eigenvalue problem # Copyright 2013 Timo Hartmann (thartmann15 at gmail.com) # # todo: # - implement balancing # - agressive early deflation # ################################################################################################## """ The eigenvalue problem ---------------------- This file contains routines for the eigenvalue problem. high level routines: hessenberg : reduction of a real or complex square matrix to upper Hessenberg form schur : reduction of a real or complex square matrix to upper Schur form eig : eigenvalues and eigenvectors of a real or complex square matrix low level routines: hessenberg_reduce_0 : reduction of a real or complex square matrix to upper Hessenberg form hessenberg_reduce_1 : auxiliary routine to hessenberg_reduce_0 qr_step : a single implicitly shifted QR step for an upper Hessenberg matrix hessenberg_qr : Schur decomposition of an upper Hessenberg matrix eig_tr_r : right eigenvectors of an upper triangular matrix eig_tr_l : left eigenvectors of an upper triangular matrix """ from ..libmp.backend import xrange class Eigen(object): pass def defun(f): setattr(Eigen, f.__name__, f) def hessenberg_reduce_0(ctx, A, T): """ This routine computes the (upper) Hessenberg decomposition of a square matrix A. Given A, an unitary matrix Q is calculated such that Q' A Q = H and Q' Q = Q Q' = 1 where H is an upper Hessenberg matrix, meaning that it only contains zeros below the first subdiagonal. Here ' denotes the hermitian transpose (i.e. transposition and conjugation). parameters: A (input/output) On input, A contains the square matrix A of dimension (n,n). On output, A contains a compressed representation of Q and H. T (output) An array of length n containing the first elements of the Householder reflectors. """ # internally we work with householder reflections from the right. # let u be a row vector (i.e. u[i]=A[i,:i]). then # Q is build up by reflectors of the type (1-v'v) where v is a suitable # modification of u. these reflectors are applyed to A from the right. # because we work with reflectors from the right we have to start with # the bottom row of A and work then upwards (this corresponds to # some kind of RQ decomposition). # the first part of the vectors v (i.e. A[i,:(i-1)]) are stored as row vectors # in the lower left part of A (excluding the diagonal and subdiagonal). # the last entry of v is stored in T. # the upper right part of A (including diagonal and subdiagonal) becomes H. n = A.rows if n <= 2: return for i in xrange(n-1, 1, -1): # scale the vector scale = 0 for k in xrange(0, i): scale += abs(ctx.re(A[i,k])) + abs(ctx.im(A[i,k])) scale_inv = 0 if scale != 0: scale_inv = 1 / scale if scale == 0 or ctx.isinf(scale_inv): # sadly there are floating point numbers not equal to zero whose reciprocal is infinity T[i] = 0 A[i,i-1] = 0 continue # calculate parameters for housholder transformation H = 0 for k in xrange(0, i): A[i,k] *= scale_inv rr = ctx.re(A[i,k]) ii = ctx.im(A[i,k]) H += rr * rr + ii * ii F = A[i,i-1] f = abs(F) G = ctx.sqrt(H) A[i,i-1] = - G * scale if f == 0: T[i] = G else: ff = F / f T[i] = F + G * ff A[i,i-1] *= ff H += G * f H = 1 / ctx.sqrt(H) T[i] *= H for k in xrange(0, i - 1): A[i,k] *= H for j in xrange(0, i): # apply housholder transformation (from right) G = ctx.conj(T[i]) * A[j,i-1] for k in xrange(0, i-1): G += ctx.conj(A[i,k]) * A[j,k] A[j,i-1] -= G * T[i] for k in xrange(0, i-1): A[j,k] -= G * A[i,k] for j in xrange(0, n): # apply housholder transformation (from left) G = T[i] * A[i-1,j] for k in xrange(0, i-1): G += A[i,k] * A[k,j] A[i-1,j] -= G * ctx.conj(T[i]) for k in xrange(0, i-1): A[k,j] -= G * ctx.conj(A[i,k]) def hessenberg_reduce_1(ctx, A, T): """ This routine forms the unitary matrix Q described in hessenberg_reduce_0. parameters: A (input/output) On input, A is the same matrix as delivered by hessenberg_reduce_0. On output, A is set to Q. T (input) On input, T is the same array as delivered by hessenberg_reduce_0. """ n = A.rows if n == 1: A[0,0] = 1 return A[0,0] = A[1,1] = 1 A[0,1] = A[1,0] = 0 for i in xrange(2, n): if T[i] != 0: for j in xrange(0, i): G = T[i] * A[i-1,j] for k in xrange(0, i-1): G += A[i,k] * A[k,j] A[i-1,j] -= G * ctx.conj(T[i]) for k in xrange(0, i-1): A[k,j] -= G * ctx.conj(A[i,k]) A[i,i] = 1 for j in xrange(0, i): A[j,i] = A[i,j] = 0 @defun def hessenberg(ctx, A, overwrite_a = False): """ This routine computes the Hessenberg decomposition of a square matrix A. Given A, an unitary matrix Q is determined such that Q' A Q = H and Q' Q = Q Q' = 1 where H is an upper right Hessenberg matrix. Here ' denotes the hermitian transpose (i.e. transposition and conjugation). input: A : a real or complex square matrix overwrite_a : if true, allows modification of A which may improve performance. if false, A is not modified. output: Q : an unitary matrix H : an upper right Hessenberg matrix example: >>> from mpmath import mp >>> A = mp.matrix([[3, -1, 2], [2, 5, -5], [-2, -3, 7]]) >>> Q, H = mp.hessenberg(A) >>> mp.nprint(H, 3) # doctest:+SKIP [ 3.15 2.23 4.44] [-0.769 4.85 3.05] [ 0.0 3.61 7.0] >>> print(mp.chop(A - Q * H * Q.transpose_conj())) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] return value: (Q, H) """ n = A.rows if n == 1: return (ctx.matrix([[1]]), A) if not overwrite_a: A = A.copy() T = ctx.matrix(n, 1) hessenberg_reduce_0(ctx, A, T) Q = A.copy() hessenberg_reduce_1(ctx, Q, T) for x in xrange(n): for y in xrange(x+2, n): A[y,x] = 0 return Q, A ########################################################################### def qr_step(ctx, n0, n1, A, Q, shift): """ This subroutine executes a single implicitly shifted QR step applied to an upper Hessenberg matrix A. Given A and shift as input, first an QR decomposition is calculated: Q R = A - shift * 1 . The output is then following matrix: R Q + shift * 1 parameters: n0, n1 (input) Two integers which specify the submatrix A[n0:n1,n0:n1] on which this subroutine operators. The subdiagonal elements to the left and below this submatrix must be deflated (i.e. zero). following restriction is imposed: n1>=n0+2 A (input/output) On input, A is an upper Hessenberg matrix. On output, A is replaced by "R Q + shift * 1" Q (input/output) The parameter Q is multiplied by the unitary matrix Q arising from the QR decomposition. Q can also be false, in which case the unitary matrix Q is not computated. shift (input) a complex number specifying the shift. idealy close to an eigenvalue of the bottemmost part of the submatrix A[n0:n1,n0:n1]. references: Stoer, Bulirsch - Introduction to Numerical Analysis. Kresser : Numerical Methods for General and Structured Eigenvalue Problems """ # implicitly shifted and bulge chasing is explained at p.398/399 in "Stoer, Bulirsch - Introduction to Numerical Analysis" # for bulge chasing see also "Watkins - The Matrix Eigenvalue Problem" sec.4.5,p.173 # the Givens rotation we used is determined as follows: let c,s be two complex # numbers. then we have following relation: # # v = sqrt(|c|^2 + |s|^2) # # 1/v [ c~ s~] [c] = [v] # [-s c ] [s] [0] # # the matrix on the left is our Givens rotation. n = A.rows # first step # calculate givens rotation c = A[n0 ,n0] - shift s = A[n0+1,n0] v = ctx.hypot(ctx.hypot(ctx.re(c), ctx.im(c)), ctx.hypot(ctx.re(s), ctx.im(s))) if v == 0: v = 1 c = 1 s = 0 else: c /= v s /= v for k in xrange(n0, n): # apply givens rotation from the left x = A[n0 ,k] y = A[n0+1,k] A[n0 ,k] = ctx.conj(c) * x + ctx.conj(s) * y A[n0+1,k] = -s * x + c * y for k in xrange(min(n1, n0+3)): # apply givens rotation from the right x = A[k,n0 ] y = A[k,n0+1] A[k,n0 ] = c * x + s * y A[k,n0+1] = -ctx.conj(s) * x + ctx.conj(c) * y if not isinstance(Q, bool): for k in xrange(n): # eigenvectors x = Q[k,n0 ] y = Q[k,n0+1] Q[k,n0 ] = c * x + s * y Q[k,n0+1] = -ctx.conj(s) * x + ctx.conj(c) * y # chase the bulge for j in xrange(n0, n1 - 2): # calculate givens rotation c = A[j+1,j] s = A[j+2,j] v = ctx.hypot(ctx.hypot(ctx.re(c), ctx.im(c)), ctx.hypot(ctx.re(s), ctx.im(s))) if v == 0: A[j+1,j] = 0 v = 1 c = 1 s = 0 else: A[j+1,j] = v c /= v s /= v A[j+2,j] = 0 for k in xrange(j+1, n): # apply givens rotation from the left x = A[j+1,k] y = A[j+2,k] A[j+1,k] = ctx.conj(c) * x + ctx.conj(s) * y A[j+2,k] = -s * x + c * y for k in xrange(0, min(n1, j+4)): # apply givens rotation from the right x = A[k,j+1] y = A[k,j+2] A[k,j+1] = c * x + s * y A[k,j+2] = -ctx.conj(s) * x + ctx.conj(c) * y if not isinstance(Q, bool): for k in xrange(0, n): # eigenvectors x = Q[k,j+1] y = Q[k,j+2] Q[k,j+1] = c * x + s * y Q[k,j+2] = -ctx.conj(s) * x + ctx.conj(c) * y def hessenberg_qr(ctx, A, Q): """ This routine computes the Schur decomposition of an upper Hessenberg matrix A. Given A, an unitary matrix Q is determined such that Q' A Q = R and Q' Q = Q Q' = 1 where R is an upper right triangular matrix. Here ' denotes the hermitian transpose (i.e. transposition and conjugation). parameters: A (input/output) On input, A contains an upper Hessenberg matrix. On output, A is replace by the upper right triangluar matrix R. Q (input/output) The parameter Q is multiplied by the unitary matrix Q arising from the Schur decomposition. Q can also be false, in which case the unitary matrix Q is not computated. """ n = A.rows norm = 0 for x in xrange(n): for y in xrange(min(x+2, n)): norm += ctx.re(A[y,x]) ** 2 + ctx.im(A[y,x]) ** 2 norm = ctx.sqrt(norm) / n if norm == 0: return n0 = 0 n1 = n eps = ctx.eps / (100 * n) maxits = ctx.dps * 4 its = totalits = 0 while 1: # kressner p.32 algo 3 # the active submatrix is A[n0:n1,n0:n1] k = n0 while k + 1 < n1: s = abs(ctx.re(A[k,k])) + abs(ctx.im(A[k,k])) + abs(ctx.re(A[k+1,k+1])) + abs(ctx.im(A[k+1,k+1])) if s < eps * norm: s = norm if abs(A[k+1,k]) < eps * s: break k += 1 if k + 1 < n1: # deflation found at position (k+1, k) A[k+1,k] = 0 n0 = k + 1 its = 0 if n0 + 1 >= n1: # block of size at most two has converged n0 = 0 n1 = k + 1 if n1 < 2: # QR algorithm has converged return else: if (its % 30) == 10: # exceptional shift shift = A[n1-1,n1-2] elif (its % 30) == 20: # exceptional shift shift = abs(A[n1-1,n1-2]) elif (its % 30) == 29: # exceptional shift shift = norm else: # A = [ a b ] det(x-A)=x*x-x*tr(A)+det(A) # [ c d ] # # eigenvalues bad: (tr(A)+sqrt((tr(A))**2-4*det(A)))/2 # bad because of cancellation if |c| is small and |a-d| is small, too. # # eigenvalues good: (a+d+sqrt((a-d)**2+4*b*c))/2 t = A[n1-2,n1-2] + A[n1-1,n1-1] s = (A[n1-1,n1-1] - A[n1-2,n1-2]) ** 2 + 4 * A[n1-1,n1-2] * A[n1-2,n1-1] if ctx.re(s) > 0: s = ctx.sqrt(s) else: s = ctx.sqrt(-s) * 1j a = (t + s) / 2 b = (t - s) / 2 if abs(A[n1-1,n1-1] - a) > abs(A[n1-1,n1-1] - b): shift = b else: shift = a its += 1 totalits += 1 qr_step(ctx, n0, n1, A, Q, shift) if its > maxits: raise RuntimeError("qr: failed to converge after %d steps" % its) @defun def schur(ctx, A, overwrite_a = False): """ This routine computes the Schur decomposition of a square matrix A. Given A, an unitary matrix Q is determined such that Q' A Q = R and Q' Q = Q Q' = 1 where R is an upper right triangular matrix. Here ' denotes the hermitian transpose (i.e. transposition and conjugation). input: A : a real or complex square matrix overwrite_a : if true, allows modification of A which may improve performance. if false, A is not modified. output: Q : an unitary matrix R : an upper right triangular matrix return value: (Q, R) example: >>> from mpmath import mp >>> A = mp.matrix([[3, -1, 2], [2, 5, -5], [-2, -3, 7]]) >>> Q, R = mp.schur(A) >>> mp.nprint(R, 3) # doctest:+SKIP [2.0 0.417 -2.53] [0.0 4.0 -4.74] [0.0 0.0 9.0] >>> print(mp.chop(A - Q * R * Q.transpose_conj())) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] warning: The Schur decomposition is not unique. """ n = A.rows if n == 1: return (ctx.matrix([[1]]), A) if not overwrite_a: A = A.copy() T = ctx.matrix(n, 1) hessenberg_reduce_0(ctx, A, T) Q = A.copy() hessenberg_reduce_1(ctx, Q, T) for x in xrange(n): for y in xrange(x + 2, n): A[y,x] = 0 hessenberg_qr(ctx, A, Q) return Q, A def eig_tr_r(ctx, A): """ This routine calculates the right eigenvectors of an upper right triangular matrix. input: A an upper right triangular matrix output: ER a matrix whose columns form the right eigenvectors of A return value: ER """ # this subroutine is inspired by the lapack routines ctrevc.f,clatrs.f n = A.rows ER = ctx.eye(n) eps = ctx.eps unfl = ctx.ldexp(ctx.one, -ctx.prec * 30) # since mpmath effectively has no limits on the exponent, we simply scale doubles up # original double has prec*20 smlnum = unfl * (n / eps) simin = 1 / ctx.sqrt(eps) rmax = 1 for i in xrange(1, n): s = A[i,i] smin = max(eps * abs(s), smlnum) for j in xrange(i - 1, -1, -1): r = 0 for k in xrange(j + 1, i + 1): r += A[j,k] * ER[k,i] t = A[j,j] - s if abs(t) < smin: t = smin r = -r / t ER[j,i] = r rmax = max(rmax, abs(r)) if rmax > simin: for k in xrange(j, i+1): ER[k,i] /= rmax rmax = 1 if rmax != 1: for k in xrange(0, i + 1): ER[k,i] /= rmax return ER def eig_tr_l(ctx, A): """ This routine calculates the left eigenvectors of an upper right triangular matrix. input: A an upper right triangular matrix output: EL a matrix whose rows form the left eigenvectors of A return value: EL """ n = A.rows EL = ctx.eye(n) eps = ctx.eps unfl = ctx.ldexp(ctx.one, -ctx.prec * 30) # since mpmath effectively has no limits on the exponent, we simply scale doubles up # original double has prec*20 smlnum = unfl * (n / eps) simin = 1 / ctx.sqrt(eps) rmax = 1 for i in xrange(0, n - 1): s = A[i,i] smin = max(eps * abs(s), smlnum) for j in xrange(i + 1, n): r = 0 for k in xrange(i, j): r += EL[i,k] * A[k,j] t = A[j,j] - s if abs(t) < smin: t = smin r = -r / t EL[i,j] = r rmax = max(rmax, abs(r)) if rmax > simin: for k in xrange(i, j + 1): EL[i,k] /= rmax rmax = 1 if rmax != 1: for k in xrange(i, n): EL[i,k] /= rmax return EL @defun def eig(ctx, A, left = False, right = True, overwrite_a = False): """ This routine computes the eigenvalues and optionally the left and right eigenvectors of a square matrix A. Given A, a vector E and matrices ER and EL are calculated such that A ER[:,i] = E[i] ER[:,i] EL[i,:] A = EL[i,:] E[i] E contains the eigenvalues of A. The columns of ER contain the right eigenvectors of A whereas the rows of EL contain the left eigenvectors. input: A : a real or complex square matrix of shape (n, n) left : if true, the left eigenvectors are calulated. right : if true, the right eigenvectors are calculated. overwrite_a : if true, allows modification of A which may improve performance. if false, A is not modified. output: E : a list of length n containing the eigenvalues of A. ER : a matrix whose columns contain the right eigenvectors of A. EL : a matrix whose rows contain the left eigenvectors of A. return values: E if left and right are both false. (E, ER) if right is true and left is false. (E, EL) if left is true and right is false. (E, EL, ER) if left and right are true. examples: >>> from mpmath import mp >>> A = mp.matrix([[3, -1, 2], [2, 5, -5], [-2, -3, 7]]) >>> E, ER = mp.eig(A) >>> print(mp.chop(A * ER[:,0] - E[0] * ER[:,0])) [0.0] [0.0] [0.0] >>> E, EL, ER = mp.eig(A,left = True, right = True) >>> E, EL, ER = mp.eig_sort(E, EL, ER) >>> mp.nprint(E) [2.0, 4.0, 9.0] >>> print(mp.chop(A * ER[:,0] - E[0] * ER[:,0])) [0.0] [0.0] [0.0] >>> print(mp.chop( EL[0,:] * A - EL[0,:] * E[0])) [0.0 0.0 0.0] warning: - If there are multiple eigenvalues, the eigenvectors do not necessarily span the whole vectorspace, i.e. ER and EL may have not full rank. Furthermore in that case the eigenvectors are numerical ill-conditioned. - In the general case the eigenvalues have no natural order. see also: - eigh (or eigsy, eighe) for the symmetric eigenvalue problem. - eig_sort for sorting of eigenvalues and eigenvectors """ n = A.rows if n == 1: if left and (not right): return ([A[0]], ctx.matrix([[1]])) if right and (not left): return ([A[0]], ctx.matrix([[1]])) return ([A[0]], ctx.matrix([[1]]), ctx.matrix([[1]])) if not overwrite_a: A = A.copy() T = ctx.zeros(n, 1) hessenberg_reduce_0(ctx, A, T) if left or right: Q = A.copy() hessenberg_reduce_1(ctx, Q, T) else: Q = False for x in xrange(n): for y in xrange(x + 2, n): A[y,x] = 0 hessenberg_qr(ctx, A, Q) E = [0 for i in xrange(n)] for i in xrange(n): E[i] = A[i,i] if not (left or right): return E if left: EL = eig_tr_l(ctx, A) EL = EL * Q.transpose_conj() if right: ER = eig_tr_r(ctx, A) ER = Q * ER if left and (not right): return (E, EL) if right and (not left): return (E, ER) return (E, EL, ER) @defun def eig_sort(ctx, E, EL = False, ER = False, f = "real"): """ This routine sorts the eigenvalues and eigenvectors delivered by ``eig``. parameters: E : the eigenvalues as delivered by eig EL : the left eigenvectors as delivered by eig, or false ER : the right eigenvectors as delivered by eig, or false f : either a string ("real" sort by increasing real part, "imag" sort by increasing imag part, "abs" sort by absolute value) or a function mapping complexs to the reals, i.e. ``f = lambda x: -mp.re(x) `` would sort the eigenvalues by decreasing real part. return values: E if EL and ER are both false. (E, ER) if ER is not false and left is false. (E, EL) if EL is not false and right is false. (E, EL, ER) if EL and ER are not false. example: >>> from mpmath import mp >>> A = mp.matrix([[3, -1, 2], [2, 5, -5], [-2, -3, 7]]) >>> E, EL, ER = mp.eig(A,left = True, right = True) >>> E, EL, ER = mp.eig_sort(E, EL, ER) >>> mp.nprint(E) [2.0, 4.0, 9.0] >>> E, EL, ER = mp.eig_sort(E, EL, ER,f = lambda x: -mp.re(x)) >>> mp.nprint(E) [9.0, 4.0, 2.0] >>> print(mp.chop(A * ER[:,0] - E[0] * ER[:,0])) [0.0] [0.0] [0.0] >>> print(mp.chop( EL[0,:] * A - EL[0,:] * E[0])) [0.0 0.0 0.0] """ if isinstance(f, str): if f == "real": f = ctx.re elif f == "imag": f = ctx.im elif cmp == "abs": f = abs else: raise RuntimeError("unknown function %s" % f) n = len(E) # Sort eigenvalues (bubble-sort) for i in xrange(n): imax = i s = f(E[i]) # s is the current maximal element for j in xrange(i + 1, n): c = f(E[j]) if c < s: s = c imax = j if imax != i: # swap eigenvalues z = E[i] E[i] = E[imax] E[imax] = z if not isinstance(EL, bool): for j in xrange(n): z = EL[i,j] EL[i,j] = EL[imax,j] EL[imax,j] = z if not isinstance(ER, bool): for j in xrange(n): z = ER[j,i] ER[j,i] = ER[j,imax] ER[j,imax] = z if isinstance(EL, bool) and isinstance(ER, bool): return E if isinstance(EL, bool) and not(isinstance(ER, bool)): return (E, ER) if isinstance(ER, bool) and not(isinstance(EL, bool)): return (E, EL) return (E, EL, ER) mpmath-1.0.0/mpmath/matrices/eigen_symmetric.py000066400000000000000000001622341316273626600216540ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- ################################################################################################## # module for the symmetric eigenvalue problem # Copyright 2013 Timo Hartmann (thartmann15 at gmail.com) # # todo: # - implement balancing # ################################################################################################## """ The symmetric eigenvalue problem. --------------------------------- This file contains routines for the symmetric eigenvalue problem. high level routines: eigsy : real symmetric (ordinary) eigenvalue problem eighe : complex hermitian (ordinary) eigenvalue problem eigh : unified interface for eigsy and eighe svd_r : singular value decomposition for real matrices svd_c : singular value decomposition for complex matrices svd : unified interface for svd_r and svd_c low level routines: r_sy_tridiag : reduction of real symmetric matrix to real symmetric tridiagonal matrix c_he_tridiag_0 : reduction of complex hermitian matrix to real symmetric tridiagonal matrix c_he_tridiag_1 : auxiliary routine to c_he_tridiag_0 c_he_tridiag_2 : auxiliary routine to c_he_tridiag_0 tridiag_eigen : solves the real symmetric tridiagonal matrix eigenvalue problem svd_r_raw : raw singular value decomposition for real matrices svd_c_raw : raw singular value decomposition for complex matrices """ from ..libmp.backend import xrange from .eigen import defun def r_sy_tridiag(ctx, A, D, E, calc_ev = True): """ This routine transforms a real symmetric matrix A to a real symmetric tridiagonal matrix T using an orthogonal similarity transformation: Q' * A * Q = T (here ' denotes the matrix transpose). The orthogonal matrix Q is build up from Householder reflectors. parameters: A (input/output) On input, A contains the real symmetric matrix of dimension (n,n). On output, if calc_ev is true, A contains the orthogonal matrix Q, otherwise A is destroyed. D (output) real array of length n, contains the diagonal elements of the tridiagonal matrix E (output) real array of length n, contains the offdiagonal elements of the tridiagonal matrix in E[0:(n-1)] where is the dimension of the matrix A. E[n-1] is undefined. calc_ev (input) If calc_ev is true, this routine explicitly calculates the orthogonal matrix Q which is then returned in A. If calc_ev is false, Q is not explicitly calculated resulting in a shorter run time. This routine is a python translation of the fortran routine tred2.f in the software library EISPACK (see netlib.org) which itself is based on the algol procedure tred2 described in: - Num. Math. 11, p.181-195 (1968) by Martin, Reinsch and Wilkonson - Handbook for auto. comp., Vol II, Linear Algebra, p.212-226 (1971) For a good introduction to Householder reflections, see also Stoer, Bulirsch - Introduction to Numerical Analysis. """ # note : the vector v of the i-th houshoulder reflector is stored in a[(i+1):,i] # whereas v/ is stored in a[i,(i+1):] n = A.rows for i in xrange(n - 1, 0, -1): # scale the vector scale = 0 for k in xrange(0, i): scale += abs(A[k,i]) scale_inv = 0 if scale != 0: scale_inv = 1/scale # sadly there are floating point numbers not equal to zero whose reciprocal is infinity if i == 1 or scale == 0 or ctx.isinf(scale_inv): E[i] = A[i-1,i] # nothing to do D[i] = 0 continue # calculate parameters for housholder transformation H = 0 for k in xrange(0, i): A[k,i] *= scale_inv H += A[k,i] * A[k,i] F = A[i-1,i] G = ctx.sqrt(H) if F > 0: G = -G E[i] = scale * G H -= F * G A[i-1,i] = F - G F = 0 # apply housholder transformation for j in xrange(0, i): if calc_ev: A[i,j] = A[j,i] / H G = 0 # calculate A*U for k in xrange(0, j + 1): G += A[k,j] * A[k,i] for k in xrange(j + 1, i): G += A[j,k] * A[k,i] E[j] = G / H # calculate P F += E[j] * A[j,i] HH = F / (2 * H) for j in xrange(0, i): # calculate reduced A F = A[j,i] G = E[j] - HH * F # calculate Q E[j] = G for k in xrange(0, j + 1): A[k,j] -= F * E[k] + G * A[k,i] D[i] = H for i in xrange(1, n): # better for compatibility E[i-1] = E[i] E[n-1] = 0 if calc_ev: D[0] = 0 for i in xrange(0, n): if D[i] != 0: for j in xrange(0, i): # accumulate transformation matrices G = 0 for k in xrange(0, i): G += A[i,k] * A[k,j] for k in xrange(0, i): A[k,j] -= G * A[k,i] D[i] = A[i,i] A[i,i] = 1 for j in xrange(0, i): A[j,i] = A[i,j] = 0 else: for i in xrange(0, n): D[i] = A[i,i] def c_he_tridiag_0(ctx, A, D, E, T): """ This routine transforms a complex hermitian matrix A to a real symmetric tridiagonal matrix T using an unitary similarity transformation: Q' * A * Q = T (here ' denotes the hermitian matrix transpose, i.e. transposition und conjugation). The unitary matrix Q is build up from Householder reflectors and an unitary diagonal matrix. parameters: A (input/output) On input, A contains the complex hermitian matrix of dimension (n,n). On output, A contains the unitary matrix Q in compressed form. D (output) real array of length n, contains the diagonal elements of the tridiagonal matrix. E (output) real array of length n, contains the offdiagonal elements of the tridiagonal matrix in E[0:(n-1)] where is the dimension of the matrix A. E[n-1] is undefined. T (output) complex array of length n, contains a unitary diagonal matrix. This routine is a python translation (in slightly modified form) of the fortran routine htridi.f in the software library EISPACK (see netlib.org) which itself is a complex version of the algol procedure tred1 described in: - Num. Math. 11, p.181-195 (1968) by Martin, Reinsch and Wilkonson - Handbook for auto. comp., Vol II, Linear Algebra, p.212-226 (1971) For a good introduction to Householder reflections, see also Stoer, Bulirsch - Introduction to Numerical Analysis. """ n = A.rows T[n-1] = 1 for i in xrange(n - 1, 0, -1): # scale the vector scale = 0 for k in xrange(0, i): scale += abs(ctx.re(A[k,i])) + abs(ctx.im(A[k,i])) scale_inv = 0 if scale != 0: scale_inv = 1 / scale # sadly there are floating point numbers not equal to zero whose reciprocal is infinity if scale == 0 or ctx.isinf(scale_inv): E[i] = 0 D[i] = 0 T[i-1] = 1 continue if i == 1: F = A[i-1,i] f = abs(F) E[i] = f D[i] = 0 if f != 0: T[i-1] = T[i] * F / f else: T[i-1] = T[i] continue # calculate parameters for housholder transformation H = 0 for k in xrange(0, i): A[k,i] *= scale_inv rr = ctx.re(A[k,i]) ii = ctx.im(A[k,i]) H += rr * rr + ii * ii F = A[i-1,i] f = abs(F) G = ctx.sqrt(H) H += G * f E[i] = scale * G if f != 0: F = F / f TZ = - T[i] * F # T[i-1]=-T[i]*F, but we need T[i-1] as temporary storage G *= F else: TZ = -T[i] # T[i-1]=-T[i] A[i-1,i] += G F = 0 # apply housholder transformation for j in xrange(0, i): A[i,j] = A[j,i] / H G = 0 # calculate A*U for k in xrange(0, j + 1): G += ctx.conj(A[k,j]) * A[k,i] for k in xrange(j + 1, i): G += A[j,k] * A[k,i] T[j] = G / H # calculate P F += ctx.conj(T[j]) * A[j,i] HH = F / (2 * H) for j in xrange(0, i): # calculate reduced A F = A[j,i] G = T[j] - HH * F # calculate Q T[j] = G for k in xrange(0, j + 1): A[k,j] -= ctx.conj(F) * T[k] + ctx.conj(G) * A[k,i] # as we use the lower left part for storage # we have to use the transpose of the normal formula T[i-1] = TZ D[i] = H for i in xrange(1, n): # better for compatibility E[i-1] = E[i] E[n-1] = 0 D[0] = 0 for i in xrange(0, n): zw = D[i] D[i] = ctx.re(A[i,i]) A[i,i] = zw def c_he_tridiag_1(ctx, A, T): """ This routine forms the unitary matrix Q described in c_he_tridiag_0. parameters: A (input/output) On input, A is the same matrix as delivered by c_he_tridiag_0. On output, A is set to Q. T (input) On input, T is the same array as delivered by c_he_tridiag_0. """ n = A.rows for i in xrange(0, n): if A[i,i] != 0: for j in xrange(0, i): G = 0 for k in xrange(0, i): G += ctx.conj(A[i,k]) * A[k,j] for k in xrange(0, i): A[k,j] -= G * A[k,i] A[i,i] = 1 for j in xrange(0, i): A[j,i] = A[i,j] = 0 for i in xrange(0, n): for k in xrange(0, n): A[i,k] *= T[k] def c_he_tridiag_2(ctx, A, T, B): """ This routine applied the unitary matrix Q described in c_he_tridiag_0 onto the the matrix B, i.e. it forms Q*B. parameters: A (input) On input, A is the same matrix as delivered by c_he_tridiag_0. T (input) On input, T is the same array as delivered by c_he_tridiag_0. B (input/output) On input, B is a complex matrix. On output B is replaced by Q*B. This routine is a python translation of the fortran routine htribk.f in the software library EISPACK (see netlib.org). See c_he_tridiag_0 for more references. """ n = A.rows for i in xrange(0, n): for k in xrange(0, n): B[k,i] *= T[k] for i in xrange(0, n): if A[i,i] != 0: for j in xrange(0, n): G = 0 for k in xrange(0, i): G += ctx.conj(A[i,k]) * B[k,j] for k in xrange(0, i): B[k,j] -= G * A[k,i] def tridiag_eigen(ctx, d, e, z = False): """ This subroutine find the eigenvalues and the first components of the eigenvectors of a real symmetric tridiagonal matrix using the implicit QL method. parameters: d (input/output) real array of length n. on input, d contains the diagonal elements of the input matrix. on output, d contains the eigenvalues in ascending order. e (input) real array of length n. on input, e contains the offdiagonal elements of the input matrix in e[0:(n-1)]. On output, e has been destroyed. z (input/output) If z is equal to False, no eigenvectors will be computed. Otherwise on input z should have the format z[0:m,0:n] (i.e. a real or complex matrix of dimension (m,n) ). On output this matrix will be multiplied by the matrix of the eigenvectors (i.e. the columns of this matrix are the eigenvectors): z --> z*EV That means if z[i,j]={1 if j==j; 0 otherwise} on input, then on output z will contain the first m components of the eigenvectors. That means if m is equal to n, the i-th eigenvector will be z[:,i]. This routine is a python translation (in slightly modified form) of the fortran routine imtql2.f in the software library EISPACK (see netlib.org) which itself is based on the algol procudure imtql2 desribed in: - num. math. 12, p. 377-383(1968) by matrin and wilkinson - modified in num. math. 15, p. 450(1970) by dubrulle - handbook for auto. comp., vol. II-linear algebra, p. 241-248 (1971) See also the routine gaussq.f in netlog.org or acm algorithm 726. """ n = len(d) e[n-1] = 0 iterlim = 2 * ctx.dps for l in xrange(n): j = 0 while 1: m = l while 1: # look for a small subdiagonal element if m + 1 == n: break if abs(e[m]) <= ctx.eps * (abs(d[m]) + abs(d[m + 1])): break m = m + 1 if m == l: break if j >= iterlim: raise RuntimeError("tridiag_eigen: no convergence to an eigenvalue after %d iterations" % iterlim) j += 1 # form shift p = d[l] g = (d[l + 1] - p) / (2 * e[l]) r = ctx.hypot(g, 1) if g < 0: s = g - r else: s = g + r g = d[m] - p + e[l] / s s, c, p = 1, 1, 0 for i in xrange(m - 1, l - 1, -1): f = s * e[i] b = c * e[i] if abs(f) > abs(g): # this here is a slight improvement also used in gaussq.f or acm algorithm 726. c = g / f r = ctx.hypot(c, 1) e[i + 1] = f * r s = 1 / r c = c * s else: s = f / g r = ctx.hypot(s, 1) e[i + 1] = g * r c = 1 / r s = s * c g = d[i + 1] - p r = (d[i] - g) * s + 2 * c * b p = s * r d[i + 1] = g + p g = c * r - b if not isinstance(z, bool): # calculate eigenvectors for w in xrange(z.rows): f = z[w,i+1] z[w,i+1] = s * z[w,i] + c * f z[w,i ] = c * z[w,i] - s * f d[l] = d[l] - p e[l] = g e[m] = 0 for ii in xrange(1, n): # sort eigenvalues and eigenvectors (bubble-sort) i = ii - 1 k = i p = d[i] for j in xrange(ii, n): if d[j] >= p: continue k = j p = d[k] if k == i: continue d[k] = d[i] d[i] = p if not isinstance(z, bool): for w in xrange(z.rows): p = z[w,i] z[w,i] = z[w,k] z[w,k] = p ######################################################################################## @defun def eigsy(ctx, A, eigvals_only = False, overwrite_a = False): """ This routine solves the (ordinary) eigenvalue problem for a real symmetric square matrix A. Given A, an orthogonal matrix Q is calculated which diagonalizes A: Q' A Q = diag(E) and Q Q' = Q' Q = 1 Here diag(E) is a diagonal matrix whose diagonal is E. ' denotes the transpose. The columns of Q are the eigenvectors of A and E contains the eigenvalues: A Q[:,i] = E[i] Q[:,i] input: A: real matrix of format (n,n) which is symmetric (i.e. A=A' or A[i,j]=A[j,i]) eigvals_only: if true, calculates only the eigenvalues E. if false, calculates both eigenvectors and eigenvalues. overwrite_a: if true, allows modification of A which may improve performance. if false, A is not modified. output: E: vector of format (n). contains the eigenvalues of A in ascending order. Q: orthogonal matrix of format (n,n). contains the eigenvectors of A as columns. return value: E if eigvals_only is true (E, Q) if eigvals_only is false example: >>> from mpmath import mp >>> A = mp.matrix([[3, 2], [2, 0]]) >>> E = mp.eigsy(A, eigvals_only = True) >>> print(E) [-1.0] [ 4.0] >>> A = mp.matrix([[1, 2], [2, 3]]) >>> E, Q = mp.eigsy(A) >>> print(mp.chop(A * Q[:,0] - E[0] * Q[:,0])) [0.0] [0.0] see also: eighe, eigh, eig """ if not overwrite_a: A = A.copy() d = ctx.zeros(A.rows, 1) e = ctx.zeros(A.rows, 1) if eigvals_only: r_sy_tridiag(ctx, A, d, e, calc_ev = False) tridiag_eigen(ctx, d, e, False) return d else: r_sy_tridiag(ctx, A, d, e, calc_ev = True) tridiag_eigen(ctx, d, e, A) return (d, A) @defun def eighe(ctx, A, eigvals_only = False, overwrite_a = False): """ This routine solves the (ordinary) eigenvalue problem for a complex hermitian square matrix A. Given A, an unitary matrix Q is calculated which diagonalizes A: Q' A Q = diag(E) and Q Q' = Q' Q = 1 Here diag(E) a is diagonal matrix whose diagonal is E. ' denotes the hermitian transpose (i.e. ordinary transposition and complex conjugation). The columns of Q are the eigenvectors of A and E contains the eigenvalues: A Q[:,i] = E[i] Q[:,i] input: A: complex matrix of format (n,n) which is hermitian (i.e. A=A' or A[i,j]=conj(A[j,i])) eigvals_only: if true, calculates only the eigenvalues E. if false, calculates both eigenvectors and eigenvalues. overwrite_a: if true, allows modification of A which may improve performance. if false, A is not modified. output: E: vector of format (n). contains the eigenvalues of A in ascending order. Q: unitary matrix of format (n,n). contains the eigenvectors of A as columns. return value: E if eigvals_only is true (E, Q) if eigvals_only is false example: >>> from mpmath import mp >>> A = mp.matrix([[1, -3 - 1j], [-3 + 1j, -2]]) >>> E = mp.eighe(A, eigvals_only = True) >>> print(E) [-4.0] [ 3.0] >>> A = mp.matrix([[1, 2 + 5j], [2 - 5j, 3]]) >>> E, Q = mp.eighe(A) >>> print(mp.chop(A * Q[:,0] - E[0] * Q[:,0])) [0.0] [0.0] see also: eigsy, eigh, eig """ if not overwrite_a: A = A.copy() d = ctx.zeros(A.rows, 1) e = ctx.zeros(A.rows, 1) t = ctx.zeros(A.rows, 1) if eigvals_only: c_he_tridiag_0(ctx, A, d, e, t) tridiag_eigen(ctx, d, e, False) return d else: c_he_tridiag_0(ctx, A, d, e, t) B = ctx.eye(A.rows) tridiag_eigen(ctx, d, e, B) c_he_tridiag_2(ctx, A, t, B) return (d, B) @defun def eigh(ctx, A, eigvals_only = False, overwrite_a = False): """ "eigh" is a unified interface for "eigsy" and "eighe". Depending on whether A is real or complex the appropriate function is called. This routine solves the (ordinary) eigenvalue problem for a real symmetric or complex hermitian square matrix A. Given A, an orthogonal (A real) or unitary (A complex) matrix Q is calculated which diagonalizes A: Q' A Q = diag(E) and Q Q' = Q' Q = 1 Here diag(E) a is diagonal matrix whose diagonal is E. ' denotes the hermitian transpose (i.e. ordinary transposition and complex conjugation). The columns of Q are the eigenvectors of A and E contains the eigenvalues: A Q[:,i] = E[i] Q[:,i] input: A: a real or complex square matrix of format (n,n) which is symmetric (i.e. A[i,j]=A[j,i]) or hermitian (i.e. A[i,j]=conj(A[j,i])). eigvals_only: if true, calculates only the eigenvalues E. if false, calculates both eigenvectors and eigenvalues. overwrite_a: if true, allows modification of A which may improve performance. if false, A is not modified. output: E: vector of format (n). contains the eigenvalues of A in ascending order. Q: an orthogonal or unitary matrix of format (n,n). contains the eigenvectors of A as columns. return value: E if eigvals_only is true (E, Q) if eigvals_only is false example: >>> from mpmath import mp >>> A = mp.matrix([[3, 2], [2, 0]]) >>> E = mp.eigh(A, eigvals_only = True) >>> print(E) [-1.0] [ 4.0] >>> A = mp.matrix([[1, 2], [2, 3]]) >>> E, Q = mp.eigh(A) >>> print(mp.chop(A * Q[:,0] - E[0] * Q[:,0])) [0.0] [0.0] >>> A = mp.matrix([[1, 2 + 5j], [2 - 5j, 3]]) >>> E, Q = mp.eigh(A) >>> print(mp.chop(A * Q[:,0] - E[0] * Q[:,0])) [0.0] [0.0] see also: eigsy, eighe, eig """ iscomplex = any(type(x) is ctx.mpc for x in A) if iscomplex: return ctx.eighe(A, eigvals_only = eigvals_only, overwrite_a = overwrite_a) else: return ctx.eigsy(A, eigvals_only = eigvals_only, overwrite_a = overwrite_a) @defun def gauss_quadrature(ctx, n, qtype = "legendre", alpha = 0, beta = 0): """ This routine calulates gaussian quadrature rules for different families of orthogonal polynomials. Let (a, b) be an interval, W(x) a positive weight function and n a positive integer. Then the purpose of this routine is to calculate pairs (x_k, w_k) for k=0, 1, 2, ... (n-1) which give int(W(x) * F(x), x = a..b) = sum(w_k * F(x_k),k = 0..(n-1)) exact for all polynomials F(x) of degree (strictly) less than 2*n. For all integrable functions F(x) the sum is a (more or less) good approximation to the integral. The x_k are called nodes (which are the zeros of the related orthogonal polynomials) and the w_k are called the weights. parameters n (input) The degree of the quadrature rule, i.e. its number of nodes. qtype (input) The family of orthogonal polynmomials for which to compute the quadrature rule. See the list below. alpha (input) real number, used as parameter for some orthogonal polynomials beta (input) real number, used as parameter for some orthogonal polynomials. return value (X, W) a pair of two real arrays where x_k = X[k] and w_k = W[k]. orthogonal polynomials: qtype polynomial ----- ---------- "legendre" Legendre polynomials, W(x)=1 on the interval (-1, +1) "legendre01" shifted Legendre polynomials, W(x)=1 on the interval (0, +1) "hermite" Hermite polynomials, W(x)=exp(-x*x) on (-infinity,+infinity) "laguerre" Laguerre polynomials, W(x)=exp(-x) on (0,+infinity) "glaguerre" generalized Laguerre polynomials, W(x)=exp(-x)*x**alpha on (0, +infinity) "chebyshev1" Chebyshev polynomials of the first kind, W(x)=1/sqrt(1-x*x) on (-1, +1) "chebyshev2" Chebyshev polynomials of the second kind, W(x)=sqrt(1-x*x) on (-1, +1) "jacobi" Jacobi polynomials, W(x)=(1-x)**alpha * (1+x)**beta on (-1, +1) with alpha>-1 and beta>-1 examples: >>> from mpmath import mp >>> f = lambda x: x**8 + 2 * x**6 - 3 * x**4 + 5 * x**2 - 7 >>> X, W = mp.gauss_quadrature(5, "hermite") >>> A = mp.fdot([(f(x), w) for x, w in zip(X, W)]) >>> B = mp.sqrt(mp.pi) * 57 / 16 >>> C = mp.quad(lambda x: mp.exp(- x * x) * f(x), [-mp.inf, +mp.inf]) >>> print mp.chop(A-B, tol = 1e-10), mp.chop(A-C, tol = 1e-10) 0.0 0.0 >>> f = lambda x: x**5 - 2 * x**4 + 3 * x**3 - 5 * x**2 + 7 * x - 11 >>> X, W = mp.gauss_quadrature(3, "laguerre") >>> A = mp.fdot([(f(x), w) for x, w in zip(X, W)]) >>> B = 76 >>> C = mp.quad(lambda x: mp.exp(-x) * f(x), [0, +mp.inf]) >>> print mp.chop(A-B, tol = 1e-10), mp.chop(A-C, tol = 1e-10) 0.0 0.0 # orthogonality of the chebyshev polynomials: >>> f = lambda x: mp.chebyt(3, x) * mp.chebyt(2, x) >>> X, W = mp.gauss_quadrature(3, "chebyshev1") >>> A = mp.fdot([(f(x), w) for x, w in zip(X, W)]) >>> print(mp.chop(A, tol = 1e-10)) 0.0 references: - golub and welsch, "calculations of gaussian quadrature rules", mathematics of computation 23, p. 221-230 (1969) - golub, "some modified matrix eigenvalue problems", siam review 15, p. 318-334 (1973) - stroud and secrest, "gaussian quadrature formulas", prentice-hall (1966) See also the routine gaussq.f in netlog.org or ACM Transactions on Mathematical Software algorithm 726. """ d = ctx.zeros(n, 1) e = ctx.zeros(n, 1) z = ctx.zeros(1, n) z[0,0] = 1 if qtype == "legendre": # legendre on the range -1 +1 , abramowitz, table 25.4, p.916 w = 2 for i in xrange(n): j = i + 1 e[i] = ctx.sqrt(j * j / (4 * j * j - ctx.mpf(1))) elif qtype == "legendre01": # legendre shifted to 0 1 , abramowitz, table 25.8, p.921 w = 1 for i in xrange(n): d[i] = 1 / ctx.mpf(2) j = i + 1 e[i] = ctx.sqrt(j * j / (16 * j * j - ctx.mpf(4))) elif qtype == "hermite": # hermite on the range -inf +inf , abramowitz, table 25.10,p.924 w = ctx.sqrt(ctx.pi) for i in xrange(n): j = i + 1 e[i] = ctx.sqrt(j / ctx.mpf(2)) elif qtype == "laguerre": # laguerre on the range 0 +inf , abramowitz, table 25.9, p. 923 w = 1 for i in xrange(n): j = i + 1 d[i] = 2 * j - 1 e[i] = j elif qtype=="chebyshev1": # chebyshev polynimials of the first kind w = ctx.pi for i in xrange(n): e[i] = 1 / ctx.mpf(2) e[0] = ctx.sqrt(1 / ctx.mpf(2)) elif qtype == "chebyshev2": # chebyshev polynimials of the second kind w = ctx.pi / 2 for i in xrange(n): e[i] = 1 / ctx.mpf(2) elif qtype == "glaguerre": # generalized laguerre on the range 0 +inf w = ctx.gamma(1 + alpha) for i in xrange(n): j = i + 1 d[i] = 2 * j - 1 + alpha e[i] = ctx.sqrt(j * (j + alpha)) elif qtype == "jacobi": # jacobi polynomials alpha = ctx.mpf(alpha) beta = ctx.mpf(beta) ab = alpha + beta abi = ab + 2 w = (2**(ab+1)) * ctx.gamma(alpha + 1) * ctx.gamma(beta + 1) / ctx.gamma(abi) d[0] = (beta - alpha) / abi e[0] = ctx.sqrt(4 * (1 + alpha) * (1 + beta) / ((abi + 1) * (abi * abi))) a2b2 = beta * beta - alpha * alpha for i in xrange(1, n): j = i + 1 abi = 2 * j + ab d[i] = a2b2 / ((abi - 2) * abi) e[i] = ctx.sqrt(4 * j * (j + alpha) * (j + beta) * (j + ab) / ((abi * abi - 1) * abi * abi)) elif isinstance(qtype, str): raise ValueError("unknown quadrature rule \"%s\"" % qtype) elif not isinstance(qtype, str): w = qtype(d, e) else: assert 0 tridiag_eigen(ctx, d, e, z) for i in xrange(len(z)): z[i] *= z[i] z = z.transpose() return (d, w * z) ################################################################################################## ################################################################################################## ################################################################################################## def svd_r_raw(ctx, A, V = False, calc_u = False): """ This routine computes the singular value decomposition of a matrix A. Given A, two orthogonal matrices U and V are calculated such that A = U S V where S is a suitable shaped matrix whose off-diagonal elements are zero. The diagonal elements of S are the singular values of A, i.e. the squareroots of the eigenvalues of A' A or A A'. Here ' denotes the transpose. Householder bidiagonalization and a variant of the QR algorithm is used. overview of the matrices : A : m*n A gets replaced by U U : m*n U replaces A. If n>m then only the first m*m block of U is non-zero. column-orthogonal: U' U = B here B is a n*n matrix whose first min(m,n) diagonal elements are 1 and all other elements are zero. S : n*n diagonal matrix, only the diagonal elements are stored in the array S. only the first min(m,n) diagonal elements are non-zero. V : n*n orthogonal: V V' = V' V = 1 parameters: A (input/output) On input, A contains a real matrix of shape m*n. On output, if calc_u is true A contains the column-orthogonal matrix U; otherwise A is simply used as workspace and thus destroyed. V (input/output) if false, the matrix V is not calculated. otherwise V must be a matrix of shape n*n. calc_u (input) If true, the matrix U is calculated and replaces A. if false, U is not calculated and A is simply destroyed return value: S an array of length n containing the singular values of A sorted by decreasing magnitude. only the first min(m,n) elements are non-zero. This routine is a python translation of the fortran routine svd.f in the software library EISPACK (see netlib.org) which itself is based on the algol procedure svd described in: - num. math. 14, 403-420(1970) by golub and reinsch. - wilkinson/reinsch: handbook for auto. comp., vol ii-linear algebra, 134-151(1971). """ m, n = A.rows, A.cols S = ctx.zeros(n, 1) # work is a temporary array of size n work = ctx.zeros(n, 1) g = scale = anorm = 0 maxits = 3 * ctx.dps for i in xrange(n): # householder reduction to bidiagonal form work[i] = scale*g g = s = scale = 0 if i < m: for k in xrange(i, m): scale += ctx.fabs(A[k,i]) if scale != 0: for k in xrange(i, m): A[k,i] /= scale s += A[k,i] * A[k,i] f = A[i,i] g = -ctx.sqrt(s) if f < 0: g = -g h = f * g - s A[i,i] = f - g for j in xrange(i+1, n): s = 0 for k in xrange(i, m): s += A[k,i] * A[k,j] f = s / h for k in xrange(i, m): A[k,j] += f * A[k,i] for k in xrange(i,m): A[k,i] *= scale S[i] = scale * g g = s = scale = 0 if i < m and i != n - 1: for k in xrange(i+1, n): scale += ctx.fabs(A[i,k]) if scale: for k in xrange(i+1, n): A[i,k] /= scale s += A[i,k] * A[i,k] f = A[i,i+1] g = -ctx.sqrt(s) if f < 0: g = -g h = f * g - s A[i,i+1] = f - g for k in xrange(i+1, n): work[k] = A[i,k] / h for j in xrange(i+1, m): s = 0 for k in xrange(i+1, n): s += A[j,k] * A[i,k] for k in xrange(i+1, n): A[j,k] += s * work[k] for k in xrange(i+1, n): A[i,k] *= scale anorm = max(anorm, ctx.fabs(S[i]) + ctx.fabs(work[i])) if not isinstance(V, bool): for i in xrange(n-2, -1, -1): # accumulation of right hand transformations V[i+1,i+1] = 1 if work[i+1] != 0: for j in xrange(i+1, n): V[i,j] = (A[i,j] / A[i,i+1]) / work[i+1] for j in xrange(i+1, n): s = 0 for k in xrange(i+1, n): s += A[i,k] * V[j,k] for k in xrange(i+1, n): V[j,k] += s * V[i,k] for j in xrange(i+1, n): V[j,i] = V[i,j] = 0 V[0,0] = 1 if m= maxits: raise RuntimeError("svd: no convergence to an eigenvalue after %d iterations" % its) x = S[l] # shift from bottom 2 by 2 minor nm = k-1 y = S[nm] g = work[nm] h = work[k] f = ((y - z) * (y + z) + (g - h) * (g + h))/(2 * h * y) g = ctx.hypot(f, 1) if f >= 0: f = ((x - z) * (x + z) + h * ((y / (f + g)) - h)) / x else: f = ((x - z) * (x + z) + h * ((y / (f - g)) - h)) / x c = s = 1 # next qt transformation for j in xrange(l, nm + 1): g = work[j+1] y = S[j+1] h = s * g g = c * g z = ctx.hypot(f, h) work[j] = z c = f / z s = h / z f = x * c + g * s g = g * c - x * s h = y * s y *= c if not isinstance(V, bool): for jj in xrange(n): x = V[j ,jj] z = V[j+1,jj] V[j ,jj]= x * c + z * s V[j+1 ,jj]= z * c - x * s z = ctx.hypot(f, h) S[j] = z if z != 0: # rotation can be arbitray if z=0 z = 1 / z c = f * z s = h * z f = c * g + s * y x = c * y - s * g if calc_u: for jj in xrange(m): y = A[jj,j ] z = A[jj,j+1] A[jj,j ] = y * c + z * s A[jj,j+1 ] = z * c - y * s work[l] = 0 work[k] = f S[k] = x ########################## # Sort singular values into decreasing order (bubble-sort) for i in xrange(n): imax = i s = ctx.fabs(S[i]) # s is the current maximal element for j in xrange(i + 1, n): c = ctx.fabs(S[j]) if c > s: s = c imax = j if imax != i: # swap singular values z = S[i] S[i] = S[imax] S[imax] = z if calc_u: for j in xrange(m): z = A[j,i] A[j,i] = A[j,imax] A[j,imax] = z if not isinstance(V, bool): for j in xrange(n): z = V[i,j] V[i,j] = V[imax,j] V[imax,j] = z return S ####################### def svd_c_raw(ctx, A, V = False, calc_u = False): """ This routine computes the singular value decomposition of a matrix A. Given A, two unitary matrices U and V are calculated such that A = U S V where S is a suitable shaped matrix whose off-diagonal elements are zero. The diagonal elements of S are the singular values of A, i.e. the squareroots of the eigenvalues of A' A or A A'. Here ' denotes the hermitian transpose (i.e. transposition and conjugation). Householder bidiagonalization and a variant of the QR algorithm is used. overview of the matrices : A : m*n A gets replaced by U U : m*n U replaces A. If n>m then only the first m*m block of U is non-zero. column-unitary: U' U = B here B is a n*n matrix whose first min(m,n) diagonal elements are 1 and all other elements are zero. S : n*n diagonal matrix, only the diagonal elements are stored in the array S. only the first min(m,n) diagonal elements are non-zero. V : n*n unitary: V V' = V' V = 1 parameters: A (input/output) On input, A contains a complex matrix of shape m*n. On output, if calc_u is true A contains the column-unitary matrix U; otherwise A is simply used as workspace and thus destroyed. V (input/output) if false, the matrix V is not calculated. otherwise V must be a matrix of shape n*n. calc_u (input) If true, the matrix U is calculated and replaces A. if false, U is not calculated and A is simply destroyed return value: S an array of length n containing the singular values of A sorted by decreasing magnitude. only the first min(m,n) elements are non-zero. This routine is a python translation of the fortran routine svd.f in the software library EISPACK (see netlib.org) which itself is based on the algol procedure svd described in: - num. math. 14, 403-420(1970) by golub and reinsch. - wilkinson/reinsch: handbook for auto. comp., vol ii-linear algebra, 134-151(1971). """ m, n = A.rows, A.cols S = ctx.zeros(n, 1) # work is a temporary array of size n work = ctx.zeros(n, 1) lbeta = ctx.zeros(n, 1) rbeta = ctx.zeros(n, 1) dwork = ctx.zeros(n, 1) g = scale = anorm = 0 maxits = 3 * ctx.dps for i in xrange(n): # householder reduction to bidiagonal form dwork[i] = scale * g # dwork are the side-diagonal elements g = s = scale = 0 if i < m: for k in xrange(i, m): scale += ctx.fabs(ctx.re(A[k,i])) + ctx.fabs(ctx.im(A[k,i])) if scale != 0: for k in xrange(i, m): A[k,i] /= scale ar = ctx.re(A[k,i]) ai = ctx.im(A[k,i]) s += ar * ar + ai * ai f = A[i,i] g = -ctx.sqrt(s) if ctx.re(f) < 0: beta = -g - ctx.conj(f) g = -g else: beta = -g + ctx.conj(f) beta /= ctx.conj(beta) beta += 1 h = 2 * (ctx.re(f) * g - s) A[i,i] = f - g beta /= h lbeta[i] = (beta / scale) / scale for j in xrange(i+1, n): s = 0 for k in xrange(i, m): s += ctx.conj(A[k,i]) * A[k,j] f = beta * s for k in xrange(i, m): A[k,j] += f * A[k,i] for k in xrange(i, m): A[k,i] *= scale S[i] = scale * g # S are the diagonal elements g = s = scale = 0 if i < m and i != n - 1: for k in xrange(i+1, n): scale += ctx.fabs(ctx.re(A[i,k])) + ctx.fabs(ctx.im(A[i,k])) if scale: for k in xrange(i+1, n): A[i,k] /= scale ar = ctx.re(A[i,k]) ai = ctx.im(A[i,k]) s += ar * ar + ai * ai f = A[i,i+1] g = -ctx.sqrt(s) if ctx.re(f) < 0: beta = -g - ctx.conj(f) g = -g else: beta = -g + ctx.conj(f) beta /= ctx.conj(beta) beta += 1 h = 2 * (ctx.re(f) * g - s) A[i,i+1] = f - g beta /= h rbeta[i] = (beta / scale) / scale for k in xrange(i+1, n): work[k] = A[i, k] for j in xrange(i+1, m): s = 0 for k in xrange(i+1, n): s += ctx.conj(A[i,k]) * A[j,k] f = s * beta for k in xrange(i+1,n): A[j,k] += f * work[k] for k in xrange(i+1, n): A[i,k] *= scale anorm = max(anorm,ctx.fabs(S[i]) + ctx.fabs(dwork[i])) if not isinstance(V, bool): for i in xrange(n-2, -1, -1): # accumulation of right hand transformations V[i+1,i+1] = 1 if dwork[i+1] != 0: f = ctx.conj(rbeta[i]) for j in xrange(i+1, n): V[i,j] = A[i,j] * f for j in xrange(i+1, n): s = 0 for k in xrange(i+1, n): s += ctx.conj(A[i,k]) * V[j,k] for k in xrange(i+1, n): V[j,k] += s * V[i,k] for j in xrange(i+1,n): V[j,i] = V[i,j] = 0 V[0,0] = 1 if m < n : minnm = m else : minnm = n if calc_u: for i in xrange(minnm-1, -1, -1): # accumulation of left hand transformations g = S[i] for j in xrange(i+1, n): A[i,j] = 0 if g != 0: g = 1 / g for j in xrange(i+1, n): s = 0 for k in xrange(i+1, m): s += ctx.conj(A[k,i]) * A[k,j] f = s * ctx.conj(lbeta[i]) for k in xrange(i, m): A[k,j] += f * A[k,i] for j in xrange(i, m): A[j,i] *= g else: for j in xrange(i, m): A[j,i] = 0 A[i,i] += 1 for k in xrange(n-1, -1, -1): # diagonalization of the bidiagonal form: # loop over singular values, and over allowed itations its = 0 while 1: its += 1 flag = True for l in xrange(k, -1, -1): nm = l - 1 if ctx.fabs(dwork[l]) + anorm == anorm: flag = False break if ctx.fabs(S[nm]) + anorm == anorm: break if flag: c = 0 s = 1 for i in xrange(l, k+1): f = s * dwork[i] dwork[i] *= c if ctx.fabs(f) + anorm == anorm: break g = S[i] h = ctx.hypot(f, g) S[i] = h h = 1 / h c = g * h s = -f * h if calc_u: for j in xrange(m): y = A[j,nm] z = A[j,i] A[j,nm]= y * c + z * s A[j,i] = z * c - y * s z = S[k] if l == k: # convergence if z < 0: # singular value is made nonnegative S[k] = -z if not isinstance(V, bool): for j in xrange(n): V[k,j] = -V[k,j] break if its >= maxits: raise RuntimeError("svd: no convergence to an eigenvalue after %d iterations" % its) x = S[l] # shift from bottom 2 by 2 minor nm = k-1 y = S[nm] g = dwork[nm] h = dwork[k] f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2 * h * y) g = ctx.hypot(f, 1) if f >=0: f = (( x - z) *( x + z) + h *((y / (f + g)) - h)) / x else: f = (( x - z) *( x + z) + h *((y / (f - g)) - h)) / x c = s = 1 # next qt transformation for j in xrange(l, nm + 1): g = dwork[j+1] y = S[j+1] h = s * g g = c * g z = ctx.hypot(f, h) dwork[j] = z c = f / z s = h / z f = x * c + g * s g = g * c - x * s h = y * s y *= c if not isinstance(V, bool): for jj in xrange(n): x = V[j ,jj] z = V[j+1,jj] V[j ,jj]= x * c + z * s V[j+1,jj ]= z * c - x * s z = ctx.hypot(f, h) S[j] = z if z != 0: # rotation can be arbitray if z=0 z = 1 / z c = f * z s = h * z f = c * g + s * y x = c * y - s * g if calc_u: for jj in xrange(m): y = A[jj,j ] z = A[jj,j+1] A[jj,j ]= y * c + z * s A[jj,j+1 ]= z * c - y * s dwork[l] = 0 dwork[k] = f S[k] = x ########################## # Sort singular values into decreasing order (bubble-sort) for i in xrange(n): imax = i s = ctx.fabs(S[i]) # s is the current maximal element for j in xrange(i + 1, n): c = ctx.fabs(S[j]) if c > s: s = c imax = j if imax != i: # swap singular values z = S[i] S[i] = S[imax] S[imax] = z if calc_u: for j in xrange(m): z = A[j,i] A[j,i] = A[j,imax] A[j,imax] = z if not isinstance(V, bool): for j in xrange(n): z = V[i,j] V[i,j] = V[imax,j] V[imax,j] = z return S ################################################################################################## @defun def svd_r(ctx, A, full_matrices = False, compute_uv = True, overwrite_a = False): """ This routine computes the singular value decomposition of a matrix A. Given A, two orthogonal matrices U and V are calculated such that A = U S V and U' U = 1 and V V' = 1 where S is a suitable shaped matrix whose off-diagonal elements are zero. Here ' denotes the transpose. The diagonal elements of S are the singular values of A, i.e. the squareroots of the eigenvalues of A' A or A A'. input: A : a real matrix of shape (m, n) full_matrices : if true, U and V are of shape (m, m) and (n, n). if false, U and V are of shape (m, min(m, n)) and (min(m, n), n). compute_uv : if true, U and V are calculated. if false, only S is calculated. overwrite_a : if true, allows modification of A which may improve performance. if false, A is not modified. output: U : an orthogonal matrix: U' U = 1. if full_matrices is true, U is of shape (m, m). ortherwise it is of shape (m, min(m, n)). S : an array of length min(m, n) containing the singular values of A sorted by decreasing magnitude. V : an orthogonal matrix: V V' = 1. if full_matrices is true, V is of shape (n, n). ortherwise it is of shape (min(m, n), n). return value: S if compute_uv is false (U, S, V) if compute_uv is true overview of the matrices: full_matrices true: A : m*n U : m*m U' U = 1 S as matrix : m*n V : n*n V V' = 1 full_matrices false: A : m*n U : m*min(n,m) U' U = 1 S as matrix : min(m,n)*min(m,n) V : min(m,n)*n V V' = 1 examples: >>> from mpmath import mp >>> A = mp.matrix([[2, -2, -1], [3, 4, -2], [-2, -2, 0]]) >>> S = mp.svd_r(A, compute_uv = False) >>> print(S) [6.0] [3.0] [1.0] >>> U, S, V = mp.svd_r(A) >>> print(mp.chop(A - U * mp.diag(S) * V)) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] see also: svd, svd_c """ m, n = A.rows, A.cols if not compute_uv: if not overwrite_a: A = A.copy() S = svd_r_raw(ctx, A, V = False, calc_u = False) S = S[:min(m,n)] return S if full_matrices and n < m: V = ctx.zeros(m, m) A0 = ctx.zeros(m, m) A0[:,:n] = A S = svd_r_raw(ctx, A0, V, calc_u = True) S = S[:n] V = V[:n,:n] return (A0, S, V) else: if not overwrite_a: A = A.copy() V = ctx.zeros(n, n) S = svd_r_raw(ctx, A, V, calc_u = True) if n > m: if full_matrices == False: V = V[:m,:] S = S[:m] A = A[:,:m] return (A, S, V) ############################## @defun def svd_c(ctx, A, full_matrices = False, compute_uv = True, overwrite_a = False): """ This routine computes the singular value decomposition of a matrix A. Given A, two unitary matrices U and V are calculated such that A = U S V and U' U = 1 and V V' = 1 where S is a suitable shaped matrix whose off-diagonal elements are zero. Here ' denotes the hermitian transpose (i.e. transposition and complex conjugation). The diagonal elements of S are the singular values of A, i.e. the squareroots of the eigenvalues of A' A or A A'. input: A : a complex matrix of shape (m, n) full_matrices : if true, U and V are of shape (m, m) and (n, n). if false, U and V are of shape (m, min(m, n)) and (min(m, n), n). compute_uv : if true, U and V are calculated. if false, only S is calculated. overwrite_a : if true, allows modification of A which may improve performance. if false, A is not modified. output: U : an unitary matrix: U' U = 1. if full_matrices is true, U is of shape (m, m). ortherwise it is of shape (m, min(m, n)). S : an array of length min(m, n) containing the singular values of A sorted by decreasing magnitude. V : an unitary matrix: V V' = 1. if full_matrices is true, V is of shape (n, n). ortherwise it is of shape (min(m, n), n). return value: S if compute_uv is false (U, S, V) if compute_uv is true overview of the matrices: full_matrices true: A : m*n U : m*m U' U = 1 S as matrix : m*n V : n*n V V' = 1 full_matrices false: A : m*n U : m*min(n,m) U' U = 1 S as matrix : min(m,n)*min(m,n) V : min(m,n)*n V V' = 1 example: >>> from mpmath import mp >>> A = mp.matrix([[-2j, -1-3j, -2+2j], [2-2j, -1-3j, 1], [-3+1j,-2j,0]]) >>> S = mp.svd_c(A, compute_uv = False) >>> print(mp.chop(S - mp.matrix([mp.sqrt(34), mp.sqrt(15), mp.sqrt(6)]))) [0.0] [0.0] [0.0] >>> U, S, V = mp.svd_c(A) >>> print(mp.chop(A - U * mp.diag(S) * V)) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] see also: svd, svd_r """ m, n = A.rows, A.cols if not compute_uv: if not overwrite_a: A = A.copy() S = svd_c_raw(ctx, A, V = False, calc_u = False) S = S[:min(m,n)] return S if full_matrices and n < m: V = ctx.zeros(m, m) A0 = ctx.zeros(m, m) A0[:,:n] = A S = svd_c_raw(ctx, A0, V, calc_u = True) S = S[:n] V = V[:n,:n] return (A0, S, V) else: if not overwrite_a: A = A.copy() V = ctx.zeros(n, n) S = svd_c_raw(ctx, A, V, calc_u = True) if n > m: if full_matrices == False: V = V[:m,:] S = S[:m] A = A[:,:m] return (A, S, V) @defun def svd(ctx, A, full_matrices = False, compute_uv = True, overwrite_a = False): """ "svd" is a unified interface for "svd_r" and "svd_c". Depending on whether A is real or complex the appropriate function is called. This routine computes the singular value decomposition of a matrix A. Given A, two orthogonal (A real) or unitary (A complex) matrices U and V are calculated such that A = U S V and U' U = 1 and V V' = 1 where S is a suitable shaped matrix whose off-diagonal elements are zero. Here ' denotes the hermitian transpose (i.e. transposition and complex conjugation). The diagonal elements of S are the singular values of A, i.e. the squareroots of the eigenvalues of A' A or A A'. input: A : a real or complex matrix of shape (m, n) full_matrices : if true, U and V are of shape (m, m) and (n, n). if false, U and V are of shape (m, min(m, n)) and (min(m, n), n). compute_uv : if true, U and V are calculated. if false, only S is calculated. overwrite_a : if true, allows modification of A which may improve performance. if false, A is not modified. output: U : an orthogonal or unitary matrix: U' U = 1. if full_matrices is true, U is of shape (m, m). ortherwise it is of shape (m, min(m, n)). S : an array of length min(m, n) containing the singular values of A sorted by decreasing magnitude. V : an orthogonal or unitary matrix: V V' = 1. if full_matrices is true, V is of shape (n, n). ortherwise it is of shape (min(m, n), n). return value: S if compute_uv is false (U, S, V) if compute_uv is true overview of the matrices: full_matrices true: A : m*n U : m*m U' U = 1 S as matrix : m*n V : n*n V V' = 1 full_matrices false: A : m*n U : m*min(n,m) U' U = 1 S as matrix : min(m,n)*min(m,n) V : min(m,n)*n V V' = 1 examples: >>> from mpmath import mp >>> A = mp.matrix([[2, -2, -1], [3, 4, -2], [-2, -2, 0]]) >>> S = mp.svd(A, compute_uv = False) >>> print(S) [6.0] [3.0] [1.0] >>> U, S, V = mp.svd(A) >>> print(mp.chop(A - U * mp.diag(S) * V)) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] see also: svd_r, svd_c """ iscomplex = any(type(x) is ctx.mpc for x in A) if iscomplex: return ctx.svd_c(A, full_matrices = full_matrices, compute_uv = compute_uv, overwrite_a = overwrite_a) else: return ctx.svd_r(A, full_matrices = full_matrices, compute_uv = compute_uv, overwrite_a = overwrite_a) mpmath-1.0.0/mpmath/matrices/linalg.py000066400000000000000000000645671316273626600177510ustar00rootroot00000000000000""" Linear algebra -------------- Linear equations ................ Basic linear algebra is implemented; you can for example solve the linear equation system:: x + 2*y = -10 3*x + 4*y = 10 using ``lu_solve``:: >>> from mpmath import * >>> mp.pretty = False >>> A = matrix([[1, 2], [3, 4]]) >>> b = matrix([-10, 10]) >>> x = lu_solve(A, b) >>> x matrix( [['30.0'], ['-20.0']]) If you don't trust the result, use ``residual`` to calculate the residual ||A*x-b||:: >>> residual(A, x, b) matrix( [['3.46944695195361e-18'], ['3.46944695195361e-18']]) >>> str(eps) '2.22044604925031e-16' As you can see, the solution is quite accurate. The error is caused by the inaccuracy of the internal floating point arithmetic. Though, it's even smaller than the current machine epsilon, which basically means you can trust the result. If you need more speed, use NumPy. Or choose a faster data type using the keyword ``force_type``:: >>> lu_solve(A, b, force_type=float) matrix( [['30.0'], ['-20.0']]) ``lu_solve`` accepts overdetermined systems. It is usually not possible to solve such systems, so the residual is minimized instead. Internally this is done using Cholesky decomposition to compute a least squares approximation. This means that that ``lu_solve`` will square the errors. If you can't afford this, use ``qr_solve`` instead. It is twice as slow but more accurate, and it calculates the residual automatically. Matrix factorization .................... The function ``lu`` computes an explicit LU factorization of a matrix:: >>> P, L, U = lu(matrix([[0,2,3],[4,5,6],[7,8,9]])) >>> print(P) [0.0 0.0 1.0] [1.0 0.0 0.0] [0.0 1.0 0.0] >>> print(L) [ 1.0 0.0 0.0] [ 0.0 1.0 0.0] [0.571428571428571 0.214285714285714 1.0] >>> print(U) [7.0 8.0 9.0] [0.0 2.0 3.0] [0.0 0.0 0.214285714285714] >>> print(P.T*L*U) [0.0 2.0 3.0] [4.0 5.0 6.0] [7.0 8.0 9.0] Interval matrices ----------------- Matrices may contain interval elements. This allows one to perform basic linear algebra operations such as matrix multiplication and equation solving with rigorous error bounds:: >>> a = iv.matrix([['0.1','0.3','1.0'], ... ['7.1','5.5','4.8'], ... ['3.2','4.4','5.6']], force_type=mpi) >>> >>> b = iv.matrix(['4','0.6','0.5'], force_type=mpi) >>> c = iv.lu_solve(a, b) >>> print(c) [ [5.2582327113062568605927528666, 5.25823271130625686059275702219]] [[-13.1550493962678375411635581388, -13.1550493962678375411635540152]] [ [7.42069154774972557628979076189, 7.42069154774972557628979190734]] >>> print(a*c) [ [3.99999999999999999999999844904, 4.00000000000000000000000155096]] [[0.599999999999999999999968898009, 0.600000000000000000000031763736]] [[0.499999999999999999999979320485, 0.500000000000000000000020679515]] """ # TODO: # *implement high-level qr() # *test unitvector # *iterative solving from copy import copy from ..libmp.backend import xrange class LinearAlgebraMethods(object): def LU_decomp(ctx, A, overwrite=False, use_cache=True): """ LU-factorization of a n*n matrix using the Gauss algorithm. Returns L and U in one matrix and the pivot indices. Use overwrite to specify whether A will be overwritten with L and U. """ if not A.rows == A.cols: raise ValueError('need n*n matrix') # get from cache if possible if use_cache and isinstance(A, ctx.matrix) and A._LU: return A._LU if not overwrite: orig = A A = A.copy() tol = ctx.absmin(ctx.mnorm(A,1) * ctx.eps) # each pivot element has to be bigger n = A.rows p = [None]*(n - 1) for j in xrange(n - 1): # pivoting, choose max(abs(reciprocal row sum)*abs(pivot element)) biggest = 0 for k in xrange(j, n): s = ctx.fsum([ctx.absmin(A[k,l]) for l in xrange(j, n)]) if ctx.absmin(s) <= tol: raise ZeroDivisionError('matrix is numerically singular') current = 1/s * ctx.absmin(A[k,j]) if current > biggest: # TODO: what if equal? biggest = current p[j] = k # swap rows according to p ctx.swap_row(A, j, p[j]) if ctx.absmin(A[j,j]) <= tol: raise ZeroDivisionError('matrix is numerically singular') # calculate elimination factors and add rows for i in xrange(j + 1, n): A[i,j] /= A[j,j] for k in xrange(j + 1, n): A[i,k] -= A[i,j]*A[j,k] if ctx.absmin(A[n - 1,n - 1]) <= tol: raise ZeroDivisionError('matrix is numerically singular') # cache decomposition if not overwrite and isinstance(orig, ctx.matrix): orig._LU = (A, p) return A, p def L_solve(ctx, L, b, p=None): """ Solve the lower part of a LU factorized matrix for y. """ if L.rows != L.cols: raise RuntimeError("need n*n matrix") n = L.rows if len(b) != n: raise ValueError("Value should be equal to n") b = copy(b) if p: # swap b according to p for k in xrange(0, len(p)): ctx.swap_row(b, k, p[k]) # solve for i in xrange(1, n): for j in xrange(i): b[i] -= L[i,j] * b[j] return b def U_solve(ctx, U, y): """ Solve the upper part of a LU factorized matrix for x. """ if U.rows != U.cols: raise RuntimeError("need n*n matrix") n = U.rows if len(y) != n: raise ValueError("Value should be equal to n") x = copy(y) for i in xrange(n - 1, -1, -1): for j in xrange(i + 1, n): x[i] -= U[i,j] * x[j] x[i] /= U[i,i] return x def lu_solve(ctx, A, b, **kwargs): """ Ax = b => x Solve a determined or overdetermined linear equations system. Fast LU decomposition is used, which is less accurate than QR decomposition (especially for overdetermined systems), but it's twice as efficient. Use qr_solve if you want more precision or have to solve a very ill- conditioned system. If you specify real=True, it does not check for overdeterminded complex systems. """ prec = ctx.prec try: ctx.prec += 10 # do not overwrite A nor b A, b = ctx.matrix(A, **kwargs).copy(), ctx.matrix(b, **kwargs).copy() if A.rows < A.cols: raise ValueError('cannot solve underdetermined system') if A.rows > A.cols: # use least-squares method if overdetermined # (this increases errors) AH = A.H A = AH * A b = AH * b if (kwargs.get('real', False) or not sum(type(i) is ctx.mpc for i in A)): # TODO: necessary to check also b? x = ctx.cholesky_solve(A, b) else: x = ctx.lu_solve(A, b) else: # LU factorization A, p = ctx.LU_decomp(A) b = ctx.L_solve(A, b, p) x = ctx.U_solve(A, b) finally: ctx.prec = prec return x def improve_solution(ctx, A, x, b, maxsteps=1): """ Improve a solution to a linear equation system iteratively. This re-uses the LU decomposition and is thus cheap. Usually 3 up to 4 iterations are giving the maximal improvement. """ if A.rows != A.cols: raise RuntimeError("need n*n matrix") # TODO: really? for _ in xrange(maxsteps): r = ctx.residual(A, x, b) if ctx.norm(r, 2) < 10*ctx.eps: break # this uses cached LU decomposition and is thus cheap dx = ctx.lu_solve(A, -r) x += dx return x def lu(ctx, A): """ A -> P, L, U LU factorisation of a square matrix A. L is the lower, U the upper part. P is the permutation matrix indicating the row swaps. P*A = L*U If you need efficiency, use the low-level method LU_decomp instead, it's much more memory efficient. """ # get factorization A, p = ctx.LU_decomp(A) n = A.rows L = ctx.matrix(n) U = ctx.matrix(n) for i in xrange(n): for j in xrange(n): if i > j: L[i,j] = A[i,j] elif i == j: L[i,j] = 1 U[i,j] = A[i,j] else: U[i,j] = A[i,j] # calculate permutation matrix P = ctx.eye(n) for k in xrange(len(p)): ctx.swap_row(P, k, p[k]) return P, L, U def unitvector(ctx, n, i): """ Return the i-th n-dimensional unit vector. """ assert 0 < i <= n, 'this unit vector does not exist' return [ctx.zero]*(i-1) + [ctx.one] + [ctx.zero]*(n-i) def inverse(ctx, A, **kwargs): """ Calculate the inverse of a matrix. If you want to solve an equation system Ax = b, it's recommended to use solve(A, b) instead, it's about 3 times more efficient. """ prec = ctx.prec try: ctx.prec += 10 # do not overwrite A A = ctx.matrix(A, **kwargs).copy() n = A.rows # get LU factorisation A, p = ctx.LU_decomp(A) cols = [] # calculate unit vectors and solve corresponding system to get columns for i in xrange(1, n + 1): e = ctx.unitvector(n, i) y = ctx.L_solve(A, e, p) cols.append(ctx.U_solve(A, y)) # convert columns to matrix inv = [] for i in xrange(n): row = [] for j in xrange(n): row.append(cols[j][i]) inv.append(row) result = ctx.matrix(inv, **kwargs) finally: ctx.prec = prec return result def householder(ctx, A): """ (A|b) -> H, p, x, res (A|b) is the coefficient matrix with left hand side of an optionally overdetermined linear equation system. H and p contain all information about the transformation matrices. x is the solution, res the residual. """ if not isinstance(A, ctx.matrix): raise TypeError("A should be a type of ctx.matrix") m = A.rows n = A.cols if m < n - 1: raise RuntimeError("Columns should not be less than rows") # calculate Householder matrix p = [] for j in xrange(0, n - 1): s = ctx.fsum((A[i,j])**2 for i in xrange(j, m)) if not abs(s) > ctx.eps: raise ValueError('matrix is numerically singular') p.append(-ctx.sign(A[j,j]) * ctx.sqrt(s)) kappa = ctx.one / (s - p[j] * A[j,j]) A[j,j] -= p[j] for k in xrange(j+1, n): y = ctx.fsum(A[i,j] * A[i,k] for i in xrange(j, m)) * kappa for i in xrange(j, m): A[i,k] -= A[i,j] * y # solve Rx = c1 x = [A[i,n - 1] for i in xrange(n - 1)] for i in xrange(n - 2, -1, -1): x[i] -= ctx.fsum(A[i,j] * x[j] for j in xrange(i + 1, n - 1)) x[i] /= p[i] # calculate residual if not m == n - 1: r = [A[m-1-i, n-1] for i in xrange(m - n + 1)] else: # determined system, residual should be 0 r = [0]*m # maybe a bad idea, changing r[i] will change all elements return A, p, x, r #def qr(ctx, A): # """ # A -> Q, R # # QR factorisation of a square matrix A using Householder decomposition. # Q is orthogonal, this leads to very few numerical errors. # # A = Q*R # """ # H, p, x, res = householder(A) # TODO: implement this def residual(ctx, A, x, b, **kwargs): """ Calculate the residual of a solution to a linear equation system. r = A*x - b for A*x = b """ oldprec = ctx.prec try: ctx.prec *= 2 A, x, b = ctx.matrix(A, **kwargs), ctx.matrix(x, **kwargs), ctx.matrix(b, **kwargs) return A*x - b finally: ctx.prec = oldprec def qr_solve(ctx, A, b, norm=None, **kwargs): """ Ax = b => x, ||Ax - b|| Solve a determined or overdetermined linear equations system and calculate the norm of the residual (error). QR decomposition using Householder factorization is applied, which gives very accurate results even for ill-conditioned matrices. qr_solve is twice as efficient. """ if norm is None: norm = ctx.norm prec = ctx.prec try: ctx.prec += 10 # do not overwrite A nor b A, b = ctx.matrix(A, **kwargs).copy(), ctx.matrix(b, **kwargs).copy() if A.rows < A.cols: raise ValueError('cannot solve underdetermined system') H, p, x, r = ctx.householder(ctx.extend(A, b)) res = ctx.norm(r) # calculate residual "manually" for determined systems if res == 0: res = ctx.norm(ctx.residual(A, x, b)) return ctx.matrix(x, **kwargs), res finally: ctx.prec = prec def cholesky(ctx, A, tol=None): r""" Cholesky decomposition of a symmetric positive-definite matrix `A`. Returns a lower triangular matrix `L` such that `A = L \times L^T`. More generally, for a complex Hermitian positive-definite matrix, a Cholesky decomposition satisfying `A = L \times L^H` is returned. The Cholesky decomposition can be used to solve linear equation systems twice as efficiently as LU decomposition, or to test whether `A` is positive-definite. The optional parameter ``tol`` determines the tolerance for verifying positive-definiteness. **Examples** Cholesky decomposition of a positive-definite symmetric matrix:: >>> from mpmath import * >>> mp.dps = 25; mp.pretty = True >>> A = eye(3) + hilbert(3) >>> nprint(A) [ 2.0 0.5 0.333333] [ 0.5 1.33333 0.25] [0.333333 0.25 1.2] >>> L = cholesky(A) >>> nprint(L) [ 1.41421 0.0 0.0] [0.353553 1.09924 0.0] [0.235702 0.15162 1.05899] >>> chop(A - L*L.T) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] Cholesky decomposition of a Hermitian matrix:: >>> A = eye(3) + matrix([[0,0.25j,-0.5j],[-0.25j,0,0],[0.5j,0,0]]) >>> L = cholesky(A) >>> nprint(L) [ 1.0 0.0 0.0] [(0.0 - 0.25j) (0.968246 + 0.0j) 0.0] [ (0.0 + 0.5j) (0.129099 + 0.0j) (0.856349 + 0.0j)] >>> chop(A - L*L.H) [0.0 0.0 0.0] [0.0 0.0 0.0] [0.0 0.0 0.0] Attempted Cholesky decomposition of a matrix that is not positive definite:: >>> A = -eye(3) + hilbert(3) >>> L = cholesky(A) Traceback (most recent call last): ... ValueError: matrix is not positive-definite **References** 1. [Wikipedia]_ http://en.wikipedia.org/wiki/Cholesky_decomposition """ if not isinstance(A, ctx.matrix): raise RuntimeError("A should be a type of ctx.matrix") if not A.rows == A.cols: raise ValueError('need n*n matrix') if tol is None: tol = +ctx.eps n = A.rows L = ctx.matrix(n) for j in xrange(n): c = ctx.re(A[j,j]) if abs(c-A[j,j]) > tol: raise ValueError('matrix is not Hermitian') s = c - ctx.fsum((L[j,k] for k in xrange(j)), absolute=True, squared=True) if s < tol: raise ValueError('matrix is not positive-definite') L[j,j] = ctx.sqrt(s) for i in xrange(j, n): it1 = (L[i,k] for k in xrange(j)) it2 = (L[j,k] for k in xrange(j)) t = ctx.fdot(it1, it2, conjugate=True) L[i,j] = (A[i,j] - t) / L[j,j] return L def cholesky_solve(ctx, A, b, **kwargs): """ Ax = b => x Solve a symmetric positive-definite linear equation system. This is twice as efficient as lu_solve. Typical use cases: * A.T*A * Hessian matrix * differential equations """ prec = ctx.prec try: ctx.prec += 10 # do not overwrite A nor b A, b = ctx.matrix(A, **kwargs).copy(), ctx.matrix(b, **kwargs).copy() if A.rows != A.cols: raise ValueError('can only solve determined system') # Cholesky factorization L = ctx.cholesky(A) # solve n = L.rows if len(b) != n: raise ValueError("Value should be equal to n") for i in xrange(n): b[i] -= ctx.fsum(L[i,j] * b[j] for j in xrange(i)) b[i] /= L[i,i] x = ctx.U_solve(L.T, b) return x finally: ctx.prec = prec def det(ctx, A): """ Calculate the determinant of a matrix. """ prec = ctx.prec try: # do not overwrite A A = ctx.matrix(A).copy() # use LU factorization to calculate determinant try: R, p = ctx.LU_decomp(A) except ZeroDivisionError: return 0 z = 1 for i, e in enumerate(p): if i != e: z *= -1 for i in xrange(A.rows): z *= R[i,i] return z finally: ctx.prec = prec def cond(ctx, A, norm=None): """ Calculate the condition number of a matrix using a specified matrix norm. The condition number estimates the sensitivity of a matrix to errors. Example: small input errors for ill-conditioned coefficient matrices alter the solution of the system dramatically. For ill-conditioned matrices it's recommended to use qr_solve() instead of lu_solve(). This does not help with input errors however, it just avoids to add additional errors. Definition: cond(A) = ||A|| * ||A**-1|| """ if norm is None: norm = lambda x: ctx.mnorm(x,1) return norm(A) * norm(ctx.inverse(A)) def lu_solve_mat(ctx, a, b): """Solve a * x = b where a and b are matrices.""" r = ctx.matrix(a.rows, b.cols) for i in range(b.cols): c = ctx.lu_solve(a, b.column(i)) for j in range(len(c)): r[j, i] = c[j] return r def qr(ctx, A, mode = 'full', edps = 10): """ Compute a QR factorization $A = QR$ where A is an m x n matrix of real or complex numbers where m >= n mode has following meanings: (1) mode = 'raw' returns two matrixes (A, tau) in the internal format used by LAPACK (2) mode = 'skinny' returns the leading n columns of Q and n rows of R (3) Any other value returns the leading m columns of Q and m rows of R edps is the increase in mp precision used for calculations **Examples** >>> from mpmath import * >>> mp.dps = 15 >>> mp.pretty = True >>> A = matrix([[1, 2], [3, 4], [1, 1]]) >>> Q, R = qr(A) >>> Q [-0.301511344577764 0.861640436855329 0.408248290463863] [-0.904534033733291 -0.123091490979333 -0.408248290463863] [-0.301511344577764 -0.492365963917331 0.816496580927726] >>> R [-3.3166247903554 -4.52267016866645] [ 0.0 0.738548945875996] [ 0.0 0.0] >>> Q * R [1.0 2.0] [3.0 4.0] [1.0 1.0] >>> chop(Q.T * Q) [1.0 0.0 0.0] [0.0 1.0 0.0] [0.0 0.0 1.0] >>> B = matrix([[1+0j, 2-3j], [3+j, 4+5j]]) >>> Q, R = qr(B) >>> nprint(Q) [ (-0.301511 + 0.0j) (0.0695795 - 0.95092j)] [(-0.904534 - 0.301511j) (-0.115966 + 0.278318j)] >>> nprint(R) [(-3.31662 + 0.0j) (-5.72872 - 2.41209j)] [ 0.0 (3.91965 + 0.0j)] >>> Q * R [(1.0 + 0.0j) (2.0 - 3.0j)] [(3.0 + 1.0j) (4.0 + 5.0j)] >>> chop(Q.T * Q.conjugate()) [1.0 0.0] [0.0 1.0] """ # check values before continuing assert isinstance(A, ctx.matrix) m = A.rows n = A.cols assert n > 1 assert m >= n assert edps >= 0 # check for complex data type cmplx = any(type(x) is ctx.mpc for x in A) # temporarily increase the precision and initialize with ctx.extradps(edps): tau = ctx.matrix(n,1) A = A.copy() # --------------- # FACTOR MATRIX A # --------------- if cmplx: one = ctx.mpc('1.0', '0.0') zero = ctx.mpc('0.0', '0.0') rzero = ctx.mpf('0.0') # main loop to factor A (complex) for j in xrange(0, n): alpha = A[j,j] alphr = ctx.re(alpha) alphi = ctx.im(alpha) if (m-j) >= 2: xnorm = ctx.fsum( A[i,j]*ctx.conj(A[i,j]) for i in xrange(j+1, m) ) xnorm = ctx.re( ctx.sqrt(xnorm) ) else: xnorm = rzero if (xnorm == rzero) and (alphi == rzero): tau[j] = zero continue if alphr < rzero: beta = ctx.sqrt(alphr**2 + alphi**2 + xnorm**2) else: beta = -ctx.sqrt(alphr**2 + alphi**2 + xnorm**2) tau[j] = ctx.mpc( (beta - alphr) / beta, -alphi / beta ) t = -ctx.conj(tau[j]) za = one / (alpha - beta) for i in xrange(j+1, m): A[i,j] *= za A[j,j] = one for k in xrange(j+1, n): y = ctx.fsum(A[i,j] * ctx.conj(A[i,k]) for i in xrange(j, m)) temp = t * ctx.conj(y) for i in xrange(j, m): A[i,k] += A[i,j] * temp A[j,j] = ctx.mpc(beta, '0.0') else: one = ctx.mpf('1.0') zero = ctx.mpf('0.0') # main loop to factor A (real) for j in xrange(0, n): alpha = A[j,j] if (m-j) > 2: xnorm = ctx.fsum( (A[i,j])**2 for i in xrange(j+1, m) ) xnorm = ctx.sqrt(xnorm) elif (m-j) == 2: xnorm = abs( A[m-1,j] ) else: xnorm = zero if xnorm == zero: tau[j] = zero continue if alpha < zero: beta = ctx.sqrt(alpha**2 + xnorm**2) else: beta = -ctx.sqrt(alpha**2 + xnorm**2) tau[j] = (beta - alpha) / beta t = -tau[j] da = one / (alpha - beta) for i in xrange(j+1, m): A[i,j] *= da A[j,j] = one for k in xrange(j+1, n): y = ctx.fsum( A[i,j] * A[i,k] for i in xrange(j, m) ) temp = t * y for i in xrange(j,m): A[i,k] += A[i,j] * temp A[j,j] = beta # return factorization in same internal format as LAPACK if (mode == 'raw') or (mode == 'RAW'): return A, tau # ---------------------------------- # FORM Q USING BACKWARD ACCUMULATION # ---------------------------------- # form R before the values are overwritten R = A.copy() for j in xrange(0, n): for i in xrange(j+1, m): R[i,j] = zero # set the value of p (number of columns of Q to return) p = m if (mode == 'skinny') or (mode == 'SKINNY'): p = n # add columns to A if needed and initialize A.cols += (p-n) for j in xrange(0, p): A[j,j] = one for i in xrange(0, j): A[i,j] = zero # main loop to form Q for j in xrange(n-1, -1, -1): t = -tau[j] A[j,j] += t for k in xrange(j+1, p): if cmplx: y = ctx.fsum(A[i,j] * ctx.conj(A[i,k]) for i in xrange(j+1, m)) temp = t * ctx.conj(y) else: y = ctx.fsum(A[i,j] * A[i,k] for i in xrange(j+1, m)) temp = t * y A[j,k] = temp for i in xrange(j+1, m): A[i,k] += A[i,j] * temp for i in xrange(j+1, m): A[i, j] *= t return A, R[0:p,0:n] # ------------------ # END OF FUNCTION QR # ------------------ mpmath-1.0.0/mpmath/matrices/matrices.py000066400000000000000000000755541316273626600203100ustar00rootroot00000000000000from ..libmp.backend import xrange # TODO: interpret list as vectors (for multiplication) rowsep = '\n' colsep = ' ' class _matrix(object): """ Numerical matrix. Specify the dimensions or the data as a nested list. Elements default to zero. Use a flat list to create a column vector easily. By default, only mpf is used to store the data. You can specify another type using force_type=type. It's possible to specify None. Make sure force_type(force_type()) is fast. Creating matrices ----------------- Matrices in mpmath are implemented using dictionaries. Only non-zero values are stored, so it is cheap to represent sparse matrices. The most basic way to create one is to use the ``matrix`` class directly. You can create an empty matrix specifying the dimensions: >>> from mpmath import * >>> mp.dps = 15 >>> matrix(2) matrix( [['0.0', '0.0'], ['0.0', '0.0']]) >>> matrix(2, 3) matrix( [['0.0', '0.0', '0.0'], ['0.0', '0.0', '0.0']]) Calling ``matrix`` with one dimension will create a square matrix. To access the dimensions of a matrix, use the ``rows`` or ``cols`` keyword: >>> A = matrix(3, 2) >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0'], ['0.0', '0.0']]) >>> A.rows 3 >>> A.cols 2 You can also change the dimension of an existing matrix. This will set the new elements to 0. If the new dimension is smaller than before, the concerning elements are discarded: >>> A.rows = 2 >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0']]) Internally ``mpmathify`` is used every time an element is set. This is done using the syntax A[row,column], counting from 0: >>> A = matrix(2) >>> A[1,1] = 1 + 1j >>> A matrix( [['0.0', '0.0'], ['0.0', mpc(real='1.0', imag='1.0')]]) You can use the keyword ``force_type`` to change the function which is called on every new element: >>> matrix(2, 5, force_type=int) # doctest: +SKIP matrix( [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]) A more comfortable way to create a matrix lets you use nested lists: >>> matrix([[1, 2], [3, 4]]) matrix( [['1.0', '2.0'], ['3.0', '4.0']]) If you want to preserve the type of the elements you can use ``force_type=None``: >>> matrix([[1, 2.5], [1j, mpf(2)]], force_type=None) matrix( [['1.0', '2.5'], [mpc(real='0.0', imag='1.0'), '2.0']]) Convenient advanced functions are available for creating various standard matrices, see ``zeros``, ``ones``, ``diag``, ``eye``, ``randmatrix`` and ``hilbert``. Vectors ....... Vectors may also be represented by the ``matrix`` class (with rows = 1 or cols = 1). For vectors there are some things which make life easier. A column vector can be created using a flat list, a row vectors using an almost flat nested list:: >>> matrix([1, 2, 3]) matrix( [['1.0'], ['2.0'], ['3.0']]) >>> matrix([[1, 2, 3]]) matrix( [['1.0', '2.0', '3.0']]) Optionally vectors can be accessed like lists, using only a single index:: >>> x = matrix([1, 2, 3]) >>> x[1] mpf('2.0') >>> x[1,0] mpf('2.0') Other ..... Like you probably expected, matrices can be printed:: >>> print randmatrix(3) # doctest:+SKIP [ 0.782963853573023 0.802057689719883 0.427895717335467] [0.0541876859348597 0.708243266653103 0.615134039977379] [ 0.856151514955773 0.544759264818486 0.686210904770947] Use ``nstr`` or ``nprint`` to specify the number of digits to print:: >>> nprint(randmatrix(5), 3) # doctest:+SKIP [2.07e-1 1.66e-1 5.06e-1 1.89e-1 8.29e-1] [6.62e-1 6.55e-1 4.47e-1 4.82e-1 2.06e-2] [4.33e-1 7.75e-1 6.93e-2 2.86e-1 5.71e-1] [1.01e-1 2.53e-1 6.13e-1 3.32e-1 2.59e-1] [1.56e-1 7.27e-2 6.05e-1 6.67e-2 2.79e-1] As matrices are mutable, you will need to copy them sometimes:: >>> A = matrix(2) >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0']]) >>> B = A.copy() >>> B[0,0] = 1 >>> B matrix( [['1.0', '0.0'], ['0.0', '0.0']]) >>> A matrix( [['0.0', '0.0'], ['0.0', '0.0']]) Finally, it is possible to convert a matrix to a nested list. This is very useful, as most Python libraries involving matrices or arrays (namely NumPy or SymPy) support this format:: >>> B.tolist() [[mpf('1.0'), mpf('0.0')], [mpf('0.0'), mpf('0.0')]] Matrix operations ----------------- You can add and subtract matrices of compatible dimensions:: >>> A = matrix([[1, 2], [3, 4]]) >>> B = matrix([[-2, 4], [5, 9]]) >>> A + B matrix( [['-1.0', '6.0'], ['8.0', '13.0']]) >>> A - B matrix( [['3.0', '-2.0'], ['-2.0', '-5.0']]) >>> A + ones(3) # doctest:+ELLIPSIS Traceback (most recent call last): ... ValueError: incompatible dimensions for addition It is possible to multiply or add matrices and scalars. In the latter case the operation will be done element-wise:: >>> A * 2 matrix( [['2.0', '4.0'], ['6.0', '8.0']]) >>> A / 4 matrix( [['0.25', '0.5'], ['0.75', '1.0']]) >>> A - 1 matrix( [['0.0', '1.0'], ['2.0', '3.0']]) Of course you can perform matrix multiplication, if the dimensions are compatible:: >>> A * B matrix( [['8.0', '22.0'], ['14.0', '48.0']]) >>> matrix([[1, 2, 3]]) * matrix([[-6], [7], [-2]]) matrix( [['2.0']]) You can raise powers of square matrices:: >>> A**2 matrix( [['7.0', '10.0'], ['15.0', '22.0']]) Negative powers will calculate the inverse:: >>> A**-1 matrix( [['-2.0', '1.0'], ['1.5', '-0.5']]) >>> A * A**-1 matrix( [['1.0', '1.0842021724855e-19'], ['-2.16840434497101e-19', '1.0']]) Matrix transposition is straightforward:: >>> A = ones(2, 3) >>> A matrix( [['1.0', '1.0', '1.0'], ['1.0', '1.0', '1.0']]) >>> A.T matrix( [['1.0', '1.0'], ['1.0', '1.0'], ['1.0', '1.0']]) Norms ..... Sometimes you need to know how "large" a matrix or vector is. Due to their multidimensional nature it's not possible to compare them, but there are several functions to map a matrix or a vector to a positive real number, the so called norms. For vectors the p-norm is intended, usually the 1-, the 2- and the oo-norm are used. >>> x = matrix([-10, 2, 100]) >>> norm(x, 1) mpf('112.0') >>> norm(x, 2) mpf('100.5186549850325') >>> norm(x, inf) mpf('100.0') Please note that the 2-norm is the most used one, though it is more expensive to calculate than the 1- or oo-norm. It is possible to generalize some vector norms to matrix norm:: >>> A = matrix([[1, -1000], [100, 50]]) >>> mnorm(A, 1) mpf('1050.0') >>> mnorm(A, inf) mpf('1001.0') >>> mnorm(A, 'F') mpf('1006.2310867787777') The last norm (the "Frobenius-norm") is an approximation for the 2-norm, which is hard to calculate and not available. The Frobenius-norm lacks some mathematical properties you might expect from a norm. """ def __init__(self, *args, **kwargs): self.__data = {} # LU decompostion cache, this is useful when solving the same system # multiple times, when calculating the inverse and when calculating the # determinant self._LU = None convert = kwargs.get('force_type', self.ctx.convert) if not convert: convert = lambda x: x if isinstance(args[0], (list, tuple)): if isinstance(args[0][0], (list, tuple)): # interpret nested list as matrix A = args[0] self.__rows = len(A) self.__cols = len(A[0]) for i, row in enumerate(A): for j, a in enumerate(row): self[i, j] = convert(a) else: # interpret list as row vector v = args[0] self.__rows = len(v) self.__cols = 1 for i, e in enumerate(v): self[i, 0] = e elif isinstance(args[0], int): # create empty matrix of given dimensions if len(args) == 1: self.__rows = self.__cols = args[0] else: if not isinstance(args[1], int): raise TypeError("expected int") self.__rows = args[0] self.__cols = args[1] elif isinstance(args[0], _matrix): A = args[0].copy() self.__data = A._matrix__data self.__rows = A._matrix__rows self.__cols = A._matrix__cols for i in xrange(A.__rows): for j in xrange(A.__cols): A[i,j] = convert(A[i,j]) elif hasattr(args[0], 'tolist'): A = self.ctx.matrix(args[0].tolist()) self.__data = A._matrix__data self.__rows = A._matrix__rows self.__cols = A._matrix__cols else: raise TypeError('could not interpret given arguments') def apply(self, f): """ Return a copy of self with the function `f` applied elementwise. """ new = self.ctx.matrix(self.__rows, self.__cols) for i in xrange(self.__rows): for j in xrange(self.__cols): new[i,j] = f(self[i,j]) return new def __nstr__(self, n=None, **kwargs): # Build table of string representations of the elements res = [] # Track per-column max lengths for pretty alignment maxlen = [0] * self.cols for i in range(self.rows): res.append([]) for j in range(self.cols): if n: string = self.ctx.nstr(self[i,j], n, **kwargs) else: string = str(self[i,j]) res[-1].append(string) maxlen[j] = max(len(string), maxlen[j]) # Patch strings together for i, row in enumerate(res): for j, elem in enumerate(row): # Pad each element up to maxlen so the columns line up row[j] = elem.rjust(maxlen[j]) res[i] = "[" + colsep.join(row) + "]" return rowsep.join(res) def __str__(self): return self.__nstr__() def _toliststr(self, avoid_type=False): """ Create a list string from a matrix. If avoid_type: avoid multiple 'mpf's. """ # XXX: should be something like self.ctx._types typ = self.ctx.mpf s = '[' for i in xrange(self.__rows): s += '[' for j in xrange(self.__cols): if not avoid_type or not isinstance(self[i,j], typ): a = repr(self[i,j]) else: a = "'" + str(self[i,j]) + "'" s += a + ', ' s = s[:-2] s += '],\n ' s = s[:-3] s += ']' return s def tolist(self): """ Convert the matrix to a nested list. """ return [[self[i,j] for j in range(self.__cols)] for i in range(self.__rows)] def __repr__(self): if self.ctx.pretty: return self.__str__() s = 'matrix(\n' s += self._toliststr(avoid_type=True) + ')' return s def __get_element(self, key): ''' Fast extraction of the i,j element from the matrix This function is for private use only because is unsafe: 1. Does not check on the value of key it expects key to be a integer tuple (i,j) 2. Does not check bounds ''' if key in self.__data: return self.__data[key] else: return self.ctx.zero def __set_element(self, key, value): ''' Fast assignment of the i,j element in the matrix This function is unsafe: 1. Does not check on the value of key it expects key to be a integer tuple (i,j) 2. Does not check bounds 3. Does not check the value type ''' if value: # only store non-zeros self.__data[key] = value elif key in self.__data: del self.__data[key] def __getitem__(self, key): ''' Getitem function for mp matrix class with slice index enabled it allows the following assingments scalar to a slice of the matrix B = A[:,2:6] ''' # Convert vector to matrix indexing if isinstance(key, int) or isinstance(key,slice): # only sufficent for vectors if self.__rows == 1: key = (0, key) elif self.__cols == 1: key = (key, 0) else: raise IndexError('insufficient indices for matrix') if isinstance(key[0],slice) or isinstance(key[1],slice): #Rows if isinstance(key[0],slice): #Check bounds if (key[0].start is None or key[0].start >= 0) and \ (key[0].stop is None or key[0].stop <= self.__rows+1): # Generate indices rows = xrange(*key[0].indices(self.__rows)) else: raise IndexError('Row index out of bounds') else: # Single row rows = [key[0]] # Columns if isinstance(key[1],slice): # Check bounds if (key[1].start is None or key[1].start >= 0) and \ (key[1].stop is None or key[1].stop <= self.__cols+1): # Generate indices columns = xrange(*key[1].indices(self.__cols)) else: raise IndexError('Column index out of bounds') else: # Single column columns = [key[1]] # Create matrix slice m = self.ctx.matrix(len(rows),len(columns)) # Assign elements to the output matrix for i,x in enumerate(rows): for j,y in enumerate(columns): m.__set_element((i,j),self.__get_element((x,y))) return m else: # single element extraction if key[0] >= self.__rows or key[1] >= self.__cols: raise IndexError('matrix index out of range') if key in self.__data: return self.__data[key] else: return self.ctx.zero def __setitem__(self, key, value): # setitem function for mp matrix class with slice index enabled # it allows the following assingments # scalar to a slice of the matrix # A[:,2:6] = 2.5 # submatrix to matrix (the value matrix should be the same size as the slice size) # A[3,:] = B where A is n x m and B is n x 1 # Convert vector to matrix indexing if isinstance(key, int) or isinstance(key,slice): # only sufficent for vectors if self.__rows == 1: key = (0, key) elif self.__cols == 1: key = (key, 0) else: raise IndexError('insufficient indices for matrix') # Slice indexing if isinstance(key[0],slice) or isinstance(key[1],slice): # Rows if isinstance(key[0],slice): # Check bounds if (key[0].start is None or key[0].start >= 0) and \ (key[0].stop is None or key[0].stop <= self.__rows+1): # generate row indices rows = xrange(*key[0].indices(self.__rows)) else: raise IndexError('Row index out of bounds') else: # Single row rows = [key[0]] # Columns if isinstance(key[1],slice): # Check bounds if (key[1].start is None or key[1].start >= 0) and \ (key[1].stop is None or key[1].stop <= self.__cols+1): # Generate column indices columns = xrange(*key[1].indices(self.__cols)) else: raise IndexError('Column index out of bounds') else: # Single column columns = [key[1]] # Assign slice with a scalar if isinstance(value,self.ctx.matrix): # Assign elements to matrix if input and output dimensions match if len(rows) == value.rows and len(columns) == value.cols: for i,x in enumerate(rows): for j,y in enumerate(columns): self.__set_element((x,y), value.__get_element((i,j))) else: raise ValueError('Dimensions do not match') else: # Assign slice with scalars value = self.ctx.convert(value) for i in rows: for j in columns: self.__set_element((i,j), value) else: # Single element assingment # Check bounds if key[0] >= self.__rows or key[1] >= self.__cols: raise IndexError('matrix index out of range') # Convert and store value value = self.ctx.convert(value) if value: # only store non-zeros self.__data[key] = value elif key in self.__data: del self.__data[key] if self._LU: self._LU = None return def __iter__(self): for i in xrange(self.__rows): for j in xrange(self.__cols): yield self[i,j] def __mul__(self, other): if isinstance(other, self.ctx.matrix): # dot multiplication TODO: use Strassen's method? if self.__cols != other.__rows: raise ValueError('dimensions not compatible for multiplication') new = self.ctx.matrix(self.__rows, other.__cols) for i in xrange(self.__rows): for j in xrange(other.__cols): new[i, j] = self.ctx.fdot((self[i,k], other[k,j]) for k in xrange(other.__rows)) return new else: # try scalar multiplication new = self.ctx.matrix(self.__rows, self.__cols) for i in xrange(self.__rows): for j in xrange(self.__cols): new[i, j] = other * self[i, j] return new def __rmul__(self, other): # assume other is scalar and thus commutative if isinstance(other, self.ctx.matrix): raise TypeError("other should not be type of ctx.matrix") return self.__mul__(other) def __pow__(self, other): # avoid cyclic import problems #from linalg import inverse if not isinstance(other, int): raise ValueError('only integer exponents are supported') if not self.__rows == self.__cols: raise ValueError('only powers of square matrices are defined') n = other if n == 0: return self.ctx.eye(self.__rows) if n < 0: n = -n neg = True else: neg = False i = n y = 1 z = self.copy() while i != 0: if i % 2 == 1: y = y * z z = z*z i = i // 2 if neg: y = self.ctx.inverse(y) return y def __div__(self, other): # assume other is scalar and do element-wise divison assert not isinstance(other, self.ctx.matrix) new = self.ctx.matrix(self.__rows, self.__cols) for i in xrange(self.__rows): for j in xrange(self.__cols): new[i,j] = self[i,j] / other return new __truediv__ = __div__ def __add__(self, other): if isinstance(other, self.ctx.matrix): if not (self.__rows == other.__rows and self.__cols == other.__cols): raise ValueError('incompatible dimensions for addition') new = self.ctx.matrix(self.__rows, self.__cols) for i in xrange(self.__rows): for j in xrange(self.__cols): new[i,j] = self[i,j] + other[i,j] return new else: # assume other is scalar and add element-wise new = self.ctx.matrix(self.__rows, self.__cols) for i in xrange(self.__rows): for j in xrange(self.__cols): new[i,j] += self[i,j] + other return new def __radd__(self, other): return self.__add__(other) def __sub__(self, other): if isinstance(other, self.ctx.matrix) and not (self.__rows == other.__rows and self.__cols == other.__cols): raise ValueError('incompatible dimensions for substraction') return self.__add__(other * (-1)) def __neg__(self): return (-1) * self def __rsub__(self, other): return -self + other def __eq__(self, other): return self.__rows == other.__rows and self.__cols == other.__cols \ and self.__data == other.__data def __len__(self): if self.rows == 1: return self.cols elif self.cols == 1: return self.rows else: return self.rows # do it like numpy def __getrows(self): return self.__rows def __setrows(self, value): for key in self.__data.copy(): if key[0] >= value: del self.__data[key] self.__rows = value rows = property(__getrows, __setrows, doc='number of rows') def __getcols(self): return self.__cols def __setcols(self, value): for key in self.__data.copy(): if key[1] >= value: del self.__data[key] self.__cols = value cols = property(__getcols, __setcols, doc='number of columns') def transpose(self): new = self.ctx.matrix(self.__cols, self.__rows) for i in xrange(self.__rows): for j in xrange(self.__cols): new[j,i] = self[i,j] return new T = property(transpose) def conjugate(self): return self.apply(self.ctx.conj) def transpose_conj(self): return self.conjugate().transpose() H = property(transpose_conj) def copy(self): new = self.ctx.matrix(self.__rows, self.__cols) new.__data = self.__data.copy() return new __copy__ = copy def column(self, n): m = self.ctx.matrix(self.rows, 1) for i in range(self.rows): m[i] = self[i,n] return m class MatrixMethods(object): def __init__(ctx): # XXX: subclass ctx.matrix = type('matrix', (_matrix,), {}) ctx.matrix.ctx = ctx ctx.matrix.convert = ctx.convert def eye(ctx, n, **kwargs): """ Create square identity matrix n x n. """ A = ctx.matrix(n, **kwargs) for i in xrange(n): A[i,i] = 1 return A def diag(ctx, diagonal, **kwargs): """ Create square diagonal matrix using given list. Example: >>> from mpmath import diag, mp >>> mp.pretty = False >>> diag([1, 2, 3]) matrix( [['1.0', '0.0', '0.0'], ['0.0', '2.0', '0.0'], ['0.0', '0.0', '3.0']]) """ A = ctx.matrix(len(diagonal), **kwargs) for i in xrange(len(diagonal)): A[i,i] = diagonal[i] return A def zeros(ctx, *args, **kwargs): """ Create matrix m x n filled with zeros. One given dimension will create square matrix n x n. Example: >>> from mpmath import zeros, mp >>> mp.pretty = False >>> zeros(2) matrix( [['0.0', '0.0'], ['0.0', '0.0']]) """ if len(args) == 1: m = n = args[0] elif len(args) == 2: m = args[0] n = args[1] else: raise TypeError('zeros expected at most 2 arguments, got %i' % len(args)) A = ctx.matrix(m, n, **kwargs) for i in xrange(m): for j in xrange(n): A[i,j] = 0 return A def ones(ctx, *args, **kwargs): """ Create matrix m x n filled with ones. One given dimension will create square matrix n x n. Example: >>> from mpmath import ones, mp >>> mp.pretty = False >>> ones(2) matrix( [['1.0', '1.0'], ['1.0', '1.0']]) """ if len(args) == 1: m = n = args[0] elif len(args) == 2: m = args[0] n = args[1] else: raise TypeError('ones expected at most 2 arguments, got %i' % len(args)) A = ctx.matrix(m, n, **kwargs) for i in xrange(m): for j in xrange(n): A[i,j] = 1 return A def hilbert(ctx, m, n=None): """ Create (pseudo) hilbert matrix m x n. One given dimension will create hilbert matrix n x n. The matrix is very ill-conditioned and symmetric, positive definite if square. """ if n is None: n = m A = ctx.matrix(m, n) for i in xrange(m): for j in xrange(n): A[i,j] = ctx.one / (i + j + 1) return A def randmatrix(ctx, m, n=None, min=0, max=1, **kwargs): """ Create a random m x n matrix. All values are >= min and >> from mpmath import randmatrix >>> randmatrix(2) # doctest:+SKIP matrix( [['0.53491598236191806', '0.57195669543302752'], ['0.85589992269513615', '0.82444367501382143']]) """ if not n: n = m A = ctx.matrix(m, n, **kwargs) for i in xrange(m): for j in xrange(n): A[i,j] = ctx.rand() * (max - min) + min return A def swap_row(ctx, A, i, j): """ Swap row i with row j. """ if i == j: return if isinstance(A, ctx.matrix): for k in xrange(A.cols): A[i,k], A[j,k] = A[j,k], A[i,k] elif isinstance(A, list): A[i], A[j] = A[j], A[i] else: raise TypeError('could not interpret type') def extend(ctx, A, b): """ Extend matrix A with column b and return result. """ if not isinstance(A, ctx.matrix): raise TypeError("A should be a type of ctx.matrix") if A.rows != len(b): raise ValueError("Value should be equal to len(b)") A = A.copy() A.cols += 1 for i in xrange(A.rows): A[i, A.cols-1] = b[i] return A def norm(ctx, x, p=2): r""" Gives the entrywise `p`-norm of an iterable *x*, i.e. the vector norm `\left(\sum_k |x_k|^p\right)^{1/p}`, for any given `1 \le p \le \infty`. Special cases: If *x* is not iterable, this just returns ``absmax(x)``. ``p=1`` gives the sum of absolute values. ``p=2`` is the standard Euclidean vector norm. ``p=inf`` gives the magnitude of the largest element. For *x* a matrix, ``p=2`` is the Frobenius norm. For operator matrix norms, use :func:`~mpmath.mnorm` instead. You can use the string 'inf' as well as float('inf') or mpf('inf') to specify the infinity norm. **Examples** >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> x = matrix([-10, 2, 100]) >>> norm(x, 1) mpf('112.0') >>> norm(x, 2) mpf('100.5186549850325') >>> norm(x, inf) mpf('100.0') """ try: iter(x) except TypeError: return ctx.absmax(x) if type(p) is not int: p = ctx.convert(p) if p == ctx.inf: return max(ctx.absmax(i) for i in x) elif p == 1: return ctx.fsum(x, absolute=1) elif p == 2: return ctx.sqrt(ctx.fsum(x, absolute=1, squared=1)) elif p > 1: return ctx.nthroot(ctx.fsum(abs(i)**p for i in x), p) else: raise ValueError('p has to be >= 1') def mnorm(ctx, A, p=1): r""" Gives the matrix (operator) `p`-norm of A. Currently ``p=1`` and ``p=inf`` are supported: ``p=1`` gives the 1-norm (maximal column sum) ``p=inf`` gives the `\infty`-norm (maximal row sum). You can use the string 'inf' as well as float('inf') or mpf('inf') ``p=2`` (not implemented) for a square matrix is the usual spectral matrix norm, i.e. the largest singular value. ``p='f'`` (or 'F', 'fro', 'Frobenius, 'frobenius') gives the Frobenius norm, which is the elementwise 2-norm. The Frobenius norm is an approximation of the spectral norm and satisfies .. math :: \frac{1}{\sqrt{\mathrm{rank}(A)}} \|A\|_F \le \|A\|_2 \le \|A\|_F The Frobenius norm lacks some mathematical properties that might be expected of a norm. For general elementwise `p`-norms, use :func:`~mpmath.norm` instead. **Examples** >>> from mpmath import * >>> mp.dps = 15; mp.pretty = False >>> A = matrix([[1, -1000], [100, 50]]) >>> mnorm(A, 1) mpf('1050.0') >>> mnorm(A, inf) mpf('1001.0') >>> mnorm(A, 'F') mpf('1006.2310867787777') """ A = ctx.matrix(A) if type(p) is not int: if type(p) is str and 'frobenius'.startswith(p.lower()): return ctx.norm(A, 2) p = ctx.convert(p) m, n = A.rows, A.cols if p == 1: return max(ctx.fsum((A[i,j] for i in xrange(m)), absolute=1) for j in xrange(n)) elif p == ctx.inf: return max(ctx.fsum((A[i,j] for j in xrange(n)), absolute=1) for i in xrange(m)) else: raise NotImplementedError("matrix p-norm for arbitrary p") if __name__ == '__main__': import doctest doctest.testmod() mpmath-1.0.0/mpmath/rational.py000066400000000000000000000135221316273626600164660ustar00rootroot00000000000000import operator import sys from .libmp import int_types, mpf_hash, bitcount, from_man_exp, HASH_MODULUS new = object.__new__ def create_reduced(p, q, _cache={}): key = p, q if key in _cache: return _cache[key] x, y = p, q while y: x, y = y, x % y if x != 1: p //= x q //= x v = new(mpq) v._mpq_ = p, q # Speedup integers, half-integers and other small fractions if q <= 4 and abs(key[0]) < 100: _cache[key] = v return v class mpq(object): """ Exact rational type, currently only intended for internal use. """ __slots__ = ["_mpq_"] def __new__(cls, p, q=1): if type(p) is tuple: p, q = p elif hasattr(p, '_mpq_'): p, q = p._mpq_ return create_reduced(p, q) def __repr__(s): return "mpq(%s,%s)" % s._mpq_ def __str__(s): return "(%s/%s)" % s._mpq_ def __int__(s): a, b = s._mpq_ return a // b def __nonzero__(s): return bool(s._mpq_[0]) __bool__ = __nonzero__ def __hash__(s): a, b = s._mpq_ if sys.version >= "3.2": inverse = pow(b, HASH_MODULUS-2, HASH_MODULUS) if not inverse: h = sys.hash_info.inf else: h = (abs(a) * inverse) % HASH_MODULUS if a < 0: h = -h if h == -1: h = -2 return h else: if b == 1: return hash(a) # Power of two: mpf compatible hash if not (b & (b-1)): return mpf_hash(from_man_exp(a, 1-bitcount(b))) return hash((a,b)) def __eq__(s, t): ttype = type(t) if ttype is mpq: return s._mpq_ == t._mpq_ if ttype in int_types: a, b = s._mpq_ if b != 1: return False return a == t return NotImplemented def __ne__(s, t): ttype = type(t) if ttype is mpq: return s._mpq_ != t._mpq_ if ttype in int_types: a, b = s._mpq_ if b != 1: return True return a != t return NotImplemented def _cmp(s, t, op): ttype = type(t) if ttype in int_types: a, b = s._mpq_ return op(a, t*b) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return op(a*d, b*c) return NotImplementedError def __lt__(s, t): return s._cmp(t, operator.lt) def __le__(s, t): return s._cmp(t, operator.le) def __gt__(s, t): return s._cmp(t, operator.gt) def __ge__(s, t): return s._cmp(t, operator.ge) def __abs__(s): a, b = s._mpq_ if a >= 0: return s v = new(mpq) v._mpq_ = -a, b return v def __neg__(s): a, b = s._mpq_ v = new(mpq) v._mpq_ = -a, b return v def __pos__(s): return s def __add__(s, t): ttype = type(t) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return create_reduced(a*d+b*c, b*d) if ttype in int_types: a, b = s._mpq_ v = new(mpq) v._mpq_ = a+b*t, b return v return NotImplemented __radd__ = __add__ def __sub__(s, t): ttype = type(t) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return create_reduced(a*d-b*c, b*d) if ttype in int_types: a, b = s._mpq_ v = new(mpq) v._mpq_ = a-b*t, b return v return NotImplemented def __rsub__(s, t): ttype = type(t) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return create_reduced(b*c-a*d, b*d) if ttype in int_types: a, b = s._mpq_ v = new(mpq) v._mpq_ = b*t-a, b return v return NotImplemented def __mul__(s, t): ttype = type(t) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return create_reduced(a*c, b*d) if ttype in int_types: a, b = s._mpq_ return create_reduced(a*t, b) return NotImplemented __rmul__ = __mul__ def __div__(s, t): ttype = type(t) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return create_reduced(a*d, b*c) if ttype in int_types: a, b = s._mpq_ return create_reduced(a, b*t) return NotImplemented def __rdiv__(s, t): ttype = type(t) if ttype is mpq: a, b = s._mpq_ c, d = t._mpq_ return create_reduced(b*c, a*d) if ttype in int_types: a, b = s._mpq_ return create_reduced(b*t, a) return NotImplemented def __pow__(s, t): ttype = type(t) if ttype in int_types: a, b = s._mpq_ if t: if t < 0: a, b, t = b, a, -t v = new(mpq) v._mpq_ = a**t, b**t return v raise ZeroDivisionError return NotImplemented mpq_1 = mpq((1,1)) mpq_0 = mpq((0,1)) mpq_1_2 = mpq((1,2)) mpq_3_2 = mpq((3,2)) mpq_1_4 = mpq((1,4)) mpq_1_16 = mpq((1,16)) mpq_3_16 = mpq((3,16)) mpq_5_2 = mpq((5,2)) mpq_3_4 = mpq((3,4)) mpq_7_4 = mpq((7,4)) mpq_5_4 = mpq((5,4)) # Register with "numbers" ABC # We do not subclass, hence we do not use the @abstractmethod checks. While # this is less invasive it may turn out that we do not actually support # parts of the expected interfaces. See # http://docs.python.org/2/library/numbers.html for list of abstract # methods. try: import numbers numbers.Rational.register(mpq) except ImportError: pass mpmath-1.0.0/mpmath/tests/000077500000000000000000000000001316273626600154425ustar00rootroot00000000000000mpmath-1.0.0/mpmath/tests/__init__.py000066400000000000000000000000001316273626600175410ustar00rootroot00000000000000mpmath-1.0.0/mpmath/tests/extratest_bessel.py000066400000000000000000000504261316273626600214030ustar00rootroot00000000000000# Extra stress testing for Bessel functions # Reference zeros generated with the aid of scipy.special # jn_zero, jnp_zero, yn_zero, ynp_zero from mpmath import * V = 15 M = 15 jn_small_zeros = \ [[2.4048255576957728, 5.5200781102863106, 8.6537279129110122, 11.791534439014282, 14.930917708487786, 18.071063967910923, 21.211636629879259, 24.352471530749303, 27.493479132040255, 30.634606468431975, 33.775820213573569, 36.917098353664044, 40.058425764628239, 43.19979171317673, 46.341188371661814], [3.8317059702075123, 7.0155866698156188, 10.173468135062722, 13.323691936314223, 16.470630050877633, 19.615858510468242, 22.760084380592772, 25.903672087618383, 29.046828534916855, 32.189679910974404, 35.332307550083865, 38.474766234771615, 41.617094212814451, 44.759318997652822, 47.901460887185447], [5.1356223018406826, 8.4172441403998649, 11.619841172149059, 14.795951782351261, 17.959819494987826, 21.116997053021846, 24.270112313573103, 27.420573549984557, 30.569204495516397, 33.7165195092227, 36.86285651128381, 40.008446733478192, 43.153453778371463, 46.297996677236919, 49.442164110416873], [6.3801618959239835, 9.7610231299816697, 13.015200721698434, 16.223466160318768, 19.409415226435012, 22.582729593104442, 25.748166699294978, 28.908350780921758, 32.064852407097709, 35.218670738610115, 38.370472434756944, 41.520719670406776, 44.669743116617253, 47.817785691533302, 50.965029906205183], [7.5883424345038044, 11.064709488501185, 14.37253667161759, 17.615966049804833, 20.826932956962388, 24.01901952477111, 27.199087765981251, 30.371007667117247, 33.537137711819223, 36.699001128744649, 39.857627302180889, 43.01373772335443, 46.167853512924375, 49.320360686390272, 52.471551398458023], [8.771483815959954, 12.338604197466944, 15.700174079711671, 18.980133875179921, 22.217799896561268, 25.430341154222704, 28.626618307291138, 31.811716724047763, 34.988781294559295, 38.159868561967132, 41.326383254047406, 44.489319123219673, 47.649399806697054, 50.80716520300633, 53.963026558378149], [9.9361095242176849, 13.589290170541217, 17.003819667816014, 20.320789213566506, 23.58608443558139, 26.820151983411405, 30.033722386570469, 33.233041762847123, 36.422019668258457, 39.603239416075404, 42.778481613199507, 45.949015998042603, 49.11577372476426, 52.279453903601052, 55.440592068853149], [11.086370019245084, 14.821268727013171, 18.287582832481726, 21.641541019848401, 24.934927887673022, 28.191188459483199, 31.42279419226558, 34.637089352069324, 37.838717382853611, 41.030773691585537, 44.21540850526126, 47.394165755570512, 50.568184679795566, 53.738325371963291, 56.905249991978781], [12.225092264004655, 16.037774190887709, 19.554536430997055, 22.94517313187462, 26.266814641176644, 29.54565967099855, 32.795800037341462, 36.025615063869571, 39.240447995178135, 42.443887743273558, 45.638444182199141, 48.825930381553857, 52.007691456686903, 55.184747939289049, 58.357889025269694], [13.354300477435331, 17.241220382489128, 20.807047789264107, 24.233885257750552, 27.583748963573006, 30.885378967696675, 34.154377923855096, 37.400099977156589, 40.628553718964528, 43.843801420337347, 47.048700737654032, 50.245326955305383, 53.435227157042058, 56.619580266508436, 59.799301630960228], [14.475500686554541, 18.433463666966583, 22.046985364697802, 25.509450554182826, 28.887375063530457, 32.211856199712731, 35.499909205373851, 38.761807017881651, 42.004190236671805, 45.231574103535045, 48.447151387269394, 51.653251668165858, 54.851619075963349, 58.043587928232478, 61.230197977292681], [15.589847884455485, 19.61596690396692, 23.275853726263409, 26.773322545509539, 30.17906117878486, 33.526364075588624, 36.833571341894905, 40.111823270954241, 43.368360947521711, 46.608132676274944, 49.834653510396724, 53.050498959135054, 56.257604715114484, 59.457456908388002, 62.651217388202912], [16.698249933848246, 20.789906360078443, 24.494885043881354, 28.026709949973129, 31.45996003531804, 34.829986990290238, 38.156377504681354, 41.451092307939681, 44.721943543191147, 47.974293531269048, 51.211967004101068, 54.437776928325074, 57.653844811906946, 60.8618046824805, 64.062937824850136], [17.801435153282442, 21.95624406783631, 25.705103053924724, 29.270630441874802, 32.731053310978403, 36.123657666448762, 39.469206825243883, 42.780439265447158, 46.06571091157561, 49.330780096443524, 52.579769064383396, 55.815719876305778, 59.040934037249271, 62.257189393731728, 65.465883797232125], [18.899997953174024, 23.115778347252756, 26.907368976182104, 30.505950163896036, 33.993184984781542, 37.408185128639695, 40.772827853501868, 44.100590565798301, 47.400347780543231, 50.678236946479898, 53.93866620912693, 57.184898598119301, 60.419409852130297, 63.644117508962281, 66.860533012260103]] jnp_small_zeros = \ [[0.0, 3.8317059702075123, 7.0155866698156188, 10.173468135062722, 13.323691936314223, 16.470630050877633, 19.615858510468242, 22.760084380592772, 25.903672087618383, 29.046828534916855, 32.189679910974404, 35.332307550083865, 38.474766234771615, 41.617094212814451, 44.759318997652822], [1.8411837813406593, 5.3314427735250326, 8.5363163663462858, 11.706004902592064, 14.863588633909033, 18.015527862681804, 21.16436985918879, 24.311326857210776, 27.457050571059246, 30.601922972669094, 33.746182898667383, 36.889987409236811, 40.033444053350675, 43.176628965448822, 46.319597561173912], [3.0542369282271403, 6.7061331941584591, 9.9694678230875958, 13.170370856016123, 16.347522318321783, 19.512912782488205, 22.671581772477426, 25.826037141785263, 28.977672772993679, 32.127327020443474, 35.275535050674691, 38.422654817555906, 41.568934936074314, 44.714553532819734, 47.859641607992093], [4.2011889412105285, 8.0152365983759522, 11.345924310743006, 14.585848286167028, 17.78874786606647, 20.9724769365377, 24.144897432909265, 27.310057930204349, 30.470268806290424, 33.626949182796679, 36.781020675464386, 39.933108623659488, 43.083652662375079, 46.232971081836478, 49.381300092370349], [5.3175531260839944, 9.2823962852416123, 12.681908442638891, 15.964107037731551, 19.196028800048905, 22.401032267689004, 25.589759681386733, 28.767836217666503, 31.938539340972783, 35.103916677346764, 38.265316987088158, 41.423666498500732, 44.579623137359257, 47.733667523865744, 50.886159153182682], [6.4156163757002403, 10.519860873772308, 13.9871886301403, 17.312842487884625, 20.575514521386888, 23.803581476593863, 27.01030789777772, 30.20284907898166, 33.385443901010121, 36.560777686880356, 39.730640230067416, 42.896273163494417, 46.058566273567043, 49.218174614666636, 52.375591529563596], [7.501266144684147, 11.734935953042708, 15.268181461097873, 18.637443009666202, 21.931715017802236, 25.183925599499626, 28.409776362510085, 31.617875716105035, 34.81339298429743, 37.999640897715301, 41.178849474321413, 44.352579199070217, 47.521956905768113, 50.687817781723741, 53.85079463676896], [8.5778364897140741, 12.932386237089576, 16.529365884366944, 19.941853366527342, 23.268052926457571, 26.545032061823576, 29.790748583196614, 33.015178641375142, 36.224380548787162, 39.422274578939259, 42.611522172286684, 45.793999658055002, 48.971070951900596, 52.143752969301988, 55.312820330403446], [9.6474216519972168, 14.115518907894618, 17.774012366915256, 21.229062622853124, 24.587197486317681, 27.889269427955092, 31.155326556188325, 34.39662855427218, 37.620078044197086, 40.830178681822041, 44.030010337966153, 47.221758471887113, 50.407020967034367, 53.586995435398319, 56.762598475105272], [10.711433970699945, 15.28673766733295, 19.004593537946053, 22.501398726777283, 25.891277276839136, 29.218563499936081, 32.505247352375523, 35.763792928808799, 39.001902811514218, 42.224638430753279, 45.435483097475542, 48.636922645305525, 51.830783925834728, 55.01844255063594, 58.200955824859509], [11.770876674955582, 16.447852748486498, 20.223031412681701, 23.760715860327448, 27.182021527190532, 30.534504754007074, 33.841965775135715, 37.118000423665604, 40.371068905333891, 43.606764901379516, 46.828959446564562, 50.040428970943456, 53.243223214220535, 56.438892058982552, 59.628631306921512], [12.826491228033465, 17.600266557468326, 21.430854238060294, 25.008518704644261, 28.460857279654847, 31.838424458616998, 35.166714427392629, 38.460388720328256, 41.728625562624312, 44.977526250903469, 48.211333836373288, 51.433105171422278, 54.645106240447105, 57.849056857839799, 61.046288512821078], [13.878843069697276, 18.745090916814406, 22.629300302835503, 26.246047773946584, 29.72897816891134, 33.131449953571661, 36.480548302231658, 39.791940718940855, 43.075486800191012, 46.337772104541405, 49.583396417633095, 52.815686826850452, 56.037118687012179, 59.249577075517968, 62.454525995970462], [14.928374492964716, 19.88322436109951, 23.81938909003628, 27.474339750968247, 30.987394331665278, 34.414545662167183, 37.784378506209499, 41.113512376883377, 44.412454519229281, 47.688252845993366, 50.945849245830813, 54.188831071035124, 57.419876154678179, 60.641030026538746, 63.853885828967512], [15.975438807484321, 21.015404934568315, 25.001971500138194, 28.694271223110755, 32.236969407878118, 35.688544091185301, 39.078998185245057, 42.425854432866141, 45.740236776624833, 49.029635055514276, 52.299319390331728, 55.553127779547459, 58.793933759028134, 62.02393848337554, 65.244860767043859]] yn_small_zeros = \ [[0.89357696627916752, 3.9576784193148579, 7.0860510603017727, 10.222345043496417, 13.361097473872763, 16.500922441528091, 19.64130970088794, 22.782028047291559, 25.922957653180923, 29.064030252728398, 32.205204116493281, 35.346452305214321, 38.487756653081537, 41.629104466213808, 44.770486607221993], [2.197141326031017, 5.4296810407941351, 8.5960058683311689, 11.749154830839881, 14.897442128336725, 18.043402276727856, 21.188068934142213, 24.331942571356912, 27.475294980449224, 30.618286491641115, 33.761017796109326, 36.90355531614295, 40.045944640266876, 43.188218097393211, 46.330399250701687], [3.3842417671495935, 6.7938075132682675, 10.023477979360038, 13.209986710206416, 16.378966558947457, 19.539039990286384, 22.69395593890929, 25.845613720902269, 28.995080395650151, 32.143002257627551, 35.289793869635804, 38.435733485446343, 41.581014867297885, 44.725777117640461, 47.870122696676504], [4.5270246611496439, 8.0975537628604907, 11.396466739595867, 14.623077742393873, 17.81845523294552, 20.997284754187761, 24.166235758581828, 27.328799850405162, 30.486989604098659, 33.642049384702463, 36.794791029185579, 39.945767226378749, 43.095367507846703, 46.2438744334407, 49.391498015725107], [5.6451478942208959, 9.3616206152445429, 12.730144474090465, 15.999627085382479, 19.22442895931681, 22.424810599698521, 25.610267054939328, 28.785893657666548, 31.954686680031668, 35.118529525584828, 38.278668089521758, 41.435960629910073, 44.591018225353424, 47.744288086361052, 50.896105199722123], [6.7471838248710219, 10.597176726782031, 14.033804104911233, 17.347086393228382, 20.602899017175335, 23.826536030287532, 27.030134937138834, 30.220335654231385, 33.401105611047908, 36.574972486670962, 39.743627733020277, 42.908248189569535, 46.069679073215439, 49.228543693445843, 52.385312123112282], [7.8377378223268716, 11.811037107609447, 15.313615118517857, 18.670704965906724, 21.958290897126571, 25.206207715021249, 28.429037095235496, 31.634879502950644, 34.828638524084437, 38.013473399691765, 41.19151880917741, 44.364272633271975, 47.53281875312084, 50.697961822183806, 53.860312300118388], [8.919605734873789, 13.007711435388313, 16.573915129085334, 19.974342312352426, 23.293972585596648, 26.5667563757203, 29.809531451608321, 33.031769327150685, 36.239265816598239, 39.435790312675323, 42.623910919472727, 45.805442883111651, 48.981708325514764, 52.153694518185572, 55.322154420959698], [9.9946283820824834, 14.190361295800141, 17.817887841179873, 21.26093227125945, 24.612576377421522, 27.910524883974868, 31.173701563441602, 34.412862242025045, 37.634648706110989, 40.843415321050884, 44.04214994542435, 47.232978012841169, 50.417456447370186, 53.596753874948731, 56.771765754432457], [11.064090256031013, 15.361301343575925, 19.047949646361388, 22.532765416313869, 25.91620496332662, 29.2394205079349, 32.523270869465881, 35.779715464475261, 39.016196664616095, 42.237627509803703, 45.4474001519274, 48.647941127433196, 51.841036928216499, 55.028034667184916, 58.209970905250097], [12.128927704415439, 16.522284394784426, 20.265984501212254, 23.791669719454272, 27.206568881574774, 30.555020011020762, 33.859683872746356, 37.133649760307504, 40.385117593813002, 43.619533085646856, 46.840676630553575, 50.051265851897857, 53.253310556711732, 56.448332488918971, 59.637507005589829], [13.189846995683845, 17.674674253171487, 21.473493977824902, 25.03913093040942, 28.485081336558058, 31.858644293774859, 35.184165245422787, 38.475796636190897, 41.742455848758449, 44.990096293791186, 48.222870660068338, 51.443777308699826, 54.655042589416311, 57.858358441436511, 61.055036135780528], [14.247395665073945, 18.819555894710682, 22.671697117872794, 26.276375544903892, 29.752925495549038, 33.151412708998983, 36.497763772987645, 39.807134090704376, 43.089121522203808, 46.350163579538652, 49.594769786270069, 52.82620892320143, 56.046916910756961, 59.258751140598783, 62.463155567737854], [15.30200785858925, 19.957808654258601, 23.861599172945054, 27.504429642227545, 31.011103429019229, 34.434283425782942, 37.801385632318459, 41.128514139788358, 44.425913324440663, 47.700482714581842, 50.957073905278458, 54.199216028087261, 57.429547607017405, 60.65008661807661, 63.862406280068586], [16.354034360047551, 21.090156519983806, 25.044040298785627, 28.724161640881914, 32.260472459522644, 35.708083982611664, 39.095820003878235, 42.440684315990936, 45.75353669045622, 49.041718113283529, 52.310408280968073, 55.56338698149062, 58.803488508906895, 62.032886550960831, 65.253280088312461]] ynp_small_zeros = \ [[2.197141326031017, 5.4296810407941351, 8.5960058683311689, 11.749154830839881, 14.897442128336725, 18.043402276727856, 21.188068934142213, 24.331942571356912, 27.475294980449224, 30.618286491641115, 33.761017796109326, 36.90355531614295, 40.045944640266876, 43.188218097393211, 46.330399250701687], [3.6830228565851777, 6.9414999536541757, 10.123404655436613, 13.285758156782854, 16.440058007293282, 19.590241756629495, 22.738034717396327, 25.884314618788867, 29.029575819372535, 32.174118233366201, 35.318134458192094, 38.461753870997549, 41.605066618873108, 44.74813744908079, 47.891014070791065], [5.0025829314460639, 8.3507247014130795, 11.574195465217647, 14.760909306207676, 17.931285939466855, 21.092894504412739, 24.249231678519058, 27.402145837145258, 30.552708880564553, 33.70158627151572, 36.849213419846257, 39.995887376143356, 43.141817835750686, 46.287157097544201, 49.432018469138281], [6.2536332084598136, 9.6987879841487711, 12.972409052292216, 16.19044719506921, 19.38238844973613, 22.559791857764261, 25.728213194724094, 28.890678419054777, 32.048984005266337, 35.204266606440635, 38.357281675961019, 41.508551443818436, 44.658448731963676, 47.807246956681162, 50.95515126455207], [7.4649217367571329, 11.005169149809189, 14.3317235192331, 17.58443601710272, 20.801062338411128, 23.997004122902644, 27.179886689853435, 30.353960608554323, 33.521797098666792, 36.685048382072301, 39.844826969405863, 43.001910515625288, 46.15685955107263, 49.310088614282257, 52.461911043685864], [8.6495562436971983, 12.280868725807848, 15.660799304540377, 18.949739756016503, 22.192841809428241, 25.409072788867674, 28.608039283077593, 31.795195353138159, 34.973890634255288, 38.14630522169358, 41.313923188794905, 44.477791768537617, 47.638672065035628, 50.797131066967842, 53.953600129601663], [9.8147970120105779, 13.532811875789828, 16.965526446046053, 20.291285512443867, 23.56186260680065, 26.799499736027237, 30.015665481543419, 33.216968050039509, 36.407516858984748, 39.590015243560459, 42.766320595957378, 45.937754257017323, 49.105283450953203, 52.269633324547373, 55.431358715604255], [10.965152105242974, 14.765687379508912, 18.250123150217555, 21.612750053384621, 24.911310600813573, 28.171051927637585, 31.40518108895689, 34.621401012564177, 37.824552065973114, 41.017847386464902, 44.203512240871601, 47.3831408366063, 50.557907466622796, 53.728697478957026, 56.896191727313342], [12.103641941939539, 15.982840905145284, 19.517731005559611, 22.916962141504605, 26.243700855690533, 29.525960140695407, 32.778568197561124, 36.010261572392516, 39.226578757802172, 42.43122493258747, 45.626783824134354, 48.815117837929515, 51.997606404328863, 55.175294723956816, 58.348990221754937], [13.232403808592215, 17.186756572616758, 20.770762917490496, 24.206152448722253, 27.561059462697153, 30.866053571250639, 34.137476603379774, 37.385039772270268, 40.614946085165892, 43.831373184731238, 47.037251786726299, 50.234705848765229, 53.425316228549359, 56.610286079882087, 59.790548623216652], [14.35301374369987, 18.379337301642568, 22.011118775283494, 25.482116178696707, 28.865046588695164, 32.192853922166294, 35.483296655830277, 38.747005493021857, 41.990815194320955, 45.219355876831731, 48.435892856078888, 51.642803925173029, 54.84186659475857, 58.034439083840155, 61.221578745109862], [15.466672066554263, 19.562077985759503, 23.240325531101082, 26.746322986645901, 30.157042415639891, 33.507642948240263, 36.817212798512775, 40.097251300178642, 43.355193847719752, 46.596103410173672, 49.823567279972794, 53.040208868780832, 56.247996968470062, 59.448441365714251, 62.642721301357187], [16.574317035530872, 20.73617763753932, 24.459631728238804, 27.999993668839644, 31.438208790267783, 34.811512070805535, 38.140243708611251, 41.436725143893739, 44.708963264433333, 47.962435051891027, 51.201037321915983, 54.427630745992975, 57.644369734615238, 60.852911791989989, 64.054555435720397], [17.676697936439624, 21.9026148697762, 25.670073356263225, 29.244155124266438, 32.709534477396028, 36.105399554497548, 39.453272918267025, 42.766255701958017, 46.052899215578358, 49.319076602061401, 52.568982147952547, 55.805705507386287, 59.031580956740466, 62.248409689597653, 65.457606670836759], [18.774423978290318, 23.06220035979272, 26.872520985976736, 30.479680663499762, 33.971869047372436, 37.390118854896324, 40.757072537673599, 44.086572292170345, 47.387688809191869, 50.66667461073936, 53.928009929563275, 57.175005343085052, 60.410169281219877, 63.635442539153021, 66.85235358587768]] def test_bessel_zeros(): mp.dps = 15 for v in range(V): for m in range(1,M+1): print(v, m, "of", V, M) # Twice to test cache (if used) assert besseljzero(v,m).ae(jn_small_zeros[v][m-1]) assert besseljzero(v,m).ae(jn_small_zeros[v][m-1]) assert besseljzero(v,m,1).ae(jnp_small_zeros[v][m-1]) assert besseljzero(v,m,1).ae(jnp_small_zeros[v][m-1]) assert besselyzero(v,m).ae(yn_small_zeros[v][m-1]) assert besselyzero(v,m).ae(yn_small_zeros[v][m-1]) assert besselyzero(v,m,1).ae(ynp_small_zeros[v][m-1]) assert besselyzero(v,m,1).ae(ynp_small_zeros[v][m-1]) if __name__ == "__main__": test_bessel_zeros() mpmath-1.0.0/mpmath/tests/extratest_gamma.py000066400000000000000000000160741316273626600212110ustar00rootroot00000000000000from mpmath import * from mpmath.libmp import ifac import sys if "-dps" in sys.argv: maxdps = int(sys.argv[sys.argv.index("-dps")+1]) else: maxdps = 1000 raise_ = "-raise" in sys.argv errcount = 0 def check(name, func, z, y): global errcount try: x = func(z) except: errcount += 1 if raise_: raise print() print(name) print("EXCEPTION") import traceback traceback.print_tb(sys.exc_info()[2]) print() return xre = x.real xim = x.imag yre = y.real yim = y.imag tol = eps*8 err = 0 if abs(xre-yre) > abs(yre)*tol: err = 1 print() print("Error! %s (re = %s, wanted %s, err=%s)" % (name, nstr(xre,10), nstr(yre,10), nstr(abs(xre-yre)))) errcount += 1 if raise_: raise SystemExit if abs(xim-yim) > abs(yim)*tol: err = 1 print() print("Error! %s (im = %s, wanted %s, err=%s)" % (name, nstr(xim,10), nstr(yim,10), nstr(abs(xim-yim)))) errcount += 1 if raise_: raise SystemExit if not err: sys.stdout.write("%s ok; " % name) def testcase(case): z, result = case print("Testing z =", z) mp.dps = 1010 z = eval(z) mp.dps = maxdps + 50 if result is None: gamma_val = gamma(z) loggamma_val = loggamma(z) factorial_val = factorial(z) rgamma_val = rgamma(z) else: loggamma_val = eval(result) gamma_val = exp(loggamma_val) factorial_val = z * gamma_val rgamma_val = 1/gamma_val for dps in [5, 10, 15, 25, 40, 60, 90, 120, 250, 600, 1000, 1800, 3600]: if dps > maxdps: break mp.dps = dps print("dps = %s" % dps) check("gamma", gamma, z, gamma_val) check("rgamma", rgamma, z, rgamma_val) check("loggamma", loggamma, z, loggamma_val) check("factorial", factorial, z, factorial_val) print() mp.dps = 15 testcases = [] # Basic values for n in list(range(1,200)) + list(range(201,2000,17)): testcases.append(["%s" % n, None]) for n in range(-200,200): testcases.append(["%s+0.5" % n, None]) testcases.append(["%s+0.37" % n, None]) testcases += [\ ["(0.1+1j)", None], ["(-0.1+1j)", None], ["(0.1-1j)", None], ["(-0.1-1j)", None], ["10j", None], ["-10j", None], ["100j", None], ["10000j", None], ["-10000000j", None], ["(10**100)*j", None], ["125+(10**100)*j", None], ["-125+(10**100)*j", None], ["(10**10)*(1+j)", None], ["(10**10)*(-1+j)", None], ["(10**100)*(1+j)", None], ["(10**100)*(-1+j)", None], ["(1.5-1j)", None], ["(6+4j)", None], ["(4+1j)", None], ["(3.5+2j)", None], ["(1.5-1j)", None], ["(-6-4j)", None], ["(-2-3j)", None], ["(-2.5-2j)", None], ["(4+1j)", None], ["(3+3j)", None], ["(2-2j)", None], ["1", "0"], ["2", "0"], ["3", "log(2)"], ["4", "log(6)"], ["5", "log(24)"], ["0.5", "log(pi)/2"], ["1.5", "log(sqrt(pi)/2)"], ["2.5", "log(3*sqrt(pi)/4)"], ["mpf('0.37')", None], ["0.25", "log(sqrt(2*sqrt(2*pi**3)/agm(1,sqrt(2))))"], ["-0.4", None], ["mpf('-1.9')", None], ["mpf('12.8')", None], ["mpf('33.7')", None], ["mpf('95.2')", None], ["mpf('160.3')", None], ["mpf('2057.8')", None], ["25", "log(ifac(24))"], ["80", "log(ifac(79))"], ["500", "log(ifac(500-1))"], ["8000", "log(ifac(8000-1))"], ["8000.5", None], ["mpf('8000.1')", None], ["mpf('1.37e10')", None], ["mpf('1.37e10')*(1+j)", None], ["mpf('1.37e10')*(-1+j)", None], ["mpf('1.37e10')*(-1-j)", None], ["mpf('1.37e10')*(-1+j)", None], ["mpf('1.37e100')", None], ["mpf('1.37e100')*(1+j)", None], ["mpf('1.37e100')*(-1+j)", None], ["mpf('1.37e100')*(-1-j)", None], ["mpf('1.37e100')*(-1+j)", None], ["3+4j", "mpc('" "-1.7566267846037841105306041816232757851567066070613445016197619371316057169" "4723618263960834804618463052988607348289672535780644470689771115236512106002" "5970873471563240537307638968509556191696167970488390423963867031934333890838" "8009531786948197210025029725361069435208930363494971027388382086721660805397" "9163230643216054580167976201709951509519218635460317367338612500626714783631" "7498317478048447525674016344322545858832610325861086336204591943822302971823" "5161814175530618223688296232894588415495615809337292518431903058265147109853" "1710568942184987827643886816200452860853873815413367529829631430146227470517" "6579967222200868632179482214312673161276976117132204633283806161971389519137" "1243359764435612951384238091232760634271570950240717650166551484551654327989" "9360285030081716934130446150245110557038117075172576825490035434069388648124" "6678152254554001586736120762641422590778766100376515737713938521275749049949" "1284143906816424244705094759339932733567910991920631339597278805393743140853" "391550313363278558195609260225928','" "4.74266443803465792819488940755002274088830335171164611359052405215840070271" "5906813009373171139767051863542508136875688550817670379002790304870822775498" "2809996675877564504192565392367259119610438951593128982646945990372179860613" "4294436498090428077839141927485901735557543641049637962003652638924845391650" "9546290137755550107224907606529385248390667634297183361902055842228798984200" "9591180450211798341715874477629099687609819466457990642030707080894518168924" "6805549314043258530272479246115112769957368212585759640878745385160943755234" "9398036774908108204370323896757543121853650025529763655312360354244898913463" "7115955702828838923393113618205074162812089732064414530813087483533203244056" "0546577484241423134079056537777170351934430586103623577814746004431994179990" "5318522939077992613855205801498201930221975721246498720895122345420698451980" "0051215797310305885845964334761831751370672996984756815410977750799748813563" "8784405288158432214886648743541773208808731479748217023665577802702269468013" "673719173759245720489020315779001')"], ] for z in [4, 14, 34, 64]: testcases.append(["(2+j)*%s/3" % z, None]) testcases.append(["(-2+j)*%s/3" % z, None]) testcases.append(["(1+2*j)*%s/3" % z, None]) testcases.append(["(2-j)*%s/3" % z, None]) testcases.append(["(20+j)*%s/3" % z, None]) testcases.append(["(-20+j)*%s/3" % z, None]) testcases.append(["(1+20*j)*%s/3" % z, None]) testcases.append(["(20-j)*%s/3" % z, None]) testcases.append(["(200+j)*%s/3" % z, None]) testcases.append(["(-200+j)*%s/3" % z, None]) testcases.append(["(1+200*j)*%s/3" % z, None]) testcases.append(["(200-j)*%s/3" % z, None]) # Poles for n in [0,1,2,3,4,25,-1,-2,-3,-4,-20,-21,-50,-51,-200,-201,-20000,-20001]: for t in ['1e-5', '1e-20', '1e-100', '1e-10000']: testcases.append(["fadd(%s,'%s',exact=True)" % (n, t), None]) testcases.append(["fsub(%s,'%s',exact=True)" % (n, t), None]) testcases.append(["fadd(%s,'%sj',exact=True)" % (n, t), None]) testcases.append(["fsub(%s,'%sj',exact=True)" % (n, t), None]) if __name__ == "__main__": from timeit import default_timer as clock tot_time = 0.0 for case in testcases: t1 = clock() testcase(case) t2 = clock() print("Test time:", t2-t1) print() tot_time += (t2-t1) print("Total time:", tot_time) print("Errors:", errcount) mpmath-1.0.0/mpmath/tests/extratest_zeta.py000066400000000000000000000021031316273626600210560ustar00rootroot00000000000000from mpmath import zetazero from timeit import default_timer as clock def test_zetazero(): cases = [\ (399999999, 156762524.6750591511), (241389216, 97490234.2276711795), (526196239, 202950727.691229534), (542964976, 209039046.578535272), (1048449112, 388858885.231056486), (1048449113, 388858885.384337406), (1048449114, 388858886.002285122), (1048449115, 388858886.00239369), (1048449116, 388858886.690745053) ] for n, v in cases: print(n, v) t1 = clock() ok = zetazero(n).ae(complex(0.5,v)) t2 = clock() print("ok =", ok, ("(time = %s)" % round(t2-t1,3))) print("Now computing two huge zeros (this may take hours)") print("Computing zetazero(8637740722917)") ok = zetazero(8637740722917).ae(complex(0.5,2124447368584.39296466152)) print("ok =", ok) ok = zetazero(8637740722918).ae(complex(0.5,2124447368584.39298170604)) print("ok =", ok) if __name__ == "__main__": try: import psyco psyco.full() except ImportError: pass test_zetazero() mpmath-1.0.0/mpmath/tests/runtests.py000066400000000000000000000115711316273626600177100ustar00rootroot00000000000000#!/usr/bin/env python """ python runtests.py -py Use py.test to run tests (more useful for debugging) python runtests.py -psyco Enable psyco to make tests run about 50% faster python runtests.py -coverage Generate test coverage report. Statistics are written to /tmp python runtests.py -profile Generate profile stats (this is much slower) python runtests.py -nogmpy Run tests without using GMPY even if it exists python runtests.py -strict Enforce extra tests in normalize() python runtests.py -local Insert '../..' at the beginning of sys.path to use local mpmath Additional arguments are used to filter the tests to run. Only files that have one of the arguments in their name are executed. """ import sys, os, traceback if "-psyco" in sys.argv: sys.argv.remove('-psyco') import psyco psyco.full() profile = False if "-profile" in sys.argv: sys.argv.remove('-profile') profile = True coverage = False if "-coverage" in sys.argv: sys.argv.remove('-coverage') coverage = True if "-nogmpy" in sys.argv: sys.argv.remove('-nogmpy') os.environ['MPMATH_NOGMPY'] = 'Y' if "-strict" in sys.argv: sys.argv.remove('-strict') os.environ['MPMATH_STRICT'] = 'Y' if "-local" in sys.argv: sys.argv.remove('-local') importdir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..')) else: importdir = '' # TODO: add a flag for this testdir = '' def testit(importdir='', testdir=''): """Run all tests in testdir while importing from importdir.""" if importdir: sys.path.insert(1, importdir) if testdir: sys.path.insert(1, testdir) import os.path import mpmath print("mpmath imported from %s" % os.path.dirname(mpmath.__file__)) print("mpmath backend: %s" % mpmath.libmp.backend.BACKEND) print("mpmath mp class: %s" % repr(mpmath.mp)) print("mpmath version: %s" % mpmath.__version__) print("Python version: %s" % sys.version) print("") if "-py" in sys.argv: sys.argv.remove('-py') import py py.test.cmdline.main() else: import glob from timeit import default_timer as clock modules = [] args = sys.argv[1:] # search for tests in directory of this file if not otherwise specified if not testdir: pattern = os.path.dirname(sys.argv[0]) else: pattern = testdir if pattern: pattern += '/' pattern += 'test*.py' # look for tests (respecting specified filter) for f in glob.glob(pattern): name = os.path.splitext(os.path.basename(f))[0] # If run as a script, only run tests given as args, if any are given if args and __name__ == "__main__": ok = False for arg in args: if arg in name: ok = True break if not ok: continue module = __import__(name) priority = module.__dict__.get('priority', 100) if priority == 666: modules = [[priority, name, module]] break modules.append([priority, name, module]) # execute tests modules.sort() tstart = clock() for priority, name, module in modules: print(name) for f in sorted(module.__dict__.keys()): if f.startswith('test_'): if coverage and ('numpy' in f): continue sys.stdout.write(" " + f[5:].ljust(25) + " ") t1 = clock() try: module.__dict__[f]() except: etype, evalue, trb = sys.exc_info() if etype in (KeyboardInterrupt, SystemExit): raise print("") print("TEST FAILED!") print("") traceback.print_exc() t2 = clock() print("ok " + " " + ("%.7f" % (t2-t1)) + " s") tend = clock() print("") print("finished tests in " + ("%.2f" % (tend-tstart)) + " seconds") # clean sys.path if importdir: sys.path.remove(importdir) if testdir: sys.path.remove(testdir) if __name__ == '__main__': if profile: import cProfile cProfile.run("testit('%s', '%s')" % (importdir, testdir), sort=1) elif coverage: import trace tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix], trace=0, count=1) tracer.run('testit(importdir, testdir)') r = tracer.results() r.write_results(show_missing=True, summary=True, coverdir="/tmp") else: testit(importdir, testdir) mpmath-1.0.0/mpmath/tests/test_basic_ops.py000066400000000000000000000355371316273626600210320ustar00rootroot00000000000000import mpmath from mpmath import * from mpmath.libmp import * import random import sys try: long = long except NameError: long = int def test_type_compare(): assert mpf(2) == mpc(2,0) assert mpf(0) == mpc(0) assert mpf(2) != mpc(2, 0.00001) assert mpf(2) == 2.0 assert mpf(2) != 3.0 assert mpf(2) == 2 assert mpf(2) != '2.0' assert mpc(2) != '2.0' def test_add(): assert mpf(2.5) + mpf(3) == 5.5 assert mpf(2.5) + 3 == 5.5 assert mpf(2.5) + 3.0 == 5.5 assert 3 + mpf(2.5) == 5.5 assert 3.0 + mpf(2.5) == 5.5 assert (3+0j) + mpf(2.5) == 5.5 assert mpc(2.5) + mpf(3) == 5.5 assert mpc(2.5) + 3 == 5.5 assert mpc(2.5) + 3.0 == 5.5 assert mpc(2.5) + (3+0j) == 5.5 assert 3 + mpc(2.5) == 5.5 assert 3.0 + mpc(2.5) == 5.5 assert (3+0j) + mpc(2.5) == 5.5 def test_sub(): assert mpf(2.5) - mpf(3) == -0.5 assert mpf(2.5) - 3 == -0.5 assert mpf(2.5) - 3.0 == -0.5 assert 3 - mpf(2.5) == 0.5 assert 3.0 - mpf(2.5) == 0.5 assert (3+0j) - mpf(2.5) == 0.5 assert mpc(2.5) - mpf(3) == -0.5 assert mpc(2.5) - 3 == -0.5 assert mpc(2.5) - 3.0 == -0.5 assert mpc(2.5) - (3+0j) == -0.5 assert 3 - mpc(2.5) == 0.5 assert 3.0 - mpc(2.5) == 0.5 assert (3+0j) - mpc(2.5) == 0.5 def test_mul(): assert mpf(2.5) * mpf(3) == 7.5 assert mpf(2.5) * 3 == 7.5 assert mpf(2.5) * 3.0 == 7.5 assert 3 * mpf(2.5) == 7.5 assert 3.0 * mpf(2.5) == 7.5 assert (3+0j) * mpf(2.5) == 7.5 assert mpc(2.5) * mpf(3) == 7.5 assert mpc(2.5) * 3 == 7.5 assert mpc(2.5) * 3.0 == 7.5 assert mpc(2.5) * (3+0j) == 7.5 assert 3 * mpc(2.5) == 7.5 assert 3.0 * mpc(2.5) == 7.5 assert (3+0j) * mpc(2.5) == 7.5 def test_div(): assert mpf(6) / mpf(3) == 2.0 assert mpf(6) / 3 == 2.0 assert mpf(6) / 3.0 == 2.0 assert 6 / mpf(3) == 2.0 assert 6.0 / mpf(3) == 2.0 assert (6+0j) / mpf(3.0) == 2.0 assert mpc(6) / mpf(3) == 2.0 assert mpc(6) / 3 == 2.0 assert mpc(6) / 3.0 == 2.0 assert mpc(6) / (3+0j) == 2.0 assert 6 / mpc(3) == 2.0 assert 6.0 / mpc(3) == 2.0 assert (6+0j) / mpc(3) == 2.0 def test_pow(): assert mpf(6) ** mpf(3) == 216.0 assert mpf(6) ** 3 == 216.0 assert mpf(6) ** 3.0 == 216.0 assert 6 ** mpf(3) == 216.0 assert 6.0 ** mpf(3) == 216.0 assert (6+0j) ** mpf(3.0) == 216.0 assert mpc(6) ** mpf(3) == 216.0 assert mpc(6) ** 3 == 216.0 assert mpc(6) ** 3.0 == 216.0 assert mpc(6) ** (3+0j) == 216.0 assert 6 ** mpc(3) == 216.0 assert 6.0 ** mpc(3) == 216.0 assert (6+0j) ** mpc(3) == 216.0 def test_mixed_misc(): assert 1 + mpf(3) == mpf(3) + 1 == 4 assert 1 - mpf(3) == -(mpf(3) - 1) == -2 assert 3 * mpf(2) == mpf(2) * 3 == 6 assert 6 / mpf(2) == mpf(6) / 2 == 3 assert 1.0 + mpf(3) == mpf(3) + 1.0 == 4 assert 1.0 - mpf(3) == -(mpf(3) - 1.0) == -2 assert 3.0 * mpf(2) == mpf(2) * 3.0 == 6 assert 6.0 / mpf(2) == mpf(6) / 2.0 == 3 def test_add_misc(): mp.dps = 15 assert mpf(4) + mpf(-70) == -66 assert mpf(1) + mpf(1.1)/80 == 1 + 1.1/80 assert mpf((1, 10000000000)) + mpf(3) == mpf((1, 10000000000)) assert mpf(3) + mpf((1, 10000000000)) == mpf((1, 10000000000)) assert mpf((1, -10000000000)) + mpf(3) == mpf(3) assert mpf(3) + mpf((1, -10000000000)) == mpf(3) assert mpf(1) + 1e-15 != 1 assert mpf(1) + 1e-20 == 1 assert mpf(1.07e-22) + 0 == mpf(1.07e-22) assert mpf(0) + mpf(1.07e-22) == mpf(1.07e-22) def test_complex_misc(): # many more tests needed assert 1 + mpc(2) == 3 assert not mpc(2).ae(2 + 1e-13) assert mpc(2+1e-15j).ae(2) def test_complex_zeros(): for a in [0,2]: for b in [0,3]: for c in [0,4]: for d in [0,5]: assert mpc(a,b)*mpc(c,d) == complex(a,b)*complex(c,d) def test_hash(): for i in range(-256, 256): assert hash(mpf(i)) == hash(i) assert hash(mpf(0.5)) == hash(0.5) assert hash(mpc(2,3)) == hash(2+3j) # Check that this doesn't fail assert hash(inf) # Check that overflow doesn't assign equal hashes to large numbers assert hash(mpf('1e1000')) != hash('1e10000') assert hash(mpc(100,'1e1000')) != hash(mpc(200,'1e1000')) from mpmath.rational import mpq assert hash(mp.mpq(1,3)) assert hash(mp.mpq(0,1)) == 0 assert hash(mp.mpq(-1,1)) == hash(-1) assert hash(mp.mpq(1,1)) == hash(1) assert hash(mp.mpq(5,1)) == hash(5) assert hash(mp.mpq(1,2)) == hash(0.5) if sys.version >= "3.2": assert hash(mpf(1)*2**2000) == hash(2**2000) assert hash(mpf(1)/2**2000) == hash(mpq(1,2**2000)) # Advanced rounding test def test_add_rounding(): mp.dps = 15 a = from_float(1e-50) assert mpf_sub(mpf_add(fone, a, 53, round_up), fone, 53, round_up) == from_float(2.2204460492503131e-16) assert mpf_sub(fone, a, 53, round_up) == fone assert mpf_sub(fone, mpf_sub(fone, a, 53, round_down), 53, round_down) == from_float(1.1102230246251565e-16) assert mpf_add(fone, a, 53, round_down) == fone def test_almost_equal(): assert mpf(1.2).ae(mpf(1.20000001), 1e-7) assert not mpf(1.2).ae(mpf(1.20000001), 1e-9) assert not mpf(-0.7818314824680298).ae(mpf(-0.774695868667929)) def test_arithmetic_functions(): import operator ops = [(operator.add, fadd), (operator.sub, fsub), (operator.mul, fmul), (operator.truediv, fdiv)] a = mpf(0.27) b = mpf(1.13) c = mpc(0.51+2.16j) d = mpc(1.08-0.99j) for x in [a,b,c,d]: for y in [a,b,c,d]: for op, fop in ops: if fop is not fdiv: mp.prec = 200 z0 = op(x,y) mp.prec = 60 z1 = op(x,y) mp.prec = 53 z2 = op(x,y) assert fop(x, y, prec=60) == z1 assert fop(x, y) == z2 if fop is not fdiv: assert fop(x, y, prec=inf) == z0 assert fop(x, y, dps=inf) == z0 assert fop(x, y, exact=True) == z0 assert fneg(fneg(z1, exact=True), prec=inf) == z1 assert fneg(z1) == -(+z1) mp.dps = 15 def test_exact_integer_arithmetic(): # XXX: re-fix this so that all operations are tested with all rounding modes random.seed(0) for prec in [6, 10, 25, 40, 100, 250, 725]: for rounding in ['d', 'u', 'f', 'c', 'n']: mp.dps = prec M = 10**(prec-2) M2 = 10**(prec//2-2) for i in range(10): a = random.randint(-M, M) b = random.randint(-M, M) assert mpf(a, rounding=rounding) == a assert int(mpf(a, rounding=rounding)) == a assert int(mpf(str(a), rounding=rounding)) == a assert mpf(a) + mpf(b) == a + b assert mpf(a) - mpf(b) == a - b assert -mpf(a) == -a a = random.randint(-M2, M2) b = random.randint(-M2, M2) assert mpf(a) * mpf(b) == a*b assert mpf_mul(from_int(a), from_int(b), mp.prec, rounding) == from_int(a*b) mp.dps = 15 def test_odd_int_bug(): assert to_int(from_int(3), round_nearest) == 3 def test_str_1000_digits(): mp.dps = 1001 # last digit may be wrong assert str(mpf(2)**0.5)[-10:-1] == '9518488472'[:9] assert str(pi)[-10:-1] == '2164201989'[:9] mp.dps = 15 def test_str_10000_digits(): mp.dps = 10001 # last digit may be wrong assert str(mpf(2)**0.5)[-10:-1] == '5873258351'[:9] assert str(pi)[-10:-1] == '5256375678'[:9] mp.dps = 15 def test_monitor(): f = lambda x: x**2 a = [] b = [] g = monitor(f, a.append, b.append) assert g(3) == 9 assert g(4) == 16 assert a[0] == ((3,), {}) assert b[0] == 9 def test_nint_distance(): assert nint_distance(mpf(-3)) == (-3, -inf) assert nint_distance(mpc(-3)) == (-3, -inf) assert nint_distance(mpf(-3.1)) == (-3, -3) assert nint_distance(mpf(-3.01)) == (-3, -6) assert nint_distance(mpf(-3.001)) == (-3, -9) assert nint_distance(mpf(-3.0001)) == (-3, -13) assert nint_distance(mpf(-2.9)) == (-3, -3) assert nint_distance(mpf(-2.99)) == (-3, -6) assert nint_distance(mpf(-2.999)) == (-3, -9) assert nint_distance(mpf(-2.9999)) == (-3, -13) assert nint_distance(mpc(-3+0.1j)) == (-3, -3) assert nint_distance(mpc(-3+0.01j)) == (-3, -6) assert nint_distance(mpc(-3.1+0.1j)) == (-3, -3) assert nint_distance(mpc(-3.01+0.01j)) == (-3, -6) assert nint_distance(mpc(-3.001+0.001j)) == (-3, -9) assert nint_distance(mpf(0)) == (0, -inf) assert nint_distance(mpf(0.01)) == (0, -6) assert nint_distance(mpf('1e-100')) == (0, -332) def test_floor_ceil_nint_frac(): mp.dps = 15 for n in range(-10,10): assert floor(n) == n assert floor(n+0.5) == n assert ceil(n) == n assert ceil(n+0.5) == n+1 assert nint(n) == n # nint rounds to even if n % 2 == 1: assert nint(n+0.5) == n+1 else: assert nint(n+0.5) == n assert floor(inf) == inf assert floor(ninf) == ninf assert isnan(floor(nan)) assert ceil(inf) == inf assert ceil(ninf) == ninf assert isnan(ceil(nan)) assert nint(inf) == inf assert nint(ninf) == ninf assert isnan(nint(nan)) assert floor(0.1) == 0 assert floor(0.9) == 0 assert floor(-0.1) == -1 assert floor(-0.9) == -1 assert floor(10000000000.1) == 10000000000 assert floor(10000000000.9) == 10000000000 assert floor(-10000000000.1) == -10000000000-1 assert floor(-10000000000.9) == -10000000000-1 assert floor(1e-100) == 0 assert floor(-1e-100) == -1 assert floor(1e100) == 1e100 assert floor(-1e100) == -1e100 assert ceil(0.1) == 1 assert ceil(0.9) == 1 assert ceil(-0.1) == 0 assert ceil(-0.9) == 0 assert ceil(10000000000.1) == 10000000000+1 assert ceil(10000000000.9) == 10000000000+1 assert ceil(-10000000000.1) == -10000000000 assert ceil(-10000000000.9) == -10000000000 assert ceil(1e-100) == 1 assert ceil(-1e-100) == 0 assert ceil(1e100) == 1e100 assert ceil(-1e100) == -1e100 assert nint(0.1) == 0 assert nint(0.9) == 1 assert nint(-0.1) == 0 assert nint(-0.9) == -1 assert nint(10000000000.1) == 10000000000 assert nint(10000000000.9) == 10000000000+1 assert nint(-10000000000.1) == -10000000000 assert nint(-10000000000.9) == -10000000000-1 assert nint(1e-100) == 0 assert nint(-1e-100) == 0 assert nint(1e100) == 1e100 assert nint(-1e100) == -1e100 assert floor(3.2+4.6j) == 3+4j assert ceil(3.2+4.6j) == 4+5j assert nint(3.2+4.6j) == 3+5j for n in range(-10,10): assert frac(n) == 0 assert frac(0.25) == 0.25 assert frac(1.25) == 0.25 assert frac(2.25) == 0.25 assert frac(-0.25) == 0.75 assert frac(-1.25) == 0.75 assert frac(-2.25) == 0.75 assert frac('1e100000000000000') == 0 u = mpf('1e-100000000000000') assert frac(u) == u assert frac(-u) == 1 # rounding! u = mpf('1e-400') assert frac(-u, prec=0) == fsub(1, u, exact=True) assert frac(3.25+4.75j) == 0.25+0.75j def test_isnan_etc(): from mpmath.rational import mpq assert isnan(nan) == True assert isnan(3) == False assert isnan(mpf(3)) == False assert isnan(inf) == False assert isnan(mpc(2,nan)) == True assert isnan(mpc(2,nan)) == True assert isnan(mpc(nan,nan)) == True assert isnan(mpc(2,2)) == False assert isnan(mpc(nan,inf)) == True assert isnan(mpc(inf,inf)) == False assert isnan(mpq((3,2))) == False assert isnan(mpq((0,1))) == False assert isinf(inf) == True assert isinf(-inf) == True assert isinf(3) == False assert isinf(nan) == False assert isinf(3+4j) == False assert isinf(mpc(inf)) == True assert isinf(mpc(3,inf)) == True assert isinf(mpc(inf,3)) == True assert isinf(mpc(inf,inf)) == True assert isinf(mpc(nan,inf)) == True assert isinf(mpc(inf,nan)) == True assert isinf(mpc(nan,nan)) == False assert isinf(mpq((3,2))) == False assert isinf(mpq((0,1))) == False assert isnormal(3) == True assert isnormal(3.5) == True assert isnormal(mpf(3.5)) == True assert isnormal(0) == False assert isnormal(mpf(0)) == False assert isnormal(0.0) == False assert isnormal(inf) == False assert isnormal(-inf) == False assert isnormal(nan) == False assert isnormal(float(inf)) == False assert isnormal(mpc(0,0)) == False assert isnormal(mpc(3,0)) == True assert isnormal(mpc(0,3)) == True assert isnormal(mpc(3,3)) == True assert isnormal(mpc(0,nan)) == False assert isnormal(mpc(0,inf)) == False assert isnormal(mpc(3,nan)) == False assert isnormal(mpc(3,inf)) == False assert isnormal(mpc(3,-inf)) == False assert isnormal(mpc(nan,0)) == False assert isnormal(mpc(inf,0)) == False assert isnormal(mpc(nan,3)) == False assert isnormal(mpc(inf,3)) == False assert isnormal(mpc(inf,nan)) == False assert isnormal(mpc(nan,inf)) == False assert isnormal(mpc(nan,nan)) == False assert isnormal(mpc(inf,inf)) == False assert isnormal(mpq((3,2))) == True assert isnormal(mpq((0,1))) == False assert isint(3) == True assert isint(0) == True assert isint(long(3)) == True assert isint(long(0)) == True assert isint(mpf(3)) == True assert isint(mpf(0)) == True assert isint(mpf(-3)) == True assert isint(mpf(3.2)) == False assert isint(3.2) == False assert isint(nan) == False assert isint(inf) == False assert isint(-inf) == False assert isint(mpc(0)) == True assert isint(mpc(3)) == True assert isint(mpc(3.2)) == False assert isint(mpc(3,inf)) == False assert isint(mpc(inf)) == False assert isint(mpc(3,2)) == False assert isint(mpc(0,2)) == False assert isint(mpc(3,2),gaussian=True) == True assert isint(mpc(3,0),gaussian=True) == True assert isint(mpc(0,3),gaussian=True) == True assert isint(3+4j) == False assert isint(3+4j, gaussian=True) == True assert isint(3+0j) == True assert isint(mpq((3,2))) == False assert isint(mpq((3,9))) == False assert isint(mpq((9,3))) == True assert isint(mpq((0,4))) == True assert isint(mpq((1,1))) == True assert isint(mpq((-1,1))) == True assert mp.isnpint(0) == True assert mp.isnpint(1) == False assert mp.isnpint(-1) == True assert mp.isnpint(-1.1) == False assert mp.isnpint(-1.0) == True assert mp.isnpint(mp.mpq(1,2)) == False assert mp.isnpint(mp.mpq(-1,2)) == False assert mp.isnpint(mp.mpq(-3,1)) == True assert mp.isnpint(mp.mpq(0,1)) == True assert mp.isnpint(mp.mpq(1,1)) == False assert mp.isnpint(0+0j) == True assert mp.isnpint(-1+0j) == True assert mp.isnpint(-1.1+0j) == False assert mp.isnpint(-1+0.1j) == False assert mp.isnpint(0+0.1j) == False mpmath-1.0.0/mpmath/tests/test_bitwise.py000066400000000000000000000170061316273626600205250ustar00rootroot00000000000000""" Test bit-level integer and mpf operations """ from mpmath import * from mpmath.libmp import * def test_bitcount(): assert bitcount(0) == 0 assert bitcount(1) == 1 assert bitcount(7) == 3 assert bitcount(8) == 4 assert bitcount(2**100) == 101 assert bitcount(2**100-1) == 100 def test_trailing(): assert trailing(0) == 0 assert trailing(1) == 0 assert trailing(2) == 1 assert trailing(7) == 0 assert trailing(8) == 3 assert trailing(2**100) == 100 assert trailing(2**100-1) == 0 def test_round_down(): assert from_man_exp(0, -4, 4, round_down)[:3] == (0, 0, 0) assert from_man_exp(0xf0, -4, 4, round_down)[:3] == (0, 15, 0) assert from_man_exp(0xf1, -4, 4, round_down)[:3] == (0, 15, 0) assert from_man_exp(0xff, -4, 4, round_down)[:3] == (0, 15, 0) assert from_man_exp(-0xf0, -4, 4, round_down)[:3] == (1, 15, 0) assert from_man_exp(-0xf1, -4, 4, round_down)[:3] == (1, 15, 0) assert from_man_exp(-0xff, -4, 4, round_down)[:3] == (1, 15, 0) def test_round_up(): assert from_man_exp(0, -4, 4, round_up)[:3] == (0, 0, 0) assert from_man_exp(0xf0, -4, 4, round_up)[:3] == (0, 15, 0) assert from_man_exp(0xf1, -4, 4, round_up)[:3] == (0, 1, 4) assert from_man_exp(0xff, -4, 4, round_up)[:3] == (0, 1, 4) assert from_man_exp(-0xf0, -4, 4, round_up)[:3] == (1, 15, 0) assert from_man_exp(-0xf1, -4, 4, round_up)[:3] == (1, 1, 4) assert from_man_exp(-0xff, -4, 4, round_up)[:3] == (1, 1, 4) def test_round_floor(): assert from_man_exp(0, -4, 4, round_floor)[:3] == (0, 0, 0) assert from_man_exp(0xf0, -4, 4, round_floor)[:3] == (0, 15, 0) assert from_man_exp(0xf1, -4, 4, round_floor)[:3] == (0, 15, 0) assert from_man_exp(0xff, -4, 4, round_floor)[:3] == (0, 15, 0) assert from_man_exp(-0xf0, -4, 4, round_floor)[:3] == (1, 15, 0) assert from_man_exp(-0xf1, -4, 4, round_floor)[:3] == (1, 1, 4) assert from_man_exp(-0xff, -4, 4, round_floor)[:3] == (1, 1, 4) def test_round_ceiling(): assert from_man_exp(0, -4, 4, round_ceiling)[:3] == (0, 0, 0) assert from_man_exp(0xf0, -4, 4, round_ceiling)[:3] == (0, 15, 0) assert from_man_exp(0xf1, -4, 4, round_ceiling)[:3] == (0, 1, 4) assert from_man_exp(0xff, -4, 4, round_ceiling)[:3] == (0, 1, 4) assert from_man_exp(-0xf0, -4, 4, round_ceiling)[:3] == (1, 15, 0) assert from_man_exp(-0xf1, -4, 4, round_ceiling)[:3] == (1, 15, 0) assert from_man_exp(-0xff, -4, 4, round_ceiling)[:3] == (1, 15, 0) def test_round_nearest(): assert from_man_exp(0, -4, 4, round_nearest)[:3] == (0, 0, 0) assert from_man_exp(0xf0, -4, 4, round_nearest)[:3] == (0, 15, 0) assert from_man_exp(0xf7, -4, 4, round_nearest)[:3] == (0, 15, 0) assert from_man_exp(0xf8, -4, 4, round_nearest)[:3] == (0, 1, 4) # 1111.1000 -> 10000.0 assert from_man_exp(0xf9, -4, 4, round_nearest)[:3] == (0, 1, 4) # 1111.1001 -> 10000.0 assert from_man_exp(0xe8, -4, 4, round_nearest)[:3] == (0, 7, 1) # 1110.1000 -> 1110.0 assert from_man_exp(0xe9, -4, 4, round_nearest)[:3] == (0, 15, 0) # 1110.1001 -> 1111.0 assert from_man_exp(-0xf0, -4, 4, round_nearest)[:3] == (1, 15, 0) assert from_man_exp(-0xf7, -4, 4, round_nearest)[:3] == (1, 15, 0) assert from_man_exp(-0xf8, -4, 4, round_nearest)[:3] == (1, 1, 4) assert from_man_exp(-0xf9, -4, 4, round_nearest)[:3] == (1, 1, 4) assert from_man_exp(-0xe8, -4, 4, round_nearest)[:3] == (1, 7, 1) assert from_man_exp(-0xe9, -4, 4, round_nearest)[:3] == (1, 15, 0) def test_rounding_bugs(): # 1 less than power-of-two cases assert from_man_exp(72057594037927935, -56, 53, round_up) == (0, 1, 0, 1) assert from_man_exp(73786976294838205979, -65, 53, round_nearest) == (0, 1, 1, 1) assert from_man_exp(31, 0, 4, round_up) == (0, 1, 5, 1) assert from_man_exp(-31, 0, 4, round_floor) == (1, 1, 5, 1) assert from_man_exp(255, 0, 7, round_up) == (0, 1, 8, 1) assert from_man_exp(-255, 0, 7, round_floor) == (1, 1, 8, 1) def test_rounding_issue_200(): a = from_man_exp(9867,-100) b = from_man_exp(9867,-200) c = from_man_exp(-1,0) z = (1, 1023, -10, 10) assert mpf_add(a, c, 10, 'd') == z assert mpf_add(b, c, 10, 'd') == z assert mpf_add(c, a, 10, 'd') == z assert mpf_add(c, b, 10, 'd') == z def test_perturb(): a = fone b = from_float(0.99999999999999989) c = from_float(1.0000000000000002) assert mpf_perturb(a, 0, 53, round_nearest) == a assert mpf_perturb(a, 1, 53, round_nearest) == a assert mpf_perturb(a, 0, 53, round_up) == c assert mpf_perturb(a, 0, 53, round_ceiling) == c assert mpf_perturb(a, 0, 53, round_down) == a assert mpf_perturb(a, 0, 53, round_floor) == a assert mpf_perturb(a, 1, 53, round_up) == a assert mpf_perturb(a, 1, 53, round_ceiling) == a assert mpf_perturb(a, 1, 53, round_down) == b assert mpf_perturb(a, 1, 53, round_floor) == b a = mpf_neg(a) b = mpf_neg(b) c = mpf_neg(c) assert mpf_perturb(a, 0, 53, round_nearest) == a assert mpf_perturb(a, 1, 53, round_nearest) == a assert mpf_perturb(a, 0, 53, round_up) == a assert mpf_perturb(a, 0, 53, round_floor) == a assert mpf_perturb(a, 0, 53, round_down) == b assert mpf_perturb(a, 0, 53, round_ceiling) == b assert mpf_perturb(a, 1, 53, round_up) == c assert mpf_perturb(a, 1, 53, round_floor) == c assert mpf_perturb(a, 1, 53, round_down) == a assert mpf_perturb(a, 1, 53, round_ceiling) == a def test_add_exact(): ff = from_float assert mpf_add(ff(3.0), ff(2.5)) == ff(5.5) assert mpf_add(ff(3.0), ff(-2.5)) == ff(0.5) assert mpf_add(ff(-3.0), ff(2.5)) == ff(-0.5) assert mpf_add(ff(-3.0), ff(-2.5)) == ff(-5.5) assert mpf_sub(mpf_add(fone, ff(1e-100)), fone) == ff(1e-100) assert mpf_sub(mpf_add(ff(1e-100), fone), fone) == ff(1e-100) assert mpf_sub(mpf_add(fone, ff(-1e-100)), fone) == ff(-1e-100) assert mpf_sub(mpf_add(ff(-1e-100), fone), fone) == ff(-1e-100) assert mpf_add(fone, fzero) == fone assert mpf_add(fzero, fone) == fone assert mpf_add(fzero, fzero) == fzero def test_long_exponent_shifts(): mp.dps = 15 # Check for possible bugs due to exponent arithmetic overflow # in a C implementation x = mpf(1) for p in [32, 64]: a = ldexp(1,2**(p-1)) b = ldexp(1,2**p) c = ldexp(1,2**(p+1)) d = ldexp(1,-2**(p-1)) e = ldexp(1,-2**p) f = ldexp(1,-2**(p+1)) assert (x+a) == a assert (x+b) == b assert (x+c) == c assert (x+d) == x assert (x+e) == x assert (x+f) == x assert (a+x) == a assert (b+x) == b assert (c+x) == c assert (d+x) == x assert (e+x) == x assert (f+x) == x assert (x-a) == -a assert (x-b) == -b assert (x-c) == -c assert (x-d) == x assert (x-e) == x assert (x-f) == x assert (a-x) == a assert (b-x) == b assert (c-x) == c assert (d-x) == -x assert (e-x) == -x assert (f-x) == -x def test_float_rounding(): mp.prec = 64 for x in [mpf(1), mpf(1)+eps, mpf(1)-eps, -mpf(1)+eps, -mpf(1)-eps]: fa = float(x) fb = float(fadd(x,0,prec=53,rounding='n')) assert fa == fb z = mpc(x,x) ca = complex(z) cb = complex(fadd(z,0,prec=53,rounding='n')) assert ca == cb for rnd in ['n', 'd', 'u', 'f', 'c']: fa = to_float(x._mpf_, rnd=rnd) fb = to_float(fadd(x,0,prec=53,rounding=rnd)._mpf_, rnd=rnd) assert fa == fb mp.prec = 53 mpmath-1.0.0/mpmath/tests/test_calculus.py000066400000000000000000000217521316273626600206750ustar00rootroot00000000000000from mpmath import * def test_approximation(): mp.dps = 15 f = lambda x: cos(2-2*x)/x p, err = chebyfit(f, [2, 4], 8, error=True) assert err < 1e-5 for i in range(10): x = 2 + i/5. assert abs(polyval(p, x) - f(x)) < err def test_limits(): mp.dps = 15 assert limit(lambda x: (x-sin(x))/x**3, 0).ae(mpf(1)/6) assert limit(lambda n: (1+1/n)**n, inf).ae(e) def test_polyval(): assert polyval([], 3) == 0 assert polyval([0], 3) == 0 assert polyval([5], 3) == 5 # 4x^3 - 2x + 5 p = [4, 0, -2, 5] assert polyval(p,4) == 253 assert polyval(p,4,derivative=True) == (253, 190) def test_polyroots(): p = polyroots([1,-4]) assert p[0].ae(4) p, q = polyroots([1,2,3]) assert p.ae(-1 - sqrt(2)*j) assert q.ae(-1 + sqrt(2)*j) #this is not a real test, it only tests a specific case assert polyroots([1]) == [] try: polyroots([0]) assert False except ValueError: pass def test_polyroots_legendre(): n = 64 coeffs = [11975573020964041433067793888190275875, 0, -190100434726484311252477736051902332000, 0, 1437919688271127330313741595496589239248, 0, -6897338342113537600691931230430793911840, 0, 23556405536185284408974715545252277554280, 0, -60969520211303089058522793175947071316960, 0, 124284021969194758465450309166353645376880, 0, -204721258548015217049921875719981284186016, 0, 277415422258095841688223780704620656114900, 0, -313237834141273382807123548182995095192800, 0, 297432255354328395601259515935229287637200, 0, -239057700565161140389797367947941296605600, 0, 163356095386193445933028201431093219347160, 0, -95158890516229191805647495979277603503200, 0, 47310254620162038075933656063247634556400, 0, -20071017111583894941305187420771723751200, 0, 7255051932731034189479516844750603752850, 0, -2228176940331017311443863996901733412640, 0, 579006552594977616773047095969088431600, 0, -126584428502545713788439446082310831200, 0, 23112325428835593809686977515028663000, 0, -3491517141958743235617737161547844000, 0, 431305058712550634988073414073557200, 0, -42927166660756742088912492757452000, 0, 3378527005707706553294038781836500, 0, -205277590220215081719131470288800, 0, 9330799555464321896324157740400, 0, -304114948474392713657972548576, 0, 6695289961520387531608984680, 0, -91048139350447232095702560, 0, 659769125727878493447120, 0, -1905929106580294155360, 0, 916312070471295267] with mp.workdps(3): try: roots = polyroots(coeffs, maxsteps=5, cleanup=True, error=False, extraprec=n*10) raise AssertionError("polyroots() didn't raise NoConvergence") except (mp.NoConvergence): pass roots = polyroots(coeffs, maxsteps=50, cleanup=True, error=False, extraprec=n*10) roots = [str(r) for r in roots] assert roots == \ ['-0.999', '-0.996', '-0.991', '-0.983', '-0.973', '-0.961', '-0.946', '-0.93', '-0.911', '-0.889', '-0.866', '-0.841', '-0.813', '-0.784', '-0.753', '-0.72', '-0.685', '-0.649', '-0.611', '-0.572', '-0.531', '-0.489', '-0.446', '-0.402', '-0.357', '-0.311', '-0.265', '-0.217', '-0.17', '-0.121', '-0.073', '-0.0243', '0.0243', '0.073', '0.121', '0.17', '0.217', '0.265', '0.311', '0.357', '0.402', '0.446', '0.489', '0.531', '0.572', '0.611', '0.649', '0.685', '0.72', '0.753', '0.784', '0.813', '0.841', '0.866', '0.889', '0.911', '0.93', '0.946', '0.961', '0.973', '0.983', '0.991', '0.996', '0.999'] def test_polyroots_legendre_init(): extra_prec = 100 coeffs = [11975573020964041433067793888190275875, 0, -190100434726484311252477736051902332000, 0, 1437919688271127330313741595496589239248, 0, -6897338342113537600691931230430793911840, 0, 23556405536185284408974715545252277554280, 0, -60969520211303089058522793175947071316960, 0, 124284021969194758465450309166353645376880, 0, -204721258548015217049921875719981284186016, 0, 277415422258095841688223780704620656114900, 0, -313237834141273382807123548182995095192800, 0, 297432255354328395601259515935229287637200, 0, -239057700565161140389797367947941296605600, 0, 163356095386193445933028201431093219347160, 0, -95158890516229191805647495979277603503200, 0, 47310254620162038075933656063247634556400, 0, -20071017111583894941305187420771723751200, 0, 7255051932731034189479516844750603752850, 0, -2228176940331017311443863996901733412640, 0, 579006552594977616773047095969088431600, 0, -126584428502545713788439446082310831200, 0, 23112325428835593809686977515028663000, 0, -3491517141958743235617737161547844000, 0, 431305058712550634988073414073557200, 0, -42927166660756742088912492757452000, 0, 3378527005707706553294038781836500, 0, -205277590220215081719131470288800, 0, 9330799555464321896324157740400, 0, -304114948474392713657972548576, 0, 6695289961520387531608984680, 0, -91048139350447232095702560, 0, 659769125727878493447120, 0, -1905929106580294155360, 0, 916312070471295267] roots_init = matrix(['-0.999', '-0.996', '-0.991', '-0.983', '-0.973', '-0.961', '-0.946', '-0.93', '-0.911', '-0.889', '-0.866', '-0.841', '-0.813', '-0.784', '-0.753', '-0.72', '-0.685', '-0.649', '-0.611', '-0.572', '-0.531', '-0.489', '-0.446', '-0.402', '-0.357', '-0.311', '-0.265', '-0.217', '-0.17', '-0.121', '-0.073', '-0.0243', '0.0243', '0.073', '0.121', '0.17', '0.217', '0.265', ' 0.311', '0.357', '0.402', '0.446', '0.489', '0.531', '0.572', '0.611', '0.649', '0.685', '0.72', '0.753', '0.784', '0.813', '0.841', '0.866', '0.889', '0.911', '0.93', '0.946', '0.961', '0.973', '0.983', '0.991', '0.996', '0.999', '1.0']) with mp.workdps(2*mp.dps): roots_exact = polyroots(coeffs, maxsteps=50, cleanup=True, error=False, extraprec=2*extra_prec) try: roots = polyroots(coeffs, maxsteps=5, cleanup=True, error=False, extraprec=extra_prec) raise AssertionError("polyroots() didn't raise NoConvergence") except (mp.NoConvergence): pass roots,err = polyroots(coeffs, maxsteps=5, cleanup=True, error=True, extraprec=extra_prec,roots_init=roots_init) assert max(matrix(roots_exact)-matrix(roots).apply(abs)) < err roots1,err1 = polyroots(coeffs, maxsteps=25, cleanup=True, error=True, extraprec=extra_prec,roots_init=roots_init[:60]) assert max(matrix(roots_exact)-matrix(roots1).apply(abs)) < err1 def test_pade(): one = mpf(1) mp.dps = 20 N = 10 a = [one] k = 1 for i in range(1, N+1): k *= i a.append(one/k) p, q = pade(a, N//2, N//2) for x in arange(0, 1, 0.1): r = polyval(p[::-1], x)/polyval(q[::-1], x) assert(r.ae(exp(x), 1.0e-10)) mp.dps = 15 def test_fourier(): mp.dps = 15 c, s = fourier(lambda x: x+1, [-1, 2], 2) #plot([lambda x: x+1, lambda x: fourierval((c, s), [-1, 2], x)], [-1, 2]) assert c[0].ae(1.5) assert c[1].ae(-3*sqrt(3)/(2*pi)) assert c[2].ae(3*sqrt(3)/(4*pi)) assert s[0] == 0 assert s[1].ae(3/(2*pi)) assert s[2].ae(3/(4*pi)) assert fourierval((c, s), [-1, 2], 1).ae(1.9134966715663442) def test_differint(): mp.dps = 15 assert differint(lambda t: t, 2, -0.5).ae(8*sqrt(2/pi)/3) def test_invlap(): mp.dps = 15 t = 0.01 fp = lambda p: 1/(p+1)**2 ft = lambda t: t*exp(-t) ftt = ft(t) assert invertlaplace(fp,t,method='talbot').ae(ftt) assert invertlaplace(fp,t,method='stehfest').ae(ftt) assert invertlaplace(fp,t,method='dehoog').ae(ftt) t = 1.0 ftt = ft(t) assert invertlaplace(fp,t,method='talbot').ae(ftt) assert invertlaplace(fp,t,method='stehfest').ae(ftt) assert invertlaplace(fp,t,method='dehoog').ae(ftt) t = 0.01 fp = lambda p: log(p)/p ft = lambda t: -euler-log(t) ftt = ft(t) assert invertlaplace(fp,t,method='talbot').ae(ftt) assert invertlaplace(fp,t,method='stehfest').ae(ftt) assert invertlaplace(fp,t,method='dehoog').ae(ftt) t = 1.0 ftt = ft(t) assert invertlaplace(fp,t,method='talbot').ae(ftt) assert invertlaplace(fp,t,method='stehfest').ae(ftt) assert invertlaplace(fp,t,method='dehoog').ae(ftt) mpmath-1.0.0/mpmath/tests/test_compatibility.py000066400000000000000000000044021316273626600217240ustar00rootroot00000000000000from mpmath import * from random import seed, randint, random import math # Test compatibility with Python floats, which are # IEEE doubles (53-bit) N = 5000 seed(1) # Choosing exponents between roughly -140, 140 ensures that # the Python floats don't overflow or underflow xs = [(random()-1) * 10**randint(-140, 140) for x in range(N)] ys = [(random()-1) * 10**randint(-140, 140) for x in range(N)] # include some equal values ys[int(N*0.8):] = xs[int(N*0.8):] # Detect whether Python is compiled to use 80-bit floating-point # instructions, in which case the double compatibility test breaks uses_x87 = -4.1974624032366689e+117 / -8.4657370748010221e-47 \ == 4.9581771393902231e+163 def test_double_compatibility(): mp.prec = 53 for x, y in zip(xs, ys): mpx = mpf(x) mpy = mpf(y) assert mpf(x) == x assert (mpx < mpy) == (x < y) assert (mpx > mpy) == (x > y) assert (mpx == mpy) == (x == y) assert (mpx != mpy) == (x != y) assert (mpx <= mpy) == (x <= y) assert (mpx >= mpy) == (x >= y) assert mpx == mpx if uses_x87: mp.prec = 64 a = mpx + mpy b = mpx * mpy c = mpx / mpy d = mpx % mpy mp.prec = 53 assert +a == x + y assert +b == x * y assert +c == x / y assert +d == x % y else: assert mpx + mpy == x + y assert mpx * mpy == x * y assert mpx / mpy == x / y assert mpx % mpy == x % y assert abs(mpx) == abs(x) assert mpf(repr(x)) == x assert ceil(mpx) == math.ceil(x) assert floor(mpx) == math.floor(x) def test_sqrt(): # this fails quite often. it appers to be float # that rounds the wrong way, not mpf fail = 0 mp.prec = 53 for x in xs: x = abs(x) mp.prec = 100 mp_high = mpf(x)**0.5 mp.prec = 53 mp_low = mpf(x)**0.5 fp = x**0.5 assert abs(mp_low-mp_high) <= abs(fp-mp_high) fail += mp_low != fp assert fail < N/10 def test_bugs(): # particular bugs assert mpf(4.4408920985006262E-16) < mpf(1.7763568394002505E-15) assert mpf(-4.4408920985006262E-16) > mpf(-1.7763568394002505E-15) mpmath-1.0.0/mpmath/tests/test_convert.py000066400000000000000000000162701316273626600205410ustar00rootroot00000000000000import random from mpmath import * from mpmath.libmp import * def test_basic_string(): """ Test basic string conversion """ mp.dps = 15 assert mpf('3') == mpf('3.0') == mpf('0003.') == mpf('0.03e2') == mpf(3.0) assert mpf('30') == mpf('30.0') == mpf('00030.') == mpf(30.0) for i in range(10): for j in range(10): assert mpf('%ie%i' % (i,j)) == i * 10**j assert str(mpf('25000.0')) == '25000.0' assert str(mpf('2500.0')) == '2500.0' assert str(mpf('250.0')) == '250.0' assert str(mpf('25.0')) == '25.0' assert str(mpf('2.5')) == '2.5' assert str(mpf('0.25')) == '0.25' assert str(mpf('0.025')) == '0.025' assert str(mpf('0.0025')) == '0.0025' assert str(mpf('0.00025')) == '0.00025' assert str(mpf('0.000025')) == '2.5e-5' assert str(mpf(0)) == '0.0' assert str(mpf('2.5e1000000000000000000000')) == '2.5e+1000000000000000000000' assert str(mpf('2.6e-1000000000000000000000')) == '2.6e-1000000000000000000000' assert str(mpf(1.23402834e-15)) == '1.23402834e-15' assert str(mpf(-1.23402834e-15)) == '-1.23402834e-15' assert str(mpf(-1.2344e-15)) == '-1.2344e-15' assert repr(mpf(-1.2344e-15)) == "mpf('-1.2343999999999999e-15')" def test_pretty(): mp.pretty = True assert repr(mpf(2.5)) == '2.5' assert repr(mpc(2.5,3.5)) == '(2.5 + 3.5j)' mp.pretty = False iv.pretty = True assert repr(mpi(2.5,3.5)) == '[2.5, 3.5]' iv.pretty = False def test_str_whitespace(): assert mpf('1.26 ') == 1.26 def test_unicode(): mp.dps = 15 try: unicode = unicode except NameError: unicode = str assert mpf(unicode('2.76')) == 2.76 assert mpf(unicode('inf')) == inf def test_str_format(): assert to_str(from_float(0.1),15,strip_zeros=False) == '0.100000000000000' assert to_str(from_float(0.0),15,show_zero_exponent=True) == '0.0e+0' assert to_str(from_float(0.0),0,show_zero_exponent=True) == '.0e+0' assert to_str(from_float(0.0),0,show_zero_exponent=False) == '.0' assert to_str(from_float(0.0),1,show_zero_exponent=True) == '0.0e+0' assert to_str(from_float(0.0),1,show_zero_exponent=False) == '0.0' assert to_str(from_float(1.23),3,show_zero_exponent=True) == '1.23e+0' assert to_str(from_float(1.23456789000000e-2),15,strip_zeros=False,min_fixed=0,max_fixed=0) == '1.23456789000000e-2' assert to_str(from_float(1.23456789000000e+2),15,strip_zeros=False,min_fixed=0,max_fixed=0) == '1.23456789000000e+2' assert to_str(from_float(2.1287e14), 15, max_fixed=1000) == '212870000000000.0' assert to_str(from_float(2.1287e15), 15, max_fixed=1000) == '2128700000000000.0' assert to_str(from_float(2.1287e16), 15, max_fixed=1000) == '21287000000000000.0' assert to_str(from_float(2.1287e30), 15, max_fixed=1000) == '2128700000000000000000000000000.0' def test_tight_string_conversion(): mp.dps = 15 # In an old version, '0.5' wasn't recognized as representing # an exact binary number and was erroneously rounded up or down assert from_str('0.5', 10, round_floor) == fhalf assert from_str('0.5', 10, round_ceiling) == fhalf def test_eval_repr_invariant(): """Test that eval(repr(x)) == x""" random.seed(123) for dps in [10, 15, 20, 50, 100]: mp.dps = dps for i in range(1000): a = mpf(random.random())**0.5 * 10**random.randint(-100, 100) assert eval(repr(a)) == a mp.dps = 15 def test_str_bugs(): mp.dps = 15 # Decimal rounding used to give the wrong exponent in some cases assert str(mpf('1e600')) == '1.0e+600' assert str(mpf('1e10000')) == '1.0e+10000' def test_str_prec0(): assert to_str(from_float(1.234), 0) == '.0e+0' assert to_str(from_float(1e-15), 0) == '.0e-15' assert to_str(from_float(1e+15), 0) == '.0e+15' assert to_str(from_float(-1e-15), 0) == '-.0e-15' assert to_str(from_float(-1e+15), 0) == '-.0e+15' def test_convert_rational(): mp.dps = 15 assert from_rational(30, 5, 53, round_nearest) == (0, 3, 1, 2) assert from_rational(-7, 4, 53, round_nearest) == (1, 7, -2, 3) assert to_rational((0, 1, -1, 1)) == (1, 2) def test_custom_class(): class mympf: @property def _mpf_(self): return mpf(3.5)._mpf_ class mympc: @property def _mpc_(self): return mpf(3.5)._mpf_, mpf(2.5)._mpf_ assert mpf(2) + mympf() == 5.5 assert mympf() + mpf(2) == 5.5 assert mpf(mympf()) == 3.5 assert mympc() + mpc(2) == mpc(5.5, 2.5) assert mpc(2) + mympc() == mpc(5.5, 2.5) assert mpc(mympc()) == (3.5+2.5j) def test_conversion_methods(): class SomethingRandom: pass class SomethingReal: def _mpmath_(self, prec, rounding): return mp.make_mpf(from_str('1.3', prec, rounding)) class SomethingComplex: def _mpmath_(self, prec, rounding): return mp.make_mpc((from_str('1.3', prec, rounding), \ from_str('1.7', prec, rounding))) x = mpf(3) z = mpc(3) a = SomethingRandom() y = SomethingReal() w = SomethingComplex() for d in [15, 45]: mp.dps = d assert (x+y).ae(mpf('4.3')) assert (y+x).ae(mpf('4.3')) assert (x+w).ae(mpc('4.3', '1.7')) assert (w+x).ae(mpc('4.3', '1.7')) assert (z+y).ae(mpc('4.3')) assert (y+z).ae(mpc('4.3')) assert (z+w).ae(mpc('4.3', '1.7')) assert (w+z).ae(mpc('4.3', '1.7')) x-y; y-x; x-w; w-x; z-y; y-z; z-w; w-z x*y; y*x; x*w; w*x; z*y; y*z; z*w; w*z x/y; y/x; x/w; w/x; z/y; y/z; z/w; w/z x**y; y**x; x**w; w**x; z**y; y**z; z**w; w**z x==y; y==x; x==w; w==x; z==y; y==z; z==w; w==z mp.dps = 15 assert x.__add__(a) is NotImplemented assert x.__radd__(a) is NotImplemented assert x.__lt__(a) is NotImplemented assert x.__gt__(a) is NotImplemented assert x.__le__(a) is NotImplemented assert x.__ge__(a) is NotImplemented assert x.__eq__(a) is NotImplemented assert x.__ne__(a) is NotImplemented # implementation detail if hasattr(x, "__cmp__"): assert x.__cmp__(a) is NotImplemented assert x.__sub__(a) is NotImplemented assert x.__rsub__(a) is NotImplemented assert x.__mul__(a) is NotImplemented assert x.__rmul__(a) is NotImplemented assert x.__div__(a) is NotImplemented assert x.__rdiv__(a) is NotImplemented assert x.__mod__(a) is NotImplemented assert x.__rmod__(a) is NotImplemented assert x.__pow__(a) is NotImplemented assert x.__rpow__(a) is NotImplemented assert z.__add__(a) is NotImplemented assert z.__radd__(a) is NotImplemented assert z.__eq__(a) is NotImplemented assert z.__ne__(a) is NotImplemented assert z.__sub__(a) is NotImplemented assert z.__rsub__(a) is NotImplemented assert z.__mul__(a) is NotImplemented assert z.__rmul__(a) is NotImplemented assert z.__div__(a) is NotImplemented assert z.__rdiv__(a) is NotImplemented assert z.__pow__(a) is NotImplemented assert z.__rpow__(a) is NotImplemented def test_mpmathify(): assert mpmathify('1/2') == 0.5 assert mpmathify('(1.0+1.0j)') == mpc(1, 1) assert mpmathify('(1.2e-10 - 3.4e5j)') == mpc('1.2e-10', '-3.4e5') assert mpmathify('1j') == mpc(1j) mpmath-1.0.0/mpmath/tests/test_diff.py000066400000000000000000000046421316273626600177710ustar00rootroot00000000000000from mpmath import * def test_diff(): mp.dps = 15 assert diff(log, 2.0, n=0).ae(log(2)) assert diff(cos, 1.0).ae(-sin(1)) assert diff(abs, 0.0) == 0 assert diff(abs, 0.0, direction=1) == 1 assert diff(abs, 0.0, direction=-1) == -1 assert diff(exp, 1.0).ae(e) assert diff(exp, 1.0, n=5).ae(e) assert diff(exp, 2.0, n=5, direction=3*j).ae(e**2) assert diff(lambda x: x**2, 3.0, method='quad').ae(6) assert diff(lambda x: 3+x**5, 3.0, n=2, method='quad').ae(540) assert diff(lambda x: 3+x**5, 3.0, n=2, method='step').ae(540) assert diffun(sin)(2).ae(cos(2)) assert diffun(sin, n=2)(2).ae(-sin(2)) def test_diffs(): mp.dps = 15 assert [chop(d) for d in diffs(sin, 0, 1)] == [0, 1] assert [chop(d) for d in diffs(sin, 0, 1, method='quad')] == [0, 1] assert [chop(d) for d in diffs(sin, 0, 2)] == [0, 1, 0] assert [chop(d) for d in diffs(sin, 0, 2, method='quad')] == [0, 1, 0] def test_taylor(): mp.dps = 15 # Easy to test since the coefficients are exact in floating-point assert taylor(sqrt, 1, 4) == [1, 0.5, -0.125, 0.0625, -0.0390625] def test_diff_partial(): mp.dps = 15 x,y,z = xyz = 2,3,7 f = lambda x,y,z: 3*x**2 * (y+2)**3 * z**5 assert diff(f, xyz, (0,0,0)).ae(25210500) assert diff(f, xyz, (0,0,1)).ae(18007500) assert diff(f, xyz, (0,0,2)).ae(10290000) assert diff(f, xyz, (0,1,0)).ae(15126300) assert diff(f, xyz, (0,1,1)).ae(10804500) assert diff(f, xyz, (0,1,2)).ae(6174000) assert diff(f, xyz, (0,2,0)).ae(6050520) assert diff(f, xyz, (0,2,1)).ae(4321800) assert diff(f, xyz, (0,2,2)).ae(2469600) assert diff(f, xyz, (1,0,0)).ae(25210500) assert diff(f, xyz, (1,0,1)).ae(18007500) assert diff(f, xyz, (1,0,2)).ae(10290000) assert diff(f, xyz, (1,1,0)).ae(15126300) assert diff(f, xyz, (1,1,1)).ae(10804500) assert diff(f, xyz, (1,1,2)).ae(6174000) assert diff(f, xyz, (1,2,0)).ae(6050520) assert diff(f, xyz, (1,2,1)).ae(4321800) assert diff(f, xyz, (1,2,2)).ae(2469600) assert diff(f, xyz, (2,0,0)).ae(12605250) assert diff(f, xyz, (2,0,1)).ae(9003750) assert diff(f, xyz, (2,0,2)).ae(5145000) assert diff(f, xyz, (2,1,0)).ae(7563150) assert diff(f, xyz, (2,1,1)).ae(5402250) assert diff(f, xyz, (2,1,2)).ae(3087000) assert diff(f, xyz, (2,2,0)).ae(3025260) assert diff(f, xyz, (2,2,1)).ae(2160900) assert diff(f, xyz, (2,2,2)).ae(1234800) mpmath-1.0.0/mpmath/tests/test_division.py000066400000000000000000000123341316273626600207020ustar00rootroot00000000000000from mpmath.libmp import * from mpmath import mpf, mp from random import randint, choice, seed all_modes = [round_floor, round_ceiling, round_down, round_up, round_nearest] fb = from_bstr fi = from_int ff = from_float def test_div_1_3(): a = fi(1) b = fi(3) c = fi(-1) # floor rounds down, ceiling rounds up assert mpf_div(a, b, 7, round_floor) == fb('0.01010101') assert mpf_div(a, b, 7, round_ceiling) == fb('0.01010110') assert mpf_div(a, b, 7, round_down) == fb('0.01010101') assert mpf_div(a, b, 7, round_up) == fb('0.01010110') assert mpf_div(a, b, 7, round_nearest) == fb('0.01010101') # floor rounds up, ceiling rounds down assert mpf_div(c, b, 7, round_floor) == fb('-0.01010110') assert mpf_div(c, b, 7, round_ceiling) == fb('-0.01010101') assert mpf_div(c, b, 7, round_down) == fb('-0.01010101') assert mpf_div(c, b, 7, round_up) == fb('-0.01010110') assert mpf_div(c, b, 7, round_nearest) == fb('-0.01010101') def test_mpf_divi_1_3(): a = 1 b = fi(3) c = -1 assert mpf_rdiv_int(a, b, 7, round_floor) == fb('0.01010101') assert mpf_rdiv_int(a, b, 7, round_ceiling) == fb('0.01010110') assert mpf_rdiv_int(a, b, 7, round_down) == fb('0.01010101') assert mpf_rdiv_int(a, b, 7, round_up) == fb('0.01010110') assert mpf_rdiv_int(a, b, 7, round_nearest) == fb('0.01010101') assert mpf_rdiv_int(c, b, 7, round_floor) == fb('-0.01010110') assert mpf_rdiv_int(c, b, 7, round_ceiling) == fb('-0.01010101') assert mpf_rdiv_int(c, b, 7, round_down) == fb('-0.01010101') assert mpf_rdiv_int(c, b, 7, round_up) == fb('-0.01010110') assert mpf_rdiv_int(c, b, 7, round_nearest) == fb('-0.01010101') def test_div_300(): q = fi(1000000) a = fi(300499999) # a/q is a little less than a half-integer b = fi(300500000) # b/q exactly a half-integer c = fi(300500001) # c/q is a little more than a half-integer # Check nearest integer rounding (prec=9 as 2**8 < 300 < 2**9) assert mpf_div(a, q, 9, round_down) == fi(300) assert mpf_div(b, q, 9, round_down) == fi(300) assert mpf_div(c, q, 9, round_down) == fi(300) assert mpf_div(a, q, 9, round_up) == fi(301) assert mpf_div(b, q, 9, round_up) == fi(301) assert mpf_div(c, q, 9, round_up) == fi(301) # Nearest even integer is down assert mpf_div(a, q, 9, round_nearest) == fi(300) assert mpf_div(b, q, 9, round_nearest) == fi(300) assert mpf_div(c, q, 9, round_nearest) == fi(301) # Nearest even integer is up a = fi(301499999) b = fi(301500000) c = fi(301500001) assert mpf_div(a, q, 9, round_nearest) == fi(301) assert mpf_div(b, q, 9, round_nearest) == fi(302) assert mpf_div(c, q, 9, round_nearest) == fi(302) def test_tight_integer_division(): # Test that integer division at tightest possible precision is exact N = 100 seed(1) for i in range(N): a = choice([1, -1]) * randint(1, 1< 1: print("original matrix (hessenberg):\n", A) n = A.rows Q, H = mp.hessenberg(A) if verbose > 1: print("Q:\n",Q) print("H:\n",H) B = Q * H * Q.transpose_conj() eps = mp.exp(0.8 * mp.log(mp.eps)) err0 = 0 for x in xrange(n): for y in xrange(n): err0 += abs(A[y,x] - B[y,x]) err0 /= n * n err1 = 0 for x in xrange(n): for y in xrange(x + 2, n): err1 += abs(H[y,x]) if verbose > 0: print("difference (H):", err0, err1) if verbose > 1: print("B:\n", B) assert err0 < eps assert err1 == 0 def run_schur(A, verbose = 0): if verbose > 1: print("original matrix (schur):\n", A) n = A.rows Q, R = mp.schur(A) if verbose > 1: print("Q:\n", Q) print("R:\n", R) B = Q * R * Q.transpose_conj() C = Q * Q.transpose_conj() eps = mp.exp(0.8 * mp.log(mp.eps)) err0 = 0 for x in xrange(n): for y in xrange(n): err0 += abs(A[y,x] - B[y,x]) err0 /= n * n err1 = 0 for x in xrange(n): for y in xrange(n): if x == y: C[y,x] -= 1 err1 += abs(C[y,x]) err1 /= n * n err2 = 0 for x in xrange(n): for y in xrange(x + 1, n): err2 += abs(R[y,x]) if verbose > 0: print("difference (S):", err0, err1, err2) if verbose > 1: print("B:\n", B) assert err0 < eps assert err1 < eps assert err2 == 0 def run_eig(A, verbose = 0): if verbose > 1: print("original matrix (eig):\n", A) n = A.rows E, EL, ER = mp.eig(A, left = True, right = True) if verbose > 1: print("E:\n", E) print("EL:\n", EL) print("ER:\n", ER) eps = mp.exp(0.8 * mp.log(mp.eps)) err0 = 0 for i in xrange(n): B = A * ER[:,i] - E[i] * ER[:,i] err0 = max(err0, mp.mnorm(B)) B = EL[i,:] * A - EL[i,:] * E[i] err0 = max(err0, mp.mnorm(B)) err0 /= n * n if verbose > 0: print("difference (E):", err0) assert err0 < eps ##################### def test_eig_dyn(): v = 0 for i in xrange(5): n = 1 + int(mp.rand() * 5) if mp.rand() > 0.5: # real A = 2 * mp.randmatrix(n, n) - 1 if mp.rand() > 0.5: A *= 10 for x in xrange(n): for y in xrange(n): A[x,y] = int(A[x,y]) else: A = (2 * mp.randmatrix(n, n) - 1) + 1j * (2 * mp.randmatrix(n, n) - 1) if mp.rand() > 0.5: A *= 10 for x in xrange(n): for y in xrange(n): A[x,y] = int(mp.re(A[x,y])) + 1j * int(mp.im(A[x,y])) run_hessenberg(A, verbose = v) run_schur(A, verbose = v) run_eig(A, verbose = v) def test_eig(): v = 0 AS = [] A = mp.matrix([[2, 1, 0], # jordan block of size 3 [0, 2, 1], [0, 0, 2]]) AS.append(A) AS.append(A.transpose()) A = mp.matrix([[2, 0, 0], # jordan block of size 2 [0, 2, 1], [0, 0, 2]]) AS.append(A) AS.append(A.transpose()) A = mp.matrix([[2, 0, 1], # jordan block of size 2 [0, 2, 0], [0, 0, 2]]) AS.append(A) AS.append(A.transpose()) A= mp.matrix([[0, 0, 1], # cyclic [1, 0, 0], [0, 1, 0]]) AS.append(A) AS.append(A.transpose()) for A in AS: run_hessenberg(A, verbose = v) run_schur(A, verbose = v) run_eig(A, verbose = v) mpmath-1.0.0/mpmath/tests/test_eigen_symmetric.py000066400000000000000000000211121316273626600222330ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from mpmath import mp from mpmath import libmp xrange = libmp.backend.xrange def run_eigsy(A, verbose = False): if verbose: print("original matrix:\n", str(A)) D, Q = mp.eigsy(A) B = Q * mp.diag(D) * Q.transpose() C = A - B E = Q * Q.transpose() - mp.eye(A.rows) if verbose: print("eigenvalues:\n", D) print("eigenvectors:\n", Q) NC = mp.mnorm(C) NE = mp.mnorm(E) if verbose: print("difference:", NC, "\n", C, "\n") print("difference:", NE, "\n", E, "\n") eps = mp.exp( 0.8 * mp.log(mp.eps)) assert NC < eps assert NE < eps return NC def run_eighe(A, verbose = False): if verbose: print("original matrix:\n", str(A)) D, Q = mp.eighe(A) B = Q * mp.diag(D) * Q.transpose_conj() C = A - B E = Q * Q.transpose_conj() - mp.eye(A.rows) if verbose: print("eigenvalues:\n", D) print("eigenvectors:\n", Q) NC = mp.mnorm(C) NE = mp.mnorm(E) if verbose: print("difference:", NC, "\n", C, "\n") print("difference:", NE, "\n", E, "\n") eps = mp.exp( 0.8 * mp.log(mp.eps)) assert NC < eps assert NE < eps return NC def run_svd_r(A, full_matrices = False, verbose = True): m, n = A.rows, A.cols eps = mp.exp(0.8 * mp.log(mp.eps)) if verbose: print("original matrix:\n", str(A)) print("full", full_matrices) U, S0, V = mp.svd_r(A, full_matrices = full_matrices) S = mp.zeros(U.cols, V.rows) for j in xrange(min(m, n)): S[j,j] = S0[j] if verbose: print("U:\n", str(U)) print("S:\n", str(S0)) print("V:\n", str(V)) C = U * S * V - A err = mp.mnorm(C) if verbose: print("C\n", str(C), "\n", err) assert err < eps D = V * V.transpose() - mp.eye(V.rows) err = mp.mnorm(D) if verbose: print("D:\n", str(D), "\n", err) assert err < eps E = U.transpose() * U - mp.eye(U.cols) err = mp.mnorm(E) if verbose: print("E:\n", str(E), "\n", err) assert err < eps def run_svd_c(A, full_matrices = False, verbose = True): m, n = A.rows, A.cols eps = mp.exp(0.8 * mp.log(mp.eps)) if verbose: print("original matrix:\n", str(A)) print("full", full_matrices) U, S0, V = mp.svd_c(A, full_matrices = full_matrices) S = mp.zeros(U.cols, V.rows) for j in xrange(min(m, n)): S[j,j] = S0[j] if verbose: print("U:\n", str(U)) print("S:\n", str(S0)) print("V:\n", str(V)) C = U * S * V - A err = mp.mnorm(C) if verbose: print("C\n", str(C), "\n", err) assert err < eps D = V * V.transpose_conj() - mp.eye(V.rows) err = mp.mnorm(D) if verbose: print("D:\n", str(D), "\n", err) assert err < eps E = U.transpose_conj() * U - mp.eye(U.cols) err = mp.mnorm(E) if verbose: print("E:\n", str(E), "\n", err) assert err < eps def run_gauss(qtype, a, b): eps = 1e-5 d, e = mp.gauss_quadrature(len(a), qtype) d -= mp.matrix(a) e -= mp.matrix(b) assert mp.mnorm(d) < eps assert mp.mnorm(e) < eps def irandmatrix(n, range = 10): """ random matrix with integer entries """ A = mp.matrix(n, n) for i in xrange(n): for j in xrange(n): A[i,j]=int( (2 * mp.rand() - 1) * range) return A ####################### def test_eighe_fixed_matrix(): A = mp.matrix([[2, 3], [3, 5]]) run_eigsy(A) run_eighe(A) A = mp.matrix([[7, -11], [-11, 13]]) run_eigsy(A) run_eighe(A) A = mp.matrix([[2, 11, 7], [11, 3, 13], [7, 13, 5]]) run_eigsy(A) run_eighe(A) A = mp.matrix([[2, 0, 7], [0, 3, 1], [7, 1, 5]]) run_eigsy(A) run_eighe(A) # A = mp.matrix([[2, 3+7j], [3-7j, 5]]) run_eighe(A) A = mp.matrix([[2, -11j, 0], [+11j, 3, 29j], [0, -29j, 5]]) run_eighe(A) A = mp.matrix([[2, 11 + 17j, 7 + 19j], [11 - 17j, 3, -13 + 23j], [7 - 19j, -13 - 23j, 5]]) run_eighe(A) def test_eigsy_randmatrix(): N = 5 for a in xrange(10): A = 2 * mp.randmatrix(N, N) - 1 for i in xrange(0, N): for j in xrange(i + 1, N): A[j,i] = A[i,j] run_eigsy(A) def test_eighe_randmatrix(): N = 5 for a in xrange(10): A = (2 * mp.randmatrix(N, N) - 1) + 1j * (2 * mp.randmatrix(N, N) - 1) for i in xrange(0, N): A[i,i] = mp.re(A[i,i]) for j in xrange(i + 1, N): A[j,i] = mp.conj(A[i,j]) run_eighe(A) def test_eigsy_irandmatrix(): N = 4 R = 4 for a in xrange(10): A=irandmatrix(N, R) for i in xrange(0, N): for j in xrange(i + 1, N): A[j,i] = A[i,j] run_eigsy(A) def test_eighe_irandmatrix(): N = 4 R = 4 for a in xrange(10): A=irandmatrix(N, R) + 1j * irandmatrix(N, R) for i in xrange(0, N): A[i,i] = mp.re(A[i,i]) for j in xrange(i + 1, N): A[j,i] = mp.conj(A[i,j]) run_eighe(A) def test_svd_r_rand(): for i in xrange(5): full = mp.rand() > 0.5 m = 1 + int(mp.rand() * 10) n = 1 + int(mp.rand() * 10) A = 2 * mp.randmatrix(m, n) - 1 if mp.rand() > 0.5: A *= 10 for x in xrange(m): for y in xrange(n): A[x,y]=int(A[x,y]) run_svd_r(A, full_matrices = full, verbose = False) def test_svd_c_rand(): for i in xrange(5): full = mp.rand() > 0.5 m = 1 + int(mp.rand() * 10) n = 1 + int(mp.rand() * 10) A = (2 * mp.randmatrix(m, n) - 1) + 1j * (2 * mp.randmatrix(m, n) - 1) if mp.rand() > 0.5: A *= 10 for x in xrange(m): for y in xrange(n): A[x,y]=int(mp.re(A[x,y])) + 1j * int(mp.im(A[x,y])) run_svd_c(A, full_matrices=full, verbose=False) def test_svd_test_case(): # a test case from Golub and Reinsch # (see wilkinson/reinsch: handbook for auto. comp., vol ii-linear algebra, 134-151(1971).) eps = mp.exp(0.8 * mp.log(mp.eps)) a = [[22, 10, 2, 3, 7], [14, 7, 10, 0, 8], [-1, 13, -1, -11, 3], [-3, -2, 13, -2, 4], [ 9, 8, 1, -2, 4], [ 9, 1, -7, 5, -1], [ 2, -6, 6, 5, 1], [ 4, 5, 0, -2, 2]] a = mp.matrix(a) b = mp.matrix([mp.sqrt(1248), 20, mp.sqrt(384), 0, 0]) S = mp.svd_r(a, compute_uv = False) S -= b assert mp.mnorm(S) < eps S = mp.svd_c(a, compute_uv = False) S -= b assert mp.mnorm(S) < eps def test_gauss_quadrature_static(): a = [-0.57735027, 0.57735027] b = [ 1, 1] run_gauss("legendre", a , b) a = [ -0.906179846, -0.538469310, 0, 0.538469310, 0.906179846] b = [ 0.23692689, 0.47862867, 0.56888889, 0.47862867, 0.23692689] run_gauss("legendre", a , b) a = [ 0.06943184, 0.33000948, 0.66999052, 0.93056816] b = [ 0.17392742, 0.32607258, 0.32607258, 0.17392742] run_gauss("legendre01", a , b) a = [-0.70710678, 0.70710678] b = [ 0.88622693, 0.88622693] run_gauss("hermite", a , b) a = [ -2.02018287, -0.958572465, 0, 0.958572465, 2.02018287] b = [ 0.01995324, 0.39361932, 0.94530872, 0.39361932, 0.01995324] run_gauss("hermite", a , b) a = [ 0.41577456, 2.29428036, 6.28994508] b = [ 0.71109301, 0.27851773, 0.01038926] run_gauss("laguerre", a , b) def test_gauss_quadrature_dynamic(verbose = False): n = 5 A = mp.randmatrix(2 * n, 1) def F(x): r = 0 for i in xrange(len(A) - 1, -1, -1): r = r * x + A[i] return r def run(qtype, FW, R, alpha = 0, beta = 0): X, W = mp.gauss_quadrature(n, qtype, alpha = alpha, beta = beta) a = 0 for i in xrange(len(X)): a += W[i] * F(X[i]) b = mp.quad(lambda x: FW(x) * F(x), R) c = mp.fabs(a - b) if verbose: print(qtype, c, a, b) assert c < 1e-5 run("legendre", lambda x: 1, [-1, 1]) run("legendre01", lambda x: 1, [0, 1]) run("hermite", lambda x: mp.exp(-x*x), [-mp.inf, mp.inf]) run("laguerre", lambda x: mp.exp(-x), [0, mp.inf]) run("glaguerre", lambda x: mp.sqrt(x)*mp.exp(-x), [0, mp.inf], alpha = 1 / mp.mpf(2)) run("chebyshev1", lambda x: 1/mp.sqrt(1-x*x), [-1, 1]) run("chebyshev2", lambda x: mp.sqrt(1-x*x), [-1, 1]) run("jacobi", lambda x: (1-x)**(1/mp.mpf(3)) * (1+x)**(1/mp.mpf(5)), [-1, 1], alpha = 1 / mp.mpf(3), beta = 1 / mp.mpf(5) ) mpmath-1.0.0/mpmath/tests/test_elliptic.py000066400000000000000000000603631316273626600206700ustar00rootroot00000000000000""" Limited tests of the elliptic functions module. A full suite of extensive testing can be found in elliptic_torture_tests.py Author of the first version: M.T. Taschuk References: [1] Abramowitz & Stegun. 'Handbook of Mathematical Functions, 9th Ed.', (Dover duplicate of 1972 edition) [2] Whittaker 'A Course of Modern Analysis, 4th Ed.', 1946, Cambridge University Press """ import mpmath import random from mpmath import * def mpc_ae(a, b, eps=eps): res = True res = res and a.real.ae(b.real, eps) res = res and a.imag.ae(b.imag, eps) return res zero = mpf(0) one = mpf(1) jsn = ellipfun('sn') jcn = ellipfun('cn') jdn = ellipfun('dn') calculate_nome = lambda k: qfrom(k=k) def test_ellipfun(): mp.dps = 15 assert ellipfun('ss', 0, 0) == 1 assert ellipfun('cc', 0, 0) == 1 assert ellipfun('dd', 0, 0) == 1 assert ellipfun('nn', 0, 0) == 1 assert ellipfun('sn', 0.25, 0).ae(sin(0.25)) assert ellipfun('cn', 0.25, 0).ae(cos(0.25)) assert ellipfun('dn', 0.25, 0).ae(1) assert ellipfun('ns', 0.25, 0).ae(csc(0.25)) assert ellipfun('nc', 0.25, 0).ae(sec(0.25)) assert ellipfun('nd', 0.25, 0).ae(1) assert ellipfun('sc', 0.25, 0).ae(tan(0.25)) assert ellipfun('sd', 0.25, 0).ae(sin(0.25)) assert ellipfun('cd', 0.25, 0).ae(cos(0.25)) assert ellipfun('cs', 0.25, 0).ae(cot(0.25)) assert ellipfun('dc', 0.25, 0).ae(sec(0.25)) assert ellipfun('ds', 0.25, 0).ae(csc(0.25)) assert ellipfun('sn', 0.25, 1).ae(tanh(0.25)) assert ellipfun('cn', 0.25, 1).ae(sech(0.25)) assert ellipfun('dn', 0.25, 1).ae(sech(0.25)) assert ellipfun('ns', 0.25, 1).ae(coth(0.25)) assert ellipfun('nc', 0.25, 1).ae(cosh(0.25)) assert ellipfun('nd', 0.25, 1).ae(cosh(0.25)) assert ellipfun('sc', 0.25, 1).ae(sinh(0.25)) assert ellipfun('sd', 0.25, 1).ae(sinh(0.25)) assert ellipfun('cd', 0.25, 1).ae(1) assert ellipfun('cs', 0.25, 1).ae(csch(0.25)) assert ellipfun('dc', 0.25, 1).ae(1) assert ellipfun('ds', 0.25, 1).ae(csch(0.25)) assert ellipfun('sn', 0.25, 0.5).ae(0.24615967096986145833) assert ellipfun('cn', 0.25, 0.5).ae(0.96922928989378439337) assert ellipfun('dn', 0.25, 0.5).ae(0.98473484156599474563) assert ellipfun('ns', 0.25, 0.5).ae(4.0624038700573130369) assert ellipfun('nc', 0.25, 0.5).ae(1.0317476065024692949) assert ellipfun('nd', 0.25, 0.5).ae(1.0155017958029488665) assert ellipfun('sc', 0.25, 0.5).ae(0.25397465134058993408) assert ellipfun('sd', 0.25, 0.5).ae(0.24997558792415733063) assert ellipfun('cd', 0.25, 0.5).ae(0.98425408443195497052) assert ellipfun('cs', 0.25, 0.5).ae(3.9374008182374110826) assert ellipfun('dc', 0.25, 0.5).ae(1.0159978158253033913) assert ellipfun('ds', 0.25, 0.5).ae(4.0003906313579720593) def test_calculate_nome(): mp.dps = 100 q = calculate_nome(zero) assert(q == zero) mp.dps = 25 # used Mathematica's EllipticNomeQ[m] math1 = [(mpf(1)/10, mpf('0.006584651553858370274473060')), (mpf(2)/10, mpf('0.01394285727531826872146409')), (mpf(3)/10, mpf('0.02227743615715350822901627')), (mpf(4)/10, mpf('0.03188334731336317755064299')), (mpf(5)/10, mpf('0.04321391826377224977441774')), (mpf(6)/10, mpf('0.05702025781460967637754953')), (mpf(7)/10, mpf('0.07468994353717944761143751')), (mpf(8)/10, mpf('0.09927369733882489703607378')), (mpf(9)/10, mpf('0.1401731269542615524091055')), (mpf(9)/10, mpf('0.1401731269542615524091055'))] for i in math1: m = i[0] q = calculate_nome(sqrt(m)) assert q.ae(i[1]) mp.dps = 15 def test_jtheta(): mp.dps = 25 z = q = zero for n in range(1,5): value = jtheta(n, z, q) assert(value == (n-1)//2) for q in [one, mpf(2)]: for n in range(1,5): raised = True try: r = jtheta(n, z, q) except: pass else: raised = False assert(raised) z = one/10 q = one/11 # Mathematical N[EllipticTheta[1, 1/10, 1/11], 25] res = mpf('0.1069552990104042681962096') result = jtheta(1, z, q) assert(result.ae(res)) # Mathematica N[EllipticTheta[2, 1/10, 1/11], 25] res = mpf('1.101385760258855791140606') result = jtheta(2, z, q) assert(result.ae(res)) # Mathematica N[EllipticTheta[3, 1/10, 1/11], 25] res = mpf('1.178319743354331061795905') result = jtheta(3, z, q) assert(result.ae(res)) # Mathematica N[EllipticTheta[4, 1/10, 1/11], 25] res = mpf('0.8219318954665153577314573') result = jtheta(4, z, q) assert(result.ae(res)) # test for sin zeros for jtheta(1, z, q) # test for cos zeros for jtheta(2, z, q) z1 = pi z2 = pi/2 for i in range(10): qstring = str(random.random()) q = mpf(qstring) result = jtheta(1, z1, q) assert(result.ae(0)) result = jtheta(2, z2, q) assert(result.ae(0)) mp.dps = 15 def test_jtheta_issue_79(): # near the circle of covergence |q| = 1 the convergence slows # down; for |q| > Q_LIM the theta functions raise ValueError mp.dps = 30 mp.dps += 30 q = mpf(6)/10 - one/10**6 - mpf(8)/10 * j mp.dps -= 30 # Mathematica run first # N[EllipticTheta[3, 1, 6/10 - 10^-6 - 8/10*I], 2000] # then it works: # N[EllipticTheta[3, 1, 6/10 - 10^-6 - 8/10*I], 30] res = mpf('32.0031009628901652627099524264') + \ mpf('16.6153027998236087899308935624') * j result = jtheta(3, 1, q) # check that for abs(q) > Q_LIM a ValueError exception is raised mp.dps += 30 q = mpf(6)/10 - one/10**7 - mpf(8)/10 * j mp.dps -= 30 try: result = jtheta(3, 1, q) except ValueError: pass else: assert(False) # bug reported in issue 79 mp.dps = 100 z = (1+j)/3 q = mpf(368983957219251)/10**15 + mpf(636363636363636)/10**15 * j # Mathematica N[EllipticTheta[1, z, q], 35] res = mpf('2.4439389177990737589761828991467471') + \ mpf('0.5446453005688226915290954851851490') *j mp.dps = 30 result = jtheta(1, z, q) assert(result.ae(res)) mp.dps = 80 z = 3 + 4*j q = 0.5 + 0.5*j r1 = jtheta(1, z, q) mp.dps = 15 r2 = jtheta(1, z, q) assert r1.ae(r2) mp.dps = 80 z = 3 + j q1 = exp(j*3) # longer test # for n in range(1, 6) for n in range(1, 2): mp.dps = 80 q = q1*(1 - mpf(1)/10**n) r1 = jtheta(1, z, q) mp.dps = 15 r2 = jtheta(1, z, q) assert r1.ae(r2) mp.dps = 15 # issue 79 about high derivatives assert jtheta(3, 4.5, 0.25, 9).ae(1359.04892680683) assert jtheta(3, 4.5, 0.25, 50).ae(-6.14832772630905e+33) mp.dps = 50 r = jtheta(3, 4.5, 0.25, 9) assert r.ae('1359.048926806828939547859396600218966947753213803') r = jtheta(3, 4.5, 0.25, 50) assert r.ae('-6148327726309051673317975084654262.4119215720343656') def test_jtheta_identities(): """ Tests the some of the jacobi identidies found in Abramowitz, Sec. 16.28, Pg. 576. The identities are tested to 1 part in 10^98. """ mp.dps = 110 eps1 = ldexp(eps, 30) for i in range(10): qstring = str(random.random()) q = mpf(qstring) zstring = str(10*random.random()) z = mpf(zstring) # Abramowitz 16.28.1 # v_1(z, q)**2 * v_4(0, q)**2 = v_3(z, q)**2 * v_2(0, q)**2 # - v_2(z, q)**2 * v_3(0, q)**2 term1 = (jtheta(1, z, q)**2) * (jtheta(4, zero, q)**2) term2 = (jtheta(3, z, q)**2) * (jtheta(2, zero, q)**2) term3 = (jtheta(2, z, q)**2) * (jtheta(3, zero, q)**2) equality = term1 - term2 + term3 assert(equality.ae(0, eps1)) zstring = str(100*random.random()) z = mpf(zstring) # Abramowitz 16.28.2 # v_2(z, q)**2 * v_4(0, q)**2 = v_4(z, q)**2 * v_2(0, q)**2 # - v_1(z, q)**2 * v_3(0, q)**2 term1 = (jtheta(2, z, q)**2) * (jtheta(4, zero, q)**2) term2 = (jtheta(4, z, q)**2) * (jtheta(2, zero, q)**2) term3 = (jtheta(1, z, q)**2) * (jtheta(3, zero, q)**2) equality = term1 - term2 + term3 assert(equality.ae(0, eps1)) # Abramowitz 16.28.3 # v_3(z, q)**2 * v_4(0, q)**2 = v_4(z, q)**2 * v_3(0, q)**2 # - v_1(z, q)**2 * v_2(0, q)**2 term1 = (jtheta(3, z, q)**2) * (jtheta(4, zero, q)**2) term2 = (jtheta(4, z, q)**2) * (jtheta(3, zero, q)**2) term3 = (jtheta(1, z, q)**2) * (jtheta(2, zero, q)**2) equality = term1 - term2 + term3 assert(equality.ae(0, eps1)) # Abramowitz 16.28.4 # v_4(z, q)**2 * v_4(0, q)**2 = v_3(z, q)**2 * v_3(0, q)**2 # - v_2(z, q)**2 * v_2(0, q)**2 term1 = (jtheta(4, z, q)**2) * (jtheta(4, zero, q)**2) term2 = (jtheta(3, z, q)**2) * (jtheta(3, zero, q)**2) term3 = (jtheta(2, z, q)**2) * (jtheta(2, zero, q)**2) equality = term1 - term2 + term3 assert(equality.ae(0, eps1)) # Abramowitz 16.28.5 # v_2(0, q)**4 + v_4(0, q)**4 == v_3(0, q)**4 term1 = (jtheta(2, zero, q))**4 term2 = (jtheta(4, zero, q))**4 term3 = (jtheta(3, zero, q))**4 equality = term1 + term2 - term3 assert(equality.ae(0, eps1)) mp.dps = 15 def test_jtheta_complex(): mp.dps = 30 z = mpf(1)/4 + j/8 q = mpf(1)/3 + j/7 # Mathematica N[EllipticTheta[1, 1/4 + I/8, 1/3 + I/7], 35] res = mpf('0.31618034835986160705729105731678285') + \ mpf('0.07542013825835103435142515194358975') * j r = jtheta(1, z, q) assert(mpc_ae(r, res)) # Mathematica N[EllipticTheta[2, 1/4 + I/8, 1/3 + I/7], 35] res = mpf('1.6530986428239765928634711417951828') + \ mpf('0.2015344864707197230526742145361455') * j r = jtheta(2, z, q) assert(mpc_ae(r, res)) # Mathematica N[EllipticTheta[3, 1/4 + I/8, 1/3 + I/7], 35] res = mpf('1.6520564411784228184326012700348340') + \ mpf('0.1998129119671271328684690067401823') * j r = jtheta(3, z, q) assert(mpc_ae(r, res)) # Mathematica N[EllipticTheta[4, 1/4 + I/8, 1/3 + I/7], 35] res = mpf('0.37619082382228348252047624089973824') - \ mpf('0.15623022130983652972686227200681074') * j r = jtheta(4, z, q) assert(mpc_ae(r, res)) # check some theta function identities mp.dos = 100 z = mpf(1)/4 + j/8 q = mpf(1)/3 + j/7 mp.dps += 10 a = [0,0, jtheta(2, 0, q), jtheta(3, 0, q), jtheta(4, 0, q)] t = [0, jtheta(1, z, q), jtheta(2, z, q), jtheta(3, z, q), jtheta(4, z, q)] r = [(t[2]*a[4])**2 - (t[4]*a[2])**2 + (t[1] *a[3])**2, (t[3]*a[4])**2 - (t[4]*a[3])**2 + (t[1] *a[2])**2, (t[1]*a[4])**2 - (t[3]*a[2])**2 + (t[2] *a[3])**2, (t[4]*a[4])**2 - (t[3]*a[3])**2 + (t[2] *a[2])**2, a[2]**4 + a[4]**4 - a[3]**4] mp.dps -= 10 for x in r: assert(mpc_ae(x, mpc(0))) mp.dps = 15 def test_djtheta(): mp.dps = 30 z = one/7 + j/3 q = one/8 + j/5 # Mathematica N[EllipticThetaPrime[1, 1/7 + I/3, 1/8 + I/5], 35] res = mpf('1.5555195883277196036090928995803201') - \ mpf('0.02439761276895463494054149673076275') * j result = jtheta(1, z, q, 1) assert(mpc_ae(result, res)) # Mathematica N[EllipticThetaPrime[2, 1/7 + I/3, 1/8 + I/5], 35] res = mpf('0.19825296689470982332701283509685662') - \ mpf('0.46038135182282106983251742935250009') * j result = jtheta(2, z, q, 1) assert(mpc_ae(result, res)) # Mathematica N[EllipticThetaPrime[3, 1/7 + I/3, 1/8 + I/5], 35] res = mpf('0.36492498415476212680896699407390026') - \ mpf('0.57743812698666990209897034525640369') * j result = jtheta(3, z, q, 1) assert(mpc_ae(result, res)) # Mathematica N[EllipticThetaPrime[4, 1/7 + I/3, 1/8 + I/5], 35] res = mpf('-0.38936892528126996010818803742007352') + \ mpf('0.66549886179739128256269617407313625') * j result = jtheta(4, z, q, 1) assert(mpc_ae(result, res)) for i in range(10): q = (one*random.random() + j*random.random())/2 # identity in Wittaker, Watson &21.41 a = jtheta(1, 0, q, 1) b = jtheta(2, 0, q)*jtheta(3, 0, q)*jtheta(4, 0, q) assert(a.ae(b)) # test higher derivatives mp.dps = 20 for q,z in [(one/3, one/5), (one/3 + j/8, one/5), (one/3, one/5 + j/8), (one/3 + j/7, one/5 + j/8)]: for n in [1, 2, 3, 4]: r = jtheta(n, z, q, 2) r1 = diff(lambda zz: jtheta(n, zz, q), z, n=2) assert r.ae(r1) r = jtheta(n, z, q, 3) r1 = diff(lambda zz: jtheta(n, zz, q), z, n=3) assert r.ae(r1) # identity in Wittaker, Watson &21.41 q = one/3 z = zero a = [0]*5 a[1] = jtheta(1, z, q, 3)/jtheta(1, z, q, 1) for n in [2,3,4]: a[n] = jtheta(n, z, q, 2)/jtheta(n, z, q) equality = a[2] + a[3] + a[4] - a[1] assert(equality.ae(0)) mp.dps = 15 def test_jsn(): """ Test some special cases of the sn(z, q) function. """ mp.dps = 100 # trival case result = jsn(zero, zero) assert(result == zero) # Abramowitz Table 16.5 # # sn(0, m) = 0 for i in range(10): qstring = str(random.random()) q = mpf(qstring) equality = jsn(zero, q) assert(equality.ae(0)) # Abramowitz Table 16.6.1 # # sn(z, 0) = sin(z), m == 0 # # sn(z, 1) = tanh(z), m == 1 # # It would be nice to test these, but I find that they run # in to numerical trouble. I'm currently treating as a boundary # case for sn function. mp.dps = 25 arg = one/10 #N[JacobiSN[1/10, 2^-100], 25] res = mpf('0.09983341664682815230681420') m = ldexp(one, -100) result = jsn(arg, m) assert(result.ae(res)) # N[JacobiSN[1/10, 1/10], 25] res = mpf('0.09981686718599080096451168') result = jsn(arg, arg) assert(result.ae(res)) mp.dps = 15 def test_jcn(): """ Test some special cases of the cn(z, q) function. """ mp.dps = 100 # Abramowitz Table 16.5 # cn(0, q) = 1 qstring = str(random.random()) q = mpf(qstring) cn = jcn(zero, q) assert(cn.ae(one)) # Abramowitz Table 16.6.2 # # cn(u, 0) = cos(u), m == 0 # # cn(u, 1) = sech(z), m == 1 # # It would be nice to test these, but I find that they run # in to numerical trouble. I'm currently treating as a boundary # case for cn function. mp.dps = 25 arg = one/10 m = ldexp(one, -100) #N[JacobiCN[1/10, 2^-100], 25] res = mpf('0.9950041652780257660955620') result = jcn(arg, m) assert(result.ae(res)) # N[JacobiCN[1/10, 1/10], 25] res = mpf('0.9950058256237368748520459') result = jcn(arg, arg) assert(result.ae(res)) mp.dps = 15 def test_jdn(): """ Test some special cases of the dn(z, q) function. """ mp.dps = 100 # Abramowitz Table 16.5 # dn(0, q) = 1 mstring = str(random.random()) m = mpf(mstring) dn = jdn(zero, m) assert(dn.ae(one)) mp.dps = 25 # N[JacobiDN[1/10, 1/10], 25] res = mpf('0.9995017055025556219713297') arg = one/10 result = jdn(arg, arg) assert(result.ae(res)) mp.dps = 15 def test_sn_cn_dn_identities(): """ Tests the some of the jacobi elliptic function identities found on Mathworld. Haven't found in Abramowitz. """ mp.dps = 100 N = 5 for i in range(N): qstring = str(random.random()) q = mpf(qstring) zstring = str(100*random.random()) z = mpf(zstring) # MathWorld # sn(z, q)**2 + cn(z, q)**2 == 1 term1 = jsn(z, q)**2 term2 = jcn(z, q)**2 equality = one - term1 - term2 assert(equality.ae(0)) # MathWorld # k**2 * sn(z, m)**2 + dn(z, m)**2 == 1 for i in range(N): mstring = str(random.random()) m = mpf(qstring) k = m.sqrt() zstring = str(10*random.random()) z = mpf(zstring) term1 = k**2 * jsn(z, m)**2 term2 = jdn(z, m)**2 equality = one - term1 - term2 assert(equality.ae(0)) for i in range(N): mstring = str(random.random()) m = mpf(mstring) k = m.sqrt() zstring = str(random.random()) z = mpf(zstring) # MathWorld # k**2 * cn(z, m)**2 + (1 - k**2) = dn(z, m)**2 term1 = k**2 * jcn(z, m)**2 term2 = 1 - k**2 term3 = jdn(z, m)**2 equality = term3 - term1 - term2 assert(equality.ae(0)) K = ellipk(k**2) # Abramowitz Table 16.5 # sn(K, m) = 1; K is K(k), first complete elliptic integral r = jsn(K, m) assert(r.ae(one)) # Abramowitz Table 16.5 # cn(K, q) = 0; K is K(k), first complete elliptic integral equality = jcn(K, m) assert(equality.ae(0)) # Abramowitz Table 16.6.3 # dn(z, 0) = 1, m == 0 z = m value = jdn(z, zero) assert(value.ae(one)) mp.dps = 15 def test_sn_cn_dn_complex(): mp.dps = 30 # N[JacobiSN[1/4 + I/8, 1/3 + I/7], 35] in Mathematica res = mpf('0.2495674401066275492326652143537') + \ mpf('0.12017344422863833381301051702823') * j u = mpf(1)/4 + j/8 m = mpf(1)/3 + j/7 r = jsn(u, m) assert(mpc_ae(r, res)) #N[JacobiCN[1/4 + I/8, 1/3 + I/7], 35] res = mpf('0.9762691700944007312693721148331') - \ mpf('0.0307203994181623243583169154824')*j r = jcn(u, m) #assert r.real.ae(res.real) #assert r.imag.ae(res.imag) assert(mpc_ae(r, res)) #N[JacobiDN[1/4 + I/8, 1/3 + I/7], 35] res = mpf('0.99639490163039577560547478589753039') - \ mpf('0.01346296520008176393432491077244994')*j r = jdn(u, m) assert(mpc_ae(r, res)) mp.dps = 15 def test_elliptic_integrals(): # Test cases from Carlson's paper mp.dps = 15 assert elliprd(0,2,1).ae(1.7972103521033883112) assert elliprd(2,3,4).ae(0.16510527294261053349) assert elliprd(j,-j,2).ae(0.65933854154219768919) assert elliprd(0,j,-j).ae(1.2708196271909686299 + 2.7811120159520578777j) assert elliprd(0,j-1,j).ae(-1.8577235439239060056 - 0.96193450888838559989j) assert elliprd(-2-j,-j,-1+j).ae(1.8249027393703805305 - 1.2218475784827035855j) # extra test cases assert elliprg(0,0,0) == 0 assert elliprg(0,0,16).ae(2) assert elliprg(0,16,0).ae(2) assert elliprg(16,0,0).ae(2) assert elliprg(1,4,0).ae(1.2110560275684595248036) assert elliprg(1,0,4).ae(1.2110560275684595248036) assert elliprg(0,4,1).ae(1.2110560275684595248036) # should be symmetric -- fixes a bug present in the paper x,y,z = 1,1j,-1+1j assert elliprg(x,y,z).ae(0.64139146875812627545 + 0.58085463774808290907j) assert elliprg(x,z,y).ae(0.64139146875812627545 + 0.58085463774808290907j) assert elliprg(y,x,z).ae(0.64139146875812627545 + 0.58085463774808290907j) assert elliprg(y,z,x).ae(0.64139146875812627545 + 0.58085463774808290907j) assert elliprg(z,x,y).ae(0.64139146875812627545 + 0.58085463774808290907j) assert elliprg(z,y,x).ae(0.64139146875812627545 + 0.58085463774808290907j) for n in [5, 15, 30, 60, 100]: mp.dps = n assert elliprf(1,2,0).ae('1.3110287771460599052324197949455597068413774757158115814084108519003952935352071251151477664807145467230678763') assert elliprf(0.5,1,0).ae('1.854074677301371918433850347195260046217598823521766905585928045056021776838119978357271861650371897277771871') assert elliprf(j,-j,0).ae('1.854074677301371918433850347195260046217598823521766905585928045056021776838119978357271861650371897277771871') assert elliprf(j-1,j,0).ae(mpc('0.79612586584233913293056938229563057846592264089185680214929401744498956943287031832657642790719940442165621412', '-1.2138566698364959864300942567386038975419875860741507618279563735753073152507112254567291141460317931258599889')) assert elliprf(2,3,4).ae('0.58408284167715170669284916892566789240351359699303216166309375305508295130412919665541330837704050454472379308') assert elliprf(j,-j,2).ae('1.0441445654064360931078658361850779139591660747973017593275012615517220315993723776182276555339288363064476126') assert elliprf(j-1,j,1-j).ae(mpc('0.93912050218619371196624617169781141161485651998254431830645241993282941057500174238125105410055253623847335313', '-0.53296252018635269264859303449447908970360344322834582313172115220559316331271520508208025270300138589669326136')) assert elliprc(0,0.25).ae(+pi) assert elliprc(2.25,2).ae(+ln2) assert elliprc(0,j).ae(mpc('1.1107207345395915617539702475151734246536554223439225557713489017391086982748684776438317336911913093408525532', '-1.1107207345395915617539702475151734246536554223439225557713489017391086982748684776438317336911913093408525532')) assert elliprc(-j,j).ae(mpc('1.2260849569072198222319655083097718755633725139745941606203839524036426936825652935738621522906572884239069297', '-0.34471136988767679699935618332997956653521218571295874986708834375026550946053920574015526038040124556716711353')) assert elliprc(0.25,-2).ae(ln2/3) assert elliprc(j,-1).ae(mpc('0.77778596920447389875196055840799837589537035343923012237628610795937014001905822029050288316217145443865649819', '0.1983248499342877364755170948292130095921681309577950696116251029742793455964385947473103628983664877025779304')) assert elliprj(0,1,2,3).ae('0.77688623778582332014190282640545501102298064276022952731669118325952563819813258230708177398475643634103990878') assert elliprj(2,3,4,5).ae('0.14297579667156753833233879421985774801466647854232626336218889885463800128817976132826443904216546421431528308') assert elliprj(2,3,4,-1+j).ae(mpc('0.13613945827770535203521374457913768360237593025944342652613569368333226052158214183059386307242563164036672709', '-0.38207561624427164249600936454845112611060375760094156571007648297226090050927156176977091273224510621553615189')) assert elliprj(j,-j,0,2).ae('1.6490011662710884518243257224860232300246792717163891216346170272567376981346412066066050103935109581019055806') assert elliprj(-1+j,-1-j,1,2).ae('0.94148358841220238083044612133767270187474673547917988681610772381758628963408843935027667916713866133196845063') assert elliprj(j,-j,0,1-j).ae(mpc('1.8260115229009316249372594065790946657011067182850435297162034335356430755397401849070610280860044610878657501', '1.2290661908643471500163617732957042849283739403009556715926326841959667290840290081010472716420690899886276961')) assert elliprj(-1+j,-1-j,1,-3+j).ae(mpc('-0.61127970812028172123588152373622636829986597243716610650831553882054127570542477508023027578037045504958619422', '-1.0684038390006807880182112972232562745485871763154040245065581157751693730095703406209466903752930797510491155')) assert elliprj(-1+j,-2-j,-j,-1+j).ae(mpc('1.8249027393703805304622013339009022294368078659619988943515764258335975852685224202567854526307030593012768954', '-1.2218475784827035854568450371590419833166777535029296025352291308244564398645467465067845461070602841312456831')) assert elliprg(0,16,16).ae(+pi) assert elliprg(2,3,4).ae('1.7255030280692277601061148835701141842692457170470456590515892070736643637303053506944907685301315299153040991') assert elliprg(0,j,-j).ae('0.42360654239698954330324956174109581824072295516347109253028968632986700241706737986160014699730561497106114281') assert elliprg(j-1,j,0).ae(mpc('0.44660591677018372656731970402124510811555212083508861036067729944477855594654762496407405328607219895053798354', '0.70768352357515390073102719507612395221369717586839400605901402910893345301718731499237159587077682267374159282')) assert elliprg(-j,j-1,j).ae(mpc('0.36023392184473309033675652092928695596803358846377334894215349632203382573844427952830064383286995172598964266', '0.40348623401722113740956336997761033878615232917480045914551915169013722542827052849476969199578321834819903921')) assert elliprg(0, mpf('0.0796'), 4).ae('1.0284758090288040009838871385180217366569777284430590125081211090574701293154645750017813190805144572673802094') mp.dps = 15 def test_issue_238(): assert isnan(qfrom(m=nan)) mpmath-1.0.0/mpmath/tests/test_fp.py000066400000000000000000002576151316273626600175000ustar00rootroot00000000000000""" Easy-to-use test-generating code: cases = ''' exp 2.25 log 2.25 ''' from mpmath import * mp.dps = 20 for test in cases.splitlines(): if not test: continue words = test.split() fname = words[0] args = words[1:] argstr = ", ".join(args) testline = "%s(%s)" % (fname, argstr) ans = str(eval(testline)) print " assert ae(fp.%s, %s)" % (testline, ans) """ from mpmath import fp def ae(x, y, tol=1e-12): if x == y: return True return abs(x-y) <= tol*abs(y) def test_conj(): assert fp.conj(4) == 4 assert fp.conj(3+4j) == 3-4j assert fp.fdot([1,2],[3,2+1j], conjugate=True) == 7-2j def test_fp_number_parts(): assert ae(fp.arg(3), 0.0) assert ae(fp.arg(-3), 3.1415926535897932385) assert ae(fp.arg(3j), 1.5707963267948966192) assert ae(fp.arg(-3j), -1.5707963267948966192) assert ae(fp.arg(2+3j), 0.98279372324732906799) assert ae(fp.arg(-1-1j), -2.3561944901923449288) assert ae(fp.re(2.5), 2.5) assert ae(fp.re(2.5+3j), 2.5) assert ae(fp.im(2.5), 0.0) assert ae(fp.im(2.5+3j), 3.0) assert ae(fp.floor(2.5), 2.0) assert ae(fp.floor(2), 2.0) assert ae(fp.floor(2.0+0j), (2.0 + 0.0j)) assert ae(fp.floor(-1.5-0.5j), (-2.0 - 1.0j)) assert ae(fp.ceil(2.5), 3.0) assert ae(fp.ceil(2), 2.0) assert ae(fp.ceil(2.0+0j), (2.0 + 0.0j)) assert ae(fp.ceil(-1.5-0.5j), (-1.0 + 0.0j)) def test_fp_cospi_sinpi(): assert ae(fp.sinpi(0), 0.0) assert ae(fp.sinpi(0.25), 0.7071067811865475244) assert ae(fp.sinpi(0.5), 1.0) assert ae(fp.sinpi(0.75), 0.7071067811865475244) assert ae(fp.sinpi(1), 0.0) assert ae(fp.sinpi(1.25), -0.7071067811865475244) assert ae(fp.sinpi(1.5), -1.0) assert ae(fp.sinpi(1.75), -0.7071067811865475244) assert ae(fp.sinpi(2), 0.0) assert ae(fp.sinpi(2.25), 0.7071067811865475244) assert ae(fp.sinpi(0+3j), (0.0 + 6195.8238636085899556j)) assert ae(fp.sinpi(0.25+3j), (4381.1091260582448033 + 4381.1090689950686908j)) assert ae(fp.sinpi(0.5+3j), (6195.8239443081075259 + 0.0j)) assert ae(fp.sinpi(0.75+3j), (4381.1091260582448033 - 4381.1090689950686908j)) assert ae(fp.sinpi(1+3j), (0.0 - 6195.8238636085899556j)) assert ae(fp.sinpi(1.25+3j), (-4381.1091260582448033 - 4381.1090689950686908j)) assert ae(fp.sinpi(1.5+3j), (-6195.8239443081075259 + 0.0j)) assert ae(fp.sinpi(1.75+3j), (-4381.1091260582448033 + 4381.1090689950686908j)) assert ae(fp.sinpi(2+3j), (0.0 + 6195.8238636085899556j)) assert ae(fp.sinpi(2.25+3j), (4381.1091260582448033 + 4381.1090689950686908j)) assert ae(fp.sinpi(-0.75), -0.7071067811865475244) assert ae(fp.sinpi(-1e-10), -3.1415926535897933529e-10) assert ae(fp.sinpi(1e-10), 3.1415926535897933529e-10) assert ae(fp.sinpi(1e-10+1e-10j), (3.141592653589793353e-10 + 3.1415926535897933528e-10j)) assert ae(fp.sinpi(1e-10-1e-10j), (3.141592653589793353e-10 - 3.1415926535897933528e-10j)) assert ae(fp.sinpi(-1e-10+1e-10j), (-3.141592653589793353e-10 + 3.1415926535897933528e-10j)) assert ae(fp.sinpi(-1e-10-1e-10j), (-3.141592653589793353e-10 - 3.1415926535897933528e-10j)) assert ae(fp.cospi(0), 1.0) assert ae(fp.cospi(0.25), 0.7071067811865475244) assert ae(fp.cospi(0.5), 0.0) assert ae(fp.cospi(0.75), -0.7071067811865475244) assert ae(fp.cospi(1), -1.0) assert ae(fp.cospi(1.25), -0.7071067811865475244) assert ae(fp.cospi(1.5), 0.0) assert ae(fp.cospi(1.75), 0.7071067811865475244) assert ae(fp.cospi(2), 1.0) assert ae(fp.cospi(2.25), 0.7071067811865475244) assert ae(fp.cospi(0+3j), (6195.8239443081075259 + 0.0j)) assert ae(fp.cospi(0.25+3j), (4381.1091260582448033 - 4381.1090689950686908j)) assert ae(fp.cospi(0.5+3j), (0.0 - 6195.8238636085899556j)) assert ae(fp.cospi(0.75+3j), (-4381.1091260582448033 - 4381.1090689950686908j)) assert ae(fp.cospi(1+3j), (-6195.8239443081075259 + 0.0j)) assert ae(fp.cospi(1.25+3j), (-4381.1091260582448033 + 4381.1090689950686908j)) assert ae(fp.cospi(1.5+3j), (0.0 + 6195.8238636085899556j)) assert ae(fp.cospi(1.75+3j), (4381.1091260582448033 + 4381.1090689950686908j)) assert ae(fp.cospi(2+3j), (6195.8239443081075259 + 0.0j)) assert ae(fp.cospi(2.25+3j), (4381.1091260582448033 - 4381.1090689950686908j)) assert ae(fp.cospi(-0.75), -0.7071067811865475244) assert ae(fp.sinpi(-0.7), -0.80901699437494750611) assert ae(fp.cospi(-0.7), -0.5877852522924730163) assert ae(fp.cospi(-3+2j), (-267.74676148374822225 + 0.0j)) assert ae(fp.sinpi(-3+2j), (0.0 - 267.74489404101651426j)) assert ae(fp.sinpi(-0.7+2j), (-216.6116802292079471 - 157.37650009392034693j)) assert ae(fp.cospi(-0.7+2j), (-157.37759774921754565 + 216.61016943630197336j)) def test_fp_expj(): assert ae(fp.expj(0), (1.0 + 0.0j)) assert ae(fp.expj(1), (0.5403023058681397174 + 0.84147098480789650665j)) assert ae(fp.expj(2), (-0.416146836547142387 + 0.9092974268256816954j)) assert ae(fp.expj(0.75), (0.73168886887382088631 + 0.68163876002333416673j)) assert ae(fp.expj(2+3j), (-0.020718731002242879378 + 0.045271253156092975488j)) assert ae(fp.expjpi(0), (1.0 + 0.0j)) assert ae(fp.expjpi(1), (-1.0 + 0.0j)) assert ae(fp.expjpi(2), (1.0 + 0.0j)) assert ae(fp.expjpi(0.75), (-0.7071067811865475244 + 0.7071067811865475244j)) assert ae(fp.expjpi(2+3j), (0.000080699517570304599239 + 0.0j)) def test_fp_bernoulli(): assert ae(fp.bernoulli(0), 1.0) assert ae(fp.bernoulli(1), -0.5) assert ae(fp.bernoulli(2), 0.16666666666666666667) assert ae(fp.bernoulli(10), 0.075757575757575757576) assert ae(fp.bernoulli(11), 0.0) def test_fp_gamma(): assert ae(fp.gamma(1), 1.0) assert ae(fp.gamma(1.5), 0.88622692545275801365) assert ae(fp.gamma(10), 362880.0) assert ae(fp.gamma(-0.5), -3.5449077018110320546) assert ae(fp.gamma(-7.1), 0.0016478244570263333622) assert ae(fp.gamma(12.3), 83385367.899970000963) assert ae(fp.gamma(2+0j), (1.0 + 0.0j)) assert ae(fp.gamma(-2.5+0j), (-0.94530872048294188123 + 0.0j)) assert ae(fp.gamma(3+4j), (0.0052255384713692141947 - 0.17254707929430018772j)) assert ae(fp.gamma(-3-4j), (0.00001460997305874775607 - 0.000020760733311509070396j)) assert ae(fp.fac(0), 1.0) assert ae(fp.fac(1), 1.0) assert ae(fp.fac(20), 2432902008176640000.0) assert ae(fp.fac(-3.5), -0.94530872048294188123) assert ae(fp.fac(2+3j), (-0.44011340763700171113 - 0.06363724312631702183j)) assert ae(fp.loggamma(1.0), 0.0) assert ae(fp.loggamma(2.0), 0.0) assert ae(fp.loggamma(3.0), 0.69314718055994530942) assert ae(fp.loggamma(7.25), 7.0521854507385394449) assert ae(fp.loggamma(1000.0), 5905.2204232091812118) assert ae(fp.loggamma(1e50), 1.1412925464970229298e+52) assert ae(fp.loggamma(1e25+1e25j), (5.6125802751733671621e+26 + 5.7696599078528568383e+26j)) assert ae(fp.loggamma(3+4j), (-1.7566267846037841105 + 4.7426644380346579282j)) assert ae(fp.loggamma(-0.5), (1.2655121234846453965 - 3.1415926535897932385j)) assert ae(fp.loggamma(-1.25), (1.3664317612369762346 - 6.2831853071795864769j)) assert ae(fp.loggamma(-2.75), (0.0044878975359557733115 - 9.4247779607693797154j)) assert ae(fp.loggamma(-3.5), (-1.3090066849930420464 - 12.566370614359172954j)) assert ae(fp.loggamma(-4.5), (-2.8130840817693161197 - 15.707963267948966192j)) assert ae(fp.loggamma(-2+3j), (-6.776523813485657093 - 4.568791367260286402j)) assert ae(fp.loggamma(-1000.3), (-5912.8440347785205041 - 3144.7342462433830317j)) assert ae(fp.loggamma(-100-100j), (-632.35117666833135562 - 158.37641469650352462j)) assert ae(fp.loggamma(1e-10), 23.025850929882735237) assert ae(fp.loggamma(-1e-10), (23.02585092999817837 - 3.1415926535897932385j)) assert ae(fp.loggamma(1e-10j), (23.025850929940456804 - 1.5707963268526181857j)) assert ae(fp.loggamma(1e-10j-1e-10), (22.679277339718205716 - 2.3561944902500664954j)) def test_fp_psi(): assert ae(fp.psi(0, 3.7), 1.1671535393615114409) assert ae(fp.psi(0, 0.5), -1.9635100260214234794) assert ae(fp.psi(0, 1), -0.57721566490153286061) assert ae(fp.psi(0, -2.5), 1.1031566406452431872) assert ae(fp.psi(0, 12.9), 2.5179671503279156347) assert ae(fp.psi(0, 100), 4.6001618527380874002) assert ae(fp.psi(0, 2500.3), 7.8239660143238547877) assert ae(fp.psi(0, 1e40), 92.103403719761827391) assert ae(fp.psi(0, 1e200), 460.51701859880913677) assert ae(fp.psi(0, 3.7+0j), (1.1671535393615114409 + 0.0j)) assert ae(fp.psi(1, 3), 0.39493406684822643647) assert ae(fp.psi(3, 2+3j), (-0.05383196209159972116 + 0.0076890935247364805218j)) assert ae(fp.psi(4, -0.5+1j), (1.2719531355492328195 - 18.211833410936276774j)) assert ae(fp.harmonic(0), 0.0) assert ae(fp.harmonic(1), 1.0) assert ae(fp.harmonic(2), 1.5) assert ae(fp.harmonic(100), 5.1873775176396202608) assert ae(fp.harmonic(-2.5), 1.2803723055467760478) assert ae(fp.harmonic(2+3j), (1.9390425294578375875 + 0.87336044981834544043j)) assert ae(fp.harmonic(-5-4j), (2.3725754822349437733 - 2.4160904444801621j)) def test_fp_zeta(): assert ae(fp.zeta(1e100), 1.0) assert ae(fp.zeta(3), 1.2020569031595942854) assert ae(fp.zeta(2+0j), (1.6449340668482264365 + 0.0j)) assert ae(fp.zeta(0.93), -13.713619351638164784) assert ae(fp.zeta(1.74), 1.9796863545771774095) assert ae(fp.zeta(0.0), -0.5) assert ae(fp.zeta(-1.0), -0.083333333333333333333) assert ae(fp.zeta(-2.0), 0.0) assert ae(fp.zeta(-3.0), 0.0083333333333333333333) assert ae(fp.zeta(-500.0), 0.0) assert ae(fp.zeta(-7.4), 0.0036537321227995882447) assert ae(fp.zeta(2.1), 1.5602165335033620158) assert ae(fp.zeta(26.9), 1.0000000079854809935) assert ae(fp.zeta(26), 1.0000000149015548284) assert ae(fp.zeta(27), 1.0000000074507117898) assert ae(fp.zeta(28), 1.0000000037253340248) assert ae(fp.zeta(27.1), 1.000000006951755045) assert ae(fp.zeta(32.7), 1.0000000001433243232) assert ae(fp.zeta(100), 1.0) assert ae(fp.altzeta(3.5), 0.92755357777394803511) assert ae(fp.altzeta(1), 0.69314718055994530942) assert ae(fp.altzeta(2), 0.82246703342411321824) assert ae(fp.altzeta(0), 0.5) assert ae(fp.zeta(-2+3j, 1), (0.13297115587929864827 + 0.12305330040458776494j)) assert ae(fp.zeta(-2+3j, 5), (18.384866151867576927 - 11.377015110597711009j)) assert ae(fp.zeta(1.0000000001), 9999999173.1735741337) assert ae(fp.zeta(0.9999999999), -9999999172.0191428039) assert ae(fp.zeta(1+0.000000001j), (0.57721566490153286061 - 999999999.99999993765j)) assert ae(fp.primezeta(2.5+4j), (-0.16922458243438033385 - 0.010847965298387727811j)) assert ae(fp.primezeta(4), 0.076993139764246844943) assert ae(fp.riemannr(3.7), 2.3034079839110855717) assert ae(fp.riemannr(8), 3.9011860449341499474) assert ae(fp.riemannr(3+4j), (2.2369653314259991796 + 1.6339943856990281694j)) def test_fp_hyp2f1(): assert ae(fp.hyp2f1(1, (3,2), 3.25, 5.0), (-0.46600275923108143059 - 0.74393667908854842325j)) assert ae(fp.hyp2f1(1+1j, (3,2), 3.25, 5.0), (-5.9208875603806515987 - 2.3813557707889590686j)) assert ae(fp.hyp2f1(1+1j, (3,2), 3.25, 2+3j), (0.17174552030925080445 + 0.19589781970539389999j)) def test_fp_erf(): assert fp.erf(2) == fp.erf(2.0) == fp.erf(2.0+0.0j) assert fp.erf(fp.inf) == 1.0 assert fp.erf(fp.ninf) == -1.0 assert ae(fp.erf(0), 0.0) assert ae(fp.erf(-0), -0.0) assert ae(fp.erf(0.3), 0.32862675945912741619) assert ae(fp.erf(-0.3), -0.32862675945912741619) assert ae(fp.erf(0.9), 0.79690821242283213966) assert ae(fp.erf(-0.9), -0.79690821242283213966) assert ae(fp.erf(1.0), 0.84270079294971486934) assert ae(fp.erf(-1.0), -0.84270079294971486934) assert ae(fp.erf(1.1), 0.88020506957408172966) assert ae(fp.erf(-1.1), -0.88020506957408172966) assert ae(fp.erf(8.5), 1.0) assert ae(fp.erf(-8.5), -1.0) assert ae(fp.erf(9.1), 1.0) assert ae(fp.erf(-9.1), -1.0) assert ae(fp.erf(20.0), 1.0) assert ae(fp.erf(-20.0), -1.0) assert ae(fp.erf(10000.0), 1.0) assert ae(fp.erf(-10000.0), -1.0) assert ae(fp.erf(1e+50), 1.0) assert ae(fp.erf(-1e+50), -1.0) assert ae(fp.erf(1j), 1.650425758797542876j) assert ae(fp.erf(-1j), -1.650425758797542876j) assert ae(fp.erf((2+3j)), (-20.829461427614568389 + 8.6873182714701631444j)) assert ae(fp.erf(-(2+3j)), -(-20.829461427614568389 + 8.6873182714701631444j)) assert ae(fp.erf((8+9j)), (-1072004.2525062051158 + 364149.91954310255423j)) assert ae(fp.erf(-(8+9j)), -(-1072004.2525062051158 + 364149.91954310255423j)) assert fp.erfc(fp.inf) == 0.0 assert fp.erfc(fp.ninf) == 2.0 assert fp.erfc(0) == 1 assert fp.erfc(-0.0) == 1 assert fp.erfc(0+0j) == 1 assert ae(fp.erfc(0.3), 0.67137324054087258381) assert ae(fp.erfc(-0.3), 1.3286267594591274162) assert ae(fp.erfc(0.9), 0.20309178757716786034) assert ae(fp.erfc(-0.9), 1.7969082124228321397) assert ae(fp.erfc(1.0), 0.15729920705028513066) assert ae(fp.erfc(-1.0), 1.8427007929497148693) assert ae(fp.erfc(1.1), 0.11979493042591827034) assert ae(fp.erfc(-1.1), 1.8802050695740817297) assert ae(fp.erfc(8.5), 2.7623240713337714461e-33) assert ae(fp.erfc(-8.5), 2.0) assert ae(fp.erfc(9.1), 6.6969004279886077452e-38) assert ae(fp.erfc(-9.1), 2.0) assert ae(fp.erfc(20.0), 5.3958656116079009289e-176) assert ae(fp.erfc(-20.0), 2.0) assert ae(fp.erfc(10000.0), 0.0) assert ae(fp.erfc(-10000.0), 2.0) assert ae(fp.erfc(1e+50), 0.0) assert ae(fp.erfc(-1e+50), 2.0) assert ae(fp.erfc(1j), (1.0 - 1.650425758797542876j)) assert ae(fp.erfc(-1j), (1.0 + 1.650425758797542876j)) assert ae(fp.erfc((2+3j)), (21.829461427614568389 - 8.6873182714701631444j), 1e-13) assert ae(fp.erfc(-(2+3j)), (-19.829461427614568389 + 8.6873182714701631444j), 1e-13) assert ae(fp.erfc((8+9j)), (1072005.2525062051158 - 364149.91954310255423j)) assert ae(fp.erfc(-(8+9j)), (-1072003.2525062051158 + 364149.91954310255423j)) assert ae(fp.erfc(20+0j), (5.3958656116079009289e-176 + 0.0j)) def test_fp_lambertw(): assert ae(fp.lambertw(0.0), 0.0) assert ae(fp.lambertw(1.0), 0.567143290409783873) assert ae(fp.lambertw(7.5), 1.5662309537823875394) assert ae(fp.lambertw(-0.25), -0.35740295618138890307) assert ae(fp.lambertw(-10.0), (1.3699809685212708156 + 2.140194527074713196j)) assert ae(fp.lambertw(0+0j), (0.0 + 0.0j)) assert ae(fp.lambertw(4+0j), (1.2021678731970429392 + 0.0j)) assert ae(fp.lambertw(1000.5), 5.2500227450408980127) assert ae(fp.lambertw(1e100), 224.84310644511850156) assert ae(fp.lambertw(-1000.0), (5.1501630246362515223 + 2.6641981432905204596j)) assert ae(fp.lambertw(1e-10), 9.9999999990000003645e-11) assert ae(fp.lambertw(1e-10j), (1.0000000000000000728e-20 + 1.0000000000000000364e-10j)) assert ae(fp.lambertw(3+4j), (1.2815618061237758782 + 0.53309522202097107131j)) assert ae(fp.lambertw(-3-4j), (1.0750730665692549276 - 1.3251023817343588823j)) assert ae(fp.lambertw(10000+1000j), (7.2361526563371602186 + 0.087567810943839352034j)) assert ae(fp.lambertw(0.0, -1), -fp.inf) assert ae(fp.lambertw(1.0, -1), (-1.5339133197935745079 - 4.3751851530618983855j)) assert ae(fp.lambertw(7.5, -1), (0.44125668415098614999 - 4.8039842008452390179j)) assert ae(fp.lambertw(-0.25, -1), -2.1532923641103496492) assert ae(fp.lambertw(-10.0, -1), (1.3699809685212708156 - 2.140194527074713196j)) assert ae(fp.lambertw(0+0j, -1), -fp.inf) assert ae(fp.lambertw(4+0j, -1), (-0.15730793189620765317 - 4.6787800704666656212j)) assert ae(fp.lambertw(1000.5, -1), (4.9153765415404024736 - 5.4465682700815159569j)) assert ae(fp.lambertw(1e100, -1), (224.84272130101601052 - 6.2553713838167244141j)) assert ae(fp.lambertw(-1000.0, -1), (5.1501630246362515223 - 2.6641981432905204596j)) assert ae(fp.lambertw(1e-10, -1), (-26.303186778379041521 - 3.2650939117038283975j)) assert ae(fp.lambertw(1e-10j, -1), (-26.297238779529035028 - 1.6328071613455765135j)) assert ae(fp.lambertw(3+4j, -1), (0.25856740686699741676 - 3.8521166861614355895j)) assert ae(fp.lambertw(-3-4j, -1), (-0.32028750204310768396 - 6.8801677192091972343j)) assert ae(fp.lambertw(10000+1000j, -1), (7.0255308742285435567 - 5.5177506835734067601j)) assert ae(fp.lambertw(0.0, 2), -fp.inf) assert ae(fp.lambertw(1.0, 2), (-2.4015851048680028842 + 10.776299516115070898j)) assert ae(fp.lambertw(7.5, 2), (-0.38003357962843791529 + 10.960916473368746184j)) assert ae(fp.lambertw(-0.25, 2), (-4.0558735269061511898 + 13.852334658567271386j)) assert ae(fp.lambertw(-10.0, 2), (-0.34479123764318858696 + 14.112740596763592363j)) assert ae(fp.lambertw(0+0j, 2), -fp.inf) assert ae(fp.lambertw(4+0j, 2), (-1.0070343323804262788 + 10.903476551861683082j)) assert ae(fp.lambertw(1000.5, 2), (4.4076185165459395295 + 11.365524591091402177j)) assert ae(fp.lambertw(1e100, 2), (224.84156762724875878 + 12.510785262632255672j)) assert ae(fp.lambertw(-1000.0, 2), (4.1984245610246530756 + 14.420478573754313845j)) assert ae(fp.lambertw(1e-10, 2), (-26.362258095445866488 + 9.7800247407031482519j)) assert ae(fp.lambertw(1e-10j, 2), (-26.384250801683084252 + 11.403535950607739763j)) assert ae(fp.lambertw(3+4j, 2), (-0.86554679943333993562 + 11.849956798331992027j)) assert ae(fp.lambertw(-3-4j, 2), (-0.55792273874679112639 + 8.7173627024159324811j)) assert ae(fp.lambertw(10000+1000j, 2), (6.6223802254585662734 + 11.61348646825020766j)) def test_fp_stress_ei_e1(): # Can be tightened on recent Pythons with more accurate math/cmath ATOL = 1e-13 PTOL = 1e-12 v = fp.e1(1.1641532182693481445e-10) assert ae(v, 22.296641293693077672, tol=ATOL) assert type(v) is float v = fp.e1(0.25) assert ae(v, 1.0442826344437381945, tol=ATOL) assert type(v) is float v = fp.e1(1.0) assert ae(v, 0.21938393439552027368, tol=ATOL) assert type(v) is float v = fp.e1(2.0) assert ae(v, 0.048900510708061119567, tol=ATOL) assert type(v) is float v = fp.e1(5.0) assert ae(v, 0.0011482955912753257973, tol=ATOL) assert type(v) is float v = fp.e1(20.0) assert ae(v, 9.8355252906498816904e-11, tol=ATOL) assert type(v) is float v = fp.e1(30.0) assert ae(v, 3.0215520106888125448e-15, tol=ATOL) assert type(v) is float v = fp.e1(40.0) assert ae(v, 1.0367732614516569722e-19, tol=ATOL) assert type(v) is float v = fp.e1(50.0) assert ae(v, 3.7832640295504590187e-24, tol=ATOL) assert type(v) is float v = fp.e1(80.0) assert ae(v, 2.2285432586884729112e-37, tol=ATOL) assert type(v) is float v = fp.e1((1.1641532182693481445e-10 + 0.0j)) assert ae(v, (22.296641293693077672 + 0.0j), tol=ATOL) assert ae(v.real, 22.296641293693077672, tol=PTOL) assert v.imag == 0 v = fp.e1((0.25 + 0.0j)) assert ae(v, (1.0442826344437381945 + 0.0j), tol=ATOL) assert ae(v.real, 1.0442826344437381945, tol=PTOL) assert v.imag == 0 v = fp.e1((1.0 + 0.0j)) assert ae(v, (0.21938393439552027368 + 0.0j), tol=ATOL) assert ae(v.real, 0.21938393439552027368, tol=PTOL) assert v.imag == 0 v = fp.e1((2.0 + 0.0j)) assert ae(v, (0.048900510708061119567 + 0.0j), tol=ATOL) assert ae(v.real, 0.048900510708061119567, tol=PTOL) assert v.imag == 0 v = fp.e1((5.0 + 0.0j)) assert ae(v, (0.0011482955912753257973 + 0.0j), tol=ATOL) assert ae(v.real, 0.0011482955912753257973, tol=PTOL) assert v.imag == 0 v = fp.e1((20.0 + 0.0j)) assert ae(v, (9.8355252906498816904e-11 + 0.0j), tol=ATOL) assert ae(v.real, 9.8355252906498816904e-11, tol=PTOL) assert v.imag == 0 v = fp.e1((30.0 + 0.0j)) assert ae(v, (3.0215520106888125448e-15 + 0.0j), tol=ATOL) assert ae(v.real, 3.0215520106888125448e-15, tol=PTOL) assert v.imag == 0 v = fp.e1((40.0 + 0.0j)) assert ae(v, (1.0367732614516569722e-19 + 0.0j), tol=ATOL) assert ae(v.real, 1.0367732614516569722e-19, tol=PTOL) assert v.imag == 0 v = fp.e1((50.0 + 0.0j)) assert ae(v, (3.7832640295504590187e-24 + 0.0j), tol=ATOL) assert ae(v.real, 3.7832640295504590187e-24, tol=PTOL) assert v.imag == 0 v = fp.e1((80.0 + 0.0j)) assert ae(v, (2.2285432586884729112e-37 + 0.0j), tol=ATOL) assert ae(v.real, 2.2285432586884729112e-37, tol=PTOL) assert v.imag == 0 v = fp.e1((4.6566128730773925781e-10 + 1.1641532182693481445e-10j)) assert ae(v, (20.880034622014215597 - 0.24497866301044883237j), tol=ATOL) assert ae(v.real, 20.880034622014215597, tol=PTOL) assert ae(v.imag, -0.24497866301044883237, tol=PTOL) v = fp.e1((1.0 + 0.25j)) assert ae(v, (0.19731063945004229095 - 0.087366045774299963672j), tol=ATOL) assert ae(v.real, 0.19731063945004229095, tol=PTOL) assert ae(v.imag, -0.087366045774299963672, tol=PTOL) v = fp.e1((4.0 + 1.0j)) assert ae(v, (0.0013106173980145506944 - 0.0034542480199350626699j), tol=ATOL) assert ae(v.real, 0.0013106173980145506944, tol=PTOL) assert ae(v.imag, -0.0034542480199350626699, tol=PTOL) v = fp.e1((8.0 + 2.0j)) assert ae(v, (-0.000022278049065270225945 - 0.000029191940456521555288j), tol=ATOL) assert ae(v.real, -0.000022278049065270225945, tol=PTOL) assert ae(v.imag, -0.000029191940456521555288, tol=PTOL) v = fp.e1((20.0 + 5.0j)) assert ae(v, (4.7711374515765346894e-11 + 8.2902652405126947359e-11j), tol=ATOL) assert ae(v.real, 4.7711374515765346894e-11, tol=PTOL) assert ae(v.imag, 8.2902652405126947359e-11, tol=PTOL) v = fp.e1((80.0 + 20.0j)) assert ae(v, (3.8353473865788235787e-38 - 2.129247592349605139e-37j), tol=ATOL) assert ae(v.real, 3.8353473865788235787e-38, tol=PTOL) assert ae(v.imag, -2.129247592349605139e-37, tol=PTOL) v = fp.e1((120.0 + 30.0j)) assert ae(v, (2.3836002337480334716e-55 + 5.6704043587126198306e-55j), tol=ATOL) assert ae(v.real, 2.3836002337480334716e-55, tol=PTOL) assert ae(v.imag, 5.6704043587126198306e-55, tol=PTOL) v = fp.e1((160.0 + 40.0j)) assert ae(v, (-1.6238022898654510661e-72 - 1.104172355572287367e-72j), tol=ATOL) assert ae(v.real, -1.6238022898654510661e-72, tol=PTOL) assert ae(v.imag, -1.104172355572287367e-72, tol=PTOL) v = fp.e1((200.0 + 50.0j)) assert ae(v, (6.6800061461666228487e-90 + 1.4473816083541016115e-91j), tol=ATOL) assert ae(v.real, 6.6800061461666228487e-90, tol=PTOL) assert ae(v.imag, 1.4473816083541016115e-91, tol=PTOL) v = fp.e1((320.0 + 80.0j)) assert ae(v, (4.2737871527778786157e-143 + 3.1789935525785660314e-142j), tol=ATOL) assert ae(v.real, 4.2737871527778786157e-143, tol=PTOL) assert ae(v.imag, 3.1789935525785660314e-142, tol=PTOL) v = fp.e1((1.1641532182693481445e-10 + 1.1641532182693481445e-10j)) assert ae(v, (21.950067703413105017 - 0.7853981632810329878j), tol=ATOL) assert ae(v.real, 21.950067703413105017, tol=PTOL) assert ae(v.imag, -0.7853981632810329878, tol=PTOL) v = fp.e1((0.25 + 0.25j)) assert ae(v, (0.71092525792923287894 - 0.56491812441304194711j), tol=ATOL) assert ae(v.real, 0.71092525792923287894, tol=PTOL) assert ae(v.imag, -0.56491812441304194711, tol=PTOL) v = fp.e1((1.0 + 1.0j)) assert ae(v, (0.00028162445198141832551 - 0.17932453503935894015j), tol=ATOL) assert ae(v.real, 0.00028162445198141832551, tol=PTOL) assert ae(v.imag, -0.17932453503935894015, tol=PTOL) v = fp.e1((2.0 + 2.0j)) assert ae(v, (-0.033767089606562004246 - 0.018599414169750541925j), tol=ATOL) assert ae(v.real, -0.033767089606562004246, tol=PTOL) assert ae(v.imag, -0.018599414169750541925, tol=PTOL) v = fp.e1((5.0 + 5.0j)) assert ae(v, (0.0007266506660356393891 + 0.00047102780163522245054j), tol=ATOL) assert ae(v.real, 0.0007266506660356393891, tol=PTOL) assert ae(v.imag, 0.00047102780163522245054, tol=PTOL) v = fp.e1((20.0 + 20.0j)) assert ae(v, (-2.3824537449367396579e-11 - 6.6969873156525615158e-11j), tol=ATOL) assert ae(v.real, -2.3824537449367396579e-11, tol=PTOL) assert ae(v.imag, -6.6969873156525615158e-11, tol=PTOL) v = fp.e1((30.0 + 30.0j)) assert ae(v, (1.7316045841744061617e-15 + 1.3065678019487308689e-15j), tol=ATOL) assert ae(v.real, 1.7316045841744061617e-15, tol=PTOL) assert ae(v.imag, 1.3065678019487308689e-15, tol=PTOL) v = fp.e1((40.0 + 40.0j)) assert ae(v, (-7.4001043002899232182e-20 - 4.991847855336816304e-21j), tol=ATOL) assert ae(v.real, -7.4001043002899232182e-20, tol=PTOL) assert ae(v.imag, -4.991847855336816304e-21, tol=PTOL) v = fp.e1((50.0 + 50.0j)) assert ae(v, (2.3566128324644641219e-24 - 1.3188326726201614778e-24j), tol=ATOL) assert ae(v.real, 2.3566128324644641219e-24, tol=PTOL) assert ae(v.imag, -1.3188326726201614778e-24, tol=PTOL) v = fp.e1((80.0 + 80.0j)) assert ae(v, (9.8279750572186526673e-38 + 1.243952841288868831e-37j), tol=ATOL) assert ae(v.real, 9.8279750572186526673e-38, tol=PTOL) assert ae(v.imag, 1.243952841288868831e-37, tol=PTOL) v = fp.e1((1.1641532182693481445e-10 + 4.6566128730773925781e-10j)) assert ae(v, (20.880034621664969632 - 1.3258176632023711778j), tol=ATOL) assert ae(v.real, 20.880034621664969632, tol=PTOL) assert ae(v.imag, -1.3258176632023711778, tol=PTOL) v = fp.e1((0.25 + 1.0j)) assert ae(v, (-0.16868306393667788761 - 0.4858011885947426971j), tol=ATOL) assert ae(v.real, -0.16868306393667788761, tol=PTOL) assert ae(v.imag, -0.4858011885947426971, tol=PTOL) v = fp.e1((1.0 + 4.0j)) assert ae(v, (0.03373591813926547318 + 0.073523452241083821877j), tol=ATOL) assert ae(v.real, 0.03373591813926547318, tol=PTOL) assert ae(v.imag, 0.073523452241083821877, tol=PTOL) v = fp.e1((2.0 + 8.0j)) assert ae(v, (-0.015392833434733785143 - 0.0031747121557605415914j), tol=ATOL) assert ae(v.real, -0.015392833434733785143, tol=PTOL) assert ae(v.imag, -0.0031747121557605415914, tol=PTOL) v = fp.e1((5.0 + 20.0j)) assert ae(v, (-0.00024419662286542966525 - 0.00021008322966152755674j), tol=ATOL) assert ae(v.real, -0.00024419662286542966525, tol=PTOL) assert ae(v.imag, -0.00021008322966152755674, tol=PTOL) v = fp.e1((20.0 + 80.0j)) assert ae(v, (2.3255552781051330088e-11 + 8.9463918891349438007e-12j), tol=ATOL) assert ae(v.real, 2.3255552781051330088e-11, tol=PTOL) assert ae(v.imag, 8.9463918891349438007e-12, tol=PTOL) v = fp.e1((30.0 + 120.0j)) assert ae(v, (-2.7068919097124652332e-16 - 7.0477762411705130239e-16j), tol=ATOL) assert ae(v.real, -2.7068919097124652332e-16, tol=PTOL) assert ae(v.imag, -7.0477762411705130239e-16, tol=PTOL) v = fp.e1((40.0 + 160.0j)) assert ae(v, (-1.1695597827678024687e-20 + 2.2907401455645736661e-20j), tol=ATOL) assert ae(v.real, -1.1695597827678024687e-20, tol=PTOL) assert ae(v.imag, 2.2907401455645736661e-20, tol=PTOL) v = fp.e1((50.0 + 200.0j)) assert ae(v, (9.0323746914410162531e-25 - 2.3950601790033530935e-25j), tol=ATOL) assert ae(v.real, 9.0323746914410162531e-25, tol=PTOL) assert ae(v.imag, -2.3950601790033530935e-25, tol=PTOL) v = fp.e1((80.0 + 320.0j)) assert ae(v, (3.4819106748728063576e-38 - 4.215653005615772724e-38j), tol=ATOL) assert ae(v.real, 3.4819106748728063576e-38, tol=PTOL) assert ae(v.imag, -4.215653005615772724e-38, tol=PTOL) v = fp.e1((0.0 + 1.1641532182693481445e-10j)) assert ae(v, (22.29664129357666235 - 1.5707963266784812974j), tol=ATOL) assert ae(v.real, 22.29664129357666235, tol=PTOL) assert ae(v.imag, -1.5707963266784812974, tol=PTOL) v = fp.e1((0.0 + 0.25j)) assert ae(v, (0.82466306258094565309 - 1.3216627564751394551j), tol=ATOL) assert ae(v.real, 0.82466306258094565309, tol=PTOL) assert ae(v.imag, -1.3216627564751394551, tol=PTOL) v = fp.e1((0.0 + 1.0j)) assert ae(v, (-0.33740392290096813466 - 0.62471325642771360429j), tol=ATOL) assert ae(v.real, -0.33740392290096813466, tol=PTOL) assert ae(v.imag, -0.62471325642771360429, tol=PTOL) v = fp.e1((0.0 + 2.0j)) assert ae(v, (-0.4229808287748649957 + 0.034616650007798229345j), tol=ATOL) assert ae(v.real, -0.4229808287748649957, tol=PTOL) assert ae(v.imag, 0.034616650007798229345, tol=PTOL) v = fp.e1((0.0 + 5.0j)) assert ae(v, (0.19002974965664387862 - 0.020865081850222481957j), tol=ATOL) assert ae(v.real, 0.19002974965664387862, tol=PTOL) assert ae(v.imag, -0.020865081850222481957, tol=PTOL) v = fp.e1((0.0 + 20.0j)) assert ae(v, (-0.04441982084535331654 - 0.022554625751456779068j), tol=ATOL) assert ae(v.real, -0.04441982084535331654, tol=PTOL) assert ae(v.imag, -0.022554625751456779068, tol=PTOL) v = fp.e1((0.0 + 30.0j)) assert ae(v, (0.033032417282071143779 - 0.0040397867645455082476j), tol=ATOL) assert ae(v.real, 0.033032417282071143779, tol=PTOL) assert ae(v.imag, -0.0040397867645455082476, tol=PTOL) v = fp.e1((0.0 + 40.0j)) assert ae(v, (-0.019020007896208766962 + 0.016188792559887887544j), tol=ATOL) assert ae(v.real, -0.019020007896208766962, tol=PTOL) assert ae(v.imag, 0.016188792559887887544, tol=PTOL) v = fp.e1((0.0 + 50.0j)) assert ae(v, (0.0056283863241163054402 - 0.019179254308960724503j), tol=ATOL) assert ae(v.real, 0.0056283863241163054402, tol=PTOL) assert ae(v.imag, -0.019179254308960724503, tol=PTOL) v = fp.e1((0.0 + 80.0j)) assert ae(v, (0.012402501155070958192 + 0.0015345601175906961199j), tol=ATOL) assert ae(v.real, 0.012402501155070958192, tol=PTOL) assert ae(v.imag, 0.0015345601175906961199, tol=PTOL) v = fp.e1((-1.1641532182693481445e-10 + 4.6566128730773925781e-10j)) assert ae(v, (20.880034621432138988 - 1.8157749894560994861j), tol=ATOL) assert ae(v.real, 20.880034621432138988, tol=PTOL) assert ae(v.imag, -1.8157749894560994861, tol=PTOL) v = fp.e1((-0.25 + 1.0j)) assert ae(v, (-0.59066621214766308594 - 0.74474454765205036972j), tol=ATOL) assert ae(v.real, -0.59066621214766308594, tol=PTOL) assert ae(v.imag, -0.74474454765205036972, tol=PTOL) v = fp.e1((-1.0 + 4.0j)) assert ae(v, (0.49739047283060471093 + 0.41543605404038863174j), tol=ATOL) assert ae(v.real, 0.49739047283060471093, tol=PTOL) assert ae(v.imag, 0.41543605404038863174, tol=PTOL) v = fp.e1((-2.0 + 8.0j)) assert ae(v, (-0.8705211147733730969 + 0.24099328498605539667j), tol=ATOL) assert ae(v.real, -0.8705211147733730969, tol=PTOL) assert ae(v.imag, 0.24099328498605539667, tol=PTOL) v = fp.e1((-5.0 + 20.0j)) assert ae(v, (-7.0789514293925893007 - 1.6102177171960790536j), tol=ATOL) assert ae(v.real, -7.0789514293925893007, tol=PTOL) assert ae(v.imag, -1.6102177171960790536, tol=PTOL) v = fp.e1((-20.0 + 80.0j)) assert ae(v, (5855431.4907298084434 - 720920.93315409165707j), tol=ATOL) assert ae(v.real, 5855431.4907298084434, tol=PTOL) assert ae(v.imag, -720920.93315409165707, tol=PTOL) v = fp.e1((-30.0 + 120.0j)) assert ae(v, (-65402491644.703470747 - 56697658399.657460294j), tol=ATOL) assert ae(v.real, -65402491644.703470747, tol=PTOL) assert ae(v.imag, -56697658399.657460294, tol=PTOL) v = fp.e1((-40.0 + 160.0j)) assert ae(v, (25504929379604.776769 + 1429035198630573.2463j), tol=ATOL) assert ae(v.real, 25504929379604.776769, tol=PTOL) assert ae(v.imag, 1429035198630573.2463, tol=PTOL) v = fp.e1((-50.0 + 200.0j)) assert ae(v, (18437746526988116954.0 - 17146362239046152345.0j), tol=ATOL) assert ae(v.real, 18437746526988116954.0, tol=PTOL) assert ae(v.imag, -17146362239046152345.0, tol=PTOL) v = fp.e1((-80.0 + 320.0j)) assert ae(v, (3.3464697299634526706e+31 - 1.6473152633843023919e+32j), tol=ATOL) assert ae(v.real, 3.3464697299634526706e+31, tol=PTOL) assert ae(v.imag, -1.6473152633843023919e+32, tol=PTOL) v = fp.e1((-4.6566128730773925781e-10 + 1.1641532182693481445e-10j)) assert ae(v, (20.880034621082893023 - 2.8966139903465137624j), tol=ATOL) assert ae(v.real, 20.880034621082893023, tol=PTOL) assert ae(v.imag, -2.8966139903465137624, tol=PTOL) v = fp.e1((-1.0 + 0.25j)) assert ae(v, (-1.8942716983721074932 - 2.4689102827070540799j), tol=ATOL) assert ae(v.real, -1.8942716983721074932, tol=PTOL) assert ae(v.imag, -2.4689102827070540799, tol=PTOL) v = fp.e1((-4.0 + 1.0j)) assert ae(v, (-14.806699492675420438 + 9.1384225230837893776j), tol=ATOL) assert ae(v.real, -14.806699492675420438, tol=PTOL) assert ae(v.imag, 9.1384225230837893776, tol=PTOL) v = fp.e1((-8.0 + 2.0j)) assert ae(v, (54.633252667426386294 + 413.20318163814670688j), tol=ATOL) assert ae(v.real, 54.633252667426386294, tol=PTOL) assert ae(v.imag, 413.20318163814670688, tol=PTOL) v = fp.e1((-20.0 + 5.0j)) assert ae(v, (-711836.97165402624643 - 24745250.939695900956j), tol=ATOL) assert ae(v.real, -711836.97165402624643, tol=PTOL) assert ae(v.imag, -24745250.939695900956, tol=PTOL) v = fp.e1((-80.0 + 20.0j)) assert ae(v, (-4.2139911108612653091e+32 + 5.3367124741918251637e+32j), tol=ATOL) assert ae(v.real, -4.2139911108612653091e+32, tol=PTOL) assert ae(v.imag, 5.3367124741918251637e+32, tol=PTOL) v = fp.e1((-120.0 + 30.0j)) assert ae(v, (9.7760616203707508892e+48 - 1.058257682317195792e+50j), tol=ATOL) assert ae(v.real, 9.7760616203707508892e+48, tol=PTOL) assert ae(v.imag, -1.058257682317195792e+50, tol=PTOL) v = fp.e1((-160.0 + 40.0j)) assert ae(v, (8.7065541466623638861e+66 + 1.6577106725141739889e+67j), tol=ATOL) assert ae(v.real, 8.7065541466623638861e+66, tol=PTOL) assert ae(v.imag, 1.6577106725141739889e+67, tol=PTOL) v = fp.e1((-200.0 + 50.0j)) assert ae(v, (-3.070744996327018106e+84 - 1.7243244846769415903e+84j), tol=ATOL) assert ae(v.real, -3.070744996327018106e+84, tol=PTOL) assert ae(v.imag, -1.7243244846769415903e+84, tol=PTOL) v = fp.e1((-320.0 + 80.0j)) assert ae(v, (9.9960598637998647276e+135 - 2.6855081527595608863e+136j), tol=ATOL) assert ae(v.real, 9.9960598637998647276e+135, tol=PTOL) assert ae(v.imag, -2.6855081527595608863e+136, tol=PTOL) v = fp.e1(-1.1641532182693481445e-10) assert ae(v, (22.296641293460247028 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 22.296641293460247028, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-0.25) assert ae(v, (0.54254326466191372953 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 0.54254326466191372953, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-1.0) assert ae(v, (-1.8951178163559367555 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -1.8951178163559367555, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-2.0) assert ae(v, (-4.9542343560018901634 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -4.9542343560018901634, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-5.0) assert ae(v, (-40.185275355803177455 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -40.185275355803177455, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-20.0) assert ae(v, (-25615652.66405658882 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -25615652.66405658882, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-30.0) assert ae(v, (-368973209407.27419706 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -368973209407.27419706, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-40.0) assert ae(v, (-6039718263611241.5784 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -6039718263611241.5784, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-50.0) assert ae(v, (-1.0585636897131690963e+20 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -1.0585636897131690963e+20, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1(-80.0) assert ae(v, (-7.0146000049047999696e+32 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -7.0146000049047999696e+32, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-1.1641532182693481445e-10 + 0.0j)) assert ae(v, (22.296641293460247028 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 22.296641293460247028, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-0.25 + 0.0j)) assert ae(v, (0.54254326466191372953 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 0.54254326466191372953, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-1.0 + 0.0j)) assert ae(v, (-1.8951178163559367555 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -1.8951178163559367555, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-2.0 + 0.0j)) assert ae(v, (-4.9542343560018901634 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -4.9542343560018901634, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-5.0 + 0.0j)) assert ae(v, (-40.185275355803177455 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -40.185275355803177455, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-20.0 + 0.0j)) assert ae(v, (-25615652.66405658882 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -25615652.66405658882, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-30.0 + 0.0j)) assert ae(v, (-368973209407.27419706 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -368973209407.27419706, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-40.0 + 0.0j)) assert ae(v, (-6039718263611241.5784 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -6039718263611241.5784, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-50.0 + 0.0j)) assert ae(v, (-1.0585636897131690963e+20 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -1.0585636897131690963e+20, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-80.0 + 0.0j)) assert ae(v, (-7.0146000049047999696e+32 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -7.0146000049047999696e+32, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.e1((-4.6566128730773925781e-10 - 1.1641532182693481445e-10j)) assert ae(v, (20.880034621082893023 + 2.8966139903465137624j), tol=ATOL) assert ae(v.real, 20.880034621082893023, tol=PTOL) assert ae(v.imag, 2.8966139903465137624, tol=PTOL) v = fp.e1((-1.0 - 0.25j)) assert ae(v, (-1.8942716983721074932 + 2.4689102827070540799j), tol=ATOL) assert ae(v.real, -1.8942716983721074932, tol=PTOL) assert ae(v.imag, 2.4689102827070540799, tol=PTOL) v = fp.e1((-4.0 - 1.0j)) assert ae(v, (-14.806699492675420438 - 9.1384225230837893776j), tol=ATOL) assert ae(v.real, -14.806699492675420438, tol=PTOL) assert ae(v.imag, -9.1384225230837893776, tol=PTOL) v = fp.e1((-8.0 - 2.0j)) assert ae(v, (54.633252667426386294 - 413.20318163814670688j), tol=ATOL) assert ae(v.real, 54.633252667426386294, tol=PTOL) assert ae(v.imag, -413.20318163814670688, tol=PTOL) v = fp.e1((-20.0 - 5.0j)) assert ae(v, (-711836.97165402624643 + 24745250.939695900956j), tol=ATOL) assert ae(v.real, -711836.97165402624643, tol=PTOL) assert ae(v.imag, 24745250.939695900956, tol=PTOL) v = fp.e1((-80.0 - 20.0j)) assert ae(v, (-4.2139911108612653091e+32 - 5.3367124741918251637e+32j), tol=ATOL) assert ae(v.real, -4.2139911108612653091e+32, tol=PTOL) assert ae(v.imag, -5.3367124741918251637e+32, tol=PTOL) v = fp.e1((-120.0 - 30.0j)) assert ae(v, (9.7760616203707508892e+48 + 1.058257682317195792e+50j), tol=ATOL) assert ae(v.real, 9.7760616203707508892e+48, tol=PTOL) assert ae(v.imag, 1.058257682317195792e+50, tol=PTOL) v = fp.e1((-160.0 - 40.0j)) assert ae(v, (8.7065541466623638861e+66 - 1.6577106725141739889e+67j), tol=ATOL) assert ae(v.real, 8.7065541466623638861e+66, tol=PTOL) assert ae(v.imag, -1.6577106725141739889e+67, tol=PTOL) v = fp.e1((-200.0 - 50.0j)) assert ae(v, (-3.070744996327018106e+84 + 1.7243244846769415903e+84j), tol=ATOL) assert ae(v.real, -3.070744996327018106e+84, tol=PTOL) assert ae(v.imag, 1.7243244846769415903e+84, tol=PTOL) v = fp.e1((-320.0 - 80.0j)) assert ae(v, (9.9960598637998647276e+135 + 2.6855081527595608863e+136j), tol=ATOL) assert ae(v.real, 9.9960598637998647276e+135, tol=PTOL) assert ae(v.imag, 2.6855081527595608863e+136, tol=PTOL) v = fp.e1((-1.1641532182693481445e-10 - 1.1641532182693481445e-10j)) assert ae(v, (21.950067703180274374 + 2.356194490075929607j), tol=ATOL) assert ae(v.real, 21.950067703180274374, tol=PTOL) assert ae(v.imag, 2.356194490075929607, tol=PTOL) v = fp.e1((-0.25 - 0.25j)) assert ae(v, (0.21441047326710323254 + 2.0732153554307936389j), tol=ATOL) assert ae(v.real, 0.21441047326710323254, tol=PTOL) assert ae(v.imag, 2.0732153554307936389, tol=PTOL) v = fp.e1((-1.0 - 1.0j)) assert ae(v, (-1.7646259855638540684 + 0.7538228020792708192j), tol=ATOL) assert ae(v.real, -1.7646259855638540684, tol=PTOL) assert ae(v.imag, 0.7538228020792708192, tol=PTOL) v = fp.e1((-2.0 - 2.0j)) assert ae(v, (-1.8920781621855474089 - 2.1753697842428647236j), tol=ATOL) assert ae(v.real, -1.8920781621855474089, tol=PTOL) assert ae(v.imag, -2.1753697842428647236, tol=PTOL) v = fp.e1((-5.0 - 5.0j)) assert ae(v, (13.470936071475245856 + 18.464085049321024206j), tol=ATOL) assert ae(v.real, 13.470936071475245856, tol=PTOL) assert ae(v.imag, 18.464085049321024206, tol=PTOL) v = fp.e1((-20.0 - 20.0j)) assert ae(v, (-16589317.398788971896 - 5831702.3296441771206j), tol=ATOL) assert ae(v.real, -16589317.398788971896, tol=PTOL) assert ae(v.imag, -5831702.3296441771206, tol=PTOL) v = fp.e1((-30.0 - 30.0j)) assert ae(v, (154596484273.69322527 + 204179357837.41389696j), tol=ATOL) assert ae(v.real, 154596484273.69322527, tol=PTOL) assert ae(v.imag, 204179357837.41389696, tol=PTOL) v = fp.e1((-40.0 - 40.0j)) assert ae(v, (-287512180321448.45408 - 4203502407932314.974j), tol=ATOL) assert ae(v.real, -287512180321448.45408, tol=PTOL) assert ae(v.imag, -4203502407932314.974, tol=PTOL) v = fp.e1((-50.0 - 50.0j)) assert ae(v, (-36128528616649268826.0 + 64648801861338741963.0j), tol=ATOL) assert ae(v.real, -36128528616649268826.0, tol=PTOL) assert ae(v.imag, 64648801861338741963.0, tol=PTOL) v = fp.e1((-80.0 - 80.0j)) assert ae(v, (3.8674816337930010217e+32 + 3.0540709639658071041e+32j), tol=ATOL) assert ae(v.real, 3.8674816337930010217e+32, tol=PTOL) assert ae(v.imag, 3.0540709639658071041e+32, tol=PTOL) v = fp.e1((-1.1641532182693481445e-10 - 4.6566128730773925781e-10j)) assert ae(v, (20.880034621432138988 + 1.8157749894560994861j), tol=ATOL) assert ae(v.real, 20.880034621432138988, tol=PTOL) assert ae(v.imag, 1.8157749894560994861, tol=PTOL) v = fp.e1((-0.25 - 1.0j)) assert ae(v, (-0.59066621214766308594 + 0.74474454765205036972j), tol=ATOL) assert ae(v.real, -0.59066621214766308594, tol=PTOL) assert ae(v.imag, 0.74474454765205036972, tol=PTOL) v = fp.e1((-1.0 - 4.0j)) assert ae(v, (0.49739047283060471093 - 0.41543605404038863174j), tol=ATOL) assert ae(v.real, 0.49739047283060471093, tol=PTOL) assert ae(v.imag, -0.41543605404038863174, tol=PTOL) v = fp.e1((-2.0 - 8.0j)) assert ae(v, (-0.8705211147733730969 - 0.24099328498605539667j), tol=ATOL) assert ae(v.real, -0.8705211147733730969, tol=PTOL) assert ae(v.imag, -0.24099328498605539667, tol=PTOL) v = fp.e1((-5.0 - 20.0j)) assert ae(v, (-7.0789514293925893007 + 1.6102177171960790536j), tol=ATOL) assert ae(v.real, -7.0789514293925893007, tol=PTOL) assert ae(v.imag, 1.6102177171960790536, tol=PTOL) v = fp.e1((-20.0 - 80.0j)) assert ae(v, (5855431.4907298084434 + 720920.93315409165707j), tol=ATOL) assert ae(v.real, 5855431.4907298084434, tol=PTOL) assert ae(v.imag, 720920.93315409165707, tol=PTOL) v = fp.e1((-30.0 - 120.0j)) assert ae(v, (-65402491644.703470747 + 56697658399.657460294j), tol=ATOL) assert ae(v.real, -65402491644.703470747, tol=PTOL) assert ae(v.imag, 56697658399.657460294, tol=PTOL) v = fp.e1((-40.0 - 160.0j)) assert ae(v, (25504929379604.776769 - 1429035198630573.2463j), tol=ATOL) assert ae(v.real, 25504929379604.776769, tol=PTOL) assert ae(v.imag, -1429035198630573.2463, tol=PTOL) v = fp.e1((-50.0 - 200.0j)) assert ae(v, (18437746526988116954.0 + 17146362239046152345.0j), tol=ATOL) assert ae(v.real, 18437746526988116954.0, tol=PTOL) assert ae(v.imag, 17146362239046152345.0, tol=PTOL) v = fp.e1((-80.0 - 320.0j)) assert ae(v, (3.3464697299634526706e+31 + 1.6473152633843023919e+32j), tol=ATOL) assert ae(v.real, 3.3464697299634526706e+31, tol=PTOL) assert ae(v.imag, 1.6473152633843023919e+32, tol=PTOL) v = fp.e1((0.0 - 1.1641532182693481445e-10j)) assert ae(v, (22.29664129357666235 + 1.5707963266784812974j), tol=ATOL) assert ae(v.real, 22.29664129357666235, tol=PTOL) assert ae(v.imag, 1.5707963266784812974, tol=PTOL) v = fp.e1((0.0 - 0.25j)) assert ae(v, (0.82466306258094565309 + 1.3216627564751394551j), tol=ATOL) assert ae(v.real, 0.82466306258094565309, tol=PTOL) assert ae(v.imag, 1.3216627564751394551, tol=PTOL) v = fp.e1((0.0 - 1.0j)) assert ae(v, (-0.33740392290096813466 + 0.62471325642771360429j), tol=ATOL) assert ae(v.real, -0.33740392290096813466, tol=PTOL) assert ae(v.imag, 0.62471325642771360429, tol=PTOL) v = fp.e1((0.0 - 2.0j)) assert ae(v, (-0.4229808287748649957 - 0.034616650007798229345j), tol=ATOL) assert ae(v.real, -0.4229808287748649957, tol=PTOL) assert ae(v.imag, -0.034616650007798229345, tol=PTOL) v = fp.e1((0.0 - 5.0j)) assert ae(v, (0.19002974965664387862 + 0.020865081850222481957j), tol=ATOL) assert ae(v.real, 0.19002974965664387862, tol=PTOL) assert ae(v.imag, 0.020865081850222481957, tol=PTOL) v = fp.e1((0.0 - 20.0j)) assert ae(v, (-0.04441982084535331654 + 0.022554625751456779068j), tol=ATOL) assert ae(v.real, -0.04441982084535331654, tol=PTOL) assert ae(v.imag, 0.022554625751456779068, tol=PTOL) v = fp.e1((0.0 - 30.0j)) assert ae(v, (0.033032417282071143779 + 0.0040397867645455082476j), tol=ATOL) assert ae(v.real, 0.033032417282071143779, tol=PTOL) assert ae(v.imag, 0.0040397867645455082476, tol=PTOL) v = fp.e1((0.0 - 40.0j)) assert ae(v, (-0.019020007896208766962 - 0.016188792559887887544j), tol=ATOL) assert ae(v.real, -0.019020007896208766962, tol=PTOL) assert ae(v.imag, -0.016188792559887887544, tol=PTOL) v = fp.e1((0.0 - 50.0j)) assert ae(v, (0.0056283863241163054402 + 0.019179254308960724503j), tol=ATOL) assert ae(v.real, 0.0056283863241163054402, tol=PTOL) assert ae(v.imag, 0.019179254308960724503, tol=PTOL) v = fp.e1((0.0 - 80.0j)) assert ae(v, (0.012402501155070958192 - 0.0015345601175906961199j), tol=ATOL) assert ae(v.real, 0.012402501155070958192, tol=PTOL) assert ae(v.imag, -0.0015345601175906961199, tol=PTOL) v = fp.e1((1.1641532182693481445e-10 - 4.6566128730773925781e-10j)) assert ae(v, (20.880034621664969632 + 1.3258176632023711778j), tol=ATOL) assert ae(v.real, 20.880034621664969632, tol=PTOL) assert ae(v.imag, 1.3258176632023711778, tol=PTOL) v = fp.e1((0.25 - 1.0j)) assert ae(v, (-0.16868306393667788761 + 0.4858011885947426971j), tol=ATOL) assert ae(v.real, -0.16868306393667788761, tol=PTOL) assert ae(v.imag, 0.4858011885947426971, tol=PTOL) v = fp.e1((1.0 - 4.0j)) assert ae(v, (0.03373591813926547318 - 0.073523452241083821877j), tol=ATOL) assert ae(v.real, 0.03373591813926547318, tol=PTOL) assert ae(v.imag, -0.073523452241083821877, tol=PTOL) v = fp.e1((2.0 - 8.0j)) assert ae(v, (-0.015392833434733785143 + 0.0031747121557605415914j), tol=ATOL) assert ae(v.real, -0.015392833434733785143, tol=PTOL) assert ae(v.imag, 0.0031747121557605415914, tol=PTOL) v = fp.e1((5.0 - 20.0j)) assert ae(v, (-0.00024419662286542966525 + 0.00021008322966152755674j), tol=ATOL) assert ae(v.real, -0.00024419662286542966525, tol=PTOL) assert ae(v.imag, 0.00021008322966152755674, tol=PTOL) v = fp.e1((20.0 - 80.0j)) assert ae(v, (2.3255552781051330088e-11 - 8.9463918891349438007e-12j), tol=ATOL) assert ae(v.real, 2.3255552781051330088e-11, tol=PTOL) assert ae(v.imag, -8.9463918891349438007e-12, tol=PTOL) v = fp.e1((30.0 - 120.0j)) assert ae(v, (-2.7068919097124652332e-16 + 7.0477762411705130239e-16j), tol=ATOL) assert ae(v.real, -2.7068919097124652332e-16, tol=PTOL) assert ae(v.imag, 7.0477762411705130239e-16, tol=PTOL) v = fp.e1((40.0 - 160.0j)) assert ae(v, (-1.1695597827678024687e-20 - 2.2907401455645736661e-20j), tol=ATOL) assert ae(v.real, -1.1695597827678024687e-20, tol=PTOL) assert ae(v.imag, -2.2907401455645736661e-20, tol=PTOL) v = fp.e1((50.0 - 200.0j)) assert ae(v, (9.0323746914410162531e-25 + 2.3950601790033530935e-25j), tol=ATOL) assert ae(v.real, 9.0323746914410162531e-25, tol=PTOL) assert ae(v.imag, 2.3950601790033530935e-25, tol=PTOL) v = fp.e1((80.0 - 320.0j)) assert ae(v, (3.4819106748728063576e-38 + 4.215653005615772724e-38j), tol=ATOL) assert ae(v.real, 3.4819106748728063576e-38, tol=PTOL) assert ae(v.imag, 4.215653005615772724e-38, tol=PTOL) v = fp.e1((1.1641532182693481445e-10 - 1.1641532182693481445e-10j)) assert ae(v, (21.950067703413105017 + 0.7853981632810329878j), tol=ATOL) assert ae(v.real, 21.950067703413105017, tol=PTOL) assert ae(v.imag, 0.7853981632810329878, tol=PTOL) v = fp.e1((0.25 - 0.25j)) assert ae(v, (0.71092525792923287894 + 0.56491812441304194711j), tol=ATOL) assert ae(v.real, 0.71092525792923287894, tol=PTOL) assert ae(v.imag, 0.56491812441304194711, tol=PTOL) v = fp.e1((1.0 - 1.0j)) assert ae(v, (0.00028162445198141832551 + 0.17932453503935894015j), tol=ATOL) assert ae(v.real, 0.00028162445198141832551, tol=PTOL) assert ae(v.imag, 0.17932453503935894015, tol=PTOL) v = fp.e1((2.0 - 2.0j)) assert ae(v, (-0.033767089606562004246 + 0.018599414169750541925j), tol=ATOL) assert ae(v.real, -0.033767089606562004246, tol=PTOL) assert ae(v.imag, 0.018599414169750541925, tol=PTOL) v = fp.e1((5.0 - 5.0j)) assert ae(v, (0.0007266506660356393891 - 0.00047102780163522245054j), tol=ATOL) assert ae(v.real, 0.0007266506660356393891, tol=PTOL) assert ae(v.imag, -0.00047102780163522245054, tol=PTOL) v = fp.e1((20.0 - 20.0j)) assert ae(v, (-2.3824537449367396579e-11 + 6.6969873156525615158e-11j), tol=ATOL) assert ae(v.real, -2.3824537449367396579e-11, tol=PTOL) assert ae(v.imag, 6.6969873156525615158e-11, tol=PTOL) v = fp.e1((30.0 - 30.0j)) assert ae(v, (1.7316045841744061617e-15 - 1.3065678019487308689e-15j), tol=ATOL) assert ae(v.real, 1.7316045841744061617e-15, tol=PTOL) assert ae(v.imag, -1.3065678019487308689e-15, tol=PTOL) v = fp.e1((40.0 - 40.0j)) assert ae(v, (-7.4001043002899232182e-20 + 4.991847855336816304e-21j), tol=ATOL) assert ae(v.real, -7.4001043002899232182e-20, tol=PTOL) assert ae(v.imag, 4.991847855336816304e-21, tol=PTOL) v = fp.e1((50.0 - 50.0j)) assert ae(v, (2.3566128324644641219e-24 + 1.3188326726201614778e-24j), tol=ATOL) assert ae(v.real, 2.3566128324644641219e-24, tol=PTOL) assert ae(v.imag, 1.3188326726201614778e-24, tol=PTOL) v = fp.e1((80.0 - 80.0j)) assert ae(v, (9.8279750572186526673e-38 - 1.243952841288868831e-37j), tol=ATOL) assert ae(v.real, 9.8279750572186526673e-38, tol=PTOL) assert ae(v.imag, -1.243952841288868831e-37, tol=PTOL) v = fp.e1((4.6566128730773925781e-10 - 1.1641532182693481445e-10j)) assert ae(v, (20.880034622014215597 + 0.24497866301044883237j), tol=ATOL) assert ae(v.real, 20.880034622014215597, tol=PTOL) assert ae(v.imag, 0.24497866301044883237, tol=PTOL) v = fp.e1((1.0 - 0.25j)) assert ae(v, (0.19731063945004229095 + 0.087366045774299963672j), tol=ATOL) assert ae(v.real, 0.19731063945004229095, tol=PTOL) assert ae(v.imag, 0.087366045774299963672, tol=PTOL) v = fp.e1((4.0 - 1.0j)) assert ae(v, (0.0013106173980145506944 + 0.0034542480199350626699j), tol=ATOL) assert ae(v.real, 0.0013106173980145506944, tol=PTOL) assert ae(v.imag, 0.0034542480199350626699, tol=PTOL) v = fp.e1((8.0 - 2.0j)) assert ae(v, (-0.000022278049065270225945 + 0.000029191940456521555288j), tol=ATOL) assert ae(v.real, -0.000022278049065270225945, tol=PTOL) assert ae(v.imag, 0.000029191940456521555288, tol=PTOL) v = fp.e1((20.0 - 5.0j)) assert ae(v, (4.7711374515765346894e-11 - 8.2902652405126947359e-11j), tol=ATOL) assert ae(v.real, 4.7711374515765346894e-11, tol=PTOL) assert ae(v.imag, -8.2902652405126947359e-11, tol=PTOL) v = fp.e1((80.0 - 20.0j)) assert ae(v, (3.8353473865788235787e-38 + 2.129247592349605139e-37j), tol=ATOL) assert ae(v.real, 3.8353473865788235787e-38, tol=PTOL) assert ae(v.imag, 2.129247592349605139e-37, tol=PTOL) v = fp.e1((120.0 - 30.0j)) assert ae(v, (2.3836002337480334716e-55 - 5.6704043587126198306e-55j), tol=ATOL) assert ae(v.real, 2.3836002337480334716e-55, tol=PTOL) assert ae(v.imag, -5.6704043587126198306e-55, tol=PTOL) v = fp.e1((160.0 - 40.0j)) assert ae(v, (-1.6238022898654510661e-72 + 1.104172355572287367e-72j), tol=ATOL) assert ae(v.real, -1.6238022898654510661e-72, tol=PTOL) assert ae(v.imag, 1.104172355572287367e-72, tol=PTOL) v = fp.e1((200.0 - 50.0j)) assert ae(v, (6.6800061461666228487e-90 - 1.4473816083541016115e-91j), tol=ATOL) assert ae(v.real, 6.6800061461666228487e-90, tol=PTOL) assert ae(v.imag, -1.4473816083541016115e-91, tol=PTOL) v = fp.e1((320.0 - 80.0j)) assert ae(v, (4.2737871527778786157e-143 - 3.1789935525785660314e-142j), tol=ATOL) assert ae(v.real, 4.2737871527778786157e-143, tol=PTOL) assert ae(v.imag, -3.1789935525785660314e-142, tol=PTOL) v = fp.ei(1.1641532182693481445e-10) assert ae(v, -22.296641293460247028, tol=ATOL) assert type(v) is float v = fp.ei(0.25) assert ae(v, -0.54254326466191372953, tol=ATOL) assert type(v) is float v = fp.ei(1.0) assert ae(v, 1.8951178163559367555, tol=ATOL) assert type(v) is float v = fp.ei(2.0) assert ae(v, 4.9542343560018901634, tol=ATOL) assert type(v) is float v = fp.ei(5.0) assert ae(v, 40.185275355803177455, tol=ATOL) assert type(v) is float v = fp.ei(20.0) assert ae(v, 25615652.66405658882, tol=ATOL) assert type(v) is float v = fp.ei(30.0) assert ae(v, 368973209407.27419706, tol=ATOL) assert type(v) is float v = fp.ei(40.0) assert ae(v, 6039718263611241.5784, tol=ATOL) assert type(v) is float v = fp.ei(50.0) assert ae(v, 1.0585636897131690963e+20, tol=ATOL) assert type(v) is float v = fp.ei(80.0) assert ae(v, 7.0146000049047999696e+32, tol=ATOL) assert type(v) is float v = fp.ei((1.1641532182693481445e-10 + 0.0j)) assert ae(v, (-22.296641293460247028 + 0.0j), tol=ATOL) assert ae(v.real, -22.296641293460247028, tol=PTOL) assert v.imag == 0 v = fp.ei((0.25 + 0.0j)) assert ae(v, (-0.54254326466191372953 + 0.0j), tol=ATOL) assert ae(v.real, -0.54254326466191372953, tol=PTOL) assert v.imag == 0 v = fp.ei((1.0 + 0.0j)) assert ae(v, (1.8951178163559367555 + 0.0j), tol=ATOL) assert ae(v.real, 1.8951178163559367555, tol=PTOL) assert v.imag == 0 v = fp.ei((2.0 + 0.0j)) assert ae(v, (4.9542343560018901634 + 0.0j), tol=ATOL) assert ae(v.real, 4.9542343560018901634, tol=PTOL) assert v.imag == 0 v = fp.ei((5.0 + 0.0j)) assert ae(v, (40.185275355803177455 + 0.0j), tol=ATOL) assert ae(v.real, 40.185275355803177455, tol=PTOL) assert v.imag == 0 v = fp.ei((20.0 + 0.0j)) assert ae(v, (25615652.66405658882 + 0.0j), tol=ATOL) assert ae(v.real, 25615652.66405658882, tol=PTOL) assert v.imag == 0 v = fp.ei((30.0 + 0.0j)) assert ae(v, (368973209407.27419706 + 0.0j), tol=ATOL) assert ae(v.real, 368973209407.27419706, tol=PTOL) assert v.imag == 0 v = fp.ei((40.0 + 0.0j)) assert ae(v, (6039718263611241.5784 + 0.0j), tol=ATOL) assert ae(v.real, 6039718263611241.5784, tol=PTOL) assert v.imag == 0 v = fp.ei((50.0 + 0.0j)) assert ae(v, (1.0585636897131690963e+20 + 0.0j), tol=ATOL) assert ae(v.real, 1.0585636897131690963e+20, tol=PTOL) assert v.imag == 0 v = fp.ei((80.0 + 0.0j)) assert ae(v, (7.0146000049047999696e+32 + 0.0j), tol=ATOL) assert ae(v.real, 7.0146000049047999696e+32, tol=PTOL) assert v.imag == 0 v = fp.ei((4.6566128730773925781e-10 + 1.1641532182693481445e-10j)) assert ae(v, (-20.880034621082893023 + 0.24497866324327947603j), tol=ATOL) assert ae(v.real, -20.880034621082893023, tol=PTOL) assert ae(v.imag, 0.24497866324327947603, tol=PTOL) v = fp.ei((1.0 + 0.25j)) assert ae(v, (1.8942716983721074932 + 0.67268237088273915854j), tol=ATOL) assert ae(v.real, 1.8942716983721074932, tol=PTOL) assert ae(v.imag, 0.67268237088273915854, tol=PTOL) v = fp.ei((4.0 + 1.0j)) assert ae(v, (14.806699492675420438 + 12.280015176673582616j), tol=ATOL) assert ae(v.real, 14.806699492675420438, tol=PTOL) assert ae(v.imag, 12.280015176673582616, tol=PTOL) v = fp.ei((8.0 + 2.0j)) assert ae(v, (-54.633252667426386294 + 416.34477429173650012j), tol=ATOL) assert ae(v.real, -54.633252667426386294, tol=PTOL) assert ae(v.imag, 416.34477429173650012, tol=PTOL) v = fp.ei((20.0 + 5.0j)) assert ae(v, (711836.97165402624643 - 24745247.798103247366j), tol=ATOL) assert ae(v.real, 711836.97165402624643, tol=PTOL) assert ae(v.imag, -24745247.798103247366, tol=PTOL) v = fp.ei((80.0 + 20.0j)) assert ae(v, (4.2139911108612653091e+32 + 5.3367124741918251637e+32j), tol=ATOL) assert ae(v.real, 4.2139911108612653091e+32, tol=PTOL) assert ae(v.imag, 5.3367124741918251637e+32, tol=PTOL) v = fp.ei((120.0 + 30.0j)) assert ae(v, (-9.7760616203707508892e+48 - 1.058257682317195792e+50j), tol=ATOL) assert ae(v.real, -9.7760616203707508892e+48, tol=PTOL) assert ae(v.imag, -1.058257682317195792e+50, tol=PTOL) v = fp.ei((160.0 + 40.0j)) assert ae(v, (-8.7065541466623638861e+66 + 1.6577106725141739889e+67j), tol=ATOL) assert ae(v.real, -8.7065541466623638861e+66, tol=PTOL) assert ae(v.imag, 1.6577106725141739889e+67, tol=PTOL) v = fp.ei((200.0 + 50.0j)) assert ae(v, (3.070744996327018106e+84 - 1.7243244846769415903e+84j), tol=ATOL) assert ae(v.real, 3.070744996327018106e+84, tol=PTOL) assert ae(v.imag, -1.7243244846769415903e+84, tol=PTOL) v = fp.ei((320.0 + 80.0j)) assert ae(v, (-9.9960598637998647276e+135 - 2.6855081527595608863e+136j), tol=ATOL) assert ae(v.real, -9.9960598637998647276e+135, tol=PTOL) assert ae(v.imag, -2.6855081527595608863e+136, tol=PTOL) v = fp.ei((1.1641532182693481445e-10 + 1.1641532182693481445e-10j)) assert ae(v, (-21.950067703180274374 + 0.78539816351386363145j), tol=ATOL) assert ae(v.real, -21.950067703180274374, tol=PTOL) assert ae(v.imag, 0.78539816351386363145, tol=PTOL) v = fp.ei((0.25 + 0.25j)) assert ae(v, (-0.21441047326710323254 + 1.0683772981589995996j), tol=ATOL) assert ae(v.real, -0.21441047326710323254, tol=PTOL) assert ae(v.imag, 1.0683772981589995996, tol=PTOL) v = fp.ei((1.0 + 1.0j)) assert ae(v, (1.7646259855638540684 + 2.3877698515105224193j), tol=ATOL) assert ae(v.real, 1.7646259855638540684, tol=PTOL) assert ae(v.imag, 2.3877698515105224193, tol=PTOL) v = fp.ei((2.0 + 2.0j)) assert ae(v, (1.8920781621855474089 + 5.3169624378326579621j), tol=ATOL) assert ae(v.real, 1.8920781621855474089, tol=PTOL) assert ae(v.imag, 5.3169624378326579621, tol=PTOL) v = fp.ei((5.0 + 5.0j)) assert ae(v, (-13.470936071475245856 - 15.322492395731230968j), tol=ATOL) assert ae(v.real, -13.470936071475245856, tol=PTOL) assert ae(v.imag, -15.322492395731230968, tol=PTOL) v = fp.ei((20.0 + 20.0j)) assert ae(v, (16589317.398788971896 + 5831705.4712368307104j), tol=ATOL) assert ae(v.real, 16589317.398788971896, tol=PTOL) assert ae(v.imag, 5831705.4712368307104, tol=PTOL) v = fp.ei((30.0 + 30.0j)) assert ae(v, (-154596484273.69322527 - 204179357834.2723043j), tol=ATOL) assert ae(v.real, -154596484273.69322527, tol=PTOL) assert ae(v.imag, -204179357834.2723043, tol=PTOL) v = fp.ei((40.0 + 40.0j)) assert ae(v, (287512180321448.45408 + 4203502407932318.1156j), tol=ATOL) assert ae(v.real, 287512180321448.45408, tol=PTOL) assert ae(v.imag, 4203502407932318.1156, tol=PTOL) v = fp.ei((50.0 + 50.0j)) assert ae(v, (36128528616649268826.0 - 64648801861338741960.0j), tol=ATOL) assert ae(v.real, 36128528616649268826.0, tol=PTOL) assert ae(v.imag, -64648801861338741960.0, tol=PTOL) v = fp.ei((80.0 + 80.0j)) assert ae(v, (-3.8674816337930010217e+32 - 3.0540709639658071041e+32j), tol=ATOL) assert ae(v.real, -3.8674816337930010217e+32, tol=PTOL) assert ae(v.imag, -3.0540709639658071041e+32, tol=PTOL) v = fp.ei((1.1641532182693481445e-10 + 4.6566128730773925781e-10j)) assert ae(v, (-20.880034621432138988 + 1.3258176641336937524j), tol=ATOL) assert ae(v.real, -20.880034621432138988, tol=PTOL) assert ae(v.imag, 1.3258176641336937524, tol=PTOL) v = fp.ei((0.25 + 1.0j)) assert ae(v, (0.59066621214766308594 + 2.3968481059377428687j), tol=ATOL) assert ae(v.real, 0.59066621214766308594, tol=PTOL) assert ae(v.imag, 2.3968481059377428687, tol=PTOL) v = fp.ei((1.0 + 4.0j)) assert ae(v, (-0.49739047283060471093 + 3.5570287076301818702j), tol=ATOL) assert ae(v.real, -0.49739047283060471093, tol=PTOL) assert ae(v.imag, 3.5570287076301818702, tol=PTOL) v = fp.ei((2.0 + 8.0j)) assert ae(v, (0.8705211147733730969 + 3.3825859385758486351j), tol=ATOL) assert ae(v.real, 0.8705211147733730969, tol=PTOL) assert ae(v.imag, 3.3825859385758486351, tol=PTOL) v = fp.ei((5.0 + 20.0j)) assert ae(v, (7.0789514293925893007 + 1.5313749363937141849j), tol=ATOL) assert ae(v.real, 7.0789514293925893007, tol=PTOL) assert ae(v.imag, 1.5313749363937141849, tol=PTOL) v = fp.ei((20.0 + 80.0j)) assert ae(v, (-5855431.4907298084434 - 720917.79156143806727j), tol=ATOL) assert ae(v.real, -5855431.4907298084434, tol=PTOL) assert ae(v.imag, -720917.79156143806727, tol=PTOL) v = fp.ei((30.0 + 120.0j)) assert ae(v, (65402491644.703470747 - 56697658396.51586764j), tol=ATOL) assert ae(v.real, 65402491644.703470747, tol=PTOL) assert ae(v.imag, -56697658396.51586764, tol=PTOL) v = fp.ei((40.0 + 160.0j)) assert ae(v, (-25504929379604.776769 + 1429035198630576.3879j), tol=ATOL) assert ae(v.real, -25504929379604.776769, tol=PTOL) assert ae(v.imag, 1429035198630576.3879, tol=PTOL) v = fp.ei((50.0 + 200.0j)) assert ae(v, (-18437746526988116954.0 - 17146362239046152342.0j), tol=ATOL) assert ae(v.real, -18437746526988116954.0, tol=PTOL) assert ae(v.imag, -17146362239046152342.0, tol=PTOL) v = fp.ei((80.0 + 320.0j)) assert ae(v, (-3.3464697299634526706e+31 - 1.6473152633843023919e+32j), tol=ATOL) assert ae(v.real, -3.3464697299634526706e+31, tol=PTOL) assert ae(v.imag, -1.6473152633843023919e+32, tol=PTOL) v = fp.ei((0.0 + 1.1641532182693481445e-10j)) assert ae(v, (-22.29664129357666235 + 1.5707963269113119411j), tol=ATOL) assert ae(v.real, -22.29664129357666235, tol=PTOL) assert ae(v.imag, 1.5707963269113119411, tol=PTOL) v = fp.ei((0.0 + 0.25j)) assert ae(v, (-0.82466306258094565309 + 1.8199298971146537833j), tol=ATOL) assert ae(v.real, -0.82466306258094565309, tol=PTOL) assert ae(v.imag, 1.8199298971146537833, tol=PTOL) v = fp.ei((0.0 + 1.0j)) assert ae(v, (0.33740392290096813466 + 2.5168793971620796342j), tol=ATOL) assert ae(v.real, 0.33740392290096813466, tol=PTOL) assert ae(v.imag, 2.5168793971620796342, tol=PTOL) v = fp.ei((0.0 + 2.0j)) assert ae(v, (0.4229808287748649957 + 3.1762093035975914678j), tol=ATOL) assert ae(v.real, 0.4229808287748649957, tol=PTOL) assert ae(v.imag, 3.1762093035975914678, tol=PTOL) v = fp.ei((0.0 + 5.0j)) assert ae(v, (-0.19002974965664387862 + 3.1207275717395707565j), tol=ATOL) assert ae(v.real, -0.19002974965664387862, tol=PTOL) assert ae(v.imag, 3.1207275717395707565, tol=PTOL) v = fp.ei((0.0 + 20.0j)) assert ae(v, (0.04441982084535331654 + 3.1190380278383364594j), tol=ATOL) assert ae(v.real, 0.04441982084535331654, tol=PTOL) assert ae(v.imag, 3.1190380278383364594, tol=PTOL) v = fp.ei((0.0 + 30.0j)) assert ae(v, (-0.033032417282071143779 + 3.1375528668252477302j), tol=ATOL) assert ae(v.real, -0.033032417282071143779, tol=PTOL) assert ae(v.imag, 3.1375528668252477302, tol=PTOL) v = fp.ei((0.0 + 40.0j)) assert ae(v, (0.019020007896208766962 + 3.157781446149681126j), tol=ATOL) assert ae(v.real, 0.019020007896208766962, tol=PTOL) assert ae(v.imag, 3.157781446149681126, tol=PTOL) v = fp.ei((0.0 + 50.0j)) assert ae(v, (-0.0056283863241163054402 + 3.122413399280832514j), tol=ATOL) assert ae(v.real, -0.0056283863241163054402, tol=PTOL) assert ae(v.imag, 3.122413399280832514, tol=PTOL) v = fp.ei((0.0 + 80.0j)) assert ae(v, (-0.012402501155070958192 + 3.1431272137073839346j), tol=ATOL) assert ae(v.real, -0.012402501155070958192, tol=PTOL) assert ae(v.imag, 3.1431272137073839346, tol=PTOL) v = fp.ei((-1.1641532182693481445e-10 + 4.6566128730773925781e-10j)) assert ae(v, (-20.880034621664969632 + 1.8157749903874220607j), tol=ATOL) assert ae(v.real, -20.880034621664969632, tol=PTOL) assert ae(v.imag, 1.8157749903874220607, tol=PTOL) v = fp.ei((-0.25 + 1.0j)) assert ae(v, (0.16868306393667788761 + 2.6557914649950505414j), tol=ATOL) assert ae(v.real, 0.16868306393667788761, tol=PTOL) assert ae(v.imag, 2.6557914649950505414, tol=PTOL) v = fp.ei((-1.0 + 4.0j)) assert ae(v, (-0.03373591813926547318 + 3.2151161058308770603j), tol=ATOL) assert ae(v.real, -0.03373591813926547318, tol=PTOL) assert ae(v.imag, 3.2151161058308770603, tol=PTOL) v = fp.ei((-2.0 + 8.0j)) assert ae(v, (0.015392833434733785143 + 3.1384179414340326969j), tol=ATOL) assert ae(v.real, 0.015392833434733785143, tol=PTOL) assert ae(v.imag, 3.1384179414340326969, tol=PTOL) v = fp.ei((-5.0 + 20.0j)) assert ae(v, (0.00024419662286542966525 + 3.1413825703601317109j), tol=ATOL) assert ae(v.real, 0.00024419662286542966525, tol=PTOL) assert ae(v.imag, 3.1413825703601317109, tol=PTOL) v = fp.ei((-20.0 + 80.0j)) assert ae(v, (-2.3255552781051330088e-11 + 3.1415926535987396304j), tol=ATOL) assert ae(v.real, -2.3255552781051330088e-11, tol=PTOL) assert ae(v.imag, 3.1415926535987396304, tol=PTOL) v = fp.ei((-30.0 + 120.0j)) assert ae(v, (2.7068919097124652332e-16 + 3.1415926535897925337j), tol=ATOL) assert ae(v.real, 2.7068919097124652332e-16, tol=PTOL) assert ae(v.imag, 3.1415926535897925337, tol=PTOL) v = fp.ei((-40.0 + 160.0j)) assert ae(v, (1.1695597827678024687e-20 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 1.1695597827678024687e-20, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-50.0 + 200.0j)) assert ae(v, (-9.0323746914410162531e-25 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -9.0323746914410162531e-25, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-80.0 + 320.0j)) assert ae(v, (-3.4819106748728063576e-38 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -3.4819106748728063576e-38, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-4.6566128730773925781e-10 + 1.1641532182693481445e-10j)) assert ae(v, (-20.880034622014215597 + 2.8966139905793444061j), tol=ATOL) assert ae(v.real, -20.880034622014215597, tol=PTOL) assert ae(v.imag, 2.8966139905793444061, tol=PTOL) v = fp.ei((-1.0 + 0.25j)) assert ae(v, (-0.19731063945004229095 + 3.0542266078154932748j), tol=ATOL) assert ae(v.real, -0.19731063945004229095, tol=PTOL) assert ae(v.imag, 3.0542266078154932748, tol=PTOL) v = fp.ei((-4.0 + 1.0j)) assert ae(v, (-0.0013106173980145506944 + 3.1381384055698581758j), tol=ATOL) assert ae(v.real, -0.0013106173980145506944, tol=PTOL) assert ae(v.imag, 3.1381384055698581758, tol=PTOL) v = fp.ei((-8.0 + 2.0j)) assert ae(v, (0.000022278049065270225945 + 3.1415634616493367169j), tol=ATOL) assert ae(v.real, 0.000022278049065270225945, tol=PTOL) assert ae(v.imag, 3.1415634616493367169, tol=PTOL) v = fp.ei((-20.0 + 5.0j)) assert ae(v, (-4.7711374515765346894e-11 + 3.1415926536726958909j), tol=ATOL) assert ae(v.real, -4.7711374515765346894e-11, tol=PTOL) assert ae(v.imag, 3.1415926536726958909, tol=PTOL) v = fp.ei((-80.0 + 20.0j)) assert ae(v, (-3.8353473865788235787e-38 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -3.8353473865788235787e-38, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-120.0 + 30.0j)) assert ae(v, (-2.3836002337480334716e-55 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -2.3836002337480334716e-55, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-160.0 + 40.0j)) assert ae(v, (1.6238022898654510661e-72 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 1.6238022898654510661e-72, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-200.0 + 50.0j)) assert ae(v, (-6.6800061461666228487e-90 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -6.6800061461666228487e-90, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei((-320.0 + 80.0j)) assert ae(v, (-4.2737871527778786157e-143 + 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -4.2737871527778786157e-143, tol=PTOL) assert ae(v.imag, 3.1415926535897932385, tol=PTOL) v = fp.ei(-1.1641532182693481445e-10) assert ae(v, -22.296641293693077672, tol=ATOL) assert type(v) is float v = fp.ei(-0.25) assert ae(v, -1.0442826344437381945, tol=ATOL) assert type(v) is float v = fp.ei(-1.0) assert ae(v, -0.21938393439552027368, tol=ATOL) assert type(v) is float v = fp.ei(-2.0) assert ae(v, -0.048900510708061119567, tol=ATOL) assert type(v) is float v = fp.ei(-5.0) assert ae(v, -0.0011482955912753257973, tol=ATOL) assert type(v) is float v = fp.ei(-20.0) assert ae(v, -9.8355252906498816904e-11, tol=ATOL) assert type(v) is float v = fp.ei(-30.0) assert ae(v, -3.0215520106888125448e-15, tol=ATOL) assert type(v) is float v = fp.ei(-40.0) assert ae(v, -1.0367732614516569722e-19, tol=ATOL) assert type(v) is float v = fp.ei(-50.0) assert ae(v, -3.7832640295504590187e-24, tol=ATOL) assert type(v) is float v = fp.ei(-80.0) assert ae(v, -2.2285432586884729112e-37, tol=ATOL) assert type(v) is float v = fp.ei((-1.1641532182693481445e-10 + 0.0j)) assert ae(v, (-22.296641293693077672 + 0.0j), tol=ATOL) assert ae(v.real, -22.296641293693077672, tol=PTOL) assert v.imag == 0 v = fp.ei((-0.25 + 0.0j)) assert ae(v, (-1.0442826344437381945 + 0.0j), tol=ATOL) assert ae(v.real, -1.0442826344437381945, tol=PTOL) assert v.imag == 0 v = fp.ei((-1.0 + 0.0j)) assert ae(v, (-0.21938393439552027368 + 0.0j), tol=ATOL) assert ae(v.real, -0.21938393439552027368, tol=PTOL) assert v.imag == 0 v = fp.ei((-2.0 + 0.0j)) assert ae(v, (-0.048900510708061119567 + 0.0j), tol=ATOL) assert ae(v.real, -0.048900510708061119567, tol=PTOL) assert v.imag == 0 v = fp.ei((-5.0 + 0.0j)) assert ae(v, (-0.0011482955912753257973 + 0.0j), tol=ATOL) assert ae(v.real, -0.0011482955912753257973, tol=PTOL) assert v.imag == 0 v = fp.ei((-20.0 + 0.0j)) assert ae(v, (-9.8355252906498816904e-11 + 0.0j), tol=ATOL) assert ae(v.real, -9.8355252906498816904e-11, tol=PTOL) assert v.imag == 0 v = fp.ei((-30.0 + 0.0j)) assert ae(v, (-3.0215520106888125448e-15 + 0.0j), tol=ATOL) assert ae(v.real, -3.0215520106888125448e-15, tol=PTOL) assert v.imag == 0 v = fp.ei((-40.0 + 0.0j)) assert ae(v, (-1.0367732614516569722e-19 + 0.0j), tol=ATOL) assert ae(v.real, -1.0367732614516569722e-19, tol=PTOL) assert v.imag == 0 v = fp.ei((-50.0 + 0.0j)) assert ae(v, (-3.7832640295504590187e-24 + 0.0j), tol=ATOL) assert ae(v.real, -3.7832640295504590187e-24, tol=PTOL) assert v.imag == 0 v = fp.ei((-80.0 + 0.0j)) assert ae(v, (-2.2285432586884729112e-37 + 0.0j), tol=ATOL) assert ae(v.real, -2.2285432586884729112e-37, tol=PTOL) assert v.imag == 0 v = fp.ei((-4.6566128730773925781e-10 - 1.1641532182693481445e-10j)) assert ae(v, (-20.880034622014215597 - 2.8966139905793444061j), tol=ATOL) assert ae(v.real, -20.880034622014215597, tol=PTOL) assert ae(v.imag, -2.8966139905793444061, tol=PTOL) v = fp.ei((-1.0 - 0.25j)) assert ae(v, (-0.19731063945004229095 - 3.0542266078154932748j), tol=ATOL) assert ae(v.real, -0.19731063945004229095, tol=PTOL) assert ae(v.imag, -3.0542266078154932748, tol=PTOL) v = fp.ei((-4.0 - 1.0j)) assert ae(v, (-0.0013106173980145506944 - 3.1381384055698581758j), tol=ATOL) assert ae(v.real, -0.0013106173980145506944, tol=PTOL) assert ae(v.imag, -3.1381384055698581758, tol=PTOL) v = fp.ei((-8.0 - 2.0j)) assert ae(v, (0.000022278049065270225945 - 3.1415634616493367169j), tol=ATOL) assert ae(v.real, 0.000022278049065270225945, tol=PTOL) assert ae(v.imag, -3.1415634616493367169, tol=PTOL) v = fp.ei((-20.0 - 5.0j)) assert ae(v, (-4.7711374515765346894e-11 - 3.1415926536726958909j), tol=ATOL) assert ae(v.real, -4.7711374515765346894e-11, tol=PTOL) assert ae(v.imag, -3.1415926536726958909, tol=PTOL) v = fp.ei((-80.0 - 20.0j)) assert ae(v, (-3.8353473865788235787e-38 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -3.8353473865788235787e-38, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-120.0 - 30.0j)) assert ae(v, (-2.3836002337480334716e-55 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -2.3836002337480334716e-55, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-160.0 - 40.0j)) assert ae(v, (1.6238022898654510661e-72 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 1.6238022898654510661e-72, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-200.0 - 50.0j)) assert ae(v, (-6.6800061461666228487e-90 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -6.6800061461666228487e-90, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-320.0 - 80.0j)) assert ae(v, (-4.2737871527778786157e-143 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -4.2737871527778786157e-143, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-1.1641532182693481445e-10 - 1.1641532182693481445e-10j)) assert ae(v, (-21.950067703413105017 - 2.3561944903087602507j), tol=ATOL) assert ae(v.real, -21.950067703413105017, tol=PTOL) assert ae(v.imag, -2.3561944903087602507, tol=PTOL) v = fp.ei((-0.25 - 0.25j)) assert ae(v, (-0.71092525792923287894 - 2.5766745291767512913j), tol=ATOL) assert ae(v.real, -0.71092525792923287894, tol=PTOL) assert ae(v.imag, -2.5766745291767512913, tol=PTOL) v = fp.ei((-1.0 - 1.0j)) assert ae(v, (-0.00028162445198141832551 - 2.9622681185504342983j), tol=ATOL) assert ae(v.real, -0.00028162445198141832551, tol=PTOL) assert ae(v.imag, -2.9622681185504342983, tol=PTOL) v = fp.ei((-2.0 - 2.0j)) assert ae(v, (0.033767089606562004246 - 3.1229932394200426965j), tol=ATOL) assert ae(v.real, 0.033767089606562004246, tol=PTOL) assert ae(v.imag, -3.1229932394200426965, tol=PTOL) v = fp.ei((-5.0 - 5.0j)) assert ae(v, (-0.0007266506660356393891 - 3.1420636813914284609j), tol=ATOL) assert ae(v.real, -0.0007266506660356393891, tol=PTOL) assert ae(v.imag, -3.1420636813914284609, tol=PTOL) v = fp.ei((-20.0 - 20.0j)) assert ae(v, (2.3824537449367396579e-11 - 3.1415926535228233653j), tol=ATOL) assert ae(v.real, 2.3824537449367396579e-11, tol=PTOL) assert ae(v.imag, -3.1415926535228233653, tol=PTOL) v = fp.ei((-30.0 - 30.0j)) assert ae(v, (-1.7316045841744061617e-15 - 3.141592653589794545j), tol=ATOL) assert ae(v.real, -1.7316045841744061617e-15, tol=PTOL) assert ae(v.imag, -3.141592653589794545, tol=PTOL) v = fp.ei((-40.0 - 40.0j)) assert ae(v, (7.4001043002899232182e-20 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 7.4001043002899232182e-20, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-50.0 - 50.0j)) assert ae(v, (-2.3566128324644641219e-24 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -2.3566128324644641219e-24, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-80.0 - 80.0j)) assert ae(v, (-9.8279750572186526673e-38 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -9.8279750572186526673e-38, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-1.1641532182693481445e-10 - 4.6566128730773925781e-10j)) assert ae(v, (-20.880034621664969632 - 1.8157749903874220607j), tol=ATOL) assert ae(v.real, -20.880034621664969632, tol=PTOL) assert ae(v.imag, -1.8157749903874220607, tol=PTOL) v = fp.ei((-0.25 - 1.0j)) assert ae(v, (0.16868306393667788761 - 2.6557914649950505414j), tol=ATOL) assert ae(v.real, 0.16868306393667788761, tol=PTOL) assert ae(v.imag, -2.6557914649950505414, tol=PTOL) v = fp.ei((-1.0 - 4.0j)) assert ae(v, (-0.03373591813926547318 - 3.2151161058308770603j), tol=ATOL) assert ae(v.real, -0.03373591813926547318, tol=PTOL) assert ae(v.imag, -3.2151161058308770603, tol=PTOL) v = fp.ei((-2.0 - 8.0j)) assert ae(v, (0.015392833434733785143 - 3.1384179414340326969j), tol=ATOL) assert ae(v.real, 0.015392833434733785143, tol=PTOL) assert ae(v.imag, -3.1384179414340326969, tol=PTOL) v = fp.ei((-5.0 - 20.0j)) assert ae(v, (0.00024419662286542966525 - 3.1413825703601317109j), tol=ATOL) assert ae(v.real, 0.00024419662286542966525, tol=PTOL) assert ae(v.imag, -3.1413825703601317109, tol=PTOL) v = fp.ei((-20.0 - 80.0j)) assert ae(v, (-2.3255552781051330088e-11 - 3.1415926535987396304j), tol=ATOL) assert ae(v.real, -2.3255552781051330088e-11, tol=PTOL) assert ae(v.imag, -3.1415926535987396304, tol=PTOL) v = fp.ei((-30.0 - 120.0j)) assert ae(v, (2.7068919097124652332e-16 - 3.1415926535897925337j), tol=ATOL) assert ae(v.real, 2.7068919097124652332e-16, tol=PTOL) assert ae(v.imag, -3.1415926535897925337, tol=PTOL) v = fp.ei((-40.0 - 160.0j)) assert ae(v, (1.1695597827678024687e-20 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, 1.1695597827678024687e-20, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-50.0 - 200.0j)) assert ae(v, (-9.0323746914410162531e-25 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -9.0323746914410162531e-25, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((-80.0 - 320.0j)) assert ae(v, (-3.4819106748728063576e-38 - 3.1415926535897932385j), tol=ATOL) assert ae(v.real, -3.4819106748728063576e-38, tol=PTOL) assert ae(v.imag, -3.1415926535897932385, tol=PTOL) v = fp.ei((0.0 - 1.1641532182693481445e-10j)) assert ae(v, (-22.29664129357666235 - 1.5707963269113119411j), tol=ATOL) assert ae(v.real, -22.29664129357666235, tol=PTOL) assert ae(v.imag, -1.5707963269113119411, tol=PTOL) v = fp.ei((0.0 - 0.25j)) assert ae(v, (-0.82466306258094565309 - 1.8199298971146537833j), tol=ATOL) assert ae(v.real, -0.82466306258094565309, tol=PTOL) assert ae(v.imag, -1.8199298971146537833, tol=PTOL) v = fp.ei((0.0 - 1.0j)) assert ae(v, (0.33740392290096813466 - 2.5168793971620796342j), tol=ATOL) assert ae(v.real, 0.33740392290096813466, tol=PTOL) assert ae(v.imag, -2.5168793971620796342, tol=PTOL) v = fp.ei((0.0 - 2.0j)) assert ae(v, (0.4229808287748649957 - 3.1762093035975914678j), tol=ATOL) assert ae(v.real, 0.4229808287748649957, tol=PTOL) assert ae(v.imag, -3.1762093035975914678, tol=PTOL) v = fp.ei((0.0 - 5.0j)) assert ae(v, (-0.19002974965664387862 - 3.1207275717395707565j), tol=ATOL) assert ae(v.real, -0.19002974965664387862, tol=PTOL) assert ae(v.imag, -3.1207275717395707565, tol=PTOL) v = fp.ei((0.0 - 20.0j)) assert ae(v, (0.04441982084535331654 - 3.1190380278383364594j), tol=ATOL) assert ae(v.real, 0.04441982084535331654, tol=PTOL) assert ae(v.imag, -3.1190380278383364594, tol=PTOL) v = fp.ei((0.0 - 30.0j)) assert ae(v, (-0.033032417282071143779 - 3.1375528668252477302j), tol=ATOL) assert ae(v.real, -0.033032417282071143779, tol=PTOL) assert ae(v.imag, -3.1375528668252477302, tol=PTOL) v = fp.ei((0.0 - 40.0j)) assert ae(v, (0.019020007896208766962 - 3.157781446149681126j), tol=ATOL) assert ae(v.real, 0.019020007896208766962, tol=PTOL) assert ae(v.imag, -3.157781446149681126, tol=PTOL) v = fp.ei((0.0 - 50.0j)) assert ae(v, (-0.0056283863241163054402 - 3.122413399280832514j), tol=ATOL) assert ae(v.real, -0.0056283863241163054402, tol=PTOL) assert ae(v.imag, -3.122413399280832514, tol=PTOL) v = fp.ei((0.0 - 80.0j)) assert ae(v, (-0.012402501155070958192 - 3.1431272137073839346j), tol=ATOL) assert ae(v.real, -0.012402501155070958192, tol=PTOL) assert ae(v.imag, -3.1431272137073839346, tol=PTOL) v = fp.ei((1.1641532182693481445e-10 - 4.6566128730773925781e-10j)) assert ae(v, (-20.880034621432138988 - 1.3258176641336937524j), tol=ATOL) assert ae(v.real, -20.880034621432138988, tol=PTOL) assert ae(v.imag, -1.3258176641336937524, tol=PTOL) v = fp.ei((0.25 - 1.0j)) assert ae(v, (0.59066621214766308594 - 2.3968481059377428687j), tol=ATOL) assert ae(v.real, 0.59066621214766308594, tol=PTOL) assert ae(v.imag, -2.3968481059377428687, tol=PTOL) v = fp.ei((1.0 - 4.0j)) assert ae(v, (-0.49739047283060471093 - 3.5570287076301818702j), tol=ATOL) assert ae(v.real, -0.49739047283060471093, tol=PTOL) assert ae(v.imag, -3.5570287076301818702, tol=PTOL) v = fp.ei((2.0 - 8.0j)) assert ae(v, (0.8705211147733730969 - 3.3825859385758486351j), tol=ATOL) assert ae(v.real, 0.8705211147733730969, tol=PTOL) assert ae(v.imag, -3.3825859385758486351, tol=PTOL) v = fp.ei((5.0 - 20.0j)) assert ae(v, (7.0789514293925893007 - 1.5313749363937141849j), tol=ATOL) assert ae(v.real, 7.0789514293925893007, tol=PTOL) assert ae(v.imag, -1.5313749363937141849, tol=PTOL) v = fp.ei((20.0 - 80.0j)) assert ae(v, (-5855431.4907298084434 + 720917.79156143806727j), tol=ATOL) assert ae(v.real, -5855431.4907298084434, tol=PTOL) assert ae(v.imag, 720917.79156143806727, tol=PTOL) v = fp.ei((30.0 - 120.0j)) assert ae(v, (65402491644.703470747 + 56697658396.51586764j), tol=ATOL) assert ae(v.real, 65402491644.703470747, tol=PTOL) assert ae(v.imag, 56697658396.51586764, tol=PTOL) v = fp.ei((40.0 - 160.0j)) assert ae(v, (-25504929379604.776769 - 1429035198630576.3879j), tol=ATOL) assert ae(v.real, -25504929379604.776769, tol=PTOL) assert ae(v.imag, -1429035198630576.3879, tol=PTOL) v = fp.ei((50.0 - 200.0j)) assert ae(v, (-18437746526988116954.0 + 17146362239046152342.0j), tol=ATOL) assert ae(v.real, -18437746526988116954.0, tol=PTOL) assert ae(v.imag, 17146362239046152342.0, tol=PTOL) v = fp.ei((80.0 - 320.0j)) assert ae(v, (-3.3464697299634526706e+31 + 1.6473152633843023919e+32j), tol=ATOL) assert ae(v.real, -3.3464697299634526706e+31, tol=PTOL) assert ae(v.imag, 1.6473152633843023919e+32, tol=PTOL) v = fp.ei((1.1641532182693481445e-10 - 1.1641532182693481445e-10j)) assert ae(v, (-21.950067703180274374 - 0.78539816351386363145j), tol=ATOL) assert ae(v.real, -21.950067703180274374, tol=PTOL) assert ae(v.imag, -0.78539816351386363145, tol=PTOL) v = fp.ei((0.25 - 0.25j)) assert ae(v, (-0.21441047326710323254 - 1.0683772981589995996j), tol=ATOL) assert ae(v.real, -0.21441047326710323254, tol=PTOL) assert ae(v.imag, -1.0683772981589995996, tol=PTOL) v = fp.ei((1.0 - 1.0j)) assert ae(v, (1.7646259855638540684 - 2.3877698515105224193j), tol=ATOL) assert ae(v.real, 1.7646259855638540684, tol=PTOL) assert ae(v.imag, -2.3877698515105224193, tol=PTOL) v = fp.ei((2.0 - 2.0j)) assert ae(v, (1.8920781621855474089 - 5.3169624378326579621j), tol=ATOL) assert ae(v.real, 1.8920781621855474089, tol=PTOL) assert ae(v.imag, -5.3169624378326579621, tol=PTOL) v = fp.ei((5.0 - 5.0j)) assert ae(v, (-13.470936071475245856 + 15.322492395731230968j), tol=ATOL) assert ae(v.real, -13.470936071475245856, tol=PTOL) assert ae(v.imag, 15.322492395731230968, tol=PTOL) v = fp.ei((20.0 - 20.0j)) assert ae(v, (16589317.398788971896 - 5831705.4712368307104j), tol=ATOL) assert ae(v.real, 16589317.398788971896, tol=PTOL) assert ae(v.imag, -5831705.4712368307104, tol=PTOL) v = fp.ei((30.0 - 30.0j)) assert ae(v, (-154596484273.69322527 + 204179357834.2723043j), tol=ATOL) assert ae(v.real, -154596484273.69322527, tol=PTOL) assert ae(v.imag, 204179357834.2723043, tol=PTOL) v = fp.ei((40.0 - 40.0j)) assert ae(v, (287512180321448.45408 - 4203502407932318.1156j), tol=ATOL) assert ae(v.real, 287512180321448.45408, tol=PTOL) assert ae(v.imag, -4203502407932318.1156, tol=PTOL) v = fp.ei((50.0 - 50.0j)) assert ae(v, (36128528616649268826.0 + 64648801861338741960.0j), tol=ATOL) assert ae(v.real, 36128528616649268826.0, tol=PTOL) assert ae(v.imag, 64648801861338741960.0, tol=PTOL) v = fp.ei((80.0 - 80.0j)) assert ae(v, (-3.8674816337930010217e+32 + 3.0540709639658071041e+32j), tol=ATOL) assert ae(v.real, -3.8674816337930010217e+32, tol=PTOL) assert ae(v.imag, 3.0540709639658071041e+32, tol=PTOL) v = fp.ei((4.6566128730773925781e-10 - 1.1641532182693481445e-10j)) assert ae(v, (-20.880034621082893023 - 0.24497866324327947603j), tol=ATOL) assert ae(v.real, -20.880034621082893023, tol=PTOL) assert ae(v.imag, -0.24497866324327947603, tol=PTOL) v = fp.ei((1.0 - 0.25j)) assert ae(v, (1.8942716983721074932 - 0.67268237088273915854j), tol=ATOL) assert ae(v.real, 1.8942716983721074932, tol=PTOL) assert ae(v.imag, -0.67268237088273915854, tol=PTOL) v = fp.ei((4.0 - 1.0j)) assert ae(v, (14.806699492675420438 - 12.280015176673582616j), tol=ATOL) assert ae(v.real, 14.806699492675420438, tol=PTOL) assert ae(v.imag, -12.280015176673582616, tol=PTOL) v = fp.ei((8.0 - 2.0j)) assert ae(v, (-54.633252667426386294 - 416.34477429173650012j), tol=ATOL) assert ae(v.real, -54.633252667426386294, tol=PTOL) assert ae(v.imag, -416.34477429173650012, tol=PTOL) v = fp.ei((20.0 - 5.0j)) assert ae(v, (711836.97165402624643 + 24745247.798103247366j), tol=ATOL) assert ae(v.real, 711836.97165402624643, tol=PTOL) assert ae(v.imag, 24745247.798103247366, tol=PTOL) v = fp.ei((80.0 - 20.0j)) assert ae(v, (4.2139911108612653091e+32 - 5.3367124741918251637e+32j), tol=ATOL) assert ae(v.real, 4.2139911108612653091e+32, tol=PTOL) assert ae(v.imag, -5.3367124741918251637e+32, tol=PTOL) v = fp.ei((120.0 - 30.0j)) assert ae(v, (-9.7760616203707508892e+48 + 1.058257682317195792e+50j), tol=ATOL) assert ae(v.real, -9.7760616203707508892e+48, tol=PTOL) assert ae(v.imag, 1.058257682317195792e+50, tol=PTOL) v = fp.ei((160.0 - 40.0j)) assert ae(v, (-8.7065541466623638861e+66 - 1.6577106725141739889e+67j), tol=ATOL) assert ae(v.real, -8.7065541466623638861e+66, tol=PTOL) assert ae(v.imag, -1.6577106725141739889e+67, tol=PTOL) v = fp.ei((200.0 - 50.0j)) assert ae(v, (3.070744996327018106e+84 + 1.7243244846769415903e+84j), tol=ATOL) assert ae(v.real, 3.070744996327018106e+84, tol=PTOL) assert ae(v.imag, 1.7243244846769415903e+84, tol=PTOL) v = fp.ei((320.0 - 80.0j)) assert ae(v, (-9.9960598637998647276e+135 + 2.6855081527595608863e+136j), tol=ATOL) assert ae(v.real, -9.9960598637998647276e+135, tol=PTOL) assert ae(v.imag, 2.6855081527595608863e+136, tol=PTOL) mpmath-1.0.0/mpmath/tests/test_functions.py000066400000000000000000000740731316273626600210760ustar00rootroot00000000000000from mpmath.libmp import * from mpmath import * import random import time import math import cmath def mpc_ae(a, b, eps=eps): res = True res = res and a.real.ae(b.real, eps) res = res and a.imag.ae(b.imag, eps) return res #---------------------------------------------------------------------------- # Constants and functions # tpi = "3.1415926535897932384626433832795028841971693993751058209749445923078\ 1640628620899862803482534211706798" te = "2.71828182845904523536028747135266249775724709369995957496696762772407\ 663035354759457138217852516642743" tdegree = "0.017453292519943295769236907684886127134428718885417254560971914\ 4017100911460344944368224156963450948221" teuler = "0.5772156649015328606065120900824024310421593359399235988057672348\ 84867726777664670936947063291746749516" tln2 = "0.693147180559945309417232121458176568075500134360255254120680009493\ 393621969694715605863326996418687542" tln10 = "2.30258509299404568401799145468436420760110148862877297603332790096\ 757260967735248023599720508959829834" tcatalan = "0.91596559417721901505460351493238411077414937428167213426649811\ 9621763019776254769479356512926115106249" tkhinchin = "2.6854520010653064453097148354817956938203822939944629530511523\ 4555721885953715200280114117493184769800" tglaisher = "1.2824271291006226368753425688697917277676889273250011920637400\ 2174040630885882646112973649195820237439420646" tapery = "1.2020569031595942853997381615114499907649862923404988817922715553\ 4183820578631309018645587360933525815" tphi = "1.618033988749894848204586834365638117720309179805762862135448622705\ 26046281890244970720720418939113748475" tmertens = "0.26149721284764278375542683860869585905156664826119920619206421\ 3924924510897368209714142631434246651052" ttwinprime = "0.660161815846869573927812110014555778432623360284733413319448\ 423335405642304495277143760031413839867912" def test_constants(): for prec in [3, 7, 10, 15, 20, 37, 80, 100, 29]: mp.dps = prec assert pi == mpf(tpi) assert e == mpf(te) assert degree == mpf(tdegree) assert euler == mpf(teuler) assert ln2 == mpf(tln2) assert ln10 == mpf(tln10) assert catalan == mpf(tcatalan) assert khinchin == mpf(tkhinchin) assert glaisher == mpf(tglaisher) assert phi == mpf(tphi) if prec < 50: assert mertens == mpf(tmertens) assert twinprime == mpf(ttwinprime) mp.dps = 15 assert pi >= -1 assert pi > 2 assert pi > 3 assert pi < 4 def test_exact_sqrts(): for i in range(20000): assert sqrt(mpf(i*i)) == i random.seed(1) for prec in [100, 300, 1000, 10000]: mp.dps = prec for i in range(20): A = random.randint(10**(prec//2-2), 10**(prec//2-1)) assert sqrt(mpf(A*A)) == A mp.dps = 15 for i in range(100): for a in [1, 8, 25, 112307]: assert sqrt(mpf((a*a, 2*i))) == mpf((a, i)) assert sqrt(mpf((a*a, -2*i))) == mpf((a, -i)) def test_sqrt_rounding(): for i in [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15]: i = from_int(i) for dps in [7, 15, 83, 106, 2000]: mp.dps = dps a = mpf_pow_int(mpf_sqrt(i, mp.prec, round_down), 2, mp.prec, round_down) b = mpf_pow_int(mpf_sqrt(i, mp.prec, round_up), 2, mp.prec, round_up) assert mpf_lt(a, i) assert mpf_gt(b, i) random.seed(1234) prec = 100 for rnd in [round_down, round_nearest, round_ceiling]: for i in range(100): a = mpf_rand(prec) b = mpf_mul(a, a) assert mpf_sqrt(b, prec, rnd) == a # Test some extreme cases mp.dps = 100 a = mpf(9) + 1e-90 b = mpf(9) - 1e-90 mp.dps = 15 assert sqrt(a, rounding='d') == 3 assert sqrt(a, rounding='n') == 3 assert sqrt(a, rounding='u') > 3 assert sqrt(b, rounding='d') < 3 assert sqrt(b, rounding='n') == 3 assert sqrt(b, rounding='u') == 3 # A worst case, from the MPFR test suite assert sqrt(mpf('7.0503726185518891')) == mpf('2.655253776675949') def test_float_sqrt(): mp.dps = 15 # These should round identically for x in [0, 1e-7, 0.1, 0.5, 1, 2, 3, 4, 5, 0.333, 76.19]: assert sqrt(mpf(x)) == float(x)**0.5 assert sqrt(-1) == 1j assert sqrt(-2).ae(cmath.sqrt(-2)) assert sqrt(-3).ae(cmath.sqrt(-3)) assert sqrt(-100).ae(cmath.sqrt(-100)) assert sqrt(1j).ae(cmath.sqrt(1j)) assert sqrt(-1j).ae(cmath.sqrt(-1j)) assert sqrt(math.pi + math.e*1j).ae(cmath.sqrt(math.pi + math.e*1j)) assert sqrt(math.pi - math.e*1j).ae(cmath.sqrt(math.pi - math.e*1j)) def test_hypot(): assert hypot(0, 0) == 0 assert hypot(0, 0.33) == mpf(0.33) assert hypot(0.33, 0) == mpf(0.33) assert hypot(-0.33, 0) == mpf(0.33) assert hypot(3, 4) == mpf(5) def test_exact_cbrt(): for i in range(0, 20000, 200): assert cbrt(mpf(i*i*i)) == i random.seed(1) for prec in [100, 300, 1000, 10000]: mp.dps = prec A = random.randint(10**(prec//2-2), 10**(prec//2-1)) assert cbrt(mpf(A*A*A)) == A mp.dps = 15 def test_exp(): assert exp(0) == 1 assert exp(10000).ae(mpf('8.8068182256629215873e4342')) assert exp(-10000).ae(mpf('1.1354838653147360985e-4343')) a = exp(mpf((1, 8198646019315405, -53, 53))) assert(a.bc == bitcount(a.man)) mp.prec = 67 a = exp(mpf((1, 1781864658064754565, -60, 61))) assert(a.bc == bitcount(a.man)) mp.prec = 53 assert exp(ln2 * 10).ae(1024) assert exp(2+2j).ae(cmath.exp(2+2j)) def test_issue_73(): mp.dps = 512 a = exp(-1) b = exp(1) mp.dps = 15 assert (+a).ae(0.36787944117144233) assert (+b).ae(2.7182818284590451) def test_log(): mp.dps = 15 assert log(1) == 0 for x in [0.5, 1.5, 2.0, 3.0, 100, 10**50, 1e-50]: assert log(x).ae(math.log(x)) assert log(x, x) == 1 assert log(1024, 2) == 10 assert log(10**1234, 10) == 1234 assert log(2+2j).ae(cmath.log(2+2j)) # Accuracy near 1 assert (log(0.6+0.8j).real*10**17).ae(2.2204460492503131) assert (log(0.6-0.8j).real*10**17).ae(2.2204460492503131) assert (log(0.8-0.6j).real*10**17).ae(2.2204460492503131) assert (log(1+1e-8j).real*10**16).ae(0.5) assert (log(1-1e-8j).real*10**16).ae(0.5) assert (log(-1+1e-8j).real*10**16).ae(0.5) assert (log(-1-1e-8j).real*10**16).ae(0.5) assert (log(1j+1e-8).real*10**16).ae(0.5) assert (log(1j-1e-8).real*10**16).ae(0.5) assert (log(-1j+1e-8).real*10**16).ae(0.5) assert (log(-1j-1e-8).real*10**16).ae(0.5) assert (log(1+1e-40j).real*10**80).ae(0.5) assert (log(1j+1e-40).real*10**80).ae(0.5) # Huge assert log(ldexp(1.234,10**20)).ae(log(2)*1e20) assert log(ldexp(1.234,10**200)).ae(log(2)*1e200) # Some special values assert log(mpc(0,0)) == mpc(-inf,0) assert isnan(log(mpc(nan,0)).real) assert isnan(log(mpc(nan,0)).imag) assert isnan(log(mpc(0,nan)).real) assert isnan(log(mpc(0,nan)).imag) assert isnan(log(mpc(nan,1)).real) assert isnan(log(mpc(nan,1)).imag) assert isnan(log(mpc(1,nan)).real) assert isnan(log(mpc(1,nan)).imag) def test_trig_hyperb_basic(): for x in (list(range(100)) + list(range(-100,0))): t = x / 4.1 assert cos(mpf(t)).ae(math.cos(t)) assert sin(mpf(t)).ae(math.sin(t)) assert tan(mpf(t)).ae(math.tan(t)) assert cosh(mpf(t)).ae(math.cosh(t)) assert sinh(mpf(t)).ae(math.sinh(t)) assert tanh(mpf(t)).ae(math.tanh(t)) assert sin(1+1j).ae(cmath.sin(1+1j)) assert sin(-4-3.6j).ae(cmath.sin(-4-3.6j)) assert cos(1+1j).ae(cmath.cos(1+1j)) assert cos(-4-3.6j).ae(cmath.cos(-4-3.6j)) def test_degrees(): assert cos(0*degree) == 1 assert cos(90*degree).ae(0) assert cos(180*degree).ae(-1) assert cos(270*degree).ae(0) assert cos(360*degree).ae(1) assert sin(0*degree) == 0 assert sin(90*degree).ae(1) assert sin(180*degree).ae(0) assert sin(270*degree).ae(-1) assert sin(360*degree).ae(0) def random_complexes(N): random.seed(1) a = [] for i in range(N): x1 = random.uniform(-10, 10) y1 = random.uniform(-10, 10) x2 = random.uniform(-10, 10) y2 = random.uniform(-10, 10) z1 = complex(x1, y1) z2 = complex(x2, y2) a.append((z1, z2)) return a def test_complex_powers(): for dps in [15, 30, 100]: # Check accuracy for complex square root mp.dps = dps a = mpc(1j)**0.5 assert a.real == a.imag == mpf(2)**0.5 / 2 mp.dps = 15 random.seed(1) for (z1, z2) in random_complexes(100): assert (mpc(z1)**mpc(z2)).ae(z1**z2, 1e-12) assert (e**(-pi*1j)).ae(-1) mp.dps = 50 assert (e**(-pi*1j)).ae(-1) mp.dps = 15 def test_complex_sqrt_accuracy(): def test_mpc_sqrt(lst): for a, b in lst: z = mpc(a + j*b) assert mpc_ae(sqrt(z*z), z) z = mpc(-a + j*b) assert mpc_ae(sqrt(z*z), -z) z = mpc(a - j*b) assert mpc_ae(sqrt(z*z), z) z = mpc(-a - j*b) assert mpc_ae(sqrt(z*z), -z) random.seed(2) N = 10 mp.dps = 30 dps = mp.dps test_mpc_sqrt([(random.uniform(0, 10),random.uniform(0, 10)) for i in range(N)]) test_mpc_sqrt([(i + 0.1, (i + 0.2)*10**i) for i in range(N)]) mp.dps = 15 def test_atan(): mp.dps = 15 assert atan(-2.3).ae(math.atan(-2.3)) assert atan(1e-50) == 1e-50 assert atan(1e50).ae(pi/2) assert atan(-1e-50) == -1e-50 assert atan(-1e50).ae(-pi/2) assert atan(10**1000).ae(pi/2) for dps in [25, 70, 100, 300, 1000]: mp.dps = dps assert (4*atan(1)).ae(pi) mp.dps = 15 pi2 = pi/2 assert atan(mpc(inf,-1)).ae(pi2) assert atan(mpc(inf,0)).ae(pi2) assert atan(mpc(inf,1)).ae(pi2) assert atan(mpc(1,inf)).ae(pi2) assert atan(mpc(0,inf)).ae(pi2) assert atan(mpc(-1,inf)).ae(-pi2) assert atan(mpc(-inf,1)).ae(-pi2) assert atan(mpc(-inf,0)).ae(-pi2) assert atan(mpc(-inf,-1)).ae(-pi2) assert atan(mpc(-1,-inf)).ae(-pi2) assert atan(mpc(0,-inf)).ae(-pi2) assert atan(mpc(1,-inf)).ae(pi2) def test_atan2(): mp.dps = 15 assert atan2(1,1).ae(pi/4) assert atan2(1,-1).ae(3*pi/4) assert atan2(-1,-1).ae(-3*pi/4) assert atan2(-1,1).ae(-pi/4) assert atan2(-1,0).ae(-pi/2) assert atan2(1,0).ae(pi/2) assert atan2(0,0) == 0 assert atan2(inf,0).ae(pi/2) assert atan2(-inf,0).ae(-pi/2) assert isnan(atan2(inf,inf)) assert isnan(atan2(-inf,inf)) assert isnan(atan2(inf,-inf)) assert isnan(atan2(3,nan)) assert isnan(atan2(nan,3)) assert isnan(atan2(0,nan)) assert isnan(atan2(nan,0)) assert atan2(0,inf) == 0 assert atan2(0,-inf).ae(pi) assert atan2(10,inf) == 0 assert atan2(-10,inf) == 0 assert atan2(-10,-inf).ae(-pi) assert atan2(10,-inf).ae(pi) assert atan2(inf,10).ae(pi/2) assert atan2(inf,-10).ae(pi/2) assert atan2(-inf,10).ae(-pi/2) assert atan2(-inf,-10).ae(-pi/2) def test_areal_inverses(): assert asin(mpf(0)) == 0 assert asinh(mpf(0)) == 0 assert acosh(mpf(1)) == 0 assert isinstance(asin(mpf(0.5)), mpf) assert isinstance(asin(mpf(2.0)), mpc) assert isinstance(acos(mpf(0.5)), mpf) assert isinstance(acos(mpf(2.0)), mpc) assert isinstance(atanh(mpf(0.1)), mpf) assert isinstance(atanh(mpf(1.1)), mpc) random.seed(1) for i in range(50): x = random.uniform(0, 1) assert asin(mpf(x)).ae(math.asin(x)) assert acos(mpf(x)).ae(math.acos(x)) x = random.uniform(-10, 10) assert asinh(mpf(x)).ae(cmath.asinh(x).real) assert isinstance(asinh(mpf(x)), mpf) x = random.uniform(1, 10) assert acosh(mpf(x)).ae(cmath.acosh(x).real) assert isinstance(acosh(mpf(x)), mpf) x = random.uniform(-10, 0.999) assert isinstance(acosh(mpf(x)), mpc) x = random.uniform(-1, 1) assert atanh(mpf(x)).ae(cmath.atanh(x).real) assert isinstance(atanh(mpf(x)), mpf) dps = mp.dps mp.dps = 300 assert isinstance(asin(0.5), mpf) mp.dps = 1000 assert asin(1).ae(pi/2) assert asin(-1).ae(-pi/2) mp.dps = dps def test_invhyperb_inaccuracy(): mp.dps = 15 assert (asinh(1e-5)*10**5).ae(0.99999999998333333) assert (asinh(1e-10)*10**10).ae(1) assert (asinh(1e-50)*10**50).ae(1) assert (asinh(-1e-5)*10**5).ae(-0.99999999998333333) assert (asinh(-1e-10)*10**10).ae(-1) assert (asinh(-1e-50)*10**50).ae(-1) assert asinh(10**20).ae(46.744849040440862) assert asinh(-10**20).ae(-46.744849040440862) assert (tanh(1e-10)*10**10).ae(1) assert (tanh(-1e-10)*10**10).ae(-1) assert (atanh(1e-10)*10**10).ae(1) assert (atanh(-1e-10)*10**10).ae(-1) def test_complex_functions(): for x in (list(range(10)) + list(range(-10,0))): for y in (list(range(10)) + list(range(-10,0))): z = complex(x, y)/4.3 + 0.01j assert exp(mpc(z)).ae(cmath.exp(z)) assert log(mpc(z)).ae(cmath.log(z)) assert cos(mpc(z)).ae(cmath.cos(z)) assert sin(mpc(z)).ae(cmath.sin(z)) assert tan(mpc(z)).ae(cmath.tan(z)) assert sinh(mpc(z)).ae(cmath.sinh(z)) assert cosh(mpc(z)).ae(cmath.cosh(z)) assert tanh(mpc(z)).ae(cmath.tanh(z)) def test_complex_inverse_functions(): mp.dps = 15 iv.dps = 15 for (z1, z2) in random_complexes(30): # apparently cmath uses a different branch, so we # can't use it for comparison assert sinh(asinh(z1)).ae(z1) # assert acosh(z1).ae(cmath.acosh(z1)) assert atanh(z1).ae(cmath.atanh(z1)) assert atan(z1).ae(cmath.atan(z1)) # the reason we set a big eps here is that the cmath # functions are inaccurate assert asin(z1).ae(cmath.asin(z1), rel_eps=1e-12) assert acos(z1).ae(cmath.acos(z1), rel_eps=1e-12) one = mpf(1) for i in range(-9, 10, 3): for k in range(-9, 10, 3): a = 0.9*j*10**k + 0.8*one*10**i b = cos(acos(a)) assert b.ae(a) b = sin(asin(a)) assert b.ae(a) one = mpf(1) err = 2*10**-15 for i in range(-9, 9, 3): for k in range(-9, 9, 3): a = -0.9*10**k + j*0.8*one*10**i b = cosh(acosh(a)) assert b.ae(a, err) b = sinh(asinh(a)) assert b.ae(a, err) def test_reciprocal_functions(): assert sec(3).ae(-1.01010866590799375) assert csc(3).ae(7.08616739573718592) assert cot(3).ae(-7.01525255143453347) assert sech(3).ae(0.0993279274194332078) assert csch(3).ae(0.0998215696688227329) assert coth(3).ae(1.00496982331368917) assert asec(3).ae(1.23095941734077468) assert acsc(3).ae(0.339836909454121937) assert acot(3).ae(0.321750554396642193) assert asech(0.5).ae(1.31695789692481671) assert acsch(3).ae(0.327450150237258443) assert acoth(3).ae(0.346573590279972655) assert acot(0).ae(1.5707963267948966192) assert acoth(0).ae(1.5707963267948966192j) def test_ldexp(): mp.dps = 15 assert ldexp(mpf(2.5), 0) == 2.5 assert ldexp(mpf(2.5), -1) == 1.25 assert ldexp(mpf(2.5), 2) == 10 assert ldexp(mpf('inf'), 3) == mpf('inf') def test_frexp(): mp.dps = 15 assert frexp(0) == (0.0, 0) assert frexp(9) == (0.5625, 4) assert frexp(1) == (0.5, 1) assert frexp(0.2) == (0.8, -2) assert frexp(1000) == (0.9765625, 10) def test_aliases(): assert ln(7) == log(7) assert log10(3.75) == log(3.75,10) assert degrees(5.6) == 5.6 / degree assert radians(5.6) == 5.6 * degree assert power(-1,0.5) == j assert fmod(25,7) == 4.0 and isinstance(fmod(25,7), mpf) def test_arg_sign(): assert arg(3) == 0 assert arg(-3).ae(pi) assert arg(j).ae(pi/2) assert arg(-j).ae(-pi/2) assert arg(0) == 0 assert isnan(atan2(3,nan)) assert isnan(atan2(nan,3)) assert isnan(atan2(0,nan)) assert isnan(atan2(nan,0)) assert isnan(atan2(nan,nan)) assert arg(inf) == 0 assert arg(-inf).ae(pi) assert isnan(arg(nan)) #assert arg(inf*j).ae(pi/2) assert sign(0) == 0 assert sign(3) == 1 assert sign(-3) == -1 assert sign(inf) == 1 assert sign(-inf) == -1 assert isnan(sign(nan)) assert sign(j) == j assert sign(-3*j) == -j assert sign(1+j).ae((1+j)/sqrt(2)) def test_misc_bugs(): # test that this doesn't raise an exception mp.dps = 1000 log(1302) mp.dps = 15 def test_arange(): assert arange(10) == [mpf('0.0'), mpf('1.0'), mpf('2.0'), mpf('3.0'), mpf('4.0'), mpf('5.0'), mpf('6.0'), mpf('7.0'), mpf('8.0'), mpf('9.0')] assert arange(-5, 5) == [mpf('-5.0'), mpf('-4.0'), mpf('-3.0'), mpf('-2.0'), mpf('-1.0'), mpf('0.0'), mpf('1.0'), mpf('2.0'), mpf('3.0'), mpf('4.0')] assert arange(0, 1, 0.1) == [mpf('0.0'), mpf('0.10000000000000001'), mpf('0.20000000000000001'), mpf('0.30000000000000004'), mpf('0.40000000000000002'), mpf('0.5'), mpf('0.60000000000000009'), mpf('0.70000000000000007'), mpf('0.80000000000000004'), mpf('0.90000000000000002')] assert arange(17, -9, -3) == [mpf('17.0'), mpf('14.0'), mpf('11.0'), mpf('8.0'), mpf('5.0'), mpf('2.0'), mpf('-1.0'), mpf('-4.0'), mpf('-7.0')] assert arange(0.2, 0.1, -0.1) == [mpf('0.20000000000000001')] assert arange(0) == [] assert arange(1000, -1) == [] assert arange(-1.23, 3.21, -0.0000001) == [] def test_linspace(): assert linspace(2, 9, 7) == [mpf('2.0'), mpf('3.166666666666667'), mpf('4.3333333333333339'), mpf('5.5'), mpf('6.666666666666667'), mpf('7.8333333333333339'), mpf('9.0')] assert linspace(2, 9, 7, endpoint=0) == [mpf('2.0'), mpf('3.0'), mpf('4.0'), mpf('5.0'), mpf('6.0'), mpf('7.0'), mpf('8.0')] assert linspace(2, 7, 1) == [mpf(2)] def test_float_cbrt(): mp.dps = 30 for a in arange(0,10,0.1): assert cbrt(a*a*a).ae(a, eps) assert cbrt(-1).ae(0.5 + j*sqrt(3)/2) one_third = mpf(1)/3 for a in arange(0,10,2.7) + [0.1 + 10**5]: a = mpc(a + 1.1j) r1 = cbrt(a) mp.dps += 10 r2 = pow(a, one_third) mp.dps -= 10 assert r1.ae(r2, eps) mp.dps = 100 for n in range(100, 301, 100): w = 10**n + j*10**-3 z = w*w*w r = cbrt(z) assert mpc_ae(r, w, eps) mp.dps = 15 def test_root(): mp.dps = 30 random.seed(1) a = random.randint(0, 10000) p = a*a*a r = nthroot(mpf(p), 3) assert r == a for n in range(4, 10): p = p*a assert nthroot(mpf(p), n) == a mp.dps = 40 for n in range(10, 5000, 100): for a in [random.random()*10000, random.random()*10**100]: r = nthroot(a, n) r1 = pow(a, mpf(1)/n) assert r.ae(r1) r = nthroot(a, -n) r1 = pow(a, -mpf(1)/n) assert r.ae(r1) # XXX: this is broken right now # tests for nthroot rounding for rnd in ['nearest', 'up', 'down']: mp.rounding = rnd for n in [-5, -3, 3, 5]: prec = 50 for i in range(10): mp.prec = prec a = rand() mp.prec = 2*prec b = a**n mp.prec = prec r = nthroot(b, n) assert r == a mp.dps = 30 for n in range(3, 21): a = (random.random() + j*random.random()) assert nthroot(a, n).ae(pow(a, mpf(1)/n)) assert mpc_ae(nthroot(a, n), pow(a, mpf(1)/n)) a = (random.random()*10**100 + j*random.random()) r = nthroot(a, n) mp.dps += 4 r1 = pow(a, mpf(1)/n) mp.dps -= 4 assert r.ae(r1) assert mpc_ae(r, r1, eps) r = nthroot(a, -n) mp.dps += 4 r1 = pow(a, -mpf(1)/n) mp.dps -= 4 assert r.ae(r1) assert mpc_ae(r, r1, eps) mp.dps = 15 assert nthroot(4, 1) == 4 assert nthroot(4, 0) == 1 assert nthroot(4, -1) == 0.25 assert nthroot(inf, 1) == inf assert nthroot(inf, 2) == inf assert nthroot(inf, 3) == inf assert nthroot(inf, -1) == 0 assert nthroot(inf, -2) == 0 assert nthroot(inf, -3) == 0 assert nthroot(j, 1) == j assert nthroot(j, 0) == 1 assert nthroot(j, -1) == -j assert isnan(nthroot(nan, 1)) assert isnan(nthroot(nan, 0)) assert isnan(nthroot(nan, -1)) assert isnan(nthroot(inf, 0)) assert root(2,3) == nthroot(2,3) assert root(16,4,0) == 2 assert root(16,4,1) == 2j assert root(16,4,2) == -2 assert root(16,4,3) == -2j assert root(16,4,4) == 2 assert root(-125,3,1) == -5 def test_issue_136(): for dps in [20, 80]: mp.dps = dps r = nthroot(mpf('-1e-20'), 4) assert r.ae(mpf(10)**(-5) * (1 + j) * mpf(2)**(-0.5)) mp.dps = 80 assert nthroot('-1e-3', 4).ae(mpf(10)**(-3./4) * (1 + j)/sqrt(2)) assert nthroot('-1e-6', 4).ae((1 + j)/(10 * sqrt(20))) # Check that this doesn't take eternity to compute mp.dps = 20 assert nthroot('-1e100000000', 4).ae((1+j)*mpf('1e25000000')/sqrt(2)) mp.dps = 15 def test_mpcfun_real_imag(): mp.dps = 15 x = mpf(0.3) y = mpf(0.4) assert exp(mpc(x,0)) == exp(x) assert exp(mpc(0,y)) == mpc(cos(y),sin(y)) assert cos(mpc(x,0)) == cos(x) assert sin(mpc(x,0)) == sin(x) assert cos(mpc(0,y)) == cosh(y) assert sin(mpc(0,y)) == mpc(0,sinh(y)) assert cospi(mpc(x,0)) == cospi(x) assert sinpi(mpc(x,0)) == sinpi(x) assert cospi(mpc(0,y)).ae(cosh(pi*y)) assert sinpi(mpc(0,y)).ae(mpc(0,sinh(pi*y))) c, s = cospi_sinpi(mpc(x,0)) assert c == cospi(x) assert s == sinpi(x) c, s = cospi_sinpi(mpc(0,y)) assert c.ae(cosh(pi*y)) assert s.ae(mpc(0,sinh(pi*y))) c, s = cos_sin(mpc(x,0)) assert c == cos(x) assert s == sin(x) c, s = cos_sin(mpc(0,y)) assert c == cosh(y) assert s == mpc(0,sinh(y)) def test_perturbation_rounding(): mp.dps = 100 a = pi/10**50 b = -pi/10**50 c = 1 + a d = 1 + b mp.dps = 15 assert exp(a) == 1 assert exp(a, rounding='c') > 1 assert exp(b, rounding='c') == 1 assert exp(a, rounding='f') == 1 assert exp(b, rounding='f') < 1 assert cos(a) == 1 assert cos(a, rounding='c') == 1 assert cos(b, rounding='c') == 1 assert cos(a, rounding='f') < 1 assert cos(b, rounding='f') < 1 for f in [sin, atan, asinh, tanh]: assert f(a) == +a assert f(a, rounding='c') > a assert f(a, rounding='f') < a assert f(b) == +b assert f(b, rounding='c') > b assert f(b, rounding='f') < b for f in [asin, tan, sinh, atanh]: assert f(a) == +a assert f(b) == +b assert f(a, rounding='c') > a assert f(b, rounding='c') > b assert f(a, rounding='f') < a assert f(b, rounding='f') < b assert ln(c) == +a assert ln(d) == +b assert ln(c, rounding='c') > a assert ln(c, rounding='f') < a assert ln(d, rounding='c') > b assert ln(d, rounding='f') < b assert cosh(a) == 1 assert cosh(b) == 1 assert cosh(a, rounding='c') > 1 assert cosh(b, rounding='c') > 1 assert cosh(a, rounding='f') == 1 assert cosh(b, rounding='f') == 1 def test_integer_parts(): assert floor(3.2) == 3 assert ceil(3.2) == 4 assert floor(3.2+5j) == 3+5j assert ceil(3.2+5j) == 4+5j def test_complex_parts(): assert fabs('3') == 3 assert fabs(3+4j) == 5 assert re(3) == 3 assert re(1+4j) == 1 assert im(3) == 0 assert im(1+4j) == 4 assert conj(3) == 3 assert conj(3+4j) == 3-4j assert mpf(3).conjugate() == 3 def test_cospi_sinpi(): assert sinpi(0) == 0 assert sinpi(0.5) == 1 assert sinpi(1) == 0 assert sinpi(1.5) == -1 assert sinpi(2) == 0 assert sinpi(2.5) == 1 assert sinpi(-0.5) == -1 assert cospi(0) == 1 assert cospi(0.5) == 0 assert cospi(1) == -1 assert cospi(1.5) == 0 assert cospi(2) == 1 assert cospi(2.5) == 0 assert cospi(-0.5) == 0 assert cospi(100000000000.25).ae(sqrt(2)/2) a = cospi(2+3j) assert a.real.ae(cos((2+3j)*pi).real) assert a.imag == 0 b = sinpi(2+3j) assert b.imag.ae(sin((2+3j)*pi).imag) assert b.real == 0 mp.dps = 35 x1 = mpf(10000) - mpf('1e-15') x2 = mpf(10000) + mpf('1e-15') x3 = mpf(10000.5) - mpf('1e-15') x4 = mpf(10000.5) + mpf('1e-15') x5 = mpf(10001) - mpf('1e-15') x6 = mpf(10001) + mpf('1e-15') x7 = mpf(10001.5) - mpf('1e-15') x8 = mpf(10001.5) + mpf('1e-15') mp.dps = 15 M = 10**15 assert (sinpi(x1)*M).ae(-pi) assert (sinpi(x2)*M).ae(pi) assert (cospi(x3)*M).ae(pi) assert (cospi(x4)*M).ae(-pi) assert (sinpi(x5)*M).ae(pi) assert (sinpi(x6)*M).ae(-pi) assert (cospi(x7)*M).ae(-pi) assert (cospi(x8)*M).ae(pi) assert 0.999 < cospi(x1, rounding='d') < 1 assert 0.999 < cospi(x2, rounding='d') < 1 assert 0.999 < sinpi(x3, rounding='d') < 1 assert 0.999 < sinpi(x4, rounding='d') < 1 assert -1 < cospi(x5, rounding='d') < -0.999 assert -1 < cospi(x6, rounding='d') < -0.999 assert -1 < sinpi(x7, rounding='d') < -0.999 assert -1 < sinpi(x8, rounding='d') < -0.999 assert (sinpi(1e-15)*M).ae(pi) assert (sinpi(-1e-15)*M).ae(-pi) assert cospi(1e-15) == 1 assert cospi(1e-15, rounding='d') < 1 def test_expj(): assert expj(0) == 1 assert expj(1).ae(exp(j)) assert expj(j).ae(exp(-1)) assert expj(1+j).ae(exp(j*(1+j))) assert expjpi(0) == 1 assert expjpi(1).ae(exp(j*pi)) assert expjpi(j).ae(exp(-pi)) assert expjpi(1+j).ae(exp(j*pi*(1+j))) assert expjpi(-10**15 * j).ae('2.22579818340535731e+1364376353841841') def test_sinc(): assert sinc(0) == sincpi(0) == 1 assert sinc(inf) == sincpi(inf) == 0 assert sinc(-inf) == sincpi(-inf) == 0 assert sinc(2).ae(0.45464871341284084770) assert sinc(2+3j).ae(0.4463290318402435457-2.7539470277436474940j) assert sincpi(2) == 0 assert sincpi(1.5).ae(-0.212206590789193781) def test_fibonacci(): mp.dps = 15 assert [fibonacci(n) for n in range(-5, 10)] == \ [5, -3, 2, -1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34] assert fib(2.5).ae(1.4893065462657091) assert fib(3+4j).ae(-5248.51130728372 - 14195.962288353j) assert fib(1000).ae(4.3466557686937455e+208) assert str(fib(10**100)) == '6.24499112864607e+2089876402499787337692720892375554168224592399182109535392875613974104853496745963277658556235103534' mp.dps = 2100 a = fib(10000) assert a % 10**10 == 9947366875 mp.dps = 15 assert fibonacci(inf) == inf assert fib(3+0j) == 2 def test_call_with_dps(): mp.dps = 15 assert abs(exp(1, dps=30)-e(dps=35)) < 1e-29 def test_tanh(): mp.dps = 15 assert tanh(0) == 0 assert tanh(inf) == 1 assert tanh(-inf) == -1 assert isnan(tanh(nan)) assert tanh(mpc('inf', '0')) == 1 def test_atanh(): mp.dps = 15 assert atanh(0) == 0 assert atanh(0.5).ae(0.54930614433405484570) assert atanh(-0.5).ae(-0.54930614433405484570) assert atanh(1) == inf assert atanh(-1) == -inf assert isnan(atanh(nan)) assert isinstance(atanh(1), mpf) assert isinstance(atanh(-1), mpf) # Limits at infinity jpi2 = j*pi/2 assert atanh(inf).ae(-jpi2) assert atanh(-inf).ae(jpi2) assert atanh(mpc(inf,-1)).ae(-jpi2) assert atanh(mpc(inf,0)).ae(-jpi2) assert atanh(mpc(inf,1)).ae(jpi2) assert atanh(mpc(1,inf)).ae(jpi2) assert atanh(mpc(0,inf)).ae(jpi2) assert atanh(mpc(-1,inf)).ae(jpi2) assert atanh(mpc(-inf,1)).ae(jpi2) assert atanh(mpc(-inf,0)).ae(jpi2) assert atanh(mpc(-inf,-1)).ae(-jpi2) assert atanh(mpc(-1,-inf)).ae(-jpi2) assert atanh(mpc(0,-inf)).ae(-jpi2) assert atanh(mpc(1,-inf)).ae(-jpi2) def test_expm1(): mp.dps = 15 assert expm1(0) == 0 assert expm1(3).ae(exp(3)-1) assert expm1(inf) == inf assert expm1(1e-10)*1e10 assert expm1(1e-50).ae(1e-50) assert (expm1(1e-10)*1e10).ae(1.00000000005) def test_powm1(): mp.dps = 15 assert powm1(2,3) == 7 assert powm1(-1,2) == 0 assert powm1(-1,0) == 0 assert powm1(-2,0) == 0 assert powm1(3+4j,0) == 0 assert powm1(0,1) == -1 assert powm1(0,0) == 0 assert powm1(1,0) == 0 assert powm1(1,2) == 0 assert powm1(1,3+4j) == 0 assert powm1(1,5) == 0 assert powm1(j,4) == 0 assert powm1(-j,4) == 0 assert (powm1(2,1e-100)*1e100).ae(ln2) assert powm1(2,'1e-100000000000') != 0 assert (powm1(fadd(1,1e-100,exact=True), 5)*1e100).ae(5) def test_unitroots(): assert unitroots(1) == [1] assert unitroots(2) == [1, -1] a, b, c = unitroots(3) assert a == 1 assert b.ae(-0.5 + 0.86602540378443864676j) assert c.ae(-0.5 - 0.86602540378443864676j) assert unitroots(1, primitive=True) == [1] assert unitroots(2, primitive=True) == [-1] assert unitroots(3, primitive=True) == unitroots(3)[1:] assert unitroots(4, primitive=True) == [j, -j] assert len(unitroots(17, primitive=True)) == 16 assert len(unitroots(16, primitive=True)) == 8 def test_cyclotomic(): mp.dps = 15 assert [cyclotomic(n,1) for n in range(31)] == [1,0,2,3,2,5,1,7,2,3,1,11,1,13,1,1,2,17,1,19,1,1,1,23,1,5,1,3,1,29,1] assert [cyclotomic(n,-1) for n in range(31)] == [1,-2,0,1,2,1,3,1,2,1,5,1,1,1,7,1,2,1,3,1,1,1,11,1,1,1,13,1,1,1,1] assert [cyclotomic(n,j) for n in range(21)] == [1,-1+j,1+j,j,0,1,-j,j,2,-j,1,j,3,1,-j,1,2,1,j,j,5] assert [cyclotomic(n,-j) for n in range(21)] == [1,-1-j,1-j,-j,0,1,j,-j,2,j,1,-j,3,1,j,1,2,1,-j,-j,5] assert cyclotomic(1624,j) == 1 assert cyclotomic(33600,j) == 1 u = sqrt(j, prec=500) assert cyclotomic(8, u).ae(0) assert cyclotomic(30, u).ae(5.8284271247461900976) assert cyclotomic(2040, u).ae(1) assert cyclotomic(0,2.5) == 1 assert cyclotomic(1,2.5) == 2.5-1 assert cyclotomic(2,2.5) == 2.5+1 assert cyclotomic(3,2.5) == 2.5**2 + 2.5 + 1 assert cyclotomic(7,2.5) == 406.234375 mpmath-1.0.0/mpmath/tests/test_functions2.py000066400000000000000000002251751316273626600211610ustar00rootroot00000000000000import math from mpmath import * def test_bessel(): mp.dps = 15 assert j0(1).ae(0.765197686557966551) assert j0(pi).ae(-0.304242177644093864) assert j0(1000).ae(0.0247866861524201746) assert j0(-25).ae(0.0962667832759581162) assert j1(1).ae(0.440050585744933516) assert j1(pi).ae(0.284615343179752757) assert j1(1000).ae(0.00472831190708952392) assert j1(-25).ae(0.125350249580289905) assert besselj(5,1).ae(0.000249757730211234431) assert besselj(5+0j,1).ae(0.000249757730211234431) assert besselj(5,pi).ae(0.0521411843671184747) assert besselj(5,1000).ae(0.00502540694523318607) assert besselj(5,-25).ae(0.0660079953984229934) assert besselj(-3,2).ae(-0.128943249474402051) assert besselj(-4,2).ae(0.0339957198075684341) assert besselj(3,3+2j).ae(0.424718794929639595942 + 0.625665327745785804812j) assert besselj(0.25,4).ae(-0.374760630804249715) assert besselj(1+2j,3+4j).ae(0.319247428741872131 - 0.669557748880365678j) assert (besselj(3, 10**10) * 10**5).ae(0.76765081748139204023) assert bessely(-0.5, 0) == 0 assert bessely(0.5, 0) == -inf assert bessely(1.5, 0) == -inf assert bessely(0,0) == -inf assert bessely(-0.4, 0) == -inf assert bessely(-0.6, 0) == inf assert bessely(-1, 0) == inf assert bessely(-1.4, 0) == inf assert bessely(-1.6, 0) == -inf assert bessely(-1, 0) == inf assert bessely(-2, 0) == -inf assert bessely(-3, 0) == inf assert bessely(0.5, 0) == -inf assert bessely(1, 0) == -inf assert bessely(1.5, 0) == -inf assert bessely(2, 0) == -inf assert bessely(2.5, 0) == -inf assert bessely(3, 0) == -inf assert bessely(0,0.5).ae(-0.44451873350670655715) assert bessely(1,0.5).ae(-1.4714723926702430692) assert bessely(-1,0.5).ae(1.4714723926702430692) assert bessely(3.5,0.5).ae(-138.86400867242488443) assert bessely(0,3+4j).ae(4.6047596915010138655-8.8110771408232264208j) assert bessely(0,j).ae(-0.26803248203398854876+1.26606587775200833560j) assert (bessely(3, 10**10) * 10**5).ae(0.21755917537013204058) assert besseli(0,0) == 1 assert besseli(1,0) == 0 assert besseli(2,0) == 0 assert besseli(-1,0) == 0 assert besseli(-2,0) == 0 assert besseli(0,0.5).ae(1.0634833707413235193) assert besseli(1,0.5).ae(0.25789430539089631636) assert besseli(-1,0.5).ae(0.25789430539089631636) assert besseli(3.5,0.5).ae(0.00068103597085793815863) assert besseli(0,3+4j).ae(-3.3924877882755196097-1.3239458916287264815j) assert besseli(0,j).ae(besselj(0,1)) assert (besseli(3, 10**10) * mpf(10)**(-4342944813)).ae(4.2996028505491271875) assert besselk(0,0) == inf assert besselk(1,0) == inf assert besselk(2,0) == inf assert besselk(-1,0) == inf assert besselk(-2,0) == inf assert besselk(0,0.5).ae(0.92441907122766586178) assert besselk(1,0.5).ae(1.6564411200033008937) assert besselk(-1,0.5).ae(1.6564411200033008937) assert besselk(3.5,0.5).ae(207.48418747548460607) assert besselk(0,3+4j).ae(-0.007239051213570155013+0.026510418350267677215j) assert besselk(0,j).ae(-0.13863371520405399968-1.20196971531720649914j) assert (besselk(3, 10**10) * mpf(10)**4342944824).ae(1.1628981033356187851) # test for issue 331, bug reported by Michael Hartmann for n in range(10,100,10): mp.dps = n assert besseli(91.5,24.7708).ae("4.00830632138673963619656140653537080438462342928377020695738635559218797348548092636896796324190271316137982810144874264e-41") def test_bessel_zeros(): mp.dps = 15 assert besseljzero(0,1).ae(2.40482555769577276869) assert besseljzero(2,1).ae(5.1356223018406825563) assert besseljzero(1,50).ae(157.86265540193029781) assert besseljzero(10,1).ae(14.475500686554541220) assert besseljzero(0.5,3).ae(9.4247779607693797153) assert besseljzero(2,1,1).ae(3.0542369282271403228) assert besselyzero(0,1).ae(0.89357696627916752158) assert besselyzero(2,1).ae(3.3842417671495934727) assert besselyzero(1,50).ae(156.29183520147840108) assert besselyzero(10,1).ae(12.128927704415439387) assert besselyzero(0.5,3).ae(7.8539816339744830962) assert besselyzero(2,1,1).ae(5.0025829314460639452) def test_hankel(): mp.dps = 15 assert hankel1(0,0.5).ae(0.93846980724081290423-0.44451873350670655715j) assert hankel1(1,0.5).ae(0.2422684576748738864-1.4714723926702430692j) assert hankel1(-1,0.5).ae(-0.2422684576748738864+1.4714723926702430692j) assert hankel1(1.5,0.5).ae(0.0917016996256513026-2.5214655504213378514j) assert hankel1(1.5,3+4j).ae(0.0066806866476728165382-0.0036684231610839127106j) assert hankel2(0,0.5).ae(0.93846980724081290423+0.44451873350670655715j) assert hankel2(1,0.5).ae(0.2422684576748738864+1.4714723926702430692j) assert hankel2(-1,0.5).ae(-0.2422684576748738864-1.4714723926702430692j) assert hankel2(1.5,0.5).ae(0.0917016996256513026+2.5214655504213378514j) assert hankel2(1.5,3+4j).ae(14.783528526098567526-7.397390270853446512j) def test_struve(): mp.dps = 15 assert struveh(2,3).ae(0.74238666967748318564) assert struveh(-2.5,3).ae(0.41271003220971599344) assert struvel(2,3).ae(1.7476573277362782744) assert struvel(-2.5,3).ae(1.5153394466819651377) def test_whittaker(): mp.dps = 15 assert whitm(2,3,4).ae(49.753745589025246591) assert whitw(2,3,4).ae(14.111656223052932215) def test_kelvin(): mp.dps = 15 assert ber(2,3).ae(0.80836846563726819091) assert ber(3,4).ae(-0.28262680167242600233) assert ber(-3,2).ae(-0.085611448496796363669) assert bei(2,3).ae(-0.89102236377977331571) assert bei(-3,2).ae(-0.14420994155731828415) assert ker(2,3).ae(0.12839126695733458928) assert ker(-3,2).ae(-0.29802153400559142783) assert ker(0.5,3).ae(-0.085662378535217097524) assert kei(2,3).ae(0.036804426134164634000) assert kei(-3,2).ae(0.88682069845786731114) assert kei(0.5,3).ae(0.013633041571314302948) def test_hyper_misc(): mp.dps = 15 assert hyp0f1(1,0) == 1 assert hyp1f1(1,2,0) == 1 assert hyp1f2(1,2,3,0) == 1 assert hyp2f1(1,2,3,0) == 1 assert hyp2f2(1,2,3,4,0) == 1 assert hyp2f3(1,2,3,4,5,0) == 1 # Degenerate case: 0F0 assert hyper([],[],0) == 1 assert hyper([],[],-2).ae(exp(-2)) # Degenerate case: 1F0 assert hyper([2],[],1.5) == 4 # assert hyp2f1((1,3),(2,3),(5,6),mpf(27)/32).ae(1.6) assert hyp2f1((1,4),(1,2),(3,4),mpf(80)/81).ae(1.8) assert hyp2f1((2,3),(1,1),(3,2),(2+j)/3).ae(1.327531603558679093+0.439585080092769253j) mp.dps = 25 v = mpc('1.2282306665029814734863026', '-0.1225033830118305184672133') assert hyper([(3,4),2+j,1],[1,5,j/3],mpf(1)/5+j/8).ae(v) mp.dps = 15 def test_elliptic_integrals(): mp.dps = 15 assert ellipk(0).ae(pi/2) assert ellipk(0.5).ae(gamma(0.25)**2/(4*sqrt(pi))) assert ellipk(1) == inf assert ellipk(1+0j) == inf assert ellipk(-1).ae('1.3110287771460599052') assert ellipk(-2).ae('1.1714200841467698589') assert isinstance(ellipk(-2), mpf) assert isinstance(ellipe(-2), mpf) assert ellipk(-50).ae('0.47103424540873331679') mp.dps = 30 n1 = +fraction(99999,100000) n2 = +fraction(100001,100000) mp.dps = 15 assert ellipk(n1).ae('7.1427724505817781901') assert ellipk(n2).ae(mpc('7.1427417367963090109', '-1.5707923998261688019')) assert ellipe(n1).ae('1.0000332138990829170') v = ellipe(n2) assert v.real.ae('0.999966786328145474069137') assert (v.imag*10**6).ae('7.853952181727432') assert ellipk(2).ae(mpc('1.3110287771460599052', '-1.3110287771460599052')) assert ellipk(50).ae(mpc('0.22326753950210985451', '-0.47434723226254522087')) assert ellipk(3+4j).ae(mpc('0.91119556380496500866', '0.63133428324134524388')) assert ellipk(3-4j).ae(mpc('0.91119556380496500866', '-0.63133428324134524388')) assert ellipk(-3+4j).ae(mpc('0.95357894880405122483', '0.23093044503746114444')) assert ellipk(-3-4j).ae(mpc('0.95357894880405122483', '-0.23093044503746114444')) assert isnan(ellipk(nan)) assert isnan(ellipe(nan)) assert ellipk(inf) == 0 assert isinstance(ellipk(inf), mpc) assert ellipk(-inf) == 0 assert ellipk(1+0j) == inf assert ellipe(0).ae(pi/2) assert ellipe(0.5).ae(pi**(mpf(3)/2)/gamma(0.25)**2 +gamma(0.25)**2/(8*sqrt(pi))) assert ellipe(1) == 1 assert ellipe(1+0j) == 1 assert ellipe(inf) == mpc(0,inf) assert ellipe(-inf) == inf assert ellipe(3+4j).ae(1.4995535209333469543-1.5778790079127582745j) assert ellipe(3-4j).ae(1.4995535209333469543+1.5778790079127582745j) assert ellipe(-3+4j).ae(2.5804237855343377803-0.8306096791000413778j) assert ellipe(-3-4j).ae(2.5804237855343377803+0.8306096791000413778j) assert ellipe(2).ae(0.59907011736779610372+0.59907011736779610372j) assert ellipe('1e-1000000000').ae(pi/2) assert ellipk('1e-1000000000').ae(pi/2) assert ellipe(-pi).ae(2.4535865983838923) mp.dps = 50 assert ellipk(1/pi).ae('1.724756270009501831744438120951614673874904182624739673') assert ellipe(1/pi).ae('1.437129808135123030101542922290970050337425479058225712') assert ellipk(-10*pi).ae('0.5519067523886233967683646782286965823151896970015484512') assert ellipe(-10*pi).ae('5.926192483740483797854383268707108012328213431657645509') v = ellipk(pi) assert v.real.ae('0.973089521698042334840454592642137667227167622330325225') assert v.imag.ae('-1.156151296372835303836814390793087600271609993858798016') v = ellipe(pi) assert v.real.ae('0.4632848917264710404078033487934663562998345622611263332') assert v.imag.ae('1.0637961621753130852473300451583414489944099504180510966') mp.dps = 15 def test_exp_integrals(): mp.dps = 15 x = +e z = e + sqrt(3)*j assert ei(x).ae(8.21168165538361560) assert li(x).ae(1.89511781635593676) assert si(x).ae(1.82104026914756705) assert ci(x).ae(0.213958001340379779) assert shi(x).ae(4.11520706247846193) assert chi(x).ae(4.09647459290515367) assert fresnels(x).ae(0.437189718149787643) assert fresnelc(x).ae(0.401777759590243012) assert airyai(x).ae(0.0108502401568586681) assert airybi(x).ae(8.98245748585468627) assert ei(z).ae(3.72597969491314951 + 7.34213212314224421j) assert li(z).ae(2.28662658112562502 + 1.50427225297269364j) assert si(z).ae(2.48122029237669054 + 0.12684703275254834j) assert ci(z).ae(0.169255590269456633 - 0.892020751420780353j) assert shi(z).ae(1.85810366559344468 + 3.66435842914920263j) assert chi(z).ae(1.86787602931970484 + 3.67777369399304159j) assert fresnels(z/3).ae(0.034534397197008182 + 0.754859844188218737j) assert fresnelc(z/3).ae(1.261581645990027372 + 0.417949198775061893j) assert airyai(z).ae(-0.0162552579839056062 - 0.0018045715700210556j) assert airybi(z).ae(-4.98856113282883371 + 2.08558537872180623j) assert li(0) == 0.0 assert li(1) == -inf assert li(inf) == inf assert isinstance(li(0.7), mpf) assert si(inf).ae(pi/2) assert si(-inf).ae(-pi/2) assert ci(inf) == 0 assert ci(0) == -inf assert isinstance(ei(-0.7), mpf) assert airyai(inf) == 0 assert airybi(inf) == inf assert airyai(-inf) == 0 assert airybi(-inf) == 0 assert fresnels(inf) == 0.5 assert fresnelc(inf) == 0.5 assert fresnels(-inf) == -0.5 assert fresnelc(-inf) == -0.5 assert shi(0) == 0 assert shi(inf) == inf assert shi(-inf) == -inf assert chi(0) == -inf assert chi(inf) == inf def test_ei(): mp.dps = 15 assert ei(0) == -inf assert ei(inf) == inf assert ei(-inf) == -0.0 assert ei(20+70j).ae(6.1041351911152984397e6 - 2.7324109310519928872e6j) # tests for the asymptotic expansion # values checked with Mathematica ExpIntegralEi mp.dps = 50 r = ei(20000) s = '3.8781962825045010930273870085501819470698476975019e+8681' assert str(r) == s r = ei(-200) s = '-6.8852261063076355977108174824557929738368086933303e-90' assert str(r) == s r =ei(20000 + 10*j) sre = '-3.255138234032069402493850638874410725961401274106e+8681' sim = '-2.1081929993474403520785942429469187647767369645423e+8681' assert str(r.real) == sre and str(r.imag) == sim mp.dps = 15 # More asymptotic expansions assert chi(-10**6+100j).ae('1.3077239389562548386e+434288 + 7.6808956999707408158e+434287j') assert shi(-10**6+100j).ae('-1.3077239389562548386e+434288 - 7.6808956999707408158e+434287j') mp.dps = 15 assert ei(10j).ae(-0.0454564330044553726+3.2291439210137706686j) assert ei(100j).ae(-0.0051488251426104921+3.1330217936839529126j) u = ei(fmul(10**20, j, exact=True)) assert u.real.ae(-6.4525128526578084421345e-21, abs_eps=0, rel_eps=8*eps) assert u.imag.ae(pi) assert ei(-10j).ae(-0.0454564330044553726-3.2291439210137706686j) assert ei(-100j).ae(-0.0051488251426104921-3.1330217936839529126j) u = ei(fmul(-10**20, j, exact=True)) assert u.real.ae(-6.4525128526578084421345e-21, abs_eps=0, rel_eps=8*eps) assert u.imag.ae(-pi) assert ei(10+10j).ae(-1576.1504265768517448+436.9192317011328140j) u = ei(-10+10j) assert u.real.ae(7.6698978415553488362543e-7, abs_eps=0, rel_eps=8*eps) assert u.imag.ae(3.141595611735621062025) def test_e1(): mp.dps = 15 assert e1(0) == inf assert e1(inf) == 0 assert e1(-inf) == mpc(-inf, -pi) assert e1(10j).ae(0.045456433004455372635 + 0.087551267423977430100j) assert e1(100j).ae(0.0051488251426104921444 - 0.0085708599058403258790j) assert e1(fmul(10**20, j, exact=True)).ae(6.4525128526578084421e-21 - 7.6397040444172830039e-21j, abs_eps=0, rel_eps=8*eps) assert e1(-10j).ae(0.045456433004455372635 - 0.087551267423977430100j) assert e1(-100j).ae(0.0051488251426104921444 + 0.0085708599058403258790j) assert e1(fmul(-10**20, j, exact=True)).ae(6.4525128526578084421e-21 + 7.6397040444172830039e-21j, abs_eps=0, rel_eps=8*eps) def test_expint(): mp.dps = 15 assert expint(0,0) == inf assert expint(0,1).ae(1/e) assert expint(0,1.5).ae(2/exp(1.5)/3) assert expint(1,1).ae(-ei(-1)) assert expint(2,0).ae(1) assert expint(3,0).ae(1/2.) assert expint(4,0).ae(1/3.) assert expint(-2, 0.5).ae(26/sqrt(e)) assert expint(-1,-1) == 0 assert expint(-2,-1).ae(-e) assert expint(5.5, 0).ae(2/9.) assert expint(2.00000001,0).ae(100000000./100000001) assert expint(2+3j,4-j).ae(0.0023461179581675065414+0.0020395540604713669262j) assert expint('1.01', '1e-1000').ae(99.9999999899412802) assert expint('1.000000000001', 3.5).ae(0.00697013985754701819446) assert expint(2,3).ae(3*ei(-3)+exp(-3)) assert (expint(10,20)*10**10).ae(0.694439055541231353) assert expint(3,inf) == 0 assert expint(3.2,inf) == 0 assert expint(3.2+2j,inf) == 0 assert expint(1,3j).ae(-0.11962978600800032763 + 0.27785620120457163717j) assert expint(1,3).ae(0.013048381094197037413) assert expint(1,-3).ae(-ei(3)-pi*j) #assert expint(3) == expint(1,3) assert expint(1,-20).ae(-25615652.66405658882 - 3.1415926535897932385j) assert expint(1000000,0).ae(1./999999) assert expint(0,2+3j).ae(-0.025019798357114678171 + 0.027980439405104419040j) assert expint(-1,2+3j).ae(-0.022411973626262070419 + 0.038058922011377716932j) assert expint(-1.5,0) == inf def test_trig_integrals(): mp.dps = 30 assert si(mpf(1)/1000000).ae('0.000000999999999999944444444444446111') assert ci(mpf(1)/1000000).ae('-13.2382948930629912435014366276') assert si(10**10).ae('1.5707963267075846569685111517747537') assert ci(10**10).ae('-4.87506025174822653785729773959e-11') assert si(10**100).ae(pi/2) assert (ci(10**100)*10**100).ae('-0.372376123661276688262086695553') assert si(-3) == -si(3) assert ci(-3).ae(ci(3) + pi*j) # Test complex structure mp.dps = 15 assert mp.ci(50).ae(-0.0056283863241163054402) assert mp.ci(50+2j).ae(-0.018378282946133067149+0.070352808023688336193j) assert mp.ci(20j).ae(1.28078263320282943611e7+1.5707963267949j) assert mp.ci(-2+20j).ae(-4.050116856873293505e6+1.207476188206989909e7j) assert mp.ci(-50+2j).ae(-0.0183782829461330671+3.0712398455661049023j) assert mp.ci(-50).ae(-0.0056283863241163054+3.1415926535897932385j) assert mp.ci(-50-2j).ae(-0.0183782829461330671-3.0712398455661049023j) assert mp.ci(-2-20j).ae(-4.050116856873293505e6-1.207476188206989909e7j) assert mp.ci(-20j).ae(1.28078263320282943611e7-1.5707963267949j) assert mp.ci(50-2j).ae(-0.018378282946133067149-0.070352808023688336193j) assert mp.si(50).ae(1.5516170724859358947) assert mp.si(50+2j).ae(1.497884414277228461-0.017515007378437448j) assert mp.si(20j).ae(1.2807826332028294459e7j) assert mp.si(-2+20j).ae(-1.20747603112735722103e7-4.050116856873293554e6j) assert mp.si(-50+2j).ae(-1.497884414277228461-0.017515007378437448j) assert mp.si(-50).ae(-1.5516170724859358947) assert mp.si(-50-2j).ae(-1.497884414277228461+0.017515007378437448j) assert mp.si(-2-20j).ae(-1.20747603112735722103e7+4.050116856873293554e6j) assert mp.si(-20j).ae(-1.2807826332028294459e7j) assert mp.si(50-2j).ae(1.497884414277228461+0.017515007378437448j) assert mp.chi(50j).ae(-0.0056283863241163054+1.5707963267948966192j) assert mp.chi(-2+50j).ae(-0.0183782829461330671+1.6411491348185849554j) assert mp.chi(-20).ae(1.28078263320282943611e7+3.1415926535898j) assert mp.chi(-20-2j).ae(-4.050116856873293505e6+1.20747571696809187053e7j) assert mp.chi(-2-50j).ae(-0.0183782829461330671-1.6411491348185849554j) assert mp.chi(-50j).ae(-0.0056283863241163054-1.5707963267948966192j) assert mp.chi(2-50j).ae(-0.0183782829461330671-1.500443518771208283j) assert mp.chi(20-2j).ae(-4.050116856873293505e6-1.20747603112735722951e7j) assert mp.chi(20).ae(1.2807826332028294361e7) assert mp.chi(2+50j).ae(-0.0183782829461330671+1.500443518771208283j) assert mp.shi(50j).ae(1.5516170724859358947j) assert mp.shi(-2+50j).ae(0.017515007378437448+1.497884414277228461j) assert mp.shi(-20).ae(-1.2807826332028294459e7) assert mp.shi(-20-2j).ae(4.050116856873293554e6-1.20747603112735722103e7j) assert mp.shi(-2-50j).ae(0.017515007378437448-1.497884414277228461j) assert mp.shi(-50j).ae(-1.5516170724859358947j) assert mp.shi(2-50j).ae(-0.017515007378437448-1.497884414277228461j) assert mp.shi(20-2j).ae(-4.050116856873293554e6-1.20747603112735722103e7j) assert mp.shi(20).ae(1.2807826332028294459e7) assert mp.shi(2+50j).ae(-0.017515007378437448+1.497884414277228461j) def ae(x,y,tol=1e-12): return abs(x-y) <= abs(y)*tol assert fp.ci(fp.inf) == 0 assert ae(fp.ci(fp.ninf), fp.pi*1j) assert ae(fp.si(fp.inf), fp.pi/2) assert ae(fp.si(fp.ninf), -fp.pi/2) assert fp.si(0) == 0 assert ae(fp.ci(50), -0.0056283863241163054402) assert ae(fp.ci(50+2j), -0.018378282946133067149+0.070352808023688336193j) assert ae(fp.ci(20j), 1.28078263320282943611e7+1.5707963267949j) assert ae(fp.ci(-2+20j), -4.050116856873293505e6+1.207476188206989909e7j) assert ae(fp.ci(-50+2j), -0.0183782829461330671+3.0712398455661049023j) assert ae(fp.ci(-50), -0.0056283863241163054+3.1415926535897932385j) assert ae(fp.ci(-50-2j), -0.0183782829461330671-3.0712398455661049023j) assert ae(fp.ci(-2-20j), -4.050116856873293505e6-1.207476188206989909e7j) assert ae(fp.ci(-20j), 1.28078263320282943611e7-1.5707963267949j) assert ae(fp.ci(50-2j), -0.018378282946133067149-0.070352808023688336193j) assert ae(fp.si(50), 1.5516170724859358947) assert ae(fp.si(50+2j), 1.497884414277228461-0.017515007378437448j) assert ae(fp.si(20j), 1.2807826332028294459e7j) assert ae(fp.si(-2+20j), -1.20747603112735722103e7-4.050116856873293554e6j) assert ae(fp.si(-50+2j), -1.497884414277228461-0.017515007378437448j) assert ae(fp.si(-50), -1.5516170724859358947) assert ae(fp.si(-50-2j), -1.497884414277228461+0.017515007378437448j) assert ae(fp.si(-2-20j), -1.20747603112735722103e7+4.050116856873293554e6j) assert ae(fp.si(-20j), -1.2807826332028294459e7j) assert ae(fp.si(50-2j), 1.497884414277228461+0.017515007378437448j) assert ae(fp.chi(50j), -0.0056283863241163054+1.5707963267948966192j) assert ae(fp.chi(-2+50j), -0.0183782829461330671+1.6411491348185849554j) assert ae(fp.chi(-20), 1.28078263320282943611e7+3.1415926535898j) assert ae(fp.chi(-20-2j), -4.050116856873293505e6+1.20747571696809187053e7j) assert ae(fp.chi(-2-50j), -0.0183782829461330671-1.6411491348185849554j) assert ae(fp.chi(-50j), -0.0056283863241163054-1.5707963267948966192j) assert ae(fp.chi(2-50j), -0.0183782829461330671-1.500443518771208283j) assert ae(fp.chi(20-2j), -4.050116856873293505e6-1.20747603112735722951e7j) assert ae(fp.chi(20), 1.2807826332028294361e7) assert ae(fp.chi(2+50j), -0.0183782829461330671+1.500443518771208283j) assert ae(fp.shi(50j), 1.5516170724859358947j) assert ae(fp.shi(-2+50j), 0.017515007378437448+1.497884414277228461j) assert ae(fp.shi(-20), -1.2807826332028294459e7) assert ae(fp.shi(-20-2j), 4.050116856873293554e6-1.20747603112735722103e7j) assert ae(fp.shi(-2-50j), 0.017515007378437448-1.497884414277228461j) assert ae(fp.shi(-50j), -1.5516170724859358947j) assert ae(fp.shi(2-50j), -0.017515007378437448-1.497884414277228461j) assert ae(fp.shi(20-2j), -4.050116856873293554e6-1.20747603112735722103e7j) assert ae(fp.shi(20), 1.2807826332028294459e7) assert ae(fp.shi(2+50j), -0.017515007378437448+1.497884414277228461j) def test_airy(): mp.dps = 15 assert (airyai(10)*10**10).ae(1.1047532552898687) assert (airybi(10)/10**9).ae(0.45564115354822515) assert (airyai(1000)*10**9158).ae(9.306933063179556004) assert (airybi(1000)/10**9154).ae(5.4077118391949465477) assert airyai(-1000).ae(0.055971895773019918842) assert airybi(-1000).ae(-0.083264574117080633012) assert (airyai(100+100j)*10**188).ae(2.9099582462207032076 + 2.353013591706178756j) assert (airybi(100+100j)/10**185).ae(1.7086751714463652039 - 3.1416590020830804578j) def test_hyper_0f1(): mp.dps = 15 v = 8.63911136507950465 assert hyper([],[(1,3)],1.5).ae(v) assert hyper([],[1/3.],1.5).ae(v) assert hyp0f1(1/3.,1.5).ae(v) assert hyp0f1((1,3),1.5).ae(v) # Asymptotic expansion assert hyp0f1(3,1e9).ae('4.9679055380347771271e+27455') assert hyp0f1(3,1e9j).ae('-2.1222788784457702157e+19410 + 5.0840597555401854116e+19410j') def test_hyper_1f1(): mp.dps = 15 v = 1.2917526488617656673 assert hyper([(1,2)],[(3,2)],0.7).ae(v) assert hyper([(1,2)],[(3,2)],0.7+0j).ae(v) assert hyper([0.5],[(3,2)],0.7).ae(v) assert hyper([0.5],[1.5],0.7).ae(v) assert hyper([0.5],[(3,2)],0.7+0j).ae(v) assert hyper([0.5],[1.5],0.7+0j).ae(v) assert hyper([(1,2)],[1.5+0j],0.7).ae(v) assert hyper([0.5+0j],[1.5],0.7).ae(v) assert hyper([0.5+0j],[1.5+0j],0.7+0j).ae(v) assert hyp1f1(0.5,1.5,0.7).ae(v) assert hyp1f1((1,2),1.5,0.7).ae(v) # Asymptotic expansion assert hyp1f1(2,3,1e10).ae('2.1555012157015796988e+4342944809') assert (hyp1f1(2,3,1e10j)*10**10).ae(-0.97501205020039745852 - 1.7462392454512132074j) # Shouldn't use asymptotic expansion assert hyp1f1(-2, 1, 10000).ae(49980001) # Bug assert hyp1f1(1j,fraction(1,3),0.415-69.739j).ae(25.857588206024346592 + 15.738060264515292063j) def test_hyper_2f1(): mp.dps = 15 v = 1.0652207633823291032 assert hyper([(1,2), (3,4)], [2], 0.3).ae(v) assert hyper([(1,2), 0.75], [2], 0.3).ae(v) assert hyper([0.5, 0.75], [2.0], 0.3).ae(v) assert hyper([0.5, 0.75], [2.0], 0.3+0j).ae(v) assert hyper([0.5+0j, (3,4)], [2.0], 0.3+0j).ae(v) assert hyper([0.5+0j, (3,4)], [2.0], 0.3).ae(v) assert hyper([0.5, (3,4)], [2.0+0j], 0.3).ae(v) assert hyper([0.5+0j, 0.75+0j], [2.0+0j], 0.3+0j).ae(v) v = 1.09234681096223231717 + 0.18104859169479360380j assert hyper([(1,2),0.75+j], [2], 0.5).ae(v) assert hyper([0.5,0.75+j], [2.0], 0.5).ae(v) assert hyper([0.5,0.75+j], [2.0], 0.5+0j).ae(v) assert hyper([0.5,0.75+j], [2.0+0j], 0.5+0j).ae(v) v = 0.9625 - 0.125j assert hyper([(3,2),-1],[4], 0.1+j/3).ae(v) assert hyper([1.5,-1.0],[4], 0.1+j/3).ae(v) assert hyper([1.5,-1.0],[4+0j], 0.1+j/3).ae(v) assert hyper([1.5+0j,-1.0+0j],[4+0j], 0.1+j/3).ae(v) v = 1.02111069501693445001 - 0.50402252613466859521j assert hyper([(2,10),(3,10)],[(4,10)],1.5).ae(v) assert hyper([0.2,(3,10)],[0.4+0j],1.5).ae(v) assert hyper([0.2,(3,10)],[0.4+0j],1.5+0j).ae(v) v = 0.76922501362865848528 + 0.32640579593235886194j assert hyper([(2,10),(3,10)],[(4,10)],4+2j).ae(v) assert hyper([0.2,(3,10)],[0.4+0j],4+2j).ae(v) assert hyper([0.2,(3,10)],[(4,10)],4+2j).ae(v) def test_hyper_2f1_hard(): mp.dps = 15 # Singular cases assert hyp2f1(2,-1,-1,3).ae(7) assert hyp2f1(2,-1,-1,3,eliminate_all=True).ae(0.25) assert hyp2f1(2,-2,-2,3).ae(34) assert hyp2f1(2,-2,-2,3,eliminate_all=True).ae(0.25) assert hyp2f1(2,-2,-3,3) == 14 assert hyp2f1(2,-3,-2,3) == inf assert hyp2f1(2,-1.5,-1.5,3) == 0.25 assert hyp2f1(1,2,3,0) == 1 assert hyp2f1(0,1,0,0) == 1 assert hyp2f1(0,0,0,0) == 1 assert isnan(hyp2f1(1,1,0,0)) assert hyp2f1(2,-1,-5, 0.25+0.25j).ae(1.1+0.1j) assert hyp2f1(2,-5,-5, 0.25+0.25j, eliminate=False).ae(163./128 + 125./128*j) assert hyp2f1(0.7235, -1, -5, 0.3).ae(1.04341) assert hyp2f1(0.7235, -5, -5, 0.3, eliminate=False).ae(1.2939225017815903812) assert hyp2f1(-1,-2,4,1) == 1.5 assert hyp2f1(1,2,-3,1) == inf assert hyp2f1(-2,-2,1,1) == 6 assert hyp2f1(1,-2,-4,1).ae(5./3) assert hyp2f1(0,-6,-4,1) == 1 assert hyp2f1(0,-3,-4,1) == 1 assert hyp2f1(0,0,0,1) == 1 assert hyp2f1(1,0,0,1,eliminate=False) == 1 assert hyp2f1(1,1,0,1) == inf assert hyp2f1(1,-6,-4,1) == inf assert hyp2f1(-7.2,-0.5,-4.5,1) == 0 assert hyp2f1(-7.2,-1,-2,1).ae(-2.6) assert hyp2f1(1,-0.5,-4.5, 1) == inf assert hyp2f1(1,0.5,-4.5, 1) == -inf # Check evaluation on / close to unit circle z = exp(j*pi/3) w = (nthroot(2,3)+1)*exp(j*pi/12)/nthroot(3,4)**3 assert hyp2f1('1/2','1/6','1/3', z).ae(w) assert hyp2f1('1/2','1/6','1/3', z.conjugate()).ae(w.conjugate()) assert hyp2f1(0.25, (1,3), 2, '0.999').ae(1.06826449496030635) assert hyp2f1(0.25, (1,3), 2, '1.001').ae(1.06867299254830309446-0.00001446586793975874j) assert hyp2f1(0.25, (1,3), 2, -1).ae(0.96656584492524351673) assert hyp2f1(0.25, (1,3), 2, j).ae(0.99041766248982072266+0.03777135604180735522j) assert hyp2f1(2,3,5,'0.99').ae(27.699347904322690602) assert hyp2f1((3,2),-0.5,3,'0.99').ae(0.68403036843911661388) assert hyp2f1(2,3,5,1j).ae(0.37290667145974386127+0.59210004902748285917j) assert fsum([hyp2f1((7,10),(2,3),(-1,2), 0.95*exp(j*k)) for k in range(1,15)]).ae(52.851400204289452922+6.244285013912953225j) assert fsum([hyp2f1((7,10),(2,3),(-1,2), 1.05*exp(j*k)) for k in range(1,15)]).ae(54.506013786220655330-3.000118813413217097j) assert fsum([hyp2f1((7,10),(2,3),(-1,2), exp(j*k)) for k in range(1,15)]).ae(55.792077935955314887+1.731986485778500241j) assert hyp2f1(2,2.5,-3.25,0.999).ae(218373932801217082543180041.33) # Branches assert hyp2f1(1,1,2,1.01).ae(4.5595744415723676911-3.1104877758314784539j) assert hyp2f1(1,1,2,1.01+0.1j).ae(2.4149427480552782484+1.4148224796836938829j) assert hyp2f1(1,1,2,3+4j).ae(0.14576709331407297807+0.48379185417980360773j) assert hyp2f1(1,1,2,4).ae(-0.27465307216702742285 - 0.78539816339744830962j) assert hyp2f1(1,1,2,-4).ae(0.40235947810852509365) # Other: # Cancellation with a large parameter involved (bug reported on sage-devel) assert hyp2f1(112, (51,10), (-9,10), -0.99999).ae(-1.6241361047970862961e-24, abs_eps=0, rel_eps=eps*16) def test_hyper_3f2_etc(): assert hyper([1,2,3],[1.5,8],-1).ae(0.67108992351533333030) assert hyper([1,2,3,4],[5,6,7], -1).ae(0.90232988035425506008) assert hyper([1,2,3],[1.25,5], 1).ae(28.924181329701905701) assert hyper([1,2,3,4],[5,6,7],5).ae(1.5192307344006649499-1.1529845225075537461j) assert hyper([1,2,3,4,5],[6,7,8,9],-1).ae(0.96288759462882357253) assert hyper([1,2,3,4,5],[6,7,8,9],1).ae(1.0428697385885855841) assert hyper([1,2,3,4,5],[6,7,8,9],5).ae(1.33980653631074769423-0.07143405251029226699j) assert hyper([1,2.79,3.08,4.37],[5.2,6.1,7.3],5).ae(1.0996321464692607231-1.7748052293979985001j) assert hyper([1,1,1],[1,2],1) == inf assert hyper([1,1,1],[2,(101,100)],1).ae(100.01621213528313220) # slow -- covered by doctests #assert hyper([1,1,1],[2,3],0.9999).ae(1.2897972005319693905) def test_hyper_u(): mp.dps = 15 assert hyperu(2,-3,0).ae(0.05) assert hyperu(2,-3.5,0).ae(4./99) assert hyperu(2,0,0) == 0.5 assert hyperu(-5,1,0) == -120 assert hyperu(-5,2,0) == inf assert hyperu(-5,-2,0) == 0 assert hyperu(7,7,3).ae(0.00014681269365593503986) #exp(3)*gammainc(-6,3) assert hyperu(2,-3,4).ae(0.011836478100271995559) assert hyperu(3,4,5).ae(1./125) assert hyperu(2,3,0.0625) == 256 assert hyperu(-1,2,0.25+0.5j) == -1.75+0.5j assert hyperu(0.5,1.5,7.25).ae(2/sqrt(29)) assert hyperu(2,6,pi).ae(0.55804439825913399130) assert (hyperu((3,2),8,100+201j)*10**4).ae(-0.3797318333856738798 - 2.9974928453561707782j) assert (hyperu((5,2),(-1,2),-5000)*10**10).ae(-5.6681877926881664678j) # XXX: fails because of undetected cancellation in low level series code # Alternatively: could use asymptotic series here, if convergence test # tweaked back to recognize this one #assert (hyperu((5,2),(-1,2),-500)*10**7).ae(-1.82526906001593252847j) def test_hyper_2f0(): mp.dps = 15 assert hyper([1,2],[],3) == hyp2f0(1,2,3) assert hyp2f0(2,3,7).ae(0.0116108068639728714668 - 0.0073727413865865802130j) assert hyp2f0(2,3,0) == 1 assert hyp2f0(0,0,0) == 1 assert hyp2f0(-1,-1,1).ae(2) assert hyp2f0(-4,1,1.5).ae(62.5) assert hyp2f0(-4,1,50).ae(147029801) assert hyp2f0(-4,1,0.0001).ae(0.99960011997600240000) assert hyp2f0(0.5,0.25,0.001).ae(1.0001251174078538115) assert hyp2f0(0.5,0.25,3+4j).ae(0.85548875824755163518 + 0.21636041283392292973j) # Important: cancellation check assert hyp2f0((1,6),(5,6),-0.02371708245126284498).ae(0.996785723120804309) # Should be exact; polynomial case assert hyp2f0(-2,1,0.5+0.5j,zeroprec=200) == 0 assert hyp2f0(1,-2,0.5+0.5j,zeroprec=200) == 0 # There used to be a bug in thresholds that made one of the following hang for d in [15, 50, 80]: mp.dps = d assert hyp2f0(1.5, 0.5, 0.009).ae('1.006867007239309717945323585695344927904000945829843527398772456281301440034218290443367270629519483 + 1.238277162240704919639384945859073461954721356062919829456053965502443570466701567100438048602352623e-46j') def test_hyper_1f2(): mp.dps = 15 assert hyper([1],[2,3],4) == hyp1f2(1,2,3,4) a1,b1,b2 = (1,10),(2,3),1./16 assert hyp1f2(a1,b1,b2,10).ae(298.7482725554557568) assert hyp1f2(a1,b1,b2,100).ae(224128961.48602947604) assert hyp1f2(a1,b1,b2,1000).ae(1.1669528298622675109e+27) assert hyp1f2(a1,b1,b2,10000).ae(2.4780514622487212192e+86) assert hyp1f2(a1,b1,b2,100000).ae(1.3885391458871523997e+274) assert hyp1f2(a1,b1,b2,1000000).ae('9.8851796978960318255e+867') assert hyp1f2(a1,b1,b2,10**7).ae('1.1505659189516303646e+2746') assert hyp1f2(a1,b1,b2,10**8).ae('1.4672005404314334081e+8685') assert hyp1f2(a1,b1,b2,10**20).ae('3.6888217332150976493e+8685889636') assert hyp1f2(a1,b1,b2,10*j).ae(-16.163252524618572878 - 44.321567896480184312j) assert hyp1f2(a1,b1,b2,100*j).ae(61938.155294517848171 + 637349.45215942348739j) assert hyp1f2(a1,b1,b2,1000*j).ae(8455057657257695958.7 + 6261969266997571510.6j) assert hyp1f2(a1,b1,b2,10000*j).ae(-8.9771211184008593089e+60 + 4.6550528111731631456e+59j) assert hyp1f2(a1,b1,b2,100000*j).ae(2.6398091437239324225e+193 + 4.1658080666870618332e+193j) assert hyp1f2(a1,b1,b2,1000000*j).ae('3.5999042951925965458e+613 + 1.5026014707128947992e+613j') assert hyp1f2(a1,b1,b2,10**7*j).ae('-8.3208715051623234801e+1939 - 3.6752883490851869429e+1941j') assert hyp1f2(a1,b1,b2,10**8*j).ae('2.0724195707891484454e+6140 - 1.3276619482724266387e+6141j') assert hyp1f2(a1,b1,b2,10**20*j).ae('-1.1734497974795488504e+6141851462 + 1.1498106965385471542e+6141851462j') def test_hyper_2f3(): mp.dps = 15 assert hyper([1,2],[3,4,5],6) == hyp2f3(1,2,3,4,5,6) a1,a2,b1,b2,b3 = (1,10),(2,3),(3,10), 2, 1./16 # Check asymptotic expansion assert hyp2f3(a1,a2,b1,b2,b3,10).ae(128.98207160698659976) assert hyp2f3(a1,a2,b1,b2,b3,1000).ae(6.6309632883131273141e25) assert hyp2f3(a1,a2,b1,b2,b3,10000).ae(4.6863639362713340539e84) assert hyp2f3(a1,a2,b1,b2,b3,100000).ae(8.6632451236103084119e271) assert hyp2f3(a1,a2,b1,b2,b3,10**6).ae('2.0291718386574980641e865') assert hyp2f3(a1,a2,b1,b2,b3,10**7).ae('7.7639836665710030977e2742') assert hyp2f3(a1,a2,b1,b2,b3,10**8).ae('3.2537462584071268759e8681') assert hyp2f3(a1,a2,b1,b2,b3,10**20).ae('1.2966030542911614163e+8685889627') assert hyp2f3(a1,a2,b1,b2,b3,10*j).ae(-18.551602185587547854 - 13.348031097874113552j) assert hyp2f3(a1,a2,b1,b2,b3,100*j).ae(78634.359124504488695 + 74459.535945281973996j) assert hyp2f3(a1,a2,b1,b2,b3,1000*j).ae(597682550276527901.59 - 65136194809352613.078j) assert hyp2f3(a1,a2,b1,b2,b3,10000*j).ae(-1.1779696326238582496e+59 + 1.2297607505213133872e+59j) assert hyp2f3(a1,a2,b1,b2,b3,100000*j).ae(2.9844228969804380301e+191 + 7.5587163231490273296e+190j) assert hyp2f3(a1,a2,b1,b2,b3,1000000*j).ae('7.4859161049322370311e+610 - 2.8467477015940090189e+610j') assert hyp2f3(a1,a2,b1,b2,b3,10**7*j).ae('-1.7477645579418800826e+1938 - 1.7606522995808116405e+1938j') assert hyp2f3(a1,a2,b1,b2,b3,10**8*j).ae('-1.6932731942958401784e+6137 - 2.4521909113114629368e+6137j') assert hyp2f3(a1,a2,b1,b2,b3,10**20*j).ae('-2.0988815677627225449e+6141851451 + 5.7708223542739208681e+6141851452j') def test_hyper_2f2(): mp.dps = 15 assert hyper([1,2],[3,4],5) == hyp2f2(1,2,3,4,5) a1,a2,b1,b2 = (3,10),4,(1,2),1./16 assert hyp2f2(a1,a2,b1,b2,10).ae(448225936.3377556696) assert hyp2f2(a1,a2,b1,b2,10000).ae('1.2012553712966636711e+4358') assert hyp2f2(a1,a2,b1,b2,-20000).ae(-0.04182343755661214626) assert hyp2f2(a1,a2,b1,b2,10**20).ae('1.1148680024303263661e+43429448190325182840') def test_orthpoly(): mp.dps = 15 assert jacobi(-4,2,3,0.7).ae(22800./4913) assert jacobi(3,2,4,5.5) == 4133.125 assert jacobi(1.5,5/6.,4,0).ae(-1.0851951434075508417) assert jacobi(-2, 1, 2, 4).ae(-0.16) assert jacobi(2, -1, 2.5, 4).ae(34.59375) #assert jacobi(2, -1, 2, 4) == 28.5 assert legendre(5, 7) == 129367 assert legendre(0.5,0).ae(0.53935260118837935667) assert legendre(-1,-1) == 1 assert legendre(0,-1) == 1 assert legendre(0, 1) == 1 assert legendre(1, -1) == -1 assert legendre(7, 1) == 1 assert legendre(7, -1) == -1 assert legendre(8,1.5).ae(15457523./32768) assert legendre(j,-j).ae(2.4448182735671431011 + 0.6928881737669934843j) assert chebyu(5,1) == 6 assert chebyt(3,2) == 26 assert legendre(3.5,-1) == inf assert legendre(4.5,-1) == -inf assert legendre(3.5+1j,-1) == mpc(inf,inf) assert legendre(4.5+1j,-1) == mpc(-inf,-inf) assert laguerre(4, -2, 3).ae(-1.125) assert laguerre(3, 1+j, 0.5).ae(0.2291666666666666667 + 2.5416666666666666667j) def test_hermite(): mp.dps = 15 assert hermite(-2, 0).ae(0.5) assert hermite(-1, 0).ae(0.88622692545275801365) assert hermite(0, 0).ae(1) assert hermite(1, 0) == 0 assert hermite(2, 0).ae(-2) assert hermite(0, 2).ae(1) assert hermite(1, 2).ae(4) assert hermite(1, -2).ae(-4) assert hermite(2, -2).ae(14) assert hermite(0.5, 0).ae(0.69136733903629335053) assert hermite(9, 0) == 0 assert hermite(4,4).ae(3340) assert hermite(3,4).ae(464) assert hermite(-4,4).ae(0.00018623860287512396181) assert hermite(-3,4).ae(0.0016540169879668766270) assert hermite(9, 2.5j).ae(13638725j) assert hermite(9, -2.5j).ae(-13638725j) assert hermite(9, 100).ae(511078883759363024000) assert hermite(9, -100).ae(-511078883759363024000) assert hermite(9, 100j).ae(512922083920643024000j) assert hermite(9, -100j).ae(-512922083920643024000j) assert hermite(-9.5, 2.5j).ae(-2.9004951258126778174e-6 + 1.7601372934039951100e-6j) assert hermite(-9.5, -2.5j).ae(-2.9004951258126778174e-6 - 1.7601372934039951100e-6j) assert hermite(-9.5, 100).ae(1.3776300722767084162e-22, abs_eps=0, rel_eps=eps) assert hermite(-9.5, -100).ae('1.3106082028470671626e4355') assert hermite(-9.5, 100j).ae(-9.7900218581864768430e-23 - 9.7900218581864768430e-23j, abs_eps=0, rel_eps=eps) assert hermite(-9.5, -100j).ae(-9.7900218581864768430e-23 + 9.7900218581864768430e-23j, abs_eps=0, rel_eps=eps) assert hermite(2+3j, -1-j).ae(851.3677063883687676 - 1496.4373467871007997j) def test_gegenbauer(): mp.dps = 15 assert gegenbauer(1,2,3).ae(12) assert gegenbauer(2,3,4).ae(381) assert gegenbauer(0,0,0) == 0 assert gegenbauer(2,-1,3) == 0 assert gegenbauer(-7, 0.5, 3).ae(8989) assert gegenbauer(1, -0.5, 3).ae(-3) assert gegenbauer(1, -1.5, 3).ae(-9) assert gegenbauer(1, -0.5, 3).ae(-3) assert gegenbauer(-0.5, -0.5, 3).ae(-2.6383553159023906245) assert gegenbauer(2+3j, 1-j, 3+4j).ae(14.880536623203696780 + 20.022029711598032898j) #assert gegenbauer(-2, -0.5, 3).ae(-12) def test_legenp(): mp.dps = 15 assert legenp(2,0,4) == legendre(2,4) assert legenp(-2, -1, 0.5).ae(0.43301270189221932338) assert legenp(-2, -1, 0.5, type=3).ae(0.43301270189221932338j) assert legenp(-2, 1, 0.5).ae(-0.86602540378443864676) assert legenp(2+j, 3+4j, -j).ae(134742.98773236786148 + 429782.72924463851745j) assert legenp(2+j, 3+4j, -j, type=3).ae(802.59463394152268507 - 251.62481308942906447j) assert legenp(2,4,3).ae(0) assert legenp(2,4,3,type=3).ae(0) assert legenp(2,1,0.5).ae(-1.2990381056766579701) assert legenp(2,1,0.5,type=3).ae(1.2990381056766579701j) assert legenp(3,2,3).ae(-360) assert legenp(3,3,3).ae(240j*2**0.5) assert legenp(3,4,3).ae(0) assert legenp(0,0.5,2).ae(0.52503756790433198939 - 0.52503756790433198939j) assert legenp(-1,-0.5,2).ae(0.60626116232846498110 + 0.60626116232846498110j) assert legenp(-2,0.5,2).ae(1.5751127037129959682 - 1.5751127037129959682j) assert legenp(-2,0.5,-0.5).ae(-0.85738275810499171286) def test_legenq(): mp.dps = 15 f = legenq # Evaluation at poles assert isnan(f(3,2,1)) assert isnan(f(3,2,-1)) assert isnan(f(3,2,1,type=3)) assert isnan(f(3,2,-1,type=3)) # Evaluation at 0 assert f(0,1,0,type=2).ae(-1) assert f(-2,2,0,type=2,zeroprec=200).ae(0) assert f(1.5,3,0,type=2).ae(-2.2239343475841951023) assert f(0,1,0,type=3).ae(j) assert f(-2,2,0,type=3,zeroprec=200).ae(0) assert f(1.5,3,0,type=3).ae(2.2239343475841951022*(1-1j)) # Standard case, degree 0 assert f(0,0,-1.5).ae(-0.8047189562170501873 + 1.5707963267948966192j) assert f(0,0,-0.5).ae(-0.54930614433405484570) assert f(0,0,0,zeroprec=200).ae(0) assert f(0,0,0.5).ae(0.54930614433405484570) assert f(0,0,1.5).ae(0.8047189562170501873 - 1.5707963267948966192j) assert f(0,0,-1.5,type=3).ae(-0.80471895621705018730) assert f(0,0,-0.5,type=3).ae(-0.5493061443340548457 - 1.5707963267948966192j) assert f(0,0,0,type=3).ae(-1.5707963267948966192j) assert f(0,0,0.5,type=3).ae(0.5493061443340548457 - 1.5707963267948966192j) assert f(0,0,1.5,type=3).ae(0.80471895621705018730) # Standard case, degree 1 assert f(1,0,-1.5).ae(0.2070784343255752810 - 2.3561944901923449288j) assert f(1,0,-0.5).ae(-0.72534692783297257715) assert f(1,0,0).ae(-1) assert f(1,0,0.5).ae(-0.72534692783297257715) assert f(1,0,1.5).ae(0.2070784343255752810 - 2.3561944901923449288j) # Standard case, degree 2 assert f(2,0,-1.5).ae(-0.0635669991240192885 + 4.5160394395353277803j) assert f(2,0,-0.5).ae(0.81866326804175685571) assert f(2,0,0,zeroprec=200).ae(0) assert f(2,0,0.5).ae(-0.81866326804175685571) assert f(2,0,1.5).ae(0.0635669991240192885 - 4.5160394395353277803j) # Misc orders and degrees assert f(2,3,1.5,type=2).ae(-5.7243340223994616228j) assert f(2,3,1.5,type=3).ae(-5.7243340223994616228) assert f(2,3,0.5,type=2).ae(-12.316805742712016310) assert f(2,3,0.5,type=3).ae(-12.316805742712016310j) assert f(2,3,-1.5,type=2).ae(-5.7243340223994616228j) assert f(2,3,-1.5,type=3).ae(5.7243340223994616228) assert f(2,3,-0.5,type=2).ae(-12.316805742712016310) assert f(2,3,-0.5,type=3).ae(-12.316805742712016310j) assert f(2+3j, 3+4j, 0.5, type=3).ae(0.0016119404873235186807 - 0.0005885900510718119836j) assert f(2+3j, 3+4j, -1.5, type=3).ae(0.008451400254138808670 + 0.020645193304593235298j) assert f(-2.5,1,-1.5).ae(3.9553395527435335749j) assert f(-2.5,1,-0.5).ae(1.9290561746445456908) assert f(-2.5,1,0).ae(1.2708196271909686299) assert f(-2.5,1,0.5).ae(-0.31584812990742202869) assert f(-2.5,1,1.5).ae(-3.9553395527435335742 + 0.2993235655044701706j) assert f(-2.5,1,-1.5,type=3).ae(0.29932356550447017254j) assert f(-2.5,1,-0.5,type=3).ae(-0.3158481299074220287 - 1.9290561746445456908j) assert f(-2.5,1,0,type=3).ae(1.2708196271909686292 - 1.2708196271909686299j) assert f(-2.5,1,0.5,type=3).ae(1.9290561746445456907 + 0.3158481299074220287j) assert f(-2.5,1,1.5,type=3).ae(-0.29932356550447017254) def test_agm(): mp.dps = 15 assert agm(0,0) == 0 assert agm(0,1) == 0 assert agm(1,1) == 1 assert agm(7,7) == 7 assert agm(j,j) == j assert (1/agm(1,sqrt(2))).ae(0.834626841674073186) assert agm(1,2).ae(1.4567910310469068692) assert agm(1,3).ae(1.8636167832448965424) assert agm(1,j).ae(0.599070117367796104+0.599070117367796104j) assert agm(2) == agm(1,2) assert agm(-3,4).ae(0.63468509766550907+1.3443087080896272j) def test_gammainc(): mp.dps = 15 assert gammainc(2,5).ae(6*exp(-5)) assert gammainc(2,0,5).ae(1-6*exp(-5)) assert gammainc(2,3,5).ae(-6*exp(-5)+4*exp(-3)) assert gammainc(-2.5,-0.5).ae(-0.9453087204829418812-5.3164237738936178621j) assert gammainc(0,2,4).ae(0.045121158298212213088) assert gammainc(0,3).ae(0.013048381094197037413) assert gammainc(0,2+j,1-j).ae(0.00910653685850304839-0.22378752918074432574j) assert gammainc(0,1-j).ae(0.00028162445198141833+0.17932453503935894015j) assert gammainc(3,4,5,True).ae(0.11345128607046320253) assert gammainc(3.5,0,inf).ae(gamma(3.5)) assert gammainc(-150.5,500).ae('6.9825435345798951153e-627') assert gammainc(-150.5,800).ae('4.6885137549474089431e-788') assert gammainc(-3.5, -20.5).ae(0.27008820585226911 - 1310.31447140574997636j) assert gammainc(-3.5, -200.5).ae(0.27008820585226911 - 5.3264597096208368435e76j) # XXX real part assert gammainc(0,0,2) == inf assert gammainc(1,b=1).ae(0.6321205588285576784) assert gammainc(3,2,2) == 0 assert gammainc(2,3+j,3-j).ae(-0.28135485191849314194j) assert gammainc(4+0j,1).ae(5.8860710587430771455) # GH issue #301 assert gammainc(-1,-1).ae(-0.8231640121031084799 + 3.1415926535897932385j) assert gammainc(-2,-1).ae(1.7707229202810768576 - 1.5707963267948966192j) assert gammainc(-3,-1).ae(-1.4963349162467073643 + 0.5235987755982988731j) assert gammainc(-4,-1).ae(1.05365418617643814992 - 0.13089969389957471827j) # Regularized upper gamma assert isnan(gammainc(0, 0, regularized=True)) assert gammainc(-1, 0, regularized=True) == inf assert gammainc(1, 0, regularized=True) == 1 assert gammainc(0, 5, regularized=True) == 0 assert gammainc(0, 2+3j, regularized=True) == 0 assert gammainc(0, 5000, regularized=True) == 0 assert gammainc(0, 10**30, regularized=True) == 0 assert gammainc(-1, 5, regularized=True) == 0 assert gammainc(-1, 5000, regularized=True) == 0 assert gammainc(-1, 10**30, regularized=True) == 0 assert gammainc(-1, -5, regularized=True) == 0 assert gammainc(-1, -5000, regularized=True) == 0 assert gammainc(-1, -10**30, regularized=True) == 0 assert gammainc(-1, 3+4j, regularized=True) == 0 assert gammainc(1, 5, regularized=True).ae(exp(-5)) assert gammainc(1, 5000, regularized=True).ae(exp(-5000)) assert gammainc(1, 10**30, regularized=True).ae(exp(-10**30)) assert gammainc(1, 3+4j, regularized=True).ae(exp(-3-4j)) assert gammainc(-1000000,2).ae('1.3669297209397347754e-301037', abs_eps=0, rel_eps=8*eps) assert gammainc(-1000000,2,regularized=True) == 0 assert gammainc(-1000000,3+4j).ae('-1.322575609404222361e-698979 - 4.9274570591854533273e-698978j', abs_eps=0, rel_eps=8*eps) assert gammainc(-1000000,3+4j,regularized=True) == 0 assert gammainc(2+3j, 4+5j, regularized=True).ae(0.085422013530993285774-0.052595379150390078503j) assert gammainc(1000j, 1000j, regularized=True).ae(0.49702647628921131761 + 0.00297355675013575341j) # Generalized assert gammainc(3,4,2) == -gammainc(3,2,4) assert gammainc(4, 2, 3).ae(1.2593494302978947396) assert gammainc(4, 2, 3, regularized=True).ae(0.20989157171631578993) assert gammainc(0, 2, 3).ae(0.035852129613864082155) assert gammainc(0, 2, 3, regularized=True) == 0 assert gammainc(-1, 2, 3).ae(0.015219822548487616132) assert gammainc(-1, 2, 3, regularized=True) == 0 assert gammainc(0, 2, 3).ae(0.035852129613864082155) assert gammainc(0, 2, 3, regularized=True) == 0 # Should use upper gammas assert gammainc(5, 10000, 12000).ae('1.1359381951461801687e-4327', abs_eps=0, rel_eps=8*eps) # Should use lower gammas assert gammainc(10000, 2, 3).ae('8.1244514125995785934e4765') # GH issue 306 assert gammainc(3,-1-1j) == 0 assert gammainc(3,-1+1j) == 0 assert gammainc(2,-1) == 0 assert gammainc(2,-1+0j) == 0 assert gammainc(2+0j,-1) == 0 def test_gammainc_expint_n(): # These tests are intended to check all cases of the low-level code # for upper gamma and expint with small integer index. # Need to cover positive/negative arguments; small/large/huge arguments # for both positive and negative indices, as well as indices 0 and 1 # which may be special-cased mp.dps = 15 assert expint(-3,3.5).ae(0.021456366563296693987) assert expint(-2,3.5).ae(0.014966633183073309405) assert expint(-1,3.5).ae(0.011092916359219041088) assert expint(0,3.5).ae(0.0086278238349481430685) assert expint(1,3.5).ae(0.0069701398575483929193) assert expint(2,3.5).ae(0.0058018939208991255223) assert expint(3,3.5).ae(0.0049453773495857807058) assert expint(-3,-3.5).ae(-4.6618170604073311319) assert expint(-2,-3.5).ae(-5.5996974157555515963) assert expint(-1,-3.5).ae(-6.7582555017739415818) assert expint(0,-3.5).ae(-9.4615577024835182145) assert expint(1,-3.5).ae(-13.925353995152335292 - 3.1415926535897932385j) assert expint(2,-3.5).ae(-15.62328702434085977 - 10.995574287564276335j) assert expint(3,-3.5).ae(-10.783026313250347722 - 19.242255003237483586j) assert expint(-3,350).ae(2.8614825451252838069e-155, abs_eps=0, rel_eps=8*eps) assert expint(-2,350).ae(2.8532837224504675901e-155, abs_eps=0, rel_eps=8*eps) assert expint(-1,350).ae(2.8451316155828634555e-155, abs_eps=0, rel_eps=8*eps) assert expint(0,350).ae(2.8370258275042797989e-155, abs_eps=0, rel_eps=8*eps) assert expint(1,350).ae(2.8289659656701459404e-155, abs_eps=0, rel_eps=8*eps) assert expint(2,350).ae(2.8209516419468505006e-155, abs_eps=0, rel_eps=8*eps) assert expint(3,350).ae(2.8129824725501272171e-155, abs_eps=0, rel_eps=8*eps) assert expint(-3,-350).ae(-2.8528796154044839443e+149) assert expint(-2,-350).ae(-2.8610072121701264351e+149) assert expint(-1,-350).ae(-2.8691813842677537647e+149) assert expint(0,-350).ae(-2.8774025343659421709e+149) u = expint(1,-350) assert u.ae(-2.8856710698020863568e+149) assert u.imag.ae(-3.1415926535897932385) u = expint(2,-350) assert u.ae(-2.8939874026504650534e+149) assert u.imag.ae(-1099.5574287564276335) u = expint(3,-350) assert u.ae(-2.9023519497915044349e+149) assert u.imag.ae(-192422.55003237483586) assert expint(-3,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(-2,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(-1,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(0,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(1,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(2,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(3,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert expint(-3,-350000000000000000000000).ae('-3.7805306852415755699e+152003068666138139677871') assert expint(-2,-350000000000000000000000).ae('-3.7805306852415755699e+152003068666138139677871') assert expint(-1,-350000000000000000000000).ae('-3.7805306852415755699e+152003068666138139677871') assert expint(0,-350000000000000000000000).ae('-3.7805306852415755699e+152003068666138139677871') u = expint(1,-350000000000000000000000) assert u.ae('-3.7805306852415755699e+152003068666138139677871') assert u.imag.ae(-3.1415926535897932385) u = expint(2,-350000000000000000000000) assert u.imag.ae(-1.0995574287564276335e+24) assert u.ae('-3.7805306852415755699e+152003068666138139677871') u = expint(3,-350000000000000000000000) assert u.imag.ae(-1.9242255003237483586e+47) assert u.ae('-3.7805306852415755699e+152003068666138139677871') # Small case; no branch cut assert gammainc(-3,3.5).ae(0.00010020262545203707109) assert gammainc(-2,3.5).ae(0.00040370427343557393517) assert gammainc(-1,3.5).ae(0.0016576839773997501492) assert gammainc(0,3.5).ae(0.0069701398575483929193) assert gammainc(1,3.5).ae(0.03019738342231850074) assert gammainc(2,3.5).ae(0.13588822540043325333) assert gammainc(3,3.5).ae(0.64169439772426814072) # Small case; with branch cut assert gammainc(-3,-3.5).ae(0.03595832954467563286 + 0.52359877559829887308j) assert gammainc(-2,-3.5).ae(-0.88024704597962022221 - 1.5707963267948966192j) assert gammainc(-1,-3.5).ae(4.4637962926688170771 + 3.1415926535897932385j) assert gammainc(0,-3.5).ae(-13.925353995152335292 - 3.1415926535897932385j) assert gammainc(1,-3.5).ae(33.115451958692313751) assert gammainc(2,-3.5).ae(-82.788629896730784377) assert gammainc(3,-3.5).ae(240.08702670051927469) # Asymptotic case; no branch cut assert gammainc(-3,350).ae(6.5424095113340358813e-163, abs_eps=0, rel_eps=8*eps) assert gammainc(-2,350).ae(2.296312222489899769e-160, abs_eps=0, rel_eps=8*eps) assert gammainc(-1,350).ae(8.059861834133858573e-158, abs_eps=0, rel_eps=8*eps) assert gammainc(0,350).ae(2.8289659656701459404e-155, abs_eps=0, rel_eps=8*eps) assert gammainc(1,350).ae(9.9295903962649792963e-153, abs_eps=0, rel_eps=8*eps) assert gammainc(2,350).ae(3.485286229089007733e-150, abs_eps=0, rel_eps=8*eps) assert gammainc(3,350).ae(1.2233453960006379793e-147, abs_eps=0, rel_eps=8*eps) # Asymptotic case; branch cut u = gammainc(-3,-350) assert u.ae(6.7889565783842895085e+141) assert u.imag.ae(0.52359877559829887308) u = gammainc(-2,-350) assert u.ae(-2.3692668977889832121e+144) assert u.imag.ae(-1.5707963267948966192) u = gammainc(-1,-350) assert u.ae(8.2685354361441858669e+146) assert u.imag.ae(3.1415926535897932385) u = gammainc(0,-350) assert u.ae(-2.8856710698020863568e+149) assert u.imag.ae(-3.1415926535897932385) u = gammainc(1,-350) assert u.ae(1.0070908870280797598e+152) assert u.imag == 0 u = gammainc(2,-350) assert u.ae(-3.5147471957279983618e+154) assert u.imag == 0 u = gammainc(3,-350) assert u.ae(1.2266568422179417091e+157) assert u.imag == 0 # Extreme asymptotic case assert gammainc(-3,350000000000000000000000).ae('5.0362468738874738859e-152003068666138139677990', abs_eps=0, rel_eps=8*eps) assert gammainc(-2,350000000000000000000000).ae('1.7626864058606158601e-152003068666138139677966', abs_eps=0, rel_eps=8*eps) assert gammainc(-1,350000000000000000000000).ae('6.1694024205121555102e-152003068666138139677943', abs_eps=0, rel_eps=8*eps) assert gammainc(0,350000000000000000000000).ae('2.1592908471792544286e-152003068666138139677919', abs_eps=0, rel_eps=8*eps) assert gammainc(1,350000000000000000000000).ae('7.5575179651273905e-152003068666138139677896', abs_eps=0, rel_eps=8*eps) assert gammainc(2,350000000000000000000000).ae('2.645131287794586675e-152003068666138139677872', abs_eps=0, rel_eps=8*eps) assert gammainc(3,350000000000000000000000).ae('9.2579595072810533625e-152003068666138139677849', abs_eps=0, rel_eps=8*eps) u = gammainc(-3,-350000000000000000000000) assert u.ae('8.8175642804468234866e+152003068666138139677800') assert u.imag.ae(0.52359877559829887308) u = gammainc(-2,-350000000000000000000000) assert u.ae('-3.0861474981563882203e+152003068666138139677824') assert u.imag.ae(-1.5707963267948966192) u = gammainc(-1,-350000000000000000000000) assert u.ae('1.0801516243547358771e+152003068666138139677848') assert u.imag.ae(3.1415926535897932385) u = gammainc(0,-350000000000000000000000) assert u.ae('-3.7805306852415755699e+152003068666138139677871') assert u.imag.ae(-3.1415926535897932385) assert gammainc(1,-350000000000000000000000).ae('1.3231857398345514495e+152003068666138139677895') assert gammainc(2,-350000000000000000000000).ae('-4.6311500894209300731e+152003068666138139677918') assert gammainc(3,-350000000000000000000000).ae('1.6209025312973255256e+152003068666138139677942') def test_incomplete_beta(): mp.dps = 15 assert betainc(-2,-3,0.5,0.75).ae(63.4305673311255413583969) assert betainc(4.5,0.5+2j,2.5,6).ae(0.2628801146130621387903065 + 0.5162565234467020592855378j) assert betainc(4,5,0,6).ae(90747.77142857142857142857) def test_erf(): mp.dps = 15 assert erf(0) == 0 assert erf(1).ae(0.84270079294971486934) assert erf(3+4j).ae(-120.186991395079444098 - 27.750337293623902498j) assert erf(-4-3j).ae(-0.99991066178539168236 + 0.00004972026054496604j) assert erf(pi).ae(0.99999112385363235839) assert erf(1j).ae(1.6504257587975428760j) assert erf(-1j).ae(-1.6504257587975428760j) assert isinstance(erf(1), mpf) assert isinstance(erf(-1), mpf) assert isinstance(erf(0), mpf) assert isinstance(erf(0j), mpc) assert erf(inf) == 1 assert erf(-inf) == -1 assert erfi(0) == 0 assert erfi(1/pi).ae(0.371682698493894314) assert erfi(inf) == inf assert erfi(-inf) == -inf assert erf(1+0j) == erf(1) assert erfc(1+0j) == erfc(1) assert erf(0.2+0.5j).ae(1 - erfc(0.2+0.5j)) assert erfc(0) == 1 assert erfc(1).ae(1-erf(1)) assert erfc(-1).ae(1-erf(-1)) assert erfc(1/pi).ae(1-erf(1/pi)) assert erfc(-10) == 2 assert erfc(-1000000) == 2 assert erfc(-inf) == 2 assert erfc(inf) == 0 assert isnan(erfc(nan)) assert (erfc(10**4)*mpf(10)**43429453).ae('3.63998738656420') assert erf(8+9j).ae(-1072004.2525062051158 + 364149.91954310255423j) assert erfc(8+9j).ae(1072005.2525062051158 - 364149.91954310255423j) assert erfc(-8-9j).ae(-1072003.2525062051158 + 364149.91954310255423j) mp.dps = 50 # This one does not use the asymptotic series assert (erfc(10)*10**45).ae('2.0884875837625447570007862949577886115608181193212') # This one does assert (erfc(50)*10**1088).ae('2.0709207788416560484484478751657887929322509209954') mp.dps = 15 assert str(erfc(10**50)) == '3.66744826532555e-4342944819032518276511289189166050822943970058036665661144537831658646492088707747292249493384317534' assert erfinv(0) == 0 assert erfinv(0.5).ae(0.47693627620446987338) assert erfinv(-0.5).ae(-0.47693627620446987338) assert erfinv(1) == inf assert erfinv(-1) == -inf assert erf(erfinv(0.95)).ae(0.95) assert erf(erfinv(0.999999999995)).ae(0.999999999995) assert erf(erfinv(-0.999999999995)).ae(-0.999999999995) mp.dps = 50 assert erf(erfinv('0.99999999999999999999999999999995')).ae('0.99999999999999999999999999999995') assert erf(erfinv('0.999999999999999999999999999999995')).ae('0.999999999999999999999999999999995') assert erf(erfinv('-0.999999999999999999999999999999995')).ae('-0.999999999999999999999999999999995') mp.dps = 15 # Complex asymptotic expansions v = erfc(50j) assert v.real == 1 assert v.imag.ae('-6.1481820666053078736e+1083') assert erfc(-100+5j).ae(2) assert (erfc(100+5j)*10**4335).ae(2.3973567853824133572 - 3.9339259530609420597j) assert erfc(100+100j).ae(0.00065234366376857698698 - 0.0039357263629214118437j) def test_pdf(): mp.dps = 15 assert npdf(-inf) == 0 assert npdf(inf) == 0 assert npdf(5,0,2).ae(npdf(5+4,4,2)) assert quadts(lambda x: npdf(x,-0.5,0.8), [-inf, inf]) == 1 assert ncdf(0) == 0.5 assert ncdf(3,3) == 0.5 assert ncdf(-inf) == 0 assert ncdf(inf) == 1 assert ncdf(10) == 1 # Verify that this is computed accurately assert (ncdf(-10)*10**24).ae(7.619853024160526) def test_lambertw(): mp.dps = 15 assert lambertw(0) == 0 assert lambertw(0+0j) == 0 assert lambertw(inf) == inf assert isnan(lambertw(nan)) assert lambertw(inf,1).real == inf assert lambertw(inf,1).imag.ae(2*pi) assert lambertw(-inf,1).real == inf assert lambertw(-inf,1).imag.ae(3*pi) assert lambertw(0,-1) == -inf assert lambertw(0,1) == -inf assert lambertw(0,3) == -inf assert lambertw(e).ae(1) assert lambertw(1).ae(0.567143290409783873) assert lambertw(-pi/2).ae(j*pi/2) assert lambertw(-log(2)/2).ae(-log(2)) assert lambertw(0.25).ae(0.203888354702240164) assert lambertw(-0.25).ae(-0.357402956181388903) assert lambertw(-1./10000,0).ae(-0.000100010001500266719) assert lambertw(-0.25,-1).ae(-2.15329236411034965) assert lambertw(0.25,-1).ae(-3.00899800997004620-4.07652978899159763j) assert lambertw(-0.25,-1).ae(-2.15329236411034965) assert lambertw(0.25,1).ae(-3.00899800997004620+4.07652978899159763j) assert lambertw(-0.25,1).ae(-3.48973228422959210+7.41405453009603664j) assert lambertw(-4).ae(0.67881197132094523+1.91195078174339937j) assert lambertw(-4,1).ae(-0.66743107129800988+7.76827456802783084j) assert lambertw(-4,-1).ae(0.67881197132094523-1.91195078174339937j) assert lambertw(1000).ae(5.24960285240159623) assert lambertw(1000,1).ae(4.91492239981054535+5.44652615979447070j) assert lambertw(1000,-1).ae(4.91492239981054535-5.44652615979447070j) assert lambertw(1000,5).ae(3.5010625305312892+29.9614548941181328j) assert lambertw(3+4j).ae(1.281561806123775878+0.533095222020971071j) assert lambertw(-0.4+0.4j).ae(-0.10396515323290657+0.61899273315171632j) assert lambertw(3+4j,1).ae(-0.11691092896595324+5.61888039871282334j) assert lambertw(3+4j,-1).ae(0.25856740686699742-3.85211668616143559j) assert lambertw(-0.5,-1).ae(-0.794023632344689368-0.770111750510379110j) assert lambertw(-1./10000,1).ae(-11.82350837248724344+6.80546081842002101j) assert lambertw(-1./10000,-1).ae(-11.6671145325663544) assert lambertw(-1./10000,-2).ae(-11.82350837248724344-6.80546081842002101j) assert lambertw(-1./100000,4).ae(-14.9186890769540539+26.1856750178782046j) assert lambertw(-1./100000,5).ae(-15.0931437726379218666+32.5525721210262290086j) assert lambertw((2+j)/10).ae(0.173704503762911669+0.071781336752835511j) assert lambertw((2+j)/10,1).ae(-3.21746028349820063+4.56175438896292539j) assert lambertw((2+j)/10,-1).ae(-3.03781405002993088-3.53946629633505737j) assert lambertw((2+j)/10,4).ae(-4.6878509692773249+23.8313630697683291j) assert lambertw(-(2+j)/10).ae(-0.226933772515757933-0.164986470020154580j) assert lambertw(-(2+j)/10,1).ae(-2.43569517046110001+0.76974067544756289j) assert lambertw(-(2+j)/10,-1).ae(-3.54858738151989450-6.91627921869943589j) assert lambertw(-(2+j)/10,4).ae(-4.5500846928118151+20.6672982215434637j) mp.dps = 50 assert lambertw(pi).ae('1.073658194796149172092178407024821347547745350410314531') mp.dps = 15 # Former bug in generated branch assert lambertw(-0.5+0.002j).ae(-0.78917138132659918344 + 0.76743539379990327749j) assert lambertw(-0.5-0.002j).ae(-0.78917138132659918344 - 0.76743539379990327749j) assert lambertw(-0.448+0.4j).ae(-0.11855133765652382241 + 0.66570534313583423116j) assert lambertw(-0.448-0.4j).ae(-0.11855133765652382241 - 0.66570534313583423116j) assert lambertw(-0.65475+0.0001j).ae(-0.61053421111385310898+1.0396534993944097723803j) # Huge branch index w = lambertw(1,10**20) assert w.real.ae(-47.889578926290259164) assert w.imag.ae(6.2831853071795864769e+20) def test_lambertw_hard(): def check(x,y): y = convert(y) type_ok = True if isinstance(y, mpf): type_ok = isinstance(x, mpf) real_ok = abs(x.real-y.real) <= abs(y.real)*8*eps imag_ok = abs(x.imag-y.imag) <= abs(y.imag)*8*eps #print x, y, abs(x.real-y.real), abs(x.imag-y.imag) return real_ok and imag_ok # Evaluation near 0 mp.dps = 15 assert check(lambertw(1e-10), 9.999999999000000000e-11) assert check(lambertw(-1e-10), -1.000000000100000000e-10) assert check(lambertw(1e-10j), 9.999999999999999999733e-21 + 9.99999999999999999985e-11j) assert check(lambertw(-1e-10j), 9.999999999999999999733e-21 - 9.99999999999999999985e-11j) assert check(lambertw(1e-10,1), -26.303186778379041559 + 3.265093911703828397j) assert check(lambertw(-1e-10,1), -26.326236166739163892 + 6.526183280686333315j) assert check(lambertw(1e-10j,1), -26.312931726911421551 + 4.896366881798013421j) assert check(lambertw(-1e-10j,1), -26.297238779529035066 + 1.632807161345576513j) assert check(lambertw(1e-10,-1), -26.303186778379041559 - 3.265093911703828397j) assert check(lambertw(-1e-10,-1), -26.295238819246925694) assert check(lambertw(1e-10j,-1), -26.297238779529035028 - 1.6328071613455765135j) assert check(lambertw(-1e-10j,-1), -26.312931726911421551 - 4.896366881798013421j) # Test evaluation very close to the branch point -1/e # on the -1, 0, and 1 branches add = lambda x, y: fadd(x,y,exact=True) sub = lambda x, y: fsub(x,y,exact=True) addj = lambda x, y: fadd(x,fmul(y,1j,exact=True),exact=True) subj = lambda x, y: fadd(x,fmul(y,-1j,exact=True),exact=True) mp.dps = 1500 a = -1/e + 10*eps d3 = mpf('1e-3') d10 = mpf('1e-10') d20 = mpf('1e-20') d40 = mpf('1e-40') d80 = mpf('1e-80') d300 = mpf('1e-300') d1000 = mpf('1e-1000') mp.dps = 15 # ---- Branch 0 ---- # -1/e + eps assert check(lambertw(add(a,d3)), -0.92802015005456704876) assert check(lambertw(add(a,d10)), -0.99997668374140088071) assert check(lambertw(add(a,d20)), -0.99999999976683560186) assert lambertw(add(a,d40)) == -1 assert lambertw(add(a,d80)) == -1 assert lambertw(add(a,d300)) == -1 assert lambertw(add(a,d1000)) == -1 # -1/e - eps assert check(lambertw(sub(a,d3)), -0.99819016149860989001+0.07367191188934638577j) assert check(lambertw(sub(a,d10)), -0.9999999998187812114595992+0.0000233164398140346109194j) assert check(lambertw(sub(a,d20)), -0.99999999999999999998187+2.331643981597124203344e-10j) assert check(lambertw(sub(a,d40)), -1.0+2.33164398159712420336e-20j) assert check(lambertw(sub(a,d80)), -1.0+2.33164398159712420336e-40j) assert check(lambertw(sub(a,d300)), -1.0+2.33164398159712420336e-150j) assert check(lambertw(sub(a,d1000)), mpc(-1,'2.33164398159712420336e-500')) # -1/e + eps*j assert check(lambertw(addj(a,d3)), -0.94790387486938526634+0.05036819639190132490j) assert check(lambertw(addj(a,d10)), -0.9999835127872943680999899+0.0000164870314895821225256j) assert check(lambertw(addj(a,d20)), -0.999999999835127872929987+1.64872127051890935830e-10j) assert check(lambertw(addj(a,d40)), -0.9999999999999999999835+1.6487212707001281468305e-20j) assert check(lambertw(addj(a,d80)), -1.0 + 1.64872127070012814684865e-40j) assert check(lambertw(addj(a,d300)), -1.0 + 1.64872127070012814684865e-150j) assert check(lambertw(addj(a,d1000)), mpc(-1.0,'1.64872127070012814684865e-500')) # -1/e - eps*j assert check(lambertw(subj(a,d3)), -0.94790387486938526634-0.05036819639190132490j) assert check(lambertw(subj(a,d10)), -0.9999835127872943680999899-0.0000164870314895821225256j) assert check(lambertw(subj(a,d20)), -0.999999999835127872929987-1.64872127051890935830e-10j) assert check(lambertw(subj(a,d40)), -0.9999999999999999999835-1.6487212707001281468305e-20j) assert check(lambertw(subj(a,d80)), -1.0 - 1.64872127070012814684865e-40j) assert check(lambertw(subj(a,d300)), -1.0 - 1.64872127070012814684865e-150j) assert check(lambertw(subj(a,d1000)), mpc(-1.0,'-1.64872127070012814684865e-500')) # ---- Branch 1 ---- assert check(lambertw(addj(a,d3),1), -3.088501303219933378005990 + 7.458676867597474813950098j) assert check(lambertw(addj(a,d80),1), -3.088843015613043855957087 + 7.461489285654254556906117j) assert check(lambertw(addj(a,d300),1), -3.088843015613043855957087 + 7.461489285654254556906117j) assert check(lambertw(addj(a,d1000),1), -3.088843015613043855957087 + 7.461489285654254556906117j) assert check(lambertw(subj(a,d3),1), -1.0520914180450129534365906 + 0.0539925638125450525673175j) assert check(lambertw(subj(a,d10),1), -1.0000164872127056318529390 + 0.000016487393927159250398333077j) assert check(lambertw(subj(a,d20),1), -1.0000000001648721270700128 + 1.64872127088134693542628e-10j) assert check(lambertw(subj(a,d40),1), -1.000000000000000000016487 + 1.64872127070012814686677e-20j) assert check(lambertw(subj(a,d80),1), -1.0 + 1.64872127070012814684865e-40j) assert check(lambertw(subj(a,d300),1), -1.0 + 1.64872127070012814684865e-150j) assert check(lambertw(subj(a,d1000),1), mpc(-1.0, '1.64872127070012814684865e-500')) # ---- Branch -1 ---- # -1/e + eps assert check(lambertw(add(a,d3),-1), -1.075608941186624989414945) assert check(lambertw(add(a,d10),-1), -1.000023316621036696460620) assert check(lambertw(add(a,d20),-1), -1.000000000233164398177834) assert lambertw(add(a,d40),-1) == -1 assert lambertw(add(a,d80),-1) == -1 assert lambertw(add(a,d300),-1) == -1 assert lambertw(add(a,d1000),-1) == -1 # -1/e - eps assert check(lambertw(sub(a,d3),-1), -0.99819016149860989001-0.07367191188934638577j) assert check(lambertw(sub(a,d10),-1), -0.9999999998187812114595992-0.0000233164398140346109194j) assert check(lambertw(sub(a,d20),-1), -0.99999999999999999998187-2.331643981597124203344e-10j) assert check(lambertw(sub(a,d40),-1), -1.0-2.33164398159712420336e-20j) assert check(lambertw(sub(a,d80),-1), -1.0-2.33164398159712420336e-40j) assert check(lambertw(sub(a,d300),-1), -1.0-2.33164398159712420336e-150j) assert check(lambertw(sub(a,d1000),-1), mpc(-1,'-2.33164398159712420336e-500')) # -1/e + eps*j assert check(lambertw(addj(a,d3),-1), -1.0520914180450129534365906 - 0.0539925638125450525673175j) assert check(lambertw(addj(a,d10),-1), -1.0000164872127056318529390 - 0.0000164873939271592503983j) assert check(lambertw(addj(a,d20),-1), -1.0000000001648721270700 - 1.64872127088134693542628e-10j) assert check(lambertw(addj(a,d40),-1), -1.00000000000000000001648 - 1.6487212707001281468667726e-20j) assert check(lambertw(addj(a,d80),-1), -1.0 - 1.64872127070012814684865e-40j) assert check(lambertw(addj(a,d300),-1), -1.0 - 1.64872127070012814684865e-150j) assert check(lambertw(addj(a,d1000),-1), mpc(-1.0,'-1.64872127070012814684865e-500')) # -1/e - eps*j assert check(lambertw(subj(a,d3),-1), -3.088501303219933378005990-7.458676867597474813950098j) assert check(lambertw(subj(a,d10),-1), -3.088843015579260686911033-7.461489285372968780020716j) assert check(lambertw(subj(a,d20),-1), -3.088843015613043855953708-7.461489285654254556877988j) assert check(lambertw(subj(a,d40),-1), -3.088843015613043855957087-7.461489285654254556906117j) assert check(lambertw(subj(a,d80),-1), -3.088843015613043855957087 - 7.461489285654254556906117j) assert check(lambertw(subj(a,d300),-1), -3.088843015613043855957087 - 7.461489285654254556906117j) assert check(lambertw(subj(a,d1000),-1), -3.088843015613043855957087 - 7.461489285654254556906117j) # One more case, testing higher precision mp.dps = 500 x = -1/e + mpf('1e-13') ans = "-0.99999926266961377166355784455394913638782494543377383"\ "744978844374498153493943725364881490261187530235150668593869563"\ "168276697689459394902153960200361935311512317183678882" mp.dps = 15 assert lambertw(x).ae(ans) mp.dps = 50 assert lambertw(x).ae(ans) mp.dps = 150 assert lambertw(x).ae(ans) def test_meijerg(): mp.dps = 15 assert meijerg([[2,3],[1]],[[0.5,2],[3,4]], 2.5).ae(4.2181028074787439386) assert meijerg([[],[1+j]],[[1],[1]], 3+4j).ae(271.46290321152464592 - 703.03330399954820169j) assert meijerg([[0.25],[1]],[[0.5],[2]],0) == 0 assert meijerg([[0],[]],[[0,0,'1/3','2/3'], []], '2/27').ae(2.2019391389653314120) # Verify 1/z series being used assert meijerg([[-3],[-0.5]], [[-1],[-2.5]], -0.5).ae(-1.338096165935754898687431) assert meijerg([[1-(-1)],[1-(-2.5)]], [[1-(-3)],[1-(-0.5)]], -2.0).ae(-1.338096165935754898687431) assert meijerg([[-3],[-0.5]], [[-1],[-2.5]], -1).ae(-(pi+4)/(4*pi)) a = 2.5 b = 1.25 for z in [mpf(0.25), mpf(2)]: x1 = hyp1f1(a,b,z) x2 = gamma(b)/gamma(a)*meijerg([[1-a],[]],[[0],[1-b]],-z) x3 = gamma(b)/gamma(a)*meijerg([[1-0],[1-(1-b)]],[[1-(1-a)],[]],-1/z) assert x1.ae(x2) assert x1.ae(x3) def test_appellf1(): mp.dps = 15 assert appellf1(2,-2,1,1,2,3).ae(-1.75) assert appellf1(2,1,-2,1,2,3).ae(-8) assert appellf1(2,1,-2,1,0.5,0.25).ae(1.5) assert appellf1(-2,1,3,2,3,3).ae(19) assert appellf1(1,2,3,4,0.5,0.125).ae( 1.53843285792549786518) def test_coulomb(): # Note: most tests are doctests # Test for a bug: mp.dps = 15 assert coulombg(mpc(-5,0),2,3).ae(20.087729487721430394) def test_hyper_param_accuracy(): mp.dps = 15 As = [n+1e-10 for n in range(-5,-1)] Bs = [n+1e-10 for n in range(-12,-5)] assert hyper(As,Bs,10).ae(-381757055858.652671927) assert legenp(0.5, 100, 0.25).ae(-2.4124576567211311755e+144) assert (hyp1f1(1000,1,-100)*10**24).ae(5.2589445437370169113) assert (hyp2f1(10, -900, 10.5, 0.99)*10**24).ae(1.9185370579660768203) assert (hyp2f1(1000,1.5,-3.5,-1.5)*10**385).ae(-2.7367529051334000764) assert hyp2f1(-5, 10, 3, 0.5, zeroprec=500) == 0 assert (hyp1f1(-10000, 1000, 100)*10**424).ae(-3.1046080515824859974) assert (hyp2f1(1000,1.5,-3.5,-0.75,maxterms=100000)*10**231).ae(-4.0534790813913998643) assert legenp(2, 3, 0.25) == 0 try: hypercomb(lambda a: [([],[],[],[],[a],[-a],0.5)], [3]) assert 0 except ValueError: pass assert hypercomb(lambda a: [([],[],[],[],[a],[-a],0.5)], [3], infprec=200) == inf assert meijerg([[],[]],[[0,0,0,0],[]],0.1).ae(1.5680822343832351418) assert (besselk(400,400)*10**94).ae(1.4387057277018550583) mp.dps = 5 (hyp1f1(-5000.5, 1500, 100)*10**185).ae(8.5185229673381935522) (hyp1f1(-5000, 1500, 100)*10**185).ae(9.1501213424563944311) mp.dps = 15 (hyp1f1(-5000.5, 1500, 100)*10**185).ae(8.5185229673381935522) (hyp1f1(-5000, 1500, 100)*10**185).ae(9.1501213424563944311) assert hyp0f1(fadd(-20,'1e-100',exact=True), 0.25).ae(1.85014429040102783e+49) assert hyp0f1((-20*10**100+1, 10**100), 0.25).ae(1.85014429040102783e+49) def test_hypercomb_zero_pow(): # check that 0^0 = 1 assert hypercomb(lambda a: (([0],[a],[],[],[],[],0),), [0]) == 1 assert meijerg([[-1.5],[]],[[0],[-0.75]],0).ae(1.4464090846320771425) def test_spherharm(): mp.dps = 15 t = 0.5; r = 0.25 assert spherharm(0,0,t,r).ae(0.28209479177387814347) assert spherharm(1,-1,t,r).ae(0.16048941205971996369 - 0.04097967481096344271j) assert spherharm(1,0,t,r).ae(0.42878904414183579379) assert spherharm(1,1,t,r).ae(-0.16048941205971996369 - 0.04097967481096344271j) assert spherharm(2,-2,t,r).ae(0.077915886919031181734 - 0.042565643022253962264j) assert spherharm(2,-1,t,r).ae(0.31493387233497459884 - 0.08041582001959297689j) assert spherharm(2,0,t,r).ae(0.41330596756220761898) assert spherharm(2,1,t,r).ae(-0.31493387233497459884 - 0.08041582001959297689j) assert spherharm(2,2,t,r).ae(0.077915886919031181734 + 0.042565643022253962264j) assert spherharm(3,-3,t,r).ae(0.033640236589690881646 - 0.031339125318637082197j) assert spherharm(3,-2,t,r).ae(0.18091018743101461963 - 0.09883168583167010241j) assert spherharm(3,-1,t,r).ae(0.42796713930907320351 - 0.10927795157064962317j) assert spherharm(3,0,t,r).ae(0.27861659336351639787) assert spherharm(3,1,t,r).ae(-0.42796713930907320351 - 0.10927795157064962317j) assert spherharm(3,2,t,r).ae(0.18091018743101461963 + 0.09883168583167010241j) assert spherharm(3,3,t,r).ae(-0.033640236589690881646 - 0.031339125318637082197j) assert spherharm(0,-1,t,r) == 0 assert spherharm(0,-2,t,r) == 0 assert spherharm(0,1,t,r) == 0 assert spherharm(0,2,t,r) == 0 assert spherharm(1,2,t,r) == 0 assert spherharm(1,3,t,r) == 0 assert spherharm(1,-2,t,r) == 0 assert spherharm(1,-3,t,r) == 0 assert spherharm(2,3,t,r) == 0 assert spherharm(2,4,t,r) == 0 assert spherharm(2,-3,t,r) == 0 assert spherharm(2,-4,t,r) == 0 assert spherharm(3,4.5,0.5,0.25).ae(-22.831053442240790148 + 10.910526059510013757j) assert spherharm(2+3j, 1-j, 1+j, 3+4j).ae(-2.6582752037810116935 - 1.0909214905642160211j) assert spherharm(-6,2.5,t,r).ae(0.39383644983851448178 + 0.28414687085358299021j) assert spherharm(-3.5, 3, 0.5, 0.25).ae(0.014516852987544698924 - 0.015582769591477628495j) assert spherharm(-3, 3, 0.5, 0.25) == 0 assert spherharm(-6, 3, 0.5, 0.25).ae(-0.16544349818782275459 - 0.15412657723253924562j) assert spherharm(-6, 1.5, 0.5, 0.25).ae(0.032208193499767402477 + 0.012678000924063664921j) assert spherharm(3,0,0,1).ae(0.74635266518023078283) assert spherharm(3,-2,0,1) == 0 assert spherharm(3,-2,1,1).ae(-0.16270707338254028971 - 0.35552144137546777097j) def test_qfunctions(): mp.dps = 15 assert qp(2,3,100).ae('2.7291482267247332183e2391') def test_issue_239(): mp.prec = 150 x = ldexp(2476979795053773,-52) assert betainc(206, 385, 0, 0.55, 1).ae('0.99999999999999999999996570910644857895771110649954') mp.dps = 15 try: u = hyp2f1(-5,5,0.5,0.5) raise AssertionError("hyp2f1(-5,5,0.5,0.5) (failed zero detection)") except (mp.NoConvergence, ValueError): pass mpmath-1.0.0/mpmath/tests/test_gammazeta.py000066400000000000000000000653731316273626600210370ustar00rootroot00000000000000from mpmath import * from mpmath.libmp import round_up, from_float, mpf_zeta_int def test_zeta_int_bug(): assert mpf_zeta_int(0, 10) == from_float(-0.5) def test_bernoulli(): assert bernfrac(0) == (1,1) assert bernfrac(1) == (-1,2) assert bernfrac(2) == (1,6) assert bernfrac(3) == (0,1) assert bernfrac(4) == (-1,30) assert bernfrac(5) == (0,1) assert bernfrac(6) == (1,42) assert bernfrac(8) == (-1,30) assert bernfrac(10) == (5,66) assert bernfrac(12) == (-691,2730) assert bernfrac(18) == (43867,798) p, q = bernfrac(228) assert p % 10**10 == 164918161 assert q == 625170 p, q = bernfrac(1000) assert p % 10**10 == 7950421099 assert q == 342999030 mp.dps = 15 assert bernoulli(0) == 1 assert bernoulli(1) == -0.5 assert bernoulli(2).ae(1./6) assert bernoulli(3) == 0 assert bernoulli(4).ae(-1./30) assert bernoulli(5) == 0 assert bernoulli(6).ae(1./42) assert str(bernoulli(10)) == '0.0757575757575758' assert str(bernoulli(234)) == '7.62772793964344e+267' assert str(bernoulli(10**5)) == '-5.82229431461335e+376755' assert str(bernoulli(10**8+2)) == '1.19570355039953e+676752584' mp.dps = 50 assert str(bernoulli(10)) == '0.075757575757575757575757575757575757575757575757576' assert str(bernoulli(234)) == '7.6277279396434392486994969020496121553385863373331e+267' assert str(bernoulli(10**5)) == '-5.8222943146133508236497045360612887555320691004308e+376755' assert str(bernoulli(10**8+2)) == '1.1957035503995297272263047884604346914602088317782e+676752584' mp.dps = 1000 assert bernoulli(10).ae(mpf(5)/66) mp.dps = 50000 assert bernoulli(10).ae(mpf(5)/66) mp.dps = 15 def test_bernpoly_eulerpoly(): mp.dps = 15 assert bernpoly(0,-1).ae(1) assert bernpoly(0,0).ae(1) assert bernpoly(0,'1/2').ae(1) assert bernpoly(0,'3/4').ae(1) assert bernpoly(0,1).ae(1) assert bernpoly(0,2).ae(1) assert bernpoly(1,-1).ae('-3/2') assert bernpoly(1,0).ae('-1/2') assert bernpoly(1,'1/2').ae(0) assert bernpoly(1,'3/4').ae('1/4') assert bernpoly(1,1).ae('1/2') assert bernpoly(1,2).ae('3/2') assert bernpoly(2,-1).ae('13/6') assert bernpoly(2,0).ae('1/6') assert bernpoly(2,'1/2').ae('-1/12') assert bernpoly(2,'3/4').ae('-1/48') assert bernpoly(2,1).ae('1/6') assert bernpoly(2,2).ae('13/6') assert bernpoly(3,-1).ae(-3) assert bernpoly(3,0).ae(0) assert bernpoly(3,'1/2').ae(0) assert bernpoly(3,'3/4').ae('-3/64') assert bernpoly(3,1).ae(0) assert bernpoly(3,2).ae(3) assert bernpoly(4,-1).ae('119/30') assert bernpoly(4,0).ae('-1/30') assert bernpoly(4,'1/2').ae('7/240') assert bernpoly(4,'3/4').ae('7/3840') assert bernpoly(4,1).ae('-1/30') assert bernpoly(4,2).ae('119/30') assert bernpoly(5,-1).ae(-5) assert bernpoly(5,0).ae(0) assert bernpoly(5,'1/2').ae(0) assert bernpoly(5,'3/4').ae('25/1024') assert bernpoly(5,1).ae(0) assert bernpoly(5,2).ae(5) assert bernpoly(10,-1).ae('665/66') assert bernpoly(10,0).ae('5/66') assert bernpoly(10,'1/2').ae('-2555/33792') assert bernpoly(10,'3/4').ae('-2555/34603008') assert bernpoly(10,1).ae('5/66') assert bernpoly(10,2).ae('665/66') assert bernpoly(11,-1).ae(-11) assert bernpoly(11,0).ae(0) assert bernpoly(11,'1/2').ae(0) assert bernpoly(11,'3/4').ae('-555731/4194304') assert bernpoly(11,1).ae(0) assert bernpoly(11,2).ae(11) assert eulerpoly(0,-1).ae(1) assert eulerpoly(0,0).ae(1) assert eulerpoly(0,'1/2').ae(1) assert eulerpoly(0,'3/4').ae(1) assert eulerpoly(0,1).ae(1) assert eulerpoly(0,2).ae(1) assert eulerpoly(1,-1).ae('-3/2') assert eulerpoly(1,0).ae('-1/2') assert eulerpoly(1,'1/2').ae(0) assert eulerpoly(1,'3/4').ae('1/4') assert eulerpoly(1,1).ae('1/2') assert eulerpoly(1,2).ae('3/2') assert eulerpoly(2,-1).ae(2) assert eulerpoly(2,0).ae(0) assert eulerpoly(2,'1/2').ae('-1/4') assert eulerpoly(2,'3/4').ae('-3/16') assert eulerpoly(2,1).ae(0) assert eulerpoly(2,2).ae(2) assert eulerpoly(3,-1).ae('-9/4') assert eulerpoly(3,0).ae('1/4') assert eulerpoly(3,'1/2').ae(0) assert eulerpoly(3,'3/4').ae('-11/64') assert eulerpoly(3,1).ae('-1/4') assert eulerpoly(3,2).ae('9/4') assert eulerpoly(4,-1).ae(2) assert eulerpoly(4,0).ae(0) assert eulerpoly(4,'1/2').ae('5/16') assert eulerpoly(4,'3/4').ae('57/256') assert eulerpoly(4,1).ae(0) assert eulerpoly(4,2).ae(2) assert eulerpoly(5,-1).ae('-3/2') assert eulerpoly(5,0).ae('-1/2') assert eulerpoly(5,'1/2').ae(0) assert eulerpoly(5,'3/4').ae('361/1024') assert eulerpoly(5,1).ae('1/2') assert eulerpoly(5,2).ae('3/2') assert eulerpoly(10,-1).ae(2) assert eulerpoly(10,0).ae(0) assert eulerpoly(10,'1/2').ae('-50521/1024') assert eulerpoly(10,'3/4').ae('-36581523/1048576') assert eulerpoly(10,1).ae(0) assert eulerpoly(10,2).ae(2) assert eulerpoly(11,-1).ae('-699/4') assert eulerpoly(11,0).ae('691/4') assert eulerpoly(11,'1/2').ae(0) assert eulerpoly(11,'3/4').ae('-512343611/4194304') assert eulerpoly(11,1).ae('-691/4') assert eulerpoly(11,2).ae('699/4') # Potential accuracy issues assert bernpoly(10000,10000).ae('5.8196915936323387117e+39999') assert bernpoly(200,17.5).ae(3.8048418524583064909e244) assert eulerpoly(200,17.5).ae(-3.7309911582655785929e275) def test_gamma(): mp.dps = 15 assert gamma(0.25).ae(3.6256099082219083119) assert gamma(0.0001).ae(9999.4228832316241908) assert gamma(300).ae('1.0201917073881354535e612') assert gamma(-0.5).ae(-3.5449077018110320546) assert gamma(-7.43).ae(0.00026524416464197007186) #assert gamma(Rational(1,2)) == gamma(0.5) #assert gamma(Rational(-7,3)).ae(gamma(mpf(-7)/3)) assert gamma(1+1j).ae(0.49801566811835604271 - 0.15494982830181068512j) assert gamma(-1+0.01j).ae(-0.422733904013474115 + 99.985883082635367436j) assert gamma(20+30j).ae(-1453876687.5534810 + 1163777777.8031573j) # Should always give exact factorials when they can # be represented as mpfs under the current working precision fact = 1 for i in range(1, 18): assert gamma(i) == fact fact *= i for dps in [170, 600]: fact = 1 mp.dps = dps for i in range(1, 105): assert gamma(i) == fact fact *= i mp.dps = 100 assert gamma(0.5).ae(sqrt(pi)) mp.dps = 15 assert factorial(0) == fac(0) == 1 assert factorial(3) == 6 assert isnan(gamma(nan)) assert gamma(1100).ae('4.8579168073569433667e2866') assert rgamma(0) == 0 assert rgamma(-1) == 0 assert rgamma(2) == 1.0 assert rgamma(3) == 0.5 assert loggamma(2+8j).ae(-8.5205176753667636926 + 10.8569497125597429366j) assert loggamma('1e10000').ae('2.302485092994045684017991e10004') assert loggamma('1e10000j').ae(mpc('-1.570796326794896619231322e10000','2.302485092994045684017991e10004')) def test_fac2(): mp.dps = 15 assert [fac2(n) for n in range(10)] == [1,1,2,3,8,15,48,105,384,945] assert fac2(-5).ae(1./3) assert fac2(-11).ae(-1./945) assert fac2(50).ae(5.20469842636666623e32) assert fac2(0.5+0.75j).ae(0.81546769394688069176-0.34901016085573266889j) assert fac2(inf) == inf assert isnan(fac2(-inf)) def test_gamma_quotients(): mp.dps = 15 h = 1e-8 ep = 1e-4 G = gamma assert gammaprod([-1],[-3,-4]) == 0 assert gammaprod([-1,0],[-5]) == inf assert abs(gammaprod([-1],[-2]) - G(-1+h)/G(-2+h)) < 1e-4 assert abs(gammaprod([-4,-3],[-2,0]) - G(-4+h)*G(-3+h)/G(-2+h)/G(0+h)) < 1e-4 assert rf(3,0) == 1 assert rf(2.5,1) == 2.5 assert rf(-5,2) == 20 assert rf(j,j).ae(gamma(2*j)/gamma(j)) assert ff(-2,0) == 1 assert ff(-2,1) == -2 assert ff(4,3) == 24 assert ff(3,4) == 0 assert binomial(0,0) == 1 assert binomial(1,0) == 1 assert binomial(0,-1) == 0 assert binomial(3,2) == 3 assert binomial(5,2) == 10 assert binomial(5,3) == 10 assert binomial(5,5) == 1 assert binomial(-1,0) == 1 assert binomial(-2,-4) == 3 assert binomial(4.5, 1.5) == 6.5625 assert binomial(1100,1) == 1100 assert binomial(1100,2) == 604450 assert beta(1,1) == 1 assert beta(0,0) == inf assert beta(3,0) == inf assert beta(-1,-1) == inf assert beta(1.5,1).ae(2/3.) assert beta(1.5,2.5).ae(pi/16) assert (10**15*beta(10,100)).ae(2.3455339739604649879) assert beta(inf,inf) == 0 assert isnan(beta(-inf,inf)) assert isnan(beta(-3,inf)) assert isnan(beta(0,inf)) assert beta(inf,0.5) == beta(0.5,inf) == 0 assert beta(inf,-1.5) == inf assert beta(inf,-0.5) == -inf assert beta(1+2j,-1-j/2).ae(1.16396542451069943086+0.08511695947832914640j) assert beta(-0.5,0.5) == 0 assert beta(-3,3).ae(-1/3.) def test_zeta(): mp.dps = 15 assert zeta(2).ae(pi**2 / 6) assert zeta(2.0).ae(pi**2 / 6) assert zeta(mpc(2)).ae(pi**2 / 6) assert zeta(100).ae(1) assert zeta(0).ae(-0.5) assert zeta(0.5).ae(-1.46035450880958681) assert zeta(-1).ae(-mpf(1)/12) assert zeta(-2) == 0 assert zeta(-3).ae(mpf(1)/120) assert zeta(-4) == 0 assert zeta(-100) == 0 assert isnan(zeta(nan)) assert zeta(1e-30).ae(-0.5) assert zeta(-1e-30).ae(-0.5) # Zeros in the critical strip assert zeta(mpc(0.5, 14.1347251417346937904)).ae(0) assert zeta(mpc(0.5, 21.0220396387715549926)).ae(0) assert zeta(mpc(0.5, 25.0108575801456887632)).ae(0) assert zeta(mpc(1e-30,1e-40)).ae(-0.5) assert zeta(mpc(-1e-30,1e-40)).ae(-0.5) mp.dps = 50 im = '236.5242296658162058024755079556629786895294952121891237' assert zeta(mpc(0.5, im)).ae(0, 1e-46) mp.dps = 15 # Complex reflection formula assert (zeta(-60+3j) / 10**34).ae(8.6270183987866146+15.337398548226238j) # issue #358 assert zeta(0,0.5) == 0 assert zeta(0,0) == 0.5 assert zeta(0,0.5,1).ae(-0.34657359027997265) def test_altzeta(): mp.dps = 15 assert altzeta(-2) == 0 assert altzeta(-4) == 0 assert altzeta(-100) == 0 assert altzeta(0) == 0.5 assert altzeta(-1) == 0.25 assert altzeta(-3) == -0.125 assert altzeta(-5) == 0.25 assert altzeta(-21) == 1180529130.25 assert altzeta(1).ae(log(2)) assert altzeta(2).ae(pi**2/12) assert altzeta(10).ae(73*pi**10/6842880) assert altzeta(50) < 1 assert altzeta(60, rounding='d') < 1 assert altzeta(60, rounding='u') == 1 assert altzeta(10000, rounding='d') < 1 assert altzeta(10000, rounding='u') == 1 assert altzeta(3+0j) == altzeta(3) s = 3+4j assert altzeta(s).ae((1-2**(1-s))*zeta(s)) s = -3+4j assert altzeta(s).ae((1-2**(1-s))*zeta(s)) assert altzeta(-100.5).ae(4.58595480083585913e+108) assert altzeta(1.3).ae(0.73821404216623045) assert altzeta(1e-30).ae(0.5) assert altzeta(-1e-30).ae(0.5) assert altzeta(mpc(1e-30,1e-40)).ae(0.5) assert altzeta(mpc(-1e-30,1e-40)).ae(0.5) def test_zeta_huge(): mp.dps = 15 assert zeta(inf) == 1 mp.dps = 50 assert zeta(100).ae('1.0000000000000000000000000000007888609052210118073522') assert zeta(40*pi).ae('1.0000000000000000000000000000000000000148407238666182') mp.dps = 10000 v = zeta(33000) mp.dps = 15 assert str(v-1) == '1.02363019598118e-9934' assert zeta(pi*1000, rounding=round_up) > 1 assert zeta(3000, rounding=round_up) > 1 assert zeta(pi*1000) == 1 assert zeta(3000) == 1 def test_zeta_negative(): mp.dps = 150 a = -pi*10**40 mp.dps = 15 assert str(zeta(a)) == '2.55880492708712e+1233536161668617575553892558646631323374078' mp.dps = 50 assert str(zeta(a)) == '2.5588049270871154960875033337384432038436330847333e+1233536161668617575553892558646631323374078' mp.dps = 15 def test_polygamma(): mp.dps = 15 psi0 = lambda z: psi(0,z) psi1 = lambda z: psi(1,z) assert psi0(3) == psi(0,3) == digamma(3) #assert psi2(3) == psi(2,3) == tetragamma(3) #assert psi3(3) == psi(3,3) == pentagamma(3) assert psi0(pi).ae(0.97721330794200673) assert psi0(-pi).ae(7.8859523853854902) assert psi0(-pi+1).ae(7.5676424992016996) assert psi0(pi+j).ae(1.04224048313859376 + 0.35853686544063749j) assert psi0(-pi-j).ae(1.3404026194821986 - 2.8824392476809402j) assert findroot(psi0, 1).ae(1.4616321449683622) assert psi0(inf) == inf assert psi1(inf) == 0 assert psi(2,inf) == 0 assert psi1(pi).ae(0.37424376965420049) assert psi1(-pi).ae(53.030438740085385) assert psi1(pi+j).ae(0.32935710377142464 - 0.12222163911221135j) assert psi1(-pi-j).ae(-0.30065008356019703 + 0.01149892486928227j) assert (10**6*psi(4,1+10*pi*j)).ae(-6.1491803479004446 - 0.3921316371664063j) assert psi0(1+10*pi*j).ae(3.4473994217222650 + 1.5548808324857071j) assert isnan(psi0(nan)) assert isnan(psi0(-inf)) assert psi0(-100.5).ae(4.615124601338064) assert psi0(3+0j).ae(psi0(3)) assert psi0(-100+3j).ae(4.6106071768714086321+3.1117510556817394626j) assert isnan(psi(2,mpc(0,inf))) assert isnan(psi(2,mpc(0,nan))) assert isnan(psi(2,mpc(0,-inf))) assert isnan(psi(2,mpc(1,inf))) assert isnan(psi(2,mpc(1,nan))) assert isnan(psi(2,mpc(1,-inf))) assert isnan(psi(2,mpc(inf,inf))) assert isnan(psi(2,mpc(nan,nan))) assert isnan(psi(2,mpc(-inf,-inf))) def test_polygamma_high_prec(): mp.dps = 100 assert str(psi(0,pi)) == "0.9772133079420067332920694864061823436408346099943256380095232865318105924777141317302075654362928734" assert str(psi(10,pi)) == "-12.98876181434889529310283769414222588307175962213707170773803550518307617769657562747174101900659238" def test_polygamma_identities(): mp.dps = 15 psi0 = lambda z: psi(0,z) psi1 = lambda z: psi(1,z) psi2 = lambda z: psi(2,z) assert psi0(0.5).ae(-euler-2*log(2)) assert psi0(1).ae(-euler) assert psi1(0.5).ae(0.5*pi**2) assert psi1(1).ae(pi**2/6) assert psi1(0.25).ae(pi**2 + 8*catalan) assert psi2(1).ae(-2*apery) mp.dps = 20 u = -182*apery+4*sqrt(3)*pi**3 mp.dps = 15 assert psi(2,5/6.).ae(u) assert psi(3,0.5).ae(pi**4) def test_foxtrot_identity(): # A test of the complex digamma function. # See http://mathworld.wolfram.com/FoxTrotSeries.html and # http://mathworld.wolfram.com/DigammaFunction.html psi0 = lambda z: psi(0,z) mp.dps = 50 a = (-1)**fraction(1,3) b = (-1)**fraction(2,3) x = -psi0(0.5*a) - psi0(-0.5*b) + psi0(0.5*(1+a)) + psi0(0.5*(1-b)) y = 2*pi*sech(0.5*sqrt(3)*pi) assert x.ae(y) mp.dps = 15 def test_polygamma_high_order(): mp.dps = 100 assert str(psi(50, pi)) == "-1344100348958402765749252447726432491812.641985273160531055707095989227897753035823152397679626136483" assert str(psi(50, pi + 14*e)) == "-0.00000000000000000189793739550804321623512073101895801993019919886375952881053090844591920308111549337295143780341396" assert str(psi(50, pi + 14*e*j)) == ("(-0.0000000000000000522516941152169248975225472155683565752375889510631513244785" "9377385233700094871256507814151956624433 - 0.00000000000000001813157041407010184" "702414110218205348527862196327980417757665282244728963891298080199341480881811613j)") mp.dps = 15 assert str(psi(50, pi)) == "-1.34410034895841e+39" assert str(psi(50, pi + 14*e)) == "-1.89793739550804e-18" assert str(psi(50, pi + 14*e*j)) == "(-5.2251694115217e-17 - 1.81315704140701e-17j)" def test_harmonic(): mp.dps = 15 assert harmonic(0) == 0 assert harmonic(1) == 1 assert harmonic(2) == 1.5 assert harmonic(3).ae(1. + 1./2 + 1./3) assert harmonic(10**10).ae(23.603066594891989701) assert harmonic(10**1000).ae(2303.162308658947) assert harmonic(0.5).ae(2-2*log(2)) assert harmonic(inf) == inf assert harmonic(2+0j) == 1.5+0j assert harmonic(1+2j).ae(1.4918071802755104+0.92080728264223022j) def test_gamma_huge_1(): mp.dps = 500 x = mpf(10**10) / 7 mp.dps = 15 assert str(gamma(x)) == "6.26075321389519e+12458010678" mp.dps = 50 assert str(gamma(x)) == "6.2607532138951929201303779291707455874010420783933e+12458010678" mp.dps = 15 def test_gamma_huge_2(): mp.dps = 500 x = mpf(10**100) / 19 mp.dps = 15 assert str(gamma(x)) == (\ "1.82341134776679e+5172997469323364168990133558175077136829182824042201886051511" "9656908623426021308685461258226190190661") mp.dps = 50 assert str(gamma(x)) == (\ "1.82341134776678875374414910350027596939980412984e+5172997469323364168990133558" "1750771368291828240422018860515119656908623426021308685461258226190190661") def test_gamma_huge_3(): mp.dps = 500 x = 10**80 // 3 + 10**70*j / 7 mp.dps = 15 y = gamma(x) assert str(y.real) == (\ "-6.82925203918106e+2636286142112569524501781477865238132302397236429627932441916" "056964386399485392600") assert str(y.imag) == (\ "8.54647143678418e+26362861421125695245017814778652381323023972364296279324419160" "56964386399485392600") mp.dps = 50 y = gamma(x) assert str(y.real) == (\ "-6.8292520391810548460682736226799637356016538421817e+26362861421125695245017814" "77865238132302397236429627932441916056964386399485392600") assert str(y.imag) == (\ "8.5464714367841748507479306948130687511711420234015e+263628614211256952450178147" "7865238132302397236429627932441916056964386399485392600") def test_gamma_huge_4(): x = 3200+11500j mp.dps = 15 assert str(gamma(x)) == \ "(8.95783268539713e+5164 - 1.94678798329735e+5164j)" mp.dps = 50 assert str(gamma(x)) == (\ "(8.9578326853971339570292952697675570822206567327092e+5164" " - 1.9467879832973509568895402139429643650329524144794e+51" "64j)") mp.dps = 15 def test_gamma_huge_5(): mp.dps = 500 x = 10**60 * j / 3 mp.dps = 15 y = gamma(x) assert str(y.real) == "-3.27753899634941e-227396058973640224580963937571892628368354580620654233316839" assert str(y.imag) == "-7.1519888950416e-227396058973640224580963937571892628368354580620654233316841" mp.dps = 50 y = gamma(x) assert str(y.real) == (\ "-3.2775389963494132168950056995974690946983219123935e-22739605897364022458096393" "7571892628368354580620654233316839") assert str(y.imag) == (\ "-7.1519888950415979749736749222530209713136588885897e-22739605897364022458096393" "7571892628368354580620654233316841") mp.dps = 15 def test_gamma_huge_6(): return mp.dps = 500 x = -10**10 + mpf(10)**(-175)*j mp.dps = 15 assert str(gamma(x)) == \ "(1.86729378905343e-95657055178 - 4.29960285282433e-95657055002j)" mp.dps = 50 assert str(gamma(x)) == (\ "(1.8672937890534298925763143275474177736153484820662e-9565705517" "8 - 4.2996028528243336966001185406200082244961757496106e-9565705" "5002j)") mp.dps = 15 def test_gamma_huge_7(): mp.dps = 100 a = 3 + j/mpf(10)**1000 mp.dps = 15 y = gamma(a) assert str(y.real) == "2.0" # wrong #assert str(y.imag) == "2.16735365342606e-1000" assert str(y.imag) == "1.84556867019693e-1000" mp.dps = 50 y = gamma(a) assert str(y.real) == "2.0" #assert str(y.imag) == "2.1673536534260596065418805612488708028522563689298e-1000" assert str(y.imag) == "1.8455686701969342787869758198351951379156813281202e-1000" def test_stieltjes(): mp.dps = 15 assert stieltjes(0).ae(+euler) mp.dps = 25 assert stieltjes(1).ae('-0.07281584548367672486058637587') assert stieltjes(2).ae('-0.009690363192872318484530386035') assert stieltjes(3).ae('0.002053834420303345866160046543') assert stieltjes(4).ae('0.002325370065467300057468170178') mp.dps = 15 assert stieltjes(1).ae(-0.07281584548367672486058637587) assert stieltjes(2).ae(-0.009690363192872318484530386035) assert stieltjes(3).ae(0.002053834420303345866160046543) assert stieltjes(4).ae(0.0023253700654673000574681701775) def test_barnesg(): mp.dps = 15 assert barnesg(0) == barnesg(-1) == 0 assert [superfac(i) for i in range(8)] == [1, 1, 2, 12, 288, 34560, 24883200, 125411328000] assert str(superfac(1000)) == '3.24570818422368e+1177245' assert isnan(barnesg(nan)) assert isnan(superfac(nan)) assert isnan(hyperfac(nan)) assert barnesg(inf) == inf assert superfac(inf) == inf assert hyperfac(inf) == inf assert isnan(superfac(-inf)) assert barnesg(0.7).ae(0.8068722730141471) assert barnesg(2+3j).ae(-0.17810213864082169+0.04504542715447838j) assert [hyperfac(n) for n in range(7)] == [1, 1, 4, 108, 27648, 86400000, 4031078400000] assert [hyperfac(n) for n in range(0,-7,-1)] == [1,1,-1,-4,108,27648,-86400000] a = barnesg(-3+0j) assert a == 0 and isinstance(a, mpc) a = hyperfac(-3+0j) assert a == -4 and isinstance(a, mpc) def test_polylog(): mp.dps = 15 zs = [mpmathify(z) for z in [0, 0.5, 0.99, 4, -0.5, -4, 1j, 3+4j]] for z in zs: assert polylog(1, z).ae(-log(1-z)) for z in zs: assert polylog(0, z).ae(z/(1-z)) for z in zs: assert polylog(-1, z).ae(z/(1-z)**2) for z in zs: assert polylog(-2, z).ae(z*(1+z)/(1-z)**3) for z in zs: assert polylog(-3, z).ae(z*(1+4*z+z**2)/(1-z)**4) assert polylog(3, 7).ae(5.3192579921456754382-5.9479244480803301023j) assert polylog(3, -7).ae(-4.5693548977219423182) assert polylog(2, 0.9).ae(1.2997147230049587252) assert polylog(2, -0.9).ae(-0.75216317921726162037) assert polylog(2, 0.9j).ae(-0.17177943786580149299+0.83598828572550503226j) assert polylog(2, 1.1).ae(1.9619991013055685931-0.2994257606855892575j) assert polylog(2, -1.1).ae(-0.89083809026228260587) assert polylog(2, 1.1*sqrt(j)).ae(0.58841571107611387722+1.09962542118827026011j) assert polylog(-2, 0.9).ae(1710) assert polylog(-2, -0.9).ae(-90/6859.) assert polylog(3, 0.9).ae(1.0496589501864398696) assert polylog(-3, 0.9).ae(48690) assert polylog(-3, -4).ae(-0.0064) assert polylog(0.5+j/3, 0.5+j/2).ae(0.31739144796565650535 + 0.99255390416556261437j) assert polylog(3+4j,1).ae(zeta(3+4j)) assert polylog(3+4j,-1).ae(-altzeta(3+4j)) def test_bell_polyexp(): mp.dps = 15 # TODO: more tests for polyexp assert (polyexp(0,1e-10)*10**10).ae(1.00000000005) assert (polyexp(1,1e-10)*10**10).ae(1.0000000001) assert polyexp(5,3j).ae(-607.7044517476176454+519.962786482001476087j) assert polyexp(-1,3.5).ae(12.09537536175543444) # bell(0,x) = 1 assert bell(0,0) == 1 assert bell(0,1) == 1 assert bell(0,2) == 1 assert bell(0,inf) == 1 assert bell(0,-inf) == 1 assert isnan(bell(0,nan)) # bell(1,x) = x assert bell(1,4) == 4 assert bell(1,0) == 0 assert bell(1,inf) == inf assert bell(1,-inf) == -inf assert isnan(bell(1,nan)) # bell(2,x) = x*(1+x) assert bell(2,-1) == 0 assert bell(2,0) == 0 # large orders / arguments assert bell(10) == 115975 assert bell(10,1) == 115975 assert bell(10, -8) == 11054008 assert bell(5,-50) == -253087550 assert bell(50,-50).ae('3.4746902914629720259e74') mp.dps = 80 assert bell(50,-50) == 347469029146297202586097646631767227177164818163463279814268368579055777450 assert bell(40,50) == 5575520134721105844739265207408344706846955281965031698187656176321717550 assert bell(74) == 5006908024247925379707076470957722220463116781409659160159536981161298714301202 mp.dps = 15 assert bell(10,20j) == 7504528595600+15649605360020j # continuity of the generalization assert bell(0.5,0).ae(sinc(pi*0.5)) def test_primezeta(): mp.dps = 15 assert primezeta(0.9).ae(1.8388316154446882243 + 3.1415926535897932385j) assert primezeta(4).ae(0.076993139764246844943) assert primezeta(1) == inf assert primezeta(inf) == 0 assert isnan(primezeta(nan)) def test_rs_zeta(): mp.dps = 15 assert zeta(0.5+100000j).ae(1.0730320148577531321 + 5.7808485443635039843j) assert zeta(0.75+100000j).ae(1.837852337251873704 + 1.9988492668661145358j) assert zeta(0.5+1000000j, derivative=3).ae(1647.7744105852674733 - 1423.1270943036622097j) assert zeta(1+1000000j, derivative=3).ae(3.4085866124523582894 - 18.179184721525947301j) assert zeta(1+1000000j, derivative=1).ae(-0.10423479366985452134 - 0.74728992803359056244j) assert zeta(0.5-1000000j, derivative=1).ae(11.636804066002521459 + 17.127254072212996004j) # Additional sanity tests using fp arithmetic. # Some more high-precision tests are found in the docstrings def ae(x, y, tol=1e-6): return abs(x-y) < tol*abs(y) assert ae(fp.zeta(0.5-100000j), 1.0730320148577531321 - 5.7808485443635039843j) assert ae(fp.zeta(0.75-100000j), 1.837852337251873704 - 1.9988492668661145358j) assert ae(fp.zeta(0.5+1e6j), 0.076089069738227100006 + 2.8051021010192989554j) assert ae(fp.zeta(0.5+1e6j, derivative=1), 11.636804066002521459 - 17.127254072212996004j) assert ae(fp.zeta(1+1e6j), 0.94738726251047891048 + 0.59421999312091832833j) assert ae(fp.zeta(1+1e6j, derivative=1), -0.10423479366985452134 - 0.74728992803359056244j) assert ae(fp.zeta(0.5+100000j, derivative=1), 10.766962036817482375 - 30.92705282105996714j) assert ae(fp.zeta(0.5+100000j, derivative=2), -119.40515625740538429 + 217.14780631141830251j) assert ae(fp.zeta(0.5+100000j, derivative=3), 1129.7550282628460881 - 1685.4736895169690346j) assert ae(fp.zeta(0.5+100000j, derivative=4), -10407.160819314958615 + 13777.786698628045085j) assert ae(fp.zeta(0.75+100000j, derivative=1), -0.41742276699594321475 - 6.4453816275049955949j) assert ae(fp.zeta(0.75+100000j, derivative=2), -9.214314279161977266 + 35.07290795337967899j) assert ae(fp.zeta(0.75+100000j, derivative=3), 110.61331857820103469 - 236.87847130518129926j) assert ae(fp.zeta(0.75+100000j, derivative=4), -1054.334275898559401 + 1769.9177890161596383j) def test_siegelz(): mp.dps = 15 assert siegelz(100000).ae(5.87959246868176504171) assert siegelz(100000, derivative=2).ae(-54.1172711010126452832) assert siegelz(100000, derivative=3).ae(-278.930831343966552538) assert siegelz(100000+j,derivative=1).ae(678.214511857070283307-379.742160779916375413j) def test_zeta_near_1(): # Test for a former bug in mpf_zeta and mpc_zeta mp.dps = 15 s1 = fadd(1, '1e-10', exact=True) s2 = fadd(1, '-1e-10', exact=True) s3 = fadd(1, '1e-10j', exact=True) assert zeta(s1).ae(1.000000000057721566490881444e10) assert zeta(s2).ae(-9.99999999942278433510574872e9) z = zeta(s3) assert z.real.ae(0.57721566490153286060) assert z.imag.ae(-9.9999999999999999999927184e9) mp.dps = 30 s1 = fadd(1, '1e-50', exact=True) s2 = fadd(1, '-1e-50', exact=True) s3 = fadd(1, '1e-50j', exact=True) assert zeta(s1).ae('1e50') assert zeta(s2).ae('-1e50') z = zeta(s3) assert z.real.ae('0.57721566490153286060651209008240243104215933593992') assert z.imag.ae('-1e50') mpmath-1.0.0/mpmath/tests/test_hp.py000066400000000000000000000243111316273626600174630ustar00rootroot00000000000000""" Check that the output from irrational functions is accurate for high-precision input, from 5 to 200 digits. The reference values were verified with Mathematica. """ import time from mpmath import * precs = [5, 15, 28, 35, 57, 80, 100, 150, 200] # sqrt(3) + pi/2 a = \ "3.302847134363773912758768033145623809041389953497933538543279275605"\ "841220051904536395163599428307109666700184672047856353516867399774243594"\ "67433521615861420725323528325327484262075464241255915238845599752675" # e + 1/euler**2 b = \ "5.719681166601007617111261398629939965860873957353320734275716220045750"\ "31474116300529519620938123730851145473473708966080207482581266469342214"\ "824842256999042984813905047895479210702109260221361437411947323431" # sqrt(a) sqrt_a = \ "1.817373691447021556327498239690365674922395036495564333152483422755"\ "144321726165582817927383239308173567921345318453306994746434073691275094"\ "484777905906961689902608644112196725896908619756404253109722911487" # sqrt(a+b*i).real sqrt_abi_real = \ "2.225720098415113027729407777066107959851146508557282707197601407276"\ "89160998185797504198062911768240808839104987021515555650875977724230130"\ "3584116233925658621288393930286871862273400475179312570274423840384" # sqrt(a+b*i).imag sqrt_abi_imag = \ "1.2849057639084690902371581529110949983261182430040898147672052833653668"\ "0629534491275114877090834296831373498336559849050755848611854282001250"\ "1924311019152914021365263161630765255610885489295778894976075186" # log(a) log_a = \ "1.194784864491089550288313512105715261520511949410072046160598707069"\ "4336653155025770546309137440687056366757650909754708302115204338077595203"\ "83005773986664564927027147084436553262269459110211221152925732612" # log(a+b*i).real log_abi_real = \ "1.8877985921697018111624077550443297276844736840853590212962006811663"\ "04949387789489704203167470111267581371396245317618589339274243008242708"\ "014251531496104028712866224020066439049377679709216784954509456421" # log(a+b*i).imag log_abi_imag = \ "1.0471204952840802663567714297078763189256357109769672185219334169734948"\ "4265809854092437285294686651806426649541504240470168212723133326542181"\ "8300136462287639956713914482701017346851009323172531601894918640" # exp(a) exp_a = \ "27.18994224087168661137253262213293847994194869430518354305430976149"\ "382792035050358791398632888885200049857986258414049540376323785711941636"\ "100358982497583832083513086941635049329804685212200507288797531143" # exp(a+b*i).real exp_abi_real = \ "22.98606617170543596386921087657586890620262522816912505151109385026"\ "40160179326569526152851983847133513990281518417211964710397233157168852"\ "4963130831190142571659948419307628119985383887599493378056639916701" # exp(a+b*i).imag exp_abi_imag = \ "-14.523557450291489727214750571590272774669907424478129280902375851196283"\ "3377162379031724734050088565710975758824441845278120105728824497308303"\ "6065619788140201636218705414429933685889542661364184694108251449" # a**b pow_a_b = \ "928.7025342285568142947391505837660251004990092821305668257284426997"\ "361966028275685583421197860603126498884545336686124793155581311527995550"\ "580229264427202446131740932666832138634013168125809402143796691154" # (a**(a+b*i)).real pow_a_abi_real = \ "44.09156071394489511956058111704382592976814280267142206420038656267"\ "67707916510652790502399193109819563864568986234654864462095231138500505"\ "8197456514795059492120303477512711977915544927440682508821426093455" # (a**(a+b*i)).imag pow_a_abi_imag = \ "27.069371511573224750478105146737852141664955461266218367212527612279886"\ "9322304536553254659049205414427707675802193810711302947536332040474573"\ "8166261217563960235014674118610092944307893857862518964990092301" # ((a+b*i)**(a+b*i)).real pow_abi_abi_real = \ "-0.15171310677859590091001057734676423076527145052787388589334350524"\ "8084195882019497779202452975350579073716811284169068082670778986235179"\ "0813026562962084477640470612184016755250592698408112493759742219150452"\ # ((a+b*i)**(a+b*i)).imag pow_abi_abi_imag = \ "1.2697592504953448936553147870155987153192995316950583150964099070426"\ "4736837932577176947632535475040521749162383347758827307504526525647759"\ "97547638617201824468382194146854367480471892602963428122896045019902" # sin(a) sin_a = \ "-0.16055653857469062740274792907968048154164433772938156243509084009"\ "38437090841460493108570147191289893388608611542655654723437248152535114"\ "528368009465836614227575701220612124204622383149391870684288862269631" # sin(1000*a) sin_1000a = \ "-0.85897040577443833776358106803777589664322997794126153477060795801"\ "09151695416961724733492511852267067419573754315098042850381158563024337"\ "216458577140500488715469780315833217177634490142748614625281171216863" # sin(a+b*i) sin_abi_real = \ "-24.4696999681556977743346798696005278716053366404081910969773939630"\ "7149215135459794473448465734589287491880563183624997435193637389884206"\ "02151395451271809790360963144464736839412254746645151672423256977064" sin_abi_imag = \ "-150.42505378241784671801405965872972765595073690984080160750785565810981"\ "8314482499135443827055399655645954830931316357243750839088113122816583"\ "7169201254329464271121058839499197583056427233866320456505060735" # cos cos_a = \ "-0.98702664499035378399332439243967038895709261414476495730788864004"\ "05406821549361039745258003422386169330787395654908532996287293003581554"\ "257037193284199198069707141161341820684198547572456183525659969145501" cos_1000a = \ "-0.51202523570982001856195696460663971099692261342827540426136215533"\ "52686662667660613179619804463250686852463876088694806607652218586060613"\ "951310588158830695735537073667299449753951774916401887657320950496820" # tan tan_a = \ "0.162666873675188117341401059858835168007137819495998960250142156848"\ "639654718809412181543343168174807985559916643549174530459883826451064966"\ "7996119428949951351938178809444268785629011625179962457123195557310" tan_abi_real = \ "6.822696615947538488826586186310162599974827139564433912601918442911"\ "1026830824380070400102213741875804368044342309515353631134074491271890"\ "467615882710035471686578162073677173148647065131872116479947620E-6" tan_abi_imag = \ "0.9999795833048243692245661011298447587046967777739649018690797625964167"\ "1446419978852235960862841608081413169601038230073129482874832053357571"\ "62702259309150715669026865777947502665936317953101462202542168429" def test_hp(): for dps in precs: mp.dps = dps + 8 aa = mpf(a) bb = mpf(b) a1000 = 1000*mpf(a) abi = mpc(aa, bb) mp.dps = dps assert (sqrt(3) + pi/2).ae(aa) assert (e + 1/euler**2).ae(bb) assert sqrt(aa).ae(mpf(sqrt_a)) assert sqrt(abi).ae(mpc(sqrt_abi_real, sqrt_abi_imag)) assert log(aa).ae(mpf(log_a)) assert log(abi).ae(mpc(log_abi_real, log_abi_imag)) assert exp(aa).ae(mpf(exp_a)) assert exp(abi).ae(mpc(exp_abi_real, exp_abi_imag)) assert (aa**bb).ae(mpf(pow_a_b)) assert (aa**abi).ae(mpc(pow_a_abi_real, pow_a_abi_imag)) assert (abi**abi).ae(mpc(pow_abi_abi_real, pow_abi_abi_imag)) assert sin(a).ae(mpf(sin_a)) assert sin(a1000).ae(mpf(sin_1000a)) assert sin(abi).ae(mpc(sin_abi_real, sin_abi_imag)) assert cos(a).ae(mpf(cos_a)) assert cos(a1000).ae(mpf(cos_1000a)) assert tan(a).ae(mpf(tan_a)) assert tan(abi).ae(mpc(tan_abi_real, tan_abi_imag)) # check that complex cancellation is avoided so that both # real and imaginary parts have high relative accuracy. # abs_eps should be 0, but has to be set to 1e-205 to pass the # 200-digit case, probably due to slight inaccuracy in the # precomputed input assert (tan(abi).real).ae(mpf(tan_abi_real), abs_eps=1e-205) assert (tan(abi).imag).ae(mpf(tan_abi_imag), abs_eps=1e-205) mp.dps = 460 assert str(log(3))[-20:] == '02166121184001409826' mp.dps = 15 # Since str(a) can differ in the last digit from rounded a, and I want # to compare the last digits of big numbers with the results in Mathematica, # I made this hack to get the last 20 digits of rounded a def last_digits(a): r = repr(a) s = str(a) #dps = mp.dps #mp.dps += 3 m = 10 r = r.replace(s[:-m],'') r = r.replace("mpf('",'').replace("')",'') num0 = 0 for c in r: if c == '0': num0 += 1 else: break b = float(int(r))/10**(len(r) - m) if b >= 10**m - 0.5: raise NotImplementedError n = int(round(b)) sn = str(n) s = s[:-m] + '0'*num0 + sn return s[-20:] # values checked with Mathematica def test_log_hp(): mp.dps = 2000 a = mpf(10)**15000/3 r = log(a) res = last_digits(r) # Mathematica N[Log[10^15000/3], 2000] # ...7443804441768333470331 assert res == '44380444176833347033' # see issue 145 r = log(mpf(3)/2) # Mathematica N[Log[3/2], 2000] # ...69653749808140753263288 res = last_digits(r) assert res == '53749808140753263288' mp.dps = 10000 r = log(2) res = last_digits(r) # Mathematica N[Log[2], 10000] # ...695615913401856601359655561 assert res == '91340185660135965556' r = log(mpf(10)**10/3) res = last_digits(r) # Mathematica N[Log[10^10/3], 10000] # ...587087654020631943060007154 assert res == '54020631943060007154', res r = log(mpf(10)**100/3) res = last_digits(r) # Mathematica N[Log[10^100/3], 10000] # ,,,59246336539088351652334666 assert res == '36539088351652334666', res mp.dps += 10 a = 1 - mpf(1)/10**10 mp.dps -= 10 r = log(a) res = last_digits(r) # ...3310334360482956137216724048322957404 # 372167240483229574038733026370 # Mathematica N[Log[1 - 10^-10]*10^10, 10000] # ...60482956137216724048322957404 assert res == '37216724048322957404', res mp.dps = 10000 mp.dps += 100 a = 1 + mpf(1)/10**100 mp.dps -= 100 r = log(a) res = last_digits(+r) # Mathematica N[Log[1 + 10^-100]*10^10, 10030] # ...3994733877377412241546890854692521568292338268273 10^-91 assert res == '39947338773774122415', res mp.dps = 15 def test_exp_hp(): mp.dps = 4000 r = exp(mpf(1)/10) # IntegerPart[N[Exp[1/10] * 10^4000, 4000]] # ...92167105162069688129 assert int(r * 10**mp.dps) % 10**20 == 92167105162069688129 mpmath-1.0.0/mpmath/tests/test_identify.py000066400000000000000000000012641316273626600206710ustar00rootroot00000000000000from mpmath import * def test_pslq(): mp.dps = 15 assert pslq([3*pi+4*e/7, pi, e, log(2)]) == [7, -21, -4, 0] assert pslq([4.9999999999999991, 1]) == [1, -5] assert pslq([2,1]) == [1, -2] def test_identify(): mp.dps = 20 assert identify(zeta(4), ['log(2)', 'pi**4']) == '((1/90)*pi**4)' mp.dps = 15 assert identify(exp(5)) == 'exp(5)' assert identify(exp(4)) == 'exp(4)' assert identify(log(5)) == 'log(5)' assert identify(exp(3*pi), ['pi']) == 'exp((3*pi))' assert identify(3, full=True) == ['3', '3', '1/(1/3)', 'sqrt(9)', '1/sqrt((1/9))', '(sqrt(12)/2)**2', '1/(sqrt(12)/6)**2'] assert identify(pi+1, {'a':+pi}) == '(1 + 1*a)' mpmath-1.0.0/mpmath/tests/test_interval.py000066400000000000000000000413551316273626600207070ustar00rootroot00000000000000from mpmath import * def test_interval_identity(): iv.dps = 15 assert mpi(2) == mpi(2, 2) assert mpi(2) != mpi(-2, 2) assert not (mpi(2) != mpi(2, 2)) assert mpi(-1, 1) == mpi(-1, 1) assert str(mpi('0.1')) == "[0.099999999999999991673, 0.10000000000000000555]" assert repr(mpi('0.1')) == "mpi('0.099999999999999992', '0.10000000000000001')" u = mpi(-1, 3) assert -1 in u assert 2 in u assert 3 in u assert -1.1 not in u assert 3.1 not in u assert mpi(-1, 3) in u assert mpi(0, 1) in u assert mpi(-1.1, 2) not in u assert mpi(2.5, 3.1) not in u w = mpi(-inf, inf) assert mpi(-5, 5) in w assert mpi(2, inf) in w assert mpi(0, 2) in mpi(0, 10) assert not (3 in mpi(-inf, 0)) def test_interval_hash(): assert hash(mpi(3)) == hash(3) assert hash(mpi(3.25)) == hash(3.25) assert hash(mpi(3,4)) == hash(mpi(3,4)) assert hash(iv.mpc(3)) == hash(3) assert hash(iv.mpc(3,4)) == hash(3+4j) assert hash(iv.mpc((1,3),(2,4))) == hash(iv.mpc((1,3),(2,4))) def test_interval_arithmetic(): iv.dps = 15 assert mpi(2) + mpi(3,4) == mpi(5,6) assert mpi(1, 2)**2 == mpi(1, 4) assert mpi(1) + mpi(0, 1e-50) == mpi(1, mpf('1.0000000000000002')) x = 1 / (1 / mpi(3)) assert x.a < 3 < x.b x = mpi(2) ** mpi(0.5) iv.dps += 5 sq = iv.sqrt(2) iv.dps -= 5 assert x.a < sq < x.b assert mpi(1) / mpi(1, inf) assert mpi(2, 3) / inf == mpi(0, 0) assert mpi(0) / inf == 0 assert mpi(0) / 0 == mpi(-inf, inf) assert mpi(inf) / 0 == mpi(-inf, inf) assert mpi(0) * inf == mpi(-inf, inf) assert 1 / mpi(2, inf) == mpi(0, 0.5) assert str((mpi(50, 50) * mpi(-10, -10)) / 3) == \ '[-166.66666666666668561, -166.66666666666665719]' assert mpi(0, 4) ** 3 == mpi(0, 64) assert mpi(2,4).mid == 3 iv.dps = 30 a = mpi(iv.pi) iv.dps = 15 b = +a assert b.a < a.a assert b.b > a.b a = mpi(iv.pi) assert a == +a assert abs(mpi(-1,2)) == mpi(0,2) assert abs(mpi(0.5,2)) == mpi(0.5,2) assert abs(mpi(-3,2)) == mpi(0,3) assert abs(mpi(-3,-0.5)) == mpi(0.5,3) assert mpi(0) * mpi(2,3) == mpi(0) assert mpi(2,3) * mpi(0) == mpi(0) assert mpi(1,3).delta == 2 assert mpi(1,2) - mpi(3,4) == mpi(-3,-1) assert mpi(-inf,0) - mpi(0,inf) == mpi(-inf,0) assert mpi(-inf,0) - mpi(-inf,inf) == mpi(-inf,inf) assert mpi(0,inf) - mpi(-inf,1) == mpi(-1,inf) def test_interval_mul(): assert mpi(-1, 0) * inf == mpi(-inf, 0) assert mpi(-1, 0) * -inf == mpi(0, inf) assert mpi(0, 1) * inf == mpi(0, inf) assert mpi(0, 1) * mpi(0, inf) == mpi(0, inf) assert mpi(-1, 1) * inf == mpi(-inf, inf) assert mpi(-1, 1) * mpi(0, inf) == mpi(-inf, inf) assert mpi(-1, 1) * mpi(-inf, inf) == mpi(-inf, inf) assert mpi(-inf, 0) * mpi(0, 1) == mpi(-inf, 0) assert mpi(-inf, 0) * mpi(0, 0) * mpi(-inf, 0) assert mpi(-inf, 0) * mpi(-inf, inf) == mpi(-inf, inf) assert mpi(-5,0)*mpi(-32,28) == mpi(-140,160) assert mpi(2,3) * mpi(-1,2) == mpi(-3,6) # Should be undefined? assert mpi(inf, inf) * 0 == mpi(-inf, inf) assert mpi(-inf, -inf) * 0 == mpi(-inf, inf) assert mpi(0) * mpi(-inf,2) == mpi(-inf,inf) assert mpi(0) * mpi(-2,inf) == mpi(-inf,inf) assert mpi(-2,inf) * mpi(0) == mpi(-inf,inf) assert mpi(-inf,2) * mpi(0) == mpi(-inf,inf) def test_interval_pow(): assert mpi(3)**2 == mpi(9, 9) assert mpi(-3)**2 == mpi(9, 9) assert mpi(-3, 1)**2 == mpi(0, 9) assert mpi(-3, -1)**2 == mpi(1, 9) assert mpi(-3, -1)**3 == mpi(-27, -1) assert mpi(-3, 1)**3 == mpi(-27, 1) assert mpi(-2, 3)**2 == mpi(0, 9) assert mpi(-3, 2)**2 == mpi(0, 9) assert mpi(4) ** -1 == mpi(0.25, 0.25) assert mpi(-4) ** -1 == mpi(-0.25, -0.25) assert mpi(4) ** -2 == mpi(0.0625, 0.0625) assert mpi(-4) ** -2 == mpi(0.0625, 0.0625) assert mpi(0, 1) ** inf == mpi(0, 1) assert mpi(0, 1) ** -inf == mpi(1, inf) assert mpi(0, inf) ** inf == mpi(0, inf) assert mpi(0, inf) ** -inf == mpi(0, inf) assert mpi(1, inf) ** inf == mpi(1, inf) assert mpi(1, inf) ** -inf == mpi(0, 1) assert mpi(2, 3) ** 1 == mpi(2, 3) assert mpi(2, 3) ** 0 == 1 assert mpi(1,3) ** mpi(2) == mpi(1,9) def test_interval_sqrt(): assert mpi(4) ** 0.5 == mpi(2) def test_interval_div(): assert mpi(0.5, 1) / mpi(-1, 0) == mpi(-inf, -0.5) assert mpi(0, 1) / mpi(0, 1) == mpi(0, inf) assert mpi(inf, inf) / mpi(inf, inf) == mpi(0, inf) assert mpi(inf, inf) / mpi(2, inf) == mpi(0, inf) assert mpi(inf, inf) / mpi(2, 2) == mpi(inf, inf) assert mpi(0, inf) / mpi(2, inf) == mpi(0, inf) assert mpi(0, inf) / mpi(2, 2) == mpi(0, inf) assert mpi(2, inf) / mpi(2, 2) == mpi(1, inf) assert mpi(2, inf) / mpi(2, inf) == mpi(0, inf) assert mpi(-4, 8) / mpi(1, inf) == mpi(-4, 8) assert mpi(-4, 8) / mpi(0.5, inf) == mpi(-8, 16) assert mpi(-inf, 8) / mpi(0.5, inf) == mpi(-inf, 16) assert mpi(-inf, inf) / mpi(0.5, inf) == mpi(-inf, inf) assert mpi(8, inf) / mpi(0.5, inf) == mpi(0, inf) assert mpi(-8, inf) / mpi(0.5, inf) == mpi(-16, inf) assert mpi(-4, 8) / mpi(inf, inf) == mpi(0, 0) assert mpi(0, 8) / mpi(inf, inf) == mpi(0, 0) assert mpi(0, 0) / mpi(inf, inf) == mpi(0, 0) assert mpi(-inf, 0) / mpi(inf, inf) == mpi(-inf, 0) assert mpi(-inf, 8) / mpi(inf, inf) == mpi(-inf, 0) assert mpi(-inf, inf) / mpi(inf, inf) == mpi(-inf, inf) assert mpi(-8, inf) / mpi(inf, inf) == mpi(0, inf) assert mpi(0, inf) / mpi(inf, inf) == mpi(0, inf) assert mpi(8, inf) / mpi(inf, inf) == mpi(0, inf) assert mpi(inf, inf) / mpi(inf, inf) == mpi(0, inf) assert mpi(-1, 2) / mpi(0, 1) == mpi(-inf, +inf) assert mpi(0, 1) / mpi(0, 1) == mpi(0.0, +inf) assert mpi(-1, 0) / mpi(0, 1) == mpi(-inf, 0.0) assert mpi(-0.5, -0.25) / mpi(0, 1) == mpi(-inf, -0.25) assert mpi(0.5, 1) / mpi(0, 1) == mpi(0.5, +inf) assert mpi(0.5, 4) / mpi(0, 1) == mpi(0.5, +inf) assert mpi(-1, -0.5) / mpi(0, 1) == mpi(-inf, -0.5) assert mpi(-4, -0.5) / mpi(0, 1) == mpi(-inf, -0.5) assert mpi(-1, 2) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(0, 1) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(-1, 0) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(-0.5, -0.25) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(0.5, 1) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(0.5, 4) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(-1, -0.5) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(-4, -0.5) / mpi(-2, 0.5) == mpi(-inf, +inf) assert mpi(-1, 2) / mpi(-1, 0) == mpi(-inf, +inf) assert mpi(0, 1) / mpi(-1, 0) == mpi(-inf, 0.0) assert mpi(-1, 0) / mpi(-1, 0) == mpi(0.0, +inf) assert mpi(-0.5, -0.25) / mpi(-1, 0) == mpi(0.25, +inf) assert mpi(0.5, 1) / mpi(-1, 0) == mpi(-inf, -0.5) assert mpi(0.5, 4) / mpi(-1, 0) == mpi(-inf, -0.5) assert mpi(-1, -0.5) / mpi(-1, 0) == mpi(0.5, +inf) assert mpi(-4, -0.5) / mpi(-1, 0) == mpi(0.5, +inf) assert mpi(-1, 2) / mpi(0.5, 1) == mpi(-2.0, 4.0) assert mpi(0, 1) / mpi(0.5, 1) == mpi(0.0, 2.0) assert mpi(-1, 0) / mpi(0.5, 1) == mpi(-2.0, 0.0) assert mpi(-0.5, -0.25) / mpi(0.5, 1) == mpi(-1.0, -0.25) assert mpi(0.5, 1) / mpi(0.5, 1) == mpi(0.5, 2.0) assert mpi(0.5, 4) / mpi(0.5, 1) == mpi(0.5, 8.0) assert mpi(-1, -0.5) / mpi(0.5, 1) == mpi(-2.0, -0.5) assert mpi(-4, -0.5) / mpi(0.5, 1) == mpi(-8.0, -0.5) assert mpi(-1, 2) / mpi(-2, -0.5) == mpi(-4.0, 2.0) assert mpi(0, 1) / mpi(-2, -0.5) == mpi(-2.0, 0.0) assert mpi(-1, 0) / mpi(-2, -0.5) == mpi(0.0, 2.0) assert mpi(-0.5, -0.25) / mpi(-2, -0.5) == mpi(0.125, 1.0) assert mpi(0.5, 1) / mpi(-2, -0.5) == mpi(-2.0, -0.25) assert mpi(0.5, 4) / mpi(-2, -0.5) == mpi(-8.0, -0.25) assert mpi(-1, -0.5) / mpi(-2, -0.5) == mpi(0.25, 2.0) assert mpi(-4, -0.5) / mpi(-2, -0.5) == mpi(0.25, 8.0) # Should be undefined? assert mpi(0, 0) / mpi(0, 0) == mpi(-inf, inf) assert mpi(0, 0) / mpi(0, 1) == mpi(-inf, inf) def test_interval_cos_sin(): iv.dps = 15 cos = iv.cos sin = iv.sin tan = iv.tan pi = iv.pi # Around 0 assert cos(mpi(0)) == 1 assert sin(mpi(0)) == 0 assert cos(mpi(0,1)) == mpi(0.54030230586813965399, 1.0) assert sin(mpi(0,1)) == mpi(0, 0.8414709848078966159) assert cos(mpi(1,2)) == mpi(-0.4161468365471424069, 0.54030230586813976501) assert sin(mpi(1,2)) == mpi(0.84147098480789650488, 1.0) assert sin(mpi(1,2.5)) == mpi(0.59847214410395643824, 1.0) assert cos(mpi(-1, 1)) == mpi(0.54030230586813965399, 1.0) assert cos(mpi(-1, 0.5)) == mpi(0.54030230586813965399, 1.0) assert cos(mpi(-1, 1.5)) == mpi(0.070737201667702906405, 1.0) assert sin(mpi(-1,1)) == mpi(-0.8414709848078966159, 0.8414709848078966159) assert sin(mpi(-1,0.5)) == mpi(-0.8414709848078966159, 0.47942553860420300538) assert mpi(-0.8414709848078966159, 1.00000000000000002e-100) in sin(mpi(-1,1e-100)) assert mpi(-2.00000000000000004e-100, 1.00000000000000002e-100) in sin(mpi(-2e-100,1e-100)) # Same interval assert cos(mpi(2, 2.5)) assert cos(mpi(3.5, 4)) == mpi(-0.93645668729079634129, -0.65364362086361182946) assert cos(mpi(5, 5.5)) == mpi(0.28366218546322624627, 0.70866977429126010168) assert mpi(0.59847214410395654927, 0.90929742682568170942) in sin(mpi(2, 2.5)) assert sin(mpi(3.5, 4)) == mpi(-0.75680249530792831347, -0.35078322768961983646) assert sin(mpi(5, 5.5)) == mpi(-0.95892427466313856499, -0.70554032557039181306) # Higher roots iv.dps = 55 w = 4*10**50 + mpi(0.5) for p in [15, 40, 80]: iv.dps = p assert 0 in sin(4*mpi(pi)) assert 0 in sin(4*10**50*mpi(pi)) assert 0 in cos((4+0.5)*mpi(pi)) assert 0 in cos(w*mpi(pi)) assert 1 in cos(4*mpi(pi)) assert 1 in cos(4*10**50*mpi(pi)) iv.dps = 15 assert cos(mpi(2,inf)) == mpi(-1,1) assert sin(mpi(2,inf)) == mpi(-1,1) assert cos(mpi(-inf,2)) == mpi(-1,1) assert sin(mpi(-inf,2)) == mpi(-1,1) u = tan(mpi(0.5,1)) assert mpf(u.a).ae(mp.tan(0.5)) assert mpf(u.b).ae(mp.tan(1)) v = iv.cot(mpi(0.5,1)) assert mpf(v.a).ae(mp.cot(1)) assert mpf(v.b).ae(mp.cot(0.5)) # Sanity check of evaluation at n*pi and (n+1/2)*pi for n in range(-5,7,2): x = iv.cos(n*iv.pi) assert -1 in x assert x >= -1 assert x != -1 x = iv.sin((n+0.5)*iv.pi) assert -1 in x assert x >= -1 assert x != -1 for n in range(-6,8,2): x = iv.cos(n*iv.pi) assert 1 in x assert x <= 1 if n: assert x != 1 x = iv.sin((n+0.5)*iv.pi) assert 1 in x assert x <= 1 assert x != 1 for n in range(-6,7): x = iv.cos((n+0.5)*iv.pi) assert x.a < 0 < x.b x = iv.sin(n*iv.pi) if n: assert x.a < 0 < x.b def test_interval_complex(): # TODO: many more tests iv.dps = 15 mp.dps = 15 assert iv.mpc(2,3) == 2+3j assert iv.mpc(2,3) != 2+4j assert iv.mpc(2,3) != 1+3j assert 1+3j in iv.mpc([1,2],[3,4]) assert 2+5j not in iv.mpc([1,2],[3,4]) assert iv.mpc(1,2) + 1j == 1+3j assert iv.mpc([1,2],[2,3]) + 2+3j == iv.mpc([3,4],[5,6]) assert iv.mpc([2,4],[4,8]) / 2 == iv.mpc([1,2],[2,4]) assert iv.mpc([1,2],[2,4]) * 2j == iv.mpc([-8,-4],[2,4]) assert iv.mpc([2,4],[4,8]) / 2j == iv.mpc([2,4],[-2,-1]) assert iv.exp(2+3j).ae(mp.exp(2+3j)) assert iv.log(2+3j).ae(mp.log(2+3j)) assert (iv.mpc(2,3) ** iv.mpc(0.5,2)).ae(mp.mpc(2,3) ** mp.mpc(0.5,2)) assert 1j in (iv.mpf(-1) ** 0.5) assert 1j in (iv.mpc(-1) ** 0.5) assert abs(iv.mpc(0)) == 0 assert abs(iv.mpc(inf)) == inf assert abs(iv.mpc(3,4)) == 5 assert abs(iv.mpc(4)) == 4 assert abs(iv.mpc(0,4)) == 4 assert abs(iv.mpc(0,[2,3])) == iv.mpf([2,3]) assert abs(iv.mpc(0,[-3,2])) == iv.mpf([0,3]) assert abs(iv.mpc([3,5],[4,12])) == iv.mpf([5,13]) assert abs(iv.mpc([3,5],[-4,12])) == iv.mpf([3,13]) assert iv.mpc(2,3) ** 0 == 1 assert iv.mpc(2,3) ** 1 == (2+3j) assert iv.mpc(2,3) ** 2 == (2+3j)**2 assert iv.mpc(2,3) ** 3 == (2+3j)**3 assert iv.mpc(2,3) ** 4 == (2+3j)**4 assert iv.mpc(2,3) ** 5 == (2+3j)**5 assert iv.mpc(2,2) ** (-1) == (2+2j) ** (-1) assert iv.mpc(2,2) ** (-2) == (2+2j) ** (-2) assert iv.cos(2).ae(mp.cos(2)) assert iv.sin(2).ae(mp.sin(2)) assert iv.cos(2+3j).ae(mp.cos(2+3j)) assert iv.sin(2+3j).ae(mp.sin(2+3j)) def test_interval_complex_arg(): mp.dps = 15 iv.dps = 15 assert iv.arg(3) == 0 assert iv.arg(0) == 0 assert iv.arg([0,3]) == 0 assert iv.arg(-3).ae(pi) assert iv.arg(2+3j).ae(iv.arg(2+3j)) z = iv.mpc([-2,-1],[3,4]) t = iv.arg(z) assert t.a.ae(mp.arg(-1+4j)) assert t.b.ae(mp.arg(-2+3j)) z = iv.mpc([-2,1],[3,4]) t = iv.arg(z) assert t.a.ae(mp.arg(1+3j)) assert t.b.ae(mp.arg(-2+3j)) z = iv.mpc([1,2],[3,4]) t = iv.arg(z) assert t.a.ae(mp.arg(2+3j)) assert t.b.ae(mp.arg(1+4j)) z = iv.mpc([1,2],[-2,3]) t = iv.arg(z) assert t.a.ae(mp.arg(1-2j)) assert t.b.ae(mp.arg(1+3j)) z = iv.mpc([1,2],[-4,-3]) t = iv.arg(z) assert t.a.ae(mp.arg(1-4j)) assert t.b.ae(mp.arg(2-3j)) z = iv.mpc([-1,2],[-4,-3]) t = iv.arg(z) assert t.a.ae(mp.arg(-1-3j)) assert t.b.ae(mp.arg(2-3j)) z = iv.mpc([-2,-1],[-4,-3]) t = iv.arg(z) assert t.a.ae(mp.arg(-2-3j)) assert t.b.ae(mp.arg(-1-4j)) z = iv.mpc([-2,-1],[-3,3]) t = iv.arg(z) assert t.a.ae(-mp.pi) assert t.b.ae(mp.pi) z = iv.mpc([-2,2],[-3,3]) t = iv.arg(z) assert t.a.ae(-mp.pi) assert t.b.ae(mp.pi) def test_interval_ae(): iv.dps = 15 x = iv.mpf([1,2]) assert x.ae(1) is None assert x.ae(1.5) is None assert x.ae(2) is None assert x.ae(2.01) is False assert x.ae(0.99) is False x = iv.mpf(3.5) assert x.ae(3.5) is True assert x.ae(3.5+1e-15) is True assert x.ae(3.5-1e-15) is True assert x.ae(3.501) is False assert x.ae(3.499) is False assert x.ae(iv.mpf([3.5,3.501])) is None assert x.ae(iv.mpf([3.5,4.5+1e-15])) is None def test_interval_nstr(): iv.dps = n = 30 x = mpi(1, 2) # FIXME: error_dps should not be necessary assert iv.nstr(x, n, mode='plusminus', error_dps=6) == '1.5 +- 0.5' assert iv.nstr(x, n, mode='plusminus', use_spaces=False, error_dps=6) == '1.5+-0.5' assert iv.nstr(x, n, mode='percent') == '1.5 (33.33%)' assert iv.nstr(x, n, mode='brackets', use_spaces=False) == '[1.0,2.0]' assert iv.nstr(x, n, mode='brackets' , brackets=('<', '>')) == '<1.0, 2.0>' x = mpi('5.2582327113062393041', '5.2582327113062749951') assert iv.nstr(x, n, mode='diff') == '5.2582327113062[393041, 749951]' assert iv.nstr(iv.cos(mpi(1)), n, mode='diff', use_spaces=False) == '0.54030230586813971740093660744[2955,3053]' assert iv.nstr(mpi('1e123', '1e129'), n, mode='diff') == '[1.0e+123, 1.0e+129]' exp = iv.exp assert iv.nstr(iv.exp(mpi('5000.1')), n, mode='diff') == '3.2797365856787867069110487[0926, 1191]e+2171' iv.dps = 15 def test_mpi_from_str(): iv.dps = 15 assert iv.convert('1.5 +- 0.5') == mpi(mpf('1.0'), mpf('2.0')) assert mpi(1, 2) in iv.convert('1.5 (33.33333333333333333333333333333%)') assert iv.convert('[1, 2]') == mpi(1, 2) assert iv.convert('1[2, 3]') == mpi(12, 13) assert iv.convert('1.[23,46]e-8') == mpi('1.23e-8', '1.46e-8') assert iv.convert('12[3.4,5.9]e4') == mpi('123.4e+4', '125.9e4') def test_interval_gamma(): mp.dps = 15 iv.dps = 15 # TODO: need many more tests assert iv.rgamma(0) == 0 assert iv.fac(0) == 1 assert iv.fac(1) == 1 assert iv.fac(2) == 2 assert iv.fac(3) == 6 assert iv.gamma(0) == [-inf,inf] assert iv.gamma(1) == 1 assert iv.gamma(2) == 1 assert iv.gamma(3) == 2 assert -3.5449077018110320546 in iv.gamma(-0.5) assert iv.loggamma(1) == 0 assert iv.loggamma(2) == 0 assert 0.69314718055994530942 in iv.loggamma(3) # Test tight log-gamma endpoints based on monotonicity xs = [iv.mpc([2,3],[1,4]), iv.mpc([2,3],[-4,-1]), iv.mpc([2,3],[-1,4]), iv.mpc([2,3],[-4,1]), iv.mpc([2,3],[-4,4]), iv.mpc([-3,-2],[2,4]), iv.mpc([-3,-2],[-4,-2])] for x in xs: ys = [mp.loggamma(mp.mpc(x.a,x.c)), mp.loggamma(mp.mpc(x.b,x.c)), mp.loggamma(mp.mpc(x.a,x.d)), mp.loggamma(mp.mpc(x.b,x.d))] if 0 in x.imag: ys += [mp.loggamma(x.a), mp.loggamma(x.b)] min_real = min([y.real for y in ys]) max_real = max([y.real for y in ys]) min_imag = min([y.imag for y in ys]) max_imag = max([y.imag for y in ys]) z = iv.loggamma(x) assert z.a.ae(min_real) assert z.b.ae(max_real) assert z.c.ae(min_imag) assert z.d.ae(max_imag) mpmath-1.0.0/mpmath/tests/test_levin.py000066400000000000000000000117421316273626600201750ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- from mpmath import mp from mpmath import libmp xrange = libmp.backend.xrange # Attention: # These tests run with 15-20 decimal digits precision. For higher precision the # working precision must be raised. def test_levin_0(): mp.dps = 17 eps = mp.mpf(mp.eps) with mp.extraprec(2 * mp.prec): L = mp.levin(method = "levin", variant = "u") S, s, n = [], 0, 1 while 1: s += mp.one / (n * n) n += 1 S.append(s) v, e = L.update_psum(S) if e < eps: break if n > 1000: raise RuntimeError("iteration limit exceeded") eps = mp.exp(0.9 * mp.log(eps)) err = abs(v - mp.pi ** 2 / 6) assert err < eps w = mp.nsum(lambda n: 1/(n * n), [1, mp.inf], method = "levin", levin_variant = "u") err = abs(v - w) assert err < eps def test_levin_1(): mp.dps = 17 eps = mp.mpf(mp.eps) with mp.extraprec(2 * mp.prec): L = mp.levin(method = "levin", variant = "v") A, n = [], 1 while 1: s = mp.mpf(n) ** (2 + 3j) n += 1 A.append(s) v, e = L.update(A) if e < eps: break if n > 1000: raise RuntimeError("iteration limit exceeded") eps = mp.exp(0.9 * mp.log(eps)) err = abs(v - mp.zeta(-2-3j)) assert err < eps w = mp.nsum(lambda n: n ** (2 + 3j), [1, mp.inf], method = "levin", levin_variant = "v") err = abs(v - w) assert err < eps def test_levin_2(): # [2] A. Sidi - "Pratical Extrapolation Methods" p.373 mp.dps = 17 z=mp.mpf(10) eps = mp.mpf(mp.eps) with mp.extraprec(2 * mp.prec): L = mp.levin(method = "sidi", variant = "t") n = 0 while 1: s = (-1)**n * mp.fac(n) * z ** (-n) v, e = L.step(s) n += 1 if e < eps: break if n > 1000: raise RuntimeError("iteration limit exceeded") eps = mp.exp(0.9 * mp.log(eps)) exact = mp.quad(lambda x: mp.exp(-x)/(1+x/z),[0,mp.inf]) # there is also a symbolic expression for the integral: # exact = z * mp.exp(z) * mp.expint(1,z) err = abs(v - exact) assert err < eps w = mp.nsum(lambda n: (-1) ** n * mp.fac(n) * z ** (-n), [0, mp.inf], method = "sidi", levin_variant = "t") assert err < eps def test_levin_3(): mp.dps = 17 z=mp.mpf(2) eps = mp.mpf(mp.eps) with mp.extraprec(7*mp.prec): # we need copious amount of precision to sum this highly divergent series L = mp.levin(method = "levin", variant = "t") n, s = 0, 0 while 1: s += (-z)**n * mp.fac(4 * n) / (mp.fac(n) * mp.fac(2 * n) * (4 ** n)) n += 1 v, e = L.step_psum(s) if e < eps: break if n > 1000: raise RuntimeError("iteration limit exceeded") eps = mp.exp(0.8 * mp.log(eps)) exact = mp.quad(lambda x: mp.exp( -x * x / 2 - z * x ** 4), [0,mp.inf]) * 2 / mp.sqrt(2 * mp.pi) # there is also a symbolic expression for the integral: # exact = mp.exp(mp.one / (32 * z)) * mp.besselk(mp.one / 4, mp.one / (32 * z)) / (4 * mp.sqrt(z * mp.pi)) err = abs(v - exact) assert err < eps w = mp.nsum(lambda n: (-z)**n * mp.fac(4 * n) / (mp.fac(n) * mp.fac(2 * n) * (4 ** n)), [0, mp.inf], method = "levin", levin_variant = "t", workprec = 8*mp.prec, steps = [2] + [1 for x in xrange(1000)]) err = abs(v - w) assert err < eps def test_levin_nsum(): mp.dps = 17 with mp.extraprec(mp.prec): z = mp.mpf(10) ** (-10) a = mp.nsum(lambda n: n**(-(1+z)), [1, mp.inf], method = "l") - 1 / z assert abs(a - mp.euler) < 1e-10 eps = mp.exp(0.8 * mp.log(mp.eps)) a = mp.nsum(lambda n: (-1)**(n-1) / n, [1, mp.inf], method = "sidi") assert abs(a - mp.log(2)) < eps z = 2 + 1j f = lambda n: mp.rf(2 / mp.mpf(3), n) * mp.rf(4 / mp.mpf(3), n) * z**n / (mp.rf(1 / mp.mpf(3), n) * mp.fac(n)) v = mp.nsum(f, [0, mp.inf], method = "levin", steps = [10 for x in xrange(1000)]) exact = mp.hyp2f1(2 / mp.mpf(3), 4 / mp.mpf(3), 1 / mp.mpf(3), z) assert abs(exact - v) < eps def test_cohen_alt_0(): mp.dps = 17 AC = mp.cohen_alt() S, s, n = [], 0, 1 while 1: s += -((-1) ** n) * mp.one / (n * n) n += 1 S.append(s) v, e = AC.update_psum(S) if e < mp.eps: break if n > 1000: raise RuntimeError("iteration limit exceeded") eps = mp.exp(0.9 * mp.log(mp.eps)) err = abs(v - mp.pi ** 2 / 12) assert err < eps def test_cohen_alt_1(): mp.dps = 17 A = [] AC = mp.cohen_alt() n = 1 while 1: A.append( mp.loggamma(1 + mp.one / (2 * n - 1))) A.append(-mp.loggamma(1 + mp.one / (2 * n))) n += 1 v, e = AC.update(A) if e < mp.eps: break if n > 1000: raise RuntimeError("iteration limit exceeded") v = mp.exp(v) err = abs(v - 1.06215090557106) assert err < 1e-12 mpmath-1.0.0/mpmath/tests/test_linalg.py000066400000000000000000000240271316273626600203260ustar00rootroot00000000000000# TODO: don't use round from __future__ import division from mpmath import * xrange = libmp.backend.xrange # XXX: these shouldn't be visible(?) LU_decomp = mp.LU_decomp L_solve = mp.L_solve U_solve = mp.U_solve householder = mp.householder improve_solution = mp.improve_solution A1 = matrix([[3, 1, 6], [2, 1, 3], [1, 1, 1]]) b1 = [2, 7, 4] A2 = matrix([[ 2, -1, -1, 2], [ 6, -2, 3, -1], [-4, 2, 3, -2], [ 2, 0, 4, -3]]) b2 = [3, -3, -2, -1] A3 = matrix([[ 1, 0, -1, -1, 0], [ 0, 1, 1, 0, -1], [ 4, -5, 2, 0, 0], [ 0, 0, -2, 9,-12], [ 0, 5, 0, 0, 12]]) b3 = [0, 0, 0, 0, 50] A4 = matrix([[10.235, -4.56, 0., -0.035, 5.67], [-2.463, 1.27, 3.97, -8.63, 1.08], [-6.58, 0.86, -0.257, 9.32, -43.6 ], [ 9.83, 7.39, -17.25, 0.036, 24.86], [-9.31, 34.9, 78.56, 1.07, 65.8 ]]) b4 = [8.95, 20.54, 7.42, 5.60, 58.43] A5 = matrix([[ 1, 2, -4], [-2, -3, 5], [ 3, 5, -8]]) A6 = matrix([[ 1.377360, 2.481400, 5.359190], [ 2.679280, -1.229560, 25.560210], [-1.225280+1.e6, 9.910180, -35.049900-1.e6]]) b6 = [23.500000, -15.760000, 2.340000] A7 = matrix([[1, -0.5], [2, 1], [-2, 6]]) b7 = [3, 2, -4] A8 = matrix([[1, 2, 3], [-1, 0, 1], [-1, -2, -1], [1, 0, -1]]) b8 = [1, 2, 3, 4] A9 = matrix([[ 4, 2, -2], [ 2, 5, -4], [-2, -4, 5.5]]) b9 = [10, 16, -15.5] A10 = matrix([[1.0 + 1.0j, 2.0, 2.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]) b10 = [1.0, 1.0 + 1.0j, 1.0] def test_LU_decomp(): A = A3.copy() b = b3 A, p = LU_decomp(A) y = L_solve(A, b, p) x = U_solve(A, y) assert p == [2, 1, 2, 3] assert [round(i, 14) for i in x] == [3.78953107960742, 2.9989094874591098, -0.081788440567070006, 3.8713195201744801, 2.9171210468920399] A = A4.copy() b = b4 A, p = LU_decomp(A) y = L_solve(A, b, p) x = U_solve(A, y) assert p == [0, 3, 4, 3] assert [round(i, 14) for i in x] == [2.6383625899619201, 2.6643834462368399, 0.79208015947958998, -2.5088376454101899, -1.0567657691375001] A = randmatrix(3) bak = A.copy() LU_decomp(A, overwrite=1) assert A != bak def test_inverse(): for A in [A1, A2, A5]: inv = inverse(A) assert mnorm(A*inv - eye(A.rows), 1) < 1.e-14 def test_householder(): mp.dps = 15 A, b = A8, b8 H, p, x, r = householder(extend(A, b)) assert H == matrix( [[mpf('3.0'), mpf('-2.0'), mpf('-1.0'), 0], [-1.0,mpf('3.333333333333333'),mpf('-2.9999999999999991'),mpf('2.0')], [-1.0, mpf('-0.66666666666666674'),mpf('2.8142135623730948'), mpf('-2.8284271247461898')], [1.0, mpf('-1.3333333333333333'),mpf('-0.20000000000000018'), mpf('4.2426406871192857')]]) assert p == [-2, -2, mpf('-1.4142135623730949')] assert round(norm(r, 2), 10) == 4.2426406870999998 y = [102.102, 58.344, 36.463, 24.310, 17.017, 12.376, 9.282, 7.140, 5.610, 4.488, 3.6465, 3.003] def coeff(n): # similiar to Hilbert matrix A = [] for i in range(1, 13): A.append([1. / (i + j - 1) for j in range(1, n + 1)]) return matrix(A) residuals = [] refres = [] for n in range(2, 7): A = coeff(n) H, p, x, r = householder(extend(A, y)) x = matrix(x) y = matrix(y) residuals.append(norm(r, 2)) refres.append(norm(residual(A, x, y), 2)) assert [round(res, 10) for res in residuals] == [15.1733888877, 0.82378073210000002, 0.302645887, 0.0260109244, 0.00058653999999999998] assert norm(matrix(residuals) - matrix(refres), inf) < 1.e-13 def test_factorization(): A = randmatrix(5) P, L, U = lu(A) assert mnorm(P*A - L*U, 1) < 1.e-15 def test_solve(): assert norm(residual(A6, lu_solve(A6, b6), b6), inf) < 1.e-10 assert norm(residual(A7, lu_solve(A7, b7), b7), inf) < 1.5 assert norm(residual(A8, lu_solve(A8, b8), b8), inf) <= 3 + 1.e-10 assert norm(residual(A6, qr_solve(A6, b6)[0], b6), inf) < 1.e-10 assert norm(residual(A7, qr_solve(A7, b7)[0], b7), inf) < 1.5 assert norm(residual(A8, qr_solve(A8, b8)[0], b8), 2) <= 4.3 assert norm(residual(A10, lu_solve(A10, b10), b10), 2) < 1.e-10 assert norm(residual(A10, qr_solve(A10, b10)[0], b10), 2) < 1.e-10 def test_solve_overdet_complex(): A = matrix([[1, 2j], [3, 4j], [5, 6]]) b = matrix([1 + j, 2, -j]) assert norm(residual(A, lu_solve(A, b), b)) < 1.0208 def test_singular(): mp.dps = 15 A = [[5.6, 1.2], [7./15, .1]] B = repr(zeros(2)) b = [1, 2] def _assert_ZeroDivisionError(statement): try: eval(statement) assert False except (ZeroDivisionError, ValueError): pass for i in ['lu_solve(%s, %s)' % (A, b), 'lu_solve(%s, %s)' % (B, b), 'qr_solve(%s, %s)' % (A, b), 'qr_solve(%s, %s)' % (B, b)]: _assert_ZeroDivisionError(i) def test_cholesky(): assert fp.cholesky(fp.matrix(A9)) == fp.matrix([[2, 0, 0], [1, 2, 0], [-1, -3/2, 3/2]]) x = fp.cholesky_solve(A9, b9) assert fp.norm(fp.residual(A9, x, b9), fp.inf) == 0 def test_det(): assert det(A1) == 1 assert round(det(A2), 14) == 8 assert round(det(A3)) == 1834 assert round(det(A4)) == 4443376 assert det(A5) == 1 assert round(det(A6)) == 78356463 assert det(zeros(3)) == 0 def test_cond(): mp.dps = 15 A = matrix([[1.2969, 0.8648], [0.2161, 0.1441]]) assert cond(A, lambda x: mnorm(x,1)) == mpf('327065209.73817754') assert cond(A, lambda x: mnorm(x,inf)) == mpf('327065209.73817754') assert cond(A, lambda x: mnorm(x,'F')) == mpf('249729266.80008656') @extradps(50) def test_precision(): A = randmatrix(10, 10) assert mnorm(inverse(inverse(A)) - A, 1) < 1.e-45 def test_interval_matrix(): mp.dps = 15 iv.dps = 15 a = iv.matrix([['0.1','0.3','1.0'],['7.1','5.5','4.8'],['3.2','4.4','5.6']]) b = iv.matrix(['4','0.6','0.5']) c = iv.lu_solve(a, b) assert c[0].delta < 1e-13 assert c[1].delta < 1e-13 assert c[2].delta < 1e-13 assert 5.25823271130625686059275 in c[0] assert -13.155049396267837541163 in c[1] assert 7.42069154774972557628979 in c[2] def test_LU_cache(): A = randmatrix(3) LU = LU_decomp(A) assert A._LU == LU_decomp(A) A[0,0] = -1000 assert A._LU is None def test_improve_solution(): A = randmatrix(5, min=1e-20, max=1e20) b = randmatrix(5, 1, min=-1000, max=1000) x1 = lu_solve(A, b) + randmatrix(5, 1, min=-1e-5, max=1.e-5) x2 = improve_solution(A, x1, b) assert norm(residual(A, x2, b), 2) < norm(residual(A, x1, b), 2) def test_exp_pade(): for i in range(3): dps = 15 extra = 15 mp.dps = dps + extra dm = 0 N = 3 dg = range(1,N+1) a = diag(dg) expa = diag([exp(x) for x in dg]) # choose a random matrix not close to be singular # to avoid adding too much extra precision in computing # m**-1 * M * m while abs(dm) < 0.01: m = randmatrix(N) dm = det(m) m = m/dm a1 = m**-1 * a * m e2 = m**-1 * expa * m mp.dps = dps e1 = expm(a1, method='pade') mp.dps = dps + extra d = e2 - e1 #print d mp.dps = dps assert norm(d, inf).ae(0) mp.dps = 15 def test_qr(): mp.dps = 15 # used default value for dps lowlimit = -9 # lower limit of matrix element value uplimit = 9 # uppter limit of matrix element value maxm = 4 # max matrix size flg = False # toggle to create real vs complex matrix zero = mpf('0.0') for k in xrange(0,10): exdps = 0 mode = 'full' flg = bool(k % 2) # generate arbitrary matrix size (2 to maxm) num1 = nint(2 + (maxm-2)*rand()) num2 = nint(2 + (maxm-2)*rand()) m = int(max(num1, num2)) n = int(min(num1, num2)) # create matrix A = mp.matrix(m,n) # populate matrix values with arbitrary integers if flg: flg = False dtype = 'complex' for j in xrange(0,n): for i in xrange(0,m): val = nint(lowlimit + (uplimit-lowlimit)*rand()) val2 = nint(lowlimit + (uplimit-lowlimit)*rand()) A[i,j] = mpc(val, val2) else: flg = True dtype = 'real' for j in xrange(0,n): for i in xrange(0,m): val = nint(lowlimit + (uplimit-lowlimit)*rand()) A[i,j] = mpf(val) # perform A -> QR decomposition Q, R = qr(A, mode, edps = exdps) #print('\n\n A = \n', nstr(A, 4)) #print('\n Q = \n', nstr(Q, 4)) #print('\n R = \n', nstr(R, 4)) #print('\n Q*R = \n', nstr(Q*R, 4)) maxnorm = mpf('1.0E-11') n1 = norm(A - Q * R) #print '\n Norm of A - Q * R = ', n1 if n1 > maxnorm: raise ValueError('Excessive norm value') if dtype == 'real': n1 = norm(eye(m) - Q.T * Q) #print ' Norm of I - Q.T * Q = ', n1 if n1 > maxnorm: raise ValueError('Excessive norm value') n1 = norm(eye(m) - Q * Q.T) #print ' Norm of I - Q * Q.T = ', n1 if n1 > maxnorm: raise ValueError('Excessive norm value') if dtype == 'complex': n1 = norm(eye(m) - Q.T * Q.conjugate()) #print ' Norm of I - Q.T * Q.conjugate() = ', n1 if n1 > maxnorm: raise ValueError('Excessive norm value') n1 = norm(eye(m) - Q.conjugate() * Q.T) #print ' Norm of I - Q.conjugate() * Q.T = ', n1 if n1 > maxnorm: raise ValueError('Excessive norm value') mpmath-1.0.0/mpmath/tests/test_matrices.py000066400000000000000000000127271316273626600206730ustar00rootroot00000000000000from mpmath import * def test_matrix_basic(): A1 = matrix(3) for i in range(3): A1[i,i] = 1 assert A1 == eye(3) assert A1 == matrix(A1) A2 = matrix(3, 2) assert not A2._matrix__data A3 = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) assert list(A3) == list(range(1, 10)) A3[1,1] = 0 assert not (1, 1) in A3._matrix__data A4 = matrix([[1, 2, 3], [4, 5, 6]]) A5 = matrix([[6, -1], [3, 2], [0, -3]]) assert A4 * A5 == matrix([[12, -6], [39, -12]]) assert A1 * A3 == A3 * A1 == A3 try: A2 * A2 assert False except ValueError: pass l = [[10, 20, 30], [40, 0, 60], [70, 80, 90]] A6 = matrix(l) assert A6.tolist() == l assert A6 == eval(repr(A6)) A6 = matrix(A6, force_type=float) assert A6 == eval(repr(A6)) assert A6*1j == eval(repr(A6*1j)) assert A3 * 10 == 10 * A3 == A6 assert A2.rows == 3 assert A2.cols == 2 A3.rows = 2 A3.cols = 2 assert len(A3._matrix__data) == 3 assert A4 + A4 == 2*A4 try: A4 + A2 except ValueError: pass assert sum(A1 - A1) == 0 A7 = matrix([[1, 2], [3, 4], [5, 6], [7, 8]]) x = matrix([10, -10]) assert A7*x == matrix([-10, -10, -10, -10]) A8 = ones(5) assert sum((A8 + 1) - (2 - zeros(5))) == 0 assert (1 + ones(4)) / 2 - 1 == zeros(4) assert eye(3)**10 == eye(3) try: A7**2 assert False except ValueError: pass A9 = randmatrix(3) A10 = matrix(A9) A9[0,0] = -100 assert A9 != A10 assert nstr(A9) def test_matrix_slices(): A = matrix([ [1, 2, 3], [4, 5 ,6], [7, 8 ,9]]) V = matrix([1,2,3,4,5]) # Get slice assert A[:,:] == A assert A[:,1] == matrix([[2],[5],[8]]) assert A[2,:] == matrix([[7, 8 ,9]]) assert A[1:3,1:3] == matrix([[5,6],[8,9]]) assert V[2:4] == matrix([3,4]) try: A6 = A[:,1:6] assert False except IndexError: pass # Assign slice with matrix A1 = matrix(3) A1[:,:] = A assert A1[:,:] == matrix([[1, 2, 3], [4, 5 ,6], [7, 8 ,9]]) A1[0,:] = matrix([[10, 11, 12]]) assert A1 == matrix([ [10, 11, 12], [4, 5 ,6], [7, 8 ,9]]) A1[:,2] = matrix([[13], [14], [15]]) assert A1 == matrix([ [10, 11, 13], [4, 5 ,14], [7, 8 ,15]]) A1[:2,:2] = matrix([[16, 17], [18 , 19]]) assert A1 == matrix([ [16, 17, 13], [18, 19 ,14], [7, 8 ,15]]) V[1:3] = 10 assert V == matrix([1,10,10,4,5]) try: A1[2,:] = A[:,1] assert False except ValueError: pass try: A1[2,1:20] = A[:,:] assert False except IndexError: pass # Assign slice with scalar A1[:,2] = 10 assert A1 == matrix([ [16, 17, 10], [18, 19 ,10], [7, 8 ,10]]) A1[:,:] = 40 for x in A1: assert x == 40 def test_matrix_power(): A = matrix([[1, 2], [3, 4]]) assert A**2 == A*A assert A**3 == A*A*A assert A**-1 == inverse(A) assert A**-2 == inverse(A*A) def test_matrix_transform(): A = matrix([[1, 2], [3, 4], [5, 6]]) assert A.T == A.transpose() == matrix([[1, 3, 5], [2, 4, 6]]) swap_row(A, 1, 2) assert A == matrix([[1, 2], [5, 6], [3, 4]]) l = [1, 2] swap_row(l, 0, 1) assert l == [2, 1] assert extend(eye(3), [1,2,3]) == matrix([[1,0,0,1],[0,1,0,2],[0,0,1,3]]) def test_matrix_conjugate(): A = matrix([[1 + j, 0], [2, j]]) assert A.conjugate() == matrix([[mpc(1, -1), 0], [2, mpc(0, -1)]]) assert A.transpose_conj() == A.H == matrix([[mpc(1, -1), 2], [0, mpc(0, -1)]]) def test_matrix_creation(): assert diag([1, 2, 3]) == matrix([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) A1 = ones(2, 3) assert A1.rows == 2 and A1.cols == 3 for a in A1: assert a == 1 A2 = zeros(3, 2) assert A2.rows == 3 and A2.cols == 2 for a in A2: assert a == 0 assert randmatrix(10) != randmatrix(10) one = mpf(1) assert hilbert(3) == matrix([[one, one/2, one/3], [one/2, one/3, one/4], [one/3, one/4, one/5]]) def test_norms(): # matrix norms A = matrix([[1, -2], [-3, -1], [2, 1]]) assert mnorm(A,1) == 6 assert mnorm(A,inf) == 4 assert mnorm(A,'F') == sqrt(20) # vector norms assert norm(-3) == 3 x = [1, -2, 7, -12] assert norm(x, 1) == 22 assert round(norm(x, 2), 10) == 14.0712472795 assert round(norm(x, 10), 10) == 12.0054633727 assert norm(x, inf) == 12 def test_vector(): x = matrix([0, 1, 2, 3, 4]) assert x == matrix([[0], [1], [2], [3], [4]]) assert x[3] == 3 assert len(x._matrix__data) == 4 assert list(x) == list(range(5)) x[0] = -10 x[4] = 0 assert x[0] == -10 assert len(x) == len(x.T) == 5 assert x.T*x == matrix([[114]]) def test_matrix_copy(): A = ones(6) B = A.copy() assert A == B B[0,0] = 0 assert A != B def test_matrix_numpy(): try: import numpy except ImportError: return l = [[1, 2], [3, 4], [5, 6]] a = numpy.matrix(l) assert matrix(l) == matrix(a) mpmath-1.0.0/mpmath/tests/test_mpmath.py000066400000000000000000000003041316273626600203360ustar00rootroot00000000000000from mpmath.libmp import * from mpmath import * def test_newstyle_classes(): for cls in [mp, fp, iv, mpf, mpc]: for s in cls.__class__.__mro__: assert isinstance(s, type) mpmath-1.0.0/mpmath/tests/test_ode.py000066400000000000000000000034361316273626600176300ustar00rootroot00000000000000#from mpmath.calculus import ODE_step_euler, ODE_step_rk4, odeint, arange from mpmath import odefun, cos, sin, mpf, sinc, mp ''' solvers = [ODE_step_euler, ODE_step_rk4] def test_ode1(): """ Let's solve: x'' + w**2 * x = 0 i.e. x1 = x, x2 = x1': x1' = x2 x2' = -x1 """ def derivs((x1, x2), t): return x2, -x1 for solver in solvers: t = arange(0, 3.1415926, 0.005) sol = odeint(derivs, (0., 1.), t, solver) x1 = [a[0] for a in sol] x2 = [a[1] for a in sol] # the result is x1 = sin(t), x2 = cos(t) # let's just check the end points for t = pi assert abs(x1[-1]) < 1e-2 assert abs(x2[-1] - (-1)) < 1e-2 def test_ode2(): """ Let's solve: x' - x = 0 i.e. x = exp(x) """ def derivs((x), t): return x for solver in solvers: t = arange(0, 1, 1e-3) sol = odeint(derivs, (1.,), t, solver) x = [a[0] for a in sol] # the result is x = exp(t) # let's just check the end point for t = 1, i.e. x = e assert abs(x[-1] - 2.718281828) < 1e-2 ''' def test_odefun_rational(): mp.dps = 15 # A rational function f = lambda t: 1/(1+mpf(t)**2) g = odefun(lambda x, y: [-2*x*y[0]**2], 0, [f(0)]) assert f(2).ae(g(2)[0]) def test_odefun_sinc_large(): mp.dps = 15 # Sinc function; test for large x f = sinc g = odefun(lambda x, y: [(cos(x)-y[0])/x], 1, [f(1)], tol=0.01, degree=5) assert abs(f(100) - g(100)[0])/f(100) < 0.01 def test_odefun_harmonic(): mp.dps = 15 # Harmonic oscillator f = odefun(lambda x, y: [-y[1], y[0]], 0, [1, 0]) for x in [0, 1, 2.5, 8, 3.7]: # we go back to 3.7 to check caching c, s = f(x) assert c.ae(cos(x)) assert s.ae(sin(x)) mpmath-1.0.0/mpmath/tests/test_pickle.py000066400000000000000000000006211316273626600203210ustar00rootroot00000000000000import os import tempfile import pickle from mpmath import * def pickler(obj): fn = tempfile.mktemp() f = open(fn, 'wb') pickle.dump(obj, f) f.close() f = open(fn, 'rb') obj2 = pickle.load(f) f.close() os.remove(fn) return obj2 def test_pickle(): obj = mpf('0.5') assert obj == pickler(obj) obj = mpc('0.5','0.2') assert obj == pickler(obj) mpmath-1.0.0/mpmath/tests/test_power.py000066400000000000000000000121531316273626600202110ustar00rootroot00000000000000from mpmath import * from mpmath.libmp import * import random def test_fractional_pow(): mp.dps = 15 assert mpf(16) ** 2.5 == 1024 assert mpf(64) ** 0.5 == 8 assert mpf(64) ** -0.5 == 0.125 assert mpf(16) ** -2.5 == 0.0009765625 assert (mpf(10) ** 0.5).ae(3.1622776601683791) assert (mpf(10) ** 2.5).ae(316.2277660168379) assert (mpf(10) ** -0.5).ae(0.31622776601683794) assert (mpf(10) ** -2.5).ae(0.0031622776601683794) assert (mpf(10) ** 0.3).ae(1.9952623149688795) assert (mpf(10) ** -0.3).ae(0.50118723362727224) def test_pow_integer_direction(): """ Test that inexact integer powers are rounded in the right direction. """ random.seed(1234) for prec in [10, 53, 200]: for i in range(50): a = random.randint(1<<(prec-1), 1< ab def test_pow_epsilon_rounding(): """ Stress test directed rounding for powers with integer exponents. Basically, we look at the following cases: >>> 1.0001 ** -5 # doctest: +SKIP 0.99950014996500702 >>> 0.9999 ** -5 # doctest: +SKIP 1.000500150035007 >>> (-1.0001) ** -5 # doctest: +SKIP -0.99950014996500702 >>> (-0.9999) ** -5 # doctest: +SKIP -1.000500150035007 >>> 1.0001 ** -6 # doctest: +SKIP 0.99940020994401269 >>> 0.9999 ** -6 # doctest: +SKIP 1.0006002100560125 >>> (-1.0001) ** -6 # doctest: +SKIP 0.99940020994401269 >>> (-0.9999) ** -6 # doctest: +SKIP 1.0006002100560125 etc. We run the tests with values a very small epsilon away from 1: small enough that the result is indistinguishable from 1 when rounded to nearest at the output precision. We check that the result is not erroneously rounded to 1 in cases where the rounding should be done strictly away from 1. """ def powr(x, n, r): return make_mpf(mpf_pow_int(x._mpf_, n, mp.prec, r)) for (inprec, outprec) in [(100, 20), (5000, 3000)]: mp.prec = inprec pos10001 = mpf(1) + mpf(2)**(-inprec+5) pos09999 = mpf(1) - mpf(2)**(-inprec+5) neg10001 = -pos10001 neg09999 = -pos09999 mp.prec = outprec r = round_up assert powr(pos10001, 5, r) > 1 assert powr(pos09999, 5, r) == 1 assert powr(neg10001, 5, r) < -1 assert powr(neg09999, 5, r) == -1 assert powr(pos10001, 6, r) > 1 assert powr(pos09999, 6, r) == 1 assert powr(neg10001, 6, r) > 1 assert powr(neg09999, 6, r) == 1 assert powr(pos10001, -5, r) == 1 assert powr(pos09999, -5, r) > 1 assert powr(neg10001, -5, r) == -1 assert powr(neg09999, -5, r) < -1 assert powr(pos10001, -6, r) == 1 assert powr(pos09999, -6, r) > 1 assert powr(neg10001, -6, r) == 1 assert powr(neg09999, -6, r) > 1 r = round_down assert powr(pos10001, 5, r) == 1 assert powr(pos09999, 5, r) < 1 assert powr(neg10001, 5, r) == -1 assert powr(neg09999, 5, r) > -1 assert powr(pos10001, 6, r) == 1 assert powr(pos09999, 6, r) < 1 assert powr(neg10001, 6, r) == 1 assert powr(neg09999, 6, r) < 1 assert powr(pos10001, -5, r) < 1 assert powr(pos09999, -5, r) == 1 assert powr(neg10001, -5, r) > -1 assert powr(neg09999, -5, r) == -1 assert powr(pos10001, -6, r) < 1 assert powr(pos09999, -6, r) == 1 assert powr(neg10001, -6, r) < 1 assert powr(neg09999, -6, r) == 1 r = round_ceiling assert powr(pos10001, 5, r) > 1 assert powr(pos09999, 5, r) == 1 assert powr(neg10001, 5, r) == -1 assert powr(neg09999, 5, r) > -1 assert powr(pos10001, 6, r) > 1 assert powr(pos09999, 6, r) == 1 assert powr(neg10001, 6, r) > 1 assert powr(neg09999, 6, r) == 1 assert powr(pos10001, -5, r) == 1 assert powr(pos09999, -5, r) > 1 assert powr(neg10001, -5, r) > -1 assert powr(neg09999, -5, r) == -1 assert powr(pos10001, -6, r) == 1 assert powr(pos09999, -6, r) > 1 assert powr(neg10001, -6, r) == 1 assert powr(neg09999, -6, r) > 1 r = round_floor assert powr(pos10001, 5, r) == 1 assert powr(pos09999, 5, r) < 1 assert powr(neg10001, 5, r) < -1 assert powr(neg09999, 5, r) == -1 assert powr(pos10001, 6, r) == 1 assert powr(pos09999, 6, r) < 1 assert powr(neg10001, 6, r) == 1 assert powr(neg09999, 6, r) < 1 assert powr(pos10001, -5, r) < 1 assert powr(pos09999, -5, r) == 1 assert powr(neg10001, -5, r) == -1 assert powr(neg09999, -5, r) < -1 assert powr(pos10001, -6, r) < 1 assert powr(pos09999, -6, r) == 1 assert powr(neg10001, -6, r) < 1 assert powr(neg09999, -6, r) == 1 mp.dps = 15 mpmath-1.0.0/mpmath/tests/test_quad.py000066400000000000000000000072231316273626600200110ustar00rootroot00000000000000from mpmath import * def ae(a, b): return abs(a-b) < 10**(-mp.dps+5) def test_basic_integrals(): for prec in [15, 30, 100]: mp.dps = prec assert ae(quadts(lambda x: x**3 - 3*x**2, [-2, 4]), -12) assert ae(quadgl(lambda x: x**3 - 3*x**2, [-2, 4]), -12) assert ae(quadts(sin, [0, pi]), 2) assert ae(quadts(sin, [0, 2*pi]), 0) assert ae(quadts(exp, [-inf, -1]), 1/e) assert ae(quadts(lambda x: exp(-x), [0, inf]), 1) assert ae(quadts(lambda x: exp(-x*x), [-inf, inf]), sqrt(pi)) assert ae(quadts(lambda x: 1/(1+x*x), [-1, 1]), pi/2) assert ae(quadts(lambda x: 1/(1+x*x), [-inf, inf]), pi) assert ae(quadts(lambda x: 2*sqrt(1-x*x), [-1, 1]), pi) mp.dps = 15 def test_quad_symmetry(): assert quadts(sin, [-1, 1]) == 0 assert quadgl(sin, [-1, 1]) == 0 def test_quad_infinite_mirror(): # Check mirrored infinite interval assert ae(quad(lambda x: exp(-x*x), [inf,-inf]), -sqrt(pi)) assert ae(quad(lambda x: exp(x), [0,-inf]), -1) def test_quadgl_linear(): assert quadgl(lambda x: x, [0, 1], maxdegree=1).ae(0.5) def test_complex_integration(): assert quadts(lambda x: x, [0, 1+j]).ae(j) def test_quadosc(): mp.dps = 15 assert quadosc(lambda x: sin(x)/x, [0, inf], period=2*pi).ae(pi/2) # Double integrals def test_double_trivial(): assert ae(quadts(lambda x, y: x, [0, 1], [0, 1]), 0.5) assert ae(quadts(lambda x, y: x, [-1, 1], [-1, 1]), 0.0) def test_double_1(): assert ae(quadts(lambda x, y: cos(x+y/2), [-pi/2, pi/2], [0, pi]), 4) def test_double_2(): assert ae(quadts(lambda x, y: (x-1)/((1-x*y)*log(x*y)), [0, 1], [0, 1]), euler) def test_double_3(): assert ae(quadts(lambda x, y: 1/sqrt(1+x*x+y*y), [-1, 1], [-1, 1]), 4*log(2+sqrt(3))-2*pi/3) def test_double_4(): assert ae(quadts(lambda x, y: 1/(1-x*x * y*y), [0, 1], [0, 1]), pi**2 / 8) def test_double_5(): assert ae(quadts(lambda x, y: 1/(1-x*y), [0, 1], [0, 1]), pi**2 / 6) def test_double_6(): assert ae(quadts(lambda x, y: exp(-(x+y)), [0, inf], [0, inf]), 1) # fails def xtest_double_7(): assert ae(quadts(lambda x, y: exp(-x*x-y*y), [-inf, inf], [-inf, inf]), pi) # Test integrals from "Experimentation in Mathematics" by Borwein, # Bailey & Girgensohn def test_expmath_integrals(): for prec in [15, 30, 50]: mp.dps = prec assert ae(quadts(lambda x: x/sinh(x), [0, inf]), pi**2 / 4) assert ae(quadts(lambda x: log(x)**2 / (1+x**2), [0, inf]), pi**3 / 8) assert ae(quadts(lambda x: (1+x**2)/(1+x**4), [0, inf]), pi/sqrt(2)) assert ae(quadts(lambda x: log(x)/cosh(x)**2, [0, inf]), log(pi)-2*log(2)-euler) assert ae(quadts(lambda x: log(1+x**3)/(1-x+x**2), [0, inf]), 2*pi*log(3)/sqrt(3)) assert ae(quadts(lambda x: log(x)**2 / (x**2+x+1), [0, 1]), 8*pi**3 / (81*sqrt(3))) assert ae(quadts(lambda x: log(cos(x))**2, [0, pi/2]), pi/2 * (log(2)**2+pi**2/12)) assert ae(quadts(lambda x: x**2 / sin(x)**2, [0, pi/2]), pi*log(2)) assert ae(quadts(lambda x: x**2/sqrt(exp(x)-1), [0, inf]), 4*pi*(log(2)**2 + pi**2/12)) assert ae(quadts(lambda x: x*exp(-x)*sqrt(1-exp(-2*x)), [0, inf]), pi*(1+2*log(2))/8) mp.dps = 15 # Do not reach full accuracy def xtest_expmath_fail(): assert ae(quadts(lambda x: sqrt(tan(x)), [0, pi/2]), pi*sqrt(2)/2) assert ae(quadts(lambda x: atan(x)/(x*sqrt(1-x**2)), [0, 1]), pi*log(1+sqrt(2))/2) assert ae(quadts(lambda x: log(1+x**2)/x**2, [0, 1]), pi/2-log(2)) assert ae(quadts(lambda x: x**2/((1+x**4)*sqrt(1-x**4)), [0, 1]), pi/8) mpmath-1.0.0/mpmath/tests/test_rootfinding.py000066400000000000000000000054171316273626600214040ustar00rootroot00000000000000from mpmath import * from mpmath.calculus.optimization import Secant, Muller, Bisection, Illinois, \ Pegasus, Anderson, Ridder, ANewton, Newton, MNewton, MDNewton def test_findroot(): # old tests, assuming secant mp.dps = 15 assert findroot(lambda x: 4*x-3, mpf(5)).ae(0.75) assert findroot(sin, mpf(3)).ae(pi) assert findroot(sin, (mpf(3), mpf(3.14))).ae(pi) assert findroot(lambda x: x*x+1, mpc(2+2j)).ae(1j) # test all solvers with 1 starting point f = lambda x: cos(x) for solver in [Newton, Secant, MNewton, Muller, ANewton]: x = findroot(f, 2., solver=solver) assert abs(f(x)) < eps # test all solvers with interval of 2 points for solver in [Secant, Muller, Bisection, Illinois, Pegasus, Anderson, Ridder]: x = findroot(f, (1., 2.), solver=solver) assert abs(f(x)) < eps # test types f = lambda x: (x - 2)**2 #assert isinstance(findroot(f, 1, force_type=mpf, tol=1e-10), mpf) #assert isinstance(findroot(f, 1., force_type=None, tol=1e-10), float) #assert isinstance(findroot(f, 1, force_type=complex, tol=1e-10), complex) assert isinstance(fp.findroot(f, 1, tol=1e-10), float) assert isinstance(fp.findroot(f, 1+0j, tol=1e-10), complex) def test_bisection(): # issue 273 assert findroot(lambda x: x**2-1,(0,2),solver='bisect') == 1 def test_mnewton(): f = lambda x: polyval([1,3,3,1],x) x = findroot(f, -0.9, solver='mnewton') assert abs(f(x)) < eps def test_anewton(): f = lambda x: (x - 2)**100 x = findroot(f, 1., solver=ANewton) assert abs(f(x)) < eps def test_muller(): f = lambda x: (2 + x)**3 + 2 x = findroot(f, 1., solver=Muller) assert abs(f(x)) < eps def test_multiplicity(): for i in range(1, 5): assert multiplicity(lambda x: (x - 1)**i, 1) == i assert multiplicity(lambda x: x**2, 1) == 0 def test_multidimensional(): def f(*x): return [3*x[0]**2-2*x[1]**2-1, x[0]**2-2*x[0]+x[1]**2+2*x[1]-8] assert mnorm(jacobian(f, (1,-2)) - matrix([[6,8],[0,-2]]),1) < 1.e-7 for x, error in MDNewton(mp, f, (1,-2), verbose=0, norm=lambda x: norm(x, inf)): pass assert norm(f(*x), 2) < 1e-14 # The Chinese mathematician Zhu Shijie was the very first to solve this # nonlinear system 700 years ago f1 = lambda x, y: -x + 2*y f2 = lambda x, y: (x**2 + x*(y**2 - 2) - 4*y) / (x + 4) f3 = lambda x, y: sqrt(x**2 + y**2) def f(x, y): f1x = f1(x, y) return (f2(x, y) - f1x, f3(x, y) - f1x) x = findroot(f, (10, 10)) assert [int(round(i)) for i in x] == [3, 4] def test_trivial(): assert findroot(lambda x: 0, 1) == 1 assert findroot(lambda x: x, 0) == 0 #assert findroot(lambda x, y: x + y, (1, -1)) == (1, -1) mpmath-1.0.0/mpmath/tests/test_special.py000066400000000000000000000054401316273626600204760ustar00rootroot00000000000000from mpmath import * def test_special(): assert inf == inf assert inf != -inf assert -inf == -inf assert inf != nan assert nan != nan assert isnan(nan) assert --inf == inf assert abs(inf) == inf assert abs(-inf) == inf assert abs(nan) != abs(nan) assert isnan(inf - inf) assert isnan(inf + (-inf)) assert isnan(-inf - (-inf)) assert isnan(inf + nan) assert isnan(-inf + nan) assert mpf(2) + inf == inf assert 2 + inf == inf assert mpf(2) - inf == -inf assert 2 - inf == -inf assert inf > 3 assert 3 < inf assert 3 > -inf assert -inf < 3 assert inf > mpf(3) assert mpf(3) < inf assert mpf(3) > -inf assert -inf < mpf(3) assert not (nan < 3) assert not (nan > 3) assert isnan(inf * 0) assert isnan(-inf * 0) assert inf * 3 == inf assert inf * -3 == -inf assert -inf * 3 == -inf assert -inf * -3 == inf assert inf * inf == inf assert -inf * -inf == inf assert isnan(nan / 3) assert inf / -3 == -inf assert inf / 3 == inf assert 3 / inf == 0 assert -3 / inf == 0 assert 0 / inf == 0 assert isnan(inf / inf) assert isnan(inf / -inf) assert isnan(inf / nan) assert mpf('inf') == mpf('+inf') == inf assert mpf('-inf') == -inf assert isnan(mpf('nan')) assert isinf(inf) assert isinf(-inf) assert not isinf(mpf(0)) assert not isinf(nan) def test_special_powers(): assert inf**3 == inf assert isnan(inf**0) assert inf**-3 == 0 assert (-inf)**2 == inf assert (-inf)**3 == -inf assert isnan((-inf)**0) assert (-inf)**-2 == 0 assert (-inf)**-3 == 0 assert isnan(nan**5) assert isnan(nan**0) def test_functions_special(): assert exp(inf) == inf assert exp(-inf) == 0 assert isnan(exp(nan)) assert log(inf) == inf assert isnan(log(nan)) assert isnan(sin(inf)) assert isnan(sin(nan)) assert atan(inf).ae(pi/2) assert atan(-inf).ae(-pi/2) assert isnan(sqrt(nan)) assert sqrt(inf) == inf def test_convert_special(): float_inf = 1e300 * 1e300 float_ninf = -float_inf float_nan = float_inf/float_ninf assert mpf(3) * float_inf == inf assert mpf(3) * float_ninf == -inf assert isnan(mpf(3) * float_nan) assert not (mpf(3) < float_nan) assert not (mpf(3) > float_nan) assert not (mpf(3) <= float_nan) assert not (mpf(3) >= float_nan) assert float(mpf('1e1000')) == float_inf assert float(mpf('-1e1000')) == float_ninf assert float(mpf('1e100000000000000000')) == float_inf assert float(mpf('-1e100000000000000000')) == float_ninf assert float(mpf('1e-100000000000000000')) == 0.0 def test_div_bug(): assert isnan(nan/1) assert isnan(nan/2) assert inf/2 == inf assert (-inf)/2 == -inf mpmath-1.0.0/mpmath/tests/test_str.py000066400000000000000000000010401316273626600176560ustar00rootroot00000000000000from mpmath import nstr, matrix, inf def test_nstr(): m = matrix([[0.75, 0.190940654, -0.0299195971], [0.190940654, 0.65625, 0.205663228], [-0.0299195971, 0.205663228, 0.64453125e-20]]) assert nstr(m, 4, min_fixed=-inf) == \ '''[ 0.75 0.1909 -0.02992] [ 0.1909 0.6563 0.2057] [-0.02992 0.2057 0.000000000000000000006445]''' assert nstr(m, 4) == \ '''[ 0.75 0.1909 -0.02992] [ 0.1909 0.6563 0.2057] [-0.02992 0.2057 6.445e-21]''' mpmath-1.0.0/mpmath/tests/test_summation.py000066400000000000000000000035031316273626600210700ustar00rootroot00000000000000from mpmath import * def test_sumem(): mp.dps = 15 assert sumem(lambda k: 1/k**2.5, [50, 100]).ae(0.0012524505324784962) assert sumem(lambda k: k**4 + 3*k + 1, [10, 100]).ae(2050333103) def test_nsum(): mp.dps = 15 assert nsum(lambda x: x**2, [1, 3]) == 14 assert nsum(lambda k: 1/factorial(k), [0, inf]).ae(e) assert nsum(lambda k: (-1)**(k+1) / k, [1, inf]).ae(log(2)) assert nsum(lambda k: (-1)**(k+1) / k**2, [1, inf]).ae(pi**2 / 12) assert nsum(lambda k: (-1)**k / log(k), [2, inf]).ae(0.9242998972229388) assert nsum(lambda k: 1/k**2, [1, inf]).ae(pi**2 / 6) assert nsum(lambda k: 2**k/fac(k), [0, inf]).ae(exp(2)) assert nsum(lambda k: 1/k**2, [4, inf], method='e').ae(0.2838229557371153) def test_nprod(): mp.dps = 15 assert nprod(lambda k: exp(1/k**2), [1,inf], method='r').ae(exp(pi**2/6)) assert nprod(lambda x: x**2, [1, 3]) == 36 def test_fsum(): mp.dps = 15 assert fsum([]) == 0 assert fsum([-4]) == -4 assert fsum([2,3]) == 5 assert fsum([1e-100,1]) == 1 assert fsum([1,1e-100]) == 1 assert fsum([1e100,1]) == 1e100 assert fsum([1,1e100]) == 1e100 assert fsum([1e-100,0]) == 1e-100 assert fsum([1e-100,1e100,1e-100]) == 1e100 assert fsum([2,1+1j,1]) == 4+1j assert fsum([2,inf,3]) == inf assert fsum([2,-1], absolute=1) == 3 assert fsum([2,-1], squared=1) == 5 assert fsum([1,1+j], squared=1) == 1+2j assert fsum([1,3+4j], absolute=1) == 6 assert fsum([1,2+3j], absolute=1, squared=1) == 14 assert isnan(fsum([inf,-inf])) assert fsum([inf,-inf], absolute=1) == inf assert fsum([inf,-inf], squared=1) == inf assert fsum([inf,-inf], absolute=1, squared=1) == inf assert iv.fsum([1,mpi(2,3)]) == mpi(3,4) def test_fprod(): mp.dps = 15 assert fprod([]) == 1 assert fprod([2,3]) == 6 mpmath-1.0.0/mpmath/tests/test_trig.py000066400000000000000000000115141316273626600200220ustar00rootroot00000000000000from mpmath import * from mpmath.libmp import * def test_trig_misc_hard(): mp.prec = 53 # Worst-case input for an IEEE double, from a paper by Kahan x = ldexp(6381956970095103,797) assert cos(x) == mpf('-4.6871659242546277e-19') assert sin(x) == 1 mp.prec = 150 a = mpf(10**50) mp.prec = 53 assert sin(a).ae(-0.7896724934293100827) assert cos(a).ae(-0.6135286082336635622) # Check relative accuracy close to x = zero assert sin(1e-100) == 1e-100 # when rounding to nearest assert sin(1e-6).ae(9.999999999998333e-007, rel_eps=2e-15, abs_eps=0) assert sin(1e-6j).ae(1.0000000000001666e-006j, rel_eps=2e-15, abs_eps=0) assert sin(-1e-6j).ae(-1.0000000000001666e-006j, rel_eps=2e-15, abs_eps=0) assert cos(1e-100) == 1 assert cos(1e-6).ae(0.9999999999995) assert cos(-1e-6j).ae(1.0000000000005) assert tan(1e-100) == 1e-100 assert tan(1e-6).ae(1.0000000000003335e-006, rel_eps=2e-15, abs_eps=0) assert tan(1e-6j).ae(9.9999999999966644e-007j, rel_eps=2e-15, abs_eps=0) assert tan(-1e-6j).ae(-9.9999999999966644e-007j, rel_eps=2e-15, abs_eps=0) def test_trig_near_zero(): mp.dps = 15 for r in [round_nearest, round_down, round_up, round_floor, round_ceiling]: assert sin(0, rounding=r) == 0 assert cos(0, rounding=r) == 1 a = mpf('1e-100') b = mpf('-1e-100') assert sin(a, rounding=round_nearest) == a assert sin(a, rounding=round_down) < a assert sin(a, rounding=round_floor) < a assert sin(a, rounding=round_up) >= a assert sin(a, rounding=round_ceiling) >= a assert sin(b, rounding=round_nearest) == b assert sin(b, rounding=round_down) > b assert sin(b, rounding=round_floor) <= b assert sin(b, rounding=round_up) <= b assert sin(b, rounding=round_ceiling) > b assert cos(a, rounding=round_nearest) == 1 assert cos(a, rounding=round_down) < 1 assert cos(a, rounding=round_floor) < 1 assert cos(a, rounding=round_up) == 1 assert cos(a, rounding=round_ceiling) == 1 assert cos(b, rounding=round_nearest) == 1 assert cos(b, rounding=round_down) < 1 assert cos(b, rounding=round_floor) < 1 assert cos(b, rounding=round_up) == 1 assert cos(b, rounding=round_ceiling) == 1 def test_trig_near_n_pi(): mp.dps = 15 a = [n*pi for n in [1, 2, 6, 11, 100, 1001, 10000, 100001]] mp.dps = 135 a.append(10**100 * pi) mp.dps = 15 assert sin(a[0]) == mpf('1.2246467991473531772e-16') assert sin(a[1]) == mpf('-2.4492935982947063545e-16') assert sin(a[2]) == mpf('-7.3478807948841190634e-16') assert sin(a[3]) == mpf('4.8998251578625894243e-15') assert sin(a[4]) == mpf('1.9643867237284719452e-15') assert sin(a[5]) == mpf('-8.8632615209684813458e-15') assert sin(a[6]) == mpf('-4.8568235395684898392e-13') assert sin(a[7]) == mpf('3.9087342299491231029e-11') assert sin(a[8]) == mpf('-1.369235466754566993528e-36') r = round_nearest assert cos(a[0], rounding=r) == -1 assert cos(a[1], rounding=r) == 1 assert cos(a[2], rounding=r) == 1 assert cos(a[3], rounding=r) == -1 assert cos(a[4], rounding=r) == 1 assert cos(a[5], rounding=r) == -1 assert cos(a[6], rounding=r) == 1 assert cos(a[7], rounding=r) == -1 assert cos(a[8], rounding=r) == 1 r = round_up assert cos(a[0], rounding=r) == -1 assert cos(a[1], rounding=r) == 1 assert cos(a[2], rounding=r) == 1 assert cos(a[3], rounding=r) == -1 assert cos(a[4], rounding=r) == 1 assert cos(a[5], rounding=r) == -1 assert cos(a[6], rounding=r) == 1 assert cos(a[7], rounding=r) == -1 assert cos(a[8], rounding=r) == 1 r = round_down assert cos(a[0], rounding=r) > -1 assert cos(a[1], rounding=r) < 1 assert cos(a[2], rounding=r) < 1 assert cos(a[3], rounding=r) > -1 assert cos(a[4], rounding=r) < 1 assert cos(a[5], rounding=r) > -1 assert cos(a[6], rounding=r) < 1 assert cos(a[7], rounding=r) > -1 assert cos(a[8], rounding=r) < 1 r = round_floor assert cos(a[0], rounding=r) == -1 assert cos(a[1], rounding=r) < 1 assert cos(a[2], rounding=r) < 1 assert cos(a[3], rounding=r) == -1 assert cos(a[4], rounding=r) < 1 assert cos(a[5], rounding=r) == -1 assert cos(a[6], rounding=r) < 1 assert cos(a[7], rounding=r) == -1 assert cos(a[8], rounding=r) < 1 r = round_ceiling assert cos(a[0], rounding=r) > -1 assert cos(a[1], rounding=r) == 1 assert cos(a[2], rounding=r) == 1 assert cos(a[3], rounding=r) > -1 assert cos(a[4], rounding=r) == 1 assert cos(a[5], rounding=r) > -1 assert cos(a[6], rounding=r) == 1 assert cos(a[7], rounding=r) > -1 assert cos(a[8], rounding=r) == 1 mp.dps = 15 if __name__ == '__main__': for f in globals().keys(): if f.startswith("test_"): print(f) globals()[f]() mpmath-1.0.0/mpmath/tests/test_visualization.py000066400000000000000000000016601316273626600217570ustar00rootroot00000000000000""" Limited tests of the visualization module. Right now it just makes sure that passing custom Axes works. """ from mpmath import mp, fp def test_axes(): try: import matplotlib version = matplotlib.__version__.split("-")[0] version = version.split(".")[:2] if [int(_) for _ in version] < [0,99]: raise ImportError import pylab except ImportError: print("\nSkipping test (pylab not available or too old version)\n") return fig = pylab.figure() axes = fig.add_subplot(111) for ctx in [mp, fp]: ctx.plot(lambda x: x**2, [0, 3], axes=axes) assert axes.get_xlabel() == 'x' assert axes.get_ylabel() == 'f(x)' fig = pylab.figure() axes = fig.add_subplot(111) for ctx in [mp, fp]: ctx.cplot(lambda z: z, [-2, 2], [-10, 10], axes=axes) assert axes.get_xlabel() == 'Re(z)' assert axes.get_ylabel() == 'Im(z)' mpmath-1.0.0/mpmath/tests/torture.py000066400000000000000000000174401316273626600175260ustar00rootroot00000000000000""" Torture tests for asymptotics and high precision evaluation of special functions. (Other torture tests may also be placed here.) Running this file (gmpy and psyco recommended!) takes several CPU minutes. With Python 2.6+, multiprocessing is used automatically to run tests in parallel if many cores are available. (A single test may take between a second and several minutes; possibly more.) The idea: * We evaluate functions at positive, negative, imaginary, 45- and 135-degree complex values with magnitudes between 10^-20 to 10^20, at precisions between 5 and 150 digits (we can go even higher for fast functions). * Comparing the result from two different precision levels provides a strong consistency check (particularly for functions that use different algorithms at different precision levels). * That the computation finishes at all (without failure), within reasonable time, provides a check that evaluation works at all: that the code runs, that it doesn't get stuck in an infinite loop, and that it doesn't use some extremely slowly algorithm where it could use a faster one. TODO: * Speed up those functions that take long to finish! * Generalize to test more cases; more options. * Implement a timeout mechanism. * Some functions are notably absent, including the following: * inverse trigonometric functions (some become inaccurate for complex arguments) * ci, si (not implemented properly for large complex arguments) * zeta functions (need to modify test not to try too large imaginary values) * and others... """ import sys, os from timeit import default_timer as clock if "-psyco" in sys.argv: sys.argv.remove('-psyco') import psyco psyco.full() if "-nogmpy" in sys.argv: sys.argv.remove('-nogmpy') os.environ['MPMATH_NOGMPY'] = 'Y' filt = '' if not sys.argv[-1].endswith(".py"): filt = sys.argv[-1] from mpmath import * from mpmath.libmp.backend import exec_ def test_asymp(f, maxdps=150, verbose=False, huge_range=False): dps = [5,15,25,50,90,150,500,1500,5000,10000] dps = [p for p in dps if p <= maxdps] def check(x,y,p,inpt): if abs(x-y)/abs(y) < workprec(20)(power)(10, -p+1): return print() print("Error!") print("Input:", inpt) print("dps =", p) print("Result 1:", x) print("Result 2:", y) print("Absolute error:", abs(x-y)) print("Relative error:", abs(x-y)/abs(y)) raise AssertionError exponents = range(-20,20) if huge_range: exponents += [-1000, -100, -50, 50, 100, 1000] for n in exponents: if verbose: sys.stdout.write(". ") mp.dps = 25 xpos = mpf(10)**n / 1.1287 xneg = -xpos ximag = xpos*j xcomplex1 = xpos*(1+j) xcomplex2 = xpos*(-1+j) for i in range(len(dps)): if verbose: print("Testing dps = %s" % dps[i]) mp.dps = dps[i] new = f(xpos), f(xneg), f(ximag), f(xcomplex1), f(xcomplex2) if i != 0: p = dps[i-1] check(prev[0], new[0], p, xpos) check(prev[1], new[1], p, xneg) check(prev[2], new[2], p, ximag) check(prev[3], new[3], p, xcomplex1) check(prev[4], new[4], p, xcomplex2) prev = new if verbose: print() a1, a2, a3, a4, a5 = 1.5, -2.25, 3.125, 4, 2 def test_bernoulli_huge(): p, q = bernfrac(9000) assert p % 10**10 == 9636701091 assert q == 4091851784687571609141381951327092757255270 mp.dps = 15 assert str(bernoulli(10**100)) == '-2.58183325604736e+987675256497386331227838638980680030172857347883537824464410652557820800494271520411283004120790908623' mp.dps = 50 assert str(bernoulli(10**100)) == '-2.5818332560473632073252488656039475548106223822913e+987675256497386331227838638980680030172857347883537824464410652557820800494271520411283004120790908623' mp.dps = 15 cases = """\ test_bernoulli_huge() test_asymp(lambda z: +pi, maxdps=10000) test_asymp(lambda z: +e, maxdps=10000) test_asymp(lambda z: +ln2, maxdps=10000) test_asymp(lambda z: +ln10, maxdps=10000) test_asymp(lambda z: +phi, maxdps=10000) test_asymp(lambda z: +catalan, maxdps=5000) test_asymp(lambda z: +euler, maxdps=5000) test_asymp(lambda z: +glaisher, maxdps=1000) test_asymp(lambda z: +khinchin, maxdps=1000) test_asymp(lambda z: +twinprime, maxdps=150) test_asymp(lambda z: stieltjes(2), maxdps=150) test_asymp(lambda z: +mertens, maxdps=150) test_asymp(lambda z: +apery, maxdps=5000) test_asymp(sqrt, maxdps=10000, huge_range=True) test_asymp(cbrt, maxdps=5000, huge_range=True) test_asymp(lambda z: root(z,4), maxdps=5000, huge_range=True) test_asymp(lambda z: root(z,-5), maxdps=5000, huge_range=True) test_asymp(exp, maxdps=5000, huge_range=True) test_asymp(expm1, maxdps=1500) test_asymp(ln, maxdps=5000, huge_range=True) test_asymp(cosh, maxdps=5000) test_asymp(sinh, maxdps=5000) test_asymp(tanh, maxdps=1500) test_asymp(sin, maxdps=5000, huge_range=True) test_asymp(cos, maxdps=5000, huge_range=True) test_asymp(tan, maxdps=1500) test_asymp(agm, maxdps=1500, huge_range=True) test_asymp(ellipk, maxdps=1500) test_asymp(ellipe, maxdps=1500) test_asymp(lambertw, huge_range=True) test_asymp(lambda z: lambertw(z,-1)) test_asymp(lambda z: lambertw(z,1)) test_asymp(lambda z: lambertw(z,4)) test_asymp(gamma) test_asymp(loggamma) # huge_range=True ? test_asymp(ei) test_asymp(e1) test_asymp(li, huge_range=True) test_asymp(ci) test_asymp(si) test_asymp(chi) test_asymp(shi) test_asymp(erf) test_asymp(erfc) test_asymp(erfi) test_asymp(lambda z: besselj(2, z)) test_asymp(lambda z: bessely(2, z)) test_asymp(lambda z: besseli(2, z)) test_asymp(lambda z: besselk(2, z)) test_asymp(lambda z: besselj(-2.25, z)) test_asymp(lambda z: bessely(-2.25, z)) test_asymp(lambda z: besseli(-2.25, z)) test_asymp(lambda z: besselk(-2.25, z)) test_asymp(airyai) test_asymp(airybi) test_asymp(lambda z: hyp0f1(a1, z)) test_asymp(lambda z: hyp1f1(a1, a2, z)) test_asymp(lambda z: hyp1f2(a1, a2, a3, z)) test_asymp(lambda z: hyp2f0(a1, a2, z)) test_asymp(lambda z: hyperu(a1, a2, z)) test_asymp(lambda z: hyp2f1(a1, a2, a3, z)) test_asymp(lambda z: hyp2f2(a1, a2, a3, a4, z)) test_asymp(lambda z: hyp2f3(a1, a2, a3, a4, a5, z)) test_asymp(lambda z: coulombf(a1, a2, z)) test_asymp(lambda z: coulombg(a1, a2, z)) test_asymp(lambda z: polylog(2,z)) test_asymp(lambda z: polylog(3,z)) test_asymp(lambda z: polylog(-2,z)) test_asymp(lambda z: expint(4, z)) test_asymp(lambda z: expint(-4, z)) test_asymp(lambda z: expint(2.25, z)) test_asymp(lambda z: gammainc(2.5, z, 5)) test_asymp(lambda z: gammainc(2.5, 5, z)) test_asymp(lambda z: hermite(3, z)) test_asymp(lambda z: hermite(2.5, z)) test_asymp(lambda z: legendre(3, z)) test_asymp(lambda z: legendre(4, z)) test_asymp(lambda z: legendre(2.5, z)) test_asymp(lambda z: legenp(a1, a2, z)) test_asymp(lambda z: legenq(a1, a2, z), maxdps=90) # abnormally slow test_asymp(lambda z: jtheta(1, z, 0.5)) test_asymp(lambda z: jtheta(2, z, 0.5)) test_asymp(lambda z: jtheta(3, z, 0.5)) test_asymp(lambda z: jtheta(4, z, 0.5)) test_asymp(lambda z: jtheta(1, z, 0.5, 1)) test_asymp(lambda z: jtheta(2, z, 0.5, 1)) test_asymp(lambda z: jtheta(3, z, 0.5, 1)) test_asymp(lambda z: jtheta(4, z, 0.5, 1)) test_asymp(barnesg, maxdps=90) """ def testit(line): if filt in line: print(line) t1 = clock() exec_(line, globals(), locals()) t2 = clock() elapsed = t2-t1 print("Time:", elapsed, "for", line, "(OK)") if __name__ == '__main__': try: from multiprocessing import Pool mapf = Pool(None).map print("Running tests with multiprocessing") except ImportError: print("Not using multiprocessing") mapf = map t1 = clock() tasks = cases.splitlines() mapf(testit, tasks) t2 = clock() print("Cumulative wall time:", t2-t1) mpmath-1.0.0/mpmath/usertools.py000066400000000000000000000057251316273626600167220ustar00rootroot00000000000000 def monitor(f, input='print', output='print'): """ Returns a wrapped copy of *f* that monitors evaluation by calling *input* with every input (*args*, *kwargs*) passed to *f* and *output* with every value returned from *f*. The default action (specify using the special string value ``'print'``) is to print inputs and outputs to stdout, along with the total evaluation count:: >>> from mpmath import * >>> mp.dps = 5; mp.pretty = False >>> diff(monitor(exp), 1) # diff will eval f(x-h) and f(x+h) in 0 (mpf('0.99999999906867742538452148'),) {} out 0 mpf('2.7182818259274480055282064') in 1 (mpf('1.0000000009313225746154785'),) {} out 1 mpf('2.7182818309906424675501024') mpf('2.7182808') To disable either the input or the output handler, you may pass *None* as argument. Custom input and output handlers may be used e.g. to store results for later analysis:: >>> mp.dps = 15 >>> input = [] >>> output = [] >>> findroot(monitor(sin, input.append, output.append), 3.0) mpf('3.1415926535897932') >>> len(input) # Count number of evaluations 9 >>> print(input[3]); print(output[3]) ((mpf('3.1415076583334066'),), {}) 8.49952562843408e-5 >>> print(input[4]); print(output[4]) ((mpf('3.1415928201669122'),), {}) -1.66577118985331e-7 """ if not input: input = lambda v: None elif input == 'print': incount = [0] def input(value): args, kwargs = value print("in %s %r %r" % (incount[0], args, kwargs)) incount[0] += 1 if not output: output = lambda v: None elif output == 'print': outcount = [0] def output(value): print("out %s %r" % (outcount[0], value)) outcount[0] += 1 def f_monitored(*args, **kwargs): input((args, kwargs)) v = f(*args, **kwargs) output(v) return v return f_monitored def timing(f, *args, **kwargs): """ Returns time elapsed for evaluating ``f()``. Optionally arguments may be passed to time the execution of ``f(*args, **kwargs)``. If the first call is very quick, ``f`` is called repeatedly and the best time is returned. """ once = kwargs.get('once') if 'once' in kwargs: del kwargs['once'] if args or kwargs: if len(args) == 1 and not kwargs: arg = args[0] g = lambda: f(arg) else: g = lambda: f(*args, **kwargs) else: g = f from timeit import default_timer as clock t1=clock(); v=g(); t2=clock(); t=t2-t1 if t > 0.05 or once: return t for i in range(3): t1=clock(); # Evaluate multiple times because the timer function # has a significant overhead g();g();g();g();g();g();g();g();g();g() t2=clock() t=min(t,(t2-t1)/10) return t mpmath-1.0.0/mpmath/visualization.py000066400000000000000000000246031316273626600175600ustar00rootroot00000000000000""" Plotting (requires matplotlib) """ from colorsys import hsv_to_rgb, hls_to_rgb from .libmp import NoConvergence from .libmp.backend import xrange class VisualizationMethods(object): plot_ignore = (ValueError, ArithmeticError, ZeroDivisionError, NoConvergence) def plot(ctx, f, xlim=[-5,5], ylim=None, points=200, file=None, dpi=None, singularities=[], axes=None): r""" Shows a simple 2D plot of a function `f(x)` or list of functions `[f_0(x), f_1(x), \ldots, f_n(x)]` over a given interval specified by *xlim*. Some examples:: plot(lambda x: exp(x)*li(x), [1, 4]) plot([cos, sin], [-4, 4]) plot([fresnels, fresnelc], [-4, 4]) plot([sqrt, cbrt], [-4, 4]) plot(lambda t: zeta(0.5+t*j), [-20, 20]) plot([floor, ceil, abs, sign], [-5, 5]) Points where the function raises a numerical exception or returns an infinite value are removed from the graph. Singularities can also be excluded explicitly as follows (useful for removing erroneous vertical lines):: plot(cot, ylim=[-5, 5]) # bad plot(cot, ylim=[-5, 5], singularities=[-pi, 0, pi]) # good For parts where the function assumes complex values, the real part is plotted with dashes and the imaginary part is plotted with dots. .. note :: This function requires matplotlib (pylab). """ if file: axes = None fig = None if not axes: import pylab fig = pylab.figure() axes = fig.add_subplot(111) if not isinstance(f, (tuple, list)): f = [f] a, b = xlim colors = ['b', 'r', 'g', 'm', 'k'] for n, func in enumerate(f): x = ctx.arange(a, b, (b-a)/float(points)) segments = [] segment = [] in_complex = False for i in xrange(len(x)): try: if i != 0: for sing in singularities: if x[i-1] <= sing and x[i] >= sing: raise ValueError v = func(x[i]) if ctx.isnan(v) or abs(v) > 1e300: raise ValueError if hasattr(v, "imag") and v.imag: re = float(v.real) im = float(v.imag) if not in_complex: in_complex = True segments.append(segment) segment = [] segment.append((float(x[i]), re, im)) else: if in_complex: in_complex = False segments.append(segment) segment = [] if hasattr(v, "real"): v = v.real segment.append((float(x[i]), v)) except ctx.plot_ignore: if segment: segments.append(segment) segment = [] if segment: segments.append(segment) for segment in segments: x = [s[0] for s in segment] y = [s[1] for s in segment] if not x: continue c = colors[n % len(colors)] if len(segment[0]) == 3: z = [s[2] for s in segment] axes.plot(x, y, '--'+c, linewidth=3) axes.plot(x, z, ':'+c, linewidth=3) else: axes.plot(x, y, c, linewidth=3) axes.set_xlim([float(_) for _ in xlim]) if ylim: axes.set_ylim([float(_) for _ in ylim]) axes.set_xlabel('x') axes.set_ylabel('f(x)') axes.grid(True) if fig: if file: pylab.savefig(file, dpi=dpi) else: pylab.show() def default_color_function(ctx, z): if ctx.isinf(z): return (1.0, 1.0, 1.0) if ctx.isnan(z): return (0.5, 0.5, 0.5) pi = 3.1415926535898 a = (float(ctx.arg(z)) + ctx.pi) / (2*ctx.pi) a = (a + 0.5) % 1.0 b = 1.0 - float(1/(1.0+abs(z)**0.3)) return hls_to_rgb(a, b, 0.8) blue_orange_colors = [ (-1.0, (0.0, 0.0, 0.0)), (-0.95, (0.1, 0.2, 0.5)), # dark blue (-0.5, (0.0, 0.5, 1.0)), # blueish (-0.05, (0.4, 0.8, 0.8)), # cyanish ( 0.0, (1.0, 1.0, 1.0)), ( 0.05, (1.0, 0.9, 0.3)), # yellowish ( 0.5, (0.9, 0.5, 0.0)), # orangeish ( 0.95, (0.7, 0.1, 0.0)), # redish ( 1.0, (0.0, 0.0, 0.0)), ( 2.0, (0.0, 0.0, 0.0)), ] def phase_color_function(ctx, z): if ctx.isinf(z): return (1.0, 1.0, 1.0) if ctx.isnan(z): return (0.5, 0.5, 0.5) pi = 3.1415926535898 w = float(ctx.arg(z)) / pi w = max(min(w, 1.0), -1.0) for i in range(1,len(blue_orange_colors)): if blue_orange_colors[i][0] > w: a, (ra, ga, ba) = blue_orange_colors[i-1] b, (rb, gb, bb) = blue_orange_colors[i] s = (w-a) / (b-a) return ra+(rb-ra)*s, ga+(gb-ga)*s, ba+(bb-ba)*s def cplot(ctx, f, re=[-5,5], im=[-5,5], points=2000, color=None, verbose=False, file=None, dpi=None, axes=None): """ Plots the given complex-valued function *f* over a rectangular part of the complex plane specified by the pairs of intervals *re* and *im*. For example:: cplot(lambda z: z, [-2, 2], [-10, 10]) cplot(exp) cplot(zeta, [0, 1], [0, 50]) By default, the complex argument (phase) is shown as color (hue) and the magnitude is show as brightness. You can also supply a custom color function (*color*). This function should take a complex number as input and return an RGB 3-tuple containing floats in the range 0.0-1.0. Alternatively, you can select a builtin color function by passing a string as *color*: * "default" - default color scheme * "phase" - a color scheme that only renders the phase of the function, with white for positive reals, black for negative reals, gold in the upper half plane, and blue in the lower half plane. To obtain a sharp image, the number of points may need to be increased to 100,000 or thereabout. Since evaluating the function that many times is likely to be slow, the 'verbose' option is useful to display progress. .. note :: This function requires matplotlib (pylab). """ if color is None or color == "default": color = ctx.default_color_function if color == "phase": color = ctx.phase_color_function import pylab if file: axes = None fig = None if not axes: fig = pylab.figure() axes = fig.add_subplot(111) rea, reb = re ima, imb = im dre = reb - rea dim = imb - ima M = int(ctx.sqrt(points*dre/dim)+1) N = int(ctx.sqrt(points*dim/dre)+1) x = pylab.linspace(rea, reb, M) y = pylab.linspace(ima, imb, N) # Note: we have to be careful to get the right rotation. # Test with these plots: # cplot(lambda z: z if z.real < 0 else 0) # cplot(lambda z: z if z.imag < 0 else 0) w = pylab.zeros((N, M, 3)) for n in xrange(N): for m in xrange(M): z = ctx.mpc(x[m], y[n]) try: v = color(f(z)) except ctx.plot_ignore: v = (0.5, 0.5, 0.5) w[n,m] = v if verbose: print(str(n) + ' of ' + str(N)) rea, reb, ima, imb = [float(_) for _ in [rea, reb, ima, imb]] axes.imshow(w, extent=(rea, reb, ima, imb), origin='lower') axes.set_xlabel('Re(z)') axes.set_ylabel('Im(z)') if fig: if file: pylab.savefig(file, dpi=dpi) else: pylab.show() def splot(ctx, f, u=[-5,5], v=[-5,5], points=100, keep_aspect=True, \ wireframe=False, file=None, dpi=None, axes=None): """ Plots the surface defined by `f`. If `f` returns a single component, then this plots the surface defined by `z = f(x,y)` over the rectangular domain with `x = u` and `y = v`. If `f` returns three components, then this plots the parametric surface `x, y, z = f(u,v)` over the pairs of intervals `u` and `v`. For example, to plot a simple function:: >>> from mpmath import * >>> f = lambda x, y: sin(x+y)*cos(y) >>> splot(f, [-pi,pi], [-pi,pi]) # doctest: +SKIP Plotting a donut:: >>> r, R = 1, 2.5 >>> f = lambda u, v: [r*cos(u), (R+r*sin(u))*cos(v), (R+r*sin(u))*sin(v)] >>> splot(f, [0, 2*pi], [0, 2*pi]) # doctest: +SKIP .. note :: This function requires matplotlib (pylab) 0.98.5.3 or higher. """ import pylab import mpl_toolkits.mplot3d as mplot3d if file: axes = None fig = None if not axes: fig = pylab.figure() axes = mplot3d.axes3d.Axes3D(fig) ua, ub = u va, vb = v du = ub - ua dv = vb - va if not isinstance(points, (list, tuple)): points = [points, points] M, N = points u = pylab.linspace(ua, ub, M) v = pylab.linspace(va, vb, N) x, y, z = [pylab.zeros((M, N)) for i in xrange(3)] xab, yab, zab = [[0, 0] for i in xrange(3)] for n in xrange(N): for m in xrange(M): fdata = f(ctx.convert(u[m]), ctx.convert(v[n])) try: x[m,n], y[m,n], z[m,n] = fdata except TypeError: x[m,n], y[m,n], z[m,n] = u[m], v[n], fdata for c, cab in [(x[m,n], xab), (y[m,n], yab), (z[m,n], zab)]: if c < cab[0]: cab[0] = c if c > cab[1]: cab[1] = c if wireframe: axes.plot_wireframe(x, y, z, rstride=4, cstride=4) else: axes.plot_surface(x, y, z, rstride=4, cstride=4) axes.set_xlabel('x') axes.set_ylabel('y') axes.set_zlabel('z') if keep_aspect: dx, dy, dz = [cab[1] - cab[0] for cab in [xab, yab, zab]] maxd = max(dx, dy, dz) if dx < maxd: delta = maxd - dx axes.set_xlim3d(xab[0] - delta / 2.0, xab[1] + delta / 2.0) if dy < maxd: delta = maxd - dy axes.set_ylim3d(yab[0] - delta / 2.0, yab[1] + delta / 2.0) if dz < maxd: delta = maxd - dz axes.set_zlim3d(zab[0] - delta / 2.0, zab[1] + delta / 2.0) if fig: if file: pylab.savefig(file, dpi=dpi) else: pylab.show() VisualizationMethods.plot = plot VisualizationMethods.default_color_function = default_color_function VisualizationMethods.phase_color_function = phase_color_function VisualizationMethods.cplot = cplot VisualizationMethods.splot = splot mpmath-1.0.0/pkgdocs.sh000066400000000000000000000003451316273626600150020ustar00rootroot00000000000000TARFILE=mpmath-docsrc-`python -c "import mpmath; print mpmath.__version__"`.tar tar -cf $TARFILE README.rst CHANGES pkgdocs.sh demo/*.py doc/*.py \ `find doc/source -not \( -name .git -prune \) -type f | less` gzip $TARFILE mpmath-1.0.0/setup.cfg000066400000000000000000000007621316273626600146400ustar00rootroot00000000000000[pep8] # E101 - mix of tabs and spaces # W191 - use of tabs # W291 - trailing whitespace # W293 - trailing whitespace # E111 - 4 spaces per indentation level # E112 - 4 spaces per indentation level # E113 - 4 spaces per indentation level # W292 - no newline at end of file # W391 - blank line at end of file select = E101,W191,W291,W293,E111,E112,E113,W292,W391 [pytest] addopts = --doctest-modules --ignore=setup.py --doctest-glob='*.txt' norecursedirs = doc/source/plots demo mpmath-1.0.0/setup.py000066400000000000000000000011301316273626600145170ustar00rootroot00000000000000#!/usr/bin/env python from distutils.core import setup setup(name='mpmath', description = 'Python library for arbitrary-precision floating-point arithmetic', version='1.0.0', url='http://mpmath.org', author='Fredrik Johansson', author_email='fredrik.johansson@gmail.com', license = 'BSD', packages=['mpmath', 'mpmath.libmp', 'mpmath.calculus', 'mpmath.functions', 'mpmath.matrices', 'mpmath.tests'], classifiers=['Topic :: Scientific/Engineering :: Mathematics'] )