evaluate_QA_classifications.ipynb•126 kB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<center>\n",
" <p style=\"text-align:center\">\n",
" <img alt=\"phoenix logo\" src=\"https://storage.googleapis.com/arize-phoenix-assets/assets/phoenix-logo-light.svg\" width=\"200\"/>\n",
" <br>\n",
" <a href=\"https://arize.com/docs/phoenix/\">Docs</a>\n",
" |\n",
" <a href=\"https://github.com/Arize-ai/phoenix\">GitHub</a>\n",
" |\n",
" <a href=\"https://arize-ai.slack.com/join/shared_invite/zt-2w57bhem8-hq24MB6u7yE_ZF_ilOYSBw#/shared-invite/email\">Community</a>\n",
" </p>\n",
"</center>\n",
"<h1 align=\"center\">Q&A Classification Evals</h1>\n",
"\n",
"The purpose of this notebook is:\n",
"\n",
"- to evaluate the performance of an LLM-assisted approach to detecting issues with Q&A systems on retrieved context data\n",
"- to provide an experimental framework for users to iterate and improve on the default classification template.\n",
"\n",
"## Install Dependencies and Import Libraries"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#####################\n",
"## N_EVAL_SAMPLE_SIZE\n",
"#####################\n",
"# Eval sample size determines the run time\n",
"# 100 samples: GPT-4 ~ 80 sec / GPT-3.5 ~ 40 sec\n",
"# 1,000 samples: GPT-4 ~15-17 min / GPT-3.5 ~ 6-7min (depending on retries)\n",
"# 10,000 samples GPT-4 ~170 min / GPT-3.5 ~ 70min\n",
"N_EVAL_SAMPLE_SIZE = 100"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"!pip install -qq \"arize-phoenix-evals\" \"openai>=1\" ipython matplotlib pycm scikit-learn tiktoken nest_asyncio 'httpx<0.28'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ℹ️ To enable async request submission in notebook environments like Jupyter or Google Colab, optionally use `nest_asyncio`. `nest_asyncio` globally patches `asyncio` to enable event loops to be re-entrant. This is not required for non-notebook environments.\n",
"\n",
"Without `nest_asyncio`, eval submission can be much slower, depending on your organization's rate limits. Speed increases of about 5x are typical."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import nest_asyncio\n",
"\n",
"nest_asyncio.apply()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"from getpass import getpass\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import openai\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from pycm import ConfusionMatrix\n",
"from sklearn.metrics import classification_report\n",
"\n",
"from phoenix.evals import (\n",
" QA_PROMPT_RAILS_MAP,\n",
" QA_PROMPT_TEMPLATE,\n",
" OpenAIModel,\n",
" download_benchmark_dataset,\n",
" llm_classify,\n",
")\n",
"\n",
"pd.set_option(\"display.max_colwidth\", None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Download Benchmark Dataset\n",
"\n",
"\n",
"\n",
"- Squad 2:\n",
"The 2.0 version of the large-scale dataset Stanford Question Answering Dataset (SQuAD 2.0) allows researchers to design AI models for reading comprehension tasks under challenging constraints.\n",
"https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/reports/default/15785042.pdf\n",
"- Supplemental Data to Sqaud 2: In order to check the case of detecting incorrect answers, we created wrong answers based on the context data. The wrong answers are intermixed with right answers.\n",
"- sampled_answer is a sampled column of randomly original Squad 2 or incorrect answers"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"df = download_benchmark_dataset(task=\"qa-classification\", dataset_name=\"qa_generated_dataset\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- **question**: This is the question the Q&A system is running against\n",
"- **sampled_answer**: This is a random sample of correct_answer from Squad 2 or wrong_answer which is a made up incorrect answer. This is the column we test against as it has wrong and right answers.\n",
"- **correct_answer**: True if answer is correct, False if not. The ground truth to test against.\n",
"- **answers**: This is the right answer to the question.\n",
"- **wrong_answer**: This is an incorrect answer generated by the context.\n",
"- **context**: This is the context to be used to answer the question, and is what Q&A Eval must use to check the correct answer.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>title</th>\n",
" <th>context</th>\n",
" <th>question</th>\n",
" <th>answers</th>\n",
" <th>correct_answer</th>\n",
" <th>wrong_answer</th>\n",
" <th>sampled_answer</th>\n",
" <th>answer_true</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>57317e8d497a881900248f87</td>\n",
" <td>Mosaic</td>\n",
" <td>Jerusalem with its many holy places probably had the highest concentration of mosaic-covered churches but very few of them survived the subsequent waves of destructions. The present remains do not do justice to the original richness of the city. The most important is the so-called \"Armenian Mosaic\" which was discovered in 1894 on the Street of the Prophets near Damascus Gate. It depicts a vine with many branches and grape clusters, which springs from a vase. Populating the vine's branches are peacocks, ducks, storks, pigeons, an eagle, a partridge, and a parrot in a cage. The inscription reads: \"For the memory and salvation of all those Armenians whose name the Lord knows.\" Beneath a corner of the mosaic is a small, natural cave which contained human bones dating to the 5th or 6th centuries. The symbolism of the mosaic and the presence of the burial cave indicates that the room was used as a mortuary chapel.</td>\n",
" <td>When was the Armenian Mosaic re-discovered?</td>\n",
" <td>1894</td>\n",
" <td>True</td>\n",
" <td>The Armenian Mosaic was re-discovered in 1920.</td>\n",
" <td>1894</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>56cfabed234ae51400d9be49</td>\n",
" <td>New_York_City</td>\n",
" <td>The first non-Native American inhabitant of what would eventually become New York City was Dominican trader Juan Rodriguez (transliterated to Dutch as Jan Rodrigues). Born in Santo Domingo of Portuguese and African descent, he arrived in Manhattan during the winter of 1613–1614, trapping for pelts and trading with the local population as a representative of the Dutch. Broadway, from 159th Street to 218th Street, is named Juan Rodriguez Way in his honor.</td>\n",
" <td>Who was the first non-Indian person to live in what is now NYC?</td>\n",
" <td>Juan Rodriguez</td>\n",
" <td>True</td>\n",
" <td>The first non-Indian person to live in what is now NYC was Italian explorer Christopher Columbus.</td>\n",
" <td>Juan Rodriguez</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>571a2c554faf5e1900b8a8f6</td>\n",
" <td>Memory</td>\n",
" <td>Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning.</td>\n",
" <td>Which part of the brain does short-term memory seem to rely on?</td>\n",
" <td>frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe</td>\n",
" <td>True</td>\n",
" <td>The cerebellum</td>\n",
" <td>frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>57301bf5b2c2fd1400568889</td>\n",
" <td>Roman_Republic</td>\n",
" <td>In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship.</td>\n",
" <td>What provided the Roman senate with exuberance?</td>\n",
" <td>successes against Catiline</td>\n",
" <td>True</td>\n",
" <td>The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.</td>\n",
" <td>The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>572f8ee0b2c2fd14005681f6</td>\n",
" <td>Armenia</td>\n",
" <td>The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh.</td>\n",
" <td>What area did the Hasan-jalalians command?</td>\n",
" <td>Artsakh and Utik</td>\n",
" <td>True</td>\n",
" <td>The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor.</td>\n",
" <td>Artsakh and Utik</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id title \\\n",
"0 57317e8d497a881900248f87 Mosaic \n",
"1 56cfabed234ae51400d9be49 New_York_City \n",
"2 571a2c554faf5e1900b8a8f6 Memory \n",
"3 57301bf5b2c2fd1400568889 Roman_Republic \n",
"4 572f8ee0b2c2fd14005681f6 Armenia \n",
"\n",
" context \\\n",
"0 Jerusalem with its many holy places probably had the highest concentration of mosaic-covered churches but very few of them survived the subsequent waves of destructions. The present remains do not do justice to the original richness of the city. The most important is the so-called \"Armenian Mosaic\" which was discovered in 1894 on the Street of the Prophets near Damascus Gate. It depicts a vine with many branches and grape clusters, which springs from a vase. Populating the vine's branches are peacocks, ducks, storks, pigeons, an eagle, a partridge, and a parrot in a cage. The inscription reads: \"For the memory and salvation of all those Armenians whose name the Lord knows.\" Beneath a corner of the mosaic is a small, natural cave which contained human bones dating to the 5th or 6th centuries. The symbolism of the mosaic and the presence of the burial cave indicates that the room was used as a mortuary chapel. \n",
"1 The first non-Native American inhabitant of what would eventually become New York City was Dominican trader Juan Rodriguez (transliterated to Dutch as Jan Rodrigues). Born in Santo Domingo of Portuguese and African descent, he arrived in Manhattan during the winter of 1613–1614, trapping for pelts and trading with the local population as a representative of the Dutch. Broadway, from 159th Street to 218th Street, is named Juan Rodriguez Way in his honor. \n",
"2 Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning. \n",
"3 In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship. \n",
"4 The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh. \n",
"\n",
" question \\\n",
"0 When was the Armenian Mosaic re-discovered? \n",
"1 Who was the first non-Indian person to live in what is now NYC? \n",
"2 Which part of the brain does short-term memory seem to rely on? \n",
"3 What provided the Roman senate with exuberance? \n",
"4 What area did the Hasan-jalalians command? \n",
"\n",
" answers \\\n",
"0 1894 \n",
"1 Juan Rodriguez \n",
"2 frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe \n",
"3 successes against Catiline \n",
"4 Artsakh and Utik \n",
"\n",
" correct_answer \\\n",
"0 True \n",
"1 True \n",
"2 True \n",
"3 True \n",
"4 True \n",
"\n",
" wrong_answer \\\n",
"0 The Armenian Mosaic was re-discovered in 1920. \n",
"1 The first non-Indian person to live in what is now NYC was Italian explorer Christopher Columbus. \n",
"2 The cerebellum \n",
"3 The Roman Senate was filled with exuberance due to Pompey's defeat in Asia. \n",
"4 The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor. \n",
"\n",
" sampled_answer \\\n",
"0 1894 \n",
"1 Juan Rodriguez \n",
"2 frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe \n",
"3 The Roman Senate was filled with exuberance due to Pompey's defeat in Asia. \n",
"4 Artsakh and Utik \n",
"\n",
" answer_true \n",
"0 True \n",
"1 True \n",
"2 True \n",
"3 False \n",
"4 True "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Display Binary Q&A Classification Template\n",
"\n",
"View the default template used to classify hallucinations. You can tweak this template and evaluate its performance relative to the default."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"You are given a question, an answer and reference text. You must determine whether the\n",
"given answer correctly answers the question based on the reference text. Here is the data:\n",
" [BEGIN DATA]\n",
" ************\n",
" [Question]: {input}\n",
" ************\n",
" [Reference]: {reference}\n",
" ************\n",
" [Answer]: {output}\n",
" [END DATA]\n",
"Your response must be a single word, either \"correct\" or \"incorrect\",\n",
"and should not contain any text or characters aside from that word.\n",
"\"correct\" means that the question is correctly and fully answered by the answer.\n",
"\"incorrect\" means that the question is not correctly or only partially answered by the\n",
"answer.\n",
"\n"
]
}
],
"source": [
"print(QA_PROMPT_TEMPLATE)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Configure the API Key\n",
"\n",
"Configure your OpenAI API key."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"if not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\n",
" openai_api_key = getpass(\"🔑 Enter your OpenAI API key: \")\n",
"openai.api_key = openai_api_key\n",
"os.environ[\"OPENAI_API_KEY\"] = openai_api_key"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Benchmark Dataset Sample\n",
"Sample size determines run time\n",
"Recommend iterating small: 100 samples\n",
"Then increasing to large test set"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"df_sample = (\n",
" df.sample(n=N_EVAL_SAMPLE_SIZE)\n",
" .reset_index(drop=True)\n",
" .rename(\n",
" columns={\n",
" \"question\": \"input\",\n",
" \"context\": \"reference\",\n",
" \"sampled_answer\": \"output\",\n",
" }\n",
" )\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LLM Evals: Q&A Classifications GPT-4\n",
"Run Q&A classifications against a subset of the data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Instantiate the LLM and set parameters."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The `model_name` field is deprecated. Use `model` instead. This will be removed in a future release.\n"
]
}
],
"source": [
"model = OpenAIModel(\n",
" model_name=\"gpt-4\",\n",
" temperature=0.0,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"Hello! I'm working perfectly. How can I assist you today?\""
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model(\"Hello world, this is a test if you are working?\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Run LLM Eval using the template against the dataset: This is the main Eval function"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ca05336a691d49cf9b3fe40fa8ab9e1e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"llm_classify | | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# The rails force the output to specific values of the template\n",
"# It will remove text such as \",,,\" or \"...\", anything not the\n",
"# binary value expected from the template\n",
"rails = list(QA_PROMPT_RAILS_MAP.values())\n",
"Q_and_A_classifications = llm_classify(\n",
" dataframe=df_sample,\n",
" template=QA_PROMPT_TEMPLATE,\n",
" model=model,\n",
" rails=rails,\n",
" concurrency=20,\n",
")[\"label\"].tolist()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"Evaluate the predictions against human-labeled ground-truth Q&A labels."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" correct 1.00 0.88 0.94 50\n",
" incorrect 0.89 1.00 0.94 50\n",
"\n",
" accuracy 0.94 100\n",
" macro avg 0.95 0.94 0.94 100\n",
"weighted avg 0.95 0.94 0.94 100\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAHHCAYAAAB+wBhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZFElEQVR4nO3deXhM1/8H8PdMJDORjchOJCQEFQlCGqkmSEWDCtXaWpHauigaWxVZqEStUdS+1Va1VLU0ltRW0lqjUTsJiizWLEjInN8ffpmvkUlkZCIznffLc59Hzpx7zudORvJxlnslQggBIiIiIh0lrewAiIiIiErDZIWIiIh0GpMVIiIi0mlMVoiIiEinMVkhIiIincZkhYiIiHQakxUiIiLSaUxWiIiISKcxWSEiIiKdxmSFDN6FCxfQvn17WFlZQSKRYMuWLVptPy0tDRKJBCtWrNBqu/osMDAQgYGBWm3z2rVrkMvlOHjwoFbb1WUSiQTR0dHKr1esWAGJRIK0tLRXGoerqyv69eun/DohIQHm5ubIysp6pXHQfxeTFdIJly5dwuDBg1G3bl3I5XJYWlrC398fs2fPxsOHDyu077CwMKSkpGDy5MlYtWoVfHx8KrS/V6lfv36QSCSwtLRU+z5euHABEokEEokE06dP17j9GzduIDo6GsnJyVqItnwmTpwIX19f+Pv7K8uKrr9JkyZQ92QRiUSCIUOGvMowDUKHDh3g7u6OuLi4yg6F/iOYrFCl27ZtGzw9PfHjjz+ic+fOmDNnDuLi4lC7dm2MGjUKw4YNq7C+Hz58iKSkJPTv3x9DhgzBBx98gFq1amm1DxcXFzx8+BAffvihVtstqypVquDBgwf45Zdfir22Zs0ayOXyl277xo0biImJ0ThZ2blzJ3bu3PnS/T4vKysLK1euxMcff6z29ZSUFGzevFlr/emqDz/8EA8fPoSLi0tlh4LBgwdj4cKFyMnJqexQ6D+AyQpVqtTUVPTs2RMuLi44ffo0Zs+ejYEDB+Kzzz7DunXrcPr0abz22msV1n/RMHW1atUqrA+JRAK5XA4jI6MK66M0MpkM7dq1w7p164q9tnbtWnTs2PGVxfLgwQMAgImJCUxMTLTW7urVq1GlShV07ty52GumpqaoX78+Jk6cqHZ0RVuePHmCgoKCCmu/LIyMjCCXyyGRSCo1DgB49913kZ+fjw0bNlR2KPQfwGSFKtXUqVORm5uLpUuXwtHRsdjr7u7uKiMrT548waRJk+Dm5gaZTAZXV1d89dVXyM/PVznP1dUVnTp1wh9//IGWLVtCLpejbt26+P7775V1oqOjlf8DHTVqFCQSCVxdXQE8nT4o+vuzoqOji/0i2LVrF9544w1Uq1YN5ubm8PDwwFdffaV8vaQ1K7///jtat24NMzMzVKtWDV26dMGZM2fU9nfx4kX069cP1apVg5WVFcLDw5W/+Muid+/e+O2333Dv3j1l2ZEjR3DhwgX07t27WP07d+5g5MiR8PT0hLm5OSwtLfH222/j5MmTyjp79+5FixYtAADh4eHK6aSi6wwMDETjxo1x7NgxvPnmm6hataryfXl+zUpYWBjkcnmx6w8ODkb16tVx48aNUq9vy5Yt8PX1hbm5ebHXpFIpxo8fj7///hs//fRTqe0AQGZmJvr37w97e3vI5XJ4eXlh5cqVKnWKvqfTp09HfHy88vN4+vRp5ffs/Pnz+OCDD2BlZQVbW1tMmDABQghcu3YNXbp0gaWlJRwcHDBjxgyVtgsKChAZGYnmzZvDysoKZmZmaN26Nfbs2fPC2J9fs1IUi7rj2TUmCoUC8fHxeO211yCXy2Fvb4/Bgwfj7t27Ku0LIfD111+jVq1aqFq1Ktq0aYN//vlHbSx2dnZo0qQJfv755xfGTfQiTFaoUv3yyy+oW7cuWrVqVab6AwYMQGRkJJo1a4ZZs2YhICAAcXFx6NmzZ7G6Fy9eRPfu3fHWW29hxowZqF69Ovr166f84dqtWzfMmjULANCrVy+sWrUK8fHxGsX/zz//oFOnTsjPz8fEiRMxY8YMvPPOOy9c5Ll7924EBwcjMzMT0dHRiIiIwKFDh+Dv7692ceT777+PnJwcxMXF4f3338eKFSsQExNT5ji7desGiUSiMhWydu1aNGjQAM2aNStW//Lly9iyZQs6deqEmTNnYtSoUUhJSUFAQIAycWjYsCEmTpwIABg0aBBWrVqFVatW4c0331S2c/v2bbz99tvw9vZGfHw82rRpoza+2bNnw9bWFmFhYSgsLAQALFy4EDt37sScOXPg5ORU4rU9fvwYR44cUXsdRXr37o169eq9cHTl4cOHCAwMxKpVq9CnTx9MmzYNVlZW6NevH2bPnl2s/vLlyzFnzhwMGjQIM2bMgLW1tfK1Hj16QKFQYMqUKfD19cXXX3+N+Ph4vPXWW6hZsya++eYbuLu7Y+TIkdi/f7/yvOzsbCxZsgSBgYH45ptvEB0djaysLAQHB2s83datWzfl96XoGD58OICnyUSRwYMHY9SoUcp1YuHh4VizZg2Cg4Px+PFjZb3IyEhMmDABXl5emDZtGurWrYv27dsjLy9Pbf/NmzfHoUOHNIqZSC1BVEnu378vAIguXbqUqX5ycrIAIAYMGKBSPnLkSAFA/P7778oyFxcXAUDs379fWZaZmSlkMpkYMWKEsiw1NVUAENOmTVNpMywsTLi4uBSLISoqSjz7z2bWrFkCgMjKyiox7qI+li9frizz9vYWdnZ24vbt28qykydPCqlUKvr27Vusv48++kilza5du4oaNWqU2Oez12FmZiaEEKJ79+6iXbt2QgghCgsLhYODg4iJiVH7Hjx69EgUFhYWuw6ZTCYmTpyoLDty5EixaysSEBAgAIgFCxaofS0gIEClbMeOHQKA+Prrr8Xly5eFubm5CA0NfeE1Xrx4UQAQc+bMKfX6V65cKQCIzZs3K18HID777DPl1/Hx8QKAWL16tbKsoKBA+Pn5CXNzc5Gdna18LwAIS0tLkZmZqdJn0fds0KBByrInT56IWrVqCYlEIqZMmaIsv3v3rjA1NRVhYWEqdfPz81XavHv3rrC3ty/2OQAgoqKilF8vX75cABCpqalq36usrCxRu3Zt4enpKXJzc4UQQhw4cEAAEGvWrFGpm5CQoFKemZkpTExMRMeOHYVCoVDW++qrrwQAlWsoEhsbKwCIjIwMtfEQlRVHVqjSZGdnAwAsLCzKVH/79u0AgIiICJXyESNGAHi6UPdZjRo1QuvWrZVf29rawsPDA5cvX37pmJ9XtNbl559/hkKhKNM5N2/eRHJyMvr166fyP/EmTZrgrbfeUl7ns55fONq6dWvcvn1b+R6WRe/evbF3716kp6fj999/R3p6utopIODpOhep9OmPh8LCQty+fVs5xXX8+PEy9ymTyRAeHl6muu3bt8fgwYMxceJEdOvWDXK5HAsXLnzhebdv3wYAVK9evdR6ffr0eeHoyvbt2+Hg4IBevXopy4yNjTF06FDk5uZi3759KvXfffdd2Nraqm1rwIAByr8bGRnBx8cHQgj0799fWV6tWrVin0kjIyPleh6FQoE7d+7gyZMn8PHx0ei9f15hYSF69eqFnJwc/PTTTzAzMwMAbNiwAVZWVnjrrbdw69Yt5dG8eXOYm5srp592796NgoICfP755ypToUUjNeoUfU9u3br10nETAZwGokpkaWkJAGXeLXDlyhVIpVK4u7urlDs4OKBatWq4cuWKSnnt2rWLtVG9evVi8/Dl0aNHD/j7+2PAgAGwt7dHz5498eOPP5aauBTF6eHhUey1hg0b4tatW8WG1Z+/lqJfAppcS0hICCwsLLB+/XqsWbMGLVq0KPZeFlEoFJg1axbq1asHmUwGGxsb2Nra4u+//8b9+/fL3GfNmjU1Wkg7ffp0WFtbIzk5Gd9++63KVMWLlJSAFDEyMsL48eORnJxc4r10rly5gnr16ikTtSINGzZUvv6sOnXqlNjf898zKysryOVy2NjYFCt//vu4cuVKNGnSBHK5HDVq1ICtrS22bdum0Xv/vPHjx+P333/H2rVr4ebmpiy/cOEC7t+/Dzs7O9ja2qocubm5yMzMBPC/a69Xr55Ku7a2tiUmikXfE11Y8Ev6rUplB0CGy9LSEk5OTjh16pRG55X1B19Ju29e9EuttD6K1lMUMTU1xf79+7Fnzx5s27YNCQkJWL9+Pdq2bYudO3dqbQdQea6liEwmQ7du3bBy5UpcvnxZ5WZiz4uNjcWECRPw0UcfYdKkSbC2toZUKsXw4cPLPIIEPH1/NHHixAnlL8eUlBSVEY6S1KhRA0DZErc+ffpg0qRJmDhxIkJDQzWKTZ3Srk/d96ws38fVq1ejX79+CA0NxahRo2BnZwcjIyPExcXh0qVLLxXnli1b8M0332DSpEno0KGDymsKhQJ2dnZYs2aN2nNLGjkqi6LvyfMJGpGmmKxQperUqRMWLVqEpKQk+Pn5lVrXxcUFCoUCFy5cUP5PFwAyMjJw7949rd5bonr16io7Z4o8/z9r4Oluk3bt2qFdu3aYOXMmYmNjMW7cOOzZswdBQUFqrwMAzp07V+y1s2fPwsbGRjlEr229e/fGsmXLIJVK1S5KLrJx40a0adMGS5cuVSm/d++eyi8ebf6POS8vD+Hh4WjUqBFatWqFqVOnomvXrsodRyWpXbs2TE1NkZqa+sI+ikZX+vXrp3aXiouLC/7++28oFAqV0ZWzZ88qX69oGzduRN26dbF582aV9zcqKuql2jt//jzCwsIQGhqqskutiJubG3bv3g1/f/9Sk6+ia79w4QLq1q2rLM/KyioxUUxNTVWOyhGVB6eBqFKNHj0aZmZmGDBgADIyMoq9funSJeUujJCQEAAotmNn5syZAKDV+4W4ubnh/v37+Pvvv5VlN2/eLLb19c6dO8XO9fb2BoBi26mLODo6wtvbGytXrlRJiE6dOoWdO3cqr7MitGnTBpMmTcLcuXPh4OBQYj0jI6NiozYbNmzA9evXVcqKkip1iZ2mxowZg6tXr2LlypWYOXMmXF1dERYWVuL7WMTY2Bg+Pj44evRomfr54IMP4O7urnY3VUhICNLT07F+/Xpl2ZMnTzBnzhyYm5sjICBAs4t6CUWjL8++/3/99ReSkpI0bis3Nxddu3ZFzZo1sXLlSrXJ5fvvv4/CwkJMmjSp2GtPnjxRfm+DgoJgbGyMOXPmqMRW2g66Y8eOvfA/IURlwZEVqlRubm5Yu3YtevTogYYNG6Jv375o3LgxCgoKcOjQIWzYsEF5PwgvLy+EhYVh0aJFuHfvHgICAnD48GGsXLkSoaGhJW6LfRk9e/bEmDFj0LVrVwwdOhQPHjzA/PnzUb9+fZVFjhMnTsT+/fvRsWNHuLi4IDMzE9999x1q1aqFN954o8T2p02bhrfffht+fn7o378/Hj58iDlz5sDKyqrU6ZnyKrrnyIt06tQJEydORHh4OFq1aoWUlBSsWbNG5X/UwNPvX7Vq1bBgwQJYWFjAzMwMvr6+pa7lUOf333/Hd999h6ioKOUW5OXLlyMwMBATJkzA1KlTSz2/S5cuGDduHLKzs5VroUpiZGSEcePGqV34O2jQICxcuBD9+vXDsWPH4Orqio0bN+LgwYOIj48v82Lw8ujUqRM2b96Mrl27omPHjkhNTcWCBQvQqFEj5ObmatRWTEwMTp8+jfHjxxcbSXJzc4Ofnx8CAgIwePBgxMXFITk5Ge3bt4exsTEuXLiADRs2YPbs2ejevTtsbW0xcuRIxMXFoVOnTggJCcGJEyfw22+/qZ3myczMxN9//43PPvusXO8HEQBuXSbdcP78eTFw4EDh6uoqTExMhIWFhfD39xdz5swRjx49UtZ7/PixiImJEXXq1BHGxsbC2dlZjB07VqWOEE+3Lnfs2LFYP89vmS1p67IQQuzcuVM0btxYmJiYCA8PD7F69epiW5cTExNFly5dhJOTkzAxMRFOTk6iV69e4vz588X6eH577+7du4W/v78wNTUVlpaWonPnzuL06dMqdYr6e35r9Iu2qBZ5dutuSUraujxixAjh6OgoTE1Nhb+/v0hKSlK75fjnn38WjRo1ElWqVFG5zoCAAPHaa6+p7fPZdrKzs4WLi4to1qyZePz4sUq9L774QkilUpGUlFTqNWRkZIgqVaqIVatWlen6Hz9+LNzc3IptXS5qKzw8XNjY2AgTExPh6elZ7HtX2uempO9ZSbE8/z4pFAoRGxsrXFxchEwmE02bNhW//vqr2u30eMHW5bCwMAFA7fH8VuNFixaJ5s2bC1NTU2FhYSE8PT3F6NGjxY0bN5R1CgsLRUxMjPJzERgYKE6dOiVcXFyKtTd//nxRtWpV5XZvovKQCFGB958mInpF+vfvj/Pnz+PAgQOVHQoBaNq0KQIDA5U3XiQqDyYrRPSfcPXqVdSvXx+JiYkqT16mVy8hIQHdu3fH5cuXNdp+TlQSJitERESk07gbiIiIiHQakxUiIiIqk/3796Nz585wcnKCRCIp8W7Qz9q7dy+aNWsGmUwGd3f3Yk+gLwsmK0RERFQmeXl58PLywrx588pUPzU1FR07dkSbNm2QnJyM4cOHY8CAAdixY4dG/XLNChEREWlMIpHgp59+KvXRFWPGjMG2bdtUHqvSs2dP3Lt3DwkJCWXuizeF0zEKhQI3btyAhYUFH/5FRKRnhBDIycmBk5NTsQdiatOjR49QUFCglbaEEMV+38hkMshksnK3nZSUVOyxI8HBwaU+rVsdJis65saNG3B2dq7sMIiIqByuXbuGWrVqVUjbjx49gqlFDeDJA620Z25uXuzuyFFRUVq5m3Z6ejrs7e1Vyuzt7ZGdnY2HDx+W+WGnTFZ0TNHtvE3emgKJsbySoyGqGEfmvvhpykT6KDcnB6283Cv00QwFBQXAkweQNQoDjEzK11hhAXJPr8S1a9dUHlWhjVEVbWKyomOKhuIkxnJIjMuWcRLpGwuL0p/fQ6TvXsk0fhU5JOVMVoTk6VSVpaXlC5+r9TIcHByKPaQ2IyMDlpaWZR5VAZisEBER6ScJgPImRRWcU/n5+WH79u0qZbt27dL4adzcukxERKSPJFLtHBrIzc1FcnIykpOTATzdmpycnIyrV68CAMaOHYu+ffsq63/88ce4fPkyRo8ejbNnz+K7777Djz/+iC+++EKjfpmsEBERUZkcPXoUTZs2RdOmTQEAERERaNq0KSIjIwEAN2/eVCYuAFCnTh1s27YNu3btgpeXF2bMmIElS5YgODhYo345DURERKSPJBItTANpdn5gYCBKuz2burvTBgYG4sSJE5pGpoLJChERkT56iWkctW3oAf2IkoiIiAwWR1aIiIj0USVMA1UWJitERER6SQvTQHoywaIfURIREZHB4sgKERGRPuI0EBEREek07gYiIiIi0g0cWSEiItJHnAYiIiIinWZA00BMVoiIiPSRAY2s6EdKRURERAaLIytERET6iNNAREREpNMkEi0kK5wGIiIiIio3jqwQERHpI6nk6VHeNvQAkxUiIiJ9ZEBrVvQjSiIiIjJYHFkhIiLSRwZ0nxUmK0RERPqI00BEREREuoEjK0RERPqI00BERESk0wxoGojJChERkT4yoJEV/UipiIiIyGBxZIWIiEgfcRqIiIiIdBqngYiIiIh0A0dWiIiI9JIWpoH0ZMyCyQoREZE+4jQQERERkW7gyAoREZE+kki0sBtIP0ZWmKwQERHpIwPauqwfURIREZHB4sgKERGRPjKgBbZMVoiIiPSRAU0DMVkhIiLSRwY0sqIfKRUREREZLI6sEBER6SNOAxEREZFO4zQQERERkW7gyAoREZEekkgkkBjIyAqTFSIiIj1kSMkKp4GIiIhIp3FkhYiISB9J/v8obxt6gMkKERGRHuI0EBEREZGO4MgKERGRHjKkkRUmK0RERHqIyQoRERHpNENKVrhmhYiIiHQaR1aIiIj0EbcuExERkS7jNBARERGRjuDIChERkR6SSKCFkRXtxFLRmKwQERHpIQm0MA2kJ9kKp4GIiIhIp3FkhYiISA8Z0gJbJitERET6yIC2LnMaiIiIiHQaR1aIiIj0kRamgQSngYiIiKiiaGPNSvl3E70aTFaIiIj0kCElK1yzQkRERGU2b948uLq6Qi6Xw9fXF4cPHy61fnx8PDw8PGBqagpnZ2d88cUXePTokUZ9MlkhIiLSRxItHRpYv349IiIiEBUVhePHj8PLywvBwcHIzMxUW3/t2rX48ssvERUVhTNnzmDp0qVYv349vvrqK436ZbJCRESkh4qmgcp7aGLmzJkYOHAgwsPD0ahRIyxYsABVq1bFsmXL1NY/dOgQ/P390bt3b7i6uqJ9+/bo1avXC0djnsdkhYiIyMBlZ2erHPn5+cXqFBQU4NixYwgKClKWSaVSBAUFISkpSW27rVq1wrFjx5TJyeXLl7F9+3aEhIRoFB8X2BIREekhbS6wdXZ2VimPiopCdHS0StmtW7dQWFgIe3t7lXJ7e3ucPXtWbfu9e/fGrVu38MYbb0AIgSdPnuDjjz/WeBqIyQoREZEe0maycu3aNVhaWirLZTJZudotsnfvXsTGxuK7776Dr68vLl68iGHDhmHSpEmYMGFCmdthskJERGTgLC0tVZIVdWxsbGBkZISMjAyV8oyMDDg4OKg9Z8KECfjwww8xYMAAAICnpyfy8vIwaNAgjBs3DlJp2VajcM0KERGRHnrVC2xNTEzQvHlzJCYmKssUCgUSExPh5+en9pwHDx4US0iMjIwAAEKIMvfNkRUiIiJ9VAkPMoyIiEBYWBh8fHzQsmVLxMfHIy8vD+Hh4QCAvn37ombNmoiLiwMAdO7cGTNnzkTTpk2V00ATJkxA586dlUlLWTBZISIiojLp0aMHsrKyEBkZifT0dHh7eyMhIUG56Pbq1asqIynjx4+HRCLB+PHjcf36ddja2qJz586YPHmyRv1KhCbjMFThsrOzYWVlBVlIPCTGppUdDlGFOLOkb2WHQFQhcnKy0aSuPe7fv//CNSAvq+j3hMNHqyE1qVquthQFD5C+7IMKjVcbOLJCRESkhwzp2UBMVoiIiPSQISUr3A1EREREOo0jK0RERPqoEnYDVRYmK0RERHqI00BEREREOoIjK/SfMqBDI3z+jhfsqpni1JU7GLP0II5fzCqx/scdG+Oj9o1Qy8Ycd3Ie4ec/UzFxzWHkPy4EAEilEnz5fnO839oddtWqIv3uA6zdew7TN554VZdEpGLNzwexbMNe3LqTgwZujhj3WVc0aVBbbd0LaemYs3IH/rnwL25k3MWXn7yDsG5vqtRZtC4Ru/5IweVrWZDLqqBpI1eMGNARdZztXsXlUDlwZIXKLTo6Gt7e3pUdhkHp2qouvg7zwzcbjiFw9GacSruNTeNDYGMpV1u/+xtuiOrTElM3HIPv8B/x+fx96NqqLib0bqGsMzzUCx+1b4TRSw/Cd/iPiF79F4Z28cKgkNde1WURKW3fm4xvFm7FZx+8hU3zh8OjrhMGjl2M23dz1NZ/lF8AZ0drRPQPgY21hdo6R/6+jN7v+OOHbz/H0imD8fhJIfp/uQgPHuZX5KWQFkighdvt68miFYNOVgoKCtSWP378+BVHQtrwaecm+H73Wazdcx7n/r2HiEUH8CD/CT5o66G2fksPB/x1LgMb/7iEa1m52HPyOjb9cQnN3e2eqWOP7UfSsPP4NVzLysXWP1Ox5+R1lTpEr8rKTfvw3tu+6NahJdxdHBA97F3IZcbYvOOI2vqeHrUxalBndGzTFCbG6gfSF8cNRNfgFqjn6oAGbk6IG9UTNzPv4Z8L/1bkpRBpRO+SFYVCgalTp8Ld3R0ymQy1a9dW3rY3JSUFbdu2hampKWrUqIFBgwYhNzdXeW6/fv0QGhqKyZMnw8nJCR4eHkhLS4NEIsH69esREBAAuVyONWvWAACWLFmChg0bQi6Xo0GDBvjuu+9UYvn333/Rq1cvWFtbw8zMDD4+Pvjrr7+wYsUKxMTE4OTJk8rsdcWKFa/sPTJExlWk8K5rg71//+8HrBDAvpTraOFhr/acw+fS4V3XBs3cbQEALnYWeKuZM3aduPpMnQwEeNaEm6MVAKCxizVeb2CP3SeuVeDVEBVX8PgJ/jl/HX7N6ivLpFIp/JrVQ/LpK1rrJyfvEQDAyqJ8d0aliveqH2RYmfRuzcrYsWOxePFizJo1C2+88QZu3ryJs2fPIi8vD8HBwfDz88ORI0eQmZmJAQMGYMiQISqJQmJiIiwtLbFr1y6Vdr/88kvMmDEDTZs2VSYskZGRmDt3Lpo2bYoTJ05g4MCBMDMzQ1hYGHJzcxEQEICaNWti69atcHBwwPHjx6FQKNCjRw+cOnUKCQkJ2L17NwDAysrqVb5NBqeGhRxVjKTIuv9QpTzr3kPUq1lN7Tkb/7gEa0s5fpv0DiQSCYyrSLFsx2nM3JysrDPrp2RYmJrg8Oz3UagQMJJK8PW6I9hw4GIFXg1Rcffu56FQoUCN6uYq5TWqWyD1WqZW+lAoFIib/zOaveaK+nUctdImVSBuXdZNOTk5mD17NubOnYuwsDAAgJubG9544w0sXrwYjx49wvfffw8zMzMAwNy5c9G5c2d88803yocsmZmZYcmSJTAxMQEApKWlAQCGDx+Obt26KfuKiorCjBkzlGV16tTB6dOnsXDhQoSFhWHt2rXIysrCkSNHYG1tDQBwd3dXnm9ubo4qVarAwcGh1GvKz89Hfv7/5oazs7PL8xaRBvxfc0RE16YYueQPHLuQiToOVpgS3gojuzdVLqDt2soN77V2x8DZv+PstTvwdLVBbLgfbt7Jww/7LlTyFRBp18Q5P+FCWjrWzPqsskMhUqFXycqZM2eQn5+Pdu3aqX3Ny8tLmagAgL+/PxQKBc6dO6dMVjw9PZWJyrN8fHyUf8/Ly8OlS5fQv39/DBw4UFn+5MkT5QhJcnIymjZtqkxUXlZcXBxiYmLK1QYBt3Me4UmhArZWqg9/tK1misx7D9SeM66nD37cfwGrEs8BAE5fvQszWRXM+vhNzNh0AkIAEz/0RfyWZGw+eElZp5atOb7o1pTJCr1S1azMYCSV4vbdXJXy23dzYFO9/A+gmzRnM/b9dRqrZnwKB9tq5W6PKh53A+koU9PyP4X42WSmpPKidS6LFy9GcnKy8jh16hT+/PNPrcUCPJ3Wun//vvK4do1rIV7G4ycKJF++hQDPmsoyiQR409MJR85lqD3H1KQKFM89dLxQIf7/3Kf/gE1lVaBQqNZRKASk+vHvm/5DTIyr4LX6NfHnif8lyQqFAn+euAjvRi4v3a4QApPmbMbug6ewfOrHqOVYQxvh0itgSGtW9CpZqVevHkxNTZGYmFjstYYNG+LkyZPIy8tTlh08eBBSqRQeHup3g5TE3t4eTk5OuHz5Mtzd3VWOOnXqAACaNGmC5ORk3LlzR20bJiYmKCwsfGFfMpkMlpaWKge9nO9++Rt9gxqgZ0A91K9ZDTMHtoaZzBhr9pwHAMz/PBCRz2xLTjh2FeHtG6Gbvxtq21kgsElNfNXTBwlHrygTlISjVxDxblO0b+YMZ1tzdGzpik87eWLb4bTKuEQycGHvBmDD9r+wZecRXLqSgZhvN+PhowJ0DX76uR7zzTrMXLpdWb/g8ROcuXgdZy5ex+PHhci8dR9nLl7Hleu3lHUmztmMXxKPY9rYPjCrKkPWnWxk3cnGo3zuitR1Eol2Dn2gV9NAcrkcY8aMwejRo2FiYgJ/f39kZWXhn3/+QZ8+fRAVFYWwsDBER0cjKysLn3/+OT788EPlFJAmYmJiMHToUFhZWaFDhw7Iz8/H0aNHcffuXURERKBXr16IjY1FaGgo4uLi4OjoiBMnTsDJyQl+fn5wdXVFamoqkpOTUatWLVhYWEAmk1XAu0JFfjp0GTaWpviqpw/sqlVFStptdJ+8XbnotpaNucooyfSNxyGEwLiePnC0NsPt7EdIOHYFk9b+bxvomKWH8FVPH0wf+AZsLE2RfvcBVuw6g6kbj7/y6yMKCfTG3Xu5+HblDty6m4OGbk5YFDsANtWf3kPlZuZdSJ/57ZN1OxvdPpml/HrZhn1YtmEfWjSpi+9nfAoA+OGXJABA2Mj5Kn3FjuyhTIKIKptEiOfGwXWcQqFAXFwcFi9ejBs3bsDR0REff/wxxo4di5SUFAwbNgxJSUmoWrUq3n33XcycORPm5k9Xz/fr1w/37t3Dli1blO2lpaWhTp06OHHiRLGbuK1duxbTpk3D6dOnYWZmBk9PTwwfPhxdu3YFAFy5cgUjRozArl278OTJEzRq1Ajz5s1Dy5YtkZ+fjz59+iAxMRH37t3D8uXL0a9fvxdeX3Z2NqysrCALiYfEWDtTTUS65sySvpUdAlGFyMnJRpO69rh//36FjZQX/Z6o+/lGSGXqlzaUlSI/D5fndK/QeLVB75KV/zomK2QImKzQf9UrTVaGboRROZOVwvw8XP5W95MVvVqzQkRERIZHr9asEBER0VOGtHWZyQoREZEe0sZuHj3JVTgNRERERLqNIytERER6SCqVQFrOO1QKPbnDJZMVIiIiPcRpICIiIiIdwZEVIiIiPcTdQERERKTTDGkaiMkKERGRHjKkkRWuWSEiIiKdxpEVIiIiPWRIIytMVoiIiPSQIa1Z4TQQERER6TSOrBAREekhCbQwDQT9GFphskJERKSHOA1EREREpCM4skJERKSHuBuIiIiIdBqngYiIiIh0BEdWiIiI9BCngYiIiEinGdI0EJMVIiIiPWRIIytcs0JEREQ6jSMrRERE+kgL00B6cgNbJitERET6iNNARERERDqCIytERER6iLuBiIiISKdxGoiIiIhIR3BkhYiISA9xGoiIiIh0GqeBiIiIiHQER1aIiIj0kCGNrDBZISIi0kNcs0JEREQ6zZBGVrhmhYiIiHSaxsnKw4cP8eDBA+XXV65cQXx8PHbu3KnVwIiIiKhkRdNA5T30gcbJSpcuXfD9998DAO7duwdfX1/MmDEDXbp0wfz587UeIBERERVXNA1U3kMfaJysHD9+HK1btwYAbNy4Efb29rhy5Qq+//57fPvtt1oPkIiIiAybxgtsHzx4AAsLCwDAzp070a1bN0ilUrz++uu4cuWK1gMkIiKi4iTQwm4grURS8TQeWXF3d8eWLVtw7do17NixA+3btwcAZGZmwtLSUusBEhERUXFSiUQrhz7QOFmJjIzEyJEj4erqipYtW8LPzw/A01GWpk2baj1AIiIiMmwaTwN1794db7zxBm7evAkvLy9lebt27dC1a1etBkdERETqGdJN4V7qPisODg6wsLDArl278PDhQwBAixYt0KBBA60GR0REROpxN1Apbt++jXbt2qF+/foICQnBzZs3AQD9+/fHiBEjtB4gERERFSeVaOfQ1Lx58+Dq6gq5XA5fX18cPny41Pr37t3DZ599BkdHR8hkMtSvXx/bt2/X7Fo1DfKLL76AsbExrl69iqpVqyrLe/TogYSEBE2bIyIiIj2xfv16REREICoqCsePH4eXlxeCg4ORmZmptn5BQQHeeustpKWlYePGjTh37hwWL16MmjVratSvxmtWdu7ciR07dqBWrVoq5fXq1ePWZSIioldFooVn+2h4+syZMzFw4ECEh4cDABYsWIBt27Zh2bJl+PLLL4vVX7ZsGe7cuYNDhw7B2NgYAODq6qpxmBqPrOTl5amMqBS5c+cOZDKZxgEQERGR5rR5u/3s7GyVIz8/v1h/BQUFOHbsGIKCgpRlUqkUQUFBSEpKUhvj1q1b4efnh88++wz29vZo3LgxYmNjUVhYqNG1apystG7dWnm7feBpVqdQKDB16lS0adNG0+aIiIiokjk7O8PKykp5xMXFFatz69YtFBYWwt7eXqXc3t4e6enpatu9fPkyNm7ciMLCQmzfvh0TJkzAjBkz8PXXX2sUn8bTQFOnTkW7du1w9OhRFBQUYPTo0fjnn39w584dHDx4UNPmiIiI6CVI/v9PedsAgGvXrqnc2FVbMyUKhQJ2dnZYtGgRjIyM0Lx5c1y/fh3Tpk1DVFRUmdvROFlp3Lgxzp8/j7lz58LCwgK5ubno1q2bcqUvERERVbyX3c3zfBsAYGlp+cK70NvY2MDIyAgZGRkq5RkZGXBwcFB7jqOjI4yNjWFkZKQsa9iwIdLT01FQUAATE5MyxalxsgIAVlZWGDdu3MucSkRERHrIxMQEzZs3R2JiIkJDQwE8HTlJTEzEkCFD1J7j7++PtWvXQqFQQCp9uvLk/PnzcHR0LHOiArzEmpWEhAT88ccfyq/nzZsHb29v9O7dG3fv3tW0OSIiInoJlXFTuIiICCxevBgrV67EmTNn8MknnyAvL0+5O6hv374YO3assv4nn3yCO3fuYNiwYTh//jy2bduG2NhYfPbZZxr1q3GyMmrUKGRnZwMAUlJSEBERgZCQEKSmpiIiIkLT5oiIiOglaHM3UFn16NED06dPR2RkJLy9vZGcnIyEhATloturV68qbxYLPF24u2PHDhw5cgRNmjTB0KFDMWzYMLXbnEuj8TRQamoqGjVqBADYtGkTOnfujNjYWBw/fhwhISGaNkdERER6ZMiQISVO++zdu7dYmZ+fH/78889y9anxyIqJiQkePHgAANi9ezfat28PALC2tlaOuBAREVHFkkokWjn0gcYjK2+88QYiIiLg7++Pw4cPY/369QCeLph5/q62REREVDH41OVSzJ07F1WqVMHGjRsxf/585f39f/vtN3To0EHrARIREVFxhvTUZY1HVmrXro1ff/21WPmsWbO0EhARERHRszQeWTl+/DhSUlKUX//8888IDQ3FV199hYKCAq0GR0REROpVxm6gyqJxsjJ48GCcP38ewNN7/vfs2RNVq1bFhg0bMHr0aK0HSERERMUZ0gJbjZOV8+fPw9vbGwCwYcMGvPnmm1i7di1WrFiBTZs2aTs+IiIiMnAar1kRQkChUAB4unW5U6dOAJ7e+OXWrVvajY6IiIjUkvz/Ud429IHGyYqPjw++/vprBAUFYd++fZg/fz6ApzeLe/6x0URERFQxtLGbR192A2k8DRQfH4/jx49jyJAhGDduHNzd3QEAGzduRKtWrbQeIBERERk2jUdWmjRporIbqMi0adNUHgFNREREFUcqeXqUtw19oHGyUhK5XK6tpoiIiOgFDGkaSONkpbCwELNmzcKPP/6Iq1evFru3yp07d7QWHBEREZHGa1ZiYmIwc+ZM9OjRA/fv30dERAS6desGqVSK6OjoCgiRiIiI1DGEG8IBL5GsrFmzBosXL8aIESNQpUoV9OrVC0uWLEFkZGS5HwFNREREZWNIzwbSOFlJT0+Hp6cnAMDc3Bz3798HAHTq1Anbtm3TbnRERESkVtEC2/Ie+kDjZKVWrVq4efMmAMDNzQ07d+4EABw5cgQymUy70REREZHB0zhZ6dq1KxITEwEAn3/+OSZMmIB69eqhb9+++Oijj7QeIBERERVnSNNAGu8GmjJlivLvPXr0QO3atZGUlIR69eqhc+fOWg2OiIiI1OPt9jXg5+cHPz8/bcRCRERE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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"true_labels = df_sample[\"answer_true\"].map(QA_PROMPT_RAILS_MAP).tolist()\n",
"\n",
"print(classification_report(true_labels, Q_and_A_classifications, labels=rails))\n",
"confusion_matrix = ConfusionMatrix(\n",
" actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=rails\n",
")\n",
"confusion_matrix.plot(\n",
" cmap=plt.colormaps[\"Blues\"],\n",
" number_label=True,\n",
" normalized=True,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LLM Evals: Q&A Classifications GPT-3.5\n",
"\n",
"\n",
"Evaluate the predictions against human-labeled ground-truth Q&A labels."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The `model_name` field is deprecated. Use `model` instead. This will be removed in a future release.\n"
]
}
],
"source": [
"model = OpenAIModel(model_name=\"gpt-3.5-turbo\", temperature=0.0, request_timeout=20)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a10ca79971f34ba1a7a87e766ece3576",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"llm_classify | | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Exception in worker on attempt 1: raised APITimeoutError('Request timed out.')\n",
"Requeuing...\n"
]
}
],
"source": [
"Q_and_A_classifications = llm_classify(\n",
" dataframe=df_sample,\n",
" template=QA_PROMPT_TEMPLATE,\n",
" model=model,\n",
" rails=list(QA_PROMPT_RAILS_MAP.values()),\n",
" concurrency=20,\n",
")[\"label\"].tolist()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" correct 0.96 0.94 0.95 50\n",
" incorrect 0.94 0.96 0.95 50\n",
"\n",
" accuracy 0.95 100\n",
" macro avg 0.95 0.95 0.95 100\n",
"weighted avg 0.95 0.95 0.95 100\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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p6ejjJMdHjx4UGQ95Tl/Jyp8tgFypeapDQWlynyEq3M7FGm8umBwycp/HZMVMgZMVui/6q0mK4M2wKSQyUp25iNc/Ur/kxWDmrNCRERExseg5qwQERHRC8a0GojJChERkQHSxWoeA8lVOAxERERE+o09K0RERAZILpdBLi9c14go5PFvC5MVIiIiA8RhICIiIiI9wZ4VIiIiA8TVQERERKTXjGkYiMkKERGRATKmnhXOWSEiIiK9xp4VIiIiA2RMPStMVoiIiAyQMc1Z4TAQERER6TX2rBARERkgGXQwDATD6FphskJERGSAOAxEREREpCfYs0JERGSAuBqIiIiI9BqHgYiIiIj0BHtWiIiIDBCHgYiIiEivGdMwEJMVIiIiA2RMPSucs0JERER6jT0rREREhkgHw0AGcgNbJitERESGiMNARERERHqCPStEREQGiKuBiIiISK9xGIiIiIhIT7BnhYiIyABxGIiIiIj0GoeBiIiIiPQEe1aIiIgMkDH1rDBZISIiMkCcs0JERER6zZh6VjhnhYiIiPSa1snKkydP8PjxY+nxtWvXEBsbix07dug0MCIiIspbzjBQYTdDoHWy0rZtW3z33XcAgPv376Nu3bqYOXMm2rZti/nz5+s8QCIiIsotZxiosJsh0DpZOXnyJBo0aAAA2LBhA5ydnXHt2jV89913+Oqrr3QeIBERERk3rSfYPn78GNbW1gCAHTt2oH379pDL5ahXrx6uXbum8wCJiIgoNxl0sBpIJ5EUPa17Vry8vLB582bcuHEDv/32G5o2bQoASElJgY2Njc4DJCIiotzkMplONm3NmzcPHh4eMDc3R926dXH06NF869+/fx8DBgyAq6srlEolKlWqhG3btml3rdoGGRkZieHDh8PDwwN16tSBv78/gBe9LDVq1NC2OSIiIjIQ69atQ0REBKKionDy5ElUq1YNzZo1Q0pKisb6WVlZeP/995GUlIQNGzbgwoULWLx4McqUKaPVebUeBurQoQPee+893Lp1C9WqVZPKmzRpgnbt2mnbHBEREb2B4rgp3KxZs9C3b1+Eh4cDABYsWICtW7di6dKl+Pzzz3PVX7p0Ke7evYtDhw7BzMwMAODh4aF1nG90nxUXFxdYW1tj586dePLkCQCgdu3aqFy58ps0R0RERFp626uBsrKycOLECQQHB0tlcrkcwcHBOHz4sMZjtmzZAn9/fwwYMADOzs549913ER0djezsbK2uVeuelbS0NHTs2BF79uyBTCbDpUuXUKFCBfTu3Rt2dnaYOXOmtk0SERGRluSyF1th2wCA9PR0tXKlUgmlUqlWdufOHWRnZ8PZ2Vmt3NnZGefPn9fY/tWrV7F7925069YN27Ztw+XLl/Hpp5/i2bNniIqKKnicBa75f0OHDoWZmRmuX7+OEiVKSOWdOnXC9u3btW2OiIiIipmbmxtsbW2lLSYmRiftqlQqODk5YdGiRahVqxY6deqEMWPGYMGCBVq1o3XPyo4dO/Dbb7+hbNmyauUVK1bk0mUiIqK3RaaD7/b5/+E3btxQW9H7aq8KADg4OMDExAS3b99WK799+zZcXFw0Nu/q6gozMzOYmJhIZT4+PkhOTkZWVhYUCkWBwtS6Z+XRo0dqPSo57t69q/HiiIiISPd0ebt9GxsbtU3T33OFQoFatWohLi5OKlOpVIiLi5NWBr8qICAAly9fhkqlksouXrwIV1fXAicqwBskKw0aNJButw+8yOpUKhWmTZuGRo0aadscERERGYiIiAgsXrwYK1aswLlz5/DJJ5/g0aNH0uqgnj17YvTo0VL9Tz75BHfv3sXgwYNx8eJFbN26FdHR0RgwYIBW59V6GGjatGlo0qQJjh8/jqysLIwcORJ//fUX7t69i4MHD2rbHBEREb0B2f//FbYNbXTq1AmpqamIjIxEcnIyqlevju3bt0uTbq9fvw65/N9+EDc3N/z2228YOnQoqlatijJlymDw4MEYNWqUVufVOll59913cfHiRXz99dewtrZGRkYG2rdvL92djoiIiIqeLlcDaWPgwIEYOHCgxn179+7NVebv748jR45of6KXaJ2sAICtrS3GjBlTqBMTERERFYTWc1a2b9+O33//XXo8b948VK9eHV27dsW9e/d0GhwRERFp9rZvClectE5WRowYId08JiEhAREREWjRogUSExMRERGh8wCJiIgoN12uBtJ3Wg8DJSYmokqVKgCAjRs3onXr1oiOjsbJkyfRokULnQdIRERExk3rnhWFQoHHjx8DAHbt2oWmTZsCAOzt7XPdrpeIiIiKhlwm08lmCLTuWXnvvfcQERGBgIAAHD16FOvWrQPw4iYvr97VloiIiIpGcXzrcnHRumfl66+/hqmpKTZs2ID58+ejTJkyAIBff/0VzZs313mARERElJsxTbDVumelXLly+OWXX3KVz549WycBEREREb1M656VkydPIiEhQXr8008/ISQkBF988QWysrJ0GhwRERFpZkyrgbROVvr374+LFy8CAK5evYrOnTujRIkSWL9+PUaOHKnzAImIiCg3Y5pgq3WycvHiRVSvXh0AsH79ejRs2BBr1qzB8uXLsXHjRl3HR0REREZO6zkrQgjpq5537dqFVq1aAXjxZUV37tzRbXRERESkkez/W2HbMARaJyt+fn748ssvERwcjH379mH+/PkAXtwsLudbF4mIiKho6WI1j6GsBtJ6GCg2NhYnT57EwIEDMWbMGHh5eQEANmzYgPr16+s8QCIiIjJuWvesVK1aVW01UI7p06fDxMREJ0ERERFR/uSyF1th2zAEWicreTE3N9dVU0RERPQaxjQMpHWykp2djdmzZ+OHH37A9evXc91b5e7duzoLjoiIiEjrOSsTJkzArFmz0KlTJzx48AARERFo37495HI5xo8fXwQhEhERkSbGcEM44A2SldWrV2Px4sUYNmwYTE1N0aVLFyxZsgSRkZE4cuRIUcRIRERErzCm7wbSOllJTk6Gr68vAMDKygoPHjwAALRq1Qpbt27VbXRERESkUc4E28JuhkDrZKVs2bK4desWAMDT0xM7duwAABw7dgxKpVK30REREZHR0zpZadeuHeLi4gAAn332GcaNG4eKFSuiZ8+e6NWrl84DJCIiotyMaRhI69VAU6ZMkf7fqVMnlCtXDocPH0bFihXRunVrnQZHREREmvF2+1rw9/eHv7+/LmIhIiIiyqVAycqWLVsK3GCbNm3eOBgiIiIqGLlMBnkhh3EKe/zbUqBkJSQkpECNyWQyZGdnFyYeIiIiKgBd3CvFQHKVgiUrKpWqqOMgIiIi0khn3w1EREREb48xfTdQgZcu7969G1WqVEF6enqufQ8ePMA777yD/fv36zQ4IiIi0qywt9o3pFvuFzhZiY2NRd++fWFjY5Nrn62tLfr374/Zs2frNDgiIiKiAicrp0+fRvPmzfPc37RpU5w4cUInQREREVH+clYDFXYzBAWes3L79m2YmZnl3ZCpKVJTU3USFBEREeXPmFYDFbhnpUyZMjhz5kye+//880+4urrqJCgiIiLKnzHdbr/AyUqLFi0wbtw4PH36NNe+J0+eICoq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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"true_labels = df_sample[\"answer_true\"].map(QA_PROMPT_RAILS_MAP).tolist()\n",
"classes = list(QA_PROMPT_RAILS_MAP.values())\n",
"\n",
"print(classification_report(true_labels, Q_and_A_classifications, labels=classes))\n",
"confusion_matrix = ConfusionMatrix(\n",
" actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=classes\n",
")\n",
"confusion_matrix.plot(\n",
" cmap=plt.colormaps[\"Blues\"],\n",
" number_label=True,\n",
" normalized=True,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LLM Evals: Q&A Classifications GPT-4 Turbo\n",
"\n",
"\n",
"Evaluate the predictions against human-labeled ground-truth Q&A labels."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The `model_name` field is deprecated. Use `model` instead. This will be removed in a future release.\n"
]
}
],
"source": [
"model = OpenAIModel(model_name=\"gpt-4-turbo-preview\", temperature=0.0)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9994cc409e634712b8bb35535b11d152",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"llm_classify | | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Q_and_A_classifications = llm_classify(\n",
" dataframe=df_sample,\n",
" template=QA_PROMPT_TEMPLATE,\n",
" model=model,\n",
" rails=list(QA_PROMPT_RAILS_MAP.values()),\n",
" concurrency=20,\n",
")[\"label\"].tolist()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" correct 1.00 0.88 0.94 50\n",
" incorrect 0.89 1.00 0.94 50\n",
"\n",
" accuracy 0.94 100\n",
" macro avg 0.95 0.94 0.94 100\n",
"weighted avg 0.95 0.94 0.94 100\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAHHCAYAAAB+wBhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZFElEQVR4nO3deXhM1/8H8PdMJDORjchOJCQEFQlCGqkmSEWDCtXaWpHauigaWxVZqEStUdS+1Va1VLU0ltRW0lqjUTsJiizWLEjInN8ffpmvkUlkZCIznffLc59Hzpx7zudORvJxlnslQggBIiIiIh0lrewAiIiIiErDZIWIiIh0GpMVIiIi0mlMVoiIiEinMVkhIiIincZkhYiIiHQakxUiIiLSaUxWiIiISKcxWSEiIiKdxmSFDN6FCxfQvn17WFlZQSKRYMuWLVptPy0tDRKJBCtWrNBqu/osMDAQgYGBWm3z2rVrkMvlOHjwoFbb1WUSiQTR0dHKr1esWAGJRIK0tLRXGoerqyv69eun/DohIQHm5ubIysp6pXHQfxeTFdIJly5dwuDBg1G3bl3I5XJYWlrC398fs2fPxsOHDyu077CwMKSkpGDy5MlYtWoVfHx8KrS/V6lfv36QSCSwtLRU+z5euHABEokEEokE06dP17j9GzduIDo6GsnJyVqItnwmTpwIX19f+Pv7K8uKrr9JkyZQ92QRiUSCIUOGvMowDUKHDh3g7u6OuLi4yg6F/iOYrFCl27ZtGzw9PfHjjz+ic+fOmDNnDuLi4lC7dm2MGjUKw4YNq7C+Hz58iKSkJPTv3x9DhgzBBx98gFq1amm1DxcXFzx8+BAffvihVtstqypVquDBgwf45Zdfir22Zs0ayOXyl277xo0biImJ0ThZ2blzJ3bu3PnS/T4vKysLK1euxMcff6z29ZSUFGzevFlr/emqDz/8EA8fPoSLi0tlh4LBgwdj4cKFyMnJqexQ6D+AyQpVqtTUVPTs2RMuLi44ffo0Zs+ejYEDB+Kzzz7DunXrcPr0abz22msV1n/RMHW1atUqrA+JRAK5XA4jI6MK66M0MpkM7dq1w7p164q9tnbtWnTs2PGVxfLgwQMAgImJCUxMTLTW7urVq1GlShV07ty52GumpqaoX78+Jk6cqHZ0RVuePHmCgoKCCmu/LIyMjCCXyyGRSCo1DgB49913kZ+fjw0bNlR2KPQfwGSFKtXUqVORm5uLpUuXwtHRsdjr7u7uKiMrT548waRJk+Dm5gaZTAZXV1d89dVXyM/PVznP1dUVnTp1wh9//IGWLVtCLpejbt26+P7775V1oqOjlf8DHTVqFCQSCVxdXQE8nT4o+vuzoqOji/0i2LVrF9544w1Uq1YN5ubm8PDwwFdffaV8vaQ1K7///jtat24NMzMzVKtWDV26dMGZM2fU9nfx4kX069cP1apVg5WVFcLDw5W/+Muid+/e+O2333Dv3j1l2ZEjR3DhwgX07t27WP07d+5g5MiR8PT0hLm5OSwtLfH222/j5MmTyjp79+5FixYtAADh4eHK6aSi6wwMDETjxo1x7NgxvPnmm6hataryfXl+zUpYWBjkcnmx6w8ODkb16tVx48aNUq9vy5Yt8PX1hbm5ebHXpFIpxo8fj7///hs//fRTqe0AQGZmJvr37w97e3vI5XJ4eXlh5cqVKnWKvqfTp09HfHy88vN4+vRp5ffs/Pnz+OCDD2BlZQVbW1tMmDABQghcu3YNXbp0gaWlJRwcHDBjxgyVtgsKChAZGYnmzZvDysoKZmZmaN26Nfbs2fPC2J9fs1IUi7rj2TUmCoUC8fHxeO211yCXy2Fvb4/Bgwfj7t27Ku0LIfD111+jVq1aqFq1Ktq0aYN//vlHbSx2dnZo0qQJfv755xfGTfQiTFaoUv3yyy+oW7cuWrVqVab6AwYMQGRkJJo1a4ZZs2YhICAAcXFx6NmzZ7G6Fy9eRPfu3fHWW29hxowZqF69Ovr166f84dqtWzfMmjULANCrVy+sWrUK8fHxGsX/zz//oFOnTsjPz8fEiRMxY8YMvPPOOy9c5Ll7924EBwcjMzMT0dHRiIiIwKFDh+Dv7692ceT777+PnJwcxMXF4f3338eKFSsQExNT5ji7desGiUSiMhWydu1aNGjQAM2aNStW//Lly9iyZQs6deqEmTNnYtSoUUhJSUFAQIAycWjYsCEmTpwIABg0aBBWrVqFVatW4c0331S2c/v2bbz99tvw9vZGfHw82rRpoza+2bNnw9bWFmFhYSgsLAQALFy4EDt37sScOXPg5ORU4rU9fvwYR44cUXsdRXr37o169eq9cHTl4cOHCAwMxKpVq9CnTx9MmzYNVlZW6NevH2bPnl2s/vLlyzFnzhwMGjQIM2bMgLW1tfK1Hj16QKFQYMqUKfD19cXXX3+N+Ph4vPXWW6hZsya++eYbuLu7Y+TIkdi/f7/yvOzsbCxZsgSBgYH45ptvEB0djaysLAQHB2s83datWzfl96XoGD58OICnyUSRwYMHY9SoUcp1YuHh4VizZg2Cg4Px+PFjZb3IyEhMmDABXl5emDZtGurWrYv27dsjLy9Pbf/NmzfHoUOHNIqZSC1BVEnu378vAIguXbqUqX5ycrIAIAYMGKBSPnLkSAFA/P7778oyFxcXAUDs379fWZaZmSlkMpkYMWKEsiw1NVUAENOmTVNpMywsTLi4uBSLISoqSjz7z2bWrFkCgMjKyiox7qI+li9frizz9vYWdnZ24vbt28qykydPCqlUKvr27Vusv48++kilza5du4oaNWqU2Oez12FmZiaEEKJ79+6iXbt2QgghCgsLhYODg4iJiVH7Hjx69EgUFhYWuw6ZTCYmTpyoLDty5EixaysSEBAgAIgFCxaofS0gIEClbMeOHQKA+Prrr8Xly5eFubm5CA0NfeE1Xrx4UQAQc+bMKfX6V65cKQCIzZs3K18HID777DPl1/Hx8QKAWL16tbKsoKBA+Pn5CXNzc5Gdna18LwAIS0tLkZmZqdJn0fds0KBByrInT56IWrVqCYlEIqZMmaIsv3v3rjA1NRVhYWEqdfPz81XavHv3rrC3ty/2OQAgoqKilF8vX75cABCpqalq36usrCxRu3Zt4enpKXJzc4UQQhw4cEAAEGvWrFGpm5CQoFKemZkpTExMRMeOHYVCoVDW++qrrwQAlWsoEhsbKwCIjIwMtfEQlRVHVqjSZGdnAwAsLCzKVH/79u0AgIiICJXyESNGAHi6UPdZjRo1QuvWrZVf29rawsPDA5cvX37pmJ9XtNbl559/hkKhKNM5N2/eRHJyMvr166fyP/EmTZrgrbfeUl7ns55fONq6dWvcvn1b+R6WRe/evbF3716kp6fj999/R3p6utopIODpOhep9OmPh8LCQty+fVs5xXX8+PEy9ymTyRAeHl6muu3bt8fgwYMxceJEdOvWDXK5HAsXLnzhebdv3wYAVK9evdR6ffr0eeHoyvbt2+Hg4IBevXopy4yNjTF06FDk5uZi3759KvXfffdd2Nraqm1rwIAByr8bGRnBx8cHQgj0799fWV6tWrVin0kjIyPleh6FQoE7d+7gyZMn8PHx0ei9f15hYSF69eqFnJwc/PTTTzAzMwMAbNiwAVZWVnjrrbdw69Yt5dG8eXOYm5srp592796NgoICfP755ypToUUjNeoUfU9u3br10nETAZwGokpkaWkJAGXeLXDlyhVIpVK4u7urlDs4OKBatWq4cuWKSnnt2rWLtVG9evVi8/Dl0aNHD/j7+2PAgAGwt7dHz5498eOPP5aauBTF6eHhUey1hg0b4tatW8WG1Z+/lqJfAppcS0hICCwsLLB+/XqsWbMGLVq0KPZeFlEoFJg1axbq1asHmUwGGxsb2Nra4u+//8b9+/fL3GfNmjU1Wkg7ffp0WFtbIzk5Gd9++63KVMWLlJSAFDEyMsL48eORnJxc4r10rly5gnr16ikTtSINGzZUvv6sOnXqlNjf898zKysryOVy2NjYFCt//vu4cuVKNGnSBHK5HDVq1ICtrS22bdum0Xv/vPHjx+P333/H2rVr4ebmpiy/cOEC7t+/Dzs7O9ja2qocubm5yMzMBPC/a69Xr55Ku7a2tiUmikXfE11Y8Ev6rUplB0CGy9LSEk5OTjh16pRG55X1B19Ju29e9EuttD6K1lMUMTU1xf79+7Fnzx5s27YNCQkJWL9+Pdq2bYudO3dqbQdQea6liEwmQ7du3bBy5UpcvnxZ5WZiz4uNjcWECRPw0UcfYdKkSbC2toZUKsXw4cPLPIIEPH1/NHHixAnlL8eUlBSVEY6S1KhRA0DZErc+ffpg0qRJmDhxIkJDQzWKTZ3Srk/d96ws38fVq1ejX79+CA0NxahRo2BnZwcjIyPExcXh0qVLLxXnli1b8M0332DSpEno0KGDymsKhQJ2dnZYs2aN2nNLGjkqi6LvyfMJGpGmmKxQperUqRMWLVqEpKQk+Pn5lVrXxcUFCoUCFy5cUP5PFwAyMjJw7949rd5bonr16io7Z4o8/z9r4Oluk3bt2qFdu3aYOXMmYmNjMW7cOOzZswdBQUFqrwMAzp07V+y1s2fPwsbGRjlEr229e/fGsmXLIJVK1S5KLrJx40a0adMGS5cuVSm/d++eyi8ebf6POS8vD+Hh4WjUqBFatWqFqVOnomvXrsodRyWpXbs2TE1NkZqa+sI+ikZX+vXrp3aXiouLC/7++28oFAqV0ZWzZ88qX69oGzduRN26dbF582aV9zcqKuql2jt//jzCwsIQGhqqskutiJubG3bv3g1/f/9Sk6+ia79w4QLq1q2rLM/KyioxUUxNTVWOyhGVB6eBqFKNHj0aZmZmGDBgADIyMoq9funSJeUujJCQEAAotmNn5syZAKDV+4W4ubnh/v37+Pvvv5VlN2/eLLb19c6dO8XO9fb2BoBi26mLODo6wtvbGytXrlRJiE6dOoWdO3cqr7MitGnTBpMmTcLcuXPh4OBQYj0jI6NiozYbNmzA9evXVcqKkip1iZ2mxowZg6tXr2LlypWYOXMmXF1dERYWVuL7WMTY2Bg+Pj44evRomfr54IMP4O7urnY3VUhICNLT07F+/Xpl2ZMnTzBnzhyYm5sjICBAs4t6CUWjL8++/3/99ReSkpI0bis3Nxddu3ZFzZo1sXLlSrXJ5fvvv4/CwkJMmjSp2GtPnjxRfm+DgoJgbGyMOXPmqMRW2g66Y8eOvfA/IURlwZEVqlRubm5Yu3YtevTogYYNG6Jv375o3LgxCgoKcOjQIWzYsEF5PwgvLy+EhYVh0aJFuHfvHgICAnD48GGsXLkSoaGhJW6LfRk9e/bEmDFj0LVrVwwdOhQPHjzA/PnzUb9+fZVFjhMnTsT+/fvRsWNHuLi4IDMzE9999x1q1aqFN954o8T2p02bhrfffht+fn7o378/Hj58iDlz5sDKyqrU6ZnyKrrnyIt06tQJEydORHh4OFq1aoWUlBSsWbNG5X/UwNPvX7Vq1bBgwQJYWFjAzMwMvr6+pa7lUOf333/Hd999h6ioKOUW5OXLlyMwMBATJkzA1KlTSz2/S5cuGDduHLKzs5VroUpiZGSEcePGqV34O2jQICxcuBD9+vXDsWPH4Orqio0bN+LgwYOIj48v82Lw8ujUqRM2b96Mrl27omPHjkhNTcWCBQvQqFEj5ObmatRWTEwMTp8+jfHjxxcbSXJzc4Ofnx8CAgIwePBgxMXFITk5Ge3bt4exsTEuXLiADRs2YPbs2ejevTtsbW0xcuRIxMXFoVOnTggJCcGJEyfw22+/qZ3myczMxN9//43PPvusXO8HEQBuXSbdcP78eTFw4EDh6uoqTExMhIWFhfD39xdz5swRjx49UtZ7/PixiImJEXXq1BHGxsbC2dlZjB07VqWOEE+3Lnfs2LFYP89vmS1p67IQQuzcuVM0btxYmJiYCA8PD7F69epiW5cTExNFly5dhJOTkzAxMRFOTk6iV69e4vz588X6eH577+7du4W/v78wNTUVlpaWonPnzuL06dMqdYr6e35r9Iu2qBZ5dutuSUraujxixAjh6OgoTE1Nhb+/v0hKSlK75fjnn38WjRo1ElWqVFG5zoCAAPHaa6+p7fPZdrKzs4WLi4to1qyZePz4sUq9L774QkilUpGUlFTqNWRkZIgqVaqIVatWlen6Hz9+LNzc3IptXS5qKzw8XNjY2AgTExPh6elZ7HtX2uempO9ZSbE8/z4pFAoRGxsrXFxchEwmE02bNhW//vqr2u30eMHW5bCwMAFA7fH8VuNFixaJ5s2bC1NTU2FhYSE8PT3F6NGjxY0bN5R1CgsLRUxMjPJzERgYKE6dOiVcXFyKtTd//nxRtWpV5XZvovKQCFGB958mInpF+vfvj/Pnz+PAgQOVHQoBaNq0KQIDA5U3XiQqDyYrRPSfcPXqVdSvXx+JiYkqT16mVy8hIQHdu3fH5cuXNdp+TlQSJitERESk07gbiIiIiHQakxUiIiIqk/3796Nz585wcnKCRCIp8W7Qz9q7dy+aNWsGmUwGd3f3Yk+gLwsmK0RERFQmeXl58PLywrx588pUPzU1FR07dkSbNm2QnJyM4cOHY8CAAdixY4dG/XLNChEREWlMIpHgp59+KvXRFWPGjMG2bdtUHqvSs2dP3Lt3DwkJCWXuizeF0zEKhQI3btyAhYUFH/5FRKRnhBDIycmBk5NTsQdiatOjR49QUFCglbaEEMV+38hkMshksnK3nZSUVOyxI8HBwaU+rVsdJis65saNG3B2dq7sMIiIqByuXbuGWrVqVUjbjx49gqlFDeDJA620Z25uXuzuyFFRUVq5m3Z6ejrs7e1Vyuzt7ZGdnY2HDx+W+WGnTFZ0TNHtvE3emgKJsbySoyGqGEfmvvhpykT6KDcnB6283Cv00QwFBQXAkweQNQoDjEzK11hhAXJPr8S1a9dUHlWhjVEVbWKyomOKhuIkxnJIjMuWcRLpGwuL0p/fQ6TvXsk0fhU5JOVMVoTk6VSVpaXlC5+r9TIcHByKPaQ2IyMDlpaWZR5VAZisEBER6ScJgPImRRWcU/n5+WH79u0qZbt27dL4adzcukxERKSPJFLtHBrIzc1FcnIykpOTATzdmpycnIyrV68CAMaOHYu+ffsq63/88ce4fPkyRo8ejbNnz+K7777Djz/+iC+++EKjfpmsEBERUZkcPXoUTZs2RdOmTQEAERERaNq0KSIjIwEAN2/eVCYuAFCnTh1s27YNu3btgpeXF2bMmIElS5YgODhYo345DURERKSPJBItTANpdn5gYCBKuz2burvTBgYG4sSJE5pGpoLJChERkT56iWkctW3oAf2IkoiIiAwWR1aIiIj0USVMA1UWJitERER6SQvTQHoywaIfURIREZHB4sgKERGRPuI0EBEREek07gYiIiIi0g0cWSEiItJHnAYiIiIinWZA00BMVoiIiPSRAY2s6EdKRURERAaLIytERET6iNNAREREpNMkEi0kK5wGIiIiIio3jqwQERHpI6nk6VHeNvQAkxUiIiJ9ZEBrVvQjSiIiIjJYHFkhIiLSRwZ0nxUmK0RERPqI00BEREREuoEjK0RERPqI00BERESk0wxoGojJChERkT4yoJEV/UipiIiIyGBxZIWIiEgfcRqIiIiIdBqngYiIiIh0A0dWiIiI9JIWpoH0ZMyCyQoREZE+4jQQERERkW7gyAoREZE+kki0sBtIP0ZWmKwQERHpIwPauqwfURIREZHB4sgKERGRPjKgBbZMVoiIiPSRAU0DMVkhIiLSRwY0sqIfKRUREREZLI6sEBER6SNOAxEREZFO4zQQERERkW7gyAoREZEekkgkkBjIyAqTFSIiIj1kSMkKp4GIiIhIp3FkhYiISB9J/v8obxt6gMkKERGRHuI0EBEREZGO4MgKERGRHjKkkRUmK0RERHqIyQoRERHpNENKVrhmhYiIiHQaR1aIiIj0EbcuExERkS7jNBARERGRjuDIChERkR6SSKCFkRXtxFLRmKwQERHpIQm0MA2kJ9kKp4GIiIhIp3FkhYiISA8Z0gJbJitERET6yIC2LnMaiIiIiHQaR1aIiIj0kRamgQSngYiIiKiiaGPNSvl3E70aTFaIiIj0kCElK1yzQkRERGU2b948uLq6Qi6Xw9fXF4cPHy61fnx8PDw8PGBqagpnZ2d88cUXePTokUZ9MlkhIiLSRxItHRpYv349IiIiEBUVhePHj8PLywvBwcHIzMxUW3/t2rX48ssvERUVhTNnzmDp0qVYv349vvrqK436ZbJCRESkh4qmgcp7aGLmzJkYOHAgwsPD0ahRIyxYsABVq1bFsmXL1NY/dOgQ/P390bt3b7i6uqJ9+/bo1avXC0djnsdkhYiIyMBlZ2erHPn5+cXqFBQU4NixYwgKClKWSaVSBAUFISkpSW27rVq1wrFjx5TJyeXLl7F9+3aEhIRoFB8X2BIREekhbS6wdXZ2VimPiopCdHS0StmtW7dQWFgIe3t7lXJ7e3ucPXtWbfu9e/fGrVu38MYbb0AIgSdPnuDjjz/WeBqIyQoREZEe0maycu3aNVhaWirLZTJZudotsnfvXsTGxuK7776Dr68vLl68iGHDhmHSpEmYMGFCmdthskJERGTgLC0tVZIVdWxsbGBkZISMjAyV8oyMDDg4OKg9Z8KECfjwww8xYMAAAICnpyfy8vIwaNAgjBs3DlJp2VajcM0KERGRHnrVC2xNTEzQvHlzJCYmKssUCgUSExPh5+en9pwHDx4US0iMjIwAAEKIMvfNkRUiIiJ9VAkPMoyIiEBYWBh8fHzQsmVLxMfHIy8vD+Hh4QCAvn37ombNmoiLiwMAdO7cGTNnzkTTpk2V00ATJkxA586dlUlLWTBZISIiojLp0aMHsrKyEBkZifT0dHh7eyMhIUG56Pbq1asqIynjx4+HRCLB+PHjcf36ddja2qJz586YPHmyRv1KhCbjMFThsrOzYWVlBVlIPCTGppUdDlGFOLOkb2WHQFQhcnKy0aSuPe7fv//CNSAvq+j3hMNHqyE1qVquthQFD5C+7IMKjVcbOLJCRESkhwzp2UBMVoiIiPSQISUr3A1EREREOo0jK0RERPqoEnYDVRYmK0RERHqI00BEREREOoIjK/SfMqBDI3z+jhfsqpni1JU7GLP0II5fzCqx/scdG+Oj9o1Qy8Ycd3Ie4ec/UzFxzWHkPy4EAEilEnz5fnO839oddtWqIv3uA6zdew7TN554VZdEpGLNzwexbMNe3LqTgwZujhj3WVc0aVBbbd0LaemYs3IH/rnwL25k3MWXn7yDsG5vqtRZtC4Ru/5IweVrWZDLqqBpI1eMGNARdZztXsXlUDlwZIXKLTo6Gt7e3pUdhkHp2qouvg7zwzcbjiFw9GacSruNTeNDYGMpV1u/+xtuiOrTElM3HIPv8B/x+fx96NqqLib0bqGsMzzUCx+1b4TRSw/Cd/iPiF79F4Z28cKgkNde1WURKW3fm4xvFm7FZx+8hU3zh8OjrhMGjl2M23dz1NZ/lF8AZ0drRPQPgY21hdo6R/6+jN7v+OOHbz/H0imD8fhJIfp/uQgPHuZX5KWQFkighdvt68miFYNOVgoKCtSWP378+BVHQtrwaecm+H73Wazdcx7n/r2HiEUH8CD/CT5o66G2fksPB/x1LgMb/7iEa1m52HPyOjb9cQnN3e2eqWOP7UfSsPP4NVzLysXWP1Ox5+R1lTpEr8rKTfvw3tu+6NahJdxdHBA97F3IZcbYvOOI2vqeHrUxalBndGzTFCbG6gfSF8cNRNfgFqjn6oAGbk6IG9UTNzPv4Z8L/1bkpRBpRO+SFYVCgalTp8Ld3R0ymQy1a9dW3rY3JSUFbdu2hampKWrUqIFBgwYhNzdXeW6/fv0QGhqKyZMnw8nJCR4eHkhLS4NEIsH69esREBAAuVyONWvWAACWLFmChg0bQi6Xo0GDBvjuu+9UYvn333/Rq1cvWFtbw8zMDD4+Pvjrr7+wYsUKxMTE4OTJk8rsdcWKFa/sPTJExlWk8K5rg71//+8HrBDAvpTraOFhr/acw+fS4V3XBs3cbQEALnYWeKuZM3aduPpMnQwEeNaEm6MVAKCxizVeb2CP3SeuVeDVEBVX8PgJ/jl/HX7N6ivLpFIp/JrVQ/LpK1rrJyfvEQDAyqJ8d0aliveqH2RYmfRuzcrYsWOxePFizJo1C2+88QZu3ryJs2fPIi8vD8HBwfDz88ORI0eQmZmJAQMGYMiQISqJQmJiIiwtLbFr1y6Vdr/88kvMmDEDTZs2VSYskZGRmDt3Lpo2bYoTJ05g4MCBMDMzQ1hYGHJzcxEQEICaNWti69atcHBwwPHjx6FQKNCjRw+cOnUKCQkJ2L17NwDAysrqVb5NBqeGhRxVjKTIuv9QpTzr3kPUq1lN7Tkb/7gEa0s5fpv0DiQSCYyrSLFsx2nM3JysrDPrp2RYmJrg8Oz3UagQMJJK8PW6I9hw4GIFXg1Rcffu56FQoUCN6uYq5TWqWyD1WqZW+lAoFIib/zOaveaK+nUctdImVSBuXdZNOTk5mD17NubOnYuwsDAAgJubG9544w0sXrwYjx49wvfffw8zMzMAwNy5c9G5c2d88803yocsmZmZYcmSJTAxMQEApKWlAQCGDx+Obt26KfuKiorCjBkzlGV16tTB6dOnsXDhQoSFhWHt2rXIysrCkSNHYG1tDQBwd3dXnm9ubo4qVarAwcGh1GvKz89Hfv7/5oazs7PL8xaRBvxfc0RE16YYueQPHLuQiToOVpgS3gojuzdVLqDt2soN77V2x8DZv+PstTvwdLVBbLgfbt7Jww/7LlTyFRBp18Q5P+FCWjrWzPqsskMhUqFXycqZM2eQn5+Pdu3aqX3Ny8tLmagAgL+/PxQKBc6dO6dMVjw9PZWJyrN8fHyUf8/Ly8OlS5fQv39/DBw4UFn+5MkT5QhJcnIymjZtqkxUXlZcXBxiYmLK1QYBt3Me4UmhArZWqg9/tK1misx7D9SeM66nD37cfwGrEs8BAE5fvQszWRXM+vhNzNh0AkIAEz/0RfyWZGw+eElZp5atOb7o1pTJCr1S1azMYCSV4vbdXJXy23dzYFO9/A+gmzRnM/b9dRqrZnwKB9tq5W6PKh53A+koU9PyP4X42WSmpPKidS6LFy9GcnKy8jh16hT+/PNPrcUCPJ3Wun//vvK4do1rIV7G4ycKJF++hQDPmsoyiQR409MJR85lqD3H1KQKFM89dLxQIf7/3Kf/gE1lVaBQqNZRKASk+vHvm/5DTIyr4LX6NfHnif8lyQqFAn+euAjvRi4v3a4QApPmbMbug6ewfOrHqOVYQxvh0itgSGtW9CpZqVevHkxNTZGYmFjstYYNG+LkyZPIy8tTlh08eBBSqRQeHup3g5TE3t4eTk5OuHz5Mtzd3VWOOnXqAACaNGmC5ORk3LlzR20bJiYmKCwsfGFfMpkMlpaWKge9nO9++Rt9gxqgZ0A91K9ZDTMHtoaZzBhr9pwHAMz/PBCRz2xLTjh2FeHtG6Gbvxtq21kgsElNfNXTBwlHrygTlISjVxDxblO0b+YMZ1tzdGzpik87eWLb4bTKuEQycGHvBmDD9r+wZecRXLqSgZhvN+PhowJ0DX76uR7zzTrMXLpdWb/g8ROcuXgdZy5ex+PHhci8dR9nLl7Hleu3lHUmztmMXxKPY9rYPjCrKkPWnWxk3cnGo3zuitR1Eol2Dn2gV9NAcrkcY8aMwejRo2FiYgJ/f39kZWXhn3/+QZ8+fRAVFYWwsDBER0cjKysLn3/+OT788EPlFJAmYmJiMHToUFhZWaFDhw7Iz8/H0aNHcffuXURERKBXr16IjY1FaGgo4uLi4OjoiBMnTsDJyQl+fn5wdXVFamoqkpOTUatWLVhYWEAmk1XAu0JFfjp0GTaWpviqpw/sqlVFStptdJ+8XbnotpaNucooyfSNxyGEwLiePnC0NsPt7EdIOHYFk9b+bxvomKWH8FVPH0wf+AZsLE2RfvcBVuw6g6kbj7/y6yMKCfTG3Xu5+HblDty6m4OGbk5YFDsANtWf3kPlZuZdSJ/57ZN1OxvdPpml/HrZhn1YtmEfWjSpi+9nfAoA+OGXJABA2Mj5Kn3FjuyhTIKIKptEiOfGwXWcQqFAXFwcFi9ejBs3bsDR0REff/wxxo4di5SUFAwbNgxJSUmoWrUq3n33XcycORPm5k9Xz/fr1w/37t3Dli1blO2lpaWhTp06OHHiRLGbuK1duxbTpk3D6dOnYWZmBk9PTwwfPhxdu3YFAFy5cgUjRozArl278OTJEzRq1Ajz5s1Dy5YtkZ+fjz59+iAxMRH37t3D8uXL0a9fvxdeX3Z2NqysrCALiYfEWDtTTUS65sySvpUdAlGFyMnJRpO69rh//36FjZQX/Z6o+/lGSGXqlzaUlSI/D5fndK/QeLVB75KV/zomK2QImKzQf9UrTVaGboRROZOVwvw8XP5W95MVvVqzQkRERIZHr9asEBER0VOGtHWZyQoREZEe0sZuHj3JVTgNRERERLqNIytERER6SCqVQFrOO1QKPbnDJZMVIiIiPcRpICIiIiIdwZEVIiIiPcTdQERERKTTDGkaiMkKERGRHjKkkRWuWSEiIiKdxpEVIiIiPWRIIytMVoiIiPSQIa1Z4TQQERER6TSOrBAREekhCbQwDQT9GFphskJERKSHOA1EREREpCM4skJERKSHuBuIiIiIdBqngYiIiIh0BEdWiIiI9BCngYiIiEinGdI0EJMVIiIiPWRIIytcs0JEREQ6jSMrRERE+kgL00B6cgNbJitERET6iNNARERERDqCIytERER6iLuBiIiISKdxGoiIiIhIR3BkhYiISA9xGoiIiIh0GqeBiIiIiHQER1aIiIj0kCGNrDBZISIi0kNcs0JEREQ6zZBGVrhmhYiIiHSaxsnKw4cP8eDBA+XXV65cQXx8PHbu3KnVwIiIiKhkRdNA5T30gcbJSpcuXfD9998DAO7duwdfX1/MmDEDXbp0wfz587UeIBERERVXNA1U3kMfaJysHD9+HK1btwYAbNy4Efb29rhy5Qq+//57fPvtt1oPkIiIiAybxgtsHzx4AAsLCwDAzp070a1bN0ilUrz++uu4cuWK1gMkIiKi4iTQwm4grURS8TQeWXF3d8eWLVtw7do17NixA+3btwcAZGZmwtLSUusBEhERUXFSiUQrhz7QOFmJjIzEyJEj4erqipYtW8LPzw/A01GWpk2baj1AIiIiMmwaTwN1794db7zxBm7evAkvLy9lebt27dC1a1etBkdERETqGdJN4V7qPisODg6wsLDArl278PDhQwBAixYt0KBBA60GR0REROpxN1Apbt++jXbt2qF+/foICQnBzZs3AQD9+/fHiBEjtB4gERERFSeVaOfQ1Lx58+Dq6gq5XA5fX18cPny41Pr37t3DZ599BkdHR8hkMtSvXx/bt2/X7Fo1DfKLL76AsbExrl69iqpVqyrLe/TogYSEBE2bIyIiIj2xfv16REREICoqCsePH4eXlxeCg4ORmZmptn5BQQHeeustpKWlYePGjTh37hwWL16MmjVratSvxmtWdu7ciR07dqBWrVoq5fXq1ePWZSIioldFooVn+2h4+syZMzFw4ECEh4cDABYsWIBt27Zh2bJl+PLLL4vVX7ZsGe7cuYNDhw7B2NgYAODq6qpxmBqPrOTl5amMqBS5c+cOZDKZxgEQERGR5rR5u/3s7GyVIz8/v1h/BQUFOHbsGIKCgpRlUqkUQUFBSEpKUhvj1q1b4efnh88++wz29vZo3LgxYmNjUVhYqNG1apystG7dWnm7feBpVqdQKDB16lS0adNG0+aIiIiokjk7O8PKykp5xMXFFatz69YtFBYWwt7eXqXc3t4e6enpatu9fPkyNm7ciMLCQmzfvh0TJkzAjBkz8PXXX2sUn8bTQFOnTkW7du1w9OhRFBQUYPTo0fjnn39w584dHDx4UNPmiIiI6CVI/v9PedsAgGvXrqnc2FVbMyUKhQJ2dnZYtGgRjIyM0Lx5c1y/fh3Tpk1DVFRUmdvROFlp3Lgxzp8/j7lz58LCwgK5ubno1q2bcqUvERERVbyX3c3zfBsAYGlp+cK70NvY2MDIyAgZGRkq5RkZGXBwcFB7jqOjI4yNjWFkZKQsa9iwIdLT01FQUAATE5MyxalxsgIAVlZWGDdu3MucSkRERHrIxMQEzZs3R2JiIkJDQwE8HTlJTEzEkCFD1J7j7++PtWvXQqFQQCp9uvLk/PnzcHR0LHOiArzEmpWEhAT88ccfyq/nzZsHb29v9O7dG3fv3tW0OSIiInoJlXFTuIiICCxevBgrV67EmTNn8MknnyAvL0+5O6hv374YO3assv4nn3yCO3fuYNiwYTh//jy2bduG2NhYfPbZZxr1q3GyMmrUKGRnZwMAUlJSEBERgZCQEKSmpiIiIkLT5oiIiOglaHM3UFn16NED06dPR2RkJLy9vZGcnIyEhATloturV68qbxYLPF24u2PHDhw5cgRNmjTB0KFDMWzYMLXbnEuj8TRQamoqGjVqBADYtGkTOnfujNjYWBw/fhwhISGaNkdERER6ZMiQISVO++zdu7dYmZ+fH/78889y9anxyIqJiQkePHgAANi9ezfat28PALC2tlaOuBAREVHFkkokWjn0gcYjK2+88QYiIiLg7++Pw4cPY/369QCeLph5/q62REREVDH41OVSzJ07F1WqVMHGjRsxf/585f39f/vtN3To0EHrARIREVFxhvTUZY1HVmrXro1ff/21WPmsWbO0EhARERHRszQeWTl+/DhSUlKUX//8888IDQ3FV199hYKCAq0GR0REROpVxm6gyqJxsjJ48GCcP38ewNN7/vfs2RNVq1bFhg0bMHr0aK0HSERERMUZ0gJbjZOV8+fPw9vbGwCwYcMGvPnmm1i7di1WrFiBTZs2aTs+IiIiMnAar1kRQkChUAB4unW5U6dOAJ7e+OXWrVvajY6IiIjUkvz/Ud429IHGyYqPjw++/vprBAUFYd++fZg/fz6ApzeLe/6x0URERFQxtLGbR192A2k8DRQfH4/jx49jyJAhGDduHNzd3QEAGzduRKtWrbQeIBERERk2jUdWmjRporIbqMi0adNUHgFNREREFUcqeXqUtw19oHGyUhK5XK6tpoiIiOgFDGkaSONkpbCwELNmzcKPP/6Iq1evFru3yp07d7QWHBEREZHGa1ZiYmIwc+ZM9OjRA/fv30dERAS6desGqVSK6OjoCgiRiIiI1DGEG8IBL5GsrFmzBosXL8aIESNQpUoV9OrVC0uWLEFkZGS5HwFNREREZWNIzwbSOFlJT0+Hp6cnAMDc3Bz3798HAHTq1Anbtm3TbnRERESkVtEC2/Ie+kDjZKVWrVq4efMmAMDNzQ07d+4EABw5cgQymUy70REREZHB0zhZ6dq1KxITEwEAn3/+OSZMmIB69eqhb9+++Oijj7QeIBERERVnSNNAGu8GmjJlivLvPXr0QO3atZGUlIR69eqhc+fOWg2OiIiI1OPt9jXg5+cHPz8/bcRCRERE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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"true_labels = df_sample[\"answer_true\"].map(QA_PROMPT_RAILS_MAP).tolist()\n",
"classes = list(QA_PROMPT_RAILS_MAP.values())\n",
"\n",
"print(classification_report(true_labels, Q_and_A_classifications, labels=classes))\n",
"confusion_matrix = ConfusionMatrix(\n",
" actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=classes\n",
")\n",
"confusion_matrix.plot(\n",
" cmap=plt.colormaps[\"Blues\"],\n",
" number_label=True,\n",
" normalized=True,\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.14"
}
},
"nbformat": 4,
"nbformat_minor": 4
}