Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n",
"\n",
"# <!-- TITLE --> [PER57] - Perceptron Model 1957\n",
"<!-- DESC --> A simple perceptron, with the IRIS dataset.\n",
"<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n",
"\n",
"## Objectives :\n",
" - Implement a historical linear classifier with a historical dataset !\n",
" - The objective is to predict the type of Iris from the size of the leaves.\n",
" - Identifying its limitations \n",
"\n",
"The [IRIS dataset](https://archive.ics.uci.edu/ml/datasets/Iris) is probably one of the oldest datasets, dating back to 1936 .\n",
"\n",
"## What we're going to do :\n",
" - Retrieve the dataset, via scikit learn\n",
" - training and classifying\n",
"\n",
"## Step 1 - Import and init"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
"\n",
"div.warn { \n",
" background-color: #fcf2f2;\n",
" border-color: #dFb5b4;\n",
" border-left: 5px solid #dfb5b4;\n",
" padding: 0.5em;\n",
" font-weight: bold;\n",
" font-size: 1.1em;;\n",
" }\n",
"\n",
"\n",
"\n",
"div.nota { \n",
" background-color: #DAFFDE;\n",
" border-left: 5px solid #92CC99;\n",
" padding: 0.5em;\n",
" }\n",
"\n",
"div.todo:before { content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My44OTEyIiBoZWlnaHQ9IjE0My4zOTAyIiB2aWV3Qm94PSIwIDAgNTMuODkxMiAxNDMuMzkwMiI+PHRpdGxlPjAwLUJvYi10b2RvPC90aXRsZT48cGF0aCBkPSJNMjMuNDU2OCwxMTQuMzAxNmExLjgwNjMsMS44MDYzLDAsMSwxLDEuODE1NywxLjgyNEExLjgyMDksMS44MjA5LDAsMCwxLDIzLjQ1NjgsMTE0LjMwMTZabS0xMC42NjEyLDEuODIyQTEuODI3MiwxLjgyNzIsMCwxLDAsMTAuOTgsMTE0LjMsMS44MiwxLjgyLDAsMCwwLDEyLjc5NTYsMTE2LjEyMzZabS03LjcwNyw0LjU4NzR2LTVzLjQ4NjMtOS4xMjIzLDguMDIxNS0xMS45Njc1YTE5LjIwODIsMTkuMjA4MiwwLDAsMSw2LjA0ODYtMS4yNDU0LDE5LjE3NzgsMTkuMTc3OCwwLDAsMSw2LjA0ODcsMS4yNDc1YzcuNTM1MSwyLjgzNDcsOC4wMTc0LDExLjk2NzQsOC4wMTc0LDExLjk2NzR2NS4wMjM0bC4wMDQyLDcuNjgydjIuNGMuMDE2Ny4xOTkyLjAzMzYuMzkyMS4wMzM2LjU4NzEsMCwuMjEzOC0uMDE2OC40MTA5LS4wMzM2LjYzMzJ2LjA1ODdoLS4wMDg0YTguMzcxOSw4LjM3MTksMCwwLDEtNy4zNzM4LDcuNjU0N3MtLjk5NTMsMy42MzgtNi42OTMzLDMuNjM4LTYuNjkzNC0zLjYzOC02LjY5MzQtMy42MzhhOC4zNyw4LjM3LDAsMCwxLTcuMzcxNi03LjY1NDdINS4wODQzdi0uMDU4N2MtLjAxODktLjIyLS4wMjk0LS40MTk0LS4wMjk0LS42MzMyLDAtLjE5MjkuMDE2Ny0uMzgzNy4wMjk0LS41ODcxdi0yLjRtMTguMDkzNy00LjA0YTEuMTU2NSwxLjE1NjUsMCwxLDAtMi4zMTI2LDAsMS4xNTY0LDEuMTU2NCwwLDEsMCwyLjMxMjYsMFptNC4wODM0LDBhMS4xNTk1LDEuMTU5NSwwLDEsMC0xLjE2MzYsMS4xN0ExLjE3NSwxLjE3NSwwLDAsMCwyNy4yNjE0LDEyNC4zNzc5Wk05LjM3MzksMTE0LjYzNWMwLDMuMTA5MywyLjQxMzIsMy4zMSwyLjQxMzIsMy4zMWExMzMuOTI0MywxMzMuOTI0MywwLDAsMCwxNC43MzQ4LDBzMi40MTExLS4xOTI5LDIuNDExMS0zLjMxYTguMDc3Myw4LjA3NzMsMCwwLDAtMi40MTExLTUuNTUxOWMtNC41LTMuNTAzMy05LjkxMjYtMy41MDMzLTE0Ljc0MTEsMEE4LjA4NTEsOC4wODUxLDAsMCwwLDkuMzczOSwxMTQuNjM1WiIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjMzLjE0MzYiIGN5PSIxMjQuNTM0IiByPSIzLjgzNjMiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48cmVjdCB4PSIzNS42NjU5IiB5PSIxMTIuOTYyNSIgd2lkdGg9IjIuMDc3IiBoZWlnaHQ9IjEwLjU0NTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjYgMjQxLjExMjEpIHJvdGF0ZSgtMTU1Ljc0NikiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48Y2lyY2xlIGN4PSIzOC44NzA0IiBjeT0iMTEzLjQyNzkiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjUuMjI0OCIgY3k9IjEyNC41MzQiIHI9IjMuODM2MyIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxyZWN0IHg9IjEuNDE2NCIgeT0iMTI0LjYzMDEiIHdpZHRoPSIyLjA3NyIgaGVpZ2h0PSIxMC41NDU4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjkwOTcgMjU5LjgwNikgcm90YXRlKC0xODApIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PGNpcmNsZSBjeD0iMi40MDkxIiBjeT0iMTM3LjA5OTYiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxwYXRoIGQ9Ik0xOC4wNTExLDEwMC4xMDY2aC0uMDE0NlYxMDIuNjFoMi4zdi0yLjQyNzlhMi40MjI5LDIuNDIyOSwwLDEsMC0yLjI4NTQtLjA3NTVaIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PHBhdGggZD0iTTM5LjQyMTQsMjcuMjU4djEuMDVBMTEuOTQ1MiwxMS45NDUyLDAsMCwwLDQ0LjU5NTQsNS43OWEuMjQ0OS4yNDQ5LDAsMCwxLS4wMjM1LS40MjI3TDQ2Ljc1LDMuOTUxNWEuMzg5Mi4zODkyLDAsMCwxLC40MjYyLDAsMTQuODQ0MiwxNC44NDQyLDAsMCwxLTcuNzU0MywyNy4yNTkxdjEuMDY3YS40NS40NSwwLDAsMS0uNzA0Ny4zNzU4bC0zLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsMC0uNzUxNmwzLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsLjY5NDYuMzc1OFpNNDMuMjMsMi41ODkyLDM5LjM4NzguMDc5NGEuNDUuNDUsMCwwLDAtLjcwNDYuMzc1OHYxLjA2N2ExNC44NDQyLDE0Ljg0NDIsMCwwLDAtNy43NTQzLDI3LjI1OTEuMzg5LjM4OSwwLDAsMCwuNDI2MSwwbDIuMTc3Ny0xLjQxOTNhLjI0NS4yNDUsMCwwLDAtLjAyMzUtLjQyMjgsMTEuOTQ1MSwxMS45NDUxLDAsMCwxLDUuMTc0LTIyLjUxNDZ2MS4wNWEuNDUuNDUsMCwwLDAsLjcwNDYuMzc1OGwzLjg1NTMtMi41MWEuNDUuNDUsMCwwLDAsMC0uNzUxNlpNMzkuMDUyMywxNC4yNDU4YTIuMTIwNiwyLjEyMDYsMCwxLDAsMi4xMjA2LDIuMTIwNmgwQTIuMTI0LDIuMTI0LDAsMCwwLDM5LjA1MjMsMTQuMjQ1OFptNi4wNzMyLTQuNzc4MS44MjU0LjgyNTVhMS4wNTY4LDEuMDU2OCwwLDAsMSwuMTE3NSwxLjM0MjFsLS44MDIsMS4xNDQyYTcuMTAxOCw3LjEwMTgsMCwwLDEsLjcxMTQsMS43MTEybDEuMzc1Ny4yNDE2YTEuMDU2OSwxLjA1NjksMCwwLDEsLjg3NTcsMS4wNHYxLjE2NDNhMS4wNTY5LDEuMDU2OSwwLDAsMS0uODc1NywxLjA0bC0xLjM3MjQuMjQxNkE3LjExLDcuMTEsMCwwLDEsNDUuMjcsMTkuOTNsLjgwMTksMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLS4xMTc0LDEuMzQyMmwtLjgyODguODQ4OWExLjA1NywxLjA1NywwLDAsMS0xLjM0MjEuMTE3NGwtMS4xNDQyLS44MDE5YTcuMTMzOCw3LjEzMzgsMCwwLDEtMS43MTEzLjcxMTNsLS4yNDE2LDEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLTEuMDQuODc1N0gzOC40Njg0YTEuMDU2OCwxLjA1NjgsMCwwLDEtMS4wNC0uODc1N2wtLjI0MTYtMS4zNzI0YTcuMTM1NSw3LjEzNTUsMCwwLDEtMS43MTEzLS43MTEzbC0xLjE0NDEuODAxOWExLjA1NzEsMS4wNTcxLDAsMCwxLTEuMzQyMi0uMTE3NGwtLjgzNTUtLjgyNTVhMS4wNTcsMS4wNTcsMCwwLDEtLjExNzQtMS4zNDIxbC44MDE5LTEuMTQ0MmE3LjEyMSw3LjEyMSwwLDAsMS0uNzExMy0xLjcxMTJsLTEuMzcyNC0uMjQxNmExLjA1NjksMS4wNTY5LDAsMCwxLS44NzU3LTEuMDRWMTUuNzgyNmExLjA1NjksMS4wNTY5LDAsMCwxLC44NzU3LTEuMDRsMS4zNzU3LS4yNDE2YTcuMTEsNy4xMSwwLDAsMSwuNzExNC0xLjcxMTJsLS44MDItMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLC4xMTc1LTEuMzQyMmwuODI1NC0uODI1NEExLjA1NjgsMS4wNTY4LDAsMCwxLDM0LjMyNDUsOS4zNmwxLjE0NDIuODAxOUE3LjEzNTUsNy4xMzU1LDAsMCwxLDM3LjE4LDkuNDUxbC4yNDE2LTEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLDEuMDQtLjg3NTdoMS4xNjc3YTEuMDU2OSwxLjA1NjksMCwwLDEsMS4wNC44NzU3bC4yNDE2LDEuMzcyNGE3LjEyNSw3LjEyNSwwLDAsMSwxLjcxMTIuNzExM0w0My43NjY2LDkuMzZBMS4wNTY5LDEuMDU2OSwwLDAsMSw0NS4xMjU1LDkuNDY3N1ptLTIuMDMsNi44OTg3QTQuMDQzMyw0LjA0MzMsMCwxLDAsMzkuMDUyMywyMC40MWgwQTQuMDQ2NSw0LjA0NjUsMCwwLDAsNDMuMDk1NSwxNi4zNjY0WiIgc3R5bGU9ImZpbGw6I2UxMjIyOSIvPjxwb2x5Z29uIHBvaW50cz0iMzkuNDEzIDM0Ljc1NyAzOS41MzcgMzQuNzU3IDM5LjY3NSAzNC43NTcgMzkuNjc1IDEwOS41MSAzOS41MzcgMTA5LjUxIDM5LjQxMyAxMDkuNTEgMzkuNDEzIDM0Ljc1NyAzOS40MTMgMzQuNzU3IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjMwODg1NDQ1MDU2MDE2MThweDtmaWxsLXJ1bGU6ZXZlbm9kZCIvPjwvc3ZnPg==);\n",
" float:left;\n",
" margin-right:20px;\n",
" margin-top:-20px;\n",
" margin-bottom:20px;\n",
"}\n",
"div.todo{\n",
" font-weight: bold;\n",
" font-size: 1.1em;\n",
" margin-top:40px;\n",
"}\n",
"div.todo ul{\n",
" margin: 0.2em;\n",
"}\n",
"div.todo li{\n",
" margin-left:60px;\n",
" margin-top:0;\n",
" margin-bottom:0;\n",
"}\n",
"\n",
"\n",
"</style>\n",
"\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"FIDLE 2020 - Practical Work Module\n",
"Run time : Wednesday 9 September 2020, 14:42:06\n",
"TensorFlow version : 2.2.0\n",
"Keras version : 2.3.0-tf\n",
"Current place : Fidle at IDRIS\n",
"Dataset dir : /gpfswork/rech/mlh/commun/datasets\n",
"Update keras cache : Done\n"
]
}
],
"source": [
"import numpy as np\n",
"from sklearn.datasets import load_iris\n",
"from sklearn.linear_model import Perceptron\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"\n",
"import os,sys\n",
"\n",
"sys.path.append('..')\n",
"import fidle.pwk as ooo\n",
"\n",
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 2 - IRIS Data Recovery\n",
"\n",
"Retrieve a dataset : http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets \n",
"About the datesets : http://scikit-learn.org/stable/datasets/index.html \n",
"\n",
"Data fields (X) :\n",
"- 0 : sepal length in cm\n",
"- 1 : sepal width in cm\n",
"- 2 : petal length in cm\n",
"- 3 : petal width in cm \n",
"\n",
"Class (y) :\n",
"- 0 : class 0=Iris-Setosa, 1=Iris-Versicolour, 2=Iris-Virginica\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Examples :\n",
"Length Width Iris Setosa (0/1)\n",
" x1 x2 y\n",
" 1.4 1.4 1\n",
" 1.6 1.6 1\n",
" 1.4 1.4 1\n",
" 1.5 1.5 1\n",
" 1.4 1.4 1\n",
" 4.7 4.7 0\n",
" 4.5 4.5 0\n",
" 4.9 4.9 0\n",
" 4.0 4.0 0\n",
" 4.6 4.6 0\n",
"\n",
"X shape : (150, 2)\n",
"y shape : (150,)\n"
]
}
],
"source": [
"X0,y0 = load_iris(return_X_y=True)\n",
"\n",
"X = X0[:, (2,3)] # We only keep fields 2 and 3\n",
"y = y0.copy()\n",
"\n",
"y[ y0==0 ] = 1 # 1 = Iris setosa\n",
"y[ y0>=1 ] = 0 # 0 = not iris setosa\n",
"\n",
"print('Examples :')\n",
"print('Length Width Iris Setosa (0/1)')\n",
"print(' x1 x2 y')\n",
"for i in range(45,55):\n",
" print(f\" {X[i][0]:3.1f} {X[i][0]:3.1f} {y[i]}\")\n",
"print(f'\\nX shape : {X.shape}')\n",
"print(f'y shape : {y.shape}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 3 - Get a perceptron"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Perceptron(max_iter=100, random_state=82, tol=0.01)"
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pct = Perceptron(max_iter=100, random_state=82, tol=0.01)\n",
"pct.fit(X, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 4 - Prédictions"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Petal : length=2.0, width=2.0 => is setosa : 1\n",
"Petal : length=5.0, width=5.0 => is setosa : 0\n"
]
}
],
"source": [
"X_pred = np.array( [ [2.0, 0.5], [5.0, 1.5] ] )\n",
"\n",
"y_pred = pct.predict(X_pred) \n",
"\n",
"for i,x in enumerate(X_pred):\n",
" print(f'Petal : length={x[0]}, width={x[0]} => is setosa : {y_pred[i]}')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 5 - Visualisation"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoIAAAGPCAYAAADIhrFWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde3wU5dn/8c9kc0QEBARNlINAWxSER0WCHEROKgdRUCuiVWlFGWyf2mo9gaVCbVWqrYeJ2qq04gEEPIFYKCmCSAArKFXqCUEhj6Dwk8ohkMP8/piAISS7s9nZnZ3d7/v1yitm9957rhlQr9wz93UZtm0jIiIiIuknw+8ARERERMQfSgRFRERE0pQSQREREZE0pURQREREJE0pERQRERFJU0oEo2Sapm2aprZai4iISOBl+h1AgCkZFBERkSAw6ntDK4IiIiIiaUqJoIiIiEiaUiIoIiIikqaUCIqIiIikKSWCIiIiImlKiaCIiIhImlIiKCIiIpKmlAiKiIiIpKlAFZQ2DON7wBXAEKADkAt8CrwA/NG27T0u5lgKnF3P2z1s237bm2hFRER8sr0UFs2DkmIo2we5eVA4AIaMglb5iT1OomKRBjFsOzgNMgzD+D0wEXgFKAHKgXOAS4H3gELbtvdFmGMpcApwYx1vv2bb9s5wnz/YXs6yrGjDFxERib/1a6BoGlRWQGXld6+HQhDKhAmToGuPxBwHEhOLRFJvZ5GgJYJnAB/btr2r1uvTgDuAn9q2/XCEOZYC7WzbbteQGJQIiohI0tpeClMmwIH99Y/JzoEpRbGtxrk5Tla28738QHxjETdSo8Wcbdtv104Cq82q/t7F7VyGYWQYhtHEMIx6L46IiEigLJrnrL6FU1kBi+fF/zjlB6CiPP6xSEwClQiGcUL1920uxxcAu4FdwG7DMOYZhvGDuEQmIiKSKCXFh9+CrUtlJawsjv9xACLddfQiFolJ4BNBwzBCwJ1ABfCsi498BtwLXANcAljA+cAqwzC6hjnOeMMwtJFERESSV1nYx+S/s9/luFiP40assUhMAp8IAn8ECoE7bdv+MNJg27avsW37Dtu2Z9m2Pce27ZtxdiE3Bu4P87nHbds+w7OoRUREvJab525cjstxsR7HjVhjkZgEOhE0DGMqcAPwuG3bv2voPLZtLweWAecYhqG/kSIiEkyFA5wdueGEQtBrQPyPAxDpMXwvYpGYBDYRNAxjCjAJeAq43oMpNwEh4BgP5hIREUm8IaOcsizhhDJh8Kj4HycrGzKz4h+LxCSQiaBhGL8Gfg38DfiJ7U0NnE44zxmGrSMoIiKStFrlO7X5snOOXLELhZzXJ0yKvVyLm+OYk52veMciMQlUHUEAwzDuBH4DPA1cbdt2VT3jjgeaAp/btr23+rWmwG7btitrjR0GzAcW2rY9NNzxVUdQRESS3vZSpyzLymJnM0ZOnnMLdnAcOotEOk6iYpFwUqag9ETgYeBzYDJQOwncZtv24uqxM4CrgHNs215a/dqFOBtCXgU24qwAnonTtm4n0Nu27Y/CxaBEUERERAKm3kQwUL2GgYN9aNoAf63j/TeAxWE+/yHwL2A40BrIArYAjwJ327a91btQRURERJJboBJB27avBq5u6Fjbtjfg1A4UERE53PZSp2NGSbFTJy83z9kdOyQJb2FuWAfPFUHp5u9ey28LYyZA5+7+xSWBE8jNIiIiIp5av8bpnbt8IZTtBWzn+/KFzuvr1/gd4XdefQb+cOvhSSA4P//hVud9EZeUCIqISHrbXgpF0+DA/iPbplVWOq8XTXPG+W3DOnj56fBjXn7aGSfighJBERFJb4vmQWVF+DGVFc7OV789V+Ru3PMux0naUyIoIiLpraT4yJXA2iornfInfqt9O7g+W12Ok7SnRFBERNJb2T534/a7HCcSIEoERUQkveW6bDGfo1b0knqUCIqISHorHHBkC7TaQiGnG4bf8tu6G1fgcpykPSWCIiKS3oaMglCEsrqhTKclmt/GTHA37jKX4yTtKREUEZH01iofJkyC7JwjVwZDIef1CZOSo6h05+4w8srwY0ZeqaLS4lqgOouIiIjERdceMKXIKRGzstjZGJKT59wOHpxknUVGjIWOpzglYmruDi5o66wEKgmUKBi2bfsdQ6CYpmkDWJbldygiIiIibhj1vaEVQREREYjca9hNL2KvxsT7XBI5T5B6OCdKEl0TrQhGSSuCIiIpaP0ap41cZcXhxaVDIWejyPmXwsLZ9b8/YZLzc7g53I7p2iO+5+L2GF7M41UsqcSfa1LviqASwSgpERQRSTHbS2HKBKencENlZTvfyw/ENiY7x3lWsaGrQm7Oxc0xvJjHq1hSiX/XpN5EULuGRUQkvbnpNRxJeXn4BA+c9yvKw4+JtaexV32TvZgnSD2cEyUJr4kSQRERSW9ueg1H5PLuWqS7cLH2NPaqb7IX8wSph3OiJOE1USIoIiLpzW2v4USJpaexV32TvZhHPZyPlITXRImgiIikN7e9hhMllp7GXvVN9mIe9XA+UhJeEyWCIiKS3tz0Go6o3mfxaw2LMC7WnsZe9U32Yp4g9XBOlCS8JkoERUQkvbnpNRxJVtZ3u4LrHZMNmVnhx8Ta09irvslezBOkHs6JkoTXRImgiIikNze9hkdeGf59c7LzFeuYWHsae9U32Yt5gtTDOVGS8JqojmCUVEdQRCRFbS8N32s40vtu5nA7Jt7nksh5EnG+QZP4a6KC0l5RIigiIiIBo4LSIiIiInK4GJ+OFRERkYTbXup0qSgpdmrT5eY5O1KHRHnLNtY50k0KXjPdGo6Sbg2LiIiv1q+BomlOK7KaXSpCIWfH6YRJ0LVH/OdIN8G+Zro1LCIiEnjbS51k5MD+I1uVVVY6rxdNc8bFc450k8LXTImgiIhIUCya56xIhVNZ4exIjecc6SaFr5kSQRERkaAoKT5yRaq2ykqnLEk850g3KXzNlAiKiIgERdk+d+P2hxnnxRzpJoWvmRJBERGRoMjNczcuJ8w4L+ZINyl8zZQIioiIBEXhgCNbk9UWCjldKuI5R7pJ4WumRFBERCQohoxySpWEE8p0WpXFc450k8LXTImgiIhIULTKd+rVZeccuUIVCjmvT5gUvrixF3OkmxS+ZiooHSUVlBYREd9tL3VKlawsdjYo5OQ5tyUHR9lZJNY50k1wr1m9BaWVCEZJiaCIiIgETL2JoHoNi4iIJFKkfrVu+tl6MYcXsaaadDtftCIYNa0IiohIg0XqV3v+pbBwdvh+thD7HG564ga7t270Uvt8dWvYK0oERUSkQbaXwpQJTl/ahsrKdr6XH2j4HNk5MKUo/AqXm1jdzBMUqX++9SaC2jUsIiKSCG761UZSfgAqymObw01P3BTurVundDvfGpQIioiIJIKbfrVuxHonz01P3BTurVundDvfGpQIioiIJILbfrWJEKknbgr31q1Tup1vDUoERUREEsFtv9pEiNQTN4V769Yp3c63BiWCIiIiieCmX60bRr3P/bvjpiduCvfWrVO6nW8NSgRFREQSwU2/2kiysiEzK7Y53PTETeHeunVKt/OtQYmgiIhIIrjpVzvyyvDvm5Odr1jmcNMTN4V769Yp3c63BtURjJLqCIqISEwi9at108/Wizm8iDXVpO75qqC0V5QIioiISMCkRq9hwzC+B1wBDAE6ALnAp8ALwB9t297jcp6hwCSgG7AfWAL8yrbtz+IRt4iIxFmQ+vdKfCTizycF/w4EakXQMIzfAxOBV4ASoBw4B7gUeA8otG07bJEfwzBGAXOAd4E/A02BnwOVwBm2bZeG+7xWBEVEkkyQ+vdKfCSiT3CwexGnxq1hwzDOAD62bXtXrdenAXcAP7Vt++Ewn88CNgEVwCm2be+ufr078C/gCdu2x4eLQYmgiEgSCVL/XomPRPQJDn4v4tToNWzb9tu1k8Bqs6q/d4kwxdlAPvCXg0lg9bzrgKXAD6uTRRERCQJP+veWx5YEQsr2oQ2ERPQJTuFexIFKBMM4ofr7tgjjDq7ZrqzjvRKgCfA9r4ISEZE486R/rwd3xlK0D20gJKJPcAr3Ig58ImgYRgi4E+d277MRhh9cr91ax3sHXyuo5zjjDcN4u0FBiohIfASpf6/ERyL6BKdwL+LAJ4LAH4FC4E7btj+MMLZR9fe6bvKX1RpzGNu2H7dt+4yGhSgiInERpP69Eh+J6BOcwr2IA50IGoYxFbgBeNy27d+5+Mje6u85dbyXW2uMiIgkO0/698bYuxdStg9tICSiT3AK9yIObCJoGMYUnFqATwHXu/zYwdIwdd3+PfhaXbeNRUQkGXnSvzfru53DDZWifWgDIRF9glO4F3EgE0HDMH4N/Br4G/AT230NnDXV33vV8V4h8F/go9gjFBGRhAhS/16Jj0T0CU7hXsSBqiMIYBjGncBvgKeBq23brqpn3PE4xaI/t217b/VrWcBmnELUNesIdgPeAZ6ybfsn4Y6vOoIiIkkoSP17JT4S8ecT3L8DKVNQeiLwMPA5MBmonQRus217cfXYGcBVwDm2bS+tMcclOHUHD3YWaQLciFM/4HTbtsPeGlYiKCIiIgHjXa9h0zRPBvoBbYCWwD5gO7AOWGZZ1rcNDNKNg3UA2wB/reP9N4DF4SawbfsFwzD24TxfOJ3veg3fEikJFBEREUklrlYETdM8ARgPjAOOP/jZWsNsnH69/wCKgPmWZQVnudElrQiKiATQ9lKnO0RJsVMTLjfP2Qk6pMYtvQ3r4LkiKN383efy28KYCdC5u3fHSTe6JsmgYbeGTdNsDkwBrgMO9uldgbPp4ktgJ5AHtAB+gLMJowdOeZYPgV9alrXQgxNIGkoERUQCZv0aKJrmtACr2R0iFHJ2ek6YBJs+gpefrn+OkVfCiLGxH6drj/o/n4p0TZJFgxPBnThJ3Qzgr5ZlrY50JNM0mwCX4awg/g9wo2VZD0YZcNJSIigiEiDbS2HKBDhQVx+BaplZUFEeea5f/r7+lUE3x8nOgSlF6bMKpmuSTBr8jOBM4LeWZUXq4XuIZVn/BR4HHjdN80K+K9QsIiKSWIvmOatR4bhJAgGeL4LfPNbw41RWODtOx97g7nhBp2sSCIHaNZwMtCIoIhIgN4yCMg8bRv3l9diOk9sIHp7nXTzJTNckmdS7IhjIgtIiIiKulO1LruPsT1A8yUDXJBCUCIqISOrKzUuu4+QkKJ5koGsSCA2pI3gCTgHm7sAJOLuJa7Mty+oQY2wiIiKxKRwAyxcevmO1oQraxnacUMjpQpEudE0CIaoVQdM0++P04r0R6As0wrnvXPtLK40iIuK/IaOcMiXhZNa1nlGHyybEdpxQptOKLF3omgRCtCuC9wIh4EfAs5Zl1dnnV0REJCm0yndq1XlRRzBcUWm3x0mnMim6JoEQ1a5h0zT3AbMsy7o6bhElOe0aFhEJoO2lTpmSlcXO5oScPOeW5OBanUWeL4KtNTqLFLR1VgKj6SwS6TjpRtckGTSsoHRtpmmWAs9blvULL6IKIiWCIiIiEjANLihd23zg7NhiERERicLKJU4P4L27v3utUWOnB3Cvgc7PqdQn2M25eBFrssyRTMdJQ9GuCLYESoC/A7+yLGtPvAJLVloRFBFJoL/c6/zPvz6FA6B1Qer0CX71mcjn0u57scfqxfkm6poly59NsHlzaxjANM2OwCogG2cH8a46htmWZQ2MauKAUCIoIpIgK5fAE/d5M1cQ+gRvWAd/uDXyuEi9kSPF6sX5JuqaJcufTfB501nENM1TgLeAY4CjgP8B+tfzJSIi0nDPFXk31/Nh5oqmJ248uT3fSL2RI8Xqxfkm6poly59NCov2GcH7gRbAncBfgVLLsjyo0ikiIlJLzWcCY1VzJ3BtJcWRC05XVjq7Xsfe4F1MtZWGiTEakWL14nwTdc2S5c8mhUWbCPYC5lmWNS0ewYiIiCRcKvbEDRerF+ebqGuWin82SSbaDiAHgE1xiENERMQfqdgTN1ysXpxvoq5ZKv7ZJJloE8GlwJlxiENERORwjRp7N1ekPsGhUPjPJ6Inbn6YGKMRKVYvzjdR1yxZ/mxSWLSJ4K+Ak03TvNU0zXp3oIiIiMRsTJjevtEKQp9gt+cbqTdypFi9ON9EXbNk+bNJYdHWEXwSaA/0w7lFvI76y8f82IsAk43Kx4iIJJDqCB5OdQTjd5zU5lmLuSqXQ23LsiKs5QaTEkERkQRbucQp/7Knxi7ioxo7q3w1O4ukSp9gN+fiRazJMkcyHSd1eZYIun6AwbIsj/bBJxclgiIiIhIw3vQaTtXkTkREGiBI/V+DFKtIAkVbR1BERKTu57bK9sLyhfDW4uR6bitIsYokWLQt5i4xTbPYNM06f30yTbPANM0lpmlq+46ISKraXuokVgf2H9n1obLSeb1omjPOb0GKVcQH0ZaP+QnQzLKsOv+NsSxrK9CkepyIiKSiIPV/DVKsIj6INhHsCrwdYczbwKkNC0dERJJeNP1f/RakWEV8EG0i2BzYHmHMDqBlw8IREZGkF6T+r0GKVcQH0SaCXwOdIozpBHzTsHBERCTpBan/a5BiFfFBtIngCuAC0zR/UNebpml2BkYCy2MNTEREklSQ+r8GKVYRH0RbPmY6MAp40zTNu4DXga1AAXA+MBkIVY8TEZFUNGSUU3Yl3LN3ydL/NUixivggqhVBy7LWACbOzuAHgA3Af6u/31/9+gTLslZ5HKeIiCSLVvlO7b3snCNX20Ih5/UJk5KjUHOQYhXxQVQt5g6qvgVsAj2BZjjPBJYARZZlbfA0wiSjFnMiItWC1P81SLGKeM+bXsOiRFBEREQCp95EMNrNIiIiIiKSIsJuFjFNs6C6W0iDmaZ5vGVZ/xfLHCIikoS2lzqdO0qKnXp9uXnOLt0hUdxu9WIOryRTLImQbucrdQp7a9g0zX3Ao8D0aBJC0zQN4AJgCvCiZVl3xRhn0tCtYRERYP0ap0dvZcXhO3JDIWcX7oRJ0LVH/OfwSjLFkgjpdr7S4FvD9wHjgU2maS40TfMa0zTrLChtmmZj0zQHmKZ5D/AFMA8oq/4uIiKpYnupk0Qc2H9kWZbKSuf1omnOuHjO4ZVkiiUR0u18Jaywt4Yty7rTNM3HgTuBy4EhAKZpfgt8Cfw/IBdoARyPk1gawFrgJsuyno9f6CIi4otF85yVpHAqK5xdumNviN8cXkmmWBIh3c5Xwoq4WcSyrC2WZY0H8oGJwIvAPuB7OOVjugGtgHU4tQTPsizrdCWBIiIpqqQ4fIFmcN5fWRzfObySTLEkQrqdr4TlurOIZVn/xXle8FEA0zSzcFYC91mWtSs+4YmISNIp2+du3P4w47yYwyvJFEsipNv5SljRtpg7xLKscpzbwyIikk5y86Bsb+RxOXnxncMryRRLIqTb+UpYqiPYQNOmTUPFuEUkLRUOOLJdW22hkNO5I55zeCWZYkmEdDtfCUuJYANNnjyZcePGceDAAb9DERFJrCGjnBIj4YQynfZt8ZzDK8kUSyKk2/lKWEoEG6hRo0bMmDGD888/n2+++cbvcEREEqdVvlNnLjvnyJWlUMh5fcKk8EWJvZjDK8kUSyKk2/lKWOo1HKWDBaXHjRvHiBEj+PLLL+ncuTMLFiygffv2focnIpI420udEiMri52NBTl5zu3EwVF2Fol1Dq8kUyyJkG7nm97qLSitRDBKNTuLfP755wwbNox///vf5Ofn89FHH3HUUUf5HaKIiIhITfUmgg3eNewHwzBuA04DTgfaA5tt224X5RxLgbPrebuHbdtvu52rTZs2vPnmm1xyySWMGjVKSaCIJIdE9ZCd+yQsfAGouaBgwPmXwOhx7mLxKtYN6+C5Iijd/N1r+W1hzATo3N3dcdR7V9JQoFYEDcOwgZ3AOzjJ4H8bmAieAtxYx9uv2ba9M9zn6+o1XFVVRUbGd49bfv7555x44okYRr0JuIhIfCSqh+yvJ8DWz+p/v6A9XDwufCznXwoLZ8ce66vPwMtP1/9+4QB4Z0X444B670oqS41bw4ZhnGTb9sbqf/430LiBiWC7aD93UF2JYE0ffPABZ511FmPGjOGhhx4iMzNQi64iEmTbS2HKBKdXbH2yc2BKUWwrXHOfdBK4SIwMsKsafhw3sW5YB3+4teHHAMjKdr6Xh6kC4cV1E/GPd7eGTdM8G7gZOBM4hrp3HtuWZXmeAR1MAr1gGEYG0Bj41vYwG/7kk08oKyvj0UcfZfPmzcyaNYujjz7aq+lFROqXqB6yC19wNy6WJBDcxfpcUWzHACcBjHQHR713JUVFVT7GNM1hwD+AocBeoARYVsfXcm/D9FwBsBvYBew2DGOeYRg/8GLiCy64gOLiYlq2bMnChQvp06cPW7Zs8WJqEZHwEtZDNkF3ktzEWvOZwFhEWg9Q711JUdGu2k0ByoFhlmUt8j6chPgMWAG8B1QCPYEbgIGGYfSxbXt9XR8yDGM8MH7ChAkRD3DWWWdRUlLC0KFDee+99+jZsycLFiyge/fu3p2FiEhtqdhDNpliTaZYRDwSbUHpLsCsACeB2LZ9jW3bd9i2Pcu27Tm2bd8MDMG5TXx/mM89btv2GW6P06FDB1auXEm/fv0oLS1lwIAB7Nq1y4MzEBGpR67L3rBB6iGbTLEmUywiHok2EdyNs2s3pdi2vRznlvY5hmF49m968+bNWbRoEVdccQUPPPAATZs29WpqEZEjJayHbIIqIriJNb+tN8eK9Iygeu9Kioo2EVwC9IpHIElgExDC2QDjmZycHP72t79x1VVXHXrt3//+N5WRnuMREYlWonrInn+Ju3FGjF1M3cQ6JvLjOhFlZUNmVuyxiARQtP+W3gJ0ME1zkmmaqVYkrxNQQRxWPGvWE1y3bh29evVi9OjR7Nmzx+tDiUg6S1QP2dHjnDqB4RS0h5/9JnwsI6+MPdbO3Z15wikcEP445mTnS713JQ2FrSNomuaTdbzcDqczx2ZgHfBNHWNsy7J+7EWA9YlUR9AwjOOBpsDntm3vrX6tKbDbtu3KWmOHAfOBhbZtDw133Eh1BCNZtmwZI0eO5JtvvuGMM87g1Vdf5bjjjmvQXCIidUpUD9m5T8LrLxy+49Yw4LxanUXCxeJVrBvWwfNFsLXGLuKCtnBZjc4ikY6j3ruSuhpWUNo0zYYWgbIty4rwoEr0DMO4Ejj4QMhPgWzgD9U/b7Zt++kaY2cAVwHn2La9tPq1C3E2hLwKbMRZATwTuAJnJbC3bdsfhYsh1kQQYMOGDQwbNozPPvuMNm3asGDBArp06dLg+URERETCaHBB6Qhr/wn3Y47sEzy1+vsbQJgeQwB8CPwLGA60BrKALcCjwN22bW/1LtT6de7cmZKSEi644AJWrVpF7969mTNnDoMHD07E4UXET0HqZxupf68bkc7XzTGCdM0SRddEPBKoFnPJwIsVwYP27dvHlVdeydy5c2ncuDGbNm2iRYsWMc8rIkkqUX2AvRCpf+/IK2HE2PBzRDrf03o7iUy4Y7T7XnCuWaIE6e+RJIt6VwSj7Sxyp2ma/SKM6Wua5p3RzJuu8vLymD17Nr/61a944oknlASKpLLtpc7/vA/sP7L7R2Wl83rRNGec3zasC58EgvP+hnX1v+/mfMMlgQeP8chdwbhmiRKkv0cSCNHuGp4C9I8wph/w64YEk44yMjK45557uPTSSw+9tnLlSsrKynyMSkQ8F00fYL+57d/7fJhxbs7XjYry8O8nyzVLlCD9PZJAiLHIU50ygRg7jaevVatWMWDAAAYOHMjXX3/tdzgi4pWE9QH2gNv+vVvDjHNzvl5IlmuWKEH6eySBEI9E8HRAGUwD5eXl0bJlS9566y0KCwv56KOwm5hFJChSsQ9wOG7P1wupcs3cSLe/RxJ3kXYNY5pm7V8rrjZNs38dQ0PAiTjlXZ6LPbT0dOqpp7Jq1SqGDx/O2rVr6dWrFy+99BJ9+/b1OzQRiUVuHpTtjTwuVfrZuj1fL6TKNXMj3f4eSdy5WRHsX+PLxiko3b+Or97AUcAs4EYPY0w7+fn5LFu2jOHDh7Nz504GDRrEM88843dYIhKLhPUB9oDb/r0FYca5OV8vJMs1S5Qg/T2SQIi4ImhZ1qFksbrA9BTLsu6Ka1RC48aNeemll/j5z3/Oww8/zHXXXcegQYNo3bq136GJSEMMGQVvLQ7/fFey9LMdMwH+cGvkcZeF6fPr5nzdyMwKv2EkWa5ZogTp75EEQrTPCF4DvBSPQORIoVCIhx56iD/+8Y8899xzSgJFgixRfYC94KZ/78grwxeVdnO+hRFWrUZeCRPvDMY1S5Qg/T2SQFBB6Sh5WVC6oRYtWsSZZ55Js2bNfItBRBooSP1sI/XvdSPS+bo5RpCuWaLomkh0GtxrOGzx6HAsy1rW0M8mM78TweXLlzNo0CA6dOjAggULaN8+2boAioiISJJpcK/hpTgbRBoiAU8Jp582bdrQqVMn3n//fQoLC3nllVfo2bOn32GJiIhIAEVKBO/iyESwJ3Ae8CnwJvAlcBzQB+gALARWexumHNS2bVtWrFjBJZdcwuLFi+nfvz/PPPMMo0bpwWCRmGwvdbo2lBQ7tdpy85xn2IYk+FbbyiVOZ4+9u797rVFjZwNHr4HOzxvWOWNqFn7Ob+uM6dw98vtu5oDI18TNNUuW6yoidYrqGUHTNAtxVglvBh6xLKuqxnsZwE+B3wP9Lcta5W2oycHvW8MHlZeXY5omf/nLXzAMg/vuu49f/OIXGEa9q78iUp/1a5z+rJUVh+/GDIWcHZgTJkHXHvGP4y/3hu+/WzgAWheE7wP8/W7w4bv1v39wE0i4OUZeCe2+F/6anH8pLJwd/ppBclxXEWnYM4K1maa5GNhvWdbwMGPmA1mWZZ0bVYgBkSyJIIBt29xzzz3cdtttNGnShA8++ICCggK/wxIJlu2lMGUCHNhf/5jsHJhSFN8VrJVL4In74jd/tCKVbYkkK9v5Xn6g/jGJuK4iAmESwWjLx5wJrIsw5l2gMMp5pQEMw+DWW29l1qxZzJkzR0mgSEMsmuesWIVTWeHs0Iyn54riO3+0YkkCwUkAI82RiOsqImFFm6M+be0AACAASURBVAgaOM8BhtOxgbFIA1166aUMHjz40M9z585ly5YtPkYkEiAlxZGLHldWOmU64qnmM4GpItIdp0RcVxEJK9pE8C1gtGmadd4aNk3zAmAUsCLWwKRh/vnPf/LDH/6Qnj17sm5dpMVbEaFsn7tx+12Ok+jouor4KmKLuVruAJYBL5um+Ub1P28DWgNnA/2AfdXjxAennnoqZ511FsuXL6dPnz7Mnj2boUOH+h2WSPLKzYOyvZHH5eTFP5Z0pOsq4quoVgQty/oXMBj4GOgP3Ak8XP39bOAjYIhlWWu9DVPcatGiBYsXL2bs2LHs2bOHESNGJMXGFpGkVTjgyFZdtYVCTteGeGrUOL7z+yFSFYNEXFcRCSvaFUEsy3oL+IFpmmcBpwFNgV3AO9Xvic9ycnJ4+umn6dChA3fddRcTJ07k008/5d577yUU6X94IulmyCh4a3H45wRDmU7rrngaMyH9dg0n4rqKSFjqNRylZCof48Zf//pXrr32Wo4++mjWrl1LmzZt/A5JJPmojuCRY1RHUCSVeFNHUIKXCIKzgSQzM5O+ffv6HYpI8tpe6pQyWVnsbGDIyXNuWw72obPI80Wwp8Yu4qMaw2W1Oos8XwRba3QFKWjrjDnYWSTc+27mgMjXxM01S5brKpLeGpYImqZ5J06LuUcsy9pZ/bMbtmVZU6OLMRiCmAjWNmPGDHr06MEpp5zidygiIiISf/UmgpGeEZyCkwjOAnZW/+yGDaRkIhh0xcXFjBs3jiZNmjB37lwGDhzod0gi6cWL/r2xHsOrWL2gXsQivoqUCJ5T/f3zWj9LQBUWFjJq1Cjmzp3Leeedx2OPPca4ceP8DkskPdT1LGLZXli+0NmwUtdzdzXfd/NMXaRjuH0uz6t5/D6GiISlZwSjlAq3hquqqrjllluYPn06ALfffjtTp04lIyPa+uIi4pqbnsaRROrN61Xf5ET0X06WHs8i6cGzXsOSAjIyMrjvvvsoKioiFApx9913M3bsWMrKyvwOTSR1uelpHEmk3rxe9U1ORP/lZOnxLJLmokoETdPcZJrmX0zTHGua5vHxCkoS4/rrr2f+/Pk0btyY4uJivvrqK79DEkldbnoaRxKpN69XfZMT0X85WXo8i6S5aAtK5wLjgGsATNP8EFgCFAP/tCzrG2/Dk3g777zzePPNNzlw4AAnnnii3+GIpC63PY0jCdeb16u+yYnov6wezyJJIdoWc8cBXYEbgQXA8cBEYA7wlWmab5umeY9pmud6HqnETbdu3ejR47sHsh988EGWL1/uY0QiKSjXo5664Xrzuj1GpP6+Xs3j9zFEJKKonxG0LOt9y7IetCzrAqAFUAhMApYCJwM34SSJEkBLly7lf//3fxk0aBDPPvus3+GIpA43PY0jidSb16u+yYnov5wsPZ5F0lxMm0Usy6oCdgN7gH1AOc7OFG1CCag+ffowceJEDhw4wNixY5k2bRraWS7igSGjnLZqsYjUm9fNMdz09/VqHr+PISIRRZ2wmabZxjTNa0zTnGmaZimwHvgjcCowF7gSKPA2TEmUzMxMHnroIR544AEMw2Dy5MmMGzeOAwfCNI4Xkcha5Tt18bJzjlwJC4Wc10deGf79CZPCl1Jxc4xIc3g5j9/HEJGIoqojaJrmx8BJ1T9+DfyT6s0ilmV96n14yScV6gi69dJLL3H55Zezb98+BgwYwNy5c2nWrJnfYYkEmxf9e2M9hlexekG9iEUSoWG9hmszTbMKp33cYpxVwGWWZe2NObwASadEEODtt99m+PDhZGZmsmrVKgoKtNgrIiISMA3uNVzbNJw2c+cAg4Fy0zRX4awKLgFWWZYVY8VUSSZnnHEGq1at4r///a+SQDmcesQeyc010XUTkSTSoBZzpmkeBZwNDKj+6lb91h5gObDEsqz7vQoymaTbimBdfvvb39K5c2dGjdJD3Gmrrh6x4DzbFcpMzx6xbq4J6LqJiB+8uTVcH9M0m+NsErkNaAXYlmXFWCchOaV7IrhixQr69OmDYRjcd999/OIXv8Aw6v37JalIPWKP5OaaZGU738vDbLxKt+smIonifa9h0zSbmqY50jTNB4E3gftxkkCAHQ2dV5LbWWedxd13341t29x0001MnDiRigo9DZBW1CP2SG6uSXl5+CQQ0u+6iYjvonpG0DTNgcDBr9NwEkkDp5bgQpxWc0ssy3rX4zglSRiGwW233cZJJ53EVVddRVFREZs2bWLWrFkcffTRfocniRBNj9ixNyQmJr+56iPs4u5Lul03EfFdtJtFFld/34/zLGAxziaR1ZZlxdhNXYLkhz/8ISeccAIjR45k4cKF9O3blwULFmhDSTpQj9gjedVHGNLruomI76JNBH+Pk/itsCyrLA7xSID07t2bkpIShg0bxq5du8jKyvI7JEmE3Dwoc1E1Kp16xLq9Jm6k03UTEd9FlQhalnV7vAKRYOrYsSNvvfUWO3fupFWrVpE/IMFXOACWLwx/KzTdesS6uSYYRLw9nG7XTUR8p57AErMWLVrQqVOnQz/fcsstaburOi2oR+yR3FyTrKzvdg7XJ92um4j4TomgeGrNmjXce++9TJw4kZtuuomqqiq/QxKvqUfskdxcE3Oy86XrJiJJxJM6gukk3esIujFjxgyuvfZaKioquOiii5g5cyaNGjXyOyzxmnrEHsnNNdF1E5HEi29B6XSiRNCd4uJiRo0axa5duzjzzDN55ZVXaN26td9hiYiIpCPvC0r7wTCM2wzDeMEwjI2GYdiGYWxq4DxDDcN4yzCMPYZh7Kyes73H4aa1AQMGsHLlStq1a8fq1avp2bMnH330kd9hiYiISA3Rlo/x293ATuAdoFlDJjAMYxQwB3gXuBloCvwcWGEYxhm2bZd6FGva69y5MyUlJVxwwQV88803tGzZ0u+QJIg2rIPniqB083ev5beFMROgc/fEzbG91OkgUlLs1A3MzXN2Cw/x+Jaum+MkKhYRSXmBujVsGMZJtm1vrP7nfwONbdtuF8Xns4BNQAVwim3bu6tf7w78C3jCtu3x4ebQreHo7d27lx07dnDiiScCYNu2+hOLO68+Ay8/Xf/7I6+EEWPjP8f6NVA0zWkBV7NETCjk7PSdMAm69gg/hxtujgOJiUVEUkm9/9MNuyJomma/hh7RsqxlDf1sfQ4mgTE4G8gH7jyYBFbPu84wjKXADw3DmGjbdnmMx5EaGjVqdGiziG3bTJw4kebNmzN16lQlhFK/DevCJ3DgvN/xlPpX9byYY3upk3gd2H/ke5WVzlfRNJhSFNtqnJvjWFOdn+vqWexlLCKSNiLdGl6KqwaZdQpFHpJwB39NXlnHeyXAAOB7wPsJiyjNvPfeezz22GNUVVWxceNGnnzySXJzc/0OS5LRc0Xuxj1fBL95LH5zLJrnrL6FU1nh7ASOpUewm+OUH4BIvzx5EYuIpI1IieBdNDwRTEYHf0XeWsd7B18rQIlg3HTr1o358+dz6aWX8txzz/HFF1/w4osv6vlBOVLN5/nC2RpmnBdzlBRH6BiC8/7K4tiSLzfHAYj0OI8XsYhI2gibCFqWNSVBcSTKwWJ2ddx7oazWmMMYhjEeGD9hwoR4xJVWzj//fN58802GDRvGm2++Sa9evXjttdcO604ikjTK9rkbt9/luFiP40assYhI2ghU+RgPHOwKn1PHe7m1xhzGtu3Hbds+Iy5RpaFu3bqxatUqunfvzieffEKvXr1Yt26d32GJHCk3z924HJfjYj2OG7HGIiJpI90SwYOlYQrqeO/ga3XdNpY4KCgoYNmyZQwdOpT8/HxOOukkv0OSZJLf1t24gjDjvJijcMCRLeFqC4Wc7iCxcHMciPyMoBexiEjaiLqOoGmaBnAxcC5O8lTX6pptWdbAGGOLhzXV33sB/6j1XiHwX0BVjxPo6KOP5uWXX+b//b//R5MmTQCoqKggFAppR3G6GzMB/nBr5HGXhXlcw4s5hoyCtxaHf34vlOm0iIuFm+NkZTvf69o17GUsIpI2oloRNE0zByeBeh4YBwwB+tf4OrvGP/vKMIzjDcP4gWEYNZ/5ewP4P+AnhmE0rjG2G07ML6h0TOJlZmZy7LHHAk55mZ/85Cf85Cc/obxcfxRprXN3p8ZfOCOvDF8Q2os5WuU7tfmyc45csQuFnNcnTIq9XIub45iTna94xyIiaSPaFcFbgHOAqcCDwFfAFOBxnETq98BbQIT/8jaMYRhXAgfv4RwLZBuGUV1hlc22bdcsGPY74KrqeJcC2LZdbhjG/wKzgOWGYfwZaALcWH0uv45H3OLehx9+yOzZs9m3bx+bN29mzpw5NGvWoCYykgpGjHVq/D1fdPjO3oK2ziqem64gXszRtYdTm2/xPGdH7v59znN4vQY4q29eJV5uj5OIWEQkLUTVWcQ0zfXAfsuyzqj+uQqYYlnWXdU/nwSsA35jWdYfPA/WKfp8dj1vv2Hbdv8aY2dQnQjatr201jzDgUnAqTg7iJcAt9i2/WmkGNRZJP5Wr17NiBEj2L59OyeffDILFiygXbt2foclIiISVPU+axXtZpEOwIoaP9tA1sEfLMvaCCwAro5yXlds2+5v27ZRz1f/WmOvrn59aR3zzLdtu9C27Ua2bR9j2/bFbpJASYwzzzyTVatWcfLJJ/PBBx9QWFjImjVrIn9QREREohJtIljOd/X2AL7FuUVb02ZA2z8lJu3atWPFihUMHDiQbdu2cfbZZ7NixYrIHxQRERHXok0Et3B46ZWPcHbg1vQ/wM5YghIBaNasGa+99hrXXHMNp5xyCt27u3iWS0RERFyLdrPICmBQjZ9fAqaZpvkEMA9nw8gg4FlPopO0l52dzRNPPMHu3bs56qijACgrKyMzM5PMzKirH4mIiEgN0a4IPgt8aJpmu+qf/4hTm+8a4BXgl8CngIvCXSLuGIbB0UcfDUBVVRVXXXUVI0eO5Ntvv/U5MhERkWCLatdwXUzTzARGAh2BTcCrlmXV2aYtFWjXsL8+++wzevTowY4dO+jevTvz58+noKCuRjEiIiJSrd5dwzEngulGiaD/PvnkE4YOHcrHH39MQUEBCxYsoFu3bn6HJSIikqy8KR9jmmaxaZo/ijDmCtM0i6OZVyQaHTt2ZOXKlfTt25etW7fSp08fXnvtNb/DEhERCZxonxHsD7SLMKYt9Rd9FvFEixYtWLx4MZdffjm7d+9mxIgRLFq0yO+wREREAiUe2y7zgIo4zCtymJycHGbOnEmHDh0oLi6mX79+fockIiISKA1JBOt8qNA0TQNoAwwFvoglKBG3DMPgrrvuYtKkSWRnZwOwZ88eDMOgUaNGPkcnIiKS3CImgtX9hGsmf1NM05wS5iMGcHeMcYlE5WASWFlZyZgxY9i2bRuvvPIKrVu39jkyERGR5OVmRXAZ3yWC/YDPccrE1FYJ7ACWAH/xIjiRaH355ZesX7+eTZs2UVhYyIIFCzj55JP9DktERCQpRVU+pnp1cIplWXfFL6TkpvIxyW/btm1ccMEFrF69mqZNmzJv3jwGDBjgd1giIiJ+8aZ8DNAe+FNssYjEV+vWrfnnP//J6NGj2bVrF+eeey4zZszwOywREZGk0+CC0qZpHgV8D2hsWdZyT6NKYloRDI6qqipuueUWpk+fDsCLL77IhRde6HNUIiIiCVfvimDUu4ZN0zwBZ1VwBBDCeX4ws/q9PsDjgGlZ1tKGRCrilYyMDO677z46dOjASy+9xNChQ/0OSUREJKlE21nkeGAVTm/h+cBKDs8yVwGtgB96FaBIrK6//npee+21QzuLd+3axY4dO3yOSkRExH/RPiP4a5xEb5BlWaOAxTXftCyrHFgO9PYmPBFvZGQ4f9XLy8u5+OKL6dWrF5988onPUYmIiPgr2kRwKPBKhNu+nwP5DY5IJI6++eYbvv76az7++GMKCwtZsWKF3yGJiIj4JtpEsDXwcYQx5cBRDQtHJL6OPfZYli1bxtChQ9mxYwcDBw5k1qxZfoclIiLii2gTwZ3AiRHGfA/4smHhiMTf0Ucfzcsvv8zEiRPZv38/l112GXfffTcN3UEvIiISVNEmgiuAC0zTPK6uN03T7AScB/wz1sBE4ikzM5OHHnqI+++/H8MwuOOOO3juuef8DktERCShoi0fcx/OjuE3TNP8OdAIDtUU7Ac8AFQBf/AySJF4MAyDG2+8kfbt2/Pss89y6aWX+h2SiIhIQkVdUNo0zWuAR6k7iawAxlmW9YwHsSUlFZROfTt27ODbb7+lXbt2fociIiLiBc9azGFZ1lNAF+BBYDXwKfAOYAGnpnISKKlv//79XHTRRRQWFrJmzRq/wxEREYmrqDuLAFiW9TFwo8exiPhu//79ZGdns23bNs4++2yeeeYZLrroIr/DEhERiQvXiaBpmm2AHjgt5dZYlvVF3KIS8UmTJk147bXXuP7663nqqacYPXo006dP58Ybb8Qw6l1ZFxERCSRXt4ZN05wObARmAy8An5mmeV88AxPxS3Z2Nk888QS//e1vsW2bX/7yl9xwww1UVFT4HZqIiIinIiaCpmleDvwC50HD/wAfVv/zL0zTHBPf8ET8YRgGt99+O88++yzZ2dlYlsXf/vY3v8MSERHxlJsVwR/j7AYeZFnWKZZlnQyci1Mm5sfxDE7Eb2PGjGHJkiVce+21XH311X6HIyIi4ik3ieCpwEuWZR0qEm1Z1j+Al4Hu8QpMJFn06dOHxx9/nIwM51+Xbdu28e677/oclYiISOzcJILH4NwOru0/QDNvwxFJbnv37mXEiBH06dOH1157ze9wREREYuImEcwAyut4vZwwBQpFUlFGRgYdO3Zk9+7djBgxgqKiIr9DEhERaTC3BaWjaz8ikqJyc3OZOXMmd9xxB1VVVZimyU033URVVZXfoYmIiEQtYos50zSriD4RtC3LalCx6mSnFnNy0FNPPcX48eOpqKjgoosuYubMmTRq1MjvsERERGqLucWcEeVX1K3rRILmmmuu4fXXX6dp06a8+OKLPP30036HJCIiEpWIq3aWZSmpkwYp3bmHuSUbKV5fyr4DFeRlZzKgaz6jC08iv/lRfofniYEDB/LWW2/x17/+lfHjx/sdjoiISFQi3hqWw+nWsDtrPtnO1DnvUFFZRWXVd3/HQhkGmaEMJl98Gj06tvIxwvjZsmULn3zyCf379/c7FBEREfDg1rCIa6U79zB1zjvsL688LAkEqKyy2V9eydQ571C6c49PEcbP7t27GT58OIMHD2bGjBl+hyMiIhKWEkHx3NySjVRUht9FW1FZxbxVnyUoosRp1KgRgwYNoqKigmuuuYbJkyejVXcREUlWSgTFc8XrS49YCaytsspmyfqtCYoocTIyMpg+fTqWZZGRkcG0adO44oor2L9/v9+hiYiIHEGJoHhu34EKd+P2uxsXRBMmTODVV1+lcePGPPvsswwaNIgdO3b4HZaIiMhhlAiK5/Ky3ZWQzMtJyVKThwwdOpTly5dTUFDAm2++yQsvvOB3SCIiIodRIiieG9A1n1BG+O6DoQyDgV0LEhSRf7p3705JSQm/+93vuO666/wOR0RE5DBKBMVzowtPIjMU/q9WZiiDUT3bJygif51wwgnceuutGIaTHG/cuJE5c+b4HJWIiIgSQYmD/OZHMfni08jJCh2xMhjKMMjJCjH54tNSpqh0NPbu3cuwYcO45JJLuPvuu7WjWEREfKVEUOKiR8dWPDq+L0NPa0OjnEwMoFFOJkNPa8Oj4/umbDHpSPLy8rj22msxDIM77riDa6+9lvLycr/DEhGRNKXOIlFSZxHxwosvvsjYsWPZt28fAwcOZM6cOTRr1szvsEREJDWlRmcRwzAyDMO40TCM/xiGUWYYxheGYfzBMAxX9xgNw1hqGIZdz9cZ8Y5f5KCLLrqIpUuX0qpVK5YsWULv3r3ZvHmz32GJiEiaCVr9jgeAnwEvAn8AOlf//D+GYQyybTt8OwvH18CNdby+0bMoxZXSnXuYW7KR4vWl7DtQQV52JgO65jO68KS0eH7wzDPPZNWqVQwbNowPPviARYsWce211/odloiIpJHAJIKGYZwC/BSYZ9v26BqvfwY8CFwGPOtiqj22bc+MT5Ti1ppPtjN1zjtUVFYd6kKy90AFC9d+weL3tjL54tPS4jnCdu3asWLFCmbNmqUkUEREEi5It4bH4Nzj/mOt1/8M7AWucDtR9S3mJsbBeh6SUKU79zB1zjvsL688ohVdZZXN/vJKps55h9Kde3yKMLGaNWt2WI3BDz/8kEceeUQ7ikVEJO6ClAj2AKqA1TVftG27DFhX/b4bBcBuYBew2zCMeYZh/MDLQCW8uSUbqagMfxe/orKKeas+S1BEyaOsrIxhw4Zxww038LOf/YyKitRtwyciIv4LUiKYD3xt2/b+Ot7bCrQ0DCM7whyfAfcC1wCXABZwPrDKMIyuXgYr9SteX3rESmBtlVU2S9ZvTVBEySM3N5epU6eSnZ3Nww8/zIUXXsju3bv9DktERFJUkBLBRkBdSSBAWY0x9bJt+xrbtu+wbXuWbdtzbNu+GRgCNAbuD/dZwzDGG4bxdrRBy5H2HXC3yrVvf3quho0ZM4YlS5bQvHlzFixYQL9+/SgtLfU7LBERSUFBSgT3Ajn1vJdbY0xUbNteDiwDzjEMIy/MuMdt21aJGQ/kZbvbo5SXE5i9TJ7r06cPJSUldOzYkbVr19KzZ0/effddv8MSEZEUE6REsBTn9m9dyWABzm3jAw2cexMQAo5p4OclCgO65h/Req62UIbBwK4FCYooOXXq1ImVK1fSu3dvtmzZwtq1a/0OSUREUkyQEsE1OPGeWfNFwzByge5ALLdtOwEVwM4Y5hCXRheeRGYo/F+9zFAGo3q2T1BEyatly5b84x//YPbs2Vx99dV+hyMiIikmSIngLMAGfl7r9Wtxng185uALhmEcbxjGDwzDaFTjtaaGYYRqT2oYxjCgN7C4egeyxFl+86OYfPFp5GSFjlgZDGUY5GSFmHzxaWlRVNqN3NxcLrnkkkM/r1+/nkmTJlFV5aZ+uoiISP0C8xCWbdvrDcN4BLjBMIx5wGt811nkDQ4vJv074CrgHGBp9WvnAPcbhvEqTheRCpzVxStwuo3UTjAljnp0bMWj4/syb9VnLFm/lX37K8jLyWRg1wJG9WyvJLAeBw4c4MILL2Tjxo385z//4emnnyYvr95HW0VERMIKTCJY7ec4z/ONB4bhJHAPAXe6aC/3IfAvYDjQGsgCtgCPAnfbtp1+tUp8lt/8KG44vws3nN/F71ACIzs7m8cee4zRo0czd+5ctmzZwssvv0zr1q39Dk1ERALIUPeC6JimaQNYluV3KA3mRY/fJe9twfr7++wu+67ES+PcTMxzT2HgqSe4Oo5XvYbTsWfx+++/z7Bhw9i8eTPt2rXjtddeo3Pnzn6HJSIiyaneHZpKBKMU9ESwrh6/4DyblxnKcNXj994X17Lk3/XXtRvYJZ9zuhaEPc4PzzqJWW9tjCkOr84nqL788ksuuOAC1qxZQ7NmzZg3bx7nnHOO32GJiEjyqTcRDNJmEYmRFz1+l7y3JWwSCLDk36VMmfV22OP87Y2PY+41nO49i4877jiWLl3KhRdeyDfffMOXX37pd0giIhIwSgTTiBc9fq2/v+/qWBURWshF/LyLXsPqWQyNGjVizpw5LF68mDFjxvgdjoiIBEzQNotIDKLp8VvfBo6azwTGU6Q4wJvzSQWhUIhBgwYd+vlf//oXRUVFPPLII+Tk1NeMR0RSXVVVFV9//TXffPMNlZWVfocjcRIKhWjWrBktW7YkIyP69T0lgmkkaD1+I8URtPNJhIqKCsaMGcPHH3/MRx99xIsvvkiLFi38DktEfLBlyxYMw6Bdu3ZkZWVhGOE7Oknw2LZNeXk527ZtY8uWLbRp0ybqOXRrOI0ErcdvpDiCdj6JkJmZyezZs8nPz2f58uX06tWLTz75xO+wRMQHe/bsoaCggOzsbCWBKcowDLKzsykoKGDPnoY9D69EMI140eO3cW5ikio3vYbVs7hu3bt3Z9WqVXTr1o2PP/6YwsJCVqxY4XdYIuKDhtwqlOCJ5c9Zf0PSiBc9fs1zT3F1rMwICVrEz7voNayexfU74YQTWL58Oeeffz47duxg4MCBzJ492++wREQkySgRTCNe9PgdeOoJDOySH/Y4A7vkM+WHZ4Q9zo/O7hRzr2H1LA7v6KOP5pVXXmHChAkcOHCA7Oxsv0MSEZEko4LSUQp6QWlw6u/F2uPXbWeRcMfxIg6vzieV2bbNO++8w+mnn+53KCKSQBs2bIi541Cydm7q378/Xbp04eGHH/YthmQT4c9bnUW8kgqJoKS3FStW8Pvf/56ZM2fStGlTv8MRkTiJNRH0q3PT1Vdfzddff838+fPrHbNz506ysrI4+uijG3SMvXv3Mm3aNGbPns2WLVto3Lgx3//+97nhhhtc12TdtGkT7du3Z82aNZxxxhkNisNLDU0E02c7pRyy7rOvsf7+Ppu/2n3otbbHNsY89xS6t28JRF7x8+K3xGT9TTOVVVVVcd111/H+++/Tu3dvFixYQNu2bf0OS0SSTM3OTbVVVtlUVjmdmx4d3zeh/70++JhL8+bNY5rn+uuvZ8WKFfzpT3+iS5cu7Ny5k1WrVrFz506PIg0OPSOYZp5Z9hG3zFx1WBIIsPmr3dwycxXPLPuIe19cy70vv3tE8ejdZRXc+/K7/OpvK7n+8eUsXPsFew9UYAN7D1SwcO0XXP/4ctZ8sj1iHGs+2R7zHBK9jIwM5s+fT+fOnXn//fcpLCzk7bff9jssEUkyydK56eqrr2b48OHcc889nHDCCZxwgvPoUf/+/bnhhhsOjZs3bx6nnnoqeXl5NG/enLPPPptt27bVO+8rr7zCbbfdxvDhw2nXrh2nXs+t1gAAIABJREFUnXYaEyZMYOLEiYfG2LbNvffeS4cOHcjLy6Nr167MnDnz0Pvt2zsbEXv06IFhGPTv3x9wfuGeOnUqJ554Ijk5OXTt2pWXX375sOPfddddtG3blpycHI477jh+9KMfHXrv9ddfp2/fvhxzzDE0b96cc889lw0bNjT8IkagRDCNrPvsa/72xsdhx/ztjY8j9hJ+d/POmPr7pnuPYL+1a9eOt956iwEDBvDll1/Sr1+/I/4jJSLpLZrOTfH2xhtv8N577/H666+zZMmSI97/8ssvueyyy7jqqqvYsGEDy5Yt48orrww753HHHcfrr7/Orl276h0zadIknnjiCR555BE++OADbrvtNq677joWLFgAwOrVqwEncfu///s/5s2bB8Cf/vQn7rvvPu655x7Wr1/PRRddxKhRo1i3bh0Ac+fOZfr06ViWxccff8z8+fM588wzDx13z549/PznP2f16tUsXbqUpk2bMmLECA4cOBDdhXNJt4bTiNs+wbE6+FtifW3dovlNM5Vbw/mpWbNmLFy4kOuuu44ZM2Zw0UUX8fDDD2Oapt+hiUgSSKbOTbm5uTz55JP1tswsLS2lvLyciy+++NCjLl26hP9/x+OPP87YsWNp2bIlXbt25ayzzmLkyJEMHjwYcJKx+++/n0WLFtG3b1/AWQFcvXo1jzzyCMOGDePYY48FoEWLFhx33HGH5p4+fTo33XQTl19+OeCs/i1btozp06czc+ZMNm/ezPHHH8+QIUPIysqiTZs2hz1jOHr06MNifeqpp2jSpAmrV6+mT58+0Vw6V7QimEZq3w6Ol0i/JSbTb5rpLDs7myeffJJp06YRCoU46aST/A5JRJJEMnVu6tKlS9i+6d26dWPQoEF06dKF0aNHU1RUxFdffQXA559/TuPGjQ993X333QD069ePjRs3UlxczKWXXspHH33EkCFDuO666wD44IMPKCsr47zzzjvs80VFRXz66af1xvLf//6X0tJSevfufdjrffr04YMPPgDgkksuoaysjPbt2/PjH/+YF154gf379x8a++mnn3L55ZfToUMHmjRpQuvWramqquLzzz9v2AWMQImgxEW43xKT6TfNdGcYBnfccQf/+c9/OO+88w69rmoCIuktmTo3HXVU+M0ooVCIRYsWsWjRIk499VSeeOIJOnXqxLvvvkt+fj7r1q079HX99dcf+lxWVhZ9+/bl1ltvZdGiRUydOpXHH3+cTZs2UVXl3LV69dVXD/v8+++/z6JFiyLGXFdLv4OvnXjiiXz44Yc89thjNGnShF/+8pecfvrph1rEjRgxgq+++orHHnuMVatWsXbtWjIzM+N2a1iJoMRFuN8Sk+k3TXF06NDh0D8vWbKEXr16UVoa/llREUldQevcZBgGvXr14te//jVr1qwhPz+fWbNmkZmZSceOHQ99hdttfPLJJwOwe/duTj75ZHJycti8efNhn+/YseOh288Hi/RXVn63s7pJkybk5+fz5ptvHjb3m2++eWh+cG53Dxs2jAceeIA1a9bw/vvvs2LFCnbs2MGGDRu4/fbbGTRoEJ07d+bbb7+loiJ+CyP6P20aaXts44TcHo70W+KArvksXPtF2NvD6dgjOBnYts2tt97K22+/Tc+ePVmwYAGnnnqq32GJSIId7NwUqY5gMpT6Kikp4R//+AfnnnsurVu3Zu3atXzxxReHJV619e/fnzFjxnDGGWfQokULPvjgA26//Xa+//3v07lzZ0KhEDfddBM33XQTtm3Tr18/du/eTUlJCRkZGYwfP55WrVqRl5fH3//+d9q1a0dubi5Nmzbl5ptv5s4776RTp06cfvrpzJw5k+XLl/Ovf/0LgBkzZlBRUUHPnj1p3Lgxs2bNIisri06dOnHMMcfQsmVL/vznP3PiiSeydetWbr75ZjIz45euaUUwjbjtExyrSL8lBu03zXRiGAYLFy6kd+/ebNmyhT59+vD3v//d77BExAc9Orbi0fF9GXpaGxrlZGIAjXIyGXpaGx4d3zcuxaQbomnTpqxYsYLhw4fTqVMnfvnLXzJ58mSuuOKKej9z7rnn8vTTT3Puuefygx/8ANM06du3L4sXLyYUCgEwdepUpkyZwvTp0znllFMYPHgwc+fOPVQ2JjMzkwcffJC//OUv5OfnM3LkSAB+9rOfcfPNN/OrX/2KLl268OKLLzJ37ly6d+8OOJv1nnjiCfr27UuXLl2YO3cu8+bNo3379mRkZDBr1izee+89unTpwsSJE5k6dWrYZyRjpc4iUQp6Z5Fnln0UtoTMj87uxNYde8KWkOnWtjn/Kd0VU7V5vyrWiztlZWVcc801PP/884RCIR555JFDD1GLSDB40WJOgkOdRcSVsf2+xyknNo/YWeT0DsdG7CwSS3/fg79pqkdwcsrNzeWZZ57hpJNO4u677+b6669n27Zt3HnnnX6HJiIiHtKKYJSCviIoEq0nn3ySn/70pyxYsOBQ5XwRSX5aEUwvDV0R1DOCIhLWuHHj2LRp02FJYLzKGIiISGLp1nASKd25h7klG/9/e/ceZ1VZ933882OAAVEwVMhxFClEDYUkUapbUVR6VMwSNFNB8NxVofZ4vD1hUGSlJXUvSjmkEmiOoBgCiQipiEKKKQ+aIJCAgt6mmZzH6/njWhs3w56ZPTN7z5o9+/t+vea1nLWutdZvrRk3v7mOzHt1PZu37aBt65b0P7KMQX2/UKem0qWr3q+x6bfi+ZVMevoNdlR+VhvcssQYfuKhDP5qmEbk1gdf5IU339vt2scesh8/PvcYxkx7ifnL3tnt+Ak99ufGs3oDMPGp5fxp4Vuk1zkbcM7XvsBFJx2es+fN1XWkeqkZ9AFmzpzJ1VdfzYwZMzjssMMSjEpERBpKTcN1lK+m4VwNnqhtMEjnDm3Y8NGWao/36tKRFe9+xCdbK6stU5u992jF5/YsZdXG6qeq6dyhDR9u2t7g59Wgk8blveekk07i6aefZu+992b69OlqLhZpotQ0XFzUNFzA1n/wCaMqXmLr9srd5tar/NSzdXsloypeYv0Hn9R4naWr3q8xCQRqTAIBXlnzQYOSQIAPN22vMQlMxdHQ583Ve5PsmRmPP/44Z555Jh9++CEDBgzg/vvvTzosERGpJyWCTcAji95iR+WnNZbZUfkp015YVWOZaM6yXIaVqGyeN1fvTeqmXbt2PPLII1x99dVs376dCy+8kJEjR2pZOhGRAqREsAmY9+r6GlfZgFDD9dSr62os0xirhjSWbJ43V+9N6q6kpIS77rqL3/72t7Ro0YLbb7+dq666KumwRESkjpQINgGbt2W3huDmrflba7Apqu159d6S9/3vf58ZM2aw77778t3vfjfpcEREpI40argJaNu6JZuySGralhbXj6u259V7axpOP/10Vq1axZ577rlz38cff8xee+2VYFQikhMb18NfpsGiebBlM7RpC337w4CzoFNZ0tFJDqhGsAnof2QZJS2qHdADhFGwJx15QI1luuy3Z43HC0k2z5ur9yYNl54EVlRU0K1bNxYuXJhgRCLSYK8uhpHfg2dmwZZNgA/bZ2aF/a8uzuvtX375ZUpKSvj6179e53NXr16NmbFkyZI8RNa8KBFsAgb1/QItS2r+UbQsacFZx3atsYz7Ro9chpWobJ43V+9Ncmvq1Kls3LiR/v3786c//SnpcESkPjauh3GjYdtWqKwyk0RlZdg/bnQolyf33nsvzjlee+01li9fnpd7aHJ8JYJNQlnHdtwyuDelrUp2q+EqaWGUtirhlsG9a50c+ctd92Vov0NqLNO5Q5saj/fq0pF2pSXZBV6NvfdoRddONddOdu7QpsHPm6v3Jrn10EMPccUVV7B161a+853v8LOf/UwjikUKzV+mQWUtXW8qd8CT0/Jy+82bNzNlyhQuvfRSBg8ezIQJE3Yeq662z8yoqKgAoGvXUAHQp08fzGznfKfDhg1j4MCB3HHHHZSXl1NeXg6EhPD666+nvLycdu3a0adPH+bMmbPz2tu3b2fEiBGUlZVRWlrKgQceyA033JCXZ29s6jzVRPTp1onfXXYc015YxVOvrmPz1h20LW3JSUcewFnHds06mTn/+O70OLBjwaws0tDnzdV7k9xp2bIlURTRrVs3rr32Wm688UZWrlxJFEW0atUq6fBEJBuL5u1eE1hVZSU8Pw/O/0HOb19RUUGXLl3o2bMnQ4YM4ZxzzmHMmDFZf4a8+OKLHHPMMcyePZtevXrRunXrnccWLFhAhw4dmD179s4/UocPH87KlSuZMmUK5eXlPPHEE5xxxhksXryYXr16MXbsWKZPn86DDz7IwQcf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\n",
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
"text/plain": [
"<Figure size 720x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"a = -pct.coef_[0][0] / pct.coef_[0][1]\n",
"b = -pct.intercept_ / pct.coef_[0][1]\n",
"box=[X.min(axis=0)[0],X.max(axis=0)[0],X.min(axis=0)[1],X.max(axis=0)[1]]\n",
"mx=(box[1]-box[0])/20\n",
"my=(box[3]-box[2])/20\n",
"box=[box[0]-mx,box[1]+mx,box[2]-my,box[3]+my]\n",
"\n",
"fig, axs = plt.subplots(1, 1)\n",
"fig.set_size_inches(10,6)\n",
"axs.plot(X[y==1, 0], X[y==1, 1], \"o\", label=\"Iris-Setosa\")\n",
"axs.plot(X[y==0, 0], X[y==0, 1], \"o\", label=\"Autres\")\n",
"axs.plot([box[0], box[1]], [a*box[0]+b, a*box[1]+b], \"k--\", linewidth=2)\n",
"axs.set_xlabel(\"Petal length (cm)\", labelpad=15) #, fontsize=14)\n",
"axs.set_ylabel(\"Petal width (cm)\", labelpad=15) #, fontsize=14)\n",
"axs.legend(loc=\"lower right\", fontsize=14)\n",
"axs.set_xlim(box[0],box[1])\n",
"axs.set_ylim(box[2],box[3])\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"<img width=\"80px\" src=\"../fidle/img/00-Fidle-logo-01.svg\"></img>"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
}
},
"nbformat": 4,
"nbformat_minor": 4
}