{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example of DenseCRF with non-RGB data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook goes through an example of how to use DenseCRFs on non-RGB data.\n", "At the same time, it will explain basic concepts and walk through an example, so it could be useful even if you're dealing with RGB data, though do have a look at [PyDenseCRF's README](https://github.com/lucasb-eyer/pydensecrf#pydensecrf) too!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is highly recommended you install PyDenseCRF through pip, for example `pip install git+https://github.com/lucasb-eyer/pydensecrf.git`, but if for some reason you couldn't, you can always use it like so after compiling it:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:31.363054", "start_time": "2017-02-13T23:34:31.270939" }, "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "#import sys\n", "#sys.path.insert(0,'/path/to/pydensecrf/')\n", "\n", "import pydensecrf.densecrf as dcrf\n", "from pydensecrf.utils import unary_from_softmax, create_pairwise_bilateral" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:32.014349", "start_time": "2017-02-13T23:34:31.773493" }, "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Unary Potential" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The unary potential consists of per-pixel class-probabilities. This could come from any kind of model such as a random-forest or the softmax of a deep neural network." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "deletable": true, "editable": true }, "source": [ "## Create unary potential" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:33.214269", "start_time": "2017-02-13T23:34:32.616826" }, "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2UAAAEoCAYAAADYL1nIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXn0bUtVHjrnOYixDQr4pFNQMNEnkSii8RkbEg2xQV50\nIKIRjMSBCQ/js4M8NYpiM+LTDJXEgEFR6eyCoORhi7EXMKgBg9xcQK5g5NKogKCcU++PvYv7ne/3\nzVmz1l6/c/bZd31j7LGqmTWrW7vm/FbVXttba7Zhw4YNGzZs2LBhw4YNG64NLlzrBmzYsGHDhg0b\nNmzYsGHDrRkbKduwYcOGDRs2bNiwYcOGa4iNlG3YsGHDhg0bNmzYsGHDNcRGyjZs2LBhw4YNGzZs\n2LDhGmIjZRs2bNiwYcOGDRs2bNhwDbGRsg0bNmzYsGHDhg0bNmy4hthI2YYNGzbcCuDuD3D3l7n7\nDe7+mEDmwe7+Und/ibs/DdIf5u4v338eBukf5e6/v9f53e7uV6MvGzZs2LBhw1o4Fvvo2/+Ubdiw\nYcNpw90vmtkfmtmnmNlNZvYCM/u81tpLQeZeZvajZnb/1tob3f39Wmt/6u7va2YvNLP7mlkzsxeZ\n2UftZX7bzL7MzH7TzJ5rZt/dWvsvV7NvGzZs2LBhw1Ick33cdso2bNiw4fRxPzO7obV2Y2vtr8zs\nGWb2WSTzz83sCa21N5qZtdb+dJ/+j8zs51prb9jn/ZyZPcDd72Rm791a+422e7r3Q2b2oKvRmQ0b\nNmzYsGElHI193EjZhg0bNpw+7mJmr4b4Tfs0xIeY2Ye4+6+5+2+6+wMGZe+yD2c6N2zYsGHDhmPG\n0djH20w2fMOGDRs2nCMe8IAHtJtvvnmqzIte9KKXmNnbIOmJrbUnQlydZeez67cxs3uZ2SeZ2V3N\n7Ffc/cOTshWdGzZs2LBhwypYYh/NhjbyaOzjRso2nCzc/e5m9goze5fW2juuQn3NzO7VWrthQdlX\nmtkjWms/L/L+vpl9f2vtb7Gsu/9rM/ug1tojDmr8hqPBzTffbC984Qunyrj721pr901EbjKzu0H8\nrmb2GiHzm621vzazV7j7y2xnhG6ynSHCss/fp991oHPDhlsF3P0Hzeym1trXXuu2zMDdP8nMfqS1\ndteR7Ap13d0OsMmZjXX3zzezh7XWPpVl3f37zOyPW2vfdEj7N1x7LLGPZkMbeTT2cTu+eKJw91e6\n+1+6+5vhc+dr3a4N82it/UonZCLvWzohc/e7u3tz9+1hy3WO1trUp4AXmNm93P0e7n5bM3uImT2b\nZJ5lZp9sZubud7DdcY0bzex5Zvap7v4+7v4+ZvapZva81tprzewv3P1j92+V+kIz+6k1+r9hw3mB\nbOMb3f1n3P1u45Ibjhmttad2QibyHtkJmbt/krvfpOQ2XB+YtY8FG3k09nEjZaeNz2ytvSd8pp5i\nr+3cX89k4Xpu+4brD2uTsv1T6UfZzoD8gZn9aGvtJe7+OHd/4F7seWb2end/qZn9kpl9VWvt9a21\nN5jZN9nOcL3AzB63TzMz+1Iz+34zu8HM/qeZbW9e3HA94DNba+9pZncys/9lZt9zjdvzTlzPtuZ6\nbvuG6wdrk7Jjso8bKbsVwt0fuP+fhTe5+/Pd/UMh75Xu/jXu/ntm9hZ3v42739ndf8LdX+fur3D3\nR4P8u7n7U/ZPHP/A3b8an0IF+j50X++b9u14IMg/390fAfGHu/uvQry5+yP3/wfxRnd/Qv/vB3e/\n6O7f4e43u/uNZvbpg3F4pbs/1nf/O/FGd/8Bd/8b+7xPcveb9m3/EzP7gX36P/fdf068wd2fLXYf\nP83db9y34d+6+4V9uQ92919099fv857q7rejsh+dtSXowze4+4/so/91f33T/inwJ+7beW+Qf7/9\nU+I7ZmOz4driHHbKrLX23Nbah7TWPri19vh92te31p69D7fW2v/dWvuw1tq9W2vPgLJPbq3dc//5\nAUh/YWvtw/c6H9Wqjdmw4QjQWnubmf24mX1YT3P3T3f3/+buf+7ur3b3b8Ay7v7x7v7re/v1and/\nOOt19/dy91/y/X8Tufvt3f05e50vcPdvFnbtX7r7y83s5fu0j9vL/tn++nEg/0p3/4cQf6cd8FtO\nTDzM3f9ob2/+H5B9N3f/wb2deamZfXQ2Rntdjw7s2sN99+KD73L3N5jZN7j7BXf/Wnd/lbv/qbv/\nkLv/TVL7z9z9Ne7+Wnf/Cqjrfu7+G/uxfa27f6/vdi4QkY29wlegPvzgfszfw3aO8Z0dThC5+1vd\n/fYg/1G+83feJRubDdcG57BTdjT2cSNltzK4+4eY2dPN7F+Z2R1t998Jz6GF7/NsR2huZ2aXzew5\nZva7tntzzD8ws3/l7v9oL/tvzOzuZvZBtvuPhy8Q1aI+3+v7WTN7PzP7v8zsqe4uj+cF+AzbGZKP\nMLMH2+6VpGa7V5Z+hpn9Xdv9Z8TnFHR9/r78B9tuOxp/D/D+Zva+ZvaBZvYl7n5/M/vWfZ13MrNX\n2e7VqYj/c1/3R9rular/bJ/u+7J3NrMPtd355W+YaEsFn7C/3m6/M/rL+/bhnHyemf18a+11k7o3\nXCWch8HZsGHDWbj7u5vZ59ruf4Q63mK7o0a3s53d+lJ3f9Be/gNs59R/j+3s533M7MWk8/Zm9gtm\n9muttUfvHbEn7PW+v5k9bP9hPMjMPsbMPsx3/330M2b23WZ2ezP7TjP7GSQOBXy8mf0t29nsr/db\nHr7+G9vZmA+2nb1RbWFEds32bb7Rdvb88Wb28P3nk23nF7ynmX0v6ftk2/0e51PN7DFAMC+Z2Zeb\n2R3M7O/t2/4vJtqSorX2FjP7x2b2mnblCaLn286ud3yBmT2j7X4/tOGIsMQ+Xk82ciNlp41n7Z84\nvcndn7VP+1wz+5nW2s/tF5zvMLN3M7OPg3Lf3Vp7dWvtL21Hfu7YWntca+2vWms3mtmTbHfm1my3\nkH1La+2NrbWbbGdEGKjvY223SH/bXt8vmtlP244sVPFtrbU3tdb+yHbbyPeBtvy7fV1vsB0JGuF7\nQf7x1I7LZvZvWmtv37f9883sya2132mtvd3MHmtmf893P17u+Pa2+7+KPzKzf9f1tdZu2I/52/eE\n6DvN7BMn2rIUTzGzh/aniWb2T83sh1fQu+EccaoGZ8OGI8Gz3P1NZvbntnuY+G97Rmvt+a2132+t\nXW6t/Z7tHmL2tfrzbfdQ6+mttb9uu+NLSMrubGa/bGY/1vYv/PDdH9N+tu1syVvb7g9pnyLa9K17\n2/GXtiODL2+t/XBr7R2ttaeb2f8ws8+c6OM3ttb+srX2u7Z7qPoR+/QHm9nj93W92rTNZki7tsdr\nWmvfs29nt5Pf2Xb/+fRm29nJh/iVRxu/sbX2ltba79vuFEq3ky9qrf3mXtcrzew/2lk7mbVlKZ5i\n+4eX+/n6PNvs5NHilEnZdv73tPGgdvZtfne23Q6PmZm11i67+6vtyv9PwP9c+EDbbfW/CdIumtmv\ngD6Ux7BKu7OZvbq1dhnSXmVz/2/0JxB+q+1InmrLq2wMlsfjiK9ru+MtHXc2s9/pkdbam9399bZr\n+yszfe7+frYzfn/fzN7Ldg9E3jjRlkVorf2Wu7/FzD7R3V9rZve0sz9g3XBkuJ6MyIYN1yEe1HZv\nr71ou92WX3b3D2ut/Ym7f4yZfZuZfbiZ3dbM3tXMfmxf7m62+21IhE83szeb2fdB2h1t52vN2km2\nX8dqJ7kv3PZX2a7//1ui795m7zzJ85222wl79325F020ZSl+ysy+z90/yHanVP6stfbbK+jdcA44\nZfu47ZTd+vAa2xEtMzNzd7edofljkME7/tVm9orW2u3g816ttU/b57/Wrnztp3qLFep7jZndDXZu\nzMw+AOp/i+0W4473L/Sp47VU/wcUyrA8vgyFv/k8du9hu6MlOHaRvm/d6/s7rbX3tt1TOf4fi6wt\nFUQrVX8K+E/N7MeJaG44QpzqU8ANG44JrbVLrbWftN2xuY/fJz/Ndg+u7tZa+5u2I1h9rX617Y79\nRXiSmf1/ZvbcvX0wM3udmb3D5u3kB1L+dWkn9/LvsN0LVUb6/oPtdgTvtbeT/9qugp3c28Qftd0u\n33aa5MhxyjtlGym79eFHzezT3f0f7H/E+hVm9nYz+/VA/rfN7M9998KLd/PdyzQ+3N0/GvQ91nev\nA72L7d5gk+G3bGdQvtrd38V3/5HymXbLb7NebGb/xN3f3d3vaWZfPNm3R7v7XX33atLHFMr8y738\n+9rOADwzkX2amX2Ru9/H3d/VzL7FzH5rf8yi46v2Y3E3M/sy0PdetnuC+qb9OH3VgW1ReJ3tjlx+\nEKX/sO3O4X+Bmf3QpM4N1wCnanA2bDgm+A6fZWbvY7u3rpnt1uo3tNbe5u73M7OHQpGnmtk/dPcH\n++6lVbd39/uQ2keZ2cvM7Kfd/d1aa5fM7Cdt9xKMd3f3v22736xleK6ZfYi7P3Rfz+fa7mUkP73P\nf7HtjgS+i7tXfz/dgTb7rrb7XfcIkV1TeLqZfbnvXi/+nrazk89sV/4v2dftx+J/N7Mvsivt5J+b\n2Zv34/SlB7ZF4X+Z2e3Fy0d+yHa/hXugmf0IF9pwPNhI2YaTQWvtZbZzzr/HzG62HSH6zNbaXwXy\nl/Yy97Hdnz7ebLtXfPYF7XG2+5O8V5jZz9vuTVZvT+r/K9stev94r+vfm9kXttb+x17ku8zsr2y3\ncD7FdkawiifZ7rWlv2u7Y4Y/WSjzNNu9dOTG/eebk7b/gpl9nZn9hO2eNn6w3fLbuo6fst1xixfb\n7ofa/2mf/o22+2Hyn+3TVdvKbQna91bb/Rbt1/a/I/zYffpNthuPZrccO91wpDhlg7Nhw5HgOe7+\nZtsRgMfb7k+HX7LP+xdm9jh3/wsz+3rbkRgzM9v/junTbPcw8w22W+c/AhW33RfyS2y3q/ZTvnuL\n7qNsZzP/xHYPyZ5uuZ18ve1eWvUVZvZ6M/tqM/uM1trNe5Gvs539eaPtbMvTJvr+jbY79vcK29mb\nyq5QZNcUnrzX+V/3dbzNzhK/X7bda8J/wcy+o7X2s/v0r7QdCf4L29lzRbhm2nIGe1/j6WZ2495O\n3nmf/mu2e6j5O/SgdcMRYYl9vJ5spF9Pjd1w/HD3LzWzh7TW+Me5Rwd3f6WZPUL87u7k4O5Ptt0P\nsmff6LjhKuMjP/Ij26/+qnyzc4j3eI/3eFFr7b7n1KQNGzasCHf/djN7/9Za5c2H1xTu3mx3nPCG\na92W84a7/6KZPa219v3Xui0bNJbYR7Prx0ZuL/rYcBDc/U62Oy73G7Z7xe1X2NnX3264hti/HfKf\n2O6vAjZcB9gelm3YcDrYH8W7rZn9vu3eaPzFZvaItNCGq4r9TzL6a/Y3HDFO2T5upGzDobit7V5b\new8ze5Ptfhv2769piza8E+7+Tbb735dvba294lq3Z0MNp2x0Nmy4FeK9bHdk7s5m9qdm9v/a7hje\nhiOAuz/Fdv8T92Wttb+41u3ZkOOU7eNGyjYchNbaq2z36uDrDq21u1/rNpw3WmtfZ7vfH2y4jnDK\nRmfDhlsbWmsvsN3fkVx3aK3x2w9PDtfDMdINt+CU7eNGyjZs2LDhiHC9/TB5w4YNGzZsuBo4dfu4\nkbINGzZsODKcstHZsGHDhg0bluKU7eNRkLL9232ivFL6KM5pmfwaYb5W00bXHo50zOjuuHDhQpo/\nKzOSY1klF5WLwPpmcPny5ekyvChgPNKHMiP5nt+vkUymh3WsfV0qsyQtC8/kVeJR2iB91SM+p2x0\nNixCeENU79XZ+776HZtZ11Bm6bpQXXOUjvNaI2dlVFsy2Uo8SqvkjTCyxyN/i+OZL9Yx8ieW+kpr\n+kjVNszKZG3B9kRlVLlqXiUepWXpdvZPwBfjlO3jUZCyCNUbYcmCEeUvIV7V/CUys+Srkt5x4cKF\n9Iu6hKzNyEWyqtxMmUxOfZkvXrwoyyvZbkijfrTW3qmPDTCPUc+/ePHiGacBx7zrVDKop49V1Ma1\n0Vp7Z/14Hclgv3DcsjQsw+GZvCje64tkRukbNlwLVB3z0T07k7+UkFXI1xKZqEzUnop8lr6UiC0Z\nk0gmys/SFKI1rqovWjsxTcWjMOrg8bpw4ULZxqDMKJ6hy/W2zD78Ve3isYzaruxfB7ZHlRn1e3aM\nVBuicZwZ3w1ncbSk7BBCtsbTgkNI2KEE7ZDrqK0jolXNz2SUnkiOdSq5Nb/gM7rU4o8EjhfXKvHK\nZCsEDceL9WBdV4ucMWbIWiTf210xOLOkTcWrMln6mtiI34YRDnHQM0d/SV5GPDA/Iy2HkJ/oqnbG\nRvWtdY3qH/Wb05bER+kZKmUUGevp1XW3ur4zMTIbE7QoPkof9XcpOVP6qmSN5RGXL19+51hEZbD9\nhxCzqkyWvhZO2T4eJSk7ZDKXlh0RrlG5CmHMZNYgYqP6K4Qr6/t57JwpmeocHrowKmRHGUcLGO9U\ncZmKLOod6et6kHzhIqx2ziLCNHNV46IMb9XgROUiuQwzZa8GuVoCdkg3bGAccn8sLTsiZKNyFcKY\nyRxCyEakZeZaIYuVI+lVgqbi50nKRpi1Ayq+ZG1G2xeRo+rDN7OYUGZXrB+JYSTXEZGZrFw1rbel\nioyYjdp9DDh1+3iUpExhCenJ4kvDs2mRTDV9hpRlZCvKX2vnrErCquRr5tjiGotG/5Kro4y8AKjd\nKVzkRscXWRYNuepLJNMXcyRf0dhHu24VnKfBiUhYNW3UF5brdav8KM5lRnWugVM2OhvOB0tIT9Xx\nr4QrRESlRTLV9BEhqpSpkLAl9VbHYJTGYRWP0rL0GURrYc9bQsiyMKYpO+Luw92zKrFRiOR6GhLD\n7AFkNh5ZuajvGTGL5LI+sxz2UZVVcS4zqvNQnLJ9PCpSNuN0LyVgWV6VcKn8JQTtEMKVyXQgEbqa\nRE3JjORU/swX+tAXfWR1Ze1ShI3lmHxxnRFRUk6OOrrYy2UELzsWeQiqRA3TMtJWIWusPwtj2Y4R\nocoM5ChtLZyy0dmwHDNO91ICluWp8OyRxRmCNkOaMlK0FvlaSsSud2JWffCFaVG+snczdkCt9UjQ\n+DhfpG9knypjYjbeqaoSNR6Hqi3smDnKGI0Pj0WEbPxGaWvglO3jUZGytVB1sCvhTEelnkOvFZ0K\neBRxKVmLSFQ2VhUydggRGy1+S5DpVA5HVE9rtSOMFbkuExEolY+L99K8WUOB7VFjlBmjmToxbQlm\nnYprjWNrz4bTQnZ/zRCykY5KPYdeZ+tfi6xVSGC1/ZW8pXHEkjcNm8099FxC4JakRfYoImdL7JxZ\njdBlxxlRP4KJEedVSaRqxxJkBOq8yNVSnLJ9PBpSFk34yGmvEqi1whUSVZGN5CtlIj1mY8KVEbVK\nHudXXvwx86r8SB6x9uKQLUSzL/bgcmjAue9dLpKp5Kuji1lex+jIY4aKwUC52fKRIR2lZeGZPBWf\nSVsDp2x0NixDdE8c4qRz/mx45rdTM0QlIzYZOZohVVFeJr+EiB1K0DjM8VmiNbO2MNEZAYlQL6+I\nCa/Fo7SZay+n3lA4slmMirwigxUSqMaH00cEr0IQWS4Kz+RFdVfTDsUp28ejIWUKs4Qsiy8hXqP8\nSL6aXiVeKi8jY1x3RLiWHmFc+w2NnF/5Ah+6Yzb6Ume/G+vlI8Kmdr9woWP9yihlBE29Ej974+J5\nkbMMs4aUjXGkA8djxuDMkjYVz9LWBDtyGzZEmCVkWXwmfOiRxWp6RppGvx2b0TUqOyJ+md7KeIzy\nVH+575W0Sl7H6IGTWveyNqpjhTNErOdViVmX59+dRZglbAwkZ5Xdqln7yLaMdSDWOsp4jMTs1O3j\nUZAyNVmHTmDFyZ8hAhkRG5XP+peRloysIaLdsTVI1yz5i/qXyUT9UmUq8pX8EVSd2VFDXMTWeLNi\n9p9j2VsVI5LV2xUdW0REC6oiRZmOpcQsQkaolmItPWvjGNu04dph1ume1RnpqshwviIXo/JZ/yJ9\nLJvJVcnXiIAeQsDYmawQthH5jeJR2kz+oVBEwezsbhqXWZJXbUdGmKKHfVFaVjY6zohYYh9n/JpD\njjKqdh4TTtk+HgUpY1RIWhZfSpCicPXaw7PlojIVUpbtgs2kj8pE/T3vXbNIfk3SrqC+9ExyOiJi\nhQt5JIcL/CG7Y2rcVZmItK3932aRIZk1PDMGcUm4ktfrVvLnhVM2OhsOR8UJz+JLCZLZsiOLXPcM\nkeEyEUmqlK2Gqy8NmWn3EhIWzdnVIGVLHnyOfCmz+AVWuNbzmjxLVjgP9Uav01e2JsrPgMRM1YNy\nyqZVCRrLY92MqG+VcCWP6z5vInfK9vEoSRljhpBlZTPCVU075Doro8IdFQJ1SHq1Ds6byee8KKxw\nNY4vZnqV447p0fFEJVMhaFg2I1Qqnetai5zNPMGrGE4eQx6vyBBnxG0pMcN6Fc6bmJ2y0dmwPmYI\nWVZWhdciZGsQGCZko7JL8g+po9oPVZfKXxLO0ip5HbOkLHqgFYUVUepAH4LJ2oiYsUzvL7dB/eaM\nZUf2pjI+fJQwk2eZjIj1tnAc2zZ66UnUX6WL87BehfMkZqdsH4+KlKkJnCFka4TXJmRrEDEmROdJ\nxpYchczaNSobfWkPedlHdSEYOd2ZbHaUEdMiktWafonHiKCZxa+35zKoh0nYiJwt/a1ZhXxFMmos\nVTwjXh2HEjPGqI61ccpGZ8NyVJzvLH5I+LwIWUWmsjt2tcjYTD1ZPyrjsyScpVXyEDN2dtY3i65m\nV85FdAwwImi9f5iWhSvkbCmQmPU6KuQrkunt4nJKD0IdZTyUmDEy2782Ttk+Hn7g9BpircnOnP7K\nAlLJ5zz8sHwUjojKmsSL26XkOS8qxzqjvrMu1jfzOaTsbD39w3OcyUdyWX52BFSVWZLOiO5fnkeW\nnfkujeqLUNVT0ZnJRN/x80Z38GY+Fbj7A9z9Ze5+g7s/RuQ/3N1f5+4v3n8esU//ZEh7sbu/zd0f\ntM/7QXd/BeTdZ9XB2HAQ1nJeDj2yWMnnvP7J6p4Nr0HIsu9glj+qo1rPoZ/Lly+fex2HfHjuLl++\nXGqzGtfKfGI9I5ml9xciS1P9z8pFyGSjPhyqq6rvUBxyX2U4Fvt4NDtlFUet6kDNhDPHco1r5sRW\n08zmfiM2Il2H6M70c14ko+SqYRUfpY8QfWGzBQfDvd6eFr3+PpLt6a2d3T3reVhu6S5YlG42PgJ5\nyG/NWpv/DQCnYxz7zmUwDYFpKl/JVfJH8kuxtk53v2hmTzCzTzGzm8zsBe7+7NbaS0n0ma21R1Fb\nfsnM7rPX875mdoOZ/SyIfFVr7cdXbfCGM6g4akucsVH4ah5Z5Py1dsg4HOk/VDenVd/aGDn4eK2G\nVXyUPkLV5lb8LV6jq35UtHvGNiDyu5SdwDDWwbtmlfIjsH7OU3Yyk+F0HmtuV9a3mT6N+juy4Wvg\nlO3j0ZAyxsgRn3XmFblQN8oS4sXXEekayVUI0HmRsbV+e6ZksnHLyla+0Ie+ZWj0GzKz2lMyLqcI\nFsuOCNroN2SRfE/nl3509PRMN8r2Nh6ywFYJmhorTqsaMJQfhbFs1AbG2gZnVN9C3M/Mbmit3Whm\n5u7PMLPPMjM2OiN8jpn9l9baW1du34ZJjBzxpSQM067GkcVIbo3jhCMytoZODi95EUnlGqVFMozZ\n/zNjVN6CXPW/KnmZf8QErbLeo0xGPhR5WkLCFHq56lsgM/vW24JxTquQq8jujexh1oaorrVwyvbx\nKI4vHjJZlbIjmSoJiOQiMhGVnyFkPa1CsjIdKBsdORzVp9JZfyaz9IPAY4P9c/HixYP0u7vUq+bv\nEP0jXdExxZn0PkZcD/ZpVKfC7HcU5aN7PdI7+p5V6z0vXI060AGsfAq4i5m9GuI37dMYn+3uv+fu\nP+7udxP5DzGzp1Pa4/dlvsvd37XUwQ1TOMQJqZSd1R/JR2QhIhNR+TWOE6oyrHuJzujTj9lFeg7V\nn9Wr2sGfQ6F0rt2XmTHCdmX3h7oHRvUp3V2W750orzKeXJbbFekdfc+q9Z4XDlmvqvqX3FsJjsY+\nHuVOWUaSqo7jyNmLnEOWGTmI6npIuIN/i9XTVLsi4pXpnZGN2hCNUbZzVnHKM6JQceKXgr+4/Mak\nyLBj/Wrx79cu19P45R4sUzm+6H72hSCtxbtsatdM7bB1PZXy0Vhyv0ZpXHb2GpXtbV0arsTXxgLd\nd3D3F0L8ia21J0JcTRZX8hwze3pr7e3u/kgze4qZ3f+dCtzvZGb3NrPnQZnHmtmfmNltzeyJZvY1\nZva42cZvmMNS53AkF61xmBc5t5GcukbhJccVq3KHHFWcafOov1la5Wq27h9Jz4DX6kuXLoV2IHvL\ncuWhnVrfI99J7ZyhDOpR8ay//JIOMyuVzYDt5p0+tkHK1iy1jx34RsjI/5gJV+JrYuH9nNnIo7GP\nR0fKKk64yhuFFQmIiEHk+GfEIgqP8vmLfSjxqrzEY6SzUj+PUZSfjT/X11EJqzhD5Y++zJmzg3Ek\nbGwseWHqV5bHxW2WoHGZ1m45poj1Z/9zVjmiOPP7swpGBIr1zRie3j+lL5JjVGSU7BHg5tbafZP8\nm8wMn+zd1cxegwKttddD9Elm9u2k48Fm9p9ba38NZV67D77d3X/AzL5ytuEb5jBao6K8UbhfRy/W\niOocEY0RIckI2YgwZXlLd91G9c2QvOoYcB7Xo8Y/Cqt4pqdj1q5G8YiwZT9lGPlYuKZHvlR09DAi\nDJiPdXAbFJFR+lRcgfViembPeM6q9pHbw6/qj2wmoyIzMw5XEZmNPBr7eFSkbImTfZ7yikiMSEam\nMyMYWTsy8hS1OyJUnDYiaSpdOfJqgUQ9qkyUH43tLClTqMwXLnqjOANJzEwbo3J9UVM7VFFa14OL\nLMp2eVWe+9rTkPBlbVKEJjIy2L+qwYnSqwQpq2NJ2fMAO2Ur4QVmdi93v4eZ/bHtjlk8FAXc/U5g\nRB5oZn9AOj7Pdk/+zpTx3YQ+yMz++9oN33ALljjZ5ynPhEKlLW1zVk61IyJPqkxGokYy5/HyEb5W\nidiIhB02bfXbAAAgAElEQVQytpHtGhEQ5YhjPHrZxQwi+4J14S4U9ivTheWVnWAClbUhiitCg3rZ\nno3IVZRXIWYKFdI5U3ZtnLp9PCpSxqgQlwrpmSFX2bWaNxvuyIjSiDytUTZLmyViPHdRmY7RfDIq\nPzquQn3Bo+OJLB8ZVl7YcVeJDbNagHkXzCw/Zoh1MInq4F0zs7mdMKWzepyRkREzJacMTkdE0DLD\nzWmVcCW+FtbW2Vp7h7s/ynZHKy6a2ZNbay9x98eZ2Qtba882s0e7+wPN7B1m9gYze3gv7+53t92T\nxF8m1U919zuamZvZi83skas2fEOKinOt1qsofOiLPap5EQGpkplKWrSTVdXF8bXf1MhjlL2pcZTG\nYRWP0ipQa3tGvCq+Ft9r0c8eeP1n24c+BceZAGLZDmWLlA/Ty6vjjIcA21rdMePyKk/1ke2oIoMI\nNTZZuBJfA6dsH/08HIpZXLx4sVW/4FneyLHnL1q0WEQLQ5YW5VdIiyIs1aOFMwRtpqySHfU7qq8y\nlozsPDpjjS98xYBljkvPrzglVSckkleOR+Y4ROWXlq3qWxrOxmUkk8mN0qphlXfp0qXVrM69733v\n9qxnPWuqzD3vec8Xtfz44obrGJcvX26je7CSN7r/R78jm/2ejvKXvmGR18hozczkqnVUyNiSdS4b\n69F4V8NZ2ixmiFnFB8v8gKq/UfHHMp+HP1l51Xb2tSJdkT6ur9p3vs74sDzWWGc0H7NhlXfhwoVV\nbOQS+2h2/djIo94pU6jeEFm5LD6SW1JXhug3XFk7Mzm1gzS7s8b1ZL8XixbUmQWDx4Lzql/8Q9D1\noPFy17sg6r/EVDsjQ6h2pzJkxwR59yr6XVjlmGL1iKOSU/pai5+sYTmWwWsVmfysrlmsdQ8izrO9\nG04bM846IiIJHM8IYLWu6v2dES8lY3b2dfcsN0pfSshmSFnl5SDZtRpW8aXAdRvT1PoXpY9kenyt\nI47c7uxV9FF51MHpo1fbY/mRj4F9X3qUMUMmPzMuS7C2PTtl+3gUpGzEsJfoUjqqDn31icQhYbP5\n3TBFfLK0JTtrI3K1hIhlJGw0T1eDkDEyo8bGUb3wA0mMMqq8wPYyvOBiGVzQUba1s38G3dOytymq\nNLP6EcfoKCPLRcQM45HB6Wk8F8owZVelWxFBnpMorOJr45SNzoZ5VNakWV2KyIzqjXTMEBJFdiL5\njJSxTHZcsUqkluoatZnHOBubaExUfhZW8SgtwshHUvGKD5b5B5im3qqIa3jmc7C/0stkLwJR9mmU\nfiihUfZOvZUR6+Y0pa9yRfCLTJTtxDZkYRVfE6dsH4+ClCGySZxx4KO0SCZbNJRMNazyzNb9rdha\nBC3Spxa4rLwaz6h/lQWcsebvyTrUlzz6rVRmQFEejTumKYPbF76I0KGsImGtHUbE+E1Z2e/H8D5R\nY8Ry2cKtMDJCLFe5IqppDJaplFkCdsQ2bEBk98aMA98x2iHraaN1LyMaGF7yNkRO4zjvjikiNSJR\nTJ4q8lVdM+MzGudRGtd7nhidbpn1q1QaEhWsM/O3zM6SJ0VCuA9cBtOzHbFDd/aYBPX2ZXUq0hTZ\nteyqkNnbDFeDmJ26fTw6UoZYOpkR8VLxTDYjDNWwwugHooo0cdmlMhnx4vRowTvk92XVxZr7w2Oj\nxusQqAUN61XHFCtOevZKeoWZo43V3So+bshlkdBh/1gGERGzSI6JFsuPwjMGp5qftVm1JZI/D5yy\n0dmwHpbeJ5VyyvGP8iJyMCKEUb3seHFZRchUntKl6ojI4lJSttYbGitXszEJW2s9iYiNmSYkFSd9\nhgCsQYCUPv4NfG8DymVjqNoala/UoYgZ21AOZ+MYyXBcEcHR/FwNIsY4Zft4VKQsIzYqb0SEqgSg\nStCycEXO7LCjiCNdS2QiMpa1fdTvLlsZK8TMj01VPEqLEH2xlTOAxxQxnUlRZFx7eVVOGXlcoHlH\nDPX29NldMyXTER1TVHrM9NsaR0cZOV4xODguI6LF8zhL0DJiFpVZE6dsdDYsx4iocHhEipa+2CMq\nk4VnjyxW0md3tSKZpXpGfRyNSTYGav6yt2Oq+cnmq4LIniq7vNb/ko38rJ4WHW3MynF+B79RkWW6\nzRgRwejNjFWiwnan68SjjEouspmch+3BOrgPeIyRy41sNqPa9xmcsn08GlKWTVrmmGOakltynV0o\nsM6IgJgdfsyQ49jG0ZFG1qvkor5Vds9Uu7Ix5TZl1yx8CEZ6ImOHBpN/Uxa9UIMNLeYzoWL5nqfk\nOpgY4YLMxCsiWb0vMy8P4fkcpS1ZoJcaHDUPOJ6ZMUO5LHxeOGWjs2EZsnsic8wxDfOu1psWI6JQ\nIUBZuiJS1fJMoqryLNfLj/Rk8SxcnaMsrOJLkPleUdjd5dF4lunXLJz5KCNSZXbL+p7pUztTynai\nTiZqrGcWbGt6vZk+ZZ/4yvLYB05b+/dla+OU7ePRkDJEZTLPc8KjejisFoeobZVjhkq32lbnepSe\nqE0jQsYLZYW0qTZE+rhPGQFTeYzRQsUYfZmjtylWwW9mrOhQZAbR9VXlzM6ON5JFPs6IaRHpUot6\n5Vgkl0FdVXKTGZxMnmXOi0ydx1p0ykZnw+Go3B9X6x7KiMGIXLBsNT0jQVH5iNRxm2ZImWrLLClT\nRCvaVYzSlhIylTeyL4esd52wdKxxBLHrNauRF7N4TJBQRcQlsik8LtVjkVl6ldwoQpSVrcisibXX\nolO2j0dByrKbYkR2Zpz67DpKywjYiIgcemSRCRouOhcuXDgTz4hXlNadbKVHtQFluO+q/9k4q3HF\nOnCsVThLqwC/4NExRTP94g9lHNUCro4rYrjL8u+z+pM41qmONOJ89KeTbERwl4yNf0bM+mfpC0F4\nDHrfDzE4OB7RtaMil6Vl4bWhnMsNt25UHWslpxz3Jbtko7SIHFWO9M2kj3bIep1ZmcouW1Q31qH6\nxHVHfVLtqc5BNK/Ve2EWvE5HtrjqhyGJ6hidtFH+Rf+gbYl2zViOd8RwZ0jp6Lojm4V6UP4Q4ok2\nKfstXWTHsF3RldvfoY4xqrKV8Jo4dft4FKQMseTLrsrPXkdpPRyRCLVomK1/ZHE2jvrNdjs52Ad+\nknPx4kXZH6U3WiSjPil5xOg4oyqTfelV3ujLnBk4XMQV0cEybHgxPyNo+Nuz7FhjT1fkrLV25jhj\n5Wii2dljkO47ItbHM/r92JKjjGrseRyriz2OCYL19TRloLgcG7ksvDZO2ehsOAwVJ1w57B2H/I6s\nQgQUGcK8jKiM0mfJFH+wPUywIlI1Q+hU+ahf2W/sqnMymg8VH+WNHOmqjxb5VlF4KUGL/JCMnPV8\nLMe2qcug7exjhjYV/SjUg/WssSOI7cTxqdomtHcItrWIQ39fpsqtgVO2j0dFyqLJy5xyTJud/Mzp\nrywwmFetu3pksRJHnVn/WCYiPep3Z6rv0QLJfczkuV0z463CVcyUyRY5jEc7QVF5Pk4YYURiKjLV\n33mpPqJ87x/r6OWyo4wKGVlS+TNkKCJbWbmozLXCMbRhw/Ehui8ypxzTou/jqL4KMRsRg+o9zcSk\no0rIuL6sbaMw66js0s2Qy0xe5UXjWQlnaVH+yF5mDnjFIVfl1yYyh/6+C4lJT1NtxzzOz44yRmOU\nkSWVP0OG0NbNtCcidlcbp2wfj4qUIUaTnhGxiHRERIH1KDlVLss3y3fEMpm14lHaGvnc3+oOGo9D\nNtY8VlyeZQ+B+pIrspM9qcRdLi7PxpV3xHo/2IB3YoMy0Qs/WA/vdqHBi3bEeB4iIpbFM0Olfs+W\nzUdEzjLjw8ajclWIiOAMQVyKUzY6G9ZB1bnO5LL1LMqL5DiOBIbzR6SFw2vtkF3N8ixfPcaZzUM0\nBzzOs+R7KSoPe0f+VxTGtX30wJj9D9zd6Tavy/EOVyXMJ0mUjNnZ44oYV+RwZH/Mzn5/e39w547l\nRzaqYhdVHxiRLR7Z6ENxyvbxaEiZcsizcFS+euW0aOGoEA21QLBMtLsVkZ9RPCqP6T2c/T5MLXLV\nfCVTHY9ozHl8ojnjcJaWQX25e1r0+zL126h+RcOJi6EiaP2D6RHhUgt0l2cj0IHGAEkY9guJlJKZ\nJWJRHPsQ7e5l/V3D4DA4fSR/NXGt699wfFBrURZmzB5b5LSIMHB8dCwvIiMRAVlKqHq56DiiOrIY\n6ZitW9U32+9ozFkvY3Q/zK4tmZ1d+hr8zI9iuU5CULfyRSIfL7OPSNb4d2kcdt89uFQnYyJ5jq/x\nGzPsS3aMkW0mYkTEIszKnxdO2T4eDSmbgfryzciPys3cbGpxwPRM91JClpWP+hstWGsSskxGjZUa\no2gxz8IqXoUiOyOnX50fZ51cXpETJF+KJI36pu4HtVvF8xEdZ4x0qH7xeGTl1e6YOtqI9Skyxm1Q\n4YxYRXlV2aj/axsnvB82bFgCRbBm5EflZu5PXuMq6R2HkqLsmCBfVXhp3Vz/iISN4tjWiFxnYRWv\ngtfinqZsDBKRDkVCRqSB5fCjiE3WV17r1XHE6thg+cwWZX2MiJmyf1H6yFZm4YxYRXnRmLNsNJdr\n2rNTt49HQcoyp5PDGdGpkK8RYRkRiIxQmF29l3jwLhjWNSJL/WUeS8pyGTUeaxxljOZx5ADPPoUa\n/bZLOSm4KDBpyJyA6pHFnoZP8aJ2YD14nKKXV/q5772OaAeMd9Bmy6s4IlvQlxgc1q2MUTUfZZT8\nhg1XA9G9Fq0HjNEuWZaXkQSOR+sfp40ICuqqECBVZmZHLNJzSFkuX+m3GuNo5zGaxyicpWXgNTmK\ns51WBM3ssLcs9g/axlE7UEe3QVhe6ceTImo82G/gnTJ1ZHF0lFEhslfYDnWMMQsrG6vsIAPJbKRD\n6dswh6MgZR2R8505crPXJfWpuCIREZmqyERxfBtiJhsRrky+64zyRmUxn9s6GiOem8p88S5aND+j\ndFzkcGFUDoTZ+LdlGMaFaeY3ZX0RU3Wys9HRF8kq+cJFvLcBy7L8xYsXrzie0uWjo4087qMdM3UM\nBA1IBGUAonBGtHg8VT8OyT8EG+HboLDE+V5ybHG2vox8cTwjIEsIGROoUVmWH9WbyVfb3NMjGUzL\njn+O5i2ay2g9idKrNjWz25F9V0cRlVz26WVxbtD/QP14fJA/SM6UXeSyyvb1ehHKpmEYbXE2zmp+\n2MYpPWibRmG8ImZt8ZL8pThl+3hUpGyEClkapY8IgYpzniIk6nght2VmB8zsytfXR2QtI1WzhKtK\n5LJ8NY68G5bNB8tH8zq6F2aQGbC+AGM6Gk5ePNF4KuKFMv2D6UyguD28AOOiqsgdluM2Kb3K4Chi\npuKV1+VnxydHi3vHEoMTpal0zq/WuSZO2ehsOD9E33vOj9a8yPlXxInzKoRDrT0RKamQHyZK2U5Z\npqv/7UdGulR9lfZWxiM7YTGam2heM7s2i8zeqnDka3Ee2r/ohA3rQnuMvkKfQ0VQog8+GOyyIyLG\nMpcuXXqn7VMki3fRsC/VHbMMSg/7FVl4lMZ9mdkt4/BaOGX7ePSkTE1m1SEf3QiZk89yM7rM9Is9\nRoRMERPVBiYtivREY1QlXVlels9tzxZaHrfsKGM1vARMrCpOd1+EzfI/lGT5imyvF48tMqnBtA7e\n+cJrlsd1MEakKWpTNHbRDt1oPDqqhIzLR4RLlRnJnzdO2ehsWBfqXqnePyO5zMlHqB3zUV2KcFQI\njiqLbRiRF6UrkxmRtNkyva3c7qx9URt5XCvhbE46lMON6RWnW9mZzFdTRxJHbWaSw2nZWs9tQmKT\n2clMD9ugJePF7a76N9z+rN6MVFVJ1Kz8mjhl+3g0pGzkZCsnfSa96uizXJQfkYkerxCwSjzKi3bB\nsC2zu2drHWWsPPGK5KK5YyjSuhT8Bc+OK/YwGkTcferllRwuYtHOWc9HGU7ndrERV3n9eEd/e1Rv\nd/QUD0lkj/cdM87rwPlHksZPI1GGy0TzqIxUxeBUDSqnj2SV3Jo4ZaOzYRlGTrZy0qPySr7q6LNc\nRiqiOtYiONmRxWinDNOjckvqm213NmbRnKjxjOarQpSXAu1v5FeNfLDI32JyxrJ9Lc7S+65ZVJfK\nw+P5uCOG9hLBttPslhNMXN4s/k5FMr19FVsQ+SuRzVJhpUPlqd09Jat0roVTto9HQ8o6+IvNaUou\nSosWi35V4agd0Zd6TQJmlv+GLDqyyPEeViSL9fCiFJEtJnsc5raPiFh1HqKjjBzO0jIoRyVaRNVu\nkDKauChFBE0dbWSj3NNGxxI5r+vn3ajW2hlChQYH6+uoHGXEvD4+iojh2GE/WF9EjBTWMjjZldsx\n0n0o1Dxv2NChnDt1vyinXK13mU4VznRFclWSMiOrCFKFiGEaEpiRfGstPeao2pGF+aPSs3nAtkfz\nou6L2bVF+Ua41iMissZhFed0XFsz3yTzV/pDSKWfjylieq8zOrKodvP6uPBvzEYEDetk/yabK2V3\nFGFCm5uFI1un7NzsMcY17dmp28ejIGVV51otDofoUzL8pch0MWFYAqxDEZAoLyM3lTxMzxZIJkNM\n/Drw92+q/JJjjNx2HhsexyVgkhA5972PbAhH9SI5iRan6vFA7ns3DryjxuW4nUjaEFi+0hbuC7eT\nx1HtoEVPc9VCn8mNCNmhi/jahmWEUzY6G+ZRda6r983SsuwQRd/fjFhUMSIqWL/KywgPllN1VEhS\nVEaRPQ6PdGR9xvbzWLFcJDMDXE97XIWRXJjNvQm561E+FxOa2TarY4kMTkcSpuRGBAbTsX8sw3Y7\nsmNZH7mubCywLapdh2ANHTN1nSqOgpR1rEnOFCGphLN4RDI6ZnfBsJ3Zb8yyI4uH7IKpHbeon9Fu\nXEbkMhmetyVHGav3S4bMcHEYjV1/StTj0XHEHu8LHxOabqg7QansmqFxUu1HxwN3t1Qf1DEN3hFT\nu2vcDs7De2RJnFExTMrYsY6IsI2ukZ7zwikbnQ3LUSVTmdPOaRF5isI9XjmCl61PiiBlR78rBCbb\nEctklBymRWUqdWd9qObxnLKMuo7mvYrM34r8Jnc/88fS0XFElaZ8kK6v+jMLbBeOHftAaBPYX+KX\neKhdL7PaK/FH4670joB97fZKHf9kGQ5n+XzFPld2y84Dp2wfj4qUdWTOdvUa6cnqqiwUUfnqMUUO\nsywuOGb5kUVuV9+tUrpGhA7jmRznZYtoNJ5qfDicXRnRdv0I/MWOdquU0eOwOo6I+ZFcX/D7Iobl\nlJHvhqL3O+oDtk8dO+z6kWChwVG/G0PChOXQYGEe1ndIPJu3TCYyLpyGutRiz4ZJ5a2NUzY6Gw5H\n5mxHhKzqtGd1MdnAtBkilpGW3oeItETHFzOStVSGjytGpCwiflnfRwQt2s3L5lTNce/TGohsrbpy\nmG0Q5mW+F9pGJgXZXwBhG6PjjD1f2bJerpfJZLg+JmZVwjVDzDJ7hYi+41he2ThFxCKyFRG3rMwh\nOGX7eDSkbI1Jy4iZIl9RfISMcPV41I5RezGe7aZx2YgIZeQH46oML5xRPf2TLbRqrDJSFo0NH21U\n41YFOuhmVx5PNMuPKPIihgtZT8Mz6MphUeRDEa1oDLh9fQ6w3qgMllNHIHEhze5PNvZrLb7ZMUms\na8bgRMiM27Va/E/Z6GxYhjXuiYyYKfIVxSv1KLIR6a62jYmnyld19zKzxEjpHJGvjJBVyFq2I1Yh\naBkBW3oP9XWddeMuUOSMI6nq4N2ciHgpsF1V/YrGhklP5XvApC2y/VEZJjUdEYmpgnVFMpW8UTui\n/NmdvbVwyvbxaEiZAjuFkXOYER6Wy4iSIjyKVGRt4fDomGL0X2SzRxYVMYp21SJdSo51RWSNd+mY\nKKjxjIhYNHZqvg8hZuqLzaQJ05TRy4y52j1jGSZwiryp44cd6jiju1/xlkVsX7ajVTnKqIikymMS\nOLs7tsTg8JhWwnxlOUYkvyZmHeANt16MHPLIaeW0EWHCeOXY4kjXzDHF0fHD6pHFqLzK5yOVlbZE\nxzCzo49cNhoHNVY4jmoeszmsYuRbRWvg6OGrIgOVB8sqH9sVpXOcT4dg+6Ljh/gQNDvKyASw2wom\nL9F3U+lUUPOgdChbGhEyFebrCEp+TXt26vbxKEiZcvCUA16VHznv2SLBMqMveHQUMctjosJ53MZs\n54oJ2Si9H2XkdnB6VAeXyRbLUT6PLy/kM/PJGC0eM04KX3GhqzgpvW9snHs70UBEO1aYx4QAjzMy\nsUFS1ONKjo0QH1vEvB52P/t6fD7mgXNxyDHGiKStYXAQauxHsueBUzY6G+ZRWZtGZTPnXoUVWWK9\nUbqS43BWDxMbJkVKvkKGZsMzpKySXuljNvZsa2bmkzE60qhIQcVX6zaJbXvPi/wBXJ+7P9LTI5+D\n1+iej7qUz4bj0evCB4qKrPUxQxvX0eeA8/pYqBMw2UkQ9AuqYLuodKBNroZ5/DiNdxEz2bVwyvbx\n6u87JqhMXvRFq6QxCZglYopIcTxrw4xeJkAZWVNkSPV39knUhQsXwh2wQwgZLp5d9uLFi2d29rJ2\n9ava3RvVnZVVdYzahAZE6Yp0Rv2J2h/95UBWJkvne0SlR9+HyGCzbHQvcr7SpXRX02cQfT9H8ueJ\nzJGLHLgR3P0B7v4yd7/B3R8j8h/u7q9z9xfvP4+AvEuQ/mxIv4e7/5a7v9zdn+nut11lADZIzDgj\nSnaUpkgTgo8NcrmITEREhOsZXVV9ShZJTPad4XDleCH3JarjEEKmyKAih6O6L126ZJcuXXpnefyM\noMpcunQpbEPUJtRVGR8lP6qjMt9ZXdV7JJNX96D6bs3cy+rej9Ij/djepYi+hyP588LMHFf7fiz2\n8Sh2yhjK6cnSRvKZEzXj7Kl4x2jnS+2gYft7GB1vbkdlJ2xJem9TdUctcu6zHTTsS0QIOK5k1Nir\nuatALWocrlz7pz8t6kYDX+LBRsBdH1vsYZbjdvJuVK8fgbtOS8P8xJB30FSZ7Mgj7rThOLJsT+Nd\nO5TlOeP0Hsc6OMzXLE/NhUpbA2vrdPeLZvYEM/sUM7vJzF7g7s9urb2URJ/ZWnuUUPGXrbX7iPRv\nN7Pvaq09w92/z8y+2Mz+w5pt33AW6v5QjnbmTFUcv57X1xyVrhxPVX/koGaOMNfNYSV3HuE+vofu\nmlV2xpg0qTHh9Gzu1fxW1xdlW0f/URbZ8F4W1/q+rrL9x3U/2h1j3QzVHh6nLoNvWcS2qbDZlbYZ\n7b7aRev1Ylq2C4Z2iO08gm2Psos8LizPcmw3lQ1kOewPpyvZNXDK9vFoSJmaNPXlZtmRE585/WrB\nGX3BMR4Rg4yQcd3Rb8owrzunh6QzYYrS1W4ROtPZDlD2icpW5i27cngpIgOmnIrMSOLi3Fq7wgj1\nPDQOaHzQmKMBQoLX9bCBw3bggt/bMpPe5xSJFMujwVDHPpiwcdzsLBGrxkeGqKdXDQ6CjRBjlL8W\nzkH3/czshtbajWZm7v4MM/ssM2OjU4bvBvP+ZvbQfdJTzOwbbCNl5wJ1T+B3PpKN1q0orPJYt3Ly\nuU5Oq+5CsczoD5vXCivypMJMEFFHl+M2VvseyfEYR6RNXTmcpSGUf5SFlfMdPYBG+6VOZ6C9Qb3o\n43QZjGM9+HAP9Uf5+JZFJYPh3v5uG9kmoh/AeaPxZzufEbgIPA9dB9tLtqlsN9Wcov1Tvtcofw2c\nsn08GlK2BkaLRlQGv6ycnsU7+IkMQu2gcd5IZzU9I0JYJju6pogWjxN+KsfjoiNxkX4cC5UWjbUa\n0xF4Ye7hikPer5HzYnblf3zxfDFpUOEe5x2rrkMRnWq6ImDYBt6l4kVWLeCKmKkxRLnZBZYNyyh9\nDSxp51Jk99MBuIuZvRriN5nZxwi5z3b3TzCzPzSzL2+t9TJ/w91faGbvMLNva609y8xub2Zvaq29\nA3TeZe2Gb1gPkaOe3W9IFjh9ROowfdSmrFxGNFiOiQ23LSJ2WZ+U7spRuYyQYXonnlFb1Txk4xSN\nmdn86/GRHJnFznqXUcSHCYFqT3bSg8kD1ocEjmXUTlMUZlKFfeUwEiZlEzNignlYTuVHZUeo2MW1\nCdMS8rgEp24fj46UKac8y19aR0bEFAmK4liu50dEItuFUkQnS0eiM9o5y+rFHbBsZ4zbgvpVGe6v\nImKKrPF48hwpAhzdIyNEizkv6lF+5pRwHi7CbMxxAe5GvI9BZBAwHd/O2PMxnQ1NdmSxj3EW5h2z\nflxREU1VXs3XzG7ZrMFBQzYK82KfkbHMOTkUC4zOHfZGoeOJrbUnQlw1kit5jpk9vbX2dnd/pO2e\n7N1/n/cBrbXXuPsHmdkvuvvvm9mfF3RuWBm8DkW7ZIc4Lrx+ZelKhsOjnSLO62ukKrd0tysrX9GJ\nv6diOVWu180ymJ6NS6+Txz4L41hHc6LiEbodwTgjesiLadim6AEygn0LtpNdB66/yofgna9Ilne0\nsA9o1/h0SR+f/jMQtVOGYfUQ2Gy8a4b1VeZO2b9spy7yNVR4xt5FdvVQLNSX2cijsY9HQcoiB1zJ\nROWqYeUQRuksw/EqQcMwExxugyJivfyIGKmjiaxrhpRF7VWv4I/6ijJRXC3mrFPlR+EszWx8lAON\nHT4lVE5QhZThwsSESRnivnjzrpYiVVg3GoTLl88eeWTDzcdDmECh08AGDNuKBocNHM9FJhfFsV7W\ny4YlSq8aHAyPrkeGm1tr903ybzKzu0H8rmb2GhRorb0eok+y3Xn4nvea/fVGd3++mf1dM/sJM7ud\nu9+m7Z4GntG5YR3g93hpuWqY60DiwLqjskpXtk6q9Jkjf3iN8nt4RNY4DY9PjshdlNfri/o2ikdz\nlj00zMJZmtnYnqI9UL8xUyd0erivoSiH6V1n9HD3woULVxx9rPh+2K6epk6IYDrbnz4vXFaRMHyA\nyA8Tlf2I5gHHKtuJyvRj/1EH20v0KaphTEP9nH4kyGzk0djHo3r7YgdP5hLHfOSwR/Xil5nLqi14\nlKvG4sAAACAASURBVOcvTNQPDLNOtahwnOvjdqsnUdnTqYgcqXT1NkZFyNQOmyKWqo4LFy5Islkh\njb2OrB6Vr/RVdyqXfJg0R33k+czqjvqs5nl072AZ9SSU7/fs+6aMAOtW+aP0Sl71u8/6ZsutjZEj\nqpy1AV5gZvdy93v47g1QDzGzZ6OAu98Jog80sz/Yp7+Pu7/rPnwHM/s/zOylbVfxL5nZ5+zLPMzM\nfuqAbm8oInPiOH82PKo3IluYj+mj0wZ8VfpUvrr3I1LI8crRw6wt2Ufpzkga5vU3JY5087HIyo4f\nhpmQqnpGRDPqa+8b7yxGcqM2cF39Go1hpHNUH99TihhH9yjLRt8NJa/qiO5/tQsa1RPFlf4ZYJuv\nFarfxWhcBY7GPh7FTlkE5RgtdZoi0sFhxOioHDuoyuHFvCis4iNHWxEEs/jIompfRnwyQsJpve3R\nk63so8YvmiN15bCKK2QLV7SQchifkOHTsGjxVU9Mexk+9uB+5R9PchuwHOexLjO74r/MsF+4M4bp\n/MQP36gY7aJ1HbhLh/r5KSOW7f0Z7Z519HgfK543HDcsy/Ic5vuip42ua2Ntna21d7j7o8zseWZ2\n0cye3Fp7ibs/zsxe2Fp7tpk92t0faLtz8W8ws4fvi3+omf1Hd79suwd539ZueSvV15jZM9z9m83s\nv5nZf1q14RtSZEfVljhb2foVOYwqzO0bOcH8mSFN6kUg0e4Y5ikZLl+R4TpGxIhl1DirsVJzocad\n5aO5HiGzo+phmrLd/LZFZeMR+DboLtfHlh8Oor3Atiibwm2KHjT2+nqYjyaiXrRnvRzbTbWLhrox\nDXVznG0Yg+3dSEfXU7GdHM709HHC3TJV5lCcsn08GlIWOV3ZZGaLAYYjHapOtYBgvCMjVxHZiMIs\n1/OxTaMdJ7P8yCISpoh4Vd/eyEcAlC6WUWOIb57M5k3J8DirOY7mXX2hMS0ycsqR6HEmaD29L0q8\nQLEBx4U+MrpITthJ6mX7GOPvAJBwdR28iHa5rpPfjBUZQCRfbHTUPOD9rggbx3mukPixbsRSg8Ph\na4XzqL+19lwzey6lfT2EH2tmjxXlft3M7h3ovNF2b67acM7geyJzurlM5sjzWjLSN/pwHVG5KH1E\nUBTJ4bVTxXtaRL5wTe7r54iUYZlKGNuCa7SSwfho3vBeULaMw1ma2dieqnXeLP+dOK7J6C/0dLRb\n3d6gbB9L9FOwrk5yMn+B7YeyJ0ykul5lp7isesiJtgzDXV6NK8dxvJGg4tiqMOvE8kq2y2PZUfha\n4JTt49GQso4qgVLpIycd8w69oaLyvEs2ap8iYCOyp9KiY2dZeSZRKi2S73VWZCppqmzU9sq4Zhg5\n65wWOelRerZYo4wiOtxHXLjVrlFkgBSBUv1CvbhAZ08gMR71nwkXhrnc6LvK7Y7iXO7Qhbs6/2sb\npxknecOtD9G9UUkfOemYVyF9WX18RIvz1bWyG6RIS0TyMA3XuJGsyl9CIBWp4u93RB5H7cExzsY1\nC0cYOesqLSIlXAbl+i4UkjDMZxLS19wuj2GUVfPMfY8IUZdX5Al9B0V+WN8sweF6o2s0BxzmOYzK\nLUXWLs5fC6duH4+KlI2Il3LIZ3SzY8npSBqwHrWrpXRwe9VuGodVGxRJyggQ/uE07lzx7prZeDeN\n01R7sjCPF4+bepLFciquxrlDzccI/KVWR+Qy5yEz6Lyo43E+NNTKOPcy/GeW2Dd+26JqG+rsY9TT\n8a2MfE/39iExw6MIfPQQ5yQilxzucSRp0W4Zti0idJEDoeqOjBaHlSEZkbQ1ccpGZ8NyRPdF5pDP\n6FYOT0Q4oryoPSOCkTnS6sPHFvmYYpTOu2O8LlfTs7cxRi8Hyf5zjWWVHJOwaJxRxmz+NfgKvDuT\nXXGdzWw+HqvvZdjOYL0ox/UwIr8M64h2wboc1ocvNEF7qo41Yrx/FFlkO9zT8cryvU4mqhjObF6v\nE8d1ZFOVjmzsWf/aOGX7eBSkTDlsKj3KUwQHw0p/9IXlcEbQojwOZ21UBKfLqJ0uJExR+YxgMTHC\n36ChzozUcX0qnhG07KPmMJqLzOmP0tWXuS+YnI8EBdOU0UR5XKy77m7Qe9/wuAougkofHzXgPGy3\nMiz8SmMme2xIlE6zK40jkilcnJlUoYFF3Wr3jAkfXtlIKFk2LNg/TB8ZHAQaH7wqfWvilI3Ohnnw\n/ZA52RHJwXBEllh/pkPVx+RhRKyw7mxXKSItapcJCRTLILHidDyyOCJlkY4ojcM4RhWiFs0bh/m+\niOYskjGL/S71lkUzbZfRhrPzjj9b6LaN36aINrn3ix9Kc/2KJCgiieRIkT9l9zMixun8MBNtfP9g\nGWXb8apkug+BtjyyRcrmqTHF+pXdVTpQXo0/61sLp2wfj4KUKVQmMXLkVfkRQetQN6kiUFleRNzU\njpsiJSMyhHKVHS0mZUjIKkSOdWV1RXFOx35G88P52VXNeRXZgogLtTJ8bEBx8eVwbx/ugvXFNQqj\nweJ29jx+AqfIGv7gGtuvnt6hQVJkidN6Ov9RNr8cRO1G8jyykVS7Z0oHL/xswDg9I1OobyRzXjhl\no7Ph6iFy3ntcySrHfkQG8DpLyLhNlc+IDFXyMB13vTISxztgTNjMNAnM0lWbMiKW2aLsqua8CmVn\nlePesWR3jMvjGowPNrsvhOlYD7aTbZTKi/y53jdlc/jvZtRDyozs4TwiicPxZB9CzYeaT7RNWRih\n7CXbVJZXdhdxnrtlp2wfj4aURROrnO9Ddfa8is6RjiXt4EUgI2qqzUx6IploUYzq6XqzulhmRj4i\nalge5Th9lpBlCwrLzaSpXZoK+oLN5CLqhyIjynhFhEkRKx7nzGjxOIzuS17YlQFQRoLbodqjwH2v\nLNTKmEWGS+VfLZyy0dmwDNE9oZzvQ3X2vIrOrP5RGpKLiDxERES1j8lNpov1Vsigqp/rwni0+5fJ\nK/1ReR6HWUIW7biyM62c78gh74Qkc8gjmW6jOC9an3FO1ANU1Ml5qKuPabfRTIy4z5EMzhGXU3Io\ngztfTIyidvQyCFVe9SWCstsjPVXda+GU7ePRkLKOzLlWjjqXUXkVUmQW/3ZsRByiHSMsU9kly9Ii\nvUh6op0vLquOLPayTKCqO2gqnPUzG3s13qMrh2egFnl1xTAbgOypp9nZ1+D3tuLredFAoj5FepTh\n4SdtfMTCPd9Z4x2qHu46+q6XInVROpLBKNyh5i/aHeP8qDyOByMyXD0vImd8XRtVZ3jDrRPKkc7W\nK0yP8rL7rUJUMsKS6YjKRJ/s9fe8G4Zy0RFE9ZbFTJ53vjAfy1Z+U8a2AcehQvxUWM2Fuk9GwCPv\nZvHajHlsr9m5V74Arr3qNBDWE4WVj4fpFy5cuMLOcpvM9Jgp24S2uqexnVX3du9r5msoG4/AeGaD\neFyVfety3faPbKeazwo5O4/dslO3j0dFypSjHcmocObgZQ6/2dknQyzD+ZW6oy18JD/cpmihq5Cv\nqI9V4sbtYvKWkS9eUEekE8dnRMYykpaFR4gWvSoxww8er8AFGBdINMK4yHWD28eD25U98cV+zxKu\nPp79mKEqi2OqjhNif6Lv3IiYse6MiHFeRqKwHThuI3kuOyJgM/dcFadsdDYsR7SzgZghY1wu2oGJ\n9GYEbSQzIm0RwctIXEamlDzqqRA3RcpUmahNUTqOf2UMOMzzNroPqlBrer/ikfiOyOdB+ejEDBKn\nbouQ+CCBUvViu7D+nr+EcPG4d3kkemg3lbzageuyeFX9xDq5LI4N7rCxvVKEisF1cR0ZuN6R/jVw\nyvbxKEhZNJGVG2JE4CJnMQpHJAxlR9vyUdsip5V1RsSmUveobEbcRoRJkSwlq+Kqv1HdUVrlOoPI\nsY+uKKOAu1ERoeCFqxsLZTR4PKJ+K8ODY49GRo1x1p+oLI6bIkqYFhmHaEyx3awfdWNblM6OyOBE\nyMYky1sTp2x0Nswjuh8q90kmo5xILpORgVGdFSc0qovbpwhjRuZG/Y2IWkbcME2VZxJVJWSVnTHV\nnoyMRddorszO2lFeTyP72GX4hIUCkhSWU+s62kde13knisNdDueMCReHsXxPj/wL9YCVdSk5LqP0\nYzrLzMzLKMy7WcqGZm2byVsLp2wfj4KUKWROdzbh7MyP0hV4twqf/qhdokwuklEkhneSMrkojGmo\nLzuyyOlcPtopU2XUGGGf1JuXel+j3UMVVvOF41wFOwhq4YsW3MiI90WRjS7mY7zrYkKnjAuGo6dq\nUfoozGSSF2cmSz2u5MxqRxejnTMeg4zkqXLsaKhFnPuaGS4uzwZwbZyy0dmwDjKnO7t/eB3rUDvy\nlbqrJGI2T+keEanKLpba1RrJq3BUHtP7C0SwTWYWHm/EOPa3y+KxQkUo1Lji3B4KdZKHr0jOehn2\nZZgQsK+AfwSNuqM/iB69GbLn4Q4XpqswQsngyZbMR+hlornh72LFfqO+jJihrApjnfzbtKjOKByN\nHZO+NXDK9vFoSNmIaLEMh6uES8nzlx/1R4uQklNhrG90XA+JSWVXS6WpOkZHFiPiFcn19kVkTYVV\nn7IP9q0jm4vKworgL3V37jGvG0h29HlxVcdPzPRTtJ7eocKqHm4z6kJi1PsfHUeM7nMkRfzdiHbf\n1G4W6uQ61G5gJJMRMZSLSBHqZsOlEOm5Vjimtmw4Dox2gPCqwoqIZfqyT1ZnlWwx4ajUp0hMJJfV\ny3JMuNTr8TFdlckIW6/nkP8vU/PIcb5HRvYjg1rHFfkZPUzF9Rd9hh7HvqGvwPo53OUzsqXsTWaH\nus1EYhPZfbbzmI5pvU3Kl2Bd2O7sdffYvi7P9h7Lqblgm8pxBpa91jhl+3g0pKxjNOkzzvcsWYv0\nRvERSeSwalf0BGFEtszqxC3rp3LSR2RpCbmKdPOCrtoULfrR2FegFiL1RefXvCvgYhiRk2iHicMZ\nGYrGgPOyBatKuLK5y0iQklFjHRE6LKN0RH2K6spkZxd2NHB4XRszzvOGDYwZ55ud/tk6RmQgagsf\nu+N7XhGSqO0VsjYiblk/R2VVvZWjh6N+j3ShvuwYYxbOoJx25cvgOp457izLdTBp6XE+oohEhNsW\nPcTjsc+Ix4hwcRjrq+hXY6kIUUSmOB/7Hr2JMSNjURszmQiqvrVx6vbx6EjZLDLCk6UrImKW78bw\nE56ez2FFXrJdMt6pq5AtdYRwyY4Y6huV4Tq4HUy0VF0jQsdjXSEjWTgCf6kjQ4ZkSxlBXsDVQtnz\n1OLN4Q4sNzrKgG9FxPHn44ju+ctA1GLMRE2Rt97PbKeN53c0hyzTmt4561DETumNDE5kxCsE7DyM\nzykbnQ1XF2qtixybaF2KyIBZ/sbFTKfSGxGPCuGK9M0eTcT/LGM9fB2FVVzpUu2N+tPTs5MVkT3r\nqJBwfmA88p3YEY8eJPf+dZuD/gIez2Rbo9qndsey3TwcY+6XCnMdEUHD/kT3I54wUXOF8t2mRraL\n/YwsPZJl4FFSVWdE6ir61zo+q9p1ajgqUrbU6VYkTOlVcbVTVSFoI8Kg2qUWKCYl/NuvCrFSujCN\ny2Xps6QuImW40FYIWdSHpcRMzWf0RVaLoorjAos6+UmeImJ9ke1hJFJ4jIed/4hIKUerEub2otHD\nOjJCp/QqstbLYZoKm9Veo8/jwnVFu5SVBbxicHr61TAIp2x0NhyOkdOt1oeZeyrTFdXP6dFnZhdJ\nkRkmP9FRw4gIReQoOoJYJXWqHREB49+aYXo2fuphYBRWjvDIBuK6yQQJwUSIbXS3ayiPtrCTHUzr\nxAVtjUpH+8uETREphcxXwDWeCRITpagdXAf7AVxHB85fZHfYBi2xWcqejqDq4b5h/eeJU7aPR0HK\n1AQqp7taBuMqrSMjZBzPvuAK6ikTE45DgLqinS+UjQjRaOdKLbZZWZTFuiMdOL5KTunjNEyP4pzG\nC1I13sO4eCoiMmqT2kHi/kRkQ80J1xHdZ5WyawDricgUplVIT7V9VR3HvLAfc9s2XH1kDvbI0c7S\n0NFXMipcIWQVXRFxnCWQEapEsKdHMipdEbyorNLF48Xpqgw+vIvq7XJcB4dVnNN4rcQ1nQmXcsrx\ngyc+sB7Ow/pVOspzn7l+JD9IVHjMFMmJZNZal7kOZZei8c9ITz/COCJGWf4sWbsWOGX7eBSkbITM\nEZ9x1CrOr6qX47jFq8Izu1gZycH2ZbtkSg/KsZ5sB4zjZrU/pXb3K/6rLNshU7to6qPmLZrDaM5G\nqDgdIwPY2pX/U4aLoto1U7tDKB8Z0sh4YRx3uJA0jvrKO1VR3RH5HJHInsbGfbSLxiSuujvGRE+N\np5KtopdZUnbDhrWh1iYVH+lQejiMV3WErlp+9MmO8Kk1We10qXZEu2lKDx5lXLprxuW5Haq9qCsb\nA5yDaKxZ5hCo00Noc/jBak9DOSRx3Xbyrln3M9TbiKu7Y71OjHO4X/kBaSbTw6xTneqICB6TSCZo\neB9k9pvDmV3CPKwLw0yesY4lvtWxkrpjxtGQMuVsL9UTfbmiOs30a/CV7IiQcV8q5CsiV9HvtyIZ\ndbTQ7OzvwLDNI1I2Cndd3I6szZXducjhj+4TXoxH4AWLjyWMiBkuyrjYIjnr7VYLNC+avEirdnYj\n042a6k9fyNH4cR1832Ofou9P9JRT7fhhOaUrMqxRmMlVdFSE9arx5DKcz2lcPxo8ZfjWwkb0NkQ4\n9N7gtSzTqWSya0SEFPlQ+TOEjEnSSG5EfiI92VFGdWRRETmWidrDZUbjo+azslNWIWnKB4r+MLrn\noyOOZAJtAdpKjnPbe7p6FT62q9cXkTUu0+0e2ko+MtnboOypuoc7oeEHoyP7r2RwXPBBL5flMTfT\nvw3D8Yz0KKh8TsP6lX2s+GOzOGX7eDSk7BAo5w/TVVw9DVDlI9lq2eiGVAQp6ocqU9UblVNHBTNC\nFH2qBCuSx3ZEbcI0BBPpbLzVOOEXG+eYCZoqp4gRyly8ePHMUz7Vxt4vJa/CaheK9UU7WpGu3g9F\nsNCocftxDiNSieCdQZUe7YopIsZ9q0AZF0znNGXAzhvsMG/YcCgUETPTb01ksoXhCnmL0qK6Mp3Z\np1omy8/KMTFSBCrSmenJ0hUhwzj/T9mIjKm8KrgMkyyzK48ycj6nI3p+9LCP5wblmTD1NOyrIgnc\nNyZGGZHqeaq+7N7PSJlCJKOIj+qfKjNLjHBeMjKWtes8cer28ahIGTuRI0d2ie5RnWb5WxYVuchk\nsL0R2cl2k6Kjgr1taueqhyPChC8TYXm1u1bZNYvayrtpOC4jQpfNS3avjOZcGWoMjxZ5zuMwL/b9\nSRfmYzmUj/7AmcPqWIM65oCkxv2WnTY+Aoh9Z0LXP2yMFSHsV0XwsL/Rd7xCgrCsajPri8YzQ9QW\n1a7zMESnbHQ2LAc7gtH6sMRxyXTxlckCpkcfbtsMsVGfmV2nKE+9WGO0s1Y5sqh2zaK2qjDurvFY\n8/jzHCjyy3PaEZG1aJesh1kOSVhPV+ti9wF4Xe42V+2e9bYrW5PtjnEf+IFm7w/ae+4Dp3c7rmw8\n28qeF4UVwVNl+9iy3cMwEyPcXYtsVmTfqlD1cvi8cMr28ahIGSJy2rI4pqkvcFQHPxVQOqvhqI1Y\nlyIeKo1JiCJWrFuVqZIqJlZRGNMiUoZj2v87IyKY6tMRjVc0X7OLShbuiyIvzmpBw8VQLabRwsxp\nlXb1evmMPsr1OO8AdsOExi46ntHrwTJ9PNSOGu/gjXbsol0xlMEr7uyhPC/Q3JZoAV9C1q4Wjq09\nG44PytmOCBCXi5z6KMzXiJBlYYwrGUVSsk9vR5SfkTTlII/IVi9TPbKoCBiXVWEsk5Exbn82Tzz/\nIygChojIUrfXfG91m4BHBPvarIgV2wfl66E8h5UN4DrwP0ix/d2uYPnej54XHVHEsmpHDcORf4A+\nhSJOLMM2jskRzxHPm8pHOTXO1xqnbB+PgpSNJnvpzZCRs2qdMwtBVD+TFkS0A8ZyirBg3eh8R8RH\ntTuSyT7Zzl7Ul0xuVA7bpOZmKSlT5GoEtZCzTo6rBT6bD9YVjUOU1xfZaNeLdSuCE93/bDCz70lW\nF8vh2CuylskvnfM1ZKr3zSxO2ehsWB+H3C9VQjZbN6bjyQCWUYQjk0HSksmpdEyLCJ3qw4hIcpoi\nU9Hr7tVuXIWQ8XgxOYjmYuZeYYe9h3F9xjxMR9unHg5yu5HE4ANCfojIpKSnKyKkxgXtJJbB/kbf\nAyYzajwzwhURpJEMY4ZUsa1a6k9H9Y9k1qqTdZ8qjoKUHYqIsLBMB29rYz7m4W4PEiWWUWRKkS3V\n3hG5MbMzu2LVHSomNpXdrSxvFB61T/WP2xuND6bjfGXkIUPFEckMMi7qaCDQMEXEjV/WoYxIl8N+\nsBHov0NDQ4Tj2MHGinfLkDBiu3jO8L/VeJx5jhRxUoROhbGN2BbWh2BiyU9Kcdw4zvoiufMmYohT\nNjobrj4i0sEyKpzpiEhKtrZFn6guRWJYJjtmGKWbnd1pU7tcvGuG8rO7ZpiOJE3tpkXxXh+mqV1P\nls3mWyGyoWinoyOLTM44zrqyNkQP5jis1vzR7hjvjDGRRDkca3zxBvoB7Avwd6FfFfnKvjvYJtaN\n9ghtFLZTETNlW3HceK6UvVS28ryIGOKU7ePRkLLIueb8Ho5ImMpTi4AiUlFdUViRM3Ris7YpJ1bJ\nRMcUR3EmP+p19YpIRXmRzCGkrI9ftHsWjQ+m87yoeITIuYiuyonABU09vY0Wv+j4Q9Surr+PG6bj\n2XjUh2Pc5fmJJepjA4SGBtMjI4gGjmV48eZwNmaRfETEMoOTGZZRG7K5XRPKSd2wgdekKL+Ho/uI\nnXhVlnVEelAuaoNqk9KZrbWRw8qEJvqMSNso3totZEvtZEVHFlUa6uL2RbtmXB/PIY5NRtA6IqLG\n4J0wVRZtDPskeMQ+Au+EqTW/25TKsUq2QVHbI3uMhKzLsF1RZK2ns5yy86oM2xmWZz29nihcuSrd\nOG7KDmMet5nlWN8aOHX7eDSkTKEymSOZiBwt1ceEa6RLkRFcuLJyql28SKp4RFzUQhXJqLZG+VU9\ns3qVLhwLRcoOXQB44arIc3zULiYwUdlI92h+e/sj48ZXXDjxGj2hjMZY9YvbF41pdL+bjY8zVvSN\nZKuL/IzsIThlo7NhPVTuk5FMRMgiudH3j52m6OgiymbkalSO0yKy0uNRfqZzRAZxXKp9UsSR+zFD\nyJbslo3AO2FdJ67rfJSxp6kdNbYDXRfbwt4ffgDJZdlWq7ga8y6DZELd+5E8jo8iIhlJUTKKfCn0\n3S+WzYhVhBnCdF6yS3HK9vGoSFnFmc0mO3PsVDm1azZTvuIgR2mKjGQ7TBxXxxQxjrK8S6b08o6X\nklOyo+OOnI5jwruA2UeNcTSf2ZypL7MyCP0ahdHIKGOIcaWjl8U/zVQ6+Cki6+3zi/Fod4x3xtjw\n4bFGrCsjWv3K301F7lBGES2UVQaLw1yW5bjdbCyihX2WeJ2HATplo7NhOSLHEcPZvaPWpyhP1aeu\n0foWkYfoU5GJjiUq8sKkButRO2NRHVl8ZtesNX3ckfXg+sdHFyNypmxTNo8dSlY9LEZbxbI9TRG4\nnt6JBB63Z/vB/0XGJzGidTbaHevl2F7j2KJtuHTp0hXHG7F90Q4Y6ke7qr5XI3+Cd904jG3leGTj\n8Bhiz2M7GaWh78HgekZY256dsn08KlKGGBEilq0SskguO9aodp9GRxejNitHNnJuFQHDeEauMkKE\nshmR6vWoP5/mT5WsdX2q/RVShmPO4xnNvwKTI0zHBbynqQUSF0dcyHCRGzktZnbFb7Wy+4wJU3YU\nsZMSbGN0/BDzmMgwUZs5shhB9VPJKLKGYVUmQ0a2IrI2S9DWwikbnQ3rYESoWLZKyEZETOmMiBXL\nKiIWtTWSj8gYO7mRXIVgMbkyszAe6eW2Rr8167qw7hkyxkSM5ytai6PxrxwRjIgYpiMh4CP2Khyd\nzEBZtrlIaPA1+N2ucPvQduHr7fuHH5LifccP+Dgdbf8M4VKI7nmsv18VqcKxYzmeV9YbzXvmM80Q\ntDVwyvZx/K/I1xnYycsc+VlUdmJU/oiooQyX575kOpWjm+mIZHnMqoSpIjdDxKLyEdFEIjOjl+U7\nCeUxWtLeav0V2Uiup6k2Z3r7eFbvhSgePU1jmdF3oMsvAfenome2Leq7dl7IHNOqc8tw9we4+8vc\n/QZ3f4zIf7i7v87dX7z/PGKffh93/w13f4m7/567fy6U+UF3fwWUuc9qg7DhXMCOb0bIZqHKVZxP\n3slScki8uLyKK8c2K6faXLkqAsj1q7TsuCL3m+VUXOnP8pauMZcvn33hSU/P0jAehaOxU+2N6lNj\nymMZja26b1iHCvMY832UPaSMxiCSrXx/OYzxme941u6sjqr+pZi9dyttORb7eBQ7ZbMOjnIul+iN\nnK5olyzSmTnA0RHAkfMe7XhlDjvLqZd7sKw6tqjylobRaR/9ebQiHV0uGmeek5l7SS0geMWnW+op\nWfTF57B6Usb1u/sVRzuidvVx6rpU3N3P5KkxwnFHGWyDuj+zeFaG86LdL96ti+Z39vuNadw/XrT7\nGKp4FF4LVSMyA3e/aGZPMLNPMbObzOwF7v7s1tpLSfSZrbVHUdpbzewLW2svd/c7m9mL3P15rbU3\n7fO/qrX246s2eMMVmL0fqg7JyIni9SdzYrnurD3sXI9kqnqyPHWcsLJrpnbOMN7HJSoz86fSKNuv\nLNPHQc2FImGcvhT8wEvtkmVpuGs2CnegTULd3WZku2PdB0L7Pbs71u0in1KJds0iX6Drj+qYkelx\nbF9km3pb++mkDiyHV9QdxVmHikfhNXDq9vEoSBkic8CWOGGRzOj4W7VtaodrVF4RKkxnGaxH5StC\nNgqzzuj4ItezlJTxlevncRj1OZq7mS9/5JCoBVYRtMh5UIu6OhKi6lSvwcf6u0wfHyzbZdQxZdDN\negAAIABJREFUxx7ur9Hn9Ixg8RFFjvOizSRrBNaL+hRZi8KKIDHBU8ar0r7I6K1tHDrOQe/9zOyG\n1tqNZmbu/gwz+ywzY6Oj2vKHEH6Nu/+pmd3RzN4Ul9pwXsjWrdF9U/lO4tqFVyQBlfqjHaRR3RGp\nyvJHH0Vy1HHCqN0sr+KoR5GvKqnj9mLf+9qNY6GIWHU3ZQS0ReremSFjPd6JURYetYXJWtfPPgES\nNIyzDcOyKswybOP5wSv7AhnhqgDllX8wIkPYhohcKf0z7bsahAzrWxlHYx+PhpRlZCySw7SIwFUc\ndkXQVBjlla7RDhi3r0rA1PE6jGefiJBlu2jYJiZiUbradeN0jKt+YX+jXTM1t5U5jsCOB6dxGBcw\nRc6icmYxmVJhXMxQvrWzL+RAY8BPHTGdyyPpGe2OjYgZkqTou8gyXA7LqCej2D4V5rpnoAzVtcQ5\n1H8XM3s1xG8ys48Rcp/t7p9gZn9oZl/eWsMy5u73M7Pbmtn/hOTHu/vXm9kvmNljWmtvX7XlG8xs\n/pgSp0UEisMVnZmDmTmciuxkOqI1WJGhKB4Rup4WHaOLdKgdK0WqKrtuvU5VNmoP1ov9YnKG1zV3\nysxqu2VLdsq6X4IPMaPfuOHajzKoF3X0etB2M5HD8rjLhnayj6saY/QHUA7rxDKsKyJ+2HdsE+tT\nthFlMA3zKuDv9FJbuwZO2T5eF78pm5n8EfEayaJcFMY0RdpUPexgR/lKPiIfGVHBMOdnO3OqX4o4\nqfSIMFU/SOBmy16LjyKOFfnR2EX5mD6aQ54DTlP50X2a3Z8qjveZ6ptCJDMqp2TUjmul3DEhc0AD\nx/YO7v5C+HwJqVSdZcv2HDO7e2vt75jZz5vZU65Q4H4nM/thM/ui1lr3xh5rZn/bzD7azN7XzL7m\noI5vWIQ1nJSIzGVpGTnsaRlJU3KzpDI6slcNdx0Z4VF1RvGIXHIZrItlop2zUVzVqXbNJteWd/aR\n28X5lTHKwqM5i8YW55Lvi+i+ye41JTtqnxpj1jmahwij78YI0c5p1P5jx+w9vO9fZiOPxj4ezU6Z\nWX3HI3JkM32jvJHj2sPVXbJINpKpOPqqHuX4qp0t1J0dbYzyMD7aqVM7aKpdOD6qvREhUWSiMucK\nalFShsBdH1d0v/JVwXxcDp8S9vbhERTuD+5YYRtw/no+jznKdYOMu2nRThe3W+nk9mIbENn3MprH\nSC5LV0RMPQ3GtmI5bj8bJdQ/Mlhrk7uRgQ5wc2vtvkn+TWZ2N4jf1cxeQ/W+HqJPMrNv7xF3f28z\n+xkz+9rW2m9Cmdfug2939x8ws6+cbfiGOkaOHuZVnb0obbQ2cl0YRkc7alNVLjoGGTntlfJMLroO\nJYtvQrx8+fKZOJdXxEWNDx9z7PlRuJeL4tiG0XzNQNlZtUOG6erIIuercEc/yqhsWbdTvDvGJyt6\nWrcBHO5yqK/vjvW2ov0Y3XsYZp+Bxz77XioZZWPQXqM8xnsbMps9kuNdOW5n1L5I9lAstI9muY08\nGvt4VKTsUEQ3xujJ+RInsKcpRzNKi3Y3+MoOa0SSWD46ZqiuKtz1RUcOl4Yr7Rt9ovHO5q8C5ZSr\nRRUXqsjh4f89QRLFRwTVb8e4fpwPM/3aeyyL+jOSpY4a9nxe6DE8OrLIRI/HOKojM9Bcz8iY9/nJ\n8jhcAd8ns+WPAC8ws3u5+z3M7I/N7CFm9lAUcPc7gRF5oJn9wT79tmb2n83sh1prP6bK+G6AHmRm\n//18u7HhPMBrCd/b6oGHcjhHBCsjKlHaSNeoHszHnaOe1n/3xccNmfTw7g7vakXHFPHlHdFLP3od\n/Bs0lOV+qDjPoZrP2XVL2Vlcv/nBI6d1wmN25e/GOiFS4U6QMrvABAptizqWaHbWRuP49Hp7eWVn\no3RsR+QjKD9AtWNUR28rl49slCJTozxVzwhY75Ly1xhHYx+vG1I2mtzIETzvemZ1q3ZGi112dJHD\nGVmpykdHBzNdGXkaxSMds6QMER1Vi8DkpLqQoJwiLThGeO3hiABFMj2toruj0p4oT5GOqJ5KfAmU\nIVYOxXkTpGtBwNaur7X2Dnd/lJk9z8wumtmTW2svcffHmdkLW2vPNrNHu/sDzewdZvYGM3v4vviD\nzewTzOz27t7THt5ae7GZPdXd72hmbmYvNrNHrtrwDWWM7pnoCNOsztl6ZpAROxXnnSrVxiw/IqGc\nF9Wnjg2OdDDxU2WZDKJM5eiiCquxWYLINnQyodKYMKAsymCYiQ6Xy0gOAseB23758uUryB2WH90b\nSG4UVDuYTB0KpfNaEKGrXe8p28ejIGXVyYwc8YjUVJzI6HdjUbiXzY759TKcFtWNelQfInKT7Zxl\nxylHu1Nqd6vXFx2NjNoUHVnEqyo3ImU8L2rOR2itvfNYBRqArgcXXTbMbFBaa1ekoYFRuiPShfJd\nJz85U+E+Hmh8UJ8igfgmRm6Tak9E6Lj9fLSl0m/Mx/FXensY+4XpbCh5HVAGmu+bbNGPdKyJc9L5\nXDN7LqV9PYQfa7sz8FzuR8zsRwKd91+5mRsEqveDIgZcvuK4YzySjQgF1xN9oiN+WJYJSFZ/tQ7M\nuxq7ZqotrCfbLevyo6OMo3nJSEYEtUbyet3tZLd5ZnrXjIkbh3s5tp/cBrQd+Ip79QCT6+Txcc93\nx1AnjjunqXtRzQHrjNrEdkzpZB04NyiDspyWyagw3xsRIh1r4ZTt41GQMgQ7UGtPptpJ4TqjsDpX\nO4IiOr0d3L8orhaajOgouSwvksOw+h0ZEy78HzI+yoh9jtrEcmoMkLiqK4czKIOFCyETtP6JCJJa\nKNhIqTo53BfkrhsXcUXCFKnJCFpkXPleY51IjroeRfa4PF5noMpEhCgiRz2dyeGoXNampWVncF56\nN1z/UOTlvPRX6j+0LYowmZ19UYNyeLleJl09TZEkrIeJkfqwDiRfSjemcx2c1tuiCBn2Ba+qz9H4\nZPOWIVrT0ZHncCcVZrfYPY6zHUOZTpSyV+SzbYyIUN8JQ8LFRx2xvLLXigxF9WGbIjkmOYd8h5Xt\njQgRjoGSj8rNYi09ozpOFUdHyhSySa1MOMuwg58hkskIoyJclfawXkxXZCTSMyIsEdGLHHHVb9aZ\n7Z5hucqOWNRPdZxzKSmrLBzsyFd1suPOdUTkB9uPetQxPg5HY8iLF8tku1YK2X3B8VHdkX7u7xLM\nGILzJFdLcWzt2XDcyO6Xyr1UceRn9DNBYDDhGumMyJ8iGhXyMSIsTOoq8lF5VSfvmqn8LMzy50HK\nDn0A1ckZ+y5IjDCM8lifIh5Ixno5zucHoUzWkKBk9xsfcYzGk21O5R5WZaI2sQyOqWrHyMepppld\nOZ7HgFO2j0dDymacauWAzupgOT6uuLQ9mTMbkSGuc0ReojpH8hlxUqSJd7uwDB5lzOrGsqodo+OL\nODeqzeqazZtazHCRxcUQ4/z0C40CH73gI4u9Lj7Gh+Ohjljg+PDuGerpxxCj+eRFnGU4rI4wstHj\nOeYXl3AbFMlSY8BQ6dl3rF8VmWXZbGFX98fVwiFPTjecLmac6ogUzTrmZuNXi6t41JZILspnkhER\nmyWfbNdMHZvEctVds+goI/dBvdERw2Znjy9GRKxKzFTc7EryxGlIhHqc/R5luyphs/HxRTxuj2PE\nNjd7eyPadbbf6j5DWWXXo3lgXdH4j747rIftn8rDOUIgweS5VHVnvq+6P64GTt0+Hg0pM1tGqkZl\no+NuIx1ZfnSMMSNMmJ61OyMcEUnBNkXEKEqPymIfFSFTdWckzmx3/js6Hsnt6ehHItX4qDmtzqHZ\nlQSNF6koT5Gj6FhEhyqD9bfWzpRj8qWOCeKTvlH5bAyj3TIVVm3pbRiRIW57JoPHJDs4jdsWLdQj\nAnaMuN7au+HqIHPwDtUzcuBVGscVUWL5iECM0jisyqDTzHmKhI3yFKHiI4TZh4mYOr6I9S05vqiO\nMqpwNGcM5Wwr+8h5bO/VA0kmS2b144vRDhrOFRMvfnjKBE/5A0oXl+UxwfHu8p38oBy3S4296l8k\nw/lYB/Zp5BeNCNix4ZTt41GRsqU4z5tppHt0VDHSo0gNy2Vl1rqOjh1mu1SKoEX9Vr8TY72qXu77\nqD9q3GahDA62ixdLNEq9fkxTBIP7VgmrHalsHCKZrCz2N9NZaX+PV8rjOB2C0a5c1obRQn81yd0p\nG50NVx/R96p6n2VOfcXJV2Rq1JaMYETEUeVF7a1eR8cYOZ93FpFgKaijjDhfqv6s76P+qLKzwLWw\nunZivdHxxQy8g6b6wYRPySiiEt2fqiwTMUyPyioyx3Vn/c+I2CxU/RHhRnSiOaP7vHDK9vG6IWXK\ncY/kImS7ZiPHcvY8LZOuSFelDeo4JX5mjzpWP9kOm9Id7ZRxWO3QZTtzqi4coxHpQFSfAvZ0Xqx7\n/fyH0a2dfVMik7dsp6zn41EKTMcFORqPTE7ttGVjxvKqfA+zcVbzochsBUwYWR+HsVxGgkdPE6P7\nROk/DyN0ykZnw/lgKflReUxIuFxGhpa0l3VX6o3WaZXOu1pLds3UR+3I9XHLjkL2fHVUkV/8gWMS\ntaMyFtG8MdQ6GDntyi/r+WwXmVAhGcN8s1veDMwPhbtuPhWCtol36HCtru6OYfuiMeTdNPygzcBx\nU3YH27KEfEWnXLgu1pcRKPaFIhuI8qP618Qp28frhpQdguzmjhzUvqiwbHb8jskFlhuRC3Zgozqi\n8pyetTHSFX0ygtWvGYGrHq3EvqsduqjP2Txm8x0ZHFWGF8x+NAGPXODxRbxf2CBwP3BhH90fiqwp\nORWO5Lvh5PqzcVb95N+1sS41D9xXniMFNhYqrMBtrpbL6j8vnLLR2XB8qN5vTIpUuYw4ILmIyij9\nHM4ISqQPy6LMLAlThIx/Q8a7ZUzSovLcx142akvUVqxbEbJsvpXjrQgZl+G1nIkYErTsyCLW03VE\nBA3rYbKk7gOUU2OFbUW7j/3A/mbjzMcrVb0qruYi+y7wfDBBimSyecxkKjikbFX/qeK6J2VLJ352\n52spZurhvqi+KX2R48t6lGOd5UdOflZvRJ6iPMxngqbI2KidLBNBLT6jhSRasJjUcTr2T+1WYZuZ\nOKj+VElP1BfVTpWORIsN9YgUrXEUUbX7POWX4DwIWmakN2yYRfXo4ih+XhjVk5EJVZb7GxE0LJ85\n1lm9qFfVGx1bVOSr61CEi/uRpUX9mZ1ftbaP1rusDJMt9QCbCU1EHDDM5IjbiGSK9WR5TODUGCgS\np9qlwuo44KHfOfZhRiSr6vus2aY19J2yfTxqUjZyLCuO+CzRUbtjUbmsXYpIRHEMZ8RE1ZHtKGU7\nVKPPqCzn844Y9mWki/s96lc0nrPzNGtw1C4VvvmQ6+c2404a9hvb0fvOpEkRKDUm0TUql5WJiJvq\nJ/dZ5UXlR4iOJyqcl2FB/VfDIJyy0dmwHkZP2SuO+KyMkmdyUW232jEY7Q6o32xlZCUjOGvtmo3a\nwscVeWdM7a5F9UZtz8aP9VbniB36kYOtjg7yThkSs341u/IlILjOXrp0yW5zm9uc0RftRHFfUZf6\nTkS7YxFpy3Tz+EZpXFekvwr0ITBNzVXlt2GH4DwJHtZxqjgKUpY5cSptJIMO75J6sxsqc3BH8ko/\nkw9VvyIumD7rqGcO+iivQrIimei3YnxkUf2+LGp7Nl9q/tFxiO6j0aLJwKOM0fHFiKx0mej3Wr0f\nuOiyQcp0qbq5TIUA9nbw78JG92w0zqyP68DwaPyz7yvW0Z2CivPIxi2SOS/jcMpGZ8M8MlKk0qrE\nKiN0o/KRzOgTlam0NXKAkdxk+RF5yWRmSBjK8a5XdESRZbKjmayLwxEpi+4fNR8jxx5tSmRfGLgG\nK+KFuph8YRhl+PdfvQ1Yh5pb/i0Y23lFuiKZaMyz+1eNVfQ95Laq+iJ91XmMriNgmyP5qq5ZnLJ9\nPApSdijOY9LPSy8SBeXQZmRKtS0jJofIRE41h6MFuZKORKxSb0YYOkZEHPMVQWMjoepg8ALBhEfl\nMSLipIxWpq8656grk8nQjzdG7eF8JT+L8zgWaXb1dsCqOKa2bNjQUSF/h+rD73dGHiNStaStM3mq\nvtERUaU/W8cqRFSFK8R1NGfsbEc2DG3ISCeX+f/Ze6OQ67rtLGys/4uxXkRiOa3KOaeY0vTGtBiM\niVfiTdJzYRPBlKYGNRclKIT05hQMVAuJF+qN2BKEKNEGtCk2tJ6mCQelHChF5fxisE1EGnOT/0Ro\nj6fYYFsl37968X3j/M/3fM8zxphrr/1++93/fmCz5ppzzDHHnGvtOeazxtxrI5maRm2QUOF51nek\nwtnWXfNOx4RwVJE2VX7GvD8hZM8d9+wfb5KUXXIDVXWP6l39XVgVmUAZZxNGDfC8062Ii/qkbkd0\nplsH3ad7GcpE1/RFH2hvN578Rc4IV8Tbf+y88qVHu5jo8Zju+0dbHlmG5V30LMeHn1JiGUfSUC9v\nt0w9VQROHbk+j7caz+q+r6CiZiqqxmkEX9fu/F3iVux44DZxyf0xITgrbXFkYNK+qlNFH5ydk8gF\nHrsoVHWOurvffHXRMay/8oZF1YYqm4yhGnuel92CfnWhn7Zg9CrbUz7YbVlEf4NH1WeMMnHEiV8O\n4uphX1kPjps7sp083tg2r1OOjrEjZMompUONceLaWx+nuGf/eDOkrCIx127PpVle/TBVLbxdudOv\nyIZbvKpyRViql3h0v1ubEq5LPjlerBvzVV8UGavGVxEIBfU2qK5OdU2UvdW1Y/mpTHfvOOI2tRuj\nW9296F5SosYi89SWSKWfr8H0uqzKTOpcG6uL3Ac+HqhIzDWgIlZdu45sMZHo6nBbFdGaHLkNJjXc\nJpcxuWK9TOS4/clWRmWvI2LcTkUSuY/VfbRKBKZ1lE1oO/pfR76YSPFvy7ptiS5qhXWVvTxG3A+O\n3ql72V0HHDdXl/ut7Kj6VuGIzJF75Ezcu398mlcQ3gDOfNuiI2hdm11EZ/obuI4EOvlu4Ys6VZ2O\n/LjxUISss5V1doSsIivOFmWb2146JTVc39nhiGZF5CYTYUVKK/npPeV0njVJV/fqUUz6NCl7SkdU\nLczU54EHLsXKfdTJTu9NLndEUJVX+nDBXLXZLb4rnVUbSlfXhiN+Vf2O2HG9iqiyzookHmmbyzC/\nIuu8Q0IRXyxjHUqvOrp6k+tdEd0q7wiuMe+v2uvKnsoXrfrH5+QjbyZSFtEvlKYL0wgdRVnBJSTO\nRQW6NNdVZMHJK7KAaUdCqrKO8KhrMnnT4kRuUlf1T43RKvCp3QqJVPnVGHJkiWUmL+3oSCLX6chl\nJZ9jw3/AyVBjgpPiJdeHx431c1tTnVWdtPc5TewP3Ce6hdLKAsQtSqcLrku+D8rOjoyoutjn6iUf\nilCw/o5AOJ15rl7wgXYp21mmIkIri8+KGKkxPQvVuGI+y6HvUVsWWVZtI0Q9rB/L2Dae351OtrW6\nN1wbbpyUHUeBvhDzLvG7XX3V5gPHcFOk7AiOLMYd4eJ8JENTWyqSxTa6aEmlXx1dmSJSq7pWCJrK\nUx/3FsaOkFVvqjyTlCXU4t+NX8RHE5faxufGcNIHdx2RIDGZcr8dw35148hQ5I3zHWnrvhdH4X4/\nxm9dfG54jjY/cPs4m7AdeQo9WaQrOyak0Nkdof9zLNPu92Ncryqr7EDidZSITWTeJSnjuVa1y4QG\n66gHkOoti7hVMOG2EPJbG11Z1kuflL+dUu0qVOTNjcX0u7XiJx0BVDqYDD8n3LN/vOvti5MbbUK6\nnkqPW8iqepPfU3XtTMidatPZOiWwk/ZcX1bITJ4rUjptg/VM2kbiOQHrYD0TW53NzsapTROyNtV7\nycT/lN/lCa7txCaLL16IPfDAFBV5cbIVJm9EXX1r6optqySs0z1ZTFeksNPbyUzac7q6um7xPyW+\nLn9ityKXHZDAsr5qK2Nlx9TGzq4j8kdkzvoOVnpW5oQJrumXVv3jc/KRzzpStrrYvFSmiuqs6JqQ\nCC6fLL5Zju1Ti/yuTNnjyrlN9XHRLmdvpt3LSbrxrMaqe4KU7Ua8vZXRPWXCp2NqLDnN44o6WX91\nxDpKxo2Naq+Tx6OKVGE99Vp892bEPGKUS711kW2v0s8Vz93+B24D3W+0GJcuHFcXRY4sTEhEVT5p\nR9mGBEDpdUTPvXiDfyemomPqjYvcTzee1VhzuhofN1ZuLp3MsehbuP2c79FGlOOdHFjP+V60XV27\nbXv7hR4s6+6dbI/7MyF66o2FTCz5JSNuXZJHTrt1D491prvI363jnv3jsyVlK0+qn/rmO+MpevVy\ngo6YrLwARBEhdeTfcVUEQ+lWxG5C6rDtqt8rxOwSVO0yMcI61bVSpKa7HlVa2czkC7dtdHrcGxLV\n+b2SJMSEvF6C5/Zk74HbxMo99NT325F7fIV8qQUsYuUFIIrsuKMiwUzasNzZuUrCJoRshZgdAS7+\nXbtIbrhOjlP3O7LMw7cvVlsc0Q5F4tKm6ZZFdz9hXaWfbXBp18YqKrJ2bVyjP6jrnv3jTZMyd0N1\nC9BV3VxnZetZ174iJNyGWnCrc1dWLdg7MqN0HiEC6n/PnN2OoCkZvhZHCIuCmhCrJ1Tu5RJMdlBH\nF+VRNndkxpE+JoRHxkS1vfp9mpLGS5zFJd9NvJYVWXRlT0Uw79npPHAe3H1S3T9H7q2KUJyta0os\nqnxG9bswldfprNrtrgmTN5apCBrncbrq40r/Irw/6OZF51fTLiYpld+NeJtkYeTJ2eTI0aVjUq0b\nWI8igKo9tmtqy9TOFTnVJ6enum7XJoP37B+fb/wS8K6eBqziEsJYkakVPaq8I3iqbGWx39k20eMW\n9UfIh5M/8hDgSNsrOjrbjrxltNNf6TxyH07seNdYvR+vDVyITT4PPFDhudwjUzsdiVvR4fQgupeD\nVHovHfMJ4avsv4R8OPnJQ4DO7rMeCjDc9XDbUaftqb5XOo/chxM73rWelQcQ18aqf3wu81/EjUfK\nInRk4BbhIhiTetM6leyZZA3LOvKjzt1nJeql7HVk0NWtnvBguXoqpNJuGx8/TVR9U+eun5x2b1J0\nOtIG90p9N37VmDlcSlhzXPF3Z52+p5xgn7q9xHNyIg+8W7zLRcdqu0eiASt1LiUiSrZaZOPY4+/I\nsHzySny3gGT5rm+qftUHNyYcvVERoUla6cM092/bZq/EZ7BtyqcrHWrbYXftnQ0rmJBbzFv5DVhn\n3xn2X1PftM17xV1EyibIm2b6OnyudylW/zh6uth1i+wj0Z+VKMgRAoqyE3I1+R3bhCyutl+l3e/1\nOsJV2aL+cJrbndh6lPRNbKzqrETrVu5H184qunvhElzLGd3rU8AHbhcr0RDEpW99U3omkZBOZ0fM\nmExVspXOqb0rb5+ckismNS7NNnbzRtf+NK30HZmzWH41UtWNG+s9iu47cuQhRJe/KrNa71L/cg3/\ntOofn5OPvPlI2a3jqZ8QdDZMX/Ix0eXKpotvjhBN7DoSebkk0jMFPznMvO7Lrv4T7Ei7rq1r9tc9\nAXMRwzPafJd4V1ExxnNzIg88UOHW7uXpSz4cJgvYFdJWLRw7YtTZ15GpM5F6OarWzetMlJz8JWTl\nGsA+rpRd2ubHHffuHz82kTKFaXSKoxmdvNLt9E7Kz4gQTCJTqu5qxK0jYdMIWxdZXLHFEUQXcZtE\nvSbRtW4cqrHoIl0rZZXslBiv/gfd0e/GaiTtXRO5a+FenwI+cHtYeUq++kT90ifw0+jd0QjHNNpT\n2bratnv5U7YzbfsI0VK6q/nERdwmUa9JdG31uq5GU5XOCab3xbRtpfvo/XaN79lzwz1Hyu6WlF1j\nsYYk6egi+FK5a0UnpqSzIg4r/ZyQgZVteFNCVNk5ibhdUneib0LGLokqTu2Y1FnB6pjw3yB83HAN\nh7Nt22e2bftH27b94rZtf1yUf9+2bf/ntm0/9/rzH0PZH9m27X9//fkjkP87t237X1/r/C+2j+sF\ne4a4xkJlel+uLEJX5a4VnegibBNbVvpZRbw6UjSJlh1ZyE8IypkkUslOyNilL/dQeUeu/wpWbb02\n4bhlInMNUnYr/vGxffGJcXTNcutrnae279L2tq3+YfIt4Ihdqs5Rwuj0X0P2gTdx9v24bduLiPjR\niPj2iPggIr64bdvn9n3/BRL9b/Z9/wGq+69GxH8eEd8SEXtE/L3Xdf+viPgLEfH9EfF3IuJnIuIz\nEfGzpxr/wMcKq8RLkY4HzvktUM7hmL4lqD9mPlLnKGFUWLkfH/fsMdyzf7zbSFmFW5hczrDhWlEz\n1ru6dfMMG1T+JHJyrQgp6uUXW1xKeo5EHK81Dk9V79r3/y18xy/BFSJl3xoRv7jv+y/t+/4vI+In\nI+K7hub8exHxN/d9/8prR/M3I+Iz27b91oj4jfu+/+39lRE/ERG/f723D9waLn3hwRk4Y+F1rajZ\n0QjYmTao/Ml8cM0IKbfhonSrOHI/Xmscnqrete//W/iOH8UVImU34x8/lqTsHnFmNOSpcFbU5qn6\newvjepYNz/F+OYLn2LdrbM2IiE9GxC/D+Qev8xh/YNu2f7Bt23+7bdunm7qffJ3udD7wwDvHmdGQ\np8JTRm3OwC2Ma7cN8YieW+jXtfDc+nbEPw76eDP+8UHKHnjggQduDAcczie2bXsfPt9PKhU7ZU/1\nP0TEb9v3/d+NiL8VEf9VU3ei84EHHnjggQdOw0FSVvnIm/GPj9+U3SGe25OPS7E/0X73WxjXs2y4\nhb484HHg+nx53/dvKco/iIhPw/mnIuJXqM1/Cqd/MSL+DNT9vVT3C6/zP1XpfOCBW8RzjKBfgqf6\n3fQtjOs1dpM8cFs4eC9XPvJm/OPHMlJ2jwvSM/cfT3Rda7/zyj7wd72P/1rtnzH+K7bd8/fhHvt2\nEF+MiG/ctu0btm372oj4noj4HAq83gOf+M6I+Iev05+PiO/Ytu03bdv2myLiOyLi8/uw4iKTAAAg\nAElEQVS+/5OI+NVt237367dK/eGI+BvX7sgD18fRv2G5ZZz5O9Z3uWV+5ffET0ksjth6TXTj8HF/\naRX/Nv5jjpvxj49I2TvCGdGdp1pwfvjhh+/cSWdfuzG7RtSMx5l/IHspUbwl4nAvP2J+7ji7b/u+\n/9q2bT8QrxzIi4j48X3ff37bth+OiPf3ff9cRPzgtm3fGRG/FhFfiYjve133K9u2/Ui8clwRET+8\n7/tXXqf/WET8lYj4DfHqrVKPNy8+cArOiO58HH9v3I3ZNaJm3cuqLiWK73r9gbiXl2E9Z9yzf7xb\nUnatxfm2bcsk5YzoDj75P7Nflb6Vto4syvl1u9zexLaj46GuySURqrPIzDUI3kTnNBJ4NAK32pfq\nD1Y/DrhG3/d9/5l49VpezPuTkP6hiPghU/fHI+LHRf77EfFN51r6wFPgWovzS99Au/r2WY5ene33\nq3G65qIX20Vfh7Z0tqk6K+1z+pI3A59FZvD8CFnr3ibt0qv/5Xr0Pp7i6HftHnDP/vF2Hj/cOKro\nyFFUC/JrQrXjXo+6QhrgB5Vl2yuLdaXTkQUkVxX5qAgZ6ziyTXBST9XtCJM7TvRP0p0dE1x6D6/e\nH/cIvPemnwceeNfooiXTsqM6z4RqxxGAihgo+zsiwYvtbuudWpy7OkgYKvI0Ib0pt7KdsrJZgceq\nuwZ8PLpF8ZpbQC/VN7k/zsCtEr4j/vE5+ci7jZRNwBEvF3VZzVe6jyBvpKO6VDRK6a/KlK4uvyIX\n0y/6meO3Wn40YrZCso7adpb8qo7V/zQ5U1el7zlNtiu41349cHuYRFsmskd0r+ip8t977714+fLl\nWJ/S+5QRsao/0/F9iu2dl0S9OjJ5Df1nyq/qWF2vVMTqzL7dKrm6BPfsHz92kbIzF5eT8qPtdnDR\nnmyni4wcIQyTSBTrmehbsUtFso5EVi5pu6rHMng93FhMfqM2iZZNI2gTVLrUPTZt9xKieg3calTu\nXp8CPnD7WF3ETSI/Z+hZhSMFKoqiIkjTSJJqkyNiVeStijitbCFkPXh+JLJyaduuniIgXdSNy6qx\nrWyd2DPFajvTto7cd9fELZK6R6TsHWMlwnJUxzVeZrHydD/bTztdJKaKdin9E/KE0bRpeyo9XZSn\nHPYz03jEa4J2VHapsXP9wzx1VH1iQuLGf4W4Knsw7UjblJgpMr16j1Ry1QOHyT0xfWBx9MHGNSfk\na+l+Tk7kgXePs6ImlQ43t07aXY2IOBLz8uXLN3yEs3GFUHRRNtSpFtncHurj/Mkchu2wf676jteh\n84OV/1T2uKMbk+pY1XVtd+VTG7q89957ryXHR+y9dG05rX+U9F2TeF1D9z37x5snZWcQsqfA0Zvk\nkpvrkjanY4oLcucI1ASviMCHH34YL168kHU7h4O2VHU6Ink0f9/fjkJWhIrzJ09uOqK0er1xATDV\nt9rGivxTt3cG3tXkf89O54FzcQYheyoc8eWX+P9LoiDTMcUFvSJdLn/btq+WIVFw5IofXFa2VHUq\nwub0TfKrSNmkHhOj6Ys1VsoZR6K8Z6xHV8f1DN3XwrtYnz+X+e4IbpqUTYnANYjbUZ1VtAnTTFCw\nLi/OcRJdXQRnXaXHRYeUDc6+PF+JNCrn4JyHipatOBy+T5wtbiwmUSRFQqfXqbsGlX0RH72l0F27\nqk3XrtueqNpXOqd46gcZ3L9K54Q4Xwsr988DH2+4BXq1uL9225N6Ts+UPHCUA33rysKdo2A8Zhid\n4/pVhO3SxfWRSFnKqPpuHYJ1OrtXI2V4zoRtEiVLcPQKzzlf2ZHy6ho6uMga6nR6Vghph0seKkz0\nOLnJ/euu4bVJ2r37x5smZUegJixFGKpJ6tKtjBVpdAtiRz67NtRiHO1X7Tk9nI95SSKZ4CkH6ohF\n5RyUY3DlDtOFiCMUyuY8V78N6+oxYVIfbGNyrdRx2hdFvKZ6FLp6blw6vU+FW7DB4ZZte+B5w5Gd\n6p47m+RVD8/cgtiRT66jZDgilT8VqNpmW7tFabUY5y2NHD3jhb8jqYmu3KFam7DN6lwRFDxXn5V6\nTLgcGcvzyj43JoocVsTLoWprpX3VV1d3BWeQo2sTrKO4Z//4bEnZdHKp6qzKKEJy5KatyEaWqd+Y\nTRflTGrQVkXYFJnj+sqGjtxwWZIb5Vwi4q02Ui6dFz6dUkSP600JhSNHaDP3TxGzKSFh3Upv1Y6z\neULWVD8qvRF15My14dD9poLHe/o7so7QnomnIJj37HQeeBqoRV53X10qoxaalaw7rxa4TJLU3N8t\nih2p2fddEjZF5hBJupBsVWTM2cUkgfuQ/WYfz3DrAPaNHZl1aUdspoTH1VPtq/tEkTMmU6qtKsLl\ntktOyFf3Cv7qfqzarMqrsatsQHuvhbMJJuOe/eOzJWURM5L1FDa4G+TojbPaLyXvFtlKjidspce1\n1/XdkdfKaTiS1dVNWSZ6VX8cKWFC1o1HRYhQpiJpk3bUcSpzBqlivd1WwBVStfo9uueJ+Z779sDT\nYfpyiTPgCFi1cDzqv1frTRf9U5Li9GT/mZxVOlOWx656+Kh8Nvs9VTflXD1lryMljhRUhHMyHkie\nJnZVtro23Hl3X63oZ8Lm2lx5iccZ9/094J7947MmZQw12aibEn/P5dIo697Io+Qqm/hG6t64qBbY\nKYd1s6y6UZUd1cIdyRQuwFEH10OblF3KqXR9j3gzYtb9UadzTEov5nFfVL3qwzKTrYuOCOI56mFZ\nZVclgzqVnKvbyWC62hbpxnQCJ4ftufREzyqu7RTu2ek88O5QPfxiOa7DaSyfkL/qhRdqvnc2KDuZ\nGKFNuDjGfjg7qugIl6kXdSj78DzrqLr4QVvUWmay1mFM1kgdqarOq08np34rxi/9cL8vU3Vdm5VM\npvl3aBWxUuTU3cMurzufXNvJmyMnbZ9F5K5JCO/ZP94UKasmFjeZTiejs+2p6nRPohwxUG3mOZMw\nZWdFhlQbTgYdIC74FanjeulkKpvcb97UQoHTvJVxFd3Y55HJxQopq35/xnIdsXM2RMQbT1f52L0A\npCNuaqzYJqdLpSffgQlW650xeT+1A1ghqw98vODISZZFnHu/TgjZantINDCPZVQ9bJPP1Us52E63\neHZ1FfFSNqpFvtrK6H5Hhm04GyPefrCJeWehG/s8TojWlJRxu4poKTLmiBaTOtWX7gUgqp4jdUqm\nGj+VnnwHJlitd8a9c00Cxrh3//js/jx6ejGmv4Pp6h/FdBE6JQldO10/JzorGbV4V+dKnwITF9fG\nRH9nmyJGVdsu2tORmq7vXV+6tjrZlWu7Kr9Cqqb34lFM/mx7BZM674qYTT8PPJCYLpCqheWZ7Uzr\nO31TknBE5kydVTTHwZUpIsPtOsLSkUVFBhQZvEbbSu90TFhHle/sWrm2U/nuvKs7JXYrOIvgrdR/\nF8TsHn3kTUXKrgm1NTExfdKET8t4K5+qj0++8hwjRFzfRZDQTjxWLwPpXuiBb1LMsiQkuAWRZVQ5\n1mc7XDrluG8VUn+OVcQ5ETNMq+hU5ld9wvGbTBAumubGVeVXR67r+qyu/7SN7vpNiVzVb4eVSXby\nCny25dI2L8VzciIP3Ad4Tq7KnGxHJpx86nK/xUoZ98fMrj3+w2ku4zwsQ/+NflaVuQhYHrktVUdF\n5KrFuxvPs+aOyg51jV1kSxE/JoFuGyLmuSPax4SY20BZtMGVqXrdVkkeLx7D6jp235NqDKe6prKd\nLZe2eQnu2T/eDCljYjMlSme1V+UzuXJwb1VCwpLnWIbtMkFwb0Nkedaj5FU7aoHNhM6RKbeIdr89\nQ1LH7XS/F1PXxZGzyb3jiBiPiSIM7o2JuViYkLJOriN309ftO/Kl2ldj4CLO7rqr8XX6sx8dnFz3\nG7IJKeyI5bvCLdnywG1gSozO0B2x/huwSRuVzo6MqEWt88uKoOExfQSmnb4JyVL9q85dnQhPTLvf\n7bn7Q13byb0zuQYdyWIZ3nbYEbGuTWyLdfP2RK7X3Veqf0peETqlw7XBMlw+efC8+nsyl9fZee23\nNk5xz/7xZkgZ4hJCVtW9NtHDdiJqZ3XUFrewVEQL0yzj/rvNnXeLVyZuKl8RRmWbAutkZ8rkbPKl\ndQt5RTiwnNOKBGG+I3WKEKlz1V51rF7hX23rdS8AccduXJSsGtMppvWOvEb/gQeeEy4hZFXdowv4\nIzZMZJQtR3SnLvXbMVz8quhYpbtavDryOfltWZ4zserWFNxfVW+yPqn6p4jOah2Wd0SMX/Th6ndl\nZ782vyN2KwTJjccRdPUq+47oe+B83CQpW4WbrKoti1xP6XB6KxLU2VZtK+S8imhVC+astyqTH1eW\n6clbFvM/W9QbIvFlIJPXBvNYVhPekd8CVmPL/eZ0EixVpkiZGu9VGfcCEOyL07cqw2PE48EkS41X\noro22LeKuB39rWfqW3kr4yUE8lI8COMDTwFHuCpChIv6qn61EGc51Km2KLqFaxWFqKIA6JedrPI3\njpC47YjcL5TJnxCoNzHydsmOkLHd1fwxJdkViXBkC0kL/8ZOEZ+OiHE7XK+LyHE+929Cqtx9Njm6\naF2CH4xX15jHsPtOdTqr78cUlxDIS3DP/vEmSFlFjtRTHX4i1OlwbU3s4bwJUVN9UAv/bdveeDLX\nkTP1m7Tut2OOPFWkjG3mNNvdySg9aOe2bfHy5cuvOikVIlfXF6+Huk/UeUc2XN8xjyNdTNCqzxky\nyi62ZVrXjYkqr6Js6roqXZjfvYyHCe+0PdZxBJNJ/1qOoVtUPfDxA89xzgdy3lSHk5vYk0Bioerz\nQpHtVQthNdezPizjSFP6E/YPTKZwMY9tOlllQx6PbFnEPLZJjW+3rZTXIsp/JvhaTRbrimhgniJi\nTJZUerKVsZJxxEXZoGxVsu46d/eBGjOXZn3cV7dmVe107a0QwQqTekd1V7h3/3gTpMyBJ48j8hMd\nGFHj6NqqDVhPLUR5MmSHurKtUOmrypggufyc9NVWQJzoWY8bKyWjHAbbgugWFGyPWqgom9g+ZW9V\nx235w/rVJOJkFIlyNrh+VGXdcVqvs8n197niqWx/zmP0wNNhQqA6+VUSpghVxPo96xai7pzJkZKr\nFsWcr8rQh+GR85PsqZeOuMU1Ei41Fi7t/CSjIl6Zh/r5fGLTlJwoGUdU3O+hWA/LuReLuD4oW5Ts\n9B7q6rk61b1S9aXDNQjQETyFHffsH2+alE1wlDSprY2sq3tjo4pEqXZ4b3q1QMcJM9vICNJEHxOb\n6m2K+FQTP9km1p1sWUy5xLZ9FAFjmWwXnyBmXZTnyKC6TjgGqwuECSHj8eG+4jkelXweO5mqzUlb\nnb3cL6XHbSVUY8QvP1FbLN34831ZyU7yVstWJ/hL6h5p44EHLsHKCzsU2Vqpw7LdohnbWSEHqJOJ\nCv9ujNs+Gh3DMt5SuG1bvHjx4qvtOhKWZYn0tVyPtzamL+RIGafRD/J1mZIxN/4VIcNrUX2y7y9e\nvHirbv7cAcu7bYoqj+ukrkoWr7fqI8syUVwZI3UfdGRRfaprxXVVmbK30rWCjnheinv2j8+GlHXO\noqubkxdHwVIfL/q5HZwMqyc7SDKYPKjFnFqM4kTMpAnPMY26nDwvfl2dzOfJnremcF9Vn1g+4qOJ\njx1Oyufv0XK8cWLh6zS5dgpuYe36UREcJC+T9MqHdbhr1rUx3dbI197VYX2cVuesa3J9lJyr2+lU\n2yUn+ldsOAv37HQeuA6cr5nWxfk0obYDYlvKL6syhHu7IJ9XC1tHvPgcfYOT4TK33THL3NbEJABI\nsCI+8pOTLYtYB8cK1x7pL3Me5YelfJ34unbXp7oWbtx4DPmDayYkZEzOss9ch/UofY64KDsqG11d\nvh86oohrmm68eNy5PXd98D5T9au6Vb679i5vInMm7tk/PhtSNgVOwpfIXCLP4C2JaouiatPJ84KV\no2l4xMl4ko9tqMk7J38uq8gMElm1cGfHUTkNXjQoTGRUv7p+VARnVUdFdCY6XHtcf5UUOUIyJTQu\nHyNpR8B1cay635xNda6My2pbq7hnp/PAu8WZc+hRea7LwK2BXb1u4Zr6+EUa/P9lrJMJHbdVLVxR\n7+pvyly/lH9UfT9zDaT6eISUMVFR6Y6IKXs64sPlFQHifrrfXjn51XuEMSFTK3VXiZXTO7Vx8j08\nC/fsH2+KlB0lP1yv0nMGIcMnYxw9cs7JPclC0oKEBxfPTGbUCz8UQcDFPsqrMvU0LstdfqLb1pj1\nWRbbZYfEUbXUwxMvE0znZFOHui5cNiVjaSfLYHr1v8u6aNdEj9Pt+tXJ8xhNyKOqj/nddklFtDhP\nXU9Vz8mulE9lzoAaswceiDhOfhQJ4LmzasPNsTgPs3y1eMcj18FzVZdlsC+4oGYbXTr9D8pjOUax\nlN+KiDf8KEe9sE5F0ND3oV61lZH7iNeF5+OOzDl/qa6DulaOfDG5wUgUpt1WRm6XtyNy29yGsouv\n+VRW9dPV4f5P7l/1XajsU3XU9VuRcd/LRBdIqOqeiXv3jzdFyhA8cXRlPKEiGchJTelzk5VrY+Wm\n40lR2ZuY/FZMOUVcKHO+ah8XvZnPvy1zunjLiVpAK6eaaZZj56MmHUfOsO84Qan7QEGNszoyEXFk\nKWWYXGQd/B0Zp5O4dQRPlak2Wfbly5dWryNIVd95HDAKxueu/gSKnLEOda2U3at41xP/PTudB86B\n8itdGebjYl35qTyvtjCyfMpO71+1oMV0VcblasGLRyY/XA/lHfHCBX2OWSer7MK3DSdYB489tlPN\n13yNUpfzjW5NM7keE9IS8dHvxLN/TNRSBssVcWNi153jeK5sXeTfoVVbG6u+V/dXdx9OwfLue5D9\nqK7nartH6p2Be/aPN0PKOkKk5CPOY+ZMEHi7YNWOWhA6uSqPJ2hF0tgOJF4oUxENZw+TuEyzI+OF\n8HRslDNQiwCV5i2Qqk6Vp+xyaSYYXKYcocpnstOh0uvsi3g7cuWO6nqr80rfpL6yteuvi3BN9BzB\nVN+7mvzv2ek8cAwVIXLyEefdSx0hqwiiI1/OZpfHC0z1R9Dsk9QiNQmPqt+REWwDdfHuEfdbMtdv\nJrSKXFX9THC+Wzd0ayc37ivEJMcC+8hEh9OdTY5QqPtL6a+OapzVEdeH1X3t9Kn+VP3tCNs1CNJU\n37sgZvfsH2+GlDl05GtK4NQkhcRHEcJcLCqCVhES3uqHeUov68z+KmJULdorwoA2Kftwfz1H0fjt\njzg+vKDmCRGJJW9hTBl0SFmfI2SYl/nOaU0nCUXM2NZubCcRLLwGecw0R7FQj5JXhI/1V+RuEiXj\n/uIYqf6r8XMEbULULolwoZ5p2S1O8Ldo0wO3iY58TQkc+iE+On1ITFjGlUX4txpifY7QoV7Vhlq8\nqsWsk6siXmlztsOyOB7VNsfUiS8Eybxsw10btZUR6/Iagtcoyt91UH7Vja0jY5PtiwmOlnEe6sbI\nWBc1w3y2hW3nepNthBXBq+5BPnffB74m3J/qenXXUdXnssnWxafEPfvHmxhpN1moge8uRle/WvDh\nol9tm3JbqVRERG3h6Ba6eN7Jd7/J4Xy0SZEHV65IQZ6rfCfDBKPK6+Qz/+XLl18lNRN91Sd1OQLU\njQHqUcRM6VCESclU11mRuorMrX46Elfdwyv3rvtOcj7ez5yu6io5ts/lVbZcC6vXaYJt2z6zbds/\n2rbtF7dt++OF3Hdv27Zv2/Ytr8+/d9u2n4PPh9u2/Y7XZV94rTPL/vVTBuCBNzBZbFV5E12c1+nm\ncl5oYp76qOjIhFhVC1o8xwiNW2BnOS7uqwU8fnCLG5IIPEdywG29ePFCbtVjsqHysm7a132UjjM+\nymZlU9qL/eYxdOSLrwvWZzl1rkhWVc73h7tnuvt6cg+re7m659x3Un0fOO2IFX/fJ/NDNcd09c/A\nkbVMh+1G/OPNR8oQ+35+uD6fPlVgmVwMdvVSNkLfnPi0i8/V4o9vrJRX/VcL4m17+3X6KN+1m0/9\n3EJ22/Qr7FmPkj2ywM02OIK2AkW0+ehIR1eH66P8hOAw6XATTUdwnDz2ncmL648aKzzn8eSIXofq\nXq/aRhll16TdVRunulexYssU27a9iIgfjYhvj4gPIuKL27Z9bt/3XyC5r4uIH4yIvwv2/NWI+Kuv\ny/+diPgb+77/HFT73n3f3z/V4AcOwc2l7H9QLtNdXVUHy7nudF5Xi8HEe++9+RZGt+BzC8qsj33M\nsix30bh9f3OLo7OTF+QYXWNbeB6ryisduNBW7Z0Jt2ivFv7KdixXaXXtVBtMUJh8V6Sosl8RG7RR\n9aHSz/mq3679Ck7WjbnKq4jYartOtrLjEty7f3w2pMyRKiyPeNNB4KIdyYsiWareCrnjBawjL0pG\nObpc4KIt2A+uXxEHtyBnYoTtqbbZXnZmmU4n2jmRdHiT7QGpDx2mmlCc03PoyOiEBHEkEs9ddNKl\nWS/nu8iXa8eRuY7QZV03DqoMx09NnDg2avwYaAPXz3K+dlx2Blxfrokr6P/WiPjFfd9/KSJi27af\njIjviohfILkfiYg/GxGfNXr+o4j4r8827oHL0ZEgteh3xIyPTF6Uz8pzRT7cAln1oZLnNNvVLeJV\nnnqwyfnZz9x2mOOJvpHPUyZCv1GRty9iGrcpYhptUQ810U/zeiKxOrc4soFHjlRxHkb1It588Yf6\n3zKMPGJUkP+TrIqu8bmKQHYv9KjuHSWL5ZNz/h44vdX3ha+Luk6u7llwfbkW7tk/PhtShuALcuTi\nO3LFZeygOK9rnxe6OXFjuSMEfNy27S0dimQhcYt4e8Kv0uqPm7GPjohhGslWxJuOKWVQb+bjWzKn\nk11lywRTUsbnK6QM0x0py/TkjYlT0jYt77YqMqHqynncuuvAOhMTgjWJkjl7lG0rROwaBO0KOj8Z\nEb8M5x9ExLehwLZt3xwRn973/ae3bXNO5z+MV84K8Ze3bXsZET8VEX9qvzZjfaAFz4Mrl0Qt6lVZ\n6sV5OOX5YVzVPs/vyn5HCLqFL9ZJv4iESMk74pVpfrCYfpPrc/voW93bF9FXsm/GdvLDJBDzcKzO\nJmWJjozxOZdVhKzadqnIiyIzqBPvA77uSi+XV4QJ5bDeanl3HXhcuYyvmbp+7rvVfX+cPUqXkj0T\n9+wfb4qUucn+DH1nyOLkzKjIkNKLMrhlEaN4biJ1Ezm3O6nPaRx/t6B1Y8B6nB2Zh/lqAYDoyo9i\nQsow7QgZ63F1Ofqj7FH1qnOVVnZ15dx/TqtzZX9XxmM4xSULC1fvkv5cEwfa/cS2bbhF4sf2ff8x\nOFeT21cb2bbtvYj4cxHxfa6Bbdu+LSL+n33f/zfI/t5937+0vdrW8VMR8Yci4idWjX9gBpwHz5gT\nJzpW2kGyoMpQJuIj8lbJ4xZG1t8tRFV9bLdaeKK9bhujW/xWWxWxfazrbGISGPH2C0iYhKkHoUfh\nyFiWTQkZ66t+OzaxRxEad87tMUFyfeH+K2LD6e6eWiFfnXxFihyR6sAy3U9CziZcExyc9yofeTP+\n8aZIWYLJQcT8wrM8EgT+DZgqU1sHMB/r8rbIyiZHVDDNhIXbUOnU6bY1pu1pX07S7ADQLp7IOcKF\n/eBrk5Ndts3OlOEmHo6aKdlugpxgQsocueI8JF0qPdnK6I5YF/+Q2umN0H9EzdE7ZWvVv5UP6+yu\nQ0cQXR6fM+F0i6N3RbgmOGDbl/d9/5ai/IOI+DScfyoifgXOvy4ivikivvD6O/RbIuJz27Z95/7R\nfvjvCdqase/7l14ff3Xbtr8Wr7aBPEjZlaGIyco9o3yQIlNYpvKcL0NZV8ZyU8LDHyYtKt3p7aJj\n3DZHw/A8xwYXs+gP03+mTo7cZRQN5Xn8Uo7HLe1m34h1JzsPEBU5yXJubxot4zTurnHRMdSnZJxe\nPE9bp1EzTqsP3yOr5dXaRd3zXKbOcfxZnzo+Fxz03ZWPvBn/eDOkDJ0CTiR4sziCxpOVqsv1FcnK\nMkcKHYnLL0FHuJgwcRtMotQ5Trq8gE4b2DGxg0EdbH9E/bpibIufPrp0bttQTw/VhIS61aSp0qr9\nDo6I8RHTHVnpSFmO4WQro9KL7TvS54ga96UiYEqmO8exVDodSVQ6+Om5KudrqM5Xyrj/nY5rkbrO\nhoP4YkR847Zt3xARX4pXDuQPQpv/LCI+kefbtn0hIj6bDmd79aTwP4iI3wMyXxMRX7/v+5e3bft1\nEfH7IuJvnW34A6+APsgRIbUIx3yOqji/l0A9Vd2UVYtLtzDFuk4GbaoWt+yzqvJMc9TJRaR4Bwzm\n4xihn+Wxq9LqQXD6P/49Gbb/NV/zNXINgNdDRcpWfKSSVREmLEMb1DkTL0wr0sWkSv2ODM8VeUFd\n2B7rdPdX9+G+unsQx9XJTNria+3O1bVU16263s7mSm6i7yju3T/eDCnroBzGGToj+hvHOStVTy3i\n1bZGJkgu0qVk1Q9/OYrGMpyOCPlDY2wT972zU8gJBH87xmPJDlGNdTXZZL8SjqCpdieYkjImAI6Q\ndUSsI1ATgqYIV0UEOT2pryJ12O+OxOGYOhkmWVhHkTO+LpiuCJoqW53UVb+eG/Z9/7Vt234gIj4f\nES8i4sf3ff/5bdt+OCLe3/f9c42K3xMRH+yvfwj9Gr8+Ij7/2uG8iFcO5y9ewfwHBsC5/UydEW8/\n+FRkjvPV1kSe75kMqYVjJaP8C+5e6dIRb///GKax74q0RbxJ6rbto9+OdSQu01kHffEkUsZrgNSn\nCBq3O42WKd/O/lVtUTwaKcP7o3rpB+ZzXX5lvjpXRMhF3SY2r0bR+Nzl8bjitaj0Knl3VPWmayhl\nz5H67xq35B9vgpStEi52PK7uEb1JBPJLhpOp04lkarUPXI+JW+ZVkzoTOZywk1SphTNO9GrxjDpV\nfRwvpcv1SS2ws7yaUPhaXAK1gOcjR3/UWFWfLqrGslO9FdGprlc1Bh3xmJxz21yyP+cAACAASURB\nVFPwWLs2nN2rbfG50jHVe/Yi+Jp6933/mYj4Gcr7k0b299L5FyLid1PeP4+I33mqkQ9I8KJ8Io9w\ndZlIdXJITFKvIwxc/2gfuC9uEZkPCVVZts3piuyp9twDRiYgTIx43PioInmcPznPvAjvT1Gmght3\n1KH6ocbDja8jF0xyWM+U2KDtHTlS/ex0qDJ17mydoiJnTj6xeq2d3dO2j8qt4J79402QsjPhnAMT\nLHYqSBi4LNMuSoXtKofFpIUJDNZjGVdHReBwgZ+2sZNi+zgalrJI7HA8eeyyj5UzzHS3fbH64DVE\n8PVk3QoVweiIGKaZfLkoFZ+riBjrZRn8HRmWV5GxLgI2IYP8Fsjqz6ornSqvuharxIuvxbTORKeS\nvxYZeyr9D3x8gQt55+8SSLrQByXYZ6EsztuoWy1uFWmZyrg6TLjUtv5MZ19zfDAd8WY0jM/T/2E9\nbBdJBbaTaXwIzG9txPFDneoc28162J7y5VOorXdcpvJx7FHWRZuyTG0vxDYyr4pusUyeczmeq8iX\n08113Dn3161vKhkc+47kumusvi8r111B2efaPxP37B9vipRVhKhzHImVG0ERMSxTL/lgW7gc85G0\n8EKUSZWS4XMkUDgpqwm5msDZYag/5+SngdhnfgKXE4Xaysj1q4lCTUQuL4/KiR0FE4KKiPG1jHjz\nFfgV+akIkiIvSIQc2VL6uDxtrAgY97U7n0QTHelU485bFzk9IV5qEVIRLHV9V3ANB3HPTueB48D5\nfpLGeomVeyt1sc7KN6MsE0Cu7xZ1btGpZPBcETG0Ub3QI8H+GPvOu2X4POLNl1rx6+7R5/OuF/Zj\nfH0qX466+bpg3eyf0t9B+dcJEcM8RcYi3vzfMUWEnIwiQmob4vTotkKyzR25Uh+OKFYyar3D46y+\nC5hm29U1nHzPmJA52yY4a42WuGf/eFOkLLFCyI7ocVDkalofHeIqeAJNHWr7AS4cc5JWi03MZyfA\nMugwK0LSpbfNvwYf7UiZM7cjJlbvjyrtSAaPLZOA6bbF6ZbFShe3x7Kcj+VsJ/bfta3G7wiRUXaw\n3kl6EhlTfbt1PAcbH3h3WCFkR/RU8tP6FRE7SgzSf2Cbas5nUqXs5sUrkiq1rVGNAS+U3YJa9YEX\nwEzaeDvjpD7bipE9Zf8K+IEr61JkRtXLPuE5ph0hqggM16+IFduizis7q/PqXjwy7q5uR8yUrLpm\nUx23hnv2jzdDyhTpqUiRmuwxH+vhOW9hrIiYsgG3GmAa5dXWwpVtjYospZ1Yh5+O5Xm2nbJYT8m7\nLy33G+Gczra9uZWRyzCtJnROdzoqeypUBIOPHTFictNtZ5xEytT2RCeTbakoGh8nWw1VW0pW1VV5\nauz4GihimJhEz7hsMmk7sqnkVvReiudCHB94Wigyo/wHliU4H7eSOx+LeXjstj/yeUWkeOGMNrl5\nH/O4PtvHkTL2jSo6lrZzNEzNA110LGVQr5v38PrheCNJ46hZRMi+YD72W90PDhURSJ14LTC/IkQY\nBUMCxWSL37KYaRfpqmSquk4X2oo6VF/4flTy7oNj6Mp5bHncJ98XvoaTdZKzQ8mt6L0E9+4fb4aU\nJZRjuJaMk0XSpLYwqq2ATNAc4Ur9OOliPjolnJDRkajFLqa5bUfWsp2sy2SKn7xtW/0afJyIcitj\nNWmoMce0m7iq9hmcp77MTBLU0Y0zlyuildeA00pWEaiKnHVETNmktilOCFfWwQUW1+n0ohyPMdZX\nEbDpokLJrU7kbhHGOq+Fe3Y6D1wGnNsvkVlpi4+qHZRx5xHxVp5aOFbzPkexuIx9HBISXCgjWXJk\nLe1NmUTOD2o7IspwmucVfljLhIqvIcryWoH1sX/Nci6bgLfBObKA+RU5w+vAWxsj3n7LYpYzCVJv\naGT97ndlU/Ll8ipCxrZUn+nWxSkhc9cM0emZQNmp9F8D9+wfb46UHQE7CSeTZRwdw/KqrCN6bruD\nsqW7qZC44aSP7eA5P/FTbaiJHp0FO17lSLA+y6BOtLtaTCvix/1VhE1dC5dXoVpsuzFwBGRCZlQd\n9akiWOhgXVsVUcL+ujweI2yrG88VOY7Adosah5Womeujy5/acCbu2ek88PRQC3Qlo+Z5LneLPJyb\nlc48V7qVvs6PqgVsAqNuKavaZ9+jtgG6RSsulhUZcgvsqq6ygyOA3EfsE25XVOPC0bwJ3MI7bXCE\nAPvuCBmTAkVmVH2no2sX+4Eyqs0qT41LdT/yeF4id5QIqftT6Yl487oeteeauGf/eBOkrFtgu/RE\nb4IdiiJp7FSUE1KkgNOO2HA0LfNYD0fEMA/tStt5Owk/DcNz/j8UlMt2EJMvHDqE6tqgc8lznszy\nw87HObwVOxFu8V0dmeBwfrWdz0WiVKSs2naI6WzTRdRUG+7tiV30DvvtSCOPa0cSUQ6vN6eZaHUk\ncuW6XypzLedwz07ngXOgfBWnp3oi+odfmKcIAcvjOW5h5IU4L8qZTCl5bj/i7YgY6ox486Fp5uFL\nP7KPeMS6TI6m0TEcu5xP8aEj+mWU4y2LOMZM2HgtwVsZsw84NqtYjZbxFkWW4WuholUR/kUf06gZ\nnndRM5RXdrptkSzr+upIzYpcl3a6VflRTPSc3Sbinv3jTZCyxITwYDqBF93lV+1xGs+RSGEUDSd4\ndg64iGT9HK3KhXK2wYSOdaGNPPHy3nV8GyJ+QfgpGm7dcE8YVdr9dqwaW+W40waeZHB80dbOrhU4\nEhHRvx7ffZCk8ZY8RZhYviJiH3740evxFdHLPPfGRrSfSRzfb67PTNKY1E2JmyNZ3bVhEsfX05Fn\nnsjZrqO4hoO4Z6fzwHGwj8A8lU4ov8hzfdWeapujPMouNd/zOadZL5If9tNcn7cdKiKG9iHBYrvZ\nlyCZSv/HO0Eqsob68U3KOC7qz6LTDrXd0hG0tIX9PNs1gfKpjqBNI11MmhTBYQKW8kf+VDptqIiV\nsl0RNGU3f9xWxy6Sp9rhfqhyvk4u0jWtj3XUd+Fd4579402RMsaEnB3R1eXzkyyUq5xfTpBq+yM6\nFOVcUC5tcA4W7XQ2IQlUjorz1KIc+6UWt9heluGR0zyueK7GHHVUBO0oKjs53xEU90E9TFAmRKjT\nvSKjbFALBpThcaraV+Oqomtq7N01mEy6apwruRVcYtelcOP6wAOMCTm7hq4qz/nsri4v/iq5iLff\nOKgWoW57IOp677333iA8qp5axCKpRV2uHh5VpE/1CdvA1/krssWRSyR97kHrCji6p+xw4+RIR0fI\nKvkqryNJLMN9UPcit4fo2mdUfVRt8rhz2uW5+2+iq8OZulZw7/7xZkgZEpYjhCuBdZ0jQLKS8nyO\nNimi5ezHdrE/FeHJNpQjxMUrR74qGWybty3gxM8OK+XSUamJGNPZBtq17/sbNvDTobQBbeS0mtw5\n3f1HmSJt3ZNhJgsVEco8Jl98nu0qUoaRLyybRs1chErJVW2ofigip4hjFRHj+57bwnyXZtvU9Zqi\nIomKrFbtXNMx3LPTeeAyoJ9YqZPAuugLKkLl6qNu9HVsJxMWntNx7ke7UEal+cgPG9lGF3Xjugl+\ngLkaHcNxwLrYb7Yn85lk8VqC1xFVpEz1TV1LHKsuj9ciPM48tiirtinisdpO6LYfVlEzFaHiqFkV\npXN2K3JVRb/UvdzlqTGu5F0Us7ueeF25fW5L6Vlt5xLcs3+8GVJWoXMQzmG4G2Kij0ka50foSA/K\n5MTJE7abjNViX7WPR+wny/AY8KStnrrhOTpGllMTBJ9zWbaPTyZxInYTTeWEK/vxT7EVugW4IhiY\nVuSEyxWxQJLE2wyZWDFxq0iZ246o2mC5iYzqf9dnXiC5Ma2uBxMyRdAqe1RbSmblvrg27tnpPHA+\n0Kdg2p0n3H3W6UsweWJ/ymkVSXJ+BcvdgrQib0ymWIb9MsvgQz3sPz8M3LZ6KyP7XPb/WR/HL+vm\nnK7WB6ibH7xiOduftvH1UegeyvK90PlwRViYjLl0yqauastiRcrwN2pogyNZKzKu70rXpJ4bV5VG\nVN8j993i6+1k3L3g7otr4J7947MgZYmOkHV1I/TNghNhFRFTcpzGG7jSqyZsRcIceVN9cwQP5TBf\n6VeLWLZLTfToGHLbhHMMqK/bjpj9QYfV3QeT+6IaQ3dUY6XIgIqOdXW6z0TOtcd1J1sLJ2TL2aXG\nGiNgrh2XRjiCVuEaE7hb7Jyt/4EHVsD+QfmLqm6EfnjI869rV8lxmutxu4kqsubS1aLQLUo7Gc5X\ndilyqB5qqq2G/HA39aX/TLi5Dv0j6mYZHN/JWxi7hX7CRcwcucBx4IeyVZ0q37XZkaFKVsnwmE/1\nOz1KH4/t5N6fHCtMZFZxDZ2Je/aPN0HK1CJaTfDKaeA55rl81IOTIdfJyZInTqVHpZOIKZKEMs55\n4ULYkTfneFAm005OActyolFbGdNp8ESRURceE5TnTz4R5NC5S6OdKm+CFWKmSEjEm9vtKmJUbQNU\n2wxdBMxFyji6xfmqD65uRbY6kubysC62h7aodHW98L7GMpdW17K7F1TZteHI7QMfX/ACP6InQhH6\nYST7RUUeOmKmgPNxyqk0tof61EKziqzhQliRN45c8byO8tX2Q05n3clWxpTjsVFjx/I5D/D15XWD\nWluw3YqoHYHbGsekAtvCqBcSlyxThCaifusi6z0SNXNbFPFTRdz4w+PgZDo9ahyrNREeq62L3ToK\nz1nGybmya+Le/eNNkLJERcRWdCR4clKOismWsgV1OQKWNzGmebJW7auFMpIw1FmRN56wHZFyf/6M\nW/3Ul00tCnACQMLFThcnoDzP+uxEeWuIImnqyGmXp77MlePmcWYi0H04ataRMzyvtiw6UrWSVoRp\nhWypempccBwV4aoWP05e1VHXhu3h6z7Rq+4H1nM27tnpPHA52E+u1k24upW/Yz+EpEjJq3bznMvV\nvI7nbgE8IW8JR9amaTyvtjJGvD1/4Ryj/Dj6/KxfrQ9cG3xUpNP1rfOjnS/myJkjJnjtsB6TFs5X\nRK4iYtv29m/Psr7Kd210BGoi18nguFURSDXueH26OpyP9itd1bm7LxBqF9QluGf/eFOk7AhWiBsT\nLKVHbTVMYBlHwpQtrAsnSeUYFQlDRziZnNmWitCpMVDOQzkAtgn7gUQX2+etGxypZKeKutx1rsYf\nbXKoFt483tU4KXKiCJiroz4TWRUFzXwlO2mD8ybETdmgxm0y/u56uO07XVkH164qeyrcs9N54Gmx\nQtxwLuW6SLqcvk6e66rzLl+RsolcxLEXiLgxyoUzR+lcG5iv0ukTMy99Js5tTCi5vrO38v/d+qla\nePOiHvvsrhNHu7As10sTwsNyLk8RgglBcvrU58i2RXf/uvPJPVpdy+k6eVJX3RNPiXv2jzdDynDy\nVgtrXngzwVKES03qrK+zAYmDczjKRiXviBQ+xWISdpRwKV2Zn22i4+BzNW4sh1BPdTIf3y7Ik1fa\nWE3i6npVYXqEupcYjliyTEWUss6UpGFeFS3jPC5HvVjGdl47IobX2NVF26p01lGETsnx9VM2qPJV\nsA337BgeuD24uTei902Zj+eYd2QLI7ZR+Q+c4zPtthxiPVyo4/93VYv9FcJVyaQuFWFiArRtb29l\nxDHDeqq+247IPpzXADiPYduVD1PgfEcgGMoHV9cmj4qscGSLrz/nq2iWinSlLWr7I9uhPk9N3Nx3\nYHIPu+vR2amutSvr0K3HHuhxM6SMwRO/czgom+kEy2C+Ikspz0SMI2QYBcLoT5V2RIpl1ISaX+jp\ndkQEf8kj/FsVldPn+kis3G/HsL8on6QBn4ZVEyTmoy3ZtuvzJFReRVbYOU7Sjow5wsZEjNOOqGVa\nkboPP9RvaVR/JM3tOOKnZFW/cUwdwePxdWlH6JTcBBVBY5nOxirvTDwI3wMd2D/yPFz5vATKTLYh\nsu/lPOeXuSznfrU7ItN47kicI00qfzWdfkZFp7j/EfEGccS5EoH9xryUz7FXD6dwjaAIGtqSftf1\nTfl/BvtRdS2dr8b6FfnoomZMaDC/ImV8XE1jXiWf9jhS6e5XNyY4LtUYq7F2a6XuOqv67ppX3+en\nxD37x5slZbcGRwSZsE3fyugcpMpXtjBJxfzMw3xH/NgmN9GryT37X03+WB/JHG9l5HHl8VILELcY\nWN3K5ogBHysihvkuauTIistXEakqvyJMXX0XIWN0ci5PLTJcenqt0Kaq/U7fZIG2Ys8ZuGen88B9\nAR++qWgbE0JF7HK+Rzmc/1kOdTmbJsShk1HRN1e/Io4qusby6U+x3ZRTY4DkrPKPaozUzyqwP2o8\nVZ/VMe13xATJiZNTr62v8jmvI0fd58h2RL4+Ts6RH7znJvcuj7m7Pipd2d/Z69IOk4fkq7hn/3gT\npGyy6Hb1Ij66MRRxSrj8LFPRMfxyoH4uYzLj0lifHQ6TG1yksoNQci7SppxL5qvoG4PHn7dypt4k\noZif8ng9kZjh5NxNoGhLN+moc4YiDpxmUoN5U7LTER+OenE+18WoF8tNomarxI0jbtM+r5AwpceV\npU3VdVPXqcuf3Atcdi2sEssH7h8833J+VS/iTV858YsrizZFvNg+nsczz205RD24SOY3GWYZ267k\nOK3IkptPcH2AUC+mwvkK/T3O47iOcFEz9K28jshP9aC16o86Z1Q+lfuMeZUPr8hOhCZdeP25fvWG\nRsx3Ua1qy2P3qaJsSk7lV+PVrYncmFbXSqVVRJS/i9W9Ua3LroF79483Qco6qEmfCQ/mJyYOB/Vg\ndIvLO5KWNzFOii6NdvLEj/JMwlYJ15G6DjhOCZ5UctHOfwWAkwY6aL6O1SSF+ZhXpSd9UueTI5OH\nzMdtKyrtyFgeFRFThAvzqy2Lyt5LiBv3g/vNY8C6OM3XQZEwV1aRQq7n8lXawRGzaziIe3Y6D5wP\n5RPZZ2J+gv2i28KufCy2ySSL7WF5N49Xi72It1+QEfGmT2O/5vqq/C77IUX0FDFz6w+0jecfHqNM\n5xok5XNMcb7Da8lzEj+w5fYuhSJg7sikIfPVOco54oMyjgTxlkPMc2m291LiprYSKlurserWQNV3\nZfpBVPkq7eBkzrj3EPfsH2+GlPHkXuUrguB0JipH5AgeR8+wbS5bJYxMulImJ36MMOWEitsZLiVr\nCDXeWJY2qfFHx5FfapRnx4N6eILjtrm8OnJ6BcpZV6RCbZebfLIeR5wqIpYEK+WZPLnfi7F+R9xU\nHxQBVHapyB+PmyNrnObrgP1VZeo6cN2KoKlzZb9ru8o/A/fsdB44hpwjV7YJTnQmWL6a7zmtdHR+\nBX1HhH6BRsTbWwhddC3LLiFcOeewnky/fPnyrT9exnmM/RkCiRif87XFMpyTnM9HO9RR9XsFjgCo\nY4TegscLf0fCVBnqc9ExzJuQMtY/jXylDV10zPWRdanxwHHjMVR13HXo1kccaOB2nR0T3an/Grhn\n/3gzpIyxQrwqJ4FyiVW9CXyKpXQwYcN01scvAUbmcqJlR4YTNveTJ3ks54nbOVWcuNFWXrxWjorT\nKR8Rb0UeeTx4Akj7sn8Rb26BdGOONkzJWdcXRTBQRhERR8Sqc1VvoluVVZGjSR5Hy7DfHcnB+jym\n3bjzGLtFj7Kjm6BVeVWns3/S5qW4Z6fzwNNiStYUCVrV5eZeJh/sj5QPU/M6t8mLRJbliBmXqz6j\njawf9XH9CE0sVdQOF6s81lym+pxzoGtXjT2P7wTdAp/bVLtdOgLCD74rQtZFm1bKJnKczzbgeLCc\nquvOq3HlPHWdlYxrQ6HSWclXMtciZBH37R9vlpRF+Cdxkwkdzyu9PNkp4uQiYkwwMj/LqjTq4ydm\nTEZYP5IU9/ZFnrjVmxu7yBr2B5/g8W/HOI0fbBdluwkR89SbFnkiR3tXoEhGxOyV+JjuPo6cddsV\nlQyXdRE1jq5hWyzDfVLRtCrCxn10abSTx57luKy6lop48jVzdat81/61nMM9O50Hrgv2U47g4DmD\nSUpC+V9VN+LtObRacHYy6PO2bfvqa/JRFh8oop9VUSLlg9JmlHeRNTe3oE9Hf875TFDTx6ky9knK\n/6hti45Yr84tzqeqrYwunfIVKVJkLOtX2xU5X21xrCJqEfq1+1xXtb+St9J3J+fq8HVw107VV2Ur\n94Fqd1LvEtyzf7wJUqYmIeUIHAlTujKdYEeidDjnpSJfOOHy1r6s59K5BSLibSeQEzgfccuiImip\nC9vgtnnLS0XCsD5PCLydMeLNaBZPMGqsphOPm3SqV+JfAudsO0KG54p0OCLmCIsiXphWJI114pZF\nlu9IE/aLdXPfFVHrxsCROHcNmKApAumuIV/f6vq5ek+JjkA+8PED+79uC6PygSyb6UTnu1DekbPK\nvyrfzj6E/Z3Skb4GfWJFxNhf8riw35psZaz8BM6baLsjZzhmbm7jcVW7NrBfOT5q/jsCd806UuC2\n5OEDYvUXOfwgl9cNWQ/lkMTxFsdum+Ml+XyO/XQyk3ynD8dnZQ3F10Vdz66uuw+eEvfuH2+ClD0F\nHJFTDgeJEssmuXAvBEGkXE60vPWR06xDyWLbOIljFCr7ohabbisH3+iYx5M7EizXBjpOVU+NHX75\nnaPnY+rFNqZwDkstzp3jZcepyAymu0/1NFQ588qJK/uZcFVpJYt9Um2psavGOsGEDBcdKmKm4CZr\ntrPS0+nvZM7CPTudB24TjsitEDdFvCr9KO/qsIzz5ew/ME+RPLfYrAih8jVuwcrbFlUb6RMRarsj\n+mP0q7gLx/lJHo+VuUWNseqr6l9FUBJJnrCOOmcSg3o5PY1SOR2OiLi6nOf6rtrDMXT3k5J310DJ\nuTqc7+7vqQ7ENbcuRty3f7w5UuaIiZroJw7C6UyotiLq339x20y+3HZHTPPTOJTJSVdFxLIu60xZ\nt3UEvyS4pVB9EasvHX/ZmIApB8HbENA29QRsOolxnjrv0BEzR24wzaSFyyry5SJUfM5bEzFf1VHR\ntSqaxvkd0atI4cq2RUWWqrLsj7MNZR1J6+CufSd3Jq6hc9u2z0TEn4+IFxHxl/Z9/9NG7rsj4q9H\nxO/a9/39bdt+W0T8w4j4R69F/s6+73/0tezvjIi/EhG/ISJ+JiL+k/2ePeYNwC2sVb7ygZPFupqr\nWa7SjT6My6qFPvov3n2B9dPvMrnBhTm2iVGwBEfNlA/Ndnke4nHm/97k8co1gtq+iDakLI5Z9aCO\n7WMyh7rdeYfOx062MWKd6TZGjpZl2m0nrNJ8HqEjbV1dzld9dH2r+jrVwePRrZtUfbyO3XrPgddf\nTkdXfhT37B9vhpThxK7OOb9yMhOHg/owX9nBOtAhdGVIrDDNTgQnb9SntmfwRKzawigWb0Vkwucm\nWRwL7JNyvFwfv/DoTJVj5XbVBFUdOb0KtfDHtDqyI3T5VZrJymQ7IZ6rbYjdlkWUr36DNrWDbZ9u\nVcS02raYUISP9eD1qvKnaa6rbLuGU7im/m3bXkTEj0bEt0fEBxHxxW3bPrfv+y+Q3NdFxA9GxN8l\nFf943/ffIVT/hYj4/oj4O/HK6XwmIn72VOMfiIi3/Ziae1GO/ZJLR9QPLp1cpwNtVPM562a/5eZ5\nJmsRH5ER9pXovyLiq79FQ//L/cb28bdeTgbnCN61gu2gDkXOOOqF5ahf2cFrATVvqejfFG67W+Wb\nUc6RD97GqMhKlnH+hKw5oqXyVmWUHfw/a44oqvPug+BroGRVPRxD1qfqTfS5++mSNVmHe/aP140x\nXohrLXzc4o2hHF7Wd7K8UFd13MLfLTjVlrGOCLAOtxhGWaejysfyjNp0i3tc0DNZqepwPhOJyj6n\npyMg6jhpc5VgVTbyda7qVbLqflH11f3i7jd1z7M8fw/U90rpmH7/layq230Hp2117ZyBlft4aMO3\nRsQv7vv+S/u+/8uI+MmI+C4h9yMR8Wcj4v/rFG7b9lsj4jfu+/6391dG/ERE/P5xJx+4GNfaJoQL\nx04Gz1Wa87pjhCYB1WJxsmWMiUAlw/2fLpy7hTZHf1Aef1uFJEARA+63swPrv3jx4qvRoekn61Qk\nwx2zn9VLNFBGtYFj5cjHCrnprmV1X1T3i7qvnD73fcD8itAovU7GnU/yuu+zA88ZK3WnWPWPAx95\nM/7xJiJl+15HyfKcj1wW0T8RVG0roP48x6dgEW+/mZHLuW5+iTBCxhEr9SPjzOc+8faNCP3fZO5L\nr560sh08Abj/IMs8XFRjOaerSY5f4qG2R6hrevTLXy3W8ZyfUqKMI0dd5MhFzartipyvIlaYz/qd\n7kqHs9WRPBynKmKmyJsjaNWDDr4WypYJsK4ruzaO2D3AJyPil+H8g4j4NhTYtu2bI+LT+77/9LZt\nn6X637Bt29+PiP87Iv6zfd//59c6PyCdnzzb8Af0bg91j7Cf5LyIfmcJg31Mgn2r06vqT+dw1IG+\nBtM5L/BODvajym/yrpPJ3OHmmEyjD8NrkfOlu5ZYlvIoi/Mb9qeaG9UceQTTxTqvGfLI/p6JJacj\ndHQMZVwUqktPI2JoE/fBRb0mBFGN0+TTPUzgNqrrw/VX4L67eF2viXv3jzdByhJMxjBvWrbqcFAn\ny2ybf9sil6ceJl8oi04MyY1qIyLecBjKqag02pVpdIpMtrJutcUx2+cvMJMznCyxDzwRVZM1p/G6\nqAlGXUdGdw9wfufgOqfsPi7qpQiQIkmOFE2icpnufpvm2q7adG3hWPJEyuPBsiinFhZqzN017a6X\nkldHpftaONDGJ7Ztex/Of2zf9x+Dc/UF+Woj27a9FxF/LiK+T8j9k4j4N/Z9/6fbqz3y//22bb+9\n0/nA+eAFfcTsf8XY/7i0AhMIJ1PNwUzMnE/Hc/ydtipHnc7noVymsU9Zn4lbtfBTc0jq4HpMznBe\nzb7gQ0jUgf4f5dW8hf3C9t19ofrE41uhe1Cq/HjWm5CVjpwwUamIWIT+zcCKzgAAIABJREFUw2mX\nrsoVgVTRzKmtOFZuLYTjp8aUZdz4VxGsag3m2uQ8p/saOOiDKx95M/7xpkhZRE3CJuXXwIcfvvmS\nDz5HuzId8fYTRCZpXKbICPYX6/PEm190bJsdjdKtnDP3gZ9ysiOr8jmtJprsI49JdY3RwSHUk5rq\nC+yclluYq6P6cFlFyNBRs0yer25jXNneWBEYNSYcMay2KqLOyZZG1QaPzRSqb1Va6a7aq+pdigM6\nv7zv+7cU5R9ExKfh/FMR8Stw/nUR8U0R8YXX37nfEhGf27btO/d9fz8i/sVru/7etm3/OCL+7dc6\nP1XofOAKwLlR3Sdd+TVtcudKPuHme65f+Y1MM1Hj9rANlmfb1SJZHVWf0u+qnSyYHxFv/OcaEjHs\nPxJU7rMap+xr1kMon1etpdxifnpMHRXxcDIVoemIzUSvku/0uXuL++766MaquteqCKSyeYpJX5Q9\nK/qP1OtwcF6rfOTN+MebIWVqAd4RM0w7cpFgGdRVAdtx5y56FqH/VJojZMpu3lqhomqcH/HmH07z\nE8LpjYyOI+1Op8E/ZMU6mK8cJsrhmLgJbDIJ8bXCt2tNMV2sM8lwaSYhEW//LhCJWEW4mLCpiBRH\nvLCNa+dPtyaqMkeCHOnDPEcseTGj9FfoCOk1iZhq70R8MSK+cdu2b4iIL0XE90TEH4T2/llEfCLP\nt237QkR8dn/1dql/LSK+su/7y23b/s2I+MaI+KV937+ybduvbtv2u+PVD5//cET8l2cb/sAruAX4\nxN8pn8lgGdSFvqSr69pw2yDdwg19hmqb/ULqxpd5YH7Kow35gJX/iLpCzkn8NsUE5mG77g+iOa2i\nYujvsT0eT7ZFzWNHtpitLtaVn8e0Wg9wnW4LIeczcYv4aL1ydKvjmWker8lHXQO1DlKybpyVvLvW\nVbm65lX5mbhn/3gzpAzhJvhJ/qrDQbBuzK+IV3XObaKTiPBbEfM86+BkjfnXTOc5ftxvyph4qTC/\nkqsmbrwm6ovu0gh3TRkTYjYhZ0woqo8iY5nn/oyZiRrXQWft8o8SMtSBx2ocKrLGbVTXxI1ndQ0d\nWavyVLtV/rXJ2VnY9/3Xtm37gYj4fLx65e+P7/v+89u2/XBEvL/v++eK6r8nIn5427Zfi4iXEfFH\n933/yuuyPxYfvfL3Z+Px5sUnQc6lCbeFkedoVVfpVPMpt3Fk0aUIllvEpR9Iv8gEJPNw63+mOfoU\n8SYh4fSqPI4VEyvMY//Ic3fK4hw53baIspmXuhUm89qRxTr6d0c+MK96MOvIBH5c1EyRODxmnUka\nda6klS1VX7oP1+PrwWsgVd9dQ5abXr/qXujavFXckn+8SVKm4MjWRH617pl24WSMfx7tCCaTuSxz\nJJEdabfFcZrvHDfXYaDjyT64p6MYxXPj5o5KHtvkfIduYe+OKq224Ckn7QgZX2eV7+p1Nrs6rn2V\n5v5wWUKRtUkZ6+HzCZReJzeVeRfE6xpt7vv+M/HqtbyY9yeN7O+F9E9FxE8Zuffj1baOB94xHDFz\nmBC1M6B0q7a7I/ePZdhnKgLI/kORPLXYVWmXV10HtX0R8xm8bZHbVeOEWxYnJHp1bYT+Wi3i86gW\n80wwHEFjWUU2JiRmQjyU3R1RUrpUW9xvruvIFo+1G6OKgDlM5Vd0Hom+XoJ79o83QcqqBbcjL5Us\nHiNqh4OTdQUmPHjOhMrJO/KktjhGvD25c0RNbU1E3TmRczvYlnr6yV9a9UQqt2K4CRBt6yY89bbF\narLna8fpVThipggN5ldRMZWnCAkSHfVHzvlxf/KMenlro8pnXS5C5trgfG6fx+MIQVPfRTUmikAq\nHRPdXVmXdyamxPKBjw+UX+MyV6fSg/7PzaHoW9wWxAqsu9Kh5nk+x8U3+mD2iewnsa85N2Vd9ZDT\nzTE8/0S8vTUxwXMvflK+2q6YH7VtEcdXHXMcWO4I3PVwJAXb74gLEyqup9Lq4yJWuAZSaxlVt4qK\nsZ4uAqbqV/LqXnf5fE3ceKprs7KWct9LbMPpPhv37h9vgpQhVkiXyquci2sv4m0HhjocmVo9V+QL\nZV++fPnVPdBManLiRueDcqotJms5KUxfd89Ap8UybhLF68G63QTtXomP16WbRFy++zJ3i3h+8tk5\nayYlrlwRF0V2VD7+UTTLqTp4ZHm1XdLZ4bYmum2KrFNdBzW+XVSwGn9XxteO4cpWZM/APTudBy4D\n+zuEitIo/7hyf/Fc7tpYgSNmbvHH2xLRp6iHiuz/1INOtoHJWrd1UM0RGGnL8VJbFjGttit2cxpv\nW1Rj6Xyak+FrUOVXi3O+hs7nO+Kw+onQf9qcutW5q+Pqc3kn70igGwcuZ1urca10VOPvylRb7j7o\n8is9l+Ce/ePNkTJER7QmBI7lIvxWBq6fmN5Qqs2It9/WyCSPtzWyjXnuCKh6ypftYiQvJ3TltNAe\n3s7IdRBIDpEQ8uTg6lfjhvUSaJsaI9Y7gXNeFRHjo3KclxCyroz1qnYnZMYtNngx487ZBh47NxZV\nlKwjRBOZDu5adrquScRUOw88UIH9wUo5+xs3p1b3IstXNnKao1gTf56EBMkL+wvWk4tkjphV8mif\nWhjzeVXHRfLUPFaR1eqaqC2Lym51D0zg5PiBqVvUKzKQ9Sckw30qQte1q+pVNk/k1VhN5FlGjYuz\nyV0fXmtNrzXLu35N610D9+wfb4aUVQtzlddN3Jc6HG4L8yfRsUyrNle2NeIXK/XmW59QnttUWxax\nD85OzGdHiFBPgHCMuVxdB5bDcVcTEo/jtaAW6B0hy3RHxCLijTdEMkFx0TFF1jhytRLtys90WyTq\nd5E5Hg/Vv+o84bbmdAROEUyVZriyirhdG/fsdB44hm5hXvkzllE+kfVjPkNFqBwUcXI2VXbjUW1P\nzPycU5gMYZSNZdR3H0kOjg3ORWg7E0ysx/LON6S93H6WuSPazw9VsU+XwF3DjpywD++ImJJR2/A4\n0oWfaeSq2vK4KjNpT/XVjY+Td2PLMirPyas1mLr2XOaio9fGPfvHmyFlDh0ZU0SMbwxH+Fw6zxPq\nRnPEzJG/ybbGiDedDZZlpG3bPtrmiA5H6cQJI7cmKmeV7ab+/HAZjof7TRn2AfvkJiMVBesm+Spd\n5SGqxblLKyfYEQhF2DqyNiFjeVQErCNiisQ5mW7LYmWXGp+KvKlxrxZMblGych0Zk4WM038m7tnp\nPHAukDBEaMKk/KTTMUljO06fAvtHFxlisM9KefRzyo+yb0ZixtsGXRvZPyZxag7HfqYeJmdpt/MX\nPLfhePFYVXNaN091c0znVx1J4DJFqCpyUhGSjuQ4kpTpjkxV+dO6VV+qsWB7O9KkxgfH3NU/eh0d\nVu6Ts3DP/vGmSJkiVBO5iogp4uUcTqUf4WQnETQ+d39C7bY8ot3sDFUbOcGzc0KdWea+XFim2ouI\nt/5cGycL3hKpJhHUpbYoqvMqf/VLu7qQn0Rz2AmzjCJB03JMV9sVXcQNbXd9c7ZjXSdbjSnCkTaG\nW/ywTNcelzuC9i4n/a6fD3x8oQiQgiNmSpfyiewzM+30VfOv87Nsa+XDnd3q3MmlTrX9UdVle3lM\nGaoOLsRVRE9dS/TbDHwbI7eFdZ1OZe8U04V8oiNjVZkiHFNCpgiMq+vaxb45QuT6PtnS2ZGeaqzV\n/cp9dVghS1Ufu3auiXv3jzdByhxxcpN0d14Rss6OiJnDYZKTMkmmWCb15HnKZ9Qr66KsK8vziDf/\nXwOfDKLt6mki52d7bvLCqAqSpkzjf7y4+jxpuMnZXSue7Nz16fLdF9ot6tkRqwW9I0qYhzIcXVoh\na267YlWG7amoV7dlEfU4snbpOY+xI2JqPCdpPKrr6c5X8s7CPTudB9aBPol9nJOr9CgdXd2Uifho\njnZEpfLTKq/6/RZHvRD84g8ER8IwD/uafkzNKypfbUvkMWU/i+Pr6mebk/kMH65mGdrGmPg8xKpP\nnexyUSSIz5X8KhnL+9LV7aJjmZ7KczSOdU0+037ytZiUufFXaXeNOU8Rskm9s3DP/vEmSJmDchqq\nTB0rPROg86lkmCxxOyzDkzTLY+QpyUy1lZF14RYMJFluyyJPMq4sP7moz/IcWyzP+mgXfo68Al/V\nU1h5elM99YyYRczYWbsyRZwyvyJe6nz11fmstyrLfjgbziJg7tzZzuNZXSNOd9fQ1VFyVd6ZuGen\n88B5YJ+H9023jbHSMwEShMkWRKynfDnrQeKBeUzQVPSI53YmaOiX8Rzz3TyUY+XIFY4xp/Gcd6BM\nCVl1dGQNwfdEhW7xrdLqyOmOIPCaYEJymFShHiXnflahtjl2dTHvSERvWseNAV4vvqbd9VKyfHRQ\nclXeWbhn/3gzpIwdi7uIU8fBJO2ow2HnwXkRb79dkYlaByWPbXVbGTNP9bfbsojtVmWIqjwdg9uK\nyJMIOlCOOrJeXEy4L3xHtCp0C3x3VIQC03hebTXc9/2tl4AoGVfelTnSqMoq0lRtZ1TjUUXEGEdk\npteNdaiyqu2ndAT37HQeOAae/9w9UpUpuYqsdfUjvD9yeeq8a1f1Xa0XnK+v1gPqN2Rdn1W9Kdh/\n4o4VRwC5b2q8qnFBebeWcP10+dVCvDo6gpHothpWBE3ZMyU33LaTUfeJqof1q7T7HZkb/05G6Zle\nN9ahyqbbI6+Je/aPN0PKHFYm2AkRU4t7l075xEqe27aI5xHxxv+SVfJqKyMToJTND0fYUi/KVJGt\nSdSMy3GMUUbJcVoRKrctgtNVnkO1WHdptZVRkTXMr8gQyzkCh2SNI1qO7FXbHPNTbYFU59WbIyty\nx7arOmpceXxXyBiPOZdxe+p85R45E/fsdB44F2qRnnldtKyq6xb37PPS17gIDPvUCoogVRGwrLPv\nb77EA30d+0ue67ItfjjIMmr+zvwqaqbmMpRF3a4tTuO4VnNcN3916HxstcB3fp7zInoy5AiMio5h\nuotATeQmkTWWr/rBfVfn1RioeuonIZNrVV23DpV8t067FPfsH2+KlLnJX5W7uiskrmpTETUHJiiY\nVxExbCdCky0mZky0sE1VXzkcjEgp4safjpzx78Xc5Kps7ibs6vcCfA2Ogq+vi7Z1TlCRjAkR4/LM\n78habiV1+lkWdXVEjuUj/O/UJuc8zpUMLz4wX8lwmttauX5d3aeA6v8DD0T00bKpv6qIGBOFKh3x\nkd88Gjli8O/E3AJSzdO4lVH5QiZ4KJN9Qxnnn/mDdTPt5qkqH8eUtzfysSJonFbnK1CEoEp3R+f/\nFQlx+bgGyHVNyk9JGcpM6+TnSHuq3WoN1I0HXxMn49pw19nJ8ENyVffauHf/eBOkrCNJVZ4janjR\npg7HgWWwPXZQ3CcmVmwbbwNk4jKJqKHuadSM9U9/T5blKIdtucgb26N+V4b9qCaHrI/nZ6ByYtUC\nvoue8bmKFjkyFVGTsq5+V87RtMxbIVyTc2xL9dGNlVp8VAsPvjarBGyq25WfhXt2Og+sw/msyqfl\nkaNYqDNR+VXnYxFMzKp2VD6j8k0q7XwhLoBzLHJecBEx9i+8xb/65NgxOXN1MZ9l0D7uD46lmsuq\neW2S766NIgKcVj5b+feOQFQEJXWqtCJME1LkPmq9s/q7sUnbVV9xjDmff0fG5epauuvgrp+q2+mu\ndFyKe/aPN0HKJqgcw5Sorep1MpVjSdKE+W5rIjoP9/ssdIxcX51jHr4Fkuuj7aq8+z0ZnquJg8mZ\nA45BJV8tElaut8MRQoZ2Z37laKcRNBc9ynTX5pSQdQTF9VERrqo+6nBER43/lIx19k9Q1e3I2TVw\nz07ngesA53GG28Z4qd5Khn0X5nX5TPDYR2Ea66j6lW9wJJQfYq76GP69mBq/lWvAOrO+08e6Kxum\nWCFkbHdFxjDdlSlSs6qX609I1Ar5qGypsELEcGxVu86+S9ZJq78luxYhi7hv/3gzpMwtutVkWJGv\nikBF6KgZ60Q5Tue50p1lKjpWESlFhNx5OowqgpY68Q+j8wvLTwNXfi/Gk4OSybZZT8phOY4P2sTX\nlPvF462uQYfJk0NHvrBMHSsChTL4wTZUvkorkqXSrv5TR8QmfT1CxqrxXzkiVNnknjkL9+x0HjiG\nqX/CvMnCv/Ov3E7np5lMXQLlv1Ivk0xVVr0yP/WnT825g9NuS2L3wTFjcqZkqzTmpX1YVo13Nb9V\ncGNWjSXKKB+vyqZELNtQZVWkDM8j3nx7dRUFc3o7Euc+OEYT2Sqfrwfmdenu2qg2FCFTsqv3zFHc\ns3+8GVI2gSNR7CyyPOJ8h8O6maylrIteHSFieI76ksTkRKFI0sqWxK4c5dCGS7YsTiaH3EpSfbG7\niFwFtbUncYQETIhY5q1uZexkVsrPJmTKzk6Gx1otTFYWLQwnU5GubhHj0mfinp3OA9eD82lIMFA2\n4joPLh0xY186QbV9EecUVbbv+xu/M0s7Vz5ZZ1I/Qj84Qx08XkfnOTym/6vmJnXtV64B4kwS4EgI\ntl0RlSmZucaWwyP1V/uhxl2ROzeeatyVTiejHopXeqr0Wbhn/3izpOzI5O3qsoNRujvnk/l5zmWq\nXbWVkdFtZay2ErLNaQ/qdDJ4U2MdhSzn/jqZbium6yvLqT66L3tFrFagiAKn3bEiY5h25EQ5ebeV\n0clMy49EwNy5GsMpceEFyVG4a3KGzgceuEXwPH6GLj669irfkufu92XOdzq7It4meey/Jr5aEUXn\nX9QaYbIdkvvF4G2NXG9yPbv+Oz+fEaKVe6ZbfPO5W+B3REGlu4e8HZm5BqFaabsaP9dnN6ZKZhUd\n+bpE5wPn4aZIWUWmInw0a0K2JmUTh+Mmf4ZyOIr8cJ47j4g3Xokf8fYec1UHCVDKsHz2FbdIukkH\n3wDpJiPeslhNyMpBT57MKEdwCSoyhueKgHG5IggTIqZkXfkRMhYRb73SXv0v2plbFlF3FfHr+tqN\nsbsW1ZHlO32u/GycQVIfuE+4BbnyiVzeESVFCpx/Ve1gfqZRD6MrZ7itjGinipSp7YioE0kbpiPi\nLSK4bdsbr91X8xj2zc1nOHZI0Nx858qUnBrfM+aTygfj+eToyrq1BZ9XxCj1rZAuTke8ud1x9aP6\n5EhW18+Ei7h1Y7xyrZx8p6/ScRbu3T/eBClTk/1UnvOcs0C5hHI47MwYLl+VoeOYvJhDbVXECYEJ\nkYuqZV+67YzoDNgJcT380uL4uwmH+8+yWIfzut8A4LgpTCeFbgEeoSNw7OwqJ3pJ9MwRl46Mpd3c\nxjV+H1ZtWXT1uA3uiytXYz+5BtURUbVRpa+Be3Y6D6xj4pucPOcpYsZyCeUfO1+t/ANu/btk0VZt\nX8Q81y/0mUy41Af1sU/OtrG+05fyKg/HkyNok7ltmkZM55duAc7nanHv/HyiImKY7kiLIi4VWdo2\n/0fUlQ4sc3ZM5Sb5CPeQuxr77hqoenhdEFUbVfps3LN/vAlSVqFzApM85VBU/qrD6WyN0KSQnUNC\nbXdkPS6qhuURHzmOzMt99Vwvz5UDV+SRbVJbFtUYOVmGuhaoixcTbqsk1+MyB7dYqQiCOypy4tIV\naalIEsupCFVHwLqxmNRhEqXqVWOxssA4kxzd6uR+q3Y9cHvoCJvKU78vw7nX5XdtVfnK1gS3WeV3\nv42b+GfX1kpdtGVqA7arxgh//+b0uGu10g7bq8oqndP0ZOHviMMKaUG9FZly5MSRKUd88Ny15eRW\n8rFN90B6SsyO4prk6iju2T/eDCmbEKJOviJo3dHViVh/SqnqTKJjiiyx86lkcCLhNyvmNjUma1yP\nJwMlg7bkuYuwoazqU8pnGR4n6clLQDo4klGlVZ6LiuXRETHMc/IuitURNkX2OrLVybj2plGzaZ+r\nsVblq0dER/gqIngNB3HPTueBY1j1Q0p+Qpjc0clG9P67+z3XKtTvu3CbYtW//PALQFYiaNiGepFI\n9q+b31wZkyYVQVtJq/MVOKJRpVWd7uVebn3RESzU7ciV0qNI0VlRNtfeJJ/HchJNVONfjXV1rc6O\nkl2yPlO4Z/94M6SMMZnwJyRsUjZ1OB1JY+fFZStbGSM+et19hI6Qpa788q2StUqOv9Ask2OiJoCV\n35SlTdWkMP3iM1x59YWuHJkiX1zWkYXud2WVrHPkk9+OKfI1kVH6K4LW6VJpN85VnWsRsVVcyznc\ns9N54Bwc8UmYt/L7ssqXcj0sx/SZxAz9WVU/7arIGkenFLljPWouThlF6lJmNZ1H3EbJc666Niqt\n4Mq7Me1kq9+Fd2ShSjNpOUJ+kOiwrkpm0obSM+lPNTZqnDk9HdvqqDCR6XBJXYd79o83RcqqCXpK\nxlSe0ztxCErHNB3xtoNUuhVZQx2Zx6TL6VqRcfoVJjIoG1G/PbKrl3D13bhy+RQVIau2NVYkIo9u\nC58iZtxetRBQ0THVjiJSTgbzq2iYGptKlxujCWlbQVVvQtKq9FPgkr4/cN9QJEuVVWQMMfl9WXcv\nKiLn0hNiVpFBllH6lFyla0Vugs6ms6B+g85tqrUEYtW+Sr56kFqRiC5PyWR7K4RJkTrW5WSm+RyZ\nq8ZjSromWzxXMbmOSqYihk+Fe/ePN0XKInryVclXOlaOiM7hTMB13W+13O/FUI7zXPQt8xzpY5ku\nHz+KMLnJguVdHRwHzuuehrLeVVSLkoRazCvyhccqKqbS3W/QFGnrSFrKTmQwbxr5Wtmy6IioSrv6\n7liRLHfktMqrZK/pGO7Z6TxwGVZ9UUfQut+XqSNClVW++xpbGSPq18zzHMH5uAMk9bi6XD/txw/2\niyNnKK/SfKx8TqbVC07UfTHxdQrVdjY+r3z6ChnjdNpRya3kYb8ufSEH6qjaq/Su9hfHeGWc1TXD\n9pT+ql4le/Q73eGe/eNNkLJqQnYTvSNeEW86FaXrEoKm9DgbMh9tyrR66UXmO/I0zcsv4BFylnaz\nbPaPJ4BVgoa6VT08Vml1jtvxusnAfakrx9aluxdaqLxuOyPXqX43hvmrpEq14eoqW5Q+1d9L0k4v\nj3l1VLJOrpr4r+0U7tnpPLAO5Y9UWZd2/srpnBwRqj2VdzYxi3j7d2bcvzznuYPzsR7+TszNy9w/\nlsH+TQjayrFKq3N+IVcFdy0qP9ylK7JQERMl2xEbR4BSZ1dnko82dvWVPjcGqNP1rxo/ZaO7FjzO\nStbVq76vl3yXO9yzf7wJUsa4dHJmPZU+V3aJw1GyKu3aUlsQp3nctuqT2lLYbWmsHDjKRswjVtgP\nrKcWD5xW59zXI6icmkof3abHdStn70iWstXlVVsTEV00bEWuGrsVEtQRrCNEbEq+VmTOxD07nQcu\nRzcfr+qptjG6tlS+In2OCK5sZVQEC8FkT/l9V38132Gybqmieiuo1hWKcDodR9t255NFvDtXJGIS\nGavKlD1qnaPa7vKVjVV9p0ul1QtROK30OMLVlVeynfyKzFm4Z/94k6SMUZGdyeId8xxRqybmyrlM\nJscq7X5P1m1dZDkkXKgvZbiNSR7rzLJqIsT2VL+4DvbPbVNUkyjj0gmhWsBH9K/Knxy7SJpKV5Gn\nyZbDS+SO5E375frkCJuqUx2rOg5TouZI4Zm4hs5t2z4TEX8+Il5ExF/a9/1PG7nvjoi/HhG/a9/3\n97dt+/aI+NMR8bUR8S8j4j/d9/1/ei37hYj4rRHx/76u/h37vv8fpxv/QAn2KxFvk6Bq8R7htzHi\neUIt/JX+zk+fFTFTZE8tTHN+UfarfNTLUTNXd5JWenFs1ZxVzXWTOenSOaXzu1NyVhGEbr1wlKCl\n7q5Ola/0qbpdXpVGvdNxYKyMtxt3B3eNK7mJ3lXcs3+8GVKmSFJ1rvIrMoZpd8Q6CeVwqrLO8SmZ\niJ6EYV6E36ao5FzdbLeSy/6xPOtxk4baqjiZsDE9/U0Z9mOClf31zgF25MBtT+QjpiuCM9mqyLId\nebrkt2Krv5ubErFpGR7ZDifTka8V0nUtQna23m3bXkTEj0bEt0fEBxHxxW3bPrfv+y+Q3NdFxA9G\nxN+F7C9HxL+/7/uvbNv2TRHx+Yj4JJR/777v759q8ANvgf1Jd67yKz8Wsfb/ZQnnR10Zp6+xlZFf\nU6+QdlUEDc+R7GE+61lNY58j/OvvV+cyN4eszC3V2FV5Ux8f4bcn8rFKu/PU39Wd6O90drZU6amt\nk7GZjLkb/4RLu7xK/yXfY4V79483Q8oUqom5muQrJ8D1JwRt6nAqYsYTL8tEvPnn0VkHiZmyTdV3\neZmP7SQ6AohwuitM67hrrvKV3NEfMnNbk/PKSU5/X8ZllxIy1oO2TbccOp1uPKp+VuTK6XJka9L2\nVHZixxGdZ+EK7XxrRPzivu+/FBGxbdtPRsR3RcQvkNyPRMSfjYjPgi1/H8p/PiL+lW3bfv2+7//i\nbCMfWIMiWarM+aSKrLEeVc/pq+pGrBMz55fxnOtGvBk16+oosMxTvFlREWOEu1buunRyDisLbXde\nkYLJLpoJQXEkKNtYka+I1ETnZHymhMzpUuNTtV2Vdeu3zg6Vf63vBeKe/eNNkbJukqxIWie/Sq46\nR5R2TojZFEzCMC+ijoSp/Pzyr+pU9TMv+4kkC+ukrmpyPfN/yc6eAKaEDNOT31JVpKyLNh0lY6v1\nu4hb1ZbqY9f3ydgoUqjyJ0TOkbBJenJ+Jq6g+5MR8ctw/kFEfBsKbNv2zRHx6X3ff3rbts+Gxh+I\niL9PDucvb9v2MiJ+KiL+1P5UzPVjCCYdqnxl+JXPUr8vm/rHqW/FssSlhMf1XW1nTFk3v7BM2sv2\n84s7sJ8ujboyzUd8m6KaxxW55HSVdwlWCEiC/bvy6926Qck4YrSyVdHp4rZXXrzRnfM4KULW1XN9\n78ZZQdm0mp6cn4V79o83RcoUeOJ2k/pK2hGo1SNiohfzXHrbasLFxEgRrgj/W7PUi/VdWyibOlkH\njm/3W7Lq+C5/TxYxi5R0vyvLtCMLyrlOZFYJVh6PkDmXX+nlOkdyrxW9AAAQPElEQVTS7liNrbIB\nj5xWeZ2sK7s27zig/xPbtuEWiR/b9/3H4Fx9Sb7ayLZt70XEn4uI73MNbNv22yPiz0TEd0D29+77\n/qXt1baOn4qIPxQRP7Fq/APHwf5oxd+49KXEjP12hH4wynlMzJwvn45B5lUv2EBZJlLd+PI2SR4D\n9v+r8x8eFVHLPqFtCmfMVxM/O324qso64qFkmNg4mQnRUbKd3iNt8Hgc3bLoxnKyRnLXSeW5dNfG\nGesyh4P3c+Ujb8Y/3iQp48m3O1f51QTuyl07k/Ydaascy4q9CbWdcfKyENUHJcv2dvkMLEebVoB2\nqt+kXQPqS15thXTEqypT+tg5TwmWy+9IlsIZUTO3yFglSkq+OnfykzYrXJt0XaH9L+/7/i1F+QcR\n8Wk4/1RE/Aqcf11EfFNEfOH19++3RMTntm37zv3Vj5k/FRH/XUT84X3f/zHY+aXXx1/dtu2vxatt\nIA9SdmVUREGdq3wnk6iIGZ9P2nekjesrYrZiO8u5PmH73bnz/xMyyZj6+inUm5QZ11ogVw9NHfGq\nyiZk7RJiMyFMrPuInkkbym7XfjeG1fmUSK3eI9ckXR0O+ufKR96Mf7wJUjaZpCoiFqEn0I4gOd1K\n3k3cCeVwps5PYUq2VH62zzqYxGU+E6mj+TiOSkb1pZvEOb3y0o9LURGDKSmromJ5rH5/djZJu4TQ\nddsVqzxVVsmtHHnsqrzV9JHzS4FjcyK+GBHfuG3bN0TElyLieyLiD0Kb/ywiPpHn26u3Rn32tcP5\n+oj4HyPih/Z9/19A5msi4uv3ff/ytm2/LiJ+X0T8rbMNf2DmQyoiFvG2X8O085lVWyzvSE1C+UdH\nfFa2Mq76V46aZX20S51jOm3GNPZFETQe2yPz3CSNETXEJXOKuwYVMThCytzREbFK7hKSlvpXyVYn\nV9ne6b3kiKgeph9JHzm/BPfuH2+ClEX0kZxO3pVVJMyRL+dw8EZw+dOyCZDYTMgW56Oes/OzDG1E\nqJB/JYf9rdLqfFqmUF2LVVLmImHqOCViVVnmX0rcVvNvgYip8T+6iLmEkD0X7Pv+a9u2/UC8ejPU\ni4j48X3ff37bth+OiPf3ff9cUf0HIuLfiog/sW3bn3id9x0R8c8j4vOvHc6LeOVw/uLVOvExh/JB\nEf6erHyN8n+qHAlMVZd9Z9ql8qdl1ZZDB9cv1ceO+E10ubHAa1Ntx8yjy8fjNK3Op2UKK/628+GK\nLKwQiyNkZkqmsI2p3kl7kz5UNl16RKy8afHoemx1DXYLuCX/uN3CIuO9997bI/zE6M5XJwSXPjJB\ncJ2J/PSLp9IRnuicmd9NIjzmVRnrrORQF7c/uS+6fIWjhIzPLyVjrnxCmFSdI/mTdlnPNO2OT0nE\npguYVVIGY3qaJ/rar/3a/Tf/5t+8VOeDDz74e3u9ffGBZ4z99Y2m5qyj9/NKemWOc9+51TmhmjNX\n56CVNjr5bg6bzP1ubNz5SrrKq/IVjhIyPr90jRVxPDI2leU2jhK7I/rd8RIi5sbPyR1ZW6+cbyex\ntSP+MeL5+MibiZRFfPSErMrD82lZl67ycAJT51kHwfW5nkMlt23XiYKlfS4/ov5vsu7lHtUWR5Tl\ndhBduH2lLNFdDy4/+vuy7ndkLDNx5FyG+ZdEwdi2S17o4Y7Thdx0oefyOO0wXcBO9Z2Fp2zrgecD\n5SMqPzUt69Ldiz8S6jxlEco/dg/rLnkzY4cqaqbGg/0656n+5UtBsC+sX60XziZlXRnatVJ+KSnj\ntCIRExKkyirZbOtS0rXaRmVvJzM5IlYeeDMuIWTXwj37x5siZRGamFUyPOlfQsxSjyNr3E6iIl8T\ngrZC2iLq35RFrJOwLHP5ShfWSSgCpuxDIJFThNfV69C9EGRVZ7VAdwTLya1EyzK/I0qrWx5X8vn4\nrojYlJBNFy6XELJrO4V7djoPXIaJv2CfFvGmDztKzCLqrYzcTqIiXxOCxsTwksWf66ciTWyXWye4\nPCRoPDbKb6j1BRM2zud0lbdS/lSkDLH61uYziFJXf1Uv5k37dBYRmxKy7tqslk3Oz8Q9+8ebI2UR\ns6dtFXk7SsyUDjeJOrJVka8VVPUrohWxTs64Dn5xXfRMETQs7wiY0sG60HY1BhU60nXEYVXkS8k4\nkoVlilBl/oTErZC0lTpTkrVCyqb5k6NLPwUhewrcs9N54HK4h1jKR3X1V9NKV7ZdEbEJ+epwNGqm\n7K8Ilfs9G5IzRdiqdUCV/+LFi6+msX/YR56zHEGr8lbKV0kZ51UL+sTkxV9MclbJDNfPdqckaYWg\ncR9Wo2PT/K5dbN/Vr9IrZa7ta+Ke/eNNkrIjmE7wnVxH1jp9RxyRm6xZXunAl4BknUq3qoP1VqJw\nqp5yfAkno+QQ13gN/hGHtULElPyEsDG5OBI1U/Z1dSbbMxUJq2x35KbL7/S4dqeo5CeE7NoOgQnr\nAw+cgemDwk5ObWVc0Tfxj45AIWniaBbLIZwfdfak3ORV9yvkspJ1pBDH4ClxJilDVFvpjpCQKamq\n2p8Qror8OELWyTly0+VPCJmqP0UlPyFk17xX790/3gQpm050jgCpc/e0D+WqJ4KOCCkic5bDUegc\n5LbN35SY7bs6Sh+ORaUzwkfHKsKFcmiD68cEjvgxztzCWEXDMD35wfwZb2asyioypghRRcomRzUO\nVb46unRXXqXV+a3gVu164N1g6jccAVLn6uFj5wczvfIbM2wLdXVHhMo7Yztj5Z8VQUJfWJG6zvfz\neKproMYtocYe0RHFKZG8dLF/5OUSK2UdkWI7pvUmeh3xO7IF0/V1ZQwYZ7xpsdL/LnHP/vEmSFnE\ndYhZ1UaXnuQlpgSsImaTcgcmRRWZ6ohbVTYhaFmmiJqL6FXEy0XmHFZIXDfGqnwaUarkOxKWZRXZ\ncvXPKpsSsSMkDY9HZS9Nn3He5V+Ce3Y6DxzDNYhZ1UaXrohZphNTAlYRM1V+hJh1ftrJ52/OsL1V\nQsZEjMdsukbJ7Y55juAtl65PZ2DyEq4pGVPlHUHr9HVvbJyUTcnVkfaO9NnJsA3VuBwlZKvnXf5R\n3LN/vBlS5nCEmHX1j7RdOYtLHc6E0EX0zgSJkNvy57YnTsoiPop8seNlQsh2OxnXB243UW1l7Jyr\nQ1Vn5bdpq2RMyXWE7akI2QpRqvq3Wmd6/Y6QMFd/cj7Vcxbu2ek8cC6OELOu/hQdMeO8iQ+b5DMx\ni/Av56j8tbPRybv2GJeuSRwhm6DykUdemtXpXFmoTwnaCiFxBOWM189P5FV7yp6qbKXO9F44QsJc\n/cn5VM8ZuGf/eFOk7BICVenhCS5i7YmgI2ZKbuJwpqgIWlUnYh41c2VZnvmsd1JfybAOJYv94L4d\ndSpHURGJxJkv/VAyK+WXkLiKlLn8S4/TspVyTq+UqXOXd03cs9N54DguIVCVHvWgzREDTk+2Mlb+\n0fnqCVDPtaJmrozf1oh+EOeqrt8uD/uoxkf5yo4MYoRtFU5vRSTU+ZSkrRCzxFlvOlwhgPwge5VE\nTtqYErOjWxZXylz71yBfDvfsH2+KlEX4yFhEPfmoc6wzfXI1mSynZC3hHODEIRyFImdc7rYucvnK\n1kT+YjuShjY6WVdP9fMsuPGfbFtU55Pfml2LqDk7LiFSU5I1IV1TwrVKwi4hYFNCdk2nwOP3wAMI\n52Mi3rwvK+Kl6lT+h0kbpydbGR0RSxuUP+9IHOOs/zSrfLMaa/SfiqCtErIuze2rcpY7y1dOydkq\nAajIQ6XrjNfou/wjJHBKsiakqxsntsPVmaaPnK/knYF79483R8pWsPqUrZrgVtpacS6VnZ3D6eS6\nSRrL8M2Hqm6Wq/FxWxO5fspkmXIG1TZHpZfrIaYv9FjB0d+jdUQMZSpZRSiORL8QZxGyqh+u7UrP\npJ7Lq4iXw5F75V1N/vfsdB54OnTErJJffUi4upVxYmdFjio594ZI55tXfG1FclTbbp3RrRWqNcp0\n7bO6zpngCCnj8y69SkaOEjFsY6qja7uqU5GXqp/TazglXpP6U1yLfFW4Z/94k6Tskgmmm6yqp1AR\n/RNBR8y6J4KVY5w6v1UnifUifNQsZSavvU9cEhlTckoe61T2XgNTonCNF38ouU6mImqq/KmO07yO\ncE0J2ZSsTa/vtO7ZuGen88DlcL5g4iM6/1P5wIjahx7dyoj6Wa86d0A5919jFSbjWo1xlrk/okaZ\nah1SkcB3ScgQU/JQkYOjJEzJOV0rhK3ThzacqXeS567lypbFrszJTeSPyB3FPfvHmyRlEf5plJqQ\nWO4oMavKOvLl8hKTvKNkrQP2g8nMZFtjR75SB7cToV/U4a7thGhhWwork8FkbCfEryIC01flK9kj\nZO1dkbGjMkfLq/TknDElaU/lDO7Z6TxwDtQDv8xnP8JyR4lZVZbp6j+2mJAhJnlHyNokcuX62OVP\n1gFI0HJc2J+qul1/qzWS6yeWTzDxp5PF+yUk4QgRO/PIdpxJvlYJmrKnkp2Ou2ujK7+EuF2Ce/aP\nN0HK9n2//lV84IEHHngmuGen88AhWB/5rhZGDzzwwAPvAvfsH2+ClD3wwAMPPPAK+37fP2R+4IEH\nHnjggSO4d//4IGUPPPDAAzeGe3Y6DzzwwAP/f3v37ypHFYYB+P0MqE26FKIGkiIWaiOI/4GYKmks\nUtor1tpqZ2Nlk8I6WF5sBAtLNbc1ELho4SW9nUrks8gmLLL317DLHg/PA1vM7DkHtnp558zswFIz\n56NSBjCYmUMHAJaaOR9Pfk07AAAAO2enDGAwM18JBIClZs5HpQxgMDOHDgAsNXM+KmUAA5n936UA\nYInZ81EpAxjMzKEDAEvNnI9KGcBgZg4dAFhq5nxUygAGM3PoAMBSM+ejUgYwmJlDBwCWmjkflTKA\ngcz+IDMALDF7Pnp5NMBgngbPeT/nUVU3q+phVR1V1SenjHu/qrqq3l479+lq3sOqeu+iawLANlw0\nH8+TkaPko50ygMFs+0pgVV1K8lWSd5McJ7lfVQfd/eA/4y4n+TjJT2vnXk9yJ8kbSV5O8n1Vvbb6\n+sw1AWBbZs5HO2UAg9nBTtk7SY66+9fu/jvJvSS3N4z7PMkXSf5cO3c7yb3u/qu7f0tytFrvvGsC\nwFbsYKdsmHxUygAGs4NS9kqS39eOj1fnnqmqt5Jc7e5vzzn3zDUBYJt2UMqGyUe3LwKM5bskVy44\n58WqOlw7vtvdd9eOa8OcZ0lVVc8l+TLJBxvGnTR300W9eZ/ABmDfluRjcnpGDpOPShnAQLr75g6W\nPU5yde341SSP1o4vJ3kzyQ9VlSQvJTmoqltnzD1tTQDYmtnz0e2LAPO7n+RGVV2vqufz5MHkg6df\ndvcf3X2lu69197UkPya51d2Hq3F3quqFqrqe5EaSn89aEwD+B4bJRztlAJPr7sdV9VGe3PpxKcnX\n3f1LVX2W5LC7TwyL1bhvkjxI8jjJh939T5JsWnPXvwUAtmWkfKyZX8IGAAAwOrcvAgAA7JFSBgAA\nsEdKGQAAwB4pZQAAAHuklAEAAOyRUgYAALBHShkAAMAeKWUAAAB79C8bVwepo+i5nQAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.stats import multivariate_normal\n", "\n", "H, W, NLABELS = 400, 512, 2\n", "\n", "# This creates a gaussian blob...\n", "pos = np.stack(np.mgrid[0:H, 0:W], axis=2)\n", "rv = multivariate_normal([H//2, W//2], (H//4)*(W//4))\n", "probs = rv.pdf(pos)\n", "\n", "# ...which we project into the range [0.4, 0.6]\n", "probs = (probs-probs.min()) / (probs.max()-probs.min())\n", "probs = 0.5 + 0.2 * (probs-0.5)\n", "\n", "# The first dimension needs to be equal to the number of classes.\n", "# Let's have one \"foreground\" and one \"background\" class.\n", "# So replicate the gaussian blob but invert it to create the probability\n", "# of the \"background\" class to be the opposite of \"foreground\".\n", "probs = np.tile(probs[np.newaxis,:,:],(2,1,1))\n", "probs[1,:,:] = 1 - probs[0,:,:]\n", "\n", "# Let's have a look:\n", "plt.figure(figsize=(15,5))\n", "plt.subplot(1,2,1); plt.imshow(probs[0,:,:]); plt.title('Foreground probability'); plt.axis('off'); plt.colorbar();\n", "plt.subplot(1,2,2); plt.imshow(probs[1,:,:]); plt.title('Background probability'); plt.axis('off'); plt.colorbar();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run inference with unary potential" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can already run a DenseCRF with only a unary potential.\n", "This doesn't account for neighborhoods at all, so it's not the greatest idea, but we can do it:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:34.645364", "start_time": "2017-02-13T23:34:34.349071" }, "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhEV44E0f98n0MIQFeMBNL/fNdDCEc84Dbfq5jybPEEoqzxDOMUcas8N9NVmGcA75L0Zmk/tscgzh\nnPFgmm3uv8kwhNKUMYbjZwjniAfQ/HBfjpchlFSeIZwTjiDmj/t0fAzhHPCAkdbGEEpTzJPceBjC\nGebvC9bgPh49QyjNAGM4WoZQUnmGcEY5QqjHfT46hnAGeUBIw2UIpRniSXA0DOGM8UCQhs8QSjPG\nk+HwGUJJ5RnCGeJIQBoNQyjNIE+Kw2UIZ4Q/+FrIn4nhMYSSyjOEM8AzvzRahlCaYZ4kh8MQSirP\nEE45z/jS6BlCacZ5slw7QyipPEM4xTzTS+NhCCWVZwgllWcIpTngbZS1MYSSyjOEU8ozvDQ+hlBS\neYZQUnmGUJoT3k7ZfYZQUnmGUFJ5hlBSeYZwCnmvRxovQyipPEMoqTxDKKk8QyipPEMoqTxDKKk8\nQyipPEMoqTxDKKk8QyipPEMoqTxDKKk8QyipPEMoqTxDOIUyc9KLIJViCCWVZwgllWcIpTnhLZXd\nZwgllWcIJZVnCCWVZwinlPd7pPExhJLKM4TSHPAKYm0MoaTyDOEU8ywvjYchlFSeIZRmnFcOa2cI\nJZVnCKecZ3tp9AyhpPIMoTTDvGIYDkM4A/xhl0bLEM4IY6iF/JkYHkMozSAjOFyGUFJ5hnCGOAqQ\nRsMQSjPGE+LwGcIZ40EgDZ8hlGaIJ8LRMIQzyINBGi5DKM0IT4CjYwhnlAeFNDyGUJoBnvhGyxDO\nMA8OaTgM4YwzhvPPfTx6hnAOeKDML/fteBhCaUoZwfExhHPCg0bafYZQmkKe2MbLEM4RD5754H4c\nP0M4ZzyIpNUzhHPIGM4u991kGMI55QE1WzLTfTZBhnCOeWBJK2MIpQnzhDV5hnDOeZBNN/fPdDCE\nBXiwTSf3y/QwhEV40E0X98d0WTfpBdD49A6+iJjwktRlAKeTI8KCPBgnw+0+vQxhUR6U0uMMYWHG\ncHzc1tPNEBbnATpa/ouR2eCXJfJLlBEwfrPFEaEe4+hlONyGs8cQahceyLvHE8nsMoQayANalXiP\nUIvy3uHyPGHMB0eEWpaXfIO5TeaHI0KtmCPExgDOH0OoVasYROM33wyhdlt/HOY1igawBu8Raijm\nLRjeF63FEaGGZtZHiIavLkOokVgYlWkNo/ETGEKNyTSE0ehpMYZQE7FUlNYSSWOn3WEINXWMmcbN\nb40llWcIJZVnCCWVZwgllWcIJZVnCCWVZwgllWcIJZVnCCWVZwgllWcIJZVnCCWVZwgllWcIJZVn\nCCWVZwgllWcIJZVnCCWVZwgllWcIJZVnCCWVZwgllWcIJZVnCCWVZwgllWcIJZVnCCWVZwgllWcI\nJZVnCCWVZwgllWcIJZVnCCWVZwgllWcIJZVnCCWVt27SC9CJSS+ApLocEUoqzxBKKs8QSirPEEoq\nzxBKKs8QSirPEEoqzxBKKs8QSirPEEoqzxBKKs8QSirPEEoqzxBKKs8QSirPEEoqzxBKKs8QSirP\nEEoqzxBKKs8QSirPEEoqzxBKKu//AfgJZE60nAzlAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inference without pair-wise terms\n", "U = unary_from_softmax(probs) # note: num classes is first dim\n", "d = dcrf.DenseCRF2D(W, H, NLABELS)\n", "d.setUnaryEnergy(U)\n", "\n", "# Run inference for 10 iterations\n", "Q_unary = d.inference(10)\n", "\n", "# The Q is now the approximate posterior, we can get a MAP estimate using argmax.\n", "map_soln_unary = np.argmax(Q_unary, axis=0)\n", "\n", "# Unfortunately, the DenseCRF flattens everything, so get it back into picture form.\n", "map_soln_unary = map_soln_unary.reshape((H,W))\n", "\n", "# And let's have a look.\n", "plt.imshow(map_soln_unary); plt.axis('off'); plt.title('MAP Solution without pairwise terms');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Pairwise terms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The whole point of DenseCRFs is to use some form of content to smooth out predictions. This is done via \"pairwise\" terms, which encode relationships between elements." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add (non-RGB) pairwise term" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, in image processing, a popular pairwise relationship is the \"bilateral\" one, which roughly says that pixels with either a similar color or a similar location are likely to belong to the same class." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:36.795324", "start_time": "2017-02-13T23:34:36.608170" }, "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "NCHAN=1\n", "\n", "# Create simple image which will serve as bilateral.\n", "# Note that we put the channel dimension last here,\n", "# but we could also have it be the first dimension and\n", "# just change the `chdim` parameter to `0` further down.\n", "img = np.zeros((H,W,NCHAN), np.uint8)\n", "img[H//3:2*H//3,W//4:3*W//4,:] = 1\n", "\n", "plt.imshow(img[:,:,0]); plt.title('Bilateral image'); plt.axis('off'); plt.colorbar();" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:37.782159", "start_time": "2017-02-13T23:34:37.302936" }, "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n5WAHAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create the pairwise bilateral term from the above image.\n", "# The two `s{dims,chan}` parameters are model hyper-parameters defining\n", "# the strength of the location and image content bilaterals, respectively.\n", "pairwise_energy = create_pairwise_bilateral(sdims=(10,10), schan=(0.01,), img=img, chdim=2)\n", "\n", "# pairwise_energy now contains as many dimensions as the DenseCRF has features,\n", "# which in this case is 3: (x,y,channel1)\n", "img_en = pairwise_energy.reshape((-1, H, W)) # Reshape just for plotting\n", "plt.figure(figsize=(15,5))\n", "plt.subplot(1,3,1); plt.imshow(img_en[0]); plt.title('Pairwise bilateral [x]'); plt.axis('off'); plt.colorbar();\n", "plt.subplot(1,3,2); plt.imshow(img_en[1]); plt.title('Pairwise bilateral [y]'); plt.axis('off'); plt.colorbar();\n", "plt.subplot(1,3,3); plt.imshow(img_en[2]); plt.title('Pairwise bilateral [c]'); plt.axis('off'); plt.colorbar();" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Run inference of complete DenseCRF" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can create a dense CRF with both unary and pairwise potentials and run inference on it to get our final result." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2017-02-13T23:34:41.710023", "start_time": "2017-02-13T23:34:39.826819" }, "collapsed": false, "deletable": true, "editable": true, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\nfVozQtzK/XyS+46/wFeqqoOT3C/D6eU756rroP8w8z9paVlV9eQabn7du6r2GC8H2DfDpyx9OkOB\n+c2q2rOG7wU5Osmb5izqC0kOq6o7V9W1kzxn0fRzMv/m4AVvTPKMqrphDTfAPivzr2dfiU9muFzg\nrklO6e5TM47kZBilm+ecJIcsKro7pQYHV9WzM1xT//Rx0nuS3KqqnjDuzz2r6vCquu0Klnl4Vd1t\nvNb+0iTfS3LFONL3F0leXFU3Guc9uKoeOL71hAwF8O013Bh8jaq6QVU9vaoessTqXpLk/lW1qW/Q\nZaepTWrT7DLVJjYS9Ul9ml2m+rSGhLgV6u5/7+7Pzpn0hCSf7+4PdffZC48kL01yxxo/dWcVLkvy\nogynor+d5H8k+W/d/dXu/o8kD8tws+a3k7w8yTHd/aU57f1ykudmGL34twzXUs96VZLb1XBd8Lvm\ntOP3MlyP/cUk/5jkc+NrqzYW788lOXXchmS4affr3X3uEm976/jveVX1uZ1Zb5KDquqSDNecfybJ\nHZIc2d0fGtt1cYabbB+dYaTs7Ax/QK61gmXvl6HgfCfD5RLn5aoRn9/KcDPtp6rqogw/g1uP6/x+\nhht0v5ThxuCLkpyS4ZT/p+etaLys5HVJnrnyTWerUJvUpkXUJjYM9Ul9WkR9WkPVvavOvAIAALDW\nnIkDAACYECEOAABgQoQ4AACACRHiAAAAJkSI22Cq6nlV9eT1bgerU1V3rKpPrnc7YC2pR5tTVb2j\nqh603u2AnaU2bU5V9cdV9Uvr3Y6pEOI2kKq6YZJjkvz5+PyQquqqumTmseqPSq2q51TVzn5PyZqp\nqpOq6viZ50dW1Xeq6tHj866qQ9d4nfeoqlOq6uKq+mJV3XOZee9TVX9bVRdW1Wlzpt+5qk4ep59e\nVc9amNbdX0xyQVUdvZbth/Uypx7dvao+XFXnV9W3quqtVXWTmfmrqv6wqs4bHy+oqtqJ9Z5WVT+1\ndluyejO1d4/xeVXVn1bVl8bvLjquqhZ/9PjVXWdV1W9X1Teq6qKqelNV7bfEvDeqqjdW1ZljPfpE\nVd1tZvpDq+rj48egn11Vf1FV+84s4vlJfn8t2w+7y5za9LhF/aTvjsfvXcbpz6mqyxfNs9x3vS21\nXrVpB7VpnP9vx78RF1XVF6rq4Yum/2pVfW2c/tlF/bI/SvLbVbXXWm7DZiXEbSzHJXlfd1+26PXr\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d = dcrf.DenseCRF2D(W, H, NLABELS)\n", "d.setUnaryEnergy(U)\n", "d.addPairwiseEnergy(pairwise_energy, compat=10) # `compat` is the \"strength\" of this potential.\n", "\n", "# This time, let's do inference in steps ourselves\n", "# so that we can look at intermediate solutions\n", "# as well as monitor KL-divergence, which indicates\n", "# how well we have converged.\n", "# PyDenseCRF also requires us to keep track of two\n", "# temporary buffers it needs for computations.\n", "Q, tmp1, tmp2 = d.startInference()\n", "for _ in range(5):\n", " d.stepInference(Q, tmp1, tmp2)\n", "kl1 = d.klDivergence(Q) / (H*W)\n", "map_soln1 = np.argmax(Q, axis=0).reshape((H,W))\n", "\n", "for _ in range(20):\n", " d.stepInference(Q, tmp1, tmp2)\n", "kl2 = d.klDivergence(Q) / (H*W)\n", "map_soln2 = np.argmax(Q, axis=0).reshape((H,W))\n", "\n", "for _ in range(50):\n", " d.stepInference(Q, tmp1, tmp2)\n", "kl3 = d.klDivergence(Q) / (H*W)\n", "map_soln3 = np.argmax(Q, axis=0).reshape((H,W))\n", "\n", "img_en = pairwise_energy.reshape((-1, H, W)) # Reshape just for plotting\n", "plt.figure(figsize=(15,5))\n", "plt.subplot(1,3,1); plt.imshow(map_soln1);\n", "plt.title('MAP Solution with DenseCRF\\n(5 steps, KL={:.2f})'.format(kl1)); plt.axis('off');\n", "plt.subplot(1,3,2); plt.imshow(map_soln2);\n", "plt.title('MAP Solution with DenseCRF\\n(20 steps, KL={:.2f})'.format(kl2)); plt.axis('off');\n", "plt.subplot(1,3,3); plt.imshow(map_soln3);\n", "plt.title('MAP Solution with DenseCRF\\n(75 steps, KL={:.2f})'.format(kl3)); plt.axis('off');" ] } ], "metadata": { "anaconda-cloud": {}, "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.6.0" } }, "nbformat": 4, "nbformat_minor": 1 }