diff --git a/HIVEBreastCancerPredictor.ipynb b/HIVEBreastCancerPredictor.ipynb
new file mode 100644
index 00000000..ae77bedb
--- /dev/null
+++ b/HIVEBreastCancerPredictor.ipynb
@@ -0,0 +1,1867 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "oVgomI-xvEDZ"
+ },
+ "source": [
+ "These are the imports needed to do the code"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 547
+ },
+ "id": "sOqXE1j0tfM0",
+ "outputId": "df25ff6d-0117-4ae0-d939-9eebf60c1516"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Collecting GEOparse\n",
+ " Downloading GEOparse-2.0.4-py3-none-any.whl.metadata (6.5 kB)\n",
+ "Requirement already satisfied: numpy>=1.7 in /usr/local/lib/python3.12/dist-packages (from GEOparse) (2.0.2)\n",
+ "Requirement already satisfied: pandas>=0.17 in /usr/local/lib/python3.12/dist-packages (from GEOparse) (2.2.2)\n",
+ "Requirement already satisfied: requests>=2.21.0 in /usr/local/lib/python3.12/dist-packages (from GEOparse) (2.32.4)\n",
+ "Requirement already satisfied: tqdm>=4.31.1 in /usr/local/lib/python3.12/dist-packages (from GEOparse) (4.67.3)\n",
+ "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas>=0.17->GEOparse) (2.9.0.post0)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas>=0.17->GEOparse) (2025.2)\n",
+ "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas>=0.17->GEOparse) (2026.1)\n",
+ "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests>=2.21.0->GEOparse) (3.4.7)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests>=2.21.0->GEOparse) (3.13)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests>=2.21.0->GEOparse) (2.5.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests>=2.21.0->GEOparse) (2026.4.22)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas>=0.17->GEOparse) (1.17.0)\n",
+ "Downloading GEOparse-2.0.4-py3-none-any.whl (29 kB)\n",
+ "Installing collected packages: GEOparse\n",
+ "Successfully installed GEOparse-2.0.4\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ " "
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Saving GSE25055_family.soft.gz to GSE25055_family.soft.gz\n"
+ ]
+ },
+ {
+ "output_type": "error",
+ "ename": "NameError",
+ "evalue": "name 'sklearn' is not defined",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m/tmp/ipykernel_19112/1601073121.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mgoogle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mfiles\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0muploaded\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfiles\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 16\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mversion\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m: name 'sklearn' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "### Imports / Setup\n",
+ "\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "\n",
+ "!pip install GEOparse\n",
+ "import GEOparse\n",
+ "\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score\n",
+ "\n",
+ "from google.colab import files\n",
+ "uploaded = files.upload()\n",
+ "print(sklearn.version)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "8G57eOASvBxc"
+ },
+ "source": [
+ "Now that the soft file has been uploaded, it gets saved under pmid_soft as the variable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true,
+ "id": "_CGN8qVuu_5b",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "580754f8-9c97-46bb-c22a-bbf05ce8487f"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "15-Apr-2026 14:20:36 INFO GEOparse - Parsing GSE25055_family.soft.gz: \n",
+ "INFO:GEOparse:Parsing GSE25055_family.soft.gz: \n",
+ "15-Apr-2026 14:20:36 DEBUG GEOparse - DATABASE: GeoMiame\n",
+ "DEBUG:GEOparse:DATABASE: GeoMiame\n",
+ "15-Apr-2026 14:20:36 DEBUG GEOparse - SERIES: GSE25055\n",
+ "DEBUG:GEOparse:SERIES: GSE25055\n",
+ "15-Apr-2026 14:20:36 DEBUG GEOparse - PLATFORM: GPL96\n",
+ "DEBUG:GEOparse:PLATFORM: GPL96\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615096\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615096\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615097\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615097\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615098\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615098\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615099\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615099\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615100\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615100\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615101\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615101\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615102\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615102\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615103\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615103\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615104\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615104\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615105\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615105\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615106\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615106\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615107\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615107\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615108\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615108\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615109\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615109\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615110\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615110\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615111\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615111\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615112\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615112\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615113\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615113\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615114\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615114\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615115\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615115\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615116\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615116\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615117\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615117\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615118\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615118\n",
+ "15-Apr-2026 14:20:37 DEBUG GEOparse - SAMPLE: GSM615119\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615119\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615120\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615120\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615121\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615121\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615122\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615122\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615123\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615123\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615124\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615124\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615125\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615125\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615126\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615126\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615127\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615127\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615128\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615128\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615129\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615129\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615130\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615130\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615131\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615131\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615132\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615132\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615133\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615133\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615134\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615134\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615135\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615135\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615136\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615136\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615137\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615137\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615138\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615138\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615139\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615139\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615140\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615140\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615141\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615141\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615142\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615142\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615143\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615143\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615144\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615144\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615145\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615145\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615146\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615146\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615147\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615147\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615148\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615148\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615149\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615149\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615150\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615150\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615151\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615151\n",
+ "15-Apr-2026 14:20:38 DEBUG GEOparse - SAMPLE: GSM615152\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615152\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615153\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615153\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615154\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615154\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615155\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615155\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615156\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615156\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615157\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615157\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615158\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615158\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615159\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615159\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615160\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615160\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615161\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615161\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615162\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615162\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615163\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615163\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615164\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615164\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615165\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615165\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615166\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615166\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615167\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615167\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615168\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615168\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615169\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615169\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615170\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615170\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615171\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615171\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615172\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615172\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615173\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615173\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615174\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615174\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615175\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615175\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615176\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615176\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615177\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615177\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615178\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615178\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615179\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615179\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615180\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615180\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615181\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615181\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615182\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615182\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615183\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615183\n",
+ "15-Apr-2026 14:20:39 DEBUG GEOparse - SAMPLE: GSM615184\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615184\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615185\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615185\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615186\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615186\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615187\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615187\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615188\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615188\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615189\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615189\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615190\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615190\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615191\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615191\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615192\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615192\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615193\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615193\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615194\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615194\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615195\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615195\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615196\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615196\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615197\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615197\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615198\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615198\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615199\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615199\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615200\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615200\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615201\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615201\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615202\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615202\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615203\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615203\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615204\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615204\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615205\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615205\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615206\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615206\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615207\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615207\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615208\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615208\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615209\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615209\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615210\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615210\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615211\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615211\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615212\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615212\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615213\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615213\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615214\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615214\n",
+ "15-Apr-2026 14:20:40 DEBUG GEOparse - SAMPLE: GSM615215\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615215\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615216\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615216\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615217\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615217\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615218\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615218\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615219\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615219\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615220\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615220\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615221\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615221\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615222\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615222\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615223\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615223\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615224\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615224\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615225\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615225\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615226\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615226\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615227\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615227\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615228\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615228\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615229\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615229\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615230\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615230\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615231\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615231\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615232\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615232\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615233\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615233\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615234\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615234\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615235\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615235\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615236\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615236\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615237\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615237\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615238\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615238\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615239\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615239\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615240\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615240\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615241\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615241\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615242\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615242\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615243\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615243\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615244\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615244\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615245\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615245\n",
+ "15-Apr-2026 14:20:41 DEBUG GEOparse - SAMPLE: GSM615246\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615246\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615247\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615247\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615248\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615248\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615249\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615249\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615250\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615250\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615251\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615251\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615252\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615252\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615253\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615253\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615254\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615254\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615255\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615255\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615256\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615256\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615257\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615257\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615258\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615258\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615259\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615259\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615260\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615260\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615261\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615261\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615262\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615262\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615263\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615263\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615264\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615264\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615265\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615265\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615266\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615266\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615267\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615267\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615268\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615268\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615269\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615269\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615270\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615270\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615271\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615271\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615272\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615272\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615273\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615273\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615274\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615274\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615275\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615275\n",
+ "15-Apr-2026 14:20:42 DEBUG GEOparse - SAMPLE: GSM615276\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615276\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615277\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615277\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615278\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615278\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615279\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615279\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615280\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615280\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615281\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615281\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615282\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615282\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615283\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615283\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615284\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615284\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615285\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615285\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615286\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615286\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615287\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615287\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615288\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615288\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615289\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615289\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615290\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615290\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615291\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615291\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615292\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615292\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615293\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615293\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615294\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615294\n",
+ "15-Apr-2026 14:20:43 DEBUG GEOparse - SAMPLE: GSM615295\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615295\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615296\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615296\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615297\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615297\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615298\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615298\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615299\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615299\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615300\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615300\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615301\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615301\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615302\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615302\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615303\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615303\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615304\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615304\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615305\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615305\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615306\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615306\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615307\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615307\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615308\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615308\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615309\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615309\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615310\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615310\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615311\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615311\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615312\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615312\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615313\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615313\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615314\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615314\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615315\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615315\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615316\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615316\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615317\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615317\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615318\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615318\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615319\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615319\n",
+ "15-Apr-2026 14:20:44 DEBUG GEOparse - SAMPLE: GSM615320\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615320\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615321\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615321\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615322\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615322\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615323\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615323\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615324\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615324\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615325\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615325\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615326\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615326\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615327\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615327\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615328\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615328\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615329\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615329\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615330\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615330\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615331\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615331\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615332\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615332\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615333\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615333\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615334\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615334\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615335\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615335\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615336\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615336\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615337\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615337\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615338\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615338\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615339\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615339\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615340\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615340\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615341\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615341\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615342\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615342\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615343\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615343\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615344\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615344\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615345\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615345\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615346\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615346\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615347\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615347\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615348\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615348\n",
+ "15-Apr-2026 14:20:45 DEBUG GEOparse - SAMPLE: GSM615349\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615349\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615350\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615350\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615351\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615351\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615352\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615352\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615353\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615353\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615354\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615354\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615355\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615355\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615356\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615356\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615357\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615357\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615358\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615358\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615359\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615359\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615360\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615360\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615361\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615361\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615362\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615362\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615363\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615363\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615364\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615364\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615365\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615365\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615366\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615366\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615367\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615367\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615368\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615368\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615369\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615369\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615370\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615370\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615371\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615371\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615372\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615372\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615373\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615373\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615374\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615374\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615375\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615375\n",
+ "15-Apr-2026 14:20:46 DEBUG GEOparse - SAMPLE: GSM615376\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615376\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615377\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615377\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615378\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615378\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615379\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615379\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615380\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615380\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615381\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615381\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615382\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615382\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615383\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615383\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615384\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615384\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615385\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615385\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615386\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615386\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615387\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615387\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615388\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615388\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615389\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615389\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615390\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615390\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615391\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615391\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615392\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615392\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615393\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615393\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615394\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615394\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615395\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615395\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615396\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615396\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615397\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615397\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615398\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615398\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615399\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615399\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615400\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615400\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615401\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615401\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615402\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615402\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615403\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615403\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615404\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615404\n",
+ "15-Apr-2026 14:20:47 DEBUG GEOparse - SAMPLE: GSM615405\n",
+ "DEBUG:GEOparse:SAMPLE: GSM615405\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "loaded\n",
+ "\n",
+ "310\n",
+ "dict_keys(['GPL96'])\n"
+ ]
+ }
+ ],
+ "source": [
+ "pmid_soft = GEOparse.get_GEO(filepath=\"GSE25055_family.soft.gz\")\n",
+ "print(\"loaded\")\n",
+ "\n",
+ "#additioal checks\n",
+ "print(type(pmid_soft))\n",
+ "print(len(pmid_soft.gsms))\n",
+ "print(pmid_soft.gpls.keys())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "EyddC3b-3j60"
+ },
+ "source": [
+ "Extracting the Meta-data: \"data about data\" gives us the type of data points sitting in the SOFT file\n",
+ "The code prints the columns that exist in the metadata some of the data is useful some of it is not. Seeing a list helps us identify that\n",
+ "The SHAPE of the metadata tells us its dimensions. In this case: 310, 25 indicates there are 310 rows and 35 colums. 35 characterisics for 310 total samples. We should also see the DRFS binary property show up becyase that property actuall gives us the resulting 1 or 0 that tells the code whether the paitient actually made it through treatment or relapsed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "JTRSN-la3jUi",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "eb0c2253-59da-4fab-c2e3-15fad39503e8"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Metadata shape: (310, 61)\n",
+ "\n",
+ "Metadata columns:\n",
+ "['sample_id', 'title', 'geo_accession', 'status', 'submission_date', 'last_update_date', 'type', 'channel_count', 'source_name_ch1', 'organism_ch1', 'taxid_ch1', 'characteristics_ch1', 'source', 'age_years', 'er_status_ihc', 'pr_status_ihc', 'her2_status', 'er_status_ihc_esr1_for_indeterminate', 'clinical_t_stage', 'clinical_nodal_status', 'clinical_ajcc_stage', 'grade', 'pathologic_response_pcr_rd', 'pathologic_response_rcb_class', 'drfs_1_event_0_censored', 'drfs_even_time_years', 'esr1_status', 'erbb2_status', 'set_class', 'chemosensitivity_prediction', 'ggi_class', 'pam50_class', 'dlda30_prediction', 'rcb_0_i_prediction', 'tissue', 'treatment_protocol_ch1', 'molecule_ch1', 'extract_protocol_ch1', 'label_ch1', 'label_protocol_ch1', 'hyb_protocol', 'scan_protocol', 'data_processing', 'probe_intensities_were_quantified_with_microarray_suite_version_5.0_(mas_5.0)_using_affymetrix_default_analysis_settings.__cel_files_were_normalized_using_global_scaling_with_a_trimmed_mean_target_intensity_of_each_array_arbitrarily_set_to_600_using_the_mas5_algorithm_from_the_simpleaffy_package_(http', 'platform_id', 'contact_name', 'contact_email', 'contact_phone', 'contact_institute', 'contact_address', 'contact_city', 'contact_state', 'contact_zip/postal_code', 'contact_country', 'contact_web_link', 'supplementary_file', 'ftp', 'relation', 'reanalyzed_by', 'series_id', 'data_row_count']\n"
+ ]
+ }
+ ],
+ "source": [
+ "# EXTRACT METADATA\n",
+ "metadata_list = []\n",
+ "\n",
+ "for sample_name, sample in pmid_soft.gsms.items():\n",
+ " row = {\"sample_id\": sample_name}\n",
+ "\n",
+ " for key, value in sample.metadata.items():\n",
+ " # Keep full metadata as readable strings\n",
+ " if isinstance(value, list):\n",
+ " row[key] = \" | \".join(map(str, value))\n",
+ "\n",
+ " # ALSO split things like \"drfs_1_event_0_censored: 1\"\n",
+ " for item in value:\n",
+ " if \":\" in item:\n",
+ " k, v = item.split(\":\", 1)\n",
+ " clean_key = k.strip().lower().replace(\" \", \"_\")\n",
+ " row[clean_key] = v.strip()\n",
+ " else:\n",
+ " row[key] = value\n",
+ "\n",
+ " metadata_list.append(row)\n",
+ "\n",
+ "metadata_df = pd.DataFrame(metadata_list)\n",
+ "\n",
+ "print(\"Metadata shape:\", metadata_df.shape)\n",
+ "print(\"\\nMetadata columns:\")\n",
+ "print(metadata_df.columns.tolist())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "9_RuqUfj5D1q"
+ },
+ "source": [
+ "Now we are going to identify the numeric (useful) data from the SOFT.file. Instead of looking at the metadate we go to the \"table\" layer/component of the file which the code will search through based on the VALUE parameter to pull the numeric data. The VALUE parmeter is the standardized parameter for GEO\n",
+ "files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "RXg8Pzn25Ffe",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "5a3a9658-36f4-4dff-ee10-d76af25bd725"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Extracting expression matrix...\n",
+ "Original shape (genes x samples): (22283, 310)\n",
+ "Transposed shape (samples x probes): (310, 22283)\n",
+ "ID_REF 1007_s_at 1053_at 117_at 121_at 1255_g_at 1294_at \\\n",
+ "name \n",
+ "GSM615096 12.359267 8.021741 8.294244 10.840949 7.874062 8.341292 \n",
+ "GSM615097 12.613243 7.842947 5.474758 11.715159 7.347955 9.419005 \n",
+ "GSM615098 11.551397 8.776267 8.197121 10.715077 6.523880 9.297479 \n",
+ "GSM615099 11.828700 9.523877 7.907263 10.750475 6.478643 8.698516 \n",
+ "GSM615100 11.983987 6.836237 8.625010 10.827725 7.336754 9.599059 \n",
+ "... ... ... ... ... ... ... \n",
+ "GSM615401 12.135865 8.633192 9.783710 9.830411 7.357560 8.217632 \n",
+ "GSM615402 11.982492 9.451202 8.210670 9.354246 7.178217 9.082518 \n",
+ "GSM615403 11.721887 8.955527 8.980073 10.727569 8.242348 9.691482 \n",
+ "GSM615404 11.066133 9.489278 7.945081 9.552854 7.353828 10.022531 \n",
+ "GSM615405 10.703124 8.813052 9.025983 9.693816 5.531112 9.214619 \n",
+ "\n",
+ "ID_REF 1316_at 1320_at 1405_i_at 1431_at ... AFFX-r2-Ec-bioD-3_at \\\n",
+ "name ... \n",
+ "GSM615096 8.256335 6.485966 6.495728 7.063123 ... 15.640044 \n",
+ "GSM615097 7.983681 7.330512 7.332244 7.033859 ... 16.719929 \n",
+ "GSM615098 7.820261 6.423794 10.066291 6.661108 ... 14.850736 \n",
+ "GSM615099 7.526617 7.276040 10.399704 6.642930 ... 14.414238 \n",
+ "GSM615100 8.312127 6.832232 7.090151 7.081613 ... 15.066009 \n",
+ "... ... ... ... ... ... ... \n",
+ "GSM615401 8.313859 5.304950 8.262117 7.488756 ... 14.103782 \n",
+ "GSM615402 7.144019 6.389862 8.596580 6.407605 ... 14.308051 \n",
+ "GSM615403 7.817483 5.722656 11.104730 8.290744 ... 15.862593 \n",
+ "GSM615404 7.460670 4.903692 9.808574 7.383959 ... 14.668847 \n",
+ "GSM615405 7.460981 4.446914 9.367801 6.786354 ... 14.701467 \n",
+ "\n",
+ "ID_REF AFFX-r2-Ec-bioD-5_at AFFX-r2-Hs18SrRNA-3_s_at \\\n",
+ "name \n",
+ "GSM615096 15.441187 11.190421 \n",
+ "GSM615097 16.383235 10.750292 \n",
+ "GSM615098 14.637426 11.580917 \n",
+ "GSM615099 14.218011 10.275100 \n",
+ "GSM615100 14.816849 10.840278 \n",
+ "... ... ... \n",
+ "GSM615401 13.826508 11.742811 \n",
+ "GSM615402 13.858847 10.993654 \n",
+ "GSM615403 15.411223 9.693377 \n",
+ "GSM615404 14.260912 15.270607 \n",
+ "GSM615405 14.235730 11.370290 \n",
+ "\n",
+ "ID_REF AFFX-r2-Hs18SrRNA-5_at AFFX-r2-Hs18SrRNA-M_x_at \\\n",
+ "name \n",
+ "GSM615096 11.955084 12.139089 \n",
+ "GSM615097 11.610319 12.080350 \n",
+ "GSM615098 13.075420 12.347660 \n",
+ "GSM615099 11.467574 10.788742 \n",
+ "GSM615100 12.989398 11.851791 \n",
+ "... ... ... \n",
+ "GSM615401 14.297823 10.871473 \n",
+ "GSM615402 12.314814 9.767024 \n",
+ "GSM615403 12.189645 8.891483 \n",
+ "GSM615404 15.506028 14.867092 \n",
+ "GSM615405 12.392458 10.071009 \n",
+ "\n",
+ "ID_REF AFFX-r2-Hs28SrRNA-3_at AFFX-r2-Hs28SrRNA-5_at \\\n",
+ "name \n",
+ "GSM615096 14.074549 9.047564 \n",
+ "GSM615097 13.681936 8.765575 \n",
+ "GSM615098 13.676062 9.450242 \n",
+ "GSM615099 13.395810 8.466331 \n",
+ "GSM615100 13.943810 8.721290 \n",
+ "... ... ... \n",
+ "GSM615401 11.313766 9.321655 \n",
+ "GSM615402 10.714735 8.832938 \n",
+ "GSM615403 10.494081 6.370288 \n",
+ "GSM615404 12.315510 9.259754 \n",
+ "GSM615405 11.244264 9.335462 \n",
+ "\n",
+ "ID_REF AFFX-r2-Hs28SrRNA-M_at AFFX-r2-P1-cre-3_at AFFX-r2-P1-cre-5_at \n",
+ "name \n",
+ "GSM615096 11.274337 17.356685 17.004035 \n",
+ "GSM615097 11.287301 18.404677 18.143576 \n",
+ "GSM615098 11.308490 16.304500 15.988321 \n",
+ "GSM615099 10.208604 16.190139 15.807992 \n",
+ "GSM615100 11.110014 16.767231 16.485521 \n",
+ "... ... ... ... \n",
+ "GSM615401 9.334666 15.501419 15.074929 \n",
+ "GSM615402 9.378723 15.488476 15.190513 \n",
+ "GSM615403 9.124964 16.847545 16.685688 \n",
+ "GSM615404 10.416107 15.839781 15.501607 \n",
+ "GSM615405 8.978068 15.661208 15.337064 \n",
+ "\n",
+ "[310 rows x 22283 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"\\nExtracting expression matrix...\")\n",
+ "expression_df = pmid_soft.pivot_samples(\"VALUE\")\n",
+ "\n",
+ "print(\"Original shape (genes x samples):\", expression_df.shape)\n",
+ "\n",
+ "# GEOparse usually gives rows = probes, columns = samples\n",
+ "# We want rows = samples, columns = probes\n",
+ "expression_df = expression_df.T\n",
+ "\n",
+ "print(\"Transposed shape (samples x probes):\", expression_df.shape)\n",
+ "print(expression_df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "N9H9ij73_Hw5"
+ },
+ "source": [
+ "Mapping the data back and renaimig things to be a bit more clearer and biologically meaningful to the average person (me)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "eRJhrC5b_Ira",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "591036cf-9029-4efa-83fa-48da8076004b"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Annotation columns:\n",
+ "['ID', 'GB_ACC', 'SPOT_ID', 'Species Scientific Name', 'Annotation Date', 'Sequence Type', 'Sequence Source', 'Target Description', 'Representative Public ID', 'Gene Title', 'Gene Symbol', 'ENTREZ_GENE_ID', 'RefSeq Transcript ID', 'Gene Ontology Biological Process', 'Gene Ontology Cellular Component', 'Gene Ontology Molecular Function']\n"
+ ]
+ }
+ ],
+ "source": [
+ "# MAP PROBE IDs TO GENE SYMBOLS\n",
+ "\n",
+ "gpl = pmid_soft.gpls[\"GPL96\"]\n",
+ "annotation = gpl.table\n",
+ "\n",
+ "print(\"Annotation columns:\")\n",
+ "print(annotation.columns.tolist())\n",
+ "\n",
+ "# Some rows may have missing gene symbols\n",
+ "annotation = annotation[[\"ID\", \"Gene Symbol\"]].copy()\n",
+ "annotation[\"Gene Symbol\"] = annotation[\"Gene Symbol\"].fillna(\"\").astype(str).str.strip()\n",
+ "\n",
+ "id_to_gene = dict(zip(annotation[\"ID\"], annotation[\"Gene Symbol\"]))\n",
+ "\n",
+ "# Replace probe IDs with gene symbols when possible\n",
+ "new_columns = []\n",
+ "for col in expression_df.columns:\n",
+ " gene = id_to_gene.get(col, \"\")\n",
+ " if gene == \"\" or gene == \"---\":\n",
+ " new_columns.append(col) # keep probe ID if no gene symbol\n",
+ " else:\n",
+ " new_columns.append(gene)\n",
+ "\n",
+ "expression_df.columns = new_columns"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "3oEvs7sHOFCd"
+ },
+ "source": [
+ "Now that the drfs event is visible we have to clean and integrate it to the matrix\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true,
+ "id": "nJJ2hWI2OFfW",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "a5f7f38a-5454-4209-ebee-a47dd464b0f1"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Original shape (genes x samples): (22283, 310)\n",
+ "Transposed shape (samples x probes): (310, 22283)\n",
+ "\n",
+ "Expression sample IDs:\n",
+ "Index(['GSM615096', 'GSM615097', 'GSM615098', 'GSM615099', 'GSM615100',\n",
+ " 'GSM615101', 'GSM615102', 'GSM615103', 'GSM615104', 'GSM615105'],\n",
+ " dtype='object', name='name')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# REBUILD EXPRESSION MATRIX\n",
+ "expression_df = pmid_soft.pivot_samples(\"VALUE\")\n",
+ "\n",
+ "print(\"Original shape (genes x samples):\", expression_df.shape)\n",
+ "\n",
+ "expression_df = expression_df.T\n",
+ "\n",
+ "print(\"Transposed shape (samples x probes):\", expression_df.shape)\n",
+ "print(\"\\nExpression sample IDs:\")\n",
+ "print(expression_df.index[:10])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "GrEYHa_DRi9U"
+ },
+ "outputs": [],
+ "source": [
+ "# CLEAN EXPRESSION INDEX\n",
+ "expression_df.index = expression_df.index.astype(str).str.strip()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "FiQMzDdSRq7T",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "44227b2d-a8f0-417e-c2d7-389f293eace9"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Columns containing 'drfs':\n",
+ "['drfs_1_event_0_censored', 'drfs_even_time_years']\n"
+ ]
+ }
+ ],
+ "source": [
+ "# FIND DRFS COLUMNS\n",
+ "drfs_cols = [col for col in metadata_df.columns if \"drfs\" in col.lower()]\n",
+ "print(\"\\nColumns containing 'drfs':\")\n",
+ "print(drfs_cols)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true,
+ "id": "0gx4hw89Rx4G",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "920e9ea2-2a1c-4f42-8b0e-ab2918bfebb7"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "DRFS value counts:\n",
+ "drfs_1_event_0_censored\n",
+ "0 244\n",
+ "1 66\n",
+ "Name: count, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "# CLEAN DRFS LABEL\n",
+ "metadata_df[\"drfs_1_event_0_censored\"] = pd.to_numeric(\n",
+ " metadata_df[\"drfs_1_event_0_censored\"],\n",
+ " errors=\"coerce\"\n",
+ ")\n",
+ "\n",
+ "print(\"\\nDRFS value counts:\")\n",
+ "print(metadata_df[\"drfs_1_event_0_censored\"].value_counts(dropna=False))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "rJkhQxdAR4eL",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "941e26ef-369c-4349-abe2-015861cf2364"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Column 'geo_accession' has 310 matching sample IDs.\n",
+ "Example matches: ['GSM615264', 'GSM615392', 'GSM615391', 'GSM615194', 'GSM615389', 'GSM615198', 'GSM615327', 'GSM615377', 'GSM615163', 'GSM615385']\n",
+ "\n",
+ "Chosen matching column: geo_accession\n"
+ ]
+ }
+ ],
+ "source": [
+ "# SEARCH FOR THE CORRECT MATCHING ID COLUMN\n",
+ "matching_col = None\n",
+ "\n",
+ "for col in metadata_df.columns:\n",
+ " values = metadata_df[col].astype(str).str.strip()\n",
+ " overlap = len(set(values) & set(expression_df.index))\n",
+ "\n",
+ " if overlap > 0:\n",
+ " print(f\"\\nColumn '{col}' has {overlap} matching sample IDs.\")\n",
+ "\n",
+ " # print a few example matches\n",
+ " matches = list(set(values) & set(expression_df.index))[:10]\n",
+ " print(\"Example matches:\", matches)\n",
+ "\n",
+ " if matching_col is None:\n",
+ " matching_col = col\n",
+ "\n",
+ "print(\"\\nChosen matching column:\", matching_col)\n",
+ "\n",
+ "\n",
+ "# STOP IF NO MATCH FOUND\n",
+ "if matching_col is None:\n",
+ " raise ValueError(\"No metadata column matches expression_df sample IDs. Need to inspect metadata_df manually.\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "tqXgve51SGUp",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "16a7b314-e466-4d37-ee0f-7ea096b1d188"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Labels shape: (310, 1)\n",
+ " drfs_1_event_0_censored\n",
+ "match_id \n",
+ "GSM615096 1\n",
+ "GSM615097 0\n",
+ "GSM615098 0\n",
+ "GSM615099 0\n",
+ "GSM615100 1\n",
+ "\n",
+ "Label sample IDs:\n",
+ "Index(['GSM615096', 'GSM615097', 'GSM615098', 'GSM615099', 'GSM615100',\n",
+ " 'GSM615101', 'GSM615102', 'GSM615103', 'GSM615104', 'GSM615105'],\n",
+ " dtype='object', name='match_id')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BUILD LABEL TABLE USING THE MATCHING COLUMN\n",
+ "labels = metadata_df[[matching_col, \"drfs_1_event_0_censored\"]].dropna()\n",
+ "labels = labels.rename(columns={matching_col: \"match_id\"})\n",
+ "labels[\"match_id\"] = labels[\"match_id\"].astype(str).str.strip()\n",
+ "labels = labels.set_index(\"match_id\")\n",
+ "\n",
+ "print(\"\\nLabels shape:\", labels.shape)\n",
+ "print(labels.head())\n",
+ "\n",
+ "print(\"\\nLabel sample IDs:\")\n",
+ "print(labels.index[:10])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "Y8Ukz3l4SJmz",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "75f789e8-e32c-4514-b707-e6495aad69ad"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Labels shape: (310, 1)\n",
+ " drfs_1_event_0_censored\n",
+ "match_id \n",
+ "GSM615096 1\n",
+ "GSM615097 0\n",
+ "GSM615098 0\n",
+ "GSM615099 0\n",
+ "GSM615100 1\n",
+ "\n",
+ "Label sample IDs:\n",
+ "Index(['GSM615096', 'GSM615097', 'GSM615098', 'GSM615099', 'GSM615100',\n",
+ " 'GSM615101', 'GSM615102', 'GSM615103', 'GSM615104', 'GSM615105'],\n",
+ " dtype='object', name='match_id')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BUILD LABEL TABLE USING THE MATCHING COLUMN\n",
+ "labels = metadata_df[[matching_col, \"drfs_1_event_0_censored\"]].dropna()\n",
+ "labels = labels.rename(columns={matching_col: \"match_id\"})\n",
+ "labels[\"match_id\"] = labels[\"match_id\"].astype(str).str.strip()\n",
+ "labels = labels.set_index(\"match_id\")\n",
+ "\n",
+ "print(\"\\nLabels shape:\", labels.shape)\n",
+ "print(labels.head())\n",
+ "\n",
+ "print(\"\\nLabel sample IDs:\")\n",
+ "print(labels.index[:10])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "ABzC2V3HSWba",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "108ad650-60ee-427a-e35b-f0e984d96c41"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Number of matching samples: 310\n",
+ "First few matching sample IDs:\n",
+ "Index(['GSM615096', 'GSM615097', 'GSM615098', 'GSM615099', 'GSM615100',\n",
+ " 'GSM615101', 'GSM615102', 'GSM615103', 'GSM615104', 'GSM615105'],\n",
+ " dtype='object')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# FIND OVERLAPPING SAMPLES\n",
+ "common_samples = expression_df.index.intersection(labels.index)\n",
+ "\n",
+ "print(\"\\nNumber of matching samples:\", len(common_samples))\n",
+ "print(\"First few matching sample IDs:\")\n",
+ "print(common_samples[:10])\n",
+ "\n",
+ "\n",
+ "# KEEP ONLY MATCHED SAMPLES\n",
+ "expression_df_matched = expression_df.loc[common_samples]\n",
+ "labels_matched = labels.loc[common_samples]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "BPqA-qXdSaDR",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "2021cf48-d02c-43c3-a1ca-397f407df645"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n",
+ "Final dataset shape: (310, 22284)\n",
+ " 1007_s_at 1053_at 117_at 121_at 1255_g_at 1294_at \\\n",
+ "GSM615096 12.359267 8.021741 8.294244 10.840949 7.874062 8.341292 \n",
+ "GSM615097 12.613243 7.842947 5.474758 11.715159 7.347955 9.419005 \n",
+ "GSM615098 11.551397 8.776267 8.197121 10.715077 6.523880 9.297479 \n",
+ "GSM615099 11.828700 9.523877 7.907263 10.750475 6.478643 8.698516 \n",
+ "GSM615100 11.983987 6.836237 8.625010 10.827725 7.336754 9.599059 \n",
+ "\n",
+ " 1316_at 1320_at 1405_i_at 1431_at ... AFFX-r2-Ec-bioD-5_at \\\n",
+ "GSM615096 8.256335 6.485966 6.495728 7.063123 ... 15.441187 \n",
+ "GSM615097 7.983681 7.330512 7.332244 7.033859 ... 16.383235 \n",
+ "GSM615098 7.820261 6.423794 10.066291 6.661108 ... 14.637426 \n",
+ "GSM615099 7.526617 7.276040 10.399704 6.642930 ... 14.218011 \n",
+ "GSM615100 8.312127 6.832232 7.090151 7.081613 ... 14.816849 \n",
+ "\n",
+ " AFFX-r2-Hs18SrRNA-3_s_at AFFX-r2-Hs18SrRNA-5_at \\\n",
+ "GSM615096 11.190421 11.955084 \n",
+ "GSM615097 10.750292 11.610319 \n",
+ "GSM615098 11.580917 13.075420 \n",
+ "GSM615099 10.275100 11.467574 \n",
+ "GSM615100 10.840278 12.989398 \n",
+ "\n",
+ " AFFX-r2-Hs18SrRNA-M_x_at AFFX-r2-Hs28SrRNA-3_at \\\n",
+ "GSM615096 12.139089 14.074549 \n",
+ "GSM615097 12.080350 13.681936 \n",
+ "GSM615098 12.347660 13.676062 \n",
+ "GSM615099 10.788742 13.395810 \n",
+ "GSM615100 11.851791 13.943810 \n",
+ "\n",
+ " AFFX-r2-Hs28SrRNA-5_at AFFX-r2-Hs28SrRNA-M_at \\\n",
+ "GSM615096 9.047564 11.274337 \n",
+ "GSM615097 8.765575 11.287301 \n",
+ "GSM615098 9.450242 11.308490 \n",
+ "GSM615099 8.466331 10.208604 \n",
+ "GSM615100 8.721290 11.110014 \n",
+ "\n",
+ " AFFX-r2-P1-cre-3_at AFFX-r2-P1-cre-5_at drfs_1_event_0_censored \n",
+ "GSM615096 17.356685 17.004035 1 \n",
+ "GSM615097 18.404677 18.143576 0 \n",
+ "GSM615098 16.304500 15.988321 0 \n",
+ "GSM615099 16.190139 15.807992 0 \n",
+ "GSM615100 16.767231 16.485521 1 \n",
+ "\n",
+ "[5 rows x 22284 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# MERGE EXPRESSION + LABELS\n",
+ "final_df = expression_df_matched.merge(\n",
+ " labels_matched,\n",
+ " left_index=True,\n",
+ " right_index=True\n",
+ ")\n",
+ "\n",
+ "print(\"\\nFinal dataset shape:\", final_df.shape)\n",
+ "print(final_df.head())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1U1jZ8obTuGu"
+ },
+ "source": [
+ "Now the dataset if FINALLYYY properly created and can be used to train a model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "0eT4W1IXUlLi",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 211
+ },
+ "outputId": "606277ce-d41f-4e0c-aeda-bf9e77dbb2bf"
+ },
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "NameError",
+ "evalue": "name 'final_df' is not defined",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m/tmp/ipykernel_35429/4143188667.py\u001b[0m in \u001b[0;36m| \u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# SPLIT FEATURES + TARGET\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mX\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"drfs_1_event_0_censored\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"drfs_1_event_0_censored\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"X shape:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'final_df' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "# SPLIT FEATURES + TARGET\n",
+ "X = final_df.drop(columns=[\"drfs_1_event_0_censored\"])\n",
+ "y = final_df[\"drfs_1_event_0_censored\"]\n",
+ "\n",
+ "print(\"X shape:\", X.shape)\n",
+ "print(\"y shape:\", y.shape)\n",
+ "\n",
+ "print(\"\\nClass distribution:\")\n",
+ "print(y.value_counts())\n",
+ "\n",
+ "\n",
+ "# FEATURE REDUCTION\n",
+ "gene_variance = X.var(axis=0)\n",
+ "top_genes = gene_variance.sort_values(ascending=False).head(1000).index\n",
+ "X = X[top_genes]\n",
+ "\n",
+ "print(\"\\nReduced feature count:\", X.shape[1])\n",
+ "\n",
+ "\n",
+ "# NORMALIZATION\n",
+ "scaler = StandardScaler()\n",
+ "X_scaled = scaler.fit_transform(X)\n",
+ "\n",
+ "\n",
+ "# TRAIN / TEST SPLIT\n",
+ "X_train, X_test, y_train, y_test = train_test_split(\n",
+ " X_scaled, y,\n",
+ " test_size=0.2,\n",
+ " stratify=y,\n",
+ " random_state=42\n",
+ ")\n",
+ "\n",
+ "print(\"\\nTraining set shape:\", X_train.shape)\n",
+ "print(\"Test set shape:\", X_test.shape)\n",
+ "\n",
+ "\n",
+ "# MODEL\n",
+ "model = LogisticRegression(\n",
+ " C=100,\n",
+ " penalty=11,\n",
+ " solver='liblinear',\n",
+ " max_iter=500,\n",
+ " class_weight='balanced'\n",
+ ")\n",
+ "\n",
+ "model.fit(X_train, y_train)\n",
+ "\n",
+ "\n",
+ "# EVALUATION\n",
+ "y_pred = model.predict(X_test)\n",
+ "y_prob = model.predict_proba(X_test)[:, 1]\n",
+ "\n",
+ "metrics = {\n",
+ " \"accuracy\": accuracy_score(y_test, y_pred),\n",
+ " \"precision\": precision_score(y_test, y_pred),\n",
+ " \"recall\": recall_score(y_test, y_pred),\n",
+ " \"f1\": f1_score(y_test, y_pred),\n",
+ " \"auc\": roc_auc_score(y_test, y_prob)\n",
+ "}\n",
+ "\n",
+ "print(\"\\nModel Performance:\")\n",
+ "for k, v in metrics.items():\n",
+ " print(f\"{k}: {v:.4f}\")\n",
+ "\n",
+ "\n",
+ "# FEATURE IMPORTANCE\n",
+ "feature_importance = pd.Series(\n",
+ " model.coef_[0],\n",
+ " index=X.columns\n",
+ ").sort_values(key=abs, ascending=False)\n",
+ "\n",
+ "print(\"\\nTop Features:\")\n",
+ "print(feature_importance.head(10))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "d44K4a_6WA5e"
+ },
+ "source": [
+ "Now we visualize the results so that the model can be improved"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "sOt92J-GWHHS",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "outputId": "5b104002-0384-4521-aa86-3d1f7bb802d2"
+ },
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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KFGCMWPGULRoUfbt28dnn33mXv+KFSvo1asXbdq04ZVXXgFg27ZtrF+/nhEjRmTZB9ndD8B12jMmJobGjRvz+uuvs3LlSt544w2qVKnCgw8+6HH/Sx7g64QjYsw/RzBWrlxpTpw4YQ4cOGAWLFhgSpQoYQIDA82BAwfc806aNMkA5vPPP89yfadOnTKA6datmzHGmLfeeuuyy1zOHXfcYQBz+vTpbM3v6RGM8PBwc/z48XTzvvfeewYwv/32W7r2WrVqmdatW7unn3/+eVOkSBGzc+fOdPONGTPG+Pv7m/3792er5uy43BGM1NRUExUVZWrXrm2SkpLc7ReORj3zzDPutjp16phy5cqZc+fOudvWrFmT7mjDBVx0BCMiIsI89NBDl6w1q1MkmR3BaNGihQkLCzN//fVXunkzO52W2brGjx9vTpw4YY4ePWrWrl1rbrzxRgOY+fPnu+fN7s/p008/NUC6IwQOh8O0bt060yMYgBkzZky6da5du9YAZtasWenaly5dmq79888/z/To4b+NGDHChIeHX/JowsVHMDzZDy68h+eeey7dOm+44QbToEGDLLcpeZtG4kie0rZtW0qUKEF0dDTdu3enSJEiLFq0iHLlyrnnOXfuHABhYWFZrufCa/Hx8en+vdQyl+ONdVzKnXfeSYkSJdK1devWjYCAAObOnetu27p1K3/88Qc9e/Z0t82fP5/mzZtTrFgxTp486f5q27YtDoeD7777LldqzszPP//M8ePHGTp0aLqBubfddhs1atRg8eLFABw+fJjffvuNfv36pTuy0LJly2wNiixatCg//vgjhw8fvuKaT5w4wXfffce9995L+fLl071msViytY5x48ZRokQJSpUqRfPmzdm2bRtvvPEG3bt3d8+T3Z/T0qVLsVqtDB482L2sn58fDz30UJbbv/iv/Pnz5xMREUG7du3SbatBgwaEhoayevVqAPdRhK+++gq73Z7puosWLcr58+dZsWJFtvoCsr8f/NsDDzyQbrp58+bs2bMn29uUvEUBQ/KUyZMns2LFChYsWMCtt97KyZMnCQwMTDfPhQ/4C0EjMxeHkPDw8MsuczneWMelVKpUKUNbZGQkbdq0Yd68ee62uXPnEhAQQLdu3dxtf/75J0uXLqVEiRLpvtq2bQvA8ePHs9zu2bNnOXr0qPvr1KlTV/Q+/vrrLwCuvfbaDK/VqFHD/fqFf6tWrZphvszaLvbqq6+ydetWoqOjadSoEc8++2yOP4wuLFe7du0cLQ8wZMgQVqxYwZdffsnIkSNJSkrC4XCkmye7P6e//vqL0qVLu091XJBVvwQEBKQL4Re2dfbsWaKiojJsLyEhwb2tli1bcueddzJ+/HgiIyPp0qUL06dPJyUlxb2uoUOHUr16dTp27Ei5cuW49957Wbp06SX7I7v7wQVBQUEZAnaxYsU4ffr0JbcjeZfGYEie0qhRIxo2bAhA165dufnmm+nduzc7duxw/5Vbs2ZNwHXOvGvXrpmu59dffwWgVq1agOsXGsBvv/2W5TKX8+91NG/e/LLzWywWTCZXgV/8oXNBcHBwpu133303AwcOJC4ujnr16jFv3jzatGlDZGSkex6n00m7du147LHHMl1H9erVs6xzxIgRfPTRR+7pli1b5oubJfXo0YPmzZvz+eefs3z5cl577TVeeeUVPvvsMzp27HjV66lWrZo7KHTq1Al/f3/GjBlDq1at3Pv0lfycLiUwMDDDpaFOp5OoqChmzZqV6TIXPswtFgsLFizghx9+4Msvv2TZsmXce++9vPHGG/zwww+EhoYSFRVFXFwcy5Yt4+uvv+brr79m+vTp9OvXL92+cyWu9HJhyXt0BEPyLH9/fyZMmMDhw4d555133O0333wzRYsWZfbs2Vl+WM+cORNw/aK/sEyxYsWYM2dOlstcTufOnQH45JNPsjV/sWLFOHPmTIb2i/9yu5yuXbtis9mYO3cucXFx7Ny5k7vvvjvdPFWqVCEhIYG2bdtm+nXxYf9/e+yxx1ixYoX764033vCovotVqFABgB07dmR4bceOHe7XL/y7a9euDPNl1paZ0qVLM3ToUBYuXMjevXu55ppr0g3IzO7pjcqVKwOu00/e8uSTTxIWFsZTTz3lbsvuz6lChQocOXKExMTEdOvMbr9c2Nbff/9Ns2bNMt1W3bp1081/00038eKLL/Lzzz8za9Ysfv/9d2JjY92v22w2OnfuzLvvvsvu3bu5//77mTlzZpY1ZXc/kIJLAUPytFtuuYVGjRoxadIkkpOTAQgJCeHRRx9lx44dPPnkkxmWWbx4MTNmzCAmJoabbrrJvczjjz/Otm3bePzxxzM9svDJJ5+wcePGLGtp0qQJHTp04MMPP2ThwoUZXk9NTeXRRx91T1epUoXt27dz4sQJd9svv/zC+vXrs/3+wXX+OyYmhnnz5hEbG4vNZstwFKZHjx5s2LCBZcuWZVj+zJkzpKWlZbn+WrVqpfvgadCggUf1Xaxhw4ZERUUxZcqUdIfZv/76a7Zt28Ztt90GQJkyZahduzYzZ85Md9Oub7/9lt9+++2S23A4HJw9ezZdW1RUFGXKlEm3zSJFimSYLzMlSpSgRYsWTJs2jf3796d7LbN9JTuKFi3K/fffz7Jly4iLiwOy/3OKiYnBbrfzwQcfuF93Op1Mnjw529vv0aMHDoeD559/PsNraWlp7vB7+vTpDO+xXr16AO6+/Pvvv9O97ufnx/XXX59unotldz+QgkunSCTPGz16NHfddRczZsxwDwIbM2YMW7Zs4ZVXXmHDhg3ceeedBAcHs27dOj755BNq1qyZ4dDt6NGj+f3333njjTdYvXq1+06eR48eZeHChWzcuJHvv//+krXMnDmT9u3b061bNzp37kybNm0oUqQIf/75J7GxsRw5coTXX38dgHvvvZeJEycSExPDoEGDOH78OFOmTOG6665zDxjNrp49e3LPPffw7rvvEhMTk+7yvgvvbdGiRXTq1IkBAwbQoEEDzp8/z2+//caCBQvYt29fulMqV8put/PCCy9kaC9evDhDhw7llVdeYeDAgbRs2ZJevXq5L0+sWLEiI0eOdM//0ksv0aVLF5o1a8bAgQM5ffo077zzDrVr177knULPnTtHuXLl6N69O3Xr1iU0NJSVK1fy008/pTsC06BBA+bOncuoUaO48cYbCQ0NdR+Jutj//d//cfPNN1O/fn2GDBlCpUqV2LdvH4sXL3YHBE+NGDGCSZMm8fLLLxMbG5vtn1PXrl1p1KgRjzzyCLt27aJGjRosWrTIPT4mO0dmWrZsyf3338+ECROIi4ujffv2WK1W/vzzT+bPn89bb71F9+7d+eijj3j33Xe54447qFKlCufOneODDz4gPDycW2+9FYD77ruPU6dO0bp1a8qVK8dff/3F22+/Tb169dynLC9mtVqzvR9IAeXbi1hEXLK60ZYxrsvzqlSpYqpUqZLuMjmHw2GmT59umjVrZsLDw01QUJC57rrrzPjx4y95J8MFCxaY9u3bm+LFi5uAgABTunRp07NnT7NmzZps1ZqYmGhef/11c+ONN5rQ0FBjs9lMtWrVzPDhw82uXbvSzfvJJ5+YypUrG5vNZurVq2eWLVt2yRttZSU+Pt4EBwcbwHzyySeZznPu3DkzduxYU7VqVWOz2UxkZKRp2rSpef31101qamq23lt2XLikMLOvKlWquOebO3euueGGG0xgYKApXrx4ljfaio2NNTVq1DCBgYGmdu3aZtGiRebOO+80NWrUSDcf/7pMNSUlxYwePdrUrVvXhIWFmSJFipi6deuad999N90yCQkJpnfv3qZo0aLZutHW1q1bzR133GGKFi1qgoKCzLXXXmuefvrpS/bH5X5+AwYMMP7+/u59I7s/pxMnTpjevXu7b7Q1YMAAs379egOY2NjYdD+PS102/P7775sGDRqY4OBgExYWZurUqWMee+wxc/jwYWOMMZs3bza9evUy5cuXd9+Mq1OnTubnn392r+PC/5moqChjs9lM+fLlzf3332+OHDninierG21lZz/I6j2MGzfO6GMq/9KzSEQkz6lXrx4lSpTw6LLIwmDhwoXccccdrFu3jmbNmvm6HJFL0hgMEfEZu92eYXzImjVr+OWXX7jlllt8U1QekZSUlG7a4XDw9ttvEx4eTv369X1UlUj2aQyGiPjMoUOHaNu2Lffccw9lypRh+/btTJkyhVKlSmW46VJhM3z4cJKSkmjSpAkpKSl89tlnfP/997z00ktZXtIskpfoFImI+MzZs2cZMmQI69ev58SJExQpUoQ2bdrw8ssvU6VKFV+X51OzZ8/mjTfeYNeuXSQnJ1O1alUefPBBhg0b5uvSRLJFAUNERES8TmMwRERExOsUMERERMTrCt0gT6fTyeHDhwkLC8v2bYRFRETEdWfbc+fOUaZMmQzPv7lYoQsYhw8fJjo62tdliIiI5FsHDhzI8ATfixW6gHHh8d0HDhxwP377StntdpYvX+6+Fa9cOfWp96lPvUv96X3qU+/Kjf6Mj48nOjra/Vl6KYUuYFw4LRIeHu7VgBESEkJ4eLj+U3iJ+tT71Kfepf70PvWpd+Vmf2ZniIEGeYqIiIjXKWCIiIiI1ylgiIiIiNcVujEY2WGMIS0tDYfDka357XY7AQEBJCcnZ3sZubS83qdWqxV/f39flyEikmcpYFwkNTWVI0eOkJiYmO1ljDGUKlWKAwcO6N4aXpLX+9RisVCuXDlCQ0N9XYqISJ6kgPEvTqeTvXv34u/vT5kyZbDZbNn6cHM6nSQkJBAaGnrZG49I9uTlPjXGcOLECQ4ePEi1atV0JENEJBMKGP+SmpqK0+kkOjqakJCQbC/ndDpJTU0lKCgoz30Y5ld5vU9LlCjBvn37sNvtChgiIpnIe7+584C8+IEmeUtePG0jIpKX6JNUREREvE4BQ0RERLzOpwHju+++o3PnzpQpUwaLxcLChQsvu8yaNWuoX78+gYGBVK1alRkzZuR6nSIiIuIZnwaM8+fPU7duXSZPnpyt+ffu3cttt91Gq1atiIuL4z//+Q/33Xcfy5Yty+VK848NGzbg7+/PbbfdluG1NWvWYLFYOHPmTIbXKlasyKRJk9K1rV69mltvvZVrrrmGkJAQatWqxSOPPMKhQ4dyqXpITk7moYceokSJEpQrV47u3btz7Nixyy63bds2br/9diIiIihSpAg33ngj+/fvd79+yy23YLFY0n098MAD7tf//vtvOnToQJkyZQgMDCQ6Opphw4YRHx+fK+9TRKSg8+lVJB07dqRjx47Znn/KlClUqlSJN954A4CaNWuybt063nzzTWJiYnKrzHxl6tSpDB8+nKlTp3L48GHKlCmTo/W89957DB06lP79+/Ppp59SsWJF9u/fz8yZM3njjTeYOHGilyt3GTlyJIsXL2bu3LkEBAQwduxYunXrxvr167NcZvfu3dx8880MGjSI8ePHEx4ezu+//05QUFC6+QYPHsxzzz3nnv73lUJ+fn506dKFF154gRIlSrBr1y4eeughTp06xezZs73/RkWk0DLGkGTP/RsI2u1ppDhc2/OFfHWZ6oYNG2jbtm26tpiYGP7zn/9kuUxKSgopKSnu6Qt/kdrtdux2e7p57XY7xhicTidOpxPI3o5gjCEp1YF/it2rVxcEW/09Wl9CQgJz585l48aNHDlyhOnTpzN27Fj36xfe07/f379deO8HDx7k4YcfZvjw4emCRPny5bn55ps5c+ZMpstfqbNnzzJ16lQ++eQTWrVqxblz5/jwww+pXbs233//PTfddFOmyz3xxBN07NiRl19+2d1WqVIlgHR1BgcHExUVlW7ZC69HRERw//33u9ujo6N58MEHef311zN9r06nE2NMvrpM9cL+fvF+Lzmj/vS+wtCnxhju/vAnNu8/k6vbsZJGE7/f+c5Zl9atU4jw0meTJz+bfBUwjh49SsmSJdO1lSxZkvj4eJKSkggO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wRARERGvU8AQERERr1PAEBEREa9TwBARERGvU8AQERERr1PAEBEREa9TwBARERGvU8AQERERr1PAEClgZsyYQdGiRX1dRo5ZLBYWLlx4yXkGDBhA165dr0o9IpIzChgiedCAAQOwWCwZvnbt2uXr0pgxY4a7Hj8/P8qVK8fAgQM5fvy4V9Z/5MgROnbsCMC+ffuwWCzExcWlm+ett95ixowZXtleVp599ln3+/T39yc6OpohQ4Zw6tQpj9ajMCSFlR7XLpJHdejQgenTp6drK1GihI+qSS88PJwdO3bgdDr55ZdfGDhwIIcPH2bZsmVXvO6sHt/9bxEREVe8ney47rrrWLlyJQ6Hg23btnHvvfdy9uxZ5s6de1W2L5Kf6QiGSB4VGBhIqVKl0n35+/szceJE6tSpQ5EiRYiOjmbo0KEkJCRkuZ5ffvmFVq1aERYWRnh4OA0aNODnn392v75u3TqaN29OcHAw0dHRPPzww5w/f/6StVksFkqVKkWZMmXo2LEjDz/8MCtXriQpKQmn08lzzz1HuXLlCAwMpF69eixdutS9bGpqKsOGDaN06dIEBQVRoUIFJkyYkG7dF06RVKpUCYAbbrgBi8XCLbfcAqQ/KvD+++9TpkyZdI9JB+jSpQv33nuve/qLL76gfv36BAUFUblyZcaPH09aWtol32dAQAClSpWibNmytG3blrvuuosVK1a4X3c4HAwaNIhKlSoRHBzMtddey1tvveV+/dlnn+Wjjz7iiy++cB8NWbNmDQAHDhygR48eFC1alOLFi9OlSxf27dt3yXpE8hMFDJF8xs/Pj//7v//j999/56OPPuKbb77hsccey3L+Pn36UK5cOX766Sc2bdrEmDFjsFqtAOzevZsOHTpw55138uuvvzJ37lzWrVvHsGHDPKopODgYp9NJWloab731Fm+88Qavv/46v/76KzExMdx+++38+eefAPzf//0fixYtYt68eezYsYNZs2ZRsWLFTNe7ceNGAFauXMmRI0f47LPPMsxz11138ffff7N69Wp326lTp1i6dCl9+vQBYO3atfTr148RI0bwxx9/8N577zFjxgxefPHFbL/Hffv2sWzZMmw2m7vN6XRSrlw55s+fzx9//MEzzzzDE088wbx58wB49NFH6dGjBx06dODIkSMcOXKEpk2bYrfbiYmJISwsjLVr17J+/XpCQ0Pp0KEDqamp2a5JJE/Ltee0ikiO9e/f3/j7+5siRYq4v7p3757pvPPnzzfXXHONe3r69OkmIiLCPR0WFmZmzJiR6bKDBg0yQ4YMSde2du1a4+fnZ5KSkjJd5uL179y501SvXt00bNjQGGNMmTJlzIsvvphumRtvvNEMHTrUGGPM8OHDTevWrY3T6cx0/YD5/PPPjTHG7N271wBmy5Yt6ea5+PHyXbp0Mffee697+r333jNlypQxDofDGGNMmzZtzEsvvZRuHR9//LEpXbp0pjUYY8y4ceOMn5+fKVKkiAkKCnI/CnvixIlZLmOMMQ899JC58847s6z1wravvfbadH2QkpJigoODzbJlyy65fpH8QmMwRPKoVq1a8d///tc9XaRIEcD11/yECRPYvn078fHxpKWlkZycTGJiIiEhIRnWM2rUKO677z4+/vhj92H+KlWqAK7TJ7/++iuzZs1yz2+Mwel0snfvXmrWrJlpbWfPniU0NBSn00lycjI333wzH374IfHx8Rw+fJhmzZqlm79Zs2b88ssvgOv0Rrt27bj22mvp0KEDnTp1on379lfUV3369GHw4MG8++67BAYGMmvWLO6++278/Pzc73P9+vXpjlg4HI5L9hvAtddey6JFi0hOTuaTTz4hLi6O4cOHp5tn8uTJTJs2jf3795OUlERqair16tW7ZL2//PILu3btIiwsLF17cnIyu3fvzkEPiOQ9ChgieVSRIkWoWrVqurZ9+/bRqVMnHnzwQV588UWKFy/OunXrGDRoEKmpqZl+UD777LP07t2bxYsX8/XXXzNu3DhiY2O54447SEhI4P777+fhhx/OsFz58uWzrC0sLIzNmzfj5+dH6dKlCQ4OBiA+Pv6y76t+/frs3buXr7/+mpUrV9KjRw/atm3LggULLrtsVjp37owxhsWLF3PjjTeydu1a3nzzTffrCQkJjB8/nm7dumVYNigoKMv12mw298/g5Zdf5rbbbmP8+PE8//zzAMTGxvLoo4/yxhtv0KRJE8LCwnjttdf48ccfL1lvQkICDRo0SBfsLsgrA3lFrpQChkg+smnTJpxOJ2+88Yb7r/ML5/svpXr16lSvXp2RI0fSq1cvpk+fzh133EH9+vX5448/MgSZy/Hz88t0mfDwcMqUKcP69etp2bKlu339+vU0atQo3Xw9e/akZ8+edO/enQ4dOnDq1CmKFy+ebn0Xxjs4HI5L1hMUFES3bt2YNWsWu3bt4tprr6V+/fru1+vXr8+OHTs8fp8Xe+qpp2jdujUPPvig+302bdqUoUOHuue5+AiEzWbLUH/9+vWZO3cuUVFRhIeHX1FNInmVBnmK5CNVq1bFbrfz9ttvs2fPHj7++GOmTJmS5fxJSUkMGzaMNWvW8Ndff7F+/Xp++ukn96mPxx9/nO+//55hw4YRFxfHn3/+yRdffOHxIM9/Gz16NK+88gpz585lx44djBkzhri4OEaMGAHAxIkTmTNnDtu3b2fnzp3Mnz+fUqVKZXpzsKioKIKDg1m6dCnHjh3j7NmzWW63T58+LF68mGnTprkHd17wzDPPMHPmTMaPH8/vv//Otm3biI2N5amnnvLovTVp0oTrr7+el156CYBq1arx888/s2zZMnbu3MnTTz/NTz/9lG6ZihUr8uuvv7Jjxw5OnjyJ3W6nT58+REZG0qVLF9auXcvevXtZs2YNDz/8MAcPHvSoJpE8y9eDQEQko8wGBl4wceJEU7p0aRMcHGxiYmLMzJkzDWBOnz5tjEk/CDMlJcXcfffdJjo62thsNlOmTBkzbNiwdAM4N27caNq1a2dCQ0NNkSJFzPXXX59hkOa/XTzI82IOh8M8++yzpmzZssZqtZq6deuar7/+2v36+++/b+rVq2eKFCliwsPDTZs2bczmzZvdr/OvQZ7GGPPBBx+Y6Oho4+fnZ1q2bJll/zgcDlO6dGkDmN27d2eoa+nSpaZp06YmODjYhIeHm0aNGpn3338/y/cxbtw4U7du3Qztc+bMMYGBgWb//v0mOTnZDBgwwERERJiiRYuaBx980IwZMybdcsePH3f3L2BWr15tjDHmyJEjpl+/fiYyMtIEBgaaypUrm8GDB5uzZ89mWZNIfmIxxhjfRhwREREpaHSKRERERLxOAUNERES8TgFDREREvE4BQ0RERLxOAUNERES8TgFDREREvE4BQ0RERLxOAUNERES8TgFDREREvE4BQ0RERLxOAUNERES87v8B3WbP/llb/4AAAAAASUVORK5CYII=\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfIAAAHHCAYAAABEJtrOAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARNFJREFUeJzt3XlcVFX/B/DPgDKswyKyySJKboma64MkgqKEZZqamVaIS/mkppKmVCbiQlmpWaSWJmqapaWpleaGZGKPoriUkqAmKeD2AIKyOHN+f/BjnkZAZ5iBmeF+3r3uK+fMXb4zjvOd7znn3isTQggQERGRWbIwdgBERERUe0zkREREZoyJnIiIyIwxkRMREZkxJnIiIiIzxkRORERkxpjIiYiIzBgTORERkRljIiciIjJjTORm6Pz58+jfvz8cHR0hk8mwbds2g+7/0qVLkMlkSEpKMuh+zVloaChCQ0ONHUa9SU5OhkwmQ3JyskH2l5SUBJlMhkuXLhlkfwTExcVBJpMZOwwyAUzktZSVlYVXXnkFLVq0gLW1NRQKBYKDg/HRRx/h7t27dXrsqKgonD59GgsWLMD69evRtWvXOj1efRo9ejRkMhkUCkW17+P58+chk8kgk8nwwQcf6Lz/q1evIi4uDunp6QaItn40b94cTz31lLHD0MrChQsN/sPyfpU/CiqXRo0aoVmzZhg9ejSuXLlSp8cmMkWNjB2AOfrhhx/w7LPPQi6X46WXXkL79u1RVlaGQ4cOYcaMGfj999/x2Wef1cmx7969i9TUVLz11luYNGlSnRzDz88Pd+/eRePGjetk/w/TqFEj3LlzBzt27MDw4cM1ntuwYQOsra1RUlJSq31fvXoVc+fORfPmzdGpUyett/v5559rdTxzFRISgrt378LKykqn7RYuXIhhw4Zh8ODBGu0vvvgiRowYAblcbrAY4+Pj4e/vj5KSEhw5cgRJSUk4dOgQzpw5A2tra4Mdx1S9/fbbmDVrlrHDIBPARK6jixcvYsSIEfDz88P+/fvh6empfm7ixInIzMzEDz/8UGfHv379OgDAycmpzo4hk8mM+kUol8sRHByMr776qkoi37hxI5588kl8++239RLLnTt3YGtrq3NCM3cWFhYG/QxYWlrC0tLSYPsDgMjISHVv1Lhx4+Dq6or33nsP27dvr/K5qUtCCJSUlMDGxqbejglU/OBt1Ihf4cSudZ0tWrQIRUVFWL16tUYSrxQQEIApU6aoH9+7dw/z5s1Dy5YtIZfL0bx5c7z55psoLS3V2K6y+/TQoUPo3r07rK2t0aJFC6xbt069TlxcHPz8/AAAM2bMgEwmQ/PmzQFUdElX/vmfqhtH27NnDx5//HE4OTnB3t4erVu3xptvvql+vqYx8v3796NXr16ws7ODk5MTBg0ahLNnz1Z7vMzMTIwePRpOTk5wdHREdHQ07ty5U/Mbe5+RI0fip59+Qn5+vrrt6NGjOH/+PEaOHFll/Vu3bmH69OkIDAyEvb09FAoFIiMjcfLkSfU6ycnJ6NatGwAgOjpa3TVb+TpDQ0PRvn17pKWlISQkBLa2tur35f4x8qioKFhbW1d5/REREXB2dsbVq1e1fq2GoO3nTKVSIS4uDl5eXrC1tUVYWBj++OMPNG/eHKNHj1avV90Y+fnz5zF06FB4eHjA2toa3t7eGDFiBAoKCgBU/AAsLi7G2rVr1e9t5T5rGiP/6aef0Lt3bzg4OEChUKBbt27YuHFjrd6DXr16AagY9vqnc+fOYdiwYXBxcYG1tTW6du2K7du3V9n+1KlT6N27N2xsbODt7Y358+djzZo1VeKu/Le6e/dudO3aFTY2Nli5ciUAID8/H1OnToWPjw/kcjkCAgLw3nvvQaVSaRxr06ZN6NKli/p1BwYG4qOPPlI/X15ejrlz5+KRRx6BtbU1mjRpgscffxx79uxRr1Pdv21Dft+Q+eDPOR3t2LEDLVq0QM+ePbVaf9y4cVi7di2GDRuG119/Hb/99hsSEhJw9uxZbN26VWPdzMxMDBs2DGPHjkVUVBS++OILjB49Gl26dMGjjz6KIUOGwMnJCdOmTcPzzz+PAQMGwN7eXqf4f//9dzz11FPo0KED4uPjIZfLkZmZiV9//fWB2+3duxeRkZFo0aIF4uLicPfuXXz88ccIDg7G8ePHq/yIGD58OPz9/ZGQkIDjx49j1apVcHNzw3vvvadVnEOGDMGECRPw3XffYcyYMQAqqvE2bdqgc+fOVda/cOECtm3bhmeffRb+/v7Iy8vDypUr0bt3b/zxxx/w8vJC27ZtER8fj3feeQcvv/yy+ov/n3+XN2/eRGRkJEaMGIEXXngB7u7u1cb30UcfYf/+/YiKikJqaiosLS2xcuVK/Pzzz1i/fj28vLy0ep2Gou3nLDY2FosWLcLAgQMRERGBkydPIiIi4qFDFWVlZYiIiEBpaSkmT54MDw8PXLlyBTt37kR+fj4cHR2xfv16jBs3Dt27d8fLL78MAGjZsmWN+0xKSsKYMWPw6KOPIjY2Fk5OTjhx4gR27dpV7Y+1h6lMts7Ozuq233//HcHBwWjWrBlmzZoFOzs7fPPNNxg8eDC+/fZbPPPMMwCAK1euICwsDDKZDLGxsbCzs8OqVatqHArIyMjA888/j1deeQXjx49H69atcefOHfTu3RtXrlzBK6+8Al9fXxw+fBixsbHIycnB0qVLAVT8kH7++efRt29f9b+Hs2fP4tdff1UXAXFxcUhISFC/n4WFhTh27BiOHz+Ofv361fgeGPL7hsyIIK0VFBQIAGLQoEFarZ+eni4AiHHjxmm0T58+XQAQ+/fvV7f5+fkJACIlJUXddu3aNSGXy8Xrr7+ubrt48aIAIN5//32NfUZFRQk/P78qMcyZM0f88695yZIlAoC4fv16jXFXHmPNmjXqtk6dOgk3Nzdx8+ZNddvJkyeFhYWFeOmll6ocb8yYMRr7fOaZZ0STJk1qPOY/X4ednZ0QQohhw4aJvn37CiGEUCqVwsPDQ8ydO7fa96CkpEQolcoqr0Mul4v4+Hh129GjR6u8tkq9e/cWAMSKFSuqfa53794abbt37xYAxPz588WFCxeEvb29GDx48ENfo678/PzEk08+WePz2n7OcnNzRaNGjarEGBcXJwCIqKgodduBAwcEAHHgwAEhhBAnTpwQAMTmzZsfGKudnZ3GfiqtWbNGABAXL14UQgiRn58vHBwcRI8ePcTdu3c11lWpVA88RuW+9u7dK65fvy6ys7PFli1bRNOmTYVcLhfZ2dnqdfv27SsCAwNFSUmJxv579uwpHnnkEXXb5MmThUwmEydOnFC33bx5U7i4uGjELcT//q3u2rVLI6558+YJOzs78eeff2q0z5o1S1haWorLly8LIYSYMmWKUCgU4t69ezW+xo4dOz7w71yIqv+26+L7hswDu9Z1UFhYCABwcHDQav0ff/wRABATE6PR/vrrrwNAlbH0du3aqatEAGjatClat26NCxcu1Drm+1WOrX///fdVuvtqkpOTg/T0dIwePRouLi7q9g4dOqBfv37q1/lPEyZM0Hjcq1cv3Lx5U/0eamPkyJFITk5Gbm4u9u/fj9zc3BorNblcDguLio+zUqnEzZs31cMGx48f1/qYcrkc0dHRWq3bv39/vPLKK4iPj8eQIUNgbW2t7mKtT9p+zvbt24d79+7h1Vdf1Vhv8uTJDz2Go6MjAGD37t06DZHUZM+ePbh9+zZmzZpVZSxe21OqwsPD0bRpU/j4+GDYsGGws7PD9u3b4e3tDaBiuGX//v0YPnw4bt++jRs3buDGjRu4efMmIiIicP78efUs9127diEoKEhjAqSLiwtGjRpV7bH9/f0RERGh0bZ582b06tULzs7O6mPduHED4eHhUCqVSElJAVDxb7C4uFijm/x+Tk5O+P3333H+/Hmt3gvANL9vqH4wketAoVAAAG7fvq3V+n/99RcsLCwQEBCg0e7h4QEnJyf89ddfGu2+vr5V9uHs7Iz//ve/tYy4queeew7BwcEYN24c3N3dMWLECHzzzTcPTOqVcbZu3brKc23btsWNGzdQXFys0X7/a6ns7tTltQwYMAAODg74+uuvsWHDBnTr1q3Ke1lJpVJhyZIleOSRRyCXy+Hq6oqmTZvi1KlT6jFcbTRr1kyniW0ffPABXFxckJ6ejmXLlsHNze2h21y/fh25ubnqpaioSOvjVUfbz1nl/+9fz8XFRaM7ujr+/v6IiYnBqlWr4OrqioiICCQmJur03v5T5Th2+/bta7U9ACQmJmLPnj3YsmULBgwYgBs3bmh0hWdmZkIIgdmzZ6Np06Yay5w5cwAA165dA1Dx3lT32arp8+bv71+l7fz589i1a1eVY4WHh2sc69VXX0WrVq0QGRkJb29vjBkzBrt27dLYV3x8PPLz89GqVSsEBgZixowZOHXq1APfD1P8vqH6wUSuA4VCAS8vL5w5c0an7bStMGqa1SuEqPUxlEqlxmMbGxukpKRg7969ePHFF3Hq1Ck899xz6NevX5V19aHPa6kkl8sxZMgQrF27Flu3bn3guOnChQsRExODkJAQfPnll9i9ezf27NmDRx99VOueBwA6zzw+ceKE+gv69OnTWm3TrVs3eHp6qpfanA9fnbq+OMiHH36IU6dO4c0338Tdu3fx2muv4dFHH8Xff/9dp8etSffu3REeHo6hQ4di+/btaN++PUaOHKn+YVT59z59+nTs2bOn2qWmRP0w1X1OVCoV+vXrV+Oxhg4dCgBwc3NDeno6tm/fjqeffhoHDhxAZGQkoqKi1PsKCQlBVlYWvvjiC7Rv3x6rVq1C586dsWrVqofGVh/fN2RaONlNR0899RQ+++wzpKamIigo6IHr+vn5QaVS4fz582jbtq26PS8vD/n5+eoZ6Ibg7OysMcO70v2/woGKU4v69u2Lvn37YvHixVi4cCHeeustHDhwQF093P86gIoJPvc7d+4cXF1dYWdnp/+LqMbIkSPxxRdfwMLCAiNGjKhxvS1btiAsLAyrV6/WaM/Pz4erq6v6sSGTXXFxMaKjo9GuXTv07NkTixYtwjPPPKOeGV+TDRs2aFzspkWLFnrFoe3nrPL/mZmZGhXlzZs3ta7CAgMDERgYiLfffhuHDx9GcHAwVqxYgfnz5wPQ/v2tnAR35syZWifTf7K0tERCQgLCwsLwySefYNasWer3tXHjxtV+rv/Jz88PmZmZVdqra6tJy5YtUVRU9NBjAYCVlRUGDhyIgQMHQqVS4dVXX8XKlSsxe/Zs9fvh4uKC6OhoREdHo6ioCCEhIYiLi8O4ceNqfA319X1DpoUVuY7eeOMN2NnZYdy4ccjLy6vyfFZWlvo0kgEDBgCAerZqpcWLFwMAnnzySYPF1bJlSxQUFGh0v+Xk5FSZqXrr1q0q21aOC95/ikolT09PdOrUCWvXrtX4sXDmzBn8/PPP6tdZF8LCwjBv3jx88skn8PDwqHE9S0vLKpXE5s2bq1zpq/IHR3U/enQ1c+ZMXL58GWvXrsXixYvRvHlzREVF1fg+VgoODkZ4eLh60TeRa/s569u3Lxo1aoTly5drrPfJJ5889BiFhYW4d++eRltgYCAsLCw0Xq+dnZ1W723//v3h4OCAhISEKjPma1sRhoaGonv37li6dClKSkrg5uaG0NBQrFy5Ejk5OVXWr7wmA1Bx2mBqaqrGFf9u3bqFDRs2aH384cOHIzU1Fbt3767yXH5+vvr9u3nzpsZzFhYW6NChA4D//Ru8fx17e3sEBAQ88LNVn983ZFpYkeuoZcuW2LhxI5577jm0bdtW48puhw8fxubNm9Xnznbs2BFRUVH47LPPkJ+fj969e+M///kP1q5di8GDByMsLMxgcY0YMQIzZ87EM888g9deew137tzB8uXL0apVK43JXvHx8UhJScGTTz4JPz8/XLt2DZ9++im8vb3x+OOP17j/999/H5GRkQgKCsLYsWPVp585OjoiLi7OYK/jfhYWFnj77bcfut5TTz2F+Ph4REdHo2fPnjh9+jQ2bNhQJUm2bNkSTk5OWLFiBRwcHGBnZ4cePXpUO+b5IPv378enn36KOXPmqE+HW7NmDUJDQzF79mwsWrRIp/09TGZmprrq/afHHnsMTz75pFafM3d3d0yZMgUffvghnn76aTzxxBM4efIkfvrpJ7i6uj6wmt6/fz8mTZqEZ599Fq1atcK9e/ewfv16WFpaqruMAaBLly7Yu3cvFi9eDC8vL/j7+6NHjx5V9qdQKLBkyRKMGzcO3bp1w8iRI+Hs7IyTJ0/izp07WLt2ba3epxkzZuDZZ59FUlISJkyYgMTERDz++OMIDAzE+PHj0aJFC+Tl5SE1NRV///23+joDb7zxBr788kv069cPkydPVp9+5uvri1u3bmnV0zBjxgxs374dTz31lPo0ruLiYpw+fRpbtmzBpUuX4OrqinHjxuHWrVvo06cPvL298ddff+Hjjz9Gp06d1JV0u3btEBoaii5dusDFxQXHjh3Dli1bHng1x/r8viETY8wp8+bszz//FOPHjxfNmzcXVlZWwsHBQQQHB4uPP/5Y41SX8vJyMXfuXOHv7y8aN24sfHx8RGxsrMY6QtR8itH9pz3VdPqZEEL8/PPPon379sLKykq0bt1afPnll1VOUdm3b58YNGiQ8PLyElZWVsLLy0s8//zzGqfMVHf6mRBC7N27VwQHBwsbGxuhUCjEwIEDxR9//KGxTuXx7j+97f7Tj2ryz9PPalLT6Wevv/668PT0FDY2NiI4OFikpqZWe9rY999/L9q1aycaNWqk8Tp79+4tHn300WqP+c/9FBYWCj8/P9G5c2dRXl6usd60adOEhYWFSE1NfeBr0EXlqULVLWPHjhVCaP85u3fvnpg9e7bw8PAQNjY2ok+fPuLs2bOiSZMmYsKECer17j/97MKFC2LMmDGiZcuWwtraWri4uIiwsDCxd+9ejf2fO3dOhISECBsbG41T2mr6+9++fbvo2bOn+jPVvXt38dVXXz3w/ajc19GjR6s8p1QqRcuWLUXLli3Vp3dlZWWJl156SXh4eIjGjRuLZs2aiaeeekps2bJFY9sTJ06IXr16CblcLry9vUVCQoJYtmyZACByc3M1/j5qOjXs9u3bIjY2VgQEBAgrKyvh6uoqevbsKT744ANRVlYmhBBiy5Yton///sLNzU1YWVkJX19f8corr4icnBz1fubPny+6d+8unJychI2NjWjTpo1YsGCBeh9CVD39TAjDf9+QeZAJwZkNRFKWn58PZ2dnzJ8/H2+99ZaxwzEpU6dOxcqVK1FUVGTwS8wSGQrHyIkkpLo7ylWOqUrpNq3Vuf+9uXnzJtavX4/HH3+cSZxMGsfIiSTk66+/RlJSkvryvocOHcJXX32F/v37Izg42NjhGVVQUBBCQ0PRtm1b5OXlYfXq1SgsLMTs2bONHRrRAzGRE0lIhw4d0KhRIyxatAiFhYXqCXDVTaSTmgEDBmDLli347LPPIJPJ0LlzZ6xevRohISHGDo3ogThGTkREZMY4Rk5ERGTGmMiJiIjMmFmPkatUKly9ehUODg51fp1pIiIyPCEEbt++DS8vL/UdDOtCSUkJysrK9N6PlZVVlTv2GZtZJ/KrV6/Cx8fH2GEQEZGesrOz1begNbSSkhL4+9kj95r+N4by8PDAxYsXTSqZm3Uir7wv+F/Hm0Nhz1ECapiGBfU2dghEdeaeqgwH/7tB/X1eF8rKypB7TYm/0ppD4VD7XFF4WwW/LpdQVlbGRG4old3pCnsLvf5yiExZIwvt749OZK7qY3jU3kEGe4faH0cF0xzCNetETkREpC2lUEGpxwnXSqEyXDAGxERORESSoIKACrXP5PpsW5fYH01ERGTGmMiJiEgSVAb4r7beffddyGQyTJ06Vd1WUlKCiRMnokmTJrC3t8fQoUORl5en876ZyImISBKUQui91MbRo0excuVKdOjQQaN92rRp2LFjBzZv3oyDBw/i6tWrGDJkiM77ZyInIiKqI0VFRRg1ahQ+//xzODs7q9sLCgqwevVqLF68GH369EGXLl2wZs0aHD58GEeOHNHpGEzkREQkCZWT3fRZdDVx4kQ8+eSTCA8P12hPS0tDeXm5RnubNm3g6+uL1NRUnY7BWetERCQJKggoDTBrvbCwUKNdLpdDLpdXWX/Tpk04fvw4jh49WuW53NxcWFlZwcnJSaPd3d0dubm5OsXFipyIiEgHPj4+cHR0VC8JCQlV1snOzsaUKVOwYcOGOr8KHCtyIiKSBEOdR56dnQ2FQqFur64aT0tLw7Vr19C5c2d1m1KpREpKCj755BPs3r0bZWVlyM/P16jK8/Ly4OHhoVNcTORERCQJ+sw8r9weABQKhUYir07fvn1x+vRpjbbo6Gi0adMGM2fOhI+PDxo3box9+/Zh6NChAICMjAxcvnwZQUFBOsXFRE5ERGRgDg4OaN++vUabnZ0dmjRpom4fO3YsYmJi4OLiAoVCgcmTJyMoKAj/+te/dDoWEzkREUmC6v8XfbY3pCVLlsDCwgJDhw5FaWkpIiIi8Omnn+q8HyZyIiKSBKWes9b12RYAkpOTNR5bW1sjMTERiYmJeu2XiZyIiCRBKaDn3c8MF4sh8fQzIiIiM8aKnIiIJMHUxsgNhYmciIgkQQUZlJDptb0pYtc6ERGRGWNFTkREkqASFYs+25siJnIiIpIEpZ5d6/psW5fYtU5ERGTGWJETEZEkNNSKnImciIgkQSVkUAk9Zq3rsW1dYtc6ERGRGWNFTkREksCudSIiIjOmhAWUenREKw0YiyExkRMRkSQIPcfIBcfIiYiIyNBYkRMRkSRwjJyIiMiMKYUFlEKPMXITvUQru9aJiIjMGCtyIiKSBBVkUOlRv6pgmiU5EzkREUlCQx0jZ9c6ERGRGWNFTkREkqD/ZDd2rRMRERlNxRi5HjdNYdc6ERERGRorciIikgSVntda56x1IiIiI+IYORERkRlTwaJBnkfOMXIiIiIzxoqciIgkQSlkUOpxK1J9tq1LTORERCQJSj0nuynZtU5ERESGxoqciIgkQSUsoNJj1rqKs9aJiIiMh13rREREZHJYkRMRkSSooN/Mc5XhQjEoJnIiIpIE/S8IY5qd2KYZFREREWmFFTkREUmC/tdaN83al4mciIgkoaHej5yJnIiIJKGhVuSmGRURERFphRU5ERFJgv4XhDHN2tc0oyIiIjIwlZDpvehi+fLl6NChAxQKBRQKBYKCgvDTTz+pnw8NDYVMJtNYJkyYoPPrYkVORERUB7y9vfHuu+/ikUcegRACa9euxaBBg3DixAk8+uijAIDx48cjPj5evY2tra3Ox2EiJyIiSVDp2bWu6wVhBg4cqPF4wYIFWL58OY4cOaJO5La2tvDw8Kh1TAC71omISCIq736mzwIAhYWFGktpaelDj61UKrFp0yYUFxcjKChI3b5hwwa4urqiffv2iI2NxZ07d3R+XazIiYiIdODj46PxeM6cOYiLi6t23dOnTyMoKAglJSWwt7fH1q1b0a5dOwDAyJEj4efnBy8vL5w6dQozZ85ERkYGvvvuO53iYSInIiJJUEIGpR4XdancNjs7GwqFQt0ul8tr3KZ169ZIT09HQUEBtmzZgqioKBw8eBDt2rXDyy+/rF4vMDAQnp6e6Nu3L7KystCyZUut42IiJyIiSfhn93httwegnoWuDSsrKwQEBAAAunTpgqNHj+Kjjz7CypUrq6zbo0cPAEBmZqZOiZxj5ERERPVEpVLVOKaenp4OAPD09NRpn6zIiYhIEpSAnl3ruomNjUVkZCR8fX1x+/ZtbNy4EcnJydi9ezeysrKwceNGDBgwAE2aNMGpU6cwbdo0hISEoEOHDjodh4mciIgkwVBd69q6du0aXnrpJeTk5MDR0REdOnTA7t270a9fP2RnZ2Pv3r1YunQpiouL4ePjg6FDh+Ltt9/WOS4mciIikoT6vmnK6tWra3zOx8cHBw8erHUs/8QxciIiIjPGipyIiCRB6Hk/csH7kRMRERkP70dOREREJocVORERSUJtbkV6//amiImciIgkQann3c/02bYumWZUREREpBVW5EREJAnsWiciIjJjKlhApUdHtD7b1iXTjIqIiIi0woqciIgkQSlkUOrRPa7PtnWJiZyIiCSBY+RERERmTOh59zPBK7sRERGRobEiJyIiSVBCBqUeNz7RZ9u6xERORESSoBL6jXOrhAGDMSB2rRMREZkxVuT0QF9/7IYvErwweNx1/Dv+CgDgxy+b4MBWZ2SetsGdIkt8e/Y07B2VRo6UqPYsLARG/fsiwp7KhXOTMty6boW933viq8+aAybanUq6U+k52U2fbeuSSUSVmJiI5s2bw9raGj169MB//vMfY4dEADLSbfDDl03g3+6uRnvJXQt0DS3EiMl5RoqMyLCGjfkLA4ZfwfKFrfDK4B74YmkAhkZfxtMj/zZ2aGRAKsj0XkyR0RP5119/jZiYGMyZMwfHjx9Hx44dERERgWvXrhk7NEm7W2yB9yb5Yer72XC4r9oeMv46npt8DW263DFSdESG1a5jAY4ccMXRX1xx7aoNft3jhhOpLmjVvtDYoRE9lNET+eLFizF+/HhER0ejXbt2WLFiBWxtbfHFF18YOzRJ++RNb3TvW4jOIUXGDoWozv1x0hGdevwXzfwqfpz6t7qNdo/l49ihJkaOjAyp8spu+iymyKhj5GVlZUhLS0NsbKy6zcLCAuHh4UhNTTViZNKWvM0Jmadt8PGPfxo7FKJ6sXm1H2zt7mHl90egUspgYSmw7uMWSP7Rw9ihkQE11DFyoybyGzduQKlUwt3dXaPd3d0d586dq7J+aWkpSktL1Y8LC9ntZWjXrjTG8neaIWFTFqysTfRcCyID6xVxDWFP5mHRrEdxOcsOLVrfxstvnMfN63Ls2+5p7PCIHsisZq0nJCRg7ty5xg6jQcs8ZYv8G40xMaK1uk2llOH0ETtsX+OKnZdOwtLSiAES1YGxMZnYvNoPKbsqiopL5+3h5lmC4WP/YiJvQFTQ81rrJjrZzaiJ3NXVFZaWlsjL05z9nJeXBw+Pql1asbGxiImJUT8uLCyEj49PnccpJZ163cbK/Zq9IR9O84VPQAmGT7zGJE4NktxaWeViHyqVDBYy9ko1JELPmeeCibwqKysrdOnSBfv27cPgwYMBACqVCvv27cOkSZOqrC+XyyGXy+s5SmmxtVeheZsSjTZrWxUcnJXq9lvXGuG/1xrj6kUrAMDFc9awtVOhabMyKJx5PjmZn98OumLE+L9wPccaf2XZoWWbIjzzYjZ+3sZqvCHh3c/qSExMDKKiotC1a1d0794dS5cuRXFxMaKjo40dGtXgh3Wu+HLx/3pMpj/zCADg9SWX0f+5W8YKi6jWViS0wouTLmDiWxlwdCnHretW+GmLFzau8Dd2aEQPZfRE/txzz+H69et45513kJubi06dOmHXrl1VJsCR8bz/babG4xen5+LF6blGiobI8O7eaYTPFrXCZ4taGTsUqkOctV6HJk2aVG1XOhERkaE01K510/x5QURERFoxiYqciIiorul7vXSefkZERGRE7FonIiIik8OKnIiIJKGhVuRM5EREJAkNNZGza52IiMiMsSInIiJJaKgVORM5ERFJgoB+p5CZ6i10mMiJiEgSGmpFzjFyIiIiM8aKnIiIJKGhVuRM5EREJAkNNZGza52IiKgOLF++HB06dIBCoYBCoUBQUBB++ukn9fMlJSWYOHEimjRpAnt7ewwdOhR5eXk6H4eJnIiIJKGyItdn0YW3tzfeffddpKWl4dixY+jTpw8GDRqE33//HQAwbdo07NixA5s3b8bBgwdx9epVDBkyROfXxa51IiKSBCFkEHp0j+u67cCBAzUeL1iwAMuXL8eRI0fg7e2N1atXY+PGjejTpw8AYM2aNWjbti2OHDmCf/3rX1ofhxU5ERGRDgoLCzWW0tLSh26jVCqxadMmFBcXIygoCGlpaSgvL0d4eLh6nTZt2sDX1xepqak6xcNETkREklB5P3J9FgDw8fGBo6OjeklISKjxmKdPn4a9vT3kcjkmTJiArVu3ol27dsjNzYWVlRWcnJw01nd3d0dubq5Or4td60REJAmGmrWenZ0NhUKhbpfL5TVu07p1a6Snp6OgoABbtmxBVFQUDh48WOsYqsNETkREpIPKWejasLKyQkBAAACgS5cuOHr0KD766CM899xzKCsrQ35+vkZVnpeXBw8PD53iYdc6ERFJQuVkN30WfalUKpSWlqJLly5o3Lgx9u3bp34uIyMDly9fRlBQkE77ZEVORESSUN8XhImNjUVkZCR8fX1x+/ZtbNy4EcnJydi9ezccHR0xduxYxMTEwMXFBQqFApMnT0ZQUJBOM9YBJnIiIpKI+j797Nq1a3jppZeQk5MDR0dHdOjQAbt370a/fv0AAEuWLIGFhQWGDh2K0tJSRERE4NNPP9U5LiZyIiKiOrB69eoHPm9tbY3ExEQkJibqdRwmciIikgShZ9e6IcbI6wITORERSYIAIIR+25sizlonIiIyY6zIiYhIElSQQQY9Zq3rsW1dYiInIiJJqO9Z6/WFXetERERmjBU5ERFJgkrIIKvHC8LUFyZyIiKSBCH0nLVuotPW2bVORERkxliRExGRJDTUyW5M5EREJAlM5ERERGasoU524xg5ERGRGWNFTkREktBQZ60zkRMRkSRUJHJ9xsgNGIwBsWudiIjIjLEiJyIiSeCsdSIiIjMmoN89xU20Z51d60REROaMFTkREUkCu9aJiIjMWQPtW2ciJyIiadCzIoeJVuQcIyciIjJjrMiJiEgSeGU3IiIiM9ZQJ7uxa52IiMiMsSInIiJpEDL9JqyZaEXORE5ERJLQUMfI2bVORERkxliRExGRNEj5gjDbt2/XeodPP/10rYMhIiKqKw111rpWiXzw4MFa7Uwmk0GpVOoTDxEREelAq0SuUqnqOg4iIqK6Z6Ld4/rQa4y8pKQE1tbWhoqFiIiozjTUrnWdZ60rlUrMmzcPzZo1g729PS5cuAAAmD17NlavXm3wAImIiAxCGGAxQTon8gULFiApKQmLFi2ClZWVur19+/ZYtWqVQYMjIiKiB9M5ka9btw6fffYZRo0aBUtLS3V7x44dce7cOYMGR0REZDgyAyymR+cx8itXriAgIKBKu0qlQnl5uUGCIiIiMrgGeh65zhV5u3bt8Msvv1Rp37JlCx577DGDBEVERETa0bkif+eddxAVFYUrV65ApVLhu+++Q0ZGBtatW4edO3fWRYxERET6Y0VeYdCgQdixYwf27t0LOzs7vPPOOzh79ix27NiBfv361UWMRERE+qu8+5k+iwmq1XnkvXr1wp49ewwdCxEREemo1nc/O3bsGNavX4/169cjLS3NkDEREREZXOVtTPVZdJGQkIBu3brBwcEBbm5uGDx4MDIyMjTWCQ0NhUwm01gmTJig03F0rsj//vtvPP/88/j111/h5OQEAMjPz0fPnj2xadMmeHt767pLIiKiulfPY+QHDx7ExIkT0a1bN9y7dw9vvvkm+vfvjz/++AN2dnbq9caPH4/4+Hj1Y1tbW52Oo3MiHzduHMrLy3H27Fm0bt0aAJCRkYHo6GiMGzcOu3bt0nWXREREDc79+TApKQlubm5IS0tDSEiIut3W1hYeHh61Po7OXesHDx7E8uXL1UkcAFq3bo2PP/4YKSkptQ6EiIioThloslthYaHGUlpaqtXhCwoKAAAuLi4a7Rs2bICrqyvat2+P2NhY3LlzR6eXpXNF7uPjU+2FX5RKJby8vHTdHRERUb2QiYpFn+2Bijz4T3PmzEFcXNwDt1WpVJg6dSqCg4PRvn17dfvIkSPh5+cHLy8vnDp1CjNnzkRGRga+++47rePSOZG///77mDx5MhITE9G1a1cAFRPfpkyZgg8++EDX3REREdUPA42RZ2dnQ6FQqJvlcvlDN504cSLOnDmDQ4cOabS//PLL6j8HBgbC09MTffv2RVZWFlq2bKlVWFolcmdnZ8hk/zt/rri4GD169ECjRhWb37t3D40aNcKYMWMwePBgrQ5MRERkjhQKhUYif5hJkyZh586dSElJeeiE8B49egAAMjMzDZvIly5dqtXOiIiITJa+F3XRcVshBCZPnoytW7ciOTkZ/v7+D90mPT0dAODp6an1cbRK5FFRUVrvkIiIyCTV8+lnEydOxMaNG/H999/DwcEBubm5AABHR0fY2NggKysLGzduxIABA9CkSROcOnUK06ZNQ0hICDp06KD1cWp1ZbdKJSUlKCsr02jTpbuBiIiooVq+fDmAiou+/NOaNWswevRoWFlZYe/evVi6dCmKi4vh4+ODoUOH4u2339bpODon8uLiYsycORPffPMNbt68WeV5pVKp6y6JiIjqXj1X5OIhl4Lz8fHBwYMH9Qiogs7nkb/xxhvYv38/li9fDrlcjlWrVmHu3Lnw8vLCunXr9A6IiIioTggDLCZI54p8x44dWLduHUJDQxEdHY1evXohICAAfn5+2LBhA0aNGlUXcRIREVE1dK7Ib926hRYtWgCoGA+/desWAODxxx/nld2IiMh0NdDbmOqcyFu0aIGLFy8CANq0aYNvvvkGQEWlXnkTFSIiIlNTeWU3fRZTpHMij46OxsmTJwEAs2bNQmJiIqytrTFt2jTMmDHD4AESERFRzXQeI582bZr6z+Hh4Th37hzS0tIQEBCg03lvRERE9aqeZ63XF73OIwcAPz8/+Pn5GSIWIiIi0pFWiXzZsmVa7/C1116rdTBERER1RQY9735msEgMS6tEvmTJEq12JpPJmMiJiIjqkVaJvHKWuqka2qk7GsmsjB0GUZ1Q3al6BUWihkIpyuvvYPV805T6ovcYORERkVlooJPddD79jIiIiEwHK3IiIpKGBlqRM5ETEZEk6Ht1tgZzZTciIiIyHbVK5L/88gteeOEFBAUF4cqVKwCA9evX49ChQwYNjoiIyGAa6G1MdU7k3377LSIiImBjY4MTJ06gtLQUAFBQUICFCxcaPEAiIiKDYCKvMH/+fKxYsQKff/45GjdurG4PDg7G8ePHDRocERERPZjOk90yMjIQEhJSpd3R0RH5+fmGiImIiMjgONnt/3l4eCAzM7NK+6FDh9CiRQuDBEVERGRwlVd202cxQTon8vHjx2PKlCn47bffIJPJcPXqVWzYsAHTp0/Hv//977qIkYiISH8NdIxc5671WbNmQaVSoW/fvrhz5w5CQkIgl8sxffp0TJ48uS5iJCIiohronMhlMhneeustzJgxA5mZmSgqKkK7du1gb29fF/EREREZREMdI6/1ld2srKzQrl07Q8ZCRERUd3iJ1gphYWGQyWoe8N+/f79eAREREZH2dE7knTp10nhcXl6O9PR0nDlzBlFRUYaKi4iIyLD07FpvMBX5kiVLqm2Pi4tDUVGR3gERERHViQbatW6wm6a88MIL+OKLLwy1OyIiItKCwW5jmpqaCmtra0PtjoiIyLAaaEWucyIfMmSIxmMhBHJycnDs2DHMnj3bYIEREREZEk8/+3+Ojo4ajy0sLNC6dWvEx8ejf//+BguMiIiIHk6nRK5UKhEdHY3AwEA4OzvXVUxERESkJZ0mu1laWqJ///68yxkREZmfBnqtdZ1nrbdv3x4XLlyoi1iIiIjqTOUYuT6LKdI5kc+fPx/Tp0/Hzp07kZOTg8LCQo2FiIiI6o/WY+Tx8fF4/fXXMWDAAADA008/rXGpViEEZDIZlEql4aMkIiIyBBOtqvWhdSKfO3cuJkyYgAMHDtRlPERERHVD6ueRC1HxCnr37l1nwRAREZFudDr97EF3PSMiIjJlvCAMgFatWj00md+6dUuvgIiIiOqE1LvWgYpx8vuv7EZERETGo1MiHzFiBNzc3OoqFiIiojrTULvWtT6PnOPjRERk1ur5ym4JCQno1q0bHBwc4ObmhsGDByMjI0NjnZKSEkycOBFNmjSBvb09hg4diry8PJ2Oo3Uir5y1TkRERA938OBBTJw4EUeOHMGePXtQXl6O/v37o7i4WL3OtGnTsGPHDmzevBkHDx7E1atXq9xl9GG07lpXqVQ67ZiIiMik1PNkt127dmk8TkpKgpubG9LS0hASEoKCggKsXr0aGzduRJ8+fQAAa9asQdu2bXHkyBH861//0uo4Ol+ilYiIyBwZ6lrr91+avLS0VKvjFxQUAABcXFwAAGlpaSgvL0d4eLh6nTZt2sDX1xepqalavy4mciIikgYDjZH7+PjA0dFRvSQkJDz00CqVClOnTkVwcDDat28PAMjNzYWVlRWcnJw01nV3d0dubq7WL0unWetERERSl52dDYVCoX4sl8sfus3EiRNx5swZHDp0yODxMJETEZE0GGiMXKFQaCTyh5k0aRJ27tyJlJQUeHt7q9s9PDxQVlaG/Px8jao8Ly8PHh4eWu+fXetERCQJ9X0/ciEEJk2ahK1bt2L//v3w9/fXeL5Lly5o3Lgx9u3bp27LyMjA5cuXERQUpPVxWJETERHVgYkTJ2Ljxo34/vvv4eDgoB73dnR0hI2NDRwdHTF27FjExMTAxcUFCoUCkydPRlBQkNYz1gEmciIikop6Pv1s+fLlAIDQ0FCN9jVr1mD06NEAgCVLlsDCwgJDhw5FaWkpIiIi8Omnn+p0HCZyIiKShPq+RKs2F1KztrZGYmIiEhMTaxkVx8iJiIjMGityIiKSBt7GlIiIyIw10ETOrnUiIiIzxoqciIgkQfb/iz7bmyImciIikoYG2rXORE5ERJJQ36ef1ReOkRMREZkxVuRERCQN7FonIiIycyaajPXBrnUiIiIzxoqciIgkoaFOdmMiJyIiaWigY+TsWiciIjJjrMiJiEgS2LVORERkzti1TkRERKaGFTkREUkCu9aJiIjMWQPtWmciJyIiaWigiZxj5ERERGaMFTkREUkCx8iJiIjMGbvWiYiIyNSwIiciIkmQCQGZqH1Zrc+2dYmJnIiIpIFd60RERGRqWJETEZEkcNY6ERGROWPXOhEREZkaVuRERCQJ7FonIiIyZw20a52JnIiIJKGhVuQcIyciIjJjrMiJiEga2LVORERk3ky1e1wf7FonIiIyY6zIiYhIGoSoWPTZ3gQxkRMRkSRw1joRERGZHFbkREQkDQ101jorciIikgSZSv9FFykpKRg4cCC8vLwgk8mwbds2jedHjx4NmUymsTzxxBM6vy4mciIiojpQXFyMjh07IjExscZ1nnjiCeTk5KiXr776SufjsGudHiop+TjcvUurtO/40h2fxrUwQkREhtfEoxxj37qKbmG3IbdR4eolOT6c5oPzp2yNHRoZSj13rUdGRiIyMvKB68jlcnh4eOgRlJETeUpKCt5//32kpaUhJycHW7duxeDBg40ZElVjypBAWFj87xPs1+oOEtadxS8/NTFiVESGY+94D4u/P49Th+3x9gstkH/TEs1alKGowNLYoZEBmeKs9eTkZLi5ucHZ2Rl9+vTB/Pnz0aSJbt+tRk3kld0OY8aMwZAhQ4wZCj1Awa3GGo+Hv3IFV/+S4/RvCiNFRGRYwydew42rVvhwmq+6LS9bbsSIqE4Y6DzywsJCjWa5XA65XPfPyxNPPIEhQ4bA398fWVlZePPNNxEZGYnU1FRYWmr/I9KoiVybbgcyLY0aqxA26Aa2rvEEIDN2OEQG8a/+hUhLdsBbKy+hQ1AxbuQ2ws4kV/y0kb1OVJWPj4/G4zlz5iAuLk7n/YwYMUL958DAQHTo0AEtW7ZEcnIy+vbtq/V+zGqMvLS0FKWl/xurvf9XEdW9oH63YK+4hz3fuhk7FCKD8fQtw1Mv3cR3nzXFpo/d0KrjXfx73hWUl8uwd7OLscMjAzFU13p2djYUiv/1SNamGq9OixYt4OrqiszMzIabyBMSEjB37lxjhyFpEc9ew7EUZ9y6ZmXsUIgMRmYBnD9lgzXvegIAss7YonmbEjz54k0m8obEQJPdFAqFRiI3lL///hs3b96Ep6enTtuZ1elnsbGxKCgoUC/Z2dnGDklS3LxK0alnAXZ9w2qcGpZb1xrhrz+tNdqyz8vh1qzMSBFRQ1BUVIT09HSkp6cDAC5evIj09HRcvnwZRUVFmDFjBo4cOYJLly5h3759GDRoEAICAhAREaHTccyqIq/thAIyjH7DrqHgZmP854CzsUMhMqg/jtrBp6XmKZbNWpTi2hX2PDUk9T1r/dixYwgLC1M/jomJAQBERUVh+fLlOHXqFNauXYv8/Hx4eXmhf//+mDdvns55zqwSORmPTCbQb+g17N3aFColJ7lRw/LdZ02xZPt5jJich5QdTmj92B0MeOEWls7wNnZoZEj1fPez0NBQiAdss3v37trH8g9GTeRFRUXIzMxUP67sdnBxcYGvr+8DtqT69lhwAdybleHnzexWp4bnz5O2iB/rj+jYHIyalofcbCuseMcLB7ay94lMn1ET+YO6HZKSkowUFVXn+CEnRAYEGTsMojrz214FftvLayM0ZKZ4QRhDMGoif1i3AxERkcHw7mdERERkajjZjYiIJIFd60REROZMJSoWfbY3QUzkREQkDRwjJyIiIlPDipyIiCRBBj3HyA0WiWExkRMRkTTU85Xd6gu71omIiMwYK3IiIpIEnn5GRERkzjhrnYiIiEwNK3IiIpIEmRCQ6TFhTZ9t6xITORERSYPq/xd9tjdB7FonIiIyY6zIiYhIEti1TkREZM4a6Kx1JnIiIpIGXtmNiIiITA0rciIikgRe2Y2IiMicsWudiIiITA0rciIikgSZqmLRZ3tTxERORETSwK51IiIiMjWsyImISBp4QRgiIiLz1VAv0cqudSIiIjPGipyIiKShgU52YyInIiJpENDvnuKmmceZyImISBo4Rk5EREQmhxU5ERFJg4CeY+QGi8SgmMiJiEgaGuhkN3atExERmTFW5EREJA0qADI9tzdBTORERCQJnLVOREREJocVORERSUMDnezGRE5ERNLQQBM5u9aJiIjqQEpKCgYOHAgvLy/IZDJs27ZN43khBN555x14enrCxsYG4eHhOH/+vM7HYSInIiJpqKzI9Vl0UFxcjI4dOyIxMbHa5xctWoRly5ZhxYoV+O2332BnZ4eIiAiUlJTodBx2rRMRkTTU8+lnkZGRiIyMrPY5IQSWLl2Kt99+G4MGDQIArFu3Du7u7ti2bRtGjBih9XFYkRMRkSRUnn6mzwIAhYWFGktpaanOsVy8eBG5ubkIDw9Xtzk6OqJHjx5ITU3VaV9M5ERERDrw8fGBo6OjeklISNB5H7m5uQAAd3d3jXZ3d3f1c9pi1zoREUmDgWatZ2dnQ6FQqJvlcrm+kemFiZyIiKRBJQCZHolcVbGtQqHQSOS14eHhAQDIy8uDp6enuj0vLw+dOnXSaV/sWiciIqpn/v7+8PDwwL59+9RthYWF+O233xAUFKTTvliRExGRNNTzBWGKioqQmZmpfnzx4kWkp6fDxcUFvr6+mDp1KubPn49HHnkE/v7+mD17Nry8vDB48GCdjsNETkREEqFnIodu2x47dgxhYWHqxzExMQCAqKgoJCUl4Y033kBxcTFefvll5Ofn4/HHH8euXbtgbW2t03GYyImIiOpAaGgoxAN+OMhkMsTHxyM+Pl6v4zCRExGRNDTQa60zkRMRkTSoBHTtHq+6venhrHUiIiIzxoqciIikQagqFn22N0FM5EREJA0cIyciIjJjHCMnIiIiU8OKnIiIpIFd60RERGZMQM9EbrBIDIpd60RERGaMFTkREUkDu9aJiIjMmEoFQI9zwVWmeR45u9aJiIjMGCtyIiKSBnatExERmbEGmsjZtU5ERGTGWJETEZE0NNBLtDKRExGRJAihgtDjDmb6bFuXmMiJiEgahNCvquYYORERERkaK3IiIpIGoecYuYlW5EzkREQkDSoVINNjnNtEx8jZtU5ERGTGWJETEZE0sGudiIjIfAmVCkKPrnVTPf2MXetERERmjBU5ERFJA7vWiYiIzJhKALKGl8jZtU5ERGTGWJETEZE0CAFAn/PITbMiZyInIiJJECoBoUfXumAiJyIiMiKhgn4VOU8/IyIiIgNjRU5ERJLArnUiIiJz1kC71s06kVf+Oronyo0cCVHdUfHzTQ3YPVR8vuuj2r2Hcr2uB1MZq6kx60R++/ZtAEDK3W+NHAkREenj9u3bcHR0rJN9W1lZwcPDA4dyf9R7Xx4eHrCysjJAVIYjE6ba6a8FlUqFq1evwsHBATKZzNjhSEJhYSF8fHyQnZ0NhUJh7HCIDIqf7/onhMDt27fh5eUFC4u6m39dUlKCsrIyvfdjZWUFa2trA0RkOGZdkVtYWMDb29vYYUiSQqHgFx01WPx816+6qsT/ydra2uQSsKHw9DMiIiIzxkRORERkxpjISSdyuRxz5syBXC43dihEBsfPN5kjs57sRkREJHWsyImIiMwYEzkREZEZYyInIiIyY0zkREREZoyJnLSWmJiI5s2bw9raGj169MB//vMfY4dEZBApKSkYOHAgvLy8IJPJsG3bNmOHRKQ1JnLSytdff42YmBjMmTMHx48fR8eOHREREYFr164ZOzQivRUXF6Njx45ITEw0dihEOuPpZ6SVHj16oFu3bvjkk08AVFzn3sfHB5MnT8asWbOMHB2R4chkMmzduhWDBw82dihEWmFFTg9VVlaGtLQ0hIeHq9ssLCwQHh6O1NRUI0ZGRERM5PRQN27cgFKphLu7u0a7u7s7cnNzjRQVEREBTORERERmjYmcHsrV1RWWlpbIy8vTaM/Ly4OHh4eRoiIiIoCJnLRgZWWFLl26YN++feo2lUqFffv2ISgoyIiRERFRI2MHQOYhJiYGUVFR6Nq1K7p3746lS5eiuLgY0dHRxg6NSG9FRUXIzMxUP7548SLS09Ph4uICX19fI0ZG9HA8/Yy09sknn+D9999Hbm4uOnXqhGXLlqFHjx7GDotIb8nJyQgLC6vSHhUVhaSkpPoPiEgHTORERERmjGPkREREZoyJnIiIyIwxkRMREZkxJnIiIiIzxkRORERkxpjIiYiIzBgTORERkRljIifS0+jRozXuXR0aGoqpU6fWexzJycmQyWTIz8+vcR2ZTIZt27Zpvc+4uDh06tRJr7guXboEmUyG9PR0vfZDRNVjIqcGafTo0ZDJZJDJZLCyskJAQADi4+Nx7969Oj/2d999h3nz5mm1rjbJl4joQXitdWqwnnjiCaxZswalpaX48ccfMXHiRDRu3BixsbFV1i0rK4OVlZVBjuvi4mKQ/RARaYMVOTVYcrkcHh4e8PPzw7///W+Eh4dj+/btAP7XHb5gwQJ4eXmhdevWAIDs7GwMHz4cTk5OcHFxwaBBg3Dp0iX1PpVKJWJiYuDk5IQmTZrgjTfewP1XOb6/a720tBQzZ86Ej48P5HI5AgICsHr1aly6dEl9fW9nZ2fIZDKMHj0aQMXd5RISEuDv7w8bGxt07NgRW7Zs0TjOjz/+iFatWsHGxgZhYWEacWpr5syZaNWqFWxtbdGiRQvMnj0b5eXlVdZbuXIlfHx8YGtri+HDh6OgoEDj+VWrVqFt27awtrZGmzZt8Omnn+ocCxHVDhM5SYaNjQ3KysrUj/ft24eMjAzs2bMHO3fuRHl5OSIiIuDg4IBffvkFv/76K+zt7fHEE0+ot/vwww+RlJSEL774AocOHcKtW7ewdevWBx73pZdewldffYVly5bh7NmzWLlyJezt7eHj44Nvv/0WAJCRkYGcnBx89NFHAICEhASsW7cOK1aswO+//45p06bhhRdewMGDBwFU/OAYMmQIBg4ciPT0dIwbNw6zZs3S+T1xcHBAUlIS/vjjD3z00Uf4/PPPsWTJEo11MjMz8c0332DHjh3YtWsXTpw4gVdffVX9/IYNG/DOO+9gwYIFOHv2LBYuXIjZs2dj7dq1OsdDRLUgiBqgqKgoMWjQICGEECqVSuzZs0fI5XIxffp09fPu7u6itLRUvc369etF69athUqlUreVlpYKGxsbsXv3biGEEJ6enmLRokXq58vLy4W3t7f6WEII0bt3bzFlyhQhhBAZGRkCgNizZ0+1cR44cEAAEP/973/VbSUlJcLW1lYcPnxYY92xY8eK559/XgghRGxsrGjXrp3G8zNnzqyyr/sBEFu3bq3x+ffff1906dJF/XjOnDnC0tJS/P333+q2n376SVhYWIicnBwhhBAtW7YUGzdu1NjPvHnzRFBQkBBCiIsXLwoA4sSJEzUel4hqj2Pk1GDt3LkT9vb2KC8vh0qlwsiRIxEXF6d+PjAwUGNc/OTJk8jMzISDg4PGfkpKSpCVlYWCggLk5ORo3Lq1UaNG6Nq1a5Xu9Urp6emwtLRE7969tY47MzMTd+7cQb9+/TTay8rK8NhjjwEAzp49W+UWskFBQVofo9LXX3+NZcuWISsrC0VFRbh37x4UCoXGOr6+vmjWrJnGcVQqFTIyMuDg4ICsrCyMHTsW48ePV69z7949ODo66hwPEemOiZwarLCwMCxfvhxWVlbw8vJCo0aaH3c7OzuNx0VFRejSpQs2bNhQZV9NmzatVQw2NjY6b1NUVAQA+OGHHzQSKFAx7m8oqampGDVqFObOnYuIiAg4Ojpi06ZN+PDDD3WO9fPPP6/yw8LS0tJgsRJRzZjIqcGys7NDQECA1ut37twZX3/9Ndzc3KpUpZU8PT3x22+/ISQkBEBF5ZmWlobOnTtXu35gYCBUKhUOHjyI8PDwKs9X9ggolUp1W7t27SCXy3H58uUaK/m2bduqJ+5VOnLkyMNf5D8cPnwYfn5+eOutt9Rtf/31V5X1Ll++jKtXr8LLy0t9HAsLC7Ru3Rru7u7w8vLChQsXMGrUKJ2OT0SGwcluRP9v1KhRcHV1xaBBg/DLL7/g4sWLSE5OxmuvvYa///4bADBlyhS8++672LZtG86dO4dXX331geeAN2/eHFFRURgzZgy2bdum3uc333wDAPDz84NMJsPOnTtx/fp1FBUVwcHBAdOnT8e0adOwdu1aZGVl4fjx4/j444/VE8gmTJiA8+fPY8aMGcjIyMDGjRuRlJSk0+t95JFHcPnyZWzatAlZWVlYtmxZtRP3rK2tERUVhZMnT+KXX37Ba6+9huHDh8PDwwMAMHfuXCQkJGDZsmX4888/cfr0aaxZswaLFy/WKR4iqh0mcqL/Z2tri5SUFPj6+mLIkCFo27Ytxo4di5KSEnWF/vrrr+PFF19EVFQUgoKC4ODggGeeeeaB+12+fDmGDRuGV199FW3atMH48eNRXFwMAGjWrBnmzp2LWbNmwd3dHZMmTQIAzJs3D7Nnz0ZCQgLatm2LJ554Aj/88AP8/f0BVIxbf/vtt9i2bRs6duyIFStWYOHChTq93qeffhrTpk3DpEmT0KlTJxw+fBizZ8+usl5AQACGDBmCAQMGoH///ujQoYPG6WXjxo3DqlWrsGbNGgQGBqJ3795ISkpSx0pEdUsmapqlQ0RERCaPFTkREZEZYyInIiIyY0zkREREZoyJnIiIyIwxkRMREZkxJnIiIiIzxkRORERkxpjIiYiIzBgTORERkRljIiciIjJjTORERERmjImciIjIjP0fbHDiXaPBNMUAAAAASUVORK5CYII=\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "from sklearn.metrics import (\n",
+ " roc_curve,\n",
+ " precision_recall_curve,\n",
+ " confusion_matrix,\n",
+ " ConfusionMatrixDisplay\n",
+ ")\n",
+ "\n",
+ "# ROC CURVE\n",
+ "fpr, tpr, _ = roc_curve(y_test, y_prob)\n",
+ "\n",
+ "plt.figure(figsize=(6, 5))\n",
+ "plt.plot(fpr, tpr, label=f\"AUC = {roc_auc_score(y_test, y_prob):.3f}\")\n",
+ "plt.plot([0, 1], [0, 1], linestyle='--')\n",
+ "plt.xlabel(\"False Positive Rate\")\n",
+ "plt.ylabel(\"True Positive Rate\")\n",
+ "plt.title(\"ROC Curve - Logistic Regression\")\n",
+ "plt.legend()\n",
+ "plt.grid(True)\n",
+ "plt.show()\n",
+ "\n",
+ "# PRECISION-RECALL CURVE\n",
+ "precision_vals, recall_vals, _ = precision_recall_curve(y_test, y_prob)\n",
+ "\n",
+ "plt.figure(figsize=(6, 5))\n",
+ "plt.plot(recall_vals, precision_vals)\n",
+ "plt.xlabel(\"Recall\")\n",
+ "plt.ylabel(\"Precision\")\n",
+ "plt.title(\"Precision-Recall Curve - Logistic Regression\")\n",
+ "plt.grid(True)\n",
+ "plt.show()\n",
+ "\n",
+ "\n",
+ "# CONFUSION MATRIX\n",
+ "cm = confusion_matrix(y_test, y_pred)\n",
+ "\n",
+ "disp = ConfusionMatrixDisplay(confusion_matrix=cm)\n",
+ "disp.plot()\n",
+ "plt.title(\"Confusion Matrix - Logistic Regression\")\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# GETTING THE BIOLOGICAL GENES\n",
+ "\n",
+ "top_features = feature_importance.head(10)\n",
+ "\n",
+ "def clean_gene_symbol(gene):\n",
+ " if pd.isna(gene) or gene == \"---\":\n",
+ " return \"Unknown\"\n",
+ " return gene.split(\"///\")[0].strip()\n",
+ "\n",
+ "mapped_genes = [\n",
+ " clean_gene_symbol(id_to_gene.get(probe, \"Unknown\"))\n",
+ " for probe in top_features.index\n",
+ "]\n",
+ "\n",
+ "df_top = pd.DataFrame({\n",
+ " \"Probe\": top_features.index,\n",
+ " \"Gene\": mapped_genes,\n",
+ " \"Coefficient\": top_features.values\n",
+ "})\n",
+ "\n",
+ "print(df_top)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "DPrhsGr7ffhp",
+ "outputId": "71f3060b-2f0d-46ec-e825-ebc2602126d4"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " Probe Gene Coefficient\n",
+ "0 204540_at EEF1A2 1.518858\n",
+ "1 211737_x_at PTN -1.278893\n",
+ "2 218885_s_at GALNT12 -1.155978\n",
+ "3 220084_at C14orf105 -1.058550\n",
+ "4 207147_at DLX2 1.039317\n",
+ "5 202989_at RGS1 -1.022044\n",
+ "6 215112_x_at MCF2L2 1.000583\n",
+ "7 211078_s_at STK3 0.987127\n",
+ "8 217595_at GSPT1 0.922447\n",
+ "9 205916_at S100A7 0.906573\n"
+ ]
+ }
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "authorship_tag": "ABX9TyOdYPqxwiEHebctk4HhrcaP",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/PMIDExampleData.pdf b/PMIDExampleData.pdf
new file mode 100644
index 00000000..f7c3095d
Binary files /dev/null and b/PMIDExampleData.pdf differ
diff --git a/READMEforBreastCancerModel.pdf b/READMEforBreastCancerModel.pdf
new file mode 100644
index 00000000..96d064e5
Binary files /dev/null and b/READMEforBreastCancerModel.pdf differ
diff --git a/bco_draft (1).json b/bco_draft (1).json
new file mode 100644
index 00000000..840ff20e
--- /dev/null
+++ b/bco_draft (1).json
@@ -0,0 +1,240 @@
+{
+ "object_id": "https://example.org/bco/breast-cancer-drfs-gse25055",
+ "spec_version": "https://w3id.org/ieee/ieee-2791-schema/2791object.json",
+ "etag": "draft-1",
+ "provenance_domain": {
+ "name": "Breast Cancer DRFS Prediction using GEO GSE25055",
+ "version": "1.0",
+ "review_status": "unreviewed",
+ "derived_from": [],
+ "created": "2026-04-27T00:00:00Z",
+ "modified": "2026-04-27T00:00:00Z",
+ "contributors": [
+ {
+ "name": "SAMPURNA CHAKRAVORTY",
+ "affiliation": "University of Maryland - College Park",
+ "email": "sampurnachakravorty@gmail.com",
+ "contribution": [
+ "createdBy"
+ ],
+ "orcid": ""
+ }
+ ],
+ "license": "https://spdx.org/licenses/CC-BY-4.0.html"
+ },
+ "usability_domain": [
+ "This workflow processes gene expression data from GEO dataset GSE25055 to predict distant relapse-free survival (DRFS) outcomes in breast cancer patients.",
+ "The pipeline extracts metadata and expression values from SOFT files, maps probe IDs to gene symbols, and constructs a labeled dataset.",
+ "A logistic regression model is trained on normalized gene expression data using variance-based feature selection.",
+ "This workflow is intended for exploratory bioinformatics analysis and predictive modeling of cancer outcomes."
+ ],
+ "description_domain": {
+ "keywords": [
+ "breast cancer",
+ "gene expression",
+ "GEO",
+ "machine learning",
+ "logistic regression",
+ "DRFS"
+ ],
+ "pipeline_steps": [
+ {
+ "step_number": 1,
+ "name": "Upload GEO SOFT file",
+ "description": "Upload GSE25055 SOFT file into the environment"
+ },
+ {
+ "step_number": 2,
+ "name": "Parse dataset",
+ "description": "Parse SOFT file using GEOparse"
+ },
+ {
+ "step_number": 3,
+ "name": "Extract metadata",
+ "description": "Extract sample-level metadata"
+ },
+ {
+ "step_number": 4,
+ "name": "Extract expression matrix",
+ "description": "Retrieve VALUE matrix from GEO dataset"
+ },
+ {
+ "step_number": 5,
+ "name": "Transpose matrix",
+ "description": "Convert to samples x features format"
+ },
+ {
+ "step_number": 6,
+ "name": "Map probes to genes",
+ "description": "Use GPL96 annotation to map probe IDs to gene symbols"
+ },
+ {
+ "step_number": 7,
+ "name": "Clean DRFS labels",
+ "description": "Extract and clean DRFS outcome variable"
+ },
+ {
+ "step_number": 8,
+ "name": "Match sample IDs",
+ "description": "Align metadata and expression data"
+ },
+ {
+ "step_number": 9,
+ "name": "Merge dataset",
+ "description": "Combine features and labels"
+ },
+ {
+ "step_number": 10,
+ "name": "Feature selection",
+ "description": "Select top 1000 genes by variance"
+ },
+ {
+ "step_number": 11,
+ "name": "Normalization",
+ "description": "Standardize features using StandardScaler"
+ },
+ {
+ "step_number": 12,
+ "name": "Train-test split",
+ "description": "Split dataset into 80/20 stratified sets"
+ },
+ {
+ "step_number": 13,
+ "name": "Train model",
+ "description": "Train logistic regression classifier"
+ },
+ {
+ "step_number": 14,
+ "name": "Evaluate model",
+ "description": "Compute accuracy, precision, recall, F1, ROC-AUC"
+ },
+ {
+ "step_number": 15,
+ "name": "Feature importance",
+ "description": "Extract most predictive genes"
+ },
+ {
+ "step_number": 16,
+ "name": "Visualization",
+ "description": "Generate ROC, PR curve, and confusion matrix"
+ }
+ ]
+ },
+ "execution_domain": {
+ "script": [
+ {
+ "uri": "https://colab.research.google.com/",
+ "access_time": "2026-04-27T00:00:00Z"
+ }
+ ],
+ "script_driver": "python",
+ "software_prerequisites": [
+ {
+ "name": "Python",
+ "version": "3.x"
+ },
+ {
+ "name": "numpy"
+ },
+ {
+ "name": "pandas"
+ },
+ {
+ "name": "GEOparse"
+ },
+ {
+ "name": "scikit-learn"
+ },
+ {
+ "name": "matplotlib"
+ }
+ ],
+ "external_data_endpoints": [
+ {
+ "name": "GEO",
+ "url": "https://www.ncbi.nlm.nih.gov/geo/"
+ }
+ ],
+ "environment_variables": {}
+ },
+ "parametric_domain": [
+ {
+ "param": "test_size",
+ "value": "0.2"
+ },
+ {
+ "param": "random_state",
+ "value": "42"
+ },
+ {
+ "param": "feature_selection",
+ "value": "top 1000 genes by variance"
+ },
+ {
+ "param": "C",
+ "value": "100"
+ },
+ {
+ "param": "penalty",
+ "value": "l1"
+ },
+ {
+ "param": "solver",
+ "value": "liblinear"
+ },
+ {
+ "param": "max_iter",
+ "value": "500"
+ },
+ {
+ "param": "class_weight",
+ "value": "balanced"
+ }
+ ],
+ "io_domain": {
+ "input_subdomain": [
+ {
+ "filename": "GSE25055_family.soft.gz",
+ "uri": "https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE25055"
+ },
+ {
+ "filename": "GPL96 annotation",
+ "uri": "https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL96"
+ }
+ ],
+ "output_subdomain": [
+ {
+ "filename": "trained_model",
+ "mediatype": "application/octet-stream"
+ },
+ {
+ "filename": "metrics",
+ "mediatype": "application/json"
+ },
+ {
+ "filename": "roc_curve",
+ "mediatype": "image/png"
+ },
+ {
+ "filename": "precision_recall_curve",
+ "mediatype": "image/png"
+ },
+ {
+ "filename": "confusion_matrix",
+ "mediatype": "image/png"
+ },
+ {
+ "filename": "top_genes",
+ "mediatype": "text/csv"
+ }
+ ]
+ },
+ "error_domain": {
+ "empirical_error": {
+ "comment": "Model performance varies depending on dataset split and feature selection"
+ },
+ "algorithmic_error": {
+ "comment": "Potential overfitting due to high dimensionality of gene expression data"
+ }
+ }
+}
\ No newline at end of file
| |