{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Density Estimation: Gaussian Mixture Models\n", "\n", "Credits: Forked from [PyCon 2015 Scikit-learn Tutorial](https://github.com/jakevdp/sklearn_pycon2015) by Jake VanderPlas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we'll explore **Gaussian Mixture Models**, which is an unsupervised clustering & density estimation technique.\n", "\n", "We'll start with our standard set of initial imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy import stats\n", "\n", "# use seaborn plotting defaults\n", "import seaborn as sns; sns.set()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducing Gaussian Mixture Models\n", "\n", "We previously saw an example of K-Means, which is a clustering algorithm which is most often fit using an expectation-maximization approach.\n", "\n", "Here we'll consider an extension to this which is suitable for both **clustering** and **density estimation**.\n", "\n", "For example, imagine we have some one-dimensional data in a particular distribution:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "np.random.seed(2)\n", "x = np.concatenate([np.random.normal(0, 2, 2000),\n", " np.random.normal(5, 5, 2000),\n", " np.random.normal(3, 0.5, 600)])\n", "plt.hist(x, 80, normed=True)\n", "plt.xlim(-10, 20);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Gaussian mixture models will allow us to approximate this density:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.mixture import GMM\n", "clf = GMM(4, n_iter=500, random_state=3).fit(x)\n", "xpdf = np.linspace(-10, 20, 1000)\n", "density = np.exp(clf.score(xpdf))\n", "\n", "plt.hist(x, 80, normed=True, alpha=0.5)\n", "plt.plot(xpdf, density, '-r')\n", "plt.xlim(-10, 20);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that this density is fit using a **mixture of Gaussians**, which we can examine by looking at the means_, covars_, and weights_ attributes:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 4.5601338 ],\n", " [ 0.0861325 ],\n", " [ 3.01890623],\n", " [ 6.87627234]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.means_" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 30.34748627],\n", " [ 4.30521863],\n", " [ 0.19750802],\n", " [ 14.78230876]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.covars_" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.27613209, 0.48308463, 0.11612442, 0.12465886])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.weights_" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(x, 80, normed=True, alpha=0.3)\n", "plt.plot(xpdf, density, '-r')\n", "\n", "for i in range(clf.n_components):\n", " pdf = clf.weights_[i] * stats.norm(clf.means_[i, 0],\n", " np.sqrt(clf.covars_[i, 0])).pdf(xpdf)\n", " plt.fill(xpdf, pdf, facecolor='gray',\n", " edgecolor='none', alpha=0.3)\n", "plt.xlim(-10, 20);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These individual Gaussian distributions are fit using an expectation-maximization method, much as in K means, except that rather than explicit cluster assignment, the **posterior probability** is used to compute the weighted mean and covariance.\n", "Somewhat surprisingly, this algorithm **provably** converges to the optimum (though the optimum is not necessarily global)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How many Gaussians?\n", "\n", "Given a model, we can use one of several means to evaluate how well it fits the data.\n", "For example, there is the Aikaki Information Criterion (AIC) and the Bayesian Information Criterion (BIC)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "25696.4735953\n", "25625.7016679\n" ] } ], "source": [ "print(clf.bic(x))\n", "print(clf.aic(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at these as a function of the number of gaussians:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nca59ZiX3bniAWKSCE2csH9M5jltUy2feexw//OXz/ODe57jyvcdx7AINrYvksq6eVP8M74HXqZsS\nXexr7WaoNcpKi8PMrin3hrsDuj4dhGFXbDPGfB+4ABj4hI5/Bq7Fuz6+C/iktbbdGPNt4Ay86+F/\nttZ+yZ+dfgcwC+gBPmCt3WOMOQlvdnoYeMRa+5UR6iyoFdvyzUjt29a2g+ufuZlkJsXlyz/KUdOW\njPlrvPDqPn7wy+cBuPL8ZSxdUDPueseq0L9/uSyf2wZTt32u69La0Tt4kZNEV/916rbOQ4e9AarK\nowdCOl7KonnVlBQ5U+b6dLbV1cVGbJCWXZ0Cpup/tGwZTfs2NG9k5ZrbCIfCfO74S5lXWT/mrzMo\nyN+7jKULJyfI9f3LXfncNgi2fUPdltUf1okuepOHDnuHQw41VSUHJpDFD0wmq6sqpTg6+E6WAvj+\nKcRzQQH8QxxV+57Z8xy3v/ALyiNlXHXi5Uwfw/KsfV7YtI8f/vJ5XBc+895lLJuEINf3L3flc9tg\n4tvX3Zsasie9p9lbNnSo27KKo+FB4Tzw47TKYsKh0d8/XQDfP62dLrnjhOnH0d7Ywd0b7ueGNbdx\n1YlXUFU8tpm1SxfUcOX5x/GDe5/jh798nk+/ZxnHLZq8oXWRfNI37N2U6GZPovOQwG4dZth74ZzK\n/lXIBgZ1rCz/hr2DpBCXKeX0+lNo623jt5t/z8q1t/L5Ey6ltGj0y7MCHDt/Wn+Q33Dfc36Q105Q\nxSK5LZXOsL+1+5CedFOii6ZENz3J9CHHhEMONZUlzJ0ROxDUA5YOPXjYWyaOQlymnLcveButvW08\nvvOv/Oi5O7hi+ceIjGF5VvCC/LP9Qf48V5y3jOWLFeRSmLp7U15velBPevjVyIoj4cHhPOBjzRiH\nvWXiKMRlynEch/eZ82hPdrCm6QV+su5OPrb0Q4Scsf3QOMYP8u/f+xwr73+ey89bxgoFueShTMYl\n0d7T33ve2+KFdaIjyY6mdlo7hl+NbKiw1rB3btDEtimgACZnjKt9yXSSlWtv4+XEq5w2+yTeb94z\nrh8q67c08/1Va0lnXK44bxkrlmQ3yPX9y1251LbO7iRNiW4vqFu62Nv32r93OpU+9Gd5KORQU1ns\nh3PZoKHvungJJdHc7sfl0vdvPDSxTXJaJBzhU8d9mO89czOP7/wrldEY71h41pjPc3RDNZ+7YDnX\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_estimators = np.arange(1, 10)\n", "clfs = [GMM(n, n_iter=1000).fit(x) for n in n_estimators]\n", "bics = [clf.bic(x) for clf in clfs]\n", "aics = [clf.aic(x) for clf in clfs]\n", "\n", "plt.plot(n_estimators, bics, label='BIC')\n", "plt.plot(n_estimators, aics, label='AIC')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It appears that for both the AIC and BIC, 4 components is preferred." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: GMM For Outlier Detection\n", "\n", "GMM is what's known as a **Generative Model**: it's a probabilistic model from which a dataset can be generated.\n", "One thing that generative models can be useful for is **outlier detection**: we can simply evaluate the likelihood of each point under the generative model; the points with a suitably low likelihood (where \"suitable\" is up to your own bias/variance preference) can be labeld outliers.\n", "\n", "Let's take a look at this by defining a new dataset with some outliers:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.random.seed(0)\n", "\n", "# Add 20 outliers\n", "true_outliers = np.sort(np.random.randint(0, len(x), 20))\n", "y = x.copy()\n", "y[true_outliers] += 50 * np.random.randn(20)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\noMjrWZfR5gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "clf = GMM(4, n_iter=500, random_state=0).fit(y)\n", "xpdf = np.linspace(-10, 20, 1000)\n", "density_noise = np.exp(clf.score(xpdf))\n", "\n", "plt.hist(y, 80, normed=True, alpha=0.5)\n", "plt.plot(xpdf, density_noise, '-r')\n", "#plt.xlim(-10, 20);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's evaluate the log-likelihood of each point under the model, and plot these as a function of y:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\naEIN0Kw6hjFKWHe6//VcD3wEeAxwR0rpvhH2LUmSuoYO65TSXcBdfffvBS4vo1GSJOlRLooiSVLm\nDGtJkjJnWEtqBK+HrSYzrCXVntfDVtN51S3VXu/D+b777q24JZI0Hoa1aq3XowK44oor+PjH76i4\nRapCldfD9jrcmgTDWlIjVBGW/V8WW60lA1tjY1ir1vp7VPfcc08jVjiSpEGGtWpncNjR3oyqUuXw\nu6aLYa1acdhRufE9qEnw1C1JkjJnz1q14rCjpGlkWKt2DGlJ08ZhcEmSMmdYS5KUOcNakqTMGdaS\nJGXOsJYkKXOGtbbFawVL6udnwmQZ1tqS1wqW1G87nwmGebkMa0lSqfyCXz4XRdGWXDVMUr9hPxP2\n798HwMrK0bG0q8kMa22LIS2p32afCeuF+f79+zhx4vip2wb2zhjWkqTS+QW/XB6zliSN3crKUebm\n5pmbm7dXPQR71pKkiTCkh2fPuoY8JUKSpothXTOeEiFJ08ewliQpcx6zrhnPeZakjTX189GwrqGm\nvQklqQy9w4S92036rHQYXJKkzNmzliQ1QpMPExrWkqTGaFpI9zgMLklS5gxrSZIyZ1hLkpQ5w1qS\npMwZ1pIkZc6wliQpc4a1JEmZM6wlScqcYS1JUuaGXsEsIp4H/GJK6QXd+z8L/BbwPeBB4MUppZOl\ntFKSpCk2VM86It4J3AzM9G1+N/CclNJVwNeBl47ePEmSNOww+N3Ayzk9rK9KKa12b58N2KuWJKkE\nmw6DR8RB4IaBzdellD4aEVf3b0wpfav7mOcDVwFvLrGdkiRNrZlOpzPUA7th/asppWv7tr0GeD7F\ncPj/bLGL4Z5YkqT6mtn6R85U2iUyI+LNwKXAz6WUvrOdx6yurpX19JXZs2eh9nU0oQawjpw0oQZo\nRh1NqAGaVccwRjl1q9P9j4j4IeAm4HHA30XEZyPi+hH2LUmSuobuWaeU7gLu6t7+FnBuWY2SJEmP\nclEUSZIyZ1hLkpQ5w1qSpMxlGdat1hKt1lLVzZAkKQvZhXWrtcTy8mGWlw8b2JIkkWFYS5Kk05W2\nKEpZDh2681SP+tChOytujSRJ1csurMGQliSpn8PgkiRlzrCWJClzhrUkSZkzrCVJypxhLUlS5gxr\nSZIyZ1hLkpQ5w1qSpMwZ1pIkZc6wliQpc4a1JEmZM6wlScqcYS1JUuYMa0mSMmdYS5KUOcNakqTM\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "log_likelihood = clf.score_samples(y)[0]\n", "plt.plot(y, log_likelihood, '.k');" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "true outliers:\n", "[ 99 537 705 1033 1653 1701 1871 2046 2135 2163 2222 2496 2599 2607 2732\n", " 2893 2897 3264 3468 4373]\n", "\n", "detected outliers:\n", "[ 537 705 1653 2046 2135 2163 2496 2732 2893 2897 3067 3468 4373]\n" ] } ], "source": [ "detected_outliers = np.where(log_likelihood < -9)[0]\n", "\n", "print(\"true outliers:\")\n", "print(true_outliers)\n", "print(\"\\ndetected outliers:\")\n", "print(detected_outliers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The algorithm misses a few of these points, which is to be expected (some of the \"outliers\" actually land in the middle of the distribution!)\n", "\n", "Here are the outliers that were missed:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{99, 1033, 1701, 1871, 2222, 2599, 2607, 3264}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(true_outliers) - set(detected_outliers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here are the non-outliers which were spuriously labeled outliers:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{3067}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(detected_outliers) - set(true_outliers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we should note that although all of the above is done in one dimension, GMM does generalize to multiple dimensions, as we'll see in the breakout session." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other Density Estimators\n", "\n", "The other main density estimator that you might find useful is *Kernel Density Estimation*, which is available via sklearn.neighbors.KernelDensity. In some ways, this can be thought of as a generalization of GMM where there is a gaussian placed at the location of *every* training point!" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAesAAAFVCAYAAADPM8ekAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmcFPWd//FX3zPT3XMfwAy3UCAKIqgIiifGqESziUlM\nslk1hzG7McZsou4mWc3uJptfYjZrspqsMfehkXjjgXgLAiJyQyE3A3MfPdM9R08fvz9qGIdrDuie\n7pl+Px8PHtL9rar+TDnDe77f+ta3bPF4HBEREUlf9lQXICIiIn1TWIuIiKQ5hbWIiEiaU1iLiIik\nOYW1iIhImlNYi4iIpDlnX42GYdiBB4CZQCfwBdM0dx21TQ7wEnCzaZpm9z6/AqYCMeCLpmmayShe\nREQkE/TXs74OcJumOR+4C7ivd6NhGHOBN4CJwOEbtq8AvKZpXgB8D/jPhFYsIiKSYfoL6wXACwCm\naa4G5h7V7sYK9N4953YgzzAMG5AHhBNTqoiISGbqcxgcyAVaer2OGoZhN00zBmCa5koAwzB677MC\nyAK2A0XA4oRVKyIikoH6C+sWwN/rdU9Q9+FbwArTNP/VMIwK4BXDMM4wTfOEPex4PB632WwDq1hE\nRGT4G1To9RfWK7B6xo8ZhjEP2DiAY3r5oDfeBLgAR1872Gw26upaB3DozFZS4td5GiCdq4HReRo4\nnauB0XkamJISf/8b9dJfWD8BLDIMY0X365sMw7gB8Jmm+dAJ9vkR8BvDMN7ECuq7TdNsH1RVIiIi\n0qPPsDZNMw7cetTbO46z3SW9/t4MfDQh1YmIiIgWRREREUl3CmsREZE0p7AWERFJcwprERGRNKew\nFhERSXMKaxERkTSnsBYRkYx08GAl3/72t7jllpv42tdu5Vvfup09e3bz8MO/5KKLzqO+vr5n26am\nRi666Dyef/5ZqqoOceGF5/DHP/72iOPdeefX+epXb0lKrf0tiiIiIpJU99zj4ZlnEhtHixdHuOee\nzhO2d3R0cPfd3+DOO7/DjBlnALBt2xZ+8pMfMnv2HMaOHccrr7zEJz5xAwAvv7yMUaNGA9aqm+Xl\nFbz++qt89rM3AhAINHPwYCWFhUUJ/ToOU89aREQyzooVbzBnzrk9QQ0wffoMfvazXwJw6aWLePXV\nl3raVq58iwULLux5nZeXT0FBIfv27QXglVeWc8kllxOPx0kG9axFRCSl7rmns89ecDJUVR2ivLy8\n5/Xdd3+DYDBIQ0M9s2bNxjCmk5WVzaFDB4nFYpSWluF2e444xuWXf4jly1/k85+/hbfeeoNbbvkK\n69evS0q96lmLiEjGKS0dRVXVoZ7XP/jBffzsZ7/E788lGo0CH4TxSy+9wBVXfPiYY1x44UWsWPEG\n1dVVFBUVkZWVlbR6FdYiIpJxLrzwItauXcOWLZt73qusPEBdXW3P64svvpQ333ydjRvXM3v2nGOO\nkZ2dzdix43nggftZtOhKkjQCDmgYXEREMlB2djY//OF/8+CDP6OhoZ5oNIrD4eC22+5g9+5d2Gw2\nvF4fZWVllJePxWY78vHTh19fccWH+fGPf8C9936f/fv3HbNdotiSdTF8kOJ6/mn/9JzYgdO5Ghid\np4HTuRoYnaeBKSnxDyrVNQwuIiKS5hTWIiIiaU5hLSIikuYU1iIiImlOYS0iIpLmFNYiKRSJwC23\nZPHJT2bT2JjqakQkXek+a5EUevxxJ0884QLggQfcfPvb4RRXJJIZ1q1by1NPPc69934fgFdfXc5v\nfvMQBQWFNDc3k5trrWSWl5fPbbfdwejRY3j44V+yfPmLFBeX9BznnHPO43Ofuznp9SqsRVLomWdc\nR/xdYS2ZyHvPt/E882RCj9m5+DpC9/zHgLZ96aUXePTRP/M///MLHnzwfj7zmX/g3HPnAbBhw3q+\n+927eOih32Oz2fjUpz7Ltdf+XUJrHQgNg4ukSDwO775rZ9y4GIsWRdizx051dXJWPxKRIx1eaeyF\nF5by17/+hZ/+9AEKCgoAjnhy1qxZZ+F0Ojl4sPKYtqGknrVIitTW2qivt3PVVV3MmhXjpZecbNxo\nZ9SoaKpLExlSoXv+Y8C94ESJx+Ns3Lie+vo6WltbiUQiJ9y2oKCI5uZmAB599E+8/PKynrbPfe5m\nzjnnvKTXq7AWSZHNm62BrRkzYiyueZixbGLXxv+EK1z97CkiiVBUVMxPf/oATz/9BN/73ne47777\nAY5Z37u6uorS0lIADYOLZJotWxwAXOhdy/m//kdu5RdMffb+FFclkjnKyytwuVx87GOfwOVy8rvf\nPQwcOdT9zjuryM7OpqSk9Ji2odRnz9owDDvwADAT6AS+YJrmrqO2yQFeAm42TdPsfu9uYDHgAn5u\nmubvklC7yLAVjUZ5770uwMOsTb/teX/2nidpbLyRvLx8HA5HyuoTGelsNtsRPei77/43br75Mzgc\nDkxzO3/842+x2x14vV7uvfcHPdsdPQw+btx4vvnNf0l6vf0Ng18HuE3TnG8YxnnAfd3vAWAYxlzg\nF8AYIN793sXA+d37eIFvJaNwkeEsEGhmw5Y8HI4Y2atfIeJysy4+m3PbV3Pf029zzUfOp7CwKNVl\nioxYs2fPOeIZ1fn5+Tz++NI+97n55i9x881fSnZpx9XfMPgC4AUA0zRXA3OPandjhbfZ670PAZsM\nw3gSeAZ4OjGliowsgaYcyouaKTq0l7opZ7Ih17pVZExjfYorE5F0019Y5wItvV5Hu4fGATBNc6Vp\nmpVH7VMMzAE+DnwZ+FMiChUZSTo7bbQGPJzvW4c9FqN+0nSqiqcAkLPzYIqrE5F0098weAvg7/Xa\nbppmrJ996oFtpmlGgB2GYXQYhlFsmmaf3YWSEn9fzdJN52ng0vlc7dlj3SYy17MZgODU02ntOA12\nQEHlQYqL/RQVDU396Xye0o3O1cDoPCVef2G9Amui2GOGYcwDNg7gmG8BXwN+YhjGGMALNPS3U11d\n6wAOndlKSvw6TwOU7udqy5ZOACZHrStItcXlhEZZs02zq6upr28lFnMnvY50P0/pROdqYHSeBmaw\nv9D0F9ZPAIsMw1jR/fomwzBuAHymaT50vB1M01xqGMZCwzDWYA2zf8U0zdTMdRdJU4cOWT96E8I7\nAQiMGY8zmEs7WeQ3V9Pf8JWIZJY+w7o7ZG896u0dx9nukqNe33nqpYmMXIfDurx1Nx2+PDr9+RQU\nRdjHeMpCh6hNcX0ikl60KIpICtTUOHAQoahpP4Ex4wHIzY9QSQUFXY3Ywp0prlBE0onCWiQF6usd\nTGAvjliEwJhxAPj8EWooA8Chh1uLSC8Ka5EUqKtzMM1lXVFqKRsLgN0Bze5iABwN/c7JFJEMorAW\nSYG6OgdTs3YDECwd0/N+S7a1apmjUWEtIh9QWIsMsWgUGhsdTHbuBaC1ZHRPW8jXvcRojVYxE5EP\nKKxFhlhjo41o1MYE214Agr3Cui23EICug02pKE1E0pTCWmSI1dZaT/qpiB4gZrcTKiztaQsXFAAQ\nOahhcBH5gMJaZIgdDuvR4QO0FZYSd7p62rqKrbCmTmEtIh9QWIsMsdpaG066KO6oOWIIHCBWmg+A\nU7PBRaQXhbXIEKuttVPOQezx2BGTywDcxW5C5OAOKKxF5AMKa5Eh1thoYzz7AAgWHxnWXl+UOkrI\nCdalojQRSVMKa5EhdkRYlxwd1hEaKSS7s+V4u4pIhlJYiwyxpiZOGNY5vijN5JMdCUIkkoryRCQN\nKaxFhlhDg/2491gDeL1WWAPYWgJDXZqIpCmFtcgQa2qCyY7jX7N2ueO02PMAsAUU1iJiUViLDLGm\nJhvjbfto8+cRyco+pj3kygXArp61iHRTWIsMoVgMmhphTOQArUVlx90m5LHC2tbcPJSliUgaU1iL\nDKFAAIrjdXjinbQUjTruNu1ZfgDizepZi4hFYS0yhHrfttVSfPyedUe2D4DOGoW1iFgU1iJDqHdY\nn2gYPOz1Wv9VWItIN4W1yBA6omd9grDu8llhHalXWIuIRWEtMoSamnoPgx//mnXEb4V1tEGrmImI\nRWEtMoQaGvrvWUfyrbBGE8xEpJvCWmQIHe5Zd2V56fT6j7tNvMC699oe0K1bImJRWIsMocPXrDvK\nysFmO+42jjw3ERw4gwprEbEorEWGUEdNC/kEiJSXn3CbHF+EVvw42oNDWJmIpDNnX42GYdiBB4CZ\nQCfwBdM0dx21TQ7wEnCzaZpmr/dLgXeBy0zT3JHowkWGI0/1fgDiY08c1tleK6yzOhXWImLpr2d9\nHeA2TXM+cBdwX+9GwzDmAm8AE4F4r/ddwC+BUEKrFRnm/I1WWEcr+uhZeyME8eEJK6xFxNJfWC8A\nXgAwTXM1MPeodjdWoJtHvf8j4EGgKgE1iowY/uaDAHSNGn3CbbKyu3vWkdahKktE0lx/YZ0L9L7Z\nM9o9NA6AaZorTdOs7L2DYRg3AnWmaS7rfuv4s2hEMkw8DkVtBwCIjD5xWNvt0Obw44l3QlfXUJUn\nImmsz2vWWEHd+/4Su2masX72uQmIG4ZxOXAW8DvDMK41TbOmr51KSo5/G4scSedp4NLtXDU3w5i4\n1bP2nz6FnJ0deL2eY7aLRd2EXV6IQkm2DQqS+3Wk23lKZzpXA6PzlHj9hfUKYDHwmGEY84CN/R3Q\nNM2LDv/dMIxXgVv6C2qAujoN+fWnpMSv8zRA6Xiu9uyxMZYDxLBR6/TS1taC3dF5zHZtbWE6XD7o\ngIa9VcQi/f2Ynrx0PE/pSudqYHSeBmawv9D096/AE8AiwzBWdL++yTCMGwCfaZoPnUR9IhmrsdHG\naVTSmlMGbnef24Y9PmgFgpqjKSL9hLVpmnHg1qPePuY2LNM0LznB/sd9XyQTNTVCBZXU55/Z77aR\nrBwAOutbcSW7MBFJe1oURWSIhPY1kEUn7UVj+t02mmM907qjTj1rEVFYiwyZ+P7u27bKKvrdNua1\netYd9QprEVFYiwwZ28FD1l8q+u9Zx71WzzrcqIVRRERhLTJk3DXWkgT28SdevayH3+pZR5sU1iKi\nsBYZMjmN1jC4Z3L/PWtHXndYBzQMLiIKa5Eh4w9YPWvvtP571o58LwCxgHrWIqKwFhkyBaGDxLBh\nKz/xUqOHOQusnnW8VWEtIgprkSFT2llJnWMUuPq/c9pVkA2APaSwFpH+VzATkZMUjUYJBJoBiMfi\nTIxWsiN7Fu7GBpqamojH4yfc11NsDYPb2xTWIqKwFkmaQKCZJcs3kePLxV7TwtcIU+UqY8uqfdRX\nV+LLK8afe/x9s0qsYXBHuyaYiYiGwUWSKseXi8+fjy8QBqDZPxqfP59sX9+L+OcUe4hhw92hByKI\niMJaZEg4qxoBaPWXDmh7ry9OEB/usMJaRBTWIkPCXWeFdSivaEDbu1wQsvnI6tIwuIgorEWGhKeh\nAYCOwuIB7xOy+8mOqmctIgprkSGR01wHQGfJwHrWAO1OPzlRzQYXEYW1yJDwtdQDEC0rHPA+nS4v\nXkIQiyWrLBEZJhTWIkMgL1RLBAeUneBereMIu60Z43rylogorEWGQEF7LbWU4s0/8UIoR+vKth6T\nGarWJDORTKewFkm2eJzCcC1VjMbniw54t2i2tYpZe73CWiTTKaxFkszVHiIn3katvQyna+A96/jh\nsK5rS1ZpIjJMKKxFkiyn2bptq8FdNqj94j4rrDsbFdYimU5hLZJk2U3WbVuN2YMLa1t3WIcbNQwu\nkukU1iJJ5qqzetYtOSWD2s+Raz3MI9KssBbJdAprkSQ7vC54MG+QYZ1nzQaPBDQMLpLpFNYiSeau\nt3rWbfkDX70MwJlvDYPHWtSzFsl0CmuRJMvqXhe8s3jg64IDeAqtYfB4q8JaJNM5+2o0DMMOPADM\nBDqBL5imueuobXKAl4CbTdM0DcNwAb8GxgMe4D9M03wmGcWLDAc5zdZSo10lhcDAh7Q9RVZYE1JY\ni2S6/nrW1wFu0zTnA3cB9/VuNAxjLvAGMBE4fAPpZ4A60zQXAlcCP09oxSLDjD9YRzN5ZBX1+bvx\nMTxF1jVre5vCWiTT9RfWC4AXAEzTXA3MPardjRXoZq/3HgO+2+v4kVMvU2T4yg/VUs0ofP6Br14G\nkFOSDYCjXWuDi2S6/sI6F2jp9TraPTQOgGmaK03TrOy9g2maIdM0g4Zh+LGC+18TVq3IMGOPdJEX\nbrSWGs0d3O+t7kKrZ+3o0GxwkUzX37hcC+Dv9dpumma/z+szDGMs8Djwv6ZpPjKQQkpK/P1vJDpP\ng5Dqc2W3hynqsoawqxhN2Wg7Xq8HgOxsNw6nq+d1b7Gom+JiP0UuFwCerlBSv5ZUn6fhROdqYHSe\nEq+/sF4BLAYeMwxjHrCxvwMahlEGLAO+YprmqwMtpK6udaCbZqySEr/O0wCd6FxFo1ECgWYAyr77\nL3jMbRy672dEKioAyMvLx+FwJKSGxsZW7FXVANRQRo6tvWeuWHt7GIfDRijUecx+bW1h6utbieXl\nUwK4wsGk/X/X99TA6VwNjM7TwAz2F5r+wvoJYJFhGCu6X99kGMYNgM80zYdOsM+/AHnAdw3DOHzt\n+sOmaXYMqjKRJAgEmlmyfBMTaw/y6b/+BYDg93/MK5/7Om3BFj5++ZkUFg7ufui+eAPWgigNnjJ8\ng71R0uGgw5aFJ6IJZiKZrs+wNk0zDtx61Ns7jrPdJb3+/jXgawmpTiQJcny5TH/16Z7XkzauYY0/\nPymf5Q1Y91gHckpPav92h4+cSJBoFBLU4ReRYUiLokhGGr31XWJ2B1XTz8ZfX0VWdw840bIbrbBu\n9Q9uqdHDwk4vPoK61VokwymsJePYYlGKdm+jqWISVTOsuxGL9pr97HVyPA3W9fHBLjV6WKfbi5cQ\nLS22RJYlIsOMwloyTkF1Ja7ODhomTaNl9FgA/DUHk/JZ2Y1Wj729cHBLjR7W5fHhI6iwFslwCmvJ\nOEUH9wDQOH4KLWXWLPBkhXVOcxNhXMSLck9q/6gnhyw6CTYPbkEVERlZFNYyPMXj+L75dQrPnYVz\n7ZpB7Vp4aD8AzeUTaS0dA4C/Njlh7W+tt1Yvyz25sI3mWAujtNfrorVIJlNYy7DkfvF5sn/3MI69\ne/Df/o8Q63etnh6FVfsAaBo7ibaCEiIuN7k1lf3sdRLicfLa6qliNP68k1t1N55jPSazQ2EtktEU\n1jIseZY8CkBk+uk4d5g43xl477rw0D66PFkEi0eD3U6wZAz+2kMJr9EeCOCKdVHNKPIKuk7uID7r\nyVudDVpyVCSTKaxl+InFcL/xKuHyCqpvu8N66+nHaWxs6PkTjZ5g2DkapbBqP4ExE8Buffu3lJWT\n1dqMuz2xvVdnfR1gLTWam39yPWubz+pZh5sU1iKZbHDP7BNJA44dJvbmZrZPnc1rjrHc6vbA0ud5\nbsGnAGgLtvDlYj/WQ+GO5Dp0EGdXmOaKiT3vBQ9ft66vAU5PWJ3OulrACuvCk+xZO3KtsI4G9OQt\nkUymnrUMO86N6wGoM2aRXVTGwVnnU3RoH6PbQvj8+eT4Tjzz2r1rJwDNFZN63gsWjwLA31ib2Dq7\nw7rOUUp2zsCvqffmyLfCOhJQz1okkymsZdhxbt8GQEN377jyrPMBKN/wdr/7Hg7rpl5hHSpKTlg7\n6qxh8BZfKbaTvE3a1R3W8VZNMBPJZAprGXYc27cC0FA+AYCDsw6H9apjto3HobPXg63cu3cBHDkM\nXlwGJCGsa63jhfJObkEUAHehNcFMYS2S2XTNWoYd5/ZtREpK6fDl4QNaRo2ltXQM5ZtWY4tGCHfa\neeihLB5/PIstW+y0tdnIy4tz3nlRfrNjN36Hg8CosT3H+6BnXZfQOmNV9QB0FBYBJ3eftafQ6lnb\n2hTWIplMYS3Diq21BUflAULzL+j1po3KWecz/aW/EXh2D//17DU0N2Zht8eZPj1GYWGcyko7y5Y5\nyGYnu52TOVDpp2KC9dTWUJH1RCxfYy3tiSy2ygr/SGkhcHK/CNi6J5jZFdYiGU3D4DKsON63ntAa\nnnzaEe8fOGsBAJHfv0Owxc3XvtbOxo0hXn21jb/9rZ3Vq0OseXoPBTSzKTKD7981hbdfKwAg5nLT\nll+U+Alm9XXUU0RO4Sms6929KIojwbeVicjworCWYcWx11rXOzxufM978Tjcv/VjNJPHZ+1/4vZ/\nXct3vtNGaWn8iH2nRKyJaZ5zinB7YvzmZ+N45TnraVihojJrGDx+5D6nIruplipGk3eS91gDxL1W\nWDs7FdYimUxhLcOKY99eALp6hfWyp0pYunQcS3M+SnnsIOcHXz/+vqYV1vbZpXzz33eRm9/FIw9X\nsPrNfEJFZTi7wjiaEvRc644OsjoCp7Z6GR+EtSus+6xFMpnCWoYV++Ge9dhxAGx618/jfxxNfmGY\nyB1XATDvqd8ft4fsWvcuALUTDMrHdfD1f9tNdk6U3/58LAcd1tO3nFVViamztgY4tdXL4IO1wXNi\noSNmtYtIZlFYy7Di2LuHuM1GpKKC1hYXv/35WBzOOP94117Cs6ey95yLGbNzM+4nnjhmX+e6tUT9\nfhq7Z4KXj+vgy9/cSyxmY9mG6QC4qhOzRri9phogYT1rLyE901okgymsZVhx7N1DrLyCmMvDY7+Z\nSmuLi49+porxk6153Ktu/AZd7iy8d96JraamZz9bcxPOXTvpOHNmz5rgANNnBll8fQ1mm3XftSNh\nPWtrslo1owb9xK1YLEpTUxONjQ00dFgz1n0EOXCgue91z0VkxFJYy/DR3o6j6hDRCRN59lkvm98r\nZuqMIJddXd+zSeuosbz5iS9hb2rC/83be4bDXe++A0DHzLOOOexVH6vBNtGaaLb/rfpj2k/G4Z51\ns7cE5yBvkGxvC7J0xU6eW7WP596ppNPuwUeQF1fVsGT5JgKB5oTUKCLDh8Jahg3Hfus51J1jJvCj\nHxXgdEW58R8P9O4oA7Dh0uvoWrAAzwtL8Tz6ZwDcy5cB0DZv/jHHtTtgwc3WQfavrKcxAXPMDvfq\n2/IKTmr/HG8uPn8+Pn8+HS4vXkLY6HvdcxEZuRTWMmw49lmTy16vPI3aWieXfLiS4rLwsRva7QTv\nv5+YPxf/Xf+MY8tmPE/+jVhBAW1zzjnusbOMfKI2O2XhSu69N+uUa+3cZ4V1R1HhqR/L5cVHkPY2\n/biKZCr99Muwcfge67+smcqoUREuvXr/CbeNjR9P8L7/wdYWovCS+dgbGmj/h8+Dy3Xc7eMOJ235\nhUxyHuCRR5xs3HhqPxqxvQcBCI8qOqXjAITd2d1h7TjlY4nI8KSwlmHj8G1b2yOn8fWvN+HxHP+x\nk7FYlMbGRqoWXkzd179JNDeX4IUXcfAfbqapqYn4CRY+aSkZzejoAdzxTu65x3NK66M4qw7SSAFZ\npaf+Ixb25OAlREe7wlokU2ltcBk2wlv3kAPEJ07gmmtaefGd42/X3hbksZe2ku3Nh1lXw/1XWw0b\naqmvrsSXV4z/OJd+G8ZMoHzHJv5+3jZ+9dZsli93sGjRyc28zm6oxGQiBUWnfnN0JCuHLDoJBzUL\nXCRTqWctw0Zo014aKOTLd+Xg6KeTmePz90zQ6v0n2+c/4T6NY6xV0b5xxXrs9jj33ushchLrmdha\nAmSFWznAWPITEtbWNfR4i1ZFEclUffasDcOwAw8AM4FO4Aumae46apsc4CXgZtM0zYHsIzJYlfti\nnN66FzNrJh/5SIRAIPGfUTNhKgDjqtbw6U9/hj/+0c2TTzr5+McHl9j2g9b16gOMpai4HTjxLwgD\nEc2xnmlNUGEtkqn661lfB7hN05wP3AXc17vRMIy5wBvARCA+kH1ETsbf7q/DQ5is0yf226s+WTUT\nDGIuN+633uT228NcY1/K2G/dRP6ii8j71N/hfGf1gI7jOFQJQH1WOdneUx+6jnmzAbAH2075WCIy\nPPUX1guAFwBM01wNzD2q3Y0VzuYg9hEZlNZWeG+JNfN71ILx/Wx98qJuD6ELF+LctoVZnzufZ2LX\ncE3wUWxbtuJ+ZTn511/bM8mtL/H9Vs+6s3RMQuqKe61hcEdbQp+2LSLDSH8TzHKBll6vo4Zh2E3T\njAGYprkSwDCMAe9zIiUlpzZUmCky8Tz96U8wpt26kpI7+3Qo8WO3h8nJceP1eo7ZPjvbDXDCNofT\nddy2WNRN7J/vgDdew7l1M+3nLOTCd39K+5Sz2PTPv8P++Zso+uX98Ktf9Vlvw746ANyTK/qs8UR1\nHN3myPdZ/+3oJCfHT3Gxn6KixH0fZOL31MnSuRoYnafE6y+sWzjyglu/oXuS+1BX19rfJhmvpMSf\nUecpGo3S0NDMj39czu2OnRCF/a4c2s29NDU1EQp1Ynccex23vT2Mz+8mFDp+m8NhO25bW1uY6pnT\nib6+CntNNV0LLuS027J59FEbv4lez40V38X2yKM03PtDcLtPWHdw8x6KANu4YtraWk9Y44nqOLqt\nzWl9lqMtRFubh/r6VmKxE3/+YGTa99Sp0LkaGJ2ngRnsLzT9DYOvAK4CMAxjHrBxAMc8mX1EjhEI\nNPOD+2s5eNDF2YVbAHih3sFzq/bxzOtb6exI7ISrww/QqCsqoub0GTQ2NXLTTTXY7XH+349ddFx5\nNfZQENfqt/s8jq3SGgbPm1GSkLoiHuuatatDw+Aimaq/nvUTwCLDMFZ0v77JMIwbAJ9pmg8NdJ8E\n1CkZat2qyQBMc+8h4vZgq5iMz24nFEz8dHDrARoNFBaXHvH+Wee6WLeqjNcvm89V/ALXqpV0XXjR\nCY+TVVdJDaWMn2pndwKeudGVZc0Gd3YqrEUyVZ9hbZpmHLj1qLd3HGe7S/rZR2TQDh1ysH1TIZOn\ntFKyfzeB0eM55qkdCXb4ARq9Lf5kM+tWlfHj1xZyFeDcuP7EB4jFyA9WssU2g0mTuti97tRrimRZ\nPeuscIhYvxeURGQk0gpmkraWLPETj9u4bt4GXO930DR2UkrqKB/XwZlz6nj13fG0FY7Bs/69nrZo\nNHrEIyttlYcoiXdQ459EYejES5sOxuGetZcQ4U4tOSqSiRTWkpYiEViyxEdWdoSLS62ebNPYySmr\n5/LF+9lgUSDlAAAgAElEQVT0bglrmcvCmqex11QTKxtFINDMkuWbeh5d6X1zC1OB6rwxrHh96wmX\nNh2M3mGt9cFFMpOWG5W0tHy5g9paJ3POr6G0ZieQ2rAeOyHIhRe28VKjtWyAc8MHvesc3wfPns7a\na11Lb58woc+lTQfj8AQzH0E62vX7tUgmUlhLWvrrX61HWZ63sJqCA9Y91qkMa4AvfznABmYB4Ni2\n9bjbuHdZM8Htp49K2Od2ZX0Q1u1tCmuRTKSwlrTT3AzLljmZMiVM+fggRbu30eXJorWsIqV1zZnT\niefsaQC0vr3tuNvkVe8DIHtuWcI+tytbw+AimU5hLWnn6addhMM2Fi8OkdXWSuGBXdROnUk8WYuC\nD8InvjWGIF461hzbs25qcDKuYzet9ly6CgsS9pkaBhcRhbWknSVLrEBavDjImPc3A1BjnJXKknpc\ndEmcfd7TKQ+avPHykfdRbX3bg4HJoaIpYLMl7DMPh7V61iKZS2EtaWX/fhurVjlZsCDC6NFRxuzs\nDutp6RHWNhsULDwdN1385u59hMMftNUtq8FJlPbTE3ttPe5wEHZm4adVPWuRDKWwlrSyZIk1sez6\n67sAmLBhFVGnkxpjZirLOkLufOu6tXfvNv7rvwqJx+H9rV5KD1rrBQWNKQn/zI4sH7m0KKxFMpR+\n8iVtxOPWEHhWVpxrrolg37Kd0gO72H/2BXTl+FJa2+F1wwFyyivwARcVrOcf//xJNmybwcF9ufwb\nGwBomDA14Z8fzvKSFwx0D4NHEn58EUlvCmtJG5s22dm508FHPtJFri9G1v/cB8C2Kz6e4sqOXDc8\np9XLLcCl5SsYldPAlveKsdniXFG2initjcZxie9Zd+X4yaeGjjYnCmuRzKOwlrTx9NNOJrOT70V+\nScFlL+LcsokDxiz2z1mY6tKAXuuG+/Jozy1gdP1ebv2XFVQfLGVCRRZTv7GBxnFTiHTfapVIXT4v\n2XTQFdLi4CKZSGEtaSEeh72PrWc9l+F7LkTc5aL18it49tqv4EzywzsGzWajadxpjN6yFk9XB2Mn\nBJjavBNnuIPq6cmZCBfxWZcBnMF2QDPCRTKNwlpS6vCDMLZtcfJvVbfiI0T1975PyzXX0tjZSfv2\nAIlZtDOxGsedxpjN71BcfYDaSXmM2m4tP1ozbXZSPq+rO6xdoRBwiouNi8iwo7CWlDr8IIzYrw9w\nHe+xcurVrB43HzbWUV9dmZAHYSTD4aVPSw/to3bSGYzZuBqA6unJCetw9wQ7d5vCWiQTKawl5bK9\nuZy55RkAdn/xiz3Pkw4FA6ksq0+N3TO+R+/fyY72EOWb1lA/0SBUnLg1wXsLZ3sB8LSFknJ8EUlv\nCmtJuWazi4s7l7PNO4v2SRNSXc6A1E+cTldWNhPNDVRuWYsj0sW+cy9J2ud15VgXA7K7gnR1Je1j\nRCRNpdnMHclE3hc24iLC1rOvTHUpAxZzuaicdT5FtYf4yK9/CMCeeZcn7fMOD4PnEaC1VT+2IplG\nP/WSUvE4VJjWYiJdV85JcTWDs/VDnwDAHo+xf86FNI07LWmfFfZaYZ1LC4GAfmxFMo2GwSWl3n/f\nxbntK2l15BKcktrnVQ/WoVnzeOpztzP64D62f/a2pH5W7551S4vCWiTTKKwlpdY+HWAxO9kw7tK0\neATmYG069xK2OjwU5ybukZjHc2RYD7/zJCKnRr+iS0q1L3sXgJZzZqW4kvQWzv4grDUMLpJ59FMv\nKVNXZ2P8/lUANJ6VHo/ATFeHr1krrEUyk37qJWVeftnBhbxJpyOL+kmnp7qctBb2WguhFNCka9Yi\nGUg/9ZIyK59tYSabODD+DGIuV6rLSWtRt4ewK5siGtSzFslA+qmXlOjshOjr1hB47ZlnpLia4aHd\nl0cRDepZi2SgPmeDG4ZhBx4AZgKdwBdM09zVq30x8B2sB+z+2jTNX3Xv8ytgKhADvmiappmk+mWY\nevttB+d2vgnAwWmaXDYQHbkFFDft7w5rPSpTJJP09yv6dYDbNM35wF3AfYcbDMNwAT8BFgEXAV8y\nDKMUuALwmqZ5AfA94D+TUbgMb8uWOVnIG0QdLqonTU91OcNCV24uPkK0NUVSXYqIDLH+wnoB8AKA\naZqrgbm92qYDO03TDJim2QW8BSwE2oE8wzBsQB4QTnjVMqzF4/D2CyHOZh0dZ5xJxJOV6pKGhc5c\n6wEnjuamFFciIkOtv0VRcoGWXq+jhmHYTdOMdbf1fixSK1Y4PwFkAduBImDxQAopKUnHpxann5Fw\nnrZsAaPybziJEr7iMnJy3Hi9nmO2y85243C6TqoNSPgxj9eW6OP11RYtLALA1dJMScmEY/Y7WSPh\ne2qo6FwNjM5T4vUX1i1A77N+OKjBCurebX6gGbgTWGGa5r8ahlEBvGIYxhmmafbZw66rax1c5Rmo\npMQ/Is7TI4+4+TDPA1B3znza2sLYHZ3HbNfeHsbhsBEKDb7N53ef1H6DbUv08fpqa83qfqZ1S0PC\nvg9GyvfUUNC5Ghidp4EZ7C80/Q2DrwCuAjAMYx6wsVfbdmCKYRgFhmG4sYbA3wa8fNAbbwJcgNZH\nlB4vvxjnKp4jUlBExxkzU13OsNHZ/Zxvb2cTYV1cEsko/YX1E0CHYRgrsCaXfd0wjBsMw/hi93Xq\nO4AXgZXAw6ZpHgJ+BMwzDONN4GXgbtM025P3Jchw0tBgo2LtM4yhiq5rrwO7bkMaqI7ua9ZFNNDU\nZEtxNSIylPocBjdNMw7cetTbO3q1Pws8e9Q+zcBHE1WgDH/RaJRAoBmAN35dw33xO4jaHFR94gaa\nmpqIx+MprnB46PRZYV1MPQ0NNsrKdN5EMoWeuiVJFwg0s2T5JioCjXzsv/+ZIupZ+qGvsqPWSf3G\nrfjyivHnprrK9NfhzwOssG5sVM9aJJMorGVI5Hj9XPnfd1MUqedO30+Z/IWL8dkgFAz0v7MA0F5Q\nDMAoqmloUFiLZBJdMJQhMXrnFsp2bWEJH2Ptwk9jU9YMWlt+ETGbnXIOKqxFMozCWobE1HdeA+Ah\nvsjMuS19byzHFXc4CXiLqaBSYS2SYRTWMiTGbV5LyJbD254LmXJ6KNXlDFuteSWUc5CmBk0uE8kk\nCmtJOnsgQPGhvayMz2fK7DAul4LmZAWLSvAQpquqIdWliMgQUlhL0mVt3QzAWuYyc46GwE9Fe4m1\n5Kiz+mCKKxGRoaSwlqTL2rIJgHWczRlztAzhqQgVlQCQVX8oxZWIyFBSWEvS2d/bAkDNxBnk5unx\njqciWGiFtS+gnrVIJlFYS9I53ttEA4UUzctPdSnDXkvxKABGBXeihd9EMofCWpLK1txEfuM+3mUO\nM+dqCPxUNYwZD8D02FaCwRQXIyJDRmEtyfXuegA2Z59F+fiOFBcz/IVzfNRlV3AGm3WvtUgGUVhL\nUtU8vwGAhsmnadWyBKkqmk45hwjsbU51KSIyRBTWklSdb1k969h5Y1NcycjROHoaAPHN21NciYgM\nFYW1JE88TsW+lVQzioJzc1JdzYgRmDAdAM/GdSmuRESGisJakubQ67sojVazrWwBLk+qqxk5QnPO\nA6B082upLUREhozCWpLmwB/fBqDj3PNSXMnIkmOMYjsGE/a+AV1dqS5HRIaAwlqSxrfiZQBKrz87\nxZWMLKWlEZZzOVmREK61a1JdjogMAYW1JEQ0GqWxsaHnT9Vb6zm/4Vl2ek6n67QC4lrBI2EKCmK8\naP8wAO4Xn09xNSIyFBTWkhCBQDNLlm/iuVX7eH7lbrK+chsewiyZeQvPvLGNzo7OVJc4YtjtsKXs\nEtpsObhffC7V5YjIEFBYS8Lk+HLx+fM5/9WnmVq9nr9yPaHrP0S2z5/q0kac/FEelvEhnLt24tj5\nfqrLEZEkU1hLQrmDLcx+7CFqbaXcnf9Txk7SqmXJUFYW44n4tQC4n1+a4mpEJNkU1pJQk1Yuw93R\nxn3xO6g4161VyxIsFovS1NREfn47z2Ndt7a9urxnrkA0Gk1xhSKSDAprSahxa98A4FE+ycy5LSmu\nZuRpbwuydMVOmjsbqKOU6oLxONeu5fmVu1myfBOBgJYgFRmJFNaSOPE4pe9v4oBjHIfc45h2hh4L\nlQw53lxKRjkBeH/UuXg62hjbVE+OLzfFlYlIsiisJWF8jXVktzSxJjqX6TNbcXt0u1ay5BdYi6Fs\nyJsHQNn29aksR0SSzNlXo2EYduABYCbQCXzBNM1dvdoXA98BIsCvTdP8Vff7dwOLARfwc9M0f5ec\n8iWdlO01AaxnV8/REHgy5RVEAFjnPAeA4t3bYcGHUlmSiCRRfz3r6wC3aZrzgbuA+w43GIbhAn4C\nLAIuAr5kGEapYRgXA+d373MxMCkJdUsaKt27A4C1zOVMhXVS5RdaPevNndOIOp0U7tuR4opEJJn6\nC+sFwAsApmmuBub2apsO7DRNM2CaZhfwFrAQuALYZBjGk8AzwNMJr1rSUsH+vQA0jJtCQVEktcWM\ncL7cCE5njLrmHJorJlG4fxe2mGaCi4xU/YV1LtC7ixTtHho/3Bbo1dYK5AHFWKH+ceDLwJ8SU6qk\nu5wD1bTgZ8x5WakuZcSz26GwuIuGWjeN46fiDHeQV1uV6rJEJEn6vGaNFdS9l5+ym6YZ6/574Kg2\nP9AMNADbTdOMADsMw+gwDKPYNM36vj6opESrXA1Eup4nu60Tb3MlW5nGvIUdeL0fPBMzO9uNw+k6\n4r1ktwFD8nmp+NoOt5WMirBlvZfmidPh9Wcpr91LcfGVFBUN7nskXb+n0pHO1cDoPCVef2G9Amui\n2GOGYcwDNvZq2w5MMQyjAAhhDYH/COgAvgb8xDCMMYAXK8D7VFfXOvjqM0xJiT9tz1Pj5l0UxdrZ\n75pIyegWQqEP2trbwzgcNkKhY9cHT1abz+8eks9Lxdd2uK2gqAPw8r7nNM4BvHt3U1/fSizmPma/\nE0nn76l0o3M1MDpPAzPYX2j6C+sngEWGYazofn2TYRg3AD7TNB8yDOMO4EWs4fSHTdOsApYahrHQ\nMIw13e9/xTRN3cMzwu17pQoDaCsv16plQ6SoNAzATscUAAqqK1NZjogkUZ9h3R2ytx719o5e7c8C\nzx5nvzsTUp0MG5WvHQTAdvroFFeSOQqLrRnh74cnEXU6Kag+gObgi4xMWhRFEqJtk9Wryz67JMWV\nZI7i7p51fUMWLaPGUVB9APTccJERSWEtp2znThtFgb0AtFVUpLaYDFJcZoV1XbWHwOhxZLUFcTQ1\nprgqEUkGhbWcshdfdHIaOwk73ISKylJdTsbIK+jC7YlSU+UhMGY8AO69e1JclYgkg8JaTtmyZU4m\ns4tA8WjrBmAZEnY7lI0JU1vlpmn0BABce3antigRSQr9yyqnpLERzFUtFNJEa5kmlw21stGdhDsd\nHPJPBtSzFhmpFNZySpYvdzIhbgVEoHRMiqvJPGVjrHuxzfhUQGEtMlIprOWULFvmZBLW0KvCeuiV\njrbCemfzGDqyvQprkRFKYS0nrbMTXnnFyZx866mpgRKF9VAbXdEBQNXBbJpHjcW1by9E9UAPkZFG\nYS0nbeVKB8GgjfmjdwIQKNU166E2emwHNnucyr1ZNI2qwB4OY688kOqyRCTBFNZy0pYtsxbAm+bq\nHgYvVlgPNY8nTumoTir3ZdM4ahwAzp16trXISKOwlpMSi8FzzznJz49TGNhDpKSEiEePxkyFsRM6\naG9zcMBnzQh3vK+wFhlpFNZyUt57z05VlZ2rFrXjqDxAV8W4VJeUscrHtwOwNTYdUFiLjEQKazkp\nS5daQ+AfP28PtmiU8DiFdaqMm2SF9bvNM4jb7Th3mCmuSEQSTWEtgxaPw9KlLnJy4swfbc0EV886\ndSZNbQPg/T0ldI0dh0PXrEVGHIW1DNrWrXb27LGzaFGEnP1WMIQnTEhtURnM64syuqKD/bv9dE6c\njL2hAVtDQ6rLEpEEUljLoB0eAr/66ghOczsA4dOmprKkjDdpaojODifV+db/B+f7GgoXGUkU1jJo\nS5c6cbvjXH55BIe5nbjdTnjipFSXldGmTA8BsCGsSWYiI5HCWgZl924b27Y5uPjiKD4fOHdsJzp+\nAvEs3baVStNntQKwrHImAI7tW1NZjogkmMJaBmXpUhcA11zTha2uDntDA1FjeoqrkoKiCKMrgjy2\nfQ5xhwPXhvWpLklEEkhhLYOydKkThyPOFVdEcG7eCEBkusI6HUyb2Uhz2EfTmNOt/zeRSKpLEpEE\nUVjLgB06ZGPdOgfz50cpLATXmlUAROaem+LKBOCsc+oAeM9+Nra2Nl23FhlBFNYyYE8/bc0Cv+Ya\nq8fmWrMagC6FdVoYMy5AeXknzxw6B4Dwm6/R2NjQ8yeqp3GJDFvOVBcg6c/z17+Q9cifyNt9JU77\nt6ywjkRwrltLZKpBvKAQGnVfb6p1tAeZPON9lh28BICWp17guYp5ALQFW/j45WdSWFiUyhJF5CQp\nrKVPzo3r8d92K7ZYjNt4A9/YIA7HF2lfvgp7KEjL7Dk0NjbQ1NREPB5PdbkZb8Gldfy/lxeyjwmM\n37wWf7aXuNOV6rJE5BRpGFxOLBbDd+cd2GIxHrv2N+xhAjcf+D7bfvEXWn/5WwBeHns2z63axzOv\nb6WzozO19Qr+vDDnLQzwVHQxnvYg5ZvWAJAVDOBoakxxdSJyshTWcoRoNPrBNc7/ewDXu2tpueoa\nvmt+musdfyPidPOR+7/NjBUv0lQxicbzLsXnzyfb50916dJt8Seq+bPjswCc+7v/5qKffYcvfe1j\nTFp4Pu4Xn0/sh8VieL99J0WTyvF/+WYIhxN7fBEB+glrwzDshmH8wjCMlYZhvGoYxuSj2hcbhrGm\nu/0LR7WVGoZxwDAMrUM5jAQCzSxZvolXl20g/4c/oDMrh5/NvJXt2920TC3lqc/fSVe2l7b8Il7/\np3vBrt/30k1RaRe5V03gN9xI0YGdTH3tGdryCrB3hfF94zZoa0vYZ2X9+Q/k/N+D2IOtZD2+BO+P\nfpCwY4vIB/r7l/Y6wG2a5nzgLuC+ww2GYbiAnwCLgIuALxmGUdqr7ZdAKBlFS3Ll+HK55MnfkhVq\nZd0NX2HV7rMBmHVuDTvOWsAffvMaf3roJeqmnJniSuVErvlEDXeW/C/X2p7kVzf+ml/9+FEavvhl\nHLU1eJ57JjEfEo+T/eDPiLvdNKx6j+joMWQ/9CC21pbEHF9EevQX1guAFwBM01wNzO3VNh3YaZpm\nwDTNLuAtYGF324+AB4GqxJYrQ2H0+5sxXnmShvFT2Xzlp3jnrXxc7hjTZlYDEHc41KNOc9k5MW68\n7RDP2D7CN578LI2N2QT+7noAPI8/lpDPcLzxGs73d9By5VXU5+fT+MkbsLW1Efnj73SrmEiC9fcv\nbi7Q+9fkqGEY9l5tgV5trUCeYRg3AnWmaS7rft+WiEJliMTjXPqHnwLw1pf+hQOVPmoOZTFzTgse\nj/7xHU6mnB7iEzceoqXZxf/ddyaVOVPomjUb96svJ+QRmrannwBg2fSLeG7VPp4Yfz4xm53Y7//E\nkuWbCASaT/kzRMTS361bLUDvmUN20zRj3X8PHNXmB5qB24C4YRiXA2cBvzMM41rTNGv6+qCSEk1Q\nGohknyfPay+Qu38ney+6itCc83j3oWIALrwsSHa2G4fThdfrOWa/dGsDhuTz0u3rPrrtI59oJdTa\nwLOPFfH3f5/Fu5/+NMUb3qN4xcvw+c8DJ/89FVnzNl2eLKIXXEqZyw2jyqg7Yw6jN6+lIstBcbGf\noqKR9XOtf6cGRucp8foL6xXAYuAxwzDmARt7tW0HphiGUYB1bXoh8CPTNP92eAPDMF4FbukvqAHq\n6loHW3vGKSnxJ/08Zf/vgwC8d/VnaWnp5K2Xc8nxRZhyRiON9WEcDhuh0LG3aLW3p1ebz+8eks9L\nt6/7eG2LP1lJOBxg2VOTuOx/r2MD3yT4uz9w8ILLKC72U1/fSl5ePg6H45hjnoi9ppoi02TvGefQ\nGo5D2PrMvWfNp2zTO5SuWUH9BacTi7kHfMx0NxQ/fyOBztPADPYXmv6GwZ8AOgzDWIE1uezrhmHc\nYBjGF7uvU98BvAisBB42TVPXqIcxW7AV78q3qBk/lfrJp7N1vZ+WZhfnXtCMy6UFT4Yrmw0uXLSZ\nqz6+li3tk1jLHLLeWsGyF7ew5JUdJzVk7Vq1EoAD02cf8f6Bsy8EYMLGNYkpXkSAfnrWpmnGgVuP\nentHr/ZngWf72P+SU6pOhpTrjdexdXWxZ5a1ROXbrxcAcP7FWkxjJLjgsgbOOmcnz33vo8wNvcv+\ne/eR993pXP7yg5x256eJzjmHll/9lnh+Qb/Hcm7eBEDNROOI95vGTqYtr5DyHRs1u1QkgTSlV3q4\nX7bmBO6deR5tITvr1+QxqryDCae1p7gySZQJp7VT8e/nELE5+Urjj5hx+zeY98wfsHe0437jVbz3\nfHtAx3FsscK6buzkIxtsNmqNWeQ21uKsOpTo8kUylsJaerjWrCKW46V60jTWrsgn0mXn/IubsGk+\n/4gSHV/G1mtuYCJ7+ShPsoL5THAeoKbAwPPXRwY0U9y5eRNdZaPo8Ocf01Y97SwAste9m/DaRTKV\nwloswSCOHSYdM84gbnfw9muF2Gxx5l3UlOrKJAnW/P3tvHHrv7Hmln/lgc/9gvbcEv6r6RbskS5e\n/Psl7Nx54t/QbA0NOKqr6Jx2+nHba3rCem1SahfJRAprAayeki0ep2PGGdRVZ7PL9DLtzCAFRV2p\nLk2SIO5wYF7+UXZ+9LPMvbSRZcsOMvE71xPBweS1S5g/38e112bz6KNOQketQ+jsHgLvnDbtuMeu\nnzSdiNNF9nvqWYskisJaAHBtWAdAxxkzeeetMkATyzJJdnacG76aR+zccznX9g4fPq+Wt9928tWv\nZnPGGT6++MUsnnjCSWvrB5PLOqYfv2cdc7mpmTQNz/ZtEAwO5ZchMmIprAUA5/r3AAhOO5PVb44i\nOyfK7HmBfvaSkabr0suwx2M88oXnWbMmyB13dFJcHOepp1zccks206f7ePsXWwEwPTM50SPMqydO\nxxaL4dq88fgbiMigKKwFAOfG9cT8ubzw/nRaAx7Ov7gRj0f3Vmea8CWXAeB69WUmTIhz111h1qwJ\n8eqrIb75zU6mTIlRVr2RIF4W3Tqfe26fx8P/M44VrxRQX+vqOU71JGuI3PneupR8HSIjTX8rmEkG\nsLW24Nj5Pl0LLuTRx/IAWLjo1NeOluEnMvMsYoWFuF99GeJxsNmw2WDGjBgzZoT55m2tFE/cRnXF\n2Vx9Zjuvve5m9RsFrH7Duje7qCTM1BlBzi29gKsB53uDm2QWjUb7XKBlsCutiYwUCmvBuWkjtnic\nhvFnsfJP2UycEmDMuGOXs5SRKRaL0tT0wax/z/kXkLv0aYKrVhI2ph0RkI4dJrZIhPyLzuRHd9ez\n9O19tDSPYvtGHzu2etmxxcfbrxXyNpfzbYoIPbueu27LYv78CBdcEKWiou/RmsPPU8/x5R7T1hZs\n4eOXn0lhYVFiT4DIMKCwzkBH914K3l4BwDNV1i038y7WYhaZpL0tyNIVDRQWlwIwrfwMPszTHPzD\n47x+8eIjAvLwTPDIGdazzG02KB/XQfm4Di67pp5YDA7tz2Ljuw72vDibcxqWs+yRFh55xNp/3LgY\nCxZEe8K7vPzY8M7x+hnXUEOoaBSd/ryhOAUiaU9hnYGO7r18+PVVlAL/u+Y8srI7mXZGJVCa0hpl\naOV4c/F1L3BSd/4i4g/9gNO2rGX1VZ86otddumYVAI1jx9HU1ET8qBlmdjtUTOggv6iZiXnT4MHl\nvPLDt3i260O89ZaDt9928pe/uPjLX6zr2+PHx1iwIML8+VEWLIiS7Ylx9QP3MvWd1wjn+HjuOw9S\nN/XMIToLIulLE8wyVI7P+sfZ589n9L73CXly2Riczux5lbjcsf4PICNWZ24BtVPPpNTcALWHWLpi\nJ8+t2sdzq/bRuWIVUYeTp1q8PPP6Vjo7Tny5pOPMmQCc1rSWL32pi9//voPt24Os/sVK9o+dx6qS\nq3E11vLnP7v5p3/KZvZsH/93watMfec1anPH4Wxv48r//Cf81QeG6ksXSVsK6wznCrWSV7WfdfY5\n2Gwwb+GeVJckaWD/nIXYYzFO2/puT687z51F6f5d1E8+neyiMrJ9fT/ir+OMWQA4138wI9wR62LO\n9z/D2AOrOa/uOTbP/CQvv9TK977XwTVXhLit6T/owMOclre4Jf4LsoIBLr7rq9jXvJ/Ur1ck3WkY\nPMMV794OwIr2c5l5TguFJW2AJ7VFScrtPn8R5/z555y1cjlbz78SgJJdW7FHI9ROnTmgY0RLS4mO\nKce57t2emeXuZS/g2L+X9hs/j73qEJ4Xn+ecd37BmV/+Mre7/g//sr28cd6nmDfNwevv3MD3th7g\nu63/zud/eD27nJOpmrIAFs9jzJg4tIXoWrCQ6AkWZxEZSRTWGa5k1xYA1jL3/7d33+FRVPvjx9+z\nm2zK7qaRAiFACOWEGiABQu+9iIgoICpFwIrfq4LlXkR+XqxYEbAAXoWLdJVeAyI9dAkMoQVCQjrp\nySa7+/tjA4SiIVdgl+S8nmces3vmzH7OuMxn58zMOXQfkGLnaCRHkRVYi0tNWlHr2D58E86Df1Wq\n/bEfgKTQsDLrX73DPK9RY4ybNpB14jjFVatRff63ACQMegSrry+19+xG///eJiOoBt4fTqfYXc/x\n4UPpGZRCz4EpZGcO5aMV9Qn/fRHhV36nzokf4MQP1z/HyZnEjz8lp3c/+ViXVKHJZF3JecTYzqwT\nghrTs2EuyZftHJDkMP7oN5zqx/bRZeU8osJaE7J7E2YnZ+LD2pRZ9+od5kVetegAnPxpHYn1GjNm\nx3Yu1KzL96dz8LniTv3hL9Fv9jRqPjkMgLV9h3NF545vyXaMnmYY1YQzo5qw/Uwc+VGp6I9f4dxF\nHx/uTacAACAASURBVFytBXxYPAn/l1/m685ODPyoN7Vq+dy7HSJJdiSTdSXnHXOcVKoQOsgNRZHP\nVkvXXYjoxLn6Tan7xz5001/E58JpzrbpQZG74Y7qu+s9SGnVBZZ+Q/0Th6ianoxitXKkQ59r18ET\nug8mytmF+lG/cqlpaw5GduXPzo2d3cF1YHV8x4bjmaPl4G5PJqwPYd75gby67TWGtQ3GOLgrI0YU\n0bq1WU7tKlUo8gazSkwbl0TV/IvscWpLRHs5Drh0E0VhzfAXyPasQs2Dv2Ny0xP9+HPl2kRasCDb\nrxr1tq+mxdJvMLkbiGnR/oZ1Tnfqx9qpX3Nk8GjuNMPqDWY69Einy4wANox7DzelgDVFvem7eAzD\nB5pp396dWbOcSU2VGVuqGGSyrsSylqgApIS1wNlZjgMu3eqKbwBz/zmLrS9PZ8WMJWQG1S7fBjQa\n/ug3HADFauXYgCcocnG9qzEm9+rK0ilfkt+oCU/yI9sCHiPuvMLUqa6EhemZMMGV6GjNn046IkkP\nAtkNXkkVFmioFm17pMZtUAOy7RyP5LjyDZ6c6dD3f65/vO9wlJJM+Ue/4ZB86W6Fdk1S7VAuLF5B\n7efHEb59HWdmLeM/6QP54QdnVqywLc2bmxk71sTAgcW4yAcepAeMPLOupHZHBdKueAc5zh7kiHr2\nDkeqwKxaLccGPsmxgU9i1d7D8wMnJ3LemQ6A34q5jBtXxI4deSxblkfv3kUcPqzh+efdaN5czwcf\n6EhKkl3k0oNDJutKqLBQ4eRahbqcIblhc6zycRepgjA3bERReAS6rZvRJFxCUaBjRzM//FDA3r25\nPPusCZNJYdYMMweavohrUDDaAY+guZz4tz7Xac9uPB8ZiPsH/waLHAFQuvtksq6Eli0z0D47CoCk\n5hF2jkaS/r6rz3Wnp6eRNuBhFIsF86IFpKenkZ6ehtlsJjjYyjvvFHLkUBYx9QbwlPV7Ck0KPns3\nkdFuKHt2WP6n69pKSgqeIx9Dt2Mb+hkf4Lrwh7IrSVI5yWRdyeTmwpw5ngzQrAbgYnhHO0ckSX+f\n7blu2xjmP/s0wqJoKF7+C2v3xLFs87EbZpmrsmohwbFbKezagw3zTrPadyR1s4+w9ZF59OnjzqpV\nTpjNd/7ZbnPnoMm8Qt7zE7G6uuI2+0vk3WzS3SZvMKtkvvlGR2aKmZ7aTWRWq0lmYC17hyRJd8W1\nmcOMXlxu2ILA49H4F5lILjU3tnIlA/27b2N115PzyRf0DNSitJlGUcQqppr+TeDBcYwZo6d2bQvj\nxxfQp08KLi5WMJtxXb0MU66JzM5dQaNFq9WgFBbi/f08zJ5exI8dT9Wzp/FYtwanI4cobtbCjntD\nqmjkmXUlkp4OM2fq6GvYhrs5lwvhHewdkiTdE+cjuwFQa1/UDV3k2mlT0KSmkvrsC6S6upKenkax\nlxemZ8biWZTG0UlzGTnSREKCwuuvu9OuQwCvvW3GNOZ5jKNHU/3FCeSMGc+idQdYuyeOc1/Mxyk9\njYPt+rDmSDLratoStMvyJfZsvlQB/WWyFkJohBBzhBC7hBBRQog6N5UPEELsKykfW/KesxDiRyHE\nb0KIvUKIAfeyAdKd++wzF7KzFSbXtx1ILrSQyVqqmM617gpA7T1brnWR71uyBc+FP5JetQaLQrvd\n0EVeMPoZrM7O1Pp5FjM+LiA6OpdnnrlCkcmJosWnaLJnA+e8G5NSoz6t9kXR6tg+jO4GWq/7CYvW\nidiHnsJg9OJyy46Y9QZc1q+VXeHSXVXWmfUgQKeqalvgdWDG1QIhhDPwCdAD6ASME0L4AyOAFFVV\nOwK9gZn3InCpfC5eVJg/35k6QflEnF5Oroc3iY3lzWVSxZRXJYCk+k2pdjwaQ2Y67m4Geiz6Co3V\nwt6xb+Dm44/B6IV7SRe5pWo1Cgc9gtMpFd3WTQQEWHnllSv86+M9fFplCgAPZSykY/JqcpwM9Fw0\nkzbzPsQrIQ61y0ByfavatuPkTF77DmjjzqONPWW39ksVT1nJuh2wHkBV1b1A6aN7A+C0qqqZqqoW\nAb8DHYGlwJRS2y++qxFL5We18vYUHYWFCrN6LMUpK5MTbXve22deJcnOTnUZiMZiIXLzSlptXUnV\nE4c417or8c3bXlundBf55eEjAXD64lPS09PIyMig3sVoQtOiOduiM03GViXBLZjRxXNxMRXQaP0S\nCtyMHBryzA2fm9PF1gWv27j+/jVWqvDKOlp7AFmlXpuFEBpVVS0lZaUHlM4GPFVVzQUQQhixJe63\n7mK8Ujk5//4bLqPHMP9KMaurjaXb1sW2QSo6y6sTUsUW26k/YSvnExn1KwB5XlX4ffw/b1jn6uxg\nPr7+gJ5HGrag5u6d7F+8mRM6V8atmAfA0UfH0K95Ou26XWbdylAeW7uc1jm/s9D0BO5La9H74WT8\nq5kAyO3YGauioNu4jvwXJt7XNksVV1nJOgswlnp9NVGDLVGXLjMCGQBCiBrACuArVVV/upNA/PyM\nZa8klW8/5edjnTAa85U0nDDwdOIHtrcnTsQUEoJRf+uYi25uOrROzugf8DLgvnyeo7VblpUq07uw\nY9osmn38BgoKR16ehjawGvqb6hmMBvwDAgA4M3wCNf85jp5L5mDs1Idasce41LozeSXjEXh56+jc\n6zz08kY9/hqJi31I3OLCzigfIjtm0b3/Obz710Bp0wbdnj34aUxQpYrtw3Jz4fhxaNQI9KWjqHjk\n8fzuKytZ7wQGAEuFEJHA0VJlJ4F6QghvIBdbF/hHQogAYCPwnKqqUXcaSEqKHJ26LH5+xnLtJ9cf\n5mNMTuZjJnPhidf4IPwnLF7eXI5sQ97eC2i0t06JmZ9vQqtVyM19sMsMRt19+TxHa3d5y/R6F4eJ\n5V6U5frV4tDL76HVuuDrXxXK+P93OrQltdp0J2T3Zh46fgCz1oldw14kN7cQvd6F3NzCa3Ui2iXT\nIjKZg3s8WbsigN3bPNm9rRm71uXxleiF2LWLrIVLKBz2BE6HDuD5xGNoUpKx+PmT+dNyipuE3dKO\niqC8x6nKqrw/aMpK1iuBHkKInSWvRwkhhgEGVVW/FUL8A9iA7dr0XFVVE4UQnwOewBQhxNVr131U\nVS0oV2TS36b5+jtMOLPQ5wWW/0tHgfeTtoL0NPsGJkmOSlHYMWEKoOB+8TQ7BjzFlRp1/nR1jRYi\n2mUS3jaTYweMrFriy5YtHvTiSc4yFfOnc9DWE3gOewQlO4usPv0wrl+LcchDXFj6M0VBNQBwSrqM\n3++/YY5oRXHz8PvUWOlB8pfJWlVVK/DsTW+fKlW+Glh9U52JgLxQY2eWU7HoY4+xmn6Mm6rDak0j\nPd1WlpGRgVU+ViJJt2UyeLDl1Y9ISoyznZHfQR1FgaYR2dSuf5EqimD+/CD+u304T5xfCH27YVE0\nJLz3Ed8b6hHpV59uP3yKYfRoFr81E/8LsfT//C30OVlYtVoy/7uMopKb1CTpKnk7cAV1cMqv9AH2\nB/fAy+MEa/dcL0u9HI/B0xejx59WlyTpf2C1mhGhiXz9dQEnd7/JrklX8Eo5yxTrNKJn9yey+3l8\n+tUkMPECDTYtZ+Q74zEmX0KxWMgY+TReixZgePM1MnZGg0aOWSVdJ5N1BRQTo8EraiNmNAS8HI6z\n8cZrI7k5mX9SU5Kkv+OGu8sVOPvRayQluHFhbU0u7tIRNzeUTb+Y6Nv/Q97qYCJ0xyryvHxZO+4N\nmowejFthIa5LFuG8bQtFXXvYuzmSA5HJuoLJz4cpY9LYbt3NyaCWONeQd2VK0v10bYzyEgYBdUQS\nHXseY1dUfaJ31mDB9yH84rGcfkPO0aZfLmYliyZA/rhncV2yCLd538pkLd1AJusKZsoUFyLOLAXg\nUtf2do5GkqSrvHzyGTD0JENGZrN1rR9R66rw07L6/LzGTGSnBJrVBJ+mzSgKa45uyyaUpCSsJY+U\nSZK8KFKBLFrkxH/+o2OMy0KsTk6catnJ3iFJknQTo6eZh4Zd5r05J3hkZAI6Fwvb1tegR48gxo93\n5XT7J1DMZlyX3tEQFVIlIc+sHzBKSgpuc+eA1UrBiKew1LRNcXnggIbXXnOlr34bDXMPkd21OwVG\nLwx2jleSpNtzc7fQa1AKXful8ttGJ6K312blSje28TSXlTco/GYBKUNHgGIBK/h9/y3GtaspaBJG\nymuvYzHYLnF5enqh1Wrt3BrpXpPJ+kESH493325o484D4D7nK7I/+IRzHZ9g1Cg3LEVmvq/9JqiQ\nPv45yLdvuJIklc3Z2UrjFqep2+A4acn12bYhiJVHB/HY5SU83v4iSntX3sx8j4Y7fgbANeY4edGH\nWT7pE7KKTAzp3gQfnyp2boV0r8lucAdnNptJT08jPS0V06hRaOPOkzZ2PIn//gCLszMeLz3LuY7P\n0eTyZg43eAw/dTeF/QZSENbc3qFLklQOeoMHLSLhH2/HUzTednPZ65nT6L96AZ13/MwFfV0+m7qV\n2I59CTwTQ+dff7g2a5hU8ckzaweXmXmFZZuP0fBMDGLzZuIahbOi3eOgKFif/5hen81mUNaPDOJH\niIH8sGbE/+sdOfCJJD3A8ntEEL8nkm5HttCNLagaQefcKC5Prcb3jRqxzqctjdcu4nBkN4isZe9w\npftAJusHgLvBg9ablgMQPXoyBg9vCgsVPlsxiDfyn+T/6nzPQ412kxZUm9MRHbCezJQDn0jSg0xR\n2PzKR4T9PJ+87Cvs6TaMgSmFbFufw5Hj/ozmS9bRl5CvFpPUsQc+PvYOWLrXZLJ+APjFxRL4x34S\nW7QlPbg+hQUavno/mDOqkQZNk6n5Zhv+cI4EuDajkBz4RJIebEV6I9EjXro27GlEvUwi2maScNGF\n3zaEs2tDW9pd3khkl0S8e1Zl2LBiuncvxtnZ3pFL94K8Zv0AaLHB9tz0ycFPk52p5dNpIZw8ZqRB\nWCLDnjmMs7Ps7pakyiKwRiGPj00kafIoAP7t/i7r1zvz1FNuhIXpmTLFhRMn7uDQXlyMkiNnx3pQ\nyGTt4JySLiP2biEjKIQD/l157416nFX1tO6YwWOjo3Fykolakiqj1PAIEuo2olvOKvZ8u5exY02Y\nzQpz5ujo1ElPz57uzJvnTEZGqUpWK07R+zC8/gpVmtTDN6Q6ng/3Q3sixm7tkO6MTNYOzmvhj2jN\nZtaHjeWdV4JJTXKh35DLjH7pAlqtTNSSVGkpCvv6jwAgbN0Mpk8v5OjRHObOzadH9yI8j+4k8/VP\n2NJgMkcbjyan/UA8mwi8+3bHbd63WID85uHodu7Aq09XCn5ZYXvyJD0Ns9ls37ZJt5DXrB2YkpON\n508LydBVYfSalyl2Vnjq+Qu065pRdmVJkiq8c2FtKBChuPy8nLyJr+DSoCED2ybxxIKx6CxbbCtZ\ngGTbkowf+3yGcCisFfndauEXFEDd/dvp882/qT5+NBvHvM6BsEj57LYDksnageV++B2+WZnM4P9h\nrKph4ltx+Adm2TssSZIchMVq4fy45wh95SXcJ4wm/Zln8fv4PZwTErjSOpLtrfpRHFyfuNyq7Dxa\nk527qpKU4ApRoNtVTNOIbJq1DCZ/cjAPffoCvb+djuvwF6B7E3s3TbqJTNYOyGSCbz4x8eKcL8jA\ni9/CH+efL5/C18+Z3Fx7RydJkqPIz8thobUqQzv1p8n21QT+40Usioadg0ezLqIzem9/fP2rYgR6\nN8qk1+OZxMe5sm29hj8OVid6pzfRO72Zpx1Jv5D6/OfSIDr/dyZpejOWadPhL4YxdVn6E+6zvsRc\nvTo578/AElTj/jW8EpLJ2oFYrbBmjRPvvuvCmLPv4Usa+/q+xsNDL+Hm7lX2BiRJqnTc9R7sff4d\nroQ2wzMhjtjOA0gPro9rYtwt6yoK1AguoOdDcfR++CyF+cEc3u/Bkf2erIqNpAW72UhP6n07m5iN\nZzk77TuadfXExcVW32w2k5l5BePqX/F7dSIATsePwblzxC1ahkf1oPvZ9EpFJmsHYLVCVJSWGTNc\n2L9fS5j2GJOUjyiqVgOvd5+Goyn2DlGSJAdm1Wo52XNIueooCgQFFxAUXED/R5PJSHPmyH4Pntix\njnfUF+gdtwHXpzoyxGUZrpGhtGuXT5MmSeTtW8OTX75FoZuexf+cSZOtv9J8y0pyJr6Kde4cqlaV\nJxb3gkzWdmQywapVTsycqeP4cVt3U59uGSy6MAKn2GLi//U26YWFcthQSZLuOe8qRXTunUaDsDi2\nZYyhaHUwA/Z+TVRhO/5v+6d8vH0ULTnBz8qHKFYzn3WfTZ5bKwrHNKZW7DFa7NzAhT27QQTbuykV\nkkzWdnDqlIaFC51ZutSJ1FQNGo2VJuGX6DHwMsP2fIxn7DGOt+vFRre6pG6PkcOGSpJ0X3n6enB5\n0rNs2N+QLl+8xZy8Z5nFc2iwYrEqjOMb5q4fCevB3VBMVI1v+FHpjvekN8jr2hNcdfZuQoUjk/X/\n4Op1m9u53dyyViucOKFh7Von1q514o8/bOU+PhbGjTPx6KPJHLt0BnEmhoh1P5FZrSb7n52CwU0v\nhw2VJMluLrTsxLLPltNo9UICYo+R7upGdJfBBNdux8iYi5w+oSc2Rs+iE11ozGTeTH6PczUjOG1s\nTqhGxduSTm54O5g+BU3d2vZuzgNNJuv/wdWZsNz1RqqdPk7o7s3UjDlAepUATJNewa1PP5KTFXbt\n0rJjh5ajUZm4x8dShzMM1Zzm/cBLBLbwo9o/HkHbWJCeXkzc4US6fP4WZicntv7f+xS56csORJIk\n6R7LrRLAvqf+AXBtnPIAfxMBgel06J4OQEaaM8f2D+OX37Lpp86mdvZ5sjGQgRc1ti0ns+0mJtb9\nFVPLtjRoYKZBAwsNGljw95eX+O7UA5OsS5/NKgUFtikir96iyO3PaO8V3dkzdNuwlIb7ovBIigeg\nUOeOz+WL8NQwtun7sCS3P3U4wytsJoyj1ytbgATbYl3zAdl9+qENb8Wjs77CLSuD3595k9Q6De9L\nOyRJku4G7ypFiLA4okVHUv0HUZiayfnsIOLOedB091omqZP56nRfBpxexSK6Xqvn62tL2qGhFkJC\nbEudOhaqV7f+1VNjldIDk6wzM6+wb/Yiuq1eQOCZGCyKhqTagtiWnTjSKIKeQ7vd2xF3LBaKlq7G\n/cvPqH0qmtpAnkbPMvdhfJf/JJtN3WnGYT7mVTrnrqMz6wAwO7uSE96OrJAQDpv15NeoS463L1Uu\nnaflmv8SsHY1HmtXY1UU9o14kRO9h967NkiSJN1D7noP3PyrY9H7Ug+o17gQBnRj7W/TGDBrKps0\n/Vn3/Aq2Wrtw4oSGmBgtO3Y4cWxHBsNYhJHj5JDPdo0PfwR0Ir5hZ+oJZ2rVgho1LAQFWQkKsmAw\ngCYxAd3G9WjSUrH4+lHUKhJzaINbg7Ja0a1ZhfOuHRQ3D6fwkaGgefBG2n5gkrXXj98z8vN3sCoK\nlxs0R7GYCYg9TrWzJ+gIFPzUCEvnbpi6dqeoXYdrD/PfcEZeWIjHLyswrl9LsX8AGU+PxrV1WzQa\nLTk5kJqqkJio4dIlhYQE238vXdJgOp/IlHNj6Fq8CQsKa+jLAp7gV8tALLgSFJpP55AMvKpoWOw/\nmYv6EfglnCerij+XQxpg1rlcm1/a178qAImhzfi160MEHd6NNiaa+NAWmMPb22v3SpIk3TNnm7cl\n4cvZVH/pWfrNHkyHmd9gmjwAp+j9WGbPxrhhNbpi0/UKFiBxBjsT2zJyy4+cI+RakQYz77hOZ3LB\nNJwpvuFzEkLboz43FdeIetSq5YEzFgxvvIbbD/OurVO4YilZ8xeCq+u9bvZd9ZfJWgihAWYBTYFC\nYKyqqmdKlQ8A/gUUA/NUVf2urDrlZrXi/uF09DM+INfTh82vf0Zy/aYAuGRlELwvipq/raHmqaNo\nYo7jPusLCv2rEd/lEU61GUqsUo2Tu07S6dRmesYswLsw7dqmDT+vZIZhClNNb5Fvuv2uGMJS5jCB\nKqSzx6cnv3R8F6sIwIc03ql3Hg+vYhTFtm5SYjxarQsF/q242LQVAG4l27ntjWKKQnzztiRVrY5W\n64Lv/7yTJEmSHJfFYiY+rDl8PovAic/hOWYkVicnlGJbsr3iH8ihXo8S36wtxS5u6FOTaLh+Me32\nbCbGvQVrhs1hp0cvss9lMm7bGFpe2Uq8EsR71tc5TV2qc4nH+YmeJzfh91JvPmQSP2sG86n2VdoX\nbSPW0JQFzf7No+c+pfGWTWR3H8GOfyzG6OeCl5cVHx8rXl5W3N25djx3NGWdWQ8CdKqqthVCtAZm\nlLyHEMIZ+ASIAPKAnUKIX4H2gMvt6vyZ07FWLp0pJNfiRl6eQl6eQn4+FGYW0mnxRMIO/kCKRzAT\nm/5I/NYGmNZpMBUqFBSEkJ/biuys11B0JiLM+3jYsoLHkhdTZ/FM6iyeSWdccaMAgCt48j6TmckL\nNOEY3zCOSTlT6WzYzoKwaZirBlLbmEIttySqZx2hyr6ViLhDFOlc2Dp0Ike6DcJfySP18g6CPH3x\n9K76N3a9JElS5ZCfl8OanWn4+NbFe+q3tFq9EJ/EONICg9nToDnJzTviWzXw2vpZ1WqS2KQlMcu/\no9eSrxk8bzgtGzTH9+JZ3LOvcDYskoUDnsLHqz6trEFkpNVnwZUe7InZxrh9b/JWwXTeskwHC/yi\nPMSInAXk/m7gfXqwgsH0O7WWcxOG8DAryeb6c7E6nS1pGwxgNFox6s10KNxCn6T/EJJ9BLPOnbMh\nXTjTbBDZIhyDEfR6K66u4Kbko9M742bQ4OpKyWIrc7oLfdhlbaIdsB5AVdW9QoiIUmUNgNOqqmYC\nCCF+BzoCbcB2wfY2dW6ran0jdcklBz0nCeUQzSnEjYH8SjBx7CeC/lmrSd4RcEtdZ50FFxcTrgY4\nGdiBz9zb8R+XqfTMW0XPlBX4FFwi090PtX43jkYMQOfvxvMeWRg9gvg17QuGLf2cVjuiaLW/w21j\ni2/aml3PvElmYC0MJe/Jx6kkSZLKx13vgcHoRZHwYqcIu/Z+UmIc2j+5hny4bQ9SagoGLP6KmjEH\nKTB4sG/EixwZNAol6SLu2iJ8/fOpGZJvq9CjKevyl1Br8WyqpCaR2qYbSW16Mr3gHNmZTuTmaFl9\n6W1CNpnpdnID5w0NWS+e47BrK+JNAaRl6TBn5lMl9RItLuziseKFBGMbtjUDL9zIp2bKQTrvncEZ\nQjhKU3xIJ4Sz1CAeCwqXqM4BwjlAONFEEEs9zFodiosOF1dwdbHi6mJh9zljufZfWcnaAyg9zZNZ\nCKFRVdVSUlY6a2UDnmXUua1E95qku1TBx5RMWP4xIiwHAChycuVQ+/EcHzKJd7SZHDuvYvR0Redi\nQedixsXFjJOzldTL8WicdPj4+pfaaih7ePOGskCuALbr10VFkJqXx/TuTxLRsCN1j0fjmp9LnsGD\nXKMX8c46UkQzlNCmJa27/lx1fk42GqdCcrJvvObxZ+/frTKLWUdenqnc9SplmWLFar31dtK7/XkO\n1+5yllnMOoeJxdHLrv77s3ccjl6WnZVxw3Hq727zrG8AP749B/fMdArdDZiddZCb9Zf1TrfrdT0n\n5NrSlLvBtijEM/+xIQzY40nbzSsYfuAtht+yBRuTzpUDYT1YH9KO076NcXfyQJw6SItTUYTH7aBO\n8VksKKS4+HPAPRKNxUJQ3nkGFf3CIH65viEztv7nvNJbL99ja2Ul6yygdPovnXQzbyozYsuEf1Xn\nturlxtz2KoEz0LxksalfRriSJJVfG3sHIEl2MLbMNXRAeMlyXQ9g8rVXGiCgZLmXyrp/fSfQF0AI\nEQmlHxjmJFBPCOEthNBh6wLfVUYdSZIkSZLKSfmrSSKEEArX7+wGGIXtR4ZBVdVvhRD9gSnYkv5c\nVVVn366Oqqqn7lUDJEmSJKmi+8tkLUmSJEmS/T14w7hIkiRJUiUjk7UkSZIkOTiZrCVJkiTJwclk\nLUmSJEkOzu4TeQghHgaGqKo6ouR1JPAZtvHGN6qqOs2e8TmSkjvt44Grd9fvVlX1TTuG5FDu+rj0\nFZwQ4iDXBzY6q6rqGHvG42hKhkt+X1XVLkKIusD32KaY+AN4XlVVeXcut+yn5sAqILakeLaqqkvs\nF51jKBmeex5QC3AB3gVOUI7vlF2TtRDic6AncKjU27OBwaqqnhNCrBFCNFNV9bB9InQ4dYADqqoO\ntHcgDupPx7KXbiSEcAVQVbWLvWNxREKIScATQE7JW58Ab6qq+psQYjbwEPCzveJzFLfZT+HAJ6qq\nfmK/qBzSCCBFVdWRQghv4Ai2vHfH3yl7d4PvBJ4FFAAhhAe2SUDOlZRvALrbKTZHFA5UF0JsLfkh\nI4d0u9ENY9ljm2RGur0wwF0IsUEIsaXkx4103WlgMCXHJqCFqqq/lfy9Dnlcuurm/RQO9BNCbBdC\nfCeEMPx51UplKbYxScCWd4so53fqviRrIcQYIcSxm5bw23SP3Dyu+NXxxiud2+0zIAGYrqpqV2A6\nsMC+UTqc245Lb69gHFwu8JGqqr2ACcBCua+uU1V1BdwwWXLpIZFzqKTHpZvdZj/tBV5VVbUTcBZ4\n2y6BORhVVXNVVc0RQhixJe5/cmP+LfM7dV+6wVVVnQvMvYNVbx5X3IOrM29UMrfbZ0IIN0r+Yaiq\nulMIEXi7upVYucelr8ROYTsrQlXVWCFEGlANuGTXqBxX6e/R1XkQpFutvDoTI7Yu3S/sGYwjEULU\nAFYAX6mqukgI8WGp4jK/Uw71S1pV1SzAJIQIKbmZqifwWxnVKpMpwMsAQogw4IJ9w3E4clz6OzcK\n2zV9Sn70eQCJdo3IsR0SQnQq+bsP8rj0Z9YLIVqW/N0NiLZnMI5CCBEAbAQmqar6fcnb5fpO2f1u\ncGzzhJW+A24CsBDQAhtUVd1vl6gc0/vAAiFEX2xn2E/bNxyHsxLoIYTYWfJ6lD2DcXBzgflC+D51\nhgAAAIhJREFUiKsHiFGyF+K2rh6bXgG+LZm0KAZYZr+QHNLV/TQB+EoIUYTtx984+4XkUN7E1s09\nRQhx9dr1ROCLO/1OybHBJUmSJMnBOVQ3uCRJkiRJt5LJWpIkSZIcnEzWkiRJkuTgZLKWJEmSJAcn\nk7UkSZIkOTiZrCVJkiTJwclkLUmSJEkO7v8D8mNFGt4dmZYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.neighbors import KernelDensity\n", "kde = KernelDensity(0.15).fit(x[:, None])\n", "density_kde = np.exp(kde.score_samples(xpdf[:, None]))\n", "\n", "plt.hist(x, 80, normed=True, alpha=0.5)\n", "plt.plot(xpdf, density, '-b', label='GMM')\n", "plt.plot(xpdf, density_kde, '-r', label='KDE')\n", "plt.xlim(-10, 20)\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All of these density estimators can be viewed as **Generative models** of the data: that is, that is, the model tells us how more data can be created which fits the model." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }