{"cells":[{"cell_type":"markdown","metadata":{"id":"LSw75KkTdnet","nbpages":{"level":0,"link":"[](https://jckantor.github.io/CBE30338/01.02-Python-Basics.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":{"id":"UbTZxT9zdnez","nbpages":{"level":0,"link":"[](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html)","section":""}},"source":["\n","< [1.1 Getting Started with Python and Jupyter Notebooks](https://jckantor.github.io/CBE30338/01.01-Getting-Started-with-Python-and-Jupyter-Notebooks.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [1.3 Python Conditionals and Libraries](https://jckantor.github.io/CBE30338/01.03-Python-Conditionals-and-Libraries.html)

\"Open

\"Download\"\n"]},{"cell_type":"markdown","metadata":{"nbpages":{"level":0,"link":"[](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html)","section":""},"id":"BaVKU36_qhjv"},"source":["# Introduction to Python in Jupyter Notebook/Google Colab"]},{"cell_type":"code","execution_count":null,"metadata":{"nbpages":{"level":0,"link":"[](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html)","section":""},"id":"LEVXrnU0qhjv"},"outputs":[],"source":["#!pip install -q -r requirements.txt"]},{"cell_type":"markdown","metadata":{"id":"Bnh2iPUbst5v"},"source":["# 1.1 What is Google Colab\n","\n","* Free to use for non-commercial use\n","* Easy access to high computational power (CPUs, GPUs)\n","* Easy start (no need to install or tune)\n","* Connected to Google Drive\n","\n"]},{"cell_type":"markdown","metadata":{"id":"wNr0hLX3dne0","nbpages":{"level":1,"link":"[1.2 Python Basics](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2-Python-Basics)","section":"1.2 Python Basics"}},"source":["# 1.2 Python Basics\n","\n","**An edit of Tutorial by Jacob Gerace**"]},{"cell_type":"markdown","metadata":{"id":"5SL1fUv0dne0","nbpages":{"level":2,"link":"[1.2.1 What I hope you'll get out of this tutorial](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.1-What-I-hope-you'll-get-out-of-this-tutorial)","section":"1.2.1 What I hope you'll get out of this tutorial"}},"source":["## 1.2.1 What I hope you'll get out of this tutorial\n","* The feeling that you'll \"know where to start\" when you see python code.\n","* (You won't be a python expert after one hour)\n","* Basics to variables, lists, conditionals, functions, loops, and the numpy package.\n","* Resources to look further"]},{"cell_type":"markdown","metadata":{"id":"IOaAVswwdne0","nbpages":{"level":3,"link":"[1.2.1.1 Why Python?](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.1.1-Why-Python?)","section":"1.2.1.1 Why Python?"}},"source":["### 1.2.1.1 Why Python?\n","\n","1. Clean syntax\n","2. The same code can run on all Operating Systems\n","3. **Extensive first and third party libraries (of particular note for our purposes is NumPy)**"]},{"cell_type":"markdown","metadata":{"id":"rRfPHXPKdne1","nbpages":{"level":3,"link":"[1.2.1.2 Markdown Sidenote](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.1.2-Markdown-Sidenote)","section":"1.2.1.2 Markdown Sidenote"}},"source":["### 1.2.1.2 Markdown Sidenote\n"," * This text is written in a Markdown block. Markdown is straightforward way to format writeups in Jupyter, but I won't cover it here for the sake of brevity.\n"," * See if you can use Markdown in your next homework, here's a link that explains the formatting: https://daringfireball.net/projects/markdown/syntax .\n"," * You can also look at existing Markdown examples (i.e. this worksheet) and emulate the style. Double click a Markdown box in Jupyter to show the code.\n"]},{"cell_type":"markdown","metadata":{"id":"C1gGyXPwdne1","nbpages":{"level":3,"link":"[1.2.1.3 LaTeX Sidenote](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.1.3-LaTeX-Sidenote)","section":"1.2.1.3 LaTeX Sidenote"}},"source":["### 1.2.1.3 LaTeX Sidenote\n","* LaTeX (pronounced \"La-tech\") is a language itself used widely to write documents with symbolic math\n","* When you add a mathematical formula to these markdown blocks, the math is in LaTeX.\n","* Ex from class: $$V \\frac{dC}{dt} = u(t) - Q C(t)$$\n","* A good resource: https://en.wikibooks.org/wiki/LaTeX/Mathematics\n","\n"]},{"cell_type":"markdown","metadata":{"id":"3Y_C4LEDdne1","nbpages":{"level":2,"link":"[1.2.2 Python Basics](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2-Python-Basics)","section":"1.2.2 Python Basics"}},"source":["## 1.2.2 Python Basics"]},{"cell_type":"markdown","metadata":{"id":"DJVJUKvFdne2","nbpages":{"level":3,"link":"[1.2.2.1 Variables](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.1-Variables)","section":"1.2.2.1 Variables"}},"source":["### 1.2.2.1 Variables"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":323,"status":"ok","timestamp":1622104823853,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"J-mTXR3Z-sEo","outputId":"41c54501-f78d-460d-807f-9fce231d3301"},"outputs":[{"name":"stdout","output_type":"stream","text":["1\n"]}],"source":["a='1'\n","print(a)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":220,"status":"ok","timestamp":1622104860373,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"PXczimGNdne2","nbpages":{"level":3,"link":"[1.2.2.1 Variables](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.1-Variables)","section":"1.2.2.1 Variables"},"outputId":"5bf7c036-c509-4b42-ca82-0d0ba6722716"},"outputs":[{"name":"stdout","output_type":"stream","text":["42\n","3.1415\n"]}],"source":["#A variable stores a piece of data and gives it a name\n","answer = 42\n","\n","#answer contained an integer because we gave it an integer!\n","\n","is_it_thursday = True\n","is_it_wednesday = False\n","\n","#these both are 'booleans' or true/false values\n","\n","pi_approx = 3.1415\n","\n","#This will be a floating point number, or a number containing digits after the decimal point\n","\n","my_name = \"Jacob\"\n","#This is a string datatype, the name coming from a string of characters\n","\n","#Data doesn't have to be a singular unit\n","\n","#p.s., we can print all of these with a print command. For Example:\n","print(answer)\n","print(pi_approx)"]},{"cell_type":"markdown","metadata":{"id":"KCDYCTgmdne3","nbpages":{"level":3,"link":"[1.2.2.2 More Complicated Data Types](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.2-More-Complicated-Data-Types)","section":"1.2.2.2 More Complicated Data Types"}},"source":["### 1.2.2.2 More Complicated Data Types"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":193,"status":"ok","timestamp":1622104896239,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"s76leyH1dne3","nbpages":{"level":3,"link":"[1.2.2.2 More Complicated Data Types](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.2-More-Complicated-Data-Types)","section":"1.2.2.2 More Complicated Data Types"},"outputId":"80d1ab1c-ed82-4f68-99c9-261ffc27a9eb","scrolled":true},"outputs":[{"name":"stdout","output_type":"stream","text":["['Green', 'Blue', 'Red']\n","[10, 20, 30, 40, 50, 'Sixty']\n","Green\n","Red\n","Rosa Parks\n"]}],"source":["\n","#What if we want to store many integers? We need a list!\n","prices = [10, 20, 30, 40, 50]\n","\n","#This is a way to define a list in place. We can also make an empty list and add to it.\n","colors = []\n","\n","colors.append(\"Green\")\n","colors.append(\"Blue\")\n","colors.append(\"Red\")\n","\n","print(colors)\n","\n","#We can also add unlike data to a list\n","prices.append(\"Sixty\")\n","\n","#As an exercise, look up lists in python and find out how to add in the middle of a list!\n","\n","print(prices)\n","#We can access a specific element of a list too:\n","\n","print(colors[0])\n","print(colors[2])\n","\n","#Notice here how the first element of the list is index 0, not 1!\n","#Languages like MATLAB are 1 indexed, be careful!\n","\n","#In addition to lists, there are tuples\n","#Tuples behave very similarly to lists except that you can't change them\n","# after you make them\n","\n","#An empty Tuple isn't very useful:\n","empty_tuple = ()\n","\n","#Nor is a tuple with just one value:\n","one_tuple = (\"first\",)\n","\n","#But tuples with many values are useful:\n","rosa_parks_info = (\"Rosa\", \"Parks\", 1913, \"February\", 4)\n","\n","#You can access tuples just like lists\n","print(rosa_parks_info[0] + \" \" + rosa_parks_info[1])\n","\n","# You cannot modify existing tuples, but you can make new tuples that extend\n","# the information.\n","# I expect Tuples to come up less than lists. So we'll just leave it at that."]},{"cell_type":"markdown","metadata":{"id":"jsX7mYBIdne4","nbpages":{"level":3,"link":"[1.2.2.3 Using Variables](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.3-Using-Variables)","section":"1.2.2.3 Using Variables"}},"source":["### 1.2.2.3 Using Variables"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":461,"status":"ok","timestamp":1622105024526,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"TGZPm8i1dne4","nbpages":{"level":3,"link":"[1.2.2.3 Using Variables](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.3-Using-Variables)","section":"1.2.2.3 Using Variables"},"outputId":"ce4fc694-d66f-4dd8-ce24-e9d33b649aff","scrolled":true},"outputs":[{"name":"stdout","output_type":"stream","text":["8.0\n","3.5\n","12.9375\n","2.5555555555555554\n","1\n"]}],"source":["float1 = 5.75\n","float2 = 2.25\n","#Addition, subtraction, multiplication, division are as you expect\n","\n","print(float1 + float2)\n","print(float1 - float2)\n","print(float1 * float2)\n","print(float1 / float2)\n","\n","#Here's an interesting one that showed up in the first homework in 2017. Modulus:\n","print(5 % 2)"]},{"cell_type":"markdown","metadata":{"id":"HLww7Rp2dne5","nbpages":{"level":3,"link":"[1.2.2.4 Importing in Python: Math and plotting](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.4-Importing-in-Python:-Math-and-plotting)","section":"1.2.2.4 Importing in Python: Math and plotting"}},"source":["### 1.2.2.4 Importing in Python: Math and plotting"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":181,"status":"ok","timestamp":1622105063936,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"BR-E5Vgfdne5","nbpages":{"level":3,"link":"[1.2.2.4 Importing in Python: Math and plotting](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.4-Importing-in-Python:-Math-and-plotting)","section":"1.2.2.4 Importing in Python: Math and plotting"},"outputId":"90e4e39e-6aa1-48cd-e11c-45c1d9d795f8"},"outputs":[{"name":"stdout","output_type":"stream","text":["1.749199854809259\n","9.487735836358526\n","32.0\n","32.0\n","[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]\n"]}],"source":["#Just about every standard math function on a calculator has a python equivalent pre made.\n","#however, they are from the 'math' package in python. Let's add that package!\n","import math as m\n","print(m.log(float1))\n","print(m.exp(float2))\n","print(m.pow(2,5))\n","# There is a quicker way to write exponents if you want:\n","print(2.0**5.0)\n","\n","#Like in MATLAB, you can expand the math to entire lists\n","list3 = [1, 2, 3, 4, 5]\n","print(2 * list3)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"elapsed":532,"status":"ok","timestamp":1622105300659,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"AK32eNtFdne5","nbpages":{"level":3,"link":"[1.2.2.4 Importing in Python: Math and plotting](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.4-Importing-in-Python:-Math-and-plotting)","section":"1.2.2.4 Importing in Python: Math and plotting"},"outputId":"ae548221-c5c8-480b-a47a-681b7a23f076"},"outputs":[{"data":{"text/plain":["[]"]},"execution_count":7,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABB8klEQVR4nO3dd3iUdb7//+ekk04g1IQSek1BwWADRQEbWOhn1V2P67pUURRYlcXdNRZWV8qunuOues6hI2BFRRQURUSS0AOEGgIJJTAJKZNk5vP7w6/5LUpJIDP3TPJ6XNdcl5nck/v1YTKZl/f7nhmbMcYgIiIiYgE/qwOIiIhI/aUiIiIiIpZRERERERHLqIiIiIiIZVRERERExDIqIiIiImIZFRERERGxjIqIiIiIWCbA6gAX43K5OHr0KBEREdhsNqvjiIiISDUYYygqKqJFixb4+V38mIdXF5GjR48SHx9vdQwRERG5DDk5OcTFxV10G68uIhEREcCPC4mMjLQ4jYiIiFRHYWEh8fHxVc/jF+PVReSncUxkZKSKiIiIiI+pzmkVOllVRERELKMiIiIiIpZRERERERHLqIiIiIiIZVRERERExDIqIiIiImIZFRERERGxjIqIiIiIWEZFRERERCzjsSLywgsvYLPZmDRpkqd2KSIiIl7OI0Vk06ZNvPHGG/Ts2dMTuxMREREf4fYicvbsWcaMGcN///d/07BhQ3fvTkRERHyI24vI2LFjuf322xkwYMAlt3U4HBQWFp5zERERkdp3pqScR/73B77JPmlpDrd++u6iRYtIT09n06ZN1do+LS2NmTNnujOSiIhIvbf50GkmLMwg90wp23MLWTulH4H+1rx+xW17zcnJYeLEicyfP5+QkJBq3WbatGnY7faqS05OjrviiYiI1Dsul+GNdfsY8cYGcs+U0qZRKG/8qpdlJQTAZowx7vjBK1eu5O6778bf37/qOqfTic1mw8/PD4fDcc73zqewsJCoqCjsdjuRkZHuiCkiIlIvFBSX8/iSTL7cfQKAOxNb8Pzd3YkICaz1fdXk+dtto5mbb76Zbdu2nXPdr3/9azp37sxTTz11yRIiIiIiteP7AwVMWJhBXmEZwQF+/PGuboy8Oh6bzWZ1NPcVkYiICLp3737OdWFhYTRq1OgX14uIiEjtc7kMf1+bzSur9+AykBAbxrzRKXRp7j1TBreerCoiIiLWOFHkYPKSTL7e++OrYu5JbsmfhnYnLNi7nvo9mmbt2rWe3J2IiEi99O2+k0xclMmJIgchgX48N6Q7w3rFecUo5ue8qxaJiIjIZXO6DHO+2MvsNXtxGejQJJy/j0mhQ9MIq6NdkIqIiIhIHXC8sIyJizLZsP8UAMOvimPmXd1pEOTdLw5REREREfFxX+89wWOLMzl5tpzQIH/+cnd37k6OszpWtaiIiIiI+KhKp4u/fb6XeWuzMQY6N4tg3pgU2sWGWx2t2lREREREfNAxeykTF2by/cECAEb3acWzd3QlJNC7RzE/pyIiIiLiY77MOs7kJZmcLqkgPDiAtHt6cGdiC6tjXRYVERERER9R4XQx69PdvPHVfgC6t4xk7qgU2jQOszjZ5VMRERER8QG5Z0oZvyCd9MNnAHggtTXTb+9CcIBvjWJ+TkVERETEy63emc8TS7dgL60gIiSAl+7tyeAeza2OVStURERERLxUeaWLFz/J4p/rDwCQGBfF3NEpxMeEWpys9qiIiIiIeKGcghLGLUhnyxE7AA9d15anBnUmKMDP4mS1S0VERETEy3yy/RhTlm2lqKySqAaBzBqWyC1dm1odyy1URERERLyEo9LJ8x/t4p0NhwBIaRXNnNEptIxuYHEy91ERERER8QIHTxYzbmE623MLAXjkxgSeuLUTgf51axTzcyoiIiIiFvtgy1GmLd/GWUclDUMDeWV4Ev07N7E6lkeoiIiIiFikrMLJcx/uZMHGwwD0bhPDa6OSaB5Vd0cxP6ciIiIiYoF9J84ydn46WXlF2Gwwtl97Jg3oQEAdH8X8nIqIiIiIh63IOMIfVmynpNxJ4/AgXh2RxPUdYq2OZQkVEREREQ8pLXcy4/3tLPnhCACpCY14bWQSTSJDLE5mHRURERERD9ibX8Tv56ez9/hZbDaYeHMHxt/UAX8/m9XRLKUiIiIi4kbGGJZuPsKz722nrMJFbEQwr41Mom+7xlZH8woqIiIiIm5S7KjkmZXbWZ6RC8D1HRrz6ogkGocHW5zMe6iIiIiIuMGuY4WMW5DOvhPF+Nng8Vs78eiN7fCr56OYn1MRERERqUXGGBZ+n8PMD3bgqHTRLDKE2aOS6d02xupoXklFREREpJYUlVUwfcV2PthyFIB+nWJ5ZXgSMWFBFifzXioiIiIitWB7rp1xC9I5eKoEfz8bTw7sxMPXJ2gUcwkqIiIiIlfAGMP/fneIP3+4i3Kni5bRDZg9KplerRtaHc0nqIiIiIhcJntpBdOWb+XjbXkADOjSlFnDehIdqlFMdamIiIiIXIYtOWcYtzCdnIJSAv1tTB3chd9c2wabTaOYmlARERERqQFjDP/65iAvrNpFhdMQ17AB80ankBgfbXU0n6QiIiIiUk1nSsqZsmwrq3fmAzCoWzNevK8nUQ0CLU7mu9z6WcP/+Mc/6NmzJ5GRkURGRpKamsqqVavcuUsRERG3SD98mttnr2f1znyC/P14bkg3/vEfKSohV8itR0Ti4uJ44YUX6NChA8YY3nnnHYYMGUJGRgbdunVz565FRERqhctl+O+v9/Pyp7updBlaNwpl3ugUureMsjpanWAzxhhP7jAmJoaXX36Zhx566JLbFhYWEhUVhd1uJzIy0gPpRERE/n8FxeU8viSTL3efAOCOns1Ju6cHESE6CnIxNXn+9tg5Ik6nk6VLl1JcXExqaup5t3E4HDgcjqqvCwsLPRVPRETkHN8fKGDCwgzyCssICvDjj3d2Y1TveL0qppa5vYhs27aN1NRUysrKCA8PZ8WKFXTt2vW826alpTFz5kx3RxIREbkgl8vwj3X7eGX1HpwuQ0JsGPNGp9CluY7Mu4PbRzPl5eUcPnwYu93OsmXLePPNN1m3bt15y8j5jojEx8drNCMiIh5x8qyDxxZn8vXekwDcndySPw/tTliwXmRaEzUZzXj8HJEBAwbQrl073njjjUtuq3NERETEUzbsO8XERRkcL3IQEujHc0O6M6xXnEYxl8ErzxH5icvlOueoh4iIiJWcLsOcL/Yye81eXAY6NAln3pgUOjaNsDpaveDWIjJt2jQGDx5Mq1atKCoqYsGCBaxdu5ZPP/3UnbsVERGpluNFZUxalMm3+04BMKxXHDOHdCM0SKMYT3Hrv/Tx48e5//77OXbsGFFRUfTs2ZNPP/2UW265xZ27FRERuaT1e08yaXEGJ8+WExrkz5+HdueelDirY9U7bi0i//znP93540VERGqs0unib5/vZd7abIyBzs0imDs6hfZNwq2OVi/p2JOIiNQbefYyJizM4PuDBQCM7tOKZ+/oSkigv8XJ6i8VERERqRe+3H2cx5dsoaC4nPDgAJ6/pwd3JbawOla9pyIiIiJ1WoXTxazPdvPGuv0AdGsRydzRKbRtHGZxMgEVERERqcNyz5QyYWEGmw+dBuD+1NZMv62LRjFeREVERETqpM935vP40i3YSyuICAngpXt7MrhHc6tjyc+oiIiISJ1SXunipU+yeHP9AQAS46KYMyqFVo1CLU4m56MiIiIidUZOQQnjFmawJecMAL+5ti1TB3cmKMDP2mByQSoiIiJSJ3yy/RhTlm2lqKySqAaBzBqWyC1dm1odSy5BRURERHyao9LJ8x/t4p0NhwBIbhXNnFHJxDXUKMYXqIiIiIjPOniymHEL09meWwjAIzcm8MStnQj01yjGV6iIiIiIT/pw61GmvruNs45KGoYG8srwJPp3bmJ1LKkhFREREfEpZRVOnvtwJws2Hgbg6jYNmT0qmeZRDSxOJpdDRURERHzGvhNnGTs/nay8Imw2+H2/djw2oCMBGsX4LBURERHxCSszcpm+Yhsl5U4ahQXx6ogkbugYa3UsuUIqIiIi4tVKy5388f0dLP4hB4BrEmKYPTKZJpEhFieT2qAiIiIiXmtvfhFjF6SzJ/8sNhtMuKkDE27ugL+fzepoUktURERExCst/SGHZ9/bQWmFk9iIYF4bkUTf9o2tjiW1TEVERES8SrGjkmfe287y9FwAru/QmFeGJxEbEWxxMnEHFREREfEaWXmFjJ2fzr4TxfjZYPItHfl9v/b4aRRTZ6mIiIiI5YwxLNqUwx/f34Gj0kXTyGBmj0ymT0Ijq6OJm6mIiIiIpYrKKpi+YjsfbDkKQL9Osfx1WCKNwjWKqQ9URERExDLbc+2MW5DOwVMl+PvZmDKwE7+9PkGjmHpERURERDzOGMP/fXeIP324i3KnixZRIcwZnUyv1jFWRxMPUxERERGPKiyrYOq7W/l4Wx4AA7o0YdawRKJDgyxOJlZQEREREY/ZeuQMYxekk1NQSqC/jacGdeah69pis2kUU1+piIiIiNsZY3jrm4OkrdpFhdMQ17ABc0enkBQfbXU0sZiKiIiIuNWZknKmLNvK6p35AAzq1owX7+tJVINAi5OJN1ARERERt0k/fJrxCzLIPVNKkL8ff7i9C/enttYoRqqoiIiISK1zuQxvrt/PS5/sptJlaN0olHmjU+jeMsrqaOJlVERERKRWFRSX88TSLXyRdRyAO3o2J+2eHkSEaBQjv6QiIiIitWbTwQImLMzgmL2MoAA/ZtzZldG9W2kUIxfk584fnpaWxtVXX01ERARNmjRh6NCh7N692527FBERC7hchnlfZjPyv77jmL2MhMZhrPz9tYzpo/NB5OLcWkTWrVvH2LFj+e6771i9ejUVFRXceuutFBcXu3O3IiLiQSfPOnjgre95+dPdOF2Gu5Nb8sH46+jaItLqaOIDbMYY46mdnThxgiZNmrBu3TpuuOGGS25fWFhIVFQUdrudyEj9QouIeJsN+04xcVEGx4schAT68dxd3Rl2VZyOgtRzNXn+9ug5Ina7HYCYmPN/loDD4cDhcFR9XVhY6JFcIiJSM06XYe4X2by2Zg8uAx2ahDNvTAodm0ZYHU18jMeKiMvlYtKkSVx77bV07979vNukpaUxc+ZMT0USEZHLcLyojEmLMvl23ykAhvWKY+aQboQG6fUPUnMeG808+uijrFq1ivXr1xMXF3febc53RCQ+Pl6jGRERL7F+70kmLc7g5NlyQoP8+dOQ7tzb6/x/06X+8rrRzLhx4/jwww/56quvLlhCAIKDgwkODvZEJBERqYFKp4vX1uxl7pfZGAOdm0Uwd3QK7ZuEWx1NfJxbi4gxhvHjx7NixQrWrl1L27Zt3bk7ERFxgzx7GRMWZfD9gQIARvVuxYw7uxIS6G9xMqkL3FpExo4dy4IFC3jvvfeIiIggLy8PgKioKBo0aODOXYuISC1Yu/s4k5dsoaC4nLAgf9Lu7cldiS2sjiV1iFvPEbnQy7feeustHnzwwUveXi/fFRGxRoXTxV8/28Pr6/YB0LV5JPPGpNC2cZjFycQXeM05Ih58ixIREaklR8+UMn5hBpsPnQbg/tTWTL+ti0Yx4hZ6rZWIiFT5fGc+TyzbwpmSCiKCA3jxvp7c1qO51bGkDlMRERERyitdvPRJFm+uPwBAz7go5o5KoVWjUIuTSV2nIiIiUs/lFJQwbmEGW3LOAPCba9sydXBnggLc+nFkIoCKiIhIvfbJ9jyeXLaFwrJKIkMCmDUskVu7NbM6ltQjKiIiIvWQo9JJ2sdZvP3tQQCSW0UzZ1QycQ01ihHPUhEREalnDp0qZtyCDLbl/vhBpI/ckMATAzsR6K9RjHieioiISD3y4dajTH13G2cdlTQMDeSvwxO5qXNTq2NJPaYiIiJSD5RVOPnThzuZv/EwAFe3acjsUck0j9K7XIu1VEREROq4/SfOMnZBBruOFQLw+37tmHxLRwI0ihEvoCIiIlKHrczIZfqKbZSUO2kUFsQrI5K4sWOs1bFEqqiIiIjUQaXlTv74/g4W/5ADwDUJMbw2MpmmkSEWJxM5l4qIiEgdk328iLHzM9idX4TNBuNv6sDEmzvg73f+DyIVsZKKiIhIHbJs8xGeWbmd0gonsRHBvDYiib7tG1sdS+SCVEREROqAkvJKnl65neXpuQBc174xr45IIjYi2OJkIhenIiIi4uOy8goZOz+dfSeK8bPB5Fs68mi/9hrFiE9QERER8VHGGBZvymHG+ztwVLpoGhnM7JHJ9EloZHU0kWpTERER8UFnHZVMX76N97ccBeDGjrG8MjyRRuEaxYhvUREREfExO47aGbcggwMni/H3s/HErZ145IYE/DSKER+kIiIi4iOMMfzfxsP86cOdlFe6aBEVwpzRyfRqHWN1NJHLpiIiIuIDCssqmPbuNj7adgyAAV2a8PJ9iTQMC7I4mciVUREREfFyW4+cYdyCDA4XlBDgZ2Pq4M48dF1bbDaNYsT3qYiIiHgpYwxvf3uQ5z/eRYXT0DK6AXNHJ5PcqqHV0URqjYqIiIgXspdUMGXZFj7bmQ/AwG5NeeneRKJCAy1OJlK7VERERLxMxuHTjFuQQe6ZUoL8/fjD7V24P7W1RjFSJ6mIiIh4CWMMb359gBc/yaLSZWjdKJS5o1LoERdldTQRt1ERERHxAqeLy3li6RbWZB0H4PaezUm7pweRIRrFSN2mIiIiYrEfDhYwfmEGx+xlBAX48ewdXRnTp5VGMVIvqIiIiFjE5TK8/tU+/vrZHpwuQ0LjMOaOTqFri0iro4l4jIqIiIgFTp51MHnJFr7acwKAoUkt+PPdPQgP1p9lqV/0Gy8i4mHf7T/FhIUZHC9yEBLox8y7ujH8qniNYqReUhEREfEQp8sw78ts/vb5HlwG2jcJZ97oFDo1i7A6mohl/Nz5w7/66ivuvPNOWrRogc1mY+XKle7cnYiI1zpeVMb9/9rIK6t/LCH39Yrj/XHXqoRIvefWIlJcXExiYiLz5s1z525ERLzaN9knue219XyTfYoGgf78dVgis4YlEhqkg9Iibn0UDB48mMGDB7tzFyIiXsvpMrz2+R7mfJmNMdCpaQTzxiTTvomOgoj8xKvquMPhwOFwVH1dWFhoYRoRkcuXX1jGhIUZbDxQAMCo3vHMuLMbIYH+FicT8S5eVUTS0tKYOXOm1TFERK7I2t3HmbxkCwXF5YQF+fP8PT0YktTS6lgiXsmt54jU1LRp07Db7VWXnJwcqyOJiFRbpdPFi59k8eBbmygoLqdr80g+GH+dSojIRXjVEZHg4GCCg4OtjiEiUmNHz5QyYWEGPxw6DcCvrmnNH27volGMyCV4VREREfFFa3bl8/jSLZwpqSAiOIAX7u3J7T2bWx1LxCe4tYicPXuW7Ozsqq8PHDhAZmYmMTExtGrVyp27FhFxu/JKFy9/msV/f30AgB4to5g7OpnWjcIsTibiO9xaRH744Qf69+9f9fXkyZMBeOCBB3j77bfduWsREbfKKShh/MIMMnPOAPDra9swdXBnggM0ihGpCbcWkX79+mGMcecuREQ87tMdeUxZuoXCskoiQwJ4eVgiA7s1szqWiE/SOSIiItXkqHSS9nEWb397EICk+GjmjEomPibU2mAiPkxFRESkGg6dKmbcggy25doB+O0NCUwZ2IlAf696FwQRn6MiIiJyCR9tPcbUd7dS5KgkOjSQV4YnclPnplbHEqkTVERERC6grMLJnz/ayf99dxiAq1o3ZPaoZFpEN7A4mUjdoSIiInIe+0+cZeyCDHYd+/Ezr37frx2Tb+lIgEYxIrVKRURE5Gfey8xl+vJtFJc7aRQWxCsjkrixY6zVsUTqJBUREZH/p7TcycwPdrBo04+fc9WnbQyzRyXTNDLE4mQidZeKiIgIkH28iLHzM9idX4TNBuNv6sCEm9prFCPiZioiIlLvLdt8hGdWbqe0wknj8GBeG5nEte0bWx1LpF5QERGRequkvJJnVu7g3fQjAFzbvhGvjkiiSYRGMSKeoiIiIvXS7rwixi5IJ/v4WfxsMGlAR8b2b4+/n83qaCL1ioqIiNQrxhiW/JDDs+/twFHpomlkMK+NTOaahEZWRxOpl1RERKTeOOuo5OkV21iZeRSAGzvG8srwRBqFB1ucTKT+UhERkXph59FCxi1IZ//JYvz9bDxxayceuSEBP41iRCylIiIidZoxhvkbD/Pchzspr3TRPCqEOaOSuapNjNXRRAQVERGpwwrLKpi2fBsfbT0GwM2dmzBrWCINw4IsTiYiP1EREZE6adsRO2MXpHO4oIQAPxtTB3fmoevaYrNpFCPiTVRERKROMcbwzrcHef7jLMqdLlpGN2Du6GSSWzW0OpqInIeKiIjUGfaSCp58dwuf7sgH4NauTXn5vkSiQgMtTiYiF6IiIiJ1Qsbh04xfmMGR06UE+tuYflsXHuzbRqMYES+nIiIiPs0Ywz/XH+CFVVlUugytYkKZOzqZnnHRVkcTkWpQERERn3W6uJwnlm5hTdZxAG7v0Zy0e3sQGaJRjIivUBEREZ+0+VAB4xdkcNReRlCAH8/c0ZX/6NNKoxgRH6MiIiI+xeUyvPHVfmZ9thuny9C2cRhzRyfTrUWU1dFE5DKoiIiIzzh11sHkJVtYt+cEAEOSWvCXu3sQHqw/ZSK+So9eEfEJG/efYsKiDPILHQQH+PHckG4MvypeoxgRH6ciIiJezeky/P3LbF79fA8uA+1iw/j7mF50ahZhdTQRqQUqIiLitU4UOZi0OINvsk8BcG9KHH8a2o3QIP3pEqkr9GgWEa/0TfZJJi7K5ORZBw0C/fnT0O7c1yvO6lgiUstURETEqzhdhtfW7GXOF3sxBjo1jWDu6GQ6NNUoRqQuUhEREa+RX1jGxEUZfLe/AICRV8cz485uNAjytziZiLiLnyd2Mm/ePNq0aUNISAh9+vTh+++/98RuRcSHrNtzgtte+5rv9hcQFuTPayOTeOHeniohInWc24vI4sWLmTx5MjNmzCA9PZ3ExEQGDhzI8ePH3b1rEfEBlU4XL32SxQP/+p5TxeV0aR7JB+OvY0hSS6ujiYgH2Iwxxp076NOnD1dffTVz584FwOVyER8fz/jx45k6depFb1tYWEhUVBR2u53IyEh3xhQRCxyzlzJhYQabDp4G4D+uacXTt3clJFBHQUR8WU2ev916jkh5eTmbN29m2rRpVdf5+fkxYMAANmzY8IvtHQ4HDoej6uvCwkJ3xhMRC32Rlc/jS7ZwuqSCiOAA0u7twR09W1gdS0Q8zK2jmZMnT+J0OmnatOk51zdt2pS8vLxfbJ+WlkZUVFTVJT4+3p3xRMQCFU4Xz3+8i9+8/QOnSyro0TKKDydcpxIiUk955GTV6po2bRp2u73qkpOTY3UkEalFR06XMOz1DfzXV/sBeLBvG5Y9mkrrRmEWJxMRq7h1NNO4cWP8/f3Jz88/5/r8/HyaNWv2i+2Dg4MJDg52ZyQRscinO/KYsnQLhWWVRIYE8NJ9iQzq/su/AyJSv7j1iEhQUBC9evVizZo1Vde5XC7WrFlDamqqO3ctIl6ivNLFzA928Mj/bqawrJLE+Gg+mnC9SoiIAB54Q7PJkyfzwAMPcNVVV9G7d2/+9re/UVxczK9//Wt371pELHb4VAnjFqaz9YgdgIevb8uUgZ0JCvCqqbCIWMjtRWTEiBGcOHGCZ599lry8PJKSkvjkk09+cQKriNQtH287xlPLtlLkqCQ6NJBZ9yUyoKse9yJyLre/j8iV0PuIiPiesgonf/loF//73SEAerVuyJxRybSIbmBxMhHxFK95HxERqV8OnCxm7Px0dh778T2AHu3Xjsm3dCTQX6MYETk/FRERqRXvZeYyffk2isudxIQF8crwRPp1amJ1LBHxcioiInJFyiqczPxgBwu///F9f3q3jWH2yGSaRYVYnExEfIGKiIhctuzjZxk7P53d+UXYbDC+f3sm3NyBAI1iRKSaVERE5LK8u/kIT6/cTmmFk8bhwfxtRBLXdWhsdSwR8TEqIiJSIyXllTz73g6WbT4CQN92jfjbyCSaRGgUIyI1pyIiItW2J7+IsfPT2Xv8LH42mDSgI2P7t8ffz2Z1NBHxUSoiInJJxhiW/JDDjPd3UFbhoklEMK+NTCa1XSOro4mIj1MREZGLOuuo5OkV21iZeRSA6zs05tURSTQO1wdUisiVUxERkQvaebSQcQvS2X+yGH8/G4/f2pHf3dAOP41iRKSWqIiIyC8YY1jw/WFmfrCT8koXzaNCmD0qmavbxFgdTUTqGBURETlHUVkFU5dv46OtxwC4qXMTZg1LJCYsyOJkIlIXqYiISJVtR+yMW5jOoVMlBPjZeGpQZx66rq1GMSLiNioiIoIxhne+PcjzH2dR7nTRMroBc0Ynk9KqodXRRKSOUxERqefspRU8tWwrn+zIA+DWrk15+b5EokIDLU4mIvWBiohIPZaZc4ZxC9I5crqUQH8b02/rwoN922CzaRQjIp6hIiJSDxlj+Of6A7ywKotKl6FVTChzRyfTMy7a6mgiUs+oiIjUM2dKynli6RY+33UcgNt6NOOFe3sSGaJRjIh4noqISD2y+VAB4xdkcNReRlCAH8/c0ZX/6NNKoxgRsYyKiEg94HIZ3vhqP7M+243TZWjbOIy5o5Pp1iLK6mgiUs+piIjUcafOOnh86RbW7j4BwF2JLXj+nh6EB+vhLyLW018ikTps4/5TTFiUQX6hg+AAP/54VzdGXh2vUYyIeA0VEZE6yOky/P3LbF79fA8uA+1iw5g3JoXOzSKtjiYicg4VEZE65kSRg8cWZ7I++yQA96S05E9DuhOmUYyIeCH9ZRKpQ77NPsnExZmcKHLQINCf54Z0Y9hV8VbHEhG5IBURkTrA6TK8tmYvc77YizHQsWk480an0KFphNXRREQuSkVExMflF5YxcVEG3+0vAGDEVfH88a5uNAjytziZiMilqYiI+LCv9pzgscWZnCouJzTIn+fv7sHQ5JZWxxIRqTYVEREfVOl08crqPfx97T4AujSPZN7oZBJiwy1OJiJSMyoiIj7mmL2UCQsz2HTwNABj+rTimTu6EhKoUYyI+B4VEREf8mXWcSYvyeR0SQXhwQG8cG8P7ujZwupYIiKXzc9dP/gvf/kLffv2JTQ0lOjoaHftRqReqHC6SPt4F79+exOnSyro3jKSD8dfpxIiIj7PbUdEysvLGTZsGKmpqfzzn/90125E6rwjp0sYvzCDjMNnAHiwbxum3daZ4ACNYkTE97mtiMycOROAt99+2127EKnzPtuRx5RlW7GXVhAREsDL9/VkUPfmVscSEak1XnWOiMPhwOFwVH1dWFhoYRoR65RXukhbtYu3vjkIQGJ8NHNHJRMfE2ptMBGRWua2c0QuR1paGlFRUVWX+Hi9NbXUP4dPlXDf699WlZD/vK4tSx9JVQkRkTqpRkVk6tSp2Gy2i16ysrIuO8y0adOw2+1Vl5ycnMv+WSK+6ONtx7h99tdsPWInqkEgb95/FU/f0ZWgAK/6fwYRkVpTo9HM448/zoMPPnjRbRISEi47THBwMMHBwZd9exFfVVbh5C8f7eJ/vzsEQK/WDZk9KpmW0Q0sTiYi4l41KiKxsbHExsa6K4tIvXTgZDHjFqSz4+iP50T97sZ2PH5rRwL9dRREROo+t52sevjwYQoKCjh8+DBOp5PMzEwA2rdvT3i43oZaBOD9LUeZ9u5WisudxIQF8dfhifTv1MTqWCIiHuO2IvLss8/yzjvvVH2dnJwMwJdffkm/fv3ctVsRn1BW4WTmBztZ+P1hAHq3iWH2qGSaRYVYnExExLNsxhhjdYgLKSwsJCoqCrvdTmRkpNVxRGpF9vGzjFuQTlZeETYbjOvfnok3dyBAoxgRqSNq8vztVe8jIlLXLU8/wtMrt1NS7qRxeBCvjkji+g4670pE6i8VEREPKCmv5Nn3drBs8xEA+rZrxN9GJNEkUqMYEanfVERE3GxPfhFj56ez9/hZ/Gww8eaOjLupPf5+NqujiYhYTkVExE2MMSz94QjPvr+dsgoXTSKCeW1kMqntGlkdTUTEa6iIiLhBsaOSP6zYxsrMowBc36Exr45IonG43rBPROTfqYiI1LKdRwsZtyCd/SeL8fezMfmWjjx6Yzv8NIoREfkFFRGRWmKMYcH3h5n5wU7KK100iwxhzuhkrm4TY3U0ERGvpSIiUguKyiqYtnwbH249BkD/TrH8dXgSMWFBFicTEfFuKiIiV2h7rp2xC9I5dKqEAD8bTw7qxH9el6BRjIhINaiIiFwmYwz/s+EQf/loF+VOFy2jGzB7VDK9Wje0OpqIiM9QERG5DPbSCp5atpVPduQBMKBLU2YN60l0qEYxIiI1oSIiUkOZOWcYtyCdI6dLCfS3MW1wF359bRtsNo1iRERqSkVEpJqMMfxz/QFe/CSLCqchPqYBc0elkBgfbXU0ERGfpSIiUg1nSsp5YukWPt91HIDB3Zvxwr09iWoQaHEyERHfpiIicgmbDxUwfkEGR+1lBPn78cwdXfiPa1prFCMiUgtUREQuwOUy/NfX+3n50904XYY2jUKZOzqF7i2jrI4mIlJnqIiInMepsw4eX7qFtbtPAHBnYguev7s7ESEaxYiI1CYVEZGf+f5AAeMXppNf6CA4wI8/3tWNkVfHaxQjIuIGKiIi/4/LZfj72mxeWb0Hl4GE2DDmjU6hS/NIq6OJiNRZKiIiwIkiB5OXZPL13pMA3JPckj8N7U5YsB4iIiLupL+yUu99m32SiYszOVHkICTQj+eGdGdYrziNYkREPEBFROotp8swe81eZn+xF2OgQ5Nw/j4mhQ5NI6yOJiJSb6iISL10vLCMCYsy+G5/AQDDr4pj5l3daRDkb3EyEZH6RUVE6p2v9pzgscWZnCouJzTIn7/c3Z27k+OsjiUiUi+piEi9Uel08erne/j72n0YA52bRTBvTArtYsOtjiYiUm+piEi9cMxeysSFmXx/8MdRzOg+rXj2jq6EBGoUIyJiJRURqfO+zDrO5CWZnC6pIDw4gLR7enBnYgurY4mICCoiUodVOF3M+nQ3b3y1H4DuLSOZOyqFNo3DLE4mIiI/URGROunI6RLGL8wg4/AZAB5Ibc3027sQHKBRjIiIN1ERkTrnsx15TFm2FXtpBREhAbx0b08G92hudSwRETkPFRGpM8orXbywKot/fXMAgMS4KOaOTiE+JtTiZCIiciF+7vrBBw8e5KGHHqJt27Y0aNCAdu3aMWPGDMrLy921S6nHcgpKGPb6t1Ul5KHr2rL0d31VQkREvJzbjohkZWXhcrl44403aN++Pdu3b+fhhx+muLiYWbNmuWu3Ug+t2naMJ9/dSlFZJVENApk1LJFbuja1OpaIiFSDzRhjPLWzl19+mX/84x/s37+/WtsXFhYSFRWF3W4nMlIfxS7nKqtw8vzHu/ifDYcASGkVzexRycQ11FEQEREr1eT526PniNjtdmJiYi74fYfDgcPhqPq6sLDQE7HEBx08WczYBensOPrj78gjNybwxK2dCPR327RRRETcwGN/tbOzs5kzZw6PPPLIBbdJS0sjKiqq6hIfH++peOJD3t9ylDvmrGfH0UIahgby1oNXM21wF5UQEREfVOO/3FOnTsVms130kpWVdc5tcnNzGTRoEMOGDePhhx++4M+eNm0adru96pKTk1PzFUmdVVbhZNrybUxYmMFZRyW928Tw8cTr6d+5idXRRETkMtX4HJETJ05w6tSpi26TkJBAUFAQAEePHqVfv35cc801vP322/j5Vb/76BwR+Un28bOMW5BOVl4RNhuM7deeSQM6EKCjICIiXset54jExsYSGxtbrW1zc3Pp378/vXr14q233qpRCRH5yfL0Izy9cjsl5U4ahwfx6ogkru9Qvd9BERHxbm47WTU3N5d+/frRunVrZs2axYkTJ6q+16xZM3ftVuqQkvJKZry3g6WbjwCQmtCI10Ym0SQyxOJkIiJSW9xWRFavXk12djbZ2dnExcWd8z0PvmJYfNSe/CLGzk9n7/Gz2Gww8eYOjL+pA/5+NqujiYhILfLo+4jUlM4RqX+MMSzdfIRn39tOWYWL2IhgXhuZRN92ja2OJiIi1eS17yMicjHFjkqeXrmdFRm5AFzfoTGvDE8iNiLY4mQiIuIuKiLiFXYdK2TsgnT2nyjGzwaP39qJR29sh59GMSIidZqKiFjKGMPC73P44wc7KK900SwyhNmjkund9sLvwCsiInWHiohYpqisgukrtvPBlqMA9OsUyyvDk4gJC7I4mYiIeIqKiFhie66dcQvSOXiqBH8/G08O7MTD1ydoFCMiUs+oiIhHGWP43+8O8ecPd1HudNEyugGzRyXTq3VDq6OJiIgFVETEY+ylFUx9dyurtucBMKBLU2YN60l0qEYxIiL1lYqIeMSWnDOMW5hOTkEpgf42pg7uwm+ubYPNplGMiEh9piIibmWM4V/fHOSFVbuocBriGjZg3ugUEuOjrY4mIiJeQEVE3OZMSTlPLN3K57vyARjUrRkv3teTqAaBFicTERFvoSIibrH50GkmLMwg90wpQf5+PH1HF351TWuNYkRE5BwqIlKrXC7Df3+9n5c/3U2ly9C6USjzRqfQvWWU1dFERMQLqYhIrSkoLufxJZl8ufsEAHf0bE7aPT2ICNEoRkREzk9FRGrF9wcKmLAwg7zCMoIC/Pjjnd0Y1TteoxgREbkoFRG5Ii6X4R/r9vHK6j04XYaE2DDmjU6hS/OLf+yziIgIqIjIFTh51sFjizP5eu9JAO5Obsmfh3YnLFi/ViIiUj16xpDL8u2+k0xclMmJIgchgX48N6Q7w3rFaRQjIiI1oiIiNeJ0GeZ8sZfZa/biMtChSTjzxqTQsWmE1dFERMQHqYhItR0vLGPS4ky+3XcKgGG94pg5pBuhQfo1EhGRy6NnEKmWr/ee4LHFmZw8W05okD9/Htqde1LirI4lIiI+TkVELqrS6eJvn+9l3tpsjIHOzSKYOzqF9k3CrY4mIiJ1gIqIXNAxeykTF2by/cECAEb3acWzd3QlJNDf4mQiIlJXqIjIeX25+ziTF2dyuqSC8OAAnr+nB3cltrA6loiI1DEqInKOCqeLWZ/t5o11+wHo1iKSuaNTaNs4zOJkIiJSF6mISJXcM6WMX5BO+uEzANyf2prpt3XRKEZERNxGRUQAWL0znyeWbsFeWkFESAAv3duTwT2aWx1LRETqOBWReq680sWLn2Txz/UHAEiMi2LOqBRaNQq1OJmIiNQHKiL1WE5BCeMWZrAl5wwAv7m2LVMHdyYowM/aYCIiUm+oiNRTn2w/xpRlWykqqySqQSCzhiVyS9emVscSEZF6RkWknnFUOnn+o128s+EQAMmtopkzKpm4hhrFiIiI56mI1CMHTxYzbmE623MLAXjkxgSeuLUTgf4axYiIiDXc+gx011130apVK0JCQmjevDm/+tWvOHr0qDt3KRfw4daj3DFnPdtzC2kYGshbD17NtMFdVEJERMRSbn0W6t+/P0uWLGH37t28++677Nu3j/vuu8+du5SfKatwMn3FNsYtyOCso5Kr2zTk44nX079zE6ujiYiIYDPGGE/t7P3332fo0KE4HA4CAwMvuX1hYSFRUVHY7XYiIyM9kLBu2XfiLGPnp5OVV4TNBr/v147HBnQkQEdBRETEjWry/O2xc0QKCgqYP38+ffv2vWAJcTgcOByOqq8LCws9Fa/OWZFxhD+s2E5JuZNGYUG8OiKJGzrGWh1LRETkHG7/X+OnnnqKsLAwGjVqxOHDh3nvvfcuuG1aWhpRUVFVl/j4eHfHq3NKy508uWwLjy3eQkm5k2sSYlg18XqVEBER8Uo1LiJTp07FZrNd9JKVlVW1/ZQpU8jIyOCzzz7D39+f+++/nwtNg6ZNm4bdbq+65OTkXP7K6qG9+UUMmbeeJT8cwWaDiTd3YP5/XkOTyBCro4mIiJxXjc8ROXHiBKdOnbroNgkJCQQFBf3i+iNHjhAfH8+3335LamrqJfelc0Sqb+kPOTzz3nbKKlzERgTz2ogk+rZvbHUsERGph9x6jkhsbCyxsZd3mN/lcgGccx6IXJliRyXPvLed5em5AFzfoTGvDE8iNiLY4mQiIiKX5raTVTdu3MimTZu47rrraNiwIfv27eOZZ56hXbt21ToaIpeWlVfI2Pnp7DtRjJ8NJt/Skd/3a4+fn83qaCIiItXitiISGhrK8uXLmTFjBsXFxTRv3pxBgwbx9NNPExys/1u/EsYYFm3K4Y/v78BR6aJpZDCzRybTJ6GR1dFERERqxG1FpEePHnzxxRfu+vH1VlFZBdNXbOeDLT++Q22/TrH8dVgijcJV7kRExPfos2Z8yPZcO+MWpHPwVAn+fjamDOzEb69P0ChGRER8loqIDzDG8H/fHeJPH+6i3OmiRVQIc0Yn06t1jNXRREREroiKiJcrLKtg6rtb+XhbHgADujRh1rBEokN/+fJoERERX6Mi4sW25Jxh3MJ0cgpKCfS38dSgzjx0XVtsNo1iRESkblAR8ULGGN765iBpq3ZR4TTENWzA3NEpJMVHWx1NRESkVqmIeJkzJeVMWbaV1TvzARjUrRkv3teTqAaX/rRiERERX6Mi4kXSD59m/IIMcs+UEuTvxx9u78L9qa01ihERkTpLRcQLuFyGN9fv56VPdlPpMrRuFMq80Sl0bxlldTQRERG3UhGxWEFxOU8s3cIXWccBuKNnc9Lu6UFEiEYxIiJS96mIWGjTwQImLMzgmL2MoAA/ZtzZldG9W2kUIyIi9YaKiAVcLsM/1u3jldV7cLoMCY3DmDs6ha4tLv5RySIiInWNioiHnTzr4LHFmXy99yQAdye35M9DuxMWrLtCRETqHz37edCGfaeYuCiD40UOQgL9eO6u7gy7Kk6jGBERqbdURDzA6TLM/SKb19bswWWgQ5Nw5o1JoWPTCKujiYiIWEpFxM2OF5UxaVEm3+47BcCwXnHMHNKN0CD904uIiOjZ0I3W7z3JpMWZnDzrIDTInz8P7c49KXFWxxIREfEaKiJuUOl08dqavcz9MhtjoHOzCOaOTqF9k3Cro4mIiHgVFZFalmcvY8KiDL4/UADAqN6tmHFnV0IC/S1OJiIi4n1URGrR2t3HmbxkCwXF5YQF+ZN2b0/uSmxhdSwRERGvpSJSCyqcLv762R5eX7cPgK7NI5k3JoW2jcMsTiYiIuLdVESu0NEzpYxfmMHmQ6cBuD+1NdNv66JRjIiISDWoiFyBz3fm88SyLZwpqSAiOIAX7+vJbT2aWx1LRETEZ6iIXIbyShcvfZLFm+sPANAzLoq5o1Jo1SjU4mQiIiK+RUWkhnIKShi3MIMtOWcA+M21bZk6uDNBAX7WBhMREfFBKiI18Mn2PJ5ctoXCskoiQwKYNSyRW7s1szqWiIiIz1IRqQZHpZO0j7N4+9uDACS3imbOqGTiGmoUIyIiciVURC7h0Klixi3IYFuuHYBHbkjgiYGdCPTXKEZERORKqYhcxEdbjzH13a0UOSppGBrIX4cnclPnplbHEhERqTNURM6jrMLJnz/ayf99dxiAq9s0ZPaoZJpHNbA4mYiISN2iIvIz+0+cZeyCDHYdKwTg9/3aMfmWjgRoFCMiIlLrVET+zcqMXKav2EZJuZNGYUG8MiKJGzvGWh1LRESkzvLI/+Y7HA6SkpKw2WxkZmZ6Ypc1Ulru5KllW5m0OJOScifXJMTw8cTrVUJERETczCNHRJ588klatGjBli1bPLG7Gsk+XsTY+Rnszi/CZoMJN3Vgws0d8PezWR1NRESkznN7EVm1ahWfffYZ7777LqtWrXL37mpk2eYjPLNyO6UVTmIjgnltRBJ92ze2OpaIiEi94dYikp+fz8MPP8zKlSsJDb30m385HA4cDkfV14WFhW7JVVJeydMrt7M8PReA69o35tURScRGBLtlfyIiInJ+bjtHxBjDgw8+yO9+9zuuuuqqat0mLS2NqKioqkt8fLxbsi3YeJjl6bn42eCJWzvyzm96q4SIiIhYoMZFZOrUqdhstotesrKymDNnDkVFRUybNq3aP3vatGnY7faqS05OTk3jVcuDfdtwR8/mLHz4GsbdpPNBRERErGIzxpia3ODEiROcOnXqotskJCQwfPhwPvjgA2y2//9J3ul04u/vz5gxY3jnnXcuua/CwkKioqKw2+1ERkbWJKaIiIhYpCbP3zUuItV1+PDhc87xOHr0KAMHDmTZsmX06dOHuLi4S/4MFRERERHfU5Pnb7edrNqqVatzvg4PDwegXbt21SohIiIiUvfpfctFRETEMh57i/c2bdrgpimQiIiI+CgdERERERHLqIiIiIiIZVRERERExDIqIiIiImIZFRERERGxjIqIiIiIWEZFRERERCyjIiIiIiKWURERERERy3jsnVUvx0/vxPrvH54nIiIi3u2n5+3qvKO6VxeRoqIiAOLj4y1OIiIiIjVVVFREVFTURbexGS/+ABiXy8XRo0eJiIjAZrPV6s8uLCwkPj6enJycS35EsS/S+nxfXV9jXV8f1P01an2+z11rNMZQVFREixYt8PO7+FkgXn1ExM/Pj7i4OLfuIzIyss7+goHWVxfU9TXW9fVB3V+j1uf73LHGSx0J+YlOVhURERHLqIiIiIiIZeptEQkODmbGjBkEBwdbHcUttD7fV9fXWNfXB3V/jVqf7/OGNXr1yaoiIiJSt9XbIyIiIiJiPRURERERsYyKiIiIiFhGRUREREQsUy+KyMGDB3nooYdo27YtDRo0oF27dsyYMYPy8vKL3q6srIyxY8fSqFEjwsPDuffee8nPz/dQ6pr7y1/+Qt++fQkNDSU6Orpat3nwwQex2WznXAYNGuTeoJfpctZnjOHZZ5+lefPmNGjQgAEDBrB37173Br0CBQUFjBkzhsjISKKjo3nooYc4e/bsRW/Tr1+/X9yHv/vd7zyU+OLmzZtHmzZtCAkJoU+fPnz//fcX3X7p0qV07tyZkJAQevTowccff+yhpJevJmt8++23f3FfhYSEeDBtzXz11VfceeedtGjRApvNxsqVKy95m7Vr15KSkkJwcDDt27fn7bffdnvOy1XT9a1du/YX95/NZiMvL88zgWsoLS2Nq6++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jIwMU1RUVLVNp06dzPLly40xxhQVFZknnnjCbNiwwRw4cMB8/vnnJiUlxXTo0MGUlZVZtYwLqun6jDHmhRdeMNHR0ea9994zW7duNUOGDDFt27Y1paWlVizhkgYNGmSSk5PNxo0bzfr1602HDh3MqFGjqr7/89/T7Oxs89xzz5kffvjBHDhwwLz33nsmISHB3HDDDVYtocqiRYtMcHCwefvtt83OnTvNb3/7WxMdHW3y8vKMMcb86le/MlOnTq3a/ptvvjEBAQFm1qxZZteuXWbGjBkmMDDQbNu2zaolXFJN1zhz5kzz6aefmn379pnNmzebkSNHmpCQELNjxw6rlnBRRUVFVY8zwLzyyismIyPDHDp0yBhjzNSpU82vfvWrqu33799vQkNDzZQpU8yuXbvMvHnzjL+/v/nkk0+sWsJF1XR9r776qlm5cqXZu3ev2bZtm5k4caLx8/Mzn3/+uVVLuKhHH33UREVFmbVr157zvFdSUlK1jTc8DutFEXnrrbcMcN7LTw4cOGAA8+WXX1ZdV1paan7/+9+bhg0bmtDQUHP33XefU168zQMPPHDeNf77mgDz1ltvGWOMKSkpMbfeequJjY01gYGBpnXr1ubhhx+u+iPqbWq6PmN+fAnvM888Y5o2bWqCg4PNzTffbHbv3u358NV06tQpM2rUKBMeHm4iIyPNr3/963OK1s9/Tw8fPmxuuOEGExMTY4KDg0379u3NlClTjN1ut2gF55ozZ45p1aqVCQoKMr179zbfffdd1fduvPFG88ADD5yz/ZIlS0zHjh1NUFCQ6datm/noo488nLjmarLGSZMmVW3btGlTc9ttt5n09HQLUlfPTy9X/fnlpzU98MAD5sYbb/zFbZKSkkxQUJBJSEg45/HobWq6vhdffNG0a9fOhISEmJiYGNOvXz/zxRdfWBO+Gi70vPfv94k3PA5t/y+siIiIiMf59KtmRERExLepiIiIiIhlVERERETEMioiIiIiYhkVEREREbGMioiIiIhYRkVERERELKMiIiIiIpZRERERERHLqIiIiIiIZVRERERExDIqIiIiImKZ/w854a+AiuKqWAAAAABJRU5ErkJggg==\n","text/plain":["

"]},"metadata":{},"output_type":"display_data"}],"source":["#We can plot easily in Python like in matlab, just import the relevant package!\n","%matplotlib inline\n","import matplotlib.pyplot as plt\n","\n","x_vals = [-2, -1, 0, 1, 2]\n","y_vals = [-4, -2, 0, 2, 4]\n","plt.plot(x_vals, y_vals)"]},{"cell_type":"markdown","metadata":{"id":"wwgwsclpdne6","nbpages":{"level":3,"link":"[1.2.2.5 Loops in Python](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.5-Loops-in-Python)","section":"1.2.2.5 Loops in Python"}},"source":["### 1.2.2.5 Loops in Python"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":199,"status":"ok","timestamp":1622105315501,"user":{"displayName":"Martin Schätz","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gjb7hTzMGZhh4Pah6B3Hcmw9FADWAQgRfEq6m95Cg=s64","userId":"10828352848441153145"},"user_tz":-120},"id":"RSdSRhqJdne6","nbpages":{"level":3,"link":"[1.2.2.5 Loops in Python](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.2.5-Loops-in-Python)","section":"1.2.2.5 Loops in Python"},"outputId":"a077d55a-fe53-4af2-ffbb-3856cd2127d9"},"outputs":[{"name":"stdout","output_type":"stream","text":["1\n","1\n","2\n","3\n","5\n","8\n","Let's try that again\n","1\n","1\n","2\n","3\n","5\n","8\n","One more time:\n","1\n","1\n","2\n","3\n","5\n","8\n"]}],"source":["#Repeat code until a conditional statement ends the loop\n","\n","#Let's try printing a list\n","fib = [1, 1, 2, 3, 5, 8]\n","\n","#While loops are the basic type\n","i = 0\n","while(i < len(fib)):\n"," print(fib[i])\n"," i = i + 1\n","\n","#In matlab, to do the same thing you would have the conditional as: counter < (length(fib) + 1)\n","#This is because matlab starts indexing at 1, and python starts at 0.\n","\n","#The above type of loop is so common that the 'for' loop is the way to write it faster.\n","\n","print(\"Let's try that again\")\n","#This is most similar to for loops in matlab\n","for i in range(0, len(fib)) :\n"," print(fib[i])\n","\n","print(\"One more time:\")\n","#Or you can do so even neater\n","for e in fib:\n"," print(e)"]},{"cell_type":"markdown","metadata":{"id":"hf673kl9dne6","nbpages":{"level":2,"link":"[1.2.3 Additional Resources](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.3-Additional-Resources)","section":"1.2.3 Additional Resources"}},"source":["## 1.2.3 Additional Resources\n","* If you still feel VERY lost: [Code Academy](https://www.codecademy.com/learn/python)\n","\n","* If you want a good reference site: [Official Python Reference](https://docs.python.org/2/reference/)\n","\n","* If you want to learn python robustly: [Learn Python the Hard Way](https://learnpythonthehardway.org/book/)\n","\n","* Feel free to contact me at: **jgerace (at) nd (dot) edu**\n"]},{"cell_type":"markdown","metadata":{"id":"O1gVOu33dne7","nbpages":{"level":2,"link":"[1.2.3 Additional Resources](https://jckantor.github.io/CBE30338/01.02-Python-Basics.html#1.2.3-Additional-Resources)","section":"1.2.3 Additional Resources"}},"source":["\n","< [1.1 Getting Started with Python and Jupyter Notebooks](https://jckantor.github.io/CBE30338/01.01-Getting-Started-with-Python-and-Jupyter-Notebooks.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [1.3 Python Conditionals and Libraries](https://jckantor.github.io/CBE30338/01.03-Python-Conditionals-and-Libraries.html)

\"Open

\"Download\""]}],"metadata":{"anaconda-cloud":{},"colab":{"provenance":[]},"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.9.15"}},"nbformat":4,"nbformat_minor":0}