Explicit methods#
Explicit solver methods take information up to the current solution in order to predict the next step.
Runge-Kutta methods#
The Runge-Kutta methods are a class of time stepping techniques where the next time step is calculated from the current time step and an estimate of its slope (rate of change). Increased accuracy is achieved through approximating higher order derivatives to improve our timestep. Since we don’t generally have that information, we can sample the function at different steps to approximate them. This is the basis for the Runge-Kutta family of methods.
Consider the Taylor expansion, $\(\begin{align} y_{i+1} &= y_i + y_i^\prime h + \frac{y_i^{\prime\prime}}{2}h^2 + \frac{y'''}{6}h^3 + \cdots \\ &= y_i + f(x_i,y_i) h + \frac{f(x_i,y_i)^\prime}{2}h^2 + \frac{f(x_i,y_i)^{\prime\prime}}{6}h^3 + \cdots \\ &\approx y_i + h \sum_{n=1}^s a_n k_n \end{align}\)$
where the last line is the general form of the Runge-Kutta methods. \(a_n\) are a set of constants and \(k_n\) are the function evaluated at different positions in the interval. The goal is clearly to match $\(\sum_{n=1}^s a_n k_n \approx f(x_i,y_i) + \frac{f(x_i,y_i)^\prime}{2}h + \frac{f(x_i,y_i)^{\prime\prime}}{6}h^2 + \cdots \)$
in so far as possible with a series truncated in \(s\) terms (called stages).
Let’s build up to the general form step by step.
Forward Euler method#
The Forward Euler method (aka: Euler-Cauchy / point-slope method, Explicit Euler) is the simplest Runge-Kutta method. One simply takes the slope at the current point, which is given in the differential equation, and assumes it is constant over the step:
Given, $\( \frac{dy}{dx} = f(x, y) \)\( the next time step is: \)\( y_{i+1} = y_i + f(x_i, y_i) h\)$
which is simply the left Riemann sum, and similarly the error is \(O(h^2)\) over the step, and \(O(h)\) over the full solution.
Heun’s method#
Now that we have a value for \(y_{i+1}\) is there a way we can use the prediction to correct itself? Heun’s method does exactly this and is called a predictor-corrector algorithm as a result.
Consider:
make a prediction, $\( y^0_{i+1} = y_i + f(x_i, y_i) h\)\( Now take the average of the slopes: \)\(\begin{align} \bar{y}' &= \frac{y_i+y_{i+1}}{2} \\ &= \frac{f(x_i,y_i)+f(x_{i+1}, y^0_{i+1})}{2} \end{align} \)\( which is used in the corrector: \)\( y_{i+1} = y_i + \frac{f(x_i,y_i)+f(x_{i+1}, y^0_{i+1})}{2} h\)$
This is interesting since one could repeat the predictor-corrector cycle with the intention of converging towards the correct answer, but we will see this is a bad idea:
Example: Heun’s method with multiple predictor-corrector cycles#
Integrate $\(y' = 4 e^{0.8 x}-0.5 y\)\( with \)\( y(0)=2\)$ using Heun’s method with 1 and 15 predictor-corrector cycles.
import numpy as np
def f(x, y):
return 4 * (2.71828 ** (0.8 * x)) - 0.5 * y
def heuns_method(x0, y0, h, t, iterations):
"""
Applies Heun's method to approximate the solution of a differential equation.
Args:
x0: The initial x value.
y0: The initial y value.
h: The step size.
t: The target time for the approximation.
iterations: The number of iterations for the predictor-corrector cycle.
Returns:
The approximate y value at time t.
"""
x = x0
y = y0
while x < t:
y_pred = y + h * f(x, y)
y_next = y + h * (f(x, y) + f(x + h, y_pred)) / 2
for _ in range(iterations - 1):
y_pred = y_next
y_next = y + h * (f(x, y) + f(x + h, y_pred)) / 2
y = y_next
x += h
print("Time ", x, ", approximation, ", y_next, ', True ,', 4/1.3*(np.exp(.8*x)-np.exp(-.5*x))+2*np.exp(-.5*x))
return y
# Initial conditions
x0 = 0
y0 = 2
# Step size and target time
h = 1
t = 4
# Estimate integral with Heun's method, iterating once
print("Heun's method with 1 iteration")
y_approx_once = heuns_method(x0, y0, h, t, 1)
# Estimate integral with Heun's method, iterating 15 times
print("\nHeun's method with 15 iterations")
y_approx_15 = heuns_method(x0, y0, h, t, 15)
Heun's method with 1 iteration
Time 1 , approximation, 6.701079461759733 , True , 6.194631377209372
Time 2 , approximation, 16.319768581929353 , True , 14.84392190764649
Time 3 , approximation, 37.199199627848756 , True , 33.67717176796817
Time 4 , approximation, 83.33761313495894 , True , 75.33896260915857
Heun's method with 15 iterations
Time 1 , approximation, 6.360863570675189 , True , 6.194631377209372
Time 2 , approximation, 15.302225064771143 , True , 14.84392190764649
Time 3 , approximation, 34.74323213193692 , True , 33.67717176796817
Time 4 , approximation, 77.73495685652544 , True , 75.33896260915857
Unfortunatley, Heun’s method does converge but not necessarily to the correct answer!
The Trapezoid rule#
In the case that the slope doesn’t depend on the function value, \(y'(x) = f(x)\) the predictor can be calcualted directly, eliminating the cycle:
which is mearly the trapezoid rule which carries \(O(h^3)\) accuracy locally and \(O(h^2)\) globally.
The Midpoint method#
Recall from the discussion on on differentiation / integration that information from the midpoint was often superior that of either endpoint (in isolation) as over/under estimates tend to cancel.
As an alternative to Heun’s predictor-corrector method, let’s subdivide the interval and find the slope at the midpoint. To do this, take a half step:
then use the slope at the midpoint, \(y'_{i+1/2} = f(x_{i+1/2},y_{i+1/2})\) to estimate the full step:
which has \(O(h^3)\) local / \(O(h^2)\) global error.
Explicit Runge-Kutta methods#
We are now in a position to generalize the RK methods. Recalling:
For the explicit set of RK methods,
The \(p_n\) and \(q_{nm}\), along with \(a_n\) are constants and determine the type of RK method.
Note RK-1 is simply the Forward Euler equation.
Butcher Tableaus#
Noting that \(a_n\), \(p_n\), and \(q_{nm}\) are 2 vectors of dimension \(s\) and an \(s \times s\) matrix, RK schemes can be written compactly in a Butcher Tableau. For explicit methods, this looks like:
Note that the \(q_{nm}\) matrix is lower triangular. We will soon introduce the implicit family of RK methods which are upper triangular!
RK-2 methods#
For a given order, the values of \(a_n\), \(p_n\), and \(q_{nm}\) are derived such that
The second order RK method is:
with $\(\begin{align} k_1 &= f(x_i, y_i) \\ k_2 &= f(x_i + p_2 h, y_i+q_{21} k_1 h) \end{align} \)$
Taylor expanding \(k_2\) in \(p\) and \(q\), $\( f(x_i + p_2 h, y_i+q_{21} k_1 h) = f(x_i,y_i) + p_2 h \frac{\partial f}{\partial x} + q_{21} k_1 h \frac{\partial f}{\partial y} + O(h^2)\)$
which plugged back in to \(y_{i+1}\): $\(y_{i+1} = y_i + [a_1+a_2] f(x_i, y_i) h + \bigg[a_2 p_2 \frac{\partial f}{\partial x} + a_2 q_{21} f(x_i, y_i) \frac{\partial f}{\partial y} \bigg] h^2 + O(h^3) \)$
which we can compare to a second order Taylor expansion: $\( \begin{align} y_{i+1} &= y_i + f(x_1, y_1) h + \frac{f'(x_1, y_1)}{2} h^2 \\ &= y_i + f(x_1, y_1) h + \bigg[\frac{\partial f}{\partial x} +\frac{\partial f}{\partial x} \frac{dy}{dx} \bigg] \frac{h}{2} \end{align}\)$
Comparing terms we see: $\(\begin{align} a_1+a_2 &= 1 \\ a_2 p_2 &= \frac{1}{2} \\ a_2 q_{21}&= \frac{1}{2}\\ \end{align} \)$
Here we see that we have a single degree of freedom for the set of constants! Any choice will satisfy 2’nd order equations and therefor ebe exact for constant, linear, or quadratic ODEs. Certaint choices will have better properties in general.
Heun’s method#
With \(a_2 = \frac{1}{2}\),
with $\(\begin{align} k_1 &= f(x_i, y_i) \\ k_2 &= f(x_i + h, y_i + k_1 h) \end{align} \)$
which is simply Heun’s method.
\begin{array}{c|cc} 0 & & \ 1 & 1 & \ \hline & \frac{1}{2} & \frac{1}{2} \ \end{array}
Midpoint method#
With \(a_2 = 1\), $\(y_{i+1} = y_i + k_2 h \)\( with \)\(\begin{align} k_1 &= f(x_i, y_i) \\ k_2 &= f(x_i + \frac{1}{2}h, y_i + \frac{1}{2} k_1 h) \end{align} \)$ which is the midpoint method.
\begin{array}{c|cc} 0 & & \ \frac{1}{2} & \frac{1}{2} & \ \hline & 0 & 1 \ \end{array}
Ralston’s method#
The choice \(a_2 = \frac{2}{3}\), can be shown to provide a minimum bound on the truncation error, $\(y_{i+1} = y_i + [k_1 + 2 k_2 ] \frac{h}{3} \)\( with \)\(\begin{align} k_1 &= f(x_i, y_i) \\ k_2 &= f(x_i + \frac{3}{4}h, y_i + \frac{3}{4} k_1 h) \end{align} \)$
\begin{array}{c|cc} 0 & & \ \frac{2}{3} & \frac{2}{3} & \ \hline & \frac{1}{4} & \frac{3}{4} \ \end{array}
RK-3 methods#
A similar derivation follows for RK3, again with choices for the missing degrees of freedom. A common choice is:
with $\(\begin{align} k_1 &= f(x_i, y_i) \\ k_2 &= f(x_i + \frac{1}{2}h, y_i + \frac{1}{2} k_1 h) \\ k_3 &= f(x_i + h, y_i - k_1 h + 2 k_2 h) \\ \end{align} \)$
which reduces to Simpson’s 1/3 Rule if \(f\) is only a function of \(x\). As with Simpson’s rule, it is \(O(h^4)\) local / \(O(h^3)\) global error.
The Butcher Tableau is: \begin{array}{c|ccc} 0 & & & \ \frac{1}{2} & \frac{1}{2} & & \ 1 & -1 & 2 & \ \hline & \frac{1}{6} & \frac{2}{3} & \frac{1}{6} \ \end{array}
RK4#
RK4 is the most common implementation. The ‘Classical Runge-Kutta method’ is:
with $\(\begin{align} k_1 &= f(x_i, y_i) \\ k_2 &= f(x_i + \frac{1}{2}h, y_i + \frac{1}{2} k_1 h) \\ k_3 &= f(x_i + \frac{1}{2}h, y_i + \frac{1}{2} k_2 h ) \\ k_4 &= f(x_i + h, y_i + k_3 h) \end{align} \)$
with \(O(h^5)\) local / \(O(h^4)\) global error.
The Butcher Tableau is: $\( \begin{array}{c|cccc} 0 & & & & \\ \frac{1}{2} & \frac{1}{2} & & & \\ \frac{1}{2} & 0 & \frac{1}{2} & & \\ 1 & 0 & 0 & 1 & \\ \hline & \frac{1}{6} & \frac{1}{3} & \frac{1}{3} & \frac{1}{6} \\ \end{array} \)$
Example - RK4 steps#
An example of the RK4 algorithm is below, showing partial steps inform subsequent steps culminating in very good estimate!
![Runge-Kutta_slopes.svg](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTA0cHQiIGhlaWdodD0iNTA0cHQiIHZpZXdCb3g9IjAgMCA1MDQgNTA0IiB2ZXJzaW9uPSIxLjEiPgo8ZGVmcz4KPGc+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gNC4xMjUgLTEuMjU3ODEzIEwgNC4zMjgxMjUgLTAuMDE1NjI1IEMgMy45Mjk2ODggMC4wNjY0MDYzIDMuNTc0MjE5IDAuMTA1NDY5IDMuMjY1NjI1IDAuMTA5Mzc1IEMgMi43NSAwLjEwNTQ2OSAyLjM1NTQ2OSAwLjAyNzM0MzggMi4wNzgxMjUgLTAuMTMyODEzIEMgMS43OTI5NjkgLTAuMjkyOTY5IDEuNTkzNzUgLTAuNTAzOTA2IDEuNDg0Mzc1IC0wLjc2OTUzMSBDIDEuMzY3MTg4IC0xLjAyNzM0NCAxLjMxMjUgLTEuNTgyMDMxIDEuMzEyNSAtMi40Mjk2ODggTCAxLjMxMjUgLTcuMjAzMTI1IEwgMC4yODEyNSAtNy4yMDMxMjUgTCAwLjI4MTI1IC04LjI5Njg3NSBMIDEuMzEyNSAtOC4yOTY4NzUgTCAxLjMxMjUgLTEwLjM1MTU2MyBMIDIuNzEwOTM4IC0xMS4xOTUzMTMgTCAyLjcxMDkzOCAtOC4yOTY4NzUgTCA0LjEyNSAtOC4yOTY4NzUgTCA0LjEyNSAtNy4yMDMxMjUgTCAyLjcxMDkzOCAtNy4yMDMxMjUgTCAyLjcxMDkzOCAtMi4zNTE1NjMgQyAyLjcwNzAzMSAtMS45NDUzMTMgMi43MzA0NjkgLTEuNjg3NSAyLjc4NTE1NiAtMS41NzgxMjUgQyAyLjgzMjAzMSAtMS40NjA5MzggMi45MTQwNjMgLTEuMzcxMDk0IDMuMDI3MzQ0IC0xLjMwNDY4OCBDIDMuMTM2NzE5IC0xLjIzNDM3NSAzLjI5Njg3NSAtMS4xOTkyMTkgMy41MDc4MTMgLTEuMjAzMTI1IEMgMy42NjAxNTYgLTEuMTk5MjE5IDMuODY3MTg4IC0xLjIxODc1IDQuMTI1IC0xLjI1NzgxMyBaIE0gNC4xMjUgLTEuMjU3ODEzICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC0xIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAxLjA1NDY4OCAwIEwgMS4wNTQ2ODggLTExLjQ1MzEyNSBMIDIuNDYwOTM4IC0xMS40NTMxMjUgTCAyLjQ2MDkzOCAtNy4zNDM3NSBDIDMuMTE3MTg4IC04LjEwMTU2MyAzLjk0NTMxMyAtOC40ODQzNzUgNC45NDUzMTMgLTguNDg0Mzc1IEMgNS41NTg1OTQgLTguNDg0Mzc1IDYuMDg5ODQ0IC04LjM2MzI4MSA2LjU0Njg3NSAtOC4xMjEwOTQgQyA2Ljk5NjA5NCAtNy44Nzg5MDYgNy4zMjAzMTMgLTcuNTQyOTY5IDcuNTE5NTMxIC03LjExNzE4OCBDIDcuNzEwOTM4IC02LjY4NzUgNy44MDg1OTQgLTYuMDY2NDA2IDcuODEyNSAtNS4yNTc4MTMgTCA3LjgxMjUgMCBMIDYuNDA2MjUgMCBMIDYuNDA2MjUgLTUuMjU3ODEzIEMgNi40MDIzNDQgLTUuOTU3MDMxIDYuMjUgLTYuNDY4NzUgNS45NDkyMTkgLTYuNzkyOTY5IEMgNS42NDA2MjUgLTcuMTA5Mzc1IDUuMjEwOTM4IC03LjI2OTUzMSA0LjY1NjI1IC03LjI3MzQzOCBDIDQuMjM4MjgxIC03LjI2OTUzMSAzLjg0NzY1NiAtNy4xNjQwNjMgMy40ODA0NjkgLTYuOTQ5MjE5IEMgMy4xMTMyODEgLTYuNzMwNDY5IDIuODUxNTYzIC02LjQzNzUgMi42OTUzMTMgLTYuMDcwMzEzIEMgMi41MzkwNjMgLTUuNjk5MjE5IDIuNDYwOTM4IC01LjE4NzUgMi40NjA5MzggLTQuNTM5MDYzIEwgMi40NjA5MzggMCBaIE0gMS4wNTQ2ODggMCAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMiI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gOC4wNTQ2ODggLTEuMzUxNTYzIEwgOC4wNTQ2ODggMCBMIDAuNDg0Mzc1IDAgQyAwLjQ3MjY1NiAtMC4zMzU5MzggMC41MjczNDQgLTAuNjYwMTU2IDAuNjQ4NDM4IC0wLjk3NjU2MyBDIDAuODM5ODQ0IC0xLjQ4ODI4MSAxLjE0ODQzOCAtMS45OTYwOTQgMS41NzQyMTkgLTIuNSBDIDEuOTk2MDk0IC0yLjk5NjA5NCAyLjYwOTM3NSAtMy41NzQyMTkgMy40MTQwNjMgLTQuMjM0Mzc1IEMgNC42NTYyNSAtNS4yNTM5MDYgNS40OTYwOTQgLTYuMDYyNSA1LjkzNzUgLTYuNjYwMTU2IEMgNi4zNzEwOTQgLTcuMjUzOTA2IDYuNTg5ODQ0IC03LjgxNjQwNiA2LjU5Mzc1IC04LjM1MTU2MyBDIDYuNTg5ODQ0IC04LjkwNjI1IDYuMzkwNjI1IC05LjM3ODkwNiA1Ljk5NjA5NCAtOS43NjE3MTkgQyA1LjU5Mzc1IC0xMC4xNDQ1MzEgNS4wNzQyMTkgLTEwLjMzNTkzOCA0LjQzNzUgLTEwLjMzNTkzOCBDIDMuNzU3ODEzIC0xMC4zMzU5MzggMy4yMTg3NSAtMTAuMTMyODEzIDIuODEyNSAtOS43MjY1NjMgQyAyLjQwNjI1IC05LjMyMDMxMyAyLjE5OTIxOSAtOC43NTc4MTMgMi4xOTUzMTMgLTguMDM5MDYzIEwgMC43NSAtOC4xODc1IEMgMC44NDc2NTYgLTkuMjYxNzE5IDEuMjE4NzUgLTEwLjA4NTkzOCAxLjg2NzE4OCAtMTAuNjUyMzQ0IEMgMi41MTE3MTkgLTExLjIxNDg0NCAzLjM3ODkwNiAtMTEuNDk2MDk0IDQuNDY4NzUgLTExLjUgQyA1LjU2NjQwNiAtMTEuNDk2MDk0IDYuNDM3NSAtMTEuMTkxNDA2IDcuMDc4MTI1IC0xMC41ODU5MzggQyA3LjcxODc1IC05Ljk3MjY1NiA4LjAzOTA2MyAtOS4yMTg3NSA4LjAzOTA2MyAtOC4zMjAzMTMgQyA4LjAzOTA2MyAtNy44NTkzNzUgNy45NDUzMTMgLTcuNDA2MjUgNy43NTc4MTMgLTYuOTY4NzUgQyA3LjU3MDMxMyAtNi41MjM0MzggNy4yNTc4MTMgLTYuMDU4NTk0IDYuODI0MjE5IC01LjU3MDMxMyBDIDYuMzg2NzE5IC01LjA3ODEyNSA1LjY2NDA2MyAtNC40MDYyNSA0LjY1NjI1IC0zLjU1NDY4OCBDIDMuODA4NTk0IC0yLjg0Mzc1IDMuMjY1NjI1IC0yLjM2MzI4MSAzLjAzMTI1IC0yLjExMzI4MSBDIDIuNzg5MDYzIC0xLjg1OTM3NSAyLjU5Mzc1IC0xLjYwNTQ2OSAyLjQzNzUgLTEuMzUxNTYzIFogTSA4LjA1NDY4OCAtMS4zNTE1NjMgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgwLTMiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDAuOTkyMTg4IDMuMTk1MzEzIEwgMC44MzU5MzggMS44NzUgQyAxLjE0MDYyNSAxLjk1NzAzMSAxLjQxMDE1NiAxLjk5NjA5NCAxLjY0MDYyNSAyIEMgMS45NTMxMjUgMS45OTYwOTQgMi4yMDMxMjUgMS45NDUzMTMgMi4zOTA2MjUgMS44NDM3NSBDIDIuNTc4MTI1IDEuNzM4MjgxIDIuNzMwNDY5IDEuNTkzNzUgMi44NTE1NjMgMS40MDYyNSBDIDIuOTM3NSAxLjI2NTYyNSAzLjA4MjAzMSAwLjkxNDA2MyAzLjI4MTI1IDAuMzU5Mzc1IEMgMy4zMDQ2ODggMC4yNzczNDQgMy4zNDM3NSAwLjE2NDA2MyAzLjQwNjI1IDAuMDE1NjI1IEwgMC4yNTc4MTMgLTguMjk2ODc1IEwgMS43NzM0MzggLTguMjk2ODc1IEwgMy41IC0zLjQ5MjE4OCBDIDMuNzE4NzUgLTIuODgyODEzIDMuOTIxODc1IC0yLjI0MjE4OCA0LjEwMTU2MyAtMS41NzAzMTMgQyA0LjI2MTcxOSAtMi4yMTQ4NDQgNC40NTMxMjUgLTIuODQzNzUgNC42Nzk2ODggLTMuNDYwOTM4IEwgNi40NTMxMjUgLTguMjk2ODc1IEwgNy44NTkzNzUgLTguMjk2ODc1IEwgNC43MDMxMjUgMC4xNDA2MjUgQyA0LjM2MzI4MSAxLjA1MDc4MSA0LjEwMTU2MyAxLjY3NTc4MSAzLjkxNDA2MyAyLjAyMzQzOCBDIDMuNjY0MDYzIDIuNDg0Mzc1IDMuMzc1IDIuODI0MjE5IDMuMDU0Njg4IDMuMDQyOTY5IEMgMi43MjY1NjMgMy4yNTM5MDYgMi4zNDM3NSAzLjM2MzI4MSAxLjg5ODQzOCAzLjM2NzE4OCBDIDEuNjI1IDMuMzYzMjgxIDEuMzIwMzEzIDMuMzA0Njg4IDAuOTkyMTg4IDMuMTk1MzEzIFogTSAwLjk5MjE4OCAzLjE5NTMxMyAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtNCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMS4wNjI1IDAgTCAxLjA2MjUgLTExLjQ1MzEyNSBMIDIuNDY4NzUgLTExLjQ1MzEyNSBMIDIuNDY4NzUgLTQuOTIxODc1IEwgNS43OTY4NzUgLTguMjk2ODc1IEwgNy42MTcxODggLTguMjk2ODc1IEwgNC40NDUzMTMgLTUuMjE4NzUgTCA3LjkzNzUgMCBMIDYuMjAzMTI1IDAgTCAzLjQ2MDkzOCAtNC4yNDIxODggTCAyLjQ2ODc1IC0zLjI4OTA2MyBMIDIuNDY4NzUgMCBaIE0gMS4wNjI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgwLTUiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDMuNzQyMTg4IDMuMzY3MTg4IEMgMi45NjQ4NDQgMi4zODY3MTkgMi4zMDg1OTQgMS4yNDIxODggMS43NzM0MzggLTAuMDcwMzEyNSBDIDEuMjM0Mzc1IC0xLjM4MjgxMyAwLjk2NDg0NCAtMi43NDIxODggMC45Njg3NSAtNC4xNDg0MzggQyAwLjk2NDg0NCAtNS4zODY3MTkgMS4xNjc5NjkgLTYuNTc0MjE5IDEuNTcwMzEzIC03LjcxMDkzOCBDIDIuMDM5MDYzIC05LjAyNzM0NCAyLjc2MTcxOSAtMTAuMzM5ODQ0IDMuNzQyMTg4IC0xMS42NDg0MzggTCA0Ljc1IC0xMS42NDg0MzggQyA0LjExNzE4OCAtMTAuNTYyNSAzLjY5OTIxOSAtOS43ODkwNjMgMy41IC05LjMyODEyNSBDIDMuMTc5Njg4IC04LjYwOTM3NSAyLjkyOTY4OCAtNy44NTkzNzUgMi43NSAtNy4wNzgxMjUgQyAyLjUyMzQzOCAtNi4xMDE1NjMgMi40MTQwNjMgLTUuMTIxMDk0IDIuNDE0MDYzIC00LjE0MDYyNSBDIDIuNDE0MDYzIC0xLjYzMjgxMyAzLjE5MTQwNiAwLjg2NzE4OCA0Ljc1IDMuMzY3MTg4IFogTSAzLjc0MjE4OCAzLjM2NzE4OCAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtNiI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMS45NzY1NjMgMy4zNjcxODggTCAwLjk2ODc1IDMuMzY3MTg4IEMgMi41MjM0MzggMC44NjcxODggMy4zMDQ2ODggLTEuNjMyODEzIDMuMzA0Njg4IC00LjE0MDYyNSBDIDMuMzA0Njg4IC01LjExNzE4OCAzLjE5MTQwNiAtNi4wODk4NDQgMi45Njg3NSAtNy4wNTQ2ODggQyAyLjc4OTA2MyAtNy44MzU5MzggMi41NDI5NjkgLTguNTg1OTM4IDIuMjI2NTYzIC05LjMwNDY4OCBDIDIuMDIzNDM4IC05Ljc3MzQzOCAxLjYwMTU2MyAtMTAuNTU0Njg4IDAuOTY4NzUgLTExLjY0ODQzOCBMIDEuOTc2NTYzIC0xMS42NDg0MzggQyAyLjk1MzEyNSAtMTAuMzM5ODQ0IDMuNjc5Njg4IC05LjAyNzM0NCA0LjE0ODQzOCAtNy43MTA5MzggQyA0LjU0Njg3NSAtNi41NzQyMTkgNC43NDYwOTQgLTUuMzg2NzE5IDQuNzUgLTQuMTQ4NDM4IEMgNC43NDYwOTQgLTIuNzQyMTg4IDQuNDc2NTYzIC0xLjM4MjgxMyAzLjk0MTQwNiAtMC4wNzAzMTI1IEMgMy4zOTg0MzggMS4yNDIxODggMi43NDIxODggMi4zODY3MTkgMS45NzY1NjMgMy4zNjcxODggWiBNIDEuOTc2NTYzIDMuMzY3MTg4ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC03Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAxLjQyMTg3NSAwIEwgMS40MjE4NzUgLTEuNjAxNTYzIEwgMy4wMjM0MzggLTEuNjAxNTYzIEwgMy4wMjM0MzggMCBDIDMuMDIzNDM4IDAuNTg1OTM4IDIuOTE3OTY5IDEuMDU4NTk0IDIuNzEwOTM4IDEuNDI1NzgxIEMgMi41IDEuNzg1MTU2IDIuMTY3OTY5IDIuMDY2NDA2IDEuNzE4NzUgMi4yNjU2MjUgTCAxLjMyODEyNSAxLjY2NDA2MyBDIDEuNjIxMDk0IDEuNTMxMjUgMS44Mzk4NDQgMS4zMzk4NDQgMS45ODQzNzUgMS4wODk4NDQgQyAyLjEyMTA5NCAwLjgzNTkzOCAyLjE5OTIxOSAwLjQ3MjY1NiAyLjIxODc1IDAgWiBNIDEuNDIxODc1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgwLTgiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSIiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDEtMCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMC40NjQ4NDQgLTMuOTUzMTI1IEMgMC40NjA5MzggLTQuODk4NDM4IDAuNTU4NTk0IC01LjY2MDE1NiAwLjc1NzgxMyAtNi4yNDIxODggQyAwLjk0OTIxOSAtNi44MTY0MDYgMS4yMzgyODEgLTcuMjYxNzE5IDEuNjI1IC03LjU3ODEyNSBDIDIuMDA3ODEzIC03Ljg5MDYyNSAyLjQ5MjE4OCAtOC4wNTA3ODEgMy4wNzgxMjUgLTguMDUwNzgxIEMgMy41MDM5MDYgLTguMDUwNzgxIDMuODgyODEzIC03Ljk2MDkzOCA0LjIxMDkzOCAtNy43ODkwNjMgQyA0LjUzNTE1NiAtNy42MTMyODEgNC44MDQ2ODggLTcuMzYzMjgxIDUuMDE1NjI1IC03LjAzOTA2MyBDIDUuMjI2NTYzIC02LjcxMDkzOCA1LjM5MDYyNSAtNi4zMTY0MDYgNS41MTE3MTkgLTUuODQ3NjU2IEMgNS42Mjg5MDYgLTUuMzc4OTA2IDUuNjg3NSAtNC43NDYwOTQgNS42OTE0MDYgLTMuOTUzMTI1IEMgNS42ODc1IC0zLjAxMTcxOSA1LjU5Mzc1IC0yLjI1MzkwNiA1LjQwMjM0NCAtMS42NzU3ODEgQyA1LjIwNzAzMSAtMS4wOTc2NTYgNC45MTc5NjkgLTAuNjQ4NDM4IDQuNTM1MTU2IC0wLjMzNTkzOCBDIDQuMTUyMzQ0IC0wLjAxOTUzMTMgMy42NjQwNjMgMC4xMzI4MTMgMy4wNzgxMjUgMC4xMzY3MTkgQyAyLjMwMDc4MSAwLjEzMjgxMyAxLjY5NTMxMyAtMC4xNDA2MjUgMS4yNTc4MTMgLTAuNjk1MzEzIEMgMC43MjY1NjMgLTEuMzU5Mzc1IDAuNDYwOTM4IC0yLjQ0NTMxMyAwLjQ2NDg0NCAtMy45NTMxMjUgWiBNIDEuNDc2NTYzIC0zLjk1MzEyNSBDIDEuNDc2NTYzIC0yLjYzNjcxOSAxLjYyODkwNiAtMS43NjE3MTkgMS45Mzc1IC0xLjMyNDIxOSBDIDIuMjQ2MDk0IC0wLjg4NjcxOSAyLjYyNSAtMC42Njc5NjkgMy4wNzgxMjUgLTAuNjcxODc1IEMgMy41MjczNDQgLTAuNjY3OTY5IDMuOTEwMTU2IC0wLjg4NjcxOSA0LjIxODc1IC0xLjMyODEyNSBDIDQuNTIzNDM4IC0xLjc2MTcxOSA0LjY3NTc4MSAtMi42MzY3MTkgNC42Nzk2ODggLTMuOTUzMTI1IEMgNC42NzU3ODEgLTUuMjY5NTMxIDQuNTIzNDM4IC02LjE0NDUzMSA0LjIxODc1IC02LjU4MjAzMSBDIDMuOTEwMTU2IC03LjAxMTcxOSAzLjUyMzQzOCAtNy4yMzA0NjkgMy4wNjY0MDYgLTcuMjM0Mzc1IEMgMi42MTMyODEgLTcuMjMwNDY5IDIuMjUzOTA2IC03LjAzOTA2MyAxLjk4NDM3NSAtNi42NjAxNTYgQyAxLjY0NDUzMSAtNi4xNzE4NzUgMS40NzY1NjMgLTUuMjY5NTMxIDEuNDc2NTYzIC0zLjk1MzEyNSBaIE0gMS40NzY1NjMgLTMuOTUzMTI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0xIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA0LjE3MTg3NSAwIEwgMy4xODc1IDAgTCAzLjE4NzUgLTYuMjczNDM4IEMgMi45NDkyMTkgLTYuMDQyOTY5IDIuNjM2NzE5IC01LjgxNjQwNiAyLjI1MzkwNiAtNS41OTM3NSBDIDEuODY3MTg4IC01LjM2MzI4MSAxLjUyMzQzOCAtNS4xOTUzMTMgMS4yMTg3NSAtNS4wODU5MzggTCAxLjIxODc1IC02LjAzOTA2MyBDIDEuNzY5NTMxIC02LjI5Mjk2OSAyLjI1IC02LjYwNTQ2OSAyLjY2NDA2MyAtNi45NzY1NjMgQyAzLjA3NDIxOSAtNy4zNDM3NSAzLjM2NzE4OCAtNy43MDMxMjUgMy41MzkwNjMgLTguMDUwNzgxIEwgNC4xNzE4NzUgLTguMDUwNzgxIFogTSA0LjE3MTg3NSAwICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0yIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA1LjYzNjcxOSAtMC45NDUzMTMgTCA1LjYzNjcxOSAwIEwgMC4zMzk4NDQgMCBDIDAuMzMyMDMxIC0wLjIzNDM3NSAwLjM2NzE4OCAtMC40NjA5MzggMC40NTMxMjUgLTAuNjgzNTk0IEMgMC41ODU5MzggLTEuMDQyOTY5IDAuODA0Njg4IC0xLjM5ODQzOCAxLjEwMTU2MyAtMS43NSBDIDEuMzk4NDM4IC0yLjA5NzY1NiAxLjgyODEyNSAtMi41MDM5MDYgMi4zOTA2MjUgLTIuOTY0ODQ0IEMgMy4yNTc4MTMgLTMuNjc1NzgxIDMuODQzNzUgLTQuMjM4MjgxIDQuMTU2MjUgLTQuNjYwMTU2IEMgNC40NjA5MzggLTUuMDc0MjE5IDQuNjE3MTg4IC01LjQ3MjY1NiA0LjYxNzE4OCAtNS44NDc2NTYgQyA0LjYxNzE4OCAtNi4yMzQzNzUgNC40NzY1NjMgLTYuNTYyNSA0LjE5NTMxMyAtNi44MzIwMzEgQyAzLjkxNDA2MyAtNy4wOTc2NTYgMy41NTA3ODEgLTcuMjMwNDY5IDMuMTA1NDY5IC03LjIzNDM3NSBDIDIuNjI4OTA2IC03LjIzMDQ2OSAyLjI1IC03LjA4OTg0NCAxLjk2ODc1IC02LjgwODU5NCBDIDEuNjgzNTk0IC02LjUyMzQzOCAxLjUzOTA2MyAtNi4xMjg5MDYgMS41MzUxNTYgLTUuNjI4OTA2IEwgMC41MjM0MzggLTUuNzMwNDY5IEMgMC41ODk4NDQgLTYuNDg0Mzc1IDAuODUxNTYzIC03LjA1ODU5NCAxLjMwNDY4OCAtNy40NTcwMzEgQyAxLjc1MzkwNiAtNy44NTE1NjMgMi4zNjMyODEgLTguMDUwNzgxIDMuMTI4OTA2IC04LjA1MDc4MSBDIDMuODk0NTMxIC04LjA1MDc4MSA0LjUgLTcuODM1OTM4IDQuOTUzMTI1IC03LjQxMDE1NiBDIDUuMzk4NDM4IC02Ljk4MDQ2OSA1LjYyNSAtNi40NTMxMjUgNS42Mjg5MDYgLTUuODI0MjE5IEMgNS42MjUgLTUuNTAzOTA2IDUuNTU4NTk0IC01LjE4NzUgNS40Mjk2ODggLTQuODc4OTA2IEMgNS4yOTY4NzUgLTQuNTY2NDA2IDUuMDc4MTI1IC00LjIzODI4MSA0Ljc3NzM0NCAtMy44OTg0MzggQyA0LjQ2ODc1IC0zLjU1NDY4OCAzLjk2NDg0NCAtMy4wODU5MzggMy4yNTc4MTMgLTIuNDg4MjgxIEMgMi42Njc5NjkgLTEuOTkyMTg4IDIuMjg5MDYzIC0xLjY1NjI1IDIuMTIxMDk0IC0xLjQ4MDQ2OSBDIDEuOTUzMTI1IC0xLjMwMDc4MSAxLjgxMjUgLTEuMTIxMDk0IDEuNzA3MDMxIC0wLjk0NTMxMyBaIE0gNS42MzY3MTkgLTAuOTQ1MzEzICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0zIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAwLjQ2ODc1IC0yLjExNzE4OCBMIDEuNDUzMTI1IC0yLjI0NjA5NCBDIDEuNTY2NDA2IC0xLjY4MzU5NCAxLjc1NzgxMyAtMS4yODEyNSAyLjAzMTI1IC0xLjAzOTA2MyBDIDIuMzAwNzgxIC0wLjc4OTA2MyAyLjYzMjgxMyAtMC42Njc5NjkgMy4wMjM0MzggLTAuNjcxODc1IEMgMy40ODQzNzUgLTAuNjY3OTY5IDMuODc1IC0wLjgyODEyNSA0LjE5NTMxMyAtMS4xNTIzNDQgQyA0LjUxNTYyNSAtMS40NzI2NTYgNC42NzU3ODEgLTEuODcxMDk0IDQuNjc1NzgxIC0yLjM0NzY1NiBDIDQuNjc1NzgxIC0yLjc5Njg3NSA0LjUyNzM0NCAtMy4xNjc5NjkgNC4yMzA0NjkgLTMuNDY0ODQ0IEMgMy45MzM1OTQgLTMuNzUzOTA2IDMuNTU4NTk0IC0zLjkwMjM0NCAzLjEwNTQ2OSAtMy45MDYyNSBDIDIuOTE3OTY5IC0zLjkwMjM0NCAyLjY4MzU5NCAtMy44NjcxODggMi40MTAxNTYgLTMuNzk2ODc1IEwgMi41MTk1MzEgLTQuNjYwMTU2IEMgMi41ODU5MzggLTQuNjQ4NDM4IDIuNjM2NzE5IC00LjY0NDUzMSAyLjY3OTY4OCAtNC42NDg0MzggQyAzLjA5Mzc1IC00LjY0NDUzMSAzLjQ3MjY1NiAtNC43NTM5MDYgMy44MTI1IC00Ljk3NjU2MyBDIDQuMTQ0NTMxIC01LjE5MTQwNiA0LjMxMjUgLTUuNTMxMjUgNC4zMTY0MDYgLTUuOTg4MjgxIEMgNC4zMTI1IC02LjM0NzY1NiA0LjE5MTQwNiAtNi42NDQ1MzEgMy45NDkyMTkgLTYuODg2NzE5IEMgMy43MDMxMjUgLTcuMTIxMDk0IDMuMzg2NzE5IC03LjI0MjE4OCAzLjAwMzkwNiAtNy4yNDIxODggQyAyLjYxNzE4OCAtNy4yNDIxODggMi4yOTY4NzUgLTcuMTIxMDk0IDIuMDQ2ODc1IC02Ljg3ODkwNiBDIDEuNzg5MDYzIC02LjYzNjcxOSAxLjYyNSAtNi4yNzM0MzggMS41NTQ2ODggLTUuNzk2ODc1IEwgMC41NzAzMTMgLTUuOTcyNjU2IEMgMC42ODc1IC02LjYyODkwNiAwLjk2MDkzOCAtNy4xNDA2MjUgMS4zODY3MTkgLTcuNTAzOTA2IEMgMS44MTI1IC03Ljg2NzE4OCAyLjM0Mzc1IC04LjA1MDc4MSAyLjk4MDQ2OSAtOC4wNTA3ODEgQyAzLjQxNDA2MyAtOC4wNTA3ODEgMy44MTY0MDYgLTcuOTU3MDMxIDQuMTg3NSAtNy43Njk1MzEgQyA0LjU1NDY4OCAtNy41ODIwMzEgNC44MzU5MzggLTcuMzI0MjE5IDUuMDM1MTU2IC03IEMgNS4yMjY1NjMgLTYuNjcxODc1IDUuMzI0MjE5IC02LjMyODEyNSA1LjMyODEyNSAtNS45NjQ4NDQgQyA1LjMyNDIxOSAtNS42MTcxODggNS4yMzA0NjkgLTUuMzAwNzgxIDUuMDQ2ODc1IC01LjAxOTUzMSBDIDQuODU5Mzc1IC00LjczNDM3NSA0LjU4NTkzOCAtNC41MDc4MTMgNC4yMjI2NTYgLTQuMzQzNzUgQyA0LjY5NTMxMyAtNC4yMzA0NjkgNS4wNjI1IC00LjAwMzkwNiA1LjMyNDIxOSAtMy42NjAxNTYgQyA1LjU4NTkzOCAtMy4zMTI1IDUuNzE4NzUgLTIuODgyODEzIDUuNzE4NzUgLTIuMzY3MTg4IEMgNS43MTg3NSAtMS42NjQwNjMgNS40NjA5MzggLTEuMDcwMzEzIDQuOTUzMTI1IC0wLjU4NTkzOCBDIDQuNDM3NSAtMC4xMDE1NjMgMy43OTI5NjkgMC4xNDA2MjUgMy4wMTk1MzEgMC4xNDA2MjUgQyAyLjMxMjUgMC4xNDA2MjUgMS43MzA0NjkgLTAuMDY2NDA2MyAxLjI2NTYyNSAtMC40ODgyODEgQyAwLjgwMDc4MSAtMC45MDIzNDQgMC41MzUxNTYgLTEuNDQ1MzEzIDAuNDY4NzUgLTIuMTE3MTg4IFogTSAwLjQ2ODc1IC0yLjExNzE4OCAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDEtNCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMy42MjEwOTQgMCBMIDMuNjIxMDk0IC0xLjkxNzk2OSBMIDAuMTQwNjI1IC0xLjkxNzk2OSBMIDAuMTQwNjI1IC0yLjgyMDMxMyBMIDMuODAwNzgxIC04LjAxNTYyNSBMIDQuNjA1NDY5IC04LjAxNTYyNSBMIDQuNjA1NDY5IC0yLjgyMDMxMyBMIDUuNjg3NSAtMi44MjAzMTMgTCA1LjY4NzUgLTEuOTE3OTY5IEwgNC42MDU0NjkgLTEuOTE3OTY5IEwgNC42MDU0NjkgMCBaIE0gMy42MjEwOTQgLTIuODIwMzEzIEwgMy42MjEwOTQgLTYuNDM3NSBMIDEuMTA5Mzc1IC0yLjgyMDMxMyBaIE0gMy42MjEwOTQgLTIuODIwMzEzICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMi0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA0LjAxNTYyNSAtOC4yMDMxMjUgTCA0Ljc4MTI1IC04LjIwMzEyNSBMIDQuNzgxMjUgLTQuNDY4NzUgTCA4LjQ5MjE4OCAtNC40Njg3NSBMIDguNDkyMTg4IC0zLjcxMDkzOCBMIDQuNzgxMjUgLTMuNzEwOTM4IEwgNC43ODEyNSAwIEwgNC4wMTU2MjUgMCBMIDQuMDE1NjI1IC0zLjcxMDkzOCBMIDAuMjg5MDYzIC0zLjcxMDkzOCBMIDAuMjg5MDYzIC00LjQ2ODc1IEwgNC4wMTU2MjUgLTQuNDY4NzUgWiBNIDQuMDE1NjI1IC04LjIwMzEyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDMtMCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gNi4yMTA5MzggMy44OTg0MzggTCA2LjIxMDkzOCA0LjMxNjQwNiBDIDQuNTExNzE5IDMuNDY4NzUgMy4xODc1IDIuMjI2NTYzIDIuMjQyMTg4IDAuNTg5ODQ0IEMgMS4yOTI5NjkgLTEuMDQ2ODc1IDAuODIwMzEzIC0yLjgzNTkzOCAwLjgyMDMxMyAtNC43ODUxNTYgQyAwLjgyMDMxMyAtNi44MDQ2ODggMS4zMTY0MDYgLTguNjQ4NDM4IDIuMzEyNSAtMTAuMzE2NDA2IEMgMy4zMDg1OTQgLTExLjk3NjU2MyA0LjYwOTM3NSAtMTMuMTY3OTY5IDYuMjEwOTM4IC0xMy44ODY3MTkgTCA2LjIxMDkzOCAtMTMuNDc2NTYzIEMgNS40MDYyNSAtMTMuMDMxMjUgNC43NDYwOTQgLTEyLjQyNTc4MSA0LjIzODI4MSAtMTEuNjYwMTU2IEMgMy43MjI2NTYgLTEwLjg5MDYyNSAzLjMzOTg0NCAtOS45MTQwNjMgMy4wODU5MzggLTguNzM0Mzc1IEMgMi44MjgxMjUgLTcuNTUwNzgxIDIuNjk5MjE5IC02LjMyMDMxMyAyLjcwMzEyNSAtNS4wMzkwNjMgQyAyLjY5OTIxOSAtMy41ODU5MzggMi44MTY0MDYgLTIuMjczNDM4IDMuMDU0Njg4IC0xLjEwMTU2MyBDIDMuMjg1MTU2IDAuMDcwMzEyNSAzLjY0NDUzMSAxLjAzOTA2MyA0LjEyODkwNiAxLjgxMjUgQyA0LjYwOTM3NSAyLjU3ODEyNSA1LjMwNDY4OCAzLjI3MzQzOCA2LjIxMDkzOCAzLjg5ODQzOCBaIE0gNi4yMTA5MzggMy44OTg0MzggIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgzLTEiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDAuNDM3NSAtMTMuNDc2NTYzIEwgMC40Mzc1IC0xMy44ODY3MTkgQyAyLjEzNjcxOSAtMTMuMDQyOTY5IDMuNDYwOTM4IC0xMS44MDA3ODEgNC40MDYyNSAtMTAuMTY3OTY5IEMgNS4zNTE1NjMgLTguNTI3MzQ0IDUuODI0MjE5IC02LjczODI4MSA1LjgyODEyNSAtNC43OTY4NzUgQyA1LjgyNDIxOSAtMi43Njk1MzEgNS4zMjgxMjUgLTAuOTI1NzgxIDQuMzM1OTM4IDAuNzQyMTg4IEMgMy4zMzk4NDQgMi40MDYyNSAyLjAzOTA2MyAzLjU5NzY1NiAwLjQzNzUgNC4zMTY0MDYgTCAwLjQzNzUgMy44OTg0MzggQyAxLjI0MjE4OCAzLjQ1MzEyNSAxLjkwMjM0NCAyLjg0NzY1NiAyLjQyMTg3NSAyLjA4MjAzMSBDIDIuOTMzNTk0IDEuMzA4NTk0IDMuMzE2NDA2IDAuMzM5ODQ0IDMuNTcwMzEzIC0wLjgzOTg0NCBDIDMuODE2NDA2IC0yLjAxNTYyNSAzLjk0MTQwNiAtMy4yNSAzLjk0NTMxMyAtNC41MzkwNjMgQyAzLjk0MTQwNiAtNS45ODQzNzUgMy44MjgxMjUgLTcuMjk2ODc1IDMuNTk3NjU2IC04LjQ3MjY1NiBDIDMuMzYzMjgxIC05LjY0NDUzMSAzLjAwMzkwNiAtMTAuNjE3MTg4IDIuNTIzNDM4IC0xMS4zOTA2MjUgQyAyLjAzNTE1NiAtMTIuMTYwMTU2IDEuMzM5ODQ0IC0xMi44NTU0NjkgMC40Mzc1IC0xMy40NzY1NjMgWiBNIDAuNDM3NSAtMTMuNDc2NTYzICIvPgo8L3N5bWJvbD4KPC9nPgo8Y2xpcFBhdGggaWQ9ImNsaXAxIj4KICA8cGF0aCBkPSJNIDIxLjEyMTA5NCAyMS4xMjEwOTQgTCA0ODMuODgyODEzIDIxLjEyMTA5NCBMIDQ4My44ODI4MTMgNDgzLjg4MjgxMyBMIDIxLjEyMTA5NCA0ODMuODgyODEzIFogTSAyMS4xMjEwOTQgMjEuMTIxMDk0ICIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+CjxnIGlkPSJzdXJmYWNlNjEiPgo8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgc3R5bGU9ImZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTsiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAxKSIgY2xpcC1ydWxlPSJub256ZXJvIj4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDEwOS40ODA0NjkgMzM5LjQ1MzEyNSBMIDExMy4wNDI5NjkgMzM3Ljk4NDM3NSBMIDExNi42MDU0NjkgMzM2LjQ5NjA5NCBMIDEyMC4xNzE4NzUgMzM0Ljk4MDQ2OSBMIDEyMy43MzQzNzUgMzMzLjQ0NTMxMyBMIDEyNy4yOTY4NzUgMzMxLjg4NjcxOSBMIDEzMC44NTkzNzUgMzMwLjMwMDc4MSBMIDEzNC40MjE4NzUgMzI4LjY5NTMxMyBMIDEzNy45ODQzNzUgMzI3LjA1ODU5NCBMIDE0MS41NDY4NzUgMzI1LjQwMjM0NCBMIDE0NS4xMDkzNzUgMzIzLjcxNDg0NCBMIDE0OC42NzU3ODEgMzIyLjAwMzkwNiBMIDE1Mi4yMzgyODEgMzIwLjI2NTYyNSBMIDE1NS44MDA3ODEgMzE4LjQ5NjA5NCBMIDE1OS4zNjMyODEgMzE2LjY5OTIxOSBMIDE2Mi45MjU3ODEgMzE0Ljg3MTA5NCBMIDE2Ni40ODgyODEgMzEzLjAxMTcxOSBMIDE3MC4wNTA3ODEgMzExLjEyMTA5NCBMIDE3My42MTMyODEgMzA5LjE5OTIxOSBMIDE3Ny4xNzk2ODggMzA3LjI0MjE4OCBMIDE4MC43NDIxODggMzA1LjI1IEwgMTg0LjMwNDY4OCAzMDMuMjIyNjU2IEwgMTg3Ljg2NzE4OCAzMDEuMTU2MjUgTCAxOTEuNDI5Njg4IDI5OS4wNTA3ODEgTCAxOTQuOTkyMTg4IDI5Ni45MDYyNSBMIDE5OC41NTQ2ODggMjk0LjcyMjY1NiBMIDIwMi4xMTcxODggMjkyLjQ5NjA5NCBMIDIwNS42Nzk2ODggMjkwLjIyNjU2MyBMIDIwOS4yNDYwOTQgMjg3LjkxMDE1NiBMIDIxMi44MDg1OTQgMjg1LjU0Njg3NSBMIDIxNi4zNzEwOTQgMjgzLjEzNjcxOSBMIDIxOS45MzM1OTQgMjgwLjY3NTc4MSBMIDIyMy40OTYwOTQgMjc4LjE2NDA2MyBMIDIyNy4wNTg1OTQgMjc1LjYwMTU2MyBMIDIzMC42MjEwOTQgMjcyLjk4MDQ2OSBMIDIzNC4xODM1OTQgMjcwLjMwNDY4OCBMIDIzNy43NSAyNjcuNTcwMzEzIEwgMjQxLjMxMjUgMjY0Ljc3MzQzOCBMIDI0NC44NzUgMjYxLjkxNDA2MyBMIDI0OC40Mzc1IDI1OC45OTIxODggTCAyNTIgMjU2IEwgMjU1LjU2MjUgMjUyLjk0MTQwNiBMIDI1OS4xMjUgMjQ5LjgxMjUgTCAyNjIuNjg3NSAyNDYuNjA1NDY5IEwgMjY2LjI1IDI0My4zMjgxMjUgTCAyNjkuODE2NDA2IDIzOS45Njg3NSBMIDI3My4zNzg5MDYgMjM2LjUzMTI1IEwgMjc2Ljk0MTQwNiAyMzMuMDA3ODEzIEwgMjgwLjUwMzkwNiAyMjkuMzk4NDM4IEwgMjg0LjA2NjQwNiAyMjUuNzAzMTI1IEwgMjg3LjYyODkwNiAyMjEuOTE0MDYzIEwgMjkxLjE5MTQwNiAyMTguMDMxMjUgTCAyOTQuNzUzOTA2IDIxNC4wNTA3ODEgTCAyOTguMzIwMzEzIDIwOS45Njg3NSBMIDMwMS44ODI4MTMgMjA1Ljc4NTE1NiBMIDMwNS40NDUzMTMgMjAxLjQ5MjE4OCBMIDMwOS4wMDc4MTMgMTk3LjA4OTg0NCBMIDMxMi41NzAzMTMgMTkyLjU3ODEyNSBMIDMxNi4xMzI4MTMgMTg3Ljk0NTMxMyBMIDMxOS42OTUzMTMgMTgzLjE5NTMxMyBMIDMyMy4yNTc4MTMgMTc4LjMyNDIxOSBMIDMyNi44MjAzMTMgMTczLjMyMDMxMyBMIDMzMC4zODY3MTkgMTY4LjE4NzUgTCAzMzMuOTQ5MjE5IDE2Mi45MjE4NzUgTCAzMzcuNTExNzE5IDE1Ny41MTU2MjUgTCAzNDEuMDc0MjE5IDE1MS45Njg3NSBMIDM0NC42MzY3MTkgMTQ2LjI3MzQzOCBMIDM0OC4xOTkyMTkgMTQwLjQyNTc4MSBMIDM1MS43NjE3MTkgMTM0LjQyNTc4MSBMIDM1NS4zMjQyMTkgMTI4LjI2NTYyNSBMIDM1OC44OTA2MjUgMTIxLjk0MTQwNiBMIDM2Mi40NTMxMjUgMTE1LjQ0OTIxOSBMIDM2Ni4wMTU2MjUgMTA4Ljc4NTE1NiBMIDM2OS41NzgxMjUgMTAxLjk0MTQwNiBMIDM3My4xNDA2MjUgOTQuOTE0MDYzIEwgMzc2LjcwMzEyNSA4Ny42OTkyMTkgTCAzODAuMjY1NjI1IDgwLjI5Mjk2OSBMIDM4My44MjgxMjUgNzIuNjkxNDA2IEwgMzg3LjM5NDUzMSA2NC44ODI4MTMgTCAzOTAuOTU3MDMxIDU2Ljg2NzE4OCBMIDM5NC41MTk1MzEgNDguNjM2NzE5IEwgMzk4LjA4MjAzMSA0MC4xODc1IEwgNDAxLjY0NDUzMSAzMS41MTE3MTkgTCA0MDUuMjA3MDMxIDIyLjYwOTM3NSBMIDQwOC43Njk1MzEgMTMuNDY0ODQ0IEwgNDEyLjMzMjAzMSA0LjA3ODEyNSBMIDQxMy44NDM3NSAwICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA4NS43MjY1NjMgNDM2LjYyNSBMIDQ2NS43NzczNDQgNDM2LjYyNSAiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNDU4LjQ4MDQ2OSA0MzIuNjE3MTg4IEwgNDYxLjYwOTM3NSA0MzQuMzIwMzEzIEwgNDY1LjE3NTc4MSA0MzUuNTg1OTM4IEwgNDY5LjA0Njg3NSA0MzYuMzYzMjgxIEwgNDczLjA3NDIxOSA0MzYuNjI1IEwgNDY5LjA0Njg3NSA0MzYuODkwNjI1IEwgNDY1LjE3NTc4MSA0MzcuNjY3OTY5IEwgNDYxLjYwOTM3NSA0MzguOTMzNTk0IEwgNDU4LjQ4MDQ2OSA0NDAuNjM2NzE5IEwgNDU4LjgxNjQwNiA0NDAuNTM1MTU2IEwgNDU5LjEzNjcxOSA0NDAuMjM4MjgxIEwgNDU5LjQyNTc4MSA0MzkuNzYxNzE5IEwgNDU5LjY2NDA2MyA0MzkuMTI1IEwgNDU5Ljg0Mzc1IDQzOC4zNjcxODggTCA0NTkuOTUzMTI1IDQzNy41MTk1MzEgTCA0NTkuOTkyMTg4IDQzNi42MjUgTCA0NTkuOTUzMTI1IDQzNS43MzQzNzUgTCA0NTkuODQzNzUgNDM0Ljg4NjcxOSBMIDQ1OS42NjQwNjMgNDM0LjEyNSBMIDQ1OS40MjU3ODEgNDMzLjQ5MjE4OCBMIDQ1OS4xMzY3MTkgNDMzLjAxMTcxOSBMIDQ1OC44MTY0MDYgNDMyLjcxNDg0NCBaIE0gNDU4LjQ4MDQ2OSA0MzIuNjE3MTg4ICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMDkuNDgwNDY5IDQ0Ni4zNDM3NSBMIDEwOS40ODA0NjkgMzguMjIyNjU2ICIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMDUuNDcyNjU2IDQ1LjUxOTUzMSBMIDEwNy4xNzU3ODEgNDIuMzkwNjI1IEwgMTA4LjQzNzUgMzguODI0MjE5IEwgMTA5LjIxODc1IDM0Ljk1MzEyNSBMIDEwOS40ODA0NjkgMzAuOTI1NzgxIEwgMTA5Ljc0NjA5NCAzNC45NTMxMjUgTCAxMTAuNTIzNDM4IDM4LjgyNDIxOSBMIDExMS43ODkwNjMgNDIuMzkwNjI1IEwgMTEzLjQ5MjE4OCA0NS41MTk1MzEgTCAxMTMuMzkwNjI1IDQ1LjE4MzU5NCBMIDExMy4wOTM3NSA0NC44NjMyODEgTCAxMTIuNjE3MTg4IDQ0LjU3NDIxOSBMIDExMS45ODA0NjkgNDQuMzM1OTM4IEwgMTExLjIyMjY1NiA0NC4xNTYyNSBMIDExMC4zNzUgNDQuMDQ2ODc1IEwgMTA5LjQ4MDQ2OSA0NC4wMDc4MTMgTCAxMDguNTg5ODQ0IDQ0LjA0Njg3NSBMIDEwNy43NDIxODggNDQuMTU2MjUgTCAxMDYuOTgwNDY5IDQ0LjMzNTkzOCBMIDEwNi4zNDc2NTYgNDQuNTc0MjE5IEwgMTA1Ljg2NzE4OCA0NC44NjMyODEgTCAxMDUuNTcwMzEzIDQ1LjE4MzU5NCBaIE0gMTA1LjQ3MjY1NiA0NS41MTk1MzEgIi8+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDEwOS40ODA0NjkgMzM5LjQ1MzEyNSBMIDEwOS40ODA0NjkgMzM5LjQ1MzEyNSAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTA5LjQ4MDQ2OSAzMzkuNDUzMTI1IEwgMjI4LjI0NjA5NCAyOTAuODY3MTg4ICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMDkuNDgwNDY5IDMzOS40NTMxMjUgTCAyMjguMjQ2MDk0IDI2MC41MDM5MDYgIi8+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDEwOS40ODA0NjkgMzM5LjQ1MzEyNSBMIDM0Ny4wMTE3MTkgMTUxLjE4MzU5NCAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTA5LjQ4MDQ2OSAzMzkuNDUzMTI1IEwgMzQ3LjAxMTcxOSAxNDQuMDk3NjU2ICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDQ5LjgwMzkyMiUsNDkuODAzOTIyJSw0OS44MDM5MjIlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6MywzO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyMjguMjQ2MDk0IDQzNi42MjUgTCAyMjguMjQ2MDk0IDI2MC41MDM5MDYgIi8+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoNDkuODAzOTIyJSw0OS44MDM5MjIlLDQ5LjgwMzkyMiUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTozLDM7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDM0Ny4wMTE3MTkgNDM2LjYyNSBMIDM0Ny4wMTE3MTkgMTUxLjE4MzU5NCAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYig0OS44MDM5MjIlLDQ5LjgwMzkyMiUsNDkuODAzOTIyJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5OjMsMztzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTA5LjQ4MDQ2OSAyOTAuODY3MTg4IEwgMjI4LjI0NjA5NCAyOTAuODY3MTg4ICIvPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDQ5LjgwMzkyMiUsNDkuODAzOTIyJSw0OS44MDM5MjIlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6MywzO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMDkuNDgwNDY5IDI2MC41MDM5MDYgTCAyMjguMjQ2MDk0IDI2MC41MDM5MDYgIi8+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoNDkuODAzOTIyJSw0OS44MDM5MjIlLDQ5LjgwMzkyMiUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTozLDM7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDEwOS40ODA0NjkgMTUxLjE4MzU5NCBMIDM0Ny4wMTE3MTkgMTUxLjE4MzU5NCAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDEwOS40ODA0NjkgMzM5LjQ1MzEyNSBMIDE2OC44NjMyODEgMzE1LjE2MDE1NiAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIyOC4yNDYwOTQgMjkwLjg2NzE4OCBMIDI4Ny42Mjg5MDYgMjUxLjM5NDUzMSAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIyOC4yNDYwOTQgMjYwLjUwMzkwNiBMIDI4Ny42Mjg5MDYgMjEzLjQzMzU5NCAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDM0Ny4wMTE3MTkgMTUxLjE4MzU5NCBMIDQwNi4zOTQ1MzEgNTUuNTMxMjUgIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE2MC41OTM3NSAzMTQuMjEwOTM4IEwgMTY0LjEzMjgxMyAzMTQuNjA1NDY5IEwgMTY3LjkxNDA2MyAzMTQuNDI1NzgxIEwgMTcxLjc5Mjk2OSAzMTMuNjc5Njg4IEwgMTc1LjYxNzE4OCAzMTIuMzk4NDM4IEwgMTcxLjk5MjE4OCAzMTQuMTY3OTY5IEwgMTY4LjcwMzEyNSAzMTYuMzU1NDY5IEwgMTY1Ljg3ODkwNiAzMTguODc1IEwgMTYzLjYyODkwNiAzMjEuNjM2NzE5IEwgMTYzLjkwMjM0NCAzMjEuNDE0MDYzIEwgMTY0LjA4NTkzOCAzMjEuMDE5NTMxIEwgMTY0LjE3MTg3NSAzMjAuNDY4NzUgTCAxNjQuMTUyMzQ0IDMxOS43ODkwNjMgTCAxNjQuMDMxMjUgMzE5LjAxOTUzMSBMIDE2My44MTI1IDMxOC4xOTE0MDYgTCAxNjMuNTExNzE5IDMxNy4zNTE1NjMgTCAxNjMuMTM2NzE5IDMxNi41MzkwNjMgTCAxNjIuNzEwOTM4IDMxNS43OTY4NzUgTCAxNjIuMjU3ODEzIDMxNS4xNjQwNjMgTCAxNjEuNzk2ODc1IDMxNC42NjQwNjMgTCAxNjEuMzUxNTYzIDMxNC4zMzIwMzEgTCAxNjAuOTQxNDA2IDMxNC4xNzk2ODggWiBNIDE2MC41OTM3NSAzMTQuMjEwOTM4ICIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYig4MC4zOTIxNTclLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyNzkuMzMyMDMxIDI1Mi4wOTM3NSBMIDI4Mi44Nzg5MDYgMjUxLjc3NzM0NCBMIDI4Ni41NTA3ODEgMjUwLjg1OTM3NSBMIDI5MC4yMDcwMzEgMjQ5LjM2MzI4MSBMIDI5My43MDcwMzEgMjQ3LjM1NTQ2OSBMIDI5MC41IDI0OS44MDA3ODEgTCAyODcuNzA3MDMxIDI1Mi41OTM3NSBMIDI4NS40MzM1OTQgMjU1LjYyMTA5NCBMIDI4My43NzM0MzggMjU4Ljc2OTUzMSBMIDI4NCAyNTguNSBMIDI4NC4xMDE1NjMgMjU4LjA3ODEyNSBMIDI4NC4wNzQyMTkgMjU3LjUxOTUzMSBMIDI4My45MjE4NzUgMjU2Ljg1OTM3NSBMIDI4My42NTIzNDQgMjU2LjEyODkwNiBMIDI4My4yNzM0MzggMjU1LjM1OTM3NSBMIDI4Mi44MTI1IDI1NC41OTM3NSBMIDI4Mi4yODUxNTYgMjUzLjg3NSBMIDI4MS43MjI2NTYgMjUzLjIzMDQ2OSBMIDI4MS4xNTIzNDQgMjUyLjY5NTMxMyBMIDI4MC42MDE1NjMgMjUyLjMwMDc4MSBMIDI4MC4wOTc2NTYgMjUyLjA1ODU5NCBMIDI3OS42Njc5NjkgMjUxLjk4ODI4MSBaIE0gMjc5LjMzMjAzMSAyNTIuMDkzNzUgIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI3OS40MjE4NzUgMjE0LjgyNDIxOSBMIDI4Mi45Mjk2ODggMjE0LjIxNDg0NCBMIDI4Ni41MTE3MTkgMjEyLjk5MjE4OCBMIDI5MC4wMjczNDQgMjExLjE5OTIxOSBMIDI5My4zNDc2NTYgMjA4LjkwMjM0NCBMIDI5MC4zNTU0NjkgMjExLjYwOTM3NSBMIDI4Ny44MDQ2ODggMjE0LjYyNSBMIDI4NS43OTY4NzUgMjE3LjgzMjAzMSBMIDI4NC40MDIzNDQgMjIxLjEwOTM3NSBMIDI4NC42MDU0NjkgMjIwLjgyMDMxMyBMIDI4NC42Njc5NjkgMjIwLjM5MDYyNSBMIDI4NC41OTc2NTYgMjE5LjgzOTg0NCBMIDI4NC4zOTA2MjUgMjE5LjE5MTQwNiBMIDI4NC4wNTg1OTQgMjE4LjQ4NDM3NSBMIDI4My42MjEwOTQgMjE3Ljc1IEwgMjgzLjA5NzY1NiAyMTcuMDI3MzQ0IEwgMjgyLjUxMTcxOSAyMTYuMzUxNTYzIEwgMjgxLjg5ODQzOCAyMTUuNzU3ODEzIEwgMjgxLjI4NTE1NiAyMTUuMjczNDM4IEwgMjgwLjcwMzEyNSAyMTQuOTI1NzgxIEwgMjgwLjE3OTY4OCAyMTQuNzI2NTYzIEwgMjc5Ljc0NjA5NCAyMTQuNjk1MzEzIFogTSAyNzkuNDIxODc1IDIxNC44MjQyMTkgIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDM5OS4xNDA2MjUgNTkuNjEzMjgxIEwgNDAyLjIzNDM3NSA1Ny44NTU0NjkgTCA0MDUuMTkxNDA2IDU1LjQ5MjE4OCBMIDQwNy44OTQ1MzEgNTIuNjEzMjgxIEwgNDEwLjI0MjE4OCA0OS4zMzIwMzEgTCA0MDguMzQzNzUgNTIuODkwNjI1IEwgNDA2Ljk2NDg0NCA1Ni41ODk4NDQgTCA0MDYuMTU2MjUgNjAuMjg5MDYzIEwgNDA1Ljk1MzEyNSA2My44NDM3NSBMIDQwNi4wNDY4NzUgNjMuNTA3ODEzIEwgNDA1Ljk2MDkzOCA2My4wNzgxMjUgTCA0MDUuNzA3MDMxIDYyLjU4MjAzMSBMIDQwNS4yOTI5NjkgNjIuMDQyOTY5IEwgNDA0Ljc0MjE4OCA2MS40OTIxODggTCA0MDQuMDgyMDMxIDYwLjk0OTIxOSBMIDQwMy4zNDM3NSA2MC40NDUzMTMgTCA0MDIuNTY2NDA2IDYwLjAwNzgxMyBMIDQwMS43ODUxNTYgNTkuNjU2MjUgTCA0MDEuMDQ2ODc1IDU5LjQwNjI1IEwgNDAwLjM3ODkwNiA1OS4yNzczNDQgTCAzOTkuODI0MjE5IDU5LjI2NTYyNSBMIDM5OS40MDIzNDQgNTkuMzgyODEzIFogTSAzOTkuMTQwNjI1IDU5LjYxMzI4MSAiLz4KPHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gMTEzLjA4MjAzMSAzMzkuNDUzMTI1IEMgMTEzLjA4MjAzMSAzNDQuMjUzOTA2IDEwNS44ODI4MTMgMzQ0LjI1MzkwNiAxMDUuODgyODEzIDMzOS40NTMxMjUgQyAxMDUuODgyODEzIDMzNC42NTYyNSAxMTMuMDgyMDMxIDMzNC42NTYyNSAxMTMuMDgyMDMxIDMzOS40NTMxMjUgIi8+CjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDIzMS44NDc2NTYgMjkwLjg2NzE4OCBDIDIzMS44NDc2NTYgMjk1LjY2Nzk2OSAyMjQuNjQ4NDM4IDI5NS42Njc5NjkgMjI0LjY0ODQzOCAyOTAuODY3MTg4IEMgMjI0LjY0ODQzOCAyODYuMDcwMzEzIDIzMS44NDc2NTYgMjg2LjA3MDMxMyAyMzEuODQ3NjU2IDI5MC44NjcxODggIi8+CjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDIzMS44NDc2NTYgMjYwLjUwMzkwNiBDIDIzMS44NDc2NTYgMjY1LjMwMDc4MSAyMjQuNjQ4NDM4IDI2NS4zMDA3ODEgMjI0LjY0ODQzOCAyNjAuNTAzOTA2IEMgMjI0LjY0ODQzOCAyNTUuNzAzMTI1IDIzMS44NDc2NTYgMjU1LjcwMzEyNSAyMzEuODQ3NjU2IDI2MC41MDM5MDYgIi8+CjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDM1MC42MTMyODEgMTUxLjE4MzU5NCBDIDM1MC42MTMyODEgMTU1Ljk4NDM3NSAzNDMuNDE0MDYzIDE1NS45ODQzNzUgMzQzLjQxNDA2MyAxNTEuMTgzNTk0IEMgMzQzLjQxNDA2MyAxNDYuMzgyODEzIDM1MC42MTMyODEgMTQ2LjM4MjgxMyAzNTAuNjEzMjgxIDE1MS4xODM1OTQgIi8+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMCIgeD0iMTA0LjE0NDUzMSIgeT0iNDY0Ljc2NTYyNSIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMCIgeD0iMTA4LjU4OTg0NCIgeT0iNDY3LjY2Nzk2OSIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMCIgeD0iMjAyLjUxMTcxOSIgeT0iNDY2Ljk0MTQwNiIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMCIgeD0iMjA2Ljk1NzAzMSIgeT0iNDY5Ljg0NzY1NiIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMCIgeD0iMjE2LjE0ODQzOCIgeT0iNDY2Ljk0MTQwNiIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIgeD0iMjI3Ljg5MDYyNSIgeT0iNDY2Ljk0MTQwNiIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIzOC44NjMyODEgNDY5LjI5Njg3NSBMIDI0My4wMTE3MTkgNDUzLjEzMjgxMyAiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0yIiB4PSIyNDUuMDg1OTM4IiB5PSI0NjYuOTQxNDA2Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0wIiB4PSIzMjkuODc1IiB5PSI0NjQuOTgwNDY5Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0wIiB4PSIzMzQuMzIwMzEzIiB5PSI0NjcuODgyODEzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi0wIiB4PSIzNDMuNTA3ODEzIiB5PSI0NjQuOTgwNDY5Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0xIiB4PSIzNTUuMjUzOTA2IiB5PSI0NjQuOTgwNDY5Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0zIiB4PSI4NS42NTIzNDQiIHk9IjMzOS45NzY1NjMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTAiIHg9IjkzLjY1MjM0NCIgeT0iMzQyLjg3ODkwNiIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMyIgeD0iMzAuNjI1IiB5PSIyOTMuMjI2NTYzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0wIiB4PSIzOC42MjUiIHk9IjI5Ni4xMjg5MDYiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTAiIHg9IjQ3LjgxNjQwNiIgeT0iMjkzLjIyNjU2MyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIgeD0iNTkuNTU4NTk0IiB5PSIyOTMuMjI2NTYzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC00IiB4PSI2OC40NTcwMzEiIHk9IjI5My4yMjY1NjMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9Ijc2LjQ1NzAzMSIgeT0iMjk2LjEyODkwNiIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDg0Ljc2MTcxOSAyOTUuNTgyMDMxIEwgODguOTEwMTU2IDI3OS40MTc5NjkgIi8+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMiIgeD0iOTAuOTg0Mzc1IiB5PSIyOTMuMjI2NTYzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0zIiB4PSIzMC42MjUiIHk9IjI2Mi44NTkzNzUiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTAiIHg9IjM4LjYyNSIgeT0iMjY1Ljc2NTYyNSIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMCIgeD0iNDcuODE2NDA2IiB5PSIyNjIuODU5Mzc1Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0xIiB4PSI1OS41NTg1OTQiIHk9IjI2Mi44NTkzNzUiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTQiIHg9IjY4LjQ1NzAzMSIgeT0iMjYyLjg1OTM3NSIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMiIgeD0iNzYuNDU3MDMxIiB5PSIyNjUuNzY1NjI1Ii8+CjwvZz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gODQuNzYxNzE5IDI2NS4yMTQ4NDQgTCA4OC45MTAxNTYgMjQ5LjA1MDc4MSAiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0yIiB4PSI5MC45ODQzNzUiIHk9IjI2Mi44NTkzNzUiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTMiIHg9IjQ3LjgyMDMxMyIgeT0iMTUyLjc1NzgxMyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMCIgeD0iNTUuODIwMzEzIiB5PSIxNTUuNjYwMTU2Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi0wIiB4PSI2NS4wMTE3MTkiIHk9IjE1Mi43NTc4MTMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTEiIHg9Ijc2Ljc1MzkwNiIgeT0iMTUyLjc1NzgxMyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNCIgeD0iODUuNjUyMzQ0IiB5PSIxNTIuNzU3ODEzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0zIiB4PSI5My42NTIzNDQiIHk9IjE1NS42NjAxNTYiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNCIgeD0iMTI2LjEyMTA5NCIgeT0iMzQ4LjM5ODQzOCIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0xIiB4PSIxMzQuMTIxMDk0IiB5PSIzNTEuMzAwNzgxIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTQiIHg9IjI1Mi4wMTE3MTkiIHk9IjI5MC4wOTM3NSIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0yIiB4PSIyNjAuMDExNzE5IiB5PSIyOTMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNCIgeD0iMjQyLjUxMTcxOSIgeT0iMjMxLjMzNTkzOCIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYig4MC4zOTIxNTclLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0zIiB4PSIyNTAuNTExNzE5IiB5PSIyMzQuMjQyMTg4Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDgwLjM5MjE1NyUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTQiIHg9IjM3NS41MjczNDQiIHk9IjEyMS4yNTc4MTMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoODAuMzkyMTU3JSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNCIgeD0iMzgzLjUyNzM0NCIgeT0iMTI0LjE2NDA2MyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0zIiB4PSIzNjEuODE2NDA2IiB5PSI1Mi40NTMxMjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNSIgeD0iMzY5LjgxNjQwNiIgeT0iNTIuNDUzMTI1Ii8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTAiIHg9IjM3NS4xNDQ1MzEiIHk9IjUyLjQ1MzEyNSIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC02IiB4PSIzNzkuNTg5ODQ0IiB5PSI1Mi40NTMxMjUiLz4KPC9nPgo8cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDU0LjUwOTgwNCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDM0My40MTQwNjMgMTQ3LjY5OTIxOSBMIDM1MC42MTMyODEgMTQwLjUgIi8+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsNTQuNTA5ODA0JSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzQzLjQxNDA2MyAxNDAuNSBMIDM1MC42MTMyODEgMTQ3LjY5OTIxOSAiLz4KPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MC43NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSw1NC41MDk4MDQlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzNDEuOTIxODc1IDE0NC4wOTc2NTYgTCAzNTIuMTAxNTYzIDE0NC4wOTc2NTYgIi8+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsNTQuNTA5ODA0JSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzQ3LjAxMTcxOSAxNDkuMTkxNDA2IEwgMzQ3LjAxMTcxOSAxMzkuMDA3ODEzICIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsNTQuNTA5ODA0JSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtMCIgeD0iMjkwLjI5Njg3NSIgeT0iMTM2LjEzMjgxMyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSw1NC41MDk4MDQlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0wIiB4PSIyOTYuOTU3MDMxIiB5PSIxMzYuMTMyODEzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDU0LjUwOTgwNCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjMwMS40MDIzNDQiIHk9IjEzOS4wMzUxNTYiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsNTQuNTA5ODA0JSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNyIgeD0iMzA3LjYzMjgxMyIgeT0iMTM2LjEzMjgxMyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC04IiB4PSIzMTIuMDc4MTI1IiB5PSIxMzYuMTMyODEzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDU0LjUwOTgwNCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTMiIHg9IjMxNi41MjM0MzgiIHk9IjEzNi4xMzI4MTMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsNTQuNTA5ODA0JSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMSIgeD0iMzI0LjUyMzQzOCIgeT0iMTM5LjAzNTE1NiIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSw1NC41MDk4MDQlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMy0xIiB4PSIzMzAuNzUzOTA2IiB5PSIxMzYuMTMyODEzIi8+CjwvZz4KPC9nPgo8L2c+Cjwvc3ZnPgo=)
Adaptive time stepping methods#
It is not uncommon for systems to have a combination of fast transients with otherwise slow behaviour. In general, we won’t know when the transient occurs, or even it’s rate of change!
E.g.: The system \(y(t) = \tanh(\frac{t-5}{0.1})-t\) has a slow decrease with a sharp bump. If the time step is small, the bump will be resolved, but it will take a long time for the quasi-linear parts. If the step is too large, the bump may be missed entirely!
import numpy as np
import matplotlib.pyplot as plt
# Create a range of t values
t = np.linspace(0, 10, 100)
# Plot the function
plt.plot(t, np.tanh((t-5)/.1) - t)
plt.xlabel('t')
plt.ylabel('y(t)')
plt.grid(True)
plt.show()
Adaptive time steppers automatically adjust their step size based on an estimate of the error.
If your timestep has an error \(E_{current}\) with stepsize \(h_{current}\), and you are aiming for an error tolerance \(E_{goal}\) then you can update your step size with a formula like:
where \(\alpha\) is some user value (0.2 is a good choice).
There are remaining quesitons though:
Would you reject the time step if \(E_{current} \gt E_{tolerance}\) and repeat with a new timestep?
Would you have a meta analysis of the solver method to ‘catch’ non-convergent cases?
There are a few methods to capture the error. Naturally, you don’t want the error calculation to be overly burdomsome.
Change step-size
Change integration order
Directly compare \(y_i\) to \(y_{i+1}\) or other properties of the solution.
Step-halving methods#
Step-halving methods compare the results of a full step to two half steps. For RK4, the error is calculated as:
for this RK4 scheme, one could correct higher accuracy estimate with $\(y_{double \ step}^* = y_{double \ step} + \frac{E}{15}\)$
Example: Integrate $\(y^\prime = 4 e^{0.8x}-0.5y\)\( with \)y(0) = 2\( from \)x = 0\ to\ 2$. The analytic answer is 14.84392.
# prompt: solve above with RK4
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
"""The differential equation."""
return 4 * np.exp(0.8 * x) - 0.5 * y
def rk4_step(f, x, y, h):
"""Takes a single RK4 step."""
k1 = h * f(x, y)
k2 = h * f(x + h/2, y + k1/2)
k3 = h * f(x + h/2, y + k2/2)
k4 = h * f(x + h, y + k3)
return y + (k1 + 2*k2 + 2*k3 + k4) / 6
# Initial conditions
x0 = 0
y0 = 2
x_end = 2
h_initial = 2
y_onestep = rk4_step(f, x0, y0, 2)
print('One stpe with h=2 ', y_onestep)
y_t = rk4_step(f, x0, y0, 1)
y_twostep = rk4_step(f, x0+1, y_t, 1)
print('Two steps with h=1 ', y_twostep)
print('Approximate error is ', (y_twostep - y_onestep)/15, ' vs true error, ', 14.84392 - y_twostep)
One stpe with h=2 15.105846327501714
Two steps with h=1 14.8624835881192
Approximate error is -0.016224182625500915 vs true error, -0.018563588119199892
Note that to calculate this value we had to evaluate \(f(x,y)\) 8 times.
Runge-Kutta Fehlberg#
Another approach is to compare different integration orders over the same step. This is made efficient by reusing function calls between the two approximations.
where the doubling of the last line means:
The error is then simply \(y_{i+1}^{(5)} - y_{i+1}^{(4)}\)
This is the method of choice for packaged tools. E.g.:
# prompt: solve 4 * np.exp(0.8 * x) - 0.5 * y with scipy , step size 2 and output the error
import numpy as np
from scipy.integrate import solve_ivp
def f(x, y):
"""The differential equation."""
return 4 * np.exp(0.8 * x) - 0.5 * y
# Initial conditions
x0 = 0
y0 = 2
x_end = 2
# Solve the differential equation using solve_ivp
sol = solve_ivp(f, (x0, x_end), [y0], method='RK45')
print(sol)
# Extract the solution
y_numerical = sol.y[0][-1]
# Analytical solution (you might need to calculate this beforehand)
y_analytical = 14.84392
# Calculate the error
error = abs(y_numerical - y_analytical)
print(f"Numerical solution: {y_numerical}")
print(f"Error: {error}")
message: The solver successfully reached the end of the integration interval.
success: True
status: 0
t: [ 0.000e+00 9.222e-02 1.014e+00 2.000e+00]
y: [[ 2.000e+00 2.284e+00 6.279e+00 1.484e+01]]
sol: None
t_events: None
y_events: None
nfev: 20
njev: 0
nlu: 0
Numerical solution: 14.844062517715555
Error: 0.00014251771555429116
Direct comparison#
A less elegant, but sometimes more pragmatic method is use other metrics to control the step size.
Following a time step, the rate of change can be calculated,
$\(\frac{dy}{dt} = \frac{y_{i+1}-y_i}{h}\)\(
from which a control on \)|\frac{dy}{dt}|\( can be placed. E.g.: one could require that the Euclidian or \)\infty$ norm be below a tolerance. This method controls the change in solution, rather than its error.
An even more brute-force method may be to observe the efficiency of the solver. We konw that nonlinear root finding with Newton’s method converges quadratically near the root. By monitoring the Newton iterations at each timestep, one can assess if the solver is converging quadratically, or is taking too many iterations which may mean the new time step is too far from the previous one.