You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@singa.apache.org by ka...@apache.org on 2017/03/15 09:16:27 UTC

[1/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Repository: incubator-singa
Updated Branches:
  refs/heads/master a6e7690bd -> 0695daa66


http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/requirements.txt
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/requirements.txt b/doc/en/docs/notebook/requirements.txt
new file mode 100644
index 0000000..21e293b
--- /dev/null
+++ b/doc/en/docs/notebook/requirements.txt
@@ -0,0 +1,5 @@
+matplotlib=2.0.0=np112py27_0
+nb_conda_kernels=2.0.0=py27_0
+nb_conda=2.0.0=py27_0
+pillow=4.0.0=py27_1
+tqdm=4.11.2=py27_0

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/rnn.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/rnn.ipynb b/doc/en/docs/notebook/rnn.ipynb
new file mode 100644
index 0000000..054ac19
--- /dev/null
+++ b/doc/en/docs/notebook/rnn.ipynb
@@ -0,0 +1,257 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# RNN for Character Level Language Modeling"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Dataset pre-processing\n",
+    "\n",
+    "### sample data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "import cPickle as pickle\n",
+    "import numpy as np\n",
+    "import argparse\n",
+    "\n",
+    "# sys.path.append(os.path.join(os.path.dirname(__file__), '../../build/python'))\n",
+    "from singa import layer\n",
+    "from singa import loss\n",
+    "from singa import device\n",
+    "from singa import tensor\n",
+    "from singa import optimizer\n",
+    "from singa import initializer\n",
+    "from singa.proto import model_pb2\n",
+    "from tqdm import tnrange"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "class Data(object):\n",
+    "\n",
+    "    def __init__(self, fpath, batch_size=32, seq_length=100, train_ratio=0.8):\n",
+    "        '''Data object for loading a plain text file.\n",
+    "        Args:\n",
+    "            fpath, path to the text file.\n",
+    "            train_ratio, split the text file into train and test sets, where\n",
+    "                train_ratio of the characters are in the train set.\n",
+    "        '''\n",
+    "        self.raw_data = open(fpath, 'r').read()  # read text file\n",
+    "        chars = list(set(self.raw_data))\n",
+    "        self.vocab_size = len(chars)\n",
+    "        self.char_to_idx = {ch: i for i, ch in enumerate(chars)}\n",
+    "        self.idx_to_char = {i: ch for i, ch in enumerate(chars)}\n",
+    "        data = [self.char_to_idx[c] for c in self.raw_data]\n",
+    "        # seq_length + 1 for the data + label\n",
+    "        nsamples = len(data) / (1 + seq_length)\n",
+    "        data = data[0:nsamples * (1 + seq_length)]\n",
+    "        data = np.asarray(data, dtype=np.int32)\n",
+    "        data = np.reshape(data, (-1, seq_length + 1))\n",
+    "        # shuffle all sequences\n",
+    "        np.random.shuffle(data)\n",
+    "        self.train_dat = data[0:int(data.shape[0]*train_ratio)]\n",
+    "        self.num_train_batch = self.train_dat.shape[0] / batch_size\n",
+    "        self.val_dat = data[self.train_dat.shape[0]:]\n",
+    "        self.num_test_batch = self.val_dat.shape[0] / batch_size\n",
+    "        print 'train dat', self.train_dat.shape\n",
+    "        print 'val dat', self.val_dat.shape\n",
+    "        \n",
+    "def numpy2tensors(npx, npy, dev):\n",
+    "    '''batch, seq, dim -- > seq, batch, dim'''\n",
+    "    tmpx = np.swapaxes(npx, 0, 1)\n",
+    "    tmpy = np.swapaxes(npy, 0, 1)\n",
+    "    inputs = []\n",
+    "    labels = []\n",
+    "    for t in range(tmpx.shape[0]):\n",
+    "        x = tensor.from_numpy(tmpx[t])\n",
+    "        y = tensor.from_numpy(tmpy[t])\n",
+    "        x.to_device(dev)\n",
+    "        y.to_device(dev)\n",
+    "        inputs.append(x)\n",
+    "        labels.append(y)\n",
+    "    return inputs, labels\n",
+    "\n",
+    "\n",
+    "def convert(batch, batch_size, seq_length, vocab_size, dev):\n",
+    "    '''convert a batch of data into a sequence of input tensors'''\n",
+    "    y = batch[:, 1:]\n",
+    "    x1 = batch[:, :seq_length]\n",
+    "    x = np.zeros((batch_size, seq_length, vocab_size), dtype=np.float32)\n",
+    "    for b in range(batch_size):\n",
+    "        for t in range(seq_length):\n",
+    "            c = x1[b, t]\n",
+    "            x[b, t, c] = 1\n",
+    "    return numpy2tensors(x, y, dev)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Create the network"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "\n",
+    "def get_lr(epoch):\n",
+    "    return 0.001 / float(1 << (epoch / 50))\n",
+    "\n",
+    "data = Data('static/linux_input.txt')\n",
+    "# SGD with L2 gradient normalization\n",
+    "opt = optimizer.RMSProp(constraint=optimizer.L2Constraint(5))\n",
+    "cuda = device.create_cuda_gpu()\n",
+    "rnn = layer.LSTM(name='lstm', hidden_size=32, num_stacks=1, dropout=0.5, input_sample_shape=(data.vocab_size,))\n",
+    "rnn.to_device(cuda)\n",
+    "rnn_w = rnn.param_values()[0]\n",
+    "rnn_w.uniform(-0.08, 0.08)  \n",
+    "\n",
+    "dense = layer.Dense('dense', data.vocab_size, input_sample_shape=(32,))\n",
+    "dense.to_device(cuda)\n",
+    "dense_w = dense.param_values()[0]\n",
+    "dense_b = dense.param_values()[1]\n",
+    "print 'dense w ', dense_w.shape\n",
+    "print 'dense b ', dense_b.shape\n",
+    "initializer.uniform(dense_w, dense_w.shape[0], 0)\n",
+    "print 'dense weight l1 = %f' % (dense_w.l1())\n",
+    "dense_b.set_value(0)\n",
+    "print 'dense b l1 = %f' % (dense_b.l1())\n",
+    "\n",
+    "g_dense_w = tensor.Tensor(dense_w.shape, cuda)\n",
+    "g_dense_b = tensor.Tensor(dense_b.shape, cuda)\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Conduct SGD"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "lossfun = loss.SoftmaxCrossEntropy()\n",
+    "train_loss = 0\n",
+    "for epoch in range(3):\n",
+    "    bar = tnrange(data.num_train_batch, desc='Epoch %d' % 0)\n",
+    "    for b in bar:\n",
+    "        batch = data.train_dat[b * batch_size: (b + 1) * batch_size]\n",
+    "        inputs, labels = convert(batch, batch_size, seq_length, data.vocab_size, cuda)\n",
+    "        inputs.append(tensor.Tensor())\n",
+    "        inputs.append(tensor.Tensor())\n",
+    "\n",
+    "        outputs = rnn.forward(model_pb2.kTrain, inputs)[0:-2]\n",
+    "        grads = []\n",
+    "        batch_loss = 0\n",
+    "        g_dense_w.set_value(0.0)\n",
+    "        g_dense_b.set_value(0.0)\n",
+    "        for output, label in zip(outputs, labels):\n",
+    "            act = dense.forward(model_pb2.kTrain, output)\n",
+    "            lvalue = lossfun.forward(model_pb2.kTrain, act, label)\n",
+    "            batch_loss += lvalue.l1()\n",
+    "            grad = lossfun.backward()\n",
+    "            grad /= batch_size\n",
+    "            grad, gwb = dense.backward(model_pb2.kTrain, grad)\n",
+    "            grads.append(grad)\n",
+    "            g_dense_w += gwb[0]\n",
+    "            g_dense_b += gwb[1]\n",
+    "            # print output.l1(), act.l1()\n",
+    "            bar.set_postfix(train_loss=batch_loss / seq_length)\n",
+    "        train_loss += batch_loss\n",
+    "\n",
+    "        grads.append(tensor.Tensor())\n",
+    "        grads.append(tensor.Tensor())\n",
+    "        g_rnn_w = rnn.backward(model_pb2.kTrain, grads)[1][0]\n",
+    "        dense_w, dense_b = dense.param_values()\n",
+    "        opt.apply_with_lr(epoch, get_lr(epoch), g_rnn_w, rnn_w, 'rnnw')\n",
+    "        opt.apply_with_lr(epoch, get_lr(epoch), g_dense_w, dense_w, 'dense_w')\n",
+    "        opt.apply_with_lr(epoch, get_lr(epoch), g_dense_b, dense_b, 'dense_b')\n",
+    "    print '\\nEpoch %d, train loss is %f' % (epoch, train_loss / data.num_train_batch / seq_length)\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Checkpoint"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "with open('%s_%d.bin' % (model_path, epoch), 'wb') as fd:\n",
+    "    print 'saving model to %s' % model_path\n",
+    "    d = {}\n",
+    "    for name, w in zip(['rnn_w', 'dense_w', 'dense_b'],[rnn_w, dense_w, dense_b]):\n",
+    "        d[name] = tensor.to_numpy(w)\n",
+    "    d['idx_to_char'] = data.idx_to_char\n",
+    "    d['char_to_idx'] = data.char_to_idx\n",
+    "    d['hidden_size'] = hidden_size\n",
+    "    d['num_stacks'] = num_stacks\n",
+    "    d['dropout'] = dropout\n",
+    "    pickle.dump(d, fd)"
+   ]
+  }
+ ],
+ "metadata": {
+  "anaconda-cloud": {},
+  "kernelspec": {
+   "display_name": "Python [conda env:conda]",
+   "language": "python",
+   "name": "conda-env-conda-py"
+  },
+  "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.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/static/bp.PNG
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/static/bp.PNG b/doc/en/docs/notebook/static/bp.PNG
new file mode 100644
index 0000000..ac5db33
Binary files /dev/null and b/doc/en/docs/notebook/static/bp.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/static/digit.jpg
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/static/digit.jpg b/doc/en/docs/notebook/static/digit.jpg
new file mode 100644
index 0000000..8350d88
Binary files /dev/null and b/doc/en/docs/notebook/static/digit.jpg differ

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/static/models.PNG
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/static/models.PNG b/doc/en/docs/notebook/static/models.PNG
new file mode 100644
index 0000000..9ebcfa2
Binary files /dev/null and b/doc/en/docs/notebook/static/models.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/static/sgd.png
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/static/sgd.png b/doc/en/docs/notebook/static/sgd.png
new file mode 100644
index 0000000..9eac916
Binary files /dev/null and b/doc/en/docs/notebook/static/sgd.png differ

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/static/singav1-sw.png
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/static/singav1-sw.png b/doc/en/docs/notebook/static/singav1-sw.png
new file mode 100644
index 0000000..e443c6e
Binary files /dev/null and b/doc/en/docs/notebook/static/singav1-sw.png differ

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/python/singa/layer.py
----------------------------------------------------------------------
diff --git a/python/singa/layer.py b/python/singa/layer.py
index 7975042..6302b45 100644
--- a/python/singa/layer.py
+++ b/python/singa/layer.py
@@ -27,7 +27,13 @@ Example usages::
 
     # create a convolution layer
     conv = layer.Conv2D('conv', 32, 3, 1, pad=1, input_sample_shape=(3, 32, 32))
+
+    # init param values
+    w, b = conv.param_values()
+    w.guassian(0, 0.01)
+    b.set_value(0)
     conv.to_device(dev)  # move the layer data onto a CudaGPU device
+
     x = tensor.Tensor((3, 32, 32), dev)
     x.uniform(-1, 1)
     y = conv.foward(True, x)
@@ -766,8 +772,8 @@ class Merge(Layer):
         Returns:
             A list of replicated grad, one per source layer
         '''
-        assert isinstance(grad, tensor.Tensor), 'The input must be Tensor'\
-                ' instead of %s' % type(grad).__name__
+        assert isinstance(grad, tensor.Tensor), 'The input must be Tensor' \
+            ' instead of %s' % type(grad).__name__
         return [grad] * self.num_input, []  # * self.num_input
 
 
@@ -902,7 +908,8 @@ class Slice(Layer):
     def get_output_sample_shape(self):
         out = []
         for i in range(len(self.conf.slice_conf.slice_point) + 1):
-            out.append(self.layer.GetOutputSampleShape(i))
+            out.append(self.layer.GetOutputSampleShapeAt(i))
+        return out
 
     def forward(self, flag, x):
         '''Slice the input tensor on the given axis.

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/python/singa/tensor.py
----------------------------------------------------------------------
diff --git a/python/singa/tensor.py b/python/singa/tensor.py
index 7dee9f5..82361c5 100644
--- a/python/singa/tensor.py
+++ b/python/singa/tensor.py
@@ -60,6 +60,8 @@ from .proto import core_pb2
 from . import singa_wrap as singa
 import device as pydevice
 
+int32 = core_pb2.kInt
+float32 = core_pb2.kFloat32
 
 class Tensor(object):
     '''Create a Py Tensor, which wraps a swig converted Tensor from CPP Tensor


[2/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/regression.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/regression.ipynb b/doc/en/docs/notebook/regression.ipynb
index 4e81a20..a61aed6 100755
--- a/doc/en/docs/notebook/regression.ipynb
+++ b/doc/en/docs/notebook/regression.ipynb
@@ -60,7 +60,7 @@
     {
      "data": {
       "text/plain": [
-       "<matplotlib.legend.Legend at 0x7fce59cef510>"
+       "<matplotlib.legend.Legend at 0x7f3c7ebe0050>"
       ]
      },
      "execution_count": 3,
@@ -69,9 +69,9 @@
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiAAAAF5CAYAAACm4JG+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XuUXGWZ7/HvE+ViVCIaDQiEELwQDxHsNghyC0NgwBlh\nUIahB04gxtEQcLQ9Y9SjDo5yQESNGQxEB3BigBbHOcpRzsilW/SoXJbdhLRDuCgwyIiQMNjpEAMY\n3vNHVbeVojvdXV21d12+n7VqrdSuXbve2l2195Nfve+7I6WEJElSlqbk3QBJktR6LEAkSVLmLEAk\nSVLmLEAkSVLmLEAkSVLmLEAkSVLmLEAkSVLmLEAkSVLmLEAkSVLmLEAkSVLmci9AIuL8iHi+7HbP\nGM+ZHxG9EbE1Iu6PiLOyaq8kSZq83AuQol8AM4A9ircjRlsxImYB3we6gYOAFcAVEXFczVspSZKq\n4sV5N6DoDymlDeNc9xzgwZTSsuL9+yLiCKATuLkmrZMkSVVVLwnI6yPiPyPiVxFxdUTss4N1DwVu\nKVt2I3BY7ZonSZKqqR4KkNuBs4E/BZYA+wE/joiXjrL+HsDjZcseB3aLiF1q1UhJklQ9uf8Ek1K6\nseTuLyLiTuA/gNOAr1frdSLiVRSKnIeBrdXariRJLWBXYBZwY0rpyWpsMPcCpFxKaSAi7gdeN8oq\nv6XQYbXUDGBTSumZHWz6T4FrqtBESZJa1RnAtdXYUN0VIBHxMgrFxzdGWeU24MSyZccXl+/IwwBX\nX301c+bMmUwTNQGdnZ0sX74872a0FPd59tzn2XOf187TT8OKFfCv/wptbXD++TA4uJ4zzzwTiufS\nasi9AImIS4DvUfjZZS/gH4DngK7i4xcCe6WUhub6WAWcGxEXA1cBxwKnAu8Y46W2AsyZM4e2trZq\nvw2NYtq0ae7vjLnPs+c+z577vDZ6euA974ENG+ArX
 4FzzoEpU6Cvb3iVqnVhqIdOqHtTiHPuBb4J\nbAAOLfmNaU9geFRMSulh4M+ABcBaCsNvF6eUykfGSJKkcRgcLBQbxx4L++0H/f1w7rmF4qNWck9A\nUkodYzy+aIRlPwbaa9YoSZJaxFDqsXHj9qlHrdVDAiJJkjJWnnqsW1f71KNU7gmImltHxw4DLtWA\n+zx77vPsuc8nJ6/Uo1SklLJ9xZxERBvQ29vbO2rHpUceeYSNGzdm2zBVzfTp05k5c2bezZCkujU4\nCMuWwapVMH8+XHklzJ499vP6+vpob28HaE8p9Y21/niYgBQ98sgjzJkzhy1btuTdFFVo6tSprF+/\n3iJEkkZQD6lHKQuQoo0bN7JlyxbnCWlQ69cXxqhv3LjRAkSSSpSnHj0940s9as0CpIzzhEiSmkW9\npR6l6qQZkiSpWvIe4TIeJiCSJDWR0WYzrTd12CRJkjRRecxmOhkmIJIkNbh67usxmjpvnhrFmjVr\nmDNnDjvvvDOvfOUrh5enlJg7dy4XXXTRhLf58Y9/nEMPPbSazZSkptIIfT1G0wBNVL277777WLRo\nEa9//eu54oor+NrXvjb82LXXXsujjz7KBz7wgQlv90Mf+hB333033//+96vZXElqCj09MHcurFlT\nSD26u+tjeO14+ROMJu3WW28lpcSKFSvYb7/9tnvsC1/4Ah0dHbzsZS+b8HZnzJjBySefzBe+8AX+\n/M//vFrNlaSGNjgIH/0oXH55fc3rMVEmIJq0xx9/HIDddtttu+V33XUXd999N6eddlrF2z7ttNP4\nyU9+wsMPPzyZJkpSUxhKPVavbszUo5QFSAu49dZbmTJlCtdff/0LHrv22muZMmUKd9xxR0Xb3m+/\n/fj0pz8NwKtf/WqmTJnCZz7zGQC++93vsssuu3DkkUcOr79161bmzJnDnDlzeOaZZ4aXP/XUU+y5\n554cccQRlF6faMGCBaSURmy7
 JLWKRhvhMh4N3HSN1/z589lnn3245pprXvDYNddcw+te9zre9ra3\n8eyzz/Lkk0+O6zZkxYoVnHLKKQB89atf5eqrr+Zd73oXALfddhsHHnggL3rRi4bX33XXXVm9ejW/\n/OUv+cQnPjG8fOnSpQwODrJ69WoiYnj5brvtxv77789Pf/rTqu8XSWoE3d2N3ddjNPYBaRFnnnkm\ny5cvZ3BwkJe//OVA4fo3N998M5/61KcA6OrqYtGiRWNuKyLYtm0bACeddBJ33XUX3/3ud3n3u9+9\n3QiYe++9d8RRLIcccgjLli3j85//PKeccgqPPfYY1113Hf/4j//I/vvv/4L1Z8+ezT333FPR+5ak\nRlWv13CpFguQCm3ZAvfeW9vXOOAAmDq1OttauHAhF110Ed/+9reHi4xvfvObbNu2jTPOOAOAE044\ngVtuuaU6Lwg8+eST7L777iM+9ulPf5obbriBhQsXsnnzZo455hjOO++8EdfdfffdWbt2bdXaJUn1\nrrsbFi9urHk9JsoCpEL33gvt7bV9jd5eqNZ18d74xjcyb948rrnmmuEC5Nprr+XQQw9ldrGknjFj\nBjNmzKjOCxaV9ucotdNOO3HllVcyb948XvKSl3DVVVftcBulP8tIUrNq9tSjlAVIhQ44oFAg1Po1\nqmnhwoV86EMf4je/+Q2///3vuf3227nsssuGH9+6dSsDAwPj2tZ4CpVXvepVPPXUU6M+/oMf/GD4\ndR944AH23XffEdd76qmnmD59+rjaJUmNqhFnM50MC5AKTZ1avXQiK6effjof/vCH6erqYsuWLey8\n887bDZG97rrrJtwHZEcOOOAAHnrooREfW7duHZ/97Gd5z3vew9q1a3nve99Lf3//cP+UUg899BAH\nH3zwmK8nSY2olVKPUhYgLeRVr3oVJ554ImvWrGHr1q2ccMIJ23UarXYfkMMOO4yLL76Y5557jp12\n2ml4+R/
 +8AfOPvts9t57b1asWMGDDz7IvHnz6Ozs5IorrthuG5s2beJXv/oV5557btXaJUn1ojT1\nWLkSlixp7tSjlAVIi1m4cCGnnnoqEcEFF1yw3WPV7gNy8sknc8EFF/CjH/2IBQsWDC//7Gc/y7p1\n6+jp6eGlL30pc+fO5e///u/55Cc/ybvf/W5OPPHE4XVvvvlmoDDaRpKaRXnq8cMfFub3aCUtUmdp\nyDvf+U523313pk2bVvOTeltbG3PnzuVb3/rW8LK77rqLz33uc3zgAx/gqKOOGl7+sY99jHnz5vG+\n972PTZs2DS//9re/zRFHHPGCKd4lqVGVXsNl5crCiJdWPMRZgLSYKVOm8OIXv5hTTz2VnXfeuSrb\nPP/889m2bdt2P+cM+bu/+zu+9a1vDRcVb3nLW3jmmWdYvnz5C9p1xx138Otf/3p4Svff/va3XH/9\n9XzkIx+pSjslKU8jzWa6dGnr/ORSrkXfduv6zne+w8aNG1m4cGEmr3fGGWcwc+ZMVq5cOeHnrlix\ngoMOOsgL0UlqeD098OY3m3qUsg9Ii7jzzju5++67ueCCC2hra+OII47I5HUjgnXr1lX03IsuuqjK\nrZGkbJX39WiWadSrwQSkRVx++eWce+657LHHHqxevTrv5khS0yvt69FM13CpFguQFvH1r3+dZ599\nljvuuIM3velNeTdHkprW4GChb8dQX4916xr/yrW14E8wkiRVSavNZjoZ7hZJkiapfISLqcfYTEAk\nSZqEVrhybS24iyRJqsBQ6rFggalHJUxAyqxfvz7vJqgC/t0kZcnUY/IsQIqmT5/O1KlTOfPMM/Nu\niio0depUpk+fnnczJDWxVr1ybS1YgBTNnDmT9evXs3HjxrybogpNnz6dmTNn5t0MSU1qaITLhg2m\nHtVgAVJi5syZnsAkSdsx9agNCxBJkkbR01Po62HqUX3uRkmSypTO6zFrliNcasEERJKk
 Es5mmg13\nqSRJOJtp1uput0bExyLi+Yj40g7WObq4TultW0S8Jsu2SpKag1euzV5d/QQTEfOA9wF3j2P1BLwB\nGBxekNITNWqaJKkJOcIlP3WTgETEy4CrgfcCvxvn0zaklJ4YutWudZKkZmPqka+6KUCAlcD3Uko9\n41w/gLUR8ZuIuCki3l7DtkmSmsTmzbB0qX098lYXP8FExOnAwcBbx/mUx4D3Az8HdgH+Brg1Ig5J\nKa2tTSslSY3OeT3qR+4FSETsDXwZWJBSem48z0kp3Q/cX7Lo9ojYH+gEztrRczs7O5k2bdp2yzo6\nOujo6JhQuyVJjWPz5kJfj8svL/T18OeW0XV1ddHV1bXdsoGBgaq/TqSUqr7RCTUg4mTgfwPbKPys\nAvAiCp1MtwG7pHE0MiI+DxyeUjp8lMfbgN7e3l7a2tqq0nZJUv0rTT0+/3lYssTUY6L6+vpob28H\naE8p9VVjm7knIMAtwNyyZf8MrAc+N57io+hgCj/NSJL0ghEuph71JfcCJKX0NHBP6bKIeBp4MqW0\nvnj/QmCvlNJZxfsfBB4C/h3YlUIfkGOA4zJsuiSpTpXOZrpypalHPcq9ABlFeeqxJ7BPyf2dgS8C\nrwW2AOuAY1NKP86meZKkeuS8Ho2jLguQlNKflN1fVHb/EuCSTBslSaprXsOlsfinkSQ1NK/h0pjq\nMgGRJGk8hlIP5/VoPP6ZJEkNpzT1mDUL+vtNPRqNCYgkqaHY16M5+CeTJDUE+3o0FxMQSVLdM/Vo\nPv75JEl1y9SjeZmASJLqkqlHc/NPKUmqK+UjXEw9mpMJiCSpbph6tA7/rJKk3NnXo/WYgEiScuWV\na1uTf2JJUi7KU4/+fli61OKjVZiASJIyZ+oh/9ySpMyM1NfD1KM1mYBIkjLhCBeV8k8vSaopR7ho\nJCYgkqSa6emBxYthwwZTD23Pj4EkqeqczVRjMQGRJFWVfT00Hn4
 kJElVYV8PTYQJiCRp0kw9NFF+\nPCRJFTP1UKVMQCRJFTH10GT4UZEkTYgjXFQNJiCSpHEbSj2c10OT5cdGkjSmwcHCNVuGUo/+flMP\nTY4JiCRph0r7elx6qRePU3X4EZIkjWikES7nnWfxoeowAZEkvUBp6rFyJSxZYuGh6vLjJEkaVp56\n9Pf7k4tqwwREkgSYeihbfrQkqcWZeigPJiCS1MKczVR58WMmSS3Ia7gobyYgktRienpg8WJnM1W+\n/MhJUoson83U1EN5MgGRpBZgXw/VGz9+ktTE7OuhemUCIklNytRD9azuPooR8bGIeD4ivjTGevMj\nojcitkbE/RFxVlZtlKR6ZuqhRlBXH8eImAe8D7h7jPVmAd8HuoGDgBXAFRFxXI2bKEl1racH5s6F\nNWsKqUd3N8yenXerpBeqmwIkIl4GXA28F/jdGKufAzyYUlqWUrovpbQS+DbQWeNmSlJdKh3hYuqh\nRlBPH82VwPdSSj3jWPdQ4JayZTcCh1W9VZJU54ZSj298w9RDjaMuOqFGxOnAwcBbx/mUPYDHy5Y9\nDuwWEbuklJ6pZvskqR4NDsKyZbBqFcyfXyhELDzUKHIvQCJib+DLwIKU0nN5t0eSGkF3d2E2U0e4\nqFHlXoAA7cCrgb6IiOKyFwFHRcR5wC4ppVT2nN8CM8qWzQA2jZV+dHZ2Mm3atO2WdXR00NHRUWn7\nJSkzph6qta6uLrq6urZbNjAwUPXXiRee27MVES8F9i1b/M/AeuBzKaX1Izznc8CJKaWDSpZdC7wi\npfSOUV6nDejt7e2lra2tWs2XpMyUzutx8cWmHspOX18f7e3tAO0ppb5qbDP3BCSl9DRwT+myiHga\neHKo+IiIC4G9UkpDc32sAs6NiIuBq4BjgVOBEYsPSWpkph5qRrkXIKMoj2X2BPYZfjClhyPiz4Dl\nwN8CjwKLU0rlI2MkqaE5m6maVV0WICmlPy
 m7v2iEdX5Mof+IJDWdzZsLqcfll5t6qDnVZQEiSa2s\np6cwwmXDBlMPNS8/0pJUJ0pnM501y9lM1dxMQCSpDtjXQ63Gj7ck5cgr16pVmYBIUk5MPdTK/KhL\nUsZMPSQTEEnKlKmHVODHXpIyYOohbc8ERJJqzCvXSi/kV0CSamQo9ViwwNRDKmcCIkk1UJp6rFwJ\nS5ZYeEil/DpIUhWNlHosXWrxIZUzAZGkKikd4WLqIe2YXw1JmqSRRriYekg7ZgIiSZPgvB5SZfya\nSFIFnNdDmhwTEEmaoJ6ewgiXJ54w9ZAq5VdGksapNPXYd1/o7zf1kCplAiJJ42BfD6m6/PpI0g7Y\n10OqDRMQSRqFqYdUO36VJKmMqYdUeyYgklTC1EPKhl8rSQI2by7MXnrssTBrlqmHVGsmIJJa3tC8\nHhs2mHpIWfErJqllDQ6aekh5MQGR1JK8cq2UL79uklpK+QiX/n6vXCvlwQREUssw9ZDqh189SU1v\npHk9TD2kfJmASGpqzush1Se/hpKakrOZSvXNBERS0xlKPZzXQ6pffiUlNY3S1GPWrMIIF1MPqT6Z\ngEhqCvb1kBqLX09JDc2+HlJjMgGR1LBMPaTG5VdVUsMx9ZAanwmIpIZi6iE1B7+2khqCqYfUXExA\nJNU9Uw+p+eT+FY6IJRFxd0QMFG8/i4gTdrD+0RHxfNltW0S8Jst2S6q9wcHCNVtMPaTmUw8JyK+B\njwIPAAGcDVwfEQenlNaP8pwEvAEYHF6Q0hM1bqekDHnlWqm55V6ApJRuKFv0yYg4BzgUGK0AAdiQ\nUtpUu5ZJysPgICxbBqtWwfz58MMfFtIPSc1lwv+fiIjVEXFULRoTEVMi4nRgKnDbjlYF1kbEbyLi\npoh4ey3aIylbPT3w5jfDmjWFvh7d3RYfUrOqJNCcBtwSEQ9ExP+MiL0m24iIODAiBoFngMuAU1JK\n946y+mPA+4F3A++i8
 BPOrRFx8GTbISkf5ddwsa+H1Pwm/PVOKf0FsBdwOfBXwMMR8W8RcWpE7FRh\nO+4FDgIOKW73GxFxwCivf39K6Z9SSnellG5PKS0GfgZ0VvjaknLU0wNz526fesyenXerJNVaRX1A\nUkobgC8BX4qINmARsAbYHBFXA5ellB6YwPb+ADxYvHtXRBwCfBA4Z5ybuBM4fDwrdnZ2Mm3atO2W\ndXR00NHRMc6XklQN5X09enosPKR60NXVRVdX13bLBgYGqv46kVKq/MkRewILKRQgewP/SiEdORpY\nllJaXuF2u4H/SCm9Z5zr3wRsSimduoN12oDe3t5e2traKmmWpCopHeFy8cXO6yHVu76+Ptrb2wHa\nU0p91djmhBOQ4s8sJ1EoOo4H1gFfBq4dGpUSEacAVwFjFiARcSHwb8AjwMuBMygUMMcXH78IeG1K\n6azi/Q8CDwH/DuwK/A1wDHDcRN+LpGyZekgaUslPMI9R6DvSBRySUlo7wjo/BH43zu29BlgN7AkM\nUChojk8p9RQf3wPYp2T9nYEvAq8FthTXPzal9OMJvg9JGerpgcWLYcMGZzOVVFkB0gn8S0pp62gr\npJR+B4xr8FxK6b1jPL6o7P4lwCXj2bak/A0Owkc/CpdfXkg97GQqCSooQFJKa2rREEnNx2u4SBqN\nhwJJVeeVayWNJfep2CU1l6HUw74eknbEw4KkqiifzbS/39RD0uhMQCRNmqmHpInyECGpYqYekipl\nAiKpIt3dhXk9HOEiqRIeLiRNyFDqsWCBI1wkVc4ERNK4mXpIqhYPHZLGZOohqdpMQCTtkLOZSqoF\nDyOSRuRsppJqyQRE0guYekiqNQ8pkoZt3gxLl5p6SKo9ExBJQCH1WLzY2UwlZcPDi9TiBgf/mHrM\nmmXqISkbJiBSCyvt67FyJSxZYuEhKRseaqQWNNIIl6VLLT4kZccERGoxph6S6oGHHalFmHpIqicm\n
 IFILcF4PSfXGQ5DUxEpTD0e4SKonJiBSk/LKtZLqmYcjqcl45VpJjcAERGoiQ6mHs5lKqncemqQm\nUJ569PebekiqbyYgUoNzhIukRuRhSmpQI83rYeohqVGYgEgNyNRDUqPzkCU1kM2b/3jlWlMPSY3M\nBERqED09hREuTzxh6iGp8Xn4kupcaV+Pffd1hIuk5mACItUx+3pIalYeyqQ65AgXSc3OBESqM6Ye\nklqBhzWpTph6SGolJiBSHRga4eI1XCS1Cg9xUo5K5/WYNcvUQ1LrMAGRcmLqIamVebiTMjY4aOoh\nSSYgUoZKR7isXAlLllh4SGpNuR/6ImJJRNwdEQPF288i4oQxnjM/InojYmtE3B8RZ2XVXqkS5SNc\n+vsLKYjFh6RWVQ+Hv18DHwXagHagB7g+IuaMtHJEzAK+D3QDBwErgCsi4rgsGitNVE8PzJ0La9YU\nUo/u7kIRIkmtLPefYFJKN5Qt+mREnAMcCqwf4SnnAA+mlJYV798XEUcAncDNtWupNDGDg7BsGaxa\nBfPnFwqR2bPzbpUk1Yd6SECGRcSUiDgdmArcNspqhwK3lC27ETislm2TJqI09fjKVwqph8WHJP1R\nXRQgEXFgRAwCzwCXAaeklO4dZfU9gMfLlj0O7BYRu9SwmdKYnM1UksYn959giu6l0J9jGnAq8I2I\nOGoHRUjFOjs7mTZt2nbLOjo66OjoqPZLqcUMjXDZsAEuvdROppIaU1dXF11dXdstGxgYqPrrREqp\n6hudrIi4GfhlSumcER77EdCbUvpwybKzgeUppd13sM02oLe3t5e2trYatFqtqryvx5VX+nOLpObS\n19dHe3s7QHtKqa8a26yXBKTcFGC0n1NuA04sW3Y8o/cZkWrGK9dKUmVyP1RGxIURcWRE7FvsC3IR\ncDRwdfHxiyJidclTVgGzI+LiiHhjRCyl8LPNl7JvvVqVfT0kaXLqIQF5DbAa2
 BMYANYBx6eUeoqP\n7wHsM7RySunhiPgzYDnwt8CjwOKUUvnIGKkmTD0kafJyL0BSSu8d4/FFIyz7MYVJy6TMOK+HJFVP\n7gWI1Ai8cq0kVZeHUGkHNm/2yrWSVAsmINIoTD0kqXY8nEplSke4mHpIUm2YgEglSke4rFwJS5ZY\neEhSLXholXjhvB79/U6lLkm1ZAKilmdfD0nKnodZtSz7ekhSfkxA1JKczVSS8uUhVy3Fa7hIUn0w\nAVHLMPWQpPrh4VdNz9RDkuqPCYiamqmHJNUnD8VqSqYeklTfTEDUdEw9JKn+eVhW0zD1kKTGYQKi\npjCUejibqSQ1Bg/Ramjls5n295t6SFIjMAFRwzL1kKTG5eFaDcfUQ5IanwmIGoojXCSpOXjoVkNw\nhIskNRcTENU9+3pIUvPxMK66VZ562NdDkpqHCYjqkn09JKm5eUhXXbGvhyS1BhMQ1Q1TD0lqHR7e\nlTtTD0lqPSYgypWphyS1Jg/1yoWphyS1NhMQZc7UQ5LkYV+ZMfWQJA0xAVEmurth8WJTD0lSgacA\n1dRQ6rFggamHJOmPTEBUM6YekqTReDpQ1Zl6SJLGYgKiqjL1kCSNh6cGVYWphyRpIkxANGmmHpKk\nifI0oYqZekiSKpX7qSIiPh4Rd0bEpoh4PCK+ExFvGOM5R0fE82W3bRHxmqza3ep6emDuXFizppB6\ndHfD7Nl5t0qS1ChyL0CAI4FLgbcBC4CdgJsi4iVjPC8Brwf2KN72TCk9UcuGytlMJUnVkXsfkJTS\nO0rvR8TZwBNAO/CTMZ6+IaW0qUZNUxmv4SJJqpZ6PH28gkK68V9jrBfA2oj4TUTcFBFvr33TWtPm\nzbB0qamHJKl6ck9ASkVEAF8GfpJSumcHqz4GvB/4ObAL8DfArRFxSEppbe1b2jp6egojXDZsMPWQ\nJFVPXRUgwGXAm4DDd7RSSul+4P6SRbdHxP5AJ3BW7ZrX
 OgYHYdkyWLUK5s+3k6kkqbrqpgCJiK8A\n7wCOTCk9VsEm7mSMwgWgs7OTadOmbbeso6ODjo6OCl6yOdnXQ5JaV1dXF11dXdstGxgYqPrrREqp\n6hudcCMKxcfJwNEppQcr3MZNwKaU0qmjPN4G9Pb29tLW1lZ5Y5tYeepx5ZWmHpIk6Ovro729HaA9\npdRXjW3mnoBExGVAB3AS8HREzCg+NJBS2lpc50Jgr5TSWcX7HwQeAv4d2JVCH5BjgOMybn7TMPWQ\nJGUp9wIEWEJh1MutZcsXAd8o/ntPYJ+Sx3YGvgi8FtgCrAOOTSn9uKYtbULlqUdPj6mHJKn2ci9A\nUkpj/j87pbSo7P4lwCU1a1SLMPWQJOXF000LcjZTSVLeck9AlC1TD0lSPfDU0yJKU49Zs0w9JEn5\nMgFpAUOph7OZSpLqhaehJlbe16O/39RDklQfTECalH09JEn1zFNSk3GEiySpEZiANBFTD0lSo/D0\n1ARMPSRJjcYEpMGVjnC59FJYutTCQ5JU/zxVNaiRRricd57FhySpMZiANKDubli82L4ekqTG5Wmr\ngQylHgsW2NdDktTYTEAahKmHJKmZeAqrc6YekqRmZAJSx7yGiySpWXk6q0PlV671Gi6SpGZjAlJn\nTD0kSa3AU1udMPWQJLUSE5A6YOohSWo1nuZyNNJspqYekqRWYAKSE69cK0lqZZ7yMuaVayVJMgHJ\nlH09JEkq8PSXAUe4SJK0PROQGitNPS69FJYutfCQJMlTYY2MlHqcd57FhyRJYAJSE/b1kCRpxzwt\nVpHzekiSND4mIFXivB6SJI2fp8hJ2ry50LHUeT0kSRo/E5BJ6OmBxYvt6yFJ0kR5uqxAaeoxa5ap\nhyRJE2UCMkGlqcfKlbBkiYWHJEkT5alznEaa18NJxSRJqowJyDiYekiSVF2eRnegPPVYt87UQ5Kk\najABGYXzekiSVDueUsuUz2bqCBd
 JkqrPBKSEqYckSdnw9IqphyRJWcv9FBsRH4+IOyNiU0Q8HhHf\niYg3jON58yOiNyK2RsT9EXFWJa/f0wNz58KaNYXUo7sbZs+uZEsaSVdXV95NaDnu8+y5z7PnPm98\nuRcgwJHApcDbgAXATsBNEfGS0Z4QEbOA7wPdwEHACuCKiDhuvC9q6pENDxLZc59nz32ePfd548u9\nD0hK6R2l9yPibOAJoB34yShPOwd4MKW0rHj/vog4AugEbh7rNe3rIUlSvurxtPsKIAH/tYN1DgVu\nKVt2I3DYWBu/8EJTD0mS8lZXp96ICODLwE9SSvfsYNU9gMfLlj0O7BYRu+zoNW64wb4ekiTlLfef\nYMpcBryRPMfeAAAGy0lEQVQJOLwG294V4MIL13PYYbB2bQ1eQS8wMDBAX19f3s1oKe7z7LnPs+c+\nz9b69euH/rlrtbYZKaVqbWtSIuIrwDuBI1NKj4yx7o+A3pTSh0uWnQ0sTyntPspz/hq4pnotliSp\n5ZyRUrq2GhuqiwSkWHycDBw9VvFRdBtwYtmy44vLR3MjcAbwMLC1gmZKktSqdgVmUTiXVkXuCUhE\nXAZ0ACcB95c8NJBS2lpc50Jgr5TSWcX7s4B+Cj/ZXAUcS6HvyDtSSuWdUyVJUp2phwLkeQqjXsot\nSil9o7jO14F9U0p/UvK8o4DlFPqMPAp8JqW0JoMmS5KkScq9AJEkSa2nrobhSpKk1mABIkmSMtc0\nBUhEnBsRD0XE7yPi9oiYN8b6VbmYXSubyD6PiFMi4qaIeCIiBiLiZxFxfJbtbQYT/ZyXPO/wiHgu\nIpw4YYIqOLbsHBH/KyIeLh5fHixOE6BxqmCfnxERayPi6Yj4TURcGRGvzKq9jS4ijoyI/xMR/xkR\nz0fESeN4zqTPoU1RgETEXwFfBM4H3gLcDdwYEdNHWX8Wk7yYXaub6D4HjgJuojB8ug34IfC9iDgo\ng+Y2hQr2+d
 DzpgGreeHlCzSGCvf5vwDHAIuAN1AY5XdfjZvaNCo4nh9O4fP9TxQGJZwKHAJ8LZMG\nN4eXAmuBpYw8KGQ7VTuHppQa/gbcDqwouR8URsYsG2X9i4F1Zcu6gP+b93tplNtE9/ko2/gF8Mm8\n30uj3Crd58XP9j9QOKD35f0+GulWwbHlBArXsXpF3m1v1FsF+/x/AA+ULTsPeCTv99KIN+B54KQx\n1qnKObThE5CI2InClXO7h5alwt64hdEvTlfxxexU8T4v30YAL2fHFx1UUaX7PCIWAftRKEA0ARXu\n83cCPwc+GhGPRsR9EXFJRFRt+upmVuE+vw3YJyJOLG5jBvCXwA21bW1Lq8o5tOELEGA68CJGvjjd\nHqM8p+KL2QmobJ+X+wiF2O9bVWxXM5vwPo+I1wMXUpg6+fnaNq8pVfI5nw0cCfw34C+AD1L4SWBl\njdrYbCa8z1NKPwPOBK6LiGeBx4CnKKQgqo2qnEOboQBRgylel+dTwF+mlDbm3Z5mFBFTKFz76PyU\n0q+GFufYpFYxhUKE/dcppZ+nlH4AfBg4y//c1EZEvIlCH4RPU+hf9qcUUr+v5tgsjUNdXAtmkjYC\n24AZZctnAL8d5Tm/HWX9TSmlZ6rbvKZUyT4HICJOp9A57NSU0g9r07ymNNF9/nLgrcDBETH0v+8p\nFH79ehY4PqV0a43a2iwq+Zw/BvxnSmlzybL1FIq/vYFfjfgsDalkn38M+GlK6UvF+7+IiKXA/4uI\nT6SUyv+nrsmryjm04ROQlNJzQC+F68EAw/0LjgV+NsrTbitdv2isi9mpqMJ9TkR0AFcCpxf/Z6hx\nqmCfbwIOBA6m0Ev9IGAVcG/x33fUuMkNr8LP+U+B10bE1JJlb6SQijxao6Y2jQr3+VTgD2XLhi7x\nYepXG9U5h+bd47ZKvXZPA7YAC4EDKERvTwKvLj5+EbC6ZP1ZwCCFnrxvpDD06FlgQd7vpVF
 uFezz\nvy7u4yUUKuWh2255v5dGuU10n4/wfEfB1HifU+jX9B/AdcAcCsPP7wNW5f1eGuVWwT4/C3imeGzZ\nDzgcuBP4Wd7vpVFuxc/tQRT+w/I88KHi/X1G2edVOYfm/saruAOXAg8Dv6dQhb215LGvAz1l6x9F\nodL+PfAA8N/zfg+NdpvIPqcw78e2EW5X5f0+Guk20c952XMtQDLY5xTm/rgR2FwsRj4P7JL3+2ik\nWwX7/FwKV0jfTCFpWg3smff7aJQbcHSx8Bjx+Fyrc6gXo5MkSZlr+D4gkiSp8ViASJKkzFmASJKk\nzFmASJKkzFmASJKkzFmASJKkzFmASJKkzFmASJKkzFmASJKkzFmASJKkzFmASJKkzFmASJKkzFmA\nSMpFREyPiMci4mMly94eEc9ExDF5tk1S7Xk1XEm5iYgTge8ChwH3A2uB76SUPpJrwyTVnAWIpFxF\nxKXAccDPgQOBeSml5/JtlaRaswCRlKuI2BX4BbA30JZSuifnJknKgH1AJOXtdcBrKRyP9su5LZIy\nYgIiKTcRsRNwJ3AXcB/QCRyYUtqYa8Mk1ZwFiKTcRMQlwLuANwNbgFuBTSmld+bZLkm1508wknIR\nEUcDfwucmVJ6OhX+N7QQOCIi3p9v6yTVmgmIJEnKnAmIJEnKnAWIJEnKnAWIJEnKnAWIJEnKnAWI\nJEnKnAWIJEnKnAWIJEnKnAWIJEnKnAWIJEnKnAWIJEnKnAWIJEnK3P8HC32qF0eEn8IAAAAASUVO\nRK5CYII=\n",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8lOW5//HPDQQSwg5hTUJYZQsgBlBwAZcWkIogx3qq\ntZUiarVqWyuL4oqKWhdOq1JcihylHiWAiChuWHBBBcQkhC3sgbBDAiSBJHP9/sg0P0SWAJl5MjPf\n9+s1r8w8c8/MdZPwfOdZ5hpnZoiIiABU8boAERGpPBQKIiJSRqEgIiJlFAoiIlJGoSAiImUUCiIi\nUkahICIiZRQKIiJSRqEgIiJlqnldwOlq1KiRJSUleV2GiEhIWbp06W4zizvVuJALhaSkJJYsWeJ1\nGSIiIcU5t6k847T7SEREyigURESkjEJBRETKhNwxheMpKioiOzubwsJCr0vxXHR0NPHx8URFRXld\nioiEoLAIhezsbGrXrk1SUhLOOa/L8YyZsWfPHrKzs2nVqpXX5YhICAro7iPn3EbnXLpzbrlz7ien\nDLlS/+Ocy3LOpTnnepzJ6xQWFtKwYcOIDgQA5xwNGzbUFpOInLFgbCn0N7PdJ7hvINDOf+kNvOT/\nedoiPRD+Q/8OInI2vD7QPASYZqUWA/Wcc808rklEpFIpKvHx4udZ/LBlf8BfK9ChYMAnzrmlzrlR\nx7m/BbDlqNvZ/mU/4pwb5Zxb4pxbsmvXrgCVGnyLFi2ic+fOdO/enYKCAnJychg8ePBJHzN37lwe\neOCBIFUoIl7L2JrL1S98yVMfruaDjO0Bf71Ah8KFZtad0t1EtzvnLj6TJzGzKWaWYmYpcXGn/JR2\nyHjzzTcZO3Ysy5cvJyYmhmeffZabb775pI+58soree+998jPzw9SlSLihcKiEp76cBVDXviSHXmH\neen6HowZ2CHgrxvQUDCzrf6fO4FZQK9jhmwFEo66H
 e9fFlIeeOABnn/++bLb9913H5MmTTrpY155\n5RXefvttxo8fz/XXXw9AamoqAwYMAOC5555jxIgRAKSnp9OlSxfy8/NxztGvXz/mzp0boNmIiNe+\n27iXQZMW8eLn6xh2bgs+/dMlDEwOzp71gB1ods7FAlXM7ID/+s+AR44ZNge4wzn3FqUHmHPNLOds\nXvfh91aQuS3vbJ7iJzo1r8ODv+h8wvtHjBjBsGHDuPvuu/H5fLz11lt89tlndO/e/bjjp0+fzsiR\nI/niiy8YPHgww4cPZ8OGDdSvX58aNWoAcNddd9GvXz9mzZrFY489xj/+8Q9q1qwJQEpKCosWLeLa\na6+t0HmKiLcOHi7mqQ9XMe3rTbSoF8O0Eb24uH1w944E8uyjJsAs/9kw1YDpZvahc+5WADObDMwD\nBgFZQD5wUwDrCZikpCQaNmzI999/z44dOzj33HNp2bIly5cvL/dz5OTkcPSusSpVqjB16lS6du3K\nLbfcQt++fcvua9y4Mdu2bavQOYiIt/69ZhfjZqazLbeA3/ZJ4i8/P4fYGsH/KFnAXtHM1gPdjrN8\n8lHXDbi9Il/3ZO/oA2nkyJFMnTqV7du3M2LECA4cOMBFF1103LHTp0+nU6dOP1oWExPzk88XrF27\nllq1av0kAAoLC4mJianYCYiIJ/bnH+HRuStJXZZNm7hY3rnlAlKSGnhWT1h8orkyGDp0KA888ABF\nRUVMnz6dqlWrntaWQvv27dm4cWPZ7dzcXO68804WLlzIHXfcwYwZMxg+fDgAa9asoUuXLhU9BREJ\nsnnpOTzwbgb78ou4o39b7ri0LdFRVT2tSaFQQapXr07//v2pV68eVaue/i81NjaWNm3akJWVRdu2\nbfnjH//I7bffTvv27Xn11Vfp378/F198MY0bN2bBggU88cQTAZiFiATDzrxCxr+bwfwVO+jSog6v\nj+hF5+Z1vS4LUChUGJ/Px+LF
 i3nnnXfK/ZipU6f+6PYdd9zB1KlTmTBhAq+99lrZ8oSEBLKysgDY\nsWMHBQUFJCcnV0jdIhI8ZsY7S7OZMDeTw8U+xgzswMgLW1GtqtefI/7/FAoVIDMzk8GDBzN06FDa\ntWt3xs8zdOhQ9uzZc9Ixmzdv5plnnjnj1xARb2zZm8+4WeksWrubXkkNmHhNMq3janld1k8oFCpA\np06dWL9+fYU818iRI096f8+ePSvkdUQkOEp8xrSvN/LUh6up4uDRq7twfa9EqlSpnH3KwiYUzEzN\n4Cj9dxCRyiFr5wHunZHGss376XdOHI8NTaZFvcp95mBYhEJ0dDR79uyJ+PbZ//k+hejoaK9LEYlo\nRSU+Jn++jr99lkXNGlV57pfduLp7i5BYP4VFKMTHx5OdnU04Ncs7U//55jUR8UZ6di5/mfEDq7Yf\nYHDXZjx0VWca1arhdVnlFhahEBUVpW8aExFPFRaV8Nwna3h54Xoa1arBlF+fx886N/W6rNMWFqEg\nIuKlbzfsZXRqGht2H+K6ngmMHdSRujGh+T3pCgURkTN0oLCIJz9cxRuLN5PQIIY3R/amb9tGXpd1\nVhQKIiJnYMGqnYyblc72vEJ+d2Er/vyz9tSsHvqr1NCfgYhIEO09dIRH52Yy6/uttGtci9Tb+tAj\nsb7XZVUYhYKISDmYGXPTcnhozgpyC4q487J23N6/DTWqedvArqIpFERETmFHXiH3z87g48wddI2v\nyxsje9OxWR2vywoIhYKIyAmYGf/33RYem7eSI8U+xg3qwIi+lauBXUVTKIiIHMfmPfmMmZnGV+v2\n0LtVA568pitJjWK9LivgFAoiIkcp8Rn//HIDf/1oNdWqVGHC1V34VSVuYFfRFAoiIn5rdpQ2sFu+\nZT+XdmjMY0O70Kxu5W5gV9EUCiIS8Y4U+3jp83X8fcFaatWoxqTrunNVt+Yh0cCuoikURCSi/bBl\nP6NT01i
 1/QBXdWvOg7/oRMMQamBX0RQKIhKRCo6U8OzHq3n1iw3E1a7BKzemcHmnJl6X5TmFgohE\nnK/W7WbszHQ27cnnv3slMnZQB+pEh2YDu4qmUBCRiJFXWMQT81bxr28307JhTabf3Js+bUK7gV1F\nC3goOOeqAkuArWY2+Jj7+gHvAhv8i2aa2SOBrklEIs8nmTu4f3YGOw8UcvNFrfjTFecQUz28WlRU\nhGBsKdwFrARO9JnwRceGhYhIRdlz8DAPv5fJnB+20aFpbf7x6/PollDP67IqrYCGgnMuHrgSeAz4\nUyBfS0TkaGbGnB+28dCcFRw8XMzdl7fj9/3aUr1a+LaoqAiB3lJ4HrgXqH2SMX2cc2nAVuAeM1tx\n7ADn3ChgFEBiYmIg6hSRMJKTW8D9szL4dNVOuiXU46lrunJO05OthuQ/AhYKzrnBwE4zW+o/dnA8\ny4BEMzvonBsEzAbaHTvIzKYAUwBSUlIsQCWLSIjz+Yy3vtvCE/NWUuTzcf+VHbmpbyuqRkiLiooQ\nyC2FvsBV/pV9NFDHOfeGmd3wnwFmlnfU9XnOuRedc43MbHcA6xKRMLRx9yHGzExj8fq99GnTkInD\nupLYsKbXZYWcgIWCmY0FxkLZWUb3HB0I/uVNgR1mZs65XkAVYE+gahKR8FNc4uO1LzfwzEdrqF61\nChOHJfPLngkR2aKiIgT9cwrOuVsBzGwyMBy4zTlXDBQA15mZdg+JSLms2p7H6Blp/JCdy+UdmzDh\n6i40rRvtdVkhzYXaOjglJcWWLFnidRki4qHDxSW8sGAdLy7Iom5MFA8P6cyVyc20dXASzrmlZpZy\nqnH6RLOIhJRlm/cxekYaa3ceZOi5LRg/uBMNYqt7XVbYUCiISEjIP1LMMx+t4bUvN9C0TjSv/TaF\nSzuogV1FUyiISKX3ZdZuxsxMY8veAm44P5HRAzpQWw3sAkKhICKVVm5BEU/MW8lb322h
 VaNY3hp1\nPue3buh1WWFNoSAildJHK7Zz/+wM9hw6wq2XtOHuy9sRHaUGdoGmUBCRSmXXgcM89N4K3k/LoUPT\n2rz6m54kx9f1uqyIoVAQkUrBzJi9fCsPv5dJ/uES/nxFe27t14aoqmpgF0wKBRHx3Nb9Bdw3K53P\nV++iR2I9nhrelbaN1cDOCwoFEfGMz2e8+e1mJs5bic/ggcGd+E2fJDWw85BCQUQ8sX7XQcakpvPt\nxr1c1K4Rjw9NJqGBGth5TaEgIkFVXOLj5UUbeO6TNURXq8LTw7sy/Lx4taioJBQKIhI0mdvyuDf1\nBzK25vHzzk14dEgXGtdRA7vKRKEgIgFXWFTC3z/LYvK/11GvZnVeur4HA5ObeV2WHIdCQUQCaumm\nvYxOTSdr50Gu6RHP+MEdqVdTDewqK4WCiATEocPFPD1/Na9/vZHmdWN4fUQvLmkf53VZcgoKBRGp\ncIvW7mLszHSy9xXwmwta8pcBHahVQ6ubUKDfkohUmNz8Iia8n8k7S7Np3SiWd269gJ5JDbwuS06D\nQkFEKsSHGdsZ/24Gew8d4ff92nDnZWpgF4oUCiJyVnYeKOShOSuYl76dTs3q8M/f9qRLCzWwC1UK\nBRE5I2ZG6rKtPDo3k4KiEv7y83MYdXFrNbALcQoFETlt2fvyGTcrg4VrdpHSsj4Tr+lK28a1vC5L\nKoBCQUTKzecz/nfxJp78cBUAjwzpzA29W1JFDezChkJBRMola+dBxqSmsWTTPi5q14gnhiUTX18N\n7MJNwEPBOVcVWAJsNbPBx9zngEnAICAf+K2ZLQt0TSJSfkUlPqYsXM+kT9cSE1WVZ/6rG8N6tFAD\nuzAVjC2Fu4CVQJ3j3DcQaOe/9AZe8v8UkUogY2su985IIzMnj4FdmvLwkM40rq0GduEsoKHgnIsH\nrgQeA/50nCFDgGlmZsBi51w951wzM8sJZF0icnKFRSVM+nQtUxa
 up0FsdSbfcB4DujT1uiwJgkBv\nKTwP3Auc6Hv1WgBbjrqd7V+mUBDxyHcb9zJ6Rhrrdx/i2pR47hvUibo1o7wuS4IkYKHgnBsM7DSz\npc65fmf5XKOAUQCJiYkVUJ2IHOvg4WKe+nAV077eRHz9GN74XW8ubNfI67IkyAK5pdAXuMo5NwiI\nBuo4594wsxuOGrMVSDjqdrx/2Y+Y2RRgCkBKSooFrmSRyPTvNbsYNzOdbbkF3NQ3iXt+dg6xamAX\nkQL2WzezscBYAP+Wwj3HBALAHOAO59xblB5gztXxBJHg2XfoCI++n8nMZVtpExfLjFsv4LyWamAX\nyYL+VsA5dyuAmU0G5lF6OmoWpaek3hTsekQikZkxL307D87JYH9+EX+4tC13XNqWGtXUwC7SBSUU\nzOxz4HP/9clHLTfg9mDUICKlduYVMv7dDOav2EFyi7pMG9GbTs2Pd8a4RCLtNBSJEGbGO0uzmTA3\nk8PFPsYM7MDIC1tRTQ3s5CgKBZEIsGVvPmNnpvNF1m56JTVg4jXJtI5TAzv5KYWCSBgr8Rmvf7WR\np+evpmoVx4Sru/CrXolqYCcnpFAQCVNrdxxgdGoayzbvp985cTw+NJnm9WK8LksqOYWCSJgpKvEx\n+fN1/O2zLGJrVOX5X3ZnSPfmamAn5aJQEAkjadn7uXdGGqu2H2Bw12Y8dFVnGtWq4XVZEkIUCiJh\noLCohOc+XsPLi9YTV7sGL9+YwhWdmnhdloQghYJIiFu8fg9jUtPYuCef63omMHZQR+rGqIGdnBmF\ngkiIOlBYxMQPVvHmN5tJaBDD9JG96dNWDezk7CgURELQglU7GTcrne15hYzo24p7ft6emtX131nO\nnv6KRELI3kNHeHRuJrO+30q7xrVIva0PPRLre12WhBGFgkgIMDPmpuXw0JwV5BYUceelbbldDewk\nABQKIpXcjrxC7p+dwceZO+gaX5c3b+5Nh6
 ZqYCeBoVAQqaTMjP/7bguPzVvJkWIf4wZ1YERfNbCT\nwFIoiFRCm/fkM2ZmGl+t20PvVg148pquJDWK9bosiQAKBZFKpMRn/PPLDfz1o9VUq1KFx4cmc13P\nBDWwk6BRKIhUEqu3lzawW75lP5d1aMyEoV1oVlcN7CS4FAoiHjtS7OPFz7N4YUEWtaOjmHRdd67q\npgZ24g2FgoiHfthS2sBu9Y4DDOnenAcGd6KhGtiJhxQKIh4oOFLCsx+v5tUvNtC4djSv/iaFyzqq\ngZ14T6EgEmRfrdvN2JnpbNqTz696JzJmYAfqRKuBnVQOCgWRIMkrLOKJeav417ebadmwJv+6+Xwu\naNPQ67JEfkShIBIEn67cwX2zMth5oJBRF7fmj5e3J6a6WlRI5aNQEAmgPQcP8/B7mcz5YRvnNKnN\nP359Ht0S6nldlsgJBSwUnHPRwEKghv91ZpjZg8eM6Qe8C2zwL5ppZo8EqiaRYDEz5vywjYffy+RA\nYRF/vLw9t/VrQ/VqalEhlVsgtxQOA5ea2UHnXBTwhXPuAzNbfMy4RWY2OIB1iARVTm4B98/K4NNV\nO+mWUI+nh3elfZPaXpclUi6nDAXn3B+AN8xs3+k8sZkZcNB/M8p/sdOuUCRE+HzGW99t4Yl5Kyny\n+bj/yo7c1LcVVdWiQkJIebYUmgDfOeeWAa8B8/0r/FNyzlUFlgJtgRfM7JvjDOvjnEsDtgL3mNmK\n8pUuUnls3H2IMTPTWLx+L33aNGTisK4kNqzpdVkip82VZ/3uSj9v/zPgJiAFeBt41czWletFnKsH\nzAL+YGYZRy2vA/j8u5gGAZPMrN1xHj8KGAWQmJh43qZNm8rzsiIBV1zi47UvN/DMR2uoXq0K91/Z\nkWtTEtSiQiod59xSM0s51bhyHfXybxls91+KgfrADOfcU+V8/H5gATDgmOV5ZnbQf30eEOWc+8k3\nj5vZFDNLMbOUuLi48
 rykSMCtzMlj2Etf8fi8VVzULo5P/nQJv+yZqECQkFaeYwp3ATcCu4FXgL+Y\nWZFzrgqwFrj3BI+LA4rMbL9zLga4AnjymDFNgR1mZs65XpSG1J6zmZBIoB0uLuGFz7J48fN11I2J\n4u+/Opcrk5spDCQslOeYQgNgmJn9aJ+Nmfmccyc7a6gZ8Lr/uEIV4G0zm+ucu9X/+MnAcOA251wx\nUABcV97jFSJeWLZ5H6NnpLF250GGntuCBwZ3on5sda/LEqkw5TqmUJmkpKTYkiVLvC5DIkz+kWL+\nOn8N//xqA83qRPPYsGT6n9PY67JEyq28xxT0iWaRU/hi7W7GzEwje18BN5yfyOgBHaitBnYSphQK\nIieQW1DEY+9n8vaSbFo1iuX/Rp1P79ZqYCfhTaEgchzzV2xn/OwMdh88zC0Xt+aPV7QnOkoN7CT8\nKRREjrL74GEenLOC99Ny6NC0Nq/8JoWu8WpgJ5FDoSBCaQO7Wd9v5ZG5meQfLuHPV7Tn1n5tiKqq\nBnYSWRQKEvG27i/gvlnpfL56Fz0S6/HU8K60bawGdhKZFAoSsXw+481vNjHxg1X4DB78RSduvCBJ\nDewkoikUJCKt33WQManpfLtxLxe1a8TjQ5NJaKAGdiIKBYkoxSU+Xl60gec+WUN0tSo8Nbwr/3Ve\nvFpUiPgpFCRirNiWy+jUNDK25jGgc1MeubozjWtHe12WSKWiUJCwV1hUwt8+W8vkf6+nfs3qvHR9\nDwYmN/O6LJFKSaEgYW3ppr3cOyONdbsOcU2PeMYP7ki9mmpgJ3IiCgUJS4cOF/P0/NW8/vVGmteN\n4fURvbikvb6LQ+RUFAoSdhau2cXYmelsyy3gxvNb8pcBHahVQ3/qIuWh/ykSNvbnH2HC+yuZsTSb\n1nGxvHPLBaQkNfC6LJGQolCQsPBhRg73z17Bvvwj/L5fG+68rJ0a2ImcAYWChLSdBwp58N0VfJCx\n
 nc7N6zD1pp50aVHX67JEQpZCQUKSmTFjaTYT3l9JQVEJowd0YORFrdTATuQsKRQk5GzZm8+4Weks\nWrublJb1eXJ4V9rE1fK6LJGwoFCQkOHzGf+7eBNPfrgKBzwypDM39G5JFTWwE6kwCgUJCVk7DzIm\nNY0lm/ZxSfs4Hhvahfj6amAnUtEUClKpFZX4mLJwPZM+WUvNGlV59tpuDD23hRrYiQSIQkEqrYyt\nudw7I43MnDwGJTfl4au6EFe7htdliYQ1hYJUOoVFJUz6dC1TFq6nQWx1Jt9wHgO6NPW6LJGIELBQ\ncM5FAwuBGv7XmWFmDx4zxgGTgEFAPvBbM1sWqJqk8vtu415Gz0hj/e5D/DIlgXGDOlK3ZpTXZYlE\njEBuKRwGLjWzg865KOAL59wHZrb4qDEDgXb+S2/gJf9PiTAHDxfz1IermPb1JuLrx/DG73pzYbtG\nXpclEnECFgpmZsBB/80o/8WOGTYEmOYfu9g5V88518zMcgJVl1Q+C1bv5L6Z6eTkFXJT3yTu+dk5\nxKqBnYgnAvo/zzlXFVgKtAVeMLNvjhnSAthy1O1s/zKFQgTYd+gIj87NZOb3W2kTF8uMWy/gvJZq\nYCfipYCGgpmVAN2dc/WAWc65LmaWcbrP45wbBYwCSExMrOAqJdjMjHnp23lwTgb784u4o39b/nBZ\nW2pUUwM7Ea8FZRvdzPY75xYAA4CjQ2ErkHDU7Xj/smMfPwWYApCSknLsLigJITvzChn/bgbzV+wg\nuUVdpo3oTafmdbwuS0T8Ann2URxQ5A+EGOAK4Mljhs0B7nDOvUXpAeZcHU8IT2bGO0uyefT9TI4U\n+xg7sAO/u7AV1dTATqRSCeSWQjPgdf9xhSrA22Y21zl3K4CZTQbmUXo6ahalp6TeFMB6xCNb9uYz\ndmY6X2TtplerBkwclkxrNbATqZQCefZRGnDucZZPPuq6AbcHqgbxVonPeP2rj
 Tw9fzVVHDx6dReu\n75WoBnYilZjO+5OAWLvjAKNT01i2eT/9zonj8aHJNK8X43VZInIKCgWpUEUlPiZ/vo6/fZZFbI2q\nPP/L7gzp3lwN7ERChEJBKkxa9n7unZHGqu0H+EW35jz4i040qqUGdiKhRKEgZ62wqITnPl7Dy4vW\n06hWDV6+MYUrOjXxuiwROQMKBTkri9fvYezMdDbsPsR/90pgzMCO1I1RAzuRUKVQkDNyoLCIiR+s\n4s1vNpPYoCbTR/amT1s1sBMJdQoFOW0LVu1k3Kx0duQVMvLCVvzpZ+2pWV1/SiLhQP+Tpdz2HjrC\nI++tYPbybbRvUosXr+/DuYn1vS5LRCqQQkFOycyYm5bDQ3NWkFdYxF2XteP2/m2pXk0tKkTCjUJB\nTmp7biH3z87gk5U76BZflyeH96ZDUzWwEwlXCgU5LjPjre+28Pj7Kyny+bhvUEdGXNiKqmpRIRLW\nFAryE5v2HGJMajpfr9/D+a0bMHFYV5IaxXpdlogEgUJBypT4jH9+uYG/frSaqCpVeHxoMtf1TFAD\nO5EIolAQAFZvP8C9qWn8sGU/l3VozIShXWhWVw3sRCKNQiHCHSn28eLnWbywIIva0VH8z3+fyy+6\nNlMDO5EIpVCIYMu37Gf0jDRW7zjAVf4Gdg3VwE4koikUIlDBkRKe+Wg1r325gca1o3n1Nylc1lEN\n7EREoRBxvlq3mzGp6Wzem8+veicyZmAH6kSrgZ2IlFIoRIi8wiKemLeSf327haSGNfnXzedzQZuG\nXpclIpWMQiECfJK5g/tmp7PrwGFuubg1d1/enpjqVb0uS0QqIYVCGNtz8DAPvZfJez9so0PT2kz5\ndQrdEup5XZaIVGIKhTBkZry7fBsPv7eCg4eL+ePl7bmtXxs1sBORU1IohJlt+wu4f3YGn63aSfeE\nejw1vCvtm9T2uiwRCREKhTDh8xnTv93MxA9WUeIzxg/u
 xG/7JKmBnYicloCFgnMuAZgGNAEMmGJm\nk44Z0w94F9jgXzTTzB4JVE3hasPuQ4xJTeObDXvp27YhTwztSmLDml6XJSIhKJBbCsXAn81smXOu\nNrDUOfexmWUeM26RmQ0OYB1hq7jEx6tfbODZj9dQvVoVnrwmmWtTEtSiQkTOWMBCwcxygBz/9QPO\nuZVAC+DYUJAzsDInj9GpaaRl53JFpyZMuLoLTepEe12WiIS4oBxTcM4lAecC3xzn7j7OuTRgK3CP\nma0IRk2h6nBxCS98lsWLn6+jXs0oXvhVDwYlN9XWgYhUiICHgnOuFpAK3G1mecfcvQxINLODzrlB\nwGyg3XGeYxQwCiAxMTHAFVdeSzftY3RqGlk7DzKsRwvGX9mJ+rHVvS5LRMKIM7PAPblzUcBcYL6Z\nPVuO8RuBFDPbfaIxKSkptmTJkoorMgTkHynm6fmrmfrVRprVieaxYcn0P6ex12WJSAhxzi01s5RT\njQvk2UcOeBVYeaJAcM41BXaYmTnnegFVgD2BqikUfbF2N2NnpbFlbwE3XtCSewd0oFYNnUksIoER\nyLVLX+DXQLpzbrl/2TggEcDMJgPDgducc8VAAXCdBXLTJYTkFhTx2PuZvL0km1aNYnn7lgvo1aqB\n12WJSJgL5NlHXwAnPfppZn8H/h6oGkLV/BXbGT87gz2HjnBbvzbcdVk7oqPUwE5EAk/7ISqRXQcO\n89CcFbyfnkPHZnV49Tc9SY6v63VZIhJBFAqVgJkx6/utPDI3k/zDJfzl5+cw6uLWRFVVAzsRCS6F\ngse27i9g3Mx0/r1mF+e1rM+T13SlbeNaXpclIhFKoeARn89445tNPPnBKgx46BeduPGCJKqogZ2I\neEih4IF1uw4yJjWN7zbu46J2jXh8aDIJDdTATkS8p1AIouISHy8v2sBzn6whuloVnh7eleHnxatF\nhYhUGgqFIFmxLZfRqWlkbM1jQOe
 mPHJ1ZxrXVgM7EalcFAoBVlhUwt8/y2Lyv9dRr2Z1Xrq+BwOT\nm3ldlojIcSkUAmjJxr2MTk1j3a5DXNMjnvGDO1KvphrYiUjlpVAIgEOHSxvYvf71RprXjWHaiF5c\n3D7O67JERE5JoVDBFq7ZxdiZ6WzLLeDG80sb2MWqgZ2IhAitrSrI/vwjTHh/JTOWZtM6LpZ3brmA\nlCQ1sBOR0KJQqAAfpOcw/t0V7Ms/wu392/CHS9XATkRCk0LhLOw8UMiD767gg4ztdG5eh9dH9KRz\nczWwE5HQpVA4A2bGjKXZTHh/JQVFamAnIuFDoXCatuzNZ9ysdBat3U3PpPpMvKYrbeLUwE5EwoNC\noZx8PmOwHbfqAAAHD0lEQVTa1xt5av5qHPDokM5c37ulGtiJSFhRKJRD1s4DjE5NZ+mmfVzSPo7H\nhyXTol6M12WJiFQ4hcJJFJX4mLJwPZM+WUtM9ao8e203hp7bQg3sRCRsKRROIGNrLvfOSCMzJ48r\nk5vx0FWdiatdw+uyREQCSqFwjMKiEiZ9upYpC9fTILY6k284jwFdmnpdlohIUCgUjvLthr2MSU1j\n/e5D/DIlgXGDOlK3ZpTXZYmIBI1CATh4uJgnP1jF/y7eRHz9GN74XW8ubNfI67JERIIu4kNhweqd\n3DcznZy8Qkb0bcU9P29PzeoR/88iIhEqYGs/51wCMA1oAhgwxcwmHTPGAZOAQUA+8FszWxaomo62\n79ARHp2byczvt9KucS1m3NqH81rWD8ZLi4hUWoF8S1wM/NnMljnnagNLnXMfm1nmUWMGAu38l97A\nS/6fAWNmvJ+ew4PvriC3oIg7L23L7Ze2pUY1NbATEQlYKJhZDpDjv37AObcSaAEcHQpDgGlmZsBi\n51w951wz/2Mr3I68QsbPzuCjzB0kt6jLGyN707FZnUC8lIhISArKznPnXBJwLvDNMXe1ALYcdTvb\nv6zCQ2HBqp
 3c+db3HCn2MXZgB353YSuqqYGdiMiPBDwUnHO1gFTgbjPLO8PnGAWMAkhMTDyjOlo1\niqVHYn0euqozrRrFntFziIiEu4C+VXbORVEaCG+a2czjDNkKJBx1O96/7EfMbIqZpZhZSlzcmX3X\ncVKjWF4f0UuBICJyEgELBf+ZRa8CK83s2RMMmwPc6EqdD+QG6niCiIicWiB3H/UFfg2kO+eW+5eN\nAxIBzGwyMI/S01GzKD0l9aYA1iMiIqcQyLOPvgBO2k7Uf9bR7YGqQURETo9OvxERkTIKBRERKaNQ\nEBGRMgoFEREpo1AQEZEyrvQEoNDhnNsFbDrDhzcCdldgOaFAc44MmnNkOJs5tzSzU376N+RC4Ww4\n55aYWYrXdQST5hwZNOfIEIw5a/eRiIiUUSiIiEiZSAuFKV4X4AHNOTJozpEh4HOOqGMKIiJycpG2\npSAiIicRlqHgnBvgnFvtnMtyzo05zv3OOfc//vvTnHM9vKizIpVjztf755runPvKOdfNizor0qnm\nfNS4ns65Yufc8GDWFwjlmbNzrp9zbrlzboVz7t/BrrGileNvu65z7j3n3A/+OYd0t2Xn3GvOuZ3O\nuYwT3B/Y9ZeZhdUFqAqsA1oD1YEfgE7HjBkEfEBpF9fzgW+8rjsIc+4D1PdfHxgJcz5q3GeUtmkf\n7nXdQfg916P0e9AT/bcbe113EOY8DnjSfz0O2AtU97r2s5jzxUAPIOME9wd0/RWOWwq9gCwzW29m\nR4C3gCHHjBkCTLNSi4F6zrlmwS60Ap1yzmb2lZnt899cTOm33IWy8vyeAf5A6bf/7QxmcQFSnjn/\nCphpZpsBzCzU512eORtQ2//FXrUoDYXi4JZZccxsIaVzOJGArr/CMRRaAFuOup3tX3a6Y0LJ6c7n\nd5S+0whlp5yzc64FMBR4KYh1BVJ5fs/tgfrOuc+dc0udczcGrbrAKM+c/w50BLYB6cBdZuY
 LTnme\nCOj6K5DfvCaVkHOuP6WhcKHXtQTB88BoM/OVvomMCNWA84DLgBjga+fcYjNb421ZAfVzYDlwKdAG\n+Ng5t8jM8rwtKzSFYyhsBRKOuh3vX3a6Y0JJuebjnOsKvAIMNLM9QaotUMoz5xTgLX8gNAIGOeeK\nzWx2cEqscOWZczawx8wOAYeccwuBbkCohkJ55nwTMNFKd7hnOec2AB2Ab4NTYtAFdP0VjruPvgPa\nOedaOeeqA9cBc44ZMwe40X8U/3wg18xygl1oBTrlnJ1zicBM4Ndh8q7xlHM2s1ZmlmRmScAM4Pch\nHAhQvr/td4ELnXPVnHM1gd7AyiDXWZHKM+fNlG4Z4ZxrApwDrA9qlcEV0PVX2G0pmFmxc+4OYD6l\nZy68ZmYrnHO3+u+fTOmZKIOALCCf0ncaIaucc34AaAi86H/nXGwh3EysnHMOK+WZs5mtdM59CKQB\nPuAVMzvuqY2hoJy/50eBqc65dErPyBltZiHbPdU59y+gH9DIOZcNPAhEQXDWX/pEs4iIlAnH3Uci\nInKGFAoiIlJGoSAiImUUCiIiUkahICIiZRQKIiJSRqEgIiJlFAoiZ8n/fQ1pzrlo51ysv6d/F6/r\nEjkT+vCaSAVwzk0AoiltQpdtZk94XJLIGVEoiFQAf1+e74BCoI+ZlXhcksgZ0e4jkYrRkNIveKlN\n6RaDSEjSloJIBXDOzaH0W8FaAc3M7A6PSxI5I2HXJVUk2PzfblZkZtOdc1WBr5xzl5rZZ17XJnK6\ntKUgIiJldExBRETKKBRERKSMQkFERMooFEREpIxCQUREyigURESkjEJBRETKKBRERKTM/wMY2i8P\nOiX0cgAAAABJRU5ErkJggg==\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7fce59cef550>"
+       "<matplotlib.figure.Figure at 0x7f3cce2f9cd0>"
       ]
      },
      "metadata": {},
@@ -109,7 +109,7 @@
     {
      "data": {
       "text/plain": [
-       "[<matplotlib.lines.Line2D at 0x7fce43e79390>]"
+       "[<matplotlib.lines.Line2D at 0x7f3c7b71a410>]"
       ]
      },
      "execution_count": 4,
@@ -118,9 +118,9 @@
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAFkCAYAAACuFXjcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X90XGd95/H3N21JSgFrFprEgOOADCGFJl7LcQOJJGjI\nUIiaNC3tIqAW2bjlR7tL3VYUziJofeKwVIbA4UfZLWqPlRSd7nYbd6E9jR2oJacG4YwxXpqQ1AYT\nE+w4pYMDoaEQP/vHjGJZka40o9H80vt1zj2J7jx37jM3iu5n7n3u94mUEpIkSXM5q9EdkCRJzc2w\nIEmSMhkWJElSJsOCJEnKZFiQJEmZDAuSJCmTYUGSJGUyLEiSpEyGBUmSlMmwIEmSMlUUFiLivRFx\nasZyT0b73lnaPx4R5y6+65IkqR5+vIptvgJcBUT55x/N0z4BLwS++8SKlE5UsV9JktQA1YSFH6WU\nHq5wm4dTSo9UsS9JktRg1YxZeEFEPBgRhyPitohYNU/7AA5ExLciYmdEvKyKfUqSpAaJSqaojohX\nAU8D7gNWAn8IPBt4SUrp0VnavxDoBe4GzgZ+A/h1YENK6UDGfp4JvAo4Ajy24A5KkqRzgAuBO1JK\n367FG1YUFp60ccQK4BvA5pTSny9wm93AN1JKAxltXg/8RdUdkyRJb0gpfaoWb1TNmIUnpJRORsT9\nwJoKNvsicMU8bY4A3HbbbVx88cVV9k6V2rx5M7fcckuju7GseMzrz2Nefx7z+rr33nt54xvfCOVz\naS0sKixExNMoBYXRCjZbCxybp81jABdffDHr1q2rsneq1IoVKzzedeYxrz+Pef15zBumZrfxKwoL\nETEMfJrSrYfnAH8E/BAYK79+M/CcqVsMEfF24OvAP1G6h/IbwCuAq2vUf0mStMQqvbLwXOBTwDOB\nh4G7gMunDaBYCUx/OuIpwAcoDYL8PnAQuCqlNLGYT
 kuSpPqpKCyklPrnef2GGT8PA8NV9EuSJDUJ\n54bQE/r7M7OgloDHvP485vXnMW99i3p0cqlExDqgUCgUHBQjSVIF9u/fT1dXF0BXSml/Ld7TKwuS\nJCmTYUGSJGUyLEiSpEyGBUmSlMmwIEmSMhkWJElSJsOCJEnKZFiQJEmZDAuSJCmTYUGSJGUyLEiS\npEyGBUmSlMmwIEmSMhkWJElSJsOCJEnKZFiQJEmZDAuSJCmTYUGSJGUyLEiSpEyGBUmSmkBKid27\nx+nr20RX17X09W1ifHyClFKju8aPN7oDkiQtd8VikXx+gMOH11IsDgGrgKPs3TtCZ+c2du0apaOj\no2H9MyxIktRAKSXy+QEKhSFSumzaK6spFrdQKOwjnx9gcnIHEdGQPnobQpKkBpqY2MPhw2tnBIXT\nUrqMQ4cuYc+eu+rcs9MMC5IkNdDw8CjF4o2ZbYrFGxkeHq1Tj57MsCBJUgMdO3aC0hiFLKvK7RrD\nsCBJUgOtXHkucHSeVkfL7RrDsCBJUgMNDm4klxvJbJPLjTA4uLFOPXoyw4IkSQ3U09NNZ+cBIvbN\n+nrEPtasOUh395VPrKt3TQYfnZQkqYEigl27RsnnBzh06JLyYMcLgAfI5UZYs+YgO3duf+Kxyflq\nMmzb9nu172MzVIaaKSLWAYVCocC6desa3R1JkpZcSomJiT0MD9/K8eMnWLnyXAYHN9LdfeUTQSGl\nxIYN181Sk6EkYh8XX/z73HPPBEBXSml/LfrmlQVJkppARNDb20Nvb8+cbRZSk+Ho0RcAEzXtW0Vj\nFiLivRFxasZyzzzbvDwiChHxWETcHxEDi+uyJEnL00JqMnz3u79U8/1WM8DxK8B5wPnl5cq5GkbE\nhcBngM8ClwIfBj4ZEVdXsV9Jkpa1hdVkOK/m+63mNsSPUkoPL7DtW4GvpZTeUf75voi4EtgM7Kpi\n35IkLVunazKszmj1UM33W82V
 hRdExIMRcTgibouIrIhzOXDnjHV3AC+tYr+SJC1rC6nJ8PSn76j5\nfisNC18A3gS8CngL8DxgIiJ+ao725/PkiPMQ8IyIOLvCfUuStKwtpCbDqlX/XPP9VhQWUkp3pJT+\nT0rpKymlXcBrgBzwazXvmSRJOsNUTYb1628ilxsCjgCngCPkckOsX38TH//4lprvd1GPTqaUTkbE\n/cCaOZoc58kjLc4DHkkp/WC+99+8eTMrVqw4Y11/fz/9/f3VdFeSpJbX0dHB5OQOJib28Du/85/5\n+tfv4Zxzzqaz87k885nP5D3veU/N97mookwR8TTgAeA9KaWPzvL6fwdenVK6dNq6TwEdKaXXZLyv\nRZkkSarC/v376erqghoWZaq0zsJwRPRExOqIeBlwO/BDYKz8+s0RsX3aJp8Anh8R74+IiyLibcBr\ngQ/WovOSJGnpVXob4rnAp4BnAg8DdwGXp5S+XX59JdMeAE0pHYmIa4BbgP8KfBO4MaU08wkJSZLU\npCoKCymlzMECKaUbZlk3AXRV2C9JkmoqpcT4+ATbtt3KsWOn517o6el+Yu4Fzc65ISRJbW++mRp3\n7Rqlo6Oj0d1sWoYFSVJbSymRzw/MMlPjaorFLRQK+8jnB5ic3OEVhjlUU8FRkqSWsZCZGg8duoQ9\ne+6qc89ah2FBktTWFjJTY7F4I8PDo3XqUesxLEiS2trCZmpcVW6n2RgWJElt7fRMjVmOlttpNoYF\nSVJbW8hMjbncCIODG+vUo9ZjWJAktbWFzNS4Zs1BuruvrHPPWoePTkqS2trUTI35/ACHDl1SHux4\nAfAAudwIa9YcZOfO7T42mcGwIElqe9Nnahwe3srx46crOHZ3bzEozMOwIElqerUo1RwR9Pb20Nvb\ns8S9bT+GBUlSU7NUc+MZFiRJTWu+Us133/1FLr/8Gjo7X8Tx4w87OdQSMSxIkppWdqnmInAT9933\nUu6777/
 gFYel46OTkqSmNXep5gQMAEPANmA1pVPa1ORQQ+TzA6SU6tjb9mVYkCQ1rblLNe8B1gJO\nDlUPhgVJajIpJXbvHqevbxNdXdfS17eJ8fGJZfktee5SzaOAk0PVi2MWJKmJOPL/TIODG9m7d4Ri\nccuMV5wcqp68siBJTWL6yP/SydH78HOXanZyqHoyLEhSk8ge+b8878NPlWpev/4mcrkh4AhwCrga\n+Ejmtk4OVTuGBUlqEnOP/D9tOd6HnyrVfPvtV3PNNVvp6rqea67ZxUUXFYj44qzbODlUbTlmQZKa\nxNwj/6dbnvfhZyvV/J3vfMfJoerEsCBJTeL0yP/VGa28Dz/FyaHqx7AgSU1i7pH/p3kf/kxODlUf\njlmQpCYx98j/Eu/Dq1G8siBJTWJq5L/34dVsDAuS1ES8D69mZFiQpCbjfXg1G8csSJKkTIYFSZKU\nybAgSZIyGRYkSVImw4IkScpkWJAkSZkWFRYi4p0RcSoiPpjRprfcZvryeERY3FySpBZQdZ2FiLgM\n+E3gywtonoAXAt99YkVKy2/aNEmSWlBVVxYi4mnAbcAm4DsL3OzhlNKJqaWa/UqSpPqr9jbEx4BP\np5Q+t8D2ARyIiG9FxM6IeFmV+5UkSXVWcViIiNcBa4F3LXCTY8CbgV8BfpnSZO27I2JtpfuWpFpL\nKbF79zh9fZvo6rqWvr5NjI9PkFKyX1JZVPKLFxHPBe4GXplS+kp53T8AX0op/W4F77Mb+EZKaWCO\n19cBhZ6eHlasWHHGa/39/fT39y+4z5I0l2KxSD4/wOHDa8szPK4CjpLLjdDZeYBdu0bp6OiwX2pa\nY2NjjI2NnbHu5MmTTExMAHSllPbXYj+VhoXrgL8GHqd0awHgxygNYHwcODst4A0j4o+BK1JKV8zx\n+jqgUCgUWLdu3YL7J0kLlVJiw4brKBSGSOmyJ70esY/1629icnJHXWd6bNZ+qXXs37+f
 rq4uqGFY\nqPQ2xJ3Az1K6DXFpebmb0mDHSxcSFMrWUro9IUkNMTGxh8OH1856QgZI6TIOHbqEPXvusl9a9ioK\nCymlR1NK90xfgEeBb6eU7gWIiJsjYvvUNhHx9oi4NiI6I+LFEfEh4BXAR2v5QSSpEsPDo+VL/HMr\nFm9keHi0Tj0qadZ+aXmrus7CNDOvJqykdINtylOADwDPBr4PHASuSilN1GDfklSVY8dOcOafqtms\nKrern2btl5a3RYeFlNLPz/j5hhk/DwPDi92PJNXSypXnUno4a3VGq6PldvXTrP3S8ubcEJKWpcHB\njeRyI5ltcrkRBgc31qlHJc3aLy1vhgVJy1JPTzednQeI2Dfr6xH7WLPmIN3dV9ovLXu1GLMgSS0n\nIti1a5R8foBDhy4pDyq8AHiAXG6ENWsOsnPn9ro/ntis/dLyZliQtGx1dHQwObmDiYk9DA9v5fjx\nE6xceS6Dgxvp7t5S9Qk5pcT4+ATbtt3KsWOn37Onp3tB77lU/ZKqVVFRpnqxKJOkVmX1RTXaUhRl\n8sqCJNVISol8fmCW6ourKRa3UCjsI58fsPqiWo4DHCWpRqy+qHZlWJCkGrH6otqVYUGSasTqi2pX\nhgVJqpHT1RezWH1RrcewIEk1YvVFtSvDgiTViNUX1a58dFKSasTqi2pXhgVJqiGrL6odGRYk1cxi\nyxy3i4igt7eH3t6eRndFqgnDgqSaOLPM8RBTZY737h2hs3ObZY6lFuYAR6nJpZTYvXucvr5NdHVd\nS1/fJsbHJ2imeV2mlzkuFrcAqyn9eZkqczxEPj/QVH2WtHBeWZCaWKt8W6+kzHFPT3edeydpsbyy\nIDWpVvq2bpljqb0ZFqQm1UqTElnmWGpvhgWpSbXSt3XLHEvtzbAgNalW+rZumWOpvRkWpCbVSt/W\nLXO8tFrhiRi1N5+GkJrU4OBG9u4dKQ9unF2zfFtf7mWOl7IYVas
 8EaP2Fs2YTCNiHVAoFAqsW7eu\n0d2RGiKlxIYN11EoDM06yDFiH+vX38Tk5I6mOQmnlMpljm+dUeb4yqbpY62deTK/kamTeS43Qmfn\ngUWdzFvxd0CNt3//frq6ugC6Ukr7a/GeXlmQmlQrfltfbmWOpz/eeubJfOrx1n3k8wNVn8ytX6Fm\n4ZgFqYlNTUp0++1Xc801W+nqup6+vq3s2JFncnKHl58bbKkfb22lJ2LU3ryyIDW55fZtvZWUTuZD\nmW1KJ/OtVX3zb6UnYtTevLIgSVVa6pN5Kz0Ro/ZmWJCkKi31ydz6FWoWhgVJqtJSn8ytX6FmYViQ\npCot9cl86omY9etvIpcbAo4Ap4Aj5HJDrF9/U9M9EaP25ABHSapSPR5vnXoiplS/YuuM+hVbDAqq\ni0WFhYh4J3Az8KGU0u9mtHs58AHgxcADwNaU0vbF7FuSmkE9TuY+EaNGqzosRMRlwG8CX56n3YXA\nZ4CPA68HXgl8MiK+lVLaVe3+JalZeDJXu6tqzEJEPA24DdgEfGee5m8FvpZSekdK6b6U0seAvwI2\nV7NvSZJUX9UOcPwY8OmU0ucW0PZy4M4Z6+4AXlrlviVJUh1VHBYi4nXAWuBdC9zkfOChGeseAp4R\nEWdXun9JtecUyJKyVDRmISKeC3wIeGVK6YdL06XTNm/ezIoVK85Y19/fT39//1LvWlo2nAJZal1j\nY2OMjY2dse7kyZM1309FU1RHxHXAXwOPA1NDfH8MSOV1Z6cZbxgR40Bh+tMSEfEm4JaUUm6O/ThF\ntVQHToEstZ+lmKK60tsQdwI/S+k2xKXl5W5Kgx0vnRkUyj4PXDVjXb68XlIDLfWsiZLaQ0VhIaX0\naErpnukL8Cjw7ZTSvQARcXNETK+h8Ang+RHx/oi4KCLeBrwW+GCtPoSk6jgFsqSFqEW555lXE1Yy\nbRq2lNIR4BpK9RUOUHpk8saU0swnJCTVmV
 MgS1qIRZd7Tin9/Iyfb5ilzQTQtdh9Saqt07Mmrs5o\n5RTI0nLnRFLSMuYUyJIWwrAg1Vkz1TRwCmRJC+Gsk1IdNVtNg3rMmiip9RkWpDpJKZHPD8xS02A1\nxeIWCoV95PMDda9p4BTIkuZjWJDqpJKaBj093XXtm7MmSsrimAWpTqxpIKlVGRakOrGmgaRWZViQ\n6uR0TYMs1jSQ1HwMC1KdWNNAUqsyLEh1Yk0DSa3KpyGkOrGmgaRWZViQ6siaBpJakWFBqjNrGkhq\nNY5ZkCRJmQwLkiQpk2FBkiRlMixIkqRMhgVJkpTJsCBJkjIZFtRwKSV27x6nr28TXV3X0te3ifHx\nCVJKje6aJAnrLKjBisUi+fwAhw+vpVgcojQr41H27h2hs3Mbu3aN0tHR0ehuVi2lxPj4BNu23cqx\nY6cLMPX0dFuASVLLMCyoYVJK5PMDFApDpHTZtFdWUyxuoVDYRz4/wOTkjpY8sbZ7EJK0fHgbQg0z\nMbGHw4fXzggKp6V0GYcOXcKePXfVuWeLNz0IFYtbgNWU/nebCkJD5PMD3mqR1BIMC2qY4eHR8mRK\ncysWb2R4eLROPaqddg5CkpYfw4Ia5tixE5QuzWdZVW7XWto5CElafgwLapiVK88Fjs7T6mi5XWtp\n5yAkafkxLKhhBgc3ksuNZLbJ5UYYHNxYpx7VTjsHIUnLj2FBDdPT001n5wEi9s36esQ+1qw5SHf3\nlXXu2eK1cxCStPwYFtQwEcGuXaOsX38TudwQcAQ4BRwhlxti/fqb2Llze0s+NtnOQUjS8mOdBTVU\nR0cHk5M7mJjYw/DwVo4fP124qLt7S0sGBTgdhPL5AQ4duqQ82PEC4AFyuRHWrDnYskFI0vJjWFDD\nRQS9vT309vY0uis11a5BSNLyY1iQllC7BiFJy4tjFiRJUqaKwkJEvCUivhwRJ8vL3oj4hYz2vRFx\nasbyeET4vJgkSS2i0
 isLR4E/ANYBXcDngL+JiIsztknAC4Dzy8vKlJKVaDQrp6uWpOZT0ZiFlNLf\nzlj17oh4K3A5cG/Gpg+nlB6ptHNaXpylUZKaU9VjFiLirIh4HfBU4PNZTYEDEfGtiNgZES+rdp9q\nX87SKEnNq+KwEBEviYjvAj8APg5cn1L66hzNjwFvBn4F+GVKtzF2R8TaKvurNuUsjZLUvKq5svBV\n4FJgA/AnwGhEvGi2himl+1NKf5pS+lJK6QsppRuBvcDmqnustuQsjZLUvCqus5BS+hHwtfKPX4qI\nDcDbgbcu8C2+CFyxkIabN29mxYoVZ6zr7++nv79/gbtSq3CWRkmq3NjYGGNjY2esO3nyZM33U4ui\nTGcBZ1fQfi2l2xPzuuWWW1i3bl1VnVJrOT1L4+qMVs7SKEnTzfYFev/+/XR1ddV0P5XWWbg5Iroj\nYnV57ML7gF7gtvLr74uI7dPavz0iro2Izoh4cUR8CHgF8NFafgi1PmdplKTmVemYhXOB7ZTGLdxJ\nqdZCPqX0ufLr53PmteSnAB8ADgK7gZ8Frkop7a6+y2pHztIoSc2r0joLm+Z5/YYZPw8Dw1X0S8vM\ncpqlMaXE+PgE27bdyrFjpyeX6unpXtDnW+z2klQpJ5JS01gOszQutvCUhaskNUI0Y5GbiFgHFAqF\nggMc1TZSSmzYcB2FwtCs9SQi9rF+/U1MTu6YNRgtdntJy8O0AY5dKaX9tXhPZ52U6mSxhacsXCWp\nUQwLUp0stvCUhaskNYphQaqTxRaesnCVpEYxLEh1crrwVJa5C08tdntJqpZhQaqTxRaesnCVpEYx\nLLSZlBK7d4/T17eJrq5r6evbxPj4hFM7N4HFFp6ycJWkRrHOQhvxGfzmttjCU8upcJWk5mKdhSVS\n7yp7PoPfOlJK5cJTt84oPHXlgis4LmZ7Se1tKeoseGVhCTTiG34lz+D39HTXdN+qTETQ29tDb29P\n
 Q7aXpEo5ZqHGUkrk8wMUCkMUi1soTbl8FrCaYnELhcIQ+fxAVWMIssYj+Ay+JGmpeGWhxpbqG/58\nVyt++MPH8Rl8SdJS8MpCjS3FN/yFXK04cuSbLOQZ/PPP/+kF71eSJDAs1NxSVNlbyNWKxx+/lKc/\n/RPzvNNHOHDgC7zqVQM+VilJWjBvQ9TY6Sp7qzNaVVZlr3S1Yiizzfe+90esWHEdEdeT0oZZWnwW\n+DsefPB6HnzwzfhYpSRpobyyUGNLUWVvYVcrLuDCC5/LRRe9E/h94AhwqvzPdwO/DWwHbqaWgy4l\nSe3PsFBjS1Flb6FzAqxa9Rye//znARuArcD15X+eB7y2vP7JnNpYkpTFsFBjU1X21q+/iVxuiOnf\n8HO5Idavv6niKnuVXK04fvxhSsHgT4G/Kf/zy8CmzO19rFKSNBfDwhLo6OhgcnIHt99+Nddcs5Wu\nruvp69vKjh15Jid3VDw2oJKrFbNfhXBqY0lS9RzguERqWWWvkjkBBgc3snfvSPkRyym1H3QpSVo+\nvLLQIhZ6tWL2qxAbAac2liRVxysLLWQhVytmvwpxBaWBjpPAz82yzdRtjC1Pek2SJMNCG5q6ClGa\nmXArx4+f4FnPOo9vfONdPPTQyygWN+HUxpKkhTIstKnZrkKcntp464ypjbcYFCRJczIsLCNObSxJ\nqoYDHCVJUibDgiRJymRYkCRJmQwLkiQpk2FBkiRlMixIkqRMhgVJkpSporAQEW+JiC9HxMnysjci\nfmGebV4eEYWIeCwi7o+IgcV1WZIk1VOlVxaOAn8ArAO6gM8BfxMRF8/WOCIuBD4DfBa4FPgw8MmI\nuLrK/kqSpDqrKCyklP42pfT3KaXDKaVDKaV3A98DLp9jk7cCX0spvSOldF9K6WPAXwGbF9dtqVS+\nevfucfr6NtHVdS19fZsYH58gpdTorklSW6m63HNEnAX8GvBU4PNzNLscuHPGu
 juAW6rdrwRQLBbJ\n5wc4fHgtxeIQsAo4yt69I3R2bmPXrtEnpu2WJC1OxWEhIl5CKRycA3wXuD6l9NU5mp8PPDRj3UPA\nMyLi7JTSDyrdv5RSIp8foFAYIqXLpr2ymmJxC4XCPvL5ASYndzhBliTVQDVPQ3yV0viDDcCfAKMR\n8aKa9krKMDGxh8OH184ICqeldBmHDl3Cnj131blnktSeKr6ykFL6EfC18o9fiogNwNspjU+Y6Thw\n3ox15wGPLOSqwubNm1mxYsUZ6/r7++nv76+022ojw8Oj5VsPcysWb2R4eCs9Pd116pUk1d/Y2Bhj\nY2NnrDt58mTN91OLKarPAs6e47XPA6+esS7P3GMcznDLLbewbt26RXRN7ejYsROUxihkWVVuJ0nt\na7Yv0Pv376erq6um+6m0zsLNEdEdEasj4iUR8T6gF7it/Pr7ImL7tE0+ATw/It4fERdFxNuA1wIf\nrNUH0PKzcuW5lJ7izXK03E6StFiVjlk4F9hOadzCnZRqLeRTSp8rv34+077ypZSOANcArwQOUHpk\n8saU0swnJKQFGxzcSC43ktkmlxthcHBjnXokSe2totsQKaVN87x+wyzrJiiFCqkmenq66ezcRqGw\nb9ZBjhH7WLPmIN3dWxrQO0lqP7UYsyDVVUSwa9co+fwAhw5dQrF4I3AB8AC53Ahr1hxk587tPjYp\nSTViWFBL6ujoYHJyBxMTexge3srx4ydYufJcBgc30t29xaAgSTVkWFDLigh6e3vo7e1pdFckqa05\nRbUkScpkWJAkSZkMC5IkKZNhQZIkZTIstKGUErt3j9PXt4murmvp69vE+PgEKaVGd02S1IJ8GqLB\nUkqMj0+wbdutHDt2+vG/np7uqh7/KxaL5PMDHD68tjzZ0irgKHv3jtDZuY1du0bp6Oio+eeQJLUv\nw0ID1frEnlIinx+gUBiaUdlwNcXiFgqFfeTzA0xO7rAO
 gSRpwbwN0SDTT+zF4hZgNaX/HFMn9iHy\n+YGKbh1MTOzh8OG1s5ZALu3zMg4duoQ9e+6qyWeQJC0PhoUGWYoT+/DwaLn08dyKxRsZHh6tqK+S\npOXNsNAgS3FiP3bsBNMm/ZzDqnI7SZIWxrDQIEtxYl+58lzg6DytjpbbSZK0MIaFBlmKE/vg4EZy\nuZHMNrncCIODGxf8npIkGRYaZClO7D093XR2HiBi36yvR+xjzZqDdHdfWVFfJUnLm2GhQZbixB4R\n7No1yvr1N5HLDQFHgFPAEXK5Idavv4mdO7f72KQkqSLWWWiQqRN7Pj/AoUOXlAc7XgA8QC43wpo1\nB6s6sXd0dDA5uYOJiT0MD2/l+PHThZ66u7cYFCRJFTMsNNBSndgjgt7eHnp7e2rcY0nScmRYaDBP\n7JKkZueYBUmSlMmwIEmSMhkWJElSJsOCJEnKZFiQJEmZDAuSJCmTYUGSJGUyLEiSpEyGBUmSlMmw\nIEmSMhkWJElSJsOCJEnKZFiQJEmZDAuSJClTRWEhIt4VEV+MiEci4qGIuD0iXjjPNr0RcWrG8nhE\nnLu4rkuSpHqo9MpCN/AR4OeAVwI/AeyMiJ+cZ7sEvAA4v7ysTCmdqHDfkiSpAX68ksYppddM/zki\n3gScALqAu+bZ/OGU0iMV9U6SJDXcYscsdFC6avCv87QL4EBEfCsidkbEyxa5X0mSVCdVh4WICOBD\nwF0ppXsymh4D3gz8CvDLwFFgd0SsrXbfkiSpfiq6DTHDx4GfAa7IapRSuh+4f9qqL0REJ7AZGMja\ndvPmzaxYseKMdf39/fT391fVYUmS2snY2BhjY2NnrDt58mTN9xMppco3ivgo8ItAd0rpgSq2/2Pg\nipTSrEEjItYBhUKhwLp16yrunyRJy9X+/fvp6uoC6Eop7a/Fe1Z8ZaEcFK4DeqsJCmVrKd2ekCRJ\nTa6isBARHwf6gWuBRyPivPJLJ1N
 Kj5Xb3Aw8J6U0UP757cDXgX8CzgF+A3gFcHVNPoEkSVpSlV5Z\neAulpx92z1h/AzBa/veVwKpprz0F+ADwbOD7wEHgqpTSRKWdlSRJ9VdpnYV5n55IKd0w4+dhYLjC\nfkmSpCbh3BCSJCmTYUGSJGUyLEiSpEyGBUmSlMmwUIWUErt3j9PXt4murmvp69vE+PgE1RS4kiSp\n2S2m3POyVCwWyecHOHx4LcXiEKWnRI+yd+8InZ3b2LVrlI6OjkZ3U5KkmjEsVCClRD4/QKEwREqX\nTXtlNcXiFgqFfeTzA0xO7qA0z5YkSa3P2xAVmJjYw+HDa2cEhdNSuoxDhy5hz5676twzSZKWjmGh\nAsPDoxQUlw1UAAAH9UlEQVSLN2a2KRZvZHh4NLONJEmtxLBQgWPHTnBmJevZrCq3kySpPRgWKrBy\n5bnA0XlaHS23kySpPRgWKjA4uJFcbiSzTS43wuDgxjr1SJKkpddSYaHR9Q16errp7DxAxL5ZX4/Y\nx5o1B+nuvrIu/ZEkqR5a5tHJZqhvEBHs2jVKPj/AoUOXlAc7XgA8QC43wpo1B9m5c7uPTUqS2kpL\nhIVmqm/Q0dHB5OQOJib2MDy8lePHT7By5bkMDm6ku3uLQUGS1HZaIixUUt+gp6d7yfsTEfT29tDb\n27Pk+5IkqdFaYsyC9Q0kSWqclggL1jeQJKlxWiIsWN9AkqTGaYmwYH0DSZIapyXCgvUNJElqnJZ4\nGsL6BpIkNU5LhAWwvoEkSY3SMmEBrG8gSVIjtMSYBUmS1DiGBUmSlMmwIEmSMhkWJElSJsOCJEnK\nZFiQJEmZDAuSJCmTYUGSJGUyLOgJY2Njje7CsuMxrz+Pef15zFtfRWEhIt4VEV+MiEci4qGIuD0i\nXriA7V4eEYWIeCwi7o+Igeq7rKXi/9D15zGvP495/XnMW1+lVxa6gY8APwe8EvgJYGdE/ORcG0TE\nhcBngM8Clw
 IfBj4ZEVdX0V9JklRnFc0NkVJ6zfSfI+JNwAmgC7hrjs3eCnwtpfSO8s/3RcSVwGZg\nV0W9lSRJdbfYMQsdQAL+NaPN5cCdM9bdAbx0kfuWJEl1UPWsk1GaE/pDwF0ppXsymp4PPDRj3UPA\nMyLi7JTSD2bZ5hyAe++9t9ruqQonT55k//79je7GsuIxrz+Pef15zOtr2rnznFq9Z6SUqtsw4k+A\nVwFXpJSOZbS7D/izlNL7p617NaVxDE+dLSxExOuBv6iqY5IkCeANKaVP1eKNqrqyEBEfBV4DdGcF\nhbLjwHkz1p0HPDLHVQUo3aZ4A3AEeKyaPkqStEydA1xI6VxaExWHhXJQuA7oTSk9sIBNPg+8esa6\nfHn9rFJK3wZqkoYkSVqG9tbyzSqts/BxSt/4Xw88GhHnlZdzprW5OSK2T9vsE8DzI+L9EXFRRLwN\neC3wwRr0X5IkLbGKxixExClKTz/MdENKabTc5s+B1Smln5+2XQ9wC/AzwDeBLSmlWxfTcUmSVB9V\nD3CUJEnLg3NDSJKkTIYFSZKUqSFhISJ+KyK+HhH/FhFfiIjL5mnvRFSLVMkxj4jrI2JnRJyIiJMR\nsTci8vXsbzuo9Pd82nZXRMQPI8IqNhWq4m/LUyJia0QcKf99+Vq5jL0WqIpj/oaIOBARj0bEtyJi\nJCL+Q7362+oiojsi/m9EPBgRpyLi2gVss+hzaN3DQkT8J+ADwHuB/wh8GbgjIp41R/sLcSKqRan0\nmAM9wE5Kj7yuA/4B+HREXFqH7raFKo751HYrgO08uUS65lHlMf/fwCuAG4AXAv3AfUvc1bZRxd/z\nKyj9fv8ppQHvrwU2AP+zLh1uDz8FHADexuwPHJyhZufQlFJdF+ALwIen/RyUnpB4xxzt3w8cnLFu\nDPi7eve9VZdKj/kc7/EV4N2N/iytslR7zMu/239E6Y/v/kZ/jlZaqvjb8guU5rXpaHTfW3W
 p4pj/\nHvDPM9b9NvBAoz9LKy7AKeDaedrU5Bxa1ysLEfETlGao/OzUulTq+Z3MPbGUE1EtQpXHfOZ7BPB0\nsicMU1m1xzwibgCeRyksqAJVHvNfBO4G/iAivhkR90XE8PS6MZpblcf888Cqcsl/IuI84FeBv13a\n3i5rNTmH1vs2xLOAH2P2iaXOn2ObzImoatu9tlTNMZ9pkNKlr/9Vw361s4qPeUS8ALiZUi33U0vb\nvbZUze/584Fu4MXALwFvp3RZ/GNL1Md2U/ExTyntBd4I/GVE/DtwDChSurqgpVGTc6hPQyhTeVKv\nIeBXU0r/0uj+tKOIOIvSxGnvTSkdnlrdwC4tF2dRuoz7+pTS3Smlvwd+Fxjwi8jSiIifoXTP/A8p\njYd6FaWraf+jgd3SAlQ9RXWV/gV4nNknljo+xzbVTESl06o55gBExOsoDTx6bUrpH5ame22p0mP+\ndGA9sDYipr7VnkXpDtC/A/mU0u4l6mu7qOb3/BjwYErpe9PW3UspqD0XODzrVppSzTF/J/CPKaWp\ncv9fKU8BsCci/ltKaeY3YC1eTc6hdb2ykFL6IVAArppaV74ffhVzT3rx+entyzInotJpVR5zIqIf\nGAFeV/7GpQWq4pg/ArwEWEtptPKllOZU+Wr53yeXuMstr8rf838Enh0RT5227iJKVxu+uURdbRtV\nHvOnAj+asW5qGgGvpi2N2pxDGzB689eA7wMbgRdRuvz0beCny6+/D9g+rf2FwHcpjei8iNLjIv8O\nvLLRI1FbZanimL++fIzfQimBTi3PaPRnaZWl0mM+y/Y+DbHEx5zSOJxvAH8JXEzpkeH7gE80+rO0\nylLFMR8AflD+2/I84Argi8DeRn+WVlnKv7eXUvpycQr4nfLPq+Y45jU5hzbqw74NOAL8G6V0s37a\na38OfG5G+x5KCfbfgH8Gfr3R/8FabankmFOqq/D4LMufNfpztNJS6e
 /5jG0NC3U45pRqK9wBfK8c\nHP4YOLvRn6OVliqO+W8B/698zL9Jqe7CykZ/jlZZgN5ySJj17/NSnUOdSEqSJGXyaQhJkpTJsCBJ\nkjIZFiRJUibDgiRJymRYkCRJmQwLkiQpk2FBkiRlMixIkqRMhgVJkpTJsCBJkjIZFiRJUqb/DzjG\nuFavUES/AAAAAElFTkSuQmCC\n",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFcVJREFUeJzt3X+MZWdZwPHvQ7e4pVscYhfYdjsulPoLYwFna1OJWTCM\ndGls3PSPpkIjMVkWKsGo8dcfEGmMmhiDZJVNRaJEKzG6CxULioFKCRa6W+nSUjS7S7G73Vha3cJs\nZzUDj3+cM/bu7Z2Zc+/ce8+P+X6Syb33nDP3Pj3pPvfMc573fSMzkSR11/PqDkCSNFkmeknqOBO9\nJHWciV6SOs5EL0kdZ6KXpI4z0UtSx5noJanjTPSS1HGb6vrgSy+9NHfs2FHXx0tSKx05cuTJzNw6\nzO9USvQR8SjwLeDbwFJmzvXt3wV8DPhauelgZr53tffcsWMHhw8fHiZWSdrwIuLrw/7OMFf0r8vM\nJ1fZf29m3jBsAJKkybJGL0kdVzXRJ/BPEXEkIvaucMx1EXE0Ij4REa8cU3ySpHWqWrp5bWaeiogX\nA5+KiK9m5md79j8AzGbmQkTsBj4KXNX/JuWXxF6A2dnZdYYuSaqi0hV9Zp4qH58ADgHX9O3/ZmYu\nlM/vBi6MiEsHvM8dmTmXmXNbtw5101iSWm9xEe68E26/vXg8d246n7vmFX1EXAw8LzO/VT6fB97b\nd8xLgf/MzIyIayi+QJ6aRMCS1Eb33w/z87C0BGfPwsUXw223wT/+I+zcOdnPrlK6eQlwKCKWj78z\nMz8ZEfsAMvMAcBPw9ohYAhaBm9OlqyQJKK7k5+fhzJlnty0sFI/z83D6NGzePLnPXzPRZ+YJ4OoB\n2w/0PN8P7B9vaJLUDYcOFVfygywtwcGDcMstk/v82kbGStKoFheL5Hn8OFx5JezZM9kr4vU6frwo\n1wxy9iycODHZzzfRS2qVOmvdo7ryyiLO5XJNr4svh
 pe/fLKf74ApSa3RW+teWIDM4vHMmWL7tLpY\nhrVnD2xa4bJ606Zi/ySZ6CW1RpVadxNt3lz8xTEzA1u2QETxODNTbJ902cnSjaTWqLvWvR47d8Lj\njxdfVidOFOWaad1bMNFLao26a93rddFFk+2uWYmlG0mtUXetu61M9JJao+5ad1tZupHUKnXWutvK\nRC+pdeqqdbeVpRtJ6jgTvSR1nIlekjrORC9JHWeil6SOM9FLUseZ6CWp40z0ktRxJnpJ6jgTvSR1\nnIlekjrORC9JHWeil6SOqzR7ZUQ8CnwL+DawlJlzffsD+ENgN/AM8HOZ+cB4Q5Wk+i0uFlMkHz9e\nrHjVhimSh5mm+HWZ+eQK+64Hrip/fgz4QPkoSSNpYkK9/36Yny8WIj97tli+8LbbikVPdu6sN7bV\njGs++huBD2dmAvdFxExEbMvM02N6f0kbSBMT6uJiEdOZM89uW167dn4eTp+u/4toJVVr9An8U0Qc\niYi9A/ZfDjzW8/pkuU2ShtKbUBcWILN4PHOm2H7uXD1xHTpUfPEMsrQEBw9ON55hVE30r83MV1GU\naG6LiJ8Y5cMiYm9EHI6Iw9/4xjdGeQtJHdfUhHr8ePHXxSBnzxbLGjZVpUSfmafKxyeAQ8A1fYec\nAq7oeb293Nb/Pndk5lxmzm3dunW0iCV1WlMT6pVXFiWkQS6+uFi7tqnWTPQRcXFEXLL8HJgHHuo7\n7C7g1ihcCzxtfV7SKJqaUPfsgU0r3NXctKnY31RVruhfAnwuIh4Evgj8fWZ+MiL2RcS+8pi7gRPA\nMeBPgHdMJFpJndfUhLp5c3EzeGYGtmyBiOJxZqbY3tQbsVCh6yYzTwBXD9h+oOd5AreNNzRJG9Fy\nQu3vutm0qf6EunMnPP54cR/hxInir4smtH2uZVztlZI0Nk1OqBddBLfcUncUwzHRS2qkNibUpnKu\nG0nqOBO9JHWcpRtJjdO0eW6a
 Fs+wTPSSGqVp89w0LZ5RRNEZOX1zc3N5+PDhWj5bUjMtLsJll50/\ncdiymZnpTxzWtHgAIuJI/1Txa7FGL6kxmjbPTdPiGZWJXlJjNG2em6bFMypr9JIaY3mem+V53nsN\nmudm0jdJh42nqazRS2qMc+dg27ZqNfFBN0mXp0kY103SYeKZFmv0klqt6sRh01qcpM0TmfWydCOp\nUarMc1PlJum4pk9o8rw7VZnoJdVuUK19tUQ97ZukbZ93x0QvqVajDEjqyk3SabFGL6k2q9Xad+0a\nfBMUmrs4SVOZ6CXVZrVa+zPPwOWXF1f8/bpyk3RaLN1Iqs1qtXYokv38/OA2xi7cJJ0WE73UcU2e\neXG1Wvuy1bpo2n6TdFpM9FKHNX3mxT17inhW06apBprKGr3UUdMaVLQey7X2F7xg5WPsolk/E73U\nUW2ZeXHnTjh5cuVkbxfN+pnopY5q08yLL3oR3HOPXTSTUrlGHxEXAIeBU5l5Q9++XcDHgK+Vmw5m\n5nvHFaSk4bVtUJFdNJMzzM3YdwGPAC9cYf+9/V8Akuqz2o3OppZD7KKZjEqlm4jYDrwJ+OBkw5E0\nLg4q0rKqV/TvA34VuGSVY66LiKPAKeBXMvPh9QYnNVGT+9L7WQ4RVEj0EXED8ERmHilr8YM8AMxm\n5kJE7AY+Clw14L32AnsBZmdnRw5aqkvT+9IHsRyiNVeYiojfAd4CLAGbKWr0BzPzzav8zqPAXGY+\nudIxrjCltllchMsua9ZqQ9p4JrLCVGb+RmZuz8wdwM3Ap/uTfES8NCKifH5N+b5PDROI1HRt6UuX\n+o08BUJE7APIzAPATcDbI2IJWARuzroWo5UmpE196VKvoRJ9Zt4D3FM+P9CzfT+wf5yBSU3Ttr50\naZkjY6WKXOxCbWWilyqyL11t5TTF0hDsS1cbmeilIdmXrraxdCNJHWeil6SOM9FLUseZ6CWp40z0\nktRxJnp
 J6jgTvSR1nIlekjrORC9JHefIWKkD2rS8oabPRC+1XBuXN9R0meilFltcLJJ87/KGy/Pl\nz8+7vKEK1uilFnN5Q1VhopdazOUNVYWJXmqx5eUNB3F5Qy0z0asRFhfhzjvh9tuLx3Pn6o6oHVze\nUFV4M1a1s2tkdMvLG/afv02bXN5QzzLRq1Z2jayfyxtqLSZ61apK14jL9q3N5Q21Gmv0qpVdI9Lk\nVU70EXFBRPxrRHx8wL6IiPdHxLGIOBoRrxlvmOoqu0akyRvmiv5dwCMr7LseuKr82Qt8YJ1xaYOw\na0SavEo1+ojYDrwJ+G3glwYcciPw4cxM4L6ImImIbZl5enyhatp6J8q64opi22OPjXfSLLtGpMmr\nejP2fcCvApessP9y4LGe1yfLbecl+ojYS3HFz+zs7FCBarr6Wx4zn923Zct42x83YteIs01qmtZM\n9BFxA/BEZh6JiF3r+bDMvAO4A2Bubi7XOFw1GdTy2GsS7Y8bqWvEcQOatio1+h8HfjoiHgU+Arw+\nIv6i75hTwBU9r7eX29RCq7U89nLSrOH1fokuLBR/KS0sFK/n5x0RrMlYM9Fn5m9k5vbM3AHcDHw6\nM9/cd9hdwK1l9821wNPW59trtZbHXrY/Ds/ZJlWHkQdMRcQ+gMw8ANwN7AaOAc8Abx1LdKrFcsvj\ncolmJbY/Ds9xA6rDUIk+M+8B7imfH+jZnsBt4wxM9dmzp6gZr8X2x+Gt9iXqF6cmxZGxeo7llseZ\nmaLDJuL8/Vu2FPtsfxye4wZUB+e60UD9LY/btxfbT57cGO2Pk+K4AdXBRK8VbaSWx2naiOMGVC8T\nvVQDv0Q1TdboJanjTPSS1HEmeknqOGv0G0SbJtFqU6xSG5joN4A2TaLVpliltojMeiaRnJuby8OH\nD9fy2RvJ4iJcdtngmShnZpq1+HabYpXqEhFHMnNumN+xRt9xbZpEq02xSm1iou+4Nk2i
 1aZYpTYx\n0XdcmxbfblOsUptYo2+hYbpSzp2DbdvWV/eeVhfMOGKVum6UGr1dNy0zbFfKeifRmmYXTJMm/LLF\nU13iFX2LrKcrZTlxDTOJVl1dMKPEOk6DvtyWv2xs8VTdvKLvuCpdKStNlDXKJFrr+bz1qHPCr0EL\no09iMXRpmrwZ2yLj6EpZXIQ774Tbby8eV1uMeiN2wdjiqS7yir5F1rsM3bD19o247N1G/HJT93lF\n3yLrWYautySxsACZxeOZM8X2QVf2bVn2bpi/UtZii6e6yETfIoPWcq26fusoJYn1fN603H9/ccP4\nbW+D97yneNy2rdg+irZ8uUnDsHTTMqMuQzdqSaLJy95N4sZpk1o8pXEx0bfQKF0p66m3N3XZu0l1\nBTX5y00axZqJPiI2A58Fvqs8/m8y8z19x+wCPgZ8rdx0MDPfO95QtR579hQ3Xgdpa0likjdOm/rl\nJo2iyhX9/wCvz8yFiLgQ+FxEfCIz7+s77t7MvGH8IWoculiS2IhdQdIo1kz0WQydXf6ndGH5U89w\nWq1L10oSXfwrRZqESjX6iLgAOAK8AvijzPzCgMOui4ijwCngVzLz4QHvsxfYCzA7Ozty0Bpdl0oS\nXfwrRZqEoea6iYgZ4BDwzsx8qGf7C4HvlOWd3cAfZuZVq72Xc920UxMn+6p7bhxpmkaZ62boSc0i\n4t3AM5n5+6sc8ygwl5lPrnSMib59nOxLqt9ElhKMiK3llTwRcRHwBuCrfce8NCKifH5N+b5PDROI\nmm2UkbWSmqHKyNhtwGfK+vv9wKcy8+MRsS8i9pXH3AQ8FBEPAu8Hbs665j/WRDjZl9ReVbpujgKv\nHrD9QM/z/cD+8YamJnGyL6m9nOtGlTjZl9ReJnpV4mRfUnuZ6FVJG2aylDSYk5qpsq6NrJU2ChO9\nhtKlkbXSRmHpRpI6ziv6ITRx+L8krcVEX9GwC2tLUlOY6CuYxJJ
 1kjQt1ugrcPi/pDYz0Vfg8H9J\nbWair8Dh/5LazERfgcP/JbWZib4Ch/9LajO7bipy+L+ktjLRD8Hh/5LayNKNJHWcV/Qd4hQNkgYx\n0TfIehK1UzRIWknUtYb33NxcHj58uJbPbqJBiXrTpmqJenERLrvs/Ckals3MOEWD1CURcSQz54b5\nHWv0DdA7l87CAmQWj2fOFNvPnVv9952iQdJqTPQNsN5E7RQNklZjom+A9SZqp2iQtJo1E31EbI6I\nL0bEgxHxcET81oBjIiLeHxHHIuJoRLxmMuF203oTtVM0SFpNlSv6/wFen5lXA68C3hgR1/Ydcz1w\nVfmzF/jAWKPsuPUmaqdokLSaNdsrs2jLKZfZ4MLyp79V50bgw+Wx90XETERsy8zTY422o5YT9Upd\nN1UStVM0SFpJpT76iLgAOAK8AvijzPxC3yGXA4/1vD5ZbjPRVzSORO0UDZIGqZToM/PbwKsiYgY4\nFBE/nJkPDfthEbGXorTD7OzssL/eeSZqSZMwVNdNZp4BPgO8sW/XKeCKntfby239v39HZs5l5tzW\nrVuHjVWSNIIqXTdbyyt5IuIi4A3AV/sOuwu4tey+uRZ42vq8JDVDldLNNuDPyzr984C/zsyPR8Q+\ngMw8ANwN7AaOAc8Ab51QvJKkIVXpujkKvHrA9gM9zxO4bbyhSZLGwZGxktRxJnpJ6jgTvSR1nAuP\n9HGVJkldY6Lv4SpNkrrIRF/qXfxj2UI5w8/8vKs0SWova/QlV2mS1FUm+pKrNEnqKhN9yVWaJHWV\nib7kKk2SuspEX3KVJkldZddND1dpktRFnU30ow58cvEPSV3TyUTvwCdJelbnEr0DnyTpfJ27GevA\nJ0k6X+cSvQOfJOl8nUv0DnySpPN1LtE78EmSzte5RO/AJ0k6X+e6bsCBT5LUq5OJHhz4JEnLOle6\nkSSdb81EHxFXRMRnIuIrEfFwRLxrwDG7Iu
 LpiPhS+fPuyYQrSRpWldLNEvDLmflARFwCHImIT2Xm\nV/qOuzczbxh/iJKk9Vjzij4zT2fmA+XzbwGPAJdPOjBJ0ngMVaOPiB3Aq4EvDNh9XUQcjYhPRMQr\nxxCbJGkMKnfdRMQW4G+BX8zMb/btfgCYzcyFiNgNfBS4asB77AX2AszOzo4ctCSpukpX9BFxIUWS\n/8vMfM60YJn5zcxcKJ/fDVwYEZcOOO6OzJzLzLmtW7euM3RJUhVVum4C+FPgkcz8gxWOeWl5HBFx\nTfm+T40zUEnSaKqUbn4ceAvw5Yj4UrntN4FZgMw8ANwEvD0iloBF4ObMzAnEK0ka0pqJPjM/B8Qa\nx+wH9o8rKEnS+DgyVpI6rlVz3Yy64LckbWStSfQu+C1Jo2lFonfBb0kaXStq9C74LUmja0Wid8Fv\nSRpdKxK9C35L0uhakehd8FuSRteKRO+C35I0ulZ03YALfkvSqFqT6MEFvyVpFK0o3UiSRmeil6SO\nM9FLUseZ6CWp46Ku9UEi4hvA12v58Mm7FHiy7iAayPPyXJ6TwTwvz7V8Tr43M4dai7W2RN9lEXE4\nM+fqjqNpPC/P5TkZzPPyXOs5J5ZuJKnjTPSS1HEm+sm4o+4AGsrz8lyek8E8L8818jmxRi9JHecV\nvSR1nIl+HSLijRHxbxFxLCJ+fcD+n42IoxHx5Yj4fERcXUec07TWOek5bmdELEXETdOMry5VzktE\n7IqIL0XEwxHxz9OOcdoq/Pv57oj4u4h4sDwnb60jzmmKiA9FxBMR8dAK+yMi3l+es6MR8ZpKb5yZ\n/ozwA1wAHAdeDjwfeBD4ob5jrgNeVD6/HvhC3XHXfU56jvs0cDdwU91xN+G8ADPAV4DZ8vWL6467\nAefkN4HfK59vBf4LeH7dsU/4vPwE8BrgoRX27wY+AQRwbdWc4hX96K4BjmXmicz8X+AjwI29B2Tm\n5zPzv8uX9wHbpxzjt
 K15TkrvBP4WeGKawdWoynm5BTiYmf8BkJldPzdVzkkCl0REAFsoEv0Kq0d3\nQ2Z+luK/cyU3Ah/Own3ATERsW+t9TfSjuxx4rOf1yXLbSn6e4pu4y9Y8JxFxOfAzwAemGFfdqvy/\n8n3AiyLinog4EhG3Ti26elQ5J/uBHwQeB74MvCszvzOd8Bpr2LwDtGw++raKiNdRJPrX1h1LA7wP\n+LXM/E5xoabSJuBHgZ8ELgL+JSLuy8x/rzesWv0U8CXg9cCVwKci4t7M/Ga9YbWPiX50p4Arel5v\nL7edJyJ+BPggcH1mPjWl2OpS5ZzMAR8pk/ylwO6IWMrMj04nxFpUOS8ngacy8yxwNiI+C1wNdDXR\nVzknbwV+N4vi9LGI+BrwA8AXpxNiI1XKO/0s3YzufuCqiHhZRDwfuBm4q/eAiJgFDgJv2SBXZmue\nk8x8WWbuyMwdwN8A7+h4kocK5wX4GPDaiNgUES8Afgx4ZMpxTlOVc/IfFH/hEBEvAb4fODHVKJvn\nLuDWsvvmWuDpzDy91i95RT+izFyKiF8A/oGig+BDmflwROwr9x8A3g18D/DH5RXsUnZ4oqaK52TD\nqXJeMvORiPgkcBT4DvDBzBzYYtcFFf9fuR34s4j4MkWXya9lZqdntIyIvwJ2AZdGxEngPcCF8P/n\n5G6KzptjwDMUf/Ws/b5ly44kqaMs3UhSx5noJanjTPSS1HEmeknqOBO9JHWciV6SOs5EL0kdZ6KX\npI77P/o8W9CbuMwEAAAAAElFTkSuQmCC\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7fce59e405d0>"
+       "<matplotlib.figure.Figure at 0x7f3c7ec4bcd0>"
       ]
      },
      "metadata": {},
@@ -142,14 +142,14 @@
    "source": [
     "## Training via SGD\n",
     "\n",
-    "Assuming that we know the training data points are sampled from a line, but we don't know the line slope and offset. The training is then to learn the slop (k) and intercept (b) by minimizing the error, i.e. ||kx+b-y||^2. \n",
+    "Assuming that we know the training data points are sampled from a line, but we don't know the line slope and intercept. The training is then to learn the slop (k) and intercept (b) by minimizing the error, i.e. ||kx+b-y||^2. \n",
     "1. we set the initial values of k and b (could be any values).\n",
     "2. we iteratively update k and b by moving them in the direction of reducing the prediction error, i.e. in the gradient direction. For every iteration, we plot the learned line."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 14,
    "metadata": {
     "collapsed": false
    },
@@ -165,7 +165,7 @@
     "\n",
     "# set hyper-parameters\n",
     "max_iter = 15\n",
-    "alpha = 0.1\n",
+    "alpha = 0.05\n",
     "\n",
     "# init parameters\n",
     "k, b = 2.,0."
@@ -187,7 +187,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 15,
    "metadata": {
     "collapsed": false
    },
@@ -196,28 +196,28 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "8.4457921346\n",
-      "6.52662099202\n",
-      "5.04807383219\n",
-      "3.90897369385\n",
-      "3.03137512207\n",
-      "2.35523325602\n",
-      "1.83428827922\n",
-      "1.43290456136\n",
-      "1.12362861633\n",
-      "0.885310490926\n",
-      "0.701658376058\n",
-      "0.560119374593\n",
-      "0.451024500529\n",
-      "0.366924413045\n",
-      "0.3020805041\n"
+      "loss at iter 0 = 8.897375\n",
+      "loss at iter 1 = 7.806258\n",
+      "loss at iter 2 = 6.850243\n",
+      "loss at iter 3 = 6.012600\n",
+      "loss at iter 4 = 5.278670\n",
+      "loss at iter 5 = 4.635614\n",
+      "loss at iter 6 = 4.072176\n",
+      "loss at iter 7 = 3.578499\n",
+      "loss at iter 8 = 3.145944\n",
+      "loss at iter 9 = 2.766943\n",
+      "loss at iter 10 = 2.434863\n",
+      "loss at iter 11 = 2.143896\n",
+      "loss at iter 12 = 1.888950\n",
+      "loss at iter 13 = 1.665564\n",
+      "loss at iter 14 = 1.469831\n"
      ]
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9wAAAKaCAYAAADMJlHYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XucTVUbwPHfIteSSrlUSleUUqQo6UJKSilkKNdyyXV6\nS5RKKVIKkSSS6ygSoYgi9zDj0khDcr8TxmVmmJn1/vEMzUxjbs7Z+5yzn+/ncz5vZ885s5/e1pq9\nn73Wepax1qKUUkoppZRSSinfyuN2AEoppZRSSimlVCjShFsppZRSSimllPIDTbiVUkoppZRSSik/\n0IRbKaWUUkoppZTyA024lVJKKaWUUkopP9CEWymllFJKKaWU8gNNuJVSSimllFJKKT/QhFsppZRS\nSimllPIDTbiVUkoppZRSSik/0IRbKaWUUkoppZTyA78n3MaYt4wxyelef/j7vEoFCu0DKlTkpi0b\nY+43xkQaY+KNMRuMMc2dilcpX9L2r7xO+4BSuXOeQ+eJBmoCJuV9okPnVSpQaB9QoSLbbdkYUwaY\nAQwFmgC1gBHGmF3W2jn+DVMpv9D2r7xO+4BSOeRUwp1ord3v0LmUCkTaB1SoyElbbg/8ba3tlvI+\nxhhTHQgH9GZLBSNt/8rrtA8olUNOreG+wRiz0xizyRgzzhhT2qHzKhUotA+oUJGTtlwVmJvu2Gyg\nmv/CU8qvtP0rr9M+oFQOOTHCvQxoAcQApYBewAJjTAVr7fGMvmCMKQY8DGwB4h2IUanUCgJlgNnW\n2oM++H056gPa/pXLMmv/Of17XhLYm+7YXuBCY0wBa21CRgFoH1AuO1sf0PavvMDVa4C2fxUAfJ0H\ngLXW0RdQFDgMtMzkM00Aqy99ufxq4kYfQNu/vgLjlWX7J+u2HAO8mu5YHSAJKKDXAH0F+CvTPoC2\nf32F9suVawDa/vUVOC+f5QFOreE+w1p7xBizAbg+k
 49tARg3bhzly5d3JK70wsPDGTBggCvn1vM7\nf/5Dh+C992DePLj77vUsWfIspLRDX8tGH9gC2v71/M6d31r47jv4+GMoXHg9Bw9mr/1noy3vAUqk\nO1YCiLVnGd1LsQW0D+j5nTv/8eNyDZg9G2rVWs/cuVn3AW3/ev5QOv9PP0Hv3nDhhevZs8fVa8AW\n0Pbv5vkDIQanz3/qFPTtC9OmwRNPrGfaNN/mAY4n3MaYC5COOSaTj8UDlC9fnkqVKjkSV3pFixZ1\n7dx6fmfPP3UqtGkjScekSXDttVC5MuCnqUzZ6APa/vX8jp1/1y54/nn48Udo3RqaNYP77gOy0f6z\n0ZaXIqMZqdVOOZ4Z7QN6fsfOHx0NTZvCjh0QEQE33pi9a4C2fz1/KJw/IQFefhmGDIFnnoEOHaBG\nDcC9a4C2f5fPHwgxOHn+Q4egQQNYuBBGj4YKFSTxxod5gBP7cH9ojKlhjLnaGHM38B1wCojw97mV\nyszhw9C8OdSvD3ffLTddDRr4/jzaB1QgslaSiwoVYNUqmDEDRoyACy44+3eyasvGmD7GmNGpvjIM\nuNYY088YU9YY8yLQAPjYb/9iSuXA6NFw551w3nmwciU0bnz2z2r7V6FmyxaoXh2GD4dPP5Vrwvnn\nn/3z2gdUqNm0CapVg9WrYe5cGXTwBydGuK8EJgDFgP3AIqCq9dUidKVyYc4caNUKYmNh1ChJvI3J\n+nu5pH1ABZQDB+DFF2VGxzPPyI1WsWLZ+mpWbbkUcKZirbV2izGmLjAA6AzsAFpba9NXrVXKUSdO\nQKdO8OWX0LKljO4VLpzl17T9q5Dx/fdy73PRRbB4MdxxR7a+pn1AhYxFi+DJJ+GSS2DZMrjhBv+d\ny+8Jt7U2zN/nUCq7jh+HV16Bzz6DmjXlZuuqq/x7Tu0DKpBMnw4vvCDrlb7+Gho1yv53s2rL1tqW\nGRxbAFTOcaBK+UlMDDRsCH/9
 JQ9cW7TI3ve0/atQcOoUvPYa9O8vycaoUZJ0Z4f2ARUqJkyQh61V\nq8KUKdkedMg1p/bhDjphYe7mSHp+359/8WKoWBG++kpGM376yf/JdrAKxf/+Xj9/bKzM6qhXT0Yy\noqNzlmx7TSi2AT2/PGS64w44eRKWL89+su01ofrf3+vn37ED7r8fBg6UIplTpmQ/2faSUP3vH0wx\n+Ov81sI770jdjsaNZcarv5PtlBM7uy1Ydl5AJcBGRkZapc5VfLy13bpZa4y11apZu2FD5p+PjIw8\nvR1AJavtX4WAn3+29qqrrC1SxNqRI61NTj77Z91u/1b7gPKD+HhrO3SwFqwNC7P26NGzf9btPqDt\nX/nD7NnWXnqptVdeae3ixWf/nLZ/Fari461t2lSuA++9d/Z7IX/0AR3hViFt1SqpNjtwIPTpIxUI\n/blGQ6lAcuIEdO4syyeuuw7WrpVRbj/WK1Aq4GzeDPfcA198IcuJxo/PvDigUqEkKQnefBMeeQSq\nVJH7orvvdjsqpZx14IDcC02eLDOdXnvN2Xshx7cFU8oJp07B++/LtJEKFaT67C23uB2VUs5ZtkwK\n4mzbJg+cOnWCPPqIVXnMtGnSD4oVg6VLweWddpRy1J49MnV2/nx4913o3l2vA8p7YmKgbl1ZWjdv\nnlQld5p2OxVy1q+Xp7dvvy0Xl99+02RbeUdCgjy5veceuPhi2eqiSxe9yVLecuoU/O9/UhSqZk2I\nitJkW3nL/Plw++3wxx/w889yXdDrgPKaefOkMFr+/JIPuJFsgybcKoQkJ8OAAXKBOXoUliyB3r2l\nkynlBWvWyJ7C/ftL21+0CMqWdTsqpZy1fTvcdx988olcEyZPhqJF3Y5KKWckJ8sSupo1oXx5mUJ+\n//1uR6WU80aNgtq1ZSnFkiVwzTXuxaIJtwoJmzfDAw/ASy9Bu3ZygbnzTrejUsoZiYlyg1WlilTg\nXL5cRjP
 O00VDymNmzZKHrjt2wIIF0LWr1ixQ3nHwIDz2GPTsKdeAn36CkiXdjkopZyUnS/tv1Upe\nM2e6X41fb8dUULMWRoyQRLtYMZk6ok9ylZfExMga1RUr4NVX4a23oEABt6NSylmJidCrlzx4qlMH\nxoxxaKsXpQLE0qXwzDMQFwc//ggPP+x2REo5Ly5O7okmT4YPP5SlRYHw0FVHuFXQ2rVLnuS2aSMX\nmd9/12RbeUdyskyZvf12+OcfmT7ep48m28p7du+Ghx6Cvn2lD0yfrsm28g5rZU/tGjWgdGmZ4afJ\ntvKivXtltuvMmbLH/MsvB0ayDZpwqyBkLURESPXxqCiYMUNGuYsUcTsypZyxdSvUqiXF0Fq3lhss\nNwqBGGO6G2OSjTEfZ/KZ+1I+k/qVZIwp7mSsKjTNmycPnf78E375xdkqzNr+ldsOH4annpJRvK5d\npVDalVe6HZVSzouOhrvukp1Zfv1VCmYGEk24VVA5cEBGs5s0kUII0dFS6l8pL7AWvvxSqu7/9RfM\nmQODB8P55zsfizGmCtAGWJONj1vgBqBkyquUtXafH8NTIS45WbY5qlVLHr6uXi2F0pyi7V+5LTJS\nKu/Pny/b3334IeTL53ZUSjlv9mzZmaVoUalEfscdbkf0X5pwq6AxfbrcWP38s2xaP3GiThtU3rFn\nDzzxhIxoN2ggSyhq1XInFmPMBcA44HngcDa/tt9au+/0y3/RqVC3fz88+ii8+aYUh5o9G0qUcO78\n2v6Vm6yFoUNl+9NixWSmX716bkellDuGDZOBt+rVZWld6dJuR5QxTbhVwIuNlSqD9epJFeZ166BR\nI7ejUso5kybJw6bffoPvv5dRbpe3OfoUmG6t/SWbnzfAamPMLmPMT8aYu/0YmwphS5bIFPKoKKlI\n/vbbkDev42Fo+1euOHpUZvh16CD1axYtcm+rI11SodyUlCQFk9u3hxdflFkegby0VKuU
 q4D2yy/Q\nsiUcOgQjR8o/B0oBBKX87Z9/5MZq4kQZ1f7sM7j0UndjMsY0Bm4DsjtpazfQFlgJFABeAOYbY+60\n1q72T5Qq1JwuDNW9O1StKn3iiiucj0Pbv3LL77/LdWD3bpnl5+bAQy6WVNwIHD1zQGd5qHNw7Bg0\nbSo1nD75BDp1cjuirGnCrQLSiRNyYzV4sFQcHDUKrr7a7aiUcs7MmfD885CQABMmQOPG7j9sMsZc\nCQwEallrT2XnO9baDcCGVIeWGWOuA8KB5r6PUoWaQ4fkYeu0adCtm6zddmOtqrZ/5ZZRo2QU78Yb\nYeVK+V+3pFtS8UY2v7bfWhvrv6iUV+zcCY8/Dhs3yoy/YKnjpAm3CjjLlkGzZrB9OwwaBB07Old1\nVim3xcbKNKmRI2U/4REj4PLL3Y7qjMrAZUCUMWfS/7xADWNMR6CAtdZm4/csB+7J6kPh4eEUTTd3\nPiwsjLCwsJxFrYLWypXQsCEcOSI3V48/7tvfHxERQURERJpjR44cOdvHtf0rR504IbOcvvpKHsB+\n8gkUKuS735/D9n/amSUVxpjsJNynl1QUBKKBXtbaJbmJV3nb6tWyHXCePLB4Mdx6q9sRZZ8m3Cpg\nJCTIerx+/WSt9vTpULas21Ep5Zxff4XmzeHgQfj8c3jhBfdHtdOZC9yS7thXwHrg/WwmGyBTcndn\n9aEBAwZQqVKlHAWoQsPpwlAvvQQVK8r2X2XK+P48GSWwUVFRVK5cOaOPa/tXjomJkSnkf/8No0fL\nQISv5bD965IK5Zrp0yEsDMqXl4evpUq5HVHOaMKtAsKaNXIxWb8eeveWaYPnaetUHhEXB6+9BgMH\nQo0akly4VQgnM9ba48AfqY8ZY44DB62161Pe9wGusNY2T3nfBdgMrAMKIjdcDwAPORi6CiKxsfKw\n6ZtvZG1e//6QP7/bUWn7V86JiJCiaFdeKcUyK1RwOyLnl1ToDA8
 F8vD1k08gPFz21h471rdboeZy\nlkeOaUqjXJWYCB98AL16QblysHw53Hab21Ep5Zzly+Vh05YtUhSqS5egW0KRflSvFJB6Y478wEfA\n5cAJYC1Q01q7wJnwVDBZs0amkO/ZI9X5GzRwO6IsaftXPhMfL4nFsGFSFGrYMLjgArejOsPRJRU6\nw0MlJkLXrvDpp/DyyzID1tf3Rzmd5ZFbmnAr18TEyPTZFStkRLtXLyhQwO2olHLGyZPwzjvw/vuy\nzdGqVTJVKthYax9M975luvcfAh86GpQKOtbKdncdO8pSoshIuOEGt6PKmrZ/5St//y0Pm9atk0S7\nTRtvLylS3hYbC888A3PmwPDhMuspmGnCrRyXnCzVx7t3lw3qFy2CatXcjkop5/z+u4xqR0fDm29C\njx7uVF1WKhAcPy6FoUaPlpuqQYN8WxhKqUD33XdSif/SS2HpUnkIG2h0SYVyytatUhxt+3aYNQtq\n1XI7onMXXBMXVdDbulU6TteuUnFz9WpNtpV3JCXJlKg77pAR7t9+k4Rbk23lVevXw513yvTxsWNl\nJEOTbeUVJ0/KFPKnnpJ7o8jIwEy2M5HdJRVrgfnICHlNa+18J4JTwWf5crjrLnkQu2RJaCTboCPc\nyiHWyj6SXbvCRRfB3LlQs6bbUSnlnI0boUULGb14+WWZTl6woNtRKeWe8eOhbVu46ipZWnTTTW5H\npJRztm2TKbORkTKro1OngJtCniVdUqF86dtv4bnnpJbT1KlQvLjbEfmOjnArv9u9G+rVg9at4emn\nZTqtJtvKK5KTpeDHbbfB3r2wcKEUCtRkW3lVfDy0awfPPgv168uIhibbykt+/BEqVYJdu+Sa0Llz\n8CXbSvmKtVLPpkEDeOIJ+OWX0Eq2QRNu5WfffCPbWaxYAdOmySh3ul0elApZ27fDww9LIajmzWUJ\nxT1Z1mZVKnT99RfcfTd89ZVMHx8zJqCqMC
 vlV4mJsgXko49C1aoQFSXTZ5XyqpMnZYlpjx7Qs6fM\nfArFAQnHE25jTHdjTLIx5mOnz62c888/skH9M8/Agw9Kcah69dyOyn3a/r3BWikAVaEC/PknzJ4N\nQ4dqYqG8bcoUqFxZqs8uWyYF0nRUT3nF7t2yHvWDD2Q07/vvoVgxt6NSyj2HDkGdOlK/Y/Ro6N07\n6LZFzTZH13AbY6oAbYA1Tp5XOeuHH2T6eEICRERI0q03Vdr+vWLvXtnO5fvvpRL5oEFSt0Aprzp5\nUrZ+HDRIpgyOGKEznZS3/PKLDELkzSv/XKOG2xEp5a5Nm6BuXdi/X+o6hXqfcOw5gjHmAmAc8Dxw\n2KnzKuccPSojFnXrSpXN6Gho3FiTbdD27xXffiuj2kuXymje6NGabCtv27ZNbqSGDoVPPpFlRpps\nK69ITpZRu4cegltvlWVFoZ5YKJWVxYtlSUVyssx28kKfcHLg/lNgurX2FwfPqRzy669yMZk4Udbl\nzZwJl1/udlQBRdt/CDt0SApANWgA994rD5vq13c7KqXcNXOmPHzdswcWLQrOKsxK5db+/TJd9q23\n4I03ZD/hUCsEpVROTZggS01vukkGJ264we2InOFIwm2MaQzcBvRw4nzKOXFxsofk/ffL1i5r1+q6\nvPS0/Ye2WbNkVHvGDFmH9O23elOlvC0xUQrgPPaYFEiLipK9tpXyisWL5WHTqlVSw6NXL5lOrpRX\nWSvboTZtKssr5szxVg0DvyfcxpgrgYFAU2vtKX+fTzln+XK5oHz2GXz0EcybB9dc43ZUgUXbf+g6\nelT2EK5TRxLu6GgZ5fbSw6bsFgE0xtxvjIk0xsQbYzYYY5o7FaNy1q5dsu3jhx9Cv36yO8Ull7gd\nlX9o+1fpWQv9+8N998G118oU8ocecjsqpdyVkCA1bd56C959V3Ysyp/f7aic5UTRtMrAZUCUMWdu\nRfMCNYwxHYEC1lqb0
 RfDw8Mpmm6xV1hYGGFhYf6MV2Xh5ElZk9S3779PcMuXdzuq3ImIiCAiIiLN\nsSNHjvjyFNr+Q9CCBdCiBezbJ2tT27ULzkT7XNp/dosAGmPKADOAoUAToBYwwhizy1o7J8dBq4A1\ndy40aQL58sH8+VC9utsR+Y+2f5XeP//IdWH6dOjeXe6TznO0NLFSgefAAVlit2KFLDt95hm3I3KH\nE38K5gK3pDv2FbAeeP9syQbAgAEDqFSpkh9DUzn1++/ylCo6Gt58U6YN5svndlS5l1ECGxUVReXK\nlX11Cm3/ISQ+Hl5/HQYMkKmyc+bAdde5HVXu5bb9pysC+EYWp2kP/G2t7ZbyPsYYUx0IBzThCAFJ\nSTJq8fbbsu3R+PFw2WVuR+U/2v5VeitWQMOGsuXdjBlSPFYpr4uJkb4QGyuzYKtVczsi9/h9Srm1\n9ri19o/UL+A4cNBau97f51e+kZQk0wPvuANOnYLffpOEO5iTbSdo+w8dkZFQqRIMGSL7qP76a3An\n2+coJ0UAqyIPnlKbDXj40hs69u2DRx6RZLtXL/jxx9BOtlNo+1eATCEfPBjuuQdKlJAZf5psKyWz\nnKpVk6njv/3m7WQbHN6HO5WzjuqpwLNxIzRvLqX7X3lFbqwKFnQ7qqCm7T+InDoF770nI3gVK0oB\nqJtvdjsq96QqAnhHNr9SEtib7the4EJjTAFrbYIv41POWbhQpgcmJclsj5o13Y7I/7T9q9OOHJEi\nsZMmQZcu8iDWa+tSlcrIqFHQpg088IBsBanbo7qUcFtrH3TjvCpnkpOlIFq3blCqlNxc3XOP21EF\nP23/wWPdOllCsWYN9Owp08m9PKsjVRHAWk4UAdQ6BoEpOVmKor3+ulwTJk6Ua0QwykkdA23/6rQ1\na2QbyH37YPJkePpptyPKnXOs49Ed6AMMtNa+lMnn7gc+Am4GtgHvWWtH5zJkFcCSk+VeqW9fSbiH\n
 DPH2PVNqWs5BZWj7dmjVSorgvPiiTCe/4AK3o1LKGUlJsk67Z0+pNLtsmSynULkqArgHKJHuWAkg\nNqvRPa1jEHj++UdmPM2YITU83nknuAtD5bCOgbZ/j7MWRo6Ejh2lWOyPP8L117sdVe6dQx0PLRqo\n0oiLk2vD5MnyQPZ//wvOYrL+EsSXSeUP1sKYMdC5MxQpIvtH1q7tdlRKOWfTJqk0u3ix7DH/7rtQ\nqJDbUQWM3BQBXArUSXesdspxFUR++w0aNYJjx2DmTHj0Ubcjcpy2fw87fhzat4exY2VLyIEDvbm8\nTosGqvT27oV69aSw8pQp8OSTbkcUePxeNE0Fj717pXR/ixbwxBNSiVyTbeUV1sKwYbJOe+dOKfjx\n0UeabKeWnSKAxpg+xpjU0wWHAdcaY/oZY8oaY14EGgCZ7l2sAoe18MkncO+9cPnlUhjKg8m2tn8P\n++MPuPNOSSbGjZNrhReT7RRaNFCdER0Nd90lM2MXLtRk+2w04VaAXEQqVIAlS+C772SUW4scKK/Y\nuRPq1JHRi6ZNZX1ejRpuRxU00o/qlQJKn/mhtVuAushUwtXIyEZra236mzAVgI4ckVHtLl2gQwep\nzn/VVW5HFVC0/Ye4ceMk2TZGtv9q2tTtiNyTqmhgj2x+JdOigb6MTTlv9myp41G0qMyA8t2OuqFH\np5R73KFD0KmT7Jtav748tS1e3O2olHKGtTBhgqzHK1wYfvhBEm+VfemLAFprW2bwmQXI+lcVRFat\nkr2F9++Hb7+Fp55yO6LAo+0/dMXFyYOmL76A556TIrLnn+92VO7RooEqtWHD5N7p4YelcGaRIm5H\nlDvnUjgwJzTh9rDZs6Uw2vHjsiapaVMtcKC8Y/9+aNdOZnc0bSp7qV58sdtRKeU+ayXJ6NwZbrpJ\nrhUe3nNeedDGjfKwKSYGRoyQeyW9P9KigUqKyr7yihSW7dxZlt55qHBmrumUc
 g86dkwSjUcekWnk\n0dHw7LN6MVHeMW2atP0FC2QP1XHjNNlWCuT68NxzUhSqZUtZZqTJtvKSSZNkauyJEzJNtnVrvT9K\ncbpo4G1AxZTXSqSAWsVMigbWTHdMiwYGqWPHZKbToEEySDFoUHAn207S/5s8ZuFCKdu/bx8MHSqJ\nt15IlFccPixTBMeMkYqaw4dDifTP3pXyqHXrZG/h7dtlqYXO3FRecvIkvPyyJBKNGsksjwsvdDuq\nwGGtPQ78kfqYMeY/RQOBK6y1zVM+MgzoYIzpB3yJJN8NAA+WXQxuO3fC44/L7I/p071ZOPNc6Ai3\nR8THy554990nVWbXrJECUZpsK6+YMwduuQWmToWvvpL/1WRbKTF2rBSGypsXVq7UZFt5y5YtUoV/\n2DBJuCdO1GQ7m7RooAesXi2VyPfvh0WLNNnODR3h9oDISJkiuGkTfPCB7C2cN6/bUSnljOPHoVs3\nmdFRsyZ8+aVWWVbqtLg4WYc3YoRsCfnpp1JAUCmvmDEDmjWTSsuLF0OVKm5HFDy0aGDomz5dHsCW\nLw/ffw+lSrkdUXDSEe4QduoU9OolT6UKFYKoKJkupcm28orFi2Vf7VGjYMgQ+OknTbaVOm3DBqha\nVWoYjBwp/USTbeUViYnQvbtMk733XrlH0mRbKWEtDBwITzwBtWvD/PmabJ8LTbhD1Lp1ciP17rvQ\nsycsWwY33+x2VEo5Iz4eXn1VbqKKF5clFB06QB79i6cUAN98I4Wh4uOlMFSrVm5HpJRzdu6EBx+E\n/v3lNXWqFs5U6rTERNnyKzxclqNOnuztLfF8QaeUh5ikJCnV37MnXHutJNp33OF2VEo5Z9UqWUKx\ncSP07auzOpRKLSFB+sSQIdC4sRQODNb9U5XKjTlzoEkTKFAAfv0V7rnH7YiUChyxsfDMM9JPhg+H\nF15wO6LQoOM9IWTTJrj/flmv2qGDrN3WZFt5xalT0Lu3
 FH467zxYsUJGuTXZVkps3gzVq8tN1NCh\nUolck23lFUlJsszu4YdldseqVZpsK5Xa1q3SJ5YuhVmzNNn2JU24Q4C1UlmzYkWZJjV/vmxEX6iQ\n25Ep5Yz16+Ui0auXJNnLl8Ott7odVegxxrQzxqwxxhxJeS0xxjySyefvM8Ykp3slGWOKOxm3kmI3\nlSrBwYOyt7buUpFz2v6D19698Mgj8lD27bfhhx/gssvcjkqpwLF8udR8On5crhG1arkdUWjRhDvI\n7dwJderIzVPTprJWtUYNt6NSyhnJybKEolIlOHJELhLvvgv587sdWcjaDrwKVEKqzv4CTDPGlM/k\nOxa4ASiZ8iplrd3n70CVOHUKXnlFCt/cd5/MfKqs9YJzS9t/EFqwAG6/HX7/XabJvvGG1vNQKrXJ\nk+X6cHop6k03uR1R6NE/OUHKWqksW6GCXER++AE+/1ynByrv2LxZit689BK0bSvTA++6y+2oQpu1\ndqa1dpa1dpO19i9rbU/gGFA1i6/ut9buO/1yIFQF7Nghy4wGDpRZT999p4WhzoW2/+CSnAzvvw8P\nPABly8pewg8+mPX3lPIKa6FfP2jYUB7K/vKLFJpVvqcJdxDavx8aNJDCUI8+CtHRMsqtlBdYC198\nIVPGt2yBefMkodDtjJxljMljjGkMFAaWZvZRYLUxZpcx5idjzN3OROhts2fLqN62bVIY6qWXdAq5\nL2n7D2wHD8p2Xz16yNZfc+ZAyZJuR6VU4Dh5UtZod+8usz4mTICCBd2OKnRplfIgM3UqtGkjScek\nSZJ4K+UVu3bB88/Djz9C69bw8cdw4YVuR+UtxpgKSIJREDgK1LfW/nmWj+8G2gIrgQLAC8B8Y8yd\n1trVTsTrNacLQ733nhSHGjsWLr3U7ahCh7b/wLdsGTRqJGtRf/hBBySUSu/QIckfFi6E0aOhWTO3\nIwp9mnAHicOHoUsXGDNGpn18/jm
 UKOF2VEo5w1qYOFGq7xcoADNmQN26bkflWX8CFYGiQANgjDGm\nRkZJh7V2A7Ah1aFlxpjrgHCgeVYnCg8Pp2jRommOhYWFERYWdg7hh649e6SWx/z5knC/+qquVc1K\nREQEERERaY4dOXIks69o+w9Q1sKgQVKzoEoVuWZcdZXbUQW2XLR/FeT+/lvun/btg7lzte6TUzTh\nDgJz5kCrVrI33ldfyZMonRqovOLAAXjxRZnR0bix7B9crJjbUXmXtTYR+Dvl7SpjzJ1AF6B9Nn/F\nciBbm/EMGDCASpUq5TxID5o/H8LCJOn4+WdZu62yllECGxUVReWzVJbT9h+YDh+WWU9Tpsjyifff\nh3z53I4ONipIAAAgAElEQVQq8OW0/avgtngxPPmk1PJYtgxuuMHtiLxDn30HsOPHZUSvdm0oV07W\najdvrsm28o7p06Uw4M8/w9dfQ0SEJtsBKA8yXTa7bkOm2iofSE6GPn2gZk0oX14KQ2my7Sht/y5b\ntUoq7//8syTcH32kyba/6NZ4wWvCBCkaeNNNss+2JtvO0hHuALV4sSTXu3fLiF779jo1UHnHkSPQ\ntavM6HjsMRg+HEqVcjsqZYzpA/wIbAOKAE2B+4DaKT/vC1xurW2e8r4LsBlYh6x5fQF4AHjI8eBD\n0IEDMuNp1izo2RPeegvy5nU7qtCl7T+wWCvL67p2lQezc+bItkbKr05vjbcRKQjYAtka7zZr7fqz\nfMcCNyI1D+SAVut3jLXwzjtS26NZMyk6q1unOk8T7gATHy83TR9+CFWrSnEofQqlvOTnn2UJxaFD\nMHIktGypszoCSHFgNFAKOAKsBWpba39J+XlJoHSqz+cHPgIuB06kfL6mtXaBYxGHqKVLpTBUfLxc\nJx5+2O2IPEHbf4A4dky2g5wwQZYcffyx1PdQ/mWtnZnuUE9jTHtka7yzJdwgW+PF+i8ylZGEBFlq\nMX48vPsuvP
 aa3k+5RRPuALJqlTx9iomRKYKvvKKjFco7TpyQIk9DhsiU2FGjoEwZt6NSqVlrn8/i\n5y3Tvf8Q+NCvQXmMtbINXrducOedstTiyivdjsobtP0Hhuho2Td4xw5ZZtS4sdsReZMxJg/QiOxv\njVcQiAZ6WWuXOBCipx04APXrw4oVUkDwmWfcjsjbdJJyADh1Cnr3lpun886DyEjZF0+TbeUVS5fC\nbbfBiBGSTPz8sybbSqV3+DA8/bQUheraVQqlabKtvGT0aLlXypcPVq7UZNsNxpgKxpijQAIwlOxt\njfc08BQyJX2+MeY2R4L1qJgYmSUbEyPXCU223ef3hDunBRa8Zv16uPtuePttGd377Te45Ra3o1K+\npH3g7BISZIpT9epwySVS8KlLF61XoFR6kZFQqRLMmwfTpsmyIy0MpbwiLg6efx5atJBq/MuWQdmy\nbkflWae3xrsT+AzZGq9cRh+01m6w1n5hrV1lrV1mrW0NLEG2xlN+MG+eJNv580tOUbWq2xEpcGZK\neW4KLIS85GTZL7JHDxnJW7wY7rrL7aiUn2gfyMCaNbKEYv16Kejx6qsyw0Mp9S9r4bPPIDwcbr1V\nZn9cc43bUSnlnA0boEED+OsvWWrUooXbEXmbU1vj6T70OTdqFLRpI8vyJk2Ciy5yO6LA59Re9H6/\nvT2HAgsha/NmuWAsWCCjeX37QqFCbkel/EX7QFqJifDBB1Ixs1w5WV9UsaLbUSkVeI4elZuniRNl\ni8iPPtLCUMpbvv5aRravuEJnAAYwv2yNp/vQZ19ysuxU0bcvvPACfPqpzoDKLqf2ond0PCkHBRZC\nkrWyRvWll2Qv4XnzdL9Ur/F6H4iJke3uVqyQok+9emkCoVRGfv9dRvV279aCN8p7EhLkXmnoUJlC\n/vnnUKSI21Ep3Rov8MTFyWzBb7+VpUb/+59WIg9EjiTcxpgKSHJRENmHL7MCCyFp1y55Svv
 jj1Ki\n/+OP4cIL3Y5KOcXrfSA5WaqPd+8uRZ4WLYJq1dyOSqnANGqUbHV0441SGOrGG92OSCnnbN4sW96t\nXSvLKdq21QQigOjWeAFk716oV08q90+ZAk8+6XZE6mycGuE+XWChKNAAKbBQI6uEIxTWb1j773TA\nAgVgxgyoW9ftqNRpTq3dIBd9IBTaP8DWrbKX9rx50LEjvP8+nH++21EpcLT9q2w4cUL6yKhR8mB2\n8GBdbqS8Zdo0mQVVrJjsXqEzigOLbo0XOKKj4bHH4ORJ+PVXuOMOtyMKbvuP76d4/+I0vKkh3a/r\n7vPf70jCndsCC8G+fuPAARmlmDRJtq4YMkQuIipwOLV2Izd9INjbv7WSOHTtChdfDHPnQs2abkel\nUnOq/ausxcTIFPK//5atj5o1czsipZxz6pQUkf3oI9k7+MsvteCTUmfz00+yF32ZMjKQV7p0ll9R\nmRiyfAidfuwEQMHzCvrlHG7VBM5pgYWgM326FC44dUqKfjRq5HZEKsCEdB/Ys0fa/4wZMro9YACk\nG6xXSqWIiJDiaKVLw/LlcPPNbkeklHO2b5caBStWyLWiSxedQq7U2QwbJjOhHn5YZtBqbYPcizsV\nR+E+hc+8n9Z4GvXK1iMqKsrn53JiH+4+xph7jTFXG2MqpBRUuA8Y5+9zu+HIEWjVStZUVKkiUz40\n2fY2r/WBb76BChXk5mnaNBmp0GQ7NORmT3ljzP3GmEhjTLwxZoMxprlT8Qa6+HiZBdWkiVwzNNkO\nbNr+fW/WLLj9dtixAxYulBlRmmy742TSSQYtG8ThuMNuh6IykJQkhQTbt5dlqtOmabJ9Ljr+0DFN\nsn3itRPUK1vPb+dzYoQ7qwILIeOXX2Q079AhGDlS/lkvHAqP9IF//pGLwMSJMtVp6FC49FK3o1I+\nlqM95Y0xZYAZwFCgCVALGGGM2WWtneNQzAHp77+ln6xbJyMWbdro9S
 IIaPv3kcRE2aXivffg0Udh\nzBhdcuemAUsH8NJPLwEwqOIgl6NR6R07Bk2byqzBwYNlhFvlTlJyEuf1/jf9LX9pef7o8Iffz+vE\nPtyZFlgIBSdOSPXlwYPhgQdkRK9MGbejUoHCC31g5kyZQh4fDxMmSM0CTR5CTy72lG8P/G2t7Zby\nPsYYUx0IBzybcHz3nTyQvfRSKQx1++1uR6SyQ9u/b+zeLbM6FiyAPn3g1Vchj9/nW6qMRO+L5pbP\n/t3c/OPaH1O9QHUXI1Lp7dwJjz8OGzfKctVHH3U7ouA1Zs0Ymk/9d5LR2nZruaXELZl8w3fcWsMd\nMpYulYqa27fDoEHy1EkvHMorYmNlitPIkVCnjuwzf/nlbkelnJDNPeWrAnPTHZsNDPBjaAHr5El5\nODtgADz9tPQbXW4RnLT95868ebKvdp48MivwvvvcjsibYhNiKfr+v398KpaoyPIXlpM/b36/rF9V\nubN6tVQiNwYWL4Zbb3U7ouBl3k47CmTfso6eX1PDXEpIkIqa1atLBebVq6FzZ022lXfMny9//L/+\nGoYPl1FuTbZDX0odgqNAAjJVNrM95UsCe9Md2wtcaIwJ2aKBGdm2TZKLwYNh4EDZvUKT7eCj7T93\nkpPh3XehVi2p8bFqlSbbbrm438Vpku1FLRexut1q8ufN72JUKr3p0yXHKFlS6ntosp07kbsi0yTb\nkxpOcjzZBh3hzpU1a2TLlvXr4Z13ZDrUefr/pPKIuDh47TVJGmrUkBGLa65xOyrloBzvKZ9bobIX\n/Q8/wHPPwQUXwKJFcNddbkekTsvFXvTa/nPowAF49lnZyuiNN+DNNyFvXrej8p5Rq0bR6vtWZ97f\nfNnNvH7x6/Tr2C/N57Jo/8rPrIVPPoHwcHjiCRg3Ds4/3+2ogtOlH1zKwbiDZ94nv5mMcWm9o6aJ\nOZCYCB98IIU+ypWTKswVK7odlVLOWb5cHjZt2
 QIffyzbt+isDm/J4Z7ye4AS6Y6VAGKttQlZnSvY\n96JPTJTkom9fLQwVqHK6F722/5xZvFhqesTHS0Xy2rXdjsh7DsUd4pIPLklzLO71uDP7Deek/Sv/\nSkyU+6qhQ+GVV+D99/UeKzf2Hd9Hif7//untfk93+tbq62JEmnBnW0yMrNVesQK6dZOku4CnJoQp\nLzt5Enr3lsTh9ttlOmD58m5HpQJEZnvKLwXqpDtWm7OveQ0Zu3bJWtXFi6XfdOumN04hStt/BqyF\njz6SmgVVq8rSoyuucDsq70m/bnVW01k8fP3DLkWjMhMbK/vRz5kjy/ReeMHtiIJTk2+bEBH976yl\noz2OckH+C1yMSGjCnYXkZFlz1707lC4t0wGrVXM7KqWc8/vvMqodHQ1vvSW1C3QJhTcZY/oAPwLb\ngCJAU2RP+dopP+8LXG6tPV0GdBjQwRjTD/gSqIlMww3pOqu//CLJ9nnnyZKLe+91OyLlC9r+s+fQ\nIWjRAr7/Xkbp3nsP8uVzOypvGbpiKB1+6HDm/d2l72Zxq8UuRqQys3WrFEfbvl1mgtSq5XZEwedU\n0inyv/tvHYKqV1ZlaevAebapt82Z2LpVtm6ZNw86dZJRCl1HobwiKQn695cpsTfcAL/9BkE+u1Gd\nu6z2lC8JlD79YWvtFmNMXaQqc2dgB9DaWpu+cnNISE6W5KJXL3jwQRg/HooXdzsq5UPa/rOwcqXs\nL3/kiCTcjz/udkTesv/4for3T/tH52TPk+TLq088AtXy5VCvHhQuDEuWwE03uR1R8Gn2XTPGrh17\n5v1fnf7iukuuczGi/9KEOwPWyl7a4eFw0UUwdy7UrOl2VEo5Z+NGWUKxbBm8/LIUByxY0O2olNuy\n2lPeWtsyg2MLgJBfELh/vxSGmjNHHlK98YYWhgo12v7PzlpZd/rSS1LbZt48KFPG7ai8Jf308V9b\n/EqNq2v49hzGtEPqFZRJ
 ObQOeMdaOyuT79wPfATcjMwOec9aO9qngQWpyZOloObtt8PUqfqANjfc\n3u4ru3RFWTq7d8uTpuefhwYNZDqtJtvKK5KT4dNP4bbbYO9eWLBACgVqsq3U2S1a9G9tg59+khFu\nTbaVV8TGSmG0jh2hTRtYuFCTbSc1+KZBmqTjkesfwb5lfZ5sp9gOvApUQh4k/QJMM8ZkWNXFGFMG\nmAH8jFT3HwSMMMY85I/ggoW1UhCtYUN48klZhqTJds6MWTMmTbv/9NFPAzbZBh3hTuObb6B9e1l3\nN22aJN5KecX27bKE4uefpR988IFsY6SUypi1suyiRw+45x6IiNC96JW3rF0rScPu3XIP1bCh2xF5\nR8yBGMp9Wi7NscQ3Esmbx39P+6y1M9Md6mmMaQ9UBdZn8JX2wN/W2m4p72OMMdWBcGCO3wINYCdP\nwosvwsiR0LMnvP22FtTMqfSj2m5u95Vd+p8YOHhQCtw884ysu1u3TpNt5R3WwujRUKEC/PknzJ4t\nUwM12Vbq7P75R/ZI7dZNll38/LMm28EuITGBvcf2uh1GULBWEoa77oJChSAyUpNtJ5m3TZpk+9tG\n32Lfsn5Ntv8TgzF5jDGNgcKcvfJ+VSB9zYLZgCfLDx86BHXqyBaRo0fL7i+abGff4m2L0yTbNxa7\nEfuWDfhkG3SEmx9+kOnj8fFS4CYsDILgv5tSPrF3L7RrJ2uHnnsOPvlE6hYopc5uxQpo1EgKQ02f\nLtVlVXB77efX6LtI9mld+dhKl6MJbMePywjdmDFy//TJJ5J0K//L1zsficmJaY45PY3WGFMBSbAL\nAkeB+tbaP8/y8ZJA+qdYe4ELjTEFsrMffajYtEmuFXv3Sq2P++5zO6Lgkn5U+/CrhylasKhL0eSc\nZxPuo0eluMeIEfK0acQIHZ1Q3vLtt5JsGwNTpkD9+m5HpFRgsxaGDIH//U/WbM+fD1df7XZU6lz8\nsPE
 H6k6oe+b98MeGB8VoiVvWr5eR7M2bJeF+7jm3I/KGBVsXcN9XaTM0f08fz8SfyHrsosg2d2OM\nMTUySbo9b/FiWat98cWy48sNN7gdUfD4J+4fin1QLM2xQF6rfTaeTLjnz5e1qgcOwOefy+byen1V\nXnHokGxzN348PPUUDBsGl13mdlRKBbbYWBnNmzQJunSRGgf582f9PRWY5m+ZzwOjHzjz/unyT/NN\nw2/IY/IQFRXlYmSBa/x4aNsWrrpKZnno9kXOSD+yN+qJUbS4rYU7wQDW2kTg75S3q4wxdwJdkPXa\n6e0BSqQ7VgKIzWp0Ozw8nKJF045ghoWFERYWlqu43TJhguQcVavK4EaxYll/R4kC7xbgZNLJM++X\nP7+cKldU8ek5IiIiiIiISHPsyJEjPj0HeCzhjouD116DgQOhRg1Zc3fttW5HpZRzZs2C1q1lSuDY\nsdC0qT5sUiora9bIrhX79sk2Lk8/7XZEKrdiE2Ip+n7am/h/uv3DxYUudimiwBcfD127ygDFs8/C\nZ59pjQ8npE+0IWBH9vIABc7ys6VAnXTHanP2Nd9nDBgwgEqVKp1jaO6xVrZU7dULmjWDL77Qh7TZ\nZa0lzztpF7f7q+1n9BAnKiqKypV9u5ujZ5bqL18uUwA/+ww+/lj2iNRkW3nFsWMyfbxOHSmOFh0t\nN06abKvTNv2zicrDKxO1W0f3TrNWlhtVrSoJRmSkJtvBzLxt0iTbIx4fgX3LarKdiU2b4O674auv\nYPhwmUauybZ/zfpr1n+S7aQ3kwIi2TbG9DHG3GuMudoYU8EY0xe4DxiX8vO+xpjUe2wPA641xvQz\nxpQ1xryITEP/2PnonZOQIMstevWCd9+V/qPJdva8OPPFNMn2B7U+CIi2f65CfoT75EmpAti377/7\npJbPcLdApULTggXQooUU6vjsM5kSqIm2Om3dvnVU+KzCmfebC292MZrAcfy4bI83
 dqz0mYEDdT/6\nYPX8988zctXIM++rXF6F5S8sdzGi4DBlikyFLV4cli2D225zO6LQltGo3uSGk3n6poB6ylccGA2U\nAo4Aa4Ha1tpfUn5eEih9+sPW2i3GmLrAAKAzsANoba1NX7k8ZBw4IDVxVqyAiRNlBySVPekfNIVC\non1aSCfcv/8u0ziio+HNN2U6+Xkh/W+s1L/i4+H112HAABmhmDMHrrvO7ahUoBi2chjtZ6Zdchfd\nPpqEHQn0oU+G3zHG9ADqA+WAOGAJ8Kq1dsPZzmOMuQ+Yl+6wBUpZa/fl/t/Af/74QwpDbd0K48bJ\n0gsVfOZsmkPtcbXTHEt6M4k8JneT+7zS/k+elO3uBg2SpRQjR8KFF7odVWgLlunj1trns/h5ywyO\nLQB8Oz83QMXEQN26UvNj3jyo5snNz3JuxoYZPB7x+Jn3t5e8nai2oTXbLiTTz6Qk6N9fkuwbbpCK\ngEG8DESpHFu5Uh42bdoE/fpJRf68rhQzVYHmvQXv0XNezzTH/ur0F9ddIk9jonZkepG7FxgMrESu\nH32Bn4wx5a21cZl8zwI3IlvIyIEATTbGj4c2baBMGRmh0BlRwedQ3CEu+eCSNMe2dNnC1Redc0n5\nkG//27bJlndRUTB4MHTooDOi/GnSukk0mtwozbHkN5O1Un4QmjdPCtFefrnkHddc43ZEwSH9w6a4\n1+MoeF7oTScLuYR740Zo3lymP738shQs0GmAyitOnYL33pM1QxUryk3TzTe7HZUKBF1ndWXQb4PS\nHFvaeilVr6ya7d9hrX009XtjTAtgHzJ6sSiLr++31sZm+2QOi4uTwlDDh8vau88+g/PPdzsqlVPp\nb96+euIrmt/W3Ce/O5TbP8DMmfKgtkgRWLQI7rzT7YhCV7JNJu87aZ+Cz352NrWvq32Wb6hANmqU\nPKh94AH45hu46CK3Iwp8O2J3UHpA6TTHAnFWh6+ETMKdnCw
 3SN26QalSsm61enW3o1LKOevWyc3S\nmjUylbxnT8iXz+2olNvCvg1jYvTENMei20dzc3GfPIm5CBm9+yeLzxlgtTGmIBAN9LLWLvFFAL6w\ncaNMIY+JkSJprVrpqF6wqf91fab+OfXM++pXVWdhy4X+Pm1ItP/ERHjjDXj/fXjsMRg9Gi65JOvv\nqdwJlunjKmvJydJ3+vSRhHvIEL3vyo70feDPDn9S9tKyLkXjjJBIuLdvlxukuXOlyM0HH2gVTeUd\nSUmyTrtnT6m8v2wZ3HGH21Eptz0w+gHmb5mf5tjmLpspc1EZn/x+I3MeBwKLrLV/ZPLR3UBbZBpu\nAeAFYL4x5k5r7WqfBHMOJk+W60fJktJ3KlZ0OyKVE0OWD6HTj53SHDuXddrZFSrtf9cuaNwYliyR\n5Ucvvwx5PLN/jbNGrRpFq+9bpTmmiXbwiouTGbWTJ8sy1pde0ge1WUlKTuK83mlTT6/0gaBOuK2V\nLSo6d5aCHrNnQ22djaM8ZNMmqUC+eDGEh8tU8kKF3I5KuanskLJsOJi2htPel/dS/Pzivj7VUOAm\n4J7MPpRSUCp1QMuMMdcB4YBv5vrmwsmT8Mor8Mknsmb1iy+0MFQw2Rm7kysHXJnmWOpaBA4I6vYP\nMkjRpImMyM2bB/fe62Y0oSsxOZF8vdMOey5quYh7rsq06agAtncv1KsnxZmnTIEnn3Q7osBXL6Ie\n0zdMP/Pel8t9gkHQJtx798pWLdOmyTTaQYN0zYTyDmvh889lNOKyy2D+fKhRw+2olJsu6HMBx08d\nT3Ps8KuHKVqw6Fm+kXvGmCHAo8C91trdufgVy8kiUQEIDw+naNG08YeFhREWFpaLU/5ryxbZqmXV\nKi0MFWwy2jqpR/Ue9KmZcWX9rERERBAREZHm2JEjRzL9TrC3/6QkeTj79tvw0EOy9V1xnz+PU/Df\nqbMF8hYgvme8S9H8V27av9dFR8vSi5
 MnZfmqzijMWihv95VdQZlwf/sttGsnN0hTpsh+d0p5xc6d\n0Lq1zOho00amMhUp4nZUyg0ZJR8AJ147QaF8/pnqkJJsPAHcZ63dlstfcxsy1TZTAwYMoJKPt5iY\nPl2mARYtKjNDqlTx6a9XfuSPta8ZJbBRUVFUrpzxLkbB3v737ZNt7n7+GXr1knofuoOF7w1cNpDw\n2eFpjgVikpHT9u91P/0k9T7KlIEZM6B06Sy/4mlfrf6KltP+3SnuibJPMLXx1Ey+Ebr8nnDnZt/K\nszl0CDp1km1b6teXEb7LLvNxwEr5mK/6gLXS9jt1gsKF4ccf4ZFH/BCwCngnk05S4N0C/zl+6o1T\nnJfHf3/WjTFDgTCgHnDcGFMi5UdHrLXxKZ/pA1xhrW2e8r4LsBlYBxRE1rA+ADzkt0AzcOqU1Dn4\n4AOZCvjVV3DxxU5GoHKr7fS2DI8anuaYE+u00wvm9g+wcKGs105MhDlzoGZNpyMIfQmJCRR8L+3W\nOFFtori91O0uRaR8Zdgw6NgRHn4YJk7UgY6spH9AmvhGInnzePfpnhMj3LndtzKN2bOlsM3x4zL9\nqWlTnQKogsY594H9+2VWx5QpsuZuyBBNFrwoNiGWou//d4q4g8lHO6Qq8/x0x1sCY1L+uRSQ+rl/\nfuAj4HLgBLAWqGmtXeDXSFPZuVMSjaVL4cMP4X//0+tHMFi/fz03Db0pzbGVL6yk8uWujb4FZftP\nTpZ2//rrcM89kiyUKuXU2b0jfYJR+sLSbAvP7SQIFSiSkqTex4ABMuDx8cdwXlDOD3ZGzIEYyn1a\nLs2xQJzd4TS/N5lz3LeSY8dknernn0tBtJEj4cors/qWUoHjXPvA1KkyddxamDQJGjTwT5wqcO0+\nupvLP778P8eT30zGOJg5WmuzzOqttS3Tvf8Q+NBvQWVhzhx5QJs/P/z6qyQcKrBltFSiwU0NmNRw\nkksRiWBs///8I
 3VuZs6EHj3gnXc0WfC1t+e/Ta9fe6U5pglGaDh2TK4fM2ZIgc1OnbL+jpelf+i0\nI3wHV1x4hUvRBBY3/uxmd99KoqJkrcSePbLHdtu2OiqhQkK2+sDRo7LWdMwYmQI7fDiUKJHZN1So\nyehJMejNXHYkJUly0bu3FIYaN06XIAUD3aPYd5Yvl3uoY8ck4X700ay/o7Lv+MnjXNA37R606zus\np9yl//2brYLPzp1y77VhA3z/PdSt63ZEgSs+MZ5C76WtG6N/t9NyNOHOwb6VALzwAlSvLkUKrnNs\npw+l/CcnfaBRI4iPl7WmzZrpwyYvWbp9KXd/efd/jusFLHv27pWlF/PnS9L92mu6t3Cga/ZdM8au\nHZvmmNMzOEKFtVJ9/+WXoXJl+PpruOoqt6MKLekfDFUqVYnINpEuRaN8bdUqePxxuW4sXgy33up2\nRIGr0ueVWLVn1Zn308Om89iNj7kYUWByeoQ7W/tWnta5s6yV0AqayimH4w/7+xTZ7gNXXw2TJ+uN\nkpd8H/M9T0x84j/HNdHOvgULZL12crJMJ3/wQbcjUplZu3ctFYdVTHNsTbs13FpC73Bz48gR2cXi\n22+ha1fo10+WUyjfuHnozfyxP+2zci/9fc5NEVhjzH3AvHSHLVDKWrvPX7Hm1vTpEBYG5crJP2u9\ng7PT7b6yz7GEOzf7Vq5eHU79+r7fg1Kp0yIiIpgwYQJr965l2xEpblLtsmp+OVdO+0DBguF07Kjt\n3wuGRw6n7Yy2/znu74tXKO3BmpwsFchff132pI+IgJIl3Y5KnU1G67SbVWzG6CdHuxRR8Fu1SqaQ\n798vCfdTT7kdUejYe2wvJT9K+wfFo9PHc1sE1gI3AkfPHAiwZNtaWacdHg5PPCHLkM4/3+2oAlPH\nHzry6YpPz7x/8Y4X+bTup5l8QzmScOd230p/7EGp1GlbDm+hyYYmcMe/xzpU6UCrkq18vgdlbv
 rA\nwIHa/kPdG7+8wbsL3/3PcaeeEofKHqwHD8qyix9+kIS7Vy8tDBXIdJ22b1kLI0ZIQaebbpJdXXQZ\nnu9oe/3XORaB3W+tjfVTaOckMRG6dIGhQ6Ui+fvv6zKks0nfH3TpT/Y4sQ93lvtWKuWkmRtm8lhE\n2vUlH9f+mPBq4YAkHL6kfUCl13xqc8asGZPm2LUXX8umzptciih4LVsm9Q5OnJCEu04dtyNSZ9Nw\nUkMm/zE5zTG9WTs3x45B+/YyGteunWxdVLBg1t9TWdNEO1uyWwjZAKuNMQWBaKCXtXaJv4PLjthY\neOYZmDtXitO+8ILbEQWmqX9Opf7X9dMc0/6QfU6MAWRn30ql/O7VOa/ywZIP0hzrfGdnBtUZ5O9T\nax9QANw76l4WbUs7CPDwdQ8z69lZLkUUvKyFQYNkNKJKFSkMVbp01t9TzovcFckdX9yR5tgfL/5B\n+cvKuxRRaFi3TqaQb9sG48dLoUB17jYc3EDZIWXTHuu4gRuK3eBSRIEpB0VgdwNtkWnoBYAXgPnG\nmDuttav9H+nZbd0Kjz0G27fDjz9CrVpuRhO40j982vnSTi4v8t+tStXZObEPt07KUK4qN6QcMQdj\n0s2XL64AACAASURBVBz7ttG3PFXemQVu2gdU8Q+Ls//E/jTH2lVux2ePfeZSRMHt8GEpDDVlCvzv\nf9C3L+TL53ZUKr1km0zed9JWPW1buS3DHhvmUkShY+xYGdG+5hpYuVIKPKlzp6PaOZKtIrApBdVS\nF1VbZoy5DggHmp/te+Hh4RQt6r86NsuXy7ZfhQrBkiWyHEOlte/4Pkr0T7sfbaj1B6dq2egqNxWS\nEhITKPjef+fVbey0kesvud6FiJQXZXTz1ufBPvS4t4cL0YSGqCgZ1Tt4EL77Dp580u2IVEY0cfGP\nuDjZwWXECGjRAj79FAoXdjuq4KftNWdyUwg5neVkkaj7s47Tt9/Cs8/C7
 bfD1KlQvLhfThPU0veJ\niKcjaFyhsUvR+I9TtWyCNuHetm0bBw4ccDsM5ZJLL72UqzLYL2vbkW1cPfDq/xw/8doJCuUr5ERo\nQUH7j39V/vy/f6h73d+Lx8s+Dvi+TkBOna3/BDJr4fPPpbBNhQqy5de11+b+92kf8I+us7qycOvC\nNMdWtlmJMcb1dp9aMPaBjRuhQQPYsAFGjoRWrXL/u7T9i/X71/PslGfTHJveZDqXF7k8oNqrr51L\n+89tIeR0bkOmmjvKWtnNont3ePzxbXTvfoAdO2DHDqcjCVzWWu4YnnYJUGTbSDjp/r2Lr7jy999a\nG3AvoBJgIyMjbUa2bt1qCxcubJF1sfry4Ktw4cJ269atZ9rE5HWTLb1I8yrZv2SG7ScrkZGRp89T\nKRDb/7nS/qOv9P0ntczaP9ADGZmIBfYC3wE3ZqNN3w9EAvHI1MLmOekDR49a26SJtWDtiy9aGxen\nfUBfzvcBXGr/1lr79dfWFili7Y03WrtmjbZ/fTnf/lPa5lDgELI9WIlUr4KpPtMHGJ3qfRekaOx1\nwM3Iuu9TwP3Zbf++kJBgbevWch3p3Fn7gJdfmbX/rPpAbl9BOcJ94MABTpw4wbhx4yhfXouueM36\n9et59tlnOXDgAM/MeYZlO5al+XmHKh0Y8ugQl6ILfNp/vC11/8nFE94c78FqjCkDzEBu1JoAtYAR\nxphd1to5WZ0wOlqmkO/YIXtrN/bBjDbtA952Dn3A8fafkAAvvwxDhkgl5S++gCJFchLyf2n797Zz\nvAZkpwhsKSB1Ccv8wEfA5cAJYC1Q01q7IKcnz61Dh2R2yMKFMHo0VKhwgE8+0T7gRefY/nMtKBPu\n08qXL6/7FHtY5c8ry5/vFIPrDKbjnR3dCyjIaP9ROWVztwdre+Bva223lPcxxpjqSMGcTBOO6dOh\nXz+4/nopDFW2bGafzjntAyonnG7/O3dC27awdq3s
 D9yuHfhyBzVt/yqnbDaKwFprW6Z7/yHwod+C\nysKmTVC3LuzfL1t/1aghtUBA+4ByTlAn3EoBLGm1hGqlq7kdhlJelJ09WKsCc9Mdmw0MyOqX9+ol\n61QHD9bCUCog+bX9N2kCl10mFZR9XL9HKU9YtEgKa15yCSxbBjfozm7KJbpdkQpac5vNxb5lNdlW\nygU52IO1JLLeNbW9wIXGmAKZneOtt6Q4lCbbKtA40f4rV4bISE22lcqNCROgZk24+WZYulSTbeUu\nHeFWQeviQhe7HYJSXpatPVjPxbx54URF+W8fVqXOYQ9Wv7f/5ORwmjfX9q/8x6k9iJ1kLfTuLQ9s\nmzWTugf587sdlfI6TbiVUkrlSA73YN2DVLFNrQQQa61NyOyL/tyHVSnI3R6sTrX/gQO1/Sv/cmoP\nYqckJMDzz8O4cfDuu/Daa76te6BUbumUcg8aO3Ys5cuXJ3/+/FxyySVnjltrueWWW+jbt2+Of2eP\nHj2oWrWqL8NUKiB5vf+k2oP1AZu9PViXAjXTHaudclwFIS/3AW3/ysvtP5AdOAC1asGkSTBxIrz+\nuibb/qDtP3c04faYmJgYWrZsyQ033MCIESMYPnz4mZ9NmDCBHTt20KlTpxz/3q5du7JmzRpmzJjh\ny3CVCihe7z/GmKFAU2R7o+PGmBIpr4KpPtPHGDM61deGAdcaY/oZY8oaY14EGgAfOxq88gkv9wFt\n/8rL7T+QxcRA1aryv/PmyRZ6yve0/eeeTin3mPnz52OtZdCgQVxzzTVpfta/f3/CwsK44IILcvx7\nS5QowRNPPEH//v157LHHfBWuUgFF+0/O92C11m4xxtRFqjJ3BnYAra216Ss3qyDg8T6g7d/jPN7+\nA9L8+fDUU1CyJPz2G6T7z6J8SNt/7ukIt8fs3SvFUi+88MI0x1etWsWaNWto1KhRrn93o0aNWLRo\nEVu2bDmXEJUKWF7vP9baPNb
 avBm8xqT6TEtr7YPpvrfAWlvZWlvIWnuDtXas89ErX/ByH9D2r7zc\n/gPRqFHw0ENwxx2yfZ4m2/6l7T/3NOEOMPPnzydPnjxMmzbtPz+bMGECefLk4bfffsvV777mmmvo\n1asXAJdddhl58uThnXfeAWDq1KkUKFCAe++998zn4+PjKV++POXLlych4d/aLocOHaJUqVJUr14d\na+2Z47Vq1cJam2HsSjlB+4/yOu0Dysu0/XtDcjL06AGtWslr5ky46CK3o3Kftv/ApQl3gLn//vsp\nXbo048eP/8/Pxo8fz/XXX89dd93FyZMnOXjwYLZepw0aNIj69esD8PnnnzNu3DieeuopAJYuXUqF\nChXImzfvmc8XLFiQ0aNH89dff/H666+fOf7iiy9y9OhRRo8ejUlVkeLCCy/kuuuuY/HixT7//0Wp\n7ND+o7xO+4DyMm3/oS8uDho3hn794MMPYdgwyJfP7agCg7b/AGatDbgXUAmwkZGRNiORkZE2s58H\nu9dee80WKlTIxsbGnjm2f/9+my9fPvvOO+9Ya6396quvrDEmy1eePHnS/O5evXrZPHny2IMHD6Y5\nXrp0aduwYcOzxnPeeefZRYsW2UmTJlljjB08eHCGn3344YftzTfffC7/+lny93//078fqGQDsP37\n6t9P+4/2n8x+7lb7t9oHzpn2gcwFeh/Q9n9utP1nLpjb/5491t55p7WFC1v73Xf++/8gmGn7z1x2\n/tv7ow94omjaiRPw55/+PUe5clC4sG9+V7Nmzejbty+TJ0+mZcuWAEycOJGkpCSaNm0KwCOPPMLc\nub6ruXLw4EEuvvjiDH/Wq1cvZs6cSbNmzTh27BgPPPAAHTt2zPCzF198MatXr/ZZXMp92n+ypv0n\ndDnR/kH7wGnaBwKPXgOypu3f/6KjoW5dOHUKfv1V1m07IdiuAdr+A5MnEu4//4TKlf17jshIqFTJ\nN7+rbN
 myVKlShfHjx5/pLBMmTKBq1apce+21gFT0K1GihG9OmMJam+HxfPnyMXLkSKpUqUKhQoX4\n8ssvM/0dRjc+DCnaf7JH+09ocqL9g/aB1L9D+0Bg0WtA9nih/RtjegD1gXJAHLAEeNVauyGL790P\nfATcDGwD3rPWjs7sO6nNng0NG0pRtBkzoHTprL/jK8F2DdD2H5g8kXCXKycN2d/n8KVmzZrRtWtX\ndu3aRVxcHMuWLWPo0KFnfh4fH8+RI0ey9buy06mKFSvGoUOHzvrzWbNmnTnvxo0bufrqqzP83KFD\nh7j00kuzFZcKDtp/tP94mRPt//R5fEn7gPIVvQZo+0/lXmAwsBLJIfoCPxljyltr4zL6gjGmDDAD\nGIrsYV8LGGGM2WWtnZPVCYcNg44d4eGHYeJEKFLEN/8i2RWM1wBt/4HHEwl34cK+e3LqlMaNG/PS\nSy8RERHBiRMnyJ8/f5py+19//fWZJ1eZMcaQlJSU5efKlSvH5s2bM/zZ2rVr6d27N61atWL16tU8\n//zz/P777xTJ4K/e5s2bue2227I8nwoe2n+0/3hZMLZ/0D6gfCcY+4C2f/+w1j6a+r0xpgWwD6gM\nLDrL19oDf1tru6W8jzHGVAfCgbMm3ElJ8NJLMGAAdO4MH30E57mQtWj71/bvC55IuINRsWLFqFOn\nDmPHjiU+Pp5HHnmESy655MzPfb3+olq1avTr149Tp06RL1W5x8TERFq0aMGVV17JoEGD+Pvvv6lS\npQrh4eGMGDEize+IjY1l06ZNdOjQwWdxKZUb2n+U12kfUF6m7d8xFyHFpf7J5DNVgfT/Z88GBmT2\ni19+GRYtgsGD/8/encfZVP4BHP88IztNIVs/RWmvH0ZFhciSFktlm5Slkkg/kUqSLaHIUpEUQ8Uo\nSwlZa5AtNUMiWykJWSJjHWbm+f3xjGvmmu3eufecc+/5vl+v++KcOfc+35n5fuee557
 nPI+5wi1y\nT/LfgQI1+1ogH7h8lvJzZs2a5ZklcMaMGQF5zaxmGIyPj9cRERF6yZIlGfb369dP58uXTy9fvtyz\n74033tBKKf31119nOHbmzJk6IiJC79y5MyCxZkVmKQ/M9yf14zs31I/d+a+lBgJGaiBzTq8Byf/A\nkPzPXKDyH1CYoeLLczhuG+Y+7/T77gNSgIKZHB8F6MKF4/X8+fb8DMKB5H/m7JqlXNbhdrAmTZpw\n6aWXEhkZSdOmTYPaVlRUFLfccguff/65Z9/69esZNmwYzz33HHXq1PHs7927N7fddhtPP/00iYmJ\nnv0zZ86kVq1aVKpUKaixCpEbUj+Bp5SqrZT6Sim1RymVqpTK9gerlLo77bj0jxSlVGmrYnYzqYHA\nkxoIHZL/QTcOuBFoE4wXv/HGHowf35SmTc8/YmNjg9FUWJL8z53Y2NgMOda0aVN69OgR+IYC1XMP\n5AO5wq211jo5OVmXLl1ad+rUyZL2PvnkEx0ZGamPHj3q83P37dunCxcurOfOnRuEyDKSK9yB+f6k\nfgIrXOonu/wHGgODgGaYqxNNvY/xOv7utOOuBkqfe2T3HC01EDBSA5lzeg1I/geG5H/mAnGFG3gP\n2AVckdUx6Y5dDoz02tcBOJLF8UHN/9z8DMKB5H/m5Aq3uMAXX3zBoUOHaNeunSXttW3bliuuuIKx\nY8f6/NwxY8ZQpUoVHnzwwSBEJoTvpH4CT2u9UGvdT2s9BzOcMLcOaq0PnHsEKz6RkdRA4EkNhA7J\n/+BQSr2H+cCpntb6z1w8ZQ1Q32tfo7T9Ikgk/51FJk1zoHXr1vHTTz8xePBgoqKiqFWrliXtKqXY\nuHGjX88dOnRogKMRwj9SP46jgA1KqULAJmCA1nq1zTGFNakBx5EasJDkf/AopcYB0UBT4IRS6tya\nUUe11qfTjhkCXK61bp/2tfHAs0qpN4FJmM53CyDDjOciMCT/nc
 mSK9y+3vPkdu+//z7PPvssZcuW\nZcqUKXaHI/JI8t9aUj+Osg/oDDwCPAzsBpYppcJz3Q+HkBpwFKkBi0n+B9UzwMXAMmBvukerdMeU\nAyqc29Ba/wE8gFl/ewNmObAntdaBmyZbeEj+O5NVV7iLYopsIjDbojZDVkxMDDExMXaHIQJH8t9C\nUj/OobXeDmxPt2utUupqzAlX+8yfdV6PHj2IjIzMsC86Opro6OiAxhlupAZyLzY29oKJmI4ePRqw\n189LDUj++0fyP/d8zX+tdY4X6rTWFyzwrLVegVmrWwSZ5L8zWdLh1lovBBYCKKV8uedJiJAn+S9E\nBuuAu3Jz4KhRo4iKigpyOMLNMuvAJiQkUL16UPsGuaoByX8RbDblvxCuI5OmCSGEsFJVzDBbIdxK\nakAIIVxEJk0TQgiRK0qpokBlzs/OfJVSqgpwWGu9Wyk1FCh/brIcpVR34HdgM1AI6ATUAxpaHrwQ\nASA1IIQQwleO7nBndf/SddddZ1NEItwE+/69vJD790Sw+ZH/twJxmPUpNfB22v4pwBNAWdJNlgMU\nSDumPHAS2AjUT7ufT4hQJDUghBDCJ47ucGd1/1JCQoIN0Yhw5OT7l+T+PRFsvua/1no52dyK5D1Z\njtZ6ODA875EK4QxSA0IIIXwl93ALIYQQQgghhBBBYMkV7pzuebIiBiHsIvkvhBBCCCGEO1l1hftW\nYD0Qz/l7nhKAgRa1L9LUrVuX//73v7bGsHz5ciIiIpg92zVLUkv+hwmpH+F2UgPCzST/hZtJ/vvP\nqnW4s73nSVjHKctAOyUOK0j+hw+n5K1T4hDu45Tcc0ocwl2ckndOiUO4i1Pyzilx+EI6AcIWWmu7\nQxAiZEn9CLeTGhBuJvkv3CwU81863CKgJk+eTESEpJUQ/pD6EW4nNSDcTPJfuFk45394flchbNmy\nZURERDBnzpwLvjZt2jQiIiL4/vvvA9rm4
 sWLKVq0KG3btiU1NdWT8JMnT85w3JAhQ4iIiGDhwoVZ\nvpZSKldDPZRSpKSk0KdPH8qVK0exYsVo1qwZf/31V16/HeFiUj9SP24nNSA14GaS/5L/bib579z8\nd/Q63G5Ut25dKlSowNSpU2nWrFmGr02dOpXKlStTo0YNzpw5w7Fjx3L1miVLlszya/PmzaNly5ZE\nR0czceJElFJ06NCB2bNn07NnTxo2bMjll1/Ozz//zKBBg+jUqRONGzfO0/cIZjjI4MGDiYiIoHfv\n3hw4cIBRo0bRsGFDNmzYQMGCBfPchnAfqR+pH7eTGpAacDPJ/+Dmv1KqNvAiUB0oBzTXWn+VzfF3\nA3He4QPltNYHghKki0n+O/jvv9bacQ8gCtDx8fE6M/Hx8Tq7r4e6Pn366MKFC+vExETPvoMHD+r8\n+fPrQYMGaa21njx5slZK5fiIiIjI8Np169bVt9xyi9Za61mzZukCBQroZ5555oIY/v77b12yZEl9\n77336jNnzuhq1arpSpUq6WPHjmUb++TJky9o09uyZcu0UkpXqFBBnzhxwrN/xowZWiml33333Wyf\nH+zf/7nXB6K0A/M/UN+f1I/UT3Zftyv/tdRAnkkNhHYNBDv/Zy2dJfkv+e9X/gONgUFAMyAFaOp9\njNfxd6cddzVQ+twjh+cENf9z8zMIZZL/ee9DBOM9wBVXuE+ePcnWQ1uD2sb1pa6nSP4iAXmtdu3a\nMXToUGbOnEnHjh0BmD59OikpKbRt2xaAxo0bs3TpUr/bmD59Ou3ataNr166MHj36gq+XKVOGsWPH\nEh0dTe3atdm4cSNLly6lWLFiGY77999/SUlJ8Wyf+8Tsn3/+yXBckSJFKFy4cIZ97du3p0iR8z+z\nFi1aUK5cOb7++mu6devm9/cmAkvq50JurR9fr26kPacuZim8m4A/gTe01lOCEmAQWJH/IDVwjtRA\ncKmBCvb69hx5D7iQ
 W/Nfa70QWAigfJsq+qDWOjEoQQVZqL0HSP47sw/hig731kNbqT6helDbiH86\nnqhyUQF5reuuu47bbruNqVOneopl2rRp1KxZk6uuugowyVymTBm/Xn/nzp089thjtGrVKtNCOad1\n69Z8+umnzJ8/n86dO1O3bt0LjqlWrRq7du26YP9ll13m+b9Siv79+9OvX78Mx1SuXPmC51WuXJk/\n/vgj99+MCDqpn4xcXj9FgQ3ARCDHRTCVUhWBecA44FGgAfCRUmqv1npJ8MIMHCvyH6QGvEkNBNY9\nU+4h7g/vkb25I+8BGbk8//2hgA1KqULAJmCA1nq1zTHlWqi9B0j+/5H7b8ZCruhwX1/qeuKfjg96\nG4HUrl07nn/+efbu3cupU6dYu3Yt48aN83z99OnTHD16NFev5V1U5cuX93wKFB8fT/Xqmf8hOXz4\nMD/++CNKKX755ZdMj5k2bRqnTp3ybC9atIgRI0awdOnSc0ODADxFLuz3x5E/fDpe6kfq5xw/rm50\nAXZqrV9K296mlKoF9ABCosNtRf6fayeQpAaCI9Rq4NfDv3LNu9dk2LfmyTXcMeGOXL+GvAdI/ufB\nPqAz8CNQEOgELFNK3a613mBrZLkUiu8Bkv/O44oOd5H8RQL2yalV2rRpQ8+ePYmNjeXkyZMUKFCA\nVq1aeb7+2WefeT65ys65mfzSK1SoEPPmzaNevXo0btyYFStWcMMNN1zw3K5du3L8+HGGDh1K7969\nGT16NM8//3yGY+64I+Ob9u7duwGoV69ejrHt2LHjgn2//vorVapUyfG5wnff//U9NSfW9Hk4odSP\n1E8e1AS8x60tAkbZEItfQjH/QWrAQWyrATUw4+cBn7X4jFY3tSIhIcGn1wnFGpD8dwat9XZge7pd\na5VSV2M+cGqf3XN79OhBZGRkhn3R0dFER0cHPM7sSP6Hd/7HxsYSGxubYV9uP4zwhSs63KGoZMmS\
 n3HfffXzyySecPn2axo0bU6JECc/X83r/RfHixVm0aBF16tShQYMGrFy5kkqVKnm+PnPmTD7//HPe\ne+89unbtyoYNG+jbty8PPvhgpsM4/PHxxx/Tu3dvzz0dM2bMYN++fbzyyisBeX1hrN69mrsm3WV3\nGJaS+nGMssB+r337gYuVUgW11kk2xOQKUgOOYXkNvLHiDfrG9c2wT/fXWRwdniT/HW0dkONJyahR\no4iKCq2OrlNI/udeZh/iJCQkZHnl3l/S4Xawdu3a0aJFC5RSDB48OMPX8nL/xTklS5ZkyZIl1KpV\ni/r167Ny5UrKly/PgQMH6NKlC/Xr16dr164AvPfee8TFxdG+fXtWrVqVp3bPKVGiBLVq1aJjx478\n/fffjBkzhmuvvZannnoqIK/vdvO3z+fB2Acv2B/fOd6S+5HsJvUj3E5qwF2Onj7KJW9ekmFf8mvJ\n5IvIZ1NE9pL8d6yqmKHmIogk/51FOtwO1qRJEy699FK01jRt2jRgr5v+trPy5cuzdOlS6tSpQ6NG\njVixYgVdu3YlOTmZmJgYz3ElSpRgwoQJNG/enBEjRtCrV688x9CnTx82btzIsGHDOHbsGA0bNmTs\n2LEUKlQoT6/tdsv+WEa9KRmH49zxnztY/aSZo8TX4YShSurHEf4GvN/VywCJubmy55QhhaFKaiBn\nFgwn9LsGfMn/bl93Y+wPYz3bgZyELFRJ/ufM1/xXShUFKmMmQgO4SilVBTistd6tlBoKlNdat087\nvjvwO7AZKIS5h7se0DDXQQq/SP47TKDWFwvkA5evw31OcnKyLl26tO7UqZPdoTiKrMOduS0Ht2gG\nkOHR4csOWX5/Uj/uFKg1iIFUcl6DdRjwk9e+acDXOTxP1uEOAKmBzDm9BnzJ/6W/Lc3wN/+LLV/k\n+fsPF5L/mcvjOtx3p+V9itdjUtrXY4Bv0x3/IrADOAEcBL4B6ni/rvYz/4P1
 MwgHkv+Zk3W4xQW+\n+OILDh06RLt27ewORTjYhr83UO2Dahn2TWk+hXZV3J03Uj+B5+vVDWA88KxS6k1gElAfaAHcb3Ho\nriQ1EHhOqYHDpw5T8q2Snu02N7dh2sPTMlx9cjvJ/8DTWi8HIrL5ekev7eHA8GDHJS4k+e8s0uF2\noHXr1vHTTz8xePBgoqKiqFWrlt0hCQdas3sNd066M8O+bd22cW3Ja22KyBmkfoLqViAO88mvBt5O\n2z8FeAIzQVSFcwdrrf9QSj2AmZH5f8BfwJNaa/9na8mj34/8TvUPwnsOA6mBoLK1BrTWPPXVU0za\nMMmzb3+v/ZQuWtqflwtLkv8iJ+H8HiD570zS4Xag999/n6lTp1KtWrUM90AIAfDNzm9o8EkDz3ah\niwqx9dmtXHnJlTZG5RxSP8Hj69WNtH0rAEec3XgvkxSupAaCx84aWLBjAfdPO39hfF70PB649oG8\nvmzYkfwXWfEeGRKOJP+dSTrcDhQTEyNFIi4wZ+scmn/W3LNdumhpfnrmJ8oWK2tjVM4j9SO8XTz0\nYo6dOWZ3GJaRGggvB08cpPSI81ewO1TtwKSmk2T4eBYk/0VmCg0uRFJK+K9EKfnvTFl+SiuEcIZp\nP09DDVSezvY1Ja7hn5f+YX+v/dLZFiIb7617DzVQZehsJ7+WTHzneBujEiL3eizskaGzfejFQ8Q0\ni5HOthC5pLVGDVQZOtvyHiCsJle4hXCwelPqseyPZQBUL1eduPZxFC9Y3N6ghHC4f07+Q6nhpTLs\n29x1MzdedqNNEQnhn9HfjwZg8WOLaXi1rKQkhC/GrB3D84ue92y/2eBNXrrrJdcsjyqcQzrcQjhY\nt9u6UaxAMT5v8TmF8xe2OxwhHE1rTcSgjAO3Xqn1CkPqD7EpIiHyRvfXdocgREjynrNDaknYSYaU\nC+Fgj9z4CHOj50pnW4gczNg8I0Nnu+FVDdH9tXS2hRD
 CRbb/sz1DZ7tTVCfpbAvbhfQV7i1bttgd\ngrCB/N4DQ36O7hRuv/dth7Zx/djrM+xL7Zeaq3tcw+1nIXJHfu+G/BzcKZx/77Um1WLV7lWe7bOv\nneWiiKy7OuH8sxCZs+t3HpId7lKlSlGkSBEee+wxu0MRNilSpAilSpXK+UBxAakfEQ71c+LMCW4a\ndxO7ju4CoFyxcmzrti1XcxxIDYhwqAF/Sf6LcMv/pOQkIodFeiZG61C1AzHNsp6pW2rA3ezI/5Ds\ncF9xxRVs2bKFQ4cOefZprRmwbADzts/LcOywBsNkopEwVKpUKa644gq7wwhJmdWPcJdQrh+tNV3m\nd+GD+A88+zZ12cRNpW/K9WtIDYhQroG8kvwX4ZT/i39bzL2f3uvZPv7KcYoWKJrtc6QG3M2O/A/J\nDjeYYrniiis4nXyaNjPbMGfbHPOF8uafA70OcFnRy+wLUAgHO1c/QoSS6ZumEz0r2rM99eGpPHrL\no369ltSAcDPJfxHqtNbUnFiTdXvWATC84XB63dkr18+XGhBWsmzSNKXUs0qp35VSp5RSa5VSt+Xl\n9f4+/jdXjbmKwm8U9nS2X7zzRVL6paD76zx3tmNjY/P0/LyS9u1tPxgCXQPBZPfPX9p3dv77kstK\nqbuVUqlejxSlVOmsnuNty8EtqIHK09nuFNWJ1H6pfne2c8Pu34G079wasDr/7WD3z1/ad2b+K6Vq\nK6W+UkrtScvlprl4Tl2lVLxS6rRSartSqn1e49h0YBMRgyI8ne19L+zzqbOdE7t//na374QY7G4/\n0CzpcCulWgNvA/2BasBPwCKllM8D6BP2JaAGKsq9XY7f//0dgCnNp6D7a95q+BYRKjDfkt2/Yomm\nZAAAIABJREFUaGk/vAotkDVgBbt//tK+c/Pfz1zWwDVA2bRHOa31gZzaSk5J5j8j/8ON48z62RUu\nrsCxV44xocmEXE2Klhd2/w6kfW
 fWgJX5bye7f/7SvjPzHygKbAC6YvI6W0qpisA84BugCjAG+Egp\n5fe9np2+6sQt798CwFPVnkL315QtVtbfl8uU3T9/u9t3Qgx2tx9oVg0p7wF8oLX+GEAp9QzwAPAE\n8FZuXmDmLzNpOaNlhn2rn1jNHRXuCHCoQgRFnmtACIfwN5cPaq0TfWnox70/sufYHgC2PLuF60td\nn8MzhAg6y/JfCKfRWi8EFgKo3H3q2QXYqbV+KW17m1KqFqaOlvjS9t/H/6bc2+U82xuf2cgtZW7x\n5SWEsE3Qr3ArpfID1TGfbgGgtdbAUiDH3vIbK95ADVSeznaZomX48/k/0f21dLZFSMhrDQjhFHnI\nZQVsUErtVUotVkrdmZv2bv/P7Rx+6TC6v5bOtrCd1fkvRBioiamP9Bbh47nPyDUjPZ3t2y+/ndR+\nqdLZFiHFiivcpYB8wH6v/fuB67J74sETB+kb1xeAhlc15IvWX+Q486AQDuR3DQjhMP7k8j6gM/Aj\nUBDoBCxTSt2utd6QXWMRKoJLC1+at4iFCBxL81+IMFCWzOvlYqVUQa11UnZPPnn2JEWHnD/vX9B2\nAY0rNw58lEIEmVNnKS8EcOjPQ8ysNZMrL7mSCBXBtk3bLAvg6NGjJCQkWNaetO+c9rds2XLuv4Vs\nCSCt3XRxWM7Nv3+3tx/o/Ndabwe2p9u1Vil1NWZIYVaT50gNSPthUQOS/9J+qLXvpHOg8T+Mh71w\nUb6L+K7DdxRILGDJz8XNv3+nxBB2NaC1DuoDyA+cBZp67Z8MfJHFcx7FTMYgD3nY+XjUjhpA8l8e\nznhckP/48fc8i5p4C1iVzdelBuThhMejkv/ycPEj23MgIBWvWsjkmOXASK99HYAjkv/yCIFHQPoB\nWuvgX+HWWp9VSsUD9YGvwDPRQn3gnSyetghoC/wBnA52jEJ4KQRUxORhnvlRA5L/wk5Z5r+ff88z\nUxUz1DYrU
 gPCTpnWgOS/cIlAngOtAe7z2tcobX9WJP+F3QLaDwBQaZ8mBZVSqhXmE+BngHWYoVQt\ngOu11geDHoAQNpMaEOEip1xWSg0Fymut26cd3x34HdiMeRPrBDwLNNRaL7P8GxAiDyT/hZsppYoC\nlTETASYAPYE44LDWencm+V8R+BkYB0zCfDg1Grhfa+09mZoQYcuSe7i11p+nrVE5CCiDWcPvXulo\nCLeQGhDhIhe5XBaokO4pBTDrFpcHTgIbgfpa6xXWRS1EYEj+C5e7FdPBPjfk9u20/VMwS+NlyH+t\n9R9KqQeAUcD/gL+AJ6WzLdzGkivcQgghhBBCCCGE2wR9HW4hhBBCCCGEEMKNpMMthBBCCCGEEEIE\ngS0dbqXUs0qp35VSp5RSa5VSt+VwfF2lVLxS6rRSartSqr2VMSilHlJKLVZKHVBKHVVKrVZKNbKq\nfa/n3aWUOquUytPidH78Dgoopd5QSv2R9nvYqZTqYGH7bZVSG5RSJ5RSe5VSE5VSJfxsu7ZS6iul\n1B6lVKpSqmkunhPQHLS7BiT/Jf8l/92b//7EEC414IT8T3tNqQF5D5D3AMl/yX+35H+g1hfzYf3J\n1php/tsB1wMfAIeBUlkcXxE4jlm38jrM7J5nMTN8WhXDKKAXUB24GngDSAKqWNF+uudFAr8CC4AE\nq77/tOfMAVYD9YArgBrAHRb9/O8CktN+91cCd2JmvZzpZ/uNMRPeNANSyHkdyYDmoN01IPkv+S/5\n7978d3sN2J3/UgP214Cb898JNSD5L/nvxvz365eVlwewFhiTblthZi18KYvj3wQ2eu2LBb62KoYs\nXmMT0NfK9tO+74FA/zwWm6+/g8ZpxXCJTTnwArDDa1834M8AxJKai2ILaA7aXQOS/5L/6V5H8t9l\n+e/n7yAsa8CO/Pfz+5ca0IGrAcl/e2tA8l/y3435b+mQcqVUfswnRN+c26dN5EuBO7J4Ws
 20r6e3\nKJvjgxGD92sooDgmAS1pXynVEaiEKTa/+dl+E+BH4GWl1F9KqW1KqeFKqUIWtb8GqKCUui/tNcoA\nLYH5vrbvp4DloN01IPkv+e8Hu/PP7va9XyNk8z8PMbi5BpxwDiI1IO8B8h5gX/veryH5L/nvc/5Z\nfQ93KSAfsN9r/37M2n2ZKZvF8RcrpQpaFIO3F4GiwOdWtK+UugYYArTVWqf60Wae2geuAmoDNwHN\nge5AC2CsFe1rrVcDjwGfKaXOAPuAI5hPuKwQyBy0uwYk/yX/fWV3/tndvrdQzn+/YsDdNeCEcxCp\nAXkPkPcA+9r3Jvkv+e9z/sks5T5SSj0KvA

<TRUNCATED>


[4/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/model.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/model.ipynb b/doc/en/docs/notebook/model.ipynb
new file mode 100644
index 0000000..23a5553
--- /dev/null
+++ b/doc/en/docs/notebook/model.ipynb
@@ -0,0 +1,536 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# SINGA Model Classes\n",
+    "\n",
+    "<img src=\"http://singa.apache.org/en/_static/images/singav1-sw.png\" width=\"500px\"/>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Layer\n",
+    "\n",
+    "Typically, the life cycle of a layer instance includes:\n",
+    " 1. construct layer without input_sample_shapes, goto 2; or,\n",
+    " \n",
+    "    construct layer with input_sample_shapes, goto 3;\n",
+    " 2. call setup to create the parameters and setup other meta fields;\n",
+    " 4. initialize the parameters of the layer\n",
+    " 3. call forward or access layer members\n",
+    " 4. call backward and get parameters for update"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from singa import tensor, device, layer\n",
+    "\n",
+    "#help(layer.Layer)\n",
+    "layer.engine='singacpp'"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Common layers"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from singa.layer import Dense, Conv2D, MaxPooling2D, Activation, BatchNormalization, Softmax"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Dense Layer"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(2, 3) (3,)\n"
+     ]
+    }
+   ],
+   "source": [
+    "dense = Dense('dense', 3, input_sample_shape=(2,))\n",
+    "#dense.param_names()\n",
+    "w, b = dense.param_values()\n",
+    "print w.shape, b.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "w.gaussian(0, 0.1)\n",
+    "b.set_value(0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.02440065, -0.03396009,  0.01396658],\n",
+       "       [ 0.00771775,  0.07841966, -0.05931653]], dtype=float32)"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "x  = tensor.Tensor((2,2))\n",
+    "x.uniform(-1, 1)\n",
+    "y = dense.forward(True, x)\n",
+    "tensor.to_numpy(y)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(2, 2) (2, 3) (3,)\n"
+     ]
+    }
+   ],
+   "source": [
+    "gx, [gw, gb] = dense.backward(True, y)\n",
+    "print gx.shape, gw.shape, gb.shape"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Convolution Layer"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(4, 6, 6)\n"
+     ]
+    }
+   ],
+   "source": [
+    "conv = Conv2D('conv', 4, 3, 1, input_sample_shape=(3, 6, 6))\n",
+    "print conv.get_output_sample_shape()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Pooling Layer"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(4, 3, 3)\n"
+     ]
+    }
+   ],
+   "source": [
+    "pool = MaxPooling2D('pool', 3, 2, input_sample_shape=(4, 6, 6))\n",
+    "print pool.get_output_sample_shape()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Branch layers"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "from singa.layer import Split, Merge, Slice, Concat"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[(4, 6, 6), (4, 6, 6)]\n"
+     ]
+    }
+   ],
+   "source": [
+    "split = Split('split', 2, input_sample_shape=(4, 6, 6))\n",
+    "print split.get_output_sample_shape()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(4, 6, 6)\n"
+     ]
+    }
+   ],
+   "source": [
+    "merge = Merge('merge', input_sample_shape=(4, 6, 6))\n",
+    "print merge.get_output_sample_shape()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[(2, 6, 6), (2, 6, 6)]\n"
+     ]
+    }
+   ],
+   "source": [
+    "sli = Slice('slice', 1, [2], input_sample_shape=(4, 6, 6))\n",
+    "print sli.get_output_sample_shape()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(4, 6, 6)\n"
+     ]
+    }
+   ],
+   "source": [
+    "concat = Concat('concat', 1, input_sample_shapes=[(3, 6, 6), (1, 6, 6)])\n",
+    "print concat.get_output_sample_shape()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Metric and Loss"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[ 0.13973515  0.21827343  0.21068712  0.21905626  0.21224809]\n",
+      " [ 0.2354937   0.1047527   0.18490241  0.23617713  0.23867407]\n",
+      " [ 0.2659435   0.11397494  0.1659178   0.22683497  0.22732878]]\n",
+      "0.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "from singa import metric\n",
+    "import numpy as np\n",
+    "\n",
+    "x = tensor.Tensor((3, 5))\n",
+    "x.uniform(0, 1)  # randomly genearte the prediction activation\n",
+    "x = tensor.softmax(x)  # normalize the prediction into probabilities\n",
+    "print tensor.to_numpy(x)\n",
+    "y = tensor.from_numpy(np.array([0, 1, 3], dtype=np.int))  # set the truth\n",
+    "\n",
+    "f = metric.Accuracy()\n",
+    "acc = f.evaluate(x, y)  # averaged accuracy over all 3 samples in x\n",
+    "print acc"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1.80309379101\n",
+      "[[-0.78104687  0.18748793  0.16346708  0.24803984  0.18205206]\n",
+      " [ 0.21501946 -0.83683592  0.19003348  0.20714596  0.22463693]\n",
+      " [ 0.20000091  0.23285127  0.26842937 -0.87474263  0.17346108]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "from singa import loss\n",
+    "\n",
+    "x = tensor.Tensor((3, 5))\n",
+    "x.uniform(0, 1)  # randomly genearte the prediction activation\n",
+    "y = tensor.from_numpy(np.array([0, 1, 3], dtype=np.int))  # set the truth\n",
+    "\n",
+    "f = loss.SoftmaxCrossEntropy()\n",
+    "l = f.forward(True, x, y)  # l is tensor with 3 loss values\n",
+    "g = f.backward()  # g is a tensor containing all gradients of x w.r.t l\n",
+    "print l.l1()\n",
+    "print tensor.to_numpy(g)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Optimizer"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<singa.tensor.Tensor at 0x7f6a0c7cfe90>"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from singa import optimizer\n",
+    "\n",
+    "sgd = optimizer.SGD(lr=0.01, momentum=0.9, weight_decay=1e-4)\n",
+    "p = tensor.Tensor((3,5))\n",
+    "p.uniform(-1, 1)\n",
+    "g = tensor.Tensor((3,5))\n",
+    "g.gaussian(0, 0.01)\n",
+    "\n",
+    "sgd.apply(1, g, p, 'param')  # use the global lr=0.1 for epoch 1\n",
+    "sgd.apply_with_lr(2, 0.03, g, p, 'param')  # use lr=0.03 for epoch 2"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## FeedForwardNet"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "conv1 (32, 32, 32)\n",
+      "relu1 (32, 32, 32)\n",
+      "pool1 (32, 16, 16)\n",
+      "flat (8192,)\n",
+      "dense (10,)\n",
+      "[u'conv1_weight', u'conv1_bias', u'dense_weight', u'dense_bias']\n"
+     ]
+    }
+   ],
+   "source": [
+    "from singa import net as ffnet\n",
+    "layer.engine = 'singacpp'\n",
+    "net = ffnet.FeedForwardNet(loss.SoftmaxCrossEntropy(), metric.Accuracy())\n",
+    "net.add(layer.Conv2D('conv1', 32, 5, 1, input_sample_shape=(3,32,32,)))\n",
+    "net.add(layer.Activation('relu1'))\n",
+    "net.add(layer.MaxPooling2D('pool1', 3, 2))\n",
+    "net.add(layer.Flatten('flat'))\n",
+    "net.add(layer.Dense('dense', 10))\n",
+    "\n",
+    "# init parameters\n",
+    "for p in net.param_values():\n",
+    "    if len(p.shape) == 0:\n",
+    "        p.set_value(0)\n",
+    "    else:\n",
+    "        p.gaussian(0, 0.01)\n",
+    "print net.param_names()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "conv1 (32, 32, 32)\n",
+      "relu1 (32, 32, 32)\n",
+      "pool1 (32, 16, 16)\n",
+      "flat (8192,)\n",
+      "dense (10,)\n"
+     ]
+    }
+   ],
+   "source": [
+    "layer.engine = 'cudnn'\n",
+    "net = ffnet.FeedForwardNet(loss.SoftmaxCrossEntropy(), metric.Accuracy())\n",
+    "net.add(layer.Conv2D('conv1', 32, 5, 1, input_sample_shape=(3,32,32,)))\n",
+    "net.add(layer.Activation('relu1'))\n",
+    "net.add(layer.MaxPooling2D('pool1', 3, 2))\n",
+    "net.add(layer.Flatten('flat'))\n",
+    "net.add(layer.Dense('dense', 10))\n",
+    "\n",
+    "# init parameters\n",
+    "for p in net.param_values():\n",
+    "    if len(p.shape) == 0:\n",
+    "        p.set_value(0)\n",
+    "    else:\n",
+    "        p.gaussian(0, 0.01)\n",
+    "        \n",
+    "# move net onto gpu\n",
+    "dev = device.create_cuda_gpu()\n",
+    "net.to_device(dev)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "collapsed": true
+   },
+   "source": [
+    "## Next: [Simple models](./regression.ipynb)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "anaconda-cloud": {},
+  "kernelspec": {
+   "display_name": "Python [conda env:conda]",
+   "language": "python",
+   "name": "conda-env-conda-py"
+  },
+  "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.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}


[5/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/mlp.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/mlp.ipynb b/doc/en/docs/notebook/mlp.ipynb
index ea21ee6..5dcbe28 100755
--- a/doc/en/docs/notebook/mlp.ipynb
+++ b/doc/en/docs/notebook/mlp.ipynb
@@ -41,7 +41,7 @@
     "from singa import optimizer\n",
     "from singa import loss\n",
     "from singa import layer\n",
-    "from singa.proto import model_pb2"
+    "#from singa.proto import model_pb2"
    ]
   },
   {
@@ -52,7 +52,7 @@
     "\n",
     "## Training data generation\n",
     "\n",
-    "The following thress steps would be conducted to generate the training data.\n",
+    "The following steps would be conducted to generate the training data.\n",
     "1. draw a boundary line in the 2-d space \n",
     "2. generate data points in the 2-dspace\n",
     "3. label the data points above the boundary line as positive points, and label other points as negative points."
@@ -108,16 +108,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 5,
    "metadata": {
     "collapsed": false
    },
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAFkCAYAAAB1rtL+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzsvXt8VPWd//86M6ngEDIzFQKoqBRyQSGQGyZoELwEmCQo\n2nV/8EVoCfXntdyrQNjWC63fosvF3fXS5fertGit7a5bwVqxZoJdISoU7La63oJ1+7W1kMF2f3ar\nybx+f5w5mdu5fM5kJjfez8djHpLJmXM+c84x79d5XzWSEARBEARByARPfy9AEARBEITBiwgJQRAE\nQRAyRoSEIAiCIAgZI0JCEARBEISMESEhCIIgCELGiJAQBEEQBCFjREgIgiAIgpAxIiQEQRAEQcgY\nERKCIAiCIGSMCAlBEARBEDImp0JC07Q6TdN+omna7zRNi2qatiDl9/9v7P3E17O5XJMgCIIgCNkj\n1x6JEQCOArgFgNVQj58CGANgbOy1KMdrEgRBEAQhS+TlcucknwPwHABomqZZbPZXkn/M5ToEQRAE\nQcgNAyFHYramaX/QNO1NTdP+SdO0z/f3ggRBEARBUCOnHgkFfgrgxwA6AEwE8C0Az2qaVkuL+eaa\npp0FYC6A4wD+p4/WKQiCIAhDgeEALgDwM5Ins7HDfhUSJH+Y8OOvNU37FYB3AcwG0GrxsbkA9uR4\naYIgCIIwlPlfAB7Pxo762yORBMkOTdNOAJgEayFxHAC+//3vY/LkyX21NCGHrF69Gtu2bevvZQhZ\nQq7n0EOu6dDhjTfewJIlS4CYLc0GA0pIaJp2LoCzAHxos9n/AMDkyZNRUVHRJ+sScovf75drOYSQ\n6zn0kGs6JMlaakBOhYSmaSOgexeMio0vaJo2DUBn7PV16DkSv49t978BvAXgZ7lclyAIgiAI2SHX\nHokq6CEKxl4PxN5/DHpviTIASwEEAPwf6ALi70h+l
 uN1CYIgCIKQBXLdR6IN9iWm83J5fEEQBEEQ\ncstA6CMhnOYsWiTNTIcScj2HHnJNBTtESAj9jvyRGlrI9Rx6yDUV7BhQVRvZ4re//S1OnDjR38sQ\nBgGjRo3Ceeed19/LEARBGLQMOSHx29/+FpMnT8Ynn3zS30sRBgE+nw9vvPGGiAlBEIQMGXJC4sSJ\nE/jkk0+kYZXgiNGY5cSJEyIkBEEQMmTICQkDaVglCIIgCLlHki0FQRAEQcgYERKCIAiCIGSMCAlB\nEARBEDJGhIQgCIIgCBkjQmKQ8Y1vfAMejwednZ39vRTXXHDBBVi+fHl/L0MQBEHIIiIkBhmapkHT\nNOcNByCDdd2CIAiCNSIkBEEQBEHIGBESwqDkr3/9K0j29zIEQRBOe0RIDFL++Mc/4vrrr4ff78eo\nUaOwatUq/PWvf+35fXd3N+655x5MmjQJw4cPx4QJE7Bp0yZ8+umnSfvxeDy4++670/afms/w2GOP\nwePx4OWXX8aaNWtQWFiI/Px8XHvttTh58mTa5++9916MHz8eI0aMwBVXXIHf/OY3adtEIhGsW7cO\nZWVlGDlyJPx+P0KhEF5//fWk7dra2uDxePDkk0+ipaUF5557LkaMGIGjR4/C4/Fgx44daft++eWX\nez4jCIIg5I4h29lyKEMS119/PSZMmID77rsPhw4dws6dO3Hq1Cl897vfBQA0Nzdj9+7duP7667Fu\n3Tq0t7fjW9/6Ft588038+Mc/djyGVT7D7bffjs9//vP4xje+gePHj2Pbtm247bbb8MQTT/Rss3nz\nZmzZsgWNjY2YP38+jhw5gvr6enz22WdJ+3rvvffwk5/8BH/zN3+DCRMm4A9/+AMeeeQRzJ49G7/5\nzW8wduzYpO3vueceDBs2DOvXr8enn36K0tJSXHLJJdizZw9WrlyZtO2ePXtQUFCAq6++WuWUCoIg\nCBkiQmKQMnHiRPzLv/wLAODm
 m2/GyJEj8dBDD2HdunWIRqPYvXs3brzxRjz88MMAgJtuugmjR4/G\nAw88gLa2Nlx22WUZHXf06NF47rnnen7u7u7Ggw8+iD//+c8YOXIkTpw4ga1bt6KpqQn/9m//1rNd\nS0sLvvnNbybtq6ysDG+99VbSezfccANKSkqwa9cubNq0Kel3f/3rX3HkyBGcccYZPe8tXboUN910\nE9566y0UFxcDALq6uvDUU0/huuuuw/DhwzP6noIgCFaQRFvbAdx///fw4YcfYdy4QqxfvxSzZtWd\nlknlp72Q+OSTT/Dmm2/m9BilpaXw+XxZ25+mabj11luT3rv99tvxT//0T3j22WcRjUahaRpWr16d\ntM3atWtx//33Y9++fRkJCU3TcOONNya9V1dXh+3bt+P999/HlClT8MILL+Czzz7D7bffnrTdqlWr\n0oTE5z73uZ5/R6NRnDp1Cj6fDyUlJThy5Eja8b/0pS8liQgAuP7667Fy5Urs2bMHd911FwDgueee\nw8mTJ7FkyRLX31EQBMGOSCSC+vplePfd6YhENgMYD+ADvPzyLkyceD/279+NQCDQ38vsU057IfHm\nm2+isrIyp8c4fPhw1geITZo0KenniRMnwuPx4Pjx4yAJj8eTts2YMWMQCATw/vvvZ3zc8ePHJ/0c\nDAYB6P9zAejZd+qxR40a1bOtAUls374dDz30EDo6OtDd3Q1AFyyjRo1KO/YFF1yQ9p7f70dTUxMe\nf/zxHiGxZ88enHPOOZgzZ04G31AQBMEckqivX4bDhzeDrE74zfmIRO7G4cOvor5+Gdrbnz6tPBOn\nvZAoLS3F4cOHc36MXGN20/bmRjaMeiperzftPZIZVVBs2bIFf/d3f4cVK1bg3nvvxec//3l4PB6s\nXLkS0Wg0bfszzzzTdD9Lly7Fj370Ixw6dAhTpkzBM888g9tuu831egRBEOw4cOAlvPvu9BQREYes\nxjvvlOG
 ll36BWbPq+nh1/cdpLyR8Pt+gHDf+9ttv4/zzz+/5+Z133kE0GsUFF1yAaDSKaDSKt99+\nGyUlJT3bfPTRRzh16lTS54LBIE6dOpW0788++wwffvih8loSBYux77fffjvJg3DixIker4XBj3/8\nY1x++eV49NFHk94/deoURo8erXz8efPmYdSoUdizZw9mzJiBv/zlLxLWEAQh62zdujsWzrAmEmnG\n1q1bTishIeWfgxCS+Md//Mek93bu3AlN0zB//nyEQqGesEEiDzzwADRNQ0NDQ897EydOxIEDB5K2\ne+SRRyw9Ek5ceeWVyMvLw4MPPpj0/rZt29K29Xq9aZ6Mp556Cr/73e9cHdPr9WLRokV48skn8d3v\nfhdTp07FlClT3C9eEATBhg8//Ah6ToQd42PbnT6c9h6JwUpHRweuvvpqzJs3Dy+//DL27NmDJUuW\nYOrUqQCAZcuW4dFHH0UkEsFll12G9vZ27N69G9dee21SouWKFStw00034Ytf/CKuuuoqHDt2DM8/\n/7ypR8AqfJH4/qhRo7Bu3Trcd999aGxsRCgUwi9/+Us899xzaftsbGzEPffcg+XLl2PmzJn41a9+\nhT179mDixImuz8fSpUuxc+dOhMNhfPvb33b9eUEQBCfGjSsE8AGA8222+iC23emDeCQGIUajpWHD\nhmHDhg346U9/iq9+9av453/+555tdu3ahbvuuguvvfYaVq9ejXA4jE2bNiX1ewCAr3zlK7jzzjvx\n0ksvYd26dXj//fexf/9+jBgxIi3HwirnIvX9LVu24K677sLRo0fxta99DR0dHXj++efT9rlx40as\nXbsWzz//PFatWoWjR4/i2Wefxfjx45WPbVBRUYGLLroIHo8Hixcvtt1WEAQhE9avX4pgcJftNsHg\nLqxfv7SPVjQw0AZbm2FN0yoAHLaqhDhy5AgqKytzUikhDGwqKipw1llnYf/+/Urby70i
 CIIbSGLG\njKtNqjZ0NO1VVFXdO6CrNoy/ewAqSabX2WeAhDaEIcFrr72Go0ePYvfu3f29FEEQhiiapmH//t2o\nr1+Gd94pQyTSDOA8AL9FMLgLkya9jueff2zAiohcIUJCGNT8+te/xmuvvYa///u/xznnnIPrr7++\nv5ckCMIQJhAIoL39aRw48BK2bt2C3/8+3tmyru7u005EACIkhEHOj370I9xzzz0oLS3FE088kdb5\nUhAEIdtomobLLpuFyy6b1d9LGRBIsqUwqPn617+Orq4u/Md//AcuvfTS/l6OIAjCaYcICUEQBEEQ\nMkaEhCAIgiAIGSNCQhAEQRCEjBEhIQiCIAhCxgzZqo033nijv5cgDHDkHhEEQeg9Q05IjBo1Cj6f\nT6Y/Ckr4fD6MGjWqv5chCIIwaBlyQuK8887DG2+8gRMnTvT3UoRBwKhRo3Deeef19zIEQRAGLUNO\nSAC6mBDjIAiCIAi5R5ItBUEQBEHIGBESgiAIgiBkjAgJQRAEQRAyRoSEIAiCIAgZk1MhoWlanaZp\nP9E07XeapkU1TVtgss3dmqb9H03TPtE0bb+maZNyuSZBEARBELJHrj0SIwAcBXALAKb+UtO0OwDc\nBuBGADMA/H8AfqZpmsyCFgRBEIRBQE7LP0k+B+A5ANA0TTPZZCWAe0jujW2zFMAfAFwD4Ie5XJsg\nCIIgCL2n33IkNE2bAGAsgJ8b75H8E4B2ALX9tS5BEARBENTpz2TLsdDDHX9Ief8Psd8JgiAIwqCB\nJMLhNjQ2rkBl5QI0Nq5AW9sBkGmR/SHFoO1suXr1avj9/qT3Fi1ahEWLFvXTigRBEITTlUgkgvr6\nZXj33emIRDYDGA/gA7z88i5MnHg/9u/fjUAg0KdreuKJJ/DEE08kvffxxx9n/ThaXyklTdOiAK4h\n+ZPYzxMAvAtgOsnXE7YLA/glydUW+6kAcPjw4cOoqKjI/cIFQRA
 EwQaSmDHjahw+vBlkddrvNe0V\nVFVtQXv70zBPF+w7jhw5gsrKSgCoJHkkG/vst9AGyQ4AvwdwhfGepmkFAC4G8HJ/rUsQBEEQ3HDg\nwEt4993ppiICAMgZOHJkAn7605/2OvwxEMMnOQ1taJo2AsAkAIYE+4KmadMAdJL8AMB2AC2apr0D\n4DiAewD8F4B/y+W6BEEQBCFbbN26OxbOsKa7exUWLWpEcfHDGYc/BmL4BMh9jkQVgFboSZUE8EDs\n/ccALCf5bU3TfAAeARAA8BKA+SQ/zfG6BEEQBCErfPjhR9CNuh3n4k9/+gsOH24BOSPh/fMRidyN\nw4dfRX39MsvwB0nU1y8zCZ+ofT6X5DS0QbKNpIekN+W1PGGbb5A8m6SP5FyS7+RyTYIgCIKQDYww\nwwcffAjgA4etfwzg6hQRkbivarzzThleeukXpr93Dp/Yfz6XyKwNQRAEQXBJJBLBjBlX49prf44/\n/nE9gH92+MQ/QO/BaLfPZmzdutv0d3r4pDnjz+eSQVv+KQiCIAj9QXqYgQC+D+BVAGYeg1cBdMI5\n/DE+FiZJRy18Yv35XCJCQhAEQRBckB5m0ADsBrAMQBmAZgDnAfgtgF0AXoeeMvgBgPNt9vwBxo0r\nNP2N/n7mn88lEtoQBEEQBBeYhxkCAJ4GcBWALQBCAK4HUB97fya83u22+w0Gd2H9+qWmv1u/fimC\nwV0Zfz6XiJAQBEEQBBdYhxk0ALMAfAfAPujTHsYjGPw7VFXtQ1nZW9C0V033qWmvYtKk11FXd6np\n72fNqsPEiUcz/nwukdCGIAiCILhANcwAdKCw8Ho89dQDqKu7Gx9//DHq65fhnXfKYh4NPfwRDO7C\npEmv4/nnH7Ms3dQ0Dfv3787487lEPBKCIAiC4IL165c6hin03IgHMX78OMyaVQdN0xAIBNDe/jT+\n9V+vQkPDFlRWLkRj4xY8/XQ92tufdmwm1d
 vP5wrxSAiCIAiCC2bNqkN+/q34+ONXAJj1hXgVeoLl\n8rTkR03TcNlls3DZZbPSPkUSbW0HcP/938OHH36EceMKsX790h4h4vT5/kKEhCAIgiC4QNM0fP/7\n9+Gaa25Bd/d8mFdpPIZg8AHl5MeB2v5aBQltCIIgCIJLGhpCmD59HIBzoVdpLIz9V6/S0LS3lZMf\nE/tSRCJ3Q8+98CDe/noz6uuX9etgLjtESAiCIAiCSzRNwwsvfA/V1c8iGBwLYAf0sVFGlca9ysmP\nA7n9tQoS2hAEQRAEFyTmMnR3EyUlvwZwGz791IOzzx6D9euXoq7ubuUKCpXpoXr76y2YNasuC98g\nu4iQEARBEIYUKkmLmWKVyxAM7sLEiUfxve9tdZ3LMJDbX6sgQkIQBEEYMuQyaTFXo7wHcvtrFSRH\nQhAEQRgSOCUtvvbaJtTWXotoNJrR/nOVyzCQ21+rIEJCEARBGBI4GXrgYrz5ZgUmT67DqVOnXO8/\nV6O8B3L7axVESAiCIAhDAhVDD9yGt946O6NyylzlMhjtr6uq7kUwuBnAcQBRAMcRDG52VQHSH4iQ\nEARBEIYEqoYe+DSjEEQ8l8EO51wGkgiH29DYuAKVlQvQ2LgCx469jkOH/nXAtb9WQZItBUEQhCGB\n+jCtwozKKdevX4qXX94Vy78wxymXQSUZdO/e7yivaSAgHglBEARhSKCStKi3sF4K4Fz853/+Jskr\n0NZ2wDbc0dtchsHewdIKERKCIAjCoMEsLGAIAMPQA+0WnzaGaV0EoAEdHTXYt28zjhx5Gvv2bcbC\nhS9gxoyrLRMxe5vLMNg7WFpCclC9AFQA4OHDhykIgiAMDKLRKFtbw2xoaGZFRRMbGpoZDrcxGo1m\n7RidnZ2sqmpiMLiZwHEC3QSOMxjczKqqJkYiEUYiEZaWziGwlkBHbJsOAi0EFhDoJNBE4BABpr00\n7RVWVy+wXXc0GmU43
 MaGhhWsrFzAxsYVbGs74PhdGxqaY+tOP2781cHGxhU5O6+HDx8mAAKoYJbs\nsuRICIIgCL2iLyZX0kUzqF//+gVMnlyHt956H8CnAAqhhzPuBvASgCkALrY4TtwrYJU/kekob7dV\nH4NlIqiENgRBEAYAtHHZD2QSDXwu4/5uwgIejwft7ftQXf0pgsEyAJsAXALgfQB3APi/bY8ViTTj\n299+zPS79uYauan66KvzmhWy5droqxcktCEIwhBDxWU/EDBzs2/fvpPBYIutuz4YbGFb24FeHTvT\nsEBiCKK2diE9nqmx82u3ny76fBcmnfdsXKNwuI2BwCbbYwcCG9nWdoDhcFvsWNk9r7kIbfS7MHC9\nYBESgiAMIaLRKKuqmqhpr2Qcs+8LrAxpXt6lrg18JlRUNCkJgMrKBZb70MXIYqX1Al/sOe+9vUaG\nAJs//8vUtAsItFsct50jRkxmd3d3RsJJhVwICQltCILgCDk43e6DgcGQyU9au9m7uoLoi8mVqmGB\nDz740PIe1dfwFegloHbsAvDVnvPem2sUiUQwY8bVuPban+OnP50H8osAtgBIrvrQf96CvLwG/OIX\n/z64JoJmS5H01QvikRCEPmWgud37ojqgL8nVk2c2sXez9836VVz9wBoC1QROmt6j+rnuoF3VBvAK\n9eqOaM+6M71G6Z4MYz9RAm0EVsSOtYLAgawc0wkJbYiQEIQ+ZaC53QeaqFHBSfhkw2Wfa+yNWhuB\n7MfyE89beXkjZ8yYzxEjLiRwecwgt8UMb6oAaE8QAsn3aFyMRAiUEthE8xLRSNJ5z/QapYsf9f1k\nI0fC7N579NHvZF1ISPmnIAiWuHHpumk1nAmkevmfynAjkmhrO4D77/8ePvzwI4wbV4j165di1qy6\nrA1H6uzsRG1tI957z4uurhEAzgFQj3//9/2YNEkv31Nt6+w0vyGX2LvZ6wDcD+AVADPSfhvv9mjd\n
 VjqV5LLHr0KvuigH8BCMEkjgUQBboYcJnoLeaOoxAAEAZQB+AaAu7R6dOPF+HD78NsiZse22APgI\nySWixvWPV1Bkco30IWKbE95Rv9bxtb5q+v+f03m1Kh09cOBem2NnSLYUSV+9IB4JQegzBpLbPZtZ\n7H3h2Th58iR9vlICG5KOoT+9NxH4OaurF7C1NZzR9+rLEI/zfRAhMJd5eauTnvCDwRZWVy9wdT6T\nvWDR2Lky94gBBwlMNfFOdFAPF6Tfo5FIhNXVC5iffwOBjUrnPdN7L92T4c57Y6xVr4pRP6/2nkQJ\nbYiQEIQ+ZCC53bMlavoiXBONRllSMptOcfhAYBPD4TbX6+nrEI+KIQ0ENnHHjp2uuz3aH8vZ8Orh\niANp96QeojC/Rw0R5vdPjYkR+/Oe6T2Tfs86CaN2lpTMZCi0vEcctraGY4JR/bzaXy8REiIkBKEP\nGUgeiWyJmlzV56ceIy9vjYIBfJKNjStcPXl2d3ezuLiWwHUxo5ScL5CLvJW+zJVJvufU7r9k74PZ\ne+b3qJvzrrptoqeoqGimyX0QiYmc5P14vTdz+PCiWJ+J3olD+/9vRUiIkBCEPqQvjK4q2RI1fSGO\nVI8BNPcIH5X5DZ2dnTFPx1qah0siObsmmbrZ3ZIsGNXEY7L3gUz1UtidDzdzM5y2TfcUdRGoZ7pn\nyqjauI560udyApeYbKe/3Ao1e9EtQkKEhCD0IQOpaiNboqYvwjWqxwDmKgsW41q4KVvMNpkOq3JD\n7z0Sieeh7+5R6/9XDA/EnUyuELmT8QqRzCtfotEow62tbG5oYFNFBZsbGlhTc43NeRMhIUJCEPqY\nvnoSdSJboibeSyAcM1Tp4YG+8kjk5dUpew7U+igYT+L9Wy7aG9znSGyIXcsO6p6audT7SGT3HjVL\nbm1tDfPFF1tjYYw5sS6fqYmfpOGByMur4/jxNczLq2O8b4S6YEq9Jzs7O9lUV
 cXNwSCPA+wGeBzg\nDfn5zPOuFCFhuWAREoLQ5/TFk6gK2RA1zzyzl15vRcxAmYcHspEj4TR/AriTJSWXKJ/DuDiJ2oig\nDupP5+6E0EBq8uWmakPT2un3T+1Z844dOxkKNWf9HjVPbj1Gr7eCXu8qy/vITAwUFlabiAb3XrJo\nNMqmqiq+omlpG0cBTsZYmieSipAQISEIpzm9ETXx8IB5pr5usK5gVVVTr6s2dGNoNVPhEEeMmMzO\nzk7lferhkhMxo2Mlgk4QWOBKCOWiAqS3wiRZMB6LfbcNGYvH3mDuCXOqvkgOrySKgTPPvNBENLj3\nSOx95hnekZ/PKMAwwGaATbH/tgHsBDjWcw5HjFifdN5GjmzOupDQqBvnQYOmaRUADh8+fBgVFRX9\nvRxBEAYRbW0HsHDhC7F5EeZ4vavwk5/UIxQK9epYp06dQn39MrzzzlREIisAnAfgt8jL24lJk47i\n5Zd/jGAwqLy/hoZmPPvsfwG4F4BZg7BXoc9ryEd19WdKjblIYsaMq02afOlo2quoqrpXuckXkNoI\nqRlGI6RgcBcmTjyK/ft3IxAI9BzfqikYoDdE27r1e/jwwz/gjDOi0LQz8Omn3Rg3rhDr1t2AaDSK\nBx74fs4aigFW98wBAC9Ab15lxSoAewGMADARwEoA56Gw8G/x0UdPIbkplfP+Cgo24Ctf6UJn50kc\nPHgQkTffxPMAWgBMBxA/0/qkkKMA7gGwsaYW2lkX4fe/18/R1VdfjK985SsAUEnyiItTYU22FElf\nvSAeCUEQMkQ1d6G2dmFWXOLZCAkZT/eTJ9dQnyVht/Y1PPfcKcpP6dmuynGTx9IbT0hf9tEwv2fM\n3ksNOS0icCX1pNrjBFbR45nGb37zPpNzrtJ4ayw9Hg/Ly8t58803s/b889kI8BWLC/dKzEPRVFGR\n9H2G5KwNAF+HPv4s8fUbm+1FSAjCaU6mrnPVagqvt2pA
 zO5INpiLlERQQ0Oz8v6zXQqrKkwyacJl\nkJ5DkWi8lxNYy4KCqVnL9TC/Z1Lf66R5yGkVk/MlDtLvm8jp0+fbVHfcwcRQxOc+t5LnnlvFZ555\nhn/+85971hWqqeFG+wvHDQAba2uTvk8uhMRAmbXxHwCuQLzBeVc/rkUQhAGM1QyBl1/ehYkT709y\nnaeiOteiu3s6Dh++0dXsjmxDps4WWQCVsdK///0flY+R7VHV6bMl0olEmnHnnbfh3XcrYD/DZSp2\n7vwH7N9/LCl0QTI2/2USgKuhO/bj9wHwIP70p3E4cuS7AP6sdF+kHz8ecnnnnfeRfs8k3kcEsCy2\nhuQZMMA26CGnZQCeBlCDzz6Zi64/PI2xY2/CH/9Yh66uVdDDXqfg8ZyHkSOfwvjxRwB4cP755+Jr\nX1uGurptaffgMAA3OnyPGwGsUfrGvSRbiiTTF3SPxBEX24tHQhBOU3pbAuquhFLNrZ+riof0tWa/\nkVa2PRKqHp+CgjKl4+plksmhC79/CoGjdJPs6KaXRHrYpJXpMzkSy1LdtvHu4PkYw4KRI1lbO5Ml\nJbNZXDyH8+Z9SSnsZfSNKCsoYLeDR6IL4ILKyqTPD+XQxp8B/A7AuwC+D2C8zfYiJAThNKW3MX0n\nIZKebW9vRHMZq0838tkf153tHAlVYaILiUw6VpJ6vsDMmHFWNd7qolCtQiPxPbdNs7o4FWezuaFB\n+ToZJPaNWAy9Z4TdgTsArmhsTNrHUBUScwFcB2AKgKsA/DuADgAjLLYXISEIpynZeII2Sgu93pVM\n7jTYwninwbgxs2rslOuun+lP9049FdwfL9vfQVWY1NQsdGl8U1+XZPB5Z8+K9frN5mMco8dTTmA6\n3YmiDjZgTJqnQOVaJfaNaAO42UFItASDPNDWlrSfXAgJT65DJ06Q/BnJH5P8D5L7AYQABAFc389L\nEwRhgJGNmH4gEEB7+9Oorn4bwCY
 ACwFsAVAPPY6dGEf/IJZXkc6BAy/FYvV2cf4yvPTSLxzWa048\nn8NAA7AbevnnZgDHoeemH0cwuBlVVffi+ecfc5XPoWka9u/fjaqqexEM9n6fs2bVYeLEo9C0Vy2O\n9yomTXod3/rWSgQC33HY23cALLX4XT5U7gPgo6SfnXI99ByPZpPfBKDfG1cB2IS8vGJ4vSFEo79E\nHj5E8nUy4wPoeRXASGzFDfgDCseNc/hMMi8dOIDp776Lav2BGnXQSzzNzzTwqqbh9UmTcGldnavj\nZMJASbbsgeTHmqa9BWCS3XarV6+G3+9Pem/RokVYtGhRLpcnCEI/oposaWX8DTRNw3333eHYUyIY\n3IX1682S9tdBAAAgAElEQVSNmWpi4datW3r6IqhCEldeWYaf/WwnuroeSPiNYdBeArAFXu8vMWPG\nebjvvtWoq7s7o6RQQ1jpPRu29PQbWL9+qet9GsJE759RFjPKev+MYHAXJk16Hc8//xgKCgrw6ac3\nQU8gnWGyp1cA/Cv0TghmnAOV+8Aw3sbPTveFvVDVAMwCcAlGjJiKr31tOfbv3o2//c//xEZsRQT/\nYLPnXdBF0SGU4l/wq0AAS9evt11LKru3bsXmSCRpNbuhp3GWQe8joZ9pYGdeHo5OmoTFN96Iq6++\nOmk/H3/8savjKpEt10a2XtClZieA2yx+L6ENQThNaW0Nx1oSW3t0vd6VDIfbHPfVW7d+roZ/GXkX\ngUAL9cmR5t0x+3Jgmluc+meEw230+9ebhAs6GA8xrWNijkPy6wcEvupw7tVzJDo7O/nss8/ynHMq\nlUImtbUL2RYOc3MwyCjAKoylZtkttZ3AXHpwCyswlj8HuKC62vV1a6qoME2ujMbCHCug940oA/h1\ngDM9Hp53xhmsHDWKc4qKuDwUYls4zNdeey3roY2BIBy2Qpd55wOYCWA/gD8AOMtiexESwoBnIM0u\nGEroQqKCdt
 n6Xm+FkpAgeze7QzVfY+7cZcrfL13cmMXmOxgMburTgWlOuL3fk+eGtFHPZVgQ+68x\nzKqDVjkSgcAmlpTMtmlBbl210dXVxddff52PPPIIv/zlL7O0tNQwrBzt9dKPW22vqR+3sKG2ls0N\nDT3JjhGA1RjLIG5JEUW30YPzWY3R/AHATYEAF1RXZ3TdEo9n9eqICYl1AOsBtgBJw7w2BQKsmzx5\nSAqJJwD8F4C/xLwyjwOYYLO9CAlhQNOXXfdON3QDdMzUuMafZI+5Hljl1H3SzFBu374z64O5zJP9\nko1tXl4dd+58cMCI0kzud/Ux6+lVG4Yo6OzsZHX1AgYCG1Pug9VMnADq92/guedWs2bCBJaOHMlz\nvF4CSOoSuXv3br799ttsLC+39S5oOMgqjGVTRUWah8CYedGAsazE2WzAGN4GcJLHwwt9PlYXFnLn\njh3s7u42PY+p48CXh0LcsW0bl4dCbKqo4MKaGi6NzdawOmkrAT4c80xYdbx8LCaahpSQcL1gERLC\nACbXmfynO3EDZPckm90R2laGMhBo4bBhkwgcsn0qDgQ2Zb18sjcjzrNJpve7mzHrdp6i7u5u1haX\n8JIE470DYAhjWImzeTHGcDTAW1KezO/Mz2eooiJN5DQ3NPCYhXchiFtYjbE8Br2k0s5D0Bkz5htT\njrs5GGRTVVXacVPHgZ+IeRTWpnz+qwAvh+4BST1mO8DKmJixq+Y4LEJChIQwsMl2Xb6QTF8bWue+\nE02xp18r70jE1XpylXeRjVCblVdGz+Vwd7+r/X+yiTt27LT1FBkTMM12EI0Z80MWB3hF09JyFRLz\nHhK9C40Yw7bYPo2SytRtjembywHOjBl2leOmlnUa67byKBwEOB3gezGB0QE9hDEV4LHYOuxCICIk\nREgIA5zB9kQ52OhroeZ8vCbqLnjDO9JEoIHAwti/mwm8yIqKJqXj5eL+cRN6sBIcJ0+eNN1
 HXt4a\n6gmhEVfrzcSTYZbbMMbGaGbSZyHVqNuJgGg0yrnTp/Py2HESPQdrY2LAzHOQelxDkLhZ9zqAE30+\nlhUUcDHAAwAbY8dviv1XhITdgkVIDFmGQoJirp4oe0t/nNtcHDOboSOV9Tkb9sTfWw1u2ki/f6pS\nbsxAnMYZCLTQ5yu1SWxsZ3I3ULX73SnRtaOjg88++yw3b97MK6+8kiNHjiQAer3entyGmRdcYGk0\nnZ7MCfPOj5FIhAuqq9kSDLIDCU/9wWBSomQ0GmWovJwHLfb9CsAFgGlOQwfQ09kyNUSiuu66vDzu\n3LGjR4QYnxOPhMqCRUgMSYZKguJA9Ej0x7nN5TF7U2nhdn3OwrCNehjDqetkO6urF7C7u9tWvBiG\nXzfOiVMtm2PHas9Jp0n7aZxtBDY43NPJpZaq97uR6BoKNfPCC6/i1KlXcf78+SwpKTGMHUeNGsWm\npiZ+85vfZGtra9IETLs8Bacnc8J8FoWxrrZwmCsaGrigspIrGhvZFg6z9cUXe5IhQzU1vNMirGK8\nWqB7C8yOe6HPx0gkkpa0qbruuTExYnhQDE+Gk0dDhARFSAxFhlKC4kDLkeiPc5urY6Z6EGpqFrKm\npoEVFU2m8XO19aWOoW4m8DCrqpoYjUYVhGGUumv/ITrNwQgENrK4eKajeOno6KDPV0pgLZM9G2vp\n85Xy+PHjyudMVdjW1DTY3LduZ0k43+9G3wY7b4NRSWF3TVPDAomvTD0SZqQmQ3YD6rMuLN7/IvR+\nEjdcdVVGHolm6CLI8KBsCgRYDz0nRKo2nBYsQmLIMdCMb2/IteF2Gy7oj3Obi2Nm08MRX59VKGIz\nvd4K7t27T3Fa6DoCFyka2y/a3hfd3d2x+8eqCZU7j0R2pnH2plSznaP8pbyitJRXTpnC+fPmKXsb\nVOju7ubskhLThMo2gBscDLLZLIpUrPImlD0eZseF7qnYGAiwdPTopH
 Uq5XYAfBJxEWR4UG6or+dk\nn483e72cC3ATkBSe2RgIcNaFF1KEhAiJIcdADAe4IdW419cvZUnJJQwENjFT17sZmRjTbJ/b7OQV\nuD9mNsWZvr4O2o+hbqffPzXBsFtvpxvQxoyNrfEKBlu4Y8fOATiNU20fHlycdL8Pwy08E2P5EuJJ\niCs9HpaNHs2HHnrI0tuQ2k+huaGBbeFw2raGl2C9329qNDf4/Sz1+diukDhph5XXQ9njkXpcxHMn\nfgC9pDPRg+BUtWF8flMgYCqCDFHRHArxkqIiVhcWck5JCZsbGnigrW1odrZ0vWAREkOOgZqgqIK1\ncW9hScls1tffYFm65oZMjWk2z2328grcXc9sezj09bXSKRTh9a5kW9sBy5yMvDyj8VEkZmw7mBwm\nuYZAiLrIaKbe1rnZ1hgXFlYrGO33WFPT0CPmQqHl3LZtB0Oh5WniLjvTOJ3Hl4/ELdyB9HLJdqQn\nHNoZcLMQgln/BbOSSaNN9ALoYYNLSkp48uRJpcRJO6zyMFQ8B2ugew4SyzQXIF7NsTz2/SKx91ti\n252EngOxFsniyPh8pm22ySE6Rtz1gkVIDDkGq0eiL/MPMjWm2Tq3br5rtq9nbva32NU+zbpf7tiR\n2ENhL4EKmlVs6ELiGIE1BEpj25pVOHTR57uQ9iKsk0BjbN7IcQInqOdoJOdTGOLOEH9O1621NWxz\nfxmJpFaNtw6yGmMtOy6aJRyahRTclF5a9XBoBtL6PZglThrvq2A348LOc3AI4KWxNS2ALnIOIFlU\nzUU8PJIqhpoB7oQuNkpjPz+J3rXZJkVI6AsWITHkGKw5En257kyNabbW6GY/ufEgOHs4/P4y5bwR\nr7dSaZ92XpPkCosmwnJoU+Lch3YCldTFRWrvBSePhGHQ22P/biUwxfK4qa2k7apcnBtvPc8RGJ/W\n7fFzuIVlGGvZL4Ewd+93ID3J0S5x0ngZ4sDoQ
 NmE9B4Om2PvHzM5RibYVYYYnoQNQJrHY05pKdf7\n/bbf51KohUeqCwszEkFmiJAgRUgMQQZr1UZfelIyDRdk69y6+a7ZOGZiLoZ9ImD82LqXwTlvJBqN\n0u9X26fTtYtEIiwpuYS6R8BuX4nlkS0EHmFq7wXnHAkjxGAkiS6l7vGwPq4h2FTmiXR0dLC4+DIO\nH76WqbkO1RjLTqR3e6yFnlBotwizhEOzskvVoVQrGhvZWF7ORtjnETQBbKqosL1+KjgJnCjAG/Lz\nubC2lnOKi1ldWMiZRUX88vz5nFlcbNnhsh3gJdA9Nnbf+Y6RI9lQU2ObL+IGERKkCIkhSjZ6A/Q1\nfZnb0RvRko1z6/a79uaY6bkYrY4G06yPgZ1g2bt3r+M48kSviV2SaSi0XOnaxMsjjX/H15xetWEm\nwlKTRDO/J+wmYBYU+FlYOI3nnFPNMYFSPgnzpkpE5gmHHdCfshONolUIIfFlCJBQTQ03Omy7AWBj\nba3jve2ESshlXnm5aW7HpkCApT4f1/n9SR6L1Xl5nIv4TA67dtiVXm/PZ+3mdagiQoIUITGEUXlq\nGkj0pUeit+GC3p7bTL5rJsc092bYN3tKHRmtck7ix7Eqs3Tu+Gh4PaZNC9FdxYbx7w4Ci9PElZUI\n08MxrYwnPqqLu0z7NsyfNs3WuLfB+YnaLEdiE8AfphhFNx6JhTU1StsuzIKQMK6JVdJmU1UVQ+Xl\nlkKjXdM4p7SUzaFQT3hi544dbAkESKQnWhr7XgOwBuZttlUrTswQIUGKkBAGDH2ZI5HtcIHbltWt\nrWHm59+Z8+9qfU4jNB8dvoHx4Vhm67IWcipek+7ubhYX1xK4jskdJqM95101TJLukdDzOszElZkI\n0ysrEpNE1cTd8OEXGIbDVd+GaDTKMr/f1mBHgZ4mSGa/N2sTnfqeYRTDra3KORJuvBfZwipp0826\nE/dlV3VyHcBiTbP9jio9
 MMwQIUEREsLAoa9zOzINF0SjUf7kJ8/Q75+SkO2v3tCps7OTlZWN9Hor\nqCf65e672ns+jNHhi+n3l8VyJ8K0nvFAqiRMWnlNOjs7WVIym+kdJjfHRIUuXvLzb+DIkfYiKz1H\n4gBVvVVGX4VQTQ2B6Yx7IZzLMv24hZMLxyh1iUylLRzm0vx8xxLHlfn5nFNamva0vtLrZYXXy2Ow\nLn9MNIpt4bBy1YYb70WuyXQtdl6OqX4/j+Xo+4mQoAgJYWDR17kdbsMFvRUByWLJ3Cvg9a7M2nd1\nk4uRy9BSvCLDquQxMZzyHv3+qTYVD4nbxv+t4sFJ7KvwHsAROD/hOzvM98BBVmFsWsKhasOn5oYG\ndsA+ht8OcKrfz+7ubtPZFOHWVlYXFnIezMsfU42i6sAsNxUeuaY33hErL0djeTm7YF3aardPJ0RI\niJAYsAyFyZ2ZEI1G+eKLraypCbGgYBr9/jLW1i4cEN89bgwfpv7kajZXos3WqKWHGgyvwIqYQVzB\n/PylDIez8wfbjTjIVmjJ7N7dvn1nTBzarcPwLHRx2rT5rK5ewJEj72B66KWJeh+JFhphGJVW19Fo\nlPPLy9muaT1JeX8L0IPbE9ZgLu5GxiotUksgVRs+kXEDaRXDb4mtaf60abbnV9XQNlVUMNzayuWh\nEGcaHRmLi3s6MiaeKzc9J3JNLrwjS+rrWQ/r0tZIBvs0ECEhQmJAMlQmd7ploH/vuKFtjhky87kS\nhqEze3Lv62ZhbsRBNkJLVtcwL+9Spe+tC6p42WtNTYh6HsOC2HmdSL1R1WLqIu49AhtMx4qnVlKM\nP/dcXoN4Q6JDsafRKoylltQ7IlHcXUE/zmcYyU2ZSPfGN9FApsbwDe/CewrGTMXQHoXu2UgUOB0A\nl+bns8zvZ2jatDTPiar3Itdk2zsSjUYt54cQzi2ynRAhIUJiwDFYe0D0lsHwveMioDH2snO9N7Gi\noil
 tH9ahhkTvRiMLCsqy4oVxe15VQktW3jL7Ukv1QVXB4Cbu2L6DzQ0N9J85KeVz6R4coJUVFU22\nlRRTp07lxDPO4Ebo3QwTKyMiAKsxNq05lOGFMPIPUoWBW4OXuL1VB0kVY6bSh6HC602aiWF4YNKe\nyE1aZfema2U2yLZ3pC0cZovDdboTegtwqdrIdMEiJAYUg7UrZW8ZDN87LgJCdO7DsIG1telPluYe\nCfOpmdnyxLjNO3FKmLTyGhUXz4wNVjM7H6qjs69jwDeRLYEAjwMMYYzS50aMmGj8MU+rpPjTn/7E\npqoqHox9wKxXg2HYjeZQl2MMr4AeIuiA+VO5Wxe8YSBfsDDqGwCW+nzs7Oy0vZ5OhvZhgKu83qTv\nZju0qg/DFqpk0zuiep2WzZ2b0VpFSFCExEBjsM7J6C19/b0zyUGJr9FuIFN8rbW1C9P2oQumxFwB\nhwS/LHlistFTxLnt83U258W5IgJYwxFnnM2fJ7wZBhjErbaf83pv59VXX21ZSZH6BK86rrostu20\nggLTp/JMkgI7OztZ6vNZutnbFY26naFNLTFVGqPdR4mUbsiWdyTXpa0iJChCYqAxmCd39oa+/N4n\nT55kScls5uWtYeqEUTsPQNxrkvlaT548SZ+vlPHqBWcD69YTk6tEXWuvkRGWKWN8Mme8N0SyYDKv\ndAEO8bzzLuamlFkK5jkM8ZdKkmXqE6mb7pEdsM5ZyCQpUMXNnjgcy64axMrQphpO1e+b2hlzqJDr\n0lYREhQhMdAQj4T9966tXdgrA5luyNUNU7xqw+7J2/oaxT//c8YrAxZl9XrnMmHVTVgmtTeE/ooQ\nmBsbF95BI8QSCGxkcfFlrJkwwfQPvlUOg2pJcKphVXpCh578aPeknklSoBs3u2o1SCrLQ6GkY6h6\nYOYp7F+11HUgkevSVhESFCEx0BgMuQK5QOV7e70rmZ+/zNJAOj2JR6NRFhfPpF5C
 mLr/eLKj11vJ\nmhrzklPVoVJm1ygcbouNyQ4TWE5gDoEiZssTk+uE1XSvkftW24HARt5xx52cOvUqnnVWWVJuw3le\nr6XBM3IYQhhLv2+Sq9BMqvF2zBmAnsXfDtiGGTJJClR1s1/o82WUbNjZ2cmZxcVcm7C92/kdVvt3\nU+pqR1+LkVyXtoqQoAiJgcZgqF7IBc7x94MErqBZ10VNe4Xl5fMcn8TD4TaLMkR3yY7d3d2xDo1W\nXg3za1Rfv4RAfcpxFpusJ/Vlnm+RSq5FaLpHQiXvIbED5UF6POfQaiZF6pO0pcFz6YI2eyK16uWw\nCeBcgOv8fqWkPjdJgdFolNcozrSoy8sj4a66wzCY7UgWSm48MD0/O7SgztQY90aM9EaA5LK0VYQE\nRUgMRAbj5M5sYPW9R468IzZgyWr+Q5Reb4XjwCh9quRcunmqthIFmVRC6CGV1DWqJSH6fF9wvO65\nDoulJ4qqVmIsJnArA4FSbt682XImhaoL2ujwmGhQwq2tbH3xRVMjY2UEjV4OXwRYMnw4qwsLeYlF\nwyY7VJICDQO6ND/fccrm6rw8/hA2JZvQ53HckFJlkHj+EoXSewAbAcvx22bzOzqQntvR2/BAb8RI\nNrwhVtepu7u7Vx4SERIUITFQcZtlP1Q6YZoPV2qIGSSrv2FtdCrHDAZbWFQ0k3pIwd1Ttd3Ey8S1\nGh0cQ6HladdA94asMdm/anjgZUdPVK4TVqPRaMwTYyQ+qh1vGC5gbXGJY1ljd3c3Z5eU9JRpmhma\nUHk5GysrkwzKMeh9E1Z5vZZGpj+bLSUaUJVSzFKfj585bNcOcLLPl3Q/mIVwjKZX8wFOBbge6d00\nzWZ1pFYxZCNhMVMxksvQRDYEiggJipAYCgz0jpC9xdlAqj0ZFxZWE3gyRThk5yne6RpUVYVsjmO0\nZd7A5HbQ8RbQABkMbrINS+TSI2F0ibxs8mSW9SQ+KiaKYoz
 jH/vOzk7OnT6dZR4PywH+L4CLoD9J\nLwL4RU3j/OnTOW/69CSD4qZHQn81W0o1oFZhlTtGjuSC6mouqa/nk3AOR6zOy0syuk75F1GALwIs\nApRndajum3AuocxUjOQqWTJbAkWEBClCYpBzOuRUOBtItSfj4uI5sWTHRA9A75/i1fI7JlLv3Gh1\njCiBFwlMY7xj4wEm54R0cO7cZZbrcJsjYRdztuoSeU7MYIQB1uDz9CbNqTA5Hm5hm8Mf+2g0ysbK\nSl4O9DRruhPJ7vz1AIuGDeO6goKkA6jE/1d6vWyoqem36gIzA5raInsxwMba2h6xc2lenmujq2qo\nFyqcs0yrTew8EpmKkVyVb2ZLoIiQIEVIZJm+DjGcDlUezt9R7Um8oaE5Vn75ArNZfhlfn/UQL2A1\ngR86HkcXEFa/76LPd6FteEtVVFq5dFefcQYvGD7c+MOY1iVy2dy5SfMibHs84CCrMbbnidfqj70x\nXtsYWmXlXTgE8NLYWo0ExDKoVSQshvvqgmzh1oBGo1FO9vlcG10lwwhdwLjtdJkNo5upIMhVQ6ls\nCRQREqQIiSySqxCDnTgZyH0nsiWqnJ/4H6bXu8r2HBhiqqOjI5b0uIbAD6i3u1b7rBX6NXAe4gXU\nOVynDYxXOJhfx7y8urS1JHoW5pWVcZS/NG1qZmIS6MmTJzmrqMiyu+IhgDMnTOBbb72VdK2i0Sh3\nbNvGS/PyeioI9kLv8fC51B4PKXMqjD/2xvTJRA/I8lCIiwEld/4qgDMRT0BshFqPhAU2RjLXZGKw\nltbXu/6Mk6v+IPRckvcAnoRenbIWUMoZyUYYIFMxkiuPRLYEiggJUoSEC+wMY65CDE7iZNq0EAdi\nJ8xsiyq7KomqqiaWl4ccz70xVEqvnDAGPzURmEqrjotW1824F0Kh5TzjjGKqDPECJtts006gkmbl\nrfFXC4En9fsuJhzmlpVxit/PO/Pzk6
 Y83pCfz0J/CadNC3HWrOu5du06fulLX2JpaSkB8FaHP6Cp\nf9AND0ZLalIadGN+JcDLY3MqGjGGbUiPvXdAL2tMTWqb7POxEfpUThWD8cWEn5W7NgI9a1JxV6uW\nGqpsl4kBddMBM/X/E7uk0r3PPNOTI9Lc0MCdO/ThaCo5I71NWM1UjOQqR0I8Ell8iZBQw8kwPvPM\n3qyHGFTEid9fxlx6JBIN5qRJtRw9uopFRXMYCi3ntm07TCsUciWq7CpZVMoxrUMkRrKjWimncS/o\nA6qOU3WIF/AFAg0Ekr0F8aTKeXSu3viMZ3rGs9Lr5SKAtYClZ+EgwHM8Hqb2bZg7bVpGw6asDEA7\n9LHc0xHvc2CWwHcn4r0KEvsjXASwAvoTshvvAqGWI7EJ4A9j2zVBr/KwMw6qmfyq22ViQHvjAchl\nUmlv952JGMlV1YbkSGTxJULCGTWDPpX2JYqkW4Oukv+Qn38DR46803abTHMkDIPp96+j3kiphclu\n+7Wx908y16JKBaeSWfswkDGeejH9/jLLcttoNMrKykYCDzGeCzHVZr/xaw9cFds+RL23QmpSpbmg\nSa7e6ODlGNNjtFbGjPgSCwO+9swzedttt+ktl2NPzHOKily5dFX+4G6ALgwML0UTkksKDyHeq8Cs\nP8KT0EMWbjowEupdKqMJPzcBbKqosLyHVIxWd3e3K+OWiQHtz5LVXJKJGMnFuZCqjSy+REg4o9q+\nWU+0s/s76C7EoJb/8B79/qk5efqPhwHs+hy0M7ENcq5ElbGm3uRcZKPPwjPP7KXXW8HkXIjUJlfm\n+42LhJk22xuCppnAhUyt3kisgjBe7dCf5o1kxUQD3oH0cILbigBlF3DKmpqgN0NanZfHubF1WRn+\nKHQhscHhOJuQ3IGRsC6ntOqRsAF6hYQZKqLpjpEjuXP7dtdPs24NaDQaZeuLLzJUU8NpBQUs8/u5\nsLZ2wM+2yBW58
 LRkQ6CIkCBFSCigmtCoP2Xab+PGeKoavmnT5me9E2ZcPLltg5wbUeU258JMdNTU\nhNgbgRONRun3T2F6PoXq/bEi9t9qF9vH30utgkgyWjEDazyBG5UNywF+AWAVwJ2x99sUDHaiEVRO\nSkt5b6XXy8baWs4sKmJX7D27UEQndO+KXRLoXJiHTYxyysUAp8C5R8LC2lrT3AbVNt1FGZRnuiFb\ncy0EZ3orUERIkCIkFFA16B5Phe02bt35bioy3HbCVD+2GyOZ+HP2RFWyd8SsvDJ5YqeV6MjPv4N6\nnwarVtv21ygcbrOoDnEjtroIXEqnoV96ueiTNESh36QKIs1oxf69FuBspLdWXhsz1B3QvQJWBjvV\npZuJRyLRkCZ+3ik5shN6iedtSJmBEQxyTmkp16eMGU99rfR6GXZYaxf0rpBmRlq17LIEivkcLksS\njfs9l0OmhOwiQoIUIUFnl7mqQfd4JjL5aTWxr8Dl9PvL2Nqq7pZUDans27cv6+ckLp7URJTuto//\n7PVW2X7GjagKh9tieRrW5ZV+/7oe4aTns5hXYdgN/wIO2oaBrO8Do821+RCv5CmYeofNCy6otdn+\nIEeNmsqLL76G5eWNLCwoZivMn66TjFZsm3pYi4R2gJMRL/9bnZfn6NJtC4d5Z36+3Q2QNvTJWNOc\n4mIurKlhpdfLZujhiy6b/RDgZwAvKSoynYngZGCn+v3scNh/B5IrPxJf10G9CiRXHolcj70WsosI\nCfK0FxIqLvNwuI35+fYJjUALR4xYwpKSS2IhhqPUSwI3Wu7XifiTuHnDH91AXcGqqqasP5301iPh\n95dlLW9DH7ZVT/uKhrlsaGiO5TDY94UAVhJYytSERq+3gnv3Wosye89UhPpY8LVp+01sc52Xt5LD\nh5/JQoCFGEt/Sv+Fz3lvZ0VFQ9L94cYj0BYz6nbbrgX4oI3BNkswneL3uxr6ZKwpNT9jDXShY+
 VZ\ncTLAKuWNTkZ4LdJFj/Fqi/3e7vMt0MNEKsO3du7Y4fr/zVz1TRBygwgJ8rQWEqplit3d3RaxceNl\nPHG+x4aGZra2hmMJhxYd/1wYUt0wVtIukz8XFRC9yZEIBlu4b98+x7wN1eRJfdhWi8MaNrG4+BLl\nclhgIXXxk1g58Z5tuMXZM9VNoIrAdTRvc32Qfn8pK88+m+2xAU5hgA0J/RceBthUVeW+D0HMOLrp\nq+DGGM0rK2MT1BMaieRyz8RXYgWH6XdRmCJpFdNOHZBllJgaDbQegi5krI5teHQsB4chnoPSaLOd\nkQB7w4gRLPP7GZo2TXmqZK46OQq5QYQEeVoLCTftpcvK5lF3X9uV5ukJhNlsW60brw7GGyiZGSjn\nfAO3FQ+9qdowRJJd3oab5MnRo6scDLh+DgKB6THR5TYUE3/fLgFU5boCNxEoJXBr0n3i929gdfUC\npSdms2x/W5d+gmFuglrs/kIFg51Ic0MDO5A8H6IM4CMWRtlJLNwBc5GRjfh/JBLhvPJyVni93Ijk\nPJGvQp+EaecROQHwCx4PN8BeNB0DONXv56ZU7wjAEPTBWGkjwBWSJcUjMbgYskICwK0AOgD8BcAh\nAH7fI5AAACAASURBVNU22562QsJNMqMbg57NttXZKFnMtMuk0eRJz0+YS2ATk0XUmtj7J+mmSsRt\nw6qiojlK52DEiMnUkzxVPRKpeRL21+Szzz7jRRddSbvchmHDivj3f7+Nzz77U1MBlamRMFz6ZkYr\n0bipxvinA64MtplXxKrsMrHc024NdQr5GZlgCK92mwZadiKnA2Do4ou5ND+/RzSZVYG0BINsC4e5\nc/t21uXl9WzXBt1b4WaWhdO5Tn1JjsTAYUgKCQB/C+B/ACwFUArgEQCdAEZZbH/aCglnIx0l8HMW\nFJSxqGgO8/IuZXwIU/r2hpchG8bfoLeixI3RNvNatLaGY50tm1lUdAkLC
 6tZUjKHDQ3N3LFjJ0Oh\nZtdVIm49NnqOhF0jqTCBRbFk12uo5z/YtZreQGAZdU9LvILjc97bGaqJ1+lbTcAExtHrvZ3JIZtN\nSiKqN25rw6W/rL6eF/p8rMvL45Ox7Q1DXD5+vGOMfw3AQq+XS+rrlXsSWHlFjLLLLwK80Odjc0ND\nUrmn3XecU1yck+6LbkJBVka6LRxWrpxIFYcq3TbthIBUbQwuhqqQOARgR8LPGoD/AvA1i+1PWyFh\nb6Q7Y4YmOVlSN0KzCSyhVQliNj0SvQ2TqH5+7959ORk45v68p5+fcLgt1o7a6hqlVnKsInA5zcs8\nEyso4v/WcJBVGKs/UTtMwPzTn/6UcaltttzWVnkCXV1dLPX5LBMj2wEWAfwU7vsSqDbv6W/XfKbl\nqqlGWvX7popD1TwVu+8/VLtaDkWGnJAA8DkAnwFYkPL+dwH8q8VnThshkfrEXVOzkPn5Zk+vRjmf\nVV7AIeou/S4araJ9vlIeP36cpHrZZk1Ng2OewosvtsYSPdUTNxO/Z0FBGXV3v7UnJRfdMe1yMtx6\nbMxLOp2u0UEC5QTeo1UFhf7awHxck9ajwWoCZm/pC7f18ePHOXnEiLTJjmugl36mGjk3T7gqzXv6\n2zWv6vWp9HodjbTK900VLqp5Kk7JkrmcmSFkj6EoJMYBiAK4OOX9/w3goMVnTgshYZUnoJcKpj69\nuq9U0LT2pBCB/dhrI4Gxw/KJ/+TJkywurmVe3kwCRbHXeia6073elWmlglbfMz7O2uwp/UXlMdy9\nOdfGd62vX0K3Hpv0oVytdB6UtZLAlTTPZ4kfpxZjzLtFmhg71amQVvSV27q7u5s7t29ndWEhS4YN\n44WaxgdtDFw2DXt/u+ZVPRILa2uzYqRThZPqFFNJlhwaiJBgXEjMmjWLTU1NSa/HH388aye7P3E2\n7Adj8xOMp9dFSoYutYVxorG1mkZp9lSc+sR/8uRJ
 +nyl1MMoxxM+u5R6Z8aG2LEfTuoh4fw9E936\nie+rfd+GhuZen2tNe4WlpXMYCNiXc5oJl8QqEN3TonKNmh226WIlzlb6Y5+ttsV97bbuj1BDf7rm\n+9ojkiicOqE33XLsRSHJkoOSxx9/PM1Ozpo1a8gJCQltmKASahg58g7W1DSysnJBzEhlUkKY/BRt\nGL7a2oWxTo9WT8VxwxmNRllSMptqXRKTDa5aeWKyJwWI0uOZovR9fb7JjgZALSdjE4uLZ7oKpaR6\nAs4qmKx4jeY5bNPBRowx/WWi+9npKfsQwFKfj8tDISUPRV+6rfurL0F/ueb7wyMSiUTYVFXFCq+X\nh2A/kbRdkiWHFEPOI0HSKtnyAwDrLbYftEJCtTeC2+Q+9SFdK1LeM6/EcHP8cLiNeXlrXIiB3qy7\nk3pYp0bxc1c55kqormHu3GXKg8bMPAFzMEbpOHl5dbbbmE3TNF4diD+lqzzlbgL4Q+R+sJLb8Ep/\nJz/2B/3hEQm3tva0ErcqjV0LcE5pqSRLDiGGqpC4HsAnKeWfJwGMtth+UAoJN70R3Cb3ZfZkT1pV\nYrg5vnsxEF+36nH0XIl36fFcRD0pcS/1Sge7z20g0OiYK+HmuzoNGuvq6uKxY8dYc/75abMjwgCD\nuNVeJPR4PqznblhN0ySS3c9uKwFylQeQSXilv5Mf+4pUgbU8FOLO7dvZHAr1iUck9R4xSmMTe1E8\nCbC5oSEnxxf6hyEpJEgCwC0AjkNvSHUQQJXNtoNKSMQrGcqoP00b5ZfxcEGqa9ytR6K7u9tVeCFu\nuMyNrJvjq4uBBUxdt+pxRo6cSp/vC9TnQkSpzwS5nPYVEE00EkR710aalvvo7Ozkvn37uPSGGzjl\nrLM43uPhGIALkd48KAqwCmOpWVaz6MmvnZ2dLC2dzeEpnSaDuIUBjOXPLRaZKgQyGaWdbeOcqcu+\nv5Mf+4KBMHZbWlufngxZIeF
 qwYNISBheCH2Aln1FgtvcAWN74xh+/3qad3O8k+klhPYlkm6O79Yj\n4f576k/p+jyI44xXqERi38ssObSCwP8TO2bv20gHgy1sbW3l66+/zkceeYRf/vKXWVpaSgAcC/B2\nJLcV3gg95pzaKTECsNpk8NVw3MrS0jk9xmN5KMQfID7TogFjuAPgDdBbRV8K8AdIbuyU6v7OpDdB\nB7IbLuiNZ2Eo9yUYKELpdAwhCSIk9AUPEiHhviIh/tSrUrXh90/liy+2pmwXZXJL7Gs4bNj5DAQ2\n0imu72btiSKktTXM/PwbqHtaEhteJXo/9LBKYsmp6nHiFRNN1D0bIep9JpoILCewM3bM5GFWQF3s\n3/YeCedzfYgFBSXMz88nAHq9XpaXl/Omm27izAkTLNsaW02YjAJ8EWABxrIkNvjqB0h2Hyc+KXbG\nREnqDIQ1ACdoGm+YO9fU/Z1Jt8RsP3321lAN1b4EAyV0M1DWIfQtIiQYFxKlpXWOg5z6E/d5C8lP\nztblmBtiRvQY8/OXOvZTCAQ2cceOna67GlodP1GEGN4QfQ1WHpd2AnN7hkClihen48R7OCyhPprb\n7ljG9+4icCGBqFI/iRMnTnDKlCvp861LOde3MC/vXM6bN6+nS+Sf//xnkr1ra9wBcDHi3oAugGV+\nf08ComGAjaFWVtn0h2A9f8LN4CwVo54JuXKd97Y3Rn8zUDwBA8UzIvQtIiQShATwKnvbEtnthEk3\nn3GfhJj+5Gwcy++fRuAKppdjZq+1tdV3tUouVGtiNY3DhhWxvn6JrXixO46eg9FFvc23ag5IB4Fl\nluGbkydPms6k0DQPCwqKOXr0dE6fPo979jzO7u5u0zX3pq1xC8BWxPMTDGFhxMeNiZu9nYFgGR6A\n+SjtbD995sJgDoTcgt4ykHIThnIISTBHhESSkDjc8/9dJi2RrasoWlhSMpv19UvShEIuKi+MJESv\ndyX37d
 uXtk57z4b71s1uhZMVqr0uwuHeGSZdkD1J3Xtj9z0TvTsbmJ+/lNXVC3jixIme3IYvfelL\nLCkpMf4nSptJ8d///d/K68okmZGIewLeSxAZiZ4L4ymwoaKCs2ICown6PIQ2pIdKrAyx8dS+PBTi\nzKIiVhcWsnjYMF6H9KmQUYD/CLAoL4+zi4qUe0vYEY1GuWPbNq7Jy7M9R27Ey1B5gh4oHgmDoRpC\nEswRIUFzIQG4a4msEhdPnE0RDG5mZWUjy8tDyk2J3HkkXiFwRVLXRwP7/agdY8SIyayvX8KSktmx\nEELvh1xlc9CX1TUKt7YyVFNDTblvxAoChzh8eBGXLLmBFeXlPMfr5dnQkyKLJk3izTffzO9973t8\n++23e/WHUtUYLIa5J8AQD2YhhrV+P+uKivhVJOdFbEZ6EqfZk6vVU/umQIClPh/X+f09T59HAZYD\nXJVyrFUeD6f4/dz7zDOuz5Nx/JZAgPWA5UAut4Z/qMT0h8r3EAYnIiRoLSSA91hT06D0tJ1Z34WH\nXc13UDvGBuptpPWqisTPG94D+66VKjM2NlBPUKynVWggE49ONkePp5JoCDsA+nC+0rGASuoCcDTP\n9Xq5Ki8vZ+5vFWOwDmAj4jX5hiegHeBc6A2hUkMMUYD1QFofih7ji2Th0YHkJ1enp/Z2TePs0lKW\nFRTwcoBTbQx9O8Byj4cXFRRwXlmZUi5C6vGtGh1tysB1PtCe5DNlqHhWhMGJCAlaCYlOAo1pSX9W\nT9uZdYJ09wSuUnkBTCKwI8FI6p9PDqEstjmuMVHSqoHRK7Hfz6ST4HDj0Uk/h1ECYaZXbrzn2iNh\n9ke2XrErJLCQwGccOXyidTVFlv5IG+s8aGOEJ8fEQqIBvQ1gKfRSztQQA6GHL1ocjGViKCT1yVVF\n4NwxciSX5eer5WAAfBi6J6QDcTHW2dlpmvAYbm1NO35qo6O6vDw+uHOn62uQGk6KQm/
 01Yx4+OdF\ngE0VFb26tn2B5CYI/YUICdJESNgbU7OnbbWn6c9iBtgwjmXUJzhajbYmM6m8SK460D+fLECcvA4R\n6n0T7mB6P4UFsWNUKxliN0Y/7nHpjK0/fXqn11vBvXvT8z7sMDOEKl0h4x6kDhblnWtvHLPkNo5E\nIpzq93NDilgwQhidMQO6GGBZzJA2xLaxWlszFCcxwlwUuQm5uDlWonh5AfqcjhaThMcpfj+Pqewz\nA69B4nezKovdCHCq3z8oDLHkJgj9gQgJ0kRIOLv3U5+2nT0SndRDAWtSjONGWo+2pqkxNjpbejzn\nELiIuiBZSP0J3hAlRtXBe6ytXZgSEjGEkplnI0rgn2L7nE1dMFxCXfwY1R0tBOYw22GIaDTKykrn\nDpOqIROjkuLSSZPSjJtTV8jEqo0z8lbyyRwZMjPCra1cmp+f1FY41dOQaISdvABNsB6dbby6AFZ6\nvaZPrqpJoE0ujrUAcUFhlKRahV4Oxn5v1ca7Z58ZVCQYItOpLFaGTAmCNbkQEh4MenYDaLbdIhJp\nxtatu0ES4XAbTp78EF7vdoutCWAZgLsBPADgfACe2H+3ANgc+z3TPhkM7sL69UuT3jt16hRuvvku\nRKP/F4B9AH4JYBuAnwO4GsApANUAypCf/w2QnyISSfw+Wuw73hs79nHok9ePweutBPAmgJ/E9vcU\ngMsBfARgKoBXAbwOYAL0OWh2fIBx4wodtklYlabhrrtugtdbFlu/GTV4550yvPTSL5Le7e7uxq9+\n9Ss8+uij+PKXv4zS0lKcddZZCIVC+G1HB8anHgvAfvweVVgIL25D/Bwch35O7gXwGDTtNfjO2Ivr\nHNY+HsBHH36o/F3tmHXZZYiUluJGTcO/AfgOgLrYmoH4Fbg09nMdgKMAXrHY3xlQuVLAeTNm4On2\ndgQCgaTfFY4bp/T5kQAKFY9ViNg5A/ASgOkALrbYvgbAFAC/sP
 h9zz7HjXM4cjp1s2bh6MSJeDS2\nBqu7bgaJsnfewS9eesn1MQRByIBsKZK+eqHHI/EwgUXU8wyWM72bYuKri9OnhxLyDjqoz2swC4e0\nUQ892D2obWK8o6KRE/BwWtWFkSeh1v+gg37/NJaXN9Lce5DYtbKRHs8XbIY7tVMPd1RQH0u9l9nO\nkSDVc03q65ea9m0wukTecsstPZUUy0MhS3d7FOBegCNxPoFy6vkjYQLv9TSwWlJfr+Suz+YgIrf9\nGiKxJ+rbgbT4+CUlJdwUCNiuf3VeHmcWFZkmP+YiR+JAbH1lAJdCPRxiuc9ehJYikQjL/P4hkXQp\nCP2BhDbIHiHh8RhJiHYdDuPGbMSIC1MMr9WshkuUjCNwadLxvd5VLC8PJbma3VWHdHH69AZF4/wD\nhdHdd1AXHkbCpVV4JLOqDdJNr4yzCaj1bVAxhF/Lz2fN5AtZWFDMUf7JrK1dyHC4jd3d3dyxbRsv\nzcuz7b2wFuDM4uKsxtET491lBQVcDPNkSuP1HsBQTU1afLy7u9s2o/8Q9IqPLphXoqhWBDRWVrId\nuqCxLM9EvEKkBeAj0Gd9OIVDPgNYgeQkSOM6ZCPZdSA1dBKEwYYICTLBI5Fa/klaTbkE1hP4W5Pt\n40/5Xm8lq6ubOGxYsaJxXJD2fu96Sej5FSriIy/vUhf7JXWxspd6HsUqJgonr3cl/f6pfOaZva7/\nuKt+v+nT5yn3bXAyhAeh5wd0IDnJb+706QyVl6cnACK594JhHNth3V66N3R2dnJmcTHXOhi6TDpS\n3glzD0eqcVapCDC2Wef3cy5MvCMJx0oUFJfC3iPRCb18NbUHxkaAFV4v55eX91rADZUyUEHoD0RI\n0ElIGEYzsf/DKwSmxoyn3d8evQ/F6NFVLo108svrXcmamgaGw22uulsaoQX7stEogYfp8UxU3G9D\n7N9HqSd6rqE+FbOMes8FIzTQodSYqqurK
 6lL5LnnjiccqikyCZlYGcKVXi+vMDGkUYCXA7almGZ9\nG1qCwZ6SxWzMbTBEkPGkb5cMONXvZ2N5ueXxEj0cc4qLWZeXZ+vhSBUmKhUBxjbNoRAvOPNMTgJY\nCb2iIwzda5IanvkBwNUWa3BKxMxWEqQ0dBKEzBEhQRUh0UE9Z6GD8RLIeQ6G9ySBywh8le7bMZsd\nfzGDwc30+8uoJkqm0+e7kKHQcobDbezs7DQpGz1Kr7ci1itjkeJ+p8U+20i9b4VdBUi6R8VqJoWR\n23DzzTdzwoSZlrkamYZMyHRDuLC2lsvy800NqUqsfzXAB5E+pKrM73c9t8FqaFRiDwWrRky3Q2/y\ndMzF8friCbwtHGaFx8NWwLYC5TPoU0fN+nS0AdzgsM5sGHhp6CQImSNCglQQEsbkx8QBV3Yu+JME\nShlPiLQ3tnoio1n4JPH4RtjDuRum7iX4IY1ci/z8O+n3T2FZ2TzW1CxkTU0Dy8sb6fdPTTDYOwms\ndthvC3WPw07qZaukSqmsz7eO8+bNV55JoTIlNBvYGVM3/RASmxg1ArwI5nkUVsbIbmhUag+F1EZM\nZdCbO5mJITvj1xc5AdFoVDmJcUl9vanH6NJYJ1HH65CFkIM0dBKEzBAhQSp6JBamGHorAxql3nQq\ntUrDPBEzL28V9RbMVn0kjOOv6Nm/11vhUF1hJkraqYsZPeRQUjKbfv/6hN8vpx6qsOtoqfelSG5G\n9f+3d//hcZV13sffdxMQ6Y8kAmmL1iLpT8S2JC20QlIQTZW2IOo++7Bqo1vUfVAEhKD8qLpdkEtb\nVlp/odhlKa5VuJ7HKgUthW3SYttQkqXFVbSFslZpKdBppahgk+/zx5lJzkzOmTlzMpNM0s/ruuaC\nzJw5cyenyf099/29v3e0nIZRoyalraTIdWeXbffOfIXd7WfrTKPWQ7iI4CJGQXtYGMHTBbnyN8Jq\nKPRlJ8/+yglYt26d
 XV1WFqmNQVMnF0ya1K9JkCroJJI/BRJmEQKJqw2aLH0FR9goQ6v1rL7IPI9/\nueU8q6iYbieddJp5qzr8ZaAzg4DMaY8dVlHxjoDqltdaao+N4O/Df56t5gUwqc9amPx6ofVedXKz\n77xHzRtt6fS9rzj7YxRCtrv9bHfLUUckphGetxC0eVZm5xxlbv4GeopPxWljUDDQXzkB3TkeMacM\nlAQpUvoUSJjlCCTaDKYmO9zMFRypUYZrfR3vZckOOVfn+qLB6QZXWfYlp0GrRo5abe3CtDv2ysrp\n5k1nZCu3vcfSEzpvsp7AYrF50xZ7rCfYudjSp3O8c5TzNst3RGLBgstDRwaKdbeX627/Tgi9W45y\nt/95sKYcx/grUBq9754jd5QBz0euIhlwt96fOQF9mTJQEqRI6VMgYeYLJFIJlf478XkGH/X93coc\nHWiznhLS86y8fKJ50wTZOtcuy7ZzpnfOecmOPmiEoadsdmozrrKyOst/ieke6wksWs3bNTRHvgNX\n2B3496nInSNxfPlVNuv0GjuzosK+MGJE1iTEQgYbuTqhLrzlg0F3y7lWbWwFq8FbcZCtdHNmELCH\n9LvnqLkKFwY8n8+IRNDPdd26dd7W3P2QExB3ykBJkCKlT4GEmS+QuMt634lfbT0bbXm7T/ZewZHq\n6I8mt+j+cY7OtdW8UYxsfcA1Bt+woBGG4GWdcXYf9QcWXeatxMixzwVjrBP/PhW5Ekm32jTG2HzC\nixRtA7tgyhR76aWXQqch4mzVHeVufwfehkxBnen7zjrL5tfW9nrtBrzRgB14Iw5BuRD+IOBi39eZ\nd89RRySmB7TxoyNGRMo/eDAZMIT9XNc98ECfcgKKPdKkJEiR0qZAwizL1MY280YGjlrPtMMCg8nW\ne8jf66hnz55vlZU35+hcPxij0/ce/uWP6YWmco8M9B5N2ZNsS+rrhMH7zCuDfYOlFZni01bLmO4O\
 nMwE2izFWwRXm7Qa6sNd7RnKFzWKMrSP3NMG1YG89/viCbtUddLefuU30P4K9c+JEa9m4MbAzTXWS\n0ysq7EKCly8G5UL4g4DLs3wPUYfuW1taet3Rt7a05LxbXzhzZuw7+igBQrYclDjBXxglQYqULgUS\n5g8kHrCeaY2rzUsq/IilJ0C2mVeMKnikoKWlNbkXxqMWXC77C+blRkSZhqhLe2/m8sf0KpC5RgZ6\n51pUcoVN5k1WxRW+z3nWhnGJDWO0nch4ewPjbQ6jrSWgo+wC+wDYHMZYLWNtNlU2hzE2iVNtAqO7\nl0BGHYI/L8cx+c6FZ97th20T/bny8qydXqTOnuCEyJvAfkz43XNfh+5z3a2vW7cuVo5BlABB0w4i\nYqZAIi2QOOGE0wxqzJvKuM/SRyL8CZDXW2bxKP9IQaoOQmXlTQY/slT+BNSbl0+xyKKNSLzHhg9/\nu500aqpVj5pkF82eYy0bN3b/Ye5d5TJsr4/MKRgz55umaAGbzxir41R7F6NtPt6d+h5yVFMEOz3Z\nWfo7sTnOpXXgUZMC3xsh2MgnO98fAKQqJLaRPiKR2rMhW3nruAmR28CmnniiLZ4/P+vdc1+H7rPd\nrcdZ9RA1QPAXy8onSBGRoUWBhPUEElOn1pu3LDLob2L6rpreCofwQkmpqYc5cy61srKZlj4VEmUa\n4nM2/PhTrTm5RDHzjvCBBx6wN598ZkBA4l9iOt/gTBvGpebldiTbm5xyCJrXvxJvNUNq1UJYNcWb\n8TZRWkd6gaT68nI75y1vSQscoo5ILI4QbORTL8DfIbaCXUf2mg/XVVQEdnpREyLnxQgC/G0txtB9\nnMJTUadbLp09W0szRUSBhPkCiZEjg/e66Hn07Ko5fPjUSIWSgve5yDUNsc2Gv+G00P0FtoLNwFsx\nUJVjX4pK/o+toGfEoZrRoZUQ28AuwBtluAZvo6Q2eldTvBxv18bMQkmpO9XM
 bbujlpu+rwid0sGD\nB+2dkyfbVLApYB8kpOpkMhAI2go86l39rOrqkpu/jzMiEfU900aN0o6ZIlKUQGIYg9Qrr7w/xxGL\ngdXAXv72t67MYCSQc44NG1Yzc+YtVFbeBDyH9/O+hTI+wTA+k3yuC3iOqqolTJnyBf7pDQc5J+Sc\ns4EFwFighv+LY1vwZ7ONifyEK4F17OcJnue3vMBDwJK0T/W+vhV4A7AGeD8wGvgYcC3wVuC7wApg\neFkZ3y0r45bkd/IcsKSqiltmzuSehx+m6frrWVVV1d2OeuBJYHvI97M9+frOkNdTVlVVsai5OcdR\nPRKJBE2NjbzrwAF+Dvw3cDvwCHAJcMh37CxgJvD0rl29zrOouTnt+wlr2+33389Pn3iCux54gPqG\nBpxzkdtaLFHb7v+5Hti3j3E5zpt6fW+O4/YC1WPH5mqmiEi6QkUk/fWgO9lye44RidRyyZsMzrZU\nEakou1x2dnbanEmT7dzkyMCCZALjxuRowRROtco3vs3mzXuvnX7iiZHn5FOrJ9ITJvdYOVfYyckV\nE0FJkj8CO8O5tI2UWpIjB5krGy4Fm5/8//ryclu5YkXoKgez4Dn2bFMkF9OTCBk2CpNv4l7OeX6C\nq07Oqq7O/1wlnFSYre1deNNY0yoq0lZlZI4ohf37mz97tnIkRERTG5YWSKzLEUjsMfiQeYmTi9Ne\ny7UrZZR55yvAJk6YYNNPPjnSkPE0epYw3gZWzRgbk0yY3Jj8Yx+258M15eW9phIW49VGyJZHsINo\n0wtBCYTPgn3IOTszGZhkLqV8FGzq8OF2UwHqBcRZaXEU7ILJkyN/P3Hb1t+C2v4kXjGuq8vKeuXg\nnD95sjVXVOQMEKIsPy3VAEtECkeBhC+QyJ0jca15qy6us6Atv1OFovyOHj1qO3futHefeWbkueqo\nc9T/4OsArsarxBiUQJl59/24czblxBPtaMZxC5KPbHt
 HLARbWFsb6R9XUALhgw8+mLWa4sGDBwuS\ndBhnpcUegnMksn0/pZILkYu/7Qtra+0dFRWhNTvakv8+wgqI+QOEwRxgiUhhKJDwBRJTp9Zn2VVz\nm8EFyf+Gbfm9xxobF9lDDz1kS5YssXe/+902cuRIA+zNRN8XIW7dgmyFkTLrGXyksbFXR3sR2I05\n2ngD2II5c3r9Q8qnumF/dMiRVyv4vr66vPyYGIaP8u/rxspKO3fy5EgBwmAOsESk7xRI+AKJlpaW\nZP2HGy29DsNN5k1n5Npd86jBqQbYySefbAsXLrSvfOUrtnHjRmuaNy/aEsj582PN72cLMFLnnlVd\nnbZdc2ZncinRlmlemhFI9Fd1w3zkOyLRhlfzodQ6v2KUn476s0l9lgIEEcmmGIFEeRHyN/vFyJEj\naWtby6ZNm1m27BZ27XqWQ4eOUFl5PInEa7z44jnAMiAsG38vM2ZM4/77W6mpqUnL2n9qxw6+sX49\ny7N8/jeBGfPm4Zxj9YYNNDU2Mm33bhYnErwV+D3wPbzVB/eEtGIx3uqL+oznxwFjx42jvqEBgPqG\nBpbX1LC9vZ1ZXjDFUYiUrd/5+uvdX5sZTY2NLPGdB2A8sDSR4PEnnmD+7NlMqanhxf37qR47lkXN\nzUVb1WBmbGptZd/LL3NHWRlf7+wMPfb7wHvwVqxsB2bW15fESouU1KqTGc88w5JEgnF4qyBWbdnC\n8poaVm/YQGVlZd7njboq48X9+2mYO5eGuXNjtF5EJL5BG0iAt1xz7twGzjvvXH7961+zdetWtm7d\nyiOPPAq0An8X+t6qqlWsWHEjEyZMwMxobWnh3uXLObBvH8///vechNdhzQp473bgV8Ch9evhgb+L\nswAAF99JREFUyiuprKxkbVsbmzdt4tZlyziwfz/P7drFyj/9iVsJD2XGAQcCns9chhcUrJySPG58\nlp9P5nk2b9rEjGeeSQsiUhLALc
 Cc3/6WK3/724J1hGH8He+3EgmuBB4Hzg44tg34f8B+oAmwykrm\n3XhjwdrSV7kCtO3t7TQ1NrK2rS3v4Kd67Ni8r7OISL8q1NBGfz1ITm2sXLmyV25DWVmZzZgxwy6+\n+GIb9cbTLazypX/VRtBQ/zywl8m+BPIlshfviTwkTe8y0B8dMcJaW1p6ndM/v33uxIn2ufLyrOeP\nuntlqiR1aOJmgTP64yw5TRSpLXHanjl9sfKOO+zmIi2tjFq58ljIFxGRvlOOhC+QgN65DXv37u0O\nCnbgbZ9dkVGzwV8iOyy/IVUmOqhKZGoJ5B6yL62M0gFcC3Y+vZdvXl1WljNfIU69hLCkxijVLAvZ\nWYX9bPw/77PA6srK7Md4iZZ7GPjVBWH5JeeVlxet/PRgroshIqVHgYQvkFi7dm3aH8+gP7ipYk2p\nIlKjKyZbS0tPAlpYh1aIjjVXB7AFr7x1lGV7YfJdzhc2IhF1f41C7cMQdbTm0jlzSiZ5MNv1jLrR\nWdzy01q2KSKFomRLn7uXL2fV0qXdCYFm1mv+3wFzgbnsB2DJsCqGObrnqVcvW8aSRKLXueuB5WTJ\nkXCOnRMmsLQ+M02yR7YkzFVVVWysrubv/vhHzj5yJPD9s8yYtns3j23e3J10mSkoNyP181gakIy4\nqLmZVVu2sDTjez5AtMTNA/v25TgqmqgJhJ2vv85d69YV5DP7Klt+STX556vkI9/rLCLSrwoVkfTX\ng+SIxDrSly6eWVFhO/K8q85WvyA1Z5+57XahdoqMWtq4kLsx5prKKbURicztsgu9tLJQbe7vqSER\nkbg0teELJNoz/lBvpfcOl0HDyxdMmtTdGc085ZSsHVon2BfBphx/vJ3xxjfarOpqW7lihXV2dvb5\nYsbZMroQgobJf4SXr9FfHWG+CYSlUPsi2/VKJav2ZZpKRKQ/aPfPLGYDZwKPZTlmL3D02WdZ8uCD\nrO3ooPnFF
 /lGyLEJvF01XwV+8frr7PzLX7j2wAHuu/Zazhw5kqZ589jU2poKbvKWWtaXTTGW9aWG\nyd/zk59w6/z5XFpXx4b582mfPJnHQ4bIU1M552WZyslHfUMDT9bUsD3C55n1LK1cmkgwHhhGz9LK\nJcmllXGvQ1TZrpfD22f2i8DnysvTd2r17bSqKQgRGZIKFZHEedCzO3bq0Qlcn+M9gSMS3cPhIXeM\nLWDngl0A9n68EtML8DbTujNjJCPzDjO122Xm6oqb+3BHHOWu/Jrk7p39cSfb3wl9UT+vVJY/RmnH\nTZWVtnLFipJJEBURyTTkpjaAPcCNwCl4OWvVwBtzvCc0kDgKdmHGc6kg4IaMIODGZCCxA28TrRnJ\n/88c6i9WjYVcqzra8OpZ3FxZ2W/D9/29D0OUz4uTT1GstmoZpogMdkM1kPhsnu/JOiIxvaKi+y73\nKFgj2LawIICefTC2gU0oL7eFtbU2q7q6u/MqZiJd6q6811bcRCvCNNAJiHHk2+aByiUJEmUUZTBe\nExE5dgzVQOJ54CWgA7gOKMvxntBA4uaqKmttabHWlhZbfNFFduab32xznOuuGNlK72RM/8ZZV5WV\n2abW1rTOq9grGrq6umzlHXdYfXl5r6JX2YKVUkhA9H8PUTrPOG0ulREJ//caNopSStdERCTIUAwk\nrgYa8PIkPwkcBJbneE9gIOG/a0/9Qf9csuJg9x90vGmKRGYnlNEh+TuvYhYbSnXAM085xeZlCXYy\nO8tSGmaP2nnGbXOp5EjkUkrXREQkzKAIJIDbMhIoMx+dwKSQ934MeA04Lsv5awE7Gy/H4UKwt4GN\nLC+35uuus87Ozry29T6a/NofEPg7r6gjEtMqKvK64wztgAOCncxgpVQ613w6z7htHiwddKlcExGR\nlB/+8Ie2cOHCtEdDQ8OgCCROAibleJSHvPeMZKAxMcv5awGbMHy4vWPYMKsFmwN2GdiiES
 NszsSJ\ndlNlZdY/6NeArcS3Z0bGXb+/84qUIwH2XYjcoeXsHDOCncwRiVIZ7s+n8+xLmwdDiehSuSYiItkM\nihLZZvYy8HLMt5+FN2oRtLt2mqpXX+W9wGLo3vL6+0eOsG3XLj6R472fBRYBG4DJyf8Hr3T1oubm\ntPLW79i1i+2HDoVucb0d2AksBfbmKGmdkq3cMnhluafh1cRIVW5ItQ2il5guVEnrMGElxv0WJxJe\nWec+tHkwlIgulWsiItLfBmyvDefcbOAcYCPwCvBO4F+Be83scK73Xwl81Pf1KGAHMIJo+0ZUATfh\nzaV8ld77Z/g7r99/5Stc9sgj/H1XF5+Enj0z8IKIe/CKEqU6zVyBxD1f+xqNiQSX40VM1XjBTH3y\nPOAFSLcmn8tsW6o40vgsn1GMYlaZ8uk8+9pm5xwNc+fSMHduvMYWWalcExGR/jaQlS1fA/430AL8\nCrgBuB34VJQ3v933/wY0AUvwhjQiVYzEG2G4BPj4iBGB1QdTndfq9es5Y/p0GvE690uT/20E1gKV\nyePHAc//4Q9ZPzuRSLClpYVfJdu7NvnfR5JtOeQ7116CKyMuam5mVVVV1s/xj2AUSz7VOUulzcUy\n1L8/EZFQhZoj6a8HAas2/HkMUXMaNvnmrS+dMydnbsOls2dHmgOfOnx46LlSuRFR6lrsAZtVXR1Y\nEKpUEhDzyZEolTYXy1D//kRkaNBeGyFW400FgDcV8CRe7kKQVE7DecmvU9tV55pnfw34Xo52fA84\n7i9/4bHNmwNfT+VGnBPyfn9uxKqqKm6//37qGxp6tS2Vw3HLzJksqaoasL0d8tkzo1TaXCxD/fsT\nEQkzYDkShXSAnryI1AZKTUANXmJlWE4DRJ+3Hvbaa+zEC0RmBby+HW9+ZkxXF6tD8iQiJScCzcDr\nvpyIIKWQgOhPSp22ezeLE4men3VVFTsnTEjrPEuhzcU01L8/EZEgz
 kJWDpQq51wt0N6ON8cBcDle\nnoE/0c2AbwL34yVWphIaz6MniADvbrFx7dqcCZKXL1jAZx98kCV4owaL6R2g/AuwEnixro6fPvFE\nr3NcXFfH2o6OrMNAncC0E0/kl3/8I5WVlVmOLB1mxuZNm7g3o/M8T52niEhJ6ejooK6uDqDOzDoK\ncc5BOyLxFD2BxCK8znyp73UHfAZviefNhIwiZKyGyGZRczP3rF/P2qNH2YyXbOlfcbEUbxvpRmBD\nyAhH1Mz+ORdcMGiCCCj9FRUiIlI8gzZH4t/OOIMvjBzJc8C5QFvy4Zea5rgBuLqsrE/z1vUNDXTU\n1PA4Xk3vu4CfJv9bDzyBNyqxs7IyLTPfzGhtaeHyBQt49ne/4yPl5WzCGzEJsqqqiqbrr4/0Mygm\nf7svrqvj8gUL2NTaymAbwRIRkeIatFMbTzzxBK8eOdI9nF5x8sn84X/+h3e+8AKXZ8zV76ip4VNf\n/jJrv/OdPg29Hzx4kLPGjmXc668zAngz3gjEU8nHVcCKWbNY29aGc45EIkFTYyMznnmGxYlE95LO\n7+LlU6ymZ+koeCMkt8yc2f3+gRLW7lVVVTxZU8PqDRsG1YiJiIh4ijG1MWgDifb2dmpra9NeK+Zc\nfapznbZ7N584dKi7c12JNxIye9Qodk2ezD0PP0xlZSVmxiVnn82S9vbACpZtwJeAB+nppFPJiQPZ\nSedqd6kEOyIikj/lSORQrLl6M6OpsbFX5zoer4JWG3DDqafyyLZtDBvmzRZllsE2YBNwLz25FaOG\nDaOhpoYzJk8umcz+nOW7zZgWsRS4iIgMfYM2R6I/5epczwHOfeEFfvnYY93PrV62jMXJpZ4JvKqV\nj5JezXJiVxevHDjAsnvvDawXMRD87Q6zOJFg9bJl/dQiEREpZQokIojTuab2ofCX716KN4oxLPnf\nW4HvHT5Mw2mn0drSUhKJjNp8SkRE8qFAIoI4
 nWtqqedmYAbBy08BZgMLDh/m7oULueTsszl06FDI\nkf0jn/0zREREFEhEEKdzTW3i5C/fHeaTwHFHjrCkvZ2mxsYBHZnQ5lMiIpIPBRIRxOlcU/tQ7CHa\ntuYHSE9kHCj57J8hIiIypAKJYhVRitO5pvaheKmiIvK25jDwiYzafEpERPIxZJZ/+osoLfEXUdqy\nheV9LKLk35xq6tNP80+vvNJd8OrOkSP5zZQpgZ1rZWUlK9eu5c6FC7ntyJHQ86/CK7MNpZHIqM2n\nREQkqiERSGSr87A0kWB7MvegL0WUzIyuri72mXET8AowEjgu+XyYhrlzuX3KFLaHFXjCK62d2iek\nVBIZtX+GiIhEMSQCiWIXUUoFKl/s6Oj9GUeOsL2jIzRQyTaaEbStuRIZRURkMBkSORLFLqKUT6AS\nJDVV8L6f/Yz3V1TQiFdDohGvOFVqwkWJjCIiMtgMiUCi2EWUChGoOOeYe/75tDz3HMNnzWJMVVV3\nwarnUCKjiIgMTkNiaiNV52F8lmP6kntQyEBFiYwiIjKUDIlAYlFzM6u2bGFpllGDvuQeFDpQUSKj\niIgMFUNiaqPYRZRU7VFERCTYkAgkil1ESdUeRUREgg2JqQ0obu6BfwnntN27WZxI9CzhrKpi54QJ\nSpIUEZFj0pAJJKC4uQdKkhQREeltSAUSxaYkSRERkXRDIkdCREREBoYCCREREYlNgYSIiIjEpkBC\nREREYlMgISIiIrEpkBAREZHYFEiIiIhIbAokREREJDYFEiIiIhKbAgkRERGJTYGEiIiIxKZAQkRE\nRGJTICEiIiKxKZAQERGR2IoWSDjnbnTO/dI596pz7mDIMeOccw8mj9nvnPuac07BjYiIyCBRzE77\nOOA+4DtBLyYDhoeAcmA20AR8DFhaxDaJiIhIARUtkDCzfzazFcBTIYfMA6YAHzazp8xsPbAE+LRz\nrrxY7RIREZHCGchphNn
 AU2b2ku+59UAF8PaBaZKIiIjkYyADiTHACxnPveB7TUREREpcXoGEc+42\n51xXlkenc25SsRorIiIipSXfXITlwN05jnk24rn2A7Mynhvtey2ra665hoqKirTnLrvsMi677LKI\nHy8iIjJ0rVmzhjVr1qQ9d/jw4YJ/jjOzgp807QOcawK+bmZvynj+vcADwNhUnoRz7pPAV4FqM/tb\nyPlqgfb29nZqa2uL2nYREZGhpKOjg7q6OoA6M+soxDmLtjrCOTcOeBMwHihzzk1PvrTbzF4FHgZ+\nDdzrnPs8MBb4F+CbYUGEiIiIlJZiJlsuBTqALwEjkv/fAdQBmFkXsADoBLYAq4F/Tx6f09Uf/jCX\nL1jAptZWij2qIiIiIsGKPrVRaKmpje3AKcCqqiqerKlh9YYNVFZWDnDrRERESlcxpjYGbTnqYXhz\nJksTCZa0t9PU2KiRCRERkX42aAMJv1lmTNu9m8c2bx7opoiIiBxThkQgAbA4kWD1smUD3QwREZFj\nypAJJMYBB/btG+hmiIiIHFOGTCCxF6geO3agmyEiInJMGTKBxKqqKhY1Nw90M0RERI4pQyKQ2O4c\nOydM4Lz6+oFuioiIyDGlaJUti60LeA5vJGLnhAnc8/DDOOcGuFUiIiLHlkEbSFw7dSqTampY1NzM\n0vp6BREiIiIDYNAGEl//wQ+0aZeIiMgAGxI5EiIiIjIwFEiIiIhIbAokREREJDYFEiIiIhKbAgkR\nERGJTYGEiIiIxKZAQkRERGJTICEiIiKxKZAQERGR2BRIiIiISGwKJERERCQ2BRIiIiISmwIJERER\niU2BhIiIiMSmQEJERERiUyAhIiIisSmQEBERkdgUSIiIiEhsCiREREQkNgUSIiIiEpsCCREREYlN\ngYSIiIjEpkBCREREYlMgISIiIrEpkBAREZHYFEiIiIhIbAokREREJDYFEiIiIhKbAgkRERGJTYGE\niI
 iIxKZAQgbcmjVrBroJUkC6nkOPrqlkU7RAwjl3o3Pul865V51zB0OO6cp4dDrn/lex2iSlSX+k\nhhZdz6FH11SyKS/iuY8D7gO2Av+Y5bgm4BeAS359qIhtEhERkQIqWiBhZv8M4JxrynHoYTN7sVjt\nEBERkeIphRyJbznnXnTOtTnnPj7QjREREZHoijm1EcUS4D+BPwONwLedc8PN7JtZ3nMCwG9+85t+\naJ70h8OHD9PR0THQzZAC0fUcenRNhw5f33lCoc7pzCz6wc7dBnw+yyEGTDWz3/ne0wR83czeFOH8\nXwY+bmbjsxzzD8B/RG60iIiIZPqwmf2wECfKN5A4CTgpx2HPmtlR33vyCSQuAh4ATjCzv2Vpwzzg\nOeCvEZsuIiIi3kjEacB6M3u5ECfMa2oj+aEF+eAQZwGJsCDC14aCRFEiIiLHoC2FPFnRciScc+OA\nNwHjgTLn3PTkS7vN7FXn3AJgNLANb2ShEbgB+Fqx2iQiIiKFldfURl4ndu5uYFHASxeY2Sbn3Dzg\nNqAGr4bEbuDbZvb9ojRIRERECq5ogYSIiIgMfaVQR0JEREQGKQUSIiIiEtugCCSibAAW8r6lzrnn\nnXN/ds5tcM5NKGY7JRrnXJVz7j+cc4edcwnn3Pedc8NzvOfugE3eHuqvNksP59ynnXN7nHN/cc5t\nc87NynH8+c65dufcX51zv4tQNl/6UT7X0zk3N2Szxer+bLMEc87VO+d+5pz7Y/LaXBzhPX3+/RwU\ngQQ9G4B9J+obnHOfBz4DfBI4G3gVWO+cO74oLZR8/BCYClwIzAcagO9GeN/P8Vb6jEk+LitWAyWY\nc+7vgduBL+Et196B93t1csjxpwHrgEeB6cAK4PvOuff0R3slu3yvZ5IBE+n5PRxrZgeK3VaJZDjw\nJHAF3nXKqlC/n4Mq2TLP4lbPA8vM7OvJr0cBLwBNZnZfcVsqYZxzU4BfA3Vm9l/
 J5+YBDwJvMbP9\nIe+7G6gwsw/0W2OlF+fcNqDNzK5Kfu2AvcBKM+u1dNs591XgfWY2zffcGrxreVE/NVtCxLiec/G2\nNagysz/1a2MlL865LuD9ZvazLMcU5PdzsIxI5MU59za8SPnR1HPJf/RtwJyBapcA3s8/kQoikh7B\ni57PyfHe851zLzjnnnbOfds5lzOglMJxzh0H1JH+e2V41y/s92p28nW/9VmOl34S83qCt1z/yeS0\n8cPOuXcWt6VSRAX5/RySgQReEGF4IxB+LyRfk4EzBkgbBjWzTuAg2a/Nz/HqkrwLuB6YCzyUvIOS\n/nEyUEZ+v1djQo4f5Zx7Q2GbJ3mKcz33AZ8CPgh8AG/0osU5N6NYjZSiKsjv54Dt/hlnAzApXVGv\nZ9zzZ0xH/bdz7ingGeB8YGPc84pIdMm/x/6/yducczXANYCSaI9RA7mN+HLg7hzHPBvz3Pvxht9G\nkx5tjQb+K/Ad0ldRr+d+IC3D2zlXhldOPTA/IoiZ7XHOvQRMQIFEf3kJ6MT7PfIbTfi12x9y/J/M\n7LXCNk/yFOd6BnkcOLdQjZJ+VZDfzwELJIq5AViyk9mPtypgJ3QnW54DfKsYn3msi3o9nXNbgUrn\n3Fm+PIkL8QK/tqif55x7C95OtPtiNFdiMLO/Oefa8a7Xz6A7Oe9CYGXI27YC78t4rjH5vAygmNcz\nyAz0ezhYFeT3c1DkSDjnxiU3/ereACz5GO475mnn3CW+t90B3OycW+icewewGvgD8NN+bbykMbOn\n8ZJ57nLOzXLOnQt8A1jjX7Hhv57OueHOua85585xzo13zl0IrMUbYl0/AN/GsexfgU845xYlV+Dc\nCZwI/Dt4U1zOuXt8x98JnO6c+6pzbrJz7grgQ8nzyMDL63o6565yzl3snKtxzr3dOXcHcAHwzQFo\nu2RI/q2c7stZOT359bjk68X5/TSzkn/gDZl3BjwafMd0Ao
 sy3vdl4Hngz3gdzoSB/l70MIBK4AfA\nYSAB3AWcmHFM9/UETgB+gTcM91e8KZLvAKcM9PdyLD7w1qg/B/wF785lpu+1u4H/zDi+AWhPHr8L\n+OhAfw96xLueQHPyGr4KvIi34qOhv9usR+i1nAt0BfSV/xZ0PZPP9fn3c1DVkRAREZHSMiimNkRE\nRKQ0KZAQERGR2BRIiIiISGwKJERERCQ2BRIiIiISmwIJERERiU2BhIiIiMSmQEJERERiUyAhIiIi\nsSmQEBERkdgUSIiIiEhs/x/h1FHpF5BsuwAAAABJRU5ErkJggg==\n",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXt4VNW9sN9FkslkMkhUVFDgiApoW2prQdt6qZfWC3gj\nB63SiooKavUrVU6PRwU88OmxWq1VW6VVo9BQbau0qKD1gkLVU8B+4qWCCmJBvAICSSYJSdb3x5pN\ndib7svbM3nNJ1vs8+5nbnrXX3rNn/db6XYWUEoPBYDD0PvoUugMGg8FgKAxGABgMBkMvxQgAg8Fg\n6KUYAWAwGAy9FCMADAaDoZdiBIDBYDD0UowAMBgMhl6KEQAGg8HQSzECwGAwGHop5YXugBf9+/eX\n+++/f6G7YTAYDCXDq6+++rmUci+dfYtaAOy///6sXLmy0N0wGAyGkkEI8YHuvkYFZDAYDL0UIwAM\nBoOhl2IEgMFgMPRSitoG4MTOnTvZuHEjzc3Nhe5KSROPxxk0aBAVFRWF7orBYCgQJScANm7cSN++\nfdl///0RQhS6OyWJlJLNmzezceNGhg4dWujuGAw9mlQKFiyAtWvhwAOhthbi8UL3SqGtAhJCPCCE\n+FQI8abtvT2EEM8IId5NP+7u8t2ThRBrhBDvCSGuyaXDzc3N7LnnnmbwzwEhBHvuuadZRRkMEbNi\nBey7L0yZAjNnqseBA9X7xUAQG8CDwMkZ710DPCelHAY8l37dBSFEGfAr4BTgS8C5QogvZdXbzjZz\n+boBcw0NhqhJpeDEE+GLL6ChAaRUj198od4vhvmXtgpISrlUCLF/xttnAMemnz8EvAD8Z8Y+hwPv\nSSnXAQghHk5/75+Be2swGAxFSqaqp7UV2tqc921rg8cegwkT8tvHTHK1Aewjpfwo/fxjYB+HffYD\nNthebwSOyPG4BWP9+vWceuqpvPnmm/47h8ANN9xAM
 plk2rRpeTmewWAIzooValbf1gaNjVBdrZ63\ntDjv39gI69blt49OhGYEllJKIUTOFeaFEJOByQBDhgzJuV+9jba2NsrLS862bzCULHZVj0VDg/d3\nqqvhgAOi7ZcOucYBfCKEGAiQfvzUYZ8PgcG214PS7zkipfyNlHKUlHLUXntppbPIO21tbfzgBz/g\nkEMOYfz48TQ1NfHcc8/x9a9/nZEjRzJp0iRa0qJ///335/PPPwdg5cqVHHvssYCa2U+aNIljjz2W\nAw44gDvvvHNX+zfeeCPDhw/nqKOOYs2aNbve/+1vf8vo0aM59NBD+fd//3eampoAuOCCC7j00ks5\n4ogj+OlPf8qwYcP47LPPAOjo6OCggw7a9dpgMITLggXuqh43ysuVN1ChyXWquBA4H7g5/fgXh31W\nAMOEEENRA/85QCiar6lTp/Laa6+F0dQuvva1r3HHHXd47rNmzRruv/9+jjzySCZNmsTtt9/OnDlz\neO655xg+fDgTJ07knnvuYerUqZ7trF69miVLlrBjxw5GjBjBZZddxuuvv87DDz/Ma6+9RltbG4cd\ndhjf+MY3AKitreWSSy4B4Prrr+f+++/nyiuvBJR77Msvv0xZWRn9+vWjvr6eqVOn8uyzz3LooYdS\nrMLUYCh11q5VKh034nE14FuqofJy+Otfi8MVNIgb6O+BV4ARQoiNQoiLUAP/94QQ7wLfTb9GCLGv\nEGIRgJSyDbgCeBp4G/iDlPKtcE8jvwwePJgjjzwSgB/+8Ic899xzDB06lOHDhwNw/vnns3TpUt92\nxo4dS2VlJf3792fvvffmk08+YdmyZYwbN45EIsFuu+3G6aefvmv/N998k6OPPpqRI0dSX1/PW291\nXsazzjqLsrIyACZNmsTcuXMBeOCBB7jwwgtDO3eDwdCVAw9UA7sTySTccw/MmQOzZqnHjz6C0aPz\n20c3gngBnevy0QkO+24Cxthe
 LwIWBe6dD34z9ajIdKGsqalh8+bNjvuWl5fT0dEB0M3vvrKyctfz\nsrIy2nzWkRdccAF//vOfOfTQQ3nwwQd54YUXdn1WbbsDBw8ezD777MPzzz/P8uXLqa+v1zovg8EQ\nnNpa+NGPnD9Lz8lYvRo2b4adO5X3T7EEg5lcQFnwr3/9i1deeQWA+fPnM2rUKNavX897770HwLx5\n8/jOd74DKBvAq6++CsCjjz7q2/YxxxzDn//8Z1KpFDt27ODxxx/f9dmOHTsYOHAgO3fu9B3UL774\nYn74wx92WRkYDIbwiceVSqemRs34hVCPySR0dMDll8Ps2fDrX6tVwCWXFE8wmBEAWTBixAh+9atf\nccghh7B161Z+8pOfUFdXx1lnncXIkSPp06cPl156KQAzZ87kxz/+MaNGjdIaiA877DC+//3vc+ih\nh3LKKacw2rZWnD17NkcccQRHHnkkBx98sGc7p59+Og0NDUb9YzDkgdGjYdOmTlXPXXcpXf+OHcpL\nyE5TU/EEgwkpc/bcjIxRo0bJzIIwb7/9NoccckiBelQ6rFy5kp/85CcsW7bMdR9zLQ2GaJg/X6V9\n8HIHTSaVwAg7GEwI8aqUcpTOvsZhvAdy8803c8899xjdv8FQIPw8g6A4gsGMAOiBXHPNNVxzTU45\n9wwlQDFnmeztWJ5BXiuAYggGK0kBIKU0ycxypJhVfwZ/nFIP/OhHyhhZLC6GvRkvzyCLYggGKzkj\ncDweZ/PmzWYAywGrHkDcTBdLklLIMtnbsXsGVVV1/SyRUO8XQzBYya0ABg0axMaNG01qgxyxKoIZ\nSg+v1APFkmXS0OkZtGABrFkDn38Oe+0Fw4cXj7qu5ARARUWFqWJl6NV4GRiLwbBo6KSqqriFccmp\ngAyG3o5X6oFiMCwaSgcjAAyGEqO2VhkQnSgGw2KpkEopf/3Zs9Vjb7SdlJwKyGDo7VgGxkwvoGLK\nMlnsGC8
 qhREABkMJYjcwrlun1D7FYlgsdrwKuJx4osrW2VuuoxEABkOJUuwGxmLFeFF1YgSAwWAo\nadwiot3eD8OLqqdEYRsBYDAYShY3Xf4dd8DUqd3fX7gQPv4YKiqgtbV7ezpeVD3JflBy2UANBkPv\nwmuGv+++XXX5FkKoCGmn9xMJ9xVATY1aASxe7Dy79zpmTU1x2A9MNlCDwdAj8Jptv/uuuy7fbV4r\npfPgX12tVgV33KFWAG6z+wULnFcOoN4vNfuBiQMwGAxFiV/Oo9Wr/VMu6xCLwfnnq5n/1KneOZZW\nr1YFXZxoaoJ33sm9P/kkZwEghBghhHjNtm0XQkzN2OdYIcQ22z4zcj2uwWDo2fh562ze7B4RHYSd\nO1WJxsWL/b2DXEp/76LUUpTlrAKSUq4BvgYghCgDPgQWOOy6TEp5aq7HMxgMvQM/b5299nKPiHaz\nAThhGX51vIP23NO7rf799Y5ZLIStAjoBWCul/CDkdg0GQw8nMzXD4MHeOY+GD3cuxl5TA3V1Xd+v\nrlaPTljpM3RyLB1wgFIZOVFVBSNGBD/vQhK2Efgc4Pcun31bCPE6aoUwTUr5ltNOQojJwGSAIUOG\nhNw9g8HgRdT+7W7tOxl73Wb30Dlox+PuEdFnn931/SFD4LTT3NNneBVxKS9X3z/1VHcjcGVl6eVh\nCs0NVAgRAzYBX5ZSfpLx2W5Ah5SyQQgxBvillHKYX5vGDdRgyB9ug3BY/u1u7S9cCKef7uxamUh0\nN7oKoWb4558fvA+WAHJLn5FNH6GzwEsxxAEEcQMNUwCcAfxISnmixr7rgVFSys+99jMCwGDID7r+\n7dmuELzaj8WUvn7nTv3+Rulz7yQkHnsMpkxxrvFbWQn33gsXXBB+X7KhUHEA5+Ki/hFCDAA+kVJK\nIcThKNuDjz3dYDDkC538OMOGZR8B69W+m0rFiyhz9jjlWPIyELe2wsaN4fcjH4QiAIQQ
 1cD3gCm2\n9y4FkFLeC4wHLhNCtAEp4BxZzCHIBkMvw88DZs0aNdhnm0HTq/1ssLxy8pWTxzIQO60ASrkITygC\nQErZCOyZ8d69tud3A3eHcSyDwRA+fgPc55/nlkHTq/1sqK5WaqN99w0/J4+TUPEzEDsZf0shYZxJ\nBWEwGHwHuD33zC2Dplf7TsRiygDc1uYsNMrL4bbbYNu2zvfCyOlvNwI3NCj9/kUXwbXXwuOPe3sR\nubWTKZy+8pXiEQxGABgMBt8qY+++m5sKxKl9NyVwLAYXX6wG+DfecO7TVVfBLbc4fz9b+4BToZiW\nFvU4Y4YyPC9cCBs2eBfh8So4c/zxqv+WgInF4JJL4Omn4aijgvU3DIwAMBgMgHeVsZEjg6tAvNp/\n5x249VbnvDqJhBr843H3Pt16a+45/TPxMlSDGtBPP915dWFX93z8sbtHU6YAbW1V2zHHwNKl+RcC\nRgAYDIZduFUZC6sOsb39sWP12nPqUxRGWR1DtdPqIlPd41ZrwAsp4aSTVK6hfKqDjAAwGAxahF2H\nOJf2sjHK+qFjqM5cXTipe7JxawW1ash3OmkjAAyGiCgFLxBdMs9l2rTszsXpmmQz4IW1IrGjY6i2\nVhfWeSxYoJ6Hwc6dSg2UTwFgKoIZDBEQdVqFMPETVGGdSxTXxC+1Q1BWrIDvfa+rd5Gdmpqu3kB+\nbq2xmBrYq6uhrEwZlZub3fdPJHJXAxUkFUQUGAFgKEVKoWyghd+gHNa5FPs1sQvBwYOVQLn1VvVZ\nS4t+TiA7ySRMnKhqDVjCaeVKOPpo7+/MmZPbKsCUhDQYCohOWoViKBvo5a5o+dJney6Zq4rWVr12\nCqE28xKCmS6fjz3m7Slkx4pVsPf/qKNUXMH99zt/J1sPpmwxAsBgCBmdwiLFgM7gns25OA2obW2d\nPvVu7XgFT0WlNvMSgk4un6tX+6t9kkl3W0QqpYLLYjFnY3G+00q
 YmsAGQ8joFBYpBnQG96Dn4lbH\nt7nZPfCruhoGDfKu/+ulN88FHSFosWKFmtG7EY/D+PFKhfPRR92F1ooVSg12//3unkJ9+rSzZs3/\ncNFFFwU7kSwxAsBgCJnaWvdiJtm6KEaBzuAe9Fz8gqnc2gH9gThMdFc4lmBzKwgP0NGhagK/9FKn\nwLKqnM2YoYK9vvjCaSUkicVaKS/fwfbt32TWrGtZv349rdn6kwbACACDIWQsF0WnUoXZuihGgc7g\n7ncuUnYt47hmjXcwVTzu3M6GDd4D8Tvv5H6+TuiucHQEW2srvPgi/PrXsMceMHOmmvFPmaKuj9cq\nprX1fg444ChuuqmWDz74gOeee46YW+3JEDFeQAZDRITtohgFuq6ZTufilKeno0Pt7zRTTibhrruU\n/jvzmsyf715wBZR75AsvhG8LaG5WXjp+3kmzZ6sBPZrhUnL88Vt49tk9EG6FiwNgvIAMhjzh5bXi\nllahmNCNxs08Fy/jqdsY1tEBZ56pBtZM/IKwmpq8s3w6/Q5S+nsUSakSy910k3ptd/m0VmuplMrv\nk02KB1322GNP1+sWKVLKot2+8Y1vSIOhWFm+XMqaGimTSSmFUI81Ner9nk59vTpfNYR23aqqpEwk\n1KP9/UTC+/osX672cWoT1PHq652/l/k79O2rHr1+G/v3QMrKSinjcSlnzZIyleq6T3W1e7/ctw7t\n/eqmrw3ttwFWSs0x1tgADIYscPN2idprpVjwMp6mUmo2nzmjbWpyvj6WofSpp1RCNDec3E7dfocd\nO9Sj22+T+T3ojNK9/fbOtr/3PbWP07kmk0qdlStJtnPOnd8uyE1jVEAGQxaUSrBXVPglTvvlL1Xq\nAyfs1yfTBlFZ6X7MTLfTVErlJPLyzHE7tvXca5+1a91TQsRiKsp3+nQYOFACQfQ3ylBSSTNxmnmG\nk4i3NxbkpjECwGBwwUu/XyrBXlHhp7P30p
 Xb6/lm2hG8JsF2t1NLcDQ1BdPLW8eW0r8GslvBGYDW\nVsn777/MmDFXAiOBOuxCQAjB9DPf4M4Fg2mjjEaqqaaRctq5itsQwAGso5bHiNMCjaIgN01YReHX\nAzuAdqBNZlighTJt/xIYAzQBF0gp/xHGsQ2GKPCLSu2pRcJ1sdxDjz022AwcOq9PkJiBZLKrUTZT\ncAQ9tvXcqwayF31IsXjxrxg9upw77xzFSSdt5pe/3Is1a2DECLjxRqi56y9cs+AmFjCOdRzQdcDP\npKJCRcPlG11jgdcGrAf6e3w+BliMEpHfBP6u064xAhsKQVOTMvw5GexqapSBMJXy3ydffa2vV4bL\n+vqux/X6LCymTw9uHLWuz6xZykAb5DtSehugddvx+/2mT5dSCHcjbpxGuerFv3tfnPp6KSsq9DvX\nr18oHgQUoRH4DGBuun//C9QIIQbm6dgGQyB09PvFEOxlpRaYMkX5qE+ZonzaV6zw/ixMDj5YnbcT\niYTarOtjFXp//HF1fbyCsDKx6+51Knc5EYt1Htvv99ttt03EhdvSpoNruYmvPvKQ9wFra90NIU5s\n26aWVDNnKqt4PozCupLCawPeB14DXgUmO3z+BHCU7fVzwCiXtiYDK4GVQ4YMyVkaGgxB8ZqZCiHl\n7Nmd+1qz7Nmzo5tlO+G3SunXLz+rE7+Z9DPPKNfOWEy9V13d6Y7p9V2n6z5jhrrG48crl82gs/+K\niu6uoPbf7957t8tf/OIeecQRR0iolEk2O58XW2SKSilPOMH/As2ald1SJQefYgKsAMISAPulH/cG\nVgHHZHyuLQDsm1EBGQqBl4rBzRc9W7JV03j1MR53HyCD9l+nf27xEEuX+qvJMn3x3baqKiVELEGS\ny1aTaJGp6TdKWV8vm7/4Qj766KPyzDPPlBUVFRKQh48cKZ+YMEG+NHyCrGGzTLJNCtpkkm2yhs1y\nOaNUQ+PH+1/AVMpdG
 mt1NrjEzrsA6NIg3ABMy3hvDnCu7fUaYKBfW0YAGApBvvT7uQSSBdGfZ86k\n7SsYJ6xBf8oUNXvX6Z/TSkhXkFrfnTHDOxDMb8Lcr58KAPPdl+3yd0yQqYoKuVUIOQrkgAED5LRp\n0+Q79fVdJFITcVnPuXI218l6zlUzf6uhfv30bgZdKRfSjCOvAgCoBvranr8MnJyxz1i6GoGX67Rt\nBIChUEQd5atjaPYiqhWATuRrIiHl1q3+5+gnpGbMcD++/bp7jY/xuJqIW0LH+r7XSkHQJmdz3a43\nWpNJuXPHDu8fJdfB2S5VM0Okc5XYGQQRAGEYgfcB/iaEWAUsB56UUj4lhLhUCHFpep9FwDrgPeC3\nwOUhHNdgiAwrR86cOTBrlnuO92x55BH3YuI66Y+9MnlaRk4nvNJR290rvYysTU2w337+BmU/I+/P\nf969jczrPnGi8pB0o6VFciirmLB2NvHH5jN6ZDObNsHFF7tH6VbTyAF0+txXAOULFwbPZR0k4MNK\npnTvvaro76xZ6kfyinyD6H2KdSVFITazAjD0RJYvVzNXr4mfzqTPa5WSzQomqHul30pFx8jrt5rw\ns6HGaJb1lRd2OcmdL78sH330SVlRscO532zuqsqxZtlBDba5GoSamqS8/HJvV9FEIlIbgIkENhhC\nQLeWrTXL9vPwk9L/mH6ZPHWyfNoJ6l7pl/JCJ1jMWk24pXoePNi9fCJAOTupbZkPyF1RXQ1HHskE\nKUn0+y7NzX+hrKySVKoP1bKBcnbyV07qGoxlzbLXrtU99fTBc6zuU1UFe+4JO3e673PeedH6FOtK\nikJsZgVgKAWCzLZ1Z9n5DCYL2jc/PX4mOsFiTudrXVd3XX67XMa3u33QVF4uX736atna2tppnJ7Z\nKusTF3ed+dsPvmVLMP1/GAYhv/Sn1dVZrTAowkAwg6FosbJRWlWtgsTfBM0KqjvLjrIMohtB45bA\n
 WY+fiVewmEUqBQ8/3PW1e7oHSRUNvMDRHMXL3T6tam/nsJoaKioqdqner7+hggkvTCZeU+Uc+bV4\nsb7+v7JSRZTlYhDSqTFZURF5/VAjAAy9mlwjZoMUFQf96NdCJJSLx+Hqq4N9xyrU4iU0vQzWFi0t\ncNllndfd67rGaebX/IijHQZ/wN1w6mXZD6L/ammB007LLVLXz+CcSOQlpNwIAEOvJYyc/kGKis+f\nD6tXd5ZN9MJtDEul4MEH4ayz1Pbgg+FnDAhamcpvtWLZAhIJ73aamzuvu9d1bSHGRga7N1RW5j5z\n3rUkuF49WgNskLwUkPsSzU/gTJsWfv1LB4wAMPRags7endApKm5fZfzf/6sEjRBqLHLDyb64YgXs\nsw9ceCH86U9qu/BC2Guv8HL8BB0HQW+1Mno0bNzoLwTa2uCBB75gzZpFCOE8QFpunK5yqqNDFSwO\ngs4yxU6uSzSvC51MqpSiecAIAEOvJYyc/l7jRnk5nHJK91VGKtUpBC6+uGvCNLeEctZqZceO7sdp\naFCVq8JYCWRjB9B1Vd99d+Xt46XVaGjo4IorbqO+vhYh2h33KaeNWjyk844dwcuyxeOwcKH6MawA\ngiDVaYLideO0tSm3pzwkgzMCwNBr0Zm9++GXVdLLttinDxx3HGzYoAKejjtOPb7/fvfV/4IF3uNB\nc3M4RuM33gieabOjA8aM0dt39Gi45x53ISBEE6efPpLVq1fxyiu7UVMjSbIDQTtJtlPDlu5unE60\ntSmDhpdl3279nz1b6fX79FGDbyymJKHbDZKrC2jmjWOnpQWuvDKa9K2Z6LoLFWIzbqCGKAkz549b\nVlC/zKJTpui5kOrEKAXMGOB4DjqekH36dH1dVRXMK/K111bLysoml+ve0b2mwfjHnHPx+G2xmF5F\neK98FX37qpw/QXOC6Gb5a2qSsq7OPTIw4mRwJhDM0GuxJmGZlb/Ky4M7YFi2x
 Uy8KoclEjBvXldP\nQGu/E09UDip2G2U87r4KqKzMPWOAbiaETCNxKtWporL3edeHCxbQ+MYbvPTRR8x6801eevVV+vQ5\ngvLyZygvj9PSUk51tUhfd9Hl+1VVMGHeKfDMhe4Fet2woscyL6qU+iXFpIQ77lArAqeIOqcIwDfe\n8C4nZ6eqSrXtpQ6KsFawEQCGXo3lGfjII/Dkk+q9sWNh5Mhw2veqnWtN85xobe36v7facRMA8XhX\njYRuZLIdXU/Iykpn9/XMsar1pZfgpJNob26mqr2dbwGLysp4YupUjv/P/6Rfv756kcrxODzzTNdB\ntaIiWDFgewet5zo0Nirr9fXXd//MrW5oW1tXie8m1S0KWWBad6lQiM2ogAz5IOrMn27tX3SRtwZj\n5szu7TilO04mvbUbuuejEwk8bpy3SmvWrA750ksvySsuukhuddsx2zBnu57t8su9U5a6ddDK+aOb\nS9st30/QzKFebYVcgIJC1gMIczMCoPjIR53ZfJJrWuYgx8m0EUye7D1eTJ7s3E5dnUqBPH68ep6p\nM8/2fLxsIrGYlB995D1WxWLNcu+9p0pAXhCLyaby8tAGtUCd9RuAg+S8cLto9fXBixe4pXYOuQCF\nEQCGSIh6phwFfgIrn9W/Mvt08MHe48W4ccHb9jqfykolMLzw+429x90t8thjT5YPPfSQbL7uOv26\nmk4XR2eGkVm8IBZTFmm3C2ANplu2+A/efje3ToKjIDdUiH+uIALA2AAMWjjlZvFTbeazb076bjcV\nrd0Wl2/1q71PToZhO0H98cEngrYFJk+Ggw6Co45y3scvw2hZ2U6mT3+Fa645jJ07JZBAiGbi8TL+\n8IdWTj11sdpx/nx367ebj63OD5bZ2YUL4eSTO1OG2n1xobtl3zLQStm1Lcv//6qr1PftJ+50g23e\n7HwBvfByHfW78FGhKykKsZkVQPFQiJmyDrnUo7XOy20y
 mEiEd15NTVLOmeOd+j1z85utO6Gr3Vi2\nTL/Njo4OuXz5cnnllVfK/v37S0D27z9YnnTSQ/LSSzfK3/2uo/tEPahaIxvdld936uq66ty89ncr\nTJCtAaeysmBLZYwKyBA2fv7sufqgZ4Pf/1lHYG3Z4n1eOqUP/Vi+PHia5WQyO/uDrmq8stK//Q8+\n+EDedNNN8uCDD5aArKyslGeffbZ84oknZGtrq96JB8mT7WbUDct4GnR/vxvMrbRjVZUSPk6BIXkg\niAAwKiCDFl7+7FFXrXPDL5ePm5egXbWzeHHnKj+TeBwWLcrNBTuVUmka/NQ9FhUVShvxzDPZrf6t\n2IZjjvGOHG5pUemXL7ig6/vbt2/n0UcfZd68ebzwwgtIKTn66KO5+uqrGT9+PDU1NfqdCaLWWLo0\nuC4uqP4u6P5eN5hXxrxYDM45p3A60QDknApCCDFYCLFECPFPIcRbQogfO+xzrBBimxDitfQ2I9fj\nGvKLX86biNOWO7J2rfvAakXzO2EXWGvXug+Uzc252wD8UjhkUlEB69fnnghSJ6OnFffQ1tbGU089\nxQ9+8AMGDBjApEmT2LBhA//93//NunXrWLp0KRdffHGwwd/CLfumnVRKRcS5kUg4zzCC5vIIur+X\nwGhqUtW6nAodZJOMrlDoLhXcNmAgcFj6eV/gHeBLGfscCzwRtG2jAiouis0LqK7OW83hptvPtAGE\nYdtwc14pRJlZPe/IDvnd726VV199tRwwYIAE5O677y4vu+wy+corr8iOjo7sOxEUP8NFPO6sQglq\nZwi6v9/NUVeXHx/igJBPFZCU8iPgo/TzHUKIt4H9gH/m2rahuCiUo0K2XH013HVXV6eSsjLl6HHr\nrWpCOGZM7iubZcuUI4qldkomO51XgpKr55FuOgeQvPfsj3nxxd8zduxYJk6cyJgxY6j0yoAZFX4h\nyG4FFOy5PJqb1RaPd76feWNa71u
 pU1taVFiz2/61tXD55c7Htm4av3ziEaVwCItQbQBCiP2BrwN/\nd/j420KI14EPgWlSyrfCPLbBnWzSArjhlPMmzPaDsGGDUnWoRWZXhFAqILvAkhJuvx1uuaWrd+Ad\nd8DUqdnlA1q2DL7zna59sNRSxxwT/JxytafopnPoSwP/L76Q9vfeZ8/99vPeOeof+MAD1UDspisT\nwnswtebdmc/dEKJTR2Z/nskbbzgLn2RS3RxPPVW4FA5hobtU8NuAJPAqUOvw2W5AMv18DPCuRzuT\ngZXAyiFDhkS1Suo1OMXKJBLd3QC94m+cPrPemzJFtVddnX+1UBD1jZ/H4JYtwZ02mpqCB4P6bblq\nDry1KR3Dm0beAAAgAElEQVSyghZZwxa5nFF6+iYvP9tsQsKdbqZUyj0bprU5uZkFdR318+qZPl3P\nZdRqu0h9o8m3GyhQATwNXKW5/3qgv99+xgaQG173sBCdQsBLt+/0Wd++6tFLbZsPFWgQlW7Y/9Wm\nJpWOpqws+8Fe11VcOzi2qUm+d+NtMlm23fF4cRplHRM7Uyr7+e/63UBBjUFeN5qXscTtB6qrUxdR\n9zs6QRJWn2bN8r9hQk7hEBZ5FQCAAOYCd3jsMwAQ6eeHA/+yXnttRgDkhpdrtTXp2bLF/R7u1y94\nupUgg2oYeYV0DdNhxjFYx4zFsh/8LRui36pD5/w+/fRT+furrpLbysrkdpD/yyhZwxaZZLsUtMsk\n22UNm9Wsv4tEiHtHmwXJmeM36PnNqLduVTecbrvLl3uvGpx+1CBJ4OJxvRum2DwjZDABEIYN4Ejg\nPOANIcRr6feuBYakVUz3AuOBy4QQbUAKOCfdUUOE+OmD29qUd56bHau5OXiBcAs/FWjQqH83dA3T\nYcUxOKXEyIbycn9Xce/0G5K7736MRx55iCWLFvFBezu7pfc5gpVsYl8WMI515SM4QLxP7c6Hu1fR\nam5Wxo8vf9
 n5ousaFCy8DJ9+QRuLFnVP+exmjLEujJd/rZcbqE5QhpTudgl722F5RhTKkKYrKQqx\nmRVAbtTXe89ShZDy+OP1J0VhrQDylYHTTlir9aCT4szrHWSC6H2s7RLOlfvtt5+cf+qpsi0XY4RX\nxssgJ+u1lNJdgrmVVrMvF3VSQQd1A3VbBeTjJg15FUGAFYCpCZxn7GVI3UqVhoVX8BaoiczBB7vH\nxlgectng5ULpNxkMo7ZtJk61ey2Pwauu0m8n6KTYIpGAGTNgzhyVOG/XhNvthkilWLvgdRob3BbK\n1VxxzIX865JLODcep8wplFkXt4vudwN165LHUsorCMse6GW5mV19tXp9001w1lmwxx4waZK6iPfd\n5/0j+LmB2m8CNyor4T/+w73Yc1izc/syr6FBiZiGBvU6aGH7bNCVFIXYSnUF4KbbLoS6cNky94mX\npXoN0wZQXe1/ToXMK9TUpI4fj3faD8OalcdiKke/dglZtxviwQdle79+8qHyiTKJs0E3yXZZX3mh\n+p6bITSMmXsQg4fXzNhr9m33SLAf0y3Xjt+s3S+LnvUHnTnT243L7u0UVU6fCDyJMMngCkeu2Smj\nYOlSdZ+71cjW8QLyG2NiMeUSqvMfKaT3XK7qJx1V0ubNSktx/PHq0TGhnEdHOtKPKSplDZudj8Xm\nYAXSvTa/i265PHkJgUTCX4IuXeou+a2B28srQWcL+mdavtzd+JyPP2cEsyEjAAqEn5tx0GSHYffN\nayLjpXqtq5PyS19y/48I0b18oReF9J4LQ/gEdZt1XAF4dKTD9nw5o2QNm2WSbVLQJpMVqU4/fqeT\nCJJvOizJ55ZKOcjFt4RAIhEsuMJtVhOEujp3fX/Uf84CrwBMNtAQCSM7ZVQ4RfD6fa5bvKS6Gvbf\nX6mwdZwY7BH82UTf5kIYBWDcHD+khH331Sua88Wrr9KvoQE/J6vRrGQT+ymPHg7kgEGS2vd
 /3t2j\nx0JK/xOorFQ3Y5CL7vej6SSK8zOgBNV3J5MwcSIMHJhbXpING1RaCCei/nPW1ir3NyfykGXRCIAQ\n8bq/d+7sLFqUSaHSKXsRxN1RCOVN2N6u79JZqLxCYbmDOgnM+fO9JwD19U0I8TDz5s1j4AsvMAeV\nPTGTTKFQRTMT+L3q4Ic7AZeZhHUgP047DQ49NPhFt360Rx7pTCU6diyMHKn3/SBumDqUl8Ntt+V+\n0xQy13khZ0NgVEBh4reac1vZ9utXfMXV/Vbr9lW3XwlWP/JZaD5s9ZNd33/44V7ainZZWTZTAnLY\nsGHyphkzZNtuuwVT1VRV+bs/+m25qjRy8WTIppC727bbbuF5T+jcFFHfpH462gBgbACFwe8+WrbM\nebDs27f4Cqv7BU2ecIK6T+vqvAsjZZtqJqrrkasXkJ0HH9SPoUiyTT7Y54fyzXvv7Uy1nHnyfvlw\nwgjayMXIEkYAh45XQVWVt8E5FsuuXqZOv3Iy7BQHQQSAUQGFiN9q7itfcXar3rGj+AqrDx7svSoe\nMULt+//+n3M1LavNNWu8j5nPQvN2m4Y9E/BPf6pcvt1qlTgFaG7ZAhdeqEYkHcpp4/sdfyR+Wb2K\nvD3qqO56sFWr4E9/cm5ACOULn60KJZnMXa3gZeTauRN+/GN1YUCphpxCne1qpMsuc9b7V1aqz/7n\nf9yPtXFjdufgRhiGnVJEV1IUYiu1FYCF22quSJMHuk5w3PpqzwPm53Ry+eXux83n9Qgyec3MdOo0\n8bv8cq/z7pDltCivHbZ1z8OTSASPvK2slHLcOHc9otvKIJGQcsaMcNQWQXLp6CxtvWbWxfJnKZZ+\nBACzAigsbh43YXighI3XLLxvX+jXr9O4m0ioSnhSdu6zc6d3+3vt1fVY9tn0mjX5ux460ccTJnSu\nEnbu7N43ex6ef/u3rcDudDfZKkawhnN4hANYRy2PdfXaaWlR5QTHje
 tqhPXyCGlpgT//Wd1cVhhz\nc7NeUYNc60taBDXi+i1tvTwBRo4sqHfMLorxTxsiRgDkkWItrO7mntreDnfeqbyX1q1T/+O6OneV\nTyaJBAwfrp5bA6u9cFOfPmo8a2rq/l3d66GbQ0vnf6zr+bRtWyOrVq0Evue6z3fE37he3uj8YXu7\nUvU88QRcdBFce22nDsquQ8y8UaTsvFhCwPTpShdnnfTZZ0frVuUloNxobvYu5uI2Wyq0d4xFMf5p\nw0R3qVCIrVRVQG4UY/rw6dO9V/H2AC+/fd3OqalJaQPCtlUGsc3pxPro5z5rl2ee+aYUosNFG9Mh\nt8YHBDvhfv06O27poI4/3n3/QqkfMi+6ToqIXHJ7hOgdkxXF+Kf1AaMCKk6cJniVlWoyFyQhmRPZ\nZpPdvNn7888+62z/lVe8962oUOeVOVF78EGlDXAjkVCrgSCTvCAG5BUrlH3SLc7I0ijceqteordk\nsg9nnfVlzjyzuyFYCKirE9Qc+EdVE9L+oRfbtnV2vKpKqYcuush9/0KpHzLVNh99BPff7x5IFY/n\nNkv2i2AMG6c/UjGsRKJCV1IUYutpKwALuyuiVXciF8+yXLzU/Gb1M2Z0tu9n8B03znmiNn68//eC\nTvJ0bXNNTf6Vy5Yvl7K9vV1On/62LC9P+a9O4k0yVfd7KVOpXXEAJ5zgkPfHnoRJZxVg73h9vber\nZDzunW87n4EVhcylEyZef6R8rERC+t0wcQDFTZj58HNtq77e24+/rk4/dsfNNfvMM72/N368/vla\n6ObQqqvzPvbs2R/J6dOny6FDh0qolLDFZd+OdGWtLXI5o/WlrPWnHj/e38/f3nGvEomWAMi2hFjY\nLF/uLGVjMXUepSAAClGkwk6Iv1sQAWDqARSAMPPh67TlVYOgtlapoZyw3tfJLuDGihXw9NPe+4wd\n6/25U/+90svbbXNWxgJnJNOnL+XGG29k2LBhz
 Jt3Hy++GKembxtJdiBop5rtJGhgCnOYwxQ+YiCj\nWaGXs92uThg71l9dYO/4gQcq3303rr22e3uFyi0/ejR8+qnyEDj+eKULtPIN3XKLytWzYkU0xw6L\nQhSpsChkTQBdSVGIraeuAMLMAOvX1pQp/hMLv1rduq7fmf32mlTZtR5ekyu3vi1bpjdh81Y/dciR\nI9+WGzdu7NLppn4DZD3nytlcJ+s51zvtspsx1qnjyaR3Kgd7x72Mj265Q3T0YlGqhwo9i86FQhap\nCDnWAGMELm7C9CzzaiuRgHnzurpZWvsdc4xy8ayoUMkQf/EL9f7GjV09CN99V8/1O5ns3m+vSRUo\n+97zz7tPjL0MvaeeCuPHK/ujHSGUS3w8riY3Bx+8DjgAN3/9q646mP3269rpqvYGlXxNBydjrFfH\noXtWwKoqNWO2GxWzcYP083VdulS5ceZaiNkN3WCLYqSQ7p6FjDXQlRReG3AysAZ4D7jG4XMB3Jn+\n/HXgMJ12e+oKIIhnmd+EzS9Nu25JV2tmPWtW12OlUnpt9OunannU1alZ9/jxyrjr9Z0ZM7yvU7b1\nd3fbrU3OmHGTHD58uDyMSplkm+N+ffs6TEqDRrs6zdCCdtwrn34Q46NfJLGbsSes2XkhZ9G5UupF\nKmyQTyMwUAasRU2zYsAq4EsZ+4wBFqcFwTeBv+u0HYYAyKdDRBC8KodZ/Z01S88u5NbWlCnZ5w6z\n90fHhz9oHQ+d+zroWNy5bZPf4lz54L/9m2yNxdJFVbbIOE0S2mWcJlnDVrn8ue3dDxp08HYaHIJ2\nvLJSScxcb9Bss22GFVMQdtqEfP95C5X0LWThk28B8C3gadvr/wL+K2OfOcC5ttdrgIF+becqAIo9\niV/m5M7Sa/uNP073hNNEMdsZdObAnmsb2d7X2fZf0CZnVfx3lzebiHfX6zuVMdQdRCsru7sIWgNV\nXV12HQ/jBvUrceh4wXKY
 ndvPva7O/djZlGosxJ+3UIFnmS7DOsW1Xci3ABgP3Gd7fR5wd8Y+TwBH\n2V4/B4zyazsXAVBoe1TQyYuOwTToZCqM9Ou6LuxBxxt7DfCw+59km6znXL2dnW6G5cv9XTbHj1ff\nC5pJL9s+BcEr7DmXGyoTp3Pv27fT4J3twF3oP2++sV9H60+XSOj9SRwIIgCKzg1UCDFZCLFSCLHy\nMysMNQsK6dW1YoXKIDtlCsycqR79POH8DKZ2dO1Clh2xpib7gMXWVmWzDJPqavjXv/z3s/e/uroD\n6ACa04/ulNNGLZo/sNPNMHq0ys3jRiwGe+/t7b7X2qqMu9XVyjJtPWbbpyB4lTh0Ipvkam7nvmOH\nau+uu2DWLJgzR0ULBzEyF/LPm28yryOoe6epSVVui9IFlHCSwX0IDLa9HpR+L+g+AEgpfwP8BmDU\nqFEy204FNaxnm0ohE78UBevWweLF3Y/jVy7VThCnBJ30637HktI9YVw26AqwhoYGVq9ewNe//jBL\nltQAQznwwDibNv0HqZRT8IKkhi/4Kye518zV6UwqpVyk3GhthYceUjkuvPax8nwcd5zK5X/IIWpg\n9CuynKvnh1/WzmxqAmfiN0jHYnD99cHatOjhGTi7UGDPqTAEwApgmBBiKGpQPwfI7PFC4AohxMPA\nEcA2KeVHIRzblSBeXfZCIbl6xy1Y4J4iubUVBg3qmvfGOk6QTLvl5aqt2bP1hFVVFVxwgapDYj9P\nqSFeKyrg8cfVZMRv3NLFS4C1t7ezZMkS5s6dy2OPPUZjYyNDhw5lxozzOO+88zjooIM6f6/Wdhqa\noJJWBHBtn5v5j46f6Q/+oC7CoEFd31uwQGXs9EJHWluz8OefV4/JJJSVqQo0r7+usoE6SeRc3Q69\nsnbW1Cif30x/36BEOUj39Aycdgos7HIWAFLKNiHEFcDTKI+gB6SUbwkhLk1/fi+wCOUJ9B7QBFyY\n63H
 98PoP2Fe8YVelWrrU/ffMTHtsP8777ztXC7OwaxHa2uDKK4MJq1RK+fRfeaVKANe/Pwwdqj7b\nuFGNg7fd1rWwuz2dvJX/a80a+NnPgmkYMikvh9pTUjC/c8n11ogRzP3DH/jd737Hpk2b6NevHxMm\nTGDixIkceeSRCJv6ZPRXUmz62Z9YcMVzrGNQZ879jiw7tXChmrFmsxwLgvWD3367+sGHDnUWAEFU\nMm5LV68YgjB8/qMcpHX/vD2BQgs7XWNBIbZ8eAGF6bnW1BTM9pZ5HKf+9uunDMmzZ2fvZOF3HSyD\n9fTpKqGZVwEpr+sVi6kMxuPGKRvp9Okux33wLSlramR7dbXsANnQp4/cDPKbZWXy1FNPlX/4wx9k\nyu9kvBKlZbPpVqMKY4vH1QXS9fN1Q/eHjcKjJWq/+WJ34QuLCK4jJhJY4VVwyCLMFdgjj2Rns7GO\nM2GCd3/nz3fXTLipC/1WOHb1Tq7Bpq2t8Le/qQhka6L5X/8FCx5pZd2Tb3MA6zj12C3EL/8/0NS0\nywOhuqODauClZJI+f/xjsNBgXTKjbzMJshzLleZmVRDmqac6VUJCdKqiHn9c2Rf69+9a8MWOztI1\nylTKURds0fnz9gQKXPimRwsA8P8PhLkC8048pnT/HQ4OLPbjePU3G8P2tGnOFbdA2SpOOsk5VYSb\n+svPVtHaqrZdY9CbKzj3JyfS3tJCn1SKlj9BhfNX6dPeDg8/rAZrJ2t8EFcpO8mkuvA6luy2Nli0\nSP35jjzSv+ZlLthVQpYkbmnpWnItkXDW8RVD2oWoB+l81wIoFIUUdrpLhUJs+UgFkc0KzM3H3y/v\nvVs+fd2VXhB1lbWC9vPjd/s8mVQqp8zz1PXNTyalvO1/PpBNQVU18bj7sj/b0GB79jg/1Y49KMov\nj3WfPtmHWtu36mr/MOrMm6SU0y4YIgVTDyAYQdSNXvv65Z531YlrqjV1hZVuUJmX
 cBDCfSzWEy7t\n8jtcJztyHRztJ+enm4/FVGerqrx14l65+e2S1O8HnTRJz1bglQFU58fI7JeU4addMPQYjADIAh17\nmV+A4tat3v9Jqz5uLna5XA3bmWOOztjkNBY3NSmDsdu41UfskA/1+WGwxv0GPy8JGI+rAXvLFvcL\nbLd2u8247ZJ02TLvPm3d6i1p7cmdxo93XwKWl/tfg8xZfQnWqjXkByMAIkJn0mWlYrE0H5WVXet9\nuxEkdYSfENHVlFgT5WzG4o6ODrlkySsyFmtwHoPYIlMVPlnkKis7pZjfcsQa/LL1Dsn8nnXyVobM\nzPB7v2WUtV9mGH9lpRJGmZWwtmzxvth+kthpVt9bPGUMgQgiAHq8EThMdIywEyYo46eTPcfNZTto\nIFouhm07lq3RijFobFRBom1t7vbFxkbJ/fe/wMyZk3nvvffoGzuSBI/TRhmNVFNNI+W0qWjcnR6V\n4ONxuOceFYQwaJA6YTcjbSLRaSXPxmDm5DFjnXwq1ekhFIspQ+xf/6qCJtwugj2XhW5/Fi9WP5yT\nRb6qSg3zXjj5v/cWTxlDdOhKikJspbgCcMMr/bNXPn8vn3w3giZRq67uVIv722y3SThXHnfccfKB\nBx6QjffdJ5uq++tX0LK2WbP0Lqx1IXJRaWST4nn69HCNrLql2zJz9icSZlZvCARmBRANXgGKHR0w\nZozzZ14u2yef7J4jrKlJ5dNKJvVTU1irjO9/H+bO7epR6EZTk3tWgkzi8QpWrbqZ4cOHqDdmz4am\nzfoVtEClI7AnW/OLvD3vvNxmtUEje9vaVLh0mBGafv7GxxyjUjRY4daffw577QXDh5tZvSEyjAAI\ngD1mw0rYZyGliux3GqT9XLb93NN1U1NkqpJ0s3hWVoLs6ADH5LASkCQSklisD3+96kWGP7KiU4d1\n4IGd+i2nhsvKuiY/Ki+Hq66CW2/t2obb4JhMqsExF4IkWgL
 V1732cg8GyyYdgU56g3g8HL/3sDIb\nGno+ukuFQmzFogLKNNB++KGeE4mF3+pfN+e+l5opSD2BzK2ysl1Cu3P/aJcnHNcm62e9J1P99umu\nw3r2We+T27Sp02I9a5ayiGdb4T1bgurEvHJz5KKOyYfR1hiGez0YFVB4OBlonaJ5LZqblcZi3Dg1\n8ZISPv5YZdV0mulb7ekEqVqGZqcJXvAgWUlF2U4qZIrjWm7lRf6TBvp27x+NTBr2DybcfiZsc9Bh\nnX66+wqgqgqWLFGz2lRKFUnYtq17G6edFjwnRRCcwu0TCbWEk7L7/vYZuZuRNZtZdqbR1kr98NRT\nyuic60w97MyGhh6PEQAeeP2f3LCneZkyRen3vQb48nL9dMtWbv599+3uMfT97wdTc8dp5hftlzKR\nR+joU8bgjquc+0cbtZ/NyU6HlUp15qfw04P961/RDo5OHjNDhvgLHSeXq1zyh1vthZmD3KIY0kMY\nSgvdpUIhtkKrgKJMCukUpFpXpzJpeqWMcMsGmkh4uZKrQuiCNplkm6xhs1zOqC47qcLpm2WSbV33\nqzpGuQhlo8Oy66yCpC7IpxojSGSe9SO5RRHrqquiKnlo0kMYpFEBhUZUaeHLyuCb34Q//lE5xAC8\n+Sb85CdqombPP2b56Fu201tucW7TLdEcQD++4A5+wkYGd+bOzyiaMpqVbGI/FjCOdRzQuV9lFYz9\nhZqJu3mwuC1x7MZS3ax7+VZj6CYcs2bszc3u7lK6s+yoZuqFzi1vKD10JUUhtmJeAVRVqVl3tiuE\nWKxzUus1IbQyHKRS/hO8iy5qlYlEiywra5TQJmMus33fjmXOuv3SDtgTrbnN2HVTFxRjjhtdC7vu\nLDuqmbpJD2GQZgUQGl6ee5WVnfV9FyxQevwgVbLsaZN/8Qt/A2487j3BKytLUV9/Bc3N89ljj4v5\nyldO5+xBLVz0lwuIN27W61QyCRMnqg
 r2mVGlfhWm/CJSdfOeh1GgIWw3SF0Lu+4sO6qZeoFzyxtK\nEF1JUYit0CsAKfXU0UG9DDMntV4qdmsV4DcRhy3yvPMukUuWLJHt7e3Zdcwv/7VVMmzmzOwrTG3e\nrNo4/nj1uHVr189zXQFEYT/QTa6kO8uOeqYeZSUwQ9GDSQanCJJgTacdr/+T07iTTErZt69/nrPx\n4/1VSTU1Um7Y8JmcNu0RWVa2TaqUDG2yrKxRJhItcunSAPUgrY4FyX9tGT7j8ewH1Fylqd/gGJVx\n1c8boLIy+DUx/vqGiAgiAITaPzuEELcCpwGtwFrgQillt3p9Qoj1wA6gHWiTUo7SaX/UqFFy5cqV\nWfXNycsuzJrY0KlpWL1aZQ7o10+5udsLrq9Zo9Is/POfzkbaZBLuuksZgL0qHVaUNdIuL6Wj43eM\nHHk4I0fOYNCgYzj00L7uGo7MDtpTC0jZVWVzyilKn2VXm0gJ++wDOxySuvXtC59+6lyq0En9YsUB\nOJ1kTU1X4262P96DD8JllzkbaZNJmDOnq3FVV1XU3KzUYk59t5LanXNOcBWLdXyTyM0QIkKIV3XH\n2Jxm6MCJQHn6+c+An7nstx7oH7T9bFcAUU0E7VgTOKfcXdbkOvMzr/4sXy5lvLJDQofzSoE2efS3\nnpSrVq0K1sFcqtxMn+7d+bo6/WMGVe0EVWMsX+7unmkttXJxNTUzdkOJQCFUQMA4oN7ls7wKgPp6\nd5/4zLEmGzVRLmkXrK26OmP8WL5c3l9+saykybnfbJf1l/9N7wIEkYBe+5aVeZ/E+PH6xww7u2bQ\nH8T+w2c7QzC6dUMJEEQAOGX/ypZJwGK3hQbwrBDiVSHE5BCP6cjSpe6OJA0NSi0DStOw774qYnfm\nTPU4cKB634tsa5NbxGJw/vlK63HQQVu5/+672f6tbzGhbR5VOKfvLKeN2v5L9Q6g42eus297u97x\ndI5pZdd0Ilcfd
 Z0fxB6T8Mgj/r78TlgxA9dfrx7t6ppUCubPV9lR58/XS61qMBQYXzdQIcSzwACH\nj66TUv4lvc91QBtQ79LMUVLKD4UQewPPCCFWSykdR7O0gJgMMGTIEI1T6EoqBfPmee9z883w4Yfw\n+993zeipG2+Ua4DYzp2SbdvWcN5503n88cepbWnhHCGI08JfOYkTeZo2yrsWWKkaR3zEFL0DBHGl\nzOVkxo7VP2bY2TXt+J2D5R5pVd9xsxNYfdVxNbUTRVoHgyEP+AoAKeV3vT4XQlwAnAqckF5+OLXx\nYfrxUyHEAuBwwFEASCl/A/wGlBHYr3+ZLFigomK9aG2F++93/9wvGDNoduFMpGygvn4W/fu/wJQp\nU/hpSwuJ3/wG8InI1R0kg/iZZ3sysZgyfOoec/jw6HzUvY5dWamMtKNHd0YZe83Og65GTAI2Qymj\nqyty2oCTgX8Ce3nsUw30tT1/GThZp/1sbAC6Lttem59KOhe/f5CyomKHfPTRJ2Vra6tq0M/NsE8f\nKf/937v7zGfTwUwdd7YnY6/oFeSYUejRw4gy1rEBOFGMkcuGXg15tAHcDfRFqXVeE0LcCyCE2FcI\nsSi9zz7A34QQq4DlwJNSyqdyPK4r1mQwF6TsTEbphKVRqKlRamE7iQQkkx0k2U4VDZAuqAKSBI3U\n8AUvPV9Bbe0YKioq1Jf8ZvYdHfDoo7DHHvDQQ8772HXQjz2mQpNrapT7oxDqsaam+2zbfjL2ffv1\nU66eTmRW9PJqJ/OYXnp0L7x07LrHDqIq0iWMyGWDoUDklApCSnmQy/ubgDHp5+uAQ3M5ThC80jeE\niT37wZo18OmnHezYsY7333+aA5Zfw2208SzjWMNwPqc/e/E5w3mH2uq/Ev/nTfD7Vco//+CD1WDo\nVhfSjpRw4YVwxhmdWeTA3W9+4ULYsMHfz9wtlcMbbwRT2URVpFxHx65zbF1VURBMAjZDCZNTIF
 jU\nZBsIZh8vstXTz56txmU/Xn/9debOnUt9fT0ff/wxNTU1PDRsGKetXIkIcm0rK/WTCV1+OfzqV+p5\nkACrbHALVspX2cEwz88roCvbaxVFmwZDDuQtECzqLZdUEJaq+fjjg6u3/VS3mzZtkj//+c/lV7/6\nVQnI8vJyecYZZ8hHH31UNjc3R1tIAKQ89tjO4IXLL8+/DjqfQVFh69ij6LsJEjMUEZhcQJ1kY+N0\nsgM2NjbK+vp6edJJJ8k+ffpIQB5++OHy7rvvlp999lnuBw2yxWKdg41foqGwi4DkI8zajp9Vf8qU\n7M4hbEO0CRIzFAlGAGRgn6CByt0Vj6uxw6lGuTVxa29vl88//7y84IILZDKZlIAcMmSIvO666+Tq\n1av1D2o1Xl4enVDI1wog314vfqupRMIMtgaDjSACoFfUA/CyD/7iF93ff//9t7n22nn87ne/Y8OG\nDfTt25ezzz6biRMncvTRR9PHL9DA7aAvvghpf39HYjG1NTYqm0Cu0aS5Blg5kW+vl9pauOQS98+F\nKL1at/mynxgMPvQKAQDulf+s9z/77DMefvhhjj56LitXrqSsrIwTTzyRW265hdNPP51EIpH7QceM\ngfAWm8QAAA+VSURBVN/+Vs1dMxEC1q+HJUs6i6JPnarSi+oSi6l6klEWAcmH10vmAHnuue6Re01N\npeVqaaKGDUVErxEATrOuZuCJJ55g7ty5LF68mLa2Nr72ta9x++23c+655zJggFMGjByoqYG6OuXK\naRcCQqj3Bw7sFBjz5wfLxVNdrRIMOVXzChMvP9swVhxOA2RHhxKmKYc8SaXkammihg1FRu8QALZB\nRTY20h6P03LhhdSWl7NnUxNHJZOcc9JJfPWGG/jKKD3vqaw5/3w47TSYPl0FEIwYATfe2NWvH4Ln\n6KmogNtui34AibLsoNcA6RYnEYWaKyqiKgZvMGRJzxcAGYOKAMpTKcqBp
 1pbaY/HKWtsRLz4Inzv\ne9Euxe2rkCOP9B6w/XL0VFaqpEaFqPkaVcCX1wAZjysh0KdP6da6NVHDhiKjRwuArVu38o9p0/jm\n9u04ZYcQQLllaI16Ke6k2rj8crj6avV5pjHQS9WSSMAdd8Ann3QOvlIqtVG+DItuRpVc8Bogm5vV\nqmnEiNKtoGWihg1FRo+LBG5ra2PRokXMnTuXxx9/nJ+2tvLfoJ/0qLoavvUtpXe20jQsWZLbwOoV\nzQpqZutU9tASGq2tXfNWV1WpFYC1b5ASisXsgTJ/virK4DRAOpV0LDVM1LAhDwSJBO5xAqC5uZkB\nAwYQi8WYMGEC/2evvRh6882IbHNCgLO65Stf0R9IvQa2TGpqlG/qhg2q3WOPhWHDugoA+77WbDjK\nWrv5ojcMkMX+GxhKnl4tAADeeOMNDj74YJVt02tQyZa+fZUuur1d7088e7YqOaZ7re0Cp6NDfc/J\nAyaZhIkTYe5c/1lz1DmDwqI3DJCmGLwhQoIIgB5pAxg5cmTni3gcrroKZswI7wA7dnR97Wc/CFp0\nxUoK57d/Y6PKKKpjWCwVD5SoDMzFRBT2E4MhC3qkACgYbgNpVDmqq6uVnWL5cn/DYil5oGQOkFYt\ngCjsFsVsEzEYIqbnCgD7H/vjj4OlW84Wt4E003c+F3uEnfJyFUMwf77755aPfKl6oEQZOWuicg29\nnB5pA3D8Yzc26uvgs8XPU8Wu+5USbr+9s49euX+sNBROPvC6XkClaGCN0m5RKjYRgyEgvdsG4BVN\n6kYiob4XizmvEjK9gNxm8X5RqZmqjWnTOgWCV+6fWEzts3ixs15cR28eZQRvVERptygVm4jBECE9\nTwB4/bGTSfWn3rJFvR47VpVXXLxYpWX4/HMlDF57TXn4HHJIZxyAfWBdsQJOPlkdJ5fka5kC4ctf\ndh+gd9/de0DSMSyWmoE1SrtFKdlEDIaIyEkACCFu
 AC4BPku/da2UcpHDficDvwTKgPuklDfnclxP\nvP7YDQ1q8J83r+ugN2yY0v1mDrw/+1nXBG2gBv/TT1fBW62tanbe0aGKsDvpjYMYGbMZoIMaMUvJ\nAyVKu0Wp2kQMhjDRLRzgtAE3ANN89ikD1gIHADFgFfAlnfazKgjjV0AkHu9a9SVIhaug1bCiLhXY\n00sRelVWy7X6WJRtGwwFhAAFYbQzJOTA4cB7Usp1UspW4GHgjMiOVlvrnjkSlDH0iy+UqqW5WU8X\nbLFggVL56Oxrt0U0NKihpaGh67FzIer2w8Zy5Zw9Wz3q9M+yW9TUKPWdEOqxpiZ3u0WUbRsMJUIY\nNoArhRATgZXA1VLKrRmf7wdssL3eCBwRwnGdkdJ9QLfT1qYSsa1e7W4kztQFL12qrzeO2shYSkbM\nXNwto7RblJpNxGAIGV8BIIR4FnCqjHIdcA8wG5Dpx9uASbl0SAgxGZgMMGTIkOANPPKIc9qETBoa\n4L77lB7fjUSiUxecSinbgc6+EL2RsVSMmGEUQYnSblFKNhGDIWR8BYCU8rs6DQkhfgs84fDRh8Bg\n2+tB6ffcjvcb4Deg4gB0jt2FJ5/U39dr8AeVgM0SQgsWKD98N6Ts6gIatZGxVIyYpbRSMRh6GTnZ\nAIQQA20vxwFvOuy2AhgmhBgqhIgB5wALczlu3pBSVe9qbvav0HXeeV1nsrW1ypPIiTCqWGXbvpcu\nPhs9vR+lslIxGHohudoAbhFCfA2lAloPTAEQQuyLcvccI6VsE0JcATyN8gh6QEr5Vo7HdWfsWPjT\nn8Jrz5qles24k0k45piu70UdeJVN+166eIgmLUKprFQMhl5Iz0sFsXUr7LFHeJ0QAmbNUlG72aRS\niDr1r277fqkPpHSOQs41LUIppqAwGEqY3p0KYvFiZdjTMQTrYM1Ss53RZ2NkDBLcpdu+ly6+udk9\nT1KuevpSTEFhMPQSep4AWLv
 WX3edWdAlkVAGX6dB0K5Pz4fbYNDawbr41dt1Iww9vXG3NBiKkp4n\nAPyKryQS8NxznSUdrQFpyBBl8PWbpUbpNujlMjljRmft4Gx0817XJR5Xws8pEV5YenrjbmkwFB09\nzwbgpXNOJODDD5XuOZNUSsUQWG6kY8fCOeeogTFfBUOC1g4Ooj/308VHZQMwGAx5pXfbAPx0zk6D\nv5Pa5dln1Yx76tT8FQzxczW1E1Q373ddwOjpDYZeRs8TABBM5+yldrnwwq52gaARrEEJUjs4G928\n33UxenqDoVfRMwUAhOMdE5VnDDh7+gSpHZytbt7ruhg9vcHQq+i5AkCXIGoXi1w9Y7wCsnRrBweN\nJjbFzw0GQwZGAARRu1jk4hmjkxzNrorJrB2cjW7eFD83GAwO9DwvoKB4eccI4awGysUzxsvTx62o\nfC7RxKb4ucHQqwjiBZSPgjDFjVdhkLq68AuGZJMczdLNX3+9egxy7CAFbwwGQ6/CqIDA2zvm7LPD\n9YzJd3I0k43TYDC4YASAhZsHTNieMV6ePmGkic7EZOM0GAwuGBVQvsl3Ldqo6xIYDIaSpXevAArl\nGpnP5GgmG6fBYHCh93oBOblGWoNiT3SNjLougcFgKAp6dy4gHcIoVF5qmChfg8GQQe+0ARjXSIPB\nYOilAsC4RhoMBkNuKiAhxCPAiPTLGuALKeXXHPZbD+wA2oE2Xf1UZBjXSIPBYMhNAEgpv289F0Lc\nBjhUFNnFcVLKz3M5Xmjk2xffYDAYipBQjMBCCAGcDRwfRnuRkw/XSJN902AwFDmhuIEKIY4BbndT\n7Qgh3ketDtqBOVLK33i0NRmYDDBkyJBvfPDBBzn3z5WoXCN7m4upwWAoGoK4gfoKACHEs8AAh4+u\nk1L+Jb3PPcB7UsrbXNrYT0r5oRBib+AZ4Eop5VK/zuUlG2jYmOybBoOhgIQaByCl/K7PwcqBWuAb\nHm18mH
 78VAixADgc8BUAJYmOi6nxxzcYDEVAGG6g3wVWSyk3On0ohKgWQvS1ngMnAm+GcNzixLiY\nGgyGEiEMAXAO8Hv7G0KIfYUQi9Iv9wH+JoRYBSwHnpRSPhXCcYsTy8XUCeNiajAYiojemwsoKrwq\njBkbgMFgiBhTEayQ5Dvds8FgMGRJ70wGFzX5TPdsMBgMWWIEQFSY7JsGg6HIMSogg8Fg6KUYAWAw\nGAy9FCMADAaDoZdiBIDBYDD0Uoo6DkAI8RmQbTa4/kBxpJ/uiulXMEy/gmH6FYye2K9/k1LupbNj\nUQuAXBBCrCx44RkHTL+CYfoVDNOvYPT2fhkVkMFgMPRSjAAwGAyGXkpPFgCuRWcKjOlXMEy/gmH6\nFYxe3a8eawMwGAwGgzc9eQVgMBgMBg9KWgAIIc4SQrwlhOgQQrhazIUQJwsh1ggh3hNCXGN7fw8h\nxDNCiHfTj7uH1C/fdoUQI4QQr9m27UKIqenPbhBCfGj7bEy++pXeb70Q4o30sVcG/X4U/RJCDBZC\nLBFC/DP9m//Y9llo18vtXrF9LoQQd6Y/f10IcZjud3NBo18/SPfnDSHEy0KIQ22fOf6eeezbsUKI\nbbbfZ4budyPu13/Y+vSmEKJdCLFH+rNIrpkQ4gEhxKdCCMeiWHm/v6SUJbsBhwAjgBeAUS77lAFr\ngQOAGLAK+FL6s1uAa9LPrwF+FlK/ArWb7uPHKP9dgBuAaRFcL61+AeuB/rmeV5j9AgYCh6Wf9wXe\nsf2OoVwvr3vFts8YYDEggG8Cf9f9bsT9+jawe/r5KVa/vH7PPPbtWOCJbL4bZb8y9j8NeD7qawYc\nAxwGvOnyeV7vr5JeAUgp35ZSrvHZ7XBUwfp1UspW4GHgjPRnZwAPpZ8/BJwZUteCtnsCsFZKmW3Q\nmy65nm/BrpeU8iMp5T/Sz3cAbwP7hXR8C697xd7XuVLxv0CNEGKg5ncj65eU8mUp5db
 0y/8FBoV0\n7Jz7FtF3w277XDIqG0aBlHIpsMVjl7zeXyUtADTZD9hge72RzoFjHynlR+nnH6PKV4ZB0Ha7ldUE\nrkwvAR8IS9USoF8SeFYI8aoQYnIW34+qXwAIIfYHvg783fZ2GNfL617x20fnu9kStO2LULNIC7ff\nM599+3b691kshPhywO9G2S+EEAngZOBR29tRXjMv8np/FX09ACHEs8AAh4+uk1L+JazjSCmlEELb\nJcqrX0HaFULEgNOB/7K9fQ8wG3UTzgZuAyblsV9HSSk/FELsDTwjhFidnrnofj+qfiGESKL+qFOl\nlNvTb2d9vXoaQojjUALgKNvbvr9nxPwDGCKlbEjbZ/4MDMvj8f04DXhJSmmfmRf6muWFohcAUsrv\n5tjEh8Bg2+tB6fcAPhFCDJRSfpReZn0aRr+EEEHaPQX4h5TyE1vbu54LIX4LPJHPfkkpP0w/fiqE\nWIBafi6lwNdLCFGBGvzrpZSP2drO+npl4HWv+O1TofHdbNHpF0KIrwL3AadIKTdb73v8nnnpm01Q\nI6VcJIT4tRCiv853o+yXjW4r8IivmRd5vb96gwpoBTBMCDE0Pds+B1iY/mwhcH76+flAWCuKIO12\n0z2mB0GLcYCjx0AU/RJCVAsh+lrPgRNtxy/Y9RJCCOB+4G0p5e0Zn4V1vbzuFXtfJ6a9Nb4JbEur\nr3S+my2+bQshhgCPAedJKd+xve/1e+arbwPSvx9CiMNR485mne9G2a90f/oB38F2z+XhmnmR3/sr\nbCt3PjfUn30j0AJ8Ajydfn9fYJFtvzEor5G1KNWR9f6ewHPAu8CzwB4h9cuxXYd+VaP+CP0yvj8P\neAN4Pf0jD8xXv1BeBqvS21vFcr1QKg2ZviavpbcxYV8vp3sFuBS4NP1cAL9Kf/4GNu8zt/sspGvk\n16/7gK22a7PS7/fMY9+uSB97FcpA/e1iuGbp1xcAD2d8L7Jrhp
 rsfQTsRI1dFxXy/jKRwAaDwdBL\n6Q0qIIPBYDA4YASAwWAw9FKMADAYDIZeihEABoPB0EsxAsBgMBh6KUYAGAwGQy/FCACDwWDopRgB\nYDAYDL2U/w9rzmhkh+BocQAAAABJRU5ErkJggg==\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7fcfcf3b5e50>"
+       "<matplotlib.figure.Figure at 0x7f68af50c890>"
       ]
      },
      "metadata": {},
@@ -138,13 +138,6 @@
   },
   {
    "cell_type": "markdown",
-   "metadata": {
-    "collapsed": true
-   },
-   "source": []
-  },
-  {
-   "cell_type": "markdown",
    "metadata": {},
    "source": [
     "## Create the MLP model\n",
@@ -211,7 +204,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 7,
    "metadata": {
     "collapsed": false
    },
@@ -220,23 +213,23 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "training loss =  0.245654\n",
-      "training loss =  0.236532\n",
-      "training loss =  0.228489\n",
-      "training loss =  0.221329\n",
-      "training loss =  0.214903\n",
-      "training loss =  0.209094\n",
-      "training loss =  0.203810\n",
-      "training loss =  0.198976\n",
-      "training loss =  0.194531\n",
-      "training loss =  0.190426\n"
+      "training loss =  0.705488\n",
+      "training loss =  0.479273\n",
+      "training loss =  0.414510\n",
+      "training loss =  0.370120\n",
+      "training loss =  0.337781\n",
+      "training loss =  0.313082\n",
+      "training loss =  0.293514\n",
+      "training loss =  0.277555\n",
+      "training loss =  0.264237\n",
+      "training loss =  0.252912\n"
      ]
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAElCAYAAACxqgs3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzsvXmYFOW59/+t6WFxtp6OMCzHBYVZIDAwmwzgIGjskVlQ\nojFCFI4MyZu4IShBZDhGYvLzHEwQcpKj8XDe6Enc3iSvCUM2l+nBRBwVE81JNIkyqDlxiUyrb+JJ\ndKa/vz+qarq6u5anerpn4/5cV18w3dVVT1VX9/197udeNJIQBEEQBEFIh5zhHoAgCIIgCKMXERKC\nIAiCIKSNCAlBEARBENJGhIQgCIIgCGkjQkIQBEEQhLQRISEIgiAIQtqIkBAEQRAEIW1ESAiCIAiC\nkDYiJARBEARBSBsREoIgDCmapn1B07SYpmkfGe6xCIIweERICIIw1NB4pI2madM1TXtQ07Sopmnv\napr2kKZpp2VofIIg+CB3uAcgCILgB03T8gFEABQCuAVAH4DNACKapi0gGR3G4QnCcYcICUEQRhtX\nApgJoI7kswCgadpPAPwXgOsAtA/j2AThuEOWNgRhDGK4/v9D07Q3NE37m6Zp/6Vp2uVJ25xlxCpc\nrGnalzVNe13TtL9omvYDTdNOstnnJzRNe0bTtPc1Tfuzpmn/qWnadJvtyo1lh7eMbV/UNO0Wm2GG\nNE37lrE88Y4x3okKp3chgKdNEQEAJH8H4FEAFyu8XxCEDCIeCUEYY2iaVgKgG0A/gL0A3gawAsA+\nTdMKSe5Nest2ADEAtwIoAbAJwMPGMsHfjX3+I4D/MPZ7A4ApAK4FsFjTtCqS7xnbVQJ4HMDfAdwJ\n4BXo3oMWJHoKNAAPAjhi7K8awAYAbwLY5nJuGoBKAPtsXn4KwLmapuWT/Kv7VRIEIVOIkBCEsceX\noRvqBSTfMZ77pqZp9wL4gqZpd5oCwSAEoILk+wCga
 dovoRv5TwP4V03TcqGLjOcBnEXyA2O7XwDo\ngC48bjb29TXogZRVJP/bcgw7cXCY5GfMPzRNmwSgzWFbk48AmADgdZvXzOemA/iDyz4EQcggsrQh\nCGOPjwPYDyCgadqJ5gPAzwAEoc/+rdxtiggAIPld6Ea5yXiqDrqn4humiDC2+xGAFwE0AwNCoAHA\nviQRYQeheyysPA7gRE3TClzed4Lx799tXvtb0jaCIAwB4pEQhDGEpmmTARQD+AyA/2WzCaGLAisv\n2Wz3EoAZxv9PMd73e5vtXgSwxPj/6ca/v1Ec7qtJf5vZFiEAf3F4z/8Y/06weW1i0jaCIAwBIiQE\nYWxhehm/DeBuh22eH6KxeNHv8Lzm8p5e6N6IaTavmc/9aTCDEgTBHyIkBGFs8WcA/w9AgORjiu8p\ntXluFoDnjP+/At24l0Ov32Cl3Hgd0AMnAWCu6mD9QpKapv0aQK3NywsBHJFAS0EYWiRGQhDGECRj\nAL4H4EJN0z6a/LoRx5DMWmtcgqZpn4A+u/+R8dQzAN4C8FlN08ZZtlsBYDb0gEuQfBvAQQDrNU07\nOTNnZMt3AdRpmjYQ66FpWjmAs6EHiQqCMIRo5KAq1QqCMMIw0j+fhB4LcReA30LPdqgBcDbJScZ2\nZwHoRHyp438DmApgI/T4hQUk/2Zsuw56+udTAO4ztrsGwBsAqm3SPz8A8E0APQBOA9BEssrY5iYA\n/wRgMsley7jNY5xGMjl+wnp+BQB+Cb2y5W3QK1tugu41qSJ5LJ3rJghCesjShiCMMUi+pWnaGdCN\n9SoAnwNwDHoQ5OeTN4eeLloJvZ5DIYCHAVxpighjn3drmvZXY5tbAfwVuufjBlNEGNs9r2laPYAv\nAvgs9ADIVwA8kMHz+4shgnZDr4GRA10QbRYRIQhDj3gkBOE4xeKRuIjk94d7PIIgjE4kRkIQBEEQ\nhLQRISEIgiAIQtqIkBCE4xtZ
 2xQEYVBIjIQgCIIgCGkjHglBEARBENJm1KV/Gs2HGgEcRbxJjyAI\ngiAI3kyE3kfnp5lKlx51QgK6iPjOcA9CEARBEEYxnwJwbyZ2NBqFxFEA+Pa3v43Zs2cP81CETLBp\n0ybs3r17uIchZAj5PMce8pmOHV544QVceumlgGFLM8FoFBJ/A4DZs2ejurraa1thFBAMBuWzHEPI\n5zn2kM90TJKx0AAJthQEQRAEIW1ESAiCIAiCD0giEulCS8sG1NSsREvLBnR1HcTxWk5hNC5tCIIg\nCMKwEI1GEQ6vw8svL0A0ugPAyQBewxNP7MPMmbfh4YfvQXFx8XAPc0gRISEMO6tXrx7uIQgZRD7P\nsYd8pjokEQ6vw+HDO0DWWV45FdHoThw+/DTC4XXo7n4ImqYN2ziHmjEpJF599VW8/fbbwz0MQZHy\n8nI8++yzQ3a8SZMm4ZRTThmy4x1viNEZe8hnqnPw4ON4+eUFSSIiDlmHl16qxOOP/xxLlzYM8eiG\njzEnJF599VXMnj0b77///nAPRRih5OXl4YUXXhAxIQiCL3btusdYznAmGm3Drl1fEiExmnn77bfx\n/vvvS50JwRYzh/rtt98WISEIgi9ef/0t6DERbpxsbHf8MOaEhInUmRAEQRAyybRpJQBeA3Cqy1av\nGdsdP0j6pyAIgiAosGXLWoRC+1y3CYX2YcuWtUM0opGBCAlBEARBUGDp0gbMnPkraNrTtq9r2tOY\nNet5NDScOcQjG17G7NKGIAiCIGQSTdPw8MP3IBxeh5deqkQ02gbgFACvIhTah1mznsfPfnb3cZX6\nCYiQEARBEARliouL0d39EA4efBy7dn0Jb7zxFqZNK8GWLWvR0LDzuBMRgCxtCIq88soryMnJwVe/\n+tW03t/V1YWcnBwcPHhw4Ll//Md/xGmnnZapIQqCIAwJmqbhrLOWoqPjLjzzzA+wf/9dWLq04bgU\nEYAIiVH
 HoUOHcPPNN+O9997Lyv5//OMf4+abb87KvpO/ZJqmISdHbkFBEITRjPyKjzKeeOIJ7Ny5\nE++8805W9v+jH/0IO3fuzMq+k/n3f/93vPjii0NyLEEQBCE7iJAYZfjpLkcSf//737O2/8ESCAQw\nbty4ITueIAiCkHlESIwibr75Znz+858HAMyYMQM5OTkIBAJ49dVXAQA5OTm45pprcO+992Lu3LmY\nOHEifvrTn9rGJwDxuId77rkHAHD55ZfjG9/4xsC+zP0nc9ddd2HWrFmYOHEizjjjDDzzzDNpnU9y\njIQ1DkPlGL/73e9w0UUX4cQTT8QJJ5yAuro67N+/P62xCIIgCOkhWRujiAsvvBC///3vcf/992PP\nnj048cQTAQCTJ08e2ObRRx/Fgw8+iKuuugqTJk3CjBkzEI1GlYKAPvvZz+JPf/oTHnnkEXznO9+x\n9U585zvfwV/+8hd89rOfhaZp+Od//mdceOGFOHLkiK3ocEPTNNtxqRzjN7/5Dc4880ycdNJJ2LZt\nG/Lz8/Hggw/iggsuwPe//32cf/75vsYiCIIgpIcIiVHE3LlzUV1djfvvvx/nn3++ba+I3//+9/iv\n//ovlJeXDzzX1dWltP+FCxeirKwMjzzyiGO3v9deew0vvfQSioqKAABlZWW44IIL8NOf/hRNTU1p\nnFV6x9i4cSNmzJiBp59+Grm5+m38uc99DmeeeSa2bt0qQkIQBGGIOO6FxPvvv5/1gL+Kigrk5eVl\n9Rgmy5YtSxARmeaSSy4ZMPAA0NDQAJI4cuTIkB0jGo2is7MTX/ziF/Huu+8mvDccDuPmm2/G66+/\njmnTpmVsTIIgCII9x72QePHFF1FTU5PVYxw+fHjIGojNmDEjq/s/+eTEznfFxcUAdOM+VMd46aWX\nQBI7duxAe3t7yvs1TcNbb70lQkIQBGEIOO6FREVFBQ4fPpz1YwwVJ5xwQspzTvER/f39
 vvfvFAeR\nyWwPr2PEYjEAwPXXX4/GxkbbbWfNmpWx8QiCIAjOZFVIaJrWAGALgBoA0wBcQPKHSdvsBLABQDGA\nXwD4HMmXsjkuK3l5eaOq3Xg6ldNCoRBIptSeOHr0aEb2P9ScfvrpAIBx48bh7LPPHubRCIIgHN9k\nO/0zH8CvAFwBIGXKqmnaVgBXAfgMgDMA/BXATzVNG5/lcY1a8vPzAcBXQapTTz0VgUAgJf3zG9/4\nRopwMPefrcqZmWDy5MlYtmwZ7rzzTrzxxhspr7/99tvDMCpBEITjk6x6JEj+BMBPAECzn+puBPBF\nkh3GNmsBvAngAgAPZnNso5WamhqQxI033ohLLrkE48aNw8qVK22XNEyKiorwiU98Anv37gUAzJw5\nEx0dHfjzn//suP+rr74ajY2NCAQC+OQnP5mRsWdy+ePrX/86GhoaMG/ePHz605/G6aefjjfffBOH\nDh3Cf//3f+OXv/xlxo4lCIIgODNsMRKapp0GYCqAR83nSL6naVo3gEUQIWFLbW0tbrnlFtxxxx34\n6U9/ilgshp6eHpxyyimOdRkA4Gtf+xr6+vpw5513YsKECfjkJz+J2267DXPnzk3Y7uMf/ziuueYa\n3H///QO1JEwh4bR/t+Mmb+f1nOoxZs+ejWeeeQY333wz7r77bhw7dgwlJSWoqqrCTTfd5DkWQRAE\nITNoQ1USWdO0GCwxEpqmLQLwcwDTSb5p2e4BADGStoUMNE2rBnDYKRPi2WefRU1NzZBmSgijB7k/\nBEE4njF/AwHUkHw2E/uUEtmCIAiCkAFIIhLpQkvLBtTUrERLywZ0dR0c0h5Gw8Fwpn++AUADMAV6\nXITJFACeC9ybNm1CMBhMeG716tVZLcYkCIIgCHZEo1GEw+vw8ssLEI3uAHAygNfwxBP7MHPmbXj4\n4XsGauIMFffddx/uu+++hOeSi/hlgmETEiR7NE17A8A5AJ4HAE3
 TigAsBPB1r/fv3r3bcWlDEARB\nEIYKkgiH1+Hw4R0g6yyvnIpodCcOH34K4fA6dHc/BADo6jqI2277T7z++luYNq0EW7asxdKlDRlP\nv1+9enVKuwPL0kbGyHYdiXwAs6B7HgDgdE3T5gPoJfkagNsBtGua9hKAowC+COCPAH6QzXEJgiAI\nQqY4ePBxvPzygiQREYc8A88+exoefPBB3HbbdwbltSA5ZEJElWx7JGoBdEKvIUEAXzGevxvAepL/\nomlaHoA7oRekehzACpIfZHlcgiAIgpARdu26xxAGzvT3b8SnPvUxxGL3gTzD8orptXh6wGvhJAhG\n4vIJkOVgS5JdJHNIBpIe6y3bfIHkdJJ5JBuHsqqlIAiCIKSLGVz5+ONPQzfqbhxFf39rkoiw7qsO\nL71Uiccf/7njsczlk2h0J4BToZtwU4jsQDi8blgCOyVrQxAEQRB8Eo1GccYZ5+PjH38U7703F8Br\nHu+4C8Amj322Ydeue2xf814+cRci2USEhCAIgiD4INU78L8A7PN41+/h7bU4Ga+//pbtK/rySZvr\nu92ESDYRISEIgiAIPkj1DjRAbyv1tMM7ngbwIby9Fq9h2rQS21d0gZG+EMkmY7aN+AsvvDDcQxBG\nIHJfCIIwWFKDKzUA9wBYB6ASQBuAUwC8Ct1T8TyALwP4GoDbHPcbCu3Dli1rbV/TBcZr0GMjnHAW\nItlkzAmJSZMmIS8vD5deeulwD0UYoeTl5WHSpEnDPQxBEEYp9t6BYgAPQU8+/BL0OouvQhcPOwE8\njby8A/if/7nYNuBS057GrFnPo6Fhp+0xt2xZiyee2GcspdjjJkSyyZgTEqeccgpeeOEFaSUtODJp\n0iSccsopwz0MQRBGKc7eAQ3AUuNxFMAtAE5GKPRPmDXrefyf//MTfOIT1+CllyqNeAfdaxEK7cOs\nWc/jZz+72zH1c+nSBsyceRsOH37aNuDSS4
 hkkyFr2pUpvJp2CYIgCEI26eo6iHPO+b/o79/tstVm\nAN0oKvor9u//GhoazoSmaSCJgwcfx65d/4k33ogXlDJfd+Odd95BOLzOVYh41ZHIRtOuMeeREARB\nEIRssnRpAwoKrsS77z4FwK4uxNMAXgbwbSxd+mUsXdow8IqmaTjrrKU466ylKe/yqlpZXFyM7u6H\nDCHypSQhsnPMVrYUBEEQhDGFpmn49rdvxQUXXIH+/hWwD668G6HQV5RjFlSrVroJkeFC0j8FQRAE\nwSfNzU1YsGAagJOgB1euMv4NA3gImvYHI2bhTM99jeSqlSqIkBAEQRAEH5hLECee+BHk5e1Fbu6L\nANYAuANmcGVt7S2uwZNWRnLVShVESAiCIAhjCrMHRkvLBtTUrERLywZ0dR3MyIzeWhr7Zz/bifff\n/zX6+r6N3NynkJc3F42N/4SHHgqju/sh5QZaI7lqpQoSIyEIgiCMGZxiDX7yk9tRUHAlvv3tW9Hc\n3JRWYKJ1CSLRe3Aq+vq+gv7+S9Dbe4tSBoaVkVy1UgXxSAiCIAhjArdYg/7+3Xj33X244IKbUFe3\nEu+8847v/WdrCSJel8KN4alaqYIICUEQBGFM4GXogTPQ378Chw+3phW8mK0liC1b1iIUcm/6NVxV\nK1UQISEIgiCMCVQMvZ6q+XRanoNMLUEkx3D8y7/cjZKSx6FpT9luH69a6Z0BMhxIjIQgCIIwJlA1\n9MBbiEa3Y9euLyUUi/IiE42znGI4gsGv44QT1mH8+I/jnXc+DT/ls4cbERKCIAjCmEDV0AMlAE7C\n7373W7S0bLCtImnHYBtnuQVrvvvuvwC4CCefvBlLlryJN97484ioWqmCCAlBEARh1OBWRlrF0OuV\nJ1cBaEZPTz3+8Idr4FRFMpnBNs5SieF4663l+OY3w748JcONxEgIgiAIgyabtRtMrDUcDhzYgWef\nfQgHDuzAqlWP4Iwzz
 kdl5TzMnPkrx1gDvQfGc9ALR+1EX99X4KeKpKZpePjhe1BbewtCoR3QO3zG\nABxFKLTDswhVOsGaQ3FdBw3JUfUAUA2Ahw8fpiAIwlghFouxszPC5uY2Vle3srm5jZFIF2Ox2HAP\nzZPe3l7W1rYyFNpB4CiBfgJHGQrtYG1tK6PR6KCPEYvFWFvbSk17igBTHpr2FOvqVrK3t5d1dSsZ\nCGwk0GOMpYdAO4GVBDoIbLPdh/koLNzKSKTLdSyRSBebmzewpmYlW1o2sKvroOdnVV3daozH+dhA\nH2tqVmbtuh4+fJgACKCambLLmdrRUD1ESAiCMNYYCkOcCezETmdnRMnAD1YQRSJdxvVxNsKhUPuA\nQe/o6GAwOJ+BQA2BNQQiBI4QqDeusZsx72EwWJly3Qcr9pqb25SO3dKyQVk4+b2uIiRESAiCMMbI\nlsHINE5ip6BgLQOBa5UM/GDwY4RNkj0HixatYk7OPCWvAHBOwnXPhNiLRLpYXLzd9djFxTeyq+ug\nL+HkBxESIiQEYVgYzW73kU62DEYmcRc7/g18OqguCxQVVTreo7oYWaM0XmBDgodjMGLP/P6sWHE5\nNW0GgW6H43YzP382+/v70xJOKmRDSEjWhiAIrjjlvXtFuGcL0jlqfySnyDmhB+DtcN1GD8DzV/Mg\nk7hnGwxNnwjV1M733ovh2We/BeD/pdyj+hg2Q8/c8MrsWIto9GTs2vUlkFQujZ38GSV+f84DcCL0\nduOV0Itj6fUi9GM+j9zcZvz8578YXf03MqVIhuoB8UgIwpAx0tzuoyWWwIqXN8dvAN5w4D47zs7M\n2XrdqqpaOHv2QgYCSwi0GsfsIhBLOk47gTupB1XGUu5R/Tx6jH0cchjrU5b369c9Xe9A6vfH3E/M\nGP8G41gbCBw0ntf3kwmPhN29981v3pVxj8SwCwPfAxYhIQhDxkhyu2da1AzFcs2xY8dYVraIubln\n
 EmgksJ7AAywubh8QPtlyYWcSd7HTRSCz90iiYHyOQAuBGxPEo37MVgJRGwHQbhjmxOPH7+cogXnU\nszd6mJrZYe5Tv+7pir3U74/6fgb73XMS3YWFG0RIiJAQhKFjJBm5TIqaofBsHDt2jHl5FYaxsjOA\nj7KubiU7OyNpnddQxq243wcx43zs1/3TEXhxwWju21486sdsJLA9RQDos/zEezRx3xECa2nvFUi8\n7ul+D1LfNzRZG+7vlWBLERKCMISMJLd7pkTNUCzXxGIxlpcvI/Ckwzj12XNx8XZGIl2+xzPUSzze\nIi7KQKCahYVbaZ3hh0LtrKtb6Ws8icfy9nYAmwh8jYnLHH2GOEi9R6PRKOvqVhrZE2GqCCC/qaem\nwDvhhNlJ3x+v84mxoOAy1tevYnV1K8PhS1lRsZyh0HZf19V9vCIkREgIwhAykjwSmRI1Q7FcE4l0\nMTd3s8dY2wk8wJaWDQPGLRRq9zQY/f39LCtbROBC2sULZCNuRUV81da2GgbUX5GmZBLvObX7L9H7\nYPecfVpoOHwZ8/JmMzd3k+t1VxWfx44dSxJ465PG7+Zh6SVwtpFKGxeHxcXtLCtbzHB4nfJ1df/e\nipAQISEIQ8hIipHIlKgZCnGkegygbUD4qFRL7O3tNTwd19EtXiAbn4kfsTMYEgWjmnhM9D6QTjES\ndqhWqfQ6f9NLlCg27DwQUWO81v0cIVBFpwBQv+LQXXSLkBAhIQhDyEjK2siUqBmK5RrVYwCNyoLF\n/Cy8lkuskf+ZJt3S0H4YvEfCeh0ye48mn39zcxtvv30vm5rWs7R0uRFUa80mcfJAmFkbFxGYQ6CJ\nwA1p3dt2sTL19atcrpsICRESgjDEDNVM1ItMiZp4CmDEMFR26YRD45HIzW1Q9hzEhVTMZezmTNyf\nEBpJBcf8x0hsM65HD3VPTSOBYxm/R5OvUTh8KcvLlxnfC7dsEjsPRA8TM0TS8
 5I5xcrk51/GnJyN\nIiQcByxCQhCGnKGYiaqQCVGzf38HA4Fq4wff3gBkIkZCH6ObYbiB5eVLfPZpeM4Yo9PYn6M+O1cX\nQtkI3ByMMPGTtaFp3QwG5w0cY8+evWxqasv4PZp6jfqoB2qqeIfIuAeijTk5s6hX17RmiPj3kiV6\nqJKFZYTAMtovlYiQECEhCMc5gxE18R9ft2JE57C2tnXQWRu6MXQqhfwk8/Nns7e3V3mfVVUt1Osp\nOKVCPmUYklZlIZSNpSs/wsRJcJgdPHUxZoqnxJoPodB2VlQsYzh8aVa9KPbXSMVTspHATAKVBFbR\nbBpWVFRpIxrUPBLnnfePPHjwIHfv3s2Pfexcatpn6Cwsm5iTU5mSSVNY2Db2hASAm6A3dLc+fuuy\nvQgJQRDSQiXOAriat95666ANUtx7kpi6l5u7iRUVy5VFhGlsg8Fy6kWZ3Ma+jcBZysY/08G0foSJ\nl+Do7e0dEIzV1a2sr2/mokWrWFOzko2N61hWtpjB4HYC91PPjmhkbu6ZLCtb7EugpXeN7Ax/8pLT\nagLVBC6nvtxST02bxZqac23e6y1McnKuMgUAJ06cyKKicupeETdh2ciFC5sSRPddd43BypaGkHge\nwGQAJcbjIy7bi5AQhOOcdF3nfmIXMlGPYbBLQonGdoXS2PPzZyuPO9MZLKrCJJ3aGdZrqnuVHqH9\nbHwLA4HTWVl5XtpeCuv9pXsQkq9R8lJEr8NYNhvG/pjx9zZOmFDKoqLrbUSIW+GtQywpmc99+/bx\nueee4wcffMDS0sXU4yzcPrvtLCtbknBuY7L7pyEknvWxvQgJQTiOGcyavno2xcphb9+dOrtXXUdv\nVT5GpjNYVIVJfX2zguDYzttv35siFjs7IywubvcwvN3G6z2+Yz1S768Wm2tkPU8vEZAcL/Ekx407\nnanLa2ZQZnJRr+228T+TJ9cqXeuSkrqE943l7p+lmqb9
 N4C/ATgEYBvJ14Z5TIIgjDBIIhxeh8OH\ndyCxE+OpiEZ34vDhpxEOr0N390O2nUBVO0gCJXDr6Jg8pmx0I03tuKk29mnTpigfQ/V66Nt5o9qx\n8re/fQ3vvfd1162i0Q24/vq16Ov7T1g7zsZi/xfvvrsZgAbAvhsncAaA+QBeU7ovTOzvrylIvUZr\nEe8g+jiABS5jqYPe6fPnABoALMSHH64A0IpAYA36+zdB7wD6DoqL52LKlC6ceuobOHYsOnAvNTR8\ncWDcJHGwqwt//+u7ULnWoVCBxzYZIFOKJN0HgEYAFwKYC+BcAL8A0AMg32F78UgIwnHKYNf01WIk\nrMWM3N362SxVnTq7z3xzrEzHSKh6JOwDDpMfdoWmaMzk7ZYbUo9jrS+hch72KbbLCbjVh0in1kXP\ngIfFz7JXb28vW2truSMU4nJMUTpuc3Nbwj7G5NJGyoCAIIB3AFzu8LoICUE4Thnsmr5XMGCqG9rZ\nrZ/tYl2pyw5eqZD+j5fpc1AVJu4Fk5yMr/VRTf9CRLXqqVOK7Tba14dIZyz+C57FYjG21tbyKU0j\nAUYAFuNK1+MWF9+YIp7G8tLGACTf1TTt9wBmuW23adMmBIPBhOdWr16N1atXZ3N4giAMI6quc327\nVDRNw8MP34NweB1++cuZ6Ou7Brpb+VXorurnAdwN3W0OuLn1U5ceElFdGrF/LzF+fACJLnUNwD0A\n1kF3lbcNjD0U2odZs57Hz352t6/lFOv1eOmlSkSjg9vn0qUNmDnzNhw+/LTtddG0pzFr1vP48pc3\n4dxzb0d//26Xvd0O4DKH18qhukQVx/m+MPnTn94EsB3APyFxqeJUAF8G0A3gEgAHoM93TwbwYhpj\nUV8uMnn84EEsePll1OkTaiwFMAvfw2FcCqI+ZXtNewof+chPcNttv8Ztt+0aeP7dd9/1dVwlMqVI\nMvUAUACgF8BVDq+LR0IQjlOampK
 bINnPZJPducnEYjHefvte5uY20KmFtJc7PFs9O8zlkoKCtbRP\n9zSLG21gIFDDRYtWDbrwUiYLjqkUDevsjBhFwdw8Q9XGedq9/hj1Og1u1z6x34bXZxGLxVhV9TGH\na259XMvx409lVdUK4zOK0LumRHLvj+2+C561NTfzaNKOowDrMJUhXJFwrfNxBQswjSeNG8eaSZO4\nvLSU65ua2BWJ8Jlnnsm4R2IkCIddhrg6FcBiAA8DeBPAiQ7bi5AQRjwjqeTwWOL22/dSL4Ps9qN9\nHffu/Zrnvgbr1lfNeFiwoFn5/PxVdRzerJLkcVvv96am9UYPCvsqk/ElBLfS0WaVTrvreoSBwOlU\nryxJ5ub2ANCEAAAgAElEQVRuYmnpYjY3t7GzM8IjR47we9/7Hm+88UY2NjZy8uTJhGLcwaJFqyxC\n0l/WhqZ1235usViMkc5OtjU3s7W6mm3NzeyKRAa2a62uZr/NAWLQlzmaMZU1mM4CTOEnAZ4LsB3g\nUYD9xr/bi4vZMHv2mBQS9wH4I4D/ge5fvBfAaS7bi5AQRjTZDMA73tE9Et5FeLw8EiaqJbf9N0aK\nG51gcP4gYgzs+zQUFm4d0j4nbqRzv8dFWNy7kuoZcgq21D1F+/d3sKJiOXNzr3UQIlHLe56kXhSq\nzxjjVQSmEgCnTZvGlpYW3nTTTTz99AaqpsMmCkmnfhqbaO394fS5WYMoTcPfA3BtQQErg0E2zZ/P\n2smT+YAhHJwG1wPwQoCtAJ9y2OZuXUSMLSHhe8AiJIQRzEjqljkW0X+8jzn8aJsG5G3fDavc3PpO\nhrKgYK1LYyTz0c6CgrWDzHpINrZruGhRy5DfQ3ZiqrMzwpqaFt/3u3qb9VSPhHWf/f39LCtbTL2L\nZjOB+QTWUm/Lbd4XW22Ehe4ZWLDgvISx+VmuSt02+XNqI3ATP4JTWIPpPBtTuLaggC01NSllwq1B\nlATYa4iBHU
 keheuM56MOg7sO4F7jfU4ncFiEhAgJYWST6XQ6IZFEd7LTTDZzLbTdhWGMwGzqxY/s\nPmvTpX1EeTzZanGuutTmtN2xY8ccxNQNRqxD1HG8dve7yvckENhoxCD00M5T1N/fz3vu+U/m53/e\nwZgvJ9BAu9gXp7H5+f4qbYsr2JX05FOaxpV1dQPXvisS4Y5QaOD1GNw9Ct0AVyLVM/EkwEaA6w3R\nIULCbcAiJIQRTLYC8AbLcMRsZOOYmRRqKuPzPt551NfHTe9IH4H7qNcdmEN9dvwYq6vVqk1m4/5R\nXXpw2q64uJ15eRUuDci6mRyP4DVeVc+d/vlsYE1NK88665Pcvr2dGzdu5NKlS1lYWEj3mAb/19KP\nR1EPzlxB5wZwh1iNqbZLEe2hEA92dZFMDaLsgrtHgQA3A3wA8SWQdoAVAI8ZIsQulkKEhHXAIiTG\nLGMhQDFbM8rBMBwxG9k6ZqaWjlTH523Y2wwB0UXgMgIV1PsrWOsP3MhgcB6j0ajnPW5fEMlsDa0X\nRMpGE63+/n6X7bqo11Bwu6eTMyS873fn+JTtnDv3XH7jG9/gNddcwyVLljA/P980fpw5cyYvvvhi\n3nrrrSwtPcvl+5bed9FtXBUVy3hpOMzW6mqub2riklmzOMcmayKEKzgHU7kC9jENPQDbmvUg3OQg\nyja4exTM98/RNNaffDIbcnN5EHFPhNf7RUhQhMRYZawEKI40j8RwxGxk+5iqAZKZGJ+3MOwyjKhX\nhkU3q6qaWFPT4nqPx2IxLljQSOBs2reGPptVVSsyXiBqz569LtulH8/gdb9/8MEH3LfvP1hZ2cjJ\nkxewuLiC48ePNw0dS0tLeckll3DXrl189NFHUz5b9+9b+t/F5LiZxsZ1XFRWzvbi4oGYhQegxyQk\nZ020YAq7jOfbAR60OXAfwDl5eYxGo1wbDicYfi+Pgvn+RkOMmPEVpifDy6MhQoIiJMYioz1
 A0TrL\nLC1dztzc5HK6qT/c6cZI+PXaDEfMRraOmXzu9fWrWF/fzOrqVl91DxLHZz/zLy7W8/y9hWGMehbJ\nv9GrlkAgsJHAna73eH9/P6uqmujqLq9uVv4uqArbkpI6l+1UG50tT7mOQGwg7XLFist5113/zrvu\nuouf+9znuHDhQk6cOJEAqGkay8vLuWbNGn7lK19hJBLhO++843l+nZ0RFhTc4DCmzJQUtwuGJNQ9\nBxscnr8IYGttLRecdBK3pbHfNoArjcDNlXV13F5czDD0WAnJ2vAasAiJMcdoDlB08qSkltNlgsFI\nRxSl47XJtIdERcgM5zq/CvHxObV+3kEgzMbGyxR7c1xP4KNK5+w8a1fxDPj/LqguteXlzXHZTtUj\n0WBzHZdT966YaZdXEpjK8vJyXnrppdy9ezcPHjzI9957L+Eec6unYL0nWmpqOC3wD9RshVfMOLa9\nKFP9LiYHQ5oPVc/BSpvnTU/FRZrGa5MMv0qMRDt0j8iGlpaBa9YVifCycJiz8/L4uUCAjQC3Qxcd\nZizFjcXFXDpnDkVIiJAYc4y05QBVvPs2WHPX1V3v6RzL6UcxkzEbqsY803EimfZY6ePro1cb6ry8\n2R6xA/p2eqBhi7FPq3fjAgJNxmtt1Ksxtrre4+6eAfNxhPX1zQnFn3bv3sOmpvUp4i4zHgnvmb2e\nYmkXI3GIelpm3DvnVJDJvMeS6ykcBbgjFGJrbW1CXY/W2lp2A9wPcBKmclxSnMK4wNWsqlrB6urm\ntJfBSPuKkkT6HomnEM+6WG3sI2o81w7wCMAW6NkZdvs037+9uHggYDP5+9IVibCtqYlLSktZV1LC\n5eXlbGtu5sGurrFZ2dL3gEVIjDlGYoCiCiqz1dzcTSwrWzKoksOqx7KbqWZKpPkx5pkWhtnpUPmA\np3HMzd3Erq6DjjEZublmsaEogUupL3EkezdupC4knjP+P5NAB+2Xvb
 w8A6TuRWlhIHCtsf+3jeNe\nRztxt39/RwZiJMz4D6cqkk/SPWsjNRDT7vNyWkIwH9a0ya5IhNcHgwO1FnoAPgbwbEzlNExnCabw\nk3n5A56MwZT/dqoomW52xUrE60C0IO7ViBn73ABwBcB5ALci0aNgvv9RICGF1A/HRfdPzwGLkBhz\njFaPxFCOO91jZcoIZzy/PgutqUtK6pTjRvQ4FvXraWeM9uzZy+JiM9BymYuhtZZI7iZQQ11cJNde\n8PIMmAa92/h/J4G59HLdqxSM8va8PEq9ZsZ22ldudK4jYb+kk3qvOi0hWB9m2uT6piaG4RwH8BTi\nwYiDxckj4VXv4RDAGujZFCuhC4SDSMziMD0Sdu83hcUagHOhe0AeAPj5ggKurKtLOwA9G0IiJ7mJ\nlyAMNVu2rEUotM91m1BoH7ZsWTtEI1JjsJ0oh+JYejfGX0HTnrZ9h9mNsaHhTNc979p1j9EZ0plo\ntA27dt2TkWOSRCTShZaWDXjssSegcu5vvXUinn32IRw4sAOrVj2CM844H++8807KlkuXNmD8+GNK\n+7ReT1L//TV/PCsrKzFz5q8AfBPAmQAWOuynDnq3zp8DOAPACgCt0Lt4cmCrUGgftm+/zOW78DiA\nBQBKAZwP4H8DWAnYdH7Ux6t3H92583Oorb0FodAOAEcBxAAcRSi0A7W1t+BnP7sb77//Pnbu/BxO\nPvlqjB+/KWE74EYAewD8AkAYwJcArDL+7YbeCbPYYcyAfp2TvwMn48nHf4GDXV3GdQXu2bULbdGo\ny36AtmgU9+zahRf/8AecgcT+nFbqANQCePEPf3Ddnwprt2zBvlAo5XmzF+stAK5D4hVrB/AF6J/M\nn6H3k70LQAPifWUBIBfAHQ7H1aA3oSoBMBX6FfwB9EZUsVhsMKeUeTKlSIbqAfFIjDlGa9bGaPBI\nkINPlyT9Lz8N5pipsRhqHT+TZ71u9004vFb5e
 rrFhlRVNbGoaJ7P8Zn/j7v81TwDZs0KM7ZD/Z6w\nelQWLGjmokWreOWVV3HNmjWsqKigpmkEwPHjx7OiooKnnLKQp566mPn5c6jHfTgtW6SbGtrDszEl\nIfbBaQnB+uiDnqlQO3myUnxCXUmJj2+ZPV5LLk8CPGX8eF4Ee8+DUyXKbugeDTevxpMO702ujukH\nWdogRUiMUTJh7Iaaocw2GeyxzGyL+vpVDAYrWVRUyfr6ZnZ2pkbD26Havju5SqDftWl7UakS7Gdf\nEMnpmujXs93zenZ2RlhWtojAhUxOazQFgHdcA5nYgMr8fw+BNSn3uNN3IRCoob6cYV4LNXFXVraM\nu3bt4urVq1lWVmYaEU6cOJH19fW88soruW/fPv7qV7/iBx98kPBZlATLPT73Lnq33baJkbCUjjaN\n4vqmJrXgxZYWLi8tVRIdy8vLPe9tFcwUy/ZQKDFmIRTikvJybi8udh3LdUiMldhaWMiaQIBRJAZa\nWve9GeByOPfVsFbH9IMICVKExBhmsEFRQ81QelIGc6xYLMYf/nA/g8G5liA99fTJ3t5eozGSe/vu\nTIgme8Hkr01z4sO54JDX9ayqOo/l5cuYHMioG/J4aq9qvEWqR6KPwWCl7T2e/F1YtGgVi4vnEVhj\nOZaqN2AK8/LyuHjxYl599dX81re+xV//+tf88MMPXT+LrkiElxUUMIQrXfYfY05OlUv57NTPRsMh\n1iWVjm4Phbh3zx5fMRIqoiMTMRLWz6QrEuGG5maurKnhhpYWX2OpKykZeF9XJMKWmpoBL4c10HIl\n9A6eZ8A9vbQH8fRPP4iQIEVICCOKofSkpHOs3t5e1tS0GI2VnqR92WXndDzT4OoBfu6VGzMhmpyX\ncJzaNG+nXWfH+MM528ftetbWthqFoVQCKO9nbu5mD4NunZWb//de9kpcVnmAeqCm6YVQ8dRs4/z5\nZ7Ovry/hM1Wp09DW3Mwe
 gLWY6lCnQRcFHykqdfCgbDTuu+fi1xZXsA5TU2bZptH3k7Xh5QW40SE9\nMtP4WZKx4ublqMjL49vQK2a2QV/+aDPERsxlnyqIkKAIiZHKWOiTkQ6xWIyPPdbJ+vomFhXNZzBY\nyUWLVmXt3P14beIi4A7qRZOcii+1Mhi83mUJwDRWTsb8OlZULM+IaHKPxTA7O7YxL2+OkeHwIJ3X\n7+lprM37duHCZhYVmUs+q7h79x7PpY+4IPjQaGql4jGJ/9/LgxP3mpiz/RiBSsaFloqnpjWhYZhq\nnQYybiCjAOsc+knUYipXzJ9ve19GIl3s7IywpKgspXS0naFtra7m/v37OS8Y5MZAIMW4WjMVBupI\nOIiO7kHEEPjFKasjWSjZeQ+cvByfOvdchpHaRnwH4m3EnfbphQgJERIjkrHSJ8MvI/284yJgPfVa\nA24Gp5HNzW0p+0j1EMSNuV61sI7AGZw8uTYj4slPUGkmYlScPkN/yxVHWFsbZjA4jzk51zBRZJkV\nTp8zhIfuPXHy4Lz++us8cOAAd+7cycWLlxC4OumYHQSutfz

<TRUNCATED>


[6/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/index.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/index.ipynb b/doc/en/docs/notebook/index.ipynb
index c252ba2..0c29187 100644
--- a/doc/en/docs/notebook/index.ipynb
+++ b/doc/en/docs/notebook/index.ipynb
@@ -4,47 +4,117 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "![Apache Singa](http://singa.apache.org/en/_static/singa.png)"
+    "![Apache Singa](http://singa.apache.org/en/_static/singa.png)\n",
+    "\n",
+    "# A Tutorial of SINGA V1\n",
+    "\n",
+    "Welcome to this tutorial for Apache Incubator-singa.\n",
+    "Please install [conda and SINGA](./installation.ipynb) before running the notebooks.\n",
+    "\n",
+    "## Outline\n",
+    "\n",
+    "* Introduction and installation\n",
+    "* SINGA classes\n",
+    "  * [Core classes](./core.ipynb) - Tensor and Device\n",
+    "  * [Model classes](./model.ipynb) - Layer, Loss, Metric, FeedForwardNet, Optimzier, Initializer\n",
+    "* Simple models \n",
+    "  * [Linear Regression](./regression.ipynb)\n",
+    "  * [Multi-layer Perceptron](./mlp.ipynb)\n",
+    "* Deep learning models\n",
+    "  * [Convolutional Neural Network (CNN)](./cnn.ipynb)\n",
+    "  * [Recurrent Neural Networks (RNN)](./rnn.ipynb) (WIP)\n",
+    "  * [Restricted Boltzmann Machine (RBM)](./rbm.ipynb)\n",
+    "* [Distributed training](./distributed.ipynb) (WIP)\n",
+    "* [Rafiki](./rafiki.ipynb) (WIP)"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Welcome to this tutorial for Apache Incubator-singa using Jupyter Notebook.\n",
+    "## Introduction \n",
+    "### Training and Inference of deep learning models\n",
+    "\n",
+    "#### Training objective\n",
     "\n",
-    "Please install [PySINGA](http://singa.apache.org/en/docs/installation.html#install-pysinga) before running these tutorials.\n",
+    "$\\min_{\\theta} \\sum_{<x, y>\\in D}L(f(x|\\theta), y)$\n",
     "\n",
-    "1. [Regression](./regression.ipynb )\n",
+    "Training procedure\n",
+    "1. randomly initialize $\\theta$\n",
+    "2. get a mini-batch of data $\\{<x, y>\\}$ and compute $\\frac{\\partial L}{\\partial \\theta}$\n",
+    "3. $\\theta \\leftarrow \\theta - \\alpha \\frac{\\partial L}{\\partial \\theta}$\n",
+    "4. repeat 2-3 until converge, i.e., $||\\frac{\\partial L}{\\partial \\theta}|| < \\epsilon$ \n",
     "\n",
-    "2. [MLP Tutorial](./mlp.ipynb)\n",
+    "<img src=\"./static/sgd.png\" width=\"400px\"/>\n",
     "\n",
-    "3. [RBM Tutorial](./rbm.ipynb)\n",
+    "#### Back-propagation for gradient computation\n",
     "\n",
+    "<img src=\"./static/bp.PNG\" width=\"300px\"/> \n",
     "\n",
-    "To learn more about Jupyter, please check [IPython in Depth](https://www.youtube.com/watch?v=xe_ATRmw0KM).\n",
+    "#### Popular deep learning models\n",
     "\n",
-    "If you want to use PySINGA and jupyter notebooks in virtual environment, please use conda virtual environment and install the following extension. Then you can select the kernel of the virtual environment in the browser. "
+    "<img src=\"./static/models.PNG\" width=\"200px\"/>\n",
+    "\n",
+    "\n",
+    "\n"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [],
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### SINGA V1\n",
+    "#### Software Stack\n",
+    "\n",
+    "<img src=\"http://singa.apache.org/en/_static/images/singav1-sw.png\" width=\"500px\"/>\n",
+    "\n",
+    "#### Progress\n",
+    "\n",
+    "|Components|Feature|Status|\n",
+    "|:---------|:------|:-----|\n",
+    "|Core |Tensor implementation|V1.0|\n",
+    "|     |Device implementation (CppCPU, CudaGPU, OpenclGPU) |V1.1|\n",
+    "|Model|Basic layers for CNN and RNN| V1.0|\n",
+    "|     |Basic loss and metric functions|V1.0|\n",
+    "|     |Basic optimizer and initializers |V1.0|\n",
+    "|IO   |Message paasing via socket| V1.0|\n",
+    "|Installation| From source on Linux and Mac|V1.0|\n",
+    "|            | From source on Windows|V1.1|\n",
+    "|            | From wheel on Linux and Mac|V1.0|\n",
+    "|            | From debian package on Ubuntu |V1.1|\n",
+    "|            | Docker images | V1.1|\n",
+    "|            | AWS AMI       | V1.1|\n",
+    "\n",
+    "#### Schedule\n",
+    "|Components|Feature|Status|\n",
+    "|:---------|:------|:-----|\n",
+    "|Core     |Tensor API = Numpy API| V1.2|\n",
+    "| |Operation scheduling and memory optimization| V1.3|\n",
+    "|Model | To support more vison, NLP examples| V1.2|\n",
+    "|      | General neural net API| V1.2|\n",
+    "|      | To support reinforcement learning examples| V1.3|\n",
+    "|      | Auto-grad + Functional API | TBD|\n",
+    "|IO | HDFS integration  |V1.3|\n",
+    "|Server| Consistency and communication optimization |V1.2|   \n",
+    "|      |Message passing via Infiniband |V1.2|  \n",
+    "|Installation | From wheel on Windows| V1.2|\n",
+    "|             | From debian on Linux | V1.2|\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "conda install nb_conda_kernel"
+    "## Next: [SINGA core classes](./core.ipynb)"
    ]
   }
  ],
  "metadata": {
   "anaconda-cloud": {},
   "kernelspec": {
-   "display_name": "Python [default]",
+   "display_name": "Python [conda env:conda]",
    "language": "python",
-   "name": "python2"
+   "name": "conda-env-conda-py"
   },
   "language_info": {
    "codemirror_mode": {
@@ -56,9 +126,9 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython2",
-   "version": "2.7.12"
+   "version": "2.7.13"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 1
+ "nbformat_minor": 2
 }

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/installation.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/installation.ipynb b/doc/en/docs/notebook/installation.ipynb
new file mode 100644
index 0000000..65093dc
--- /dev/null
+++ b/doc/en/docs/notebook/installation.ipynb
@@ -0,0 +1,93 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The easiast way to install SINGA is via [conda](https://conda.io/docs/).\n",
+    "\n",
+    "## Install Conda\n",
+    "\n",
+    "If you haven't install conda, you can install it via\n",
+    "\n",
+    "* Linux 64\n",
+    "\n",
+    "      wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh -O miniconda.sh\n",
+    "      bash miniconda.sh\n",
+    "\n",
+    "* Mac OSX\n",
+    "\n",
+    "      wget https://repo.continuum.io/miniconda/Miniconda2-latest-MacOSX-x86_64.sh  miniconda.sh\n",
+    "      bash miniconda.sh\n",
+    "        \n",
+    "* Windows (not supported for the moment) \n",
+    "\n",
+    "## Install SINGA\n",
+    "\n",
+    "With Conda installed, you can install SINGA via\n",
+    "\n",
+    "* SINGA for Linux\n",
+    "  * CPU Version\n",
+    "      \n",
+    "        conda install -c nusdbsystem singa\n",
+    "      \n",
+    "  * GPU Version\n",
+    "      \n",
+    "        conda install -c nusdbystem singa-cudax.y-cudnnz\n",
+    "    \n",
+    "    where <x,y,z> specifies the cuda and cuDNN version, which could be (cuda8.0, cudnn5), (cuda7.5, cudnn5) or (cuda7.5, cudnn4)\n",
+    "    \n",
+    "    \n",
+    "* SINGA for MacOSX (CPU only)\n",
+    "  \n",
+    "      conda config --add channels conda-forge\n",
+    "      conda install -c nusdbsystem singa\n",
+    "      \n",
+    "      \n",
+    "## Install Jupyter Notebook and Other Packages\n",
+    "\n",
+    "      conda install --file requirements.txt\n",
+    "    \n",
+    "To learn more about Jupyter, please check [IPython in Depth](https://www.youtube.com/watch?v=xe_ATRmw0KM).\n",
+    "\n",
+    "\n",
+    "## Run the notebooks\n",
+    "\n",
+    "Download the [notebooks](https://github.com/apache/incubator-singa/tree/master/doc/en/docs/notebook) and start the jupyter\n",
+    "\n",
+    "    jupyter notebook"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "anaconda-cloud": {},
+  "kernelspec": {
+   "display_name": "Python [conda env:conda]",
+   "language": "python",
+   "name": "conda-env-conda-py"
+  },
+  "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.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}


[8/8] incubator-singa git commit: Merge PR #314

Posted by ka...@apache.org.
Merge PR #314


Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/0695daa6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/0695daa6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/0695daa6

Branch: refs/heads/master
Commit: 0695daa6626e111e47227d37e6583d19dedf735c
Parents: a6e7690 5144bcf
Author: kaiping <ka...@comp.nus.edu.sg>
Authored: Wed Mar 15 17:02:07 2017 +0800
Committer: kaiping <ka...@comp.nus.edu.sg>
Committed: Wed Mar 15 17:02:07 2017 +0800

----------------------------------------------------------------------
 doc/en/docs/installation.md                |    4 +-
 doc/en/docs/notebook/cnn.ipynb             |  907 ++++++++++++++++++
 doc/en/docs/notebook/core.ipynb            | 1151 +++++++++++++++++++++++
 doc/en/docs/notebook/index.ipynb           |  108 ++-
 doc/en/docs/notebook/installation.ipynb    |   93 ++
 doc/en/docs/notebook/mlp.ipynb             |   98 +-
 doc/en/docs/notebook/model.ipynb           |  536 +++++++++++
 doc/en/docs/notebook/rbm.ipynb             |   79 +-
 doc/en/docs/notebook/regression.ipynb      |   70 +-
 doc/en/docs/notebook/requirements.txt      |    5 +
 doc/en/docs/notebook/rnn.ipynb             |  257 +++++
 doc/en/docs/notebook/static/bp.PNG         |  Bin 0 -> 22579 bytes
 doc/en/docs/notebook/static/digit.jpg      |  Bin 0 -> 4746 bytes
 doc/en/docs/notebook/static/models.PNG     |  Bin 0 -> 43188 bytes
 doc/en/docs/notebook/static/sgd.png        |  Bin 0 -> 18725 bytes
 doc/en/docs/notebook/static/singav1-sw.png |  Bin 0 -> 24326 bytes
 python/singa/layer.py                      |   13 +-
 python/singa/tensor.py                     |    2 +
 18 files changed, 3180 insertions(+), 143 deletions(-)
----------------------------------------------------------------------



[7/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Posted by ka...@apache.org.
SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Add notebooks for tensor, device, model classes; and mlp, linear regression, cnn, rbm examples;
TODO RNN examples, and distributed training, Rafiki.


Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/5144bcf1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/5144bcf1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/5144bcf1

Branch: refs/heads/master
Commit: 5144bcf1a4c970f9165d9a164f23686eceaba749
Parents: 0be3e03
Author: wangwei <wa...@comp.nus.edu.sg>
Authored: Tue Mar 14 18:23:59 2017 +0800
Committer: wangwei <wa...@comp.nus.edu.sg>
Committed: Wed Mar 15 16:15:43 2017 +0800

----------------------------------------------------------------------
 doc/en/docs/installation.md                |    4 +-
 doc/en/docs/notebook/cnn.ipynb             |  907 ++++++++++++++++++
 doc/en/docs/notebook/core.ipynb            | 1151 +++++++++++++++++++++++
 doc/en/docs/notebook/index.ipynb           |  108 ++-
 doc/en/docs/notebook/installation.ipynb    |   93 ++
 doc/en/docs/notebook/mlp.ipynb             |   98 +-
 doc/en/docs/notebook/model.ipynb           |  536 +++++++++++
 doc/en/docs/notebook/rbm.ipynb             |   79 +-
 doc/en/docs/notebook/regression.ipynb      |   70 +-
 doc/en/docs/notebook/requirements.txt      |    5 +
 doc/en/docs/notebook/rnn.ipynb             |  257 +++++
 doc/en/docs/notebook/static/bp.PNG         |  Bin 0 -> 22579 bytes
 doc/en/docs/notebook/static/digit.jpg      |  Bin 0 -> 4746 bytes
 doc/en/docs/notebook/static/models.PNG     |  Bin 0 -> 43188 bytes
 doc/en/docs/notebook/static/sgd.png        |  Bin 0 -> 18725 bytes
 doc/en/docs/notebook/static/singav1-sw.png |  Bin 0 -> 24326 bytes
 python/singa/layer.py                      |   13 +-
 python/singa/tensor.py                     |    2 +
 18 files changed, 3180 insertions(+), 143 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/installation.md
----------------------------------------------------------------------
diff --git a/doc/en/docs/installation.md b/doc/en/docs/installation.md
index 7772cc0..3a596d6 100755
--- a/doc/en/docs/installation.md
+++ b/doc/en/docs/installation.md
@@ -9,11 +9,11 @@ Currently, SINGA has conda packages (Python2.7) for Linux and MacOSX.
 
 1. CPU only
 
-        conda install -c nusdbsystem singa
+      conda install -c nusdbsystem singa
 
 2. GPU via CUDA+cuDNN
 
-        conda install -c nusdbsystem singa-cudax.y-cudnnz
+      conda install -c nusdbsystem singa-cudax.y-cudnnz
 
     where `x.y,z` is one of <8.0, 5>, <7.5, 5> and <7.5, 4>.
     Users need to install CUDA and cuDNN before installing SINGA.

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/cnn.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/cnn.ipynb b/doc/en/docs/notebook/cnn.ipynb
new file mode 100644
index 0000000..64a3a25
--- /dev/null
+++ b/doc/en/docs/notebook/cnn.ipynb
@@ -0,0 +1,907 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Classify images from MNIST using LeNet"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Dataset\n",
+    "\n",
+    "Download the [dataset](http://deeplearning.net/data/mnist/mnist.pkl.gz) to your workspace (i.e. the notebook folder)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "import cPickle, gzip\n",
+    "\n",
+    "# Load the dataset\n",
+    "f = gzip.open('mnist.pkl.gz', 'rb')\n",
+    "train_set, valid_set, _ = cPickle.load(f)\n",
+    "f.close()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(50000, 784) (50000,)\n",
+      "(10000, 784) (10000,)\n"
+     ]
+    }
+   ],
+   "source": [
+    "print train_set[0].shape, train_set[1].shape\n",
+    "print valid_set[0].shape, valid_set[1].shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "train_x = np.reshape(train_set[0], (50000, 1, 28, 28)).astype(np.float32, copy=False)\n",
+    "train_y = np.array(train_set[1]).astype(np.int32, copy=False)\n",
+    "valid_x = np.reshape(valid_set[0], (10000, 1, 28, 28))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<matplotlib.image.AxesImage at 0x7f0747e21410>"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADn9JREFUeJzt3X9sXfV5x/HPU8dxlhDauCmeSzMSIC3QsIbtKoCIgImR\npQgpoKqhUVWljDVdC3RsmQTLpjWb2JRNLVXKGJJZsyQVv0oLIn+wVmBV0GrgYbIQfpVfwV0TjE1w\nIYHSxLGf/eGTygXf73XuPfeeaz/vl2T53vOcc8+jk3x87r3fe8/X3F0A4vlA0Q0AKAbhB4Ii/EBQ\nhB8IivADQRF+ICjCDwRF+IGgCD8Q1IxG7mymtfkszWnkLoFQfq13dNgP2WTWrSn8ZrZS0mZJLZL+\nw903pdafpTk62y6qZZcAEnq8e9LrVv2038xaJN0i6dOSzpC0xszOqPbxADRWLa/5l0l6yd33uPth\nSXdJWpVPWwDqrZbwnyjpF+Pu782W/RYzW2dmvWbWO6xDNewOQJ7q/m6/u3e5e8ndS61qq/fuAExS\nLeHfJ2nBuPsfy5YBmAJqCf/jkhab2SIzmynpc5J25NMWgHqreqjP3Y+Y2TWSfqSxob4t7v5Mbp0B\nqKuaxvnd/QFJD+TUC4AG4uO9QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxAU4QeCIvxAUIQfCIrwA0ER\nfiAowg8ERfiBoAg/EBThB4Ii/EBQhB8IivADQRF+ICjCDwRF+IGgCD8QFOEHgiL8QFCEHwiK8ANB\nEX4gKMIPBFXTLL1m1ifpoKQRSUfcvZRHU8iPzUj/E7d8ZH5d9//8Xy8sWxuZPZrc9qRTBpP12V+1\nZP21m2aWre0s3Z3cdv/IO8n62fesT9ZP/avHkvVmUFP4M3/k7vtzeBwADcTTfiCoWsPvkh4ysyfM\nbF0eDQFojFqf9i93931mdoKkB83sZ+7+yPgVsj8K6
 yRplmbXuDsAeanpzO/u+7Lfg5Luk7RsgnW6\n3L3k7qVWtdWyOwA5qjr8ZjbHzOYevS1phaSn82oMQH3V8rS/Q9J9Znb0ce5w9x/m0hWAuqs6/O6+\nR9Kncuxl2mo5fXGy7m2tyfqrF3woWX/3nPJj0u0fTI9X/+RT6fHuIv3Xr+Ym6//ybyuT9Z4z7yhb\ne2X43eS2mwYuTtY/+hNP1qcChvqAoAg/EBThB4Ii/EBQhB8IivADQeXxrb7wRi78g2T9pq23JOsf\nby3/1dPpbNhHkvW/v/mLyfqMd9LDbefec03Z2tx9R5Lbtu1PDwXO7u1J1qcCzvxAUIQfCIrwA0ER\nfiAowg8ERfiBoAg/EBTj/Dloe/7VZP2JXy9I1j/eOpBnO7la339Osr7n7fSlv7ee8v2ytbdG0+P0\nHd/+72S9nqb+F3Yr48wPBEX4gaAIPxAU4QeCIvxAUIQfCIrwA0GZe+NGNI+3dj/bLmrY/prF0JXn\nJusHVqYvr92y+7hk/cmv3nzMPR114/7fT9YfvyA9jj/y5lvJup9b/urufV9LbqpFa55Mr4D36fFu\nHfCh9NzlGc78QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxBUxXF+M9si6VJJg+6+JFvWLuluSQsl9Ula\n7e6/rLSzqOP8lbTM/3CyPvLGULL+yh3lx+qfOX9Lcttl/3xtsn7CLcV9px7HLu9x/q2S3jsR+g2S\nut19saTu7D6AKaRi+N39EUnvPfWskrQtu71N0mU59wWgzqp9zd/h7v3Z7dckdeTUD4AGqfkNPx97\n06DsGwdmts7Mes2sd1iHat0dgJxUG/4BM+uUpOz3YLkV3b3L3UvuXmpVW5W7A5C3asO/Q9La7PZa\nSffn0w6ARqkYfjO7U9Kjkj5hZnvN7CpJmyRdbGYvSvrj7D6AKaTidfvdfU2ZEgP2ORnZ/0ZN2w8f\nmFn1tp/8/LPJ+uu3tqQfYHSk
 6n2jWHzCDwiK8ANBEX4gKMIPBEX4gaAIPxAUU3RPA6df/0LZ2pVn\npkdk//Ok7mT9gs9enazPvfuxZB3NizM/EBThB4Ii/EBQhB8IivADQRF+ICjCDwTFOP80kJom+42v\nnJ7c9v92vJus33Dj9mT9b1Zfnqz7/36wbG3BPz2a3FYNnD4+Is78QFCEHwiK8ANBEX4gKMIPBEX4\ngaAIPxBUxSm688QU3c1n6E/PTdZv//o3kvVFM2ZVve9Pbr8mWV98W3+yfmRPX9X7nq7ynqIbwDRE\n+IGgCD8QFOEHgiL8QFCEHwiK8ANBVRznN7Mtki6VNOjuS7JlGyV9SdLr2Wob3P2BSjtjnH/q8fOW\nJuvHb9qbrN958o+q3vdpP/6zZP0T/1D+OgaSNPLinqr3PVXlPc6/VdLKCZZ/y92XZj8Vgw+guVQM\nv7s/ImmoAb0AaKBaXvNfa2a7zWyLmc3LrSMADVFt+G+VdLKkpZL6JX2z3Ipmts7Mes2sd1iHqtwd\ngLxVFX53H3D3EXcflXSbpGWJdbvcveTupVa1VdsngJxVFX4z6xx393JJT+fTDoBGqXjpbjO7U9KF\nkuab2V5JX5d0oZktleSS+iR9uY49AqgDvs+PmrR0nJCsv3rFqWVrPddvTm77gQpPTD//yopk/a3l\nbyTr0xHf5wdQEeEHgiL8QFCEHwiK8ANBEX4gKIb6UJjv7U1P0T3bZibrv/LDyfql115X/rHv60lu\nO1Ux1AegIsIPBEX4gaAIPxAU4QeCIvxAUIQfCKri9/kR2+jy9KW7X/5seoruJUv7ytYqjeNXcvPQ\nWcn67Pt7a3r86Y4zPxAU4QeCIvxAUIQfCIrwA0ERfiAowg8ExTj/NGelJcn6C19Lj7Xfdt62ZP38\nWenv1NfikA8n648NLUo/wGh/jt1MP5z5gaAIPxAU4QeCIvxAUIQfCIrwA0ERfiCoiuP8ZrZA0nZJ\nHZJcUpe
 7bzazdkl3S1ooqU/Sanf/Zf1ajWvGopOS9Zev/GjZ2sYr7kpu+5nj9lfVUx42DJSS9Yc3\nn5Osz9uWvu4/0iZz5j8iab27nyHpHElXm9kZkm6Q1O3uiyV1Z/cBTBEVw+/u/e6+M7t9UNJzkk6U\ntErS0Y9/bZN0Wb2aBJC/Y3rNb2YLJZ0lqUdSh7sf/fzkaxp7WQBgiph0+M3sOEk/kHSdux8YX/Ox\nCf8mnPTPzNaZWa+Z9Q7rUE3NAsjPpMJvZq0aC/7t7n5vtnjAzDqzeqekwYm2dfcudy+5e6lVbXn0\nDCAHFcNvZibpO5Kec/ebxpV2SFqb3V4r6f782wNQL5P5Su95kr4g6Skz25Ut2yBpk6TvmdlVkn4u\naXV9Wpz6Ziz8vWT9rT/sTNav+McfJut//qF7k/V6Wt+fHo579N/LD+e1b/2f5LbzRhnKq6eK4Xf3\nn0oqN9/3Rfm2A6BR+IQfEBThB4Ii/EBQhB8IivADQRF+ICgu3T1JMzp/t2xtaMuc5LZfWfRwsr5m\n7kBVPeXhmn3Lk/Wdt6an6J7//aeT9faDjNU3K878QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxBUmHH+\nw3+Svkz04b8cStY3nPpA2dqK33mnqp7yMjDybtna+TvWJ7c97e9+lqy3v5kepx9NVtHMOPMDQRF+\nICjCDwRF+IGgCD8QFOEHgiL8QFBhxvn7Lkv/nXvhzHvqtu9b3jwlWd/88Ipk3UbKXTl9zGk3vlK2\ntnigJ7ntSLKK6YwzPxAU4QeCIvxAUIQfCIrwA0ERfiAowg8EZe6eXsFsgaTtkjokuaQud99sZhsl\nfUnS69mqG9y9/JfeJR1v7X62Mas3UC893q0DPpT+YEhmMh/yOSJpvbvvNLO5kp4wswez2rfc/RvV\nNgqgOBXD7+79kvqz2wfN7DlJJ9a7MQD1dUyv+c1soaSzJB39zOi1ZrbbzLaY2bwy26wz
 s14z6x3W\noZqaBZCfSYffzI6T9ANJ17n7AUm3SjpZ0lKNPTP45kTbuXuXu5fcvdSqthxaBpCHSYXfzFo1Fvzb\n3f1eSXL3AXcfcfdRSbdJWla/NgHkrWL4zcwkfUfSc+5+07jlneNWu1xSerpWAE1lMu/2nyfpC5Ke\nMrNd2bINktaY2VKNDf/1SfpyXToEUBeTebf/p5ImGjdMjukDaG58wg8IivADQRF+ICjCDwRF+IGg\nCD8QFOEHgiL8QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxBUxUt357ozs9cl/XzcovmS9jesgWPTrL01\na18SvVUrz95OcvePTGbFhob/fTs363X3UmENJDRrb83al0Rv1SqqN572A0ERfiCoosPfVfD+U5q1\nt2btS6K3ahXSW6Gv+QEUp+gzP4CCFBJ+M1tpZs+b2UtmdkMRPZRjZn1m9pSZ7TKz3oJ72WJmg2b2\n9Lhl7Wb2oJm9mP2ecJq0gnrbaGb7smO3y8wuKai3BWb2YzN71syeMbO/yJYXeuwSfRVy3Br+tN/M\nWiS9IOliSXslPS5pjbs/29BGyjCzPkkldy98TNjMzpf0tqTt7r4kW/avkobcfVP2h3Oeu1/fJL1t\nlPR20TM3ZxPKdI6fWVrSZZK+qAKPXaKv1SrguBVx5l8m6SV33+PuhyXdJWlVAX00PXd/RNLQexav\nkrQtu71NY/95Gq5Mb03B3fvdfWd2+6CkozNLF3rsEn0VoojwnyjpF+Pu71VzTfntkh4ysyfMbF3R\nzUygI5s2XZJek9RRZDMTqDhzcyO9Z2bppjl21cx4nTfe8Hu/5e6+VNKnJV2dPb1tSj72mq2Zhmsm\nNXNzo0wws/RvFHnsqp3xOm9FhH+fpAXj7n8sW9YU3H1f9ntQ0n1qvtmHB45Okpr9Hiy4n99oppmb\nJ5pZWk1w7Jppxusiwv+4pMVmtsjMZkr6nKQdBfTxPmY2J3sjRmY
 2R9IKNd/swzskrc1ur5V0f4G9\n/JZmmbm53MzSKvjYNd2M1+7e8B9Jl2jsHf+XJf1tET2U6etkSU9mP88U3ZukOzX2NHBYY++NXCXp\nw5K6Jb0o6SFJ7U3U23clPSVpt8aC1llQb8s19pR+t6Rd2c8lRR+7RF+FHDc+4QcExRt+QFCEHwiK\n8ANBEX4gKMIPBEX4gaAIPxAU4QeC+n8DZI6NXofNrQAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x7f077003c810>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "%matplotlib inline\n",
+    "import matplotlib.pyplot as plt\n",
+    "plt.imshow(train_x[0][0])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Create the CNN model\n",
+    "\n",
+    "TODO: plot the net structure"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "conv1 (32, 14, 14)\n",
+      "relu1 (32, 14, 14)\n",
+      "conv2 (32, 7, 7)\n",
+      "relu2 (32, 7, 7)\n",
+      "pool (32, 4, 4)\n",
+      "flat (512,)\n",
+      "dense (10,)\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<singa.layer.Dense at 0x7f0735355990>"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from singa import net as ffnet\n",
+    "from singa.layer import Conv2D, MaxPooling2D, Dropout, Activation, Flatten, Dense\n",
+    "from singa import optimizer, loss, metric\n",
+    "from singa import layer\n",
+    "layer.engine = 'singacpp'\n",
+    "net = ffnet.FeedForwardNet(loss.SoftmaxCrossEntropy(), metric.Accuracy())\n",
+    "net.add(Conv2D('conv1', 32, 3, 2, input_sample_shape=(1,28,28)))\n",
+    "net.add(Activation('relu1'))\n",
+    "net.add(Conv2D('conv2', 32, 3, 2))\n",
+    "net.add(Activation('relu2'))\n",
+    "net.add(MaxPooling2D('pool', 3, 2))\n",
+    "net.add(Flatten('flat'))\n",
+    "net.add(Dense('dense', 10))\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Initialize the parameters\n",
+    "\n",
+    "* weight matrix - guassian distribution\n",
+    "* bias - 0"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "conv1_weight (32, 9) 0.0764843672514\n",
+      "conv1_bias (32,) 0.0\n",
+      "conv2_weight (32, 288) 0.0803024768829\n",
+      "conv2_bias (32,) 0.0\n",
+      "dense_weight (512, 10) 0.0795410946012\n",
+      "dense_bias (10,) 0.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "for pname, pval in zip(net.param_names(), net.param_values()):\n",
+    "    if len(pval.shape) > 1:\n",
+    "        pval.gaussian(0, 0.1)\n",
+    "    else:\n",
+    "        pval.set_value(0)\n",
+    "    print pname, pval.shape, pval.l1()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Set up the optimizer and tensors"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from singa import tensor\n",
+    "#from singa.proto import core_pb2\n",
+    "from singa import device\n",
+    "from singa import utils\n",
+    "cpu = device.get_default_device()\n",
+    "\n",
+    "opt = optimizer.SGD(momentum=0.9, weight_decay=1e-4)\n",
+    "batch_size = 32\n",
+    "num_train_batch = train_x.shape[0] / batch_size\n",
+    "\n",
+    "tx = tensor.Tensor((batch_size, 1, 28, 28))\n",
+    "ty = tensor.Tensor((batch_size,), cpu , tensor.int32)\n",
+    "\n",
+    "# for progress bar\n",
+    "from tqdm import tnrange\n",
+    "idx = np.arange(train_x.shape[0], dtype=np.int32)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Conduct SGD\n",
+    "\n",
+    "1. process the training data multile time, each time is called on epoch; \n",
+    "2. for each epoch, read the data as mini-batches in random order\n",
+    "3. for each mini-batch, do BP and update the parameters  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\n",
+      "Epoch = 0, training loss = 0.292792, training accuracy = 0.906530\n",
+      "\n",
+      "Epoch = 1, training loss = 0.109958, training accuracy = 0.965589\n"
+     ]
+    }
+   ],
+   "source": [
+    "for epoch in range(2):\n",
+    "    np.random.shuffle(idx)\n",
+    "    loss, acc = 0.0, 0.0\n",
+    "    \n",
+    "    bar = tnrange(num_train_batch, desc='Epoch %d' % epoch)\n",
+    "    for b in bar:\n",
+    "        x = train_x[idx[b * batch_size: (b + 1) * batch_size]]\n",
+    "        y = train_y[idx[b * batch_size: (b + 1) * batch_size]]\n",
+    "        tx.copy_from_numpy(x)\n",
+    "        ty.copy_from_numpy(y)\n",
+    "        grads, (l, a) = net.train(tx, ty)\n",
+    "        loss += l\n",
+    "        acc += a\n",
+    "        for (s, p, g) in zip(net.param_names(), net.param_values(), grads):\n",
+    "            opt.apply_with_lr(epoch, 0.01, g, p, str(s), b)\n",
+    "        # update progress bar\n",
+    "        bar.set_postfix(train_loss=l, train_accuracy=a)\n",
+    "    print 'Epoch = %d, training loss = %f, training accuracy = %f' % (epoch, loss / num_train_batch, acc / num_train_batch)    \n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Save model to disk"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "net.save('checkpoint')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Load model from disk"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false,
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "NOTE: If your model was saved using pickle, then set use_pickle=True for loading it\n",
+      "conv2_bias\n",
+      "conv2_weight\n",
+      "dense_weight\n",
+      "conv1_bias\n",
+      "dense_bias\n",
+      "conv1_weight\n"
+     ]
+    }
+   ],
+   "source": [
+    "for pval in net.param_values():\n",
+    "    pval.set_value(0)\n",
+    "net.load('checkpoint')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Do prediction"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from PIL import Image\n",
+    "img = Image.open('static/digit.jpg').convert('L')\n",
+    "img = img.resize((28,28))\n",
+    "img = np.array(img, dtype=np.float32)/255\n",
+    "img = tensor.from_numpy(img)\n",
+    "img.reshape((1,1,28,28))\n",
+    "y=net.predict(img)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[<matplotlib.lines.Line2D at 0x7f07356e4210>]"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG7pJREFUeJzt3WuMY+dZB/D/Y3s8F/vsbOZ2nJ29zG5iuyyX0HZIy0VQ\nKKVJC4RKICVcKipQiGigIKQ2IAEfyhdUQFARulqVghCIqGojCNXS9EOh/YBasoHSNEntmU72mswZ\nz+zteO62Hz7YZ9bjjMdnxsc+9jn/nxLtnOMzPs9a4/+cfc/j9xVVBRERBUvE7wKIiMh7DHciogBi\nuBMRBRDDnYgogBjuREQBxHAnIgoghjsRUQAx3ImIAojhTkQUQDG/TjwxMaEzMzN+nZ6IqC+9+OKL\ny6o62eo438J9ZmYGFy9e9Ov0RER9SUQuuzmOwzJERAHEcCciCiCGOxFRADHciYgCqGW4i8hnRGRJ\nRL7V5HERkU+KyLyIfFNE3uZ9mUREdBBurtz/HsBD+zz+MIB07f/HAXyq/bKIiKgdLcNdVb8K4MY+\nhzwC4B+06msAjorIvV4VSEREB+fFmPs0gKt129dq+4hCqVSu4Jn/voLtcsXvUijEunpDVUQeF5GL\nInKxUCh089REXfPVuQKeevYlfPnbS36XQiHmRbhfB3Cibvt4bd+bqOp5VZ1V1dnJyZafniXqS99e\ntAEA+dqfRH7wItyfA/DBWtfMOwHcVtU3PHheor7khHrOYriTf1rOLSMi/wzgXQAmROQagD8GMAAA\nqnoOwAUA7wMwD2ANwIc6VSxRP8hZRQBAnuFOPmoZ7qr6WIvHFcCHPauIqI+VyhV8Z6mIaESwUFjF\nVqmCeIyfFaTu408dkYcu31jDVrmCH7pvHKWK4tLKqt8lUUgx3Ik85Iy3/8wDxwAAOd5UJZ8w3Ik8\nlLNsiADvPZtCRDjuTv5huBN5KG/ZODU2gtGRAcxMJ
 HjlTr5huBN5KLdoI2MaAICsafDKnXzDcCfy\nyGapjEsra8imquGeMQ1cvrGGje2yz5VRGDHciTyyUFhFuaJ3r9xTBlSB+aWiz5VRGDHciTziDME4\n4Z4xkwDYMUP+YLgTeSS3aCMWEZyeSAAATo0nEI9GOO5OvmC4E3kkb9k4M5nY+UTqQDSCM5MJzjFD\nvmC4E3kkbxV3hmQc2ZSBOYtj7tR9DHciD6xtlXDlxhqyDeGeMQ1cv7UOe2Pbp8oorBjuRB5wrs7T\ne4Q7UL2qJ+omhjuRB5xxdafH3ZHdCXeOu1N3MdyJPDBn2RiMRXBybGTX/uP3DGN4IMpwp65juBN5\nIGcVkTaTiEZk1/5IRJAxkwx36jqGO5EH8nVzyjTKmAZyixxzp+5iuBO16fbaNhbvbOwb7svFTawU\nN7tcGYUZw52oTfml2s3UZuGeYscMdR/DnahNO3PKpPYOdyf055Y47k7dw3AnalN+0UZyMIZjo0N7\nPm4eGcSRoRgnEKOuYrgTtSln2ciYSYjIno+LCLIpLtxB3cVwJ2qDqu5afamZtGkgt2hDVbtUGYUd\nw52oDcvFLdxc224Z7lnTwJ2NEqw77Jih7mC4E7Vhrsm0A40ynIaAuozhTtSGXMPqS804qzIx3Klb\nGO5EbchbNsYScUwk4/seN54cxERykB0z1DUMd6I25BZtpKead8rU4xwz1E0Md6JDUlXMWcWW4+2O\njGkgbxVRqbBjhjqP4U50SG/c3oC9WWo53u7Ipgysb5dx/dZ6hysjYrgTHVqzBTqacX4JcNydusFV\nuIvIQyKSE5F5EXlqj8dHReTfROT/RORlEfmQ96US9ZZ8LaQzU27Dvdoxk+O4O3VBy3AXkSiApwE8\nDOAsgMdE5GzDYR8G8IqqPgDgXQD+XET2bx8g6nM5y4Z5ZBCjIwOujjeGBnBsdIg3Vakr3Fy5Pwhg\nXlUXVHULwDMAHmk4RgEYUm0Z
 SAK4AaDkaaVEPSZvtZ52oFEmZXBYhrrCTbhPA7hat32ttq/eXwP4\nLgCvA3gJwEdUteJJhUQ9qFxRzC8Vm87h3kzWNLBQWEWpzLcHdZZXN1TfC+AbAI4B+H4Afy0iRxoP\nEpHHReSiiFwsFAoenZqo+67eWMPGdqXpHO7NZEwDW+UKLq2sdagyoio34X4dwIm67eO1ffU+BOBZ\nrZoH8BqAtzQ+kaqeV9VZVZ2dnJw8bM1EvnM77UCjbIpzzFB3uAn3FwCkReR07SbpowCeazjmCoB3\nA4CImACyABa8LJSolzidMump5IG+777JJETYDkmdF2t1gKqWRORJAM8DiAL4jKq+LCJP1B4/B+Dj\nAP5eRF4CIAA+pqrLHaybyFc5y8aJsWEkBlu+hXYZjkdxamyEV+7Uca5+MlX1AoALDfvO1X39OoCf\n8rY0ot41Zx38ZqqjOg0Bw506i59QJTqgrVIF3ykUDzze7simDFxaWcPGdtnjyojuYrgTHdCllVWU\nKnrocM+YBsoVxUJh1ePKiO5iuBMdkHMztJ1wB9gxQ53FcCc6oLxlIxoRnJlMHOr7T08kEIsI55ih\njmK4Ex1Q3rIxMz6CoYHoob4/HovgzGRiZ/1Vok5guBMdUP4AC3Q0kzENXrlTRzHciQ5gY7uMSyur\nSLuc5reZrGng6o11rG5yfj3qDIY70QHMLxWh6n6BjmbStZuqc0tFL8oiehOGO9EBtNsp49iZY4bT\nEFCHMNyJDiC/ZCMejWBmfKSt5zk5NoLBWITtkNQxDHeiA8gv2rhvKolYtL23TjQiSJtJ3lSljmG4\nEx1A3irurIXaLs4xQ53EcCdyyd7YxvVb622PtzsypgHrziZurW158nxE9RjuRC7lrWpny2Fng2yU\n3ZmGgB0z5D2GO5FLzidK222DdGS4KhN1EMOdyKWcZWMkHsX00WFPnu/Y6BCSgzGGO3UEw53Ipbxl\nIz2VRCQ
 injyfiCBjJrnkHnUEw53Ipdzi4RfoaMbpmFFVT5+XiOFO5MKN1S0sFzc9G293ZEwDN9e2\nUShuevq8RAx3IheccXGvr9ydXxZz7JghjzHciVzIe9wp43B+WXDcnbzGcCdyIbdo48hQDFPGoKfP\nO5GMYywRZ8cMeY7hTuRC3rKRTRkQ8aZTxiEiSE9xjhnyHsOdqAVVrc0p4+2QjCObMjBnFdkxQ55i\nuBO1sGRv4vb6tufj7Y6MaaC4WcLrtzc68vwUTgx3oha8WqCjGS7cQZ3AcCdqoVNtkI5MbT1WjruT\nlxjuRC3kFm1MJAcxloh35PlHRwZgHhnklTt5iuFO1EJ+qYhsypsFOprJmAbySwx38g7DnWgflYpi\nzrI7NiTjyJrVjplyhR0z5A2GO9E+rt9ax9pW2bMFOprJpAxsliq4cmOto+eh8HAV7iLykIjkRGRe\nRJ5qcsy7ROQbIvKyiHzF2zKJ/OF0yqS7cOVefz6idrUMdxGJAngawMMAzgJ4TETONhxzFMDfAPhZ\nVf1uAL/QgVqJui630ynT2TH3+6eqz89pCMgrbq7cHwQwr6oLqroF4BkAjzQc84sAnlXVKwCgqkve\nlknkjznLxvTRYRhDAx09T2IwhhNjwwx38oybcJ8GcLVu+1ptX70MgHtE5D9F5EUR+eBeTyQij4vI\nRRG5WCgUDlcxURflrGLHr9od2drCHURe8OqGagzA2wG8H8B7AfyhiGQaD1LV86o6q6qzk5OTHp2a\nqDNK5Qq+s1TcWci60zKmgYXCKrZKla6cj4LNTbhfB3Cibvt4bV+9awCeV9VVVV0G8FUAD3hTIpE/\nLq2sYatc2fkEaadlUwZKFcVry6tdOR8Fm5twfwFAWkROi0gcwKMAnms45l8B/IiIxERkBMA7ALzq\nbalE3dWpBTqaSXMaAvJQrNUBqloSkScBPA8gCuAzqvqyiDxRe/ycqr4qIl8E8E0AFQCf
 VtVvdbJw\nok7LWzZE7naydNqZyQSiEcEcw5080DLcAUBVLwC40LDvXMP2JwB8wrvSiPyVt2zMjCcwNBDtyvmG\nBqKYGR9hrzt5gp9QJWoit2gj3aWrdkc2xY4Z8gbDnWgPG9tlXFpZ69p4uyNjGrh8Yw3rW+WunpeC\nh+FOtIeFwirKFe34hGGNsqYBVWB+qdjV81LwMNyJ9jC31N1OGYczhw2HZqhdDHeiPeQWbQxEBTPj\nia6ed2Z8BPFohOFObWO4E+0hb9k4PZFAPNbdt0gsGsF9U0n2ulPbGO5Ee8h1YYGOZrJmkkvuUdsY\n7kQNVjdLuHpjveMLdDSTSRl4/fYG7mxs+3J+CgaGO1EDp1OlWxOGNXLmspmz2DFDh8dwJ2rgjHf7\ndeXudOjwpiq1g+FO1CC/aGMwFsGJsRFfzj99dBgj8SinIaC2MNyJGuQsG2kziWhEfDl/JCJIc+EO\nahPDnahB3sdOGUfWTDLcqS0Md6I6t9e2Yd3Z9G283ZExDSwXt7BS3PS1DupfDHeiOvnatAN+dco4\nMjvTELBjhg6H4U5Ux7mJ6fuwDDtmqE0Md6I6ectGcjCGY6NDvtYxZQxidHiA0xDQoTHcierkFm1k\nzCRE/OmUcYgIsqbBaQjo0BjuRDWqirxld32a32bStY4ZVfW7FOpDDHeimuXiFm6ubfs+3u7Ipgzc\n2SjBusOOGTo4hjtRjXPzslfC3amD4+50GAx3oppe6ZRx7LRDctydDoHhTlSTt2yMJeKYSMb9LgUA\nMJaIY9IY5JU7HQrDnaimOu2A/50y9TJmEnMMdzoEhjsRnE6Zou/TDjTKmAbyVhGVCjtm6GAY7kQA\nXr+9geJmCekeC/esaWB9u4xrN9f9LoX6DMOdCHdvWvZKj7vDmeOG4+50UAx3ItS1QU71Vrinp5IA\nOMcMHRzDnQjVK+PUkSGMjgz4XcouxtAApo8OM9zpwBjuRKh1yvT
 YkIwjYya55B4dmKtwF5GHRCQn\nIvMi8tQ+x/2AiJRE5Oe9K5Gos8oVxZxVRKY2BNJrMikDC4VVbJcrfpdCfaRluItIFMDTAB4GcBbA\nYyJytslxfwrgS14XSdRJV26sYbNU6dkr96xpYKtcweWVVb9LoT7i5sr9QQDzqrqgqlsAngHwyB7H\n/RaAzwNY8rA+oo5zxrN7rcfdwVWZ6DDchPs0gKt129dq+3aIyDSADwD4lHelEXWH0waZNntzWOb+\nqSQiAo6704F4dUP1LwF8TFX3HRQUkcdF5KKIXCwUCh6dmqg9OcvGybERjMRjfpeyp6GBKE6NJ9gx\nQwfi5qf5OoATddvHa/vqzQJ4pjYnxwSA94lISVX/pf4gVT0P4DwAzM7O8vPU1BOcOWV6WcZM8oNM\ndCBurtxfAJAWkdMiEgfwKIDn6g9Q1dOqOqOqMwA+B+A3G4OdqBdtlSpYKKz2zDS/zWRNA5eWV7Gx\nXfa7FOoTLcNdVUsAngTwPIBXAXxWVV8WkSdE5IlOF0jUSZdWVlGqaM9NO9AokzJQUWChwI4ZcsfV\nIKOqXgBwoWHfuSbH/mr7ZRF1R68t0NHM3Y4ZG2ePHfG5GuoH/IQqhVreshGNCM5MJvwuZV8z4wkM\nRIXj7uQaw51CLbdoY2Z8BIOxqN+l7Csei+DMRJJL7pFrDHcKtbxl9/x4uyOTMnjlTq4x3Cm0NrbL\nuHxjrefH2x1ZM4lrN9exulnyuxTqAwx3Cq35pSJUe3fagUbOKlFzS5yGgFpjuFNo5XamHeiPcHd+\nCXHcndxguFNo5S0b8WgEM+MjfpfiyomxEQwNRDjuTq4w3Cm0cpaN+6aSiEX7420QjQjSUwbnmCFX\n+uOnmqgD5qwisj0+p0yjjMlwJ3cY7hRK9sY2rt9a79kFOprJmElYdzZxa23L71KoxzHcKZSchS8y\nU30W7iku3EHuMNwplHZWX+qzK3enY4Y3Va
 kVhjuFUm7Rxkg8iumjw36XciD3jg7BGIyxHZJaYrhT\nKM0t2UibBiIR8buUAxERZFK8qUqtMdwplHKL/dcp48iYSeQtG6pczIyaY7hT6KwUN7Fc3OybOWUa\nZUwDN9e2UShu+l0K9TCGO4XOTqdMn4b73WkI2DFDzTHcKXT6tVPG4bRDsmOG9sNwp9DJWzZGhwcw\nZQz6XcqhTCQHMZ6IY47hTvtguFPo5C0bWdOASH91ytRLm0leudO+GO4UKqqK3KKNdJ92yjiypoH8\nIjtmqDmGO4WKdWcTdzZKfTve7sikDKxulXH91rrfpVCPYrhTqDhDGf3aKePY6Zjh0Aw1wXCnUJkL\nSLinTU4gRvtjuFOo5BZtTBqDGEvE/S6lLaPDA0gdGeIcM9QUw51CJW/ZyPT5zVRHJmWwY4aaYrhT\naFQqirxV7PshGUfWTGJuqYhyhR0z9GYMdwqNazfXsb5d3rkZ2e8ypoGtUgWXV1b9LoV6EMOdQsPp\nLOm3pfWayXJVJtoHw51CwxmfTk8FY8z9/trfg+2QtBeGO4VG3rIxfXQYxtCA36V4YiQew8mxEd5U\npT25CncReUhEciIyLyJP7fH4L4nIN0XkJRH5LxF5wPtSidqTWwxOp4wjU5uGgKhRy3AXkSiApwE8\nDOAsgMdE5GzDYa8B+DFV/V4AHwdw3utCidpRKlewUFgNzHi7I5tK4rXlVWyVKn6XQj3GzZX7gwDm\nVXVBVbcAPAPgkfoDVPW/VPVmbfNrAI57WyZRey6trGGrXAlMp4wjYxooVRSvLbNjhnZzE+7TAK7W\nbV+r7Wvm1wD8+14PiMjjInJRRC4WCgX3VRK1KR+QaQcaOX8fjrtTI09vqIrIj6Ma7h/b63FVPa+q\ns6o6Ozk56eWpifaVW7QRkbsdJkFxZjKBaEQ47k5vEnNxzHUAJ+q2j9f27SIi3wfg0wAeVtUVb8oj\n8kbesnFqPIGhgajfp
 XhqMBbF6YkEr9zpTdxcub8AIC0ip0UkDuBRAM/VHyAiJwE8C+BXVDXvfZlE\n7QnSnDKNsqbBJffoTVqGu6qWADwJ4HkArwL4rKq+LCJPiMgTtcP+CMA4gL8RkW+IyMWOVUx0QBvb\nZVxaWQvczVRHxjRw+cYa1rfKfpdCPcTNsAxU9QKACw37ztV9/esAft3b0oi8sVBYRbmigWuDdGTM\nJFSB+aUivvf4qN/lUI/gJ1Qp8ILaKeNwfmlx3J3qMdwp8HKWjYGoYGY84XcpHXFqbATxWIRzzNAu\nDHcKvDnLxpmJJOKxYP64x6IR3D+ZZLjTLsH8aSeqk7PswI63O7IpzjFDuzHcKdBWN0u4emMd2YC2\nQTrSZhKv397AnY1tv0uhHsFwp0CbW6ouZJEO6M1Uh9PmyX53cjDcKdCcoYqg9rg7duaYWeSqTFTF\ncKdAy1s2hgYiODE24ncpHTV9dBiJeJQ3VWkHw50CLWfZSE8ZiEbE71I6KhIRpE2D4U47GO4UaNU5\nZYI9JOPImGyHpLsY7hRYt9a2YN3ZDOyEYY0ypoHl4haWi5t+l0I9gOFOgZW3qjcXg97j7sjW/p68\neieA4U4B5oRc0DtlHHfbIdkxQwx3CrC8ZcMYjOHe0SG/S+mKSWMQR0cGOIEYAWC4U4DlFm2kzSRE\ngt0p4xARZKY4DQFVMdwpkFQVecveGYcOi0wqiZxlQ1X9LoV8xnCnQCoUN3FzbTs0bZCOrGnA3ihh\n8c6G36WQzxjuFEjOTcWw3Ex1OL/M8rypGnoMdwqkXG3cOSxtkI6dcOe4e+gx3CmQ8paNsUQcE8lB\nv0vpqnsScUwag+yYIYY7BVPOskPzydRGWc4xQ2C4UwCpKuasYujG2x0Z08CcVUSlwo6ZMGO4U+C8\nfnsDxc1S6MbbHdlUEuvbZVy7ue53KeQjhjsFTlgW6GhmZ+EODs2EGsOdAscJtaAvrddM2uQEYsRw\n
 pwDKL9pIHRnC6PCA36X4IjkYw/TR4Z12UAonhjsFTs6yQzve7sim2DETdgx3CpRyRTG/VEQ2pG2Q\njoxpYKGwiu1yxe9SyCcMdwqUKzfWsFmqhG5OmUbZVBJb5Qour6z6XQr5hOFOgbIz7UDIwz09VeuY\nWeQcM2HlKtxF5CERyYnIvIg8tcfjIiKfrD3+TRF5m/elErWW3+mUCfewzP1TSUSE7ZBh1jLcRSQK\n4GkADwM4C+AxETnbcNjDANK1/x8H8CmP6yRyJWfZODk2gpF4zO9SfDU0EMXMeIITiIWYmyv3BwHM\nq+qCqm4BeAbAIw3HPALgH7TqawCOisi9HtdK1NKcZYd+SMaRMQ3klxjuYeXm8mYawNW67WsA3uHi\nmGkAb7RV3R6+ki/gT77witdP29fanUGkl1btaXdJvIVCEe85a3pUTX/LpAw8/8oi3vMXX/G7lJ6g\nqP6sa22jflsVUCgqteaixv1af/xe39vs6ybf+xs/egYffegtHf37dvXfriLyOKrDNjh58uShniM5\nGAv9eOpeBG2uE9oLy4x68Dvmu+49gg+8dbr9JwqAn/v+Y7i0vIpShe2QDoGg9h9EpPZndTsizmOy\ns0/qt6XJftQ/1nDMzjl273/w9HjH/65uwv06gBN128dr+w56DFT1PIDzADA7O3uot/LbT92Dt596\n+2G+lShUzkwm8cnH3up3GeQTN2PuLwBIi8hpEYkDeBTAcw3HPAfgg7WumXcCuK2qng/JEBGROy2v\n3FW1JCJPAngeQBTAZ1T1ZRF5ovb4OQAXALwPwDyANQAf6lzJRETUiqsxd1W9gGqA1+87V/e1Aviw\nt6UREdFh8ROqREQBxHAnIgoghjsRUQAx3ImIAojhTkQUQOLXR89FpADg8iG/fQLAsofl9Du+Hrvx\n9biLr8VuQXg9TqnqZKuDfAv3dojIRVWd9buOXsHXYze+HnfxtdgtTK8Hh2WIi
 AKI4U5EFED9Gu7n\n/S6gx/D12I2vx118LXYLzevRl2PuRES0v369cicion30Xbi3Wqw7TETkhIj8h4i8IiIvi8hH/K7J\nbyISFZH/FZEv+F2L30TkqIh8TkS+LSKvisgP+l2TX0Tkd2vvkW+JyD+LyJDfNXVaX4W7y8W6w6QE\n4PdU9SyAdwL4cMhfDwD4CIBX/S6iR/wVgC+q6lsAPICQvi4iMg3gtwHMqur3oDp1+aP+VtV5fRXu\ncLdYd2io6huq+j+1r21U37yhXWNORI4DeD+AT/tdi99EZBTAjwL4WwBQ1S1VveVvVb6KARgWkRiA\nEQCv+1xPx/VbuDdbiDv0RGQGwFsBfN3fSnz1lwA+CoCLhgKnARQA/F1tmOrTIpLwuyg/qOp1AH8G\n4AqAN1BdKe5L/lbVef0W7rQHEUkC+DyA31HVO37X4wcR+WkAS6r6ot+19IgYgLcB+JSqvhXAKoBQ\n3qMSkXtQ/Rf+aQDHACRE5Jf9rarz+i3cXS3EHSYiMoBqsP+Tqj7rdz0++mEAPysil1AdrvsJEflH\nf0vy1TUA11TV+Zfc51AN+zD6SQCvqWpBVbcBPAvgh3yuqeP6LdzdLNYdGiIiqI6pvqqqf+F3PX5S\n1d9X1eOqOoPqz8WXVTXwV2fNqOoigKsikq3tejeAV3wsyU9XALxTREZq75l3IwQ3l12todormi3W\n7XNZfvphAL8C4CUR+UZt3x/U1rwl+i0A/1S7EFpASBeuV9Wvi8jnAPwPqh1m/4sQfFKVn1AlIgqg\nfhuWISIiFxjuREQBxHAnIgoghjsRUQAx3ImIAojhTkQUQAx3IqIAYrgTEQXQ/wNXckf+AMbmGAAA\nAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x7f0747e45890>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "prob=tensor.to_numpy(y)[0]\n",
+    "plt.plot(range(10), prob)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Debug\n",
+    "\n",
+    "Print l1 norm or parameter and layer feature\n",
+    "\n",
+    "1. parameter initialization\n",
+    "2. learning rate\n",
+    "3. weight decay\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "conv1_weight (32, 9) 7.97165679932\n",
+      "conv1_bias (32,) 0.0\n",
+      "conv2_weight (32, 288) 8.00566577911\n",
+      "conv2_bias (32,) 0.0\n",
+      "dense_weight (512, 10) 7.92119693756\n",
+      "dense_bias (10,) 0.0\n",
+      "\n",
+      "\n",
+      "Epoch 0\n",
+      "-->conv1: 3.886751\n",
+      "conv1-->relu1: 2.299547\n",
+      "relu1-->conv2: 603.797852\n",
+      "conv2-->relu2: 295.446167\n",
+      "relu2-->pool: 955.442017\n",
+      "pool-->flat: 955.442017\n",
+      "flat-->dense: 284901.062500\n",
+      "-->dense: 0.311904\n",
+      "dense-->flat: 0.311904\n",
+      "flat-->pool: 0.086828\n",
+      "pool-->relu2: 0.050518\n",
+      "relu2-->conv2: 9.024708\n",
+      "conv2-->relu1: 2.790344\n",
+      "relu1-->conv1: 336.182007\n",
+      "\n",
+      " loss = 79.148743, params\n",
+      "conv1_weight 10.1786603928\n",
+      "conv1_bias 12.2705039978\n",
+      "conv2_weight 8.05525493622\n",
+      "conv2_bias 0.13293106854\n",
+      "dense_weight 8.18883609772\n",
+      "dense_bias 0.00134002871346\n",
+      "\n",
+      "\n",
+      "Epoch 1\n",
+      "-->conv1: 20.362625\n",
+      "conv1-->relu1: 4.780766\n",
+      "relu1-->conv2: 2066.139404\n",
+      "conv2-->relu2: 488.272614\n",
+      "relu2-->pool: 1144.980225\n",
+      "pool-->flat: 1144.980225\n",
+      "flat-->dense: 1392742.250000\n",
+      "-->dense: 0.286131\n",
+      "dense-->flat: 0.286131\n",
+      "flat-->pool: 0.084796\n",
+      "pool-->relu2: 0.034586\n",
+      "relu2-->conv2: 7.695237\n",
+      "conv2-->relu1: 2.117975\n",
+      "relu1-->conv1: 487.341522\n",
+      "\n",
+      " loss = 70.960945, params\n",
+      "conv1_weight 16.7161483765\n",
+      "conv1_bias 34.0985298157\n",
+      "conv2_weight 8.74045848846\n",
+      "conv2_bias 0.33584010601\n",
+      "dense_weight 9.48363685608\n",
+      "dense_bias 0.00340566551313\n",
+      "\n",
+      "\n",
+      "Epoch 2\n",
+      "-->conv1: 52.302490\n",
+      "conv1-->relu1: 10.072969\n",
+      "relu1-->conv2: 12706.870117\n",
+      "conv2-->relu2: 1381.310059\n",
+      "relu2-->pool: 1888.169067\n",
+      "pool-->flat: 1888.169067\n",
+      "flat-->dense: 4740897.500000\n",
+      "-->dense: 0.350905\n",
+      "dense-->flat: 0.350905\n",
+      "flat-->pool: 0.111108\n",
+      "pool-->relu2: 0.023244\n",
+      "relu2-->conv2: 7.156909\n",
+      "conv2-->relu1: 1.548402\n",
+      "relu1-->conv1: 516.079651\n",
+      "\n",
+      " loss = 73.690216, params\n",
+      "conv1_weight 30.0410804749\n",
+      "conv1_bias 60.256187439\n",
+      "conv2_weight 11.2280254364\n",
+      "conv2_bias 0.536676049232\n",
+      "dense_weight 13.0333833694\n",
+      "dense_bias 0.00553257204592\n",
+      "\n",
+      "\n",
+      "Epoch 3\n",
+      "-->conv1: 96.670937\n",
+      "conv1-->relu1: 2.220010\n",
+      "relu1-->conv2: 16051.786133\n",
+      "conv2-->relu2: 705.551208\n",
+      "relu2-->pool: 846.462280\n",
+      "pool-->flat: 846.462280\n",
+      "flat-->dense: 4615773.000000\n",
+      "-->dense: 0.454912\n",
+      "dense-->flat: 0.454912\n",
+      "flat-->pool: 0.146553\n",
+      "pool-->relu2: 0.012394\n",
+      "relu2-->conv2: 6.071361\n",
+      "conv2-->relu1: 0.411632\n",
+      "relu1-->conv1: 328.999054\n",
+      "\n",
+      " loss = 81.878014, params\n",
+      "conv1_weight 44.8700485229\n",
+      "conv1_bias 111.767730713\n",
+      "conv2_weight 14.0987415314\n",
+      "conv2_bias 0.919560790062\n",
+      "dense_weight 18.0457553864\n",
+      "dense_bias 0.00845981575549\n",
+      "\n",
+      "\n",
+      "Epoch 4\n",
+      "-->conv1: 165.898941\n",
+      "conv1-->relu1: 0.000018\n",
+      "relu1-->conv2: 1.004575\n",
+      "conv2-->relu2: 0.049885\n",
+      "relu2-->pool: 0.214831\n",
+      "pool-->flat: 0.214831\n",
+      "flat-->dense: 1963.049194\n",
+      "-->dense: 0.560196\n",
+      "dense-->flat: 0.560196\n",
+      "flat-->pool: 0.182800\n",
+      "pool-->relu2: 0.026711\n",
+      "relu2-->conv2: 10.339769\n",
+      "conv2-->relu1: 0.006092\n",
+      "relu1-->conv1: 11.064970\n",
+      "\n",
+      " loss = 45.199768, params\n",
+      "conv1_weight 58.6796875\n",
+      "conv1_bias 162.814819336\n",
+      "conv2_weight 16.8376598358\n",
+      "conv2_bias 1.47756028175\n",
+      "dense_weight 23.0595436096\n",
+      "dense_bias 0.01112665236\n",
+      "\n",
+      "\n",
+      "Epoch 5\n",
+      "-->conv1: 241.562866\n",
+      "conv1-->relu1: 0.000000\n",
+      "relu1-->conv2: 1.477560\n",
+      "conv2-->relu2: 0.000000\n",
+      "relu2-->pool: 0.000000\n",
+      "pool-->flat: 0.000000\n",
+      "flat-->dense: 0.011127\n",
+      "-->dense: 0.668576\n",
+      "dense-->flat: 0.668576\n",
+      "flat-->pool: 0.218311\n",
+      "pool-->relu2: 0.000000\n",
+      "relu2-->conv2: 0.000000\n",
+      "conv2-->relu1: 0.000000\n",
+      "relu1-->conv1: 0.000000\n",
+      "\n",
+      " loss = 2.299366, params\n",
+      "conv1_weight 71.2618331909\n",
+      "conv1_bias 208.757034302\n",
+      "conv2_weight 19.3444824219\n",
+      "conv2_bias 2.00746393204\n",
+      "dense_weight 27.6571712494\n",
+      "dense_bias 0.0137531962246\n",
+      "\n",
+      "\n",
+      "Epoch 6\n",
+      "-->conv1: 296.653534\n",
+      "conv1-->relu1: 0.000000\n",
+      "relu1-->conv2: 2.007464\n",
+      "conv2-->relu2: 0.000000\n",
+      "relu2-->pool: 0.000000\n",
+      "pool-->flat: 0.000000\n",
+      "flat-->dense: 0.013753\n",
+      "-->dense: 0.910015\n",
+      "dense-->flat: 0.910015\n",
+      "flat-->pool: 0.297148\n",
+      "pool-->relu2: 0.000000\n",
+      "relu2-->conv2: 0.000000\n",
+      "conv2-->relu1: 0.000000\n",
+      "relu1-->conv1: 0.000000\n",
+      "\n",
+      " loss = 2.301979, params\n",
+      "conv1_weight 82.6378097534\n",
+      "conv1_bias 250.104797363\n",
+      "conv2_weight 21.6229515076\n",
+      "conv2_bias 2.484375\n",
+      "dense_weight 31.8290367126\n",
+      "dense_bias 0.0165074821562\n",
+      "\n",
+      "\n",
+      "Epoch 7\n",
+      "-->conv1: 348.356262\n",
+      "conv1-->relu1: 0.000000\n",
+      "relu1-->conv2: 2.484375\n",
+      "conv2-->relu2: 0.000000\n",
+      "relu2-->pool: 0.000000\n",
+      "pool-->flat: 0.000000\n",
+      "flat-->dense: 0.016507\n",
+      "-->dense: 0.927903\n",
+      "dense-->flat: 0.927903\n",
+      "flat-->pool: 0.302989\n",
+      "pool-->relu2: 0.000000\n",
+      "relu2-->conv2: 0.000000\n",
+      "conv2-->relu1: 0.000000\n",
+      "relu1-->conv1: 0.000000\n",
+      "\n",
+      " loss = 2.302492, params\n",
+      "conv1_weight 92.8762283325\n",
+      "conv1_bias 287.317565918\n",
+      "conv2_weight 23.6872882843\n",
+      "conv2_bias 2.9135928154\n",
+      "dense_weight 35.6038131714\n",
+      "dense_bias 0.0192515775561\n",
+      "\n",
+      "\n",
+      "Epoch 8\n",
+      "-->conv1: 394.178162\n",
+      "conv1-->relu1: 0.000000\n",
+      "relu1-->conv2: 2.913593\n",
+      "conv2-->relu2: 0.000000\n",
+      "relu2-->pool: 0.000000\n",
+      "pool-->flat: 0.000000\n",
+      "flat-->dense: 0.019252\n",
+      "-->dense: 1.218609\n",
+      "dense-->flat: 1.218609\n",
+      "flat-->pool: 0.397913\n",
+      "pool-->relu2: 0.000000\n",
+      "relu2-->conv2: 0.000000\n",
+      "conv2-->relu1: 0.000000\n",
+      "relu1-->conv1: 0.000000\n",
+      "\n",
+      " loss = 2.300582, params\n",
+      "conv1_weight 102.090713501\n",
+      "conv1_bias 320.808746338\n",
+      "conv2_weight 25.5548191071\n",
+      "conv2_bias 3.29988527298\n",
+      "dense_weight 39.0138893127\n",
+      "dense_bias 0.0218270029873\n",
+      "\n",
+      "\n",
+      "Epoch 9\n",
+      "-->conv1: 430.156555\n",
+      "conv1-->relu1: 0.000000\n",
+      "relu1-->conv2: 3.299885\n",
+      "conv2-->relu2: 0.000000\n",
+      "relu2-->pool: 0.000000\n",
+      "pool-->flat: 0.000000\n",
+      "flat-->dense: 0.021827\n",
+      "-->dense: 1.221773\n",
+      "dense-->flat: 1.221773\n",
+      "flat-->pool: 0.398946\n",
+      "pool-->relu2: 0.000000\n",
+      "relu2-->conv2: 0.000000\n",
+      "conv2-->relu1: 0.000000\n",
+      "relu1-->conv1: 0.000000\n",
+      "\n",
+      " loss = 2.302244, params\n",
+      "conv1_weight 110.383636475\n",
+      "conv1_bias 350.950500488\n",
+      "conv2_weight 27.2405776978\n",
+      "conv2_bias 3.64754581451\n",
+      "dense_weight 42.0904846191\n",
+      "dense_bias 0.0241855494678\n"
+     ]
+    }
+   ],
+   "source": [
+    "np.random.shuffle(idx)\n",
+    "ffnet.verbose=True\n",
+    "for pname, pval in zip(net.param_names(), net.param_values()):\n",
+    "    if len(pval.shape) > 1:\n",
+    "        pval.gaussian(0, 10)\n",
+    "    else:\n",
+    "        pval.set_value(0)\n",
+    "    print pname, pval.shape, pval.l1()\n",
+    "for b in range(10):\n",
+    "    print \"\\n\\nEpoch %d\" % b\n",
+    "    x = train_x[idx[b * batch_size: (b + 1) * batch_size]]\n",
+    "    y = train_y[idx[b * batch_size: (b + 1) * batch_size]]\n",
+    "    tx.copy_from_numpy(x)\n",
+    "    ty.copy_from_numpy(y)\n",
+    "    grads, (l, a) = net.train(tx, ty)\n",
+    "    print '\\n loss = %f, params' % l\n",
+    "    for (s, p, g) in zip(net.param_names(), net.param_values(), grads):\n",
+    "        opt.apply_with_lr(epoch, 0.01, g, p, str(s), b)\n",
+    "        print s, p.l1()\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "def vis_square(data):\n",
+    "    \"\"\"Take an array of shape (n, height, width) or (n, height, width, 3)\n",
+    "       and visualize each (height, width) thing in a grid of size approx. sqrt(n) by sqrt(n)\"\"\"\n",
+    "    \n",
+    "    # normalize data for display\n",
+    "    data = (data - data.min()) / (data.max() - data.min())\n",
+    "    \n",
+    "    # force the number of filters to be square\n",
+    "    n = int(np.ceil(np.sqrt(data.shape[0])))\n",
+    "    padding = (((0, n ** 2 - data.shape[0]),\n",
+    "               (0, 1), (0, 1))                 # add some space between filters\n",
+    "               + ((0, 0),) * (data.ndim - 3))  # don't pad the last dimension (if there is one)\n",
+    "    data = np.pad(data, padding, mode='constant', constant_values=1)  # pad with ones (white)\n",
+    "    \n",
+    "    # tile the filters into an image\n",
+    "    data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))\n",
+    "    data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])\n",
+    "    \n",
+    "    plt.imshow(data); plt.axis('off')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "NOTE: If your model was saved using pickle, then set use_pickle=True for loading it\n",
+      "conv2_bias\n",
+      "conv2_weight\n",
+      "dense_weight\n",
+      "conv1_bias\n",
+      "dense_bias\n",
+      "conv1_weight\n"
+     ]
+    }
+   ],
+   "source": [
+    "np.random.shuffle(idx)\n",
+    "ffnet.verbose=False\n",
+    "net.load('checkpoint')\n",
+    "b=1\n",
+    "x = train_x[idx[b * batch_size: (b + 1) * batch_size]]    \n",
+    "tx.copy_from_numpy(x)\n",
+    "\n",
+    "r = net.forward(False, tx, ['relu1', 'relu2'])\n",
+    "\n",
+    "\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnWl0HNd1529VNYDGDhA7AYLgAoCLuEiUKFp2bEsek44k\nJ854mTO2Mx88drxEmjnOzJmcyWTiLJOTyXHG8thJTjKyYseWJpHO+EgxJdlwrMV2xEUkRYmSuIIL\nSCxcQOxAo4Guqvlwq957QDcagFBV3dT7/770w6vXXRfV9freeu8uhuu6BADQDzPXAgAAcgMmPwCa\ngskPgKZg8gOgKZj8AGgKJj8AmoLJD4CmYPIDoCmY/ABoSizKk33Y+lReuBN29R0nIqJ9q3fmWBKm\nq/910c43mSBPZuZ8Zy27ciiJpKv3GBERmY3njKWMh+YHQFMw+QHQFEx+ADQFkx8ATcHkB0BTMPkB\n0JRIt/oyEmQyEWNJOxzZPyImL4mbSq3484IgtnYNERGd/UoLERGlym1xzJjl32/DkePdAr6m8QGL\niIjW/OmBUOQyd2wW7WRDKTcc+X0aXtMuYhljCSm39fM3vPGyL5fEWppFO9Xbt+LPsyoriIjIbW4g\nIiJzaloccy1P5xYo029mloiI7O6L6R9mWiuWJxPQ/ABoCiY/AJqSc7PfN7fGdreIvviNGSIicmPS\njDen2TycqSokIiKnUB4r/qdXA5PHrKoUbbeFTTbn9ZPcoTxWGLECHl9aLPqm79xIREQFPzsWmDxE\nRJTi/720l8/f9OgJcciZnk4f78l58U/3EBFRrK1VftSly4GJ5bxxSrQLsozLdJOZt23iz3jrdGDy\nqJz9691ERFR/SJrMZb3p91XBT48SEVHvJ9aKvsZvrtzsp5oqIiLq27uKiIjWPNUjDhkxTyZbPqvZ\n1fzY1PNH9xAR0dqvhfOopgLND4Cm5Fzzp/r6iYior
 GtE9LnJJL/a6YtBRd6rVVsr+oJcMrIHb8o/\nhkbmHlQWJ91Z1iL2yIzos5IOhYF/jRr+6hoRETmLLZJ5chobJvn9AWr7wOi+FOrHb/69M0REZI+M\nLmn82G3ye2wM4Pz2Bb7mzY8OEhFRanxcHsy0gHeJX2IfvjuAsy8NaH4ANAWTHwBNybnZ7+NMTaV3\nZvEBsG/cEG0zHufP8B4XghNqrnltlpTIQ768igln/vJ4sOdfRB4iIud9HOI60i4XHgfv5nG1Pwln\nfzgbZnm5aBsN/GiWquM9b+PgG+JYxoXKAFmquR9r5EXd+l9kW7J85ziT6fdJrLmJiIjsq9flwB0d\nRETU+jT3ReH9AM0PgKbkjebPyO5tommX8i+za/I2TewFuZ2WbbsrSJztG0XbOj/ApymUGsNfmIuS\nyRa2emJJaSWVdfPXOtrOfdZn94hjlY8fClUeR13Y8tpGN/9p7twiDrkWfz/usbdDlUcldR8n3SgY\nl4t7zizr2Jofd0vZSnnbzZmcDEWO4ffytraVlF6F01Wsh2vezPAG3+IL2NMPmh8ATclrzW+eOCfb\nJv9OmdXsPJG89w5xrKhniIiIUhcuhSvQYfmzbPvbaQWFos+qYYcOqq+R407J/yEMyp86wg1lPaDC\n0xCmZ5Wc+V87xLHKx0MVJyvCWUrBaqgXbfva9bTjQVJ45CwRzYvfWMPP/Ooa0rWH2dGm4dvhONpU\n/oidtNxZGTtS7jmXOW280Xj1q/eIY42PhBSbEcqnAgDyHkx+ADQlr83+TFt3TiJBRESWurjmbdeE\nToatR9/Tj4jIvsmPH9TekjYuNDJ5+3l9jhcPEW8IZ+EqCNypRGTnmrMY6TM8nNY1upXN8bDuKmc6\n/b4W9473morA0w+aHwBNyWvNv1Sc8Ylci0BE0sHFOZxpvyZ6jF1biYgo1V2+yMhoUBdHfYspozbO\nMeVnczctfAegyvPhxImoQPMD
 oCmY/ABoyq1n9mdYdDMsz/NJ9YBywzebiObuGZte3rZcm7J+gpST\nX2F//84vHhHHclkvzSyOi7atLJTmA5f/UO6rr/s2JxiJMrugVVFGREQje/i7K38yXE9MImh+ALQl\nvzV/lqg+a+M60XaueNt+IWv7TAtWaobfILK+Lhc/s+/JP5AbU+Y4f61b/rCX5cpRFmL3PexZaE15\niU+UtF/5wvWHWOO3Pi+tNbHtFhJWNXvz2cqWsDvB16jqEN9Dc74xZO8FAARJXmt+4StPRKMf4njn\n+CDnNzd+KbfT3NRstIIRUax5NRHlJpJPxY8J3/SwTD/m5xrIddUBP34/mtWXxbE/yPEgw51Foq/p\np5wazT57PnJ5ZiqlJVnS5zn3XGFrLSxtrwLND4CmYPIDoCmGG2S5rEVwrrbncqcJAC0wG88tKZMN\nND8AmhLpgt/92+6L8nQL8vybLxIR0b7VO3MsCdPV/7po72u+PYeSSLr6OBnpvpZdOZaE6erltG35\ndn2I8vM+WgrQ/ABoCiY/AJqCyQ+ApmDyA6ApmPwAaAomPwCagskPgKbkPLAniPBJv1CnUVqyyMjF\nsaqrRdvu5HBZOnRixZ+7EoxCDgAZ+DLvubd//Kw4trWCy4YNz8r/Pel45bpmOZnH+cc6xbFV3115\nkgijgD8/sVcWAxnq9G4lxbfM8LJhOF5FM0fGsdCaLi+E9mh6IY9lk8lL1S9csqVddKVq+HoUXFXC\nd890UxoBlnqzKrwipauq0j9/NkPolVdoxR0dkzKGFGIMzQ+ApuRc8/tpsNSkGJf/gBMslPYrxScH\n+LhfqDO+/1VxLPEhLuhZcmjlYZm2msf9UHpO91zgevULCsb5ehx7e704NvUIaxRjVGoz/1om7uRx\nL33nEXHs4999T2DyqN/B6v3L+4yB/8TfcdPRFYtDsbZW0b74F6xpYzE2O1JHpCVXcpWvX3K3LGc+\ntYMzGzf
 sl2G+5U8dXrlQvnZv5iQrU62V4lB8gLNNm+OyZoHrF3yNscUyuUUWhY0/K69zkEDzA6Ap\nOdf8ftJL9Tlr/eOcIEN97pmPmlxxaBP/apaEn/MwK1YtF+i0B28uMnKZeNem5rGDRERU9w/y+d5O\nLFzxJpZgjfj1mwH75/uJJjJVC8qWhEIZX/NWcAk8Uz1XRLvtc16NAm9dwh46nfW9yfvvJCKiG9ul\nHgykyoG3DmGfuUBEREXd8ro4fs2CDG+zvIKdVnP4tRag+QHQFEx+ADQl52a/QNmu8c39pW5xFI5G\nkyMktr5N/uHJ61ry99PuvhiuAJ757yimvuU9Nl3+0lbRl6hng/K3PvwCERF1ffX94lgBvRacPBlM\nfKusVLTH9m4mIiK7kOWOJeT3VPL04QU/YyXY82smLJKsZriDHxnrXg8pD6T3qONmeESy6urSxs1s\nbyMiouLuQXEorFyM0PwAaEr+aP5FMO7i7Txz0itvfENuw9V8hxfC3HK5SGL4WycBkrpwKfDPXCnu\nDGusxFZpDRSX8oJSSyFbTi1/ck4cuz7CFoJ77O1Q5LHH5CJt2X5OLuFvDSY+tlsc87dz1z96QfSl\nrt0IXJ7k/XeJ9vRDfM+sr5QLsmdPsF5tfOQIpRGgs0+mz7XXNYoup5inopHyLMqYtIh8JzZnejpQ\nMaD5AdAUTH4ANCWvzX5/35yIyBicu+ef2tAk/7jB5uL0PdKHvfjoBdIBv0BH++cVH3mbF48eL+Tr\n0fvQbeJQ8R/xtap+MHzZfHNfnPsZ6anW+gy/Dv6m9DiseiJ4s7/45/K6lBxh/4iRVfK+qtvD5vXZ\nv5GPJFv+51Uimus/EAbGGzJGI+YVmzVXsUeis0rZ5+/0StMFXO4Mmh8ATclrzT9n+29s7haOpfzt\nb6IMbpNhY2sC8Bl/p/iRXERzF8BCwVs8cmfSPeZcb0uw+ozcLDL/VcilzZa6decVVS3r
 C7dUt28Z\nERGR3x6U22jVXpkua+Zu0Tf4fi6TXfWDkDS/v02sWEb+ne7LayXlNuBsJ8sTtKaG5gdAUzD5AdCU\n/Db7s5DJ+69gMrfVwGJNvG+bGriaUzl8zBJe4Or9DeldVvkMVxeup57o5YnLsFljLZuysXPXRF9O\nqgp7JvhYm9SDDUeSC42ODGdtg2gXXPM8XgM+BzQ/AJpyy2n+TBp/7NN7iIio8YXrUYsjQjCJMi+6\n5QI/7Vf/5znNVn29vC7Vf89pvzKFk4Ymjxde6/pbVkRkxz2PtlPS+zCKmvQsiLQQzR0cf2AoRmP8\nOMdoBK1pl4IIC49Jvexc7gvlXND8AGhKXmv+bFF9yQekz3bRsPcbfTPctFuqlnc2cnJP++hboZ5z\nMXwtf/G/3yH6HvxVjpjrPsPbRi2/Lbf3UurWVxjyFMhbauJBLmA52cgavalrQBxzPe0aurZXtLyf\nMo5u3yz6zn+8jIiI1j85KvrsoWjSt1k1q+Qftdy2KznFWOySshaSDGcNApofAE3B5AdAU/La7Fd9\n+2e2rSUioptbOLyx7vikOBY7E64Pto89Ik1DOjq68MAI8b3E1v+ZrC1w8h87iIio4wbnQkxdD95n\nfjF5iIhKf8iPH356jzkLaBEt7qkJM3o+zzn87bg8vvEx3pYNPRGLgv/4YVRKT1AnziHo1tnLRESU\nGgn//oLmB0BTDHeRNEdB4lxtz60XDgAaYDaeW1IWEmh+ADQFkx8ATYl0we+Be34tytMtyHMHfkRE\nRPtW78yxJExX/+uinW8y5Zs8D9x1f44lYZ478rxo72u+PYeSSLr6ji9rPDQ/AJqCyQ+ApmDyA6Ap\nmPwAaAomPwCagskPgKbk3Lff9cpqjW2vFX12ATsolV2R5YkKhjkTbbKBQzCHNsmUUDWneFzRRZmV\n9d2EH0o8+LEtREQ0dJt0lLSrOPmVUSDTc7gp/k0v6uNru+F7MpQ
 2iJJjfsHSs1+UtRNcT40UDUnn\nMstz85/1XNhNJTK15c8OrFgOgSP/99n1jZ48LIfhKIk7pjm02ZiVUQauly/fuh5sGK9ZxPfn5Ee2\n82u9jGUovcbnLx6QJdZS5RyaPdzOrzVvyWPmK28EKpv43FA+FQCQ9+Re83spikq9/OkL4f9Wx7z6\nkvUvymPWlo4QJMsf/GKc5ixrsTX/LFNdFnYtXKDAL1J58dOrRd+a/3Fp5fKMc0Rl27PSMjN/ubiD\niVqoM0jclNTkxivsDJTJud2d96pi3ymrGlkDSysNnw2/qKZfpah4kfH+RKzjquo0/VF5reLpwwMB\nmh8ATcHkB0BTcm72m431/DqtlC6a9RZmyssWfJ/d2y/bJ7ngYaytNQwRl43IFUdEbmrl2ej9Ek6V\nTxxa1vum6liOiovB5uq1vcKo1rBcJFtKrHbvv5bXov2Z4OQxvEVjIiKrge8nw/T0mrmIfovxQlxK\nzcXYvHqBwcsRynvwyBQybywccevnZIzvf1XpXFKE7rKB5gdAU3Ku+QVqNRev7VSUiL4bu7l0cdEo\na7GqpMyRny8VcnyC0PZLJbaWswhPbJPbbiPt/LUmq1nrrPv62+JYkDZApv8zdd8u0R7uZC022sly\nND8Tfi4X1eoiIlGunIjIXsNWgV0kt90KzrEFOSeTbqACpWttyyvDffN+WVLe8YyXmh8cC0eODEDz\nA6ApmPwAaEr+mP0ZcE6cFu2aE3OPqQbn0OfeQ0REta/JjKfmyESYouUNTiXnxh3ukF/lrLdOmmzg\nq3T54W3i2Nq/5IUte2wsFHlcRZ00/D17pjW2tfA5y+Sj3cSnuMRa2VPLW8RctjzK46F75E0imqfx\nvOy+Tqt8bLKu3uTGYouF7xC/GE3VDw6mHfMfjEY/s0f01RxgD83UpcuBygHND4Cm5LXmjylbLu4U\n+zo7E+xd5s7KX/RVf8e/oM5uqeF0+VXzra
 OmEwuPuf7b94j2xL2biIio+J9eXWj4iih8WfqhO/6C\noLcVq5Lcztbawpu5wWAUFYp2rJHLXjuTsmSZv21pqHnya6pDlmpx1G3diQfZ2y8OzQ8ACIK81vyk\nFH00KsuJiMjyXlXEs9Crb8rOPHH4EZVpnFwUfGaspBLZlgp3u22p25xDv8JOXTXfCVMaIrLSKwOZ\nFeXp7Zgcl+rhClCxIJx9MrEUpx3FOajsaA8RzV3nCgJofgA0BZMfAE3Jb7M/C67iz53X5NDcjzVx\nYovkKmlm1r/MCU9yIZVxl1yQLTkVVqDqMvE8AN1SGXRrlqc/WkaFWcZLoM74uOhzp6cXGr6yc4Xy\nqQCAvOeW0/yuvwiYyWc6LP/sZWIUSWcWtWR1VFgVnDer/zfWExFR+WXp0R9lKWofP/7g1GdLRV/7\nfwwwjddyUdJ+pdp4+48Oyb3SWEszNyIsYuun/XI7uRQ9KVGG9lg4DmvQ/ABoCiY/AJqS12a/q+zz\nT3XUEBFR4YiX6OOV19PGZ0v+EQV+OGmUpr6f2ffKF7aKvsk2XsSqP8Dmbfk/hus/rxJbt1a0T/4u\nm9TFV/i65MTUV0z86S1szltTcsfcOMgeiXP29EM2930TP/EhuQBqF7IeLnn6cPob3GCTsQg5QvlU\nAEDek9ean0bkdkfRcxfmHjOlR1astTkqibISZRIPH9vzSV/99RwuoCk4126IdseXenIoCeOnhCMi\nir2QnigjNC++LPiZfYueO7LwoJBSd6lA8wOgKZj8AGiK4Ua4l+lcbY/uZABoitl4bknPDND8AGhK\npAt++1bvjPJ0C9LVz9uED+x+IMeSMM+9+pxo72u+PYeSSLr6uPxWvn1nH1kbTsmv5fKTHpkMJd++\ns6UCzQ+ApmDyA6ApmPwAaAomPwCagskPgKZg8gOgKTn37fdLKp/76gbR13Q7F94sK5TRcVWFnLe/\nuXiEiIiuJGRu9ZGHu
 NqKe1wWpHyn2DcGRfudRueZ2zfJ9tB4lpFLwy/b7MtjlsgCpqZX9NEtkWmx\njASPS13pzfBhwfmM+0lDiIiMao4unN5YL/oStZxqrWiEYx6Kj8lEIvbgzcDkUFHrORARmaUygYi4\nVlNK3n6veo6KUVCY1rdczGJOC+Zu4YQqyRr5/Uw28XVJVsrvomCC/d9qX+NKSnPuZZToBgAECSY/\nAJqSc7PfvnadiIiaDraJvt4SNh07H5PFJEf6OTRzaIxNsmufl6b1f33yCSIieqxj3YrlMdWEIBtZ\npr69nEikrE8mVfBNWScmTbLiF7loyFSrNIfLAjD7TS9kue9BzsZb1S1Dh0uuePndlBiN6dYqIiIa\n/CQXLmn6RrDhvn4Y7Kn/IgujFI6wHmn+hXxUKrvCj2oz1fyd9f2mrEdfd5zDWq2XX1uxPKZXCJSI\n6PTv8/9uWHw9is7IrLzF17kvUSu/M+MODolu/ZrMZ+yemRc+/k5kauACoDN/zp9/5arMNl1+kK9H\n6TUl0UgVy2R+Y5iIiMa/dbc4VvJMOKXVoPkB0JSca34ftXBk54ucN13NXT6fyksyScP/HfDLGV9b\nsRxGXMknP8ELQ83PeqnDEtkXAFNekoahzfKylqVnG1s2fsbd5u/yIpk9Ki2iTAmefB1T0sjaw0/1\nNf+975RUXz8REXX+nixu6S9GZkpo4ucyLiuVZaftItY76cW0lo9zSS5sbvrP3j3jpb5yRrNbXqOf\nuIOIiG7uktbAqjMrl8kvIRf7GFuS7TQi5Z1Iz8brVwroqeYCptZ6eawkbXQwQPMDoCmY/ABoSt6Y\n/Sq+ua/ul/d8lAtyJJo9s1L52Ur+DS/0VQRg9s/BZtNR7Jv39mUd7ryPw18bjoZTXimTye7v+TuT\nk2l9JVf5ccVWa88HuGesnjMbpvcoNdYmv7TW73Ml3KCzHjrq/zqP+T4ARESu99xR0RNOxuVMJr7l\n
 +xtMy3PaOzYSEVGqjBcl1/w/+V2HlQEHmh8ATclLze/jnDgt2omvcBKHgirWqmff/31x7GOb9xER\n0cyPlYWtLBogCJL338XyTErdVTDgeWcNXBd9bhNvWxpT4VgDE3tvIyKiRK38HZ8tZe2++kX2Xgsn\n63tm7HvvEO3zn+Tby6pijVuoOK25ZWEtY81leu8O0b78Kd7Oq6mR2njyEF+3ysfllqOvaYPw9MvE\n8N4OIiJq+JL0eNxdzbUV/vkaW7vGk3KLUqTaC9jTD5ofAE3Ja82v0vkQ/zL7W0n7SKaXOvftNj72\nDemo0fG5o4HLIAo4ElHsNOend+NSO8w0s+VhnT0v+pLv41/y0jf7A5eHiKjsZyf5VclPb3oFS5Pt\n7BSU+JTcYit7yqveE5K/eMHBk6K96TDrFrOaHW+mO5vEscuf4Paabw6IPieEUtQlB7pFe/NrvOno\n1FWJPvse1qpn/1qmB9v0O1y007XDsZmqnub935kfy4Ku/1K7hYiIEndzlaPCR+T2Zeyz/D2mrga7\npgXND4CmYPIDoCm3jNmfrRRWwwE2Ycc/mYhKHKIZz+tvRprbRWO89aVKOr6GL3Hpm+GIkWkryeln\nU9ryXu3PSD9xw68DP5O+7RWIPBlMd8cLoY31yUef+Dr2ZDPWrZEDT50LXp4JZTvSbw/KMN76U/xq\n/rtdom/6A7yIWvTiicDlISJy/FBxNWTc28atPH+JiIgubJePak27+XG2+Ecw+wEAAXDLaP75xNa3\nifZ4K/+GGYcqFxgdDb4TkOUtuBERVVyOvninj1nGfuXFg0rEmq9tIigEmY2pJj6/MbLyqMeVYFh8\n79hF8noUDkdXYn0+vgNQqkreN6UX+RoFvfwIzQ+ApmDyA6Apt5zZb9VyYo3ej8q66pOdvHi1+Xfk\ngpFN0eBkyEXX/2kZk9D8XDj7+9kQOf86ONlGvFea1lF6+80ndZ9cVKu8wJKkr
 t3IlThMRxsREVmz\n0oPeOs+Pb1FeK9NbiL3x65zwpPiy8ljWfTmcc4byqQCAvCevNb9VVyfap/6EI/fKGnhra+Zt+Uu9\n6Vu8lRS2P/9imX1v/nvevmr6xbDsVLYCw8DXGOpWqLmeNf5UA/vPFz1/RL4hwoU+q5Mj1RLreBFr\ncJtMZdXyV+zl5jgh22im/H/dWb5GsQZ5X116gBdnW/fL7T9nLH37NFCRvKjLxAe3iL7JBp6Kw1v4\nvu7831fEsVQinC1saH4ANCWvNb99Qz4PdnzJ86V/L/v0F/TLZ+nUxZ5I5LHqakV79G5OGjlbIn8/\n6w/y878xtrQ49yAwvRRdI7/SJvoqT3LKKKHxo9T2yjbnyO18veKDbP00f+uYOOa8w5oIy5anXmr5\nc19mhyJT2X3d8D2+j+wr0a3N+GsyqiVkej5XHX/OsQipwcG09wUNND8AmoLJD4CmGK4bVpKgdJyr\n7dGdDABNMRvPLek5D5ofAE2JdMHvA1/8rShPtyA//9v/Q0RE+1bvXGRkNHT1y+T++SZTvsnzwS98\nIceSMC8/+qho37/13hxKInn+7ZeWNR6aHwBNweQHQFMw+QHQFEx+ADQFkx8ATcHkB0BTMPkB0JTc\nB/Z4Pn8lP5OZUpdbvCG2bi0REU3c1hCYWHmFydUkzW1c5ml4m8xV6JfpcgqU4V7gSnyQL27ty0p4\n6BVZDCJszNJSIlLCjW0Zvmu1cmBU6sKlFZ8nUSNv4+vv887lsJNb5Ul5LH6T03OoBUOdHZzopOSl\nMtEXRN5Fo4TLbaUGvIy7KwhdtqqrVyxPJqD5AdCUnGv+4gEOf82k7c2dMtmB64WlWiOcaEEN4xXt\nd6vm97SGXcaJOwxFiTQ/wanLnGGZQMTXtFYDFwk99d/WiWPt/yEczT/+bzjPfPUB+fmul6/fMDl5\nhRqiPbybS1CVB6D5a/9Flvyq+v7in5cpx7NfeJWIiAKI
 gM6m8Y0YT7tstSiiAJofAE3JueZPrObn\nQqtaJne04/yMm/EXuIXHxyNK4JFPGK+wf3vlUVng0c6SFMO+xqXCzeSGcAUjovInuQDoUnVZsoK/\n3PIAzj25WSbsKGxkve56+fhnK7Lf4qVvXeWGkuos+cBdC4xeOlZlBcvhVUYyiuPyYJYCoLZiwYUN\nND8AmoLJD4Cm5Nzs97GLrbQ+w5G5P0peOcvjMmToTX1oV1rfuxk1c7BfeNPcsFb0OcW873d9N5ue\nHX8n88FFVc8gE+aOzaJdf4DN26Bz489UF875e7hd7oFO3sVZcO1Jedt3PMfboH49iKDx8/Wppr5R\nxd9L6pKSj39eUh1/+5qIyB0ZC0U2aH4ANCVvNH8m4l3HRdvOsi0Se4Gzwsb2bBd903XxhYa/q/Ct\ngOvvUTSX95M+vJOvmZmSWYfrenmByxkPv0CmsWsrnz/hlTMfUs7p5dM3quTGWxh1Fxq/eWBJ405/\nbaNo1x9i2eIj4dhJS8k2rY4xCth6MMtKA5UDmh8ATcHkB0BT8trsn7lP5o9zvT1/K8kLJ4XXpAlp\nn/IKdL76tnzzA3otAtY8djC9z0szN/Zv94i+qQ/yolt8/6uhy+Qe4+/DN57NuHwU8z06Jz9+t+gr\n/eHhwGVwPnC7aJtJliTWc130pQb4Maj9YXnu0c/I6xUGfsyDUSCnn5Pg65GpDJw761X0IJj9AIAA\nyGvNbxel/zY5hZ7nVrmMdIqf4leroixtPCCq+IdDon3jy1xMNBfLoZniNxI18jsOVq8xs2XKLe61\nkzVrlBHcjitRpdVPcztx79YQJFK2/xT84p3kvaqefv52btBA8wOgKZj8AGhKXpv92TDs9Mpf9qa1\nGUZqjJcEZOITMlCl/ggvlOZL3bTKCzOLDwqRiUaeAkXKQpu1vi1H0hAZ/l6+YvZbTRyq7o4G65sB\nzQ+Aptx6mt9TWUVKCKZffz5ZE87
 CyC2Hp/GtavaeG9kof+PLnz6bE5HmM/FJ3uIr++HRyM89XS3j\nSEpupnvxJdeuilIcIiIy4nzvZkqz5k4mQjknND8AmpLfml95MI0/u7BTSvIjd/JwM4D8S7cantUz\ns1c6NSVq+Wud8RJmrH30nDhmz+buGXv6wd2iXflSNxER2StIbLmkc1ZJLX/dO33dUXmfFD/D95W1\nuV30JUvSI0yDRGh5z8EoE7GWZtF2J6dCkQOaHwBNweQHQFPy2uwvHJ0V7VhbKxERpep5EStZK33U\nXEtDc9/HSwJR2CUXzkq8RBDuTd4ussfCSQaxGL4Pu1nLC2glL8nYC3tyMhIZqk7K7bHKJ95OO+6H\nHU81lkQwjbyaAAADhUlEQVQiDxGRPZSep8/34rNWsedqWKa+CjQ/AJpiuG507h7O1fZ88S0B4F2L\n2XhuSaYwND8AmoLJD4CmRLrg95G1uxcfFAE/6eG93X2rdy4yMhq6+l/PtQhAQ6D5AdAUTH4ANAWT\nHwBNweQHQFMw+QHQFEx+ADQl9779Xhhupnzly8UvaxQUVgUXVJze08Gv1fJy+eGydoF0prJm2YGx\n7qD03XbeOh2oTAAEBTQ/AJqSc83vJyccuatJ9MWHuMDkZKMsr1w0ypV6klX8ezW6Xv5utf7x0oox\nLhc/7qHnV/kybXxSRlrFBjztPiMjD/1IrML9xaIv8YFQRANgxUDzA6ApmPwAaErOzX67j/OYVao5\nyW3O61aQSC/v5BvUFXduDls0UcO+4/ff5L+VBBSpLO87P9Qi2qvpWiiyAbBSoPkB0JSca34fZyJ7\nWid3XtZZ4+Aboh3z0lbZvQPBC0ZzNb44p1fVxR2VKbJu/FonEREVPRuKGAAECjQ/AJqCyQ+ApuSN\n2Z8J++4tom142f/8eutqttrUxZ609wbt7Tefgb3sl+Baq0Xf6BZeqCzulUUfrGrOxqrWWwcgH4Dm\nB0BT8lrzF5
 y4oPzBohZUsr/9+K8rKcE893q/9FIUNHzvOBEROdNyO7Lee7U2rhN9p/+Y4wLaHz4c\nmWwALAVofgA0Ja81v6M6+fhViscmiIio5Eq/OOTu2hShVIyq8edjd18U7aLGsijEAWDZQPMDoCmY\n/ABoSl6b/dkwCqTo7mH2vTfjSvFO24lcJh+rqlL+8VZ5zuQAIBvQ/ABoyq2n+b20X85Uegljo1A6\n9rgZIgKjovt3pXPSxr/gNF52roQBYAGg+QHQFEx+ADQlv81+U2bGnZ/d1ywtle3aVUREZPdHlzjD\nqq0hIqKJ924QfSMb+HK27ZchwPbNochkAmA5QPMDoCl5rflNZcvs+kdZw1peTo/an0q//yg1vjjn\n4E0iIioaahV9LadZy9tnuiOXB4DlAs0PgKZg8gOgKYZfmCIKnKvt0Z0MAE0xG88Zi4+C5gdAWyLV\n/ACA/AGaHwBNweQHQFMw+QHQFEx+ADQFkx8ATcHkB0BTMPkB0BRMfgA0BZMfAE3B5AdAUzD5AdAU\nTH4ANAWTHwBNweQHQFMw+QHQFEx+ADQFkx8ATcHkB0BTMPkB0BRMfgA0BZMfAE3B5AdAUzD5AdCU\n/w99eh37iWlJHwAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x7f0747eafc90>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "r1 = tensor.to_numpy(r['relu1'])[0]\n",
+    "vis_square(r1)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADrhJREFUeJzt3WlsHsUdx/F9DseOYydxnMN2Qsj1OIFwJA0JSYqIKkET\naKsWWrWiqOIqVUpVRBFVD6RW6iFatUK8KUUF2qJCqFAPoSKIK1SUCkJIyAV1aOwcDrEdxzmcA9ux\n/Ty7fVnN/jc8m83uPM+T//fzbkbjnSH2j9GMdmdSnuc5APRJl3oAAEqD8ANKEX5AKcIPKEX4AaUI\nP6AU4QeUIvyAUoQfUCprs7O19XeL1wlTVfaG8OqeTeZ4WpZY6ztIW+8uUXfLvJVG2R0dszUcp617\nu6grt3+jchuP45R2TEHjSTd1psL8LDM/oBThB5Qi/IBShB9QyuqGnzs4GMtzhr+wQtSNf3mbWVGh\nnyr7P7FO11SLNnt/u8gor1nYKdrkavuN8lufyYk2+cPdUYaIIjJXyH/rk8sajfLEA8OiTWrz7sTG\nFISZH1CK8ANKEX5AKatr/qj2/2qVUa4/KN9hGF+ha/xi3KEhUZe7a4dR7g34uV5nvFHe9/gs0WbB\nw/Gs+VNZ+WeUrq83yoWBAdHGXbPU/JlNOyP13/3XxUa5fdULos01W+8wyvUbJok2dS9tidS/X+qM\n3Nua9Lzcl/FL19Ya5aDffZyY+QGlCD+gFOEHlCL8gFIVseE3/7tvF23T8fRyo9x6/7bztIxfpqFB\n1AVtcNnU8ZT5IlTr+ng2s4J4+byoC/PfX9V31vyZiP3P+mK7UV7ryK/smp0PIj79wuV75BZsaqm5\nKbn3wRrRpvUe+VVlkpj5AaUIP6AU4QeUqog1f99Dq43y5bcdEG1a19hb4/ulJtTKygTX/KmqcUbZ\nGxsVbVrXb02s/zBO3mu+mDXl93LfptB50NZwhCMPr
 xZ1zY9vTqw/b6e5L9F6T2JdhcbMDyhF+AGl\nCD+gFOEHlKqIDb+mJ8yNmJEnZJtM4xSjXDhxMskhGfLdPaIuM2O6qCsc7Rd1UQRt8JWboA0+v66f\nmi8izXm0+M/EJcnNvVDSGVF18m7z3yPMv+FFDSHRpwMoW4QfUIrwA0pVxJo/jP7bFxrlxqftrR+D\nxLW+v1Rk58wWdUmt8YNOFup7wFxPt7x+XLQp7OlIZDyO4ziZyebJQYe+uVi0mfWY3X0IZn5AKcIP\nKEX4AaUIP6BUyn89VJLcvtyleb42UEbSTZ3ybPugdkkPBEB5IvyAUoQfUMrqSz5rW+SpqkEfOCSl\nrds8HTVwPBa19e4SdaUcU7mNx3HkmMptPI5Tfr+zsJj5AaUIP6AU4QeUIvyAUqX/qs+NeklTEalQ\n7zlUpEzrfKM81jxRtIl6131SMtOmibrCsWOxPDu95EqjfOTGyaLN1PfPGeWqk8Oijbs7uSu9spfN\nMspefcBx7wXXLO7dl9h4HIeZH1CL8ANKEX5AqZKv+Yduu94oNzx0SLS5fcYOo/ziopbExjP4JXM8\nE/7yTmJ9RVXo2G+U08kdQBOboPX9mvfMdfema8ZHera7a49RnhHivRe3eJNY5Q93W+6xOGZ+QCnC\nDyhF+AGlCD+gVMk3/Ope222UR/5+TrR50Sm+wZdtbjLK+b6jkcbj3+BLT5gg2riDg5GenZTj31gl\n6qb+rrRHl4fx7O7VRnmBk9yLSanqaqPsjYyINkO3Xy/qav9mb8P3xNfN32PjM1zXBSABhB9QivAD\nSpV8ze/61l7e6mtFm4Efmi+DDG6ZKtpc9jPfVUcxfdgTtL5P19QY5dn/ln11rZAfjiQlaH2fWmZe\nB+Vtb7c1nNBq34v2Uk8UYo0f8Pdhc30fJOk1vh8zP6AU4QeUIvyAUoQfUKrkG35+qbffE3VTPmve\n8jXFCfiMzeLJPe4580WkrhXn
 aVhCp66oN8qTtp+nYQkNXi1f6LIlMz3gZKGj/SUYSekw8wNKEX5A\nKcIPKEX4AaXKbsPP8byiTfxHVzuO4wwubDTKNa9si21I5S47U371OOn5LSUYycdYeY2oWvSdLqOc\n0CHugYI290bXLRd14zZeun9HzPyAUoQfUIrwA0qlvBBr7Li4fTl7nQFKpZs6Q73xxswPKEX4AaUI\nP6AU4QeUsvqSz9qWJTa7E9p6zUvcym08jlPaMZXbeByH31kxQeMJi5kfUIrwA0oRfkCp8vuwB4Z0\nba2oc4eGSjCS//NffTV8szxuva7dd13a6Jhok+/pjXVc5SyzeKFRLrTvFW1SWTOOXj6f6JiY+QGl\nCD+gFOEHlCL8gFIVueH30cZ5oq5u3YESjOT8hj8vz/Me//LWC39QJhNL/5H6Pg//vXc1r8hnJ7tV\n9fG8T8qXblJvmS/DdPxhmWjTeu+OgIdd+Ieo2XlzRF0+YINPdJXwBp8fMz+gFOEHlCL8gFIVseZ3\nbzDXcHXron/MYEv3bfIs2tzLF/4c9+xZUZeury/aJs41fqXxr+8dx3E++vJKo9x6T3KnG+cPdIm6\n7KyZRrnQPEW08ba9n9SQAjHzA0oRfkApwg8oRfgBpSpiwy/9prmB8+GPVos2s3+y2dZwBG+1/Kot\nd/f2xPrzb/BlcvKlp6GceX1Z9at2r51y1yw1yulNO63271f3UvENvlNfWyXqJv/p7Vj69wbNLzG9\nbT2xPPdiMPMDShF+QCnCDyhVEWt+v1Ku74OkNu8WdZkFc0VdYd/BRPovdMqPmkaXTTfK1aJFskq9\nxo8irvV9kMLAQNE2vY+Ye1ktv07275yZH1CK8ANKEX5AKcIPKFURG35jn77OKFf9890SjSS8Dx6Z\nJupa1yez4Ze+apGoq/9zcl+tVaLuH5ibabMes7xpnDZPZMrUTRBNkt7g82PmB5Qi/IBShB9QKuVF\nOJ00Krc
 vZ68zQKl0U2cqVLukBwKgPBF+QCnCDyhF+AGlrL7ks7ZFXqNkU1uveSJQuY3HcUo7pqDx\nrJt9naizea2U+J3NXCobWdy0Dvo3unXRjUbZHT5nazjOxkPRj2hn5geUIvyAUoQfUIrwA0qV/Ku+\ndE2NUT7xFbmhkx0xN3Rqj46KNplNvqO0XHlXXhQjtywXdbVdp8yKMbkBltSRXY7jOKnlVxvl0QZ5\nSFdcXz4mubmXmTzJKBdOnS7+QwGbe6nrrjKbvPufixrXhfIK5t9aespk2eajQaPsDg6KNrYx8wNK\nEX5AKcIPKFXyNb97znwhouE5eXyyf41r8x7z6tfkNVfx7CZE5//vr7Lcf8/3zVNxZv4i2gk0odb4\nIWR6jhtle68gBSsc7S/aJrN4ofy59r1JDOe8mPkBpQg/oBThB5Qi/IBSJd/wCyPMBt/pO1ca5Ukv\nJHd0dXbu5Ub51PJm0SbMffBxybTOF3XDcxuMcnX/sGjj7WyP1F/UDb6k5I/0GeXsrJmyTXePreGI\nF9ccR25s297cC8LMDyhF+AGlCD+gVEWs+bPz5hjl3nUtos30J+2tQwvdR4xy3cFD1voOUujYL+rG\ndZjl/b9cJdrM25nUiErL5vo+iH997zjyyrl//fEZ0WbVI+uN8sQNye4bMfMDShF+QCnCDyhF+AGl\nKmLDL3+gyyhPf7IrsJ0t3pg8Sajczfue/FpSs8y0aaKucOxYYv35T1YKOqJ9omPvxTDHYeYH1CL8\ngFKEH1CqItb8YWSubDXKhT0d52kJG/ofME/7sfkSVhhJru8rBTM/oBThB5Qi/IBShB9QKuVZvNvc\n7cvZ6wxQKt3UmQrVLumBAChPhB9QivADSll9ySfoYwab2np3GeVyG4/jlHZM5TYex6mM39mti240\nyoUzZ2wNJ3A8YTHzA0oRfkApwg8oRfgBpS6Zr/pgT+FTnzDKPWvk9VTnmseM8oINedEm
 val0Z4en\nli0Wdd72aNeXuSMjFzscx3EcJ9s0wyh7Q/KKtTg3E5n5AaUIP6AU4QeUumTW/IcfNU+Ouezn0U6O\nGbtpmVGe8mN5FdeejeapQUF9ZefMFnX5rg8jjancZN7YYZRnvxHtOf3f8p3285t4Tvs597kVom7C\nvgGjXAhY36eqxok6myc15/uOGuUDQVesxXgKMzM/oBThB5Qi/IBShB9Q6pLZ8Jvz5AdGuRDxOVWv\nbzfKZ1+XbS5zjhd9zqWyuRfVvidWGuXUdHln/fyvJnOcd80/too6/9/DsfVyM23aU+V1pVnumaOi\nLurfdRBmfkApwg8oRfgBpSpyzW/zBZqgvgavMD/AqH5tm2iTWn61qPO2vR/LmPzXSw/cPF+0mbjB\n7nXPfgseKt5/trnJKOeP9CU1HMdbfa1RDlrfZxYvFHWF9r2JjamY/35bXiOee/BAbM9n5geUIvyA\nUoQfUIrwA0pV5IZf0ObeifvMlzYan43nhY2gvqpDbC66VfL/q6HuUArBf7f8xA2Vedd8kht8fqnN\nu4u28aoyFkYSXu7BdxJ9PjM/oBThB5Qi/IBShB9QqiI3/ILEtcEXxpk7zC/W+m6Sx1K33veureGU\npXR9vVF2z54t0UiCDdwlv+preK68vupLGjM/oBThB5Qi/IBSKc/zrHXm9uXsdQYolW7qDPU+GTM/\noBThB5Qi/IBShB9QyupLPmtbltjsTmjr3WWUy208gE3M/IBShB9QivADSlXkhz3ZuZeLuvzBQyUY\nCVC5mPkBpQg/oBThB5Qi/IBSZbfhl66tFXXu0JBRTnJzz3+nW5gjn4OMrlsu6sZtlHf6AaXCzA8o\nRfgBpQg/oFTZrfn96/sgJ+6XJ682Ph3Pyav+Nb7/DnnHCXfNVO3uw/Lnog8LiB0zP6AU4QeUIvyA\nUoQfUKrsNvzCCNrcO32neYXWpBe2xNKXNzxctI17gzwRKP8mp/S
 gvDHzA0oRfkApwg8oVZFr/iBu\nNtQNRRescOp0Is8FSo2ZH1CK8ANKEX5AKcIPKFWRG36ZqY2iruG5eL7qiyId8EJP0BgLx0/YGA4Q\nCjM/oBThB5Qi/IBSKc/zrHXm9uXsdQYolW7qDPXGGzM/oBThB5Qi/IBShB9QyuqGH4DywcwPKEX4\nAaUIP6AU4QeUIvyAUoQfUIrwA0oRfkApwg8oRfgBpQg/oBThB5Qi/IBShB9QivADShF+QCnCDyhF\n+AGlCD+gFOEHlCL8gFKEH1CK8ANK/Q/zQX1soXEu2gAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x7f07356cc790>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "r2 = tensor.to_numpy(r['relu2'])[0]\n",
+    "vis_square(r2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(32, 288)\n"
+     ]
+    }
+   ],
+   "source": [
+    "p=net.param_values()[2]\n",
+    "print p.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACwNJREFUeJzt3etv1vUdxvHvfZeWHjkptIUB0lJAJohyUvFQNVuGWZhh\nLjjnBupQqqDL3OKcPlh4sGxL5kaioImniUg2N6fZnBPnsFMHBhy2Ujy05ShQKgXKobS0ve/9B7u+\nD375ueR6vx5fuX8f7pur3yeffH+ZfD4fAPjJftEDAPhiUH7AFOUHTFF+wBTlB0xRfsAU5QdMUX7A\nFOUHTA1J82Hz/v6gXCfsbDtPfk5Fe4HMND2wVmamNC6VmeKSczIzrLhPZkII4Z2ZL8nMvYfmysxf\nd82QmWxnkcy03fK4zNS+eZvMzJ60X2a2fTJJZvYsfFJmpjzXIDNX1X8oM1sPTpSZEEJouXyDzJzO\n9crMxZv13CMbi2Vm++p1MpOtas3IUODkB2xRfsAU5QdMUX7AFOUHTFF+wBTlB0xRfsBUqks+Y8u7\nZaYz6CWffEJTD3TppYq+7lKZOTQiF/fAmTryyZx+mZmw6ZjM7OsZEzORVHBAf0dd1WUyUz6qJ4lx\nQm68XqhpX32hzGSXn0linBBCCPPfu0NmcqcLZebE1CSmicfJD5ii/IApyg+YovyAKcoPmKL8gCnK\nD5ii/ICpVJd89q+fLDMVpfoSkomLdycxTiipPi0z+SPDZWZ07edJjBNCCKHzlWkyc6p5hMxc+ESn\nftgiHXnm5sdkZvlTK2WmvyLinZDzdSRk9Od0LNOLQANt+ncNIUTNlPtQf1ZBmZ57WDL/raNx8gOm\nKD9givIDpig/YIryA6YoP2CK8gOmKD9gKpPPRyxfJCTXUZfewwBTvK4LwP9E+QFTlB8wRfkBU5Qf\nMEX5AVOUHzBF+QFTqd7kU/PHu2Qme36fzuwrkZlPl
 66Tmdo/rJCZ3HD9+qySCj1zCCHsuuJ5mdna\nOygz33vvdpnJ5/WeR2v9szLzVHeVzHzY8yWZ2XygTmaa5m2UmQ/69He9+G/3ykz57gKZCSGE5vvX\nykzNi/r/Ue1FB2XmcPcwmdl52QaZicXJD5ii/IApyg+YovyAKcoPmKL8gCnKD5ii/ICpVJd8Cs7q\nvzXFJedkZqC3NIlxwh3XbZaZjc9fLzM9M3NJjBNCCOH+n9wjMyMiXml2fHoS04Tw6GOLZebELP2b\nFVXoTIwfLr9bZqY/vF9mWkrGJTFOCCGErN4DC+27xspMQU/EWXxZxECROPkBU5QfMEX5AVOUHzBF\n+QFTlB8wRfkBU5QfMJXqks+Y9/XbuspeLpSZ3Tcls1Tzp8euk5meK8/KTMEQfftOrOI7D8nMod2V\nMlPZGHFTza06Url4n8ycaNcLLEXbyvXDrtKR41OHysxnWy6QmdKTUW+0CuFrEZlqfbvQhBd01Q5c\nHzlTQjj5AVOUHzBF+QFTlB8wRfkBU5QfMEX5AVOUHzBF+QFTmXxeb90lJddRl97DAFPZqtaoVUFO\nfsAU5QdMUX7AFOUHTFF+wBTlB0xRfsAU5QdMpXqN14IfrJCZY986IzPFjRUys+Ona2Vm0mvfl5kh\nR/W1YuX74q5f2vGwnmlrr74S7LsvrpSZohN6ppZVep5pTzbITCann9U7Xr+rb8/CJ2Vm0it3ykyM\nwhMR15yFED5duk5mLtl2s8zMq9bXoTW+donMfLxc/2axOPkBU5QfMEX5AVOUHzBF+QFTlB8wRfkB\nU5QfMJXqks/ha/RFPvnjxTLTf0VPEuOEuqcHZKb9m/orGihN7h1rK3+uF3gGZ+jv8Yobm5MYJwxv\n05nT3+iWmZIdwxOYJoRh1adkpq9ppMz01+h3MMY61TZCZjYdjXhXYaX+/5gkTn7AFOUHTFF+wBTl\nB0xRfsAU5QdMUX7AFOUHTKW6
 5FN4TP+tKbpIL3EMeUMvVYR6Hdlzj86Ub9Mzj7rhoP6gSFc2bJOZ\nv7w9R2a2/+5i/bCH35WRuav+IzOvNs+QmeF6DyjKmZ6hMjN63hGZOdo0JolxQgghZPsilrxK9AJP\n5vOSBKaJx8kPmKL8gCnKD5ii/IApyg+YovyAKcoPmKL8gKlMPq9vhUlKrqMuvYcBprJVrVFXS3Hy\nA6YoP2CK8gOmKD9givIDpig/YIryA6YoP2Aq1Zt8bt1bLzMrq96UmYZfr5KZHQ+tlZkpjUtlpr9b\n3xzzwNWvykwIIawYoW/8qXtrmczkD+lXmg3t0n/XW1bp7+iGT26QmQvKj8nM5r11MvPRgvUyE6N+\n540y07FlbNRnfbxcf0e37LlWZra2TZKZa6a2yswzE96WmVic/IApyg+YovyAKcoPmKL8gCnKD5ii\n/IApyg+YSnXJp2XDdJlZ/fsCmTn5UC6JcaKMu+CozPzqH1+P+qwVNz0hM8M361c2dc3Vr36qnbs3\nZiRp8MHzZeb1JRNkZlRzxOUyC3Tky4/eLTMDJfrCqNHzO/TDIm39YIrMZM/qf3/1zITeaRaJkx8w\nRfkBU5QfMEX5AVOUHzBF+QFTlB8wRfkBU6ku+Sy6s1FmNl41W39QQvsZZaV9+lHHhsnMy4vWRD5R\n38DTNXtQZgqP6p+t642JepyIsVu/o5eO8kV65vpV2/XDIvROPyszBQV6CexIU2XcA2fqyLxZ+gae\nptenycw7nbX6YZXNOhOJkx8wRfkBU5QfMEX5AVOUHzBF+QFTlB8wRfkBU5l8Xt96kpRcR116DwNM\nZataI65N4uQHbFF+wBTlB0xRfsAU5QdMUX7AFOUHTFF+wFSqN/l85du3yUzvqCKZ6Rmt/2a9/7N1\nMnPp6gaZORlxuUp2/BkdCiF8evVzMnPXZ5fLTNPRcTJzWeVemflttb5dZ/ILK2SmYo/+PfrLZSTs\nvG+tzNS
 8qOfJntM7LqWHo/ZgQvOP9EyT31omM9fW6tt+Wn4zQ2b+/cjjMhOLkx8wRfkBU5QfMEX5\nAVOUHzBF+QFTlB8wRfkBU6ku+bQtKdShQv2qpdnT2hOYJoRTNTpz0bzdMtPUEvFqrEi7fqHfD9V/\nvv6bvemr+tVgIWLJJzOol2FOj9cXNA2W6t81Rr5YvxqsamqXzAw0jUlinBBCCL+c85LMrNlzvcxM\nvm9XEuNE4+QHTFF+wBTlB0xRfsAU5QdMUX7AFOUHTFF+wFSqSz6ZsgGZKdupl1PGzDqdxDhhsFgv\nnnSf0/Nk+5L7G9p7+3GZWV7zrsw80qyXSmKU79NLPrmh+nN6qpL5jmpqj8hMWeE5mWmfkNxvtubH\nN8vMgYX6cw6WjdChif+KmCgOJz9givIDpig/YIryA6YoP2CK8gOmKD9givIDpig/YCqTz+srmJKS\n66hL72GAqWxVa9SLCDn5AVOUHzBF+QFTlB8wRfkBU5QfMEX5AVOUHzCV6jVeU59ukJlMxCvdsv16\nh2FXw1qZuXT7Epk5cbxMZoaW9stMCCF8tGB9VA5IAyc/YIryA6YoP2CK8gOmKD9givIDpig/YIry\nA6ZSXfIpmHZKZmZVH5SZ/adGJjFOGPzneTIz6oy+fOjkdYNJjAOkipMfMEX5AVOUHzBF+QFTlB8w\nRfkBU5QfMEX5AVOpLvkM+3O5zGypnywzY8d3JTFOOHlxn8yUfzRUZgY6S5IYB0gVJz9givIDpig/\nYIryA6YoP2CK8gOmKD9givIDpjL5vL6pJim5jrr0HgaYyla16vfZBU5+wBblB0xRfsAU5QdMUX7A\nFOUHTFF+wBTlB0yluuQD4P8HJz9givIDpig/YIryA6YoP2CK8gOmKD9givIDpig/YIryA6YoP2CK\n8gOmKD9givIDpig/YIryA6YoP2CK8gOmKD9givIDpig/YIryA6YoP2Dqv/x3CAzTt8/U
 AAAAAElF\nTkSuQmCC\n",
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x7f07355967d0>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "vis_square(tensor.to_numpy(p)[0].reshape(32, 3,3))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "anaconda-cloud": {},
+  "kernelspec": {
+   "display_name": "Python [conda env:conda]",
+   "language": "python",
+   "name": "conda-env-conda-py"
+  },
+  "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.13"
+  },
+  "widgets": {
+   "state": {
+    "0678ea185e8c48a9ab20bdb956e6b18a": {
+     "views": [
+      {
+       "cell_index": 13
+      }
+     ]
+    },
+    "1373fb7b9e754b639a3f27ebf0372d70": {
+     "views": [
+      {
+       "cell_index": 13
+      }
+     ]
+    },
+    "49561f2ab00b457f82357766d967ca8b": {
+     "views": [
+      {
+       "cell_index": 13
+      }
+     ]
+    }
+   },
+   "version": "1.2.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}

http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/core.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/core.ipynb b/doc/en/docs/notebook/core.ipynb
new file mode 100644
index 0000000..c16cc1f
--- /dev/null
+++ b/doc/en/docs/notebook/core.ipynb
@@ -0,0 +1,1151 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "collapsed": true
+   },
+   "source": [
+    "# SINGA Core Classes\n",
+    "\n",
+    "<img src=\"http://singa.apache.org/en/_static/images/singav1-sw.png\" width=\"500px\"/>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "collapsed": true
+   },
+   "source": [
+    "# Device\n",
+    "\n",
+    "A device instance represents a hardware device with multiple execution units, e.g.,\n",
+    "* A GPU which has multile cuda streams\n",
+    "* A CPU which has multiple threads\n",
+    "\n",
+    "All data structures (variables) are allocated on a device instance. Consequently, all operations are executed on the resident device.\n",
+    "\n",
+    "## Create a device instance"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<singa.singa_wrap.Device; proxy of <Swig Object of type 'std::shared_ptr< singa::Device > *' at 0x7f69a05ff330> >"
+      ]
+     },
+     "execution_count": 1,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from singa import device\n",
+    "default_dev = device.get_default_device()\n",
+    "gpu = device.create_cuda_gpu()  # the first gpu device\n",
+    "gpu"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "** NOTE: currently we can only call the creating function once due to the cnmem restriction.**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "gpu = device.create_cuda_gpu_on(1)  # use the gpu device with the specified GPU ID\n",
+    "gpu_list1 = device.create_cuda_gpus(2)  # the first two gpu devices\n",
+    "gpu_list2 = device.create_cuda_gpus([0,2]) # create the gpu instances on the given GPU IDs\n",
+    "opencl_gpu = device.create_opencl_device()  # valid if SINGA is compiled with USE_OPENCL=ON"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "3"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "device.get_num_gpus()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(0, 1, 2)"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "device.get_gpu_ids()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Tensor\n",
+    "\n",
+    "A tensor instance represents a multi-dimensional array allocated on a device instance.\n",
+    "It provides linear algbra operations, like +, -, *, /, dot, pow ,etc\n",
+    "\n",
+    "NOTE: class memeber functions are inplace; global functions are out-of-place."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Create tensor instances"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(2, 3)"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from singa import tensor\n",
+    "import numpy as np\n",
+    "a = tensor.Tensor((2, 3))\n",
+    "a.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<singa.singa_wrap.Device; proxy of <Swig Object of type 'std::shared_ptr< singa::Device > *' at 0x7f69a02f8a50> >"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a.device"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "gb = tensor.Tensor((2, 3), gpu)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<singa.singa_wrap.Device; proxy of <Swig Object of type 'std::shared_ptr< singa::Device > *' at 0x7f69a05ff330> >"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "gb.device"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Initialize tensor values"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "a.set_value(1.2)\n",
+    "gb.gaussian(0, 0.1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### To and from numpy"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 1.20000005,  1.20000005,  1.20000005],\n",
+       "       [ 1.20000005,  1.20000005,  1.20000005]], dtype=float32)"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.to_numpy(a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.24042693, -0.21337385, -0.0969397 ],\n",
+       "       [-0.010797  , -0.07642138, -0.09220808]], dtype=float32)"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.to_numpy(gb)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(2,)"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "c = tensor.from_numpy(np.array([1,2], dtype=np.float32))\n",
+    "c.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 3.,  4.], dtype=float32)"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "c.copy_from_numpy(np.array([3,4], dtype=np.float32))\n",
+    "tensor.to_numpy(c)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Move tensor between devices"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<singa.singa_wrap.Device; proxy of <Swig Object of type 'std::shared_ptr< singa::Device > *' at 0x7f69a05ff330> >"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "gc = c.clone()\n",
+    "gc.to_device(gpu)\n",
+    "gc.device"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<singa.singa_wrap.Device; proxy of <Swig Object of type 'std::shared_ptr< singa::Device > *' at 0x7f69a02f8a50> >"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "b = gb.clone()\n",
+    "b.to_host()  # the same as b.to_device(default_dev)\n",
+    "b.device"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Operations\n",
+    "\n",
+    "**NOTE: tensors should be initialized if the operation would read the tensor values**"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Summary"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0.12169448286294937"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "gb.l1()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0.4898979663848877"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a.l2()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "False"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "e = tensor.Tensor((2, 3))\n",
+    "e.is_empty()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "6L"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "gb.size()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "24L"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "gb.memsize()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "False"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# note we can only support matrix multiplication for tranposed tensors; \n",
+    "# other operations on transposed tensor would result in errors\n",
+    "c.is_transpose()  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "et=e.T()\n",
+    "et.is_transpose()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(3L, 2L)"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "et.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "2L"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "et.ndim()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Member functions (in-place)\n",
+    "\n",
+    "These functions would change the content of the tensor"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 1.44042695,  0.98662621,  1.10306036],\n",
+       "       [ 1.18920302,  1.12357867,  1.10779202]], dtype=float32)"
+      ]
+     },
+     "execution_count": 24,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a += b\n",
+    "tensor.to_numpy(a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 1.20000005,  1.20000005,  1.20000005],\n",
+       "       [ 1.20000005,  1.20000005,  1.20000005]], dtype=float32)"
+      ]
+     },
+     "execution_count": 25,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a -= b\n",
+    "tensor.to_numpy(a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 2.4000001,  2.4000001,  2.4000001],\n",
+       "       [ 2.4000001,  2.4000001,  2.4000001]], dtype=float32)"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a *= 2\n",
+    "tensor.to_numpy(a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.80000007,  0.80000007,  0.80000007],\n",
+       "       [ 0.80000007,  0.80000007,  0.80000007]], dtype=float32)"
+      ]
+     },
+     "execution_count": 27,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a /= 3\n",
+    "tensor.to_numpy(a)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 0.62944734, -0.72904599,  0.81158388], dtype=float32)"
+      ]
+     },
+     "execution_count": 28,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "d = tensor.Tensor((3,))\n",
+    "d.uniform(-1,1)\n",
+    "tensor.to_numpy(d)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 1.42944741,  0.07095408,  1.61158395],\n",
+       "       [ 1.42944741,  0.07095408,  1.61158395]], dtype=float32)"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a.add_row(d)\n",
+    "tensor.to_numpy(a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Global functions (out of place)\n",
+    "\n",
+    "These functions would not change the memory of the tensor, instead they return a new tensor\n",
+    "\n",
+    "**Unary functions**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 1., -1.,  1.], dtype=float32)"
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "h = tensor.sign(d)\n",
+    "tensor.to_numpy(h)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 0.62944734, -0.72904599,  0.81158388], dtype=float32)"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.to_numpy(d)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 0.62944734,  0.72904599,  0.81158388], dtype=float32)"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "h = tensor.abs(d)\n",
+    "tensor.to_numpy(h)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 0.62944734,  0.        ,  0.81158388], dtype=float32)"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "h = tensor.relu(d)\n",
+    "tensor.to_numpy(h)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(3L,)"
+      ]
+     },
+     "execution_count": 34,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "g = tensor.sum(a, 0)\n",
+    "g.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(2L,)"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "g = tensor.sum(a, 1)\n",
+    "g.shape"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 1.,  0.], dtype=float32)"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.bernoulli(0.5, g)\n",
+    "tensor.to_numpy(g)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([-0.12226005, -0.05827543], dtype=float32)"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "g.gaussian(0, 0.2)\n",
+    "tensor.gaussian(0, 0.2, g)\n",
+    "tensor.to_numpy(g)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Binary functions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 1.66987431, -0.14241977,  1.51464427],\n",
+       "       [ 1.41865039, -0.0054673 ,  1.51937592]], dtype=float32)"
+      ]
+     },
+     "execution_count": 38,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "f = a + b\n",
+    "tensor.to_numpy(f)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.,  0.,  0.],\n",
+       "       [ 0.,  0.,  0.]], dtype=float32)"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "g = a < b\n",
+    "tensor.to_numpy(g)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 7.66987419,  5.85758018,  7.51464415],\n",
+       "       [ 9.41865063,  7.99453259,  9.5193758 ]], dtype=float32)"
+      ]
+     },
+     "execution_count": 40,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.add_column(2, c, 1, f)   # f = 2 *c + 1* f\n",
+    "tensor.to_numpy(f)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### BLAS\n",
+    "\n",
+    "BLAS function may change the memory of input tensor"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.24042693, -0.21337385, -0.0969397 ],\n",
+       "       [-0.010797  , -0.07642138, -0.09220808]], dtype=float32)"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.axpy(2, a, f)  # f = 2a + f\n",
+    "tensor.to_numpy(b)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.17231143, -0.16945721],\n",
+       "       [ 0.17231143, -0.16945721]], dtype=float32)"
+      ]
+     },
+     "execution_count": 42,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "f = tensor.mult(a, b.T())\n",
+    "tensor.to_numpy(f)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[ 0.51693428, -0.50837165],\n",
+       "       [ 0.51693428, -0.50837165]], dtype=float32)"
+      ]
+     },
+     "execution_count": 43,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tensor.mult(a, b.T(), f, 2, 1)  # f = 2a*b.T() + 1f\n",
+    "tensor.to_numpy(f)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "collapsed": true
+   },
+   "source": [
+    "## Next: [SINGA model classes](./model.ipynb)"
+   ]
+  }
+ ],
+ "metadata": {
+  "anaconda-cloud": {},
+  "kernelspec": {
+   "display_name": "Python [conda env:pysinga]",
+   "language": "python",
+   "name": "conda-env-pysinga-py"
+  },
+  "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.12"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}


[3/8] incubator-singa git commit: SINGA-305 - Add jupyter notebooks for SINGA V1 tutorial

Posted by ka...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/5144bcf1/doc/en/docs/notebook/rbm.ipynb
----------------------------------------------------------------------
diff --git a/doc/en/docs/notebook/rbm.ipynb b/doc/en/docs/notebook/rbm.ipynb
index c365eb1..c9aadf5 100755
--- a/doc/en/docs/notebook/rbm.ipynb
+++ b/doc/en/docs/notebook/rbm.ipynb
@@ -18,7 +18,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 6,
    "metadata": {
     "collapsed": false
    },
@@ -30,8 +30,8 @@
     "import argparse\n",
     "import cPickle\n",
     "import utils\n",
-    "import Image\n",
     "import urllib\n",
+    "from PIL import Image\n",
     "\n",
     "import matplotlib.pyplot as plt\n",
     "%matplotlib inline\n",
@@ -59,7 +59,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 7,
    "metadata": {
     "collapsed": true
    },
@@ -68,8 +68,7 @@
     "from singa import initializer\n",
     "from singa import optimizer\n",
     "from singa import device\n",
-    "from singa import tensor\n",
-    "from singa.proto import core_pb2"
+    "from singa import tensor\n"
    ]
   },
   {
@@ -86,7 +85,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 8,
    "metadata": {
     "collapsed": false
    },
@@ -141,7 +140,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 9,
    "metadata": {
     "collapsed": false
    },
@@ -150,23 +149,23 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Epoch 0, Reconstruction error per image = 17.937706\n",
-      "Epoch 1, Reconstruction error per image = 10.943875\n",
-      "Epoch 2, Reconstruction error per image = 9.583109\n",
-      "Epoch 3, Reconstruction error per image = 8.912214\n",
-      "Epoch 4, Reconstruction error per image = 8.491555\n",
-      "Epoch 5, Reconstruction error per image = 8.196870\n",
-      "Epoch 6, Reconstruction error per image = 7.985176\n",
-      "Epoch 7, Reconstruction error per image = 7.813920\n",
-      "Epoch 8, Reconstruction error per image = 7.697145\n",
-      "Epoch 9, Reconstruction error per image = 7.588426\n"
+      "Epoch 0, Reconstruction error per image = 17.989441\n",
+      "Epoch 1, Reconstruction error per image = 10.955967\n",
+      "Epoch 2, Reconstruction error per image = 9.593508\n",
+      "Epoch 3, Reconstruction error per image = 8.900522\n",
+      "Epoch 4, Reconstruction error per image = 8.485637\n",
+      "Epoch 5, Reconstruction error per image = 8.187351\n",
+      "Epoch 6, Reconstruction error per image = 7.981121\n",
+      "Epoch 7, Reconstruction error per image = 7.825888\n",
+      "Epoch 8, Reconstruction error per image = 7.707948\n",
+      "Epoch 9, Reconstruction error per image = 7.589963\n"
      ]
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAFkCAYAAAAJ0nGTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzsvWmMnelZ/vk7+77vdeqcOrWvdtkuu9pbu92x0+kkpEmz\nBMiASAICpAFGIwRCQmICHxACDYI/aARDBJHIZENJJzTpDr2729122y6XXfviqjpV51Sdfd/3+dB5\nHyWIfxSkYbqD6v7kperUW+/7PPdz39d9Xdcr6/V6HMdxHMdxHMcHN+Tv9wUcx3Ecx3Ecxw+P40R9\nHMdxHMfxAY/jRH0cx3Ecx/EBj+NEfRzHcRzH8QGP40R9HMdxHMfxAY/jRH0cx3Ecx/EBj+NEfRzH\ncRzH8QGP40R9HMdxHMfxAY/jRH0cx3Ecx/EBj+NEfRzHcRzH8QGP9zVRy2Sy/1Umk+3JZLKaTCa7\nLZPJzr2f13Mcx3Ecx/FBjPctUctksp8D/k/g/wBOAw+Bf5PJZM7365qO4ziO4zg+iCF7v0yZZDLZ\nbeDdXq/3v33v7zIgAvyPXq/3Z+/LRR3HcRzHcXwA432pqGUymQqYA16V/q333onxCnDh/bim4ziO\n4ziOD2oo36ef6wQUQOLf/XsCGP/3XyyTyRzAR4AwUP+vvrjjOI7jOI7/H0ILhIB/6/V6mR/2he9X\nov7PxkeA/+f9vojjOI7jOI7/gvhfgC//sC94vxJ1GugAnn/37x4g/h98fRhAr9czNjZGoVBAJpOh\nUCiYnp7m5MmT9Ho9VCoVFouFcDhMu92m0+kgk8no7+/H5XJxdHRENBql2+1SrVbp9XqMjo4yPDxM\ntVqlWCyi0WjEZ5jNZv70T/+U2dlZTp06hcVi4ejoiFqtRigUwu12o1QqcbvdFItFHA4H0WiUWCyG\n0+lkd3eXfD6P1Wql3W5Tr9fRarXYbDYsFgsKhYIvf
 vGLXL58GaPRyOjoKLVajVu3btHf388LL7zA\n6Ogoc3Nz5PN5tFotKpWKO3fu4HQ68Xg8LCwsiOvpdrtotVpcLhelUolms0kgEEAmk5FIJJiamqJc\nLvPuu+/idDoZHx9HoVCwt7dHoVAgFAqxt7dHMpkkGo2i1Wr52Mc+RiwWQ6FQYLfbSaVS7OzskMlk\n+I3f+A0UCgXhcJhWq4XRaOTw8BClUsmNGzf4+Mc/jtfrZXl5mUwmw9mzZ3n33XeZnZ0lGo1y6tQp\n6vU67XabZDJJr9djYGCA559/no2NDX7hF36BVquF3W7n8PAQuVxOr9cTv2M+nyebzZLNZslkMgQC\nAYaGhqhUKsTjcd58801+93d/l5WVFVqtFgMDAyQSCfL5PAB9fX14PB5WVlZ49OgRo6OjdLtdvv71\nr/PJT36S+fl5bt68ycTEBPV6nWKxyOuvv86pU6fEvQ0Gg/T396NUKtnb2yMcDtPtdpHJZHg8HjQa\nDZFIBIfDwdjYGMVikWg0itVqRSaTsbu7i8vlYm1tjZGREb761a/y6U9/GpPJRCqVot1uEwgE0Ov1\nbG5uotfrmZqaYnt7G7VaTSwWw+/3k8vl0Ov1lMtl2u02JpOJVqsFgEql4uDgAJPJRC6XY2xsjHA4\nTLFYJBgMcvPmTX7mZ36Gb3/721QqFUZGRhgdHUWpVHL//n0ef/xx6vW6uAdut5tut4vRaGRhYYF6\nvc7Q0BDJZJJ0Os3p06fxeDxkMhmMRiOnT5/m9ddfZ2pqiuXlZba3txkbG6PVatHf30+73ea73/0u\nRqOR3/7t36ZcLqPVakmlUgwODvK3f/u3TE5O4nA4CAQC5HI51tbWUCgUeDweKpUKhUIBr9eLUqnk\n3r17XLx4kS984QsEAgGeeeYZ3nnnHTQaDaOjo9jtdhQKBSqVilqtxvPPP8/S0hJ/8id/wsrKCsVi\nkYGBAQ4PDxkZGUGv17O7u4tc
 Lqder5PP5xkdHUWv17O9vU2z2cRisbC7u4vT6WRqaoput0uhUCCX\nywFwdHTE0tIS9XoduVyOVqulVCpxeHgo8tsPi/clUfd6vZZMJlsArgH/AmKYeA34H//Bt9ThvY31\n67/+61SrVaxWK8vLy6jVaubm5vB4PJTLZTKZDKVSCYPBQDQaZWJigoWFBQYHB9FoNHg8750NMpmM\nUCjE0NAQ5XKZTqfD1NQUarWafD7P4OAgFy5c4G/+5m+YnJzk3Llz7O7ucvbsWU6fPk06nSaRSDA8\nPEytVmN8fBytVkuv1yMQCGCxWBgbGyMWi5HL5ahWq9TrdWw2G5OTk3i9XlqtFl/72tdwu92cPn2a\nbDbL5OQkAEajkTfffJNarUalUsHr9WKxWFhcXKTRaBAKhQiFQszNzbG5uUk2m0Wv16PT6Xjw4AFm\ns5mJiQlarRbVahWv18vh4SFqtRqz2YxKpWJubo7XXnsNu92Oz+djfHyc6elpHj16xHe/+12azSYm\nkwmlUonf78dmsxGNRpHJZFy8eJFAIIBCocBms5FKpTg6OsLpdCKTycQz8nq9GAwGTp8+jdFoRK1W\n0+l0OHHiBM1mk1qtxuDgIIFAgEajQX9/P9lslu3tbdxuN8FgEJlMRiAQoFQqUSqVCAaDlEolzGYz\nTqeTZrOJVqslkUjQ6/W4du0a77zzDk6nk1QqxZUrV1Cr1WxvbzM9PU2326Ver6NWq6lWq1gsFk6e\nPMns7CyPHj0C4Od//udxuVwEAgEcDgeHh4c0Gg3u3r3L+Pg4druddrtNtVrF5/OhUqlYWlri537u\n5/jKV75Cf38/8/PzlMtlbDYbZrMZr9eL2+3GYrFgMplwu92MjIzQbDaZnJyk1Wqh1WrRaDTMzs6S\nzWZ59OgR6XQau93O2bNn8Xq9VKtV8vk8s7Oz7O/vo1KpMJlM1OvvoYIXL16kWCyyvb2Ny+XCbrcT\nDAZRqVT
 o9XoWFxf5+Mc/TrfbZXNzE4VCwfz8PPfu3RP7SfoZdrsdtVpNo9FAqVRit9s5ceIE8Xic\nYrHI+fPncblcuFwuDg8P6XQ6DA0NkUgkCAaDrK+v43A4kMlkFAoF7t+/z1NPPYXFYsHhcBCLxfD5\nfDz55JNsb2/j8XgIh8OEQiECgQB2u53x8XEuX77M1tYWZrOZcrnMiRMnmJ6eZnd3l9XVVa5du4Ze\nr0etVmM0GpmamkImkzEzM8PFixdRq9U4HA70ej2tVguv10utVmNlZYWLFy+ysLBAOp3m4sWLLC0t\n4ff72djYwGq14vF46PV66HQ6Op0OiUSCoaEhnE4nvV6P4eFhKpUKn/zkJ/mHf/gHzp07RywWo16v\nUyqVaLfbzM7O8tGPfpRyuYxcLmdiYoJoNMpnP/tZkd9+WLyf0MdfAF/8XsK+A/zvgB744v/sG2q1\nGkdHR5w6dQqj0UixWMRqtaJUKkmn0wDk83nOnz+PXC7H7XYTi8WYmJig2WzS6XTo6+sjm82iUCgY\nGBhgb2+Pu3fv8ulPfxqZTMbdu3epVCp0u13MZjPNZhOr1SoelMvlQqFQ0G63kcvlFItFDAaDqJYB\nDAYD+/v7qNVq7HY7er2eTqdDJBJBo9HgcrloNpuUSiV6vR5KpZLXXnuND33oQ6hUKlHVmEwmer0e\nzWZTfJ9Wq6XdbpNKpWi1WhwdHXHlyhUmJyeJx+Ps7OwQCASo1WqYTCbUajWpVIrh4WEePHhAu93G\nbrfTbDb54he/iM/no9Vq4fP56HQ6ZLNZdDodNpuNRCJBu92mUqkQi8WIx+MMDw9jt9vFZ9RqNeLx\nOFqtlr6+Pur1OiqVCo1GQzgcplAoMDU1hUKh4N69e1QqFW7fvs38/DwGg4Fut0upVKLb7RIOh9nc\n3KRcLvPeuf1eJXL58mVefvller0enU6Ho6MjCoUCPp+PyclJotEorVaLT37ykywuLnJ0
 dITD4cBo\nNKLRaOj1eqLL8vv9FAoF0uk0kUiEfD7PwMAAALlcjr6+PgD8fj9bW1viPgYCAXQ6HQaDgYGBAcxm\ns/g/rVbL1tYWFosFs9nM5cuX2d/fJ5lMYrFY6HQ6tFotKpWK6Bx0Oh3xeByj0ciNGzcYGxsjk8nQ\nbrdRKpW0Wi1qtRoqlQqFQoHJZEIul7O2tibWzNbWFgaDgcnJSQ4ODuh0OrTbbXQ6negOpW5Fo9Gg\n1WqpVqvo9Xrq9TrNZpNCoYBcLqfdbtNutxkeHubq1avEYjF2d3c5ceIEvV6P9fV1ms0mTzzxBHq9\nHrfbzcsvv8wzzzxDu90WBZJcLsdsNlMqlUgkElSrVeRyOdPT0xgMBi5dukSr1WJoaAiXy0WhUECp\nVKJSqSiVSmxsbPDgwQNarRanTp0im81yeHiI0+mkr68PuVyOyWQSXfXExARKpZJIJILRaMRqtfLY\nY4/x5ptvotfr+emf/mnMZrPomnd2dohGo8zOznLy5EkcDgcrKysAtNtt7t27x6uvvsonPvEJ/H4/\nRqORcDhMp9NhcnJS7Ptut8vKygqTk5OYzWb29/cpl8sMDw+zvb3N2toaNpuN6elpqtUqq6urGAwG\nJiYmqNVqyGQy2u32j5ws37dE3ev1vv49zvQf8x7k8QD4SK/XS/3PvkcmkzE9PU08HkcmkzEwMIDD\n4WB9fZ1EIsH09DROp1MsGr/fT71ep9friRuTTqep1WoolUpisZj488rKCkqlEqvVytLSEkqlkpmZ\nGQDC4TATExN4PB7xfZlMhlwuRyaT4fHHH0cul3P37l3RgptMJjKZjGjXnU4nxWKRSqXC/v4+e3t7\nGAwGWq0WY2Nj+P1+qtUq8Xic/v5+bDabWJRut5tms0kkEsFisXDq1CkikQitVgu9Xk8ymcRms5HJ\nvDePMJlMorXudruo1WqxWTUaDUajkWQyyYsvvshP//RPo1QqKZf
 LNBoNUqkUZrMZjUYDgNlsxmQy\nkc1m0Wq1pNNpwuEwV69exWKxcOvWLfL5vIBeKpUKqVSKarWK2Wym0+kwMzPD2toaOzs7dLtdzp8/\nj91uF8l4fX2dZDKJUqmkr68PhUKBQqHAarViNBpJJBKkUilOnjzJiy++yMDAAI1Gg2g0KpLOwcEB\ncvl7JKbNzU0mJiaoVquMj4+zsrJCtVpFqVTSaDREhVSpVJDJZBgMBhqNBsVikVqtBsD+/j7RaJRA\nIMDm5qaoeDudDnq9HoPBQCAQEDAagMViYWdnh8HBQXH4jo2N4fP5KBaLRCIR1Go1/f395PN58vk8\nJ0+eFNXZ7u6uOBgrlQrtdhuZTEaz2SSfz6PX6/H5fNL+wWaziXWhVCoZGhoiGo2ytrZGNpvFarVi\nMpmIRCLodDpqtRr7+/tMTU3x7rvvMjY2hsvlot1uk8vlaLVa5PN5AblIhUe73aa/v5/Dw0Pi8Tgu\nlwur1YrNZiOdTmOz2eh2u7RaLVqtFqurq1SrVSqVClarlU6nw6uvviq6mVarJRJ0Op1mdXWVg4OD\nH/iMZrNJNptlYmKCixcv8uKLL/Lss89ydHSETqcDIB6PYzAYsFgsaDQastksS0tLyOVyHA4HCoWC\niYkJ/vVf/5V6vc7Y2JjoElUqFSsrK/R6PcbGxlAoFBgMBvb29rhy5Qqjo6PE43HK5TIWiwWlUkmx\nWKRUKqFUKkWREYvFSCaTooi8cuUK8XicyclJstks+XyeWq2GXq/HYrGQz+dptVqoVKr/VL58X5WJ\nvV7v/+r1eqFer6fr9XoXer3evR/29dJDz+fz6HQ6gfu6XC4BaSgUClZXV9ne3sZgMDA8PEypVCKT\nyaDRaLhz5w6ZTAaZTMbe3h6VSoVgMAggktO1a9fI5XIEAgFUKhX9/f2i6kulUuzv79NsNpHJZLRa\nLUqlEpVKha2tLVKplEhcDx48YH19XWxmm8
 1GKBQin8+Ty+UIBoMolUo8Hg9Op5NIJIJMJqNYLHLn\nzh0SiQR6vR6r1UqhUGB7e1s85FqtJhZ7IpEQFYRer6fb7QoIotvtirZYpVKRTqcJBoMsLS1x4cIF\nhoeHGRoaQqvVEo/HaTQaJBIJotGoSGYSfONyuYhGo8jlctLpNHt7exwdHWG1WikWiySTSSKRiOgm\ngsEg3W6Xu3fvUi6Xeeyxx1Cr1RgMBvR6PQqFgmKxiMfjYXR0lJGREU6dOoVarabX69HtdnG5XLz+\n+utsbm6yubmJTCYjFovhcrnw+/2Uy2Xq9bpIEJ1OB7/fj0Kh4PDwUGyWTqfD4eEhS0tLHB0dUa/X\ncTqdom2VyWSMjIxQKBQAWFxcFDh0uVzm/v37hMNhFAoFRqOR7e1tXnrpJRYWFsjlcqKiunXrlqjU\ne70eBwcHIgmFQiGCwSCNRkNUv9J9AggGg6jVapxOp1gz0oaW4DmLxYLFYqFSqRAKhSgUCkQiEdLp\nNJVKhd3dXXEgajQa9Ho9gUAAp9PJ9PS0wE8lCEC6z1Ixk8lkiMVilMtlAe+dOHGCixcv4na7iUaj\nVCoVMpkMZ86cweVyodFoaLVayOVyAScplUoBDezt7bG9vU0qlcJut6NSqbhx4wZra2uoVCqB53Y6\nHQwGA1euXBFFUqvVQq1Wo9frOTg4oN1uiwKlWCxy//59Hj16JOAMhUJBt9vF4XBQq9VoNBpivUmH\n3czMDC6Xi2QyKdaCTCZDrVZTr9c5efIkcrmcZrNJvV6nVquJw6VSqdBsNkWClvKK0+nEYrFQKpUE\nxBqNRtnY2CCRSIj7mcvl6O/vx+12Y7PZfuRc+WPl9fHUU0+Ry+Ww2Wyi4lSr1YyOjooKamdnB7PZ\nTDqdRq1W02q1kMlklEolAXmEQiF6vR7ZbJZKpSIwX7vdjtFoxGg00m63yWazoiJsNBpUq1VqtZqo\nvAwGA2azmTfffJOVl
 RWazaaoKiVs0mazodPpiEQiNBoNbDYbSqUSr9cr8FSASCSCyWRicnJSDG6k\nwVm5XCafzyOTycjlchSLRQYHB3G5XJjNZpHwhoaGaLVaohLt9XpkMhkSiQQajYZSqUQqlaJWq1Eq\nlejv7xe4dLPZRKFQiMOq2+3S7XZRKBTodDoKhQLhcFhgrCsrKzQaDXw+H36/H7fbzeDgIH19fajV\nagYHB8lmswwMDPDCCy+QSCTw+/00Gg1isRj5fJ5qtYparWZkZIQTJ05gNptpNBoCC6zVaqJ993g8\n7O/v4/P5BPbndrux2+0YDAZOnDjB5OQkpVIJnU5HOp1GpVKRTCbx+/0kEgni8TixWIxCocDh4aHY\npKVSSeCXfr8feK9iVSgU7O7u0ul0AFAqlZw/f55ms4lcLqdcLlOr1TAajRgMBgHFFQoFlpaWxP2Q\noKvR0VH6+vrEmuv1ehweHtJsNkmn0wwODqLVatFqtRgMBkwmk9j00nxAgvjq9TqpVAqlUikq7ng8\nLobXIyMjWCwWVCoVbrcbhUIhkkWj0WB2dpZ0Ok0ymWR2dlY8c2lta7Va0WV4PB6SySQej4dCoYDR\naGR5eRmz2YxMJhP7SqpUFQoFWq2WQCAghuef+tSnqNVqWCwWpqam8Hq9qNVqcVgZDAYKhQLZbBaf\nz0elUqHX67G7uwvA9PQ0iURCdMYGg0Ec6J1OR8AT0tzJZrPx5JNPUi6XCQaDDA0NUavVxMwkm83i\ncrlwu91EIhF6vR6tVgudTie6IWlekM1mSSaTqFQqdDodrVYLs9lMKBTC7/czMjKCVqvFZDKxtrZG\nJpMhmUxSLpdFZ5BOp5HL5fh8PtEhS8/yR4kfq0QdDAbFcGdjY4NcLkej0WB/f19M8yORCB6PR7RD\nmUxGJMV0Os2lS5eYn5/HbDaj0+nEpHxvb494PI5KpeK5555jampKMCo2NjbElFtqP6XhntvtJpfL\n
 kU6n8fv96HQ6YrEY6XSap59+mtOnTwsYotlsUi6XMRqNmM1mvvrVrzIxMSEShbTQBwcHGR0dxWg0\nolQqKZVKdDodvF4vJpMJj8fDxMQEwWAQl8sFwJUrV0QlodfrqVQq5PN5wXSRKkubzcatW7eYmJgQ\n1b9CoUCtVtPX1yeYI263G51ORyAQ4OTJkwwPDwtYp1QqUa1W6evrE1VVMBjEYrEwODgoYByJ3WAy\nmcjn89y/f59SqYTdbqdarZJKpWg2m+zu7hIOh4lGoywtLaHX65HL5SJRjoyMcO7cOR577DHMZrPA\nTff390UlKSWKWq3GwcEBqVSK0dFRDAYDRqMRmUwmoCRp6CqXy6lUKuh0Onw+H1tbW6jVagBCoZCo\nsBqNBna7HZ1Ox/DwMLFYjL6+Pq5duyaw5vn5eYLBINevX0etVotK02Aw4Ha7abVa7O/vk81m6fV6\nGAwGvF4vuVxOHMTSgZBMJkX1LB2eKpWKWCwmusOjoyPi8TiBQACPx0OpVCIcDhMMBhkYGBD4vJQ4\nc7kcS0tLvPrqq2i1WjHo7Xa79PX1USgUaLfbooJXq9WEQiGsViv7+/s8evSI4eFhNBoN1WqVw8ND\nVCqVgK+0Wi1yuZxGoyEgG5VKJYqNn/3ZnxVdm1TVOhwOMbSU2D/5fJ6DgwNWV1fJ5XIYDAZGRkZE\n4t7e3iYajZLL5TCbzQwMDOD1egW8JM12Wq0Wzz77LNFolEgkQjabpd1uC6ZFKpVCJpPhdDpxu90A\nYm4l7WGLxYJOp0OtVosirFgskkgkcDgcTE9PMzIyQrfbxePxkE6nRTfRbre5ePEiAwMDyOVyAoEA\nZ86cwe/3UywW2dnZYW1t7UfOfT8uPGoAUqkUFy5cIJvNEo/HxYlUqVQoFosole/9OoVCgbm5OYF1\neb1erFYr+Xwen8+HxWJheHgYg8HwA+395OQkm5ub4jR+++236Xa7gt3hdrvJZ
 rPY7Xb6+/tF1Ts/\nP49KpcJut1MoFHjw4IGgMrXbbYLBILOzsyQSCYrFIjqdTrTmjUaDdDotIA8JFpFaLkAcKNLgSmqr\nW60W7XabbrfL2NgYN2/eJBQKCXio1WoRDAYxmUzEYjFsNhtqtZp4PI7VamVoaIhisUiv18Pj8ZDP\n50VVqNVqRRV2dHQkqga1Wi02Z7FYxG63k8lkxDPR6XTY7XbOnTuHRqNhcXGRkZER+vr6qFardDod\nFAoFMplMdAilUgmVSkW1WkWj0ZDL5Wi326JllDoFnU5Ht9vF6/XSbDYF9vz9v5P0/0dHRzQaDfR6\nPUtLS4yMjAjWQqlUolarYbfbBT4fjUYpFAoCb5bW0vj4uMDA7XY7DoeDbrcrOhVpHiLRPG02m6hS\nS6USa2trAteu1+uiYuvr66PVamEwGAT1S0p85XKZg4MDMQjt9XpiIFar1cjlcmxubnL58mVisRjz\n8/Ps7OwQi8WYm5sTg2rpnvl8PtH9nTlzRiTuYDBIrVYTh3ij0RBVpslkEjCPUqlkfHwck8mExWIR\nz12tVqPVaul2u+RyOXK5HAqFAr/fj9frpVwus7a2RqlUIhAIcOLECdbX1zk8PBSD25MnT6JWq9nZ\n2RGMDYVCgdlsFtRMCVeuVqscHBzgcrkwGo0MDAyg1+upVqsEAgGOjo5wuVzUajXC4bDouJvNJo1G\ng1KpRCwWw+12i8FgOp3G5XKhVqsZHh4mnU7z6NEjzp07R7vdxuFwiAQvwX3VapWHDx+iUqk4f/48\nh4eHuN1uqtUqDocDq9VKNBplYGBAQGxGo1F0HtLh/5/BqX+sKmqj0Ui5XCaXyzE0NMTAwACBQIDR\n0VFsNhsqlQqr1SpOzVdeeYVMJkM8HmdiYgKLxSJwq0KhIChH0jTW6/Vis9mYm5tDo9EwPDyMWq3m\nYx/7GJcuXaLX62G1WqnX62xvbyOXy8XwIxgMks1muXjx
 ItevXycajfLw4UOSyaTApwF2dnYEm+DJ\nJ58UVceNGzcwmUzYbDaOjo5Ewmi1WnS7XYHlpVIpotEonU4Ht9vN/Pw8fr+f/f194vE4yWQSu92O\n2+3G4XAwNDSEx+MR2Ge73ebatWsCP7RYLMRiMRYXF1ldXcVqtTI+Po7VahUsBQkPlyqfUCjE9PQ0\nJpNJLN5kMikoWIVCgYGBAXw+H3K5HLvdzsjICLOzs3Q6HQqFgmgdz549y9TUFPBeFef3+wW1KRKJ\nMD8/Lyhh+/v7RCIRtra2xODUbDbjcrnQ6XTkcjkePXqEyWQS03npYFEoFAwPDwscWOL8Wq1WNBoN\nGxsb+P1+HA6HuBatVsvDhw/FAZdIJKhUKjidThQKheCCnzlzhmq1SjgcplwuUygUiMfjOJ1OTCaT\nqMakab/X6+Xg4IDbt28LHvjQ0JCg0CWTSZH4isUiWq2W/v5+QQn0eDw88cQTTE1NiSJlamqKyclJ\nrFarSPiVSoXDw0OKxaJIsNPT0ywsLJBIJHjnnXcIhULMzs7SbrfFQKxYLAr8t9FoiO5TopleuHBB\n4PSvv/66GARL9D8pAfV6PcHg2dzcJJVKEQ6HBXe6VCqJLrXVaqFUKgVzQzog7t69i8vlwuFwsLe3\nRzqdFtRM6XlJbJyhoSEikQi5XI6pqSmsViuDg4OUy2VxSPf19eH3+wXnXuq2JbaKx+MRRZu0Djwe\nD3a7nUQiISCMdDpNuVxma2uLYrHIV7/6VSYnJzGZTCSTSeLxOC+99BIHBwc4HA4SiQSLi4uUy2Vx\nUDmdP7r/3I9VRS3Rz5aWlvjJn/xJzGYze3t72Gw2Lly4QCqVolAokEqluHPnDlarlTNnzqDX64nF\nYszMzCCTyUTLLG0gm80mKi+LxcLLL7/M448/zuHhIa1Wi3Q6TSwWIxwO43Q66XQ6JJNJgQd7vV4x\ngKlUKphMJsbHx3n77bep1WpiKGU
 wGBgdHRWVaiaTodPpEAgEcLvddDodtFotU1NTghMsiWekZH3h\nwgXC4bDA9ba2tlCpVCwvL6NQKJDL5bz66quiPS8UCiSTSbRaLZOTk/T19eFwOPB4PHzpS19ifn6e\narWKVqvl7t27DA4O0mq12NnZwePx8KEPfUiIcAqFAn/3d3/H008/TSgUIpFIYLfbuXz5MvF4nP39\nfTqdDkqlEqVSKXDuer2OQqHgxRdfFBv17Nmz7O/vE4vFkMvl5HI5AUVI9Lrr16/z53/+55w/fx6n\n00kikWBzc1MMP5VKJfV6XSSkXq/H7OwsL730kkgu6XSaiYkJbty4QSAQwOv1sre3h9vtZmZmRlyf\n2+3G7/coOE3mAAAgAElEQVQzNjYGvDdYvnDhAq+++iqrq6vYbDZxEEgCoAsXLqDT6fj2t78t1tm9\ne/eYnp4mHA6TyWTQ6XQC/lIqlWKekMvlOH36NIVCQTwniQ4pHaiSMKfdbrO+vs7y8jKhUAiLxfID\nVDGpejs6OiKfz4shtM/nI5PJUKlUKJVK3Lt3j/HxcfL5PCMjI8TjcZrNJtFoFHgvKUmU0JWVFRKJ\nBM8++yyNRgOj0YjL5eKXfumXuH37NslkkomJCU6fPk1/fz8mk4l33nmHTCbD6OioKGBCoZD4e7Va\nJZfL8a1vfQuLxcJrr73G5OSkwNDtdjujo6Ni4C1Bl/V6XRyYEnwF79Epw+GwWOvSXEaqwPP5PHK5\nnKWlJS5evEin0xFzg3w+T7PZpFqtcv/+farVKjdv3hTdq0KhIJFIYLVa2d3dFXx5s9ksBoTT09OC\nIRUMBkWemZ2dFTOFYDDIyMiIoOlJB5Lf7xe0wB8lFJ///Of/v82m/wXxR3/0Rz7g12dnZxkaGsJi\nsdBsNun1ejQaDbRareC1SlxnSbH1iU98grfffpujoyNarRa7u7vY7XYx7ZcoPkajkUKhwOjoKIOD\ngxSLRVZXV1
 lZWeHatWuC7dHr9QQOmEwm2djYwGg08vrrr2Mymdjb20Ov12M2m8nlcgwMDDA5OUki\nkWBnZ4dCoYBOpyMUChGLxRgYGGBqaopbt24J/rIkIHjnnXfEMLLRaBAIBMTgSuLQ3rx5k7GxMcHY\nCAaDhMNhDAaDwA0lFVU0GhWn+Pb2NkajEZPJJNoyacDlcDjIZDLcvXtXTOS/853v8NnPfpbR0VH+\n/M//nA9/+MNicCuJR5xOJ+VyGXiv+7l9+zZut5uzZ8+iUCj4vd/7Pf74j/9YCGRefvllTp06hdPp\nZGtri3A4jMVi4dKlS7z88stCtJPNZllYWMBut3Px4kWhgqvX6/j9fiEmOXHiBJubm1y4cIFut8vE\nxAR2u52NjQ2B4R4cHKDX65mcnKRYLPLGG29Qq9VE6/zqq6+yubmJ3W5nenpaYLGtVovJyUmGh4cZ\nHx8Xv1MgEGBgYIDl5WX6+/tZWlrC4/EwODiI0+nkscceAxD3tl6vY7VaRZdgNptZX18Xw+Fvfetb\nGAwGHA4HExMT9PX1CVbB+Pg4wWBQdFPxeJzFxUWh3HS5XDz//PM4HA4KhQJ7e3uCotrpdLhy5Qp3\n7tzB5/OxubmJyWRCp9OJ7mRnZweXy8UnPvEJvF6v4GyfPn2aSqVCOp3mrbfe4t133+W3fuu3GB8f\nFxDW/v4+1WqV4eFh+vv7SafTfP3rX6dYLPKTP/mTPHjwgL29PUwmEx/96Ed5+umn0ev1DA0Ncf78\necGscTgczMzMoFAoiEQiXLp0CZvNxle+8hXRWZw8eRJAFAZutxuZTEY6nRbrOBgMksvlGBkZYW5u\njq2tLYLBIKOjo2xubvL222+zurrK3t4eMpmMe/fuodFo+P3f/31qtRpms1ns1Ww2y/T0NCqVilwu\nx+zsLCMjI6RSKfR6PY1GQ9AaPR6PGML7/X5UKpXg+UtEhOvXryOXy8nn87zyyisA//fnP//
 52A/L\ngT9WidrhcDA5OSkqkTt37lCv18lms9y/f1+IOTqdDjqdjnK5zPj4OHfv3kUmk2E0GtHpdExPTwtc\nTBoS3rt3jzt37mAymZiamhIJ/4033sBgMPChD31IDFJ2d3dZXl6m0+ng8/lwOBwolUosFosY8EnM\ngoODA/b398lkMuj1ekZGRgiFQoIytLi4KJSDkUgEn89HNBqlVCrx9ttvE4/HuXjxIpOTk8RiMTY3\nN0VybrfbLC8vMzc3R6FQEBTC69evC850KBSiVquRTqcF3ilxkpvNJktLSxQKBQwGAyqVSmDgi4uL\nPwDpzM3NMTw8zPLyMs8++yxms5kXXnhBXHs+n+f27dscHR2hUqnodDoCY1Wr1WxtbXH27FnB004k\nEvT19eF0Ounv7+exxx4TIptMJsPW1hbnz59HJpMxODgo6Ga1Wk0IP9LptGD3jI6Oign/m2++KarX\nVColKlyJ6y2Xy5HL5SSTSXw+H+fOnePg4IC5uTm+8Y1vkE6n+cM//EPcbjezs7MiibbbbQYHB/H5\nfCwvL5NIJAiFQsjlcsLhMFNTU+TzecxmMzdu3BAH2EsvvUS73ebSpUuUSiUWFhbE/VYoFMzNzXHz\n5k1OnjzJc889J9a3JL/2+XxoNBrcbjdarZbV1VUODw955513UCqVyGQybt26hc/nw+l0CoqcTqfD\n4XDg9XoJhUK89dZbzM3Nce/ePZ555hmy2ayAnVwuF1tbW7RaLYGFr6yscHh4yNbWFv/6r//KU089\nxXe/+12eeuopgdPG43Gx1iVZeiaTYXFxkV6vx+XLl9nZ2eFrX/saSqWSq1ev0u12WV5eFvOVWCwm\n9tNHPvIRut0u0WiU+fl5vvvd7+Lz+ZiZmWFnZ4dqtSrgPJ/Px8DAAA8ePOCv/uqvhEhta2uL/f19\nTp48ya1bt7DZbJTLZTEw7+/vF/AXvEdSWFtb48/+7M+EPkGCRSXqX6
 VSodPp4HQ6Raf26NEjUqkU\nuVyOfD5PX18fw8PDbGxsoFKpxL6QGEfSwR6JROh2u7z99tvcv38f/rsl6s9+9rN86lOfolgssrW1\nJbimEp1rfX0dnU4n/Dzu3Lkjprtnz54lnU6LCXw8Hqfdbgvl2NLSEoeHh3i9Xu7du4fP5yMcDvP2\n22/zmc98BoBsNovX6xUqJ0mJJLWeW1tblMtlTCaTWHiBQIDTp0+jUCgELa3dbgvPh0996lMCjlAo\nFAA8fPiQ8+fPC4WWxWKhr69PVDAjIyPs7u6Sy+VIJpP85V/+JQ6HQ/hZfPOb3xS81bW1NSEAkDiy\nJ06cQKvVUqvVcLvduN1u6vU6Go0GpVLJ2bNnhVDmV3/1V9nZ2aFSqXDx4kX8fj8mk4mXXnqJj3/8\n42QyGYEtlkolcrkcPp+PsbExyuUy3W5XdB2S94NUKTYaDer1Opubm+zs7Ahvlmw2Szgc5vz580IS\nL/F0s9ksKpWK2dlZodL0+XwCQy4UCng8Hr7xjW8wNDREo9Hg29/+NoODgzz++OM4nU7BW65Wq8Jv\nQ/psn8/HnTt3+OVf/mV0Oh3f+ta3SCaTDA4OcuvWLV566SVisRjRaJRisUi5XOYP/uAPBD305MmT\nPHz4kEuXLjEzM4NarRYqzP39fUwmEw6Hg06nQ6fTYXV1ldXVVdrtNhsbG9y8eRO32y02/uLiIjdu\n3KBarXL79m0ePHggkq/NZqPVagm6m7RO1tbWcDgcJJNJ7ty5g9vtZmFhgUAgQD6f53Of+5zAjyV6\nYiKRYHl5WQhpJGrqyZMnqVarzM7OYrVaBVZ97tw53nrrLaanp9na2hKqRaPRSCwWY3h4mJGRERQK\nBclkkt/5nd9hbm6Of/qnf2JqagqPx8Pzzz+PzWajr6+Pu3fvUiqV0Ov1vPzyywJTluCtP/zDP+Tc\nuXOcOXNGHMLdbleoP5966ikGBwep1Wo4HA78f
 r+ATyShitFoFLMBm83GmTNnhG/Miy++yIULF9ja\n2uK1117DYrGwubnJ1NQUPp+Pw8NDwXZKJpNCmATw5JNP8txzz5HNZkXHu7y8LAb4nU4HuVzO+Pg4\n0WiUv//7v2d0dJRms8mbb74J/90S9S//8i/z/PPPs7y8jMvlwmKxCJWUxBgwm83s7Ozg8/l46qmn\nkMvlnDlzBq/XC8DKyopQFanVakGdk3w+CoUC8/Pzwpzp5Zdf5sKFC2K45PP5BLba398vmCWrq6uM\njY0J6XR/fz/hcJgbN24QiUSYnJxkenoam83G4eEhKysroqrZ2Nig0Wjwe7/3e4yOjuLxeAgGg7z2\n2mvE43EGBweRy+XCPCgcDhMOh9nb2+PEiRM888wzzM3NYbFYBKfZ5XLRaDREJ9HpdARz5e2330ap\nVLKxsYHL5SIcDlMqlbDZbMhkMra3t7l58yaRSAS/38/ExASJRAKVSsWXv/xlDAYDZ8+eZXFxkYsX\nLwolnMRxlYY7EsNBakOTySSPPfYYpVKJ27dvi4Pi9OnTzM7Oiufn9/t55ZVXGB0dZWhoiKOjIzQa\nDSdPnhQqSQnT/n6zK4lbq1AouHz5Mrdv36ZSqTA2Nia6rFQqJaT0IyMjeL1ePB6PwDfVajVvvPEG\nwWAQg8GAUqkU7a2U5IeGhvD5fJTLZaFQdDgcpNNp/vqv/5rZ2VnUarVgPrzxxhssLi4KgyW3283q\n6ioATzzxBNFolKtXr7K5ucnCwgLz8/PC58LpdIrk0NfXRzAYJJ/PMzY2xne+8x1+/ud/nu3tbcrl\nMv39/RQKBTY2NigUCthsNoaGhgiFQjidTh49eoRWqxVqxmazKZ5rtVpla2sLmUwmGFGVSgWPx8P1\n69dJp9O88cYb/Mqv/Ar//M//zJkzZwiHw3i9Xs6dO0ej0RCCFJvNhtfr5eHDh3zxi1/k4sWLXL16\nld/8zd/kL/7iL4QXj81m
 E0yTVqvFwcEBJ06cwGg0Mjg4SCgUolwuE4/H+fSnPy32QS6X4/nnnyca\njRIKhTCZTFQqFRYXF0VOyOfzfPnLXxZUTonpMz09jUKhoFAoiGe8vr7Oa6+9ht/vx263YzabiUQi\nXL16ld3dXcHXHh0dFfizJKD6+Mc/zoMHD/joRz+KTqdja2uLUqkk5h4StdHhcBD6npGb1DUrlUpe\nf/11+O+WqPv6+kSlInF0JZqaJHJJJpPC3QtgeXlZ+F9ISr1msylk13q9nng8zsDAAGNjY1QqFR48\neMDg4CADAwM899xzoqVZXl4ml8uhVqux2WwMDg6Kn28ymXA6nayurvLhD3+YaDTK/fv3CYVCXLt2\nTeB4Eo3PYrEQCoXY2NhgYmICmUyGXq/n2WefJRKJYLfbeeutt3C5XDz22GOMjo6Kz9/d3WVwcFC0\nz41GQ7ALOp0OqVSKg4MD3G43Ho+HeDwuHOYkVojkBSHxqaWKVFJ+bW1tkcvlsFqt1Go1IQAJhUJM\nTEzwzW9+k76+PlKpFH6/H6fTKUQ5Er6Xz+eZmZnBbDazvLzM5cuXMZlMbG5uAuB0OsV1rayssLm5\nSbvd5t133yWXy/G5z32Ovb090Q6rVCoODw8Fti55SIyNjQkutiTV1+l0PPHEE3g8HiKRiGCAKBQK\n+vv7sVqt4r5IKteRkRHa7Tbf+c53+MhHPsLjjz8ucFtJDn90dMTdu3dJJBKMjIyg0+kEvdFoNHLh\nwgVBGVteXhYubz6fjzNnzmCz2VhcXBRMkoODAzG/kNzqTpw4QavVoq+vD4vFIrDtBw8ecHR0JDjd\nLpeLcrmMQqEQcxHpmUsSb5PJJIa6xWKRsbExnnzySV5//XXOnTuH3W7nhRdewOPxCLe6K1euCOm2\ny+USqsx4PM7IyAjVapXnnnsOlUpFu91ma2uL4eFhzp8/L+AzSVNw/fp19Ho9a2trYv1Khmp3795l\nZGR
 EcPt7vR6f/OQnsVgsbG9vi8M9Ho8TCoWEEnh3d1dIx+v1OslkUlAis9msoHj6fD5BaZUooNls\nlvX1dWQyGSaTiZ2dHR48eMD+/j6/9mu/JqCfzc1NgsGgGPRGIhFBW9ze3mZnZ4d6vS4cNYPBIJVK\nhe3tbSYnJ8WzUalUQthTKpXY29sjm83S39/P+vo6CwsL8CMk6h8r1odcLkcmk3F0dMTMzAz1ep3l\n5WWSySR6vZ7+/n4CgYCwm1xZWeGJJ57gueeeo91ui4m+lFilhy0ZNUlUn4mJCW7dusXw8DByuZxg\nMIjb7RaVk2ScpFarUSqVRKNRBgcHMZlMDA4O4vF4eOGFFzh37pyQIK+vrws5q9vt5syZMxwcHAj2\nx/r6OmazmdXVVWFgI2FiEqNCEm6MjY0RCoXo6+vj4OCAvb09crkcTz/9tFBgFotFwRaRhjaBQICF\nhQUxANJoNDx48IB4PC4MjqRuQ2I3SKY9UlKRoBVpAi8pwqSNfOLECQYHB4XL2D/+4z8yPT2NxWJh\nbW2NyclJQqEQRqMRm83G6uqqWMwAPp9PCD7a7TYnT57k/v373L17lyeeeIJKpYJcLkej0VCpVNjY\n2EAmkwkssdFokM1maTabBINBcUhL1bR0UNbrdTKZjOBaezwe3nrrLSEhP3nypOCQS7ag0WgUnU4n\nLAUkA7DDw0Nu3bqFTCbj1KlTaLVaisWikPhLjoEbGxuilZfaZKvVSjAYZGVlhevXr2MwGEin04Ie\nJn2WlOh8Ph+XLl0iHo8Lrr3EeV9bWxO0ykwmg1arxev1CntOKWFJh/Dh4SFvvfWWsBzQaDTs7e0J\nle3a2hq7u7sEAgEmJiYYGBggEonw4MEDotEo29vb/OIv/iIWi0Wsbwm6kiwdlEol1WqVo6Mj4D1e\numTPKqlaAfG8JW3Azs4O8/Pz9Ho94vE4brebRCLBw4cP8fv9QkgjebHcunVLEAMk
 yMtmsxGJRBgd\nHRXCMOnVgxIFb2hoiJs3b4prSCaTPHr0iKWlJUF5lPQQarVaUCal+yoREh48eEAwGOSnfuqnyGQy\nKBQK3G632McSLa/ZbDI7O0ulUhHX9KPEj1WiDoVCVCoVVCqV8AaQJr5qtZqxsTHsdjuPHj1ibGxM\neMFKlCRpKtvpdFCpVEKGKxngzMzMCJe4a9euCTl1uVxmf39fyFkHBgbEIEhqDcvlsjBfWlhYEBDE\n3t4enU6HYDAo3OaMRiP5fJ67d++K6XAgEOCVV17h4cOHPPPMM5hMJsrlsuD1ttttNBoNU1NTFAoF\nIeTJZrO43W6Wl5cpFouC6G+xWIQQQaJ+Sf4QlUqFWq3G+vo6ly5dwuv1Cv9u6QCSy+XYbDZRadnt\ndrRarfBBnpycxOfzCZm33W7H5XLh9XqFA965c+e4cuUKMplMiHsODw9F6ynNF9xuN319fdhsNmKx\nmGjF79+/j9/v5+7duwDCWMrhcAi/Bb1ez9mzZwkGg7z77rusr6+zv7/Pxz72MRqNBgAjIyP827/9\nm1Dr5XI54dWi0+nE87fZbOzt7QGIwbNCoeBf/uVfMBqN9Pf3C6tWaYovWQtIHNqHDx/i9XqFy6Lk\nlSw54knCnFOnTgnxTTgcFtxk6Xqnp6fp9XpC9COxKeA9kzAJNpC6IUnJKFV5Pp8Pu91Ot9tldXWV\nRCJBf38/a2trJJNJ5ufnqdVqQvikUCio1WrCw0Kym221WkSjUcGu2tvb4/z58/zET/yEOGx0Oh0H\nBwfcv3+fQCCAXC4nFouJ/VOr1ajVasL4S6vVMj8/L561BDE1m01yuZyoxJVKJYFAQKhzJTGJdFhL\n5mjwXnc2Ojoq5geSXen6+jq7u7uCkup0Onn88cfJZDJUq1VCoRDnzp3jO9/5DhsbGyKBfuYznxF2\nEBJEJ6mfJTfEZDLJ5uYm169f54033iAQCAjGmUajEYWNZEN
 74sQJkskk3W5XmDz9qPFjJXgplUrI\nZDJee+01wVeWeMwSoV9KJIDwUB4bG+Pxxx8Xm9Pn84mhSKvVErzV1dVVYR85MDDAF77wBUFMl4Zu\nEiVQmmxLSqvNzU1KpRKrq6uiTfp+9zvJtEWCKiQOttlsJp/PUyqVBNfZYrEgk8nERpU6iUKhIPwy\nZDKZ4H1LHiUStGM2mxkbG2N6eprz58+LE1yq4KPRqKjqDw8PRfKXJvjtdhuFQkE2mxVmSjMzMwKT\nDwQCVKtVIWKQjH1WV1e5d+8e1WoVu92O1+tlZmZGCIWKxSIHBwfiwMhms+K5hsNhceAeHh4KJ7XR\n0VF+5md+BkB4qEjcYMl/uV6vUy6XcbvdqNVqut0uVqsVv98vmCeSpLterwsfEJfLRb1eJxaLiSm/\nVOFJ2OjIyIiAi3Q6HclkkkajIQ6dSCTCnTt3aLVa+P1+YV8wOjrKhQsX8Hg84kBot9uCYSMxdlKp\nlHj5wpe+9CWy2ayQih8eHpLJZBgYGBBc7Ha7zdHR0Q/MVx577DHxcgzpvknJu1gsCmqgRPuTuqzv\nf6mFTqdDo9EwPj4uVJNmsxmATCbDo0ePWFhYQKVSEQwGxWwgmUzSbDaZmZlhZmaGiYkJhoeHefTo\nkTj4JWqrJOOPRCLiQBsaGhLWChJ7xGazMTMzI7ycc7kcqVSKhw8fYjAYRNLP5XLE43FBdezv7+fq\n1atCYZtOp4W6UcLAo9GoEAGVy2UePXpEpVJBqVTi8/kwGo1YLBaGhoYIh8Osr6+TyWSEx41OpxNF\n0NDQEBcuXMBsNgsmiiQ6M5lMhMNh3nnnHVKpFIlEgkgkIjxNFhcXicf/o3ek/MfxY5WoJSNzybDd\nZrMJUx69Xg+8J7ceGBjAYrHg9XpJJBJ0u12h2a9UKsK0XLI2lKwjFxYWyGQyTE9PC6MmlUpFuVym\nWq0yMTHB5OQkWq2WVqslTG6KxaIwyj
 ebzTx8+FCwQqQWTRqwSER8yQxewh+ltvnUqVPo9XohbNBq\ntTidToFJJxIJjEajMMqX/BCeeOIJcRBIicFms4nE5HA40Gq1vPrqqxgMBmQyGTabjZ2dHWEzOjw8\njN/vF5W/1Wplenqa0dFROp0O8Xic8fFx4aei0WiEylPqOqTBaKvVEklbksxeuXJFyJBlMhnj4+OC\n761UKoXvhZSEpSFZMBjEbDZz7949cT+HhoYEfl6tVn+ATy/ZaUrtNkB/fz/lcplwOEwikSAcDgs2\ni06nQ6VSsbe3h8ViARA2thKrQvK5iEajbG5uCuy0Wq3yxBNPkE6nuXXrlmDYHBwckMlkKBaL6PV6\nwb2XXnRwdHTEw4cPBeVMctSTLA2Ojo64f/++eGuI0+mk1Wpx+vRpQt8zENNoNDz55JPCN0SCdb5f\n0i2t976+PjGonZmZIRKJsLGxgcViodFo4HA4hMmSZAcriUncbjelUknMFKS9Ih2K33tLiVAzlstl\nRkdHabfbPHr0iG63y9WrVwE4ffq0KKRGRkYAODw8FO6O0h5KJBKiazGZTJhMJnw+n2B6fT/VVepW\nJCqcpEY9OjoSZkkOh0PYIktGZpIXztrampgRSf49EjX11q1boviRIDJpoOl0OjEYDIJC2+l0qNfr\nQuoudbaSl0upVBJvounr62NoaOhHzn0/Volaog6dPXtW2BBK6iRJhSR5YkiLT3oryOHhoUgssVhM\nWCpKqi273U6lUmF9fV3g3FevXhVMAplM9gOOdj6fj/7+fnK5HLVajVOnTpHP55mbmxPWojqdTiiX\npDerWK1W4L0qUlJjeTwe4XImdQ2SnaK0+VwulxhcStatkkG75JEgl8sFdfDo6IhMJiMYKnq9HpfL\nJYQTktHUuXPnRDUrvaJISrwSq0IykrLZbJw7d05AANLQSnK6C4VCDA8P02q1hPfH7u6ugF0A0f7d\nuHFDsFEqlYqg2
 imVSoaHh4WpT6FQ4ObNm5w9e1ZM0qWh0PfbukrVpTSLuH//PgsLC4KJk06nKRQK\n4jArlUpi2ON0OsWbdCSV3v7/y92bxsZ5n2e/12ycfePMkENyhvtODkmRIkUtpFZbthXbtRonsZMm\nqZ3uRYt+aA4KNH3RFCha4P3WAgmKNk3qxIkRx67j2LVsWSspLqK478Ph7Btn4SychZwh53yQ7xvS\n+XBeHeBs6gCBA8nmMvM8/+derut3ud18reh0Ouh0Ol6k0vepq6vD0dERWlpaUCqVkMvleP78KBN9\ncHCQGR6UBiMUCvnhYTabUV5ejv7+fr7eiLwmk8mgUCiYtkZaeEr6cTqdmJ6eZqfs/v4+m8GOjo54\nzEcQqmQyyXFyBEgaHR1lJrder2dyHsVV0ZiLjEWkEaagBGJ3y+VyOJ1OjI+PQ6vVwu/3IxwOQ6/X\nM5eDxoMNDQ3w+Xy4fv06XC4XJBIJqqqq0NXVhUQiwddqLpdjtQ8VZRaLBXV1dWhuboZUKsX29jar\nuGZmZpiUVygU0NvbC4VCwdZxso3TslUsFkOtVvP1BjzUVXs8HjYzEeSMHrzZbJaX0qSvj0QinHDT\n1taGZDKJ7u5u1NXVsfY/n8/D7XajoqKC9zZP+nqqDmqylNKbvLW1xYsRurCphdrY2GCXIC1bpFIp\nDg8PGdBCuEmqxogTks/nsby8DIfD8RjYyOFwsFgdAN8URAy7d+8eRCIRRkZGIJVKmUS3t7fHBC9a\nlpRKJWYFa7VahMPhx2zjd+7c4Xm51+vF9vY2z0+JMNbY2Mizt6mpKdaMJxKJxyhoFRUVLC+7fPky\n293j8ThsNhtsNhsqKysZkETvSTKZ5APLaDSivLz8sRuSaGP0cOzt7cWpU6d4adXe3o5YLAa/349M\nJsOLPaKs0e/h9Xq5zSVjh1wuR0tLy2MjnzNnzkAqlfJho9fr0d7ezppw4ohIJBK4XC5EIg8zKK
 iy\npEWgVqtFXV0dTp06hdbWVqadGQwGLC0t8fVWVVUFk8nED/O9vT3U1dWhu7ubpW90OOTzeTQ3N8Nk\nMuHzzz/n6pVIdjs7Ozz/JK0tjWdIAUJIAwI0dXV1MbqVQi7m5ubgdrvh8XhgNBoxMTHBXV06nQYA\nXggXCgV2ugIPfQBLS0uYnJzEwcEBWlpaeM6czWaRzWZhs9k4Fq3+izisYrGItrY2HteNjY2hs7OT\nuwXKZuzo6GAjFj2Y6aG9trYGkUiEaDTKdurJyUnEYjGW2B4dHfF1abFYWDlCi1qClREcjAImiIND\n2Y0EUmtra0NHRwcT7GhnQawNGkFR3BvwcLxGI5VQKMSF18bGBnw+H8LhMHK5HPsampqaUFdXh2Aw\niFKpBJ/Ph87OTpSXl/PCnXgyRNajbszlcj3x2fdUHdRCoZB5w8R+II4GMQqUSiW39svLy48xfenD\nrqqqYj8/cXvdbjeAh+1YPp/ntu/RKCq5XI7Kykqo1WqEw2F4PB6W4iwsLAB42BIajUY4HA4EAgGe\ni0WjUZ5f0Y1fKBSYpkUPE5lMBp/PxwAfwltS1FIkEkEwGORWLZFIPLY4XF1dhUKh4EOODDaPAtTX\n15yWRvIAACAASURBVNdZEbG6usojD3L/UVVFCzSlUgmPx4OJiQl8+OGHuHnzJhwOB8/HyThEEjFK\nHtHr9aioqGDTQUdHB5LJJEQiEWpra3nOSDN4eoAB4Bn9zMwM9Ho9f5akl6+rq0NdXR0aGhpYR0+L\nPqfTiYaGBp6txuNxjtAi1gJ1O1arFaVSiZ2clBJjsVgglUoZwrW6uoqpqSk4nU4IhcLHKG8UcEDw\nevqMSL9LBL3W1lbG0MpkMiSTSTQ2NnJ3kM1mORiXFBsSiYRpiXK5HAKBACaTiTXgp0+f5vxASq8x\nm83c/dHMHHh4QJEbd29vDyMjIzg6OsLdu3fZuRcOh5nVHYvFUFlZCY/Hg
 1KphJ6eHnYqHh4eorm5\nGUqlkh92lK7S29sLuVzOMVVkVopGo9BoNKiqqsLu7i5HaVVXV+Pw8BCxWIzDYinL8ejoCDdu3OCH\nbTQaRSwWQyQS4QAQwj+EQiH09PTwWJHCMyhcgxQotIzMZrMMbcvlclhYWMD+/j5LfMkfQSlQOp2O\nOzhSEU1NTXEcWm1tLTY3NwGA1WC0AzOZTGhoaEBFRQU2Nzc5ouyJz77/207R/xdehUKBmcQCgYAd\ndZubm/B4PAiFQshkMlCpVDAYDFz1+P1+GAwGdt+RDrq1tRUajQaRSISXD42NjSxyp1kWzQ+bmpo4\nJJduUtIvl5eX4+TJk1hcXGRr6tHREbRaLaxWK/R6PVtm6QMvFAqsQujs7MSxY8ews7OD0dFR2Gw2\nKBQK5jtrNBreeo+OjmJgYABzc3NYXFzEvXv3WMNaW1vLwbF0oBNRjeaLXV1d3A4S6Iqg7fQgq6ur\nQzqdhtfrZfOEXq/nhOr9/X0OFk2n05zu4vf7oVar0d/fj8PDQ9aqNzU1IZFIwOFw4Nq1a3x49vX1\noaKigpdsxJAm0A1Zkn0+H6tuKKlmb28PwWCQk28qKirQ19eHYDCItrY2qFQqBv6IRCK0tbWxAYRy\nAF1fwJOIVTE4OAjgoXzr5s2bHC6wvLyMdDqNVCqF9fV1/t3ov2tra0Mul4PJZMJLL72ERCLBkjUa\nW21tbeHg4ADt7e0QiUS84CTNLR3MpK2mB7zJZEJHRwdjVnt7e5HNZlniZrPZWD63vLyM7e1tli/O\nzs5ibW2NDzkaEZB8jpQKBOBfXl7G0tISV9hU3dN+YHR0FC+//DJf24QYpa6RkKFbW1tMuXzuuee4\ns0yn0xgbG+OgCo/HA7vdjmQyCaPRiNbWVuTzec7F9Pv9eOONN+DxeDis4Pjx41AoFIjH41hdXcXM\nzAyLCpxOJ/r6+ji8QavVYnd3l1Ulq6urSKVSsFqt
 sFgsDFKiipz0+aTMoHEGmXaIRHlwcIDJyUlO\nESJ9P+0XCGFLMkhSUPn9fs77LC8vf+Kz76mS5xGScGtrC6lUCiaTCQKBgD9AuVwOh8OB7e1ths9/\n9tlnCAQC3PqeOHGCmRHRaBSzs7OQSqU4duwYMx2GhoZ4o01PXvowFAoFwuEw9vf30dPTg62tLXR3\nd2N5eRl2ux3t7e0wGo3Q6XTY2tpiowhVSAcHB4jFYhzLtbGxgbt37+KZZ57hJYzRaMS7774Lj8fD\nFSrxRGiB2NjYiGw2i2PHjmFjY4PzHCksNplMMkNDKBRic3MTY2NjnIBMIH+lUolgMIipqSlGudJM\nmQJ5xWIxrl69iitXrmB/fx8LCws4c+YMMzWI12EymeB0OrGyssLp7mKxGDKZjAMSotEoOzLr6+uZ\n9Qw8XEZNTk5ieXkZR0dHzNYgRO0nn3zCSEqiHfp8PpjNZlitVqyursJiseD555/nw+39999nYNPu\n7i5HddHCtFAowG63s46Ybp5IJIKrV69CLBZjfHycK2Sa/yqVShwcHGBhYQELCwtcPNAcuKOjAz/7\n2c8gk8lw6dIlxtYqFAqk02lOiWltbcXHH3/MEkmhUMghtPS9EokE2tvbMTAwgHg8DqPRiIsXL2Jt\nbY13M6SIoA7LbDYzRvXMmTNQqVScQk/oWJKeUfVdLBZhNpvxpS99CWKxGDMzM5iammID09tvv42/\n+qu/wu3bt3H69Gl8+umnHN68u7uLEydOoKqqCisrK1w5kq5aKBRiZWUFFosFqVQKvb29WFhYQCqV\nwvnz55HJZLC6uoqqqiqIRCI4HA7s7e3h+eefx507d3D27Fnk83ncu3cPu7u7rKFuaGjAxsYGd6vE\nnL9z5w40Gg1roquqqpDNZnHjxg0O3yAXZj6fx+3bt3Hy5EnkcjncvHmT0aY2mw2xWIxNWjS/J+9G\nV1cXmpqa8N3vfheXL1+GRqP
 BtWvXoNVqoVKpUF1djXA4jK2tLd5R0eiQRnNP8nqqnIlk3UwkElCp\nVKitrcXw8DAqKipQLBa5SiWcJ0FigIfzM5L5uFwuZtXSQoSWQQBQUVGBqakpeDwe3L59G6dOnYJU\nKkVvby+3jZWVlcjlctja2mIQ0bvvvsuOLrvdjs7OTkQiEeb1AoDP50MsFuPlzOLiIm+s79+/D5vN\nxgL/jY0NdHd3cxxVe3s7z6qPjo44OFOr1UIoFOLs2bPo7e1lLkEoFOKLuKysDCdPnuQqiZZR6+vr\nAMAxUGVlZUyrczgc/D5vb29zJBGxUShFOx6Pw+fzsVNSLpezo4tgVZFIBPX19XjrrbdYJ0ysZdKR\nh8NhppwtLS2ht7eXU8/NZjNbhikkOBqNQiqVoqOjAyqVii98qVSKf/mXf4FAIMDzzz+P2tpavtl2\ndnawtraG9fV1ZhsT4pR+lt/85jf4/ve/j2AwyC3so9B9u90Op9OJvb099Pb2oq2tDd3d3XxNCAQC\nDAwMYGhoiMNlM5kM6urq2H2YTqdRW1uL8vJy/Nd//Rf6+vqgVCrx8ccfw2azQalUIhKJQKVSoaOj\nA0dHR2zqoIo1EAhgeXkZNpuNeSpUWdJi1mw287yclsMSiQT1X8RI2e123Lt3DzKZjPcRMpkM8Xic\nx4xWqxW/93u/h/b2dkxPT8NmsyEajTKPhBa5Pp8PKysrEAqFMBqNPIbb2dlBMBhENpvFyMgIamtr\nmWtD98SDBw/gdDo5JIHQqfF4nFUg+/v7fN0RJ5seNo/mXZaXl7OTcX9/H7u7u2htbYVer0dfXx8v\n9AUCAbsUb926xT/3M888g/X1dSZDUnwX4YLJUEMdxvz8PMOWcrkcqqqq8NJLLz2W2Uiaebvdjqqq\nKhwcHKChoQEffvgh8N/NQt7Y2Iju7m4GmtAskNowiUTCWFDSzF66dAm3b99mYT39k+hdzc3NDBOi\niywYDG
 JkZAQ+nw+3bt3Cs88+y9rho6MjTE5O4j//8z+xt7eH9vZ2XL58GbFYDBqNBj09Pbh79y5O\nnTqFu3fvPnYYkAxQrVbDYrGwzpVE8r//+7+Pzz//HNPT0zg8PMTS0hJkMhm3w1T5k2KF9McikQjd\n3d2YmJjA4eEhDAYDMpkMFAoFB5J6vV7U1tZienqas/W6urrw8ssvAwBLphobG1FdXY2trS1IpVK8\n8cYbnFjR3t6OqakpvPXWW/jmN7+JTCbDqTZ0U8XjccZIdnV1wel0Qi6X4wc/+AH0ej07D1UqFWtt\nC4UCxsbG4PP5cObMGWi1WoyPj3P38+GHH/J2XalU8oxdJpOxYYnMFKFQiLkMJpMJN27c4L0DPWBK\npRJqamq46yIdNqWHfPbZZ7h8+TKnntDv3t3dzczw48ePo76+nt1w6XQaCwsLMBgMuHDhAorFItug\nDQYDqquroVQqEYvFsLq6ikwmg56eHl4Ujo6OQi6X41e/+hV3djKZjBdd1CERIrVUKjFWNBwOQyQS\n8eG4v7/PbG29Xo9cLgeRSITl5WWUlZXh+eefx9zcHK5fv47KykoMDg7C6XRifn4eNTU16OrqYja0\nzWaDy+XCL37xC16wkdSzqakJR0dHvCSnhTyph6i7q6+vx+joKOdCEpxMoVCweclut6O2thZ/9Ed/\nxElIAwMDKJVKWF9fx8cffwyBQMAMFDJKkTt2Y2MDiUQCV65cgVQqxVtvvcWwsOnpaUbPbm9vI5PJ\nMCEwEonAbDbjzp07+OpXvwqNRoOxsTH82Z/9Ge7fv4/29nbU19cjm82isrKSVS57e3sc0LG9vc3X\ndjQaZds/acDpfiT/wO3btzlE40kP6qdq9GGz2SAUChkfSLBuiUQCg8GAjY0N/PjHP8bKygp+9KMf\nMfGMxOy0eNJqtfj000+xuLjIVuBAIIArV65gamoKAwMDeOedd3D58mXm0RIcyGQy4fz
 58+jt7eXk\nkFKpxB/8xMQEaytpDkVMhEgkwvrq8fFxWK1W+P1+bh8J3P7d734Xy8vLeP/991FVVYWvfOUrCAaD\ncLvdCAQCvBCqra3F6OgoL0ouXryIsbExvP/+++jv70d7eztcLhfnyr3zzjsc1bS3t4ezZ89CrVZz\nhUezPMJMkoyNqu5gMIjz58+jWCzi5s2bMBqNzDkAHmbOicViXvLQuMnj8eDLX/4yFAoFxsbG8NJL\nLyGTyXCyuMFggEqlYprZxMQEDg4O4Ha7kcvlcPXqVayurvLSh/gh8Xgczc3NMBgMXHldvHgR//Ef\n/4FEIsHutPfee48hP1euXOG4JqfTiXw+D6VSiYaGBnzwwQf493//dwAPq/ITJ06wNZ14J9lsFqlU\nisdZNHuUy+UYHR1FWVkZrl27xlwIUm2QnNHj8aChoQEWi4WVPkNDQ4zGLBQKcDqdyOVyOHXqFBQK\nBVZWVpBKpbgKk8vlvHy+ceMGrl69inQ6zZmVJOcjLIHRaITT6cTo6CjEYjFCoRBisRijEeRyOYaH\nh7G2tsa0vZGREcTjce5Au7u7Ybfb8dprr+HGjRscHUdL2WPHjqGlpQUzMzP44IMPWA75ne98B+++\n+y7sdjtkMhk++eQTrshnZmZgMplw9epVjIyMYGxsDE6nk63ylPw9MjICu92OY8eOYXd3Fz6fj5nk\npFem1927d3F4eAiVSgWfzweLxYKLFy/CZrNx5dzY2Ih0Oo35+Xm0t7dzxiMVQlVVVXjrrbfQ19cH\nr9eLra0t1NTU4PDwEFtbW3xdksqjWCzi3Llz+NWvfoW6ujq8+uqr/HmR4CEcDj8WUOF2u3mc8iSv\np6qi/t73vgez2YybN29ia2sL169fh8fj4RgkcgS9+eabCAQCrEmWSCSQSqWYmJhAIBCAy+XC/v4+\nt6IOhwM+nw9utxstLS2IxWIoFosIhUK4ceMGhoaGGFNKwZdLS0
 tcnWcyGZ51EpuCZqiUoiEWi1k6\nRrHyDQ0NWF1d5eqF2NRbW1uora1lkDolrpCqgey9VqsVm5ubKBaLnJqezWZ5TkvUOpp9EqYxnU6j\nqakJBoMB//AP/wCVSsU2V1qk+Hw+5PN5XLhwgaOaFAoF7HY7hoeHGQBkt9sRDofR19fHCpbW1lZY\nLBZUVlaiqakJMpkMm5ubOHXqFHw+H8rLy/HCCy/AYDAwbnNvb49vzM3NTYRCIcZhkqORWMJCoZAX\nc5ubm5icnER7eztGRkawuLiI8vJyhid1dXXBarUimUwy53p3dxdra2vY3NxEe3s7hoaG4PV6IZfL\n8corr+C9997DH//xH7M8c3h4GA0NDRyoSu+/y+VCIBCASqViHsuPfvQjVFdXQygU4ubNm1hbW+Pk\n9JWVFVatUPEgkUhw/PhxbGxsoLe3F++++y7kcjlUKhU/RDQaDWdD0gw4lUohHo9jeXkZAwMDqKio\nwM7ODi9GSdfrcrlYIx6Px9HS0oKenh7IZDJ2OBJ/Zn5+niOwSL//9ttv48KFC7Db7RgYGMBnn32G\nq1evst9AIpGwQebTTz/F4eEhnn32WSSTSXzrW99CR0cH3n77be5qyN6eTCZx/Phx5rxPT08jnU7j\n3LlzkMvlWFtbwyeffIK+vj6YTCbWu9Pok/YwlKCSSCTQ39/PwQo0Y6b9DAX5Eg2SSIlmsxkrKyuY\nm5vDl7/8ZfzDP/wD36cUz0baeHLOUhg0mexmZmbw4MEDXvS+8847uH37NnZ3d6FQKDA+Pg632833\no06nQ09PD+x2+xPzqAUkh/r/80sgEPQDeFBbWwuhUIi9vT0cHh6yIYQMKWQGoFk1/W40ryObMEGJ\nqBrO5/MsISL5DcmkYrEYc3ELhQJD8Q8ODhjKRPKyR8E3lMpCW3NqBWnhRK0imS7IWk4/M8HJy8rK\n+HvSzw6AFSxkJ6ef4+joiJddAoGAl1iP6
 kgflaMRvIfeE/r6FERLbWw+n2eTEfG/H/36hAml8Fr6\np0gk4jw+tVqNVCrFnQPxqOmzotBb0nFTKjsAfu+FQiEbfwDg4OCA7c5KpZJdnqSrVigUj0n/yB5P\nECBiVdBohOSRtbW1/D2IfUIPPPp5SMVDDj1yFSqVSohEImSzWb4eifxG/z1dF4RfpVEVLW+JuUzX\nNi0fH/3MH3XoikQi/pmoQqT74dEQVTLUEKOEvo9YLEY8Hud0krKyMpSVlfFyktKTMpkM9Ho90uk0\nxGIxX690fZH0kUxSIpEIgUCA5bP0ez9675KMsVAowGAw8Nfa399nxRIZcOjeo+uYDs5cLsef06N/\nT9eIUqnk+4PuRbpGc7kcEokEKisr+X4gbT1d66QCAcDnAwVQZDIZrsgJonV4eIiysjLWT5Okj/47\nkqx+Ebc2UCqVZv/PzsCnavQxNDQEvV6Po6Mj1NXVcfun0Wi41SNEaFNTEyMmKeiSZqp+v59zAg0G\nA6RSKex2O3OcCUxTKpXw4x//GG+++SarIoi0R4cX3UCbm5t47rnn8G//9m9M91pdXWXGSCwWQ3V1\nNRs0SPZDi5uNjQ386Z/+KaeX7+7u4ic/+QkGBgZ4gUbUN2rBWltb2daq1+uRyWSwvLzM1ZDH40Ei\nkYDFYsHR0RFCoRCH6XZ0dGBxcRHDw8OcVFIqlThr0uFwYHZ2lttllUqF5uZmHBwc4De/+Q0n2wSD\nQVRWVqKurg5OpxM6nQ4GgwE3b97kn5ks/bu7u1xJPBpEm8/n+esXCgWsr69jenoav/u7vwuBQACb\nzYZIJIIHDx7wIlkoFKKzsxMVFRVYW1vjPQCNWT755BN4vV5erJ05cwY+n4+hXnK5nB+mlEheKpWw\nsbGBH/7whxgYGEB3dzeqqqpw69YtphgSOnNra4sra5VKhePHj0MgEOCjjz5i1orH4+G070fxBZQc\nQqEHpD4pFAp4//33
 8eKLL6Kuru6xhHjyAFRWVnJyDKloLly4wGobOsQJfaBUKnH69GlOOydFyCef\nfIKBgQF0dHQgGo1if38f//qv/8p6893dXfT396O3txculwvFYhHj4+O4dOkSJiYmmBz41ltv4eLF\ni+jo6OCHJkn2PB4PPvzwQ5jNZrz66qtQqVTwer2sVHk0Ff7mzZsoFot44403OOSX8j+7urp4cX14\neIhgMMh4BbvdjsXFRcjlcjz77LNIJBKsrpLJZLhx4wY/3M1mMyOQKQMym81iZWUF7733Hv7mb/4G\nABhcJZPJUP8FQ5p07EKhEBsbG7h9+zYODg7wF3/xF8hms3ymUMFkt9vR0NAAkUjEodWpVAqRSATF\nYhFDQ0NYWVnB3/7t3z7R2fdUHdRNTU1obGzE2traYxhKuVwOnU7HsB0yafT09HCysEKh4NkiWa4J\nkJJOp9HZ2QmhUIj6+nooFAoMDw8jHo/jnXfewc7ODs6cOYO2tjZotVo2Rmg0Gga80KFFFK/a2loM\nDQ1haGgI29vbcLvdHHDr8/m42jx27BjDgAjqotVqsbS0hEQiAavVilOnTsHj8TBytLq6Gv39/YhG\noxCJRPjZz36GP/mTP0FzczMqKyvh8/kYVE7VwerqKi9h6eHU2dkJlUqFU6dO8SGr0WggkUiQSqWY\nVUBb8qamJq6K6+vrOTSUHhaUiu3xeGA2m1FbWwutVstMaHqYSCQStLa2sumlVCqhtbUVlZWVmJmZ\nQTgcBgBWYfj9foyOjmJ3d5eNSeFwGGq1GtXV1axjp3m6UqnEmTNn4HQ6kU6ncfbsWX5fATDeViqV\nIpFIsLU7HA6zi+/EiRO8N+jp6UFLSwuPLairILMMLa8zmQyGhoaYa07BAWRIokAFGutQZbWxscEO\nwOvXr3MHV1dXx7xrjUbDB2hFRQUn97z44osYGhri5JxEIsHKHOrGiJVNC2WBQIBvfetbyOVyMJvN\
 nCAQCiEQinI7S1tbGzPSVlRXOL3z55ZcxNjbGiUkymQzf+c532HFYVVXFjlO5XI6NjQ3WjJPKh6iJ\nBoOB7eDEGV9bW4NarUZTUxPztjc3N1ltRN0IGa0IwqXT6TA4OIjW1lasrKzwDDwcDuMb3/gGH/rF\nYhHz8/P8IKXOhc6QEydOcFByRUUFBxU4nU4Ui0U2haXTaf6eJpMJ8/PzuHz5Mubn51FWVga73Y6+\nvj6OROvt7YXZbEYymWQJqkwm+7909j1VhpdwOAyj0cghsoeHhzCZTKyJpb8zmUzQ6/WQSCTY2dlB\nMplELpdDOBxmxgYAxn9S9qFUKuXKzGQy8dOvvr6eI+yj0SgbTSjb0Ol0cmIFMa+1Wi1XuASnz+Vy\nePDgAaanp9kJtru7i2g0irW1NUxNTWF9fR2RSITbN1pC0M9L7fXBwQFaW1uRTCYxMDDAcUHAwzEE\nAYfI6CMQCNDY2AiLxQKj0YiZmRmew5P1nR4GR0dHLPvr6enBwMAApFIpFhYWeIQRCoUYsCSRSHjR\nWSwWoVar2eRTUVHB9DKv14vbt29zBUmchYqKCuzu7mJjYwMVFRXo6enhkRQpVA4ODjAwMID+/n5o\nNBoMDw9z90OjMFqCkVFnaWmJ55ekay2VSojFYojH44wQpcrZYDAwGpdCgMmBF4/HeUwDANXV1QgE\nAlhaWmLjy/T0NM93Kb+ytbUVAoGARwUE6CHiod/vR3NzM65fv45CocAjOYvFwukzYrEYXq8X+Xwe\nVqsVIpEITU1NnNs3MTGBfD6P+i8Y5VKpFCqVCmazGZlMBjdu3MD6+jqbvdbX17G6usrXF+1diCNt\nMBh4xk+LawpoIC0+GYnIaSgQCOB0OuHxeFiOR50c8baz2SzC4TDm5+d5LGS32x97P8ilOD4+jr/7\nu7/jz5YcjqQrJ30+PcBKpRI/yB0OBxwOB2pqahiAptPpmGWiVqsRCASYmkhj
 MK/Xi1/96leMhnA6\nnXA4HNDpdI9lXCoUCvT09PAZYTabMTU1haqqKlaz2Gw2LgZof0Sgqbq6OiZPPunrqaqoqcXQaDTs\nOqOq6ODggPGlNBOieVgul+NKhuaoBPOmmRvhMJ1OJ7q6ujA/Pw+dTsfbfTponU4nu+Dy+TxXC8Vi\nkd1WZrOZD01qT0k2p1Ao0N3djerqaiwsLGB5eRk9PT0MdTIYDEwAk0qliMfjCAQCLCmjA4RoYz6f\nD8888wzP2/f395kyRks6moWmUilUVlYimUzC5XKhoqICYrGY5352ux01NTWIx+O8XCPsaCQSYYog\nxZQ1NTXB6/VywAHZnQHwAo+wlAaDAYODg9jZ2cGDBw8wMDAAp9PJc1C/38+JJjTbJIjP0NAQJBIJ\nOjs7eUFcXl6OWCyGaDTK3ZJAIEBHRwdyuRwqKyu5iqNIKdKdk8SLoPtWqxVSqRQOh4MVLMSBIX3u\nwsICy+No3pxKpaBWq/marKmp4UR76iJolFAsFnncRTAgWvTSIpsSZtLpNEwmEyoqKrgyFovFyOVy\n2NnZgVwuR0NDA0KhECf1iEQibG1tYWdnhy36FOBM+xR6+NXX1+P69esIhULo6+uDUChEXV0djwcL\nhQLy+Ty/b5REnkql0NPTg8HBQXZGElcEAM/wjUYjQ8DouqTCQyKR8BKSdjQ0AqTDcHx8HC6XiwuU\ntrY2zM/Po6WlBQA4IESlUrFOOhgM8v03OTmJ+vp6+P1+5uiMjY1xGo5MJoNQKOT9Cz0E6JrX6XSI\nxWIwGo3Y39/nbocQt0ThoyBtCu84efIktra2WHZJBUssFoPL5WKFjEqlwtraGg4PD5/47HuqDmpa\nUhSLRZhMJj4EqIpTqVQcYLm8vIxUKoVjx44BAC90yCZK1DeaA0ajUXg8HiiVSszNzXHrSfNnaoMI\nRGQymRCLxSCXy9Ha2sopLVRN0TigrKyMXY40i6XYLnI
 qVVRU4NSpU8wVoBh6sVgMvV7Pyyk61ORy\nOerr6/mmjcfjvBB8lD8xNzfHCR1000ajUajVarS1tTETgjLnCJ1Jc05akpZKJb7gaXa5u7uLQCDA\n3QxVOJFIhGFANLOzWCyorq6GXC5n9gHN69RqNZLJJDO+k8kkfD4fysrK2ARjNpu5TSWJE6WEEIOB\nuCakiunq6sLu7i5X8ACY8NfX1wcAjBsguiLNNwGwUSGZTGJ1dZXDDOhBWCqVUP9FFmEmk+F2/v79\n+0xMKy8vRzwe51EbzZbLy8u5mKiqquJcTPo9CdL0KDaTlqmk1yX0plgsZuqfVqvlJTItOltaWji5\nh1JhamtrmQFCyy6SE2azWeRyOQZtGY1G7hoNBgNrqCnzTy6Xs/OXFqpEoyPqYygUQmNjI1KpFI6O\njnD58mX4fD72QBD3ORQK4dq1a9je3kZrayuOHTsGt9vNbkPCEhONjsIsiCxImINAIMCjLBqFzszM\ncKFBJh0aERGzm2R4JGcl/opCoYDb7cbExASPNhOJBHp6elhr39DQgLW1NZhMJr4OyIVI9w/t0oi2\nSbmZT/J6qkYfEokEPT09/MQj3gPpoIkwlslk4Poi6YT4vGKxmGez1LITO4OwoAKBAA0NDVhZWYFA\nIGC2Mhlrcrkcc4XpyatUKhEIBBCPx9mW6/V62VlFhydxcWnjTmnfo6OjqKur4z+jcUF7ezv0ej0A\nsIU8n8/D6/XC6XQimUwyYN7pdGJnZweRSIRnX4VCgUcYtLTS6XTM/zh58iSnZxA4ncwHVA0JBAIo\nlUrU1taiqqqKfzb6upRpRwfK+vo6dnd3eUREHAQy03i9XszOzqKzsxMikQgGgwHFYpEDbmUy301s\nRAAAIABJREFUGYLBIHcLhFFdX19HNpvlpJlCocCJ5oQVKBaL3AFRpWS326HT6dgMY7VaMTg4CLlc\nDrfbzZ0OAX3q6up4Pq5SqVAsFr
 G6uopoNMqKB3oQlZeXo7W1lStBj8fDuZgkJySD08LCAndLtNT1\ner2cvmM0GmG1WtmAQyiEe/fucVpOKBSC3W5nXCcFxFI1SWMTUkUFAgHs7+/DYrHAYDAwpL5UKmFh\nYQFGo5HNISqViq3khUKBfy5a9lksFkQiEcjlcoTDYczNzWFvbw8dHR1sAonFYiyJDQQCSKVSaGxs\nZPeoUChkAD/Ni8PhMAcl0M97dHSEtrY2tvSLxWK4XC40NzfD5/MhEokwQjcYDPL7RdZ6cj9GIhHU\n1tbC7/cjl8sxYGpwcBDd3d0QiUTME9/d3WVnst/vZ/+DWCxGJBJBJBLh34Me7KlUCsFgEIuLi6iu\nrkZdXR1rxzc3N3msSXuP3t5eDpymwOdH1Tj/q9dTdVArlUo0Nzejurqaf+lSqYRAIIDx8XFGEFJI\n54svvsgpFbR8IaQj8QfKy8tZlUEMCJPJxJZVkjdRtVEsFnnhBoCzBB0OByQSCVctJGYniD7N0xoa\nGriFI5Z2qVTCysoKfD4fc4QTiQTn+pFuVCAQcHu8srKCQqGAQCCARCKBzc1Nlh1RNhsB5+mCb2ho\nYEOEQCBgA4lAIEAkEmFKG3E2Dg4OkEwm+UFVUVEBlUqFQCDASEtKW7HZbKitrYVYLGaZktlsRllZ\nGW7fvo2xsTGetR4dHTHrl2Rg9V9EIjU0NPCc/ODgAI2NjVwtr66u8kN2fn4eDoeDJYX0OZHdeHZ2\nFnNzc4/ZysViMYLBIJxOJ0KhEJPYYrEYj0to4UiSPeJ3ExfCYrHwf0tZkoTMlMlk6O3tZXJbJpPh\nAOZEIoHd3V14vV42Q7jdbiwvLzPjwuv1Yn9/n0NxKRaNsjxdLhfcbjdzMeizam9vx/HjxxEOh1m7\nT9ronZ0djI+PIxQK8ZiFxh7RaJQfPFQNP8pAPzo64nZfpVIxg4U6SbreSNFCoCnaPcRiMYyPjyOX\ny+Gjjz5CL
 BZDZ2cnVlZWmHCnUqmYLU3W69/6rd/iboSuJdpXeL1eXvLa7XZcu3YNY2NjvIeh+9zr\n9WJnZ4cX3Ol0GlarFb29vbzcJUaNRqNhcQCNRShZiXg3crkcJ0+e5LGHzWaDx+Nh4l6hUGBDnsfj\ngUKh4FEHAPYJkHmKOoUnfT1Vow+LxQK/34+VlRW0trayZTMUCvFCkIhsVqsVh4eHPGuenp5GY2Mj\n9Ho9Kz1ojk22UKfTCYFAgNOnTyMcDnNr2NTUhPb2dmSzWfh8PgY1bW5uYmBgAEKhkA95m82GjY0N\nShdm5QIZOxKJBNRqNas6aKZKJpfFxUWYTCbMzMwgEAhwggeR2UizSWkU586dQyqV4lBPiiOTy+UA\nwFVyJBJhHjdVGMlkkqv5cDiMwcFBrlgI6E+JMjTeoLSMYDDI6FKqcGjRlUwmoVAoeIyws7PDAagu\nlwvJZBITExPcERgMBhweHsJqtaKlpQWTk5McW2UymTAwMID5+XmOxCITTTgcRmVlJeq/SOIJh8M8\nr97Y2GCzQjabRVVVFba3t3H//n20traioaGBDyeqQru6upgRfHBwgKGhITYnET8CAH82+/v7zB2v\nqalhPnMqlYJKpeJKjYqKZDLJUXDV1dX8HqbTaVRXV/N1vrOzg4sXL7KFnqz2AwMDXNlLJBJMTk7i\n3LlzEAqFCIVCkMlkTK8jdyLN7hsbG1FeXo6xsTEEAgEMDw9jYmICtbW1yOfznGBiNpsxPDzMIz+K\nZqNZrFwuZzUPSdgosJWCfOvq6vieolHUe++9h9dee43t1vv7+1wkkfabdixkBpqdnYXRaGQ9NHkZ\nKNz68PAQDx48gFKpxIULF1AqlWAwGBCNRnHs2DHcunULX//613FwcIDf+Z3fYeULyVRpCUySOpVK\nhaqqKrhcLrS0tCASiWBkZASBQAC7u7vcxZFggHJLKQy6vr4eL7zwAhYWFlhCSjx20m/TYd
 3e3k5m\nlyd6PVUHdXl5OUKhEDv4qquroVKpcPr0aUSjUdy7dw+tra0wm828VCQ76fnz53mhRHMzr9cLjUYD\njUbDUiCafff29jIkprOzE319fWxZ9Xq9TMl7NNtPKpUiGAzilVde4creYDBga2uLUyVo+0vp1slk\nEhqNBt3d3VhfX8fp06c5g42obi0tLZwV6HA4ODDz7t27aGtr4xHLozdrMBhEWVkZP2xozq1SqaDR\naNjwQAGsNpuN5Vw0r4zFYpicnHxsCTIzMwOtVsvVAOXIraysQK/Xo7Ozk3WvoVAIGo0GAwMD8Hg8\nCAaDeP311x8DshP7l9JtqqurcfbsWdjtdk5Un5iYgNVqRXd3N8rLy7G0tAStVssH8dLSEiNC5XI5\nyxgpWZ44xEdHR4x7zWQynDZCenpKwQYedkJkgSfON4WWEuhrdXWVde2NjY24ePEiPB4PNjY2sLu7\ni3PnzrGckOR7ZLFvbGyE0WhEWVkZlpaWsLCwAIKO0edJSqVcLgeLxQKv14uZmRmoVCrYbDb4/X6+\nLnK5HIcb0HWVzWbR1dUFo9GIO3fuQKfTcYLOyMgItra20Nzc/BgC1el0so1bKBTi3LlzKBQKePDg\nAfr6+vhh/cEHHzBGuKGhAel0mivu6upqOJ1OVFVV4dvf/jZCoRC+9rWvcZTZpUuXOJza7/ez3py6\nVNo9EHObKHsnT57ExsYGMpkMUqkUHA4HAGB0dJQhZoeHh/j888/x/PPPIxqNsprIZDJxqko4HOZO\nkIxWWq0Wr7/+OhQKBf7n//yf6OvrY9gVkRFjsRgT+misRNmbc3NzvCsjVMXm5ia0Wi1b+CkkgR7+\nNNp8ktdTdVCTG66np4erNSJbEeeAzCBkkyY2yPb2Nqd6U4o0yXLKyspgs9l4S723t4f19XUO7nS7\n3dwS9/f3w+PxYGpqitvEtrY27O7uYnh4GHt7e4hEIizpisfjkEgkX
 CnTEqOrqwv9/f24fv06g9iv\nXr0KpVIJp9OJ+/fvIxwOw+12c8tLkidKnXnxxRcRjUZ5805wfYoJK5VKbH2VSCSYnp5GKpXClStX\nOKlbKpXyUioSibDeVyAQ8Khmf3+fHzDDw8O4d+8eTp06BbFYjGg0CqfTCb/fj+PHj6NQKGBxcRHR\naJSBNiT7u3z5MuuvKfLqwoULCIVCuH//Ps96SeLU0dHBRgLi+tbV1WFubg6Dg4NoamqCz+fD7Ows\nrl+/DqvVyoRBn8/H4Jvm5mZe/tHCVKvV8nyUtN+E8wQeJs0vLS1BoVCwKy+fz/MNLxAI4PV6MTY2\nxkunxcVF5nNTR0IpLDU1NcwMp9aXEAZ2u53JfGVlZWhsbOSQWXJqUrZle3s7AGB8fBwSiQS9vb38\n57Tce9TFubi4yMiE3t5e7O3t4dVXX8XMzAxeeuklzM7OMjOH+B1zc3Oor69nQ8/Ozg7sdjtaWlrg\ndDrxjW98AyqVClarFQsLC5icnEQmk0FrayvOnDmDYDDIslSqRDOZDL797W+jv78fOzs7MBqNWFtb\n43g3kUiEBw8esNvv4OAAU1NT+PrXv86yOq/Xi2PHjjG+VCAQcBgEddSkuSc0bLFYRHl5OTo6OrC9\nvc3wNIVCgb29Pb6+s9ksF3oU3BwIBLC4uMg7sUKhwDRLSo/S6XSQyWR47bXXIJVKMT4+zoWg3+9n\nZyPp33U6Ha5du8YjySd9PVWsj+eff575zKR0IOkTLX0oAkehUPAM0u12szxqfX0d6XSaN+yUnkKL\nG5vNhkwmg5qaGtTU1ODjjz9GWVkZcrkc62Zv3ryJfD6P48ePo7m5GRaLBf/0T/+Enp4eluDNzs6i\nsbERW1tbqKysZBtrbW0taz4///xzdHR04Ld/+7cxNTXF1e7NmzexurqKra0tlJWV8VyeXGUkJySA\nvslkYu0mBb6SaYDkgW63G/39/chkMlhZWYHJ
 ZOIgXqKRSSQSbG5uchKIz+dDVVUVz7o1Gg2GhobQ\n0dEBuVyOxcVFbG5u4sqVK3jppZcQCATwi1/8gsFJq6uriEQimJ+f5/is6upqFItFTninOCTiWlCO\n4MLCAgYGBlBTU4PFxUWcOXOGU96Bhwfp5uYmtra2WLJIid1EgaO4KLouaAlpt9sBgNNpHkWzHh0d\n4bPPPsOFCxdw4sQJpp8RO4LSpMnRqFAosLm5yWk91KHQktLn80Gv16OtrQ1LS0v4zW9+A+BhnJpM\nJsPS0hKSySRGR0extLSEe/fu4erVq7yspUQer9eLtrY27O/vM8b32rVruHjxIgcf19XVYW9vD1Kp\nFHt7e9je3sbi4iKKxSK+9rWvYWVlBUqlkql3UqkUbrcbY2Nj3BXV1tbi0qVLEAqFcLvdrDm/c+cO\nqqurodfreSyQTCZx8eJFThQi70BbWxuAh4kyZrMZ+/v7GBsbw8jICK5fvw65XA673Q6tVovOzk4k\nEgncuHGDnaQUSTY4OIhoNIrW1lauvOlaFYlEzF9ZXFyE2WyG2+1m4UChUEBPTw9+/etfs3RXKBTy\nuKa3txfHjh2DWq3G9PQ0lpaWcObMGXb80u4pnU5jY2ODfQU0K3c4HHC5XLh8+TKrvD7//HMkEglk\nMhns7OzwaNbn8/GBvr29zVLdO3fuUCLMfy/M6aVLl7idoSxAn8/HMjXgoQxvf38fra2tqKurw9jY\nGF544QW0tLRwinYikcD29jYvAIn/+6UvfQlyuRy3b99GsVjE4uIipqamcPXqVZw+fRq9vb0wGo0Y\nHh5GS0sL3G43Y1Hz+Tyamppw//59/PVf/zX+/M//HMFgEDKZDH19fRgZGUF1dTXzCqLRKIaHh9Hc\n3IzZ2VmUSiU0Nzdje3sbSqUS8Xic2cyPOrFmZ2cRiUSwtbXFFytZeolGZjKZWBFD8WEkdUulUujv\n70dDQwMePHgAj8eDlpY
 WDumVyWRobm7mqCObzYatrS0IhULYbDZOyBgYGIBIJGIZnkAgQGtrK86d\nO4dEIoHr16/jwoUL6Onpwcsvvwy3242f/vSnOHfuHEQiEQfGNjY2cnjo2toa5ufncXh4yAqHVCqF\nc+fOwWQy8QKYYpBSqRTa2tpQU1PDP3upVMLrr7+O69evI5lMoqmpCZWVlQzFAcDRYdFoFPF4HN3d\n3cjlcvB6vaipqcEHH3yAkZERPlAqKys5P7H+C44zjdaSySRsNhtSqRS6u7tRKBTQ0NDA5o2DgwOO\nJSPG9Pj4OMbHxyEUCtHW1gaLxYK1tTUeMQwPD8NsNiMej7Mt/NSpU+jq6uIFJ81i/X4//v7v/x7n\nz5/HT37yE+zu7nJoQnt7O+cubm9vM+4UeLjIvn79OuNcaT9CJhCTyYTOzk5edB4/fhwSiQSNjY24\nceMGxGIxFzUkkdTr9Wzuodkymbf+8i//Er/85S8xMzODCxcuIJvNYnp6mqWiLpcL8Xicfx6hUIiP\nPvoIzz77LIeD0L2az+dx69Yt+P1+llsajUY2P+3s7LAhZXFxEV/5yldw48YN1NfXo6enh2W+Ozs7\njJmdmppCRUUFrly5gng8jtnZWQ5UIOxwX18fL7nJlNXR0YFisQir1YpUKoULFy5gamqKHygkcQQA\njUaD6upqPjfImIP/bgf1Cy+8wCkiuVwOHo+HRx40jyVd5+3btzms1GAwwOPxsLlFq9VyyChpW7Va\nLT766COWsgEP54r37t3Ds88+yz5/g8GA1dVVLC0tYWhoCGfPnsX+/j7cbjdOnTqFzs5ODA8PY2Zm\nhi/u1dVVhs0LBAJUVlZCKpVyYOiDBw/w8ssvY2pqCg6Hg5Ojt7a2kMlkeFFz69YtHskMDAwgFoth\ndnaWM+NeeeWVx0whPp+PyX3BYBAvvvgiKioq2JFH/w7paCnzUK1WY3FxEXa7HadPn8ZLL72Empoa\nZl
 +3trZidXWVTTUKhYJpecvLy/B6vRgYGOBZXi6Xw/b2Nvr6+vD++++jsrKSRziULi2RSNDe3o7n\nnnuOnWmNjY1obm7m1p5UHqVSCY2NjZz0fnBwAL/fj6amJpw/f5637vR1qVWmnMeGhgYep9D4RiQS\noaenB8FgENeuXcOlS5egVqtZrbG3t4cHDx4gHo+zDpdYIZQ6TgoFUmlMTk4iGo2yEoQgQ0ajEadO\nncLLL7/MkWgUtjwzM8MdHClkVCoVp5qr1WqMjY1BqVTizp07fE22t7ejvb2dCYsymeyxmDWaYx8c\nHLBUkHDBzc3N+OUvf4nPPvsMpVIJNpsNnZ2dnPX36aef4uLFi7Db7ZwnKhKJ8O6773L+o9/vh9/v\n5xDpnZ0dliteuXIFv/71r1EsFvHVr36VHwSklMlms7h//z7u3r0LgUCA5557jkeWQ0NDbNmnrFOp\nVIrV1VUO00in03wWvPvuu6itreWD+9ixY7x81Wg0CAaDrFqhHUhdXR1u3bqFb3/72zg6OoLdbofB\nYEBHRwdCoRDEYjFOnTrFYcaE8CVLOpm+aFRZKpUwPDyMyclJ3Lt3DxKJBE1NTTyTNxgMHEYxPT0N\n/HfjUedyOdhsNrjdbtTU1HAayeLiIgP2TSYTu5bIOUZhtOFwGMFgEOXl5WzAEIvFvAjr6uriRZRC\nocArr7yCH/zgB5iamkJ9fT2cTidrtmUyGWKxGH7605+ioaEB3/ve9+D1elmqpFQq2cFIzruVlRUo\nFAqMjo7C5XLhgw8+wOuvv46hoSH8/Oc/Z8ofWYgpe9BoNKJYLKK/v5+rtJs3b7ISwWKxsNV1fX2d\nHZikJ6ZD68c//jEGBgawvr4OuVwOhUKBM2fOcDBBNBpFc3Mzp5rQ/JpCdWkpSZXt1tYWg+IDgQA2\nNzf5PaDRUyQSwf7+Ptra2uDxeHD69GnodDpUV1ejUCggGo0yIJ/eIwpBPXPmDPL
 5PPR6PXZ3d6FW\nq3F4eIiWlhZGoup0Omxvb2N6ehrr6+s8+qHg4cHBQWxubqJUKrGCgeRmfX190Gg0yOVyWFtbw8rK\nCuuoOzs74XA4WA5JYB6SX+XzeVgsFv68uru7ce7cOYyPj2NjYwPpdBqVlZWceC+VSnl+nMlk2NHo\n+iKFqKuri520wMOxDEGwiApIc22SiJ44cYI/L5VKBbfb/RgilVQMOzs7aG1tRV9fHzweDzweD0tA\n6Wu/+uqrcDqdUKlUGB4exv7+Pm7dugWlUon6+nrcvXsXHR0dcLlcMJlMePvtt3Hx4kWG4lMyt0wm\nw9raGktgyRREKUxGoxF3797FyZMnWc1EMXp6vZ67KBqvrK+vs5GpsrISTqcTc3NznBPp8XhQLBbR\n2NgIh8OBb33rWxgcHMTk5CR++ctf4h//8R/ZQUmIYblcDrPZjJqaGjgcDni9XhSLRd5XVFdXo7Gx\nEXK5HLFYjA1UHo8HKysr3FWFQiGMjIwgmUwyb0ar1WJiYgILCwsQi8Worq7mkGWDwcDqqZaWFsjl\ncvzzP//zE519T9VBLZfLEQqF0NTUhHg8DrfbzVUghdCOj4+joaEBwMODva6uDhMTE9Bqtejo6GAu\ncyqVYrcgtSZked7b24PL5eKnvV6vZw3m3NwcEokEy2yUSiWnTJdKJWZRj46O8oaZsgOfffZZ5lB0\ndXVBo9GgrKwMs7OzzFJYWlqC3+/nNp420rSYqaurY5oaifJlMhk//ZPJJFdvNCstFots9HG73cxH\noLRzUl4Q54EeVmQN1mg0aGlpYY7wZ599ht7eXqyvr8NoNHIVlclk2BRA5olEIsEM7MHBQXz/+9/H\nN7/5TczPz6NUKjE0KhwOI5vN8g2gUCjQ2dmJW7du4e7du9ja2sKbb76JmzdvYn5+Hk1NTbBarRgf\nH8fi4iIvHm/evIk333wTwWAQN27ceGzhY7VaOdGFRmhSqR
 RmsxmDg4Nwu92MeSXKIC0jycZNyfKE\nC21sbERlZSWmpqYQCoXg8/m4Iuvq6mKgP+n36eFLiiK1Wg2FQoFbt25BpVKhUCgw65oMPWRGIRme\nzWZjGBQZWUgauLa2Br/fj9OnT/PD0e/3IxgMwuFw4OTJk1Cr1Xjw4AGOHz+OqqoqBINBrlTJTh8I\nBPhzoxi7n//857h69SoikQj+4A/+AGq1mu8hihrL5XLcvW1tbeGTTz7B/fv3USgU8MwzzzAi9M6d\nO9jf30djYyNCoRBcLhcODw+xsbEBu92OP/zDP+REIb1ej3A4zJ2uTCZDIpGA3W5nVK1UKuW/X19f\nR1VVFd544w18+umnyOfzOHfuHIrFIm7fvs2BtqTCIFPY7u4uOwwJaRoMBtHU1MQHb3t7OyOCDw4O\nkM/ncf/+fYyMjCCRSGBxcZFFDQqFgrXa4XAYy8vLqK6uhlgsxtraGrq6up747HuqDmrSJlLu4KOW\n2mKxiEAgAJ1Oh1QqxaxbAuNQGgVhJknnSmJ2WmqJRCI0Njbi1q1bkEgkDAsneMz29ja3jcTxdblc\nCIVCnJKytLTE5g9KMKHZMaV1+3w+VqiQW424HOTkI96uQCBgV+DOzg5SqRSqqqrQ3NyMhYUFOBwO\ntLe3Y21tDUKhkEX8ZFihQ5OWX4RqbWlpwcbGBgQCAWpqamAwGBCJRCAQCKBWqzltJJ/Po6OjA3Nz\nc49tq00mEwKBANbW1tDR0YHOzk4e2ZDgf2RkBOvr6+jr68P29jZaWlowNjaGy5cvs87Y6/UyuZAk\ne9lsFgsLC3A6naitrUVTUxNcLhdOnz4Nu92O5eVlZDIZJBIJFItFRKNRWCwW1NTUYGxsDA6HA52d\nnfjoo49QW1sLi8XCC0UKqiVEAGVpdnR0QK1WAwBu3brFKSc+nw9dXV1IJBKsgycuRnV1NaxWK4LB\nIOcd+v1+WK1WzsYjGV2pVIJKpQLwU
 N/u9XoBAN3d3ZwDCID5MVarFfF4HB6PB6VSiZPsc7kc7t69\ni2KxiJaWFpbdEayIFue1tbVoa2uDXq/nLoUSkRYXF/Haa6/B5XJxSgqNeGZmZjjJfWdnB/fu3YPJ\nZMLw8DBcLheampowNTWF1tZWzM/Pw2az8SiBYP2U4Xj+/Hme5UulUiwtLWFgYIDvF5FIhHQ6jWKx\nCIPBgL6+PjgcDszNzUEkEjFmgLph6oRIo0xjQqpUm5ubOTneaDTydU6aZdpZkIu3oaGBMRLEvFYo\nFPj4449x5swZ9Pb2QqFQcPGgVqs52q6lpYXn8RS4YDQaOVs1nU4jFovh4OAAWq0WFouFMQR9fX2Y\nn59/4rPvqTqow+Ewurq6OESSoPSU1UYELHIwHh0dcVUci8VQKpWwtrbG7fSjwQK5XI5tw5FIBBaL\nhfkZNMdNJBLMmHU4HFAqlaisrER3dzcvZJRKJVtaCdyeSqXY/k0uvGQyyWCXUqmEtrY2+Hw+WK1W\nVFZW4sGDB0gmk0gkEkgmk/ww0ev1iMVifFGVlZWhs7MTh4eH2N/fh8FgQDabRTab5aVJOBxmToPf\n72dTRDabZTwl/ZxkD0+n07BYLJx+Mj8/z3/W2NjIkkWtVov79+/D4/EwZEckEiEcDmNhYQHnz59n\n7obdbueqfnFxEUajEXt7e8y8ODg4wO7uLkvSnE4nE/wKhQLfKBaLhQNelUol9vf3EQgEUF9fz843\nyvTLZDLsdjQYDFCr1WzMIODVwcEB3nrrLbz22muIxWJ8TSSTSZjNZpSXl2NjYwPJZJL3CwRmoqUn\nLXupraV2mCztBoMBANhtSjI0ohaOjo5ibm6OUZ702ZDGn1yrZDyhm546FrFYDIVCgfb2dkgkEv4+\nra2tPBtVKBQsK6XuLRwOo7y8HKlUCoVCAWVlZWhra0NZWRlX1VTUFAoFDAwMAACOHTsGo9HID1m6\nd3K5HN8jExMT
 rPnv7e2FRqNh2NL+/j7jVyn9vVQq4eTJk+jo6OC4upGRERQKBWZHm81mqNVqHB0d\ncQbixsYGJzPR9yboFY2OCMRG6iaSL5LtnTwG9F7W19cjEolAo9Fw8RKJRB4LB6GKngQMxBknKJVc\nLuds1EcdqWR4CQQCT3z2PVUHtc/nw9DQEKqrq5k9TTDx/f19NmtQ2CgtEykEtKKiAtlsFvl8HoFA\ngMM1aSHW09ODWCyGlZUVnDhxgp+SwMMqhyBFdKPGYjEcHR1BrVazjIxaXqr0SqUS3G43E84I1kSz\n0UdvZrvdju3tbQiFQoyNjXF7RsYZotmReoBGDQaDgYNV4/E4H3rUeqVSKWg0Gq4oCW6TTCZx+vRp\nFAoFbGxsIJvN8o0FPBwdZbNZlJeXMy5ycXERdXV16OjowOzsLENrTCYT/87d3d0MBdrZ2UFjYyP8\nfj9OnDgBt9vNvBDqFkKhEAqFAr/f6XQaQqGQ0z1UKhVWVlYgFou5o1AqlTCZTCgvL4fVakVnZye3\nvqRbdbvdOH78OD8k5HI5Ojo6+MYjyaVYLH4sjgp4mFpPwB6yLNO4i7jCer0ea2trPGMuKyvD/fv3\nodVqGQ1QXl7Oi0e1Wg2lUolwOMzZe5cuXeIbnQiETU1NqKqqwvLyMoRCIZqbm9ksZbVaEYlEIBaL\nGcVZW1vLumGqimkmn0qlGL1KYyatVosTJ06wmaZUKvF9IxaLGeJFu5hCoQC3283dHxnKHg1sJpff\nzs4ObDYbh/HG43GcO3eOHZ9yuZwX0WT6oPFPLBbjBw6xQrq6uhh/GwgE2M+wvb3NUDMK23i0UAPA\nDxkafdG4lDoIsVjM3HXixZC0jzCuDocDFouF91lkCuvq6uIHYj6fZ4s/8HD00tzcjFAoBKFQCL1e\nz9zzmpqax3YzT/p6qg5quuiHh4dZMkaMWrIKkyWcWAxVVVXY3NxkrgDBUCgWSaVS8YFC4CVSA
 hCV\njW4Sah0pBVwikUCn03GiAwVxzs7OQi6X8wa/vr6ek0BEIhH8fj87Gcnht7i4yPhRpVLJCgKSsdES\nin4PqnYoKODw8JBxkFQh0EzUarUil8sxOyEcDnMHQNUSUb12dnZYq+1wOODxeJiYdnjhCEmqAAAg\nAElEQVR4yG1tRUUFtFotPv/8c5YuUjJGfX09Q2qWl5chl8tx7NgxTj7f3d3lg5TSL8hhR4oHitvS\n6/UIhUJYWFhgQwzdrNTxKJVKKBQKVpmQlr6iogIrKys8kyYqIj0IaAeg0+nQ0NDAbTYAfthTgCwp\nZ4iudnR0xIwHQpPSwWAymdDS0gKBQMAIWLLxk8IIAB8URFik66OjowMNDQ0IBAI84mtvb+f8TalU\nyg+N5uZm2Gw21mvT+7CzswOXywWpVIqGhgYm9tXX1+Pg4IBdl+RAra+vZzXFu+++C7VazQlC1LH0\n9fUhk8lgfn6ezTp7e3ucWyiRSDiAQKfTwWKxYHl5GWazGffv32dK497eHqezNDU1QSKR8IgumUzy\n6I8kcGQcA8DSzK2tLchkMpZ3KpVKlJeXIxgMQiKRMNKBgFEEmiKWB/1/srPT4o8KAMK1kgtSp9Oh\ntrYWR0dHzJUmZcje3h6fJWQeI/8GdQu0z6C/W19f//+2ohYIBP8DwP/4P/zxeqlU6nzk3/k+gO8A\n0AEYB/BHpVJp6wm+NlfSlZWVbAogGy8N+P1+P0toyJVGN3k4HObtM23ii8UiEokE3G43ZDIZysvL\nsb29DeChn5/CS/v7+3n7LpPJeDYlEAgYQK/T6Th1gpYU9L1owUegI7pRwuEwkskky82am5v5oFQq\nlbBarfx7kqSprq6OFS0+n49pd7QMpPk6EflIrUKyqKWlJZafaTQamM1mtsQTKInSWahzoD/TarUI\nBAKsJy4Wi5iZmUEmk3n4Ya+vM+xJp9NxCOjU1BTL76iVpHRwiskKh8Oc
 LUmaXKFQyBUv5dgZjUZG\nd9K4hB56Go0GZ8+eRSaTYWsyLYkDgQBv36mSp4ru448/Rmfnw8uUgEOkjiF2tE6nQ319PcLhMM+i\n5XI57t27h/7+fh4jEVtjbW2NOyYi4Ol0OoZSUWI7GZhIY5/P53Hy5El2GdJo4dNPP0VtbS26u7sx\nMTHBQbV6vZ4TeWhp7nK5sLm5yaMkyoKkrECJRMIzWjKREDO7uroalZWVj9H0LBYLzpw5gx/+8If8\nABUKhbBarXzgErZBr9ez2sJut7PJCwAfomRHpyKA2Ds02iL6otvtxuTkJJ5//nkeV5F70ev18udH\nyg0yG5FSZ2VlBZFIhGP8yLodjUaZREicbFoek3yVVFzkhE6n00in06yYOTw8ZPcx+RfouiWHrU6n\n45FbOBxGJBLhMcuTvv6fouctA6gEYP7if2foLwQCwf8G4E8B/D6AIQAZANcEAkHZ/+qL7uzsIBwO\n49atW/jfuXvz2Mbv8+r3UCQlLiIpieIuURS1kZJI7dJom9Uz9kzGk9hOxrGTNDcN0hv0jxZoURQX\nKAKnL4qiS/C2AYogb5bmOk7SGInHTjxjj2fGM5pVI40kaqWojaskiqQoSiJFUpTE+8fkeWBf4LYu\nbgO8LgH/EcxEtiTy+3u+5znnc6LRKFPtPnqlKy4u5q44ckvYbDYUFhZic3MTKysryGQy/MvRaDTc\nICGTyVBTU8MTJcGJqIxzZ2cHq6uryOfzqK6u5mqpzc1N1s5o2hSLxTh37hwD3kn2EIlE0Gg0TDIj\nWAtNSTU1NXA6nSgvL+fyUGpLJryqUChEbW0tu1Xo+4zFYkgkEvw1KQRUUFDAU0J9fT36+vqg0Wj4\n+i6Xy7G/vw+BQMBkMfoZlpaWIp1OI5lM8gKNAiB+vx9GoxFTU1O4desWR/R3d3cRCoV4sh4ZGcHQ\n0BBMJhPcbjfrxRSpJb4FLWCBp64Lahrx+XzsD7f
 b7Yyrpdado6MjyOVy2Gw2CAQCzM7O8i2nu7sb\n5eXlKCkpQUtLC09+sViMyXCk9er1ej5McrkcGhoasLe3x57nS5cuoaysDGNjYxgdHeVCh0wmw9Vg\nhOxcX19nr/bY2Bh8Ph8vd0mWIk8/VViRtEbOkrKyMi442NnZ4Vovk8nEBzEts6kggZbD5A4ify9V\nZG1ubmJ9fZ11dMLXkv5dWVmJs2fPorW1ldGy1GC0uLjItD2FQgGhUMj43J2dHSwtLfE+hfjNm5ub\nXGRAByMdxKQ7k7WNbsj0c11ZWcHCwgK7ShKJBC9WKdBG7PVAIMA8F+DpUKDX63lYUKvV7N2nQ5m0\nbjpcqTNze3ubH8xlZWWoq6tjFg2Fccg+SRZLwi+srq5iYmKC7YbU8Ul9p3RWUVXdJ339vqSPg3w+\n///VM/OnAP5HPp9/FwAEAsEfANgA8DkAb/57X5S+YZpCSD+jQ9rv98PlcqGlpQWNjY1cACqRSPiA\nEYlEUCqV7EVVq9WsTwUCATQ2NnIkWKfTMUv66OgIW1tbsNlsUKlUPIUTA3hychIDAwOor6/Hw4cP\n+RpEizsCAdEUQU/jcDgMnU6HqakplJaWwmQy8ZubcJNE3aIiAprIjUYjtz1Tj+HCwgJzfymtR/5W\n0gWPjo7wzDPP8Js2FAqxTk/X4ng8zuktOsyov3B3d5ev8uQtJspfLpdDZWUlT3BjY2O8jW9sbMTj\nx485ciuRSOD1ej+24LHZbPD5fJidncXOzg7q6+vxm9/8hrsFc7kcWltbeaNOjdu0bJRKpXyt7uzs\nxOLiIqxWK1vx6M/paksPKKq5ouvo7OwsI2EJICQQCLC4uMhERnIVUAXb8PAwMpkMU/ho2qPr8v7+\nPv//jo6OmB5XVFSE3t5ejrKbzWZsb29zcs7n80Gv10OtVnNyj7C4RFE0mUwIBAJMaKRuTGK+EMWR\nbof0ntzZ2WE2dzQahcVigc
 FgYObH1tYWnnvuOVRVVWFycpLxqNlslp0aADA6OoqdnR1UVVUhkUjA\n5/NhfX0dQqEQAwMDqKqqYkAaSVRCoRDr6+sshRGJcHJyElVVVfyzF4vFnHhtbm6GQCDA0dER31rp\nlk0doF6vFxUVFUilUuwmoltifX09g7pEIhHfcqm/kmh6lCxVqVRYXl5mUiLp+NS4k06n0dTUhCdP\nnqC6uvpjCWmTycQ3M5FIhPr6etbTAfxvoVHXCQSCVQAZAI8A/F/5fD4oEAiq8XTCvkV/MZ/P7wgE\ngscAevEfHNRUWVRdXc0LMCrBJF2KwPWrq6usPc3Pz+PMmTMsLZCeSA0TAPgA9fl8uH79Os6dOwe1\nWg2hUAjL72p9Njc3eelBT/lsNgu9Xo/e3l5utGhoaGAw/JtvvonBwUEoFApcv34du7u7OH/+PGpq\napDL5RAOh7GwsIC9vT10dHSguLgY8XicN8zxeBx7e3vw+/0YHx9HR0cHa8qpVIrJfH19fcwRICYw\nffByuRxGR0c5Mba3t4dLly5xQzRNDmRXm56eZs14bW2NDyS6flP1GOm8tbW1DOaXy+X8waGJ6NSp\nU1xMkEwmYbFYcHBwgMbGRm6cSSQS3HNH+wOVSoWzZ8/CaDRifHwcYrGYORYUXsnn83xTIQwtabKx\nWAzLy8sYGBhAPB5nHZ44J8QhX15eRjKZxL/8y7/gxRdf5PfD5OQkg72i0SjXq7W1tUEul7OvXKPR\noLy8nFGX5GOnklSdTgfgqSeXLH7EFZFIJMxB6e3t5SUn8TbS6TTq6+uxtbWF0dFRGAwGKJVKnDp1\nCpubm3j06BFP3LOzs1Aqley8oYQeyQUEGSOM6fHjxxkV6/V6uXx2ZmaGH8YUe6aHisFgwNe+9jWs\nra3xgyyTybCUQdF60np3dnYwPj6O9fV1voWtra2hvb0doVCIPdF+vx/19fXo7+9nGW9kZAS5XA4l\nJSWMP
 6BFcSQSQTqdhsFg4G7E7e1tWK1WtLa24q233oLX60VXVxemp6fhcrnQ3d2NwsJCPsgtFgum\np6fZGun3+3Hq1CnWrQlfSpo8pQvp5zI+Pg6n08ly6t27d9HV1YWjoyPodDqsra0xx564J9TbenR0\nRJyPT/T6fRzUwwD+DwAeAAYArwG4KxAImvH0kM7j6QT90dfG7/7s332dPHmSAwmpVIpTf+l0GkVF\nRQzfoemPNr3FxcXMfujo6IBEIuEWCuqTI9xoaWkpqqqqoNVqudyWvg4tfEhzpane5/MhEong0qVL\nXMHU2dmJoaEhtLW1sQzx/PPPMzeamj20Wi3+5//8n+ju7oZAIMDExAT8fj/a2tqYoxGLxfiKSEyE\nwsJCXtxRbD4SiaC5uZnDA1arlRnR5DUnCYT86HK5nIl9ZWVlrKURYa6uro5boqnXz+l0YmJigiPw\nZOcDwBOS3W5HT08PzGYzysrK4Pf7sbi4CI/Hg5qaGkxNTcHpdAIAvF4vTx0UQwaeuk5u3LjBPIXB\nwUGkUiksLi5y9ZRUKkUwGIRareYdAkk6MpkMn/nMZ7C0tMSFAxSSoq9PrTtCoRDPPfccLxPz+Tz7\nhUk2IbeG0WhkHy8FJUjqaGtrw/z8PAoKCtgNRMhZqrX6aMlpJBJBdXU1jEYj7t27x/wSWprRgs3j\n8SASiUCtVnM5cU9PDx++Op0O5eXliEajePjwIYexdDodM9gB4Itf/CJ+/OMf4/DwEBUVFUy6oyow\nYlLTMDQ1NQWXy8UQLkInyGQyTE9Ps1MnmUyyHLe1tcW3Jro93r9/H9/85jc5Dq9QKFBVVYVUKsXt\n6aurq4jFYjzA+P1+PP/887yUp+qrjY0NlJaWcov95uYm710EAgGTFX/xi1/AZrPx3omq3EgOEYlE\niMfjjLfd2NhAZ2cn5ubmuL3GaDRykEylUsFqtfJDaWxsjKvu6DwKBAKoqqpilvbq6i
 oz8ilkR4lW\nmr4/yeu//KDO5/PXP/I/ZwQCwQgAP4DLAOb/f35tbG9v49ixY3jw4AGL/TMzM/wBJHvc1atXYbVa\nEY1G2YqjUqkwNTWF2tpaTveVlJRwCqyrqwuJRAInT57E8PAwzpw5A7FYjGQyiVdffRUej4eh46lU\nCsPDw1hdXcW5c+dgMBhgs9ng8Xhw8+ZNnv4WFxe5yooWHSQnULhGpVLBaDQyJayhoeFjDNzFxUUI\nBAJIpVLmOre3t2N/fx9utxvr6+vo7e3lp31NTQ0mJiZ4WWYwGNDQ0IDDw0Ncu3YNdrsdbW1tuHDh\nAlwuF2pra3H79m1ugSkpKWE07OjoKPR6PbM1XC4Xtra2UFJSgidPnrBWHI1GsbKywpSyO3fu8MLz\n9ddfx7lz57Czs4Njx45xw0owGMTly5cRj8cxPz8Pm80Gg8EAkUiEBw8ecL/k48eP2SLl8Xi43eTw\n8BC9vb1wOp2IRqNQqVRMGqR0pd/vZ12ZHB4NDQ1QqVQIhULw+XzY2tqCw+HAiRMn8PrrrwN4+hBe\nWVmB3W7nwgOJRMLXVfJkA2DnEfC0VMBkMmFubg69vb0wGo1sEy0sLOSDoKKiAtlsFoODg8hmswzg\nIomHHAYUPurp6WGvMXmXl5aW4PV6cf78eayurqK4uJgtYjTVEz3v+PHjGBwcRCwW47KCX/7yl+ju\n7obZbIZer4dEImEZLZFI4Ny5c2hqasL09DT7fgcHBzE7O4uWlhakUim+va2ursLj8WBmZgbb29vI\n5XIwGo3o7+/H7OwsvvSlL+HBgwfQ6/Ww2+3Y2NiA1+vFysoKrFYrh5bcbjfKy8vR1NSE48ePIxwO\n480338Rf/uVf4v79+/wwIJmNtGTCyFJ7ulwuR39/Px+otFisrq5mWx11OUqlUkxPT3MJw8mTJ/HT\nn/4Uer0eDocDSqUSiUQCXq8X0WgUQqEQDocDfX19DLcCnjbXm
 81muN1uGAwGzM/Pw+FwoKmp6WP2\nYa/Xi/b2dphMpk989v3e7Xn5fH5bIBAsAKgFcAeAAE8XjR+dqnUAJv6jr/Wtb30LxcXF+OlPf4rS\n0lI+hIxGI2praxmL+Otf/xqDg4OwWCzMfF5fX8f29jbMZjNSqRR7f2l55ff7ceXKFdhsNsRiMdy5\ncwcvvPAChEIh3G438zFUKhUmJiagUCjw0ksvYWVlhSegW7duIZvN4vTp0xgZGWFmR0NDA1t1KCIt\nFouh1+sxMTHBsCLyoOZyOTQ1NXFfHcHry8vLYbFY8NJLLyEQCGBoaAivvPIKbt68iTt37qCjowMP\nHjxAXV0dLl68iIWFBTx+/BhLS0uoqqpCdXU1WlpasLe3h3/8x3/E17/+dXR1dUEul+PYsWOoqamB\nUChk/nJVVRUaGxsxPj4OjUYDiUSC5eVlhMNh/PKXv8Tq6iouXbqEoqIiNDc3Y3t7G+Pj41Cr1Th7\n9ixb45RKJSKRCFpaWvDee++hpqYGNTU1HDZwOp0oLi7mBBexHbRaLaanp1FRUYHOzk4OsgwMDHwM\nLqVSqSCTyTA3N4dsNouxsTHU1tZy63pfXx/q6uoQi8Wg1WoxPz+P7373u4jH4xgYGMCzzz4LhUKB\nX/3qV/j2t7+NH//4x7h8+TJ+9atfYXFxEZ/97GcxNzcHrVaLmpoabseZn5+HSqVCMBiERCJBU1MT\ndDodhoaG2IH08OFDjjlrNBouNhgaGkJPTw+uXLmClpYWHD9+HH/1V3+Fzc1NlJSUMGdDo9FwoTM1\n2NC+wW63Q6/X49q1a2htbUVhYSHOnj3LEen19XVeFt+7dw9SqZTlwcbGRtazm5qaYLVaceXKFU6h\nzszM4M///M/R3t6OZ555Bt3d3YhGo5iZmYHZbGY+zurqKh49eoSCggLY7XacPHkSNpsNd+7cgdvt\nRjabhdvtRkVFBYelPlrJRYExglrRHoB+
 X4WFhbh//z6CwSD8fj+GhoZw7tw56PV69iNns1m0t7dz\n0YVOp+ODOZ/Pw2az8QFKWIdAIIDW1lak02k8efIEiUQCP/nJT1BSUoK2tjbes4yMjKC2thbt7e1Y\nXV3lHdfDhw+RyWQgFApx6dIlpFIpvP3221CpVHjppZcwMTEBmUyG4uJihEIhXLlyBaOjo2zZvHLl\nCpdUfJLX7/2gFggExXh6SP/f+XzeKxAIwgDOAJj63Z8rAfQA+Jf/6GudOXMGly9f5usD8V1JY3K7\n3YjH4+jv70dTUxN7k4mfoFKpsLCwALFYzNt/gUDAoRObzcYfxkgkgtu3b3Os++LFixgeHsb29jac\nTicMBgMMBgPEYjFzleVyOV93Tpw4AaFQCI/Hg+LiYraL5XI5WK1Wbj43mUwYHBzkzka60v/2t7/F\n0tISOjo6MDAwgFwux2korVYLi8WC5eVlvP/++7hw4QJmZ2dRXl4OnU6Ho6Mj+P1+lJSU4MUXX4RM\nJuPoNP33aDQa3Lt3jwFFdIUVCoUM1CeW7tHREVwuF77xjW9Ap9NhcHAQT548gcViwe7uLj788ENE\no1FUVlaitLQU4+PjuHfvHmNdW1tbIRQK8aMf/QiDg4Pw+XxQKpV82CoUCnbU0H8/QYMePXqEP/uz\nP8PU1BS0Wi3GxsYY4Xr8+HEYjUamudEVmBwGuVwO7e3tuHbtGgCgsrIS4XAYHo8HfX19MJlM2N7e\n5sn0xIkTeOONNwAA4+PjqK+vh9/v50Xg6uoqN19XV1fDarVibm4Og4ODkMlkjM4lLsW3vvUtNDY2\n4tVXX0U2m8WjR48AADqdDm1tbXj77be5hf7v//7vUVtbyyUQJKmQK4NkuevXr+Py5cv8PdbU1PAt\ny2w2MzUvm82yh3h8fJzrq0wmE5577jkUFxfjb/7mb/CVr3wFCwsLCIfDiMfjDKGqrq7GP/zDP/B1\n/dq1a+js7GQ0sEq
 lYgnxwoUL2Nvb43Yh6gP83Oc+h5s3b/Ktgvg0Wq0WwWAQRUVFLCmSLLS4uMg7\nDoqav/3221z80NHRwaxoki2oVMDr9WJ5eRllZWW4ffs2BAIBLly4AJVKBa/Xi9OnT/NNier4ampq\nOBD24osvwuPxoLGxkZfp+/v7kEgkLC0tLCxgd3cXVVVVePz4MfL5PO7fv49UKoW+vj64XC5uHLLZ\nbLh9+zYzvvv6+tDd3Y1kMolMJoPFxUV87Wtf+0Tn6O/DR/0PAH6Lp3KHCcC3AeQA/Nvv/so/Afgr\ngUCwBMAH4H8ACAF45z/62v39/Xx1IOlhd3cX7e3taG5u5o2yTCbDxMQEdnZ24HQ6sbCwwAc5YUbD\n4TBTtFZXV3m6s1gsWFlZYR0wnU5zd97AwAB/jaOjI4yPj/NWf2ZmBhsbG3juuef4aZrNZpFMJlFX\nV4cnT54wbausrAyBQABLS0toaWnBG2+8AavVitdffx0lJSV46aWXPmZTy+Vy/GaqqalhK1Fvby++\n+93voqGhAWVlZYhGo9BqtZyoI7M+OUei0SgfPs888wyuX7/OYKj19XXMz8/zNbK0tBS7u7twOByQ\nyWRYW1tjxobJZMLAwAAXw7a1tWF/f5+7EzUaDQYGBriHsqKiArFYDH19fZDJZPD5fDg4OMBnP/tZ\n3L17lyHra2trGBkZ4UUWLaDo4UHe9u7ubg7+UJjA5XKxha20tJS1262tLaRSKWYfazQa1NbWch0Z\n9WyWlJQgEAigvb0dwNPG9Orqar76VlZWsv+a9ghWqxVFRUXY2tpiTnNlZSVOnz4Nn8+Hr3/966is\nrIRKpWJ5hW4XxC2hAAhJBJSyHRwc5H1MPB7H9evXkc1m8bWvfQ1zc3MoLy/Hm2++yeB+uVzO9sfJ\nyUkux5DL5dz6ffv2bTQ1NUEul+PNN9/EP/3TP/F70WAwsFtGoVDwz7asrIxLej/44AM0NDRwY3ci
 \nkWB7JfVCulwupFIpTE5OQq/Xo6WlBaOjo6wRr62tobGxEbW1tUzWS6VSfLASgW5kZIR16O9///so\nLS3F2bNnAQBDQ0NcjkGyWyAQ4Eah4eFhfOUrX8EPfvADCAQCaDQa3Llzh612VPxcV1fHBcJkC6QE\nZCAQwM7ODrRaLS+Ja2pqcHBwwA9COouOHTuG8fFxrK6uwmq1cqBMqVSir68Pm5ubXJZ7+/ZtKJVK\njI6O/qd81L+PiboCwM8BqAFEAdwHcCyfz28CQD6f/3uBQCAD8H08DbzcA3A+n8/v/0dfWKfTcTqP\nNL3a2tqPcYHJ3E4gc7LvEOhcJpPxUoY2/y0tLXyd29nZ4cZwOuBu3LiBZDL5Me+lWq2G3+/HrVu3\nmMyl1Wrx+PFjSKVSLjitrq5GKBTi5heq6vJ6vYjFYlwtLxAI8I1vfINN/uSqcLlcqK+v54JZgUCA\nK1eucOEuNVucPXsWGxsbbLWjtN7W1ha8Xi8KCwuZ211fX8+e3dXVVQ7bkG9aIBBga2uLgwP7+/to\namrC6OgovvnNb+Lq1atobGyEUqnE9PQ0tFotlEolpyepsJS2/GQvBJ4uDouKinD27Fku2aWpmq6S\ntOyTyWRoamrCL37xC16UAk+ZLyKRiGUhwoySu4XgRAUFBUgkElhfX8crr7zCIQay81EPpM/nw40b\nN9Db24uDgwMAYAcMccaz2SyGh4extbWFtbU1pFIpRKNRJJNJ1NTUMMRerVZjfn6enSnkbvB6vUxb\nIxmpqKiIAyJE2ROJREilUiyPUQWZVCplDC8BjWw2G/x+P/R6PTO8g8EghEIhlxqTNtre3s4c8Hg8\nDrvdjsLCQvZFUzKwuLiYi3rpd0tBlJWVFTQ2NvLBW1FRwYWxt2/fRiKRQFVVFZqamnDu3DmMjY3h\n9OnTfGA/fPgQ169fx9HREcPBCOpFkXtyap09e5b7MD//+c/D5XJBLBYzga6
 iooJdKpROzGazDGD6\n2c9+Br1eD4/Hw7TI3d1d9o5TGIg+VyQtkTNDqVRCpVKxbZWwxuQEu3nzJrRaLaxWK1ZWVnDixAmE\nQiF+X9FNnVAVNTU1iMVi3FBEydBP+vovD7zk8/lX8vl8RT6fl+bzeXM+n381n897/19/57V8Pm/M\n5/OyfD7/7CdJJQJPUY5er5enBZlMxl7dx48fw+VysUeUJq2xsTE0NDSwKZ88rzKZDNFolG0/1JZC\nybuPpvuCwSAvLoCnAROtVgun08mWHZqwSkpKUFdXh7W1NRwcHCCZTHI5KUFxbt26hd3dXS5nDYfD\n2Nvbg9VqZUZJKpVivVCpVDKuMpPJ4MyZM+jo6MDMzAzOnj3Ly5GOjg62KubzeQb2bG1t4cmTJ/D5\nfFheXmaw0O7uLk8RVIMFAEtLSwxMJz8tAJjNZqytrSEej8Pj8UAmk2FxcZE1VKqBcjqdaGpqYloc\nuSNIKzcajZiensbVq1cBPOVqkBvCYrHwtEuTt91ux8DAAMxmM6xWK2pqarCxsYFbt27B4/EgmUxy\n2TGFcSoqKrgFhZgX2WyWo+lUdEv40N7eXkQiEbbgWSwW+P1+RKNRrK+vY3V1FRsbG8jn8zCZTNxk\nTmWlSqUSqVQKy8vLkEgkbIt866234Ha7IZFIOBxC31MwGOQrPDEzCI4ll8s5vSkSieB0OmE2m7G7\nu4tsNov5+Xk8efIEBoMBWq0WGo2Gg1dUf7W7u4uSkhI0Njayjp9MJvHw4UNGD9ASnJKNFMXWaDSc\nMXC73fje974Hs9mM8fFxdHd3s82Qynu1Wu3HYEVer5cRolqtFu+99x6am5uZA5NOpzE9PY2ZmRke\nFpRKJRoaGlBVVQUAXNM1ODiIkpISNhMUFxcz7bKwsBDJZBKPHz/mej6z2Yzq6moMDg4yKI1IlVtb\nW5xQJCAZtbt3dnbC6XQiEolALBbDaDSipqYG2WwW77
 //PktsiUQCZWVlcDgcjGiIRCJcO0foBgAc\nq6euxmQyiUePHmFmZoZTsJ/kJaBt9f/OL4FA0A5grLOzE4eHhwCeTluUCtvf30c+n2ehnkINALj/\nMB6PI51OQ61Ws2sjl8vx9ZIsa/QGoEljeXkZarWa2QbA0+YXCodsbGxAIBAwJD2bzbJOqFQq2Q1A\nzcPr6+vMBZBIJJxWo8OfoEWbm5scwKFyzYKCAuZ/iEQiLC8vs1ZJKb3t7W2OctP3R/8O0gkJPr+0\ntIS9vT1UVFRwhx5daSORCDN+P6rN0pRKE+3MzAwXxtLESj5lmvwo4LG5uQmj0chcFrp1qNVqRCIR\nbG9vw2QycZkr3WDoTU+e98LCQsRiMf59ikQiHB4essRAi0nq3qMHNEXq6fdNAdI/rssAACAASURB\nVAsK/mxsbPDD/fz584whpXbwdDoNsVgMkUjEjiPSZskiSSGQoqIihMNhTqYpFArGCBwcHECv13MD\nj1qt5gfa3Nwcp/fIM0xuFaFQ+DFORzgchs1m46VZNBrlz8X29jaOjo5YSyYqnEQiQTAYhMViQSwW\n4/Te/v4+pqenOSBFnzPi4BAHe2dnh3XxwsJCHB4eorCwkGU++hzS0q2oqIjr6mw2GxczkF+c3qcb\nGxvcZXh4eMitQ4FAADU1NVhcXGRpk2yZJB0cHBxw4zz1FAqFQr7l5XI55mZTaIz+Dv39mZkZDA4O\nQiwWw+v1QqlUsmy0traGaDQKvV7/MfhYeXk5MpkMZDIZdnd32RpKlk8Kg9F7hCTESCSCo6MjOBwO\nPHjwAAA68vn8+L93Bn6qoEwfTWFRmo38l0SpIlQjTSl0BaYrT3t7Oyf2ioqKsL29jWQyycAiKh2Y\nn5+H2WzGT37yEzgcDj7IAXAiiQ5wYjGQrEFx73fffRc9PT08AVIJAVmu6A1HVfc0oa+vr6OqqgrZ\nbJZ93jabDTqdjn2ker2eXSxEr
 Jubm4NGo+EDt6OjAwcHB/zhIqtWMBjk7XtXVxdHkik8Qtd80qjp\nYZDJZOB0Ovm6vr29jQsXLqC8vBxerxfxeBzl5eXMWWlubsbKygqkUilaWloQDAZRXFyMuro6LCws\nwOfzMat7dXWVi2SJEdHV1YVIJILz588jEAjA7/fD7XZzd6FcLkcikUA4HGZdlVgrpOOmUilu06CN\nv0Qiwc7ODuLxOHO3ib9BB0k4HMbx48dx/fp1RhDMzs4iHA6joqKCIU4ejwfPPvssotEo+vr64PF4\nuHWmp6cHWq2Wf3YkmyWTSb5a00RaUFCA7u5uLi8oLS2FTqfjAYMCJ1QdRfISNbM7HA5OWBJSVyaT\noba2FltbW4jFYtDpdEgmkzAajTAajVhcXGTsJiVs6bNhs9mYa3Py5EksLy9jb2+PGe+9vb38EKYm\nFKq1o+RseXk5CgsLUVlZiVwuh4WFBdTU1DBXm1DAhYWFnKglGZNq0bRaLWvkJpMJBoMByWQSCoWC\ng0TZbJbPBWKcU/K4sLCQHUyZTIY92Q0NDcxYoYc2SVi08JudnUVdXR1LbgKBgBepOzs70Ov1WFtb\nQ21tLQQCAd/OLRYLBAIBy1RktaTPHbWuk5Xyk7w+VQd1Z2cn2tvbUVNTg3A4zC0okUiEi1YpElpc\nXIzx8XF0dXWhuLgYFRUV2N/fx+nTp1nPpjZgci5Q6IQmQnoYNDc389RJfk8q/6RrKmlTiUQCGo2G\nuQddXV0wm83Y2NhgNgEALC8vo66uDm1tbbBYLLh69SpyuRzOnDkDt9uNRCIBl8vFIBy6NlNCsru7\nGx6PBxUVFbh37x4GBwdRWVnJUyeBgTY3NxEOh2EymRikND8/j66uLo69kg2MaszIEysQCGCz2XB0\ndMSHc11dHYcwiPRGgSO6LpIUYTabuX6qvr4et27dYkulRCJBfX09WxfpRpDJZLg+isqMzWYza49E\n/CNKIi0d
 pVIpx/vX1tbYCrm/v4+Ojg4OQ1H6MZvNMs+aDjSSOa5du4auri6cPn0a0WgUHR0d3MRO\nBD2ydslkMvT29sLtdnNk2Gw2o6qqiqPhFLfXarU8zRG0aH9/HwUFBWwlfPfdd9HW1oaLFy/CaDQi\nn89zF18ul+PbCfXtqVQqFBYW4uWXX8b4+Djm5+dhNBpRV1cHpVLJEpTL5UI6neZJuampCW1tbfD5\nfPxwCYfDKC4uxvnz52E0Gj9WHmu329mTTBMjURkFAgEqKir4Rko8EavVyhZYkUjEqVOCH6VSKebz\nvPvuu3C5XOjs7EQ6nYbFYsHe3h7cbjd0Oh0XyBYVFbFUQpN/MBiE3W5nNxd5xc1mM3v+1Wo1RkdH\nEY1G0d7ejra2NpZJE4kExsfHMTAwwOhXkt/q6uqYB1RQUMCBl9nZWdTX1+Pg4ACtra2YmJjAgwcP\noNPpUFNTwyUa1FlJZ4bBYEBZWRnbdO/evfuJzr5P1UGt0WhgNBqhVCq5TNNoNEKv17POTP2CFFCg\nSaaurg7BYBDz8/MM0CfHQjabRSQS4eUR2Zw+/PBD7j/UaDRIpVLMF4lEIigtLUVRURF3rdntdo59\nFxQU4Pz588yTpoeHyWRitkAymWQgT0VFBaanp3nZFI/HedIpLS3lpc3c3ByKiopYayY+M139aNm6\ns7ODjY0Npu7R36MYvN/vR3t7O79Rt7e3+cMUi8UQi8WQSqUQi8XgcDggFAo/ZtUjG1lrayu3dxCk\nihwq8Xgc1dXVODg4wJUrV5gdPD09zb2WAHjRRvF5gkQFg0FeANFCS6PRMALgo0EmhULB9WHkwyYX\nCNH1iFPi8XiQz+eRTCaZFJfP57G7uwuNRgPgqbyVz+dx4cIFSKVS/po2m40XdWKxmNOAsViMbZ5C\noZB/NzRNk8RG3BBKcpIso9frOaAkl8uhVCqxu7uLfD7PkzR1UZKTxWKxIJVKYW9vj29sV
 GLb0tLC\nexm6NVBkmWrYCAxlNBp5oWaxWPhhRwENGj6o2Hhra4uHHZKx6PdBC8y6ujqu5lpaWsLu7i5aW1sx\nOzvLzSx0IKtUKkbOqtVqHBwccBuQ1WrF0tISKisrGVFL3A6SGug9n06ncXR0hObmZvj9fjx48IBZ\n6lQmYLfbebdFeFJa3tNQ4PV6UVVVxaEyWgJ/FBxFt3lC3ubzeXi9XvT29vJ/ByUzCV1cX1+P7e1t\n5PN5FBUVMc71k7x+X/S838uLpmfqOqPDbm9vjzVn6kP0+/3o6OjA/fv3mSchk8lY6P8oY5kiwjs7\nO5xcImgPuRBoI275XZks+X4JBF9fX490Oo1QKMQuBrLz0LRP9qRMJoOWlhYIhUKMjo7i/v37mJ2d\nRWtrK2+/aaNObem0/ac3eTgc5oQjeaB1Oh0sFgu7BQBw4qygoADNzc1QqVTsEjh16hSOHTuGjo4O\nbkrJZDIcIaeIPF0hSUfPZDLI5/OssZaVlfHPimL5JCtNTU3h0aNHuH79OiorK6FUKtHS0sKug4mJ\nCd4rEPeXftfZbBbBYJB3DNRlube3xwtDujprNBoEAgF4PB6GH5GTgeQOOiRjsRiCwSDzpDc2NrC2\ntsZaMAC++RAlkW4RVNSQTCa595Bg+uXl5Qydp9sIMSQkEgk/7Ohgo2mZygaUSiVP14lEAplMBrOz\ns1hcXITFYkFtbS1b4hYXF6HX65kbMTU1BYPBgMuXL8NqtTLUi1wv1IhSUFAAs9nMrh+FQoHnn3+e\n/4yKftPpNDo7O1lGEIvF8Pv9HLo6deoUt6fQQ40gXgKBgBOEIyMjUKvVWFhY4PYiOsC2t7dZ9wfA\nsXu9Xs8yI5Ux00G5traGra0tNDc3M/Csrq6OK/mI0765uYmFhQWUlJRAp9MhGAxyApjkUmK0U+8k\nAJSUlDBgjG7w1dXVqKioYLojsUzoDPB4PKivr0dHRwf/EwqFMDw8
 jMnJSX4AUh0cSXajo6Of+Oz7\nVB3UZDZ3u92MFSRhX6fTsVvD7XbjK1/5CmZmZjA3N8cWOJpo6ZpOoHba4BIM/tq1a8jlcujv74dM\nJsPMzAyTwIi1e+7cOfT39zNVq6qqipm9xB8pKCiAVCplBi4toerr62G321FaWoqhoSGsr69jZWUF\nExMTWFlZweLiIi8EZTIZ0uk0Hza1tbWoqqrihKFYLIbD4UA4HIZcLueFolQq5QYMqVTKQZ8/+IM/\n4A5CqoiixhMCXdHPk8hfgUCAC0NTqRRfy2n6GB8fZ2fHR72hVMZbU1ODr371qzCZTPy7IM86TWIt\nLS3o7u7mhxsVLjgcDiQSCfT39/OyrL6+nhkWNH2WlZWxI4LCEWVlZejp6YFMJsPy8jLT6Ijkp9Pp\nIBaLMT09jXQ6jVwuh/39py7RyspKjI2N4cGDB7h//z6y2Syqq6v5Op7JZKBSqaBWq1FSUsItLDQt\niUQiuFwuuN1uHhAWFxcRiUSwtrbGvZkDAwMoKCjAxMQEIzCFQiEikQgPBjRYVFdX88BBS7zm5mYI\nhUIOclAwhrCgyWSSywmamppQXl7OIZru7m7kcjnWnsViMdbW1hCLxdghQt5u4j37fD40NTXh6OgI\nVqsVkUgEgUCAMbU2mw3t7e2QSCQcKTcYDNBoNPB6vXC73UilUigvL0djYyMvgpVKJXZ2djAzM4OV\nlRUYjUZEIhHMzc1BqVSyFFleXs5FACSbFBcXQ6vVIhQKsfYbCoXw+c9/HuXl5TCZTDg4OIDb7UYk\nEoHdbkdHRwejhel9Tgd8JpPhsBxhKSi+T+UjlKWgIoDNzU0YDAao1Wo+h6iX0WQyYWVlBQ8ePGCA\nGC1SP+nrU3VQFxcXo7GxkZcjm5ubiMViDEKndo+amhouof27v/s7rq43m82Ix+N47733cHh4iJ6e\nHvZm7u3toa6ujiUNWprRQUXddvPz81xSsLG
 xwdP9yMgILxKo0HJ3d5ebWqLRKLa3t/kDOzk5CY/H\ng6amJhQVFeHLX/4y1tbW+IpHS9CtrS0oFAqcOXMGp06d4puEXC5HXV0dlpaWuK7o7t27KCgoYAvc\n6uoqAoEABgYG8Pzzz2NiYgKPHz+GyWTC4eEhnE4npqamEAwG+eChpRHZxWQyGSwWC4qLi/HOO+9g\nbGyM64kooh4Oh7m+iXrmCIR148YNtLa2or6+nrfo6+vrXDRADx0KYpDenc1msbKygmAwyPuEpqYm\n1NTUIJlM4vr161hYWEAymUQoFIJYLOYyUpK/TCYTvF4vvF4vt44YDAb+nZCn2m63s12Linu9Xi9L\nUeQgIkb548ePUVRUhJ6eHuaaU9P7888/z0XFJJs5nU6IxWJO3YVCIUxMTGB9fR0PHjyAQqHAnTt3\n+CFBlEOiKpJzgJrkk8kkWltbodPpEAgEUFRUhL6+PjQ0NCCdTqOwsBBKpRIWiwVtbW3sUNJoNLBa\nrTCbzVAqlZidnYVUKsW1a9dw7949JBIJHD9+HF/60pc4YUgyjl6vh1ar5RDN3NwcLzmrq6u5VHdn\nZweLi4scoGpubsbY2Bg0Gg0ePXqE9957D7OzswxIo0AJFQ6n02lsb2/zeyEej+PFF1/kg7W5uRkt\nLS0cNKK9kd/vRyqVQjAYxOrqKjcjCYVCvPvuu8jlcpy7SCaTmJmZ4R0DHdSELR4aGmJ/9fLyMiYn\nJ5mDnUqleBoHnjJVlEolM2joxk9Wv6amJphMJgZ/UQ1eZWUlKisrP/HZ96nSqMltcenSJRb0FxYW\nuFAzFothaGiItVeZTIYbN26wzkTITrKiZbNZdgksLi7i6OgIAwMDGB0dxcOHD/Hqq6/iO9/5DhwO\nB8sHVKNEOhRtdgk6v7m5iebmZshkMjx58oTllKOjo4/pXA8fPsTh4SEuXbqEpaUl/OEf/iEuX74M\nh8OB3/72t3xroMn34O
 AAo6OjyGQyGBwc5PJasm8RJzcejyMSiWBqaopvD7/5zW+wsbGBcDjMFkCN\nRoMf//jH3IvX1tbGG3PCf5aVlUEqlcLlcsFsNjNIamNjA8ePH0dpaSnHhqlJ+qWXXoJOp8OdO3dw\n+vRp6HQ6uFwuRCIRnDlzhq1gxcXFfMgQ+Wxubg5SqRQGgwF6vR5f//rX8cILL+D48eNwOBzcwn7t\n2jWWaVKpFHvpKyoqkE6ncfPmTbzwwguoqKhAIBBAf38/3G4368jEYPholVdRURFfl4GnhzKR6mKx\nGOx2Ox49egS/3w+bzYaCggLs7u6iq6sLOzs7qKur46g+LbkaGxsZRk8luXNzc6ipqUEmk0FbWxuU\nSiXEYjHsdjtaWlqY4yGVSvmhQbrt7du3IRaLcXR0hEuXLjEUrLCwEG63m3VP+ixQIS3ZLQlcRS6N\nX/3qV+jv7+cAD0X3CbtADqR//ud/ZkDSn/zJn2BmZgZOpxNarZYDRhSMokWawWCATCZDWVkZAKCh\noYFDIpubm5iZmeH3xuHhIZcc0D9UnOB2u2GxWOD1eiGRSKDVatHY2Mie9Xg8zg00NpuN91d1dXXw\n+Xy4cOECvF4vGhsbsbKygnQ6jWw2y3ZV6lK9c+cO+vv78c4776Curg7r6+scWjo8PERVVRVXgG1v\nb3Nn4uLiItrb27GyssKRd0ITEGxLLBZzOOvg4ACHh4eIRqP/qWSi8LXXXvuvPU1/D69vf/vbBgD/\np8ViYa9mPp/nSYXE/kAggGw2i9/+9rcoKSlhkE88HseFCxfYHkZQclowHB0d8RZaq9Xi/v37+PKX\nv4yCggL89Kc/RVNTE9RqNd5//32WIDQaDVdvmc1mfhjcvXuXKWn7+/uoqKjg1g5K1JE+XltbyzQ5\nh8PB/YtisRgvvPACFhcXEQgEeBJPp9MYHh7G9PQ0RkdH4fP5kEqlYLVaeXlHPuVMJoNoNIqxsTH2\n2
 546dQoymQwPHz7kIlWpVIrW1lYm7NHU6/f7sb6+zjHdxcVFrK2t4ZVXXuFgD6WylEolQ5ko2Xlw\ncACVSoXJyUmMjo6iuroadrsds7OzcDqdDP4n2UCj0UCr1aK4uBijo6NYWlpCT08PFzFMTU1BJpNh\ncHAQnZ2d0Gq1KCgogM1mw7FjxwA85ZUrlUp89rOfxeTkJHQ6HTfu3LlzhxN5Go0G0WgUh4eHyOfz\nuHfvHsbGxpDNZtHV1YW33noLRUVFfAC/+OKLPAlXVVVxCIhkCJ1Oh7m5OSQSCVy7dg3Ly8sfWyhS\nkKa0tBTPP/88JBIJJicn4XA48Bd/8RfcQCMWi3Ht2jX09PSwv7m8vJyXnWq1Gl/84hdRVlaGd955\nB52dnWhqasLGxgba29tRWVmJq1evcvADAKLRKHw+H1QqFdbX1zE5OcmHN4GB+vv70dvbi+XlZV5g\nkvZrMBjQ29uL2dlZ+Hw+lvjo/TM0NIS9vT2Ul5dDo9FAoVBgdXUVMzMzyGaz2NjY4KLXw8NDOBwO\nuN1ubuqhxSDdVM+ePcv+dYvFwo0rdrsdNTU1mJ6e5r1ANptl2a6vr49dH2NjYzh27BiEQiGGhoa4\nh5EeopQ27OnpQTqdhsvlwuLiIi5dusQ3A4fDwUNMRUUFV+Ol02m0t7ejuLiYMxFbW1tMmHzjjTc4\nmKVWqxEKhfhmSxRMuVyO4eFhpNNp0qn/12uvvbb+752Bn6qDurGxEceOHcOtW7dYxtjc3ITVaoVe\nr8fs7CyuXr2KtrY2OBwOfPGLX8Sf/umfwmg04sMPP2T/5N27d/H+++9zjdaHH36IYDCIhoYGHB0d\nobKykq9Q7733Hi5dugSDwQCn0wmVSoV0Og25XA61Wo1EIoFf/OIXqK+vRzAYxLFjxxCPx/Hhhx8y\nq1alUjGYv7i4GNlsFqWlpdBoNPjXf/1XrKyswOFwIJ/PY2lpCc3Nzdjb28Pt27
 dhs9lgMpkgFovR\n29vLKcWmpiYIhUK8+OKLuH79OlvICHbT3d2N5uZmjlhT4cH4+Di++tWv4tGjRxCJRJibm8PW1hZP\nN0+ePOFlh1wux4ULFzAyMoJgMAipVIof/ehHkMvliEQiUCgUHPIgt8j+/j5/mJeXl+FwOOB0OtHW\n1oaJiQk4HA6OIdfV1aGkpASTk5OYnZ3liqdkMom5uTmcPn0a6+vraGxs5KtmKBRCMBjkclKKjbtc\nLj7wIpEIXnjhBVy7dg0SiQR+vx83btyAw+GAw+HArVu3mN9AaEq1Wg21Wo2f/OQnWFtbwx/90R9B\nq9VieHgYS0tLSKfTsFqt6OjoQFtbG6c4NRoNNwIplUr4fD7Y7XYuLiBinUQi4Zby119/HU6nk6WD\nrq4uVFVV4cqVK5iYmGBcgcVi4Yfh+Pg4A/7X19dRUVEBh8PBZREkA66srECr1XLXo9lsRklJCT8I\ne3t7uc2mpKQEp0+f5pvP0NAQs8+prJmShrW1tQwHIz7G+Pg4PB4P16Cp1WpO0AoEAszNzTHruaKi\nAh6PBw0NDSgtLcXk5CRGRkYgl8uZfHf79m3k83kolUpsb2+jtLSUHxgmkwl//dd/zYhiWrKn02mk\nUinONbjdbvj9fvzmN7/BwMAA6urq0NjYyFgEktKon1Mmk6GiogIffPABampqEI/HMTc3h42NDXzw\nwQdcJK1Wq9HR0QGDwcC/g66uLrjdbjidTvT09GBnZwejo6NIpVL8QMlkMqznU7PU6dOnkc/nMTIy\nAo/HA/x3O6hfe+01iMVivPzyy5yKSiaT2N3dRSQSgcvlYu3w1q1bOHbsGJqamth0nk6n8cMf/hDd\n3d34whe+wIsJ+hAeHh4il8tBo9HA5/OhubkZV65cQXV1Nba2tthnG4vFuCJpamqKOdWZTAY/+MEP\ncOzYMdjtdoTDYdy8eZNRn4eHh9Dr9awtikQimM1mZDIZZ
 LNZFBYWIhgMIhaLYWxsDJOTk9jc3OR0\nFcVfBwYGWHcMBoPY2NjA97//ffYd+/1+yOVyBINBRCIRdqRMTk7i4sWLeOedd/DKK6+gp6cHi4uL\njHwtKiriOLnb7UYwGOSEVkVFBdcynTp1ilNihEalBWVdXR329vZw48YN5PN5nDhxAjqdDm+88QZv\n3e/cuYNjx45xGcLAwACX6FJC8NGjR7zwzefzUKlUsNlsODg4YJLd+vo6FhYWcHh4yPKSyWTCz3/+\nc/j9fgwMDCAUCqG+vh7d3d1oamrC48ePIRQK0dLSwva8zs5OZLNZTExMYH9/H8vLyzhx4gSGh4fh\ndDqZnULXX0qjBoNB7O3tYXZ2FsvLy3j11VexsrLCac+33noLHo8HlZWVXHpLh4Rer0dJSQmUSiU+\n/PBDNDc3o6ysDMPDw3wgUP0W6c0kF+XzeUilUty7dw+jo6MIh8N49tln4XK5eMlFIDJiU8Tjcdy+\nfZvTeNTnR0s+g8GAR48eIRwO48KFC3z7KiwsxPLyMoxGIxobGxEKhTA3N8fFttTbmUgkeJdAMXWP\nx4NsNguTycRUxKqqKnZqEQfl1q1bmJqawuHhIT73uc/h9OnTHG7LZrNoaWlhNxItfa9evYpQKASb\nzcZQLb1ejydPnmB3d5f9znq9HslkEj/84Q9x69YtOBwO1NbWwmAwoKenB3K5nJeef/zHf4xMJsMR\ndPJkV1RUQCgUQqFQwGAwMLeGNHCq+8rn83j06BHa29vhdDqhVquRyWSQy+WwubkJlUqF7u5uhMNh\nXn7/Lpn43+ug1ul06Orq4qjwwsICpwlporDZbMzbXV1dxcrKCqcWaSq4du0a/+CSySRfowUCATsl\n7t69i/n5eYyMjKCnpwdWqxULCwsQiUS8sFIqlXA4HGhra4PNZoPD4UBnZyd3IFZWVnIIgiKttGwh\n4BAt9nZ3dzE4OAihUMhaNvk5T548
 ifr6euRyOdy/fx83b97ktpTBwUG4XC4MDAwwAY422BqNBlVV\nVQxXp16++vp6jI6O4vDwkOFPw8PDyOfzsNvtDFInnzoVxfb29mJ8fBx2ux2Hh4e4c+cOYrEYGhsb\nsba2htnZWfj9fhwcHKC+vp69z3QAhUIhdHV14e233+a0mEAgwMzMDEf96eDz+Xw4deoUT+30ITEa\njZwelEgkEIvF6OrqYi72yMgIxsbGIJPJIBaLcfbsWezs7GBkZARarRZlZWVsE4zH45iamsLy8jJ6\nenpgNBrhdDrx61//motsqaWGHnqki5PHnaZF0ivT6TREIhE3uHR1dcFoNLIXmzCczz33HDQaDaam\nptDZ2Qm/34+lpSUGIZ05cwaJRAIrKyuMraXatZWVFej1evzsZz9DV1cXl68SQEkkEqGkpARerxd3\n7twBALbsOZ1O3L9/H2q1mv99JSUl8Hg8uHHjBkpLS1lv9/l8+N73vofCwkKYTCam87W2tmJgYACR\nSIT9zzS9t7S0oLKyEnt7e7zYJ018ZWUF2WwWQ0ND6OvrQ2trKwQCAScXd3Z28Nxzz7HfX61WY2Rk\nhKmO1K95eHj4sYozANxtSgc7FYh85zvfQSaTQXV1NS5evIjKykp4PB64XC6WcPb29nDlyhVMT0/j\n1VdfxdDQELq7u6HVavHMM8+gqKgIh4eHsFgsTGSk4Nf+/j6OHz+OmzdvMmq3r6+P23kODg4glUqh\nUCi4IGNnZ4cHvidPngD/3Q5qh8PBQG9q8CCzfDQahUKhwIkTJyCXy/mqePz4ce4OpAj19vY2x20p\nONDR0cEWur29PW6svnbtGk6cOAGRSITt7W3o9XpeyOj1eu6rI8Ld+vo6l2LShEG2PZpqiPe7v78P\nv9/PJMBoNIqFhQWYTCYoFApMTU1x80sul0M2m4VCoYDdbuc6H/Jakz4ci8XQ1NTEmn0wGOSJc2Nj\ng0s7c7kcVld
 XcevWLTQ0NECn08HhcCAWi+Ho6AjxeBzBYJDZ3mStGhgYgNVq5Zg2kQrj8ThKSkpQ\nX1/PPyviihDHoqGhgQ9cYoOPjo4inU7ztZTCDoFAAHV1dTg8PERraytisRgaGhoQCoWg0Wg4UkzQ\nJVruiEQiiMVi3L17l9OOc3NzqK6u5nBEPB4HAFRUVKCqqooTdDTB/du//RtaW1tRVFSEQCAAjUaD\npqYm5HI5qFQqOJ1O7jycn5/noBBdc1UqFXNO5HI5tra2eJ+gUqk47EMQqlAohP7+fmxtbcHlcuHy\n5ctck9bc3MzR883NTezs7MBut8NsNqO/vx+dnZ1IJBJYWlqCWq3GnTt3WHbY3NzEpUuXYLPZuGB4\ndHQUbW1tXFEnkUgQCASwv7+P+fl51NbW4sSJE3y7bGxsRC6Xw507dxCNRtHY2IhIJILl5WUolUr2\nl390cUltMxKJBOl0GidPnsSjR4/g8XjQ1dWFxcVFrigjp8eDBw9Y6/X5fCgqKkJxcTEikQh3hIbD\nYfT393MCmRb89N6nsl6yxDY0NECtVjM+wmAwcFJRq9Vyq3pZWRkePnyIl156CSaTCU6nEwqFgq2k\ntPCmW6ZWq+W0KRUoEBqisrKSA0pisZhlUkITl5WVsZwnEolw48YN4BMc/yZyYAAAIABJREFU1J8q\n1wfhIWkbK5PJsLOzg8nJSa6R+miysLe3lx0NT5484dgw/eCpXzEQCMBqtaK6upoDAoeHh6itrWUE\naSAQYD1sdXUVe3t7zBhobm7Gw4cPkUql8MwzzzAj4KMTF03KTU1NrBcTYSyfzzMMSqVSIRKJ8FRD\nLdnkVCEL1uTkJDY2NlBWVsYgns7OToaqi0QinqZTqRR/uIaHh7k4dWNjA88++yyAp9Aosn+R5Yj6\nCXO5HDKZDBYWFvDSSy8xmInYGmQJIw40La/UajVTw3Z3dxlkTx2Uh4eHsNvtKCkp4SUmLZ0U
 CgX6\n+/vh9Xqh0+n4QHY6nfwQyGazvNSiFF0ymYTD4cDW1hZWVlY4XEGt8GKxGG63G16vF3K5HIWFhdxH\nSMUKAHD9+nUUFRWhq6sLPp+PJTaKEhNU6uLFizxtl5eXM/0uGAyisbGRN/1U4VReXo6dnR0mPZ4+\nfRqdnZ3weDwc7Nja2uKHZygU4mSh2+1mktzVq1eRSqVw4cIFGI1G+P1+JJNJVFdX80HZ09MDp9PJ\nLejE3x4fH4fD4YDRaGSCoVQqhUgkwsLCAlwuF3vPpVIpH457e3uoqqpCIBDAxMQEenp6IBAIUF1d\nDYFAgFAoxM4qi8WChoYG/vm3tLTgzJkz2NjYgM1mY6mQwi1CoRCxWAwTExOM200kEiwXUqkv6coi\nkYitq/X19chms3wI+/1+/jPy6CuVSr5dK5VKlJeXs15P7q8vfOELePLkCYqLizEzM8NoV3p/GQwG\n1NbWIpPJwOPxYGNjA3a7HcvLy5idnUVTUxPzxBOJBI4dOwatVotsNstBHYlEwgMBhas+yetTdVAT\nAzkSiXB7Nnl+CwoKOD2YSCQ4qj08PIyLFy8yGJyesoS6JAsavQHIXkOLLYqMSqVSVFRU8IJFr9dj\nf3+fyzXHxsYQCoXwwgsv4ODgAPfv34fBYIBCoUA6neYGColEAqvVykuXl19+Gd3d3fD5fHy1pBAC\neYcpcXV4eAiPx4Pa2lqYTCbo9Xrk83mYzWbMz88jkUjAbDZzsSslxwoLC7G5ucnuFmoKJ65vIBDg\nw8RqtSIej7Pdi3rjKisr2S/8/e9/H0KhkD3fROWj1hp6s1IB689//nOG1IRCIUSjURiNRg7oUKCH\nKHOE01xcXGTgls/nQzabBQC2dFksFpSWlkKhUGB3dxculwsulws6nQ7t7e3cPn3y5EmUlpay/Y9c\nO6lUCi6XC2VlZUgmkwCA6elpAGBcrEQiQSQSQTAY5AVcIpHgOjcix5H
 f/vjx4/jud7+Lnp4eqNVq\ntkgSbCqbzUImk8Hr9TKzOxgMIp/Po7y8nAtYh4eHodFoGI50cHCAU6dOccpPJBLx+yscDjO6s6io\nCFarlamAZA+jsBiBswjodOzYMaRSKX5IfNRCBoAj4mq1GhcvXmQGTHd3NxoaGhAOh6FSqSAWi5kM\nKJPJ2KIWiURQWFjIpEVqRSfUMDHZqXZLoVBgf38foVCIY/d9fX0YHx//2HuXBpjt7W2Oz4fDYbS0\ntPBBS3VdKpWKgyxarfZjzTIlJSWM6V1bW4PX62WuS3l5OYeQCDm7tbXFWnlLSwvkcjkePHgAlUqF\nkpISHB0dMZhNKpVibm6O2+ZVKhU0Gg3W1tZIm/7Er0/VQa3RaFBeXs7x5p2dHb72x+NxHB0dMfu5\nrq4OIyMjDI7R6XSQSCRM74rH4xxoIFmC9LdgMMj+WWpLoUOaPrwEMaKiViqpDQQC2Nvbg9fr5clT\nrVazYySRSHAxK/EyAoEAyykUi5+bm2PuBeFQqSJLKBSyt5T42WQToqWlSCTC/Pw8x1utViuDkqju\nS6lUIhQKMVmPLIuPHj3CxMQEbDYbqqurMT8/j/r6ejz77LOoqKjA/Pw8QqEQWltb2cWytraGZDLJ\nDR2hUIhTW0QGfPLkCfr6+nD//n2WbigYEolEADzlGlNCkHjQTU1NTDWMRCJIJBJwu91cX0ZlBeQV\nr66u5odGZWUl+29HRkb49kTSFJHkpqenkc1m8fLLL+Nv//ZvEY/H8eyzz8JisSAej2NtbY1toAUF\nBfygofcWHda0aDSbzVhfX0cwGEQikUB5eTkUCgUikQhkMhlkMhlaWlq4neYzn/kMkskkRCIR11JR\nW43BYODbAQWQ2traOJBFHmjaS8hkMr6djI6OQigUwmg0YmRkhItjP/jgA8jlcvT09ECj0fD3RjyW\nwsJCOBwOFBcXQyqV8gKQPi8A2NFB7zUCIRF7hZ
 aYo6OjKCws5GDK4eEht5VTGzkdZERWnJmZwQsv\nvMBpVPps0TRKlXLURERoiJWVFayvr6O+vh4qlQo+nw/pdBr7+/toaGhgeqRIJOJCAIFAwNVnWq2W\nf8bT09MYHBxENBrlBig6qCkKLhAI+PNH5gCSfAjrq1QqMTU1hbW1NRgMBh5kiPfySV6fqmTi/v4+\nT7n0RKUKoMXFRYaZU6uFWCyG1WrF8vIydnZ2kM/nMTs7i0AgAKVSierqanYVyOVyrKysYHd3FyMj\nIxgeHuapgg6AcDiM/f19SKVS7O/vI51Oo7S0FCUlJejo6ODpkDCNxKvNZrMc5FAoFLwMMRgM2NjY\nwPr6Oqanp1FQUACHw8Faq1AoRDAYxPj4OBYWFiCTydg7To4JanDu6uriODMhQePxOH/gyVtL232h\nUMjLVJVKhaqqKsjlcni9XojFYpjNZj7sHj58iAcPHiASiTDc/fz585BKpXwQpdNpCIVCVFVVQa/X\nQ6lUorGxEdvb2+zTJoYJcYnpsFxeXkY0GsXu7i52d3cRDAYhEAjYOrW6uopsNguBQMA+eqVSyQeV\nSCTibkNKjBYVFcFms/HtI5/Po6Ojg1nc5FShqzJ94Do6OgCAf0/r6+vs1KHrNYV7SNoSi8X8nhof\nH0d1dTWy2SxmZ2eRSCR4GVVUVMRLRYVCgc3NTczPz0MsFiMWi2FjY4O/LpUSEC+F8AILCwv8e6Bg\nC0GZiMt+cHDAljxitVitVpw5cwYNDQ3Y2NjgiPbU1BQymQwaGhq4fGB1dRVKpRI2m42n29XVVczO\nzrKVjqBdJAERN5x+ZwUFBcxQX11dRSgUQlFREUPFaBFJA4NcLuedkcFggMPhYP/y7OwsLBYL7HY7\n326tVitsNhtaW1vR2toKy+/adeiBWl5eDplMxohaAp0BYG5KaWkpv+/o+6yrq0NlZSXkcjm//1dW\nVrglirg2YrGYSwykUilu3
 rwJuVyOcDjMrB+S/ejvy+VyAGCE738mmfipOqgJyRgKhZBIJAA8tQWJ\nxWKYTCbIZDJYrVYoFAqm1Q0NDQF4yp24desWpqenEQ6H4ff7+RdaVlYGm82G4uJiTExM8BWfPjg0\nrZLUQpMtVVyRiZ6CJhKJBHq9ngtz5XI5FxEQ4e3/4e5Ng9s+z7PfCwBJ7CQALti4gCsI7qtIUZQo\nUaYcW47tJHXaOImTpu50eiad02nn9HzoTD+ccybTT+15M4nbTprJUk86sSvXjhxbshZLlkSRkriJ\nOwgQC7EDJHaQWAicD/J9j/We9/R1z/SLg5lMEomSSOD/f/7Pc93X9bu0Wi27QHK53FOFm0qlEgMD\nA1yUm81m0dTUxBcuhVkODw/h9/uZJ1BZWYlisQiPx8NDzVOnTrEVSKPRwOv18u6FdFun08kUvWKx\niNbWVhiNRib/0a7V5XJBKpXiwYMHDD1/++23Oc1HTF7yZVPDB9nyqISA0mAAmBNdXl7ONzvdFHq9\nno+ytJARjN1gMECtVqO8vJxhUOQ0IA/u9PQ0uzFsNhsvWtFoFNFolLsEk8kk0uk0L7AAcPHiRQYG\nkW+Y6pjIGri3t8dHXUqEUnt6JBJhLgSBsoRCIUewiZx248YNdjccHR0BAMsqCoUC29vbWFlZQTab\nZcCTw+Hg64yqzCipSXIMnfp6e3v5iE42RAC4cOECFxGQHFJZWQmDwcDefXJreL1eiEQivjaj0SiD\n+1OpFJ9AqRMym83C4/FwkrWpqYm7CikgRgAmGiLT8DKdTkOtVuOll16CQCDgWjBC6pKbh66fQCDA\nbJjDw0PU1NRgaGiIwzvUFUrAqcrKSuh0OgDgDYzP5+MiCAqdUTZgaWmJAz0EeKKeTdpR06bjs2RG\nrVbL7ThbW1ucGNVqtTAajU8VkXye1xdK+vD7/RxbpsV0d3eXj2nJZBJqtRoajYah5Pv7++jv72cw\nvslk
 Ql1dHZaXl7mFmI6bZrOZFxKDwYDt7W3k83kGsmSzWRwfH+Po6Ig/qFQqxYMQGgwSoD2ZTPKu\nze/3o6ysDDqdjheiz54OhoeHEYvFsLa2BplMxvoYxeO1Wi0Dm8iC5HA4MDc3x4suAE7caTQaNDY2\nIpFI4OjoCGq1muUBnU6H8vJyzM7Oolgs8kOIdkOkvQNPhozkUDEYDHyTRqNRLC4ucnOIQqFAIBDg\ngQ41mgDgsmCC/tCg8NGjR6ivr0drayvfLDS1Lysr4/ZtGoDRZ0r+VerXI6QkTeOJYkjMi8XFRUil\nUsTjcX4oRSIRnmWQLEDMEPq5KYpMTGFykRCTg9p00uk0k/BoAEptIqVSiWP+BAEjVOng4CA2NzcZ\nok8dnVKplGPofr+fy3WJF0FOJ/JvUyz+4OAA7e3tXIZBPHWCYJGT5+LFi6zvdnd34/DwEA6HA4lE\nAlNTU5iamuJ4s9FohFwu58/t/v37vKP1er38EPtsqwptZujfb21t5XvY7XYDAJMkXS4XD2MJ8k8n\nYpJOSKIjmxuhb2lhl8vlMBgMAMAQpf39ffh8Pi6ZTSQST9Xv0aaJAmFUHEBlFhRlpwxGoVBgQmAy\nmUQ+n0epVEIgEIBYLMa3v/1t3Lp1C8PDw9z4Qt8Haeokm1IvI11rn+f1hVqoAfCg7/j4mHXNVCrF\nnl9KaaXTaTQ0NKCrqwubm5uorq7Gd7/7XWg0Gjbe5/N5Hj6KRCK0trZCp9Nhb28PKpWKhzt0w3k8\nHq6dIhbE+vo6G+wJoE6VThKJBPPz89w8QzcUlbeq1WpUVVWhWCyipqYGwWCQh3kUxFEqlQgGg0xD\nKxaLMJlMaGxs5CZ1GqKQTtnW1gaNRsNIT1pgHA4HJicn8f7770Oj0eDOnTscj6eizlKpxDAeko8o\nctvR0YF33nkHk5OTiEQiaG9vRyqVQktLCzNUiGhHVjty0jidTrS0tLBFLhAIsM+ah
 p6Hh4dIJpNo\nb2+Hy+XixYiGMdTYIhQKmWRHOzOZTIZ0Og2HwwGZTMbQewLVk3YvFovZkeP3+5nTPTAwwDtH4EkC\nkoD7pIFKpVJ0dHTg+Pj4KV4M6ZPkitjZ2UGpVMLe3h6EQiE7eIisJ5VKeX7w/PPPM2uaFgOKXmez\nWZhMJuZdnzt3jgfDbrcb+/v7iMfjDOcnUD2d7sjzW11dzQ/YdDrN1laj0YjOzk5ewKmnMxwOs/2N\nCoedTifOnj3LHZXT09PsEqHZEdVR0VDt5s2b6Orq4gWLBrEul4tLHxKJBOx2O5xOJwwGA9fpHRwc\nIJPJsPOEkMKJRALJZBISiYSxBdS6EwgEmIV+8eJFXLp0iWWOe/fusVzT2NjITplMJoPW1la2CS4u\nLuLVV1/lwejw8DBvEAjvK5fL4fV6eRPX0tICqVTKrUq3b9/mUyWxr2mtSSQSzFNpb2//3OveF2qh\nlkgk3BAcCoWQyWT4oqBjjlwuh8fj4TZp0omoi40uYEr3LS4uYnl5GRKJBLu7u+jo6OCjLBWR9vX1\n8c1Ixx0qY6Vpd1lZGSf9tre3USwW2XK2u7sLiUTCYH+BQACTycSVWffu3cPJkyextbXFDwi62Yif\nQPhEmUzGevr8/DzOnTuHlpYWfPjhh6ivr2enQCgUYiSrWCyGSqXiHZtMJsP29jZ+7/d+j4+jBoOB\nG9QJu0oSUiwWQ29vL9bW1uDz+eB0OnHy5El8/etfx4cffohEIgGNRgODwcDsBvIS19TUoKqqinGT\nPp8PXq8XVquVbYsk4VBii0A+uVwOjx49Qn9/P0ZGRrC8vIy6ujr4fD6O8G9sbPBQmXjdBoMBMpkM\nKpUKS0tLSCQSzOduaGhAdXU1L+6kLYvFYj6BAE8gQm63Gz6fD7dv38bU1BQAYH19HXV1daivr2e8\nqt/vh0Kh4MaVrq4uzM7OMq0vk8lga2sLANDb24uOjg5EIhFG
 A1BNVCKRgFAoxObmJnvmOzo6UFNT\nw0Ay4h/Tqa+qqooDU2T3qqqq4vTcZyH5wBOYGA12X331VSiVSthsNqRSKR6Grq+v84J+eHiI2tpa\nnDhxAhsbG+xzjsfjTKmjxcrn82FtbY3TuhS4Wl9fZ+j/9773PRQKBfazU+PP7u4uNBoNBgYGkE6n\nOXgmFotx584dxhfH43EuCVhaWoLH42GJ6urVq7BYLPD5fHjuueeg1+sZSEX9kFRKTBuSVCrFPPe6\nujoYjUam6EUiEebStLa2QqFQwGazQSQSoaurCzabDaVSiTsRKQGsUqmQy+Vgs9lgs9mgUCgYG0vJ\n11QqxTLU53l9oRZqi8XCpawnT57E6uoqVldXUV1dzTYzq9WK6elpDnTQB5DNZvHRRx+hrq6O66MI\nUXru3Dns7OzwxaTT6RAOh9HT0wOxWMyxYNLrqNuQIsfj4+NobGzE8fExrl+/jrGxMayvr+Ps2bOo\nqanB8vIyHj58iEKhALPZjGQyyU0zOp0OIyMjPFHf3d1FbW0tzGYze5GFQiEWFhYQjUZhMBgYfEMh\nA9JFHz16BKVSCYPBwJAoau44PDxEKpVCIBDAH/3RH+EHP/gBLBYL+5SpD7CiogLV1dUMmiJWSUdH\nB0QiEba2tjAzM8OsXeqQo8+it7cXAwMDjLmklnYii50+fZq/L3LVVFVV8TCINL/Dw0O4XC6cO3eO\nF1n6NZJviKdNcKXBwUFuaLl+/Tri8Ti++93v4uDgAOvr62zPogLTsrIydHV1YXl5GdeuXUMymUR3\ndzcAYG5ujpt6RkZGkEwmuUjB5/PBZrOxPxgAbt++jW9961ss+7S1teH69evQ6/XQarWc8CTdv6Ki\nAi6Xi7sxSfMn2NjMzAxLLpTcW1tbY82e4t/19fVcDDw3N4epqSmsrq4il8txc7nZbEY2m8Xh4SGu\nXr2K/f19fPnLX8bbb7+NkZERTE1NYXZ
 2FgKBgL39lZWVEIlE6O7uRjabZU4F7Spv3ryJmZkZdHV1\nsdXNarXC5XKhubkZDQ0NMJvN6OrqgtFoxL/8y7/g1KlTyGQyLLWRv76srIwr2+RyObNg6uvr8cMf\n/hCjo6M4c+YMHj58iJmZGRQKBRSLRV70KGHb0tKCO3fusCWWaItU0RaJROD3+7GxscGUSGpmyeVy\ncDgcfLp9//33sbm5yQNP2uVHIhGWY1QqFaLRKKc2P/roI36A0CnObDaznk7zLqp/u379+ude+75Q\nycTa2lokEgmYzWbmyba2tvJ/aIK/srICkUiE06dPQywWw2Aw4MaNG5DJZBCLxQyYPzo6gsfjwcHB\nAetXdPS9e/cuWltbcfnyZWb9UlCDBjlarZZv7A8++ACPHj1CLBZDPp9HOBxmaaCxsZH1tO7ubsY0\nUmvJgwcPMDg4CLFYjKqqKi6xvXfvHvb399HU1AS9Xs+BCZPJxDxb4m384he/QGtrK06ePMm7dSLU\nkXeXPKPRaBRDQ0MYGxvD/v4+5HI5dDodysrKQO/x0tISywZarRb9/f0wGo04PDxEY2MjRkZGoFQq\nGeYOgG1dhUKBfeJ2ux1nzpzhRhUADKen9g6bzcYLPtkIt7e38Td/8zdsJaQwCXm7GxsbOXKeSCSQ\nSCRw584dhvi0t7czuIvSY8TAkMlkEAgEcDqdHF6i2PHm5iacTicvytPT09jZ2UF1dTVGR0chFAq5\na7NQKHCzt1qtRiKRwPr6Oh/Tn3/+eYjFYl6YKUh0cHCA27dvczHvzMwMLl++DKVSicXFRUxPT8Pp\ndPKNvre3h9u3b8PlcrELhOxhFLIgWaytrQ29vb1QKpWs9VLZrVqtZpgX5QNIOllcXMT9+/cxMjKC\n8fFxBkI5nU4IhUJ8+OGHkMvlHNyiHtDq6mqWI5aXl+F0OnHmzBk8//zzqKqqwsOHDxEMBnHx4kVc\nvnwZ4XAYk5OT+P
 DDDzm9ScNZ4InbZm5uDvl8nkMvEokEt2/f5oEo5QFcLhdisRiam5uh0+mY7U7F\nC1KpFLOzsyzvzc/PY3Z2lmP5dB/FYjGsrq5iaGgIpVKJS27b2trQ0NDAreq0mybrnvPTNqa2tjb8\n/Oc/xze/+U2srq6yREdSjNVqZexBMBjEwcEBwuEw1Go15ubmgN+1CPn3v/99TiVRY3QymYTb7eYy\nTYVCgYaGBoyPj7P+SE6BWCzGQHy6caxWK3Z2dtDb2wur1crR0Gg0ivPnz+PSpUsMSqcdDE2tCV1J\nOld/fz+nv4gfAjyRbBYXF/lIK5VKIZVKMT8/D4FAgE8++YSpcVNTU08xlolTTHag9fV1RKNRXnAP\nDw9x48YNfO1rX0MqlUJFRQWi0Sg3TNMiSwMzhUIBuVyOra0tLk0dGxtDJBKBQCCA2WyGWCzmGqOx\nsTFsb2+joqICt2/fxu7uLr7//e9DKpXirbfeYv8wwYby+TzEYjEztGnhttvtHLWWSCTY2dlhiUIi\nkeDEiRMolUr42c9+hpWVFR62vf322xgdHWVi3Gd38jTQTKVSLKtQ0MPpdOK3v/0tJ0sJ30mRbJvN\nhrKyMgboy+Vylg8WFxfxF3/xFxgZGcHu7i7LIiKRiJunHzx4gNbWVq7nikQieOGFF5iiuLW1xUMu\nWsBJrhOJRHjhhRf4gTE/P8/6/cLCAgBw07pOp4Pf70dFRQUuXLjA1ELC7FLz9dbWFiwWC2v71Iqy\nu7uLa9eu8QBdJBLhmWeeYV24s7MTb7zxBp9kgCfR+sXFRSwuLmJsbAwLCwt48cUXWeZrbW2Fw+HA\n4OAgs0eom5Qsqn6/H3q9Hv/tv/03fPjhh3jppZfwd3/3d3jxxReZdxKJRCAUCvkBGAwG2VsuFotx\n5coVnDt3DvPz8zh9+jR0Oh0ymQz7nMViMcOh9Ho9NjY22GUzNzeHSCSCmZkZVFVVYWtrC4ODg/j
 K\nV76C9vZ2aDQaVFRUIBgMIhKJwOl04nvf+x6XS6fTaSiVSn6P3W43u6G8Xi/Ky8vR3NzMMXvieBBY\nbWdnB52dnVCr1bBYLNw8TnF7iqL/TkKZzp8/j9raWtYmi8UiFAoFysvLIZPJUCwWeRiRTqexubmJ\nd999F0NDQ2hra8Pw8DCsViukUik8Hg+jNSn+LBKJcOHCBVRWVuL111/Hm2++iTt37uDUqVPQarXs\nD6U02u7uLsOIyLNLTIP29nZGL9Jxp7W1FcViEWtra09NoU+cOIHBwUGUlZUxca+xsRF2ux1DQ0PM\nbpBKpaitrcXzzz+Pmzdv8mDi+PgYHR0d+MlPfsLDH5PJhBMnTrDTo1Ao4IMPPuAL7cUXX8Rf/dVf\ncXSeNMejoyNsbm5y47dOp8M///M/o7q6Gi+99BJ6e3uxtbWF9fV17O7ucspQq9Wyx5eqiJLJJO+S\nOzs7sbCwAJ1Oh7t372JychIikQjr6+sQiUTMQD59+jS3XVssFvz617/maqednR1YLBYkk0ke2NDn\nTs0g1EhONi2TycS2u2w2y4lLcsXMzMzAYDBgZWUFBwcHePnll/HWW2+hqqoKf/Inf8KlrlToSqUH\n7e3tjKUlvopMJsPKygru37/PPZsk41Dz+Pnz53nITEGI6upqXLx4ERsbG1hYWEBzczMMBgMePXoE\nv9/Pf761tRVDQ0O84NN9oNfr8fDhQ4yNjTFvhEJIiUSCXTDk6V1bW+P4/+bmJhobG3H27FkOgE1M\nTGB4eJhDJk6nE263m9EEpVIJOp0Ob7/9Nra2ttDe3g6pVMpY197eXpjNZthsNkxOTmJmZgY3btzA\n7u4u9Ho9GhoaoNFooFaruVIrn89jcXGReyNVKhXjeyUSCeRyOaxWK0uDFRUVsNlsqKio4G5GcmTc\nuXOHS5bb29vh9XoZUEVVbUdHRzCZTHyaICQvbST29vbQ09ODu3fvct0Xbb
 IqKioQj8fZddXU1ITj\n42OWjAwGA06cOMHurWAwiM3NTXbi9PT0sAz5aRL2d2uhnpqaQiQSQXV1Nceud3Z22D6zsbGBuro6\nnvgTVYwu5EAggLW1NdaUysvL+fhzcHCAlpYWNDQ0cPRYKBTi/v376O3tRU1NDaxWKy+EhUKBnRI9\nPT0IBAKwWq1st+ru7mZ3AZHhNBoN8vk8zGYzuru7sb6+ztFhh8OB7u5utnpR5142m8WFCxegVqvx\n0Ucfsa66urrKRaqEz/z93/995HI53iUeHBxwcIAeFLFYDBcuXMCtW7dw7tw5drF0dXWhtbWV0210\ntKytrUVHRwcuXryIQqHAxLzW1lb+72Qyycxm2u3W1tZCr9czpWxkZASvvPIKIpEILwizs7NwOp1c\nhLqxsYGlpSWWTWZmZtDR0YEzZ87gRz/6EV588UVOtJVKJbS3t3P6jPoZyaZlMBi4YIDkCBpEJ5NJ\nrsKKx+PY2tqCQCDAl7/8ZWSzWVy6dAnj4+NwuVyorq5GWVkZYrEY6urqWOukBJzZbMbMzAxu3bqF\nf/iHf4BKpUJzczMHb8LhMBKJBMRiMXf32Ww2SKVStLa2Yn9/H+vr61CpVNjb2+M0HO3AlEoltxWR\n04WgV4uLi5BIJLyrpBmG0+lkZgohCwQCARQKBYrFIgYHB3HixAlcvnwZDQ0NKJVKaGpqwv3799Hf\n34/h4WFmbDidTvb87+zsYHx8HOvr6xgeHkZPTw+WlpZgs9m4BKO2tvapxKLZbOYHc2dnJ0QiERwO\nByorK2G32/kef/DgAbxeLxoaGrjVSKPRYH9/n+2f1PJDREWaVVRXVyObzTIQ6a233mKGSE9PD06c\nOMHoX9ochcNhdhuVl5djZWUFr7/+OoRCIRYXFxlNS950isOTvS+YJocqAAAgAElEQVQSiaBUKuEb\n3/gGysvLkUgkYLPZOCa+uLjIO32TyQSZTIbKysqn5
 NCKigrcuHED+F2DMlksFmxsbDALmLylZAMz\nGo3Y3t6GSqWC1WploDjtlre3tzEyMoLOzk7k83l4PB4sLi5ynDSdTrPBvb6+HsfHx1yjQ7hSlUrF\nv+dwOGC329HY2AjgSajm1Vdfxfz8PI6Pj2G32yEUCtkET4OgYDCIWCyGiooK+Hw+RkZarVacPHkS\nCoUCXq8XhUIBOp2OG7bJtP/GG2+gp6cH0WgUr732Gl599VXMzMwgEAhgb2+P4UFUjEAgc6PRiGef\nfZZdLKVSCV6vF0tLS6ioqOC4NXGaJRIJf7/r6+vcSNHY2Mi9kKdOneKhmEqlYh72wcEBP5BEIhF+\n9KMfoaurCy+99BKmpqZgMBhY3+3q6oJSqeR4PQ1Ga2pquMWjurqaZwler5eTYM899xxeeeUVbuJe\nXl7GyMgI9vb2YLfbUSqV8MwzzyCdTnMw6uDgAGVlZfD7/fz5FotF5qgAwAsvvMC7Z+rCJLcKvUeB\nQABjY2N46623GIlJpa5U80SUOUqBplIp7O7uIhqNYmJiAnq9HolEAh6Ph8Mb1EBeW1uLYrHITUQU\nvvnhD3+Iixcv4plnnkGhUMA777yD8+fPc/Cqurqa0QnZbBYGgwHl5eXY3d1lT3R/fz/29/fR2NiI\nN998k9u4u7q6+GuJRdLT0wO1Wv2UJZTwBiMjIzxopCJc8nqvrq5yDyWdwi5cuIBIJMKzARoCms1m\n5PN5/OEf/iH8fj/LgRKJBL29vXjvvfcwPT2NpqYmxhtPTEywG8toNOLy5cvo6OjAV77yFej1ekxP\nT+ONN97AjRs3MDAwgJmZGaytrWFrawtdXV3o7OyEy+Viy+jVq1exvb2NU6dOoampiU9fdCom2YoS\nkjabDUdHR+yBJ/bNr371K+6mPD4+xubmJqRSKbPnM5kM4vE4h/Y+z+sLtaMeGBjgKTFFSTUaDacS\nXS4XstkshoaG2MHx3nvvoby8
 HOfPn2f3QzqdZv1UqVSiqqoK6XQa29vbMBqNUCgU6O7uhtvtxrVr\n19Dd3Y2enh4ezsTjcd7tVldXY2dnBxUVFcxSnpiY4IbwUCgErVbLoRHCNmYyGZ4GUwt2Q0MD7HY7\nYrEY98rRdNrlcqGurg5DQ0Pw+XwoKytDMBhEQ0MDpFIpmpub4fF4cPLkScZFCgQCfPzxx3j8+DEP\nP8lz+uabb3I1FkHq6ZSgUCjYH37hwgV0dHTA6XQyV5v0YdJg6ShKzgKySVLIgmqh5HI5N4f4/X7E\nYjFIpVJOSFLbczQaxdzcHLq6ujjKK5FIsLCwgIqKCu6GBAChUAiHw4EHDx4wuU2r1TIWlna1o6Oj\nAJ4ELqhgorKyEqlUChaLBZWVlbDZbFheXsbjx4/x9a9/HaVSCSsrK1xvRZa3vb09buIZGRmB3+/H\n9PQ0MpkMTCYThoaG0NjYyKUVlLrz+/3I5XIMS6KBlc1mY5/t9vY2ysvLcfbsWWbaUE4gmUzC5/Ph\ntddew+DgIGKxGGvgjY2NcLvd3JBeV1eHRCIBp9PJPYOxWAxLS0vw+XyYmJjAzZs3odPpIJPJsLu7\ni4WFBSSTSW6tv3TpEsLhMFvQCMQ1OjrKqTqCJFHFXTabZe4GERJ7enrwy1/+EtXV1ejs7EQ4HEZn\nZycnCWtra7GyssIlyVR6QJJmc3Mz7HY7AoEA9Ho9Ojo6GBxFw1lKR5ZKJYyPj3NF3PHxMc6cOYPm\n5maoVCpGL5RKJYRCIbbTUUK0uroaTU1N7C+nzQJlJPR6PZ8aiT89PT0Nh8OBUqkEgUCAjo4OTExM\nQCwWY2lpiYevPp8PH330ERKJBLRaLZxOJ80kfrd21MlkEk1NTfwEk8lkjNXM5/MoFApQKpXY2trC\n48eP0dTUhMHBQXR3d/OCdv/+fcYnkvZE1DnyUTqdTqytraG1tZWDK7lcjgMB1NpA3WgEbaco7OLi\nItdv6fV
 6RCIR1u8oEOJ2u5kx0NLSwn7OVCrFeNW7d+/ywkRhhb29PTQ2NiIej8NsNjP9rVgsMke3\noaEBDocDAoEAo6OjbFXc2dnBwMAA5ufn0dvby8e0TCbzVBiAuNa7u7vM6SUSGAC0tbXxdP3x48cY\nGBhgXZECGaVSCQ0NDdyK09XVhatXr0Imk+Hs2bNIp9MckvB4PAzoqaioQCgU4qFufX09bDYbAoEA\n7ygPDg74ey8vL+fFhd4nIhHSUZhubIIc9fX1AQAPsBwOBxobG+H1etnDvbGxgbNnz2Jvbw+Tk5O4\ne/cumpububCVmrqJFU2npps3b+Ls2bNYWVnhINTAwAA/oEgbHxoa4iFhS0sL4vE4JicncfXqVTzz\nzDPo6OiAWCyG3W5HOp2GwWBgfCbVSIXDYej1epw+fZoXtlKpBKVSifLychwfHyOTyfAplHR1rVbL\nzG0i21FaluQWwhGUSiXU1tbi9u3bUKvVzEKh/k+65isrKwGAd9SRSAQPHjzA4eEhhEIhXnrpJXi9\nXnzyySeclqUW+EAgwKdf4mfIZDLG4DqdTmaQ00nW7/dza5PH42HmDvAE7EWReLoO6b0kydBoNHJT\nUDabhVwux8TEBM+CaMZFvYdUNELef0KmUs0fkR9DoRDy+TwPdQUCAXp6etjJRcGo+vr6/9SO+gu1\nUJNPlKhrVERJ0gXRtCgy3N3dzZVPN2/eRE1NDbsSQqEQF2+2tbXB4/EgGAyitrYWq6urMJlM6O3t\nhUgk4vYTt9uNiooKmEwm9ocKhUIoFAqWRm7evIlUKsXQG4r2UgSZbu76+nrs7e2huroaQ0NDuH37\nNu8+KWRyeHiIpqYm1oOpdkosFmN1dRV/+Zd/ibW1NQCA3W6HxWLBwsIC8wwODw+ZN0EasMFgwP7+\nPkQiEex2O1pbW+FyuTh1GY/HGXdpMBjQ0NCAtbU1HhCSFUyn00GpVEIgECAUCkEsFnMU
 2u12QyQS\ncWKtWCxCpVLhxRdfZNmhsbGRgwLFYpFhWgTaJ98q0RDVajV2d3fZjyyXy3F8fMw7IgDc3xgKhVBW\nVsYJO6LLkXTS1NQEm83GSALirygUClgsFgDg6+Ho6Ih5xxKJhL/f5uZm5p60trZyNJr4DmQtI+nD\naDSitrYW0WgUoVCIAxRut5sh9lVVVSgrK0NVVRX7kskn/NnyWCI9klNodXWVH54nT55kfCulIn0+\nHx4+fAiz2YzJyUnE43F8+OGH3MpCJyniXhPD5Pz5808VH8RiMfT09MDv98Pr9WJoaAj9/f1s56RN\nh0wmw97eHpMGKdglk8kY8UDdpEqlkjk45NihKPnOzg4P62hXSq3nJCsQsoBspaSr03VaVVXFEgW5\nOXp7e9He3s5+bpFIhIqKCrS1tXHJBgVwKG1Jp0gqLaay43PnzmF7e5sbdLRaLc9qtre3mc1DSUZC\nMiuVSg7lfZ7XF2qhplgu8IT7QUK/Xq9HKpVCJBJBc3MzP03JK7qyssIcYsJoxmIxdnDIZDJGJ5Ls\noNPp+NgiFovZ+kbDt2KxiEgkgnA4jHQ6zb7IaDTKbS8+n4+h+H6/nx0KAPhGJdqd0WiESqWCRCJh\nDY9IccQmaG5uZl/wZx9SXq8XxWKRj9bUrUhkskQiwTcW8Xtpwa+vr+foNhUE0EOvuroaNTU1uH//\nPmMr6X212+0wGo0MjgoGg3wq0Wg0fJMSHN5ut0OtVkOr1XL1FXl9A4EAsxt8Ph9zP2jwRBIDpfNy\nuRzfRHTzENs6nU5zos3hcHBKs7GxEdFolC18FLqhhhy6QQk9WVNTA7vdzsO+YrGIQCDAqUbySrvd\nbmg0GgSDQRSLRfT29jLXmyQO4k0TFZHIfFR8a7PZWN/P5/OYnZ2FTqfj972np4dPKcSJoKSdy+XC\nxsYGent72Y3g8/mYza5SqbiWi+iSwWCQU3TkgQae1FlRIxG1w2c
 yGeTzeUxPT3Obi8fj4YQrtffQ\n7p0+Gxr2UiEDtQU1NDTg+vXrLE95PB7eXSuVStTV1fFCW1NTg4qKCsjlch70Ly8vc9qWioCbm5uZ\nvVMsFlEoFJgrT5H9QCDAbe4krxGPhGrp4vE45yvC4TBqamogFApRV1fHLebpdJrLh7PZLNxuN7q6\nuhAMBrG2tobOzk4YDAbm6xAhkj6TUCjEmwmbzfa51z5BqVT6L15O/+tfAoFgCMDC+Pg4R6iJvUCT\n3IODA0SjUfT397M1rKKiAsViEV6vF52dnXw8TqVSbKSnI1sqlWLnglKphFwuRz6fx/3793HmzBmG\nhxPilHCUhLwEAL1ez80NxBzR6XSIxWK8aNOuqbq6GrlcDhKJBEtLS2htbWUedDQa5cZwarYgoJPH\n44HD4eAaKepfq6ur46FTMpmEWCxGTU0N6urq4HK5sL6+junpaQQCAUZ30o7X7/ezpEDvL0Wzqf6K\n2l8olOPz+fi4FwwG4fV6YbFY0NraCo/Hg0wmwwuJRqOBy+VCMplEV1cXa5RqtRrxeJyDHABYhkkk\nEhgeHkY+n4fBYIDFYoHVauW6JfKpE4dcpVLxgJAKYX0+Hzo6OhAIBKBSqWCz2ZiwJxaLGTxUVVXF\nFsFQKIS5uTm8/PLLODw8RCaT4UJVittTFJ+8+QcHByw9mM1mZpCTjY54LsViEZWVlRxZPjo6Yuws\nPdBv3LgBpVKJ0dFRuN1urmJzuVys6UajUda3s9ksEokERkZGOH6eSCRQXV0NAJzMJa2ZQEAEJKIG\nIKFQyM0uTU1NEIvFzPogy1k0GmXwVm1tLbRaLTKZDF9vxD1Rq9UctPJ4PBAKhSgvL0dfXx9kMhk+\n/vhjXjRpKBmLxZDL5TAxMcEpYa1WC61WyycfjUYDu93Odky73Y7Dw0OesWi1WhQKBWSzWayursJi\nsWB/fx+tra0IBoMcRKHUbi6XQ0VFBe7du4
 dcLofz58/D4/GgubmZh8+f7VMldwcZFGigbDKZ4HK5\nsLm5iZqaGuj1eoTDYdTV1THThJLHJF319PRge3sbm5ubADBcKpUW/8M18Iu0UFPxqkQiQUVFBTcz\n0A6FjnB+v5+ta8Q6qKqqYiM9QZio4qqiogK5XA5VVVVIJBKc2KqpqcH8/DyjCak15ejoiLP6CoWC\nsYiEeKTONhoEfXbwIpFInpIXCAZDu226CKVSKex2O9vcKApOA6ZQKMQXEbVYPHz4EC0tLZBIJFz2\nCeCpC0WpVDI2kh5gWq2WTfiflR+Ojo6YM9HX14dEIsGlALRToCQnAH4v6EFGWEza5dIUn6LKFRUV\nUCgUT1nZqIcvFAphbGyMnTHELI5Go/zvkD5NcgpB9LPZLFPhysrKEAqFeB6gVCqh1Wr5MydvNFWz\nHR8f44MPPsD4+DhSqRQ/zOl9J+sZ/Vniv1RWVsLv90MsFjN4y+v1QqlUMmiJWOZarZZjyIeHh+wE\noMXSaDQ+tdDSZwyAQ1RUCabT6TgyXlZWBoPBwD836dQUgaZdOJEDy8vLodFo2NJJNkWj0YhiscjY\nVWp9ofJYepH3na5fgi4RUpcWOLFYzLbTUCjEcyba/BSLRYRCIa6gM5lMvPMnoBT1EdLJj6h5RNij\nxCg5pMhhQUP1zw66yVNP6IGKigqsrq5yc/j+/j6Hd4gKKBQKuaORTtIECyMOPIXGKisrIZPJ+KFB\nA1b6jADwNfJpZ+L/dKH+Qkkfo6Oj0Ol0MJlM0Ov1WFhYQCwWw8jICN+QPT09cDgcODw8hMlkglKp\nhN1u5x0CaVgikYgrr6qqqpDJZLjNnHyWAwMDsFqteO6553Dq1CnWqQjITx8y3bTUp0a7BXI3VFZW\nIh6PM5PZbrdz1Vcmk2ELkMfj4Z14U1MT3nzzTQwPD+P06dOIRqNMpxOLxVhfX+eyWJJOZDIZpqen\nUSqVuAaKvo9AIMAPD
 bK7UeJsaGgIGxsbmJubYwjP/Pw8QqEQt3h/+9vfRiQSgUwmw40bN5iKR8XC\npVKJm8eJBhcMBhnVSrAogUAAvV6PDz/8ENXV1Yz+XF9f52YOq9WKy5cv48KFC0yPI33Y4/Ggrq6O\nb0CyDhJpjqqivvGNb8DlcqFYLDLre39/H2KxGP39/QyNp8WTGCdutxsffPABXnvtNSSTST760tCQ\n5AXS5enBRtQ8aq6pr6/H3bt3YTAYIBaLkUgkEIvFoNVq0dnZycXFxBWn3Zrb7cbzzz/Pf49er0eh\nUIDf7+eBrUgkwsbGBoxGI86cOYN/+qd/4odFe3s7c0iouYV2kvv7+3xNLywsMGOFBmW/+tWvUFVV\nhenpaZatAECj0SAUCsFsNnO1F7W+KBQKTnRSZJ+GnFRiQJAur9cLt9uNnp4etthVV1ejVCrh2rVr\n2NrawmuvvcYWSbvdzo4U4AnQSiaTYWdnB7u7u6irq4NarYbD4UAqlUJrays30X/ta1/D4uIiWxhF\nIhF2dnZQXl7OD3QaXgoEArhcLrzyyitsQZTJZKitreUBNJ2GCoUCFhYWGFvs9XoxOjqKiYkJzM7O\norKyklt57HY79vb2IJPJuGO1oaGBB7Z7e3u0UP9PX1+o4gDyPNLxjRbMYrHIT32r1co+0mQyyTYd\n+t9Wq5V3wASb9/v9cLlcWFpagkAgYOsZVexYLBZeJGio0tDQgIGBAR5apFIp+Hw+3mESk5Zi3pFI\nhFNeJLvE43He5eh0OoRCIV5M5XI5ysrKeNdBjSdSqRQqlQrj4+MAnsgt1Hk3OTmJuro6BAIBlEol\niEQiZDIZCAQCpvJ9dtdMoQpyshiNRtTX1/PpQyKRwPRpSalQKERbWxvsdjsUCgWOjo44iktIVvIA\n04Le3NzM0CfSTikCr1KpeNBCbc9TU1Po7+9HTU0NYrEYfvvb37LLZX9/H9euXUMoFMLS0hL29/cR\n
 CAQAgE8yXV1d6OjowPT0NHPLKco8OTmJs2fPoqqqCna7HW63G/F4nJG3hUIB9+7dw7/+678CeCLB\nUNDD6/VibW0NKysrzKWggA0NmUlv1Gq1CIfD3FITi8WeWqxKpRIWFxexsbGBBw8eYGdnh4MzNGNo\nampiHZ2YzmRHozmBw+HA/v4+2z+/9KUv4dy5czxYpZmKVqtlF099fT3EYjEz2QktSzt54ktTa4xE\nIoFUKgUALjAmj31NTQ3fK2q1GoVCga2FHR0d7JDa29vD0tISampqkMvloNfr2X5HQ+Py8nLk83nU\n1NRAoVDgnXfeQT6fx+joKBeASKVSfPTRR9y0s7+/D4/Hww+iZDKJoaEhbG1tcdLRZrPB6/XCZrPx\nKZTaWujEGwwG+feLxSJmZ2dZ/75+/TrPMMrKyvheT6fTaG9vx6lTp7C/vw+/38/AJQrfEO7hxo0b\nDACrrq5GW1sbGhsbUV9fj8uXL3/ute8L5aNuaWnBxYsX0dzcjIWFBVRXV2NsbAyJRAIbGxssWVCy\njY5kV65cwdjYGOvQdXV10Gq1MJvNT+3G0+k0TCYTstks/H4/uru78e///u+wWCx87C2VShyuoVJN\nwpDSAkw7EdJFhUIhfzg0lKCYr0wmw/LyMqqrq9kFYjabIRAIcP/+fXR1dWF8fByHh4fw+XwIh8OI\nxWKQy+WYnZ1FWVkZPwQAoL29HUKhkM33m5ubyOVy3O9IuyyKGFPQJZ/PI5lM4tq1awyTIfjU9evX\n0dnZySW+RPYjfgUlMWnoStY9CkEQQczlcvGOmXgmGo2GB5dU+upyuWCz2fDyyy/jm9/8Jj7++GN+\n0Go0Gs

<TRUNCATED>