{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Pupil Core device timing\n", "========================\n", "\n", "`PupilCore().light_stamper(...)` marks the onset of a light stimulus by sending an annotation containing the timestamp of the first frame where the light becomes visible to the\n", "World camera. This timestamp is ultimately what gets used to extract pupil data and as a reference for calculating time-critical measures, such as constriction latency and time-to-peak constriction. The validity of any time-related measures therefore depends on Pupil Capture's ability to synchronise the clocks of the cameras on a Pupil Core headset. How well does it handle this task? We were able to test camera clock synchronisation by putting the Pupil Core headset inside our integrating sphere and repeatedly flashing a bright orange light containing enough near infrared to afford detection by the Eye cameras as well as the World camera. Prior to each flash, concurrent `.light_stamper(...)`’s were instantiated, giving us the timestamp of the frame where the luminance change was detected independently for each camera. This protocol allowed us to get some insight into how well the data streams are synchronised. \n", "\n", "We ran [the testing protocol](05e_pupil_core_camera_sync.ipynb) on Mac and Windows (Pupil Capture v3.2-20) for *n* = 100 near-IR light flashes. For each run of the protocol, Eye camera resolution was kept at (192, 192) with Absolute Exposure Time of 25, and the World camera had (640, 480) and 60. Auto Exposure Mode was set to 'manual mode' for all cameras, and Auto Exposure Priority was disabled for the World camera. Whilst all of these camera settings may have the potential to impact the precision of the `.light_stamper(...)`, Frame rate is the most obvious. So we performed separate trials on Mac and Windows with a Frame rate of 60 and 120.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import os.path as op\n", "import glob\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate differences from annotation timestamps\n", "------------------------------------------------" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ComparisonTimestamp difference (ms)OSFPS
0eye0 - world58.807Windows120
1eye0 - world55.010Windows120
2eye0 - world58.925Windows120
3eye0 - world57.622Windows120
4eye0 - world58.371Windows120
...............
295eye0 - eye1-3.959macOS60
296eye0 - eye1-3.968macOS60
297eye0 - eye112.266macOS60
298eye0 - eye1-3.984macOS60
299eye0 - eye1-3.991macOS60
\n", "

1200 rows × 4 columns

\n", "
" ], "text/plain": [ " Comparison Timestamp difference (ms) OS FPS\n", "0 eye0 - world 58.807 Windows 120\n", "1 eye0 - world 55.010 Windows 120\n", "2 eye0 - world 58.925 Windows 120\n", "3 eye0 - world 57.622 Windows 120\n", "4 eye0 - world 58.371 Windows 120\n", ".. ... ... ... ...\n", "295 eye0 - eye1 -3.959 macOS 60\n", "296 eye0 - eye1 -3.968 macOS 60\n", "297 eye0 - eye1 12.266 macOS 60\n", "298 eye0 - eye1 -3.984 macOS 60\n", "299 eye0 - eye1 -3.991 macOS 60\n", "\n", "[1200 rows x 4 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datadir = '../data/pupil_core_camera_sync_tests'\n", "recordings = glob.glob(datadir + '/**/**/**/annotations.csv')\n", "\n", "data = pd.DataFrame()\n", "for rec in recordings:\n", " # Load annotations and get camera timestamps for detected light flash\n", " df = pd.read_csv(rec)\n", " eye_0 = df.loc[df.label=='light_on_eye_0', 'timestamp'].to_numpy()\n", " eye_1 = df.loc[df.label=='light_on_eye_1', 'timestamp'].to_numpy() \n", " world = df.loc[df.label=='light_on_world', 'timestamp'].to_numpy()\n", " \n", " # Calculate timestamp differences and make DataFrame\n", " diffs = (pd.DataFrame(data=[(eye_0-world)*1000,\n", " (eye_1-world)*1000,\n", " (eye_0-eye_1)*1000],\n", " index=['eye0 - world',\n", " 'eye1 - world',\n", " 'eye0 - eye1'])\n", " .T.melt(var_name='Comparison', \n", " value_name='Timestamp difference (ms)'))\n", " \n", " # Add categories for operating system and frames per second\n", " diffs['OS'] = 'macOS' if 'mac' in rec else 'Windows'\n", " diffs['FPS'] = '120' if '120_fps' in rec else '60'\n", " diffs.to_csv(op.join(op.dirname(rec), 'annotation_timestamp_diffs.csv'))\n", " \n", " # Append to master frame\n", " data = data.append(diffs)\n", "data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the timestamp differences\n", "------------------------------" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAALRCAYAAACdyf8HAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABiF0lEQVR4nO3deZhkVXn48e87DUzPTMPQ7ShuCMNiREHFqEFQcItKNKijqGiM27jFPeJGUDEaiIqKuwmjgv4UBDKIMS4oCirRICBGcINhRgGVCN300MP0AD3v7497G2qaXm5N1+2q6v5+nuc+VXXurVNv1e06/da5554bmYkkSZKk6ha1OwBJkiSp25hES5IkSU0yiZYkSZKaZBItSZIkNckkWpIkSWqSSbQkSZLUJJPoBSYi9oiIz0fEdRGxpbz9UkQ8cJJtnxMRF0fEzRHxx4g4OyL+soWxfDYirplQdreI2BoR/zWh/LERkRHxxIg4LiIum8XrHhcR52/v81shIk6JiFNmWJ9TLO8rt9kwybprIuL4iNixoa59IuKsch/eHBGXRMQrIiJqem/nRMQbJyl/c0RcHRG3RsRvI+KFE9YfFRFXRsQtEfGjiDiwjvikuWBba1tbV1sbEYdGxE8jYnMZ28smrLctnSMm0QtIROwH/Aw4EHh9eftioB+4OCIOa9j22cBngX8HDgH+DhgDLoyIB7copAuA+0bEvRvKHl/ePiYidmgoPwi4Dfhv4GPA37Yohk52EbDvJMuHG7b5eEP5fsA7gTcCbwGIiF2B84ER4JnA44DTgJOA41sZbEQsjoi/A/5mknUvAd4HvBd4OPBl4NSIeGS5/jHAF4CPAn8FXAp8OyL6WxmjNBdsa7tO17S1EbEP8A3g+xRt5Rrg38u/OdvSuZaZLgtkoWgofgEsnVC+CPgOsAHYoSw7D3j/hO0C+CXwwRbFsyeQwKqGss8A/wlsAQ5uKP8qcGGLXvc44Pw274tTgFNmWD9tjOX+Om6S8s8CPynvvxD4A7BowjZvA/7cwvdzMHB7uT8TeOOE9T8CPjGh7ELg5PL+2cCXGtb1AH8EXt7O/eTisj2Lbe0dddnWtr6t/RTw3xPKvgu8urxvWzqHiz3RC0R5aPARwD9n5i2N6zJzK3AMsAcw3kPSD9xnwnYJHEXxK3fWMnMD8HuKX8vjnkDRsP+YO3tKKLe5oHwvdxxijIgXl4eznh8R68rDW+dGxIrxJ5aHtq4u130TuHtjHBHxhPJQ6mhE/CYi3hARi8qe1VvKXlTKsqGI+EbDc98bEeeV958UEZdGxKbxelrxOW2HTcD4IcZ+YFl52+izFD1erfJz4KHAART/SCbqBX4yoex64J7l/UOBb46vyMwxisT78UhdxLbWtnbCNq1ua58EnNFYkJlPzMxPlw9tS+eQSfTCMd54/mCK9ZdSHMI7oHz8FeAFEfE/EfGuKMbJLcnMn2fmL1oY1w/GY4uI+wH7UPyqPo+ikSci9qRIts6foo57A68B/h54OsVwgfFDbA8Gvgj8P4pDpRcCrxp/YkTsS3Fo7HvAo4B3UPyTe3NmbinjO7jcfH9gF+DgiBj/7hwGnBsRAxQ9AKcBjwT+GXh/RDxrez6U7VH+4zkEeD53NqLfpOjVuiIiPhMRz42Ie2XmDZn57Va9dmZuyszLM/Nyir+jiesfnpn/ryHWvYC/Bi6LiOXAALB+wtOuBXZrVYzSHLGtta2tpa2NiMXA3sBOEXFeRNwUET+LiFXletvSudburnCXuVmAYykO5+04zTbXA8c0PP574FyKX9sJ3AKcCiyb4vnnAqNTLCdP8ZzVFGPIeoCXAOvL8kPK5y0BnkfxT6evXHcccFl5/8VlbPs21Pk54Bvl/TXAtya85jcpD98BJwMXTFj/KsrDb8A/AleU9/8B+Hr5OTyEond1lGK840PKOA5rqOdw4MAp3vcpzHyIceskn+P/NGyzgWIIxfi628vnnNm4jyj+WX8OuIY7h1v8FDhoitd+4TT7cbTC39oGJgznmLD+ryl6qzcAu1L0wiXwsAnbvRe4qN3fHReXZhZsaxtf07a2hW0txQ+cBDYCr6P4EXMcxRj6w7AtnfOl8WQCzW/D5e1uFL9Kt1H+wr078Ofxssz8AvCFKM4+fgSwCngtcCvw8kleYzWwdIbXn+gHFIfA9qfoDfluWX4RRWN+CEXvySWZOTJFHSOZeWXD443AXuX9h1Icsmx0EXceSn0w8K0J6y8DVpQ9Ht8BTixPyjikjG8J8GiKBHC43D6ALwHnRcRPKE76ODszfzZFzFVcTPHPtdHohMefAT5R3k/gmrzrIeRfAC8FiIiVwJMp/mF9PSL2ysyNE+r8GkXD31IR0VfG+iLg28BLMvOmiLi93GTi304vMNjqOKSa2dbeyba2tW3teK/85zPz4+OxR8TjKRLyN5ZltqVzxCR64bikvD0IOGuS9U+gaJwuLA+7vRd4VWbelJnjZ2r/d0RsokiC7iIzf99sUJn524j4UxnX4ykaHDLztoj4QVl2EOUYvSmMTbNuR4oeg0Y9DfeXcNfhB0spGsnNmfmLMr5HUTTmH6I4zPgY4G7Ad7P4qZ/A30XEe4CnAE8E3h4Rb87Mj00T33Ruycxfz7DNDdNtExEfpuj9OQcgM9cDn4mIbwNXAw9jwqHbzBxm6n/E26X8J/lD4F7AizPz1IbXG4mIm4H7Tnja7sDvWhmHNAdsa+9kW9vatvZGin0wMY5fAfexLZ17joleOH5M8cV7RzTMawkQEQG8FfheZv6S4kt9JMUJChPdCmye7AXKMVq3T7F8dprYfkBxePGeFOPzxn2P8jAdU4/Rm8mvuHOc3bjGx7+maLQbHQpcmZnj7/O7wHMpekN+TvFP5tHldufCHSfMfDwzr8zMj2fm04F/A569nXG3yr5M/o/41vL2LvsyIv5+mv14+8TtK/oAxVi9v2xMoBucS/HPcDyGnSjHQG7n60ntYlt7J9vaFra1WYwdv4xiSEuj/bkzsbYtnUP2RC8QmZkR8VKKL9K5EfEhYB1FY/oGigbg0eW2/xcR/wasiYh/ovinsCtFgzh+MshkXkLzhxihaCg/CfxvZv65ofw84ETKOVNneo9T+DDw44h4F8UYu7+lOFw63lv0EeBH5fr/pBjT9haKuV3HnUsxzu28zBwrDyHejaJhH79gyB+AV0fEH4H/ojiUeziwdjvjbpV/Bb4fEZ+gOOFnM8Ucp2+hOIQ52aHEcyga5ZYoTwx6NkXPUk8U85yO25yZ11FM2/StiPgfin8S76A4VDzx8LDU0WxrbWupt639IMXQnysoju49g+LHz1HletvSudTuQdkuc7sAD6AYT/Ynil/Iv6f40u02YbtFwCspziS/mWL83neAp9cQ04MoDtF9aEJ5lK/70wnlx7HtyS43TVh/Eg3zflJML/R7ipNUzqD4x9S4/ijgNxSHGjcAb51Q3z0pDlM2ngh0PvCLCdsdBVxevs51FJPzL5niPZ9CTXOXTrLdgRT/1P5AceLS5RQXCtilpr+xDTScWEgx/jOnWBr3w4soDnveQtEjtVc7vysuLrNZbGtta+tqa8u2ch3FHN+XAo+bZL1t6RwsUX7gkiRJkipyTLQkSZLUJJNoSZIkqUkm0ZIkSVKTTKIlSZKkJplES5IkSU3q+nmiIyKdYUSSiJZWZtsqSTBN22pPtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmzWkSHREvi4jfRMTmiFgfEUeX5Ssi4msRMRIR10XE2+cyLkmSJKkZczY7R0Q8FPgk8HjgEuBhwLkRcRnwJmAzsDdwH+AbEXFVZp41V/FJkiRJVc3lFHdj5bIj0Dhv0mbgcGCPzLweuD4iPgO8FDCJliRJUseZs+EcmfkL4IPA+cAW4L+B/wB2Bf6cmdc0bP5zYL+5ik2SJElqxpwl0RHxGOCtwBFAH0Xv87OBFcDQhM03ArtMUsdxEZGNS81hS9K8Z9sqSc2LuboiVUR8DLhnZj6noewzwJHApsy8X0P504EPZub9K9TrVbUkySsWSlIdOuKKhZsmCeQ24GvAfSJiRUP5AcDFcxWYJEmS1Iy5TKLPBp4aEc+IiKXl8I4XAJ8DvgecGBG7RMQhwOuAk+cwto6ybt06nvnMZ7Ju3bp2hyJJkqRJzOWJhRcBRwHvAv4M/Bvwmsz8IfAi4B7A9cBpwLGZ+f25iq2TZCbHH388g4ODnHDCCXg4VZIkqfPM5RR3ZOY5wDmTlP8B+Ju5jKVTrV+/nvXr15OZXH311WzYsIGVK1e2OyxJkiQ18LLfHWblypWsXLmSiGCvvfZizz33bHdIkiRJmsAkusNEBMcccwwDAwO84x3vIKKlJ9xLkiSpBeZsiru6OA2TJAFOcSdJdeiIKe4kSZKkecEkWpIkSWqSSbQkSZLUJJNoSZIkqUkm0ZIkSVKT5vRiK5IkaX4ZGxtjaGiolnqHh4dZvnw5PT09La27v7+/5XVq4TGJliRJ221oaIhVq1a1O4ymrF27lhUrVrQ7DHU554mWpPnBeaLVFnX1RA8ODrJ69WrWrFnDwMBAS+u2J1pNmLJttSdakiRtt56enlp7dQcGBuw1VkfyxEJJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySnutGB4VS2pe9Txfa3zuwp+X6WFxiRaC4ZX1ZK6h99XSZ3OJFoLRn9/P2vXrm15vXVfVUtaiOr4vtb5XQW/r9JCYxKtBcOrakndo87vq99VSa3giYWSJElSk0yiJUmSpCaZREuSJElNckz0LDhlmiRJ0sJkEj0LTsEkSZK0MJlEz4JTpkmSJC1MJtGz4JRpkiRJC5MnFkqSJElNMomWJEmSmmQSLUmSJDXJJFqSJElqkkm0JEmS1CSTaEmSJKlJJtGSJElSk0yiJUmSpCaZREuSJElNMomWJEmSmmQSLUmSJDXJJFqSJElqkkm0JEmS1CSTaEmSJKlJJtGSJElSk3ZodwCSJGnujIyMMDo62u4wZjQ4OLjNbafr7e2lr6+v3WFoDi2oJNqGox51NBzdsq/A/SV1y/fV72qxr573nGezceSWltZbp9WrV7c7hEp26VvK6WecZfu6gERmtjuGWYmIrPIeRkZGOPI5z2XTyM1zENXCsqxvZ8484ystazi6sZHvJjb081a0tDLb1rZrddsKcMMNN7Bq1Sre+8iN7Lp4a8vqrcPWhJtvDXbeKVnU0r/u1rtpyyLeedEurF27lhUrVrQ7HLXWlH99C6YnenR0lE0jN7N5/2eQOy5pdzjTy63E7aPkDr0QnT1sPW7bDJd/ldHR0ZY19KOjo2wcuaUrGnnoxoaelu4vLWy2rfWoo21ttOvirfQv7vxOtLv1dn6Mhc7/X6XWWzBJ9LjccQm507J2hzGjXLxzu0Nou25p5MGGXrJtlbTQdPZPcUmSJKkDmURLkiRJTZrTJDoi7hYRZ0XExoj4U0R8OiJ2ioglEXFKRAxHxA0R8aGIWHBDTSRJktQd5jpRPQ24CdgX6AO+AbwK+IuybH+gFzgH+CNw4hzHJ0mSJM1ozpLoiHgA8BjgPpk5CFwfEU8pYzgeODwzrym3/QDwVkyiJUmS1IHmcjjHwcAG4N3lsI0/Af8ALAWWARc3bPtz4P4RHT4HkSRJkhakyklqRPRExIMi4gkR8biIOCAidmrite4BPAAYBXYHngg8G3gasCUzNzdsuxHooUiuG2M4LiKycWni9SVJk7BtlaTmzZhER8QREfGfwBDwC+A7wHkUvcVDEfGtiHhmxde7GXh7Zm7MzMuBTwFvBHaKiJ6G7fqAWzNzm0tgZeZxmRmNS8XXlSRNwbZVkpo35ZjoiHgo8HGKhPYM4IPAVcCN5SbLKU4G/CvgHRFxLPCGzPzRFFVeRZG09wC3l2WLgMuBRwAPAS4tyw8ALtmudzSFsbExAOI2LyXdSuOf5/jn2wrjdQ1v8f94q41/pq3cX5K6h+1rPWxbF6bpTix8L0Wv8YVTrP+/crkQ+HBEPAp4GzBVEv1Nip7oD0TEe4D7UYyJfitFgn1CRLwAuCfwLuCEJt/LtIaHhwFYcvk5raxWpeHhYXbbbbeW1QVw7EXLW1Kf7qqV+0tS97B9rZdt68IyZRKdmX873RMjYlFmbm3Y/sfAM6apb1NEPBb4GHANcD3wgcz8SkR8E/gMxYmHm4BPZObnK7+LCpYvLxqMzfs/ndxxaSurXtDitltYcvk5d3y+rTBe1/seOczyLrnsd7cY3hIce9Hylu4vSd3D9rUetq0LU6Up7iJiCfCvFPM6nwucBRwREZcAz83M31WpJzN/Azx5kvKNwPOrBr09enqKIde541Jyp2UzbK1mjX++raxr+eKk30a+Fq3cX5K6h+1rvWxbF5aqs3N8CHgK8CeKJPhxwPOAQeCj9YQmSZIkdaaqF1t5GvDizPx5RKwG1mbmf0TEtcDX6wtPkiRJ6jxVe6KXU/RCAzwe+F55fytzf+lwSZIkqa2qJsAXAv8UEb8G9gK+HRE7A/9IMV+0JEmStGBUTaJfB3wJOBw4OjNvjIizgYcxzYwckiRJ0nxUKYnOzHXAQROKXwncmJnOLC5JkqQFpfJ45og4FNgPWDyhnMz8WKsDkyRJkjpV1XmiPwK8HvgDd16ye1xSXEBFkrTAjF/mOG67pc2RzC/jn6eXkZY6V9We6JcBL8jM0+sMZi7EbZvbHcLMcitx+yi5Qy9E1QlU2qPOz/OmLYsoJoDpbFsTbr412HmnZFG0O5rpFZ+p1Drjl5Fecvk5bY5kfqrrMtLd0L7atqrTVU2iNwFX1RlI3Xp7e1nWtzNc/tV2hzLvLOvbmd7e3pbV19vbyy59S3nnRS2rUg126Vva0v2lhW38Mseb9386uePSNkczf8Rtt7Dk8nNafhlp29f62LYuPFWT6A8BH4mI1wPrmfDztbxsd0fr6+vjzDO+wujoaLtDmdHg4CCrV69mzZo1DAwMtDucGfX29tLX19ey+vr6+jj9jLO6Yl+B+0sL2/hljnPHpeROy9oczfzT6stId1P7atuqTlc1if4N8Ajg4gnlQTEmuisuFt/X19dVf+ADAwOsWLGi3WG0RbftK1jY+0tS9+i29tW2VZ2qahL9SeA/gFOAW2uLRpIkSeoCVZPonYEPZuZlNcYiSZIkdYWqp5OuAV4SER1+fqwkSZJUv6o90XsBTwOOiIhfA9vMa5aZq1odmCRJktSpqibRG4Ev1xmIJEmS1C0qJdGZ+ZK6A5EkSZK6xZRJdEScC3wgM79bpaKIeCpwdGY+rlXBSZK6g1eDba2u+DylBW66nui3UVxg5ePAWcCPgSuBmyjmhx4A9gUOAZ4F/A54TZ3BSpI6i1eDrU+rrwYrqbWmTKIz82fAYyPiycArKBLkXSkurjLuOuAC4NVVe6wlSfOHV4Otj1fAkzrbjGOiM/PbwLcjYhGwO3D38nnXZua1NccntczY2BhDQ0Mtr3dwcHCb21bq7+9v+WV/pVbzCniSFqKqs3OQmVsphmz8rr5wpPoMDQ2xalV9szGuXr265XWuXbvWf/aSJHWgykm01O36+/tZu3Zty+sdGxtjeHiY5cuXt7zXuL+/v6X1SZKk1jCJ1oLR09NTW6/ubrvtVku9kiSpM5lEz4JjbCVJkhamppLoiOgD7gusy8zb6gmpezjGVpIkaWGqlESXyfPngPGM8YER8Qngp8C7MnOspvg6mmNsJUmSFqaqPdHHAw8CHgecW5Z9BPg0xbzRx7Y+tM7nGFtJkqSFqep1T58LvCkzfzhekJnfBN4A/H0dgUmSJEmdqmoSvQy4fpLyawAH2EqSJGlBqZpEfwd4ecPjjIge4LXAj1selSRJktTBqo6Jfj3wzYi4AtgR+DywF3Ab8JSaYpMkSZI6UqUkOjOviYiHAEcCBwI7AacCX8rMW2qMT5IkSeo4zcwTvR9wa2a+DSAiXgj0ASbRkiRJWlAqjYmOiKOAn7Ht0I03AL+KiIPqCEySJEnqVFVPLHwn8NbMfMV4QWY+HDgF+HANcUmSJEkdq2oSvZI7L7LS6FTgwa0LR5IkSep8VZPo3wJPnaT8sUw+f7QkSZI0b1U9sfBo4D8j4gnADymmtvtL4OnA6ppikyRJkjpSpZ7ozPwOsD/wO+BvgBeUqx6bmV+sKTZJkiSpI1We4i4zrwJeMeOGkiRJ0jxXKYmOiAHgLcABwNKJ6zPz8S2OS5IkSepYVXuiTwMeDnwV2FhbNJIkSVIXqJpEPwY4IjO/W2cwkiQBjI2NMTQ01NI6BwcHt7lttf7+fnp6emqpu5PVsa+g3v21UPeVWisyc+aNIq4C/i4zf1J/SM2JiKzyHiRpnouWVtbmtvWGG25g1apVbXv97bF27VpWrFjR7jDmnPtK89yUbWvVJPoo4B+AF2Xm1S0MbNba3dBLUoeYV0l0Hb2bY2NjDA8Ps3z58lp6IRdq72ZdPdF17q+Fuq+0XWadRK8H7k0x/GMEGGtcn5kDswxwu7W7oZekDjGvkmhJ6hBTtq1Vx0Qf15o4JEmSpO5XqSf6jo0j+oD7Ausy87baomqCvSWSBNgTLUl1mLJtrXTFwojoi4gzgJuAy4GVEXFuRPxLRDQ9qCgieiLiRxHxifLxkog4JSKGI+KGiPhQRFS+EIwkSZI0lyol0cDxwIOAxwPjPdAfobj893u243WPBQ5qeHwisC/FpcUfBRwOvHE76pUkSZJqVzWJfi7wpsz8wXhBZn4TeAPw9828YEQcDDwHWFs+3hF4EfD2zLwmM68EPgC8tJl6JUmSpLlSNYleBlw/Sfk1QOWJFiNiF+AU4MXALWXx/cv6L27Y9OfA/SOianySJEnSnKmapH4HeHnD4yzHQr8W+HETr/cp4IuZ+dOGsl2BLZm5uaFsI9BDkVzfISKOi4hsXJp4bUnSJGxbJal5VeeJvh/wDYozFP8C+AmwF8X46Kdk5q8q1PF8iqT7MZk5FhGnUMw5/UngCmDHzBwrt30IcFFmLq5Qr2eQS5Kzc0hSHWY3T3Rm/r5MbI8EDgR2Ak4FvpSZt0z75Ds9ieKkwdsjtonn5RRDOx4CXFqWHQBcUrFeSZIkaU7N2BNdTjV3JvDazLyuZS9c9kRn5msj4mTgfhSzfdyT4qTDEzLz8xXqsbdEkuyJlqQ6bP880Zl5O8Ulvx/TyogmeDNwI7ABOI9i3PSMCbQkSZLUDlXHRL+SYj7oj1GMX97mSZn5tVqiq8DeEkkC7ImWpDpM2bZWTaK3TrM6M7Ppqxa2ig29JAEm0ZJUh1mfWOh8zZIkSVKpcnIcEYsj4vCIeGVELI+IfesMTJIkSepUVYdz7ENxwt/dgF7ggcDnKcZGPzMz/1xnkDPE5iFHSXI4hyTVYftn5yidSHFZ7rtTXGAF4Fnl/Y/OKjRJkiSpy1QaEw08AfjrzNw8fqGUzPxTRLwTOKeu4CRJkqROVLUnevMU2wbVE3FJkiRpXqiaRJ8GHB8R9xgviIgHUQzzWFtHYJIkSVKnqppEvwX4LXAdsBj4BfC/wDXA6+sJTZIkSepMlWbnuGPjiPsCBwA7Ab/KzN/WFVhVnkEuSYCzc0hSHZq/YmFEXElxMuGGiLgaODQzr60pwO1mQy9JgEm0JNVhu65Y2AN8NiIuB/YE3hMRw5NtmJn/OKvwJEmSpC4yXRL9DxTjnR9cPn4QxSwdE9lVIUmSpAWl6hULvw88PzP/WH9IzfGQoyQBDueQpDo0f8XCiPhuRNy7fGhLKkmSJJWmG86xH/D+iLgUOAx4dUTcMNmGmfmxOoKTJEmSOtF0s3O8GHgrsATYg2KO6Nsn2TQzc6+6ApyJhxwlCXA4hyTVofkp7rbZKGI9cFhm/r6VUbWCDb0kASbRklSH2SXRncyGXpIAk2hJqkPz80RHxCBwYGb+LiKGmObkwswcmF18kiRJUveY7sTCNwE3NNy3S0KSJEnC4RySNF84nEOSWm+7hnN8n4q9z5n5+O0ISpIkSepKU15sBTgfuKBcfgkcCowCPwAupEiwHw6cW2+IkiRJUmepOsXdN4ALM/NfJpS/G9gvM59XU3wz8pCjJAEO55CkOsx6nuhNwCGZedmE8gOBH2Zm32wj3F429JIEmERLUh2mbFunG87R6E/A0ycpfxp3zuAhSZIkLQjTTXHX6FjgCxHxV8CPga3AwcCTgBfVFJskSZLUkSpPcRcRDwZeBzwU2BH4FfDhzPxpbdFVi8tDjpLkcA5JqoOX/Zakec4kWpJab9ZjoiVJkiSVTKIlSZKkJplES5IkSU2qOjsHABGxHNibYnaO32bmLbVEJUmSJHWwSj3REdEXEV8EbgQuBi4FhiLi3yOit84AJUmSpE5TdTjHx4FHAs8E7gXsBbwU+Bvgw/WEJkmSJHWmqpf9vhF4VmaeP6H8b4HPZ+aKesKbmdMwSRLgFHeSVIdZT3E3DIxMUv4H4LbtiUiSJEnqVlWT6HcBH4yIvccLIuJewL8A76sjMEmSJKlTVR3OcQ1wD4rZPIaBW4EVFF3cw43bZuZA68OcNjYPOUqSwzkkqQ5Ttq1Vp7g7tkWBSJIkSV2vUk90J7O3RJIAe6IlqQ6z64mOiN2B9wD7AYsnrs/Mh213aJIkSVKXqTqc4wxgKfA14Pb6wpEkSZI6X9UTC0eBgzPz0vpDao6HHCUJcDiHJNVh1vNEXw7s05pYJEmSpO5WtSf6L4FvAV8G1gNbG9dn5sdqia4Ce0skCbAnWpLqMGXbWjWJ/ndgNfBHijmiG2Vm7jWr8GbBhl6SAJNoSarDrJPom4GXZ+bprYyqFWzoJQkwiZakOsx6TPR15SJJkiQteFWT6GOAj0TE4yJit4jYpXGpM0BJkiSp01RNos8CHgacB/wBGCqXm8rbSiLikRHx44jYHBHXRsTHImJJuZwSEcMRcUNEfCgiqs5hLUmSJM2pqonq42b7QhHRC3wd+BzwNOBuFMn5u4GdgX2B/YFe4ByKkxhPnO3rSpIkSa1W6cTCKZ8ccS/gnzLztRW2fSzFFQ93zcytZdnrgFcBewCHZ+YPy/IXA2/NzAdWqNeTXyTJEwslqQ6znp3j3sBJwN4TKtsF2CUz71Ghjl2B3TPzFw1lXwbuDjwRWJqZm8vyA4GfAjuNJ9zT1GtDL0km0ZJUh1nPzvEJ4P7Af1FcufDrwP8C/cBTqlSQmTeNJ9ARcd+IOIMieT4O2DKeQJc2Aj3Asm3eRcRxEZGNS8X4JUlTsG2VpOZVTaIPBV6Xme8C/gf4z8x8MfAx4HlVXywieiLiWOBXFIny/sAgsFNE9DRs2gfcmpk3Nz4/M4/LzGhcqr62JGlytq2S1LyqSfRiipk4AH4PPKC8fzbw90283leAI4FHZ+bqzPw/YANwC/CQhu0OAC5pol5JkiRpzlRNoi8GXhMRfcAVwOFl+T7AjlUqiIhDgccDj8/Mn4+Xl8M4TgNOiIgVEbE/8C7g5IqxSZIkSXOq6hR3bwa+Cvwf8GngnRGxHrgn8JmKdTyCYgz1DRHbHCm8ADiirGcDsAn4RGZ+vmK9kiRJ0pxqaoq7iFicmVsiYk/gGcC1mXlWTbFVjckzyCXJ2TkkqQ6zm50jIt4VEbtm5haAzNyQmScB50XE0a2JUZIkSeoO0/ZER8QR5d2zKS6Kcv2ETR4MHJOZS+sJb2b2lkgSYE+0JNVh+y62EhHjFzrJKSq5FfhcZv7DrMKbBRt6SQJMoiWpDlO2rdOeWJiZi+COZHrfzFzX4sAkSZKkrlNpdo7xZHpcROwM/CVwRWb+uY7AJEmSpE5V9cTCPSLi5xHxwohYBlwGfA+4qpz/WZIkSVowql5s5VMUVyo8F1gFbAXuDvwb8P56QpMkSZI6U9Uk+iDguMy8HngS8NXMvBH4AvCguoKTJEmSOlHVJPp2ICJiEfAEiqEcAPeguMKgJHW8devW8cxnPpN16zxHWpI0O1WT6HOAzwLfAnqA70XEwcCHuDOhlqSOlZkcf/zxDA4OcsIJJ+D0bZKk2aiaRL8B+CYwAjyzvHLhi4FfluskqaOtX7+e9evXk5lcffXVbNiwod0hSZK6WNUp7jYDbweIiN6y7BU1xiVJLbVy5UpWrlzJVVddxV577cWee+7Z7pAkSV2s6hR3O0TEByLiemAkIu4fEV+IiJfXHJ8ktUREcMwxxzAwMMA73vEOIlp6gT9J0gIz7WW/79go4p+BlwDHACcDDwYeDXwQeG9mnlRjjDPF5qVpJcnLfktSHaZsW6sm0dcAr8/MsyNiM/CQzPxtRPwdxdR3+7Qu1ubY0EsSYBItSXWYsm2temLh3YCrJim/HLjP9kQkSZIkdauqSfSPgWc0PB7vnnguRSItSZIkLRiVZucA3gh8JyIOKp/zvojYC7g/cHhNsUmSJEkdqdKYaICI2AV4DfBQYCeKOaI/kZl/rC26anE5bk+SHBMtSXWY3YmFncyGXpIAk2hJqsOUbWul4RwRsTvwHmA/YPHE9Zn5sO0OTZIkSeoyVcdEnwEsBb4G3F5fOJIkSVLnqzpP9ChwcGZeWn9IzfGQoyQBDueQpDrMep7oy4G2XVBFkiRJ6iRVk+hXAp+MiI9GxBsj4vWNS50BSlKrnH/++Rx22GGcf/757Q5FktTlqg7n+HdgNfBH4NYJqzMz96ohtko85Cipiq1bt/LkJz+ZLVu2sHjxYr797W+zaFHVfoSu4HAOSTMaGxtjaGio5XUODw+zfPlyenp6Wlo3QH9/fy31VjS72TmAo4DnZ+bprYlHkubWj370I7Zs2QLAli1buPDCC3nMYx7T5qgkaW4NDQ2xatWqdofRlLVr17JixYp2h3EXVZPo68pFkrrSIYccss3jgw8+uE2RSFL79Pf3s3bt2pbWOTg4yOrVq1mzZg0DAwMtrRuKmDtR1ST6GOAjEfEWiisVbm5cmZkbWx2YJLXS1Vdfvc3j9evXs88+ni8taWHp6emprVd3YGCgI3uM61I1iT6rvD0PaBwkF+Xjtg1UkaQqLr744rs8NomWJG2vqkn049k2eZakrnLVVVdt83jdunVtikSSNB9USqIz8/ya45CkWj360Y/mO9/5zh2PHRMtSZqNKZPoiBgEDszM30XEENP0RGdm60eRS1ILHXbYYSxatIitW7eyaNEiDjvssHaHJEnqYtP1RL8JuKG8/8b6Q5Gk+ixatIjjjjuOd7/73Rx33HHzbY5oSdIcmy6JPgz4L2BTZp46R/FIUm123313BgYG2H333dsdiiSpy03XFfMiYJe5CkSS6pSZHH/88QwODnLCCSfg1fgkSbMxXRLd0kvISlI7rV+/nquvvprMZN26dWzYsKHdIUmSuthMs3PcOyJun6mSzPx9i+KRpFrsueee7LDDDoyNjbHDDjuwxx57tDskSVIXmymJvmCG9V5sRVJX2LBhA7ffXvQJ3H777fzud79j5cqVbY5KkqY2MjLC6Ohou8OY0eDg4Da3na63t5e+vr5Z1zNTEv1C4LpZv4okNWlsbIyhoaGW1bfzzjtzv/vdj/Xr17PHHnvQ19fHDTfcMPMTm9Df309Pj30KkmZvZGSEI59zJJtGNrU7lMpWr17d7hAqWda3jDPPOHPWifRMSfRPMvPqWb2CJG2HoaEhVq1aVUvdV199Nc961rNaXu/atWtZsWJFy+uVtPCMjo6yaWQTY08cg952RzODBLYAi+n8M+pGYdN3NzE6Olp7Ei1JbdHf38/atWtbWufg4CCrV69mzZo1DAy0/hpR/f39La9T0gLXCyxpdxAVLG13AHNvuiT6AmDzXAUiSY16enpq69UdGBiwx1hSRxsbGyvudP6Q6O5Sfp53fL6zMGUSnZmPm3XtkiRJatrw8DAAPd/1PIs6DA8Ps9tuu82qDodzSJIkdZjly5cDdMeY6G4yWvwwGf98Z8MkWpIkqcPcMdNPt4yJ7jKtmElpuisWSpIkSZqESbQkSZLUJJNoSZIkqUkm0ZIkSVKTOiaJjohHRMTFEbE5Iq6IiKe2OyZJkiRpMh2RREfEMuDrwJnAvYD3Al+JiN3bGpgkSZI0iY5IooEjgJsz8/2ZeVNmng5cDBzV5rgkSZKku+iUeaIfBlwyoeznwH5tiEVSE8bGxrj22mvZsmVLu0OZ0U033QTA1VdfzeDgYHuDqWDx4sXc9773bcl8ppKk1uqUJHpXYGhC2Ubgvo0FEXEc8O65CUlSFddeey0vfOEL2x1GU44++uh2h1DZF7/4RfbYY49aX8O2VZKa1ylJ9CDFWOhGfcCNjQWZeRxwXGNZRGSdgUmaXm9vcT3asceMweI2BzOTBG4FdgKizbHMZAv0/LDnjs+3TratktS8TkmirwAOn1B2AHBGG2KR1IQ7hhosx0vTttLm4sahHJLUmTrlxMK1wH0j4lURsSwiXgo8FPiP9oYlSZIk3VVHJNGZOQL8LfBqiqEdrwOenpk3TvtESZIkqQ06ZTgHmXkh8JB2xyFJkiTNpCN6oiVJkqRuYhItSZIkNckkWpIkSWpSx4yJltTlRtsdQAUJbKGYz7rT54nuhs9TkhYwk2hJs9Lb28uyvmVs+u6mdocy7yzrWzYnF1uRJDXPJFrSrPT19XHmGWcyOtr5XaeDg4OsXr2aNWvWMDAw0O5wZtTb20tfX1+7w5AkTcIkWtKs9fX1dVWyNzAwwIoVK9odhiSpi3lioSRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkr1goqSONjY0xNDTU0joHBwe3uW21/v5+enp6aqlbktRZTKIldaShoSFWrVpVS92rV6+upd61a9d6OXFJWiBMoiV1pP7+ftauXdvSOsfGxhgeHmb58uW19Bj39/e3vE5JUmcyiZbUkXp6emrp1d1tt91aXqck1Wa03QFUkMAWYDEQbY5lJi38PE2iJUmSOkxvby/L+pax6bub2h3KvLOsbxm9vb2zricyswXhtE9EZLe/B0lqgZb2/9i2Su03MjLC6Gjnd0UPDg6yevVq1qxZw8DAQLvDmVFvby99fX1VN5+ybbUnWtKCsW7dOo4++mhOPPFE9t5773aHI0nT6uvraybZa7uBgYEFdXK180RLWhAyk+OPP57BwUFOOOEE7GWVJM2GSbSkBWH9+vWsX7+ezOTqq69mw4YN7Q5JktTFTKIlLQgrV65k5cqVRAR77bUXe+65Z7tDkiR1MZNoSQtCRHDMMccwMDDAO97xDiI6fR4mSVIn88RCSQvG3nvvzdlnn93uMCRJ84A90ZIkSVKTTKIlSZKkJplES5IkSU0yiZYkSZKaZBItSZIkNckkWpIkSWqSSbQkSZLUJOeJliRJWiDGxsYYGhpqaZ2Dg4Pb3LZaf38/PT09tdQ9G5GZ7Y5hViIiu/09SFILtPQSjLat0vx0ww03sGrVqnaH0ZS1a9eyYsWKdr38lG2rSbQkzQ8m0ZJmVEdP9NjYGMPDwyxfvryWHuM290SbREvSPGcSLUmtN2Xb6omFkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTdqh3QG0QsSUlzWXpIUiM7OljaFtqyRN3bZGZs51MKogIlr+D1H1cX91D/fVwub+7y7ur+6xEPeVwzkkSZKkJplES5IkSU0yiZYkSZKaZBLdud7T7gDUFPdX93BfLWzu/+7i/uoeC25feWKhJEmS1CR7oiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2gREXtExOcj4rqI2FLefikiHjjJts+JiIsj4uaI+GNEnB0Rf9mOuFulzvcfES+OiA0zrM8plh+V25wyybobI+L0iLhnQ127RMSHI2JdRNwSEb+NiPdFxPJZfkRTxf6miPjqJOVPiYhLI2K0/Iw+EBE9DesfFhH/Xcb464g4qo74pE5jW2tb24yIuF9EfC0iNkbEDRHxUdvSzmISvcBFxH7Az4ADgdeXty8G+oGLI+Kwhm2fDXwW+HfgEODvgDHgwoh48NxG3hod9P73nWR5bsP6ixrK7w88D3gE8IWGbb4MHAy8CjgIeDfwQuCbs4xtGxGxKCIOAt48yboHAOcA55XxHV3G84/l+uXAt4AryhhPBE6JiMe0Mkap03RQW9MWHfT+u6KtjYgdgG8AOwKPB14DvARYXa63Le0EmemygBeKBuMXwNIJ5YuA7wAbgB3KsvOA90/YLoBfAh9s93vpxPdP8U9iwzSv/+LiazhtjKcA509S/kKKfyxLgN2BBPabsM1fleUPauFndktZZwJfnbDufcDlE8r+BbiyvP8G4Hfjn2lZdgbwpXb/Lbi41LnY1trWNvl5Padsa5c3lP0z8MXyvm1pByz2RC9g5aGxRwD/nJm3NK7LzK3AMcAewHgPQT9wnwnbJXAU2/5Kn01Me5aH0F5UDgm4JSLOiYgHRsT3yyECV0TEgQ3PeVhEnB8RI+Wht7Mj4r6N77M85DUaEesj4k2d+v6btIniH9AOFLHBhPiAnwKHA39s4es+EjiAosd5ouXABRPKrgfGD4UeBnwnM29vWH8BRU+LNC91YltjW9uUdrS1TwLOzczh8YLMfFdmvrB8aFvaAUyiF7a/Km9/MMX6S4HbKBImgK8AL4iI/4mId0XEYyNiSWb+PDN/0eLY3g0cC6wCnghcApxJcdjqT8BHGrY9B7gSeHS5/V7ASQAR0Q+cC1xM0Yi/G3h/RDyVzn7/04qIvYC3ABdm5s0UPTSXA1+LiDMi4hURsV9mbs3Mb2XmYKteOzMvz8zLgZsmWfe6zHxNQ5yLgRcBl5VFK4H1E552LXD3iIhWxSh1mE5ua2xrp9HGtvZBwA0R8blyPPRVEXFsOcwDbEs7gkn0wjZQ3k76pc/MMWAIWFo+fj9FQjQMvA34PnBjRJwaEcsmqyMizi17JSZbTp4mtuMz8xuZ+S3g58B5mfmpzLwMOA3Yr6y/FzgVeHNmXpaZFwBfA/Yu63k1cAPwhsz8RWZ+AfgARQNU+/uvaorPp/EklUMbym8F1gG9FGPkKHsjHg98tPxsPgP8MiJ+HxEvmeI195hm34xGxKGzfE/7AOdT/DN4a1ncB2yesOkI0ENxqFSaj2xra37/VXVRW9tPMYxkM0UP93so2tF3lOttSzvADjNvonls/DDRbhS/YLdR9iLeHfjzeFnZMH4hInak6G1YBbwWuBV4+SSvsZqyYZzm9SdzRcP9W4GrGx7fDiwu4xmNiE8BL4+IBwH3o+j1WFduewBFD0I2vIdjy/f3urKozvdf1UMnKbu54f7FwN83PP5zZt7YuHFm/pmigX1HRNwNeBzwSuCzEXFlZv5oQv1/mOJ1x/2+WujbKntB3kwxfu9a4LDM/J9y9TB3/XvoBbZMPMwrzSO2tQXb2slN1tYuAn7VcGTvpxGxL8WPi/diW9oRTKIXtkvK24OAsyZZ/wSKkzkuLL+87wVelZk3ZeZtwH8D/x0Rmyi+2HeRmduViHHXX9hbJ9soIlZSnPH9LYozo38NPA3423KTPmDjFK9R+/uvKjN/PcMmt0y3TUSsBu6emSeU9d0InBURZ1Mcfn0isE3DXr6HmV53e3wZOBL4EHBcZjbuyz8A952w/e4UJ8hI85VtbcG2trr/A66bUPYr7jy/xLa0AzicY2H7McUX+x3lr/07lL2JbwW+l5m/pPjVeyQw2WGnW7lrQzxez3kRcfsUy2db8B6eAQxn5vMy89Syx3P3hvW/BraZWzSKk2feyRy8/zm0HHh9ROzUWFgeJr2dSeIrDzFOtW9uj4Ypp6qKiL+j+JyekZlvm5BAQzFm8gnl5zvur8tyab6yrbWtbbat/Qnw4Alt5f7cmYzblnYAe6IXsMzMiHgpxZfu3Ij4EMWhuXtSTJ+zL8UJJGTm/0XEvwFrIuKfKBrFXSnmynwHxdnVk3kJ23eIsaprgXtGxLOAq4BnAkcAN0XEfYBPUjR476PoAflr4CnAO+fo/c+VzwNvAr4REe+n6KXYk+Kw5D0oxjZO9AeKRnkq29Oz9RyKnqpfRzEm+g6ZeRVwOsXYvo+V/9ifATwV6Mq5b6UqbGtta2m+rf0UxTzUn4piTPt+FPNrv7Rcb1vaCbID5tlzae8CPAD4EsWZ2LdSfKE/Bew2YbtFFOO+LqUYQ/Znivk9n97CWPakmGvzoQ1l5wMnNTx+MXBTeT8ozg4fojj8dSLwcIoTXD5VbnM4xRnVo8D/AkfM1funxrlLJ9nunhQXJ1hH0RuynuKkl71r+rs5hbvOE30Fd84hvc3SsM0jKaaD2kwxb+yT2v0dcHGZi8W21ra2yX30VxQ90lso5tF+7YT1tqVtXqLcEZIkSZIqcky0JEmS1CSTaEmSJKlJJtGSJElSk0yiJUmSpCZ1/RR3EZGeHClJxMybNFGZbaskwTRtqz3RkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1aU6T6Ih4WUT8JiI2R8T6iDi6LF8REV+LiJGIuC4i3j6XcUmSJEnNmLMp7iLiocAngccDlwAPA86NiMuANwGbgb2B+wDfiIirMvOsuYpPkiRJqmou54keK5cdgcbJRzcDhwN7ZOb1wPUR8RngpYBJtCRJkjrOnA3nyMxfAB8Ezge2AP8N/AewK/DnzLymYfOfA/vNVWySJElSM+YsiY6IxwBvBY4A+ih6n58NrACGJmy+EdhlkjqOi4hsXGoOW5LmPdtWSWpezNVlXSPiY8A9M/M5DWWfAY4ENmXm/RrKnw58MDPvX6FeL00rSV72W5Lq0BGX/d40SSC3AV8D7hMRKxrKDwAunqvAJEmSpGbMZRJ9NvDUiHhGRCwth3e8APgc8D3gxIjYJSIOAV4HnDyHsUmSJEmVzdlwDrhjmMa7gb8Afge8NzNPi4h7A2uAxwF/LssrJdEecpQkwOEcklSHKdvWOU2i62BDL0mASbQk1aEjxkRLkiRJ84JJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktSkOU2iI+JuEXFWRGyMiD9FxKcjYqeIWBIRp0TEcETcEBEfiogd5jI2SZIkqaq5TlRPA24C9gX6gG8ArwL+oizbH+gFzgH+CJw4x/FJkiRJM4rMnJsXingA8DPgPpk5WJatpEjkfwYcnpk/LMtfDLw1Mx9Yod6cq/cgSR0sWlqZbaskwTRt61wO5zgY2AC8uxy28SfgH4ClwDLg4oZtfw7cPyIcsy1JkqSOUzlJjYieiHhQRDwhIh4XEQdExE5NvNY9gAcAo8DuwBOBZwNPA7Zk5uaGbTcCPRTJdWMMx0VENi5NvL4kaRK2rZLUvBmHc0TEEcDLgcMoxjE32gz8EPi3zDx7hnreDhwDLB8/RhgRbwHeCtwN2DEzx8ryhwAXZebiGd+AhxwlCRzOIUl1aH44R0Q8NCJ+CLwH+G+KHuP7AkvK5Z7Ak4BzgXdExCUR8ehpgriqfL2eCa9/OXAL8JCG8gOAS6apS5IkSWqbKXuiI+I/gX/NzAsrVRTxKOBtmfmMKdYvo0ikT6NIzO8HfJ2iJ/qJ5eMXUCTna4ETMvPzFV7X3hJJsidakuowZdu63bNzRMSizNza5HP+AvgY8CjgeuCkzPxkROwCfAY4AtgEfCIz31uxTht6STKJlqQ6zC6JjoglwL9SzOt8LnAWRcJ7CfDczPxda+Jsng29JAEm0ZJUh1lPcfch4CnAn4AnA48DngcMAh+dbXSSJElSN6naE/174MWZ+b2I+DiwJDNXR8RfAV/PzLvXHeg0sdlbIkn2REtSHWbdE72cohca4PHA98r7W5n7S4dLkiRJbVW1J/obwBDwa4q5nu8L3Ar8O3CvzHxsjTHOFJu9JZJkT7Qk1WHKtrVqL/LrgC8BhwNHZ+aNEXE28DDgGbMOT5IkSeois5ni7h7AjeNXGWwXe0skCbAnWpLqMOueaCLiUGA/YPGEcjLzY9sfmyRJktRdqo6J/gjweuAPwO0TVmdm7lVDbJXYWyJJgD3RklSHWV9sZSPwisw8vZVRtYINvSQBJtGSVIdZT3G3CbiqNbFIkiRJ3a2ZKxZ+JCIOjIhdI2KXxqXOACVJkqROU/XEwt8AjwAunlAeQAI9rQxKkiRJ6mTNXPb7h8ApFBdZ2UZmXtDyyCpy3J4kAY6JlqQ6zPrEwiHgcZl5WQuDagkbekkCTKIlqQ6zPrFwDfCSiGhpIy1JkiR1o6pjovcCngYcERG/BjY3rszMVa0OTJIkSepUVZPojcCX6wxEkiRJ6haVxkR3MsftSRLgmGhJqkPzY6Ij4tyIeGLlV4h4akR8v9nIJEmSpG4zZU90RBwIfATYDTgL+DFwJXATRVY+AOwLHAI8C/gd8PrM/GXtUW8bp70lkmRPtCTVYfunuIuIJwOvAB4H7EpxcZVx1wEXAKdm5ndnHeZ2sKGXJMAkWpLqMLt5ogEiYhGwO3B3ihMSr83Ma1sS3izY0EsSYBItSXWYfRLdqWzoJQkwiZakOsz6YiuSJEmSSibRkiRJUpNMoiVJkqQmNZVER0RfRDwgInasKyBJkiSp01VKosvk+QyKOaIvB1aWF2P5l4joqTNASZIkqdNU7Yk+HngQxVzRt5VlHwFeALynhrgkSZKkjlVpiruIuB54YWaeGxGbgYdk5m8j4unAxzPzfnUHOk1sTsMkSU5xJ0l1mPUUd8uA6ycpvwZYsT0RSZIkSd2qahL9HeDlDY+zHAv9WuDHLY9KkiRJ6mBVh3PsDnyTokv7L4CfAHtRjI9+Smb+qs4gZ4jNQ46S5HAOSarD7C/7XfY8HwkcCOwE/BL4Umbe0ooIt5cNvSQBJtGSVIcp29YdmqhkP+DWzHwbQES8EOgD2ppES5IkSXOt6jzRRwE/A57SUPwG4FcRcVAdgUmSJEmdquqY6F8CJ2fmRyaUfwh4VGYeXFN8M/KQoyQBDueQpDrMeoq7lcC5k5SfCjx4eyKSJEmSulXVJPq3wFMnKX8sk88fLUmSJM1bVU8sPBr4z4h4AvBDiqnt/hJ4OrC6ptgkSZKkjtTMFHf7AG8F9qeYlePXwEcys60XW3HcniQBjomWpDrMfp7oTmVDL0mASbQk1WF280RHxADwFuAAYOnE9Zn5+O0OTZIkSeoyVcdEnwY8HPgqsLG2aCRJkqQuUHWe6FuAIzLzu/WH1BwPOUoS4HAOSarDrOeJ/gMw0ppYJEmSpO5WNYl+J/DBiNirzmAkSZKkblB1OMd64N4UY6hHgLHG9Zk5UEt0FXjIUZIAh3NIUh1mNzsHcFxr4pAkSZK6X1PzREdEH3BfYF1m3lZbVE2wt0SSAHui1SZjY2MMDQ3VUu/w8DDLly+np6enpXX39/e3vE7NW7OeJ7oP+Bywqix6YER8Avgp8K7MHJvyyZIkad4aGhpi1apVM2/YQdauXcuKFSvaHYa6XNUx0R8DngC8Gvg28BBgb+DTwP/LzGObetGIHuAC4LLMfG1ELCnreiZwG3Aq8LbMvL1CXfaWSJI90WqTunqiBwcHWb16NWvWrGFgoLWnXtkTrSbMekz0c4EXZuYPIoq6MvObEfEG4ONAU0l0uf1BwGXl4xOBfYH9gV7gHOCPZbkkSepQPT09tfbqDgwM2GusjlR1irtlwPWTlF8DNPWXHREHA88B1paPdwReBLw9M6/JzCuBDwAvbaZeSZIkaa5UTaK/A7y84XGWQzJeC/y46otFxC7AKcCLgVvK4vtTJOkXN2z6c+D+EVE1PkmSJGnOVB3O8QbgGxFxBbAj8HlgL4rxy09p4vU+BXwxM386PiwE2BXYkpmbG7bbCPRQJNc3jxdGxHHAu5t4PUnSDDqxba1jnG2dsz2A42ylhaZSEp2Zv4+IhwBHAgcCO1Gc/PelzLxl2ieXIuL5FIn3iyasGgR2ioiehlk++oBbM/Pmxg0z8zgmzFkdEZ75Ikmz0IltqzM+SOp0MybREbEDcCbw2sw8HTh9O1/rScCjgNsbeqGhGCZyC8WMH5eWZQcAl2zn60iSulx/fz9r165taZ11zvYARcySFo4Zk+jMvD0i7g08hu1PoMnMF1OMhQYgIk4BRsop7k4GToiIFwD3BN4FnLC9ryVJ6m51zvjgbA+SWqHqmOjPASdFxF7AFcA2h/ky82uzjOPNwGeADcAm4BOZ+flZ1ilJkiTVomoS/eny9n2TrEuKkwCbUvZMj9/fCDy/2TokSZKkdqh6YqFTzUmSJEmlyslxRCyOiMMj4pURsTwi9q0zMEmSJKlTVeqJjoh9gPOAu1Fclvv7wOfLKZCemZl/ri9ESZIkqbNU7Yk+keKKgnenuMAKwLPK+x+tIS5JkiSpY1U9sfAJwF9n5ubxOZ4z808R8U7gnLqCkyRJkjpR1Z7ozVNsG1RPxCVJkqR5oWoSfRpwfETcY7wgIh5EMcyjtZeUkiRJkjpc1ST6LcBvgeuAxcAvgP8FrgFeX09okiRJUmeqOk/0rcArIuKfgQOAnYBfZeZv6wxOkiRJ6kRTJtERcSXFyYQbIuJq4NDMvBa4ds6ikyRJkjrQdD3RPcBnI+JyYE/gPRExPNmGmfmPNcQmSZIkdaTpkuh/oBjv/ODy8YMoZumYKFsdlCRJktTJpkyiM/NbwLcAIuL7wPMz849zFZgkSZLUqaacnSMivhsR9y4f2tssSZIklaYbzrEf8P6IuBQ4DHh1RNww2YaZ+bE6gpMkSa01MjLC6Ohou8OY0eDg4Da3na63t5e+vr52h6E5NF0S/U/AW4FHU1yZ8CXA7ZNsl4BJtCRJHW5kZITnPefZbBy5pd2hVLZ69ep2h1DJLn1LOf2Ms0ykF5DpxkSfApwCEBHrgcMy8/dzE5YkSWq10dFRNo7cwnsfuZFdF29tdzjT2ppw863Bzjsli6Ld0Uzvpi2LeOdFxedrEr1wVL3Yysq6A5EkSXNj18Vb6V/c+ac73a2382MsdPYPEtVjuoutDAIHZubvImKIaU4uzMyBOoKTJHU+x9jWwzG2Umebrif6TcANDfe75eegJGmOjIyMcORznsumkZvbHUpl3TLGdlnfzpx5xldMpKUONd2Y6FMb7p8yJ9FIkrrK6Ogom0ZuZvP+zyB3XNLucKaXW4nbR8kdeiGmnOG1I8Rtm+HyrzrGVupg0w3n+D4Ve58z8/Eti0iS1HVyxyXkTsvaHcaMcvHO7Q5B0jwx3U/x84ELyuWXwKHAKPAD4EKKBPvhwLn1hihJkiR1lumGc7xn/H5EfAN4d2b+S+M2EfFu4KG1RSdJkiR1oKqDwg4D/muS8q8BT2tdOJIkSVLnq5pE/wl4+iTlT+POGTwkSZKkBaHSxVaAY4EvRMRfAT+mmFX8YOBJwItqik2SJEnqSFWvWHhaRFwBvA44AtgR+BVwcGb+tMb4JEmSpI5TtSeazPxf4OU1xiJJkiR1hc6ebV6SJEnqQJV7oiVJUncbGxsDYHhLtDmS+WX88xz/fLUwmERLkrRADA8PA3DsRcvbHMn8NDw8zG677dbuMDRHmkqiI2I5sDfF7By/zcxbaolKkiS13PLlRfL8vkcOs3xxtjma+WN4S3DsRcvv+Hy1MFRKoiOiD/g0cBR3jqO+LSJOBV6fmaM1xSdJ6mDjh6/jNvtUWmn882z18ICenh4Ali9O+k2iW27889XCULUn+uPAI4FnAhcBS4BDgPcDtwP/UEt0kqSONj48YMnl57Q5kvnJ4QFS56qaRB8BPCszz28o2xARG4HPYxItSQvS+OHrzfs/ndxxaZujmT/itltYcvk5Dg+QOljVJHoYGJmk/A/Aba0LR5LUTcYPX+eOS8mdlrU5mvnH4QFS56o6T/S7gA9GxN7jBRFxL+BfgPfVEZgkSZLUqar2RJ8A3AP4bUQMA7cCK4AAHhkR7x3fMDMHWh6lJEmS1EGqJtHH1hqFJEmS1EUqJdGZeWrdgUiSJEndouo80bsD7wH2AxZPXJ+ZD2txXJIkSVLHqjqc4wxgKfA1inmhJUmSpAWrahJ9IHBwZl5aZzCSJElSN6g6xd3lwD51BiJJkiR1i6o90a8EvhURhwDrga2NKzPzY60OTJIk1eOmLYuY8K+842xNuPnWYOedkkXR7mimV3yeWmiaSaLvBjybYo7oRgmYREuS1OF6e3vZpW8p77yo3ZHMP7v0LaW3t7fdYWgOVU2ijwKen5mn1xmMJEmqT19fH6efcRajo6PtDmVGg4ODrF69mjVr1jAw0PnXcevt7aWvr6/dYWgOVU2irysXSZLuIm7b3O4QZpZbidtHyR16ITr78Hudn2dfX19XJXsDAwOsWLGi3WFId1E1iT4G+EhEvAX4JbDNtzszN7Y6MElS5+vt7WVZ385w+VfbHcq8s6xvZ4cHSB2sahJ9Vnl7HsUY6HFRPu6pUklEPBL4KPBQ4EZgLfC2cvWngWcCtwGnAm/LTOeklqQO1tfXx5lnfMXhATVweIDU2aom0Y+b7QtFRC/wdeBzwNMoTlQ8C3g3sDOwL7A/0AucA/wROHG2rytJqpfDAyQtRJWS6My8YLLyiLgX8E/ApOsnOIgiQT4mM7cCN0bEycCrgD2AwzPzmrLeDwBvxSRakiRJHahSEh0R9wZOAvamGMIxbpdyeW2Fai4DDikT6HGPAv4APBC4uKH858D9I2LRhO2l7TY2NsbQ0FAt9Q4PD7N8+XJ6eiqNbKqsv7+/5XVKkqTZqzqc4xPAXsDXgDdSJNT3A/4W+OsqFWTmTcBNABFxX+DDwGMpxkE/JjMbT1bcSDHOehlw83hhRBxHMfyjI5iUdZehoSFWrVrV7jCasnbtWg87q3ad1rZKUjeomkQfCjwzM38YEY8C/jMzfxoR7waeB1xapZKI6AHeQXEy4VcoxkDfDdgpInoyc6zctA+4NTNvbnx+Zh4HHDehzsYTHeeUSVl36e/vZ+3atS2vt86Tlfr7+1tanzSZTmtbJakbVE2iF1P2IgO/Bx4A/BQ4GziXYvxyFV+hOIHw0Zn5c4CIuBm4BXgIdybjBwCXVKyzbUzKuktPT0+tPyA8WUmSpIWjahJ9MfCaiDgauAI4HPgisA+wY5UKIuJQ4PHAvpl543h5Zm6OiNOAEyLiBcA9gXcBJ1R+F21iUiZJkrQwVU2i3wx8Ffg/ivmc3xkR6ykS3s9UrOMRQD9wQ0TjuYlcABxR1rMB2AR8IjM/X7FeSZIkaU5VneLuUuB+EbE4M7dExIHAM4BrM/Os6Z99Rx0fAj40zSbPr1KPJEmS1G6LqmwUEe+KiF0zcwtAZm7IzJOA88ohHpIkSdKCMW1PdEQcUd59N/DHiLh+wiYPBo7Bi6JIkiRpAZlpOMdXy9sE/m2S9bdSXMZbkiRJWjCmTaIzcxFARGylmFVj3ZxEJUmSJHWwqicWbjN2OiJ2Bv4SuCIz/1xHYJIkSVKnqpRER8QeFJf8PhFYC1wGrARujoi/zcwf1BZhC42MjDA6OtruMGY0ODi4zW2n6+3tpa+vr91hSJIkzZmq80R/iuJKhecCq4CtwN0pLt/9fuBRtUTXQiMjIxz5nOeyaeTmmTfuEKtXr253CJUs69uZM8/4iom0JElaMKom0QcBT8rM6yPiScBXM/PGiPgC8Kr6wmud0dFRNo3czOb9n0HuuKTd4UwvtxK3j5I79EJUmoWwbeK2zXD5VxkdHTWJliRJC0bVJPp2ICJiEfAE4GVl+T0orjDYNXLHJeROy9odxoxy8c7tDqGtumXoDTj8RpKkhahqEn0O8FngeqAH+F5EHExxBcLv1RSbFqiRkRGe95xns3HklnaH0pRuGX6zS99STj/jLBNpSZJmoWoS/QaKC67cH3hmeenvFwO/LNdJLTM6OsrGkVt47yM3suvire0OZ0ZbE26+Ndh5p2RRtDua6d20ZRHvvAiH30iSNEtVp7jbDLwdICJ6y7JX1BiXxK6Lt9K/ONsdRiV36+2OOItzgiVJ0mxVOmstInaIiA+Ul/0eiYj7R8QXIuLlNccnSZKkDvayl72MQw89lJe/fGGlhVWnfngXcBRwNMVJhgDnA/8aEW9sfViSJEnqdKOjo1x55ZUA/OY3v+maSQFaoeqY6JcAr8/MsyPi3wEy83MRcStwHHBSPeG1ztjYGABxW3edrNbpxj/P8c9XkiQtHG94w7anxr3xjW/kM5/5TJuimVtVk+i7AVdNUn45cJ/WhVOf4eFhAJZcfk6bI5mfhoeH2W233VpS13hCPrylw8/S60Ljn6k/etTpxsbGGBoaammddU9H2d/fT09PTy11d7I69hXUu78W6r6qw0c/+lGe9KQn3fH4pJNOal8wc6xqEv1j4BnAL8rH42dRPZcike54y5cvB2Dz/k8nd1za5mjmj7jtFpZcfs4dn28rjP/gOfai1tWpbbXyR49Uh6GhIVatWlVL3XVNR7l27VpWrFhRS92drM59BfXsr4W6r+qwww47TPt4Pqv6Tt8IfCciDiqf876I2ItiyrvDa4qtpcZ/ceaOS7viYivdppW/6McT8vc9cpjlXTI7R7cY3hIce9Hylv7okerQ39/P2rVrW1rn2NgYw8PDLF++vJZeyP7+/pbX2Q3q2FdQ7/5aqPuqDieffPI2j9esWcOrXtUVF7OetapT3P0iIu4PvAYYAXYCzgWOyMw/1hifFqDxxnL54uyaKe66jYcx1el6enpq6Sn0CEzr1bWvwP3VDZ74xCdy2mmn3fH4CU94QhujmVuV+9wzcyNwQo2xSJIkqYvss88+9Pf3MzQ0RH9/P/vss0+7Q5ozlZLoiNgdeA+wH7B44vrMfFiL46pN3La53SHMLLcSt4+SO/RCVJ2FsD264vOUJEm1iAg+/OEPc/TRR3PiiScSsXAmBajaE30GsBT4GnfOE91Vent7Wda3M1z+1XaHMu8s69uZ3t7edochSZLaYO+99+bss89udxhzrmoSfSBwcGZeWmcwderr6+PMM77SFZOADw4Osnr1atasWcPAwEC7w5lRb28vfX19La/3pi2L6IbLVG9NuPnWYOedkkUd/gO8+EwlSdJsVU2iLwf2Abo2iYYika4j2avLwMDAgpyCp7e3l136lvLOi9odyfy0S99SjxxIkjRLVZPoVwLfiohDgPVM6B7MzI+1OjAtXH19fZx+xlldcdQAPHIgSdJC1EwSfTfg2cCtE9YlYBKtluq2owawcI8cSJK0EFVNoo8Cnp+Zp9cZjCRJktQNqp5ldF25SJIkSQte1ST6GOAjEfG4iNgtInZpXOoMUJIkSeo0VYdznFXenkcxBnpclI+9hrAkSZIWjKpJ9OPZNnmWJEmSFqxKSXRmnl9zHJIkSVLXmDKJjohB4MDM/F1EDDFNT3Rmdv7kuJIkSVKLTNcT/SbghvL+G+sPRZIkSeoO0yXRhwH/BWzKzFPnKB5JkiSp402XRL8IeB939kZLXW1sbIyhoaGW1zs4OLjNbSv19/fT0+PkN5IkdZrpkuiYsyikOTA0NMSqVatqq3/16tUtr3Pt2rUL9lLidfzoGRsbY3h4mOXLl9fy48QfPZK0cMw0O8e9I+L2mSrJzN+3KB6pNv39/axdu7bl9daZmPX397e0vrqMjIwwOjra0joHBwdr+WFSpzVr1jAw0LrzrHt7e+nr62tZfZKk1pkpib5ghvVebEVdo6enp7Ze3d12262WervByMgIRz7nSDaNbGp3KG3X6qR/Wd8yzjzjTBNpSepAMyXRLwSum4tAJHWn0dFRNo1sYuyJY9Db7mhmkMAWYDGdP2BtFDZ9dxOjo6Mm0ZLUgWZKon+SmVfPSSSSulsvsKTdQVSwtN0BSJLmg0XtDkCSJEnqNtP1RF8AbJ6rQLqRU6ZJkiQtTFMm0Zn5uLkMpBs5ZZokSdLCNNOYaE3DKdMkSZIWJpPoWXDKNEmSpIXJEwslSZKkJplES5IkSU0yiZYkSZKaZBItSZIkNckkWpIkSWpSxyTREfGIiLg4IjZHxBUR8dR2xyRJkiRNpiOS6IhYBnwdOBO4F/Be4CsRsXtbA5MkSZIm0RFJNHAEcHNmvj8zb8rM04GLgaPaHJckSZJ0F52SRD8MuGRC2c+B/doQiyRJkjStTkmidwWGJpRtBHZpLIiI4yIiG5e5ClCS5ivbVklqXqck0YPA0gllfcCNjQWZeVxmRuMyZxFK0jxl2ypJzeuUJPoK4KETyg6gGBctSZIkdZROSaLXAveNiFdFxLKIeClFUv0f7Q1LkiRJuquOSKIzcwT4W+DVFEM7Xgc8PTNvnPaJkiRJUhvs0O4AxmXmhcBD2h2HJEmSNJOOSaIldaexsbHizmh745h3ys/zjs9XktRRTKIlzcrw8DAAPd/taXMk89Pw8DC77bZbu8OQ1AYjIyOMjra2h2JsbOyOdrtbLF++nJ6e1v2P6e3tpa+vb9b1mERLmpXddtuNJUuXsPmWze0OZd5ZsnSJCbS0QI2MjHDkc45k08imdocy7yzrW8aZZ5w560TaJFrSrCxfvpz/OOs/Wt5bUofBwUFWr17NmjVrGBgYaHc4M2pVb4mk7jM6OsqmkU2MPXEMeltYcQJbWljfXFgMtGr2+lHY9N1NjI6OmkRLar++vr6uSvYGBgZYsWJFu8OQpCnVdj5E0NqkvEu14vM1iZYkSeownm9Sr1acb9IR80RLkiTpTuPnm6j1WnW+iT3RkiRJHaau803Gzw3pJq0+j8XZOSRJkuaxOs436e/vZ+3atS2tc3zavFZPRTeuv7+/lnpnyyRakiRpgejp6Wn5idXr1q3jbW97GyeeeCJ77713S+vuZCbRkjrS2NgYQ0NDLa1zcHBwm9tW69TeEkmqS2Zy/PHHMzg4yAknnMDJJ59MRKvmo+tsJtGSOtLQ0BCrVq2qpe66xgOuXbvWqfMkLSjr169n/fr1ZCZXX301GzZsYOXKle0Oa06YREvqSN06bk+SFpKVK1eycuVKrrrqKvbaay/23HPPdoc0ZyIz2x3DrEREdvt7kKQWaOnxU9tWSVWtW7eOo48+er6OiZ6ybTWJlqT5wSRaklpvyrbVi61IkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1ySRakiRJapJJtCRJktQkk2hJkiSpSSbRkiRJUpNMoiVJkqQmmURLkiRJTTKJliRJkppkEi1JkiQ1aYd2B9AKEdHuECSp3TIzW9oY2rZK0tRta2TmXAejCiKi5f8QVR/3V/dwXy1s7v/u4v7qHgtxXzmcQ5IkSWqSSbQkSZLUJJNoSZIkqUkm0Z3rPe0OQE1xf3UP99XC5v7vLu6v7rHg9pUnFkqSJElNsidakiRJapJJdM0iYklEnBIRwxFxQ0R8KCI6Zn7uMrZPTLFuz4hYkIcqImJlRGxsdxwTub/uqtO/Y+MiYlFErIuIh7c7lvmg0/e739XJ2bZ2j07/jo1rZ9vacR/GPHQisC+wP9ALnAP8sSxvq078MrRbROwB/A3wajrsR6b7a0od+x0DiIg+4BnAc4C92hvNvNKx+93v6l3Ztnaljv2OQWe0rR31h9xuEbFXRHyz/NV1dUS8oix/dlm2U8O2p0bEqTM8b0fgRcDbM/OazLwS+ADw0u2I7d0R8YOGxz+LiO80PL4gIl5W3v/7iLgiIkYi4r8j4tEN22VE/GNEXFPG1vgayyLiSxGxKSL+ALy42TjnUqv3V2kv4C+Ba2YZm/trEp38HSvrWxYRn4mIP5U9Lx+JiMURsVtE3B4RBzVs+5KI2BCFSZ9XbroL8Fjg/7Ynpvmgk/e739W7sm3trv0Fnf0dK+ubn21rZroUJ1f2AlcD/wjsDDwOGASeACwBNgKHl9vuCAwBT57heQ8CEljS8DoHArcDi5qM75HAKLAY2LWMZ4TiaMLSct29gacBNwKHAcuBlwE3AXuW9STwQ2B3IIBTgE+U6z4K/BhYCdwHOL/4E2n//pmL/TWh/scCI7OIz/3VZd+x8rmnAacDKyh6YC4F3luu+w7w/oZtvw6cMNPzJtSfwMPbvS/c735X53J/Taj/sdi2dvw+a+V3rHzuvGxb277zO2UBng38YkLZh4DPlve/AJxc3n8ycD3QM93zgEOA0Qnr9i539s5NxrcI+DPwmLJx+CrwK+Ag4EnAZeV2/wW8b8Jzvwe8seEP7ckN604BPlE2IiPAYxrWPapTG4469teEsscyu4be/TUH+6zF37G7A1uBFQ1lfwusK++/FPhteX8XYAtwwEzPm/AaCzGJ7vT97ne15v01oeyx2LZ2/D5r8Xds3ratjgO6017A/nHXkwe+Xd6eBpwSEa8EngWcmZljETHd8waBnSKiJzPHyvI+4NbMvLlx44h4LPD98cc54frzmbk1Ir4NHErx6/t84DqKX9kDwDfLTVcCX54Qy/XAvRoe3zjJ+787sIziV+m4WR12q1kd+6sy99d26ejvGMW+CODPEdus2lLergU+HRH7Aw8GrszMX0TEI2d43kLX0fvd7+pd2LZ21/6CDv+OMY/bVpPoO/0B+ElmPmq8ICJ2585x498p7x9GMZD9mRWe93/ALcBDKA5BQPHr6pKJL56Z51P8sUznm8DfUzQcrwR+T3GI6h7Am8tt/gjsMeF5D6ThD3wKNwK3UnwZryvL9p7hOe1Ux/6qzP21XTr9O/YHil6PvszcXL7OrsB9y+ffFBHfBFaVr3daleep4/c7+F1tZNvaXfsLOv87Nn/b1rnu+u7UBegH/gQ8l2Jc1SMpvkBHNmzzaeBiGg4lzPQ84GSKX3UrKM5w/S3wku2McQUwTPFrehHFr+5hii/9DuU2L6JoPA6iGOP0GopflLvmJIc82HYc2Ocoxojdj+KP9Ad06CGsuvZXw3aPZRaHHN1fXfsd+y7F4czlFP+Avwd8smH9c4FfUhzu3aPq8xq2W4jDObphv/tdrXl/NWz3WGxbu2Kftfg7Ni/b1rbv/E5agIcBP6L49bUBePOE9YeWO+rdVZ9HMb7ny+UfxvXAO2cZ4/8AX214fAlwVsPjoPglfjXFIY+LgEOm+kOb0HDsDJxaNka/ozgjOdu9X+ZyfzVs81hm2dC7v7rvO0bRk3U6xQlINwD/DixtWL+0fJ3vN/O8qfbnQlk6fb+X9fldrXF/NWzzWGxbu2KftfI7xjxtW73sdxPKwwh/BvbJzN+1ORzNwP3Vfbphn0XEpcCHM/P/tTuW+aIb9rvu5P7qPt2wz7qxbXVMdEURMX446Jud+geoO7m/uk+n77OIWEoxz+19gLPaHM680en7Xdtyf3WfTt9n3dy2mkRXNz6Y/hntDEKVub+6T6fvs49SnJDzD5k52u5g5pFO3+/alvur+3T6PuvattXhHJIkSVKTvOy3JEmS1CSTaEmSJKlJJtGSJElSk0yi1XUi4r4R8dmI+GNE3BoRv4uIk8ozkLtCRGREPKPdcUhSI9tXqTpn51BXiYi9gAuBX1NMgH8d8CDgfcBfRsTjMvP29kVY2b4UV9OSpI5g+yo1x9k51FUi4ttAH3BYY2NeNv6/AV6amV9sV3wziYgdM/O2dschSRPZvkrNcTiHukZE3A94EvCvE3tDMvNq4EjgyojoiYh/jojrIuLmiDg/Ih7eUM/5EfHJiDg1IkYi4rcRcUhEfDAihiLixoh4W8P2GyLiHRFxdrn95RHxNw3reyPi0xFxfUTcEhE/i4hVE17vQxFxBvCnsuyOw40R8fCI+GFZ99UR8b6I6Gl4/uvL8lsi4qKIeFLDulMi4gsR8a8RcUNEbIyIT0REtO6TlzTf2b7avqp5JtHqJgeWtz+ZbGVmfjUzfwIcC7waeCNwCPBj4IKI2KNh89XAlcChwDXA9ygOAT4B+BfgXyNiZcP2xwLnAgcB5wDnRMR+5bp/Kp93VLn+B8AZUVxmddxrgMvL17tD2Rh/DbgY+CvgTcAry9iJiBcB/wocX64/DfiviPirhmqeA6wAngi8vXytp0z2GUnSFGxfbV/VrMx0cemKBXgBkMAO02yzGLgZeMmE8p8AHyzvnw/8qGHdK8p6V5SPdygfH14+3gB8eUJ9lwInlfefT3H4c3zd3uXzH9LweudNeH5SXD1q1/L+ixrWPQZ4THn/SuA9E557OnBmef8U4HeNnwlwNfDWdu8vFxeX7llsX+9Yb/vqUnmxJ1rdZLi8vcdkKyOiD3gAxZi+8yesvgz4i4bHVzTcvxW4OTNvAMg7D2Uubtjmogn1XQTsU97/CnDPiPhYRJxD0aMC0HjI7/LJYs7Mm4APAJ+NiEsi4oMU5yr8MCKWlq8x03v539z28OtGYOlkrydJU7B9nfy92L5qSibR6iaXlbcPm2L994ATyvsTTy5ZCtzS8HjzhPVbZ3jtWyc8XtLwnLXAPwPrgE9TjB2caMozeDPzbcDK8rn3Bb4VER8GestNZnovYzPELkkzuay8tX21fVVFJtHqGpl5LcV4uLdOPLEjIg4GHgH8G0Wj96iGdUFxCO/ns3j5h0yo7yDgiojoB44AXpWZH83MbwG7VK00Ig6IiNOBazNzTWYeBbwLeHZmDgJ/bnwvpUNn+V4kaRu2r3ewfVVlzhOtbvMPFPOYfjUiTgKup2jcPwB8LjPPiYg1wIcj4laKeU5fCQxQ/APYXi+MiP+hGKv3SmAP4HMU4wOHgaMi4s8Uhzv/qXzOA7mzd2cqfwCeCpwUEadSHCp9LvA/5foPA8dExB+BXwKrKE7medUs3oskTcb21fZVTTCJVlfJzCsi4pEUk///B7AMuAp4P3BSudk/lrefpzgseAnwpLLnYXt9Cngh8AmKk1GelplXAkTE84CPAX9H8Q/ohcCJwMnAl2d4PzeW0zWdALwM2EQx5u9N5SYfBHYu6+unaOifnpm/nsV7kaS7sH21fVVzvNiKNIOI2EBxpvhJbQ5FkuYV21d1M8dES5IkSU0yiZYkSZKa5HAOSZIkqUn2REuSJElNMomWJEmSmmQSLUmSJDXJJFqSJElqkkm0JEmS1CSTaEmSJKlJ/x9Aekad39xQ2QAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "g = sns.catplot(data=data, \n", " x='Comparison', \n", " y='Timestamp difference (ms)', \n", " row='OS', \n", " col='FPS',\n", " kind='box', \n", " order=['eye0 - world', 'eye1 - world', 'eye0 - eye1'],\n", " flierprops={'markersize':3})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Interpretation\n", "--------------\n", "\n", "These data show the time difference between when the same light flash was detected by independant `.light_stamper(...)`'s running concurrently for both Eye cameras and the World camera. On Mac and Windows, the Eye cameras appear to be well-synchronised with a margin of error that is to be expected given the frame rate. On Windows, the light flashes were consistently stamped on the World camera around 60 ms before they were stamped on the Eye cameras for both 60 and 120 FPS. The same pattern was observed, though to a lesser degree, with Mac. The timestamps were best synchronised on Mac OS with cameras running at 120 FPS, where the World camera lead by 15 ms on average." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Implications\n", "------------\n", "\n", "It is difficult to interpret these data without a detailed understanding of the inner workings of the Pupil software. But in practical terms, as far as the PLR is concerned, our data suggest that any time-critical measures using a World camera `.light_stamper(...)` timestamp as a reference point will be consistently *overestimated* by 15 to 60 ms, depending on the operating system and camera settings being used. But, given that these timestamp discrepenacies are highly repeatable and potentially correctable, they do not preclude researchers from obtaining time-critical measures of the PLR.\n", "\n", "It is worth noting that the 'ground truth' for measures of constriction latency and pupil size is inaccessible, and that values depend strongly on hardware, settings, and measurement principles. Our data show at least that with Pupil Core we can achieve a level of precision that rivals that of automated pupillometers." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }