{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Since I'm now learning photography, I've been doing a bit of reading on optics foundations. In this post, I'll try to perform a couple computations and ray tracing for a spherical lens." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The spherical lens problem " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's suppose your camera has a spherical lens. Further supposing it's 2D, we can model it as a circle. We now imagine that a point is scattering light rays in all directions through this spherical lens. Our goal is then:\n", "\n", "- to compute the point of intersection with the lens\n", "- determine the angle of the incoming ray\n", "- apply Snell's law in order to determine the refracted ray angle\n", "\n", "Here, we're supposing that the incident medium is air ($n = 1$) and the lens medium is glass ($n = 1.5$)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Modelling the important concepts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, the lens (we assume that it's centered at the $(0, 0)$ point):" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from collections import namedtuple" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "Lens = namedtuple('Lens', field_names=['r', 'n'])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Lens(r=10, n=1.5)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lens = Lens(r=10, n=1.5)\n", "\n", "lens" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, the point source. We will model locations as complex numbers." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "PointSource = namedtuple('PointSource', field_names=['coord'])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "source = PointSource(coord=(-10 + 0j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now, the ray:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "Ray = namedtuple('Ray', field_names=['origin', 'direction'])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "ray = Ray(origin=source, direction=(1+.1j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using a ray, we can derive its line equation easily:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-10+0j)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ray.origin.coord" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ray.direction.real" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def line_equation(ray):\n", " \"\"\"Returns line equation ax + by + c = 0.\"\"\"\n", " a = - ray.direction.imag\n", " b = ray.direction.real\n", " c = ray.origin.coord.real * ray.direction.imag - ray.origin.coord.imag * ray.direction.real\n", " return a, b, c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use thise equation to write a plotting function for rays:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "def plot_ray(ray, xmin, xmax, ax=None):\n", " \"\"\"Plots a ray.\"\"\"\n", " a, b, c = line_equation(ray)\n", " if ax is None:\n", " ax = plt.gca()\n", " # assuming b is different from 0!\n", " assert b != 0\n", " start = (xmin, (-c - a * xmin) / b)\n", " end = (xmax, (-c - a * xmax) / b)\n", " \n", " xy = np.c_[np.array((start, end))]\n", " ax.plot(xy[:, 0], xy[:, 1], '-ko')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's plot some parallel rays:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nrry8nJYtW0b//Oc/qVatWgSATjjhBHr22Wfp119/jXrtzz//nP79739T3bp1CQC1bduWHnnkEbrq\nqqukC/6gQYM8fTZe8BmGYYjoq6++oltvvZUaNGhAAKhly5Y0evRoKi0tjbpu8+bNNHLkSMrNzSUA\n1KhRI7rjjjto7dq1Udft3LmTxo8fT0cffTQBoEMPPZT+9a9/0YoVK6Ku++OPP2jKlCl06qmnEgCq\nUaMGXX755fTOO+9wDZ94wWcYxhB//vknFRcX05lnnkkAqFq1atS3b19atGgRlZWVha/bv38/vf76\n63TBBRdQVlYWAaAuXbrQrFmzaO/eveHrysvL6d1336X+/ftTzZo1CQCdfPLJVFBQQL/99lvUa3/6\n6ad0ww030GGHHUYA6KijjqLHHnuMduzYEXXdt99+yzV8hmGYeFmzZg0NHjyY6tWrRwCoTZs29NBD\nD9EPP/wQdd2mTZvonnvuoebNmxMAaty4MQ0bNozWr18fdd2OHTvoscceoyOPPJIA0GGHHUY33ngj\nffrpp1HX/fbbb1RQUEAnnXQSAaCaNWvSFVdcQe+9915UDX/v3r300ksvUZcuXbiGzws+wzBe2b17\nN02bNo1OO+00AkDVq1enSy+9lJYsWRJzN//qq69S9+7dSQhBQgjq1q0bzZ49m/bt2xe+rry8nN5+\n+2267LLLqEaNGgSATj31VJoyZQr9/vvvUa+9YsUKuv766+nQQw8lAHT00UfT+PHjaefOnVHXrVu3\nju644w46/PDDCQC1aNGC7r//frryyiu5hs8wDOPGZ599RjfddFO4EdquXTt69NFHafv27VHXfffd\nd3TXXXdR06ZNCQDl5OTQXXfdRd99913Uddu2baNHHnmE2rVrRwCobt26dPPNN9Pnn38edd2vv/5K\nzz77LJ1wwgkEgGrVqkVXXXUV/fe//426m9+zZw+9+OKLdPbZZ0c1iefPnx9uEnMNn2EYRsHvv/9O\nRUVFdMopp4Qbof369YtqhBIR7du3j2bPnk3nnXde+G6+R48e9Oqrr8acr3/zzTfp4osvpurVqxMA\nOuOMM+i5556j3bt3h68rLy+njz/+mAYMGEAHH3wwAaBjjjmGJk6cSD/99FPUe/z6669pyJAh1LBh\nw/Di/cADD9CWLVuirtu8eTPX8BmGYeysWrWKBg0aFNUIffzxx2Maobq27NatW+nBBx+k1q1bEwCq\n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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for origin_y in np.arange(-10, 10):\n", " ray = Ray(origin=PointSource(-10 + 1j * origin_y), direction=(1+1j))\n", " plot_ray(ray, -10, 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As well as some spherical rays:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for theta_deg in np.arange(-10, 10):\n", " ray = Ray(origin=PointSource(-10 + 1j * 0), direction=(np.cos(np.deg2rad(theta_deg)) + 1j * np.sin(np.deg2rad(theta_deg))))\n", " plot_ray(ray, -10, 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Intersections " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using these elements, we can write model an intersection routine:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from math import sqrt\n", "\n", "def intersection(ray, lens, verbose=False):\n", " \"\"\"Returns intersection point of ray with lens.\"\"\"\n", " a, b, c = line_equation(ray)\n", " r = lens.r\n", " if verbose: print(f\"a: {a}, b: {b}, c: {c}, r: {r}\")\n", " aa = 1 + a**2/b**2\n", " bb = 2 * a * c / b**2\n", " cc = c**2/b**2 - r**2\n", " delta = bb**2 - 4 * aa * cc\n", " if verbose: print(f\"aa: {aa}, bb: {bb}, cc: {cc}, delta: {delta}\")\n", " if delta >= 0:\n", " if delta == 0:\n", " root = -bb / (2 * aa)\n", " yplus = sqrt(r**2 - root**2)\n", " return root + 1j * yplus, root - 1j * yplus \n", " else:\n", " roots = ((- bb + sqrt(delta)) / (2 * aa),\n", " (- bb - sqrt(delta)) / (2 * aa))\n", " intersection_points = []\n", " for root in roots:\n", " for sign in [1, -1]:\n", " x, y = root, sign * sqrt(r**2 - root**2)\n", " if abs(a * x + b * y + c) <= 1e-5:\n", " intersection_points.append(x + 1j * y)\n", " intersection_points = [intersection_point for intersection_point in intersection_points \\\n", " if abs(intersection_point - ray.origin.coord) >= 1e-5]\n", " return min(intersection_points, key=lambda p: abs(p - ray.origin.coord))\n", " else:\n", " return None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's test this:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a: 0.2, b: 1.0, c: 0.4, r: 1\n", "aa: 1.04, bb: 0.16000000000000003, cc: -0.84, delta: 3.52\n" ] }, { "data": { "text/plain": [ "(-0.9789261076583519-0.20421477846832947j)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lens = Lens(r=1, n=1.5)\n", "source = PointSource(coord=(-2 + 0j))\n", "ray = Ray(origin=source, direction=(1-0.2j))\n", "\n", "intersection(ray, lens, verbose=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The refracted ray " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now determine the angle of the incoming ray, relative to the local normal of the lens by using the Snell law. To do this, there are a number of subproblems to solve:\n", "\n", "- compute the normal and the tangential vector from an intersection point on the circle\n", "- compute the incoming angle and deduce the refracted angle\n", "- compute the new ray vector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Normals on the circle " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A simple approach to this problem is to use polar coordinates:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "from math import atan2, cos, sin\n", "\n", "def lens_normal_tangent(intersection_point, lens):\n", " \"\"\"Returns the normal vector associated to the lens.\"\"\"\n", " circle_theta = atan2(intersection_point.imag / lens.r, intersection_point.real / lens.r)\n", " normal = cos(circle_theta) + 1j * sin(circle_theta)\n", " tangent = -sin(circle_theta) + 1j * cos(circle_theta)\n", " return normal, tangent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see if the results are correct:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-2, 0, -1, 1]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nLD4+HnFxcZDJZAJ8p83T6XS4++67ERMTgzVr1kAikQjdJOI4yrAAZZrf6uj8MHvrCUdFRZkzqmfP\nnnZH8+Pj473akXTEkiVL8Ntvv1lt27hxIxITE7F48WLKMh/jctHGOdczxp4C8A0ACYDVnPO/GGOv\nAcjhnJtOgZ8M4FNuPbMxDcD/McaMqL/8yCLLM7aI93HOUVVV5XCIlZWV2XwfuVxuDjGVSoW+ffva\nDbI2bdqIehknvV6PyZMnQyqVYv369RRyIkMZ5l90Ol2Tw5L2Msze/FaJRGJ1WLJLly52R/Pbtm3r\nkx1JRxw/fhzz5883Pw4PD0dmZiYef/xxdOrUScCWEXuYrbNDfF16ejrPyckRuhmiYTAYmhyWbK4Q\n02g0Nt+nTZs2dudT2DosGQgMBgOmTZuG0tJSbN68udVzSkjzGGMHOefpQrfDHSi/nGPqSDp6tre9\n+a2WHUl7o2D+0pF0hF6vx6BBg/Dbb78hODgYL774Ip5//nlaqcVD3JVhdFl2kdJqtQ6H2LVr16zO\nADIJDg62OizZrVs3uwVZbGysaHuTthiNRrz66qsYOHAgRo8e3arDFZxzPPbYYygsLMTXX39NBRsh\nDjIajSguLnbobO+rV6/and9q2ZG84YYbmi3EAqUj6ailS5ciJCQE0dHR+Pbbb5Ge7hd9Ir9HRZuP\n4JyjoqLC4RArLy+3+T5hYWHmkOrYsSP69+9vN8iioqL8vjdpT1BQECZOnIg+ffqgS5cumDFjBqZN\nm+ZUL/Pll1/Gn3/+iV27dkEul3uwtYT4PlNH0pGJ+kVFRc3ObzVlVNeuXe2OjPnq/FaxuP766/HG\nG29g69atVLCJCB0e9SCDwYCioiKHCzGtVmvzfWJiYlo8HGn6SkPbzlmwYAFee+01APVnpT7yyCN4\n8sknW7wsw7Jly7B06VLs2bMHcXFx3mhqQKPDo97HOUdlZaVDUyquXr1qd35rWFiYw9MqoqOjA7Yj\n6U2nT5/GsGHDsHLlSowbN07o5gQEd2UYFW1O0mg0Dp3ubepN2vr5SqVSq8OSzQVZbGwspFKpAN9p\nYNBqtejTpw/++usv8zaJRIIJEyZg1qxZGDhwYJPXfP7555g9ezb27NlDCyd7CRVt7mEwGGwelrSX\nafbmt1p2JFvKMepI+paCggIMGjQI//jHP/Dwww8L3ZyAQXPa3IRzjvLycoevHVZZWWnzfZRKpTmk\nOnfujIEDB9oNsqioKJ865TuQhYSE4MMPP8TAgQPN8/4MBgMkEonNOWo//PADnnrqKXz33XdUsBGf\noNFobB6WtJVhRUVFNue3Nu5IpqWl2S3IqCMpXhUVFRgzZgweeOABKthESpQjbYwxrlKp7F6dWa/X\nt7hAruVXy4sKWnwGYmJiWjwcafqqUCi88a0TD5kzZw6WLFlifjxkyBB88cUXiI2NNW87ceIEhg4d\nig0bNmD48OECtDJw+dNIW0v5ZZrf6uiIfkVFhc3PUSqVDk2roI5kYDAYDLj99tvRuXNnLFu2jH7f\nXhbQh0cZYxyo7x2OHDkS0dHRViFWXFxs97CkI/MqTL3J4OCAH4gMGDU1Nbj++usRHh4OzjkOHz6M\nTp064dFHH8Xy5cuRl5eH4OBgTJ8+HatWrRK6uQHH34o2oD6Pbr31VsTFxTk0v9XUkXR0fhh1JIla\nrTYvQxUREYHExEQcPnyYriUpACra/nu/2fXYLL9GRkZS74LY9cMPP2D37t149tlnMWXKFHz99ddN\n9lEoFMjOzqalXbzMH4s2k6SkJIfnt1JHkjhKrVYjMzPTahUHuVyOVatWUX4JgIq2/963OUeDEEfp\ndDoUFxejuLgYeXl50Gg0uHbtGmbOnGlzxEOlUuHChQveb2gA89eijfKLuMpoNKKsrMycYabbrFmz\nbF5omPJLGHQiQoOWLs1AAgfnHNXV1ebQKioqahJktrbZO7nEnry8PA99ByTQUH4RSzqdDiUlJU7l\nV0lJiVOFP+WXuIm6aFMoFMjKyhK6GcQDTAs5OxJalttsnVRiEhkZidjYWPO8oLS0NMTExCAmJsa8\n3fI2YMAAXLp0qcn70H+0xB0ov/xX4w6ko/nVXAcyNDTUKqduuOGGJtkVERGBhIQExMTEoF+/fjZH\n2ii/xE20RVtzZ18R32I6/GgrsJrrPdo7dC+RSKyKq86dOyMjI8NqW+MirE2bNk7NB+KcIz4+HoWF\nhVYLStN/tMQdKL/Ew3T40Zn8KioqarEDacqmxh1Ie51IR04sWbJkCVJTU3H+/HmbBRvll/iJsmjr\n06cPxHBFcX9jWri5pcBqvL2qqsrueyoUCqtgSk5Othtapu0REREeP6Fk8eLFkEql+OCDD7BgwQLk\n5eUhJSWF/qMlLqP8Eo7l/FVH86u0tNTu4cfGHciOHTuib9++NvPLtC06Otoj17kzGAxYunQpvvnm\nG+zduxcAMH78eBw6dIjyy4+IsmgjrjMYDHZ7j/aCrKXDj1FRUeZwSkhIQI8ePVrsPfrimp0///wz\n3n77bfz2229ISUnB9OnThW4SIcSC6fCjM/lVVFTUbAdSLpdb5ZSpA9lcfvnSFQm2bt2KCxcumE8y\nuPnmm7F582ZhG0Xcjoo2P6DVap2aN2HqPdo7/BgcHNzk8GP//v3tjnyZeo/+cDmCwsJCTJ48GWvW\nrKG5H4R4gakD6ewJRI50IE2HH7t3795sfvlqB9IZ7777rtXj/fv3IzMzE8uWLYNMJhOoVcTdxP+/\nrB8xLdDszLyJ4uJiVFdX231P0+FHUzipVKpme46myay+0nv0JqPRiClTpuDBBx/EbbfdJnRzCBGd\nxh1IR/KrpQ5kmzZtzFllOX/VXn45O3/VH/zxxx/46aefrLZNmzYNixYtooLNzwTWX7YXGQwG89mP\nzkxgraurs/ue0dHR5mBKSEhAz549m+05xsTEIDQ01IvftbhlZ2dDo9FgwYIFQjeFEEFZzl91Jr+c\nmb960003tZhfgdqBdNZ7771nvp+cnIz169dj2LBhAraIeAoVbQ7QaDROzZsoLi5GWVlZs71Hy3C6\n7rrrmh39io2NRXR0NC090gytVguNRoPIyMhWvb6goADz58/Hrl276OdM/IplB9KZCfjOdCB79OjR\n7MlD1IH0nMLCQnzyyScAgP79+2Pnzp20hJkfE+2KCK05Zd7y8KMzE1ibO/wYFhbWYsHVeFt4eDj1\nHt2Mc44ZM2bg999/xy233IJbbrkF/fr1c/gsrSlTpiAlJQWLFi3ycEtJa/jbigitveSH6fCjM/nl\n6PxVR/PLX+av+otXX30V//73v2EwGHDq1CnRz83zV7SMFerP9nn11VcxcOBAh4KspKTEbu+RMWbV\ne3Q0yEJCQrz6vRP7DAYDJkyYgK1btwIAIiIiMGLECHMR16VLF5vF8rfffovHHnsMR48epR6qj/K3\nog2oz6+FCxdi8ODBDhdijnYgW5q3atpOHUhxMxqNWLFiBRYvXozs7GyMHj1a6CYRO6hoa4ZUKnUo\nsBr3HumwmPjV1NRg5MiR2L9/f5PnbrnlFmzcuBERERHmbbW1tejZsyeWLVuGMWPGeLOpxAn+WLQ1\n8zyioqKcyi86/Bi4XnjhBeTl5eHjjz8WuimkGVS0WdixY4dVkCmVSuo9BrBr165h4MCBOHPmjHlb\nhw4dcODAAcTExFjtO2/ePJw+fRobNmzwdjOJE/y5aNuyZYtVflEHkjjqyJEjGDlyJI4cOYKEhASh\nm0OaQQvGN1CpVLj11luFbgbxIXFxcdi+fTsGDBiAoqIiAMD58+dx4403YunSpaiqqsK8efOQl5cH\nxpjVmVeEeJNKpcK4ceOEbgYREbVabc4vqVSKqVOnUsEWQERdtNE6asSezp074+uvv8aIESNw3333\n4erVq9iyZQvuuusuSCQSGAwGAPUnMMydOxfR0dG0vAvxKsov4iy1Wo3MzEzU1NQAqF+W67PPPsPN\nN99M+RUgRHt4lBZcJvaYlrgpKyvD5s2bkZ+fj8GDB2PXrl149913bZ5Jp1KpzMu/EN/jb4dHKb9I\nc7RaLcrLy1FWVmZ1e/zxx1FSUtJkf8ov3+dTc9oYY7cBeA+ABMAHnPNFjZ6/H8A/AVxq2LSMc/5B\nw3PTAbzUsP1/OedrW/q89PR0Tgsu+y+j0YjKysomgWUrxOxtM42kOYoxZndRaCI8Txdt3swwyi//\nxjmHRqNpkkvOZJhGo3HqMym/fJ/PzGljjEkALAdwC4B8AAcYY1s558ca7foZ5/ypRq9tA2ABgHQA\nHMDBhteWutouIhy9Xo+KiooWg8ne9oqKCrvXlTJRKpWIiooy39q1a4e0tDSrbZGRkVaPo6KiMHLk\nSOTn5zd5P1pnNHBRhhFLliP1rc2w5i5MDAAymaxJNiUnJzfZ1jjDbr31Vly6dKnJ+1F+BQ53zGnr\nB+AM5/wcADDGPgUwHkDjwLPlVgDfcc5LGl77HYDbAHzihnaRVtLpdE2CyNEeYllZWbNL2ZhYhlFk\nZCRUKhV69erVYtEVGRmJyMjIVl/c84knnsCLL75otY3mFgU8yjA/4o2RerlcbpVLMTEx6NSpU4tF\nl2lbaGioU1c4KCoqQmxsLAYPHozPPvvM6jnKr8DijqItEcBFi8f5ADJs7DeRMTYUwCkAsznnF+28\nNtENbQpotobmnSm6amtrm33/oKCgJqHUpUuXFsPKtD08PFywSxocPHgQkydPxt69e5GXl4eUlBSa\nW0Qow3yIt0fqIyMjHR6pN2335iLstbW1GD9+PNatW4cvv/wSANCuXTsUFBRQfgUgdxRttroLjf/F\nfAXgE865ljH2GIC1AEY6+Nr6D2EsE0Am4N9DwZxz1NTUtDqwysvLodVqm/2M4OBgREdHWwVTYmKi\nQ2EVFRUl2uvgHTlyBHv27MHZs2cRFhYmdHOI7/B4hgVKfgG+MVLfXIa5MlIvhD179mDv3r0YOHAg\ndDodxo8fj82bNwvdLCIQd/zl5gNItnicBOCy5Q6c82KLh6sAvGnx2uGNXrvb1odwzrMBZAP1E3ld\nabAnGY1GVFVVuVR06fX6Zj8jNDTUKpiio6PRoUOHFofkTfflcrkoiy5Xvfbaa3j22WepYCONeTzD\nxJJfgPAj9S11GoUcqRfCd999BwC4evUqgPrrUL7//vt49NFHERQUJGTTiABcPnuUMRaM+sMFN6P+\nzKoDAKZwzv+y2Kcd5/xKw/2/AZjLOe/fMIn3IICbGnb9HUAf0/yQZj7TY6fMGwwGh4bm7QVWRUVF\ni2fxhIWFOVRc2dpumg9BnHP06FGMGjWKRtlEypNnj3o7wzyZX94cqW8pq+xtE+tIvVBuvPFGHDp0\nyPy4ffv2+M9//oNevXoJ2CriLJ85e5RzrmeMPQXgG9SfLr+ac/4XY+w1ADmc860AZjDGxgHQAygB\ncH/Da0sYY6+jPiQB4LWWCjaT3NxcZGZmAoBV8NXV1VmFkbOBVVFR0eJnR0REWIVQcnIyrr/+eodC\nLDIyElKp1LEfLnGb1157DXPmzKGCjTQhRIbZyy9HR+qbyzVHRuotM8lypN6RjmSgjtQLobCw0Kpg\n6969O3bs2IHk5ORmXkX8mWgvrmu6HxISgk6dOpkDq7q6uqXXtrqHGBUVhYiIiIAamvcHR48exc03\n34xz585R0SZS/nZxXdP9kJAQpKWlmfOrvLy8xZF6hULhcH7Z6jTSSL14fPzxx+aivkePHtizZw+i\noqIEbhVpDZ8ZaROaVqtFWlqaw4WYUqmkeQAixDlvde/+9ddfp1E24pO0Wi2Sk5PRs2dPh/KLRuoD\ni2k+W2RkJA4cOAC5XC5wi4jQRD/SRst3BIZt27bhlVdeQWJiIjp27IhOnTqZv6pUKoSEhNh83V9/\n/YWRI0fi7NmzUCqVXm41cRd/HWmj/CL2cM6RlJQEo9GI9957D5MmTRK6ScQFNNIGuqhgIBk7diwi\nIyMxfvx4bNmyxeo5xhiSk5MxZ84czJgxw+q5119/Hc888wwVbMTnUH6R5pw6dQp33nknfvnlF9x9\n991CN4f4CNEeJ1SpVMjOzqaLCgaQwYMHY+/evejYsaPVds45evXqhaeeslphCMeOHcOuXbvw5JNP\nerOZhLSI8ou0pGPHjvj9998xf/58mtJDzET5l9CnTx9cuHCBAi8Ade3aFfv27UNGhvUF67/66iv0\n7dsXn3zyCdatW4fU1FT06NEDdXV1TUbmCBES5RdpjlqtRmpqKkJCQnDo0KEWL8FCAouoD4+SwNS2\nbVvs2rUL9913H7788ksMHDj2VYDfAAAgAElEQVQQpaWl+P333zFlyhQwxszL2JSVldm8tAIhhPga\ntVqNzMxM1NTUAKi/hNWjjz4KxhjlFwEg0hMR0tPTeU5OjtDNIG5mNBpRU1ODyspKVFVVoaqqynzf\n1tfKykr88MMPqKurQ4cOHZCfn4+TJ0/aXHeQJnyLmz+diED55Z8459BqtQ5ll+VXy/u//vor6urq\nmrw35Zf40YkIRHCuBlTjr9XV1S0u9Gwik8kQHh4OpVIJmUyGqqoqJCcn48SJEzb3z8vLc+e3TggR\nOYPBgOrqapcyq/HXli5sbBIUFASlUmnOMNNXWwUbQPlF/ouKtgBhNBodCihngspewDTGGLMZUO3b\nt2+yzd7XxvdlMpnNz0pNTUVubm6T7f6+SDch/oxzDo1G43JRZfka0yFIR8jl8ia5FB0djeTk5FZl\nmL1VJSi/SEuoaPNBlsPs7uoFOhNQoaGhTcImMjISiYmJTgWT6atCofDasjdZWVm4//77rXq8dGkF\nQrxLr9eb86m1RVXjbQaDwaHPlkgkNvMpJibG6eIqPDwcYWFhCA727H+VdXV1kEqlWLBgAR588EGr\n5yi/iCUq2tzAYDC0GE7OBpYzw+y2wiY5Odnp4soUUGK+4vrf/vY3ZGZmIj4+HpcvX0ZKSopHFuYm\nxF9wzlFbW+u2aQ6VlZXQaDQOf75CoWiSRTExMUhNTW1VkRUSEiK6tVF/+OEH5OXlmXNfKpVCr9dT\nfpEmRFm0HTx4EKmpqa36YzYNs7uruKqsrERtba3Dn29rmL1NmzZQqVQOFVWNv4aGhoouoDxp48aN\nGD58OLZt2yZ0UwixyZX8AupHsdw5D6uqqqrF9U5NgoODER4e3iSL4uLiWnWYMCwsjNZyBnDu3DnM\nmDEDbdq0AQB88cUXuOOOOwRuFfFFojx71LQMjEwmw9SpU9G9e3eHA8wdw+ytKa5MAeXpYfZAN2zY\nMMycORMTJkwQuinEjfzp7FHL/Pr73/+Onj17OlWAOXPdLnsZ5UxuWd63t1wccc1zzz2HxYsXmx/3\n7dsXI0eOxBtvvEGdcj/hrgwTddHWmK1hdldCSozD7IHs9OnTGDx4MC5evGj3RAUiTv5YtDVmeUa0\nq8VVeHg4FAoFXUlfJCZOnIgvvvjC/Pimm27Cjz/+SMvv+RG65EcDxhjKyspomJ1g9erVmDZtGhVs\nRDQYYygqKmr2jGji/86ePWu+n5ycjK+//poKNmKT6Iu2lJQURERECN0MIjC9Xo+1a9di586dQjeF\nEIelpKSY5zGRwMQ5NxdtISEh2L59O9q1aydwq4ivEvXYOZ0KTUy2b9+O1NRUpKWlCd0UQhxC+UUA\noKioCFVVVQCAVatWoUePHgK3iPgy0Y60qVQqOhXaDxUUFACoP0tNIpFAIpGY7wcHByMoKMjmPMNN\nmzZhypQp3m4uIa1C+UVMTKNsHTt2xLRp0wRuDfF1ohxp69OnDy5cuECB54dyc3MxfPhwxMXFoU2b\nNoiMjERYWBhCQ0PNRdsrr7xi9Rqj0YhvvvkGt99+uzCNJsQJlF/E0rlz5zBw4ED8/e9/F7opRARE\nWbQR/5WRkYE//vgDs2fPtjmi1r17d3NvVK1WIzU1FcHBwSgqKsK+ffu83VxCCGk1tVqN5557Dnv3\n7sXKlSuhVquFbhLxcaI9PEr8l1wux5IlS3DXXXfh/vvvx/nz583PHTt2DJ07d0ZSUhIKCwvN65/q\n9XpkZmYCAI1gEEJ8nlqtRmZmpnmJwYKCAsow0iJRXqctPT2d5+TkCN0M4iLT6hS1tbV2b8XFxVi9\nejV27doFxhgGDx6Mo0ePorS01OZ7qlQqXLhwwbvfCPE4f7pOG+WX/6irq0NNTU2zGWa6Nd5v6dKl\nqKysbPKelGH+ia7TRtzOaDS2WEQ5ElCOhpgzy38B9UXezz//3Ow+eXl5rvwICCEixTmHTqdrVQHV\n2v0cXV2nsaCgILtLh1GGkeZQ0ebDjEajV4LHtI8zy+M0FhISArlc3uSmUCgQHR2N9u3b23zecr/m\nnpfL5dDpdAgODkZycjI6deqE3NzcJu1ISUlx5UdOCHETzjm0Wq3XCqja2lqH11BtLDg4uNlsio2N\nbTGfHM0xuVwOqVSKDh06UIYRp4myaHN1weXWMhgMXi2idDpdq9saGhpqN1BiYmJcDh3L/UJDQ72+\nXE5WVpbVfBCArntFxEGo/HJkOoI7M6y2thatnX4jlUrt5k54eDjatm3rluLJtJ8Qa0L/7//+b5NL\nfFCGkZa45S+VMXYbgPcASAB8wDlf1Oj5ZwA8DEAP4BqABznnuQ3PGQAcadg1j3M+zpHPzM3NRWZm\nJjQaDe68806XiiNHQ8o06b01mguUuLg4txVQcrkcISEhfr/moOk/u+nTp8NoNCIlJYWue0VazdsZ\nZsovnU6HcePGeaUTqNFoWv3zkclkdjMnMjISCQkJbs0wf16SsLS0FBEREbjuuusAABKJhDKMOMzl\nExEYYxIApwDcAiAfwAEAkznnxyz2GQFgP+e8hjH2OIDhnPP/aXiuinPu1CJr9hZcduL1LoeKM/vQ\nwvOecfjwYfztb3/DmTNn6Ofr5zx5IoK3M8zV/AL+Ox3Bnfllb7/Q0FC/LqK8befOnVi9ejXat2+P\nxYsX47HHHsP7778vdLOIh/nSiQj9AJzhnJ8DAMbYpwDGAzAHHuf8B4v9fwVwnxs+12zZsmVOhZRM\nJqP/5P3Ajh07MGbMGPpdElcJmmHvvfeeU/klxHQE4j4GgwEff/yx+XFERAQWLFiAF198ESEhIQK2\njIiBO4q2RAAXLR7nA8hoZv+HAGy3eBzKGMtB/WGHRZzzzc58uEqlwpNPPunMS4if2L59O+bMmSN0\nM4j4CZZhKpUKM2bMcKatROQan3H61ltvYfny5VSwEYe4o2izNcxhc/ifMXYfgHQAwyw2p3DOLzPG\nOgLYxRg7wjk/a+O1mQAyLbfRpM3AVVVVhZycHIwYMULophDx83iGUX4RE71eb/V41KhReOyxxwRq\nDREbd4yx5wNItnicBOBy450YY6MAzAMwjnNuvrYE5/xyw9dzAHYDuNHWh3DOsznn6aZjwiqVCtnZ\n2TRpM0AdPnwYaWlpCAsLE7opRPw8nmGUX8TEcqQtLCwMH374IR3uJg5zx0jbAQBdGGMdAFwCcC+A\nKZY7MMZuBPB/AG7jnF+12B4NoIZzrmWMxQIYBOCtlj6wT58+oCuKB7ZDhw6hd+/eQjeD+AevZhjl\nV2CzLNree+89ui4bcYrLRRvnXM8YewrAN6g/XX415/wvxthrAHI451sB/BOAEsDnDZPGTafFpwH4\nP8aYEfWjfossz9gixB4q2oi7UIYRbzIdHo2KisKDDz4ocGuI2LjlOm2c8/8A+E+jbfMt7o+y87q9\nAK53RxuI/zAajSgqKsLly5dx+fJl6PV6jBtnfemrQ4cOYfr06QK1kPgbyjDiLQaDAQqFAnfeeSed\n+U6cRgfSiaB27dqFp556ChMmTED//v2RkpKCkJAQxMfH48Ybb8Qdd9xhNW9NrVZDpVLhwIEDmDx5\nMtRqtYCtJ4QQx6nVasyYMQM1NTXYtm0b5RdxmiiXsSL+Y8SIEaiursa8efNw5MiRJs9HRkbi888/\nx5kzZ1BYWIhFixahtrZ+ofmLFy8iM7P+hDya0E0I8WVqtdpq6b2SkhLKL+I0l1dEEEJ6ejqniby+\njXOOuro61NXVQafTmW/2Hms0GuzcuRPr169HQUGBU5+lUqlw4cIFz3wjxCd4ckUEb6P8EgeDweBQ\ndjn6+LXXXkNZWVmTz6H8CgzuyjBRFm2MMa5SqQJqnTZTgLgaHN567Mo6rc5ijMFoNHrt84j3+VPR\nFoj5ZTQanerE+cJjb/3fSPkVGHxpGStBmBZcBpwfWjaNAvlCMDj62JP/qGUyGWQyGaRSqfl+48em\n+0qlssV93fHYaDRiw4YNOHXqFJYvXw6pVIqePXvi4sWLTdpPp8wTsXE1vyxHgXwhn1p6rvEFZd0p\nODjY4XwJDQ1FRESER/PL3nM33HAD5RdxmWhH2kz3Q0NDMXjwYKdCxpMBIpFInP7HLOTj4OBgnz6D\nSafTQSaTAWg6JwSov6o8XaTU//nbSJvpvlwux5AhQ5wukjyV24wxn8qnlrJUKpWK5sK0arUajzzy\niHlOLkD5FUgCfqTNRKPRoKamBjKZzOM9KEeCRCwBIhamgg2oH5EoLy/H008/Dc45UlJSAuoQE/E/\ntbW1qKiogEwmg0KhQGRkpKCFkUQiEfpH4remTp2KnJwcvPvuuwDq57JRfhFnib5oU6lU+OWXX4Ru\nBvGSjh07Yvjw4di5c6fQTSHEZSqVCvv27RO6GcTD9u3bh7CwMISHhwMAXnnlFSxYsEDgVhExEvWw\nEC24HHj+/PNP9OrVS+hmEOIyyq/AodPpkJGRgTVr1gCon4c3f/58VFdXC9swIjqiLdpoweXAlJub\ni44dOwrdDEJcQvkVWNq3bw+NRmM+EeGll15CcXGx1YXDCXGEKA+P0oLLgaugoAAjR44UuhmEtBrl\nV+Bp166d1WO5XI6XXnpJoNYQMRPtSBsJTIWFhYiPjxe6GYQQ4jClUomIiAjz46effrpJIUeII6ho\nI6JSUFCAhIQEoZtBCCFOad++PYD6M+Kff/55gVtDxIqKNiIqVLQRQsTIVLTdcsstiImJEbg1RKyo\naCOiUVVVBaD+UAMhhIhJ+/btIZPJMHnyZKGbQkSMijbiM4qKirBt2zbMnz8fo0ePxmeffWZ+Tq1W\no2vXrqipqUGHDh2gVqsFbCkhhDhOrVZj69at0Ol0mDNnDuUXaTXRLmNFV5MWN61Wi0OHDmH//v3Y\nv38/fv31V5w7d878fKdOnfDTTz8hLi4OGzZsoOWrApy/LWNF+RU4aPk9Argvw0RbtAH0h98Y5xxG\noxFGoxEGg8Hqq737QmwzGAw4fPgwdu/ejWPHjrV6HUWVSoULFy6494dIfJK/FW0A5VdjnHNzhnkq\ni4TIvnfeeQfl5eVNvl/Kr8BCa48CqKmpwcyZM6HVagUtQnwlIMRYgLsiLy9P6CYQ0mqm/NLpdIJn\nlS9kmtFoFPpX4lWUX6Q1RD3S5iqJRIKgoCAEBQWZ77uyzV3vE4jtYoxh7969WL9+Pb788kv069cP\nu3fvRlBQEFJTU20GHPVUA4c/jrS5yvRviPLEt9vasWNH5ObmNvn9UX4FFhppa5CYmIi9e/c6/Y+J\nMSZ000kjY8eOxdixY1FaWopPPvkElZWViIqKwsKFC23OCaF1G4nYtW/fvtX5RRkmDllZWZRfxG1E\nXbQpFAq8+eabSElJEbopxI2io6PxxBNPmB+b5vw88sgj0Gg0SElJoUncRPQUCgXeeustqFQqoZtC\nPMiUU9OnT4fBYEBSUhIWLVpE+UVaRbSHR+nsq8AzZMgQZGVlYejQoUI3hXiZvx0epfwKHGfOnEHn\nzp0RFRWF8vJy6HQ6SKVSoZtFvCygD4/SgsuBSa/XU9gR0aP8CixvvvkmqqqqUFlZCYlEgvfffx9X\nrlzBG2+8IXTTiAjRxXWJaOj1ekgkEqGbQQghDsvIyMCnn35qPlN25syZGDBggNDNIiLllqKNMXYb\nY+wkY+wMY+wFG8+HMMY+a3h+P2Ms1eK5fzRsP8kYu9Ud7SH+Sa/XIzhYlIPDxMdRhhFP6d+/v9Xj\nhIQE3H777QK1hoidy0UbY0wCYDmAMQC6A5jMGOveaLeHAJRyzjsDeAfAmw2v7Q7gXgA9ANwGYEXD\n+xHShMFgoKKNuB1lGPGktLQ0q/WSp0+fTjlGWs0dI239AJzhnJ/jnOsAfApgfKN9xgNY23B/I4Cb\nWf356uMBfMo513LOzwM40/B+hDRBI23EQyjDiMdIJBL07dvX/Pihhx4SsDVE7NxRtCUCuGjxOL9h\nm819OOd6AOUAYhx8LSEAaE4b8RjKMOJRpkOkycnJ6NKli8CtIWLmjqLN1hUeG19HxN4+jry2/g0Y\ny2SM5TDGcq5du+ZkE4k/oIuJEg/xeIZRfgW2jIwMAEDv3r0FbgkRO3cUbfkAki0eJwG4bG8fxlgw\ngEgAJQ6+FgDAOc/mnKdzztPz8vKQmpoKtVrthuYTX1NeXo4vv/zSai1VtVqNc+fOIS0tjX73xN08\nnmGUX4Ht0qVLAICvvvqKfvfENZxzl26ov9bbOQAdAMgA/AmgR6N9ngSwsuH+vQA2NNzv0bB/SMPr\nzwGQOPCZHACXy+X8ww8/5FVVVby6uprX1NTw2tpartFouFar5TqdjtfV1XG9Xs8NBgM3Go2c+Kby\n8nK+fv16Pm7cOC6TyfisWbPMz3300UdcoVBw0+8dAFcoFPyjjz4SsMXEmwDkcBezyt7N2xlG+RVY\nKL8I5+7LMLesiMAYux3AuwAkAFZzzrMYY681NHIrYywUwHoAN6K+d3ov5/xcw2vnAXgQgB7ALM75\ndgc+z+VGm9bus3Vr6XlXbp58b7G1Xa/XIz8/HxcuXMClS5dgNBrNv5+kpCTIZDIYjUZcvHgRBoOh\nye+QFlwOHMzDKyJ4M8M8mV/NPecr/+4D7X0//vhjVFVVNfkdUn4FFndlmGiXsbJ8/Oabb7qz1+2R\n3ryn31tMbTcajSgtLUV5ebmrfwdWhR7xX54u2rzJE/kFeObfPr2v6+9bWFho7++A8iuAUNHWgHor\n4pWXl4edO3fi+++/x/fff4+rV6+an5s5cybuuusuhIaGYsKECbhy5UqT19PvPnD4a9FGf8P+LzU1\nFbm5uU220+8+sLgrw0S9jJVCoUBWVpbQzSCtlJKSggceeABqtRoFBQU4fPgwlixZgttvvx179uzB\n4MGD0b9/f/zzn/+EQqGwei397onY0d9wYMjKyqL8Im4j2pE2lUqFrKwsTJ06VejmEA/Q6XQAAJlM\nBqD+7NFHHnkEGo0GKSkp9LsPMP420kb5FVjUajXuv/9+6PV6JCYm4s0336TffYAJ6MOj6enpPCcn\nR+hmEC974okn0KNHDzz55JNCN4V4mT8VbZRfgUWr1SIkJAQ33ngjDh06hOPHjyM6OhpxcXEIChL1\nwS7iBHdlGK0JREQjISEBBQUFQjeDEEIctmbNGvz888/QaDQAgIULF+L48eM4cOCAwC0jYkRlPhEN\nKtoIIWIzbtw4fPzxxzhx4gQAYP369eZlrQhxFhVtRDTi4+OpaCOEiEq7du0wdOhQq22jRo0SqDVE\n7KhoI6KRkJBg95pHhBDiq+655x7zfcYYhg8fLlxjiKhR0UZEgw6PEkLEaOLEieZVFdLS0hAZGSlw\ni4hYibJoO3jwIFJp0d2AEx8fj8LCQojxjGdCTCi/Ak9CQgKGDRsGAOjWrZvArSFiJsqiDQByc3OR\nmZlJwRdAQkNDIZfLUVpaKnRTCHEJ5VfgMR0iTUxMFLglRMxEeZ02y2VgQkNDccsttyA4OBjBwcGQ\nSqVO3W/Na1rz+uDgYLomj5M45+ZDCsB/L1BpMBjoArsBxp+u09Y4v0aNGuXxzHLHayQSiZA/NtFb\nsWKF+RqTdHHlwEPXaWug0WiQn58PvV6Puro66PX6Fu8LVagGBQUJVjR6+/VBQUFWBZcz6urqsGHD\nBuzcuROrV68GUF+wZWZmQq/XA/jvSAUACj4iWhqNBpcvX3Y4v/R6PQwGgyBtZYz5bEHp7tdLJJJW\n55ctarUazz33nPkx5RdpLdGPtLVm0V2j0ehQcedIgLryene+l73nhAp4AE6HZ1BQEIqLi5Gfnw+t\nVotOnTohKSkJtbW1+OOPP1BXV9fkM2jR5cDgryNtrc0vg8EgeLZ46zVCkUgkbisuv/nmG9TU1DT5\nDMqvwEEjbWj9ortBQUGQyWTmdS39Gefc6SD1dsjX1NTgzJkzuHDhglVInz17FmfPnm32+8vLy/P0\nj5AQj3Alv4KCgiCVSiGXyz3QMt/BOYfRaBRFcdk40yy32yrYAMov4jzRFm00J8AxjDFIpVJIpVKh\nm9LEuXPn8Pbbb2P16tXmJV4sRUZGol+/fujcuTM+/fRTmycgpKSkeKOphLgV5ZdjGGOQSCSin0+X\nmpqK3NzcJtspv4izRFm09enTB7TgsrhxzlFWVoYBAwYgJiYGJ0+exMmTJ3Hq1CnU1tYCqD88sXbt\nWrRr1w6DBg1CZmamVY+1tSMVhAiJ8ivwZGVlUX4RtxBl0UbEjzGGm266CTfddJPVdqPRiEuXLuHU\nqVM4efIkDhw4gHHjxplHJF544QXk5+cjJSUFCxcupJEKQojPM+XUs88+i4KCAkilUmRnZ1N+EaeJ\n8kSE9PR0Tj3VwNWhQwd88803uO6664RuCvESfzoRgfIrcJWXlyMqKgpRUVG4fPkytm/fjgkTJgjd\nLOIF7sowunAYEZ3evXvj0KFDQjeDEEIc9sorr2DlypUICQlBWVkZ+vTpg927dwvdLCIyVLQR0end\nuzf+/PNPoZtBCCEOu/nmm/HCCy9Aq9UCAI4fP05HC4jTqGgjokMjbYQQsRk8eDAGDBhgta1r164C\ntYaIlSiLNlpwObD16tWLijYiWpRfgYkxhueff95qGxVtxFmiPBHBdEVxhUJBZ+AEIM45oqOjcfr0\nacTFxQndHOIF/nQiAuVX4DIajejevTtOnjwJqVQKjUZDa1IHCFoRAUBNTQ1mzpwJiUSCkJAQhIaG\nIjQ0tMX7wcGi/rYDHmPMPK9t1KhRQjeHkFapqanBjBkzAMCp/JLJZG5dF5N4T1BQEJ577jk8/PDD\nUCqVVLARp7k00sYYawPgMwCpAC4AmMQ5L220T28A7wOIAGAAkMU5/6zhuTUAhgEob9j9fs55i8e9\nLNfuaw1nizxP3Kfgdc2sWbOQlJSEZ599VuimEC/w1EibEBnman4BzhV5nrgfEhIi+lUKhKLVapGU\nlIS6ujqUlZUJ3RziJe7KMFeLtrcAlHDOFzHGXgAQzTmf22if6wBwzvlpxlh7AAcBpHHOyxoC72vO\n+UYnP9fc6Pbt22Pnzp3QaDTQaDTQarVeue8OFLytl5mZCbVajdraWqSkpNCSQH7Og0Wb1zPMMr8S\nExPxww8/eDW/amtrYTQaXf7ZBQcHC5pfpqMmYuz83nPPPdi4cSMYY5RfAcJXDo+OBzC84f5aALsB\nWAUe5/yUxf3LjLGrAOIAuNzFUCgUeOutt9CtWzdX38opnHPodDqPB2xVVRWKiooCPng558jNzUVq\naioAQK1WY/369ebiOTc3F5mZmQBAwUecJViGKRQKvPnmm+jSpYsrb9Mqer3eKwViRUWF3X10Op3L\n3wdjTPD8CgkJcapwVKvV2LZtG4D/ZhvlF3GUqyNtZZzzKIvHpZzz6Gb274f6YOzBOTc29FIHANAC\n2AngBc651oHP5bTgsveCt7n7ng5eU6glJiaic+fOCAkJwVdffWVztFOlUuHChQsut4f4Hg+OtHk9\nwyi/6hmNRuh0OkHzS6PRwB0n48lkMoeLvO3bt1utQWpC+eXfvDbSxhj7HkCCjafmOfNBjLF2ANYD\nmM45Nw0R/QNAAQAZgGzU93Bfs/P6TACZAJCSkkJ/3KgfJQsODkZYWJhgbfBU8FZXV+Pw4cM4e/Ys\nOOcIDQ1Ffn4+qqqq7I4w5uXlefm7J2LgCxlG+dVUUFCQuZARCuccer3eK4ekS0tLodVqbRZsAOUX\ncUyLRRvn3O7peYyxQsZYO875lYZAu2pnvwgA2wC8xDn/1eK9rzTc1TLG/g3A7qxyznk26kMR6enp\n4rtOiZ9yd/ByzvHFF19g1qxZyM/PN28vLCwEAEilUkilUvNVxS2lpKS4pQ3Ev/hChlF++SbGmDlT\nwsPDvfKZqampyM3NbbKd8os4wtXzjbcCmN5wfzqALY13YIzJAHwJYB3n/PNGz7Vr+MoA3AXgqIvt\nISJ25swZ3H777bj77rutCjYAiI+Px/bt21FaWooPP/wQCoXC6nmFQoGsrCxvNpf4B8ow4lVZWVmU\nX6TVXC3aFgG4hTF2GsAtDY/BGEtnjH3QsM8kAEMB3M8YO9Rw693wnJoxdgTAEQCxAP7XxfYQkdq1\naxceeOABXLx4ER06dEBCQgIiIyMhlUoB1I+07du3D2FhYZg6dSqys7OhUqkAAAkJCXSRUtJalGHE\nq0z5lZycbN62cuVKTJkyxS3z64h/E+WKCOnp6TwnJ0foZhAvMRgMqK2tRU1NDeLi4qzO1HrmmWcQ\nHR2Nl19+WcAWEk/zpxURKL+ISZ8+ffD777/jxx9/xKpVq7B27Vq64K6fcleG0V8H8XkSiQRKpRJt\n27Ztcmr9mDFjsGPHDoFaRgghzjt69CgWL16Mjh07AgDGjh2Lzz//nAo20iL6CyGiNmTIEBw5cgQl\nJSVCN4UQQhySlpaGzz//HBs31l+Tuaqqqsk8N0JsEWXRdvDgQaSmpkKtVgvdFCKw0NBQDB06FN9/\n/73QTSHEIZRfRCKRYMWKFVYja3K5XMAWEbEQZdEG1F8F/5FHHsHatWtp8maAGzNmDLZv3y50Mwhx\nmCm/Vq9e7ZaVTYj49OnTB0888YT5cUhIiICtIWIhyhMRGi+4LJFIEBYW5pGbXC4X5dp2geTcuXMY\nNGgQLl26RHNC/JQ/nYhga8F4hULhsQwT6/rCgaCsrAzdunVDYWEhUlNTcf78eaGbRDzEV9Ye9Qlz\n585FdXV1k1tlZSUKCgqabHemUGWMeTRQqchwXceOHREeHo7Dhw+jd+/eLb+AEB8yf/58m/lVXV2N\nS5cuNdlWV1fn1PuHhIR4LL9kMpmHfiqBISoqCosXL8a0adNsLs1HSGOiH2lzdr02zrl5mSRP3PR6\nvVPfS2hoKMLCwqBUKt0eqMHBflGTO2TmzJmIi4vDSy+9JHRTiAf460hba9abrKur81h+OVs4mJbR\n80R+ObsQu1hxzpGeno7jx4+juro6IL7nQEQjbWjdVaQZY5DL5ZDL5YiNjXV7m3Q6nVvCs/EIYVVV\nldOLs8tkMo/2sH0pXPP2VHgAACAASURBVKKjo/Hqq69i/vz5SElJCfjFuInva+1V8KVSKaKiohAV\nFdXyzk4yGAyoqalxOb/KysqsRgmrqqrsrrlpT1BQkMfyS6FQ+Ex+Mcawbt063HjjjWjfvj0KCwsp\nw4hdoi3aVCqVT/5Ry2QyyGQyREdHu/299Xq9WwrC4uJi5OXlWW2rra11qi3OzCN0thceGhrqVKCq\n1Wr885//NI9y5ubmIjMzEwB87u+DEMB380sikSA8PNwj63AajUbU1ta6JcOuXr3aZJuzJ3Q4Ou3F\n2fxSKBROzyM8dOgQOOcoKCgAQBlG7BPl4VG6orj7GY1Gt/Sw7d2cnUfYUjDW1tYiOTkZ4eHhWLFi\nBcrKypq8T2sOPRHf5E+HRym/3I9zDq1W67H8cnYeoWnai6O3d955hzLMz9HhUeJWQUFBUCqVUCqV\nbn9vV+YRVlVVWT0uKirClStXUFRUBKVSierqahgMBpufm5eX5/bvhRDiexhjCA0NRWhoKGJiYtz+\n/q2dR9g4vwoLC5vso9Vq7X4uZRhpjIo24nHumkeo1WoxY8YMZGdnIzw8HBkZGfjuu+/s7p+SktLq\nzyKEEBNPzyPs0KEDLl682OQ5yjDSGF1vgohCXl4ehgwZguzsbABAZWUlvvvuO7Rt2xZ33HEHQkND\nrfZv7SRvQgjxJolEgjfeeKPJMlaUYcQWKtqIz9u5cyf69OmDAwcOWG1PTU3F8ePH8dVXX+GDDz6A\nSqUCYwwSiQTz58+nCbyEEFGYOnUqsrOzkZiYaN62YsUKjBs3zumrBhD/RkUb8VmccyxatAijR49G\nUVGR1XMRERGQSCR45ZVXYDAYMHXqVFy4cAFGoxFz5841n4VFCCFiMHXqVOTn52PYsGEA6k8OmzBh\nAgoLCwVuGfElojx7lDHGffWUeeI+Bw4cwK+//orY2FjExcWZb7Gxsc1eif3s2bMYMGAA8vPz6Yrt\nfsKfzh6l/CK2VFdX49ChQ8jJycGsWbMgkUhgMBhw8OBB3HTTTUI3j7go4M8epevY+L++ffuib9++\nTr+uU6dO6NGjB7Zu3Yq7777bAy0jxDWUX6QxhUKB5cuX45NPPgEA81nx165dE7JZxMeIdqTNdF+h\nUODee+9FREQEIiMjrb7auh8WRut9BoKPPvoIarUa27dvF7opxA38baTNdF8ul+Puu+92OL8iIiIC\nanm6QFNdXY3+/fvj6NGj5m3r16/HfffdJ2CriDu4K8NEX7QBQGJiIsrLy1FVVeXIa80haC8UWwrN\nyMhIyOVyn1kGhTRVW1uLpKQk/PHHH3TavB/w16INADp06IDy8nKUl5fbveagJYVC4XJ+KZVKp6/a\nT7zj9OnTSE9PR0VFBQBgyZIlmD17tsCtIq4K+MOjJpZXjDYYDKisrERFRQUqKipQXl7e7H3T1+Li\nYpw7d878vCNr5EkkEqdC016QNr5UBXEPuVyO+++/H2+//Tbee+89oZtDiE0qlQrnzp0DUH/iTW1t\nrUOZ1fh+YWGh1TZHOuNKpbLVRZ9pm1KppM6rm3Xp0gXr1q3DXXfdBQC4fPmywC0ivkTUI20KhQLZ\n2dlunxNSV1eHyspKh4s+e/ebu9K1iUwmczoobd2XSqVu/Rn4g4KCAnTv3h1Hjx5F+/bthW4OcYE/\njrR5Kr8456iurm5VZlluq6ysdOR7canoM92nIxdNzZs3DwsXLkT//v2xb98+oZtDXBTwh0fFcPaV\nVqt1etTP1n3TQujNkcvlLh8yCQ8P97tDJs888wyMRiPeffddoZtCXOBvRZsY8stgMKCqqsrlzqsj\nRy6Cg4ObzSdHsywkJMQLPxnvMBgMGDRoEP7880+UlpbSURmRC+iiLZAWXDat2+lqcFZUVMBoNLb4\neWFhYS4f8lUqlT5zsodptO2vv/5Cu3bthG4OaSV/KtoCKb+A/x65aG12OXvkwtWjFr505KKoqAi9\ne/fG3Llz8fTTTwvdHOICmtMWICzX7UxISGj1+5gOmbRm1O/SpUvm+44eMgkPD3c5PBUKhcuHTBIS\nEpCRkYGuXbuiqqoKKSkpPj/CQYg/kUqlaNOmDdq0aePS+1geuXCm6MvNzW31kQtX5vy548hFbGws\npk6ditmzZ2PmzJmUX4SKtkDBGINSqYRSqXRpfpfRaGzxZA9b20pKSnD+/HnzNmdO9nAlPP/zn//g\nxx9/RG1tLQC6PhYhYhUSEmK+wHZrmY5ctGak78yZM04fuVAqlS4dtfjmm2+wbNky81nFlF/EpcOj\njLE2AD4DkArgAoBJnPNSG/sZABxpeJjHOR/XsL0DgE8BtAHwO4BpnPMWF1oLtMML/kiv17vlZA+N\nRtOqz7c865j4Pk8dHhUiwyi/xK+lIxeO5pojRy5sofwSH5+Y08YYewtACed8EWPsBQDRnPO5Nvar\n4pwrbWzfAOALzvmnjLGVAP7knL/f0udS6BETnU5nFYjffvstvvjiCzz99NPYv38/li1bZvN1jDGH\nesrEN3iwaPN6hlF+ERN7Ry5MX02jao1RfomPrxRtJwEM55xfYYy1A7Cbc97Vxn5NAo/VT1a6BiCB\nc65njA0A8Arn/NaWPpdCj9iyY8cO3HXXXVCpVEhJScH3339vd1/qqYqLB4s2r2cY5RdxVGpqKnJz\nc5tsp/wSH3dlmKun+MVzzq8AQMPXtnb2C2WM5TDGfmWM3dWwLQZAGefcNCs0H0CiIx968OBBpKam\nQq1Wu9J24ke+/fZb3HXXXdBqtTh16hS+//57pKam4oknnoBCobDaVy6XIysrS6CWEh/j9Qyj/CKO\nysrKapJfADB//nxoNBoUFxcL0CoipBZPRGCMfQ/A1mmL85z4nBTO+WXGWEcAuxhjRwBU2NjP7rAf\nYywTgHmsmCZkEpPvvvsO48ePt7okQFRUFLZv345u3bph4MCBmDdvHvLy8qBUKjF48GD6mwkgvpBh\nlF+kNUx/G6b8kslk0Gq1OH/+PObNm4eMjAxMmjRJ4FYSb/LK4dFGr1kD4GsAm9DKw6OWa/fFxcVh\n8+bN5lPKo6OjfeYaO8Tzdu7ciTvuuKPJCQlhYWEYMWIE/v3vfyM2Nta8/dKlS7j++utx+PBhJCUl\nebu5pJWEPjza6DVr4EKGWeZXbGwsPv/8c6v8cselboh/OnXqFLp27Yrg4GDo9XrMmTMHixcvFrpZ\nxAG+cp22rQCmA1jU8HVL4x0YY9EAajjnWsZYLIBBAN7inHPG2A8A7kb92Vc2X9+Sa9euYdCgQVbb\nlEqlVQia7rf0OCwsjMJSRHbt2oU777wTer0eN910E/r27Yt+/fqhX79+SEtLs3mNpMTERDz11FOY\nOXMmNm3aJECriY8RNMOKioowYsQIq20ymaxV+RUZGel3K5qQ//rggw+wcuVKyGQy6HT1Jyj/9ttv\nAreKeJurI20xADYASAGQB+AeznkJYywdwGOc84cZYwMB/B8AI+rn0L3LOf+w4fUd8d/T5f8AcB/n\nvMXLXlv2VBMSErBmzRqUlJSYb6WlpXYfm/7YbZFKpc2Gor3noqKiEBxMl7zzppqaGnz88cfo0aMH\nevfuDblc7vBrNRoNrr/+eixZsgR33nmnB1tJ3MWDI21ezzDL/GrXrh3UarXD+VVVVdXc+yIyMrJV\nBR8tkeT7DAbD/7d35tFVVlf//5wEEhISMgMhEIZILcj086eAE1KgLSpOiBYLCNYfOKC+wlLEgfW6\nrFhGX1uVAkWpQ1qgICpCFRTh1aiggITiyJgCCUnIAIQkhOT8/rhDb5I7PDe59z532J+1nnXvM+5z\n7hO+7HP2OfswdepUVq5caT8WHx9PZWWl/P8TAgTF7FGzaOmCy1przp0751YUXe2fPu1s+Mp/SEpK\n8kokbfuyULI5fPTRR9xzzz18++23tG/f3uziCB4Ip2WsWrNg/Pnz56moqDCsX47f3aWIiIuLa1GD\ntUOHDkGzZF0k0NDQwLRp03j11Vftx/Lz8+nfv7+JpRKMEPFOW6AXXK6rq6OioqJFDp+7ZVNiY2O9\nEknHUIiIZeuYNGkSnTt3ZuHChWYXRfBAuDltgdYvWz6wluiXu9VLoqKiSElJaVGDNSYmJiB1Dzca\nGhq47777+Mtf/gLAK6+8wgMPPGByqQRPRLTTFkp5jrTWnD171utWcVlZGVVVVS6fq5QiOTm5RaGQ\n2NjYAP4CwUtxcTH9+vVjy5YtDBw40OziCG4IJ6ctlPQLLMMJysvLvXb4KioqcPf/S/v27b3WrtTU\nVBISEiI+OtHQ0MADDzzAsmXLGDRoEHv27DG7SIIHgmUiguAB2+LpiYmJdO/e3at7z58/79apa7p/\n+PBh+3F3oZD4+HivevUcQyHhJJYdO3Zk7ty53HvvveTl5ckgbkFwQrt27cjMzCQzM9Or+xoaGqis\nrDTco/fDDz/Y9x3T9zSlTZs2dk3yxuFLSUkJm7FfUVFRLFmyhJqaGnJzc/nXv/5Fv379zC6WEACk\npy0MaWho4PTp01716tn2bQurOyM6OrrFoZBgTcPS0NDAsGHDmDBhAvfff7/ZxRFcID1tkUV1dbXX\n2lVWVkZlZaXb5yYmJnrl5Nm+B2saFq01o0aN4ty5c+Tl5cmQmSBGwqMien6hurq6RaGQyspKt6EQ\nV2lYPDl8gUjDsn//foYPH05+fr7XvQlCYBCnTTDChQsX7L173g5Jqaurc/ncmJiYFjVWk5OT/d6D\nX19fz1VXXcU999zD1KlT/WpLaDnitInoBRX19fVehUIc992lYWnTpo3XQpma6n0alieeeIJt27ZR\nWFhIQUEB2dnZAR0oLrhHnDbBn2itqaqqatFEjTNnzrh9dnJycoszCxglPz+fq6++mqSkJI4fPy76\nFYTImDYhqIiOjrYLjjdord2GQprunzhxgv3791NWVuZ1GhZ3QhkXF8eOHTvsvYWyzJAgRA5KKRIS\nEkhISKBbt25e3VtXV+dVdOLo0aP2/fr6epfPbdeuneEw7o4dO6iurrY7kKJf4Yv0tAkhy4ULF7zK\nWeW47y4NiyPdu3fnyJEj/q2I4BHpaRPCDa01Z86caVFmAXdpWBwR/QoeIjo8akaeIyF80Frz5Zdf\nUlVVRXp6Oh9//DGPPvqo02uVUm5n4gqBIZycNtEvobXU1tY2cuSGDRvmdEyx6Ffw4CsNC9mpJrbu\n39zcXLOLIoQYVVVV3H333Rw7doy3336bxx57zOW12dnZASyZECmIfgmtITY2ls6dO9O3b1+uvvpq\nlzqVnZ1tuFdOCA1CtqfN9j0qKop+/fqRkZFh3zp27Nho37alpKTIlOgIR2vNXXfdxVtvvUV8fDzn\nzp0jLi6OiRMnkpub20jg2rVrx4oVK6Q3JAgIt5422/eoqCh69+7dTKucaVh6erqsIiA4JTc3l2nT\npjVz0BYsWEB5eTl33nmnLHVlMjIRwUpDQwPdu3enpKSEI0eOUFJS4nKAenR0NGlpaW4dO8ctLS1N\nEq6GGa+99hpvvfUWYFl0PiMjg23bttG3b1+uvfZannrqKQoKCkhPT6e+vp7Ro0ebXGIhnGloaGDA\ngAGUlJTw448/kpeXR2lpqcuQVlJSksfGqeMmC8FHBraGpU2/EhISOHPmDC+99BJlZZZ1Z+fNm2dy\nKQVfEPI9bc4GWtbW1lJaWkpxcTElJSUuN9v5iooKV3bsTp6rzVE409PTwybjdjiyb98+Bg8eTE1N\nTaPjQ4cOZfXq1c1CDLNmzWLfvn1s3LhRemhNJlx72pzpV0NDA2VlZW61y1G/SktLXU6sSUhIMOTc\n2a6Jj4/3a90F/6O15vDhw1xxxRUUFxcD0LVrV44ePSo6ZiIRPxEBLMsxLV++vNXhq7q6OkpLSz2K\no20rKytzmUg2JSXFUKjDtkm4IzCcPXuWyy+/nO+//95+rH///kyaNIk777yTrl27Nrunrq6OkSNH\n8qtf/Yqnn346kMUVmhCOTpuv9EtrTUVFhWH9KikpcZkbMT4+3lAD1bbJOqDBR15eHrfddhsnT55s\ndPyTTz5h+PDh5hRKEKfNzNlXFy5caNYSdter5y7c0aFDB8OhjoyMDK8SLgoWtNZMnjyZN998ky5d\nujBhwgQmTpzIgAEDPN574sQJLrvsMt58801GjhwZgNIKzgg3p81M/bKlmjCqXyUlJS6Xt4uNjfWq\nkZqUlCROXgAoKipiwoQJbN261X7snnvuYcWKFSaWKrKJaKct1PIcNTQ0UF5e7lEYHTd34Q6joY6M\njAzat28f4NoGH+vWrWPjxo1MnDiRa6+91utxilu3bmXixIl89dVXZGVl+amUgjvCyWkLNf0Cy4xr\nI/plu6aqqsrpc9q2bUt6errhRqpMHms59fX1PPfcczzzzDOAZWJVeXm5jHM0CXHaQkz0vMFTuMNZ\ny9hVuCMuLs5wqCMjI4PExMSwawnX19e3ekLJ3Llz+eCDD9i6dStt27b1UckEo4jTFlpUV1d7Fa51\nN3ksPT3dcCM1NTVVJo81YevWrdxxxx2cOnWKhQsXusxJKfgXcdrCXPS8wVm4w1PYw1W4IyYmxqvZ\nacnJyWHn5DmjoaGBMWPG0LdvXxYtWmR2cSIOcdrCG9vkMaPh2vLycqfPcTV5zJWWRcrksaKiIkaN\nGsWRI0c4fvw4SUlJZhcp4hCnTUSvVVRVVRkWyJKSEs6ePev0ObZwh9GWcCiHO06dOsXQoUN59NFH\nuffee80uTkQhTpvgiKfJY021zejkMSMN1VCdPFZfX8+wYcNo06YNmzdvJjY21uwiRRTitInoBRR3\n4Q5nzp+RXHlGWsLBlivv4MGDDBs2jJdffplbb73V7OJEDOK0Ca2hvr6eU6dOGY5GGM2VZ6ShGkxj\nyOrr6xk/fjxRUVH8/e9/D9kGdCgiTpuIXlDTNNzhqVfPXbgjNTXVcCs4PT3d72POdu/ezejRo1m7\ndi3Dhg3zqy3BgjhtQiCxTR7zJhrRksljzjTN35PHampqGD16NAMGDOCPf/xjRAxvCQYi2mkze8q8\n4Hvq6uoatYQ9ieSpU6e8ypXnTihbEu746KOPmDBhAjNmzGDp0qUUFBSQnZ0tf5N+IpycNtGv8MPI\n5LGm2ubN5DF3DdaWTB6rrKxk2LBhXHzxxezcuVP0KwBEvNMGvktOKYQe7sIdzgTSSK48o0Jpy5X3\n4IMPsmTJkkbOo/xN+odwc9pA/lYiGXeTx1w1Wt3lyvMmjYpt8tjLL7/Mww8/LPoVIMRps5KcnMzi\nxYvJzMykc+fOZGZmkpGREVTjoATzaRruMBKydRXuaN++PRkZGZw4ccJpa9nZ0kRC6whHpw0s46Oe\nf/75RvrVuXPnoBoHJQQHjpPHjEQjPE0eKy0tpa6urtl50S//IE6bG6KioujYsWMjEXT1KclnBWdo\nramsrHQrkrm5uU7vVUq57NUTWka4Om2uSE5ONqRfqampMiZJcIqnyWOvvvqq0/tEv/xDUDhtSqlU\nYDXQAzgC3KG1Lm9yzS+A/3E49HNgvNb6HaXUX4FrgUrruSla628M2LUXulu3bmzfvp3CwkKKiooo\nKiqyf3f8PHnyJPX19c2elZiYaEgc09PTZaaNwKFDh+jVqxe1tbUkJyc3W3wepKXqD/zltJmhYY76\nlZ2dzY4dO1zqlu2zsLCQc+fONXtW27ZtDelXp06dJMWD0IgePXpw9OjRZsezsrI4duwYX3/9NZdd\nFhbtpKAgWJy2BUCZ1nqeUmo2kKK1ftzN9anAAaCr1vqcVfDe11qv9dKu12NCGhoaKC0t9SiORUVF\nnDlzptn90dHRdOrUqZkYOhNIWR80PKmtrWXQoEF89tln3H333WzYsAGlVKMxIUopli1bxtSpU00s\nafjhR6ct4BrW0jFtZ86cMaRfJSUlTifppKamGnLwIiVhdqSTm5vLtGnTmjUGEhMT+eabb7j++utZ\ntWoVgwYNMqmE4UWwOG0/AMO11oVKqUxgm9b6YjfXTwOu1VpPsO7/lRY6bf6cfVVVVWVIHIuLi512\nIyclJRkSx7S0NBHHEOLll1/moYceIicnh4MHD9KrVy8eeeQRFi9eTEFBAd26daNPnz6UlZWxceNG\nMjIyzC5y2OBHpy3gGuZv/aqrq6OkpMSjfhUWFjrtKY6NjTXceydLuoU2ubm5PPXUU3b9iouL44cf\nfiAxMZEzZ84wcuRItmzZIv9P+YBgcdoqtNbJDvvlWusUN9dvBV7QWr9v3f8rcAVQC3wMzNZa13qy\nGyx5jurr652KozehDWe9d8568yS0YS5VVVXk5ORw8uRJwNIa3b17NxdddFGj67TWzJkzh9WrV/PP\nf/6z2XmhZfjRaQu4hgWLfmmtOX36tEfnrqioiNLSUqfPSE9Pdxt1sH126NBB/uMPAWpqahg4cCA/\n/vij/dimTZu47rrrTCxVeBAwp00p9RHQ2cmpp4DXjQqetRWbD3TRWtc5HCsCYoDlwEGt9bMu7p8G\nTAPIzs7+v85i8cFMa0MbKSkpHp27zMxMCW34ifnz5zN79uxGx9LT03n77be55pprml2/fPly/vu/\n/5v169czdOjQQBUzbGmN4AWDhoW6fp0/f57i4mJDvXfOZlTHxcUZ6r3r2LFjRKwFGowUFRVx4403\n0rRB0adPH/Lz8+W9tJJg6WkzHFpQSv0XcInWepqL88OBR7XWYzzZDZaWqj9obWgjJibGcGgjVNfQ\nCzQVFRX06tWr0aoNY8eOZd68efTu3dvlfZs2bWLy5MksX75clrxqJcEQHvWVhoWzftmSzBrRL2er\noCilyMjIMDR2ODEx0YQahje1tbUsW7aMuXPnUlxcbD++ZMkS7r//fhNLFvoEi9O2EDjlMIg3VWs9\ny8W1XwJPaK0/cTiWaRVLhWV2Vo3Weraz+x0JZ9EzitHQRmFhIadOnXL6jLS0NEO9d5Ee2pgzZw7P\nPfccAEOGDGHx4sVcddVVhu7dtWsXN910E7Nnz+ahhx7yZzHDGj86bQHXMNEvC7W1tW5n/Dt+OsuZ\n2L59e0MNVMnb6T1nz57lpZdeYv78+VRWVhITE8Phw4fp0qWL2UULWYLFaUsD1gDZQAFwu9a6TCl1\nGXCf1vr/Wa/rAeQB3bTWDQ73bwUyAAV8Y73HeUZAB0T0vOP8+fOcPHnS5XgVT6GNdu3aGXLuwjG0\nUVxcTK9evejYsSPz5s3j9ttv99qBPXz4MNdffz033HADCxYskNQxLcCPTlvANUz0yzsaGhooKysz\npF+VlZXN7rfl7TSiYfHx8SbUMHgpLy9nwYIFLFq0iLS0NHbt2kVWVpbZxQpJgsJpMwsRPf/gi9CG\n48Bkd58JCQkh0Xv37LPPkpCQwPTp01s1GaSsrIxbbrmFzp0788Ybb0jGey8Jp+S6ol/+o7q62lDv\nneTt9I6ioiLuvPNODhw4wKZNm+jfv7/ZRQo5xGkT0TOV1oY24uPjDTl3Zoc2qqqqfLZqRk1NDZMn\nT+bEiRO8++67pKam+uS5kYA4bYIv8VfeTmdj8cIpb2dubi4zZsxg1apVjBgxwuzihBTitInohQTu\nQhtNP92FNsJlSbKGhgYef/xxNmzYwMaNG8nJyTG7SCGBOG2CWfgib6eRiRWhkrdz27Zt3HHHHSxa\ntIi77rrL7OKEDL7SsPAagCQEHVFRUaSnp5Oenk6/fv3cXnvu3DlOnjzpdkmyvXv3egxteHLwzAxt\nREVFsXDhQnr27MnQoUN58cUX/ZJgVRAE39C+fXtycnI8NrCM5O3cuXNnyOftHD58OJ988gm33HIL\n27Zt409/+hMJCQmmlSfSkJ42IeTwVWjDSO+dP0Mbe/bs4be//S2XXnopS5YsISkpyW+2Qh3paRPC\nCX/m7XT8npKS4rfeu7Nnz/Lwww/z6aef8re//Y3LL7/cL3bCBQmPiugJBgj2JcnOnTvHzJkz+fDD\nD8nNzeXKK6/0RbXDDnHahEgkFPJ2/uMf/2D69OnMmDGDWbNmSXoVF4jTJqIn+BBXoY2mIQ5PoQ1P\nAtmpUyenM0ffeecd7r33Xu6//35ycnKYM2cOBQUFZGdn+22NylBCnDZBcI3ZeTsLCgqYNGkSSinG\njh3LCy+8IPrVBHHaRPQEk/BFaMOZILZr145FixZRUFDQ6L74+HiWL18e0cInTpsg+AZf5O101Vv3\nxhtvkJeX1+h60S8L4rSJ6AlBTmtDG450796dI0eOBKbgQYg4bYIQWFqbt9MRm35VV1eHVQoUb5DZ\no4IQ5LRt25YuXbp4XPrFMbTRt29fp71zBQUF/iqmIAhCM5RSpKSkkJKSQt++fd1ea8vb2bNnT7f6\ndd999/Hcc8/RrVs3v5Q5EoiclM6CEKQopUhKSuLiiy92uVJCWlqaUzEUBEEwm9jYWLp37052drbT\n81prpk+fTl5eHjfccAOnT58OcAnDB3HaBMFk1qxZQ2lpKevXr6e6urrZIN/Y2Fji4uK45pprkLCa\nIAjByty5c5ut39q2bVuUUixZsoSDBw+yb98+br/9durq6kwqZWgjTpsgmExubi4PP/wwDz74IAAz\nZsyge/fuKKXo3r07r776KocPH2bKlCnceOON3H333Zw4ccLkUguCIDRmwoQJLF++vJF+rVy5kvXr\n1ze6bvPmzTzwwAMSPWgBMhFBEEzk/PnzpKWlcfbsWQB++ctf8v7777vMmXT69Gnmzp3LihUrmDlz\nJjNnzoyIgb0yEUEQQpPPP/+c8ePH8+9//7vZuZkzZ7J48WITShV4fKVh0tMmCCby+eef2x02gC1b\ntnDRRRfx008/Ob2+Q4cOzJ8/n507d7J792769OnDmjVrpMUqCEJQcuWVV3L06FHy8/NZsGABI0aM\noE0byxzIF154gTFjxjhdd1pwjjhtgmAiH3zwQaP9gQMH8sUXX9C7d2+39+Xk5LBu3TpWrlzJ888/\nz7Bhw9i1a5c/iyoIgtAilFL079+fxx57jI8//pjy8nI2bNjAlClTyMvLo1evXixfvtzpmtJCY8Rp\nEwQTcXTaRo8eDzkpnwAADQlJREFUzaeffkpWVpbh+3/xi1+wa9cu7rrrLsaMGcOkSZPIz8/3R1EF\nQRB8QkJCAmPGjGHlypWUl5ezZs0a3nrrLS699FJWr17NhQsXzC5i0CJOmyCYRGFhIXv37gVg2rRp\nbNiwgcTERK+fEx0dzdSpU/n+++/p06cP1113HaNGjWLTpk1O11MVBEEIJkaOHMn27dv5/e9/z5Il\nS8jJyWHRokVUVFSYXbSgQ5w2QTCJzZs3AzB//nyWLl1qH+fRUpKSknjyySftM02ffvpp+vbty7Jl\ny5yulyoIghAsKKW46aab2L59O+vWrWPPnj306tWLRx55hEOHDpldvKBBnDZBMIlt27axatUqZs2a\n1Sw3W2uIiYlh4sSJ7Nq1i6VLl7Jp0yZ69OjB008/TWFhoc/sCIIg+IPLLruM3Nxc8vPzadeuHYMH\nD+a2224jLy8v4iddidMmCCYxa9YsfvOb3/jt+Uophg8fzrvvvstnn31GeXk5l1xyCVOmTLGHZQVB\nEIKVrl27Mm/ePI4cOcKIESOYMmUKQ4cOZdWqVRGbnFecNkEwiT59+gTM1s9+9jNeeeUVDhw4wM9/\n/nNuuOEGRo4cyeuvv+5xsWdBEAQzSUhIYPr06Xz//fc8+eSTLF26lJycHJ599lm+/fZbs4sXUMRp\nE4QIIjU1ldmzZ3Po0CGmTp3KO++8Q48ePRg9ejQrVqygpKTE7CIKgiA4JTo6mptvvplt27bxzjvv\nUFZWxq9//Wv69u3LnDlz2Lt3b9iHT8VpE4QIJCYmhvHjx7N+/XqOHz/O7373O3ti3xEjRrBkyRIZ\n/yYIQtBy6aWX8uKLL3L06FFee+01ampquPXWW+nduzePP/44X331VVg6cLKMlSAIdqqrq/nwww9Z\nt24d77//Ppdccgnjxo1j7NixZGdnm1YuWcZKEARPaK3Zs2cP69atY+3atdTU1DB27FjGjRvHFVdc\nQVSUef1UvtIwcdoEQXBKbW0tH3/8MWvXruW9996jZ8+eXHPNNQwZMoQhQ4bYF4UOBOK0CYLgDVpr\n9u/fb3fgTp06xahRo+z6NWDAAJdrPPuDoHDalFK3A88AfYDBWmunSqSUGg38EYgGVmit51mP9wRW\nAanAbmCS1vq8J7sieoIQWOrq6sjLy+OLL75g586d7Nixg/r6egYPHmwXwcsvv5zk5GS/2PeX02aG\nhol+CULg+fHHH9m+fbtdvw4ePMiAAQPs+jVkyBB69uzpt4ZosDhtfYAGYBnwqDPBU0pFAz8CvwSO\nAV8Bd2qtv1VKrQHe1lqvUkotBfZqrf/sya6IniCYi9aaY8eOsWPHDnbs2GFfwL5r1652ARw8eDAX\nXXQRHTp0aLUQ+tFpC7iGiX4JgvmcOXOGXbt22fVrx44dnD9/3t4QHTx4MAMGDKBjx45ER0e32p6v\nNKxVKdi11t9ZC+PussHAAa31Ieu1q4CblVLfASOA31qvex1Li9ej0yYIgrkopejWrRvdunVj3Lhx\nAFy4cIH9+/fbRfDPf/6zPZN5VlYWXbt2JSsrq9FmO9apUyefCKO3iIYJQmSSmJjI8OHDGT58uP3Y\n8ePH7Q3RP/zhD3z77bdUVFTQuXPnZtrVVNPi4uICUu7WrZtjjCzg3w77x4AhQBpQobW+4HDc+ErZ\ngiAEFW3atGHgwIEMHDiQadOmAZYeudOnT3P8+PFG2/79+9m8ebN9v6ysjI4dO5Kenk7btm3tW5s2\nbWjbtq3JNRMNE4RIICsri7FjxzJ27Fj7sdraWgoLC+1adezYMY4fP87u3bsbaVr79u3JzMwkLi7O\nrlu2T19qmEenTSn1EdDZyamntNbvGrDhrAmr3Rx3VY5pwDTrbq1S6l8GbPuLdKA0Am1Huv1Irrvf\n7dvEzwUXt/S5waBhol9BYz+S6262/bCu+/nz5z0lKm+xhjni0WnTWo9qpY1jQDeH/a7ACSw/XrJS\nqo21pWo77qocy4HlAEqpr82cSWam/Uiuu9n2I7nuZttXSrV4EFgwaJjoV3DYj+S6m20/kutus++L\n5wQiaclXQG+lVE+lVAwwHnhPW2ZAfAKMs143GTDS6hUEQQgkomGCIAQFrXLalFK3KqWOAVcAG5VS\nH1qPd1FKbQKwtkAfBD4EvgPWaK33Wx/xODBTKXUAy/iQV1tTHkEQBG8QDRMEIZRo7ezR9cB6J8dP\nANc77G8CNjm57hCWmVnesrwF9/gSM+1Hct3Nth/JdTfbvl9sm6RhkfwezbYfyXU3234k191n9kNy\nRQRBEARBEIRIQxaMFwRBEARBCAGC1mlTSi1USn2vlMpXSq1XSjldH0cpNVop9YNS6oBSarbD8Z5K\nqR1KqZ+UUqutA4iN2r5dKbVfKdWglHI620QpdbFS6huH7bRS6hHruWeUUscdzl3v7BmtsW+97ohS\nap/VxtcOx1OVUlusdd+ilErxtX2lVDel1CdKqe+s1/6Xw7lA1d8f797jb6eU+kWTd1+jlLrFeu6v\nSqnDDucGeVl3Q+9OKVXvYOM9X9Tdi/oPUkp9YX1H+Uqp3zic87r+rt6jw/lYa10OWOvWw+HcE9bj\nPyilfu1NXf2JMlG/rPebpmFe/PsV/fLPuzdNw4y+OyX6ZTvnvX5prYNyA34FtLF+nw/Md3JNNHAQ\n6AXEAHuBvtZza4Dx1u9Lgfu9sN0HS06VbcBlBq6PBoqA7tb9Z7AsidPSuhuyDxwB0p0cXwDMtn6f\n7ey3a619IBO41Po9EcsyP7bf3u/19+O79+q3w7LmZBkQb93/KzCuFXU3ZB846+J4i+tu1D7wM6C3\n9XsXoBBIbkn93b1Hh2seAJZav48HVlu/97VeHwv0tD4nuqW/vS83TNQv6z2maZhR24h++evdm6Zh\nRm0j+gUt1K+g7WnTWm/W/8k0/iWWHEhNsS8voy2LNNuWl1FYlpdZa73udeAWL2x/p7X+wYvijgQO\naq2PenGPL+035WYsdQYv627Uvta6UGu92/r9DJZZdT7JBm+w/n5593j/240D/qm1PueFDV/at+OD\nuhuyr7X+UWv9k/X7CaAYyPDSjg2n79FNmdYCI611vRlYpbWu1VofBg7QsolNPsdM/bLaN03DRL9M\n1S8wV8NEv/ysX0HrtDXhd8A/nRx3trxMFoFfXmY88Pcmxx60dr2+5m33vhdoYLNSapeyZFy30Ulr\nXQgWcQI6+sk+ANbu3v8D7HA47O/6++vde/vbOXv3c611/x+lVKwXtr2x304p9bVS6ktbWAPf/N17\nVX+l1GAsLcyDDoe9qb+r9+j0GmvdKrHU1ci9wUCw6xeYo2GiX//Bl+/eTA0T/fKzfgVi7VGXKAPL\nyyilngIuALnOHuHkmKHlZYzYNoI15n4T8ITD4T8Dv7fa/D2wGItw+9r+VVrrE0qpjsAWpdT3Wuv/\nNVhuX9U/AVgHPKK1Pm09HIj6++XdG7Dr+JxMoD+W/F02nsASZorBMsX7ceBZP9jPtr77XsBWpdQ+\n4LST65pND/dx/d8EJmutG6yHPda/6WMMlNknS+H5GjP1y6h9I7REw0S/zF0azUwNE/1q/BgDZfap\nfpnqtGkPy8sopSYDY4CR2hoEbkKLl5fxZNsLrgN2a61POjzb/l0p9Rfg/aY3+cK+tWsXrXWxUmo9\nlq7V/wVOKqUytdaF1j/MYn/YV0q1xSJ4uVrrtx2eHYj6++XdK6U8/nYO3AGs11rXOTy70Pq1Vim1\nEni06U2+sO/w7g8ppbZh6SlYh4FllXxhXynVAdgIPK21/tLh2R7r3wRX79HZNceUUm2AJCxjcIzc\n6zfM1C8j9r3Aaw0T/TJ3aTQzNUz0qxEB16+gDY8qpUZj8XJvchNrD4blZe6kSdey9Y/Fxq2AzxeH\nVkq1V0ol2r5jGfhss/MeljqDn+qulFJYsr9/p7V+ock5v9cf/717b347l+/e+vvcgvd192hfKZVi\n67ZXSqUDVwHf+ujv3oj9GCwJad/QWv+jyTlv6+/0Pbop0zhgq7Wu7wHjlWV2Vk+gN7DTUC39TAjp\nF5igYaJffn33ZmqY6Je/9Uu3cIaMvzcsg/L+DXxj3WyzL7oAmxyuux7LzJ+DWLqmbcd7WX+AA8A/\ngFgvbN+KxQuuBU4CH7qwHQ+cApKa3P8msA/It76YTC/r7tG+tX57rdv+JnVPAz4GfrJ+pvrB/tVY\nunLzHd7R9YGqvx/fvdPfDrgMWOFwXQ/gOBDV5P6t1rr/C3gLSPCy7h7tA1dabey1ft7ji7p7YX8i\nUOfw3r8BBrW0/s7eI5aQxE3W7+2sdTlgrVsvh3ufst73A3CdN3X154aJ+uXlvyGfa5gR24h++fPd\nm6ZhRmwj+tUq/ZIVEQRBEARBEEKAoA2PCoIgCIIgCP9BnDZBEARBEIQQQJw2QRAEQRCEEECcNkEQ\nBEEQhBBAnDZBEARBEIQQQJw2QRAEQRCEEECcNkEQBEEQhBBAnDZBEARBEIQQ4P8DAX1NYQNQtGUA\nAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10, 5), ncols=2)\n", "ax[0].add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "ax[1].add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for theta_deg in np.arange(-5.1, 5, 0.7):\n", " ray = Ray(origin=PointSource(-10 + 1j * 0), direction=(np.cos(np.deg2rad(theta_deg)) + 1j * np.sin(np.deg2rad(theta_deg))))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, tangent = lens_normal_tangent(point, lens)\n", " ax[0].quiver([point.real], [point.imag], [normal.real], [normal.imag])\n", " plot_ray(ray, source.coord.real, point.real, ax=ax[0])\n", " \n", " ax[1].quiver([point.real], [point.imag], [tangent.real], [tangent.imag])\n", " plot_ray(ray, source.coord.real, point.real, ax=ax[1])\n", " \n", "ax[0].axis([-2, 0, -1, 1])\n", "ax[1].axis([-2, 0, -1, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Refracted ray" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's now compute the refracted ray." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def dot_product(v1, v2):\n", " \"\"\"Returns the dot product between two vectors represented as complex numbers.\"\"\"\n", " return (v1 * v2.conjugate()).real" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "from math import acos, asin, copysign\n", "\n", "def compute_refracted_ray(ray, intersection_point, lens, inward=True):\n", " \"\"\"Returns the ray refracted by the lens at the given intersection point.\"\"\"\n", " normal, tangent = lens_normal_tangent(intersection_point, lens)\n", " # checking for inward/outward \n", " if inward:\n", " n1 = 1.\n", " n2 = lens.n\n", " else:\n", " n1 = lens.n\n", " n2 = 1.\n", " incoming = ray.direction - intersection_point\n", " incoming /= abs(incoming)\n", " dotprod = dot_product(normal, incoming)\n", " if dotprod**2 <= 1:\n", " refracted_angle = asin(n1 / n2 * sqrt(1 - dotprod**2))\n", " refracted_angle = copysign(refracted_angle, -dot_product(tangent, incoming))\n", " refracted_dir = cos(refracted_angle) * normal + sin(refracted_angle) * tangent \n", " return normal, Ray(PointSource(intersection_point), refracted_dir)\n", " else:\n", " return normal, None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's test the output of this function:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[-4, 4, -4, 4]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens = Lens(r=1, n=1.5)\n", "source = PointSource(coord=(-2 + 0j))\n", "ray = Ray(origin=source, direction=(1+0.3j))\n", "intersection(ray, lens)\n", "\n", "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "point = intersection(ray, lens)\n", "plt.plot(point.real, point.imag, 'o')\n", "normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", "plt.quiver([point.real], [point.imag], [-normal.real], [-normal.imag])\n", "plt.quiver([point.real], [point.imag], [normal.real], [normal.imag])\n", "plot_ray(ray, source.coord.real, point.real)\n", "plot_ray(refracted_ray, point.real, 4)\n", "ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Applying the tracing to several setups " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's see if we can plot several rays:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for theta_deg in np.arange(-5.1, 5, 0.9):\n", " ray = Ray(origin=PointSource(-10 + 1j * 0), direction=(np.cos(np.deg2rad(theta_deg)) + 1j * np.sin(np.deg2rad(theta_deg))))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", " plot_ray(ray, source.coord.real, point.real)\n", " plot_ray(refracted_ray, point.real, 4)\n", " ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Does this change if all rays are horizontal and farther away?" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-4, 4, -4, 4]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for origin_y in np.arange(-2, 2, 0.11):\n", " ray = Ray(origin=PointSource(-10 + 1j * origin_y), direction=(1 + 0j))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", " plot_ray(ray, ray.origin.coord.real, point.real)\n", " plot_ray(refracted_ray, point.real, 4)\n", "ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-4, 4, -4, 4]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nhDLH/wNJ0I1jTuCwIAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for origin_y in np.arange(-2, 2, 0.11):\n", " ray = Ray(origin=PointSource(-5 + 1j * origin_y), direction=(1 + 0.1j))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", " plot_ray(ray, ray.origin.coord.real, point.real)\n", " plot_ray(refracted_ray, point.real, 4)\n", "ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Taking into account the full lens " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, here we are not taking the second refraction into account correctly, since we're just tracing rays outwards from the lens. Let's try to add this element." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-4, 4, -4, 4]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for origin_y in np.arange(-2, 2, 0.11):\n", " ray = Ray(origin=PointSource(-5 + 1j * origin_y), direction=(1 + 0.1j))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", " point2 = intersection(refracted_ray, lens)\n", " if point2 is not None:\n", " normal2, refracted_ray2 = compute_refracted_ray(refracted_ray, point2, lens, inward=False)\n", " \n", " # plotting\n", " if point is not None:\n", " plot_ray(ray, ray.origin.coord.real, point.real)\n", " if point2 is not None:\n", " plot_ray(refracted_ray, point.real, point2.real)\n", " if refracted_ray2 is not None:\n", " plot_ray(refracted_ray2, point2.real, 4)\n", "ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What about some point like source?" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-4, 4, -4, 4]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nwUTv5+C7+tlsNnr11VcpJSWFli1bRi+++CJ1d3fPy7YvXrxIzz77LKWlpVFWVhb913/917xsl7lX\nZ2cnvfPOO/Td736XYmJiZLAtX76cfvnLX9Lu3btpZGSE3nrrLfL19Z3/4JvuwsF3dTt58iTdcMMN\ntGrVKtq7d6/Hal02m422bt1KGRkZ9I1vfINaWlo8Ug42NVarlcrLy+npp5+mNWvWkE6nIwAUEhJC\nd911F73++usu/4ZvvfUWJSYmcvCx+WexWOi5556jsLAw+sMf/kAWi8XTRSIiosHBQXriiScoIiKC\nXn/9dT79XUDa2troP//zP+nee++l8PBwAkBCCFq1ahU9+eSTtHfvXhodHZ3y+gBUEgcfmy9Hjx6l\n/Px8uv7666m+vt7TxXHq0KFDtGLFCioqKqIzZ854ujiaNDo6Snv27KEnn3yS8vLySAhBACgiIoLu\nu+8+euutt6itrW3a6+UaH5t3b7zxBoWHh9NLL71EVqvV08WZ0MjICD3zzDMUHh5OH3/8saeLowkt\nLS302muv0be//W0KCQkhAKTT6WjNmjX0m9/8hioqKma133AbH5t3zz77LCUkJFBtba2nizIte/fu\npcjISPqP//gPTxflqjMyMkK7du2iX/7yl7Rs2TIZSDExMfS9732P3n33Xers7Jz1dqxWK9XV1VFY\nWNi0e3X5yg02I0SEX/3qV/jHP/6BL774Amaz2dNFmpbVq1dj586dWL9+PS5duoSf/vSnni7SFa2x\nsRFbtmzBli1bsGPHDvT29sLLywvXXnstnnnmGRQXF896gHlHRwfKy8uxf/9+7N+/H+Xl5ejq6prR\nujj42Iw89dRT2LRpEz7//HOEhYV5ujgzkpmZic8//xxr166FwWDAhg0bPF2kK8bw8DA+//xzbNmy\nBZs3b0ZtbS0AwGw245577sH69etx4403IjAwcEbrHx0dxdGjR2XI7d+/H/X19QAAnU6H7OxsfPvb\n30ZhYSGeeOIJnD9/flrr5+Bj0/bMM8/g3Xffxe7du6/Y0FMkJCTgk08+wdq1a+Hr64vvfOc7ni7S\ngnXq1ClZq/v0008xMDAAo9GItWvX4gc/+AHWr1+PjIyMGdXqmpubZcAdOHAAlZWVGBwcBABERUWh\nsLAQ3//+91FYWIi8vDz4+/vLzypX7HjkWt3p4EvWrlwff/wxHn74YezduxexsbGeLo7bHDt2DGvX\n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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for theta_deg in np.arange(-10.1, 10, 1.7):\n", " ray = Ray(origin=PointSource(-4 + 1j * 0), direction=(np.cos(np.deg2rad(theta_deg)) + 1j * np.sin(np.deg2rad(theta_deg))))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", " point2 = intersection(refracted_ray, lens)\n", " if point2 is not None:\n", " normal2, refracted_ray2 = compute_refracted_ray(refracted_ray, point2, lens, inward=False)\n", " \n", " # plotting\n", " if point is not None:\n", " plot_ray(ray, ray.origin.coord.real, point.real)\n", " if point2 is not None:\n", " plot_ray(refracted_ray, point.real, point2.real)\n", " if refracted_ray2 is not None:\n", " plot_ray(refracted_ray2, point2.real, 4)\n", "ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-4, 4, -4, 4]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(5, 5))\n", "ax.add_artist(plt.Circle((0, 0), radius=lens.r, fill=None))\n", "\n", "for theta_deg in np.arange(-35.1, -10, 1.7):\n", " ray = Ray(origin=PointSource(-4 + 1j * 3), direction=(np.cos(np.deg2rad(theta_deg)) + 1j * np.sin(np.deg2rad(theta_deg))))\n", " point = intersection(ray, lens)\n", " if point is not None:\n", " normal, refracted_ray = compute_refracted_ray(ray, point, lens)\n", " point2 = intersection(refracted_ray, lens)\n", " if point2 is not None:\n", " normal2, refracted_ray2 = compute_refracted_ray(refracted_ray, point2, lens, inward=False)\n", " \n", " # plotting\n", " if point is not None:\n", " plot_ray(ray, ray.origin.coord.real, point.real)\n", " if point2 is not None:\n", " plot_ray(refracted_ray, point.real, point2.real)\n", " if refracted_ray2 is not None:\n", " plot_ray(refracted_ray2, point2.real, 4)\n", "ax.axis([-4, 4, -4, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note** there was a bug in my code initially, but thanks to my friend ZRC's review, this is now corrected. Thank you!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusions " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's stop this exploration here. As we have seen in this blog entry, it's not that difficult to trace a couple of rays going through an imaging system. Using the above plots, we've seen that a spherical lens always focuses the rays into its center, even if they come from different directions and angles. This is one of the wonderful properties of imaging systems. I quote [this](http://web.mit.edu/2.710/Fall06/2.710-wk2-b-sl.pdf) MIT lecture on optics to better explain why I think this is interesting:\n", "\n", "- Each point in an object scatters the incident illumination into a spherical wave, according to the Huygens principle.\n", "- A few microns away from the object surface, the rays emanating from all object points become entangled, delocalizing object details.\n", "- To relocalize object details, a method must be found to reassign (“focus”) all the rays that emanated from a single point object into another point in space (the “image.”)\n", "\n", "Now back to enjoying my camera that does all this hard work automatically for me!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*This post was entirely written using the IPython notebook. Its content is BSD-licensed. You can see a static view or download this notebook with the help of nbviewer at [20180423_RayLensIntersection.ipynb](http://nbviewer.ipython.org/urls/raw.github.com/flothesof/posts/master/20180423_RayLensIntersection.ipynb).*" ] } ], "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.4" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }