{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ChEn-3170: Computational Methods in Chemical Engineering Spring 2024 UMass Lowell; Prof. V. F. de Almeida **26Mar24**\n",
"\n",
"# 16. Non-Linear Least-Squares Arrhenius Rate Constant Data Fitting\n",
"$ \n",
" \\newcommand{\\Amtrx}{\\boldsymbol{\\mathsf{A}}}\n",
" \\newcommand{\\Bmtrx}{\\boldsymbol{\\mathsf{B}}}\n",
" \\newcommand{\\Mmtrx}{\\boldsymbol{\\mathsf{M}}}\n",
" \\newcommand{\\Imtrx}{\\boldsymbol{\\mathsf{I}}}\n",
" \\newcommand{\\Jmtrx}{\\boldsymbol{\\mathsf{J}}}\n",
" \\newcommand{\\Pmtrx}{\\boldsymbol{\\mathsf{P}}}\n",
" \\newcommand{\\Lmtrx}{\\boldsymbol{\\mathsf{L}}}\n",
" \\newcommand{\\Umtrx}{\\boldsymbol{\\mathsf{U}}}\n",
" \\newcommand{\\Smtrx}{\\boldsymbol{\\mathsf{S}}}\n",
" \\newcommand{\\xvec}{\\boldsymbol{\\mathsf{x}}}\n",
" \\newcommand{\\avec}{\\boldsymbol{\\mathsf{a}}}\n",
" \\newcommand{\\bvec}{\\boldsymbol{\\mathsf{b}}}\n",
" \\newcommand{\\cvec}{\\boldsymbol{\\mathsf{c}}}\n",
" \\newcommand{\\rvec}{\\boldsymbol{\\mathsf{r}}}\n",
" \\newcommand{\\mvec}{\\boldsymbol{\\mathsf{m}}}\n",
" \\newcommand{\\gvec}{\\boldsymbol{\\mathsf{g}}}\n",
" \\newcommand{\\fvec}{\\boldsymbol{\\mathsf{f}}}\n",
" \\newcommand{\\kvec}{\\boldsymbol{\\mathsf{k}}}\n",
" \\newcommand{\\alphabf}{\\boldsymbol{\\alpha}}\n",
" \\newcommand{\\betabf}{\\boldsymbol{\\beta}}\n",
" \\newcommand{\\zerovec}{\\boldsymbol{\\mathsf{0}}}\n",
" \\newcommand{\\norm}[1]{\\bigl\\lVert{#1}\\bigr\\rVert}\n",
" \\newcommand{\\transpose}[1]{{#1}^\\top}\n",
" \\DeclareMathOperator{\\rank}{rank}\n",
"$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"## Table of Contents\n",
"* [Introduction](#intro)\n",
"* [Non-Linear Arrhenius Data Fitting](#adf)\n",
"* [Experimental Data (10 points)](#ed10)\n",
" * [Non-Linear System](#nls10)\n",
" * [NLLS Newton's Method Data Fitting](#nlls10)\n",
" * [Goodness of Fit](#gof10)\n",
" * [Objective Function](#of10)\n",
"* [Experimental Data (20 points)](#ed20)\n",
" * [Non-Linear System](#nls20)\n",
" * [NLLS Newton's Method Data Fitting](#nlls20)\n",
" * [Goodness of Fit](#gof20)\n",
" * [Objective Function](#of20)\n",
"* [Experimental Data (80 points)](#ed80)\n",
" * [Non-Linear System](#nls80)\n",
" * [NLLS Newton's Method Data Fitting](#nlls80)\n",
" * [Objective Function](#of80)\n",
"* [Results Comparison](#res)\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [Introduction](#toc)\n",
"The non-linear least-squares method is an extension of the linear least-squares method, covered earlier in this course, to treat non-linear objective functions. Therefore Newton's method, also covered earlier, will be needed to solve an iterative version of the normal equations similarly obtained in the linear case. The theoretical notes we will need for this topic can be found in the course notes OneNote [ChEn-3170-nllsq](https://studentuml-my.sharepoint.com/:o:/g/personal/valmor_dealmeida_uml_edu/EhnksYqisMNIhij4WnIDh_4B5VUtoSDyvKgoC-PydKMouQ?e=ab00EQ). "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### [Non-linear Arrhenius Data Fitting](#toc)\n",
"\n",
"This notebook will apply the previous developments in the course to fit experimental data to a non-linear model directly. Here the example is the Arrhenius function for the dependency of the reaction rate constant on temperature, namely\n",
"\n",
"\\begin{equation*}\n",
"k(\\beta) = k_0 \\, e^{-\\beta\\,E_\\text{a}}.\n",
"\\end{equation*}\n",
"\n",
"Therefore the methods and results here are to be compared to its linear counterpart in Notebook 10.\n",
"\n",
"The pre-exponential factor (frequency parameter), $k_0$, and the energy of activation, $E_\\text{a}$, are the sought parameters in this expression. These parameters will be computed by direct minimization of the non-linear residual of the differences between the values measured for $k_i$ and the predicted values of the Arrhenius function for all values of $\\beta_i$. To that end, evaluate the residuals, $r_i$, of the Arrhenius formula at each experimental point $(\\beta_i,k_i)$\n",
"\n",
"\\begin{equation*}\n",
"r_i = k_i - k(\\beta_i) = k_i - k_0\\,e^{-\\beta_i\\,E_a}.\n",
"\\end{equation*}\n",
"\n",
"If the residual vector is denoted\n",
"\n",
"$\\rvec = \\begin{pmatrix}\n",
" r_1 \\\\ \n",
" r_2 \\\\ \n",
" \\vdots \\\\ \n",
" r_m \\\\ \n",
"\\end{pmatrix}$, and the vector of parameters $\\alphabf = \\begin{pmatrix}\n",
" k_0 \\\\ \n",
" E_a \n",
"\\end{pmatrix}$, then find the optimum vector of parameters $\\alphabf^*$ such that it minimizes the\n",
"objective function\n",
"\n",
"\\begin{equation*}\n",
" \\phi(\\alpha^*) = \\min\\limits_{\\alphabf} \\norm{\\rvec(\\alpha)}^2 \\quad\\ \\forall \\quad\\ \\alphabf.\n",
"\\end{equation*}\n",
"\n",
"Note that $\\rvec$ is a vector-valued function of $\\alphabf$.\n",
"Find the optimal value $\\alphabf^*$ using Newton's method iterations on\n",
"the vector function leading to the minimum point of the objective function, that is, starting with an initial guess $\\alphabf^{(0)}$ compute the \n",
"sequence $\\alphabf^{(k)}, k = 1\\ldots N_\\text{max}$ solving the Jacobian normal equations\n",
"\n",
"\\begin{equation*}\n",
"{\\Jmtrx^{(k-1)}}^\\top\\Jmtrx^{(k-1)}\\,\\delta\\alphabf = -\\Jmtrx^\\top\\rvec^{(k-1)} ,\n",
"\\end{equation*}\n",
"\n",
"where $\\Jmtrx^{(k-1)} := \\partial_\\alphabf\\rvec^{(k-1)} = \\begin{pmatrix}\n",
" -e^{-\\beta_1 E_a^{(k-1)}} & k_0^{(k-1)}\\, \\beta_1 e^{-\\beta_1 E_a^{(k-1)}} \\\\\n",
" -e^{-\\beta_2 E_a^{(k-1)}} & k_0^{(k-1)}\\, \\beta_2 e^{-\\beta_2 E_a^{(k-1)}} \\\\\n",
" \\vdots & \\vdots \\\\\n",
" -e^{-\\beta_m E_a^{(k-1)}} & k_0^{(k-1)}\\, \\beta_m e^{-\\beta_m E_a^{(k-1)}}\n",
" \\end{pmatrix}$, and \n",
" $\\alphabf^{(k)} = \\alphabf^{(k-1)} + \\delta\\alphabf$,\n",
" \n",
" until $\\norm{\\delta\\alphabf^{(k)}}$ is less than a small value."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [Experimental Data (10 points)](#toc)\n",
"Data will be provided for exercises as ASCII files in the `data/` directory of the course [repository](https://github.com/dpploy/chen-3170/tree/master/notebooks/data). The data is organized in two columns of $T$ versus $k$. For example `data/k_x_T_10pts.dat`:\n",
"```\n",
"#(T,k) [K x 1/s]\n",
"r_cte = 8.314 [J/(mol.K)]\n",
"n_pts = 10\n",
"3.00000e+02 6.79538e-01\n",
"3.22222e+02 7.08972e-01\n",
"3.44444e+02 6.34251e-01\n",
"3.66667e+02 7.25196e-01\n",
"3.88889e+02 6.59508e-01\n",
"4.11111e+02 7.42922e-01\n",
"4.33333e+02 6.65461e-01\n",
"4.55556e+02 7.01082e-01\n",
"4.77778e+02 6.74563e-01\n",
"5.00000e+02 7.98533e-01\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2022-01-10T06:50:10.570774Z",
"start_time": "2022-01-10T06:50:10.564579Z"
},
"code_folding": [
2
]
},
"outputs": [],
"source": [
"'''Function: read experimental data'''\n",
"\n",
"def read_experimental_data(filename):\n",
" import io # import io module\n",
" finput = open(filename, 'rt') # create file object\n",
"\n",
" import numpy as np\n",
"\n",
" for line in finput:\n",
" \n",
" line = line.strip() # original line\n",
" \n",
" if line[0] == '#': # skip comments in the file\n",
" continue\n",
" \n",
" var_line = line.split(' = ') # variable line\n",
" \n",
" if var_line[0] == 'r_cte':\n",
" r_cte = float(var_line[1].split(' ')[0])\n",
" r_cte_units = var_line[1].split(' ')[1]\n",
" elif var_line[0] == 'n_pts':\n",
" n_pts = int(var_line[1])\n",
" temp = np.zeros(n_pts) # reserve space\n",
" k_cte = np.zeros(n_pts) # reserve space\n",
" idx = 0 # counter\n",
" else:\n",
" data = line.split(' ') # original line\n",
" temp[idx] = float(data[0])\n",
" k_cte[idx] = float(data[1])\n",
" idx += 1\n",
" \n",
" return (r_cte, r_cte_units, n_pts, temp, k_cte)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2022-01-10T06:50:10.647053Z",
"start_time": "2022-01-10T06:50:10.572689Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R = 8.314 [J/(mol.K)]\n",
"m = 10\n",
"T = [300. 322.22 344.44 366.67 388.89 411.11 433.33 455.56 477.78 500. ]\n",
"k = [0.64 0.65 0.67 0.67 0.71 0.7 0.69 0.7 0.75 0.76]\n"
]
}
],
"source": [
"'''Read experimental data'''\n",
"\n",
"import numpy as np\n",
"(r_cte, r_cte_units, n_pts, temp_vec, k_cte_vec) = read_experimental_data('data/k_x_T_10pts.dat')\n",
" \n",
"print('R = %4.3f %s'%(r_cte,r_cte_units))\n",
"print('m = ',n_pts)\n",
"np.set_printoptions(precision=2)\n",
"print('T =',temp_vec)\n",
"print('k =', k_cte_vec)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2022-01-10T06:50:10.652520Z",
"start_time": "2022-01-10T06:50:10.648255Z"
},
"code_folding": [
2
]
},
"outputs": [],
"source": [
"'''Function: plot experimental data'''\n",
"\n",
"def plot_experimental_data(temp, k_cte):\n",
" \n",
" import matplotlib.pyplot as plt\n",
"\n",
" plt.figure(1, figsize=(7, 7))\n",
"\n",
" plt.plot(temp, k_cte,'r*',label='experimental')\n",
" \n",
" plt.xlabel(r'$T$ [K]',fontsize=14)\n",
" plt.ylabel(r'$k$ [s$^{-1}$]',fontsize=14)\n",
" plt.title('Arrhenius Rxn Rate Constant Data',fontsize=20)\n",
" plt.legend(loc='best',fontsize=12)\n",
" plt.grid(True)\n",
" plt.show()\n",
" \n",
" return"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2022-01-10T06:50:11.659313Z",
"start_time": "2022-01-10T06:50:10.654564Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAHFCAYAAAByyrkJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1SElEQVR4nO3de7hcZXn38e9NQkxCSGJAQgxQQIGC+gIGQUUNqJSDIloPQIIaLMaoWC48gtZKk0qt1LdKpSBViAoSUUGphkPFBKWvoRhBBYESEw45EIwIJJBADvf7x1o7TCazV/Z5ZrK/n+uaa2Y961lr7r1m7fnNOs1EZiJJkhrbodkFSJLUygxKSZIqGJSSJFUwKCVJqmBQSpJUwaCUJKmCQbkdiYjzIiIj4qhm11IrImaXde3d7FokqbsMygEQEZ8pgyIj4oBm1zOY1XyYqL2ti4hFEXFpK4Z5zQeN2tvTEfH7iPhSRLygj54nI2J+X8yrG895TERcGRFLyr9pbflafDsijh/IWrqrGcurr2posE5tjIgnIuIPEfHDiDgzInZpdp2tYmizC9jeRUQAfwMkEMD7gY83taiBdy7wBWBZswupcQswv3y8C/B6itfmHRFxRGbe36zCKvwIuLN8PB44Afgo8PaImJSZf2pWYd0VETsD3wLeCqwDfgZcA6wH9qH4206LiC9l5mD7fxlItevUzsCewGuBk4DPR8RZmTm7OaW1DoOy//0VxT/+bOB44L0R8enMfLapVQ2gzFwBrGh2HXXmZ+Z5HQMRsQPwnxRv0J8GTm9SXVV+WPumFRHDgQXAwcCZwD80qa5uKZf194BjgXnAaZm5vK7P84AZwP4DX+Gg8sP6IIyIocD7gK8Al0fEM5l5VTOKaxXueu1/7y/v/wO4EtgVeFujjrXHGCNiSkTcFhFrIuKBroyvm9c7IuJ/yt1Zj0XEnIiY2MnzjouIf4qIe8pdX09ExM0R8VcN+k4ra5gWEUdHxPyIWB0RT0bETyLiwAbTbHWMsvwbMiLO66SmB+r/rogYFhF/GxG/jog/l3/bAxHxo4h4Y6P5dFVmbqL4MAPwirrn/euy1gURsWPduJeWdSyPiN3q64+IkRFxQUQ8FBHPlLsVP1XuaeiVzFxHsU41qnlMRHwiIn4WEUsj4tmI+GNEXBcRr6zrOy0iOr7LcnLdLrnz6voeERHfj4hHynk+HBFfi4gXdqP0UylCchFwYn1Iln/bM5n5FYot5trnf15EnBMRvy2X+5MR8YuIeFf9PCJi7/JvmF0+nhMRq6LY1f6riHhzg2m2uY51dXmV/X4QEYvL/6snI+K/I+K0Rgul/F/KiBgaEZ+OiPvLdebhiPjniBhWN+8uvWbdlZkbMvNS4ENl0/+NiBE1z93n61Z3l9VAc4uyH0XEeOAtwP9m5v+LiCcp/vGnA9+tmPRjwDEUWzjzgDHdHP+h8nmvo9jFeARwMnBwRBySmc/U1PgXFLsg9wZ+AdwA7AS8GbghIj6Qmf/RoMY3U+yeuR64BDiIYmvsFRFxUGauqvj7emo2xZvsXRS77dYCLwReAxwH/LSX8+8Ir/W1jZl5TURcBHwY+DzwSYCIGEnxOj6PYqvo0br57QjcVNZ4PbCBYlfjF4Dh9M0WYMOagQPLWn8O/AT4M7AXxXpxfEScmJk3lH3vLGv5HPAgz31ggOd2TxMRp1N84HuGYt16GNgPOAM4MSJemZkPdaHm6eX9v2TmU1Ud69bVYcCNwGTgXuAiYCTwDuC75br96Qaz+Qvgf4DFwLeBcRT/Dz+KiDdm5ryavrPZ9jp2J11YXsDFwO8pXoMVFLv4TwC+HREHZOZnO/mzv0Ox+/N64Mlymk8Cu/Hcno6u1tAb3yzn/xcUhyZ+Urb3+bpFz5fVwMhMb/10A86hODZ5bk3bQmAT8OIG/c8r+z8FHNqL8U8CL6sb951y3Lvq2ueX9ZxS1z6WYiVfC4yvaZ9WzmcD8Ia6af6pHPfJuvbZZfveNW1HlW3ndbLsHgAeqBkeU9b5K2BIg/67dPE1Oa/R8wJDKD4kJPBvDaZ7HvDrsobjyrbLy/7/0En9CcwFRtS07wY8Xt527GLNHctvWl37COC35biP1Y0bA+zaYF57AMuBexqMS4pd0o1q2B94lmIrcGLduNcDG4Fru/C3DKUI2qTB/8A2pj23ZpkOrVumHcv71TXte5dtCXyubl7Hdsyrp+tY1fIqx7+oQdsw4GaKDzb1y3F+Oc+FwLia9p3K5b4R2L07NXR3nWrQ79v163hfr1s9WVYDfXPXaz8pd62dQfGP962aUbMptgLOqJj80sy8oxfjL8zM39W1dWwVHl5T48EUn85/kJlzajtn5uMUnwKHA29v8BxzMvPm+rrqn6MPdZwM9QzFMt1yZPdPZDkqil3Z50XEhRRbEMdSfKqd1WD+z1BshTwFfCsiPk7xoeHnwMyK5/nbzFxbM59HKU6gGAN09wzot9bU/O/AfcDLyhourqv3iWywVZ+ZS4HvA38ZEXt147k/SLGFfFZmbnFSVmb+jGIL88QoTtKpMo7iDRBgaTeeH4rjZgl8NDM31Dz/ozz3mjX6v3oQ+Me6mm8EHmLLdbVP17HM/EODtmcptoSHAm/oZNJPZeZjNdM8RbGLfQfgsO7U0Ac6XuvNZ1b3w7rVm2U1INz12n9eD7wIuLHujeU7wL8A0yLis5lZv8sMit1EVbY1/lcN2h4u759f0/aq8n5MJ8c1Ov45tjru2I3n6BOZ+WRE/CdwInBnRPyAYlfxbZn5dA9mObm81boTOCozn+ikhvsj4gMUb1oXAKuAKZm5sZPneCIzFzVo7+lyOqm81fov4E2N1qOIOBI4i+J13o3nAqrDRIqw6IqOdWVyRLyiwfjdKLbK96fYIupMj47NlgH8YmBZZt7boMvPyvtDG4y7s5PX6GGe+7v6fB0rw+JTFG/ye1HsAajV8JwBBvh/axs6Xq8tfo+xj9et3iyrAWFQ9p+O4zCzaxsz80/lP+PbKd70vt9g2ke2Me9tjX+8QVvHJ/AhNW0d10kdU946M6orz5GZG4oN6S2eoy+dTPHPNIXnju+ti4jvAx/PzJXdmNc/ZOZ5UZyBOZHikp2/Ba6OiOOzOLmnkf+i2LU9Gvhe/dZVncc7aW/0WnTF6Zk5OyKGAPtSbEWdTLE1ucWWVES8jWLdWlfW/AeKreFNFLu9J1PsTu6qjnXlE9vo12hdqfUnil24wyiW+1ZbEp3oOA7f2dnTHe1jG4x7vJNpNrD1CY19so5FxL4UH2ifTxG2NwFPUOw+3Rt4L50s/3JvTqNaof/+tzrTcZLWHzsa+nrd6s2yGigGZT+I4gLwt5aDV0VEZ6dWT6dxUGaDtu6M76qOLaezMvPCPppnV3UEUWfr4Bieqw+AchfmecB5EbEn8DqK3Z+nUfxDvba7RZSB+DBwVhRnbr6D4lKLrZZHuTv9WxQhuQqYHhFzMvPn3X3e3ii3ju6PiCkUf/ffRMR1mXldTbdZFIF0WGbeUzt9RHyNrbemt6XjtRiTmU/2rPLNH6YWULx2b6DrQdnx/Lt3Mn5CXb8e6cN17KMUHy5Oz60vvziV4s2/pZUfIl9XDt5WM6qv162WX1Yeo+wf76X4xLwQ+EYntz8Cb4yIfZpVJMU1eNCDgOkDfy7v96wfEREvpvGWwWaZ+XBmXklxXPF+4DXR+28S+RjF8am/j4jRDcZ/guLMxyspdq2vB74TEbv28nl7pAz5s8rBL5Zbmh1eDPy+wRvZDhRncDayic63WPpyXek4lv3x8szhTkVxPSWZuZoiVCdGxH4Nuh5d3v+6D+qjfM5trWNVy+vF5f0PGozrbpBUqaqht6ZR7AZdQXF2fYe+XrcGaln1mEHZPzp2g30oM89odAO+xrZP6ulXmfkril0dfx0R72vUJyJeFjXXB/aheyl2YZ4UW15/OILGW3MviIgjGsxnJ4pvFNlA8Sm3x7K4tOE/KD7dfqzu+Y+gOCFkEfDB8mSpsyl2H84utzYHXGbeBvyY4sSg99SMegDYL2qubyxr/BzFpTyN/IkGH1xKX6X4YPCvEbHVlwBEcf1hV0P0KorLPPajuERjQn2Hcn4fBr5U03wZxf/MBbUfCsoPKp+t6dMjPVjHqpbXA+X9UXXPcSx9+z9fVUOPRHEd5/spTqRJ4Owsrtnt8AB9u249UN4fVVdHXy+rHnPXax+L4gvJDwB+l5lVJ918A/gMcHpEfK72LL4BNoXiRIhvRMTfUuxieZziVO//A7yU4oB9/TWCvZKZ6yPiKxRvcHdExLUU6+MxFKeY11+EPhFYEBH3UGw1PEyxC/TNFLvjLiy3OnrrfIqvHDw7Iv4tM1dFxFhgDsWbxikdz5OZl0TEGyh2136ULd/UB9LfA28CPhcRV5ZnC/4rxfWtd5QnpawHjqR4I+s4YaXezcAp5TH0hRTB8PPM/Hlm3lt+mLoMuDsibgD+l+JM2L0otjT/CPzltorNzE0R8U6KSw9OAhZHxM3APRTHpf6CYrfsCyhOfOvwLxTfbnUS8JuImEtxHeU7KU4o+WJm3tqVBdaJ7q5jnS4v4N8prnn8Xrn8l1H8Lx0HXE1xLLQvVNXQFW+N574IZCeeey0nUOzG/kBm1l/z3afrFgO3rHpuIK5BGUw3it1ySXFZwLb63lT2fVs5fF45fFQn/Xs8nueuKZvdYNzOFF/bthBYQ3Ht5BKKi4mnAzvV9J1GxfVXNLheigbXUZbtQXGt6R8oPqk/BHyR4s3vAba8jnIsRSD8jOIf6RmKXULzKS4Qjy6+Ph3L6LyKPl8q+3ypHP4Bz32yru87huJC9meBw2vat6i/O69jg/4dy6/hMq+r8SN1r9WdFCdarAKupbicpOHzU4TNd4CVFIG11XIqp59NccnFM8BjFJfWfA14fQ/+X/6qfM4l5Xq3rlye36G8XrWu//ByXb2r7L8auBU4tTvrfDl+PpA9Xce2tbyAV5fz+nNNnW+lk2uI6+upGzet0TrQlddsG+tUx20jxR6ePwA/pDhOP65i+j5dt7q7rAb6FmWRkiSpAY9RSpJUwaCUJKmCQSlJUgWDUpKkCgalJEkVBt11lLvuumvuvffevZ7PU089xU477dT7ggZQu9Vsvf2v3Wput3qh/WoerPUuXLhwVWa+oOHIZl6b0ozbpEmTsi/MmzevT+YzkNqtZuvtf+1Wc7vVm9l+NQ/WeoFfZSe54a5XSZIqGJSSJFUwKCVJqmBQSpJUYdCd9dqZTZs2sWrVKh5//HE2bty4zf5jxozhnnvu2Wa/VtJuNfdHvUOGDGHs2LHsuuuu7LCDnxMlbZtBWVq6dCkRwd57782OO+7Itn5ecPXq1ey8884DVF3faLea+7rezGT9+vWsXLmSpUuXstdee/XZvCVtv/xIXXrqqaeYOHEiw4YN22ZIqj1FBMOGDWPixIk89dRTzS5HUpswKGu4K25w8HWW1B2+Y0iSVMGgVJfNmDGDWbNmNbuMbZo/fz577LFHs8uQtJ3wZB512SWXXNKU5z3vvPNYtGgRV1xxRVOeX9Lg5haluqQrl8xI0vbIoOwrK1bA5MnwyCP9Mvvly5fz9re/nRe84AXss88+XHjhhTz22GPsscce/Od//icAa9as4cUvfjHf+ta3AJg2bRozZszgmGOOYeedd+b444/nwQcf3DzPe++9l2OOOYZx48ZxwAEHcPXVV28eN23aND74wQ9ywgknsNNOOzFv3jymTZvG3/3d3wHP7d784he/yG677caECRP44Q9/yNy5c9l///0ZN24c559//ub5bdq0iS984Qu86EUvYpddduFd73oXjz32GAAPPPAAEcE3v/lN9tprL3bddVc+//nPA3DDDTdw/vnn893vfpdRo0Zx8MEHA3D55Zdz4IEHsvPOO7Pvvvvyta99rV+Wu6QWtmIFh5x1Vr+973ZoiaCMiOMi4r6IWBQR5zQY/4mIuLO83RURGyNiXDlubER8PyLujYh7IuJVA/8XALNmwa23wsyZfT7rTZs2ceKJJ3LwwQezbNkybr75Zr785S9z++23c9lll/H+97+fRx99lLPPPptDDjmE97znPZunvfLKK/nsZz/LqlWreNnLXsbUqVOB4nKYY445hilTpvDoo49y1VVX8aEPfYi7775787Tf+c53+MxnPsPq1at5zWtes1VdjzzyCOvWrWPZsmXMnDmT97///VxxxRUsXLiQX/ziF8ycOZPFixcDcOGFF/LDH/6QW265heXLl/P85z+fD3/4w1vM79Zbb+W+++7j5ptvZubMmdx3330cd9xxfPrTn+bkk09mzZo1/OY3vwFgt91248c//jFPPvkkl19+OWeffTa//vWv+3zZS2phs2Yx5ne/65f33S109rMiA3UDhgB/APYFhgG/AQ6q6H8i8LOa4W8CZ5SPhwFjq56vs5/Z+v3vf9+tn2R58skniwfDh2fC1rfhw7s1vyoLFizIPffcc4u2888/P6dNm5aZmWeeeWa+9KUvzQkTJuSqVas293nve9+bJ5988ubh5cuX5w477JAPPfRQzpkzJ1/zmtdsMc/p06fneeedt3nad7/73VuMf+9735uf+cxnMrP4aZvhw4fnhg0bMrNYHkAuWLBgc/+Xv/zlee2112Zm5l/+5V/mT3/60y1qGTp0aK5fvz6XLFmSQD788MObx7/iFa/Iyy67LDMzP/e5z+XUqVMrl9FJJ52UX/7ylzfXNnHixMr+3X29u6Ldfp4os/1qbrd6M9uv5raotx/ed2nxn9k6HFiUmYsz81lgDnBSRf9TgasAImI08DrgGwCZ+WxmPt6/5dZZvBimTIGRI4vhkSNh6lRYsqTPnuLBBx9k+fLljB07dvPt/PPPZ+XKlQBMnz6du+66i9NPP51ddtlli2n33HPPzY9HjRrFuHHjWL58OQ8++CC33XbbFvO88soreaRmF0bttI3ssssuDBkyBIARI0YAMH78+M3jR4wYwZo1azb/DW9729s2P9eBBx7IkCFDNv8NALvvvvvmxyNHjqz8UoDrr7+eV77ylYwbN46xY8cyd+5cVq1aVVmvpO3EALzv1mqFoJwIPFwzvLRs20pEjASOA35QNu0L/BG4PCLuiIivR8TA/jT3hAkwejSsWwfDhxf3o0dDzZt+b+25557ss88+PP7445tvq1evZu7cuWzcuJEPfOADvOc97+Hiiy9m0aJFW0z78MPPLdo1a9bw2GOP8cIXvpA999yTyZMnbzHPNWvWcPHFF2/u35ffULTnnnty/fXXb/F869atY+LEhi/1FurreOaZZ3j729/Oxz/+cVauXMnjjz/OCSec0LGHQdL2ruZ9d+OwYf3yvlurFS4PafRu3Nk73onAf2fmY+XwUODlwEcy87aI+ApwDvDZLZ4gYjowHYotnvnz52814zFjxrB69eouF71x48bN/YcvW0a+732sP/10drz8cmLpUtZ1Y17bcuCBBzJq1ChmzpzJjBkzGDZsGPfddx9r167lpz/9KRs3buQrX/kKe++9N1OnTuXGG29kyJAhrF+/nrlz53LTTTcxadIkZs2axWGHHcbYsWOZPHkyn/rUp7j00kt5xzveAcBvf/tbRo0axQEHHMD69et55plntlgmtW1PP/00mbl5/IYNG4AijDvaNm7cyNq1a1m9ejXTpk3jnHPO4ZJLLmGvvfZi1apV3HbbbbzpTW/avNW5evVqhg4dunnaTZs2sXr1asaMGcMf/vAHnnjiCXbYYQdWr17NM888w0477cTatWu57rrruOmmm9hvv/0a1tbIunXrGq4HvbFmzZo+n2d/a7ea261eaL+a26Xel9x9N8+eeCKL3vAGXnzzzQy76y7u7q+6O9snO1A34FXAjTXD5wLndtL3WmBKzfDuwAM1w68FflL1fH1+jHKALFu2LE855ZQcP358jh07No844oj8whe+kGPHjs37778/MzM3bNiQr371q/Mf//EfM7M4pviBD3wg3/jGN+ZOO+2Ur371q3Px4sWb53nvvffmCSeckLvuumuOGzcujz766Lzjjjs2T9txPLJD/THK2uOA69evTyCXLFmyue3II4/Mb3/725mZuXHjxvzSl76U+++/f44aNSr33XffPPfcczMzNx+jXL9+/eZpJ0+enP/2b/+WmZmrVq3KI488MseOHZuHHnpoZmZ+9atfzd122y3HjBmTp512Wp588smd1taIxygL7VZzu9Wb2X41D9Z6qThG2QpBORRYDOzDcyfzvKRBvzHAY8BOde2/AA4oH58HXFD1fO0alD1RH3btUHOt/qzXoCy0W83tVm9m+9U8WOutCsqm73rNzA0RcSZwI8UZsJdl5t0RMaMc3/F1MG8DbsrM+jM8PgJcGRHDKAL39AEqXZI0CDQ9KAEycy4wt67tkrrh2cDs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\n",
"text/plain": [
"