{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Network based statistic (NBS)\n", "\n", "(Modified from https://github.com/oercompbiomed/CBM101/tree/master/D_Network_analysis by Peder Lillebostad)\n", "\n", "Performing statistical tests on brain networks.\n", "\n", "#### Reading\n", "\n", "- Zalesky et al. _Network-based statistic: Identifying differences in brain networks_. Neuroimage 2010;53(4):1197-1207. [[PDF](./assets/Zalesky_etal_NBS_Neuroimage_2010.pdf)]\n", "- van den Heuvel & Sporns. _Network hubs in the human brain_. Trends in Cognitive Sciences 2013;17(12):683-696. [[PDF](./assets/van_den_Heuvel_Sporns_Network_hubs_TICS_2013.pdf)]\n", "- Rubinov & Sporns. _Complex network measures of brain connectivity: Uses and interpretations_. Neuroimage 2010;52:1059–1069. [[PDF](./assets/Rubinov_Sporns_Complex_network_measures_Neuroimage_2010.pdf)]\n", "- Huber et al. _Layer-dependent functional connectivity methods_. Progress in Neurobiology; Available online 5 June 2020, 101835. [[PDF](./assets/Huber_etal_Layer_dependent_functional_connectivity_methods_Progress_in_Neurobiol_2020.pdf)]\n", "> Data and software availability (**layer fMRI**):<br>\n", "Anonymized MRI data that are presented in this article can be anonymously downloaded from OpenNeuro. Volume maps of data presented in Fig. 2 can be downloaded at http://doi.org/10.18112/openneuro.ds002274.v1.0.2 (go to actualfiles/V1_LAYERING). The raw and processed data of multiple participants of the study shown in Fig. 4, Fig. 6 are available here: www.doi.org/10.18112/openneuro.ds001547.v1.1.0. Data shown in Fig. 5, Fig. 8 are publicly available from previous published studies (Huber et al., 2017). Underlying tables and lists used for Fig. 10 are available on https://layerfmri.com/VASOworldwide. All custom written software (source code) and evaluation scripts are available on Github (https://github.com/layerfMRI/repository). The authors are happy to share the MAGEC-VASO 3D-EPI MR sequence upon request via a SIEMENS C2P agreement. A complete list of scan parameters used in this study is available on Github (https://github.com/layerfMRI/Sequence_Github). The source code of the layer-specific analysis software is available on Github (https://github.com/layerfMRI/LAYNII) with analysis pipelines explained on www.layerfmri.com. All stimulation presentations were implemented in Psychopy and can be downloaded here: https://github.com/layerfMRI/Phychopy_git.\n", "\n", "\n", "### Preparation:\n", "Unfortunately for legal reasons, in order to complete this notebook you must gain access to make an account on https://db.humanconnectome.org/ to access the data. This requires `IBM Aspera Connect`, a plugin to access the data (you will be prompted by a pop-up from the website). \n", "\n", "* Once you have created an account, gain access to the HCP1200 dataset\n", "https://db.humanconnectome.org/data/projects/HCP_1200#HcpOpen\n", "\n", "* Go under **HCP1200 Parcellation+Timeseries+Netmats (PTN)** and download the 10 GB `812 Subjects, recon r227 only, PTN Release` zip file.\n", "\n", "* Under **Quick Downloads** (left hand side) download the Behavioural data (csv file).\n", "\n", "\n", "> - Once downloaded, unzip the folder.\n", "> - untar the move the file `netmats_3T_HCP1200_MSMAll_ICAd100_ts2.tar.gz` in git bash using `tar -xzvf <filename>`\n", "> - this creates a directory `netmats`. Open this and select the file netmats1.txt and move it to the data subdirectory and rename it to `ICA_d100_netmats.txt`\n", "> - rename the behavioural data to `behavioural.csv`.\n", "> - Move all the relevant files plus `subjectsID_recon2.txt` to the data subdirectory.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The concept behind NBS\n", "\n", "Network-based statistic is a non-parametric permutation test used to assess whether the connectomes of two populations are different." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### What is a permutation test?\n", "\n", "What all statistical tests have in common is that they calculate some number (a test statistic) from the data, and compare it to the null distribution. If the test statistic deviates more from this than what we can reasonably expect under the null hypothesis, we say there is an effect.\n", "\n", "The only difference in a permutation test is that we don't need to make assumptions about the null distribution (i.e. non-parametric), but we find it using random assignments of the labels. The basic steps is to compute the test-statistic, then randomly shuffle the labels (e.g. sick versus patient) and recompute the statistic. You repeat this reshuffling/recomputing a large number of times to get the null distribution. If the first (\"real\") test-statistic significantly differs from the expected null distribution, we likely have a population difference.\n", "\n", "[The original paper](https://www.sciencedirect.com/science/article/abs/pii/S1053811910008852)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__The steps of NBS are straight forward:__\n", "\n", "1. For each edge of the network, perform a statistical test (two-sided t-test) for whether it is different between the two populations. This yields a single number for each edge.\n", "\n", "\n", "2. Construct a pseudo-network where the above t-stats are used as the edges of the pseudo-network. The resulting graph can be thought of the \"difference network\" between the two populations.\n", "\n", "\n", "2. Choose a threshold (usually you try multiple) and discard all the weights weaker than this threshold in the pseudo-network. This results in a fragmented network with components of variable size. Identify the largest connected component and write down its size (number of edges).\n", "\n", "\n", "3. Identify the LARGEST connected component and write down its size (number of edges). This is your test-statistic. \n", "\n", "\n", "4. Randomly reassign the participants, and repeat step 1-3 *K* times (usually *K=1000*). Check for significance.\n", "\n", "\n", "This image reviews the steps in a single iteration to compute the test statistic.\n", "<img src=\"assets/nbs.png\" alt=\"nbs steps\" title=\"NBS steps\" />" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Brain Connectivity Toolbox\n", "\n", "#### Matlab (https://sites.google.com/site/bctnet)\n", "\n", "#### Python (https://pypi.org/project/bctpy)\n", "\n", "#### C++ (https://code.google.com/archive/p/bct-cpp/wikis/UsersGuide.wiki)\n", "\n", "bct-cpp is a C++ port of the [Brain Connectivity Toolbox](https://sites.google.com/site/bctnet) (BCT), a set of MATLAB functions and neuroanatomical data sets useful in the analysis of structural or functional brain networks.\n", "\n", "- Naturally, if you know C++, you can use bct-cpp.\n", "- If you know (or prefer) Python, you can use bct-cpp to generate Python bindings. In general, your code will still run faster than the original MATLAB implementation, since the Python bindings use bct-cpp's compiled C++ code under the hood.\n", "- If you know MATLAB (but not C++ or Python), you can't use bct-cpp. Download the MATLAB implementation of BCT instead." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "import sys\n", "import os\n", "import bct\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import networkx as nx\n", "\n", "from bct import nbs\n", "from matplotlib import pyplot as plt\n", "from numpy.linalg import norm\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.preprocessing import MinMaxScaler as scaler\n", "from nilearn.plotting import plot_matrix" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'/Users/arvid/opt/anaconda3/envs/bmed360v2021/bin/python'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sys.executable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NBS is implemented in the Brain Connectivity Toolbox for Python `bctpy`. If you don't have it already installed, uncomment and run the cell below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import bct\n", "from bct import nbs" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#!{sys.executable} -m pip install bctpy" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# packages in environment at /Users/arvid/opt/anaconda3/envs/bmed360v2021:\r\n", "#\r\n", "# Name Version Build Channel\r\n", "bctpy 0.5.2 pypi_0 pypi\r\n" ] } ], "source": [ "#verify installation\n", "!conda list bctpy " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Proof of concept with random simulated data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "all_subjects = np.random.rand(15,15,50) # N=50, nodes=15\n", "group1 = all_subjects[:,:,:25]\n", "group2 = all_subjects[:,:,25:]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.colorbar.Colorbar at 0x7ffc595bd8e0>" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sub0 = group1[:,:,0] \n", "plt.imshow(sub0, cmap=plt.cm.Reds, vmin=0, vmax=1)\n", "plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we drew both groups out of the same population `all_subjects`, there should be no group difference between the two." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def do_nbs(g1, g2, kappa=0.8, plot=True, k=1000):\n", " pval, adj, null = nbs.nbs_bct(g1, g2, kappa, k=k)\n", " if plot:\n", " plt.hist(null, bins=20); plt.show()\n", " return pval, adj, null" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "max component size is 47\n", "estimating null distribution with 1000 permutations\n", "permutation 0 of 1000. p-value so far is 1.000\n", "permutation 100 of 1000. p-value so far is 0.297\n", "permutation 200 of 1000. p-value so far is 0.353\n", "permutation 300 of 1000. p-value so far is 0.346\n", "permutation 400 of 1000. p-value so far is 0.347\n", "permutation 500 of 1000. p-value so far is 0.327\n", "permutation 600 of 1000. p-value so far is 0.326\n", "permutation 700 of 1000. p-value so far is 0.321\n", "permutation 800 of 1000. p-value so far is 0.322\n", "permutation 900 of 1000. p-value so far is 0.333\n", "permutation 999 of 1000. p-value so far is 0.337\n" ] } ], "source": [ "pval, adj, null = do_nbs(group1, group2, plot=False)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.lines.Line2D at 0x7ffc48bb78b0>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(null, bins=20)\n", "plt.axvline(41, c='red', )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Conclusion:** the test statistic is well within the expected range under the null hypothesis, so we have no reason to assume a group difference. This is expected because we drew both groups from the same simulated population. Next we can use a real dataset from the Human Connectome Project (HCP1200) with some behavioural data to see if we have a difference based on certain traits." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing it on a real dataset\n", "We start by loading the behavioural data (metadata from which we can test variables of interest and filter based on exclusion criteria)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "behav = pd.read_csv('data/behavioural.csv')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Subject</th>\n", " <th>Release</th>\n", " <th>Acquisition</th>\n", " <th>Gender</th>\n", " <th>Age</th>\n", " <th>3T_Full_MR_Compl</th>\n", " <th>T1_Count</th>\n", " <th>T2_Count</th>\n", " <th>3T_RS-fMRI_Count</th>\n", " <th>3T_RS-fMRI_PctCompl</th>\n", " <th>...</th>\n", " <th>Noise_Comp</th>\n", " <th>Odor_Unadj</th>\n", " <th>Odor_AgeAdj</th>\n", " <th>PainIntens_RawScore</th>\n", " <th>PainInterf_Tscore</th>\n", " <th>Taste_Unadj</th>\n", " <th>Taste_AgeAdj</th>\n", " <th>Mars_Log_Score</th>\n", " <th>Mars_Errs</th>\n", " <th>Mars_Final</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>100004</td>\n", " <td>S900</td>\n", " <td>Q06</td>\n", " <td>M</td>\n", " <td>22-25</td>\n", " <td>False</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>5.2</td>\n", " <td>101.12</td>\n", " <td>86.45</td>\n", " <td>2.0</td>\n", " <td>45.9</td>\n", " <td>107.17</td>\n", " <td>105.31</td>\n", " <td>1.80</td>\n", " <td>0.0</td>\n", " <td>1.80</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>100206</td>\n", " <td>S900</td>\n", " <td>Q11</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>6.0</td>\n", " <td>108.79</td>\n", " <td>97.19</td>\n", " <td>1.0</td>\n", " <td>49.7</td>\n", " <td>72.63</td>\n", " <td>72.03</td>\n", " <td>1.84</td>\n", " <td>0.0</td>\n", " <td>1.84</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>100307</td>\n", " <td>Q1</td>\n", " <td>Q01</td>\n", " <td>F</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>3.6</td>\n", " <td>101.12</td>\n", " <td>86.45</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>71.69</td>\n", " <td>71.76</td>\n", " <td>1.76</td>\n", " <td>0.0</td>\n", " <td>1.76</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>100408</td>\n", " <td>Q3</td>\n", " <td>Q03</td>\n", " <td>M</td>\n", " <td>31-35</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>2.0</td>\n", " <td>108.79</td>\n", " <td>98.04</td>\n", " <td>2.0</td>\n", " <td>52.6</td>\n", " <td>114.01</td>\n", " <td>113.59</td>\n", " <td>1.76</td>\n", " <td>2.0</td>\n", " <td>1.68</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>100610</td>\n", " <td>S900</td>\n", " <td>Q08</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>2</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>2.0</td>\n", " <td>122.25</td>\n", " <td>110.45</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>84.84</td>\n", " <td>85.31</td>\n", " <td>1.92</td>\n", " <td>1.0</td>\n", " <td>1.88</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 582 columns</p>\n", "</div>" ], "text/plain": [ " Subject Release Acquisition Gender Age 3T_Full_MR_Compl T1_Count \\\n", "0 100004 S900 Q06 M 22-25 False 0 \n", "1 100206 S900 Q11 M 26-30 True 1 \n", "2 100307 Q1 Q01 F 26-30 True 1 \n", "3 100408 Q3 Q03 M 31-35 True 1 \n", "4 100610 S900 Q08 M 26-30 True 2 \n", "\n", " T2_Count 3T_RS-fMRI_Count 3T_RS-fMRI_PctCompl ... Noise_Comp \\\n", "0 0 0 0.0 ... 5.2 \n", "1 1 4 100.0 ... 6.0 \n", "2 1 4 100.0 ... 3.6 \n", "3 1 4 100.0 ... 2.0 \n", "4 1 4 100.0 ... 2.0 \n", "\n", " Odor_Unadj Odor_AgeAdj PainIntens_RawScore PainInterf_Tscore \\\n", "0 101.12 86.45 2.0 45.9 \n", "1 108.79 97.19 1.0 49.7 \n", "2 101.12 86.45 0.0 38.6 \n", "3 108.79 98.04 2.0 52.6 \n", "4 122.25 110.45 0.0 38.6 \n", "\n", " Taste_Unadj Taste_AgeAdj Mars_Log_Score Mars_Errs Mars_Final \n", "0 107.17 105.31 1.80 0.0 1.80 \n", "1 72.63 72.03 1.84 0.0 1.84 \n", "2 71.69 71.76 1.76 0.0 1.76 \n", "3 114.01 113.59 1.76 2.0 1.68 \n", "4 84.84 85.31 1.92 1.0 1.88 \n", "\n", "[5 rows x 582 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "behav.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Subject\n", "Release\n", "Acquisition\n", "Gender\n", "Age\n", "3T_Full_MR_Compl\n", "T1_Count\n", "T2_Count\n", "3T_RS-fMRI_Count\n", "3T_RS-fMRI_PctCompl\n", "3T_Full_Task_fMRI\n", "3T_tMRI_PctCompl\n", "fMRI_WM_PctCompl\n", "fMRI_Gamb_PctCompl\n", "fMRI_Mot_PctCompl\n", "fMRI_Lang_PctCompl\n", "fMRI_Soc_PctCompl\n", "fMRI_Rel_PctCompl\n", "fMRI_Emo_PctCompl\n", "3T_dMRI_Compl\n", "3T_dMRI_PctCompl\n", "dMRI_3T_ReconVrs\n", "fMRI_3T_ReconVrs\n", "7T_Full_MR_Compl\n", "7T_RS-fMRI_Count\n", "7T_RS-fMRI_PctCompl\n", "7T_Full_Task_fMRI\n", "7T_tMRI_PctCompl\n", "fMRI_Movie_Compl\n", "fMRI_Movie_PctCompl\n", "fMRI_Ret_Compl\n", "fMRI_Ret_PctCompl\n", "7T_dMRI_Compl\n", "7T_dMRI_PctCompl\n", "7T_fMRI_Mov_Vrs\n", "MEG_AnyData\n", "MEG_FullProt_Compl\n", "MEG_HeadModel_Avail\n", "MEG_CortRibn_Avail\n", "MEG_Anatomy_Avail\n", "MEG_Anatomy_Compl\n", "MEG_Noise_Avail\n", "MEG_Noise_Compl\n", "MEG_RS_Avail\n", "MEG_RS_Compl\n", "MEG_WM_Avail\n", "MEG_WM_Compl\n", "MEG_StoryMath_Avail\n", "MEG_StoryMath_Compl\n", "MEG_Motor_Avail\n", "MEG_Motor_Compl\n", "Non-TB_Compl\n", "VisProc_Compl\n", "DelDisc_Compl\n", "SCPT_Compl\n", "IWRD_Compl\n", "PMAT_Compl\n", "VSPLOT_Compl\n", "EmoRecog_Compl\n", "NEO-FFI_Compl\n", "ASR-Syn_Compl\n", "ASR-DSM_Compl\n", "Toolbox_Compl\n", "MMSE_Compl\n", "PSQI_Compl\n", "Alert_Compl\n", "ASQ_Compl\n", "FamPsychNeuro_Compl\n", "SSAGA_Compl\n", "SSAGA_Demo_Compl\n", "SSAGA_Mental_Compl\n", "SSAGA_Alc_Compl\n", "SSAGA_Illicit_Compl\n", "SSAGA_Tob_Compl\n", "SSAGA_Mj_Compl\n", "QC_Issue\n", "MRsession_Scanner_3T\n", "MRsession_Scans_3T\n", "MRsession_Label_3T\n", "MRsession_Scanner_7T\n", "MRsession_Scans_7T\n", "MRsession_Label_7T\n", "MEGsession_Scanner\n", "MEGsession_Scans\n", "MEGsession_Label\n", "Alpha_Peak\n", "Beta_Peak\n", "MMSE_Score\n", "PSQI_Score\n", "PSQI_Comp1\n", "PSQI_Comp2\n", "PSQI_Comp3\n", "PSQI_Comp4\n", "PSQI_Comp5\n", "PSQI_Comp6\n", "PSQI_Comp7\n", "PSQI_BedTime\n", "PSQI_Min2Asleep\n", "PSQI_GetUpTime\n", "PSQI_AmtSleep\n", "PSQI_Latency30Min\n", "PSQI_WakeUp\n", "PSQI_Bathroom\n", "PSQI_Breathe\n", "PSQI_Snore\n", "PSQI_TooCold\n", "PSQI_TooHot\n", "PSQI_BadDream\n", "PSQI_Pain\n", "PSQI_Other\n", "PSQI_Quality\n", "PSQI_SleepMeds\n", "PSQI_DayStayAwake\n", "PSQI_DayEnthusiasm\n", "PSQI_BedPtnrRmate\n", "PicSeq_Unadj\n", "PicSeq_AgeAdj\n", "CardSort_Unadj\n", "CardSort_AgeAdj\n", "Flanker_Unadj\n", "Flanker_AgeAdj\n", "PMAT24_A_CR\n", "PMAT24_A_SI\n", "PMAT24_A_RTCR\n", "ReadEng_Unadj\n", "ReadEng_AgeAdj\n", "PicVocab_Unadj\n", "PicVocab_AgeAdj\n", "ProcSpeed_Unadj\n", "ProcSpeed_AgeAdj\n", "DDisc_SV_1mo_200\n", "DDisc_SV_6mo_200\n", "DDisc_SV_1yr_200\n", "DDisc_SV_3yr_200\n", "DDisc_SV_5yr_200\n", "DDisc_SV_10yr_200\n", "DDisc_SV_1mo_40K\n", "DDisc_SV_6mo_40K\n", "DDisc_SV_1yr_40K\n", "DDisc_SV_3yr_40K\n", "DDisc_SV_5yr_40K\n", "DDisc_SV_10yr_40K\n", "DDisc_AUC_200\n", "DDisc_AUC_40K\n", "VSPLOT_TC\n", "VSPLOT_CRTE\n", "VSPLOT_OFF\n", "SCPT_TP\n", "SCPT_TN\n", "SCPT_FP\n", "SCPT_FN\n", "SCPT_TPRT\n", "SCPT_SEN\n", "SCPT_SPEC\n", "SCPT_LRNR\n", "IWRD_TOT\n", "IWRD_RTC\n", "ListSort_Unadj\n", "ListSort_AgeAdj\n", "CogFluidComp_Unadj\n", "CogFluidComp_AgeAdj\n", "CogEarlyComp_Unadj\n", "CogEarlyComp_AgeAdj\n", "CogTotalComp_Unadj\n", "CogTotalComp_AgeAdj\n", "CogCrystalComp_Unadj\n", "CogCrystalComp_AgeAdj\n", "ER40_CR\n", "ER40_CRT\n", "ER40ANG\n", "ER40FEAR\n", "ER40HAP\n", "ER40NOE\n", "ER40SAD\n", "AngAffect_Unadj\n", "AngHostil_Unadj\n", "AngAggr_Unadj\n", "FearAffect_Unadj\n", "FearSomat_Unadj\n", "Sadness_Unadj\n", "LifeSatisf_Unadj\n", "MeanPurp_Unadj\n", "PosAffect_Unadj\n", "Friendship_Unadj\n", "Loneliness_Unadj\n", "PercHostil_Unadj\n", "PercReject_Unadj\n", "EmotSupp_Unadj\n", "InstruSupp_Unadj\n", "PercStress_Unadj\n", "SelfEff_Unadj\n", "FS_IntraCranial_Vol\n", "FS_BrainSeg_Vol\n", "FS_BrainSeg_Vol_No_Vent\n", "FS_BrainSeg_Vol_No_Vent_Surf\n", "FS_LCort_GM_Vol\n", "FS_RCort_GM_Vol\n", "FS_TotCort_GM_Vol\n", "FS_SubCort_GM_Vol\n", "FS_Total_GM_Vol\n", "FS_SupraTentorial_Vol\n", "FS_L_WM_Vol\n", "FS_R_WM_Vol\n", "FS_Tot_WM_Vol\n", "FS_Mask_Vol\n", "FS_BrainSegVol_eTIV_Ratio\n", "FS_MaskVol_eTIV_Ratio\n", "FS_LH_Defect_Holes\n", "FS_RH_Defect_Holes\n", "FS_Total_Defect_Holes\n", "FS_L_LatVent_Vol\n", "FS_L_InfLatVent_Vol\n", "FS_L_Cerebellum_WM_Vol\n", "FS_L_Cerebellum_Cort_Vol\n", "FS_L_ThalamusProper_Vol\n", "FS_L_Caudate_Vol\n", "FS_L_Putamen_Vol\n", "FS_L_Pallidum_Vol\n", "FS_3rdVent_Vol\n", "FS_4thVent_Vol\n", "FS_BrainStem_Vol\n", "FS_L_Hippo_Vol\n", "FS_L_Amygdala_Vol\n", "FS_CSF_Vol\n", "FS_L_AccumbensArea_Vol\n", "FS_L_VentDC_Vol\n", "FS_L_Vessel_Vol\n", "FS_L_ChoroidPlexus_Vol\n", "FS_R_LatVent_Vol\n", "FS_R_InfLatVent_Vol\n", "FS_R_Cerebellum_WM_Vol\n", "FS_R_Cerebellum_Cort_Vol\n", "FS_R_ThalamusProper_Vol\n", "FS_R_Caudate_Vol\n", "FS_R_Putamen_Vol\n", "FS_R_Pallidum_Vol\n", "FS_R_Hippo_Vol\n", "FS_R_Amygdala_Vol\n", "FS_R_AccumbensArea_Vol\n", "FS_R_VentDC_Vol\n", "FS_R_Vessel_Vol\n", "FS_R_ChoroidPlexus_Vol\n", "FS_5thVent_Vol\n", "FS_WM_Hypointens_Vol\n", "FS_L_WM_Hypointens_Vol\n", "FS_R_WM_Hypointens_Vol\n", "FS_L_Non-WM_Hypointens_Vol\n", "FS_R_Non-WM_Hypointens_Vol\n", "FS_OpticChiasm_Vol\n", "FS_CC_Posterior_Vol\n", "FS_CC_MidPosterior_Vol\n", "FS_CC_Central_Vol\n", "FS_CC_MidAnterior_Vol\n", "FS_CC_Anterior_Vol\n", "FS_L_Bankssts_Thck\n", "FS_L_Caudalanteriorcingulate_Thck\n", "FS_L_Caudalmiddlefrontal_Thck\n", "FS_L_Cuneus_Thck\n", "FS_L_Entorhinal_Thck\n", "FS_L_Fusiform_Thck\n", "FS_L_Inferiorparietal_Thck\n", "FS_L_Inferiortemporal_Thck\n", "FS_L_Isthmuscingulate_Thck\n", "FS_L_Lateraloccipital_Thck\n", "FS_L_Lateralorbitofrontal_Thck\n", "FS_L_Lingual_Thck\n", "FS_L_Medialorbitofrontal_Thck\n", "FS_L_Middletemporal_Thck\n", "FS_L_Parahippocampal_Thck\n", "FS_L_Paracentral_Thck\n", "FS_L_Parsopercularis_Thck\n", "FS_L_Parsorbitalis_Thck\n", "FS_L_Parstriangularis_Thck\n", "FS_L_Pericalcarine_Thck\n", "FS_L_Postcentral_Thck\n", "FS_L_Posteriorcingulate_Thck\n", "FS_L_Precentral_Thck\n", "FS_L_Precuneus_Thck\n", "FS_L_Rostralanteriorcingulate_Thck\n", "FS_L_Rostralmiddlefrontal_Thck\n", "FS_L_Superiorfrontal_Thck\n", "FS_L_Superiorparietal_Thck\n", "FS_L_Superiortemporal_Thck\n", "FS_L_Supramarginal_Thck\n", "FS_L_Frontalpole_Thck\n", "FS_L_Temporalpole_Thck\n", "FS_L_Transversetemporal_Thck\n", "FS_L_Insula_Thck\n", "FS_R_Bankssts_Thck\n", "FS_R_Caudalanteriorcingulate_Thck\n", "FS_R_Caudalmiddlefrontal_Thck\n", "FS_R_Cuneus_Thck\n", "FS_R_Entorhinal_Thck\n", "FS_R_Fusiform_Thck\n", "FS_R_Inferiorparietal_Thck\n", "FS_R_Inferiortemporal_Thck\n", "FS_R_Isthmuscingulate_Thck\n", "FS_R_Lateraloccipital_Thck\n", "FS_R_Lateralorbitofrontal_Thck\n", "FS_R_Lingual_Thck\n", "FS_R_Medialorbitofrontal_Thck\n", "FS_R_Middletemporal_Thck\n", "FS_R_Parahippocampal_Thck\n", "FS_R_Paracentral_Thck\n", "FS_R_Parsopercularis_Thck\n", "FS_R_Parsorbitalis_Thck\n", "FS_R_Parstriangularis_Thck\n", "FS_R_Pericalcarine_Thck\n", "FS_R_Postcentral_Thck\n", "FS_R_Posteriorcingulate_Thck\n", "FS_R_Precentral_Thck\n", "FS_R_Precuneus_Thck\n", "FS_R_Rostralanteriorcingulate_Thck\n", "FS_R_Rostralmiddlefrontal_Thck\n", "FS_R_Superiorfrontal_Thck\n", "FS_R_Superiorparietal_Thck\n", "FS_R_Superiortemporal_Thck\n", "FS_R_Supramarginal_Thck\n", "FS_R_Frontalpole_Thck\n", "FS_R_Temporalpole_Thck\n", "FS_R_Transversetemporal_Thck\n", "FS_R_Insula_Thck\n", "FS_L_Bankssts_Area\n", "FS_L_Caudalanteriorcingulate_Area\n", "FS_L_Caudalmiddlefrontal_Area\n", "FS_L_Cuneus_Area\n", "FS_L_Entorhinal_Area\n", "FS_L_Fusiform_Area\n", "FS_L_Inferiorparietal_Area\n", "FS_L_Inferiortemporal_Area\n", "FS_L_Isthmuscingulate_Area\n", "FS_L_Lateraloccipital_Area\n", "FS_L_Lateralorbitofrontal_Area\n", "FS_L_Lingual_Area\n", "FS_L_Medialorbitofrontal_Area\n", "FS_L_Middletemporal_Area\n", "FS_L_Parahippocampal_Area\n", "FS_L_Paracentral_Area\n", "FS_L_Parsopercularis_Area\n", "FS_L_Parsorbitalis_Area\n", "FS_L_Parstriangularis_Area\n", "FS_L_Pericalcarine_Area\n", "FS_L_Postcentral_Area\n", "FS_L_Posteriorcingulate_Area\n", "FS_L_Precentral_Area\n", "FS_L_Precuneus_Area\n", "FS_L_Rostralanteriorcingulate_Area\n", "FS_L_Rostralmiddlefrontal_Area\n", "FS_L_Superiorfrontal_Area\n", "FS_L_Superiorparietal_Area\n", "FS_L_Superiortemporal_Area\n", "FS_L_Supramarginal_Area\n", "FS_L_Frontalpole_Area\n", "FS_L_Temporalpole_Area\n", "FS_L_Transversetemporal_Area\n", "FS_L_Insula_Area\n", "FS_R_Bankssts_Area\n", "FS_R_Caudalanteriorcingulate_Area\n", "FS_R_Caudalmiddlefrontal_Area\n", "FS_R_Cuneus_Area\n", "FS_R_Entorhinal_Area\n", "FS_R_Fusiform_Area\n", "FS_R_Inferiorparietal_Area\n", "FS_R_Inferiortemporal_Area\n", "FS_R_Isthmuscingulate_Area\n", "FS_R_Lateraloccipital_Area\n", "FS_R_Lateralorbitofrontal_Area\n", "FS_R_Lingual_Area\n", "FS_R_Medialorbitofrontal_Area\n", "FS_R_Middletemporal_Area\n", "FS_R_Parahippocampal_Area\n", "FS_R_Paracentral_Area\n", "FS_R_Parsopercularis_Area\n", "FS_R_Parsorbitalis_Area\n", "FS_R_Parstriangularis_Area\n", "FS_R_Pericalcarine_Area\n", "FS_R_Postcentral_Area\n", "FS_R_Posteriorcingulate_Area\n", "FS_R_Precentral_Area\n", "FS_R_Precuneus_Area\n", "FS_R_Rostralanteriorcingulate_Area\n", "FS_R_Rostralmiddlefrontal_Area\n", "FS_R_Superiorfrontal_Area\n", "FS_R_Superiorparietal_Area\n", "FS_R_Superiortemporal_Area\n", "FS_R_Supramarginal_Area\n", "FS_R_Frontalpole_Area\n", "FS_R_Temporalpole_Area\n", "FS_R_Transversetemporal_Area\n", "FS_R_Insula_Area\n", "Emotion_Task_Acc\n", "Emotion_Task_Median_RT\n", "Emotion_Task_Face_Acc\n", "Emotion_Task_Face_Median_RT\n", "Emotion_Task_Shape_Acc\n", "Emotion_Task_Shape_Median_RT\n", "Gambling_Task_Perc_Larger\n", "Gambling_Task_Perc_Smaller\n", "Gambling_Task_Perc_NLR\n", "Gambling_Task_Median_RT_Larger\n", "Gambling_Task_Median_RT_Smaller\n", "Gambling_Task_Reward_Perc_Larger\n", "Gambling_Task_Reward_Median_RT_Larger\n", "Gambling_Task_Reward_Perc_Smaller\n", "Gambling_Task_Reward_Median_RT_Smaller\n", "Gambling_Task_Reward_Perc_NLR\n", "Gambling_Task_Punish_Perc_Larger\n", "Gambling_Task_Punish_Median_RT_Larger\n", "Gambling_Task_Punish_Perc_Smaller\n", "Gambling_Task_Punish_Median_RT_Smaller\n", "Gambling_Task_Punish_Perc_NLR\n", "Language_Task_Acc\n", "Language_Task_Median_RT\n", "Language_Task_Story_Acc\n", "Language_Task_Story_Median_RT\n", "Language_Task_Story_Avg_Difficulty_Level\n", "Language_Task_Math_Acc\n", "Language_Task_Math_Median_RT\n", "Language_Task_Math_Avg_Difficulty_Level\n", "Relational_Task_Acc\n", "Relational_Task_Median_RT\n", "Relational_Task_Match_Acc\n", "Relational_Task_Match_Median_RT\n", "Relational_Task_Rel_Acc\n", "Relational_Task_Rel_Median_RT\n", "Social_Task_Perc_Random\n", "Social_Task_Perc_TOM\n", "Social_Task_Perc_Unsure\n", "Social_Task_Perc_NLR\n", "Social_Task_Median_RT_Random\n", "Social_Task_Median_RT_TOM\n", "Social_Task_Median_RT_Unsure\n", "Social_Task_Random_Perc_Random\n", "Social_Task_Random_Median_RT_Random\n", "Social_Task_Random_Perc_TOM\n", "Social_Task_Random_Median_RT_TOM\n", "Social_Task_Random_Perc_Unsure\n", "Social_Task_Random_Median_RT_Unsure\n", "Social_Task_Random_Perc_NLR\n", "Social_Task_TOM_Perc_Random\n", "Social_Task_TOM_Median_RT_Random\n", "Social_Task_TOM_Perc_TOM\n", "Social_Task_TOM_Median_RT_TOM\n", "Social_Task_TOM_Perc_Unsure\n", "Social_Task_TOM_Median_RT_Unsure\n", "Social_Task_TOM_Perc_NLR\n", "WM_Task_Acc\n", "WM_Task_Median_RT\n", "WM_Task_2bk_Acc\n", "WM_Task_2bk_Median_RT\n", "WM_Task_0bk_Acc\n", "WM_Task_0bk_Median_RT\n", "WM_Task_0bk_Body_Acc\n", "WM_Task_0bk_Body_Acc_Target\n", "WM_Task_0bk_Body_Acc_Nontarget\n", "WM_Task_0bk_Face_Acc\n", "WM_Task_0bk_Face_Acc_Target\n", "WM_Task_0bk_Face_ACC_Nontarget\n", "WM_Task_0bk_Place_Acc\n", "WM_Task_0bk_Place_Acc_Target\n", "WM_Task_0bk_Place_Acc_Nontarget\n", "WM_Task_0bk_Tool_Acc\n", "WM_Task_0bk_Tool_Acc_Target\n", "WM_Task_0bk_Tool_Acc_Nontarget\n", "WM_Task_2bk_Body_Acc\n", "WM_Task_2bk_Body_Acc_Target\n", "WM_Task_2bk_Body_Acc_Nontarget\n", "WM_Task_2bk_Face_Acc\n", "WM_Task_2bk_Face_Acc_Target\n", "WM_Task_2bk_Face_Acc_Nontarget\n", "WM_Task_2bk_Place_Acc\n", "WM_Task_2bk_Place_Acc_Target\n", "WM_Task_2bk_Place_Acc_Nontarget\n", "WM_Task_2bk_Tool_Acc\n", "WM_Task_2bk_Tool_Acc_Target\n", "WM_Task_2bk_Tool_Acc_Nontarget\n", "WM_Task_0bk_Body_Median_RT\n", "WM_Task_0bk_Body_Median_RT_Target\n", "WM_Task_0bk_Body_Median_RT_Nontarget\n", "WM_Task_0bk_Face_Median_RT\n", "WM_Task_0bk_Face_Median_RT_Target\n", "WM_Task_0bk_Face_Median_RT_Nontarget\n", "WM_Task_0bk_Place_Median_RT\n", "WM_Task_0bk_Place_Median_RT_Target\n", "WM_Task_0bk_Place_Median_RT_Nontarget\n", "WM_Task_0bk_Tool_Median_RT\n", "WM_Task_0bk_Tool_Median_RT_Target\n", "WM_Task_0bk_Tool_Median_RT_Nontarget\n", "WM_Task_2bk_Body_Median_RT\n", "WM_Task_2bk_Body_Median_RT_Target\n", "WM_Task_2bk_Body_Median_RT_Nontarget\n", "WM_Task_2bk_Face_Median_RT\n", "WM_Task_2bk_Face_Median_RT_Target\n", "WM_Task_2bk_Face_Median_RT_Nontarget\n", "WM_Task_2bk_Place_Median_RT\n", "WM_Task_2bk_Place_Median_RT_Target\n", "WM_Task_2bk_Place_Median_RT_Nontarget\n", "WM_Task_2bk_Tool_Median_RT\n", "WM_Task_2bk_Tool_Median_RT_Target\n", "WM_Task_2bk_Tool_Median_RT_Nontarget\n", "Endurance_Unadj\n", "Endurance_AgeAdj\n", "GaitSpeed_Comp\n", "Dexterity_Unadj\n", "Dexterity_AgeAdj\n", "Strength_Unadj\n", "Strength_AgeAdj\n", "NEOFAC_A\n", "NEOFAC_O\n", "NEOFAC_C\n", "NEOFAC_N\n", "NEOFAC_E\n", "NEORAW_01\n", "NEORAW_02\n", "NEORAW_03\n", "NEORAW_04\n", "NEORAW_05\n", "NEORAW_06\n", "NEORAW_07\n", "NEORAW_08\n", "NEORAW_09\n", "NEORAW_10\n", "NEORAW_11\n", "NEORAW_12\n", "NEORAW_13\n", "NEORAW_14\n", "NEORAW_15\n", "NEORAW_16\n", "NEORAW_17\n", "NEORAW_18\n", "NEORAW_19\n", "NEORAW_20\n", "NEORAW_21\n", "NEORAW_22\n", "NEORAW_23\n", "NEORAW_24\n", "NEORAW_25\n", "NEORAW_26\n", "NEORAW_27\n", "NEORAW_28\n", "NEORAW_29\n", "NEORAW_30\n", "NEORAW_31\n", "NEORAW_32\n", "NEORAW_33\n", "NEORAW_34\n", "NEORAW_35\n", "NEORAW_36\n", "NEORAW_37\n", "NEORAW_38\n", "NEORAW_39\n", "NEORAW_40\n", "NEORAW_41\n", "NEORAW_42\n", "NEORAW_43\n", "NEORAW_44\n", "NEORAW_45\n", "NEORAW_46\n", "NEORAW_47\n", "NEORAW_48\n", "NEORAW_49\n", "NEORAW_50\n", "NEORAW_51\n", "NEORAW_52\n", "NEORAW_53\n", "NEORAW_54\n", "NEORAW_55\n", "NEORAW_56\n", "NEORAW_57\n", "NEORAW_58\n", "NEORAW_59\n", "NEORAW_60\n", "Noise_Comp\n", "Odor_Unadj\n", "Odor_AgeAdj\n", "PainIntens_RawScore\n", "PainInterf_Tscore\n", "Taste_Unadj\n", "Taste_AgeAdj\n", "Mars_Log_Score\n", "Mars_Errs\n", "Mars_Final\n" ] } ], "source": [ "for col in behav.columns: print(col)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We select only those who has completed all scanning sessions. We will use these indices to select the relevant matrices later." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "ids = pd.read_csv('data/subjectIDs_recon2.txt', names=['Subject'])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(812, 1)\n" ] }, { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Subject</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>100206</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>100610</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>101006</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>101107</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>101309</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Subject\n", "0 100206\n", "1 100610\n", "2 101006\n", "3 101107\n", "4 101309" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(ids.shape)\n", "ids.head()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1206, 582)\n" ] }, { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Subject</th>\n", " <th>Release</th>\n", " <th>Acquisition</th>\n", " <th>Gender</th>\n", " <th>Age</th>\n", " <th>3T_Full_MR_Compl</th>\n", " <th>T1_Count</th>\n", " <th>T2_Count</th>\n", " <th>3T_RS-fMRI_Count</th>\n", " <th>3T_RS-fMRI_PctCompl</th>\n", " <th>...</th>\n", " <th>Noise_Comp</th>\n", " <th>Odor_Unadj</th>\n", " <th>Odor_AgeAdj</th>\n", " <th>PainIntens_RawScore</th>\n", " <th>PainInterf_Tscore</th>\n", " <th>Taste_Unadj</th>\n", " <th>Taste_AgeAdj</th>\n", " <th>Mars_Log_Score</th>\n", " <th>Mars_Errs</th>\n", " <th>Mars_Final</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>100004</td>\n", " <td>S900</td>\n", " <td>Q06</td>\n", " <td>M</td>\n", " <td>22-25</td>\n", " <td>False</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>5.2</td>\n", " <td>101.12</td>\n", " <td>86.45</td>\n", " <td>2.0</td>\n", " <td>45.9</td>\n", " <td>107.17</td>\n", " <td>105.31</td>\n", " <td>1.80</td>\n", " <td>0.0</td>\n", " <td>1.80</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>100206</td>\n", " <td>S900</td>\n", " <td>Q11</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>6.0</td>\n", " <td>108.79</td>\n", " <td>97.19</td>\n", " <td>1.0</td>\n", " <td>49.7</td>\n", " <td>72.63</td>\n", " <td>72.03</td>\n", " <td>1.84</td>\n", " <td>0.0</td>\n", " <td>1.84</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>100307</td>\n", " <td>Q1</td>\n", " <td>Q01</td>\n", " <td>F</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>3.6</td>\n", " <td>101.12</td>\n", " <td>86.45</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>71.69</td>\n", " <td>71.76</td>\n", " <td>1.76</td>\n", " <td>0.0</td>\n", " <td>1.76</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>100408</td>\n", " <td>Q3</td>\n", " <td>Q03</td>\n", " <td>M</td>\n", " <td>31-35</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>2.0</td>\n", " <td>108.79</td>\n", " <td>98.04</td>\n", " <td>2.0</td>\n", " <td>52.6</td>\n", " <td>114.01</td>\n", " <td>113.59</td>\n", " <td>1.76</td>\n", " <td>2.0</td>\n", " <td>1.68</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>100610</td>\n", " <td>S900</td>\n", " <td>Q08</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>2</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>2.0</td>\n", " <td>122.25</td>\n", " <td>110.45</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>84.84</td>\n", " <td>85.31</td>\n", " <td>1.92</td>\n", " <td>1.0</td>\n", " <td>1.88</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 582 columns</p>\n", "</div>" ], "text/plain": [ " Subject Release Acquisition Gender Age 3T_Full_MR_Compl T1_Count \\\n", "0 100004 S900 Q06 M 22-25 False 0 \n", "1 100206 S900 Q11 M 26-30 True 1 \n", "2 100307 Q1 Q01 F 26-30 True 1 \n", "3 100408 Q3 Q03 M 31-35 True 1 \n", "4 100610 S900 Q08 M 26-30 True 2 \n", "\n", " T2_Count 3T_RS-fMRI_Count 3T_RS-fMRI_PctCompl ... Noise_Comp \\\n", "0 0 0 0.0 ... 5.2 \n", "1 1 4 100.0 ... 6.0 \n", "2 1 4 100.0 ... 3.6 \n", "3 1 4 100.0 ... 2.0 \n", "4 1 4 100.0 ... 2.0 \n", "\n", " Odor_Unadj Odor_AgeAdj PainIntens_RawScore PainInterf_Tscore \\\n", "0 101.12 86.45 2.0 45.9 \n", "1 108.79 97.19 1.0 49.7 \n", "2 101.12 86.45 0.0 38.6 \n", "3 108.79 98.04 2.0 52.6 \n", "4 122.25 110.45 0.0 38.6 \n", "\n", " Taste_Unadj Taste_AgeAdj Mars_Log_Score Mars_Errs Mars_Final \n", "0 107.17 105.31 1.80 0.0 1.80 \n", "1 72.63 72.03 1.84 0.0 1.84 \n", "2 71.69 71.76 1.76 0.0 1.76 \n", "3 114.01 113.59 1.76 2.0 1.68 \n", "4 84.84 85.31 1.92 1.0 1.88 \n", "\n", "[5 rows x 582 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(behav.shape)\n", "behav.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 1. Merge the dataframes on the `Subject` column, call the new dataframe `merged`.\n", "This effectively selects only the 812 subjects from which we have data" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# %load solutions/ex2_1.py\n", "merged = pd.merge(ids, behav, on='Subject')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(812, 582)\n" ] }, { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Subject</th>\n", " <th>Release</th>\n", " <th>Acquisition</th>\n", " <th>Gender</th>\n", " <th>Age</th>\n", " <th>3T_Full_MR_Compl</th>\n", " <th>T1_Count</th>\n", " <th>T2_Count</th>\n", " <th>3T_RS-fMRI_Count</th>\n", " <th>3T_RS-fMRI_PctCompl</th>\n", " <th>...</th>\n", " <th>Noise_Comp</th>\n", " <th>Odor_Unadj</th>\n", " <th>Odor_AgeAdj</th>\n", " <th>PainIntens_RawScore</th>\n", " <th>PainInterf_Tscore</th>\n", " <th>Taste_Unadj</th>\n", " <th>Taste_AgeAdj</th>\n", " <th>Mars_Log_Score</th>\n", " <th>Mars_Errs</th>\n", " <th>Mars_Final</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>100206</td>\n", " <td>S900</td>\n", " <td>Q11</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>6.0</td>\n", " <td>108.79</td>\n", " <td>97.19</td>\n", " <td>1.0</td>\n", " <td>49.7</td>\n", " <td>72.63</td>\n", " <td>72.03</td>\n", " <td>1.84</td>\n", " <td>0.0</td>\n", " <td>1.84</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>100610</td>\n", " <td>S900</td>\n", " <td>Q08</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>2</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>2.0</td>\n", " <td>122.25</td>\n", " <td>110.45</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>84.84</td>\n", " <td>85.31</td>\n", " <td>1.92</td>\n", " <td>1.0</td>\n", " <td>1.88</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>101006</td>\n", " <td>S500</td>\n", " <td>Q06</td>\n", " <td>F</td>\n", " <td>31-35</td>\n", " <td>True</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>6.0</td>\n", " <td>122.25</td>\n", " <td>111.41</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>123.80</td>\n", " <td>123.31</td>\n", " <td>1.80</td>\n", " <td>0.0</td>\n", " <td>1.80</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>101107</td>\n", " <td>S500</td>\n", " <td>Q06</td>\n", " <td>M</td>\n", " <td>22-25</td>\n", " <td>True</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>6.8</td>\n", " <td>108.79</td>\n", " <td>97.19</td>\n", " <td>1.0</td>\n", " <td>50.1</td>\n", " <td>134.65</td>\n", " <td>131.38</td>\n", " <td>1.84</td>\n", " <td>0.0</td>\n", " <td>1.84</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>101309</td>\n", " <td>S500</td>\n", " <td>Q06</td>\n", " <td>M</td>\n", " <td>26-30</td>\n", " <td>True</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>100.0</td>\n", " <td>...</td>\n", " <td>5.2</td>\n", " <td>122.25</td>\n", " <td>110.45</td>\n", " <td>0.0</td>\n", " <td>38.6</td>\n", " <td>106.39</td>\n", " <td>104.39</td>\n", " <td>1.80</td>\n", " <td>0.0</td>\n", " <td>1.80</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 582 columns</p>\n", "</div>" ], "text/plain": [ " Subject Release Acquisition Gender Age 3T_Full_MR_Compl T1_Count \\\n", "0 100206 S900 Q11 M 26-30 True 1 \n", "1 100610 S900 Q08 M 26-30 True 2 \n", "2 101006 S500 Q06 F 31-35 True 2 \n", "3 101107 S500 Q06 M 22-25 True 2 \n", "4 101309 S500 Q06 M 26-30 True 1 \n", "\n", " T2_Count 3T_RS-fMRI_Count 3T_RS-fMRI_PctCompl ... Noise_Comp \\\n", "0 1 4 100.0 ... 6.0 \n", "1 1 4 100.0 ... 2.0 \n", "2 2 4 100.0 ... 6.0 \n", "3 2 4 100.0 ... 6.8 \n", "4 1 4 100.0 ... 5.2 \n", "\n", " Odor_Unadj Odor_AgeAdj PainIntens_RawScore PainInterf_Tscore \\\n", "0 108.79 97.19 1.0 49.7 \n", "1 122.25 110.45 0.0 38.6 \n", "2 122.25 111.41 0.0 38.6 \n", "3 108.79 97.19 1.0 50.1 \n", "4 122.25 110.45 0.0 38.6 \n", "\n", " Taste_Unadj Taste_AgeAdj Mars_Log_Score Mars_Errs Mars_Final \n", "0 72.63 72.03 1.84 0.0 1.84 \n", "1 84.84 85.31 1.92 1.0 1.88 \n", "2 123.80 123.31 1.80 0.0 1.80 \n", "3 134.65 131.38 1.84 0.0 1.84 \n", "4 106.39 104.39 1.80 0.0 1.80 \n", "\n", "[5 rows x 582 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(merged.shape)\n", "merged.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# load the network matrices" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "netmats = np.loadtxt('data/ICA_d100_netmats.txt')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(812, 10000)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "netmats.shape # each row is a flattened adjacency matrix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rescale the data to 0 mean and 1 variance" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "scaler = StandardScaler()\n", "netmats = scaler.fit_transform(netmats)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 2. \"Resquare\" the flattened matrices.\n", "i.e. we want 812 100x100 matrices" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100\n" ] } ], "source": [ "# %load solutions/ex2_2.py\n", "d = np.sqrt(netmats.shape[1]).astype(np.int)\n", "print(d)\n", "netmats = netmats.reshape(netmats.shape[0], d,d)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(812, 100, 100)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcsAAAF0CAYAAABMnhLnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOx9d3hVVdb+Prek3/TeQ0IInST03pUmCIIIFsSCY9exjGMZdBwddextLIMFRcSKKI6I9C69J4QkhISQ3m7Kref3x/f99trveT7JMB+aL8x6n8fnWdv35J62zz3c9e53LU3XdcFgMBgMBuOXYeroA2AwGAwG4/86+GXJYDAYDEY74Jclg8FgMBjtgF+WDAaDwWC0A35ZMhgMBoPRDvhlyWAwGAxGO7Ccz8aRERF6SkqyHO87flrGOelRsK1u8aVYw3ey5nbQwOUATvgGytCeXwBUXVyqjBO1RvzMYNy/p6qM/i4oBjiTRnGwL14Ci+6mgaMFuAqvv4yjAq3AtebnwziwS4ryoT7AHThZSduF2IBLjQiQsaYJRM0ZisPjgapucck4Rm8CzlHXAGPfBLqHeVWtwHkVJ1GXqEDgzMqFq2t1Aec9cULGsd1TgTtUgdtarGYZ6160LvWIJO5otQe4rmY6D2tYOHC6y6nEOKeaz9bLOKhbV+BEK14r4aX7by+rASqoWyYN7LX4dwEhFDtx3gi/IOXv6pCz+sJQM9Gzolv9gcursMs4w4T31BxF88HlxYnjKqR745eB529yNNPAME9dGs5xSxPNW1NAMHC6ct3ayiuA80+gY2sz+QGn3n6/Jvw7zS8Axu4meuYtQfjcqA+L8f57bfTdYHfinArxpevtQEpUHjwq44hgvE8BsZG4sVmZ0354bJ6KUuU4DYet3G+zP97vplN0vX1DaP9ljc2ittVh/HZg/Mo4r5dlSkqy2LZxnRzbRv5exrs+uxm2dUXRQ+m24qT3raaXoF5RBJzepb+Mt46/HLgvHnlbxs+a1gFnmngjjJvefkzGnw2+C7gAK03QSV0jgAtzKV9mBT8D97Kjt4wX9U8A7sD48TAesvwNGXvCk4GLv5K4/lNGA/fB/H4y9jEbnoePHpehd/5jQL27h16kd3u2AHdqxSoYpz39moxHvnkEOKfyjfHRbUOAC/WlL4Qvj1UB1zpxoozv/ext4Lq+hNuGx9DLw+lwA7dzYaiMs5fUA/e97VsZx8y+Gjh3eZESFwO361k6/6HrvwVOO7wexl477XPnY+8BN2jDWhpsWwGcKfsS+sziffiZmUNlrO/8GjhLDM4Nkz/9A8UZ3xu40S9sk/GqwNXA2W5aLOOzDvzH6dkrp8m4+9f4d4FF2+nYolKAK7PiPzKj1tG89euP811vpH9YHH36JeB6PUlzNS+oB3Btbq+MM356ETi/Hrkwrln3o4zDR4wCTphobhrvf8s4+m7aXIL/yJ6cQi/vk8143d6M7yvja4elA9fngetx9yH0PeLOGg1c/Yv3yVgz4z6sgbT/oB54vzfe+rKMu0yk79PLP10jGL892k3Dapp2s6ZpuzVN211VXf1bHBODwWAwGP+noJ1PBR9TQKRu6XaZHDdtel7G2ysxhxH1+AIZp04aDNzO/otkXNuGKbpJRz+QsWfq3cA1v0z/Qou46UE8thZMb12zgdJyc3ITgbss6KyMT9sygPvxJKXXApR0oRBCzImh9Jpz61fAmafcDmPNQ/uf8gH+esu551oZLziNv0IyHcUy9oTicZ92UFosRcd/uHzde6qMsw/vAC7FfRbGKyrol75Z+UUohBBhW5RfWlMnATc7kX49vf78rcDNzKK01LgX8JftX1b8EcZV5ZT6O9aEKbPZs7Jk/O7yo8B130bHNiQpDLjjVZSifHP9SeB6JlGK9PmwA8BpvUbC+PE9lJZWU+JCCHFtV/oV0GLFVNtW5RfLJA1T8sKHUmjfO/DXW2QApj4TgmnsZ8HMgm3bxzKuGjgPOMdiyqwkPoO/iOd+ROd8/VDc/6U1G+gc4vDXYpg/pmF71+2R8dt2/KU1Oo3uR7dWlE/y/elXUcL3zwFXe9kDMo4NwESXufYUjLe20RzLjsF7s+IoZS/m9EBJpqSRvmO6bHwVOPvke2Qc5sS0+9oaum+5cUHAQQZKCPHdWfqu6GqYNzGBdF4WE95T9evX99sXgLNeQvd01JuHZXzojVuFvSyf07C/MXiBD4PBYDAY7YBflgwGg8FgtIPzSsP2791d3/UVpXg2aZTCHBKNKcszDko9uAwrHsWfFsow/b77gZq2htK5r89GwTtB0ApAuy+uhrQVbPzF43Z0Gw1jy6alMp50PAu41YsGyNj0My7GqOlNCyUeWp0H3IPjMJ0b4U/nH7rnC+De8Rsh4ylfPAqcXwSlDMOH4gKbtdc8K+Nx+TuBK22iVFPoJ48Dl7O3L4yLHqfr6gmOA867mxbAmPuOBc69+wcZH/07ntPr8+jY3hmM93udKwnGySGUzlQXWwkhxMxXaBHLjBGpwI3uQosocmNwVaVb+XdfbStKAnElm2Wc8wlyux8dBmN13lpeuQe4vw+hBW0ff47p3A3PTpHx8oOY9u4TRytHL7EW43GHp8JYU57HvY2Yog3xo2OraHYCNziOVlLWIyVCrbSIxnRoLXDOPpfK2PiY+u7B+X+i62QZlzS0ATfRRWnCnUH9gMuNpvM4ZcedpGkke+Tfcxtwa255BcZ3JVGq+6hPF+C6e2jFqebGY3PGKouK1v4DOPOwK2SsG1Ymmxppda4jDNPXdW04j6LNJCe4Vr2G206meRNzFBdYmVLpWdQtmPbe0EjzZlTtVhkPuf5+sedYAadhf2PwL0sGg8FgMNoBvywZDAaDwWgH/LJkMBgMBqMdnJdmmZvdT9+24Sc5LrjjOhkHvPAJbBvvS2bzI9dciTt9jQzdvaq2A2cKJi3SE4LG/zorLU8PL9x0zmOtTydLQETlIeA8/mR8NzmwgsvpENIw95XbgZsaRbaCpoBY4JYadKoFfYm3nT0InPtsiYwb+0wBzumh+9Hk9AIXF0SaRlA5amZeHzKzlwamAudjWK4euu7vMjZHGYorpJI9JP2bp4EzLSAt9MeTuHT+871UMalnYghwD3fH89ArCmXsKj4GnGou98lFK8MxCxr4VXTzo3uzBm+FGJlCxxNouBfO+D4w/ugQVU0ZmYL2lAQbXX/9s78C5zPjThlrHrRD6UrhA0fuDPw73SAwmknfs57BY9V9ScPSnDg3hYn0TL0Jqwtt8qNzzIrEKjHRTVTMId8Hr2+mswTGngKyOZ3pgwVDVO25tBHPKSOMtMCAY6iZaj6K9hyOc9EVibqkSamMZC7ZD9yJKFprEOyLvwHiakhPbYrF+11mV2wl6A4RrYLut1EHT2tAO1hZeC8Z7y3H75QRycr882LFrMJW2kdXh6FASzXpsKv9cmT8+zmXioIjB1iz/I3BvywZDAaDwWgH/LJkMBgMBqMdnFdtWF0zQZ1XtTJPmWHduZp67bn0U+D21VBarjVzNHD+x6nmq9mMS+etEUqKtsaQa3Nj6ksoBUa2m7F4dL8wOgeHB4973ymypxgrcVT6UNWWqEO4BHxm90th7CvoeLytzcBVb6C03JemAcAtSqfjCbGhraNFqaPp34DVRjx1lM6MG4BF1tXi4EII0VhCKVNbIBbEXnmElsvfVo+pvr1KlZqfSzAN+85sSkONeQZT5I8k4nVs3EW8vQzrxtYX0H1Na8TasM6xVNHJaJ1IDKbzOFxRBlx0EM2jHAtaTtoM979rhFLI31B0u9VNKeKQrmhratDoc0NdWOS8JZ/SgHU9pgKnGZoMtLqUtGAEpiF1H7qOpr3fAedSauP6DrkMuWaaNyUNeN1iWuk+2gWmQauDcf/hPjTHjBKBWvQ/24G2qgP1JG1kFmL60jp2voydgVh5x78YazNXxVGt2CgfvI97y2luzuiG9Z5roulehTbj94ZXp23tXkMFIeXWGOs0ewzPX5nFkE5XECjIVmJqw7kR4htNn3kc5SJvM6Vz62IUu9d5SGeMCwf+ZclgMBgMRjvglyWDwWAwGO2AX5YMBoPBYLSD87OO9Omp7/x2uRxvcpA9IvGF38G2zQ+/K2OHG/WN7AjK/1vOYGcJdzyVpjpQh8fmVT5myU7sSHDPKOyCkBZCS7KrDMu+1VJVgYZya7Fqh4DdWO5L7cpwqBKXh99QtBTGZROoVFrSDuwCsa8P9WLsEYVL+d2K9rvGYM+Y3JU020An9uU71EzL83vZUKMUZkOD60rqitEah0vpLYIuclEjXregN+6VcdQfXgbOUlMs45Zw1LpOGXSylBDSEHeW4XUcFUalyqosWNIwuoD07FNLlwGX+PQ7dNxNOG+6+JMOeKABtaecJrTgqGjagn0Dg8eT7cNYJtCsNC4uC+kOXF4NWR7GmQqBcwejBcl7kPRsc68RwFX50ra1hnJrdqUPaa6foTF1GWmITbtQTw7qTTpg4Xt4TdPmz4RxU/9ZMt56Gudf/P00p7tMzgEuZBpx9V9/iNxcKnHnzcMSjs3Z02EcXEJ8U8og4Pw1Ov8yQ+9tVeOLMXQ2Ccij620KiwZOV/vw6gaNthXPX+2nejgd7WA9j1FpyLO5aKOL3fc5HWddJXD6FLIjNb1EHZcuff0zcaCskq0jvzH4lyWDwWAwGO2AX5YMBoPBYLSD87KOCJdD6BWUbqj1o2XXowzdQ7xKZR6jPcRSulfGatpVCCFO2On93a/kB+BED6rKkzEpE6jgw9/D+IcrFss4dfdW4Gw+tI89hmobiTZakh75+UrghisdKnpGxwBXm/V7GAcoSRLLsFnApSv2hXI7Wl5Sty+R8ZyhmIbyKKmmCoHlRnqGEWdqxnN6NR/TkndF0lL2E7XYfDleqVKjNq0VQogmF6V3rRXHgXuhhKqUjBXY9SHCkPpqVdLyYy2YTl+4hu7Ng+OwElBzymgZd7kvDbhTSuqttBH3nyEoZbbyCF7vnqOwMblz6RMytg3HxtgV4T1lHOnGVKdL6WyxrwhTdBsLqFF3xrCewB2rxpxh39zZtI8DKANE5FJ6L/Lkj8Cd+oTSeWLhdcA1dB0t4+DUbOB0M93vjMV4bA6DdcXeSvf/0gTDV8cnVJVLrUojhBCaMo++H4EN3a9qo+vY1A8tL1ZDotFTRZYg/zSc05Zaqnbj8UELjCpt7DCk/cdFUdWiIe+XA/eF+y0ZX+l/FXDr7h4KY1MY7TPFDy1v5p7DZRx3CL9T8npQqlv9XhJCiIJSOtYB0UrVMUNTesZvA/5lyWAwGAxGO+CXJYPBYDAY7YBflgwGg8FgtIPzs47066tv/4m0QdfaD2Q8u3YUbLtqIuXVvfXVwHkzKd+vapRCCNE1iPSsv2yrAO6RXNLppn2KWte3M7DE1bhPqKzVE5f3Am5YIJVRU5fjCyFEmB8d95fHsaTVlZFUquqJo6gb/H4Ydmywu+g8olvPAFcfRPqGsSOIWRnf/x2WDXsxZLeMXeWngbMmpMp4Wcg44K6NRgvK6UDSohJPbwGuMpXsCtFOXMq+vIy0qNRQtLzkHvpYxm1jbwLObiiNFmOi8n+W+lLg3EqnCdWOIoQQp20ZMvbgR4qEQJpH3xeiZtgnhuaNsSNFSBuW27vlJ9LQXg/aBlzbmIUybnCgdcPhpucooxY7Yly1gzTqj/vg/pz5+2Bcvp1K43135VN4bL1Iw31gHZb0u3FQioyzTLgPTxCVkbOWHQZOM9M83nPnw8Blv/kCjL3K51z3Le7/wz70jHszUAeG+9iKmmFJFGmo2rO3AXd4wbMw3nWantsHRqQA1/bOIzIOnn8PcMVeKoWYuPUfwHkvuUXGVg9q3eY6mptPdcMuKw9WYim+0610HTUNn+lkJ10r56bPgbNOWCDjIzffAFzPt8gO1ehL32/jR40Q+/ftZevIbwz+ZclgMBgMRjvglyWDwWAwGO3gvNKw3QIC9b93o5Rm7pYNMq5pxaoxCYJSlmY7poX2mCiF0q8Em8E+2UwVZR4eivaMCielAePaMH3nCcXl4mcfp5RO/AOYztItVO2m2OELXEqgcj12fAmcGDqHPr8V84BWQzq1sI5SOkH3zQfum9+9IuN7hmL61rrhfRl7xywALm8eWUm6LcMl6Geb6fqnOPDanLTitSnoT0vZBx7B5tshSscMtSqNEEK0badOF34DJwBXFkq2g3B/TFGvysd0dqFS0WZkGlbpWbaHjn1AKnLzelAz5h+KsSPKoARKtUVXG7o3OKjh7iYfTMmP9EeJ4JCgyjzdfsbKSw94x8r4ymy8puVNZMGZtP9t4KxXUPUVfd0HwJmGz4Zxi5U625gN6bzjNXQe2RY8bhUNQYZnQZkb3euxYtHZWKq2E9OMqf0tDuwCMuT0P39xn6bMgTLWrdgRRCidVZ47gFaZHjF0vlMjsTuP1x+bbwsTfY61AiUKtfqNFoddhrzFNB+W+WGK+KoMkhP21eO87ZdPz7+571jgNAceq2qpc/fCZ0NTqv94v38TuPqxlAZWpRshhEix0v3Wf14l42G3Pyn25BdzGvY3Bv+yZDAYDAajHfDLksFgMBiMdsAvSwaDwWAw2sF5aZbR6T31Oc9SZ4KH80ibibj5Idi2zkp6g1HPy68hPS8n2NBh3Ev6ylktFKgYHypVpnbOEEKIL+yJMHYo3oJ5odgdXZio/JYrGsvmbVNaFmwoRK3t0XBln0lYpm9FOeo0s7JoqXehoevG8b5knZm+A7sweH1Jw6k3aE97y0mnG5WE5e6OXU1ls3q+i7pYkSsAxinBpP3unzYJuJxl78u45Zt3gHsiaq6MbxmCS/fnv7FDxm0teL4rqlDDc9qJN/ugThSWSed8ejPe45Y3P5Nxt0i0rliUOfbAt1iKb4Ciiy7qYrB8BOM1PlxJOtGBCrSgLMikfZpLDN1Kwkjr9Aag1ub68X0Z54+4HTiv4fkLUEqZpRf/BJy77KSMLaPmAmdqIXuQyYl62j2H6P4vnpABXPBpsiOpNg4hhEjQ0XIkzFTGrcwbCFSEPz1TLQbtTS3jVv6H64FLXbRIxsZOIrbakzCuDyVbUUgLlqZ79QTd/1EGrVvtwqN58f43+5DWHXQM1088WkmdjHrGBQN3ZTJ+p+lWmhu7avCe9o+ja1VQh89GqGJViyvDriveeOpes7OBrv1N08eL44f2s2b5G4N/WTIYDAaD0Q74ZclgMBgMRjs4rzRsTkaSvuU5agBsGU7dNOx+kbCtrWCjjD01mAa9s6afjJ8ydA+Zv5Sqnxir8pjayNbgNqRPzSVYNcV5fA9xxqaug+m4lx3BVGu+0tR53lLspNLz6T/L2FuP1W2WurFjw7BkSiGnHFgBnCWOOmYcCMVGuVk7KGVpGb8AOJODjq3VhunDwEpqou08ugs48xCsPlL2F7Iy+D/6FnARLVRtxHt8B3Blq8g6kHT/YuA0D6XI60JSgQvajKlmSy4trd/ThimzHBul6M3VRcA5k+laNTgw1RfZUCBjj6GhsqmYutzUp48ELtiDFpTm5VS1pnYWVrTxtdC/LWPysetHWQY1Bo/b/QlwlrhUGbvTMdX4wRFMdfaKpjT8ICvOsd1uslK1zZoMXLdZ1MTZKIm0+dNzdLIOu8x0D6M04DcFmHYe3wXTySGllLJ9oDd2Nnm47oiMA91YpcftSynMJkM1pwgH2ZPsgXjf6v90M4zjH6OG4yaDHc0ZRrKAdf93wHn7kdSgeTANamqk/eeZsKF3wLPU0H73gueAmxGH3Wuca0j6sETjs2mOorGeiN8TWgnZWiZtxy47P0ygTKs3lI5t8MTpYs+BQ5yG/Y1xfi26GAwGg8G4QEjS/PU24W1/QwOqhfMHXdcv/RUO6RfBL0sGg8FgdAjahFfMEnHtb2jAW+JUZPtbXVjwy5LBYDAYHQJNCGH+dxLK/7p6eMFwfl1HcnL0rZtJi7RUF8pYrz3zP/2JEEIITwWW0SrqR8ve0wvX4AGlUDkyYwk7VVOZaUFbgSe5H4yr3WSPCN+2FDhrbyr3prWiTrPHn5Zr9wtCfaNaI7tGlKEjx1Y7Li0fFE/Lxc37UEMRGf0pNuG/V07rpFsYy8atOEL7vKoXlgIMrCK7hDsUbTSq1imEEI4f6Xr4544Bzh1PmopRF2qwJRFnKMV23TKyUlw3FG0l06Oxm4M3j5bI6wNmAFf7PGnikYtQe6swk74ZbUbtrc1MS/e3luL5xgTSsvvegfh3BU60oIT60jWvaMYSjl1C6XN8d3wKnLnHMBnrFh/gPDu/lbFrLHaWUEvYCSFEXjXZPuYFlgAnfBULkAPLxh0LpufGWNKuKIKejQSbFThrFWm9rii0lRjLr4Ucpo5DZZmXAKdaR3w0Q1pNKXfX8v5ioALSqTRdzQC0w0S5a2Gs2mO8p7Hc3Qsusr1c3gOfDbWEZWmLoSOIwH2oaPCjcn/GzjnJNQdh7ImkdQifleC2kzJo3tqasBRlgYl02rQQw70pIa29Irovfd7YkeLARdJ1JEbz1a80xZ/3373qLd6j63r/9re8cOBflgwGg8HoMPxbvyw7APyyZDAYDEaH4L/SsJ3jbckvSwaDwWB0DLSL9Jelp6pMNL39mBzfGT5Pxh/2wW3Bz5aOXJqVNIwfrlgM3HP3vkafWYmttRxz/yJjZ8Ee4OriB8A40qKUxsvAg8vzobZYDhNqtn1tVA7r7HN/BO7gPDqeJifqUrPi0a+38PNiGb/m2AfcI+Wk07wwGtsghXy8mI5zOvr8Mm6idk6L/7wEuOhg0lPvdnwF3PJoLGmXtWyTjHOGTQVO9UuKSvQ5+q0nnc7VjDrkimtpXhi9bA/+hF7WRYOnyDjUoAXNFFS276p81AxvjzSUmFNQG0H3ODUUSw8mBJEW9O6hBuBuSq6HsXaGyqh5Pv0YuOVTHpHxggGXAefeRN5K89CZwB3oTc9Jbv4G4KKTh8M4SCm/5jp4DLhlYRNlPGP3cuB6TCCt1VVVBpwzjPQubSv+3Yle5DlON2jrzd1QlwyPpwc5bv/nwAlDGTkVrUPp/H8eey9wcTa6V5k+hvUTePuhjOD6qFHA3edPer7uxvUTrRpp6J8fQc3w/jR6bpdWo697Xhtdj9qu6FLwROGXmrnulIzHpKKX0tZI2nO5H64naGqmZ2VbKerp2Qmkw5ZfRfPNVVQgLhZ0pl+WXMGHwWAwGIx2wGlYBoPBYHQI/m3rSAfgvKwjKd376A8u+UaO42y+Mp7QBTuEBJyhlNl2M3YuTw6hv6tvw/RNTSulAYeGYKrP3EgpMncxpqi8rdhpwUdJvbrjsUPICTv9oA42dL1Q7RraqpfwMzNpCb63Dm0Vu9OmwHiAjSwB757AfFL/xQtl3OdrTH3pa/8hY8sATP2cMlHZvuhAXGYeUE1WGr0aU02nkkbAOL+Wjm187WbgzBGKQdiKqWZd6TrRuuFL4A6OvFPG6rkLIcSe2fNhHNWb9hGShobk5mufkLHvW38ATrv1Wfo7X0yKmByUTjvjxjSs2tnhrB3vRZgf3n/b9y/K+LOu1wKXE0+2niwLlqlzBZFd4XgNztvEYLpuwT543CWNWDbtUCWdx7REPDbNRdfVtRGtK0VfU2o982UsYVhhomfT0ABIRCipz+d3YCeP+3Kx3N0nBbT/3o8vBC7ifUr9nzDYYRKD6X4EGc4/voEsIEbLk7kJ7VmqBUXomL53HdoiY0v2OOC8/nTfLA2YonXsoc4uP2bhPB2TStdt4otbgNs0HmUXcxTZH3QLzr9yG6Vsjde/ppW+/yINVrHvTpB8Ma8XPfsjhg8Te/deHNaReJOffrNvYvsbGvB420m2jjAYDAbjPwOa6DxaIL8sGQwGg9Fh6CwLfPhlyWAwGIwOgXaxWkdMmhABiu3jsiBqveXatAq29fQm60i/sADgTtbTcmmbQcPIMtFSfq8FW9aopeHUNltCCGFVSu8JgfYQL8oLomsQ6R0nUeoU1y2lElPf3nw3cFptsYw9JVhub2AAWhK0Ziq5dkN3LOf01V66bgH1aLNIs9P5m1rxM+9bWy3jFTPwM12Ht8nY2msocMaSXqkOOvbGAz8Dd2oalZiL/RCtK1un0bgsA1s0TQ0iXe7h7ah9TW3Gczz5Pe0/51bULGtvoPvaXIE3J+x60htDfFFPLWwjHfxIFZa7iwygbUeIk8B5fLA0n3f6PTJe/ekR4Oal0fzT3KiZ5dfSsv+ekahZVf7lNhn/U7E/CSHE7tNoXbH5KftIsAHn3kq6oOPSO4DrqmjNrX7Y9mxnEe0jMyIQuNgGem4qG1EzK3b4wvgqpRqe+a84N6rN9Bxnf/8McAWKBcr61K3A6fc/KmPjfNeaURduSCSJKlCgzeK2Rmp9docXW/Kl+9B5eA99BpxlNNlaJrtwvu2ooHUBEwckAee1b4ex6EI2D82Luni0lXTpSheuNcgMo7lpqSkG7rpUKsWYp3xPODwdUBj1VwT/smQwGAwG4xzoTKth+WXJYDAYjA5BZypKcF7Wkb7ZOfqaDWQ1aFVSUdcvxSo1ay+jFEJDFFa0qFPsIvvOYspsaOIvd1VPsVGaaNkRrApzXTB2NjkYSPtUOyIIIYTdRftPD8R91HspLRKqY2cHFc1mTGc1OtEC46ekpVbmoc1kYSJZCw56sUOC2hXj5UOYP74+m1JtNg9ylnqyi5TYMoGLDsDzf2sPLZ+/oyve/1YbdXoJrDgMnCeIqg2d9GKqL+F76iTvO9OQvj6yHsZ1PamiUETxVuC88Vm03QfPAxfyuydlXOPEByzKS91jrv4GrTMf96K0d0HSaOBSdr4HY59U6jqj+eE9bkvKkbF5G1bCOZZ1uYx7WaqBG7uU5ub6OXjdjNWOXPn0HJn6TwbOGUAVZnybMNV9R+xYGb92GM+pOCpXxl0ajwJX/yOlduvz8RlKuhqtFDvCKNXZZJjvY05QetPaBZ93PZJS3U4bpt3V2Wd/9QHgwm59AsbmWqqEc8yaClz1FKpu1G3dT8AFK51kfA7+Ez8zmmwLl6zG1O4LW6hiV49nMbXsiMQOLf6KVc5rxU42jh2rZWwKQoudZ8wCGdc+dRtwoQ+9LuOAumIZD5o8W+w5eLhzvGHaQbLZT5fNsq0AACAASURBVH8gKKX9DQ24ozGfrSMMBoPB+M/Afy3w6Rzv/c5icWEwGAwGo8PAvywZDAaD0WG4KBf4WHS3CHPRcu5vCkm3WL0Iu36cbqHl0/tO4ZLwiUppvEQbLrNXy4+FW1EX2VZGGmJ+JWqde2K6w1jtHuKy4hJ41R6y/Ppc4EJNpCGZjuPy8FMpo2V8qBLPaWoUlvg62EKlwrqGo/bVYCPtL9qNmmGtiTRTfyt+ZpBi26l042f6R5DWt6UArSJzY3BJfLg/WXmKTKihpJfStfmgEZfL5z54s4y7v/534LTJ18vYa8KEhbcfdj355jBpevN6YSm+0iZaZp+28CHg3Gup00r9Fz8CF30P6T1PTRmGx1ZF51/biuXlMvpjZ42Sv5FO1lSK17H7XVTirWbXbuBST5Idxtsdu9zYFE3GfWIvcMKNx3Ps7S9kHH8YrSv7p1EXnJH5q4F7dTfpW54K1B5TbZEydp3BTjImK30F1BVgebmw3VjirXgAndfMEx8B51W6juy19QUup5r0PGdgLHBBdtLPfRbeD5xwoYZY9+X7Ms6ah9aZjYqG6vTiM+VfeVzGy33xe2q2jdYs3DEGbR0ZcaQDG7VlayvaWmpWUfnB0tl/Aq57GD3vPl16AedRupVEDcoBTq3ut2PuTTJuLiwWFwt4NSyDwWAwGO1AE1qn0Sz5ZclgMBiMDkNn+WV5XtaR3O4Z+vb3yCLwmZLSuKIJu1esDh8t464RWMGn6wlKIZ3+fCVwO6//m4xn1WCq7SnPENrfe9hENusNbIZ89gVKWUX0xq4nYhpZGyxOtGCYTlDq1ZuFKcI6D6VI6wzdUtyG1E90IP07JHDV34BrnnafjMOcaIEx11IKzWvDxtCijNJJIh7tISU+ZPlILsX02eYgXGEd9uDVMvZ7AyuadPFVOlv4BgPn/ZSW0ntmY4p05XFKrV7VDSvP7KsxNNiOoaX1xmIkFp3S98fq8Bqr1Z58LZjqDf+BOsSUjLkTuMwW6mzx5tlI4IYlY2eNQGUfUQbLza1fUFr01Xq0jgQkkiUib9CNwPVppr+riMYUZYgvVs1ZX0zp/UvCcW5ubaaU+cCDS4EzK5VozM2YPi71J3vEYUNVpPFpVCVr82mUNkZFoq0KOn2c2AnUkcQx4pegXtP0Fqyg5DxE1iFLIjZU9nTFSlTmPJrXtevX4LY3UGWkSN3wTDdVyNgRhc+NtY2ud4kbv6fUzj6bjFJS7SYYa13pGXtwB17jJyaQzcRq+L6p8NCzkFBpSNH7EueO6CLjoaPHiT379neSV8y50cXqrz8Zmnbefze/+thvbh3h1bAMBoPB6BD8f83yfP9r93M1LUnTtPWaph3TNO2Ipml3/W+PldOwDAaDwegw/EqapVsI8Xtd1/dqmmYTQuzRNO1HXdePtveHvwR+WTIYDAajQ/BrrYbVdb1cCFH+33GTpmnHhBAJQoh/+2V5XpplYrfe+l1vU3msu7uShlHlj10wopy0DL3SB7sA5FWTLjY8FO0RpjbSTdwRqcCZj1AZK1NkAnAVod1gvLectIFLHFiKT4uiz/UEoYZ12kk2kyAf1JPCzLR8XGtDfafKgmXM1PJrRe4g4CI/+7OMbfN+D1ybL2lI9QZddOl+Wmb/QPBx4Ox7SWsNmIPl5ozd4dXr2rLsWeDUv9VceG/WVJPNJzUMS3oFK9fqlhUHgfuyax6M7UeojF5AajJwBZ/8IOOE4Vg27cAlVA4tOQTtQEk+ZDO44tMC4Cb1IT3xhiw87gNNaBfws9B5/HACyxRelkXz2PbOg8BFLiIN19yMOrQnkMrU5buxk05aCHZPMXtpjrlNyPkV7ZCxFmgomxZA2qvJMDdfLKJzTgnF85+WSfPW5EA9TfdBDc+jqDaHKnFu9FN0aGGwWajdgs4u/h1QibfR/Pf647UxOXEfnkA6VnMplmJ8ppJsTjN7oj0l3UrnpbU1AnfKSt9bKTqWKbxxLdlDXpqO1jR/E35vNigOoPmG0p9vXUk6dUprMXCFfmQr6lKBHYBEKJ3H1/V0fx+cO0mcPHLgotAsM6z++guR6e1vaMD0s0f+Zc1S07RUIcQmIUQvXdcbz731L4N/WTIYDAajsyFS0zTV7Py2rutvGzfSNC1ICPGFEOLu/82LUgh+WTIYDAajg6BpQpj+Pc2yur1flpqmWcV/vSg/1nX9y39nJ/B555OGzc7J0TdupqXe5tWvyPhW53jY9sXLKG0RdAirjbypU6WKub2w68brO8g6sbA/ploTXLQEXJSfwIOLxzTs5+WUwppZuw44TxOlV9rG3gTcRmWJeFYkVslJN1MTXd0P7RErC7FDycwwWr7vsWEaWvMoORsT/nvF5UepqFpDGjZi4zsyrjt4DDjL3S/SdoZOHp5ktCvUaZQWVlPLQgihK8ej7fkWuN1J1NkhNxZTdNpOqjyjD8LG3ObaUzAu86P7WtOCjXK7baQ55TMJ741uohTpI1swRfpkyCEZe5uwobJVsSToXrymjVtxbuwcT7ae3DhMn+fXUFrQaF25T0k9/zMNq/sce586XXS/cRpwmglT/WeHUFNtj8GOlGCjlLGxwbDmpvvYYsZUa2ALSSKmcmxargXRfCsJ6YH782I6WT9Mdomm/niPwyuV6++H6VTnHrJ5+PZGO0hBID23ybs+BE4Yrk3FYLI8JdWj9OT1pzSlJxS/N4puu0rGsYMxtR88eqqMXUVYMUmMoL8rfwzTxxFPvAPjwEo6nrZdaGuxjrtG/BLq3icrnmp/EUKI0E3/kPGpQVQha/Ylo8ThA/suijRsV58A/aWYjPY3NGBq6aFzpmE1TdOEEB8IIWp1Xb/7l7Y7H/AvSwaDwWB0DDQhTL9OVYJhQohrhBCHNE3b/9//74+6rq8+x9+cE/yyZDAYDEaHQBNCaOYLb/fXdX3Lf3/8BQO/LBkMBoPRMdCE0DpJvbvzelm25ueLA+NJmxzwE+XmH2xEDWXpQepOP7P7pcDdsPp5GddmoXXi98PISmB3YbmtFeVkXXC4UXvoYkcNbVY8LRf/OWQKcAMDSJesNHR8V7uHHPfgZ1b50tL1rYVY/mp6F9xWP75Hxodvuwe4p2aQNvG36agT7S8kvW1KHGpWa+95X8YTtmGZuhOtdP0P+vcDLq4NbRZpm0gXXJl1LXBj0siSsC1iNHCT63fJeJcYCFz/bOoskl+HOuiy/XiNzaZSGUcH47FlzSR7yDcnsbPD9GgqI/bn8bjc3Lt2g4wdFeXAtRQVyjhk+gLg/JMSYVzW2CbjtGdQM815nTpLfJ2Het7qWwfR4Ae0DvT5+2sy1ovQVqP5YteduhtJCwz/xxfAVbV4lBift0XvkE665JbBwGUepOdU6zMaOK9iD0kq3yWQxPumxaXKOMiMz6bHX7GynEFd1BJFGqLugzpwmkbavr0Uu6UEXv0HGCfW0n2s//5z4IKHjJaxMwS75SRfSmUy/XOxLJ8ngJ7p5gJcBxHSo1jGhT+i/SnpnmIYCyfNG79+I4FyH94gY1cplvtzN9P3TWwtaqZtLWQBSjtMc8HX0PGkU0PTfq007AUH/7JkMBgMRodBM3WOqqvtviw1TbtZCHGzEELE+Pi0szWDwWAwGP8atF9vgc8FR7svy/82er4thBBZQUH/us+EwWAwGIx2cFFqloFdUsSQ5W/IsUcpaxXhj786F/SlUk2+ArvBn5pAGl6A4TqpOmVhXRtws7KobNipRvzM5GAsW7bw82IZL5mEp6k1kxbgF4I+z4Mt5NdKDMa/C3OTTqn6KIVAjVIIbO/V/UbsTj8xlvYZvPwJ4MZdT2OtATWcvvvIP2mqPABceAzpQpnOEuDcNiwpJ6beLsMZLah/aHlUUnBkd/TOHqwjLSw372v8uzLypEb2nAzc3cNSYRyqTJUlB9AvKVZRq61Rk7DVlu6mdI3mRF+rKYy8rEF9R+GxKZ5Et6G8odH3N1wpG9f1cfS9Fdppzhl9lo/9SCX2/jrqKuBcm0nrNPmjd9dThhpWxsfUsu6Or9FL+M4Emv9PbsP7ltOTzj/LD8vEmbOolZ7X4E+2Z5KGZ4tKAa7Vhn7FAEUzPFiDz19/p+JBjkLNsOF7amcWZPBOVnWbIOPI7r2BMzVWwLg+jPx4oQbtebuLnqmBLizbpyVRi761U28DbtQb1IzC7IffYWpZSN3QS85YilNtveUuxXKLQtHzffywtVeYMh88NvwuMgXT/a7KmS1jV8CrgvHbgzVLBoPBYHQMNO1XsY78GuCXJYPBYDA6BJq4iDRL3NpHeMIppTflA1rq/F2PQtjUmkwdyb2t2Dk8qZA6BliGYdksNb1Wed8dwBW+sULGXQ6idcIUhF0YXlM6jbx7Ai0AN3SnTgMr8zAN2DWc0iJq6TUhhChS0sepNkwnGe0haurVPBbtGY17yXbwWrcbgXuoRTmeMuwsEtlEXSe83dC6oZZX9J7BNJAWhvYIsYtSfS+bMQ1Z2Ugd2Z/McgCnph6f14YBd2/DT+KX8OxGnBsLB9IcirOhdcR32AwZf1eEZeumJ9N01a1ouTAFUvnB5nC0lejLKZ26fwzep+wYtCCZFUuGpwAtIBuDgmV8rX0jcENGzpRxnQkf/pDxC5WDQcuFWcN/Vbd6iJ/RFzv53LWR0pJvDsTP8frS+f9wFigxcieVxXwmdh5wj2aRPWTJKfw6mNvTsERBSWf3OYbWjbx+c2Wc2Yqp3tpZD8s4IAifm9hTJF80HDsEnMidCcOwairxqLdgTeyB8ZRed3+PpegKR9H3SP+fUSKocNJ1LEjC9HXAdCpNOObzF4Bz70RbT0Vfmre1/pnAda9T5n9IBHCmxCwZn37mEeBCMymdHeVHc8raOX6I/WvQhNBMF+PLksFgMBiMCwZNmDgNy2AwGAzGOXCxVvBhMBgMBuNCQetEL8vzatFlCUnQQ4bdKsc3/EgtZJI3omZ1s5e6fldvWA9c0fwnZZwehtqT+ov8jZ2lwPW+mjSMy9ainuiNQZ3q3s1k87j2bdSpCveSqDNrP7Y5a7CRTmBYLS4sSxfL2Db3LuCuWlkG44lK67HGNixNdmcO6RaN76J1xHbLUzQwdJxfW0KaysT6LcDtfYxKquWsWA5cmRftCjtK6doMXoolxeImUKkui7LkXgghniiNk/GVH98H3L2DHpLxgxNRs+nxpeEck+nalKzBEmtp8y+XsacGxbef+6P2rCImkJb9n6xFW8mXB87I+Jkp2MrtUAVuW1xP19jlRV3wul503040IJdlJh3aHRwHnM9ZsoA0R2N5w5pWnBvxZjoeS8MZ4NwliobdeyxwTWal7Votlpv760m6/w+Eop6op1D7Ns92gx1o3PUwVjXLxRvx2bxneKqMrUbNtorWNjiPYfsyn55kRyrwx2c4KgD/Lb//LK19SA5BrfufBXT9E4LxO2VEMmnNNh3taD+WkQVm1M9vAje5crSMX5qLJSRDfFF7VdunNTpxbrS6adzkQC5AESDD/fEzK5vperuUdm1XXjpaHLlIWnR1D7bp7w86Z1vK/xGD1244Z4uuXwP8y5LBYDAYHQNN6zS/LPllyWAwGIwOgSaEMF2Mq2EDQ2yi/5TRcrxgCVWC8X8OK2M0/uktGX9pGgDc/Cjq5F5ux0ogCUGUzrhnKFaeCdxBndT3W7oA19uE9pQXRkfJ2Dv5O+AC6im9edCNaZFoN6U7YjxYpUfMww4pKozdQ9TKPEZ7iJp6Db7xMeA0O1lHjGm49HDahzflEuByVgyXca3JBtz+M7jMvryJLCFR2Zhq1T1kJdgd2Bc4X0u1jDPvws7xCfnqPUXLSUYT3huL0r0i4+m5wGkVtMy+9SSmEwfHUzrx0KypwHV7hewh4QlYCaZvLKWFQ+2YLh+UgNVmhtdQent9GNpqTIfWyti/yzjkaigt+Y+T+PDfLMhG5BeI1oEQ/2gY5zdRCrHLdpy3akUXuxm7d9iUJ1lvQDvU7wdT5RuvKww41cryZugkoK5f+iSMF0dTZaLn4rDyUImDrmOAwdsQEEP2CPvKZcB5DlOKOn3yDOSSMfU5wq6kcLFIj1iUSinc+iC8pkHK8dS+iM/b2J40N3zGXIEf+inN9zbD90Rvf5zTYh/ZuiLj0oAqsdE+jAs/E33ou+hwHZLdImgu+BXR5/u5UTro1NB+nX6WvwY6x1EyGAwGg9GB4DQsg8FgMDoMF2cFHwaDwWAwLhQu1gU+qREB4oP5pCNENlBZtaqIENjWqfguFqWjB6NeWQadun0JcN5LbpGxef37yGWTTpS19W3gTo++FcYhHy+WcWAX1BDS7FRGzXoJ6om1JrIgmKuw60dzYg5xhvu7vxBLs6ndQ6CEnRDCO5zsIapGKYQQuh/pjR4nlvALVLQXh44ZdF/l72zfvQZc7ljUkyceeZ+Oe9jtuG00nX9IE963+waSDqwf2A9cSQ3pKLNbdwB3+q6XYVyozA2PwbrUNYXm0VfOLOCuObpOxtlPPwicK4q01/BC7OxQlUodYLwF2B2mtheWlIuooI4tIbGG7iVWujYJOz8Ebs9rZEG68cuVwJU+QlzYn7Hc2kGDdaW8iawNUSXYdSNiAZWq8/vqWeA2D6F7PCJzBHAmpbOM5kbrhFomb2q3KOCCAobD+G8m0nu9XUYCF6KR7SG8DK+xO5E05PDLUKPW7WRj2m3LBi7XXonbJlJpQrWTjBBCrDijzNv6JuDGpNKc+kPKQuCu7k5a65imI8CtuZ1sLT8VNQBnjwyHcWg0lZS0G+xBCcrzrwfiegJTC33uixtwjcSSS0l79VQo30VutJR1ZmidSLPkX5YMBoPB6DBwGpbBYDAYjHOhExVSP68KPv1ycvR1G2lpfaBXqdK/73vYtrj7ZTJOtGFj5q/zqNrGnHhMKdy5iWwOfzNUW2lRlm8He3DteIsV0xt51ZRuyvXD9IaplVIfL5Rg+tjfSumkRaloayn3pZSdZri/MTraMzSHcnyG7iGe7pTe8zl7DDl/Sr16g7EZrL6VOq2YgjENVJF1KQ1euhu4ltuwY0KGXdmnoeuFR6k+Y24sB84dQXYdSw12EtljoaX7hsI3Iif4l9NGR1qw2krP4jUybu2H9hA/XbGkGFNRJvp3X6UHq7vEuiidd8yD1o3Mw9i9piz7Shknu/D8t7bSNc+rxvk3MIHuW9dw3H/dX6nrRUQu2lp8+o2G8Uk/kgyCfPDeqBaI6lYPcGqK3mjd8D9O6WtnPnZS8e1D3WNOx2BBlKSy7TDWI8nKVRmAnWyijqymQaahI46SMq18C9PH4k6am84nbwEq/pHncf++ZJcxGeSLait1HYlyYvpWeGj/zq1fAWXyIzuSqxrT3j5XUnUr6ylMLetevP7eOjoeT+404ExK6juvCe9ND7fSqN2Ev108gTTfzM30HTZo8myx5+DhzvGGaQe9IkL1FVNGtL+hAT2XfssVfBgMBoPxH4JOVBuWX5YMBoPB6BjwAh8Gg8FgMNqDJjRT53hZnp9mmRKrr/vDdXKsdkDPy8Vl5iOO75Sxw4MilkURdP01zP2LrZ/K8OgbK4CqemapjMeG4PJwY5f3jJtmyzhlLXZEuW8lldh690rUkFRdyHz4R+CebSQrwz2NWIpswz3vw7jvvq0yjtyHnU1+jJ0o4/TwAOBU7Sn6ZywNpg2jc1p9Ci0AkQGkC3eP9AcuyPBPop/H0f5jVqLWrJYbPFSJneN7b39DxuZpdwBnbiB9b2tbJHA9o/B4VLS5cf6F+ZFmvLscS4r1+vZpGVftx+4ZXV54R8aeTdh1xadLLxnrUSnAmZprYFzwzDMyzngQ7SktW0iXMwXgfStetVnGWX96FDh3NJU7212Nz0JCsA+Mw/3oZnk+wm4tf44l68j9R/4O3JlrqDRdVACuEUhoII26NhJtDeqj6TS02bH54pdYcBnpnYWvoB0o7On3xC+h3E6aofEzYxXJ+tF1p4B73IvPrTWRyvbVrl8DnH4j2bHCNHw2VFyxHEsofjGLrCPmBiyF6D5Nc+zL0NHAzWr7GcZtvWnNwMk6LPfYx03lDu2RuA5DnQ2bTqE9ZXIEzX/H2o9lPPKxt8TewjOdI3fZDnpFhelfXD7mvP8u652vWLNkMBgMxn8GNE0IE6dhGQwGg8E4F7ROo1meXxo2O0dfu5HSTSGttNTaY2x4W3aAuAZMdelpuTKuENg9IXTVczI2zcbGxGYlaeHUz32BF6+l6kKLx2cA56dW1LDgMv9KnZaSx7Zig1txhlI4lau/BSr6JmyGbGqifXiD0K6gnzpMXF/sHuLQKQ3pf3A1cN8F0zL/ySloudh3OTVNzln2PnDmmhLxi/BHy41LSRkal+fnualjRYGhwfLUSEoZ3bkZbRUvJxXB2K1UyTGH4LVxFOXJ2DcFO6Ksjp4gY6M9IjeO5tGc9/cCd+94+pwQP/z3YYOhMbfaLsi4SK+ymewqV5nR8lOZTB1Kwn3wmWry0LGuL8JKT71icP5XNpNdyevFzxlWTl1PqnujPSHKQ59ba8HOIs0uem7Uxt9CCDEnhu6jIxQ7sFQ047WJDaRrV9KItqrSRkp9dgnDtHuM8nfeT58Czr8fXbeyZJRyYg3Nn7U2smd5t6Dl5/OE6TKem4DHZg+MlXFwFd433Urp9HwLVnNSJYkAO3YAcm1fBePSYTfIeI+hy8/kDLKABDTid4pqRzsyAM9/3C76jnlsJ923D+6eI8pPHLko0rC9Y8L1r+dObH9DAzJe+ZTTsAwGg8H4T0HnWeDDL0sGg8FgdAw0ITSzuf3t/g+AX5YMBoPB6BBonUizPK+XZXWLS7y7h3L36VeSTpB9GDtNpPqQ9uepQ53gSDTphD3DDNaRhFQZlhk0k8ZF1Mm8z/OofRjLtkUHkxYUUI3LxV2Ht8nYpweW5vKPIHtIiU8CcOF7P5Cx5e4XgTvRiscaHkN/ayyNV/QYlfXKWYE6hdo9BErYCSEi60kXUjVKIYTI/orKeG0sR81mnBXtCe4Q0klOLUat1e/P1AUm+ugW4D5zkERwXQ5emxvX0Ly4bmAycHUr0VbgG0r3xtKEGp6jnvTOit2oC2c8TPPNaEEIrSON+q8zegIXoJQwzKrcCZwnNRfGP5bRtbNacB9XJindUg6dBc6vC22rudFyE7TpExn3G3QtcMkBqEtG+JPeF4IOEGH2IdtHhEEX1Y6SThsdFg3cBp1KEQ5ICAZOL6DndoUVdfBZ3dECZNZpjusC9z8wnu6prwk59Qn369YXOHfWaBmHG8okqmUphRBiv53mcW7vYcCdPUV2jUqfWOD81cNxoq0k35/WM3RrLQDuiwr6nH5xeE2jJiyCsY+DzjI3Hq+xapXL07CEZXoAzc3xXzwNnKacf+94KsupluTs9NCEMHEalsFgMBiMc+Oi/GXJYDAYDMYFg9Z50rDnZR3JzUzVt77xJzku7TNLxqGfPA7b2q9eLOM4i6FDhE75FpMDK/EsLaH397VxWMHFG0BL4j3bDd0Dhl0BY30H8eYoTBlqkdQx4XRgF+C2lFBacK52GDhvqtL8ueQAcOv9+8F4jB/ZarxnML0jMofIsNaE1g3bj9S4ufYQVqnxv4+qpgS3oa1jYz0tgR8Zh/m7ei+mYX2WU7WXTcPvBG5KEHVsMNpq1FS35sJU4/Cl9Hcbb8drYSraDWM9iaomfVSEubcreigNpg1zU92y0pCi91F8HqFfYIreGkjpRd8xVwKnGbtHKHNsWRHu48qe2BxZxfZSSh/3iMLqPhu6DpBxzwPYyWP5AbQkfPoNSRaHnxsHnKWObAdtGz8HrnkapdOXH8buGTfXkgWpetgC4I5Xk3XkmoexYtbSv8yB8TgTdZopfOUl4E7eRnNzTM1m4Oy9qeF1QR2mQRNsNDcjBT7vdW8/CePQXHr+hBulhi9iaB9z4nAfevEhGZ9OHw9cau1BGXvC0TpjVqxTy+sxfXpFRiCMxR6q6HVm1T+Binv8dRmbnPjcmOupqfPvfsbfLi9ZqIKRZczVMh4y9hKxZ/+Bi8I60ic+Sl9904zz/rukJ95l6wiDwWAw/jOgCcHWEQaDwWAwzolOlIbllyWDwWAwOgYXa4suR12DOLWCyjx16UHLt9P34pLwHdcqKXUvaj/CQjrFq/moS92ZXCfjk9Y04IQiU6QNQeuEZtA+l0dPkvGQxBDgkgV1HY82lNSaG0O6yeYWTImPaiDNyJ2M5xvXhvqe20b2CS0Mu8qfcdA+9xtKY+WOvU3GrSNRz4tSDtVYwk61h1R5sZNKqAk1401j7pFxSwty39lpifykOJRFzI3UWWRpNZap+1JQFwzTSfzMEwloj7n1w/0yfnEOXscWpTRbuAetA6qG+ujqk8C9M5s6i9Rd8UfgotaSDlxoKGmWUbsfxs4I0rDn1n4MXGEDdX3p1lYI3M0vUEm/o9fgffvjzD/L+ETrceTqsbPNnGqy6yw9iraW6+PpS8Uy6wHggr5+XsY3Tv89cCbPfBnHtNUCF2+me/p5OXZr8fefD2NXMJUNdP7xLeDGOYpl7O02FDhbC9ls7A7U6Bt8SDMOXf8OcJXXoGYZFkjfI6Y2nBvhQ6bK2PP324HzDKfzSHRhmcbTkX1kfO17e4B78GXS8xOiUYfWfkDN2JSeLWP/R/G7qfYl0pNLNqCNLudT6ix02+cLgfN9jqwkXvW4dYPHppODC6kzGAwGg3EOaBqXu2MwGAwGo11clGlYBoPBYDAuGC7WBT6+Ccki7WnSf1aUUO686HHUyRzrSMNqLMEO5OGXzZXxXZHYVbwkkHL/BdlY0mpcPpUqK3sEy7RFZWM7p6xlm2Sc/8Iy4FIdVP7urUb02YX7kzbR96mrgXN/QJpOnQe9i2mbXoGxmKroJrtWArUjfKyMy5vw/CceeV/Gfv3HArdtxr0yHroES2OpJexUH6UQqFEKgT7MfTU4BbadJs3Y5C0Gri2dtKhBfuhzi7zlYRl/buhsaU0NQgAAIABJREFUVlOIOtnbV9M9jvTH/QeY6H4sK0Ctu0c0+SXvHYNt1wLy1st4l20AcEn9Rsr4qbXoXb1/LGqmJ5UWWpMN/twb3yO/6IYR2HbuwPPUMuuMofThiYfIZ7vfnApc9CVYmm9PBpXDG5yAWvuopaTTrhuCWqs1iVqrfX0Cr/fM0GoZ37EL1wg8NYme25sHog66IxzL31lKqaRezI9fA/fTBHoeR4fiPf1GsZKmGbjMGvpMVzDq4Jlh+IyZa+iDHJu/AC5n31YZe1ZjKcpyO83VJH/8Yg72odJxI3qilzLndyNkXL/QUIquaAOMt0fQs5FqaK0WeBfpyf2vw3Z19Va6xxkzUdv3Kufb0JXur8dkqIPYycFpWAaDwWAwzgFN04TpV+g6omnaEiHEVCFEpa7rvdrb/l9B53ilMxgMBoPxr+N9IcSl7W10PjivcndBCZl6r99R6aa7X75LxjPz1sG2+mFKi+ktaOtwj7xGxidqMQ3Zq4rKgdWnjwTu5MwpMk79/Dvgospx2bfwU7qelGPqw37gZxnbLr8JuCITWSc8hhXasSspFRMwD1NWKwtxSfqMeEonvnwUrRRXfLOYjtuQPj4wjNK3g3W0J5wM6ibj9Ba0ThQqy8yP3voycC0uTDWnhVKqOTsC7SEmpQtFTRpe/+c303X8SwRaIIavpU4Lby3ETi4ZP2FaLGAglXGr/OpT4GLm0Nyo/e4z4GqvolKLKcfx/pu7UIk9T2A4cCfaKJ2YtuXvwDVNQJtBRBtZKbY2hwLX5T2657GTJwPntVP6tmnwVcAF76aUYVP/WcBVteC9SbBRis37CabT/ZLJSmXKxf3bfehYg+txvh+3kHUpA50bQlNsCLurccJnH/wIxi1jbqTYhd8b9UrXjWBDR5h4jexYWit2mcl/iNK3+jNo1TEZCrqF+NIvkFhDJ6OvmillHu6HacrcOENpOgWtbjqPyNPYOen1RrrerU68T8NSwmCcGkpzLMZdDVyDH5VJrGvDz1Gv1Hcn8O8W9aW0dJGdLsbsS0aJwwf2XRTl7rJT4vT1D19/3n8XtujpdsvdaZqWKoT49kL9suQ0LIPBYDA6BhdrUQIGg8FgMC4c/m2fZaSmaWqHhrd1XX/7Ah3U/wh+WTIYDAajQ6D9+78sq/9Pdx3x6kI4FW0ibAvpkt7dq2Dbg1kzZbzyCLYMelRpthRvQ32hMpCWa0e5sKRVzrL3Zay1oB3FHY9L8DUPLRc3G7qjn5r2kIzTbVimLl1ZHu+ORnuCmHO3DHUTXroxaahvaXnUXqeyEduAxU0gLVD3oIaRG03L5T2tccAlBNC1cgVlAuf35yUyntKEeqZawk4ItIfk1uUD580YLOO9ZXbgbhmcIuOWlZ8Ad8MlpP32CEQd2jx6Joy9fiScRV+OLbN0F+m7wfPuAi7UQfe8ZhfqS+E2uv7GtXWZStstUw/UU30M80irKpZx33Rcyh984x0y9lr9gfPu+l7GJQ2oUXc7QxpiaD3q0CE16LPRfchW401MAc6aQTYXZwBqZgFqScnGSuBik1JlbLaXA+exkV2irBFLL3YrxpKKPxbSvJkdhtaZ6Giaj3YXap+6Rs+YuQ6f6eDUWBnHFGHpP1e/KTD2fvZXOu50fN6nOUnDdAyaDZx/E91jUwN+FwW2kZ7qyN8H3KdKZ72lN+K8iQ/C59/n7FE67ij83mhspevhZ3gxRPuRZnpDNj7vZxULUlcX3Qtf3dDysDOjE/ksO8dRMhgMBuOihGYynfd/7X6mpn0ihNguhOimaVqppmk3/G+Pk9OwDAaDwegYaJrQTBfeZ6nr+lXtb3V+OK+XZZeoQPHRbUPk+PSIMTI2b8Eq/OmfkZXhtnpM5xVlPyPjmEA8hPA2SpOYWjFl07SW9uHfpRtwpm6YJhGVyvL5kEigYj+kajOBcxcA90EjdUufkxQMnI9dSeEcQqvMtojRMB7ZnTqyP5llSEuWkF1kdyBWkAlporRMZgumzPbayfKRE4Aps+ij1K1C74qpfGP3ELUyT3US2kPU1Ou4BKygcqqVji1w8nXAlRygDvAVXrzecb64dF9rIytR3RqsbhTYhZbr18bmABel2BzMNz8FXIviMwiswSo9RS66binlxcA1JOK8CT1O6d0DQWgHGqRwJhum3S0xNG/6mDDVd3Ql2aG0sXcDd0gY0qln6BqPLMDzCE2j1KPjY7SVWOc9ImNzGFYeCjLTdfOEIGc9c1DGgxMxtRl8NXYvmb6FrDyN6Wi5qmok2SM1AKUFXaNfAroFqwJFjycb0ZaoUcCNPLEZxo0zH5RxQOlu4J47SynMpHxMEU/vRue8qR69M+EhJG0MyMV7sWEUWT5uX1cA3H1j0mGcFNtDxrUGe0hCIM3NBix8JSw19D21rAIrNl2TTGnY+pBUGXvMKB11evwKL8tfA/zLksFgMBgdBE0ILnfHYDAYDMY5oAmh/Qrl7n4NdI5XOoPBYDAYHYjz+mVpNmkiVCk5NTjxEhlX7P4BtjUteFzGe0tQX+v7BnXPaHJhh4bvZlNX+Zl5WNLsiSjqVnL7KuwCEGwoI+a3nsqo+Y2YAdzWaaRZXhaEy7BzH7xZxt7J2L1izaDbZByWNBG4yfW7YHywjiwYvhb8N8mK0jiFwxJX9w0kncTtj5aT3qvfkHHeqDuA+8xBOuWjGu7P3Ijap9o95Pmf0Gai2kNUjVIIIVL8SYspdeAy9z/ZyDrhDUgF7p7VzTAelk5lvI5lofb1x5G0/6352D1jlq1KxiGnDgLnaVB0qjjcf+QqKttWMudR4NLsp2HstZCG1etbnGO7FcvRoDOoWUMJxdQ+wPV4je6bXoR/l9kLO8tobpqPlqnzgBv9GZWKe/voIeBaLiF7VK/QKODM+aRnV6WOAC66hTTq2BAsRSd0tIBYhtEz1vTUrcB1veEWGXt01Kw9QcqcPrEXODF0jgyH/PQecv3GwLDybroewfeirei+DLpuXj/U9Dzr35exOQNtTDnB9HduMz5vrZ+9IOPXJ10DXNv3z8PYlKRomNm4D339h3TcXtQza/JIl74yKRa4xp00/1srybbjrcA527mhsWbJYDAYDMY5oQl+WTIYDAaDcS5o/365u98c59V1JDmrt/7Akm/kOMSP3rU9/oSV408++YGMfy6pA+7P48geYK3A7hXbdErDDdUxRXjS1l3Gae6zwDXZEmGsLaN0rsUPLRBLMsj2MDEdU0bpJkp9NAdg5ZuyJlr3nRGKn7nnLNoMck/SdXpewybWMz6gNHTmXb8DTm+llKU5Pg04l1Il5fti3F+fmCAZp7RglZiPqnBJ/KBEsj2kF64BruUoVTEx2kNKfSj1Gu+L6fPhz1Macs19WPmm4YlbYBySTkv5A3tmA1fbi6q2hO7CKkGe4fNl7Fz6BHA+1zxGcROmndVqS6Y2QwecMMO82btaxrsNqfb+SjMTUzPaE7z5lIY/0W0acGkbXpWx7/DLgVvTjPPPpbS6GbX9NeACpi+i4yzBNKzmQ5YMLQhtLWuddI7dIw02HsVVNPOVbcBtm4KVr97XyeY0Y+tLwDXMJ9kl3NDQu6qF5kqaCVO97i3UkcU6dDoemwPT9+6jZMGxJKB1w5NIjSUazUHABSgyiMWBkpBmSIuqeHovzZWdBXi/l1+L8zao/ICMvc24jy1BZIHqGxMAXL1iMzlSiec7OJFsLsFKNbMh4yaJPfsPXBRdR3IzU/Strzzc/oYG+E9a1G7XkQsN/mXJYDAYjA4Ca5YMBoPBYLSLzpKG5Zclg8FgMDoG2kX6y9J74oRonUg6zvWVtHz/jnnPwrb2vVTp/53Z2KhaLfH0QgmWeLqtnrqllw3H2rfzXyVNZfsNWLbrumUHYLziWtKw9hr0xKlBpDdGfYvHrU0m7XXlcbR1jE0j0Urb+QVw/bMn4eeUkTZ0b8NPwM0YRBaEhHzsXlFSQ8f6VDLqMtkNpMVNjcRbd+OaMzLOK0LLxZfi7zCOvIU0guFrsaSf2j1ELWEnBNpDhq1FXWzL78lms/IkatQ/j3gAxtuOUleMGZ5k4Oa/dp+Mjy1A60bXL+le7Rt7L3Axt1CniZIt2Mlj0P1kcTq+HHW5vrdcAmP3NPrc/ruwhKOpms65afdW4JxX0Xw7kIFSStY++hzHtm+AGxOA5ddaS8kW4D8Pr1ujRrpky1c4/6brdP5vLUKtO+5PV8s49o0lwLk3k8VqTRyuA9BTFsF41J+o/F3YLTcD5/GhL7xAD2pv9X8lm4d2/2LgmsfR54TasQNMxXuvwljVurc/9A/ghj5Ptq6Qfqg1H5pP5x/x/lfAJRRS5yRPDZ7/nE+/lfGwXWeAa23GdQiBU8hWcyp+CHAJi+l7TMvuClztyp0yvvQ1tKO8k0zl/244uV5cnLhIX5YMBoPBYFwwcAUfBoPBYDAuHpyXdaR/ryx952dvy/GwL6ibxtb54bDtkwW0fHvlpiLgNvyB0gsnanF5elooVd/wMePq6CGLKZ257hGs7rHxFHYomZpGaVCjXeDh7bR8/cmRWInmXEV9L/+IGsx+uQCXjufXYSWgSP9f/tfS8WpKb5bbsSPJ7FbqbLE3Hqu7tCm2gk/3Yqpxdj9KUQ3DAi7CdBKrC31uJgtAViQus1cbN1d40WYQHUDn1OrBefOjknqd3gWXxwsP2kxWnSYLzm6jrShXqb5i+DvnFkqhtVVhqjloPqVv6014TiHbKbVvGjAVONcaTEuWbz8s49RFmIZ0HKZ7o1o1hBCifPiNMk5rOALcdjOl3ga1YOWhA8H9YNy3cb+MdUPTck/WaBnXPIsVbCLvJKuUqRir5HjrqPKR0dagK9YJsw0tRuYMnOOlgakyTmpAy1fZkjfFLyF+NlXeMl63qrhcGYfu+Bi4mp3YWcSrzP+Y2x8Bzmync7RHGxrBK/4Y4/dd4bVk5Tn+GKZ2c9+iDjEpT+P5aYcxLfrxZZSGv3b3UuAOP0hVo3o9h9JCy8avZRw4DKUcr2Ijy3vuRRnP+W6LOFJTf3FYR7LS9e3/eLr9DQ3wHX4lW0cYDAaD8R8CruDDYDAYDEZ7+HWaP/8a4Jclg8FgMDoOncRneV6apW9Uup4wk5bvv7P9rzL2fo4dQsYEUHkorakKuKMhpJnZfPFCmQSl4reextJY/V6mTgepV2B+39IfLQAP7qB8/+yXbgfO2Uz64pCXsBu8tx997v5K1BP7FayUsbk7Lg9/dD+Wzbp7WKqMn92I5eceOE66r7MJl9m77npZxklm5BosZDMIOYpl6uq2bJBx+LhLgTsRNxTG6wpJ77vuxPvA+Y+mjgm6L2qW92yl47lvJy5zf12xhzw5IgY4YcZ/k5W20ThwyR+BC87KkLFlKJaGq7VSt5JWN3bESKogfas5ZRBw64pJz54Sjff0rBnLzTU46D42OlAzHah0lilPxu4dCY159BmR3YGzfvmMjF0zHwQuyIHaq6qv6xU4bzw1ZB0y9Uft1etDFiTTwR+B+8ZG9396G+qAKvRU1E/N1cUwbk0he9DL27Hzxd1DkmRcWI/6fVyQcr83fwicTxaVgqsIR63RcIuFr4W+G4Ks+L1R1ED7NBnUvMwa0nCNc+MrxR42aQPO6UUhV8n4mct64N8drYDx7wbQmgGnF79TD1WQHSw7Dp+poGayqzhtuH5C/RSnskZg7KjhYv/evReHZtmjq75z6Uvtb2iAtf9U1iwZDAaD8Z+Ci8hnqWnazUKIm4UQwhwU2c7WDAaDwWD8i9BEp0nDtvuy1HX9bSHE20L8Vxr2Vz8iBoPBYPxHQBNapylKcF5pWIvVLMKVVlBV5aRhZYegf0ovJb2lcdcm4FKuJe3DqD2Feqlze2ENlqnrYVe6yOdOAM6btxPGiwZTqydzb9QCTn6fL+O6nqh9fnOYNIyre2OLLvtK8uDZs68AzmxC36PawWvhQCzpZmshTc8SlwpcoepfPMcccleUwNg3lO6LntQbuFs/3A/jt68m/1xA2DjgvH6ki2oGf+qwdNIMQ6qx3KBawm5VKnpus2NxbiT6kRZYXoP+2LAwuuYmQ4umcgeV5osJxKmrR1Jrtz3l+HdBSik2bwB6CX09KP2YyQIq4m3Yhs0bRhKJy4X/bnSH0T0+1YCaXfcYulZWM/6dNzBC4P+ga6PFYrlDk4s+1+WHZSLtLnqOwq143JEBNDYFGPRkBcZmVZrhc3xayRO7w9Cyqrx3rIyNWm+WidYsuIze0fJTMrZGYVlMVT8WQohoP7pXhY24j7JG+lyDBVh0C6QyharnUgghWpTrZuvaBbhhoZRJK2tErXtun1gYH6um/XeLxPkeGUjX0ccgqJ610nx32F3AqfP2eA15s1tdBjG3M6MTWUc6x+9fBoPBYDA6ELzAh8FgMBgdhItogY8K3asLp5JiOdZEqYlhhqXcrmIqDWcvQ+tIXhml98ZaTgEnNPqckWkpQJmVtMSeNkz19RswA8ahTkpVmNIwDZtzK43DirF7xLxeZAkwpnMCUpVUWwumgaKDfWG85ACdc5wNOfMasiBkPD0XOI9i5TnSYkjnBBAXHILpO0sT2Ww+KsI0zYtz+sI4UulkX/nVp8BFX36ljOvWrATuWBZ1JJnVE0uhqd1DjCXshq/GclZq6jXu0ZeBs1RT+r7ui3eBC7zqT3Scdpw3NcGpMm6qxpJuIX5WGZv2/wCcp+dkGKuqgM0H57Tnxw9knJKJ59+6l6SGPsPxM12jrpHxWcO8OVGDKePRTVQq78znnwEXfxeVeLPswq4jQQOp64XuwjTwS+sKZDx8MO6vZfcGGftfcg1wXgd2ndFKqLPP3IGY6k85RZ+T0AslEq2SJApPI9rBfLOo3N2qPEztXheJ3xttwWTfKK7He7zqENlqzIZU59hLKL26vhj33z+BUvs+SditJLeVUt0NhtTy0SqUiMaH07UqsOOXf3cznVdBIy6STAuiZ9puwa9jPwvNv8xwv//x/18M4H6WDAaDwWCcCxdrP0sGg8FgMC4oNP5lyWAwGAzGOaBdnC/LHpFmsXMhLcM+Vpol45mvYAf6jX3pp3V9AXYgHxVGy6wXrsEL9fZlpC8s+yfqUo9k0hL8TBsuQa9+/mEYzxRUtm35754ArvYG0ndCrr4HuNImWr6dEoTaR/4npHd1a0LtI2smdrUXq6iEk+8w1FPd86mMm2YoadY1hXQSYxsgZ840GTuK8oBz1JPl5orLsUdXi2GpeYCJluSHzkGdStW7ArukAffHkaQh1zqSgJv/GrXIiroRSwi63BkwVu0hqkYphBDuSLr/qh1GCCE+2kfd6t96ay1wZS9RO7MRyWi5UHXgtthpwEXZy2H8zE66jhO6oXXoZCzNqfIS1PN2NYyX8RofPG5V+vYz43wf61MG47JUal93TQSWRvt+/XIZLw7COfVUI33OV4FYivHTK+gxL/Vi+zT3FLJxRQTg10GtFbV+te3c3EpsQ/bXIvouuMzQrq6ni65V2+X4nOQrNpt5ZV8Dl5c0E8b/3EP3/46gfOAmDoyXsefUUeD0bT/LOPWdz4HL/JDavnnteL17BNG1cjxzG3Axj74O4xI7lRtM+gHL5pVPvV/GXe0n8di89HehHrSOeILJnrJoBZ3vqVqce50d+sX4smQwGAwG44JBExfnL0sGg8FgMC4ctP9a5NMJcF4vy6PVHpG9hNKPY5dTumPGmlTY1qcrpXDSDMvFqyxk+3hwHFYisdRQWm5AKtojTr9FqYjYuUXARS56CMZX5dNSb9+3/gBccwUtn6/7AFMmaQvpc47UoXUjeTh1RfCZdBNw35xEu8SoSXfK+LsiPP8pNZSWbj2J6aSvnJTOmtUPO0vsUyrTDEnpClzF7m9lHG3oJBPuwSo5ywro2kzdivaE4Hl3ybg2Nge4rfnUIeOyiu+BO7aA7CFRHky7G7uHqJV5jPYQNfXqM/Nu4P5oouk6p88C4EQlVXBqtWH6eHsp2QwuD8BuGc74PjC+czhdG4/hOl7qodSjKwc7uZiGUcrW60R7hvnAP2Uc2ns8cHozzo2YYkpF/nT1YOA8+2kfDw3DajNOM33hTNn8CnBHIxbJuI8DU5SuE2QHMVpOEkdeBWNzDVlApv2AKcMP5pNEYuwIojdR2j9471fA9c0g60ipoSpWt+qDMI7LJruOV0frWLWb7EH2bnj/k3dRp5Pur/8duO9O0vWfsP894J4OpHn718feBG7dKbSuxChVelon3AtcfQNJRoU6Vr6K96e/S9r3MXDaqHkyXjSCzum4obJUpwdbRxgMBoPB+GXoovNolp3jKBkMBoPB6EDwL0sGg8FgdAy0zmMd0XT9X++61TchWv/+d2S7WDWBur73irbBtsG+9B52etC60OfsZhkXpYwGzkfRXgzNKsS2M5T7H5KIy/OrW7FDQXwVaTFVMf0M25IulRGMN8q7domMzwy5HriSBqW8XySek8mgU+lWWnauGwTs7bW0BH9wPC5XNx9dR8eSibpY05InZbx53H3AZYTT/hKDrcAFeHCp+YEGOp5QP/z30v9j772j46rO7uFzp0qj3nuxquXece8dTDct9J6XlpCEl5IAIQk1EAglhE4IYDqYYnA3tnHvtlwly+q9jsq0e78/+H33OfskthAvQZF49lqsdQ77aubWGc+zz95PlpcsCLojGDirm+LHuhKxQ4Tx4aPmWO1W0TbvVphXSd0VQpRIOdkecvdk1Hc0qSNHSQemfsinOKsT9WyjlixI1dkzgYtehRYAz/xbzHFEHdojjrjyzfFnh2uBm5lF+vpQF57vx3aTHeV/81DrU7ugwPt58d6ICqJj7vLjc5vZSlpkWeQg4FI8aI+RccJG9oQMP2rNtcHJMNelt0w4sgJfKIv0RIsXj98fTVGI7x1qBC5G6ogyNxQ59dxoXjqPhmLPOXLLNeZ4wNlTgfMukK5pNeqghpQes9qP8ZrT6inC0JqEOmhA6Rajh5Jdy//hn4FzzKd9syidfAJhpEMbdvzAc0sJe5EtJeb4tNMvEDv2Hugbq2K6wejhQ4wtyz7ofkMF9pSBOwzDGNP9lj8c+Jclg8FgMHoJfeeXJX9ZMhgMBqPX0FcW+PToy9IeFS0SFl9qzieEUZkkLxJf6mgz1RBq2nFJ+ok33jLHWb/G8saJ4Exz/FWJG7gxyVTqbfFgGTTeis1ZZUQ4LcqcSj8NXVi+bf6AykvhU64BLj2Cuof8dgM2X/7DbEyN0bzUlUAtrwhBZap956E9ZORDVNoWfjxvdbuPmmPXfDymMOkYa9uxQ8LvvsDUkNtnUKJOxqHPgWvYutkcW69/ELiIE1TC8q74ELhdM2m5/PCvHgVObfAtN25Wu4fIyTyqPcQulcwyXXjd2gVdG12gHckaQzamwjosl88aNx/mS4uoFDhvE6a9bBlLKS6fbsNm37cNpbLgthbsMhMfRqVX/4G1wNkGT4K5UU3XypI2DTiXZMkoa8EEKyF15Ehx4vnWLXQ+rK1YavVJt5HaiDpu3xcwP5I9zxzHDsfzZu0ke1KVDTtrJDXSs5IZielS4+Kkxtz7sOz9TcJ0mI9KpLL88mK0ak0fR5aroCGYYFQq1TPDnCgX6cF0bqYEo+zQnkzdY8KasLRfacVzlSh94FujMPlpWxu97uhE/Du5s1FQ7SHgqhxkD4qwStJKH/Elfmf0xy9LBoPBYDB+MGj9NJSAwWAwGIwfFPzLksFgMBiMU6OvaJY9so6Mzs8yvvk7dfD4JGqGOV6Yi/FTji7SMNod4cAFa6Q3VWDDcZESQieuGSU7+LUe03wMuPYYjH9rlLTIZBvqO8VdpCll21EXlbvBew/tAM62gGLDxF7seqG3YJd3WbfQQlAnOZZEOlW+W4kfi8PjwDch7aXNikvnI5vofJSFYBRadBDaLFyHqZuJloDbGnUl5rgjFzUz5+Z3zHFg4kXAldy42BznPPUycNZKpQtErNS9JCgBuJgWqQtJE1oeipMo/i02GP+dFyJIsz7chg9fh5fuhQjFKnO8GW0OIxLIriFbXIQQIs5FupEu8LlJa6XYQl3RxTZ20rMxJgntINXKewRLuqTbi9qjWzqOYdY64GSbRbOGnUWiPLTttnbctxLp+M/PwX3zW1FrL5YeyOwtrwBXM+Vacxyq2IEcFnpwQ5pRo/ZHkj2l0Yf3aagD5/Lxx5WsBy6QN9kcq/aMOgt9/sR3oNZs7aS4O18srjuo9NPxp/prgNMPbYZ51xjqkOJqwfUMVUGp5jjBivfbqmq6xuOST96txip9+M2cNlns3rmzb9Quu8HoEcONTauXdb+hAmdMyo9uHekbX+kMBoPBYPQiuAzLYDAYjN5Bf23RZfg8wl9VYs7/tpuWuY9PxeX6e6Wqxf4abHB7VgGV3spbsUS6t4ZKLWcFYcnmqi1UBnthYSpwG8ux9JIZSSWUSoHlpAN1tO1927Es8+DpVCL1JeGy/jveoaXt76ZitwhPDZYMQ4dTCbM9Gss7RaXUsSA6ZShw0cWUGlKdMQW4mPX/NMcXnMCOIA+fTR1Rcj9Ay0fT+XfDfGsYNfydGoLlRLnwFdJwFDiRlEnbteHxlm6g8xhrwXJSUMZpMN8hdU9pq8fuDXLjZrV7SFYr3W+qPeSQn8qQ+WFYvrSV76f3tmDy0PSDb8FcHKRhrHS8QgjhHUZ2iXcPYBk0JZzux9laJXA7K+msjvr6KeDSzsF0I01KgvLZ0GaQFEr3sdGOKUmWoq3mODILq1Ny8tHooqXADZfK6Z538L4RF+B9I6drOcbMBS69jcrQ3kRMELK10r1SE4JNw61+es2EFuzAo2pZjphMc1yRPhm3vffn5jj1V/cCV+imj7nIVEzpCZLkoq2NWNkcV06dfHQ/lsstYZEwD62nZuyePV8DlzCVzrGtEUu0s2PJ1mRpxkbociqQIck+VqVTTd/Gfy6UQNO0+UKIp8S3H2svGYbx8P/l9fiXJYPBYDB6D/+BL0vLLiheAAAgAElEQVRN06xCiGeFEHOEEOVCiG2api01DKPw1H95cvCXJYPBYDB6Df+h1bDjhBDHDMMoFkIITdOWCCHOEkLwlyWDwWAw+hi+f9eRWE3TtkvzFwzDeEGapwgh5E7v5UII1IN6iB59WbZXN4utj35qzgf/dpE5TirFpdyRedPNcXwo6itZwVT/zxGoWZVaSc/Ua3GZ9dgBxFlKdgKXEItd5VNC5WX+iFip08GbQzD+S5Pi0LRg1N4WDCN9we5CjbTjOOoNsk5kLPkTcB+GUOeW4Yl5wNVlkk6Z6MXOFloW6W2356LFxGUnXcweghpt3MpnYJ42groyHOxCDS9PsiAc96EFIfZT0kzDLrwFuNN+Q1Fork3Y8X1Z6iKYy5aAiCDskBKQrEybyvHeOKuLNGw5wk4IIToke4CsUQohhD+VdOEMXemIMvN6mEcdXC79IepUDjcJ8XKXESGESPERF7CjHebWAaSLdY1GHXBVKR7j0HiKigu3KxYYH93JLileTggh2vPJxuXTUYcO3U+xddrohcBVtNExZg3DZ6hRiSnMDKJttU70dTXGUNxcVD0+CwHJHiIwiVFYpUNsjxsInKsB7WH6qtfMcUpqDnCBB/5mjo0OjMIbGEv3caMSb5lsoY/AsfEYU+hZRz9CjMV3KfuN+qajg6xjlllXAmdI79Gx/jPkzr/THKuhmJpka9FCJPudpW8siPnO+H4JPvXdWEf+3Yt+d5/kvwH/smQwGAxGL+E/tsCnXAghryZLFUJUnmTb7wT+smQwGAxGr+E/pFluE0Lkapo2QAhRIYS4SAhxyf/lBXuW4DNyhPHNGqnp605KXhjzJSb47L5BWvZswwLDTo2+8D85gMkYv5hEjWL31WC8z5QwKj01u7AMF+HHsuhLh8mSMmMA7lteO/kDjoQUANfYSaWmXVVYIruugMo5ahlYi02HeSCUymlys2chhBgcR10IIt1oq9GPUWrQ4RwsmRVYyK6wuQOXrk9oo/0xlH0ptmET3wdXkiXkOQcmETkHjTPHsk1ICCFKh1H5OMtTBtzWS280x2M+fAc4EcCSnZw2Y9n9FXBdI6lkG6I06q2MInuM2j0kPYLOaZsXa30ZUreYSAvuS2DlazCvnUpJNMkC7yl5v5cV4fL959dR6fHzM/HazH6v3hyvnKeIAhGJMA0U7zbHX8ZMB25hF13jFSFYgZq44a/mOOiiO4A70ETvOdJzGDhvEp3Thj//CriwX6PNRe4eo55Hew29blviMOBCy0haOhg5XJwMuUFoIzOCMPmrTSpDP7QGS703fvl7czzgd4oFRoLmQ2lHr6BnoSx3HnByQ21vMh7T+wfrYX5hJskJhpLupQ2bbY4DG7GTjW0UcXLSjxBo1XHapASfqZPFrv6S4DNqlLFx48Ye/12wy9Vtgo+maQuFEE+Kb60jrxiG8adTbd8d+Jclg8FgMPodDMP4QgjxRbcbfkfwlyWDwWAwegWGpgmDW3QxGAwGg3EKGEL0QAnsVfRMsxyYbWx66SH6H3mkbxnBGD+mSzplVwDfI+zEFnPsGYDL1e3S8nyLF/WFruhM2s6DemKRB3XR3ABFbDUoEVvROmlR/vWor9nHkG6x30A9yaeTZpK99CHggtNQb3AOnWiO3fGDgZPj3k5LQXuKvLQ9bvsS3LdsskAs82Bs15wU0kysrYodxo0dUWTdSO3eEdNBGmpjSApw0W7SKQMRqBkHPn1anAwNc38Bc1l/CSg2hzjJLuMPx/fQPyNdzjluPnDLO+laqRF2sj0kbPULwFlnXwlzyyGyQGku7NDh2UvaStuCXwIXW0Fxc3ob6pnWBNKQnypHPbNK6Xryp/Gk02ml+4ATKfniZKh20PHHBaNGri+nY7bF4TWtL6DzGPXNG8C1TLoc5vJzU+pHW1F8CFqAZITUHTLHZWFo+Uh00f33wSG8Ty+MQQuIJmnf2zSMQhyeQJq1VbHVVBrUTcXjx/stu+s4cVu/BM4hWbWWaKhZzs3GdRDBNlqkEly4Ajh3AemSsv1HCCFipI5AT2/F9Qu/jJWetxTal4kz5ogdu3b3jZ9j3WDUqFHG1xt6rlmGhXSvWf7Q4F+WDAaDweg19JEflvxlyWAwGIzegSGE0PvItyV/WTIYDAaj19ATKbA30bMvS90vdDfpMX/YQXrLtWMx/mvlQdKecmOwA7vcXMf7xgPA3RK+mMZTsoDzSPF3ecueAC7yot/BXKskzTLsa/Q26WeR3uTIRJ9l6Z9pf0Lueh64Lqmd0JbZvwauQmk1Nlny5Fk70Pcnd6ef3LABuJgaauFTMfFq4Pz3XGGOLbf/DbgVFeQPnZsQBZw3Bs9j0XG6hvkx6FfU6krMcaTSDV63kS6liV24b4tuN8d1d+N+d07DiDGrlCKnJKqJR7a4zfGtk/G8Rc2niL2lRY3ATcuQ7rGDQEGEXaXkoxRCiJRDa2CuD6S4Qc2D5+bBSNIFrVvQZ/o/p5F+H+ZAk7XWRDF9N1S+C5xz4pkw39BKWmB0ErahknMb89CCKBIkDV83cP2AdSZpj1obthZr6KRrUzXsIuC6mvCe9oaTvp5ejLqcyB5tDo8F8P3zpLi3Vg9e8AdXkp75lAu1Kz3tbJwHkYYcqFNy81a+TOOoeKCiJe9u0K5PgQsMn2OO/QswwtEptag7Jy4WuOBqjFQ07HTdypbgNU6+l1r9hdceAs5XRm3Jbj1NOV4vvaa1TYq+DGAMY18G/7JkMBgMBuM7oI98V/KXJYPBYDB6CUbf+WXZI+tIfkio8cJgsi8ceYasDfM/+wNs23ETlUndXizDZX3xqDkOm4wd133FB8yxoXR9eCP5HHM8S4mwa/NieSf2BSqTrjoTO6d/sY+sFW9PxPfY/1s6jvRXPwTupR2Uw3v5CLQ1NP7iYpjn/p6SlQLHsGT5Wgh1/ciMDAYuwkmlztEOjNSydNJS+pX+TOQkY69aEr6ocTnMrZJ9YGP4WOCGJ1DpZ48SNzjkM7LLHD4Tu2eMOf45vX4CWnW2uHDZfXIYdf5QS5aby8mekBeL9oRsN0WqtXyFpfXjZ1D3hqEVa4GD7iEFWNq0VGP8m55A3VwMJ8oH1qZy2i4IbSUNLz1mjhMuuAy415oobvCydCwfqlGQFjeVSeV4PSGEOOyj8mZeGN7vJzrJghBQSttZhR+b4/qR5wLXLlkZMi1ox9IVO5jcSUctUeshJMPYlK4jlS6yOa0+juXzy2LoeItCsJNOuAMtMLFtJebYqC4CrnP/NnPsmo3l5H9U07XKjcF7aryLJInjFizfpm6k0q5t8nnAaUqE4wnpbzMMfG7lEmqLEgUYXk/3n5qRWhWWbY4Tu+izZ/yCc8WOPfv7hXVkxMhRxop1G7rfUEF8RAhbRxgMBoPx00H/XODDYDAYDMYPBEP8a7/h/1bwlyWDwWAweg195IdlD+PuRo0yNm6Q4sA8tMz/gc2oRdw1LdMcdyr+gOg6WnZdE41RcMFSd/jffXUUuMdn0tL9WgP1pHBF+1pygHSCCWmo/Qx0kt7iC0bOvpOWll9RhJFa98+nuLHadtQsRiXi/lS4SSdbV4KxXZcNJr3Vsk9p52MnPW9j5GnAjd5AkXIfD0ULxIVpdB0DoXHAHW/Bfb32VWqZtKT9TeBSrqXl894DaB3ZXkC2nnExKJlYjtCyf6+kOwshhCNvBMz1ASQ1BFa9DtyLiaSp3RR+HLijcaSvbinHSLmZkoYdrcS9OaQIRT0sAbjAx4/D/MFI0qZ+Pxj1xUAURRrOfn43cG9eTfuWqLmBu24ZxZi9PELRBZvQyuGvo23LJl4DnBzN9moNxuZdHUv3uy9pCHByhGJ8G55TGYHiPfg/JFuFEELUC7rHVV00uYPsMVUhGMWYVEV6oqpfN0kt8eZ5UNv35k+HeWkrbfvuvirgfvbpfeY4/aLzcb+lSL+4Tuz/K8c2BjT87SB/brlWYUzirhEYBTg2lD5TWv75F+DCrrtfnAyWDvpssFQdAe5oAkWBDoigtQyTJk0SO/pJi67hI0cZX6xe3/2GClKjQ1mzZDAYDMZPA4bBmiWDwWAwGN2if2qW7kYhvqF0io7xF5rjN9/HJJQ7a8lWEpE7FLhALqWdxPqxfFupU1n0wpHYIcFaSp3iEzqVpetuLMtdOZaSUTSP0r1AKq9Yv8HOHg1bqUT5dMgW4LwvkpWi5XJsuv3xYeyY4JS6EFzuXgfckZazzHFw1izgUrb8wxwf9mOJeqyLlr1fbMWYmoBkhxETFgOX34VL+ddOkfbVshA43U5WFksYlvpOq1xtjrUgLK22bacybFAidmupSp8Cc5+P/iWZkTcSty2ldCPfqInAfSZ1Zfh0Wzlw0wfQffPuASxtzswiW8OuIrxPJijdQ+RkHtUeIpdeV96Ix1/YQiXbFM8J4FZ8Rn/nOQfLd20pikTho2uzZDeWGnNi6TguG6R0RFlBNieP0uVm1XG6/+dmY5qT/I/6WKREvYYdcSIlqSNISbAJVNMxJ2ZiBxLZjuPqwhK5LGfoLfgMHWn0wDxG6pBz6Yhk4FKtdB9rmVjqBVhQrrFKVp0lZfhxeGkC2Zi0EVOBa/FgiV5PJOkj7HpMJTvaQtd4oAXvzQo7yQKpMWi5inPRuWqWko/8feOH2HdGH/lhyb8sGQwGg9E7+Dburm98W/KXJYPBYDB6DX3jq5K/LBkMBoPRi+grcXc9+7J0RQjLyHnmdGMpLYNf++jpsKnDRsvOWzSM9IquLzTHvsRBwHnapC4IbahZiCha5l2RkglUqhf1Hf/Xb5tjfRYuwQctZOA5wGUW0fJtZyx2UgmfeoE5vuj1vcB98T9o87h3xTFzPGEqRowN9NIyf0sDam87niHtadzLlwJX8iwtsY566ibggrJIi9ldjtaF659Au8Cex6kLg3UDWkf0rcvMsU2JrXPvIQtAiB/tKN6LKVKwSekGn9mKkXL+qHRz3Lnza+C2tlBXecskjB+TtcfbhqKeZm2h65YSngpcio+sIzesqwFu0XQ8Drl7SMNzdwD35g2PmGNZoxRCiEER9MS3WxR7RDHZY+wdqMtFWVHfK7mXurf87+Noq1lfTjp9ow+1v4SB1PXDGugEbkIqxdZFbMLrbR0x0xzLcXZCCBG+7iWYF4+70hxnH9wOnCWENNQDOl63IR5JTxd43eZmkS5ujRwNnMuO+qKs4d35JdrKrnv/HXOc/DxaRxLqyMrUlYi2Gns7aYiD4nHfAsdJh28bgd1hZnvwOlqKJZuVjvd/gU6faV25qN8n6nT/BfbtAG6Jgz43z1lBUZOiBjveMH4c8C9LBoPBYPQa+ohkyV+WDAaDwegdGMIQeh9RLXuW4DMo19j8xpPm3OKi0stj1diF4/bhxGk+7F5RZaMyza7qNuDOsFB5pWPrKuCcp19njvXtXwBnGYXdS4SVknD2dWBnj8GxVN6wtlQApx+hUmNh1gLghvmpnOnZgfsmLFgWs02jLiRNVlzmL6cNvbyrGrhrh1OTWb+SKBJcRaVftXytSWXRJkMpexcug3llPpXSQ5RSV6mU9jPMgiVLIXVFOKxhEs6eoZQ2cvHmV4FrTsCy5An5PTxYojUcVArTla4f8jXd1uoEapyTymIWL9qKAlJqj5yYIoQQegWmpviGUdpLcCUm2vijM2lXmtAe0i51k3Dq2PXlwyLan9lZmBgVthUbBZcv/Yre//dYBnVaKbQlsmwrcJ79VAbsWHArcF2S12BLBSYITUilLtJxOnLH/UqpW8qMSStcClzlELJDaUq2TIPU/PylzXjeHlyQZ46DNexOZFjURB06DvU9Dsyn53/0/2LXEdsoKu37ozFd6GgT3Ys+JZZo8MEP6DXysTuP3BFECCFKW0jaGZ2Az5/XwGdMRnAbff6oHWhkVAgqpZ85e5rYt7t/JPgMGT7SeH/5uu43VFCQGMEJPgwGg8H46aB/LvBhMBgMBuMHgiFYs2QwGAwGo1v0Fc2yZ1+WQaFCz6MIMkst6T3DksJhU2M/RaN1HMForMNTbzPH645hV/E3G6lu/48Lfg2cb+lT5tg5aBxyWz6D+Z6hl5jjAVEO4Gr/RLaLn0VgV/uwUNI0Pk3A7hmBaLJSHHztS+CGPf8M7s96WsoeMftq4OzVh8zx9QJtHeW/JeuIPQy7utt/85g5bgugDhIqWWXWXv0ccHef+weYH72LbC3+4n3A5VfS/hR+sgm4Qc/Q6w5Y/TRwA3e9b443+THubtiHj8C8IIFiDH3T8PzLj411D57jx9opxi0+zAecL4a6juysRP341gEt5nj2e3i/rTonHeaapEW+1oSRauu2kL4kR9gJgfaQV/5+N3DnZpP2amlDjfyrZNTFl4ylaEj3+/jcvD+RLCHtGWhV8q8hDb++A7W/AWEkb50Vg7aiYx7SJZ/chtGTI1JRwxuTTM94zcrVwDmGn22OY/d8DFziOLJn3TEDtT5Zz0w/thw4Sxjqu5ZUsn3U6Khnj/2U9EXtIHaxCETS/VZz3w3AFSwmm4l3MHZZsSVR16F9VtQ6Bxuo7yaE0bnad+GFwAWeJV16lLIOoEvSwVcdxyjGhVG0nsMRTBYbS79QKwn8y5LBYDAYjFOA4+4YDAaDwegOxr/2Rv1vRc+sI3mZxsbnqMnqSqmEtMB58qX0DZ2YDJLRTOXNE5HYISH1BCW6+CuxRHloJCXaFERiLcKrYak1+Mhaep2B04H7Uuo8sSisFjj/Ueps0jgau3fITXSztr4GnC0GrTN6h1SmmYivI+9rUDuWZdpdZKtxrnoRuF3D6PgrWtGeMCKJ7CkepS3BoM5DMN/toOX6GRF43iKbqUNJoQ1LlANLqfRmSckDzvMNWQmcQ8YD15qOJUOXlfavuhOflCArlZcj7cjZGkvNsf/ARuD8U6mcq7/zIHCWC6ksGnQcG1r/tRGP8YZKKpk5pmM5Taune9wzAI9RTuZpcWD5MNJNpVc9DBtzr63EBKEZ0WRB0JUm3pY2xcojwRdK9ph9tZjgM7puA03S0HJUrNH9FufCfzvf8yXaamSbh3PF34Ern0QpWemhio1Kum4eqewohBDGh4+a464zUXaJcGPJujmUyqlRraXAtUdSmdTVjnYs2aqW1IWJWW1LyeYUko+fRZbBk83xLg924BkRjOVsOf1I86jWJXp/71KUSBxn/o85fr4Q/+6SoXRNI7ooaWjC3DPFjt17+0UxdtCwkcYbn6/pfkMFY9Kj2DrCYDAYjJ8GuAzLYDAYDEa3MESAvywZDAaDwTg5+u8vS7tT2BJI44l1kd7lj8iETR0GaTGahjYHfzhZCw7WYxRe/JFdtHPzrwNOd9NJff0ALrMeqVhX4tNJb/C0os1gexn97Zn5qBkJP20b4UTtRZ5rSryd5sSoqkBFkTm2Kscva7gRwdihYW8NnY/JI6YDlxJK5zsqGC9duovOzR/WVwJ3d/MKmMfPI22mTrEZREhdUPYJ1N7yhlCHipXlqJnOkKIP94SPAG6oBy0Jegh1DznagDrNTIcU/9WO11hPzDfHtsGTgCt303VLOwfj3lZJ3XHmRqCtpaoY9T3nROouoSvxY0YT6UZtKainyt1D1Ag72R5ib8P7bXoyasaWErKLGJkYkyhrmJZ27HpRIR1/uqJDa+30OgEnvmaGdE/rX6EOmRi5EObBFrrHbGMwXjLYJt3jSvcSo4oiLB3Kc1O98Fd0DI3YZWiMFZ/b6Cqy63j2o61p78grzfH4IHx/+VPO4sF4zfCJs2gSg112NOkcj1SSF70r34K5fQ69f2kwas0ZbSXm2N+F199jJevOjQG04wiDzrGtlXRYLYDnpU+jDy3w4V+WDAaDwegV9KtflpqmXS+EuF4IIdKT4rvZmsFgMBiM746+olmePA7//8EwjBcMwxhjGMaY2KjI7jZnMBgMBuM74dtflj3/rzfQozKsZrEISzAV71PCSRvRDKzFG1I7pU4f1tj1/eSrGa54Gas2kWYTswj1FZedtIgh8cgdrkftK9RBGmZhHXJhQXTYPkkjFUKIgy9QbFZFutIdPZ1afVVNuAK4pmvPg3nOm5+Y406lKJ9sJY/WkTbUxaraSAsskuK2hBAiSdrvkmY8pphg2rd3lh4E7oL6DTDfkXO5OT5/EOorhmOkOXZV4l0ptwFT2xl1llP39uFZGAUnNNQJZU1rehtGClZkTjPHCSUYm6ZJmqVRXQRccA757DSlRdfQeGp7FtiPutCfxqP2uaGVIgYn6+jz89bRPNqHmmHJvbebY4sdHys5wu6V+VidkTVKIYQIZI4yx1pnC27ro3tjqxevW5Wb7qmEENQs4yLJA3zCh+3qkp307+XOEvQu3nl1LMy319D75yh+yVip7dyJVrw3kgZRjFy5otm2ttI8LsQOXLMT32N1I2nYZyuxeVlPk5fW+5ungIuRxl7XEOCaokizj+tAD2ZVZIE5tr94F3BxF1wJ871dpD3mRuP1r7TQc5y06CrgGqRTZXThfVvlo+voiqN7yGfDa9inYQgR6CNtR1izZDAYDEavwBBGn9Esuy3DMhgMBoPxU0ePflka9mDhTaZygLxCe2cjln7GNu01x1kxWcBZhkwxx2qHgucvpKiyq5R26Nklq8xxbupA4MaHoD3Bt5dKkdljFwGnpUglXB2Xxyfvp7LgkGiMtPJYqFt5QFeWtb/8Acxv+bjQHJ89HLtXnBlKy8CzNn0OXFwpRZoFrn8IuMA/H6Ddnnk7cBFSBWv/Y7OAe6NwNMzHp9Bx6G//ETg9lcqZU48dBc52BnVymbbpfeCCL7nDHBvFW4ETNcUw1RKphFb5/nvAXRZDZf5Vl2Kk3GGv1L0jbRpwVi/Vs3y2GODC7fRvwi9jpgO3sHQnzKOTyHKk29E6UzaRIt2W7K4C7n8fp64jDR78l7LcPUSNsFPtIXLp1QiOAK5TikKMaMP7b/CqJ8xxyKJrgHuzjErLlyZiabm8M9UcB12F90K70t4iMZRKlhFb3gbOMpJsDknKMToEfVC8uQttTfHhTnM8PwfLvmBHEUKMTSFp5aXDWAY/x04PQED5oSK/v6HhR55VOsbPmvB8L3RRWXT/JQ8A51NKxoMsZEHyvPM4cBGLqYR72JsAnCF1XfGOvgi4I5K0NDOSxja9H1lHxL9er/9WcBmWwWAwGL2CfmUdYTAYDAbjPwJe4MNgMBgMxqnRl35Z9qhFV2hKnjHk58+a87VjqIXW8RFYb8/1kzbij8Y2SI2SphNjU+rvOmlPe1pQMxmy7RVzvHf01cCNFdgi7PU60q0uzcCl7P6NH9HbzbsRuI1lFI3mtGE01+SufebYl4V6mhoblxioN8e3rcPYticTSE/V25CzjZlnjjtC0HLx+1Vkl3goCi0H1gyp9ZJF+TeQErc37U3S21aNRD3RnjOcJj4lmm0pzVddiUv3W510vkPtyrqx9W/C1BJO22qZQ4Hzrllijq1RaLNoOI00U5fyHsVNFJWWG412nA4fXf+YorW4byn5MD2ok96m9kAq8JWY43caUReNl+waIxMxGy2yjDRcPQ7tQKqGaW0iC05HBD43QQYd48ZqjHSbFE/nw9qKLapqQ0mHjj2M0YeWJFpPEFCe03o/6nLydX1hB2qPN7vpdW0jZgBnHKf1C/461Ewt8+n5szWUAKd+bnxWRHruwFg8xy1dUoRkEN7/+RbSN+tfRj0xejJp1Kp146P4+eZ4YU40cCeUCM3BLXvodVyofTZF5dC++dAOZG2lZ1FXNGpPOLUkq5ciMs+cNU3s3b2zX7Toyh483Hjo7WU9/rsLh6d87xZdmqYtFkLcL4QoEEKMMwxj+3f5O/5lyWAwGIxeQS/9stwvhDhXCPH37jaUwV+WDAaDwegdGIbQf2TN0jCMg0IIoWk9+3Heoy/LHEuL+DTkC3NeN+4P5rimCbtQ5Glku7DsRHtEYzaVGmOLsCz0mzqyhPz5NKXrwzQq9XbNQ8uHeAvLK2dvp3KerwRLKJ75t5jjsDa0AEw9Qsdn+LHUoo2cTmOls0JdB87/+E2TOf7bOKUMHEndO9xS1wEhhAj6iDrH1y/EzvG/OfA8cT9/BLgYB91w/o+eAM523h0wXz2BEna0wXgevS6yS3jeRCvBC4VUhtZKbwCu4yOyzniUBJu4W5Rl90FUbrJtRcvN/aFnm+O7JqHlqKuLSt1lLXi/jXZQ2dtoRxuTS7JjLA/Bys0cgV0o8qTmNZqB1+3VgxT3eNkgtHw0+qhkL5ddhRCiPeM0cxzcUQuc2j1ETuZR7SG1brrHJiXiOfZ/+YI5Nhb+D3A7T9CzOGnIPOCqpG4lh09gB6AFWXgeA1JhevAVmFgVKNxsjq3uGuAsUqn95yewfP+oZPmJUc63X7GBRwdRWThW6bozYAM9G868kcBpEXRO7Tc/CpxPsqcUN6PssFinUnNJB3Y1yo3Cc1MfQvasyD1LgesKo2Ou8WL5ODeW7vHt9UonG0H7M0DqJGPrR+54Q3xv60ispmly+fQFwzBeOOnWPwD4lyWDwWAweg3fswxbfyrNUtO0lUKIxH9D3WMYxif/5v93C/6yZDAYDEa/gmEYs3/o1+QvSwaDwWD0Cr4tw/YN60iPviytccki7Lr7zXnL3dea4/EPv4wb10qdPaqOA+VOJe3pxNsYm3btPS9KM0X76CAdMP88jHA7GI7dBAbNIQ2p8L4/AJcbQ10Ybpl1L3BPbydrjJ6Fv/IDPoq0kjtwCCHEDS/i6uNRg8n2oCvd6dsknTJMuQLrJ9xkjocq9oiKy0hDHBpAy4lWSLFtLYtQ6wz9GPVce1qeOXY7sO2aS9Ji7Zf8FriOeaQTas0YE3eWQd1jNt86CjjdjtqzW7JyhI5D7evBVrIWeK0owGe2UoSgCB8EnBxNZylSNMN8sjJMXPIn4KrPxW4SCR6yDpUEUE++Opb0Rs+KD/HvBtL92LV/M3D+NaSD+65G/bbCjbqk3D1EjrATQojcxZUWjxcAACAASURBVBRxKGuUQghhm3+9Oba0oA6fF0vVqLBG7NYS6qAOFrlRqLu3+FGnC172pDmetH8TcG5Je4ytw+ddT8g1x8+dkwmcrJnu7sC4u1nN38B8ajjxug+jCF/PoPUMM5NxjULaYbImbO3C6MnhCaQh5ofg8bdayHLj8qOeKN/DQggR23jIHB8feDpwA1oOm2N/WB5wZZ10j1e0omY8torOsVFAEaGagTa1Pg1D/OgLfDRNO0cI8bQQIk4I8bmmabsNw5jXzZ/xL0sGg8Fg9A7+Dwt8vv97GsZHQoiPut1QAX9ZMhgMBqPX0C8TfIaNGGUsXbXOnCe66Lu22aOUJcqkUlQUlj4Mm5QMUnEYODlRpcWVBFR0LVkX/JGpwFnrMIlGTgrRBk0BrjOIyjQhJ7YAF6ihBBVr3ljcN6lE2RaNS+DLlESPgUFUsl2OgSpigYvKZEZLHe53Hu2rF0+paJasEw6lRBlfT+fm6RpMvrl2JJ7Hz49Sh5Zzo7GcK1qp1GhEpQClh9ESfFs9nu8dVkqmGdmA59ToxGQUzU7L4A0lJejjkAnm+PQj/wSubiZZIhKdeHJaAnQvRurYLUYue4dasNQmrGgBEJJ94XgrlrsGSK1dOpV/DrsCdL1bNSw710vpTnLSjBBCpEfg+xdJFqzxIa3AaV56DzXdxiqVXuXrJIQQm2rp/ZNC8f12VtF7jEpSyq6KRyFCahSt3n9v76f7eFomlkhTHXSNH95aD9yd9m3muKQAm63Hh+C/5Wvb6dzldGBHHF8RpQRZhmPXndeP07W6KhHPaVMkWTdWFjcBNy2DJIoixRoXGYTpRmWtxM8z8DOtK4M+R2xevDf/uodsTeFK8tCUDDqPbi9dwyvOmCkO7t3dLxJ80guGGne8srT7DRXcMjHreyf4fF/wL0sGg8Fg9A44SJ3BYDAYjFPDEPxlyWAwGAzGKWH0oV+WPdIsC8LDjFfH0RL5hy982BwvuWQwbPtNJdXwfTrqSzPdZLNoyZ0OnKwpHcMkMvHiZuos8oe5ucDVtqNm6JUuQJgDu4dsqSDdYkQC2gMyu+g9ykMygXtvP1lZbivAf2foO5fD3D6QdIr2NWgzeDr9MnP8q/GoJ1q66KC1kl3ISV04SsIGAneimc73hEPv4N9N/xnMrY2l5viQIxO4REknCrXidbMe2WCOV7vQHpJ031XmOP967EDzaRz6g2NdpJs9ufoYcO+cT9pnYbsTuCEW0lPVDg2abOtRoggD+9eb4wP5ZwNXsPMfMLfOvJwm2z4FrmHkueZ41XHUtyak0v44Fa0vzkn3orVwDe63C21FRiTdD29WuYCbm01a+84q1L7yYmnbyjbUgSfE0/1vK98HXEsqyT5hx9YB1zBgKsy9kk7rUz7g0r1SNxGbogNL0F2oZz67m/Tzm3wbgfOcthjmQfu+NMdNG9YCF33xz82xf+dK4GzjpEjHUuzW01W4wxy7xqHWGYghXbjmGYx+TLr2Npj746iziGXPl8BVvEeRjol/fBG4psfJDhR/zgXANaSOM8dRAfpcmDBzntixe0+/0CxT84caNz//YfcbKrhrZh5rlgwGg8H4acAQRp/5ZdmPInkZDAaDwfjPoEdl2JGjRhlrv6ZS3NoTtOx5QRumltTnzzHHpS1YFspbRh0zQi/Acoa1Xkr/0HHpfmsa/eouUToEDIzBkp22kbqONIzGck5DJ73ukI6DwPkq6f1XxGIT2w4f/d254gBwRlwmzEUVLW2/vxa7Z9wfT7YLPXsccBYPlVu8q9/C9z/9l+Z4eRGWAcem0LJ/dcl/QqAR5retpflfFmAzYqubLACBCLSONErWFSXQRCRKXWYCGzGVyZaINgdLdII5NjqwnFieTOcjrbkQOD2YSnhy2VUIIbboZCUaXYRL0bXRVIazN2C6jL+2HLfNHGaOa4PR8pTQRn/bEIHXNGITNbj+LOUM4M6KkY7RgtdGTXc64aNEnSwvNkrWyyklpl3pHiIn8xQ5M4DLaaQuM/5UbLZd3E4l2s8OY0eUW7VtMC/Ko/OYY0ON5EAXyRnD2vYCV5lAJfsgG1YPww2SD2oD+AzHWz0wbxZkyTnWiFaOsaGSPUlpfn7vZnpW7p+GljObJEnUhuGzEC118pHlESGEMA5gybppGNleYo5/DZwlkuST+miUT6J8tG+tDixRrz5Otq75UvPpaVMmiV07+0fz55S8IcYNz37Q/YYK7ps7kMuwDAaDwfhpgFfDMhgMBoPRDfrSalj+smQwGAxGr6FffllaPO0i5Dgl4c9vIo3DOwaX5MfXkyUgoRP1tcBQsp8YVoyN0qykoVTFDwcusYwsJwXp2A3dVocWhKNDqJvFAAdejMQW0gybV2CersVOp2T2WDwm+VW0SrQu6A5c5u/OI73zdwNRezU6JZ1K6Q4va1jOYZOAa5M2vSABOxQYx0gzXheLS/6TrdiF4sEFpFtpBupCgTDSE+2VqD3FS/piVcppwPnXo13lu6Jj+1p8ndPJcuM7uge48lFkSfEpS9NKpNi24RPRulLRRraijCS0ODXGYLcaWc92Kp0lZKhSv3XETHM8wYmxccc8pOdZFKUpw4m2pmQpUq68E/W11CTS6auUbiVy9xA5wk4IIeKySdqpaUdbTVYIHe8tozEmr6wDu2c4Ndr5Uh2PscNH+xNIwM4aL24jXXjKAOwIMi2WznFUED5DW6vxJFs00inHNeIaCT2SjrHVinawvHg6Zkc1rlHY5aR4zXzlWhyT1lrkhgYDZ8nGz59N5XTOF7ZhhOTxFHqOMwRqrWUGfY6kH12L7+Gg9yiR9sX7YyeP/wfRl1bD8i9LBoPBYPQKDEMIP39ZMhgMBoNxavTPX5Y2hzDiaFn6xiBaZj9GOd4jDrILuAVaEML/TE1tc+7HstiOW+8xxyNfeAa40jgqS2w7hqWmRXk5MM/e9bk5fqxzGHC1rVRuue1IGXBNx6i03DgVl4tPjZfKUBHYfDitChsOh0nn6ZUTeJovr/3MHP8tcgFwZ+RTKcyegCujrVL5xROZBty7UoPlu+95F7j3q5bA/Ppxd5jjF2/BUm9FK53X8al4bRIjqLx07l+xMe/yJGqt4sotAM7IHAFzuSgdPO8y4GKkTjZqR5IMP72HHhIDXFYONfH1vPMgcsPGm+Pazz4BLnoMltOqhlEJN9+B3VICxVQWjkXnCKQGxdmxnPjkNrLq3DUd/1D/6u8w7ywhK0PQVZgaE5A6jRw+gWV4uXGz2j1ETuZ5uRWTr+TSq6ZIApldaKv50k3bzjewnJkuNXjWg/HaXDeWyqKH6nG/D3dReXNQC1qF4kNwXyOkMqk/cSZwhRcsMscj/voIcFMz6HUCfiyDHqqha3y8Ge1IcwZQ1xFr0QbgtKAQmIc6qLxsS8FrnCno+h/pQHtIno0kKvXenPbL6eZYbhIfZO0XrhEhBC/wYTAYDAbjOyHQR/pZcoIPg8FgMBjdgH9ZMhgMBqNX0JdWw/Yo7m7YiFHG0lWkfzRJy+wHFS+Dba2ZtCS/Phxr+FE7Kd7IPx6j6Jx1R8zxBj9qnRPDSe9wB8UCp/6Ub5eW/SdZUaco8VCsVlb5euDc20mbCFmMUXx6ENk6LFIsnBBCWKqOwLwjZ4o5Vs+x00LzzjdQlwodM9kcaza01bRlE9fYiXaU2GDSc7ZWYoRcdDC+Tm406Zu2lS/gfkuaWfilvwJOSLqcVrIbKCODdGE1GkxrR+uQZqeuFLoHdaIT8aTTpjpQs6zX6brFHfgCON8o0qzUlfWdUjafGgXYodhDiproXhkdj90zNC/df00a2hPC171kjsvGXwXc9krSgTccqwcuMRItCXeOo/u63YKcfBwxTtSt3JIjpMOHJ8AhaVxRezEKsGwg2UPkjjtCCBGIQutKrY/uo+SanbhtHD3jTXbU5aL8FItpbUUb0zEX6YmbytBy8bNUvP6yrSmg4b/zPz7cYI5nZEYCZ5X8Oh6/YiML0PXQ/Ph+LaH0+XNCiexMj8B7I0zq0GMvxW5BgdhMc6x2XZGj+bQuXIfxZSW95tQMspjMnDq538TdxWYNMs568M3uN1TwysWjOO6OwWAwGD8d9JVflvxlyWAwGIxewbfZsCcP//hvAn9ZMhgMBqN3YPQdzbJHX5a2tloRt/o5c546kErGh3IXwra5B8kzFO1AT1brGIqic3di/FZyKHm5JuzDjuNi2GxzGFG+HahAE7YXik7ONsdv1KPv62LJkrk5CmPbSsaS9nah4jsLSIuHtf3YhkdLyoS5q5Ei9WStTwgh/DG07f3xFwP3Zwu1ZTJisbVVeAVpIY60UcBZDXqPWZZi4Hzh6FezlZPe1DTjWuBWFJO+eNaG9/DvJtF1e83AKMJp95G+6fjjq8DFxqIH1iHFH2qlGGkna6/WBvT56WF0TY9kY4sqQ2rZ5lB8aJlBFMXW7A8CLlpHfdUbTlqkpmOkXL0gb12kA7XP4nFXmuMgRU0ak0y+x4W5GPcWbMEPiu01pJkmhp5clw4IfJPgZU+aY/vpqLW3eOg+lttsCYERdrKPUgghhoei1h1vp/PhT0YP7tYGOo4J7RhFd185tTo7f2g2cEMC5J3NiUVf614/tszSG+keHxCJ0XTnNawwx7ZYbHu3ppOOa0oytgFzG9Q+64ODuA7hCi95tYNz8H5T8dxO+vy5LQW15hYnff5ENeCzWRlCx3iiBY9pfjrpokda6dz3r7g7LsMyGAwGg3FKcNwdg8FgMBjdoN/+srS4wkXQGCqF/r2ayguZdrRnhAw7xxy3ebGcebyMlkjPT8FduOITKkO+hg3fRYVOZbBnhl4B3M3V2CEjaff75njoU7g02fowReq1WTG27tyj/6SJF7ua70ucZo5zpFKyEEKEWvEY9zZQ2WTYwfeBuz9Ax/xYUhFwehZ1DJGtEkII0fHgvebY/7uXgDOkniiOvz4JnPdujFRLWPExvebFWE5dHEVL8FuzrwOu7cH/Mcdnxyv2gBuvN8dayyHgHt6NHVo2H6P3uGjcUOAuqj1gjhd9hWXQj0dSqS12+HzgjC+fN8eOMXOB0zqpRBsplcCFEKLUg9F06cX0HiJnLHABjSwJQdX7gcs+SLKAJSQMuJqVq82xczQer03Z15xo2r+ILW8D97RzujkefAXef5P2UzcgtQztkz6McmxYdpa7h6gRdloNlgWh9GrBMvToPa+ZY30aSgv3ZtJ93GZgaTdgITuIRekclBaO2zqs9J6HGtBylDv+QnMcrGH5esYxOjd3rUkG7g+zqSx8aR3akeomUhRjomI5ciufabclkwWlKxHjNXXJnhQ4hraSlEz63LxRud+XLqTPu6xvPjXHzjaUnPo0+lDcHSf4MBgMBoPRDbgMy2AwGIxeQV9K8OEvSwaDwWD0GvrKl2WP4u5GD84ztrxFbbOOJJDtIq8OrRwN6dQWSY7pEkKIusvONsfD3sZ2UpZiqdVVAi4z74ygtlTqCiqb0oLesZF0yurRFwIXJGkfEevR5qC7KXLryJSbgSuIIe3FUYGWh0CwErHVSa9zOBR10WjJAtDmQX0lIoi4iL2fA9c6jKLJdlXjMvtxyWR52FyButSsoGqYr+pKNMdJYWilyIui5eonWlFDyW2jFkrF4XhMoQ7ab++fbwEu5u5nYV7lptfNOLEWuEdbSSe+fizGHUZ0SUv7bbjfsp6d3obRg40x9JoxtfuAcyehZhvUQe+hh6KVwlZPy/71MtT3DC9pT5VDzgJO1hDblXg9NX4PrDNKpGJgK90PgRlXAidraF8cbQDusmSK6dtvJALX4aP7b2wY6oAqtrTSOR+95w3grLNpf2zleI6bUkab4wfXoHXi0UyKv6tJnwicy47nRp45FV1SrCd91z3xZ0DJz0q12wPc4jzSbCs68f0yqumzyJON+ybfw0Lg/R9zdBVw3sFz6P3b0UYmRzqWdKFGGyl9FkR56ZpOmHOG2LF7b7+IuwtPH2iMu+Ol7jdUsOqWKRx3x2AwGIyfDow+8suSvywZDAaD0SswDCH0/vhl2VVVIwofIlvC4If+YI43h46AbYNaqbww0nMYuLCFlD5T3Imlh6wcKt9qSvcKuUNElIGdNQwndoGQcVRZZj5yGXVSt88+A7idYVSWwz0TQgTomPQgtEOISiz9GXFUMs7rPApcS0iBOVZLTdEVO+jt8jCJREZWFKaEyJ1MZjRgJxU9H0tI0yPpslf5lSXx0jnOdGGpK2BQR4zoYLx1QgJU6qpR9rW4GTs2tHqoFJUyZA5wZzbRtqFqGa6VrmOVDbvOhDqoKuVNxBJxlFQ+bVOW9au1rGMBuq559VgyrAohL1NiJt4dB3RKgolSXjR2D1l1Ysadg6SS7nSiVeqWo5SBg0fMMMdWN57l2Lrj5nhaplKdkt5jWCNarAIJebRZMCZdtSj2CDmZR7WHWKXSqz8V7TFyp49Hc7DrSiBlpDmOWvcycI7RaKsJFFOnG/+Ys4EzppLNI6INO5uMSCR7ilXpFiOkEvnKYjyn10ZS2fmdA1gSH5eKz39G0VpzrDlQIrBtp+v/Tehk4C6JJIkkS+lIcqyT7qnIYJIZhNafTAzGv3Rl+m8F/7JkMBgMRq+By7AMBoPBYJwK/bUMy2AwGAzGDwVDCGH0jQ5dPbOOjBlaYGz9iKwWsiViQBgKNR6Dlj2rmtXQAHVkb43GjhgRDaRvBhTNxudCTUWGkvAlOqVk/mo36kItXTQfHYzd2bV62rfiuNHApYfSMekrcLmzLQ5tDu4928xx43n3ADfATcfoS8BIPU3SlyztaAE4pNP5GBCJndrlw/coXQnCOtA68kktaSpnpqD+YdjJHmOcQhs50Y4n3P7wjeY4/corgWseMAnmER2kKWketMBYfKRLGgHUTH1ppIvbGkuBa48kPdHVjscrd6dXbQ0iGKPpDKlzvdwRQgghkqvpmuoJeN9qHtLQ9+oJwA2OoWul7rdRhXp25yDScB0C71vLrmU0zkRdUA+i4zDsqGdbulrMcbU9HrgXt1Fnl+vGpgKXYLTC/Pdb6XXunYwWlDaDjlG9/2JtZLPQFcuPvKndi+sQVlWf/FN0ano4zJ2tUrceKz4bncGkb6vWnWgn3ce2IuyWsjOC9NQRpStxBwZNhelbxfQZd7EbOxIVDVxkjnMcuH4iEEza57/YSrz0nOjSdhNnzhU7du3pF9aR0NR8Y/jNf+vx331z16wf3TrSn5RiBoPBYDD+I+AyLIPBYDB6B/1Vs+yyBEHpNWXZY+b4xMLfwLZZUtkir/gAcM3VtHx82ZRfAHdJMNlFHisKAe7CT35tjkMfUJaZv/0AzLfNvN0cD4rD17FL3TO8D2OCjzeEykvZ9Wh5KfvzX8xx2o2YUmM4cEl6qIVKtq5Q7N7g3UZpR+5P3gIu+syLzHH1P/EYw25+3Bzr7zwIXFA+WV4OpM4Ezu3BUuMAyTqideJyeWsTldoMpWTmP0pNowcMnwWc9pv7adyCZdCQ9f+AuU9Kuwm0Yhm865w7zHH4zo+Ae6+dmmFnRmKJfkIzlc9rQtKAk6uZTZGY2BOqNHFulRol7zzeCFxuDNlOXF14TYWg6//S5hJg7phBSVTxUlcRIYRwWPB1ytuonPfmrkrg7umiUuPPT2C61XPn0Ov+eSOWeu8cT6XXIAOrd1MGUDPqQ/UdwCXb0YIhN25Wu4fIyTyqPcSXRXYwix+7E1l2UCqRNQuvzT1vYPPvv1xNXWAK67GcOUqjZB7dife7LAMNbdgK3KdWKmefnlwA3Ieb6fjtw9HGMtRdBvP4UDrHnn34ueEaSolO1QZ+TiRKKU0BA1PAHjxAXyKNklWovA3LtX0bBq+GZTAYDAbjVPh2gQ9/WTIYDAaDcXIYQugcSsBgMBgMxqnRV35Z9sg6MmjYSOPNL9aY8yipQ0JyAG0OliqKf9OTT26PUCPtykKyzPHualxKvkg7ZI6N2AzgAntWw/zIkMXmeLAHO7DLWlxXTBZw8hJ0/7YvgbMPm2KOi4LQVjBAQ32rzk7L1ROrdwIn2xXq3nkFqNj5tMxc7cIQ46BrZT2yATj/wOnmuLELLRctSmeTvAban8OPPA5ceCZptvGzUZc0xpxpjvWvXgCufdb15jigrPiPa9gP80AV6YvWGLQg7A4lDWm4htrncjfpa7NS0B4g21ya/fhvQKnJjKhRlufnKBacW5fSPfa3cXggyzrJHuRTHvC5WaQ3eRWuoYPeM3H5X4BrWvgrmFdIMZFbKlDPvWFUkjlWo+jk7jVphUuBe9Y6wRzfNAx1MS1Ato7DXWg5cSh+rKwAXY9AONpjbEVbiMsYCZxP0vPtWz8AToymTjq2hhKg2uPwc2NDGVlZhijrEOR7vKAJn7fmNIqNjHBXAGfYJV1esUq9XkyveXou2tbiOlBPbZB08tgW/Ly58ms6x/fPywOuS/LOZEbgvSh3kpHjPfuTdSQkOc8YeM1fe/x3O/+4gLuOMBgMBuOnAcMwfvTVsJqmPSaEWCSE8AohioQQVxmG0Xzqv2KfJYPBYDB6EYZh9Pi//yNWCCGGGIYxTAhxRAhx13f5ox79sgxqqxE5q6iMZL/gTnN85NqbYNuBDz9qjr0huMzfLqXwt404Ezjtjz83x2fcfi9wbaGniZOhY+xFMM+TSpZ+LyaTWDrJHuF++g7gHFeTBcaWisvz5RSN9C1oh3CX41Ly2AIqJ7YcxNSYunMp0Sd7IXZP2B5GJayEP94I3O+m0/m+aSJ2L4iWqnKxAlNxIte8CHNfOJWUjEfeBC7h+ApzvCFuGnATVpHNxj4RGxxHSuWtwN61wNWcdgnM7XFDzPGnh7F8f0kF3RvlI88Hbq6g0pe+D+1IDQXz6RhasAOMXM7LDULrwvuHUAZ4yrXRHBeFXA7cvGbi9Bbcb2skpT1Zo/B+Sz+23By3nvlr4CoasRlxXAhZMubnYGcVuUwZo2SE7e6gbQMF+EzddIDOaW3gXOCiglzmeFBLIXBvNOBzmxNL95WlDkuN1ZJkoHYPsU+j66/aQzTpmPwxmcA5fSjDzDPIknE8gF2OHllFSUj3z8PkrTapifn6ZrSVLAqrNcfNUTnAXRNNz22dBa+FxYP3je6izxu5uboQQrycQRJRka4kljlJylLlEhma/AXRNyS+74wfO+7OMIzl0nSzEOL8k20rg39ZMhgMBqOvIVbTtO3Sf9d3/yf/FlcLIZZ1u5VgzZLBYDAYvYT/Q/Pn+lMt8NE0baUQIvHfUPcYhvHJ/9vmHvFtZMmb/2a7fwF/WTIYDAaj1/CfsI4YhjH7VLymaVcIIc4QQswyvqMI2iPryOiCHGPzP56g/5FMy6CfLsb4q5+PSTbHjpJtwLWk0j8I1G4h60tpeficFHxNawvFf5U99QhwKXdi/JsMWaMUQgitvckcq13dNZ8Um+XApfS2Znp/3561+B5TUTO1tFI8VVt4ujgZQnSM7bJI8Ve60jk98PUS2m4uVh3kY2x88U/A1V72R5jnRdES9eIW7AiTEU6c8+h63NloqbOKIjTUvPq0OBkCNz8Bc7nzQ14ndt04HEy6UX6LYjmJIw35myb8d96oRLISuOpRs5QtAf441KVsivYmn/NGG57/MCka74iiNbrsxKWH431rP/aNOTZiMIpPtm4IIURzRKY5DrahSmIVdN78ioISVETv0TZgAnBWjR4ypx8j7bY20PMfH4LWhSyjFub7/aTbpSnHaLXQe4RJ0YNCoOXnnjfQ1rHu7um0b4pGKax4jbs06ogjf04IIcSs4xSNqLcqevJZv6SJjtYh2WYUbDu5G6O0Fa+TzYLbyjab1AOfAPe8nfTcmQPQghIfQu//+RHc70X5tK0cw3j2nGli3+6d/cI6EpyQa2T97InuN1RQ+Jczv7d1RNO0+UKIJ4QQ0wzDqOtu+/8f/MuSwWAwGL0EozcSfJ4RQjiFECu0b/8hudkwjBtP/Sff4cvy/wmn1wshRHpiXDdbMxgMBoPx3dAb2bCGYeR0v9W/otvVsIZhvGAYxhjDMMbERoZ3tzmDwWAwGN8Nxrdflj39rzfQozKsv61VNKwmH96h86kWf1sa+gz9XorVqktC31NsqRSNVYfxU1s9VIaek4aRWs2RFE2XfO9TwFmaMX4K9D4lxkrWTMMbUTNr+vA1cxw5FTXiQBb9Xc34S4FLbSyGuezZiqo/CNw6P2mYU9zbgTNSB9PYie187Kn0mnoXaja73aQ3DRs9CrioENRprA2kvUYo7az09x42x63n/i9wtb8gv1zm4oXARWSTntl0BO8Fp6IFxQfRvCt8EHBf7qB9SxqJsWmhbuJGJaYA5/aSR82h+PX0Va+Z4/YZGG8YHUDNVg8iH15sUwlwR+10rmKC8dGJc5FfrtOPD7MllXylrVa8ptFVu2G+upGCRMam4D9Od1SRty86CDXDqeGkJ9YqkX4Djq8yx00F2GrKopHvVPb8CSFEwI7Pn95Ir+uw4jMlr30IFOMxiXhqGSe32RICI+xkH6UQQrjTUJIKMkgnnhuH181IIv+oTVmjYEjrAOQYTiGEiMwm7/aOOjxvY8rIjjcoAdcdvNKCXtrLBtHnna+8CLgbT59jjq2VqNkGXHRvXBFaAtzeVrr+GVIUnrWfGf76ZT9LBoPBYDB+SPwAiTw/CvjLksFgMBi9AsPop82fbaFhInoKRaCNTKCorMJWLG8VlFJ5Mc4RBFxrBpU+ggfgibpDklHtlXuAiwiVIqcCWDLRy7CEs0aKapsVjGWZEEHlnIP2TOAGXnKLOW58A0u9MdJxpLmwnNa87H2YR551pTk2OrBkmh5HS+CFslpe7sgi20iEEKJxDZWFwiuPAzd66CRz7PPjMndLFx6/Zz11fkg8bR5wgWwqA7vKsUQcfvttNNHROrLpLoo4m/TVO8D57Fg3Km6lYyxpxnNzS6jUrcaIBs6QulcsL24C7iw/3SsV6RgFmCKVrx9ag+XyC4Zjauw6gAAAIABJREFU95iAVIobV4/ltHeb6XG5dEQycHd+KcWtzcH1AzU62VqS20uB8+zfBPOzZ5A95iUlCnBqJkkLsUoZWPcRl+NGaaF+w1pzfCxhKnDjGjebY3/iTOACBl63AZFUpj3UgJanYTFUFvaPwQhH+R0L6/HvsiLpmVIj7A4p9hC59GoEYWyd/4vnzXHQWJRPZElm3WX3ADf467XmODkMj9dfVWKOa5avAO7smAiY747/nTl2zfwFcD43PSs1VpQdYlvpnCa9jRGakbdStOjHh+rNcXMnfvYxfhzwL0sGg8Fg9BpYs2QwGAwGoxsY+skD5P+bwF+WDAaDwegdGEaf+bLscdzdplcfM+evW8iicFUSim/yMvudVag9nJdH9X5bE1o+mj94yRxHTMQWUU93kZ52w2jUjJ7egq/z62xaEu/btwG4m1pJM73s0Z8DF5AsCIMkrUcIIV7dSdaFOwoEogp1os1R9B7jovBmePEgRY7dkIn64rs1pAPPyMSu9hYptmxFcSNw1W2kwyaHo0Ycfd4ZMB+1i1pNrS9FPXNR3Upz/BcNY9N+nUOaUSAUWxaJXV+ZQ1smnpyDwdgdvqKVrs3He6uAe3ocHWNNOLZIa7r5QnOcOG4gcKHX3m+Oq+7Fa5r0wN/McemvrwIu7Yk3YC5Wkvbqq68BqnYXXeO0s9E6c/Rl0mmbT+A5HfspacRddtTa9tZi/FzWG3ebY4sd7SHFFz9gjkdsfwm4tzIobvGy1tXAWQvoOhoOF3CGjfTz/Zf/DLhDD7wG8/MaSLfrHH8hcMEb/mmO/VMvA87ZSvYwOU5SCCEOWsmCIbfZEkKIF6MxJtMykewh/uWvAGdbSAEslraTJ5jt1+NhPqTqa3PsLUGLl3MCtTpTdf+6OIzJjDpI6wmKMmcBJ0v2aYVLgWsYTvpuQPkojt34mjmWv1Am/+pxsfNYab+Iu3PEDjASz3ig+w0VlL1++feOu/u+4F+WDAaDwegdGEIYgb7xy5K/LBkMBoPRS+inZdhROWnGhsduN+e+OTeY49A6LGFUR+ab40glGaRaShgJKO+faaGSraULu5HvMag92dCyVcAdz8Zkkiw/lUzVBB+5FJMQgv9e8Eors5K1duCKvFTCGhCOx+RVltnLHRT8y/4O3PKh15jjyemY0rKlnI55XgyW6PQgKl+rZaFaBx1TvKcauMDetThvIH7LmBuAG5NM9oxPlS4Ii1NpCXyLE7snRPhpvzsdeEwVbiw1lzRTGfaLA7ivj8cV0nb5pwOX+jWVU4OGYIk4EE92Dc2DkoBhp7K05utCLkiJcCykspwlYzBQehnd41rmMODawqicGLwWS4TWGLpvtWxMV1ItUN5Iki/UslxpK5XBB9ZuAe5EMp2PNIG2msBmKv1ZpVKmEEK02Omeim44BFyN9AwLIUS8m7qJ+KMx0cYdoPs/ohPL14aFnjG57CuEENZK6XrHYdJX0qq/wtwx7QJzrN7/8rOhh2GGdYOfytnRTqxe2hpK6O+C0Q5S9fhvzXHiHLTVaEPQgiOslLDz2G68/+5MpbJwXQLaY+IaqLOOLxFtJdo26l5iHUBl39MWXSJ27D3QP8qw0RlG3Lx7ut9QQeWSG7gMy2AwGIyfDvrKL0v+smQwGAxGr8DoQ2XYfhbJy2AwGAzGD48eaZYjRo4yVq5bb86r3KS35ERhl3VnBcWPNcTjMuumLvqXhF9Jb5A7kGce+RI4Y8gMGitL4NUO6F6N9sfpReuKR9LUlIbnIriWdBtD0Tr1UNJCin6NvULT56OGZk/LNceHM+cAlxRKP+hDlSg4WadyNGP3Dj2EdMIOazBw8mUMPfAVcL5h82FeJWmIcS4sLrikzh6ecOzsYV3zGu3LjCuBO3ThInOcu+RTfM2SzTDXQqQODbEYkyi+ec8cGh7UF7tmXG2Oq914vcOddB4L61DrHRhL90piVyVwFc4kmEcH0fl4vxAtCPNzMH5PRkIT6Zm6E+0hgUg6j7Vdp5aaYoJJC7caSrcYuXuG0lkjUE62i9cdpwF3ZQY9b7/bjnFzefG0r1Mz0KoUpqw12FtDGv6MTuwssiaYtLgRiSHAOaSHrLgZu4WkhZOeWNaK2nZBNFpn5PhHTXne5fjFumC0lcXY6HU9FrRVBXXQawZCUevcXkXHe1oE7ve6BnxupqTQ82jpQM24M5hsViENaI8pCqK4xdIWvN+nJJO+q0na9sTps8SOXbv7hWZpj0o3Ymb+qsd/V/PhL1izZDAYDMZPBYbQ+0gZlr8sGQwGg9E76EMJPj36snR7A2K91Alg7j5KOxGhWMJpk0pmke1oD3CE0FL6zRVoD5lS+JY5fivtPOAukU+q0rS3rBNLRu8foESf3wzApdz6Pir1WeOw1LjESc1pz85He4SjiZbOJ45HW0Hw6BkwX3nGTeZ4zDZMewnRqRTW+Jd7gbszg87bc46VwF3USMvVP56LZW/hpRJOSTZ2XUj1YVkyLZhKll3KLWBpoWX/XzdjOdGaQ7aD6R4sbce89pE5Vkv77RlYFtSkJKI1Jc3AZb5I3VsKnn0euIjqveY4TCl1GgG6/pGpGcA1SmV/zYdlSI8V9zVoF5WQc5PRLhDXKZVwLVg+70qkJr5qab/mPrLnpNx2N3AWD97/XqkZsKHhtal/+XFzbL/5UeC2dlHp8SpXLXBGKXWouX8apmI5qql8HPBjGbDKiuVMuSx41xrkhqVQMo9Vw4487T4qkQ5t2Ir7Zsk0x+uV+60gEk+k3LhZ7R4S/QWlCxUo9hCPQaVXp65YhxxUMrZseg+4tOHnmGPNh/fp1Hi0mXQYdP+9VIifTddIbiHDiSVqWXaSS7lCCGE7Rh1pipPGm2OP0S8qsEIIIQzBq2EZDAaDwTg1DIMTfBgMBoPB6A78y5LBYDAYjFOhD2mWPes6Mmqk8c066mjQrJNuFhVA7eWYl+rvam/P/ErqAqLFYWxWVyzFltm9qDV22KjeH9qCHeflSDMhhLBKy7c9OzAazzb9EtqupQK4QFiC9CKoC5b6pbi7pn3AqRFb+iGyS9QMx4ixvTV0XDOPvgPcxoKLzfHkw+8CZ51AHQrUKMAjNtKQ8lv2A1cWi9Fs4Q7SV7xKplrsCepIsj0CV2aPCpe0GEMHTivebo73P/QscHvufhHmHZKGNSYF4+aGxtF982UR6kRnukiHDoSj5cPWTJyhKZqOFLcWqDqOVEouzANSjJulHeP+5HtDtnEIgZFuh3yoZxVUrDPHbds3Ahc+ETtU1KZPpPdQxM/IPRRb5xtzNnAtHvrAcVjx74I+In0zeMb5wO3RKKbvUD3GOy5OQXuGO5giFV025RzLawiU50a+V5YVo9Z9egLZOlTLRX1EDswjbbQ/zX78d37MUXrGtUTsVqMHkRYqa5Tfvilpz2q3EtnyE1As6bYAap8lHfRMZez7ALhtWZKtKhp1yVg3fY7dhx8p4oE8OleGnT57Tjvjon4Td2cLTzJCx13T/YYKWlb9ia0jDAaDwfhp4NsFPnq32/03gL8sGQwGg9E76ENl2B59WXoCQhS1Uzkix0plKiMIl31nSZUYt67YE6KonDPhNWz+u/6XVBba1Yx2kNFSY+LDqbgEPk/ptPBGPdk+ogZiU9uFPio3zfsCm9HeMoNSQwbHYUpQhlFvjn3HDwDXfgyTOaxBdAKOpaFdYdo26p7hUMpiM9rodTuU5sMOqWR8OASbH+d3HjPHgeg04C5/dQfMpwymcuLvUzHRxnNklzkeOzoKOL+V0nY0P543uZPJoXtfBm7BysdgHpZLr+NIw24xupvKZHN2vwrc6nHU1HlKMJazfFI3i62NWKEaG09cRSg2ok5c+xzM/QtuMcc1FmwUnCJZOZaU4T09KJ7sElYN/6XsHUwJTiFtWFoWMXit4jqonPxZE5ZzF3TRfasm4eSHUInyw2K83y4YR6XemrABwOVLKT3Hm/HvND++xwcHqUx5ad0XwFWOu9QcryzG+/YaV5E5Pj1Z6ZoudetpjsKya7BSht5RR8eYHIZlUblxs30AdnYJSMlXqj3EMpAsGaqUonnJchX4CDugbJt6G8xPSyYZqP1QIXAjJ1Jj7q9LsQw9/SCllP1u3vXAVXSSRGKVDtdvxc4tjB8H/MuSwWAwGL2GfvnLksFgMBiMHwwGx90xGAwGg3FKGEL0mVCCHllH4jWncaFGS/YXFFK39jlhqBm6I9ASIiOsiZbvV734F+CSriUtwH8Iu8Hf76POHtev/BO+5u/RnhCx93Nz3DVyEXB7pO4JEXdfDlzOYoo488+/CbhbPiYt4u9no/Yld1wXQgh/TKY53n0Wvv9v5t0nToblN5OGoqn2jK0UKdc1Bu0oXxXR+T8vHOMFv5x6FcxH/XyKOX53Gib+v/M1XZu11+AS/I6ldI6fysDzdsFbvzHHsl4rhBB3jPo1zCflUReG0cmoyw2SdOKH1hQB91gCxZ21D8MIwWYp0i658DPgPEV03UKmngGc3lwPcy2WNHPvztXAdcwiTSmypQS4wHGK4jO60IJhSyKd0IhHzVC1p1RGkqYXr+HrfHiCbBaLY9E61BpBEX9dfrxvYn10jHLnGiGEONZK26aFYZcPn+L5CpeeqbrBeP4TyulZ1Rxo49oRTMf04T5co5AdR1rvNdHItSWi5Slo5yfm2F9VApxzEllpKp59BLjS6/5sjtMiUO9LlKIfZY1SCCGElX5LuF9/EKjQn+E9fcJHGrp6Hq1Sh5gKHa0r0UGkGZeqXVf8ZCuRr9uEWQvEjt17+oV1xBISbziHLO7x33VtfY6tIwwGg8H4qaCfroZlMBgMBuOHRF/5suxRGbYgItz4xyTqypH+NiWKhChNjGvaaZm3miiS5KZS39Q3sUPC/AeoQ8NdJcuBW1JB5Q2nFd9vrJIEIyfTXPEilnPnjqXl+vcWYOlDk5JIlnViR5JJ6fQezffhMu/iFYdhbkjvP+P9J4DbHUrNsNWSWVMn7c8C7Qhw73rIcnF+IiaIHJdsDtsqcHl6yrVoT0n4nM7rJwdxmf/iIdQR5pHVx4B7djKVms5a2gjc7c/cao6nbFwGXIkHS18VrWQ7afFgSsyoN+8yx/H3/g04RzWVUw0blvoMO72HXvgNcF3j6PjVe/H9g1iGPWcglYgd7Zjo4t9AySzOEVOBa4ohK09kE563fVYqkfoUA/ZIJ1pJGl4jWaLikgeAy4miY6zrwPPmkp6/oia8NzJfu9McJ9yGr2k46Jpai7cBtyd6LMyDpfdIDMFSo1M6r+8cwPN2qYfSrA5kolUoIYT+va4mFtW24zEOaqNkqoo30J6UeiU9j75SfG604dSFR1M68HilBueBd7DU6mun8xh6BXaLMZSUIrkXuUdJxZLPTUTR1/j+h8jWVbIMm6TnPvmSOdalbiWTpkwTO3bu7B9lWFesYcs/s8d/59v9KpdhGQwGg/HTgNHZ8JVv96ux3W/5L6jvfpMfFvxlyWAwGIxegWEY83t7H74rLN1vwmAwGAzGTxs96zqSn2V883fSPLQh081xjSUStk1pJH0h0ILL4y2htK0vHaOpNKlbu7WpHDjdJcWv6ahnWJuU7iFxku3hyCbgdDfpRAEpikoIIeydkgXm4Abg9FGnm2Ovgf/OcDWVwFy2jmhbsAtB2SCq0adbUF90O6PNcXgpaq26FJWmLp33zCGt12VgFJ3mQQuCdnynOd4cMxG4MUmkjZS1oZ6btOxxc2ycfydwnX+jedT4ScA94RsJ84uGkS5aWIca0sx0shKsLsWuM7OjKY6t0ooWiKR9ZCuwhKB+7ZHi5j46hNWbudnRMI9tIF0U7jchxNZOmqta6+wYOuc1VnzNBEO6xsp961v5D5gHjV9gjisj8oFrkuwxuVGKZiZ1cql243vIFoRACXaksWTTtbG48TltTBohToZOH35ueAP0/l2KZpfnpOtmUbu1WEn7tHiUTjouPP4NpfRsnr3xSeD0q/9ojqM8+B7rmsmONDVekfoke8imWlxoMiGa5oYzFDh5bYMQQtT76TjUe3piKkWBaiteAM45kGS3Q396CLi8h2mtgyeS1llMnTxJ7OwnmmVfAv+yZDAYDAajG/CXJYPBYDAY3YC/LBkMBoPB6AY90ywH5Rqb36RWNZ/ZSdNYmIYaSm1AaovUivX9kSXU3kcbNBm4UkF6T8aJtcDpeaSF+T59BjjHgutgbm0u+7fHIAR2vLe1YjRcw6fvmOPIS24BrjGI/i628RC+qBe9bcJO56MmCtsSRUkRV9ZdnwNni6e4NX91KXBybF91O+qJsn9Q1u+EEMKajZrhJh8dR2Yk+hWTW8gv6k0cBJzc3siejnF/ho+u8T8moQf13NKdMD9YT+dqlAs1W/n6t3hQQxocI91jGv47T/a2hdaj5zUQKrVesuAC8C4nxu25GovNcYkT22ela6QZ66HYzslWTB65LS6MaRsbRpqdqnWpfr0DXaSNDQrFa2yrojZU9f9fe+ceHFV1x/Fzdzf7yO7mAZtkkw3kQRIBoUgAgVYL4SFpZ3zgWLHYipapYLU+OqUdW2nplOpYptXWR6lOO1rrWztaEWUsCjICxiA+EkxCQt7kuclms8luso/b/+7vfI+TuU3HUmf4ff46Z76b5N6z9+7N/n7n+/sVLAFNvh4PTBSCtqZI8gdPoM/zWBetv8eOLfEuDWAbtEc/JE/0HQWY+x2YucAYz2w5BNrTOvmKcz3oua300/mmlM+iaALnARcd+0eDeG1U9h6mSfly0FJS+8CojucoezlnZ6B3VM7Zy2XphPi8l9Jno9fGX8V2Xo2ryINckoXnH5V81j/dh58pt1xCpREvdlG+dsWGjeLEx59yzvIcw98sGYZhGMYEflgyDMMwjAnTCsNWVlbq7733njFvkbq1Fx/ErdwHF2MoTqYwg0J/RZkYhhqRwkQFHgyZ1faQBWJZ8yugvZyD3taqYrKn5Iaxe4UulY5SbRVyabKnTmAo95NO6h7was4R0JxK+bNEH4VQT5djh4acdDovNZw7lkuhT6WCoGgIkj2hYRBtFUsKKNSWdv8PQHPt/DPM5W4SeQkMp8l2iWAcQ08yeR1YUq69gDrCFI/iOQ35MJxrk8qa9UQw1DjrAG2Xb1v/I9BK3qZrzJqdC5rtoipjHK89AJpl7Y3GWKt9DTXFZtL13AvGuPAnWBou9MxDxth7M2q2MzXGODFnBWj1m640xosewS477a5imMvl31JK+bX0NVS2L9l+CrTOuWRrKgl+BJps3dIcGHaX7Ui2QCloYhItSMJBYdmYfwFI9vq36G8oXUeSwxS+nWjFELl8TgdjftBW97wF83gX3cdn1twJWpp0Tf2jHlMrO75Cx/OHUxgG/2Gc7uOxBlzT9K30Hg/FMOyr2kNW1lBpxrQrbwetfw915Mm5+yHQxp/YZYyPV+H1vm6Ijm381EljXLX7r+JkWw+HYc8x/M2SYRiGYUzghyXDMAzDmMAPS4ZhGIYxYVo5y0WBXP3NW6mrte223xrjmLLNW27Z5RaY+9CPUfk364VoHZFJZuPWfV2yC9gaDoE2WrYK5t4w5Qx7XbiVPjeN8mSJ/XtBs2aTJSBxyfWgyW3HZmkjoOl1eDxiMZUtsw2jBaTTW0Y/pyx/QKct4rq05V0IIWzBNmMc8WEpMDkPaE1hXmboQSxN57yDytYllQMISznjgBv/l9LfodJs78/F7uaB31OedLwf7SDBe5+Cuc9Neep5Viyx1mOjXGT7CNpxlmfQ/INRtDXMyqAt+XkWzEPLpcosMSypNmbHnGV6kmweaQOnQZv0kwXoNJ6imDdApQnHyy4FrSFIv3ORF3O01lFsUXfWTXaBTAeu/6SUa1bvN9nyE8vDHHH/TrJVzb7tLtBa3OXGuFhg2zXVnjPioBKDKeW69Uj3u60W9xO0VFDOPl1JxN+zn477L0W43nutaAHZPp/2GtRFcK9DpoPy6yXDn4IWCZB1SnF8iHop97jY7wbNHqN7PGzDe9Flw/NoCNK1mfv4DtByd+wxxqEUHrdsHQkrth65tVeJRu/NysuuECc++oRzlucY/mbJMAzDMCbww5JhGIZhTJheP0tNCM0qhVuk0F/eKaxEoy9ca4wtMQxZdi/ZZIzVajNyNw11C3rLSgonXVB4IWjeUexQ0uOk0KtVCVj0x6lSh8+D3VLspbQlXptEe0ZRlLakqx0p5G3tQghhd0od0TOxQ8aoncItVuXfFd1N4Z7GURSLpNBrehjPt1GjqjxylwchhOg49BnMl25pNcZnlCo1TumARjBiKDJStH1+UV46aNpiCud5110DWtinhLek66Y5jH1fyyOSPUAPgCaHUJf4cU21CXqvbEMY9h4/so+0GVh5Z/ySG2Ge0U+2l5EAVj5yCVqQuRbsbBErl0KvSqiv0tJnjKP/fA60RAxD5vmX32SMGyfzQKuwU3i5bxLXNOGlikoFynXr3/24MR6cxFBfkaDwYdM4XtNlGXj9ZQepulGy+SRoXQs3GuOjHkytbLLT9dirY/eOXRvouFtS5aCtwUMV1rNUCarPiqHmBS1kMxm4aCNoviCFd2XbmBBClM/IN8bvdmBsfZ503Ra2vAtavKMJ5iVr6LMpXbGHhKQ1z7Lg+x2VPoJjCbSnlGZRquHJOrpngoqjhzk38DdLhmEYhjGBH5YMwzAMYwI/LBmGYRjGhGnlLDWLRaS5KY8ouw4sxQvhtaejlBfMdGBpMv8J6l7ROP9q0OYuoLzUoBXziVnS39NacXt4cwC364+OUW7AacOybRVSl/lE1Y2gJYfbjXFfEu0JMSeVwst8YidoiTHME2a7KN9hKZwLmrx9vtCOOQzLOOV35yfQAjEq5hjjHkcBaHPSpU4mPZhPqXz+GZiH0qjThkUp45XrpEW2BVtBCzZS7md8Jf7c0KtknahIw8vKU70F5r1pdD2UeDDBp6dozQtcuM0+KV1HqgXgcC/lhdb58kHTryHrjC3UDtpMpZtEvJPWLsOBedmklKfuTsN8ol+y61gjSj5zRrExtl+BpQgnrJjDC0p5On08AZo13GOMy31Ymq4zSjmtP36MewSuP/ILY+zb/nP8OZ2uhQrbMGgpC+Z3ZVtLoBhtPfJ1vDkLy81NumgfgF9Zm6Yk/X3Z/iEEdtIRQohkOv0eXxhfG1x0lTHOC9aB1uwhy4+8z0IIIYoilN9e/dmboMXXb6NzaDgBmrOyCubDkgVE/P3XoEWvvYfGykduvp3e48gknpNsz/nufPos3Ouaugwl87+Dv1kyDMMwjAn8sGQYhmEYE6YVhrW6XMIzn8KtiX3UIUKvug5eWz5BIbxkA4ZME1IXAq8dn9f1N281xu69L4JW2veBMa4+hk17923Fxq1Hu2h/daEXw3lyJZz+vXtAy1leaYwDZdjEV0+QdaB/629A8w/Vw1xuMN15/z2gzfjVY8a4bhjP/4FDVKnjiSrc5v5uO4XX7Jd/A7R1L99njG9pwu4Nt770PZiXXU1b+5+evRm0rYsphPlMH67xpln0ez/oxxBx9cNUFcgSx5B01Ith0Qmp00jEhpdgVpK0WSefBk2vusEYO/uxs8nFBWRBsITOgCYbkGRLkRBCPF/TDfPbl1M4T1csKBYpvF04Ey03yU8pTKcvWA3awVbq7NEWwrXZnnwb5nqM1nVyCd5TKQu9H7WD6KvoDlMlmgwnrmnuxmuNcciO9pDZpw8Z4/59aOPy3Y7hxPYRCv9tP4C+ogeupvuvVLFV9UqVr5I6plaKM+nn1GbfrzdhdactnjZjnP/s30BL3kkdaeJK0/KOblpztaH1L2tpvHMDdkrqCNE5Wt44DppQ5vet32WMNyvdQwqlyjyqPUQOvZZ7FK9MikLdx/rp5yLx/7zqGvPFwd8sGYZhGMYEflgyDMMwjAn8sGQYhmEYE6bVdaTC6dYfLiYbxOqjVOLu8CA+d1ePUn4x0Yu5n6Rk1zjWhV0gVmVTnF63OUDTpHJr1kG0NaiEpVJlL53C7epbiqXuDW60AMgp1LQe3IKup5GVYPLDf6E2judhyaBybLEuPP/+q+42xgEv5lrtY3Ss6vlbJkYlDUsBWqKUz5yseQM0x5K1ME8Fzxrj5AVYmqx3ghYgkMB1C79I3eD1G3aB9uJsyvV+/8ijoMXmfBXmEan8l0fJWafFKfemWzH3FknRvCeCtgq/h7TMBL4XWpRyhkE35hp93TUwT/mppGCfhh1J5OPOScft+8/VUR7+5gp8T7VJOqeQB0v4ZehowTgbp/x6U3ActK/NouPpCKPlqOwMlXtrLl0P2kwXrc3hthBoFslKsaoIc9RHO7H8W/VsuuasSj43mEWddIaimJcrS5GV5N56/LzZtoxyyGoHHNU60hWmHGKWYvnxH3vSGFu8mBfVl15ujG0t74Omeeicu7OwhGbBGH3GpDxoo9FiuDY1E3S/L+t5B7TWOZcZY/V+l+0hjhReCzL720nbsalaNNd/zF1HzjH8zZJhGIZhTOCHJcMwDMOYMC3riCPTIUovo84Aq/5EYcrDazH0td+7whgP52F1nw0P/tgYL8vFkEn42p8ZY8/xZ0GrKaNt/Suy0I4wYMcqQT3fvsIYb37+NdAaQxTCmjfcBtrx66h7wLLXcSv9ax1kR7lw+U2gldS9DPOBSmqOnOPEiEl8hEKIzlbcgp7s6zTG1oploMUOvWCMd2djZ4+FBRRO+lbVd0BLxTGcN1JONouBCIbMyuMUXgtlFoMW7acKL3lxrBKztYVCT4134Rb8/EdWwlxuhlwxA8PJ214ge8a2S0tAq/aSlSDTiuGsUY3CefonGCLX3BS+dMybDVoysADmcjNmvxW7d8jNyENKo96Nb5F1p7vid6DZXXSN58QwtG0LY7Wb9By6V9ZkoT2nO0ppgJJMtEPp86iCVWRUCYNKXT+qy2aA1jZC94JX+TT4uhKWbZLCoKVH8Z7KXke2niwXWp5SKfqx4TORAAABJ0lEQVQ9Q5E+0LJ1WmNNCcN2TuDvKZLO+ZWGQdCuk1M0Jfh5k0zS/XYmfwVopTGq6KR2AEq5pWbXSreShBPX5uIwWZDGTmFHlpKypcZY7h4iBFbmke0hQggxHKX1/mYR3Se7Hfwd5/8BrzrDMAzDmMAPS4ZhGIYxgR+WDMMwDGPCtKwjmqYNCCHGhBCDZq89T/EJXpup4LWZGl6bqeG1+TxFuq7nmL+M+SKZ1sNSCCE0TavVdX2p+SvPP3htpobXZmp4baaG14b5ssBhWIZhGIYxgR+WDMMwDGPCf/OwfMz8JectvDZTw2szNbw2U8Nrw3wpmHbOkmEYhmHONzgMyzAMwzAm8MOSYRiGYUzghyXDMAzDmMAPS4ZhGIYxgR+WDMMwDGPCvwFm0qyQglSIaAAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 504x360 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(netmats.shape)\n", "plot_matrix(netmats[60])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 3: Remove uninteresting covariates (make a new df containing only subject ID and gender).\n", "We will stick to gender for the sake of simplicity" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "# %load solutions/ex2_3.py\n", "merged = merged.loc[:,['Subject','Gender']]" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Subject</th>\n", " <th>Gender</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>100206</td>\n", " <td>M</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>100610</td>\n", " <td>M</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>101006</td>\n", " <td>F</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>101107</td>\n", " <td>M</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>101309</td>\n", " <td>M</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Subject Gender\n", "0 100206 M\n", "1 100610 M\n", "2 101006 F\n", "3 101107 M\n", "4 101309 M" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged.head()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(812, 2)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged.shape" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(812, 100, 100)" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "netmats.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 4. NAN values in dataframes are common and can cause trouble. Verify that there are no NANs in `merged`." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %load solutions/ex2_4.py\n", "# any NaNs?\n", "np.any(merged.isna())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 5. Divide the data into two subdatasets (male and female)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 M\n", "1 M\n", "2 F\n", "3 M\n", "4 M\n", " ..\n", "807 M\n", "808 F\n", "809 F\n", "810 M\n", "811 F\n", "Name: Gender, Length: 812, dtype: object" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged.Gender" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "female = netmats[merged.Gender=='F'].T \n", "male = netmats[merged.Gender=='M'].T" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "M: (100, 100, 402) \n", "F: (100, 100, 410)\n" ] } ], "source": [ "print('M: ', male.shape, '\\nF: ', female.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 6. Problem: must have equally many subjects in each group. Remove enough subjects from one group until they are equal in numbers." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# %load solutions/ex2_6.py\n", "# must be equal size\n", "female = female[:,:,:male.shape[-1]]" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "M: (100, 100, 402) \n", "F: (100, 100, 402)\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print('M: ', male.shape, '\\nF: ', female.shape)\n", "male.shape == female.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perform NBS (warning: will take some minutes)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(402, 100, 100)" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "male.T.shape" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function do_nbs in module __main__:\n", "\n", "do_nbs(g1, g2, kappa=0.8, plot=True, k=1000)\n", "\n" ] } ], "source": [ "help(do_nbs)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "# https://stackoverflow.com/questions/16571150/how-to-capture-stdout-output-from-a-python-function-call\n", "from io import StringIO \n", "import sys\n", "\n", "class Capturing(list):\n", " def __enter__(self):\n", " self._stdout = sys.stdout\n", " sys.stdout = self._stringio = StringIO()\n", " return self\n", " def __exit__(self, *args):\n", " self.extend(self._stringio.getvalue().splitlines())\n", " del self._stringio # free up some memory\n", " sys.stdout = self._stdout" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usage:\n", "```\n", "with Capturing() as output:\n", " do_something(my_object)\n", "```\n", "`output` is now a list containing the lines printed by the function call." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 5min 8s, sys: 389 ms, total: 5min 9s\n", "Wall time: 5min 9s\n" ] } ], "source": [ "%%time\n", "# after correcting\n", "with Capturing() as output:\n", " pval, adj, null = do_nbs(male, female, kappa=0.8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "max component size is 3876\n", "estimating null distribution with 1000 permutations\n", "permutation 0 of 1000. p-value so far is 0.000\n", "permutation 100 of 1000. p-value so far is 0.000\n", "permutation 200 of 1000. p-value so far is 0.000\n", "permutation 300 of 1000. p-value so far is 0.000\n", "permutation 400 of 1000. p-value so far is 0.000\n", "permutation 500 of 1000. p-value so far is 0.000\n", "permutation 600 of 1000. p-value so far is 0.000\n", "permutation 700 of 1000. p-value so far is 0.000\n", "permutation 800 of 1000. p-value so far is 0.000\n", "permutation 900 of 1000. p-value so far is 0.000\n", "permutation 999 of 1000. p-value so far is 0.000\n", "```" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['max component size is 3876',\n", " 'estimating null distribution with 1000 permutations',\n", " 'permutation 0 of 1000. p-value so far is 0.000',\n", " 'permutation 100 of 1000. p-value so far is 0.000',\n", " 'permutation 200 of 1000. p-value so far is 0.000',\n", " 'permutation 300 of 1000. p-value so far is 0.000',\n", " 'permutation 400 of 1000. p-value so far is 0.000',\n", " 'permutation 500 of 1000. p-value so far is 0.000',\n", " 'permutation 600 of 1000. p-value so far is 0.000',\n", " 'permutation 700 of 1000. p-value so far is 0.000',\n", " 'permutation 800 of 1000. p-value so far is 0.000',\n", " 'permutation 900 of 1000. p-value so far is 0.000',\n", " 'permutation 999 of 1000. p-value so far is 0.000']" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "# read from the print-out above\n", "# max_comp_sz = 3876\n", "\n", "max_comp_sz = int(output[0][22:])" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(null, bins=50)\n", "plt.axvline(max_comp_sz, c='r')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Intrepretation\n", "Exact p-values are inaccurate in permutation tests when very small, so we can increase the number of permutations (and append to the null distribution above) if you want a more precise estimate. However, from the results we can say that the p-value at least is < 0.001 (it might be much lower, but we only did 1000 permutations). It should also be specified that the p-value for any statistical test is not concerned with the magnitude of the difference, but rather a measure of the certainty of whether there *is* a difference at all, irrespective of its size. We used a large dataset (N=400), so discovering a difference was not surprising." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The identified difference is not pertained to a single locus but is based on a subnetwork of edges in the connectome, specifically:" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(adj, cmap='gray')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For those interested, one could download the cortical maps corresponding to the 100 regions from https://db.humanconnectome.org/, and plot the edges in question. However, the image above shows that the edges (white) cover the majority (80%) of the edges." ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Graph density:\n" ] }, { "data": { "text/plain": [ "(0.7830303030303031, 100, 3876)" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print('Graph density:')\n", "bct.density_und(adj)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0.7830303030303031" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adj.sum() / (100*100-100)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "# read from the print-out above\n", "#max_comp_sz = 3876" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Furthermore, every node in the graph is included in the subnetwork, which can be dissapointing.\n", "More interesting is to redo the NBS at a stricter threshold, narrowing down the subnetwork to its most important \"core\". However, beware that this kappa value has to be predefined to be statistically valid. Commonly one would decide on a range of e.g. 4 values, and run the test for each." ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 2min 46s, sys: 404 ms, total: 2min 46s\n", "Wall time: 2min 47s\n" ] } ], "source": [ "%%time\n", "# after correcting\n", "with Capturing() as output2:\n", " pval2, adj2, null2 = do_nbs(male, female, kappa=6, k=500)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['max component size is 170',\n", " 'estimating null distribution with 500 permutations',\n", " 'permutation 0 of 500. p-value so far is 0.000',\n", " 'permutation 50 of 500. p-value so far is 0.000',\n", " 'permutation 100 of 500. p-value so far is 0.000',\n", " 'permutation 150 of 500. p-value so far is 0.000',\n", " 'permutation 200 of 500. p-value so far is 0.000',\n", " 'permutation 250 of 500. p-value so far is 0.000',\n", " 'permutation 300 of 500. p-value so far is 0.000',\n", " 'permutation 350 of 500. p-value so far is 0.000',\n", " 'permutation 400 of 500. p-value so far is 0.000',\n", " 'permutation 450 of 500. p-value so far is 0.000',\n", " 'permutation 499 of 500. p-value so far is 0.000']" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output2" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(adj2)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bct." ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.03434343434343434, 100, 340)" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bct.density_dir(adj2)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 2. 10. 1. 6. 12. 0. 6. 2. 4. 7. 1. 13. 1. 5. 3. 4. 0.\n", " 6. 3. 3. 5. 2. 1. 1. 2. 10. 2. 2. 6. 3. 0. 1. 7. 9. 9.\n", " 0. 5. 1. 1. 2. 2. 7. 0. 6. 2. 1. 3. 3. 2. 4. 1. 1. 1.\n", " 1. 3. 13. 2. 0. 2. 1. 0. 1. 10. 5. 7. 0. 2. 7. 7. 12. 3.\n", " 9. 2. 6. 0. 11. 5. 0. 0. 0. 1. 0. 1. 0. 1. 1. 0. 0. 13.\n", " 0. 0. 7. 0. 8. 1. 1. 3. 2. 1.]\n" ] }, { "data": { "text/plain": [ "80" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(adj2, cmap='gray')\n", "# number of nodes included:\n", "print(adj2.sum(axis=0))\n", "\n", "# number of nodes included in the sub-network\n", "n_nodes = np.sum(adj2.sum(axis=0) > 0)\n", "n_nodes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Degree functions** allow to determine nodes with a large number of connections (\"degree centrality\"), while distance functions allow to determine nodes which are close to other nodes (\"closeness centrality\")." ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'bct.nbs' has no attribute 'degree_centrality'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-106-6862bf16dd94>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnbs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdegree_centrality\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0madj2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: module 'bct.nbs' has no attribute 'degree_centrality'" ] } ], "source": [ "nbs.degree_centrality(adj2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**networkx.algorithms.centrality.degree_centrality**\n", "```\n", "degree_centrality(G)[source]\n", "Compute the degree centrality for nodes.\n", "\n", "The degree centrality for a node v is the fraction of nodes it is connected to.\n", "\n", "Parameters\n", "G (graph) – A networkx graph\n", "\n", "Returns\n", "nodes – Dictionary of nodes with degree centrality as the value.\n", "\n", "Return type - dictionary\n", "\n", "Notes\n", "\n", "The degree centrality values are normalized by dividing by the maximum possible degree in a simple graph n-1 where n is the number of nodes in G.\n", "\n", "```\n", "\n" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [], "source": [ "G2 = nx.from_numpy_matrix(adj2)\n", "D2 = nx.degree_centrality(G2)" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1440x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(20,4))\n", "plt.bar(range(len(D2)), list(D2.values()), align='center')\n", "plt.xticks(range(len(D2)), list(D2.keys()), fontsize=7)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "max component size is 38\n", "estimating null distribution with 500 permutations\n", "permutation 0 of 500. p-value so far is 0.000\n", "permutation 50 of 500. p-value so far is 0.000\n", "permutation 100 of 500. p-value so far is 0.000\n", "permutation 150 of 500. p-value so far is 0.000\n", "permutation 200 of 500. p-value so far is 0.000\n", "permutation 250 of 500. p-value so far is 0.000\n", "permutation 300 of 500. p-value so far is 0.000\n", "permutation 350 of 500. p-value so far is 0.000\n", "permutation 400 of 500. p-value so far is 0.000\n", "permutation 450 of 500. p-value so far is 0.000\n", "permutation 499 of 500. p-value so far is 0.000\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 2min 41s, sys: 1.19 s, total: 2min 42s\n", "Wall time: 2min 42s\n" ] } ], "source": [ "%%time\n", "test3 = do_nbs(male, female, kappa=7, k=500)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "adj3 = test3[1]" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(adj3, cmap='gray')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "max component size is 13\n", "estimating null distribution with 500 permutations\n", "permutation 0 of 500. p-value so far is 0.000\n", "permutation 50 of 500. p-value so far is 0.000\n", "permutation 100 of 500. p-value so far is 0.000\n", "permutation 150 of 500. p-value so far is 0.000\n", "permutation 200 of 500. p-value so far is 0.000\n", "permutation 250 of 500. p-value so far is 0.000\n", "permutation 300 of 500. p-value so far is 0.000\n", "permutation 350 of 500. p-value so far is 0.000\n", "permutation 400 of 500. p-value so far is 0.000\n", "permutation 450 of 500. p-value so far is 0.000\n", "permutation 499 of 500. p-value so far is 0.000\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "test4 = do_nbs(male, female, kappa=7.4, k=500)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [], "source": [ "adj4 = test4[1]" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(adj4, cmap='gray')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0. 6. 0. 0. 3. 0. 3. 0. 0. 9. 0. 9. 0. 6. 3. 3. 0. 0. 0. 0. 2. 0. 0.\n", " 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 6. 0. 0. 0. 0. 0. 2. 0. 0. 0. 0. 0. 4.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 2. 0. 0. 0. 0. 0. 0. 6. 0. 2. 0. 1. 1. 2. 6. 0.\n", " 3. 0. 0. 0. 9. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 6. 0. 0. 0. 0. 0. 0.\n", " 0. 4. 0. 0.]\n" ] }, { "data": { "text/plain": [ "25" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(adj4.sum(axis=0))\n", "n_nodes = np.sum(adj4.sum(axis=0) > 0)\n", "n_nodes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have boiled it down into 25 nodes. These nodes are based on an ICA decomposition of the brain activity, so we would have to download an additional dataset from the connectome database in order to visualize them. However, we will not do it here due to the size of the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Extra exercise 6. Find a variable of your choice in the dataframe and test for a statistical difference between two groups (e.g. for non-binary values you can binarize by setting some threshold). \n", "Tip: you can read more about the behavioural variables here and what the column names are in the dataframe: https://wiki.humanconnectome.org/display/PublicData/HCP+Data+Dictionary+Public-+Updated+for+the+1200+Subject+Release" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "## YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Autism versus healthy controls\n", "\n", "The below code use the `nilearn.datasets` module to download fMRI scans from the Autism Brain Imaging Data Exchange (ABIDE) study and process it in a standard network-modelling pipeline using the [Yeo-2011 atlas](https://balsa.wustl.edu/W8wK) for parcellating the cortex into 17 regions. We then proceed to perform NBS to compare the autism group to matching controls.\n", "\n", "### NB! the code below is very slow\n", "However, this loads *raw* fMRI data and not the network matrices. fMRI data is notoriously large, and it is also fairly time consuming to process (despite *preprocessing* has already been done, so beware of having to wait some minutes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### NB! Slow code" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/arvid/opt/anaconda3/envs/bmed360v2021/lib/python3.8/site-packages/numpy/lib/npyio.py:2349: VisibleDeprecationWarning: Reading unicode strings without specifying the encoding argument is deprecated. Set the encoding, use None for the system default.\n", " output = genfromtxt(fname, **kwargs)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 59.9 s, sys: 4.13 s, total: 1min 4s\n", "Wall time: 1min 3s\n" ] } ], "source": [ "%%time\n", "n_subjects = 20\n", "\n", "import os\n", "import numpy as np\n", "from nilearn import datasets\n", "yeo = datasets.fetch_atlas_yeo_2011()\n", "\n", "autism = datasets.fetch_abide_pcp(n_subjects=n_subjects, DX_GROUP=1)\n", "control = datasets.fetch_abide_pcp(n_subjects=n_subjects, DX_GROUP=2)\n", "\n", "from nilearn.input_data import NiftiLabelsMasker\n", "from nilearn.connectome import ConnectivityMeasure\n", "\n", "masker = NiftiLabelsMasker(labels_img = yeo['thick_17'], standardize=True,\n", " memory='nilearn_cache')\n", "measure = ConnectivityMeasure(kind='correlation')\n", "\n", "ts_au=[]\n", "for func in autism.func_preproc:\n", " ts_au.append(masker.fit_transform(func))\n", "\n", "ts_hc=[]\n", "for func in control.func_preproc:\n", " ts_hc.append(masker.fit_transform(func))\n", "\n", " \n", "corr_au = measure.fit_transform(ts_au)\n", "corr_hc = measure.fit_transform(ts_hc)\n", "\n", "for i, m in enumerate(corr_au):\n", " fn = f\"abide_au{i+101}.txt\"\n", " fn = \"data/abide/\" + fn\n", " np.savetxt(fn, m)\n", " \n", "for i, m in enumerate(corr_hc):\n", " fn = f\"abide_hc{i+101}.txt\"\n", " fn = \"data/abide/\" + fn\n", " np.savetxt(fn, m)\n" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "datapath = 'data/abide'" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "['abide_au112.txt',\n", " 'abide_au106.txt',\n", " 'abide_hc115.txt',\n", " 'abide_hc101.txt',\n", " 'abide_hc114.txt',\n", " 'abide_au107.txt',\n", " 'abide_au113.txt',\n", " 'abide_au105.txt',\n", " 'abide_au111.txt',\n", " 'abide_hc102.txt',\n", " 'abide_hc116.txt',\n", " 'abide_hc117.txt',\n", " 'abide_hc103.txt',\n", " 'abide_au110.txt',\n", " 'abide_au104.txt',\n", " 'abide_au114.txt',\n", " 'abide_hc107.txt',\n", " 'abide_hc113.txt',\n", " 'abide_hc112.txt',\n", " 'abide_hc106.txt',\n", " 'abide_au115.txt',\n", " 'abide_au101.txt',\n", " 'abide_au117.txt',\n", " 'abide_au103.txt',\n", " 'abide_hc110.txt',\n", " 'abide_hc104.txt',\n", " 'abide_hc105.txt',\n", " 'abide_hc111.txt',\n", " 'abide_au102.txt',\n", " 'abide_au116.txt',\n", " 'abide_hc108.txt',\n", " 'abide_hc120.txt',\n", " 'abide_hc109.txt',\n", " 'abide_au118.txt',\n", " 'abide_au119.txt',\n", " 'abide_au109.txt',\n", " 'abide_au120.txt',\n", " 'abide_au108.txt',\n", " 'abide_hc119.txt',\n", " 'abide_hc118.txt']" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mats = [np.loadtxt(fn) for fn in os.scandir(path=datapath) if fn.name.startswith('abide')]\n", "[fn.name for fn in os.scandir(datapath)]" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "X = np.array(mats)\n", "y = np.array(['au']*20 + ['hc']*20)" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, True, True, True, True, True, True, True, True,\n", " True, True, True, True, True, True, True, True, True,\n", " True, True, False, False, False, False, False, False, False,\n", " False, False, False, False, False, False, False, False, False,\n", " False, False, False, False])" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y==['au']" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(40,)\n", "(40, 17, 17)\n" ] } ], "source": [ "print(y.shape); print(X.shape)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "au = X[y=='au',:]\n", "hc = X[y=='hc',:]" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(17, 17, 20)" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "au.T.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 87, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "max component size is 83\n", "estimating null distribution with 1000 permutations\n", "permutation 0 of 1000. p-value so far is 0.000\n", "permutation 100 of 1000. p-value so far is 0.198\n", "permutation 200 of 1000. p-value so far is 0.244\n", "permutation 300 of 1000. p-value so far is 0.249\n", "permutation 400 of 1000. p-value so far is 0.224\n", "permutation 500 of 1000. p-value so far is 0.232\n", "permutation 600 of 1000. p-value so far is 0.221\n", "permutation 700 of 1000. p-value so far is 0.208\n", "permutation 800 of 1000. p-value so far is 0.210\n", "permutation 900 of 1000. p-value so far is 0.203\n", "permutation 999 of 1000. p-value so far is 0.204\n" ] } ], "source": [ "kappa = 0.8\n", "pval, adj, null = nbs.nbs_bct(au.T, hc.T, kappa)" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(null)\n", "plt.axvline(36, c='red')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "max component size is 112\n", "estimating null distribution with 1000 permutations\n", "permutation 0 of 1000. p-value so far is 0.000\n", "permutation 100 of 1000. p-value so far is 0.287\n", "permutation 200 of 1000. p-value so far is 0.274\n", "permutation 300 of 1000. p-value so far is 0.272\n", "permutation 400 of 1000. p-value so far is 0.292\n", "permutation 500 of 1000. p-value so far is 0.309\n", "permutation 600 of 1000. p-value so far is 0.309\n", "permutation 700 of 1000. p-value so far is 0.305\n", "permutation 800 of 1000. p-value so far is 0.302\n", "permutation 900 of 1000. p-value so far is 0.311\n", "permutation 999 of 1000. p-value so far is 0.310\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAODklEQVR4nO3df6xf9V3H8edL6vi14NpxS0pBi0mDoIkZuZm4JcSkm2NjoUxDUjLMVUn6z+ZgMXFFEokxJEUXo3+oSzPQRhFSGQvVxY1axekfY15+OAuFlA1WOrr2ssVNnWHg3v7xPQtfyr2093vu995vP/f5SL4553y+59zvK823r3vuOd9zvqkqJElt+ZGVDiBJWnqWuyQ1yHKXpAZZ7pLUIMtdkhq0ZqUDAJx//vm1adOmlY4hSaeVRx999KWqmprvuYko902bNjE7O7vSMSTptJLk6ws952EZSWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lq0ERcoSqdzKYdn+u1/fM7r1miJNLpwT13SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUEnLfckdyc5nuTA0Ni6JPuSHOqma4eeuzXJs0meSfK+cQWXJC3sVPbc/wK4+oSxHcD+qtoM7O+WSXI5sA346W6bP01yxpKllSSdkpOWe1V9Efj2CcNbgd3d/G7guqHx+6rq5ap6DngWeOcSZZUknaJRj7lfUFVHAbrp+m58I/DC0HpHujFJ0jJa6hOqmWes5l0x2Z5kNsns3NzcEseQpNVt1HI/lmQDQDc93o0fAS4eWu8i4MX5fkBV7aqq6aqanpqaGjGGJGk+o5b7XmCmm58BHhwa35bkzCSXAJuBL/eLKElarDUnWyHJvcAvAOcnOQLcDuwE9iS5CTgMXA9QVU8m2QM8BbwKfKSq/m9M2SVJCzhpuVfVDQs8tWWB9e8A7ugTSpLUj1eoSlKDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAad9KOQ0rBNOz438rbP77xmCZNIejOWu5ZNn18MkhbHwzKS1CDLXZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAb5ZR1aFfwGKa027rlLUoMsd0lqkOUuSQ3qVe5JPp7kySQHktyb5Kwk65LsS3Kom65dqrCSpFMz8gnVJBuBjwGXV9X/JtkDbAMuB/ZX1c4kO4AdwCeWJK10mvFErlZK38Mya4Czk6wBzgFeBLYCu7vndwPX9XwNSdIijVzuVfUN4JPAYeAo8J2qegi4oKqOduscBdbPt32S7Ulmk8zOzc2NGkOSNI+Ry707lr4VuAS4EDg3yY2nun1V7aqq6aqanpqaGjWGJGkefQ7LvAd4rqrmquoV4AHgXcCxJBsAuunx/jElSYvRp9wPA1cmOSdJgC3AQWAvMNOtMwM82C+iJGmxRv60TFU9kuR+4DHgVeBxYBfwVmBPkpsY/AK4fimCSpJOXa97y1TV7cDtJwy/zGAvXpK0QrxCVZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBvkdqtJJ9Lltr7RS3HOXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGuR3qEoN6vu9r8/vvGaJkmil9NpzT/K2JPcneTrJwSQ/n2Rdkn1JDnXTtUsVVpJ0avoelvlj4PNV9VPAzwIHgR3A/qraDOzvliVJy2jkck9yHnAVcBdAVX2/qv4T2Ars7lbbDVzXN6QkaXH67Ln/JDAH/HmSx5N8Osm5wAVVdRSgm66fb+Mk25PMJpmdm5vrEUOSdKI+5b4GuAL4s6p6B/A/LOIQTFXtqqrpqpqemprqEUOSdKI+5X4EOFJVj3TL9zMo+2NJNgB00+P9IkqSFmvkcq+qbwIvJLm0G9oCPAXsBWa6sRngwV4JJUmL1vdz7r8B3JPkLcDXgF9j8AtjT5KbgMPA9T1fQ5K0SL3KvaqeAKbneWpLn58r6fTV5wIqL55aOt5+QJIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSg/p+h6okTQS/3u/1LPfTUJ83MbT5Rpb0eh6WkaQGuee+CvXd81f7fI+c/txzl6QGWe6S1CDLXZIaZLlLUoMsd0lqUO9yT3JGkseT/F23vC7JviSHuuna/jElSYuxFHvuNwMHh5Z3APurajOwv1uWJC2jXuWe5CLgGuDTQ8Nbgd3d/G7guj6vIUlavL577n8E/Bbwg6GxC6rqKEA3XT/fhkm2J5lNMjs3N9czhiRp2MjlnuSDwPGqenSU7atqV1VNV9X01NTUqDEkSfPoc/uBdwPXJvkAcBZwXpK/Ao4l2VBVR5NsAI4vRVBJ0qkbec+9qm6tqouqahOwDfjHqroR2AvMdKvNAA/2TilJWpRxfM59J/DeJIeA93bLkqRltCR3hayqh4GHu/lvAVuW4udKkkbjLX8lTQxvNbx0vP2AJDXIcpekBlnuktQgy12SGuQJVWlCeXJRfbjnLkkNstwlqUGWuyQ1yGPuktRTn/Mjz++8ZgmTvMY9d0lqkOUuSQ2y3CWpQR5zl7TqtXhNgXvuktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBI5d7kouT/FOSg0meTHJzN74uyb4kh7rp2qWLK0k6FX323F8FfrOqLgOuBD6S5HJgB7C/qjYD+7tlSdIyGrncq+poVT3Wzf8XcBDYCGwFdner7Qau6xtSkrQ4S3LMPckm4B3AI8AFVXUUBr8AgPULbLM9yWyS2bm5uaWIIUnq9C73JG8FPgPcUlXfPdXtqmpXVU1X1fTU1FTfGJKkIb3KPcmPMij2e6rqgW74WJIN3fMbgOP9IkqSFqvPp2UC3AUcrKo/HHpqLzDTzc8AD44eT5I0ijU9tn038CvAfyR5ohv7bWAnsCfJTcBh4Pp+EdvU4retS5ocI5d7Vf0rkAWe3jLqz5Uk9ecVqpLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGtTnO1RXPb8HVdKkcs9dkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1KAmLmLqczHR8zuvWcIkkjQZxrbnnuTqJM8keTbJjnG9jiTpjcZS7knOAP4EeD9wOXBDksvH8VqSpDca1577O4Fnq+prVfV94D5g65heS5J0gnEdc98IvDC0fAT4ueEVkmwHtneL/53kmTFlWcj5wEu5c5lfdXTnAy+tdIhFMO94mXe8li1vzw76iYWeGFe5Z56xet1C1S5g15he/6SSzFbV9Eq9/mKZd7zMO17mXX7jOixzBLh4aPki4MUxvZYk6QTjKvd/AzYnuSTJW4BtwN4xvZYk6QRjOSxTVa8m+SjwBeAM4O6qenIcr9XDih0SGpF5x8u842XeZZaqOvlakqTTircfkKQGWe6S1KDmyz3JpUmeGHp8N8ktSdYl2ZfkUDddu9JZfyjJx5M8meRAknuTnDXheW/usj6Z5JZubKLyJrk7yfEkB4bGFsyY5Nbu1hnPJHnfhOS9vvs3/kGS6RPWn8S8f5Dk6SRfSfLZJG+b8Ly/12V9IslDSS6clLwjqapV82BwcvebDD74//vAjm58B3DnSufrsmwEngPO7pb3AL86wXl/BjgAnMPgBP0/AJsnLS9wFXAFcGBobN6MDG6Z8e/AmcAlwFeBMyYg72XApcDDwPTQ+KTm/UVgTTd/52nw73ve0PzHgE9NSt5RHs3vuZ9gC/DVqvo6g9sh7O7GdwPXrViqN1oDnJ1kDYPSfJHJzXsZ8KWq+l5VvQr8M/AhJixvVX0R+PYJwwtl3ArcV1UvV9VzwLMMbqmxbObLW1UHq2q+K7knNe9D3XsC4EsMrneByc373aHFc3ntwssVzzuK1Vbu24B7u/kLquooQDddv2KphlTVN4BPAoeBo8B3quohJjQvg732q5K8Pck5wAcYXMA2qXmHLZRxvttnbFzmbItxOuT9deDvu/mJzZvkjiQvAB8Gfqcbnti8b2bVlHt3MdW1wN+sdJY30x333crgz78LgXOT3LiyqRZWVQcZ/Mm9D/g8gz9fX33TjSbfSW+fMWEmOm+S2xi8J+754dA8q01E3qq6raouZpD1o93wxOZ9M6um3BncfvixqjrWLR9LsgGgmx5fsWSv9x7guaqaq6pXgAeAdzG5eamqu6rqiqq6isGfuoeY4LxDFsp4ut0+Y2LzJpkBPgh8uLoD2Exw3iF/DfxyN3865H2D1VTuN/DaIRkY3A5hppufAR5c9kTzOwxcmeScJGFwnuAgk5uXJOu76Y8Dv8Tg33li8w5ZKONeYFuSM5NcwuAE8ZdXIN+pmsi8Sa4GPgFcW1XfG3pqUvNuHlq8Fni6m5/IvCe10md0l+PB4KTkt4AfGxp7O7CfwV7mfmDdSuccyva7DN5YB4C/ZHCWfpLz/gvwFINDMlsm8d+XwS+co8ArDPbEbnqzjMBtDD4V8Qzw/gnJ+6Fu/mXgGPCFCc/7LINj1U90j09NeN7PdP/nvgL8LbBxUvKO8vD2A5LUoNV0WEaSVg3LXZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXo/wHOqp4Y2It+WwAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[0.31]\n" ] } ], "source": [ "pval, adj, null = do_nbs(au.T, hc.T, kappa=0.3)\n", "print(pval)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(null)\n", "plt.axvline(110, c='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary and conclusion\n", "We could identify no difference in the connectome between those with ADHD and controls with this setup. It might be unexpected that we don't observe any difference, but we must consider three factors: i) our data set is only 40 (compared to 800 in the first dataset), making it harder to detect any effect, ii) we used a very rough parcellation of only 17 nodes (compared to 100), again compromising sensitivity, and iii) the parcellation is based on predefined regions anatomically rather than mined from the brain activity itself (ICA). This scheme is simpler but vulnerable to functionally meaningless segmentation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pros and cons of NBS\n", "\n", "**Pros**\n", "* It let's you easily test hypotheses about group differences in networks (e.g. connectomes between sick and healthy).\n", "* You can identify edges disturbed by disease\n", "\n", "* There is no difficult math (non-parametric)\n", "* It deals naturally with the graph structure\n", "- it increases statistical power compared to other methods of multiple testing\n", "\n", "**Cons**\n", "* It is hard to interpret what the difference actually is\n", "* There is no obvious \"right\" value for the threshold (kappa)\n", "* It is computationally heavy (like all permutation tests)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "BMED360V2021", "language": "python", "name": "bmed360v2021" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 2 }