{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load the Dataset" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: ucimlrepo in c:\\users\\moni2\\anaconda3\\lib\\site-packages (0.0.3)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AreaPerimeterMajorAxisLengthMinorAxisLengthAspectRatioEccentricityConvexAreaEquivDiameterExtentSolidityRoundnessCompactnessShapeFactor1ShapeFactor2ShapeFactor3ShapeFactor4
028395610.291208.178117173.8887471.1971910.54981228715190.1410970.7639230.9888560.9580270.9133580.0073320.0031470.8342220.998724
128734638.018200.524796182.7344191.0973560.41178529172191.2727510.7839680.9849860.8870340.9538610.0069790.0035640.9098510.998430
229380624.110212.826130175.9311431.2097130.56272729690193.4109040.7781130.9895590.9478490.9087740.0072440.0030480.8258710.999066
330008645.884210.557999182.5165161.1536380.49861630724195.4670620.7826810.9766960.9039360.9283290.0070170.0032150.8617940.994199
430140620.134201.847882190.2792791.0607980.33368030417195.8965030.7730980.9908930.9848770.9705160.0066970.0036650.9419000.999166
...................................................
1360642097759.696288.721612185.9447051.5527280.76500242508231.5157990.7145740.9903310.9166030.8018650.0068580.0017490.6429880.998385
1360742101757.499281.576392190.7131361.4764390.73570242494231.5267980.7999430.9907520.9220150.8222520.0066880.0018860.6760990.998219
1360842139759.321281.539928191.1879791.4725820.73406542569231.6312610.7299320.9898990.9184240.8227300.0066810.0018880.6768840.996767
1360942147763.779283.382636190.2757311.4893260.74105542667231.6532470.7053890.9878130.9079060.8174570.0067240.0018520.6682370.995222
1361042159772.237295.142741182.2047161.6198410.78669342600231.6862230.7889620.9896480.8883800.7849970.0070010.0016400.6162210.998180
\n", "

13611 rows × 16 columns

\n", "
" ], "text/plain": [ " Area Perimeter MajorAxisLength MinorAxisLength AspectRatio \\\n", "0 28395 610.291 208.178117 173.888747 1.197191 \n", "1 28734 638.018 200.524796 182.734419 1.097356 \n", "2 29380 624.110 212.826130 175.931143 1.209713 \n", "3 30008 645.884 210.557999 182.516516 1.153638 \n", "4 30140 620.134 201.847882 190.279279 1.060798 \n", "... ... ... ... ... ... \n", "13606 42097 759.696 288.721612 185.944705 1.552728 \n", "13607 42101 757.499 281.576392 190.713136 1.476439 \n", "13608 42139 759.321 281.539928 191.187979 1.472582 \n", "13609 42147 763.779 283.382636 190.275731 1.489326 \n", "13610 42159 772.237 295.142741 182.204716 1.619841 \n", "\n", " Eccentricity ConvexArea EquivDiameter Extent Solidity Roundness \\\n", "0 0.549812 28715 190.141097 0.763923 0.988856 0.958027 \n", "1 0.411785 29172 191.272751 0.783968 0.984986 0.887034 \n", "2 0.562727 29690 193.410904 0.778113 0.989559 0.947849 \n", "3 0.498616 30724 195.467062 0.782681 0.976696 0.903936 \n", "4 0.333680 30417 195.896503 0.773098 0.990893 0.984877 \n", "... ... ... ... ... ... ... \n", "13606 0.765002 42508 231.515799 0.714574 0.990331 0.916603 \n", "13607 0.735702 42494 231.526798 0.799943 0.990752 0.922015 \n", "13608 0.734065 42569 231.631261 0.729932 0.989899 0.918424 \n", "13609 0.741055 42667 231.653247 0.705389 0.987813 0.907906 \n", "13610 0.786693 42600 231.686223 0.788962 0.989648 0.888380 \n", "\n", " Compactness ShapeFactor1 ShapeFactor2 ShapeFactor3 ShapeFactor4 \n", "0 0.913358 0.007332 0.003147 0.834222 0.998724 \n", "1 0.953861 0.006979 0.003564 0.909851 0.998430 \n", "2 0.908774 0.007244 0.003048 0.825871 0.999066 \n", "3 0.928329 0.007017 0.003215 0.861794 0.994199 \n", "4 0.970516 0.006697 0.003665 0.941900 0.999166 \n", "... ... ... ... ... ... \n", "13606 0.801865 0.006858 0.001749 0.642988 0.998385 \n", "13607 0.822252 0.006688 0.001886 0.676099 0.998219 \n", "13608 0.822730 0.006681 0.001888 0.676884 0.996767 \n", "13609 0.817457 0.006724 0.001852 0.668237 0.995222 \n", "13610 0.784997 0.007001 0.001640 0.616221 0.998180 \n", "\n", "[13611 rows x 16 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "!pip install ucimlrepo\n", "\n", "from ucimlrepo import fetch_ucirepo \n", " \n", "# Fetch dataset \n", "dry_bean_dataset = fetch_ucirepo(id=602) \n", " \n", "# Load data (as pandas dataframes) \n", "X = dry_bean_dataset.data.features \n", "y = dry_bean_dataset.data.targets \n", "\n", "X" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Class
0SEKER
1SEKER
2SEKER
3SEKER
4SEKER
......
13606DERMASON
13607DERMASON
13608DERMASON
13609DERMASON
13610DERMASON
\n", "

13611 rows × 1 columns

\n", "
" ], "text/plain": [ " Class\n", "0 SEKER\n", "1 SEKER\n", "2 SEKER\n", "3 SEKER\n", "4 SEKER\n", "... ...\n", "13606 DERMASON\n", "13607 DERMASON\n", "13608 DERMASON\n", "13609 DERMASON\n", "13610 DERMASON\n", "\n", "[13611 rows x 1 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Pre-processing" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5, 5, 5, ..., 3, 3, 3])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.preprocessing import LabelEncoder\n", "\n", "y = np.ravel(y)\n", "# Convert string labels to integer labels\n", "\n", "label_encoder = LabelEncoder()\n", "y_encoded = label_encoder.fit_transform(y)\n", "y_encoded" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mapping of Encoded Labels to Original Labels:\n", "BARBUNYA -> 0\n", "BOMBAY -> 1\n", "CALI -> 2\n", "DERMASON -> 3\n", "HOROZ -> 4\n", "SEKER -> 5\n", "SIRA -> 6\n" ] } ], "source": [ "# Print the mapping of encoded integer labels to original string labels\n", "\n", "print(\"Mapping of Encoded Labels to Original Labels:\")\n", "for encoded_label, original_label in zip(label_encoder.classes_, label_encoder.transform(label_encoder.classes_)):\n", " print(f\"{encoded_label} -> {original_label}\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['BARBUNYA', 'BOMBAY', 'CALI', 'DERMASON', 'HOROZ', 'SEKER', 'SIRA']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beans_names = list(label_encoder.classes_)\n", "beans_names" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training data size: (10133, 16) (10133,)\n", "Calibration data size: (3378, 16) (3378,)\n", "Test data size: (100, 16) (100,)\n" ] } ], "source": [ "# Split data into training, calibration and test sets\n", "\n", "from sklearn.model_selection import train_test_split\n", "\n", "X_train_cal, X_test, y_train_cal, y_test = train_test_split(X, y_encoded, test_size=100, random_state=11)\n", "X_train, X_cal, y_train, y_cal = train_test_split(X_train_cal, y_train_cal, test_size=0.25, random_state=11)\n", "\n", "print(\"Training data size:\", X_train.shape, y_train.shape)\n", "print(\"Calibration data size:\", X_cal.shape, y_cal.shape)\n", "print(\"Test data size:\", X_test.shape, y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Training" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.7575488454706927\n" ] } ], "source": [ "from sklearn.naive_bayes import GaussianNB\n", "from sklearn import metrics\n", "\n", "model = GaussianNB().fit(X_train, y_train)\n", "\n", "# Check accuracy on the calibration set\n", "\n", "y_pred = model.predict(X_cal) \n", "accuracy = metrics.accuracy_score(y_cal, y_pred)\n", "print('Accuracy:', accuracy)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Probabilities for a sample data point:\n", " [1.62253849e-01 1.39224885e-30 8.37746148e-01 1.82113281e-75\n", " 2.45849531e-09 1.74009195e-53 7.48056991e-41]\n", "\n", "True Class of the sample data: 5\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHFCAYAAAAOmtghAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJqUlEQVR4nO3de1yUZf7/8ffEWRQUBURFIMtE8QibIZmWhqKZbift4CmttSxT3LZcN08dyNZMO0BZll/N1ExzTS1lM00zNzVcNa2tVcMDiGKBmoHC9fvDH7ONgM0gMHj7ej4e90Pmmuu+7899zwy8ve7D2IwxRgAAABZxhbsLAAAAqEyEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEm8vUnDlzZLPZ7JOnp6eaNGmioUOH6tChQ5W6LpvNpkceeaTSlrd//37ZbDZNmzbtd/uWbOf+/fvtbUOGDFFkZKRDv8jISA0ZMsT++PDhw5o0aZK2b99eOUWfV09507p165xe1oVqnDRpkmw2W+UV7oLdu3dr0qRJDvu8smRkZKhLly4KDAyUzWbTjBkzKn0dl7uyPh9V4WLeo++9994l89p37dpVXbt2rdC8q1at0qRJkyq1nsuFp7sLgHu98847atGihU6fPq3PP/9cKSkpWr9+vXbu3Cl/f393l3fRevfurS+//FJhYWEX7Pfhhx8qICDA/vjw4cOaPHmyIiMj1a5du0qvq2S/n69ly5ZOL+NCNQ4fPlw9e/a82DIrZPfu3Zo8ebK6du1a6X8k77//fp06dUoLFy5UvXr1quWPMGqe9957T7t27dLo0aPdXcrvSk1NrfC8q1at0muvvUbAqQDCzWUuJiZGcXFxkqQbb7xRRUVFevrpp7Vs2TLde++9Zc7zyy+/qFatWtVZZoUFBwcrODj4d/u1b9++Gqr5n9/u96rQpEkTNWnSpMqW7y67du3SAw88oKSkpEpZ3pkzZ+wjl0BVcOU/LKg8HJaCg+uuu06S9OOPP0o6N0Rdu3Zt7dy5U4mJiapTp466desmSTp+/LgefvhhNW7cWN7e3rryyis1fvx4FRQUlLnsN954Q82bN5ePj49atmyphQsXOjx/9OhRPfzww2rZsqVq166tkJAQ3XTTTdqwYUOZyysuLtazzz6rpk2bytfXV3Fxcfr0008d+pR1WKosvz0stW7dOv3hD3+QJA0dOtR+yGjSpEmaN2+ebDabvvzyy1LLmDJliry8vHT48OELrstZixcvVseOHRUYGKhatWrpyiuv1P333/+7NUplD/lHRkbqlltu0YoVK9S+fXv5+fkpOjpaK1askHRuX0VHR8vf31/XXnuttm7d6jD/1q1bNWDAAEVGRsrPz0+RkZG6++677e+VkmXceeedks6F5ZK65syZY+/zz3/+U926dVNAQIBq1aqlhISEUq/b+Upex7NnzyotLc2+3BK7du1S3759Va9ePfn6+qpdu3b6v//7P4dlrFu3TjabTfPmzdPYsWPVuHFj+fj46Icffih3vZMnT1bHjh0VFBSkgIAAdejQQbNnz5Yz3ze8d+9eDRgwQI0aNZKPj49CQ0PVrVs3h8OIixYtUmJiosLCwuyvx5NPPqlTp045LKvkc/jtt9+qR48e8vf3V1hYmJ5//nlJ0ubNm3X99dfL399fzZs3L7XtJfsvPT1dQ4cOVVBQkPz9/dWnTx/t3bv3d7fFGKPU1FS1a9dOfn5+qlevnu644w6n5pWklStXql27dvLx8VFUVFS5h5Rfe+013XDDDQoJCZG/v79at26tF154QWfOnLH36dq1q1auXKkff/zR4ZBuiYt5zUr28zfffKNu3brJ399fwcHBeuSRR/TLL7849P311181btw4RUVFydvbW40bN9bIkSP1888/O/Q7/7DUbw+rT58+XVFRUapdu7bi4+O1efNmh1pee+01SXLYzqo43GtJBpeld955x0gyW7ZscWifOXOmkWRmzZpljDFm8ODBxsvLy0RGRpqUlBTz6aefmtWrV5vTp0+bNm3aGH9/fzNt2jSzZs0a89RTTxlPT0/Tq1cvh2VKMuHh4aZly5ZmwYIFZvny5aZnz55Gklm8eLG937fffmseeughs3DhQrNu3TqzYsUKM2zYMHPFFVeYzz77zN5v37599mVef/31ZsmSJWbx4sXmD3/4g/Hy8jKbNm0qtZ379u2ztw0ePNhEREQ41BgREWEGDx5sjDEmLy/PPt/f/vY38+WXX5ovv/zSHDhwwBQUFJiGDRuae++912H+M2fOmEaNGpk777zTqf2+efNmc+bMGYfp7Nmz9n6bNm0yNpvNDBgwwKxatcqsXbvWvPPOO2bgwIG/W6MxxkycONGc//GOiIgwTZo0MTExMWbBggVm1apVpmPHjsbLy8tMmDDBJCQkmKVLl5oPP/zQNG/e3ISGhppffvnFPv/ixYvNhAkTzIcffmjWr19vFi5caLp06WKCg4PN0aNHjTHG5OTkmOeee85IMq+99pq9rpycHGOMMfPmzTM2m83069fPLF261Hz00UfmlltuMR4eHuaf//xnufstJyfHfPnll0aSueOOO+zLNebc+6ZOnTqmWbNmZu7cuWblypXm7rvvNpLM1KlT7cv47LPPjCTTuHFjc8cdd5jly5ebFStWmNzc3HLXO2TIEDN79myTnp5u0tPTzdNPP238/PzM5MmTL/g6G2PMNddcY6666iozb948s379erNkyRIzduxYh/fy008/bV566SWzcuVKs27dOvP666+bqKgoc+ONNzosa/Dgwcbb29tER0ebmTNnmvT0dDN06FAjyYwbN840b97czJ4926xevdrccsstRpLZunWrff6S90p4eLi5//77zccff2xmzZplQkJCTHh4uPnpp58c1nX+5+OBBx4wXl5eZuzYseaTTz4x7733nmnRooUJDQ012dnZF9wP//znP42Hh4e5/vrrzdKlS+2f1aZNm5Z6j44ZM8akpaWZTz75xKxdu9a89NJLpkGDBmbo0KH2Pt98841JSEgwDRs2tL8PSt4Lxlzca1ayn5s2bWqeffZZs2bNGjNp0iTj6elpbrnlFnu/4uJi06NHD+Pp6Wmeeuops2bNGjNt2jTj7+9v2rdvb3799Vd73y5dupguXbrYH5f8/oqMjDQ9e/Y0y5YtM8uWLTOtW7c29erVMz///LMxxpgffvjB3HHHHUaSw3b+dtkoH+HmMnX+H9kTJ06YFStWmODgYFOnTh37L6zBgwcbSebtt992mP/11183ksz777/v0D516lQjyaxZs8beJsn4+fk5/BI8e/asadGihbnqqqvKrfHs2bPmzJkzplu3buaPf/yjvb3kl0OjRo3M6dOn7e35+fkmKCjIdO/evdR2uhJujDFmy5YtRpJ55513StU1ceJE4+3tbY4cOWJvW7RokZFk1q9fX+72/LaesiYPDw97v2nTphlJ9l90Zfm9GssKN35+fubgwYP2tu3btxtJJiwszJw6dcrevmzZMiPJLF++vNz1nz171pw8edL4+/ubmTNn2tsXL15sJDn8ETfGmFOnTpmgoCDTp08f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Pj4+6tKli6ZOnSrp3NC9MzVWJpvNJmNMqdfnrbfeKnUIsLy6EhISVLduXe3evbvUqFXJVDJi5Ipu3brZg8JvzZ07V7Vq1So3SP2ekkvEf/teOn36tObNm+fyspo3b66//e1vat26tb7++mv78qXS4eCNN96oUL3OmD9/vsPjTZs26ccff7zgTeZuueUWGWN06NChMl+z1q1blztvyZV35X1Wf6us/WGMcTj8W8LHx6fM931lvWbn76f33ntPkuz7qeT327vvvuvQb8mSJTp16lSp338VxWhOxTFygwoZNGiQXnvtNQ0ePFj79+9X69attXHjRj333HPq1auXunfv7tC/QYMGuummm/TUU0/J399fqamp+vbbbx0uB7/lllv09NNPa+LEierSpYu+++47TZkyRVFRUTp79mypGjw8PHTzzTcrOTlZxcXFmjp1qvLz8zV58uSL3r5mzZrJz89P8+fPV3R0tGrXrq1GjRrZD3VI50Zv+vfvL5vNpocfftil5e/atavMbWrWrJmCg4M1YcIEHTx4UN26dVOTJk30888/a+bMmQ7nZDhTY2UJCAjQDTfcoL///e9q0KCBIiMjtX79es2ePVt169Z16BsTEyNJmjVrlurUqSNfX19FRUWpfv36euWVVzR48GAdP35cd9xxh0JCQnT06FH9+9//1tGjR0uN2jlj4sSJWrFihW688UZNmDBBQUFBmj9/vlauXKkXXnhBgYGBFdrm3r17a/r06brnnnv04IMPKjc3V9OmTbvgSEWJHTt26JFHHtGdd96pq6++Wt7e3lq7dq127NhhH/nq1KmT6tWrpxEjRmjixIny8vLS/Pnz9e9//7tC9Tpj69atGj58uO68804dOHBA48ePV+PGjS/4/k1ISNCDDz6ooUOHauvWrbrhhhvk7++vrKwsbdy4Ua1bt7afh1aWp59+Wj179tTNN9+ssWPHqqioSFOnTpW/v7/DqN/NN98sb29v3X333frLX/6iX3/9VWlpafrpp59KLbN169ZaunSp0tLSFBsbqyuuuEJxcXEX9ZqV8Pb21osvvqiTJ0/qD3/4gzZt2qRnnnlGSUlJuv766+219ujRQ0888YTy8/OVkJCgHTt2aOLEiWrfvr0GDhzo9PoupCQ4Tp06VUlJSfLw8FCbNm0q9J+Ay44bT2aGG5V3Kfj5Bg8ebPz9/ct8Ljc3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qlWVWhAAAMDFqNB9biQpJydH3333nWw2m6655hoFBwdXZl0AAAAV4vJhqfz8fA0cOFCNGzdWly5ddMMNN6hRo0a67777lJeXVxU1AgAAOM3lcDN8+HD961//0ooVK/Tzzz8rLy9PK1as0NatW/XAAw9URY0AAABOc/mw1MqVK7V69Wpdf/319rYePXrozTffVM+ePSu1OAAAAFe5PHJTv359BQYGlmoPDAxUvXr1KqUoAACAinI53Pztb39TcnKysrKy7G3Z2dl6/PHH9dRTT1VqcQAAAK5y6rBU+/bt7XcllqTvv/9eERERatq0qSQpMzNTPj4+Onr0qP70pz9VTaUAAABOcCrc9OvXr4rLAAAAqBxOhZuJEydWdR0AAACVosI38du2bZv27Nkjm82mli1bqn379pVZFwAAQIW4HG5ycnI0YMAArVu3TnXr1pUxRnl5ebrxxhu1cOFC7lQMAADcyuWrpR599FHl5+frm2++0fHjx/XTTz9p165dys/P16hRo6qiRgAAAKe5PHLzySef6J///Keio6PtbS1bttRrr72mxMTESi0OAADAVS6P3BQXF8vLy6tUu5eXl4qLiyulKAAAgIpyOdzcdNNNeuyxx3T48GF726FDhzRmzBh169bN5QJSU1MVFRUlX19fxcbGasOGDeX23bhxoxISElS/fn35+fmpRYsWeumll1xeJwAAsC6XD0u9+uqr6tu3ryIjIxUeHi6bzabMzEy1bt1a7777rkvLWrRokUaPHq3U1FQlJCTojTfeUFJSknbv3m2/QeBv+fv765FHHlGbNm3k7++vjRs36k9/+pP8/f314IMPuropAADAgmzGGFORGdPT0/Xtt9/KGKOWLVuqe/fuLi+jY8eO6tChg9LS0uxt0dHR6tevn1JSUpxaxm233SZ/f3/NmzfPqf75+fkKDAxUXl6eAgICXK4ZcFXkkyvdXUKl2/98b3eXAOAy48rfb5dGbs6ePStfX19t375dN998s26++eYKF1lYWKht27bpySefdGhPTEzUpk2bnFpGRkaGNm3apGeeeabCdQAAAGtxKdx4enoqIiJCRUVFF73iY8eOqaioSKGhoQ7toaGhys7OvuC8TZo00dGjR3X27FlNmjRJw4cPL7dvQUGBCgoK7I/z8/MvrnAAAFCjVehbwceNG6fjx49XSgG//UJOSTLGlGo7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48YpLy/PPh04cKDSlg0AAGoet4Ubb29vxcbGKj093aE9PT1dnTp1qrT1+Pj4KCAgwGECAADW5bZzbiQpOTlZAwcOVFxcnOLj4zVr1ixlZmZqxIgRks6Nuhw6dEhz5861z7N9+3ZJ0smTJ3X06FFt375d3t7eatmypTs2AQAA1DBuDTf9+/dXbm6upkyZoqysLMXExGjVqlWKiIiQdO6mfeff86Z9+/b2n7dt26b33ntPERER2r9/f3WWDgAAaii3hhtJevjhh/Xwww+X+dycOXNKtRljqrgiAABwKXP71VIAAACViXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAsxe3hJjU1VVFRUfL19VVsbKw2bNhwwf7r169XbGysfH19deWVV+r111+vpkoBAMClwK3hZtGiRRo9erTGjx+vjIwMde7cWUlJScrMzCyz/759+9SrVy917txZGRkZ+utf/6pRo0ZpyZIl1Vw5AACoqdwabqZPn65hw4Zp+PDhio6O1owZMxQeHq60tLQy+7/++utq2rSpZsyYoejoaA0fPlz333+/pk2bVs2VAwCAmspt4aawsFDbtm1TYmKiQ3tiYqI2bdpU5jxffvllqf49evTQ1q1bdebMmSqrFQAAXDo83bXiY8eOqaioSKGhoQ7toaGhys7OLnOe7OzsMvufPXtWx44dU1hYWKl5CgoKVFBQYH+cl5cnScrPz7/YTShTccEvVbJcd6qqfXW54D0BABev5PeOMeZ3+7ot3JSw2WwOj40xpdp+r39Z7SVSUlI0efLkUu3h4eGulnrZCpzh7gpQ0/CeAOAuJ06cUGBg4AX7uC3cNGjQQB4eHqVGaXJyckqNzpRo2LBhmf09PT1Vv379MucZN26ckpOT7Y+Li4t1/Phx1a9f/4IhqibLz89XeHi4Dhw4oICAAHeX41bsi3PYD+ewH/6HfXEO++EcK+wHY4xOnDihRo0a/W5ft4Ubb29vxcbGKj09XX/8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bgAAgKUQbgBccmw2m5YtW+buMgDUUIQbADVOdna2Hn30UV155ZXy8fFReHi4+vTpo08//dTdpQG4BPDdUgBqlP379yshIUF169bVCy+8oDZt2ujMmTNavXq1Ro4cqW+//dbdJQKo4Ri5AVCjPPzww7LZbPrqq690xx13qHnz5mrVqpWSk5O1efPmMud54okn1Lx5c9WqVUtXXnmlnnrqKZ05c8b+/L///W/deOONqlOnjgICAhQbG6utW7dKkn788Uf16dNH9erVk7+/v1q1aqVVq1ZVy7YCqBqM3ACoMY4fP65PPvlEzz77rPz9/Us9X7du3TLnq1OnjubMmaNGjRpp586deuCBB1SnTh395S9/kSTde++9at++vdLS0uTh4aHt27fLy8tL0rlvVi8sLNTnn38uf39/7d69W7Vr166ybQRQ9Qg3AGqMH374QcYYtWjRwqX5/va3v9l/joyM1NixY7Vo0SJ7uMnMzNTjjz9uX+7VV19t75+Zmanbb79drVu3liRdeeWVF7sZANyMw1IAagxjjKRzV0O54oMPPtD111+vhg0bqnbt2nrqqaeUmZlpfz45OVnDhw9X9+7d9fzzz+u///2v/blRo0bpmWeeUUJCgiZOnKgdO3ZUzsYAcBvCDYAa4+qrr5bNZtOePXucnmfz5s0aMGCAkpKStGLFCmVkZGj8+PEqLCy095k0aZK++eYb9e7dW2vXrlXLli314YcfSpKGDx+uvXv3auDAgdq5c6fi4uL0yiuvVPq2Aag+NlPyXyUAqAGSkpK0c+dOfffdd6XOu/n5559Vt25d2Ww2ffjhh+rXr59efPFFpaamOozGDB8+XB988IF+/vnnMtdx991369SpU1q+fHmp58aNG6eVK1cyggNcwhi5AVCjpKamqqioSNdee62WLFmi77//Xnv27NHLL7+s+Pj4Uv2vuuoqZWZmauHChfrvf/+rl19+2T4qI0mnT5/WI488onXr1unHH3/UF198oS1btig6OlqSNHr0aK1evVr79u3T119/rbVr19qfA3Bp4oRiADVKVFSUvv76az377LMaO3assrKyFBwcrNjYWKWlpZXq37dvX40ZM0aPPPKICgoK1Lt3bz311FOaNGmSJMnDw0O5ubkaNGiQjhw5ogYNGui2227T5MmTJUlFRUUaOXKkDh48qICAAPXs2VMvvfRSdW4ygErGYSkAAGApHJYCAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACW8v8A6nanXtskNscAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Get predicted probabilities for each class\n", "predictions = model.predict_proba(X_cal) \n", "\n", "idx = 23\n", "# Extract the predicted probability for each class for a data point\n", "probabilities_for_data_point = predictions[idx]\n", "print('Probabilities for a sample data point:\\n',probabilities_for_data_point)\n", "\n", "# Get the true class of the selected data point\n", "true_class = y_encoded[idx]\n", "print('\\nTrue Class of the sample data:', true_class)\n", "\n", "plt.bar(x=range(len(probabilities_for_data_point)), height=probabilities_for_data_point)\n", "plt.xlabel('Class')\n", "plt.ylabel('Probability Estimate')\n", "plt.title('Probability Estimate for a sample data point')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Calibration" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "alpha: 0.15\n", "Calibration set size: 3378\n", "Predict Probability shape: (3378, 7)\n", "Prob true class shape: (3378,)\n", "q-level 0.8505032563647128\n", "qhat 0.8735675244396051\n" ] } ], "source": [ "# Calculate adjusted quantile\n", "\n", "alpha = 0.15 # means (1-alpha) coverage\n", "print('alpha:', alpha)\n", "\n", "n = X_cal.shape[0]\n", "print('Calibration set size:', n)\n", "\n", "# Get predicted probabilities for each class\n", "y_cal_predictions = model.predict_proba(X_cal) \n", "print('Predict Probability shape:', predictions.shape)\n", "\n", "# Get the probabaility of the true class\n", "prob_true_class = y_cal_predictions[np.arange(len(y_cal)),y_cal] # The second index taken from y_cal is 1 only for the true class\n", "print('Prob true class shape:', prob_true_class.shape)\n", "\n", "y_cal_scores = 1-prob_true_class # Larger conformal scores encode worse aggrement between X and y\n", "\n", "q_level = np.ceil((n+1)*(1-alpha))/n # finite-size correction\n", "print(\"q-level\", q_level)\n", "\n", "qhat = np.quantile(y_cal_scores, q_level)\n", "print(\"qhat\", qhat)\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Flatten the array of conformal scores\n", "flat_scores = y_cal_scores.flatten()\n", "\n", "# Plot histogram of frequency of conformal scores\n", "plt.hist(flat_scores, bins=10, color='skyblue', edgecolor='black')\n", "\n", "# Add vertical dotted line denoting qhat\n", "plt.axvline(x=qhat, color='red', linestyle='--', label=f'qhat = {qhat:.3f}')\n", "plt.xlabel('Conformal Score')\n", "plt.ylabel('Frequency')\n", "plt.title('Histogram of Conformal Scores for the Calibration Set')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Predictions" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_test predicted scores:\n", " [5.31871940e-01 6.02122501e-31 4.68128053e-01 1.54048866e-68\n", " 6.96089668e-09 6.47527911e-47 9.28043054e-37]\n", "\n", "Prediction set:\n", " [ True False True False False False False]\n", "\n", "True class: 0\n" ] } ], "source": [ "id = 2\n", "y_test_predictions = model.predict_proba(X_test)\n", "print('X_test predicted scores:\\n', y_test_predictions[id])\n", "\n", "predictions_set = (1-y_test_predictions <= qhat)\n", "print('\\nPrediction set:\\n', predictions_set[id])\n", "print('\\nTrue class:', y_test[id])\n", "\n", "accepted_test_set = np.zeros(len(predictions_set[id]))\n", "for i in range(len(predictions_set[id])):\n", " if predictions_set[id][i]:\n", " accepted_test_set[i] = y_test_predictions[id][i]\n", "\n", "\n", "# Create a list to represent the heights of the bars of the true class\n", "true_bar_heights = [0] * len(predictions_set[id])\n", "true_bar_heights[y_test[id]] = 1\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAJkCAYAAAAm4HFlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACa5UlEQVR4nOzde3zO9f/H8ee182Y2x80w25zPjKWQkFOUEnLKKaYcIjkk5HyK8KVC5ZhIJKkkQkhJDqGDJTlNbM5tjmPb5/eH365ctmvbxbbr2va4327XLdfn874+n9d1eF+9n/t8Pu/LZBiGIQAAAACAVU72LgAAAAAAHB3BCQAAAADSQHACAAAAgDQQnAAAAAAgDQQnAAAAAEgDwQkAAAAA0kBwAgAAAIA0EJwAAAAAIA0EJwAAAABIA8EJQIZZsmSJTCaT+ebi4qLixYvrhRde0OnTpzN0XyaTSS+//HKGbe/EiRMymUyaPn16mm2TnueJEyfMy7p3767g4GCLdsHBwerevbv5/pkzZzR27FgdOHAgY4rOBDt37tTYsWP177//JlvXoEEDNWjQIMtrkqT169dr7Nixdtm3JL3xxhsqUaKEXFxclC9fPrvVkZbr169r7Nix2rZtW6buJ7XPiS1S6jfpNXfuXC1ZsuSB9p9V7v0usMXHH3+sWbNmZWg9AO4PwQlAhlu8eLF++uknbdq0Sb169dKKFStUr149Xbt2zd6lZYgnn3xSP/30kwICAlJt9/nnn2vUqFHm+2fOnNG4ceMcPjiNGzcuxQHx3LlzNXfu3KwvSneC07hx4+yy7y+++EKTJk1S165dtX37dm3evNkudaTH9evXNW7cuCwJTtY+J1klOwWne78LbEFwAhyHi70LAJDzVK5cWWFhYZKkhg0bKiEhQRMmTNDatWv1/PPPp/iY69evy8vLKyvLvG+FCxdW4cKF02wXGhqaBdVknYoVK9q7BLv4/fffJUkDBgyQn59fhmwzO33e8eBy2ncBkFtxxAlApnvkkUckSSdPnpR05/Qcb29v/fbbb2ratKny5s2rRo0aSZIuXbqkvn37qlixYnJzc1PJkiU1cuRIxcXFpbjt999/X2XLlpW7u7sqVqyoTz75xGL9+fPn1bdvX1WsWFHe3t7y8/PT448/rh07dqS4vcTERE2aNEklSpSQh4eHwsLCtGXLFos2KZ2ql5K7T8/Ztm2bHnroIUnSCy+8YD6dcezYsfroo49kMpn0008/JdvG+PHj5erqqjNnzqS6ryNHjqhTp07y8/OTu7u7KlSooDlz5iR7bhMnTlS5cuXk6empfPnyqWrVqpo9e7YkaezYsRo6dKgkKSQkxFxj0tGLe0/VSzq98a233tLUqVMVHBwsT09PNWjQQH/99Zdu376t119/XUWLFpWvr6+effZZnTt3zqKmlStXqmnTpgoICJCnp6cqVKig119/3eLoZPfu3c3P5e5TQZNef8MwNHfuXFWvXl2enp7Knz+/2rZtq2PHjlnsa//+/XrqqafMr1HRokX15JNP6p9//rH6ugYHB+uNN96QJPn7+5vfs6TXc9q0aSpfvrzc3d3l5+enrl27JttegwYNVLlyZX3//feqU6eOvLy81KNHD6v73Lt3rzp06GB+PYODg9WxY0dz/7HmxIkT5kA/btw48+t09yliWfE5sWbJkiUqV66ceb9Lly5Nsd24ceP08MMPq0CBAvLx8VGNGjW0cOFCGYZhbhMcHKw//vhD27dvN+8/6ZS/mzdvavDgwapevbp8fX1VoEAB1a5dW1988UWq9SVJer927NihRx55RJ6enipWrJhGjRqlhIQEi7bp/b6691S9bdu2yWQyacWKFRo5cqSKFi0qHx8fNW7cWIcPH7ao5euvv9bJkyctPvsA7IMjTgAy3d9//y1JFkdpbt26paefflovvfSSXn/9dcXHx+vmzZtq2LChjh49qnHjxqlq1arasWOHpkyZogMHDujrr7+22O6XX36prVu3avz48cqTJ4/mzp2rjh07ysXFRW3btpV0Z2AjSWPGjFGRIkV09epVff7552rQoIG2bNmS7Jqdd999V0FBQZo1a5Z5YNy8eXNt375dtWvXvu/XoEaNGlq8eLFeeOEFvfHGG3ryySclScWLF5efn59ee+01zZkzx2If8fHxev/99/Xss8+qaNGiVrd96NAh1alTRyVKlNCMGTNUpEgRbdy4UQMGDNCFCxc0ZswYSdK0adM0duxYvfHGG3rsscd0+/Zt/fnnn+bTrcLDw3Xp0iW98847WrNmjflUxLSONM2ZM0dVq1bVnDlz9O+//2rw4MFq2bKlHn74Ybm6umrRokU6efKkhgwZovDwcH355Zfmxx45ckQtWrTQwIEDlSdPHv3555+aOnWqdu/ere+++06SNGrUKF27dk2rV6+2CJdJ9b300ktasmSJBgwYoKlTp+rSpUsaP3686tSpo4MHD8rf31/Xrl1TkyZNFBISojlz5sjf31/R0dHaunWrrly5YvW5ff7555ozZ44WLlyoDRs2yNfXV8WLF5ck9enTRx988IFefvllPfXUUzpx4oRGjRqlbdu26ZdfflGhQoXM24mKilLnzp312muvafLkyXJysv53yxMnTqhcuXLq0KGDChQooKioKM2bN08PPfSQDh06ZLHduwUEBGjDhg164okn1LNnT4WHh0v6r9/Z83OyZMkSvfDCC3rmmWc0Y8YMxcTEaOzYsYqLi0v2Wpw4cUIvvfSSSpQoIUnatWuX+vfvr9OnT2v06NHm96Vt27by9fU1nz7q7u4uSYqLi9OlS5c0ZMgQFStWTLdu3dLmzZvVunVrLV68WF27drVaZ5Lo6Gh16NBBr7/+usaPH6+vv/5aEydO1OXLl/Xuu+9Kks3fVykZMWKE6tatqwULFig2NlbDhg1Ty5YtFRERIWdnZ82dO1cvvviijh49qs8//zzN7QHIZAYAZJDFixcbkoxdu3YZt2/fNq5cuWKsW7fOKFy4sJE3b14jOjraMAzD6NatmyHJWLRokcXj33vvPUOSsWrVKovlU6dONSQZ3377rXmZJMPT09O8TcMwjPj4eKN8+fJG6dKlrdYYHx9v3L5922jUqJHx7LPPmpcfP37ckGQULVrUuHHjhnl5bGysUaBAAaNx48bJnufx48fNy7p162YEBQVZ7CsoKMjo1q2b+f6ePXsMScbixYuT1TVmzBjDzc3NOHv2rHnZypUrDUnG9u3brT4fwzCMZs2aGcWLFzdiYmIslr/88suGh4eHcenSJcMwDOOpp54yqlevnuq23nrrrWTPLUn9+vWN+vXrm+8nvWbVqlUzEhISzMtnzZplSDKefvppi8cPHDjQkJSsziSJiYnG7du3je3btxuSjIMHD5rX9evXz0jpf1k//fSTIcmYMWOGxfJTp04Znp6exmuvvWYYhmHs3bvXkGSsXbs21eefkjFjxhiSjPPnz5uXRUREGJKMvn37WrT9+eefDUnGiBEjzMvq169vSDK2bNli874N485n9urVq0aePHmM2bNnp9r2/PnzhiRjzJgxydZl1efkXgkJCUbRokWNGjVqGImJieblJ06cMFxdXZP1m3sf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Ksjb21tFixa1mDHvlVdeUfv27WUymdS3b990bXf27Nl69NFHVa9ePfXp00fBwcG6cuWK/v77b3311Vfm2elatmxp/o2twoUL6+TJk5o1a5aCgoJUpkwZSTIHjdmzZ6tbt25ydXVVuXLllDdv3gd+/veqU6eO8ufPr969e2vMmDFydXXV8uXLdfDgwWRtk+qaOnWqmjdvLmdnZ1WtWlV169bViy++qBdeeEF79+7VY489pjx58igqKko//PCDqlSpoj59+mjdunWaO3euWrVqpZIlS8owDK1Zs0b//vuvmjRpYnPt5cqV04svvqh33nlHTk5Oat68uXlWvcDAQL366qv39Zr4+Pjoscce01tvvaVChQopODhY27dv18KFC5UvX740H583b14FBQXpiy++UKNGjVSgQAHzduz1OXFyctKECRMUHh6uZ599Vr169dK///6rsWPHJjtV78knn9TMmTPVqVMnvfjii7p48aKmT5+e4tHEpCOIK1euVMmSJeXh4aEqVaroqaee0po1a9S3b1+1bdtWp06d0oQJExQQEKAjR46k630oWLCg+vTpo8jISJUtW1br16/X/Pnz1adPH/Nsf7Z+X92vKlWqaM2aNZo3b55q1qwpJyenNI/oA8gk9puXAkBOkzTb3J49e1Jt161bNyNPnjwprrt48aLRu3dvIyAgwHBxcTGCgoKM4cOHGzdv3rRoJ8no16+fMXfuXKNUqVKGq6urUb58eWP58uUW7eLi4owhQ4YYxYoVMzw8PIwaNWoYa9euTTYLXtIMcVOnTjXGjRtnFC9e3HBzczNCQ0ONjRs3pvg8bZ1VzzAMY8WKFUb58uUNV1fXFGc/i4uLM9zd3Y0nnnjC+guYguPHjxs9evQwihUrZri6uhqFCxc26tSpY0ycONHcZsaMGUadOnWMQoUKGW5ubkaJEiWMnj17GidOnLDY1vDhw42iRYsaTk5OhiRj69athmFYn1Xvrbfesnh80oxhn376qcXylD4fO3fuNGrXrm14eXkZhQsXNsLDw41ffvkl2eyDcXFxRnh4uFG4cGHDZDIle/0XLVpkPPzww0aePHkMT09Po1SpUkbXrl2NvXv3GoZhGH/++afRsWNHo1SpUoanp6fh6+tr1KpVy1iyZEmar21Ks+oZxp0Z36ZOnWqULVvWcHV1NQoVKmR07tzZOHXqlEW7+vXr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tm3bZl5376l697r7VL2xY8fqww8/1BdffCGTySSTyaRt27aleKreoUOH1KJFC3l7e8vf319dunTRhQsXzOtXr16tKlWqmJ9/48aNde3atXS93jkdwQkAACCH8fT01O3bt833//77b61atUqfffaZeRD95JNPKjo6WuvXr9e+fftUo0YNNWrUSJcuXZIkrVq1SmPGjNGkSZO0d+9eBQQEJAs09xo+fLimTp2qUaNG6dChQ/r444/l7+8v6U74kaTNmzcrKipKa9askSTNnz9fI0eO1KRJkxQREaHJkydr1KhR5tMPr127pqeeekrlypXTvn37NHbsWA0ZMiRDXpctW7YoIiJCmzZt0rp163T9+nU98cQTyp8/v/bs2aNPP/1Umzdv1ssvv2yxnaTHbd26VStWrNDnn3+ucePGmddfu3ZNgwYN0p49e7RlyxY5OTnp2WefVWJiosV2hg4dqsGDB2v//v2qU6eOnn76aV28eNHm5zVkyBC1a9dOTzzxhKKiohQVFaU6deokaxcVFaX69eurevXq2rt3rzZs2KCzZ8+qXbt25vUdO3ZUjx49FBERoW3btql169bpPh0zp+NUPQAAgBxk9+7d+vjjj9WoUSPzslu3bumjjz5S4cKFJUnfffedfvvtN507d07u7u6SpOnTp2vt2rVavXq1XnzxRc2aNUs9evRQeHi4JGnixInavHlzsqNOSa5cuaLZs2fr3XffVbdu3SRJpUqV0qOPPipJ5n0XLFjQ4vSxCRMmaMaMGWrdurWkO0emDh06pPfff1/dunXT8uXLlZCQoEWLFsnLy0uVKlXSP//8oz59+qT7NUlMTNS3336rjRs3auDAgeblefLk0YIFC8yn6M2fP183btzQ0qVLzdeHvfvuu2rZsqWmTp1qDoFubm4W9YwfP15Dhw7VhAkT5OTkpDZt2ljsf+HChfLz89OhQ4dUuXJl8/KXX37Z3HbevHnasGGDFi5cqNdeey3dz026c9qep6en4uLiUj01b968eapRo4YmT55sXrZo0SIFBgbqr7/+0tWrVxUfH6/WrVsrKChIklSlShWbasnJOOIEAACQza1bt07e3t7y8PBQ7dq19dhjj+mdd94xrw8KCjIHF0nat2+frl69qoIFC5qvlfH29tbx48fNp5RFRESodu3aFvu59/7dIiIiFBcXZxHY0nL+/HmdOnVKPXv2tKhj4sSJFnVUq1ZNXl5e6arjbnPnzjW/Lk8//bQ6d+6sMWPGmNdXqVLF4rqmpH3dPalG3bp1lZiYqMOHD5uXpVTP1atXderUKUnS0aNH1alTJ5UsWVI+Pj7m0xQjIyMt6rv7ebi4uCgsLEwRERHpem73Y9++fdq6davFa12+fHlzzdWqVVOjRo1UpUoVPffcc5o/f74uX76cafVkNxxxAgAAyOYaNmyoefPmydXVVUWLFk02+cO9s+slJiYqICDA4pqaJHdPeW0LT09Pmx+TdOra/Pnz9fDDD1usS5r57kFOE3v++ec1cuRIubu7q2jRoslm07v3dTEMQyaTKcVtWVueUpuWLVsqMDBQ8+fPV9GiRZWYmKjKlStbXAeV1jYyQ2Jiovno2b0CAgLk7OysTZs2aefOnfr222/1zjvvaOTIkfr555/N4S8344gTAABANpcnTx6VLl1aQUFB6Zoxr0aNGoqOjpaLi4tKly5tcUuaurpChQratWuXxePuvX+3MmXKyNPTU1u2bElxfdKRnYSEBPMyf39/FStWTMeOHUtWR9JAvWLFijp48KBu3LiRrjru5uvrq9KlSyswMDBdU5BXrFhRBw4csJgM4ccff5STk5N58ghJKdbj7e2t4sWL6+LFi4qIiNAbb7yhRo0aqUKFClaP2tz9POLj47Vv3z7zESBbubm5Wby2KalRo4b++OMPBQcHJ3u9k0KkyWRS3bp1NW7cOO3fv19ubm76/PPP76umnIbgBAAAkMs0btxYtWvXVqtWrbRx40adOHFCO3fu1BtvvKG9e/dKkl555RUtWrRIixYt0l9//aUxY8bojz/+sLpNDw8PDRs2TK+99pqWLl2qo0ePateuXVq4cKEkyc/PT56enuYJCWJiYiTdmRFuypQpmj17tv766y/99ttvWrx4sWbOnClJ6tSpk5ycnNSzZ08dOnRI69ev1/Tp0zPldXn++efl4eGhbt266ffff9fWrVvVv39/denSxXx9k3TnmrGker755huNGTNGL7/8spycnJQ/f34VLFhQH3zwgf7++2999913GjRoUIr7mzNnjj7//HP9+eef6tevny5fvqwePXrcV+3BwcH69ddfdfjwYV24cMFiEowk/fr106VLl9SxY0ft3r1bx44d07fffqsePXooISFBP//8syZPnqy9e/cqMjJSa9as0fnz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k65Ds7nSfVwYmOly18cUAJDFbt68qePHjyskJEQeHh4W6yIjIy1+IyczFSpUyKYfvwWQttT6ty3ZgCNOAAAAqShRogRhBgCTQwAAAABAWghOAAAAAJAGghMAAAAApIHgBAAAAABpIDgBAAAAQBoITgAAAACQBoITAAAAAKSB4AQAAAAAaSA4AQAAIMuYTCatXbvW3mUANiM4AQAApMZkyrqbzaWZUr11794941+PVERHR6t///4qWbKk3N3dFRgYqJYtW2rLli1ZWgeQGVzsXQAAAADuT1RUlPnfK1eu1OjRo3X48GHzMk9PT4v2t2/flqura6bUcuLECdWtW1f58uXTtGnTVLVqVd2+fVsbN25Uv3799Oeff2bKfoGswhEnAACAbKpIkSLmm6+vr0wmk/n+zZs3lS9fPq1atUoNGjSQh4eHli1bprFjx6p69eoW25k1a5aCg4Mtli1evFgVKlSQh4eHypcvr7lz56ZaS9++fWUymbR79261bdtWZcuWVaVKlTRo0CDt2rXL6uOGDRumsmXLysvLSyVLltSoUaN0+/Zt8/qDBw+qYcOGyps3r3x8fFSzZk3t3btXknTy5Em1bNlS+fPnV548eVSpUiWtX7/ethcRSCeOOAEAAORgw4YN04wZM7R48WK5u7vrgw8+SPMx8+fP15gxY/Tuu+8qNDRU+/fvV69evZQnTx5169YtWftLly5pw4YNmjRpkvLkyZNsfb58+azuK2/evFqyZImKFi2q3377Tb169VLevHn12muvSZKef/55hYaGat68eXJ2dtaBAwfMR8369eunW7du6fvvv1eePHl06NAheXt7p/OVAWxDcAIAAMjBBg4cqNatW9v0mAkTJmjGjBnmx4WEhOjQoUN6//33UwxOf//9twzDUPny5W2u74033jD/Ozg4WIMHD9bKlSvNwSkyMlJDhw41b7tMmTLm9pGRkWrTpo2qVKkiSSpZsqTN+wfSi+AEAACQg4WFhdnU/vz58zp16pR69uypXr16mZfHx8fL19c3xccYhiHpzmQVtlq9erVmzZqlv//+W1evXlV8fLx8fHzM6wcNGqTw8HB99NFHaty4sZ577jmVKlVKkjRgwAD16dNH3377rRo3bqw2bdqoatWqNtcApAfXOAEAAORg95465+TkZA46Se6+pigxMVHSndP1Dhw4YL79/vvvVq9VKlOmjEwmkyIiImyqbdeuXerQoYOaN2+udevWaf/+/Ro5cqRu3bplbjN27Fj98ccfevLJJ/Xdd9+pYsWK+vzzzyVJ4eHhOnbsmLp06aLffvtNYWFheuedd2yqAUgvghMAAEAuUrhwYUVHR1uEpwMHDpj/7e/vr2LFiunYsWMqXbq0xS0kJCTFbRYoUEDNmjXTnDlzdO3atWTr//333xQf9+OPPyooKEgjR45UWFiYypQpo5MnTyZrV7ZsWb366qv69ttv1bp1ay1evNi8LjAwUL1799aaNWs0ePBgzZ8/P52vBGAbghMAAEAu0qBBA50/f17Tpk3T0aNHNWfOHH3zzTcWbcaOHaspU6Zo9uzZ+uuvv/Tbb79p8eLFmjlzptXtzp07VwkJCapVq5Y+++wzHTlyRBEREXr77bdVu3btFB9TunRpRUZG6pNPPtHRo0f19ttvm48mSdKNGzf08ssva9u2bTp58qR+/PFH7dmzRxUqVJB05/qtjRs36vjx4/rll1/03XffmdcBGY3gBAAAkBrDyLpbFqhQoYLmzp2rOXPmqFq1atq9e7eGDBli0SY8PFwLFizQkiVLVKVKFdWvX19LliyxesRJujOBxC+//KKGDRtq8ODBqly5spo0aaItW7Zo3rx5KT7mmWee0auvvqqXX35Z1atX186dOzVq1CjzemdnZ128eFFdu3ZV2bJl1a5dOzVv3lzjxo2TJCUkJKhfv36qUKGCnnjiCZUrVy7NadOB+2Uy7j3JNYeLjY2Vr6+vYmJiLC48xF3u48LOTJe7PqYAgCx28+ZNHT9+XCEhIfLw8LB3OQAyUGr925ZswBEnAAAAAEgDwQkAAAAA0kBwAgAAAIA0EJwAAAAAIA0EJwAAgP+Xy+bMAnKFjOrXBCcAAJDrubq6SpKuX79u50oAZLRbt25JujO9/YNwyYhiAAAAsjNnZ2fly5dP586dkyR5eXnJ5Ig/zwHAJomJiTp//ry8vLzk4vJg0YfgBAAAIKlIkSKSZA5PAHIGJycnlShR4oH/GEJwAgAAkGQymRQQECA/Pz/dvn3b3uUAyCBubm5ycnrwK5QITgAAAHdxdnZ+4GshAOQ8TA4BAAAAAGkgOAEAAABAGghOAAAAAJAGghMAAAAApIHgBAAAAABpIDgBAAAAQBoITgAAAACQBoITAAAAAKTB7sFp7ty5CgkJkYeHh2rWrKkdO3ak2n758uWqVq2avLy8FBAQoBdeeEEXL17MomoBAAAA5EZ2DU4rV67UwIEDNXLkSO3fv1/16tVT8+bNFRkZmWL7H374QV27dlXPnj31xx9/6NNPP9WePXsUHh6exZUDAAAAyE3sGpxmzpypnj17Kjw8XBUqVNCsWbMUGBioefPmpdh+165dCg4O1oABAxQSEqJHH31UL730kvbu3ZvFlQMAAADITewWnG7duqV9+/apadOmFsubNm2qnTt3pviYOnXq6J9//tH69etlGIbOnj2r1atX68knn7S6n7i4OMXGxlrcAAAAAMAWdgtOFy5cUEJCgvz9/S2W+/v7Kzo6OsXH1KlTR8uXL1f79u3l5uamIkWKKF++fHrnnXes7mfKlCny9fU13wIDAzP0eQAAAADI+ew+OYTJZLK4bxhGsmVJDh06pAEDBmj06NHat2+fNmzYoOPHj6t3795Wtz98+HDFxMSYb6dOncrQ+gEAAADkfC722nGhQoXk7Oyc7OjSuXPnkh2FSjJlyhTVrVtXQ4cOlSRVrVpVefLkUb169TRx4kQFBAQke4y7u7vc3d0z/gkAAAAAyDXsdsTJzc1NNWvW1KZNmyyWb9q0SXXq1EnxMdevX5eTk2XJzs7Oku4cqQIAAACAzGDXU/UGDRqkBQsWaNGiRYqIiNCrr76qyMhI86l3w4cPV9euXc3tW7ZsqTVr1mjevHk6duyYfvzxRw0YMEC1atVS0aJF7fU0AAAAAORwdjtVT5Lat2+vixcvavz48YqKilLlypW1fv16BQUFSZKioqIsftOpe/fuunLlit59910NHjxY+fLl0+OPP66pU6fa6ykAAAAAyAVMRi47xy02Nla+vr6KiYmRj4+PvctxTFYm57Cr3PUxBQAAQBawJRvYfVY9AAAAAHB0BCcAAAAASAPBCQAAAADSQHACAAAAgDQQnAAAAAAgDQQnAAAAAEgDwQkAAAAA0kBwAgAAAIA0EJwAAAAAIA0EJwAAAABIA8EJAAAAANJAcAIAAACANBCcAAAAACANBCcAAAAASAPBCQAAAADSQHACAAAAgDQQnAAAAAAgDQQnAAAAAEgDwQkAAAAA0kBwAgAAAIA0EJwAAAAAIA0EJwAAAABIA8EJAAAAANJAcAIAAACANBCcAAAAACANBCcAAAAASAPBCQAAAADSQHACAAAAgDQQnAAAAAAgDQQnAAAAAEgDwQkAAAAA0kBwAgAAAIA0EJwAAAAAIA0EJwAAAABIA8EJAAAAANJAcAIAAACANBCcAAAAACANBCcAAAAASAPBCQAAAADSQHACAAAAgDQQnAAAAAAgDQQnAAAAAEjDAwenhIQEHThwQJcvX86IegAAAADA4dgcnAYOHKiFCxdKuhOa6tevrxo1aigwMFDbtm3L6PoAAAAAwO5sDk6rV69WtWrVJElfffWVjh8/rj///FMDBw7UyJEjM7xAAAAAALA3m4PThQsXVKRIEUnS+vXr9dxzz6ls2bLq2bOnfvvttwwvEAAAAADszebg5O/vr0OHDikhIUEbNmxQ48aNJUnXr1+Xs7NzhhcIAAAAAPbmYusDXnjhBbVr104BAQEymUxq0qSJJOnnn39W+fLlM7xAAAAAALA3m4PT2LFjVblyZZ06dUrPPfec3N3dJUnOzs56/fXXM7xAAAAAALA3k2EYxv0++ObNm/Lw8MjIejJdbGysfH19FRMTIx8fH3uX45hMJntXkNz9f0wBAACAFNmSDWy+xikhIUETJkxQsWLF5O3trWPHjkmSRo0aZZ6mHAAAAAByEpuD06RJk7RkyRJNmzZNbm5u5uVVqlTRggULMrQ4AAAAAHAENgenpUuX6oMPPtDzzz9vMYte1apV9eeff2ZocQAAAADgCGwOTqdPn1bp0qWTLU9MTNTt27czpCgAAAAAcCQ2B6dKlSppx44dyZZ/+umnCg0NzZCiAAAAAMCR2Dwd+ZgxY9SlSxedPn1aiYmJWrNmjQ4fPqylS5dq3bp1mVEjAAAAANiVzUecWrZsqZUrV2r9+vUymUwaPXq0IiIi9NVXX5l/DBcAAAAAcpIH+h2n7IjfcUoHfscJAAAAuUCm/o5TyZIldfHixWTL//33X5UsWdLWzQEAAACAw7M5OJ04cUIJCQnJlsfFxen06dMZUhQAAAAAOJJ0Tw7x5Zdfmv+9ceNG+fr6mu8nJCRoy5YtCg4OztDiAAAAAMARpDs4tWrVSpJkMpnUrVs3i3Wurq4KDg7WjBkzMrQ4AAAAAHAE6Q5OiYmJkqSQkBDt2bNHhQoVyrSiAAAAAMCR2Pw7TsePH8+MOgAAAADAYdkcnCTp2rVr2r59uyIjI3Xr1i2LdQMGDMiQwgAAAADAUdgcnPbv368WLVro+vXrunbtmgoUKKALFy7Iy8tLfn5+BCcAAAAAOY7N05G/+uqratmypS5duiRPT0/t2rVLJ0+eVM2aNTV9+vTMqBEAAAAA7Mrm4HTgwAENHjxYzs7OcnZ2VlxcnAIDAzVt2jSNGDEiM2oEAAAAALuyOTi5urrKZDJJkvz9/RUZGSlJ8vX1Nf8bAAAAAHISm69xCg0N1d69e1W2bFk1bNhQo0eP1oULF/TRRx+pSpUqmVEjAAAAANiVzUecJk+erICAAEnShAkTVLBgQfXp00fnzp3TBx98kOEFAgAAAIC9mQzDMOxdRFaKjY2Vr6+vYmJi5OPjY+9yHNP/n4rpUHLXxxQAAABZwJZsYPMRJwAAAADIbWy+xunixYsaPXq0tm7dqnPnzikxMdFi/aVLlzKsOAAAAABwBDYHp86dO+vo0aPq2bOn/P39zTPsAQAAAEBOZXNw+uGHH/TDDz+oWrVqmVEPAAAAADgcm69xKl++vG7cuJEZtQAAAACAQ7I5OM2dO1cjR47U9u3bdfHiRcXGxlrc7md7ISEh8vDwUM2aNbVjx45U28fFxWnkyJEKCgqSu7u7SpUqpUWLFtm8XwAAAABIL5tP1cuXL59iYmL0+OOPWyw3DEMmk0kJCQnp3tbKlSs1cOBAzZ07V3Xr1tX777+v5s2b69ChQypRokSKj2nXrp3Onj2rhQsXqnTp0jp37pzi4+NtfRoAAAAAkG42/45TrVq15OLioldeeSXFySHq16+f7m09/PDDqlGjhubNm2deVqFCBbVq1UpTpkxJ1n7Dhg3q0KGDjh07pgIFCthSthm/45QOjjjhB7/jBAAAgAxmSzaw+YjT77//rv3796tcuXL3XaAk3bp1S/v27dPrr79usbxp06bauXNnio/58ssvFRYWpmnTpumjjz5Snjx59PTTT2vChAny9PRM8TFxcXGKi4sz37+f0wkBAAAA5G42B6ewsDCdOnXqgYPThQsXlJCQIH9/f4vl/v7+io6OTvExx44d0w8//CAPDw99/vnnunDhgvr27atLly5Zvc5pypQpGjdu3APVCgAAACB3szk49e/fX6+88oqGDh2qKlWqyNXV1WJ91apVbdrevaf6JV0rlZLExESZTCYtX75cvr6+kqSZM2eqbdu2mjNnTopHnYYPH65BgwaZ78fGxiowMNCmGgEAAADkbjYHp/bt20uSevToYV5mMplsnhyiUKFCcnZ2TnZ06dy5c8mOQiUJCAhQsWLFzKFJunNNlGEY+ueff1SmTJlkj3F3d5e7u3u6agIAAACAlNgcnI4fP54hO3Zzc1PNmjW1adMmPfvss+blmzZt0jPPPJPiY+rWratPP/1UV69elbe3tyTpr7/+kpOTk4oXL54hdQEAAADAvWyeVS8jrVy5Ul26dNF7772n2rVr64MPPtD8+fP1xx9/KCgoSMOHD9fp06e1dOlSSdLVq1dVoUIFPfLIIxo3bpwuXLig8PBw1a9fX/Pnz0/XPplVLx2YVQ8AAAC5QIbPqvfll1+qefPmcnV11Zdffplq26effjrdhbZv314XL17U+PHjFRUVpcqVK2v9+vUKCgqSJEVFRSkyMtLc3tvbW5s2bVL//v0VFhamggULql27dpo4cWK69wkAAAAAtkrXEScnJydFR0fLz89PTk5O1jdm4w/g2gNHnNKBI04AAADIBTL8iFNiYmKK/wYAAACA3MD64SMrli5davGDsklu3bplvhYJAAAAAHISmyeHcHZ2VlRUlPz8/CyWX7x4UX5+fpyqlxNwqh4AAAByAVuygc1HnKz9QO0///xj8ftKAAAAAJBTpPt3nEJDQ2UymWQymdSoUSO5uPz30ISEBB0/flxPPPFEphQJAAAAAPaU7uDUqlUrSdKBAwfUrFkz8w/QSnd+zDY4OFht2rTJ8AIBAAAAwN7SHZzGjBkjSQoODlaHDh3k7u6eaUUBAAAAgCOx+Rqnxx9/XOfPnzff3717twYOHKgPPvggQwsDAAAAAEdhc3Dq1KmTtm7dKkmKjo5W48aNtXv3bo0YMULjx4/P8AIBAAAAwN5sDk6///67atWqJUlatWqVqlSpop07d+rjjz/WkiVLMro+AAAAALA7m4PT7du3zdc3bd68WU8//bQkqXz58oqKisrY6gAAAADAAdgcnCpVqqT33ntPO3bs0KZNm8xTkJ85c0YFCxbM8AIBAAAAwN5sDk5Tp07V+++/rwYNGqhjx46qVq2aJOnLL780n8IHAAAAADmJyTAMw9YHJSQkKDY2Vvnz5zcvO3HihLy8vOTn55ehBWa02NhY+fr6KiYmRj4+PvYuxzGZTPauIDnbP6YAAABAqmzJBuk+4nTu3Dnzv52dnS1CkyQVL15cJ06csK1SAAAAAMgG0h2cAgICLMJThQoVFBkZab5/8eJF1a5dO2OrAwAAAAAHkO7gdO8Zff/884/i4+NTbQMAAAAAOYHNk0OkxuSI18YAAAAAwAPK0OAEAAAAADmRS3obmkwmXblyRR4eHjIMQyaTSVevXlVsbKwkmf8LAAAAADlNuoOTYRgqW7asxf3Q0FCL+5yqBwAAACAnSndw2rp1a2bWAQAAAAAOK93BqX79+plZR64WGRmpCxcu2LsMsxr2LgAAAABwMOkOTsgckZGRKlu+vOJu3LB3KWZMKg8AAABYIjjZ2YULFxR344ZeeetdFS9ZOtP3d/PGDS2YMEJnI0+q15gpKlGmnMX6f479LQ19OdPrAAAAALITgpODKF6ytEpWqpol+5q0/AtN6NVJCye+odGLPlGZqqFpPwgAAADIxfgdp1zI09tbo+Z/rMAy5TS+Rwcd+XW/vUsCAAAAHJrNwWnJkiW6fv16ZtSCLER4AgAAANLP5uA0fPhwFSlSRD179tTOnTszo6Zc6aYdJocgPAEAAADpY3Nw+ueff7Rs2TJdvnxZDRs2VPny5TV16lRFR0dnRn25xoIJI3Tj6tUs3++94SnyyOEsrwEAAABwdDYHJ2dnZz399NNas2aNTp06pRdffFHLly9XiRIl9PTTT+uLL75QYmJiZtSao52NPKkJvTrZPTzNHzc8y/cPAAAAOLoHmhzCz89PdevWVe3ateXk5KTffvtN3bt3V6lSpbRt27YMKjF36DVmik4dOWz38ORfIijL9w0AAAA4uvsKTmfPntX06dNVqVIlNWjQQLGxsVq3bp2OHz+uM2fOqHXr1urWrVtG15qjlShTTqMXfWL38BQ+anKW7xcAAABwdDYHp5YtWyowMFBLlixRr169dPr0aa1YsUKNGzeWJHl6emrw4ME6depUhheb05WpGmr38OTh6Znl+wQAAAAcnc3Byc/PT9u3b9fvv/+ugQMHqkCBAsnaBAQE6Pjx4xlSYG7jCOEJAAAAgCWbg1P9+vVVo0aNZMtv3bqlpUuXSpJMJpOCgrhW5n4RngAAAADHYnNweuGFFxQTE5Ns+ZUrV/TCCy9kSFEgPAEAAACOxObgZBiGTCZTsuX//POPfH19M6Qo3EF4AgAAAByDS3obhoaGymQyyWQyqVGjRnJx+e+hCQkJOn78uJ544olMKTI3SwpP43t00IRenTRq/sfy9Pa2d1kAAABArpLu4NSqVStJ0oEDB9SsWTN53zV4d3NzU3BwsNq0aZPhBYLwBAAAANhbuoPTmDFjJEnBwcFq3769PDw8Mq0oJEd4AgAAAOzH5mucunXrRmiyE655AgAAAOwjXcGpQIECunDhgiQpf/78KlCggNUbMhfhCQAAAMh66TpV73//+5/y5s1r/ndKs+oh63DaHgAAAJC10hWcunXrZv539+7dM6sW2IDwBAAAAGSddJ2qFxsbm+4bsg6n7QEAAABZI13BKV++fMqfP3+qt6Q2yFqEJwAAACDzpetUva1bt2Z2HXgAnLYHAAAAZK50Baf69etndh14QIQnAAAAIPOkKzj9+uuvqly5spycnPTrr7+m2rZq1aoZUhhsR3gCAAAAMke6glP16tUVHR0tPz8/Va9eXSaTSYZhJGtnMpmUkJCQ4UUi/QhPyK0iIyPNvzfnKAoVKqQSJUrYuwwAAJAB0hWcjh8/rsKFC5v/DcdGeEJuExkZqbLlyyvuxg17l2LBy8tLERERhCcAAHKAdAWnoKCgFP8Nx0V4Qm5y4cIFxd24oVfeelfFS5ZO12MijxzW/HHD5V8iSOGjJsvD0zNDa/rn2N+aPfRlXbhwgeAEAEAOkK7gdK/Dhw/rnXfeUUREhEwmk8qXL6/+/furXLlyGV0fHgDhCblN8ZKlVbJS+q6zLFmpqoqVLK3xPTpo2YxJ9A8AAJCqdP2O091Wr16typUra9++fapWrZqqVq2qX375RZUrV9ann36aGTXiAfA7T4B19A8AAJBeNgen1157TcOHD9dPP/2kmTNnaubMmdq5c6dGjBihYcOGZUaNeEAMDgHr6B8AACA9bA5O0dHR6tq1a7LlnTt3VnR0dIYUhYzH4BCwjv4BAADSYnNwatCggXbs2JFs+Q8//KB69eplSFHIHAwOAevoHwAAIDXpmhziyy+/NP/76aef1rBhw7Rv3z498sgjkqRdu3bp008/1bhx4zKnSmQYJowArKN/AAAAa9IVnFq1apVs2dy5czV37lyLZf369VPv3r0zpDBkHgaHgHX0DwAAkJJ0naqXmJiYrltCQkJm14sMwmlJgHX0DwAAcC+br3FCzsHgELCO/gEAAO52Xz+Ae+3aNW3fvl2RkZG6deuWxboBAwZkSGG5zebVH+vFdP5wZ0a697SkzoNHZnkNgKPitD0AAJDE5uC0f/9+tWjRQtevX9e1a9dUoEABXbhwQV5eXvLz8yM43aeNK5aqgF8Rte0zMMv3fffgcMGEEXojyysAHBfhCQAASPdxqt6rr76qli1b6tKlS/L09NSuXbt08uRJ1axZU9OnT8+MGnOFZh27asXsaVo9b5Zd9p80ODwbedIu+wccGaftAQAAm4PTgQMHNHjwYDk7O8vZ2VlxcXEKDAzUtGnTNGLEiMyoMVdo3LaTOr7ymt3DU68xU+yyb8DREZ4AAMjdbA5Orq6uMplMkiR/f39FRkZKknx9fc3/xv1p22eg3cNTiTLl7LJfIDsgPAEAkHvZHJxCQ0O1d+9eSVLDhg01evRoLV++XAMHDlSVKlUyvMDcxhHCEwDrCE8AAORONgenyZMnKyAgQJI0YcIEFSxYUH369NG5c+f0wQcfZHiBuRHhCXBshCcAAHIfm2fVCwsLM/+7cOHCWr9+fYYWhDuSZtdbMXuaxX0AjoHZ9gAAyF3u+wdwz507px07duiHH37Q+fPnM7Im/D+OPAGOjSNPAADkHjYHp9jYWHXp0kXFihVT/fr19dhjj6lo0aLq3LmzYmJiMqPGXI3wBDg2whMAALmDzcEpPDxcP//8s9atW6d///1XMTExWrdunfbu3atevXplRo25HuEJSJ/Nqz+2y34JTwAA5Hw2B6evv/5aixYtUrNmzeTj46O8efOqWbNmmj9/vr7++uvMqBEiPAHpsXHFUrv/iHRSeLp544Zd6gAAAJnD5skhChYsKF9f32TLfX19lT9//gwpCiljwgggdc06drVr/7h7wogFE/hBcAAAchKbg9Mbb7yhQYMGaenSpeZpyaOjozV06FCNGjUqwwuEJcITYF3jtp1UwK+IQ4Snsd2ey/J9AwCAzJOu4BQaGiqTyWS+f+TIEQUFBalEiRKSpMjISLm7u+v8+fN66aWXMqdSmBGeAOscoX+UqRqqXmOm6J3XX8nyfQMAgMyRruDUqlWrTCtg7ty5euuttxQVFaVKlSpp1qxZqlevXpqP+/HHH1W/fn1VrlxZBw4cyLT6HJUjDA4BR+UI/aNEmXJZvk8AAJB50hWcxowZkyk7X7lypQYOHKi5c+eqbt26ev/999W8eXMdOnTIfDQrJTExMeratasaNWqks2fPZkpt2YEjDA4BR0X/AAAAGcnma5yS7Nu3TxERETKZTKpYsaJCQ0Nt3sbMmTPVs2dPhYeHS5JmzZqljRs3at68eZoyZYrVx7300kvq1KmTnJ2dtXbt2vt9CjkCg0PAOvoHAADIKDYHp3PnzqlDhw7atm2b8uXLJ8MwFBMTo4YNG+qTTz5R4cKF07WdW7duad++fXr99dctljdt2lQ7d+60+rjFixfr6NGjWrZsmSZOnJjmfuLi4hQXF2e+Hxsbm676shMGh4B19A8AAJARbA5O/fv3V2xsrP744w9VqFBBknTo0CF169ZNAwYM0IoVK9K1nQsXLighIUH+/v4Wy/39/RUdHZ3iY44cOaLXX39dO3bskItL+kqfMmWKxo0bl6622RmDQ8A6+gcAAHhQNgenDRs2aPPmzebQJEkVK1bUnDlz1LRpU5sLuHu2PkkyDCPZMklKSEhQp06dNG7cOJUtWzbd2x8+fLgGDRpkvh8bG6vAwECb68wOGBwC1tE/AADAg7A5OCUmJsrV1TXZcldXVyUmJqZ7O4UKFZKzs3Oyo0vnzp1LdhRKkq5cuaK9e/dq//79evnll821GIYhFxcXffvtt3r88ceTPc7d3V3u7u7priu7Y3AIWEf/AAAA98vm4PT444/rlVde0YoVK1S0aFFJ0unTp/Xqq6+qUaNG6d6Om5ubatasqU2bNunZZ581L9+0aZOeeeaZZO19fHz022+/WSybO3euvvvuO61evVohISG2PpUci8EhYB39AwAA3A+bg9O7776rZ555RsHBwQoMDJTJZFJkZKSqVKmiZcuW2bStQYMGqUuXLgoLC1Pt2rX1wQcfKDIyUr1795Z05zS706dPa+nSpXJyclLlypUtHu/n5ycPD49ky8HgEEgN/QMAANjK5uAUGBioX375RZs2bdKff/4pwzBUsWJFNW7c2Oadt2/fXhcvXtT48eMVFRWlypUra/369QoKCpIkRUVFKTIy0ubt4g4Gh4B19A8AAGALm4JTfHy8PDw8dODAATVp0kRNmjR54AL69u2rvn37prhuyZIlqT527NixGjt27APXkJMxOASso38AAID0sik4ubi4KCgoSAkJCZlVDzIBg0PAOvoHAABID5tP1XvjjTc0fPhwLVu2TAUKFMiMmpAJGBwC1tE/AABAWmwOTm+//bb+/vtvFS1aVEFBQcqTJ4/F+l9++SXDikPGYnAIWEf/AAAAqbE5OD3zzDMp/kAtsgcGh4B19A8AAGCNzcGJyRiyPwaHgHX0DwAAkJJ0B6fr169r6NChWrt2rW7fvq3GjRvr7bffVqFChTKzPmQSBoeAdfQPAABwr3QHpzFjxmjJkiV6/vnn5eHhoRUrVqhPnz769NNPM7M+ZCIGh4B19A8AAHC3dAenNWvWaOHCherQoYMkqXPnzqpbt64SEhLk7OycaQXmFpFHDqtkpapZvt97B4c1Hns8y2sAHBXhCQAAJEl3cDp16pTq1atnvl+rVi25uLjozJkzCgwMzJTicpP544arWMnSKlM1NMv3fffg8NK5aA3J8goAx0V4AgAAkg3BKSEhQW5ubpYPdnFRfHx8hheVG/mXCNL4Hh00etEndg9PACwRngAAQLqDk2EY6t69u9zd3c3Lbt68qd69e1v8ltOaNWsytsJcInzUZC2bMcnu4enSuWhpxdIs3zfg6AhPAADkbukOTt26dUu2rHPnzhlaTG7m4empUfM/1oRenewanhq37URwAqwgPAEAkHulOzgtXrw4M+uAJE9vb4cITwCsIzwBAJA7Odm7AFhKCk+BZcppfI8OOvLrfnuXBOAebfsMVMdXXtOK2dO0et4se5cDAACyAMHJARGeAMdHeAIAIHchODkowhPg+AhPAADkHgQnB0Z4Ahwf4QkAgNyB4OTgCE9A+kUeOWyX/RKeAADI+QhO2QDhCUif+eOG261/EJ4AAMjZCE7ZBOEJSJt/iSC79o+7w9Pm1R/bpQYAAJA5CE7ZCOEJSF34qMl27x9J4WkjPyQNAECOQnDKZghPgHUenp4O0T/a9hmoZh272mXfAAAgcxCcsiHCE2Cdo/SPxm072WW/AAAgcxCcsilHGRwCjoj+AQAAMhrBKRtjcAhYR/8AAAAZieCUzTE4BKyjfwAAgIxCcMoBGBwC1tE/AABARiA45RAMDgHr6B8AAOBBEZxyEAaHgHX0DwAA8CAITjkMg0PAOvoHAAC4XwSnHIjBIWAd/QMAANwPglMOxeAQsI7+AQAAbEVwysEYHALW0T8AAIAtCE45HINDwDr6BwAASC+CUy7A4BCwjv4BAADSg+CUSzA4BKyjfwAAgLQQnHIRBoeAdfQPAACQGoJTLsPgELCO/gEAAKwhOOVCDA4B6+gfAAAgJQSnXIrBIWAd/QMAANyL4OQgbt64keX7ZHAIWEf/AAAAdyM4OYgFE0boxtWrWb7feweHkUcOZ3kNgKMiPAEAgCQEJwdxNvKkJvTqZPfwNH/c8CzfP+DICE8AAEAiODmMXmOm6NSRw3YPT/4lgrJ834CjIzwBAACCk4MoUaacRi/6xO7hKXzU5CzfL5AdEJ4AAMjdCE4OpEzVULuHJw9PzyzfJ5BdEJ4AAMi9CE4OxhHCEwDrCE8AAOROBCcHRHgCHBvhCQCA3Ifg5KAIT4BjIzwBAJC7EJwcGOEJcGyEJwAAcg+Ck4MjPAHpd/PGjSzfJ+EJAIDcgeCUDRCegPRZMGGE3X9EmvAEAEDORHDKJghPQNrORp60+49IJ4WnyCOHs7wGAACQeQhO2QjhCUhdrzFT7P4j0knhaf644Vm+fwAAkHkITtkM4QmwrkSZcnbvH0nhyb9EUJbvGwAAZB6CUzZEeAKsc4T+4entrfBRk7N8vwAAIPMQnLIpRxgcAo7KEfqHh6dnlu8TAABkHoJTNuYIg0PAUdE/AABARiI4ZXMMDgHr6B8AACCjEJxyAAaHgHX0DwAAkBEITjkEg0PAOvoHAAB4UASnHITBIWAd/QMAADwIglMOw+AQsI7+AQAA7hfBKQdicAhYR/8AAAD3g+CUQzE4BKyjfwAAAFsRnHIwBoeAdfQPAABgC4JTDsfgELCO/gEAANKL4JQLMDgErKN/AACA9CA45RIMDgHr6B8AACAtBKdchMEhYB39AwAApIbglMswOASso38AAABrCE65EINDwDr6BwAASAnBKZdicAhYR/8AAAD3IjjlYgwOAevoHwAA4G4EJwexefXHdtnvvYPDmzdu2KUOwBERngAAQBKCk4PYuGKpVs+bZZd93z04XDBhhF1qABwV4QkAAEgEJ4fRrGNXrZg9ze7h6WzkSbvsH3BkhCcAAGD34DR37lyFhITIw8NDNWvW1I4dO6y2XbNmjZo0aaLChQvLx8dHtWvX1saNG7Ow2szTuG0ndXzlNbuHp15jpthl34CjIzwBAJC72TU4rVy5UgMHDtTIkSO1f/9+1atXT82bN1dkZGSK7b///ns1adJE69ev1759+9SwYUO1bNlS+/fvz+LKM0fbPgPtHp5KlClnl/0C2QHhCQCA3MuuwWnmzJnq2bOnwsPDVaFCBc2aNUuBgYGaN29eiu1nzZql1157TQ899JDKlCmjyZMnq0yZMvrqq6+yuPLM4wjhCYB1hCcAAHInuwWnW7duad++fWratKnF8qZNm2rnzp3p2kZiYqKuXLmiAgUKWG0TFxen2NhYi5ujIzwBjo3wBABA7mO34HThwgUlJCTI39/fYrm/v7+io6PTtY0ZM2bo2rVrateundU2U6ZMka+vr/kWGBj4QHVnFcIT4NgITwAA5C52nxzCZDJZ3DcMI9mylKxYsUJjx47VypUr5efnZ7Xd8OHDFRMTY76dOnXqgWvOKoQnwLERngAAyD3sFpwKFSokZ2fnZEeXzp07l+wo1L1Wrlypnj17atWqVWrcuHGqbd3d3eXj42Nxy04IT4BjIzwBAJA72C04ubm5qWbNmtq0aZPF8k2bNqlOnTpWH7dixQp1795dH3/8sZ588snMLtMhEJ6A9Nm8+mO77JfwBABAzmfXU/UGDRqkBQsWaNGiRYqIiNCrr76qyMhI9e7dW9Kd0+y6du1qbr9ixQp17dpVM2bM0COPPKLo6GhFR0crJibGXk8hyxCegLRtXLHU7j8inRSebt64YZc6AABA5nCx587bt2+vixcvavz48YqKilLlypW1fv16BQUFSZKioqIsftPp/fffV3x8vPr166d+/fqZl3fr1k1LlizJ6vKzXNs+AyVJK2ZPs7gP4I5mHbvatX8khafxPTpowYQRWb5/AACQeewanCSpb9++6tu3b4rr7g1D27Zty/yCHBzhCbCucdtOKuBXxCHC09huz2X5vgEAQOaxe3CC7QhPgHWO0D/KVA1VrzFT9M7rr2T5vgEAQOYgOGVTjjA4BByVI/SPEmXKZfk+AQBA5iE4ZWOOMDgEHBX9AwAAZCSCUzbH4BCwjv4BAAAyCsEpB2BwCFhH/wAAABmB4JRDMDgErKN/AACAB0VwykEYHALW0T8AAMCDIDjlMAwOAevoHwAA4H4RnHIgBoeAdfQPAABwPwhOORSDQ8A6+gcAALAVwSkHY3AIWEf/AAAAtiA45XAMDgHr6B8AACC9CE65AINDwDr6BwAASA+CUy7B4BCwjv4BAADSQnDKRRgcAtbRPwAAQGoITrkMg0PAOvoHAACwhuCUCzE4BKyjfwAAgJQQnHIpBoeAdfQPAABwL4JTLsbgELCO/gEAAO5GcHIQkUcOq2Slqlm+33sHhzUeezzLawAcFeEJAAAkITg5iPnjhqtYydIqUzU0y/d99+Dw0rloDcnyCgDHRXgCAAASwclh+JcI0vgeHTR60Sd2D08ALBGeAACAk70LwB3hoyYrsEw5je/RQUd+3W+XGtr2GahmHbvaZd+Ao2vbZ6A6vvKaVsyeptXzZtm7HAAAkMVy7xGna9ckZ+fky52dJQ8Py3bWODlJnp731/b6dckw5HTjhrwk5TWZNPbtBZra7wW99UJ7DV280nzkyfnGdcmwsl2TlODp9d9ubt6QKdFaYynBK/W2zZ9qLa1Yav152FNcnBQfb329p+ed11mSbt2Sbt/OmLYeHv99Vmxpe/v2nfbWuLtLLi62t42Pv/NaWOPmJrm62t42IUG6edN6W1fXO+1tbZuYKN24kTFtXVzuvBaSZBh3+pFk7keuN2/K+f+XGS7OSnT7r61zKts1nJ2U6P5fv0/axr3ad3tRrvHxWnrXkSdrbV1v3pTHvQvv4zsiRSaTdFdftqntjRt3Xmdr8uS5v7Y3b975XGREWy+vO3VLafd7W9ryHXFHLvyOeOC2towNsngckSK+I+6vLd8Rd+S274jU+t29jFwmJibGkGTE3Hm5kt9atLB8gJdXyu0kw6hf37JtoULW24aFWbYNCrLa9i8PD8PLO6/x5qqvjc/+PGPElC5rte3VosWNz/48Y75dqlzNatub+QtYtD33UG3r9TrazTAMo2/f1NscP/7f6ztkSOptf//9v7ZjxqTedvfu/9pOm5Z6261b/2v77rupt1237r+2ixen3nbVqv/arlqVetvFi/9ru25d6m3fffe/tlu3pt522rT/2u7enXrbMWP+a/v776m3HTLkv7bHj6fetm/f/9qeO5dq2xOt2pk/62t/+TvVtqeaPWXRN1JrG1W/kdHxldcMSUbHV14zbnt6Wm27VTL27dv3X80Z9B1hVKxo2bZiRettg4Is24aFWW9bqJBl2/r1rbf18rJs26JF6u/d3dq2Tb3t1av/te3WLfW2587915bviDv4jrgjje8Io1u3/9pevZp627ZtDQuptXWAcQTfEXfd+I64c+M74s4the+IGMmQZMTExBhpyb1HnBxY4aLFFeibz3zNU2N7FwTAwt3XPC1ycc3Fh+4BAMg9TIZhGPYuIivFxsbK19dXMWfOyMfHJ3mDLD7EfuDAAdV99FFNXr5WwRUq31lnkq4mJGpCr046deSwxs9botKVqqW83Qw+Ve9ExO965flW1p+HvRgGh9g5xG711JqU+lFmnKp3b9vV82bpi9nT1K7vQLUKf9mi3YmI3/X686304759qlGjxp2FnIaTvrachnMH3xG2t+VUvTv4jri/tnxH3JHLviNiY2PlW7SoYmJiUs4Gdz881bU5WZ48lp00tXa2bDO9/v9LKtHTU9cl3fbwsAg1npJGzf9YE3p10ug+3dM9216ih2eabVJre/vuL3tH4+7+34c9LW5u/3Uie7V1df3vyyQj27q4/Pfll5FtnZ3T/xm2pa2TU+a0NZnMba31o7vbprjcivS2TTrytGT2NMW5ulnMtnfbw0PJ/pdwH98RGd7WM/3fETa1teW7w5a2tvR7viPu4Dvijru+IzK0reQYbfmOuIPvCNvb8h1xR1K/Ty2k37v5dLdElvP09tao+R/bfbY9ANYx2x4AALkDwcnBEZ6A9Is8ctgu+yU8AQCQ8xGcsgHCE5A+88cNt+vvoBGeAADIuQhO2QThCUibf4kgu/+IdFJ42rz6Y7vUAAAAMgfBKRshPAGpCx812e79Iyk8bXTUH5IGAAD3heCUzRCeAOs8PD0don+07TNQzTp2tcu+AQBA5iA4ZUOEJ8A6R+kfjdt2sst+AQBA5iA4ZVOOMjgEHBH9AwAAZDSCUzbG4BCwjv4BAAAyEsEpm2NwCFhH/wAAABmF4JQDMDgErKN/AACAjEBwyiEYHALW0T8AAMCDIjjlIAwOAevoHwAA4EEQnHIYBoeAdfQPAABwvwhOORCDQ8A6+gcAALgfBKccisEhYB39AwAA2IrglIMxOASso38AAABbEJxyOAaHgHX0DwAAkF4Ep1yAwSFgHf0DAACkB8Epl2BwCFhH/wAAAGkhOOUiDA4B6+gfAAAgNQSnXIbBIWAd/QMAAFhDcMqFGBwC1tE/AABASghOuRSDQ8A6+gcAALgXwclB3LxxI8v3yeAQsI7+AQAA7kZwchALJozQjatXs3y/9w4OI48czvIaAEdFeAIAAEkITg7ibORJTejVye7haf644Vm+f8CREZ4AAIBEcHIYvcZM0akjh+0envxLBGX5vgFHR3gCAAAEJwdRokw5jV70id3DU/ioyVm+XyA7IDwBAJC7EZwcSJmqoXYPTx6enlm+TyC7IDwBAJB7EZwcjCOEJwDWEZ4AAMidCE4OiPAEODbCEwAAuQ/ByUERngDHRngCACB3ITg5MMIT4NgITwAA5B4EJwdHeALS7+aNG1m+T8ITAAC5A8EpGyA8AemzYMIIu/+INOEJAICcieCUTRCegLSdjTxp9x+RTgpPkUcOZ3kNAAAg8xCcshHCE5C6XmOm2P1HpJPC0/xxw7N8/wAAIPMQnLIZwhNgXYky5ezeP5LCk3+JoCzfNwAAyDwEp2yI8ARY5wj9w9PbW+GjJmf5fgEAQOYhOGVTjjA4BByVI/QPD0/PLN8nAADIPASnbMwRBoeAo6J/AACAjERwyuYYHALW0T8AAEBGITjlAAwOAevoHwAAICMQnHIIBoeAdfQPAADwoAhOOQiDQ8A6+gcAAHgQBKcchsEhYB39AwAA3C+CUw7E4BCwjv4BAADuB8Eph2JwCFhH/wAAALaye3CaO3euQkJC5OHhoZo1a2rHjh2ptt++fbtq1qwpDw8PlSxZUu+9914WVZr9MDgErKN/AAAAW9g1OK1cuVIDBw7UyJEjtX//ftWrV0/NmzdXZGRkiu2PHz+uFi1aqF69etq/f79GjBihAQMG6LPPPsviyrMPBoeAdfQPAACQXnYNTjNnzlTPnj0VHh6uChUqaNasWQoMDNS8efNSbP/ee++pRIkSmjVrlipUqKDw8HD16NFD06dPz+LKsxcGh4B19A8AAJAeLvba8a1bt7Rv3z69/vrrFsubNm2qnTt3pviYn376SU2bNrVY1qxZMy1cuFC3b9+Wq6trssfExcUpLi7OfD8mJkaSFBsb+6BPIUNc/f9B2tFDv+nm9WuZuq8uQ97QkjfHaniHp9T1tTHy8PRI1ub0iWNyjFfmHnZ+v6KjoxUdHW3XGu5VpEgRFSlSxN5lOISM6Efp6R+2OH3imLk2R/m+sTf6kePjPXJ8vEfZg6O9T7xH1iX9P9owjLQbG3Zy+vRpQ5Lx448/WiyfNGmSUbZs2RQfU6ZMGWPSpEkWy3788UdDknHmzJkUHzNmzBhDEjdu3Lhx48aNGzdu3LileDt16lSa+cVuR5ySmEwmi/uGYSRbllb7lJYnGT58uAYNGmS+n5iYqEuXLqlgwYKp7ie3io2NVWBgoE6dOiUfHx97lwMreJ8cH++R4+M9cny8R46P98jx8R6lzjAMXblyRUWLFk2zrd2CU6FCheTs7JzsMOa5c+fk7++f4mOKFCmSYnsXFxcVLFgwxce4u7vL3d3dYlm+fPnuv/BcwsfHh86VDfA+OT7eI8fHe+T4eI8cH++R4+M9ss7X1zdd7ew2OYSbm5tq1qypTZs2WSzftGmT6tSpk+Jjateunaz9t99+q7CwsBSvbwIAAACAjGDXWfUGDRqkBQsWaNGiRYqIiNCrr76qyMhI9e7dW9Kd0+y6du1qbt+7d2+dPHlSgwYNUkREhBYtWqSFCxdqyJAh9noKAAAAAHIBu17j1L59e128eFHjx49XVFSUKleurPXr1ysoKEiSFBUVZfGbTiEhIVq/fr1effVVzZkzR0WLFtXbb7+tNm3a2Osp5Dju7u4aM2ZMstMb4Vh4nxwf75Hj4z1yfLxHjo/3yPHxHmUck2GkZ+49AAAAAMi97HqqHgAAAABkBwQnAAAAAEgDwQkAAAAA0kBwAgAAAIA0EJwAAAAAIA0EJwAAADywmzdvavr06fYuA2k4cOCAvUvItpiOHKn67bfftHDhQs2aNcvepeRaX331lVq2bGnvMmBF69at09VuzZo1mVwJkL317NlTL774oh5++OEU11++fFlt2rTRd999l8WV4W4XLlzQzz//LFdXVzVq1EjOzs66ffu25s6dqylTpig+Pl4XLlywd5m4R0xMjJYvX64FCxbo4MGDSkhIsHdJ2RLBCcnExsZqxYoVWrhwofbu3auqVavy1wk7cnd3V+fOnTV79mx5e3vbuxzc44UXXkhXu8WLF2dyJUjN0qVL09Wua9eumVwJrHFycpK7u7vmzp2bYr86e/asihYtyoDPjnbu3Kknn3xSMTExMplMCgsL0+LFi9WqVSslJiZq4MCB6tGjh7y8vOxdKv7fd999p0WLFmnNmjUKCgpSmzZt1KZNG4WGhtq7tGyJ4ASz7du3a+HChfrss8908+ZNDR06VOHh4SpdurS9S8vVDh48qBdeeEGXL1/WkiVLVL9+fXuXBGQ7+fPnt7rOZDLp2rVrio+PZ1BuR05OTho1apSmTJmiPn366H//+5+cnP67ooDgZH+NGjVS4cKF9cYbb2jRokWaNWuWgoODNXbsWHXp0kUmk8neJULSP//8oyVLlmjRokW6du2a2rVrp/fee08HDx5UxYoV7V1etsY1TrlcVFSUJk+erNKlS6tDhw4qVKiQtm/fLicnJ3Xt2pXQ5ACqVaum3bt3q1u3bmrWrJkGDx6sS5cuKTY21uIGxxQREaGSJUvau4xc7/LlyyneDh06pHbt2skwDDVp0sTeZeZ6/fr106ZNm/TJJ5+oadOmunTpkr1Lwl0OHjyoUaNGqXLlypo4caJMJpOmTp2qrl27EpocRIsWLVSxYkUdOnRI77zzjs6cOaN33nnH3mXlGASnXC4kJEQRERGaM2eOTp8+rZkzZyosLMzeZeEeLi4uGjt2rL788kvNnj1bhQsXVv78+ZU/f37ly5cv1b+mw75u3bqlkydP2rsM3OPKlSt64403VLZsWR04cEAbN27Uhg0b7F0WJNWvX1+7d+/WpUuX9NBDD+n333+3d0n4f5cuXVLhwoUlSV5eXvLy8uKULwfz7bffKjw8XOPGjdOTTz4pZ2dne5eUo7jYuwDYV1BQkH744QeVKFFCQUFBKl++vL1LghVr1qxRnz599Nhjj2nkyJFycaH7Ara6deuW3n33XU2ePFmFChXS4sWL1bZtW3uXhXsEBQXpxx9/VI8ePVS7dm19+OGHqlu3rr3LyvVMJpOuXLkiDw8PGYYhk8mk69evJzvrwcfHx04VYseOHVq0aJHCwsJUvnx5denSRe3bt7d3WTkGI69c7vDhw/rxxx+1cOFCPfTQQypbtqw6d+4sSRx2dxD//vuv+vbtqy+//FKTJk3SK6+8Yu+SgGzHMAwtXbpUo0ePVnx8vCZPnqyePXvy11gHcu//czw9PbVixQpNnTpVHTp0UHh4uJ0qQxLDMFS2bFmL+3cfcUoKU1yHZj+1a9dW7dq1NXv2bH3yySdatGiRBg0apMTERG3atEmBgYHKmzevvcvMtpgcAmZXr17VihUrtGjRIv3888+qX7++OnXqpFatWpkPzSPrFS1aVCVKlNCHH36ocuXKpdjm/PnzvEcO6uDBg6pRowYDCTurWrWqjh49qv79+2vgwIFWZ/3iL+X24+TkpOjoaPn5+SVbt2HDBnXq1EkxMTH0JTvavn17utoxiZFjOXz4sBYuXKiPPvpI//77r5o0aaIvv/zS3mVlSwSnXO6XX35RjRo1ki2PiIgwd7JLly7p9u3bdqgOkjRx4kQNHz482V/GDcPQN998owULFujrr79WXFycnSrM3fLnz5/q0dn4+Hhdu3aNwZ6d3T07W0rvF38pt78PP/xQHTp0kLu7e4rrjxw5ohUrVmj06NFZXBmQMyQkJOirr77S4sWL9cUXX9i7nGyJ4JTLubm5adSoURo5cqTFwCJJfHy8vvzyy3T/yCcy37Fjx7Ro0SJ9+OGHunr1qp588km1adNGzz77rL1Ly5U+/PDDdLXr1q1bJleC1PCX8uznwoULMplMKliwoL1Lwf9btWqVWrVqJTc3N0nSiRMnFBgYaP7D3vXr1/Xuu+/qtddes2eZSMVnn32mcePG6ddff7V3KdkSwSmXW79+vV566SUVLVpUH330kcW5y3AcN2/e1OrVq7VgwQLt2rVLTZo00TfffKMDBw6ocuXK9i4PaYiPj2cyDyAd/v33X40cOVIrV67U5cuXJd05qtuhQwdNnDhR+fLls2+BuZyzs7OioqLMp1P6+PjowIED5p9c4Le2HMP8+fP17bffytXVVa+88ooefvhhfffddxo8eLAOHz6srl276r333rN3mdkS/yfP5Vq0aKHff/9dr7zyimrUqKEpU6aof//+9i4Ld+nbt68++eQTlStXTp07d9Znn32mggULytXVNcWjhHAchw4d0sKFC7Vs2TKdPXvW3uVA0unTp/XZZ5/pr7/+kslkUtmyZdW6dWsVK1bM3qXlepcuXVLt2rV1+vRpPf/886pQoYIMw1BERISWLFmiLVu2aOfOnfz8gh3d+7d2/vbueKZPn64RI0aoatWqioiI0BdffKGRI0dq5syZ6t+/v/r166dChQrZu8zsywD+36effmo4OzsbPj4+Rv78+S1usB9nZ2djxIgRRmxsrMVyFxcX448//rBTVbDmypUrxvz5841HHnnEcHZ2NurWrWvMnDnT3mXBMIw5c+YY7u7uhslkMvLly2f4+voaJpPJcHd3N+bMmWPv8nK9V155xahcubIRHR2dbF1UVJRRpUoVY+DAgXaoDElMJpNx9uxZ831vb2/j6NGj5vvR0dGGk5OTPUrD/ytfvryxcOFCwzAMY+vWrYbJZDIaNWpkXL582b6F5RAccYIkac+ePRo1apTKli2rwYMHc1qRA1m6dKkWL16sgIAAPfnkk+rSpYueeOIJe5eFe/zwww9asGCBPvvsM4WEhOjQoUPavn07vz3jIL7++msNGDBAAwcO1ODBgxUQECBJioqK0ltvvaVXXnlFwcHBatGihZ0rzb3Wrl2r999/X/7+/snWFSlSRNOmTVPv3r31v//9zw7VAdnDyZMn1bhxY0lSgwYN5OrqqkmTJnGaawZhdJzLxcfHa8yYMZo+fbr69eunyZMny8PDw95l4S6dOnVSp06ddOLECS1evFj9+vXT9evX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K3MQzp10EI6IiFRGhZOIiNR4I0aMqPQanagnIiIV0eEQIiIiIiIildAeJxERERERkUqocBIREREREamECicREREREZFKqHASEZEay2QysXHjRqNjiIhIDaDCSUREHFZeXh4TJkzA19eXunXr0qxZM0JCQti1a5fR0UREpIbRceQiIuKQTp8+Tbdu3fDw8GDBggUEBgZy/fp1du7cybhx4zh27JjREUVEpAbRjJOIiDiksWPHYjKZOHDgAIMGDcLf35+AgACmTJlCWlraPb9mxowZ+Pv706BBA3x9fZkzZw7Xr1+3jx8+fJhevXrh5uaGu7s7jz/+OJ988gkAX331FSEhIXh6euLq6kpAQADbt2+vkvcqIiLG04yTiIg4nPz8fHbs2EFMTAyurq53jXt4eNzz69zc3EhISKBJkyZkZWXx8ssv4+bmxvTp0wF44YUX6NixI++88w4uLi5kZGRQu3ZtAMaNG8e1a9fYs2cPrq6uHDlyBIvF8tDeo4iIVC8qnERExOF88cUX2Gw22rRp86O+bvbs2fbHLVq0YOrUqaxZs8ZeOGVnZ/OHP/zB/u/18/OzX5+dnc3AgQPp0KEDAL6+vg/6NkRExIFoqZ6IiDgcm80G3Do178dISkriySefxMfHB4vFwpw5c8jOzraPT5kyhYiICPr27ctrr73GyZMn7WO///3vmT9/Pt26dSMqKorMzMyf5s2IiIhDUOEkIiIOx8/PD5PJxNGjR+/7a9LS0hgyZAhWq5WtW7fy2WefERkZybVr1+zXREdH87///Y9nnnmG5ORk2rVrx4cffghAREQEX375JcOGDSMrK4tOnTrx9ttv/+TvTUREqieT7fZtOxEREQditVrJysri888/v2ufU2FhIR4eHphMJj788ENCQ0N58803Wbp0aZlZpIiICJKSkigsLLzn3zF06FCKi4vZvHnzXWOzZs1i27ZtmnkSEXESmnESERGHtHTpUkpLS+ncuTPr16/nxIkTHD16lCVLltC1a9e7rn/00UfJzs5m9erVnDx5kiVLlthnkwBKSkoYP348u3fv5quvviI1NZWDBw/Stm1bACZNmsTOnTs5deoUhw4dIjk52T4mIiI1nw6HEBERh9SyZUsOHTpETEwMU6dO5cyZM/z85z/n8ccf55133rnr+ueee47Jkyczfvx4rl69yjPPPMOcOXOIjo4GwMXFhYsXLzJ8+HDOnj2Ll5cXAwYMYN68eQCUlpYybtw4vv76a9zd3QkKCmLRokVV+ZZFRMRAWqonIiIiIiJSCS3VExERERERqYQKJxERERERkUqocBIREREREamECicREREREZFKqHASERERERGphAonERERERGRSqhwEhERERERqYQKJxERERERkUqocBIREREREamECicREREREZFKqHASERERERGphAonERERERGRSvwfEmy77dK2aj8AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x=list(range(len(y_test_predictions[id])))\n", "\n", "bar_width = 0.35\n", "\n", "plt.figure(figsize=(10, 6))\n", "\n", "plt.bar(x, y_test_predictions[id], width=bar_width, color='lightblue', label='Predicted Probabilities')\n", "plt.bar(x, accepted_test_set, width=bar_width, color='lightblue', edgecolor='black', hatch='\\\\', label='Conformal Predicted Classes')\n", "plt.axhline(y=1-qhat, color='red', linestyle='--', label=f'1-qhat = {1-qhat:.3f}')\n", "\n", "plt.bar([i + bar_width for i in x], true_bar_heights, width=bar_width, color='red', label='True Class')\n", "\n", "xticks_positions = [i + bar_width / 2 for i in x]\n", "plt.xticks(xticks_positions, beans_names, rotation=90, fontsize=10)\n", "\n", "plt.xlabel('Class')\n", "plt.ylabel('Probability Estimates')\n", "plt.title('Probability estimates for a test data point')\n", "plt.legend()\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.3" } }, "nbformat": 4, "nbformat_minor": 2 }