{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial-Robustness-Toolbox for scikit-learn DecisionTreeClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.datasets import load_iris\n",
    "\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from art.estimators.classification import SklearnClassifier\n",
    "from art.attacks.evasion import ZooAttack\n",
    "from art.utils import load_mnist\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 Training scikit-learn DecisionTreeClassifier and attacking with ART Zeroth Order Optimization attack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_adversarial_examples(x_train, y_train):\n",
    "    \n",
    "    # Create and fit DecisionTreeClassifier\n",
    "    model = DecisionTreeClassifier()\n",
    "    model.fit(X=x_train, y=y_train)\n",
    "\n",
    "    # Create ART classifier for scikit-learn DecisionTreeClassifier\n",
    "    art_classifier = SklearnClassifier(model=model)\n",
    "\n",
    "    # Create ART Zeroth Order Optimization attack\n",
    "    zoo = ZooAttack(classifier=art_classifier, confidence=0.0, targeted=False, learning_rate=1e-1, max_iter=20,\n",
    "                    binary_search_steps=10, initial_const=1e-3, abort_early=True, use_resize=False, \n",
    "                    use_importance=False, nb_parallel=1, batch_size=1, variable_h=0.2)\n",
    "\n",
    "    # Generate adversarial samples with ART Zeroth Order Optimization attack\n",
    "    x_train_adv = zoo.generate(x_train)\n",
    "\n",
    "    return x_train_adv, model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 Utility functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(num_classes):\n",
    "    x_train, y_train = load_iris(return_X_y=True)\n",
    "    x_train = x_train[y_train < num_classes][:, [0, 1]]\n",
    "    y_train = y_train[y_train < num_classes]\n",
    "    x_train[:, 0][y_train == 0] *= 2\n",
    "    x_train[:, 1][y_train == 2] *= 2\n",
    "    x_train[:, 0][y_train == 0] -= 3\n",
    "    x_train[:, 1][y_train == 2] -= 2\n",
    "    \n",
    "    x_train[:, 0] = (x_train[:, 0] - 4) / (9 - 4)\n",
    "    x_train[:, 1] = (x_train[:, 1] - 1) / (6 - 1)\n",
    "    \n",
    "    return x_train, y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_results(model, x_train, y_train, x_train_adv, num_classes):\n",
    "    \n",
    "    fig, axs = plt.subplots(1, num_classes, figsize=(num_classes * 5, 5))\n",
    "\n",
    "    colors = ['orange', 'blue', 'green']\n",
    "\n",
    "    for i_class in range(num_classes):\n",
    "\n",
    "        # Plot difference vectors\n",
    "        for i in range(y_train[y_train == i_class].shape[0]):\n",
    "            x_1_0 = x_train[y_train == i_class][i, 0]\n",
    "            x_1_1 = x_train[y_train == i_class][i, 1]\n",
    "            x_2_0 = x_train_adv[y_train == i_class][i, 0]\n",
    "            x_2_1 = x_train_adv[y_train == i_class][i, 1]\n",
    "            if x_1_0 != x_2_0 or x_1_1 != x_2_1:\n",
    "                axs[i_class].plot([x_1_0, x_2_0], [x_1_1, x_2_1], c='black', zorder=1)\n",
    "\n",
    "        # Plot benign samples\n",
    "        for i_class_2 in range(num_classes):\n",
    "            axs[i_class].scatter(x_train[y_train == i_class_2][:, 0], x_train[y_train == i_class_2][:, 1], s=20,\n",
    "                                 zorder=2, c=colors[i_class_2])\n",
    "        axs[i_class].set_aspect('equal', adjustable='box')\n",
    "\n",
    "        # Show predicted probability as contour plot\n",
    "        h = .01\n",
    "        x_min, x_max = 0, 1\n",
    "        y_min, y_max = 0, 1\n",
    "\n",
    "        xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
    "\n",
    "        Z_proba = model.predict_proba(np.c_[xx.ravel(), yy.ravel()])\n",
    "        Z_proba = Z_proba[:, i_class].reshape(xx.shape)\n",
    "        im = axs[i_class].contourf(xx, yy, Z_proba, levels=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],\n",
    "                                   vmin=0, vmax=1)\n",
    "        if i_class == num_classes - 1:\n",
    "            cax = fig.add_axes([0.95, 0.2, 0.025, 0.6])\n",
    "            plt.colorbar(im, ax=axs[i_class], cax=cax)\n",
    "\n",
    "        # Plot adversarial samples\n",
    "        for i in range(y_train[y_train == i_class].shape[0]):\n",
    "            x_1_0 = x_train[y_train == i_class][i, 0]\n",
    "            x_1_1 = x_train[y_train == i_class][i, 1]\n",
    "            x_2_0 = x_train_adv[y_train == i_class][i, 0]\n",
    "            x_2_1 = x_train_adv[y_train == i_class][i, 1]\n",
    "            if x_1_0 != x_2_0 or x_1_1 != x_2_1:\n",
    "                axs[i_class].scatter(x_2_0, x_2_1, zorder=2, c='red', marker='X')\n",
    "        axs[i_class].set_xlim((x_min, x_max))\n",
    "        axs[i_class].set_ylim((y_min, y_max))\n",
    "\n",
    "        axs[i_class].set_title('class ' + str(i_class))\n",
    "        axs[i_class].set_xlabel('feature 1')\n",
    "        axs[i_class].set_ylabel('feature 2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 Example: Iris dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### legend\n",
    "- colored background: probability of class i\n",
    "- orange circles: class 1\n",
    "- blue circles: class 2\n",
    "- green circles: class 3\n",
    "- red crosses: adversarial samples for class i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 100/100 [00:03<00:00, 28.05it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAE7CAYAAAAcvANrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXiU1dn48e/9zJKZrEDCHgQUEBHEWkStC7Zaq1jF9+eKrUvdat+6YbXYVouordWqVK2tWjfcq1aFKiqvrWK1WsEKLiDIIhIIBEISssxkluf8/piZZGYySSaQSTLJ/bmuXGbOnDnPGUzO3DnPuc8RYwxKKaWUUkr1dFZ3d0AppZRSSql0aOCqlFJKKaWyggauSimllFIqK2jgqpRSSimlsoIGrkoppZRSKito4KqUUkoppbKCBq6qy4nI+SLybnf3QymlOkrHL6W6lwauqtcTkQEi8pKI1IvIRhE5u7v7pJRS6RCRy0RkmYg0ishj3d0fpbqbs7s7oFQXuA8IAIOBA4FXRWSFMebz7u2WUkq1awtwC/A9wNvNfVGq2+mMq8oYERkhIi+KyHYRqRSRP7ZS724R2SQiu0TkIxE5Mu65qdHZhl0isk1E7oqWe0TkyWi71SKyVEQGp2g7DzgVuMEYU2eMeRdYCJyTmXetlOoNesL4BWCMedEY8zJQmZE3qlSW0cBVZYSIOIBXgI3AKGA48Gwr1ZcSmQkdADwNPC8inuhzdwN3G2MKgX2A56Ll5wFFwAigGLgU8KVoexwQNsasiStbAey/W29MKdXr9aDxSymVRANXlSlTgWHAtcaYemOMPzrb2YIx5kljTKUxJmSMuRPIAfaNPh0ExohISXTG9IO48mJgjDEmbIz5yBizK0Xz+UBNUlkNULCH708p1Xv1lPFLKZVEA1eVKSOAjcaYUHsVReRnIrJKRGpEpJrITERJ9OkLicyafhG9nfb9aPkTwBvAsyKyRURuFxFXiubrgMKkskKgdjfek1Kqb+gp45dSKokGripTNgF7iUibCYDR9WCzgTOA/saYfkRmRAXAGPOlMWYmMAi4DXhBRPKMMUFjzFxjzATgW8D3gXNTXGIN4BSRsXFlkwFNzFJKtaanjF9KqSQauKpM+RAoB34nInnRZITDU9QrAELAdiIB5q+JmyEVkR+KyEBjjA1UR4vDIvJtEZkUXYu2i8itt3By48aYeuBF4KZoPw4HZhCZ8VBKqVR6xPgVbcMZXTPrABzRvuiOQKrP0sBVZYQxJgycBIwBvgbKgDNTVH0DeI3IzOhGwE9ktiPmeOBzEakjkuhwljHGDwwBXiAy6K8ClgBPttKd/yWyjUwF8AzwE90KSynVmh42fl1PJHHrOuCH0e+v34O3p1RWE2NMd/dBKaWUUkqpdumMq1JKKaWUygoZC1xF5BERqRCRz1p5XkTkHhFZKyKfiMhBmeqLUkp1lI5hSinV82RyxvUxIut7WnMCMDb6dQnw5wz2RSmlOuoxdAxTSqkeJWOBqzHmHWBnG1VmAI+biA+AfiIyNFP9UUqpjtAxTCmlep7uXOM6nMTsy7JomVJKZQMdw5RSqot1515wkqIs5RYHInIJkVtx5OXlfXP8+PGZ7JdSqof56KOPdhhjBnZ3P5KkNYbp+KVU39ZDx6+s1Z2BaxmRY/ViSoEtqSoaYx4EHgSYMmWKWbZsWeZ7p5TqMURkY3f3IYW0xjAdv5Tq23ro+JW1ujNwXQhcJiLPAocANcaY8vZe9OXyjRxfcknGO6f2jBk9nC8u9bLke/O6uysqi40qbXdI6E4dHsMCgRV8VabLYLPFtDdmMf5+H7Jhc3d3RWWh13c82N1d6JUyFriKyDPA0UCJiJQBcwAXgDHmfmARMB1YCzQAP8pUX5RSqqN0DFNKqZ4nY4GrMWZmO88b4KeZur5SSu0JHcOUUqrn0ZOzlFJKKaVUVtDAVSmllFJKZQUNXJVSSimlVFbQwFUppZRSSmUFDVyVUkoppVRW0MBVKaWUUkplBQ1clVJKKaVUVtDAVSmllFJKZQUNXJVSSimlVFbQwFUppZRSSmUFDVyVUkoppVRW0MBVKaWUUkp1KhF5REQqROSzVp4XEblHRNaKyCciclA67WrgqpRSSimlOttjwPFtPH8CMDb6dQnw53Qa1cBVKaWUUkp1KmPMO8DONqrMAB43ER8A/URkaHvtauCqlFJKKaW62nBgU9zjsmhZm5wZ645SSimllOpRph2dY6p22nvczqefhj4H/HFFDxpjHuxAE5KizLT3Ig1clVJKKaX6iKqdNgsXlexxO6NHbPUbY6bsQRNlwIi4x6XAlvZepEsFlFJKKaVUV1sInBvdXeBQoMYYU97ei3TGVSmllFJKdSoReQY4GigRkTJgDuACMMbcDywCpgNrgQbgR+m0q4GrUkoppZTqVMaYme08b4CfdrRdXSqglFJKKaWyggauSimllFIqK2jgqpRSSimlsoIGrkoppZRSKito4KqUUkoppbKCBq5KKaWUUioraOCqlFJKKaWyggauSimllFIqK2jgqpRSSimlsoIGrkoppZRSKito4KqUUkoppbKCBq5KKaWUUioraOCqlFJKKaWyggauSimllFIqK2jgqpRSSimlsoIGrkoppZRSKito4KqUUkoppbKCs7s7oJRSSimlusYu28ObDWM6oaWtndBGx+mMq1JKKaWUygoauCqllFJKqayggatSSimllMoKGrgqpZRSSqmskNHAVUSOF5HVIrJWRK5L8fxeIvKWiHwsIp+IyPRM9kcppdKl45dSSvU8GQtcRcQB3AecAEwAZorIhKRq1wPPGWO+AZwF/ClT/VFKqXTp+KWUUj1TJmdcpwJrjTHrjTEB4FlgRlIdAxRGvy8CtmSwP0oplS4dv5RSqgfK5D6uw4FNcY/LgEOS6twILBaRy4E84NgM9kcppdKl45dSSvVAmZxxlRRlJunxTOAxY0wpMB14QkRa9ElELhGRZSKyLGD8GeiqUkolyMj4VbnTzkBXlVKq78hk4FoGjIh7XErLW2kXAs8BGGPeBzxASXJDxpgHjTFTjDFT3OLJUHeVUqpJRsav4gG6kYtSSu2JTI6iS4GxIjJaRNxEkhcWJtX5GjgGQET2IzLwb89gn5RSKh06fimlVA+UscDVGBMCLgPeAFYRyb79XERuEpGTo9V+BlwsIiuAZ4DzjTHJt+OUUqpL6fillFI9UyaTszDGLAIWJZX9Ou77lcDhmeyDUkrtDh2/lFKq59EFV0oppZRSKito4KqUUkoppbKCBq5KKaWUUioraOCqlFJKKaU6nYgcLyKrRWStiFyX4vm9ROQtEflYRD4RkenttamBq1JKKaWU6lQi4gDuA04AJgAzRWRCUrXrieza8g0i2w7+qb12NXBVSimllFKdbSqw1hiz3hgTAJ4FZiTVMUBh9PsiWh700kJGt8NSSimllFJ90nBgU9zjMuCQpDo3AotF5HIgDzi2vUZ1xlUppZRSSnVUiYgsi/u6JOl5SfGa5ENaZgKPGWNKgenAEyLSZmyqM65KKaWUUn1EXTiHf1WP64SW3t1hjJnSRoUyYETc41JaLgW4EDgewBjzvoh4gBKgorVGdcZVKaWUUkp1tqXAWBEZLSJuIslXC5PqfA0cAyAi+wEeYHtbjWrgqpRSSimlOpUxJgRcBrwBrCKye8DnInKTiJwcrfYz4GIRWQE8A5xvjEleTpBAlwoopZRSSqlOZ4xZBCxKKvt13PcrgcM70qbOuCqllFJKqayggatSSimllMoKGrgqpZRSSqmsoIGrUkoppZTKChq4KqWUUkqprKCBq1JKKaWUygoauCqllFJKqayggatSSimllMoKGrgqpZRSSqmsoIGrUkoppZTKChq4KqXaZQVs3LVBrIDd3V1RSqkOK8r3MW6v7RTl+7q7K2oPObu7A0qpni23wkfJmhoQAWPYMa6IhkHe7u6WUkql5eiD1nLV2e8QCls4HTbznj6KJf8d093dUrtJZ1yVUq2yAjYla2qwbLDCBssm8lhnXpVSWaAo38dVZ7+Dxx0m3xvE4w4z6+x3dOY1i2ngqpRqlbMxHJlpjScSKVdKqR5u8IA6QuHEUCccthg8oK6beqT2lAauSqlWhXIcYExioTGRcqWU6uG27czH6Ui8Q+Rw2Gzbmd9NPVJ7SgNXpVSrbLfFjnFF2BbYDsG2iDx269ChlOr5auq8zHv6KPwBB/U+F/6Ag3lPH0VNna7Tz1aanKWUalPDIC9l/XJwNoYJ5Tg0aFVKZZUl/x3D8jXDGTygjm078zVozXIauCql2mW7LQIasCqlslRNnVcD1qiGkJsV24d1dzd2m34SKaWUUkqprKCBq1JKKaWUygoauCrVC+lJV0qpbKWnXKm26BpXpXoZPelKKZWt9JQr1R6dcVWqF9GTrpRS2UpPuVLp0MBVqV5ET7pSSmUrPeVKpUMDV6V6ET3pSimVrfSUK5UODVyV6kViJ135g1DXiJ50pZTKGnrKlUqHJmcplUFWwO7yE6caBnk597F6hhYa5s4r1qBVKbVbivJ9XX7alJ5ypdqjgatSGdKd2f3VfqHaLxq0KqV2S3dm9+spV6ot+qmmVAZodr9SKltpdr/qyTRwVSoDNLtfKZWtNLtf9WQZDVxF5HgRWS0ia0XkulbqnCEiK0XkcxF5OpP9UaqraHZ/9tPxS/VVmt2verKMBa4i4gDuA04AJgAzRWRCUp2xwC+Aw40x+wNXZao/SnWlvprd31uOmtXxS/VlfTm7X4+b7fkymZw1FVhrjFkPICLPAjOAlXF1LgbuM8ZUARhjKjLYH6W6VF/L7u9lR83q+KX6tL6Y3a/HzWaHTH6SDgc2xT0ui5bFGweME5H3ROQDETk+g/1RqstV+4VVFVavD1p7YTKajl+qz6up87Lm64F9ImjVhLTskclPU0lRlrToDycwFjgamAk8JCL9WjQkcomILBORZQHj7/SOKqX2TC9MRsvI+FW5M2sDeaV6NU1Iy4xM5ApkMnAtA0bEPS4FtqSos8AYEzTGbABWE/kgSGCMedAYM8UYM8Utnox1WCm1e3phMlpGxq/iAb175l2pbKUJaZ0vU7kCmRxFlwJjRWS0iLiBs4CFSXVeBr4NICIlRG69rc9gn5TKas76EHlbfTjrQ93dlQSxZDTbAtshvSEZTccvpTpZ6eAqjp26htLBVd3dlRb6ckJaBjXlChhjAkAsVyBeh3MFMpacZYwJichlwBuAA3jEGPO5iNwELDPGLIw+d5yIrATCwLXGmMpM9UmpbNb/yxoKy5vXW+0a6qVqbFE39ihRwyAvZf1yuvyI20zQ8UupzvWTU9/j5KOacxsXLJnA/S8e3o09aqkvJqRlWKpcgUOS6owDEJH3iIy1NxpjXm+r0VYDVxEZAfw+euHXgN8bY4LR5142xpzSXo+NMYuARUllv4773gBXR7+UUq1w1ocoLPclLLwsLPdROyyPUF7PObnZdlsEekjAuqdjmI5fSnWO0sFVnHzUyoRl8DOmreSV9yZQtq1/93UsBT1utkNKRGRZ3OMHjTEPxj3uaK5AKfAvEZlojKlu7aJtfeI9AvwN+AC4EFgiIidFZxRGtvE6pVQny6kNtlrekwLXHkbHMKV6gPEjt7da3tMC174gHLSo2lrQGU3tMMZMaeP5dHMFPohOKmwQkViuwNLWGm1ramSgMeZ+Y8xyY8zlwJ+Ad0RkH1pGzEqpDGoscHWoXAE6hinVI3yxcWCHylWvkZFcgbYCV5dIcwq/MeZJ4Eoi67qGdrj7SvUS7uoARV/V4q4OdNk1Q3lOdg31Ykwked8QWePaVbOtWXoilo5hSqUwfvRWfnjCMsaP3tol1yvb1p8FSyY0j18mssa1K2db9USsrmeMCQGxXIFVwHOxXAEROTla7Q2gMpor8BZp5Aq09an3EJFFtEviOvGmiJwO3L77b0Wp7DVoRSXemsht+35f1+MrclExubhLrl01tojvXOJjymi44d6SLgtas/hELB3DlEpy86WLmLLfZgB+cPzHLFs5nBsemJ7x697/4uG88t4Exo/czhcbB3Zp0KonYnWfTOQKtPrJZ4yZ10r5x8B3072AUr2FuzqAtyaYsNrcWxPEXR0g0M/dJX34cpvw5Tb4RRfOtMZOxIrdXS9ZU0NZv5wev2uAjmFKJRo/eitT9tuckCQ1ZcJmxo/eyhcbhmT8+mXb+nf5mtb4E7Eim3/ArLPfYfma4ZqElaV69iePUj2It7qxQ+W9QS88EUupPmvK+LIOlfcGeiJW76OBq1Jp8vXL6VB5b9ALT8RSqs9a9kVph8p7Az0Rq/fRwFWpNAX6ufEVuRISpHxFrk5ZJpBu8lNxvuGgkabLkqRiJ2L5g1DXSG84EUupPuuLDUNYtnJ4QpLUspXD93iZQLqJT92RIKUnYvU+7S6UE5HBwG+BYcaYE6LnzB5mjHk4471TqoepG5oL22uwALc7+ngPpZv8lFvh4/PfQjAEBR9WdFmSVMMgL+c+Vs/QQsPcecVZF7TqGKZUs38sHccBY7c0jTdvLh23R+2lm/jUnQlSeiJW75LOJ9BjRLYrGBZ9vAa4KlMdUqqniiUq5brB44788pSsqdmj2c/45CcrbLDs1G3GX7sol1brZUq1X1hVYWVd0Br1GDqGKdWUqJTjNuS4bHLchllnv7PbM6DxiU/53iAedzhle+nWy6SaOi9rvh6oQWsvkM6nUIkx5jkgklcc2ZdLMzNUn5OJRKV029QkqT2iY5hSdH6iUrrtaYKU6kzpBK71IlJMdC8cETkUqMlor5TqgTKRqJRum5oktUd0DFOKzk9USrc9TZBSnSmdwPVqIkd07SMi7wGPA5dntFcqazhNmJt3vcbNu17DY4JN3zvtUIu63XX6UrrXba9eLFGpoRFqGjonUSnd5KdMXLsP0TFM7bFMJhZ57ADP7nycZ3c+Tj+7oel7jx3o0HXbq9vZiUrptqcJUqoztZmcJSIW4AGmAfsCAqw2xgS7oG8qC8ypXcykYDkAT1Y9jdNE7sDeuPYZTuOSpnrddfpSRxKf0qnXMMjL/lfWMGog/O3/BnVK4Jhu8lPDIC8HXF3DqBJ47o3OuXZvp2OY6gyZTix6rPpZikxkP+hnqp5qKn+67imsu0xa1023j52dqJRue5ogpTpLm4GrMcYWkTuNMYcBn3dRn1QW8hCGaNDaANTUb2bb7Q9w1kOV9PMYXj4/hOWCrjx9Kd1Tnzp6OtSO2shXZ/a92i9U+6XdNjNx7d5MxzC1p4q89V128lL8KnYDeHNCiJt2r9vR06Fq6ryd2vd02+vs66q+KZ1Pv8UicqpIcmaIUvCbgmMJSeI6yyDC+Z6BTY+HFhpCyXffuyCxSBOfVJSOYWq3DS6sznhi0aX9TktZXn9T4tja2nU1+Un1JekceH41kAeERMRP5I9CY4wpzGjPVFb4Ve2bTcsDYnKweMnh5rSfX8Kz35uHFbDJ/bAimtMd1QWJRZr4pKJ0DFO7bduufhlPLLq/+oWU5Xm/DsMD7V9Xk59UX9LujKsxpsAYYxlj3MaYwuhjHfBVAj8O6sSNn5bBXiyxyLbAdkiXJRZ1NPHJHwR/MBJft9W/fYfCuUeCs75lAlqyfh7DfoPsLk9I667r9kQ6hqk9UePL69TEolQJrXkmAESWB8S+AML1EL4V6quchG+FzdcUUV/b8qS+5uQnwd9o4Q9Im30sHVzFsVPXUDq4qs2+dsdJV915XZUd0jk566hU5caYdzq/OyrbzC04jjm1i4HIsoFf1b4JwI1jZibUaxjkpaxfDs7GMKEcR5et0Uw38SmnJkCOM/FxquSs/l/WsOr30Qcf7WDXUC9VY4tStplb4ePl80OEbMjtwpOuuuu6PZWOYWpPdWZiUaqE1nB0dWs1hgNx8rk4yDMBwkaQzwS5AkK2g+HUMMe1mBsKT2jR7oTR28hxNYe9+43aljI56yenvsfJR61serxgyQTuf/HwFvW666Sr7jxhS2WHdJYKXBv3vQeYCnwEfCcjPVJZJSSOhEE09r2xWv5o2W6LQDckFbWX+OSsD1FY7ktY5lpY7qN2WB6hPGeH60FcwpcrWmB3cUJaF1+3h9MxTO2x+MQipwmn/IN9bsFxLdb8tyY+odWPg+WuYXwrWAHAWQPO5eZdrzEpWE4O4aZlVqnuaEFkBvXko1YmjE0zpq3klfcmULatf4frdTTZq7N013VVdklnqcBJcV/fBSYC2zLfNaW6Rk5t6p2RksvTrQfdl/CliWYt6RimOlts1nRSsJwnq55u+j4WzLYmbEL82DkUf9LBbSFxcEvBsQllqRJfU9UDGD9ye8rrJZenW6+7kr00yUylI50Z12RlRAZ+pXqFxgJXWuXp1oPuS/jSRLO06BimOkXyrGlrwibEJv8qNvhW8LLxkbxK1WnCXF/7JoviylIlvsbqJS8V+GLjQFJJLk+3Xncle2mSWdeQoJCzNfXnWTZIZ43rvTSvFbeAA4EVmeyUyi522MvcutewCHBr4bcjt83W5DAzdEFCPStgd+oaV2d9iJzaII0Frha36jsilOdk11AvhVuiiQACu4Z6W7SZbj1oTvjK/6QG24Zcb+ckpO07FKbuHXnv7V03GIaCPD1hS8cw1ZbKymLKNpVSOqKM4uLK5icChvnzHib/6xCWz8+Y8A425xXSGHJiG4sQFsTNnIawsIzNzbtea1o+YIzhQtdw1vg/JWB8DHANo5+djxXeSaOAcYCEaf7pTGJj0wDYuHDSeqJl2bb+LFgygRnTEteuxt/+70i9WLLXrLOXYGxBLNMpJ12VDq5i/MjtfLFxYItrJl73HcJhC0d0jasuE1Dx0vm0Xxb3fQh4xhjzXob6o7JMuf9gbqt/gcmUAfDEzr/iIgAh4aF758OJkXqdfXJW/y9rKCxvzjhtK0mqMzUWufFv9GEMeDyRx22RFt/svv5f1vDZ76IP2kgMaxjk5ZBf1jCyGB5foCdsoWOYasXCl09h9rV34XIFCQZd3HbHLE6esQCAQRdWMWjNTnKCwaY1dePrdkBkCGsRa3oJclBoCzbw5M4n8RLZdeT3oc38wDWMMd5j6O8aym12gL82PIHbZcPvgOsgELT4Te4xUPVMU3s/zz2En9f8Da/k84f+pyWso00l3V2Kv/hqMCccvjryBgRWfTU4dXuAIBiRzhi+0k4K0xO2VHvS+UTrZ4yZH/16yhjznohcmfGeqR4vYOfzWf15mOiPUS4+CvDhIYxtQjRu2MRZp1dy6Tk7KPw0cjKVFTZY0YSh3d2qqSlJCpq+Cst9aW1P1WZ7Ehn8W2svlvjkdUNuDlim9fcRXzffQ+e953b6GFNZJ/x3Y/sncfUROoapFiori5l97V34/V5qawvx+73MuuIuTj1FOOv0SlZ8HIRQCAckjDVimoPEBqAGwY+j6cPUAeQTeZ0FHIKLgwtPpL9rKAA3B17HbWwkAPJzkAC4jc3NgdcT+rfG/wnfx8HcfjPwi4sbCk/ghsITUiZ/xSddxb5mTFvZYrurWPJTjitMjjtMjivMrLPfabHtVFM9dxhvTogcd+p66Uq3fzE1dV7WfD1Qg1aVUjozrucBdyeVnZ+irEsEB3jYeuZ+3XHpPm/IM6sSHvvsYixCnM7zlFFKLs2DWkAsZu/nxEOozZOzdmeXgbaSpHZnyUC67TUnPsXNtbTyPjpStzP7qFLqUWOY6hnKNpXicgXx+5uDI5EgjY0jcbl28MtxDl76yCY3ec04gAfWOAZS1ljHD4uH8DeXiwnlG+gfavl7ut6ZuH403xuAIBCIfgG4o+X1kYf14RrKG9eyl2ciOVZuu++lraSr+FvyzclPzUscYslP8UFiuvXSlW7/lEpHq594IjITOBsYLSIL454qACpTvyrzcot9TD7ns+66fJ+2gokJwavXqsTGyfPMwN00Akfk5cC/CxqpeKK4zZOz3mwYwx+/PBqAy8a+zbG5a9vtR0eSpNKRbnsdSXzq7CSpzn7PfUFPHMPW+gZyyooLu+PSfVqqsaV0RBnBYOLvj8vlZv6TtRQXF/PV8YV4zHpItbY0BPVFhZyyVw5WzQ6OrQuyMBTku+30wxibXxWN56n69xOfcMDvS6bBjkh61nrfxwgWo70HpPX+OjvpqrOTpNLtn1LpaGuq5t9AOVAC3BlXXgt8kslOtWWYq4a5wxa1X1F1umkH7svgD4YjGzYD4LbqmJg3H6mPDHANeAk5hRxHIy7CxOYeYglDyWtcF4fG8dvHfkDB+/l48mq4/bD/B6e/2G7w2pEkqXSk216LhKvc1hOfmuquiCZJ5e9ZklRnv+c+oseNYdYOB/mPZH4ttkp0+0Etx5bi4kpuu2MWs6+Zh9MVJBRd41pcXMm0N2bxwqYHwRjCJK2pEwjZFtVmF/4vDLa9L5b1Fd/An/La+4QrqQtVsblxDeWNa3lpZwMhB8SHzOGA8KN1y/gLYDAdmm2FjiddXX32O9hGsCR10lVnJ0ml2z+l0tHqp54xZiOwETis67qjss1Qz1Luco2nqG4DFgGuuuBSHvjkj4zxbKfi4eZBKdXJWTfffTll8/4HKxzExsmYijf444FHc+zk9mddq8YW8Z1LfEwZDTfcW7LHAVyHkq5iiRmtZALHNAzycsDVNYwqgefe2PMkqaqxRRzyAx+HjIHf/GXP33Nv1xPHMEetn/wla7q7G33QuJRjy8kzFnD4Ee8m7CowZ8t0+i93Mdc5jTmuRsQYLAwjQ+Ws9zoIhXKoCTZw8rajsXkMCCDiZvuIsRRv3oJtQz1CXnSA+MjYvFfzAoJQ4hpBoV1POFyNHbergImLjm3CHZptjelI0pXBRBLMpPVBrLOTpO5/8XBeeW9Cm7sKKJWOdLbDOhS4F9gPcBNZe16vZ32rGMvhY27R0QD43Dnceff3Us6Kx5+cVVlZzKZ7TsGEXdjRuYe1/z2e/WrSXwby5Tbhy23wiz0M4JpOm4rFqib1aVNN9XLarhdvR23kq7OSpFaXR77matCaNh3DVFuKiysTt8GKij8VMGD7ebf6eYI+P5GNKUpA5oPxArmEw3BoxUqWTxnDl8t3cVZAeJpGAH5o5bOvZ1+G5uxDjpXLrW2cumV2PvkX3KMAACAASURBVIHBZi/PpLRnWyEx6Som1YlTzSdT2W3Wi4k/LawzlG3rrwGr2mPpfPr9ETgLeB6YApwL6MHBao+UbSpFnDYmbmmsiE2gGwa1dBOpOjvhSnUZHcNUhxljqAxuZm3DMmrCzclFw9xjGVj6Yz4pF0xckr3fhklfjKEh8AEiFj8ZdCjDig/k4G0tT8lKdUw2RGZbAfJmnsrWvELyt4RbnaHfOrM5Sbk472tC4iIhmco4GTTRS/W24U1lgwZvJmSc7dZTqidLa9rGGLNWRBzGmDDwqIj8O8P9Ur1c6YgyTCgx2DPGokGCvNnQHFOkk6yV7JQVFwEweeCWNtdDx+r1t+t53b4nciZ4lG0L/7TH4G9oXonmsYOcZS/FigtcU9VLeE9sBUh4T6lU2Q1p1SPN9kJsT7O99KTfv851USe1o2OYSlftllrK31/Eyqp/ETSRWVO3eHGIC4+Vy6SCo2kssGFT4vgVDLoYf8ROVq0ejLcxl9LDTwXA5NY35QW0pX6oB1NpY7ksplz6NQArtg8DxrUIXtfP2o/Dvtt8d6og7MOxPjFAtpw2n40dQdXo5oSqgNPC4bTbradUT5ZO4NogIm5guYjcTiTZIS+z3VLdLdUpV+FaLzX1/cm1a3BbHT87Or7N4uJKRlz5MmV3Na9x3X+vhfjrQ3yyeh/yv3ZTt1cA9u1Y8HrKiouakl9WDBvAnHMAnmizXpAiZh85k1nW63y1fRR7Dy/jj4MP442v9m/xuk89w5hT/RLBMLhzndzoOSllvRg7us99bOeE1mxu+DqtevBuWvUaw0vTbC896fevc100rlOa0TGsF3O2cut93tAjKSn2sW1nPrHRqrVTsurqbBa94uf553wsW/p8U3meox8TvVO5t3ElDaaC20c6+fWmF6j7vJH3QksJ8hiWFcRyuLjpllnMPHsXJ51ewhjXMPxDfJRb+UAeeQxvN3hd4foAF/CqbXP47CfZfn8/Bs6u5sPto/j9yDOQr7Ywp3YxgaH5zD/czx9m/xUgkkvgFt5nNGNX7GJDxWhGl2zgzsCxbC5JDEYbyOcXlWdya8lfCeHASZhfVJ7Zop5SPVk6ges5RJaNXwbMAkYAp2ayU6p7pTrl6tl/z2TLzy9laziMsS0m5s1nqGfpHrXZf9qnDFm5HevdarxWJa7iIvZeZ3jopj/hdgQIhN1cecX1cHF6weubDWNoWD6AIUsiW3bljR7O2wfuy9B26gFsqp/Kfm89gMsRIBh2M+2MR2kYHyDZSxzJI7e9xKiBYF30a6rsdgb86ORsw/IBbVaz61xp1Ytpt15YOtReezrav05zYqe0omNYLzandjGTguUAPFn1NE4TxmEZnih8Bt9PXTgdNrd+bPPY2zM44o+/bDol69bbr6Kk5Hn+9oKPN17z4/OBFd2tLnfIKCY2TKS/ayg317zGZHszLofhqC07wUDAhldL3qT6gYNwu0c1BcL/uP841v33z2xyBAj8x80Fp93GcgrafQ/14RpqV3zEawKHh8HzQYARB2+HoGFqeAM3ep8BXyOTguWYLRbfOGkdnuiesYMurKLiiQH8Y/GJfP+3t+ByBAmGXUw741FIMYYtqj+I933jKHXupCw0oP0xTKkept3A1RizUUS8wFBjzNwu6JPqRk0JSDbEoi6zzMXsa+/EBF2Eo4lUn9WfR7F7VVozr6naLFlTQ/+8eoI5PvKdGwEYkOdm/lO/xhfIxUckMeHue27h3uknwdjOfqfNcrxOXnvrwoTrLnnuR4y/5s/U5bZcuxpLuBqrA35W0DGsb/AQS8+PZutbkO+NBHcX7PN/3HzVQxjjbTpwYNYV84AXycnxN52EdeihLgrO+S5bPzsW75PLWO9bTj3luBwGCUJsjz+3C3IHD2Ds1BpgBQA1m4q4/Pd/ThhHHnlhNmNHHcbKLTXgbxlExtSHqyGa6Q9g+QF/bElSkMrgegBsDLmhMLEpZL/Aio+D/OpM+GDZLdFrR7Q1hlXZ+VQFdPxS2andjBIROQlYDrwefXxg0mbeqhdpTkBq9tWO0biciSfCWITw2cW73SYiDLNrEopKcsO4HYmDu8sRJLi+X5q93z2e3DxcjsT353IEKartjBO6VXfTMax3+03BsS2PQXUCcYf6rq8YhWUlji0iQXJzR9PYCN+c4uavLwzgoUcHUF9Rz7oFD7Ck+hm+bFjK7SMLW07xOGHeT49NKNq2ZmjK8Wuf4kFt9j9sQgSMD2dBIWdakBzeBoAzxcVZOFs8F7TgF+Mc5DlG4kpxbR3DVG+UzlKBG4GpwNsAxpjlIjIqYz1S3SrViU+jSjYQDCUmH9k48VrpHT7U2ilSW6zEjdh3NDgIhBP3Tw2GXbj2rk6z97vH31BPMJz4/oJhFzUF0Q0RVba7ER3Dskpr61bnFhzXIkj9Ve2bOE1iYhIhIgf6zo483HvgBsJJv+PGuJg4aTNXX9MfyxJeeN7HhedXUVe3DVdBf/b2HsiwnLH8dvO/4pPwm9qfdd+bcFJz0eBx5SnHL0YczsHBI1pd4/pp3dvUhXcy4iezuP+OG0neQdrtcvGmdwT4GvEEy4nvTJ4LFuVZrL59F4cf0fLaOoap3iidPXxCxpia9qup3iB24pNtge0QbAtkSpDb7rgacQVxWH4sAkzMm592glasTX8IGgJgW5FTpKqsxPyYynov5/3gNrzuBgq9NXjdDVx5xfWY4alvsRXnGw4aabACzVmyjdv7s9l/KHWh5s23R/azmT4+jLM+1FQWqvdSExpJwM6n0RfihG8/jNfdQIEnct1pZzya8habyko6hmWZ2LrVScFynqx6uun7WDCbih8HdeLGj4NgGMI21DRAQyPc+s9+5E/5LdAA1GBZDZz3o8s4/IhdzL5mF2ecupNXFvr53vE5HHffCex37q8YmzuFPEcRwbCDUNjCuCLbthoXhGwHQRID6KIRNdx77aUJ49cFp91GRSj1LfmifB8jhm8g6P6SEZ4JOAsKMSYPcBDOsbALBNsDFobi/Fo87shdIZ/TRUO+i3COYNsWwYCL/kOruHb2dbwhx7HYOpYSVwVLiqfwh+cfwhUKpby+UtkqnRnXz0TkbMAhImOBK4gcpah6qVSnXJ08YwG3B/en9EEPuVvTW9vagkn6bwr/2KcfpUPGMG7wXoQvO4It42vYJ0W93Aofn/8WgiEo+LCCHeOKeOquK/n6qeacmxEb/8Nc19Wc/8PoDMVHO9g11Mt/Pj6Gr+64kE3ByG4GE/PmU5BXg9c1ksFFo/CcfxbrNGjtTXQMy1Lx61b9SYFizNyC47hh1+s02vWchZOHTSXYcN3m4ez/h6Gsrwjz311fEmz8Dd+c8gijRo3hq6/WMf/RLQAc9i03l1+Vz/En5JCXZzFny1C2rbIS2r9HXmbk0J00/ARy/wxfV5Zw0eXn8Sb3JvTlmEv/j33+MTWyq8CkI3nX6kf+luTpWjj6oLVcdfY7BEKGux1wx9OF3Pn3oznJrmQBM6ARXjrt+9y35kpyGkOMvroCgIrr81hrjWDuOZfys9++imXZnPrR37hlwWwuevsJBrrqwBbWWyNxbg/DdvjzU49w0XmXdMr/D6V6gnQC18uBXwGNwNPAG8AtmeyU6n7xp1zFOAp8FOXtRDoYtDYlZ8Xu1Jm45Cxantu+bsdO1u3YyaTi7zKIqtbbcxM5B8mG7W8N4e2nTiX+ttim7YdwyNadSGnzaxtX5/H4L6/DBF2E4hLNpjT+hZ31O9hZv4OxuWd36P2pHk/HsCzzm4JjebLq6aagFSIb999S0Lyu1DZhtgc3scW/hsNC5RgMBY5irs49jEHuUTQ2buBvK1cQMD7yioaRM2EQKz/fwEfLyhk1ysHV1+TzP6d6KS1NHRDH5BUEGHZjDQ43kf0BfgHDg5UUhPwp62+oq2XDzvWMmXxCyucH5NVxbflbOOaB50rgD3CVbzm3fDmBIDlMjyzFhqcMV93+RyYMX9302kG/q+f8f5/NP++4lP8zV0ZWDYRh1hV3MTnvcYqDIXINTTsO+Jyp95dWqquIyPFEFu44gIeMMb9rpd5pRA6JOdgYs6ytNlsNXEXkCWPMOcDFxphfERn4leowZ20I+R2RmdYrgbsjuVojrt/JeoY11dt2aCG5B+5sv70UJ1h9uO6QlHU/XHcIE0qbB/6vto8ix9lIoNHTXMlt2HhgAbwaeZhOH9KuJ+nVtfKDnXtth+lQe+3paP96gp44hoULPNRN65zNaXuzG999CKdlEtaWOrG5PvQvrhh+DBsDn7N903JCgXpcOfkMHXskg/aagievmK0bPuCDz14mYHx4rHzceKmv2YK1Oocz/sfDqad5+eYUF5KcMBo1d9giTjl+GHVbIv+fSvtvanEqVdDhZM4B6eX31Q1zEL+X6/VV/8AqJzI2XA6EwBv2s4AZzUFr1IfrDkkIXAGGBf1YzjDhxuYykSCXDv8mH6x5LyGfIOh0cPnM89Lqp1KdTUQcwH3Ad4EyYKmILDTGrEyqV0DkTth/0mm3rRnXb4rISOACEXmcpBXexph2P8EyEWlvCRYxZ8v09i6too7sl/q4wH9Vt/7h2dZpU+0Z8swq3h8ykTnfbS77+RWLGBrbMjU6UAP89Jr3mFMXSSjYOnM/OL7lj1Tk5JjEfVxTJXtN3Sf1z3ty+aiBX7VIxDII0478iOeijy8b+3brbxC4OM16AD8Wk1bd3+dWd+q1r3CE0qqXrnT718Ps0RiWifHLLglTd4Eut21P+KsgdhU0hIWACDkOC2Pb7PRv4oNVD4LTQdGh4xhwzAEUHLQPJhim4vX/su259wjvasByeyAAfrueEtdwBhw4jZzrSrl16vy0rv/y5Ic45YLIuW3rbAeO2sR1ol5HgIOKyrGT0kROWXERdt0zLZJHYsEre42j4d8F0FgR2S4gunw/+TSrmFTjmn/JVkKBpJlUp4c/UYnbcoLdvEOKKxTmT4/N56cn61IB1S2mAmuNMesBRORZYAawMqnezcDtwDXpNNpW4Ho/ke1j9gY+InHQN9HyVmUq0m6o9LLiiYnpVO1TQj4vgV2FuAt34fT6aBgCjUOCvM2+CfVyy3PIW1vIH96+AzE21xx/Hre/+gQm5OSKEy6G/CBzzoGbS17Z7ZOz9p63io82HNzUn+ryfxO0t+MOhZsG6qDTgbXFD4WRoLXqwCD9W2lvxfZhzCHxj5VDBq7jxM8/5+sdo9h72NcsOXAIed/+iPq3vtlUZ8TA//CfIcXsF4txBXL2ree2O65m9jXzcLqChIIubrtjFifvv4B/FsCogXCcc03Te26NCzj7xx8CRE64uTQS2MVOsYmJfdfeAQoPWb606sW0V8+J3aH22tPR/vUQuz2GZWr8GuPdzsuTH+rIe+gTWpxo9bxhx7l5rPlvHadaDp6tj0wvzhxVwuHTvsWkkrGcfvQSho5+mycff5V77vZSVzsSyAUacA3JZ8Lgwzk44KS6eiCbR0ymLqem1ZOzUvVnrlnaVK+2Ig/zSQ3BMBTkwc5xBS3GiNOW/Yh7fv4C/vItnNN/CPctfBCAK0+8gJDDGQ1eYdaJ5/P2wzckrNg1YbjsuFmwuPkP8nPPf5jhU77GbIkWhCJrXK/atph1rvuZE3wFEcMM6yWGTHsb73IbyzYELAdBceKww0jY4K4OMviDXXv6v0ipVEpEJP6P9QeNMQ/GPR4ObIp7XAYk3B4VkW8AI4wxr4jIngWuxph7gHtE5M/GmJ+k01iSjETarp1+hjyzqv2KfUi5/2BW1Z+HRagp2Wj0flvYdmhhQj3Hf/bnv0u/yyJO4CA2YEmYxQ/e1DSA/u6xvzM77zQG7BNg2OAdWJbZrZOzyv0Hs+rh5v7M9vp4O/SzhDpWyOZ3/b+d9nuMzbzGFCwewjX3L2o6YeuCS2/BM2YLDW9PRoyNQeiXX8ZH9kjODP8bA3hzoLHIzckzFnD4Ee8mfIDlVvjYeDcEwlAYTfZqGORttT8LiJxuAzSdcAPNp9io7reHY1hGxi/V0sKXT2H2tXdFT7Rycun/XkFFxdO8/GmABl8YcRrOP/1b9D9mMvu8PJ33/nIi7wH33wrjht7DmvIPgIeBAA6Hm6uuvhLHoduZW7eIUJBWT8667Y5ZnDxjQTv9aa53yC9rGFkMjy8Y1CJonbNlOndc/zcO3rABEwqxZttG3I7IyHr3q48kzHgueOK3LWZkLWP48J3TGeLejkPCGCN8c8oyGovc+LcEkBC47ggzYIuPItvPm6FrIn+cGnhH9mfOR8fxzoFDOHjbaowRHJcF2Xx9P3buymWuc1q7x82qvsUKQu7WTmlqhzFmShvPp1qP0/TXmYhYwDzg/I5cNJ2Ts3YnaIUMRdoqUcDO57P687BxY0d3APys/jwGBO9OqOeuyWHp0u8S+TmK/Cx5TIDYSs8GvBgsPqn/AQvllziN3bSkq/E9F7OuuhNjN5+c9Un9D9novxtLEu+22mYANeG7Ia4/L/l+gyNpKwEHhgeqnmSccwiBF/9JaLGh0h25HWdHT5hZe93jKd/z6PwCHvnvhwkn1Dz85+tpDAnGuJqu9NmGE/l77f+SG3dOQuGnNZz7WD3V/kogsoyin8fw8vkhPDmR+Rrs+Hqt74EYaASPoemEG9vTalXVjXZzDNPxqwtUVhYz+9q78PubT7T6w133kJOzgAOPy2f1qhCBnHyGnvcd3BtzWfr6icR/Fq4pvwJLLsE2XiCXcBjuu/duVu+9D57CYNMn3EVj3+KWnz2KHXDHnZx1F/MfXYjLtaOpvWCwhOUf34ltN/fnysvu4pezX6S+Hr4qh4kHbm/xPvzmCc5qCGFsExlDjIGQTQPCuE1ruP0vv+Kc/kN4omor+QFfi9cD2H43IXJiK6n4+eW/4+Lxj+B1hSO5AV+BZezICBy304IlYYryfVzxw3dxuAEMTgzD76jhlzdOJ1TXdvKZUhlURuSI7ZhSYEvc4wJgIvB2dM35EGChiJzc1rKrdHYV2F2dFmmLyCXAJQAeS4+pi+ezi6Mzm82bT1uE8AX60XQuIOCobM7eP53nKaOU5sMBIYCb03gBhwRZVzGKkQObB/P120fhsALYdm7clYPYjMAiKXBlBJFzEeNnK9vY/2o3jCkYwiZHoCloBXBYNg4LQnHJHJYVZH3FKEYWN3/QhGwYWmgSAtLSfBvnHUR2NY4mjzltKB1lU+1PPeifDpRb4Inf6cYlbH8gs6d8qS6TkfFr2HDdZi1e2aZSXK5gU5AIkJMT5NHHD+Kwb33C905tpCYUZPLALdS8m3qJmNsN/rhEJZczxPrte7NXYfOU0vrto3E4Q9iB5nFSJEhj48iEwLWxcSQiiafoQRBjRgEtA9YYj4Q4M8fF174A8aOkC0OeMRwR8LO6YiNuY2MTWVcvceNiCCcT3SsSjs1aYE7D/WUoMi5dTmRYTRpKg04XvzjhJ4wauK1FAllInBQcO4DNVSNQqpssBcaKyGhgM3AW0LRtT3R/7ZLYYxF5G7hmt3cV6ASdFmlH10w8CFDkHNi5UVCW81qV2En/G22c5G5dhXNL8+11R1weyvOcjjvp8EA3AV7gNE7iZcYMT7ytNL70KxxON8G4/AQLD1MK98NtJQ6KATufJVUe4lMNxvM52xiGM27UDSP8uP8PmWp5MMOGs+3QQhqGRJ5bd/MvARh21lUp33NdfTXPvXkGYRyczvM8z+lYgTAzrJeIT6HItYMcNW9ZJAS5DZgNeUD/l09h34LmQP7qy17F8fm2yIPLAH8kG+dq70Bu++OJLa7/n0Me4XnA7XRAOC7TOGBRc56LO+/+XlOZbR4FaDeh8KvAorTqwSNp1fObJ9JsLz3p969zzS9tv06GZGT8OuAAl45fcUpHlBEMJiYaibgZt29kDOpv+cAZSTKt/FYdLW/sR4LAeMGQk70Hrk8o27t4HeGkhCaXy838J2spLm6+JVNZWcsRh7rjf63xeNy88+8Gvn1k5DqfrBxMKoPO2YnjfQc0Nr/YIZG402EMudGE0nBTn+Oy/3HxePBHHE/cAQtiYYlJSOJK5rRCzC17mOsvmtEigczhCrNuhoM6S5MBVfcwxoRE5DIiWxA6gEeMMZ+LyE3AMmPMbh29ncnANSORtkrktuqYmDefz5LWuLqtOtxL1mBGD4/WrOfQsYv44MvpxAZMP26COOKSBGz2z32cuwLHcIc8jSWR8DN2clYsockXyGH4tDdxfxSZ0Q3Y+fjsYrxWZUJ/BBuDxQLrWEK2hTN+NgCL6+re4obCE5ANmxkM1O8VOUlrXagEGEn/9924clreVvvNv57mYBNJEtrCMAqoBQNvmYM5guVN/w5fMRKr3kTe7U+bX3/D91/j2xc1b+M59NNnmz9D4i439NPahETAfF8dbz1yIw8C7wPuxjAGqHO4cAoQhtotBax4YiLOcIi7X32Es2zD6cAlp0f2u48laiSr27oEoNXEw3511fzzsZt4BDgAePSQSAD7nfN/TXV+y1necMDRZnsd1V7/MmZq114ujo5fXaC4uJLb7pjVIlkyPnGqv+WLJAV+Yy1rzniAR577cdNzF5zxAJOPWs7PfzYPyxHGDju47Y6ruW/wYcyt/TsmDJYYnnxlAhNzHuNTzseZE8QRlqbrJCds3XbHLH7+s3k4HDbhsNVUz7ZLMGYUlZUNrSZ2uSSMTyJ7zua6bEQMVpDEI2MFjENoCHkJ4sJFEJczwL5jv8Czwdf077D+NyMwcyB5Atj2AC6BoCGHEN8oLOPRbzxDbUUeOWtqIlsFGkPtuDweHfRM5/3PUrvh5u7uQLczxiwCFiWV/bqVuken02bGAtdMRdqqpaGepRS7VyUEjzHxi/Ib/MMQAvw/nuNFTqPA2sI1nh9zY8MrgOF/+Bv78kxk/sIY4icF4hOannbty+pXRsFHkUSs5KCZ6Mvi5xQMFg24CeDCTRAhcXZANmwmf0OkPTu8Ggiy7FVvyiSwb1Sui7wGKKS26XpT7C+Y1v+6pn8HqzoEpmUquTSGExL8LH/Lk21i5fH1/l75UNOs8bS4ep5wiOWuyB8It9Z9iyHPrOLmXa8xKViOTWTqzvP1lwD8+aF7uKGw5cbkX9c0ALSaeLio8i9Nq5M/iyv/52M3Mb344hb1P48eg9tZiYzt9S9j7m2/Sibo+NV1UiVLtmbykStwv+yLxWZMPmo5mMhvePzveew2vDEGE92SLjZOrj1zCrPOe4aTS5elTMSKtRc/I7rw5VOor78TCHDEoTkpE7sqHu4P33fzxarxnCmP8lzgRxyZ+y88xo8kLCmCgMvFktARnCXzeY7z2HfsF/BKgHdrD276d9jvqi8h+bRWAeMVyt4fmLiTCalPPFSqN8rkjGtGIm2Vmtuqa3OLqlgSl8GNnxymsxixA0gDnMDlTfU+bziXv7vnRAK06P3+kjU1lPXLobi4kuLiSl7cMjyhzeTEMAMY3E2TDMfYH7CAUzFYTbf2BZu78sZjxa+zjbZHtC072l6xO/GI2XrcFBG3qC2uPP7f4dJ+p/FM1VMt6l3S77SEx4bUgWtr5cmBMNAiGBVjcBHGQTThizDhaPmeSHXteE4TZk7tYq4iyFk4uXnXa0Dk2MqQaJJGR+j41XViY0tbYolcgUDzetif/2weAI2NzWWzr7mL1fP2wVMYavqEm3X2OyxfM5yaOvCUbqNgQHXKxLBU7cXKIuv2c/H7YfY18zj8iHcT+lxZW8IRG5bixws2HM9iXm84jmPdb+ITQ6MBryPSpfr6PMBB2BRg42D1F+MZuLOM4iEt/x38AkEL8qIrHRonuzB5VsrdS1KdeKhUb6M/4X1ELIkrnoWNkLjxtUNCrNuRtL2lSOS0qjTaFGyspDbDOPk+C5jOa9STz3Re4yReotYMSqOPIXx2cULZemtIyveYXH5/9Qsp6z2YVF7YYlojdflKa2DKeqnKLUzLLW8gISGjIy4t+p+U5ZcUnZrweE7tYiYFyzkKw1cEmRQsZ1KwnDm1i1O+XqlsEUvkimc5wjgciWNTLDkrXjhsMXhA4h/2qdpzOOwW7aW6htMVpGxT4gLsVO3NzHuaHfsX828n7CXgm+oilOMijwamsYQySpnGEo407zL8x4nJXxUP98d/qJuPC4WTD3LiP9SN/1B30wyrUn2VBq59ROokrpbhVdg42ackMbEBYyKnVaXRpsFqcZpMquvYOPFaiTMLrSWaJdf7hr2xRV9SlUfvEEZngJtnKGU3Jz0n2RVpl+8dTj17tE8r5e25v+allOUP1vwt4XFspjcX6Ad4COMivMczvUp1t1SJXHbYQTicODalSs5yOGy27UzckSZVe+Gw1aK9VNcIBV2Ujihrtz1fKI/3byzm2CDkDbGofq4Y/6TIHaVcfPSjpml3F48naT2/W6h4YgCz9nPic0S+r3hiQMIBJ0r1RRq49hGxpCmLAE4asAgwKW8+E/PmIwSwaEQINCVnhcTCdgi2BTvGFaVcL5WqzYl585mUNx+ibRJ3neR6yUsbYu1BA1CTUC9g51MTGknAzm91zjK5fK2jeaa2Ju4me3w5wK5WVswkl6deOJC6fF3SNdorT1dyEJ5MOnmm12nC3LzrNZ4LVZJnbG7e9Ro373oNp2ntX0OpzIglTnk8PvILduHx+Lj9zlncfucs3G4fOTk+3G5fU3KWP+Si3ufCH3Aw7+mjqKnzdrC9Btzu5jLLasDhqMHj8bVIIGutvdvumMWTj29EpITCwqlUVhZT/UgeDk/i74/DE6b60byU7zsYLKGu7ptUVu7Z2KFUb5HRNa6qZ0mVxLWy9iwMzZv2VwX3ZlF9HVMO+JLvWGvbXeTfWpvgalowUBXcmwkFf201gSzGacI8FLiJSi7nTCaz2LkNKxDmUvNLljdc2JQAdmLOABY13tDi9ecXnZHw2LYs/GEXXoL0i75DHy5sK/H95LUSkrYsT9zCJrE8kYkuwoifp4nt37g7zi6aydM1VJ3GfwAAHFhJREFUkQzhIyjmXSqbyuO1NqO7uzO9saUHNmE+C1eQE7aaylMlmSmVSakSueZcfwuBQPPpHx8tm8KK0zby+WsHsPfqFWzbmd8iaO1oe3NvvoH5jy6ksXFkdAut1L9Pye3V7trGVZefgjEPs25tkCMOdbNq9L64kva3chFg4I+rW6xbXfjyKSz/+E5EIq9t7bQvpfoSnXHtY9xWHUXOjbitOupCg9kU+DbNp2kJmwLfoXF7f/wuF4ECV1qZqem0WRcanFAvleb1mY1s5EMmh8qYFNzKbxpexsZNiFxs3Dze+IeUr79nV+KAPidvBo0J24FDI7nMyTsloawh7vCGdMrTYUQI4ojOHQt+HARxYGT3AtdqZz7Tiy+mxDmUL5xuphdfzPTii6l2Jt7+XJ+hmd5coAiDp9V5Z6W6RnFxJZMP/P/t3X+QVOWd7/H3d3pmQBx+7YBRkSgGiHLZAIpGd000G65XrY1Yu5qgUSSSm3VTZuvqtaJVxhh13TImLrVbuJUQdQWzURN3l6Vcdsm6/siPFQMGEDVXnRUjPxTDgCODzu/v/aO7h56e092nZ/p0n9N8XlVUus88/ZznGcYnX5453+e7jdbWdtpen8ma1deQu96seWg5XTtbea+nhdfemlowaC2nv7bXZ9LUtI+WlhdKJpHl9nfvd8bi/gDpql4T6eo6ilf/3ym4GwNjYWC8Fay4l00eGxg4/NmbblyhnVc54ilwPYJ19M0IvN61Mzj5aTR9FroeJPf5zLTgX3OX+rX5rZ0/DSy0cGvnhiHX8h8dKHT9S5O+ENju6oDrt48/n+1Nx/FfNDM3dQzbm45je9Nx3D7+/AKjrYzh6Xaj2+m9a/yiYacR9FmKvxy/aGQDFKmgrVsWBF4/+71DvHtaCp8xbcifznNnM27+/vS5sGX0V+h6MW/u6GP9vx5bMGGr66xmdm6aWjDpKijZKygpTORIo0cFjmATG3cEXp/2/m5Wvn4eP586O/Drz2z/OKdsfL+sPgtdz/Xtls/w6IEfDrnWSD9X8PCQayfzGjuZBuZcO+nSwdMDlk1aMqRdQyZo/YCj6KF5MIhtyAtmBxoa6O5PMUA/vRhjMv+ey3+kYGWBBKm/6/hnlvze0iHX+izFrRMu5FcdTwDDj8uKSnantzczhuyzqCPd6b3l4JPDnmdt9H6+cfBJPSogNTd/wZbA61/85L/zh9PgzmM/N+T65GM7WDvv/rL7m79gC4//pLyxrfzbTpqa3gSGJ2ztevAjtLam/+836FgrCE72CkoKEznSKHA9grU07mV681Ps7PmjwWvTm5/imC3P0/ngbJ47LXhBPWXt+0MKG4Tps6Vxb8nx3P/ej0nl7Z+mcNr4GFPZP/iM68lH/yNLxl412CY/aMy6c8Jnufm95zk4cDyX8RCP8yVaGnZz94RPDml3+/jzue3gT+nofZcvpSbzTw1Ng9eDxDk/PzsXSO+W3nLwycHro9FFakggLBIHM2e1sXTZA6x5aPngtaXLHmDmrDZmAov+14rCHy6zv3K8uaOPtf/cxbJrGvjEvBuKVgYrJExVMZEjkXnCjsmZ2DjVz54UfKZlPcovpxpFf519H6GjbwYTG3cMBphB10bbZymP7l/DRO8edsh+h43hTyZ9dcTfh43v/RcDTGfhhFOLfja7O3rmxD8O/HpL/4c88t4/MIAzlxSvZH4pf/mkL9KZCn6OrlSf2YIBQUFz7q/ow7artOx9YXggXI2CBv++bxUAZvaCuy+M/IYR+8Qnmnzd+imlG9aJ/HKq5VpyWfozj/7k8GM7QX22vT6TrVsWMH/BlsEgM+ha2DEGfTZoLIXceP17/OsTXfzsl1OZekxqVN+H0X4PpXZOOuFtIH7r17hjpvvsL9ww6n62rbyhJvPSjmuMBZVTzS9/Won+Whr3DgkuXzm4JJNglTa9+SnmjH9sVH2G8eVJn+fRAz8cLKsK0I+xfNLnS1YGK6bB9tPAfpobpo/o81k3HXqGfhoYoJ9N9GfqYqWvj/TX5mGz9muV3Z995CFLjwdIWEHlVEebEV+oz5mz2oYEp7d94y8zSVZpS5c9wO13Dj+JJGx/5Ti82zqOqcek14gwlcEKGc1nReqRkrNiKrecajab/qVDV9Mz0FL6w6Por9ipAFGP8abOp+nL+5Hso4GbO58eUX9RGZ48Vpk+w2TtK7tfkiC3nOrBgxMqkhEfts9iJwNEPUbIPtsKf3Zt8LmsIjI6ClxjKmz500r3V86pAJUeY1YXKTqtmS6i/1V0OaLIsA/bp7L7JUmiyIgP22fYkwGiGGN2t/WLVx3ebRWRylLgGlNhy59Wur9yTgWo9BizR0htbzqOKydfUbUjpMIqlmEfdZ9R3FskKlFkxIfts9jJAFGPUbutItFT4BpThcqplvOcZ26Z1GL95bbLngqQe0pqoVMBKjHGXNnnKW+dcCFd1jT4eqRJQGHLlZZb1jS3qEClhN1ljututEiuQuVPy31WM7fcabE+29tb2bZ1Hu3trYMnA+SuYUEnA1RqjFnabRWpDiVnxVhQOdWwCiVN5fcX1G5y0xvs7vnUYF+Tm96IZIxRq3TiU7nHZoUR9viqqI65EolKUDnVchQqd5rfZ1CC1emnv8Bjj1yJmeNunL5wcyRjzKXdVpHqUOAacyPJps9NmhrIlC196dDVtDb/Zkh/Qe22H7oag8H3+Z+t1BirKV301YH+ojuVpdpFUVQgbNa+svsliUaaEX+43Gn6mLn+frjpxhX84Tm/GNJnboJVV1e67df/b/rs1u7uw7VUcz9bqTHmCjpJQCSuGnqhZU9yE3z1qEAdCps0FdxueNHQSiRc1YISn0SSKWziVFC7hlQ/qVTe40ARl0rVbqtI9ShwrUNhk6aC2zXgeT8Wo0m4qiUlPokkU9jEqaB2A/0p+vvz/iEaYalUPdsqUl0KXGMkN0lqNHKTplJ0FUzECkqu+v2jV1c04aqUSs25mEolPpWTxFVuwpdI0uUmSI1WNnHK7EMaGjoZMyY4ESsoweqee6/nnnsrl3RVTHt7K3d86+M0Nk7RbqtIlegZ15iodJUsSD+taZn/LXaPoOSqaiRcRTHnXJVOfCqnelWtKl2J1EIUVbLw3NWr+H2CEqwqlXRVyLq1l/D1G++lu7uHVKqZ5567YfRzFpGSFLjGQKlkqpH25zQP1ldKvwcvkbCV1dzQSdPHJpKu0zQx9L1tx+6yxlipOQeJKvEpbLJXuW1FkigoQapYMlQ5fbofhTt0d+cmXQXfJ/9eUZZKzY6vu/soYNyw5DERiY4C1xjIJknlZvJnE6JGEsQF9WcMYDCkUGixe7xz+akcmN877HopY945lRlr3y8ZwFZ6ztVw1/hF/PDAjyDn1/2FkrjKaSuSZNkEqWwwCYeToUYaxAX1mUoNkL8DW+o+T34wM/B6IYvGtZVuVGB8o52ziISjwDUGqlEly2nIW/IL3+Ody09l3lUvcfvx68u+95MfzOTOYz/HKd+bVjR4rfScq6FYElf+Lm05bUWSrFpVsvr7h6dkFLvPbXsu4rn/mFvWfVfO38/aefePaHxRJoCJyGEKXKugZ6Cl6POi2SSp/Oc9R7rzmNtf1tyjVwOEuscHx8KnJr02onsvGtfGymMPcuijE2kJrh47bIyVmHM1dZGiz1KhEq3KaSsSR+3trUWfFc0mSN104woam3rpyzx7Opqdx2yf/+drKwCnubmBe+69HiDUfW7bcxHbHp7LyY/8pqz7dp47m0uu+XLJ4DWKOYtIOApcIxY2AanSFagO9H6MAZpy3p/MnPGPxarKVZyrbgUpp3qVKl1JPQibdFXJClRZL2w6A/d0EYHubnhh80Juv/PWUPfZ9rvjIz9gPYo5i0hpClwjVG4CUqUqUHX2fYSdPZ8hfaZA2s6eP+Kjfc/Q0rg3VgFi3Ktu5SoniUuVriTpyk26qmQyVNvrM1mz+hpy17A1Dy3nqqWrmTmrLTZBYpQJYCISTOe4RihsBatK6+ibUdZ1EZF8YatXRWHrlgVlXReRI4cC1wjVKgFpYmPww6WFrouI5KtlAtL8BVvKui4iRw4FrhEKqkwVVMGq0loa9zK9+SnInNwKzvTmp2hp3FvxewE09AzQfLCXhp6Bsj9bjcpZIlK+oKpUQdWrojBzVhtLlz1A7hq2dNkDzJwV7riqMLLV7e4+9ARzp73N3Yee4Lu/uJ/G3vDPxkb9fRCR4fSMa8SCEpCirhgFMLnpDXb2fIoGnAGMyU1vVLT/rHHvfsiU1zrADNzZNzt8sYJqfB9EZOSCEpAiqZIV4PTTX2DNQ1dgBk1NxukLN1e0/9sO/pT5/XtoZIB5rz8B/dC7/13+5s7HIMR0qvV9EJGhFLhWQW4CUjUqRmXvAc1k90ArfQ9I77ROea2DhgHIHgw+5bUOJh99iN4S1baq8X0QkdHLTUAKSti6/i/+mtV/v46mpn0Vu2dv7xS2brkXGIc79PSUd5+2zjWk3mkk1fFhwTYf0E5jagDrBTKP8jY199NI6R3XKKqFiUg4elSgyqqRsFWtpLDG7v70TmsuM44f6Cj52VolronIyAUlbJn10t19YkXv0919ImbR3ueeE1uGb92k4Ptf/3TJz9YycU3kSKcd1yqrRsJWtZLC+sakwPPqcbmzp6H04wJJrJwlcqQLSthqampm9Q8P0tpauX90trcf5JyzmunP2fws5z6XbFtKy4MTaXm2cCGVu3Y/wbDN1X74s3t+VvJRAVXOEgnHzC4A/gZIAfe7+915X78B+DLQB/wOuMbdf1usT+24VlmxhK0k3QNgoLmBfbMnsrdzCs+/eQZ7O6ewb/ZEDjQcHdg+NxGrWmMUkcoplrAVp/tcN+sZ3j0tRee5swv+6ZowgV5PMdCU/kf4QBP0eorjjw7+jVFv7xQ6O0+nvb21at8HkSQzsxRwH3AhMAe43Mzm5DXbAix0908AjwP3lOpXO641UI2KUaO5x4y173PnsZ/j57//asm2b2w4k413LSPV2Ed/XyNnf+Mh2PsBLc8OLbVYKBErSZWzRKR6FaNGc59F49rgsn9i5fzzCra57qo/4bvXr6frtx/h8rEP80jPVZww+79peWj4OrRu7SVs3XIvZr2cc1bzYCKWKmeJFHUm0ObubwCY2aPAYuCVbAN3fzqn/UbgylKdKnCtkWpUjBrpPWzHbk753jS2nTW3aLu+D4/ildXX4H1N9HWPAeAXt1/DeeNvGrKXXyoRSwGrSLJUq2LUaO6zaFwbi+YVPj6rvb2Vc97ZRJcfBR/ChWxg7G8/5BcHzxhyz2wi1sBAOgmrv39oIpYCVpGCpgE7c97vAj5ZpP1y4N9KdarAVQLZjt0cu2N30TYdfSeS6uulj8PPeqX6evlwoHVIMJpNxMoGrXA4EUtBq4jUQjbBKnsqABxOsMoNRsO2E0mKVE8/R791qBJdTTGz3HPqVrn7qpz3lv8BskcQ5TGzK4GFwLmlbqrAVUYsbIKVErFEJG7CJlgpEUukoH3uvrDI13cB03PenwDsyW9kZouAW4Bz3b271E2VnCUjFjbBSolYIhI3YROslIglMmKbgFlmNsPMmoElwLrcBma2APg+cLG7vxumU+24yqiETbBSIpaIxE3YBCslYomUz937zOw6YAPp47AedPeXzewOYLO7rwO+A7QAP7H0ufBvufvFxfpV4CqjFjbBSolYIhI3YROslIglUj53Xw+sz7v2zZzXi8rtU48KiIiIiEgiRBq4mtkFZvaqmbWZ2c0BX7/BzF4xsxfN7D/NrLJ1A0VERkjrl4hI/EQWuEZVMaFe5FaREpF40fpVXHt7K9u2zqO9vXJlXkVEwohyx3WwYoK79wDZigmD3P1pd/8g83Yj6aMS6t7bXWfw7IG72dxxPc8euJu3u86o9ZBEZCitXwWsW3sJ55y1iauu+DHnnLWJdf+yuPSHREQqJMrANahiwrQi7UNVTEi63CpSfYxjgGZeOnS1dl5F4kXrV4BsFamurqM4eHACXV1HcdONK7TzKiJVE2XgOpKKCd8p8PWvmNlmM9vc410VHGL1ZatI5cpWkRKR2Ihk/WrfP1DBIVZftopUrmwVKRGRaogycC23YsLFhSomuPsqd1/o7gubbWwkg60WVZESSYRI1q/W30v2QS6qIiUitRblKhpJxYSkUxUpkUTQ+hVAVaREpNYiK0AQVcWEeqAqUiLxpvWrMFWREpFairRyVhQVE+qFqkiJxJvWr8JURUpEaiXZD1yJiIiIyBFDgauIiIiIJIICVxERERFJBAWuIiIiIpIIClxFREREJBEUuIqIiIhIIihwFREREZFEiPQcVxERERGJke5ebMfuWo9ixLTjKiIiIiKJoMBVRERERBJBgauIiIiIJIICVxERERFJBAWuIiIiIpIIClxFREREJBEUuIqIiIhIIihwFREREZFEUOAqIiIiIomgwFVEREREEkGBq4iIiIgkggJXEREREUkEBa4iIiIikggKXEVEREQkERS4ioiIiEgiKHAVERERkURQ4CoiIiIiFWdmF5jZq2bWZmY3B3x9jJk9lvn682Z2Uqk+FbiKiIiISEWZWQq4D7gQmANcbmZz8potBw64+0xgBfDtUv0qcBURERGRSjsTaHP3N9y9B3gUWJzXZjGwOvP6ceCzZmbFOlXgKiIiIiKVNg3YmfN+V+ZaYBt37wM6gNZinTZWcIAiIiIiEmPv9+/bsKH9B1Mq0NVYM9uc836Vu6/KeR+0c+p578O0GUKBq4iIiMgRwt0vqNKtdgHTc96fAOwp0GaXmTUCE4H9xTrVowIiIiIiUmmbgFlmNsPMmoElwLq8NuuAqzOvLwWecnftuIqIiIhI9bh7n5ldB2wAUsCD7v6ymd0BbHb3dcADwMNm1kZ6p3VJqX4VuIqIiIhIxbn7emB93rVv5rzuAi4rp089KiAiIiIiiaDAVUREREQSQYGriIiIiCSCAlcRERERSQQFriIiIiKSCApcRURERCQRFLiKiIiISCIocBURERGRRFDgKiIiIiKJEGngamYXmNmrZtZmZjcHfH2MmT2W+frzZnZSlOMREQlL65eISPxEFriaWQq4D7gQmANcbmZz8potBw64+0xgBfDtqMYjIhKW1i8RkXiKcsf1TKDN3d9w9x7gUWBxXpvFwOrM68eBz5qZRTgmEZEwtH6JiMRQlIHrNGBnzvtdmWuBbdy9D+gAWiMck4hIGFq/RERiqDHCvoN2HnwEbTCzrwBfybzt3tD+g5dGOba4mALsq/UgKqRe5lIv84A6mIvZD7IvP17tWwdcq8j6NWP6O1q/4kdziZ86mMfgElHt9auuRRm47gKm57w/AdhToM0uM2sEJgL78zty91XAKgAz2+zuCyMZcZVpLvFTL/OA+ptLlW+p9asEzSWe6mUu9TIPqMn6VdeifFRgEzDLzGaYWTOwBFiX12YdcHXm9aXAU+4+bMdCRKTKtH6JiMRQZDuu7t5nZtcBG4AU8KC7v2xmdwCb3X0d8ADwsJm1kd6pWBLVeEREwtL6JSIST1E+KoC7rwfW5137Zs7rLuCyMrtdVYGhxYXmEj/1Mg/QXEZF61dJmks81ctc6mUeUF9zqTnTb7ZEREREJAlU8lVEREREEiG2gWu9lFsMMY8bzOwVM3vRzP7TzE6sxTjDKDWXnHaXmpmbWWwzQsPMxcw+n/m7ednMflTtMYYV4mfso2b2tJltyfycXVSLcZZiZg+a2btmFnhclKX9bWaeL5rZadUeY1j1sn6B1rBqji8srV/xU0/rV+y5e+z+kE6G+G/gZKAZ2AbMyWvzVeB7mddLgMdqPe4RzuMzwLjM6z+P4zzCziXTbjzwM2AjsLDW4x7F38ssYAswOfP+mFqPexRzWQX8eeb1HODNWo+7wFw+DZwGvFTg6xcB/0b6cMSzgOdrPeZR/J3Efv0qYy5aw2I2D61fNZlLXaxfSfgT1x3Xeim3WHIe7v60u3+QebuR9HmRcRTm7wTgTuAeoKuagytTmLn8b+A+dz8A4O7vVnmMYYWZiwMTMq8nMvw80lhw958RcA5qjsXAGk/bCEwys+OqM7qy1Mv6BVrD4kjrVwzV0foVe3ENXOul3GKYeeRaTvpfZHFUci5mtgCY7u5PVHNgIxDm72U2MNvMfmlmG83sgqqNrjxh5vIt4Eoz20U6S/5r1RlaxZX731Ot1Mv6BVrD4kjrVzIlZf2KvUiPwxqFipVbrLHQYzSzK4GFwLmRjmjkis7FzBqAFcCyag1oFML8vTSS/nXbeaR3kH5uZnPd/b2Ix1auMHO5HHjI3e81s7NJnz06190Hoh9eRSXhv3mon/ULtIbFkdYvrV9HtLjuuJZTbhErUm6xxsLMAzNbBNwCXOzu3VUaW7lKzWU8MBd4xszeJP0Mz7qYJjeE/fn6F3fvdfcdwKuk/48gbsLMZTnwYwB3fw4YS7oOeNKE+u8pBupl/QKtYXFcw7R+af06osU1cK2Xcosl55H51dT3SS/4cX0OCUrMxd073H2Ku5/k7ieRftbtYnePY43mMD9fa0knnWBmU0j/6u2Nqo4ynDBzeQv4LICZnUp64f9dVUdZGeuApZns3LOADnd/u9aDClAv6xdoDYvjGqb1S+vXka3W2WGF/pDOwHuNdMbhLZlrd5BeSCD9w/sToA34FXByrcc8wnk8CewFtmb+rKv1mEc6l7y2zxDDjNwy/l4M+GvgFWA7sKTWYx7FXOYAvySdsbsVOL/WYy4wj0eAt4Fe0rsTy4FrgWtz/k7uy8xze8J/vhKxfoWci9awmM1D61dN5lE361fc/6hyloiIiIgkQlwfFRARERERGUKBq4iIiIgkggJXEREREUkEBa4iIiIikggKXEVEREQkERS4SsWZ2V+Y2W/M7B9G8NmTzOyKKMaV6f/TZvZrM+szs0ujuo+IJJPWL5F4U+AqUfgqcJG7f3EEnz0JKHvhN7NUyKZvkS7p+KNy7yEiRwStXyIxpsBVKsrMvgecTLpU4vVmdrSZPWhmm8xsi5ktzrQ7ycx+ntk9+LWZ/UGmi7uBT5nZ1sznl5nZypz+nzCz8zKvO83sDjN7HjjbzE43s2fN7AUz22Bmx+WPz93fdPcXgaTVuRaRiGn9Eom/xloPQOqLu19rZhcAn3H3fWb2V6TLWV5jZpOAX5nZk8C7wP909y4zm0W66shC4GbgRnf/YwAzW1bkdkcDL7n7N82sCXgWWOzuvzOzLwB3AddENVcRqS9av0TiT4GrRO184GIzuzHzfizwUWAPsNLM5gP9pGtpl6sf+MfM648Dc4H/MDOAFOnyeyIiI6X1SyRmFLhK1Az4U3d/dchFs2+Rrm8+j/QjK10FPt/H0Edaxua87nL3/pz7vOzuZ1di0CIiaP0SiR094ypR2wB8zTLbCGa2IHN9IvC2uw8AV5HeYQA4CIzP+fybwHwzazCz6cCZBe7zKjDVzM7O3KfJzP5HRWciIkcarV8iMaPAVaJ2J9AEvGhmL2XeA/wdcLWZbST9a7ZDmesvAn1mts3Mrgd+CewAtgPfBX4ddBN37wEuBb5tZtuArcAf5LczszPMbBdwGfB9M3u5MtMUkTqk9UskZszdaz0GEREREZGStOMqIiIiIomgwFVEREREEkGBq4iIiIgkggJXEREREUkEBa4iIiIikggKXEVEREQkERS4ioiIiEgiKHAVERERkUT4/6KKhi3hxck6AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x360 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_classes = 2\n",
    "x_train, y_train = get_data(num_classes=num_classes)\n",
    "x_train_adv, model = get_adversarial_examples(x_train, y_train)\n",
    "plot_results(model, x_train, y_train, x_train_adv, num_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 150/150 [00:06<00:00, 23.35it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_classes = 3\n",
    "x_train, y_train = get_data(num_classes=num_classes)\n",
    "x_train_adv, model = get_adversarial_examples(x_train, y_train)\n",
    "plot_results(model, x_train, y_train, x_train_adv, num_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 Example: MNIST"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1 Load and transform MNIST dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test), min_, max_ = load_mnist()\n",
    "\n",
    "n_samples_train = x_train.shape[0]\n",
    "n_features_train = x_train.shape[1] * x_train.shape[2] * x_train.shape[3]\n",
    "n_samples_test = x_test.shape[0]\n",
    "n_features_test = x_test.shape[1] * x_test.shape[2] * x_test.shape[3]\n",
    "\n",
    "x_train = x_train.reshape(n_samples_train, n_features_train)\n",
    "x_test = x_test.reshape(n_samples_test, n_features_test)\n",
    "\n",
    "y_train = np.argmax(y_train, axis=1)\n",
    "y_test = np.argmax(y_test, axis=1)\n",
    "\n",
    "n_samples_max = 200\n",
    "x_train = x_train[0:n_samples_max]\n",
    "y_train = y_train[0:n_samples_max]\n",
    "x_test = x_test[0:n_samples_max]\n",
    "y_test = y_test[0:n_samples_max]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.2 Train DecisionTreeClassifier classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, \n",
    "                               min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, \n",
    "                               random_state=None, max_leaf_nodes=50, min_impurity_decrease=0.0, \n",
    "                               min_impurity_split=None, class_weight=None, presort=False) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',\n",
       "                       max_depth=None, max_features=None, max_leaf_nodes=50,\n",
       "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                       min_samples_leaf=1, min_samples_split=2,\n",
       "                       min_weight_fraction_leaf=0.0, presort=False,\n",
       "                       random_state=None, splitter='best')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.fit(X=x_train, y=y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.3 Create and apply Zeroth Order Optimization Attack with ART"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "art_classifier = SklearnClassifier(model=model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "zoo = ZooAttack(classifier=art_classifier, confidence=0.0, targeted=False, learning_rate=1e-1, max_iter=100,\n",
    "                binary_search_steps=20, initial_const=1e-3, abort_early=True, use_resize=False, \n",
    "                use_importance=False, nb_parallel=10, batch_size=1, variable_h=0.25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 200/200 [02:53<00:00,  1.15it/s]\n"
     ]
    }
   ],
   "source": [
    "x_train_adv = zoo.generate(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 200/200 [03:03<00:00,  1.09it/s]\n"
     ]
    }
   ],
   "source": [
    "x_test_adv = zoo.generate(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.4 Evaluate DecisionTreeClassifier on benign and adversarial samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Training Score: 1.0000\n"
     ]
    }
   ],
   "source": [
    "score = model.score(x_train, y_train)\n",
    "print(\"Benign Training Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_train[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Training Predicted Label: 5\n"
     ]
    }
   ],
   "source": [
    "prediction = model.predict(x_train[0:1, :])[0]\n",
    "print(\"Benign Training Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Training Score: 0.0900\n"
     ]
    }
   ],
   "source": [
    "score = model.score(x_train_adv, y_train)\n",
    "print(\"Adversarial Training Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_train_adv[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Training Predicted Label: 9\n"
     ]
    }
   ],
   "source": [
    "prediction = model.predict(x_train_adv[0:1, :])[0]\n",
    "print(\"Adversarial Training Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Test Score: 0.5100\n"
     ]
    }
   ],
   "source": [
    "score = model.score(x_test, y_test)\n",
    "print(\"Benign Test Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_test[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Test Predicted Label: 7\n"
     ]
    }
   ],
   "source": [
    "prediction = model.predict(x_test[0:1, :])[0]\n",
    "print(\"Benign Test Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Test Score: 0.1350\n"
     ]
    }
   ],
   "source": [
    "score = model.score(x_test_adv, y_test)\n",
    "print(\"Adversarial Test Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_test_adv[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Test Predicted Label: 5\n"
     ]
    }
   ],
   "source": [
    "prediction = model.predict(x_test_adv[0:1, :])[0]\n",
    "print(\"Adversarial Test Predicted Label: %i\" % prediction)"
   ]
  }
 ],
 "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.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}