{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Méthodes hiérarchiques"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"https://fr.wikipedia.org/wiki/Regroupement_hi%C3%A9rarchique\n",
"\n",
"Il fonctionne avec des données décrites par une distance. Il construit des classes emboîtées et peut être repéresenté par une hiérarchie (un arbre).\n",
"\n",
"L'intérêt de ces méthodes est :\n",
"* de permettre une classification sans avoir à choisir un nombre de classe\n",
"* d'avoir des classes de plus en plus grosse"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Une hiérarchie est un ensemble de classes $\\mathcal{H}$ tel que pour tous $A, B \\in \\mathcal{H}$ on a : $A \\cap B \\in \\{ A, B, \\phi\\}$ (deux classes sont soit disjointes soit emboîtées).\n",
"\n",
"C'est une forme de généralisation d'une partition. C'est également un arbre si on considère l'inclusion : les enfants d'une classe étants les classes strictement plus petite que celle-ci (on appelle cet arbre un *dendregramme*)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## algorithme\n",
"\n",
"* **Entrée** : \n",
" * un ensemble $X$ de $n$ éléments à classer\n",
" * une distance $d$ entre les éléments\n",
" * une façon de mettre à jour la distance : $f$: $X \\times X \\rightarrow \\mathbb{R}$ \n",
"* **Sortie** : Un ensemble de classes formant une hiérarchie\n",
"\n",
"* **Algorithme** :\n",
" * On considère que $\\mathcal{H}$ est l'ensemble des singletons formé avec l'ensmelbe des éléments à classer.\n",
" * $\\mathcal{C} = \\mathcal{H}$\n",
" * la distance entre 2 singletons est la distance entre les deux éléments.\n",
" * répète $n-1$ fois :\n",
" * soient $A$ et $B$ deux éléments de $\\mathcal{C}$ ayant une distance minimale\n",
" * on ajoute $A \\cup B$ à $\\mathcal{C}$ et on supprime $A$ et $B$ de $C$ \n",
" * pour tout $C \\in \\mathcal{C}$, la distance entre $C$ et $A\\cup B$ est $f(C, A\\cup B)$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'algorithme dépend donc d'une fonction $f$ permettant de mettre à jour la distance. Il en existe de nombreuses, qui vont changer l'arbre solution. sklearn ensupporte 4 :\n",
"* “ward” : à utiliser pour des données euclidienne : $f(A, B)$ est la perte d'inertie à regrouper $A$ et $B$ $I(A \\cup B) - I(A) - I(B)$\n",
"* “average” : méthode par défaut. Basée sur des moyennes : $f(A, B) = \\frac{1}{|A| * |B|}\\sum_{x \\in A, y \\in B} d(x, y)$\n",
"* “complete” : prend la plus grande distance (méthode pssimiste) : $f(A, B) = \\max_{x \\in A, y \\in B} d(x, y)$\n",
"* “single” : prend la plus petite distance (méthode optimiste) : $f(A, B) = \\min_{x \\in A, y \\in B} d(x, y)$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html#sklearn.cluster.AgglomerativeClustering"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
sepal_length
\n",
"
sepal_width
\n",
"
petal_length
\n",
"
petal_width
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
5.1
\n",
"
3.5
\n",
"
1.4
\n",
"
0.2
\n",
"
\n",
"
\n",
"
1
\n",
"
4.9
\n",
"
3.0
\n",
"
1.4
\n",
"
0.2
\n",
"
\n",
"
\n",
"
2
\n",
"
4.7
\n",
"
3.2
\n",
"
1.3
\n",
"
0.2
\n",
"
\n",
"
\n",
"
3
\n",
"
4.6
\n",
"
3.1
\n",
"
1.5
\n",
"
0.2
\n",
"
\n",
"
\n",
"
4
\n",
"
5.0
\n",
"
3.6
\n",
"
1.4
\n",
"
0.2
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
145
\n",
"
6.7
\n",
"
3.0
\n",
"
5.2
\n",
"
2.3
\n",
"
\n",
"
\n",
"
146
\n",
"
6.3
\n",
"
2.5
\n",
"
5.0
\n",
"
1.9
\n",
"
\n",
"
\n",
"
147
\n",
"
6.5
\n",
"
3.0
\n",
"
5.2
\n",
"
2.0
\n",
"
\n",
"
\n",
"
148
\n",
"
6.2
\n",
"
3.4
\n",
"
5.4
\n",
"
2.3
\n",
"
\n",
"
\n",
"
149
\n",
"
5.9
\n",
"
3.0
\n",
"
5.1
\n",
"
1.8
\n",
"
\n",
" \n",
"
\n",
"
150 rows × 4 columns
\n",
"
"
],
"text/plain": [
" sepal_length sepal_width petal_length petal_width\n",
"0 5.1 3.5 1.4 0.2\n",
"1 4.9 3.0 1.4 0.2\n",
"2 4.7 3.2 1.3 0.2\n",
"3 4.6 3.1 1.5 0.2\n",
"4 5.0 3.6 1.4 0.2\n",
".. ... ... ... ...\n",
"145 6.7 3.0 5.2 2.3\n",
"146 6.3 2.5 5.0 1.9\n",
"147 6.5 3.0 5.2 2.0\n",
"148 6.2 3.4 5.4 2.3\n",
"149 5.9 3.0 5.1 1.8\n",
"\n",
"[150 rows x 4 columns]"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import seaborn as sns\n",
"\n",
"sns.set()\n",
"\n",
"iris = sns.load_dataset('iris').drop(columns=\"species\")\n",
"iris"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On a toujours 3 espèces que l'on représentera en 3 clouleurs différentes. Les 50 premières sont de l'espèce *setosa*, les 50 suivantes de l'espèce *versicolor* et les 50 dernière de l'espèce *virginica*\n",
"\n",
"**Attention** : ces 3 espèces sont des *meta* données : ce sont les botanistes qui ont répartis les iris en espèces, ce n'est pas inhérent aux données."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour que nos arbres puissent être visibles, on ne va prendre qu'une partie des données, les 10 premières de chaque espèces."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n = len(clustering.labels_)\n",
"\n",
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"\n",
"sns.scatterplot(x='x', \n",
" y='y', \n",
" data=node_position,\n",
" legend=False,\n",
" ax=ax)\n",
"\n",
"for i, sons in enumerate(fils):\n",
" u = node_position.loc[i + n] \n",
" v1 = node_position.loc[sons[0]]\n",
" v2 = node_position.loc[sons[1]]\n",
" \n",
" l = mlines.Line2D([u['x'], v1['x']] , [u['y'], v1['y']])\n",
" ax.add_line(l)\n",
" l = mlines.Line2D([u['x'], v2['x']] , [u['y'], v2['y']])\n",
" ax.add_line(l)\n",
"\n",
"\n",
"for i, row in node_position.iterrows():\n",
" ax.text(row['x'], row['y'], i)\n",
" \n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On voit bien quele 1er nœud crée est d'index 30 et à agrégé les nœuds 0 et 4 à une hauteur de .14\n",
"\n",
"Le noeud crée à la 12 itération est d'index 29 + 12 = 41."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On peut améliorer le dessin en ne légendant que les données de départ. Pour cela, on va créer un dictionnaire de correspondance entre le nœud de l'arbre et son label."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On crée le dictionnaire en itérant sur les lignes du dataframe (`iris.iterrows()`). Cette itération rend à chaque passage un couple `(index, row)` le premier correspondant à l'index (le nom) de la linge et le secon à la ligne proprement dite.\n",
"\n",
"Ceci ne suffit pas pour nous, puisqu'il nous faut également lenuméro de la ligne (qui est différent de l'index). Pour cela on utilise [une technique de bouble](https://docs.python.org/fr/3.5/tutorial/datastructures.html#looping-techniques) avec `enumerate`.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{0: 0,\n",
" 1: 1,\n",
" 2: 2,\n",
" 3: 3,\n",
" 4: 4,\n",
" 5: 5,\n",
" 6: 6,\n",
" 7: 7,\n",
" 8: 8,\n",
" 9: 9,\n",
" 10: 50,\n",
" 11: 51,\n",
" 12: 52,\n",
" 13: 53,\n",
" 14: 54,\n",
" 15: 55,\n",
" 16: 56,\n",
" 17: 57,\n",
" 18: 58,\n",
" 19: 59,\n",
" 20: 100,\n",
" 21: 101,\n",
" 22: 102,\n",
" 23: 103,\n",
" 24: 104,\n",
" 25: 105,\n",
" 26: 106,\n",
" 27: 107,\n",
" 28: 108,\n",
" 29: 109}"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = iris\n",
"\n",
"labels = dict()\n",
"\n",
"for i, (index, row) in enumerate(iris.iterrows()):\n",
" labels[i] = index\n",
"\n",
"labels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On a alors le dessin suivant :"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmAAAAJPCAYAAADbkWgzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACmNklEQVR4nOzdd5hU5dk/8O+Ztr3vbGd7AxYW2AUEEVGxUBS7gt2Y/jMmMRqTmBiT10TzJjGa+iYaKxZUrCCCUqTDFliWZcvM9tneZna2TD2/P3YXQdqWmTlTvp/rynVFhJnbw+zMd57nPvcjiKIogoiIiIhcRiZ1AURERES+hgGMiIiIyMUYwIiIiIhcjAGMiIiIyMUYwIiIiIhcjAGMiIiIyMWcGsCMRiNWr16N5uZmAEBpaSluvfVWrFq1Cj/+8Y9hNpud+fREREREbknhrAc+evQoHn/8cdTX1wMYCWMPPvggXnjhBeTm5uLHP/4x3n33Xaxbt25Cj9vbOwC73Xmjy6KigtHdbXTa4/s6Xl/n4bV1Ll5f5+G1dS5eX+c537WVyQRERASd8886LYBt2LABTzzxBB599FEAwN69ezFnzhzk5uYCAB5//HHYbLYJP67dLjo1gI09BzkPr6/z8No6F6+v8/DaOhevr/NM9toKzp6Ef/nll+PVV1/F5s2bodFoYLFYUFtbi3nz5uGxxx6Dn5+fM5+eiIiIyO04bQXs62w2G/bs2YO3334bCQkJ+MUvfoF///vfePDBByf0ON3dRqcmebU6BJ2d/U57fF/H6+s8vLbOxevrPLy2zsXr6zznu7YymYCoqOBz/lmX3QUZHR2N/Px8TJs2DXK5HCtWrEBZWZmrnp6IiIjIbbgsgC1ZsgTHjx9Ha2srAGDHjh2YOXOmq56eiIiIyG24bAsyPj4ev/nNb/Cd73wHJpMJ06dPx09/+lNXPT0RERGR23B6ANu+ffvJ/79s2TIsW7bM2U9JRERE5NY4CZ+IiIjIxRjAiIiIiFyMAYyIiIjIxRjAiIiIiFyMAYyIiIjIxRjAiIiIiFyMAYyIiIjIxRjAiIiIiFyMAYyIiIjIxRjAiIiIiFyMAYyIiIjIxRjAiIiIiFyMAYzIGwiArsOIxs4BGIatgCB1QUREdD4KqQsgoikSgBONejy/4QhMFhv8lHL84NY5mJ4cBohSF0dERGfDFTAiD2cYtJwMXwBgstjw/IYjMAxaJK6MiIjOhQGMyMP1Gc0nw9cYk8WGvgGzRBUREdGFMIARebjwED8o5af/KPsp5QgPUklUERERXQgDGJGHCw1QYPHs+JP/rJTL8INb5yA0UClhVUREdD4MYESeTgQMAyaow/2hVMiwcGYsG/CJiNwc74Ik8nCiKELbrEfhjDgY+odxTNsNu02ETMZZFERE7oorYEQerlM/DMOgBbmpkSjMjYF+wAyNTi91WUREdB5cASPycNrmkbCVmxIBud0OpUKGosoOZE8Ll7YwIiI6J66AEXk4TYse/io5kuNCEeCnQF5aJIqrO2EX2QRGROSuGMCIPJy2WY/0hFDIR3u+CnNi0NtvQl2LQeLKiIjoXBjAiDzYsNmKpk4jMhPDTv5afmY05DIBRVUdElZGRETnwwBG5MHqWgwQRSDjlAAW6K/AzLRIFFV2QuQ2JBGRW2IAI/JgmtFtxoyE0NN+vTAnBt2GYdS39UtRFhERXQADGJEH0+r0SIgOQqD/6VPv52RxG5KIyJ0xgBF5KLsoQqvTIzMx9Ix/FxygRG5KBIq5DUlE5JYYwIg8VHvPIAaGraf1f52qMEeNjr4hNHUYXVwZERFdCAMYkYcam3afeY4ANjdbDUEAiqo6XVkWERGNAwMYkYfS6vQI8lcgNjLwrP8+NFCF3OQIFFV2cBuSiMjNMIAReSiNzoCMxDDIhHMful2Yo0ZbzyBaugZcWBkREV0IAxiRBxoctqCla+Cc/V9j5mWrIYDbkERE7oYBjMgDaUfnf2UmnHkH5KnCgv2QlRSGYo6jICJyKwxgRB5Iq9NDEIC0CwQwACjIjUFz5wBau7kNSUTkLhjAiDyQRqfHNHUw/FWKC/7egmw1AKCY25BERG6DAYzIw9jtImpbDMhIOn//15jIUH9kJIZyKj4RkRthACPyMLquAQybbchMGF8AA0bOhmxsN6Kjd9CJlRER0XgxgBF5GO3oANbxroAB3IYkInI3DGBEHkaj0yM0UAl1mP+4/0x0eABS40I4joKIyE0wgBF5GK1Oj4zEMAjnGcB6NoW5MahrNaBLP+SkyoiIaLwYwIg8iGHQjPbeIWROYPtxTEHOyDZkCVfBiIgkxwBG5EFO9n9NoAF/TGxEIJJjgrkNSUTkBhjAiDyIVmeAXCYgNS5kUn++IDcGGp0evf0mB1dGREQTwQBG5EE0Oj2SY0OgUson9ecLc8buhuRMMCIiKTGAEXkIq82O+lYDMi9wAPf5xEcFITE6iOMoiIgkxgBG5CGaOowwW+3ISLzw+Y/nU5CjRnVTH/QDZgdVRkREE8UARuQhxhrwp7ICBoyMoxABlFRzFYyISCoMYEQeQqPTIyLED5Gh4x/AejaJ0UGIiwxEUSX7wIiIpMIARuQhtLqp9X+NEQQBhblqVDX2wTDIbUgiIikwgBF5gN5+E7oNw8hwQAADgILsGNhFEUdquhzyeERENDEMYEQewFH9X2OSY4OhDvdHEcdREBFJggGMyANodHooFTIkxwY75PEEQUBhTgxO1PdiYNjikMckIqLxYwAj8gDaFj1S40KgkDvuR7YwNwY2O7chiYikwABG5OYsVhsa2vodtv04JjUuBFGhfrwbkohIAk4NYEajEatXr0Zzc/Npv/7666/jrrvucuZTE3mNhjYjrDbRYQ34YwRBQEFODI7X92Bw2OrQxyYiovNzWgA7evQo1q5di/r6+tN+XaPR4N///reznpbI62hGG/AdHcAAoDAnBlabiKNabkMSEbmS0wLYhg0b8MQTTyAmJubkr5nNZvzqV7/CD37wA2c9LZHX0er0UIf7IyxI5fDHTk8MRXiwimdDEhG5mMJZD/zUU0+d8Wt/+tOfcNNNNyEpKWnSjxsV5Zi7wM5HrQ5x+nP4Ml7f8RNFEbWtBuRnq8d13SZzbZfMScTWAw0IDg1AgJ/T3hK8Al+7zsNr61y8vs4z2WvrsnfbvXv3orW1FT/72c9w8ODBST9Od7cRdrvowMpOp1aHoLOz32mP7+t4fSemq28Ivf0mJEUFXvC6TfbazkwOxyd76rD9YD0WTI+dbKlej69d5+G1dS5eX+c537WVyYTzLhq57C7ITz75BDU1NVizZg0ef/xxlJeX44c//KGrnp7II2laHDuA9WyyksIRGqRCEbchiYhcxmUrYL///e9P/v+DBw/ib3/7G/7yl7+46umJPJK22QA/pRyJ6iCnPYdMJmBethr7ylthstjgp5Q77bmIiGgE54ARuTFNix7pCaGQy5z7o1qYo4bZYkd5bY9Tn4eIiEY4fQVs+/btZ/zawoULsXDhQmc/NZFHM5ltaGo3YuWiZKc/V05yOIIDlCiu6kBBjtrpz0dE5Ou4AkbkpurbDLCLolP7v8bIZTLMy47GEU0XLFab05+PiMjXMYARuamxAazpCc4PYMDIUNZhsw3H63pd8nxERL6MAYzITWma9YiPCkRwgNIlz5ebEoEgfwWKqng2JBGRszGAEbkhURShbTE45fihc1HIZZiTGY3Smi5YbXaXPS8RkS9iACNyQ+29QzAOWVzS/3WqgtwYDJmsONHAbUgiImdiACNyQ1onHsB9PjNTI+GvkqOoktuQRETOxABG5IY0Oj0C/RSIjwp06fMqFTLMyYpGSXUntyGJiJyIAYzIDWl1eqQnhkImCC5/7sKcGAwMW1HV1Ofy5yYi8hUMYERuZnDYCl3nADJdNH7i6/LSIuGnlKOY25BERE7DAEbkZupaDRABZCRJE8BUSjlmZ0ShpLoTdrsoSQ1ERN6OAYzIzWh0eggA0uNDJauhMDcGhkELapr7JKuBiMibMYARuRmtTo9EdTAC/Jx+VOs5zUqPhEohQ1Flp2Q1EBF5MwYwIjdiHx3Ampko3eoXAPirFJiVHoWi6g7YRW5DEhE5GgMYkRtp7RrAkMnq8vlfZ1OQq4beaD45k4yIiByHAYzIjYwdwJ0pUQP+qfIzoqGQcxuSiMgZGMCI3IhGp0dwgBIx4QFSl4IAPwXy0iJRXN0BkduQREQOxQBG5Ea0OgMyE8MgSDCA9WwKctToMZhQ19ovdSlERF6FAYzITRiHLGjrGUSGxA34p5qTFQ25TEBRFYeyEhE5EgMYkZsYa3bPdIMG/DFB/krMSI1EUSW3IYmIHIkBjMhNaHR6yGUCUiUcwHo2hTlqdOmH0dhulLoUIiKvwQBG5Ca0Oj2mxQTDTymXupTTzM1WQyZwG5KIyJEYwIjcgM1uR22rwS3mf31dcIASuSnh3IYkInIgBjAiN9DcMQCzxe5W/V+nKsyJQXvvEHSdA1KXQkTkFRjAiNzA2ABWd7oD8lRzs9UQBHAbkojIQRjAiNyAtkWP8GAVokL9pS7lrMKCVMiZFo6iKk7FJyJyBAYwIjegadYjw40GsJ5NQU4MWroGoOviNiQR0VQxgBFJTG80oUs/7Lb9X2PmZasBAMXchiQimjIGMCKJaXQGAO41gPVsIkL8kJkUhmJuQxIRTRkDGJHEtDo9FHIBybEhUpdyQYU5MWjqMKK9Z1DqUoiIPBoDGJHENC16pMaFQqlw/x/HgtFtSN4NSUQ0Ne7/jk/kxaw2O+pb+912/MTXRYX5Iz0hlHdDEhFNEQMYkYQa2vthtbnvANazKcyJQUNbPzr7hqQuhYjIYzGAEUlI2zw2gNVzAlhBztjdkFwFIyKaLAYwIglpWgyIDvNHeLCf1KWMmzo8ACmxIRxHQUQ0BQxgRBLS6vQetfo1pjBXDW2LAT2GYalLISLySAxgRBLpMQyjt9/kUf1fYwpyYgBwG5KIaLIYwIgk4u4HcJ9PXGQgktTBHEdBRDRJDGBEEtHo9FApZUhSB0tdyqQU5qqhadajt98kdSlERB6HAYxIIlqdHmlxoVDIPfPHsCAnBiKAkmpuQxIRTZRnvvMTeTizxYbGdiMykzyv/2tMYnQQ4qMCeTckEdEkMIARSaC+rR82u+iRd0CeqjAnBlVNfTAMmKUuhYjIozCAEUngZAN+guc14J+qMDcGogiU1HAbkohoIhjAiCSg1ekRGxmIkECV1KVMSZI6CLERASiu5DYkEdFEMIARuZgoitDo9Mj08NUvABAEAYW5MTjR0AfjkEXqcoiIPAYDGJGLdfYNoX/QggwPbsA/VUGOGnZRRCnvhiQiGjcGMCIXG+v/ykzwjgCWEhuC6DB/FDOAERGNGwMYkYtpdQYE+MmREB0kdSkOIQgCCnNicLyuB4PD3IYkIhoPBjAiF9Po9EiPD4VMJkhdisMU5Kphs4s4oumSuhQiIo/AAEbkQkMmK5o7jR4//+vr0uNDERnqh6JKbkMSEY0HAxiRC9W1GiCKQKaXBTBBEFCQHYPyuh4MmaxSl0NE5PYYwIhcSKPTQwCQ7gUjKL6uIEcNq82OMm231KUQEbk9BjAiF9LqDEiIDkKgv1LqUhwuMykMYcEqFPFsSCKiC2IAI3IRuyhCq9N7Xf/XGJkgoCBbjWPabpjMNqnLISJyawxgRC7S1j2IQZPV6/q/TlWYEwOz1Y5jtdyGJCI6HwYwIhc5eQB3ovf1f43JnhaOkEAltyGJiC7AqQHMaDRi9erVaG5uBgC8/fbbWL16Na699lr87Gc/g9lsdubTE7kVrU6PIH8F4iIDpS7FaWQyAfOy1Tiq6YbZwm1IIqJzcVoAO3r0KNauXYv6+noAQF1dHV588UW89dZb+Oijj2C32/HGG2846+mJ3I5mtP9LELxnAOvZFObEwGSx4Xhdj9SlEBG5LacFsA0bNuCJJ55ATEwMAEClUuGJJ55AcHAwBEFAdnY2WlpanPX0RG5lYNiC1u5Br+7/GpOTHI4gfwW3IYmIzkPhrAd+6qmnTvvnxMREJCYmAgB6enqwfv16/P73v5/w40ZFBTukvvNRq0Oc/hy+zBevb8OJdgBAwcw4p/73u8u1XTw7AXvLWhAeEQilQi51OQ7jLtfXG/HaOhevr/NM9to6LYCdS3t7Ox544AHcdNNNWLhw4YT/fHe3EXa76ITKRqjVIejs7Hfa4/s6X72+JRVtkAkCIgIUTvvvd6drOzMlAtsONWLX4UbkZ0ZLXY5DuNP19Ta8ts7F6+s857u2Mplw3kUjl94FqdVqcfvtt+OGG27A97//fVc+NZGkNDo9kmKC4K9y+XceScxIjUCAH7chiYjOxWUBzGg04hvf+AYeeugh3H///a56WiLJ2e0ialsNPtH/NUYhl2FOZjSO1HTBarNLXQ4RkdtxWQB799130dXVhZdeeglr1qzBmjVr8Nxzz7nq6Ykk09xphMls89oJ+OdSmKvGwLAVlY29UpdCROR2nL4fsn37dgDAvffei3vvvdfZT0fkdrSjA1h9aQUMAPLSIuGnkqOoshN5aVFSl0NE5FY4CZ/IyTQ6A0KDVIgO85e6FJdSKuSYkxmNkupO2OzchiQiOhUDGJGTaXV6ZPrAANazKcxRwzhkQXVjn9SlEBG5FQYwIicyDJjR0Tfkc9uPY/LSo6BSylBU1Sl1KUREboUBjMiJtD5wAPf5+CnlmJ0eheLqTqfO7yMi8jQMYEROpGnRQy4TkBrnu1OoC3NjYBgwQzMaRomIiAGMyKm0zXqkxIV41XE8EzUrPQpKhQxFlRzKSkQ0hgGMyEmsNjvq2vp9tv9rTICfAnlpkSPbkCK3IYmIAAYwIqdp6jDCYrX73ADWsynMjUFvvwm1LQapSyEicgsMYEROMtbzlJHgmw34p8rPiIZCLnAbkohoFAMYkZNodXpEhvohMtS3BrCeTaC/AjNSI1Fc1QmR25BERAxgRM6iGR3ASiMKc2LQbRhGfVu/1KUQEUmOAYzICXoMw+gxmJCRwAA2Zk5WNOQyAUVV3IYkImIAI3IC7WizeWYSA9iY4AAlpqdEoLiS25BERAxgRE6g1emhUsgwLSZY6lLcSmFuDDr6htDUYZS6FCIiSTGAETmBRqdHalwIFHL+iJ1qTlY0BAHchiQin8dPByIHs1htaGjrRwa3H88QGqhCbnIEirgNSUQ+jgGMyMHq2/phs4vIZAP+WRXmqNHWM4iWrgGpSyEikgwDGJGDaXUjDficgH9287LVEAAUVXVKXQoRkWQYwIgcTKPTIyY8AKFBKqlLcUthwX7ImhbOPjAi8mkMYEQOJIoitDo9V78uoDBHDV3nAFq7uQ1JRL6JAYzIgbr0w9APmJGZyPMfz6cgJwYAtyGJyHcxgBE5kHbsAG6ugJ1XRIgfMhJDUcxtSCLyUQxgRA6k0enhp5IjSc0BrBdSmBODxnYjOnoHpS6FiMjlGMCIHEij0yM9PhQymSB1KW6vIEcNACjmNiQR+SAGMCIHGTZb0dwxwO3HcYoOC0BafAjvhiQin8QARuQgda39sIsiMhnAxq0wJwZ1rf3o0g9JXQoRkUsxgBE5yFcN+LwDcry4DUlEvooBjMhBNDo94qMCEeSvlLoUjxETEYjkmGAGMCLyOQxgRA4wNoCV248TV5AbA41Oj95+k9SlEBG5DAMYkQO09QxiYNjKBvxJKDy5DclmfCLyHQxgRA4wdgA3V8AmLj4qCInqIE7FJyKfwgBG5AAanR6BfgrERQVKXYpHKsyJQU1TH/RGbkMSkW9gACNyAG3LyAHcMoEDWCejIEcNEUBJNVfBiMg3MIARTdHgsAUtnQMcPzEFidFBiIsM5DYkEfkMBjCiKaptMUAE+7+mQhAEFOaqUdXYB8OgWepyiIicjgGMaIo0Oj0EAUiL5wrYVBTmxMAuijhS0yV1KURETscARjRFWp0eSepgBPgppC7Fo02LCUZMeACKKjmOgoi8HwMY0RTY7SJqWw2c/+UAgiCgIFeNEw29GBi2SF0OEZFTMYARTUFL1wCGTDZksgHfIQpzYmCzcxuSiLwfAxjRFGhaRg7gZgO+Y6TGhSAq1I/bkETk9RjAiKZA26xHSKAS6vAAqUvxCoIgoCAnBsfrezA4bJW6HCIip2EAI5oCTYsBmYlhEDiA1WEKc2NgtYk4quU2JBF5LwYwoknqHzSjvWeQDfgOlp4QiogQbkMSkXdjACOaJG0LD+B2BpkgYF62GuV1PRg2cxuSiLwTAxjRJGl1eshlAlLjQqQuxesU5qhhsdpRpu2WuhQiIqdgACOaJK1Oj+TYYKiUcqlL8TpZSeEIDVLxbEgi8loMYESTYLXZRwawJnD70RlkMgEF2WqUabtgstikLoeIyOEYwIgmobnTCLPFjswkBjBnKcxRw2yxo7yW25BE5H0YwIgmQasbacDnCpjzZCeHIzhAyW1IIvJKDGBEk6DR6RER4ofIUD+pS/FacpkM87KjcUTTBYuV25BE5F0YwIgmQavTIyMhlANYnawwJwYmsw3H63qlLoWIyKEYwIgmqM9oQpd+mPO/XCA3JQJB/goUVXEoKxF5FwYwognS6kYO4M5gA77TKeQyzMmKRmlNF6w2u9TlEBE5DAMY0QRpdHoo5DKkxHIAqysU5sRgyGRFRT23IYnIezCAEU2QVmdAanwIFHL++LjCjNRIBPjJuQ1JRF7FqZ8gRqMRq1evRnNzMwBg3759uPbaa3HVVVfh2WefdeZTEzmFxWpHfZsBmRw/4TJKhQz5mdEore7kNiQReQ2nBbCjR49i7dq1qK+vBwAMDw/j5z//Of7xj39g8+bNKC8vx65du5z19ERO0djeD6tNRAYb8F2qMCcGA8NWVDX1SV0KEZFDOC2AbdiwAU888QRiYmIAAGVlZUhJScG0adOgUChw7bXXYsuWLc56eiKn0Iw24GcmhkpciW/JS4uEn1KO4kpuQxKRd3BaAHvqqadQWFh48p87OjqgVqtP/nNMTAza29ud9fRETqHR6REd5o+wYA5gdSWVUo78zCgUV3fCbhelLoeIaMoUrnoiu91+2tBKURQnNcQyKirYkWWdlVrNu9ucyVOvryiKqGvtx6yMaLf9b3DXuhzh8vkpOHSiAx39ZszKjJakBm++vlLjtXUuXl/nmey1dVkAi4uLQ2fnV2e6dXZ2ntyenIjubqNTvwGr1SHo7Ox32uP7Ok++vl36IfQYhpEUHeiW/w2efG3HIyU6ECqFDJ8frEdcmOtXIL39+kqJ19a5eH2d53zXViYTzrto5LL76PPz81FXV4eGhgbYbDZ88sknWLp0qauenmjKxg7g5gR8afip5JiVProNKXIbkog8m8sCmJ+fH55++mk8+OCDWLlyJdLT03HNNde46umJpkyj00OllCEpJkjqUnxWQa4aeqP55GkERESeyulbkNu3bz/5/xctWoSPPvrI2U9J5BRanR7p8aGQyziAVSr5GdFQyGUoquxEVlK41OUQEU0aP0mIxsFksaGpw8j5XxIL8FMgLy0SRVUd3IYkIo/GAEY0DvWtBtjsIvu/3EBhrhq9/SbUtRqkLoWIaNIYwIjGYWwAK1fApDcnMxpymYDiys4L/2YiIjfFAEY0DlqdAXGRgQgOUEpdis8L9FdiRurINqTIbUgi8lAMYEQXIIoiNDo9Mnj8kNsozFGjSz+Mxnaj1KUQEU0KAxjRBXT0DcE4ZGH/lxuZm62GTBBQVMWzIYnIMzGAEV2Appn9X+4mOECJ6SnhOFzJbUgi8kwMYEQXoNXpEeAnR0I0B7C6k4LcGHT0DqG5c0DqUoiIJowBjOgCNDoD0hPCIJvE4fHkPPOy1BAEoKiS25BE5HkYwIjOY8hkha7TyP4vNxQapELOtHAUV3McBRF5HgYwovOobTVABHgHpJsqyIlBS9cAdF3chiQiz8IARnQe2mY9BADp8VwBc0fzstUQABTzbkgi8jAMYETnoWnRI0EdhEB/p59bT5MQEeKHzKQwFHEqPhF5GAYwonOwiyK0OgP7v9xcYU4MmjuNaOsZlLoUIqJxYwAjOofW7kEMmawMYG6uIEcNgNuQRORZGMCIzkHLA7g9QmSoP9ITQlFUxW1IIvIcDGBE56DR6REcoERsRIDUpdAFFObEoKGtH519Q1KXQkQ0LgxgROeg1emRkRAKgQNY3d5X25BcBSMiz8AARnQWxiELWrsHkZnE7UdPoA4PQEpcCA/nJiKPwQBGdBa1LaP9XwkMYJ6iMEeN2hYDuvXDUpdCRHRBDGBEZ6HR6SETBKTFcwK+pyjMiQEAHk1ERB6BAYzoLLQ6A6bFBMNPJZe6FBqn2MhAJKmDOY6CiDwCAxjR19jsdtS2cACrJyrMVUPTrEdvv0nqUoiIzosBjOhrdJ0DMFlsPIDbAxXmxEAEUMJtSCJycwxgRF+jGR3AyhUwz5MQHYSE6CBuQxKR22MAI/oarU6PsGAVosL8pS6FJqEwR42qpj4YBsxSl0JEdE4MYERfo9HpkZkQxgGsHqogJwaiCJTUcBuSiNwXAxjRKfQDZnT2DfP8Rw+WpA5CbEQAiiu5DUlE7osBjOgUWvZ/eTxBEFCYG4MTDX0wDlmkLoeI6KwYwIhOodXpoZALSIkLlroUmoLCnBjYRRGlvBuSiNwUAxjRKTQ6PVJiQ6BUcACrJ0uODUZ0mD+KeDg3EbkpBjCiUVabHXWt/ez/8gKCIKAwJwYV9T0YHOY2JBG5HwYwolGN7UZYbXb2f3mJglw1bHYRRzRdUpdCRHQGBjCiUWMDWLkC5h3S40MRGeqHokpuQxKR+2EAIxql1ekRFeqHiBA/qUshBxAEAQXZMSiv68GQySp1OUREp2EAIxql0em5+uVlCnPVsNrsOKrlNiQRuRcGMCIAPYZh9PabGMC8TEZiGMKCVSjmNiQRuRkGMCLwAG5vJRMEFGSrcay2GyazTepyiIhOYgAjAqDVGaBSyDAthgNYvU1hTgzMVjuO1XZLXQoR0UkMYEQYWQFLjQ+FQs4fCW+TPS0cIYFKFFXxbEgich/8tCGfZ7bY0Njez+1HLyWTjWxDHtV0w2zhNiQRuQcGMPJ59W39sNlFZCSGSl0KOUlBbgxMFhvK63qkLoWICAADGBG0HMDq9XKmhSM4gNuQROQ+GMDI52l0esREBCA0UCV1KeQkCrkMc7KicVTTBYvVLnU5REQMYOTbRFGEVqdn/5cPKMyJwZDJhop6bkMSkfQYwMindeqHYRi0cPvRB8xIjUCAn4LbkETkFhjAyKdpmzmA1Vco5DLMzYpGaXUXrDZuQxKRtBjAyKdpWvTwV8mRGB0kdSnkAoU5MRg0WVHZ0Ct1KUTk4xjAyKdpm/VITwiFTCZIXQq5wMy0CPir5NyGJCLJMYCRzxo2W9HUaURGArcffYVSIUd+ZjRKqrtgs3MbkoikwwBGPquuxQBRBDKTGMB8SWGOGsYhC6ob+6QuhYh8GAMY+SxNiwEAkJHACfi+JC89CiqlDEVVnVKXQkQ+jAGMfJZWp0dCdBAC/ZVSl0Iu5KeUY3ZGNIqrO2G3i1KXQ0Q+igGMfJL95ABWrn75osIcNQwDZtQ090ldChH5KAYw8kntPYMYGLayAd9Hzc6IglLBbUgikg4DGPkkzdgAVjbg+yR/lQJ5aZEoqe6EXeQ2JBG5niQB7MMPP8SqVauwatUqPPPMM1KUQD5O26JHkL8CsZGBUpdCEinMjUFvvwm1ozdjEBG5kssD2NDQEJ566im89tpr+PDDD1FUVIR9+/a5ugzycRqdARmJYZAJHMDqq/IzoqGQCyiq5FBWInI9lwcwm80Gu92OoaEhWK1WWK1W+Pn5uboM8mGDwxa0dA1w/ISPC/RXYGZqJIqrOiByG5KIXEzh6icMDg7GQw89hBUrViAgIADz58/HvHnzxv3no6KCnVjdCLU6xOnP4cukvr7Fle0AgIKZ8ZLX4mje9t/jbJfNT8Zf3ipF37AN2ckRF/z9vL7Ow2vrXLy+zjPZa+vyAFZZWYn33nsPO3bsQEhICH7yk5/gxRdfxAMPPDCuP9/dbXTq7B61OgSdnf1Oe3xf5w7Xt6SiDYIARAYqJK/Fkdzh2nqajLhgyGUCPj9Qj4iA878d8vo6D6+tc/H6Os/5rq1MJpx30cjlW5B79uzBokWLEBUVBZVKhRtvvBGHDh1ydRnkwzQ6Paapg+Gvcvn3D3IzQf5KTE+JQHFVJ7chicilXB7AcnNzsW/fPgwODkIURWzfvh2zZs1ydRnko+x2EbUtIw34RMDI3ZAdfUNo6jBKXQoR+RCXB7AlS5Zg1apVuPHGG3HdddfBarXiW9/6lqvLIB+l6xrAsNmGTAYwGjU3KxoyQUBRFe+GJCLXkWQP5lvf+hZDF0lCqxsZwJrBAaw0KiRQhZzkcByu7MQNl6RD4GgSInIBTsInn6LR6REaqIQ6zF/qUsiNFObGoL1nELquAalLISIfwQBGPkWj0yMjMYyrHHSaeVnREAAOZSUil2EAI59hGDSjo3eI/V90hrBgP2RNC0dxNQ/nJiLXuGAAe/DBB3lUEHmFk/1fDGB0FoU5aug6B9DazW1IInK+CwawK6+8Ev/4xz9w9dVX48UXX0RfX58LyiJyPK3OALlMQGocJ0LTmQpyYgAARVVcBSMi57tgALvuuuvw+uuv4x//+Ae6u7tx880345FHHkFZWZkr6iNyGI1Oj+TYEKiUcqlLITcUEeKHzMQwFLMPjIhcYFw9YHa7HQ0NDaivr4fNZkNUVBR+/etf4/nnn3d2fUQOYbXZUd9qQEYiD+CmcyvMUaOxw4j23kGpSyEiL3fBAPbss8/i0ksvxQsvvICVK1di69ateOyxx/D6669j/fr1rqiRaMqaOowwW+1swKfzmpejBgAUcxuSiJzsgoNYe3p68J///Ae5ubmn/XpgYCD+9Kc/Oa0wIkcaa8BnAKPziQ4LQFp8CIqrOrDyohSpyyEiL3bBFbDf/va3Z4SvMUuWLHF4QUTOoNHpERHih8hQDmCl8yvMiUFdaz+69ENSl0JEXoxzwMgnaHU8gJvGp4DbkETkAgxg5PV6+03oNgxz+5HGJSYiEMmxwTycm4icigGMvB77v2iiCnNioNUZ0GMYlroUIvJSDGDk9TQ6PZQKGZJjg6UuhTzE2DZkCY8mIiInYQAjr6fV6ZEaFwKFnC93Gp/4qCAkqoM4FZ+InIafSOTVLFYbGtr72YBPE1aYE4Oapj7ojSapSyEiL8QARl6toc0Iq01k/xdNWGGOGiK4DUlEzsEARl5NM9qAzxUwmqiE6CDERwVyG5KInIIBjLyaVqeHOtwfYUEqqUshDyMIAgpy1Khs7IVh0Cx1OUTkZRjAyGuJogiNTs/VL5q0wpwYiCJwpKZL6lKIyMswgJHX6tYPQz9gZv8XTdq0mGDEhAegqJJDWYnIsRjAyGtpWkb7vxIYwGhyBEFAQa4aJxp60c9tSCJyIAYw8lraZgP8lHIkxQRJXQp5sMKcGNjsIg6Wt0ldChF5EQYw8lqaFj3S4kMgl/FlTpOXGheCqFB/7C1rkboUIvIi/GQir2Qy29DUbkRmErcfaWrG7oY8Ut2BwWGr1OUQkZdgACOvVNdqgF3kAFZyjMLcGFhtIo5qeTckETkGAxh5Je1oA346G/DJAdITQhEV5s+7IYnIYRjAyCtpmvWIjwpEcIBS6lLIC8gEAYtnJ+BYbQ+GTNyGJKKpYwAjryOKIrQtBo6fIIe6eHYCrDY7jtV2S10KEXkBBjDyOu29QzAOWdiATw6VmxqJsCAVtyGJyCEYwMjraMcO4E4IlbgS8iZymYB52WqU1XbDZLFJXQ4ReTgGMPI6Gp0eAX4KxEdzACs5VmGOGmaLHeXchiSiKWIAI6+j1emRkRAKmSBIXQp5mezkcAQHKFFU1Sl1KUTk4RjAyKsMDluh6xzg/C9yCrlMhnnZahzRdMFi5TYkEU0eAxh5lbpWA0QAGQxg5CSFuWqYzDaU1/VIXQoReTAGMPIqGp0eAkYGZxI5Q25yBIL8FSiq5DYkEU0eAxh5Fa1Oj0R1MAL8FFKXQl5KIZdhTlY0jmi6YLXZpS6HiDwUAxh5DbsoQtuiR2YiV7/IuQpzYjBksqKivlfqUojIQzGAkddo6RrAkMnG/i9yuhmpkQjwk6OoikNZiWhyGMDIa4wNYOUdkORsSoUMczKjUVrdyW1IIpoUBjDyGhqdHsEBSsREBEhdCvmAwpwYDAxbUdXYJ3UpROSBGMDIa2h1BmQmhkHgAFZygZlpkfBTcRuSiCaHAYy8gnHIgraeQWSwAZ9cRKWUIz8jCiXVnbDbRanLISIPwwBGXoH9XySFwpwY9A9aUN3UJ3UpRORhGMDIK2h0esgEAanxXAEj15mVHgWVQsZtSCKaMAYw8gpanR7TYoPhp5RLXQr5ED+VHLMyolBc1Qm7yG1IIho/BjDyeDa7HbWtBm4/kiQKc2KgHzBD06yXuhQi8iAMYOTxmjsGYLbY2YBPkpidEQWFnNuQRDQxDGDk8TRswCcJBfgpkJcWyW1IIpoQBjDyeFqdHuHBKkSF+ktdCvmowlw1evtNqGs1SF0KEXkIBjDyeBqdHhkcwEoSmpMZDblMQHFlp9SlEJGHYAAjj6Y3mtClH+b2I0kq0F+JmWmRKKrqgMhtSCIaBwYw8mga3ciWTwYDGEmsIEeNLv0wGtr7pS6FiDwAAxh5NK1OD4VcQEpsiNSlkI+bm6WGTBBQxG1IIhoHBjDyaJoWPVLiQqBU8KVM0goOUGJ6Sji3IYloXCT51Nq+fTtuvPFGrFixAv/zP/8jRQnkBaw2O+pb+9n/RW6jIDcGHb1DaO4ckLoUInJzLg9gTU1NeOKJJ/CPf/wDH330ESoqKrBr1y5Xl0FeoKG9H1abHRkJDGDkHuZlqSEIQFElh7IS0fm5PIBt27YNK1euRFxcHJRKJZ599lnk5+e7ugzyAtrRo1/YgE/uIjRIhZxp4ZyKT0QXpHD1EzY0NECpVOI73/kOWltbsWzZMvzwhz8c95+Pigp2XnGj1Go2dDuTo65vU/cgYiICkJ0e7ZDH8wZ87TrXeK7vssJk/GtjGYZsIpLjeDzWePG161y8vs4z2Wvr8gBms9lQVFSE1157DYGBgfjud7+L999/HzfeeOO4/nx3txF2u/MaXNXqEHR28jZyZ3Hk9a2o7Ub2tHD+fY3ia9e5xnt9sxNCIADYtr8e1y1Jc35hXoCvXefi9XWe811bmUw476KRy7cgo6OjsWjRIkRGRsLf3x/Lly9HWVmZq8sgD9djGEZvvwkZCVxhIPcSHuyHzKQwFFVxHAURnZvLA9hll12GPXv2wGAwwGazYffu3Zg5c6aryyAPd/IA7iT2f5H7KcyJQXOnEW09g1KXQkRuyuUBLD8/Hw888ADWrVuHlStXIiEhATfddJOryyAPp2nWQ6WUIUnt/J5AookqyFUDAL4oaYZh2ArwmFIi+hqX94ABwM0334ybb75ZiqcmL6Ft0SMtLhQKOQewkpsRgPY+EwQAXxQ1Y8/RVvzg1jmYnhwGcD4rEY3ipxd5HLPFhsZ2I7cfyS0ZBi14fsORk1nLZLHhubdLYRi0SFoXEbkXBjDyOPVt/bDZRQ5gJbfUZzTDZLGd9mtmqx0t3ewHI6KvMICRxxlrwM9I5B2Q5H7CQ/wgO0vP14sfHUdjO0cBENEIBjDyOFqdHrERAQgJVEldCtEZGlv1sIuAfDSF+SnluOPqHNhFEU+9Voy9x1olrpCI3IEkTfhEkyWKIjQ6PWanR0ldCtEZLFY71m+rQWxEAB5ZNw9GkxXhQSqEBioxP1uNf31Yjhc3nUBtqwFrr8jiTSREPow//eRROvuG0D9o4fmP5Ja2Hm5Ee88g1l2ZjcgQPyRHByE0QAmII+dEPnz7HFyzMBk7SnR4Zn0JegzDUpdMRBJhACOPcnIAKwMYuZkewzA+3lePedlqzDrHCq1cJsOtl2Xie9fnoblrAL95+TAqG3pdXCkRuQMGMPIoWp0B/io5EqKDpC6F6DRvfVEDiMDtV2Re8PcW5sbgl3cXIihAiT++dQRbDjZCFDkkjMiXMICRR9Ho9MhICIXsbLeZEUnkeH0Piqo6sWpRCqLDAsb1ZxKig/D43YWYmx2NDTs0+OeHxzFksjq5UiJyFwxg5DGGTFY0dxrZ/0VuxWqzY/3WasREBOCahckT+rMBfgp87/o83HJZBoqrOvA/rxahtXvASZUSkTthACOPUddqgCiy/4vcy7bDTWjrGcS65dlQKuQT/vOCIGDFwhT85LY5MA5Z8NtXilBc1eGESonInTCAkcfQ6PQQAKQncAAruYcewzA+2luPuVnRmJ0xtdEo01Mj8cS98xEfFYS/v1+Od3ZoYLPbHVQpEbkbBjDyGFqdAQnRQQj0V0pdChEA4O3tGthFEWuvyHLI40WG+uOxO+Zh2dxEfHqwEX9++ygMA2aHPDYRuRcGMPIIdlGEVqdn/xe5jYr6Hhyu7BhpvA8fX+P9eCgVMtx9dQ7uXzkdGp0eT758GLUtBoc9PhG5BwYw8ght3YMYNFl5/iO5BavNjvXbqhETHoAVE2y8H68ls+Px8zsLIJcJeHp9MXYe0XFUBZEXYQAjj8ABrOROthU1obV7EGuXZ02q8X68UuJC8Kt75yM3JQKvbqnCS5srYbbYnPZ8ROQ6DGDkEbQ6PYL8FYiLDJS6FPJxvf0mfLSnHnMyo5GfGe305wsOUOKHN+fj2sWp2HOsFb9/vQRdfUNOf14ici4GMPIImtH+L0HgAFaS1tvba0Ya75c7pvF+PGQyATcsTccPbp6Njr4hPPnyYZTXdrvs+YnI8RjAyO0NDFvQ2j3IBnyS3ImGXhw60YGVF6VA7cDG+/GakxmNX91biIgQfzy74Sg+3lsHO/vCiDwSAxi5Pa1u5A4w9n+RlMYa76PD/J3WeD8esRGB+MXdBVg4Mxbv767DX98tw+CwRbJ6iGhyGMDI7Wl1eggCkBYfInUp5MM+3l2Llq4BrFueDZXSeY334+GnlOObq2fgjiuzUV7Xg9+8XISmDqOkNRHRxDCAkdvT6PSYFhMMf5VC6lLIR/X2m/Dm1krMzojCnCznN96PhyAIuKIgCT9dNw8mqw1PvVqEA8fbpC6LiMaJAYzcmt0uorbVwP4vktSGHRpYbSLWubDxfrwyk8Lw63vnIzUuBP/+uALrt1XDauMRRkTujgGM3FpzpxEms439XySZyoZeHKxox02XZSEmwj3HoIQF++Ena+fiqvnT8EVxM/7wZil6+01Sl0VE58EARm5NywGsJKFTG+9vdtB5j86ikMtw+xVZ+PZ1M9HY3o/fvHwY1U19UpdFROfAAEZuTaMzIDRIhegwf6lLIR+0vbgZuq4BrL0iC34SN96P18IZsfjl3YXwV8nxhzdKsfVwE48wInJDDGDk1rQ6PTI5gJUk0Gc04YM9dW7VeD9eiepg/PKe+cjPjMJbX9Tg/z46jmGzVeqyiOgUDGDktgwDZnT0DfEAbpLESOO9HWuXZ3nkF4BAfwW+f+Ms3HRpOg5XduCpV4vR3jModVlENIoBjNwW+79IKlWNvThwvB3XLExBrJs23o+HTBCwalEqfnzbHOgHzPjNK4dRWt0pdVlEBAYwcmOaFj3kMgGpcRzASq5jtdnx+rZqRIX6Y9WiFKnLcYiZqZF44t75iI0IxF83HsN7u7Sw29kXRiQlBjByW9pmPVLiQqBUeEbzM3mH7SU66DoHsHa55zTej0dUmD9+duc8LM2Px6b9DXh2wxH0D5qlLovIZzGAkVuy2uyoa+tHRgK3H8l19EYTPtxTi7z0SMz1sMb78VAq5Lh3xXTcuyIXVU16/Oblw6hrNUhdFpFPYgAjt9TUYYTFakdmEgMYuc6GHVpYrHbcsTzbIxvvx2tpfgJ+duc8AMDvXy/Bl0dbJK6IyPcwgJFb0jSPNOBnJPAOSHKN6qY+7D/ehqsXJCM20nMb78crLT4Uv7p3PnKmheHlTyvx8qcnYLHapC6LyGcwgJFb0rboERnqh8hQDmAl57PZ7Xh9axWiQv2welGq1OW4TEigCj+6dQ5WLUrBl0db8fvXS9CtH5a6LCKfwABGbkmj07P/i1xme4kOzZ0DuP2KLPipvKfxfjxkMgE3XZqBB2+chfbeQTz58mEcr++Ruiwir8cARm6nxzCMHoOJ87/IJfQDZnywuxYz0yIxL1stdTmSmZutxi/vmY+wIBX+/PYRbNpfzyOMiJyIAYzcjrZl5K4sNuCTK7y7QwOzxY47rvTuxvvxiIsMxC/uLsD83Bi8t6sWf9t4DIPDPMKIyBkYwMjtaHV6KBUyTIsJlroU8nI1zX3YW96GaxYmI84HGu/Hw1+lwLevm4nbr8jCUU03fvtqEXSdRqnLIvI6DGDkdjQ6PdLiQqCQ8+VJzjPSeF+NSB9rvB8PQRBw1fxpeHTdXAyZrPjtq0U4dKJd6rKIvAo/4citWKw2NLT1I4P9X+RkO0tb0NRhxO2X+17j/XhlTwvHE/fOR3JsCP714XG89UUNrDa71GUReQUGMHIr9W39sNlFNuCTUxkGzNj4ZS1mpEagIMd3G+/HIyLED4+unYvlBUnYergJf3zrCPRGk9RlEXk8BjByK1rdSAM+V8DImd7ZqYHZYmPj/Tgp5DKsuzIb37x2BupbDXjy5cMnhyUT0eQwgJFb0ej0iAkPQGiQSupSyEtpdHrsPdaGqxZMQ3xUkNTleJRFM+Pwi7sLoVLI8cwbJfiiuJmjKogmiQGM3IYoitDq9MhI5PFD5Bx2u4jXt1YhIsQP1y5OlbocjzQtJhi/urcQeWmRWL+tGi98UgGThUcYEU0UAxi5jS79MPQDZvZ/kdPsPKJDY7sRt12eCX+VQupyPFagvxIP3jwbN1yShgPH2/HUq8Vo7x2Uuiwij8IARm5Doxs9gJsBjJzAMGjGxl21mJ4Sgfm5MVKX4/FkgoBrL07DD2/NR2//MH7zchGOaLqkLovIYzCAkdvQ6vTwU8mRqGZfDjneuzu1MLHx3uFmpUfhV/fOhzrcH8+/W4b3v6yF3c6+MKILYQAjt6HR6ZEeHwq5jC9LciytTo89Za24cv40JEQz4DuaOjwAP7+zAEtmxePjffX4y7tHYRyySF0WkVvjJx25hWGzFc0dA9x+JIcbabyvRniwio33TqRSynHfylzcfXUOTtT34jcvH0ZDW7/UZRG5LQYwcgt1rf2wixzASo6364gODe39uP2KLAT4sfHemQRBwLK5iXjsznmw2UX87vVi7D3WKnVZRG6JAYzcgvZkAz5HUJDj9A+OTLxn471rZSSE4Yl75yMjIRQvbjqBVz+rgsXKI4yITsUARm5Bo9MjPioQQf5KqUshL/LeLi2GzTasY+O9y4UGqfDw7XOwYmEydpbq8MwbJegxDEtdFpHbYAAjyX01gJXbj+Q42hY9dh9txfLCJCSy8V4ScpkMt1yWie9dnwdd1wCefPkwTtT3SF0WkVtgACPJtfUMYmDYyv4vcpixxvuwYBWuuzhN6nJ8XmFuDH51TyGCA5T449tH8OnBBh5hRD6PAYwkxwO4ydG+PNqChrZ+3Hp5Jhvv3UR8VBAev7sQBTkxeGeHFv/4oBxDJqvUZRFJRtIA9swzz+Cxxx6TsgRyAxqdHoF+CsRHBUpdCnkB45AF7+3SImdaOBZOj5W6HDpFgJ8C310zE7delonS6i78z6tFaOkakLosIklIFsD279+P999/X6qnJzei1emRnhgKGZukyQHe26XFkMmGO65i4707EgQB1yxMxsO3z4FxyILfvlqEvUdbpC6LyOUkCWB9fX149tln8Z3vfEeKpyc3MjhsQUvXAPu/yCHqWg348kgLlhcmIUkdLHU5dB7TUyLwxL3zkRQdhKdfPYwNOzSw2TmqgnyHJM0Rv/rVr/CjH/0Ira0TH9AXFeX8N1W1OsTpz+HLTr2+JZUdEAEUzIjjdXcAX76GdruI368vQXiIH75x/SwEOmGkiS9fX2dQq0Pwvw8txQsflmPzvnrougbx6F2FCA/xk7o0r8PXrvNM9tq6PIC98847iI+Px6JFi7Bx48YJ//nubqNTD3pVq0PQ2cnjM5zl69e3uKIVggBEBip53afI11+7u47oUNPUh29eOwMD/cMY6HfszClfv77O9N2b8hEfEYBXP6vCD/60A9+7Po835TgQX7vOc75rK5MJ5100cvkW5ObNm7F3716sWbMGzz//PLZv347f/e53ri6D3IRWp0eSOph3qtGUjDTe1yJ7WjgumsHGe0908ax4/OKuAshlAp5eX4IdJc0cVUFezeWfei+99NLJ/79x40YcOnQIP//5z11dBrkBu11EbasBC2fESV0KebiNu7QYHLbiTk6892jJsSF44r75+M/HFXhtazVqWwy46+ocqJRyqUsjcjjOASPJtHQNYMhkQybPf6QpqGs1YNeRFlxRkISkGDbee7ogfyV+cPNsXHdxKvaWt+F3rxWjs29I6rKIHE7SAHbjjTfi6aeflrIEkpCmZewAbvZ60OTYRRHrt1UjJEiFNUs48d5byAQB11+Sjoduno0u/TB+8/JhlNV2wzBkQWPnAAzDVoALneTh2HhDktE26xESqERMeIDUpZCH2lPWitoWAx5YPR2B/nw78zb5mdH41b2F+Pv75fjLhqOQywTY7CL8lHL84NY5mJ4cBrBNjDwUtyBJMpoWAzISwtizQ5NiHLLg3Z1aZCWFYdFM9hF6q5iIQDx482zIhJHwBQAmiw3PbzgCw6BF4uqIJo8BjCTRP2hGe88gMpO4/UiT8/6XtSON91flMMR7uUGTDfav3RFpstjQN2CWqCKiqWMAI0loW0YP4E5gAz5NXENbP3aW6nD5vERMY+O91/P3O/tdkPvLWjk9nzwWAxhJQqvTQy4TkBrPAEYTYxdFvL61CiGBSlx/CRvvfcHmvXUAAKV85CNLpZBhZnoUPjvUiP998wh6DI4dukvkCuxaJUlomvWYFhMMP873oQnaW9YKbYsB31g13SnHDZF7OVLThS+PtmLFRcm4emEK+gbMCA9SITRQiX3HWvHaZ9V44r+H8I1VMzAnK1rqconGjStg5HJWmx11bQYewE0TNjBswTs7tchMCsPiPDbeezvDoBkvf3oCSepgXL8kHaEBSiRHByE0QAmIwOK8eDxx33xEhfnj+ffK8Mbn1bBYuSVJnoEBjFyuudMIs8XO+V80Ye9/WYuBYQsn3vsAURTx2pYqDJqs+Oa1M6BUnP3jKi4yEL+4qxDLC5LweVEzfvdaMdp7Bl1cLdHEMYCRy2l1Iw34XAGjiWho68eOUh0un5uE5NgQqcshJ9tX3obi6k7ccEn6BW+0UCpkWHdlNh68aRa69EP49cuHsb+8zUWVEk0OAxi5nEanR0SIHyJD/aQuhTyEXRTx+rYqBAcoccNSNt57u279MN74vBrZSWG4ekHyuP/c3Cw1nrx/AVJigvGfTyrw4icVGDZbnVgp0eQxgJHLaXV6ZCSEcguJxm3fsTZodQbcsiyTjfdezi6KeHFTBewicP/qGZDJJvY+ERnqj0fWzcV1F6diX3kbfvNyERrb+51ULdHkMYCRS/UYhtGlH+b2I43b4LAF7+zUICMxFItnsfHe231e1IzKxj6svSJr0seUyWUyXH9JOn6ydi6GzFb8z6vF+KK4GaLIc4vIfTCAkUtV1vcA4AHcNH7v766DcciCO6/MgYyrpl5N1zWAd3dqMSczGpfMjp/y401PicCT9y/AjNQIrN9Wjb9tPAbjEI8vIvfAAEYudaK+Bwq5jE3UNC6N7f3YXtKMy+YmIiWOrxlvZrXZ8cLHFfBXyXHPilyHtSiEBqrwg5tn47bLM1Gm7caTLx1CTXOfQx6baCoYwMilqhp6kRoXcs5byonGiKKI17dVjzbep0tdDjnZx3vr0dDej3uuyUVYkMqhjy0TBFy9IBk/v6sAMpmAZ9aX4pN99bDbuSVJ0uGnILmMxWpHTVMf+79oXPaVt0HTrMfNl2YgiI33Xq2qoQeb9jdgcV4cCnLUTnuetPhQ/Pq+BSjMVWPjl7X409tH0Gc0Oe35iM6HAYxcpqG9H1abHRmJPP+Rzm9w2IJ3dmiQnhCKix3QC0Tuy2S24c9vlCAiRIV1y7Od/nwBfgp8+7qZuG9FLrQ6PZ747yEcq+12+vMSfR0DGLmMVqcHwAZ8urAPdtehf9CCu65i472327BTg5auAdy/agYC/V1zPLEgCLgkPwG/vHc+woJUeHbDUWzYoYHVxmOMyHUYwMhlNDo9YiIDER7MAax0bk0dRnxR0oxlbLz3euW13dhRosOapRmYnhLh8udPjA7C43cX4rK5idhysBG/f70EHX1DLq+DfBMDGLmEKIrQ6vSYnhIpdSnkxkRRxOtbqxDkz8Z7b2ccsuC/m08gPioQd62cLlkdKqUcd12dg+9dn4e2nkE8+dIhHK7skKwe8h0MYOQS3YZh9BnNyE11/bdc8hwHjrejplmPm5dlIDiAjffe7PWtVegftOBb186En1IudTkozI3Bk/fNR0JUEP75QTle2VIJk8UmdVnkxRjAyCXGDuDOTeUKGJ3d4LAVb+/QIC0+FEvYeO/VDla049CJDlx3capbbTNHhwfgp3fMw8qLUrDrSAv+55Ui6DqNUpdFXooBjFxCo9NDpZQhLZ53QNLZfbinDv0DZtx5VTYb771Yb78Jr31WhfSEUKxclCJ1OWdQyGW4eVkGfnxbPvoHzfjtK0XYdUTHY4zI4RjAyCW0Oj3S40Mhl/MlR2dq7jDii+JmXDongSHdi4miiP9uPgGrzY4HVs+AXOa+7wd5aVF48v4FyEoKwytbqvCvD49jcNgqdVnkRdz31U9ew2SxoanDyPETdFZjE+8D/OS48dIMqcshJ9pRqsPxuh7cenkm4iIDpS7ngsKC/fCj2+bgpkvTUVzViV+/dAi1LQapyyIvwQBGTlffaoDNLjKA0VkdqGhHdVMfG++9XFvPIDZs1yAvLRKXzU2UupxxkwkCVi1KxWN3zoMoAr9/vRifHmyAnVuSNEUMYOR0mrEBrAncWqLTDZms2LBdg7T4EFySnyB1OeQkNrsd//m4AkqFDPetnO6wg7ZdKTMxDE/ePx9zsqLxzg4t/vLOURgGzFKXRR6MAYycTqszIDYyECGBjj1glzzfh3vqYBgw405OvPdqm/c3oK7VgLuuzkFEiOcOYg70V+J71+fhrqtzUNnQhyf+ewgV9T1Sl0UeigGMnEoURWh0emTy/Ef6muZOIz4vasYl+Wy892b1bQZ8tLceC6bHYMH0WKnLmTJBEHDZ3ET88p5CBPor8Ke3jmDjl1rY7DzGiCaGAYycqqN3CMYhC/u/6DSiKGL91pHG+5su5cR7b2W22PCfjysQEqjEnVflSF2OQ02LCcav7pmPJbPj8cm+BjzzRim69cNSl0UehAGMnGqs/yuTAYxOcfBEO6qa+nDTpRncmvZi7+2qRWv3IO5fNd0rb7DwU8lx38rp+NZ1M9DcYcSvXzqEkupOqcsiD8EARk6l1ekR4CdHQnSQ1KWQmxhrvE+JC8FSNt57rRMNvdhW1ITL5yUiLy1K6nKc6qIZcXjivvmIDg/A3zYew/qt1bBYeYwRnR8DGDmVRmdAekIYG6zppI/31qPPODrxXsbXhTcaHLbixU0ViI0IwC3LMqUuxyViIwLxi7sKcNX8afiipBn/82oxWrsHpC6L3BgDGDnNkMkKXaeR4yfoJF3XALYVNWFpfjwyErgt7a3e+Lwaff1mPHDtDPippD9o21UUchluvyILD908G739Jvzm5SLsPdYqdVnkphjAyGlqWw0QAWQm8YOWxhrvq+CvkuMmTrz3WsVVHdhX3oZVi1J8NmTnZ0bjyfsXIC0+BC9uOoH/fHwcQyYeY0SnYwAjp9E26yEASI/3zTdhOt3hyg5UNvbhxqXpbLz3UnqjCa9sqUJKbAiuvThV6nIkFRHih5/cPhfXX5KGAxXtePLlw2ho65e6LHIjDGDkNJoWPRLUQQj0V0hdCklsyGTFW1/UICU2BJfO8ZxjaGj8RFHEy59WYthswwPXzoBCzo8XmUzAdRen4dG1c2Gx2vHUa0XYVtQEkccYERjAyEnsogitzsDxEwQA+HgfG++93e6yVhzVduPmZRlI5F3Pp8lJjsCT9y9AXloU3vy8Bn997xiMQxapyyKJMYCRU7R2D2LIZPXZHhD6SkvXALYdbsKS2fEcyOulOvqG8OYXNZieEoHlhUlSl+OWggOUePCmWVi7PAvldd144r+HUNXYK3VZJCEGMHIK7dgAVjbg+zRRFLF+WzX8lHLcvIyN997Ibhfx4icVkAnA/Sunc+TMeQiCgCsLp+EXdxVCpZDhD2+W4qM9dbDbuSXpixjAyCk0zXoEBygRGxEgdSkkoaKqTpxo6MUNS9MRysZ7r/TZoUbUNOtxx5XZiArzl7ocj5ASF4Jf3TsfF82IxQd76vDHt0rR22+SuixyMQYwcgptix4ZCaEQ+G3YZw2bRxrvk2ODcdlcNt57o6YOI97fXYuCbDUWzYyTuhyPEuCnwDevnYlvrJqO2lYDnvjvIRzVdEldFrkQAxg5nHHIgtbuQfb7+LiP99Wjt9+EO6/KYeO9F7JY7fjPx8cR6K/E3dfk8MvWJF08Kx5P3DsfESF+eO7dMrz1RQ2sNrvUZZELMICRw9W28ABuX9faPYCth5pw8aw4vg681Ae7a9HcOYD7VuRyrtsUxUcF4fG7C3DFvCRsPdyE371WjPbeQanLIidjACOH0+j0kAkC0uJ5BJEvEkURb2yrhkop95lzAH1NdVMfthxsxNL8BORnRktdjldQKuS446ps/L8bZ6GzbwhPvnQYByrapC6LnIgBjBxOqzNgWkywT50BR18prurE8fpe3Lg0HaFBXBnxNkMmK174pAJRYf647XIGbEebl63Gr+9bgKSYYPz7owr8d/MJmMw2qcsiJ2AAI4ey2e2obTEgI5GrX77IZLbhre01mBYTjGVzE6Quh5zg7e016NYP44HVMxDgx1MunCEqzB8/XTcXqxenYm9ZK37zymFUNvWhsXMAhmErwHY7r8CfHnIoXecATBYb+3581Cf769FjMOHb182EXMbvd97mSE0XvjzaihUXJSN7WrjU5Xg1uUyGG5emY3pKOP7xfjn+sL4EAKBSyPDQbXMxPTkM4Pgwj8Z3SHIojY4N+L6qrWcQWw42YnFeHLKSwqUuhxzMMGjGy5+eQJI6GNcvSZe6HJ+RGBMCs+WrLUiz1Y7n3i6FYZBHGXk6BjByKK1Oj7AgFQcy+pixifcqpQy3XMa+IG8jiiJe21KFQZMV37x2BpQKfnS4SnvvECy205e6zFY79pS1SlQROQp/isihNDo9MhPDOBPIx5RUd+J4XQ+uvyQdYWy89zr7yttQXN2JGy5Jx7SYYKnL8Rl6owmvb6k849cFAXh3hwb/+rCch3p7MAYwchj9gBmdfcMcwOpjTBYb3vqiBknqYFw+jxPvvU23fhhvfF6N7KQwXL0gWepyfEZr9wCeGp0HduOlGfBTjtxV7qeU48e3z8MNS9NRXNWJX75wEGVaTtD3RGzCJ4fRsv/LJ23aX49ugwmP3cHGe29jF0W8uKkCdhH4xuoZPNHARWqa+/D8u2WQywT8dN08pCWEYumcBPQNmBEepEJooBIzU8KRnxGF/3xSgb+8U4al+fG47fIs3pnqQfg3RQ6j0ekhlwlIieMWha9oH228XzQzjnfFeaHPi5pR2diHe1fkQh0eIHU5PqGosgP//rgCUaF++NFtcxATHgCIQGiAEqEBypHfNNoSlhwbgl/dMx8f7KnFloONqKjvxf0rpyM3JUK6/wAaN35dJYfR6vRIjQuBUsEBrL5AFEWs/7waSoUMt16WIXU55GC6rgG8u1OLOZnRuGR2vNTl+ISth5vwzw/KkRIXjJ/fVTASvi5AqZDhlmWZ+NkdBZDJBPzhzVK8+XnNaXdOknuSJID97W9/w6pVq7Bq1Sr84Q9/kKIEcjCrzY661n72f/mQ0poulNf2YM2SdIQF+0ldDjmQ1WbHCx9XwF8lxz0rcnlTjZPZRRFvfVGDt76owdxsNR65fe6Ez9fMTArDk/ctwOXzErGtqAlPvnwYda0GJ1VMjuDyALZv3z7s2bMH77//Pj744AMcP34c27Ztc3UZ5GCN7UZYbXb2f/kIk8WGNz+vQaI6CFcUsPHe23y8tx4N7f2455pc3tXqZBarDf/68Di2Hm7C8oIkfO/6PKiUk9tF8FPJcedVOXj4tjkYNtvw1KvFeP/LWlisdgdXTY7g8gCmVqvx2GOPQaVSQalUIiMjAy0tLa4ugxxsbAArV8B8w6b9Deg2DOPOK7PZeO9ltC16bNrfgIvz4lCQo5a6HK9mHLLgj28dQVFlB267PBNrl2c55EaHmWmR+O03FuCimbH4eF89fvL8l2juNDqgYnIkQRRFyQ4zqK+vx9q1a/Hmm28iNTVVqjLIAZ559TCqGnvx38evkroUcrKWLiO+/4cdWJKfgIfvKJC6HHKgYZMVD/15Jyw2O/768GUIGmv6Jodr7xnEr/+zH23dg/jx2nm4ZK5zVpL3H2vF3989goEhK+5akYs1l2ZCzrtZ3YJkd0HW1NTg29/+Nh599NEJha/ubiPsdudlRrU6BJ2d/U57fG91vLYbWUlhF7x2vL7O44prK4oi/vZOGRRyAdctTvGpv0tfeO2+trUKLV0DeGTtXAwahzFoHHbJ8/rCtT1VfZsBf3mnDFarHQ/flo+cpFCn/fdnxgXjbz+5HM++UYyXPqnAniM6fGPVdMREBDrl+XzN+V67MpmAqKhzTwWQZO+guLgY9957Lx5++GHccMMNUpRADtRjGEZvv4nbjz7gSE0XjtV2Y82SNISz8d6rlNd2Y0eJDlfNn4bpHGPgNGXabjyzvhRKuYCf3VWAnGTnX+vwED98/4Y8PLB6Opo7B/Cr/x7CjpJmSLgBRpBgBay1tRXf//738eyzz2LRokWufnpyAh7A7RvMFhve/KIGidFBuKIgSepyyIGMQxb8d/MJJEQH4aZLedC2s3x5tAWvbqlCUkwQfnhLvku/xAiCgMV58chNjsBLm0/gta3VKKnpwn0rchEZyrN7peDyFbAXX3wRJpMJTz/9NNasWYM1a9bgzTffdHUZ5EBanQEqhYxnxHm5zQca0KUfxp1XZUMhZ+O9N3l9axX6By345uoZnOPnBKIo4oPdtXj500rMSI3AT9fNk2wFOTLUHz++bQ7uuiobNc19+OWLh7C/vI2rYRJw+QrY448/jscff9zVT0tOpNHpkRofyg9lL9bRO4jNBxqxcEasS7ZMyHUOVrTj0IkO3HBJGlLiQqQux+tYbXa8sqUSe4+1YcnseNx9dY7k75WCIOCyeUmYkRaJFzedwH8+qUBJdSfuuiYHoROcP0aTx09MmhKzxYbG9n5kJIZKXQo50Ruf10AuF3DrZZlSl0IO1NtvwmufVSEjIRQrF6VIXY7XGTJZ8dy7Zdh7rA1rlqThvhW5koevU8VGBOKxdfNwy7IMHNV24VcvHERpdafUZfkM93klkEeqb+uHzS6y/8uLHanpQpm2G2suTkNECBvvvYUoivjv5hOw2u14YPUMznNzsN5+E55ZX4IT9b24b0Uu1ixJc8sTBWQyASsuSsGv7pmP8GA//HXjMbzwSQUGhy1Sl+b1eBg3TYl2bABrAgOYNzJbbHjj82okRAdheSEb773JjlIdjtf14K6rshEbyZEEjqTrNOIv7xyFcdiKH94yG3npUVKXdEFJMcF4/J5CfLy3Hpv2N+BEQy/uXzUdM1MjpS7Na/ErD02JRqdHTEQAQnlciVf69GAjuvTDuONKNt57k7aeQWzYrkFeWiSWOWkAqK+qbOjF714vgdUm4rF18zwifI1RyGW4YWk6fn5XAfxVcvzprSN4fWsVTGYe7O0MfEelSRNFEVqdnqtfXqqjbwib9jdgwfQYzoXyIja7Hf/5uAJKhQz3rZzulttinupgRTv+vOEIwoNV+MXdBR57U0N6QiieuHc+riychu0lOjzx0qGT44bIcRjAaNI69cMwDFqQmcQA5o3e+rwGcpmA2y7PkroUcqDN+xtQ12rAXVfnsKfPQURRxKcHG/B/Hx1HekIYfn5XAaLDAqQua0pUSjnWLs/Co2vnwmYT8fvXi/HuTi0P9nYgBjCaNG3zWP8X74D0Nkc1XTii6cJ1S1L5Ie1F6tsM+GhvPRbOiMWC6bFSl+MV7HYRb2yrwTs7tJifG4OHb8tHkL/3nKGZmxKB33xjAZbMisfmAw347SuH0djuO8dGORMDGE2apkUPP5UcSWoOYPUmFutI4318VCCuLJwmdTnkIGaLDf/5uAIhgUrccWW21OV4BZPFhr+/fwxflDTj6gXT8O01M71ykG2AnwL3rZyOh26ejf5BC377ShE+2VcPm52rYVPBAEaTpm3WIyMhFDIZe0i8yacHGtHZx8Z7b/Perlq0dg/i/lXTERzgPSs0UukfNOOPb5biSE0X1i7Pwm2XZ0Hm5f10+ZnR+O0DC1GQo8bGL2vx+9dL0No9IHVZHovvrjRxwkj/V1OnEUmxIYB3v+f4lM6+IWw60ID5uTGYwdvPvcaJhl5sK2rC5fMSkZfmOXfluauO3kH87rViNHYY8b0b8nxqpTg4QInvrMnDd9bMRHvPIJ586TC2FTXBzqOMJoxzwGhiBOBEox5/easUogjsKGpGfqYa05PDAP78eS4BMAxa8N/NlRAE4LYrOPHeWwwOW/HipgrERgbiFp5kMGW1LQY89+5R2O0iHrl9rs/ehLRgeiyyp4Xj5U8r8ebnNSit7sT9q6dDpVSgz2hGeIgfQgMU/Fw4DwYwmhDDoAXPvV0Ki21k799is+O5t0vxh+9fjFBua3im0VD97FulsNrskMsEtPeZEBnqzzdPL/DG59Xo6zfjZ3fNg5/S+/qTXOlITRf+9WE5QoNU+NGt+YiPCpK6JEmFB/vhoZtnY3dZK978ogaP//sg7KIIq02En1KOH9w6h1/Oz4NbkDQh+8vbYP7abchmqx07S3Ww2tiQ6YkMgxY8+2bxyb8/m13E8xuOwDDIo0g8XXFVB/aVt2HVohTO65uiHaU6/HVjGRKig/CLuwt9PnyNEQQBS/MT8Ogd82Cx2WG1jaQtk8XG95EL4AoYjUu3fhjrt1XjiKYLAk7/QiMA+ODLWuw+osM1C1Nwyex4qPhN22P0Gc34+mgfk8WGvgEzVzU9mN5owitbqpASF4JrL06VuhyPZRdFbNxVi80HGjA7IwrfXZMHPxXf375OLpPh621gJosNvUYT30fOgQGMzstmt2Pb4WZ8uKcOIkTcclkGpsWF4e/vHoXJYoOfUo4Hb8mHxWLFpn0NWL+tGh/vrcOV86fhsrlJCPTnS8zdhYf4QSYA9lPePBVyGcJ5vJTHEkURL39aCZPFhm+unsG7WSfJarPjv5tP4MDxdlw6JwF3XpXNQ8vPQak8+3XZuFOL+1dORxjfT87AT0c6J22LHq9uqUJThxH5GVG446rskenOAvDM9xajb8CM8CAVQgOVgAjMTo9CdVMfNu1vwHu7arH5QCOuKEjE8sJpCA3kD5+7UggiBEGAXBjZfhSEkeBdUtWBZXN4TqAn2l3WiqPabqy9IgsJ0dwqm4zBYSv+/v4xnGjoxY1L07FqUQqPbTqPD3dpIZMJkMsEWKx2qBQyLJoVj71lrfjlCwdx51XZHP77NQxgdIbBYQve21WLnaU6hIf44fs35GFetvqrNx8RCA1QfrWsPLpyIggCcpIjkJMcgfo2Azbtb8CmfQ3YeqgJS/MTcM3CZKjVnnk2mjcrquyEzS7ix7fPQWiwHwJUcry+pQqvbqlC/4AZqxen8oPHg3T0DeHNL2owPSUCVxQmSV2OR+oxDOPZd46irXsQD6yejsV58VKX5NYOVrTj0IkO3HhpOpbOSTzty/mVBUl4cVMF/vXhcRRVdeLOq7L5hXwUAxidJIoiDld24M3Pa2AYNOOKwiTccEk6Avwm/jJJjQvF92+YhdbuAWw+0IAdpTrsKNXh8sJpuGxOAuIiA53wX0CTsb+8DXGRgZiZEnEyaD140yy8tLkS7++ug2HAgrVXev+QSW9gt4t48ZMKyATg/pXT+Xc2CU0dRvzlnaMYNlvxo1vzOQ/vAnr7TXh9axUyEkKxYmEy5DLZaV/OE6KD8PO7CrDlYCM+3FOHqsZe3HVVDgpzY6Qt3A0wgBGAkW/Nr39WhfK6HqTEheChW2YjNW7qZzzGRwXhG6tmYM2SNHx2sAm7Sprx+aFGFOTGYNVFKUiJ44qYlLr0Q6hq6sMNl6SdtsqlkMvwjdXTERqkxGeHmtA/ZMYD7CVye58dakRNsx4PrJ6OqDB/qcvxDKMz8PqMZnT0DuKlTRXwVynw2B0FmBbDY9bORxRFvPTpCVisdjywesY5++PkMhlWLUpFfmY0XvzkBP7xQTkWzojFHVdm+/SpDAxgPs5qs2PLwUZ8vK8ecpmAdcuzcPm8JIcfLxQdFoA7rsrGPdfNxNufVWJ7STOKKjswKz0KqxalIHtauEOfj8bnYEU7AOCimXFn/DuZIOC2y7MQGqTCOzu0GBiy4Hs3zJrUiig5X1OHEe/vrkVBjhqLzvL3SWcxOgPv+Q1HYLLYAADRYf547M55iAxhgL2QXUdaUF7bgzuuzEbsOHY1ktTB+MXdBfj0QAM+2luPEw29uOfqHMzNVrugWvfDd1IfVt3Uh1c/q0JL1wAKc9RYuzwbESF+Tn3OiBB/3HRpBlYsTMb2Eh22Hm7C0+tLkJ0UhpWLUjErPZL9Ri4iiiL2lbchKykM6vCAc/6+FQtTEBygxCufVuF/3yzFD2/NZw+Hm7FY7fjPx8cR6K/E3Vfn8GdonAyDltPCFwAYBsxQeOGB2o7W0TuIt7drMDM1ApfNG//NOgq5DNdenDayGrbpBP668RgWzYzDuiuzEOTvW6thDGA+yDhkwYYdGuwpa0VUqD8eunk28jOjXVpDoL8Sqxen4sr50/Dl0RZ8dqgRf3nnKJJjgrFqcSoKstU85NvJGtuNaO0exN1X51zw914yOwEhASr888Ny/P71Ejx8az6izxPayLU+2FOL5s4BPHTzbIQwHI9bn9F8WvgCRgZLcwbe+dntIl7YdAIymYD7JtlrmBwbgl/eU4hP9tXjk30NqGjowb3X5Lr8s0hKbOjwIaIoYu+xVvz83wew71gbVixMxv88sFDSF7yfUo4rC6fh6W8vwn0rc2Gy2vHPD8rxixcOYvfRFk7Xd6L9x9ugkAuYP318zbBzsqLx8G1z0D9gxu9eL0Zzh9HJFdJ4VDf1YcuBRizNT/CpDy9HCA/xg+JrX/QUcoEz8C7gs0ON0DTrcedV2SNHlk2SQi7D9Zek45f3FCI4QInn3i3DfzedwOCwb0zPZwDzEa3dA/jfN0vx4qYTiI0MwK/vm49bLst0m4nOCrkMl8xOwFMPLMT3rs+Dn1KGlz6txE//tR/biprO+JZKU2Oz23Gwoh2zM6IntOyfPS0cj90xDwDw9PoSVDf1OalCGo8hkxUvfFKB6HB/3M4D1CcsxF+O8BA/jC3gCKOz8Kobe6UtzI2N9RoW5qhx0QzHzPVKiQvBr+6Zj1WLUrC3vBW/fPEQymu7R26QGLKgsXMAhmHryLErXoRbkF7OYrVh0/4GbD7QAJVCjruvycHS/AS3vT1dJhNQmBuDghw1yut6sGlfPd78vAYf763HVfOn4fJ5iQj0sT4BZzjR0Av9gBmLZk78DTQpJhg/v7MAf9pwFH96+wi+uyYPc7K48iKFt7fXoFs/jJ/eMQ/+Kr6dT1RNkx5d+mHcfkUWctMiEaCU4z8fH8f/fXgc8usFn20OP5eRXsMKBPorcZeDew2VChluujQD87LVeOGTCvx5w1HMzoxGZX0PzFa7Vx7uzRUwL1ZR34NfvXgIH+2tR2FODJ761kVYNifRbcPXqQRBwKz0KDx2ZwEeu2Me0hNCsfHLWjzyz314d6cW+gGz1CV6tP3lbQj0U2B2xuSCU3R4AH525zwkRgfhbxuPYc+xVq/+puqOjtR04cujrbjmomTeRTxJO0t1CPBT4NL8BCRHB0Ed5o8f3ZKPlLgQ/OODcpRpu6Qu0a18tLcOzZ1G3HtNrtN6DdPiQ/Hr++bj8oIklGm6YB49qNYbD/fmVyYvZBgw463tNThwvB0xEQF4+LY5mJnmucMEs6eFI3taOBra+rH5QAM+PdCAbUVNuGR2PK5ZmDxyPBKN27DZiuLqTiyaGQelYvLfwUIDVXhk7Vz8/f1j+O+mE5DLBNjsold+U3U3hkEzXv70BJLUwbh+SbrU5Xgkw6AZRVUduHRO4mmtGAF+Cvz41nz875tH8LeN5Xjo5tke/f7pKBqdHpsPNOCS2fFOX/FWKuRYOicR24ubT/t1k8XmVTdIcAXMi9hFETuP6PDzfx/A4RMduHZxKn77jQVe8+aREheC716fh6e+dREWzojFriMt+Nn/HcCLn1SgpWtA6vI8RmlNF8wWu0NmRQX4KXD/6hmQCSPhCxh5k3zu7VKv+qbqNgRAP2jG/310HAMmK7513YwphWhftresFVabiGVzzxyhEOivxMO3z0FcZCCef68MlQ2+3RNmMtvwwicViAr1x+1XZLnkOcND/M66W1Ou6YLd7h3f7LgC5iWaO4x49bMqaHR65EwLx93X5CA+yjsP4Y2LDMT9K6fj+iVp2HKoEV8eacG+8jbMy1Fj1aIUh0zw92b7j7chKtQfmUlhDnk845AVdvH0N0Sz1Y4nXjyIvNRIZCeHIzc5AtFh/pxPNRWjQ0OffasEVpsIuUxA/7BtZLvXOz6PXGbsy2r2tHAknuOw8uAAJX6ydg7+8EYpnnu3DD+6Nd9nt3o37NSgs3cIj66b67JBzIJohyAA8tEvd0qFDPHRQXh3pxbFVZ2455ocJMd69kkqDGAezmSx4aO9ddh6qAkBfgp8Y9V0LM6L84kPushQf6xbno3Vi1PxeVEzvihuRnFVJ2amRWL16HR9X7gOE6E3mnC8rgerFqU4rBcwPMTv5PbjGIVMQEpsCI5qu7G3vA0AEBXqh+xpEchNDkdOcjjU4QEjfz+nHAUTHuKH0AAFA8VZGAYt+PObJSevs80u4i9vleLp7y1GBMcmTEhFXQ86+4Zx49KM8/6+0EAVHrl9Dp5+oxR/eecoHr59DjISHPPFxVOU13ZjR4kOVy+YhpzkCJc9796yNtjsIn565zwE+CsRHqRCSIACB4634+0vavCbl4tw5fwkrFmS5rE3oHhm1QQAKNN24fWt1ejSD2PJ7HjcelmmT56rFRqowo1L07FiYTJ2lOqw9VAjnnmjFJmJYVi1KAWzM6L4QT/q4IkOiCJw0QwHHlVjt0MmCBCFkZWFU3vA7HYRLV0DqGrsQ1VjL8rrurH/+EggiwjxQ05yOMKC/bGjuMlr73RyBLtdxPtf1p4WcgHAYrPj5/+3H3lpkZiVHoW8tMgpzWXyFTtKdQgJVGLeOO5yDAv2w6Nr5+KZ9SX489tH8cjaOT6zyj4wbMF/N59AQnQQblzqul7DsRXKrKQw5CSFn/bvFs2Mw+yMKLy7U4vPDjXhcGUH7rwyxyPvxGYA80C9/Sa8+Xk1iqo6ER8ViJ+um+vSbybuKsBPgZUXpWB5QRJ2l7Viy8FGPPduGZLUwVi1OAXBgX7427tHYbLYfPaDfv/xNqTEhSDhHNsuk7HlYCOsdjseu6sAfioFwoNUCA1UAuLIeZJJ6mAkqYNxRUESRFFES/cgqhp7UdXYh/LaHhiHvuoVG7vT6ZnvLfaaRtup6h804z8fV6C8rgcyQThtu1chl2FulhpVjb0oruoEACRGB2HmaCDLnhYGJY/VOU2PYRhHNF1YsTBl3P1zESF+eGTtXDzzRgn+9NYRPLJ2rsdvf43H+q3V6B+04Ac3z3bp66iyoRcdvUNYsyTtrP8+yF+Je67JxeK8OLz6WRWef68M87LVWLc8C5Fh/h7zRZsBzIPY7SJ2lOrw3i4tbHYRN4yu+ijkbMI9lUopxxUFSbh0TgIOVrRj84EG/N+Hx09rlfHFD/qWrgE0tPU7tInWMGDG9pJmXDQjFlmnbs2c4w1PEAQkRgchMToIl89LQkOHEU/+99Bpv8dksaHXaPKZv5fzqWs14B/vH4N+wIx7VuRAHRGEv75z5pcIcXSlsbyuB+W13dhe0oyth5ugUsiQkxyBvPSRQBYbEeDz2/JfHm0BRODSOQkT+nNRYf54ZO1cPL2+BH986wh+um4uEtXBTqpSeocrO3Cgoh3XX5Lm8hW/naU6BAcoUZhz/hXKrKRwPHHvfGw93ISP9tThFy/0YPGseOw92uIRK+oMYB6ioa0fr2ypRH1bP2amReKuq7IRE3Hh0+d9mUIuw8Wz4rEoLw5bi5qx4Yua0/69t93SfCH7j7dBJghY6KDp1cDI6pfFasfqxamT+vMRof5QyGVnHDm1cacW3752hs8O3RVFETuPtODNz6sRFuSHn91ZgLT4UEAAnvneYvQNmE9baRQEAYnqYCSqg3H1gmSYzDZUNfWivLYHx+p68ObnNXgTNYgO80deehRmpUUiNyXCZQ3V7sJqs2PX0RbkpUed9wD6c1GHB+DRdSMh7H9HQ5g33uzUZzThtc+qkBYfilWLUlz63HqjCaU1XVhemDSuVTeFXIaVF6Vgfm4MXtlSiR2njK5w9y/avvXT54GGTFZ8sLsOnxc3ISRQhW9fNxMLpsf4/LfYiZAJAgpyYs4IYH5Kuc+c+WYXRRw43o4ZaREIc9B/86mrX5P9EArxlyMy1A+dvUMQAagUMizJT8CuUh2efPkwvnf9LKTEef9Wz6lMFhte3VKF/cfbMCs9Ct+8dsZXvZ0iEBqg/OrD5Bzf6v1UcszOiD45aLejbwjHa7tRXteD/cfbsLNUB7lMQGZiGPLSI5GXFoVpscFf3Zjhpf2SRzVd0BvNuOzqM0dPjFdsRODJnrD/fbMU379pZHvOW66TKIp4+dNKmCw2PLB6OuQy1+6w7C5rhc0u4tI5E/s7UocH4JbLs866ou6uX7QZwNyUKIooqe7CG59Xo6/fhGVzE3HTpek+uyIwVTuKmwCM3J1nHW1kvnZJ2skVBG+nadaj2zCMGy91XCPtloONsNjsuPbis/dpjEeZphsdvUNYuzwLOamRJ1d1LpoRi39+UI6nXivGuiuzcGl+gk986WjvGcTf3z8GXecArr8kDasXpzrkbtWY8ADEzEvCZfOSYLXZoWnWn9yufG9XLd7bVYvQIBXy0iKRlx4JpVKJFz4q97p+yR2lOkSG+mF2RtSUHic+Kgg/WTcXv3+tGE+9UgQAXnOddpe1okzbjXXLs1y+ume3i/jyaAtyk8MRFznxHZ6RFXUBVttXfwHu/EWbAcwNdemH8Ma2GhzRdCFJHYzvXZ+HjETfuvXZkZo7jdh2uAlL8+Nx47JMtPcN4ZVNJ7BpXx3yM6LOOQfIm+wrb4OfUo55WY452+6r1a+4Sb1RAiNfMj7aW4/oMH9cNjfxq15GEchMDMOv75uP/3xcgVe3VKGmqQ93X53rNofHO0NJdSde3FQBmSDgR7fmIy99aiHhXBRyGXJTIpCbEoGbl2Wgb3Q0SXldD8q03dg3OjZkjLtv44xXe88gKup7ccMlaZDJph5qQ4P8TvugHxtA/IfvX+yx16mjbwhvflGD6SkRuLwgyeXPX17Xgy79MG5edv7xIOcSGqBAXGQQmjuNAAC5TMAPbp3jtl+0GcCkdspSf0iQCgfLW/HB7loAwK2XZWJ5YRKb7KdAFEW8/lkVAvwUuHnZyJiO0AAlfnxrPn77ShGee+coHr+nEKFOOtfMHVisNhyu7MC8bLXDAsynBxtGV79SJ/0Yx+t7UNdqwN3X5Jz1NR4SqMIPb83HJ/vq8eHuOjS2G/Hd6/McegenO7DZ7di4qxafHmxEWvzIaQ+uPF4rPNgPF8+Kx8Wz4mG3j/Sevb616rTf487bOOO188jItusl+RNrvj+XPqMZFuvpvYtmqx2vfVaF65ekedwXO7tdxH8/qYBMAO5fOV2SM4N3HdEhdJzjQc6mq3cIzZ1GrFqUgpLqTijkMrdekWQAk9LoZOvnNxyByWI7eZfenMxorLsyi2ccOsC+8jZUN+tx74rc02akRYb648GbZuOZN0rw943H8JPb53rtkS5l2m4MmaxYlOeY5nv9gBk7SnRYNHOKq1976hEZ6oeL8+LP+ftkgoDrLk5DRmIY/v3Rcfz2lSLcsyLHsXPMJKQ3mvCvD4+jqqkPl81NxO1XZEn6OqxrM+CT/fVn/Xf9RhPgYaFijNliw56yVszNikZ4sJ9DHnPsqJxTx4LIBAFHazpRXNmBGakRWF44DbMzoiQJMxO19XATqpv1+Maq6YgKc/0suVPHg0x20WF/RTsA4NL8BIQEKPHWdg1auwbc9kYJ7/zE8RCGQQuee7sUJosNwEj4ksmAJfnxgIgz7gwbNwEwDFnQ2DkAw7B15KgSHzQwbMGGHRpkJIZiyewzP+TTE0LxjVXTUdOsxytbKiGKbvo1aYr2H29HWJAK01McMytuy9jq1yTvfARG5vxodPpxz2KamRqJX9+3ANNig/Hvjyrw2tYq9PSbPPo1Xt3Uh1+/fBh1rQY8sHo67ro6R7LwJYoidpQ04+nXS6CQCbh7xXT4KUdWS5VyGUIClfjLhqPYVtTkkT8nRVUdGBi24rKznPs4WW1dRtjFkSOhgJFeo4fXzcOf/t/FuHFpOlq7B/H8u2X4+f8dwLbDTRgyWUf+oDu9P4/WcriqE+99qcW8bDUW50nz5WZ3WStEEVg6wfEgY0RRxIHjbchOCkN0eAAWzIiFIODk4Gd3xBUwiYiiiN2js0pOZbcDf3vvGICRn8uwYBUiQ/0RGeqPqFA/RIb4j/6zH6JC/RESqDy9Oflrq2re0hg6Ge/tqoVxyIKHb5tzzm+gC6bHoq1nEB/srkN8VCBWLUp1bZFOZhyy4KimC1cUJDnkbqZTV79iJ7n6BQAf76tHWLAKS/PPvfr1dREhIxPJN35Ziy0HG7GzVAdR9LzmZ1EUse1wEzbs0CI63B8P3zoHSTHSzZM69a7L2RlReGD1DAQHKjEvO/rkuAsZgP9uOoE3P69BZUMv7ls53aNO3dhRqkNsZCByHfQlxGa34/XPqhAZ6oef3lmAIbPttLEgqxen4pqFySip7sTnRc1484sabNxdiyWz4pGaEIbXt1RK//48+lnx3NulJz+HFs2KhyATXF6LzW7Hl0dbkJcWiZhJjAcBgIb2frR2D+LKa3IAjGytz0iNxIHj7bj+knS3XIVkAJNAR+8gXttajeN1PRAE4NQvlEqFDA+snoFhkxXdhmH09JvQYxhGc4cRZZquMwKbQi5DZKgfIkNGAllQoBLbi5tPNod6SwPtRNW2GLCrVIflhdMuOLH62sWpaOsexHu7ahEbEYjC3BgXVel8RZUdsNlFLJrpmG+1nx5ogNUmTmn1q7qpD5WNfaPbbRPrSVPIZbjmohR8XtR8coXYk17jQyYrXtp8AkVVnZibFY1vrJqBQH/p3obbewfx942jd10uScPqi0fvuvz6uAsAD940C9uKmvHODg2efOkQvr0mD5kecHNQY3s/tDoDbr8802F30m4v1qG5cwDfvyEP6lOPfjrlvVwhl2HB9FgsmB6LulYDPi9qxs5SHWxuMqfKMGjB8xuOnPaZ8sJHx5ElQS1l2m709puwbnn2pB9jf3k7FHIB8095/140MxYvfHICmma9Wx6kzgDmQlabHZ8ebMQn++ohlwlYd2UW4qNDxn08jiiKMA5Z0GMYCWU9/aaRkGYYRo/BhIqGXvQZTfj6DoGvTRa320W89lkVQoNVuP6SC49IEAQB963MRad+CC98UoHocH+vOett//E2JEQHITl26isseqMJO0t1WDQzdmqrX3vrEBqonPAk8jF9RvMZ2/Oe0CSu6xrA3zceQ3vvIG65LAPXLEiWdLRGaXUnXhi96/KHt+Zj1gXuuhQEAVfNn4aspDD868NyPP16CW68NB3XLEx2y9WFMTuPtECpkGHxrPGvtp5Pn9GE93fXIi8tctzN4mnxofjmtTOweHY8/vRm6Wn/TqrXbp/RfLL9Repadh1pQXiwCvmZk7vz12a34+CJdszOiEbQKaOa5mWroVJWjWxNMoD5ruqmPryypRKt3YMozFFj7fJsRIT4nXOy9dkIgoCQQBVCAlXnHE65+WAj3t2hOePX//PhcSybk4CLZsZ51NbBZOwo1aGhvR/fWTNz3JO+lQo5/t+Ns/E/rxTh+XfL8Mt75o/8/Xiwzr4h1DTrcdOl6Q75oP/0YCOsNhGrp3Dno1anx/H6XtxyWcbJHqOJCg/xg1Iug+WUEKZUyNx21g8AHKhowyufVsFPJccjt8912FbYZNjsdrz/ZR02H2hASlwIvn99HqInsO2TFh+KJ+5dgFe2VOLdnVpUNvTigdUzEOqG13/IZMX+421YkBvjsPe9DTs0sNrsuOPK7An/XE2LDYFKITtt1Ukl0Ws3PMQPcplw2gHvSrnra+nqG8IxbTdWL06ddPP9ifpeGAbMWDTz9BuN/FUKzMtS43BlB9Yuz3a7G63cqxovZBwaOU3+6fUlMFvseOjm2fjeDbO++nAfXepPjg4a+dYxhb33/eVteG+HBukJoVCNvtBUChmuKJwGhVzAG5/X4Md/24t/fViO4/U9p9294y30RhM2flmLGakRpy1Fj0dYkAoP3TIbw2Ybnnv3KExm24X/kBs7MNp86og7Bk9b/ZrCEVgf76tHcIBySs3QIf5yqCNODwwpcaEjX17cjNVmx/pt1fj3RxWYFhuMJ+6dL2n4MgyY8ee3j2LzgQYszU/Az++cN6HwNSbQX4HvrJmJu6/OQWVjH5546RBONPQ6oeKpOVDRDpPZhmXzHNN8X9XYiwPH23HNwpRJrQKHBiiQ97UhsNcsSpXktasQRCgUMpw6Ei0xJtjltXxZ1gIIwNIpjAfZf7wNgX6Ksw7YvWhmHAaGrThW2z2VMp2CK2BOIooi9pW34e3tGgwOW7FiYTKuuzjNaYMki6s68eKmE8hJDscPb83HsMV+xqpaQ1s/dpe14MDxdhw60YHoMH8smRWPJbPjETnWx+DhR5Bs2KGBxWrDnVflTGrVJ0kdjO+smYnn3i3Dvz8+ju/fOMutt1fORRRF7D/ejpxp4Q65pdwRq191rQaUabtx49J0+Ksm/9ZTpulGS9cAbr08EzPSo3CwvA2fHmhAXYth5LxEN9FjGMY/PyiHtsWAq+ZPw83LMiSd6afV6fGPD8phHLLgvpW5uGT21OZhCYKAZXMTkZE4siX5xzdLce3FqbjuYscMOp2qkTs7dUiOCUa6A14XVpsdr2+tRlSo/6TPR+zoGcTRmi4syovD8gXJ+M8H5ThY3orVFyW7/LXx2cEmmMw2PLJuLoICVSip7MBHe+pQ3djnsu06q82O3UdbMTs9atLvU8NmK4qrO3HRjLiz9pTOTItASKAS+4+3TXq+mLMwgDlBa/cAXvusCpWNfchIDMU9V+c69S6n8tpu/N9H5UiND8GDN82GSiGHSiE/47y4lLgQpMTl4NbLMlFS3YndZa34YE8dPtxTh5lpkbgkPwH+/kr8470y6e/QmYTKhl7sP96O1YtTJz2fCgBmZ0Tj9suz8OYXNXhvlxa3LMt0YJWuUd/Wj7aeQVyzMHnKj6U3mrCjVIdFeVNb/fpkXz0C/RS4YgoTtu2iiI1f1iImPADLC0aGFKsXpWD30RZs3KXFw7fPnfRjO1JFfQ/+9eFxWGx2fPf6vAmvxjqSKIrYXqLDW1/UICLEDz+/s8Ch52tOiwnGL+8pxPqt1fhobz2qGvvwretmSr6Fr20xoLnTiLuvmdyXsa/7vKgZuq4BPHjTrElvn2/8shZyuYBblmUgPNgPt16WieffK8Puoy24bJ7rJs/3D5qxtagJhTlqTE8eWZGNXZiMnaU6fLC7Fo+um+eSOo7UdEE/YMalU1gRL63pgtliP2P7cYxcJsPC6bHYeUSHwWGLWx3nxwDmQBarDZv2N2DzgQaoFHLcfU0OluYnOHUFpaqxF3/beAzxUUH40a354+p5UinluGhmHC6aGYfOviHsKWvFnmOt+OcH5af9Pk+6u8xqs+O1rVWIDvPH6kl+Oz3V8sIktPYM4tMDjYiPDDrrHDF3tr+8DQq5DIU5U//G9+nBRthsIlZP4c7HxvZ+lNZ0Yc2StHH35Z1NUWUHmjqM+Na1M06uGAT4KbB6UQre2q7BiYZeh807G7dTVo1Dg1XYe0SHjV/WIj4qCN+/IU/SIZAmsw2vfFaJA8fbMTtj5GDvICd8APmrFPjG6hnITYnAa1ur8MR/D+GBa2cgNT5UstX0HSU6+KvkuGjG1AcQ9/ab8OHeOszOiMKczOhJPUZdqwGHTnRg9eLUk8Ng8zOjkJ0Uhg/31mNRXtyUVoYnYsvBRpjNNqy55KuzYf2UcqxalII3P6/BifoeTE+NdHodO4+Mns05hWO39h9vQ1SoP7LOs2q3KC8Onxc3o6iqc0pbnY7GAOYgFfU9eO2zKrT3DuGiGbG47YoshDm5mbGu1YDn3i1DVJg/Hr5tzqTeWNXhAbhhaTrWLEnDjiM6rN9afdq/N1lseP6do8hMDEOiOghJ6mAkRAed/g3QDbYttx5uQmv3IH5w82yoJvnt9FSCIGDd8ix09A7ilS2VUIf7IydZut6dibDaRu4ImpMZNeVve30OXP0K8JNjeeHkv+WPNI/XIkkdhAVf+1C9bF4iPjvchI1favHzOwtcd3fh1+buyQTALgILpsfg3hW5LvtAPbWesZ9Fs9WGVzafQIuDD/Y+n4tnxSM9IRT//PA4/rLh6Mkmb1evphuHLDhc2YFL8uMd8nfw9vYa2Gwi1i3PmtRrSxRFvLNDg+AAJVacsiotCAJuuSwTT71WjM8ONWHNkskfbD9eeqMJXxQ3Y+HM2DOOS1o2JwFbDjZi4+5a/Dwlwqk/R+29I2dzXj+Fszn1o+eYrrwo5byv7dS4EMRFBmJfeRsDmDcxDJjx9vYa7D/ejpiIADx82xzMTHP+N4fmDiP+/PYRBAco8fBtc6Z8B5LJYkN5bc8Zvy4TBFisduwo1Z0890wAoI4IQJI6GEnqIEAmw6f76mCxuf6NFhg5vPyjvXWYmxU96W+nZ6OQy/C96/Pw1GvF+NvGY/jhbXOgVMjdvjeuor4X/YMWh8z++vTAyOrXVOZ+6TqNKKrqxOrFqVNafdl7rA3tvUN48Cx9eUqFHNdenIpXt1ThqLbboa+D8xmbpTR2O79dBBQyAWuvzJYkfJ0aBgHAXyXHj27LR16acw72Ppv4qCD84JbZeOyf+0/eYefq1fQ9Za2w2uy4bM7Um+8r6ntw6EQH1ixJQ8wkv4Qcq+1BZWMf1i3POmMFOCMxDAU5amw52IhlcxOd/sV90+gsvzUXnxn2lAo5rl2cilc/q8Kx2p6zNrU7ypdHWiAThCn1Ih480QFRHGm0Px9BELBoZize312HLv2Q2xzzxwA2EV/bajha3YF3d2gxbLZh9eJUrF6U4pDVlwtp6xnEH98+AqVChp+snftVA/0k6TqN+Nv75ejsHcKyeUnYVzYyof/UMGW3iejoG0JzhxG6rgE0dxrR3DmA0prO0+aOSbFt+ebnNQCAtcuzHP7Ygf5K/ODm2XjypcN46pUiAO4/eX3/8TYE+Sswa4pvnn1GE3Ye0WFxXtykP3gA4JP9DfBTyXHV/GmTfgyL1Y6P9tYhLT4Uc7LOHq6WzIrHlgONeP/LWpedv3e2WUpWuwj9oAVhLj7gfexos1NHHNjtIpIlmGk3OGyD3X76D4erZkzZRRE7j+iQmRQ25d7bsbtY1eH+p61cTageu4h3d2oQEx6AZefodbrp0gyUVnfho711uOuqnKmUfF49hmHsLG3B4lnnPsliyex4bD7QgPd312JWeqRTVsEsVjt2l7ViTlb0lHoF9x9vQ0psyLgOPl84Mw7v767DwYp2tznxhAFsvL5+cPboBPvsaeG4++ocJLjokNou/RD++FYp7HYRj94xb9LHNow5UNGGlz+tRIBKgUfWzkFOSgSuvyTtjDsoZTIBcZGBiIsMROEpf764uhN/33jstMd05TC/I5oulNZ04eZlGU77ViOTyWA+5UPWZLHhT2+UYOXiFGQmhGFaTDDCg1VnvlFJsDU7ZLKitLoTF8+Kn/JdVWOrX6sXT76nrrV7AIcq2nHNRclTmsO084gOPQYT7l85/ZwfCAq5DNdfkoZ/f1yBosoOLJjumMPHz2dg2HLWX7dP9hzXKegxmM44KcNstUsyWNMwaD7j1wQAZ0yJdoIT9b3o6B1yyHbettHWhoem0Nqwr7wNzZ0D+M6amef8mYyLDMSlcxKwq7QFVxZOm9JNROfzyf4GiKKI686zoq2Qy3Dtxal4aXMlSmu6nHLnYEl1J4xDFiybO/nVr5auATS09eP2y8d3k1RMeAAyk8Kwr7wNKy9KkXQI8hgGsHH6+rdLUQQUcgHfvSHPZd90+4wm/PGtIxg22fDourlTCn1Wmx1vb9fgi+JmZCWF4bvX5400hn79CJLzvF82tvfjtS1VZ6/VMIxkJ4dSk8WGN7ZVIz4qcEqrK+disdqx64gOH+6pw9e+zMMuivhkb/3Jfw4OUGJaTPBX/4sNhmHQir+7+I7SkupOmK32KW8/Omr1a9P+BigVMlw9f/J3Yw6brdi0rx7TUyIw4wKNwQtmxI58e/+yFgU5aoecf3kuda0G/OO9MoQEKmEy22C22qGUyyCTC/j7e2V4ZN3UvyCNl8Vqx0d7as/6774s1WHd8iyXjVPR6PT458YyhAWrMDRsPXldBAH4x3vH8MjauQ4ZjXIuO0t1CA5QTvkGlB7DMD4cbW3In+SWttliw/u7a5EaF3LBI86uW5KGfeVteG+XFt+/Ydaknu98OvuGsPtoC5bmJ1xw9tvivDhs3t+AD3bXYk5WtMNfOztLdVCH+1/w5/l8DlS0QRBwRj/o+SyaGYfXPqtCY7vRoXcCTxYD2DiV1px5DqPV5rqthv5BM/701hHojWb85PY5Fzzf8Hx6DMP454fl0OomP5/oRH0P/rrxGAL8FLhv9Qy88VkVTBYbVAoZAv2V+MfGY/ju9XmTfuMaj037G9ClH8aja+c6dIaO3S7iQEUbPthdhy79MDKTwtDQ2n/a5HU/pRxPfGMB9IZhNHUYT/7v1F65U7lqa/bA8Taow/2RkTi1bafNBxqmvPrV3juIA8fbsbwwaUo9ip8XNcMwaMGDS9Mv+HtlgoAblqbjr+8dw95jzmu41er0+POGIwjyV+LRdXOhUilOrhr3GobxxzdL8cz6Ejyydq7TVjPGDA5b8beNZahs7MOyeUnYf6z15M/ijLQobC9uxtCwFfetzHX6rKmqxl785d0yhAep8Mi6uVAo5CevS2fvIP789lE8vb4Ej6yb65Rw2ttvQmlNF65aMG3C54x+3Vtf1EAUgbVXTL614YviZvT2m/DA6hkXDDFhQSpcvWAaPtpbD61OjwwHn7P58d56CIIwrruZ5TIZ1ixxzmpya/cAqpr6cPOyjEkHO7so4sDxdsxIjTx5R+l4zM+NwRvbqke2LhnA3N/AsAUbtmuwu6z1rP/+vR0a3HtNrlNn3gwOW/HnDUfR3juEH90ye0o/mCcaevGvD8thtk5+PtGhE+144ZMKxEYE4ke35iMyzB/5GVEn32ghinh2w1H89b1juGdFzpQHPp5Na/cAthxswKKZsQ6bLC6KIo5ourBxVy10XQNIiQ3B3dfkYGZaJCqbDCe3n8dWs+IiAhAXHnDa3ZE2ux0Nbf14d1ctKr82GdxksaGtdxChAc45wLhbP4SKhl5cuzh1SsvrfUYTdh0Z6ROZ6uqXTCZMaRbZwLAFnx5sxJzM6HG/7udkRiM9IRQf7a3DopmxU/4g/rrqpj48+85RhAWq8Oi6r3owx4J1aIASj66bhz++NRLCfrJ27rh6VCajz2jCsxuOoqVrAN9cPQOLZsWd1kIQEqDAJ3vr8f7uOvQPmfG96/OcdnNARX0Pnn+vDFGh/vjJ7XNPvid+dV3C8OjauSevy6Nr507pTNGz2X20BXZRxLJJnjM6pryuG0VVnbjhkrRJnRQAjNyJuWl/A2alR417NMrVC0Zmcb2zQ4Of3jHPYdtkLZ1G7CtvwxUFSeP+rFowPRab9jfgwz11KMyJcdhw3Z2lLZDLBCyZwtmcmmY9uvTD4zrr91TBAUrMzojCwYp23HpZpuQDgyUZy/zxxx9j5cqVuOqqq7B+/XopSrggURRx6EQ7fvGfg9h7rA0rLkrGD2+be3L8gkohw6VzE1HZ0IvHXziAHSXNTjnaxzR6LE5zhxHfvyFv0rNZRFHE5gMN+ONbpQgOUOKXdxdOKnx9UdyM//vwONLiQ/HYnfNGPny+dpxSaKAKj66di+kp4XhpcyU27a+H6MBrI4oi1m+rhlIhx62XO6bxvqqxF797vRh/fe8YrKPDM395byHy0qIgQMD05DA8873F+PUDC/HM9xafdSvRZLZhy8FGPLvhKCobes/67e75t49i0/56pxxz9GWpblx3BF3IV6tfqZN+jK6+Iewvb8OlcxIm9A3167YcbMSwyYobxrH6NUYQBNy4NB09BhN2lrZM+rnP5kR9D/684Qgigv3w0zvmnfMGmGkxwSeHWf7hjRI0dRgdWgcwcjPO714rRkfvEB66eTYW5cWd8bMoQMC1F6fh3hW5OF7Xg/99s/Ss/VlTVV7bjefeLYM6PACPrpt3zg/5lLgQPLJ2LixWO55eX4KWrgGH1WCz27HraAtmpkVO6YuDxWrH+q3ViIkIwDULJ78CvGl/PYZMVty8LGPcfybAT4HrlqShulmPoxrHHZ3z5tYqKBQCVk5gRqJMJmDNkjS0dg/iQEWbQ+owW2zYV96KednqKa2KHzjeBpVSNqn+tEUz46AfMLvF0VkuXwFrb2/Hs88+i40bN0KlUuH222/HwoULkZkp8bTx0YbpNk0nTGYrPtilxVFNN1LiQvCjW/JHlivPcnD2igXT8MqWKry2tRr7K9pxz4pchASqptZ4PVpLZ98w3t1RA41Oj++smcR23th/U88gNu2rxzFtN+bnxuC+lROYTzT6GL39Juw71opth5swNysa375u5nmbUgP8FHjolnz8d9MJvLerFn1GM1ZdnIo2TScC/RRTui57ylpRUd+LO6/Kntwt26c0xxuHLNhyoB7ltT0ID1bhnmtyzt7A/vXeOACGoZHHCA5QoriyHZv2N8AwYMbsjCjcsDQdg2b7aatmty3PxpHqDry3qxbbipqxelEKLp2biCGzzSGvl0/31yM5NgRxUYGT6zMTcHIbdf6MGMREBEy6lrd3agEBWHHRJFe/BEDXOYCth5swN0eNabHBE6plRmokpqdE4ON99UhNDENsZODkb4IY/W/avaMGr39aiZiIAPxk7dwLvvYSo4Pw0zvm4X/fLMUf3ijBd26YhZBA1dRuyBit5XhdD97YVg2ZADy6bu4Fj2Bamp+AkEAl/vXhcfz+tWJ8a00e5HKZQ2o5WNGODdtrkBgdhIdvm4OQC7RkJMeG4Kfr5uJ/3zqCZ94owXdvmIU2/fDk3xdGa9lf0Y7efhNuuDRjpON/kq/dj/bUjew23Jo/ucObhZGTKD4vakbh9NgJv3aX5idg2+EmbNihQVioP6LC/Kd0Xaqa+rCrpBmXFSQhLFg1oceZl6NGcmww3t9dh3h1MKLCAqZUy5fHWjEwbMWCmXGT/jvqMZhwoKIdszKi4e838VryM6MQ4KfAl2UtCAn2k3SskCA6cmliHN5//30cPnwYv/vd7wAAf//73yGKIv7f//t/4/rz3d3GM25vnrLROxxPbbJXymW44dJ0XFmYdMFGXlEUsfdYG97eXoMhsw0CMPnhg2epZcVFKbjlsoyJvUBGH+cvb5ee7Em6rCAJd16ZBQHjXHY9Sy2zM6Px4E15kAvje2OyiyI27NBg66EmyAQBdtEx10UQgB/fPg8zU8MndV1O/W/yV8lx3ZI0XD43cXx3Op3lMQAgNzkcNy7NQGZS2MnfZxi0nHFHaU1zHzbuqkVVUx9CA1UYNFlgnewMta/9PStkAn60dt7Em/1HH+fPb5bAZhehUsjw0G1zp/R3JJMJeNgBtSgVMvxwErV8UaLD+s9GbhKZ9E0Qo7U8+1YprDY7BADfu2k2CrKjx/04HX2D+N2rJSdXnqZay1/eKj3Zj/jAtTOxOC923I9To+vDs28fxfDoCqzDrosAfP+mfMzLihr347T2DOD3r5XAOGRxSC1/fKMYogjHvHYF4OF1BZOu5U9vlMAuTv7n6IM99fho98hNFVO9Ln96oxj2KVyXT/Y1YOMurUNqccTf0dhrTimX4Ye3T/AxRh/nLxvKUKbtmtp/0yi1OgSdnf1n/XcymYCoqHOPQnH5FmRHRwfU6q+WDWNiYtDe3u7qMk4zNkzx1A9TQQAWz4of111UgiBgyex4PHZXASDijOGDhsGz36o+3lq2FzdP6DFOfZxTG8L3lbWif8g6pVoq63swMDz+7TOZIGDlolTIZcLJLVpHXBdRBP727tFJX5evz0paPCt+3LeZn+0xlHIZvn193lfhCzhjO2jshzsrKRyPrpuL716fh/4hM6y2qV+Xsb9nq12c8GOc+jhjr12z1T7lvyO7g2qxTLKWd7drTv7zZK7t2OM89/bIGz4w8lf4wkfHJ/Q4/n5KDJu/+rmbai2n3gzy2pbKCT1ObGTQyevqiFpOXhcR+M+H5RN6nKAA1RnjXaZSy9hSgkNeu+L/b+++46K4tjiA/5ZlWUAElaqIGnvBgrEngg0sgBBRQRQivFgSg70AgqiIIAoIirHEksTeX2yA+qJGJaiJYIldQQGlKB3cOu8PZCOiYZYdmp7v5+Pnk4Xs8czZy3CcufcOVMql7FxX1Vxi4pMVr1Wti1zFuhy/9ISzXLj4jMrGnESmfIyyOHeS/9l0vKrHxIUavwUpl8vLTSxkGEapiYb/1k1W1YuHWRU2UxRL5SiWyNCmBfs5Vy/yXleYByaSyJSK875clI3BVRzO6vIwq9xJn6tcuKqLssf0vhgSmRwlUjnaGrJfWWOWL6qwLVJdqgvlUhrn3dXPVclF1Rhc5vLuKl2qC42X+pILV5+RRKb6Mb3NUInz/ttqvAEzMTHBtWvXFK+zsrJgZMR+Mnh13ILUFqpDKOCX+3CFAj60BXxkZRUgIiIUY8aMR8uWrVjFKch5AXVNXaipCyHNS0HM0WdIN++Cnj17/ev7382lOPshXueloXGzTtAW8PH0aSbU1NQgFFY+qbksTlFhLooy70H6Oh8CdXUkXWXQWPgFhMLK9+Epi/H8zhk0ajUAaupCRV1u3rwPsViMFi0qn9RZFic34yH4Ql1oNNBXxLl48So6dOioVF1EBS8AhoGufnMUvMxEuhYfAgG7rR0q+6xjYk5gxAhb1jGkokIUZ90HI87HiUPJuGHaDH369EOjRo2UyuXpxXXQbf45jNsNVOSi7PFUV118ff2VGv9c5ZL/Kg1gGAh1m4InzoMA8lqrC+VS93PhauxWNQbl8unk8rZ6dQtywIABiI+Px6tXr1BSUoK4uDhYWlrWdBrl6GqpY+b4HooVjmX3hHW1S08AXbt2R3j4KlZxujZKQVrCZkhFhShK/xN5dw4iPS0ZK1YE4ODBvaxzKXyWgIwbByErykTe7T24fCEOo0fbwM5uGM6f/41VnJHd+Eg5H4bc5MvIefg/mOrk49fDezF+vCMePXrIKsbM8T2QfS8WKRciwJPkK+ry5MljzJw5HbGxJ1nF6d7kGV5c3w2ZqEBR3wZCNfj5LcKhQ/tY51LyIgnPLm+ErCgDM8f3wJYfwjF8+CBMn+6JdesiWMUZ/bkW1Jny83HKPut9+ypflVuWi/jVA6RciEBxxk10MlVHzqtMnDkTCze38bh8+SLrOEIBH3KZBJKCdDTIjoGGGvtbvFzW5UM/A8qMf65y6Wv6EqmXN0KU/xxCAR8aWWcwztFa6eOhXD6NXLgau6rEoFw+nVy4UuOT8IHSbSg2bdoEiUSCsWPHYsqUKazfWy2T8AHFhOnVoYHg83jQeGf1y2+/ncWgQUOwePHSfw0zadI4rIncAjEjwJIFU7FqVRiMjUyQnZ2NmTOnYffuQ6xymTBhLHyXr0VLU2MU5WVhoutYbNy4DTo6DeHjMx8//bSn0jBTp07Gt17zod/0M2SmPsKZmP/C29sfCQnx2LlzB9at28Qql6+/doVF7y/xV8Lv2LxlOzTfXD3LyXmFOXO+x44duysN4+7ujODV0eBr6UBbwEfSn5cw8MtBKC4uxrRpk/HLL/tZ5TJx4njM9Q1Gu89aQFdbgOQnT7B58wa4urojIMAHhw4drzSMy4QxyM7KgrGJKQYNGYbxY8dCT7cRAMDTcyK2bWOxNQoPcHebAK8Fy9Ch7WeKCfYAkJaWCl/fBaw+o7Jx9900d2zY9DMunYvFkSMH4e+/HGZmLFcQvqmLd0AoWjY3rXJdwAOWLQ94s4knv9zPANvxz9Vn5O7uDP/lqyHU0UejBhp4lZmKzZuUPx4uc2nYxAjaAn6dyKUu1YWLXOrK2FU5Rh3NRSpjwFfj1Ylc6lJdVI4D1a6A1cpGrPb29rC3t6+Nv/rD3kyY7vt5NxQWvq7w7dat2e3lwjAMTPQbASh9sryxUemeTAYGBtDUZPn4DQbQFGqga9vmAABdrWbQ02uE9u1Lb9XxWe5m/fp1CSy6mgMAWhh0w8b1awAAffv2x6ZN61nnosYDZs/4Dsuy07EiMAArVpT+C6Fx4yasN7JTV1eHqbGBYrCuClmBPof6Q1tbG2psHxfDlK5c/rxzG8XrVq0+Q1raM5ibd4WeHruNOvfuOQyZTIZbt27gxIlf4eI8Bs7Orpg0aTK7PN783XK5DL27tle8LmNq2hxSKbsJnS+ev9ngVy5DUW4WLCw+h66uHhYsmIXvvpsFS8tBrHLhARgyoGvpiaCKdQEDdGj3/n3V2I5/rj4juZxBu1b/NKC6Lat2PFzmUjZ260IuZT6WXOrK2FU5Rh3NRUdHs8LvNaoLB3FURDvhv8PDw4P1HIb36datB8LCVuHrrz1hazsahw7tg62tA86f/x9atmS/a6+urh7OnTsLS8vBOHx4P+RyGXbs+BHa2tpo2JDdSUlDQ4jExL/Qo0dPXLx4Hg0blk4UvHjxAvh85XcH9/UNgJfXNCxf7g8vrzm4e/cOq7lkAGBgYIhTp45j0iRnHDt2FBoaQgQHL4ehoRGaNWvOOgcjIyMcPnwAY8aMAwDs3v0L+ytFb+Hz+eje3QLdu1vgxYvniIwMw/ffT0VBAfsNM01NTbFpUzQcHMbA0LB0HmNWViaOHDmINm3YbRDr7u4ChmEgFovw9dcTyn1vxYoAxMWdZxXHyMgIu3btgo3NaABVr4uLyySl3/O+XCp+RpXPFaw8hvLHw2Uu06Z5VjnG23G++moseDzeR1MXLnKpOHaVry8XY5eLGFzF4TKXf7tKU9O51IUYXMZRBTVgHJszZyE2bIjC5Mmlv0zz8/MRHR2JAQMGYtEiP6XieHvPQ0CALz77rA02bNiKH35YB7FYhEWLFrOKMXv2fPj6LoBcLgefr4bVqyPx+PFDbNy4Dv7+gaxzKVulKhAIEBYWhVWrguDkZIfGjZsgKGg1qxhz5y6Cj888hIQEwtjYBOvWbcKJE78iPz9Pqbp4e/tj6dLF2LhxPXi80qtNwcFhAFClkzYAmJg0RXDwGhw7dlSp+/9+fsuxfn0E/vOfSSgoKD25aWtrw9p6JLy9/VnFKGuwWN/6/ABvb38EBS3BmjVhKtVFJpPh6NGD+P3388jIeAE1NTUYGRlj4MBBcHR0YnW1kovPiKvPmctcyq4aq5qLKnHKYkRFhYHP56Nly1a1XhcuPqO6Mna5iFEXc9m5cydOnYqtE7nUpbpwEUcVtTIHTBXVNgfsDVX/pfC2/Px8SKUS6OrqQV29ar1ufn4edHVZXoZ/D4lEgufP09CsWXMVcsiHrm75nbalUmmV4mloyCEWqz6ws7OzIJVKYWJS9eeJvU9OTg4aN1b+2ZIi0WvIZHJoa1ftESgvX2ZDX1+1B5cbGjbEnTuPK9TFz2+R4rZxZdatC0daWipsbUfDwMAQDMMgMzMDJ08eQ/PmZpg5c16lMUSi19i+/Ue0bt0G3br1wLVrCVBT48PcvBurVbMAUFRUiPXr16J7dwv06NFTcTxr167BlCnT0aABu+1oiouLsXPnDjg6OiEvLw+HD+/H7ds30aFDJ3h5za0wrt+n9ER9CFeuXMKVK1fQrJkpjIyMYWk5GA4OY1ifqF1dnTBjxmx06NBR8RldvZqAxMS/4O7uyWp1cxlLyz4wMjLGxo3bYGCg/ONY8vPzsG5dBG7evIEuXcyxePFSnDx5DHw+H8OHj1Lql8/bP4vZ2dkwMFBuHMvlcpw5cxzbtm1HRsYLmJqawcysBUaMGAUrqyGs43AxdrmIURdzycp6AWvrUXUil7pUFy7i1Ls5YJ8KNif3ymNUvfkCSq9atWjRSsUcKh5HVZs5PT09ThrcqvzSYaMqzRcA1rdiP0TV5is8fBU6dmyHdu26oF27DuW+l5b2jHWcK1f+wI4de8rdou7c2RxWVkMwadI4VjEiIlYjLy8P1tYjYGLSFA8fPsS1awmQy+XIy8vFiRNnK40RGroSOjo66NWrr+IXetmV3ODgQNYNZWDgEhgZGUFTUwvbt28BwzCYO3cRYmNPIiwsGMuWBVcaIzp6LdLSUuHq6orJk6eWO1E/fZqCWbPYnagLCgoQEhKIWbPmYdiw4QCApk2bIS7uFMLCQuDrG8AqDgC0bdsO338/BwsWzIKX11xWW9y8LTw8FDo6DbFo0WKcOPErFiyYjcLCAmhqauH27ZuYP9+Hday3fxbXrg3FF19YYuRIO9bv//nnbUhK+hPjxk3AhQu/oVevPmjcuAm2bNmIly9fKm5xVoaLsctFjLqYy4kTx/HqVXGdyKUu1YWLOKqolYdxE0K4ZWBgiIcPH8LPbxEmTBiDI0cOQiot3X1dmY2OpVIpiouLK3y9sLAQsnc2L/yQW7duIigoFG3alD7f9dtvvaCn1wi7dx+CsTG7B4U/efIICxb4KpqvwEB/qKmpwctrLp4+TWZ3MChtPufMWQhdXV1FY9GjR08sWuSHBw/us4px9WoCVq5cg2HDhqFTpy7o3NkcgwYNxapVEbhyJZ51LoaGhlizJgoREaG4e/cOAKB5czMsXrwUd+/+zToOULrYp2fPXggLW4efftqGXbt+Uur9Dx7cw/z53rCw+Bw+Pkvw99+3EBX1AyIjNyAx8bpSsd42fboXtm3bgowM9g9vPnMmDlu3boWT03iEhIQjMfE67OwcsHHjNhw//l/WcbgYu1zEqIu5FBVVfOg51YWbOKqgK2CEfATc3T0Vl8KTkq5jx44fcejQfvj5LYUyswwcHZ3w7beeGDrUBgYGhuDxSh8fdvZsHFxcJrKKIZNJIZGIFVcFpVIJCgvZL24ASptGsVgMDQ0NvH79GufO/Q8eHlMVtwqU8erVSzRpog99fQOIxWKoq6tDKpVCS4vd7eJ/TtSNyn1d2RM1wzDo0KEj5s5dhMWLFyA6egtMTJoqdTzbtm0GUHpMZf/drVt37N27C7dv38LKlezmZPL5fMU0ApHoNeRyGWQyOWQyGdj265aWfSrkXtbsT5/uiSNHKt8jEAAYRg4NDQ0AYggEArx8WfqMPh0dHYjFYnbJgJuxy0WMupiLi4sLBg0aVidyqUt14SKOKmgO2Du4nANGKqL6Vp93a3vx4nlERoahoCAfMTHnWMdJSkrEhQu/ISsrE3K5DIaGxhg+fCQ6duzM6v1btvyAGzcS4eQ0HjweD3v37kLfvv0xefI3rBcbbN26CXfv/o0hQ6xx+nQs9PT0cP36nxAIBHB0dMLEiV+zyuX06Rhs2fID7O0dwePxcPVqAqyshiA+/iL69RsAJyfnSmPs27cLx44dhb29HbS19cqdqMeNmwBHRydWubx97Dt37sDBg/swfvwE3L9/D5qamqwWbqxdW9pgnT17GkOHWlf4/uzZC1jlEhkZhszMF/jySyucOnUcurp6SE19BoFAHRYWn+O772ZVGiM/P+9fv892+sSyZX5o3FgXvXsPQGzsKejp6cHDYyrWrAmGUKih1IKhpKTruHDhXJXHbmkM1cY/l3G4OB4ASEm5h19/PVkncuGmLnXnM1JlDhg1YO+gBqF6UX2rz/tqm52dhbCwEMWqMraeP09HdnZW6f5tpmZKz2c8fvy/OHs2DlKpFJaWg+HkNB5qamo4fToG1tYjWMXYv38P/vrrKtq37wgPjyl4+jQFhYWF6NLFXKlc7t69g9OnY5CW9gwSiRT6+voYPHgo+vf/knWMpKTruHbtMlJSUqt8oo6ICMWcOQsVr+PjL+G3387A2NgEbm4eb64CsbNqVRDr1dDvI5VKsXv3z7h9+yZ69uwFZ+eJuHz5IsRiEQYNGlrluFVRXFyMX37Zgr/+SoS5eVdMnfodCgoKERt7As7OE6s837SqCgsLkZr6DK1bt1HqM3lXSUkJGEYObe0Giq9VZfFSVFQYRoywVewDWRX6+g2QkpIBHR3un6WcnPwErVqx32IJKN2uJyPjBXg8NRgbGys1p/fWrZswN+9a7msSiYT1o6s+pLi4CE+fPoWZmRnrRT4ANWCcogahelF9qw8Xtc3MzICv7wLcv38XDMOgadNmePkyG7169cHixcs4WVhSX9HYrT7VVdujRw9hyBBr1uP2+vU/4eu7ADo6OhAKhVi2LBgREaHg8XiYN8+bdaORlHQd3t7z4OOzRLGZskwmw1dfjcLSpUFKLZpwdXWCtnYDODiMgb29I+v3lbl37y58fefB0XEs3Nw84Oe3ELm5uejatTvMzbvhiy8GKh3zbR4erti+vfKnoQClTwlZutQXz549e9N0McjOzoKZWUsEBKxA8+ZmlcawtOwDS8vBCAhYoWi6Tpz4Fdu2bcaKFavQqVMXVrkkJV3H0qWLsXp1JF6/LoGPz3xoamqhsLAAQUGhrD+jevUsSEJI3RUWFoJRo+wRG3ses2cvgK3taJw8+T+0bt1WcfuLkPoiNzcHmzdHs/7/N2yIxOrVkThw4FfMmDEbs2ZNx8CBVhg50g6hoUGs46xfH4HVq9cqmq+cnFfg8/kID1+PDRuilDoGTU1NREdvwc2bSQgJCVRqXhxQeuXV398fbm4eAABr65EQCATQ1m6AoKClrGJYW1vCw8MVkZFhuHkzqdz3lFnkExISCBcXN8TE/IadO/dj584DiIk5BxeXiQgJYXer2cysBcRicbncbW1HY/HipYiKCmedS2TkGgQHh6Ft23bYtCkaS5YE4sCB/yIoKBTr169lHUcV1IARQhTS09MwZsw4aGlpwclpPP744zKEQiGmTZuB5OTHtZ0eIR906tTxCn+aNNFHXFwM69WUYrFEcXurf/8voKEhhLPzRIwaZY+Skoor5j5EJpPB3Lyb4rWn5yQwDIO2bdspViezxTAMhEIhfH0DYG7eFbNmfYv09DTW7y8uLoK19T/zBa2sBiMnJwdubpNhYsJuVfKePYcwd+4i6OnpIShoKaZN80BSkvKrZfPyct87d3HoUBvk5uayiqGhoYHAwGCkpDzBL7/sUHy9Z89eeP26hHUuUqkUHTt2AgAUFhagd+++ijhyOa2CJITUMIb5Z9VgWlqq4pmWWVmZSv/Lm5CadO7c+/eXs7Doid9/Pwc7O4dKY/D5fKSlpcLUtDlu376F3NwcJCb+hQYNGoDHY3+9QiDQwOPHj9C6dRvcv38XeXl5OHhwH0xNm7N+JvC4cQ4ou0U3btzoN1/lIS8vF998446TJyvfTw8o3bPx77//hqFh6e29GzcSlZ4LZmBgCAMDQ3Tt2h2TJ3+D06djsGJFAKyshkAmk7GOIxQKkZAQj759+5f7+h9/XFZqE2uhUBMhIeGYNs0Durq6cHAY82YiPfvpSfr6Bjh7Ng5Dh9qge/eeuHPnNjp16oKnT5PZP4NURdSAEUIUnJ1d8c037ujSpStu3EjEzJlzkZr6DFOnTma94SghtWHVqgiVY3h6TsW33/4HLVu2wpMnj7F06UoEBPhAJBJh+fIQ1nGmT/8ec+bMQIsWLfHw4QMsX74Su3b9jLy8XPj7L2cVY8WKVeDxSleJLlmyoqqHhJkz52HKlClo374TeDzg1q0bWLlyTZXjAYC19Qh88YUlwsKC8fjxI9bvW7jQD/7+iyCTyWFgYAAej4esrExoaWmx3ly57JansbEJwsPXYeHCOTh4cC9yc3Ph5TVHiVwWw8dnPn78cSNatGgJL69p+Oyz1igqKlLqs1YFTcJ/B020rV5U3+rDVW3v3r2Du3f/RufOXdC+fUeIRCIUFORX29MH6gsau9WnLtU2PT0NDx7cQ+fO5jA0NFLcjlL22YDZ2Vm4ffsW2rRpy2py+YdcuvS7yhPlBQIZTpw4DZlMit69+yp+lktKSqClpaVS7AsXzinmurH16NFDZGZmQC6Xw8jIqMLTO/7N1at/oHfvforXYrEYt2/fhJGRMUxNmyuVR1kuqanPIJVKoK9vAHPzbkqtVKVVkByqSyeCjxHVt/pQbasX1bf6UG2rF9W3+tAqSEIIIYSQeoQaMEIIIYSQGkYNGCGEEEJIDat3qyDV1Nhv+laX/45PGdW3+lBtqxfVt/pQbasX1bf6fKi2ldW83k3CJ4QQQgip7+gWJCGEEEJIDaMGjBBCCCGkhlEDRgghhBBSw6gBI4QQQgipYdSAEUIIIYTUMGrACCGEEEJqGDVghBBCCCE1jBowQgghhJAaRg0YIYQQQkgNowaMEEIIIaSGUQP2lmPHjmHUqFGwsbHBrl27ajudj4qbmxtsbW3h4OAABwcHJCUl1XZK9V5hYSHs7OyQmpoKALh8+TLs7e1hY2ODiIiIWs6u/nu3vj4+PrCxsVGM4dOnT9dyhvXT+vXrYWtrC1tbW4SGhgKgscul99WXxi43IiMjMWrUKNja2mL79u0AVBy7DGEYhmFevHjBDB48mMnJyWGKiooYe3t75sGDB7Wd1kdBLpczX375JSORSGo7lY9GYmIiY2dnx3Tp0oV59uwZU1JSwlhZWTFPnz5lJBIJ4+npyZw7d66206y33q0vwzCMnZ0dk5GRUcuZ1W+XLl1inJ2dGZFIxIjFYsbd3Z05duwYjV2OvK++cXFxNHY5kJCQwLi4uDASiYQpKSlhBg8ezNy5c0elsUtXwN64fPky+vXrh0aNGkFbWxvDhw9HTExMbaf1UXj8+DEAwNPTE6NHj8bOnTtrOaP6b//+/QgICICRkREA4MaNG2jZsiXMzMygrq4Oe3t7Gr8qeLe+JSUlSE9Ph6+vL+zt7REVFQW5XF7LWdY/hoaG8Pb2hoaGBgQCAdq0aYPk5GQauxx5X33T09Np7HKgT58++Pnnn6Guro6XL19CJpMhPz9fpbFLDdgbmZmZMDQ0VLw2MjJCRkZGLWb08cjPz0f//v0RHR2NHTt2YO/evbh06VJtp1WvBQUFoVevXorXNH659W59s7Oz0a9fP6xcuRL79+/HtWvXcPDgwVrMsH5q164devToAQBITk7GqVOnwOPxaOxy5H31HThwII1djggEAkRFRcHW1hb9+/dX+bxLDdgbcrkcPB5P8ZphmHKvSdVZWFggNDQUDRs2RJMmTTB27FicP3++ttP6qND4rV5mZmaIjo6GkZERtLS04ObmRmNYBQ8ePICnpycWLlwIMzMzGrsce7u+rVu3prHLoZkzZyI+Ph7Pnz9HcnKySmOXGrA3TExMkJWVpXidlZWluP1AVHPt2jXEx8crXjMMA3V19VrM6OND47d63bt3D7GxsYrXNIar7s8//8TkyZMxb948fPXVVzR2OfZufWnscuPRo0e4c+cOAEBLSws2NjZISEhQaexSA/bGgAEDEB8fj1evXqGkpARxcXGwtLSs7bQ+CgUFBQgNDYVIJEJhYSGOHDkCa2vr2k7ro9K9e3c8efIEKSkpkMlkOH78OI1fDjEMg5UrVyIvLw8SiQT79u2jMVwFz58/x4wZM7BmzRrY2toCoLHLpffVl8YuN1JTU+Hn5wexWAyxWIyzZ8/CxcVFpbFLbfAbxsbGmDNnDtzd3SGRSDB27Fh069atttP6KAwePBhJSUlwdHSEXC6Hq6srLCwsajutj4pQKERISAi8vLwgEolgZWWFESNG1HZaH42OHTti6tSpmDBhAqRSKWxsbGBnZ1fbadU7W7duhUgkQkhIiOJrLi4uNHY58qH60thVnZWVFW7cuAFHR0fw+XzY2NjA1tYWTZo0qfLY5TEMw1RjzoQQQggh5B10C5IQQgghpIZRA0YIIYQQUsOoASOEEEIIqWHUgBFCCCGE1DBqwAghhBBCahg1YIQQQgghNYwaMEIIIYSQGkYNGCHkk3TkyBEMGzYMRUVFKC4uxsiRI3H06NHaTosQ8omgjVgJIZ+sefPmoWHDhhCLxeDz+QgMDKztlAghnwhqwAghn6zCwkI4ODhAU1MThw8fhlAorO2UCCGfCLoFSQj5ZL18+RIikQj5+fnIzMys7XQIIZ8QugJGCPkkSSQSuLi4wMXFBXK5HAcOHMCePXsgEAhqOzVCyCeAroARQj5J4eHhMDAwwLhx4+Ds7IzGjRsjIiKittMihHwi6AoYIYQQQkgNoytghBBCCCE1jBowQgghhJAaRg0YIYQQQkgNowaMEEIIIaSGUQNGCCGEEFLDqAEjhBBCCKlh1IARQgghhNSw/wOg2S4aZQcqBAAAAABJRU5ErkJggg==\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# données : \n",
"# - clustering : issu de AgglomerativeClustering \n",
"# - node_position : dataframe contenant la postion des différents nœuds du clustering (voir au-dessus pour son calcul)\n",
"# - labels : le label des nœuds\n",
"\n",
"n = len(clustering.labels_)\n",
"\n",
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"\n",
"sns.scatterplot(x='x', \n",
" y='y', \n",
" data=node_position,\n",
" legend=False,\n",
" ax=ax)\n",
"\n",
"for i, sons in enumerate(fils):\n",
" u = node_position.loc[i + n] \n",
" v1 = node_position.loc[sons[0]]\n",
" v2 = node_position.loc[sons[1]]\n",
" \n",
" l = mlines.Line2D([u['x'], v1['x']] , [u['y'], v1['y']])\n",
" ax.add_line(l)\n",
" l = mlines.Line2D([u['x'], v2['x']] , [u['y'], v2['y']])\n",
" ax.add_line(l)\n",
"\n",
"\n",
"for i, row in node_position.iterrows():\n",
" if i in labels:\n",
" ax.text(row['x'], row['y'], labels.get(i, i), \n",
" horizontalalignment='center',\n",
" verticalalignment='top', \n",
" rotation=-90)\n",
" \n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On voit que les espèces sont bien conservées par les classes (de 0 à 9, de 50 à 59 et de 100 à 19)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## CAH comme une méthode de partitionnement"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On utilise cette méthode d partitionnement plutôt que la méthode des $k$-means si :\n",
"* on a des formes non ronde de classes à trouver (après une isomap par exemple) :https://scikit-learn.org/stable/modules/clustering.html\n",
"* nos données sont décrites par une distance non euclidienne\n",
"\n",
"**Attention** : on perd la notion d'inertie, il est donc impossible de déterminer *a priori* si une partition est meilleure qu'une autre. Il faut se créer sa propre *fonction objectif* pour déterminer la meilleure partition."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On peut utiliser notre méthode hiérarchique pour trouver une partition de de façon différente :\n",
"- on arrète l'algorithme lorqu'il n'y a plus que $k$ classes (si on veut tout l'arbre on vueut qu'il ne reste plus qu'une seule classe)\n",
"- on fixe une hauter et on coupe la hiérarchie à cette hauteur.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### nombre de classe fixé"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sklearn` permet de faire ça grace au paramètre `n_clusters`\n",
"\n",
"Si on fixe le nombre de classes à 4, on arête l'algorithme de la CAH lorsqu'il ne reste que 4 classes (ce sera les classes d'index 54, 42, 48 et 55 de notre arbre complet)."
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"clustering = AgglomerativeClustering(n_clusters=4).fit(iris)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On retrouve les classes dans l'attribut `labels_` :"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 3, 2, 3, 2, 3, 2, 0, 0,\n",
" 0, 0, 0, 0, 2, 0, 0, 0])"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clustering.labels_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il y en a bien 4. On peut maintenant regarder leurs adéquation aux espèces d'iris : "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"clustering.labels_[:10]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"clustering.labels_[10:20]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"clustering.labels_[20:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### coupe à une hauter donnée\n",
"\n",
"On commence par créer tout l'arbre, puis on regarde les hauteurs d'aggrégation.\n",
"\n",
"Une fois la hauteur de coupe déterminée (juste avant la montée exponentielle si elle existe), on ré-exécute la classification avec ce paramètre. Ceci nous donnera les classes conservées."
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"clustering = AgglomerativeClustering(n_clusters=None, distance_threshold=0).fit(iris)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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qrog5TiOAoFA7rHrusc8RmF85jOf0aOPPqqmpiZNmzZNN998s1577TW/y6pqfLZLY86cOfre976njo4OxeNx3XrrrXy2C2jnzp264447dN9992nOnDl8povk6D6fc845fKaLqOqCVGdnp/r6+nKP+/r6ckP2KJytW7fqzTffzD12XVfhcNjHiqofn+3S+OCDD/Qf//Efucd8tgvnrbfe0u23366/+Iu/0B/8wR/wmS6S4/vMZ7q4qi5IXXnllXrzzTc1MDAgwzD0yiuv6Nprr/W7rKozMjKiRx99VKZpKplM6rnnntMXvvAFv8uqakuXLlV3d7d27dol27b14osv8tkuAtd19fDDD2toaEjZbFZPP/00n+0C6O3t1de//nX97d/+rVasWCGJz3QxnKzPfKaLq+oi6YwZM3TvvffqtttuUzab1c0336yLL77Y77KqzvXXX69t27bpy1/+shzH0Ve+8hV95jOf8busqhaLxfTII4/onnvukWmauu666/TFL37R77KqzsKFC3XXXXdp7dq1sixLy5cv18qVK/0uq+I9/vjjMk1TjzzySO65W265hc90gZ2qz3ymiyfguq7rdxEAAACVqOqm9gAAAEqFIAUAAOARQQoAAMAjghQAAIBHBCkAAACPCFIAAAAeEaQAAAA8IkgBAAB49P8D3wymnSVjMS0AAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"\n",
"sns.lineplot(x=list(range(len(clustering.distances_))), \n",
" y=clustering.distances_, \n",
" legend=False,\n",
" ax=ax)\n",
"\n",
"plt.axhline(2, color=\"red\")\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On va couper à 2."
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [],
"source": [
"partition = AgglomerativeClustering(n_clusters=None,\n",
" compute_full_tree=True,\n",
" distance_threshold=2\n",
" ).fit(iris)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 2, 3, 2, 3, 2, 3, 2, 1, 4,\n",
" 1, 4, 4, 1, 2, 1, 4, 1])"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"partition.labels_"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"partition.labels_[:10]"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 3, 3, 2, 3, 2, 3, 2, 3, 2])"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"partition.labels_[10:20]"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 4, 1, 4, 4, 1, 2, 1, 4, 1])"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"partition.labels_[20:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## comme méthode d'organisation\n",
"\n",
"\n",
"Permet d'organiser une matrice en éléments similaires. On fait une hiérarchie sur les ligne et le colonne puis on réordonne la matrice avec les hirarchies obtenues. \n",
"\n",
"Seaborn le fait tout seul pour nous :\n",
"https://seaborn.pydata.org/examples/structured_heatmap.html\n",
"\n",
"Idéal pour une matrice de corrélation par exemple."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Toutes les iris\n",
"\n",
"Refaisons nos algorithmes avec toutes les iris en tentant de trouver une bonne partition."
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"