{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Robust Neural Network: 2D toy example\n",
    "\n",
    "In this example, we train a simple network that is robust to adversarial noise. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from torch.autograd import Variable\n",
    "from torchvision import datasets, transforms\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn\n",
    "import matplotlib.patches as patches\n",
    "from scipy.spatial import HalfspaceIntersection\n",
    "\n",
    "%matplotlib inline\n",
    "seaborn.set(font_scale=2)\n",
    "seaborn.set_style(\"white\")\n",
    "\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# random points at least 2r apart\n",
    "m = 12\n",
    "np.random.seed(3)\n",
    "x = [np.random.uniform(size=(2))]\n",
    "r = 0.16\n",
    "while(len(x) < m):\n",
    "    p = np.random.uniform(size=(2))\n",
    "    if min(np.abs(p-a).sum() for a in x) > 2*r:\n",
    "        x.append(p)\n",
    "# r = 0.145\n",
    "epsilon = r/2\n",
    "\n",
    "X = torch.Tensor(np.array(x))\n",
    "torch.manual_seed(1)\n",
    "y = (torch.rand(m)+0.5).long()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline: cross entropy loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6937198638916016 0.5833333333333334\n",
      "0.17939965426921844 0.08333333333333333\n",
      "0.003378726541996002 0.0\n",
      "0.0008999327546916902 0.0\n",
      "0.00042692283750511706 0.0\n",
      "0.0002510817430447787 0.0\n",
      "0.000165336110512726 0.0\n",
      "0.00011694155546138063 0.0\n",
      "8.700493344804272e-05 0.0\n",
      "6.716114148730412e-05 0.0\n",
      "5.3410582040669397e-05\n"
     ]
    }
   ],
   "source": [
    "net = nn.Sequential(\n",
    "    nn.Linear(2,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,2)\n",
    ")\n",
    "\n",
    "opt = optim.Adam(net.parameters(), lr=1e-3)\n",
    "for i in range(1000):\n",
    "    out = net(Variable(X))\n",
    "    l = nn.CrossEntropyLoss()(out, Variable(y))\n",
    "    err = (out.max(1)[1].data != y).float().mean()\n",
    "    if i % 100 == 0:\n",
    "        print(l.data[0], err)\n",
    "    opt.zero_grad()\n",
    "    (l).backward()\n",
    "    opt.step()\n",
    "print(l.data[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualization: learned baseline classifier "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nbDZJks1m06JFi7R161a999573Yb7119/rfj4+I5gl6T+/fvrhz/8odauXauvv/7a43C32+3Kybmw\npZiyn5E7AACX8ijcCwsLlZiY2BGq7VJTU5WZmaldu3Z1O39CQoKKiopUV1en+PjvTjIoLy+XJCUm\nGntsAoD1+DpK+9e05/1UCcwgnEbtkgfh3tzcrLKyMo0bN85te0ZGhoqKilRTU6MBAwa4fU1+fr6e\nf/55Pfnkk1q6dKmSkpL0wQcfaPPmzbryyit13XXX+fYtAOD/+Gsl7q/3YSPBeOEW7JIH4V5bWytJ\nio2NddvePr2+vr7LcJ81a5bsdrteeOEF3X777R3Tb7jhBq1cuVJ2u93rwgGgnZlX3r2tjY0C+KLH\ncG9tbZUkORwOt+3t05uamrp8j6+++kqvv/66IiMjdeeddyo2NlaffvqpPv30U61evVrLli3rOJYP\nAN4wc7D7go0C/7Dq8tGTHsM9Ojpakrq8nr25uVmS1LdvX7ftDQ0NmjdvnpxOp/74xz8qKyurY76n\nnnpKGzduVHZ2th544IFefQEA4SlcV9o9cdcv4Rr44byM9HgTm5iYGEVERKihocFte319vaSud9t/\n9NFHqq2t1axZszqCXbow4v/Vr34lSdq8ebPXhQMIT/PKloT1Srs36K/w02O4OxwOpaenq7S01G17\naWmpEhMTlZCQ4La9rKxMkvvr05OSkpSYmKhTp055UzOAMESo+ybc+i7cvu+lPLoUbvz48dq6dauK\nioo6jb7Ly8tVXFysW265pct5k5Iu3Amo/a5yF6urq1Ntba1GjRrlZdkAesPZ1qbqsiNGl+GVvKpV\nkhTQe4EPT0mUPcL6z9FqD7xw3U0fTjxamu+55x5J0qpVq+R0OiVJLpdLK1eulMvlUl5eXpfzTpo0\nSX379tX69et1/PjxjultbW168cUX5XK5dOedd/ryHQB4qLrsSEg96KM92AOpuKpORytPB/xzEDzh\nPmqXPBy5T5w4UdOmTdO2bduUl5enCRMm6Msvv1RhYaFyc3M7jdzXrFkjSVq4cKGkCyP3pUuXasmS\nJZo+fbpyc3MVFxenzz//XAcOHNB1112nn/zkJ37/YgDcSxqYZfr7gXesnMPgHuDwL4L9Ao8fHPPS\nSy8pOztbmzdv1ttvv6309HQ9/vjjmjt3bqfL2NauXSvpu3CXpJkzZyojI0NvvPGGtm/frvPnz2vI\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd26da7e978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "XX, YY = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))\n",
    "X0 = Variable(torch.Tensor(np.stack([np.ravel(XX), np.ravel(YY)]).T))\n",
    "y0 = net(X0)\n",
    "ZZ = (y0[:,0] - y0[:,1]).resize(100,100).data.numpy()\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(8,8))\n",
    "ax.contourf(XX,YY,-ZZ, cmap=\"coolwarm\", levels=np.linspace(-1000,1000,3))\n",
    "ax.scatter(X.numpy()[:,0], X.numpy()[:,1], c=y.numpy(), cmap=\"coolwarm\", s=70)\n",
    "ax.axis(\"equal\")\n",
    "ax.axis([0,1,0,1])\n",
    "\n",
    "for a in x:\n",
    "    ax.add_patch(patches.Rectangle((a[0]-r/2, a[1]-r/2), r, r, fill=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Robust Neural Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6903979182243347 0.4166666666666667\n",
      "0.5490320920944214 0.25\n",
      "0.3407142162322998 0.16666666666666666\n",
      "0.13997694849967957 0.0\n",
      "0.07656937092542648 0.0\n",
      "0.024697601795196533 0.0\n",
      "0.009973687119781971 0.0\n",
      "0.004819630179554224 0.0\n",
      "0.0021180801559239626 0.0\n",
      "0.0009787884773686528 0.0\n",
      "8.645020557196403e-07 0.0007433881401084363 0.0\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "sys.path.append(\"../\")\n",
    "from convex_adversarial import robust_loss\n",
    "\n",
    "torch.manual_seed(1)\n",
    "robust_net = nn.Sequential(\n",
    "    nn.Linear(2,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,100),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(100,2)\n",
    ")\n",
    "data = []\n",
    "opt = optim.Adam(robust_net.parameters(), lr=1e-3)\n",
    "for i in range(1000):\n",
    "    robust_ce, robust_err = robust_loss(robust_net, epsilon, X, y)\n",
    "    out = robust_net(X)\n",
    "    l2 = nn.CrossEntropyLoss()(out, Variable(y))\n",
    "    err = (out.max(1)[1].data != y).float().mean()\n",
    "    data.append([l2.data[0], robust_ce.data[0], err, robust_err])\n",
    "    if i % 100 == 0:\n",
    "        print(robust_ce.data[0], robust_err)\n",
    "    opt.zero_grad()\n",
    "    (robust_ce).backward()\n",
    "    opt.step()\n",
    "\n",
    "print(l2.data[0], robust_ce.data[0], robust_err)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualization: learned robust classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/fWvf9WJEyeUmpqqKVOmaNGiRZ3eYCtc+Du3+/fv1+rVq5Wfn6+GhgZlZmbq3nvv7fZwbTgpLS3V\ntGnTtHjxYv3sZz/zah1/c8z+u9/97nc9L7l3/O53v9PLL7+sYcOG6ZZbblFtba02b96sw4cPa+rU\nqV2uW19fr5/+9Kf69NNPdc0112jSpEn69ttv9c4778jpdGrcuHFBehfm5M/cfvnll5ozZ44KCws1\nZcoUTZo0SVVVVXrvvff0+eefa/r06erTx6sHDVqSP3N7oddff13/+Z//KanjIa5w5c/cNjc364EH\nHtCmTZuUnZ2tm266SfX19dq6dau2b9+u6dOnh/X9M/yZ2/379+vuu+/W4cOHdeONN+rKK6/UwYMH\ntWXLFjU0NOjqq68O0rswrzNnzmjBggU6duyYrr322i5PQG8TkBxzm8zOnTvd2dnZ7sWLF7tdLpfb\n7Xa7XS6X+9FHH3VnZ2e7P/300y7X/9d//Vd3dna2e926de3Lamtr3bfeeqt7/Pjx7oqKil6t38z8\nndtbbrnFPWbMGPfu3bvbl7lcLveyZcvc2dnZ7j/96U+9Wr+Z+Tu35yssLHSPGzfOnZ2d7c7Ozu6t\nkkOGv3P7b//2b+7s7Gz3v/zLv3RY/uSTT7qzs7PdmzZt6rXazc7fuV2wYIE7Ozvb/dFHH7Uvq6ur\nc998883u0aNHu4uKinq1frMrLi5233nnne1/y6+//rpX6wUix7w6Wz6YeLxs7/Fnbg8dOqQjR47o\nhhtu6LDVaLPZtHDhQknSZ5991ovVm5u/v7dt3G63Hn/8cQ0YMKD9HhHhzt+5Xb9+vTIyMvTQQw91\nWH7//ffrzjvvbL+LZjjyd26/+eYbJSQk6MYbb2xf1q9fP/34xz+Wy+XSN99803vFm9wbb7yh2267\nTfv379dVV13l07qByDHThTuPl+09/sxtbGysHnnkEc2cOfOisbYTKuvr6wNbcAjxZ27P9/bbb2v7\n9u1asWJF+62fw50/c3vo0CEdP35cU6ZMuej48aBBg/Tss8/6fMjESvz9vU1MTFRdXZ1qamo6LC8t\nLZUkOZ3OwBYcQt566y1lZGRo3bp1Pl3uHagcM1W483jZ3uPv3KalpWnevHm67rrrLhr76KOPJEkj\nRowIXMEhxN+5bXPy5Ek9//zzuuuuu/SjH/2oN0oNOf7O7cGDByVJI0eO1N///nfl5uZq/Pjxuuaa\na/Tss8+G9QZpIH5vc3Nz1draqocffliFhYWqq6vTn//8Z23atEmXXnqprrzyyt4q3/SefPJJbd68\nWT/4wQ98Wi9QOWaqs5/M8HhZq/J3bjtTUVGhvLw8SQrbs2MDNbfLly9X37599dhjjwW+yBDl79yW\nlZVJkrZt26Zt27bpuuuuU25urrZv367XX39d//znP/Xmm2/6fDWDFQTi93b27Nmy2+165plndPPN\nN7cvv/rqq7Vq1aqwPlHx2muv7dF6gcoxU4W7GR4va1X+zq0ntbW1mj9/vioqKjR79uywvRIhEHO7\nefNmffbZZ8rLywv7S7PO5+/ctv29b9u2Tb///e/1k5/8RNK5J24tWbJE77//vjZs2KCf/vSngS7d\n9ALxe/v111/r1VdfVWRkpG699VbFxcXp888/1+eff67Vq1dr+fLl7cfy4Z1A5Zipwt0Mj5e1Kn/n\n9kJVVVWaO3eu9u7dq8mTJ2vp0qWBKTQE+Tu3FRUVWrlypW666Sbl5OT0TpEhyt+5jYg4d+RxzJgx\n7cEuSXa7XY8++qjef/99vffee2EZ7v7ObV1dnRYsWCCXy6W//OUv7Q8Aa2pq0iOPPKINGzZoxIgR\nuueee3qheusKVI6Z6ph7MB4vGxsbG4BKQ4+/c3u+oqIizZo1S3v37tWUKVOUl5cX1te3+zu3K1as\nUGtrq5YvX95rNYYqf+e27e99zJgxF41lZGQoPj5ex44dC1C1ocXfuf3kk09UXV2t2bNnd3iyp8Ph\n0G9/+1tJ0qZNmwJctfUFKsdM9YnM42V7j79z22bfvn164IEHVFlZqTvvvFNPPfVUWAe75P/cfvDB\nB5I6P0Y3atQoZWRk6NNPPw1MwSEkUJ8JnXWnLS0tYXsYxN+5LSkpkSQNHz78orGkpCQ5nU6dPHky\ncAWHiUDlmKk6d4nHy/Ymf+ZWkgoLC3X//fersrJS9913n1auXBn2wd7Gn7ldtGiRx3/Jycnt43Pm\nzOnV+s3Mn7kdN26cHA6HduzYodbW1g5jhw8fVn19ffvzMMKRP3OblJQkSRetK0k1NTWqrq5u/x2G\n9wKVY6YLdx4v23v8mVuXy6UlS5aoqqpKc+bM0dKlSzlR5jz+zO3ixYs9/mv7YPTlftRW5M/cxsXF\naerUqTpx4oReffXV9uXNzc36wx/+IEke790QLvyZ28mTJysmJkbr1q3rcGijtbVVzz77rNxuNw8G\n66FA5Jjp2q5JkyZp2rRp2rp1q2bNmnXR42Wvv/769u/19HjZefPm6f3339fTTz+tHTt2XPR4WV8u\n87Iaf+b2448/1p49e+RwONS3b9/28fMlJyfr7rvvDsp7MRt/f2/ROX/n9rHHHtPXX3+tF198Udu3\nb9fo0aP1xRdfaN++fZo2bZpuuOGGYL8l0/BnbpOSkvTEE09o2bJlmj59unJychQfH68vv/xS+/fv\n15VXXhnWG6Xe6q0cM+VT4Xi8bO/p6dw+/fTTeuutt7p87dGjR2vLli29V7zJ+ft7e6Hp06dr//79\nPBVO/s/tqVOn9NJLL+mjjz5SVVWVMjIydNddd+m+++4L62uxJf/n9ssvv9Rrr72m3bt3q6GhQYMH\nD9Ztt92muXPndno5V7j5y1/+ot/85jf6zW9+c9EGT2/lmCnDHQAA9JzpjrkDAAD/EO4AAFgM4Q4A\ngMUQ7gAAWAzhDgCAxRDuAABYDOEOAIDFEO4AAFgM4Q4AgMX8P7sxERCQ++JLAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd26d8a46d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "XX, YY = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))\n",
    "X0 = Variable(torch.Tensor(np.stack([np.ravel(XX), np.ravel(YY)]).T))\n",
    "y0 = robust_net(X0)\n",
    "ZZ = (y0[:,0] - y0[:,1]).resize(100,100).data.numpy()\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(8,8))\n",
    "ax.contourf(XX,YY,-ZZ, cmap=\"coolwarm\", levels=np.linspace(-1000,1000,3))\n",
    "ax.scatter(X.numpy()[:,0], X.numpy()[:,1], c=y.numpy(), cmap=\"coolwarm\", s=70)\n",
    "ax.axis(\"equal\")\n",
    "ax.axis([0,1,0,1])\n",
    "\n",
    "for a in x:\n",
    "    ax.add_patch(patches.Rectangle((a[0]-r/2, a[1]-r/2), r, r, fill=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Grid plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plot_grid(net, ax): \n",
    "    XX, YY = np.meshgrid(np.linspace(-0.1, 1.1, 100), np.linspace(-0.1, 1.1, 100))\n",
    "    X0 = Variable(torch.Tensor(np.stack([np.ravel(XX), np.ravel(YY)]).T))\n",
    "    y0 = net(X0)\n",
    "    ZZ = (y0[:,0] - y0[:,1]).resize(100,100).data.numpy()\n",
    "\n",
    "    ax.contourf(XX,YY,-ZZ, cmap=\"coolwarm\", levels=np.linspace(-1000,1000,3))\n",
    "    ax.scatter(X.numpy()[:,0], X.numpy()[:,1], c=y.numpy(), cmap=\"coolwarm\", s=70)\n",
    "    ax.axis(\"equal\")\n",
    "    ax.axis([0,1,0,1])\n",
    "\n",
    "    for a in x:\n",
    "        ax.add_patch(patches.Rectangle((a[0]-r/2, a[1]-r/2), r, r, fill=False))\n",
    "    ax.set_yticks([0.0, 0.5, 1.0])\n",
    "#     ax.set_xticks([])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd26d87b198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1,2,figsize=(8,4), sharex=True, sharey=True)\n",
    "plot_grid(net, axs[0])\n",
    "plot_grid(robust_net, axs[1])\n",
    "plt.tight_layout()\n",
    "plt.savefig('2D_grid.pdf', bbox_inches='tight')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Learning curves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fd2641024a8>]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATMAAAEFCAYAAACPewDuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8k2W+///XnbTpQlvaQim0LGVr\nEaWgVSq4DNvYoTM6OCrFmQEVgfHI8htQcR2O4nfEwyBIgXM8jkfBAZzCjIAL4jKiOG5dQGRHoFBa\naEs32tI1zf37I01o2qRJ26RNk8/z8eBBuLdcTezb67qv674uRVVVFSGE6OY0XV0AIYRwBgkzIYRH\nkDATQngECTMhhEeQMBNCeAQJMyGER5AwE0I4hV6vZ+PGjSQnJxMfH8/kyZPZsGED9fX1Dp1fW1vL\n+vXrSUpKYtSoUUyZMoWXXnqJ8vJyh85XZJyZEMIZli1bRlpaGgkJCdxwww3s37+frKwskpKSSE1N\nbfXc+vp6Zs+eTXp6OmPHjmXUqFEcOnSI9PR0Ro8ezebNm9HpdK0XQBVCiA7KyspSY2Nj1YULF6oG\ng0FVVVU1GAzq0qVL1djYWPXzzz9v9fw33nhDjY2NVf/rv/7LYvsLL7ygxsbGqjt27LBbBh8nBrNL\nZWVldXURhPBaCQkJre7fsmULAAsWLEBRFAAURWHJkiXs2rWL7du3M3HixFbPj46OZvHixRbbZ8+e\nTVVVFX5+fnbL2G3CDOx/oGAMPUeOE51Lvhf34+h34khFIjMzk7CwMGJjYy22R0ZGEhMTQ0ZGhs1z\nT506RV5eHjNnzsTX19diX//+/Xn55Zftvj9IB4AQooPq6urIz89n4MCBVvdHR0dTXl5OSUmJ1f0n\nT54EYPjw4Xz55ZfMmDGD0aNHc+utt/Lyyy9TVVXlUDkkzIQQHVJWVgZAcHCw1f2m7RUVFVb3FxYW\nArB3717mzZtHSEgIM2bMICIigrfeeos5c+Y41CParZqZQgj3o9frAWz2Npq219bWWt1fXV0NGMPs\nxRdfZPr06QA0NDSwZMkS9uzZw9atW3nggQdaLUe3CjNHOwGks8A9yffifpzxnfj7+wPYrD3V1dUB\nEBAQYHW/RmNsII4cOdIcZABarZalS5eyZ88ePvroI88KM+kA6L7ke3E/zuoACAoKQqPRUFlZaXW/\nqXlpqxkaFBQEGMOsuejoaEJCQjh//rzdcso9MyFEh+h0OqKiosjNzbW6Pzc3l7CwMEJDQ63uj4mJ\nAWzX7PR6vbn21xoJMyFEhyUkJHDp0iWys7MtthcUFHDu3DnGjBlj89z4+Hh0Oh0ZGRk0NDRY7Dt9\n+jRVVVXExcXZLYNHhdnxwtPsu3QA1cYTWge+z+HT94/S0GDo5JIJ4dmmTZsGwJo1azAYjL9fqqqy\nevVqVFUlJSXF5rnBwcFMnTqVCxcu8Prrr5u319fX85e//AWAe+65x24ZutU9M3ve+GoPOfrDJBfe\nQVxkyzEv7287CMDI0f2IHhjW2cUTwmONHz+e5ORkdu/eTUpKComJiRw4cIDMzEySkpKYMGGC+dh1\n69YBsHDhQvO2J598kh9++IFXX32V9PR0RowYwbfffsuxY8dITk5m8uTJdsvgUTWznj69AfjuzLFW\njzM0yLP1QjjbypUrWbRoEaWlpWzatImioiIWLVrEqlWrzI84Aaxfv57169dbnNurVy/S0tKYOXMm\nZ86cYfPmzdTU1PDEE0+watUqh97fo2pmo6PiOHTmC77O+4Zf14wj1D/E6nG2mqFCiPbz9fVl/vz5\nzJ8/v9XjTpw4YXV7WFgYzz33HM8991y73t+jamaTrrsWQ3EUZQ2FzNv1JE/s+X/s+ekLDKrlPTLJ\nMiE8j0eFWVCALwl+46jPiSNUieJCRQFv7k9j3XdvUd9wtdtXRdJMCE/jUc1MgInXhZK3L55z31dw\nX9IgftJ+xtc5mWgUDWC8pyY1MyE8j0fVzAB8fRSWzbmZiLAAtn98jpv8fs2w8Bi+OpduPkY1SJoJ\n4Wk8LswA+oQF8v/+MJ7QID/e2HmUSX3uRKe9Ok+S1MyE8DweGWYAURFBLJuTiFaj4Z0P8ki57i7z\nPunNFMLzeGyYAQwfEMYdiQMpLKkipPrqDJg1eutTkQghui+PDjOApJtjAMg4csm87VTx2a4pjBDC\nZTw+zAZHhRARFkDm8QLztuOFp7uwREIIV/D4MFMUhcSRfblSfXWc2ZmSHGr1dV1YKiGEs3l8mAEk\nXBNp8e8G1cCJIqmdCeFJvCLMRsSE0+Q5VxQVDhUc77oCCSGczivCLCjAl0F9rz50rkHD4QLrD7sK\nIbonrwgzgGsGh5tf9wuO5ExZDpV1V7qwREIIZ/KaMBsx6OpkjANColBVlaOFP3VhiYQQzuQ1YTYk\nuqf59YCeUQAcLpSmphCewuEw0+v1bNy4keTkZOLj45k8eTIbNmxwaKVhMC4Aun79epKSkhg1ahRT\npkzhpZdeory8vN2Fb4vo3kHm15GBvfHT6uS+mRAexOEwW758OStWrCA0NJRZs2YRGRlJamoqjz32\nmN1z6+vrmTNnDuvWraNPnz7MnDmTfv36sWnTJubMmWNeJNSVtJom3ZmqwoiIoeSWX6S8xvqS8UKI\n7sWh+cz2799PWloaSUlJrF27FkVRUFWVp556ip07d7J3714mTpxo8/y3336b9PR0Hn74YZYuXWre\nvnz5crZs2cLu3bvNq7t0hpLyGob3HczB/GOcKc1hTL9rO+29hRCu4VDNbMuWLQAsWLDAvDCBoigs\nWbIERVHYvn273fOjo6NZvHixxfbZs2dz99134+fn156yt0nTeTIulVUzJGwQAKdLzrn8vYUQrudQ\nzSwzM5OwsDBiY2MttkdGRhITE0NGRobNc0+dOkVeXh4zZ87E19fXYl///v15+eWX21HsdmiSZkWl\n1fw8fAQAp0tzOuf9hRAuZbdmVldXR35+PgMHtlyHEiA6Opry8nJKSkqs7j958iQAw4cP58svv2TG\njBmMHj2aW2+9lZdffpmqqqoOFN9xTef9v1RWTXhAKGH+PTkjNTMhPILdMCsrKwOMqw5bY9peUWH9\nRnphYSEAe/fuZd68eYSEhDBjxgwiIiJ46623mDNnjsM9oh3SpGZWfLkagCHhAympLqOs+rLr318I\n4VJ2m5l6vR4AnU5ndb9pe22t9QkPq6uNwbF3715efPFFpk+fDkBDQwNLlixhz549bN26lQceeMBu\nYbOysuweY+u4Bv3VNLtSXc9X36QTUGNs9n6S8TlDe1iveQrncfT7E53Hk74Tu2Hm7+8PYLP2ZBpW\nERAQYHW/RmOs/I0cOdIcZABarZalS5eyZ88ePvroI4fCLCEhwe4xWVlZVo+rr9OzZ9tFY1lRCIkY\nzK0xgfz7q/0o4b4kXGf/2qL9bH0vous4+p10l8Cz28wMCgpCo9FQWVlpdb+peWmrGRoUZBysOnLk\nyBb7oqOjCQkJ4fz58w4XuL2aTvsficLZi+UMCTfWxqQTQIjuz26Y6XQ6oqKiyM3Ntbo/NzeXsLAw\nQkNDre6PiYkBbNfs9Hq9ufbXmbIvXCbUP4ReAWGcKTkni5wI0c05NM4sISGBS5cukZ2dbbG9oKCA\nc+fOMWbMGJvnxsfHo9PpyMjIoKGhwWLf6dOnqaqqIi4urh1Fb5vmWZV9wfgY1ZDwgZTVlFMqnQBC\ndGsOhZlpdP6aNWswGAyAcbm21atXo6oqKSkpNs8NDg5m6tSpXLhwgddff928vb6+nr/85S8A3HPP\nPe3+ARxnmWY5+RU0NBgYGm4cPHumVIZoCNGdOTRodvz48SQnJ7N7925SUlJITEzkwIEDZGZmkpSU\nxIQJE8zHrlu3DoCFCxeatz355JP88MMPvPrqq6SnpzNixAi+/fZbjh07RnJyMpMnT3buT2VF85qZ\nvsHQ7EmAHG6MHu3ycgghXMOhMANYuXIlw4YNY8eOHWzatImoqCgWLVrE3LlzzY84Aaxfvx6wDLNe\nvXqRlpbGhg0b+PTTT8nMzCQ6OponnniChx56yIk/TtsUlFQxpHEwsNTMhOjeHA4zX19f5s+fz/z5\n81s97sQJ69PqhIWF8dxzz/Hcc8+1rYQuVFhSxejhEUQEhnO6sROgaTALIboPr5mc0VpvZUGJ8VGq\nIeGDKK+tpLiqtLOLJYRwEq8JM2sKSo1hdrUTQMabCdFdeU2YNa+YaTQKBcWNNbMw432zn4qzm58m\nhOgmvCbMmqdZ757+FDbWzIb1ikFRFHYd/4Sa+pquKJ0QooO8Jsya3zGLDO9BSXkN9foGAn0DzPfU\nXv3uzc4vnBCiw7wmzJqnWZ/wAFQVCkuNs3r0D+kHwP4Lhzq7ZEIIJ/CaMLNWMwPILzYuBLxs4h8B\nuLZPLEKI7sdrwqz5PbN+vRvDrMgYZqH+IQT4+FNZ1zkz3wohnMtrwqx5zSyqMcwuNIYZGAPtQnk+\ndQ2dMPOtEMKpvCbMmqeZtTC7JmIY9QY9Z0tdP7+aEMK5vCfMmgkK1BEcqONi0dVJJ4f1igHgQkVB\nF5VKCNFeXhNmaouGJkRF9CC/uIqGBuO0RlHBfQHIlpqZEN2O14SZlSyjX68eNBhUii4bB8oO7xWD\nTuvL0cKTnVw4IURHeU2YWZsVOyLMuAhLUZlxrJmv1pf+If04dzlPmppCdDNeE2bWqmYRYYEA5sea\nAKYMvRWAHy4e6ZxiCSGcwmvCzGrNLNRYM7vU+BQAQGyvIQDkXL7QKeUSQjiH14SZNaZm5qWyq2EW\nFRyJVtFwviyvq4olhGgHrwmz5jUzVVWb1MyuNjN9tD5EBUdyvvwiBtXQmUUUQnSA14RZi3tmKgT6\n+9IjwNeiZgYwIDSaGn0thVeKO7F8QoiO8Jows1YzA+N9s0ulVRbTasc13jc7fulUp5VPCNExDi9o\n0h0Y9A1U5BSR63u6xb7yijqLf+ceziYgMoKIED/OXiznSo2eHv4+1NXqGRTaH5AnAYRoC71ez+bN\nm9m2bRu5ublERETwm9/8hnnz5uHr69umaxkMBmbMmMHBgwdtLpLUnEeF2a5XdnCo0I99/z5q99iN\nbxuPUbQKCsb7Zns+O8XRgxeYvfRmQMJMiLZYvnw5aWlpJCQkMGnSJPbv309qaionTpwgNTW1Tdfa\nuHEjBw8ebNM5HhVm8T+7htJd6fj7B7TYZ6jXU5t/kdKAfvg21NKjrpTL4YO50qBDi7FH8+hB43CM\nmlIDPf1DyMz7kS0Hd/DLuMmE+od08k8jRPexf/9+0tLSSEpKYu3atSiKgqqqPPXUU+zcuZO9e/cy\nceJEh66Vk5PD2rVr21wGjwqzoTdfS5lvDQkJCS32VV/MZ/8jlmt+nuzTjysNOsByrBkoDA+PIfPC\nj+w6/gmFV4pZPH6OK4suRLe2ZcsWABYsWGBee1ZRFJYsWcKuXbvYvn27Q2GmqirPPvssffr0QaPR\ncPbsWYfL4DUdANbX9jXe9Dc1M5sKDww1vy6vrXBdwYTwAJmZmYSFhREbazlTc2RkJDExMWRkZDh0\nnXfeeYf09HSWL1+Ov79/m8rgNWFmLc2UJj2czYdnmJ4EAPD38XNZsYTo7urq6sjPz2fgwIFW90dH\nR1NeXk5JSUmr17l48SKrVq3i3nvvZdy4cW0uh/eEGdaqZsY00yhKs2bm1bnNAE4UnXFhuYTo3srK\nygAIDg62ut+0vaKi9RbOsmXLCAwM5Mknn2xXObrVPbOsrKx2H6eWXW6xrb7OOFzjj3dFEtDDhw/P\nGr+UUz/9RMQVf54cdvU+maPvLWyTz9D9OOM70ev1AOh0Oqv7Tdtra2ttXmPnzp3s27eP1NRUQkLa\n19nWrcLM2o395rKysqweV1NYSPOvTefrC/XwQVY1x/Iuk9BYUR02fDjDRvRhetp/mI/dlvI/HSq7\nt7P1vYiu4+h3Yi/wTPe26uutr51R11hpCAhoOcoAoKioiBUrVvDzn/+cpKQku+WxxWuamYq1e2aN\nzczwkAAMVmbVWHrrI64ulhDdXlBQEBqNhsrKSqv7Tc1LW83Q5cuX09DQwLJlyzpUjm5VM+sY2/fM\nevW03mvSQxdofp1Xnk90SF9XFEyIbk2n0xEVFUVubq7V/bm5uYSFhREaGmp1/8cffwzAbbfdZnV/\nXFwc0dHRfP75562Ww3vCzNrYDNVUM7MeZnG9h+Lv40eNvpafirMlzISwISEhgV27dpGdnc3gwYPN\n2wsKCjh37hwTJkywee6CBQusbv/73/9OUVERCxYssFmra8qLwszapsaamY0w0ygaFt38ECv//Rq7\njn3ChMFt7y4WwhtMmzaNXbt2sWbNGl599VU0Gg2qqrJ69WpUVSUlJcXmuQsXLrS6/bPPPqOoqMjm\n/ua8J8ysNjONwoJtjyPzaxxjlleR7/QSCeEpxo8fT3JyMrt37yYlJYXExEQOHDhAZmYmSUlJFjWz\ndevWAbZDrL28JsysdQDQOPlimI17ZgC+mrY97S+Et1q5ciXDhg1jx44dbNq0iaioKBYtWsTcuXMt\nfv/Wr18PSJi1n7VmZmMPpq9WQ2iQH1S27FpuOttsTX0N/r5te8RCCG/h6+vL/PnzmT9/fqvHOTql\nz65du9r0/l4zNMPq40yN98xUVTWvB9BciF+Q+fWf/rXKNWUTQnSY94SZtapZY61LNUCf8MCW+4H+\nPfuZX5+7LIucCOGuvCbMrM+aYaSqKn3CrIcZwJt3G2tkwboezi6WEMJJvCbMWhtnpqrQx0YzEyBI\n14NegWEye4YQbsx7wsyKpvfMWquZAYT6hVBWW2Gx8IkQwn04HGZ6vZ6NGzeSnJxMfHw8kydPZsOG\nDTYfLm2NwWBg+vTpxMXFtfnc9rNdMwNsdgCY9AoMo76hntzyi84umBDCCRwOs+XLl7NixQpCQ0OZ\nNWsWkZGRpKam8thjj7X5TduzWEGHtfIEgGpQiWhSM7NW+7omYhgA5y9LmAnhjhwaZ+YOixV0lPVB\nsyooxvAKCvC12NxcZFBvAI4XnWL8QJnKRgh341DNrLXFChRFYfv27Q69WdPFCmJiYtpX4nZrZWhG\ns/AyNBhaHDqisWZWUFnk9JIJITrOoTBzh8UKOqx5lmk05k3Nm5XN1wMA6OFrbIYeuHjYBYUTQnSU\n3TBzl8UKOqxZM1PRaGzWzIqshFnTZmp5jazWJIS7sRtm7rJYQcc1CzOttsk4M8s0K77cMswAhvcy\nztOUX3nJBeUTQnSE3Q4Ad1msADq4oEnjPOQmBqBBXw++cPLkSUorcsz7zp6/ZPUagzX9+Ilsvjuc\nTkVwadsKL2RBEzfkSd+J3TBzl8UKoGMLmjTU1PBdk3/7+PpCVRUEwMFvy9H6XJ2/XFek58OtF6xc\nPZTAa8IwDNeQcIP0aLaFLGjifpy1oIm7sNvMdJfFCjqsyT0vRaul7y/uILzqAsE1xQQF6QjsYb3m\n2Vzv/CGcLM52VSmFEO1kt2bmLosVONPgubPpN/UXVF+8SMjX73PTn99EF9oTgKdf+oyAYuv3zAAC\ntQFkX76AQTWgUbz6aTAh3IpDg2bdYbECZ1IaQ8j0N00mYOzh74sB22EW4OtPbUMdhZVF9A3u49Jy\nCiEc51CYucNiBR1l8QSARrH4W22yaGbPID9au7Uf4GO8h3jucp6EmRBuxKEwc4fFCjqs6T0z81MM\npprZ1TDr1yuw1TDzN4VZWR6J/a93ejGFEO3j8BoAXb1YgVOZQsxU7ibNzNDg1p9MCGhcAyCnTGad\nFcKdOBxmXb1YQYc1bWYqltssmpnBrfdq+mp8CPYL4mTxGRoMDWg1WmeXVAjRDl7THadYNDM1ltua\n1Mx8tXY+EgWu73stZTXl5JXLWppCuAuvCTMLzTsA2jJ5rApDwo3PqeZctjawVgjRFbwnzKzWzFoO\nzXDEwJ5RAJyXMBPCbXhlmJlfWxma4YgBEmZCuB2vCTOLe2YaxXJbGxcp6ekfQrBfkKwHIIQb8Zow\ns2AKMSsdAPZyTW1cN6B/SD8KrhRR19D2BV2EEM4nYUYbm5mNhw7o2Q9VVcmVpqYQbsErw6xlB4Da\nZJ9j1xgSZuzRPFOaY+dIIURn8Mowazk0o229mQBDwgYBcKr4rLNKJYToAK8Ms6YrTAHmpmNbDOwZ\nhb+PHyeKzjixZEKI9vLKMEOjsfhbNTheMzO1SDUaDYPDBnKhsoA6fV3rJwkhXM4rw6xlzawdVTOg\nf0hfVFXlQkWBs4omhGgnrwyzlkMz2htm/QBY+slLvLB3jTNKJoRoJwkz2tbMbKp/z37m10cKT7ZY\nsk4I0Xm8Msw61sy8euygntEWe/QGfUeLJoRoJ68MsxYdAO0YmgEQ4m+5dkGN3vbaoUII1/LKMHPG\n0AyTR8fOMr+ulV5NIbqMV4bZ1UGzbR+a0dyEweOYMtS4jJ7UzIToOt4ZZjR7ZqkN98ysHerv4wfA\nlfqqjhRKCNEBXhlmSmONzPR3e4dmmJRWlwHwytevd+g6Qoj2c3hBE4/SbGhGzt+3ceGDDynNyKLi\npl8BvW2emv1TET+k5zBm7EDztuIq4+J0ZTXl5FcUynqaQnQBr6qZBQ0biuLjg1+EMawC+/cHRaHi\n2HFKM7IA8D2w1+513ks7aPHvAN8A8+unP33ZiSUWQjjKq8IsfuUKEre+jV+vXgD0GpdI4ta3Gfu3\njeZj/PVXmHhqE8/8V7LD151342/Nr6/UVzutvEIIx3lVM1PRatFqLde59AkMbHGcBhUfH8fXw+wV\nGNbhsgkhOsaramZCCM8lYeYCpdWXu7oIQngdCTMnWTbhj+bX6bk/dGFJhPBOEmZOcl1knPm1PHAu\nROeTMHOiSYPHA1DbIM9oCtHZJMycyPSMZtaFQ11cEiG8j4SZE/UNjgCgoPIShnZOKySEaB8JMxNH\nF8xsRZCuB7cOGkt5bSU5ZbI4sPAuer2ejRs3kpycTHx8PJMnT2bDhg3U19c7dP7hw4d59NFHSUxM\n5LrrrmPKlCmsWrWKqirHJnCQMDNxQpgBjOk7EoAfC4455XpCdBfLly9nxYoVhIaGMmvWLCIjI0lN\nTeWxxx6ze+53333HjBkz2LdvH7feeiszZ84kNDSUv/71r8yaNYvaWvvTa3nVEwCtURSlI3M0ml3b\nJxaAk8WynqbwHvv37yctLY2kpCTWrl1r/H1SVZ566il27tzJ3r17mThxos3zX3jhBVRV5Z133iE+\nPh4AVVVZtmwZ27ZtY+vWrTz00EOtlkFqZiZOqpmFB4TS0y+YwwUnaDA0OOWaQri7LVu2ALBgwQKL\nmZyXLFmCoihs377d5rmnTp3izJkzTJ482RxkpvPnz58PwL59++yWQcKskXlus45eR1G4LjKOqvpq\nCq8UO+WaQri7zMxMwsLCiI2NtdgeGRlJTEwMGRkZNs8NCgri8ccf55577mmxT6fTATh030zCzMRJ\nNTOAED/jQidL9ix32jWFcFd1dXXk5+czcOBAq/ujo6MpLy+npKTE6v6+ffsyd+5cfvazn7XY9+mn\nnwIwbNgwu+WQMDNxYpiZqtkNhgau1MlU2sKzlZUZZ1oODg62ut+0vaKiok3XLSoqIjU1FYCUlBS7\nx3erDoCsrCynHteUodmiJvau0dr+UQxh1LAhABw/JL2aJu35XoRrOeM70euNj++ZmoTNmbY70iNp\nUlFRwbx58ygqKmLmzJkW99Js6VZhlpCQYPeYrKwsh45r7jtfHxrqrj6GlJCQwIdbbY8Vu+GGG64u\nVWfFnp++4M39aSy6eTa3DrqpzeXxNO39XoTrOPqd2As8f39/AJvjyeoaf68CAgKs7m+upKSEOXPm\ncOTIESZOnMhTTz3l0HnSzGykKG37KOytgdI3yLgOQH5lYXuLJES3EBQUhEajobKy0up+U/PSVjO0\nqZycHFJSUjhy5AiTJk0iNTUVHx/H6lwO/wZ39ehel2vjPbO6+tZnxogKiQTg2KVTXK4pb3exhHB3\nOp2OqKgocnNzre7Pzc0lLCyM0NDQVq9z7NgxZsyYQU5ODnfffTfr1q2z2XS1xuEw6+rRva6maNoW\nZucutn4zMyIwnL5BERwqOM7cXU9SWXelI8UTwq0lJCRw6dIlsrOzLbYXFBRw7tw5xowZ0+r5586d\nY/bs2RQXF/PQQw+xYsUKh2tkJg6FWdPRvVu2bOHxxx9ny5YtTJs2jY8//pi9e1tf0cg0unfr1q28\n8sorPPnkk2zfvp3p06dz6NAhtm7d2qZCu0Qbm5nZea3PJqsoCoFNVm3KLj3frmIJ0R1MmzYNgDVr\n1pg701RVZfXq1aiq2mpvpMFgYMmSJZSUlDBr1iyeeuqpVu9H2+JQ9LU2unfXrl1s377d5qMKptG9\nSUlJVkf3btu2jX379tl9VMHl2vjZ/c+7P/Lzmweh1doOwcigCM6U5gBIU1N4tPHjx5OcnMzu3btJ\nSUkhMTGRAwcOkJmZSVJSEhMmTDAfu27dOgAWLlwIwGeffcbhw4fR6XQEBgaa9zfVu3dv7r///lbL\n4FCYOWN0b/NzoW2je12trR0AABeLr9C/j+2bmnNvvJ9vzxt7gsprrd8cFcJTrFy5kmHDhrFjxw42\nbdpEVFQUixYtYu7cuRY1rfXr1wNXw8yUH3V1dbz22mtWrz1ixIiOh5lpdO/o0aOt7o+OjiY7O5uS\nkhLCw8Nb7DeN7rWmLaN7Xa4d1dryK63PKBuk68HzExfz/N41lNe2bcCgEN2Nr68v8+fPNz9PacuJ\nEycs/v3ss8/y7LPPdvj97VZH3GV0r6u1tQNAAcoq7HdcmB5tKq+RmpkQrmS3ZuYuo3tdrlkz8/Cf\nngdsDygcisKxjPP09fcl85uz9Ovfk9umtGxKh/gbw6yoyvpzaUII57AbZu4yuhdc+ziTfkgMFF4d\n4Hr5x0MEDYih0q+X1eN7opB3tJDNR43nHD+UT52hmNBelqGvNo6u/SH/KG9/8XeuDR7e5rJ5Cnmc\nyf140ndiN8ycPbr34YcfJicnh0mTJrF27do2jSVx5eNMhtGjKdr3FQZ9A6c3/A8AN+bu5kLIcBRV\npc4ngOzw1sfK9I8aTNx1fVvuOP1/AHx9+QfuHf9rAnWOBb8nkceZ3I+zHmdyF3bvmbnL6F5X0/j4\n0GfSRPreMYWQa41TX2vVBgYjhfnGAAAUZUlEQVRcPk7/8hPElBy8enAb+wpSk18AoLTmMk9/9rKz\niiyEaMKh8QjuMLrXnWja2FnQN7iP+fXFikJz01MI4TwOhZk7jO7tak1L3NYwA9A26WB459AuJ5RI\nCNGUQ9Ujdxjd2/Wu1qY0Gg3QtnUx+wT15mKFsbNg57GP+W38NGcWTgiv53Bbr6tH93a1jtbMnrz1\nP/jjRy84r0BCCAsOh1lXj+51J+1pJUeFWPZyVtfXEODr76QSCSFkcsZ2aOvTAiaLx88xv37g3cXU\n6Vt/HEoI4TgJs3Zob/fFuAGWY3q2H/mw44URQgASZp1ueHiM+XVpdetzogkhHCdh1smevn2B+bWf\nj/sMGhaiu5Mw62RBfj3Mr2XorBDOI2HmRPt+yHPouN+P/g0An53+CoPatvFqQgjrJMycaN8B68+v\nNnfH0NvMr/PK811VHCG8ioRZF/Dz8TO/PleWK7UzIZxAwszJ/vn5T3aPURSFRTfPBiD1u7fYdvgD\nVxdLCI8nYeZkWz4+7tBxfXpcnfTx3aMfuao4QngNCTMnGz08wqHjYnsP6ZazhwjhriTMnCzzWIFD\nC50AvDltFQCRPXq7skhCeAUJMxfYf6LAoeN66AIZGj6IgitFfJ97wMWlEsKzSZg50eQbBwCw6cOj\nDp8zZcitALzy9etU1VVb7Pvu/H7+fS7deQUUwoNJmDnRTSON0/yUlNdSUeXYjBiThtxifn2i+LTF\nvtXf/JXU796irsH6ylhCiKskzJxIoyjcf0ccAP/f6i8cOkdRFKYOnwjAe8c/tXpMZe0Vp5RPCE8m\nYeZEqqpy1+1DAbhUWu1w7ezmAdcDcKTwJOW1LZf006sNziukEB5KwszJggJ8uW+ycaHfE+dKHTpn\nUGh/8+uTRWcAzAvHAOgNeieWUAjPJGHmRKrBOA/GoL4hALzwxnfoG+w/qhToG8DySY8B8HWOcc2E\n2oartTp9g4SZEPZ038Uru5CtdS8LTl/Av74C5XI9ffRVGNCyc88xxo2KxmAw4OOjBcDHR4NebyA4\nxI+gEOM6AHG9jc3Tr3MyuT0mkQMXjoCqoNX7ojdIM1MIeyTMrPDv14/yI7aHV/hdOkdVYFSL7f/+\nNp9/f2ucBWOQTxAARz8/w9HPz9i81sJnJhHWqweKohDXeygnik6zYt8GAAYfu5keleFUTaiF8I78\nREJ4PmlmWjF49gOEjhmNtkegxfbRFz5lTN4nXFewj15XcomoPEv/smMAaA11aNpxb6vwYoX59Z9+\ntshiX49KY4JVlNW0+bpCeBupmVnh06MH176wDIDaS0VkzvkDAL2rrk6+OObiZ+bXcUXfA3Ag6ueU\nBEYTUlNIuX+fNr+vzkfH7+LvZsuPOyy210sHgBB2Sc3MnnYuK9dev4yb3GI9zTey3unUMgjRHUmY\n2dW5Yeaj0fLKL/7E+GbL0gkhWidhZkebFvxt7ORUOrhSSe/AcP7YZMFggAsVjj28LoS3kjCzR2nD\nR9SYe6oLKnPPffYX519UCA8iYWZHm2pmLlRZJ89nCtEaCTN73Gg22FPFZ7u6CEK4LQkzO5S2NDNd\n7MeCY11dBCHclvv8prorN6iYJUYbZ9X4+6H3urgkQrgvCTN73KBmNjV2ovl1dX2NzWdDhfBmXf+b\n6ubcoQMgUBfAxMHjAXjg3cV8ePJfXVwiIdyPhJk97tABoMKdI6aY//n2D/+UqbSFaEbCzA5F0/Uf\nkapC/5B+3Bl3NdB+/49FNMjUQEKYdf1vqrtzcc0s71LLabKbM90jmznmHp65fYF5uyxPJ8RVEmZ2\nuHrV8Ss19puLTe/3j+l3LQ9dPx2A9d9vIqcsz8ZZQngXCTN7XBxmZy+UO9A7abn/F8MncPugRPQG\nPc9+tpIvsr+VJqfwehJm9rg4zNKP5nPX4+/xypYsHl+7z2qwNd+kKArzEx9g9g0p6A16/jv9be7f\nvsDqyk5CeAsJMztc3cw0+WJ/LidySqmsbtnsNC2U0pSiKPxi+ASW3DLPvO3xPS/y3vFPMaj2F1ER\nwtNImLmZ3/7pIz769iyFJVXmba01Q2+KHs3fp2/g3mt/SbW+ls0H3+WR957mm5ysTiitEO5DwqyL\n3T4musW2//7HQR7+89XVzatrWp82W6NomH7dr1g79Xnieg+lrKacV799g+lp/0Hqt29arMEphKdy\nOMz0ej0bN24kOTmZ+Ph4Jk+ezIYNG6ivd2zwZllZGcuXL2fSpEmMHj2a3/zmN+zevbvdBfcUt1/f\nnzWLf8a4Uf1sHnO+sMLmvqbCA0N5cfLjLL31EbQa47J2/87JYMb2+Ww7/AF55fnyKJRwma7OCIcX\nNFm+fDlpaWkkJCQwadIk9u/fT2pqKidOnCA1NbXVc6uqqpg9ezZHjx5l6tSp9OvXj08++YTFixdT\nUlLC73//e4cL7GlUVWVY/1CeeXAs5Vfq+N2yj1oc8+b7R5gyYZjD17wxejRb713H/ouH+f78Ab44\n+y3/OPIh/zjyIT39Q7hcU84dw27nloE3MqhnfwJ1Ac78kYSX6uqMcCjM9u/fT1paGklJSaxduxZF\nUVBVlaeeeoqdO3eyd+9eJk6caPP8t99+myNHjrBs2TJ+97vfAfDoo48yY8YMVq1axdSpU+nVq5cj\nRfE4TWtKIT10vPQft/DM/3zd4esqikJC1CgSokYx6/p7yMz7kawLh9h/8TAAn5zaxyen9gEwMmI4\nw3oNZmTEMPoG9yE8IBR/H78Ol0F4D3fICIeamVu2bAFgwYIF5t49RVFYsmQJiqKwffv2Vs/funUr\nvXv3ZsaMGeZtQUFBPPLII1RXV/P+++87UgyP1LzVN2pYb3b95S6LbQpw52O7OHGuhAYrPZv2BOl6\nMGHwOB67ZR6b71nLM7cvJOW6O7mh33VEBkVw9NJPvHf8E17+6r/54+7nefDdJTz20XJW/ft/2XJw\nB5+d/orMvINkl57nSl2V/TcUXscdMsKhmllmZiZhYWHExsZabI+MjCQmJoaMjAyb5+bk5FBQUEBS\nUhJardZiX2JiIgAZGRk8+OCDjhTF41gbdqHRKLzz4lRW/+lji+2Pp34FQERYALfER3FH4iB6hwbg\no1Xw9dG2uI41iqIwpt9IxvQbad5WUVvJiaLTnCzOJr/yEqVVZeRcvsD58otWr+Hv40dP/xBC/UMI\n9PUn2C+Inn7BBPgGEOjrT6BvAAGmv338CfT1p1JfRa2+Dp3Wt9OGu4jO4w4ZYTfM6urqyM/PZ/To\n0Vb3R0dHk52dTUlJCeHh4VYLCjBw4MAW+yIiIvDz8+Ps2bP2iuGxbN2PDwrUmV+Pv64few5fDZZL\npdXs/PI0O788bd6m89EQPzwCXx8NocF+9PD3pUeAL/46Lf46H/z9jH/76bQE6Hzw9dGg0ShotQpa\njYaYHrEMCY5DoygoinGscEVdJYVVlyiuKuFybTmlNaUUXimmtOYy5TUVnCw6g4rjNcUNZ7eioKDT\n+jb+0TV57YuP1hcfjRZfjQ8+Gh98tD74aLT4aHzQKho0Tf5oNabXChpF2+S1Bq2iNb+2PLb5HwWt\npvm5xn2KoqCgAI2fB1drG2D5b/MWi9fNj1GgcZti3NjsdePxFq9Nx1s7t23Hm8rc9HxndQa5S0bY\nDbOysjIAgoODre43ba+oqLBaUNP5ISEhVs8PCgqiosKx3jp3p2l8pEjThkeLdmzOYOff0m1c0Pj1\nlBy6QKK9//DqDHDkIgagpPGP8/kD0fQkmp7AAKvHdPwXRN/4xz7TkBN5lKs9/A0ljBkzBh8fh/sB\nrXKXjLD7U+j1xv+sdDqd1f2m7bW1te0+v7q62m5BAbKyHBsI6uhxjtLedgsNGVlQW2uuSim9e6EW\nFaO59hoMR4xz88cWfQ/A8KIMyv0jOBGRiF7b+o30YIPtR5Aq1SAMirbVY4Ror549tBw8eLDD13GX\njLAbZv7+/gA2x4rU1dUBEBBgvXvfz8/P4jhr5wcGBtotKEBCgv1VvrOyshw6rk3acL0p9g/xSi75\nXkSHOPqd2KscuEtG2O3NDAoKQqPRUFlpvXZgqv7ZqmL27NkTwOb5lZWVBAUF2S2oEMI9uUtG2A0z\nnU5HVFQUubm5Vvfn5uYSFhZGaGio1f0xMTHm45orLCyktraWwYMH2y2oEMI9uUtGODTOLCEhgUuX\nLpGdnW2xvaCggHPnzjFmzBib50ZFRREVFUVWVlaLZwTT0403vq+//npHiiGEcFPukBEOhdm0adMA\nWLNmjfnNVFVl9erVqKpKSkpKq+ffdddd5Ofns3nzZvO2yspKXnvtNfz9/fn1r3/tSDGEEG7KHTLC\noT7Z8ePHk5yczO7du0lJSSExMZEDBw6QmZlJUlISEyZMMB+7bt06ABYuXGjeNnfuXPbs2cOf//xn\nMjIyGDBgAJ988gnnz5/nT3/6k9XuWiFE9+EOGaGoDo6cq6+v5/XXX2fHjh0UFBQQFRXFXXfdxdy5\ncy26VOPi4gA4ceKExflFRUWsXr2avXv3Ul1dzZAhQ3j44Yf55S9/6cjbt6nnRXrN3I98L+7H2b9T\nXZ0RDodZV5Mw697ke3E/nvY7JZMzCiE8QreqmQkhukZ3qJl1mzATQojWSDNTCOERJMyEEB5BwkwI\n4REkzIQQHkHCTAjhETwmzDq6Zp9wzJo1a4iLi7P6Z/HixRbH7ty5k2nTpjFmzBhuv/12VqxYwZUr\nV6xe94svviAlJYXrr7+ecePG8cwzz1BcXNwZP1K3VFBQQEJCAhs3brS631Wf/YEDB3jwwQe56aab\nGDt2LIsWLeL8+fPO+rE6pGPz5bqRjqzZJxx34sQJdDod8+bNa7Fv+PDh5tf/+7//y+rVq4mLi+P3\nv/89J0+eZOPGjRw8eJC3337b4vGWDz74gMcee4wBAwZw//33c/HiRXbs2EFGRgb//Oc/bU6n7K2u\nXLnCwoULbc7/5arPPiMjg4ceeoiePXty9913U1FRwQcffMD333/PP//5T/r37+/yn71VqgfIyspS\nY2Nj1YULF6oGg0FVVVU1GAzq0qVL1djYWPXzzz/v4hJ6jokTJ6rTpk1r9Zi8vDx15MiRakpKilpX\nV2fe/uqrr6qxsbHq3/72N/O2yspKdezYserkyZPViooK8/bt27ersbGx6ssvv+z8H6Iby83NVe++\n+241NjZWjY2NVd966y2L/a767A0Gg5qUlKTeeOON6sWLF83bv/nmGzUuLk5duHChC37atvGIZmZH\n1+wTjqmsrCQvL8/8oLAtaWlp6PV6/vCHP+Dr62ve/sgjjxAUFGTxfXz44YeUlZXx4IMPWswmeu+9\n9zJ48GDeffddGhpkwRKAjRs3cuedd3L8+HFuvvlmq8e46rP/5ptvyM7O5t5776Vv377mY8eNG8ct\nt9zCZ599RmlpqbN/5DbxiDDryJp9wnHHjx8HsBtmps/7pptustju5+fHmDFjOH78uHkqZdOxpvUR\nmxo7dixlZWX89NNPHS67J3j77beJjo5m8+bNNuf3ctVn39qxiYmJNDQ0dPkjh90+zExr9llbcw+M\na/aVl5dTUuKaxde8iWnKltLSUh566CFuuukmbrrpJhYtWsSZM2fMx+Xk5NC7d2+r87ZHR0cDmGck\nNd08HjCg5cJ1pnswzWcv9VYvvPACO3fu5IYbbrB5jKs++9aONV23q9e/7fZh1pY1+0THmMLs//7v\n/wgKCuK+++4jPj6ejz/+mOnTp3PsmHHJvbKyMrvfh+nmdWlpKTqdzrzCT1OmX0hbN7q9zW233dZi\nxe/mXPXZt7a2penYrv4d6/a9mR1ds084TqvVEh0dzYoVKyyaG++99x5PPPEEzzzzDDt27ECv1zv8\nfbTlWGGfqz570xAna8ebttlaKq6zdPsw6+iafcJx//mf/2l1+1133cW2bdvIyMjgzJkz+Pv7O/x9\ntOVYYZ+rPvvWfs/c5Xvq9s3Mjq7ZJ5xj5MiRgHG5sJCQEJtNjubfR0hICLW1tVb/r276TuW7c5yr\nPntT89Latd3le+r2YdbRNfuEY/R6PT/++CMHDx60ur+mpgYw9prFxMRQXFxs3tZUXl4eGo2GQYMG\nAa2vmWjaJuuqOs5Vn313+J66fZhBx9bsE44xGAz89re/Ze7cuS3GfamqyoEDB/Dx8eGaa64hISEB\ng8FAZmamxXG1tbX88MMPDBs2zHzT2DSDqbXhM99//z3BwcEMHTrURT+V53HVZ9/asenp6Wg0GuLj\n4536s7SVR4RZR9fsE/bpdDomTpzI5cuXef311y32vfnmm5w8eZJf/epXhISEcOedd6LValm/fr1F\nE+a1116jsrLS4vuYMmUKPXr04I033jD3mAH84x//4OzZs9x3331oNB7xn2mncNVnP3bsWKKiokhL\nS7OonX377bd8/fXX/PznP+/yJSM9ZtrsxYsXs3v3buLj41us2bd27VrzkwGi/XJzc5kxYwaXLl1i\n/PjxjBgxgsOHD5Oens7QoUPZsmULYWFhAKxatYq//vWvDB06lIkTJ3Lq1Cm++OILbrjhBjZt2mTR\nK/bOO+/w/PPP069fP6ZOnUpBQQEfffQRAwcOJC0tTW4RWPHuu+/y9NNP8/TTT/Pggw9a7HPVZ//F\nF1/w6KOPEhwczJ133klVVRXvv/8+QUFBbNu2zeoYtM6kff7555/v0hI4yeTJk/Hx8eHAgQN8/fXX\naLVaZs2axdNPP42PT7fvtHULISEh/PKXv6S8vJwDBw6Qnp6OwWDgvvvuY+XKlfTs2dN87Lhx4wgP\nD+fw4cPs27ePmpoa7rnnHl588UUCAwMtrjtq1CiGDh3KsWPH+PLLLykuLuaOO+5g5cqV9OrVq7N/\nzG7h2LFj/Otf/+K2225rcRvFVZ99TEwM119/PadOneLLL78kLy+PW265hVdeecV8H64reUzNTAjh\n3eRmhBDCI0iYCSE8goSZEMIjSJgJITyChJkQwiNImAkhPIKEmRDCI0iYCSE8goSZEMIjSJgJITzC\n/w/LeTr63IHm2gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd264163080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "seaborn.set_style(\"whitegrid\")\n",
    "d = np.array(data)\n",
    "fig, ax_loss = plt.subplots(1,1,figsize=(4,4))\n",
    "ax_loss.plot(d[:,0], color='C0')\n",
    "ax_loss.plot(d[:,1], color='C1')\n",
    "ax_err = ax_loss.twinx()\n",
    "ax_err.plot(d[:,2], color='C2')\n",
    "ax_err.plot(d[:,3], color='C3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd230b4d4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "seaborn.set_style(\"whitegrid\")\n",
    "d = np.array(data)\n",
    "fig, axs = plt.subplots(1,2,figsize=(8,4))\n",
    "axs[0].semilogy(d[:,0], color='C0')\n",
    "axs[0].semilogy(d[:,1], color='C1')\n",
    "axs[1].plot(d[:,2], color='C2')\n",
    "axs[1].plot(d[:,3], color='C3')\n",
    "plt.tight_layout()\n",
    "plt.savefig('2D_curves.pdf', bbox_inches='tight')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'list' object has no attribute 'twinx'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-14-2708ab0a7f99>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'exp'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'b'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0max2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtwinx\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     10\u001b[0m \u001b[0ms2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0max2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r.'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'list' object has no attribute 'twinx'"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd26652b710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "ax1 = plt.plot()\n",
    "t = np.arange(0.01, 10.0, 0.01)\n",
    "s1 = np.exp(t)\n",
    "plt.plot(t,s1,'b-')\n",
    "plt.xlabel('t (s)')\n",
    "plt.ylabel('exp',color='b')\n",
    "\n",
    "ax2 = ax1.twinx()\n",
    "s2 = np.sin(2*np.pi*t)\n",
    "ax2.plot(t, s2, 'r.')\n",
    "plt.ylabel('sin', color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "PyTorch (master)",
   "language": "python",
   "name": "pytorch_master"
  },
  "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.5.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
