{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Asphere Optimization" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "from optiland import analysis, optic, optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define a starting lens:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens = optic.Optic()\n", "\n", "# add surfaces\n", "lens.surfaces.add(index=0, thickness=np.inf)\n", "lens.surfaces.add(\n", " index=1,\n", " thickness=7,\n", " radius=1000,\n", " material=\"N-SF11\",\n", " is_stop=True,\n", " surface_type=\"even_asphere\",\n", " coefficients=[0, 0, 0],\n", ")\n", "lens.surfaces.add(index=2, thickness=30, radius=-1000)\n", "lens.surfaces.add(index=3)\n", "\n", "# set aperture\n", "lens.set_aperture(aperture_type=\"EPD\", value=15)\n", "\n", "# add field\n", "lens.fields.set_type(field_type=\"angle\")\n", "lens.fields.add(y=0)\n", "\n", "# add wavelength\n", "lens.wavelengths.add(value=0.55, is_primary=True)\n", "\n", "# draw lens\n", "lens.draw(num_rays=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define optimization problem:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "problem = optimization.OptimizationProblem()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add operands (targets for optimization):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "input_data = {\n", " \"optic\": lens,\n", " \"surface_number\": -1,\n", " \"Hx\": 0,\n", " \"Hy\": 0,\n", " \"num_rays\": 5,\n", " \"wavelength\": 0.55,\n", " \"distribution\": \"hexapolar\",\n", "}\n", "\n", "# add RMS spot size operand\n", "problem.add_operand(\n", " operand_type=\"rms_spot_size\",\n", " target=0,\n", " weight=1,\n", " input_data=input_data,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define variables - let radius of curvature vary and the first 3 aspheric coefficients." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "problem.add_variable(lens, \"radius\", surface_number=1)\n", "problem.add_variable(lens, \"radius\", surface_number=2)\n", "problem.add_variable(lens, \"asphere_coeff\", surface_number=1, coeff_number=0)\n", "problem.add_variable(lens, \"asphere_coeff\", surface_number=1, coeff_number=1)\n", "problem.add_variable(lens, \"asphere_coeff\", surface_number=1, coeff_number=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check initial merit function value and system properties:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "╒════╤════════════════════════╤═══════════════════╕\n", "│ │ Merit Function Value │ Improvement (%) │\n", "╞════╪════════════════════════╪═══════════════════╡\n", "│ 0 │ 30.0924 │ 0 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════╤═════════╤═════════╤════════════════════╕\n", "│ │ Operand Type │ Target │ Weight │ Value │ Delta │ Contribution (%) │\n", "╞════╪════════════════╪══════════╪══════════╪═════════╪═════════╪════════════════════╡\n", "│ 0 │ rms spot size │ 0 │ 1 │ 5.48566 │ 5.48566 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════╧═════════╧═════════╧════════════════════╛\n", "╒════╤═════════════════╤═══════════╤═════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪═════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 1000 │ │ │\n", "│ 1 │ radius │ 2 │ -1000 │ │ │\n", "│ 2 │ asphere_coeff │ 1 │ 0 │ │ │\n", "│ 3 │ asphere_coeff │ 1 │ 0 │ │ │\n", "│ 4 │ asphere_coeff │ 1 │ 0 │ │ │\n", "╘════╧═════════════════╧═══════════╧═════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "problem.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define optimizer:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "optimizer = optimization.OptimizerGeneric(problem)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run optimization:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " message: CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL\n", " success: True\n", " status: 0\n", " fun: 3.304334492892647e-10\n", " x: [-2.743e+01 2.416e+01 1.898e+02 2.174e+00 -2.770e-02]\n", " nit: 20\n", " jac: [-5.865e-09 3.570e-09 8.185e-08 -1.807e-07 -1.921e-07]\n", " nfev: 150\n", " njev: 25\n", " hess_inv: <5x5 LbfgsInvHessProduct with dtype=float64>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimizer.optimize(tol=1e-6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print merit function value and system properties after optimization:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "╒════╤════════════════════════╤═══════════════════╕\n", "│ │ Merit Function Value │ Improvement (%) │\n", "╞════╪════════════════════════╪═══════════════════╡\n", "│ 0 │ 3.30432e-10 │ 100 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════╤═════════════╤═════════════╤════════════════════╕\n", "│ │ Operand Type │ Target │ Weight │ Value │ Delta │ Contribution (%) │\n", "╞════╪════════════════╪══════════╪══════════╪═════════════╪═════════════╪════════════════════╡\n", "│ 0 │ rms spot size │ 0 │ 1 │ 1.81778e-05 │ 1.81778e-05 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════╧═════════════╧═════════════╧════════════════════╛\n", "╒════╤═════════════════╤═══════════╤═════════════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪═════════════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ -2642.94 │ │ │\n", "│ 1 │ radius │ 2 │ 2515.97 │ │ │\n", "│ 2 │ asphere_coeff │ 1 │ 0.0189832 │ │ │\n", "│ 3 │ asphere_coeff │ 1 │ 2.17352e-06 │ │ │\n", "│ 4 │ asphere_coeff │ 1 │ -2.76952e-10 │ │ │\n", "╘════╧═════════════════╧═══════════╧═════════════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "problem.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Draw final lens:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0YAAAELCAYAAAD9fZaDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABWUklEQVR4nO3deXhb9Zkv8O/Rvp/jRZa8SLazOrvlQBKHlr2EpbS0XIZLp2xtmU4nMIVw5xnohXaAueMy3ehQBto7bWinTWmZy9J2ZtqylEBLwpLYkIQkTSCJV3mLJVmytZ/7x5FlO7EdO1jW9v08T55Y8lH8mghHX/1+v/cVZFmWQUREREREVMRU2S6AiIiIiIgo2xiMiIiIiIio6DEYERERERFR0WMwIiIiIiKiosdgRERERERERY/BiIiIiIiIih6DERERERERFT0GIyIiIiIiKnqabBcw35LJJLq7u2G1WiEIQrbLISIiIiKiLJFlGcPDw6iqqoJKNfOaUMEFo+7ubrhcrmyXQUREREREOaKjowM1NTUzXlNwwchqtQIA3v/gWPpjIiIiIiIqPsPDw1i8qH5WuaDggtHY9jmr1QqbzZblaoiIiIiIKNtmc8SGzReIiIiIiKjoMRgREREREVHRYzAiIiIiIqKil9FgVFdXB0EQTvu1devWKa9/8sknT7vWYDBkskQiIiIiIqLMNl946623kEgk0rf379+Pj33sY7juuuumfYzNZsPhw4fTtzmLiIiIiIiIMi2jwchut0+6/fWvfx2LFy/GBRdcMO1jBEGA0+nMZFlERERERESTLFi77mg0ip/+9KfYtm3bjKtAwWAQtbW1SCaTaGpqwj/90z9h1apV014fiUQQiUTStwOBwLzW/WHs6/Ljvuffy3YZRAVtZCSERGQUNnUcoib1S52ATROHTROHhovOZ6TX6/HJa67h7DciIipqCxaMnnvuOfh8Ptxyyy3TXrN8+XL86Ec/wtq1a+H3+/HNb34TmzdvxoEDB6adVNvS0oIHHnggQ1V/OFaDBuvdUrbLICpoBw92Y1QFjApGdI8aEYgJkDGehqyaJEp0Mkp0ydSv8Y8lnQxtkbegSSSTOHrkCDo62rFy5fRvQhERERU6QZZleSG+0JYtW6DT6fDrX/961o+JxWJYsWIFbrjhBjz00ENTXjPVipHL5UJf/wAHvBIVuFAoiEf/5V+w+bzzsHjxYgBALCGjPxSDdziG3uGo8ntQue0djmEgFENywk+9MpMGDqsWTqsWTosWTqsufdth0UKnKezkFIvF8NTPf45PfPKTDEZERFRwAoEAKuzl8Pv9Z8wGC7JidOLECbz44ot45pln5vQ4rVYLj8eDo0ePTnuNXq+HXq//sCUSUR469sExAEBVVVX6Pq1aQJVNhyqbDoD5tMfEJwSndHhKBaf93lEGJyIioiK1IMFo+/btqKiowFVXXTWnxyUSCezbtw9XXnllhiojonx27NgHKC0thdFonPVjNGoBlTYdKm26KT/P4ERERFScMh6Mkskktm/fjptvvhkazeQvd9NNN6G6uhotLS0AgAcffBCbNm3CkiVL4PP58I1vfAMnTpzAF77whUyXSUR5RpZlHDt2DPX19fP6555tcOodjuGAdxT9DE5ERER5KePB6MUXX0R7ezs+97nPnfa59vZ2qFTjLwqGhoZw2223wev1oqSkBOvXr8frr7+OlStXZrpMIsoz/f39GBkZQeWEbXQLYTbBaWBkPDh5h6PoTX3M4ERERJS7Mh6MLrvsMkzX3+GVV16ZdPs73/kOvvOd72S6JCIqAMePH4NarUZFRUW2S5lEoxbgtOrgtM5PcCo1aeC0aMfDk1WnhKZUkGJwIiIimh8L1q6biGg+HT92DBUVDqjV6myXMidnG5x6gzEc7BtFX5DBiYiIKBMYjIgo7yQSCbS3t2PN2rXZLmXenSk4JZLKGafe4VPC01kEJ4dFC8YmIiIiBYMREeWd7u5uxONxOJ3ObJey4NSq8eC0borPzzk4GdVQhxvg3ePDxbEeeNwiaiQjBEGY4k8nIiIqXAxGRJR32k+cgE6nQ2lpabZLyTlzDU7d/jBef7cX73oj+O8j+wAAdosOHreExhoJHreEVZVW6LX5tWWRiIhorhiMiCjvnDhxHBUVFZO6WtLsnBqcYrEYNIeO45NXNcJZtwTvdPjR2uFDa4cPj/7hKEZjSWjVAlZV2uBxS/C4JDS6RDhshmx/K0RERPOKwYiI8ko8HkdXVxcaPZ5sl1IQ0l1DBaDEpMOFy+24cLkdABBPJHG4N4i2Dh/2dvjw+/d6sf31EwCAasmQCknKqtJyhwVaNYMqERHlLwYjIsor3d3dSCQScDoc2S6loAg4/UyRRq3CqiobVlXZ8Jcb3QCAvuEI2jp8aG1XVpV+914vYgkZRq0Ka6pFeFJBaV2NiFLz1A0kiIiIchGDERHllY6Odmi1WkglJdkupShVWPW4bKUDl61Ugmk0nsSB7gBaO3xo6/DhmdYufP+1YwCAujITmtypVSWXiCV2C1QqNnUgIqLcxGBERHmlo70dFRUOni+ab2eZV3QalXL2yC0BULbmdfnCyqpSamXp+Xd6kEjKsBo0WFctps8qrasRYTHwnyEiIsoN/BeJiPJGMplEV1cXVq9ene1SCtD8rOQIgoCaEiNqSoz4+NpKAMBINI59XQG0tiurSv++ux2P/uF9CAKwtMICj0tKrSyJqC01sVU4ERFlBYMREeWNvt5exGIxVPB80bxJN1/IIJNOg431pdhYX5r+mscGR9Jnlfa2D+GXezohy0CJSausKNVI8LhFrK4SYdSxVTgREWUegxER5Y2Ozg6o1WqUlZVlu5SCs5CLNIIgYFG5GYvKzfi0pxoAEBiN4Z1Of+qskh9PvPYBQpEENCoBDU4rPG4JTalW4ZWigatKREQ07xiMiChvdHZ2oqysDGo1VxDmX3aDhs2oxUeXluOjS8sBKINoj/QF000dXv3zAP59dzsAwGHTK93vUk0dVlTaoNPwzBkREX04DEZElBdkWUZXZydqa2uzXUphWYCtdGdDnVopanBaccO5LgDAYDCCtk5/ulX4t188gkg8CZ1GhdVVtklnlcot+ix/B0RElG8YjIgoLwQCAQSDQdjt9myXUlByMxZNrcyixyUNFbikoQKA0ir8UO9wqqmDH/+134sf/uk4AMBVYkx3v/O4RCytsEDDAbRERDQDBiMiygvdXV0AgHIGo4zIxyM7Oo0Ka6tFrK0WcXOzcl+PP5zeftfa7sN/7fMinpRh0qmxrkZMz1RqdEkQjdrsfgNERJRTGIyIKC90dXfBYrHAaDRmu5QClYfJaAqVogGVohNXrnYCAMKxBPZ3B9Lb7375dice3/kBAGCx3aysKLmVsFRfZuYAWiKiIsZgRER5oburC+Xl5dkug/KMQavGObUlOKe2BIByVq1jaBR7UzOVWjv8eKa1C0kZEI0aNNZIyqqSW1mJMuv5zyQRUbHgT3wiynmJRAK9vb3wNDVlu5SCMzbHKB+30p0NQRDgLjXBXWrCNY1VAIBgJI59nX7sTW2/2/76cXz35ThUArDcYZ10VqmmxMhW4UREBYrBiIhyXn9fHxKJBFeMMqp4X+xb9Bo0Ly5D82JlPlYyKeODgRBaUytKuz84iR1vdgAAyi26dKvwRpeI1VU26LVsH09EVAgYjIgo5/X09EAQBJSUlGS7FCoCKpWAJRUWLKmw4Lr1NQAA30gM73T6sDd1VunRPxzFaCwJrVrAqkpbevudxyXBYTNk+TsgIqKzwWBERDmvp6cHJSUl0Gj4IytTine9aHYkkxYXLLPjgmVKV8R4Iok/9wXR2u7D3g4fXjzUhyd3nQAAVImG9Pa7RpeIBqcVWrYKJyLKeXyVQUQ5r8fbg9LS0myXQZSmUauwstKGlZU2/OVGNwCgbziSaujgQ2u7H79/7zBiCRkGrdJWfGKr8FKzLsvfARERnSqjwegf/uEf8MADD0y6b/ny5Th06NC0j3n66adx//334/jx41i6dCkefvhhXHnllZksk4hyWDwex+DAAOrr67NdSkEaa75AH16FVY/LVjpw2UoHAGUA7Xs9463Cn23rxg9eOwYAqCszpVuFN7pELLFboGarcCKirMr4itGqVavw4osvjn/BGbbCvP7667jhhhvQ0tKCj3/849ixYweuueYa7N27F6tXr850qUSUg/r7+pBMJlFWVpbtUgobO63NO51GhUaX0v77VightNsfRmu7D20dShe8X73bg0RShkWvQWONiEaXCI9bwroaEVYDB9ASES2kjAcjjUYDp9M5q2u/+93v4vLLL8ff/d3fAQAeeughvPDCC/je976HJ554IpNlElGO8vZ6IQgCJEnKdikFjbEo8wRBQLVkRLVkxMfXVgIARqJx7O8KpLbf+fDTNzrwvVc+gCAAS+2W9PDZRpeEujITW4UTEWVQxoPRkSNHUFVVBYPBgObmZrS0tMDtdk957a5du7Bt27ZJ923ZsgXPPffctH9+JBJBJBJJ3w4EAvNSNxHlhr7eXoiiyMYLVJBMOg021JdiQ71yhk6WZRwfHEkHpdZ2H365pxOyDJSYtOlzSh6XhDXVIow6tgonIpovGX2lsXHjRjz55JNYvnw5enp68MADD+CjH/0o9u/fD6vVetr1Xq8XDodj0n0OhwNer3far9HS0nLaOSYiKhy9vb1svLAQuBKREwRBQH25GfXlZnzaUw0ACIzG8E6nP9XYwY/vv3YMoUgCGpWABqc1dVZJCUuVooGrSkREZymjweiKK65If7x27Vps3LgRtbW1+OUvf4nPf/7z8/I17r333kmrTIFAAC6Xa17+bCLKrmQyib6+Pqxbty7bpRQsNl/IfTajFh9dWo6PLlUGHCeSMo72B9NNHV47OoB/f6MdgNIAwuOW0JRqFb6y0gadhq3CiYhmY0H3pkiShGXLluHo0aNTft7pdKK3t3fSfb29vTOeUdLr9dDr9fNaJxHlBt/QEOLxOCQOds04rjHkD7VKwHKHFcsdVvzPc5U3Ak+GomjtUJo6tLb78O0XjyAST0KnUWF1lQ2NLjEVliTYrfw3k4hoKgsajILBIN5//33ceOONU36+ubkZL730Eu688870fS+88AKam5sXqEIiyiV9/X0AgBIGI6IZlZp1uKShApc0VAAAYokkDnmH0zOVfru/Fz/6kzKAtqbEOGn73bIKCzQcQEtElNlg9L/+1//C1VdfjdraWnR3d+NrX/sa1Go1brjhBgDATTfdhOrqarS0tAAAvvzlL+OCCy7At771LVx11VV46qmn8Pbbb+MHP/hBJsskohzV39cPg8EAo9GY7VIKH8+lFBStWoU11SLWVIu4aZNyn9cfVoJSamXptwe8iCVkmHTq1ABaEU1uCetqJEgmtgonouKT0WDU2dmJG264AYODg7Db7fjIRz6C3bt3w263AwDa29uhUo2/S7V582bs2LED9913H77yla9g6dKleO655zjDiKhI9ff3QZK4WkQ0H5yiAVeITlyxWtmeHo4lsL87kG7q8PSeLjzxqjKAdlG5Od0qvMktob7MDBUH0BJRgctoMHrqqadm/Pwrr7xy2n3XXXcdrrvuugxVRET5pL+/H45ZzkGjs8TmC0XLoFXjnNoSnFOrvPkgyzI6h0axN9UqvK3Dj2dbu5CUAZtBk2oVroSlNTUiLHq20CeiwsKfakSUk+LxOHw+H5YvX57tUooC1wJIEAS4Sk1wlZrwyXVVAIBgJI59nX7sTW2/2/76cXw3HIdKAJY7rGh0iekueDUlRrYKJ6K8xmBERDlpcHAQsixDlKRsl1Ic+IKWpmDRa9C8uAzNi8sAAMmkjA8GQqmzSn68eXwIP3+rEwBQZtalt981uiSsrrLBoOUAWiLKHwxGRJSTBgcHAACiKGa5ksLGjXQ0FyqVgCUVFiypsOC69TUAAN9IDO90KkGptd2Hx175ACPRBLRqASsrlVbhHpeEJrcEh82Q5e+AiGh6DEZElJMGBwZhNBo5p4wox0kmLS5YZscFy5TGSvFEEn/uC6Zbhb90qB8/3qUMoK0UDZNahTc4rdCyVTgR5QgGIyLKSYODg1wtWkDcSEfzRaNWYWWlDSsrbfjLDcp9/cMRtHX40meVvvH7PkTjSRi0KqypUs4pja0slZp12f0GiKhoMRgRUU4aHBzgYFeiAmG36vGxlQ58bKUDABCNJ/FeTwBtHUpjh+fauvGD15RW4XVlpnRI8rglLLFboGarcCJaAAxGRJRzZFnG0NAQamtrs11KwZPZrpuyQKdRodElodEl4RbUQpZldPvDykyldiUs/fpdLxJJGWa9Go01400d1tWIsBk5gJaI5h+DERHlnEAggHg8DpvNlu1SigffkKcsEgQB1ZIR1ZIRV62pBACMROPY3xVId8D76Zsd+N4rH0AQgKV2S7pVuMcloa7MxFbhRPShMRhlEN+JJTo7JwcHIcuAlcFoAfFFJeUWk06DDfWl2FBfCkD5N/X44IiyqpTqgPf03i7IstIAwlMzdlZJwppqG0w6vsQhornhT40Meuv4EG7c/na2yyDKSwLW4/890w2LrhdmvRoWnQoWnRoWvRrm9Mfj91l0qkmfM+lUUPEdZKKCIQgC6svNqC8341OeagDAcDiGdzqVkNTW4ccPXjuOYCQOtUpAg9OKJpeUXlmqEg1cVSKiGTEYZVBduRn/+MmV2S6DKO8cOngQXT1eLF25FsFIAsFoEsFoAsFIEu2+CEIT7ovEp16ZFQAlJOnV6RBl1o0HqKmClXnCfQxWRLnPatDiI0vK8ZEl5QCARFLG0f4g2lIrSq8dHcC/v6G0Cq+w6uFJNXVodElYVWWDTsNW4UQ0jsEogyqs+vQAPCKavf93bDfc9iQubSw/47XRRBKhaHI8QEUSCKVClBKmlPtDUeX3Tn900nXhGYKVaZqVKfM0q1WWPA5WeVQq0bTUKgHLHVYsd1hx/TnKv78nQ9FJ2+8eefkowrEktGoBq6vE9EylRpeECivnphEVMwYjIso5Q0NDKC0rndW1OrUKOqMKJcaz+3EWS8ip0DQxTI2HqvHQpQSrrkB00udnE6zGV64mBCidKrVFcGLIGg9bJq2KLYqJ5kGpWYeLGypwcUMFACCWSOKQdxitqZlKv93fix/96QQAoKbEiEaXiKZUq/BlFRZoOICWqGgwGBFRTpFlGX6/D+5a94J8Pa1agGTUQDrLYBVPB6vJK1TpMJUKUaHU792pYDX2mNFYcto/26w7dfvfVMFqbAVr8ufNOgYroqlo1SqsqRaxplrETZuU+3oDYaX7XbsfrR0+/O5AL2IJGSadGmuqbcpMpdSqkmRiq3CiQsVgREQ5ZXR0BLFYDBaLJdulzIpGLUA0aiAaz+7x8YSMUCwxHpZOOVN1atjqCUQnBK+Zg5VJq0qvQk23/U+TjOJ4QsLBvjAMJWGUW/QMVFR0HDYDLl/lxOWrnACASCyB/d2B9KrSf+ztwhOvKgNoF5WbU23ClS14i8rNUPH/GaKCwGBERDnF7/MDQN4Eow9LoxYgqjUQDWf3+ERSVrb7nRKg0qtYp6xgeYdjCA2G08FrJJYEsAR/+HU78Ot2qFUCKqx6OG16OEUDnLbUL1EPp82AStHA8EQFT69VY31tCdbXlgBQVrI7h0aVc0odPrS2+/BsaxeSMmAzaLCuZnym0toaERY9X14R5SP+n0tEOcXvTwUjsznLleQHtUqAzaCGzaA+q8cP+fz4j+f/Exdc8UkIplJ4A2H0+MPoDUTgDYRxsGcY3kAY4QkrU2qVALtFh0rRAEcqLE0MT06bAXYrwxMVDkEQ4Co1wVVqwifWKQNog5E49nX509vvfrzrBP7l5fehEoBlDqvSJtwlocktwVViZKtwojzAYEREOcUfCECr1UKnZ3eohaBWCTAIcSwuM8Dttk95jSzL8I/G4Q2E4fWHld8DkfTHh7yzD08Omz79McMT5TOLXoPmRWVoXlQGAEgmZRwbDGFvaqbSW8eH8NRbnQCAMrMuHZQ8bgmrq2wwaM/uzQwiyhwGIyLKKYGAHyaTie+u5hBBECCZtJBMWjQ4rVNeI8syAuF4arVJWXWaGJ4O9w7D6w9POhM1Fp6U1SZDeqvexPBUbtGxKxjlBZVKwGK7BYvtlvSoDt9IDO90jrcK/9edH2AkmoBWLWCF0wqPW2no0OSS4Dzb/bRENG8YjIgopwT8AZi5jS7vCIIA0aiFaJx7eBr7eLbhaeL5J+XME8MT5SbJpMUFy+y4YJmyGhtPJHGkL4i9qaYOLx/qx493KQNoK0XDpFWlFU4rtHxeEy0oBiMiyinDw4GiabyQWzK/QjeX8DS+bS8yKUhNFZ5UAlINIwxwiAZUMjxRjtKoVVhRacOKShv+coNyX/9wZHwAbYcP33zhCKLxJPQaVbpVeKNL6YJXZuEWY6JMYjAiopwyPDyMCocj22VQlkwMT8sdsw9P6bNP/jD+PE14slv1qDwlPKU/Fg2wMzxRFtitenxspQMfW6n83IvGkzjYE0Brhx97O3x4/p0e/N8/HgcA1JaalFWlVAe8pRUWntMjmkcZDUYtLS145plncOjQIRiNRmzevBkPP/wwli9fPu1jnnzySdx6662T7tPr9QiHw5kslYhyQCKRQCgUgslkynYplMMWKjw5bacEKYYnWgA6jQrrXBLWuSTcglrIsowef2oAbeqs0m/2eZFIyjDr1VhXPR6U1tWIsBk5gJbobGU0GO3cuRNbt27Fueeei3g8jq985Su47LLL8N577814hsBms+Hw4cPp2zyETVQcQqEQADAY0Yc22/A0HI6jZ5rwdKQ3CG8gjJFoIv2YsfA0fuZpYpBStu0xPNF8EgQBVZIRVZIRV61RWoWPRhPY3620Ct/b4cOONzvw2CsfQBCAJXbz+PY7t4T6MjazIZqtjAaj3/72t5NuP/nkk6ioqMCePXtw/vnnT/s4QRDgdDozWRoR5aDh4WEAgNFozHIlxacYXzcJggCbUQvbHMJTb+rM01zD06md9xie6MMw6tQ4t64U59aVAlCepydOjqC1ffys0tN7uyDLSgOIxprxpg5rqm0w6XiSgmgqC/p/xtjgxtLS0hmvCwaDqK2tRTKZRFNTE/7pn/4Jq1atWogSiSiLgsEgAAajhSTLcrZLyGlzCU8Th+OOhafeQASvTROeyi1jbcnHG0VM7LxXYdUzPNGsCIKAujIz6srM+JSnGgAwHI7hnU4/2lLb7/7vH48jGIlDrRLQ4LCkW4V7XBKqJQNXlYiwgMEomUzizjvvxHnnnYfVq1dPe93y5cvxox/9CGvXroXf78c3v/lNbN68GQcOHEBNTc1p10ciEUQikfTtQCCQkfqJKPNCoSAEQYDBwHkelD8mhqdlswhPE7fsjQWp144Mzj48TViJYnii6VgNWnxkSTk+sqQcAJBIyni/P5g+p/THo4P46RsdAJQVTs9Yq3CXhFVVNug0fF5R8VmwYLR161bs378ff/zjH2e8rrm5Gc3NzenbmzdvxooVK/D9738fDz300GnXt7S04IEHHpj3eolo4YWCIRiMRr5zmRX8b55Jsw1PwUj8tOG4Yx//8eggevxThydnaiiuI7VVb2J4slv1nIdDUKsELHNYscxhxfXnKG80nwxF0ZaaqdTa4cN3Xz6KcCwJrVrA6ipbevtdo0tChZWtwqnwLUgwuv322/Gb3/wGr7766pSrPjPRarXweDw4evTolJ+/9957sW3btvTtQCAAl8v1oeolouwIjYRg5GoRFSlBEGA1aGE1zD48TRyU6/WHcfT9uYUnR+o+hqfiVGrW4eKGClzcUAEAiCWSONwbTJ1V8uF37/XiR6+fAABUS4Z09zuPS8Jyh4WrlVRwMhqMZFnGHXfcgWeffRavvPIK6uvr5/xnJBIJ7Nu3D1deeeWUn9fr9dDr+S4GUSEYCYW4jY5oBrMJT4ByvuTU4bjeQAS9/jD+NEV4EgTAngpPE7fsKUGK4alYaNUqrK6yYXWVDTducgMAegNKq/Cxs0q/O9CLWEKGUavCmmoRTWOtwl0iSky6LH8HRB9ORoPR1q1bsWPHDjz//POwWq3wer0AAFEU04erb7rpJlRXV6OlpQUA8OCDD2LTpk1YsmQJfD4fvvGNb+DEiRP4whe+kMlSiSgHhEIjDEZE82AsPC2tsEx7zanhyesPo+cM4ancokflaeedxrvuVTA8FRyHzYDLVzlx+SqlW3AklsCBnuH0qtJ/7O3CE68eAwDUl5vSK0oet4TF5WaoOICW8khGg9Hjjz8OALjwwgsn3b99+3bccsstAID29naoVOM/RIeGhnDbbbfB6/WipKQE69evx+uvv46VK1dmslQiygEjIyGIoi3bZRAVhdmEp+CkOU+Tw9Pr7w+iJxBGKDJ9eHLYxobjMjwVCr1WjSa3hCa3BEDZHdTpG0Vruz+1suTDc23dSMqA1aDBulSr8Ca3hLXVIiwGtgqn3CXIBdarNRAIQBRF9PUPwGbjCyyifPKdb38bK1euwOo1a7JdStHw+/341fPP4y8/eyPPZ9JZmSo8Teq8N014mnTmKRWexs4/MTzlt1Akjne7xluFt3X64B+NQxCAZRWWSWeV3KVsuEOZFQgEUGEvh9/vP2M2YGwnopyQTCYRiYSh51a6hZV6b4yvS+hsWQwaLDVYzrjy5E2fdZocnna9PwhvIIJgJJ6+fqrwdGrzCIan3GXWa9C8qAzNi8oAAMmkjGODI2jt8KG13Ye3jw/hqbc6AQClZi08LqXzXZNLwupqGwxadTbLpyLGYEREOSEcDgMA9Doe3iUqNBaDBksMFiyZQ3iaOCh32vBk1p0yHHdikFIaRzA8ZZ9KJWCx3YzFdjP+R5MygNY/GpvUKvzxnR9gJJqARiVgRaU1fU7J45JQKfINM1oYDEZElBPCo6MAAB27TBIVpbmEp4nDcc8mPI1/rKw8cZjpwhONWlywzI4LltkBKANoj/QFsTfV1OEPh/vxk93tAACnTa/MU6pRzio1OK38O6OMYDAiopyQXjFiMCKiaZxteBr7ePcHg+jxTx2eJg/HZXhaaGqVgAanFQ1OKz6zQTnvOBCMoK3Dj73tSlOHb714BNF4EnqN0lZ8/KySiDIL/+2gD4/BiIhywlgw0mm1Wa6kWPGQERWGuYanSY0i/GHsPjbH8DSh2x7D0/wqt+hx6YoKXLpCGUAbjSdxsCeA1tT2u1+/24N/++NxAIC71Dh+VsktYWmFBWq2Cqc5YjAiopwQjqSCEVeMiCjDZhueeofHh+NO7Lq3+5iybW84PHV4copKp72x4bgMT/NDp1FhnUvCOpeEW1ALAOjxh9Ha7sPeVKvw/9znRTwpw6RTo7FGRGPqrFJjjQibkW+80cwYjIgoJ0QiEQiCAI2GP5YWUkHNayCaRxaDBhaDBYvtM4SnSBy9gdmHJwAot+jSQWksPKU/FvVwWA0MT3NQKRpQucaJK9coA2hHowns7/Yrc5U6ffj5Wx34150fAACW2M3p7XeNLgmLyk1sFU6T8BUIEeWEaCQKrVbLf6SIKG9Y9BpY7LMLT15/5LR5T28cO4meQHjG8DSxWQTD05kZdWqcW1eKc+tKASgDaE+cHEmfVWrt8OE/9nZBlgHJqEWjK7Wq5JKwptoGs54vjYsZ//aJKCdEIhFoeb6IiArM2YansZWoN48NTRuexs886ScHKdHA8JQiCALqysyoKzPjmsYqAMo2yXc6lXNKrR0+/NsfjyMYiUOtErDcYUm3Cm90iaiROIC2mDAYEVFOiEajDEZEVJRmH54mN4qYGJ68gTACZwhPk4JUEYcni0GD85aU4bwl4wNoj/YH0zOV/vT+IH72ZgcAwG7RpVuFe9wSVlVaoecA2oLFYEREOSEajfJ8ERHRNJTwpMFiu3naa04NT9701r3ItOGpLD3naXw47sRVKIet8MOTSiVgmcOKZQ4r/uKcGgDAyVBUWVVKbb979A9HMRpLQqsWsKrSNuGskgiHjQNoCwVfhRBRTojFotBouGKULdwoQpT/ZhOeQpE4vIHIhKYRZxeenDYDKsXCDU+lZh0uWm7HRcuVAbSxRBKHe4NoTc1U+v17vdj++gkAQLVkmLD9TsJyhwVadWH99ygWDEZElBOi0Rg0Gm5PICLKJLNeg8VnEZ56AxFl297xIXj904Sn1Ba9icNxCyU8adXKUNnVVTbcuMkNAOgNhNPb71rbffjde72IJWQYtSqsqRbTYWldjYhSsy7L3wHNBoMREeUEZcWIP5KIiLJtruFp/MyTEp7eOjG38DRxJSqfwpPDZsCWVQZsWeUAAERiCRzoGVZWlTp9eKa1C99/7RgAoK7MhKYJ2++W2C1QcQBtzuGrECLKCbF4HCaTKdtlEBHRLMw2PPUOn9owQrn91okh9AbC8I9OHZ4cqfbkE7vt5Xp40mvVaHJLaHJLAJRW4Z2+UWVVKXVW6fl3epBIyrAaNFhXk1pVcimrShYDX5ZnG/8GiCgnxGNxqNXcSkdEVCjMeg0W6TVYVD778OT1R9LnnqYLT6VmbWqm03h4coh65ePUKlQuhCdBEOAqMcFVYsLVaysBKN/vvq4AWjuUs0o/2X0Cj/7hfQgCsLRCaRU+trLkLmWr8IXGYEREOSGRiEPDYEREVFRmE55Goqlte/5was7TeHh6+4TSMGKm8OS0jQ/HHQtPDqs+K223zXoNNi0qxaZFygDaZFLGscERtKVmKu05MYRfvN0JACgxaZXudzUSPG4Rq6tEGHX8dzKTGIyIKCfE43GoGIyIiOgUJp0Gi8rPPjztmSE8TWoUkQpPzlTL8oUITyqVgMV2Mxbbzbi2qRoA4B+NTWoV/virH2AkmoBGJaDBaYXHLaEp1dihUmSr8PnEYEREOSGRSECtyv7WByIiyj+zDU+Th+RODk+9gQh8o7FJjzk1PE1sHpGp8CQatTh/aTnOX1oOAEgkZRzpC2JvqlX4zj/34993twMAHDZ9+pySxyViRaUtJ7YR5isGIyLKCYlEgitGRESUMSadBvXlGtTPITx5U532egPTh6cSk/b04bjpIKXc/jDhSZ1aKWpwWvGZDS4AwEAwMqlV+LdePIJoPAm9Rmkr3pg6q9ToElFu0Z/11y42DEZElBOSySRUXDEiIqIsmlN4mjAc92zC0/jHcw9P5RY9Ll1RgUtXVAAAovEkDnmHlVWlTh9+s68HP/zTcQCAq8SonFVKrSotc1ihZqvwKTEYEVFOSCQS7L5DREQ5bzbhaTSaSK04jYensY/3tvvg9YenDE9TtScfC08Omx6GacKTTqPC2hoRa2tEALUAgB5/OL2i1Nrhw3/t8yKelGHSqbGuRkRjKig1uiSIRu28/ffJZwxGRJQTZFnmihERERUEo06N+nLzrMPT2HDcsfDU2uHHf+/vnXV4Sp95mhCeKkUDKkUnrlztTH+9A90B7E11wPvF2x14fOcHAIDFdrOyouRWwlJ9mbkoB9AuSDB67LHH8I1vfANerxfr1q3Do48+ig0bNkx7/dNPP437778fx48fx9KlS/Hwww/jyiuvXIhSiShLkskkV4yIiKhozDY89Q6PD8cdC0+9Y+HpQC98I9OEp4lnnSY0jLhpkxt/9dF6yLKM9pOjyqpSamXp/7V2QZYB0ahBY40SlBpdItZWizDrC389JePf4S9+8Qts27YNTzzxBDZu3IhHHnkEW7ZsweHDh1FRUXHa9a+//jpuuOEGtLS04OMf/zh27NiBa665Bnv37sXq1aszXS4RZYEsywDAYERERDSBUadGXZkZdWWzD0/eVMvysfDkDZweniSTNjUcVwlPlTYDPOfVQTRoMTQaRfvJEezrCuCHfzqO4XAcKgFocFpT2++UuUo1UuENoBXksVckGbJx40ace+65+N73vgdAeVfY5XLhjjvuwD333HPa9ddffz1CoRB+85vfpO/btGkTGhsb8cQTT5zx6wUCAYiiiL7+Adhstvn7RogoY2RZxsNfb8Gm5mYsXbo02+UUFZ/Ph1//6le48cabUF1Tk+1yiIgoA8Kx1La9CS3Kx8KTNxBBTyA8ZXhyWvWwGTSQBSAUSaB/OIL+YBQAUGbWoSnV1KHRJWJ1lS0rQ3PPJBAIoMJeDr/ff8ZskNEVo2g0ij179uDee+9N36dSqXDppZdi165dUz5m165d2LZt26T7tmzZgueee27K6yORCCKRSPp2IBD48IXPk9FoAh8MhLJdBlHOSyaTGEia0D4sQ+4fzXY5RWV4OIqBpAl/HhiFT5U7Pz+JiGj+WQ0aWA0WLK2wnPa5SDyJwWAEg6EoBoJRDIaiGAxGMRiKYHA4ioFQFMPh8SG5g6EoXj7cjxcP9kEGIAAoNetQLRlQZtahtsyMOy9ZAqMu98LSdDIajAYGBpBIJOBwOCbd73A4cOjQoSkf4/V6p7ze6/VOeX1LSwseeOCB+Sl4nn0wEMKnn9id7TKI8sRK/PqtOPDWsWwXUoRW4tfPHAPA//ZERDR7ieT4xjMZSlgaDEVT9wzgE+sqsaoqf3Zw5f0pqnvvvXfSClMgEIDL5cpiReMWlZvxzF9vynYZRDkvmUzixz9+EmvXrs2Z/3+LxfDwMF599VVcddVVqKhwnPkBRERUkMKxRHqVaCAUUX4PTlg1CkURjCQmPUYtAIlUNhIAlFl0qBYNKLPoUV9uwqIZGkvkoowGo/LycqjVavT29k66v7e3F06nc8rHOJ3OOV2v1+uh1+fmRF+jTp1XKZkoW2RZRrlqBG6rgKV2Y7bLKSo+bQTvqUawrNyIav68IiIqSCPROLyBCHpTZ4smnjUaaxnuH41PesxYdzurQYMKqx5mvQZ9wxEMpM4YlVt0WJ8+YyRhVZUNOk1+j93IaDDS6XRYv349XnrpJVxzzTUAlHeGX3rpJdx+++1TPqa5uRkvvfQS7rzzzvR9L7zwApqbmzNZKhERERFR3hkLPemQc2qDhWlCz9gMpPW1JXDa9HDYDBCNGpwMRdE+OIJ93cN4p9OPYCQOtUpAg8OCy1c50vOOqkRDwXWly/hWum3btuHmm2/GOeecgw0bNuCRRx5BKBTCrbfeCgC46aabUF1djZaWFgDAl7/8ZVxwwQX41re+hauuugpPPfUU3n77bfzgBz/IdKlElCVjP1gz3CSTiIgor5waek5ryT1F6Ck1Kys9DpsB56RCz8Q5Rg6rHnqtGrIs4/jgCFo7fGjr8OM373pxpD8IWQYkoxYel4jbPlIHj1vCmmobTLq8P4FzRhn/Dq+//nr09/fjq1/9KrxeLxobG/Hb3/423WChvb190rT7zZs3Y8eOHbjvvvvwla98BUuXLsVzzz3HGUZEBU6lUjEYERFR0RiJxtHjj6A3MDn09KRXfsIIhKcOPU5RCT2VNgMcov600DOV0WgC+7r8+O/9XrS2+9Da6YdvJAZBAJbYzfC4JNx6Xi0aXRLqy0wFtxo0GwsS/W6//fZpt8698sorp9133XXX4brrrstwVUSUSwRBQDKZzHYZREREH9rE0DMWdM429FSm7psp9JxKlmV0+8NobVdWg/Z2+HDIO4xEUoZZr0ZjjYS/3OCCxyVhXY0Im1Gbif8Meafw18SIKC+o1WquGBERUc4LRVKNDCaEHm9qUOrYlrepQo8SdAw4t7ZE2ep2lqFnKtF4Eu/1BNIrQa3tPvQNK3M+a0tN8LhF/MX6ajS6JCytsECtKr7VoNlgMCKinKBSqbhiREREWTUWeiZ2a5tT6KkrSa/6jJ3t+bChZyr9wxG0dfiwt8OH1nY/DvQEEI0nodeosLZaxCfXVcLjltBYI6LMkpvdm3MRgxER5QS1Wo1kInHmC4mIiM7CqaFHOdMzoaHBFKGnzKxLB5xTQ0+laEBFBkLPqeKJJP7cF1RWgzr8aO3woXNoFABQKRrgcUm4YrUDHreEBoc171tmZxODERHlBLVajQRXjIiI6CwooUdpVd2TWuWZGHp6AmEMnyn0pDq3LWTomYpvJIZ3On3Ymzof9G6XHyPRBLRqASucVlzSYFdaZrskOEXDgtdXyBiMiCgnaDQarhgREdFppgo93nT4mSH0pFZ2JoaeylQHN4fNkBMrK8mkjA8GQmjtSK0GtfvwwUAIgPI9eNwS/uaCRfC4JayussGQhaBWTBiMiCgnqNUaxBmMiIiKSjASn9DEIDIp9ChnfCIzhp4N9SVw2HIz9EwlGIljX6c/dTbIh3c6/QiE41AJwDKHFRvrS/DXF9TD45LgKjEWZcvsbGIwIqKcoNFqkGAwIiIqGGcTesotulTQ0WNjfSkcqfk8440Mcjf0nEqWZXQMjSqrQanzQX/uHUZSBmwGDRpdEm7ZXIsml4Q1NSIser4szzb+DRBRTtBqNEjE42e+kIiIsi4YiU8KOKc3NIggGJk69FSKBmysL52ie1v+hJ6phGMJ7O9WWma3pVpmD4aiAIBF5WZ43BI+u1GZHbSo3AwVW2bnHAYjIsoJWq0OkUg422UQERW9iaFnYse2swk9Y0NK8z30TMXrD6fOBikrQge9w4glZJh0aqyptuG69dVocktYVyNBMnGAaj5gMCKinKDTaREKhbJdBhFRQQuG4+n5POmObacMKZ0q9IwFnU31ZXCkVngKOfScKpZI4qB3GG2puUGtHT70+JU382pKjPC4JFzTWAWPW8KyCgs06sL+71GoGIyIKCdotTrE47Fsl1G05GwXQEQf2ljoGQs6cw09zYuU0FOZ6uBWLKFnKidD0fRKUFuHH/u6/QjHktBpVFhVacMVqx1ocklodEmwWzlAtVAwGBFRTtDpdIjzjBER0ZRODT3eUxsaTBF67BO2t50aepypOT3FGHpOlUjKONIXVFaDUitCJ06OAADsVj2a3BLuvHgJPG4JKytt/G9WwBiMiCgn6HQ6xGJcMSKi4hMMx0+bzzOpoUEgjFBkvGunIADl5smhx5lqVc3Qc2aB0Rje6VS2w7V1+NHW6UMokoBaJaDBacX5S8vhcYtodEmoEg1smV1EGIyIKCfo9XoGIyIqOFOFnp5ABL1nCD1jA0knhZ7UfQw9syfLMo4NjqTOBikrQkf7Q5BlQDJp4akR8cWPKnODVlfbYNLxpXEx498+EeUEnV5ZMZJlme/OEVFeGA7H4E2d4+k9JfT0pBoczBh6FpcpraoZeubNSDSOfV2B8SDU6YdvJAZBAJbaLWhyl+Bz59XB45JQV2bivzc0CYMREeUEvV4PWZYRj8eh1bKt6ULhSwKiqZ0aesaGlM4Yeiz6dNDZnAo9laIhveXNbmHomU+yLKPbH06vBLV2+HHIO4xEUoZZr0ZjjYTPbnDB45awrkaE1cB/W2hmDEZElBMMegMAIBqJMBgRUcbIsoxgJD4edCaEnvFGBtOHnkpRCT2VNgOcop6hZwFF40kc6A6kmyTs7fCjfzgCAKgrM6HRJeIv1lfD45awxG6BmgNUaY4YjIgoJxgMqWAUi8Gc5VqKExt2U/47NfRM7Ng2cWDpSHR2oWdsixtDT3b0DUcmnA3yY3+3H7GEDINWhTVVIj7VWIVGlwiPS0KpWZftcqkAMBgRUU4YC0aRSCTLlRBRLpJlGcPp4aSTg87EeT1ThZ7K1EDS8xaXpcKOflL3Ni2HcWZdPJHE4V6lZfbeVBjq8ikDVKtEAxpdEq5c44DHJaHBaeXfGWUEgxER5QSD0QhA2UpHRMVlYugZCzpzDT0fWaKEHuVMj56hJ8cNjUTxToc/dTbIh31dAYxEE9CqBaystOFjKxzp1SCnaMh2uVQkGIyIKCekV4yi0SxXQkTzaarQc9qQ0ilCj33C9rZTQ0+laICdoSdvJJMyPhgIKeeC2pXZQR8MhAAAZWYdPG4JWy9cBI9LwqoqGwxadZYrpmLFYEREOUGlUkGvNyAcDme7lOKSalUr84gRnYWx0NMzxVDS2YaeJRUWVKZaVTP0FIZgJI53UwNUW9t9eKfTj0A4DpUALHdYsbG+BH99QT2aXBJqSoxsmU05g8GIiHKGyWTkGSOiHPFhQo8SdPSTQo8zdR9DT2GRZRkdQ6PYm2qZ3dbhx597h5GUAZtBg0aXhFs318HjErGmRoRFz5eelLsy8uw8fvw4HnroIbz88svwer2oqqrCZz/7Wfzv//2/odNN3zXkwgsvxM6dOyfd98UvfhFPPPFEJsokohxjMpkR4YoRUcbJsozAWCODKUJPT0DZ8jZT6FnqsCiBh6GnqIRjCezvCqTPBrV1+DEYUrZAL7ab0eiS8NmNLjS5JdSXmaFiy2zKIxkJRocOHUIymcT3v/99LFmyBPv378dtt92GUCiEb37zmzM+9rbbbsODDz6Yvm0ymTJRIhHlILPZhGAwmO0yiPLaVKFnbEjpdKFHJQB2a6pTm02PpY7yCYFHOdtTbtEx9BQhrz+c7hLX1uHDez3DiCdlmHRqrK0W8Rfn1MDjErGuRoJk4gw6ym8ZCUaXX345Lr/88vTtRYsW4fDhw3j88cfPGIxMJhOcTmcmyiKiHGcymzEwMJDtMohy1ljoSQedCaFnrKHBjKFHNGCpw4JKmwEOhh46RSyRxEHvcGpukLIa1ONXVvFdJUY0uiRc46lCk0vC0goLNHzOUIFZsI2efr8fpaWlZ7zuZz/7GX7605/C6XTi6quvxv333z/jqlEkEpl0JiEQCMxLvUS08MwmM0a5lY6K1KmhZ2xI6cTQ4/WHMRpLph9zauhZNiH0VKaHk+r4ApamNBiMoLXDrwxRTbXMjsST0GlUWF1lw5WrnfC4RDS6JNit+myXS5RxCxKMjh49ikcfffSMq0Wf+cxnUFtbi6qqKrz77rv4+7//exw+fBjPPPPMtI9paWnBAw88MN8lE1EWmC1mhEdHIcsyuxQtOLalyyRZluEfnbi9baohpVOHnrGgs9xhhdOmZ+ihs5JIyjjSF0x3imvr8OPEyREAQIVVD49bwrZLl6LRJWJlpQ06DZ9XVHzmFIzuuecePPzwwzNec/DgQTQ0NKRvd3V14fLLL8d1112H2267bcbH/tVf/VX64zVr1qCyshKXXHIJ3n//fSxevHjKx9x7773Ytm1b+nYgEIDL5ZrNt0NEOcZstkCWZYTDYRhTA1+Jct1Uoef0IaWzCz3OCR3cGHrowwiMxvDOxJbZXX6EIgmoVQJWOK04f2k5PG5lgGqlaOCbUUSYYzC6++67ccstt8x4zaJFi9Ifd3d346KLLsLmzZvxgx/8YM7Fbdy4EYCy4jRdMNLr9dDrubxLVAisFgsAYHR0lMFogfDF0MxmCj3jZ3pODz0VE7a3nRp6xs70MPTQfJFlGccGR9INElo7fDjaH4IsA5JJC49Lwl9/dBEaXSJWV9tg0rFlNtFU5vR/ht1uh91un9W1XV1duOiii7B+/Xps374dKtXc/wFoa2sDAFRWVs75sUSUfyxWKwAlGNHCKsYBr6eGnrF5PXMJPQ1OKypFZTApQw8tlJFoHPu6AuNNEjr98I3EIAjA0goLmtwl+Px5dfC4JdSWmvgGCNEsZeQtg66uLlx44YWora3FN7/5TfT396c/N9ZxrqurC5dccgl+8pOfYMOGDXj//fexY8cOXHnllSgrK8O7776Lu+66C+effz7Wrl2biTKJKMeYzWYAwMjISJYroXwnyzJ8ozFlO9uE0KOEoEjqjE8Y4SlCjxJ0JoeesSGlDD200GRZRpcvnOoSp2yLO9QbRCIpw6LXoLFGxI0b3Wh0iVhXI8JqYMtsorOVkWD0wgsv4OjRozh69ChqamomfU5OvS0Zi8Vw+PDh9AsgnU6HF198EY888ghCoRBcLheuvfZa3HfffZkokYhykFqthtlsZjCiGU0MPRO7tc0l9KyotMJpY+ih3BONJ3Gge3yAamuHH/3DSvfdujITPC4J15/rQqNLxBK7BWoOUCWaNxkJRrfccssZzyLV1dWlQxIAuFwu7Ny5MxPlEFEesVqtGAmFsl0GZclMoWdiQ4OJoUetElLb2/STQo9THN/eVmZm6KHc1DccSa8EtXb4sL87gFhChkGrwtpqEZ9qrEq3zC4167JdLlFB4+k7IsopVqsNoVAw22UUocwfMhoLPV7/5MGksw09TtGAlZU2hh7KW/FEEod7g+OrQe0+dPmU2W1VogEet4Sr1lSi0SWiwWnl0F2iBcZgREQ5xSba0NfXm+0yaI6mCz3jTQzmFnrG5vSUW/TcKkR5a2gkinc6lJbZe9t92Nflx2gsCa1awMpKGz62wpFume2wGbJdLlHRYzAiopxis4kIhUIc8ppDZFnG0EhsQtCJTAo9Y+d6IvGpQo8SdFZV2uBg6KEClkzKeH8glN4S19rhw7EB5bxkuUUHj0vC7RcthsclYXWVDXqtOssVE9GpGIyIKKeIog3xeBzRSAR6A99BzbR4UsaorMHRgTCOjvTBm+riNtbAYC6hR2lioGfooaIQDMfxbpcfe1NB6J1OP4bDcagEYLnDiuZFZfibCxbD4xZRIxn5Rg9RHmAwIqKcItpEAEAwFGIwmoV4QkYomkAwmkQwmkAwkvo4kkjdVu4PpX6feF8wkkA4LgNoxFPPnQBwAmqVAIdVnw46DD1Eyqpp+8nRSWeD/twXhCwDolGDxhoJn9tcB49bxNpqEWY9X14R5SP+n0tEOUWUUsEoGERZWVmWq8m8WDrYTAws48ElNDHkRJPKtacFm6mZdSqYdWpYdCpY9MrvVTYdLKn7zHo1NMkoDrS+hU9uuRie5XUMPUQAwrEE9ncFsHdsdlCHDydDMQDAYrsZHpeEm5pr4XGJqC8zQ8X/Z4gKAoMREeUUo9EErVaLYDA/OtPFEvJpKzXpFZwpgs2p150p2Fh0alj0Y7+rUW3TKWFnwn1jwWf8ejVMWtWsAs7w8DCC7/qwosLAw99UtHr84fRKUGuHDwd7hhFPyjDp1FhbLeL6c1zwuESsq5EgmThAlahQMRgRUU4RBAGiKC1YMIomkhPCy4RgEzlla9qkbWnj90WmCTYCUsFGr06HG7NOjRpRN+k+i0592nUWnRrGWQYbIpqbaDyJQ95h7G33oa1TCUPegDJA1VVihMct4VOeKjS5JCytsLAVPFERYTAiopxTUlKC4cDwrK6NJpKnB5bI1GduJgWe1La0mYJNOriMrcro1HBL+ilXaE69z6RTQcXD1kRZNxiMoDXVMru1XRmgGoknodOosLrKhqvWVKLJLaHRJaLcos92uUSURQxGGdQ3HMHOP/dnuwyivHMoLKKrfwT9bQMzBptgJIFoYupgoxKQCjWq9Jkai16NMpN2wgrNWJiZeA5HWbUxaosr2MiZn+9KlHGJpIwjfUFlNSh1Nqj95CgAoMKqR5NbwrZLl8LjErGi0gadhqtBRDSOwSiDjg+EcN/z72W7DKK8JMCBPW2Dp52lKTNpp1zJOfU6o1bF9rhEBS4wGkNbpx+tqSDU1unHSDQBjUpAg9OKC5bZ0eRSVoMqRQN/JhDRjBiMMmhDfSkOP3hZtssgyjvHjx/DUz//OT55zTWw2WzZLoeIcoAsy/hgYCS9EtTa7sPR/hAAoMSkhcct4UvnL4LHLWJ1lQijjgNUiWhuGIyIKOeUlJQCAIYDAQajBcO9dJRbQpE49nUF0Jpqmd3W4YdvNAZBAJZWWLC+tgRf+EgdPG4JtaUmrgYR0YfGYEREOcdms0Gj0SAQCKA628UUC+YiyiJZltHlG2+Z3dbhw6HeIBJJGRa9Bo01Im7c5IbHJWFtjQ1WA1tmE9H8YzAiopwjCAJKSkoQCASyXUrB47vslA2RWAIHeoYnbYvrD0YBAHVlJjS5JVx/rjI7aLHdwtb1RLQgGIyIKCeVlZVjyDeU7TKIaB70BsJoS7XMbutQWmbHEjIMWhXWVov4tKcaHreEdTUiSs26bJdLREWKwYiIclJZWRlOnDie7TKKBnfS0XyJJZI43BtUVoPalRWhLl8YAFAtGeBxSbhqTSU8bgnLHRZoOUCViHIEgxER5aSy8jKMjo4iEolAr+fQRaJcNTQSVVaDUiFoX5cfo7EktGoBqyptuGylA55Uy2yHzZDtcomIpsVgREQ5qaysHADg9/tRUVGR5WoKF09u0FwkkzLeHwilQ9Dedh+OD44AAMotOnhcEu64aAk8bgmrKq3Qa9kym4jyB4MREeWksrIyCIIAv8/HYLQQZG6mo9MFw3G806mcDWrt8OGdTj+Gw3GoBKDBacV5i8uw9cLF8LhF1EhGNvMgorzGYEREOUmj0UCSJPj8/myXUhQYi0iWZbSfHE2vBLV1+PDnviBkGRCNGjTWSPj8eXXwuCSsqbbBrOdLCCIqLPypRkQ5y26vgG/Il+0yChvf4S9ao9EE9nf70TqhW9zJUAwAsMRuhsct4abmWnhcEurLTFCxZTYRFTgGIyLKWXa7He3tJ7JdBlFB6PGH0druw95UCDrYM4x4UoZJp8a6GhH/8xxXumW2aOQAVSIqPhkLRnV1dThxYvILmpaWFtxzzz3TPiYcDuPuu+/GU089hUgkgi1btuBf//Vf4XA4MlUmEeUwe4Ud4XAYo6OjMBqN2S6nsPGMUUGJxpM42BNIrwa1dvjQG4gAANylRjS6JHzaU40mt4SlFRygSkQEZHjF6MEHH8Rtt92Wvm21Wme8/q677sJ//ud/4umnn4Yoirj99tvx6U9/Gn/6058yWSYR5agKu9J0YWhoiMGIaAYDwUh6gGpruzJANRJPQqdRYU2VDVevrUy3zC63sP09EdFUMhqMrFYrnE7nrK71+/344Q9/iB07duDiiy8GAGzfvh0rVqzA7t27sWnTpkyWSkQ5SCopgUajgW9oCFVVVdkup6BxvSh/JJIyjvQFsTfVMrutw4f2k6MAAIdND49LwrZLl6LJLaHBaYVOwwGqRESzkdFg9PWvfx0PPfQQ3G43PvOZz+Cuu+6CRjP1l9yzZw9isRguvfTS9H0NDQ1wu93YtWvXtMEoEokgEomkbwcCgfn9Jogoa1QqFSoqKjA0NJTtUgoW2yvnPv9oDG0dvvSK0DudfoxEE9CoBKyotOKCZXY0uSR43BIqRQ5QJSI6WxkLRn/7t3+LpqYmlJaW4vXXX8e9996Lnp4efPvb357yeq/XC51OB0mSJt3vcDjg9Xqn/TotLS144IEH5rN0IsohDocDx44dy3YZhY9njHJCMinj2OBIeiWotd2Ho/0hAECJSQuPW8KXLlgEj0vE6ioRRh0HqBIRzZc5BaN77rkHDz/88IzXHDx4EA0NDdi2bVv6vrVr10Kn0+GLX/wiWlpaoNfP3/7me++9d9LXCgQCcLlc8/bnE1F2ORxOtLW1IR6PT7viTJSvQpE43u3yK6tB7cpqkG80BkEAllVYsL62BLd9tB4elwR3KQeoEhFl0pxeZdx999245ZZbZrxm0aJFU96/ceNGxONxHD9+HMuXLz/t806nE9FoFD6fb9KqUW9v74znlPR6/bwGLSLKLQ6HA7Isw+fzoby8PNvlFCyuF2WeLMvo9I2itd2vrAZ1+HDIO4ykDFj0GjS6RNy4yQ2PS2mZbTHwjQAiooU0p5+6drsddrv9rL5QW1tb+rzAVNavXw+tVouXXnoJ1157LQDg8OHDaG9vR3Nz81l9TSLKf/aKCqhUKgwODjIYZRK30s27SCyBAz3DaJ3QJKE/GAUA1Jeb4HFJuOFcZXbQ4nIzB6gSEWVZRt6O2rVrF9544w1cdNFFsFqt2LVrF+666y589rOfRUlJCQCgq6sLl1xyCX7yk59gw4YNEEURn//857Ft2zaUlpbCZrPhjjvuQHNzMzvSERUxjUaDsvJynBwczHYpBYlbs+ZPbyCcCkDKtrgDPQHEEjKMWhXWVIv4tKc6PUC11KzLdrlERHSKjAQjvV6Pp556Cv/wD/+ASCSC+vp63HXXXZPOAsViMRw+fBgjIyPp+77zne9ApVLh2muvnTTglYiKW2VlJTra27NdBlFaLJHE4d7gpNWgLl8YAFAtGeBxSbh6XSUaXRKWOyzQqtkym4go12UkGDU1NWH37t0zXlNXVwf5lK0bBoMBjz32GB577LFMlEVEearSWYl9777LBgwZxI10MzsZiuKdTn86CO3r8mM0loRWLWB1lQ2XrXSkB6g6bGyZTUSUj/gKg4hyXmVlJWRZxtDQ0FmfcySarWRSxtH+IFo7lCYJe9t9OD6o7G6wW3TwuCX87cVL0OiSsKrSCr2WLbOJiAoBgxER5Tx7RQXUajUG+vsZjDKmeNeMguG4shqUmhv0Tpcfw+E41CoBDQ4LzltchtsvWgyPS0K1ZOC5LCKiAsVgREQ5T61Ww+FwYGBgINulFJyxF/nF0pROlmWcODmS2hKnhKEjfUHIMiAZtWh0ifjCeXVodElYU22DWc9/JomIigV/4hNRXqiqrsahgwezXQblmdFoAvu7/Wht92NvqknC0EgMALDEbobHLeGW5lo0uiTUl5nYMpuIqIgxGBFRXqiuqsbbb72F0dFRGI3GbJdTgPJ/yUiWZfT4w2jrUEJQa7syQDWelGHSqdFYI6bnBq2rESEatdkumYiIcgiDERHlharqagDAQH8/XG53lqspPPm4lS4aT+JgTyC9Ja61w4feQAQA4C41wuOS8D/WV8PjkrC0wgI1V4OIiGgGDEZElBdsNhssFgv6GYzmVT5FhYFgRFkNSrXM3t8dQDSehF6jwppqG65eWwmPS4LHJaLMos92uURElGcYjIgoLwiCgOqaGvT392e7lMKSox3W4okkjvQFU+eClPlBHUOjAACnTQ+PW8Llq5bC45LQ4LRCp+EAVSIi+nAYjIgob9TU1ODokSNIJBJQqzk7Zn5ldy+dfzSGto5Up7h2H97t8mMkmoBGJWBFpRUXLbfD45bgcUmoFDlAlYiI5h+DERHlDVeNC4lEAoODg6ioqMh2OQVlIc8YJZMyjg2G0iGotcOH9/tDAIBSsxYel4QvXbAITS4Jq6ttMHCAKhERLQAGIyLKGxUOB7RaLfp6exmM5slCDCsNReJ4t0tpmd3W4UNbpw/+0TgEAVhWYcG5dSX4q4/Ww+OS4C41coAqERFlBYMREeUNlUqF6upq9PXxnNH8m58lI1mW0Tk0Ot4prt2Hw73DSMqA1aDBuhoRN22qRZNbwtpqERYD/xkiIqLcwH+RiCivuNxu7N61C8lkEioVD9zPm7PMRZFYAvu7A0qDhFTL7IFgFABQX26CxyXhMxuU2UGLy80coEpERDmLwYiI8orL5cZrr74K39AQSsvKsl1O0ekNhFMrQcq2uAM9AcQSMoxaFdZUi/gfTcrcoHUuESUmXbbLJSIimjUGIyLKK1VVVVCr1fD29jIYzSN5iiWjWCKJQ97h8dWgdh+6/WEAQLVkgMct4ep1yuyg5Q4LNGqu4BERUf5iMCKivKLRaFBdXY1erxcrV67Mdjl5L93oQAZOhqLpltltHUrL7HAsCa1awOoqGy5f5YDHLaHRJaHCygGqRERUWBiMiCjv1NbW4Y03dvOc0VmIJ2T0h2LwDiu/uv1h7IrW43f/6UX3cCcAwG7RweOW8OWLl8DjkrCqysYBqkREVPAYjIgo77hra/Haa6/i5MmTKC8vz3Y5OeXU4NM7HIU3OH57IBRDcsKuuVKjGmpZj3OdemzbsgIel4RqycCW2UREVHQYjIgo71RVVUGj0cDr9RZdMJpr8CkzaeCwauG0arHaYYTTqkvfdli0EOQEnvr5z/GJ9cuxcmVl9r4xIiKiLGMwIqK8o1ar4Xa74e3pwerVq7Ndzrw6m+DjnCH4nGkLXCyWyPB3RERElB8YjIgoL9XV12PnK68gkUhArVZnu5xZiydk9IUmhJ7hGHpnGXzWOE3p0OO0alFhPnPwISIiotlhMCKivFRXV4+XEy+hr68PlZW5swVsquCTXv0JRjEQijP4EBER5SAGIyLKS3a7HWazGT3d3QsajD5M8FlbyeBDRESUqzISjF555RVcdNFFU37uzTffxLnnnjvl5y688ELs3Llz0n1f/OIX8cQTT8x7jUSU3wRBQF1dHXp6eub1z51L8BEAlJlTwceiOz34WLTQcegpERFRXshIMNq8efNpL1buv/9+vPTSSzjnnHNmfOxtt92GBx98MH3bZDJlokQiKgD19Ytw4MABjI6Owmg0zuoxsQnNDc4m+DjTwUcHu0XD4ENERFQgMhKMdDodnE5n+nYsFsPzzz+PO+6444yzMUwm06THEhFNp35RPQCgu7sbixcvBqAEn77g6d3cxkLQQCiOsZ1uDD5EREQ0ZkHOGP3qV7/C4OAgbr311jNe+7Of/Qw//elP4XQ6cfXVV+P++++fcdUoEokgEomkbwcCgXmpeT4cHwzhJ7vas10GUUE7qFmO3X8awOiuEIaiKgRiAmQob8AIkGHVyijRJVGik7HakkRJ6djtJCStjElHfGQAASARALqg/Cp0iWQy2yUQERHlhAUJRj/84Q+xZcsW1NTUzHjdZz7zGdTW1qKqqgrvvvsu/v7v/x6HDx/GM888M+1jWlpa8MADD8x3yfMiGElgb7sv22UQFbQRQUI8GYKoiqDSGIdojUPUxCFqErBq4tBMtUgdV34NL3SxOcrlcsHlcme7DCIioqwSZFmWz3yZ4p577sHDDz884zUHDx5EQ0ND+nZnZydqa2vxy1/+Etdee+2cinv55ZdxySWX4OjRo+ltMqeaasXI5XKhr38ANpttTl+PiIiIiIgKRyAQQIW9HH6//4zZYE4rRnfffTduueWWGa9ZtGjRpNvbt29HWVkZPvGJT8zlSwEANm7cCAAzBiO9Xg+9Xj/nP5uIiIiIiGjMnIKR3W6H3W6f9fWyLGP79u246aaboNVq51xcW1sbAOTU8EYiIiIiIio8GW239PLLL+PYsWP4whe+cNrnurq60NDQgDfffBMA8P777+Ohhx7Cnj17cPz4cfzqV7/CTTfdhPPPPx9r167NZJlERERERFTkMtp84Yc//CE2b9486czRmFgshsOHD2NkZASA0uL7xRdfxCOPPIJQKASXy4Vrr70W9913XyZLJCIiIiIimlvzhXwQCAQgiiKbLxARERERFbm5NF/g5EIiIiIiIip6DEZERERERFT0FmTA60Ia2xk4PMzRjURERERExWwsE8zm9FDBBaOxb37xovosV0JERERERLlgeHgYoijOeE3BNV9IJpPo7u6G1WqFIAjZLocmCAQCcLlc6OjoYGMMOg2fHzQdPjdoJnx+0HT43CBAWSkaHh5GVVUVVKqZTxEV3IqRSqVCTU1NtsugGdhsNv6Aomnx+UHT4XODZsLnB02Hzw0600rRGDZfICIiIiKiosdgRERERERERY/BiBaMXq/H1772Nej1+myXQjmIzw+aDp8bNBM+P2g6fG7QXBVc8wUiIiIiIqK54ooREREREREVPQYjIiIiIiIqegxGRERERERU9BiMiIiIiIio6DEY0YL4P//n/2Dz5s0wmUyQJGnKa9rb23HVVVfBZDKhoqICf/d3f4d4PL6whVJWPPbYY6irq4PBYMDGjRvx5ptvZrskyoJXX30VV199NaqqqiAIAp577rlJn5dlGV/96ldRWVkJo9GISy+9FEeOHMlOsbSgWlpacO6558JqtaKiogLXXHMNDh8+POmacDiMrVu3oqys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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens.draw(num_rays=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Viewing the spot diagram indicates that the spot size is indeed minimized and that the lens is diffraction limited." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "spot = analysis.SpotDiagram(lens)\n", "spot.view()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.11.1" } }, "nbformat": 4, "nbformat_minor": 2 }