From b95742656e4454f44e4c3a88581d7f61127f2806 Mon Sep 17 00:00:00 2001 From: ARS183 <1028762817@qq.com> Date: Tue, 22 Sep 2026 16:34:42 +0200 Subject: [PATCH 1/9] Update chapters 1 and 2 to the revised lecture notes --- book/1_gradient_divergence_curl/coord_sys.md | 70 ++++++-- book/1_gradient_divergence_curl/curl.md | 46 +++++- book/1_gradient_divergence_curl/divergence.md | 152 ++++++++++++++++-- book/1_gradient_divergence_curl/gradient.md | 2 +- .../sums_series_approx.md | 32 ++++ 5 files changed, 274 insertions(+), 28 deletions(-) diff --git a/book/1_gradient_divergence_curl/coord_sys.md b/book/1_gradient_divergence_curl/coord_sys.md index 4d3ccca..0caf67a 100644 --- a/book/1_gradient_divergence_curl/coord_sys.md +++ b/book/1_gradient_divergence_curl/coord_sys.md @@ -29,6 +29,18 @@ $$ \boldsymbol r = x\hat{\boldsymbol x} + y\hat{\boldsymbol y} + z\hat{\boldsymbol z}. $$ +Each base vector can be obtained by differentiating the position vector with respect to the corresponding coordinate, + +$$ +\hat{\boldsymbol x} = \partial_x\boldsymbol r, +\qquad +\hat{\boldsymbol y} = \partial_y\boldsymbol r, +\qquad +\hat{\boldsymbol z} = \partial_z\boldsymbol r. +$$ (eq:cartbase) + +We use this construction again below to find the base vectors of the cylindrical and spherical coordinate systems, where the derivatives do not come out with unit length and a normalisation factor is needed. + It is customary in the Earth Sciences to let the positive $\hat{\boldsymbol z}$-axis point downward, as depicted in {numref}`fig-cartframe`. ```{figure} figures/Cartframe.png @@ -66,7 +78,7 @@ $$ \boldsymbol r' = \hat{\boldsymbol e}_x(x-\lambda_x) + \hat{\boldsymbol e}_y(y-\lambda_y) + \hat{\boldsymbol e}_z(z-\lambda_z). $$ -Since distance should be invariant under rotation, only orthogonal tensors $\{\hat{\boldsymbol e}_x,\hat{\boldsymbol e}_y,\hat{\boldsymbol e}_z\}$ describe a rotation, and when these vectors have unit amplitude they span a base for the new frame of reference, in which case they are orthonormal vectors. +Since distance should be invariant under rotation, only orthogonal tensors $\{\hat{\boldsymbol e}_x,\hat{\boldsymbol e}_y,\hat{\boldsymbol e}_z\}$ describe a rotation, and when these vectors have unit amplitude they span a base for the new frame of reference, in which case they are orthonormal vectors, as shown in {numref}`fig-rotcartframe`. ```{figure} figures/rotCartframe.png :name: fig-rotcartframe @@ -114,6 +126,18 @@ $$ \hat{\boldsymbol x} = \hat{\boldsymbol y}\times\hat{\boldsymbol z}. $$ +You will also encounter triple vector products of the kind $\boldsymbol a\times(\boldsymbol b\times\boldsymbol c)$, which can be evaluated as + +$$ +\boldsymbol a\times(\boldsymbol b\times\boldsymbol c) = (\boldsymbol a\cdot\boldsymbol c)\boldsymbol b - (\boldsymbol a\cdot\boldsymbol b)\boldsymbol c . +$$ (eq:tripprod) + +The result lies in the plane spanned by $\boldsymbol b$ and $\boldsymbol c$, because $\boldsymbol b\times\boldsymbol c$ is perpendicular to that plane and the second cross product turns the result back into it. The order of the brackets matters, $\boldsymbol a\times(\boldsymbol b\times\boldsymbol c)\ne(\boldsymbol a\times\boldsymbol b)\times\boldsymbol c$. The following identity can be useful as well, + +$$ +\boldsymbol a\times(\boldsymbol b\times\boldsymbol c) + \boldsymbol b\times(\boldsymbol c\times\boldsymbol a) = (\boldsymbol a\times\boldsymbol b)\times\boldsymbol c . +$$ (eq:tripprod2) + ## Curvilinear coordinate systems Apart from the Cartesian reference frame, which is a rectangular coordinate system, two coordinate systems are often employed that use curved base vectors. One is the cylindrical coordinate system and the other is the spherical coordinate system. The point shown in {numref}`fig-cartframe` is depicted in cylindrical and spherical coordinate systems in {numref}`fig-cylsphere`. @@ -282,13 +306,26 @@ $$ ## Exercises 1. What is the length of the vector function $\boldsymbol v$? -2. Show that $\hat{\boldsymbol x} = \partial\boldsymbol r/\partial x$. -3. A two-dimensional rectangle in the plane $z=0$ is spanned by the two vectors $\boldsymbol d_x = d_x\hat{\boldsymbol x}$ and $\boldsymbol d_y = d_y\hat{\boldsymbol y}$, where $d_x$ and $d_y$ are the lengths in the $x$- and $y$-directions, respectively, and $\hat{\boldsymbol n}$ is the unit normal on the rectangle pointing in the positive $z$-direction. Give a geometrical interpretation of the product $\hat{\boldsymbol n}\cdot(\boldsymbol d_x\times\boldsymbol d_y)$. -4. A three-dimensional rectangle, a brick, with dimensions $d_x,d_y,d_z$ is spanned by the three vectors $\boldsymbol d_x = d_x\hat{\boldsymbol x}$, $\boldsymbol d_y = d_y\hat{\boldsymbol y}$ and $\boldsymbol d_z = d_z\hat{\boldsymbol z}$. Give a geometrical interpretation of the product $\boldsymbol d_x\cdot(\boldsymbol d_y\times\boldsymbol d_z)$. -5. Consider a smooth surface $\mathbb{S}$ with unique unit normal vector $\hat{\boldsymbol n}$. Show that any vector quantity $\boldsymbol H$ can be composed as $\boldsymbol H = (\hat{\boldsymbol n}\cdot\boldsymbol H)\hat{\boldsymbol n} + (\hat{\boldsymbol n}\times\boldsymbol H)\times\hat{\boldsymbol n}$ and give a geometric interpretation of the two terms. -6. A smooth surface $\mathbb{S}$ has a unique unit normal vector $\hat{\boldsymbol n}$. Decompose the gradient operator into a part tangential and a part normal to the surface $\mathbb{S}$. -7. Use the same reasoning as in the exercise above and find $\hat{\boldsymbol r} = A_r\,\partial\boldsymbol r/\partial r$, $\hat{\boldsymbol\phi} = A_\phi\,\partial\boldsymbol r/\partial\phi$, and $\hat{\boldsymbol\theta} = A_\theta\,\partial\boldsymbol r/\partial\theta$. Carry out the differentiations and find the coefficients $(A_r,A_\phi,A_\theta)$ by requiring that these vectors have unit length. These results should lead to an expression for the unit vectors of the spherical coordinate system in Cartesian coordinates. -8. The upper right-hand side of the matrix of {numref}`tab-direction-cosines` is left empty. The $3\times3$ block in the bottom-left corner of the table relates the unit vectors of the spherical reference frame to those of the Cartesian reference frame. Suppose we write this as +2. Show that $\boldsymbol a\cdot(\boldsymbol b\times\boldsymbol c) = \boldsymbol b\cdot(\boldsymbol c\times\boldsymbol a) = \boldsymbol c\cdot(\boldsymbol a\times\boldsymbol b)$. +3. Evaluate + + $$ + \begin{aligned} + \hat{\boldsymbol x}&\cdot(\hat{\boldsymbol y}\times\hat{\boldsymbol z}), &\qquad + \hat{\boldsymbol x}&\cdot(\hat{\boldsymbol z}\times\hat{\boldsymbol y}), \\ + \hat{\boldsymbol y}&\cdot(\hat{\boldsymbol x}\times\hat{\boldsymbol z}), &\qquad + \hat{\boldsymbol y}&\cdot(\hat{\boldsymbol z}\times\hat{\boldsymbol x}), \\ + \hat{\boldsymbol z}&\cdot(\hat{\boldsymbol y}\times\hat{\boldsymbol x}), &\qquad + \hat{\boldsymbol z}&\cdot(\hat{\boldsymbol x}\times\hat{\boldsymbol y}). + \end{aligned} + $$ +4. A two-dimensional rectangle in the plane $z=0$ is spanned by the two vectors $\boldsymbol d_x = d_x\hat{\boldsymbol x}$ and $\boldsymbol d_y = d_y\hat{\boldsymbol y}$, where $d_x$ and $d_y$ are the lengths in the $x$- and $y$-directions, respectively, and $\hat{\boldsymbol n}$ is the unit normal on the rectangle pointing in the positive $z$-direction. Give a geometrical interpretation of the product $\hat{\boldsymbol n}\cdot(\boldsymbol d_x\times\boldsymbol d_y)$. +5. A three-dimensional rectangle, a brick, with dimensions $d_x,d_y,d_z$ is spanned by the three vectors $\boldsymbol d_x = d_x\hat{\boldsymbol x}$, $\boldsymbol d_y = d_y\hat{\boldsymbol y}$ and $\boldsymbol d_z = d_z\hat{\boldsymbol z}$. Give a geometrical interpretation of the product $\boldsymbol d_x\cdot(\boldsymbol d_y\times\boldsymbol d_z)$. +6. Evaluate $(\boldsymbol a\times\boldsymbol b)\times\boldsymbol c$. +7. Consider a smooth surface $\mathbb{S}$ with unique unit normal vector $\hat{\boldsymbol n}$. Show that any vector quantity $\boldsymbol H$ can be composed as $\boldsymbol H = (\hat{\boldsymbol n}\cdot\boldsymbol H)\hat{\boldsymbol n} + (\hat{\boldsymbol n}\times\boldsymbol H)\times\hat{\boldsymbol n}$ and give a geometric interpretation of the two terms. +8. A smooth surface $\mathbb{S}$ has a unique unit normal vector $\hat{\boldsymbol n}$. Decompose the gradient operator into a part tangential and a part normal to the surface $\mathbb{S}$. +9. Find $\hat{\boldsymbol r} = A_r\,\partial\boldsymbol r/\partial r$, $\hat{\boldsymbol\phi} = A_\phi\,\partial\boldsymbol r/\partial\phi$, and $\hat{\boldsymbol\theta} = A_\theta\,\partial\boldsymbol r/\partial\theta$. Carry out the differentiations and find the coefficients $(A_r,A_\phi,A_\theta)$ by requiring that these vectors have unit length. These results should lead to an expression for the unit vectors of the spherical coordinate system in Cartesian coordinates. +10. The upper right-hand side of the matrix of {numref}`tab-direction-cosines` is left empty. The $3\times3$ block in the bottom-left corner of the table relates the unit vectors of the spherical reference frame to those of the Cartesian reference frame. Suppose we write this as $$ \left(\begin{array}{c} \hat{\boldsymbol r} \\ \hat{\boldsymbol\phi} \\ \hat{\boldsymbol\theta}\end{array}\right) @@ -301,7 +338,7 @@ $$ -\sin(\phi) & \cos(\phi) & 0 \\ \cos(\phi)\cos(\theta) & \sin(\phi)\cos(\theta) & -\sin(\theta) \end{array}\right). - $$ + $$ (eq:Rmat) Show that @@ -311,5 +348,16 @@ $$ $$ where $\mathsf{R}^{t}$ denotes the transpose of $\mathsf{R}$. Then show that $\mathsf{R}\mathsf{R}^{t} = \mathsf{I}$, where $\mathsf{I}$ is the $3\times3$ unit matrix, implying that the transpose of $\mathsf{R}$ is equal to its inverse. This follows from the fact that $\mathsf{R}$ is a matrix of orthonormal vectors and is therefore an orthonormal matrix. -9. Give explicit expressions for the base vectors of the spherical reference frame by carrying out the matrix-vector multiplication of {eq}`eq:sphCar`. Notice that all three base vectors depend on both angles. This implies that the base vectors are not constant but depend on position! The spherical reference frame is not an inertial frame. -10. Carry out the following differentiations: $\partial\hat{\boldsymbol r}/\partial\theta$, $\partial\hat{\boldsymbol\theta}/\partial\theta$, $\partial\hat{\boldsymbol\phi}/\partial\theta$ and $\partial\hat{\boldsymbol r}/\partial\phi$, $\partial\hat{\boldsymbol\theta}/\partial\phi$, $\partial\hat{\boldsymbol\phi}/\partial\phi$. +11. Give explicit expressions for the base vectors of the spherical reference frame by carrying out the matrix-vector multiplication of {eq}`eq:sphCar`, with the rotation matrix given by {eq}`eq:Rmat`. You should find that + + $$ + \hat{\boldsymbol r} = \left(\begin{array}{c} \cos(\phi)\sin(\theta) \\ \sin(\phi)\sin(\theta) \\ \cos(\theta)\end{array}\right), + \qquad + \hat{\boldsymbol\theta} = \left(\begin{array}{c} \cos(\phi)\cos(\theta) \\ \sin(\phi)\cos(\theta) \\ -\sin(\theta)\end{array}\right), + \qquad + \hat{\boldsymbol\phi} = \left(\begin{array}{c} -\sin(\phi) \\ \cos(\phi) \\ 0\end{array}\right). + $$ + + Notice that each base vector depends on at least one angle. This implies that the base vectors are not constant but depend on position! The spherical reference frame is not an inertial frame. +12. Evaluate $\hat{\boldsymbol r}\times\hat{\boldsymbol\phi}$, $\hat{\boldsymbol r}\times\hat{\boldsymbol\theta}$, and $\hat{\boldsymbol\phi}\times\hat{\boldsymbol\theta}$. +13. Carry out the following differentiations: $\partial\hat{\boldsymbol r}/\partial\theta$, $\partial\hat{\boldsymbol\theta}/\partial\theta$, $\partial\hat{\boldsymbol\phi}/\partial\theta$ and $\partial\hat{\boldsymbol r}/\partial\phi$, $\partial\hat{\boldsymbol\theta}/\partial\phi$, $\partial\hat{\boldsymbol\phi}/\partial\phi$, and express them all in terms of $\hat{\boldsymbol r}$, $\hat{\boldsymbol\theta}$ and $\hat{\boldsymbol\phi}$. diff --git a/book/1_gradient_divergence_curl/curl.md b/book/1_gradient_divergence_curl/curl.md index d73a939..7d4e1fe 100644 --- a/book/1_gradient_divergence_curl/curl.md +++ b/book/1_gradient_divergence_curl/curl.md @@ -82,22 +82,62 @@ $$ \oint_{\boldsymbol r}\boldsymbol\tau\cdot\boldsymbol v\,\mathrm{d}l = \int_{\boldsymbol r\in\mathbb{S}}\hat{\boldsymbol n}\cdot(\nabla\times\boldsymbol v)\,\mathrm{d}S . $$ (eq:stokes) +## Vector identities with the curl + +The curl as expressed in {eq}`eq:curl` can be written as a matrix-vector operation, + +$$ +\nabla\times\boldsymbol v = \left(\begin{array}{ccc} +0 & -\partial_z & \partial_y \\ +\partial_z & 0 & -\partial_x \\ +-\partial_y & \partial_x & 0 +\end{array}\right)\left(\begin{array}{c} v_x \\ v_y \\ v_z\end{array}\right). +$$ (eq:curlmat) + +The matrix is antisymmetric and its diagonal is empty, which is another way of saying that no component of $\boldsymbol v$ contributes to the component of $\nabla\times\boldsymbol v$ along its own direction. + +The curl of a curl is given by + +$$ +\nabla\times\nabla\times\boldsymbol v = \nabla(\nabla\cdot\boldsymbol v) - \nabla^2\boldsymbol v, +$$ (eq:curlcurl) + +where $\nabla^2 = \nabla\cdot\nabla$ is the Laplacian. The curl of the curl of a vector field is the gradient of the divergence of that field, given by the first term on the right-hand side, minus the divergence of the gradient of that field, given by the second term. In this case the evaluation in terms of vector operations is the same as in {eq}`eq:tripprod`, with $\boldsymbol a$ and $\boldsymbol b$ both replaced by $\nabla$. + +If the curl is taken of a vector product of two vector functions, the product rule for differentiation must be taken into account as well, + +$$ +\nabla\times(\boldsymbol v\times\boldsymbol w) = \boldsymbol v(\nabla\cdot\boldsymbol w) - \boldsymbol w(\nabla\cdot\boldsymbol v) + (\boldsymbol w\cdot\nabla)\boldsymbol v - (\boldsymbol v\cdot\nabla)\boldsymbol w . +$$ (eq:curlvecprod) + +The first two terms take the divergence of $\boldsymbol w$ and of $\boldsymbol v$ and point the result along $\boldsymbol v$ and $-\boldsymbol w$ respectively, while the last two terms take the derivative of $\boldsymbol v$ and of $\boldsymbol w$ along the direction of $\boldsymbol w$ and $-\boldsymbol v$ respectively. + +The divergence operator can also act on the vector product of two functions, $\nabla\cdot(\boldsymbol v\times\boldsymbol w)$. This is evaluated with the vector rules of the exercises on coordinate systems, keeping the product rule for differentiation in mind, because the $\nabla$-operator acts on both $\boldsymbol v$ and $\boldsymbol w$. It is given by + +$$ +\nabla\cdot(\boldsymbol v\times\boldsymbol w) = \boldsymbol w\cdot(\nabla\times\boldsymbol v) - \boldsymbol v\cdot(\nabla\times\boldsymbol w). +$$ (eq:divvecprod) + +The divergence of a vector product of two functions takes the curl of each of them, computes the scalar product with the other, and subtracts the results. + ## Exercises 1. Use Stokes' theorem to evaluate $\oint_{\boldsymbol r}\boldsymbol\tau\,\mathrm{d}l$, where $\boldsymbol\tau$ is the unit tangent along the closed boundary of the area $\mathbb{S}$. The integration runs in the direction of circulation that forms a right-handed system with the unit normal vector on $\mathbb{S}$. -2. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\,p(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $p(\boldsymbol r)$ is a continuously differentiable scalar function, Stokes' integral theorem gives +2. Use the matrix expression for the curl in {eq}`eq:curlmat` to find the matrix expression for the curl of the curl of $\boldsymbol v$, as expressed in vector form in {eq}`eq:curlcurl`. +3. Give a detailed derivation to show that {eq}`eq:divvecprod` is correct. +4. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\,p(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $p(\boldsymbol r)$ is a continuously differentiable scalar function, Stokes' integral theorem gives $$ \oint_{\boldsymbol r}\boldsymbol\tau\,p\,\mathrm{d}l = \int_{\boldsymbol r\in\mathbb{S}}(\hat{\boldsymbol n}\times\nabla)p\,\mathrm{d}S, $$ which is Stokes' theorem for the gradient. -3. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\times\boldsymbol w(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $\boldsymbol w(\boldsymbol r)$ is a continuously differentiable vector function, Stokes' integral theorem gives +5. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\times\boldsymbol w(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $\boldsymbol w(\boldsymbol r)$ is a continuously differentiable vector function, Stokes' integral theorem gives $$ \oint_{\boldsymbol r}\boldsymbol\tau\times\boldsymbol w\,\mathrm{d}l = \int_{\boldsymbol r\in\mathbb{S}}(\hat{\boldsymbol n}\times\nabla)\times\boldsymbol w\,\mathrm{d}S . $$ -4. Ampère's law is given by $\nabla\times\boldsymbol H = \boldsymbol J$, which states that the electric current is equal to the curl of the magnetic field. Convert this to integral form using Stokes' theorem, by using a flat surface $\mathbb{S}$ and choosing a unit normal vector $\hat{\boldsymbol n}$ on $\mathbb{S}$. You should find +6. Ampère's law is given by $\nabla\times\boldsymbol H = \boldsymbol J$, which states that the electric current is equal to the curl of the magnetic field. Convert this to integral form using Stokes' theorem, by using a flat surface $\mathbb{S}$ and choosing a unit normal vector $\hat{\boldsymbol n}$ on $\mathbb{S}$. You should find $$ \oint_{\boldsymbol r}\boldsymbol H\cdot\boldsymbol\tau\,\mathrm{d}l = \int_{\boldsymbol r\in\mathbb{S}}\hat{\boldsymbol n}\cdot\boldsymbol J\,\mathrm{d}S . diff --git a/book/1_gradient_divergence_curl/divergence.md b/book/1_gradient_divergence_curl/divergence.md index 1e97bf2..616aaa3 100644 --- a/book/1_gradient_divergence_curl/divergence.md +++ b/book/1_gradient_divergence_curl/divergence.md @@ -55,6 +55,140 @@ We have just derived Gauss' integral theorem, or divergence theorem, and we foun The divergence of a vector field is the outward flux of the vector field per unit volume. ::: +### Gauss' theorem in one, two and three dimensions + +In one dimension the vector function can have only one component, say $v_x$, and it can depend on the spatial variable $x$ only. A finite volume in one dimension is a line segment, and its surface consists of the two end points of that segment. Let the line run from $x=x_b$ to $x=x_e$, from beginning to end. The divergence is $\nabla\cdot\boldsymbol v = \partial_x v_x$ and Gauss' theorem reads + +$$ +\int_{x_b}^{x_e}\partial_x v_x\,\mathrm{d}x = v_x(x_e) - v_x(x_b). +$$ (eq:gauss1d) + +You will recognise this as the fundamental theorem of calculus, stating that integration reverses differentiation. How do we know that it is the term $v_x(x_b)$ that should be given the minus sign? + +In two dimensions a vector field can have two components and depend on two spatial variables. Take the $(x,y)$-plane as our two-dimensional space. The vector field is written as $\boldsymbol v(x,y) = v_x(x,y)\hat{\boldsymbol x} + v_y(x,y)\hat{\boldsymbol y}$, and we evaluate the outward flow out of the rectangular domain $x_b0$ that is valid until the ball hits the ground again for the first time. + + (b) Determine the time $T_0$ at which the ball hits the ground and the maximum height $H$ the ball reaches the first time. + + Assume that every time the ball hits the ground there is some plastic deformation of the ball and the ball loses a fraction $\gamma$ of its energy at every bounce, such that at the $n^{\text{th}}$ bounce the velocity can be expressed as $v_n = \sqrt{1-\gamma}\,v_{n-1}$ for $n>0$. + + (c) The time it takes to complete the $n^{\text{th}}$ bounce, $T_n$, can be written in terms of $T_{n-1}$ as $T_n = \alpha T_{n-1}$, and in terms of $T_0$ as $T_n = \beta T_0$. Determine $\alpha$ and $\beta$. + + (d) Show that $T_n = (1-\gamma)^{n/2}\sqrt{\dfrac{8H}{g}}$. + + (e) Give an expression for $T_\infty$ by evaluating the series $T_\infty = \sum_{m=0}^{\infty}T_m$. Since $\gamma$ is a fraction, it has a positive non-zero value smaller than 1, so that the series can be summed to an explicit expression. Why does it take only a finite time for the ball to make infinitely many bounces? + + (f) If the energy loss per bounce is extremely small, $\gamma\ll 1$, use a Taylor series expansion around $\gamma=0$ for $T_\infty$ and keep only the leading term as a first-order approximation to the time required to make an infinite number of bounces. + + (g) Plot the height as a function of time and try different values for $\gamma$, to understand truncation of a series as an approximation of a function. How many terms do you need in the sum to arrive at the same time as the approximate expression? + + :::{admonition} Answers to (a)–(f) + :class: tip dropdown + (a) $z = v_0 t - \tfrac{1}{2}gt^2$. + + (b) $H = \dfrac{v_0^2}{2g}$ and $T_0 = \dfrac{2v_0}{g}$. + + (c) $T_n$ is proportional to $v_n$, hence $T_n = \sqrt{1-\gamma}\,T_{n-1} = (1-\gamma)^{n/2}T_0$, so $\alpha=\sqrt{1-\gamma}$ and $\beta=(1-\gamma)^{n/2}$. + + (d) In the expression for $T_n$ in (c), express $T_0$ in terms of $H$ instead of in terms of $v_0$. + + (e) $T_\infty = T_0\sum_{m=0}^{\infty}(1-\gamma)^{m/2} = \sqrt{\dfrac{8H}{g}}\dfrac{1}{1-\sqrt{1-\gamma}}$. + + (f) In that case $\sqrt{1-\gamma}\approx 1-\tfrac{\gamma}{2}$ and $T_\infty \approx \sqrt{\dfrac{8H}{g}}\dfrac{2}{\gamma}$. + ::: From bc7cced3b57d77ed5457bca8a257365b0a538486 Mon Sep 17 00:00:00 2001 From: ARS183 <1028762817@qq.com> Date: Tue, 22 Sep 2026 16:34:42 +0200 Subject: [PATCH 2/9] Add the diffusive fields chapter from the lecture notes --- book/3_diffusion_fields/em_diffusion.md | 228 +++++++++ .../figures/heat_ic_quarters.svg | 426 +++++++++++++++++ .../figures/heat_ic_thirds.svg | 388 +++++++++++++++ .../figures/make_figures.py | 43 ++ book/3_diffusion_fields/heat_equation_1d.md | 443 ++++++++++++++++++ book/3_diffusion_fields/intro.md | 29 ++ book/_toc.yml | 6 + 7 files changed, 1563 insertions(+) create mode 100644 book/3_diffusion_fields/em_diffusion.md create mode 100644 book/3_diffusion_fields/figures/heat_ic_quarters.svg create mode 100644 book/3_diffusion_fields/figures/heat_ic_thirds.svg create mode 100644 book/3_diffusion_fields/figures/make_figures.py create mode 100644 book/3_diffusion_fields/heat_equation_1d.md diff --git a/book/3_diffusion_fields/em_diffusion.md b/book/3_diffusion_fields/em_diffusion.md new file mode 100644 index 0000000..299ec50 --- /dev/null +++ b/book/3_diffusion_fields/em_diffusion.md @@ -0,0 +1,228 @@ +# Electromagnetic diffusive field equations with a source + +Maxwell's equations are given by + +$$ +-\nabla\times\boldsymbol H + \varepsilon\,\partial_t\boldsymbol E + \sigma\boldsymbol E = -\boldsymbol J^e, +$$ (eq:hrel) + +$$ +\nabla\times\boldsymbol E + \mu\,\partial_t\boldsymbol H = \boldsymbol 0, +$$ (eq:erel) + +where the right-hand sides contain the sources that generate the electromagnetic field. In {eq}`eq:hrel`, the source is the electric current dipole $\boldsymbol J^e$ (A/m$^2$), and in {eq}`eq:erel` the source is zero, because no magnetic monopoles have been found. Some electric sources can be approximated by a magnetic current dipole source. A closed current-carrying loop antenna is such an electric current source that is often described as a magnetic dipole, which can be understood from integrating both sides of {eq}`eq:erel` over the area of the loop, performing a scalar product of each term with the unit normal to the loop, and using Stokes' theorem on the curl of the electric field. In the left-hand sides, $\boldsymbol E$ and $\boldsymbol H$ are the electric and magnetic field strengths in V/m and A/m, respectively, and the medium parameters $\varepsilon,\sigma,\mu$ are the electric permittivity and conductivity, and the magnetic permeability, with units of s/($\Omega$m), 1/($\Omega$m), and s$\Omega$/m, respectively. These equations describe in principle the electric, magnetic and electromagnetic fields for all possible time variations, including the static fields discussed before. Here we are interested in the diffusive field regime. We see that {eq}`eq:hrel`, Ampère's law modified by Maxwell, contains both the electric field and the time derivative of the electric field. If we take the divergence of this equation, we obtain + +$$ +(\sigma + \varepsilon\,\partial_t)\,\nabla\cdot\boldsymbol E = -\nabla\cdot\boldsymbol J^e . +$$ + +We use the fact that $\boldsymbol D=\varepsilon\boldsymbol E$ and that $\nabla\cdot\boldsymbol D=\rho_f$, with $\rho_f$ being the volume density of free charge (C m$^{-3}$). Substituting this in the equation gives + +$$ +\partial_t\rho_f = -\nabla\cdot(\sigma\boldsymbol E + \boldsymbol J^e), +$$ + +which is known as the equation of continuity of electric current, or the charge conservation law. We replace the source by assuming there is an accumulation of free charge $\rho_0$ at $t=0$, which removes the source and replaces it with the initial condition $\rho_f(0)=\rho_0$. If we write the electric field as $\boldsymbol E=\boldsymbol D/\varepsilon$, the equation becomes + +$$ +\partial_t\rho_f = -\frac{\sigma}{\varepsilon}\rho_f, +$$ + +the solution of which is known as + +$$ +\rho_f = \rho_0\exp\left(-\frac{\sigma}{\varepsilon}t\right) = \rho_0\exp(-t/\tau_r), +$$ + +where $\tau_r=\varepsilon/\sigma$ is known as the charge relaxation time. It is a measure of the time it takes the medium to return to its equilibrium state after it has been disturbed by an electromagnetic wave. First, we learn from this equation the following theorem: *within a region of non-vanishing conductivity there can be no permanent distribution of free charge*. This is the significant equation, because when alternating source currents have oscillation periods much larger than the relaxation time, the effect of $\varepsilon$ can be neglected and we can effectively assume $\varepsilon=0$ in the first Maxwell equation. For most Earth materials, $\varepsilon\lesssim 10^{-9}$ F/m and $\sigma\gtrsim 10^{-4}$ S/m, so for most earth materials under investigation the relaxation time is less than 10 $\mu$s. Hence, for source time function oscillations with periods longer than 0.3 ms, we can safely take $\varepsilon=0$. For now, we assume this is the case. Electromagnetic waves are treated later in the course. We write Maxwell's equations in the diffusive approximation out in components as + +$$ +\begin{aligned} +-\partial_y H_z + \partial_z H_y + \sigma E_x &= -J_x^e, \\ +-\partial_z H_x + \partial_x H_z + \sigma E_y &= -J_y^e, \\ +-\partial_x H_y + \partial_y H_x + \sigma E_z &= -J_z^e, \\ +\partial_y E_z - \partial_z E_y + \mu\,\partial_t H_x &= 0, \\ +\partial_z E_x - \partial_x E_z + \mu\,\partial_t H_y &= 0, \\ +\partial_x E_y - \partial_y E_x + \mu\,\partial_t H_z &= 0 . +\end{aligned} +$$ + +First we link these equations to the 1D heat equation by assuming a one-dimensional problem here as well. If the source is an infinite current sheet with a constant current in the $(x,y)$-plane, it means that all fields are independent of the $x$- and $y$-coordinates and all derivatives $\partial_x$ and $\partial_y$ become zero. Then, when the current has an $x$-component only, we have $J_y^e=J_z^e=0$. We substitute these findings in the equations and find + +$$ +\begin{aligned} +\partial_z H_y + \sigma E_x &= -J_x^e, \\ +-\partial_z H_x + \sigma E_y &= 0, \\ +\sigma E_z &= 0, \\ +-\partial_z E_y + \mu\,\partial_t H_x &= 0, \\ +\partial_z E_x + \mu\,\partial_t H_y &= 0, \\ +\mu\,\partial_t H_z &= 0, +\end{aligned} +$$ (eq:plzHy) + +which eliminates the vertical electric and magnetic field components and results in two equal but independent sets of two coupled differential equations, one for $E_x,H_y$ and one for $E_y,H_x$, but the latter has no source to generate the fields. The source is taken as $J_x^e(z,t)=\delta(z)W(t)$, which represents the plane electric current sheet in the $(x,y)$-plane at $z=0$ with a current directed along the $x$-axis and with a time function $W(t)$. This means it is a point source in the $z$-direction and of infinite extent in the $x$- and $y$-directions. In the course Signals and Time Series, the delta-function was introduced in time, but we can use it in all coordinates. Here, this leads to equations for $E_x$ and $H_y$, as + +$$ +\begin{aligned} +\partial_z H_y(z,t) + \sigma E_x(z,t) &= -J_x^e(z,t), \\ +\partial_z E_x(z,t) + \mu\,\partial_t H_y(z,t) &= 0 . +\end{aligned} +$$ + +The diffusive field that satisfies these equations is called the Transverse ElectroMagnetic (TEM) diffusive field. The diffusion equation for the electric field is obtained by eliminating the magnetic field from the two equations above. We do that as follows, + +$$ +\begin{aligned} +\partial_z\left(\mu\,\partial_t H_y(z,t)\right) + \sigma\mu\,\partial_t E_x(z,t) &= -\mu\,\partial_t J_x^e(z,t), \\ +\mu\,\partial_t H_y(z,t) &= -\partial_z E_x(z,t), +\end{aligned} +$$ + +and substituting the right-hand side of the second equation to replace the term with the magnetic field in the first equation. The electric field is found to satisfy the following diffusion equation: + +$$ +\partial_z\partial_z E_x - \mu\sigma\,\partial_t E_x = \mu\,\partial_t J_x^e(z,t). +$$ (eq:dee) + +For $J_x^e(z,t)=\delta(z)W(t)$, the solution is known and given by + +$$ +E_x(z,t) = -\int_{t'=0}^{t}\left(\frac{\sigma\mu z^2}{4(t-t')} - \frac{1}{2}\right)\sqrt{\frac{\mu}{4\pi\sigma(t-t')^3}}\exp\left(-\frac{\sigma\mu z^2}{4(t-t')}\right)W(t')\,\mathrm{d}t', +$$ (eq:extW) + +where the convolutional integral is present because the function $W(t)$ has not been defined yet. If the current is switched on and kept at a constant value $I$ for all times after $t=0$, $W(t)=0$ for $t<0$ and $W(t)=I$ for $t>0$, the integral can be evaluated explicitly and the solution is + +$$ +E_x(z,t) = -I\sqrt{\frac{\mu}{4\pi\sigma t}}\exp\left(-\frac{\sigma\mu z^2}{4t}\right), \quad\text{for } t>0 . +$$ (eq:ExtH) + +You recognise the similarity with the solution to the heat equation with a Gaussian distribution for the initial temperature on an infinitely long wire. Note that here we make explicit that the expression for the electric field exists only for positive times. This is because $t=0$ is the moment the source is switched on, and physics tells us that the Earth will respond to a source action only at or after the moment the source becomes active, and not before. This is the notion of causality. + +## Solution using Fourier transformation + +In the course on Signals and Time Series, you have learned Fourier series and the Fourier transformation. In the heat equation for a finite-length wire, we use Fourier series to find solutions, but we can solve partial differential equations with a non-zero source term more formally with the aid of Fourier transformations. We do this by transforming {eq}`eq:dee` to the frequency domain using + +$$ +\hat{\boldsymbol E}(z,\omega) = \int_{t=0}^{\infty}\exp(-\mathrm{i}\omega t)\,\boldsymbol E(z,t)\,\mathrm{d}t, +$$ + +to obtain + +$$ +\partial_z\partial_z\hat E_x - \mathrm{i}\omega\sigma\mu\,\hat E_x = \mathrm{i}\omega\mu\,\hat W(\omega)\,\delta(z). +$$ (eq:dees) + +The diacritical hat on the quantities denotes the Fourier transform of the quantity. The time derivative is gone and replaced by an algebraic multiplication with $\mathrm{i}\omega$, and the equation has been reduced to an ordinary second-order differential equation. As you have learned in the course Signals and Time Series, the exponential function is an eigenfunction, so we can propose a solution in the form + +$$ +\hat E_x = \hat A\exp\left(-\sqrt{\mathrm{i}\omega\mu\sigma}\,|z|\right), +$$ + +where $\hat A$ is the constant that needs to be determined. The reason why $|z|$ is in the argument of the exponential function is that the field must diffuse away from the source and decrease in amplitude with increasing distance in both the positive and negative $z$-directions. Evaluating the first and second derivatives with respect to $z$ gives + +$$ +\begin{aligned} +\partial_z\hat E_x &= -\sqrt{\mathrm{i}\omega\sigma\mu}\,\hat A\exp\left(-\sqrt{\mathrm{i}\omega\sigma\mu}\,|z|\right)\frac{z}{|z|}, \\ +\partial_z\partial_z\hat E_x &= \mathrm{i}\omega\mu\sigma\,\hat A\exp\left(-\sqrt{\mathrm{i}\omega\sigma\mu}\,|z|\right) - 2\sqrt{\mathrm{i}\omega\sigma\mu}\,\hat A\,\delta(z)\exp\left(-\sqrt{\mathrm{i}\omega\sigma\mu}\,|z|\right), \\ +&= \mathrm{i}\omega\sigma\mu\,\hat E_x - 2\sqrt{\mathrm{i}\omega\sigma\mu}\,\hat A\,\delta(z), +\end{aligned} +$$ + +where we have used the fact that + +$$ +\mathrm{sign}(z) = \frac{z}{|z|} = \left\{\begin{array}{rl} -1, & z<0, \\ 1, & z>0, \end{array}\right. +$$ + +is known as the sign-function. It has a sudden step of size 2 at $z=0$, for which reason its derivative is equal to $\partial_z\,\mathrm{sign}(z)=2\delta(z)$. Because the impulse function acts only at $z=0$, we can substitute that already in the exponential function that multiplies the delta-function. If we substitute these results in {eq}`eq:dees` we find that + +$$ +\hat A = -\frac{\sqrt{\mathrm{i}\omega\mu}}{2\sqrt{\sigma}}\hat W . +$$ + +The solution for the electric field is then found as + +$$ +\hat E_x(z,\omega) = -\frac{\sqrt{\mu}}{2\sqrt{\sigma}}\hat W\sqrt{\mathrm{i}\omega}\exp\left(-\sqrt{\mathrm{i}\omega\sigma\mu}\,|z|\right). +$$ (eq:eesd) + +This is the space-frequency domain solution for the one-dimensional electric field in the Earth in response to an electric current sheet that is an impulse at $z=0$ but exists for all $x$- and $y$-values, and has a time function $W(t)$. The transformation back to time results in the expression given in {eq}`eq:extW`, and in {eq}`eq:ExtH` in case the source is a step-function switch-on, in which case its frequency transform is given by $\hat W=I/(\mathrm{i}\omega)$. Now we can explain the convolution in time, because you know from the course Signals and Time Series that a product in the frequency domain leads to a convolution in the time domain. + +## The concept of the principle of superposition + +Before we go to the three-dimensional problem, we take a look at the right-hand side of {eq}`eq:dee` for the given source time function that is switched on at $t=0$ and kept constant after that, and note that $\partial_t u(t)=\delta(t)$, where $u(t)$ is the unit-step function and $\delta(t)$ is the delta-function. In that case the equation for the electric field becomes + +$$ +\partial_z\partial_z E_x - \mu\sigma\,\partial_t E_x = \mu I\,\delta(t)\,\delta(z). +$$ (eq:deeg) + +The function that collapses a differential equation to an impulse in space and time is called the Green's function. Physically, the Green's function describes the (scalar) response to an impulse in space and time. This is a general principle for linear partial differential equations and you have discussed this in the course Signals and Time Series. The equation for the space-time impulse response is then + +$$ +(\partial_z\partial_z - \mu\sigma\,\partial_t)\,G(z-z',t-t') = -\delta(t-t')\,\delta(z-z'), +$$ (eq:deg) + +where the minus sign in the right-hand side is a historic choice. The constant displacements $t'$ and $z'$ are chosen because the real source may have a finite length in the $z$-direction and have a certain time duration. If we now multiply both sides of this equation with a function $-\mu\,\partial_{t'}J_x^e(z',t')$, assume that $J_x^e(z',t')\ne 0$ only for $z_bt', +$$ (eq:G3D) + +and it satisfies + +$$ +(\nabla^2 - \sigma\mu\,\partial_t)\,G = -\delta(\boldsymbol r-\boldsymbol r')\,\delta(t-t') . +$$ + +Again we recognise the similarity with the solution for the heat equation for an infinitely long wire with an initial temperature that was a Gaussian distribution. It also resembles the 1D diffusive field solution to Maxwell's equations. The major difference is that here the late-time behaviour is proportional to $t^{-3/2}$. The electric and magnetic fields have much more complicated behaviour, but that is far beyond the scope of the present course. + +### Brief analysis of the outcome + +For a source in the location $\boldsymbol r'$, the field diffuses away in spherical direction and the amplitude only depends on radial distance. The product $\sigma\mu$ is the diffusion constant and has the unit of s/m$^2$. It is a measure of how fast the width of the Gaussian spreads in space for a given time instant. + +**Early time behaviour.** The early-time behaviour is similar to what we saw in the 1D heat equation. + +**Late time behaviour.** The late-time behaviour is inversely proportional to $t^{3/2}$, which is faster than what we saw in the solutions to the 1D heat and Maxwell diffusion equations. + +**Time to the peak.** If we differentiate the Green's function to $t$ and equate the result to zero, we find the time to the peak to be $t-t'=t_p$, at $t_p=\sigma\mu|\boldsymbol r-\boldsymbol r'|^2/6$. The amplitude of the Green's function at the peak time is given by + +$$ +G(\boldsymbol r-\boldsymbol r',t-t'=t_p) = \frac{3\sqrt{6}\exp(-3/2)}{4\pi^{3/2}\sigma\mu|\boldsymbol r-\boldsymbol r'|^3}, +$$ + +which shows that if you double the distance to the source, the peak amplitude is 8 times smaller. diff --git a/book/3_diffusion_fields/figures/heat_ic_quarters.svg b/book/3_diffusion_fields/figures/heat_ic_quarters.svg new file mode 100644 index 0000000..a800540 --- /dev/null +++ b/book/3_diffusion_fields/figures/heat_ic_quarters.svg @@ -0,0 +1,426 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.11.1, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/book/3_diffusion_fields/figures/heat_ic_thirds.svg b/book/3_diffusion_fields/figures/heat_ic_thirds.svg new file mode 100644 index 0000000..c4742c2 --- /dev/null +++ b/book/3_diffusion_fields/figures/heat_ic_thirds.svg @@ -0,0 +1,388 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.11.1, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/book/3_diffusion_fields/figures/make_figures.py b/book/3_diffusion_fields/figures/make_figures.py new file mode 100644 index 0000000..6f21438 --- /dev/null +++ b/book/3_diffusion_fields/figures/make_figures.py @@ -0,0 +1,43 @@ +"""Regenerate the initial-condition sketches of the heat-equation exercises. + +Run from this directory: python make_figures.py +""" +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +INK = "#6b7280" # neutral grey, readable on light and dark backgrounds +LINE = "#00A6D6" # TU Delft cyan + +def step_sketch(fname, edges, values, xticks, xticklabels): + fig, ax = plt.subplots(figsize=(4.2, 2.4)) + xs, ys = [], [] + for (a, b), v in zip(zip(edges[:-1], edges[1:]), values): + xs += [a, b] + ys += [v, v] + ax.plot(xs, ys, color=LINE, lw=2) + ax.axhline(0, color=INK, lw=0.8) + ax.set_xlim(-0.05, 1.12) + ax.set_ylim(-1.35, 1.35) + ax.set_xticks(xticks, xticklabels) + ax.set_yticks([-1, 0, 1]) + ax.set_xlabel("$x$", color=INK) + ax.set_ylabel("$h(x)$", color=INK) + for side in ("top", "right"): + ax.spines[side].set_visible(False) + for side in ("left", "bottom"): + ax.spines[side].set_color(INK) + ax.tick_params(colors=INK) + fig.tight_layout() + fig.savefig(fname, transparent=True, metadata={"Date": None}) + plt.close(fig) + +# exercise 4: h = 0, -1, 1, 0 on the four quarters of the bar, T(0,t) = T(L,t) = 0 +step_sketch("heat_ic_quarters.svg", + [0, 0.25, 0.5, 0.75, 1.0], [0, -1, 1, 0], + [0, 0.25, 0.5, 0.75, 1.0], ["0", "$L/4$", "$L/2$", "$3L/4$", "$L$"]) + +# exercise 5: h = 1, -1, 1 on the three thirds of the bar, insulated ends +step_sketch("heat_ic_thirds.svg", + [0, 1/3, 2/3, 1.0], [1, -1, 1], + [0, 1/3, 2/3, 1.0], ["0", "$L/3$", "$2L/3$", "$L$"]) diff --git a/book/3_diffusion_fields/heat_equation_1d.md b/book/3_diffusion_fields/heat_equation_1d.md new file mode 100644 index 0000000..369da03 --- /dev/null +++ b/book/3_diffusion_fields/heat_equation_1d.md @@ -0,0 +1,443 @@ +# The heat equation in one dimension + +Let us assume the heat can flow only in the $x$-direction, like in a bar. This reduces the heat equation, {eq}`eq:Heat`, to + +$$ +\partial_t T - \kappa\,\partial_x^2 T = 0, +$$ (eq:Heat1D) + +where we assume no source or sink is present, for which reason the right-hand side is zero. If we want to find a solution to this equation, we will need other information. These are initial conditions and boundary conditions. The number of conditions needed is equal to the highest order derivative in a variable. {eq}`eq:Heat1D` has a first-order time derivative, which means we need one initial or boundary condition, and it has a second-order spatial derivative, which means we need two initial or boundary conditions in space. Let us assume the bar has length $L$ and extends from $x=0$ to $x=L$. So-called Dirichlet conditions describe the temperature at the end points, $x=0$ and $x=L$, e.g., $T(0,t)=0$ and $T(L,t)=0$. So-called Neumann conditions prescribe the normal component of the current, or, in this case, the first spatial derivative of temperature. For example, a no-flow end-point condition for an insulated bar, meaning no heat can flow away from the bar, is expressed as + +$$ +\begin{aligned} +\partial_x T(0,t) &= 0, \\ +\partial_x T(L,t) &= 0. +\end{aligned} +$$ + +For some source-free problems, solutions can be found using the technique of separation of variables. This means that we can write the temperature in the bar as a product of a function that depends only on position and a function that depends only on time. We are going to find a solution for two different cases. + +## Example 1: bar with zero temperature at the end points + +For such a bar we use the 1D heat equation with conditions on the temperature at the end points, + +$$ +\begin{aligned} +\partial_t T &= \kappa\,\partial_x^2 T, \\ +T(x,0) &= h(x), \\ +T(0,t) &= 0, \\ +T(L,t) &= 0. +\end{aligned} +$$ + +Note that the boundary condition at zero time is an arbitrary function $h(x)$ of position. This condition allows for non-trivial solutions and this means that the function $h(x)$ can be seen as the starting point of the diffusive process. We could see it as equivalent to the presence of a source. The boundary conditions do not depend on time and space simultaneously and we can try a solution with separation of variables. We take a solution in the form + +$$ +T(x,t) = f(x)\,g(t), +$$ + +and put it in the equation to find + +$$ +\begin{aligned} +\partial_t\left[f(x)g(t)\right] &= \kappa\,\partial_x^2\left[f(x)g(t)\right], \\ +f(x)\,\partial_t g(t) &= \kappa\,g(t)\,\partial_x^2 f(x), \\ +\frac{\partial_t g(t)}{g(t)} &= \kappa\frac{\partial_x^2 f(x)}{f(x)} = -\kappa\lambda . +\end{aligned} +$$ + +The separation constant $\lambda$ is introduced to be able to separate the two equations and solve them independently. Note that attaching $\kappa$ to the separation constant is not required but convenient. If you don't do it, it does not matter. When you discover in a later step that it would be better to do it, you can come back here and do it after all. We can now write the equation as two equations, + +$$ +\begin{aligned} +\partial_t g(t) &= -\kappa\lambda\,g(t), \\ +\partial_x^2 f(x) &= -\lambda\,f(x). +\end{aligned} +$$ + +Now, we must find out if we can satisfy the boundary conditions for $T(x,t)$ and move them to conditions for $f(x)$ and $g(t)$. We find + +$$ +T(0,t) = f(0)g(t) = 0 \quad\text{and}\quad T(L,t) = f(L)g(t) = 0 . +$$ + +If we would choose $g(t)=0$ then we would find the trivial solution that the temperature is zero everywhere and for all times. Hence, we choose $f(0)=f(L)=0$ as boundary conditions for $f(x)$. The separation constant $\lambda$ is known as the eigenvalue of the problem. We are going to find that non-trivial solutions are found only for specific values of $\lambda$. The non-trivial solution for a value of $\lambda$ is then called an eigenfunction. You have encountered or will encounter this in the course ECTB2130, Signals and Time Series. An eigenfunction of a differential equation is a function that, when it is taken as an input signal, gives as output the same function scaled by a factor, which is then the corresponding eigenvalue. + +Now we are ready to solve the corresponding two equations, + +$$ +\begin{aligned} +(\partial_t + \kappa\lambda)\,g &= 0, \\ +(\partial_x^2 + \lambda)\,f &= 0, \\ +f(0) = f(L) &= 0 . +\end{aligned} +$$ + +In fact, we solve first the spatial equation. We must consider three ranges for $\lambda$ to find solutions for the second-order differential equation. + +**Case $\lambda>0$.** For positive eigenvalues, the solution consists of oscillating functions, + +$$ +f(x) = c_1\sin(x\sqrt{\lambda}) + c_2\cos(x\sqrt{\lambda}). +$$ + +Because $f(0)=0$, we find $c_2=0$. Because $f(L)=0$, we find that $\sin(L\sqrt{\lambda})=0$, which leads to + +$$ +\lambda = \left(\frac{n\pi}{L}\right)^2, \quad\text{for } n=1,2,3,\cdots, +$$ + +hence the solution is given by + +$$ +f(x) = c_1\sin\left(\frac{n\pi x}{L}\right), \quad\text{for } n=1,2,3,\cdots . +$$ + +There is an infinite number of eigenvalues, each of which has its own eigenfunction as solution to the problem. Note that $c_1$ is not determined by this condition and we could remove it, because later we will need to make sure to satisfy the last condition of $T(x,0)=h(x)$. For simplicity we keep it here as an undetermined constant. + +**Case $\lambda=0$.** For a zero eigenvalue, the solution is given by $f(x)=c_0+c_1x$. Because both $f(0)$ and $f(L)$ must be zero, we find that both coefficients are zero and only the trivial solution exists. Hence $f(x)=0$. This also means that $\lambda=0$ is not an eigenvalue for this problem! + +**Case $\lambda<0$.** For negative eigenvalues, the solution consists of exponential functions given by + +$$ +f(x) = c_1\exp(x\sqrt{-\lambda}) + c_2\exp(-x\sqrt{-\lambda}). +$$ + +Setting $f(0)=0$ and $f(L)=0$ leads again to $c_1=0$ and $c_2=0$. We see that for negative values of $\lambda$ only the trivial solution is found. Hence, also no negative eigenvalues exist for this problem. + +Now it is time to solve the time equation. We must consider only positive values of $\lambda$ and substitute $\lambda_n$ that we can later specify as found above. For each value of $\lambda_n$, we should find a solution $g_n(t)$. The corresponding equation is written as + +$$ +(\partial_t + \kappa\lambda_n)\,g_n = 0 . +$$ + +This is a simple first-order equation and we know that exponential functions are repeated when differentiated. Hence, we find the solution to be of the form + +$$ +g_n(t) = c_n\exp(-\kappa\lambda_n t) = c_n\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right]. +$$ + +The temperature is given by the product of the two solutions. We can write for every $n$, + +$$ +T_n(x,t) = C_n\sin\left(\frac{n\pi x}{L}\right)\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right]. +$$ (eq:T1Dn) + +The coefficient $C_n$ combines the coefficients we found in the solution in space and in time. Note that this is a solution, but that does not mean that this function alone can satisfy all boundary conditions we can think of. The function $h(x)$ of the boundary condition at zero time is an arbitrary function of position. This means that the solution is quite restrictive and can be used only for functions $h(x)$ that match $T_n(x,0)$. We are of course allowed to combine solutions for different values of $n$, because the problem is linear and the principle of superposition applies. This means we can write the temperature as a solution to the heat equation as + +$$ +T(x,t) = \sum_{n=1}^{\infty} C_n\sin\left(\frac{n\pi x}{L}\right)\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], +$$ + +with initial condition + +$$ +T(x,0) = h(x) = \sum_{n=1}^{\infty} C_n\sin\left(\frac{n\pi x}{L}\right). +$$ (eq:BCheat1D) + +With an infinite sum of functions, we can imagine we can satisfy almost all functions $h(x)$. Now the question is: How can we find the coefficients $C_n$ such that {eq}`eq:BCheat1D` is satisfied? That is not very difficult. We see that the argument of the sine-function is at least spanning half a period for $00$.** For positive eigenvalues, the solution consists of oscillating functions, + +$$ +f(x) = c_1\sin(x\sqrt{\lambda}) + c_2\cos(x\sqrt{\lambda}). +$$ + +Because $f'(0)=0$, we find $\left.\partial_x f(x)\right|_{x=0} = c_1\sqrt{\lambda} = 0$, hence $c_1=0$. Because $f'(L)=0$, we find that $c_2\sin(L\sqrt{\lambda})=0$, which leads to + +$$ +\lambda = \left(\frac{n\pi}{L}\right)^2, \quad\text{for } n=1,2,3,\cdots, +$$ + +hence the solution is given by + +$$ +f_n(x) = c_2\cos\left(\frac{n\pi x}{L}\right), \quad\text{for } n=1,2,\cdots . +$$ + +There is an infinite number of eigenvalues, each of which has its own eigenfunction as solution to the problem. + +**Case $\lambda=0$.** For a zero eigenvalue, the solution is given by $f(x)=c_0+c_1x$. Because both $f'(0)$ and $f'(L)$ must be zero, we find that the coefficient $c_1=0$ and only the solution $f(x)=c_0$ exists for $\lambda=0$. This means that $\lambda=0$ is an eigenvalue for this problem! + +**Case $\lambda<0$.** For negative eigenvalues, the solution consists of exponential functions given by + +$$ +f(x) = c_1\exp(x\sqrt{-\lambda}) + c_2\exp(-x\sqrt{-\lambda}). +$$ + +To impose $f'(0)=0$ and $f'(L)=0$ we need + +$$ +f'(x) = \sqrt{-\lambda}\left[c_1\exp(x\sqrt{-\lambda}) - c_2\exp(-x\sqrt{-\lambda})\right]. +$$ + +This leads from $f'(0)=0$ to $c_1=c_2$, and from $f'(L)=0$ we find $c_1=c_2=0$. Hence, there are no negative eigenvalues for this problem. + +The total solution so far is + +$$ +f_n(x) = c_2\cos\left(\frac{n\pi x}{L}\right), \quad\text{for } n=0,1,2,\cdots . +$$ + +Now it is time to solve the time equation. We recognise that this part of the problem is the same as before and we find the solution to be of the form + +$$ +g_n(t) = c_n\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right]. +$$ + +The temperature is given by the product of the two solutions. We can write for every $n$ + +$$ +T_n(x,t) = C_n\cos\left(\frac{n\pi x}{L}\right)\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], \quad n=0,1,2,\cdots . +$$ (eq:T1Dnc) + +Note that $n=0$ is now part of the solution. The temperature as a solution to the heat equation is the sum of all solutions $T_n$ and given by + +$$ +T(x,t) = \sum_{n=0}^{\infty} C_n\cos\left(\frac{n\pi x}{L}\right)\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], +$$ + +with initial condition + +$$ +T(x,0) = h(x) = \sum_{n=0}^{\infty} C_n\cos\left(\frac{n\pi x}{L}\right). +$$ + +What we found for Fourier sine-series in the previous example applies to the Fourier cosine-series as well. Applying Fourier orthogonality of cosine-functions results in the final solution + +$$ +\begin{aligned} +T(x,t) &= \sum_{n=0}^{\infty} C_n\cos\left(\frac{n\pi x}{L}\right)\exp\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], \\ +C_n &= \left\{\begin{array}{ll} +\dfrac{1}{L}\displaystyle\int_{x=0}^{L} h(x)\,\mathrm{d}x, & n=0, \\[3mm] +\dfrac{2}{L}\displaystyle\int_{x=0}^{L} h(x)\cos\left(\frac{n\pi x}{L}\right)\mathrm{d}x, & n=1,2,3,\cdots . +\end{array}\right. +\end{aligned} +$$ + +With these two expressions, we have fully solved a partial differential equation with Neumann boundary conditions. Note that now the temperature does not necessarily go to zero when time goes to infinity. + +## A completely different solution procedure + +### An infinitely long wire with an initial Gaussian temperature distribution + +Solving problems with separation of variables is not always the best solution, e.g., when the temperature distribution at $t=0$ is a Gaussian function. For this example, we assume an infinitely long wire. Hence, we are solving + +$$ +\begin{aligned} +\partial_t T &= \kappa\,\partial_x^2 T, \\ +T(x,0) &= T_0\exp\left(-\frac{x^2}{L^2}\right). +\end{aligned} +$$ (eq:c0time) + +Note that we do not use explicit boundary conditions at the end points, but are satisfied with zero conditions, which seems to make sense from a physical point of view. We can see from the initial condition of {eq}`eq:c0time` that + +$$ +\lim_{x\rightarrow\pm\infty} T(x,t) = 0 . +$$ (eq:endcond) + +The boundary condition at zero time shows that at $x=0$ and $t=0$ the temperature is $T_0$, which is the peak value of the temperature. The constant $L$ in the Gaussian is a measure of the width of the Gaussian function. The actual peak value may change and the width of the Gaussian may change, but we assume that the solution will have a Gaussian structure in space, and we are going to find what its time behaviour then is. Let us propose a solution of the form + +$$ +T(x,t) = f(t)\exp\left(-h(t)x^2\right). +$$ + +The two functions $f(t)$ and $h(t)$ allow for time variations in peak temperature and the time at which the peak occurs. Note that this solution cannot be easily written as a product of a time-dependent function and a space-dependent function as we did in the method of separation of variables. For $h(t)\ge 0$, the temperature will exponentially decrease with increasing $x$. Because we introduce two new time functions that we want to find, we need boundary conditions for them. We can find them from the boundary condition on $T(x,0)$ as + +$$ +f(0) = T_0, \qquad h(0) = \frac{1}{L^2} . +$$ (eq:initchf) + +We substitute the proposed solution in {eq}`eq:Heat1D` and find + +$$ +\begin{aligned} +\exp\left(-h(t)x^2\right)\left[\partial_t f(t) - x^2 f(t)\,\partial_t h(t)\right] &= \kappa\left[4f(t)h^2(t)x^2 - 2f(t)h(t)\right]\exp\left(-h(t)x^2\right), \\ +\partial_t f(t) + 2\kappa f(t)h(t) &= x^2\left[f(t)\,\partial_t h(t) + 4\kappa f(t)h^2(t)\right]. +\end{aligned} +$$ + +Similar to the solution with separation of variables, here we see that the left-hand side of the equation constitutes an equation that can be solved independent from $x$, and the right-hand side does depend on the location. Hence the whole equation can be satisfied for all values of $x$ only when the left-hand side is satisfied independently from the right-hand side and vice versa. We find the following two differential equations, + +$$ +\partial_t f(t) = -2\kappa f(t)h(t), +$$ (eq:eqhf) + +$$ +\partial_t h(t) = -4\kappa h^2(t). +$$ (eq:eqhh) + +The first equation depends on both $f(t)$ and $h(t)$ and must be solved after we solve the equation for $h(t)$. It is not hard to show that + +$$ +h(t) = \frac{1}{4\kappa t + L^2} +$$ + +is a solution to {eq}`eq:eqhh` that satisfies the initial condition of {eq}`eq:initchf` as well. Similarly, it is then not hard to show that + +$$ +f(t) = T_0\frac{L}{\sqrt{4\kappa t + L^2}} +$$ + +satisfies {eq}`eq:eqhf` and satisfies the initial condition of {eq}`eq:initchf`. This solves the problem and we find the temperature along the bar as a function of time as + +$$ +T(x,t) = \frac{T_0 L}{\sqrt{4\kappa t + L^2}}\exp\left(-\frac{x^2}{4\kappa t + L^2}\right). +$$ (eq:TGauss) + +Notice that we have solved the heat equation using the initial condition for $T(x,0)$ at zero time expressed in {eq}`eq:c0time` and end-point conditions at infinity for all times expressed in {eq}`eq:endcond`. We found a solution in terms of a single expression using ordinary functions. It is clear that this problem cannot be easily solved with the method of separation of variables. In the exercises, we find a solution in terms of the Fourier cosine series. The explicit exact solution that we found here gives a better insight in the space-time behaviour of diffusive fields than the solution with separation of variables, and can be analysed. + +### Analysis of the outcome + +**Early time behaviour.** We can see that for zero time, the solution is well behaved, because the square root in time in the denominator goes to $L$ when time goes to zero and the temperature goes to $T_0$ as given as the initial value. If we think about the origin of this heat, it must have come from some negative time, and we can imagine it must have come from time equal to $t=-L^2/(4\kappa)$. In that case the denominator goes to zero and the polynomial term will blow up to infinity. But we can see that for $x\ne 0$, the exponential function has the time in the denominator of its argument and that will bring the temperature to zero at $t=-L^2/(4\kappa)$. The only problematic point is then $x=0$, which must be the location of the origin of the heat. This is characteristic for solutions to the diffusive field equation with a source that is approximated to be localised in a single point. Note that all finite order derivatives to time of this function go to zero at zero time. Another way of saying this is: an exponential function with a negative argument that is inversely proportional to time goes to zero faster than a polynomial of any finite inverse power of time goes to infinity for zero time. Notice that for times $t<-L^2/(4\kappa)$ the solution is no longer physical. The reason is that the square root in the polynomial term will have a negative argument and the outcome of such a square root will be complex, which we regard as non-physical in space-time. You can see that + +$$ +\begin{aligned} +\lim_{t\uparrow -\frac{L^2}{4\kappa}}\exp\left(-\frac{x^2}{4\kappa t + L^2}\right) &= \infty, \\ +\lim_{t\rightarrow -\infty}\exp\left(-\frac{x^2}{4\kappa t + L^2}\right) &= 1, +\end{aligned} +$$ + +from which we conclude that negative infinite time is not a problem for the exponential term, but the negative side of the zero denominator in the exponential function is the problem. In addition, we can see that for any fixed time $t<-L^2/(4\kappa)$ the exponential function is no longer well-behaved as a function of $x$ and grows exponentially for increasing distance. That is a second reason to regard solutions for $t<-L^2/(4\kappa)$ as non-physical. + +**Late time behaviour.** The late-time behaviour is entirely determined by the polynomial function, and hence we conclude that the temperature drops proportional to the inverse square root of time and does not depend on location anymore! The reason is that when $t\rightarrow\infty$, $\exp\left[-x^2/(4\kappa t + L^2)\right]\rightarrow 1$ for any fixed position. Hence, the exponential function is a Gaussian in space, but as a function of time it is zero at zero time and it smoothly goes to 1 at infinite time. Hence, for late times, the exponential function has no more influence on the value of the temperature in the bar. + +**Time to the peak temperature.** We can compute how much time it takes for the temperature to reach its peak value at any point on the bar. To determine the time to the peak value, we take the derivative to time and equate the result to zero. The derivative to time of {eq}`eq:TGauss` is given by + +$$ +\begin{aligned} +\partial_t T(x,t) &= \exp\left(-\frac{x^2}{4\kappa t + L^2}\right)\partial_t\frac{T_0 L}{\sqrt{4\kappa t + L^2}} ++ \frac{T_0 L}{\sqrt{4\kappa t + L^2}}\,\partial_t\exp\left(-\frac{x^2}{4\kappa t + L^2}\right), \\ +&= -\frac{2\kappa T_0 L}{(4\kappa t + L^2)^{3/2}}\exp\left(-\frac{x^2}{4\kappa t + L^2}\right) ++ \frac{4\kappa T_0 L x^2}{(4\kappa t + L^2)^{5/2}}\exp\left(-\frac{x^2}{4\kappa t + L^2}\right). +\end{aligned} +$$ + +This derivative is zero when time is equal to the time to the peak, $t_p$, and this is given by + +$$ +t_p = \frac{2x^2 - L^2}{4\kappa}, +$$ + +from which it is clear that only for $|x|>L/\sqrt{2}$ this happens at positive times. That means that for points on the bar where $|x|L/\sqrt{2}$ the temperature will first rise for $0L/\sqrt{2} . +$$ + +We conclude that the temperature has a maximum value that is inversely proportional to distance $|x|$, and it occurs on the bar for positions $|x|>L/\sqrt{2}$. + +### An infinitely long wire with an initial double Gaussian temperature distribution + +If the initial condition specifies two shifted Gaussians, the solution can be written immediately by understanding that the superposition principle holds. This means that two separate initial conditions each lead to a solution that can be summed and that is equal to the solution we would obtain by specifying the two initial conditions as a single starting point and then solving the equation. Hence, if we have + +$$ +\begin{aligned} +\partial_t T &= \kappa\,\partial_x^2 T, \\ +T(x,0) &= T_0\left[\exp\left(-\frac{(x+2L)^2}{L^2}\right) + \exp\left(-\frac{(x-2L)^2}{L^2}\right)\right], +\end{aligned} +$$ (eq:2c0time) + +the solution can be readily given by + +$$ +T(x,t) = \frac{T_0 L}{\sqrt{4\kappa t + L^2}}\left[\exp\left(-\frac{(x+2L)^2}{4\kappa t + L^2}\right) + \exp\left(-\frac{(x-2L)^2}{4\kappa t + L^2}\right)\right]. +$$ (eq:T2Gauss) + +From this solution, and the fact that the exponential functions are quite distinct for early times but become equal for late times, we can understand that after some time we cannot distinguish between a field that consisted initially of two Gaussians and one that consisted of a single Gaussian temperature distribution. The closer the initial peak values are together, the earlier the blurring is such that the distinction cannot be made anymore. In a nutshell, that is the difficulty with analysing diffusive field signals when we record them to obtain information about the Earth. + +As a last topic, we discuss the inhomogeneous electromagnetic diffusive field equations. This means we are going to put a source somewhere in space and solve Maxwell's diffusive field equations in one and three dimensions. + +## Exercises + +1. Solve {eq}`eq:Heat1D` with boundary conditions $T(x,0)=\tfrac{1}{2}$, $T(0,t)=T(L,t)=0$. +2. Solve {eq}`eq:Heat1D` with boundary conditions $T(x,0)=\tfrac{1}{2}$, $T'(0,t)=T'(L,t)=0$. +3. Solve {eq}`eq:Heat1D` with boundary conditions $T(x,0)=h(x)$, $T(0,t)=T'(L,t)=0$. +4. Python exercise: use the solution structure for {eq}`eq:Heat1D` as found in the first example of a bar of length $L$, hence with $T(0,t)=T(L,t)=0$, but now for $T(x,0)=h(x)=(0,-1,1,0)$ for $(00)$ or sink $(S<0)$, and substitution of Fourier's law in this equation gives + +$$ +\partial_t T - \kappa\nabla^2 T = S, +$$ (eq:Heat) + +where we have assumed constant heat conductivity. This is called a scalar diffusive field, or parabolic, equation, because in all source- and sink-free regions, a first-order time derivative of temperature is equal to a second-order spatial derivative of temperature. This is a general expression for a diffusion equation in three-dimensional space and time. A similar equation exists for other fields, for non-scalar fields as well, and we look at the electromagnetic field diffusion later. We first look at the heat equation in one and three dimensions. diff --git a/book/_toc.yml b/book/_toc.yml index c509667..f391173 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -96,6 +96,12 @@ parts: # - file: extension_exercises/014.md # - file: extension_exercises/015.md # - file: extension_exercises/016.md + - caption: Diffusive fields + chapters: + - file: 3_diffusion_fields/intro.md + sections: + - file: 3_diffusion_fields/heat_equation_1d.md + - file: 3_diffusion_fields/em_diffusion.md - caption: Miscellaneous chapters: - file: references.md From ff7b23609bc439c0a7b5aba565bba04b5be245b8 Mon Sep 17 00:00:00 2001 From: ARS183 <1028762817@qq.com> Date: Tue, 22 Sep 2026 22:36:30 +0200 Subject: [PATCH 3/9] Add the Week 5 diffusive fields lab --- .../labs/figures/bar_boundary_conditions.svg | 1031 +++++++++++++++++ .../labs/figures/make_figures.py | 43 + book/3_diffusion_fields/labs/fwtools.py | 214 ++++ .../labs/week05_diffusion.md | 478 ++++++++ book/_toc.yml | 1 + 5 files changed, 1767 insertions(+) create mode 100644 book/3_diffusion_fields/labs/figures/bar_boundary_conditions.svg create mode 100644 book/3_diffusion_fields/labs/figures/make_figures.py create mode 100644 book/3_diffusion_fields/labs/fwtools.py create mode 100644 book/3_diffusion_fields/labs/week05_diffusion.md diff --git a/book/3_diffusion_fields/labs/figures/bar_boundary_conditions.svg b/book/3_diffusion_fields/labs/figures/bar_boundary_conditions.svg new file mode 100644 index 0000000..fed5034 --- /dev/null +++ b/book/3_diffusion_fields/labs/figures/bar_boundary_conditions.svg @@ -0,0 +1,1031 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.11.1, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/book/3_diffusion_fields/labs/figures/make_figures.py b/book/3_diffusion_fields/labs/figures/make_figures.py new file mode 100644 index 0000000..c4feb72 --- /dev/null +++ b/book/3_diffusion_fields/labs/figures/make_figures.py @@ -0,0 +1,43 @@ +"""Regenerate the schematic of the diffusive-fields lab. Run: python make_figures.py""" +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +from matplotlib.patches import Rectangle, FancyArrowPatch + +INK, BAR, RES, OUT = "#6b7280", "#8a9199", "#00A6D6", "#EC6842" + + +def bar(ax, y, label): + ax.add_patch(Rectangle((0, y - 0.18), 1, 0.36, fc=BAR, ec=INK, alpha=0.35, lw=1)) + ax.text(0.5, y + 0.3, label, ha="center", va="bottom", color=INK, fontsize=10) + + +def arrow(ax, x0, x1, y): + ax.add_patch(FancyArrowPatch((x0, y), (x1, y), arrowstyle="-|>", mutation_scale=14, + color=OUT, lw=2)) + + +fig, ax = plt.subplots(figsize=(6.4, 3.0)) +# Dirichlet: ends clamped to reservoirs at the reference temperature +bar(ax, 1.25, "Example 1: $T(0,t)=T(L,t)=0$, ends held at the reference temperature") +for x0 in (-0.13, 1.0): + ax.add_patch(Rectangle((x0, 0.98), 0.13, 0.54, fc=RES, ec=RES, alpha=0.55)) +ax.text(-0.065, 0.9, "$T=0$", ha="center", va="top", color=INK, fontsize=9) +ax.text(1.065, 0.9, "$T=0$", ha="center", va="top", color=INK, fontsize=9) +arrow(ax, 0.1, -0.2, 1.25); arrow(ax, 0.9, 1.2, 1.25) +ax.text(1.24, 1.25, "heat can\nleave", ha="left", va="center", color=OUT, fontsize=8) + +# Neumann: insulated ends +bar(ax, 0.0, r"Example 2: $\partial_x T(0,t)=\partial_x T(L,t)=0$, insulated ends") +for x0 in (-0.05, 1.0): + ax.add_patch(Rectangle((x0, -0.27), 0.05, 0.54, fc="none", ec=INK, hatch="////", lw=1)) +ax.text(1.12, 0.0, "no flux", ha="left", va="center", color=INK, fontsize=8) + +ax.set_xticks([0, 1], ["$0$", "$L$"]); ax.set_yticks([]) +ax.set_xlim(-0.35, 1.45); ax.set_ylim(-0.5, 1.95) +for s in ("left", "right", "top"): + ax.spines[s].set_visible(False) +ax.spines["bottom"].set_color(INK); ax.tick_params(colors=INK) +ax.set_xlabel("$x$", color=INK) +fig.tight_layout() +fig.savefig("bar_boundary_conditions.svg", transparent=True, metadata={"Date": None}) diff --git a/book/3_diffusion_fields/labs/fwtools.py b/book/3_diffusion_fields/labs/fwtools.py new file mode 100644 index 0000000..972015c --- /dev/null +++ b/book/3_diffusion_fields/labs/fwtools.py @@ -0,0 +1,214 @@ +"""Plotting and self-check helpers for the ECTB2140 *Fields and Waves* labs, +diffusive-fields edition. + +You are **not** expected to read or edit this file during a lab session. It +exists so that your time goes on the physics -- series coefficients, decay +rates, Gaussian kernels -- rather than on plotting boilerplate. + +The self-check functions have the same names and behaviour as in the Lab 1 +and Lab 2 module. Everything here is one-dimensional in space: fields are +arrays of shape (nt, nx), one row per time. + +Requires: numpy, matplotlib, plotly. +""" + +from __future__ import annotations + +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.colors import TwoSlopeNorm +import plotly.graph_objects as go + +__all__ = [ + "show_profiles", "show_spacetime", "show_spacetime_slider", "show_records", + "check", "check_close", "check_abs", "check_scalar", +] + +# -------------------------------------------------------------------------- +# Figures +# -------------------------------------------------------------------------- + +def _fmt(v, fmt): + return fmt.format(v) if isinstance(fmt, str) else fmt(v) + + +def show_profiles(x, frames, values, *, value_name="t", value_fmt="{:.3g}", + unit="", reference=None, reference_name="initial condition", + xlabel="x [m]", ylabel="", title="", ylim=None, height=430, + ms_per_frame=90): + """Profiles over time, with a play button and a draggable progress bar. + + ``frames`` has shape (len(values), nx): row k is drawn at ``values[k]``. + Press play to run from the start, or drag the bar to any instant. Both + run in the browser; nothing here needs the kernel once the figure exists. + """ + frames = np.asarray(frames, float) + x = np.asarray(x, float) + lo, hi = (np.nanmin(frames), np.nanmax(frames)) if ylim is None else ylim + pad = 0.06 * (hi - lo if hi > lo else 1.0) + + fig = go.Figure() + if reference is not None: + fig.add_trace(go.Scatter(x=x, y=reference, mode="lines", name=reference_name, + line=dict(color="#8a9199", dash="dash", width=1.5))) + fig.add_trace(go.Scatter(x=x, y=frames[0], mode="lines", name="profile", + line=dict(color="#00A6D6", width=2.5))) + live = len(fig.data) - 1 + + # One frame per instant. The slider steps address the frames by name, so + # dragging and playing drive the same thing and stay in step. + fig.frames = [go.Frame(name=str(k), data=[go.Scatter(y=row)], traces=[live]) + for k, row in enumerate(frames)] + still = dict(mode="immediate", frame=dict(duration=0, redraw=False), + transition=dict(duration=0)) + steps = [dict(method="animate", label=_fmt(v, value_fmt), args=[[str(k)], still]) + for k, v in enumerate(values)] + + fig.update_layout( + title=title, height=height, margin=dict(l=60, r=20, t=50, b=30), + xaxis_title=xlabel, yaxis_title=ylabel, + yaxis_range=[lo - pad, hi + pad], legend=dict(x=0.99, xanchor="right", y=0.99), + sliders=[dict(active=0, steps=steps, len=0.82, x=0.18, y=0, pad=dict(t=50, b=8), + currentvalue=dict(prefix=f"{value_name} = ", suffix=unit, + font=dict(size=13)))], + updatemenus=[dict(type="buttons", direction="left", showactive=False, + x=0.0, y=0, xanchor="left", yanchor="top", pad=dict(t=55, b=8), + buttons=[ + dict(label="▶ play", method="animate", + args=[None, dict(mode="immediate", fromcurrent=False, + frame=dict(duration=ms_per_frame, redraw=False), + transition=dict(duration=0))]), + dict(label="❚❚", method="animate", args=[[None], still])])]) + fig.show() + + +def show_spacetime(x, t, T, *, t_label="t [s]", x_label="x [m]", c_label="T [K]", + title="", signed=None, log_t=True, marks=None): + """Colour map of T(x, t): time along the horizontal axis, position vertical. + + A signed field gets a diverging colour map centred on zero; a positive one + gets a sequential map. ``marks`` is an optional list of (t, x) points to + overlay, e.g. predicted peak times. + """ + T = np.asarray(T, float) + if signed is None: + signed = np.nanmin(T) < 0 < np.nanmax(T) + fig, ax = plt.subplots(figsize=(8.2, 3.6)) + if signed: + vmax = np.nanmax(np.abs(T)) + im = ax.pcolormesh(t, x, T.T, cmap="RdBu_r", shading="auto", + norm=TwoSlopeNorm(0.0, -vmax, vmax)) + else: + im = ax.pcolormesh(t, x, T.T, cmap="inferno", shading="auto", vmin=0) + if marks is not None: + mt, mx = zip(*marks) + ax.plot(mt, mx, "o", mfc="none", mec="#00A6D6", mew=1.5, ms=7, label="predicted peak") + ax.legend(loc="upper left", fontsize=8) + if log_t: + ax.set_xscale("log") + ax.set_xlabel(t_label); ax.set_ylabel(x_label); ax.set_title(title) + fig.colorbar(im, ax=ax, label=c_label, pad=0.02) + fig.tight_layout() + plt.show() + + +def show_spacetime_slider(x, t, maps, values, *, value_name="a", value_fmt="{:.3g}", + unit="", t_label="t [s]", x_label="x [m]", c_label="T [K]", + title="", marks=None, height=430): + """One space-time map per slider position, for a parameter of the problem. + + ``maps`` has shape (len(values), len(t), len(x)). ``marks[k]`` optionally + draws a vertical line at that time on map k, e.g. a predicted merge time. + The slider updates the map and the line together, client-side. + """ + maps = np.asarray(maps, float) + x, t = np.asarray(x, float), np.asarray(t, float) + zmin, zmax = float(np.nanmin(maps)), float(np.nanmax(maps)) + + def line(k): + if marks is None or not np.isfinite(marks[k]) or marks[k] <= t[0]: + return [] + return [dict(type="line", x0=marks[k], x1=marks[k], y0=x[0], y1=x[-1], + xref="x", yref="y", line=dict(color="#00A6D6", width=2, dash="dash"))] + + fig = go.Figure(go.Heatmap(z=maps[0].T, x=t, y=x, colorscale="Inferno", + zmin=zmin, zmax=zmax, colorbar=dict(title=c_label))) + steps = [dict(method="update", label=_fmt(v, value_fmt), + args=[{"z": [m.T]}, {"shapes": line(k)}]) + for k, (v, m) in enumerate(zip(values, maps))] + fig.update_layout( + title=title, height=height, margin=dict(l=60, r=20, t=50, b=30), + xaxis=dict(title=t_label, type="log"), yaxis_title=x_label, + shapes=line(0), + sliders=[dict(active=0, steps=steps, len=0.82, x=0.12, y=0, pad=dict(t=50, b=8), + currentvalue=dict(prefix=f"{value_name} = ", suffix=unit, + font=dict(size=13)))]) + fig.show() + + +def show_records(t, records, *, t_label="t [s]", y_label="T [K]", title="", + peaks=None, log_t=True): + """Time series at fixed positions, as a thermometer or a receiver records them. + + ``records`` maps a label to an array over ``t``. ``peaks`` optionally maps + the same labels to a predicted (t_peak, value_peak), drawn as an open circle. + """ + fig, ax = plt.subplots(figsize=(8.2, 3.4)) + for k, (lab, y) in enumerate(records.items()): + ax.plot(t, y, color=f"C{k}", lw=2, label=lab) + if peaks and lab in peaks: + ax.plot(*peaks[lab], "o", mfc="none", mec=f"C{k}", mew=1.5, ms=9) + if log_t: + ax.set_xscale("log") + ax.set_xlabel(t_label); ax.set_ylabel(y_label); ax.set_title(title) + ax.grid(alpha=0.3); ax.legend(fontsize=8) + fig.tight_layout() + plt.show() + + +# -------------------------------------------------------------------------- +# Self-checks (same behaviour as the Lab 1 and Lab 2 module) +# -------------------------------------------------------------------------- + +def check(label: str, ok: bool, hint: str = "") -> None: + """Report a pass, or raise with a hint about what to look at.""" + if ok: + print(f" [ok] {label}") + else: + raise AssertionError(f"{label} -- {hint}" if hint else label) + + +def check_close(label: str, got, want, rtol=0.05, where=None, hint: str = "") -> None: + """Compare two arrays where both are finite (and where `where` is True).""" + got, want = np.asarray(got, float), np.broadcast_to(np.asarray(want, float), np.shape(got)) + m = np.isfinite(got) & np.isfinite(want) + if where is not None: + m = m & where + if not m.any(): + raise AssertionError(f"{label} -- nothing left to compare; the mask removed every point") + rel = np.abs(got[m] - want[m]) / np.maximum(np.abs(want[m]), 1e-30) + worst = float(np.max(rel)) + check(f"{label}: worst error {worst:.2%}", worst < rtol, + hint or f"worst relative error {worst:.2%} exceeds {rtol:.0%}") + + +def check_abs(label: str, got, atol, where=None, hint: str = "") -> None: + """Compare an array against zero on an absolute scale, in the field's own units.""" + got = np.asarray(got, float) + m = np.isfinite(got) + if where is not None: + m = m & where + if not m.any(): + raise AssertionError(f"{label} -- nothing left to compare") + worst = float(np.max(np.abs(got[m]))) + check(f"{label}: worst |value| {worst:.2e}", worst < atol, + hint or f"worst deviation {worst:.2e} exceeds {atol:.1e}") + + +def check_scalar(label: str, got: float, want: float, rtol: float = 0.01, + unit: str = "", hint: str = "") -> None: + """Compare two single numbers and report the relative discrepancy.""" + got, want = float(got), float(want) + rel = abs(got - want) / max(abs(want), 1e-30) + check(f"{label}: {got:.4g}{unit} vs {want:.4g}{unit} ({rel:.2%} apart)", + rel < rtol, hint or f"these should agree to better than {rtol:.0%}") diff --git a/book/3_diffusion_fields/labs/week05_diffusion.md b/book/3_diffusion_fields/labs/week05_diffusion.md new file mode 100644 index 0000000..8cf47ff --- /dev/null +++ b/book/3_diffusion_fields/labs/week05_diffusion.md @@ -0,0 +1,478 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 +kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +mystnb: + # Workbook page: the task cells contain `___` blanks by design, so it must + # not be executed at build time. Readers run it themselves with Live Code. + execution_mode: 'off' +--- + +# Lab 5: Diffusive Fields + +:::{admonition} Computer lab +:class: note + +A practical companion to the lecture on [the heat equation in one dimension](../heat_equation_1d.md). Each task states a physical question, gives the steps, and ends with a self-check you can run. + +Everything you write here is plain NumPy. The module `fwtools` only draws and checks: `fw.show_profiles` (a profile per instant, with a play button), `fw.show_spacetime` (a colour map over position and time), `fw.show_records` (time series at fixed positions) and the `fw.check...` functions. Every slider runs in the browser. +::: + +## Learning objectives + +By the end of this lab you should be able to: + +- **Read a separated solution as a set of decaying modes.** Build an initial temperature from a Fourier series, and explain why mode $n$ decays at the rate $\kappa(n\pi/L)^2$, so that fine structure disappears first. +- **Relate the boundary condition to the fate of the heat.** Show that ends held at a fixed temperature let heat leave, while insulated ends conserve it and drive the bar to its mean temperature. +- **Interpret the spreading Gaussian as a measurement.** Predict when and how strongly a thermometer at distance $x$ responds, and quantify how diffusion blurs two sources into one. + +--- + +## Part 0 — Setup + +Run this once. It contains no physics: it fetches two packages the browser lacks and locates `fwtools`. + +```{code-cell} ipython3 +import sys, pathlib + +import numpy as np +import matplotlib.pyplot as plt +from scipy.constants import mu_0, epsilon_0 + +# --- Live Code housekeeping, not part of the physics ----------------------- +try: + import plotly.io as pio +except ModuleNotFoundError: + print("Fetching plotly. A few seconds, and only the first time...") + import micropip + await micropip.install("plotly") + import plotly.io as pio + +try: + import nbformat # noqa: F401 +except ModuleNotFoundError: + import micropip, types + try: + await micropip.install("nbformat") + except Exception: + _nb = types.ModuleType("nbformat") + _nb.__version__ = "5.10.4" + sys.modules["nbformat"] = _nb + +for _p in (".", "book/3_diffusion_fields/labs"): + if (pathlib.Path(_p) / "fwtools.py").exists(): + sys.path.insert(0, _p) + break +try: + import fwtools as fw +except ModuleNotFoundError: + from pyodide.http import pyfetch + _r = await pyfetch("fwtools.py") + pathlib.Path("fwtools.py").write_bytes(await _r.bytes()) + import fwtools as fw + +pio.renderers.default = "plotly_mimetype+notebook" +# --------------------------------------------------------------------------- +print("ready") +``` + +--- + +## Part 1 — A bar of finite length + +A copper bar of length $L = 0.5$ m has thermal diffusivity $\kappa = 1.1\times10^{-4}$ m²/s. Its temperature $T$ is measured from a reference value, so it can be negative. Without sources, the temperature obeys + +$$ \partial_t T = \kappa\,\partial_x^2 T . $$ + +The only time scale the bar has is $L^2/\kappa \approx 38$ min, so the natural clock is the Fourier number $\mathrm{Fo} = \kappa t/L^2$. The two ways of closing the ends lead to different series and to a different final state. + +```{figure} figures/bar_boundary_conditions.svg +:name: fig-lab5-bcs +:width: 80% + +The two bars of this part. In Tasks 1 and 2 the ends are clamped to reservoirs at the reference temperature. In Task 3 they are insulated. +``` + +### Task 1 — build the initial temperature from sines + +With both ends held at $T=0$, separation of variables gives + +$$ T(x,t) = \sum_{n=1}^{\infty} C_n \sin\!\left(\frac{n\pi x}{L}\right) \exp\!\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], \qquad C_n = \frac{2}{L}\int_0^L h(x)\sin\!\left(\frac{n\pi x}{L}\right)\mathrm{d}x , $$ + +where the coefficient formula follows from the orthogonality of the sines. At $t=0$ the series must rebuild the initial temperature $h(x)$. Here $h$ is $0$, $-1$, $1$, $0$ K on the four quarters of the bar. + +1. Compute all $C_n$ at once by projecting $h$ onto every row of `S`. +2. Write the partial sum of the first `m` modes. +3. Drag the slider. **Before you do**, predict which coefficients vanish, using the symmetry of $h$ about $x=L/2$. + +```{code-cell} ipython3 +L, kappa = 0.5, 1.1e-4 # copper bar: length [m], thermal diffusivity [m^2/s] +ncell, N = 1200, 400 # grid cells, number of modes kept +dx = L / ncell +x = (np.arange(ncell) + 0.5) * dx # cell centres, so an integral is a plain sum times dx +n = np.arange(1, N + 1) +S = np.sin(np.outer(n, np.pi * x / L)) # row n-1 is sin(n pi x / L), shape (N, ncell) +h = np.where(x < L/4, 0.0, np.where(x < L/2, -1.0, + np.where(x < 3*L/4, 1.0, 0.0))) # initial temperature [K] +print(f"L^2/kappa = {L**2/kappa:.0f} s; slowest mode, L^2/(kappa pi^2) = {L**2/(kappa*np.pi**2):.0f} s") + +# Task 1 -- two blanks. An integral over the bar is np.sum(...) * dx; summing along +# axis=1 of an (N, ncell) array does all N integrals at once. +C = ___ # all C_n, shape (N,) +partial = lambda m: ___ # sum of the first m modes at t = 0, shape (ncell,) + +# --- given: the partial sums, one per slider position --- +Ns = np.array([1, 2, 4, 6, 10, 20, 40, 100, 400]) +fw.show_profiles(x, np.array([partial(m) for m in Ns]), Ns, value_name="modes kept", + value_fmt="{:d}", reference=h, reference_name="h(x)", + ylabel="T [K]", title="Partial sums of the sine series") +print("C_1 .. C_6 =", np.round(C[:6], 4)) + +# --- self-check (leave this alone) --- +_C_exact = 2 * (2*np.cos(n*np.pi/2) - np.cos(n*np.pi/4) - np.cos(3*n*np.pi/4)) / (np.pi * n) +fw.check_abs("the first 40 C_n match the closed form", C[:40] - _C_exact[:40], 1e-3, + hint="C_n = (2/L) * integral of h(x) sin(n pi x/L) dx, for every n at once") +_away = np.min(np.abs(x[:, None] - np.array([L/4, L/2, 3*L/4])), axis=1) > 0.04 +fw.check_abs("400 modes rebuild h(x) more than 4 cm from a jump", partial(N) - h, 0.02, where=_away, + hint="partial(m) should weight the first m rows of S by the first m coefficients") +``` + +:::{admonition} Solution — Task 1 +:class: dropdown + +```python +C = (2 / L) * np.sum(h * S, axis=1) * dx +partial = lambda m: C[:m] @ S[:m] +``` +::: + +:::{admonition} Only even modes appear, and the overshoot at a jump never shrinks +:class: important dropdown + +$h$ is antisymmetric about $x=L/2$, while $\sin(n\pi x/L)$ is symmetric about that point for odd $n$ and antisymmetric for even $n$. The projection of an antisymmetric function onto a symmetric one is zero, so $C_1=C_3=C_5=\dots=0$. + +Near each jump the partial sums overshoot by about 9% of the jump. At $x=L/2$ the jump is 2 K, so the peak reaches about 1.18 K, whether you keep 10 modes or 100. Adding terms squeezes the overshoot towards the jump without lowering it; at 400 modes it becomes narrower than the grid spacing, and the plotted peak reads slightly lower. This is the Gibbs phenomenon: the series converges at every point, but not uniformly near a discontinuity. +::: + +### Task 2 — let it diffuse + +Every mode keeps its shape and decays with its own time constant + +$$ \tau_n = \frac{L^2}{\kappa\,n^2\pi^2} . $$ + +Mode $n$ dies $n^2$ times faster than mode 1. **Predict** which mode is the last one visible, given the coefficients of Task 1. + +1. Build the decay factors for all times and all modes in one array. +2. Weight each mode by $C_n$ and by its decay, and sum the modes. + +```{code-cell} ipython3 +t = np.logspace(-1, np.log10(0.25 * L**2 / kappa), 90) # 0.1 s .. Fo = 0.25 [s] + +# Task 2 -- two blanks. +D = ___ # exp(-kappa (n pi/L)^2 t), shape (len(t), N) +T = ___ # T(x, t), shape (len(t), nx) + +# --- given: the space-time map, then the profiles as a movie --- +fw.show_spacetime(x, t, T, t_label="t [s]", x_label="x [m]", c_label="T [K]", + title="Ends held at T = 0") +fw.show_profiles(x, T[::2], t[::2], value_name="t", value_fmt="{:.3g}", unit=" s", + reference=h, ylabel="T [K]", title="Ends held at T = 0", ylim=(-1.2, 1.2)) + +# --- self-check (leave this alone) --- +fw.check("T has one row per time and one column per grid cell", np.shape(T) == (len(t), ncell)) +_i1, _i2 = np.argmin(np.abs(t - 0.05*L**2/kappa)), np.argmin(np.abs(t - 0.10*L**2/kappa)) +_A = np.max(np.abs(T), axis=1) +_rate = np.log(_A[_i1] / _A[_i2]) / (t[_i2] - t[_i1]) +fw.check_scalar("late-time decay rate of your T equals kappa (2 pi/L)^2", _rate, + kappa * (2*np.pi/L)**2, rtol=0.01, unit=" 1/s", + hint="each mode needs its own exponent kappa (n pi/L)^2 t") +``` + +:::{admonition} Solution — Task 2 +:class: dropdown + +```python +D = np.exp(-kappa * (n * np.pi / L)**2 * t[:, None]) +T = (C * D) @ S +``` +::: + +:::{admonition} Mode 2 survives, because mode 1 was never there +:class: important dropdown + +The sharp corners of $h$ are made of high modes, and those vanish within seconds: after one second, modes above $n\approx 15$ have decayed by a factor of $e$. By $t\approx 60$ s only $n=2$ and a trace of $n=4$ remain, so the profile has become a single sine wave that shrinks without changing shape. Mode 1 would have decayed four times more slowly still, but $h$ contains none of it. The heat flows out through the clamped ends and between the warm and cold halves, and the bar returns to the reference temperature. + +The measured decay rate is the second eigenvalue, $\kappa(2\pi/L)^2 = 0.0174$ s$^{-1}$. A long-time temperature record thus reveals the lowest mode present, and with it $\kappa/L^2$. +::: + +### Task 3 — insulate the ends + +With $\partial_xT = 0$ at both ends, no heat crosses them. The eigenfunctions become cosines, and $\lambda=0$ is now an eigenvalue: + +$$ T(x,t) = C_0 + \sum_{n=1}^{\infty} C_n \cos\!\left(\frac{n\pi x}{L}\right)\exp\!\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], \qquad C_0 = \frac{1}{L}\int_0^L h\,\mathrm{d}x, \quad C_n = \frac{2}{L}\int_0^L h\cos\!\left(\frac{n\pi x}{L}\right)\mathrm{d}x . $$ + +The initial temperature is now $1$, $-1$, $1$ K on the three thirds of the bar. **Predict** the temperature at late times, and whether the heat content $\int_0^L T\,\mathrm{d}x$ changes. + +```{code-cell} ipython3 +Cc = np.cos(np.outer(n, np.pi * x / L)) # row n-1 is cos(n pi x / L) +h_ins = np.where(x < L/3, 1.0, np.where(x < 2*L/3, -1.0, 1.0)) # initial temperature [K] + +# Task 3 -- three blanks: the cosine version of Tasks 1 and 2. +C0 = ___ # the n = 0 coefficient [K] +Cn = ___ # C_n for n = 1..N, shape (N,) +T_ins = ___ # T(x, t) on the times t, reusing D from Task 2 + +Q = np.sum(T_ins, axis=1) * dx # heat content, per unit area and heat capacity [K m] + +# --- given: the same two views as Task 2, to be compared with it --- +fw.show_spacetime(x, t, T_ins, t_label="t [s]", x_label="x [m]", c_label="T [K]", + title="Insulated ends") +fw.show_profiles(x, T_ins[::2], t[::2], value_name="t", value_fmt="{:.3g}", unit=" s", + reference=h_ins, ylabel="T [K]", title="Insulated ends", ylim=(-1.2, 1.2)) +print(f"heat content: min {Q.min():.6f}, max {Q.max():.6f} K m over {t[0]:.1f} s .. {t[-1]:.0f} s") + +# --- self-check (leave this alone) --- +fw.check_close("heat content stays at L/3 K m at every time", Q, L / 3, rtol=1e-3) +_away3 = np.min(np.abs(x[:, None] - np.array([L/3, 2*L/3])), axis=1) > 0.02 +fw.check_abs("at t = 0.1 s the series still equals h(x) away from the jumps", + T_ins[0] - h_ins, 0.01, where=_away3, + hint="compare your cosine projection with the sine projection of Task 1") +``` + +:::{admonition} Solution — Task 3 +:class: dropdown + +```python +C0 = np.sum(h_ins) * dx / L +Cn = (2 / L) * np.sum(h_ins * Cc, axis=1) * dx +T_ins = C0 + (Cn * D) @ Cc +``` +::: + +:::{admonition} Insulated ends conserve the heat, and the bar settles at its mean +:class: important dropdown + +Every cosine with $n\ge1$ integrates to zero over the bar, so the heat content is $C_0L$ at all times, fixed by $h$ alone. The mode $n=0$ has decay rate zero, so it is all that remains: $T\to C_0 = 1/3$ K everywhere. In Task 2 every eigenvalue was positive and the temperature went to zero, because the clamped ends could absorb or supply heat. The boundary condition, not the equation, decides where the heat ends up. +::: + +--- + +## Part 2 — An infinitely long wire + +Without ends there is no series. For an initial Gaussian $T(x,0) = T_0\exp(-x^2/L^2)$, the lecture notes find the solution in closed form: + +$$ T(x,t) = \frac{T_0 L}{\sqrt{4\kappa t + L^2}}\exp\!\left(-\frac{x^2}{4\kappa t + L^2}\right). $$ + +In this part $L$ is the width of the initial Gaussian, not a length of wire; the code calls it `Lg`. Time enters only through $\kappa t$, which has units of m², so every result below holds for any material. The figures below use $L=3$ m, $-10 kt[0]}, + t_label=r"$\kappa t$ [m$^2$]", y_label="T [K]", + title="Thermometer records; circles mark the predicted peaks") + +# --- self-check (leave this alone) --- +_xw = np.linspace(-2000.0, 2000.0, 200001) +_heat = [np.sum(T_gauss(_xw, k)) * (_xw[1] - _xw[0]) for k in (0.1, 10.0, 1000.0)] +fw.check_close("heat content T0 L sqrt(pi) at kappa t = 0.1, 10, 1000 m^2", + _heat, T0 * Lg * np.sqrt(np.pi), rtol=1e-3, + hint="the prefactor must shrink exactly as fast as the width grows") +_ktf = np.logspace(-1, 3, 4001) +_rec = T_gauss(5.0, _ktf) +fw.check_scalar("your kt_peak(5 m) against the peak of your own record", kt_peak(5.0), + _ktf[np.argmax(_rec)], rtol=0.01, unit=" m^2") +fw.check_scalar("peak temperature at 5 m", np.max(_rec), T0 * Lg / (np.sqrt(2*np.e) * 5.0), + rtol=0.01, unit=" K") +``` + +:::{admonition} Solution — Task 4 +:class: dropdown + +```python +def T_gauss(x, kt): + return T0 * Lg / np.sqrt(4*kt + Lg**2) * np.exp(-x**2 / (4*kt + Lg**2)) + +def kt_peak(x): + return (2*x**2 - Lg**2) / 4 +``` +::: + +:::{admonition} The heat spreads without loss, and a farther thermometer answers later and weaker +:class: important dropdown + +The width grows as $\sqrt{4\kappa t+L^2}$, and the amplitude falls by exactly the same factor, so the area under the profile stays $T_0L\sqrt\pi$. With no ends, no heat is lost; it is only redistributed. At late times the temperature everywhere falls as $t^{-1/2}$. + +The thermometers show the two faces of diffusion. The peak arrives at $\kappa t_p\propto x^2$: twice as far away takes four times as long. Its height falls as $1/\lvert x\rvert$. Inside $\lvert x\rvert2a^2$ the profile has a single maximum, and it becomes ever harder to distinguish from one Gaussian of twice the heat. Sources that are closer together merge sooner, as $a^2$. For $a0 . $$ + +This is the kernel of Part 2 with $\kappa$ replaced by $1/(\sigma\mu)$. The approximation neglects $\varepsilon\,\partial_t\boldsymbol{E}$, which is justified when $t$ is much longer than the charge relaxation time $\tau_r = \varepsilon/\sigma$. + +### Task 6 — when does the field arrive at depth? + +Write the time at which $\lvert E_x\rvert$ at depth $z$ peaks, from $\partial_t\lvert E_x\rvert = 0$. + +```{code-cell} ipython3 +sigma, eps_r, I_s = 0.01, 10.0, 1.0 # sediments [S/m], relative permittivity, current [A/m] +tau_r = eps_r * epsilon_0 / sigma # charge relaxation time [s] +t_em = np.logspace(-7, -1, 3001) # [s] +_depths = [100.0, 300.0, 1000.0] # [m] + +def E_step(z, t): + return -I_s * np.sqrt(mu_0 / (4*np.pi*sigma*t)) * np.exp(-sigma*mu_0*z**2 / (4*t)) + +# Task 6 -- one blank. +def t_peak_em(z): + """Time at which |E_x| at depth z peaks [s].""" + return ___ + +# --- given: normalised records at three depths --- +fw.show_records(t_em, {f"z = {z:g} m": np.abs(E_step(z, t_em)) / np.max(np.abs(E_step(z, t_em))) + for z in _depths}, + peaks={f"z = {z:g} m": (t_peak_em(z), 1.0) for z in _depths}, + t_label="t [s]", y_label=r"$|E_x|$ / peak value", + title=r"Step response at depth, $\sigma$ = 0.01 S/m") +for z in _depths: + print(f"z = {z:6.0f} m: t_p = {t_peak_em(z):.3g} s, t_p / tau_r = {t_peak_em(z)/tau_r:.2g}") + +# --- self-check (leave this alone) --- +for z in _depths: + fw.check_scalar(f"t_p at {z:g} m against the peak of the record", t_peak_em(z), + t_em[np.argmax(np.abs(E_step(z, t_em)))], rtol=0.01, unit=" s") +``` + +:::{admonition} Solution — Task 6 +:class: dropdown + +```python +def t_peak_em(z): + return sigma * mu_0 * z**2 / 2 +``` +::: + +:::{admonition} Depth maps onto arrival time, as $t_p\propto z^2$ +:class: important dropdown + +A layer ten times deeper answers a hundred times later: 63 µs at 100 m, 6.3 ms at 1 km, for $\sigma=0.01$ S/m. Time-domain electromagnetic soundings rest on this: the later part of a record senses the deeper Earth. In a more conductive Earth the arrival is later, since $t_p\propto\sigma$. The ratio $t_p/\tau_r$ is 7000 at 100 m and grows as $z^2$, so neglecting $\varepsilon\,\partial_t\boldsymbol{E}$ is well justified at these depths. The blurring of Task 5 applies here too: deep structure arrives late, and therefore blurred. +::: diff --git a/book/_toc.yml b/book/_toc.yml index f391173..43b5ab1 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -102,6 +102,7 @@ parts: sections: - file: 3_diffusion_fields/heat_equation_1d.md - file: 3_diffusion_fields/em_diffusion.md + - file: 3_diffusion_fields/labs/week05_diffusion.md - caption: Miscellaneous chapters: - file: references.md From 8c0a67af4074da30bdb2383d37154bb76bda73e1 Mon Sep 17 00:00:00 2001 From: ARS183 <1028762817@qq.com> Date: Tue, 22 Sep 2026 23:38:10 +0200 Subject: [PATCH 4/9] Add a Green's function task and animate the Week 5 lab results --- book/3_diffusion_fields/labs/fwtools.py | 45 ++++-- .../labs/week05_diffusion.md | 152 ++++++++++++++++-- 2 files changed, 169 insertions(+), 28 deletions(-) diff --git a/book/3_diffusion_fields/labs/fwtools.py b/book/3_diffusion_fields/labs/fwtools.py index 972015c..3151a1c 100644 --- a/book/3_diffusion_fields/labs/fwtools.py +++ b/book/3_diffusion_fields/labs/fwtools.py @@ -35,30 +35,38 @@ def _fmt(v, fmt): def show_profiles(x, frames, values, *, value_name="t", value_fmt="{:.3g}", unit="", reference=None, reference_name="initial condition", xlabel="x [m]", ylabel="", title="", ylim=None, height=430, - ms_per_frame=90): + ms_per_frame=90, colors=("#00A6D6", "#EC6842", "#7B61FF")): """Profiles over time, with a play button and a draggable progress bar. - ``frames`` has shape (len(values), nx): row k is drawn at ``values[k]``. - Press play to run from the start, or drag the bar to any instant. Both - run in the browser; nothing here needs the kernel once the figure exists. + ``frames`` is either one array of shape (len(values), nx), or a dict + ``{name: array}`` to draw several curves that evolve together. Press play + to run from the start, or drag the bar to any instant. Both run in the + browser; nothing here needs the kernel once the figure exists. """ - frames = np.asarray(frames, float) + if not isinstance(frames, dict): + frames = {"profile": frames} + frames = {k: np.asarray(v, float) for k, v in frames.items()} x = np.asarray(x, float) - lo, hi = (np.nanmin(frames), np.nanmax(frames)) if ylim is None else ylim + allv = np.concatenate([v.ravel() for v in frames.values()]) + lo, hi = (np.nanmin(allv), np.nanmax(allv)) if ylim is None else ylim pad = 0.06 * (hi - lo if hi > lo else 1.0) fig = go.Figure() if reference is not None: fig.add_trace(go.Scatter(x=x, y=reference, mode="lines", name=reference_name, line=dict(color="#8a9199", dash="dash", width=1.5))) - fig.add_trace(go.Scatter(x=x, y=frames[0], mode="lines", name="profile", - line=dict(color="#00A6D6", width=2.5))) - live = len(fig.data) - 1 - - # One frame per instant. The slider steps address the frames by name, so - # dragging and playing drive the same thing and stay in step. - fig.frames = [go.Frame(name=str(k), data=[go.Scatter(y=row)], traces=[live]) - for k, row in enumerate(frames)] + live = [] + for k, (name, arr) in enumerate(frames.items()): + fig.add_trace(go.Scatter(x=x, y=arr[0], mode="lines", name=name, + line=dict(color=colors[k % len(colors)], + width=2.5 if k == 0 else 2.0))) + live.append(len(fig.data) - 1) + + n_steps = len(values) + fig.frames = [go.Frame(name=str(k), + data=[go.Scatter(y=arr[k]) for arr in frames.values()], + traces=live) + for k in range(n_steps)] still = dict(mode="immediate", frame=dict(duration=0, redraw=False), transition=dict(duration=0)) steps = [dict(method="animate", label=_fmt(v, value_fmt), args=[[str(k)], still]) @@ -83,7 +91,8 @@ def show_profiles(x, frames, values, *, value_name="t", value_fmt="{:.3g}", def show_spacetime(x, t, T, *, t_label="t [s]", x_label="x [m]", c_label="T [K]", - title="", signed=None, log_t=True, marks=None): + title="", signed=None, log_t=True, marks=None, curve=None, + curve_label="prediction", deeper_down=False): """Colour map of T(x, t): time along the horizontal axis, position vertical. A signed field gets a diverging colour map centred on zero; a positive one @@ -100,12 +109,18 @@ def show_spacetime(x, t, T, *, t_label="t [s]", x_label="x [m]", c_label="T [K]" norm=TwoSlopeNorm(0.0, -vmax, vmax)) else: im = ax.pcolormesh(t, x, T.T, cmap="inferno", shading="auto", vmin=0) + if curve is not None: + ax.plot(curve[0], curve[1], "--", color="#00A6D6", lw=2, label=curve_label) + ax.legend(loc="upper left", fontsize=8) if marks is not None: mt, mx = zip(*marks) ax.plot(mt, mx, "o", mfc="none", mec="#00A6D6", mew=1.5, ms=7, label="predicted peak") ax.legend(loc="upper left", fontsize=8) if log_t: ax.set_xscale("log") + ax.set_xlim(np.min(t), np.max(t)) # an overlaid curve must not stretch the axis + if deeper_down: # depth axes read downward + ax.invert_yaxis() ax.set_xlabel(t_label); ax.set_ylabel(x_label); ax.set_title(title) fig.colorbar(im, ax=ax, label=c_label, pad=0.02) fig.tight_layout() diff --git a/book/3_diffusion_fields/labs/week05_diffusion.md b/book/3_diffusion_fields/labs/week05_diffusion.md index 8cf47ff..c84d37c 100644 --- a/book/3_diffusion_fields/labs/week05_diffusion.md +++ b/book/3_diffusion_fields/labs/week05_diffusion.md @@ -26,11 +26,9 @@ Everything you write here is plain NumPy. The module `fwtools` only draws and ch ## Learning objectives -By the end of this lab you should be able to: - -- **Read a separated solution as a set of decaying modes.** Build an initial temperature from a Fourier series, and explain why mode $n$ decays at the rate $\kappa(n\pi/L)^2$, so that fine structure disappears first. -- **Relate the boundary condition to the fate of the heat.** Show that ends held at a fixed temperature let heat leave, while insulated ends conserve it and drive the bar to its mean temperature. -- **Interpret the spreading Gaussian as a measurement.** Predict when and how strongly a thermometer at distance $x$ responds, and quantify how diffusion blurs two sources into one. +- **Decaying modes.** Build an initial temperature from a Fourier series and explain why mode $n$ decays at $\kappa(n\pi/L)^2$, so fine structure goes first. +- **Boundaries.** Ends held at a fixed temperature let heat leave; insulated ends conserve it and drive the bar to its mean. +- **Superposition.** Evolve any initial temperature with the Green's function, and turn the $t\propto x^2$ it implies into a measurement: of $\kappa$ in a bar, of depth in the Earth. --- @@ -421,15 +419,129 @@ Once $w^2>2a^2$ the profile has a single maximum, and it becomes ever harder to --- -## Part 3 — The same kernel in the Earth (optional) +## Part 3 — When does the bar discover its ends? + +A point of heat released at $x'$ at $t=0$ spreads on an infinite line as + +$$ G(x-x',t) = \frac{1}{\sqrt{4\pi\kappa t}}\exp\!\left(-\frac{(x-x')^2}{4\kappa t}\right), $$ + +the Green's function of the heat equation. It is the Gaussian of Part 2 in the limit of a source +squeezed to a point, and it carries unit heat at every time. Because the equation is linear, an +arbitrary initial temperature is a continuous superposition of such points, + +$$ T_{\text{free}}(x,t) = \int_0^L G(x-x',t)\,h(x')\,\mathrm{d}x' , $$ + +which is how the lecture notes build the electromagnetic field from its impulse response. + +This solution knows nothing about the ends of the bar, while the series of Part 1 holds $T=0$ at +both of them. Early on the heat has not reached the ends, so the two must agree. **They part when +the bar discovers that it is finite**, and that gives a way to measure $\kappa$. + +### Task 6 — the same heat, with and without ends + +The initial temperature is now a narrow Gaussian bump of width $w=3$ cm, centred a distance $x_c$ +from the near end. Build the free-space solution by superposition: `d2[i, j]` holds the squared +distance between grid points $i$ and $j$, so the kernel is a matrix and the integral is a +matrix-vector product. + +```{code-cell} ipython3 +w_b = 0.03 # width of the initial bump [m] +xs = x[::4] # every fourth cell: 300 points is enough here +dxs = xs[1] - xs[0] +d2 = (xs[:, None] - xs[None, :])**2 # squared distance between grid points [m^2] +t6 = np.logspace(-1, 2.5, 150) # 0.1 s .. 316 s + +# Task 6 -- two blanks. +def T_free(tv, h_on_grid): + """The initial temperature h_on_grid, evolved as if the bar had no ends.""" + G = ___ # the kernel above, evaluated for every pair of points: shape (300, 300) + return ___ # superpose: integrate G against h_on_grid over the bar + +# --- given: the same bump evolved both ways, and where they part company --- +def both_ways(xc): + """(free-space solution, series solution) for a bump centred at xc, on the grid xs.""" + h_b = np.exp(-(x - xc)**2 / w_b**2) + C_b = (2 / L) * np.sum(h_b * S, axis=1) * dx + bar = (C_b * np.exp(-kappa * (n * np.pi / L)**2 * t6[:, None])) @ S + return np.array([T_free(tv, h_b[::4]) for tv in t6]), bar[:, ::4] + +free, bar = both_ways(0.15) +fw.show_profiles(xs, {"the bar, with ends": bar[::3], "no ends": free[::3]}, t6[::3], + value_name="t", value_fmt="{:.3g}", unit=" s", ylabel="T [K]", + title="The same heat, with and without ends") +fw.show_spacetime(xs, t6, np.abs(free - bar), t_label="t [s]", x_label="x [m]", + c_label="|difference| [K]", signed=False, + title="What the ends cost: the two solutions differ from the near end inwards") + +# The instant the two differ by 1% of the peak, for five positions of the bump. +xcs = np.array([0.10, 0.125, 0.15, 0.20, 0.25]) +t_dep = [] +for xc in xcs: + f, b = both_ways(xc) + rel = np.max(np.abs(f - b), axis=1) / np.max(np.abs(f), axis=1) + t_dep.append(t6[np.argmax(rel > 0.01)]) +t_dep = np.array(t_dep) + +slope, intercept = np.polyfit(xcs**2, t_dep, 1) +kappa_fit = 1 / (4 * slope * np.log(100)) +plt.figure(figsize=(5.2, 3.2)) +plt.plot(xcs**2, t_dep, "o", color="#00A6D6", label="measured") +plt.plot(xcs**2, slope * xcs**2 + intercept, "-", color="#8a9199", + label=f"fit: $\\kappa$ = {kappa_fit:.2e} m$^2$/s") +plt.xlabel("$x_c^2$ [m$^2$]"); plt.ylabel("departure time [s]") +plt.grid(alpha=0.3); plt.legend(fontsize=8); plt.tight_layout(); plt.show() +print(f"departure times [s]: {np.round(t_dep, 2)}") +print(f"kappa from the fit: {kappa_fit:.3e} m^2/s (the bar was built with {kappa:.3e})") + +# --- self-check (leave this alone) --- +_h_check = np.exp(-(x - 0.15)**2 / w_b**2)[::4] +fw.check_abs("at t = 0.1 s the superposition reproduces the series solution", + T_free(t6[0], _h_check) - bar[0], 1e-6, + hint="the kernel must carry unit heat: check the 1/sqrt(4 pi kappa t) factor " + "and that the sum over x' is multiplied by dxs") +fw.check_scalar("kappa recovered from the departure times", kappa_fit, kappa, rtol=0.05, + unit=" m^2/s") +``` + +:::{admonition} Solution — Task 6 +:class: dropdown + +```python +def T_free(tv, h_on_grid): + G = np.exp(-d2 / (4 * kappa * tv)) / np.sqrt(4 * np.pi * kappa * tv) + return G @ h_on_grid * dxs +``` +::: + +:::{admonition} The ends are felt when the tail reaches them, and that measures $\kappa$ +:class: important dropdown + +The bump spreads to width $\sqrt{4\kappa t + w^2}$, so the fraction of it that has reached the +near end is $\exp[-x_c^2/(4\kappa t + w^2)]$. Setting that fraction to the 1% threshold gives + +$$ 4\kappa\,t_{\text{dep}} = \frac{x_c^2}{\ln(1/0.01)} - w^2 , $$ + +a straight line in $x_c^2$, which is what the second figure shows. Its slope is +$1/(4\kappa\ln 100)$, so the fit returns $\kappa$ to about 1%, and its intercept is the small +correction $-w^2/(4\kappa)$ for the width the bump started with. + +Two things are worth taking from this. A boundary makes itself felt through the tail of the +distribution, long before the diffusion length $\sqrt{4\kappa t}$ equals the distance to it. +And the same $t\propto x^2$ that set the peak time in Task 4 sets this departure time, because +a diffusive field has only one way to convert a distance into a time. +::: + +--- + +## Part 4 — The same kernel in the Earth -This part looks ahead to the lecture on electromagnetic diffusion. A horizontal current sheet at the surface is switched on at $t=0$ with current $I$ per unit width. In the diffusive approximation the electric field at depth $z$ is +A horizontal current sheet at the surface is switched on at $t=0$ with current $I$ per unit width. In the diffusive approximation the electric field at depth $z$ is $$ E_x(z,t) = -I\sqrt{\frac{\mu}{4\pi\sigma t}}\exp\!\left(-\frac{\sigma\mu z^2}{4t}\right), \qquad t>0 . $$ -This is the kernel of Part 2 with $\kappa$ replaced by $1/(\sigma\mu)$. The approximation neglects $\varepsilon\,\partial_t\boldsymbol{E}$, which is justified when $t$ is much longer than the charge relaxation time $\tau_r = \varepsilon/\sigma$. +This is the kernel of Part 2 with $\kappa$ replaced by $1/(\sigma\mu)$, so the field soaks into the ground exactly as heat spreads along a wire. The approximation neglects $\varepsilon\,\partial_t\boldsymbol{E}$, which is justified when $t$ is much longer than the charge relaxation time $\tau_r = \varepsilon/\sigma$. This is the field a time-domain electromagnetic sounding records. -### Task 6 — when does the field arrive at depth? +### Task 7 — when does the field arrive at depth? Write the time at which $\lvert E_x\rvert$ at depth $z$ peaks, from $\partial_t\lvert E_x\rvert = 0$. @@ -442,12 +554,26 @@ _depths = [100.0, 300.0, 1000.0] # [m] def E_step(z, t): return -I_s * np.sqrt(mu_0 / (4*np.pi*sigma*t)) * np.exp(-sigma*mu_0*z**2 / (4*t)) -# Task 6 -- one blank. +# Task 7 -- one blank. def t_peak_em(z): """Time at which |E_x| at depth z peaks [s].""" return ___ -# --- given: normalised records at three depths --- +# --- given, 1: the field soaking downward. Drag the bar, or press play --- +_zs = np.linspace(1.0, 2000.0, 400) # depth [m] +_tp = np.logspace(-6, -1.3, 60) # [s] +_prof = np.array([np.abs(E_step(_zs, tv)) / np.abs(E_step(1.0, tv)) for tv in _tp]) +fw.show_profiles(_zs, _prof, _tp, value_name="t", value_fmt="{:.2g}", unit=" s", + xlabel="depth z [m]", ylabel=r"$|E_x|$ / its value at the surface", + title="The field diffuses into the Earth", ylim=(0.0, 1.05)) + +# --- given, 2: depth against time, with your arrival-time curve over it --- +fw.show_spacetime(_zs, _tp, _prof, t_label="t [s]", x_label="depth z [m]", + c_label=r"$|E_x|$ / surface value", signed=False, + curve=(t_peak_em(_zs), _zs), curve_label=r"your $t_p(z)$", deeper_down=True, + title=r"Deeper means later: $t_p \propto z^2$") + +# --- given, 3: what a receiver records at three depths --- fw.show_records(t_em, {f"z = {z:g} m": np.abs(E_step(z, t_em)) / np.max(np.abs(E_step(z, t_em))) for z in _depths}, peaks={f"z = {z:g} m": (t_peak_em(z), 1.0) for z in _depths}, @@ -462,7 +588,7 @@ for z in _depths: t_em[np.argmax(np.abs(E_step(z, t_em)))], rtol=0.01, unit=" s") ``` -:::{admonition} Solution — Task 6 +:::{admonition} Solution — Task 7 :class: dropdown ```python @@ -474,5 +600,5 @@ def t_peak_em(z): :::{admonition} Depth maps onto arrival time, as $t_p\propto z^2$ :class: important dropdown -A layer ten times deeper answers a hundred times later: 63 µs at 100 m, 6.3 ms at 1 km, for $\sigma=0.01$ S/m. Time-domain electromagnetic soundings rest on this: the later part of a record senses the deeper Earth. In a more conductive Earth the arrival is later, since $t_p\propto\sigma$. The ratio $t_p/\tau_r$ is 7000 at 100 m and grows as $z^2$, so neglecting $\varepsilon\,\partial_t\boldsymbol{E}$ is well justified at these depths. The blurring of Task 5 applies here too: deep structure arrives late, and therefore blurred. +A layer ten times deeper answers a hundred times later: 63 µs at 100 m, 6.3 ms at 1 km, for $\sigma=0.01$ S/m. On the map your curve $t_p(z)$ runs along the shoulder of the diffusing field, because $|E_x|$ has fallen to $1/\sqrt e$ of its surface value exactly where $t = \sigma\mu z^2/2$. Time-domain electromagnetic soundings rest on this: the later part of a record senses the deeper Earth. In a more conductive Earth the arrival is later, since $t_p\propto\sigma$. The ratio $t_p/\tau_r$ is 7000 at 100 m and grows as $z^2$, so neglecting $\varepsilon\,\partial_t\boldsymbol{E}$ is well justified at these depths. The blurring of Task 5 applies here too: deep structure arrives late, and therefore blurred. ::: From d2b7a61571faa43dc1ce6aef7b3821ec5d27a975 Mon Sep 17 00:00:00 2001 From: ARS183 <1028762817@qq.com> Date: Mon, 28 Sep 2026 21:51:49 +0200 Subject: [PATCH 5/9] Update the spatial derivatives chapter to the 28 September lecture notes --- book/1_gradient_divergence_curl/curl.md | 50 +++++++++++++++++++ book/1_gradient_divergence_curl/divergence.md | 31 +++++++----- 2 files changed, 69 insertions(+), 12 deletions(-) diff --git a/book/1_gradient_divergence_curl/curl.md b/book/1_gradient_divergence_curl/curl.md index 7d4e1fe..e763c67 100644 --- a/book/1_gradient_divergence_curl/curl.md +++ b/book/1_gradient_divergence_curl/curl.md @@ -120,6 +120,56 @@ $$ (eq:divvecprod) The divergence of a vector product of two functions takes the curl of each of them, computes the scalar product with the other, and subtracts the results. +## The magnetic field around an infinite current carrying wire + +In the chapter on Potential Fields you will investigate this problem a bit deeper, but here we use it to illustrate that a field that circulates around another field does not have a non-zero curl everywhere, and that it can have zero divergence as well. Let us take an infinitely long current carrying wire along the vertical axis. That makes it a two-dimensional problem, because nothing is changing in the $z$-direction. In cylindrical coordinates the magnetic field is given by + +$$ +\boldsymbol H = \frac{I}{2\pi\varrho}\hat{\boldsymbol\phi}, +$$ (eq:HJcyl) + +which in Cartesian coordinates is written as + +$$ +\boldsymbol H = \frac{I}{2\pi\varrho^2}\left(-y\,\hat{\boldsymbol x} + x\,\hat{\boldsymbol y}\right). +$$ (eq:HJcart) + +The curl of this magnetic field has only a vertical component, as you can imagine from Ampère's law, because it states that $\nabla\times\boldsymbol H = \boldsymbol J$, with $\boldsymbol J$ the electric current density in the wire. We have to look only at the vertical component, because $\boldsymbol J$ has only a vertical component. We find + +$$ +\hat{\boldsymbol z}\cdot(\nabla\times\boldsymbol H) = \partial_x H_y - \partial_y H_x = \frac{I}{2\pi}\left(\partial_y\frac{y}{\varrho^2} + \partial_x\frac{x}{\varrho^2}\right) = 0, \qquad \text{for } \varrho>0 . +$$ + +We find that the magnetic field is curl-free everywhere outside the wire. The field rotates around the wire but it has zero curl. If we take the divergence of the magnetic field, we find + +$$ +\nabla\cdot\boldsymbol H = \partial_x H_x + \partial_y H_y = \frac{I}{2\pi}\left(-\partial_x\frac{y}{\varrho^2} + \partial_y\frac{x}{\varrho^2}\right) = 0, \qquad \text{for } \varrho>0 . +$$ + +We find that the magnetic field is divergence free as well, everywhere outside the wire. We investigate what happens at the wire. For that we take a planar circular area in the $(x,y)$-plane, as a cross-section that goes through the wire, but we do not specify the radius. We multiply Ampère's law with a unit vector in the vertical direction and integrate over the surface area $\mathbb{S}$ to find + +$$ +\int_{\mathbb{S}}\hat{\boldsymbol z}\cdot(\nabla\times\boldsymbol H)\,\mathrm{d}x\,\mathrm{d}y = \int_{\mathbb{S}}\hat{\boldsymbol z}\cdot\boldsymbol J\,\mathrm{d}x\,\mathrm{d}y . +$$ + +The right-hand side is identified as the current $I$ running in the wire, and we use Stokes' theorem on the left-hand side to arrive at + +$$ +\oint_{\partial\mathbb{S}}\boldsymbol\tau\cdot\boldsymbol H\,\mathrm{d}l . +$$ + +This is a line integral around the full circle, which is the boundary of the circular surface area that we started out with, and $\boldsymbol\tau$ is the unit tangent vector. In cylindrical coordinates, $\boldsymbol\tau\,\mathrm{d}l = \hat{\boldsymbol\phi}\,\varrho\,\mathrm{d}\phi$. Substituting this together with the expression of the magnetic field in {eq}`eq:HJcyl` in the above equation results in + +$$ +\oint_{\partial\mathbb{S}}\boldsymbol\tau\cdot\boldsymbol H\,\mathrm{d}l = \frac{I}{2\pi}\int_{\phi=0}^{2\pi}\mathrm{d}\phi = I, +$$ + +which is equal to the surface integral with the normal component of the current. In conclusion, the magnetic field has zero curl at any point outside the wire, but the line integral around any circle around the wire of the tangential component of the magnetic field is equal to the current flowing in the wire. This will come back when we discuss Potential Fields, and again when we discuss Electromagnetic Fields. + +## Sources of non-zero curl + +Rigid rotation and shear are two known causes for generating a field with non-zero curl. + ## Exercises 1. Use Stokes' theorem to evaluate $\oint_{\boldsymbol r}\boldsymbol\tau\,\mathrm{d}l$, where $\boldsymbol\tau$ is the unit tangent along the closed boundary of the area $\mathbb{S}$. The integration runs in the direction of circulation that forms a right-handed system with the unit normal vector on $\mathbb{S}$. diff --git a/book/1_gradient_divergence_curl/divergence.md b/book/1_gradient_divergence_curl/divergence.md index 616aaa3..035de39 100644 --- a/book/1_gradient_divergence_curl/divergence.md +++ b/book/1_gradient_divergence_curl/divergence.md @@ -201,7 +201,7 @@ In a constant-density environment the flow field must be radial away from the so $$ \boldsymbol v = f(r)\,\boldsymbol r . -$$ +$$ (eq:incflow) The function $f(r)$ depends only on the radial distance $r=\sqrt{x^2+y^2+z^2}$. We can find $f(r)$ by requiring that the flow is divergence free, @@ -209,13 +209,19 @@ $$ \nabla\cdot\boldsymbol v = 3f(r) + \boldsymbol r\cdot\nabla f(r) = 0, \qquad \text{for } r\ne 0 . $$ -This gives +We push this expression one step further and use the chain rule for differentiation to find that $\nabla f(r) = \partial_r f(r)\,(\nabla r)$. Substituting this in the above equation, with the result for the gradient of $r$ of {eq}`eq:gradr`, we find that + +$$ +\nabla\cdot\boldsymbol v = 3f(r) + r\,\partial_r f(r) = 0, \qquad \text{for } r\ne 0 . +$$ (eq:iflowrad) + +Now we recognise that we have an expression in spherical coordinates. The solution for $f(r)$ is $$ f(r) = \frac{A}{r^3}, $$ (eq:NF) -where $A$ is a constant that is determined by the source or sink. +where $A$ is a constant that is determined by the source or sink. This means that the flow is radial and inversely proportional to distance squared. ## Electric potential, electric field, and electric current @@ -339,7 +345,8 @@ For this particular solution $\nabla\cdot\boldsymbol B = 0$ for all points in sp 1. If $(\boldsymbol v\cdot\hat{\boldsymbol n})\hat{\boldsymbol n}$ in {eq}`eq:vflux` is the fraction of $\boldsymbol v$ that leaves the volume $\mathbb{D}$ through the surface $\mathbb{S}$, what is the fraction of the flow that does not leave the volume $\mathbb{D}$? 2. Carry out the differentiations to show that the expression for $f(r)$ in {eq}`eq:NF` is correct. -3. The total current that can be injected into the ground must run in a cable from the source (battery and signal conditioner) to the ground. Once it is in the ground it is free to go anywhere, but the total volume integral must remain equal to the current that runs in the cable, because of the continuity of electric current. We have used the symbol $I$ to denote the total current, and in {eq}`eq:Icur` you have seen a sequence of expressions that resulted in finding the unknown coefficient $A$. +3. In spherical coordinates, the component $v_r$ is the only non-zero component of an incompressible flow vector as given in {eq}`eq:incflow`, which can then be written as $\boldsymbol v = v_r\hat{\boldsymbol r} = r f(r)\hat{\boldsymbol r}$. Apply the divergence in spherical coordinates of {eq}`eq:divcurvi` to arrive at the same expression given in {eq}`eq:iflowrad`. +4. The total current that can be injected into the ground must run in a cable from the source (battery and signal conditioner) to the ground. Once it is in the ground it is free to go anywhere, but the total volume integral must remain equal to the current that runs in the cable, because of the continuity of electric current. We have used the symbol $I$ to denote the total current, and in {eq}`eq:Icur` you have seen a sequence of expressions that resulted in finding the unknown coefficient $A$. Another way of finding this result is by observing that the electric potential is the solution of {eq}`eq:laplV` under the condition that a current is injected at the origin. Hence the actual problem is obtained if you take the divergence of both sides of {eq}`eq:Ohm`. This results in $\nabla\cdot\boldsymbol E = \rho\,\nabla\cdot\boldsymbol J$. Integrate both sides of this equation over a spherical volume with fixed radius $r$ and use Gauss' theorem to show that @@ -354,20 +361,20 @@ For this particular solution $\nabla\cdot\boldsymbol B = 0$ for all points in sp $$ Substitute the solution proposed for $V$ of {eq}`eq:pot` with $B=0$ in this equation to verify that $A=\rho I/(4\pi)$. -4. Evaluate the gradient of the potential expressed in {eq}`eq:Vpdp` and give the expression for the electric current density in the ground at and below the ground surface. Write a Python script that computes the electric potential and the electric current density on the ground surface and in a vertical cross-section, and reproduce the plots of {numref}`fig-dcpoth` and {numref}`fig-dcpotv`. Normalise distance to the electrode spacing $a$ and avoid the points $x=\pm a/2$. You can choose any colour map you like for the potential and choose a contrasting colour for the arrows representing the current lines and directions. -5. The electric field associated with the electric potential given in {eq}`eq:Vpdp` can be evaluated by taking the gradient of the potential, because of {eq}`eq:EgradV`. Give an argument why the flux integral of the electric field $\int_{\mathbb{S}}\hat{\boldsymbol n}\cdot\boldsymbol E\,\mathrm{d}S = 0$ for every closed and piecewise smooth surface that does not include the current injection and extraction points $x=\pm a/2$. -6. Verify that the magnetic field expressed in {eq}`eq:magB` is divergence free for all points in space. -7. Show that the divergence of a vector field in cylindrical and in spherical coordinates is given by {eq}`eq:divcurvi`. Remember that in cylindrical coordinates $\varrho=\sqrt{x^2+y^2}$ and in spherical coordinates $r=\sqrt{x^2+y^2+z^2}$! -8. Derive the expressions for Gauss' theorem in cylindrical coordinates, in analogy with {eq}`eq:gauss-sphereseg` and {eq}`eq:gauss-sphere`. -9. Consider a general flow field $\boldsymbol v(\boldsymbol r) = \left(v_x(y,z),\,v_y(x,z),\,v_z(x,y)\right)$ flowing in an open space containing a closed surface $\mathbb{S}$. Evaluate the flux integral $\int_{\mathbb{S}}\hat{\boldsymbol n}\cdot\boldsymbol v\,\mathrm{d}S$. -10. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\,p(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $p(\boldsymbol r)$ is a continuously differentiable scalar function, Gauss' integral theorem gives +5. Evaluate the gradient of the potential expressed in {eq}`eq:Vpdp` and give the expression for the electric current density in the ground at and below the ground surface. Write a Python script that computes the electric potential and the electric current density on the ground surface and in a vertical cross-section, and reproduce the plots of {numref}`fig-dcpoth` and {numref}`fig-dcpotv`. Normalise distance to the electrode spacing $a$ and avoid the points $x=\pm a/2$. You can choose any colour map you like for the potential and choose a contrasting colour for the arrows representing the current lines and directions. +6. The electric field associated with the electric potential given in {eq}`eq:Vpdp` can be evaluated by taking the gradient of the potential, because of {eq}`eq:EgradV`. Give an argument why the flux integral of the electric field $\int_{\mathbb{S}}\hat{\boldsymbol n}\cdot\boldsymbol E\,\mathrm{d}S = 0$ for every closed and piecewise smooth surface that does not include the current injection and extraction points $x=\pm a/2$. +7. Verify that the magnetic field expressed in {eq}`eq:magB` is divergence free for all points in space. +8. Show that the divergence of a vector field in cylindrical and in spherical coordinates is given by {eq}`eq:divcurvi`. Remember that in cylindrical coordinates $\varrho=\sqrt{x^2+y^2}$ and in spherical coordinates $r=\sqrt{x^2+y^2+z^2}$! +9. Derive the expressions for Gauss' theorem in cylindrical coordinates, in analogy with {eq}`eq:gauss-sphereseg` and {eq}`eq:gauss-sphere`. +10. Consider a general flow field $\boldsymbol v(\boldsymbol r) = \left(v_x(y,z),\,v_y(x,z),\,v_z(x,y)\right)$ flowing in an open space containing a closed surface $\mathbb{S}$. Evaluate the flux integral $\int_{\mathbb{S}}\hat{\boldsymbol n}\cdot\boldsymbol v\,\mathrm{d}S$. +11. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\,p(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $p(\boldsymbol r)$ is a continuously differentiable scalar function, Gauss' integral theorem gives $$ \int_{\mathbb{S}}p\,\hat{\boldsymbol n}\,\mathrm{d}S = \int_{\mathbb{D}}\nabla p\,\mathrm{d}V, $$ which is Gauss' theorem for the gradient. -11. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\times\boldsymbol w(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $\boldsymbol w(\boldsymbol r)$ is a continuously differentiable vector function, Gauss' integral theorem gives +12. Show that when $\boldsymbol v(\boldsymbol r) = \boldsymbol a\times\boldsymbol w(\boldsymbol r)$, where $\boldsymbol a$ is an arbitrary constant vector and $\boldsymbol w(\boldsymbol r)$ is a continuously differentiable vector function, Gauss' integral theorem gives $$ \int_{\mathbb{S}}\hat{\boldsymbol n}\times\boldsymbol w\,\mathrm{d}S = \int_{\mathbb{D}}\nabla\times\boldsymbol w\,\mathrm{d}V, From 2232e61c2fe6bc5cdd8e7a76713d760ce14150a4 Mon Sep 17 00:00:00 2001 From: ARS183 <1028762817@qq.com> Date: Mon, 28 Sep 2026 21:51:49 +0200 Subject: [PATCH 6/9] Update the diffusive fields chapter to the 28 September lecture notes --- book/3_diffusion_fields/em_diffusion.md | 2 +- book/3_diffusion_fields/figures/GHeat.png | Bin 0 -> 125276 bytes book/3_diffusion_fields/figures/GHeatA.png | Bin 0 -> 115990 bytes book/3_diffusion_fields/heat_equation_1d.md | 112 ++++++++++++++++++-- 4 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 book/3_diffusion_fields/figures/GHeat.png create mode 100644 book/3_diffusion_fields/figures/GHeatA.png diff --git a/book/3_diffusion_fields/em_diffusion.md b/book/3_diffusion_fields/em_diffusion.md index 299ec50..73133a8 100644 --- a/book/3_diffusion_fields/em_diffusion.md +++ b/book/3_diffusion_fields/em_diffusion.md @@ -100,7 +100,7 @@ You recognise the similarity with the solution to the heat equation with a Gauss ## Solution using Fourier transformation -In the course on Signals and Time Series, you have learned Fourier series and the Fourier transformation. In the heat equation for a finite-length wire, we use Fourier series to find solutions, but we can solve partial differential equations with a non-zero source term more formally with the aid of Fourier transformations. We do this by transforming {eq}`eq:dee` to the frequency domain using +In the course on Signals and Time Series, you have learned Fourier series and the Fourier transformation. In the heat equation for a finite-length wire, we use Fourier series to find solutions. We then showed that for an infinitely long wire that has a Gaussian temperature distribution at zero time, a solution in terms of Fourier series is possible as well. We also showed that if we let the distance between two frequency values go to zero, the Fourier transformation is found. But we can solve partial differential equations with a non-zero source term more formally with the aid of Fourier transformations. We do this by transforming {eq}`eq:dee` to the frequency domain using $$ \hat{\boldsymbol E}(z,\omega) = \int_{t=0}^{\infty}\exp(-\mathrm{i}\omega t)\,\boldsymbol E(z,t)\,\mathrm{d}t, diff --git a/book/3_diffusion_fields/figures/GHeat.png b/book/3_diffusion_fields/figures/GHeat.png new file mode 100644 index 0000000000000000000000000000000000000000..b648c93b9a288aa0118c7e77cc3fd032d9988a22 GIT binary patch literal 125276 zcmY&=2|QG9`~E2HN+~LP60&E_*hBVx-<36Mc4Lok2_bvPl6{wLCSyyojeQ*qrW#9( zCB$SIe$VLrzVH8k`t+$zXU^Q`Irnni*L^)AwKNnjU!=VVfj}-RE6M9XAZMc?5OVqR zXTg~YbB+P<2brgi;v=%D9_|qEkF!rz73Cqvq+dDBMTy|dh387fo)8G*7t(Js*CB5y zaFW?e!N^P3&CbjBiH9vjQA>?k(ZS8r%hTH9*>f-E2mHMJ!n_YUuYREbmqL`~W%c~t zug+S&;hqYbBv=kMH~JEI2`Osnx$^5tXf74D657YA?Z(sfN{e@{BwYM>Qw8F*|KuvG ziV%^1@ARGJWCR1*g`u*USEn9!e_j`1o@yiic_HEIbdbYE{%>ZdbsyhiW{$j{cr8y$ z9r{gd4|eUW~6K#Rbj1k)``%CA#BS%Av_-$ysj=!_3lUvDST}hP_nwu{9aw zvw-Cu$}o%AXD_vlv)ms^Wehyp&JH<7v=Y~f44RkZnD&Q!rFKd*gSPEMcI~lyFD?JP ztP1&dn(5Dn$d*%=q>s0yk84(zm<}ep=Jx6>59+bP<4pOuhaV_9FGEH@t%LOnKUy@u zwkNu>eg*=$^yC)G3z|ITZ1AVq@^~M;5wcsG-F!SX7;F$sM28S@v#y57*-F1GLs`ui zww8xKZYE2IU=QX9WY=KBO7?FfasLS15{0PYkf$LKwdvAE@W<=d^4hEi2M0B+t(Kfx zNp{dolv7nRTX>sH0_$*%I((v=f}g@-4Uc9B zL1I!;B4czAqZm951mYkNrT_^wVO3@U)=(+L5BqfCs-4~3R1p~AY2LqfSaD5opMs3# z#>xzbl{mBgJ(+W%8=Sl)dW%BkOjIB?H8V4lZt$Kmi@m-5O9VLkl@R1kU-Vr1@719q zcZ|p({Ei|SJzmg$qCb{!?|fLYE$+v|l*GjAX&OZdtUahTHf5H)VWn5?Pu5!?Wq~_o zmKBYcAe>+JE`JuP6o)`Qv!aH`Aa9ftp+)f~E9<}dIuNWH_=Xoy3wUzMmr_w$#xDuWH{{0PC z@K#8N!}XIdQA%Jn+-p$C>E3RtpT_U_djto!)bvj|r-*+{VvDsFla@~9r*M;4LavXu zA`l2$@YrjEWAeaNrl!&)U|aI?DTJ7fgPP{%AY6k8!P;E?mYX}h>aAC#8;wa1Zqqg! z7$vY$z4|^*`%F3EHSXcox3<%;opD31*(Gq{4Fy9NOKeqPEbMxxrD^^5rWzuY9$Y+W z@w@-4AAGGTDpzS>U_hs9I{X}^jlI2MAhxQGQp9XS#5{pjAfvysvklt1k;{=VI;soX zn(rC+k@5;E0Zp>9PL#Ubg zR%TyU2*xtd({rdQ#68Y4vz8cyZ#n*Wcnb2Fg#m;D?iOZA|fRmJ4IS>*gML($4~sS;*x;2|vll#eTu;?(XKJ@%Ncv z>#S-C^1B2=z1pwWX6uP)ivX933$z(;9^Vy{kT45)sx`l*@f-NVmqZGY9pJ*Z-INo` z>t{FpxIvkPFB`Dgn ztWV5zx0&RzzyCgghNh-r3tI(u#Fa{XWl+Sn1lJnA<)u-rvQz zEw!|dr3C+UsJ)MK5u&Y_9bER}jKz&*U2wFPqR_lj9d}ziYpYeRYiI1q8+1GDI>BN0;>iWZbKpk(I)>mA;>ZGWsW=Za0_4 z@KvoAoaX}qOx>C`Uo{bTF%6c3z>j2@1VG77?roe1tMF2rDY?P3_axDq{gy$G__CF% zw3h?QZ?s_$WZ4vMa`S<~K~>uu1+d>gwb#)GVrlOQ8q0-mz@lxz#*^^BkW=R_jV=oj zyuTD~b4KN&1O}tboSZ++eNTwp_KAN|h?|MZx_!>1N8RtOF~_>+rv*{xjl=I;|U${ev4Hl?8idHcwQp*>w$lO}3?;e20-g zPGyBzhU&;G_?a%;rr!e0X%tr94Jpyd`kZ_jEk4OJDArDTKxtBjlIa(d!7=5YC$-oznn|KcNUqgt{=r4i!;N&^J+A|5caJTPUCA; zm2PCJw#dZ5aQ`4pks3F+-Bh43ZODUKhh;S#?c+tW8iU_V=U!OSAFXQ7TIv}XhoJmIf3=ZLyeU|j8H5D^6^3&h^K(i2Gi6AK{DT{PgOL`|P0hFdC6Wmjg4CN|xEs_Z;Rz+uMZAef*DGide7L`rv3Be-R)1M zo`+(wi2*J}-gBd@>d>lme+CP+nWC7yrh|tRa!!L~cu-Tln^$}qM>YtlY|G)y9A0l~ z!W7_U8(t0=?_NUC?JE(g=;(*Br0CTe;=s>D;U4-%A~>Q12>KbF*B}s)4-^cL93Qy) z6~6g~+E3Vxs=lZ#3C$~4u6X(MUo1NsvYe4^QJMZK9}jn4?n0(R=U%mc@WAf)H_!Mk z@YYZ`53l*?vVT(GWk1~F4XsGGipKeYhpj@JP7OTWa!M|b#23Z_XP<_Rf5rb|;bJYb zY_`w@rA1JXuF~lXOgK}+a2J#mU?^%(g8qtOrC>w%fJ(sJD?CHW8Cho1qAz9Rk!jMZ zc~Arm2BoXbjDLKIWcoM>ZxoM}imxc3QnBaTwLmp0sAn>EVxC_PnA5Qk7Z>NU)U}=6 z;Ve)0LJ79PKRW(U9#7#R8W~>iGHt~Uj1XYfZKZJcZ6oWf;(5^GGj*T# zo{T#IC--pK=oiJB!CV(^6Ew3Vl!LO|$ssb{9CGI%#d;G={^}n~^^~$AGhRwKk=LzJ z4o^9=ojZ4~f$hS!nx9BBQ<;!UlUS^7@r|U711@$yXQai9g)U3)QUordSQ>MxH zu93@rkKEPAP_#dPRxavtSg&t7$c3qFpLG@WO_4`nnmHAcfzzk;+f8H{Mtl6j87-W+ z_1xSrj9DwTxlSgHWNwmg>(cG2tfd7Mtw~Wi9qv3Nbmb~Qe9UqPOn*>Ul?te}j%5gS z`mUPBMlRW_kqc>R@VzFKF0$(9eDe|vWu%u&HKOCsy9XD z>2kHJ8e|%?OE#kMOE4}~WgeQbER7;VUn4$7B%7Gavf`{-9Ku_rYHDE2n`@BVHNNk3 zeD8&aUG7QNIZ-t>F0FHEBV*g8$^bYRpNl2{(7fQ}ELF8tZmKV2G`8k*$voS+VJ_zJ z-P>_pFQ*&S>nHTDFH0OVO8Ditm_Bp94RUTB_1{czNH+buo(o{v?d|Qdm*urIKCT&t zmO=GH)uu_y#xs$tAUo}^lo=+zRNsiWp8=hl<`|qG-KkDTmnv6DT<kdC5fAtF@f7+OUukZoZ*qHY}sAO)7__C#k-%aP}pmLVTZ{pqRLL zB1aT0I>a1!*91~rG>RoMSE&=XIgaGZTB2^jV^V_kUT#iUz$Oxm30M9I!6u}Ptq$+R zv6)Bop3U>|@iC}0O-glHN{*zvm;SstoJcAtdeK(bAUQfP{Hus34nYQ80Pk%2&HPd0 zFgHUd2estBX2`F&ZO&>JgNZ%Nqz(3bkPT&YP_0BZ3 z0mur%OiAiBRK#LyYwE(48mzSEs5k(i5PopdvxI-S$0H(Jg}&b9Zcw?PHJ1C2(p7Q* znhfWRUBO+gnp|R`8+x(19K!Dg|Hv7;Ag`oSD`>9}5|D#jbTur_O>-Y$|FhepWuxjn zvzVkLFxAqb5!8as%}o^gF9dxFZ+^=fxw^4YMeXciZYVM6v^J0b5xdc2!%{n?<|LL0 zLe8DOm-LAXk4*QguXJMUN@{=WnPA>XmzP~eKbd`4#XIHGEGPH?)Pv#)gINaP43=4q zzj8TBS6$n@X(AZ`G-C6knbH6W4J1VpJlOiPX}#>zSa2{z4yxVrhe?AWN827=UaSB> zVr(pKC;;qBJ04ea%PpheXV@0BAoJ!M>7PTt@xP!WHBrtFtDMhQ{_jg^(!g4x&d9!X zVh9Izw}00PI4CMADwwPcmzpE)|Yxmof;Sk8p>QPheM{mMmTWS&uJz3m1pR3uM5u8G6(DDqPrQ{`;)9k~%aCNk}&`nbGJ6;3P zuji^QWjmf(4=@pEc_*Yhb2&K8_id{`!&R!#TxL>kiQH@#4~R$OtlyWHpOsj9czEde zTVh5isXOULZkYF0aCb75+Vy&W>Z6ThA@z!=>>~B2q6;$%!zWr&xe(T;Vmt5D$Ff`m1{7*ZhIm=Vtg*O9#_Hg$_w+<=38SSmKoUfI)5Ryh@`96sZaPYsWD2?LTRbHwksfD~w{B6K zE$FS3*RJ!pgJC}J;kI#j*rX?2s<-q{B_26~->IB+orlWE0f zA2f1LzGFjRDm`nft22KP>PzDwa8c;_y*KF0_wT#?BnAR!c*&f5cdqnz0>G7HVgow+ zH_z!6!I}dmAi2ss$;H^7nA>Lcw(L+fMgO`4O9#yq5A=d==hT$(x-wkCSJ}SDQ`9|v zhZO`X4re_zJIf>V!kz>_fB3cU)A)WW>okqu_J1ILMDwB5@faf6rQ%OF`yZ&GA-g`XJ>yI2J%)pH(i2HYRzRLe+S7( z5TkqB3J{5^_V)H<>tHuGKEf^yDQ(Z=e|`V{9koFNa60-Oua3q#G!Yd4?O^^}D}nE*Ft6#Y@s>By;{>%bC*@wW1NZM;Mw?BBe2|TKjeAYzih1*)dhhD zW5N~#?9E!L=;Q7deA4_$&|m*!6K0K9{g?+)L>I{$p-CT3LvEor2n(yL z<yuxhua$1W&?$l=9w()F$E_;Xch z;x_-3%8%_R*L3V#lbVQsYH$xr@O6{WBl<4w;6jDR%TLwcD=@tq6D;dNe^*H9a}Yva zlv(I;MpmNn1!tc)i&t$`GNiFa(latzBu|(I!db8wy)-6o%Z<`b@7_1?I1uJ5k4SA) zbY9+FK$r0`9Nz!p{$6Jdq*<;@?8;PkFCov#TG@mw0AOni=%n=Sk!rV*^=Wts6LeB! z&T4=K=P|w+hcoKLxi7DN4sOj(Gq%G0*_Pl#+kD#zCiqLT?NT_kd;2|rnI++osG~_A z3u-S}9nTw9s~v_we31Jo2EWdtVoCq>mg*2`=x2Z=S6MLCR?^(TLsP+So<7 zACA{c-HLJ=@isC%+x6q|jd4H3S`%t?$=fe0mFt}$VW(2X4AJ*&oAjD_$)gA6fIMPZkGtJ9)OCY0?)4cll3<86yRG zL6rsM){Hd@zPSWryk2#AWetjab5Y2`DD zm3Wn_tbB283~SooUrmBQ=@7kSuZHglYXgl z(%e^KQsk&`v;@58Y#8=h%+DcYJE z;3TS_vRBQ5mPSe{PhQY?o(n)akZ>q@GzDlG0W+o>0{`>0rnc78+urnsf(L-gJ1-^s zhljP-rLz)FxY98`6$FN|T?>%0;1Tj$TGVnbLcEO3C_(c+-;>A=Xx;EKVc(Tcr}?8; z0CoL^KWS~v#oe5+((0|0Fkh;veZzRT=q0|jm*zNx_y?9{KTqjpy087p1$TMJ=uJ3i z&kqj|9Vs5h>MpZjMPgbz>@5#{-LDunQ|2g+qrVHZ<-X*I0_deIlBm#Hx<6|*3QHar z9Yxb(_H!yL01;poAso$_V&L&aTUS)mP78riH#cPgQ$CSRWC1yJaK%@7+%>A9{MH z1CQc;o1S8vMDrR++-6mF1)RL=ciLGJaQu5X@P#Q*t8k4kB3(;dl3|u6{Pzc;$_Q8% zVl0@xOZ5f+zZVWkfcMTt$IW@SLd|@*oMrsLz*gjc-#1&)c-kd}wMXZzZ9qWd7<{D0 z&)`hfNSK&yxWY4{l(aNoJXK1aG}+RDw%ZGpC;RA&zS>oeP3 zBbyh)4qn#8Y~VP`31g&5O8fVZDbgMigP@UgmAKipX>wbY^wFGfJo3Z8H4w71KFoD14Nb)W11URrmxE%ye<1}1Vp zksyXhz0|aBvm2m}Z3N;U#-?Ur0m}%WW2ySTpMYEoQz!uux9Mm0Q?g|v^$JbN37IGZ zLi=7+E}b-8%wsC@7oRH2nrDR&weRKS@w6&{8ru3js@WUO*JAWDXi)mNDe%Yj?4gM` zw*8qUDRejSR{>v;@*Hf50k)8A=!g%G3?kH51*so>qdbz4I@*lu1tXa{XI*s50l1!> zX|G#x{^d;zj`4HX?$>QZtw-|(e!sL8&`Jo{LUC1fM@S!j{}MD~qyI+ydX@x?#qww? zRW(kPL2XTZ7R_XS;JUfjYi3Ck#DOGzw(w}KR#un5fW3{viJvz3E-nWPwEre9mm%zp z-OT*Z#1?G-XByqYM!L&_DRw_45X?Q_1`yUO0yXKoz#!Ab;eFt9;YyLf= zsyY}1hIBm5%@UXsM+3{A8N9v}tRc0XHaIqW*-6OT!eD7eC|}M_TMm$ck30ud8{YpN4U9Qv6N>5FLA;Kt(^-o&BE@ZI~um#l2^iC-Udn$Lw2unQ=W4>%^jtxydQi(Qrl3?;`9mmUZvQtv4czXbamN=+d2gJG)W7 z`HQbrFhTnGyL4*nDmQkrkX{ZEygM#UJhNAA&xktM*x=fKdt`k4t0#nqg@wuIC?iR< zpmj;Jg(!{64q6IHraYe1T9+nnp$I{18OIHQgmcG;z;AoUN=IJ~jttgYB42kibYyoJ zZ{WRdxM|lF_+{reYwq}u+fVB>Z!8WT{h>P!58T!~if{V$1DkpE@WW;sKdS&9le+dIT}r_ z-%jQW)LEB4envVc+i-aXspz-RqTAr-W*TzHcO0;{$V8OeOUvZDu|DG4vLm)Py}{6Z zi7$5H=wK_Zu}Yq=mq=)4;X5p7&ED8KKGgL%ZZMobL)f5R&wI_i)@a77GM6aXIy4#a z#-(DlJ-{Vsfe_emylR0!bcy2%f z%nJ#YhZ!Enb4By*8^> zQld6`k^Um5cRGEj3pzU|jbE+8lQnnv&>J&`WUk~*dEVeWN5ABNXZp>MjpgkGu#q__EMl)WuNm{Iq(U--Gro@&kuFneP_roHI) zZ|;FizPxI#Fd`7(MIJX&6J8T0{VYuyl&pejNl8g_f8O(9Iv7$Z8}XXgSjp>wW{Rg# zHeYrrkiJ2@I(~P1+u2sC27%rizS|g5kDB()tZ)iy-TUe6Vk=dS;7Eh}O}d}1mUP|7 z#>cTC&Ol^37Pom^D96GjE$<9&r(~HH-7uRDVCd=z3^KV&nwqlu7t-GtP;Nnc;_jnsh5I2FaLak#qq!8*ul9*FIu zk^f}<3Z`aP)hynbR&~RUPl6xr4ps{Pe_6}2h*E)IJ{&YWh7BmwV^q5uZx0Vf#viON z55OgAcLeKqzo&^aB^Dumha5MryDo)qt!8R=Gc;7WWN2dddbd_*7g|*fkkr3myCs^a zS#fFYQcA*lu-^JCkB>QQWk9o=SY(+Zo=I5nCmJj@FcC#@`?dAS#L4HHlEko?kag-Q zBrgA47k9n)(n%`V8f(6((qydpcCjP?<8i#F**lSWvDDQJKT2GZ<{6wh{-;IV66@h#D{Lf%x_#CWm$z@; z#{kXaH#4mSL#MTNVnB96fF{waz{QN1HRErA5!sj}7E2tAwbtzVWCg7xZjDVupmx3w zsCsM+sJ@)@Bn(8%PZdesH-)tdcI&3P%vxXB0uzYQ97tRlv91t3iUoO;Ys81vh_yu3a_)8SUHY5|^6I@pY3C~;yPntiudm9LqV^o}X# zhzb>$Gec%QjjcQzW{0{bhxVr3u41rQ{LI88WAwoT3L>$K*qN)y~4oCQi33G6|RT3M}dW7bi7Y*4C@ba$4lo59 ze4dEVHL)A?g7Va@4?Rj?Ree!ZE>em2X;d9lXG^Td%wjOT&6h!33YoR(*jD6o>KpiH z(6wlmS$Q@zs_U|OvfIPEP1Zz(wZ;sfaSbYoUEz_$(~!bG#BT|$3%kxQ!As&*ZJDaGQ%`!mOS+-r*@EhXQk&5l*1A6aGF;#w;BsLHFXWUUgkx z7J%9j5fKdnZvaaMWD`8XpFE#G&oQf2n)h(|P$xwiEl}K2FB&b_@?>El={BM)NPW&S z)PsHd#bpW`{rKtvZF?uKohL-r;{L>4_y*87i5U0GX6-4kqvec@il}@7PrFrvIZGCz zDQ6W7U;a`qK-%L9JNN294_k2)PvjeKYwx%@C;q?fY2z=@lj6bb`VM! zc3{m~0!k_>1#P>|#3dM*BwyMguHF2HijI0qQw~iL*6{+cT|q znfAVgun*20810+L8pVt}?=P(V&0KKmMgJ3+*d*sn<94dN{Cvkv%W}ls6qM;%*Anjc z)mMCYnTq8D1_OJ6at3f42J0j4h=xio(9`JUINUjZ3P|L5%^m~Vum|JTYK}CAaNu2+ zh$L7#m0*u28S-&b*EbkIooz!~C;T3=5!4lK_&7{MUOp>ey&*l|)MSK!*IBXHyFgh5 z$bB0y`v>xfS5Fr4=4g^6Vp{^VFDConz+@1NhDd@fMq`(Avdm!qVIq(VR#@aE^*zM2 zL)npz+XB4HuUI~M!_PIQ(C)*}bIQ%RtDLw;MKMma!op>W zMQp35Pbn8itss5epHwnI(hC-MLKkoDwI=o#khLz+6~Dwr{kMaDdlSs8AP^bZBub1# zXKVw@rLLc!dL4UHjtYEoY@U5m&-1iQnlhj+SbW&xSQ->8dp6N$)eS;dsPy>i>SK^Q z!ILn+S17xMQaH5|HwC#S$T`bO3UF$b$GS=VK^XaGWc+k0qscs(slqLKZP!u1$wJ)? z&IMPdcH_`8_qe6@!5#h{#k41;Kvb5Mnr*ur`2yg8IiK!a>|@vOl$#1Ja!GW~CTKZc zfrQ$nZ;LnGCrK+IklW=K0B1TDjL@>~daDtY;BJugMfc1dXI|eT3ZwBR-gu=3nVV#H zep)$QkS;IW&*X3AM^i#l&u=-?lO`q*$gjJP!^K6&RW9nRXCtNKScZnG#eQ1TPN_JG zR3+*vU`IN`9U1OGWCHpNvLM4}uxE$2WDS1u014LQmh8t&lreF}jLsC)BM~U&R%y;>)tyJJ9JmLyAiY2Wbi@Mm3PTZFzZq>HBTlrnjFIv?Id4B@p%1My()9_7AF zH29YwfIt{Xx>1M>K7Q{7{uU*5iI`l`=orPFdAUNsigdocR+sj7v4I8(DQ`+{BQM_o zS6`DY69}sPkpKSti*WBr@Z9UB)XqE%hCY|G1+pV{!d4S}DDGRoj`Y``8<7*NzSy!%u8qOG-!I(QRWTm8B>9Q`cqd+ zSEFh+YW1%l0HY@iMed$AxC_K2;JBoIxqMQM`uBtSfw!d$`k(XGL-nUV>)u8pQeQ%J zrJ%hprcBnaK&(<5CU26XxTCu^syIoS35X1?P9VB_$bJMV65oNRT4uakLGNkH5yp#J zWxIa`hM0e}d&fL2rXGV^eqTVbe2d-6jj;MfE9-{eyCj zilRd`8Z`r(Gv`p1_wvn{N)|&S)|}T7rEbvE$|6Y?r=9bWFTVZwVkRBhDR|iElerWB zr`|Bq?x^F;zupMpIeCwv$>rVtL;XYcD@vCLnHnzirXt-aDgk`~jqzB4ysjSs9KFCZ zwe13s2UecDTE>MnB=?+#rpY*v|BZ<;xCr~F5fpR5W0Z~`xVuAT!{qg=CJjD1ip2^= zOh91)fs7R znoc=^95QZt``e4PmE%kQwHQ)=rR64{yz0R1mgTO=~ zVb!8H6 zJ+?`X5gZq_efwD7WAKM^Jli=RwROYHgOZZORq`tkh`Lp8x{{J@o8^uF+ERS!BmoUQ z%@cSnvRrHOXz9;%adm0N<=bj3Q^sl;^1h22X{+xG?I@F7A}APYMM~6|Ad|7+-O8MV zpv?V(FkU!0T~0oCgni|8Z$eH(I&#B#1JUE{J96qCxe^2*O>vGSf+0gI71!Ueed(-c z@VGx){{SiPqT8|Ab3S2GYCW0Qd-3ocYCxMD0xjInL1}57;i#D_0zUC|*PyvdL&S!E zD%P2GUIBh16#j#1;v&rqFKIKv$q|ZtYfOp^=LDWcK^t1-wDCk@?U;_6t-wEOI<}|M zRxM4~A}${&A~+|=Yo4qzO~$C*pU+2K$+R@PwR!=t{vWwt8s_qoRiIZ%uI^Jk00Kt9bZ%3mBUZ4*NFADFSguH zN}uxDY2QZ+3KaH1AHl0s^$IfujMYTwr7_DCW0Q=ZJ~oGZ4qNe^X-d1TUAnOYTK%&D zVH0<{YqkGyUHH%AK&-;!PoAevoeq7kwDCsPncEI1XPI&HkwR31t&LXkMBNbT)tfAD zy=p1#_CB7;GYnK#>3nN}MKg?$`Jocg#Mj(~(3(_U1r%N(-qmKJd!6?#9Fr(ORxV%&9o`dts8gH4`LMa`CBm%GKK~ z<0n}w)Q9ywjFJpV8^3OQwwZ-P*f9rMVz3mxVar_rCs^>EpBW2~r!jzuccbx5|zs;v?4s$q5xrd@Jc@iO31tv9-sPaUi zjqU{&)y1#w+)GPKEG$1@Sr22a>xfNX_?z}az<9kmmE=+~>g8!S9zRJ+m*aZJNoOw` z*)&q45-@f3`Ba^br-F1<>2F$;ZcI>^G328$iX293Cz4?<>FP<6!o3Ch8K7T#HD?ZV zp&A+*^S^)V<#L$pH{g*!4q5<>yeXmCaH53x&kJJ#+b1OafB$@(GT;Kx7?9Qjp$(A# z>=Rqs7y;2v+S>poR9oIaj|$WXnHmL{H5H&V?2968Pk?CMsfn2Q+~UNZ*_A9{YdBW$ zi(;(^S?i*g#*XsvO+PS)Gi7|ydaSqX(+#}ExwOG3gJ-NEdBx0@4@g3R1`CK(2?3qB z>i1b$sLjpl_$@EM%Y6U-;j6pZ&mbV!0TU{L17%Y7uu>=gXS&y+K`aJ;UD(^4B{M0g zHXmCOq{nbBabZRvjFurWXtFLRdSFoRsp)iYf7->1%Y`exkuo~>@V8|*+(*n!G!J$K zDjPi~ZVIS-TX(+4k>w*9=BsB}&L=MJLlv}d@SI7c*^rcys%(k_n*WkE?k;!Nr1ajE zrK6)@$Iq`%!hOZMCtq^aO5xZ2Jj#_m27N2kk5zWMeLFcOXS;yU0M?K}LUqz<=7;a` zXw4tAP(-vBct?U2eDgSuuI(K^MHOm9|Bf;h3>PDsa!Lk_4qLIQ%;!_)1T!_jaB-&l z5!fRE_A7wT(N!&Ei2WN^lSV+?TvBd|z>tQw1v0}s*|P%!U_SU#Ws>?qni?w@3=G2l zHU^G44#R_pIe+})&iHQItIJ@Jd@@+7T=rVO5e)JE7_8>Ao-eK9=H|5bA`lKAVJe(n z_NrlmmP~6)!f#M!Zamn7Q7>lxK1Z9gI;j(5sJr6I1bM4!KldO*-%EQ-`vn+?(H&dZ z;EVmT5WmyG92A=AxM4Z%19+o)jRc@@kgdXCaD3drdOa>K2PvOw%s2J;4yX z(xpQEYkGpz=Zyd#^wk^k(K* zMBfhFQ~au~(D}sOeV_}e-}l0-N$s~-I*KC>{3VOM5o07g$1U@`OMr$cPDKS}J8YyA z`@rH_M{qwyQ*rD|79;D92YrWX)a4&^^MhvfvK6U+b8JiLCN8RHy%(J#IM7FVu)hbn>j-b4g~fIRvKY%b<=^m<<|=HAb( zl$h&xYsC~tm1jdS#vO~yQ6E~82c(A6 zcx<-a0gGE4>}GNG&x@e+8zlcO2F$6hA7FmPlg~zbH4vx32#i(vt2;eOYXA2L?N6i` zyPs~%TJwI{Q{1$N1|gUvKZiMY0txfFuRhXGH*p-GfoErw5Nn$TZ8^|P0%G%X~gP?9? z@9A^m`#qEAMzovk#}8^4Y5T>e;zkZmIlhWr<9r#{aG41IK&ie;2N6=UpBvu#*fBLV z6%&$rc|HG38kne}kh4|bP3vG9h%kjYQ^e~&fd4+~jIvk6e`xC(cc6){P_au(f@XWi zQcv6~eO2vU%DvY$4EWhX~nN~^q!QM=;ZY|BS+kM9*Z?>!Aa5mLqga3 zSZTAy8=q9An_?%Z$5!Qh;ZxzrUK%PTU9esgK_R8ZSa6XHf;98`ElJD4)2^7@p_{aE zpz89^lTQK=RuAJVZa@#VN@@EOAcNwVbcv3~xnu9&@k|-~NPil5IagwkC)maddw*Jo z+(>Pw`Zuk-f~~qh#>MsGX>Ik;vN?Nx{_$={PB^*a$iBO_thh1miH2B1Op>?xhbHFG z!gN*Z)50Q3rnO24v?Y)M69{e+q9?*UKo0ykI2s8cNh8>$jG5Ljexr@}^Bw$<(}|pgLHPTxe?8 zioJQw_~Na|*I(Vs`Z^PV9=W$5!(922sJLlF}n%Ia-M&12IWDcBPx6AGU5oavrgTOB}CW+CYW; z@@=s$Z|2n3Pp`yoL<52e?8veg+VPiMCLEN=Rw(R2L8=Rl>H2!_BU$=eNgLJ9$C)B) z{?04!Fdyx%{(0v*OnWP57b*7jiS)RiQ}Ww zd!3@92L$;O&V?j2>9;E>STG~8JPTkG8~DpL?*@tg<<%S?jCA$A0Z(>kjq6gw_bshXct@2@&VwEn4+ z2bzkRtO;fS>Ad;*cz){mem(<9x0(yh(L7_j6^KpU^b5o_a70}^=kIzhjfU(N=Bs-k z4ja7_CGXf;1aj%$<8zb31vnlcmy2#oy8&wU)C=C?r-5X5Y2~;FpzPk~>>`lKymhA< zKpJ_~Hnx=b(J?fZ~hKg7WhjL}&|ekjcWZH_Sl0PL1|aNLGzInUl3W~d98oC((UpWmkO6QjS$?NObw2r+mo(43R}xeisE;h!f<*OkU^ZS+}|pK zy(Dhr+Ca_(u*l3tcE6qK;2GJR0=G*5p&cC^#VnDwQ=WNKIJz7Y0=7ElWs^r+C2JJP zF@wubAC%Fx{@oV?OUnu5+RqNfH0% zDQ+|m%i0x=9tnF?JH_q$kps-GthB*akxe(!=HLGubUg%O!M6b*P~Ms2r?^MaPB%Dv z@VvIG06M~3BB&Xb^$ z!`SjnPhb+}o55~giCPd_N5j-InD@QuIlszrVCRgrRfGFL_rrD4);Jiar4xUA@Xzja zd6pe$xTBp1D@xqsP^11Rus5WHKay>{4YeoxOe1m*R_a=dS&LeNiDuEok>tfX;Sa!8 zSnxu1>@-21>vHE@&I3ijb_wwH5tK}Yl^JzEacf(im3ZDWUGheM$q3TYI)4(y2I`X1 zHhBa<@F0tT4R4(1z5M+-0hDfT#jGt_EESi3f6hV4B-J$Bb+Ttm3rK%2`YC_~nkVT( zV`Ftrn~=b%jHioL%GLA=FE-u&wRbBB2ar>()~(Q&I-boh_$BQT4Vwxw$lCd6q0pdSvJ119;zMX>6a>wQ z1ZzM(t7O8|jb&_u*Ypm{9Iw3rxg1dQtQ749+>BsEGHz%|+EoF%!sm2A95b;Kf6~XC z1jlD#*{d@~;T#llpmy?7)0ajKNKug@2VX7O_~A+UAY;ux6XmqMg63+~EV?D%pmGK1 zdjbu-Z!fP{2o}fKewhA~W+gq|5cot^oQDoNR7%FGAnmbM9fRu`*|AHa4EZ zpezoGj;agHMDOG63v1%_)_!Kyx&1)Om%12K^Tsa*xhlwXFP3xk3hLIxW_$454Kw&O zu=U^yWO}^%ER{;_eAR!cYslCO5{`4WYh(ChR8c)8NAt1eJzbxU&0&6Qa$%LK4QG3v z%NhjFLedcl3xtVKk+6W5^;ToD$?dDTV>2u2DPq~G7N;*FY(30bDxDlf%2o3l^UWsg z!4hh>Z9PZncp^(u1~}-1Mqw(52hS1D78*yS+eWyybCi{*=W`bF|2z~w}G1b&?i_`(P(@-m0X>ZZ$=l+n+9OJ#@7|6GLPf@wM!HC9NolS z^u4-iXRyenz#6!{_mm)*2EF%|%_*<(3(PJi2TS819?gE{g?IcNJxXg?z#Amhg%r}P z->ndNW}eGA4NS=mDcQbdTN|Om(aakk)#)-VGU%CEz2k|hl*@x=@(G9(A*J4-p0nW2 zL9DK~J2A<|ot=sLuZ|+Lltk-!e_MCS`54o~Qo|Z>Ui#^lzl#G;wtxWo_}R*apg!B% z9^4Ro#NBvp(gLYLxPu_*!LzE%@0uocKLyfY9UF2Np)iHdh0j*`s=M~a+sfVA`(MFeF1_nnE{N>li#7SVST;&4mgr2%t5aRLQpMG#+g#mL&t znVW32NlC^~m%KhDmDcv^JV807@i0Y2`Q#Dn*#h12UQIx7Wr_lIv#`@_!6IK4fNns%$Lu)80$6;0@gQ z3cvofnfrO`J7MY5v9j=_bU~4gr=>|&2IA@AN+2O8HcV2VM`{ISBZ{+mNE-}7X;?n# zlAU@a2L0gc(Xzh!0SG-Bn4JGKL2ZMx!thkhh~}j1YF=&6Y0ma2sj*qIGjzL}w@ZUl zDOd~oou~&yN?&u{n!2AZCP$+Iqkba}kvVJo_M8Z=``=~};><4)%^lAgDX;B?6T=dm zo?-MFA)%@^WaFQ=xIb_k*ic4Jn)>&p5c71;WZ(C6VbM2*GkPXd;i=49)VJ;R?R1{? zQ9MY#2WZq9JQej?#8X32_?Ve)Z3K$tp#5P+Z4GU-J4H@4w7=)#4-bQhv>$%r!kCUcKOmEQhx=gKzQX&9ecgK63_Y z*U+}*(t;mY0QAghWVv`Sjt8V0Zqo=L%L!&|Smetnk%Jpz#0UTT$&Vgdg#NS$w@lpy~5l1)kRjQ?7_Ls#RdRy^+scgH?ER6|iP6x-U4>BV;>nW$8RHS!2bC#H=!qv(|M zgS1kbRGqrMwUmW*;-0jtH+rWE=&qf%#p-nhy8eG~KS?KQEbj}az_Wed880A+smuY|KCy-}3F}+dcdJwj5ZS$u59~-OJINGO%EgkfQ*zteh76?>yGQiQjMG6? zqD%Hn)717@kUA{sY<>G_RJczDkgGf0x*_GhUN+o|mc6+IF2-(mkTL_F)jwv3d->1) z_%RuvKaH{qX!29vUpYNBY?GF}iqexA>0z7^d`%mylDu zv4^(LN{IT2I7QR~!ihW2n5MZiT#86@W)imDeFxB(1rik_(|y6~F6>s4ziYUiQ6FMV z?>N@blIzfV$}VZlcGO7#LQ?^8J!)0{{*rYjzIWLAb7jlMRmG!(voG&2pW3viUP;~0 z^k|1bax*toHIuN}2xY7D@!0nF!=GJ6pW!rf+u8%3tG?^I}TR>|&TZjS% zZtWZf0+urj`eJ;%MN%8Rzqv6*wm585HS>lkGgaPIodxD|-LEgpdcOB=2fXo)uj9z{ z)-B_bot9#$jemPAZFj60e?m6#>lOAa2JI|z%QR&@{1K&OT!Dy1PZ`E%W!<@?wcU&@ zMHBv`SYnlhtGu@$sEAA4pdli27j3Zh(CkC%3Q5$$n6W&3i`+%B(sb5YkfZKKjr7mw z#baLJdm!%tM%u$;v0)Q-Ctn|*w1*ItenlgVKWNG^}#lOx+Biorpt&pn^L!#NywL-v=IH=Vrg z1ZMARM_MX<#*u0zI;>W)!jctK`?giIXUKotl<~6vsu!oPq<`7wVnDaFxkfF!wy3YO zy6COXfX&CL-^AW!s&7lbrE8>sJgS+W6rUzPUvSsks`hUK{A%u$+1TIrCPvKfFTF4N z|JUCD?#r^!khYsG5Li}1i)`=;p$9(Xi9P;C>JHF?quY==#@ga)<8-c!e@&P>!lAmpP0#A(VEcUO99kb9Qk7CHazmJ`j?&4w?xKjE{;7ofM^Cp4mdfhlM_c@$gUxUY=9 za;tV2)yuV|pgM%rF0kX0g9I!P7Xm!U7?DEpt|^+W*`;7wBozPtVdA#{V9yxyj1BV5 z1Ozg;CMD_5ckrd9aJCR7JOwY<18_J#-ivS^L&!ej4fC=k(91gx9eI5_y0LUDK5vwh zesT|JZi%F`<32qyB#p`gh4#jd0W9z>A`ZJo4-&c!u6NPx+uPec|0s#S>W6+(2L<=$ z;0h$XRa*7D|6CdG^xu^oI;hWXNZP%p7iuq<>3|w}*@_2D^5s?S?9znJ&Z}C$?d0dz zbogcWrV_>-b%LZ7UO#tgl9BPS0TRfg#4d)oo|eyxLJm9Olf%0E56E}Idx^cH8j5GI zAN6%Q48~|5wPZU;?fOIx3~aA_R9 zQepn}z+|{5>c~Z3slR9IL7#Sw|11kcs(!PFrREi^0AGjIkRPVOflF8lEMb5)@e?Bl z$u0lHO(8!*x`05gqV$IuoZwNnH_S4E5 zjsY?00o6LeX2C zUpJWmA{bvdEkmJtSyP*%-bl*HPRtA}gaAze!wq2S*{DDF`Uiov0nEB!?&{(1Uv`h4 zYf{Kjb_8_3H%P17eRCM72mw_gP55Ak5~ADv7T2$0vPRj#=_f2N_%}5v`|LB>FlMW* z)0owz0#xo&|x=e=_HQ-VWAxOUBu?f7z}tk&=+O_x@eVt;|I`n`qc79Qlw? zTkEJ;#L@t_em4# zHn=2$?3_oFU=Rz8(`2L>fT6uKxe&v_1lYmp2wGjq*wEOhYKI2HWH6&`CI`$t&?7#x ztz?1t)Y|6L_!ALg?(+$>8~d2UA92mU@VM3``m1!QcIP_x3CZc`fbMakvidz7j2MBG7yb`ml6pRVDz_uJH(F;`2FbLrdW!T9TTEl2o|Eecm;fwm{(^rcQ}bU&wAG3)bGqZT+g zQ*GFgqozZZ&L$6$4pvd|Du^`!BgY}#V@z}Jx+Xbd%Vqni|I4tdz(~wsd6wy2e%KV;hN%s z_aDc9&h^Eb)AmXYXaxWoJXizfec*$hyz2pV<+ekV^x+{EH!7iLc+W2b^G=+-caY*? zI4=&I4GD`&ewx>2wzMbK@U&Ug>(1fdPFBH=s6mu2iakdbl^z8-=Vgqj%}Pe8bf!D^ zuiNzntF9vC${5o3vTMRPD?Nc^vrv@PT2}r;eh@2_DKHTfzEpBHD z5kxYAzeoN7bHevqH;}w&++lMV>`UNxYeE5!VUbY0sw+2CQa`D>9_UcBn-6$U$p2Go zjnF=a1}SAD&NaarnM(zxqx6^c%8y7@HiP(SukU+ z5EWYEWu|ZYHqWViN86LUuHK<=RafOh7T>q1ZHAK4_@p7;Aiy}rK`CX8aC;k$YPohK zf-in&2)KJ0TR*h1+50F6h*UJtb5PUJI1G;|BeNZY3iQTmlJ{+OFhYqjD4hr)C3i3w zs=xlq^7ynm$%kl4_H;-=Keq8P@Ev(vPV*kBH>Pnuo?f_0y31DYqK&6I2-TKS@_kWw zD55A>VV5%T1;69*L=~Zl%031}P(kOz8Pdxa`GB=$D5}OE>6; z+&21=mWE{mvp`-u=1D*+#ya~9g0C1_T#bXH7altDGJJKClb!kjq7HO|*0xWLp7y)c z5ELP5EWbJy@dcD@BV@g?Bl~u+oF=z0$ZLkAZAmb`v74sVf@!3HB4~x{afLu@s`r2c zG2B{i@!A_CQ53F~-6wrxYI`+vpB&)T)Vt)c>}&wxZ%J>o|J&lfC3~3|O#tC%%3nc{qkxyS zK7SfD#f549zE=)JEZP#|bmYG+tkgL?->RZ=K;9&buCb%kmOXO2-GK+g)5D|Y(A3*V zo`z)$!!Vp)Lj!;2xk5r^-keiCc0^yhV!bd74PS2HJ#l&@-IfAP!xv-gpDKJ#Y;z}q zbXV(y!3mWE$d}R*mMYpPV6q&ksM=H6vx4S#sM)eNv8l-H60z9dV1 zX)Aa^@~fo=ml)5aN=yP-5$G9_UCcvg2yI4ZKg7`bQdHimVf(bF#uf1=U^?Jc zS3J$ab(QyoH!mM!L#IXh-ia|sgp^VyN>DkR40$;eskHb?p*=U%Skk?UMq<|l=_G(j z4Z#_3XLx?PFIK$g_r+a3C}-MPfq;O3KWDhDuDHDHExf8KE>$k8hI6AcnqbncJo@Wm zRHtqdNMb6%&q^t++XhpNc~p5B?;Udk0|UiMJV-9CmKXe-?h7#td5xz_w`+2QB>i^z zP~L9x`V{|YvLe`gcxd}NY{sY#ol~{M?^Pj!xFoo*lOr#BT`lPn7a6WKBC$%(m z?>h3y+wE%%h}2)lvW>IQ>%dpGS5>8Yr1H{q5`j&du$bA`_NAvb@K=Tz&S{sLEX;XS^!p z(&_xDDg?SsEC|!^{kcXx8wF>*>+k26ds9~rPfz`}caAfL*W&18`#*47__U|3HJ`sa zze4Y_DHAW9+zH39F>27E@d^r3KRBCdp&3;zvG#XEJAT53pf){@ZflN^NorS0va}*J z;+3xV=9?tlMTOUNltJ`!A=x4pfGeNZd{?zEk z-};^nsE^PJvS$O(dg!NV$9Sg7fiXC#|NSp9ivxR~nqVIcn{a(Df%C6ybDxjHl)EIMe zr>>nk!w$y)`JbbHVt;yZc6N84x#S3O8W&p6Bo^y5Ud|f_4IUm@ZExiWJ&a==K8VXP zNiCn9nb{Wei_HgdQ??cFTH4xduvkLj_Lup5S#Xk9+qbW&4}|E3k@&N^h>~|8tkZ0Bau#AYY*?ijOl+=SI!E^ zF(%(u#<4PA$leVbD($$$hK#tH;rsIko*z0a&4qV-6PjA9XI8f7e+Vw!JOnB*xpI80 z9~4)#b@XX;J$LH}@Kt>^Gd-T=FHa5@TDaJ-?_Dt$7nl2G_xoy`A6HD@&#rS`<0*%~ zjOMNX6wvm3tq-U>o+a~sMjGrbfqW1CbTt6)six|=f2$-H=x{-voBhpM$6miH_TfJ9 zwvz@OhY)57?Oh|L1bH}qR)Q6-$zW+MO{@u>LEEP;tH{JDE29|W!N}ZbJ)wCz0|#>P z*3>$${CZlzGZSp+J=sXBb%}oJPAwYw)F=&V&0=GutwkE=yWY~&ukPD^e0th+ z)#7>6PMJLmlLBlS$Z2?B`S*Bc<@JNL;gq$rb4k$oNp&tH z!r}0D1YkCz{DJ#0T(205Iur6F&GSpP=b#l^m5Bf$V{#=oI5$N?l+Fx)9`R8$%7qa& z-Vv0lb{_Y!N$|Q#+Hyap?icuVx?xxpgj*gRsGngp_2R0=mi};DVm8?PAxlakvUdY7laV z8Zgszk~S&9Ke%EGn??(k@~b}+iPY1RkL_BVKT|n5Iib3aU-GkxA017Vf8YDVh5`~G zSM1w?56Oa=KKR5I5qm5H%cfjjFwARAsddR09#(oV<_DAfLF;t#@{@nLu#2c5#M5<< z#Sv>wY_2$LzPE-3`9%Hq{?Km^jo*$MH4-jVPO*GGR2|J$ZqP~7@H|aKZ!^60%`55T zV>iJua&LrMLR(2#;?HBlox^R0@vXbIr{D7G?4&IlNTtdh?@At?IRp*1u_%eUq+=H4 zv+Cjr)NpfpDzMkIA<_GliPsbv$VQ@}nfFtAQR4r&M?CbUfiu>}R$$tQ#b@SK6{goK6 zk9&L1PwHrd&Zoq1qVuw;cq&9L)&-2u`CtCx}D}RhAgL?v>&GPa27Zjw~a#8 znGCj3_tZ#At3IpBi(R;>Gch0291xAEJ%Jbo%@fp(G*rI~8;Ri0zZsM_!-qtY;Yhmx zA@!Lh)mnV&?-jI9pBS$r|J4GtX;}J@LPBw5vY$RumXW;pixtA%Z^))O64-D;~-Y8G;^P@>xq*?-oPL%JTDBS=Du{ zkYdFa)s4s@aWOF=uKyYuz*@+CuC}16Q#8(IW??~PM~dRh99(bRZRfkAu8}Gau+UBZ z^YxRr`J-O>?IGfSk?Gw;}DfIx5(Rpm8v&K}P3 z(Iz-l8#)Ja#as2&yo>5wP>9sg(@R+sUU}6%$^++A1x2aoEUxOhN}xIR|p zs;M2hG8Th!fDlp;QMn~lgkp9|qmEYk<2ZDbS3K(&UvhLNYZ^oHJ&VDjBO$^Inw+Ri z%;+$D((xtNK&^_y{xPVD_+@O{^LDlJ=6<_xid1NHoLa0v8WSuROxFNd`q@{c7gN{g z1!RWj0id*kYJ2&&lYsxhy_g;zPDaLuaSGrt7h&Ug3x;Dn>MSHvX8&{aK?sRPB`++3 zpI>i;91SDQqwWq)df6Dccm**nhUY_#(ujyqw-mq;wdLF`47SC`)dOMh{Hm}%b-k2M zNJ#MV^=;J1gTzNU-V1&2>oFk;Z}AVtG;H)w)$Ave3Gihz%CV+-y-BkdWQou)7XMM% zq0RGMp8!T|L8kUPXUaw3F`PCT&ZB9%6754JG<6wi%CKzGLnbnFSvGw)p*$-#yYrNv z_v9gAWc3d>_p08KZ?z) zKn=_tlIeR3|JW18-YBrW18%R>UsG9HuIuBkuQaZYLXL~KhcCLXyCjPjbJptyTEBdm z`M74~_}CX`e1LJVFCRFb<3b)Q%Q$3+?5-Uj`!IpW)_0KQ;_7N+IqJys?AbE_DW0{r z&+$cH{IvkvZZZOlfP0;6iZoj;O!Tf4WWtw;Ct`f#nXmI6#Kk^!ME3E$C*rVOoe`G ziMsPp46le62m-LR7f3mE38bl-<{oe9P-WjKE_QiD?@xZ=F|r(;t(G^;kdbXv*LL0L zI`{V2%6Qy01Z~17vgqjv8so>T|JApF?Z1wx;~ihnVlQevMm=R^JPd?cOn>H%p}~QH z%#0la;Ou2kQa2#P2&FEw%02n}V2*pwokoP6P(i zpxvCE4fmg;b}G7w&6gV+GM0|nrdL;9M00H#CZEYBhboJvctF=CuK`LzmU<^zMX4^w?U@-v-I-s*39>KVP+&mB$2;*BM~M8kiL~f3 z;?;3ZlDZF;yweinswidUcD5$(MNH0lwwAEpjfmNHa?L;gLCPMX8QDpr3NF(ODi2vLu{ zc>47C?0?!v2o6Zon^`Z?*CShb73?-&3(I6y&KIeT>7lkywb=-y)|qMoD~UMC%COEX zyAI^`vi9>9%VRu{*LsknfDJM8Gp~IOClry(JaMHci{@u*e6RD^C};IcvE~qgZ>A}- zNEun7%$|(Mwvh`c^X0Gh3`0l~FpTe{_&9n-nYvGCLmMl%c;PDCG6Hziu>o|Yd#9M8 zF6%1tiD>}Av-<+`hP36VNApat`u$#&xB0ncWrFQK?(UZOAq`kujQM+hY6oY5yVd4& zo&j_q%hY65I8wfdxNy`yA{PguA&W!tHjfBK;G`xK{Ka2n&b$+rhU_K6rR#3DrGJB* z<)JvpnxeNC=!QPVkC4d~4p9QnqSv!f8zGDDg26q z)zzq*axf>aH3B-VQG4szqO!6$XpA|ci-wpt=;GAuI^wbyUW^tTI6{U)uYq z@QJ9)eSo%#^)9G?f6mTPC=`Ivm#J+qFCYPpgZ*#a@KR2**}9tv-rl2dv(+gW{Ba!t z_u*@cO+!4R6m)%gB8oQWBtM+>of~~w{S;oydiP;MH^6*o*e*eIXWWba(i(dzTaqw| zx;(7)G7x9QpI2VxjxqD~4|`;tYxzqj{=EaW8knuBuw|s;)`To~teZ)v1YA!59Kr>p z#~?Lo{gv7!r;BA|OG!OeT3j3+B^PY=)Gyl8 zp)TFk5>yA-9|_$nYlc8HqU#u0y+D{o)jH_XnRJ0BvCfdw9wb7BXGBM1TTwJ{_TSI; z1bz`*z#PIHi@**PqaF7XD`Hlj+~Tiq323Y8wXWH#|MWe-h?o}wc`8d!LKqpI-a^KpYCFlO9wu^>o>FJ5q1~&lSgQT6Gp`RC2U?7*NPqxqDSKrv#ad|xF zemAxuU=btq{w;{xSj)o}`^|4op;Kp)lk$Ed&-=o{51ax?8g*(_VrG8^Vkip`8jn_p zBoEN-8%;0~eY;@LYFZQtFA3XZK(+{!M>knH7!bH4l`$ED@pnQ7ob++L8B!K)ans!- zX}=F1353M3UU-fg6`>P@@|Uc!Am4)9WogyRzxD9z^h9L}{EAp`Q&LX8S#)B<1b+bi z*wWlw9Z&9YHx`f~&omM%BmQd%y+MRd`e9nxYXEm~edvdAGAk4NqmQ}F%*+7ha+CNO zC?V+>7v2%Nv$Ipesd|36K>~bl4?8P`;@NJNZAuNN)yamb(LcCx=wL?Gfh>z$cUo#U zLNf{D3vK&OojLBWQFeL_rrqao^x?FihGr^58U5X6fBQL!N2Yd!XQr9Q7YryL-=bDc z2545r7cVZk|WVi*?*I0nn0+~HO>nBXHOtGjLUz!X?4*6u(0SZVq7dFFTI^z8CngoV816#DpaaekEoT%Gr zi;G8nJS~1(p+#fuYsuH^D|B4Q+}s=;KmY$e1jzR#T_d@}u~-o1GU6x3lK){de{0JL zAj=^ebx13tZUH1W<7cae?rxJK+WprAJN@wseCqyY8AU`Cd?n3e@%YvE29KWttorC} zq(be(9)sKC+0cqqq5Mhj8N~J+FRCgD5E{o${*|lxYGmYNH$aNGLEk3Xv4929>s`;@ zcckmKrqL=7a|&pAZygl$qQMfemZx2^M$kMhpsbGUgxA7fgkXqEB`K zpOOY39q5JH$S@(>Jr8qrIh?QxzYQ=bJ*re;dBHA7#egA zLv;J436x!I^)G70hh=iaf86d&$`b%xx|GE)Qhmb1AHijeS>DHQSUDN}aX|)65jgPm z^oWSSONnm!M28H}>=q&zEs(U6x5P>0XPchh9Z7zFS6OCcW$IJf+8-~$-wb1tz8OxW zcWBG>WaM5$)QlH8sJp$}2^5KW1$b0@js!t()~eENEWK<9R@;>t`eksoc>JYF1726g zgzSvZ*d_z&MVG8pxJzc~{G^7XNI79+4oY_ya5rS98&wIi&KSUD$ zz4=X?$4~WceU%pc6k^c*?{9YVb^gUrsyygGtM7*fJD^D}A?jO}kK&6a%l(BIDh8*P zidXLD<)q~`-FG0121SJN#It-_BOYl-G9lYg|7?VI=u{m1K=iT0Y)&pd%!Xd zsV0HnWvToogWwP}=~R};+wcq_Rw>mrWW_a}*sS?zgY#&4Xal3QKEp(<)L5RF5Z*7ma#kQdMm(TQV>ZU!`B8{e@ z%rHCaR)YFYc8diPsZUKO<91>nF>);&9VH3n}=nFrOS^sTNo zDGB{bel8-3KcK2b5P43HL$nbkqpnNSoE)K+5k^=G^QV_1-M(O8JfV~e$`b#Pq)(&l z<&l=?H3+pJyD9kVO|r7II41K3EjM@l-%qY`3Fqt2a$4w|sOX=0FK-KGA(j}Hr<(2? zU{Ml``$Ues-4ZG29(AT_JTZh%Xyey8kBh}yw?fL?m?vcAP{VY|4ZFO0L=KG^OASu8 zwxc_bpJtZO)-+DypUWbH(}56}$`e`ZZ$4z6M(GI6c$R&e3}L~KAH8HYujs-RbZR(&D@eg5U8IDjP$A26|FzhBo$)M2G^ zUQTqc1+rFtzV}7%;&ZH~n56m)Eebt+#IxfRuSwE9W*%<4^4?1@Ik!IBIzGWW2LZOi z(g@L318w((&D3UIP6P7Nn9nnU8QD`72AB)?CV^8>Fxym=WIQr|J2H2J3#L?z{w)48 z&>L^rj-ChUo+^_)=@M}H_T$;p87HknukE)|w@-qNPj(19)tpRf>Zzt8>xl0QP=jORW!b5tg8NEc(}Uj3H~> z%jxp%#@)(Om9yGI26#dSh_I1%lne`QZQUBdtNBKJSa5)l!D9*>2Z?r#ZT}*lSdl>i zue?eaxATK_S4waz6+7(c&X?ZBfRa1f>bq+%0@K#hgH~;@0#4vhTYw^fydu(8lf3%7V!NdhxWadyG44 z&B*duZ4LLUMB6PPhjL+D3%=M4oQT)=g9FVL(y|SEU%kL&aZg+h^G?%(aG~ZQ+i2os z=40PmED?ZeU0Rrm-0`cu8v#fsfbQa4pOE7jbCLsE3Lxw;H=zP%Wn<&b*cwi@VNbwy zyv=`lH2|2lQF~J7p4$Nt!5HMZ@{cKc>^C=^R9R1&s}7>2ShJ**zOM;SNu;q%NyQ-H zRxV_=mG(fCl{Nj$%@>-fkX}YAh0chRP z6`i&=QUFBGN3CDpS`mG?5Gc)+Zp$-@A9o#D7q${$g|;_Gw=wnC9@BX{?5>l?%-9bT2*_&hZfyW;EicPb`n9Q+DAH z4TzZ@s+Nb<3D8_4EZf`c*?cq9c8#>Akdx_uqPODbfP0U?(XlvVUHPvsv-w2ko-G>B zoqF7!KR+{*N|4`}?d{8A#N+rS@79+7epMeZa0S~%S8w7^83Rd#+(?GzlX*;Prsc#R z#fdq?c?0eT6Z@(M?Kp+_u+>1i!6klo&V<^e0g7oVA>Xv(+S*oz5iwr|>GsE? zG`Z-nEDJ^KnmGYZ}1`id0sOCyCv^Yo& z!@7MDey~KqnA8_BKCP=)562Oy0jk2vsUvJjbr-}*?UA{!W4dPb9jKagI`lV;%;|?d zLYwscoLBPl*zr=8xaR-t=A>BYG@W?Yfx!b|=_j}H$n1uzZ>4OEx^}PhqZc|3jPiQLn{*h zn58}gr>3C5NPUS;o()ch?jU8m{U%z)pr4vpjlFd+A9`!ip>`_(caw)X5tmjYYXgi9 z^vl#OpHG_W$g*u;OpHqQMfMh*Qgbdna(|Zz5H(!oCcW)TW(%CvIOOzVF-e%KyEh(lBTRYBsTt4JC@Atq1n1;b!y@tbsc zb3A34;BtK7+llMn1L?+>I=tgYF)Aof0X`p8-5GQamtAkt&7m?qo*6$ZN1ehuUfB77 zJ$AU#Pf=F(791fizW>>Oi$V%dZ{m~w{fuCye(qWJ4h2J#Op$ws8WCk5i(uOIIMl`E z6N1G5Y(mLX5ygydT$}8qs%E)lR77ora|Ict`V2)>BcGONvv@a=UOJBPHzFg6LHLa0 zkU#ZeEJrqHP`WjA{jew)iG~_(fdjy`OcT^@e6MYu9d+0 zy!S&7YIdJLz!8q(FvrSE45!20KrPU6HXQVcCF-r+b4LlJr*k0=-i3Cz=_@`L56BJ+ zX_&Kg6l;LwisQUG$2C~_-@{Jh0edVxCsE`jZU}@bFh8Ht41{tl?2Q~h%xKz0z+D^{ zvs!leA^^&v>09e*t^~3Vw5(7=s#C#hT*Jw-#5+Tco@7aNuq@l#TC5XFC0W2}N(Pt3 zM|{Jet|fVbrt0cavzTNgz3IR_sA|v; zHN3UZ(dGY_AtLsyxFBIoG-9eubEtf^dE|>aVolLslx8Z=9M!3n{m2?W60DR{tMquL z%v~n@;BEA{Nwg3B55V+XC3@K=ok5sI zJqr%rIU^n5>M{8510L|YS1pYKMG54T9A?CRJ6r4atr5Wpv10raiGP_ISc%~ZVZrL*kg3R+^#N?K$0$~(#W1d-;Cm@Qk>F?4^Hyw{h5Jy>$0We4v& zhh+WA4k!*5U-WCA@@FR`mo{W%tVvzL1A*9id+WAr+?ewxe z;kKx%(!P)Lv<1o9kav5+p)0Nl>kUFi3XDg=XVW~&Jfl*Oy+#SLKd_$wc*hnk;S3=U z?K$d_MO>*9_wW-ge%v8g^Mp9fnEi=t@GfelO#qWboDLoaf(U#|B1lht&?r^L#ER5U zy`BV{oRjb>t4NWhbppAm6|q4+?W$YJ`?@QSviX*kv>z>(FDi->E;bw(Kl)XpP!{2A z44%k$f=K5k??zf?WxDzHRmz(MFI2`>L639r{-TrernUR`BV_rXM(20VU)Mf1J-5)1 z;?pc%+_P8YeTZ|zJu8wPK+q(hP93QlLueWV)*DVdp&Z?MI1W{L>Bnwx$z5|?uo}t> zvzq$4yv);s-jqi(ZyoTfDz(Y5M!aR}N`q225G%JL9{&}VZSb^1|8*J63O{y@yNA9a z-mhTV3EE)`T?0l{NFHNJKe+pTLwm0=A3sT%r?)nfP=rSNW)GP$O?^k)uMMmZecz7n zIBcnXFZc)7((k`7Pcqd9h{pcp1W<|00>Gs4OMA%sCt=cNR-OVTgK{V%=#Z$dA_#Zv z-~VChe)e!8&4-)H9ous*$J=0_r5V3@>aX3NhtKCKfi#NDk+s|2L6acFB~(|P=yf(p zbiltt>6<$>ACXss1IZX&=_BxSS2?jnPDoHEoP;+H2|*2Th)P3De>VFowZuaZKi$zJ zdW6FI1Spem!LQJDAIZGkT70whcVy%U)UuEnoc3-rqw=}6;A|0#`2**Z)&gcNj|!If zao%Hr_0o{WDTzStCBPT4zAlBPtiZG?XmWU8%~TWn3}r0#FGu*`A=dbk292UI$*=yW=MwkxbA65>b36b;ukjDmR$*ZYvPeY?W;JbPn3U4uw~?G zp8oKOFX%`(5{h3)@UkW9Y;m!$B>GgYXPKpRc`R}KuNJ^qc*)qPK-?;(mD}GCpA=J< znI`OVwkV{E17?H1+@w4qf}CpU2!Xa}TDffM{)?OK@&A58<^NM285vcQBNl~RUdf*m zl4E#LYI_Mu*_C_NMQWm~#{c0+bM{9~TVDjVBRZ86#(jW@TU(5TwW< zz|&ANI0u+T&T&|5f`nsChmls^XfZRGh1Hts5v#?Ae?_1 z{+5FH{CQbAi!Cr72Xbkp{*|$FJ{zO4|L}d_1@z#BQV-2^ve&l#;{_hZ$uwpCzd@a# zPlx{_T|uyY1jBkUd!Kq2F*~Mb#Te`UCd@Xo@qM1T|z#!!(^!2Zk1*QmxReI_)=BUvlco zqhl)cNH4B#>B+=*+a<`peoM8|$9Q&GX2|wyqKpadujH4Rh5V*m9_>6#ajc1PaW(&@ ziadn-uQK^fy3aBm zEjz`J@R)K}IAY5LoRs$ZWQAfeFdDHkOB9>ohnNaHRqbiw7(7$FS)L>5iHfmotN`qS zE_TQibgR-}jKstb$nvcQF9g5mM{bLDXVTkXIxiP*Nfb&^eDv@Z_NKG_h(S<5_MMB< z{qqIu=c%xa#$E&YVF?78Ho?+qYc(h`^4 zb?tE7*S^_3N_@G_Waf(_7xwO{67THuu`@-YXNpSbI782DqJwiyKD1-&{+oc0rx|>t z-ycF=Tc5XQ?$UFS-Fa|{0OBb6x;bY8c&3tU#ua+Q;< z*X+v5czx{gx{gcoru1}xHpU@CJ9~}FBEZj2Q?(w#DsvmxOLvYP8o0UcDG}p-i`MST zSxehcDjR-<>P@*5&#H^n{taFKUP;S17P2kcmOPTDeH> zmW`Nt<2J1BQws?W`wVZptgjxXcwQU-e^GC%GdwjvG!NB{^j&78Noc%uE!Fnp;?1yCsL0-;=1PRm7 zwDk}~<1QFSu_tuAE!P~X->k@%lA+#e$F!fGJa*3zN<%T`hym0Lc!9n*;6bTb#_$s+ z*ZGfUPkf>#Pv4QvseS$Bjt-3to=m}7Jbt>`FolZ+f@@Re)xo570Lp*A<;EXoudJ>$ z(lNY6{tEHck{j?2A>Hn3Mrkx(g3@gGX%nWdpY$ic%{LszyeqAzN9FWx$*;I8d%P{D zXhUJF4tQN6RsXkdux844Jh2OTV?(qmtx8ygwmj=?A%?R-x76O__Y{*b)5*e^JSrhlMODKU}7#%>AEPq z2LU@xQ!*pZV^~wvVQZ9my*c{GH%bwzzLFp*)iiY)Wvg~DH;HM zK!|!>9-qWchCPXGt7Jh~BFBnUOwZi;FS{clpk6~Z>G%_@x;SmooXDiR-!RkuZPoQ1 zOd^%oe{gv(B?u!4^%>N#fL1CmTFh82ZwO3I4uZiLF#KL@Ss7yeo}Hs)<03VArO)Zv zfgKP6-puhVax{wTOrNmz^R8)gg;Eertet+s&X{_mndjtx`U^jAj3;GFDr1;(kg)j8 zn#b={`5KODIA2r&x^^_1!g}t5TYMrb^F-(ji#6#}Rh~TZLwz3N^`FkOrx_}!deuiJDcCSR@?$iviU5B`11YOkTZ8K# zpNTff84AFKM3ff!U^4b*6&UY5yQ@>elrB&=I|gkvF6FvWa5^`gKZ>8itM*Y5u&jsun3#mxOZiXV^kkXFhP^ zAJ69m(NH@`8~*atie{I+?oWM+U*z)g_BXoclP_kH?HJ=yEAWDnVx*9slv|&EI;UT z;2HTZuyTv-Yd6Ymsao2>u|pLp22R6_qHRH(SbA1(xx;tq@`NRcolzra_hk7agL8ZZ ztj8*8$G-X@yXlp^E_L~SX@Z4e7Jj%#U;4*^@sI~vO#PFv*A~|STk;r6dQwci!@uWG z!n<`r*L&GVqiE>8+;Y!hBFUR$)jO{8<;#!pUGeyT$tpfO{jI%)yCdFE&KLE2E#j*U z*mTs+qRSW|H|qVX!TKB%+zZ|Z|97U}e35EWLv7V59#T6BW@;IwZH3qwH8hsRC}|pb z^=M%HXyLELna44!tlO(Bufk@S`6@ANR+1_sVRvm0|CF@J@LZ2!GJ)YN>yb4R?DCVD z`eIYO!YZ0of99~#Kc>eMj0ewCO+HT#h1V}C`BSe_H#MY=&lo&*OUQ};^9Qbv<^I)I z9>c%_+{WLzj6E<1TP-TE>q^=CYPNHsu+IFmz?~M{Zyk3Gpqk@MQ zgw4bGj`>F~3>@ZI`eFTzo+Nc}E96Ku{&v=VPY>#07%A0A9?!!swwYn*h{sPLQmmV- z`?SR3M6WbQL-p9MmrHZe1MJ4` za868nUAe;ucE!K+%k1yrn^vjXIGqEs!c|a%qu>1QbZB8G0t7??F2UGoX5B zG%5!U4o(HqZS6%Od7Ly|3D#QfY@ChWlO@DyLuj~%%q(df@G$4n;@tk*GE6*UYQYyQ zSGjeJ8vlGeH2jEnmJX!L(BKz}^iQtF;Z*(s9T~kq*ACbLLybP0e!7i9e_-`WfD0wPh;FYFQ^zF1f==I^RmsaNl-5~>410e?lSIJlVKrgt*V-9d8pc0#} z8cSg_3~GF_f%@cJA5_`;T4}i5LwcnO8vrDB~^t%GAjJ+8{84E32;-k z0$=vezvy8J@SwYYg1OCt4}92RaMBGOUo}muQNQn4Kdf0E5tAipO9w{pM7?xNLwv8i zT&qfW<-rX|ASQ0deHh=BL$f2abMUUI?6C_?*@V~!?y zgC#IT$lZ-E#n}Xw0-)uC2C64ZI!CL8cg(NXH&X}P2$BbF^hZ_xTHdIB9vf%uNMp-+ zk5G8!y(%U(kJw4cj_rsLU@=Gbz7o;@mPe4(eI@|}fBz3%Zy6R<*ZzT`(jw9*4H8NT z64DI>a0og*Tpm8u30(-cr23XKiYz1yH0 z>-qW_QVlBS4#K17NMvc0WEt^3JLc@s#|_=*?CiiLa(1>!K?0Zy`>U3r(tN%cpym_U zXWFbPE@cKswV;s^drH3PR~ExlS%rjx!=;blHU89pe7^86Bp$C-9R(>H^AfFaiG);E z5}rSZG=yVG(PKx15h3j-|1czik=7Bj9sC_+yTUD?$~nkubfTo;ReLFvs<{+zj@ zE`EstLxIjp&l00ki=e26gdufe;o7Bd^ii;lAESWB;Jts=Nh=kzNby@+MV`G`Y6q(8^dy$lUO_t2EU(?+KMZ{ynGjs2^R?GtlpnhC>TlqA? zEf-K1fWDQPIo6G?!t`bYehWK;)>P87>+NHwqQ~eT7tDWXg{?WUs}in6sNO4|)Su}v zcsha0(_<%;VE-$dQE>liBg^5@p}<#WKic&LK+}ZTl%m*4nsIR6A*xA^$D0!UQ(eawK8xA!npBQ{Ngdd;O7ivp?-yM+= z#G7wX-l?X4S8(}m_B!NXe*68AySxOWDww*Oi}{UDEUPH+714r|ZKch7R2JH*wu-!n zAEJzwPf+bpP|A%Zv&FtxHBUs?^JY*IHM0T@SyvS6z=^#U(f47ui^$0P@Hnf>S!h(f zQyUyS7`CTCJqN^O->7F&emQR~JUmo^qWjvR2mkB1QACz;XCA6VKyf{XG&KO1=V5*4 zTSt|?BVYhPHh5?I6Gh6yJ4?8cNaxhISYlvA10?qT`_9tz&5e!18MaNN@w(5yDGl2{?+VJIaLPg2Jxs*sW_O&~6PU%wFXRf%g;_DeYBdEhq zkvD!<4ZdH)JO}t9m-jt(TulnOHGHzWLG(8th5}V(DE&RLmOT=?+`~_0| z`>f(S0z32+$}S#_&?;-2#wW#E_s|9fPD?Es2tgH_q3&_!0OBM+q&Mpj7cl(o;>f>K z)XqhP83q;XT4w<&hg#Hs;qe3)fIRkxkG&tjW)8j}BEnGLjqNP?RhsDl{gZuW*mvXV z3C&&LXPcKnIwjiMm-#x&tn*FmO*g^)+H#%OM*91B(1Df7w1}SlKT^HV;6}RK0(127 z2={0ETZ!%Wj$>3o6TeWTUz291*j0{AtkH)h+qIoYuZ-MOQyDoijt=k!@jU%V+os!% zk2X%FL=l4pIXv=o6qUg+Jbhe28!07FB3Nb7R_A#fJx84s3L-i?B zXV$jUblmwSh-okj12H;rQN%d7H|VAw_?@jIN2n={fou~bzu&#$nB^xVB=o5AmxT^v zHYt6zfrivNC+iQy)z8uQn+%?3U`(sbPnF~^^)G(8$yQ^30hbBlLPsBpUj1Z?M|@#@ z4cJL!6Q3w%P1Q|w5H0fr;<3tH&;k~V*J%0OC;zv;0!3sKf;SN7N^jLQlIp|E!D9dn zpyG39G2#$xHG%3Jb z-v&%5_~A})e}TbZA0Rmjj7NKmEzy>=eS)F*5aWEeKbVX_aYu- zTJtNHJmg!IC$P^+I0iNcUrm44YT-uuBILLl(g>oqM9Io+iC8S(<56m?a+PL&vSwLUS6APpH?$iztes_WQGSNkgz}% ze-f>%V-qwB7-o;9oclpneq62>|Io4DOf_6-)g1-yZ^OxJ2&?ou#-AB>0>Z^ zWdo$maG;U%ACCK(Y!C1JzUMa(hssfF`TT^aDO+>{ zRgN7P9bqpVKI(m_cgw0m%QT4;*xNYEwCHJ-LFW|gKhZusM#agM&USw-Sl0(64I;(Q zuo>|#$PRZbOCK!$VCK*@BY@0_IV`t*0cfTw&j=8#dS{8=oUM&rdJa8fz4-HMV0Z=> z%K?}ZWt)IG@f7_5;M#|V9w2+e84xsK(VfqmO4S2=wM`+JY^>I-Y|^P?#fjJ$Z`;+p zgPy`R5@Y6??ZDAagY2yY*?(ui;9NsAo1>zU9Y}h-3(wffH%peDiERd+IsMok76foK;gn{RoZV_4jK7z6}Mv@wGqmy~eqy z*X>gef6^L2SCN-d{~*gpBkW?a<9FQi8fzcJ*z2=#7gK@c?W@mzs0};m55sp(&86i}ZJU^2Qn<&Qd1EA4-5B9bgU zU|{tze^)-_=#UPFVkMaBAuWbUp3rkYw^}UkWO>3^LU^+2_*-d6+PpwdZ9GLl+xvrp zU3Yu&K?du$0n=;22i_D1mHEHF(QH&3KS+?`iks~h+jySC*%@)gA#YMQ>rXmYWf(6I75gAe!Zda&cs$b zp61jL1BN9*BQ6bg%CbU7_NWt*;pg87dZe3Bg0Gqhf1HJ~4|BZ<@O|lsyC9j89NTXA zDpf<+Aa$Rx3x{P2yN#+XR@PpvN3j7OV^&I!kH%L+BljkH@)fYb*Xw5y{Fy(gX+073 zG6>;15oS542anxSvd={~^Tu@fNzxuHW_7bjH^F#8I{|mDQ zORX}KITGjqcqOs{3|Ly)S{tdb{5(Q}0yVG3QgrtR-Gtxf3!m+`s?ofzdJ+|$fqQ~^ z4`X(O zdl~ASgNQ|iIi;2ZV%HuKMV4k_>ht@4EV0y=IJ*asHJ3`BJgt|R2qW`mFM-@6v|TGn(j~NU%sHhO zj5773t@A?gniPMoET@qBNhAEQ(4_iZka0_k=LxP1_H2-(3pak~=%7KsK z4F!~Z1t=o^Nl3^n*Pp{B10oG@VmB~vfvQE&Xh%LoVL5g962vR0!{w)>jus}1HU-ZQ zWdpm>)ZP=6#8_>P0#V0KRVW z9UCddhLz}tugzW{M(t-uGdAY`Ym0{M%z`L8LS<* zpVxBEeeh;f05_(q)gOC<#>?hQ?^~G1R74v6?%CN-rANsh z{R6<=&8(UMgfkGH1LQjo8WcF15+eWQR!;2 z;kO1W1EhlK6J7p?4GQswmAmMfLRaN1({nSiV$-`U#qVZ*?ix3p+;Cg4)r-E`Gz-{8 z7nRyuQ6`MdfsA|@nW=}18Akf@sb#-j2Zl*IxC=?l@5Aqd{53s1iotvazsNqxe)v1? z*@SkTUwAkr1mt1>MP(SSxi!C*1~JIay!iecOuzQOWJBu1k+hVFic~Oij>`W&Vu>zh zK-CVkn11JfzLRavg8clfZMyywMX*T^+k9(moD~ef!c{fd!*-p(@*{&40rashME{zo zE3`$jcr+dp@PdCtc$Q-&EeA-t$il8P_9x?W_h+%ZH21z&G`+M+A{eOY2qWKK#k##H z(bnj`@*JXs)|-*5K5{4?#e}J$=d_?BkJQh_N!IyH-xAR!iAeDAfg%dzDF99AWmd9l zW=o5p_vv2N1h147sGm(=I2jc7fhu~=cB4)a96%2v6;9_$-ExyJJlYv9mTxT@qHi{h z=r3k&*{0mY8iIWfDNlCRjz0~HFbdA!9rmZld8c~m;xX$75lUqGgfb{Y@be7YBzq3s zkjAah_g1c(X{LPg1N|@lR}iV*>Fk)W9tZ5gho4e69#Q&GU^xv)bnl41BoFs#f7?*| zb%d;=I=0;YhHeIW{%S!|A3-t|@53UG5?FY3bDlFcQxxEShJMWD=Xb+GM|ZK)ezWsY z(@g;H&rvKN@D`MC0N*jlkO4LK-yDhGyr3`uVJb#9e^Pt`+!++rnp;}b9x`@BZ{5fz zNS)H$LT}}d11@t~>=3){ug3z8jJ7NO??4VZzP;HCD7b}t+g*lZbO+S5r~BkPf}If&v84^cz}vBsugfm+rHl@ ztr&nfrXE}NzlI)J1e{nze=ULKzby-Cvrp=o@hr0K8GARz30!HQqGpZ=DlOF=!2*mS zI9Py{x2~oF+2PH}g2V7ZxlFI?o^2k$j>OdnPnEALugKMJF>b?6Umw?dhC~YE<>FP0 z1hXEYu&y7Urz_6P@w!rCMoK)ePRF#WyO+i^NbpD2>wprW5{E8Vc;cqt_v^TR(ftBY zBvzYi0wZA=CIyu8{dyg9r&ju_B||dX?|k^cxj0OH`+L6yP3D;J+9&|AJn{EJ-~l)A zAvT=9dO5wacVjZ4ZJtw*s-nu{PCme znxC&IjJM9$rCfkcjtSiqQKV=IKFrcItzs?z&s`l=xr;$Z{y&I7%QY*K)*mMO)+DOkAKR!aDU< zPAm1t&B8Y`E|teFPyb)EBG@4o&{TC$hh!&Q7v~+!n)D->8-W+K22l@ALYZ&8N|?Zi zX{oElqSO2}wvvr@xlm-7;g5z~z5$w4!E*M{Ow;Js%tIZl$*G7OrVWZLpHeYE!|O8; zc;vhW7G8>hdb`C7zCjT?VyXNY6^Qq%({CR+Mr75K+^oyj!2h00YW>GZ^+<#7$+Lwr z+QpAm#ZbT*d35E2-dR=q=-{9VQ4cZ@4Koxerz|BgtR>pwa6|c%E~|DLYKPqQ6;WAu z6$iUHsfykswphMxZu?TR(;sf>wA!UpO&oZZa7~GdnZct5xPRaIbadlnV^qX{Yq^YF zcaOCHGHpZX$;kmFrlSH}StzuBX4GQv5glC{8l4jx9w;RRoik|!` z7N6~)CY^A^NoQ3yBc&&}CX$xXqd_Tm2E?wF?*)^$^HO;*=NAvn6rgOy`zj$|f59uT zhzKfs;<%-VBKTa&Hy`XLAPT~o<(pmJ}COJMphn`*=5M((3d4=hc z`W4O-=kCk= zQKn4$VsCrfnh7a(_+&OGZg-0m8SgD~E0UL8m6jA1VYW+4v;#3ZRkL7J_QVv_0P{3t z=BHX2o$1qcbisFSE9HpkS?w_>1F^}Pmct_AKG1XN9g-1zuN&#m>&{~Zb_ zf$rhVk^cmhox(wp0JIc9n~p5YOI0;%BS1q6EZgR8tZJKgE|Csbq|_T3AAz)IB%6`% z-T?nI2%EBH^8~}QRiqQt6&J6$g@T!avC$58CJjZKFCLxhG?@_oh$2(JDyHtAaB8kt z#Ae)D>r{{L*^MlFyPE9-DSa|ASRi>&IaTO~UG@o7S=NinG4sP^l_ZX|gQD2dc*Jtx zg&5`Z4|sJ()*nDBTy3=b%?TG!#Ks>0?hKe${VJw5oR5_XPU9G0VwK-JRmXL4%6BeU zgB@v1^H53C=d+n=m0>IWKl+28zRz^XczOUWdtP7Z{-%r9<|h03#<85nM>xMP;?-S8Um%6CMGwK=5AExml&i@opp6Hy0PP>6i$#Pc!5>gl3$i~Og zAUp|a(n$J2t9eHa2oN%cqFkKA!jM8E5MbukFZNt~#Pmfq1b1O30gU2#4!=pWzF3^w zCl|#P(+cswbMq;ffcI>C2u9wAUqv}WVxjyro%OH$=}&rx zPeoBxMSN6i;}k~LPRiZ2^}M3A^ef^6NNoe5N&FbnFc3juC6YsaTC2}~3i*1k1#C&+ zi#G}E0Q;p#z>V*b-@h$ND^8`XFNUgs6`YV8j#XZ&4S^NnP z``uinA(dbjU~(AJ3olW#zFrea~FhLP1|jql;2qZ`M+RYNl6L1L}(%+=T#=Sgg-x^?6B$#F|Njw zz_g(-T||Nppl+N5jSm&3Ai#rmjsC3gm|n}F!Q}Yv7>71FOkiw z*wDhVDSoNN@=^Z%O%v&f#47Apmm&=s%uXZs^``Jo$vQMB(+nTlmG7ObQt2i0I8I6G zPsNupoz(ZXeXP}Okm>aHNn4vOeVcB1$724=Op4VWquc53s;O+5-&bWfUygwGKKJp% z;5#UMJj&Sh_4QEf4YgGw5ZEL)D z6H|e!iX(d%cJMAZLT$iBX^H#5^HW`NmGDRt$IgQD_8EzneZy(mZXm;b$Ee!)FeC#C zTV#5<7G|Srk->Qsx=-bMb?m_!>$k@T@sb&zc1vg5Z={9`mOO*l!n$33zKCa7UkVgz zjo~&RJWO#78seU*swfH_qzgZbA3k*`OxQ99~ew)KFUg!iofXr z_Smu*+q_Z!+7^oe%I}&6n9Pytk`MN-&UCw}(z((lQcqDAXS|cBxYwe*9^kc$-xXV) zB0?j?^joaO{g%Mfy;V8V`F3C1%pUo#AC<~OqfGNG+|K(iLmMeKy zY#Ed+#Z!udA|#O{*Kk}dAfrajVwY|yhrV)VU94oa>SSA{xoW6ptMO{#GOT=&^0b8t zHVwLX$W*2+?;BVna|)h_M8BrIPH8?jfOIcyjd>HK2pdQP!$!XVBS;XWk_@v8PDBE@ z7eYJ$n{=kS=G!_cI4ioG$O?pJA)b5_Xa+arge6Am5t>_Sm8$JRtvfz|@JU2fiTpi1gxUsE` z3i}Oo^0iSXs&;dQ6rgPj?x{_tuY+^V?TK1N3hmAz50R?8!eXxX%F)Uy$gNC4?J02o zOp=()pYF&r!pQ!2&%htVdI4O*@d$a!-2uom07!t#uY~>Uf5^@DrY2Qk+~8lC))$Gj z?KVD-QD_3K!~7+`D{~F2V3B>ZXc*DN$1m|Gi7lfNAk;L0G3U_luFUefLh4u=Kbob?3PlYYc4|z0r9(1OqDQPo@0jSm(?S`vA(cdf%BF+NEwlm0*)JSnwOSN8-b~4Qc~9M0S|yY z_ndI(@?kJNAg5)92C7Uo{={LrL%Nj5hRJl*jS%*=rCB@VH^D9}h^4;aO$(S=orlj& zcTz&J#MZBzMGU z@C;A2f>DZ6tXD!@twLf@$@}=w)qJP$xe}oSeU1U>y0Krb^_?F$rCO84(0?)>DKVdl z&zrZrW_vd^mU!GVf9hdgGR~j)HFmMr|Ich(f4#DB%EcMZ*V!XEC(1T^ho|uR&y5Xi zQGb9qciB2Z_d)1FO!P8WI?Y9-z&}A6dB~(Ur2P~CN%>E4my9$t!0JFoKmk=?w0QiM z=fBs7W9G}kCb3YkkCGz*FcpLhc?G!7-$EZ)oW>jdfU_@|ft(c_BY?lbj8KwMgr8v& zXY$oyeQ1-^cxcI?iSOlWD`)-~{}5ziC8_F5e<}zHFH^7C9k$^~$O~M_JQt(Y67JD- zn!{#5b%_Z(EB!q0iQXhnt`pg8F>o=Q=5sLjhST^`0Dmm)OF}SgL%;f>$EHQFBL8Dr zR)J34S6we+>^-ZEtr01hLQx8j>(RH5zoUF;UnPm6h>_-M7zBI+n&jx+Z=eKcPXU^` z@0WduOys$H38fC0)Fwk^&cDdL|EqBn6XhqVgo5Qg(!RRu78DOQ)rgGBcU>W`^~n|W z;^@;3yBA+gUsvaSf?Z!|%z7U@I88Tip-#QL(mBI$Hf@|Wx=*d=8@CRBcxEvmXT7>v zc>e;QeO>Z32Q{$pUF7cax?X;};dmsXG#X{EB>QjmGzzi9ydg@5jjH-Y#y_vwsH&Y7 z8A_mFg}_HU;ti_@nq4#G5CW*9&s;sH&Cgg9Mt%|x>N(ix+{4d0Zaw}BaW>Di^yZH^ z;YU$6avQVx73O-W{USRSHd-e=nFTHb4cV!eD+(%|J@s!8Q<^bGAAX%>&wul>D`(P? z)PgO7rY`X1!u}W@2~vAbM(UI2G1_(?rDM4MSeNu*cV*!&)!r%H(Asao>9k+k3%2xF zZN%BIOlGS{0dlzv5jwBPX2_fbtqx63mY^s+bU&Ry{t8!8a6lCz-CGGkgSS0{q z3keGYl_+0~o?(2JYdPS9?3@iyl#simbTJY)-z1!|PG^*5akVW#e9~trNiSi2;Q*x^ zAlaUipr^~P?GuW=(RmXsWm+L??0*x@u~4l^slyx-=2{kGZEnQlvS%&scsi(`DoPrx zKavddo)$xSi%rptCxO~31Dl^WoVla$8Yf^1e5ZFMC0T)+Wt-iS{!3ek|BoKuaJpNE zl?1GoXq)J@RKP(3(pN4)`}ELUBc+>PF~wZ3i$~rf*hYd!@MWu zVXLJwQBVu>9a*^W9EeA~OV(`Cil_e4X-f9@wW;pCT63pJp&dJ7%|3oeapdea?H-S0 zL&|*OmmlkyB~jHw{HwF2@nMD=X}axjJHyytI}2(}_5q6&dTxXp58cQw$G0z-NL~sm zp4Wrt)%;o$pQue}1cdy6FhC3kWIo}_%KHsO)69wM#MUP;gKL6!K^LDyT!qfN@a5P( z%n4%{2LFQw=qr0*Ru2FgZ zsEt{2EI+2un-q2#Fz+H{%&BtduJ2RxT@v9EyuV6t&xfk{ac=4cb-8E82UFq7MWG^a z)BUv6h-^`g>W=k37oZ_%L0<;==SS_Q-Y3eS?0YwEt!I?A(3rbQyAeSO`l3%b3(=W=;F$qDhlEm?u+Kt_<&1aQqU zUy)_32*Ut}mL!<_)6eCl%%E8&H;VilQ;2M7k9(XHfQe(ezU|`=I?NxBg(s+`{~qWl zc)1mRbR}4#CT&nn3eP_j=Pj}NWnXPI0MqeuYwZsB)CXs|v1|Y3MuVZq!(elS6G6wr!kc6LWB^UnUH4m8QYSo&gP}OL(JZ zB#+wn$ti1^M{5G%w#R@SJEe47s3fyo^pygwvJMXXryT{9!)6h{pNXh*bfwVs% z85R}wDLec3yAURJ+E;?m;l?rRgbjnAO=v zmFavZ?e5vOR?MDg+a9Z6 zn&rkwIE29CcX=?{Iq#x$lx*oS#qI*}g36o)AI07vK2Sf+!pMfFP6QI^IfvC&7Zw(@ z9jLqLFtO)H?}*7ZUwKb97%c?hT^v^hJ|71`;5X%*F>J-NbCUQIj}%)TWUca2xL<{@ z?aV)RApp=wqvPHK!e&R>Ve;-vg(sEEkmF~=4AysF?(|K%Kjg9l0jm5IRNnzwQa4(` zFe}od$I`|EZsbJJFwc7UT51CQTrs0{evPFdE6C9*M~DE~DbHI8ZB%joB8v-?iwsE0 z9m)^e4+HJD_FPU*^UHk~m)fCM6<@FKx9{?%vHR|KYnoQ29C^rocFNf>pt%lUh;>~#o@KsIu;Nw;DZ`@pag=15zHov)NSoCOc9L8c4%F7-In3f56 zn={L0voi2lD3lC6u5GVq({t6Z^OBHOrh0;15mEA473(tj=Ls){<9uU{qEYub2=g(x zXjvxO)(1J&`|v-1YQ})-EFz1h={0zh>RCzTn!XC309pIqFLOD<; zy36YUT$;I3M+%~({?6n|kEyuul1G0)E`Qr#h?Em`F_qTMGQ$+Tr(PfFj}D{ z?n0bL5H5wn6d-SdC84pD%6>2UmyiBHOXU$4!bu2HA;_gZEX$k`7G^D;6u0{gpK>gJ zxC(cI;(nlkvxS?MO7l} z_rvbR#L#M|a$qY%rrJ-t_wD|DD4)}pa!IIB1cqmJv`K>!3aiUI?qcmWLhtQK#-{EB zrI#OsouJAs+$h)(84k?&U%|SVX3559i^2x&$vE3bXr>;cZ3r4+BQT_9C>E}fDh!x{PMCdw**AW-}Bvk(c;nR zzqvt_-?O;&nxNA_mdm!hCVI;N?fxgb&u2%7K^>fb!<%V0pZsS|UZ8Y*t~^@^njL`| zc2K)k3ow2f_pW#$KauEMpRwaNoaNAlmI-se8i9@Q%wUf|l&uB?;ZUm66%i{8PM8RT z%P%yxU&C8vexK)W;NeyQh10H=G0I2d7qc6K&bLnG*JqI6L6eax|E-;g$7*JOZ26UW zxL6lX`p47#+EQm6hs&eSsXT@iZ7f*qQj<;f1w~-bj7KO>%O1>JjMTk0UsTo7E6Ec^ z=6e-|yunA60u2g?&zs-{!H6J4%nHmbP=5?8oVl4ZBS%H`%T<`9rFZ6u<$taW%sh>X zlSth8+Qbn=b_xEs=b1hNr1S6vp7n%}8tHkTgsPl#bb8Q)DrgA>*TPyY_o+S#aaAg} zH-zv7alEEleT3VI%6T}#8 zal-sgzM*!&=!a7`_gLgkuodJqgfV-d@F&fu%gmNm+CfroG`aCpSF5-Jzprswa}tj$ zYGfVt49YyBT%vArK>-4c=oIw!ixz_}&DRzLVjpai3>U;0FsV-o!by1m@g%ao#WgXQ z&uBLy2@)f}fRvCm0Zq0|h~(%0NZ_iL7^BMm?KwrEtfO2yBY<)ufj*hf@jO*vsrjF+ zgl26Qfw34jH~!ZSe-}}4p=jxC#jY8O*w1FZC$D~3WVGRxdixu~VBPfw@rP3rP_q&8 zM(W0C3*H2njgP%NoWO}#0lXHCGeoe9f`)LLhZgBsJ=a2_)HN;td-A4xtJSg@-ZI$Rmvsr_QS9-g-E z((4ynA{LIL!E#2wj>Xmb=Twe>vGW+;_Ok!u5*YRFw2aac*O6 z*}}08%_Chr!=|iDQZ|TM&hiVTywhprv#;?YBy;>6$;W8;y7xEGoNf$F1MH@75{4V0 zpVu;J&##`Grb#c{q^DY-?pf=>YM-=)zTOhrTacy{_E^}#&aS?*5|lv0qyzSWA8k#t z?U#qQ1??C6H?+W)aGA2Je%NT;%wv#V2#Sb@H|Kw;1n`#YfmseSAW-`Ml^{3T25-O7 zySSygt=Tnml}I)lh5?;GbXC~qmu6)B!IYoAG?^NKwMf`i!?!!n^T zMc-ChR#4t?6L7Le-5YN^K#0JqX}4iRaZ^Bi|3-~uoX83{*H?0>L4V-lIdFALC^BJhMn@;6TRbdsKAG{lt+tF69RE7hmOVwgmQ~ z4fprC2yMNWOU?x>(3-*r|DF!UEV=CJOb3FYP{ouLLJu*t8+mme10 z`2LiiKc83Dzs0rNm3{v9N?toT;=ZTs-TC|%uF3aD9u6M%oiG^pzQsm&Halo^_OKHl z$rrec{x!eHRG1P+tcTY3Le!jWhQO_G+!ZPW^^=+RA#oaT&RNcLnv5@}pNj|=X_(7> zEnNL&uJIJ-()8GNt-^*MnSSM{_J(Nid~0R--BeaiYLE!DxY=S1kxLRU^eBnGf7lZt z#6%}v1;)IDp&z`FOR&|t*}9dil~S)!^n0gex9^S{Sl;wo5muV>8F0f=EqfjslTC;b2X?TnwZ$g zMqb~*q3-pBYb7hJFf=w2E?%fqgjlWC_)endgi9j4>{tYLBnG(}yH%n;z5nVa0;}}( z^?wVydw9SpSb^vQcHUsFi675j%-|Lf(2m$wwEY4x+XNjKkZORI7EmKVmITIxsTV!$ z!dIPZtkK3R-p~+I4gJl+&#t#N*~UiwbtI%}#Lvvj%EG*Yh|9V$!Sd?S!i=1*$Vk09 z)oJ$6ns1E?q-y zS(^Oi*8%&6$5EOWCV#ZT@8Y(rGu4y*lGaAAVvCz|w(oQii{5f$N5=m9l-cE>EW5t- z9`@GBrzmkBorH6_hOBow7BLY|xc6fOfbL$R<5$i9qPPWA)#ov$RPr4ngS%4F|LwDgbP^hRpNz) zm9Ics4BO&8Of#v?1(@xUc231-mnus_vw2igh4&fUiXdaR`P(<4SxL(YACSTgI95Rf z2uWDw<4sNiu6Mv;S}r`6iWLOcL0xY`LxG=kv`gl7q4Mfj$X+YYw9rzu?Y_W~!WW0M zR;m5RzL{c^rsU`o{ydIcf+wyy(_5W z3VgH5d&uJLML+W(E}q9+cNuo^?j>9%Vl1~`N1i@X&_%dA4slURjO z`Or`jngV6oqM^PC$D^tNfH!!zQUOF`*CZpVSn|$iFcS-y9~}IFd;=B``C}BIXxIJ$ z&s8ROjyJcre?0pRNb7C)mPxP*00HVMuoxaQ_u~iP=Yh-(2tQZ{Hj8rn=WXcRe0(C` zst(n?&KH%e+WgAH?up-w;;)9@Iuc@ruO+Te{~{pyVt%PDNMjdU$y6%{ee2=sn|GIM z79T_u@RVBWvds^|b5dB}nq6HPKfmd}V7%reK($e?q;<&(HhoVoCnq8oz@it}Pv%Ky z+z?wLMMD05HlN&^X;BcD3fAP)LH@Ea%hPa6cy2{UVsX+d@g2xcGV zmWn0s`T_wD>3^ThoSc9gujeP6SxR6Xsx`nCdl|vXY)omCIC|t*DnNn{W8QU=qNV}1%SMy85WIdUP z6B*vpF9uKzd@UIsa1+=#e%Li0HXX&bRSivwU4K!6(+D>9jKSnPy-A_9Y>@+_US|Al zcE7f8qdPSQR7xE`v|Ns9`bV=c%@|MjYfi_=diXIkeigNnQ~2qGRb62OfOQZDDjyLv zOyKRkr?06#_RH$c4}?2^;b3Nwck9wv>jy(-fFs31fePoum?r}wN&(Z(3Ibs;k282Q z@S^}&0K7}D!J53BHLiYpiI--5LOIWYmmC(>hLy`ol3D4XBpi5ec#kZ|_`s1^exbig zDG&A8byD$!-f(FU3fIh&Zh`27;Q9Kf>;fsO_*Mm~m-cdx1$MrhRSe>i^Er}JYmLXS ze1NylkVS`2CmD2u)`N((-l9d)zR61HB-HXUvnnT^jWBEg zujY9Bd?MIz_C*s=e{lIVN%S7mj1xK2gpal>P4vh8>)6)Oi5z!c}?W=!C=rP+$V0*u!Ak#ctfc;*tmgtilI&(io zzqt9qm}|PLJ{!HZ&rPQrq^i6L?fZ%oUawk$zQeeDlyYX&AgRRW?M6b;i@a^M@^+xk zD~?UbPt0_Q{P8NM_=Sc6!5an6BojWgNTp7qD=>+wY$)c=OMK}g#g6F7TyNUbueum` ze3XjfST2x*bRYTT>|M=CXlzrDV`=w}je zgcY_Gb_{cl)X$=%lB+#yi{|m5xgWEZ{L4q_O@H|Fi6Rg2AcL4c4mf)kQk!{rdMKYTk|tTw#gMp~#a>#D#~3r{M+ezn|_ApBb2%UNa*KkTm(%?Z}yo z!tP#PR(`FqC?x7kbonIt<9JWE;+v9r<3tJBHf~_KwM}=abQ!oEaHm-*wWObM+~*|^ zH%Kn}ARR~9ZNbTzV*u&@TDEOC9+Q(}hNEHnP^WNBe!VrpR&YS5>5s!hTauVd*9C6y z`YyP~IkKrj&F48TS32#qldK*OJljsWsj|RtejYiH&y0r9s|``w(ecLXQi1<|4$4(E zEFQg0uany*gM`EH&$L0w>K+6*Z)5@!1+E50y($qJFbB6nn+)YfE}1F4g@eCHvt1~j z@0NtBVxi&;rHXhR;tYcT{%8M za zImO&$yTU*v)$$d-7P;1#P%X|w7qLkUV<_k)^R)j)!rg*?oBrr+jh|Nt!KYt)=BLtv zxzleJAPL!GyyG;<^lvq!-~RYi-gC?XXOEV@;E?lS)5)nFR!X+&c5v>F#oge$Ry_ZH zK|y+OMx-u__ zDH$j93+L-sp0-Znj97XH8VQQMrvw6iCn`_h7ht|G_^EUG(#fa`EJ2=Nnh`JO`JGln zhst$*RU%NGDtcv?;o5?0L-Xe~snTIj@tJUKF_>}!tN4E(?r_Ae6DXO$q2*2mN=*N& z!&hKCx8;C80y0`l?ib04pqZIIS1wXRmJdD@o%zk-vo{QQ$;p?mF!9lrLJQyP4pO#6 z58&QkAGPK@H4aX=URQ8|VK=uEYit{u6EW=avrmIt ztXxUFWmY|99woa(UW1#;n|0yO#Y8#nD;G}0nUzPl==T8i?$enG6u!XW2+S6(UWkv) zi+f|gmLu|K&C$|o!g+xse7GG@U8noY6JSn?IWK50t7@)X0K31`O2>iJQkpA#{dUM0}cge=v0X^*Sjv7O!_nsB{xmE(an0;soNAg4X_^mY*(vUW(*pVjX z?xcDyG$GAFxLn3L&QFohI#JQ{pRurSjcyloXOFC1e$B8dJ1t|_h#!Qr-68FmX|DgR zOtx9$B$|F6rgAL%7%z&cn|sG8d~L^oMatwKv!;HmAN1kO5*O%So`*f^c9AMf<&Yjp9n6TKzfhwIq{}jW~oTY_8R*2Tq z4F{6OY?~Rp8cs?&Il6yK(t(w}bE)P~RmQxhZ-d5PKZ_}^%WBL?u(9HOCnv}r zXKK9r-1RLE#Mw$p$`0ml!8>wK?ahpU=zxpw?Gwi0j^yI|Kd*g_*?5DW+=QFzkeojL z8Ojq!bmsMtl*Z%X>6H3YIM}yQP;l|qONvOZ34pgA@Cjh`PHY{0e=Ma823vv95%A1n zvl$iDkb_-bL~OItMa=tOc%h_LwL@(l(Ui#7;qE9Unw;UFI(Kr*F=j@)i-ireISUUZ znyWZ@gf!rM*5)GhZ9<8mM}&`18Q(?GhkSe|U{(2rm(;adh-pZ@rY#Tk+OP4KZ_7py z?IoeVIU?^j;v$(Ub&IuVV9?*#hlKw`VD+xfyv{4gZ(2GZ^!V}={P@`nRA%#~%_iryN_8fNcPn_CWg%I9||}fFBlF8~=$=1~Mc5*+hCQz;&nKl1mUINtI75dtts^FVj?b zAXU!sQl{Tj=$zGQYiHPD*Ez8C%SF$x6a84WSPx;WS`+S+Cqn`WtdV9zG|q#30vsQc z)|l&?(y&rYSnQz5=_W69^68T#{Twvn7yc}m~&AGAnbio<*j$wcGDw))3A#J`xTE9pOt_mLB zYGEy!GF8zSiz>7=`#IcP)UXL9c8F!*@VMVg=^L-!NBdj;iiPaDvS_xzE@GDTM)U*; zOd&bxWIL@FP?P?O%A7!Atv5=+Sw^XFmHNP4K;7X5r=WV#*e0PxqL}`u6umqD{+8^c zx$*NqIdh!-Xtv6fpQ?A6a&pMCV~BTAQn};4Jg!SX|4Ij~AkZ(2E)Y$0KiG1jxFl^i z`0&~Y`jg7kcqY6l&}JvrbSGL$pEuu_rk_8sE{(L7Qbex^|A;?dQe1dqC+(DKh9&Yr zb1K|w$4tufA&1jI^)c7#1wqp(R}BW3#Sj>_8EKZSzkz#7F%vyeZ-GxOTZ5rV|F{x@ zlD8|2f0rG$`P*NYriuV(?~}mqtJaSz_E(6x1tJuhw`Pygh%t2|1zvZ(ejE8OX8=kj zrztYXH=jT_@@Fu8QaTySIt(ivlGA8Qy=9TV%d7dWFu^9Ll=(MlYa;(f zVUSYOcN)Ke1L_kIavh~q{+)8oHi0TJ$t*QyF@5lx=AgLMP(A?_RG$|wMPn^uh@i%{ zM8hm(s6lzF!8sG{fTFaIz{S#DCRl8V)#2K9sj76IYaxi z)PgAd2u4@4D`|Auucgz)>|G~E_ab74g*^v~9)J_eDgMlzQ-AdP3-pSIiFNB){D1nB z62^BkdXmx;k6zUb$L?VD;G-w#!_DqvI!!qF#hjsh)EkY@Acc)QUHvhWRJmkInTF$zz=a|?Y&pram7V^UxIQcssL*ENJB5lJ+r|Ua+l%A z_TA&2r1egj1f_$hw7}8~upi2kC2H`Xmsn@(NfynYBv}Ck3Mp{EX-n7?hhu@aD92mm z1xg>;4?~s@HECtMOpfO~`cIme`qodsz%Nt~JsGKkT<>O)wS;3!hz+iqLVvZ{9tOEx zBNJkUgZz`dw;Zx5RujK9cc!O)UBsJ2!KI!xe6k?Lu54#34`J3}8gw^Zq;gLJ2&~HX zi6NEhOA1Q4EiG7kHZP89TXo{Pv9JPtu0B-OjEGB-9cx4Y$Cu4 z6O8O$nk=bly@B;?D8=^9`3^_}{;(vJam2ck+yGTVz%e;8VL*cVC(`BmQCBEcA z#m^Py;#uc~KsJ{t#Xt>d_Z}h$;2|=xriT1!atUVr)I{VKlQ}f?n_2)+jTmUY|`#=X*kvdU#w4=XqztbN`TqpRq_k22D%Nacn>B$LBG(s8^}E z%(=d&_QVCdP#|eu$-V@ErD<~vcfq^_R4xae?_lOwMH-0kZ!>F+CH!MsmZ7(Dzqh(#Aiy&d~NI%8|Y*rPT{IV}cv?V_YicOPHuTA14R z`?kT(uih;t%g_8_AYaY7&j^1m<1DejcRr#dd`}g@aK{HJBG=+Jzb2d#b_5!Ulxo$X zHPiLMK4Ng1^uHEwUVpQf;#U{2oD&Pnw*`0;BcpyBw9(-y4OZHV&5|#o-JrSxXmp26 zr^l%5?*zE=PkIhZ1IPZ-c1pyb3tTV5b9vn6_Tww6rP@($Q%LA5lPtpklio(HOM6|h zCBq&2YhSCh5*mi6gbD0?vPrxRQj<70qB)2;RDD=JG3eKS+i)u%&#V8Kzj$MjRxKYHzd|(NTqK!#O_U;uJsbLN@;3&`Cab$zSb!LRX zkRzK~wi?mk?!qK>`&wM|Tf>{ea@M>^Q$_onE`5S{ju+p&?9-uB*+TGIN-BJKzD(?f z0>hz3ND`;TyReLkkBGNizfdip9yt5SJUhIrbItMU#zu{mjk=TYMZhiD8wCpB zvKm{=P(+sWgkacV=B(SujI85fi_$C?S>KZ_btQxY7q6YCIYZhm!kUrThb6IYsok3{ z#m^apX|hoJfGm?3cF=lkW!PlpXS4axiyITf*&PhOm$)5< zmf_em%r};;_?Ga!V}`-@hXfIq!Y(<2KZ^rfhjTg@OHV^afQqi${wDewl? zCV^vnf|a4J1@;@aJ2G~fUHaR(!ly4b8Kg@(Jh?pue~ew!I_hr@5%--cRtt=HWWhp7 zeEiZkdp^ug_MCswx@qu2e`(Q81s z6tYn3dw(jJOAhP!_Q1hvGprw*&)6IVHAVP8OfwZ+I;A=AWB=IT_jf^DfS-lK@9wPH zs%jtV`-sua1u}Y1S&xTKa$wZjPm^8{`b}sJIuEXjOx!JM{s~H17td+lt(#+R>OWVT zKv91l&;bOhf0xZB{ND-jZ20rMEltJ^p9|OfCOJ_5(VH05vA#(u@zdH^c})TB@m-b) zVv9BE{!$puaLDRusoFcN8vk`_ z`VFtGE-5M#i;a!vg&lsWH6|6?Jwm`eOv0NI-7`1Fj?RjcDihPI6Vt{_VLl~|(dTRy zCJ)IUNoLk{@3Cr+>4<7}+HWK3ykxX(HX3Jm|Byq$1WYqzM>UFpBGwPbWI%Bg`vA)7 z;Mh+nwB@|ot2q-l@A-f6p*_(ppm@^+qwucad{Q|yW~|0=FP`BtXh{L#H0@3`i6gZ4 zBaWaTp@?!{p3N1jSG1w#Im{wf^_Iz^Fq-de9q$P{{bYD*vIk2zsiok`H~VIoy#j|_ z3_F{LO&R0Q4HIWoqr7qluYehEdKrFoy{(VWZ}kpWS)n)3dlA#+6AtYgcZ{8tN9j~% z)VpbX;e=Up(B0Fgs`U)_edX8>1qSt#me8)@3xn!^3Vd`DSjs+MJ}MfNwVKy%cs*T8-C2nQONL*ktOPN9T!y_jN!m3p3_upKX4!r8C7g4#N zkR$A;E)6U&^rP#^KRWjxN^+S5aG14Hngifn)94YBRZ0r376W(<+UrukXo3?1q;f7nJaorbi z#C@loH&`XjNNJYm_^o{FBE5vOKME92CntuwC;Gxx<>lBab?zt*PPx4juWyWm24JZqi zds{-1Oeq>j-N9lh$EEYkG1}Jv%YSl`2AKPll%Sz^@)yZmGKt1u9ynB=5t0nQI-q8)oi_`Z7TSvam`_tzj4yF z_Tv?YoUC>wCCX&p7fkQgcM8y*(X+Ll@Yg>%wwfW3_E&u>i`9Sk5iq5dn8*=wSksn#(fO0%v9~>{P zVaM5|M8cKgkrWF@_El?7J~I&j_NhL-lYtLza5dj2qQum!{&QsrqA-U}=}p464`Ium zI}f6t#ZGGrj|!Q{>OKh?NOkQIV?_$RCY0DRgW8JkM{$(9eVEOd>)Uil>ab*_7fwlm z@Y~)<X+aX z8sU=0tt@P=a_lYEuNJLl4w&`X_8myLPKc%I2n=v#jKg|nrutD>2t{-zq)cNjHEp~Om z+GQ44x9BLYOv(3xb(E}_aPkQ z!R83|n>`W5|I8e4vWx*{*la6GGV{9o=jW~AHv$kQ{N$#ya$P|7WZ%1avy~DeiE-V# z%B5jhg#fOkS%eWy1^$%ZA3fH}G;|^P8g^t7MRg-FCw08Y)LpeNgaay=NsjjR1Dmw3`)UA3L>bc*{}`^^K4B zV$Ls0(6=jLyxp(Cf&Z%Mjy0YtzK`ID4sW8sk(O2e1-05_l8$CY_z`g*lD;-h+Qs(^$Gn#yeeVmu2LJZ`aNdA< zAZ`M9LzuUb>(b!I|K(k0jb>Z}4YRQ9O1)-% zADXIWmXPeOsa6i-iYG3TdQaeA2@I<3=|@d$4S`DO8`X!}s~YWDkMq9mwkYi$`);S5 z0>nj9LFwo&`fL=vhY?!5)Fa2#Bmnpm0r>!O^x!AukB2cvhfP2Daa3r#cjpW`oBTmg@??#T9JL`~q`QeCTGW~Dd;B}dL)dNHzXr~>WfZyPzeZGGI(jQ>6(VL*ir zSVVX-&Enxv&gnc2#Y#m6Cf(R=A*GjpIw!dLm9cdF zEypI4${eChz(&Y{CPv>wLZgD+cp}dGPk6uI`=biHYz1fQ+lDYhyFaScF_YFwg*`Z7 zYpqJNl>@Egeg(V-5yuNB`OOe;v>ZoyP&2bAIps-K`#BLf6JQFoqF?d76c5gBd4opH zFXwJe&|bj^fkZ!?MFNEHv9GD2$H;CO+W>l3VBYngt<1l5n}J&hc)WmU45P5qWq;Gz zW(LMjXje2QXw71~;e>gd|6GAOV2kuIR7T#Z-t%s54vgmUdJtLiBPNLsA3!=AtCUjT zU$ue_Z>zOK0X}^G06e}y&gC=wNVSMOclOKI0!EYDT0Yb@z44bl1g7hk5>B6MSBGYs zW@^+aROpY3? zCfhA#ABf~sDBGc#MQCIR!SU1<4`-?lGCk3MRETwLvSpI%2%rAc{}biGO=MtJMLXx(4{)9-zEf_O$_SbxbGk8Pe^W5J?L&>aY5aU^uHoGNX_T6cIlk=hB_Q_ka>p@RH356uBNm6z$cpW_}Xb$?N*lA1J7pv`Av_*mz+S)x-9=) z9}u${Y;8T=lB)HJ3{sB#wrHO7D!$nT3ayHE1fWaMrprRP1q5gTeXXlr9MYN#AU5NB zI%hOUHnNzdm6kJf_uQILYj65isM`P4$Scl#tk|hju8?(QxRYt0_fZH_`trQ+8|}|~ z>?NKKRuf2&$yD4VGaUk7P!|9I?f*&Y^bLZXOKt2~0`Yyi;j=TTRh>(94;K63#N8#q&$4#|mGFEKzc8&?dcYTks-D{42)LDdH`Ua%^4TuWT7dr!Pn^GEjX zj0{2|RvU8UKUHfe-cVeCERd$9VVA1GUi2K{tQK*Q2=Nfag>Ag$*k@8v`Yq@(t9dNL zI(TR7n#Q}>D$Z3KOSILVcyw8IT*Z*|tg#HjOn`2m3Sq@-YomnC&@t~5)~$cZ`p52D z2B{ylZ?XWmi9l~DnuQWl+o%q=P3b)IS`p6p>AXUnWl$qFKw|6Ij0yS;{^3$V4BMxLY{sv+b_ zsNC6GK*1se_f6P`i4{QN4*<5GmRx!vLVV8mZWcd8Vm@>4{P5?tv^B35p><&y^JdO` zNrtW}!j-*8lUV$A&wHu&%}mB~J|!?@gG*P0_nIWJ?L?f*fiBvm%45rN6`hefK7r#_=B7L1B33%a9bap9jEs%tY|*P-Z=HfVpkMrRdrYA94B`6x zQaM#QQ?qD?r5%)850gqWTkw&>R(AlhF59Y-+p-<+wxadtVR~l@Vip5z!nU-o3Fzq1jKZr+O zJOW^lyd5{CqU~*VzBsNm8yfF`lwl;HGhTVw4_sq-e~gE%SGJ&2l?QipOO`}E++${@ z-}8`e#aDC!ssb8yY%Y)o zo?c#!bnf8E13bYM_`PM<0K^@dMLIn@3zZ+o)-DEGZN~z3hAzI^rUe`e=5a{obUk^{V7l)#4}_F|c-aH>caY<>o9Emc zuK+XXF){^WvmJechu~{IM&P(z?S6>kSSzD?q;7wIs(p%{Kbe zYNv~LOEjG4OC6UA*-RI(iyeVW1YA%w+%C3=Cx3FtZx1pG=LoO*7OPVUfQ=iX@@#B? zyh4K%1es!T^o|zzRxq`fU<#G1ZwjxKp;C?bHBKK$^`Wyb#zfEQE?2m|d;Pa^Azytq zegE<+pZT-$)x*mpxzVD~)(@>GrL7+w&9(1>_s`jFY51FA)yseL3+($yMn`bnwY-s6 zN+5L+AbChZiK(I;o_2v8?v}j>ztT*qa^WiX$)mTA4eQDRqHACq0nQ%1?tLeO+NnZ_ z%m14&_a2E_)iE)uN@9hQ?er2+`e_D52pSL?L{*@Yv7l=FtaB^@4 z@j$;N7<`!41Zl&@^CdILjXd)>+p=_nx7-Hc^#XJQc+`X+?9)+?$>L$6Ofe&+Dj->M zahm=4;|FNAgOF^_=h|t3VOq-D#j?Wb2TIr*tvUk0Oc;iUm}^Dr+04wP!Cljm-EP94`GU?TTGW?zR_{ddf9%yV6%)XTiu z{j1m$3yUdO`c{B0ARlf^9=b`&yq*Ez{NysIhBP~;9}RXinLirytpTlvQ#{oXnvBmB zVha`FSXyMba_tOv3v-491JWK;;)N(FL2waMto?8&5(-D~5^t4&7nSu#sZVQFb;CNQZ3ac>BQ z=+tbgn5l^>M*jw7kq`c@t-Cf&1g#?=tS;XLIJXbMMj%~w@{`PjnO45~FuOTg(R!f< zbie?`DMKe)479Oua9O17D+ZheW*OB6C_ANWU*|i|(KO4fC_D1ndgU zO!7cv2k8y zto=i!0=hl_h0-OU8ll0a7!tk3fjXRn=(_GQ_*Ngvu47+EU)&U6tg^K!r}H}NJsfBC zGma$A(8kF7r6ewXM#5ji{X2hB1YfS~rd(S%dSoRc{^;?*v#Y(RSkWuUp2apMACU*W zINKcp!|^PC2jIwHlb1@B!Axzt=_}$9;+8((qyR4>DygibuRca412^Q^ysy#7RIC@? zf&j2N`~wc9cJpJ&>D^#Vd;w$@4uSsn{Xzr~5Z3d{FsE!&?z;2Q!I>)->O*?*hJ-h) zx7QZ7$$4&V!d3F}r!4^+&QX7){cNJ47FvWU{Pe~&(S)ksHEafQ*-x}~WaVsfvyQay z{x(0;x64!{uhrxA_pig1(8AotD@of}E;qn5vlp8sy*bV6gy9Ar2)Tc}#}vZ@v#>js z;Fnk06MfM0EV?Y!hxQ<46rh!J{9Cm^KqBA@sDQu(NvyC4;5+ef{&%?MJOKp{l;Qo1 zcJl>J?HWOb>zPQEy%hJoK7rPoxXMbj)&Ov}C|>ta8B}6`_O1g@8>BDF3OBsvAn~Jy zs*NWdROh>xYY_>yQzT1o2haQyNH4`p8w2GVuqEkt78IMaZR$Wv#PgPcY4pJ0llk&R z4VFphvpgFP*%x(3Fr^&b@^aw~UIF@#!XOvT)1@7p!`PzC`8LT1o3( zegwRsf3|7RuJoDgi|5FltT4j>@Rc@=0Lv`0D+RN6H}NUh+>NfMx2d0%Nx=#-AE5^+ zFxW`}z2D+qx7$6L?27_I!4NX+EZo;kerb9_uwnv*T#6v)nRSELFhflutEI3ono?Lh zHhT1Dm#NQds@fd{%^xxpXxf1uv1c8N)(;SOWHKp%;15XhDz)c+v=4fiju&%P;dXc# zMv50Xr~w*Onne%f&iBUJ7lw6$+jC~3*l^FZWp!*2KZCnhB{-J-74q=$sVJTft6@wEHhQd7GUSSeHfDWX6{C`@UL zTmOsypJxg_@5>y{lR9uOlMxPczv1iiPs1x~-+gPcNdw@ywBj-YX-;287Au9K-GIs0ZbwjnU?(R&X zZs|f}US+(f$KB^qiYs?#!@^cs19ySC=zi_U;LTuMUwMsR) zNftKAskz=#EdQ{MH4&jUi>JZNOSOFDHq_n92M?K+($LGL;~629<0eFY;l7DqrD_ob z?MaD6xG!n{kXH~Ys7hfT2^JA0laEXSc>L-MYYT=eHI(EcilFD`85?Eab7jPFJ zv@^mPY)X;$zCo|rhdAb?ei#&KH798cQ!skXACi;su4X*LLtAYerQ)K&+mbw?aeSj( zWNyZyx=fVXaQxaeDCasy!4e1Oj~ZOLwB21pG5(OJel7l$6*w*ThIigeH<6=!cVM8x(WcFpIxHpUm2Kwcuk>xkbriBxYRuR|5 z968!d?pvwXtwrZXY_J+Xd`w<WMMbN>(=dL z8IH7UjwO}Y%_ZT|M_+C33^!f#F~0iVS9f&>>$L&~K88~Om(e^d{+&rZ#vt)>9C4;E z`)s5VEH%GO1_vydS=UZpZ<%R*Z{s)*eTFMF>vfB1kJd!86A%*y(v|d>`g)ELlKWUV zTs$#^W}lwCx;jB%`54S0E6@iCPn$|_l6-v4KEnv>Ev>^mj_3x9bhN^$B$Rf^V~%;< zkDQl?$o4?k1@Lz(zgiK8hh)ffYH%^7qx}KE*3P=gea+)uMQSB!HmBw8KKbZ>umC-f zmzoB8CT47Pp71PP%S%?IOp#-L-&cVe%`K&O1w?9dt zX6`c!!lCA!FT?T2YXw>FbQGoqzd;z{czb6gU{B_&Uj;PrB0|e{X{^ZwRqu9r>FI1~ z4p*y;hV}@N>A%*j7NAVtv_Q+atv2c`olt#BK)dxJLh<}yA@q_>hL4&I6-!BkY&6ug z`dD}BH8JmKn1a7hC~l{n@2r+9FZ3e<$aR}+(I_3oOuN?2c9lSIrFlCrYUMCruD8Mm0*n>ewdMPQ&@ z-*BOnX5VKBMm06B>QSgoM@KPwXOokLcXNN_dfRc0-j>sMkxx1SH!vqc$aRIRY8H|k zSG@O2j^BGKRVUN(pV;=QQZHgydk`YRZoYgd7VBF8eQ4~&Rz5zLX8UT{=yiESixMD3+Ld2p ztZqC;9b}sbdiF!7A5hJmaZJm@Hy9^Zo;{J=RycN48)#7ioy)tM$2`gFk+D|zShCIo zwAfe++|ggMJl8v$>rt%SokM|w%Qf?q%l1V22Pb56Dpe78)0lPoRX>!`ku zY%G>Ons0ok%S)#E271&6pa2-RwY!KTxBn$@uWe6q^qP=uvg;Vl&eYZHSEM=FZ!PZf zQ$n}#7y!z0l%X={H3ACy{1RX{f;x|88vup@5?|MGk*yklQvq_l7`HABKE^HyQ&gi4 z`)`&HJ}@vD;D4o8&-q686QfT6Eh2}B~9Oa|Xb-^r^m)VNA>6yCsN!LL#Ju8AY9N-JWl4=Cd7!}uB@X|h9Sa2`N8aOJ+Th55&6-pH8 z>$Oe#%s$G8)L*n|^g?N7u^A^&HYQ?n(&Z(o9hBg`T*+0r+HbKz(*^2Uc- zZ>W-8sr$9u8D_9qttI(cIup0e4Eu&tvlr9`s<2r-n$A&2E8X+Hb@NJTe&KaP^e5C% z&ZQ|-3bRF;LNeiIiz>__o}k~CV8+Cj&@XJyhx+@I$hAvdeJ(lX(kkA;zhLNTL<(8E zfa8rZ@buY8SpbeoQuNB6o}Prk7$t`9-)Vt>=B7n_4_uG}l61(oMEH<9n24+slGD_CYEi)$}=I5)QV2cy+F zdVpJfsES}4$MrveieqW2r2 zc_YH+!IV%KK(8BL<|5bTdIwb12cQ~#i$W<=Ob>#{Z-XT|=V~t@;bFS9g605fMK@rU z{^f>uN8#S^4OUy8diRp#lKkg+j*Oj*sjN{~BQ@y}3SzMoAi2TVH(tML07_PPkvAgW z%`~vcTPcl@FpB`O9W3Q;Uwkc&peau#+~PF!-Rld^(n+~GWPiB%xe@>bRVFfD=DocF ztEzlh7%53=(F-4PL8m~0J(jdVC8O7a69Fm!{5rXIaOgzq7j8cW-KECYhm5JH&)6Oq zjn*X*z-fZztgz%Jj&~AK?902NnE9(&jGZ%4y{nPoq}!ohx$0#-GIpUHdZma|XTs0( zc#JNF^eas#zD+T$uYxqmNi%iZH};D2D3M^fnQ6h6t|toe-CmhBF;WA8+GJBWib^Kh zVSOc41M1skU@rzNN){KhF>4ZuK=y4zw;AScRy@Bj%~r+*N?u|t`QZs}GF+@LC z^f7@zRC6e7fI?_rOtOyV$F9}?w=XaOykcZzWG0JNk`-|GZl6~!L{&qm34>w{$4#D0 z&q3mHs%00%Z9MKP5h3k4SEfy#RSxOammVA`asw;%4Bjrtbop1fXCcA`?&6{ps@9wO zQv<${i$wK%iDG!0mJCt^bxJ=jTxSY?Uzf4T?)r44EaPV~;}_0^S~F$ZdYhVkw{9rT zLM&FqXH_A#x%vjb`sX2SMx?e{wIySb9ceWpwi$EyRg%&xpn7-=0P(L;UlCJJu9%b( zcL2+4%-Znb568m=w?eo(Mlg=@!@DMuUpVd#3&Ednq`lF&FBoRA=Wh<4=ZAB&c5k307(b&=EU1 zmjyMvI))#+@}MgUWL?OuIh(Kg`VXwObGmxN@@Uz5-Jv@h@WPL_T?T*XpUKwSwH5q+ zrrrki@N^PmxMmpT_0KrBuUt$xhTCyGpl%?6Z5Jaw((iz3x|zjN8UqNB@)U{sja2VZ#Q4_ zx5LJg?*`yb4b678JY*n72G|SICxmG!VPKtrbP0O9$*Pv?f`Cho5o}MXQc?nr&Ys>J zpj;baUlB^c9nPleiuLNt0xl(MF`9gb;@}g~Av8-lXwr#0DK|dhef$B{OO!2MR75L!erCwkwfyPxUk*VV4fe`H~h0fRLQeom0tGVQ;{zOAGf`5RgQh=$ZVsk;1aQ9A zeBj2ifwQowc0?F#-4$=2mNE#3C6GDe%kWPf>=l<%kbC71l>Ap5FY z1A)VnUTFvmH(W*VjtHR*@^Cxt?%KoQ$z$kS;d(E%ZRKBx5X)UsG;)%s0g#dGUe-lh zX6j-4%GtpQ3I>V&L&5eIc*8grxK;Xg&8@isc_X!&dpbRh|8U-ao(=pQb_zH(J^_eN zb-A-Y!Ggew(EQ(Wk%4zm{cLP`p!kUq<_Uy71|mLv{BR9&GQEdNtA=>83)czRKK^CQ zZ#l@W*wp!UlF_7;DME@Ayd8Fz3<-v}kt**K>-QU`I@|_&w8nS{e|3jQS%j^u#UmfAgmauguOGeSun(I*yb|?xe!wm zLm@{{&-5TPY2_Bp=rtlg#*UVue)RMLY(c_SfK@EaB1QAFz{ry8Z?B!VJjU68^%CnP z;VZyeKXgm%9v4KaPVc(QF$s~X+JI_ZT(M`ovsulpn+z5o?Xte#1OsQ0ZmFoLF>@}b zYtzkr=shxh2=t}Q0?rdLSntoz)!@quBH*;Q7n54Ay$wP(P!l{5`S;d~#kdHd;^Ke~ zjix`PoCY?6z||h4L5e_1bw|3sWzc0R}bErfos#zM|@5n+&XxqW#s zE&AZqXNEht-@Y(Re;TW^zs>(3j4{+=O?(s3v8^-lrXR%YR$JcS`B^@gl;|oQ#Q_qG zV`9vSn<|qBfxRDv*cClzBVYOTb@<~_BdLffX{rgx0PhL(5Cv5>iyQ1w0h6VFgzA-_ z*!$1}v>PxD1@a-964K)DgxI`?&;MS}A)sSvArURU(Jc!iTniJ}&No6c1qRz~W@@v7 zU)P7UD%>(Wm~)X{P0SEqFLCuoiN2dAeLalAnYIF|xQcUb+3dS(2; zV-v1Fk4`)3v2xzBMFf%H{d&l9sd)=BGnJ69KDO7%{+4AS7)z1%b>K1$j$if($tc4j zy1rPX!D5MNuWD>?y^6mm$e#IB#2+AvaTTfHfx}DUXAH}8rb75{8gj_NLk_g~kSfE$ zxu#AdncdEO>Z191Gau8q151>GrCZ1Bi1XiX*10RF8-g>%%brL3GR0XENVbKP!*m&H zs-4Aw;!%csNv2iaeYtFUxdX2?>s9C7rB~J@swYI0)71bd#Om+=8|h%TWTd%;c5^IP zYIy3JZT!{6G3grPz*E;b>00#x@Q3MBwh%)NlMpt}t3@(6Sd^BTuGUf}3Y_QItZaE& zNi4+oL9GFH8(FlPe(nY4SC!ve8eBQ}#e=hhI0q?xJ8KEM6(Q$Q(?`F-zw%{$smZjT zbNIF^x=9LZF);ge&t43`qHR=MVD}mQ`9{WxKIW|d@0CFz6v=XrQb<;wEc-mjn8Nhs z^A1V379sEJBZEg(0*@*(W|z)r)W?a{+Elw(exMLk?g$shuF1PL}bsgAY05ZU&D*2Zn8ZlMRuazI4jasAXZSZyWeX_^4x((75v9t<ayO^XKW5N(;QKY8fS|&2uCcoK(XBO(@7FCEuxjhef0Dff zmD9ow?5vY+MAUq<&!fJT(UUZwa{>$;uNv&~9lwT`h+^*FimrQ`_aLnr1H$|76>`A#jL~5$tdL>3g^yJ#n+KAV_MCanybM5o|>6^xE zaOqJ61{a$P2wrY-8@2%^xUbLaLn=ga?pPnw%sng0a1zY550GyWxL1=pp|?0te^q9fu)T#*vgJ(NqmW_neZEQ;fo;kbBL9GU{T9~l_ia_- zRTpQ&uQ^fSH5uvQ6EyHFdn2bF6aiU@Bz5N#4Gq+G z_1b&^7Ur;g?w%4t5ID^{@p83)N-Q_8{K+kCGY~a+sr7>`d7geCO+fG0&4`zjk7?{#LBA%!1pq%!=sl zQ3>G-*7^2i#LiJTLD+pxyb9KzujZ*ocnga%}M8&>`((Cxa;i99XzQVWs| zePvCY*gKoM!Xrh7ov};ZRx&dku4eBBe1b`2x<9;-%mjW8QZf4gI}H$BlK?{vbaC=Q zyOlbj5y)+uR@4tDO1=ZfEim!b(jPJgg}wh>G#J1w>Sv~AC^!J69>Y0&DtID-0H*Ea z2v*zU2$#2}#3P)(z3||9wc$E%2!w$+J5`Fxzi)VLK)t#l$KyRkoc}iSZW=ck8UJj(hs_!ut^BzQL~E?(n%n3X&6 zY!sDtz-`+!ERYu5;!0AiOX)mJ)ytLlTMUk8QMUV$MVytS=?%#rm0&3#z=|VRzOoj! z+#I6O2TzEXlFlq>C6^LAJu~s40Ep0~!uUN1z)p{C7K-+`VNPk;?? zoF@@D4j@m2g$xFH*m2kSmZNSt@>!R2>Va1a9iW*!VNjPso=@EuAiMA&E%VY zw$HF5h_gNbGb@5~cIp~q-_cPSldYF{y*-b=>DE|P0U@n=uZ(l5Fxi*n=suO5R|9})fxGch9HMybFqln?Ohp}=5=%}-<@^Iped?xl+4|ZmYdbL;L(9%Y z1)EdiSt%<8*vnTEEdbj6=(Bcx?T%z#944xkE>^y2>kNHPt5v*}xrAVGv6dhyLgb6P zs)b)R0k_|lFr;B^3hvM^E<18xbF7MUGsO#>UtMhk`$|@;Zl^M-YK2fF`Q%-d9fteS z6*)s`$7jny&S`2fbQIdJ`8TSt@$91QK-VeP7JtrcjAp#?%NMt-p_P@Do*-o)z6lx( z7e4oHhN&%pMu`GX_^Pl!d1kFPe_F8IV;~9HP64_lieFhmc3pV86=S2GONCkZHM=-J zYJyBcPuDp+@%_Z%Obs>_p@Lq@ON0nCz3O#Nm~WT$QX!iMnB z+rhqaV2u3aAQeBP;h-!xs>%h0$O4a&jKU@MQ6vT|Thj^svb&9%R?`JQSShQ$Q4x23 zx%!c_W-$N%dpWo5<_uM7U>AO@#+2OG+?vik0dRpS=G*QAunY_Gt*z;w;m?vNQn`pd zrd>a|D0S@u*#K=>42Qakt6yn1(~hpuP?9Jng40!wVLgZ5R70z(*AX9NTl&~-v9r0B zG*T_;tHes%X=jYtMSFJ39h zdf5Y+p`tO$q3Tg{j8WuBHQ2>3F0w$Mq8Pwq8ebKcxYLZt)tx=B#4f&VMt3sw__=`m zdlzXH^~y#P39JHo``9i0fd$yXSw1%Yq^aVltRfulGPCRBJNU_la`sZC`7+i@s%bU-E=@l$|uYR zCiPyVIxc@&(5}M`J=)@HTc<@mU3Z+;c)MnA?|jVq0RJ#UpuysXBGsq32+%?MPO?A8 zH4c@r;x((s6xDRTuK@bQ6;$x=8^~7e-gsn1uNK&50NWJs#eh^CARPfMZjBGZJ5$xG zdvYW(P))j0Y}1d|v14>TcA&C`viQZ)W>rs95(u7akrx1GkOXxX7E1?3>Y~XX9r^(e&@>N zS(hZ8hH)5_20w_=>T2|kW&Wp3RMO8 z&flZ%Jh8^8IRhAwpDfT8@%W6<=Yle9i<$_jjwJx_8!)44#*|wy$lH}knWml!nt+l-7t#}*tBz8T7)As`Xc==FSXGD zm)S>a7w13qMLBfSs-m*}Pi!mBGCV}ZQ05pR*EX%R!o7pd*=7Z%__rd!KNq-;gV=F) zcDA|Z(^X`a1kk_e*xZMDPa-dJ_tSOAaj_EKQ7{yjQUpm+%`~fVaaS!Wv{n zEW{UBraRl0TM!k*#EP(3-XgqTH?(Xj2J4F61i8BP_IMCKIY}u#QXsfl z7-WTw6rFpQ25`~dZn|?6owt;}` zR$GxncP*+z)j(LHKB!s^H0zAx&j-~e*QWfCbL~CWUWSEt8;1yhz<(6eEMwvS6B(bK!pJ$grOUx1eFd2=^VNnNlB%os7x$d|-23dk_S$QqsLV>gKXz(pwx9-id(AQWMFbrXu0i9g9nPXZ(O1u* zRhgO}+Rg})c=i*yZ+S1KZBDH9AEAD-^!?dBt-mOs~51%Ro6aKDL&DG2Sl@JJR zJPgeDaj->1*A3nRRV8V!MnTZ|MaBSn$D0h%3nqU<2|ZHuJ(|bB(+xo|o^oOBf4nX} zbja|Wwj>v*4=WJ?3gM&L4&f;va}ErmfBms~3jE-KW3i+{9Gz!)9n;5|5;Ou`{e}}+ zco2$b^*7D=AMXjHT?)Qq9(aj$rZ{G`K8JS_vyM_*VbijQ)`Z4%_XiA!K+CJvS&^oO zhVPy`ySsyeT0mW|{&4SORrtqMplnQ4Gri%`Y#GR{Fy>^}2xh%f3O>O8#Yu#ul>CQf ztEh!gBkft>P5H~84qagcnQmb%5Q_otq3((mP}Lr?n!c}~?*2CVK^4|OZ9%B0%nuL! zwc@=OSbm2ArKS7T8D2h|zaQ=uwhYXB;`G%On+`!Y`3a9tiC{ovD-ZNZn774_@_DbV zV~)UwJx;2M$}`z`BNB0RPON~)RE>-CyYIPPbS7ACrq=)XEk6(5Db4uYy@g~i^2tIv zh&5v~E~Mt{N(*O0Z^^y$>)*q}>*%Q9L?lIlKh-ax`!ET()J(R=KmW8LNT0t5yo65a zbYY2K*e#2|u}_~1#J=xB1bDKsIJb%h{oOJzlm8q`jOs_3;t2Q%dUQZHol-8nL+Acx zexW-OjHq8`b&&9y(`YMq0gEtrW=mMZ3VLTi802r3HqGv*CO z+q<9?C&<72JV5S*7@%9uh&LrrcDh;_T_dOVF9m@QRTm3%XAg zGx;pR59^B-Lxmq=QX#iO_kmwrVUAk4fcRK!7dec!k1a4r33vH8&o=M`@{t!)p8T+E zS~j7wljKwL^rMzj)3y1WNUC4tkC^c9g|IR)#b0Cbn!>d25#0kB=gQEvSbSfHRba;= zbL{3=q3U1fo{K+c)feq#2nTW*H7ACJo$(6z%7#ISd)9?l_M`LbjVH<=@y;$k5 zB6gQ)C8Lz^skTI1h4M-Sa{pywsL&cj51KZNmPmr|*pPYD0M{vcAhAiu{1Hss>6B@_ zXYMn=^ziZ$Cj8)%XW`+Ho=b>uA#VXjA~Z_xS-@mq9yj`L|8>cS<%A~mo5*lI?2pqZ zA!`PGJaCk4(;1Zsgvki0Z5&I3)B_A^c|(C2$L!~Ys2fg+oK7;n5tMKcD#;iH%u-mK zG)qsoN1dM5aF0e6(S^iV{2>k*=C;O%hOLCmuJup;c^>F^(*hp+yKX1yrmol=cVbg) zD`ie+O}etQw5}C%vM1);%f%@ndkjXoap#x?$1x^I7LzsS+%7~s1RD-ZY{mV%wt1z~ zAb$fjhZUXnCAd9lPTXl-BD2De7C5qiIB|LD{qxwT%}{rh7CVsR_|pb(eZvic8PvoM zw`F?C=p%S(U0I`2NG2*qqHB3@q-FvLrwUvy8Ets2$orxi4fLT8hQ1MO+d!r+T@&1E zTU4Z-?x$&HsS;M&_;b>s13;qE1~i&QsKdO)V9cYXfW068E^l+&+5XZ^(2E>>#bv*1 z+^A=XmuMnPm&yJ{Fak|Cs4=K`6r2i{)`p+@e16ZzRYMslpqV<6618BzwBf+NrLyAg zDdXFG={(j2{)K%<5Da%3TY}*QMFeSZD7>52$`A5+A4FiP~b+PA{ql`MwPo^Rxf#i$AKPm*U7}N?+lh=(+Rq>v;^IJ@D{8 z;jJ&QzDF=CIK((5{GEo6=+5R}WCxr$Zy;v?UcE|KC2!(oZvvv$#2EL^RT$rvwP&N-VvnK=m0wg+S5x2R(ks z(b3TxvJiu@z0=L5C5gu`h974X%lYOR@`2C{f!r9?Kt_Y;?6@30-on%|;oZ^b&HM?U zvKNopW-Mqtn+buV(3_>b{$-MGoi1*YvZ}VPZv6p%v`{q4Iqc2%j5ROhQJ0{9)9s6z zM;94aT7Pd$l7aLIVGI*-M5wu;5L#g4*Ljp$!q2{*Y>@wp2n#z+&fLP67=VI(97WiD zn*mw)%(%;pG^5}*6OqEqLu`eS$oGdY*X60k%%pTEzLD}FJ0|YOjqMP)imKrM5b>O8 zXeX9TXByTf>;cJ~&!$?1$SKqBsG{KN-EU)mu^@H8z6Fa245>@Y{>}OXx96uQx5GX| zBtrza&#E;#W#BMLBYor=2{fR2shmY`625RRcyxY&sz{|nzwU(0GisKt!!B-wed!{- zb?=d^&Vxz4+0&DPHcz2HdF$P$%g^8Ex{TA*)2^poK)o==Cf?QmyfU!Y6Vx2~kYC|S zS0SbMK5VnafI=U(L*qsx2QinOb^4`;evUfgdySh!kf`dO9NNFK2ml-cMdtSLjDkRT zPAFPhK_RYP!Kp)djO_B@p3%sC$BB#4BSO$GpiT*p`!dc*o?OJVP-?+g991M}LxgyMw2M7RJ~+rJY<1y$@1&~_F985tQ5eW_)Lz%CUCZNJe<{$4z(=D64$qVhA` zK4d~>f4*m>L>5nOEGOEDW+ou!&0U(uX0b}$+{ZtwCsR02V`yxakVBGUnnP@u*1NRq zNq)oaf*_!a2Ntxcs(2@DcHW&_ct#OnP)!oRaQlDvHY7-)%!mk5Ze1^OUe#lP1KEIK z>tHSt8kRF#xSjw?IcA^MyUH-8s2k#C_bu5nnv?0GG|l1k)K^1Q=~Tr>4K@N#{kw4Li7E$ zPlcpm+u^~4A;G{koHa*yD3$KteKGV(%jB3YvGvDIZu5zVh>Vz4XM@@i0JN+&7xS(^ zh=|lkWsa7*u*L{+cJ1+_oH`etR(G_`8}(-=g{lOTwBRx zJM``Tz6o1&u|N6f1*{=~BS@`Ix=51n5P0ZdlSM@oT&i4tivSToNWo|JQL(0rQgFQzHX`&> z=HgLyl1X5h_Ns!Gh0b^Lrt4?Dgm6vT&xYU`KtdUQ=~0=5$y85A0(f~+3m=$&qibaa zVh|L;7>v~>R*-DPK@UA7MfTjuLD%2j-rt;DC!_(_fJpL^DQ8WF9%|rJd796P-BP1@ zjZr-`Bc(n!FXh4@7mm05MYUzRT_lpeY3gkHEx4e7&dykMQ&8t526N$GXh% z+;Zrg0#MBba)i8li=U0oB(DZDOJJrL285z|utEmJpYJj7;y2|?Em}erX=!~j%*7%{ zRq39Wj9`~WAez^+a*1DpZFYuPOJEyKJPf6NsqK9VG8U~nh)(J(qz|9O| zL}d+v0|RAAIvx6--~eQH=GKP9u9ZNUkzfLXStJbXIuQ8*o4|$ku{qJKP4v}`J4pOj z<>CUb7+dJBNWaub)_lYYy;>S`s!1^R_v4315|BZ zlRAO}3_Yl!0v)je!)IXhAAn_mlg7PlTdOlNKTo?w;he-VQO$+{DazzjCh%i0AMdNq zjUhPL=T*8hDG)s?fqnW&6a=t2abmSE6Azflf@)shVpLrZuV|9i^lv!&jH4jR*|%`= zAkr9pw)*Yf^e@y0X^Dw8)yg{fmmwioWJHC4zXCWF0Bu2^iC1#DBh!~bDhVbR*Yq-K zC=6}w1YkRT^+SE+pIJNf^G08&P6c+Iim4A%z~ngP*-;9w^5*7d@iG_qSvo}oNY|I_ z8?H|s8cSt91Mv=!UVwltqxNFqhYaq*-(2L`-j8mIrkpl!*#YRV=)#g(7?=6xYqt=# zs`%e)k~B|zjr8>FX=~{XqnIu98K_fWj4*hV-OwUCad#hW7x@#g<_F)AufuItj5pp~ ztd{V{zM-B^k+D=xAJ)WT`c>l}h)#&jIm%kGZWyI?=S&U8(>nKdzC*4&#RDwyV)lL& zxshaPL1l2SeQz8V4Iak=$o|>Wv2n$gB2=B6?{|116UMOcZ(_2*9y@5}F|yU7lIvKm zC&i_V%q{t~l+zB2Xzq9ewg5HplH9|jxm}W zjk<47@q32}wO**-KSD@(b=sll-fLGb3#*Q&;ENCZ4u2D{y?m=!G20RUlMV7DB(!LK z$RDFqZkc#_|0lyoCXGQ%iU(%Sgq0U7s&l%80kk4GK zDlDprkk1(RE(1wI2qDX?f&GuMI?qBn#`IeJ0K*SY!l?C~s6Ut}R8N=kYXUD;p243^ z@G|L3Ku`zLB%t0%R(e?J20CijPtK2i)9*p_AhY7q?+g|rE^T_8x$DZ78Be*4b#GN` z2)XKrd{_{IlqvWNHchU?U=uDQ{nE75eK?_kanhjvJFR5`DX5Uh&hKSY= zblT~!+*Y- z2C_aZ%|v;1RfXlqSW)MXXCD~OEq4|;kTQt-!ag_VWNQ;$t{Omqintk-)!(bY4xBaw z2_r%cff|(s zUQ65iKX0%6HBg6l?;(YxRgZf1Gm_4$rV8%g7oR`n7+^b6*uR-QtUEiq;lR9}AV4>$ z{W&I_aLtGJRyHlm>rj%QJT=FZ+A!&WnEj+?TMDJf)MWw7Y1RS$o5_bU6m@x>q#&eJ z&ihz+U_+8{Rz)$qdNwIECA8-T890!AWV5J#5hwe&XCscoOP+PV5&Uch=Xv z-kw`6S-|SDQFC~pz8iK~m%jfO|WYe`F^9WUbhRu^jlXuX1r1|{{7%hh`m3$kz* zgt^WAa44A0-1$*DWo2xgM*4h!wRn*niI8FYR;Bcky(x$8Qphk(RdLaOJppDPXdFa) z|M&g(JwD1bVowcc_NRHU&0b^2o*W91jtnMd)sn%AN{;Cz(=nFxN~Z9(skS=9t#*=1 zeJ%3R@TQ6yEA{|Un8`A#MEOk@Kf%m$SVPNOrY)~`v%0#ZZ@I`j(KI^02$rlpqZ2bv zh!}Ts=;24Nlmc|!8uj6?p>@VzNwhSXbkJ@CH6S?PA68lj6^s>c+Xv?S*rO-2R8q-u z&Qizu(CcvJy$%CMQLk=c_C%_40~`0XHm!M0yD^3+vq$B&j=1~Of%jMq_GTw^QG zvpi3nm|9V1h^M@$HKPlPrW=>b+jCYYSXl+BGBEN!%e&L|WI-q14<^}{F&Srt6)f)| zv~IDy7P&XoU-|nN?U$U;wJB9>J}-tp=pB%#u+mQ?9{Hv7V1Hj6EsoTn6l%~N2AWQf zlb-=2Yez?^y&r9bsi~=7f7pU@9P~dn4h{~?=K;DLgbkNdLax(L#GokuH(kzZ3GL1S z^T7lJ1fV`HgE8b(bdEFv3~1%x_l^q;FMb=jiVy$57Ot|jLgO(`((?vF_;^MYHRJXc zOY_@@9>nlxA-O@J{$VK>wH89jGQw!b)xLwn9gf+#9|t^*p_0XXOs-nBdvx+`YwrrS z7wh^sg(%U{gy%Y9FDX; z2yw=?DM;#opByR<4R!vch+YqC!xlUB#+9kDWJ>AuXI6>&0>ecd*zX9CT9GT{tTpgA zo=pmqJ7Y_h+k|s2;rU+PVic}@F?`2pSMo+D=uP>>m~Xc9+_#_PoCXU9I%>d;UQJ#g zgf0BU=H@+?spu2L|E{fgvs$G+xPQQU0y#|C)OPN1h``_N#-{xIUG@!=9JY@%KXTXx z9oSp)Bh*Nd8_S|y9M10YEAB9qo;yC&bRfNiaCw_b?4=iNGkmQn-T1mwk3O%Qh-Bzn zL+Vu&{!gmuBVoc#I>%ih#bpKuXM);$lkf6StM<+Wx9l_Mm_oVVa^1es3JcMEt>-eU z0I81vD{YyVe@eLMH2$j88t!eWYH6{nAdn_iAgeIc~_|Jzuw<7Ps=E;AX9Bn@}8Yw$mze;4Jefg=xmgonu_h!qE`Yu54Z6P<%VohOtH~nZO=Zu>KWd(`2FM+K} z%)o};=S#$2E_)6x(ztr3`79rxw*yH1vnVQu)b-W#9P5+?E5aji{!|Ug6k;fZg!548#Gob zTs;1piHAtDFV9KMEC*Y9cGh{}DwL7>KBEW)rF$5RNnhvY<{r}DI2<#!p0aUP48D7MZ%kNo%Pmf>StG#`@6p8bm%b;~ zyXl0>7|j}Y)+tjQ%R%Kl5AzF+%-XBqTiIRQ6(DE;={|^71#&H)_NXOL;_Mg_BTU`H zdbL5tnKYeBi0F6@!e?NV)h4UV`n-V8t*?yvejnd1;^gk#P|6BP{EMC2TB72Fwqs3(8Q^P8Fs zBECM&f8Bf&Ldeh{heH)A(;imE{-^?=5-s?3(wc5LWfC)jr;O}AH=&znW0Mz{w%-{u z<4eUifF<~g3$yJ5tdAeHUIc#0H*D)G6WQJSfy0TRd`E+&a*I??23O_F^2G>QW7FHZ zS>#K?ndmNiQS%5<8b)EkuX`1lK3W(_xs%Xjp(VSHI;xL1TTReu4t|Hohzz6>TOfAb z{bwy(_!0c~*>xVu_tdb#<`Ctp(sI4!J4}r(asPWUm|so&xEeaLySnlvvALM?y__ON zR{jcwm_IR#K>KNe3U1n(x7YFgPlwI?Oqjj5x4!$p>RsIMAD;^s#LiUb>dsiNNzYa( zqDW^aCJ8Dg%Eufn zHn)Lh`R}!PU-7oH3E#C(JqcGwKd%dX-L8B$IIosDEvYrFrqx$|T(J7et$0?DcN>9D z^3moP>(?qJM`7{Uj#tmz%h+%co-EmY<4D1yt1jQCn%6(CH(D9Hp;^+joglT0Cj5l! zPn$aSO!}$sX;4NtF9?OERT;bn@5o$R8|v>#)?}2tdKuDgV)dLZ6Zv4(b_Ah!$%H@P z2e+Wf#4Ogz4XzoC-ELgxdmDAeZCfF>`aH|Hx6o}X7`oelOQ}yPEdKlGS;%b&A>p3y z<U<^q$MXp94rGTO0Bs~Q%?zwzoEgp7TUy6^V!Z?abkRKWQL#>GD z3rWgO^kos*CG4i?Eia(9rELm84dv1E;wuhnPiCm(4L=e&`(J-Lm7qm_ zu04F1e5Zq-QEv~uuL(u<8_d|kjoL)%&=}$6Te%nc?EN>ZL$?LeyTK3%z?JU(0A2I< z%s4V?c?QVaU%+HTai~n{fGjgPi0T>!igD7y{3IA-w@C=G~dq6 z%BB%BJarB~p=^B{t@DHvg%e`qpsqmBc;1wiC(*Ik<7oC>Wosr@ATzIAZSZncCnQX2 ztb-Yal)I)$CyfZ|49>fXIp%uM9NX<2#v5JX!cipN+9W0O$K9gD9t{T7B*8+3*FPCl zoL;w>a8ZKRD{!@$EuyQ^DFbRGU#q^E|JnrhBS>y==2)au*$9ToWQzInw*m?@C|EFy z3-sXtE%g!=bF%?`33FZt%R=CY8Z`fk%a7}Sa^ox>km948R7qS0&(VIPe^EB7cK~Jc zq*>~xx(2mbLX^9*c7kVz)nD)VIx2Bc+7FmMcjx$`wAk858F8}n@k6VW21LNntu{se{R z9Ov=*e5;7iW62?sH~RI*d%6n7GR3+QJmnW-ydmie=RP`^Hs5aW9tl6Q=%Un>)>Zxq zR!Tgc*L`Sp($#xKuVRWfd0?}}`oCNNrL?C9-_{*L?<)_)t)6Gq08)RPEMN!7nLxh| zNFMVwMW%H_pAVz}B65fOvvy7Z1Iz)zCm=(=sW6*pVi8IIxuxahy&pGpb4obhmB`3-7VN+5RGUYV)Uu7_ za@A<-q%WdQ5nn5!y31mdmWwg8*?-^_BNV}I$L8Dj{d}o+V4>dQocK+2;|Wb;Q=g>$ z4F%+|I>p^Nq461G@MbM4)wN{lOJbeM@cpq)8d@i-R!S+DbSei}8equ0?OO6j+fakW z(plb6D!{jml;)IF2W0|~O5Hy8xc1OaxS*018YGSo_oR$Qf`W)Z1#~3PmiF`W`adxT z(fXQa9XK_{yi^nGY_qq21#YPOt6&+7{BcMZ3oszXUUS^sj(k>{pEEgn$2pC)+$hw^ zMY=W%6B_*T*&-Rih3>bs)HRid8T;_iHn>uOzr3PJ*p}RbDM4Z!CECvf)_R1*#J?o{ zu`>?>^izeR^@gjTLU@t42X0=AC(|FCio5iW zT*`dbJ>bD$stycmZ`|BI)`5Xmy0m*nvo!`rHb5l-cF2|vP%mr#+-d8&A$?vG*zR|4 z$X2c#rkR@Yk!0~Zj6d0WdpTu6`^?QB#6=TDdM2oCTY7~|AYoVc`= zxK`%p%yqPzji~}7gXO-p_4x7LB=a-2gE>ZWBc%A<&kMDDL#YF6`QwH~x}%1;@GFiB zEV)xHGad!hG5qZ$E)LbmERGnp7-;IDd#0?7fi7VN70&VC^OZyZ?KkRl)xy!eQ!ua_ zND4Iai`e@wec)wZ+XjACZab+O>3ox`eW)+*H(N2Ttu|925Nic)uvjA*s(^lCvgx_D_vsTE5wc`%Zl-Zn{UXwUSAkyKQ>wQ!8nCk*| z%9W=k=}Z!0I~MC33q*soo+>kzGX`i zqIe=Jb=PMJ~~2?6^eqAK${a4t8f6>-J=?vld-D675U8v@T4SPqMuuam({Tx$RXrj@f$v17`A7|*LtY10r5aB9{jUjml zx@vy#jZqJEHPR1mPc&lzGOqdb_qhJx`uVv|i!y8Fm-kkuAZG+V3+aV<~J z>r_U{eg4f`0U3vkQqJJOz&l4Fknq%o%Yc}OX2t051CYE(H))U&wwRrL6xwM1d0uQOh^4(GUq!&{q z9dFxv52owX<_tGQ`+7OH!s|q)tVK?f>c!eD>_$Je?Tpzdi47uL{|pa?-r>b>Ux=dzwd-b(2i<(@O#?_?TYhu&Ej{LWA@9Hn$ly~uod(wKq7Hoi0*=ssAw`o?un9fbBpW z0m@|{qK?*F5Q+peaX{EpPbqlMtiTlynUVFhBwvyvDZ<TYgUWC}rx|6NP{$a_U(0 zvR1*=*g^gUy10XnK(`s;znz{su(tR^UB8R@aSQBXlo@E;kVo{Oxk!FM@&ez01dvP& zZ=vI3#p@Rd_y5V5DDMK0-MJ8Sw=``2Pu-g}@XfS3(ASQi`s?9ms1B$M0RUNqtv6^i zQvbupbMyz9Om;@U9A;(F_EB9^EjtAJ#wlwN=ME1;=pJt8G?I1-Qf_RJo6JjpJdvh} zqSE+Uo*~wz?XA4^invko4NO3@P@UE}Ny&Io|EW4f6rbY20^N2ULip_t@_tA)$ZbT?F*DCO>8^3ixc2#B^IWRz_h&*&pQ(b0ErK!^m5gL) zrX*il%gu4u+pWQvZ`r4xgjUE{quia}r5wJq@%k8x$Rf9o1o6(#qoL+v=Q(%J6zFOp zXr6FU@qi~X%3C{W5}<|IX{6{x)=qMkr7v&gCJ^WtFXK@`cr?Z^*Jx65mVNj7&1WRl zos{LI9M7VJGvJ-{`W@AjcU+S_a{#}PZ@4Y>f&#R3&zSP&6IVU4$FAYl{;BhR;a5Pv9jh;?V2tW?6Ra+B6R z<736QA9SS?4933cgewiIF!B#R-N+#x_gr4tpWAvEw)LRJ>CGN;IUu$n7Occ?pB+0v zmp!sdp{ym=C*F-A0J_(AN_LwqjLE>gEslFS55_|n^x$p;u0U&5(||{2Y@$yW1>{Ph z9z;>VGtJ)|yfHu>^Zatpx6M@su%Rj@9zbd~V{Oxq%2y6&W_#$j6EW(urfY|&T~ppV z;HO4~44D(UpyUxzdfP{70hZp66iN;7_;TvX`$%REAC}7GgW77yuiDNuNyvgd^^I5g z@%s~R!Ks&VGBb^Xv?D}n`cO=rx+SEIZ$B^D@=(S}@RR-EGX`l!o4ek8^S(?g`~Dv3 z4=2__i#$(j(7CWN<|mh`%P!8NKToa$u2aRX+A?Gv>9VEA{`2CZ=fF!QEYX=Dnw=m_ zM?z$@0sih^7a?TG_mFdA&*$7Og-(_=S)~w=XMn_~uT8BEc*g!!cw z#+N!YW9uG**gttX=nPenUHq=jN49f@OFkcEe?92kB1%7a#i#juVZ4aTQib%AwS{~d zh!OV8w|utPFnD4a_2tUllolvDe{12i$V>OWTStDs(xpyb2!B(~qJ$E@&bQ2iNoptb z2A02;yVlT;Q?Dv<&5z@5&2bxcAKY`6Y1Evm!R5;Jd!NJk>+Y)o`m59HjEw8!p@&`Q zQGcN4dClL`mmW}Ts>U{$GX+8cx+}M*Z7EXhH+XsJVrIW5G9WBU@@yJfcC}`E%(KO)XT}8}!u2snu3SJhr?g zfQUjgqALZ_LU(Wv36i2kCE@wRBcIERg-f~X$m>+!qrJ(=HiaX>U_wjsbV(W{7Dxo9 zyx*eZMFeXjjMlL2L1STS2SUk6H&v`zgCeSsp+YQqzCOZ^~Z949EZ`a|9zQBv+kj zSPtH-*C3Y4z5u4nAl>ZtLFv>s=oOA2QfegG!I_VBZ2(Ke`yY`y@D%kI&(E8F&6rjr z$Rqeu2RhpL^a15S1GB8TS?D;aStAtW%k*rH#3lqaf#u!9OW98Zm61`wDk}%>LR432 zmcG4S8Lqv?T2k!UZ-8r9mUgv#waNz^Nq#VE|eDaz@VKv=lj<#O4fLq>* z95JO~^(NJ}ls5M4x25b1;*w^&f2}QUTscnE4z-0lc{RARic0@Qk_ugygQz(Yvp(DB zc57XO9l3w(D6(S_e06|LHV#hx61rIN!e zY#AV}=8iNJ`++ZZ8fxh4>VjK`#f-huQZu>r+)2sv)$CcyNeRlq4Lg|+t`NF(%Pwip zyrDS1AL}}UaGhK4;fssxs-^$PIJujzh7_ZS>L8b54Xri4^=MmH@?f~qG?usO>%)|Z zgB4Al85rj49$7qNE5t(v&^=PLdUylUZZcvOy_ox_mKf9oTA=C!0XqW}4xs|*0rVHW zveL3@0G9z6or(6(+VoFkUwO7QQf|yi1!TZrIKd-5Qd69e1 zxVQFx7&wa&e;6ZYbE`$1P8;4SI$oopMh@X67pX*Q(N-2*5CQYOc?B z4K;8gNc{r1#}ecEYNS9@2T&MkQC3I*NqtA^Hw*nmWIXdNl$Xy%=LBu31I1TIcSBUOOIjZkCp+Cm35`s` zpq|8t->9QmC;GsA)7Tf?IMPXvi5=c&`_9^k`q#(x=!NiNFr=7JCv1)IJwqMdsk5W~!sqE(}86Nno<+5x$ng$okftGv@cl zt~_n4O>F^~LK(Y{Pg0MyRBr3J;7nqc$gJ6Ob=A#$5oF5Kxnt>OTVmJpr=03<-HDsu zV;T>aYrkoJ<}h_vC6AYuReK5q!twB5>1IXZ2 zH{QVJbbgt4B{0Sd(m@meMWm0Q%&43hmw)){Nfw}3{AtIx0npNdO&=v`PNNBswg5Rk z<*}zPXh$Lvcru6HRXW?9_G`1x;AP=tqZN9(x&lvq{+Bj6tPckML&8tE!FH(CQ3J!< zuYZDGtN4qV*n&-ka_9pfq{pAC+!G7%DuB-dTQxDlNF_Db3gkI|=b$#bhn4fMjzMM6 zNDskoDi2JNNoVv6(d|h7{ZVn1!$bWnZQNRginE9o>x;MTOF&-3BvM;nXfvfTVB>bO zHcTkDMk#DP0Fa|^(%MVzQQIHUWg?S}ERO2;ILMX6tUuFJ53v+=ndk1Z}ve{bcxw`54GkR2K_mL;yBnG=;aQFv@P9Q^edkOZaP5Q zxC%-Mm@Qx!V4h$3Ip7L96U5Td(QRB^wL&S0S|Z1e&ULL3u7gIgHtJwJTp)_TTCrr} zqmdnGC{9wMMT7t|U#s5578)On>lDkOhGkp_i?#KVVIz`HXVgq7SCk$%7#VrVRxHCs z@{P7RYtM~Nafse7;Dh-4QSwY{?+LXKg*w%f!%=cIGb`0m^4R7ttL!ioVW^VG>s8u| z)LCBHx|6Wn{Tk1H@&{&i0}Ba-GxC$LJS$3QY;lz5_=)$3#U049hirkB9NrUr4I)V` z&~r1K^0wT5M=TKbYCAm`US8){BnlB<#N<48qx_-5^>~7`s$+s`wBRp@1md1-$;8*b z?>v9$n!59o&j|FE20sUx7I(=Vj2^1*X7{lXql_|3fW6&#CED zUHzY^844Kx+s7$@p9)U45gCB*0H=>(;OEAMXVa*c!Pk4>rUY=J3%Ftd_inE{=<6%Q zX(kzQg&Y zPyQ}AEdh02T8&gN)$SiC9;MY$P=A0h(FW2Aa>hS_(h-o9jLw@ac5@~V#qeJ&@#%Zu z_Hi2H&sYsMV*$l}VhM7nyuve5rwNB)P?>t-y9g3tCA*HAt@+l-3mxLiDUX_w=Z{qo z`Zeeh7S}u6*t?3bsm!@Uop0(MO;(W9su#>`YF#Rx&F&YLvt4@6CtyZidhpa_)b4)l zaH-o6Wx#&-X|CQAg@^oXQC*rXsddER!)ql5&psX4fsZCmg6Tj{h>J`UWCRI7w^2g8 z7WhOj+)<|f*%H>Eqoh$xE3soeN|^UOoUYGDjlIw1=XQ8 zii^yzmn=CDyOf%MDSRhm6@vxAq|iG!;lUm0FXUpx8Y90tD%2*aoix>*Ncp^f&UxQW ztHX{Sy(4+u_f{M@iQAi=Q6O~S-y6MLXh^(VKEJF|%83u-RVJw82sffv{!8dZ|N1}I zAhJ*UDB(HJ-on+q?noFDAQ2C(UjXZY-br~34l_^Yj16K5QUf7E+2FHR)DBLxM8%@` z%Lj*0pYMi;ZrJ6C%W$P~YBsrcqD|4oZo#C|A5v-k!KettQ_7Pm%{f}4y}8%(@=>S* z8}7rd$RW^kbfiTXf8y(FlxaAZA1r5@l=z}d$Rj#?OUVI`OnM5z+E_xZuwzZSQ!=F` zbORca260Y|DJ<0Vj!M0>c39!EVYQBE6AkjT+vpEodo;SsmL0i**8(fJ2R={{K|{Py zm$uPJancrf`crgT4c=}IY6|Qa4rdFr$VNN$hGFEOQP) ztfvh#bmrmY9Vqmo)d69fmSpM`o2vTShMBr^yK<}k6Blj;!jh0x$w(giIJzAXKx7Gl zy!=FWv)!aR|5GsiT=hg0Mde0W^@j6hjkoyMnKUI(oRa9r^6Tpa(R5{nNz<(zl-9@#hN!qbtl8c z_>9kOa-ZjJEc|EW?7!Ozd_A&vAP35_^r6D;8PBy7KVQzx)c`*S1o7ffA~yjL6vf1ovyF2O|^FqYm=L}d$m&J0kTW`+JJjE zDs&u)dh)jXoQhs*-5_zpClG>^(d>E zj?T#IA_eLbZRV^PK-6j|(=$F#TKS5jKr=}s-$U60ml|zoj!}E}Fn;hxb^7_|DhjJE z&pET{+A{CdC{(TZAIm0ub*?tFLcU-12458+pmThOEgzA5C1tJGVpj>z_1uO6GB)dR zJ&sLGp%<=OejDrMn5soMz3s^7D1{+!)M1oRYx%)_z4s|A4ce@60_0D* zT)zpV4PaxqA}f8Y9XkXO0%HkfTBnn1qC}CXd=XQj=VC^uF&8eabT#WLayC;$)SCtO z^b6e)6b-DQq3QIq@$Ytutn6v;U8f1IrEM2kyqK2~+Q)ndDRg|$CO3mWDGB&y7`9oq z%gp3pQVksOTYt%n^=+3NApHf0Iyj_y6yAK~MthI1t@Unb0Sly|bu7L(KrDsM{s@fn zqt<=}J%TGG67wO6#owep-l58;PQ_1cq;vv@xjgp92hkFOEa*9sMGh! zvTj$K`y>O(6e5$GJ!4#wBZmpS{3l0j;zUIerwun&*vWxMB8Xe%(nBC!`;Su)n${JK z#M&dc9r$z})Sl?Ro}2JOa{{0Y7EV~cB+3un$b-ve^;p*vMu-cI2-|TgyTyevN_EJUF0(#-|5e6CS+M&VXB=yc6F0+KOI?!l0xUKND$B{%lSO2G#M~sI%kqe z;nsk7@#Hc|0I{Y>#EJ;9pf@ysERuAj;1Bp3Z+AiYWr^}mcbbK-e?bY|W()Drtjde|}Pq+aUlWPwRh>;Sc) zeWLao#)!T_NU19lcZ$+M~hUxez& z!MT&We{`&W*q`<#pVA5`Go#=enIz4U>sKSCEALQRSkuMVI>=YIyX~?osXjd7EZu9& zR^i*t@UEh|1GjzR@(@_IPj6V~rC)Mv3r~wy&!J?oau5G@GaIyo zeX%l5pDCU0N=Po2W=aChAD`Vg z-Y}~Sg3%R*dx15ah6na60#i{gq#5J2%TxsGk9K#>4LvGd(sY9yX$8g1dqpqHx8ZTU z>o<(_X+Ywz_Pw&4sqa=!6t+Nay3!>1>6-#`-R_;%8~YEJSg6d@)I= zg?k3^KJ4}1-h8i%Kl({kA}3t~@*1M#U}lR;rsLmm<%4H5nd=(V#rW1aF9`48jyCY3 zDjnC|un)%>30cwkSp&)FB{sEd#NL^X`3v@$%80y(m4>BQzusx$Zs;r7i_h4Sm>ZM^ z+v~rf`#OpSnc;X|Fs0CSxo6d(9WT9>tvGO^1It?R*S{@mOtYi3X_e-nby@tQiiU6N zf}Fuv67eH`>>#RH0Re=7}A@#Es73%#|s<4iAey;D!hl3J4hgg#u;MuPbWWk5l} zYxPsUmsV0A`l+y1h4C#u720V?4_m*~!tDWr`2V4LEe7CpYGbzF(Esup|M-FD{s%>e zPr-{@IIml4*Ch^h?zfl*EjQe$F^zTeDLwZ7GtR!8!E8#;l^CfS$0+;8d+v+I69pQJ zbq^I>CX{q}E(BJ#cvp)x=I5g2syt-AH`SUv6j8$;hx-0; zO1$bQpOz14gS0cItLLy(@k~v`E17Ma6oB8_ZiJTkcjNFC94J;;8RcsaXS^$*px7b| zdOv$aHi0}b7F4N|8swm=^k_p-F?=s5apD$5hfIODvg2DO^W49?z^#Lm>H36m?lX!< zAOycQlD5`LuE|aSf2HOB=0;ufpTN7FCNDG*fP_ zF`2uuQ*7efzr_$I@IinzW!ga0s8n7peF|AraNy1r200o4F?nAY$|^Gb(V|} z(UdG!%+pqshyO@%EEEy#Ns+0IoYip+(O#U?lhP=E_r@;5T~%9Ny~025Zed5C(FXJE zM(=QPo#VT*S;q3*`x4CwF)WPH%GAY#OoYKNa@Rgxp~t)+sz-H8a~K9Xyf$o@oaBI~ z{nZNa`tTw#-EOJ|`SJg{YxR`F389nP+Fk3eB316ZI)=m0!7uvyS_9Fuobq}~Ik+~~ zqd=}Uxvm>V(%))1B@TUjM7x16vriE)GmvzBS(H<1eh5wg!003j?_p z=zkyVKVNC_yK|Q8H|G4_q&fmF-NFTC>-Xj2dw8(oNhLO?5hA3BBOLE(fH?H z1<`Fr>2`$u#kdn`hAGffj)I?8+8}%DaAw9tSsVLf)?CvWT2)$Z$C=PrUox3Y#WKH* zT9~fiq_IYET$t)ku@k)JrCEPm8P#D%V~E6FmwJ5tY#IqLg%?0lu?230Wu+1z0?s5cY?GX4&Ac0=MEV> zaGo>M)|NL4W*-O+fCsUv-nj==lh>nHs7roS*R_z+!+5LVd6la~eLGk&Kf8Tl_3t$* z>`%vPHW~ezEFy-N`de-u+#ScMH=0Tq%E7(iJJ|42HuLPa^3-H3Vfg-Plj`QlEJZEAObdb<@I{OxOL118t;Oam&ji-YcVM{Q*Y7if_-lEPA1{Wedj2Hy0H>% z=4so0TFvsK=-ik*?duK7xMpp$LQ=JTSYnL6BxB?|3XP)^MOp;hbax|NZer6Q-O`P;q!KE*VbcxLjdX)3ozfiwf`D|3;J5Ic^SkHX@BPb1 zeDIC6=9+WNF~+3)#S1x?2;OBoD?;5{^@g`=g5H7`Q17CDV9iN`5lRERaQfs{r~2QQ z(3gPfA91hhfnmeVE)BlpV^IukJk0wdeG`tV(_3$G)9hjjr5$R-M^ZKuJ;ns3)BqJ1%fgD^hti)f^HWxLI&r4WUJ9( z1g4QJ*>lgxkphNuLXHWz*&8UH_V7>72iPF(L3bco&GxB(*u^FT7FwILI0bOS!Ho3L zhi%tq^FgmOs~$oasu#!jgS+g$GJ6;9OgJ`OB;!azs#k5=b_!7~^nND#C)5^Dog|6% zT{N`uo@+a2=GF$zTvz_qd0|J%h4i%VBY94nd_6J=)IF1eF+E=!Z(7TvHDn*sn!(7P zcru9eILN^?0uBhI;!=qFX5LQo4SC&{$V7F>->u)gC8O1Q3y+f;UY8JxNa+Mn6leA5h!wTV+IwKUhhtA;WPxHv9s$Zi=s=NIcxSKvI%W z?9{2*D}>o#DT;5G)7S)f$R@(04vB1<5%vfg>TY-1AF@y14e#!^I~F{7R-3b5Gq{)S6UN_H!TDxKP1v2(5DC#0 zSqv2nJNmbjbD?M~_fj@rk!=R8zp@_AtZBoU&tDUBW+|9+RvNqJi_Agz)7A#lqJ$Ol z$6T{*x=PPP$;pjD>v0_;(+NJ6O2xRiEuI;kx9#|TBG>*FH@7-8qbF5&EO}K@S4)ks zua2g<{CIKOwtv&~$xlZ3B~iF)4(7ywR(p~#MDOK;k#Y$|VVnUed(6N|u82S_#?7FL z%W=Xyod8%=GskCRWUE7J|{A+p7t>NJRx_BX`KO}VQnIiNkC`Ej`!)M>@l#$aS%D!f%nJ=&_HD}Hg ziWwgl3u4q7Jc)}!+Lh65vA;d2X&;%Bd)SPau%pByF_bOmL$sZ(?Fo$`%B#gtI9_t% z*-W##ESDovr1N)YNM)g8u3dpYc67%hCrmrlT*I)*jU6fXY|I2=5MPAet^|V&=PN`> zC^T)43Zmxs@e6q8C6LIxrox(7?+#jj-;E3KI%)#<1~BzCL?7n=Ov}%WVXv;!XFraQ3}h zcfA8r5y~+#jn3>-ZzaGV`^OvM=W?P29OxtCERqke0dNltc!6Gc)Y`2^^nbl;P=u_p zR^I*?7*$oVsx0NRDu7-tP+3DwUX6y%R!K z&pJGGrqkYuXAxOo*8S1qEYy_@jM%s`H5BN_bN|injpwevv444OfymrV;@O1*0C!XC zAv;v5K87O^7q3WW2ySEd!B$%~W}>4rU2n=xLt&Hfck)-7@>Fy{_iBLFy=V?LdR_ls zxZi_@C>+c$Ez@Gz+yyMDKB-XzP}TvJKPb)iK*BYFscXM-K+?YPz*tfRnY#**aHp4%3RudKb(1wi4&S%i4ZS`PgTvD}N zMt!qa?5=yng9alYJG&Yy(d`7dO&!Jc*jXv&FdLH*8o9OzTa`7(MsSP3tqSJN+1M0@ zCOaNdhZYDd4_)wqmJAdl@R*P~jNKRWQ)pfgFg>{}GiZbmuP-U`esGDRkIx#hD%k!Izd?)te45S{^fRYy!rJ> z^walmtRQi+L#o0~R++g$MF(IMz-j`WV_@RvH)zQdBK?0BQkXzEaHJUgWke_qBs!

MSBW+Q0KWOsrq_14Sw`peiM@tntsUqL4Au{Xq`$yeri)hU4c6Nvd z9jZp%6PyqDoKCi(c*%b^zlWSHnN81JtNmtyC348UGue!G)Ez{}G~($F9bWD8XkOCc z>DW&p<)~Sb4Oie%aKGkQF2D@fBv~5nP6fu^YFZvit9glrQQvNY4il3_4^YhNCd5yJ zS<3;cH8e`ky}iAQJEtsk(E)t%vX|~&1RG)Za7SX{1|QK^7$aY}uXK^KoZS)e{8(8> zuAYj`a^Z^zgNZbcMcQ2*;pv;GNXfbUP+VKAT9OiLBFA(Z549z`A?o_w?LuAi-Asba zyWoxwE3-{8#Qi^X_w63g9Z)u*yP;qL=)gpp_UKKPGk&<@Ft|4f;B?M-(Lz6R+;0bu z`G_(OAQ!d&OW8V*{8w`Z#<7uX<}LTUg`5Ge68_Q&{1VXF{9fDK+#E~4ad=pHG*=mL zcI5}AQAp$hAh5p*>&yg#CWQz?+0C}8mm@QX2@iWV`(o0KHEU*e-F2ZY`^Z=Nn@#s3 zl67j&g7}^DMOY2Z>Zbmx&{#w{jf*F0=q6%E*7-@FK*O_KGPRzDhxTBb4}UPJe)KV) zuRcWRIqzZ{n+Nt?wO9K;Q?0Xa3oC}umg7f;3?Hx)V^k8OOV(uP8`n6RhE>FG7u`$q zCrjrwyEmPQf_|+=`+s}}{)xwYofAXlZeT8vR?ZOk%Uio;e63jUh(;{x!ehLmO@_J& zGFGEZ#R)dq$0DBUof1AXV+nQhz*1w)-dj|q z6Tz$^Ob-+}zPx<$zQHj@=>oZ7t6N#qL+)y`m>!Gnrl$`DHf||WF(28G(S$G4a}wLI zb_J&d=IZGR!8&yXLlD$@B2$A1NK5&`?;>61M%|(1l|CPO+VL*K-`Lr)QNgBfL6ya< z-Q_J1$O}|5XX2{=D{#YrQQI1(F>hj*sT$mp2UN6xUJFhn(4qun@(DxGZL2>8N_cz4 zSir_rR$lt-ekIK^0)!J-%Z5~ji@cEuOG)=PN zPb)N3T_xn22vP0x2@j3-7&n z`V22a%4h7h@A8A1YQcwh2)K*^4w{8-M#~U5ZF+ioV*5|6RsZtpawIp2L9ehUiUJ@= z>V(o5`(C;MF->71gTvGlY`1C3|6Ff~{`#Y}ssZ#V1U#SsA~Nu+<9w4KJz*<(fl^Rq z?YDK-7}H|+6Rld5Hz7tD_-AB2giX)xgamvU;4n%z2@(X&?&9QQ{C*-1|iu%Il-YHO=iKX9;2Ppu`Mar!AB>RHqe*Uw_nilqOJM< zVe=gA*^KEti0ng_)u=C+2CDp64Gmd|9^|NkY4iZz)$DEzFVP27WHYvb7+~JB1#Gt# z!i{UgZw*<}B{pF*lGZ52!EHaV5U3p-m|#J6$YT8}-p`5DkWh>0UkffUS=$R)Z&b_Y zlDDI=kqx(*l8DKmaqpZ?jt&#%_wD{Ri~BRSa2T1_7Dc?#!V?+wsG+8(oAR+U^v}{- z5nX89ctpAI)Z-udCL7`W6ZN-WK#C5AlnuJ{HDdY_o6iL7U)PqwoIpTZ2f`T~SW=g% zq)o~czHEI->`4OPdCSLiHYl|(7l7_Im|qRL<{e^0(vrZC)7YsG&KkCMA<-g8hrO5P zEe$iT@xAQ5MupU1V*20M=wv-uJA-l9qP>t(w>c7|Syg&dC2)qoNqwXZ}YIP%8DxY@Hw9+LYJ{Q~e+Y z81I)as9%vZN0{kyc`Oi6{;AU|EA7_=E>pm~pdyo*2((}NC95J)-QKdP ztpLldw0ol5N>bAc2K~xKxM?cXp3gB4y~>pzN4Y0VEXu)J>^g((au>1ZXX1BgD*2-A zLuh_0nmwKpj}fq~$=LyTKT%OL;&YiR3|7Mz5#4a2q>C(fOfdlVo)s^uL8Fm!{?G_ffd<6q@zhHM&np5Xy&lv{# z^*?b1eEd&5AN-b6VPv6Zn;RP&S!@oKKN5}o)f`5GtHI|DG!M%VmI0nQ#8?sgyHI#f zop@d$FinA?X6K4^Jb3v5(<~)Be&l%O@M21>zK>C2k_)5GFJ2~-DNJ$oyJ+86X$qSG znZRGNus~9|v0t+IRB*j&Msq5-dUL4mo1ePFI%?@T;`KTK>8R(Gc(Xk{07#I3C?l!x ziqy5BJ$ESv#6OF$T=&pisTdZjaE1@Et(OKr@AMgrla83gN<-uv)AO)MleaE@_y4Oeaprp4yh z*1z<%W~mcgWq&wVPV&r{zJ3&Y*gf~*`IlKxVTY*CNyWe}zI_x*3dW|=reZP~+N9;} z!VQH?S#sriA^a>D-aK^%KT;SOI3h z$>)sz$Ze0j^-axtl^sj_0YvW6I`9kr`*QNqe;~)amsAr~#VYMEDV?$Ts1gh>YQ>~; zA=(9MLLl)~0Fg2O)Z2meZhU@G!|+#-T>%R31QQD7-IWVljt>IQ3Ga!@s7_w4A6Gw? zf@Ksm2qS5V5PmMD%{h8cLgm`UVl3Urke~{5e*#Ze*P6x~U*Z|huoFo;aiI<^jJ5wV z8DBM+PKz=uhMxRD7GI5_*cEmZ(v**!5Ugq}+%8lwcOjen7BT9kV?*HLORjdToJXH2 z*QUX_2{OXj6(34_P@G&{UG?u&Jd_0PcrcDYFsD{4G$cGb1PFaV&s&vH8qhvx9Rd?7 zrLhc4eq>>e!U1e`|M$W%on=wap-l$Mm|3o%=iqPaX${jZ25rf1GY8r;XbdJirj+F@ zsrep!bw+5nP{J`2kc@^%Wqan_${xeqa?9WPh?hpMk71C77OoM^I?OwNCJwTLrE{e? zzITD8HyxPSM1`-86UH>m2r)%IAm;;?Bv-j)vIJ5s53dAKPd~}Dc|<78X#-8|Or6|; z&42(Z)!!*n6~JMOSF|w5txhNRZNkcJ_4r@c%7f>=KyZO!sz?9|GN5aUmuq1RWA;|$ z1P+i{Z{0>Ksp(!8C~O|M@1gk{&|%ZNKaF{~#dY-P?WP?$;st4rn>~srmM1niI?Dmb zmF)Vy_xD8k*UJuSXN5^FM1G~{+YvIcT`$f^$<=rGpG7TZyF!FguYz3fHP+ENj4Vaz z+mrphodX3-?6oG&NmkpKzwR{}3osx~1xC-M5hUPNAl8s?5ezR!yW}x@G`;q=LwfCM zWMW4enn_J}BM#l$Y-#X9cW4BsC1N5Xe}v$^coiG!hbKERdl#n?vO%oIU@uRo#$Y?r zYKe4P$PW?nxHJ~dMi4w9q}diYgn>UQS!t9`(kQ9BPI~5^Mm2@Np2V^)S=+sowDw+* zZT<4VATmJilQ(8dHwz@oZ$ORRq?gr68v z_)-|+o_*cemg_2V_x&)Q0UD#zYRnmQVnu`7Z!@&wTMFO15H~x@$!|yMZWf`zx$I5v zX+N&M{q8>07<=-E8?%)wdchsG|5-Gu^m9~|LT}>EzdGE|0%x_tF8Adlk%|_}FtC+D zCm(3neZ`)(Ed#SzVEQMMgRFh{e@_qVv`z8&llR8Op9k#f{v0@oMsA4sN{@qD8g#k3 zdj+Yp0Z&ncoPrDofQ&+z3%ZGY(t`a`;yupVBIJJrg~ zR_*x$0(Z_eD$Y+LZz(1*Yzc)Q*>W>_cLt{`4+O?p8C-FDH(hi#!=Xu%!Q<5#wL-5j0<84 z_AC4HVNK|6(RkNf)~XnMQOqDV;qaDa)@JF`CO|f z?6)K8olXea!wv9?TX2s&TZsSzAby%ZH4_Oy4OU%P^y`?ZVU&jdR{z$1Dv zYR27MCw7CkG2ylF5sQ^>Bxa+1_iNb?k z%c|wl6XN0d9UqT~3p=d*I{!2X#QBr9?&=+-{{R<%1%w%NOP~uJ+n1Xy)kX&fx@3V8 zII_pgIaAC=NcnymM%s%N)|zy6Hg{&{5VIa%JPA>n9b(&%TDt{z+R~_X15~))dw4av z+QZtcpMK8l1U(@_N{M4!HHK1iW}XP>(QJFcS}s(rN4j*Dx~0xQ9A*0@D&H*5g?ukI z{q08jG5VI&7nG>BwR3-btd0aU54>1_yFjjETkmm;=>>3UFZTPSyPo`)RVAc9d#f%0 zer&m*u(e4Ma?1ScZW9YDCi|D`W>3$pz7b^d=~rkg8kA?3bePVR=DuAgfH`X8e-jwe zJWl@XVWmg;DN@6Z2CoksZBr8Xlj5eoD*5x626sP(3YW@dUnE11-o>k(17rZwXi_8z750b0L1B4iMcX{@e^k=Euu-v`*?rC!K=i`RzV zRyjEk(L0)NMfd^DWjyE8+f34m56)2S>>t4D0d6|V&i9kApmcuI%Sbn;y{)Y-OwkFg z$dELd9yeUXrCjx-DILHyu!8hg!n9II8y`#=h#Q9SDil^kBPU%X0i!376iAYK$rSL5 z^B!HfV-DF|In5c*kU$;QmATs!z5v(-5>v7KWq8iq=lkbt6FqJCf7TZD>_UmBkrJJi zf}me&Gv&UnxAr5AE0~hHqw%)U^G53{{)gXtdyefJ$|qGspq84c0S)>SVdY28Vt&6g z@RDy2!1f_a*Mt4@{bdRzY+>M42UHu+SdaRyuUj=4f%)31z>@xihjb-a(cP2a6u-5I zEJBPb7joAU+)mo8a$*_ap0no%GDzmv;PZj1eF`>q8>#;1f`a+FwzWb!?V0~lm9+Ay z{99B4`vPoX^&*Iz-hN20d=~WG1xzFY|9h8hEjP0tsQYomf2-p8f|L?~_JCOkD*CqW zQTNP=pj{Gn6&NdR*t*$b*G%>O4QG3=k3P_C5RWT;eOd2fU)zU}P+s z{*Ld_qgdJ8ZPWYId&{12Y&TZP+K zJ5hTGkTiRiI@dfSRO^`wPC93mqeiAF=?>~r7j>BLzJFDKKcDC){QPeMDyz_5J|jTz z;Ysg$@wa^CdG`rv?I>D*C2kz|&K76H(@Fn1?*)C*G7LS)D$boB{A|v5ZH~U+h-+Xy z2FybMV1d{9H~<*xN9ITKDoy5m3z17B+_>LKtpcJzznvOkI^ovT{yC7HskbjLmm~{= z^Jvnxt9$g3^b5ii#H8r<`PB(9I0OPCYPa3HG+(7qjB7AttxF2=1eC&c%WzA8nV1Tm z*O(bY$}y=ek>ELvh&JHN)|1N3aXHoTH`dj>rFG2AdZ(V#efCUEl{7RH75j?; z<_^B#`LiQT0e>i>Cs8-9dQy+NDr$sOMb=!@|L11cSQKx@u;vPKioBQx%o?22i)FB$ zYe{<7<&TRmKyk-9VYd#sUlUEHo(4+K8QnD*l484*lf=or>v4 z!la|&>RYDpCs92z0UI-+zb=nA`|ZHj2fB?S<8gR~MRI*CsBHi1Dojl`SvQRX(WUmD zwAiIg31$q(+z(5xA?K8QhDlOyFk6g!gCGI8Y-T8$julDajVh>>8(OZ}P3_cL146$Q zZWvGLL**o*ZH`M19%Q~xuhn|Sc5K%j(Y#x`4mV^p zRC4a;UC`N70`L{E3Wjw6wb1Qg>G^qmQY`dgKcMrD{lkwi`*l04@apCFCuP)fZ3kRT zV2c4)S@lsCgc5c*qKlA z-jG_^xO8+WZ!n#^0cZ=?O<7&Z7Mnvj*Z-~$KT!b}mI^c+|~7P3K7^2@OK1+s@-e~neElmM+cMI&g(Sa_hTo-n>-(NBZEh!A6N*A=u24>yQ9LhPLpI;xNinu2BO#d_jcjFS&DXfH*x|58Q|ma z@<$r{L1rB`e+DRi-e9x+c0}>^bw#)rvnrT%riA_t>-&GMfxISEorjAwQqN%@1dI5? zWk64#%zqrvCxta%oZXv&0)NR?~yk>Gf$?suf$lgOyuKo>vgsMB2 z2#Udma(N;`=+n@{5K*d-U*c{|Ahf{XVW#}8{kW#aSGf$!=yFMwI! z_4)FXfBUojJpm{}VEG;(K-#n#J$YMj>8lKq%DDU@>og_cbp_v?0es+YudwVNf2{WX zO`&~9sO^7}bQk#+^&YkA&40G#w<%)VmG_|43KG?U?5HNT9(;9ILfLRmCyaiN7GW`~ z^of(G_f8n6$t$&waMlgVmsANaDoo;E$j`L$Mo_oJtQbm=e9cT(8%dfS=MjDVNOWA& zFg+fN!X+u4cCFQ1r0vxq_3G6fl*KOdPM-)9?x4f)<^B3Y9rdXZc3q`;fF}R@3j0!s zWk~#PY|D+m|HI^tI~dVagd!}7D~Ed*41u)ZPwjgtu)vrOg1t2C{u9nBpqq6N$-mz_ zJIp%gfd!HKvT0wWZYgR}+3vcalD|)}(=(-}E4)Lu8=>%tX^JQ58NIG-=#z2txtXPk z6njd;#*)t5K<oFA#x^0c`TQFX_ zZEnUpiE-|6aSm?Rz5}|lx^d;ld`}8-^ET`grjEZ05WZ-y$Z^9{bsz@>01N5gPu`a0 zVuL)7cE9y}NhYgs*1kWML8V3)RjStkY!Yau^}!yT;G(mce+baGqU7e`_! z(Ofr1kF<-QPcnw_bL(%PHl<}`=%vT?YW4woQ1j7@ub9eUDO2;7TQTd^`HxYW0$2F` ziP8H1kpJJT%0FTSveYMc!q?W;2D$wZQBee&s*ltN;qA+bx6gmgPCd4BN{bl?wM3_U zdiXgC%_wATU_#+TS7K`Tz_)=W;}?I9hu@EkbV;=`Za!v7d{rrD;I`A?m0syxDf(2_ zY|`{JJN?;Y=RJix6GU4Htlhvl)*lT5dHXzkE&VZ}b}_eG^{o9`C96Ufn-Ae47Vg^@ zI-yloU%siz^>D1(j`OtsXrp^1VzTD&Af((f9WUR>@oR2 zEghN9wL*5`yNBj&c|c`rM{3J7SQ84z<4cd)VClu{8O4dClkzDPbfxu9I#o*NbXt69 z+GZBq%18W~|61$3JB9KSMg8N3LmwLGw&UijXH<$J=++{x@V$I@Lsw>qiis!CA+#*t zE|qk1?-PO2JN`8oY(98}L5KEscw|K3$t?jIa5bNvosL!gG%lHR5#jmIPFIyF3Y309 zT>krNW#!Yhc?@kN&^_mYIZtAB3Se>vaEz}TG^(DB8y_DZL+^)}ShbmpT)vcTe`Ztt z++_%+$K6-hXR-vpVvoJf`L)RDTTzVg+K!;XE76sO&&o`zj8N~$)d~)s*;}I87*{w- zPuk9Xdo*iP{F4f=sE9j+cc<5X&R#eOiwf`Bu8ip{qok5|t&rOjb}}p6Ju6SH(BCj> z`NYN}z-9{R;*;|11-Olt42q*NLps5)2R;fAv!7v_WSAx|{C@x)rIoyh`nH8~hy~4!7zK0@>5TI?LKn_3x{;egg(skr7x5sV zRT=K)7b)siWEO|brE`yEX1TU6i>eT|Hr4Ol+-7;_46R;jE=}s>gZGz>Rg^-&;zJV3 z2zqTi+0fH-`25uGWlY1S00As>+##&5eMyJ(V-zMxte8j=3ZIw9NKPRuBC6i|YIjfHbzPvt zd9}N=_?q#2@8-*{b_mCJS&rA*H@~Wv6OAw9jr$x;rM2QlS_2iUtwG=hew_Vgv3)ST zvV_x`R>rV(Fnjz-6xfMURzyW8(xB%Hf>_@CuHKUY4@))m6?U83lhP6r@#*wU2dQ`K(vi4PU~<%L8LELh+N-pu>82Mp(`unhj5H_okE^**V_8bF){p6og9#ZKH46#Fiu0qRqr+zFFND(jK_c?1 zWzlh<+G?Z}BP=0?yG=1_{POa$+w6RAk!OzRKY{Mx+4j6h6gWjFjM2S*UAL(jr!j_^ za}xIkVc^7dL^#%`>Z;P&!AW#?J%p?MRTSXK;#O8xGV|UyzrpX49zH>NQ`&iGQH=Jq z^TFvVmsQWxHVux1%YzKIHGd^hJ{&~Q^r}v^&W*?@B2U*Iu@+;C{XmVqRzMjXIzNn@ z*oeNXKdP1fY2UG1eB*H#Nd<@P~`CM z1}wC{HU=Bxu4MF#72qrO`HCfSVp#~K+g@$mm85Jn;@EX-@ZIz2He-IYnJ^bv>0q;- z>ZCX;_HQ!v;8|S%Qr7B2`GcX z2s?xMjA8hwM$)?!Zv&~<2BEsT@#ez%MbXLf`FZ(JOWM3)1Q)s7p?|ONnjCFxDNPC1 zS-SI-+G_X2{1`n4;i2alKiqTHjvHw{LaQnNh4Be|%xb@ZRQBY1wdtgYo2w4($cMTD zaz?FESH1-L=ZxPdx4DDeYOW+Jl{CANz1SefMa}bVvrBNIp4!#k^|sl3akaM@V{u1K z4+p}`O!S8*SR~VEbob<8%k&P|gDTuRG!wfX-)F0>-aaG@HHi1s_xy9?SKumle_N40 zHj*---twhRJwD`c3g@x=OBYG}GE(b{@z( zfon1d(;|Mq+;X0(=z*{Wq6Ij-5~+!u{r%exXWWG1tE+iR)e(UCpMtd~3 zBFQGU+{{JDS*8gZ?=#a`L^U$!U}Q=7;t(TW#FL~-VpUXAiS&XwtbgQS6oqnv3FBV# z8A0DmSvjf@8scBiS}HHdr_s&FPI-!F)23t8WFj}Lu2LqVb1Q2&`dpT29gZ}Qbe4Q& zRWJjKHdsx?cY1S2kiBdmCG~RU9OD`y5Bwo+SKNIrQK6*iT?YC6MOHQMCzKVx@%{lg zS++cyxzm;Du%3B={XCV-5-IcS@6MtGe44Mxu$`DdD_|M6nKjpRI+*F+YNT=-&5yGg zW0VVM0DEoBv0nS^s%lw7-BP1|eiA+DKVe0}S?3|y|Y&K4;WF`&XdtF(&_2MYRsdInA zLzv9~$43rGoEn0{p_Vr}&KKS4v-d~q#UT?_(1-ID*k4FETvNxr>*DRreC;ppY*dd{ z_phxsc>>828AH#n!~~P0Hbq zuyleZj*2FA*EYnOcWGKOx~GBsecDHYZ{mC!1?4?KLl9O>iPNIB@?0eeP-yDUnB+l; zdAkSlnDPEo4nUyhM4F2j6u!~tg!~}%jbw<%Zn=54(t^ShK)35Ze#nu6@?IB3;;p$F zb(DRcsX195o3WK(^Os*@RXQ2Uxs*MeY}$0&ZoW*@R+6PmeA?sjDdX{l^H06@?e_8~ z5*8Jb$5w5jLppp)*m|W+B^vstBc`E3L&tfRNn*LaN-19YgQna=!_M)@IG;1zHVHv; zNQ0?20t@d@L?NWzJ()&F$=a%HC zGww2A4V02RwBS*Vh4#FD$mWJ(|YUW(MH& zq!hjJCqnO_4hhL+SHK_)7zvO?(Pe}h9u%1e(8jAl4C&LNX_0Tf743i z{ztH(L7XfNiAK$=&QL_MX};iBSbD^(&=+1xgCjrjJ^h7+FBAmVOC5y##Fmzudm3S~ zXp<3hox%>2jn5y(vyyU*7#k_2F~f`eWMTU22v#eaBKZ&|kihEfS`k`B&w?+|^nsgE zEzujB{P@E}8jkDBVp|gNg?l&KK%1=g`C`AxXMz0vjIi2QU<(Vh}pVsR9(I9-MG3VLVnsJ#xTA{X{fF=v2gq+ zMG4(D)_Ih3sL*$Lw3Z%4*8;OrWZEh*H+a7vMgZhLIFBiMFn$sF_2Kwc@);Kw-s9mv

medNahwCU6lvLyU|XPR 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 literal 0 HcmV?d00001 diff --git a/book/3_diffusion_fields/figures/GHeatA.png b/book/3_diffusion_fields/figures/GHeatA.png new file mode 100644 index 0000000000000000000000000000000000000000..65cf0d631f5bae0272ff6eed20e7ebc9096b6554 GIT binary patch literal 115990 zcmY(rcUaR|7cKk)MF&xtQ3O#G8z8+aO|SvdYeGVAp%(!GslkGbAVnbbW}yh7H>p7p zfl!s+6$nU;gc1V@`A(Sk-tW2jW1NR4oU+e8Yp=ccI=s}^RX=g;+%X7(PG~&1ZwUUe zhoHmv|2hJG@&H5egP0&l9~WO8oPT4=ZJ@w?_ykuWc!=G}NYNNu&XK`Ry^G8~&=&s{WOwvWaca08nk0ZGMYJ)? zqxY%FGeN{A#~@Go0D4!CzCJ^1K$B}1Dor5hc4)Y0XW; zByHl_9+^nr&)zjcFYi?^hqHyK>?{|Rt|wL$ zn8cuQ4~1=pWu9T9xWqZr)6;=P-`S(R>271OK8wB8^(mMT6`zIfUbID*+s|LN4O zP~bP<^Q^OcS={yn{=*T$C^Jf<{mY`FBBRc@d4#tJ1UX#^2miIs;drzgE+S~lcl(Vc z41O*{4M7=qEnQO@xkd`GqVJAGRXX;qA9mf8aGBZM4*b#b5k{?%n-m{sq&}+BKe=pw7x1$`mNGeAKu>BjOxLwH$t~aDIKj;dc z&s6X&{BDdD`ZP(~BQF}7->WW)a~obHPS*L@g_Q8D{KGhAnE|8CX|V5{)Kf8Ab_&C*G4!g>B{ssx)@xo3 ziLx|@hUe9smDv_;zh30Vd@y3qrS?Mgigya65A*6=V&(BhRsZ7`PG-7ob~I;?{gf%X%T_P+ST*x(Ry0xtH>%;|%XT2?#CmtTjIm%HzN4G8{! zM!8LZu|yO%e_iK$9!S8LxQN?D8;L0d|9R-O(4Ct3*6?YTP&1{+lha*xbw%;c<%8iQ zth}*HUH1!ndV26=y-;J1qbGS%@G}+~F|sKPKT0Dk1rWhEMd}a#V`gS%hn@~+<5J_i zZI~z@wBshJ!zzD7M_1~C>#mf}@|6FK=yc#pu_-@%+lWtJ(Qg&uwLV#A+n04Kb}Fm1 zGdT2Voef=&qHs>ey|B|zp^Ls(?K*O#oS>N?6+^A*#z1q*JfXnw_1 z3>C02`QQw=<9S>q4vZhg3M_V;5ce*cC7oZRbA9lGk)j#D&Dun*=c2nuHjG>N$#}sc zerEH$XXD2G6!;N$3Iem}Tx4Ulm}h_Btu0iB4dVx|BRj;|RCl^!4LRzADWu-F{_l

4->=)6Wp~^J`+w?wOiG-MM(XX#Rt1sNVsc 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 z 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

aNV9Gt#I}n4_p~D&Uc4 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/\sqrt{2}$. +To show the early- and late-time behaviour, we show the temperature as a function of time. In the example, $T_0=1$, $\kappa=1$, $L=10$, and we compute the temperature for positions $-30L/\sqrt{2}\approx 7$ m occurs at later times with increasing distance to the mid point. The time of the maximum temperature value grows with distance squared. This is not very well visible in the plot, because of the logarithmic time scale. + +```{figure} figures/GHeat.png +:name: fig-gheat +:width: 75% + +The temperature as a function of space and time with a Gaussian distribution in space at $t=0$ as initial condition. +``` + +Looking at the temperature as a function of time for specific locations away from the mid point is useful to evaluate the interplay between the late-time, or polynomial, part and the early-time, or exponential, part. To this end, {numref}`fig-gheata` shows them as a function of time for distances of $x=10$ m (left plot) and $x=20$ m (right plot) as black curves, together with the polynomial part (red dashed lines) and the exponential part (blue dashed lines). The vertical thin black lines mark the time to the maximum temperature, which is 25 s for $x=10$ m and 175 s for $x=20$ m. + +```{figure} figures/GHeatA.png +:name: fig-gheata +:width: 100% + +The temperature as a function of time at $x=10$ m (left) and $x=20$ m (right), with a Gaussian distribution in space at $t=0$ as initial condition. The black curve is the temperature, the red dashed line the polynomial part, the blue dashed line the exponential part, and the thin vertical line marks the time $t_p$ to the maximum temperature. +``` + ### An infinitely long wire with an initial double Gaussian temperature distribution If the initial condition specifies two shifted Gaussians, the solution can be written immediately by understanding that the superposition principle holds. This means that two separate initial conditions each lead to a solution that can be summed and that is equal to the solution we would obtain by specifying the two initial conditions as a single starting point and then solving the equation. Hence, if we have @@ -414,30 +432,102 @@ $$ (eq:T2Gauss) From this solution, and the fact that the exponential functions are quite distinct for early times but become equal for late times, we can understand that after some time we cannot distinguish between a field that consisted initially of two Gaussians and one that consisted of a single Gaussian temperature distribution. The closer the initial peak values are together, the earlier the blurring is such that the distinction cannot be made anymore. In a nutshell, that is the difficulty with analysing diffusive field signals when we record them to obtain information about the Earth. +## The infinitely long wire revisited: a solution with the Fourier cosine series + +Solving problems with separation of variables is not always the best solution, for example when the temperature distribution at $t=0$ is a Gaussian function, but it is possible and can still be convenient. For the example, we return to the infinitely long wire. Hence, we are solving the same equation and boundary condition as before, + +$$ +\begin{aligned} +\partial_t T &= \kappa\,\partial_x^2 T, \\ +T(x,0) &= T_0\exp\left(-\frac{x^2}{L^2}\right). +\end{aligned} +$$ + +This function goes to zero at the end points "infinity", which seems to make sense from a physical point of view. We still want a solution of the form + +$$ +T(x,t) = f(x)g(t). +$$ + +We cannot use the boundary conditions at "infinity", because that would not help us in finding eigenvalues. Instead we can look at the functional description of the boundary condition at zero time. This is a Gaussian function in space and it is characterised by the width $L$. Hence the fact that the wire is infinitely long does not matter too much, because the temperature goes exponentially to zero for large distances. We can then choose a finite length $M$ and we will approximate the boundary condition with $2M$ as the length of the wire. + +The initial distribution is an even function in space. This means that an integral $-\infty Date: Mon, 28 Sep 2026 21:51:49 +0200 Subject: [PATCH 7/9] Add a cosine series task to the Week 5 lab and trade Task 3 down --- .../labs/week05_diffusion.md | 116 ++++++++++++++++-- 1 file changed, 106 insertions(+), 10 deletions(-) diff --git a/book/3_diffusion_fields/labs/week05_diffusion.md b/book/3_diffusion_fields/labs/week05_diffusion.md index c84d37c..53e4012 100644 --- a/book/3_diffusion_fields/labs/week05_diffusion.md +++ b/book/3_diffusion_fields/labs/week05_diffusion.md @@ -215,16 +215,18 @@ With $\partial_xT = 0$ at both ends, no heat crosses them. The eigenfunctions be $$ T(x,t) = C_0 + \sum_{n=1}^{\infty} C_n \cos\!\left(\frac{n\pi x}{L}\right)\exp\!\left[-\kappa\left(\frac{n\pi}{L}\right)^2 t\right], \qquad C_0 = \frac{1}{L}\int_0^L h\,\mathrm{d}x, \quad C_n = \frac{2}{L}\int_0^L h\cos\!\left(\frac{n\pi x}{L}\right)\mathrm{d}x . $$ -The initial temperature is now $1$, $-1$, $1$ K on the three thirds of the bar. **Predict** the temperature at late times, and whether the heat content $\int_0^L T\,\mathrm{d}x$ changes. +The initial temperature is now $1$, $-1$, $1$ K on the three thirds of the bar. The cosine projection is given; write $C_0$, the one mode the clamped bar of Task 2 did not have. **Predict** the temperature at late times, and whether the heat content $\int_0^L T\,\mathrm{d}x$ changes. ```{code-cell} ipython3 Cc = np.cos(np.outer(n, np.pi * x / L)) # row n-1 is cos(n pi x / L) h_ins = np.where(x < L/3, 1.0, np.where(x < 2*L/3, -1.0, 1.0)) # initial temperature [K] -# Task 3 -- three blanks: the cosine version of Tasks 1 and 2. +# Task 3 -- one blank: the n = 0 coefficient, the mode the clamped bar did not have. C0 = ___ # the n = 0 coefficient [K] -Cn = ___ # C_n for n = 1..N, shape (N,) -T_ins = ___ # T(x, t) on the times t, reusing D from Task 2 + +# --- given: the rest is Task 2 with cosines in place of sines --- +Cn = (2 / L) * np.sum(h_ins * Cc, axis=1) * dx # C_n for n = 1..N, shape (N,) +T_ins = C0 + (Cn * D) @ Cc # T(x, t), reusing D from Task 2 Q = np.sum(T_ins, axis=1) * dx # heat content, per unit area and heat capacity [K m] @@ -248,8 +250,6 @@ fw.check_abs("at t = 0.1 s the series still equals h(x) away from the jumps", ```python C0 = np.sum(h_ins) * dx / L -Cn = (2 / L) * np.sum(h_ins * Cc, axis=1) * dx -T_ins = C0 + (Cn * D) @ Cc ``` ::: @@ -263,10 +263,12 @@ Every cosine with $n\ge1$ integrates to zero over the bar, so the heat content i ## Part 2 — An infinitely long wire -Without ends there is no series. For an initial Gaussian $T(x,0) = T_0\exp(-x^2/L^2)$, the lecture notes find the solution in closed form: +On an infinite wire the lecture notes solve the same equation twice. First in closed form, for an initial Gaussian $T(x,0) = T_0\exp(-x^2/L^2)$: $$ T(x,t) = \frac{T_0 L}{\sqrt{4\kappa t + L^2}}\exp\!\left(-\frac{x^2}{4\kappa t + L^2}\right). $$ +Then again as a cosine series, by putting the wire in a box of length $2M$ and letting $M$ grow. Task 7 takes up that second route; Parts 2 and 3 use the closed form, because it is the one you can read. + In this part $L$ is the width of the initial Gaussian, not a length of wire; the code calls it `Lg`. Time enters only through $\kappa t$, which has units of m², so every result below holds for any material. The figures below use $L=3$ m, $-102a^2$ the profile has a single maximum, and it becomes ever harder to distinguish from one Gaussian of twice the heat. Sources that are closer together merge sooner, as $a^2$. For $a2a^2$ the profile has a single maximum, and it becomes ever harder to distinguish from one Gaussian of twice the heat. Sources that are closer together merge sooner, as $a^2$. For $a 0.01)]) + t_dep.append(t6[np.argmax(rel > thresh)]) t_dep = np.array(t_dep) slope, intercept = np.polyfit(xcs**2, t_dep, 1) -kappa_fit = 1 / (4 * slope * np.log(100)) +kappa_fit = 1 / (4 * slope * np.log(1 / thresh)) plt.figure(figsize=(5.2, 3.2)) plt.plot(xcs**2, t_dep, "o", color="#00A6D6", label="measured") plt.plot(xcs**2, slope * xcs**2 + intercept, "-", color="#8a9199", @@ -493,6 +495,7 @@ plt.plot(xcs**2, slope * xcs**2 + intercept, "-", color="#8a9199", plt.xlabel("$x_c^2$ [m$^2$]"); plt.ylabel("departure time [s]") plt.grid(alpha=0.3); plt.legend(fontsize=8); plt.tight_layout(); plt.show() print(f"departure times [s]: {np.round(t_dep, 2)}") +print(f"intercept: {intercept:.2f} s (-w^2/(4 kappa) = {-w_b**2/(4*kappa):.2f} s)") print(f"kappa from the fit: {kappa_fit:.3e} m^2/s (the bar was built with {kappa:.3e})") # --- self-check (leave this alone) --- @@ -518,14 +521,23 @@ def T_free(tv, h_on_grid): :::{admonition} The ends are felt when the tail reaches them, and that measures $\kappa$ :class: important dropdown -The bump spreads to width $\sqrt{4\kappa t + w^2}$, so the fraction of it that has reached the -near end is $\exp[-x_c^2/(4\kappa t + w^2)]$. Setting that fraction to the 1% threshold gives +The bump spreads to width $\sqrt{4\kappa t + w^2}$, so the temperature at the near end, as a +fraction of the peak, is $\exp[-x_c^2/(4\kappa t + w^2)]$. Setting that ratio to the threshold +$\theta$ gives -$$ 4\kappa\,t_{\text{dep}} = \frac{x_c^2}{\ln(1/0.01)} - w^2 , $$ +$$ 4\kappa\,t_{\text{dep}} = \frac{x_c^2}{\ln(1/\theta)} - w^2 , $$ a straight line in $x_c^2$, which is what the second figure shows. Its slope is -$1/(4\kappa\ln 100)$, so the fit returns $\kappa$ to about 1%, and its intercept is the small -correction $-w^2/(4\kappa)$ for the width the bump started with. +$1/(4\kappa\ln(1/\theta))$, so the fit returns $\kappa$ to about 1%. The intercept is negative: +$-w^2/(4\kappa) = -2.05$ s predicted against $-1.96$ s measured, the head start the bump gets from +the width it already had at $t=0$. + +$\theta$ cancels out of $\kappa$ because the Gaussian tail is exactly log-quadratic, so moving the +threshold scales every departure time by one common factor and the slope absorbs it. Set `thresh` +to 0.002 and to 0.02: the nearest bump departs at 1.7 s instead of 4.0 s, yet $\kappa$ comes back as +$1.08\times10^{-4}$ and $1.09\times10^{-4}$ m²/s against the $1.09\times10^{-4}$ of the 1% run. A bump +whose tail was not Gaussian would not cancel. Push `thresh` to 0.05 and the fit finally drifts 5% +low, because by then the departure is being read off the shoulder of the bump rather than its tail. Two things are worth taking from this. A boundary makes itself felt through the tail of the distribution, long before the diffusion length $\sqrt{4\kappa t}$ equals the distance to it. @@ -612,9 +624,10 @@ M_ok, N_ok = 300.0, 60 :::{admonition} The box must outrun the heat, and the modes must resolve the source :class: important dropdown -The table falls into two halves. Below $M=25L$ nothing helps: by the end of the window the -Gaussian has spread to $\sqrt{4\kappa t}=20L$, so a box of $15L$ has heat piled against a wall -that is not there in the real problem. The box has to outrun the diffusion length, and $30L$ +The table falls into two halves. At and below $M=25L$ the box itself is the limit: adding modes +drives the error down to a floor of 23% at $15L$, 4.3% at $20L$ and 0.50% at $25L$, and no +further. By the end of the window the Gaussian has spread to $\sqrt{4\kappa t}=20L$, so a box of +$15L$ has heat piled against a wall that is not there in the real problem. The box has to outrun the diffusion length, and $30L$ against $20L$ is the margin that does it. Adding modes cannot repair that, but neither is $N$ free. Read down the $N=10$ column: the error @@ -631,36 +644,46 @@ boundary makes itself felt; here we ask how far away to put a fictitious one so ## Part 4 — The same kernel in the Earth -A horizontal current sheet at the surface is switched on at $t=0$ with current $I$ per unit width. In the diffusive approximation the electric field at depth $z$ is +A horizontal current sheet is switched on at $t=0$ with current $I$ per unit width. In the diffusive approximation the electric field a distance $z$ from the sheet is $$ E_x(z,t) = -I\sqrt{\frac{\mu}{4\pi\sigma t}}\exp\!\left(-\frac{\sigma\mu z^2}{4t}\right), \qquad t>0 . $$ -This is the kernel of Part 2 with $\kappa$ replaced by $1/(\sigma\mu)$, so the field soaks into the ground exactly as heat spreads along a wire. The approximation neglects $\varepsilon\,\partial_t\boldsymbol{E}$, which is justified when $t$ is much longer than the charge relaxation time $\tau_r = \varepsilon/\sigma$. This is the field a time-domain electromagnetic sounding records. +The exponential is the kernel of Part 2 with $\kappa$ replaced by $1/(\sigma\mu)$, so the field soaks into the ground as heat spreads along a wire. The prefactors differ by the constant $I/\sigma$, which sets the amplitude and not the shape. Rock is non-magnetic, so $\mu=\mu_0$. + +The sheet sits in a uniform conductor and the solution is even in $z$, so reading $z$ as depth means ignoring the air above: an idealisation, not a consequence of the derivation. The approximation also neglects $\varepsilon\,\partial_t\boldsymbol{E}$, which is justified when $t$ is much longer than the charge relaxation time $\tau_r = \varepsilon/\sigma$. This is the one-dimensional idealisation behind time-domain electromagnetic sounding; a real system uses a finite loop and records $\partial_t B$. + +### Task 8 — when does the field arrive, and in what ground? -### Task 8 — when does the field arrive at depth? +Write the time at which $\lvert E_x\rvert$ at depth $z$ peaks, from $\partial_t\lvert E_x\rvert = 0$. Differentiating $\ln\lvert E_x\rvert$ is easier and has the same roots. **Predict** first whether a deeper receiver peaks earlier or later, and by what power of $z$. -Write the time at which $\lvert E_x\rvert$ at depth $z$ peaks, from $\partial_t\lvert E_x\rvert = 0$. +Then the same receiver in three grounds: seawater at 4 S/m, saturated sediments at $10^{-2}$ S/m, crystalline basement at $10^{-4}$ S/m. **Predict**, before running, how they rank by arrival time at 300 m and by what factor $t_p$ changes from basement to seawater. + +The second blank is the margin the diffusive approximation has left, $t_p/\tau_r$ with $\tau_r=\varepsilon/\sigma$. Write it in closed form, in terms of $z$ and $\sigma$, and watch what $\sigma$ does to it. ```{code-cell} ipython3 sigma, eps_r, I_s = 0.01, 10.0, 1.0 # sediments [S/m], relative permittivity, current [A/m] tau_r = eps_r * epsilon_0 / sigma # charge relaxation time [s] -t_em = np.logspace(-7, -1, 3001) # [s] +t_em = np.logspace(-6, -1, 3001) # [s], from about 100 relaxation times _depths = [100.0, 300.0, 1000.0] # [m] -def E_step(z, t): - return -I_s * np.sqrt(mu_0 / (4*np.pi*sigma*t)) * np.exp(-sigma*mu_0*z**2 / (4*t)) +def E_step(z, t, s=sigma): + return -I_s * np.sqrt(mu_0 / (4*np.pi*s*t)) * np.exp(-s*mu_0*z**2 / (4*t)) -# Task 8 -- one blank. -def t_peak_em(z): +# Task 8 -- two blanks. `s` is the conductivity [S/m]; it defaults to the sediments above. +def t_peak_em(z, s=sigma): """Time at which |E_x| at depth z peaks [s].""" return ___ +def peak_over_relax(z, s): + """How many charge relaxation times the peak waits: t_p / tau_r. Dimensionless.""" + return ___ + # --- given, 1: the field soaking downward. Drag the bar, or press play --- _zs = np.linspace(1.0, 2000.0, 400) # depth [m] _tp = np.logspace(-6, -1.3, 60) # [s] _prof = np.array([np.abs(E_step(_zs, tv)) / np.abs(E_step(1.0, tv)) for tv in _tp]) fw.show_profiles(_zs, _prof, _tp, value_name="t", value_fmt="{:.2g}", unit=" s", - xlabel="depth z [m]", ylabel=r"$|E_x|$ / its value at the surface", + xlabel="depth z [m]", ylabel="|Ex| / its value at the surface", title="The field diffuses into the Earth", ylim=(0.0, 1.05)) # --- given, 2: depth against time, with your arrival-time curve over it --- @@ -676,20 +699,67 @@ fw.show_records(t_em, {f"z = {z:g} m": np.abs(E_step(z, t_em)) / np.max(np.abs(E t_label="t [s]", y_label=r"$|E_x|$ / peak value", title=r"Step response at depth, $\sigma$ = 0.01 S/m") for z in _depths: - print(f"z = {z:6.0f} m: t_p = {t_peak_em(z):.3g} s, t_p / tau_r = {t_peak_em(z)/tau_r:.2g}") + print(f"z = {z:6.0f} m: t_p = {t_peak_em(z):.3g} s, t_p / tau_r = {t_peak_em(z)/tau_r:.2g}," + f" |E| at the peak = {abs(E_step(z, t_peak_em(z))):.3g} V/m") # --- self-check (leave this alone) --- for z in _depths: fw.check_scalar(f"t_p at {z:g} m against the peak of the record", t_peak_em(z), t_em[np.argmax(np.abs(E_step(z, t_em)))], rtol=0.01, unit=" s") +fw.check_close("t_p / tau_r against t_p and tau_r built separately, over five decades of sigma", + [peak_over_relax(300.0, sv) for sv in (1e-4, 1e-3, 1e-2, 1e-1, 1.0)], + [t_peak_em(300.0, sv) / (eps_r * epsilon_0 / sv) + for sv in (1e-4, 1e-3, 1e-2, 1e-1, 1.0)], rtol=1e-6, + hint="tau_r = eps_r eps_0 / sigma shrinks as t_p grows, so the ratio carries sigma twice") +fw.check("a tenfold drop in conductivity costs a hundredfold in t_p / tau_r", + np.isclose(peak_over_relax(300.0, 1e-3) / peak_over_relax(300.0, 1e-4), 100.0, rtol=1e-9), + "the margin goes as sigma^2, not as sigma") +``` + +```{code-cell} ipython3 +# --- given: one receiver at 300 m, three grounds ----------------------------- +media = {"seawater, 4 S/m": 4.0, + "saturated sediments, 1e-2 S/m": 0.01, + "crystalline basement, 1e-4 S/m": 1e-4} +z_s = 300.0 # the receiver depth [m] +t_s = np.logspace(-8, 1, 900) # [s] + +fw.show_records(t_s, {k: np.abs(E_step(z_s, t_s, sv)) / np.max(np.abs(E_step(z_s, t_s, sv))) + for k, sv in media.items()}, + peaks={k: (t_peak_em(z_s, sv), 1.0) for k, sv in media.items()}, + t_label="t [s]", y_label="|E| / peak value", + title=f"The same receiver at {z_s:.0f} m, in three grounds") + +print(f"at z = {z_s:.0f} m\n") +print(f"{'ground':<30}{'t_p [s]':>11}{'tau_r [s]':>11}{'t_p / tau_r':>13}") +for k, sv in media.items(): + print(f"{k:<30}{t_peak_em(z_s, sv):>11.3g}{eps_r*epsilon_0/sv:>11.3g}" + f"{peak_over_relax(z_s, sv):>13.3g}") + +print("\na survey looking 500 m down, able to record for 10 ms:") +for k, sv in media.items(): + _tp = t_peak_em(500.0, sv) + print(f" {k:<30} t_p = {_tp:.3g} s {'inside' if _tp < 1e-2 else 'beyond'} the window") + +# --- self-check (leave this alone) --- +_tf = np.logspace(-8, 1, 20001) +for k, sv in media.items(): + fw.check_scalar(f"t_p at {z_s:.0f} m in {k.split(',')[0]}", t_peak_em(z_s, sv), + _tf[np.argmax(np.abs(E_step(z_s, _tf, sv)))], rtol=0.01, unit=" s") +fw.check("basement to seawater is a factor 4e4 in arrival time", + np.isclose(t_peak_em(z_s, 4.0) / t_peak_em(z_s, 1e-4), 4e4, rtol=1e-9), + "t_p is linear in sigma, and the two conductivities differ by 4e4") ``` :::{admonition} Solution — Task 8 :class: dropdown ```python -def t_peak_em(z): - return sigma * mu_0 * z**2 / 2 +def t_peak_em(z, s=sigma): + return s * mu_0 * z**2 / 2 + +def peak_over_relax(z, s): + return s**2 * mu_0 * z**2 / (2 * eps_r * epsilon_0) ``` ::: @@ -697,4 +767,22 @@ def t_peak_em(z): :class: important dropdown A layer ten times deeper answers a hundred times later: 63 µs at 100 m, 6.3 ms at 1 km, for $\sigma=0.01$ S/m. On the map your curve $t_p(z)$ runs along the shoulder of the diffusing field, because $|E_x|$ has fallen to $1/\sqrt e$ of its surface value exactly where $t = \sigma\mu z^2/2$. Time-domain electromagnetic soundings rest on this: the later part of a record senses the deeper Earth. In a more conductive Earth the arrival is later, since $t_p\propto\sigma$. The ratio $t_p/\tau_r$ is 7000 at 100 m and grows as $z^2$, so neglecting $\varepsilon\,\partial_t\boldsymbol{E}$ is well justified at these depths. The blurring of Task 5 applies here too: deep structure arrives late, and therefore blurred. + +The peak amplitude is 0.24 V/m at 100 m and 0.024 V/m at 1 km. A factor of ten in depth costs a factor of ten in signal and a factor of a hundred in time, which is the $1/\lvert x\rvert$ law of Task 4 with depth in place of distance along the wire. + +The chapter's three-dimensional impulse response peaks at $t_p=\sigma\mu r^2/6$, three times earlier than the $\sigma\mu z^2/2$ you found here, and its amplitude falls as $1/r^3$. Both follow from the same differentiation: a prefactor $t^{-p}$ gives $t_p=\sigma\mu r^2/(4p)$, with $p=1/2$ for the sheet and $p=3/2$ for the point. +::: + +:::{admonition} Conductivity sets the clock, and it sets the margin twice over +:class: important dropdown + +At 300 m the peak arrives after 0.23 s in seawater, 0.57 ms in sediments and 5.7 µs in basement. That is a factor $4\times10^{4}$ from basement to seawater, exactly the ratio of the two conductivities, because $t_p=\sigma\mu z^2/2$ is linear in $\sigma$. A conductive ground holds the field up; a resistive one lets it through almost at once. + +The margin behaves differently. $\tau_r=\varepsilon/\sigma$ grows as the ground becomes resistive while $t_p$ shrinks, so + +$$ \frac{t_p}{\tau_r} = \frac{\sigma^2\mu z^2}{2\varepsilon} $$ + +carries $\sigma$ twice and falls a hundredfold for every tenfold drop in conductivity: $10^{10}$ in seawater, $6.4\times10^{4}$ in sediments, and **6.4 in basement**. The diffusive approximation is comfortable in the first two and running out in the third, and it is the *resistive* ground that breaks it, not the conductive one. Dropping $\varepsilon\,\partial_t\boldsymbol{E}$ was never a statement about depth. It is a statement about how fast charge can relax, and in a resistive ground it cannot relax quickly. + +The survey question resolves the same way from the other end. Looking 500 m down with a 10 ms record: seawater peaks at 0.63 s, far beyond the window, so the target is never reached in time. Sediments peak at 1.6 ms, comfortably inside. Basement peaks at 16 µs, inside the window but so early that a real transmitter is still switching off, and the useful signal is buried in the turn-off transient. Conductivity, not instrument quality, decides which depths a time-domain sounding can reach. :::