diff --git a/PySONIC/neurons/stn.py b/PySONIC/neurons/stn.py
index 4ab6faa..6be3e2b 100644
--- a/PySONIC/neurons/stn.py
+++ b/PySONIC/neurons/stn.py
@@ -1,453 +1,453 @@
# -*- coding: utf-8 -*-
# @Author: Theo Lemaire
# @Email: theo.lemaire@epfl.ch
# @Date: 2018-11-29 16:56:45
# @Last Modified by: Theo Lemaire
-# @Last Modified time: 2019-07-17 20:03:16
+# @Last Modified time: 2019-12-09 16:05:13
import numpy as np
from ..core import PointNeuron
from ..constants import FARADAY, Z_Ca
from ..utils import findModifiedEq
class OtsukaSTN(PointNeuron):
''' Sub-thalamic nucleus neuron
References:
*Otsuka, T., Abe, T., Tsukagawa, T., and Song, W.-J. (2004). Conductance-Based Model
of the Voltage-Dependent Generation of a Plateau Potential in Subthalamic Neurons.
Journal of Neurophysiology 92, 255–264.*
*Tarnaud, T., Joseph, W., Martens, L., and Tanghe, E. (2018). Computational Modeling
of Ultrasonic Subthalamic Nucleus Stimulation. IEEE Trans Biomed Eng.*
'''
# Neuron name
name = 'STN'
# ------------------------------ Biophysical parameters ------------------------------
# Resting parameters
Cm0 = 1e-2 # Membrane capacitance (F/m2)
Vm0 = -58.0 # Membrane potential (mV)
Cai0 = 5e-9 # Intracellular Calcium concentration (M)
# Reversal potentials (mV)
ENa = 60.0 # Sodium
EK = -90.0 # Potassium
ELeak = -60.0 # Non-specific leakage
# Maximal channel conductances (S/m2)
gNabar = 490.0 # Sodium
gLeak = 3.5 # Non-specific leakage
gKdbar = 570.0 # Delayed-rectifier Potassium
gCaTbar = 50.0 # Low-threshold Calcium
gCaLbar = 150.0 # High-threshold Calcium
gAbar = 50.0 # A-type Potassium
gKCabar = 10.0 # Calcium-dependent Potassium
# Physical constants
T = 306.15 # K (33°C)
# Calcium dynamics
Cao = 2e-3 # extracellular Calcium concentration (M)
taur_Cai = 0.5e-3 # decay time constant for intracellular Ca2+ dissolution (s)
# Fast Na current m-gate
thetax_m = -40 # mV
kx_m = -8 # mV
tau0_m = 0.2e-3 # s
tau1_m = 3e-3 # s
thetaT_m = -53 # mV
sigmaT_m = -0.7 # mV
# Fast Na current h-gate
thetax_h = -45.5 # mV
kx_h = 6.4 # mV
tau0_h = 0e-3 # s
tau1_h = 24.5e-3 # s
thetaT1_h = -50 # mV
thetaT2_h = -50 # mV
sigmaT1_h = -15 # mV
sigmaT2_h = 16 # mV
# Delayed rectifier K+ current n-gate
thetax_n = -41 # mV
kx_n = -14 # mV
tau0_n = 0e-3 # s
tau1_n = 11e-3 # s
thetaT1_n = -40 # mV
thetaT2_n = -40 # mV
sigmaT1_n = -40 # mV
sigmaT2_n = 50 # mV
# T-type Ca2+ current p-gate
thetax_p = -56 # mV
kx_p = -6.7 # mV
tau0_p = 5e-3 # s
tau1_p = 0.33e-3 # s
thetaT1_p = -27 # mV
thetaT2_p = -102 # mV
sigmaT1_p = -10 # mV
sigmaT2_p = 15 # mV
# T-type Ca2+ current q-gate
thetax_q = -85 # mV
kx_q = 5.8 # mV
tau0_q = 0e-3 # s
tau1_q = 400e-3 # s
thetaT1_q = -50 # mV
thetaT2_q = -50 # mV
sigmaT1_q = -15 # mV
sigmaT2_q = 16 # mV
# L-type Ca2+ current c-gate
thetax_c = -30.6 # mV
kx_c = -5 # mV
tau0_c = 45e-3 # s
tau1_c = 10e-3 # s
thetaT1_c = -27 # mV
thetaT2_c = -50 # mV
sigmaT1_c = -20 # mV
sigmaT2_c = 15 # mV
# L-type Ca2+ current d1-gate
thetax_d1 = -60 # mV
kx_d1 = 7.5 # mV
tau0_d1 = 400e-3 # s
tau1_d1 = 500e-3 # s
thetaT1_d1 = -40 # mV
thetaT2_d1 = -20 # mV
sigmaT1_d1 = -15 # mV
sigmaT2_d1 = 20 # mV
# L-type Ca2+ current d2-gate
thetax_d2 = 0.1e-6 # M
kx_d2 = 0.02e-6 # M
tau_d2 = 130e-3 # s
# A-type K+ current a-gate
thetax_a = -45 # mV
kx_a = -14.7 # mV
tau0_a = 1e-3 # s
tau1_a = 1e-3 # s
thetaT_a = -40 # mV
sigmaT_a = -0.5 # mV
# A-type K+ current b-gate
thetax_b = -90 # mV
kx_b = 7.5 # mV
tau0_b = 0e-3 # s
tau1_b = 200e-3 # s
thetaT1_b = -60 # mV
thetaT2_b = -40 # mV
sigmaT1_b = -30 # mV
sigmaT2_b = 10 # mV
# Ca2+-activated K+ current r-gate
thetax_r = 0.17e-6 # M
kx_r = -0.08e-6 # M
tau_r = 2e-3 # s
# ------------------------------ States names & descriptions ------------------------------
states = {
'm': 'iNa activation gate',
'h': 'iNa inactivation gate',
'n': 'iKd gate',
'a': 'iA activation gate',
'b': 'iA inactivation gate',
'p': 'iCaT activation gate',
'q': 'iCaT inactivation gate',
'c': 'iCaL activation gate',
'd1': 'iCaL inactivation gate 1',
'd2': 'iCaL inactivation gate 2',
'r': 'iCaK gate',
'Cai': 'submembrane Calcium concentration (M)'
}
def __new__(cls):
cls.deff = cls.getEffectiveDepth(cls.Cai0, cls.Vm0) # m
cls.current_to_molar_rate_Ca = cls.currentToConcentrationRate(Z_Ca, cls.deff)
return super(OtsukaSTN, cls).__new__(cls)
@classmethod
def getPltScheme(cls):
pltscheme = super().getPltScheme()
pltscheme['[Ca^{2+}]_i'] = ['Cai']
return pltscheme
@classmethod
def getPltVars(cls, wrapleft='df["', wrapright='"]'):
pltvars = super().getPltVars(wrapleft, wrapright)
pltvars['Cai'] = {
'desc': 'submembrane Ca2+ concentration',
'label': '[Ca^{2+}]_i',
'unit': 'uM',
'factor': 1e6
}
return pltvars
@classmethod
def titrationFunc(cls, *args, **kwargs):
return cls.isSilenced(*args, **kwargs)
@classmethod
def getEffectiveDepth(cls, Cai, Vm):
''' Compute effective depth that matches a given membrane potential
and intracellular Calcium concentration.
:return: effective depth (m)
'''
iCaT = cls.iCaT(cls.pinf(Vm), cls.qinf(Vm), Vm, Cai) # mA/m2
iCaL = cls.iCaL(cls.cinf(Vm), cls.d1inf(Vm), cls.d2inf(Cai), Vm, Cai) # mA/m2
return -(iCaT + iCaL) / (Z_Ca * FARADAY * Cai / cls.taur_Cai) * 1e-6 # m
# ------------------------------ Gating states kinetics ------------------------------
@staticmethod
def _xinf(var, theta, k):
''' Generic function computing the steady-state opening of a
particular channel gate at a given voltage or ion concentration.
:param var: membrane potential (mV) or ion concentration (mM)
:param theta: half-(in)activation voltage or concentration (mV or mM)
:param k: slope parameter of (in)activation function (mV or mM)
:return: steady-state opening (-)
'''
return 1 / (1 + np.exp((var - theta) / k))
@classmethod
def ainf(cls, Vm):
return cls._xinf(Vm, cls.thetax_a, cls.kx_a)
@classmethod
def binf(cls, Vm):
return cls._xinf(Vm, cls.thetax_b, cls.kx_b)
@classmethod
def cinf(cls, Vm):
return cls._xinf(Vm, cls.thetax_c, cls.kx_c)
@classmethod
def d1inf(cls, Vm):
return cls._xinf(Vm, cls.thetax_d1, cls.kx_d1)
@classmethod
def d2inf(cls, Cai):
return cls._xinf(Cai, cls.thetax_d2, cls.kx_d2)
@classmethod
def minf(cls, Vm):
return cls._xinf(Vm, cls.thetax_m, cls.kx_m)
@classmethod
def hinf(cls, Vm):
return cls._xinf(Vm, cls.thetax_h, cls.kx_h)
@classmethod
def ninf(cls, Vm):
return cls._xinf(Vm, cls.thetax_n, cls.kx_n)
@classmethod
def pinf(cls, Vm):
return cls._xinf(Vm, cls.thetax_p, cls.kx_p)
@classmethod
def qinf(cls, Vm):
return cls._xinf(Vm, cls.thetax_q, cls.kx_q)
@classmethod
def rinf(cls, Cai):
return cls._xinf(Cai, cls.thetax_r, cls.kx_r)
@staticmethod
def _taux1(Vm, theta, sigma, tau0, tau1):
''' Generic function computing the voltage-dependent, activation/inactivation time constant
of a particular ion channel at a given voltage (first variant).
:param Vm: membrane potential (mV)
:param theta: voltage at which (in)activation time constant is half-maximal (mV)
:param sigma: slope parameter of (in)activation time constant function (mV)
:param tau0: minimal time constant (s)
:param tau1: modulated time constant (s)
:return: (in)activation time constant (s)
'''
return tau0 + tau1 / (1 + np.exp(-(Vm - theta) / sigma))
@classmethod
def taua(cls, Vm):
return cls._taux1(Vm, cls.thetaT_a, cls.sigmaT_a, cls.tau0_a, cls.tau1_a)
@classmethod
def taum(cls, Vm):
return cls._taux1(Vm, cls.thetaT_m, cls.sigmaT_m, cls.tau0_m, cls.tau1_m)
@staticmethod
def _taux2(Vm, theta1, theta2, sigma1, sigma2, tau0, tau1):
''' Generic function computing the voltage-dependent, activation/inactivation time constant
of a particular ion channel at a given voltage (second variant).
:param Vm: membrane potential (mV)
:param theta: voltage at which (in)activation time constant is half-maximal (mV)
:param sigma: slope parameter of (in)activation time constant function (mV)
:param tau0: minimal time constant (s)
:param tau1: modulated time constant (s)
:return: (in)activation time constant (s)
'''
return tau0 + tau1 / (np.exp(-(Vm - theta1) / sigma1) + np.exp(-(Vm - theta2) / sigma2))
@classmethod
def taub(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_b, cls.thetaT2_b, cls.sigmaT1_b, cls.sigmaT2_b,
cls.tau0_b, cls.tau1_b)
@classmethod
def tauc(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_c, cls.thetaT2_c, cls.sigmaT1_c, cls.sigmaT2_c,
cls.tau0_c, cls.tau1_c)
@classmethod
def taud1(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_d1, cls.thetaT2_d1, cls.sigmaT1_d1, cls.sigmaT2_d1,
cls.tau0_d1, cls.tau1_d1)
@classmethod
def tauh(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_h, cls.thetaT2_h, cls.sigmaT1_h, cls.sigmaT2_h,
cls.tau0_h, cls.tau1_h)
@classmethod
def taun(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_n, cls.thetaT2_n, cls.sigmaT1_n, cls.sigmaT2_n,
cls.tau0_n, cls.tau1_n)
@classmethod
def taup(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_p, cls.thetaT2_p, cls.sigmaT1_p, cls.sigmaT2_p,
cls.tau0_p, cls.tau1_p)
@classmethod
def tauq(cls, Vm):
return cls._taux2(Vm, cls.thetaT1_q, cls.thetaT2_q, cls.sigmaT1_q, cls.sigmaT2_q,
cls.tau0_q, cls.tau1_q)
# ------------------------------ States derivatives ------------------------------
@classmethod
def derCai(cls, p, q, c, d1, d2, Cai, Vm):
iCa_tot = cls.iCaT(p, q, Vm, Cai) + cls.iCaL(c, d1, d2, Vm, Cai)
return - cls.current_to_molar_rate_Ca * iCa_tot - Cai / cls.taur_Cai # M/s
@classmethod
def derStates(cls):
return {
'a': lambda Vm, x: (cls.ainf(Vm) - x['a']) / cls.taua(Vm),
'b': lambda Vm, x: (cls.binf(Vm) - x['b']) / cls.taub(Vm),
'c': lambda Vm, x: (cls.cinf(Vm) - x['c']) / cls.tauc(Vm),
'd1': lambda Vm, x: (cls.d1inf(Vm) - x['d1']) / cls.taud1(Vm),
'd2': lambda Vm, x: (cls.d2inf(x['Cai']) - x['d2']) / cls.tau_d2,
'm': lambda Vm, x: (cls.minf(Vm) - x['m']) / cls.taum(Vm),
'h': lambda Vm, x: (cls.hinf(Vm) - x['h']) / cls.tauh(Vm),
'n': lambda Vm, x: (cls.ninf(Vm) - x['n']) / cls.taun(Vm),
'p': lambda Vm, x: (cls.pinf(Vm) - x['p']) / cls.taup(Vm),
'q': lambda Vm, x: (cls.qinf(Vm) - x['q']) / cls.tauq(Vm),
'r': lambda Vm, x: (cls.rinf(x['Cai']) - x['r']) / cls.tau_r,
'Cai': lambda Vm, x: cls.derCai(x['p'], x['q'], x['c'], x['d1'], x['d2'], x['Cai'], Vm)
}
# ------------------------------ Steady states ------------------------------
@classmethod
def Caiinf(cls, p, q, c, d1, Vm):
''' Steady-state intracellular Calcium concentration '''
return findModifiedEq(
cls.Cai0,
lambda Cai, p, q, c, d1, Vm: cls.derCai(p, q, c, d1, cls.d2inf(Cai), Cai, Vm),
p, q, c, d1, Vm)
@classmethod
def steadyStates(cls):
lambda_dict = {
'a': lambda Vm: cls.ainf(Vm),
'b': lambda Vm: cls.binf(Vm),
'c': lambda Vm: cls.cinf(Vm),
'd1': lambda Vm: cls.d1inf(Vm),
'm': lambda Vm: cls.minf(Vm),
'h': lambda Vm: cls.hinf(Vm),
'n': lambda Vm: cls.ninf(Vm),
'p': lambda Vm: cls.pinf(Vm),
'q': lambda Vm: cls.qinf(Vm),
}
lambda_dict['Cai'] = lambda Vm: cls.Caiinf(
lambda_dict['p'](Vm),
lambda_dict['q'](Vm),
lambda_dict['c'](Vm),
lambda_dict['d1'](Vm),
Vm)
lambda_dict['d2'] = lambda Vm: cls.d2inf(lambda_dict['Cai'](Vm))
lambda_dict['r'] = lambda Vm: cls.rinf(lambda_dict['Cai'](Vm))
return lambda_dict
# ------------------------------ Membrane currents ------------------------------
@classmethod
def iNa(cls, m, h, Vm):
''' Sodium current '''
return cls.gNabar * m**3 * h * (Vm - cls.ENa) # mA/m2
@classmethod
def iKd(cls, n, Vm):
''' delayed-rectifier Potassium current '''
return cls.gKdbar * n**4 * (Vm - cls.EK) # mA/m2
@classmethod
def iA(cls, a, b, Vm):
''' A-type Potassium current '''
return cls.gAbar * a**2 * b * (Vm - cls.EK) # mA/m2
@classmethod
def iCaT(cls, p, q, Vm, Cai):
''' low-threshold (T-type) Calcium current '''
return cls.gCaTbar * p**2 * q * (Vm - cls.nernst(Z_Ca, Cai, cls.Cao, cls.T)) # mA/m2
@classmethod
def iCaL(cls, c, d1, d2, Vm, Cai):
''' high-threshold (L-type) Calcium current '''
return cls.gCaLbar * c**2 * d1 * d2 * (Vm - cls.nernst(Z_Ca, Cai, cls.Cao, cls.T)) # mA/m2
@classmethod
def iKCa(cls, r, Vm):
''' Calcium-activated Potassium current '''
return cls.gKCabar * r**2 * (Vm - cls.EK) # mA/m2
@classmethod
def iLeak(cls, Vm):
''' non-specific leakage current '''
return cls.gLeak * (Vm - cls.ELeak) # mA/m2
@classmethod
def currents(cls):
return {
'iNa': lambda Vm, x: cls.iNa(x['m'], x['h'], Vm),
'iKd': lambda Vm, x: cls.iKd(x['n'], Vm),
'iA': lambda Vm, x: cls.iA(x['a'], x['b'], Vm),
'iCaT': lambda Vm, x: cls.iCaT(x['p'], x['q'], Vm, x['Cai']),
'iCaL': lambda Vm, x: cls.iCaL(x['c'], x['d1'], x['d2'], Vm, x['Cai']),
'iKCa': lambda Vm, x: cls.iKCa(x['r'], Vm),
'iLeak': lambda Vm, _: cls.iLeak(Vm)
}
# ------------------------------ Other methods ------------------------------
@staticmethod
def getLowIntensities():
''' Return an array of acoustic intensities (W/m2) used to study the STN neuron in
Tarnaud, T., Joseph, W., Martens, L., and Tanghe, E. (2018). Computational Modeling
of Ultrasonic Subthalamic Nucleus Stimulation. IEEE Trans Biomed Eng.
'''
return np.hstack((
np.arange(10, 101, 10),
np.arange(101, 131, 1),
np.array([140])
)) # W/m2
diff --git a/notebooks/STN neuron.ipynb b/notebooks/STN neuron.ipynb
index a678f43..68a98bd 100644
--- a/notebooks/STN neuron.ipynb
+++ b/notebooks/STN neuron.ipynb
@@ -1,714 +1,582 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Subthalamic Nucleus neuron\n",
"## Validation of the model implementation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
- "execution_count": 59,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
- "import time\n",
"import logging\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
- "from PySONIC.core import NeuronalBilayerSonophore, PulsedProtocol\n",
+ "from PySONIC.core import Batch, PointNeuron, NeuronalBilayerSonophore, PulsedProtocol\n",
"from PySONIC.neurons import OtsukaSTN\n",
"from PySONIC.utils import logger, si_format, pow10_format, Intensity2Pressure\n",
"from PySONIC.plt import CompTimeSeries, GroupedTimeSeries\n",
"from PySONIC.constants import *\n",
"from PySONIC.postpro import computeFRProfile\n",
"\n",
"logger.setLevel(logging.INFO)\n",
"\n",
"pneuron = OtsukaSTN()\n",
- "standard_Vm0 = pneuron.Vm0"
+ "ref_Vm0 = pneuron.Vm0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Spontaneous spiking activity\n",
"\n",
"The Otsuka paper predicts a spontaneous firing rate around 10 Hz. However, their corresponding figure shows a slightly smaller firing rate, around 6-7 Hz.\n",
"\n",
""
]
},
{
"cell_type": "code",
- "execution_count": 60,
+ "execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- " 06/12/2019 16:34:02: OtsukaSTN: simulation @ A = 0.00 A/m2, 0.0 s stim, 1.0 s offset\n"
+ " 10/12/2019 16:52:14: OtsukaSTN: simulation @ A = 0.00 A/m2, 0.0 s stim, 1.0 s offset\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Firing rate: median = 4.82 Hz, last value = 4.86 Hz\n"
]
},
{
"data": {
"image/png": "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5jcZNmwYV155JePGjQP8nOoVmckf//hHfvrTn/KRj3yESZMmceGFFxIRfPvb32bvvfcGLDOqyEz+8Ic/cPXVV3P66aez5557MnPmTHbccUeuv/56wLKi7rW0tHD77bdz/vnnM2XKlJocc6M9EBHxLeCazLyvavVdVL4ZafuapEJA5VuVnnvuORYuXMhzzz3HM888wyOPPNI+VX+136mnnsq3vvUtFi6s/DD45lhxrF+/nlWrVrU/dLhy5cr2+RUrVrBkyRL+9Kc/dZieeOIJfve733X46rtRo0Zx1llnceGFF/Lf//3fgD0Qqlyw165dy4oVK1i8eDGLFi1i0aJF7fMtLS38/ve/5/e//z0LFixgwYIFHV7/ute9jksuuYRDDz2Uc889F9g8P6ebsnXr1rFmzRpWr17dYVq6dCkvvfTSBtOf//xnnnnmGZ555hmefvrpDl+EATB16lS+9rWvcfTRR3PJJZcAlplN1fr16ztct5YvX86LL77YPr3wwgu8+OKLPP300zzxxBM88cQTLFnyyqOfEcHpp5/ORRddZA/nZqS1tZU1a9awfPlyli1bxtKlS1m2bFmH+UWLFvHcc8+1T0899VR7W7GWygxhehy4KCImANcB12bmVTVPSY29+OKLXHnllWRm+0NobfNdLZfZpz+vWbduXYeLSucLzJIlSzb4ysfODj74YN785jfznve8h3333ReAP/3pTwDMmTOHCy64gL/9279lu+22q1k+9lZ1o6urafny5Rs09Lv6W2afVatW9Tmdu+66K69//es5/vjjmT59OuPHjwdg+PDhANx77718/etf5wMf+ABjx46tSd7UQ2bS2tpKa2sr69ata59vbW3doAzW62/btH79+vap83LZdd3t09raytq1a1m3bh3r1q1rn+/r39WrV7eXs56m3lyQR44cydSpUzn88MM5/fTTOeSQQ4gIgPa/n/vc5/jgBz/IIYcc0uv/db211VNr167d6NTa2tr+/9nYfH/2rV7f3VTv7WvXru0ySFi9enW/G2zbbLMN06ZN49BDD2X69OkcfPDBG5SZCy+8kHPOOYfDDz+83//jRmorT21TT3ncl/9LPV5bj3OuW7dug+vXihUr+nT9GjduHIcffjhHHXUUp59+OrvssgsATz75JABPPPEEX/jCF/jwhz/MDjvsUNP/Z61Ul4vqOqV6uboeKDP1dv+u6pzO/8fu6qBav2bNmjUdptWrV2+wrnp9X+ucLbfckv3335/DDz+ck046aeMvKCHKfsNDRLwa+MtiGgVcA/wwMx+vSUpqLCIG3VdXbLHFFkycOJGJEycyYcIEdtppJ6ZMmcJ+++3HfvvtxzbbbLPBa37zm99w4IEHti8fc8wx3HHHHQwZ0r8fGV++fDnPP/88Cxcu5Pnnn+f5559n8eLFLFmyZIPppZdeYvny5SxfvpwVK1a0j91thFGjRjF69Gi22GKLDf6OHTuWHXfcscM0adIkpkyZwlZbbdXl8W677TZOOOGE9uVTTjnFYLdqAAAWaElEQVSFG264of1i3heZydKlS3n22Wd57rnnWLRoUZf52NZoXbVq1Qbzq1ataq9Yq4MF7zjV17Bhwxg9ejTjxo1j3LhxbLvttmy77baMGzeO7bbbjle/+tXstttu7LbbbkyaNIkRI0Z0eZwdd9yRP//5zwCMHTuWRx55hJ133rlfactMlixZwrPPPktLSwuLFy/eYFq2bFl7g6W68VK9vGbNmvaypd4ZMmQII0eObJ9GjBjByJEjGTNmDFtvvfUG0/jx49lll13apx133LHbumX//fdn3rx5QCU4feihh9hvv/36neZVq1bx3HPP0dLS0mU9tGzZsg5BdHV9tHLlSlavXt0hMOhusm7auLbrVdu07bbbst122zF+/Hi22247tttuOyZOnMiee+7JHnvswQ477NBleVmwYAG77757+/K0adN44IEHGDp0aL/St379elpaWnjuued48cUXN6hflixZ0uNNwRUrVrB69eoNbuCo7yKCESNGMHr0aMaOHcuYMWMYM2ZMh/lx48a1tyUnTpzILrvswqRJkzq3C/veqCmUfog6M/8A/AvwLxFxMHAF8AWgfyW0Trbddlve/va3ExHtE9Djcpl9+vqaoUOHMnbs2C4vKmPHjmWbbbZhq6226nVDtXOgcNddd3HZZZdxzjnnbPS1q1evZu7cufz6179u7yJ9/PHHeeqppzr8SF1vDR8+vEOl2DZtueWWXTb0u/u7sX1GjhzZ70Cps2HDOn4kZsyYwYwZM5g+ffpGX7to0SLmzJnD/Pnzeeyxx3jsscdYsGABzz777EZ7l/pjyJAhDBs2jKFDhzJ06FCGDRvGkCFD2vOm8x3NevxtO9+QIUM2WO5qXZl9Oq8bPnw4w4YN6/XfrtaNGDGivYx1NbWVs87loa+qP9dLly7lU5/6FFdfffVGX5eZLFiwgEcffZT58+czf/58Hn/8cZ599lmeffbZDr8XUAttedTT1JanQ4YMYejQoe3/n3rNty23zXc19Wf7xl47bNiwDkFC9VSr8tGV6rpt9erVfPzjH+f2228vdY147rnn+O1vf8tjjz3G/PnzeeKJJ9rLTOdhU/XUVlZ6yt++/l9q/bp6nrPztXCLLbZg1KhRNbt+dT7O7NmzueKKK/jgBz+40deuXbu2Q/3y2GOP8dRTT/Hss8+ycOHCujT4hw4d2qE+6TxffQ0rO1XXG719Xef/YfXxyqzrz2vabjx0NXW1bejQof26oVlLvemBGA6cSKUH4ljgbirDmWbUL3l9N23atJw9e3azk1F3v/3tb9vvSo0ZM4Zly5YxZswYHnnkkfbuzTYrVqzg7rvv5tZbb+WXv/wl8+bN63as/8iRI3nVq17FhAkTmDBhAq961avYbrvt2Hrrrdlmm206TFtvvTVbbbVVe+XYNgxoMJo1axZHHnlkh3U77bQTjz76KGPGjOmwftmyZdx8883cfPPNPPDAA/zud7/r9rijR49mp512YsKECWy//fbteTdu3Lj2PNxyyy0ZNWpU+8Wl+m9bRdLWoKm+OA2UykTdGzp0aPsd2ZEjR7J69Wruuusujj766A77ZSaPPPIIN910E/feey8PPPAAL7zwQrfH3Wqrrdhpp53Ycccd23tJqqexY8d2CNyrA/DRo0czatQoRowY0X4BtywNHIcccghz5swBXikz119/Pe985zs32HfBggXceOONzJo1iwceeIA//vGP3R532LBhTJgwob3MVNfl48aNY6uttuoQTLfVQW3zo0aN6hBIdje13QBQ/T3zzDPsuuuuHdaNHz+eefPmseOOO3ZYv27dOu69915uvvlm7r//fmbPnt3jjYi2XpC261Z1/dJ247Nz3VJdx4wcOXKD4MByMSDUvwciIo4H3gW8DfgV8EPg7Mxc3t+Tq/+q7zycf/75zJkzhxkzZnDmmWdyww030Nrayq233sr111/PLbfc0mHcZUQwZcoUDj74YKZMmcLkyZOZPHkye+yxB9tuu+1m+SGvDn4+97nPccsttzB79mze//73c8UVV7B06VJuvvlmZsyYwR133LHBw9gHH3ww++67L3vvvTdTpkxhjz32YOedd2bMmDGbZX6qoi14GD9+PB/96Ef5whe+wLvf/W7uuOMO9txzTx588EFuuOEGZsyY0T6euc0OO+zAAQccwJQpU5gyZQp77rknu+yyCzvttNOAfj5H/VPdC3zxxRfz4Q9/mLPPPpvJkydz0EEHMXfuXH70ox/xk5/8pH2oU5uxY8e2l5m9996bvfbaq73MjB8/vuY9t2qu6v/neeedx9y5c7nzzjt517vexQ033MCIESO4/fbbmTFjBjfeeGOHX68G2H333XnNa17TXse0XbcmTpzIqFGjGv12NEhstAciIu6i8rzDjzOzcX2f/bS59EA8/vjj7LXXXkDlR6uOP/54XvOa17B48WIiYoNfMZ06dSonnHACxx13HNOmTdvgrvrm7qGHHmLatGkAXHXVVRx00EEcccQRXQ7piggOP/xwTj75ZI455hgOOOCAQd37ovppCx732Wcffv3rX3PMMcdw7733AjBixIgOgej48eM56aSTOP744znssMN49atfbfC5GRo3blz7t+6sX7+eU045hZ/97GcA7b//02bs2LG85S1v4c1vfjOHHXYYe++9t0HCZmThwoVMnDgRgG984xuceuqpTJ06lZaWFoYOHdr+5RRtJk+ezCmnnMLRRx/N61//+vYvEdFmpf49EJl5TH9PovqpvkhMmjSJiRMncvfdd/ORj3yEWbNmMXLkSF73utdx2mmncdppp/X7wc1NXfWY5t12240DDjiAmTNn8vGPf5z77ruPLbfckqOOOop3vOMdvOMd79ige1jqydZbb83w4cO55ZZb+NjHPsYPfvAD1qxZw+67787JJ5/M9OnTecMb3sDQoQPy0TI1UOev7Lzuuus4//zz+d73vsfKlSuZMGECJ510EqeddhpHH310tw/wa9O35ZZbts/vuuuu7LLLLtxzzz186EMfYubMmQwZMoSpU6cyffp0pk+fzj777ONNCfVb6WcgBpvNpQeieuzjggULmDRpUvu2tWvXtj+wo3KefPJJJk+eDFTytjrgam1tdVyv+qStzBx//PHcdttt7evbvlK2ugEgwStlZsqUKTz66KPt69euXcvy5cu7/FY+bZ4ys/1m4qxZszjiiCPat61cuZKhQ4caYKqzfjdk7OMc5Noeyp0wYcIGD00PHz7c4KGXdt11V0aPHs3WW2/NTjvt1GGbDyyrr847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\n",
"text/plain": [
"