{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [CBE30338](https://jckantor.github.io/CBE30338);\n", "content is available [on Github](https://github.com/jckantor/CBE30338.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html)", "section": "" } }, "source": [ "\n", "< [3.5 One Compartment Pharmacokinetics](https://jckantor.github.io/CBE30338/03.05-One-Compartment-Pharmacokinetics.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [3.7 Interacting Tanks](https://jckantor.github.io/CBE30338/03.07-Interacting-Tanks.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[3.6 Second Order Models](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6-Second-Order-Models)",
"section": "3.6 Second Order Models"
}
},
"source": [
"# 3.6 Second Order Models\n",
"\n",
"A standard form for a generic second-order model for a stable linear system is given by\n",
"\n",
"$$\\tau^2\\frac{d^2y}{dt^2} + 2\\zeta\\tau\\frac{dy}{dt} + y = K u$$\n",
"\n",
"where $y$ and $u$ are **deviation variables**. The parameters have a generic interpretation that are commonly used to describe the qualitative characteristics of these systems.\n",
"\n",
"| Parameter | Units | Description |\n",
"| :-: | :-: | :-: |\n",
"| $K$ | $\\frac{\\mbox{units of } y}{\\mbox{units of }u}$ | Steady State Gain |\n",
"| $\\tau \\gt 0$ | time | Time Constant |\n",
"| $\\zeta \\geq 0$ | dimensionless | Damping Factor |\n",
"\n",
"The standard form assumes that a zero input (i.e, $u(t) = 0$) results in a zero response ($y(t) = 0$). In practice, the nominal or quiescent value of $y$ or $u$ may different from zero. In that case we would write\n",
"\n",
"$$\\tau^2\\frac{d^2y}{dt^2} + 2\\zeta\\tau\\frac{dy}{dt} + y - y_{ref} = K\\left(u(t) - u_{ref}\\right)$$\n",
"\n",
"where $u_{ref}$ and $y_{ref}$ represent constant reference values."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[3.6.1 Step Response](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6.1-Step-Response)",
"section": "3.6.1 Step Response"
}
},
"source": [
"## 3.6.1 Step Response\n",
"\n",
"The step response corresponds to a system that is initially at steady-state where $u = u_{ref}$ and $y = y_{ref}$. At time $t=0$ the input is incremented by a constant value U, i.e. $u = u_{ref} + U$ for $t \\geq 0$. The subsequent response $y(t) - y_{ref}$ is the **step response**.\n",
"\n",
"Second order linear systems have elegant analytical solutions expressed using exponential and trignometric functions. There are four distinct cases that depend on the value of the damping factor $\\zeta$:\n",
"\n",
"* Overdamped\n",
"* Critically damped\n",
"* Underdamped\n",
"* Undamped Oscillations"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[3.6.1.1 Overdamped ($\\zeta > 1$)](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6.1.1-Overdamped-($\\zeta->-1$))",
"section": "3.6.1.1 Overdamped ($\\zeta > 1$)"
}
},
"source": [
"### 3.6.1.1 Overdamped ($\\zeta > 1$)\n",
"\n",
"An overdamped response tends to be sluggish, and with a potentially a large difference in time scales $\\tau_1$ and $\\tau_2$. The geometric mean of $\\tau_1$ and $\\tau_2$ is $\\tau$. The value of $\\zeta$ determines the differences.\n",
"\n",
"$$y(t) = y_{ref} + KU\\left(1 - \\frac{\\tau_1e^{-t/\\tau_1} - \\tau_2e^{-t/\\tau_2}}{\\tau_1 - \\tau_2}\\right)$$\n",
"\n",
"where $\\tau_1$ and $\\tau_2$ are found by factor the polynomial\n",
"\n",
"$$\\tau^2s^2 + 2\\zeta\\tau s + 1 = (\\tau_1s + 1)(\\tau_2s + 1)$$\n",
"\n",
"For $\\zeta \\geq 1$ the solutions are given by\n",
"\n",
"\\begin{align}\n",
"\\tau_1 & = \\frac{\\tau}{\\zeta - \\sqrt{\\zeta^2-1}} \\\\\n",
"\\tau_2 & = \\frac{\\tau}{\\zeta + \\sqrt{\\zeta^2-1}}\n",
"\\end{align}\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {
"nbpages": {
"level": 3,
"link": "[3.6.1.1 Overdamped ($\\zeta > 1$)](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6.1.1-Overdamped-($\\zeta->-1$))",
"section": "3.6.1.1 Overdamped ($\\zeta > 1$)"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from ipywidgets import interact"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {
"nbpages": {
"level": 3,
"link": "[3.6.1.1 Overdamped ($\\zeta > 1$)](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6.1.1-Overdamped-($\\zeta->-1$))",
"section": "3.6.1.1 Overdamped ($\\zeta > 1$)"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ad3ba8301e2344e0a04df39bec70b6ea",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"A Jupyter Widget"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def overdamped(K, tau, zeta):\n",
" t = np.linspace(0,20)\n",
" tau_1 = tau/(zeta - np.sqrt(zeta**2 - 1))\n",
" tau_2 = tau/(zeta + np.sqrt(zeta**2 - 1))\n",
"\n",
" y = K*(1 - ((tau_1*np.exp(-t/tau_1) - tau_2*np.exp(-t/tau_2))/(tau_1 - tau_2)))\n",
" plt.plot(t,y)\n",
" plt.grid()\n",
" \n",
"interact(overdamped, K=(0.5,2), tau=(0.5,2), zeta=(1.01,2));"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[3.6.1.2 Critically Damped ($\\zeta = 1$)](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6.1.2-Critically-Damped-($\\zeta-=-1$))",
"section": "3.6.1.2 Critically Damped ($\\zeta = 1$)"
}
},
"source": [
"### 3.6.1.2 Critically Damped ($\\zeta = 1$)\n",
"\n",
"$$y(t) = y_{ref} + KU\\left[1 - \\left(1 + \\frac{t}{\\tau}\\right)e^{-t/\\tau}\\right]$$"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {
"nbpages": {
"level": 3,
"link": "[3.6.1.2 Critically Damped ($\\zeta = 1$)](https://jckantor.github.io/CBE30338/03.06-Second-Order-Models.html#3.6.1.2-Critically-Damped-($\\zeta-=-1$))",
"section": "3.6.1.2 Critically Damped ($\\zeta = 1$)"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAD8CAYAAABw1c+bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XmcFPWd//HXZ25gEBBwuBlAUPFm\n8ECNQmIUTSImm0T9GVETQy6zm2ySVTeJ5kGSzebazeXGxEg8YsTExIQYFFEHT1AOATkUhvsGuYc5\ne/rz+6MLbcY5ume6p6an38/Hox5dx7e6313d8+ma6ur6mrsjIiLZIyfsACIi0rFU+EVEsowKv4hI\nllHhFxHJMir8IiJZRoVfRCTLqPCLiGQZFX4RkSyjwi8ikmXywg7QlH79+nlpaWmb1j1y5Ag9evRI\nbaAUUK7kKFdylCs5XTHX4sWL33b3/gk1dvdON5SVlXlblZeXt3nddFKu5ChXcpQrOV0xF7DIE6yx\nOtQjIpJlVPhFRLKMCr+ISJZR4RcRyTKtFn4zG2pm5Wa22sxWmtm/NdHGzOwXZlZhZsvNbFzcshvN\nbG0w3JjqJyAiIslJ5HTOCPA1d19iZj2BxWY2191XxbW5AhgdDOcBvwbOM7PjgbuA8YAH685y9/0p\nfRYiIpKwVvf43X2Huy8Jxg8Dq4HBjZpNAR4MzipaAPQ2s4HA5cBcd98XFPu5wOSUPgMREUlKUj/g\nMrNS4Gzg1UaLBgNb4qa3BvOamy8i0ix3J+oQiUaJNDiRqNMQdSINURrciTQ4UY/Nj0bfXR71+FuI\nemx51KHBY/PdnWW7I9Su3PnO40SDWw/aRIN13cE5tg3uOBCNBrfBerHc77Y/On60d1t/5/44pu07\n89zZubWOiRPTv30TLvxmVgz8BfiKux9qvLiJVbyF+U3d/zRgGkBJSQnz5s1LNNoxKisr27xuOilX\ncpQrOanM1RB1ahqgrsGpbYDaBqeuAerixuujTl0U6hugLurUB+P1UScShUg0Nl5TF+Gni56KFWbn\nnWWRqBNxaIhCg8ceM+JHx2O3abdkcQc8SHKOy3eu7ID3V0KF38zyiRX9h939r0002QoMjZseAmwP\n5k9sNH9eU4/h7r8Ffgswfvx4n9jGj7158+bR1nXTSbmSo1zJOZqrNtLAwap6DlbHhgNx44drIlTW\nxm4P10Zi0zX1HKlt4EhdhKq6BiprI9RFokk/fo5BYV4uhfk5FOTmUJAXG+rrqzm+VzHFeTnk5747\nFOQZeTlHp4283KPTRl5uDvk5sdvcHCMvGM/LMXJyjPzgNi/HyD06WGxersWmj47nGLHxnGDcjBwz\nXl+ymHPOGf/OdI6Bxd3mmmEGFrfO0WmjUXsM3lnGu22J3QLHTBuxdeHo+LvTHfX+arXwWyzRfcBq\nd/+fZprNAm41s5nEvtw96O47zGwO8F9m1idodxlwRwpyi2SFaNTZX1XHnspa9hyODbsP1/L24Vr2\nVdWx70gd+4/UsW1vFVXPPUVVXUOL99ctP5eeRXkUF+XRsyifnoV5nNCziO6FufQoyHv3tiCX7sFt\nUX4u3Qpy6V6QS7f8XIrycyjMi80/Op6fa+8Ur3ixQnZRujZPm+1fl8upg3qFHSM0iezxXwjcALxh\nZkuDef8JDANw93uA2cCVQAVQBdwcLNtnZt8FFgbrTXf3famLL5K53J2D1fVs3lfF9gPVbD9Qw46D\n1Ww/WMOOA9XsOFjDnsO1RKLvPe7RLT+X43sUvDN0j+YwduQw+nTPp1f3Anp1y6dXt3x6B7e9uuVT\nXJRHfq5+uiMJFH53f4mmj9XHt3HgS80smwHMaFM6kQzn7uyprKVidyXr9xxhy74qNscNh2six7Qv\nzMthUO9uDOxVxAWj+lFyXCEn9Cykf88i+vc8Ol5Ij8Jj/3Rje9ZjO/KpSQbrlJdlFsk07s6ew7Ws\n3HGIt3YepmJ3Jev2VLJudyWH4op7QV4OQ/t0Y9jx3Rk/vA9Dj+/O0OO7M7h3Nwb17kaf7vlNHjIR\nSSUVfpEkRaPOhr1HeGPrQVbvOMSqHYdYtf0Qe4/UvdPmhJ6FjOpfzJSzBjOqfw9GnVDMqP7FDDiu\niJwcFXYJlwq/SCsOVtXz+pb9vL75AM8tq+Hfnp/Lwep6ILYHf1JJTz5wygmMHXgcYwf14qQBPenV\nLT/k1CLNU+EXaeRAVR0L1u/llXWxoWJ3JRA77W5wD+PK0wdx9rA+nDGkF6P6F+sLU8k4KvyS9Wrq\nG1iwfi8vV7zNK+v2smrHIdxjZ86cO+J4rj5rEOOG9eGMob1ZNP8lJk48I+zIIu2iwi9Zac/hWsrf\n3M0zq3fx4tq3qa5voCA3h3HDe/PVS8dwwai+nDGkNwV52puXrkeFX7LGpr1HeGL5Dp5ZvYulWw7g\nDoN6FfHxsiF84JQTOH9kX4ryc8OOKZJ2KvzSpb1dWcsTy7bzt6XbWbrlAABnDOnFVy8d884Xsjp9\nUrKNCr90OVV1EZ5asZO/L93OSxVv0xB1Th7Qk9uvOJmrzhzEoN7dwo4oEioVfuky1u2p5A8LNvHY\n4q0crokwuHc3pl08kqvPGsxJA3qGHU+k01Dhl4wWaYjyzOpdPLRgEy9X7CU/17jitIFcf94wzik9\nXj+WEmmCCr9kpMM19Ty0YBMPvrKJnYdqGNSriG9cfhKfHD+U/j0Lw44n0qmp8EtG2X+kjt+/vIH7\nX9nIoZoI7xvdj+lTTuX9J59Ann5IJZIQFX7JCLsP13Dfixt4aMEmquoamHzqAL406UROH5K911QX\naSsVfunU9h2p45fPreWPr26mviHKR84cxBcnnqgva0XaQYVfOqX6qHPvC+v5xXNrOVIb4V/GDeGL\nk05kRL8eYUcTyXiJdL04A/gwsNvdT2ti+TeA6+Pu7xSgf9D71kbgMNAARNx9fKqCS9fk7jy1Yid3\nvljNnurVTDypP/955SmMKdEevkiqJLLHfz/wK+DBpha6+4+BHwOY2UeArzbqXnGSu7/dzpySBZZv\nPcD3nljNaxv3MbjYeODT53LJmP5hxxLpchLpevEFMytN8P6uAx5pTyDJPkdqI/zoqTd5cMEm+vYo\n4L8+ejolR9ap6IukScqO8ZtZd2AycGvcbAeeNjMHfuPuv03V40nX8OLaPdzx1zfYdqCaqecP5+uX\nn0TPonzmzVsfdjSRLsti/aS30ii2x/9EU8f449pcA3zK3T8SN2+Qu283sxOAucCX3f2FZtafBkwD\nKCkpKZs5c2Yyz+MdlZWVFBcXt2nddFKuYx2pd2a+WceL2yIM6G58+vRCxvR598qY2l7JUa7kdMVc\nkyZNWpzw96ju3uoAlAIrWmnzOPD/Wlj+HeDriTxeWVmZt1V5eXmb100n5XrXnBU7/JzvzfWRd/zT\nfzB7tVfXRTpFrkQoV3KUKzntyQUs8gTqq7un5lCPmfUCLgE+FTevB5Dj7oeD8cuA6al4PMlMNfUN\n3PX3lTy6aAsnD+jJfTeeox9giYQgkdM5HwEmAv3MbCtwF5AP4O73BM0+Cjzt7kfiVi0BHg+udZ4H\n/NHdn0pddMkk6/dU8sWHl/DmzsN8YeIovnrpGPVuJRKSRM7quS6BNvcTO+0zft564My2BpOuY9ay\n7dzxl+UU5OXw+5vPYdJJJ4QdSSSr6Ze7kjY19Q1875+r+MOCzZQN78MvrztbnaCIdAIq/JIWm/dW\n8YWHF7Ny+yE+d/FIvn75SeTr6pkinYIKv6Tcks37ueWBRTREnd9NHc+lY0vCjiQicVT4JaWefGMH\nX3l0KQN6FXH/zefqomoinZAKv6SEu3PfSxv4/uzVnD20N/dOHU/fYvWEJdIZqfBLuzVEnen/WMkD\n8zdxxWkD+N9rzqIoP7f1FUUkFCr80i5VdRH+9ZGlPLN6F9MuHsntk09WB+cinZwKv7TZoZp6bpzx\nGsu2HOC7U07lhgmlYUcSkQSo8EubHKyuZ+qM11i1/SD/d30Zk08bEHYkEUmQCr8krXHR/6BO1xTJ\nKCr8kpSD1fVMve9VVu04pKIvkqFU+CVh8UX/19eX6YdZIhlKhV8ScrC6nhvue5XVKvoiGU+FX1p1\npDbC1KDo3/OpMj5wioq+SCZT4ZcWRRqifOmPS1ixXUVfpKvQ5RKlWe7Ot/62gnlv7eF7V5+mL3JF\nuohWC7+ZzTCz3Wa2opnlE83soJktDYY745ZNNrO3zKzCzG5PZXBJv7vLK5i5cAu3TjqR684dFnYc\nEUmRRPb47wcmt9LmRXc/KximA5hZLnA3cAUwFrjOzMa2J6x0nL8u2cpPnl7DR88ezNcuGxN2HBFJ\noVYLv7u/AOxrw32fC1S4+3p3rwNmAlPacD/SwV6ueJv/eGw5F4zqyw//5QyCfpNFpItI1TH+CWa2\nzMyeNLNTg3mDgS1xbbYG86QTe3PnIT7/0GJG9S/mnhvK1CG6SBdk7t56I7NS4Al3P62JZccBUXev\nNLMrgZ+7+2gz+wRwubvfErS7ATjX3b/czGNMA6YBlJSUlM2cObNNT6iyspLi4uI2rZtOmZDrQE2U\n6QtqiDp8+/wi+nYLr+hnwvbqTJQrOV0x16RJkxa7+/iEGrt7qwNQCqxIsO1GoB8wAZgTN/8O4I5E\n7qOsrMzbqry8vM3rplNnz1UXafBP/PoVP/lbT/qKbQfCDeWdf3t1NsqVnK6YC1jkCdRXd2//oR4z\nG2DBQWAzO5fY4aO9wEJgtJmNMLMC4FpgVnsfT9Ljx3Pe4rWN+/jBx07n1EG9wo4jImnU6g+4zOwR\nYCLQz8y2AncB+QDufg/wceALZhYBqoFrg0+fiJndCswBcoEZ7r4yLc9C2uWpFTv47QvrmTphOFef\nra9hRLq6Vgu/u1/XyvJfAb9qZtlsYHbboklH2HkkyvfKl3PW0N5880OnhB1HRDqATtnIYlV1EX71\neg35ucbd14+jME/95IpkA12rJ0u5O998fAXbKp0HPn02g3t3CzuSiHQQ7fFnqYdf3czjr2/j6hPz\nuXhM/7DjiEgHUuHPQsu3HmD6P1Yx8aT+fGRUfthxRKSDqfBnmZr6Br7y6FL6Fhfws2vOIkeXYxDJ\nOjrGn2V++NSbrN9zhIdvOY/e3QvCjiMiIdAefxZ5Zd3b/P7ljdx0QSkXntgv7DgiEhIV/ixxqKae\nb/x5OSP79eC2ySeHHUdEQqRDPVniu/9YxY6D1Tz2hQvoVqDz9UWymfb4s8DTK3fy58Vb+eLEExk3\nrE/YcUQkZCr8Xdzeylr+8/E3GDvwOP71A6PDjiMinYAO9XRh7s5/Pv4Gh6oj/OGWM9WpiogA2uPv\n0v62dBtzVu7i3y8bw8kDjgs7joh0Eir8XdT+I3VM/8cqxg3rzWffNzLsOCLSiajwd1E/mvMmh2oi\nfP+jp5Obo1/nisi7VPi7oMWb9vPIa1u4+YJSThmoQzwicqxWC7+ZzTCz3Wa2opnl15vZ8mB4xczO\njFu20czeMLOlZrYolcGlaZGGKN/62woGHFfEVz44Juw4ItIJJbLHfz8wuYXlG4BL3P0M4LvAbxst\nn+TuZ3mivb9LuzwwfxOrdxziro+MpbhQJ22JyHsl0vXiC2ZW2sLyV+ImFwBD2h9L2mLnwRr+5+m3\nuGRMfyafNiDsOCLSSVmsX/RWGsUK/xPuflor7b4OnOzutwTTG4D9gAO/cffG/w3ErzsNmAZQUlJS\nNnPmzASfwrEqKyspLi5u07rp1BG57l5aw9LdDXz/om6c0D2xr2+yeXu1hXIlR7mS055ckyZNWpzw\nkRV3b3UASoEVrbSZBKwG+sbNGxTcngAsAy5O5PHKysq8rcrLy9u8bjqlO9e8t3b78Nue8J8/syap\n9bJ1e7WVciVHuZLTnlzAIk+gvrp7as7qMbMzgN8BU9x9b9yHyvbgdjfwOHBuKh5PjlVT38Bdf1/B\niH49+NwlOmdfRFrW7sJvZsOAvwI3uPuauPk9zKzn0XHgMqDJM4OkfX49bx0b91bx3SmnUZinK2+K\nSMta/XLXzB4BJgL9zGwrcBeQD+Du9wB3An2B/7NYN34Rjx1nKgEeD+blAX9096fS8Byy2vYD1dzz\n/Do+dMZALhqtzlVEpHWJnNVzXSvLbwFuaWL+euDM964hqfSTp9/CHW5X5yoikiD9cjeDrdx+kMdf\n38bNF5Yy9PjuYccRkQyhwp+h3J0fzH6TXt3y+eKkE8OOIyIZRIU/Qz2/Zg8vVbzNl98/ml7d8sOO\nIyIZRIU/AzVEY3v7w/t254bzh4cdR0QyjAp/Bnps8Rbe2nWY/7j8ZPWqJSJJU9XIMFV1EX769BrO\nHtabK0/X9XhEJHkq/Bnmdy9uYPfhWr555SkEv5EQEUmKCn8G2X24hnueX8fkUwcwvvT4sOOISIZS\n4c8gP3tmLXWRKLddoR9riUjbqfBniA1vH+HRhVu4/rxhjOjXI+w4IpLBVPgzxC+fXUt+rnHr+0eH\nHUVEMpwKfwZYt6eSvy3dxg3nD6d/z8Kw44hIhlPhzwC/eq6CgrwcPnfJqLCjiEgXoMLfya3bU8nf\nl25j6oRS+hVrb19E2k+Fv5P7xbNrKczLZdrF6llLRFIjocJvZjPMbLeZNdmDlsX8wswqzGy5mY2L\nW3ajma0NhhtTFTwbVOyuZNay7Uy9YLj29kUkZRLd478fmNzC8iuA0cEwDfg1gJkdT6zHrvOI9bd7\nl5n1aWvYbPOLZ9fSLT+Xae/T3r6IpE5Chd/dXwD2tdBkCvBg0Nn7AqC3mQ0ELgfmuvs+d98PzKXl\nDxAJrN11mH8s387UCaX01d6+iKRQqo7xDwa2xE1vDeY1N19a8fNn19I9X8f2RST1Wu1zN0FNXS3M\nW5j/3jswm0bsMBElJSXMmzevTUEqKyvbvG46JZNr2+Eo/1xezYdG5rN84SudJldHUq7kKFdysj6X\nuyc0AKXAimaW/Qa4Lm76LWAgcB3wm+baNTeUlZV5W5WXl7d53XRKJtcXH17sY7/9pO+rrE1foEBX\n2F4dSbmSo1zJaU8uYJEnWM9TdahnFjA1OLvnfOCgu+8A5gCXmVmf4Evdy4J50ow1uw4z+40d3HRh\nKX16FIQdR0S6oIQO9ZjZI8BEoJ+ZbSV2pk4+gLvfA8wGrgQqgCrg5mDZPjP7LrAwuKvp7t7Sl8RZ\n75556yjKy+WWi3RsX0TSI6HC7+7XtbLcgS81s2wGMCP5aNln24FqZi3bzg0ThmtvX0TSRr/c7UR+\n9+J6AG7RefsikkYq/J3E/iN1zHxtC1edOYjBvbuFHUdEujAV/k7iwfmbqK5v0BU4RSTtVPg7geq6\nBh6Yv5H3n3wCJw3oGXYcEeniVPg7gT8t2sK+I3V8Xnv7ItIBVPhDFmmIcu+L6xk3rDfnlOr6dSKS\nfir8IfvnGzvYur+az18yCrOmrnAhIpJaKvwhcnfueX49J55QzKWnlIQdR0SyhAp/iF5Y+zardxxi\n2sUjycnR3r6IdAwV/hDdM28dA44r4uqzdKVqEek4KvwhWbblAPPX7+UzF42gIE8vg4h0HFWckNz7\n4np6FuVx3XnDwo4iIllGhT8E2w9U8+SKnVx37jCKC1PVF46ISGJU+EPw4PxNuDtTJwwPO4qIZCEV\n/g5WVRfhkdc2M/m0AQzp0z3sOCKShVT4O9hfl2zjYHU9n75wRNhRRCRLJVT4zWyymb1lZhVmdnsT\ny//XzJYGwxozOxC3rCFu2axUhs800ajz+5c3cMaQXpQN1+UZRCQcrX6zaGa5wN3AB4GtwEIzm+Xu\nq462cfevxrX/MnB23F1Uu/tZqYucuV5Yu4d1e47ws2vO0uUZRCQ0iezxnwtUuPt6d68DZgJTWmh/\nHfBIKsJ1NTNe3sgJPQu58vSBYUcRkSyWSOEfDGyJm94azHsPMxsOjACei5tdZGaLzGyBmV3d5qQZ\nbltllBfW7GHqhOH6wZaIhMpi/aS30MDsE8Dl7n5LMH0DcK67f7mJtrcBQ+KXmdkgd99uZiOJfSB8\nwN3XNbHuNGAaQElJSdnMmTPb9IQqKyspLi5u07rpdO/SSl7bbfx0YneOK+g8h3k66/ZSruQoV3K6\nYq5JkyYtdvfxCTV29xYHYAIwJ276DuCOZtq+DlzQwn3dD3y8tccsKyvztiovL2/zuumyr7LWR9/x\nhN/22LKwo7xHZ9xe7sqVLOVKTlfMBSzyVmrr0SGRYw4LgdFmNsLMCoBrgfecnWNmJwF9gPlx8/qY\nWWEw3g+4EFjVeN2u7pGFm6mLws06hVNEOoFWz+px94iZ3QrMAXKBGe6+0symE/uEOfohcB0wM/jk\nOeoU4DdmFiX2fcJ/e9zZQNmgviHKg69s4tS+OepPV0Q6hYQuFOPus4HZjebd2Wj6O02s9wpwejvy\nZbynVuxk56Earh1XGHYUEREgwcIvbff7lzcwol8Pzujf8pfoIiIdRecVptEbWw+yZPMBpk4YTo5+\nsCUinYQKfxo9OH8j3Qty+ZeyIWFHERF5hwp/muw/Usffl23nY+MGc1xRfthxRETeocKfJo8u2kJd\nJMrUCaVhRxEROYYKfxo0RJ2H5m9iwsi+jCnRKZwi0rmo8KfBc2/uZtuBam68QD1siUjno8KfBg/O\n38jAXkVcekpJ2FFERN5DhT/FKnZX8uLat/nU+cPJy9XmFZHOR5Upxf6wYBMFuTlcc87QsKOIiDRJ\nhT+FKmsjPLZ4Kx8+YyD9inWJBhHpnFT4U+jxJVuprI0w9YLSsKOIiDRLhT9F3J0H5m/ijCG9OGto\n77DjiIg0S4U/Reav20vF7kr9YEtEOj0V/hR5YP5G+nTP58NnqCN1EencVPhTYNuBauau2sU15wyj\nKD837DgiIi1KqPCb2WQze8vMKszs9iaW32Rme8xsaTDcErfsRjNbGww3pjJ8Z/Hwgk0AfOr8YSEn\nERFpXasdsZhZLnA38EFgK7DQzGY10YXio+5+a6N1jwfuAsYDDiwO1t2fkvSdQE19AzMXbuHSU0oY\n0qd72HFERFqVyB7/uUCFu6939zpgJjAlwfu/HJjr7vuCYj8XmNy2qJ3T7Dd2sO9Inb7UFZGMYcf2\njd5EA7OPA5Pd/ZZg+gbgvPi9ezO7CfgBsAdYA3zV3beY2deBInf/XtDu20C1u/+kiceZBkwDKCkp\nKZs5c2abnlBlZSXFxcVtWrctps+vpiri/OCiblgLvWx1dK5EKVdylCs5ypWc9uSaNGnSYncfn1Bj\nd29xAD4B/C5u+gbgl43a9AUKg/HPA88F498AvhXX7tvA11p7zLKyMm+r8vLyNq+brNc37/fhtz3h\n97+8odW2HZkrGcqVHOVKjnIlpz25gEXeSm09OiRyqGcrEH/hmSHA9kYfHnvdvTaYvBcoS3TdTPbg\n/I30KMjlY+MGhx1FRCRhiRT+hcBoMxthZgXAtcCs+AZmFn/y+lXA6mB8DnCZmfUxsz7AZcG8jLe3\nspYnlu/gY+OG0FNdK4pIBmn1rB53j5jZrcQKdi4ww91Xmtl0Yv9azAL+1cyuAiLAPuCmYN19ZvZd\nYh8eANPdfV8ankeHe7drRXW2IiKZpdXCD+Dus4HZjebdGTd+B3BHM+vOAGa0I2OnE2mI8vCCzVww\nqi+j1bWiiGQY/XK3DZ4NulbU3r6IZCIV/jZ4aP4mda0oIhlLhT9JFbsP81KFulYUkcylypWkh+ar\na0URyWwq/EmorI3wlyXb+JC6VhSRDKbCn4Q/LdxCZW2EG9W1oohkMBX+BDVEnd+/soGy4X3UtaKI\nZDQV/gTNXbWLLfuq+cxFI8KOIiLSLir8CZrx0gYG9+7GZWN1CqeIZDYV/gS8sfUgr23cx80XluoU\nThHJeKpiCbjvpfX0KMjlkzqFU0S6ABX+Vuw8WMMTy3fwyXOGcpyuwikiXYAKfysenL+RBnduvkBf\n6opI16DC34Lqugb++NpmLhtbwrC+6khdRLoGFf4W/GXJVg5U1fOZi0aGHUVEJGVU+JsRjTozXt7A\n6YN7cU5pn7DjiIikTEKF38wmm9lbZlZhZrc3sfzfzWyVmS03s2fNbHjcsgYzWxoMsxqv21k9v2YP\n6/cc4TMXjcDMwo4jIpIyrfbAZWa5wN3AB4l1nr7QzGa5+6q4Zq8D4929ysy+APwIuCZYVu3uZ6U4\nd9rd99IGSo4r5MrTB7beWEQkgySyx38uUOHu6929DpgJTIlv4O7l7l4VTC4AhqQ2Zsd6c+chXqp4\nm6kTSinI09EwEelazN1bbmD2cWCyu98STN8AnOfutzbT/lfATnf/XjAdAZYS64j9v939b82sNw2Y\nBlBSUlI2c+bMNj2hyspKiouL27TuUXcvreGNPQ385JLuFBek5jBPKnKlg3IlR7mSo1zJaU+uSZMm\nLXb38Qk1dvcWB+ATwO/ipm8AftlM208R2+MvjJs3KLgdCWwERrX2mGVlZd5W5eXlbV7X3X31joM+\n/LYn/Cdz3mzX/TTW3lzpolzJUa7kKFdy2pMLWOSt1NajQyLHMbYC8dcqGAJsb9zIzC4Fvglc5e61\ncR8s24Pb9cA84OyEPpFC8vNn1tKzMI9bdAqniHRRiRT+hcBoMxthZgXAtcAxZ+eY2dnAb4gV/d1x\n8/uYWWEw3g+4EIj/UrhTWbn9IE+u2MnNF42gV3ddnkFEuqZWz+px94iZ3QrMAXKBGe6+0symE/vX\nYhbwY6AY+HNw6uNmd78KOAX4jZlFiX3I/LcfezZQp/LzZ9bSsyhP19wXkS6t1cIP4O6zgdmN5t0Z\nN35pM+u9ApzenoAdZcW2gzy9ahdfvXQMvbppb19Eui6dqxj42TNrOa4oj5svKg07iohIWqnwA8u3\nHuCZ1bv47PtG6tLLItLlqfAT29vv3T2fmy4sDTuKiEjaZX3hX7rlAM+9uZvPvm8kPbW3LyJZIOsL\n///OXUOf7vnceEFp2FFERDpEVhf+JZv38/yaPUy7eBTFhQmd4CQikvGytvDXRaJ86/EV9CsuZOqE\n4a2vICLSRWTtbu7Pn13Dqh2HuHfqeHpob19EskhW7vEv3rSfX89bxyfHD+GDY0vCjiMi0qGyrvBX\n1UX42p+WMqh3N7794bFhxxER6XBZd4zjv2avZtO+Kh757Pk6fVNEslJW7fE/v2YPf1iwmVsuGsH5\nI/uGHUdEJBRZU/gPVNXxjT+tNMjBAAAHjElEQVQvY0xJMV+77KSw44iIhCZrDvV8++8r2V9Vx4yb\nzqEoPzfsOCIiocmKPf4/L9rCP5Zt5yuXjuG0wb3CjiMiEqqECr+ZTTazt8yswsxub2J5oZk9Gix/\n1cxK45bdEcx/y8wuT1301m3eW8XnHlrENx5bzjmlffjcxepOUUSk1UM9ZpYL3A18kFj/uwvNbFaj\nnrQ+A+x39xPN7Frgh8A1ZjaWWFeNpwKDgGfMbIy7N6T6icQ7Uhvh/+ZVcO+LG8jLMb5x+Ul85qIR\n5OVmxT84IiItSuQY/7lARdBZOmY2E5jCsX3nTgG+E4w/BvzKYn0wTgFmBp2vbzCziuD+5qcm/rGi\nUeflbfX8x0/msftwLR87ezC3XXEyJccVpePhREQyUiKFfzCwJW56K3Bec22CPnoPAn2D+QsarTu4\nzWlbcLC6npt+/xqvb67jzKG9ueeGMsYN65OOhxIRyWiJFH5rYp4n2CaRdWN3YDYNmAZQUlLCvHnz\nEogWd6fuFNbX8qnRzvtH1nFo/TLmrU/qLtKqsrIy6efUEZQrOcqVHOVKToflcvcWB2ACMCdu+g7g\njkZt5gATgvE84G1iRf+YtvHtWhrKysq8rcrLy9u8bjopV3KUKznKlZyumAtY5K3U1qNDIt92LgRG\nm9kIMysg9mXtrEZtZgE3BuMfB54LgswCrg3O+hkBjAZea8Pnk4iIpEirh3o8dsz+VmJ767nADHdf\naWbTiX3CzALuAx4KvrzdR+zDgaDdn4h9ERwBvuRpPqNHRERaltAvd919NjC70bw748ZrgE80s+73\nge+3I6OIiKSQTmwXEckyKvwiIllGhV9EJMuo8IuIZBkVfhGRLGOx0+07FzPbA2xq4+r9iP2ArLNR\nruQoV3KUKzldMddwd++fSMNOWfjbw8wWufv4sHM0plzJUa7kKFdysj2XDvWIiGQZFX4RkSzTFQv/\nb8MO0AzlSo5yJUe5kpPVubrcMX4REWlZV9zjFxGRFmRs4W9PB/BpzDTUzMrNbLWZrTSzf2uizUQz\nO2hmS4PhzqbuKw3ZNprZG8FjLmpiuZnZL4LttdzMxnVAppPitsNSMztkZl9p1KZDtpeZzTCz3Wa2\nIm7e8WY218zWBrdNdulmZjcGbdaa2Y1NtUlxrh+b2ZvB6/S4mfVuZt0WX/M05PqOmW2Le62ubGbd\nFv9205Dr0bhMG81saTPrpnN7NVkbQnuPJXrh/s40ELs89DpgJFAALAPGNmrzReCeYPxa4NEOyDUQ\nGBeM9wTWNJFrIvBECNtsI9CvheVXAk8S60DnfODVEF7TncTORe7w7QVcDIwDVsTN+xFwezB+O/DD\nJtY7Hlgf3PYJxvukOddlQF4w/sOmciXymqch13eAryfwOrf4t5vqXI2W/xS4M4Tt1WRtCOs9lql7\n/O90AO/udcDRDuDjTQEeCMYfAz4QdACfNu6+w92XBOOHgdWkqY/hNJgCPOgxC4DeZjawAx//A8A6\nd2/rD/faxd1fINaXRLz499ADwNVNrHo5MNfd97n7fmAuMDmdudz9aXePBJMLgCGperz25EpQIn+7\nackV/P1/EngkVY+XqBZqQyjvsUwt/E11AN+4wB7TATxwtAP4DhEcWjobeLWJxRPMbJmZPWlmp3ZQ\nJAeeNrPFFuvfuLFEtmk6XUvzf5BhbC+AEnffAbE/XOCEJtqEvd0+Tew/taa09pqnw63BIagZzRy2\nCHN7vQ/Y5e5rm1neIdurUW0I5T2WqYW/PR3Ap52ZFQN/Ab7i7ocaLV5C7HDGmcAvgb91RCbgQncf\nB1wBfMnMLm60PMztVQBcBfy5icVhba9EhbndvkmsZ7uHm2nS2muear8GRgFnATuIHVZpLLTtBVxH\ny3v7ad9erdSGZldrYl67tlmmFv6twNC46SHA9ubamFke0Iu2/WuaFDPLJ/bCPuzuf2283N0PuXtl\nMD4byDezfunO5e7bg9vdwOPE/uWOl8g2TZcrgCXuvqvxgrC2V2DX0cNdwe3uJtqEst2CL/g+DFzv\nwYHgxhJ4zVPK3Xe5e4O7R4F7m3m8sLZXHvAx4NHm2qR7ezVTG0J5j2Vq4W9PB/BpExxDvA9Y7e7/\n00ybAUe/azCzc4m9BnvTnKuHmfU8Ok7sy8EVjZrNAqZazPnAwaP/gnaAZvfEwtheceLfQzcCf2+i\nzRzgMjPrExzauCyYlzZmNhm4DbjK3auaaZPIa57qXPHfCX20mcdL5G83HS4F3nT3rU0tTPf2aqE2\nhPMeS8c32B0xEDsLZQ2xMwS+GcybTuyPAaCI2KGDCuA1YGQHZLqI2L9gy4GlwXAl8Hng80GbW4GV\nxM5mWABc0AG5RgaPtyx47KPbKz6XAXcH2/MNYHwHvY7diRXyXnHzOnx7Efvg2QHUE9vD+gyx74Se\nBdYGt8cHbccDv4tb99PB+6wCuLkDclUQO+Z79D129Oy1QcDsll7zNOd6KHjvLCdW0AY2zhVMv+dv\nN525gvn3H31PxbXtyO3VXG0I5T2mX+6KiGSZTD3UIyIibaTCLyKSZVT4RUSyjAq/iEiWUeEXEcky\nKvwiIllGhV9EJMuo8IuIZJn/D1KvdxtNdTEXAAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}