{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 04 - Full Waveform Inversion with Devito and Dask" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, we will build on the [previous](https://github.com/devitocodes/devito/blob/master/examples/seismic/tutorials/03_fwi.ipynb) FWI tutorial and implement parallel versions of both forward modeling and FWI objective functions. Furthermore, we will show how our parallel FWI function can be passed to black-box third party optimization libraries, such as SciPy's [optimize](https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html) package, to access sophisticated optimization algorithms without having to implement them from scratch!\n", "\n", "To implement parallel versions of forward modeling and FWI, we will use [Dask](https://dask.pydata.org/en/latest/#dask), a Python library for distributed computing based on parallel data structures and task-based programming. As computing multiple seismic shot records or gradients for subsequent source locations is an embarassingly parallel process, we will use Dask to dynamically distribute our workload to a pool of available workers and afterwards collect the results.\n", "\n", "The first part of this tutorial closely follows [tutorial 3](https://github.com/devitocodes/devito/blob/master/examples/seismic/tutorials/03_fwi.ipynb) and consists of reading the velocity model and setting up the acquisition geometry. Subsequently, we will implement serial versions of forward modeling and FWI objective functions and then show how we can use Dask to implement parallel versions of these functions. Finally, we will show how to write a wrapper that lets us pass our objective function to scipy's optimize package and how to run a small 2D FWI example using a limited-memory Quasi-Newton method." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## GPU Aware Dask" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The default method to start a Dask Cluster is LocalCluster(...). This method enables CPU worker threads, but it shares one GPU for all workers. To enable Dask to use multi-GPU, or a GPU per Dask worker, the method to start a Dask Cluster needs to be changed to LocalCUDACluster. This Dask modification is pulled from the Rapids.ai open source project.\n", "\n", "Reference: https://github.com/rapidsai/dask-cuda" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "USE_GPU_AWARE_DASK = False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up velocity models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As before, we start by reading the true (i.e. unknown) velocity model, as well as the starting model for FWI. For our example, we once again use the 2D Camembert model with a transmission acquisition set up, which involves having sources on one side of the model and receivers on the other side.\n", "\n", "In reality, we obvisouly cannot know what the true velocity is, but here we use the true model to generate our own data (inverse crime alert!) and to compare it to our FWI result." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Operator `initdamp` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `initdamp` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n" ] } ], "source": [ "from examples.seismic import demo_model\n", "\n", "# Set up velocity model\n", "shape = (101, 101) # Number of grid points (nx, nz).\n", "spacing = (10., 10.) # Grid spacing in m. The domain size is now 1km by 1km.\n", "origin = (0, 0) # Need origin to define relative source and receiver locations.\n", "nbl = 40\n", "\n", "# True model\n", "model1 = demo_model('circle-isotropic', vp_circle=3.0, vp_background=2.5,\n", " origin=origin, shape=shape, spacing=spacing, nbl=nbl)\n", "\n", "# Initial model\n", "model0 = demo_model('circle-isotropic', vp_circle=2.5, vp_background=2.5,\n", " origin=origin, shape=shape, spacing=spacing, nbl=nbl, grid = model1.grid)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Acquisition geometry" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the acquisition geometry, we use the same setup as in tutorial 3 and position 5 source position on one side of the model, and an array of 101 receivers on the other side. Note that now our source coordinate array (`src_coordinates`) is a 5 x 2 array, containing the shot locations of all 5 source experiments. After defining the source/receiver coordinates, we set up individual geometry objects for both the observed data (using `model`) and the predicted data (using `model0`)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from examples.seismic import AcquisitionGeometry\n", "import numpy as np\n", "\n", "# Set up acquisiton geometry\n", "t0 = 0.\n", "tn = 1000. \n", "f0 = 0.010\n", "\n", "# Set up source geometry, but define 5 sources instead of just one.\n", "nsources = 5\n", "src_coordinates = np.empty((nsources, 2))\n", "src_coordinates[:, 1] = np.linspace(0, model1.domain_size[0], num=nsources)\n", "src_coordinates[:, 0] = 20. # Source depth is 20m\n", "\n", "# Initialize receivers for synthetic and imaging data\n", "nreceivers = 101\n", "rec_coordinates = np.empty((nreceivers, 2))\n", "rec_coordinates[:, 1] = np.linspace(spacing[0], model1.domain_size[0] - spacing[0], num=nreceivers)\n", "rec_coordinates[:, 0] = 980. # Receiver depth\n", "# Set up geometry objects for observed and predicted data\n", "geometry1 = AcquisitionGeometry(model1, rec_coordinates, src_coordinates, t0, tn, f0=f0, src_type='Ricker')\n", "geometry0 = AcquisitionGeometry(model0, rec_coordinates, src_coordinates, t0, tn, f0=f0, src_type='Ricker')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Forward modeling" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before diving into FWI, we will start with forward modeling and show how we can use Dask to implement a parallel wrapper around a serial modeling function to compute seismic shot records for multiple source locations in parallel.\n", "\n", "First, we implement a forward modeling function for a single shot, which takes a geometry data structure as the only mandatory input argument. This function assumes that the geometry structure only contains a *single* source location. To solve the wave equation for the current shot location and model as specified in `geometry`, we use the `AcousticSolver` from previous tutorials, which is an abstract layer built on top of (generic) Devito objects. `AcousticSolver` contains Devito implementations of forward and adjoint wave equations, as well as Jacobians as specified in tutorials 1 and 2, so we don't have to re-implement these PDEs here." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from examples.seismic.acoustic import AcousticWaveSolver\n", "\n", "# Serial modeling function\n", "def forward_modeling_single_shot(geometry, save=False, dt=4.0):\n", " solver = AcousticWaveSolver(geometry.model, geometry, space_order=4)\n", " d_obs, u0 = solver.forward(vp=geometry.model.vp, save=save)[0:2]\n", " return d_obs.resample(dt), u0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With our modeling function for a single shot record in place, we now implement our parallel version of our modeling function, which consists of a loop over all source locations. As the `geometry` object in `forward_modeling_single_shot` expects only a single source location, we set up a new geometry structure for the i-th source location to pass to our modeling function. However, rather than simpling calling the modeling function for single shots, we tell Dask to create a *task* for each source location and to distribute them to the available parallel workers. Dask returns a remote reference to the result on each worker called `future`. The `wait` statement tells our function to wait for all tasks to finish their computations, after which we collect the modeled shot records from the workers." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Parallel modeling function\n", "def forward_modeling_multi_shots(geometry, save=False, dt=4.0):\n", "\n", " futures = []\n", " for i in range(geometry.nsrc):\n", "\n", " # Geometry for current shot\n", " geometry_i = AcquisitionGeometry(geometry.model, geometry.rec_positions, geometry.src_positions[i,:], \n", " geometry.t0, geometry.tn, f0=geometry.f0, src_type=geometry.src_type)\n", " \n", " # Call serial modeling function for each index\n", " futures.append(client.submit(forward_modeling_single_shot, geometry_i, save=save, dt=dt))\n", "\n", " # Wait for all workers to finish and collect shots\n", " wait(futures)\n", " shots = []\n", " for i in range(geometry.nsrc):\n", " shots.append(futures[i].result()[0])\n", "\n", " return shots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use this parallel modeling function to generate our own observed data set, which we will subsequently use for our FWI example. In reality, we would instead read our observed data from a SEG-Y file. To compute the data in parallel, we launch a pool of workers on our local machine and then call the parallel modeling function:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [], "source": [ "from distributed import Client, wait\n", "\n", "# Start Dask cluster\n", "if USE_GPU_AWARE_DASK:\n", " from dask_cuda import LocalCUDACluster\n", " cluster = LocalCUDACluster(threads_per_worker=1, death_timeout=600) \n", "else:\n", " from distributed import LocalCluster\n", " cluster = LocalCluster(n_workers=nsources, death_timeout=600)\n", " \n", "client = Client(cluster)\n", "\n", "# Compute observed data in parallel (inverse crime). In real life we would read the SEG-Y data here.\n", "d_obs = forward_modeling_multi_shots(geometry1, save=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The variable `d_obs` is a list of the 5 shots records and we can plot one of the shot records as follows:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAckAAAGDCAYAAABA/Ot7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9e5QtV33f+dl9uk8/bt++3fcl6YKkKyFZ6DHmYYSJcQgmybJsEzEelickfuB4BchkbMfJZGIyJmQsMyt+DSbEToIYxo6BLHvG8UQ4mYBtwDjBgUHYwnAvL6GLJJCu7qNvvx+nH3v+OP2r+6tf76pT513nnP1dq1fvU1W7ateuXfu7v7/fb+9y3nsiIiIiIiIiDmOs3wWIiIiIiIgoKyJJRkREREREZCCSZERERERERAYiSUZERERERGQgkmREREREREQGIklGRERERERkoOck6Zy72Tn3O865ZefcinPud51ztxTMO+Wc+yXn3LPOuU3n3H91zr2q22WOiIiIiBhN9JQknXMzwMeAFwJvBH4YuBP4uHPuSIFTvA94E/B24LXAs8BHnHMv7k6JIyIiIiJGGa6Xiwk45/4e8E7gLu/94wfbbgO+Cvwj7/07c/K+CHgM+DHv/a8fbBsHzgFf9t4/2O3yR0RERESMFnptbn0Q+JQQJID3/gLwSeB1BfLuAL+t8u4CvwV8t3NusvPFjYiIiIgYZfSaJO8FvhDYfg64p0DeC977jUDeKnBH+8WLiIiIiIi4jl6T5HHgWmD7IrDQRl7ZHxERERER0TGM97sA3YZz7s3AmwEmJia+7eTJk30uUURERER5sLS0xMbGhgN44IEH/JUrV9o632c/+9mPeO8f6EjhSoBek+Q1wooxSyXavLdm5IXrijIF7/3DwMMAZ86c8W95y1uKlTQiIiJiBPCe97wnSV+5coXPfOYzbZ1vbGxsqJRIr82t56j7Fi3uAc4XyHvbwTQSm7cGPH44S3HET4YNFuLzSiPWR0REd9BrkvwQ8Arn3O2ywTl3Fnjlwb48/B4wAfyAyjsO/HXg97332+0UzDnXTvaIHiM+rzRifUR0Ct77tv6GDb0myfcCXwcecc69zjn3IPAI8DSQaH7n3K3OuV3n3Ntlm/f+z6hP/3iXc+5vO+f+MvXpH7cB/7SH9xARUQjD2GG0g1gfh1HGOokkmUZPSdJ7vw68BvgK8H7gg8AF4DXe+zV1qAMqgfL9LeDXgXcA/xG4GXjAe/+nXS56RETTiOoujVgfh1G2OmmXIIeRJHse3eq9fwp4fYNjvk6dKO32TeAfHPwNNbz3pXqB+l2efl+/XxjV+x4ExGczGhj6KSCDirK9fP0uT7+v3y+M6n23i3YIrGjeYX02w6gG20EkyYiIAoiqIY1e1Uer12mnbN0m13bR7etEkkwjkmRERAFEgkyjV/UxSPU+LHUSSTKNSJJtoNMjulFVK/24705ec1SfW0T30M/2GUkyjZ5/dHmY0OmOcVQ72n7cdyevOarPLaJ7iO2zPIhKsiQoOtrrhT9iWF+qVu6t08+lTPU7iGUWlLFMjdDN+u7UuYd1Gkc7iCRZEtiGm9WYu90xZJ2/351SJ67fzQCQTh/XCwximQVlLFMjdLO+O3nuSJJpRJIsKcrWCfS7PP2+fkTEqCCSZBqRJFtAv1XVsGKY63WY7y2iOZS9LUSSTGMkA3fabQTDFoJd9HrdLleeqbcIyvxyt9Nmynxfo4p2nkmZCTLiMEZSSbbbYfXLL9jv6/VronS3y1f2kX2ZyzaqKPszaXfFoYjrGEmSbAdlfzkGHYM+HSQiogxohyAjSaYxkiRZduXQawxLfZT5PvpVtjLXSRF0s/z9Wgyk7M8kkmQaI+mTHJXVJ6Tsje6hzC9sMyjzfbRbtqLP0uYZdJNbN6csOOears+865XJbRHROYykkmwGgzxxX87di0Cj+OJfRzfqo5Vn2UoZpOyD9DylrK3Ue6Pj9Tl79T71G2UZIJUFkST7iEYrX5TpZcwrzzB8+aCTKNN6vs3mH5Q6DqEbq9QM0jvaKUSSTCOSZEmhX74y+LP63Rn0+/r9Qj9WGRoVxLo9jBi4cxiRJPuIsn/cteh1h3VE3SoGuT5i2bt/zrIjkmQaIxm40wy62WB6tShBvxYBGFV0oz5aDdxpFtq/NyiQsrbqg82DtegUyRMxXBg5JTmKPppR8qsM2/0IehW404m8vUav7rMsroduIw4C0hg5khz2Bt4shq0+hu1+IiJ6jUiSaYwcSbaLYVUqZUE/6jc+04hhwzDMkS0LIkk2idiZdhdxWbqIiPYRl6XrHGLgTkmQ1zD71Wjjy1Icoboaxfprpx3H+sreFtE/RCVZEuSN/Mo+BSQiXFejWH/ttONYX9nbeolI0mlEJVlSlK2h9rs8/b5+RMSoQEyurf4VgXPuZufc7zjnlp1zK86533XO3dJsWZ1zb3XOeefcf2n6RgsikmRBFDUV6eN69WHWXhCILU+7C0M3a3rr1dJ3vUZZ596VrTx5KGtZ+9me2j1HN0nSOTcDfAx4IfBG4IeBO4GPO+eOFC2nc+524G3ApZZutCCiubUgipqK9HG9MpuUPdillbop+z11+pr9NrFZlK08eShrWUelDbeANwG3A3d57x8HcM79OfBV4C3AOwue518BHwTuootcFpVkG+j0SLGsI+JuY1BH3N04V0QE9Ld99sDc+iDwKSHIg2teAD4JvK7ICZxzfxN4KfCPm7q5FhBJsg0MyKit9Igj7u4hEng2RqVumnXd9IAk7wW+ENh+DrinwP0sAL8C/CPv/WLhm2sR0dxaIpRp+bg4wb44ylxP7XxrcVghdVHm+uhn2XoweDgOXAtsXwQWCuT/JeArwG90sEyZiCQ5IOj1S1PmDiSieYza88wbFDTzoeVRRAdI8qRz7lH1+2Hv/cPtnhTAOfcXgR8BXup7ZAqIJFlSlO1F7Xd5+n39fmFU77td9GLR8/hsMnHFe/+ynP3XCCvGLIWp8R7gfcA3nHPzB9vGgcrB703v/XazBc5DJMmSomwvX7/L0+/r9wujet+DgGF9Nj0QaOeo+yUt7gHON8h798Hf3wnsuwb8feBdbZXOIJJkRESXEJVGGrE+DqOMddIDkvwQ8MvOudu9908AOOfOAq8E3tog73cFtr0LqAA/ATwe2N8WIklGRHQJZev8+o1YH4dRtjppZtWcNvBe4MeBR5xzbwM88HPA09TNqQA4524FvgY85L1/6KB8f2RP5pxbAsZD+zqBOAUkIiIiIiJBt6eAeO/XgddQj1B9P/UFAS4Ar/Her6lDHXWF2FeeikoyIiIiIqKn8N4/Bby+wTFfp06Ujc716s6UKoxIkhERQ4wy+rzKglg3YYzKIgtFEUkyImKIEUkgG7FuwogkmUYkyQbox2izrCPcfpUr1kf71yxrHfYDg1SH/bpmxHXEwJ0GiOuKXscwffy5lUWfLQapbXS6rL3qSLtxnW7VYa/K2om2G1EcUUlGjCSa7SjLOnDpF4b5M3Ctoqx10soC5xHXMdIk2StTRj9NXWW8dqfLFE2J5UXes4nPLY2y1EckyTRGmiSbbZCtNuJ+NvxuXrtRffRqgekydCwRYbTSPkYVZamPSJJpjDRJNosyfKqq26PNZq7brXL0476zUJbRfURErxBJMo0YuFNStKrCBvW6jTBMQUMRERGDg6gke4BRVSP9UsMRw4NBaiuDVNY8RCWZRiTJDqGdj7wOK/LqY1g6lE4h1kcYg1Qng1TWLMTo1sOIJJmBdoJHhrnD69S9xQ/bpu+tV0FkEc2jnboexOcUSTKNSJIZ6MWXzQcRvb63WJedzxvRHEbtOUWSTCMG7kRERERERGSg5yTpnLvZOfc7zrll59yKc+53nXO3FMj3Mufcw865LznnNpxzTznnPuicu63ZMnRzpNTqufs5ehuWkeMg1mEvyjwsz7eTKHO99/t5dft7koOGnppbnXMzwMeAbeCN1L9I/Q7g4865bz34GGcW3gDcC7wbOAc8D/gnwKPOuRd7759uohwt3kH3zj2sCw70EoNYh70o87A8306izPXe7+c1jETXDnrtk3wTcDtwl/f+cQDn3J8DXwXeArwzJ+8veO8v6w3OuU9S/6L1m4C3t1OwuHxWcZRhOb/4TNIoc32Eylbm8vYDZamPYVWD7aDX5tYHgU8JQQJ47y8AnwRel5fREuTBtieBy9RVZVuIy2cVRxkWco7PJI0y10eobGUubz8Q66O86DVJ3gt8IbD9HHBPsydzzt0NnAa+2Ga5UhiFkdSw3+Ow3x+Mxj1G9B7RJ5lGr82tx4Frge2LwEIzJ3LOjQP/mrqSfF/7RUudu5OnKyWG/R6H/f5gNO4xovcYRqJrB4M8T/JXge8Avs97HyJeAJxzbwbeDHDs2LEeFa08KIuvIyIiYjAQSTKNXpPkNcKKMUthBuGc+3nqxPdG7/3v5x3rvX8YeBjgzJkzI/f0I0FGREQ0g0iSafTaJ3mOul/S4h7gfJETOOd+Bvhp4Ce99+/vYNkKITag7iLW72Cik89tGNrAMNxDRB29JskPAa9wzt0uG5xzZ4FXHuzLhXPuJ6nPq/wZ7/2vdqmMjcrQj8uODGL9DiY6+dyGoQ0M6j20G7QzjIODXpPke4GvA484517nnHsQeAR4GniPHOScu9U5t+uce7va9gbgXcCHgY85516h/pqOjM1Dvx90v6+fhX6Vq6z10W/EeonoBiJJptFTn6T3ft059xrgV4D3Aw74KPBT3vs1dagDKqRJ/IGD7Q8c/Gl8Anh1p8rZ71Fgv6+fhfjh43Ih1ktENzCMRNcOeh7d6r1/Cnh9g2O+Tp0Q9bYfBX60W+WKiIiIiIgkaRG/AjIEiI26M4j12D7aqcNY/+0j1mHnMcjzJCMO0Gh90zhXshhiHbWPUfv2YtnQiTqMRJtGJMkhRqtfvR9WxMFCGsNcH+3c2yjXy7AG37SDSJIRI4Nh7fhaxTDXR1S0YRS5t0iSaUSfZAuIjag7iPU6PGjmWcbnHlFmRCXZAoZ5pNlPxHodHjTzLONzLxfioCWNSJItYJh9Fv1ErNfhQTPPMj73ciGSZBqRJFtAfKG7g1ivw4OoJAcXkSTTiCQZMTKIiiWNYa6PGN0aRoxubR4xcGeIIY09Nvo6hrXjaxXDXB8xujWMYb63biEqySFGnCcZERHRLOKgOo1IkhERERERCSJJphFJMiIiIiIiQSTJNKJPMoB+N5J+Xz8L8XuS5UKsl4iI7iMqyQBCPrxeRryV1YeoF0vvdn3ExdkbI9ZLRDcQB19pRJIsCOmQRr3T7nYwkNRvDDoaLHTyvRiGd2xQ7yFOATmMSJJNYhAb/iAh1u9gopPPbRjawCDfQyTJNCJJRkREREQkiCSZRgzciYiIiIiIyEBUkgEMqj+hGQz7PQ77/cFo3GNE7xGVZBqRJAMYhY5n2O9x2O8PRuMeI3qPSJJpRJLsAdod8fdLMXSr3GVQQGUoQ0REL9DsZ8siSaYRSbIHaLcz7ldn3q1yl4GcylCGiIheoNm2HkkyjZEM3OlmI2j13P1smMPyUgxiHfaizMPyfDuJMtf7KDwv59zNzrnfcc4tO+dWnHO/65y7pUC+lznnHnbOfck5t+Gce8o590Hn3G3dKutIKslumj5bNS/2U9l0e2GAotsb7WuEQazDXpQ5qubDKHO99/t5dZuknXMzwMeAbeCNgAfeAXzcOfet3vv1nOxvAO4F3g2cA54H/BPgUefci733T3e6vCNJku2glQbc70bfL7Ribh3VuoqIKAt6oGTfBNwO3OW9fxzAOffnwFeBtwDvzMn7C977y3qDc+6TwIWD876904UdSXNrEbTTUIbZXNLre4t12fm8Ec1h1J6TBO+0+lcADwKfEoI8uOYF4JPA6xqU7XJg25PAZeqqsuOIJJmBdpzdw6yGOrk+Zy+vV0boe2u2Mx3meikb2qnr+JyCuBf4QmD7OeCeZk/mnLsbOA18sc1yBRHNrQr99oeN0rSEQZwSk4VOlGeY6gOan3bQDR91rzEMi7x3aArISefco+r3w977h9Xv48C1QL5FYKGZCznnxoF/TV1Jvq/ZghZBJEmFfr+M/b7+oKBs9dTv8vT7+iE0U6Zh8VEPyyLvHSDJK977l3WiLAXwq8B3AN/nvQ8Rb9uIJFlS9GsiflkXABjUBRUiIgYNPfCjXiOsGLMUZhDOuZ8H3gy80Xv/+x0q2yFEkiwprL8q7/uKrXbkoXzNXLeXaOb63aqPTqCVsg0iUXfK3FpWlPU5duIaPSDJc9T9khb3AOeLnMA59zPATwM/4b1/fwfLdggjHbjTq8izdq/TzhzLvGt3e+5m1rU7Xe/2fO34lfMi9tqN+ss7j76PvH36nlspa68gzyDvmrJv0AgSujMVrBPPZ0Dq8kPAK5xzt8sG59xZ4JUH+3LhnPtJ6vMqf8Z7/6tdKmOCkSbJXjWoQZzk3s1rd7JMMnLOIohWfmddpxGccynlbf+ytut9mjj0vmbK0ug+8gjY1knetqJ10sq+UURZ6qMTA8EGeC/wdeAR59zrnHMPAo8ATwPvkYOcc7c653adc29X294AvAv4MPAx59wr1F/TkbFFEM2tEaWFfuHyyCLUyef97rZJtZ3BQeiYbpS3EUEW2SbpLBN96HplNFF2Cr0qa7PXaeb4XlgcvPfrzrnXAL8CvB9wwEeBn/Ler6lDHVAhLeYeONj+wMGfxieAV3e6vJEkI0qDdpWchlVlEWkUIWMoVu+NBiZZ+1odNJQVZbVMtTIw6Ta8908Br29wzNepE6Le9qPAj3arXCFEkozoCjr5ovVz7uqoo5sdbLvm2ojuoJe+60FAJMmIphB6gbRqawaD3AGWqSMpUz22YgZsxoIQOr7V+x8kU25E/xBJMiIT2lzZqim0LJ1QmUit0yiDam/nWs1EZ4fuNYtsG5ncy9I2y4ZhfldaQSTJA4zaqDLvfpvxMQn6VXfxhe4sitZnv/1vRclTp0fp/W4H8Z1KI5LkAUblBcqLBG2EXtZRfFHLjX63naLk2WjfqLz3RdGL6NZBQyTJIUUZfYSD+vINakdapvrulUJtdsJ+Vrk66ftsVJ5BbV+jgkiSQ4B+j+pbKUO3ETuezs6n7BW6bdrvlPm2E2XpRP5uoGzvcr8RSbKkaDTC7KfvqJ8vURk7lWFGM5PQe4VekVUzc0RFeQ7D/NxIkmlEkiwp7ComreRrF71+WQa1U4ko9uy62Z7yzKatwuYt4u8chmChSJJpRJIsCfphMu3FyzCInUREd9CPlV8anaOZMnUqWKjZ64bO2c33KpJkGpEk+4BeKsNuNvhhIMBR7hDK/vyaDcJpBZ2Y49uKW6TZ5flaKVdEZxBJsgcYdFIclJdylAmvFZQxAroZtKLsmkEnoluLuE26vRhH2RY4HzREkuwiehFc0+kGXaZOUFCml7ZMZbHo1RcoiqJfbalb5NkuabYSZ9AJ02oZFzgfJESS7AAGiQz7TYK9egE7fZ1B6Di6GVXZyjnLRqidiBYvkqedr5t0e+pJEdIdhLbeS0SSbAK9euk70Uj7QYbderlaPW+z+Xp1nU6g1Q6/VfXT7cCyfi992EkC7TR5FiXOItfodxTyICKSZAN0WyUOGiH2mwg7cVyRc+zv7xe6zqBgbKz+3dpmVUkz6rQZc2KnlWmvCbQTyrPVwKAibbvfFqNhQiRJg15MxRgUYuwkIXaKBJsNfmiG7FoJrGimjrpBHHl59L69vb2mryPECsWiMRuZ8oqSaCffqW69J80QVxZajXAtou5bPXcM3DmMnpOkc+5m4FeAvwo44A+Bn/L1L1U3c563Av8M+KT3/jtbLU+3TajtNrhBWU+1mdVJimy32xqRnT3eTuousq/Za4byFN1XBEUJJwua5EJ58n4751L3b/cVvaY+vkjHHVozNeu4IuiV+mw3WKgVv2NRom52ABFJMo2ekqRzbgb4GLANvBHwwDuAjzvnvtV7v17wPLcDbwMuNVuGspJi2ScHd0rh6d95JJRHZI1Izp63SH77P698RQk4L18W8sij0bbQMUJaWSTnnAvus+fS5GeP0cc2S6zNErls6wT59YJA2yGiZomz2Wu1YjkZRfRaSb4JuB24y3v/OIBz7s+BrwJvAd5Z8Dz/CvggcBcduId++BO7RYqdDnNvtK/RthDRFCEp+1+fJ+9YnQ6RZZG8WSQbItKiqlQji3xDKgwaK768//bcoeNC6VbzNMpny5Znoh0bGwuqz7w8eQTarNmxnfyN0Kq5tpuKMyKMXpPkg8CnhCABvPcXnHOfBF5HAZJ0zv1N4KXA3wB+t9WCDIvptJ0ytUOIjUyTWUSYpeosCWYRnyW/0Dnyjss6t87bqAx5xN+MsmyEPPWn0SyZ6eNDx7R7XFYeXd4sNdsMgYbqIytPJ8jT5u8WaTbbZuT4ouVpdK1Iomn0miTvBR4JbD8H/ECjzM65Ber+zH/kvV9spZE2m6dMarHVsjRjVsnq5IsQQxFSCZFPiNQ0ae3v76fKYdM2fyiP3WfT+nhbrtA92HspMkhoBs2SYiNi08SUl9bb9Lk0KVUqldT57T6dx5KfbMsqs77HEHlqNRmqG30+e3yWIm9VNXZLbfZTZTZzvVFBr0nyOHAtsH0RWCiQ/5eArwC/UfSCzrk3A28GOHbsWOZxZSJDaH002Wh7Vudd1MSYRYB520PkZclHiExv12k5bm9vL7Vdoja994f2ZeXR+4qkQyScp1Tz6jn0W5CnHPNMonqfJhdLmHafpDWxCQGOjY2lzl2pVFLkqQnVnsteQ+e3ZW5EuCEyb6Rg5bnYutJ1ZuvY/s5TsXnve7tqtWjeVomzUTl0G46oY2CmgDjn/iLwI8BLfRNP0Xv/MPAwwJkzZ/zBtnbK0XLeLDRTnm6SYVEizFJZlmCsSvPes7u7mzqv7BPCk+MkLds14Qkx7u3tJefT19R/ci57LUuyNk8WYYd+h4ixm9CkoonFqrQ88tKEJyQpaX2MHKdJbnx8PMmjt0tazpF1Lucc4+PjyTVteTSJ6bJZZWvrITSACBHp/v5+IQLNU6uhZ5KHTqvOTqrNVo4ZJfSaJK8RVoxZClPjPcD7gG845+YPto0DlYPfm9777UYFaLYBlJEUixBilnk0jxRDqrAIWYT+WyIKEZYlsqzjdnd3U9uEQCWPTUsee259DqsEBwmdHO1bMtMEp9Xj+Pj4IcKUP9mXlV8fByT79DUtaety2TwhVZw3UJD7DO2XfZpANXTwUJ7pNqtu86CfYbv9TKukGdEYhUnSOfcK4AHgFcAZYBq4AnwZ+ATw7733jYjuHHW/pMU9wPkGee8++Ps7gX3XgL8PvKvBOQqh08TYzuitFULsJBlaVWjVniUiOUYUniY/IS85bnd3NzlO0nIuITmdx3vPzs5OktZ5BpXw+g2t7otCSFP+S7pSqaQIU9JCcPa4UB5NhjatCTdPpdp9kK2yBdrkrMkzS01a8m2XOJs1izZ7nU5Yq0YVDUnSOfdG4B9SJ7dV4HPUp2xsUleA3w78MPBrzrn/C/hZ7/2FjNN9CPhl59zt3vsnDs5/Fngl8NYGRfmuwLZ3ARXgJ4DHA/tz0Q+VWIQMi5hKmyFCa/bMIjyd1oSnyVATlk1bwhPVt7OzkxCekJykheR2dnbY2dlJrh9RXsjzAqjVaoXyjI2NMTExkRDrxMREQnYTExMJCQrp6nRRMtb7IKxYpSzWF6r3WaUZ2iYmWygebSx1F+p3ipJaq31WM37NSJJp5JKkq89hPAX8JnV/4GM+UIPOuWPAa4EfBM47537Ue//bgVO+F/hx4BHn3NsAD/wc8DR1c6qc71bga8BD3vuHALz3fxS47hIwHtqXc09FD81Fq+qwk2SoySQr0CXkmwuZQYWgssjPKjlReyGSk7SowFqtljKTRowe9vf32d5u6A1hYmIiIcNqtZoQ68TEREKsY2NjTE5OpshTiLFarSaEp8nXmn8tkVq/qvXdWvWpTbl2e576bNfXGXp/OkmcWdcYZTRSku8D3uO938o7yHu/TH1y/wedcy8Cbsw4bt059xrq0zjeDzjgo9SXpVtThzrqCjE8u7rH6AQh2t8hE2GIDBtNecj6X9T0KWkhMu89tVotIb/d3d0U4WmSlOMkvxwXEdEqZIAFsLGxkdonJDk+Ps7k5GRCfkKMokpFWQqxAofUa575N2TK1X+QHZVrp65oVRnyd8q+osRZRBG2IwQ66e8eFuSSpPf+nzd7Qu/956ibZLP2PwW8vsE5vk6dKBtd69VNFq8QWiHFdn2HWdML8hRiKAJUiE2nta9PiExITpOk5NNKcGdnJzluZ2eH7e3taA6N6AuEPLe3t1lfv76CpRCnEKaQYbVaTbYLeerfQnRCpllmXSE9OUYHG8Hh6S0hogyZcPf29jLVZjNopDa74VYaJbQV3eqcOw7cBnzBF4gsLSO64UNspBCtGoQwGdq0jdLMCnSxvr5arZYQ5vb2diotptTt7e2EGIuYxSIiygIZ5AFsbm4Gj6lWq0xOTibENzk5mRDg1NTUIfUpxGt9p9pcGwow0kFN1vdpydMGC4mizPNxtqI4mzXRRiWZRjPRrW8Djnjv//HB71cB/wE4AnzTOfeXvfdf7U4xO4dmndXNkqH1G2r1Z0lRz9ELqUL5b4NggENm0JDpU9SiKMFarcbW1laqTBERowB5D0LQJlshUyFMIdaxsTGmpqaCZl0dbCT5hBB1OjTVBdLqU8oD18lT3lVNsJJPtgsaRdvq/VmIJJlGM0ryh4D/Xf3+Bepm1V8E3k49AOcNnStad1HUXFo0oMYSofUbhgJntK/QKkGdDgXEiOlTzrO1tZWowq2trVSwTERERDb29vaCClQT48TEREpxSlr2VavVhDCr1WrKdCuEaNVn3pSWLF9nI1WpyTaLKBshkmQazZDk86hP/cA5dwp4OfCXvfd/5JyrAu/uQvk6jhD52d8hH6JViTagxkaTZk2et1GjNnBG+wdFOQoxbm1tJWlRhXKeaCKNiOgs9vf3DwUPiZKcnp5OiHFycjJJixIVktQBRiH1GfJ9hhZugPQKQtbPKX/Wz5nn44y+ymJohiT3gOpB+lXAFvDJg9+XqR8DzD0AACAASURBVM+ZLD0sSWYRovzXClGvE2on2FuFqNPabCq/xRSq/YayX8hPiFEUo5BkREREf6DfXQ1RiZOTkw3Vp5Cp9X1a9RmaAxqaqmJ9nlZtZplom3U9jSqaIclzwA855/4E+DHgE9576bFvpoUPIPcaouD0b8hWhaHAmVAEqQ6ikaAZUY0SDSrqL+QfrNVqbG5uJn7GohO0IyIiygFt0VlZWUntEz+lqE8hU1GcktbTW7Tv0y60YNWn9m+GyNN+mUXSIf9knAJyGM2Q5EPUP3P1g8AO8N1q3/cCf9rBcnUFWg1q5Wd/24CavBVmtN9QjhViFFUo+6wqjCbSiIjhh0SM2/ddiHFqaipRn9VqNdP3KVNahHStvzO0tJ+QpPZ3Qtp02yg+Y9RRmCS99x9xzt1N/YPHj3nvv6Z2/zE5cyPLAlF6EF6JBkipwlAQTWjyvATRWHPpzs4Om5ubKdKMGEyIaSw06rc+JyC1Cow2mdkIRQ07NUj/Wf+1tFGxTnjvk45YT4mIKC+ENHXQULVaZWZmJmk/U1NTieLU6Wq1mvhBRZlqc61daShElnYFIEEkyTSamifp62uyHlqX1Xv/nsDhpYN0Kja4xipEO+FeCE4rRh1Bur29zebmZqIirbM/ojwYGxtjdnaWSqXCzMwMs7OzSaj/7OxsMlo/cuRIYvaanp5mamoqIUlJ2ykCktdOStfmMG3ystCWDbt4vDXh6/ap26GY8KVNyvSgtbW1ZJC3traWtNf19XXW1taSdIyG7i/sVBVpc9JeJS3tUBOmtDm9OIJe5s8O3IQ0Iynmo9HarS/13jdlRnXOTQFnvfdfaqtkXcD+/j6rq6uJ+tNrkMo0C2mkElmqI0i1KtzY2Iij9RJgbm6OiYkJZmdnWVhYYHJykpmZGebn55mZmaFarXLs2DFmZ2cZHx/n6NGjHD16lPHxcWZmZjh69OghkpyYmODIkSOJCWxqaorp6el+32pT2NraSkhSBm5i/RCSFMJcW1tjd3eX9fV1VlZW2NnZYWNjg6WlJba2ttja2mJpaYnV1VV2d3dZWlpieXmZ3d1dVldX+32rQ439/f1Eaa6traX2TU9PJ4Q5MzOTmF1nZmYSX6a0Zz1VRQhTrCN2YBRJM41GSvKPnXMfA/4l8Pve+8wZ6M65W6jPpfwJ6vMpS0eSu7u7LC4uJkpQRuuiCmWULqPsWq3G+vp6XJO0D5ienmZ6epojR45w4sQJ5ubmmJyc5MSJE8zPzzMxMcH8/DzHjx9nfHycubk5jh8/zuTkJNPT08zPz3PkyBEmJiYSkhylkHfxc7UCGQQKSW5vb3Pt2rVEjS4tLbG0tMTOzg7Ly8tcuXKFnZ0dVldXuXLlCuvr62xtbXHlyhVWVlaC/riI9qHJ8+rVq8n2I0eOJMoyZAUR9SmuAusGiiSZRiOSvIv6IgGPACvOuf9K3fd4Gdim/gHl26nPmbyPuin2f/Le/9uulbgN7O7ucuXKlcRvKMS4ubmZkObm5mZUiD1CtVrlxIkTyf9Tp04xOTnJsWPHOH36NDMzM8zMzHD69GmOHj2aHCckubCwwMLCQrKIdURnUKlUEsWdBTHdLi0tcfXq1RRJbmxssLGxwaVLl1hdXWV7e5tLly5x7dq1hHAvXbrE9vY2S0tL0cTbYayvr6fWthWLiAw8RWFK2kb8R5JMo9EC598Efsw591bgb1GPaP0H1D+4LLhAPXDnrcBHfIlreGdnh2effZbd3V02NjYSYoyk2F2cPHmS2dlZZmdnuemmm1hYWGBqaoobbriBkydPUq1WOXnyZIokT506xZEjR5JRcUS5IH6v6elpbrrppuAxa2triZK8fPlyQqZXrlxJSPLatWtcvHiR9fV1VldXefbZZxMFa6dSRLSGra36R5yEOCVq9siRI4yPjx+ae13iLrwvKBS4472/RH0Zul8AcM7NA1PAVTVXsvSo1Wo8+eST/S7G0GFycpLnPe953HjjjUxOTnL69GnOnDnD1NQUJ06c4HnPex6zs7McPXqUM2fOJL7DPKUSMfiQgRHAbbfdlnmckOTa2hrf/OY3WVpaYnNzk2eeeYZLly5Rq9W4ePEizzzzTGLGvXjxYq9uY+ggKwnFAMNiaOkrIN77pU4XJKK8uPHGGxPf4K233sr8/Dyzs7PceuutnDp1iunpaZ73vOdx0003JSQZEVEUN954/fOzL3rRi4LHrKysJCR5+fJlnn76adbW1rh27RpPPvkk165dY319naeeeoqLFy8mkb4RzSMqyTTa+lRWxPCgUqlw4403Mj09za233srzn//8xJR29uzZhCTPnj3L/Pw8R48eTaY1RER0G3Nzc8zNzQX3Xbx4kcXFRdbX13nyySe5ePEiW1tbPP300zz99NNsbm5y8eJFLly4kEx3ichGJMk0IkmOICYnJzl16hQveMELOHnyJHNzc9x+++2cOXOG6elpzp49y80338z09DQnTpzod3EjInJx4403Jmr0/vvvT7YvLi4mJPnMM89w4cKFJLjoa1/7GleuXGF1dZUnnngiromsEEkyjUiSQ4zJyUluu+02XvCCFzAzM8Pzn/98vuVbvoW5uTlOnz7NnXfeyalTp5iZmel3USMiOo7jx49z/Hj4uwvf+MY3kikqjz/+ON/4xjfY2NjgiSee4MKFC2xubvL000/H4KGISJKDDJk0f/r0ae6++27OnDnDsWPHeOELX8jZs2eZnp7mzjvvZHJyst9FjYgoFZ7//Ofz/Oc/H4BXvepVqX0yT/TJJ5/kK1/5CisrKzz77LN88Ytf5PLly1y7do0vfelLLC8v96PoXUWcAnIYkSQHADIV4s477+SFL3whs7OznD17lnvvvZeFhQVuuOEGbr755n4XMyJiKCDzRO+77z7uu+++1D4JFjp//jxPPfUUa2trfOlLX+KrX/1qokQvX77cp5J3Br0gSefczcCvAH8VcMAfAj/lvX+qQN4p6vP3fwiYBx4Dftp7/8fdKGvTJOmc+1bq35M8AbzHe3/ROXcH8Jz3Pq5R1QHccccd3HzzzRw7doz77ruPO+64g9nZWe666y7uvvvuGDATEdEnyLQWPSjd2dnhy1/+MhsbGzz++OOcP3+e5eVlnn76aT7/+c9z+fLlgVq+r9sk6ZybAT5GfUGaNwIeeAfwcefct3rv1/PyA+8Dvg/4n4EngP8R+Ihz7i947x/rdHkLk6RzbhL4APDfUWd+D/wecBH4ReAr1BcUiCiIY8eOMTc3x2233caLX/xiTp06xY033shLXvISbrnllmRlmYiIiPJiYmIiUZwvf/nLk+1ra2s89thjXL58mUuXLvHYY4/x5JNPsry8zLlz50prru2BknwT9ZXa7vLePw7gnPtz4KvAW4B3ZmV0zr0I+JvAj3nvf/1g2yeof+/4IeDBThe2GSX5vwF/Bfhh4A+A59S+/wT8XSJJBiGq8CUveQn33HMPs7Oz3Hfffbz4xS/m2LFjI7WmaETEqGB2dpbv/M7vDO67ePEiX/ziF1ldXeX8+fN87nOfY3l5mSeeeIIvf/nLPS5pz/Eg8CkhSKh/Yco590ngdeSQ5EHeHeC3Vd5d59xvAW91zk167zu6UHAzJPk3gLd57/+tc87a+y4AZztWqgFEpVJhfn6e2267jfvvv58zZ85w5swZ7r//fu64446B+4pERERE96CnrTz44HXxs7Ozw2c+8xmee+45vvnNb/Loo49y4cIFFhcX+cIXvtCTsvVASd5LfT1wi3PADxTIe8F7b5cLOgdUgTsO0h1DMyR5Avhixr4xYKRCKE+dOsV9993H3Nwc9913Hy972ctYWFjgBS94QRI1FxEREdEMJiYm+I7v+I7UtkuXLrG4uMijjz7K+fPnWVlZ4fOf/zyPPfZYx6eo9Ci69ThwLbB9kfpHM1rNK/s7imZI8gLwF6g7XC1eDgytjaBarXLjjTfy7d/+7XzLt3wL8/Pz3H///Ym5NCIiIqJbOH36NKdPn+aFL3xhsu25557js5/9LEtLS3z5y1/m05/+NM8991wy/7MddIAkTzrnHlW/H/beP9zuSfuFZkjyN4H/xTn3deDfHWzzzrnvAv4+8L92tmj9wS233ML999/PiRMnuOOOO3jlK1/JLbfcwpkzZzK/KB8RERHRS9xwww187/d+76Hti4uL/Mmf/AlPPPEEV65c4dOf/jTnzp1jdXW1sOrsAEle8d6/LGf/NcKKMUsl2ry3ZuSF64qyY2iGJH8ReBHwfuD/ONj2X6h/DeS3vPf/osNl6xqq1Sovf/nLufvuu5mfn+flL3853/Zt38axY8cyV+iIKC+89+zv7ycf0fbep9bnzDIhOedSQVNjY2PJb0nLnwyQBm2gJPeu6yD020LXjdy/ro+IcuL48eO89rWvDe77whe+wGc+8xmWl5c5f/48n/70p7l8+XLbyrMFnKPuW7S4BzhfIO/3O+dmjF/yHqAGPB7O1joKk6T3fg94g3Pu16h/V/I0cBX4sPf+E50uWDdwxx138O53v5sbbriBl770pf0uTkQOdnZ22NvbY3d3N/kT8pOPxAo5ZnX2upO3hCf/bVp+VyqV1L5BhtST1FUoDSTbGpGorVddT+Pj9S5lfHyciYmJOKe3RLCLI2xsbHD58mX+2l/7a6njeuCT/BDwy8652733TwA4584Cr6TxDInfA36WeoDPvznIOw78deD3Ox3ZCi0sJuC9/8/Af+50QXqBY8eO8T3f8z39LsbIo1arsbe3x9bWFtvb2+zv77Ozs0OtVksU4e7ubkoVWhWkYUnQdtzOuaTzrlQqVCqVhAjHx8dTHbz3PlMxDbKC0sRnFbfUr07r44DUM9DEaqEVpx50jI+PJwOParVKtVplbGyMiYmJuGxinzAzM8Ott9566KPmPSDJ9wI/DjzinHsb9Tn3Pwc8DbxHDnLO3Qp8DXjIe//QQdn+zDn328C7nHMT1GNl/gfgNuAHu1HYVlbcccBN1M2sKcioIGI0sbu7m6x7ub6+zu7uLrVajc3NzUQZbm9vJwRoFaJVMoKQcgESshsbGwuSn3TSuoOuVCpMTEzgnEs6+rGxMbz3KZPqsKxhqYld160mSXkeMliR7ZKWgUuITLUqtcpermkHHValV6vV5PlNTk4mCnR6epqpqSnGxsY4cuRIVKU9QC/avfd+3Tn3GurL0r2f+uI0H6W+LN2aOtQBFeqzJzT+FvV5+++gvizd54AHvPd/2o3yNrPizgng14Dvz8kXW/EQYmdnJ/mI7fLyMpubm+zu7rK2tsbm5iZ7e3tsbm6ytbWVdLqiEKWzDZn3LBFqf6DuRC35yW8x6em0JkLpjPf395PjBHIOq5AEUlbJLwQ6aGpS17uu/9BvIT89gJHfOzs7yYBmd3c3IdCQKVyTad5z1wQKHDJzj4+PJ4OdarXK5OQkY2NjTE5OMjMzw/j4ONVqlaNHjzI1NcXExATz8/MDbx4fBRys0fr6Bsd8nTpR2u2bwD84+Os6mlGS7wO+C/hV4EvUnaQRQ4KtrS1WVlao1WqsrKywvLzM7u4uGxsbrK6uJubQ9fX1pMMUsrSdqFYacJ1w4HBwjPYBZilBTXjVajUxkcr59flkm5wLrpsHRT2OjY2xt7eXEKCcQ4J9pPOuVCopQrHlLDM0SQnphVRhiNSyCFSfSxNmrVZLkacl2tB1tFk3y6+sFaiudyFHsRJMT08ng6SZmRmmp6eTRcqPHj3K+Pg4R48eZWFhIS7zWADDYEHpJJohye8C/p73/je6VJaIHmBtbY3t7W3W19e5evUq6+vr1Go1lpeXk6+2r62tsb6+nvgNRS2KQtQqwprdLKyvUCsF7ROsVCpUq9WkE9zf3086Rq0MhNy0SVQIM+sPrr/4ukOWc2my1apRiLVSqSTXkTzW59bPqM+QrzAU7RvyQ2aRot2u/1uzrd6v1ageOO3s7BxSn5p05RxyvNyXfsYCbV3Qgygx1wqBTk9PJ4Q5MzPD3NwcExMTTE9PMz8/z8zMDFNTU5w4cSL6RRUiSabRDEkukl6vNaLEWF1dpVarcfXqVa5evUqtVmN1dZXFxcXET7i8vMzW1hY7Ozusr68n5lIdUCNKwSoKSPsvQj4nSWsi1KpwYmIi1QEKAe3t7SVBNFYtWvNcVgSrhjadCkkIue3u7qYIV7bL8VlRsHLN0LSRvHLqe8n6bTsp6+MLkQgcjk7NMrEWCdwJEWPo+oKQKdX6PrXC3N7eTrZL+5JBlxwnaTm/LYtAD1T0wGpiYiIhzMnJyYQwJycnOXr0aGLCPXbsGLOzs0xMTLCwsJAozuPHjzM7O8uoIZJkGs2Q5L8A/o5z7sM+1mIpcO3aNdbX11lbW+PixYusrq6ytbXF1atXE9OpTCIW8+ja2hq1Wi35LeYx2aZH9rbjs6P5kL/Q+pJ0VCmQHKMJRjo22VetVlPqYGJiInU+SesOUXeUGtJR60AdrQq1IglFZsq9hkjYXs/6LfOIMWtbCI1IU9+n3m73WeLS6g+uq0+9PURO9vnpAYc2RYsCF6uAPAdr6tb3Ie3Re3+oTUparBpWzQr0AEfKYtvN1NRUsm1mZiZpc0eOHEmZaOfn55mcnGR2dpZTp04l33a98cYbmZmZKfT8Bg2xe0+jmXmS73TOnQHOO+f+kMMrI3jv/T/taOkiALh69Srb29tcunSJ5557ju3tbZaXl7l8+TJbW1tsbGywuLjIxsZGQozr6+vs7++zubnJxsYG+/v71Go1tre3U+YwqxgEWUE01lcIpIhSSFKCLCQtZCYBFqGpANrPJPnFDKsDcrQy1VGrWslpcpROV8yyoh51B28JUBOeJb1G5BdCs8EkeefN68RCJu+QyVl+a3K15tqQyTWk4oQM5ZxCgnIfUvc6CErSu7u7yTMSstbmVymLPDf9fKUda0uHJfpQXem2agdh1WqV6enpxFx75MiRxER77NgxpqammJyc5OTJk8zNzVGtVjl9+jTHjx9ncnKS06dPx6UqhwzNRLd+L/WPW04CdwUO8UAkyQ7gmWeeYXFxka2tLS5evJiYS69du5ak5QvpQnwrKytsbW0lClHMpbVaLQmssCNw7e/JijAEgiQp5KU7Fzv3TdShTsuI3TmX+I+ccwlJ2sAMbaLVKhVIrq07zhBJwnX/YuhP7lv/t+gkyTWLTp4rizBlW1H1qcum24k8Jx3spOteTNqWJHVaSFITsJxX/JtQH5xpE66+rg1Ykvav712X387nlHY3NTWVmGiPHDmStPO5ublEgS4sLCTffj1+/DinT5+mWq1y4sQJzpw5w9GjRwcm4jY0EBp1NGNufSfwGepE+SXv/U53ijRa2N/f58qVK3zjG99gbW2NtbU1nn32WZaXl6nValy5coWlpSV2d3dZWVlhaWkpmYu4traWBERsbm4mI2oxU9kOLQ9CjjotpKgVnoy69Zw25xxTU1PJcSGFqPNo06k9t3SMem6jJkOdDplYNTEK9H2F/us6yEJex9GoU2mm08kqQxFzbTP3E0IR36clTD0wsT5aeVb2mejAK1H1QmiVSiUhSRkQCUmOj4+zt7eXDJpk0KeJVSvWWq2WmHmturS+dV1n1p8ubVCbaGUO58TEBEePHk0U57FjxxKf5vz8PKdPn2ZmZoajR49y5swZFhYWmJmZKbWpNpJkGs2Q5C3AT3rvP9+twgw7dnZ2ePbZZ9ne3ua5557jueeeY3Nzk5WVlSQtplMhwJWVlWRivuwXH6IE2mRFljaC9r3JhG5JC2EJyWlVKB2HNZ1OTk4mPkVNktacJeZSbTrVpCidkpRPBwJp869AXmpRCmK+k2NkGbtGCPn6dDoUsFIknXWNEJohwzzzb1ETcVHTcSMClfxCflpdinoUwtvd3U3Se3t7VKvVlOlUp4X8arVaaqlCcRvoBSokyEzcCDK/V66pV3SSY2wUcJ7bQbdPO/ATAp2ZmWF2dpZKpcLs7CwLCwtMTU0xPT3NqVOnkjmdN9xwAydPnmRycpIbbriBU6dOZdZ9rxFJMo1mSPLPgDPdKsiwYWtri9XV1cR0Kj7Fq1evsrOzw9LSUhJpur6+zvLyMtvb28k8RekgspZuK0qM1v9izaWWGMUMqslPyEybTiW/PU7Iz07s135Ma9rSZAhpIrTmPDG5aVOe3KegUaCLrbcQCWals44L7Q+VJWubfl552xqRoP5v06F9EPa/hs4ZKlOormWbDtzRz03ahOyz8za1qTQ0hUTSkk/eFUnLceJqsO+OEKY+d2htYB3UZP2jW1tbSXvc2tpifX09GSDKYHFqaipRmGKilTmdx48fT6akHD9+nJMnTyam2zNnznDkyJHk+Ij+ohmS/Eng3zjnvuq9/2S3CjSokJVolpeXk0jTzc1Nrly5wsrKSkKMy8vLyVzE1dXVhAjX1taSTkGmZcjLrQNPZAQO6Q5Kd3ShVUskrVeo0aZO618UMhNi1H5DO7E/FHVql4XTJtK8iFK5B9thQzgoRZCldOxvazoMbZffef66POLMKlOzaKT4ihCjwPqY9TFZZNqIPPW5s6AHMUKUWnEKaWq/YSgIx04P0e+FDCJlu353JK2VpKStYpXrWMLUPs7Qc9ZtV64r9yq+1fHxcba2tpJ3ZnV1lZmZmWTRg2PHjjExMcHs7CwnT55MCPaGG25gbm6OqakpbrrppsQf301EJZlGMzX+74E54I+dc+vAktnvvfe3dqxkJcfa2hpXrlyhVquxuLjIlStX2N7eZm1tjcXFxSR4Znl5mY2NjWQZNzGX6kn6YhayfkTtg4P8ZdysItPKTZOkDogRwhP1KNcSJZilCiWPzq9VoV4dRStZTYxyDzqt703fbxHTZx7h2c7NRnfq40Lbs37b82nkEWQnlKRAk18j5WgVed6+RoRZhJhD5bVlFVNsiDA1MYXmdmrFKYQZWj5PjpG0Vp86jz5OrqPXr9UqV5fRQteV9n1K9HmlUknmJlcqFVZXV1leXmZsbIyZmRkuX75MtVplamqKhYWFJGDoxIkTzM/PJ+nTp093hTQjSabRTA1/lHoE60hBlmXb2tri8uXLh1ShkJ8s3SaqUAfU2EhTGaHqEauMNuF6oImF9ctpYsxa0Lvo+qb6ODvNQrbLPn193anq8tiONq8jtWik4PIIL0R0dntWOvQ767qWpLNMuFm/iyKPIKEzJJk1aAlFOEs6K08WsYb+6zwajQYjdmqK/m1X79FK1C7kblWpNvGGfJf2fHrKipQzFEGr60ned7EWOXfdXCsD1KtXryaDWD2Hc3Z2NlnofW5uLjHXHj16lBMnTjA1NcXs7Gxb5GmtMBHNzZP80S6Woy8QE+fVq1e5du0aOzs7rK6usrS0lATGrKysJEuxyao0+/v7KV+h9n3oRaH1f7jeAHUEqEB3FlaFaVOlJq8QMQqRCdFaIgzl14o1dM2Qr1B+27LL7xCKqr+sP91Jyn+7PyufVZV5JJpVHn3tvHuy+0LHN0KeIgulsxRmo2elJ//nqUhrFtfHhH7rfFnnDpG5/A9ZGLLqUT+TrDZhI1xtOrSWrTbphpbSE99l1vdOteKVsoUGZXqO6NjYWOLf1O+fEKh2degF38XXKQsfyPSqY8eOJX7R+fn5JPJ2YWGBubm5hnUb0cKnsgYZi4uLfOADH2BnZye1Vun6+npiBpWvXcgo0o4y7QhWoBuW7YR0pGbIN2cnxIeWchMiK0KSeaZPWxZdnqxOKo8AQ6RgzVB5pJfVoWUdp+s9NADJypOlPiW/Poc9n7630DPPIsaszqZRJxQihkYkadOWZPL8vXqKjD0u5DO25JdFoLrdyW+bJ8svvb+/fyh/iFjz6sA+C9sGbJsKEah2gYSUqBBoaF1arUSt9SikSvX1G/Uz9llL3VoLkUSgVyqV1Fq2srLQxMQEly5dOtTeIq4jlySdcz8C/Efv/dWDdC6897/ZsZJ1AVevXuWDH/wge3t7qXmF2sEvHWeoA9QBClp5aSWmCcvO9xMzJpCKBg1NnrfTJLKCY0KqUK4N6W/3hUb9WUrEooj6s0pPjsnrkOxvOU6eQYgYi5JpSCXmqUh7jN2m7yevjmw677gQsp5FEbUeGtxkpeX4PBKygyjbjkJqUQ/AZJ/MawxZJ7IsJ96H52Bqwi3arhsN7vRfaL1YO0jOI0n9VZSsaSw2wEimqmgfKJAiXUuyeUFFUnd64KEH2eLzHBsbY3FxMbNuIhoryd8AXgFcPUjnwQOlJsmVlRU+/OEPt5TXrjBjp0lMTU0ljU9efMkj2+yEezGXyAo1Qqh2nqL2Fcp5s4gxq+MqQoZZaitLyWlTknSAtvMJmbY0OdoRPJB0CHIOTZh6uy1LnlLIIvYshWgHSXmqMYs08+q4ERoNWgR64JZFDHmEoc2t7ZKktlRoJQkkbVuuqdvq/v71tValjkJl1dfW5GvdA3kEnjVYENh2Ytu6JsxQsJCdaiLuGRu1rt01W1tbTExMJPNHpbx6Xqf4MeV829vbyVxRTbKdQCTJNBqR5G3AMyo9shD1KZAPv1rfn1aGsmCyzC2Ub90JYcoEZCFZGelJWhOmVZW2c7AT7jW0CUsjS3nZDkETmyU5IUZ9Dh06b9P63Hpkrv1CIZK0hCrl1+bWkLKUfSFiDKnIvP956VD9dhP2GYdUZta2kJK0+7QCgbSfXOfJCt7Sad1eQwM6bYURwhwbS38KTZdPE7h2U4QsLHbgmDeQtHUGhweOoXdCqzq9mIEsGSn7xXolaXHrbG5upj5NB1Cr1XDOJQQM1z9+Li6i9fX1ZppMYUSSTKMRSX4c+H7gc977J3tQnoHB9vZ28kLKxGi4Pk9R5hRqMpydnU2IVfwD4myXL60LSQrp2jmLQpihEbTt/CBs+pTtVqFp8tJBRyHSsKZpIUPti7Hb7QjcpkOdkCZJOKxetZoLqV/53Ug96uP070bp0G+LdsjTkqGG7dCzfjcyPYb8lVmK0qrKvv2zkwAAIABJREFUkE8x9GcHdNo3riOmNUnu7++npkDpslYq178qoolUl0dfR5sa5V3SBG5VcgjW5B8iSa0kJdpdzLGTk5MJScp7vbe3lwy0JdpVz7PUZdF+ze3t7cx20Q7sOxDRmCTPUl/QPCIATQQhc6N+IeVPk5+Qpyxrpbfr7+CFSFK/6CGSFFhyEJKRjkGrL0ivfarNX/LfKk4b/afNTzZ4IY8k7cRtu+qJNq/azkrS9j5tHeSlQ0TWCjF2q4PJM7+G9oVUpMCaaLOUmiaMLJ9fKBJaK0nZZwlKyEGfXxNgaMAn++D6t0ehbsoVcpV2EBoYWNeEtcKEzMcadkCmB5XSduVcUh69Tdp0pVJJ8sicTU2U1jQs19bvXNGlFiPax0hFt3YaNqJtbGzs0Dwp27Fo05P9E5+nnsCv05Ykrakr9FJb86N0INLJ5HXqobxa5WWRpA1k0EEO2nykw+iFTIHUuWWfvn5oRC+/pdxaSeb5G4uoxW74HJtFHkmGkGWODf0PKcwQKYaUpJCB5MnyNe7t7SVEKQrR5tXWDz3o08dI/WorggxQgUPtVdq7Tet60YMB+x5JObQVRg8EQu+YNSvLdhkcSDmKvLfazSHkKO9JtxCVZBpFSLKjNeacuxn4FeCvAg74Q+CnvPdPFcx/N/AQ8F3AEeAp4F967/95J8tZFGL6kIY7MTGRjAYrlQq1Wi2ZDymNXTqNUPCKfjms0pPtugMsQnJZvjl7ba3qNBFqVahNsTbyzq6taZVkKH9WGLz2Y+o60BO3NUFmTQWxdWDrTBOmnDMPjTqQbnQwjQiyCIFadZRHjLI9y+yaZ261fkitJIUc9GDNTguBdOCOLaslVW2S1GXR92BJVs4fuqbeL9sFuq1oV4V+X7RC1ObRrD/9Tsh7Y/9kHrYE63RbRUaSTKMISf6sc+5KgeO89/6NeQc452aAjwHbwBupE/A7gI87577Ve5/riXbOvewg/x8BfxtYBu4EZguUr2uQ5aWq1WoyYpQGLi+mRK3ZEeX4+HjiwxDVKD4LMbeGPidlza1ZvhSrqLIiTUNqTxOeHJv1lQa9ALVWj/rckkfKZMPos+anhTokCJt/s+5bjtf/Qz7JULodn2IvUSSYxx5ryTLkn4TDiw6E1KNWlpKWfXrgp60sktbnEeLLInLJI35JuK4+pR1IWq4p75ycVy+0r6dM6fvSdWcHmzYATQ8Q9SfrtE9yfX09CbzRS1TqdZw3NjaSDxxsbm4mH1Df2dlhbW2ta75IjUiSaRQhyRdTJ7VGKFKzbwJuB+7y3j8O4Jz7c+CrwFuof7MyCOfcGPUpJh/13n+/2vXxAtftOlZXVxOCGxsbY3t7m8nJujt3Z2cneUklLeHglUqFqakptre3E5Kcnp5O1kW1HybWy8qFIgshPKHaEopWZUJK1m9oCU78J5pYQ/O27IRqfe48orbBOvaYLPWr7w/S/kn5LcdYVRmqJ0FRcux2p9KOqTVENPqYkHlRbw+pOzEhWhIOkaPeH1J4YlWx19dEaQeCWpHqaUNi4hVrzfj4OLu7u8m7oaNoa7Va0Adqffu6DdnBpn5fQl8esSS5sbGRKMG1tbVk7Wb5jqyQpHxLVq/9LEtcRvQeRUjyv/Xe/38dut6DwKeEIAG89xecc58EXkcOSQKvBu6mTqalg7wg8lJub29TrVbxvv6VAnlhxUk/MzNDrVZLAne2trYSpRgiSeuftPMkZRvkzwGTF12rM0tENqDGLvisO4ciK4hYEtQdWxb5hfLaPPoe7CAgixhD5KnrJ5Tuh0+yWWKEdERzIxWp1ZzNL9BKTe+XZxEqo7RFreZCPkGt8uR4IT45r2zTBCnl0S4NKaslSZl3qN8PbWbV9xsKfLMDKjtw0yZWuzBAHknKFI7Nzc2EGIUk5fuymiSFTHuFqCTT6HXgzr3AI4Ht54AfaJD3Ow/+TznnPgV8G3AN+C3gp733pRhm7e/vc+3atWSBgFqtlsyNXF9fTz7IOj09nSxWPDk5yZEjRxKSnJqaShYa0JGuMq1EXvisxcZthF6estRpbbbURGRHzVZxFiVGq/asss0iPFtmW259PvtbjstSlXqbrh+bbtbk2mpH021ylLLpfUI0+h5F4Wl1KNu1mTR0n5oM9Tadx6a1r1IPiDQh62uLWpX2pX2fduBolas1JYfKL9cPDSTtANF+wzJEkpKWxQA2NjYS8tvY2Eg+rC7fodV+yF5CP5uIOnpNksepE5vFIrDQIK988Pm3gV8F3gq8jHoQz83U53MegnPuzcCbWylsOxAf3draWuI/nJmZYWZmJiE/IclqtZoiSZk/KSpTf89xamoKIFGVdvk76QzsGq0HdZGrMuV/FplpIrJkapf1C03hyOtYpXyNtoWO0WWV8zdSkvq3zROqE3utPHSikylKllpdZT1bS3SyTf4LEWnlqPOEVFbIjGtVX8jEardpSNvSS9jJcUJCQt5WFepr6nvLupYgNDizJK3btHZD2OXmJK1XwhG1mLWYwP7+Ppubm6m1o/uNSJJpDNIUELGNfMB7//aD9B855yrAzzvn7vbef9Fm8t4/DDwM4Jzry9OXl6dWq7G0VP8M5/j4eLLYcLVaTRGjmFutktRL2clKPXr6iHQcoa+AaL+l7cgO6iZYdkue+k/7A6XzAA4tDGDPJQh1mFoBSEdplZI242m/lg63F/KwikbOY+/RlrNZk2zo2E4hLyDHXjNkQZD6COUPXcOSToiMQoE7OhAmi8Bs2eS/Vp/y3DT5a8UJh/2I+lwhy4mkNRnK+a2rQQ/8tCVEfotvXhOj+CG3t7eT4Da9mIAQo5xDYhLKiEiSaeSSpPc+e7mP1nCNsGLMUpgaVw/+/4HZ/vvAzwMvAQ6RZFmxu7vL6upq8lubUO2KO7IQsZCkcy5ImPqjyXalER0RqzuzUPBCUXOUJZM8U6d+8SwhSicuJCf5pKPUna74fOU4rTh0OguaMKyysoTTyAybR4rtdjRFiDB0bKPzWcKC9FdAQuSjfX9Zpn09uLHtK48wLWx7kXu37VMsFfY8WYM6azq10dM2UE1IUn+0WchPFJ8sZC7pkJIUkuylTzGis+i1kjxH3S9pcQ9wvkDePAxGnH4GhFjEwS8QchwbG0tMr0KEmiRl9R453i5GAKQCfySfndcWUgpZ/k2NUOcUMmkKrGlO79cKSHeMIUK2SrEoOXnvM9WmJoksJRkiyFbKUQQhs6QlyjxYUtLPUZNPKLAla0Blt2ufoK6/EEnq/SGS0+1Gjrf+1ix/px2sZc291QtZ6GlNesqTTou/UJSmzI2WtPghh2ElnKgk0+g1SX4I+GXn3O3e+ycAnHNngVdS9zHm4T9Rn4ry3cDvqe0PHPx/tKMlLQn29/eTRY81eQrEH6kXRdfTRmRZO73OrF48XTo5u0C7noOp/ZvWDBcyl9qXLCsYIMsEqDtGTWLaJCednfan2cChUESsvpZVoTLhXXfU2oSr7y+kRhshVAdFVKBFlpncTrvIm9sYsiCI6d6a5nVwmD5O0lmBMnnBZJLf1k2WNaCR2V8TofWNiyrUC19oYtTkZ6dwWFU4CoowkmQavSbJ9wI/DjzinHsb9bmVPwc8DbxHDnLO3Qp8DXjIe/8QgK9/0/KfAf/EObdCfVGBlwFvB/6NV9NKRgna/GMhJCmK05poNbFK5Kxzh+djWvWZZ06T6wryFI9WkfJbKzzrPxLTq/Z3hiJqdcep/aX7+9cXcgBSizro82rznNSxVrs2qES2a8IMqZ5mzKIaWaSYpczyVKLctxwfMqVaNRlSkqE8mvyscrTl1HWTZ9YOmfCtz1tHVmsytEpQLzwu8xXFP2h9iqOKrAHtKKOnJOm9X3fOvYb6snTvp74s3UepL0u3pg51QIXrwTqCh4BV4O8C/xB4Fvgl6kQbYeC9T8LOBfLZLv21ETHl6gAhvcqPnXYiHaFsBw6ZbjVhhshToDtO64+UtA2y0CSmFV2IGC0BWoWpr2MDkSy52eARa+azZmPd2RRRnHbAYOvLkiAUU4uhdCvEaBWjPp8l45Dv0ZKjQKsza64vEmmqF7jICqjJ8hX2Yi3UQUMkyTR6Ht3q62u0vr7BMV+nTpR2u6e+4EDeogMROdCKc21tLfV5LhtFq8212kQralJWDxKTrF3Y2Zrtsky0khYlqY+R37qT1+pCE6CNbg0RpuTJSmuzqlw/pDJln72ebJfyCZrxIcrxRdRjMybVPGKU4/Szsl+ZCfkX9fnzBkT6/rMCpPSzgutWEh1dChyavK/Vo/YVWoUo5lKZThIRUQSDNAUkosPQo+2NjY2kI9WLGUh0rVafWmHqD0JLWvs07fJ5ITMcNF54G8L+KE1eojqs2rRmWP3bHiO/5SsVUk82IET+WzUp5dT/m/FbZgVJWdLUdWiJMTQ4aRSRCofVoj1Ok2LIUqDLH4Kuh1Ddeu9TkaB6CkbWqjbygQFrOhUXhMxFbOYZjDriACKNSJIRCaSTkrUkIT2fU09PGRs7PIezHZ9mXmerVR2EP31lFV5o2T3JawlTtktkYii/JVWb1uWy5WkWIaIMKUg5xirErHQWYYZIMWQBsM8nNKDRz0X+28GFDrjSClHPRfT++jqoQGIu9f76lAsxl2piLPP8w0FBJMk0IklG5ELP5xTCFKUo69M65xL16Zw7RJihKFogldadfsgMq9NyrCYoS0qhwB/ZHgrusYrG+kEbqUob7JNHkroTygrmyQvK0YRliSxrGk+ef9EqxNB18kzl+r5Cvkar4GVAov2Icoz+skyIGGW7LOmmV7WJ6AwiSaYRSTKiMIQwxfRaq9USs6yYw8SPKV9DEWUgZlfx34kvUMyyOkgmpFgsUVpkmTit4ssyw4qK1nlChBkiSX3NPLXbCCETq66TPN+jHUCEgmuyjrNEqctSpN71vYXUtzajStpOxxC1LwE13teDzjRJSuCNkGScpB/RC0SSjGgaetqJRMtqwpQIQzGvytcYZC6jEObExEQSYao/yqv9mDoC1XbcEPaBSRCOIOTHlOOaUZx2e0g55inJPKIMBbrkqUhLmCH1aJVk6BwhtZhXt7qO7b1pv7CQnp6aYSfsy3ZtOtURqTrwRqK0y7K+6bCi6IBulBBJMqItSIe1sbGREObk5GQq2GdmZibxRcrcTB34owOBrB9TVKaN4rQdPTRWmZKW31qFWLWpTYVZSjQr0tVeJ1QGgTUt63QWSeaRnfVbZhFrqM70f9tRhnyvsj00mV/IUE/T0F/NsN9clLwbGxupIBzZF4mxd4gkmUYkyYiOQTqyzc3N5PNg1Wo1mSoyPj7Ozs5O4ovUKwNVq9XERKu/Ii/q064/qzt8CH9lQu8PISsASPaF0qEAIXuOUFofYxEiyjzyDw0Y5LgQoYbqIS8wSteNvR8bCKW//qIXANfEKGnxPWqFKD5FPX9RgnDiR4b7g0iSaUSSjOg4vPfJEnoTExPs7u4mcy0lXalUUh+hlg5WgnvEZCqqUkyxsg6thV3mrJFayip31v+QQrTEmhWsEyJLjSw1ae8ldD95Ead557XEaFWimLr1fYUiUu2Ht61/US/9Js9YT+zX31zUX8qI6B8iSaYRSTKiq5COUZTk7u5uEu26t7eXWrxdgnomJiYS36XMVxQClWCfkBKyPjbZpv1zIZNsll8zhCwzalHzaiNkqcoi/zWaVdCyXZtatWlZR6daYhQLgvgXtc+60cR+HYQj54yIKBMiSUZ0HdrcVqvVEmKcnp4OLlowMTGRmGhllR89H1PPwdTBPnB9ebsQWUJ4InyzijMLIT9eKwhdu53yhNSu/LZTJ6xJtRn/ophLhUhFPQpJygIAOghH8kaUB3GgkkYkyYieQn+iaGtrKxXss729nShJHeCjv6+p15gVxanTWmVmBa7obaHFuW3erOAW/d+iFVLLQh75Zpl/84KP9DJ9Mn3HEqOe2C/pRvMX7ZqodpK/JslIjOVEjG49jEiSEX2DdKbOuWTaiChHmTYiJlpZqEAWtxZVKSZaMd2KmRZIEaYmOz0XUEfK6sn0lmCt+rTn1L8lrVGENLPI0HZcWQsY2Okpel1arQq1P1Lnkbmu2r+Y9f1EG52qiVH7F+U4SUeUH5Ek04gkGdF3SMSjqEIhOyFJ6bSl05fjtBoS1STRr3JeO4dQiCHPFOuca/hJsCyFmuX7bJYksyJtQ1NQNDHa6RiSTz7vJT5Ha1aVepXpF0J4OggnZDoVkhQfpJCpVZJx0v/gIJJkGiNHkvqLDhHlgkQ1yoLVNthHr+wjq/loVem9T4J94Prnq0LzDWW/QK9KI6qy0RdO9PH6HJLW5y5KkrpMdmEDndYBNZbkZFChCVUPJLTJVa9+I2ZUS35iRhXzq179Rs9ltEE4cW5jeaEHeHFJv3yMFEmOj4+zsLAQHIFnjcaj76Q/kDlysoKP+CRlZR8xywphylJ44+PjiX9Somgh/b1H51xidpTna9Wg/pKJ/sKJBBbp46zilHKHTLT6WnB4bqI1nUo6a8K+/q6iXlZPiFAPCOQ8+osaWcQohCfEuLGxkaQ1MW5tbbG5uZkiyYj+QLsTQpaPrPTVq1dT54kCIo2RIslKpcLCwkJqFA7hDkmnQwEPNh0bVnewv7/P+vp6QpJCBrJ6j0SyClkIoclz0YuhayK0ylDMt2KSleO0shRVKcQoajNPZeYF/0i55L81g2apRVGFegCniV/DmlWFIEMkub29nUzs1yQpK+GIj9KSpBBrNKl2D6H2FWpr2rph/elZroKlpaXUtWJflsbIkeTRo0cBUsQWSuuOSjoj3THZz/3okb4OkrCdWURr0Ot9WjLTaSFLIT29Oo90MjL3Usy3cg7t67MdhSVMS5JZqjLLdynI8zVKm7IqVJO4qEV9jFWj0j61v1GTpP7+opi6LUmKH1JWwtEkGSf/tw+tAqXthILJivjJ9YpMWWlNnqF1jiOuY+RIcm5uDgiv4ak7qBBRhtSnVpU6SlB3dFoF6C8haGKNKAZRPRLEA9cJTpSeRMzaKSFaAUonoRdWF4UK6cGShiVL3alpVakDiKzpVf5rgoTDbUrP+ZT9tmw6GEfOpduaJkgdkarT2r+olaQE3oiSlLoXkozqsTloArMWCBnMSbsJWTGsctSkF2prOg3paU2yX7YPApxzY8BPA28BbgS+DDzkvf93DfLNAT8FPADcBVSA88Aveu//faPrjhRJjo+Pc/LkSaC56MGstFWSci792/qPpKPTviTpxLL8THFkl4Y2Fwph6ujWyclJgMRHCYe/DGI/KaX364Ah6bTkuVmzKKSngjQa6cvxAt3uQoQnZbTRsrYd2nYkalH+6w8V6xVvNjc3WV9fTyKM19fXE/JcW1tLgnCEJIVMY7BHGEJ42tIgz19cBpoYgaDJ3g7sikRZw2GTqiVF3QYtwQpK3N/8HPAPgZ8BPgu8Afi/nXOv9d7/vzn5bgH+LvDrB+fYB/4G8P84537ce/9reRcdKZKsVCocP378kELQHY78hsNfhshTmDbwR6vKRpGIliT119ltWkcvjnpHVavVkg5CSEYrQ+/TS9hZk5Rskzx6CbxQBGuosxJytuZVyP6AtC6fHZxl+bylfUhaBlKyFJz3h7+uIaZTHZ0qC4qLudSaToUAdR5tbtUBQqMMWYtYArt0JLQO7JKobG2Ot2mtHrXfUc4XMqVmKUZr2s8iRvkNh5VkGUnSOXeaOkH+vPf+lw82f9w5dwfw80AeSV4Abvfeb6htH3HO3UxdmUaSFIhPUjcCa+q0ZBkiSKskrRnWkmSW6TWLJO3amDqtJ3trNaWXDStjI+8WJLpVkx1cHx3bxQV0JwQkKtR7n5p8L3m0aVaP4kV9SsCMbjNaDUL6A8hZilDKaonRPms9yV9I0k7yF/+iHKeXBNS/xayq8wgpSlqrUbnOKEGbNkUJalUo7U6TpCZAS5LSDiQ/pJWkJsw89ZhFjCH1aO9HMEgkCXw3UAU+YLZ/APg/nXO3ee8vhDJ679czzvko8JcaXXikSHJsbIzZ2dnUNmvaCo3u9XYdBRuKiNUdnSXMTpCkrFpiSVI6OiFMySOkOqzQgxFtmpZgElFY4rfUfkSZUmJJUvyBcHhpOzm/NpfJWrI6rzzrZsytuh3J85W0KEQhMCFJvXC49i/aRcQ1adrvNIpCFLOs1KUQo26fww4hQK0KhbgkrclP2kGIJIVY5dlnEaMeuFklaUlSE5u1kOh0I/Vo71kQ8sOXBPcC28DjZvu5g//3UFeMzeBVwJcaHTRSJFmpVDh27BgQHi1lEWbId6kjYq3ZNY8kxVQlnaj1V0pnJ/m1uTVPSepFpy1JhvIMU8CFHXQ45xKCsUpSm0y1iVYITfyYck5RmkJ+8jykc5SVgCqVCtvb26kONms6CFwP3Mkyt4YsCFKOLJK05LexsZGQpMxzDJGkVZKSR5t1h6m9ACkCsqbTPJK06lGTYYgktRnVEqMNAAMakmTIdZCnHi1JhtCFwJ2TzrlH1e+HvfcPt3nO48CSP9xxL6r9heGcezPwCuCHGh07ciQp0a1ZCPkqddoSo+xrRJKQniqSFelqA3rEpAbX1zqVfdoEZ02v0sFq8rQkqU20Ok9JR5K5kPoWP6EMRkQtCgEKRO3JMfINS/3dy+3tbSqV8OLr0lHKwga2s9VK0ypJ2aaVWcgnmfXchCSFGO1ycTo6VVSoXjFnc3Mztdi4zqPJ2EZtDyKk3jXhhUynQmzapyiEJ8QVMrdqhWjJM+SHDJlVtTk+RJLakqGJUJtbm1WPcL2v64K59Yr3/mV5Bzjn/grwBwXO9Qnv/avbLZC59quBdwO/6b3/YKPjR4okx8bGmJmZSX6HGo8lSf0/K8LR+iyzlKUekVtVqX2XOiinqH9S7ytCkqI+Q8Q6iAFC1oQp9yXkKJ2NkIbubCqVSjIQER/n7u71pfDEb+eco1qtJoQ5Pj6erOqjO0RtzpVr5JlbQxYJTVJ6QCRkJvuECLUqlGdrl5WTAZhVj1ot2oA0KZv1s5YVWYRlA2r04EYfFwrCCRFryMRqr68jVXX7gMN+yFCgmPU15qlHIEWagkYEqfOF9nURfwLcXeA4Cba5Bsw755xRk6IgFykA59z9wIeAjwF/u0iekSPJqakpoPinjLJ8lSGShPQcthBJWpVpO0RrerUqU/sxQ1GwNojHqhAx5Yby6+kDliRD5SmDCS7L52frf3d3N2WGtdNBrK9I6lFMrFpJ6o4zKzBDm3ZDplaBNbdKuUP+65AFQNSf9z5lLhUlrNOWJPXz1W3QkqPcQ5l8kpp8tK/QklfIdGp9ipb8skynWdfR5lbt09RTQOR82twfSlvTvOyHsO8RWltMH9JTjELbuwlfjzRt6A9UOAdMAi8g7Ze85+D/+UYncM79N8BHgMeA13vvC62CMfIkWaRBZfkqdacRMr1KBydpHViiO0FtWoX03EptbrXBPloVajNt3rSRkL8zRKwhwpTjtN8sZD7WA4BuIi/gwT4nqVvpEHTZtV8y5F8UYgRSJKk7aNsJahOalBUOt7cQSUJ6ScSQaT5kJrd+aVGVWn1Ku9Gmev18LUHaACbdpruJEJHoZx0yY2aRJFyf+yrH5QXe5PkXrYlVP3frh9TqUd+D1KduEzqitZF6hMOL5hftz0KWsqw2WTJ8GNgBfhD4WbX9h4Av+IzIVoFz7k7q5t0ngNd67wsvMjxSJOmcY2pq6lCDso0kNNK3vxspS2uGDf2XjtsG+AhBZalMqy6kU9THhEy00kFakpVziVlVE6a+jiZTSH9AOVRmq6RtB6tJQdenruvQswr5ZayJSnciUidiOpUBjV4wIM9/lBVwkWUms2XLUpG2fYX83Lp96MGW9V3a52GfW8jvrfNbkpb7lm2iru0A0T43+wxDz02Tb+i5hYhRnok8t7xnpYNwsnyFdl/Iv6jN5qEBUah9hHyNOq0HHaG2ElKSIZJsRT2GBvtyzbLDe3/JOfdO4B8751aBPwX+OvAa4EF9rHPuo8Ct3vs7Dn6fpk6QVeCfAveY+voz733mJ2tGjiSr1WqSzmpkRez4oQYX6jhsx2LNgNZMaztEIbUsE5zk0R2nDf4JEWtWJ5pl4rWmYL0P0upX34PkkXrR96brI/QXqnf7PHU6a6QdGqRImS3JSV7bWclxEF4P0163SPsKDQrsoEETpb4Xvd2a9PV2Ozixx9nnYO9L6qQoGep0Vidv61rXpzVP6uMtMWpVGSJJaxK1JCnX0VMzQsFXVhVqAs1SiCHSDw0GdHuTOrODK123ep+t9xCynpm2gllRUFIlCfWVdtaAv8f1Zen+e+/9fzDHVUhz2z3ArQdpeyzAbcDXsy46ciSpTRydGJVJupHCtKasrE7MpqvVaq4fM48ks4i1iO8zZN7LUiFweEqLPsZ24lkDBZvW/7MUZ9EXWpOAnNO5wxGvofaQ1zFZ31AWskbreX4+OxDTx4YGZ/o+Q9tCv+12S/ghNFL3gryBhfazWVLJmyaRRZghValJLmSiDZlIQ2ZdS5K6bJYkdfn14MpaOKyaDg3uQurRPoNGyHruY2Ppr91k5SkTvPd7wDsO/vKOe7X5/UdAsQoLIJJkIK2Pb4Sszkb+h1SlTmsysOTRKG3VZzPmWk2MQKYJzpKsVqhZpB3yT+qy6cFASAXlKc48k19Iydtn0Oh/1ja7L+t3XhvpBrLaaJayC+3Leg9CgwateiCtOHXnbwkiiwitYmzkh9SEpckqNPUmNGHfkqRcP+TbzjKXWpKUfbp+QqSo61EPGrLqut0+KZTOei+y8keMGEnCYbXQqFGG8ubBKoO8RhryPzUiBau6LGFq8rHpLMKy27MIT9KhAKM8wrTHhMjckr4EK+k8IdOiKMFGJl5t1s6rN1uHoWdadvz/7X1ptC1JWeX+7vxqQIouEZWhgEKlcLYcUSxwAJWFq5eKtoJUtwjSbQuNqCDIUKCUEyxtWqFEZep2xLmFnA2oAAAgAElEQVRFEKVAsUHBJUMhk4LYKA1YVVDFe/e++96N/pHnO3effb4vMs89d6wTe62zTuQQmZGREbFjf19EZKRiNKwNvBJcn8JjUnBSYiJz8qn5F6OwEl6NvFRlAjExcjqze2bEyCSng2uijoGG+37+vqJ/fp99mIUYOdwIsR8LR5JAbOvXbSAfQaZhBo9oBOqFNzOf9anPjDSjxn6IEmViA3IiGaJYmaSUqD2+KlsAVbNun7/Uj/GSfZ4n2snIprf4s98WoMra4Q24ToTPCDKa8sBhP3dtbW1CxQ0xifaZUYeSpJJX5hNU/6B2DNRc6uHMPDqECP1cz3v+d3DHewgZ8jt27OxMf2y7L67Z7kL7GrcR5yQWkiS9cNT2q2rcj96e3kvDUY8v8i31/WZVoqwqgWmSzJRopD49/tBBRRyurSzk5/Ixn+C/uro6QYz+rw0JX6+UMjFSdxHAHSgmKv95+WcicQJaX1+fGDXqxMjzD3UuYrYqjY4ajfyGqgRrk+9rKjkzfUbqeS+qEJhtgE3WTvD+jKSy/UtLk3NYnQBr14jamr77LCoWjiS5F+WICu7Ozs5MRLlfphLdjgq1/0dkOoRA/XwmTSZUJdNIYWYkycSoJJkpQQ8zeSkZslr0qSve8GlaSykT+/mZdITvIsLfg5oqgUlTrU5/cAJcW1sbk6SH/VoedrXJc0111KnHUfNqZC7lhRpYeUaEp8QIYGIf//OxvarCyCoVhYdiKGkNIUI1sUb7NW4jyUksJEmymcHMxuYKLfzeEDOpspnCEcWtEWm2PSTttXDUO4zCrBgdkSnX92em3Mws2zei1uNlC7H7CjdOnrxW6crKyviYN1rcUYh60UySTsaLDs8PHujCZZzJzMlufX0dZt1cYw+vr69jfX19TKRra2tj0tvY2BiTYbRwOKtHVpVqiq2pRyCec6gmUg57HH7WiPBmIb/96gxzmNuq7Bq1+0QdaT6W+dobSU5ioUjSG22gPuyaKxYXJPU3+jnZvlrlY2gPte+6Q5BVSDVB8nH9+TmsyHS+XZ+5VUlSV/lxYuQPBuuSaqurq+N43kDySFhPA69MxA0im3YbQU6CRzhz2VBfpCvG5eVlbGxsjBd5X1tbw8bGxtiH6cS4vLw8NtG6wmSzLJtrlSQjP2RtmkVkLgXyUaP8jH6MMU/nVbeViGqWIf33dET1UjuzEfn1WZVqirJhFwtJkqwGNRxt+88bX+3ZZWbZaDsj5lrvdRbzbrZP80HDui/7ZdM0alNF+tYd3dnZ/fqGk6fnt5Pt0tLShHL1bW/kveGMKjyblhfVxJrB81Q7hGqaZGXHvsf19fUJkjx16tSY6DY2NibO83Dk08xIMlu9husPE2ZmKvVnisI1DOlsKtHwtvt6fb/nMVs8MpLKiFGvVQsPOa/vmRcdC0WSwG7PbogfIvp5fFaVUUXKzLIcztRrRJp9irQ2im4WU5D+RyaazPSazbPUz3M5aXojeP78+XFD5yZuN7U6GfozenxvRP1cfp/8TJ5mVroNk8jM1EDso3QiY8J0tehq082z7qPkMJOkm2HZ9+lloTZYJxpc4+kdapmJoGRXU4KRWTPb7/nsaWOyjO7L4eie6h7hX40k1cXSlwcNC0aSkZIE6stCZaYcVpU6yMcLWVYxI0Kr/fp8KUOJdK+IBvcw+Xh+RH5IJUlfhNvzbHl5earx0DxdXV0dvzc3z/k2j8rUNHsam4qsg/OcG1vthPHPCUz9lu6TXFlZmSDGjY2NcZgH+7jplUmSB/QoSQK7PsiMJPda5pWQPG/4GO/XY74/I68hFp4+8tXR25la1PT0mWA1HQ27WCiSBDBWIVyxuBD5qEivbF64edvPc3A4qqw8wEQrSkaKTKQ6b0vD+0GENUQkzVAlGY1a9ePLy8tjE6k/a1Tx/T0B3YLr7peMBmVoWvyfybEpyRyeL5xf3NA6tFPJJlEmTDeds7LkAT6838nUSVDXTuVPUPkAo4NCRLBc3pV8ohHg2tlQE3ZEQBlxMeFF5BvdR+N4+viYnpcp14YOC0WSrCRZqTB5qcJkklTVEpEe+yD8HG64/d5KNpkq1JF7TJjHBWwac9Onk58OwWczE/stvcF0E2uUF4qoN83XVBXZKn8MNrdy2YwGdim0U6iKU+dGOtmxf5LNt9knrI4DtDMckZ63L0OQKUZ1afg5Ssw1C09NZWqchjoWiiSBSZ+kk5Y37MDuQBxt0DNTZlYhuIH3RohRK5xM0qow5zEnHTQ8bSsrK715O5QIayYo3tYGxP+j3nLDJDJlwvka5bmH+1CzljCB6jQQnuZx3MBlmv91oE5EpFEnOiO4mnKMlKxvaxzdr78sfQ0LRpJuxuPBHsBkwdbeIqtFVnXc4PP5Sog1U4aHaw1BpjCPMzJSj54ha3hrDUWkFNUslTUUDTk0jznvdGlBVe9uOVBTH1+3BiXPzJx+nFDrLEf7amVcFV5mPo2UJL+PPmKMVKWi1ZVJLBxJeqHhHp5v+z4lTD/mhbGmCtW8yJWdCZTDfs8hqvSkICM4nR6S/dyvyavvuC+TBwXp9SICbehH1FmJOh6et/yJNH0X7k/273X6vFYe2KV+aK8PXD+PO5QktR3JEBFX1EGJOiyRKTYi1cjPn5FkU5J1LBRJArs+A1aP7jvTws7kpT3biNi40rCp1v9VaUaF8yQ0DjWUMr16ji8r5yNdfSAPLyDgYd/v8c6dOzfejkiTf954Z2akhhiZ6nHy8w4iL0bv+byysjJ+1z5Fx+O739F9zuqjZLeCz5HlTibQjWw+zpjVTdDnH9TFOlS1Z4RZC/N9ol9DHQtHklwwuJKyr9KP9fkeuceoCtFJN6ooHo7SFJHvSSjIpex+FcSJ0MNOfr6STo0knRSVIJUkWW2qatT88vfRVGUM9g86IrMdK8Zozd2lpSWcPXt2XIZ9AXomx2x09s7OztRcWU/HYYxs3SuUaCLiyQgz286UJvseI9NrjTCj62ZEeRLam8PE8Sx5BwTuvQGT6i6a5Bv50pwEvZfnitR/vu3XrJGknqNmGj7ucY6b0vS0R+rRSZKXmGOS3NrawtbWFnZ2dibCNZJU0ys3HtpbVz9X6znHYGXHZR6YXpABmJwTy6pSlSR/Z5JX0eF34u/KFxEAJsu9H/f5l8fJT9nX0e0jPz23RmJ916+pRzW9alr0mVodmcRCkSQwOXE68vVxxdVlzrjyKmkyeXJBjPwVAKbOqcWL9h81nAB1sXJWj27+3NzcHJPk5ubmWGVubm6OCXRra2t8noddpXgcNtf6tVnVqJWAVYw3sP7NyYYOPIGfFxfnMsY+XgDj97K8vIyzZ89OfKFjaWlpvN5u1AF186uH19bWxmXGfZf8tRH2b+pKP0dNmDXlNgvBMZHVSDNSjx6O4mXH/D6ZZaWR5CQWiiS9YPSNGPVGgicIR6NYPcxzo9jc6vdUxcnnaXyPW5tvxebcg4an3/PO1SKbO0spEyvpDFWSm5ub4/OcMF1VOkk6sXrY4ztJ8iAeNpl7o2/WLX3Gat1NgosMV3S8+g1P5Ffzq6pHf4fcEeHOpee5k59bBbyjcvbs2Ynl63RRdCdJnk/JXw7x/f5+eXGDg64XTFge1g99czgjT3UP9CnEGsFm9xlCkpGabNjFQpEkkBcALahAvEJG33mqFL1hrplWPcw97WhOZCklXH1HBxXtBVyZeMUVbwCYGL1S8qeuaiS5ubk5JjI1t7JP0s/zOH4/Huyjfkh+D+zvclNfNB/WLQSL9tksLzO6Vip/zkpJMhqd7aqO89DLAXfyAEysv8v7XCGura2NiZSVqZKkE6hZ/OUQXbyAyduffR4rTE0xRoNrPI6S2FBlye2O3k/j8Tl914zar4Y6FpokdSSrmjcBjAcUeNxseHdGnhpPC7WaehkR4TqRRoqY40SjFaNreZgrOpOkmzgBTKzDGpFkNqLVlSSTpCtGV3VOkh6f1adfzxtlVracd55/3HiyuvROhjfwbKplNarXPolgP6MOnFFS4Y8hOykxSUaDyFhV6oAcVpU8h5LDHs/LkJOkL0HoBMofbfavw2g6PQzs+jb5udn0nlmRIvKM6kykyjL1WCPI6DrR/WttTbat+7LnaObWYTh0kjSzuwB4LoCvA2AAXg3gcaWUDwyIe1cAzwRwfwCfDOCfAfwmgGeXUj4x5P5OMkx2SpS8z8OOjPAYeg6H1YfpafJ9Ozs7UyvW8HE2xdYquCLreTIpMDHynDY2afJHk50IWT0CmPJJKmH69fhTWVEcPo/VLC/VxR0S7mS4r8s7OUyM0TMPacyijlDUGEVlog/6DtW8r/9RmE3wSghKFp5Xuog4r5vKZMp5y3nF5OPP7PH8vbqf0sNnz56dWODcTa9uRo2WrGNijEgy+nIIDxhS0o8IM3oPjEzJKeHNSpjZ9Ti/s/QMSSOfm7VZfdddZBwqSZrZBQD+HMAWgEcAKACeBeA1Zva5NaIzswvREeoqgB8D8AEAXwzgGQDuBeDbZ0lLn9rLepZZJVJzqpKR+jHpuSYIWslae/Pas496+RzWHq9WWCZGniCun7risMdTkmQlyYuaa5gH3HgcDzsZexy/HpM25y+P/uXnZRWpJjAnWc0nP/cgcZCDTWpEy/fOiFV9epES9WOuCn0qD6tFJyc3y9rID+zkGRGeX99HsbqSjOKwT9LDbu3RBdJ9v3YGVP1q3vSRppY5VWe8nYVrpKn32A8MJchGkpM4bCX5vQDuAeAzSynvBQAzeyuA9wB4NIDnVOLeFx0ZPrCU8qrRvteY2R0APMHMLiilnJ4lMVlvfa9+CyBudLUh9+NMjDXz6aykGPVuI+XEqorNmDoPLvvslU7iV8JjAmX16enggT9KzNHqOdwIeV64f5GVJFf0WUmPG0u+T41wav8angU1lRod02edtcGN0sxEos/Gpn8uZ0ygbiJ1v6OrPV6fNVKF6iNl36l+05KVpKpKnoaiH3Bm3yWHh9TDvnel70RJMtrOFGbtfenxqKNdO7/vWRoOnyQfAuANTpAAUEp5n5m9HsA3o06Sa6P/j8v+mwEsoTPdDkZfwxUdz9SlF0g37UXKhpWkwxsZYPhHk/uIkdUTsDt838M6t5AJi4kp+2gyn8fkF5FppD6ZjD0MYByX0xY1JpwfnNd9jQmHeTsyUfL78Pvwe9F3Fan9Ie9Skb1b//ewKmFukCMLgja82nDX0pGlWzskXgfcGsHfCTWzicFoToBZ2NWff04rIsnM3MrEyufzAupKkqw49as7/t+nMNkiFb2bTGn6+4jeVdSxjpC1Vf5O+J+PNQzDYZPkfQD8frD/BgDf1hP31egU50+a2WPQmVu/BMBjATy/DPRJKvpMK7OOiot6gVzBtOA6gdamfPC1+R7aIPq+2iCcyNdYyqRJM/oeJMdRkozi8IAYHo2q6VGVq8+jecqDloDJ7/1pr18bNvVL+S8aqJKZ49i3x4SZmcX7zHZ971jft3YYhvjAAEyVCb6uxsnKWJRObXA5vuY755UrTPaDMqEtLS1hc3Mz/LZkRpIAJj7gzJ/aUh+rh5lM/bxIYbLK9GfQMjf0vWr+1n6cnxG4LeG64fu03clUZpTWhg6HTZJ3AHBTsP9GAJfUIpZSNs3sKwG8HB2pOl4I4PuHJqDPnBIdq6RpXOi0lx6pB73mkIJaq1Q1YmQyjMyoOp0jIzmdctGnCvWeSozaqGfEr+A89AZRSSoiOW74AEw1iJnfzbdVafB+PxaRpoYj5RERT6T2uLFUIuSBTJ7XwLTVgBdc4Dga1vekptSa4uHj/M40D7RjoXnO2+pfZHMrkx8To5Kkv3cmWf00VzbYpzbwJ3vX+uwR+N1neRh1UGoEpvnNHZnoHCfVWtoaTtAUEDPbAPAbAO4I4OHYVZJPBXAOwGOSeI8C8CgAuPTSS1MyzIgsgxYk7sFxT83NTH3gwqqNpaoGbvj8fFaF6tPTSeCeLiU8b0gzhajEWlOpEZnzcw6t7DXy80YMwESjx0oBwNTAjlpjy/GjhjMyzUX+rMiH58/T9+79fwgx6jvIFLyG9f3qedzxATBxDqdH3zWnn83CNUT5lnV0+F1xGYgUpyrJTInyu86mxyhhqllW052996htiZS4btdUPStEJT5Wl/7PYbbEROlpOHySvAmxYswUJuN7AFwF4PJSyj+M9r3OzD4G4Doze34p5S0aqZRyHYDrAOAe97hHGUKS/C/XmlIAataI4mbEkKkoNX+xUlCS1AZRVV2fKoxGkGYDaqL7cDqZtCNVpHnmiPKPGx32CfLqKkpk7ItiRaENZxSOGk6+npIkpyFKp/oxtfMVlSMtD2wWzUzotQFX6mOOOkE+Qpk7URl5+vvl8NLS0kR69H1HnT2tCzXFmRFRtIBARHhKkgCmBg5FSpTfe2Si1c4Sk3pkrcrKQA1qWYk6Ixn82txmRXWsEWI/Dpskb0Dnl1RcAeAdPXE/B8BNRJCOvx793xvAFEky9kKMiqxQRaaN6Lg2hED8JXEdxALsTs3wsA686VOFqh55QI4f82tzmO/DJrzIH6bPFuWN/nPD4mCi7GsEmQg5HE0r4OXNeE6exlGSZEXBA02YJFnZqjmuz0IRdSzYn8hlRH3JTJi1UcnsS+bVkXSEssfxkchKsv5sHvZGWAcU1UzGGWHy++f8YrO2+gyZpJQ8o45SX4coCqulQQcBqXVBlfCQjjk/e5QvUUdKz8s6HHo8I+shBLxoOGyS/AMAP2Nm9yil/CMAmNll6KZ3PLEn7ocAXGJmlxcaHQvgS0f/HxySgKyQ9vXwuEByz6wGLcTc8Pk2qwNVCkxMAELVkKlCJ1NeFSfzLzoRqolWTWpMkPo8kW9DwcQBYNwA7exMfs9TG6Fo9KI3bkx4PkF9eblbwoxJkldx4QnqHIcHfUTTDzzN2lhqmlUJ18pXphQ0bzPTNqs6fddKeH4NX5zBy5CvZqQLOqyurk7EcZW5vLw8QaxeH7hT4O9Uy7s/p6eZ99fKkHY4IksDKzzuXPm+mh9TiZGJ1d87E2t0PWDyiyc1n6bv82fielHrtEedi4ww/RrcVnHHNMvvRpKTOGyS/CV0g2x+38yeAqCgW0HnnwG8wE8ys7sB+AcA15RSrhntfhGAxwP4YzP7cXQ+ySvRLSzwZgCvH5KAqDAquFCpfT9D5lfShk8bQVaLmUkzM4OqKtTpGEyYHIdJVkkXiAdz+DPWzKhRPnOD4PE4H9W/qKqQlaCGmRg9zOTnDSGvAeoLejOxesPGJKnqU81znm5WlWxi3U/UykfUOVJV6ETo5UBXPeKlAZkk+TxfTpDP8/Dy8vK4nDhBephN8svLy1NmZO18zVO+lDR1wFbW0WGS1CkkmQk/mo/JhMmErWVcSbPP6lDzZ3o+cllRsDLtU5p6vYZDJslSyifM7AHolqV7Kbq5jX+Gblm6W+lUA7CMbv6jx32/mX0ZgKejW6XnUnTkeh2AHy+lDJ41XjN9qWJkqDmJwxyPe8zZIAdu+PpMpxH5sSr0cE09aoPKpjhVr9yQqfrNzDGZeQzAePUb3semVG9o2FfIy5YpSfp56+vrUyTpDZZ+WUJJUonVSVLJOGs4DxOqwB2RiZV9itnSgOvr61PE6Pt5zdyVlZVx+VteXh6TrueXq0cnyfPnu2lM3OFy0nR4eXIlo4Soflh+1lnLnRKSLiygJvwhqjIiSV3lRztUek8mUH+/kTl5LxYvzysN+78ry6HxG45gdGvp1mj9lp5z3o9gcYBSyjsAPHSe+8/Sc4p8AhyOiFEVIv/XRoNmxKjEFg2sUJ9TbbBONvoxI8Zaz157v76PVaOSIvfwtXGKTKdOeN6oMOEpSW5sbIwbo4wkI2IdQpI1K8JRwdPmJkG2FPhC4Ww69fftee1h78TwNx3PnesWIPey6O/CCc5Jzht1j+/pcAJgkvS4wLS1hs1/Wub6yqJah5QkPcxElI1kzkjSy0REmNnAsEhxer5Eg8H8WSLC9GPzEKaWndrxhl2cmCkgB4God8X7ozBXUg7v10hEJkYeUKMkyaTIJBkpRja39ilHVrp9UD8iN5y6P/INsZ/HCcsbfiVGJjxvrNbX17G+vp6SpDdQQ0lS/ZgHYTo9SHBj65+gykjSjznJuuk1I8nl5eWxMvV36arS37s37n4fAOP7OJjwuFPmWFpamiiLUedzlvLpBMrhiDCVyCKfJJNmNMhLO3vqNhi6EHtt8A8/z6yE6XnK/7VzGjosHElGBSAqOLxPf1xZ2XQKTI4GZbNmRFj+1Qz1L/KwfF44nEmS42h8Ha7v+/UXPVuWR5EiZGXgUMUY9bLVdOoNCBOemk79vI2NjZAk3YzqcTY2NkJiXFtbG3+XkO/pZt3bCpgwvUx5WfDPTrFP0sNOmNvb2xPm1tXV1fF5q6ur4w9k+/t0YvVBPaw+nWTdwuCK068PYKLT5mnOFCaXXz/XoWWXiUQJU32Ynl7u2DmZcQdvCEkyybLplTuITMaRH7OPMFmt13yas6jMzKy9yFhYktTCEO1XQtSwEmNkxswG3mQjEZkkPb6SYWZGzYhRzajaG4/8Fo7IN+LQnjo3FOyX0RGk0SAaJ69IFW5sbIwblYwka3HUJ8kk6UrytgzvXHhZ8PxScysTnn/Wysu2N/iuGD2O57ETq6tPJ0y3arhKZcWpYa1PACYUrVspgLjzqp09hSovtXYoYSppsvqLlr9TJalhPS/zfbLvUk20TJhsolWFGfkz+b+GRpKTWDiSVGLwsJpRI2JkMyorxJp/MVJ4HnYl2UeSOkBHlWRkymV/qJqv+kwu2WCBqHFRX06ff5H9fpHCY1UZqcKaknRzKZNkdB9Wr6qEb8tgMnDyiqwCajr18uMkx35Iv57HATARR03wpZSJ+3CYiTHruHA9dWU6pMOriMqyp5fJxwfecPn2fNFBZwAm5uGyqvSyxwqT1aN3Fll9sj9cTbRc9/i9ctifIavLDcOwUCSp6qlvoIBX3Jp/EcAUefGAGh2E46amSCHqYB0PK0nyPT2dTNqsGCOzaoRajzPyL2rP2gnQK7ZXbt/v5MWkmZHkysoKTp06NUF47F8c6pNkkozU66I2FN44ezmPSNLD7qMEJufWZcQKTJKkl3EmVs97HuDDJOlkynEcvj/qxPo1+dyaGyEiD1Zlbjr2ToXn29LS0lg1e9nzb2q6yTpSj3wNL89eXv16SpL8JZTMj+nHVA17WvX59Jk1X5qSnMTCkSQTSx8xqg8vUoxuOlWTakZ+kYk1I8natX07InBVixk5KiFyBeKGQn02bHLiSu/HmCTV75eZPiNVqD5J73HreXyfiCQXWT1m4PfKA3KYvDzsJlo2l0YDd9hE6yNlvfxmJlo3w/IAoeXlbnoJ38frCxOrl3ugvmC8E3qmOGvuBVVorOo4zKowGuzj9UWVZGSiZX+l54+aaL0sc71khRkpy8wUq2gkOYmFI0n36Q31L+r8xRoZshk0Uo88CEdVpU7b4JGrPLiBSZ5V7l4UI4e9YgGTDaiORmWSdCJSs2oUZp9i5CtUVcgjWqNRq6xEvQGKFhNwkuRGrWEXbk5UM6iOVPWyoCTp+eplmkfH+gIE7u/c2tpCKWVqgJDOzVxbWxsTqMd3Feb10O+pI7v5GCtLJcqoI+moKUy1qkSEGbkg1HepJFkb+BORZOTHZMJUVelpUD9m1rlo2MVCkyT7FPv8izwlQ/2DrAr7lKSaW9W/yKZTVa/ZIBzf9mdUaKWPesnc+9QRdk5EXoGVJFmtMWGpwotI0q8dmV41TmY6ZbMuNxo8KvG2PjhnHrhy43rBjacqMmCXdLwsMbF6vWFiVSXq6tPfK4+OjRYt8PD58+fHcbw+eHz3sfI9nTDVQsTPpXWGn5H3RXXHnzfyVTJ5MeFFJJfNwYw+PA1gworjcbju8n24XmtHmJ+X86RhFwtLkn3EmCk6V3JDTafRIBxWonxP7g1HBM7E2OdvAXK/YmY+Ut+H9nKdpLyCZSvhqH+RyTSamqFxoqkZniY1nbLvkxsdHiXYCLIOLhucV9yIsjvCwWWO/ZNOZExYXBYzs66rwJWVlSkTr4fZ/Msq19Oo9ZIVp6fZSVWVpT4T16/INcEdhMw9wQTqYS6vAMbP63XPOxjuq/Ry7ErbyZjVpz8rl3uO42nzMHe4GynWsXAk6SYfVoVOYEqSasrhCrhX/6JO29D7s4mXiRGIP1KsUDOq+heZJNWPoeYf9TU6Sfl1VNWxT9J9jTx/0UmSCU8VJxNrjYyZJDPzEw9gaOiH5x03wmymZCUJTKorHriTqTo3l7K5lk20Tq7ZogfuO/U4Xlc4jvs3vV7yCHJWlfxcrJxrhBn9q3WGSdFJilUmK0zulHrnW32S2YhYNtf6saiDqIN9It9lM7fWsVAkubOzgzNnzoQmTfUPsnrM/It95lYlSZ2mocSoJi9Pc00tAtPEqL4Tb7wiX6P3OCPfB/v3WNVl5JX5JKPVcyLCi0ynfE8mY28o1MzEDRR3EBr6oWVGB70Ak6ZIV2VMkmz69MabCa+UMrHKz7lzu18bOX/+/MTKQLxq0NmzZ7G1tQUA46+VeBz3aXId9Wu7f3OISwOY/ixZZppVH2bm0uCOGpdPr19AvPi6x6uRJJtWIz8mgHF87fyqqmQ0kpzEwpHk6dOnpwgrMoMy4ekoVia/yA+p12Zi1LCnKxtUAOSm1Boxqn8x85FwOBtUUJvnGBFe5CtkkmSS5fmUOm0k8tFoRVfzMRNjU5B7R+S/Zp8WMD1CnM2KkZJk/6IrGPfhsZJ0MltZWRkrwaHEyisLOZkCGCvjbNR4Vi+18wrEVhzuPHC9ZMXJylv9mEqSbC5VP6bX40xJcn3haSeRS8J9u4xGkpNYOJLc3NycqhhqRmU/pPoXvWHwygjk8yS5xzoLMc5iSs16rEyM2mPl3ieTpA9ddzOqkxcT1lCf5BD1yUpwqOk0I8aIEFtlnw19lgr2x6gdf0UAACAASURBVHm+e1l18nT16dveCHt8P87q08Psl/NjkYnWTZgeZ3l5eaxS2d/Iao3Nun499m+qqvQ6ySbaWn3l8hcNeIqenVW45xH7ZtVcyvXCB9H1+TGjDiaAif3N3FrHQpFkKWVMktyT5LVSo1GnSpKsHoFpkmRfZ23gTdQz1QKakaKaFJk8mCQzUw73OKMwm0E5nvsN1XTqZBoRK5Mkm4zYdOqVXv2jbFLSZ+aGSUmS85QHVjRMIzLzR+VQLReuCrVTx+qESdLDTgBOZEx4rp6UJL0MukJ0Vcg+SVaiXsddcbJPk+u1DsjjuhyNFZjVJaJE6fmnvlHvIHBd1oE3qjKjVXq4LnO9Yj8mq9dISTZMYqFIcmdnB5/4xCcmSM4rU+aTzL6oEZlomBi9cnC4z2QDTK/oz0rJK4TvZ+LgyqO+RjW3eCXUr16owqv5B1kVOuFlqpD9IjqkPTOjelpYPfJP80lJ0fd5XrGyWXTC1LzS8hl16HSgiofZjOpgAnEy9Xx3YuWBNzoIR/2LXEe97nrH1v2O3JHlOPzdzPX19fF9fIF2Jkmu4+xKiTq8sw6u0zzU/NTyyXm7vb094cf0OuH7mSS1LnEdi9oCJcmsXToOMLMlAD8C4NEA7gTgXQCuKaW8fMbr3APA2wGcAnCvUsp7a+cvFEmeP39+TJLZqFUdeOOVTEe9Mhn2EaM2NIqaGZUbdTadsuM9qyQAJshP1Vo0IEaJsc9XmPkxmSSZ9Jiks5F3bD5mYlRExMimLW6otWGP8j361/BxBJerKBw11rodDVCJGvyoHLMZVolAzYxsjvW6wuZON4OWUsblaGdn98slXvd8//nz5yemWbFPkonRidXjMLHq0o/sx1TXCSvOPsKM8jB6N0yabIZ18yv7eiNrkRMmd4y5Tqm1Bpi0Kp0gn+QzATwBwJMBvBnAdwD4LTN7cCnlj2e4zi8A+Bg6kuzFQpHkzs7kwJ1ozmJUMbygew8TmF6ZR3vdUWPEiHrkHI78bn2DcCLfRabqaiTJ/kme2uGVzO/DSlSJUX2KkY9Fn4c7A6oU9T2yr0jPdRMW+38i8gOmP9gbhaPtocdmxdAGKjovMvU5soYwUztKnDWTIoPNqkyGTnpOCg71ywEYm1VZpeq0D/VJ8ohatwq5idXrrl9XFasTq9/HTbTRWAM1ywLxKl3a0ehrD6J3FZllmTC57vBAKQ4rSbLvMjO3HkeSNLM7oiPIa0spPzPa/RozuxzAtQAGkaSZfSeALwDwbADPHRJnoUiylDIxcCciSVWM3EtkwuzzL2qvURvgiCRZRQ0hxsiMyuZOVY+RklT1qOZSvpaOnFMfoqYnMp2qGVUVo+aP55GqElWOfo7uqynEIdsnAX2NWq1B1vAQ9ZmZFLWMc4OdpYvNlDx4pZRJE62XsxpJuu9ydXV1TMrqx2R/J8fhuZk8OjZaOhLA+HrceWZlHFmVMsLk9xC9D7WOaEeECXNpaXcBAw8rMQKYaAtOiE/ygQDWALxM9r8MwK+Y2d1LKe+rXcDMLgHwHHRkO3iFkYUiyZ2dyXmS2RDwoRP7I/9in2JUU2qkHJkko9FtAFJfn5MXh5UkmfxUSSpJRgNq1FxaM53y8+izqX9RiTHLWyVOBhOtvof9xqw97lnPP2zCHqI8PdynjriM+zH1XQKYGO3NZKjE6OTl9dXPYdeJhnX+Mi/4oepRiZHHJOj4BFefmRnWw36MCbPWfkQdayZK7QRqx1pJUjui2pa4T/MkKEkA9wGwBUD9hzeM/q8AUCVJAD8F4J2llJea2dVDb7xwJHn69Omqf6HPvxgRIyMjRWD6MzxMFuxfjIgxMmNm/kX1FXpFYcJbWpocuKNO/ch0yurR08zp54oahbkyayV3qEJR1Vgznc5KKtH7G7Iva0SGNC59psohiM4bum+W+zCyPIj+M9J0MHGySlJicJXDCg2YnDPp/kkmxmzOs/saeeAO+yTdcpQR65DlJv08byuGDPyJVGaWp5xvTJrsf4863Wyh4vp7UsytAO4A4OYynbgb6XgKM/sqAN+NztQ6ExaOJDc3NycKrRbYyIyaFdaskVb/oppRgclBOKwQa4NwMjOqmkGVMNmRP0R9MjFHxDjUdDpELUYE6e+Kj89KiEOILAtnaem7R61xmaXhmYXcsnPZ16rnZeG+a0aomQy5U8nXVguA+i3Z9Or1j8uMDvZhMlUzKBMmD/ZxhcqE5/FVcXp8HTjk11bC9Pu7VUrHN2j7k7U5NaUeKXs2yXI74+9AB/5xHuu15sSlZvYm2r6ulHKdlIOvBfCnA6712lLKVfMkxszWALwAwHNLKe+YNf5CkaQX6FmIUQsQQxWjh5kUdOANhyP/og7C0aWo2Ifo6o1HmppNf+dRTad8n5oZNTKdRlMztAPg1/RwnznV843zOhtQU3u3jCHEFvXQNTykgaqlo2+/YghB7jUcdTj6CNOhpFtDlPdR41tL19LS0oRZlRUnhyPCdPLxuuHky8vSsU9S/ZNMsh6fR9Hy3Ey/NitWnmfNxMgj6v2Y51c28Cf6ab6qEmeV6Yrcw0yMbBXTa86Jj5ZSruw5568A3HvAtU6P/m8CcHszM1GTriBvRI7HAbgEwM+b2e1H+y4Y/V9sZheXUm7JIi8cSepXQIBh/gFgukFh5cgEoObFyL8YDbxhk2aNGHmgDatCVpVRfFWpqhAj34WaaGo+xT5i9PxSc1EE91X1vU8NZ6SWHa/996nJ6F7RdrZPMQ9BOtiKkRFlVo77zqvdN9o3tPHVa/szuKrk9LBSciJ04gImR5p6HYsIz0e3epvAitPbCFefTKCRidbXmOX4EWE6mQKTvkv1Y6rC5HYqU5aax6rmnRi57vqgqn0gxZlRSjkN4J0zRLkBwDqAe2LSL3nF6L+mEK9AN6/yg8GxvwXwFgCfn0VeOJJ0v8TQgTdA3PCwf5GVk5o0VIVFI0BZFUYDb5jkZvnuHKtHYHrFDiVGVYVMjFEHQPNA1bSHOf81PGvjWiO/2rHIIpDF3wup9qV7Vmi+1AgrU2SZpSMjQmD6PfaRZqQCo21Flm+qJlk98n4mDDcd+nuOCEcX/IjmPzrJRYTJPkmeDqJkqGZZHuATzcdmValh9WNGFi/Pv6j8s8L0vHXC9DoakeRRkOYA/AmAbQDfBeAZtP9hAN5e6iNbrwXwItn3IHQLEzwM3aIEKRaOJL3HmRFjrYFRMyqToTrEfb+aMdm/yIRVU4I6iIZNrEqYHica+MPTMVgVchjABGGqWuRGNFKMnmdcSdX8U3s/Gq4pvD7yqxFg3znZYIaoMYr+s+fqwxBy7CNJxxDCy9R+jSD1urX/KF01RHnl8b2+uU/R34WXS1WZ7JvTuYyuQAFMjXSPBuHowB0mTD5PleTa2trUKFoP6/QSJsnMj7mXsRNR5zGqm7V3cNQopXzYzJ4D4Elmdgs6BfjtAB4A4CF8rpn9GYC7lVIuH8V9J0S1mtllo+AbS1txZxI1YvRw1oBEZlQAqRk1I0lWeJEq1KkaGWE6WWaDfaL08OAa38/Po8QYEWFm0uM8npcYdX80uCAjv+gc3a/+mCHEGpWfWmNUe1ZGRiKzqMdof430gMlOThRH3/NeCTQ6L3vOWlnxMuVKkq/Jasn3+TmeLiVPJ5bMj8kDfDjsg3OY8JzAddECJlaO43WWiVWJmcnYr70Xwsyg9WzIOzhiPBnArQAei91l6R5aSvkjOW8Z+8htdowzZN+xsrJSbne724XHuGJz47BXYvRwNGpUiTBSiLVRp7P4F5kYlST5+WrEyIM2aipC89JR66nOowq1MVDzU2ZOz/brtWvp02N9zzkrhhCkI+q0DCHMGvkpgUaqtHZdTbea37PnyxCpIWD6PemgOyaPyNfn+3l0LO/PFF7tU3nRPEtejCBSlapeo8E+0Xxufk4mzVonUfHxj38c586dMwBYXV0tl156ae/7qOFDH/rQm0v/wJ0Tg4VTklEDr41BpqicoID4Q6lMWOpTZFUIYGJBcFaVZtOjUyM/ppMkEzMPEGISZCKs+RQz/6Lv421GRg4RGUZEEzV4NVLjX+1Y7edxeIDQUCU5j5ociohEhqpHDg9Rj/xuI/UY1ZGMJPeiPv2a+mx9+aOqkq9TyuS0ET83IkyeJsEDethEyyTpxBaZaDM/pvokdb3YiGTdXMt+0MwMm42OjQb+eH4skkCaBwtFkqoMM2JkAlHyyXx9OrXCz8t8jdEgHA9nJlr1Kfb5F5kY9TkjxZg1Yqwkh5BAnz8vIxwmvJoqrIUjRcFE2Kc+hyrYvvyI8ibLr4gYakqSsVe/Y6QQgV2/H5cPPS8Le/y9qE8muowouRxmiDoQ/u6iMIDUV6l+TB5QwyNdM5+mh7PVgLJpI1tbW+P7RHFYVWYDkbgzwCQZqUzN70aek1g4kmQ/nFc6JhU/B4hNqhFJRvMPIyWpJtbaguDRnMXIjMoE7ulns7A+W9bARarDoaSXISKJGvko8Sh56bE+Jcm95r2oyuiafEz3Zc+s4Wg7gub7EDU5pHNTI0ZVf/7sWkf6Bmwp2Q05N0pb7XmGlkOPywTAaVPCBHaV5ix+TA87sZYyOWfSw5FPkkmSF0Dg6SmsciOSHDrYh0k/8l02kqxjoUgSwMSUDDZJDvU1skk1m+eYTdNgxRhNAeFrMxFyGvwcVYzRwBsgNqMOaZCGoEYcNVKMiLFGin3H/D59qlLvH5laVS32EeQsSjLan+V5TUlm20PJp08V1gjO96uJdghpDjHl9pFmX/5keenE5qSQEaan098TH4tI0smTzbJOmhHJRarQPwPm5KekG5lra6NwdeSu319VclOSw7BQJLm01K1XCkxOc4imcHBYVR0TnpNcNAhH/ZMZMWZk7OcpMXpFrs1fzBqiSIk4hlSYPsIYohz7TKd7Icma2qzdsy/NvM3PG6maw1CSDvXhDSGaiBj7yI/DGXkOIcxZiTl7Jg335VOWx0yY/H5928/x98wr+7h61AE+wOSi5jxFxImNSZLDPNKV15Hl5e8y3ycvuedkOsR36WmetXO8aFgokjQzbGxsTBAhEA/CceLJ1lHlwTXZqFMzm5jkP8S/6OcxEbqfKJumUWuEao0L0N+YR2opIo9oUEBESEMJr6YKa8SaEWCfGdavwf/R89b+a+GhiBqsWsem9n73Ym7VOEPMrZmlIvJP1ohV05D5NPueu480mRD5PFabnBZVkVrW3ETq+9xf6QTGYV5lJ5ub6Utnsk+ylPzj8DoiNlKsfs9ooQX19TYlOYmFIsmlpSVsbGxM+PMiJeeqcBYlyHF4ubjIjwnsmnXVdApggmSZDLN/f7YhDciQCjBELQLTJsmMjCLC02O6yEOmDOcxt2o4Sm/0nNl/n5qcJc+BupJkRCrS/zms/kUHk1ek+mo/v39EjFom1T/JA8hqhOnp5sZbVe5eCDPa5neT5bcTKBMp+y45r11xetnivPB2ppRd3yUwvZgADwpixcojb6NRtB5HSdbjZ9NbtH1oJDmJhSVJJ7CMGJk82VeYjTqNpmNEJJnNWZzVvxj1+mvEWOtRR+FILUYkyUQxq+nUK3zfeXwsGqnaR5ianuhZsm2Oo3nVpyRr+yLUGvSso6PKsY84uMGP4gwxt3J+RmXS7+f+Oj/P7+t+syxOFF/vGZG3hqP/SEX2vQc9lilR/2elyQrU67mTnIe9LfDyzX5M9k9y2Bct4DAPEOI4NRNxU5L9WDiSvPDCC6cIS32NfebWIcSYmVHZdKoT+SNi9Ot7+rVH71BiVEQNerQ/Ig3dN8Sk2UeSEXll5/Wpwlq6srTqPmB6UfWso1DLz0hdzgN9x/yv+1TdcPyo3ERxhpBkzaeYmVg1DhNNRHqRqmSi4zxgwh1KmlnHUaF5HSkvVpKebi97XEaVMJmwmCR1eomHmfyyeZq8rmwpZbxAe3ZeI8l+LBxJXnTRRVVi7PMbZmTKUzDYXMpk6NcHpqdmRANvPM196iBCHyl6uE8xqn9uKEmxyszMrZmvMTO1znJ/VYI1hVjLA053LZ9r4b3A3y03vnrMUTO/ZiZXJSY+R/dnJMblle+npKvnZSZavWdGxvpTs+5Qs2yUn33EqUSvxMnEruWTlRwTqC5irvMfeX8f4Xl46Hms1htiLBRJLi8v48ILL+w1gw4xl3KYTbdDTKdMjMDkIIm+ij0PMWZqkcNKHJEPLyOvPv9gph6VTIeYXoHpKRxDzK363EP3R+fU8lpRI83sner+qDE3s3E+KAnqeRxmJefn6zl+jYiEMpJUYuO4mVk22h/dMyPZiDQ5D7Ln6yPM7N1o3in4ebjsaZ5mZlBXlU5yfKy2GpCS3xCS9PtHz9fQYaFI0sxw6tSpQSTpBZpVYTQ1w+MMnZqhFZ3DEUHyvyIqzFEDPoQUeV/tl6nFGjFG+4cQo8YBZls9J1OKNVWpedGXp9l7mNfsyiZJYJrYooaay8758+enSLPW8eLz/VxVSB7W/Vm6IoXl9+Pzan5MPr/PD1pLJ4f78oP/NV6G6Bx/Hic9h1/T4yhh8jQNNctmhBmZaJ0ka2RaSjO39mGhSHJpaQkXXNB9kNoH4XCYCY+VJJNf5lNkv2E2Z7HPjDqkZztEqfSRo5IJUCecIcQ4hORmJUYPHwYxRgqxjxz1GhmGNjr8rmvXzfyU3KDrNl9vXsJkRaTklZHkLITpx5gwa/fka3EcjR+pzSg/onzV95NBz+E087XYLM1E6KTl4WiNWd/Olsxjc62SqX+ei8OcZi33DQtGksvLyxM+Sa94kenUz89Mp6wS1YwamZKA4SafaBvo9y/6f0QifCwixlp4VjNqRKZ8jt4n+kVxo/T3mUtrpJjlW7SdkVbUoOy1kdF4WZnQtCg59f1HKtOPcZlcWlqaIkw/j4kpUntAvo5rzVzL20PMuj7lIrt238/zk7ejPNH3MaS+RnG0E+H3Z2Lncs6mVy7vkR/Tz4tMtMDu3ExWmX4PRiPJSSwUSS4tLY19kpmJlFUkEyGwu0qPXyvzq0TbGvbtDBkh1ogxI4E+wokIKoofkRofy+6TmU4jM2pGhtFzaodgaH4M+R9CivtJkEOgROjhKK2sADlO9K+qyveXMq1MOW7Nj6nx1aSakRYPfOEOJltnojgRGWeEG52nv6HEmeWNQvPRt0uZXMCAnx/IR3NzfXOS9DCbbzMTLStONbc2TGLhSPLUqVNj8otIkv0dqhzVp6iDI6JGI/ofghoZ8v4h5sWaEuRwpvBq5+0HMUbpya4XHde8GaoY94MYM1Kclyy54eV9tWtz+YqIxuNqOeR9s5hl9R5MAKrWlDBrZlAOq7mS4w8hYH63fUpY0xyljRGRpuZvVOcjgo3i63tmM6x2UF0NMkkCueLkcPNJ1rFQJGnWLUvHipFJEpisgLXKyNse5vvwv+531JRIrXHvI8aa326vxMjhocQYhfvIUONkz5o9N+djLS/5PyLHGhkeFDFm14oazaxR1TKWkWV0v0yhRkTF2xmx1oiQr50NwlGFVvODRnU0It2o/vb99Bk0f/RZM/SpTH1mzftaZzGro0yKpez695k8h7RLi4yFIklWkhkZckXNKhRQN6My+nr/jhoJHKQZNSNJ/mUDZ4aENf5+EaPGyc7Ptvk+0XvQcLZvSIMytNHJyhATRbQvu36kLIFJwowaSd6vZMn7/R4ZcUTkxXHMbOJ7hzoIp0ZyrBRr8fmnZMznRgOENJx1kGchzD6Vqfuz8pbVg6zOK3k2JTkcjSSl8GfrWvK2o9ZrdGSNWa3hjwo9h4f81McHDP9SRrb0G2/Xwlmljc5TwooITBveeXyNej1GjSCHEOZBIyI03cfbEbkCk6bHvnvwdkYEsxJmptD03jWzbPTLBvFweOivL05ExlFeK2FG7zCLy/E9rr4rDWt9y+qyqvmGHAtHkuvr66Fa1MrhGEqMQxVGVpgjFdX3G2oGrcXRyjQLEWeVMTsne+bomIaV2GYhxT6CHPruFDUVp+fNi1muUSM6R6QO+b8vLfMQZqYqdVsb8j4y8+fikaIeztaL1fgc5nybhWQ9Xvbc2mHQ/M/am1oZyAiT52hyPWLC1LJy2J2/446FIkkzm1jIvFZR+V+v0VeItLHJGv6MvPqIDZjuFSr5DCHJ2mLheyVGTWeN7GqkmBHbEDKMjmXqcV6oajvIe8x6bBZomY0ab31GVZiRGTdq/CPiiMhVB9pwnNooWn0GTquDLUYcP0u33mNWxerPHam2Ie9wKFn6M3A4qlcZSWr8hgUkybW1tXF4CDFqL4v3ceHTRiRSJ1Eh7RsE0zegRomyL85BKEa+p+6fhRj5v085avzomKNGkFGDUCOErAEZ0tBl15wV+0ma3HBHZFF7Xq0PfeY7Jd0oDtdJPm+owtxPwtRr+zZPnfDrch5GA5GG5hHnr4aHdOIVQwiz+STrWDiSdCXJGGqTH9LYRgQREUnf9xOZJNVXmMXpu1ZGspq2of7FKByR3H4T4yzhPmTkF3WOdH8NGfkOScss2G+VGRFlFK7dr2aKVaLy/UOW0YvUJqeL4zmZKrlG6i8jRu5AKOHps/AxJh+/Np/D4MGDWX5G+zgPsnNr4HrYlGQdC0eSvppOphi1gPC2j4jT45GiichDlVxNLXJ46HlMNn0m2ojUlMCj56sNyImeP8oP/q/5CPdCiHut4LWGYpYGKGt49pKGw4g/y9SQTJXVOhjq+9TjfP1IcXE6+0jTiU3jROcP6QzoCFgmvIwMgV1lWkqZIk8d7xA9Z4ShnaFoKlqERoTDsVAkCWBqCSYFF34v+FGBioiA90dKTj8yHKnFiBj7wkySff7Job7PPoXI52d5UMunvgE0e1WJ0fuKOjd92Asxzhpvv+6/F+ylMY4QEUxEhpG6rF2PCYnj16ahKBkO8WNGYTU/64Ab3xcRvKviiNS1HPo1uAOR+S0Z2TuKpp4MEQNNSdZx6CRpZncG8CMArgTweQBOAbh7KeX9A+IujeI+GsCdALwLwDWllJcPvHdYALUR5grRV2CURCLiUfLKiNCPqdrsU48c9utl5JeRcZT27PmygTSZWuQ8zIhVw3vZdmREmaVhXhw0oc2LIe6EWTsFmRrM1CYjIwK9rl6PlZeSlKo8juP35Get/ZQM3RScDTJiYnUyZvNxFMfTE6lfrjeaT7V81fP0nBp5cn43kpzEUSjJywE8FMCbAfwFgK+fIe4zATwBwJNH8b8DwG+Z2YNLKX885AJ9JghtYCNyUPKpEZkSXkaMSqZDlGQ2CKdGmBFxZsQYPavmyV6IUY/vJxnysSz+Is4L2wuR70VNDyXLmrJUYvR93PDX/J4czkys2ehU7khHqtWhX/rhtiOKw6pRnzkaxcsE7M/PBMr5xHH7fJtRuCnJOo6CJF9XSvkUADCzR2IgSZrZHdER5LWllJ8Z7X6NmV0O4FoAM5Fk1hBnZDHEjDmU8IYSZnZe3/371GMUrj13LX84//qIMYqTHRuKIRX8uCu9/cBhPONe7hGRpV5rKGHyvqGEmak5vUekJJnUVGG6SdXjDyU/TnuELH70nDwQie8zZBBQn1ho2MWhk2QpZa+2rgcCWAPwMtn/MgC/YmZ3L6W8r3aBM2fO4O1vf7unI0rbVLi2b6ii6lNh0TVmUWv6X/MVZvu0svl+7b3qdRx7NWHOWyFbhR6Oo+gszHvPob7TWcyKWZ2Mzlc/35D/KFw7Ft2z77za/r480O0zZ86gIcdJGrhzHwBbAN4r+28Y/V8BoEqS73//+/GIRzziAJI2CTfBLC8vY3V1dfztytXV1fEUlJWVFayurmJpaWkc9v3+W1pamojv5wEYn+MLtS8vL4/Pq4Wj72Z6fB6Ozgu++z7/514z98D158gqvW/zv+7Ptg8K85DucSfsefJwyLPVOlNZhzDq0OnP92dWlMilEYWjjxT7nEf95qIf4/P8O40e349peHt7e+Icj3P27Nnx56qyOP4xZE3XYeK4l+PDxkkiyTsAuLlMv8Eb6fixgFeq8+fP4+zZs4dyz9vf/va44IILsLa2hk/6pE/CRRddhJWVFVx00UW4+OKLsbKyggsuuAAXX3wxVldXsb6+jo2NDayvr2NlZQUXXnghNjY2sLy8jFOnTmFjYwNLS90yfqdOnRoTvp+/vLw8Di8tLWFtbW0cXgTzZsPBwclve3sb29vbAIDt7W2cPXt2vH9ra2tMRJubm2Ni2dzcxNbWFs6fP4+trS2cOXNmvP/06dM4d+7ceP/Zs2exvb2NW265BWfOnMH29jZuvfVW3HLLLTh37hxOnz6Nj33sY9je3sbp06dx6623HnHOHA4aSU7iJJHknmBmjwLwqNHmFoC3H2FyDgw333wzbr755iGnXgrgowecnOOOlgctDxwtH4DPpPAr0eXJPLhN5edJIsmbANzezEzUpCvIG4M4KKVcB+A6ADCzN5VSrjzYZB5vtDxoeQC0PHC0fOjywMOllAcdZVqOI07SWPgbAKwDuKfsv2L0/47DTU5DQ0NDw20dJ4kk/wTANoDvkv0PA/D2vpGtDQ0NDQ0Ns+JIzK1m9q2j4BeN/r/BzD4C4COllNeOzjkH4MWllO8BgFLKh83sOQCeZGa3APhbAN8O4AEAHjLw1tft1zOcYLQ8aHkAtDxwtHxoeVCFHcVIJjPLbvraUspVdM6LSylXU7xlAE8C8L2YXJbutw80wQ0NDQ0NC4kjIcmGhoaGhoaTgJPkkwxhZncxs982s4+Z2cfN7HfM7K4D426Y2U+b2b+a2Rkz+z9mdr+DTvN+Y695YGZXmtl1ZvZOMzttZh8ws/9pZnc/jHTvJ+YpB3KdJ5pZMbO/PIh0HjTmzQczu7eZ/ZaZfXRUJ95lZo89yDTvN+ZsE+5qZi8e1YUzZvZuM3uWmV140OneT5jZnc3sv4/atNOjMn3ZwLhLZvYkM3u/mW2a2VvM7FsONsXHFyeaJM3sAgB/DuCzADwCwMMB3Avdmq5DeFp4+AAADB9JREFUCvUvozPdPhXAgwH8K4BXmtnnH0yK9x9z5sF3oFvJ6OcBfAOAJwL4QgBvMrO7HFii9xn7UA78OvcA8BQAHz6IdB405s0HM7sSwBvRjSJ/JIBvBPCzAOrflztGmCcPRsdfDeB+AH4M3fO/EMAPAviVA0z2QcA/JHETug9JzIJnAng6gOehaxfegO5DEt+4nwk8MYiWgTopPwCPBXAewOW07+4AzgF4fE/czwNQAPxH2reCzs/5B0f9bIeUB58c7LsbgB10vt4jf76DzgO5zisBvADA9QD+8qif65DLwhK6aVS/e9TPcYR58PWjNuHrZf+1o/gXHPXzzZAPSxR+5Oi5LhsQ747oFl15huz/MwBvPernOorfiVaS6Ea1vqGUMl7PtXRTQV4P4JsHxN0G8BsU9xyAXwfwQDNb3//kHgj2nAellI8E+/4JwEcAfPo+p/MgMU85AACY2XeiU9FPOpAUHg7myYerANwbwHMOLHWHg3nyYG30/3HZfzO6TsSJWW+xHMyHJD7nJLpi5sVJJ8n7IF5m7gbsLjJQi/u+UsrpIO4aOnPFScA8eTAFM7s3ut7k38+ZrsPEXHlgZpcAeC6AHy6lhCs3nRDMkw9fOfrfMLM3mNm2mX3YzH7ezE7tayoPFvPkwasBvAfAT5rZFWZ2kZk9AJ06fX4p5RP7m9RjiSEfklgonHSSvAM6m7viRgCXzBHXj58EzJMHEzCzFQDPR6ckf3n+pB0a5s2DnwbwbgAv2sc0HQXmyYdPG/3/BoBXAfg6AD+FzlT3v/YrgYeAPedBKWUTXWdhCR0p3ILOzPhHAL5/f5N5bHFiPiRxWDhJa7c2HDyeB+ArAHxTKSVqaG5zMLOvAvDdAL4waBgWCd5hflkp5amj8PWjucnXmtm9SyknybowM8xsA10n4Y7oBvx8AMCXoBvYdw7AY44udQ1HhZNOkjch7h1mvUmNe7ckLpAsmH4MMU8ejGFm16L7WsojSimv2qe0HRbmyYMXoFPN/9fMbj/atwJgebR9ppSytW8pPVjMkw//Nvr/U9n/KnQDV74AJ8MEP08efA863+zlpZR/GO17nZl9DMB1Zvb8Uspb9i2lxxN7+pDEbRkn3dx6AzobuuIK9C94fgOAu4+GjGvcs5i2yR9XzJMHAAAzezKAHwHwA6WUl+5j2g4L8+TBvQF8H7rGwX/3BfBlo/BJUg/z1oca9joQ5LAxTx58DoCbiCAdfz36v/ecaTsJaB+SEJx0kvwDAF82mt8GABhNmL3v6FgNfwhgFcC3UdwVdOvBvuoEqYd58gBm9gMAngXgyaWU5x1QGg8a8+TB/YPfW9AN/rg/gJO05OE8+fAKdAM2Hij7/dNJb8LJwDx58CEAl5iZDtr70tH/B/cpjccZ7UMSiqOegzLPD8CF6BTf29AN734IugbuHwFcROfdDZ1P4akS/9fRqYVHAvgadA3iJjr/1JE/30HnAbrFBHbQNZBfJr8rjvrZDqscBNe7HidznuS89eFpo/0/AeBr0S0ucQbAi4762Q4jDwBchm76x7vRLURwfwA/NNr3JtDcw5PwA/Cto98vopsn+ZjR9lfTOecA/LLEu3bUDj4enfn5F0ftxIOP+pmOJB+POgH7UBDuCuDlo4J8C4Dfg0yaHRX+AuDpsv8UunlhHxoVijcCuOqon+mw8gDdaM6S/K4/6uc6rHIQXOtEkuS8+YBuHuDjRyRzFsA/AbgGwOpRP9ch5sEVAH4TwD+j6yC8G8DPALjkqJ9rD/nQW7dH2y+SeMvoVp76J3TWhbcC+Najfp6j+rUFzhsaGhoaGhKcdJ9kQ0NDQ0PDgaGRZENDQ0NDQ4JGkg0NDQ0NDQkaSTY0NDQ0NCRoJNnQ0NDQ0JCgkWRDQ0NDQ0OCRpINxwJm9htmdqOZ3Un2L5vZ35jZe47TJ5vM7DIzK2Z2Ne272sz+U3Du1aNzLzvEJPq9l8zs78zsCbTv6aP0HNjazWb2ODN7m5m1NqbhRKMV4Ibjgv+KbmLzL8j+JwD4IgCPLKWcOfRU5fhXAF8O4H/TvqsBTJHk6JwvH8U5bDwMwKdiOl8PGi8A8MnoVq5paDixaCTZcCxQSvkwgP8G4N+b2bcBgJl9BoCnA3hBKeW1R5i8KZRStkopbyilfGTAuR8ZnXsU6wE/AcBLyvTHxQ8Uow7NS0b3b2g4sWgk2XBsUEp5CboFlp9nZpei+4TVRwD8cF9cMmnez8x+z8xuNbN/M7P/oWZaM/tUM3uJmX3UzLbM7K1m9jA5505m9mIz+5fROf9qZn9kZnccHZ8wt5rZ9QC+GsB9R/vLaF9objWzVTN7lpm938zOjv6fZWardI7f49Fmds0oDTeb2R+a2Z0H5MmXovuyRe9Hk83sQaM8e97IROv3/j4ze7aZfcjMbjGzl5nZBWZ2uZm9chTnvWYWKcZfB3CFmX1F3/0bGo4rTvr3JBtue3g0us/1vBHAPdB9APqWGeK/DN3am7+A3Q/mXojOFAozuxDAa9F9c/BH0a3R+TAALzWzC0op142u81J0i2D/0OicT0G3CL5+Ws3xn0f3Xh49A9CtHZrhxQAeim4x8b9E97HrJ4+e+Tvl3CcB+Ct0ptw7AvjZ0b2uqlwf6L7gcQu6Bb5TmNl3A3ghgGtKKc8a7eN7X4/ObHoFgJ9Ct9j1FwD4JXTrmj4GwK+a2ZtKKfzJrb8b3f9Bo/Q3NJw8HPXise3XfvoD8Gx0/smXzxDn6lGc58v+JwM4D+AzRtvfPzrvKjnv1QA+DGB5tH0ruu9rZve7bHSdq2nf9QgWRqe0XTba/mzEi2s/ZbT/c+Ue18t5Txjt/7SePHkFgNcH+58+ir+CTqVvo/P5Rs/357L/d0b7H0b7LkH3NYmnBff6C3SfnjvyctV+7beXXzO3NhwrmNntADwcXUP8xWZ28YyX+E3Z/nV0boUvGW3fD8AHSynXy3kvQzfQxD8u+zcAfsjMHmtmn2MkrfYB96N7ahqAzmzL+GPZftvo/6499/k0dObqDM8F8Ax0X3h4YXLOK2T7naP/V/qOUspN6DoYdwnif2SUjoaGE4lGkg3HDT+NTpl8EzrT4rNnjP//ku1PH/3fAfEo0w/RcaD7+PYfoFNabwXwQTN76j5NafB7aDo0DY4bZdsHAG303GeDzo3wH9B9XPrVlXNuku2zlf1Res6g+yRdQ8OJRCPJhmMDM7sKwPcCeEop5RUAngXgMTMO/PiUZNu/Kn8jgDthGnei4yilfLiU8l9KKZ8O4LPQfXvzGdj1N84DJz1Nx53k+Lz4N3Qdjgxfg06NvsLMLtqneyruAOCjB3TthoYDRyPJhmOB0QjUX0Jn5vy50e6fRDeI54VmtjbwUg+V7e9AN9DkjaPt1wK4s5ndV877TnQmw3foBUsp7yql/Cg69fTZlXtvYZhqeh2ljfFdo//rB1xjCN6JbiBQhhvQDf65Fw6OKO8O4F0HcN2GhkNBI8mG44Jr0I0mfWQpZQcASinbAB4J4DPRDcAZgm80s582s68zsycDeBq6eYLvGR1/EYD3APgdM3vkaOrDSwF8HYAfK6WcN7NPGq3y87jR8a8xs59Hp8peVbn3OwB8tpl9u5ldaWafGZ1USnk7gF8D8HQze9oorU9FN6Dm10opb4vi7QGvA3BPM/t32QmllL9HR5T3BPDKPfiAU5jZ7QF8BnY7BQ0NJw5tCkjDkcPMrkS3kMBPKEGUUv7azH4OwBPN7DfL5BSDCA8D8IPopiWcRadOxxPaSymfMLOvRjeV4VoAF6NTOg8vpfjAmU0Af4vO9Hs3dEr0XQC+q5Ty+5V7/yQ6Qn8hgIvQqdarknOvBvCP6KZ1PAXAv4ziP6Pn+WbB76N7lgejm3ISopTyrlGevAbAq8zsgft0/29C9w5+d5+u19Bw6LBSylGnoaFhbowm9f8qgHuVUt57xMk5NjCzFwG4cynla4/g3q8A8NFSysMP+94NDfuFpiQbGm7beAaAvzezK0spbzqsm5rZ5wN4AID7HNY9GxoOAs0n2dBwG0Yp5X3oTLt3PORb3wndQgtN1TecaDRza0NDQ0NDQ4KmJBsaGhoaGhI0kmxoaGhoaEjQSLKhoaGhoSFBI8mGhoaGhoYEjSQbGhoaGhoSNJJsaGhoaGhI8P8Beo5Uad2upWgAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from examples.seismic import plot_shotrecord\n", "\n", "# Plot shot no. 3 of 5\n", "plot_shotrecord(d_obs[2].data, model1, t0, tn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parallel Full-Waveform Inversion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we know how to use Dask to implement a parallel loop around a (serial) modeling function for a single shot, we can apply the same concept to an FWI objective function, which computes the FWI function value and gradient for a given geometry and observed shot record. This function follows largely the structure in tutorial 3 and involves computing the predicted data and backpropagating the residual to compute the gradient. As we do not want to update the velocity in the area of the absorbing boundaries, we only return the gradient on the (original) physical grid." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from devito import Function\n", "from examples.seismic import Receiver\n", "\n", "# Serial FWI objective function\n", "def fwi_objective_single_shot(geometry, d_obs):\n", "\n", " # Devito objects for gradient and data residual\n", " grad = Function(name=\"grad\", grid=geometry.model.grid)\n", " residual = Receiver(name='rec', grid=geometry.model.grid,\n", " time_range=geometry.time_axis, \n", " coordinates=geometry.rec_positions)\n", " solver = AcousticWaveSolver(geometry.model, geometry, space_order=4)\n", "\n", " # Predicted data and residual\n", " d_pred, u0 = solver.forward(vp=geometry.model.vp, save=True)[0:2]\n", " residual.data[:] = d_pred.data[:] - d_obs.resample(geometry.dt).data[:][0:d_pred.data.shape[0], :]\n", "\n", " # Function value and gradient \n", " fval = .5*np.linalg.norm(residual.data.flatten())**2\n", " solver.gradient(rec=residual, u=u0, vp=geometry.model.vp, grad=grad)\n", " \n", " # Convert to numpy array and remove absorbing boundaries\n", " grad_crop = np.array(grad.data[:])[geometry.model.nbl:-geometry.model.nbl,\n", " geometry.model.nbl:-geometry.model.nbl]\n", " \n", " return fval, grad_crop" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As for the serial modeling function, we can call `fwi_objective_single_shot` with a geometry structure containing a single source location and a single observed shot record. Since we are interested in evaluating this function for multiple sources in parallel, we follow the strategy from our forward modeling example and implement a parallel loop over all shots, in which we create a task for each shot location. As before, we use Dask to create one task per shot location and evaluate the single-shot FWI objective function for each source. We wait for all computations to finish via `wait(futures)` and then we sum the function values and gradients from all workers." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Parallel FWI objective function\n", "def fwi_objective_multi_shots(geometry, d_obs):\n", "\n", " futures = []\n", " for i in range(geometry.nsrc):\n", "\n", " # Geometry for current shot\n", " geometry_i = AcquisitionGeometry(geometry.model, geometry.rec_positions, geometry.src_positions[i,:], \n", " geometry.t0, geometry.tn, f0=geometry.f0, src_type=geometry.src_type)\n", " \n", " # Call serial FWI objective function for each shot location\n", " futures.append(client.submit(fwi_objective_single_shot, geometry_i, d_obs[i]))\n", "\n", " # Wait for all workers to finish and collect function values and gradients\n", " wait(futures)\n", " fval = 0.0\n", " grad = np.zeros(geometry.model.shape)\n", " for i in range(geometry.nsrc):\n", " fval += futures[i].result()[0]\n", " grad += futures[i].result()[1]\n", "\n", " return fval, grad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compute a single gradient of the FWI objective function for all shots by passing the geometry structure with the initial model to the objective function, as well as the observed data we generated earlier." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [], "source": [ "# Compute FWI gradient for 5 shots\n", "f, g = fwi_objective_multi_shots(geometry0, d_obs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The physical units of the gradient are $s^2/km^2$, which means our gradient is an update of the squared slowness, rather than of the velocity." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from examples.seismic import plot_image\n", "\n", "# Plot g\n", "plot_image(g.reshape(model1.shape), vmin=-6e3, vmax=6e3, cmap=\"cividis\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## FWI with SciPy's L-BFGS\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With our parallel FWI objective function in place, we can in principle implement a wide range of gradient-based optimization algorithms for FWI, such as (stochastic) gradient descent or the nonlinear conjugate gradient method. However, many optimization algorithms, especially second order methods or algorithms for constrained optimization, are far from trivial to implement correctly from scratch. Luckily, many optimization libraries exist that we can adapt for our purposes. \n", "\n", "Here, we demonstrate how we can interface the scipy *optimize* package to run FWI with a limited-memory Quasi-Newton method. The scipy optimize package was not specifically designed for FWI, but this does not matter, as the library accepts any Python function that can be evaluated for a current model iterate `x` and returns the function value and gradient:\n", "\n", "```\n", "f, g = objective_function(x, args)\n", "```\n", "\n", "where `f` is function value and `g` is a one-dimensional numpy array of type `float64`. Our parallel FWI function does not take the current model as an input argument, but instead expects a geometry structure and the observed data. Therefore, we have to write a little wrapper function called `loss`, which provides the input argument structure that is expected by `scipy.optimize`. The function takes the current model iteratve `x` (in squared slowness) as the first input argument and overwrites the current velocity in `geometry` with `x`. The gradient that is returned to `scipy.optimize` is converted to a numpy array of the required type (`float64`)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Wrapper for scipy optimizer: x is current model in squared slowness [s^2/km^2]\n", "def loss(x, geometry, d_obs):\n", " \n", " # Convert x to velocity\n", " v_curr = 1.0/np.sqrt(x.reshape(geometry.model.shape))\n", " \n", " # Overwrite current velocity in geometry (don't update boundary region)\n", " geometry.model.update('vp', v_curr.reshape(geometry.model.shape))\n", " \n", " # Evaluate objective function \n", " fval, grad = fwi_objective_multi_shots(geometry, d_obs)\n", " return fval, grad.flatten().astype(np.float64) # scipy expects double precision vector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `scipy.optimize` function also takes an optional callback function as an input argument, which can be used to keep track of the model error as a function of the iteration number. The callback function takes the current model iterate `xk` as the only input argument and computes the $\\ell_2$-misfit with the true model `m`:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Callback to track model error\n", "model_error = []\n", "def fwi_callback(xk):\n", " vp = model1.vp.data[model1.nbl:-model1.nbl, model1.nbl:-model1.nbl]\n", " m = 1.0 / (vp.reshape(-1).astype(np.float64))**2\n", " model_error.append(np.linalg.norm((xk - m)/m))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The final preparation step before we can run our example, is the definition of box constraints for the velocity. At each iteration, the optimizer will project the current model iterate onto a feasible set of velocites as defined by the lower and upper bounds `vmin` and `vmax`. Box contraints allow us to prevent velocities from taking negative values or values that are too small or large for the stability criteria of our modeling stepping scheme. We define the box constraints for the velocity in $km/s$ and then convert them to squared slownesses. Furthermore, we define our initial guess `m0`:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# Box contraints\n", "vmin = 1.4 # do not allow velocities slower than water\n", "vmax = 4.0\n", "bounds = [(1.0/vmax**2, 1.0/vmin**2) for _ in range(np.prod(model0.shape))] # in [s^2/km^2]\n", "\n", "# Initial guess\n", "v0 = model0.vp.data[model0.nbl:-model0.nbl, model0.nbl:-model0.nbl]\n", "m0 = 1.0 / (v0.reshape(-1).astype(np.float64))**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we run our 2D FWI example by calling the `optimize.minimize` function. The first input argument is the function to be minimized, which is our `loss` function. The second input argument is the starting value, which in our case is our initial model in squared slowness. The third input argument (`args`) are the arguments that are passed to the loss function other than `x`. For this example we use the L-BFGS algorithm, a limited-memory Quasi-Newton algorithm which builds up an approximation of the (inverse) hessian as we iterate. As our `loss` function returns the analytically computed gradient (as opposed to a numerically approximated gradient), we set the argument `jac=True`. Furthermore, we pass our callback function, box constraints and the maximum number of iterations (in this case 5) to the optimizer. " ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n" ] } ], "source": [ "from scipy import optimize\n", "\n", "# FWI with L-BFGS\n", "ftol = 0.1\n", "maxiter = 5\n", "result = optimize.minimize(loss, m0, args=(geometry0, d_obs), method='L-BFGS-B', jac=True, \n", " callback=fwi_callback, bounds=bounds, options={'ftol':ftol, 'maxiter':maxiter, 'disp':True})" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Check termination criteria\n", "assert np.isclose(result['fun'], ftol) or result['nit'] == maxiter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After either the maximum iteration number is reached or we find the minimum of the objective function within some tolerance level `ftol`, the optimizer returns a dictionary with the results and some additional information. We convert the result back to the velocity in $km/s$ and compare it to the true model:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot FWI result\n", "vp = 1.0/np.sqrt(result['x'].reshape(model1.shape))\n", "plot_image(model1.vp.data[model1.nbl:-model1.nbl, model1.nbl:-model1.nbl], vmin=2.4, vmax=2.8, cmap=\"cividis\")\n", "plot_image(vp, vmin=2.4, vmax=2.8, cmap=\"cividis\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looking at the model error as a function of the iteration number, we find that the error decays monotonically, as we would expect." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Plot model error\n", "plt.plot(range(1, maxiter+1), model_error); plt.xlabel('Iteration number'); plt.ylabel('L2-model error')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Next steps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In our current example, the master process keeps all shot records in memory and distributes the data to the workers in the parallel pool. This works perfectly fine for 2D and even small 3D examples, but quickly becomes infeasible for large-scale data sets. Therefore, an extension of our current code should include the following steps if we want to scale things up in the future:\n", "\n", " - Write shot records directly to disk on each worker and return a file pointer back to the master process.\n", " \n", " - Avoid sending the velocity model to the workers and read the model directly onto each worker.\n", " \n", " - Include optimal checkpointing or domain-decomposition to address the memory bottleneck in the gradient computations.\n", " \n", " \n", "For scaling Devito to industry-scale problems and being able to work on data sets in the range of multiple terabytes, it is furthermore necessary to have a fast SEG-Y reader that is able to scan through large data volumes and efficiently access blocks of data such as single shot records. Furthermore, we need the SEG-Y reader to be able to interact with Devito and automatically set up `geometry` objects from the SEG-Y headers. For this purpose, please check out the [Julia Devito Inversion framework (JUDI)](https://github.com/slimgroup/JUDI.jl), an extension built on top of Devito in the Julia programming language. JUDI consists on an abstract linear algebra framework and an interface to a fast and parallel SEG-Y reader called [SEGYIO.jl](https://github.com/slimgroup/SegyIO.jl), making it possible to:\n", "\n", " - Scan large-scale data sets and create look-up tables from which shot records can be directly accessed through their byte locations (no need to loop over traces or read full files).\n", " \n", " - Use look-up tables to automatically set up Devito objects with source and receiver coordinates. \n", " \n", " - Work with out-of-core data containers that only read the data into memory when it is used for computations.\n", " \n", "You can find a full FWI example of the 3D Overthrust model using a 1.1 TB large data set on [JUDI's Github page](https://github.com/slimgroup/JUDI.jl/blob/master/examples/software_paper/fwi_3D_overthrust_spg.jl)." ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }