{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ITU-T G.227 実数 FIR フィルタ\n", "\n", "まず、ITU-T G.227 https://www.itu.int/rec/T-REC-G.227-198811-I/en\n", "\n", "記載の伝達関数を周波数特性としてグラフ化。普通のフィルタのグラフと違ってyはゲインではなくロスなので注意\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from scipy import signal\n", "import json\n", "\n", "def g227(niq, size):\n", " f = np.linspace(0, niq, size)\n", " p = 1j * f / 1000\n", " numerator = 18400 + 91238*p**2 + 11638*p**4 + p*(67280 + 54050*p**2)\n", " denominator = 400 + 4001*p**2 + p**4 + p*(36040 + 130*p**2)\n", " loss = np.abs(numerator / denominator)\n", " dB = 20 * np.log10(loss)\n", " # adjust gain\n", " dB -= np.min(dB)\n", " loss = np.power(10, dB / 20)\n", " return f, loss" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0\n" ] }, { "data": { "image/png": "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hfET/DKtcYuIxKGGrBF7afXq1RQWFnLTTTcdfa68vJzCwkL69u0LcPS1s846i+LiYsrKypg9ezZDhw6lV69eANxzzz088MADJ13WNddcQ0ZGBgBDhw5l3bp1XHzxxdxxxx3ccccdIeUtLi5m7Nix/PnPf6Zz584AXHnlldx4441kZmaycOFCLrvsMqZOnUq/fv2orq5myZIlTJ48mYqKCi699FLy8vJCXl5jqLhFRMQzzjnatWvHokWLTjhNbdkmJycDgbX0xqidT+28aufz/PPP8/vf//647/nZz37GjTfeCMCuXbu46qqr+MlPfsINN9xwdJp27dodvT9kyBDOPfdc5syZQ79+/cjLy+P6668nPT2d9PR0xo4dy5w5czwtbm0qFxERz/Tp04dmzZrxwgsvHH1u5cqVHDx48vH3M888kwULFrBu3ToAxo8ff8zrLVq04MCBAyFluOOOO1i0aNFxb7WlvWfPHsaOHct9993Hvffee8z7i4qKjt7ftGkTs2bNYuDAgQDccsstfPjhhzjnqKys5KOPPmLQoEEh5WosFbeIiHgmJSWFt956iwkTJjBw4ED69+/Pd77znWMO5TqenJwc/vKXv3D55ZczZMgQdu3aRWpqKs2aNQPghz/8IWPGjGHw4MHs37+/yTkfffRR1q5dy1NPPXV0/Pvvf/87EBhT79+/P4MGDeLqq6/mv/7rvxgyZAgQ2MzfoUMHTjvtNAYPHkz//v2/VPzhZl4PoofD8OHD3bx58/yOIQli2rRpjBo1KmrmE2vLjgXx+N0UFhbSr1+/sM830upe6KPu/b///e88++yzTJ8+PSLL9kJDviMzm++cG3681zTGLSIiUelPf/oTr7zyClVVVbRp04a//vWvfkeKCipuERGJSg899BAPPfSQ3zGijsa4RUREYoiKW0REJIaouEVERGKIiltERCSGqLhFRCQuvfHGG8yZM6dR733uuee4/vrrw5woPFTcIiISl5pS3NFMh4OJiMSj9x6E7Uu9mXfH0+GyR0852ezZs3nwwQePnt7017/+NVlZWXz9619n3rx5tGrVirvvvpucnBweffRR7rrrLiBwYZLdu3dzwQUX8MQTT5CWlsbBgwd54IEHWLJkCWVlZYwePZrf//73JCcnU1RUxPe//33WrFkDwM0338zQoUOZNGkSU6ZM4ZlnnuGBBx7gjjvuYPz48fz5z3+mqqqKVq1a8eSTT9KnTx8qKiq4//77+eyzz2jXrt3RM6NFIxW3iIiE3f79+/nWt77Fu+++S6dOnSguLmbEiBEsW7aMO+64g3vvvZerr76a1atXH3NilXnz5jFr1iwyMjK4/PLLefrpp7nvvvt44IEHuOCCC3jmmWeoqanh1ltv5W9/+xvf+MY3uO2227j88suZOHEiALt376Zdu3ZcffXVDB8+nPvuuw+Azz77jJdffplPP/2U9PR03nvvPe655x5mzJjBU089xcaNG1mxYgWVlZWMHDmS/Px8Pz66U1Jxi4jEoxDWiL00c+ZMNmzYwGWXXXb0OTNj7dq1PPTQQ1x00UX88Ic/ZP78+aSkfFFF1113HVlZWQDceeedTJw4kfvuu49JkyYxZ84cfve73wFw+PBhcnNzKS0tZebMmUyePPnoPOpezauut956i8WLF3PmmWcCgSuX7du3D4CpU6dyyy23kJqaSmpqKrfddpunp1dtChW3iIiEnXOOgQMH8umnn37ptX379rF582bS09PZu3cveXl5Ic3vjTfeoHv37sc8X1pa2qBM99xzD7/+9a9Dfk800s5pIiISdueccw5r1qxh6tSpR5+bO3cuzjnuvvtuvv71rzN+/HhuuukmSkpKjk7zxhtvcOjQIaqqqnjhhRcYM2YMAFdffTWPPvoo1dXVQGBz+IYNG8jKyuKcc87hscceOzqP3bt3A9CyZctjLv151VVX8fzzz7N161YAqqurmT9/PgBjxoxhwoQJVFVVceTIEf75z3969Mk0nYpbRETCrnXr1kyaNIlf/epXDBo0iH79+vHwww/z2GOPUVZWxk9/+lMuvPBCbrjhBsaNG3f0fUOHDuWSSy6hX79+dO3a9ehrf/jDH0hOTmbQoEGcfvrpXHrppUevk/3iiy8yY8YMBgwYwKBBg3j22WcBuP322/nnP//J4MGDef755xk5ciSPPPIIV199NYMGDWLAgAG8+eabAIwbN46uXbvSr18/xowZw4gRIyL8iYVOm8pFRMQTI0aMYNq0aV96/oEHHjh6/z//8z+PeW3AgAE899xzX3pPixYtePLJJ4+7nC5duvDGG28cd/nLly8/5rlbb72VW2+99UvTpqWl8ac//cnTy3qGi9a4RUREYojWuEVEJCo899xzx4x3y/FpjVtEJE445/yOICcQzu9G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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sr = 44100\n", "firlen = 513\n", "xticks = [33, 50, 100, 500, 1000, 5000, 10000]\n", "\n", "f_m, loss_m = g227(sr/2, 2**13)\n", "f, loss = g227(sr/2, int(firlen/2))\n", "\n", "print(np.min(20 * np.log10(loss)))\n", "plt.figure(figsize=(8,10))\n", "plt.title(\"Frequency response\")\n", "plt.xscale('log')\n", "plt.grid(True)\n", "plt.ylabel('Composite loss')\n", "plt.xlabel('Frequency')\n", "plt.ylim((0, 70))\n", "#plt.xlim((33, 10000))\n", "plt.xlim((1, sr/2))\n", "plt.xticks(xticks, xticks)\n", "plt.plot(f, 20 * np.log10(loss), label=\"length=%d\" % int(firlen/2))\n", "plt.plot(f_m, 20 * np.log10(loss_m), label=\"expected\")\n", "plt.legend(bbox_to_anchor=(1, 1), loc='upper right', borderaxespad=1, fontsize=11)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 要求の周波数特性をつくる\n", "\n", "実数フィルタにしたいので左右対称にする" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "512\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "gain = 1.0/loss\n", "\n", "gain = list(gain) + list(gain[::-1])\n", "print(len(gain))\n", "plt.figure(figsize=(10,5))\n", "plt.title(\"Frequency response\")\n", "plt.grid(True)\n", "plt.ylabel('Composite loss')\n", "plt.xlabel('Frequency')\n", "plt.plot(gain)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# FIR\n", "\n", "IFFT して有限インパルス応答 (FIR) を得る。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "512\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fir = np.fft.fftshift(np.fft.ifft(gain))\n", "print(len(fir))\n", "x = np.linspace(0, len(fir), len(fir))\n", "plt.figure(figsize=(15,5))\n", "plt.title(\"Impulse response\")\n", "plt.grid(True)\n", "plt.ylabel(\"Coeffs\")\n", "plt.xlabel(\"Samples\")\n", "plt.plot(x, np.real(fir), label=\"real\")\n", "plt.plot(x, np.imag(fir), label=\"imag\")\n", "plt.legend(bbox_to_anchor=(1, 1), loc='upper right', borderaxespad=1, fontsize=11)\n", "plt.show()\n", "fir = np.real(fir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# FIR の周波数特性\n", "\n", "求めた FIR の周波数特性を評価する。freqz を使う。\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "12.674339983109126\n", "Max Error 6.3715686374777505 dB at 43.06640625 Hz\n", "MSE 0.1451089475236209 dB\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAApwAAAJcCAYAAABUo3QRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd3gUVRfA4d9NDwmEJjWAIEiV3kQ6KOUTEJEiIF1QigKKgCIdRFGKSlFUqogo0qQIChGR3qX3EkB6IIQQUu73xx3iGhMIsCWbnPd59snuzOycM5NNcnJn7r1Ka40QQgghhBCO4uHqBIQQQgghROomBacQQgghhHAoKTiFEEIIIYRDScEphBBCCCEcSgpOIYQQQgjhUFJwCiGEEEIIh5KCUwiRqimlCiuldimlwpVSbySyfoVSqr0L8uqglFrv7LipiVKqmFJqm1JKuTqXu5RSIUqpLnbYzxalVHF75CRESuDl6gSEsCel1EkgOxBrs/hJrfU512QkUoB3gLVa69KJrdRaN3ByPsJ+RgAf69Q5oPTHwHCgmasTEcIepIVTpEaNtNaBNo//FJtKqTT1z1ZaO94E8gH7XJ2EK6Tm77tSKidQC1jk6lwcZAlQSymVw9WJCGEPUnCKNEEp9bhSSiulOiulTgNrrOWVlVIblFJhSqndSqmaNu/Jr5T63boUu1op9blSao61rqZSKjRBjJNKqbrWcw+l1ACl1DGl1BWl1HylVOYEubRXSp1WSl1WSr1nsx9PpdS71nvDlVLblVJ5lFKTlFKfJIi5RCnVJ4lj1kqpHkqpI8ARa1kR61iuKqUOKaVa2GzfUCm134p5Vin1tu2xWjldto6zjc37gpRSs5RSl5RSp5RSg5RSHta6Dkqp9Uqpj5VS15RSJ5RSDWze20EpddyKeSLBfjsppQ5Y7/tFKZXvHt/fxkqpfdb3MUQpVdRavgZTlHyulLqplHoykffGXwK18vlTKTXe2tdxpVQVa/kZpdRF28vvSqkZSqmp1jkNtz4v+RJ8n70Si5UgB2XFvKiUuqGU+kspVcJa52udv9NKqQtWPP8kzoNt/leAofc6l/eJm+SxWeurKKW2KqWuW1+rJDjOEVYu4UqpVUqprNY6P6XUHGV+LsKs92a3+Sx9rZQ6b30GRyqlPJP4tj8L7NBa37aJm0cp9ZP1WbyilPrcWu5hfS5PWcc6SykVlOD71NH6Hl9TSr2mlKqglNpj5fh5Iuf4c+vYDyql6iSR473OfRVlfp7yWK9LWdsUAbCOaztQL6l9C+FWtNbykEeqeQAngbqJLH8c0MAsIADwB3IDV4CGmH++nrVeP2a9ZyMwDvAFqgPhwBxrXU0gNKnYwJvAJiDYev8XwHcJcplm5VEKiAKKWuv7AX8BhQFlrc8CVATOAR7WdlmBW0D2JM6FBlYDma04AcAZoCPmdpoywGWgmLX9eaCa9TwTUNbmWGNszkUNIAIobK2fBSwG0lvHdhjobK3rAEQDrwKewOvWMSgrnxs2+8kJFLeeNwGOAkWtXAcBG5I4zietfJ4FvDGX0I8CPtb6EKDLPT4z8eutfGOsc+QJjAROA5OsY3/O+hwEWtvPsF5Xt9ZPBNYn+D573SPW3W3rYYqLjNa5KQrktNaNx7R2ZbbO8VLggySO5W7+vazz5n+vc3mfuPc6tszANeAVa58vW6+z2BznMet742+9HmOt62YdQzrrHJcDMljrFmJ+VgKAbMAWoFsSxzoWmGTz2hPYbZ2vAMAPqGqt62SdgwJAIPATMDvB92mq9Z7ngNuYltNsmN8TF4EaCc5xH8znrSVwHcicyPf4np9jYBTmn19/zM98zwTH+CkwztW/V+UhD3s8XJ6APORhzwem6LsJhFmPRdbyu39UCths2//uHx2bZb8A7YG81h+VAJt1c0l+wXkAqGOzLiem8PKyySXYZv0WoJX1/BDQJInjOwA8az3vCSy/x7nQQG2b1y2BPxJs8wUwxHp+GlMMZEiwTc1EzsV84H3MH/k7WEWrta4bEGI97wActVmXzsorB6YoCMPco+afIOYKrKLVeu2BKa7zJXKc7wPzE2x7FqhpvY4vAJI4T/HrrXyP2Kx7yso3u82yK0Bp6/kMYJ7NukDM/cN5eLCCszamUK+M9Q+FtVxhiuknbJY9DZxI4lg6AKeTey6TipuMY3sF2JJg+41AB5vjHGSzrjuw0nreCdgAlEzw/uyYf7z8bZa9jLn/NrFjnYZVxNqcl0u259tm3W9Ad5vXhfnvz2PuBN/jljavFwC9bc7xOUAl+Pl9JZHv8T0/x5iCdTum2Fxpu09r/Sjgm6Q+u/KQhzs95JK6SI1e0FpntB4vJFh3xuZ5PqC5dcksTCkVBlTFFIe5gGta6wib7U89QA75gIU2+z2A+WOd3Wabv22e38L8QQfzB/1YEvudCbS1nrcFZt8nj4THWynB8bbBFH9gCr+GwCnr8unTNu9N7FzkwrSyevPvc3MK0yp0V/xxaq1vWU8Drf21BF4Dziullt29nGjlOtEmz6uY4st2v3flso2vtY6zjjuxbZPjgs3zSGufCZcF2ryOP8da65tWrrkeJKDWeg3wOaYl9aJS6kulVAbgMUyRvt3mXKy0liflTILXSZ7Le8S937H965xbkvy+8+/P92zMP3bzlFLnlFIfKaW8rTy9MZ+Fu7l+gWllTMw1TIvvXXmAU1rrmES2TZjvKUyxafvzmPB7fK/v+VmttU6wv8S+5/f8HGutozGFfQngkwT7xDq+sET2K4TbkYJTpDW2v9DPYFo4M9o8ArTWYzCXlzMppQJsts9r8zwCUwgA5r5L/l0EnAEaJNi3n9b6bDJyPAM8kcS6OUATpVQpzGW6+3WYSHi8vyfIKVBr/TqA1nqr1roJ5g/8Ikwr5l2JnYtzmEvy0Zg/rLbrknOcaK1/0Vo/iynyD2Jare7m2i1Brv5a6w2J7OacbXyllMIUH8nKwQ7y2MQOxFxuPof5jIDN54R/ivv/0Fp/qrUuBxTDXIruhzm/kZhbDe6ehyCtdWBS++Hf33O4z7lMIu79ju1f59ySrO+71jpaaz1Ma10MqAI8D7Sz8owCstrkmUFrndTQQHusfG2PM69KvKNUwnzvXsG4kMi2yZHb+pzZ7i+xkTDuee6VUrmBIcB04BOllG+C9xfF3CYghNuTglOkZXOARkqpesp01PFTpoNMsNb6FLANGKaU8lFKVQUa2bz3MOCnlPqf1TozCHOf211TgVE2HQQeU0o1SWZeXwEjlFKFlFFSKZUFQGsdCmzFtBIt0FpHPsDx/gw8qZR6RSnlbT0qKKWKWsfYRikVZLW63ADiErz/7rmohikSftBax2IK01FKqfTW8fbFnNt7UkplV0o1sQrZKMytEHdjTgUGKmscQqszSfMkdjUf+J9Sqo71vXjL2l9ixakjNFRKVVVK+WCG6dmktT6jtb6EKcDaWp+vTiTxj4T1fahk5R+BuYcwzmqtnQaMV0pls7bNrZR6kI4kSZ7LpOLe79iA5ZjPUmullJdSqiWmYP35fskopWoppZ6y/km7gfmHJU5rfR5YhSm8MijT0ecJpVSNJHa1GiirlPKzXm/B/KM4RikVYP08P2Ot+w7oo0xHwEBgNPB9Eq2hyZENeMP6GWqOKQyXJ7Ldvc69wrRufg10tnIfcfeN1nGVs45TCLcnBadIs6w/nE2AdzH3fp3BtO7c/bloDVTCXAYbgukcc/e91zH3pX2FKSoiANte6xMxHT1WKaXCMR2IKiUztXGYImoV5g/y15hOBXfNxNxbeL/L6f+itQ7HdIhohWmN+Rv4kH8K5VeAk0qpG5jL3G1s3v435hLmOeBb4DWt9UFrXS/M8R8H1mPudf0mGSl5YIrTc5hzXAPTqQit9UIrt3lWPnuBRMfL1Fofwtxe8BmmRbARZmisO8nIwR7mYj4fVzEFQlubda9iPlNXgOIkXQRnwBSW1zCXZ69gOsWAudf4KLDJOhe/Yu5BTJb7nMt7xU3y2LTWVzD/dLxlvecd4Hmt9eVkpJQD+BHz2T4A/M4/n+V2gA+w38rpR0zrd2LHdQHT4aaJ9ToW870viLkfORRzywaYz+NsYB1wAlNY90pGrknZDBTCfN5GAS9Z5yRhjvc6929gCtf3rUvpHYGO1j90WMcSomUMYZFKqP/eMiKESIxSaihQUGvd9n7bOjiP6pgWxHyJ3PPliHg1MZ2lgh0dy90opWZgOo8NcnUu9uYOx6aUKob5B6yiM34WrJgdMJ2Cqjo4zmZMh6O9jowjhLOk2kGBhUiNrEufbwJfOesPrBApldZ6P1DB1Xk4gtY6uVdEhHALckldCDehzGDmYZhLjBNcnI4QQgiRbHJJXQghhBBCOJS0cAohhBBCCIdK1fdwenh4aH//RKccFiLNiYuLw8PDMf9jOnLfjyKl5pXapOTznJJzS01S6nlOqXkl5datW1pr7T4JP4BUXXD6+/sTERFx/w2FSANCQkKoWbOm2+37UaTUvFKblHyeU3JuqUlKPc8pNa+kKKUeZGxlt5Iqq2ghhBBCCJFySMEphBBCCCEcSgpOIYQQQgjhUFJwCiGEEEIIh5KCUwghhBBCOJQUnEIIIYQQwqGk4BRCCCGEEA4lBacQQgghhHAoKTiFEEIIIYRDpeqZhoQQQgjxX9HR0YSGhnL79m277C8oKIgDBw7YZV/25Oq8/Pz8CA4Oxtvb22U5pBRScAohhBBpTGhoKOnTp+fxxx9HKfXI+wsPDyd9+vR2yMy+XJmX1porV64QGhpK/vz5XZJDSiKX1IUQQog05vbt22TJksUuxaZInFKKLFmy2K0V2d1JwSmEEEKkQVJsOp6c439IwSmEEEIIIRxKCk4hhBBCCOFQUnAKIYQQwuUWLVpE0aJFKVOmDIcOHXJ1OsLOpOAUQgghhMt98cUXDB8+nJ07d1K4cOH45TExMS7MStiLDIskhBBCpHG9e8OuXQ///thYfzw9E19XujRMmHDv9/fp04c//viDQ4cOMXnyZEJCQhgyZAjLli2jfv36jBgxgg8//JAFCxYQExND7ty5mTZtGjly5OD69et07tyZvXv3kiNHDvLkyUP27Nn5+OOPadmyJefOnQPg6tWrZMmShZ07dz78gYqHJgWnEEIIIVxq/Pjx7Ny5k7fffpvnn38epRT+/v5s3boVgDlz5nDs2DE2bdqEh4cHU6ZM4a233uLbb79l+PDhZMiQgYMHD3L58mXKli1LixYtAPj+++9Jnz49169fp1q1agwePNiVh5mmScEphBBCpHH3a4G8n/DwSLsPsN6+ffv450uWLGHbtm2ULVsWMJfZg4KCAFi7di2fffYZAFmzZuXFF1/8136io6N58cUX6dixI02bNrVrjiL5pOAUQgghRIoTGBgY/1xrzaBBg+jUqdMD76dLly4UL16cPn362DM9l1FK1QcmAp7AV1rrMS5OKVmk05AQQgghUrTGjRszefJkrl27BkBUVBS7d+8GoHbt2kyfPh2AK1eusHDhwvj3jR49mrCwMCY8ahNuCqGU8gQmAQ2AYsDLSqlirs0qeVJ1C+ftwNtUn179vtslZyYARfJmC0jt+0rurAkKhVLKOV+dGeseXz2UB57K03z1MF9TyjIvDy/C7oRxLfIaXh5eeHt64+XhhafylJkwhBAp3iuvvMLly5epUaMGAHFxcXTv3p1SpUrx/vvv06lTJ4oUKUKOHDmoXv2fv/tjxozhySefjL8UX7hwYb7//nuXHIOdVASOaq2PAyil5gFNgP0uzSoZUnXBiQYvj3sfokbffzf6/tvc3df9tn2QfdkzL3vsKzn7ubuvu+ciNX51axv/u8jLwyv+4e3h/a+C1HbZvZZfv3adHBdzxC/39vTG19PXPLz++erj6fNIy/y8/PD19JUiWYhUKCQkJP55Yn+T+vTpk+hl8aCgIBYsWBD/eujQody8eROAGzdu2P3eUgfzUkpts3n9pdb6S5vXuYEzNq9DgUpOyewRpeqC0y/CjzXt17g6DZEKJVaMxuk44nQcsTr2n+dxsS5fFhsXS0xcDPsP7afAEwWIjosmJi6G6FjzNSYuJn7Zv5br+28TGRNJTFwMYVFhXL98PX67O7F3uBN7h6iYKKJio4iKibJbsa5Q+Hv7k8473b0fXum4cvEKK2NWJrlNBt8MpPdJb776mq9S0AohXChGa13e1Uk4QqouOIVwlLuX0pN5R0OKEHIzhJqVazpm3yEh1KyZ9L611sTExZgi1CpA735N7rK7XyNjIrkVfSv+Yfv6RtQN/r759z+vI2+w/O/lRMVGJftYvDy8/lOExr9OsDyzf2Yy+WUis39m89zfPPf38peiVQgXGTp0qKtTcKSzQB6b18HWshRPCk4hhMMppfD2NJfaAwhwWty7hXBsXOx/CtWIOxGE3wnnRtQNwqOsr7av7/yz/Nrta5y+fjp+m/Co8Hu22Pp4+vxThFoFaSb/TGT2y0yWdFnIFpAt/pE9IDvZArIR6BMoRaoQ4n62AoWUUvkxhWYroLVrU0oeKTiFEKmep4cngT6BBPoE3n/jZIjTcdy8c5Nrkde4GnmVa7etr9Zr22VXI69y5sYZdl/YzbXIa4TfCU90n/5e/v8UoYHZyZbO+hqQjVzpc5E7fW6CMwSTM31OfDx97HIcQgj3orWOUUr1BH7BDIv0jdZ6n4vTShYpOIUQ4gF5KA8y+GYgg28G8mXM90DvvRN7h4sRF+MfF25e+Od5hHkeeiOUHed3cDHiIjFx/51HOntAdoIzBJM7Q26C01tfMwSTO31u8gblJV/GfFKUCpFKaa2XA8tdnceDkoJTCCGcyMfTh+AMwQRnCL7vtlprrt2+xrnwc4TeCOXsjbPma7j5euLaCdafXs/VyKv/ep+H8iB3+twUyFSA/Jnykz9jfvPc+pojMIdcvhdCOJUUnEIIkUIppeLvBS2RrUSS292KvhVflJ4KO8Xxa8c5EXaC49eOs+rYKs6Fn/vX9n5efhTIVIAiWYtQOEthimQtEv88yC/I0YclRIq0aNEicuXKRcWKFR/4vTNmzODnn3/mxx9/dEBmqYMUnEII4ebSeaejYOaCFMxcMNH1kdGRnLp+ihPXTsQXo0euHmHfxX0sPriYWB0bv22OwBzxxWexx4pRMntJSmYvSWb/zM46HCFcYtGiRZQvX/6hCk5xf1JwCiFEKufv7R/fipnQndg7HL92nEOXD3Hw8kEOXTFf5++bz7Xb1+K3C84QbIrPbKYALZWjFE9mefK+k2sIN9G7N+za9dBv94+NBU/PxFeWLg3JmFpy8+bNDBgwgBs3bgAwfPhwAgMD6dKlC9u2bSMoKIiOHTuSPXt2xowZQ4cOHfD29mbfvn3xsxBNmjQJHx8fbty4Qd++fdm5cyfR0dHUqlWLcePG4enpydmzZ3njjTc4cuQIAC+//DJly5ZlyZIl/Prrr3z11Vf07duXdu3aMXPmTCZPnkxMTAxBQUFMmTKFwoULc+fOHXr16sWaNWvImjUrZcqUeehzl1bIbwohhEjDfDx94ovRJjSJX6615kLEBXb/vZs9F/aw5+Iedv+9m1XHVsV3ZPL19KVMzjLk1DkJzRxKhVwVKJSlEB7Kw1WHI9xUWFgYr732GsuXLydnzpycP3+eChUqsHfvXtq1a0fnzp1p3Lgxhw8fZtq0afHv27x5Mxs2bMDPz4+GDRvy5Zdf0rNnT/r27UuNGjUYP348AQEBtGnThm+++YZXX32Vtm3b0rBhw/jZiS5fvkzWrFlp3Lgx5cuXp2fPngD88ccfzJ8/n3Xr1uHr68uKFSvo1KkTf/75J1988QUnTpxg//79REdHU716dR5//HFXnDq3IQWnEEKI/1BKkSMwBzkK5qBewXrxy+/E3uHg5YPsubCHned3svXcVlaErmDhwoUABPkGUT5XeSrkqkCl4EpUzVuVrOmyuuowRHIlowXyXiLDwx9pCskNGzZw4sQJGjRoEL9MKcXRo0d57733qFu3Lm+99Rbbt2/Hy+uf0qVly5YEBprhztq3b8+CBQvo2bMnS5YsYcuWLYwdOxYPDw9u3bpFcHAwN2/eZMOGDaxevTp+H1mzJv75XLp0Kbt376ZSJTNzpNaaa9dMq//atWtp37493t7eeHt707ZtW9avX//Qx58WSMEphBAi2Xw8feLv62xbsi0Av639jWzFsrH13Fa2nN3C1nNb+Xjjx/EtoUWzFqV6vupUy1uNavmqkTcorysPQaRAWmtKlizJunXr/rPu2rVrnD59Gl9fX65evUrevPf//GitWbRoEY899ti/CuG7c6wnN6dOnToxfPjwZL9HJE2uewghhHgknsqTp7I/RacynZj6/FS2d91O+MBw/uj4B6Nrj+bxjI/z3d7vaLuwLfkm5OPxCY/zysJXmLlr5n960Iu0qUqVKhw5coS1a9fGL9u6dStaazp27EiXLl2YOXMmrVq1Ijz8n8kTfvjhByIiIoiJiWH27NnUrl0bgMaNGzNmzBhiY02HuMuXL3PixAkCAwOpUqUK48ePj9/H5cuXAciQIQPXr1+PX96oUSNmzZpFaGgoALGxsWzfvh2A2rVrM3v2bGJiYoiMjGTu3LkOOjOphxScQggh7M7Py4+qeasysNpAlrdZztV3rrKj6w4m1p9IhdwV+OXoL3RY3IHc43JTYnIJ+qzsw4ojK4i4E+Hq1IULZMqUiSVLljBs2DBKlSpF0aJFGTp0KOPHj+f27dv079+fOnXq0Lx5c7p27Rr/vgoVKvDcc89RtGhR8uTJE79uwoQJeHp6UqVKFZ566inq16/P2bNmyvE5c+bw559/UqJECUqVKsXXX38NwCuvvMLcuXMpXbo0s2bNonr16owaNYrGjRtTqlQpSpQoweLFiwHo2rUrefPmpWjRotSuXZsKFSo4+Yy5H6V10vMBu7uAgAAdESG/vISAf+YVd7d9P4qUmldq8zDnOU7H8deFv1h1bBWrj69m3al1RMVG4ePpwzN5nqHRk41oUqQJBTIVcHpuacGBAwcoWrSo3fYX/oj3cD6MDh06/KuTT2JckVdCD3KulVK3tNYBDk7JJeQeTiGEEE7noTwolaMUpXKUot8z/YiMjmT96fWsOraKlcdW0ndVX/qu6kvxx4rTpHATGhduTIXcFaQHvBBuSgpOIYQQLufv7c+zTzzLs088y1jGcvzacZYeWsriQ4v58M8PGb1+NDkCc/BC4RdoVaIVVfNWxdMjiXEfRZowY8YMV6cgHoAUnEIIIVKcApkK8GblN3mz8ptci7zG8iPLWXxoMbP2zGLq9qnkDMxJi+ItaFWiFZVyV5K54R+C1lrOm4Ol5tsWH5RcmxBCCJGiZfLPRJuSbZjffD4X377IvGbzqBxcmanbpvL010+Tf2J+Bv46kMNXDrs6Vbfh5+fHlStXpCByIK01V65cwc/Pz9WppAjSwimEEMJtBPgE0LJES1qWaMn129dZfGgx8/bOY+yGsYz5cwxV81alU+lONC/enECfQFenm2IFBwcTGhrKpUuX7LK/27dvp8jCytV5+fn5ERwc7LL4KYkUnEIIIdxSkF8Q7Uq1o12pdpwPP8/sPbP5Zuc3dFrSiV4retGyeEvKUpYauoZcOk7A29ub/Pnz221/ISEhKXI+8ZSaV1rkdpfUlVL1lVKHlFJHlVIDXJ2PEEII18uZPifvPPMOB3oc4M9Of9KqRCvm759Pz109KT+tPNN3TicyOtLVaQqRZrlVwamU8gQmAQ2AYsDLSqlirs1KCCHEfWkN16/DuXNw9iyEhsLZs8TduImOs999hEopquSpwleNv+L8W+fpU6gPUTFRdFrSiTzj8zDg1wGcCjtlt3hCiORxt0vqFYGjWuvjAEqpeUATYL9LsxJCCAGXL8OOHXDgABw7BseOEXP0BLEXLuMdfhWPuNj/vMUDiMaLMDJymryc9cnPxYAC/J21BLeKVyB9+cIUKeZBpUqQK9eDpRPoE0jjXI355OVPCDkZwmdbPmPshrGM3TCWl4q9RP9n+lM2Z1n7HLsQ4p7caqYhpdRLQH2tdRfr9StAJa11T5ttugJdAby8vMqtXr3aJbkKkdLcvHmTwEDHdKJw5L4fRUrNK1WIiyPg+HEy7dhBwK5dZDp+HL8LF+JXR3gGclwV4HBMQS6Sjatk5qZPRrwy+hAYGIuffxx+vtFkVDdIF32DgNthZL55jqw3zpAt4gw++g4A4QSyicqspD7bs9TAu3QwlSpfpVKlq6RPH3PfNBN+Bi7cvsCic4tYem4pEbERlM9UntZ5WlM6Y2m5z/MRpNSftZSaV1Jq1aqVamcaSnUFpy2Z2lKIf8jUluKRXbkCS5fC8uWwdq1p0QTCsgZzLOMzrL5ajlVXy7GXEvjneYzKTysqVIDy5aFECciSBZJV08XGwsGDsG0bd/7cSsxvIaQ7vg+A0x75+DbuZeZ7tiZzjado2xaaN4ekaoqkPgPXb19nyrYpTNg0gQsRF6iYuyIDqw6kSeEmUng+hJT6s5ZS80qKTG2ZcpwF8ti8DraWCSGEcITz52HhQvjpJwgJMcVgrlxcrtSQlXfqMGF3LbZfzIN/BNSpAy/Wg6nPQaFCySwuE+PpCcWLQ/Hi+LRvjw/AmTPwyy/kWfATA1aPZWDsGPb/WZpP1vTknV6tadran969oVgy7+oP8gtiQNUBvFnpTWbunsnYDWNp+n1TyuUsx4haI6hfsL4UnkLYkVt1GgK2AoWUUvmVUj5AK2CJi3MSQojU5fZt+P57aNAAgoOhRw8IDSWqT38WDNxKueyhPLZsJl3WtSNPlTy8//5+Ll40jZ89e8KTTz5CsZmUPHmgSxfUiuWoc+fgs88oWjiOr+nC8Zg8FJz+HtWLX6ZxY9i4Mfm79ff257Xyr3Go5yGmN5nOlcgrNJzbkKrTq7L2xFo7H4QQaZdbFZxa6xigJ/ALcACYr7Xe59qshBAilfjrL+jeHXLmhFatYN8+ePddzq7axxvPHSTr1FG89EF5YmIVkybBhQum8bN27YtJXtJ2iGzZoGdP1K5dsHYt6RtUo1/sB5z1yU+N1YP4X5WrNGli+i4ll5eHFx1Kd+BQz0NM+d8UToadpPas2tSdVZcd50P5e+kAACAASURBVHc47liESCPcquAE0Fov11o/qbV+Qms9ytX5CCGEW4uJMZfLa9WCkiVh+nT43/9g9Wp2LjxJ62MjyNegGFOnwosvmtbDXbtMXRoU5OLclYKaNWHhQtTevfi+0JC3bo/inF8Biv4ygTIlohk37kmuXEn+Ln08fXit/Gsc7XWU8fXGs/vCbsp/WZ6OiztyLvycww5FiNTO7QpOIYQQdnDjBnz0ETzxBDRrBidOmNdnz7Kj7xwajqtL2fIe/Pwz9OkDx4/DzJlQubIDLpfbQ7Fi5jaA3bvxq16JMVF9OJ6xDLd+PkDRojB3rhkKNLn8vf3pXbk3R3od4e0qbzP3r7k8+dmTjPh9BLeibznuOIRIpaTgFEKItOTyZXj/fcibF/r3NwXnwoVw7BgHnu9H826ZKVcONm+G0aPh9GkYO9bcyukWSpaElSth0SJyBd3iV12Xb3RHurcJo0EDM+b8g8jol5GPnv2I/d33U79gfQaHDKbI50X46cBPuNMoL0K4mhScQgiRFpw9C337Qr58MHKk6VK+bRusWcPZCi/QobMnJUqYWm3wYNOiOXAgZMzo6sQfglLQpAns28epNm3437XZhGYsgV/ISkqWNPX1g3oi8xP82OJH1nVYR2b/zDSb34xG3zXiZNhJu6cvRGokBacQQqRmFy5A795QoAB8+im89JLpDLRgAZHFyjFqlOlVPm+euXR+4gQMG5YC7s+0B39/TnTpgtq4kcBcQSyKasAUz560ejGKbt0g8iGmVq+Wrxrbum5j3HPjCDkZQrFJxfhw/YdEx0bbP38hUhEpOIUQIjUKC4NBg8wl888/h1degaNHYeZMdNFiLFhgbnscNMiMfnTgAHz8MWTN6urEHaBCBdi+Hfr0ocWlSRzNUZVVX56galVzy8CD8vLwos/TfTjQ4wD1CtZjwG8DKPNFGbae3Wr/3IVIJaTgFEKI1CQiAsaMgfz5YdQoaNTIVJNffQWPP86xY1CvnmnoDAyE336DH380m6dqfn4wbhwsXEieyCMcDihDwQNLKF8e1q17uF3mCcrDwpYLWdxqMWG3w3j666cZtGYQd2Lv2Dd3IVIBKTiFECI1iIuDGTPMFD8DB0LVqmb8ou++g0KFiI42ndCfego2bYLPPoOdO6F2bVcn7mQvvAA7duBdpCDzbr9AP/0RdWprvvrq4XfZuHBj9nbfyyulXmHUH6OoMK0Cu/7eZb+chUgFpOAUQgh3t26duWzcsaPpfb5+vZn2p1QpwPQNqlDBdEqvV880ePbsCV7uNrmxvRQoAH/8gWrRgn6X+7MsRye6v3qHYcMebOgkWxn9MjK9yXSWtFrCxYiLVJhWgZHrRhIbF2vf3IVwU1JwCiGEuzp+3Fwbr1EDLl2Cb781I7M/8wxgZqh85x2oVMms/ukn00M7d24X550S+Pub1t8hQ3ju7Az2ZH+WCUOv0a2bGQv/YTUq3Ih93ffRvFhz3l/7PnVm1eHsjQcci0mIVEgKTiGEcDfh4aa5smhRWLEChg+Hgwehdev4Udl37TKtmmPHQpcusH8/NG3q4rxTGqVg6FCYO5fCVzeyP1tNlkz7m5degqioh99tZv/MzG02l5kvzGTbuW2UmlqKnw//bLe0hXBHUnAKIYS70Bp++MEUmh99BC+/DEeOmIHc06UDTOvc6NFQsSJcuQLLl8MXX6SSYY4c5eWXUcuWkTPiGAezVmX34hM0a2ZaiB9Fu1Lt2N51O3mC8tDou0b0XtmbqJhHqGSFcGNScAohhDs4fNjcgNmiBTz2mLl0PmMG5MoVv8mRI1CtGrz3npn3fO9eM+SRSIZnn4VffyVj7FX2Bj3D8WX7adr00YvOwlkLs7HzRnpV7MXEzROpMaOGXGIXaZIUnEIIkZJFRpqpf556ysw3+emnsHWrmdTcxqxZUKYMHDpkbk2cNw8yZ3ZRzu6qcmVYt44Af8329LU4tfIAjRs/etHp5+XHpw0+5cfmP7L34l7KfVmOP079YZ+chXATUnAKIURKtWwZFC8OI0ZA8+ammuzV61/dy2/ehPbtzaN8efjrL2jVyoU5u7sSJWDtWvzTKbYF1eb06kO0bPloHYnualasGVte3UIG3wzUnlWbz7d8LvOxizRDCk4hhEhpLlwwl86ff94MWL5mDcyZAzly/Guz3btNkTl7NgwZYgZxlx7odlCkCKxZQzrfOLYF1WbfkqN06mSGOn1UxR4rxtZXt9KgYAN6rehFpyWd5L5OkSZIwSmEECmF1ua+zKJFYfFiGDnSdDevVes/m02ebIY7unHD1KNDh4Knp0uyTp2KFYPffiPQ+w47MtRi7ewz9O798ON02gryC2JRq0UMqTGEGbtmUG9OPa5GXn30HQuRgknBKYQQKcHx4/Dcc2bw9uLFTfPle++Bj8+/NgsPh5YtoUcPM0vQ7t1Qs6ZrUk71SpSAX38lvQpna+Z6zPnsKiNH2mfXHsqDoTWH8u2L37IxdCNVvq7CsavH7LNzIVIgKTiFEMKVYmPNHN93OwVNngy//24u6yZw6JBp1VywAD78EH7+2XRYFw5UqhRq8WKyRxxn82PP88HgW3z7rf123/qp1vzW7jcu3bpE5a8rs+HMBvvtXIgURApOIYRwlT174Omn4a23THPlvn3w+uvg8d9fzQsXmoHcL12C1avNDEKJbCYcoUYN1Ny5FLyymd8yt6Brx2j+sGMn86p5q7Kp8yYy+mWk9szaLDq4yH47FyKFkF9XQgjhbNHR5qbLcuXg5EkzjtGSJZAnz382jY2FgQPNuJpFi8KOHaY2FU724ouoyZN5+uoyZvi/zgtNNEeO2G/3hbIUYmPnjZTOUZpm85sxY9cM++1ciBRACk4hhHCmv/4y18WHDTM3Yx44YMYxsqaktHX5shm4fcwY6NoV1q1LtCYVztKtGwwaRPMbX9Mjahz/+5+ZzclesqbLyq/tfqVO/jp0XNyRCZsm2G/nQriYFJxCCOEMMTHwwQemVfPsWfjpJzPUUZYsiW6+f7+ZnvL332HaNDM9pa+vk3MW/zVsGLz0EsMi+1HixFJatzat0PYS6BPI0peX0qxoM/r80of317wvY3WKVEEKTiGEcLSDB+GZZ+Ddd+GFF8yck02bJrn5ihXm1s5bt0yrZpcuTsxV3JuHB8yciSpXjnmerTm/ag+DBtk3hK+XL9+/9D2dy3Rm5B8j6fNLHyk6hduTglMIIRzlbg/0MmXg6FEz3+T8+Ul2LdcaJkww473nz29msKxUyck5i/tLlw4WL8YnaxBrAxvxzZgL/PijfUN4engyrdE0elfqzcTNE6XoFG7P6/6bCCGEeGDHjkGHDrB+PTRubK6JJ5gpyNadO9Czp7l8/sILZvagwEDnpSseUK5csGQJmatWZUWGltRq/ytFi3pRvLj9QiilGFdvHBrNxM0TUZjXKpH7fYVI6aSFUwgh7OnuNEAlS5oOQjNmwKJF9yw2r16FevVMsTlwoBlnU4pNN1C2LOrLLyl743c+YCAvvADXr9s3hFKK8fXG82alN5mweQJ9f+krLZ3CLUkLpxBC2Mv589CpE6xcaSrIr76C4OB7vuXECdMT/cQJmDULXnnFSbkK+2jbFjZtovukjwk5XomuXV9i3rxEBx14aHeLToAJmyfg6eHJ2GfHSkuncCvSwimEEPawcKGZLej332HSJNPz5z7F5vbtpnPQxYvw669SbLqtceOgcmVme3Vkz/wDTJtm/xB3i84eFXrwycZP+GD9B/YPItyeUqq5UmqfUipOKVU+wbqBSqmjSqlDSql6NsvrW8uOKqUGOCo3KTiFEOJRhIdD585mZPZ8+czI7N2737eJa+VKqFHDDHX0559QrZqT8hX25+MDP/yAT8Z0/BLwIu+9Ec6ePfYPo5Ti0waf0rZkW95b8x5Tt021fxDh7vYCLwLrbBcqpYoBrYDiQH1gslLKUynlCUwCGgDFgJetbe1OCk4hhHhYGzdC6dLmPs133zWvE5kDPaHp001P9IIFzVuKFnV8qsLBgoNR339PnsjDTFHdadkSbt60fxgP5cE3jb/h+Sefp/uy7szbO8/+QYTb0lof0FofSmRVE2Ce1jpKa30COApUtB5HtdbHtdZ3gHnWtnYnBacQQjyo6GgYPBiqVoW4OHMZfdQo09J1D1rD8OHmNs/atc0Ym7lyOSln4Xg1a6KGDuWl23OoeHAWPXo4Joy3pzfzX5pP1bxVeWXhK6w4ssIxgYQreCmlttk8utppv7mBMzavQ61lSS23Oyk4hRDiQRw+bAZxHzHC3HS5e7cpPO8jLg569IAhQ6BdO/j5Z8iQwQn5Cud6912oUYMvvbuzcdZh5jmoAdLf25+lLy+lRLYSNP+hOTvO73BMIOFsMVrr8jaPLxNuoJT6VSm1N5GHQ1om7UUKTiGESA6t4csv/xnEff58cyk9GVVjdLSpTadMgXfeMW+7T2OocFeenjBnDj7pfVmarhVvvhbF2bOOCRXkF8Ty1svJ7J+Z5+c+z5nrZ+7/JuH2tNZ1tdYlEnksvsfbzgJ5bF4HW8uSWm53UnAKIcT9XLwITZpAt25QpYoZX7N582S9NTLS9CeaO9dMpf7hh/YdMkekQMHBqOnTKXxrJ4Mj+tOxo2nhdoSc6XOyrPUybt65yfPfPc+NqBuOCSTc3RKglVLKVymVHygEbAG2AoWUUvmVUj6YjkVLHJGAFJxCCHEvv/4KpUrBqlVm3slffoHcybvFKTwcGjaEZcvMWPADHDbgiEhxGjeGXr3oETMR79XLmDTJcaGeyv4UP7b4kX0X99Hyx5bExMU4LphI0ZRSTZVSocDTwDKl1C8AWut9wHxgP7AS6KG1jtVaxwA9gV+AA8B8a1u7k4JTCCESEx1t7sd77jnIlAm2bIE33wSP5P3avHIF6tSBP/6AOXPg9dcdnK9IeT76CF2yJHN8O/Nhv8scOOC4UM898RxT/jeFlUdX8saKNxwXSKRoWuuFWutgrbWv1jq71rqezbpRWusntNaFtdYrbJYv11o/aa0b5ajcpOAUQoiETp6E6tXNNfDOnWHrVjNVZTKdO2fevmePGQ++dWvHpSpSMD8/1OzZZIy7ymT9Om3baO7ccVy4V8u9Sr8q/ZiybQrTtjtg9HkhHoEUnEIIYeuHH8zYmvv3w7x5ZoLzgIBkv/3UKTOI++nTZnD3Ro0cmKtI+UqWRA0fTuM7P1J453eMGePYcB/U+YB6T9Sjx/IebDizwbHBhHgAUnAKIQSY3j2vvQYtWkDhwrBrF7Rs+UC7OHHCzB509SqsWQM1azomVeFm+vWDp59mmncPvhlxlr17HRfK08OTuc3mkjcoL83mN+Nc+DnHBRPiAUjBKYQQ+/ZBhQrwxRdm3KL16yF//gfaxbFjpsC8cQN++83sTgjADJU0cybpvO/wjepMp46aGAf268nsn5lFrRYRHhVOs/nNiIqJclwwIZJJCk4hRNqltSkyy5eHS5dMD/QPPwRv7wfazdGjptiMiDAtm2XLOiZd4cYKFUKNHUvt6F8ou+0Lxo93bLgS2Uow44UZbArdJJ2IRIogBacQIm0KCzOXz197zdx0uXu36ZH+gA4fNpfRb982xWbp0g7IVaQOr7+Ofu45xnu+zVeDTnIosRmv7eilYi/R/5n+fLnjS+b+NdexwYS4Dyk4hRBpz8aNpjJctMi0aK5cCTlyPPBuDh40xWZ0NKxd+0Ad2UVapBRq2jR8/RRT4rrRuZN22IDwd42sPZKqeavS7eduHL5y2LHBhLgHKTiFEGlHXJwZ6qhaNTPdz/r15p7NZI6taevAAXMZXWsICYESJeyerUiN8ubF48Mx1I5ZxRMbZjl0QHgALw8vvmv2Hb6evrT4oQW3Y247NqAQSZCCUwiRNvz9N9SrZwZzb9bM9EKvVOmhdnXkCNSubWrWkBAoVsy+qYpU7vXX0c88w+fefRg/4AKhoY4NF5whmFlNZ7H7wm76rOzj2GBCJEEKTiFE6rdypbne/eefZlzNefMgKOihdnXihCk2Y2NNb/QiReycq0j9PDxQX39NgLrF2KhevPmm40M2LNSQd6q8w9TtU/l+7/eODyhEAlJwCiFSLRUdbcZAbNAAsmeHbdugSxfTNPkQzpwxxeatW2aKdWnZFA+tcGE8hgymWewPxP60iJ9/dnzIkbVH8nTw03T7uRunr592fEAhbEjBKYRInY4fp8wbb8DHH5uJzLdseaQK8fx5U2xevQqrVkkHIWEH/foRV7IUX3p1593uYUREODact6c3c16cQ6yOpcOiDsRpB/dYEsKGFJxCiNTnu++gdGn8Q0Phxx9h8mTw93/o3V28CHXqmNtAV66EcuXsmKtIu7y98Zj+DY/pi/Q88w7Dhzs+ZIFMBZhQbwJrT65lwqYJjg8ohEUKTiFE6hERAZ07Q+vW8NRTbJs2zXQQegRXrkDdunDyJCxbBk8/bZ9UhQCgbFlU7950ZRobPtnIX385PmSnMp1oUrgJA38byN6LDpxnUwgbUnAKIVKHPXvMjEHTp8N778HvvxP1EGNr2goLMx3bDx+GJUugenU75SqEraFDic0VzBRep0e3GIePzamU4stGX5LRLyNtf2orU18Kp5CCUwjh3rSGSZOgYkW4ft305hk5Ery8Hmm3N29Cw4amjl240LRyCuEQgYF4fjaRErG7KbfxM775xvEhswVk4+vGX7P7wm6Ghgx1fECR5knBKYRwX1evwosvQs+e5ibL3btNz55HFBVldrt5M3z/venkLoRDNW2KbtiQUZ6D+fSdUK5dc3zI5598nk6lOzF2w1i2n9vu+IAiTZOCUwjhntavN9NTLlsG48bB0qXw2GOPvNuYGGjTBlavhm++gaZN7ZCrEPejFOqzz/DzimHwtT4MHuycsJ/U+4RsAdnovKQz0bHRzgkq0iQpOIUQ7iU2FkaMMJOY+/jAhg3Qp89DTU+ZkNbQrRssWAATJkD79nbIV4jkKlAAj8Hv8xI/cnzSCqd0IMrol5HJ/5vM7gu7+ejPjxwfUKRZUnAKIdzH2bPmZsrBg+Hll2HHDtNRyA60hrffNq2aQ4bglNlfhPiPt98mtlARPlc9eat7JFo7PuQLRV6gRfEWDF83nAOXDjg+oEiTpOAUQriHn3+GUqXMAO4zZsDs2ZAhg912P3q0uTLfq5cpOIVwCR8fPL+YTP6441Rd/wHz5zsn7Kf1PyXQJ5DOSzoTGxfrnKAiTZGCUwiRskVFQe/e0KgR5MljWjXbt3/o6SkTM2kSDBoE7dqZS+l23LUQD65WLeJavUx/9RETe59w+AxEANkDszOh3gQ2hm5kyrYpjg8o0hwpOIUQKdeRI2ak9YkT4Y03YONGKFzYriG+/dZ0cm/SBL7+2i63ggrxyDzGfoSXrydv/f02o0c7J2bbkm2pW6Aug9YM4u+bfzsnqEgz5FerECJlmj0bypaFU6dg8WJTdPr52TXE0qWmsbRWLZg375GH7hTCfoKD8Xz/PZrxE9s/+o2jRx0fUinFpIaTiIyJpN/qfo4PKNIUKTiFEClLeLi5tt2unSk4d++Gxo3tHiYkBJo3NyEWL7Z7LSvEo+vbl5h8BRgX9ybv9HHOkEVPZnmSflX6MWfPHH4/+btTYoq0QQpOIUTKsWMHlCtnrnMPHQpr1kBwsN3DbNtmatgnnoAVKyB9eruHEOLR+fnhNXEcxeL2EfzzFNaudU7Yd6u9y+MZH6f78u4yNqewGyk4hRCup7W5ZP7003DrFqxda7qKe3raPdSBA1C/PmTJAqtWma9CpFiNGxNb51lGqCGMeOMSsU7oQJ7OOx2f1v+U/Zf2M2HTBMcHFGmCFJxCCNe6fNk0N/buDfXqmUvo1as7JNTJk/Dss+DtbaZcz53bIWGEsB+l8PxsIuk9btJy7yBmz3ZO2EaFG9G4cGOG/j6U0BuhzgkqUjUpOIUQrhMSYsbWXLUKPv3U3EzpoCbHCxdMsRkRAb/8Yi6nC+EWihZF9ezJq0zju347nDJMEsCEehOIjYvl3d/edU5AkapJwSmEcL6YGDNbUO3aEBgImzebEdcdNABmWJhpPD13DpYvh5IlHRJGCIdRQ4cQmzErgy6/ydiPnDD9EJA/U376VO7D7D2z2XJ2i1NiitRLCk4hhHOdOWPGIRoxwoxJtH07lC7tsHC3bsHzz8P+/bBwoblNVAi3kzEj3h+OpBrrOTTmJ86edU7YgdUGkj0gO31+6YN2xjybItWSglMI4TyLFplL6Lt2wZw5MH26aeF0kOhoxUsvwYYNpuP7c885LJQQjtepE3eeLM7IO/0ZMiDKKSEz+GZgZO2RbDizgfn7nDTPpkiVpOAUQjje7dtmOp+mTaFAAdi5E9q0cWjIuDgYM6YIK1bAF1+YMTeFcGteXvhM/JgnOEaGOZPYvt05YTuW7kip7KXo/2t/IqMjnRNUpDpScAohHOvAAahUyUxY3revaW4sWNChIbU2t4SuWZOdMWPg1VcdGk4I56lfn+g69RisRjDsjSs44yq3p4cn4+uN59T1U4zfNN7xAUWqJAWnEMIxtIZp08xA7ufPw7Jl8Mkn4OPj8NCDB8PkydCq1Wn693d4OCGcynvCx2TgBrU3jGDJEufErJW/Fk0KN+GD9R9wKeKSc4KKVEUKTiGE/V27Bi1aQNeu8MwzZmzNhg2dEnr8eBg5Erp0ga5djzslphBOVaIEdOpMDyYx9a0jxMQ4J+yYumO4FX2L0X+Mdk5AkapIwSmEsK8//zS9zhctgg8/NINe5szplNAzZ5qr9i+9BFOnOmyUJSFczmPkcPDz49Vj/Zk50zkxi2QtQsfSHZm8bTKnwk45J6hINaTgFELYR2ysGeqoenXw8jKF5zvvgIdzfs0sWgSdO5vB3efMccismEKkHDly4PVuf15kIcsHrOPWLeeEHVJjCArF0N+HOiegSDWk4BRCPDLfS5egTh1z82SrVqYXesWKTou/di20bAnly8NPP4Gvr9NCC+Ey6q2+RD2Wm4GX+/LZxDinxMwTlIeeFXsya/cs9l3c55SYInWQglMI8WgWLaJ8ly6wbZu5pj1nDmTI4LTw27aZqdgLFTKzCDlwWE8hUpZ06fD95APKs51jI+Zy9apzwg6sOpBAn0AGrR3knIAiVZCCUwjxcCIjoUcPaNqU29mzm1bNdu2ceuPkgQNQvz5kzWqmY8+c2WmhhUgZ2rQhsmhZ3ot8j7EjbjslZJZ0WehXpR+LDi5iU+gmp8QU7k8KTiHEg9u3z1wynzwZ3nqLHZMmmSZGJzp1yswc5OUFq1dDrlxODS9EyuDhgf+nH5KP08R8NoXTp50Ttnfl3mQLyMagNdLKKZJHCk4hRPJpbbp/ly8PFy/CihXw8cdob2+npvH336ZzUHi4adl08DjyQqRsdesSWbUu/WNH8cGA604JGegTSP9n+vPbid/48/SfTokp3JsUnEKI5Ll61Yw39Prrpif67t3meraTXb4MdevCuXOm3i1Z0ukpCJHi+E8YQ1auEPzdWP76yzkxXyv/GtkCsjHs92HOCSjcmhScQoj7W7cOSpWCJUtg7FhT6eXI4fQ0wsKgXj04dgyWLoWnn3Z6CkKkTOXKEdW0Jb0Zz0d9zjslZDrvdPSr0o/Vx1ez9/pep8QU7ksKTiFE0mJiYOhQqFXLjDW0YQO8/bbTxta0dfOmmazor79gwQKTkhDiH74fjcTP4w5VfhvO7787J+br5V/nsXSPMfOUk0afF25LCk4hROJOnIAaNWDYMGjTxvRCr1DBJalERpqhjzZvhu++c9osmUK4l4IF0V268irTmNr3MFo7PmSATwD9qvRj27Vt0mNd3JMUnEKIf9MaZs0yl9D37jXjas6aBenTuySdO3fMraMhIWaYz2bNXJKGEG7Ba9j7aF8/mu4YxMqVzonZvUJ3gryD5F5OcU9ScAoh/nHtmpkpqH17Mx/67t2mddNFYmKgdWszoPvUqdC2rctSEcI95MiBx1t9acEPzO2z1WmtnC2DW7Ly6Eq2nN3i+IDCLUnBKYQw1qwxXb5/+glGjzbzRT7+uMvSiYuDTp3M/ZrjxkHXri5LRQi34tn/bW6nz0rHQ/35aYETKk7ghdwvkMkvE2PWj3FKPOF+pOAUIq2LioJ+/cxYQ+nSwcaNMHAgeHq6LKW4OOjSBWbPhhEjoE8fl6UihPvJkAGfYYOozVpW9l1FbKzjQ/p7+tOjQg8WHVzEocuHHB9QuB0pOIVIy/bvh8qV4eOPTRPijh1mUHcXiouDV1+F6dNh8GAYJBOZCPHAPLq/RsRjj9P9zADmzolzSsxelXrh6+XL2A1jnRJPuBcpOIVIi7SGzz+HcuUgNBQWLzY3SQYEuDStuDhT937zDbz/vhmRSQjxEHx98f94BGXYxeZ+P3LnjuNDZgvIRqfSnZi1exZnb5x1fEDhVlJcwamUGquUOqiU2qOUWqiUymizbqBS6qhS6pBSqp4r8xTCbf39N/zvf9CrlxnM8q+/zJhDLhYXB926wddfm1bNYcNAKVdnJYT78mjzMuF5i9Hz0mCmT4txSsy3q7xNnI5jwqYJTokn/u1haiilVH1r2VGl1ABH5ZbiCk5gNVBCa10SOAwMBFBKFQNaAcWB+sBkpZTrbjITwh399BM89ZTpEPT557BsmUtmDEooLg5eew2++greew+GD5diU4hH5ulJ4LgRFOEQBwfNITLS8SHzZ8pPi+It+GL7F4TdDnN8QJHQA9VQVh01CWgAFANetra1uxRXcGqtV2mt7/4rtgkItp43AeZpraO01ieAo0BFV+QohNsJC6PI6NFmEMu8eWH7dujRI0VUdXFxZnr2adPg3XdNJ6EUkJYQqYJ6sSnhhcryRtgwvvjMCdfVgXeeeYfwO+FM2TrFKfHEPx6ihqoIHNVaH9da3wHmWdvanZcjdmpHnYDvree5MSfvrlBr2b8opboCXQG8vLwICQlxcIpCTmCHmgAAIABJREFUpGyZtm2j8Ecfke3KFU62b8+ptm3RFy/CxYt2i3Hz5s2H+lmLjYVx4wqzfHlOWrc+Rd26J+w6Jd/D5iUeTEo+zyk5N2fJ3LkFJQcM4PSQL1heojTp0tm/23rC81whUwXG/jGWctHl8PHwsXu8h83LDXgppbbZvP5Sa/3lQ+4ruTXUmQTLKz1kvHtyScGplPoVSOw63nta68XWNu8BMcC3D7Jv6xvzJUBAQICuWbPmoyUrhLuKiIB33oHJk6FoUbaPGEG5bt143AGhQkJCeNCftehoaNfODOo+aBAMH54PpfK5PC/x4FLyeU7JuTlNjRqEz13KW3vGMHvzUQYM87d7iITneXTe0Tw7+1nOZz5P+9Lt7R7vYfNyAzFa63sOFeLIGsqRXFJwaq3r3mu9UqoD8DxQR+v4eRLOAnlsNgu2lgkhEtqwwcwWdOyYGcRy1CjCN292dVbxbt+GFi1g6VL48ENTFwshHEQp0n86ivQ1a3Lzo8lcffMtMmd2bMg6+etQ/LHiTNg8gXal2qHkPhm7cUAN5ZTaKsXdw6mUqg+8AzTWWt+yWbUEaKWU8lVK5QcKATKHlhC2oqLMoO3Vqpl5IdeuNdP0+Nu/ReNh3bwJzz9vis3Jk6XYFMIpatQgvPKzvHl7DJ9/EO7wcEopelfuza6/d7Hu1DqHxxPGQ9RQW4FCSqn8SikfTMeiJY7ILcUVnMDnQHpgtVJql1JqKoDWeh8wH9gPrAR6aK2dMH+CEG5i506oWBHGjDFzQu7ZAzVquDqrfwkLg3r1TB08c6bpLCSEcI70E0fyGJdRn07kyhXHx2vzVBuy+Gdh4uaJjg8m7nqgGsrqYNQT+AX4P3v3HV9Vff9x/PVJwggrCWEEQghhhCVLg6BUBUFRiyJYJ1atAwV33QNjVBxYtSru1vVTa2ldqFgX4qoDUEA2Ye8hewWSfH9/nJsSMIGb5N57bpL38/E4D3LPPed7PqS1vvv9nu/3OwcYF7g25KJu0pBzru1BvhsNjI5gOSLRb/dubx2hMWOgcWP44ANvnc0os369FzZnzoRx47wJ8yISQUceyda+p3H1pL/w5OgrGfVoUlgfF18jnsuPuJwHvnmAxZsWk5GUEdbnSfkylHNuAjAhnHVBdPZwikiwvvsOevSABx7wZuDMnh2VYXPVKq+zdc4cGD9eYVPELw0ev5cGbCV+7MNs2BD+543sOZLYmFjG/jg2/A+TqKbAKVIZ7djhTQbq0wd27oSPP/b2g0wKb49FecyZA0cdBcuXw3/+Ayed5HdFItVY165sO/lsRux9nGfvCd3SaKVJbZDKmZ3O5G8//41teeF/d1SilwKnSGUzcSJ07Qp//SuMHOmNUZ94ot9Vlejbb71MnJcHkyZF3SulItVSwl9zqG15JD7zAOvXh/951/a6lq15W3l52svhf5hELQVOkcpiyxZvs/H+/SEmBr780tuesn59vysr0TvvwIAB3mul330HRxzhd0UiAkBmJtuGXMil+c/wQvaKsD+uV4te9ErtxdNTnmbfKj1S3ShwilQGH34InTt7m43fdJM3A/3YY/2uqlRjx3rvaXbv7vVyZmiugEhUSXz0LuJiCmn0wv2h3HSsVCOyRjB3w1wmLZkU/odJVFLgFIlmv/4Kf/yjt3BlYqLXVThmTFStq1lcYSHceitcfTWceip8/jk0auR3VSLyG+npbD/zYi7K/xvPj1p+6Osr6KzOZ5FUO4lnpz4b9mdJdFLgFIlGzsHLL0P79vDmm3DXXTB1qrfOZpTatg2GDvV2DrriCnjrLahTx++qRKQ0iWNuJyYGmv79ftauDe+z4mvEc1H3i3h7ztus2b4mvA+TqKTAKRJt5syBfv3gT3/yAufPP0NODtSq5XdlpVqzpjZ9+ni7Bz3+uLeDUFzUrfIrIvtp2ZLtZ13ChQV/54U7l4b9cZcfcTn5hfm8+POLYX+WRB8FTpFosWsXjBoF3bp572i+8AJ8/TUcdpjflR3UN9/AFVcczrJl8NFHcM01oG2TRSqHxDG3YzFGs5fuZ02YOx7bN2rP8RnH89zU5ygo1EaB1Y0Cp0g0+PRT6NIF7rsPzjkH5s6FSy/1ZqNHsRdfhOOPhwYN8vnhh6hdnUlESpOWxo5zLuWCghcj0ss5ImsEy7Ys4z+5/wn7syS6RPe/zUSquiVLvOncJ54IsbHeLJtXX4UmTfyu7KD27IHrroNLLoG+feGpp36ifXu/qxKR8kh86DaIiaH5y6NZvTq8zxrcfjAp9VJ4Zsoz4X2QRB0FThE/7NwJd98NHTt62+/cf783jH788X5XdkhLl3orMj3+OFx7LUyYAPXr5/tdloiUV4sW7Bw2nAsKXuKF2xeH9VE1YmtwaY9LmbBgAks2LwnrsyS6KHCKRJJz3vTtjh29iUBDhsC8eXDbbVE9KajIBx94W7fPmQP/+pe32ZEmB4lUfgkP3AqxsaS9OppVq8L7rEsPvxRAOw9VMwqcIpEyaxaccAL84Q/emppffglvvAEtWvhd2SHt3Qs33+ytrZme7q3Q9Ic/+F2ViIRMaio7hw3nj4Uv8+Kdi8L6qPTEdAa0HsBL016i0BWG9VkSPRQ4RcJt3TpvJfRu3eCnn+Cpp7zEFsU7BRW3YoW3StPDD8OIEd7a823b+l2ViIRawgO3Uhhbgxavjg77jPWLe1zMsi3LmLh4YngfJFFDgVMkXHbs8Gadt2kDzzwDw4fD/PkwcmSlGYceP97bnnL6dPjHP7z1NWvX9rsqEQmL5s3Zcf7lnF/wCi+PWhjWR53e4XQSaydqTc5qRIFTJNTy8701NNu189bVPOEEbzj96acrzT6P27Z5M9AHD4a0NJgyxVutSUSqtqQHbqEwtgapL93H+vXhe07tuNoM6zKMt+e8zaZdm8L3IIkaCpwioeKct9VO165eb2arVt6q6G+/TWVaM+jrr73R/5df9uYy/fBDpSpfRCqiWTO2DbuCcwv+j1dG5Yb1URf3uJi8gjz+MfMfYX2ORAcFTpFQ+OEHb0HK007zejjfegu+/Rb69PG7sqBt2+a9anrccd5OQV9/7a3WVLOm35WJSCQlP3QLBbE1af73e9m4MXzP6ZHSg25Nu2lYvZpQ4BSpiO++g1NOgd69vbWCnnrKGz4fOrRS7e/40UfeDppPPeWFzunT4eij/a5KRHyRksLWYSM4O/81/u+uBWF7jJlxcY+Lmbp6KjPWzgjbcyQ6KHCKlMdXX3nvZh59NPz4I4weDQsXehOCatTwu7qgrV4Nw4Z5mbluXa9T9vHHoV49vysTET81HnMz+bG1aPr8vWzZEr7nDOsyjJqxNXnp55fC9xCJCgqcIsFyDiZO9IbOjzvO2xlozBhve8rbb4f69f2uMGh798Kjj3rvZv7733DXXfDzz3DUUX5XJiJRoWlTNp83kjP3vs5rd4fvXc7kOsmc1v40XvvlNfYW7A3bc8R/Cpwih+Kct/3k734H/ft7Sxs99hgsXgw33VTpugO/+MLbLeiGG+CYY7w3AHJyKsVGRyISQU3H3Eh+TE0Sn76fbdvC95wLul7Ahp0b+GThJ+F7iPhOgVOkNIWF3qzzXr3g5JNh2TIYOxYWLYLrroM6dfyusEwWL67LoEHedu07d3prbH7wgRZxF5FSpKSw6azLOXvPq7x+X/j2WB/YdiDJ8cm89strYXuG+E+BU+RAGzfuG28+7TRYvx6eew5yc+HKKyvdyucrVnhral56aRbffAMPPeT1ap56aqWa1yQiPkh55GYKY+Ko8/gD7NgRnmfUjK3J2Z3P5t2577I1b2t4HiK+U+AUKTJlClx8MaSmeuPNTZvC6697Q+jDh1e6MefVq72/Rrt28NprcMYZK1i40NsTPT7e7+pEpFJo3pyNp1/COXkv8/oDy8L2mPO7ns/u/N28M+edsD1D/KXAKdXbrl3wyivesHnPnjBuHFx4IUyb5i3aft55lWrWOXg9mtdcA61bezPOzzoL5s2DkSMXkpzsd3UiUtmkPHYLZlDj0YfYtSs8z+jdojetk1prWL0KU+CU6mnhQm/CT4sWcNFFsHUrPPEErFwJzz7rbbVTySxYACNG7Nu6fdgwL2i+8oq36ZGISLm0bMmGQX/ivF1/442HV4blEWbG+V3O5/NFn7Nq26qwPEP8pcAp1UdBgTdL5pRTvHHmxx7zZtBMnAizZ3srnick+F1lmTgHn34KgwZ5r5y++KL3VsCCBfC3v3nhU0Skopo9cRuxVogbM4bdu8PzjGFdh+Fw/OMXbXVZFSlwStW2Zw988glccYXXm3nqqd5weXY2LF0K//oX9OtX6WbP7NjhdcR27gwnngiTJ3traS5d6vVuqkdTREKqVSvWDbyAYTue559/XR2WR2QmZ9KzeU8Nq1dRCpxS9ezYAW+/DX/8IzRpAgMHerNmjjnGW+V86VIvcKam+l1pmTjn7W9+8cWQkuINn8fHe0Pmy5bB3Xd750VEwqHZk7dTg73kjf4Le/aE5xnndz2faWumMWvdrPA8QHyjwClVw6ZN8OqrMGQING4MZ5wBEyZ4n8eP95Y2GjfOO1/JJgEtWwb33ee9BXDssV6n7Nlne3OapkyBCy6odBPoRaQSsrZtWNv/PM7f/gzjxq4LyzPOOewcYi2WN355Iyzti3/i/C5ApNxWr4Z33/V6MydNgvx8r9fykku8oHnssRBXOf8rvmgRvPOOd/z3v17v5vHHex2zQ4d6+56LiERa87F34Dq+xvZ7HmXv1Q+G/P+/N6nbhH4Z/Rg3exz3HX8fVsled5LSVc5/G0v1lZu7L4l99513LjMTbrzRC5lZWRBT+TrunYNfftn3V5s+3TvfvTvccw+cf77eyxQR/1mH9qw69hzO/2os/372Rs69ulHIn3F257O57P3LmLZmGj2a9Qh5++IPBU6JXlu3ws8/e+PGRUdurvfd4YfDvfd63X0dO1a6ST8A69Z5+5p//jl89pm3NbsZ9OnjbXR0+umQkeF3lSIi+2v+1B24Lm+y+e6/UjDyPmJjQ9v+kA5DuOKDKxg3a5wCZxWiwCnRYfv2feFy6lTvz3nz9n3fsqXXe3nllV4Sq4TdfVu2wFdfeQFz4kSvRxOgQQPo2xduvRUGD/Y2OBIRiVZ2WGdWHvUHhn33BO+8eAN/uCwppO0n10lmQOsBjJs9jvv7369h9SpCgVMib+dOb2miol7LqVNhzhxvXBm89zCzsrxx5KwsOOIIbyJQJbJnD8yYse+vOHkyzJwJhYXeVuy/+523idHxx3udtZX0VVMRqaaaP30nMT3+xbo7HqfwkrtD3v5Znc/ikvGXMHX1VLKaZ4W8fYk8/WtOwmvXLu+FxKJeyylTvEXWCwu971NSvFB51ln7wmUlW9tn505vu/WffvKC5ZQpXtgsWjYkOdn7qw0e7AXMo47SrHIRqdxiundledbpnDflr7z/2vUktAxt+6d3OJ3LP7iccbPGKXBWEQqcUnE7d3ovJBYdy5Z56WvKFK9br6DAu65xY2+/8qLJPVlZ0Ly5v7UHqbDQ26N83rzfHsuW7buuQQPvr3Xddd5fNSsL0tMr5SumIiIH1fzpUcQe+S7LbxlLgzf6hLTthvENOaH1CYybNY6HBjykYfUqQIFTfmvPHtiwYf8QuX79/p+Ln9+x47dtFHXrDRrk9VpmZXk7/UTp/2jk5cGqVd5W6sWP5cu93sv5873O2iL163tbSR5zjDdJvn176NED2ratlJPkRUTKLLbn4SzvNohzpz/Ky1/2p1+/0LZ/duezuei9i5i8ajJHph4Z2sYl4hQ4q4PCQti4MfgAuWlTye3UqOH1UjZp4h2Zmd6fxc81aQLNmvkeLp3zOl43bYLNm70/N23y/ooHhsqVK718faD4eO+v0a6dNxTevv2+IyUlarOziEjENHt6FHF9esHTH+Oye4f0fxcHdxhMjfdrMG7WOAXOKqBqB07nSg9PlV1h4b4EVVp4LPpu/fp970wWZ+b1RBYFxe7d9/18YIhs0gQSEsKaspzzehp37YLdu70/D/x527Z94bF4kCzp3N69pT+rSRNvblJaGvTu7f184JGYqFApInIwcUcfybLOJ3HBrLFMfP9G+p8Wul0pEmsnMrDtQMbNGseYE8YQYxo+qsyqduDctQsaNvS7iogqrN+AgoZNyE9uQn5KW/I7Hs3exMbsSWxCXmIT9iQ0IS+hCbsbNGF33WQKiKWgwHvNMj+f//1cUAAFeVCwBAoW7n/+N9cV/Pb7ksJi8Z9L+m737n0T1YMRE+OFwqSkfUfLlvt/Tkra/5rGjb0O2Jo1w/YfgYhItZIydhQ1+/VhzrXPcvypN4T0/6if2elMPpj/AVNXTaVnas/QNSwRV6UD5x5qcC0P+11G2GwiiXU0+d+xnsbs2VYLtgFL/asrNtYbjo6P95YAOvDnxo33P1/adQf+HB8P9ertC4/16ul9SRERv9XsezTz0o7iD0se5utPRnLswPiQtT0ocxCxFss7c99R4KzkqnTgtBo1aDH6Wr/LCJv0WC/cHeqIi4vcdTExGoYWEalutlxzLu1vuoZ/X/MCx867JmTtNoxvSN9WfXln7jvc3//+kLUrkVelA2eNGnDTTX5XISIiUrXtzOrC8tbHMmT+Q3w/aTi9+9YOWdundzidqz+6mrkb5tKhUYeQtSuRpQFJERERqbBGj48ilVVMufKlkLZ7eofTAXh37rshbVciS4FTREREKiz+9/1Z0fIoTp39IFO/2xOydls0aEHP5j15Z+47IWtTIk+BU0RERCrOjIaPjiKdZXw38v9C2vSQDkP4ceWPrNy6MqTtSuQocIqIiEhI1Bl6EiubZ3HytPuZ8VN+yNrVsHrlp8ApIiIioWFGwpg7acMivh7xRsia7di4I+2T2/PuPAXOykqBU0REREKm3nmnsapJNwb8OJo5MwtC1u6QDkOYtGQSm3ZV0R0EqzgFThEREQkdM+o+cCftmc/EEf8KWbNDOg4hvzCfD+Z/ELI2qxozu9fMZpjZNDP7xMyaB86bmT1hZrmB7w8vds+FZrYgcFwYrtoUOEVERCSkEi4ayprkThz3zX3kzi8MSZtZzbNoXr+5htUP7mHnXFfnXHfgA+CuwPmTgXaBYzjwDICZNQSygV7AkUC2mSWFozAFThEREQmtmBhq3XMnhzGLT0aEZjmjGIthULtBfLLwE/YUhG7ZparEObe12Me6gAv8PBh41Xm+BxLNrBkwEPjUObfRObcJ+BQ4KRy1KXCKiIhIyCVdfhZrEzPpM/Feli5xh74hCIMyB7F9z3a+WvpVSNqLQnFmNqXYMbysDZjZaDNbDgxjXw9nKrC82GUrAudKOx9yCpwiIiISerGxxI26nW5MZ8KI90PSZP/W/akdV5sP538YkvaiUL5zLqvY8fyBF5jZZ2Y2s4RjMIBz7g7nXBrwOnBVpP8CpVHgFBERkbBIvvo81tfPoOfH97JyRcV7OevUqMPxGcfz/vz3cS40vaaVjXNugHPusBKO9w649HXgjMDPK4G0Yt+1CJwr7XzIKXCKiIhIeNSoAbffTpabwvtXfRySJn/f7vcs3LSQ+b/OD0l7VYmZtSv2cTAwN/DzeOCCwGz13sAW59xq4GPgRDNLCkwWOjFwLuQUOEVERCRsGv/5AjbUbUn39+9h7ZqK90r+vt3vAbQ8UskeDAyvz8ALj9cGzk8AFgG5wAvASADn3EbgXmBy4LgncC7kFDhFREQkfGrWpOCGW+hd+B3vXTexws2lJ6bTpUkXPlxQZd/jLDfn3BmB4fWuzrlTnXMrA+edc+5K51wb51wX59yUYve86JxrGzheCldtCpwiIiISVk1vu5iN8c3p+K97+fXXirc3KHMQXy/7ms27N1e8MYkIBU4REREJr9q1ybvmZo4p/JJ3rq/4kka/b/d78gvz+WThJyEoTiJBgVNERETCrtldl7G5VhPavHEvmyvYMdm7RW8axjfUe5yViAKniIiIhF+dOuwYcRP9Cj7j7Zu/r1BTsTGxnNLuFD7K/YiCwoIQFSjhpMApIiIiEZF67xVsrZFMi5fvZdu2irU1qN0gNuzcwI8rfwxNcRJWCpwiIiISGfXqseXSP3Pi3gm8c8eUQ19/ECe0OYEYi+HjhWFZNlJCTIFTREREIibtwavYFpdI4+fuY+fO8rfTML4hPZv3VOCsJBQ4RUREJHIaNGDjBddx8p73eDt7eoWaGthmID+u/JFNuzaFqDgJFwVOERERiaj0v1zDjtj6JIy9j927y9/OwLYDKXSFfLbos9AVJ2GhwCkiIiKRlZTEurOv5ve73+Ld+2eXu5kjU48koVaChtUrAQVOERERibhWf72e3TF1qP3IaPbsKV8bcTFxDGg9gI8XfoxzFd+nXcJHgVNEREQizho3Ys2QkZy6803ee3h+udsZ2GYgK7auYM6GOSGsTkJNgVNERER8kTH2BvZaLWIevJ/8/PK1MbDtQAA+ztWwejRT4BQRERFfWEpTVgy6nMHbX+P9xxeVq42WCS3p0KiD3uOMcgqcIiIi4pvWT99EgcWx994HKSjnLpUD2wzky6VfsmvvrtAWJyGjwCkiIiK+iWnRnOUnXMLpW17mo+eWlauNgW0Gsjt/N18t/SrE1UmoKHCKiIiIrzKevQWA7aMeorCw7Pcf1+o4asXW0rB6FFPgFBEREV/FZrRkad+LGLLxb3zy0soy31+nRh2OST+GTxd9GobqJBQUOEVERMR3Gc/dSiwFbLztYcqzpGb/jP7MXDeTtdvXhr44qTAFThEREfFdXGZrFh19PkPWP8fEf5Q9NPbP6A/AF0u+CHVpEgIKnCIiIhIVWj13OzXZw+qbHilzL+fhzQ4noVYCny/6PDzFSYXE+V2AiIiICEDNwzKZ3/McTp/8NF+/czPHDm0U9L2xMbH0bdWXzxcrcIaD5dhRwPnAMUAzYBcwE/gQeM1luy0Hu189nCIiIhI10p+7gzrsZOn1j5X53v4Z/Vm8eTGLNy0OQ2XVl+XYR8ClwMfASXiBsxNwJ1AbeM9y7LSDtaEeThEREYkatXp0Yn63Mxg8/Um+m3AjR52SFPS9/Vt773FOXDyRS5IuCVeJ1dEfXbbbcMC57cBPgeMRy7GDdkerh1NERESiStqzd9KAbeRe/XiZ7uvYqCMp9VI0rB5iRWHTcqyu5VhM4OdMy7HTLMdqFL+mNAqcIiIiElXie3djQafBDFr0OFMmbg36PjPj+Izjmbh4Iq48ayvJoXwF1LYcSwU+Af4IvBzMjQqcIiIiEnWaPzOKJDYze+TYMt3XP6M/a3esZfb62WGqrFozl+12AkOBp122OxPoHMyNCpwiIiISdeoeewQLMk/hlHmPMv3b7UHfV7Qep4bVw8ICs9WH4c1OB4gN5kYFThEREYlKKWNH0YhfmX7FM0Hfk56YTuuk1gqc4XEtcBvwjst2syzHWgNBrbQftYHTzG4wM2fmzXoyzxNmlmtmM8zscL9rFBERkfCpf0JvcjMGMHDmX5g1eWfQ9/XP6M+kJZMocAVhrK76cdnuK5ftTnPZ7qHA50Uu210TzL1RGTjNLA04EVhW7PTJQLvAMRwI/v/uiIiISKXU+Im7aMo6pl7xQtD39M/oz9a8rczfNj+MlVU/gZnpz1uOfWI5NrHoCObeaF2H8zHgZuC9YucGA686b9rZ92aWaGbNnHOrfalQREREwi5h0DEsTDuOAT89xIJfLqddl9qHvKdfRj8Apm2eFu7yqpt/Ac8CfwPK1H0cdYHTzAYDK51z082s+FepwPJin1cEzu0XOM1sOF4PKHFxcUyaNCms9YpUFtu3bw/bPw/hbLsiorWuqiaaf8/RXFtVEu7fc9wlQ/jd3dcx9uy/svLp3kHd07JOS37a+JP+8w+tfJftyjXCbH6sU2VmnwEpJXx1B3A7cKJzbouZLQGynHMbzOwD4EHn3DeBNj4HbnHOTSntOXXr1nU7duwI/V9ApBKaNGkSffv2rXRtV0S01lXVRPPvOZprq0rC/nt2jsWpfYhdvYL8Obm07lDzkLdc/v7lvD79dbbcvoXYmKAmUvvOzHY65+r6XUdpLMfuBtYB7wB5Reddttt4qHt9eYfTOTfAOXfYgQewCMgApgfCZgvgJzNLAVYCacWaaRE4JyIiIlWZGfXH3EVLlvPN8FeCuuW4Vsexo2AH09dOD3Nx1cqFwE3Af4GpgaPUjr/iompI3Tn3C9Ck6PMBPZzjgavM7E2gF7BF72+KiIhUD42GDWTpn7P43dcPsHzRRaS1rnHQ649NPxaAr5Z+xeHNtLBNKLhsl1Hee6NylnopJuD1gOYCLwAj/S1HREREIsaM+PtH0ZrFTBr+xiEvb9GgBc1rN+fLpV9GoLjqw3LsMMuxsyzHLig6grkvqgOnc66Vc95m8M5zpXOujXOuy8He3RQREZGqp8klp7KsYTd6TxzN6hWHniTdNaErXy/9mkJXGIHqqj7LsWzgycDRDxgDnBbMvVEdOEVERET+x4waOaNo5xbw+fB/HvLybond+HXXr9pXPXT+APQH1rhs9yegG5AQzI0KnCIiIlJpNBs5hBUJnTn8P6NZv/bgPZddE7oC3nucEhK7XLYrBPItxxrgzVhPO8Q9gAKniIiIVCYxMdioO+nkZvPpiLcPemmz2s1o0aCF3uMMnSmWY4l4c2mmAj8B3wVzowKniIiIVCqp153Jyvrt6fLevWzcUHovp5lxXPpxfLnkS/xYd7yqcdlupMt2m122exY4AbgwMLR+SAqcIiIiUrnExlJwy+10KZzBJ1eNP+ilx6Yfy9oda1mwcUGEiqt6LMc6BP48vOgAGgJxgZ8PSYFTREREKp2Wt5zHqrpt6fyvu9m6ufRezuPSjwPgyyUaVq+AGwJ/PlLC8ZdgGoiqhd9FREREghIXR97Nd9El+wLeuvJdznh9aImXZSZn0rRuU75a9hWXHXFZhIt+bVghAAAgAElEQVSsGly2uyzwZ7/ytqHAKSIiIpVSxu3nsnzMaDr+M5sdz55O3fq/Hbg1M45NP1Yz1SvAcqzkNB/gst3BZ2+hIXURERGprOLi2HVTNp0KZjJx5L9LvaxPWh+WbVnGiq0rIlhclXJq4LgE+DswLHD8Dbg4mAYUOEVERKTSyrzzLJbU7UT7f9zNru0l7z7Up2UfAL5d9m0kS6syXLb7U2A2eg2gk8t2Z7hsdwbQOXDukBQ4RUREpPKKjWXHjXeTWTCHr64sefehbk27UadGHf67/L8RLq7KSXPZbnWxz2uBlsHcGPQ7nGaWCqQXv8c5pxciRERExFedRp3Bwoe70O71u8l7+ixq1d0/3tSIrcGRqUfy7XL1cFbQ55ZjHwP/CHw+G/gsmBuD6uE0s4eAb4E7gZsCx41lr1NEREQktCw2hm035tC6YAHfjny9xGv6pPVh2pppbN+zPcLVVR0u210FPIe3h3o34HmX7a4O5t5gezhPB9o75/LKV6KIiIhI+HTLPp15j/Sgzev3sHvsedSuv/+rhUenHU2BK2Dyysn0yyj36j7VXmBG+iFnpR8o2Hc4FxHkS6EiIiIikWYxxu5bc0gvWMQ3w1/9zfdHtTgKQMPqFWA51ttybLLl2HbLsT2WYwWWY1uDuTfYwLkTmGZmz5nZE0VH+UsWERERCa2utw9ibv0s2o+7l52b9+z3XVJ8Ep0bd64WgdPMbjAzZ2aNAp8tkN1yzWyG2b7tKM3sQjNbEDguPETTY4FzgQVAPHAp8FQwNQUbOMcD9wL/BaYWO0RERESigsUY+aPuIa1wKd9c8tJvvu+T1ofvln9HoSt9K8zKzszSgBOBZcVOnwy0CxzDgWcC1zYEsoFewJFAtpklHax9l+1ygViX7QpctnsJOCmYuoIKnM65V0o6grlXREREJFIOu/EkZif0pvO797F7y/7rch6ddjRb8rYwe/1sn6qLiMeAmwFX7Nxg4FXn+R5INLNmwEDgU+fcRufcJuBTDh4gd1qO1QSmWY6NsRy7niCz5EEvMrNxgT9/CXTB7ncE8wARERGRiDHD7rmH1MIV/PrQN/t9VQkWgI8zsynFjuFludnMBgMrnXPTD/gqFVhe7POKwLnSzpfmj3jZ8SpgB5AGnBFMbYeapX5t4M9BwTQmIiIi4reOVw9g1t2/o9/3z7N59c0kNosHoE1SG5rUbcK3y7/l8qzLfa6yRPnOuayDXWBmnwEpJXx1B3A73nB6yFmOxQL3u2w3DNgN5JTl/oP2cDrnrSbvnFta0lHuqkVERETCxYwaD9xDc7eK7/70fLHTRp+0PpV64pBzboBz7rADD7wVhTKA6Wa2BGgB/GRmKcBKvN7IIi0C50o7/9vnZrsCID0wpF5mwS783tvMJpvZdjPbY2YFZsFNgxcRERGJtMzL+/FTQh8O/+QBfl2+83/nj047mkWbFrFm+xofqws959wvzrkmzrlWzrlWeMPjhzvn1uBN/r4gMFu9N7Al0Kn4MXCimSUFJgudGDhXmkXAt5ZjoyzH/lx0BFNfsLPUyz0NXkRERMQPa0ZcQFO3lh8u3BdZ+qR573FWs33VJ+CFxVzgBWAkgHNuI94qRJMDxz2Bc6VZCHyAlx/rFzsOKei91J1zuWYW65wrAF4ys5+B24K9X0RERCSS6gzMZNorJ9HriwdZnzucxm0TOLzZ4dSMrcn3K75naMehfpcYNoFezqKfHXBlKde9CLwYVJvZrkzvbRYX9MLvZlYT772AMWbBT4MXERER8Uvi2NEks5Gfz38EgFpxteie0p0fVv7gc2WVh+XYC5ZjXUr5rq7l2MWWY8MO1kawPZxF0+CvBK7He6k0qGnwIiIiIn5pNfRwfkw/k6N/eJQ1M64ipWsTeqX24u8//538wnziYoIe7K3OngJGBULnTGA9UBtvIfkGeD2krx+sgYP+lgPrObVwzj0V+Pwl0ARvMdHv8N4FEBEREYlaKc/fQ/zAt5h8wQOkTHuMXqm9ePLHJ5m1bhbdUrr5XV7Uc9luGnCW5Vg9IAtoBuwC5rhsNy+YNg4V628Gzin2uRZwBFAPeAn4d1mLFhEREYmklid24JvMizh6+tOs/O56erfvDcAPK39Q4CwDl+22A5PKc++h3sOs6ZwrvgL9N4Htj5YBdcvzQBEREZFIy3jpLgAWXXQPrZNa06hOI35Yofc4I+VQgXO/Ddydc1cV+9g49OWIiIiIhF7q0el83/0Kjpr/Mov/M58jU4/k+5Xf+11WtXGowPmDmV124Ekzuxz4MTwliYiIiIRep/+7nd3UZvXwbHql9mLO+jlszdM+NmVlOVanrPccKnBeD/zJzL4ws0cCxyTgIuC6spcoIiIi4o/GhzXlp2Ouo8+Kf5IyLxmHY/LKyX6XVWlYjh1tOTYbmBv43M1y7Olg7j3UXurrnHNH461CvyRw3OOcO8o5t7ZCVYuIiIhEWPfXbmSTJZGR8x6A1uMsm8eAgcCvAC7bTQeODebGoBZvd85NdM49GTgmlrtMERERER81aJnIzFNu4YRVn9IyJk2Bs4xc9n6TyQEKgrlPq52KiIhItdLz1atZ1/ivdPllNz/E/4BzDjPzu6zKYLnl2NGAsxyrAVwLzAnmRm1PKSIiItVK7YZ1WHjeKE5Zsp61O9aybMsyv0uqLK7A23UyFVgJdKeUPdoPpB5OERERqXZ6PncpGzuMBlbx7ZL/kt493e+Sop7LdhuAg+6ZXhoFThEREal24urUpOHQ+6m99yLeff1Vzut+rt8lRS3LsSfxtjUvkct21xyqDQVOERERqZZ6P/JHOl5xJYvcF+zevJvaibX9LilaTaloAwqcIiIiUi1ZbAydWp3EW7ve4tsLn6T/ezf5XVJUctnulYq2ocApIiIi1dYppw3l9bffotYP97J16aU0SE869E3VlOXY+/x2aH0LXg/ocy7b7S7tXs1SFxERkWorq3kWAHObb2P6uQ/6XE3UWwRsB14IHFuBbUBm4HOp1MMpIiIi1Vbbhm2pX7M+H2Q24/x/Ps6ayVeR0jPN77Ki1dEu2/Us9vl9y7HJLtv1tBybdbAb1cMpIiIi1VaMxXBE8yNY2isegIXD7vK5oqhWz3KsZdGHwM/1Ah/3HOxGBU4RERGp1rKaZTFnx1y+yhrJUQteYcFbM/wuKVrdAHxjOfaF5dgk4GvgRsuxusBBJxZpSF1ERESqtazmWeQV5FHrmcFsOfJlNo+4Fc6Y4HdZUcdluwmWY+2ADoFT84pNFPrrwe5VD6eIiIhUa0UTh+bbfKafcjs913/ET3+Z6HNVUesIoDPQDTjLcuyCYG5S4BQREZFqrXVSaxJrJzJl1RR6v3YVK2NbUvuumynML/S7tKhiOfZ/wF+A3wE9A0dWMPdqSF1ERESqNTPjiGZHMHX1VGon1mbZ8Ps46pkL+Orqf3LsM9ryspgsoJPLdqVuc1ka9XCKiIhItZfVPIsZa2eQl59HryeGMbdODzJeuI1dG3f5XVo0mQmklOdGBU4RERGp9rKaZ7G3cC+/rPuFmLgYdo9+lLSCpfx47mN+lxZNGgGzLcc+thwbX3QEc6OG1EVERKTaK5o4NGXVFLKaZ9H9ur5899DpHP7JA2yYeTGNDitXx15Vc3d5b1TgFBERkWovPSGd5Phkpqya8r9zjV96mFond+KXs++k0ay/+VhddHDZ7sviny3HfgecC3xZ8h37KHCKiIhItWdmHNH8iP0CZ9uT2vJpt2voP/1RFr9zFRlDuvtYYXSwHOsBnAecCSwG3grmPgVOEREREbwdh8b8dwy79u4ivoa31WX3f93JxvavsO3S6+H0iWDmc5WRZzmWideTeS6wAfgnYC7b9Qu2DU0aEhEREcF7jzO/MJ8Za/dtbdm4XSLTTs+h68ZJTL3rPR+r89Vc4HhgkMt2v3PZ7kmgoCwNKHCKiIiIsP/EoeKOfW04C2p2otFDN7F3xx4/SvPbUGA18IXl2AuWY/2BMnX1KnCKiIiIAC0atCA5Ppmf1/y83/madeL49bZHSN+by3fDxvpUnX9ctnvXZbtz8PZQ/wK4DmhiOfaM5diJwbShwCkiIiKCN3GoR7MeTFsz7Tff9co+icnJJ9HtvXv4de56H6rzn8t2O1y2e8Nlu1OBFsDPwC3B3KvAKSIiIhLQvWl3fln3C3sL9u533gySXnyEumxn1h+yfaouerhst8llu+ddtusfzPUKnCIiIiIBPZr1YE/BHuZumPub79qe1olvu4ygz6znWPDv6T5UV3kpcIqIiIgE9EjpAfCb9ziLdHk7h03WkF2XXY0rdJEsrVJT4BQREREJyEzOJD4unp9Xlxw4G7ZtyPSzH6Dr5q+ZeuM/Ilxd5aXAKSIiIhIQGxNL16Zdmbb2txOHihz78sX8UrsnaU/cSN6GbRGsrvJS4BQREREppntKd6atmYZzJQ+Z16gVw86HnqRpwWp+GnJvhKurnBQ4RURERIrpkdKDzbs3s3TL0lKv6XVNLz5vdTFZ3zzGys9/O8FI9qfAKSIiIlJMj2aBiUOlvMdZpMPbD7CDuqw/9xoopTdUPAqcIiIiIsUc1uQwYiymxAXgi0vt0YTJp95L9/WfMnXUuxGqrnJS4BQREREppk6NOnRo1KHUpZGKO+7NEcyr2YWmD13P7o07I1Bd5aTAKSIiInKAoolDh1KzThzb7n+SFvlL+XHogxGorHJS4BQRERE5QI+UHizfupxfd/56yGuzbjiOb1qeR68vH2L5Z/MiUF3lo8ApIiIicoBD7Th0oNbvPspO6rDx3JGaQFQCBU4RERGRA3RP6Q4Q1LA6QPMeTZk89EG6bZjIzze8Fs7SKiUFThEREZEDJNdJJq1BWtA9nAD93riMn+OPouXjf2bHskMPxVcnCpwiIiIiJejRrEfQPZzg7UBU+NSzJBRuYuagW8JYWeWjwCkiIiJSgu5NuzN3w1x27d0V9D1H/Kkrn3X5M71++Tvz//51GKurXBQ4RURERErQpWkXCl0hczbMKdN9vSZkszwmndirrqBg154wVfdbZna3ma00s2mB45Ri391mZrlmNs/MBhY7f1LgXK6Z3Rqu2hQ4RURERErQtWlXAGasnVGm+5Ja1GXxDWNps3s235/5SDhKO5jHnHPdA8cEADPrBJwDdAZOAp42s1gziwWeAk4GOgHnBq4NOQVOERERkRK0SWpDfFw8v6z9pcz3HvPQIL5tOpTDP7yHVV8vDEN1ZTIYeNM5l+ecWwzkAkcGjlzn3CLn3B7gzcC1IafAKSIiIlKC2JhYOjfpzIx1ZevhBDCDlu8+wR5qsn7IZbjCoNbmjDOzKcWO4WV+MFxlZjPM7EUzSwqcSwWWF7tmReBcaedDToFTREREpBRdm3Qt85B6kbTeqfz4h4fp9usXTB3xQjC35Dvnsoodzx94gZl9ZmYzSzgGA88AbYDuwGog4uP5pVHgFBERESlFl6ZdWLdjHWu3ry3X/f3euIzJ9frR/oUb2TxzRYXrcc4NcM4dVsLxnnNurXOuwDlXCLyAN2QOsBJIK9ZMi8C50s6HnAKniIiISCmKJg79sq7s73ECxNUwar/2ArEun6UnXxHWbS/NrFmxj0OAmYGfxwPnmFktM8sA2gE/ApOBdmaWYWY18SYWjQ9HbQqcIiIiIqXo0qQLUPaZ6vu1MbgNX/QfTbcVHzL9ljdCVVpJxpjZL2Y2A+gHXA/gnJsFjANmA/8Brgz0hOYDVwEfA3OAcYFrQy4uHI2KiIiIVAWN6zYmpV5KuXs4iwwYfw3TGo2j5SPXsnX4CTRo2yREFe7jnPvjQb4bDYwu4fwEYELIizmAejhFREREDqJLky4V6uEEqFUnlpiXXqRu4TbmnXh1iCqrPBQ4RURERA6ia9OuzFo3i/zC/Iq1c3ZHJh1zFz0Xj+OnUe+EqLrKQYFTRERE5CC6Nu1KXkEeuRtzK9zWcR/ezJxa3Um7/wq2LlwfguoqBwVOERERkYMIxcShIrXr12Dv31+lQeFmcvtfHtZZ69FEgVNERETkIDo27kisxYYkcAJ0HdaFz467j8OXvsOMm18LSZvRLioDp5ldbWZzzWyWmY0pdv42M8s1s3lmNtDPGkVERKR6qB1Xm8zkzArPVC+u/4d/Zmr872j1yFVsmrH80DdUclEXOM2sH97G8d2cc52BvwTOd8JbkLQzcBLwtJnF+laoiIiIVBtdm5Z/i8uS1K4bS603XyHGFbB8wJ9wBYUhazsaRV3gBEYADzrn8gCcc+sC5wcDbzrn8pxzi4Fc9m3ZJCIiIhI2XZt2ZcnmJWzN2xqyNg87rTXfDH2Mrus/5/sLngpZu9HIXJS9rGpm04D38HoxdwM3Oucmm9lY4Hvn3GuB6/4OfOSc+/cB9w8HhgPExcUd8emnn0a0fpFotX37durVq1fp2q6IaK2rqonm33M011aVROvvOZR1/XfDf7lj1h082f1JDks4LCRtAhQWOGoMfYAjtn5DXXbtdM7VDVnjUcSXnYbM7DMgpYSv7sCrqSHQG+gJjDOz1sG27Zx7HngeoG7duq5v374VrlekKpg0aRLh+uchnG1XRLTWVdVE8+85mmurSqL19xzKujI2Z3DHrDuIS42jb1Zo2iyy8vMO7D7yMHC7QtpuNPElcDrnBpT2nZmNAN52Xtfrj2ZWCDQCVgJpxS5tETgnIiIiElYtE1pSv2Z9Zq6bGfK2U7Oa8cMNz8Ffzgx529EiGt/hfBdvw3nMLBOoCWwAxgPnmFktM8sA2gE/+laliIiIVBtmRqfGnZi9fnZY2u/18B/C0m608KWH8xBeBF40s5nAHuDCQG/nLDMbB8wG8oErnXMFPtYpIiIi1Uinxp34cMGHfpdRKUVdD6dzbo9z7nzn3GHOucOdcxOLfTfaOdfGOdfeOfeRn3WKiIhI9dK5cWfW7VjHhp0b/C6l0om6wCkiIiISjTo36QzArHWzfK6k8lHgFBEREQlC58aBwLlegbOsFDhFREREgtCiQQsa1GqgHs5yUOAUERERCULRTHX1cJadAqeIiIhIkDo37hy2pZGqMgVOERERkSB1btyZ9TvXs37Her9LqVQUOEVERESC1KlxJ0ATh8pKgVNEREQkSFoaqXwUOEVERESClFo/1Zuprh7OMlHgFBEREQmSmdG5cWcFzjJS4BQREREpA81ULzsFThEREZEy6NykMxt2bmDdjnV+l1JpKHCKiIiIlMH/trjUxKGgKXCKiIiIlMH/ZqrrPc6gKXCKiIiIlEGzes1IrJ2oHs4yUOAUERERKQPtqV52CpwiIiIiZVS0NJJzzu9SKgUFThEREZEy6tS4Ext3bWTDzg1+l1IpKHCKiIiIlFGHRh0AmLthrs+VVA4KnCIiIiJl1LFRRwDmbJjjcyWVgwKniIiISBmlJaQRHxevHs4gKXCKiIiIlFGMxdC+UXsFziApcIqIiIiUQ4dGHRQ4g6TAKSIiIlIOHRt1ZMnmJezau8vvUqKeAqeIiIhIOXRo1AGHY/6v8/0uJeopcIqIiIiUg5ZGCp4Cp4iIiEg5tGvYDsMUOIOgwCkiIiJSDvE14slIymDurwqch6LAKSIiIlJOmqkeHAVOERERkXLqkNyBeRvmUegK/S4lqilwioiIiJRTh0Yd2JW/i2VblvldSlRT4BQREREpJ81UD44Cp4iIiEg5dWzcEVDgPBQFThEREZFyalSnEcnxyQqch6DAKSIiIlIBHRp1YM6GOX6XEdUUOEVEREQqQEsjHZoCp4iIiEgFdGzUkXU71rFx10a/S4laCpwiIiIiFVA0U33ehnk+VxK9FDhFREREKqAocOo9ztIpcIqIiIhUQKvEVtSMrRkV73Ga2dVmNtfMZpnZmGLnbzOzXDObZ2YDi50/KXAu18xuDVddceFqWERERKQ6iI2JpW3DtizYuMDXOsysHzAY6OacyzOzJoHznYBzgM5Ac+AzM8sM3PYUcAKwAphsZuOdc7NDXZsCp4iIiEgFtWvYjgW/+hs4gRHAg865PADn3LrA+cHAm4Hzi80sFzgy8F2uc24RgJm9Gbg25IFTQ+oiIiIiFZSZnEnuxlwKCgsq0kycmU0pdgwvaxnAMWb2g5l9aWY9A+dTgeXFrlsROFfa+ZBTD6eIiIhIBWUmZ5JXkMfyrctpldiqvM3kO+eyDnaBmX0GpJTw1R14ua4h0BvoCYwzs9blLSaUFDhFREREKigz2Xslcv6v8ysSOA/JOTegtO/MbATwtnPOAT+aWSHQCFgJpBW7tEXgHAc5H1IaUhcRERGpoHYN2wFe4PTRu0A/gMCkoJrABmA8cI6Z1TKzDKAd8CMwGWhnZhlmVhNvYtH4cBSmHk4RERGRCkqpl0K9mvX8njj0IvCimc0E9gAXBno7Z5nZOLzJQPnAlc65AgAzuwr4GIgFXnTOzQpHYQqcIiIiIhVkZmQmZzJ/o389nM65PcD5pXw3GhhdwvkJwIQwl6YhdREREZFQyEzO9HtIPWopcIqIiIiEQLuG7ViyeQl5+Xl+lxJ1FDhFREREQiAzOZNCV8iiTYv8LiXqKHCKiIiIhEDR0kh+b3EZjRQ4RUREREIgSpZGikoKnCIiIiIhkBSfRKM6jRQ4S6DAKSIiIhIimqleMgVOERERkRBR4CyZAqeIiIhIiGQ2zGT19tVs37Pd71KiigKniIiISIi0S/YmDvm8xWXUUeAUERERCZGipZE0rL4/BU4RERGREGnbsC2gwHkgBU4RERGREKlTow5pDdKYv1GBszgFThEREZEQapfcTu9wHkCBU0RERCSEMhtmMu/XeTjn/C4laihwioiIiIRQu+R2bN69mY27NvpdStRQ4BQREREJoTZJbQBYuGmhz5VEDwVOERERkRAqmqmeuzHX50qihwKniIiISAi1TmoNwMKN6uEsosApIiIiEkLxNeJJrZ9K7ib1cBZR4BQREREJsTYN26iHsxgFThEREZEQa5vUVu9wFqPAKSIiIhJibRq2Ye2OtWzfs93vUqKCAqeIiIhIiBXNVNewukeBU0RERCTEtBbn/hQ4RUREREKsTUMvcOo9To8Cp4iIiEiIJdZOJDk+WUPqAQqcIiIiImHQtmFbDakHKHCKiIiIhEGbhm00pB6gwCkiIiISBm2T2rJ863Ly8vP8LsV3CpwiIiIiYdCmYRsKXSFLNi/xuxTfKXCKiIiIhMH/1uLUe5wKnCIiIiLhULQWp97jVOAUERERCYsmdZtQr2Y9LY2EAqeIiIhIWJgZbZLakLtJPZwKnCIiIiJh0rZhW/VwosApIiIiEjZtktqwaNMiCgoL/C7FVwqcIiIiImHStmFb9hbuZcXWFX6X4isFThEREZEwadNQM9VBgVNEREQkbLQWp0eBU0RERCRMUuunUjO2ZrWfOKTAKSIiIhImsTGxpCeks3jzYr9L8VXUBU4z625m35vZNDObYmZHBs6bmT1hZrlmNsPMDve7VhEREZFDyUjKYNGmRX6X4auoC5zAGCDHOdcduCvwGeBkoF3gGA484095IiIiIsFrndhaPZx+F1ACBzQI/JwArAr8PBh41Xm+BxLNrJkfBYqIiIgEKyMpg427NrJl9xa/S/GNOef8rmE/ZtYR+BgwvEB8tHNuqZl9ADzonPsmcN3nwC3OuSkH3D8crweUuLi4Iz799NOI1i8SrbZv3069evUqXdsVEa11VTXR/HuO5tqqkmj9PUdLXZPWTyJndg4vHPECbeu1LfW6fv367XTO1Y1gaRET58dDzewzIKWEr+4A+gPXO+feMrOzgL8DA4Jt2zn3PPA8QN26dV3fvn0rXrBIFTBp0iTC9c9DONuuiGitq6qJ5t9zNNdWlUTr7zla6qq/qj45s3NIbpNM347+1+MHXwKnc67UAGlmrwLXBj7+C/hb4OeVQFqxS1sEzomIiIhErYykDIBq/R5nNL7DuQo4LvDz8cCCwM/jgQsCs9V7A1ucc6v9KFBEREQkWEm1k2hQq0G1nqnuSw/nIVwGPG5mccBuAu9jAhOAU4BcYCfwJ3/KExEREQmemdE6qXrPVI+6wBmYFHRECecdcGXkKxIRERGpmIzEDOZumOt3Gb6JxiF1ERERkSolIzGDxZsXE22rA0WKAqeIiIhImLVOas3u/N2s2b4mbM8ws38GdmqcZmZLzGxase9uC+zWOM/MBhY7f1LgXK6Z3Rqu2qJuSF1ERESkqik+U71Z/fDsW+OcO7voZzN7BNgS+LkTcA7QGWgOfGZmmYFLnwJOAFYAk81svHNudqhrUw+niIiISJhlJHqBMxIz1c3MgLOAfwRODQbedM7lOecW403APjJw5DrnFjnn9gBvBq4NOQVOERERkTBrldgKgMWbDjpTPc7MphQ7hh/s4oM4BljrnCtaWjIVWF7s+xWBc6WdDzkNqYuIiIiEWXyNeJrVa3aopZHynXNZB7vgYLs1OufeC/x8Lvt6N6OCAqeIiIhIBGQkZVR4SP1guzUCBNYxH8r+S0webLfGiOziqCF1ERERkQiI0OLvA4C5zrkVxc6NB84xs1pmlgG0A34EJgPtzCzDzGriTSwaH46iFDhFREREIiAjMYMVW1ewp2BPOB9zDgcMpzvnZgHjgNnAf4ArnXMFzrl84CrgY2AOMC5wbchpSF1EREQkAjISMyh0hSzbsoy2DduG5RnOuYtKOT8aGF3C+Ql424eHlXo4RURERCKgdVJr4JAz1askBU4RERGRCCi++Ht1o8ApIiIiEgGp9VOpEVNDPZwiIiIiEh6xMbGkJ6azaHP4dxuKNgqcIiIiIhGSkZihHk4RERERCZ8IrcUZdRQ4RURERCKkVWIrNuzcwPY92/0uJaIUOEVEREQipFViKwCWbl7qbyERpsApIiIiEiHpCekALN2iwCkiIiIiYZCe6AXOJZuX+FtIhClwioiIiERISr0UasbW1JC6iIiIiIRHjMXQMqGlhtRFREREJHzSExFfIqwAAA0gSURBVNI1pC4iIiIi4ZOekK4eThEREREJn/TEdNZsX8Pu/N1+lxIxCpwiIiIiEVS0FueyLcv8LSSCFDhFREREIuh/a3FWo5nqCpwiIiIiEVS0Fmd1eo9TgVNEREQkglo0aEGsxaqHU0RERETCIy4mjtQGqSzZssTvUiJGgVNEREQkwtIT0tXDKSIiIiLhk55YvdbiVOAUERERibBWCa1YsXUFewv2+l1KRChwioiIiERYemI6ha6QldtW+l1KRChwioiIiERYdVuLU4FTREREJMKq21qcCpwiIiIiEdYyoSUASzYv8beQCFHgFBEREYmw2nG1SamXoiF1EREREQmf9ITqszSSAqeIiIiID9IT0zWkLiIiIiLh0yqhFcu3LqfQFfpdStgpcIqIiIj4ID0xnT0Fe1izfY3fpYSdAqeIiIiID4rW4qwOw+oKnCIiIiI++N9anNVgproCp4iIiIgP/rfbUDWYqa7AKSIiIuKD+rXqk1Q7iWVblvldStgpcIqIiIj4pGVCS5ZvXe53GWGnwCkiIiLik7SENPVwioiIiEj4tGzQUoFTRERERMKnZUJLNu/ezLa8bX6XElYKnCIiIiI+SUtIA6jy73EqcIqIiIj4pGVCSwCWb1HgFBEREZEwKAqcVf09TgVOEREREZ80r9+cGItR4BQRERGR8IiLiaN5/eZ6h1NEREREwqdlQtVfGkmBU0RERMRHaQ3S1MMpIiIiIuHTMqGlZqmLiIiISPikNUgjryDP7zLCSoFT/r+9+4+9q77rOP58pV2kGWUU3CbrNIuzyxwGKhRG1Gy4YQETLVMc00w6tgxjNiNLtgRDHOL+MFH+kTGJhF8jmWM/DLFmJqVMG8KU0cLaDhTWzhGlMGtShDCQWfb2j/tpdvNdv1++3+895977vX0+kpOe8znnfM77fj43p+/vPT8+kiRpgo6+GmmWmXBKkiRNkAmnJEmSenV0eMtZZsIpSZI0QaeuOZU1q9dMOoxemXBKkiRNUJJOLqsn2ZjkgSR7kuxOcm4rT5IbkhxIsi/JWUP7bE2yv01bRw5iHiackiRJE9bRZfU/B66rqo3AJ9sywMXAhjZdCdwEkOQU4Frg7cC5wLVJ1nURyFwmnJIkSRP2Uyd18uBQASe1+dcAT7X5LcCdNfAAcHKS04ALgR1VdbiqngF2ABd1Echcq/uoVJIkSYvXLqmvTrJ7qPjmqrp5CdVcBWxPcj2DHxV/oZWvB4bfLP9kK5uvvHMmnJIkSRPWLqkfqapNC22X5F7gJ46x6hrg3cDHqupvk7wXuBW4oOtYl8OEU5IkacLevO7Ni9ququZNIJPcCfxhW/wScEubPwgM3yT6xlZ2EDh/TvnORQWyRN7DKUmSNGHvfNM7u6jmKeBoRe8C9rf5bcDl7Wn184Bnq+ppYDuwOcm69rDQ5lbWOX/hlCRJmg0fBv4yyWrgfxk8kQ7wD8CvAgeAF4ArAKrqcJJPAbvadn9aVYf7CMyEU5IkaQZU1f3A2ccoL+Aj8+xzG3Bbz6F5SV2SJEn9MuGUJElSr0w4JUmS1CsTTkmSJPXKhFOSJEm9MuGUJElSr0w4JUmS1CsTTkmSJPXKhFOSJEm9MuGUJElSr0w4JUmS1CsTTkmSJPXKhFOSJEm9MuGUJElSr0w4JUmS1CsTTkmSJPXKhFOSJEm9MuGUJElSryaScCb5rSSPJvlBkk1z1v1RkgNJHk9y4VD5Ra3sQJKrxx+1JEmSlmNSv3A+AvwGcN9wYZK3Ae8DTgcuAv4qyaokq4DPABcDbwN+u20rSZKkKbd6Egetqn8DSDJ31Rbgrqp6CfhOkgPAuW3dgar697bfXW3bfx1PxJIkSVquiSScC1gPPDC0/GQrA/jPOeVvP1YFSa4ErmyLleTFroPsyCrg5Smte6n7L3b7xWy30DbLXTet+op5vnpXA0dG2H8hXdU9yvpjrVtsXJMwS+eALr9bXZ8DjsfvwLj7HyZ/DpiV/l8ziUDGoqp6mYB7GVw6nzttGdpmJ7BpaPlG4P1Dy7cCl7bplqHy3wVu7Cv2cUzAzdNa91L3X+z2i9luoW2Wu25ap75inq9eYHdfcXVV9yjrj7VusXHNUv93UfcyzgGdfbe6Pgccj9+Bcfd/l9+B5a63/6d/6u0Xzqq6YBm7HQR+cmj5ja2MBcpXqr+f4rqXuv9it1/Mdgtts9x106qvmMfd/13WPcr6lfYdmKVzQJf1eg6YfL0r8Rxg/0+5tCx7MgdPdgIfr6rdbfl04G8Y3Lf5BuCrwAYgwLeAdzNINHcBv1NVj04gbGlFSrK7qja98pbTVfcopjWuWTPN7TzNsc2SaW3naY3reDSReziTvAf4NPBa4CtJ9lTVhVX1aJIvMngY6Ajwkap6ue3zUWA7g3sebjPZlJbs5hVa9yimNa5ZM83tPM2xzZJpbedpjeu4M9FfOCVJkjT7HGlIkiRJvTLhlCRJUq9MOKUZk+SEJA8m2duGkL2uld/ayvYl+XKSE5dZ/xNJvplkT5KjD/ydkmRHkv3t33VdfqYFYrktyaEkjwyVHTOWDNzQhsfdl+SsccQ4K5bS7322dVd9nmRr235/kq1dxTdLuurzLtq6735Pcnb7rAfavj8yMo1GY8IpzZ6XgHdV1ZnARuCiJOcBH6uqM6vqDOA/gI+OcIxfrqqNQ09/Xg18tao2MHi7xNUj1L0UdzAYBnfYfLFczOCtFxsYDA5x05hinCWL7fc+2/oORuzzJKcA1zIYQORc4Npx/ZG0Ao3U5x229R302+83AR8e2m/usTQiE05pxtTA823xVW2qqnoOBn/9MxjNossnBrcAn23znwUu6bDueVXVfcDhRcayBbiztc8DwMlJThtHnDNs7G3dUZ9fCOyoqsNV9QywAxOMxZpIW/fZ723dSVX1QA2epL6TMZ3DjicmnNIMSrIqyR7gEIMT7Ndb+e3Ad4G3Mng12XIUcE+ShzIYShbg9VX1dJv/LvD65Uc/svliWc+PDpG7Hi3WUvp93G291Dj8LixOF33eZ1t3Fcv6Nt9HjGqmbSx1SR1o76/dmORk4O4kP1dVj1TVFUlWMUg2LwNuX0b1v1RVB5O8DtiR5LE5x64kU/G+tWmKZQasiH6fljhmxIroc5iuWHRs/sIpzbCq+h/gnxi6hNWS0buA31xmnQfbv4eAuxncC/VfRy+Ztn8PjRb5SOaLZaGhc/UKltjv427rpcbhd2EROurzPtu6q1gOtvk+YlRjwinNmCSvbb9skmQN8CvA40l+ppUF+HXgsflrmbfuVydZe3Qe2Aw8AmwDjj7xuRX4u1E/xwjmi2UbcHl7gvU84Nmhy3FawDL6fdxtvdQ4tgObk6xrD41sbmVqOuzzPtu6k1jauueSnNfOj5cz2XPYbKoqJyenGZqAM4BvAPsY/AfxSQZ/XH4N+GYr+xyDm+SXWvdPA3vb9ChwTSs/lcFTovuBe4FTxvRZPw88Dfwfg/uuPjRfLECAzwDfbu2wadJ9tVKmpfZ7n23dVZ8DHwQOtOmKSbfxtE1d9nkXbd13vwOb2rnx28CNtJEYnbqbHNpSkiRJvfKSuiRJknplwilJkqRemXBKkiSpVyackiRJ6pUJpyRJknrlSEOSZkqSlxm8CuWoS6rqiQmFI0kCX4skabYkeb6qTlxg/eqqOjLOmCTpeOcldUkzL8kHkmxL8o8MXhRNkk8k2ZVkX5Lrhra9Jsm3ktyf5PNJPt7KdybZ1OZ/PMkTbX5Vkr8Yquv3Wvn5bZ8vJ3ksyefaKCYkOSfJPyfZm+TBJGuT3Jdk41Ac9yc5c1xtJEl98pK6pFmzJsmeNv+dqnpPmz8LOKOqDifZDGxgMDZ0gG1J3gF8D3gfsJHB+fFh4KFXON6HGAydd06SHwO+luSetu7ngdOBpxiM9PSLSR4EvgBcVlW7kpwEvAjcCnwAuCrJW4ATqmrvSC0hSVPChFPSrHmxqjYeo3xHVR1u85vb9I22fCKDBHQtcHdVvQCQZNsijrcZOCPJpW35Na2u7wMPVtWTra49wJuAZ4Gnq2oXQFU919Z/CfjjJJ9gMPzeHYv9wJI07Uw4JR0vvjc0H+DPquqvhzdIctUC+x/hh7chnTCnrj+oqu1z6jofeGmo6GUWOOdW1QtJdgBbgPcCZy8QiyStKN7DKel4tB34YJITAZKsT/I64D7gkiRrkqwFfm1onyf4YRJ46Zy6fj/Jq1pdb0ny6gWO/ThwWpJz2vZrkxxNRG8BbgB2VdUzI31CSZoi/sIp6bhTVfck+VngX9pzPM8D76+qh5N8AdgLHAJ2De12PfDFJFcCXxkqv4XBpfKH20NB/w1cssCxv5/kMuDTSdYwuH/zAuD5qnooyXPA7R19VEmaCr4WSZLmkeRPGCSC14/peG8AdgJvraofjOOYkjQOXlKXpCmQ5HLg68A1JpuSZo2/cEqSJKlX/sIpSZKkXplwSpIkqVcmnJIkSeqVCackSZJ6ZcIpSZKkXv0/yVJ/jUqEsMsAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "w, h = signal.freqz(fir, worN=2**13)\n", "x = w * sr * 1.0 / (2 * np.pi)\n", "plt.figure(figsize=(10,10))\n", "plt.title(\"Frequency response of impulse response (complex)\")\n", "plt.xscale('log')\n", "plt.grid(True)\n", "plt.ylabel('Gain')\n", "plt.xlabel('Frequency')\n", "plt.xlim((1, sr/2))\n", "plt.ylim((-100, 10))\n", "plt.xticks(xticks, xticks)\n", "\n", "freqz_dB = 20 * np.log10(abs(h))\n", "expected_dB = -20 * np.log10(loss_m)\n", "plt.plot(x, 20 * np.log10(np.abs(h)), 'b', label=\"freqz\")\n", "plt.plot(f_m, -20 * np.log10(loss_m), 'r', label=\"expected\")\n", "plt.legend(bbox_to_anchor=(1, 1), loc='upper right', borderaxespad=1, fontsize=11)\n", "print(len(h) / np.sum(np.abs(h)))\n", "\n", "error = np.abs(freqz_dB- expected_dB)\n", "print('Max Error', np.max(error), 'dB', 'at', x[np.argmax(error)], 'Hz')\n", "print('MSE', 20*np.log10(np.sqrt(np.mean(np.power(10, error / 20)**2))), 'dB')\n", "\n", "ax2 = plt.twinx()\n", "angles = np.unwrap(np.angle(h))\n", "ax2.plot(x, angles, 'g')\n", "ax2.set_ylabel('Angle (radians)', color='g')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# JSON" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.0, -4.959127400394614e-09, -1.984185008657713e-08, -4.465219102106621e-08, -7.942086416995453e-08, -1.2414527018542176e-07, -1.7889755019734332e-07, -2.4365250187244336e-07, -3.1853981026855327e-07, -4.034956754073518e-07, -4.987235258865907e-07, -6.04104936302943e-07, -7.199333812793213e-07, -8.460197299968095e-07, -9.82763928783579e-07, -1.1298899900745799e-06, -1.2879209015173587e-06, -1.4564775768222127e-06, -1.6362227797123846e-06, -1.8266579731376908e-06, -2.0286026184684197e-06, -2.241422246173838e-06, -2.4661101459249463e-06, -2.701879284430775e-06, -2.949914142313416e-06, -3.209258321477601e-06, -3.4813051117878885e-06, -3.7649117590110234e-06, -4.061698260547121e-06, -4.370318303494741e-06, -4.692636796376631e-06, -5.027086432512519e-06, -5.3757955666084226e-06, -5.73695820863928e-06, -6.11298505329063e-06, -6.501813460757424e-06, -6.906155746604949e-06, -7.323674354882317e-06, -7.757402919627947e-06, -8.204710378781777e-06, -8.668971830077653e-06, -9.147243767364515e-06, -9.64326337730666e-06, -1.0153755398442741e-05, -1.0682840245601535e-05, -1.1226891191535096e-05, -1.1790433568125216e-05, -1.2369469045634502e-05, -1.2968950149116858e-05, -1.3584486355499139e-05, -1.4221480285874031e-05, -1.4875128149902713e-05, -1.5551306236107152e-05, -1.6244775899739317e-05, -1.6961911380806126e-05, -1.7697017048562327e-05, -1.8456990137882953e-05, -1.923565532345765e-05, -2.0040458687275477e-05, -2.0864721890036892e-05, -2.171646657448084e-05, -2.2588487421751867e-05, -2.3489409266228022e-05, -2.4411475160947054e-05, -2.536394173953318e-05, -2.6338475057037535e-05, -2.7344993193962946e-05, -2.837455907607055e-05, -2.9437782986066387e-05, -3.052509778586176e-05, -3.164783789562299e-05, -3.2795778331889025e-05, -3.398101084484085e-05, -3.5192623931551035e-05, -3.644350120491019e-05, -3.772201502819713e-05, -3.904187683880547e-05, -4.039071226188886e-05, -4.178309804581245e-05, -4.3205881431311285e-05, -4.4674543591735995e-05, -4.617512064092235e-05, -4.772403902962558e-05, -4.9306489849605965e-05, -5.093988753946679e-05, -5.260854306214408e-05, -5.433090354192379e-05, -5.609036343328343e-05, -5.7906449371470953e-05, -5.976160158633649e-05, -6.16764753286691e-05, -6.363251748493781e-05, -6.565156347032271e-05, -6.771402623828788e-05, -6.984297554103291e-05, -7.201774826802129e-05, -7.426270550056342e-05, -7.655606431931352e-05, -7.892353715999775e-05, -8.134217586166961e-05, -8.383910750683476e-05, -8.639017149674702e-05, -8.902397637658617e-05, -9.171510007392595e-05, -9.449370321785316e-05, -9.733305131033501e-05, -0.00010026493180128194, -0.00010326124482353178, -0.00010635548384306482, -0.00010951812861477537, -0.00011278446265340029, -0.0001161234881916131, -0.00011957236808368872, -0.0001230985676953846, -0.0001267412242372491, -0.00013046620460585286, -0.00013431472163271082, -0.00013825097983880016, -0.00014231837577316416, -0.0001464793853387014, -0.00015077970438569102, -0.00015518001160764344, -0.0001597284259645241, -0.0001643837580128397, -0.00016919668268836193, -0.0001741240691918132, -0.00017921929130233424, -0.00018443720144192387, -0.00018983402617491624, -0.00019536252365793521, -0.00020108193948054572, -0.00020694285819144672, -0.00021300772434456868, -0.00021922486797551152, -0.00022566012784981947, -0.00023225949742219535, -0.00023909242207963662, -0.0002461024759991719, -0.0002533629429060038, -0.0002608148950738784, -0.00026853570807728374, -0.0002764638706390709, -0.00028468112838272715, -0.0002931233069731303, -0.00030187682834833846, -0.0003108747792266623, -0.00032020859614325097, -0.0003298085564652063, -0.00033977148625734797, -0.0003500247909549513, -0.00036067110317874275, -0.0003716349045942219, -0.0003830250999040192, -0.0003947632095296834, -0.00040696493182896566, -0.0004195488073384954, -0.0004326379145897345, -0.0004461478199147814, -0.0004602096439744591, -0.0004747360156012123, -0.0004898668473424183, -0.0005055119064009683, -0.0005218207493234381, -0.0005387004065441233, -0.000556311050173728, -0.0005745571595068789, -0.0005936106332608724, -0.0006133736599924196, -0.0006340311389062989, -0.0006554833194958214, -0.000677929565279607, -0.0007012686488595508, -0.0007257160830749518, -0.0007511697584014124, -0.0007778632788530487, -0.0008056944050980714, -0.0008349170712754429, -0.0008654298456843472, -0.0008975095733483262, -0.0009310567822648585, -0.0009663741995441969, -0.001003365709758295, -0.0010423633350888492, -0.0010832759870345252, -0.001126468889455813, -0.0011718579482510798, -0.0012198460378607735, -0.0012703583363853118, -0.0013238403997695848, -0.0013802292611085646, -0.0014400187928258776, -0.0015031607350125637, -0.0015702035069642276, -0.0016411165936085035, -0.0017165097288590133, -0.0017963732108215885, -0.0018813852588352186, -0.0019715598214604555, -0.0020676509290944536, -0.00216969837151045, -0.0022785390559375467, -0.002394239522564602, -0.0025177257078925746, -0.002649089585759948, -0.0027893503700483447, -0.0029386205499808216, -0.003098013498562655, -0.0032676517302780254, -0.0034487381806823933, -0.0036413865440421945, -0.003846876244409835, -0.004065281069918991, -0.004297931183878357, -0.004544811778141889, -0.004807259531427878, -0.005085097415542724, -0.005379598011402318, -0.005690313599881178, -0.006018344991135052, -0.006362817190679591, -0.006724500305447768, -0.0071018698222003315, -0.007495136332607807, -0.007901815016327852, -0.008321234275601063, -0.008749520309226853, -0.009184672621169019, -0.00962084511552893, -0.010054100939682292, -0.010475839221681606, -0.010879376145346589, -0.011252323265788036, -0.011584191483222876, -0.011857468357561326, -0.012056515755441801, -0.012157012994755315, -0.012136532899918333, -0.011961904332108548, -0.011602032884269971, -0.011012572898958151, -0.01015185955068889, -0.008962036205705385, -0.0073894848664154515, -0.005361172014796007, -0.0028119141471641936, 0.00034593471974791226, 0.004184191601468877, 0.00879886184843542, 0.014252671384170117, 0.02063024802919053, 0.0279437068941373, 0.03621433897973543, 0.04529488283578011, 0.055007627157714865, 0.06471525969702493, 0.07365598535160074, 0.07889769954583957, 0.07365598535160074, 0.06471525969702493, 0.055007627157714865, 0.04529488283578011, 0.036214338979735444, 0.027943706894137305, 0.02063024802919053, 0.014252671384170117, 0.00879886184843542, 0.0041841916014688785, 0.00034593471974791226, -0.0028119141471641927, -0.0053611720147960056, -0.0073894848664154515, -0.008962036205705383, -0.01015185955068889, -0.01101257289895815, -0.01160203288426997, -0.011961904332108548, -0.01213653289991833, -0.012157012994755316, -0.012056515755441801, -0.011857468357561327, -0.011584191483222876, -0.011252323265788034, -0.010879376145346587, -0.010475839221681608, -0.010054100939682294, -0.00962084511552893, -0.009184672621169017, -0.008749520309226853, -0.008321234275601063, -0.007901815016327852, -0.007495136332607806, -0.007101869822200331, -0.00672450030544777, -0.00636281719067959, -0.006018344991135053, -0.005690313599881178, -0.005379598011402316, -0.005085097415542724, -0.004807259531427877, -0.004544811778141889, -0.004297931183878357, -0.004065281069918991, -0.0038468762444098365, -0.003641386544042195, -0.0034487381806823933, -0.0032676517302780263, -0.003098013498562656, -0.002938620549980821, -0.0027893503700483434, -0.002649089585759948, -0.0025177257078925746, -0.0023942395225646012, -0.0022785390559375476, -0.0021696983715104525, -0.0020676509290944545, -0.001971559821460454, -0.0018813852588352201, -0.001796373210821591, -0.0017165097288590154, -0.0016411165936085026, -0.0015702035069642276, -0.0015031607350125629, -0.0014400187928258776, -0.0013802292611085638, -0.001323840399769585, -0.001270358336385315, -0.0012198460378607743, -0.0011718579482510776, -0.001126468889455814, -0.001083275987034525, -0.0010423633350888485, -0.0010033657097582938, -0.0009663741995441979, -0.0009310567822648593, -0.0008975095733483275, -0.0008654298456843464, -0.0008349170712754427, -0.0008056944050980744, -0.0007778632788530491, -0.000751169758401413, -0.0007257160830749526, -0.0007012686488595511, -0.000677929565279607, -0.000655483319495821, -0.0006340311389062985, -0.0006133736599924213, -0.0005936106332608737, -0.0005745571595068802, -0.000556311050173728, -0.0005387004065441219, -0.0005218207493234377, -0.0005055119064009672, -0.0004898668473424181, -0.00047473601560121337, -0.0004602096439744602, -0.0004461478199147812, -0.00043263791458973504, -0.00041954880733849505, -0.00040696493182896555, -0.00039476320952968355, -0.00038302509990401936, -0.0003716349045942217, -0.0003606711031787416, -0.00035002479095494975, -0.00033977148625734645, -0.00032980855646520466, -0.00032020859614325086, -0.0003108747792266624, -0.000301876828348339, -0.00029312330697312883, -0.00028468112838272476, -0.0002764638706390714, -0.0002685357080772822, -0.00026081489507387813, -0.0002533629429060039, -0.00024610247599917237, -0.0002390924220796362, -0.00023225949742219378, -0.0002256601278498179, -0.0002192248679755088, -0.00021300772434456683, -0.00020694285819144662, -0.00020108193948054423, -0.0001953625236579314, -0.00018983402617491624, -0.00018443720144192005, -0.00017921929130233275, -0.00017412406919181656, -0.00016919668268836356, -0.00016438375801284047, -0.00015972842596452427, -0.0001551800116076436, -0.00015077970438569062, -0.00014647938533870016, -0.00014231837577316492, -0.00013825097983879948, -0.00013431472163271034, -0.00013046620460585204, -0.000126741224237251, -0.000123098567695384, -0.00011957236808368837, -0.00011612348819161754, -0.00011278446265340105, -0.00010951812861477288, -0.00010635548384306504, -0.00010326124482353281, -0.00010026493180128254, -9.733305131033398e-05, -9.449370321785332e-05, -9.171510007392958e-05, -8.902397637658606e-05, -8.639017149674583e-05, -8.383910750683616e-05, -8.134217586167113e-05, -7.89235371599971e-05, -7.655606431931374e-05, -7.426270550056364e-05, -7.20177482680189e-05, -6.984297554103334e-05, -6.77140262382895e-05, -6.565156347032315e-05, -6.363251748493776e-05, -6.167647532866774e-05, -5.9761601586336437e-05, -5.790644937147106e-05, -5.609036343328126e-05, -5.4330903541922545e-05, -5.2608543062143426e-05, -5.0939887539465975e-05, -4.930648984960613e-05, -4.7724039029625146e-05, -4.6175120640923274e-05, -4.467454359173648e-05, -4.320588143130852e-05, -4.178309804581348e-05, -4.0390712261886906e-05, -3.904187683880422e-05, -3.7722015028197995e-05, -3.644350120491106e-05, -3.519262393155255e-05, -3.398101084484085e-05, -3.279577833188794e-05, -3.1647837895624944e-05, -3.052509778586035e-05, -2.943778298606628e-05, -2.8374559076068165e-05, -2.734499319396403e-05, -2.6338475057038728e-05, -2.536394173953307e-05, -2.4411475160948356e-05, -2.3489409266227914e-05, -2.2588487421753168e-05, -2.171646657448225e-05, -2.0864721890038193e-05, -2.0040458687274176e-05, -1.9235655323459385e-05, -1.8456990137882953e-05, -1.7697017048562977e-05, -1.6961911380806776e-05, -1.62447758997404e-05, -1.555130623610672e-05, -1.4875128149901629e-05, -1.422148028587338e-05, -1.3584486355497838e-05, -1.2968950149117075e-05, -1.236946904563602e-05, -1.1790433568125433e-05, -1.1226891191536397e-05, -1.0682840245601968e-05, -1.0153755398442741e-05, -9.64326337730536e-06, -9.147243767363648e-06, -8.668971830077653e-06, -8.204710378782645e-06, -7.757402919626212e-06, -7.323674354881883e-06, -6.906155746604949e-06, -6.501813460758725e-06, -6.1129850532888955e-06, -5.736958208636678e-06, -5.3757955666084226e-06, -5.027086432515121e-06, -4.692636796378366e-06, -4.370318303495609e-06, -4.0616982605479884e-06, -3.764911759010156e-06, -3.481305111789623e-06, -3.2092583214784684e-06, -2.949914142313416e-06, -2.70187928442904e-06, -2.4661101459249463e-06, -2.2414222461747055e-06, -2.0286026184675524e-06, -1.8266579731376908e-06, -1.6362227797115173e-06, -1.4564775768239474e-06, -1.2879209015173587e-06, -1.1298899900719778e-06, -9.827639287853136e-07, -8.460197299963758e-07, -7.199333812791045e-07, -6.041049363040272e-07, -4.987235258878918e-07, -4.034956754082192e-07, -3.1853981026855327e-07, -2.436525018741781e-07, -1.7889755019387388e-07, -1.2414527019236066e-07, -7.942086416995453e-08, -4.465219102106621e-08, -1.984185008657713e-08, -4.959127400394614e-09]\n" ] } ], "source": [ "print(json.dumps(list(map(lambda x: x.real, fir))))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }