mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2026-04-23 08:42:44 +02:00
a6afa45b3b
## Unified Minuit2 fitting framework with FitModel API ### Models (`Models.hpp`) Consolidate all model structs (Gaussian, RisingScurve, FallingScurve) into a single header. Each model provides: `eval`, `eval_and_grad`, `is_valid`, `estimate_par`, `compute_steps`, and `param_info` metadata. No Minuit2 dependency. ### Chi2 functors (`Chi2.hpp`) Generic `Chi2Model1DGrad` (analytic gradient) templated on the model struct. Replaces the separate Chi2Gaussian, Chi2GaussianGradient, Chi2Scurves, and Chi2ScurvesGradient headers. ### FitModel (`FitModel.hpp`) Configuration object wrapping `MnUserParameters`, strategy, tolerance, and user-override tracking. User constraints (fixed parameters, start values, limits) always take precedence over automatic data-driven estimates. ### Fit functions (`Fit.hpp`) - `fit_pixel<Model, FCN>(model, x, y, y_err)` -> single-pixel, self-contained - `fit_pixel<Model, FCN>(model, upar_local, x, y, y_err)` -> pre-cloned upar for hot loops - `fit_3d<Model, FCN>(model, x, y, y_err, ..., n_threads)` -> row-parallel over pixel grid ### Python bindings - `Pol1`, `Pol2`, `Gaussian`, `RisingScurve`, `FallingScurve` model classes with `FixParameter`, `SetParLimits`, `SetParameter`, and properties for `max_calls`, `tolerance`, `compute_errors` - Single `fit(model, x, y, y_err, n_threads)` dispatch replacing the old `fit_gaus_minuit`, `fit_gaus_minuit_grad`, `fit_scurve_minuit_grad`, etc. ### Benchmarks - Updated `fit_benchmark.cpp` (Google Benchmark) to use the new FitModel API - Jupyter notebooks for 1D and 3D S-curve fitting (lmfit vs Minuit2 analytic) - ~1.8x speedup over lmfit, near-linear thread scaling up to physical core count --------- Co-authored-by: Erik Fröjdh <erik.frojdh@psi.ch>
387 lines
132 KiB
Plaintext
387 lines
132 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "efef8e20-6571-4561-8f0b-6048b57907de",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import time\n",
|
|
"import random\n",
|
|
"import numpy as np\n",
|
|
"np.set_printoptions(suppress=True, precision=6)\n",
|
|
"\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"from scipy.special import erf\n",
|
|
"\n",
|
|
"import sys\n",
|
|
"# sys.path.insert(0, '/home/ferjao_k/sw/aare/build')\n",
|
|
"sys.path.insert(0, '/home/kferjaoui/sw/aare/build')\n",
|
|
"\n",
|
|
"from aare import fit_scurve, fit_scurve2 # lmfit\n",
|
|
"from aare import RisingScurve, FallingScurve, fit # minuit2 (object based API)\n",
|
|
"\n",
|
|
"from pprint import pprint"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8449f9e9-59ee-4194-b477-d014b8efc93b",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Model curves"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "35772e2c-37c6-4986-a9c0-7dca4a034827",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def scurve(x, p): # rising Scurve\n",
|
|
" p0, p1, p2, p3, p4, p5 = p\n",
|
|
" return (p0 + p1*x) + 0.5 *(1 + erf((x-p2) / (np.sqrt(2)*p3))) * (p4 + p5*(x-p2))\n",
|
|
"\n",
|
|
"def scurve2(x, p): #falling Scurve\n",
|
|
" p0, p1, p2, p3, p4, p5 = p\n",
|
|
" return (p0 + p1*x) + 0.5 *(1 - erf((x-p2) / (np.sqrt(2)*p3))) * (p4 + p5*(x-p2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a318ab93-fe18-4798-9ddb-6ffc2c2e3875",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Generate data (1D)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "06c8fddb-56d9-4f84-8b21-4ffd8b7bd26f",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"x = np.linspace(0,120, 121)\n",
|
|
"\n",
|
|
"rng = np.random.default_rng(42)\n",
|
|
"0\n",
|
|
"p_true_rising = np.array([100.0, 0.25, 60.0, 6.0, 120.0, 1.0])\n",
|
|
"p_true_falling = np.array([100.0, 0.25, 60.0, 6.0, 120.0, -1.0])\n",
|
|
"\n",
|
|
"y_true_rising = scurve(x, p_true_rising)\n",
|
|
"y_true_falling = scurve2(x, p_true_falling)\n",
|
|
"\n",
|
|
"noise_sigma = 4\n",
|
|
"\n",
|
|
"y_rising = y_true_rising + rng.normal(0, noise_sigma, size=x.shape)\n",
|
|
"# y_err_r = np.full_like(x, noise_sigma)\n",
|
|
"\n",
|
|
"y_falling = y_true_falling + rng.normal(0, noise_sigma, size=x.shape)\n",
|
|
"# y_err_f = np.full_like(x, noise_sigma)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7e185144-3b72-41f4-80d0-3c3504e48bba",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Plot synthetic data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "9a0b3292-7c57-4483-aecc-7ef683ff0b62",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9oAAAF0CAYAAADcnkHwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSjElEQVR4nOzdeXwTZf4H8M8kbdP7phcNpSBHS7lBCogUQS4BURBUUFFg/SmwssDqIiqIIh67HosrqwsCUhBPQAVB7kPkKmdpuXvSC3qlV9I0md8fITFpkp5p0+Pzfr2izWQyeSYkmfnO8zzfryCKoggiIiIiIiIisgmJvRtARERERERE1JIw0CYiIiIiIiKyIQbaRERERERERDbEQJuIiIiIiIjIhhhoExEREREREdkQA20iIiIiIiIiG2KgTURERERERGRDDLSJiIiIiIiIbIiBNhEREREREZENMdAmsmL9+vUQBMFwc3BwQHBwMB5//HFcu3bNbP2YmBjExMTU6jUOHjwIQRBw8OBB2zS6lhITE/HUU0+hQ4cOcHZ2hr+/P/r06YO5c+dCoVDYpU1ERESNofJx3vi2aNGiGm8nOTkZgiBg/fr1ZttOTk42LJsxYwbat29vux2oBVEUsWXLFgwZMgQBAQFwdnZGaGgoRo0ahTVr1tilTUQtnYO9G0DU1K1btw5du3aFUqnE77//jhUrVuDAgQO4fPkyfHx8DOt99tlntd52nz598McffyAyMtKWTa6Rs2fPYvDgwYiIiMAbb7yB9u3b486dOzh//jy2bNmCRYsWwdPTs9HbRURE1Jj0x3ljISEhNn+d119/HS+99JLNt1sTixcvxnvvvYfZs2fj73//Ozw8PJCSkoL9+/dj+/btmDVrll3aRdSSMdAmqkZUVBT69esHQNdrrdFosHTpUmzbtg3PPvusYb26BMuenp6Ijo62WVtr4+OPP4ZEIsHBgwfh4eFhWD558mS89dZbEEXRLu0yJooilEolXFxc7N0UIiJqoYyP8w2pY8eODf4alpSVleHjjz/G008/jS+++MLksRkzZkCr1dqlXZWVlZXB2dkZgiDYuylENsGh40S1pD8YZ2dnmyy3NHR89erV6NmzJ9zd3eHh4YGuXbvi1VdfNTxuaej4jBkz4O7ujuvXr2Ps2LFwd3eHXC7HwoULoVKpTLafnp6OyZMnw8PDA97e3pg2bRpOnTplNoTNktzcXHh6esLd3d3i4zU90J04cQLjx4+Hn58fnJ2d0bFjR8yfP99kfywNlVu2bJnZawiCgLlz5+K///0vIiIiIJPJsGbNGgQEBOCpp54y20ZBQQFcXFywYMECwzKFQoFFixYhPDwcTk5OaNu2LebPn4+SkpIa7Q8REREAXL9+Hc8++yw6deoEV1dXtG3bFuPHj8fFixfrtD1Lx0P9cW/jxo2IiIiAq6srevbsiV9++cXs+du3b0ePHj0gk8nQoUMHfPLJJxaPpZWVlJRApVIhODjY4uMSSc3CAa1Wi1WrVqFXr15wcXGBt7c3oqOj8dNPP5nsz7Jly8ye2759e8yYMcNwXz+0/rfffsNzzz2HNm3awNXVFd988w0EQcC+ffvMtrF69WoIgoALFy4Ylp0+fRoTJkyAr68vnJ2d0bt3b3z77bc12h+ihsYebaJaSkpKAgB07ty5yvW2bNmCF198EfPmzcM///lPSCQSXL9+HQkJCdW+hlqtxoQJEzBz5kwsXLgQhw8fxltvvQUvLy+88cYbAHQHzmHDhiEvLw/vvfce7rnnHuzatQtTp06t0X4MHDgQO3bswLRp0/D888/j3nvvrXXP8e7duzF+/HhERETgww8/RLt27ZCcnIzffvutVtsxtm3bNhw5cgRvvPEGgoKCEBAQgKSkJPz3v//Ff/7zH5Ph7F9//TWUSqVhZEFpaSmGDh2K9PR0vPrqq+jRowcuXbqEN954AxcvXsTevXt5pZyIiExoNBpUVFSYLHNwcEBGRgb8/Pzw7rvvok2bNsjLy8OGDRswYMAAnD17Fl26dLHJ6+/YsQOnTp3C8uXL4e7ujvfffx+PPPIIrly5gg4dOgAAdu3ahUcffRT3338/vvnmG1RUVOCf//yn2UV/S/z9/XHPPffgs88+Q0BAAMaOHYsuXbrU+ng4Y8YMxMbGYubMmVi+fDmcnJxw5swZk3notfXcc8/hoYcewsaNG1FSUoJx48YhICAA69atw/Dhw03WXb9+Pfr06YMePXoAAA4cOIDRo0djwIAB+O9//wsvLy9s2bIFU6dORWlpqUlgT2QXIhFZtG7dOhGAePz4cVGtVotFRUXirl27xKCgIPH+++8X1Wq1yfpDhw4Vhw4darg/d+5c0dvbu8rXOHDggAhAPHDggGHZM888IwIQv/32W5N1x44dK3bp0sVw/z//+Y8IQPz1119N1nv++edFAOK6deuqfG2lUilOnDhRBCACEKVSqdi7d29xyZIlYk5OTpXP1evYsaPYsWNHsayszOo6zzzzjBgWFma2fOnSpWLlnyAAopeXl5iXl2ey/MKFCyIA8YsvvjBZfu+994p9+/Y13F+5cqUokUjEU6dOmaz3/fffiwDEnTt31mi/iIio5dMf5y3dKh/jRVEUKyoqxPLycrFTp07i3/72N8PypKQks+OufttJSUmGZZaOhwDEwMBAUaFQGJZlZWWJEolEXLlypWFZ//79RblcLqpUKsOyoqIi0c/Pz+xYasnJkyfFdu3aGfbPw8NDHDdunPjVV1+JWq222ucfPnxYBCAuWbKkyvUAiEuXLjVbHhYWJj7zzDOG+/r35+mnnzZbd8GCBaKLi4tYUFBgWJaQkCACEFetWmVY1rVrV7F3795m/1bjxo0Tg4ODRY1GU+1+ETUkDh0nqkZ0dDQcHR3h4eGB0aNHw8fHB9u3b4eDQ9UDQu69914UFBTgiSeewPbt23Hnzp0av6YgCBg/frzJsh49eiAlJcVw/9ChQ4Y2GXviiSdq9BoymQxbt25FQkICPvroIzz++OO4ffs2VqxYgYiICFy5cgWAbp50RUWFyQ0Arl69ihs3bmDmzJlwdnau8b5V54EHHjBJMgcA3bt3R9++fbFu3TrDssTERJw8eRLPPfecYdkvv/yCqKgo9OrVy6S9o0aNsmt2dyIiarq++uornDp1yuTm4OCAiooKvPPOO4iMjISTkxMcHBzg5OSEa9euITEx0WavP2zYMJNcKYGBgQgICDAc80tKSnD69GlMnDgRTk5OhvXc3d3NzhWs6d+/P65fv45du3bh1VdfxcCBA7Fv3z48/fTTmDBhgiEvi753X3/Tz9/+9ddfAQBz5syxyT7rTZo0yWzZc889h7KyMnzzzTeGZevWrYNMJsOTTz4JQDes//Lly5g2bRoAmLR57NixyMzMNJzHENkLA22iaugPwPv378fzzz+PxMTEGgWzTz31FL788kukpKRg0qRJCAgIwIABA7Bnz55qn+vq6moWvMpkMiiVSsP93NxcBAYGmj3X0rKqREREYP78+YiNjUVqaio+/PBD5Obm4vXXXwcAbNiwAY6OjiY3ALh9+zYAIDQ0tFavVx1rc8iee+45/PHHH7h8+TKAPw+6xv8W2dnZuHDhgll7PTw8IIpirS52EBFR6xAREYF+/fqZ3ABgwYIFeP311zFx4kT8/PPPOHHiBE6dOoWePXuirKzMZq/v5+dntkwmkxleIz8/H6Io1vuY7+joiFGjRmHFihXYvXs30tLSEBMTg19++cUQSA8fPtzk+Km/mH379m1IpVIEBQXVZRetsnTM79atG/r372+4uK7RaBAbG4uHH34Yvr6+AP7Mk7No0SKzY/6LL74IADzmk91xjjZRNfQHYEB31Vmj0WDNmjX4/vvvMXny5Cqf++yzz+LZZ59FSUkJDh8+jKVLl2LcuHG4evUqwsLC6tUuPz8/nDx50mx5VlZWnbcpCAL+9re/Yfny5YiPjwcAjB8/HqdOnTJbt02bNgB0Cdmq4uzsbJbEDbB+ALQ2Z+yJJ57AggULsH79eqxYsQIbN27ExIkTTXq//f394eLigi+//NLiNvz9/atsKxERkV5sbCyefvppvPPOOybL79y5A29v70Zrh4+PDwRBsDgfuz7HfD8/P8yfPx8HDx5EfHw8xo4di88//xxFRUWGdfTHzTZt2kCj0SArK8vqBXFAd4HA0jE/NzfX4vrWjvnPPvssXnzxRSQmJuLmzZvIzMw0qfSib9fixYvx6KOPWtyGrebQE9UVe7SJaun999+Hj48P3njjjRqXxHBzc8OYMWOwZMkSlJeX49KlS/Vux9ChQ1FUVGS4Cq23ZcuWGj0/MzPT4vKMjAwoFApDDVE/Pz+LV/o7d+6Mjh074ssvv7R4UNVr3749cnJyTE4QysvLsXv37hq1U8/HxwcTJ07EV199hV9++QVZWVkmw8YBYNy4cbhx44bFNvfr189i9nMiIiJLBEGATCYzWbZjxw7cunWrUdvh5uaGfv36Ydu2bSgvLzcsLy4utpidvDK1Wm010NUPgdcf87t06WLxuDlmzBgAuszfVWnfvr1JVnAA2L9/P4qLi6ttp7EnnngCzs7OWL9+PdavX4+2bdti5MiRhse7dOmCTp064fz58xaP9/369TMZjk9kD+zRJqolHx8fLF68GC+//DI2b96M6dOnW1xv9uzZcHFxweDBgxEcHIysrCysXLkSXl5e6N+/f73b8cwzz+Cjjz7C9OnT8fbbb+Oee+7Br7/+aghgqyvX8Ze//AUFBQWYNGkSoqKiIJVKcfnyZXz00UeQSCR45ZVXqm3Df/7zH4wfPx7R0dH429/+hnbt2iE1NRW7d+/Gpk2bAABTp07FG2+8gccffxx///vfoVQq8e9//xsajabW+/zcc8/hm2++wdy5cxEaGooRI0aYPD5//nz88MMPuP/++/G3v/0NPXr0gFarRWpqKn777TcsXLgQAwYMqPXrEhFR6zNu3DisX78eXbt2RY8ePRAXF4cPPvjA5lOmamL58uV46KGHMGrUKLz00kvQaDT44IMP4O7ujry8vCqfW1hYiPbt2+Oxxx7DiBEjIJfLUVxcjIMHD+KTTz5BRESE1V5hvSFDhuCpp57C22+/jezsbIwbNw4ymQxnz56Fq6sr5s2bB0A3be7111/HG2+8gaFDhyIhIQGffvopvLy8arW/3t7eeOSRR7B+/XoUFBRg0aJFZuc1n3/+OcaMGYNRo0ZhxowZaNu2LfLy8pCYmIgzZ87gu+++q9VrEtkaA22iOpg3bx4+/fRTLF++HE888QSkUqnZOkOGDMH69evx7bffIj8/H/7+/rjvvvvw1VdfGYZd14ebmxv279+P+fPn4+WXX4YgCBg5ciQ+++wzjB07ttphbfPmzcM333yD//3vf7h16xZKSkrQpk0bDBw4EF999RWio6OrbcOoUaNw+PBhLF++HH/961+hVCoRGhqKCRMmGNYJDw/H9u3b8eqrr2Ly5MkIDg7GggULcPv2bbz55pu12mf9CUJaWhqWLFlidtB1c3PDkSNH8O677+KLL75AUlISXFxc0K5dO4wYMYI92kREVGOffPIJHB0dsXLlShQXF6NPnz748ccf8dprrzV6W0aPHo0ffvgBb7zxBqZOnYqgoCC8+OKLyMjIwMaNG6t8rqenJ958803s27cPr776KrKzsyEIAsLDwzF//ny88sorcHV1rbYN+vJaa9euxfr16+Hi4oLIyEi8+uqrhnX+/ve/Q6FQYP369fjnP/+Je++9F99++y0efvjhWu/zs88+i6+//hoALJbqGjZsGE6ePIkVK1Zg/vz5yM/Ph5+fHyIjIzFlypRavx6RrQmiPs0gEbUI77zzDl577TWkpqba5ao7ERERNTy1Wo1evXqhbdu2+O233+zdHCKqhD3aRM3Yp59+CgDo2rUr1Go19u/fj3//+9+YPn06g2wiIqIWZObMmXjwwQcN09H++9//IjExEZ988om9m0ZEFjDQJmrGXF1d8dFHHyE5ORkqlQrt2rXDK6+8YpdhbURERNRwioqKsGjRIty+fRuOjo7o06cPdu7caZavhIiaBg4dJyIiIiIiIrIhlvciIiIiIiIisiEG2kREREREREQ2xECbiIiIiIiIyIaaZTI0rVaLjIwMeHh4QBAEezeHiIgIoiiiqKgIISEhZjXeqW54vCcioqakNsf6ZhloZ2RkQC6X27sZREREZtLS0lhez0Z4vCcioqaoJsf6Zhloe3h4ANDtoKenp51bQ0REBCgUCsjlcsMxiuqPx3siImpKanOsb5aBtn74mKenJw+8RETUpHCIs+3weE9ERE1RTY71nERGREREREREZEMMtImIiIiIiIhsiIE2ERERERERkQ01yznaNaXRaKBWq+3djBbB0dERUqnU3s0gIiIiIqJKGPfYjpOTk03KdLbIQFsURWRlZaGgoMDeTWlRvL29ERQUxEQ/RERERERNAOMe25NIJAgPD4eTk1O9ttMiA239hy0gIACurq4MDOtJFEWUlpYiJycHABAcHGznFhEREREREeMe29JqtcjIyEBmZibatWtXr/ezxQXaGo3G8GHz8/Ozd3NaDBcXFwBATk4OAgICOIyciIiIiMiOGPc0jDZt2iAjIwMVFRVwdHSs83ZaXDI0/dwEV1dXO7ek5dG/p5z/QURERERkX4x7GoZ+yLhGo6nXdlpcj7Yeh03YHt9TImpulGoNYo+nIC2vFHJfV0yPDoOzI0fkkA4/H0TUEvAc3bZs9X622ECbiIhaN6Vag0mrjyEhUwGpIEAjith69hZ+eGEQgyni54OIiBpUixs6TkREBACxx1OQkKmAKAIVWhGiCCRkKhB7PMXeTaMmgJ8PIiJqSAy0m5CYmBjMnz/f3s0gImoR0vJKIa00/EsqCEjLK7VTi6gpqc3nQ6nWYM2Rm1i6PR5rjtyEUl2/eXtERK1da4h7OHS8GRFFERqNBg4O/GcjIqqO3NcVGlE0WaYRRch9mTSGav754BBzIqLG1xLiHvZoNxEzZszAoUOH8Mknn0AQBAiCgPXr10MQBOzevRv9+vWDTCbDkSNHMGPGDEycONHk+fPnz0dMTIzhviiKeP/999GhQwe4uLigZ8+e+P777xt3p4iI7Gh6dBgigz0hCICDRIAgAJHBnpgeHWbvplETUPnzAQABHjIk3Skx6bXmEHMiIttqLXFP871EUAuiKKLMTsO8XBylNcpc98knn+Dq1auIiorC8uXLAQCXLl0CALz88sv45z//iQ4dOsDb27tGr/vaa6/hxx9/xOrVq9GpUyccPnwY06dPR5s2bTB06NA67w8RUXPh7CjFDy8MqjartFKtYc9kC2ecXTzIyxmCICCzoAzjegRjfM8QpOWWYN/lHGQXqfDNqTSTXmv9EPMKo95vTkEgoqaoOcQ8QOuJe1pFoF2m1iDyjd12ee2E5aPg6lT92+zl5QUnJye4uroiKCgIAHD58mUAwPLly/Hggw/W+DVLSkrw4YcfYv/+/Rg4cCAAoEOHDjh69Cg+//xzBtpE1Go4O0oxa0gHs+WiKOKPG7n4eN81BHjI8OmTfezQOmoMxkO/JQA0d+NlB4luGHhksCfG9wxBdpFK12t9N6DW91pzCgIRNRfNIeYBWk/c0yoC7eauX79+tVo/ISEBSqXS7ENaXl6O3r1727JpRETNSll5Bd76JQF7E3OQU6QCAMgcJMgtVsHPXWbn1lFDiD2egksZCgCAcT9PhfbPgNrFUWq113rx2AhsPXvLZI42pyAQETWMlhT3tIpA28VRioTlo+z22vXl5uZmcl8ikUCsdHVdrVYb/tZqtQCAHTt2oG3btibryWQ8kSSi1kcURexNzMZfvz5nMqzO180RP74wmEF2C6Yb+v1nT3Zl+szjlXutK7QiMgrKsHJnomGIeWZBmdUpCERE9tbcYx6gZcU9rSLQFgShxkMZ7MnJyQkaTfXzKtq0aYP4+HiTZefOnYOjoyMAIDIyEjKZDKmpqRwmTkStgrU5uKE+Lgjzc8NnB2/gXFqB2fPyStRY9N15jI4KYvDUQumGflt/vEIr4oGubVCm1hh6rSu0IpwdJdh7OcekF7spZxo3/g7wYgBR69RcYh6gdcQ9zeNfopVo3749Tpw4geTkZLi7uxuu0FT2wAMP4IMPPsBXX32FgQMHIjY2FvHx8YbhER4eHli0aBH+9re/QavV4r777oNCocCxY8fg7u6OZ555pjF3i4ioQVmbgysRAK1RgCWVCNBqRVSOuc6k5iMuNZ8lm1qo6dFhhqHfgghYOrJ+cyodj/Rpi+ERASgsVSOjoAx7L+dYnLNtac6/vbEEGRE1N60h7mF5ryZk0aJFkEqliIyMRJs2bZCammpxvVGjRuH111/Hyy+/jP79+6OoqAhPP/20yTpvvfUW3njjDaxcuRIREREYNWoUfv75Z4SHhzfGrhARNRrj8kvGPZfGQXZ0uC/mPXAPYCEhqlYESza1YPrs80vGRuCpgWF4ZXQXvDK6C8ZEBaKX3AuuTlKk5JXi473X8On+60jJK0W5Rmt2gtSUM42zBBkRNTetIe4RxMqD3psBhUIBLy8vFBYWwtPT0+QxpVKJpKQkhIeHw9nZ2U4tbJn43hJRU7R0ezxij6dUMQdX16u5eGyEodcPIsx6th0kAqYNaIc3H46qUzuqOjY1JytXrsSPP/6Iy5cvw8XFBYMGDcJ7772HLl26GNaxVsLl/fffx9///ncAQExMDA4dOmTy+NSpU7Fly5Yat6Ux3tMSVQV+jc/Ct6fScDI5z+p6ggAsGRvRJHu0l26Px6YTqYYEb0D9P89E1PTx3LxhVPW+1ua4xKHjRETUbFSeh/rkve1QrKqocg6uFrp5usZ1tXfFZyEuJd8k2GbJJp1Dhw5hzpw56N+/PyoqKrBkyRKMHDkSCQkJhiQ1mZmZJs/59ddfMXPmTEyaNMlk+ezZsw01UgHAxcWl4XegltxkDpjcNxST+4Yi6U4Jvo9Lw3en0w1Z6fWCPJ0xvmeInVppmf77cClDAY3W9EvAzzMRkX0x0CYiombB0lzsD3Zfgariz3ldAv7sqTauk6wvxaSvqz09OsxsTitLNuns2rXL5P66desQEBCAuLg43H///QBgqHuqt337dgwbNgwdOpj29hrXSG0Owv3d8PdRXfG3EZ2x/3IOPtpzFVeyi6AVgcxCJYa8fwCjuwVhSj85BnX0g0RiuWe/MVT+PlT1uSciosZXq0B79erVWL16NZKTkwEA3bp1wxtvvIExY8YA0JVPefPNN/HFF18gPz8fAwYMwH/+8x9069bNsA2VSoVFixbh66+/RllZGYYPH47PPvsMoaGhttsrIiJqcSzVQ1ZVaCEVgAEd/NC/vS8KSstNso5by75s3LvNLM1VKywsBAD4+vpafDw7Oxs7duzAhg0bzB7btGkTYmNjERgYiDFjxmDp0qXw8PBo0PbagoNUgpHdgjCyWxDySsqx7ewtfHs6DZezivDT+Qz8dD4Dbb1dDD3htek5tlV2cJPcBEbLe8m9mUWfiKgJqFWgHRoainfffRf33HMPAGDDhg14+OGHcfbsWXTr1g3vv/8+PvzwQ6xfvx6dO3fG22+/jQcffBBXrlwxHFjnz5+Pn3/+GVu2bIGfnx8WLlyIcePGIS4uDlIpDwhERGROoxVx6EqOxce0IvDHzVwUlqlrlWVZ37tN1omiiAULFuC+++5DVJTlub4bNmyAh4cHHn30UZPl06ZNQ3h4OIKCghAfH4/Fixfj/Pnz2LNnj9XXU6lUUKn+HLKtUChssyP14OvmhOfuC8ezg9sj/pYC355Ow7Zzt3CroAyf7LuGT/Zdw6COfpjST47RUUFVfv5smR1cVx9cMGRFB3S92d1CPPm5JiJqAmoVaI8fP97k/ooVK7B69WocP34ckZGR+Pjjj7FkyRLDwXbDhg0IDAzE5s2b8fzzz6OwsBBr167Fxo0bMWLECABAbGws5HI59u7di1Gj7FNgnYiI7MtaL1+FRoufzmfg0/3XcfNOicXninf/05TLLzVXc+fOxYULF3D06FGr63z55ZeYNm2aWcKY2bNnG/6OiopCp06d0K9fP5w5cwZ9+vSxuK2VK1fizTfftE3jbUwQBHQP9UL3UC8seSgCuy9l4bvT6Th6/Q6O3cjFsRu58NjugAk9QzClnxw9Qr3MksaZZAevZ9kwXX1wzssmImqq6jxHW6PR4LvvvkNJSQkGDhyIpKQkZGVlYeTIkYZ1ZDIZhg4dimPHjuH5559HXFwc1Gq1yTohISGIiorCsWPHGGgTEbUi+uA66XYx9l3OQXaRytDL9+OZdEyPDsMXh28iOVdXUsnLxREyBwlyilQmc7H1mnL5peZo3rx5+Omnn3D48GGr07uOHDmCK1eu4Jtvvql2e3369IGjoyOuXbtmNdBevHgxFixYYLivUCggl8vrtgMNyNlRiod7tcWobkH4dP81HLl2B8m5pSgsU2PTiVRsOpGKLoEeeKxfKB7p3RZ+7jIAlnuh6/q5Na4PzjwDRERNT60D7YsXL2LgwIFQKpVwd3fH1q1bERkZiWPHjgEAAgMDTdYPDAxESoqujmNWVhacnJzg4+Njtk5WVpbV12yKQ8mIiKh61nqqjYfQCviz5vWfvXxFeHVrPADAx9URs4Z0wDOD2sNBIjBreAMTRRHz5s3D1q1bcfDgwSrrkK5duxZ9+/ZFz549q93upUuXoFarERwcbHUdmUwGmUxWp3Y3tsrDwCu0IsL8XNG9rRf2JGTjSnYR3t6RiBU7E9El0APzR3RCW28Xm/VCM88AEVHTVutAu0uXLjh37hwKCgrwww8/4JlnnjGpk1l5mJQoilbrbdZ0naY8lIyIiCyraj6q8RBaa5W5pBIBQzu3wQeTexh6BAEwa3gDmzNnDjZv3ozt27fDw8PDcCHcy8vLpDyXQqHAd999h3/9619m27hx4wY2bdqEsWPHwt/fHwkJCVi4cCF69+6NwYMHN9q+NCRLw8BT80rxVHQY3hgXiYf/8zsyC5UQReByVhH+L/YM2rg7wc/NCXeKy+ucHdxWydSIiKhh1TrQdnJyMiRD69evH06dOoVPPvkEr7zyCgBdr7Xx1eqcnBxDL3dQUBDKy8uRn59v0qudk5ODQYMGWX3N5jKUjIiI/lTVfFRLQ2gr02pFHLiSg6e/PGmWLIq9eQ1n9erVAICYmBiT5evWrcOMGTMM97ds2QJRFPHEE0+YbcPJyQn79u3DJ598guLiYsjlcjz00ENYunRps098qg90v49LN5vCoB8G/tP5DGQplGbPvV1cbvjb180J94b74s0J3Wr8ubVlMjUiImpY9a6jLYoiVCqVIbPonj170Lt3bwBAeXk5Dh06hPfeew8A0LdvXzg6OmLPnj2YMmUKACAzMxPx8fF4//33rb5GcxpKZk/Lli3Dtm3bcO7cOXs3hYioyvmowV7OqNBaD7KB6pOcMWt4wxCruPhh7C9/+Qv+8pe/WHxMLpebjHZrKaxNedCr0Iq4lKHApQyFhc8+MKRTG0gkAg5eyUFOkQq/XMjE7ktZCPN1xeB7/PGPMV3h4mR+aqYP7nfFZyEhQwER9U+mRkTUnDWHuKdWgfarr76KMWPGQC6Xo6ioCFu2bMHBgwexa9cuCIKA+fPn45133kGnTp3QqVMnvPPOO3B1dcWTTz4JQDfsbObMmVi4cCH8/Pzg6+uLRYsWoXv37oYs5FR3ixYtwrx58+zdDCIiAJazIldoRWQplNh1yTwvR4CHE7xdnXA9p9gkgBEAfB+XDgDstSa7sjblwbhn+1xagcWLSFoA93Xyx6whHZCtUOKbU2n4dP91lGu0uH67BNdvl+Drk2mY+8A9eLy/HAGeuizuxsE9LEy1YBJAImqNmkPcU6tAOzs7G0899RQyMzPh5eWFHj16YNeuXXjwwQcBAC+//DLKysrw4osvIj8/HwMGDMBvv/1mqKENAB999BEcHBwwZcoUlJWVYfjw4Vi/fn2zH0rWFLi7u8Pd3d3ezSAiAmCaFVkCQCPq6vzuvpQNAAj0lKGX3Btt3GVo7++G6dFhiD2eghU7E022oxWBq9lFWLEzkcNkya4sjdKQCIC/uwy3i1S6nmajIFuALtdA5bnYgZ7OcHWSolyjNdl+uUaLD/dcxSf7riGmcxs81k+OlNwSQ3BvCZMAElFr1BziHkltVl67di2Sk5OhUqmQk5ODvXv3GoJsQJcIbdmyZcjMzIRSqcShQ4cQFRVlsg1nZ2esWrUKubm5KC0txc8//8z51nfFxMTgr3/9K15++WX4+voiKCgIy5YtMzyempqKhx9+GO7u7vD09MSUKVOQnZ1teHzZsmXo1auX4f7Bgwdx7733ws3NDd7e3hg8eDBSUlKQnJwMiUSC06dPm7z+qlWrEBYWVuNhg0REVXF2lCJ25gCM6BoAJwddYFyhFRHi5Yy3Jkbh8MvD8PlT/fD2I90xa0gHODtKMT06DJHBnhAEXQCjpxUB0WgYOZE9WBqlIQJo5+sKqcQ0qatUAPqG+WDagHZYMjbC7AJRWl4pHCo9RyIAbTxk0GhF7Lucg/+LjcNHe65azBgoEQBBAJMAElGz1BrinnrP0W7J7JHZc8OGDViwYAFOnDiBP/74AzNmzMDgwYMxYsQITJw4EW5ubjh06BAqKirw4osvYurUqTh48KDZdioqKjBx4kTMnj0bX3/9NcrLy3Hy5EkIgoCwsDCMGDEC69atQ79+/QzP0Se6qS5LPBFRdUrLK7DpeCo+P3wTd4p15RnbertgzrB7MKlvW8gcLP+WGic5+z4uHVezi0yGkXOYLNmTtdrVIyIDEZeab7KuFsDoqCCrc6etBe3P398Bw7oG4LvT6fjhTDpuF6ksPr9POx+Mjgqyem7C7OREVFP2+r1o6XEPA20r7JXZs0ePHli6dCkAoFOnTvj000+xb98+AMCFCxeQlJRkGAGwceNGdOvWDadOnUL//v1NtqNQKFBYWIhx48ahY8eOAICIiAjD47NmzcL//d//4cMPP4RMJsP58+dx7tw5/Pjjjw22b0TU/NT24FuiqsC635Pw2cEbKC3XANAF2PMeuAeP9gmFk0P1A6mMk5xVHkbOYbJkT9ay3QPAz+czrJabs/Q9sha0679j/xjTFYtGdsaexGy8/P0FFCkrDO0QAAR7OSMy2BNOUvPvFLOTE1FN2fP3oqXHPQy0raiqLE1DZvbs0aOHyf3g4GDk5OQgMTERcrncZJh9ZGQkvL29kZiYaPaB8/X1xYwZMzBq1Cg8+OCDGDFiBKZMmWIovTZx4kTMnTsXW7duxeOPP44vv/wSw4YNQ/v27Rts34io6bIUCACo8cG3WFWBDceS8b8jN1FQqjZ5zMvFARN7t61RkG2sqkCEyF6sZbu3Vm6uqpPY6krUOUglGBMVjGFdAvD5oRs4cu0OUnJLcbtYhZ8vZOLnC5kI9XHBY33lmNwvFG29dXXO7XUOQ0TNjz1/L1p63MNA24qqytI0JEdHR5P7giBAq9VCFEWLQxusLQd0QyL++te/YteuXfjmm2/w2muvYc+ePYiOjoaTkxOeeuoprFu3Do8++ig2b96Mjz/+uCF2iYiaOGuBwPieIVUefJVqDdYeuYm9iTm4nFWEMrXG4vYTs4rqdMBmrWxqTqwF4NWdxNbke+HsKMVLIzrjpRGdIYoizqcX4rvTafjpXAbS88vw0d6r+HjfVdx3jz8e6ydH8p0Su5zDEFHzY6+YB2j5cQ8DbSsszZ2y55DFyMhIpKamIi0tzXB1JyEhAYWFhSZDIyrr3bs3evfujcWLF2PgwIHYvHkzoqOjAeiGUURFReGzzz6DWq3Go48+2ij7QkRNi7VAwMVRavXgm6NQ4qFVR03mjzpJJegb5oOTSbnQWJlXXduh6KyVTc1dXU9irX1XBEFAL7k3esm98dpDkdh1KRPfnU7HsRu5OHLtDo5cuwNnB4lZiTFOuyAiS5pazAO0nLiHgbYVTW3I4ogRI9CjRw9MmzYNH3/8sSEpwNChQ00m9uslJSXhiy++wIQJExASEoIrV67g6tWrePrppw3rREREIDo6Gq+88gqee+45uLi4NOYuEVETYS0QAGCxDvbNOyUY8v4BqCrMSxOl5Zeicglh/QGb80apNarpSaxxYB3k5Yyfz2cgMauoyu+Ki5MUj/QOxSO9Q5GWV4rv4tLx/ek0ZBQqzdrROdDd7ByGCdOIqKnFPEDLiXsYaFvR1IYsCoKAbdu2Yd68ebj//vshkUgwevRorFq1yuL6rq6uuHz5MjZs2IDc3FwEBwdj7ty5eP75503WmzlzJo4dO4bnnnuuMXaDiJoga4HA8IgAlKk1JnWwJQJw5Nodq9u6lV9mqETkUKl+MOeNUmtUk5PYyhehjHuja/pdkfu6YsGDnfHS8E74/fodbDmVit2XsqG5u62bt0uw4NtzeKyfHPd3agO1RlvvC18M1Imav6YW8wAtJ+4RxGZYNFmhUMDLywuFhYXw9PQ0eUypVCIpKQnh4eFwdna2UwubjxUrVmDLli24ePFitevyvSVqmSz1NEcGe+KHFwYhv7Qci749j5PJeVDfHQ/eJdAD3UI88ePZW1Vut1+YafmhpdvjselEqkkQ4SARMG1AO7z5cFSD7mNjqOrYRHXTUt7T6gLSNUduYsXORFR1RlaX70pBaTl+Op+Bb0+nIf6WwrA8yNMZHdu44fcbuSbrCwKwZGxEjS58VfW7wWCbqHHw3Lx2ahr3VPW+1ua4xB7tVqq4uBiJiYlYtWoV3nrrLXs3h4jsyNLV7LHdg/Hx3mvY+EcySu6W6eoa5IEXYjoiR6FE8p0SBHnKkF2kAkSgcnzgIBHQLcTT5IS9Kc4DI2oM1eUasDR9o7K6fFe8XZ3w9MD2eHpgeyRkKPBdXBq2nr2FLIUSWQrz4eW1SYDEESpE1FzYK+5hoN1KzZ07F19//TUmTpzIYeNEZAgE7hSrsPrgDQz94IChBzsy2BMvjeiEIff447HP/zAZ3hroKUNbbxecTS0wCbYtBQVNcR4YUVNg6SIUoKuXLZXY5rsSGeKJpSHd8I8xXbE3IQcf7rmCG7dLTNap0IoQhKoz++rZM1MxEVFt2CvuYaDdSq1fvx7r16+3dzOIqInIKVLif4dvIvZ4qoUyXSKGdm5jsQcrp0iFGYPaQ1WhrTaAborzwIiaAksXoboGeeDhXm2RWVBm0++KzEGKh3oEY3hEACZ8ehRXs4tNHl9/LAVHrt3BlH5yPNKnLQI8LA9HbegRKpz/TUS2Yq+4h4E2EVELVt3Jao5Cif8euolNJ1LMsojr6etgW+vByipU1jiAZrkuInMNfRHK2u/AT3PvQ+zxFKTmlkCEgCKVGrvjs3HjdglW/noZ7+++gmFdAjClXyiGdQ2Ao1Ri2GZDjlBhhQIiagkYaBMRtVBVnawWlKrxnwPX8fXJP5OT9Qz1gr+7DAev5Fisg11VDxYDaKL6aajvUHVBa+XXLHpYjR0XMrHlVBrOpRVgb2I29iZmw8/NCZP6hmJCzxAcv5mLtLxSjOsRjPE9Q2ze687530TUErTYQFurtdwzQ3XH95SoebF0snopQ4Hpa07gwq1ClFfqwVZrtOgf7ov9V3JMluuDac6xJmp+ahq0Vq7jXV6hm0IiQJfsMLekHF8cvokvDt8EoCv1pxWBbiF/ZhpXqjVYc+RmvXvlOf+bqHZ4jm5btirK1eICbScnJ0gkEmRkZKBNmzZwcnKqNqEHVU0URZSXl+P27duQSCRwcnKyd5OIqAasZTI+nZJvcf3ErCKMvxs8WwqmOceaqPmpSdBaVR1v418PZ0cJlGrdCb1+lUsZCry9IwFLxkZg8n//sMlwb1YoIKoZxj22J4oibt++DUEQ4OjoWK9ttbhAWyKRIDw8HJmZmcjIyLB3c1oUV1dXtGvXDhKJpPqVicju5L6uJifMeu18XdE1yAP7ErPNhohXN9+aQ8SJmpeaBK2Wer0t0QfZlcUeT8WOC5nIL1UDqP9wb46eIaoZxj0NQxAEhIaGQiqtX0dCiwu0Ad3VnXbt2qGiogIaTeXsuVQXUqkUDg4OvEpG1Eyk5ZXiSlaR2fJ2vi54ckA77E3IRuUYnPOtiVqemgStNanjXRUnB4khyDYhAt/HpRvaUdOe7YYcPcNs5tTSMO6xPUdHx3oH2UALDbQBGLr769vlT0TUnKTkluDT/dfx49lb0NyNpMP93dAl0B095d74+XwG3tt1GRL8OSTUwUZ1eomo6alJ0FpVHW/AdPi4nkTQLY8M9sTGmfdi2U+X8NP5TJN1RACXs4rw9o7EWg8jt3bBrz6BMrOZU0vFuKdparGBNhFRa5J0Rxdgbzv3Z4A9pJM/5o/ohL5hvgCANUduIjGrCKIIGF/z7iX3xuioIPbsELVQ1Y1SqaqO996EbMSl5JsF233a+Zj8brw/uSdu3C7BpQyFxde4lKHAS1vO4r1JPeDtWrdcL/UNlJnNnIgaEwNtIqJm7MbtYny6/zq2n7tlGAoe06UN/jq8E/q08zFZ19LwUAeJgG4hnjzJJGolrPUIW+v1njGovVlwGxnsidhZA0yCW+NtfB+XjitZRWbB+e5L2ThweR9GdgvElH5yDL7HH1JJzaek1TdQZjZzImpMDLSJiJqh6zlFWLX/On4+n2EIsB/oGoC/Du+ErkEeiD2egu1nb5mcMDOTL1HrVtua2kDt5ksbb2PFzkSzMeeBnjJkK1T45UImfrmQiRAvZ0zuG4rJfeVo5+da7bDw+gbK/A0kosbEQJuIqAmrfOI5INwXnx++iR0XM6E/XxwRoQuwe4R6V3kizUy+RK1bXXuEa5sg0dpvzQ8vDML1nGJ8ezoN289lIKNQiX/vv45/77+OAeG+SM8vxa0CpSFvROVh4fUNlPkbSESNiYE2EZGdVNd7Yxw0SwCTUlwAMDIyEH8d3glRbb0My6o7kWYdbKLWq7GGTlfVCx7V1gtRbb3w6tgI7LyYiVX7ryPpTglOJOUZnq8vS3gpQ/fbNT06DLHHU5B0uxiBHjJkF6nqFCg3ZDZzIqLKGGgTEdlBTZL6xB5PMSQWMk5e1jXIA/+a0hPdQrxMtqefGynAdMSm8Yk0S3cRtV6NOXTa+LfG0kVFAFh7NAnJuSWQCuYXEvV2XsjEd6fTcDWnWHeRQCsi0FOGERGBCPd3q3WgzN9AImosDLSJiOygup7n+FuF2HAs2ex5UgEYEO5rFmTrg3YBsFofm4haN3sMnbZ2UXF8zxDDb2BVlX/PpBUY/tb/VuYUqRDu78aAmYiaNAbaRESNqKqeZwG6AHzLyVRcv11i8flawBA067e1Kz4LCRkKiJW2Z1znlnMQicgeQ6etXVR0cZSaDWPXc5Doeq6DvZxRXqFFbkm56QoiEH+rsMHaTERkCwy0iYgaSXU9z1oRSM79c66kcSCuTw6kD5qNtwXRLLkvJALQOdADk/uGcg4iERk09tBpa/PCAZgNYweAByMCEOLtYrgIEHs8BW/vSDRZRwSw7VwGbhWUYUo/OcZ2D4abjKe0RNS0SOzdACKilkyp1mDNkZtYuj0e8zafMfTsVA6yLTFepZfcG0vGRhjmcBv3ElnalAhgct9QzBrSgUE21crKlSvRv39/eHh4ICAgABMnTsSVK1dM1pkxYwYEQTC5RUdHm6yjUqkwb948+Pv7w83NDRMmTEB6enpj7go1AdbmhQ+PCEBksCcEQXchURCAbiGeWPVkH7z5cJTht2t6dBi6hejWk94tue0uc4BEAE4l5+Pv31/AvSv24h8/XMCZ1HyIFoL3mjL+vV5z5CaU6qoGtRMRVY2X/4iIGkjluYkVNYmuLXCQCOgW4olZQzoYTgQtDT0HOFyc6u/QoUOYM2cO+vfvj4qKCixZsgQjR45EQkIC3NzcDOuNHj0a69atM9x3cnIy2c78+fPx888/Y8uWLfDz88PChQsxbtw4xMXFQSrlxZ/Wwtq88GcHh+PZweHVDmO3Nty9oFSNLadSseFYMvJL1dhyKg1bTqWhc6A7pvST49E+ofB1c7LSKnM1SVBJRFQbDLSJiBqIpbmJloR4OSOjUGn1cX0ys+qGngNAn3Y+GB0VxOHiVGe7du0yub9u3ToEBAQgLi4O999/v2G5TCZDUFCQxW0UFhZi7dq12LhxI0aMGAEAiI2NhVwux969ezFq1KiG2wFqUioHykFezhAEASt3JtZ4jril4e7ersCehGzkl6oNWcsFAbiaXYy3dyTi/V1X8GC3QDzRvx0GdfSDRCJU+Rp1rTFORGQNA20iogZiaW5iZZ0C3PHd/w3EtDUnzOplV56XbW24uHEvduysAQywyaYKC3VJp3x9fU2WHzx4EAEBAfD29sbQoUOxYsUKBAQEAADi4uKgVqsxcuRIw/ohISGIiorCsWPHGGi3MvpA2Za9xvrfQ+DP30xRBMZEBSE9vwwXbxVix4VM7LiQiXa+rpjaX47H+oUiwMPZ4vaqqjFuqTwZf2eJqDoMtImI6sjayZd+efytQovDxdt6OyM63A8RIZ6G51jq8cksKDPZrqUTQSY9o4YkiiIWLFiA++67D1FRUYblY8aMwWOPPYawsDAkJSXh9ddfxwMPPIC4uDjIZDJkZWXByckJPj4+JtsLDAxEVlaW1ddTqVRQqVSG+wqFwvY7RXZjy15jS7+HDhIBAR4yrJ7eF/G3CvHNqTRsO3sLqXml+GD3FXy05ypGdgvEtAFhGNjBtJfb2lzyIC9nDiknojphoE1EVAfWemY2zRqAJ/93HAmZRRaf1ynAHT/Pu8/iPMTqTjQtnQgaJz0jsrW5c+fiwoULOHr0qMnyqVOnGv6OiopCv379EBYWhh07duDRRx+1uj1RFCEI1ofwrly5Em+++Wb9G05NUlW9xrVlLTDWlz+MauuFqLZeeHVsBHZczMTmEyk4k1qAnRezsPNiFsL93fBUdBgm9wuFp7Oj1bnkgiBwSDkR1QmzjhMR1YFJz4xWhCgClzIUeG7dSYtBdo+2XnjtoQiLQXZNTY8OM8vSy6Rn1FDmzZuHn376CQcOHEBoaGiV6wYHByMsLAzXrl0DAAQFBaG8vBz5+fkm6+Xk5CAwMNDqdhYvXozCwkLDLS0trf47Qk1GdcFxbdT099DFSYrJfUPx44uD8etLQ/BUdBjcZQ5IulOC5b8kIPqdfXht20XcKijDDy8MwpKxEZg2oJ2hykNmQZmhHJleXS8OEFHrwh5tIqI6sDb/+kxaodm6DhIBvdt517v3w1r2XQ5fJFsSRRHz5s3D1q1bcfDgQYSHh1f7nNzcXKSlpSE4OBgA0LdvXzg6OmLPnj2YMmUKACAzMxPx8fF4//33rW5HJpNBJpPZZkeoybHWa1yXi4WWfg8n9w21OAXH+O8wP1cc+nsMfo3PwoZjybiWU4zY46mIPZ6KEREBmDWkA2beF24YeWHLiwNE1Low0CYiqgO5r2uNy3XZ8qSsJkPMiepjzpw52Lx5M7Zv3w4PDw/DnGovLy+4uLiguLgYy5Ytw6RJkxAcHIzk5GS8+uqr8Pf3xyOPPGJYd+bMmVi4cCH8/Pzg6+uLRYsWoXv37oYs5NT62PpiofHvofF0HuOkkvqM5MCfCSb1c6ynDWiHP27k4svfk7Hvcjb2JuZgb2IOerfzxrwH7sGwLgE2vThARK2LIIpVpMNtohQKBby8vFBYWAhPT097N4eIWhlRFPFrfBYWfHsOSrXW5DEJAP0S46zhTJzT8rWUY5O1OdTr1q3DjBkzUFZWhokTJ+Ls2bMoKChAcHAwhg0bhrfeegtyudywvlKpxN///nds3rwZZWVlGD58OD777DOTdarTUt5TanhrjtzEip2JqMlZrSAAS8ZGmFy0vHm7GGuPJuH7uHSoKnS/4lFtPTF/eGcMvscPm06kVpmskohah9oclxhoExHVkCiK2JOQjX/vv4b4W7psyI5SAb5uTshWqMzW7xfGmtatCY9Ntsf3lGpq6fZ4bDqRWqORRg4SAdMGtMPisRFmvesKpRprjiQh9ngKSss1AIB72/ti8diuiAj2NEuCyQupRK1LbY5LHDpORFQNURTxW0I2/r3vGi5l6AJsVycpnh7YHrOHhOPf+66ZneA5SAR0C/HkMG8iokZgaS61NdWV7Xp1bAT+b2hHfHH4Jtb9noSTyXl45LNjiAz2NNTuZgZyIqoOA20iarWs1cHW02pF7LiYibd3JBh6rF2dpHhmUHvMHtIBvm5OAJgsh4jI3oznUlc3R7smZbt83ZzwjzFd8fTAMHy05yq+P5NuCLKNMQM5EVnDQJuIWiVrdbB/eGEQtFoRb/wUj32JOcgvVZs8T+7rgpeGdzIJyJksh4jIvionWrOWdVx/UXXlzsQqa3obX4jtEuSBH18YhDmbzyCjQGnyuryoSkTWMNAmolbJpA723ROtSxkKLP7xAn69mAVlhdbi865kFWPe5jMI8XYx6QVn2S0iIvuqTVWGqkYiWboQGxnsiZ/n3oeHVh1FVuGfwXZbbxdeVCUiixhoE1GLZm14uLU62FvPZlS7zT2JOWZlYlh2i4io+ahqJJKlC7EJmQpsPXsLBxfF4D8HruObU2nIKVIhPb8ME1YdxaN92mLG4HBeYCUiAwbaRNRiVTU83FodbAFATdLp6J/LRDhERM1PVSORLF2I1Q8rd3aUYuHILnj+/g6I+edB3Ckux9WcYry76wq2ncvAtjmDGWwTEQAG2kTUglnrldj4RzI6tHGHi6MEZWrLQ8QrkwiApaoxTIRDRNQ8WRuJVJMEl1tOpSG3pNxknctZRZi14RQ6tnHnFCIiYqBNRC2XpV4JQQQ+2XcdxaoKALostH7uf9bBNj610gfXgZ4yjIgIRI5Cib2Xc2B8/sVEOERELUtNElxam3509Hou/riRCy1gMrWIiFofBtpE1OLo52VfylBAU6kbWgsYgmwA6NjGDf3a++KbU2kmQ8klAtA50AOT+4YaeiWsJchhIhwiopajJgkuq6rbrS8nxqlFRK0bA20iarYsJToDYAiGJah+vvXVnGK0s3DCJAKY3DfU5ASJ2cWJiFqH6hJcVu71tpTzQwJwahFRK8ZAm4iaJWuJzsb3DDHMy9ZUeo6vqyMKy9SG3gZAN8c6wEOGyGDPGvVUM7s4ERFVvvCaUVBmYWoR4O8hs1r9gohaNgbaRNQsWUt0JnOQmGUOFwA81CMYveTeWLEz0WQ7GlFEeBt3vD6+G0+EiIioxowvvBpf/JXgz+Hjh67cxq8XM5GYVWRW/YLHGKKWjYE2ETVLFhOdQRdsm43gE4Becu8qE9ywp5qIiOqqcg+3zEGC2BOpOJ2Sb1jH+KIw524TtXwMtImoWbKUiEYrAkq1FoIAiCIgFXTJz4yDac6xJiKihlC5h/t2cTm2nr1lth7LQhK1Dgy0iahZ0c91S7pdjAB3J2QXmdYxFaALsvUlucL93UyCafZcExFRQzIeRm4Jy0IStQ6S2qy8cuVK9O/fHx4eHggICMDEiRNx5coVk3VmzJgBQRBMbtHR0SbrqFQqzJs3D/7+/nBzc8OECROQnp5e/70hohZHqdZgzZGbWLo9HqsPXsejn/2OFTsTseVUmlmQDfw5NzunSIVwfzfMGtKBPdZERNRojHOIWMKykEStQ616tA8dOoQ5c+agf//+qKiowJIlSzBy5EgkJCTAzc3NsN7o0aOxbt06w30nJyeT7cyfPx8///wztmzZAj8/PyxcuBDjxo1DXFwcpFKeEBORTuXM4sblU4wzirfzccGtgjKzbOIcmkdERI3NUg4RvdHdAvHx4715AZioFahVoL1r1y6T++vWrUNAQADi4uJw//33G5bLZDIEBQVZ3EZhYSHWrl2LjRs3YsSIEQCA2NhYyOVy7N27F6NGjartPhBRC2Ups3hlUgEI8HRGWkGZyXIOzSMiInuwlENE7/fruVCUqRloE7UCtRo6XllhYSEAwNfX12T5wYMHERAQgM6dO2P27NnIyckxPBYXFwe1Wo2RI0caloWEhCAqKgrHjh2z+DoqlQoKhcLkRkQtn75XoCpaAMMjAhAZ7AlBABwkAgSBQ/OIiMg+pkeHWTgmeSCqrSeKVBVY/kuCvZtIRI2gzsnQRFHEggULcN999yEqKsqwfMyYMXjssccQFhaGpKQkvP7663jggQcQFxcHmUyGrKwsODk5wcfHx2R7gYGByMrKsvhaK1euxJtvvlnXphJRM1VVr4CD5M/yXM8ODsezg8OZTZyIiOzOWoWL6znFmPDpUfxyIROP9buNoZ3b2LupRNSA6hxoz507FxcuXMDRo0dNlk+dOtXwd1RUFPr164ewsDDs2LEDjz76qNXtiaIIwUrP1eLFi7FgwQLDfYVCAblcXtemE1EzMT06DP87chPZCpVhWacAN0zqK0dmQZlZQM1s4kRE1BRYqnAR1dYLzw4Ox9qjSXht20Xs+dtQXhAmasHqFGjPmzcPP/30Ew4fPozQ0NAq1w0ODkZYWBiuXbsGAAgKCkJ5eTny8/NNerVzcnIwaNAgi9uQyWSQyWR1aSoRNVNarYgPdl8xBNldgzzwaJ+2eHpge56YEBFRs/RiTEd8ezoNaXllmLf5DFY92YfHNKIWqlZztEVRxNy5c/Hjjz9i//79CA8Pr/Y5ubm5SEtLQ3BwMACgb9++cHR0xJ49ewzrZGZmIj4+3mqgTUStS4VGi799ew5rjyYBABaP6YpfXxqCv9zfkSckRETULCnVGjz95UkUKSsAAHsSczDxP79DqdZU80wiao5qFWjPmTMHsbGx2Lx5Mzw8PJCVlYWsrCyUlemy/RYXF2PRokX4448/kJycjIMHD2L8+PHw9/fHI488AgDw8vLCzJkzsXDhQuzbtw9nz57F9OnT0b17d0MWciJqvbRaES//cAHbz2XAUSrgk8d74fmhHa1OLSEiImoO9JU0jF3OKkLs8RQ7tYiIGlKtho6vXr0aABATE2OyfN26dZgxYwakUikuXryIr776CgUFBQgODsawYcPwzTffwMPDw7D+Rx99BAcHB0yZMgVlZWUYPnw41q9fzxraRK2cKIp4bXs8fjxzC1KJgFVP9MHoKMulAomIiJoTa/W1b+QU26lFRNSQahVoi1ay/+q5uLhg9+7d1W7H2dkZq1atwqpVq2rz8kTUgomiiLd+ScTmE6kQBGBCz2D8ceMO0vNLmUGciIiaPWuVNNILyuzQGiJqaHXOOk5EZEtf/ZGCL3/XzckO9nLGtnMZkAq6El5bz97CDy8MYrBNRETN1vToMGw9ewsJmQpdz7ZWF3SfSc1Hfkk5fNyc7NxCIrKlWs3RJiJqCMeu38HyXxIAAMO7BiCzUAlRBCq0IkQRSMhUcA4bERE1a/r62kvGRmDagHZYMrYrIoI8UKLSYMMfyfZuHhHZGHu0iciuUnNL8eLmM9BoRTzSuy08ZFKzOWxSQUBaXqkdW0lERFR/letrB3q54K9fn0Xs8VS8ENMRMgeO3CJqKdijTUR2U6KqwKyvTqGgVI3ubb3QOdAdCZlF0GhN57BpRBFyX1c7tZKIiKhhjIkKQpCnM+4Uq7DjQqa9m0NENsRAm4js5u0dCbiaXYw2HjKoKjR4f/cVnE3Nhz7MdpAIEAQgMtgT06PD7NpWotZi5cqV6N+/Pzw8PBAQEICJEyfiypUrhsfVajVeeeUVdO/eHW5ubggJCcHTTz+NjIwMk+3ExMRAEAST2+OPP97Yu0PUpDlKJXhqoO74tu735GoTDxNR88FAm4jsYl9iNr4+mQYAGBUZiGs5xRBFQGN0jtFL7o0lYyOYCI2oER06dAhz5szB8ePHsWfPHlRUVGDkyJEoKSkBAJSWluLMmTN4/fXXcebMGfz444+4evUqJkyYYLat2bNnIzMz03D7/PPPG3t3iJq8J+5tBycHCS7eKkRcSr69m0NENsI52kTU6HKLVXjlh4sAgJn3haNCozWbl+0gEdAtxNNkLhsRNbxdu3aZ3F+3bh0CAgIQFxeH+++/H15eXtizZ4/JOqtWrcK9996L1NRUtGvXzrDc1dUVQUFBjdJuoubK180JE3uF4NvT6Vj3ezL6tfe1d5OIyAbYo01EDUqp1mDNkZtYuj0ea47cRH6JCtPWnMCdYhX83Z3w1wfusVhblPOyiZqGwsJCAICvr/WT/8LCQgiCAG9vb5PlmzZtgr+/P7p164ZFixahqKioIZtK1KwYHx+9XBwBALsuZSGDdbWJWgT2aBNRg1GqNZi0+phJzdD3dl2G+u748DvF5Rj58WHEdGmDQA8ZsotUhtrZnJdNZH+iKGLBggW47777EBUVZXEdpVKJf/zjH3jyySfh6elpWD5t2jSEh4cjKCgI8fHxWLx4Mc6fP2/WG25MpVJBpVIZ7isUCtvtDFETUvn4qBFFuDpJUVquQezxFLw8uqu9m0hE9cRAm4gaTOzxFCRkKnQ1se/2WKs1pj3X2QoVvjudDq0IBHrKMCIiEOH+bpgeHcZ52UR2NnfuXFy4cAFHjx61+Lharcbjjz8OrVaLzz77zOSx2bNnG/6OiopCp06d0K9fP5w5cwZ9+vSxuL2VK1fizTfftN0OEDVRlo6PpeUaAMAPZ9KxcGQXSCWCPZtIRPXEoeNE1GDS8kohFao/UdBX88opUiHc3w2zhnRgkE1kZ/PmzcNPP/2EAwcOIDQ01OxxtVqNKVOmICkpCXv27DHpzbakT58+cHR0xLVr16yus3jxYhQWFhpuaWlp9d4PoqbI0vFRKgBOUgmyFSr8fv2OnVpGRLbCQJuIGoyluddVkQoC0vJKG7BFRFQdURQxd+5c/Pjjj9i/fz/Cw8PN1tEH2deuXcPevXvh5+dX7XYvXboEtVqN4OBgq+vIZDJ4enqa3IhaIkvHRy2A7m11n/kfzqTboVVEZEsMtImowUyPDkNksCcEAdBft9ePhLM0Io4J0Ijsb86cOYiNjcXmzZvh4eGBrKwsZGVloaxMl6CpoqICkydPxunTp7Fp0yZoNBrDOuXl5QCAGzduYPny5Th9+jSSk5Oxc+dOPPbYY+jduzcGDx5sz90jahKMj48OEgGCAEQGexrmZu++lIUipdrOrSSi+hBEsRbdTU2EQqGAl5cXCgsLebWbqIlTqjVYuj0e35xOh0QAfnxhEE6n5CPpdjH2Xc4xS4DGmtnUXLWUY5NgZbrHunXrMGPGDCQnJ1vs5QaAAwcOICYmBmlpaZg+fTri4+NRXFwMuVyOhx56CEuXLq0ye3llLeU9JbJEqdYlPkvLK4Xc1xXTo8Mgc5Bg+IeHcPN2Ccb1CIafm5PhMR4bieyvNsclJkMjogblJJXgbFoBAGD2kA7o1c4Hvdr5AABet3CSwRMJIvuq7vp7+/btq11HLpfj0KFDtmwWUYvj7CjFrCEdDPeVag3WHk2Ch0x3ev7LhUw4SHQVO/535CaThRI1Mwy0iahB7biYiavZxfBwdsCLw+4xeazySQYREVFrZFzuC0bXsSruZgvNVqjw9clUiAC2nr3F0V9EzQDnaBNRg9FoRfx7ny7D8Kz7OsDLxdHOLSIiImp6jMt9WRsvohUBUQQSMhWIPZ7SqO0jotpjoE1EDWbHxUxcyymGp7MDnr2vvb2bQ0RE1CTVtBwmwAodRM0FA20iahAmvdlDOsDTmb3ZREREltSmHCYrdBA1Dwy0iahB/HIhA9fv9mbPGNze3s0hIiJqsiqX+wIAJwfdabqbk9SsDNj06DB7NpeIaoDJ0IjI5kpVFXjrlwQAQO92PnCS8poeERGRNc6OUvzwwiCTShxuMgcs/vEiQrxdMLW/nBU6iJoZBtpEZFNKtQajPzmCO8XlAIBDV29j0upjzJBKRERUhcqVOApL1Xh9Wzyu5RTjga4B6NDG3Y6tI6LaYjcTEdlU7PEUpFZK0sIMqURERLXj5eqIgR39AAC/xmfZuTVEVFsMtInIpi6mF5otY4ZUIiKi2hsTFQwA2MVAm6jZYaBNRDaVlm8eUDNDKhERUe2N7BYIiQBcvFXIC9ZEzQwDbSKymYLSciRmFhnuM0MqERFR3fm7y9C/vS8AYPcl9moTNSdMhkZENrPlVBrK1Bp0DfLApD5tkZ5fxgypRERE9TAmKggnkvLwa3yWSbI0ImraGGgTkU0UK9X47MB1AMA9Ae54amB7BtdERET1NDoqGMt+TkBcSj5uF6nQxkNm7yYRUQ1w6DgR1ZtSrcHYfx+BQlkBAPjlQiYmrT4GpVpj55YRERE1b0FezugW4gkAOHz1tp1bQ0Q1xUCbiOpNV9KrzGQZS3oRERHZxgNdAwAAB67k2LklRFRTDLSJqM6Uag3WHLmJLSdTzR5jSS8iIiLbiOmiC7QPX72NCo3Wzq0hoprgHG0iqhOlWoNJq48hIVMBiOaPs6QXERGRbfSSe8Pb1REFpWqcTSswZCInoqaLPdpEVCexx1OQkKmAKJrG2RIBLOlFRERkQ1KJgKGd2wAADlzm8HGi5oCBNhHVSVpeKaSCYLJMANA50ANLxkbghxcGMes4ERGRjQzrop+nzYRoRM0BA20iqhO5rys0YqUx4wIwuW8oZg3pwCCbiIjIhu7v3AaCACRmKrDo23NYc+Qmq3sQNWEMtImoTqZHh6FLoIfJMg4XJyIiahiuTlI4O+guYv949hZW7ExkKU2iJoyBNhHVibOjFDMGtQcAeDg7YMnYrhwuTkRE1EBij6eg7G5QrRUBUWQpTaKmjFnHiajOfo3PAgDMuq8DZt/f0c6tISIiarl0uVEAjdGsLZbSJGq62KNNRHWSW6zC0et3AAATeoXYuTVEREQtmy43iukyltIkaroYaBNRrSjVGqw5chMvbjoDjVZEtxBPhPu72btZRERELdr06DB0C/E0WcbcKERNFwNtIqoxpVqDSauPYcXORJxIygMA3ClWMRELERFRA3N2lOKHFwZhfM9gAECItzNzoxA1YQy0iajGYo+nICFTAeOqXtkKFROxEBERNQJnRyleHRsBAMgqVEKl1tq5RURkDQNtIqoxXSIWwWSZg4SJWIiIiBpLsJcLOrZxg1YE/riZa+/mEJEVDLSJqMZ0iVhMM7EwEQsREVHjuu8efwDA73eTkhJR08NAm4hqbHp0GDq2MU18xkQsREREjWsQA22iJo+BNhHVmLOjFGOidElY2no747WHIpiIhaiFWblyJfr37w8PDw8EBARg4sSJuHLlisk6oihi2bJlCAkJgYuLC2JiYnDp0iWTdVQqFebNmwd/f3+4ublhwoQJSE9Pb8xdIWqxojv4QSIAN++UIKOgzN7NISILGGgTUa3sTcwBALw0ojNmDenAIJuohTl06BDmzJmD48ePY8+ePaioqMDIkSNRUlJiWOf999/Hhx9+iE8//RSnTp1CUFAQHnzwQRQVFRnWmT9/PrZu3YotW7bg6NGjKC4uxrhx46DRsEoBUX15uTiiR6g3APZqEzVVDLSJqMZSckuQmKmAVCLgwYhAezeHiBrArl27MGPGDHTr1g09e/bEunXrkJqairi4OAC63uyPP/4YS5YswaOPPoqoqChs2LABpaWl2Lx5MwCgsLAQa9euxb/+9S+MGDECvXv3RmxsLC5evIi9e/fac/eIWgzO0yZq2hhoE1GN7b6UBQCI7uALHzcnO7eGiBpDYWEhAMDX1xcAkJSUhKysLIwcOdKwjkwmw9ChQ3Hs2DEAQFxcHNRqtck6ISEhiIqKMqxjiUqlgkKhMLkRkWX9w30AALsuZeF/h29AqeZoEaKmhIE2EdXYrnhdoD26W5CdW0JEjUEURSxYsAD33XcfoqKiAABZWbrfgcBA01EtgYGBhseysrLg5OQEHx8fq+tYsnLlSnh5eRlucrnclrtD1GIo1Rq8++vlu39rsWLnZUxafYzBNlETwkCbiKqkVGuw5shN/P27cziTWgAAGMlAm6hVmDt3Li5cuICvv/7a7DFBEEzui6Jotqyy6tZZvHgxCgsLDbe0tLS6NZyohYs9noLLWUUmyxIyFYg9nmKnFhFRZQ72bgARNV1KtQaTVh9DQqYC+lNjF0cpvFwc7douImp48+bNw08//YTDhw8jNDTUsDwoSHehLSsrC8HBwYblOTk5hl7uoKAglJeXIz8/36RXOycnB4MGDbL6mjKZDDKZzNa7QtTipOWVQioIqBBFwzKpICAtr9SOrSIiY7Xq0WbJD6LWJfZ4ChIyFRBFQHv3WF6m1vCKOVELJooi5s6dix9//BH79+9HeHi4yePh4eEICgrCnj17DMvKy8tx6NAhQxDdt29fODo6mqyTmZmJ+Pj4KgNtIqoZua8rNEZBNgBUaEXIfV3t1CIiqqxWgTZLfhC1Lvor5sakAnjFnKgFmzNnDmJjY7F582Z4eHggKysLWVlZKCvT1eoVBAHz58/HO++8g61btyI+Ph4zZsyAq6srnnzySQCAl5cXZs6ciYULF2Lfvn04e/Yspk+fju7du2PEiBH23D2iFmF6dBgigz1NlnVs44bp0WF2ahERVVaroeO7du0yub9u3ToEBAQgLi4O999/v1nJDwDYsGEDAgMDsXnzZjz//POGkh8bN240HGxjY2Mhl8uxd+9ejBo1yka7RkT1ZemKufbuciJqmVavXg0AiImJMVm+bt06zJgxAwDw8ssvo6ysDC+++CLy8/MxYMAA/Pbbb/Dw8DCs/9FHH8HBwQFTpkxBWVkZhg8fjvXr10MqlTbWrhC1WM6OUvzwwiDEHk/Bl0eTkFGoxNT+cjg78vtF1FTUKxlaY5b8IKLGZ+mKeWSwJ6+YE7VgoihavOmDbEDXq71s2TJkZmZCqVTi0KFDhqzkes7Ozli1ahVyc3NRWlqKn3/+mVnEiWzI2VGKWUM6YPpA3TE5LiXfzi0iImN1DrQbs+QH62oS2YezoxSbZg2Ag0Q3fHzWfeH44YVBvGJORETURER38AMAnEjKg1YrVrM2ETWWOgfajVnyg3U1ieznTGo+KrQiQrycseShCAbZRERETUj3tl5wdZKioFSNK9lF1T+BiBpFnQJtfcmPAwcOWC35YcxayQ9r61TGuppE9rMnIQcAMDwisNoLZkRERNS4HKUS9A3TjRQ9cTPXzq0hIr1aBdr2Kvkhk8ng6elpciOihieKIvZfzgYADI8IsHNriIiIyBL98PEtp9KwdHs81hy5CaWa1XyI7KlWWcfnzJmDzZs3Y/v27YaSH4CujIeLi4tJyY9OnTqhU6dOeOedd6yW/PDz84Ovry8WLVrEkh9ETVD8LQWyFSq4OUkxsKOfvZtDREREFvRp5w0AuJxVhGvZRdAC2Hr2FvOqENlRrQJtlvwgal32Jup6s4d0agOZA7+fRERETdGF9ELD35q7+dASMhWIPZ6CWUM62KlVRK1brQJtUaw+k6G+5MeyZcusrqMv+bFq1aravDwRNbJ9HDZORETU5GUUlEEAYHymLhUEpOWV2qtJRK1erQJtImodlGoNPjtwHfG3dKX0BnHYOBERUZMl93VF5e4wjShC7utql/YQUT3KexFRy6RUazBp9TH8e/91w7K/bIxjUhUiIqImanp0GNr7mQbVkcGemB4dZqcWEREDbSIyEXs8BQmZCpNl+nleRERE1PQ4O0rx09z7IJXoynDOHhKO8T1DsHJnIjOQE9kJh44TkYm0vFJIABgfkjnPi4iIqGnzdHFE3zAfnEzKw44LmchUKCEVBGhEkRnIieyAPdpEZELu62rIWKrHeV5ERERN373tfQEAGYVKiCJQoRUhihyZRmQPDLSJyMT06DD4uDoCAAQAgsB5XkRERM1B/3Bfi8s5Mo2o8XHoOBGZkDlI4OIoRT7UeKBrGwzs6I/p0WEcbkZERNTE9Q3zMSvzBXBkGpE9MNAmIhPXcoqRUaiEzEGCT5/sCxcnBthERETNgbvMAZEhnriUoUtq6iDRzdHmyDSixsdAm4hM7L+cAwAY2NGPQTYREVEzE93BD5cyFOjbzhtRbb0g93XlyDQiO2CgTUQmDtwNtId1CbBzS4iIiKi2+rf3xdqjSShSVeDNh6Ps3RyiVovJ0IjIoLBMjdMp+QAYaBMRETVH/dv7AACuZhcjv6Tczq0har0YaBORwdFrd6DRiujYxg3t/Jg0hYiIqLnxc5fhngB3AMCp5Dw7t4ao9WKgTUQG+vnZD3RlbzYREVFzde/dMl8MtInsh4E2EQEASlUV2BWfqfu7XAOlWmPnFhEREVFd3NteF2ifTGKgTWQvDLSJCEq1BuNWHUVJuS643nQiFZNWH2OwTURE1Az1v9ujfSlDgdLyCju3hqh1YqBNRIg9noKbd0pMliVkKhB7PMVOLSIiIqK6auvtgrbeLqjQijibWmDv5hC1Sgy0iQhpeaVmy6SCYHE5ERERNX397mYf5/BxIvtgoE1E8HVzMlumEUXIfZl5nIiIqDnq354J0YjsiYE2ESHYy8Xwt4NEgCAAkcGemB4dZsdWERERUV3pM4+fTS2AWqO1c2uIWh8HezeAiOzv9xt3AACDOvqhU4A75L6umB4dBmdHqZ1bRkRERHVxTxt3eLs6oqBUjUsZCvSSe9u7SUStCgNtolZOoxVx6OptAMDfHuxsGGpGREREzZdEIqBfmA/2JubgVFIeA22iRsah40St3Lm0AhSUquHp7IDePAgTERG1GPqL5yc5T5uo0THQJmrlDl7JAQDc37kNHKT8SSAiImop9PW0TyfnQRRFO7eGqHXhWTVRK3fgbqAd0yXAzi0hoqbi8OHDGD9+PEJCQiAIArZt22byuCAIFm8ffPCBYZ2YmBizxx9//PFG3hOi1i0qxAvOjhLkl6oxf8s5rDlyE0q1xt7NImoVGGgTtWI5RUrE31IAAIZ2bmPn1hBRU1FSUoKePXvi008/tfh4Zmamye3LL7+EIAiYNGmSyXqzZ882We/zzz9vjOYT0V1aUYREEAAAP1/IwIqdiZi0+hiDbaJGwGRoRK3YwSu6JGjd23qhjYfMzq0hoqZizJgxGDNmjNXHg4KCTO5v374dw4YNQ4cOHUyWu7q6mq1LRI0n9ngKSst1QbX27sjxhEwFYo+nYNaQDlU8k4jqiz3aRK3Ygcu6YePDunLYOBHVTXZ2Nnbs2IGZM2eaPbZp0yb4+/ujW7duWLRoEYqKiqrclkqlgkKhMLkRUd2l5ZVCIpgukwoC0vJK7dMgolaEPdpErVR5hRZHrunqZz/AQJuI6mjDhg3w8PDAo48+arJ82rRpCA8PR1BQEOLj47F48WKcP38ee/bssbqtlStX4s0332zoJhO1GnJfV0NPtp5GFCH3dbVPg4haEQbaRK3U6eQ8FKsq4O/uhB5tvezdHCJqpr788ktMmzYNzs7OJstnz55t+DsqKgqdOnVCv379cObMGfTp08fithYvXowFCxYY7isUCsjl8oZpOFErMD06DFvP3sKljD9Hh0QGe2J6dJgdW0XUOnDoOFEro1RrsObITby9IxEAcF8nf0gqjysjIqqBI0eO4MqVK5g1a1a16/bp0weOjo64du2a1XVkMhk8PT1NbkRUd86OUvzwwiAMuFvmq087b/zwwiA4O0rt3DKilo892kStiFKtwaTVx5CQqYC+nObp5Hwo1RoedImo1tauXYu+ffuiZ8+e1a576dIlqNVqBAcHN0LLiEjP2VGKmfeF40RSHhTKCh7viRoJe7SJWpHY4ykmQTYApOeXYfqaE6ytSUQGxcXFOHfuHM6dOwcASEpKwrlz55CammpYR6FQ4LvvvrPYm33jxg0sX74cp0+fRnJyMnbu3InHHnsMvXv3xuDBgxtrN4jorv7tdT3a13OKcadYZefWELUODLSJWpG0vFJIBfNh4mdS81lbk4gMTp8+jd69e6N3794AgAULFqB379544403DOts2bIFoijiiSeeMHu+k5MT9u3bh1GjRqFLly7461//ipEjR2Lv3r2QStmbRtTYfNyc0DnQHYAuRwsRNTwOHSdqReS+rtCIotly1tYkImMxMTEQLfxWGPvLX/6Cv/zlLxYfk8vlOHToUEM0jYjq6N5wX1zNLsbJpHyMjuIUDqKGxh5tolZkenQYugZ6WH2ctTWJiIhapnvD/QAAJ5Nz7dwSotaBgTZRK+LsKMW8BzoBAJyk5l9/1tYkIiJqme69O087IUMBhVJt59YQtXwMtIlamSPX7wAAJvcLRbcQTwgC4CARIAisrUlERNRSBXk5I8zPFVoRiEvJt3dziFo8ztEmakW0WhH7ErMBAKO7BeGNcZGIPZ6CtLxSyH1dMT06jGU/iIiIWqh72/siJbcUp5LyMKxLgL2bQ9SiMdAmakUu3ipETpEK7jIHDOjgC5mDlInPiIiIWon+4b74Li4dJ5OYeZyooXHoOFErsidB15s9tHMbyBzYc01ERNSaDAjXzdM+n17Acp5EDYyBNlErsvfusPERkRwuRkRE1NoEeMjgIXOAWiPi7V8SGGwTNSAG2kStRFpeKS5nFUEqETgvi4iIqJVRqjWY/N8/UKSqAADEnkjFpNXHGGwTNRAG2kSthL43u1+YD7xdnezcGiIiImpMscdTkJCpMFmWkKlA7PEUO7WIqGVjMjSiVkIfaD8YGWjnlhAREVFjS8srhVQQUCGKfy4Uge/j0gGAlUeIbIw92kStQGGZGidu6jKMDo9goE1ERNTayH1doTEOsgGIAK5mF2HFzkQOIyeyMQbaRK3Aoau3UaEVcU+AO8L93ezdHCIiImpk06PDEBnsCUEwXa4VAVHkMHIiW+PQcaIWSKnWIPZ4CtLySiH3dcWZ1HwAwAj2ZhMREbVKzo5S/PDCIMQeT8GaIzeRpVCZPC4VBKTlldqpdUQtDwNtohZGqdZg0upjSMhU6OZiaUVI7l695vxsIiKi1svZUYpZQzogr6Qcnx28YfKYRhQh93W1U8uIWh4OHSdqYfRZRUURqNDq5mJpRcBRKuBMSh7nXxEREbVy8x64B45S3VV4iQAIAhAZ7Inp0WF2bhlRy8FAm6iF0WcVrUytEfHOr5eZ7ISIiKiVc3FywNioYABAtxBPLBkbgR9eGMSs40Q2xECbqIWxlFVUj8lOiIiICAAG3+MPAHBy0A0nZ5BNZFsMtIlaGGtZRfWY7ISIiIgGdvQDAJxPK0BpeYWdW0PU8jDQJmph9FlFl4yNgL+7k9njTHZCREREoT4uaOvtggqtiNPJ+fZuDlGLU+tA+/Dhwxg/fjxCQkIgCAK2bdtm8viMGTMgCILJLTo62mQdlUqFefPmwd/fH25ubpgwYQLS09PrtSNE9CdnRylmDGoPjfbPIeQOEoHJToiIiAgAdOfoHXS92r/fuGPn1hC1PLUOtEtKStCzZ098+umnVtcZPXo0MjMzDbedO3eaPD5//nxs3boVW7ZswdGjR1FcXIxx48ZBo2GCJiJbOZmch/xSNbxcHLF4TFdMG9COyU6IiIjIYEgn3Tzto9cYaBPZWq3raI8ZMwZjxoypch2ZTIagoCCLjxUWFmLt2rXYuHEjRowYAQCIjY2FXC7H3r17MWrUqNo2iYgs+PViFgBgVLdAPD+0o51bQ0RERE2NPiHapQwFcotV8HOX2blFRC1Hg8zRPnjwIAICAtC5c2fMnj0bOTk5hsfi4uKgVqsxcuRIw7KQkBBERUXh2LFjFrenUqmgUChMbkRknUYrYtclXaA95m75DiIiIiJjbTxkiAj2BAAcvc5ebSJbsnmgPWbMGGzatAn79+/Hv/71L5w6dQoPPPAAVCoVACArKwtOTk7w8fExeV5gYCCysrIsbnPlypXw8vIy3ORyua2bTdSi/HEjF7eLVPB2dTRcrSYiIiKqjMPHiRqGzQPtqVOn4qGHHkJUVBTGjx+PX3/9FVevXsWOHTuqfJ4oihCs1CNavHgxCgsLDbe0tDRbN5uoRdl69hYA4KHuwXByYHEBIiIisuy+uxfkj16/A1EUq1mbiGqq1nO0ays4OBhhYWG4du0aACAoKAjl5eXIz8836dXOycnBoEGDLG5DJpNBJuOcEaKaKCvXYPfdYeMTe7e1c2uIiIioKbs33BdODhJkFirx3q+XUabWQO7riunRYUyeSlQPDd7VlZubi7S0NAQH6+aJ9u3bF46OjtizZ49hnczMTMTHx1sNtImo5vYmZqNYVYFQHxf0bedT/ROIiIio1XJ2lKJfmO584b+Hb2LTiVSs2JmISauPQalmRSCiuqp1j3ZxcTGuX79uuJ+UlIRz587B19cXvr6+WLZsGSZNmoTg4GAkJyfj1Vdfhb+/Px555BEAgJeXF2bOnImFCxfCz88Pvr6+WLRoEbp3727IQk5Edbf9nG7Y+MO9QiCRWJ6OQURERKRn3HNdodUNH0/IVCD2eApmDelgr2YRNWu1DrRPnz6NYcOGGe4vWLAAAPDMM89g9erVuHjxIr766isUFBQgODgYw4YNwzfffAMPDw/Dcz766CM4ODhgypQpKCsrw/Dhw7F+/XpIpRyeQlQfeSXlOHjlNgBgYi8OGyciIqLquTqZn4NLBQFpeaV2aA1Ry1DrQDsmJqbKRAm7d++udhvOzs5YtWoVVq1aVduXJ6Iq7LiQgQqtiG4hnugU6FH9E4iIiKjV6xnqhV8uZJosq9CKuJShwJojNzlfm6gOmI6YqIVQqjX4/PBNAECwlzPnVRFRnR0+fBjjx49HSEgIBEHAtm3bTB6fMWMGBEEwuUVHR5uso1KpMG/ePPj7+8PNzQ0TJkxAenp6I+4FEdXUUwPbw8tF1/9mPOnsXFoB52sT1REDbaIWQKnWYNyqo0jPLwMA7E3M4UGRiOqspKQEPXv2xKeffmp1ndGjRyMzM9Nw27lzp8nj8+fPx9atW7FlyxYcPXoUxcXFGDduHDQa/i4RNTXOjlL8Y0wEAMDFSWoItiu0IkTxz/naRFRzDV7ei4gaXuzxFFzPKTZZxiQmRFRXY8aMwZgxY6pcRyaTISgoyOJjhYWFWLt2LTZu3GhIdBobGwu5XI69e/di1KhRNm8zEdXPg5GBeHXrRZSWayAVAI3RTFHO1yaqPfZoE7UAyXdKzJbxoEhEDengwYMICAhA586dMXv2bOTk5Bgei4uLg1qtxsiRIw3LQkJCEBUVhWPHjlndpkqlgkKhMLkRUePwd5ehl9wbgGmQrbsvQu7r2viNImrGGGgTtQAl5RVmy3hQJKKGMmbMGGzatAn79+/Hv/71L5w6dQoPPPAAVCoVACArKwtOTk7w8fExeV5gYCCysrKsbnflypXw8vIy3ORyeYPuBxGZGhERCABwlzlAEAAHiQBBACKDPTE9OszOrSNqXjh0nKgFuFWgNPztIBGgEUUeFImowUydOtXwd1RUFPr164ewsDDs2LEDjz76qNXniaIIQRCsPr548WJD2VAAUCgUDLaJGtEDXQPwwe4rUGu0eHlUF2QVKiH3dWXWcaI6YKBN1MzduF2Mk0l5kAjAnGH3QFGm5kGRiBpVcHAwwsLCcO3aNQBAUFAQysvLkZ+fb9KrnZOTg0GDBlndjkwmg0wma/D2EpFlXYM80NbbBbcKytA50AMvxNxj7yYRNVscOk7UzH19IhUAENMlAAtHdsGbD0dh1pAODLKJqNHk5uYiLS0NwcHBAIC+ffvC0dERe/bsMayTmZmJ+Pj4KgNtIrIvQRDwQNcAAMC+yznVrE1EVWGgTdSMKdUafH9GV5f2yXvb2bk1RNRSFBcX49y5czh37hwAICkpCefOnUNqaiqKi4uxaNEi/PHHH0hOTsbBgwcxfvx4+Pv745FHHgEAeHl5YebMmVi4cCH27duHs2fPYvr06ejevbshCzkRNU3DI3SB9v7EHIiiWM3aRGQNh44TNWO/XMhEQakawV7OiOnSxt7NIaIW4vTp0xg2bJjhvn7e9DPPPIPVq1fj4sWL+Oqrr1BQUIDg4GAMGzYM33zzDTw8PAzP+eijj+Dg4IApU6agrKwMw4cPx/r16yGVcrQNUVMW3cEPrk5SZCmUuJShQFRbL3s3iahZYqBN1ExptSI+P3QDABDs5Yz1x5I5L5uIbCImJqbKnqzdu3dXuw1nZ2esWrUKq1atsmXTiKiBOTtKcd89/vgtIRv7EnMYaBPVEYeOEzVTuxOycC2nGABwPq0AK3YmYtLqY1CqNXZuGRERETVn+uHjexOz7dwSouaLgTZRM/XOjkTD3xoREEUgIVOB2OMpdmwVERERNXfDIwIhEYCLtwqRklti7+YQNUsMtImaobiUPKTll5ktlwoC0vJK7dAiIiIiain83WUY1NEfgC4fDBHVHgNtomZo9cGbFpdrRBFyX9dGbg0RERG1NON66Mr17WCgTVQnDLSJmplr2UXYm5gNQQDuCXCDIAAOEgGCAEQGe2J6dJi9m0hERETN3OioIDhIBCRkKnDzdrG9m0PU7DDrOFEzolRr8NKWcwCAzgEe+Ob5aHwfl460vFLIfV2ZdZyIiIhswtvVCfd18sfBK7fxy4VM/HV4J3s3iahZYaBN1Ewo1RqM+eQIku7okpJcyS7CtDUn8MMLgxhcExERkc2N6xGCg1duY+MfKcgtVvGiPlEtcOg4UTOx8Y9kQ5CtxyzjRERE1FCGdvaHAOB2sQqxx1NYSpSoFhhoEzUTx27kmi1jlnEiIiJqKNvPZUC8+zdLiRLVDgNtomZArdHiQnqh2XJmGSciIqKGkpZXColguowX+YlqhoE2UROnVGvw16/PIrekHMLdgx2zjBMREVFDk/u6QiuaLuNFfqKaYTI0oiZMqdZgwqdHcTVbV1ZDFIFATxlGRAQi3N+NCUmIiIiowUyPDsPWs7dwKUNhWMaL/EQ1wx5toiZs4x/JhiBbL6dIhXB/N8wa0oFBNhERETUYZ0cpfnhhEGYM0gXWDhIB62b05/lHK6JUa7DmyE0s3R6PNUduMhFeLbBHm6gJO3T1ttkyzo0iIiKixuLsKMXS8d1w7EYurmYXY/elLDw1sL29m0WNQKnWYNLqY0jIVEAqCNCIIraevcXSsjXEHm2iJqLyFcOU3BKcTs43W49zo4iIiKgxCYKAJ+5tBwDYdCIVoihW8wxqCWKPpyAhUwFRBCq0IrPO1xJ7tImagMpXDCu0Ij7eew3KCi2cHSVQqrVwkOiuJHJuFBERETW2R3q3xbu/XsblrCKcTy9EL7m3vZtEDSwtr1R3Xmp0YYUjK2uOgTZRE2ByxfDuj1mxqgJSiYDvnh+IE0l5SMsrhdzXlQnQiIiIqNF5uzphbPdgbD17C1+fSGWg3QrIfV2hqTR6oUIr4lKGAmuO3OQ5aTUYaBM1AZauGALAwA6+6B7qje6h3vZpGBEREdFdT9zbDlvP3sLPFzLw2rgIeDg7Gh5TqjWIPZ7CjoEWRJ91PiFTAQkAzd3T1HNpBYhLzed87Wow0CZqAixdMQSAmC4BdmgNERERkbn+7X1wT4A7rucUY/OJVDw/tCMAJs1qqfRZ52OPp2BXfBbiUvIhQterDfw5X3vWkA512n5LvzjDZGhEdqRPgJZ0uxh+ro4mj0UGe3AuNhERETUZgiDgL/frgqr/HUkylHpi0qyWy9lRillDOqBbiCekEsHksfrM19ZfnFmxMxGbTqRixc5ETFp9rEWVD2OgTWQnxj8wW06l4U6JGgDg5eKIv4/sjB9fHNyiruoRERFR8/dI77Zo6+2CO8UqfHc6DcCfU+CMCQC+j0tn7eUWwtLoy/pUwmkNF2cYaBM1sMpluyxd/dUY/W49N7g9Zg7pgNjjKWbPISIiIrInR6kEzw/V9Wr/99BNqDVai0GYVgSuZhe1yJ7K1mh6dBgigz0hCICDRIAgoF6VcCxdnGlpGc05R5vsqiXNzbC0LwDMynb978hNjIgIxJWsIggAjA9LUgHIUSg5z4mIiIiarCn95Pj3vuu4VVCGbWdvmSTNEqALsmH0//rO5SX7M56vbYvzdlv3kDdFDLTJblpS4gxr+zK+Z4hZ2a5shQqbT6TCPPUZoAWQU6Qyew4PUERERGRvxp0KPUK9sP9yDlYfvIFH+4QagrDv49JxNbvIEGQDLa+nsrXSz9e2BeOLM/pz5/r0kFtjz049BtpkN5ZqRzfXgNLavrg4Si2W7aocZEsFXZAdGeyJAE9ns+fwAEVERET2VLlToUIrQioAN++U4JcLGXi4V1vD+duKnYkmz21pPZX20txHglZu/6ZZA/B9XHqD7U9ZeQUe+ewYLmcVQSLoRlg0ZqceA22yG0u1o5trQGlpXwQAqXml0Ggt9V3rSAD0CfNBtxBPww9M7PGUFj+UhoiIiJoXS50K+hwzK3dexoiIQLjJHBqtp7K1ae4jQW3RfksXGjRaEWn5pUjPK0NafinS8sqQnl+KtPwy3LxdDFWFFoB9pjEw0Ca7scXcjPpe2bPV8y9lKMwCaq0I3C5SWRwiricKwOioIJMvOw9QRERE1NRY7iABXJwckKVQYtX+6/jHmK42n8tLOs19JGhd269Ua5CeX4akO8V4Y/slZBYqDTmOVv56ucoOLUsas1OPgTbZTX0DyrpcGTMOrIO8nPHz+QwkZhWZJSoL93er9qBg/PoS/DkcXD80BTAfIu4g0b2Og8T6/vIARURERE2NxcziAMZ2D8K3p9Ox9uhNPNYvFB3buNt0Lm9rZKkjqLmPBLXW/pQ7JUjJLUF6fhnS8kp1vdN3/07PL0NOkcpsW/ot6INsb1dHhHi7QKsVIREEtPN1wSN9QnEmJR+fH75p8tzGHCXKQJvspr4BZW2vjFmaW6RnnKjs65O6RGX6oF3/WvrgXBAEZBaUIaOg7M/yXEavI3OQosxCCYv7O/njv9P7YvPJ1Gr3lwcoIiIiakqsdZAsfzgKd4rLsf9yDpb9dAlfPXcvhEplm6jmqkqw21hTC205F1yjFZGtUEJ7t162sQqtiNgTqdh4IrXKbbg5SeHkIEFBqdqsWs+UfnIsndANk1Yfw5VsXedZYpYCafll2DRrAI5ev2O3UaIMtMmixkq2UNuA0rhdlzIUtbqyZykwt8R4Dse635Pwy4VMQ6+1fi6SvmfaEktBtiAA93duA1eZAwNoIiIianaq6iBZOj4SR6/fwZFrd/BrfBbGdg+udnvNPbFXVeqzb5bOVy9lKCCTShDoIUN2kapWQWPl0Zz6DqPK7dKvl3S7GPsu55i8TlUjRkVRxO1ilWFudHr+3TnSd+dMZxSUQa2xft4tApA5SBDq44JQH1fIfV0g93E1+dvb1RFrjybpkuwZbUoLoGOAu9X3bNaG0xjXIxjje4ZY3OeGxkCbzDTVZAtV9UjrVXVlz9KQlapIBQF7E7JxKUOh27bRY9aCbACICvGEQqlGal5ZlUPEiYiaqsOHD+ODDz5AXFwcMjMzsXXrVkycOBEAoFar8dprr2Hnzp24efMmvLy8MGLECLz77rsICQkxbCMmJgaHDh0y2e7UqVOxZcuWxtwVIrIhax0kYX5u+L/7O+Df+69j8Y8X0b2tV5U9rY15rtnYAX19983a+eq59AJoRSDQU1bnaY7GHUbG7QJgWM+4Drpx0PrB7svoG+ZrGNKtSzym+1ufcMwaB4mAEG8XtPV2QZlaAwFAmJ8rpvaXo2Mbd/i7y1Cu0Rr+nbSiLsHZyaRcw79ZVVNOV+5MtPienUnNR1xqPiKDPe0SxzDQJjMNmWzB1lf4AF12b2kNAlpLc4uMt1H5kQqtiLNpBTVqm35edmSwB76vNNy8pV2lJaKWr6SkBD179sSzzz6LSZMmmTxWWlqKM2fO4PXXX0fPnj2Rn5+P+fPnY8KECTh9+rTJurNnz8by5csN911cXBql/UTU8Cqf080a0gGHrt3B+bQCzNl8Bt/930DIHCyf+zRWYi97dB7Vd9+sna/qg9+cIhXC/d1qtC3jtljqMNK3S1WhMXQsWetKWns0GWuPJlt8TCLozsXVGtFwTt3W2xkrH+2BUB8X7E3Mxq186z3KNb0gUHlExeS+oVaTEhu/Z/ZKGsdAuxWobXBb12QL1oam6P9Oyy2p1VCUmrUL6N1OVx5L/zordyYi1McFY7oHo6BUjZwiJbIVKhSUquHt4oj8UrXZtq39qNQkkeGDEQEI8XYxe285RJyImqsxY8ZgzJgxFh/z8vLCnj17TJatWrUK9957L1JTU9GuXTvDcldXVwQFBTVoW4mo8VkLYP/9RG9MWn0MF9ILsfznBKx4pLvF5zdWYi97ZOqu774Z99xCND9Hrc22qhvNKYrAB7uvVNsjDQDuMik6B3qYDOmW+7oi1McFu+Kz8O6uy7pt3l0/o1CJSxmFeG/X5WovdNT0gsCsIR0M/27WkhJb6jyzV9I4BtrNQH16getyJa8uZbesXYmSCn/+bZyNu65X+CoP2daIgKtMClWFFp8dvIEiZYXhsRU7L1e7TQBwcpAg2MsZgZ7OKCvXABDR1tsFXq5OKFOpcSIpDznF5RavsEUGe2LVk33YW01ErVphYSEEQYC3t7fJ8k2bNiE2NhaBgYEYM2YMli5dCg8PD6vbUalUUKn+zDCrUCgaqslEVA/WAtgDl3Pw8dReeHb9KWw6kYq+YT54tE+o2fNtUeK1JuyRqbu++2Y8F35XfBbiUvJNAkf9tozjgxBvF8R0aYPbReVIyy9F0p0SHL1+Byl3Sqqc7gigyiBbH7RGBHtg64uDrZ7vZhSUWXyf9yXm1OhCR3UXBCz9m1kLztv6uOBWfpnF96yxMdBu4uo75KUuV/LqUnbL2ofdOPeBpe+5/otTodHiTnE5coqUyFGokH33/zlFKty+2yOdrVBafO3DV+9YbZebTIpwfzcEejgjwFOGQE/nuzcZgjxdEOTlDB9XR5PsmPr3fHdCtmEuuH4+TKiPi9UkEkRErZFSqcQ//vEPPPnkk/D09DQsnzZtGsLDwxEUFIT4+HgsXrwY58+fN+sNN7Zy5Uq8+eabjdFsIqqHqgLYWUM6YN6we/Dv/dfx8vcXIHOQ4qEepsnR6lvitaaqCnobau52VftW09fUz4WfHh2GSauP3U0ArDuvDvZyRk6RCgPe2YfCsj9Haa78tWYdTMCfAbTc1wWfPtEHbb1d8My6kyZ5kGoyF1y/P5aGbuvf95pc6Khqeqd+W5UDZUufQQeJgKGd/HEuvdBumcaNMdC2s+oyAdZ3yEtdruTVpexWbRON6VVoRXx/Jh1fHU9BTZ8q3G2jl4sDugR5IsjTGYmZCsRnFJoE8wIAuY8rHuoebHhf3WUOeKR32yr3xdJ7Xpv5MERErYVarcbjjz8OrVaLzz77zOSx2bNnG/6OiopCp06d0K9fP5w5cwZ9+vSxuL3FixdjwYIFhvsKhQJyubxhGk9EdVZdr+1LIzojNa8U285lYN7XZ1Ch7YWHe7U1rFvfEq81ZS3ondw3tMHmblvbNwBWX9NJKsGdYtXdBGOmWbsLy9SQGI0QzShQ4otKtaH1/N2d4O3iiOu3S8we69vOGyMiA612GNX238Pa0G3jUZ8jIgMRl5pv8jxLQbPxv5O1EaSVA2Vrn8HwNu54fXy3JpEriYG2HdVk4n8vubdZACsA+D4uHQAspuU3/lDVdfiKcVZJS9sVBJj0OGcplNUOTbGmRGVeDst4X0UA3i4OiO7ojy6B7pg9pAPcnR1N1ltz5CYuZhSaLBMBXMkqwnu7rgAwT6hg7Qtnj2FGRETNjVqtxpQpU5CUlIT9+/eb9GZb0qdPHzg6OuLatWtWA22ZTAaZTNYQzSUiG6quR1oqEfCvKb3gIJXg+7h0vLTlHL45lYYHugYYzl1rWuK1Pj3P1oLehp67XXnfRFHEqv3XDAnHjLN5D353P4pUFSivZp60o1RAW29dCaxshRI3bhebdDBJALT3c0OxqsJkuiagOweOauuFF2LuqXGbq2NtNGsvuTdGRwUZPgs/n8+otne58r9TVWXI9Kr6DNZ2XxoKA+0aaKihJTWZ+B/i5WwWKGtF4Gp2EVbsTLSYlt/4KtmmWQNMPoQVWhEBHjIk3SnBmiM3MblvKL6PSzfJ3qcoq9AN4S5SIT2/FF8cvok7xeWGoHfFzsQa9z5b4uIoQadAD8h9XDGhVwjaertgb0I2Pt53zWxd/csUlFXgt0tZ2H0J2JuYYxYoG3/ZjMsSGDfTUkIFSxpr3hARUXOlD7KvXbuGAwcOwM/Pr9rnXLp0CWq1GsHB1dfXJaKmrSY90lKJgOUTumFfYjbyS9U4diMXx27k4vu4dGybY32+r7G6TqGs7ty9ITpVFEo10vL+7JGuXE+6tNxyx1JuSbnF5W08ZFj4YGd0aOOOUB8XBHo6QyrRTXVcc+Smrqa0ES2AuJR8CIL5dE1L57H1jW+sDd3uFuJpuJiRllda4zrWtQ2OG2tURH0w0LairkXba6MmE/8DPGSIDPY0CyArp6vX/135ytz3cen44YVB+PJoEi5nFuLo9VxkK1T4+mQqtCLwzs5Eky/j2ztMv7TG9KtZaq4+CHeTSXW1E31c4e7sgBJVBdr7uUIikVT5BfvudBocJJZrY+tVlaLf+Mv2fVw6rmYXWc0YXt0PaWPNGyIiaqqKi4tx/fp1w/2kpCScO3cOvr6+CAkJweTJk3HmzBn88ssv0Gg0yMrKAgD4+vrCyckJN27cwKZNmzB27Fj4+/sjISEBCxcuRO/evTF48GB77RYR2VBNAqPNJ1PNqr1czirCOzsTsfzhqGpfoy49z1UF5/ptWptTrA9GLQWhWlHU1Y/W15GuVE9aYZSQtzYsZckGgDvFKhSrKnBvuK/ZY5XPVfXnzyJMz9Mlgm5Z5fNYW5Q9s9YxFeTlbLbthqpj3VR6rq1hoG2B8YfPUtF2Ww0tqW7if4VWxJXsYsOVoG1nb5kFkBIA8bcKUVauMf+iisC/913DJ3uvoUhl+uWvHLAbEwTAy8URHfzdkFtcjtS8Uqvlr4xeCgBQWq7BiIjAWr831b0XxqwFysZftspX+YxV1zvdHK6QERE1pNOnT2PYsGGG+/p508888wyWLVuGn376CQDQq1cvk+cdOHAAMTExcHJywr59+/DJJ5+guLgYcrkcDz30EJYuXQqplL+lRK1FWl6pxY6Ur/5IwR83cvHWxChEd7A+IqYuPc/WgvN1vyfhlwuZVucUdw3ywKCOftiTkIU3tl9CZqHScG698tfLFus0V8XP3Qnzht2D8Ls90v5uTnhyzYkqR18aq2o/K5+rXspQ4Fxagcn7LBGAzoEemNw31Ow81hZD5611TAmCYNNh+Q01srgxMNC2wPjDZ+nDb+2Db+2DYG25tYn/EuiGfwDAmdR8nE7JR6CnDHJfVwtDQYBt5zIs7ocImFxdq67H2PiJhWVqqCq0eGJAO7y367L1X4FK6jrsxup7UcPhLzXZVlUJFSpr6lfIiIgaUkxMDMQqLn5W9RgAyOVyHDp0yNbNIqJmpqqOlGs5xXj8i+Po315XAuyBrgEI9HSu9vnVZQ23FpzvvpRtmCNtPIhb5iCBIACJmUUY+++jJq+l34I+yPZ0djCpIx3qo5szfTI5F18cTjJ5bl5JOSq0IoZ2bmNYVtPRl8b7aY3xueqaIzfNko6JACb3DbV4PmuLofPWOqZW7ky02bB8W/S821OtA+3Dhw/jgw8+QFxcHDIzM7F161ZMnDjR8LgoinjzzTfxxRdfID8/HwMGDMB//vMfdOvWzbCOSqXCokWL8PXXX6OsrAzDhw/HZ599htBQ8zp7Dc3Sl7S6Id3W5jlYmyM97e7VK33Q9/XJVLw6NgL5pWqM6hYEVycpchQqVGhFlKgqoFCqDd9s/RdQV95KBUvcZFK0cZchp0iFUqOe7VBvF6x4NAqhPq4I9HTGlpOpNZpfLd79T0KmAuN6BFscum5NXecyW0uCkJZbYjZ0v7pAuS4JFYiIiIjItqzl0DF2Kjkfp5J1QWL3tl7oJfdG50B3dAr0QEyXNvg+Lh2Xs4pMOkwm9w3Fo5/9joTMIkPZq6/+SEbvdj44k5Jv1rFUoRVxLq3AYhtLjOZOuzlJ4eQgQUGp2qSPSSoAj/ULxbuTelrcxpFrt806tCwFl9WNvhSgm9te22mLtZ32aKt8RJY6pmyZ66ihk9Y1tFoH2iUlJejZsyeeffZZTJo0yezx999/Hx9++CHWr1+Pzp074+2338aDDz6IK1euwMPDAwAwf/58/Pzzz9iyZQv8/PywcOFCjBs3DnFxcY06pMxacDy+Z4jFq2/W5jlotSI+P3TDYibBgSv3oUyt65/Wf41v3C7BzA2na9VWAUBkiCcm9AzB5awilJZXoGMbdzwVHYYdFzPNAkr93/sTcwzBpaX5HM6OEl2hegu991JBQFah0hC0Vp6vbvx8W8xlttaL/HodhoywR5qIiIjIvqrLoSMVgO6hXgAEnE8vwMVbhbh4q9BsO8Ld/ztKJEi6U4J+b+81BLX6kYupeWVIzSurdRsn92mLGYPDEerjAi8XR6w9mqQLgo3aqQVwT4CHyfOMO+syCspqFVxaCoy7Bnng4V5t69QxVNtpjw2Zj8iW227ulYAEsbrxX1U9WRBMerRFUURISAjmz5+PV155BYCu9zowMBDvvfcenn/+eRQWFqJNmzbYuHEjpk6dCgDIyMiAXC7Hzp07MWrUqGpfV6FQwMvLC4WFhdWWE6mKPmOf8TsgCMDLo7rglwuZJsXhve/WbHZ2lCDE2wV3ist1pa0UStwuVkGtqd3b6O3iiO6hXmjjIUOAhzMCPXX/D/CU4eCVHPznwA2T9QUBWDI2wiR4tHShIDLY06QXvXISAgAmX0J91vFd8VmIS8k3Cbatvaal5zfHeRNERLZkq2MT/YnvKVHLYe28W3+uebtIhd+v38HlrCJczS7CtZwi3CkqR5naehnY6rT3c8Xge/wxPToMgZ4yPLX2ZLVJuiqfX1doRQR6yjAiIhDh/m4Wa2Jb63yqaoizveceN+Tr22rb1X1m7KE2xyWbBto3b95Ex44dcebMGfTu3duw3sMPPwxvb29s2LAB+/fvx/Dhw5GXlwcfHx/DOj179sTEiRPx5ptvVvu6tjrwLt0ej9jjKTCOkQUAvm5OcJAKyClS1auMVVX6hfkYasxV/uBZC6Arf1mtffhGdA3A3ss5tfpQ1vQ1iYjIMgaFtsf3lKjlqOu5plKtQWGZGooyNV7cdAbXcoqtZuo25iARMG1AO7xplN28pgFgVdWHIoM9Mb5nCN7bddksTngwIgAh3i41ytVE1WuK8Ultjks2TYamL+8RGBhosjwwMBApKSmGdZycnEyCbP06+udXplKpoFL9OT9ZoVDYpL26OQSmy0SY1rMTBMDPTXa3x/nPXucADxkCPJ0N//eQOeCJ/x1HQqbC4jBswDR9/7m0AsSl5luc0F/T4R9Wh1Pkl9V6mAUzbRMRERFRQ6nruaazoxTOjlL8fD4D128XAzA9z7aUOBewPHS7plML9eutOXIT2afSTOYIX8pQ4HaRyizYd5AICPF2MQvsm3MyL3tr7vFJg2QdFwTB5L4oimbLKqtqnZUrV9aop7u2pkeHYcOxZKTllxm+LMFeznh9XKShMLyfmxMcpJIabU//QbA0DBsA2vq44FZ+GUTAMK/E2oT+mvwQWE024OOCK9lF5surSULAec1ERERE1FBqeq5Z02TF+hJWD/cKwc/nM5CYVWTTOcfWEiTfLlKZnedbOtdu7sm8moLmHJ/YNNAOCgoCoOu1Dg4ONizPyckx9HIHBQWhvLwc+fn5Jr3aOTk5GDRokMXtLl682FDDE9D1aMvl8nq319lRij0LhtrsKon+gzA9OsziMIdecm98cyqt2oyENWUt2cAHj/W0OEfbFgkOiIiIiIhsrarh2taSFRuXsHp2cLjNez6tlSer3KNuKVky0PyTeVH92DTQDg8PR1BQEPbs2WOYo11eXo5Dhw7hvffeAwD07dsXjo6O2LNnD6ZMmQIAyMzMRHx8PN5//32L25XJZJDJZLZsqoHxVZK6zKGw9hxLwxx088Ftk+5e33Zrwyma8zALIiIiImo9jIdYG5cBM+4FNi45a6kjqSF6Po07tSxNDdX3qE/uG2rxXNuWpa6o+al1oF1cXIzr168b7iclJeHcuXPw9fVFu3btMH/+fLzzzjvo1KkTOnXqhHfeeQeurq548sknAQBeXl6YOXMmFi5cCD8/P/j6+mLRokXo3r07RowYYbs9q6W6zKGo7jmVv+wNkUrf2o9Kcx5mQURERESth/EQa0t5jiqXnG2sjiTjzitLU0ONe9QtacgyWtT01TrQPn36NIYNG2a4rx/S/cwzz2D9+vV4+eWXUVZWhhdffBH5+fkYMGAAfvvtN0MNbQD46KOP4ODggClTpqCsrAzDhw/H+vXrG7WGdmV1mUNR2+ewp5mIiIiIyJS1udB6+l5ge3QkVTc1tKqgmef+rVutA+2YmBhUVRFMEAQsW7YMy5Yts7qOs7MzVq1ahVWrVtX25RtMTedQGA8V19XZrn12b/Y0ExERERHpWJsLXdX8Z1urbgppfbKm89y/dWqQrOPNUU3mUFgqYF8Z510QEREREdVc5SHWFVoRgZ4yjIgIRLi/W4P3Atd0CimDZqoNBtp31WQOhaWh4oCuPrZUwnkXRERERES1Ze8h1izDRQ2BgfZdNfmCWx5eDvRu54NuIZ6cd0FEREREVAf27C1mGS5qCAy0jVT3Bbc0vFwLYHRUEK92ERERERE1QyzDRQ1BYu8GNCfTo8MQGewJQQAcJAIEoXGSMxARERERUcPgOT41BPZo14K9548QEREREZFt8RyfGgID7VpitkEiIiIiopaF5/hkaxw6TkRERERERGRDDLSJiIiIiIiIbIiBNhEREREREZENMdAmIiIiIiIisiEG2kREREREREQ2xECbiIiIiIiIyIYYaBMRERERERHZEANtIiIiIiIiIhtysHcD6kIURQCAQqGwc0uIiIh09Mck/TGK6o/HeyIiakpqc6xvloF2UVERAEAul9u5JURERKaKiorg5eVl72a0CDzeExFRU1STY70gNsNL71qtFhkZGfDw8IAgCPXenkKhgFwuR1paGjw9PW3QwuaF+8/95/5z/7n/9d9/URRRVFSEkJAQSCScmWULtjze87PO/ef+c/+5/9z/xjzWN8sebYlEgtDQUJtv19PTs1V++PS4/9x/7j/3v7Wy1f6zJ9u2GuJ4z88695/7z/1vrbj/jXus5yV3IiIiIiIiIhtioE1ERERERERkQwy0AchkMixduhQymczeTbEL7j/3n/vP/ef+t879b01a+78195/7z/3n/nP/G3f/m2UyNCIiIiIiIqKmij3aRERERERERDbEQJuIiIiIiIjIhhhoExEREREREdkQA20iIiIiIiIiG2r1gfZnn32G8PBwODs7o2/fvjhy5Ii9m9QgVq5cif79+8PDwwMBAQGYOHEirly5YrKOKIpYtmwZQkJC4OLigpiYGFy6dMlOLW44K1euhCAImD9/vmFZa9j3W7duYfr06fDz84Orqyt69eqFuLg4w+Mt+T2oqKjAa6+9hvDwcLi4uKBDhw5Yvnw5tFqtYZ2WtP+HDx/G+PHjERISAkEQsG3bNpPHa7KvKpUK8+bNg7+/P9zc3DBhwgSkp6c34l7UXVX7r1ar8corr6B79+5wc3NDSEgInn76aWRkZJhsoznvP5njsf5PLem3rjqt8XjPYz2P9Xo81jeBY73Yim3ZskV0dHQU//e//4kJCQniSy+9JLq5uYkpKSn2bprNjRo1Sly3bp0YHx8vnjt3TnzooYfEdu3aicXFxYZ13n33XdHDw0P84YcfxIsXL4pTp04Vg4ODRYVCYceW29bJkyfF/2/v/kKaev84gL/V6ewPrVRy6cgUAisrbFJQklTiRUYXQaH90ehqkTUTypEX3WR5FRGUUUQ3FkpkYBHRLBOkyFBXVoRGKyMUidIEM5f7/C6+7OBp1tfvj+XyOe8X7MLnPIzzftTz9pm6s2jRIlmxYoU4nU5tXPXsnz9/lpSUFNm7d688efJEvF6vNDY2yps3b7Q5Kq/BiRMnJD4+Xm7fvi1er1euX78us2fPljNnzmhzVMp/584dqaiokBs3bggAuXnzpu74ZLI6HA5JTk4Wt9st7e3tsmHDBlm5cqX8+PFjitP8d7/LPzAwILm5uVJXVyevX7+Wx48fy5o1a8Rut+ueYzrnJz12vfG6XsSYfc+uZ9ePx64Pf9cbeqO9evVqcTgcurH09HRxuVxhOqOp09/fLwCkublZRET8fr9YrVapqqrS5oyMjIjFYpELFy6E6zRDamhoSBYvXixut1tycnK04jVC9vLycsnOzv7lcdXXID8/X/bt26cb27Ztm+zevVtE1M7/c/lMJuvAwIBER0dLbW2tNufjx48SGRkpd+/enbJzD4WJfvj4WWtrqwDQNl4q5Sd2vdG6XsS4fc+uZ9cHsOuDhaPrDfun46Ojo2hra0NeXp5uPC8vD48ePQrTWU2dwcFBAEBcXBwAwOv1oq+vT7ceZrMZOTk5yqzHgQMHkJ+fj9zcXN24EbI3NDQgKysL27dvx/z585GZmYlLly5px1Vfg+zsbNy/fx9dXV0AgGfPnqGlpQWbN28GoH7+8SaTta2tDT6fTzcnKSkJGRkZyq0H8M/1MCIiAnPnzgVgvPwqY9cbr+sB4/Y9u55dH8CuDxaOrjeF5FmmoU+fPmFsbAyJiYm68cTERPT19YXprKaGiKCsrAzZ2dnIyMgAAC3zROvx/v37KT/HUKutrUV7ezuePn0adEz17ADw9u1bVFdXo6ysDMeOHUNraysOHToEs9mMoqIi5degvLwcg4ODSE9PR1RUFMbGxlBZWYnCwkIAxvgaCJhM1r6+PsTExGDevHlBc1S7Po6MjMDlcmHnzp2YM2cOAGPlVx273lhdDxi779n17PoAdr1euLresBvtgIiICN3HIhI0ppqSkhI8f/4cLS0tQcdUXI8PHz7A6XTi3r17iI2N/eU8FbMH+P1+ZGVl4eTJkwCAzMxMvHz5EtXV1SgqKtLmqboGdXV1qKmpwbVr17Bs2TJ4PB6UlpYiKSkJxcXF2jxV80/k/8mq2nr4fD4UFBTA7/fj/Pnz/zpftfxGYqTv7QCjdT3AvmfXs+t/xq4Pb9cb9k/HExISEBUVFfSKRX9/f9CrPyo5ePAgGhoa0NTUBJvNpo1brVYAUHI92tra0N/fD7vdDpPJBJPJhObmZpw9exYmk0nLp2L2gAULFmDp0qW6sSVLlqCnpweA2p9/ADhy5AhcLhcKCgqwfPly7NmzB4cPH8apU6cAqJ9/vMlktVqtGB0dxZcvX345Z7rz+XzYsWMHvF4v3G639go3YIz8RsGuN07XA+x7dj27PoBd/49wd71hN9oxMTGw2+1wu926cbfbjbVr14bprP4cEUFJSQnq6+vx4MEDpKam6o6npqbCarXq1mN0dBTNzc3Tfj02bdqEzs5OeDwe7ZGVlYVdu3bB4/EgLS1N2ewB69atC7rFS1dXF1JSUgCo/fkHgOHhYURG6i93UVFR2i0/VM8/3mSy2u12REdH6+b09vbixYsXSqxHoHi7u7vR2NiI+Ph43XHV8xsJu944XQ+w79n17PoAdv1f0vUheUu1aSpwy4/Lly/Lq1evpLS0VGbNmiXv3r0L96mF3P79+8ViscjDhw+lt7dXewwPD2tzqqqqxGKxSH19vXR2dkphYeG0veXBvxn/LqQi6mdvbW0Vk8kklZWV0t3dLVevXpWZM2dKTU2NNkflNSguLpbk5GTtlh/19fWSkJAgR48e1eaolH9oaEg6Ojqko6NDAMjp06elo6NDe6fNyWR1OBxis9mksbFR2tvbZePGjdPmlh+/y+/z+WTr1q1is9nE4/Horoffv3/XnmM65yc9dr1xu17EWH3PrmfXs+v/rq439EZbROTcuXOSkpIiMTExsmrVKu0WGKoBMOHjypUr2hy/3y/Hjx8Xq9UqZrNZ1q9fL52dneE76T/o5+I1QvZbt25JRkaGmM1mSU9Pl4sXL+qOq7wGX79+FafTKQsXLpTY2FhJS0uTiooK3cVWpfxNTU0Tfr8XFxeLyOSyfvv2TUpKSiQuLk5mzJghW7ZskZ6enjCk+e9+l9/r9f7yetjU1KQ9x3TOT8HY9Ve0OSpd6ybDaH3PrmfXs+v/nq6PEBEJze/GiYiIiIiIiMiw/6NNRERERERE9Cdwo01EREREREQUQtxoExEREREREYUQN9pEREREREREIcSNNhEREREREVEIcaNNREREREREFELcaBMRERERERGFEDfaRERERERERCHEjTYRERERERFRCHGjTURERERERBRC3GgTERERERERhRA32kREREREREQh9D9BSl3fJLcb/QAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 1200x400 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"fig, ax = plt.subplots(1, 2, figsize=(12,4), sharex=True)\n",
|
|
"\n",
|
|
"ax[0].plot(x, y_true_rising, label=\"true\")\n",
|
|
"ax[0].scatter(x, y_rising, s=12, label=\"noisy\")\n",
|
|
"ax[0].set_title(\"Rising S-curve\")\n",
|
|
"ax[0].legend()\n",
|
|
"\n",
|
|
"ax[1].plot(x, y_true_falling, label=\"true\")\n",
|
|
"ax[1].scatter(x, y_falling, s=12, label=\"noisy\")\n",
|
|
"ax[1].set_title(\"Falling S-curve\")\n",
|
|
"ax[1].legend()\n",
|
|
"\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "95c826d1-9223-4fb2-9ada-d9fc1acad2fb",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Fit the Rising S-curve"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "37d2fda4-40b8-4ea2-8f2c-6c3f2384d158",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"== Tuned fit settings ==\n",
|
|
"max_calls : 500\n",
|
|
"tolerance : 0.01\n",
|
|
"compute_erros: True\n",
|
|
"\n",
|
|
"\n",
|
|
"== Results ==\n",
|
|
"True rising params: [100. 0.25 60. 6. 120. 1. ]\n",
|
|
"lmfit rising result: [ 99.467831 0.287017 60.078405 5.715461 117.257939 0.967234]\n",
|
|
"minuit_grad (obj api ) rising result:\n",
|
|
"{'par': array([ 99.288864, 0.291575, 60.091759, 5.675642, 117.08836 ,\n",
|
|
" 0.963865]),\n",
|
|
" 'par_err': array([2.853807, 0.104648, 0.764892, 0.930086, 8.309872, 0.191738]),\n",
|
|
" 'chi2': array([7.28966])}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"res_r_lmfit = fit_scurve(x, y_rising)\n",
|
|
"\n",
|
|
"model_r = RisingScurve()\n",
|
|
"# model_r.FixParameter(0, 100) # Fixed p0 = 100 (optimizer does not touch the value)\n",
|
|
"model_r.SetParameter(4, 100) # Start value p4 = 100 \n",
|
|
"print(\"== Tuned fit settings ==\")\n",
|
|
"model_r.compute_errors = True\n",
|
|
"model_r.max_calls = 500\n",
|
|
"model_r.tolerance = 0.01\n",
|
|
"print(f\"max_calls : {model_r.max_calls}\")\n",
|
|
"print(f\"tolerance : {model_r.tolerance}\")\n",
|
|
"print(f\"compute_erros: {model_r.compute_errors}\")\n",
|
|
"print(\"\\n\")\n",
|
|
"print(\"== Results ==\")\n",
|
|
"res_r_munuit_obj = model_r.fit(x, y_rising, np.sqrt(y_rising))\n",
|
|
"\n",
|
|
"print(\"True rising params: \", p_true_rising)\n",
|
|
"print(\"lmfit rising result: \", res_r_lmfit)\n",
|
|
"print(\"minuit_grad (obj api ) rising result:\")\n",
|
|
"pprint(res_r_munuit_obj, sort_dicts=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "5ebf1328-954a-43ce-953b-c402fd7998f9",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Fit the Falling S-curve"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "5ce22d2d-1adb-47d9-bf36-6cb535fa8b77",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"True falling params: [100. 0.25 60. 6. 120. -1. ]\n",
|
|
"lmfit falling result: [101.734479 0.225786 60.251971 6.092915 118.476735 -0.998677]\n",
|
|
"minuit_grad (obj api ) falling result\n",
|
|
"{'par': array([101.734403, 0.225778, 60.251667, 6.093245, 118.479457,\n",
|
|
" -0.998603]),\n",
|
|
" 'chi2': array([1865.728851])}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"res_f_lmfit = fit_scurve2(x, y_falling)\n",
|
|
"\n",
|
|
"model_f = FallingScurve()\n",
|
|
"model_f.SetParameter(2, 20) # set start p2 = 20\n",
|
|
"model_f.SetParameter(4, 90) # set start p4 = 90\n",
|
|
"model_f.SetParLimits(4, 80, 130)\n",
|
|
"model_f.max_calls = 150 # this is limits the number of calls done by the minimizer (increasing the `max_calls` may help if the fit fails) \n",
|
|
"res_f_munuit_obj = model_f.fit(x, y_falling)\n",
|
|
"\n",
|
|
"print(\"True falling params: \", p_true_falling)\n",
|
|
"print(\"lmfit falling result: \", res_f_lmfit)\n",
|
|
"print(\"minuit_grad (obj api ) falling result\")\n",
|
|
"pprint(res_f_munuit_obj, sort_dicts=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "fe72503a-fc77-4b17-9b17-b98055e2fc87",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 1200x400 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"fig, ax = plt.subplots(1, 2, figsize=(12,4))\n",
|
|
"\n",
|
|
"# rising\n",
|
|
"ax[0].plot(x, y_true_rising, label=\"true\")\n",
|
|
"ax[0].scatter(x, y_rising, s=12, label=\"data\")\n",
|
|
"ax[0].scatter(x, scurve(x, res_r_lmfit[:6]), s=20, marker=\"x\", label=\"lmfit\")\n",
|
|
"ax[0].plot(x, model_r(x, res_r_munuit_obj['par']), linewidth=1, color=\"green\", label=\"minuit\")\n",
|
|
"ax[0].set_title(\"Rising S-curve fits\")\n",
|
|
"ax[0].legend()\n",
|
|
"\n",
|
|
"# falling\n",
|
|
"ax[1].plot(x, y_true_falling, label=\"true\")\n",
|
|
"ax[1].scatter(x, y_falling, s=12, label=\"data\")\n",
|
|
"ax[1].scatter(x, scurve2(x, res_f_lmfit[:6]), s=20, marker=\"x\", label=\"lmfit\")\n",
|
|
"ax[1].plot(x, model_f(x, res_f_munuit_obj['par']), linewidth=1, color=\"green\", label=\"minuit\")\n",
|
|
"ax[1].set_title(\"Falling S-curve fits\")\n",
|
|
"ax[1].legend()\n",
|
|
"\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2c42ad91-fd59-47ba-b90d-8300f97eb27a",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Quick error check"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "3ba40e9a-0c64-4ef6-ba90-b1116f99b862",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Rising abs error lmfit : [0.532169 0.037017 0.078405 0.284539 2.742061 0.032766]\n",
|
|
"Rising abs error minuit_grad: [0.711136 0.041575 0.091759 0.324358 2.91164 0.036135]\n",
|
|
"\n",
|
|
"\n",
|
|
"Falling abs error lmfit : [1.734479 0.024214 0.251971 0.092915 1.523265 0.001323]\n",
|
|
"Falling abs error minuit_grad: [1.734403 0.024222 0.251667 0.093245 1.520543 0.001397]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(\"Rising abs error lmfit : \", np.abs(res_r_lmfit[:6] - p_true_rising))\n",
|
|
"print(\"Rising abs error minuit_grad: \", np.abs(res_r_munuit_obj['par'] - p_true_rising))\n",
|
|
"print(\"\\n\")\n",
|
|
"print(\"Falling abs error lmfit : \", np.abs(res_f_lmfit[:6] - p_true_falling))\n",
|
|
"print(\"Falling abs error minuit_grad: \", np.abs(res_f_munuit_obj['par'] - p_true_falling))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "c9bbabfd-e24e-43ec-8622-983b3757d7a9",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Benchmark"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "dc0b52b6-9fc3-453d-b6eb-e325a2b8342e",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Rising lmfit : 0.445 ms\n",
|
|
"Rising minuit2 : 0.322 ms\n",
|
|
"\n",
|
|
"Falling lmfit : 0.392 ms\n",
|
|
"Falling minuit2 : 0.309 ms\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def bench(fn, n_repeats=200):\n",
|
|
" # warmup\n",
|
|
" for _ in range(3):\n",
|
|
" fn()\n",
|
|
"\n",
|
|
" t0 = time.perf_counter()\n",
|
|
" for _ in range(n_repeats):\n",
|
|
" res = fn()\n",
|
|
" t1 = time.perf_counter()\n",
|
|
" return res, (t1 - t0) / n_repeats\n",
|
|
"\n",
|
|
"model_rising = RisingScurve()\n",
|
|
"model_falling = FallingScurve()\n",
|
|
"\n",
|
|
"res_r_lmfit, t_r_lmfit = bench(lambda: fit_scurve(x, y_rising))\n",
|
|
"res_r_minuit, t_r_minuit_grad = bench(lambda: model_rising.fit(x, y_rising))\n",
|
|
"\n",
|
|
"res_f_lmfit, t_f_lmfit = bench(lambda: fit_scurve2(x, y_falling))\n",
|
|
"res_f_minuit, t_f_minuit_grad = bench(lambda: model_falling.fit(x, y_falling))\n",
|
|
"\n",
|
|
"print(f\"Rising lmfit : {1e3*t_r_lmfit:.3f} ms\")\n",
|
|
"print(f\"Rising minuit2 : {1e3*t_r_minuit_grad:.3f} ms\")\n",
|
|
"print()\n",
|
|
"print(f\"Falling lmfit : {1e3*t_f_lmfit:.3f} ms\")\n",
|
|
"print(f\"Falling minuit2 : {1e3*t_f_minuit_grad:.3f} ms\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "e694c18a-a203-4132-a472-c93c4d3ce853",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"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.12.5"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|