{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Undoing Optimization" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "from optiland import optic, optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define a starting lens:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0YAAAELCAYAAAD9fZaDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFhUlEQVR4nO3de5QcZZ0//ndduqrvc7/kMrkRTAgQlEDCxF0FYQ2C7LLyy9eDRyGIWb9uYIWwHokLYmDXEUXFVRb0rIb1p9ko53BRV93lImFXwi2QhXCJBgkDSWYmk8xM36aruqvq+0dfpqtvk0mmu2qm369z5kxXddXMk9BM+j2fz/M8gmVZFoiIiIiIiBqY6PQAiIiIiIiInMZgREREREREDY/BiIiIiIiIGh6DERERERERNTwGIyIiIiIiangMRkRERERE1PAYjIiIiIiIqOExGBERERERUcOTnR7AdDNNE4cOHUIoFIIgCE4Ph4iIiIiIHGJZFqLRKObOnQtRrF4TmnXB6NChQ+jp6XF6GERERERE5BLvvPMO5s+fX/WaWReMQqEQAODNP72Vf0xERERERI0nGo3ilCWLjysXzLpglGufC4VCCIfDDo+GiIiIiIicdjxTbLj4AhERERERNTwGIyIiIiIiangMRkRERERE1PBqGowWLVoEQRBKPjZt2lT2+vvvv7/kWq/XW8shEhERERER1Xbxheeffx6GYeSP9+7di7/4i7/A+vXrK94TDoexb9++/DH3IiIiIiIiolqraTDq6OiwHX/ta1/DKaecgg9+8IMV7xEEAd3d3bUcFhERERERkU3dluvWdR0/+clPsHnz5qpVoFgshoULF8I0TZx99tn46le/itNPP73i9ZqmQdO0/HEkEpnWcZ+MVw6O4ZZHXnN6GEQznq7riMWiUAUTqpj9EKyJx9kPb/acIprwZs/JLDpP6rQVp2Ht2vc7PQwiIiJH1S0YPfzwwxgdHcWGDRsqXrNs2TL86Ec/wsqVKzE2Noa77roLa9euxauvvlpxp9q+vj5s3bq1RqM+OSGvjFULmp0eBtGMNzg4iHcjEajBJiRNGTEDGE4LSBqZD82snH4kwYJXsuCTAK+YeTzxgYnHYubYJ5VeI83icHVkeBgvvfgigxERETU8wbIsqx7faN26dVAUBb/85S+P+55UKoXTTjsNV155Je64446y15SrGPX09GDoyDA3eCWaJX77m1+jv78fl370o2WfN0wLiZSJuG4grpuIaQZiesGxbiCuZY4Lzxcea+nKPwq9soCAIiGoiAgoEgKKiKCa+Zw/ViaOg6r9vF8RIbp0vuSel17CgQMHsOm6650eChER0bSLRCLo7GjH2NjYpNmgLhWjt99+G4899hgefPDBKd3n8Xjwvve9D/v37694jaqqUFX1ZIdIRC529NgxhKr8MJNEASFVQkiVTvh7pAwLiYKgFMsGrHhxwMoejyUNHBzTCwKWgbRZ/msLAPyKWBKgbMeqVPBcLmBNXOOVBS5GQ0REVEN1CUbbtm1DZ2cnLr300indZxgGXnnlFVxyySU1GhkRzQTHjh3DksWLa/o9PJKAJp+MJt+J3W9ZFnTDKqhQ5UJWLlDlQlUucBkYjqfx9ohue96sULgSBVStSgUqVLOCBZ8VmVvXERERVVLzYGSaJrZt24arr74asmz/dldddRXmzZuHvr4+AMDtt9+O8847D0uXLsXo6Ci+8Y1v4O2338ZnPvOZWg+TiFxK13XEY7GqFSM3EAQBqixAlUW0+k/sR6tlWRhPmbbqVGGVKqaVtgEeiui25xOpCmUrAB5RKAlUqYQMc7wL1u/eRGdIRVdYzX72otnngSiySkVERI2h5sHoscceQ39/Pz796U+XPNff3w9RnPgN5sjICDZu3IiBgQG0tLRg1apVePrpp7FixYpaD5OIXGpkZAQAGmLOoCAI8CsS/IqEDnhO6GsYZiZcxQrmWxUHrMLzh2MCRtJe7HjhXQzHNBTOOvVIAjpDKjpDXnSGVXSFJkJTYYgKqHVbx4eIiKhm6rb4Qr1EIhE0NTVx8QWiWeKNN97Aww89iPX/5//A6/U6PZxZ53/37MGf/vQWrrv+eqQNE0fjOgYjGoaiGgYjyezngsdRDdFk2vY1gqpcUm0qPm4PKvBIbOUjIqL6ct3iC0REJ2p0ZAQej4eLrNSKIADI/H5MlkR0hb3oClcPoAk9jaGohqFIJihlPmeC0zsj49jdP4rBSBIpY+L3boIAtAWUfNWps0x46gypaPF7uMgEERE5gsGIiFxtZGQE4XCYb5ZrRBAETLVxwK/IWNQmY1FboOI1lmVhdDxlrzZlK1FDkST2HhzDYFTD0bhetn2vXNWpK6RmW/q88CknvgIhERFROQxGRORqx0aOIRgMOj2MWa0WHdWCIKDFr6DFr2B5d6jidSnDxHBMx1Akmak+5QNUEoMRDX8YjGEoqiGm2dv3Ql654pyn3HF7UIHM9j0iIjpODEZE5GqjIyNYuHCh08OYtU6kYjSdPJKIOU1ezGmq3r4X19K2qlPhnKcDRxN47sAxDEW1kva99oCCzrB3IjQVLiSRrT41+WRWJImIiMGIiNwrnU4jGo0iGKpccaCTI6A2FaPpFlBlLFZlLG6v3L5nmrn2vWTZEPW/74xhKDqEo3Hddp8qi9nV98pVnybOeT1s3yMims0YjIjItSKRCACwla6WBAEzIBcdF1EU0BpQ0BpQcNqcytfpaRPDsYLgFE3mF5IYjCTx+kAEgxENCd2w3dfkk21Vp86CqlOuCtUeVCFx7yciohmJwYiIXGt0dBQAEGLFqGYyb+FnSTI6ToosYm6zD3ObfVWvi2lp23yn3Ep8Q9Ek/nQkjmf+lGnfS5sTf3+iALQH1dKFI4rmP4W9bN8jInIbBiMicq3R0ZHMpqd+v9NDmbWcnmPkZkFVRrBDxikd1dv3RhJ6ttpUuv/TS++MYTAyiJFEynaf1yOWznkq08qnsn2PiKhuGIyIyLXGRscQCAQgilxZrGYYjE6KKApoC6poC6pYMUn73lC0NDjljl89FMFgJInxlGm7r9nnmWjZq7D6XltAYfseEdE0YDAiItcaHR3l/KIa49vp+lBkEfNbfJjfUrl9z7IsxCqtvhfRsH8oht/vH8aRmA6joH1PEgW0B7Ob5+b2e8oHKG92AQkVQZXte0RE1TAYEZFrjY2NIsBgVFusGLmGIAgIeT0IeT04paPy694wLRyL6/ngNJid+zSY3Tz3+bdHMBTVMFrUvufziPkqU2eV5csVmRVaImpMDEZE5FpjY2Po6u52ehiz2kxZrpsmSKKAjpCKjpCK0+eGK16npQwMFay+lwlPmRX4hiIaXnk3gsFoEsni9j2/xzbnqbh1ryusotWvQGT7HhHNMgxGRORKqVQK4+PjCAQqT3ynk8fWqtlL9UjoafGjp6Xy4iWWZSGaTBdUnSaWLh+Katg3GMV/7x/GcFH7npwNZ7Y5T2WqTwFV4muMiGYMBiMicqWxsTEAQJDBqOZYMWpcgiAg7PMg7PPg1M7q7XtH43r5zXMjGp4bHsFgNImx8bTtPr8i2TbPLdw4Nzf/qSOosn2PiFyBwYiIXCm3uSvnGNUWl+um4yGJQj7gVJNMGSVte7nq0+Gxcfzvu6MYjGjQ0vb2vdaAJxOU8tWmgoUkssctbN8johpjMCIiV4pExriHUT2wzYmmkdcjYUGrHwtaq7fvRZLpzMIR+cpTdiPdqIbXD0fx5B+GcTSmoaB7Dx5JQEdwonWvs8Ly5UGVb22I6MTwpwcRuVJkLAKfz8c9jOqAFSOqJ0EQ0OTzoMnnwXu6QhWvSxtmpn2veOGIbJB6882jGIpqiCTt7XsBVSqZ81S8B1RHSIVH4s8WIrJjMCIiV4pEIlx4oQ5yE+Mty+IkeXIVWRKz85K8wLzK1yX0NI5Ey8x/iiZxcGQcL/aPYiiqQS9o3xMEoNWvlF1xr/C4xe/h/xdEDYTBiIhcKRIZYxtdHfAtH810fkXGwjYZC9uqt++Njqfywak4RO09OIahqIbhuA6rqH0vM7eq/MIRuWO/wrdTRLMB/08mIleKRqOYM2eO08OY/VgxogYgCAJa/Apa/AqWVWnfSxkmjsYKqk9FbXx/HIphMKIhptnb94KqXDk4ZedDtQcVtu8RuRyDERG5jmVZiEajOOWUU5weyqxX2EpH1Og8kojuJi+6m7xVr4tr6czqe4ULR2SrT28fHcfzB0YwFNWQMib+vxIEoD2gVF04oiusotnH9j0ipzAYEZHrJJNJpNNp+DnHiIhcKKDKWKzKWNxe+WeUZVkYSaQm9nsq2v/plYNjeOx1DUfjuu0+RRYL9n6a2Dy3OET5FKnWf0yihsNgRESuE41GAYBzjOog93tpVoyIppcgCGgNKGgNKFjeXbl9T0+bGI5ppRvnZo/3DcQwGE0irhm2+8JeuerCEV1hFW0BBTLb94iOW02D0Ve+8hVs3brVdm7ZsmV44403Kt7zwAMP4NZbb8WBAwdw6qmn4s4778Qll1xSy2ESkctEs5u7MhjVAVvpiBylyCLmNvswt9lX9bpYtn2vuPo0FEniwNE4nn3rGI7E7O17ogC0BVX7xrllFpJo8sls3yNCHSpGp59+Oh577LGJbyhX/pZPP/00rrzySvT19eGjH/0otm/fjssvvxwvvvgizjjjjFoPlYhcIhaLAQB8vupvFOjk8a0Q0cwQVGUEVRlLqrTvmaaFkYReUn3KLSLx0jtjGIoO4lg8ZbtPzbbvlVtxr7AK5fWwfY9mt5oHI1mW0d3dfVzXfuc738HFF1+ML3zhCwCAO+64A48++ii+973v4b777qvlMInIRaLRKDd3rRdWjIhmDVEU0BZU0RZUcVqVRT31tIkjsdKFI3LHrx2OYCiqIaHb2/eafHJm49xsBapcK197UIUk8lcuNDPVPBj98Y9/xNy5c+H1etHb24u+vj4sWLCg7LW7du3C5s2bbefWrVuHhx9+uOLX1zQNmqbljyPZFhwimrlisSirRXXCOUZEjUeRRcxr9mFelfY9y7IQ14z8UuW2pcujGt48EseuPx3DkaiGtGlv32sP2qtNE6183nxLX8jL9j1yn5oGozVr1uD+++/HsmXLcPjwYWzduhV//ud/jr179yIUKp2IODAwgK6uLtu5rq4uDAwMVPwefX19JfOYiGhmi8ViDEb1wjcmRFSGIAgIemUEvUGc0hGseJ1pWjiW0O2tewWPd789gsGohtGEvX3P6xHz1afilr2J+VAqVLbvUR3VNBh95CMfyT9euXIl1qxZg4ULF+LnP/85rr322mn5Hlu2bLFVmSKRCHp6eqblaxORM2KxGILByv8Q0/RhxYiIToYoCmgPZlroTq9ynZYyMBTTylafhiIa9h6KYDCSxHjKtN3X7PNMBCVb9WniuDWgsH2PpkVdl+tubm7Ge97zHuzfv7/s893d3RgcHLSdGxwcrDpHSVVVqKo6reMkImfFYjF0dHY6PYzGkKsYMRgRUQ2pHgk9LX70tFRebdSyLEST6bIb5w5GNfxxMIr/2T+M4ZgOo6B9TxIFdASVisuX5x4HVbbvUXV1DUaxWAxvvvkmPvWpT5V9vre3F48//jhuuOGG/LlHH30Uvb29dRohETnNsiwkEgm20tVJvmLk6CiIiDLte2GfB2GfB0s7K3cNGKaFo3G9ZPny3OPnD4xgKKphdNzevudXpPzmufk5T2Va+RSZC/80qpoGo7//+7/HZZddhoULF+LQoUO47bbbIEkSrrzySgDAVVddhXnz5qGvrw8A8PnPfx4f/OAH8c1vfhOXXnopduzYgRdeeAE/+MEPajlMInKR8fFxmKYJn9fr9FAaCytGRDRDSKKQDzhnzA1XvC6ZMnCk3Ma5UQ2DYxpefncMgxENWtrevtfi95RUn4orUa1+BSLb92admgajd999F1deeSWOHj2Kjo4O/Nmf/RmeeeYZdHR0AAD6+/tty/GuXbsW27dvxy233IIvfelLOPXUU/Hwww9zDyOiBhKPZ/Yw8rJiVB+55bpZMyKiWcbrkdDT6kdPa/X2vUgyXbJxbu74jYEonvrjMIZjGgq69yCLAjpCqn3FvTLzn4LeujZn0Umq6X+tHTt2VH3+ySefLDm3fv16rF+/vkYjIiK3i8fiALi5a71MLL7g6DCIiBwhCAKafB40+Tx4T1fpisk5acPE0bhuXzgiG6KGIhqeGT6KwYiGSDJtu8+vSCWtevnj7PLlHUG277kFYywRuUo8kQAAeNlKVx8CZxkREU1GlsTsQg5eYF7l68Z1IxOWSjbO1XBwZBwv9Y9iMKpBL2rfaw14Ks55yrXyNfs8bN+rMQYjInKVeDwOWZbh8XicHgoREdGU+BQJC9v8WNhWvX1vbDxt2zy3sJXv1cNR/G7fEQzHdVs13yMJBYtHZENTmc1zAyrf3p8o/s0RkaskEnFWi+oot3QtW+mIiOpDEAQ0+z1o9nuwbJL2veFY6ep7ueM3h2IYjGqIFrXvBVSpbPWp8HF7UIFHYvteMQYjInKVRDzBYOQAbvBKROQusiSiu8mL7iYvgKaK1yX0dNmFIwYjGt4ZGccLb2eWL08ZEz/nBQFoCygFVafybXwtfk9D7f3EYERErpJIxKEyGNVN4/xzR0Q0O/kVGYvaZCxqC1S8xrIsjCRSZatPQ5EkXjk4hqGohqMV2vfKbZxbeOxXZNv3SqUye0h5PDMrWDEYEZGrxBMJ+LkiXf3kW+lYMSIimq0EQUBrQEFrQMHy7srte6ls+16l5cv/MBjDUFRDTLO374W88kT1KSih5Y+/AQBsvunvoShKTf9s04nBiIhcZTyRQGtLi9PDaBgz5/d4RERUax5JxJwmL+Y0Ve/ciGnp/FLlhYtIDEU1vHMsjpn6rziDERG5yvj4OFvp6okVIyIimqKgKiOoyljSXtq+p+s6vvXNJ+s/qGnAYFRDfKNBNDWGYSCZ1KCqqtNDISIiogbDYFRDzx8Ywae2veD0MIhmmHPw/z+hQ3nqDXgkAUr2wyOJ2c+l5zIfYtFzAhRZhEcUoMj25z1l7vFkjwvvn0kTRk9UfntX/iKHiIgaHINRDS1qD+Af/2qF08MgmjFi0Rj++7+fwrIVp0P1B5EyLOiGCd2woKctpEwLetrMfragGxYSugHdsLLXWrZ7co+LNhg/brlQVTlc2cOapyhYlb2+8OuJmfBW7vrc15NF1DagNUD4IyIiOh4MRjXUGVKxftV8p4dBNGP09/djcNcwLjutGU1NlfdsmCrTqhacMmHLHq6yYazg+mr3a2kTUS0b1kwLqbQJ3bSHOd2wYJ5AUUYAJsJSQQVs4rOYDW3lw1q548KwFoukcNgI4fWBGLrTHgRUGQFFgl+RGqJiRkRElMNgRESukUyOA8C0zzESBQGqLEB1+CeeYVauatmDV1FlLFcpyz1X7nrDREI3MWoYZcNbqqDyVprPluG321+znREEwK9ICKoyAoqMgCpNfM6Gp6AqZx4XPqdkzgXz12XOc4d1IiJyOwYjInKN8fEkAMyoPQ+mQhIF+EQBPg8ASI6MwbIsGCby4erdgSH8bud/46/+v49DUv2IawZiWhpx3UBcS2c+so9jWubzodFxxDUDcT2d/5xMVe9XVGQRAUXKhiY5/7g4VAVVe/gK5MJXPohJ8HlYzSIiounHYERErpFMjsPj8UAUWV2oFUEQIEuALGWC2bhPRJOo4T0dfrS2tp7w100b5kSYyoeqTGiK5R4XPpcNVaOJFA6OjJfcW63tUBQyO70XhqpgQYAKFAWvylUvVrOIiGgCgxERuUYymeRS3XWWr7uc5Kp0siSiySeiKVMOOymWZSGZMrOVq3KhykAsmbZVrHLXHEzo+cpW7rw2yeobqiza2gBtla2SNsHqVS9Ws4iIZi4GIyJyjeR4Eh7P7Gyjcy0XvokXBAE+RYJPkdCBkw/KKcNEIt8OmC5pA8yFqlhR+BpJ6Hh3JBvECu6rliFFARUqV0XzssqEqnJVL5nVLCKiumEwIiLX0LQkFJXByAmzeRcjzzRXs8ZTRkGbYOlcrJIWwmz4GonrBfO1Mtfrx1nNKm0HLJyXZQ9f+RDmtd/j9YisZhERVcFgRESukUwmoXhO/s0rHb+Jt8mzORpNH0EQ4Fdk+BV52qpZE+EpXbD4RWlFa6JylcaxuI53RkqrX9WqWZIowK9Ik1SuClcUtM/FKmwh9LOaRUSzEIMREblGUtPg83qdHkZjYQXBUR5JRLNfRLN/eqpZCd0oswhGtrJVEL4Kw1QsmcbRuF4yj2uyapbXI06+omCl+VoFgSuoylBlVrOIyHkMRkTkGloyiXA47PQwGtJJrr1ALiAIQr6lDqGTr2bpabNC5aqgslUYuLKh6mhMx9tFVa+EbkxazSqZl1WmHbDsPlpKaSuhJDJkEdHUMRgRkWtomsZWOscwGZGdIotQZAUt/pP/WqaZnZtV0A5YrnJVrto1HNMn7smeTxnVX68+j2hvA6y0omBRK2G5qherWUSNo6bBqK+vDw8++CDeeOMN+Hw+rF27FnfeeSeWLVtW8Z77778f11xzje2cqqpIJpO1HCoRuYCmafAwGNUV3/BRPYjiRDWrc5qrWcWhqXARjOL5WsMxDW8fTdgWzkjoRtXvJYlCZt5VxcUvyle0yrUQ+hVWs4jcrKbBaOfOndi0aRPOPfdcpNNpfOlLX8KHP/xhvPbaawgEAhXvC4fD2LdvX/6Y/3ATzX6WZSGVSsGjcFU6J7CVjmaS6a5mJVL2UFWyrHvxc9nHR6J6SSvh8VazyleuJt9Hq7CFUGE1i2ha1TQY/fa3v7Ud33///ejs7MTu3bvxgQ98oOJ9giCgu7u7lkMjIpfRdR0A4JHZ4esEi8mIGpQoCghmg8h00NPlNyeu1EKYq2wNRTXEjyZsIWuyapYsCqWhqcwCFwFFRsBbUOEq00LoVySIrGZRg6vrO5CxsTEAQGtra9XrYrEYFi5cCNM0cfbZZ+OrX/0qTj/99HoMkYgcomkaALBiREQzmiKLaJUVtAZO/meZaeZWGixdWbBc+Mp/TmaDVlEIm6yalVvOvaSKVVS5KjcXq7gCxmoWzUR1C0amaeKGG27A+9//fpxxxhkVr1u2bBl+9KMfYeXKlRgbG8Ndd92FtWvX4tVXX8X8+fNLrtc0Lf+GCgAikUhNxk9EtcWKERGRnSgKCHplBL0yuqbh6+WrWcVVrCrzsuKagaGIhrgWt4WvyapZHkkoXfyisJo16eIXcn5uF6tZVC91eweyadMm7N27F//zP/9T9bre3l709vbmj9euXYvTTjsN3//+93HHHXeUXN/X14etW7dO+3iJqL5ywUjm4gt1xd/oEjWO6axmGaaF8Xw1q0zbYGE1q6jalatmFV6XNo+jmnU8KwpOsghGUJWhyNycmMqrSzC67rrr8Ktf/QpPPfVU2apPNR6PB+973/uwf//+ss9v2bIFmzdvzh9HIhH09PSc1HiJqP7yFSMGIyIi15OmsZplWVZ2pcGCcJUsrVyVBq50STUrpqUxnqq+ObGtmlUyL6tMa2CVJd/9HlazZpOaBiPLsnD99dfjoYcewpNPPonFixdP+WsYhoFXXnkFl1xySdnnVVWFqp780p9E5KxUKgUAkNlK5wguvkBEThEEAapHguqRpq2alSizOXGsqG2wOHDFkmkMjiXt+2tpBowpVLOK2wErrShYXPXKLZzBapazavoOZNOmTdi+fTseeeQRhEIhDAwMAACamprg8/kAAFdddRXmzZuHvr4+AMDtt9+O8847D0uXLsXo6Ci+8Y1v4O2338ZnPvOZWg6ViByWyrXSMRjVFX/PSUSzjSQKCHk9CHlPvgPBsixoabNkLla5FsLiZd0HikJW/HirWbbwlJ1rVSFUVWshZDVr6mr6DuTee+8FAJx//vm289u2bcOGDRsAAP39/RDFiXQ8MjKCjRs3YmBgAC0tLVi1ahWefvpprFixopZDJSKH6SkGI0dwjhERUUWCIMDrkeD1SGibhq+XNszsSoMT7YC2FsIKy7pHk2kcHkuWXF+tmiUIuZUGq7cDFoeqfGWraOGMRqhm1byVbjJPPvmk7fjb3/42vv3tb9doRETkVqlUCrIsczEAh7CVjoio9mRJRNgnIuyb3mpW8XLuFVsIs58PjybtVS89jeRxVLMqtwMWrCIoz9x/T/irWSJyhVwwIiIiosnZqlnBk/96xdWsmGZvA5w4nwtZmecj46l8NSumpZHUdfz1DP0dJ9+FEJErpFMpSJLk9DCIiIga0nRVs3Rdx7e++fw0jaq+Zn+zIBHNCKl0mhUjJ7GVjoiIGhyDERG5AitGzpih3Q5ERETTjsGIiFwhnTYgSawY1R0XuyAiIgLAYERELpFOpyBJ/JHkFDbSERFRo+O7ECJyhXQ6zVY6J3GOERERNTgGIyJyBQYjIiIichKDERG5QtowIDIYERERkUMYjIjIFYx0GpLIH0n1JnDxBSIiIgAMRkTkEoZhsmLkIM4wIiKiRsdgRESuYBisGBEREZFz+C6EiFzBMAyIDEZERETkEL4LISJXMAyTwchJXK6biIgaHN+FEJErmCaDERERETmH70KIyBVM04DAYEREREQO4bsQInIFVoyIiIjISXwXQkSuYFkW99RxEGcYERFRo2MwIiJXME0TIoMREREROYTBiIhcwTRNVoyIiIjIMQxGROQKbKUjIiIiJzEYEZErMBg5g3/nREREGQxGROQKDEZERETkpLoEo3vuuQeLFi2C1+vFmjVr8Nxzz1W9/oEHHsDy5cvh9Xpx5pln4te//nU9hklEDrGs7JpoDEZERETkkJoHo5/97GfYvHkzbrvtNrz44os466yzsG7dOgwNDZW9/umnn8aVV16Ja6+9Fi+99BIuv/xyXH755di7d2+th0pERERERA2q5sHoW9/6FjZu3IhrrrkGK1aswH333Qe/348f/ehHZa//zne+g4svvhhf+MIXcNppp+GOO+7A2Wefje9973u1HioROSRXMWK9iIiIiJwi1/KL67qO3bt3Y8uWLflzoijioosuwq5du8res2vXLmzevNl2bt26dXj44YfLXq9pGjRNyx9HIpGTH/g0GdcN/Gk47vQwiFzPNE0Mm368HbVgHhl3ejgNJRrVMWz68YcjCYwK7vn5SUREM1M6lco/TqYMKIqDg5mimgaj4eFhGIaBrq4u2/muri688cYbZe8ZGBgoe/3AwEDZ6/v6+rB169bpGfA0+9NwHB+77xmnh0E0Q6zAL59PA8+/5fRAGtAK/PLBtwDw756IiE6ODAOf8mUevzWcwFkBn7MDmoKaBqN62LJli63CFIlE0NPT4+CIJixpD+DB/3ue08Mgcj3TNPFv/3Y/Vq5c6Zr/fxtFNBrFU089hUsvvRSdnV2T30BERFRFOpXCb7a/BABY3O53eDRTU9Ng1N7eDkmSMDg4aDs/ODiI7u7usvd0d3dP6XpVVaGq6vQMeJr5FAmnzw07PQwi1zNNE+1iAgtDApZ2zJzfLM0Gox4Nr4kJvKfDj3n8eUVERCdJ13X8JvvY65EcHctU1XTxBUVRsGrVKjz++OP5c6Zp4vHHH0dvb2/Ze3p7e23XA8Cjjz5a8Xoimvly+xdZDo+DiIiIGlfNW+k2b96Mq6++Gueccw5Wr16Nu+++G/F4HNdccw0A4KqrrsK8efPQ19cHAPj85z+PD37wg/jmN7+JSy+9FDt27MALL7yAH/zgB7UeKhERERERNaiaB6OPf/zjOHLkCL785S9jYGAA733ve/Hb3/42v8BCf38/RHGicLV27Vps374dt9xyC770pS/h1FNPxcMPP4wzzjij1kMlIofkKkawWDMiIiIiZ9Rl8YXrrrsO1113XdnnnnzyyZJz69evx/r162s8KiJyE0EQ8vsZEREREdVbzTd4JSI6HgxGzuDfORERUQaDERG5AoMREREROYnBiIhcQRRFBiMiIiJyDIMREbmCKIowGYyIiIjIIQxGROQKbKVzluD0AIiIiBzGYEREriCKIkzTdHoYRERE1KAYjIjIFURRgsVgRERERA5hMCIiV2DFiIiIiJzEYEREriBJDEaOEjjLiIiIGhuDERG5giRJDEZERETkGAYjInIFSZJhMBgRERGRQxiMiMgVJEmEaRhOD6NhsZGOiIgaHYMREbmCJLNi5ATuHUVERJTBYEREriBLEitGRERE5BgGIyJyBVmWYTAYERERkUMYjIjIFRiMHMbluomIqMExGBGRK8iyB4bBOUZOYSwiIqJGx2BERK4gyxIMI+30MBoPF18gIiICwGBERC4hezxspXMAYxEREVEGgxERuYJHlpFOs2LkGM4xIiKiBic7PQAiIoAVIyIiIielDBNxzUBcTyOupRHTDMS1dPbYyH+Oaens+ezzRc8ldQ1XzNDSC4MREbmCx+NhxYiIiOg4WZaF8ZQxEVbyQcUeWmJlwk3umsKQo6erL4CkyiKCqoyAKiGgTHxuDSjoafVlnlMk+GXgyO9fqNPfwvRiMCIiV8gFI8uyILCtq+74d05EVHvFVRlbWNHT2aBi2MNN9nOs6PqEnoZZZaKoKACBbFixfVZltAZ82XBTeD4TdPLhp+heWTq+MpCu6/jW76fpL6zOahKMDhw4gDvuuANPPPEEBgYGMHfuXHzyk5/EP/zDP0BRlIr3nX/++di5c6ft3Gc/+1ncd999tRgmEbmI4sn8bEin0/B4PA6PpoFwVToioooKqzIVqy1F4aZsu1n2vHYcVZmJikwmkARVGS1+BfNbfLZKTUCVsiGmNNwEVAk+j8Rfek1RTYLRG2+8AdM08f3vfx9Lly7F3r17sXHjRsTjcdx1111V7924cSNuv/32/LHf76/FEInIZTwKg5ETGIuIaLZJG2ZJtaWkpay4ElOuDS37uVpVRhBQMay0+H220FKuDS1XmQmqMvyKBM9xVmWoNmoSjC6++GJcfPHF+eMlS5Zg3759uPfeeycNRn6/H93d3bUYFhG5WC4McZ6RM/hbRSJyimVZSKZMe0tZsjSg2Cs1lRcGmKwqo8iiPaxkHzf7PZjX7KveUlZQxWFVZvap2xyjsbExtLa2TnrdT3/6U/zkJz9Bd3c3LrvsMtx6661Vq0aapkHTtPxxJBKZlvESUX3l2mxTqZTDIyEiosmkDRMJ3ajQUlZYjSkKMGUqNQndgFGlLCMIgD8XRoqqLXObfQVBpVxFRkYwH24y51mVoUrqEoz279+P7373u5NWiz7xiU9g4cKFmDt3Ll5++WV88YtfxL59+/Dggw9WvKevrw9bt26d7iETUZ3lglGawaiuLM4xImoIlmVBS5tFE/gnmxdTeWWzZOr4qzKFn8M+TybMFLWSVZwzo2SqMqLIqgzV3pSC0c0334w777yz6jWvv/46li9fnj8+ePAgLr74Yqxfvx4bN26seu/f/M3f5B+feeaZmDNnDi688EK8+eabOOWUU8res2XLFmzevDl/HIlE0NPTczx/HCJykXzFiK10REQAAMO0yraSlc6LMSZvQzvOqky5+TJzmr0FQaVwXkzBIgFFlRpFZlWGZp4pBaObbroJGzZsqHrNkiVL8o8PHTqECy64AGvXrsUPfvCDKQ9uzZo1ADIVp0rBSFVVqKo65a9NRO6S+/84pesOj4SI6MTkqjLlNr+cyjLMuWrO+CRVGY8klE7uz1Zl5mRbzPJzYrylbWiF82VYlSGaYjDq6OhAR0fHcV178OBBXHDBBVi1ahW2bdsGUZz6bw727NkDAJgzZ86U7yWimYUVI2dx8jA1KsO0kJhsqeXi52zzZQrDT/WqDJCtytiqLZnj7ibvpPvIFK9sxqoM0fSqyRyjgwcP4vzzz8fChQtx11134ciRI/nncivOHTx4EBdeeCF+/OMfY/Xq1XjzzTexfft2XHLJJWhra8PLL7+MG2+8ER/4wAewcuXKWgyTiFxEEAR4PB5WjBzCXEQzhWVZ0NPmJNWWcuHGXqnJPX9cVZlyc2G8MrrCasnKZuWWYc4952dVhsjVahKMHn30Uezfvx/79+/H/Pnzbc/lJvqmUins27cPiUQCQOa3xY899hjuvvtuxONx9PT04IorrsAtt9xSiyESkQupqspV6eqMiy9QPZimhYRefh+Z/LlkaStZSRta9vn0cVZliqstnWEVQTVQtaWsMNwEVVZliBpJTYLRhg0bJp2LtGjRIts/yD09Pdi5c2cthkNEM4SqqtAZjBzC32KTnZ5fwcxeYam2Ulk+8BRVZxK6UfV72aoyhZ+9mTATKFORsbebTbSm+RVWZYjoxNRtHyMiosmoXi9b6RzCVrqZL1eVyc11Kay6lKvU5D8ny4QbPY2UcRxVmeLKTLYqE1ACVefLBIsesypDRG7AYEREruFVVegMRvXFVjpH5asyBaGl6jLMVVY2m6wqI4tCaVjJVmcyYaYgwBReV1CpyW2w6VMkSKzKENEsw2BERK7h9XoRz847pPqYiEV8k3s8TNNCIlU6gb+klaxC61nx3JnJqjI+j1h2w8vOkFq+raygDS2zPPPEPYoscvVBIqIqGIyIyDW8Xi90jRUjJ8zmt8uZFcwqrFRWdb5M4Xkju4KZUbXIJomCfRnmgs0vO4JqaYCpMOk/oErwKzKrMkREdcRgRESuoXq90HXN6WE0Fhe20llW4QpmFVrKkuXCTflKzfFUZQqXYc597giqWNRWurJZYUtZ8dwZlVUZIqIZi8GIiFzD6/VyjlGd5SPDSb6ZL6zKFG9+GdPKtJJV2YMmoU9elam06WV7UK26j0zhIgEBRYJfkSBLnPhPREQMRkTkIl6vD6lUCqZpQhT5ZrUWLMtCyrSgpzOfhxMGxkwV+4YSEMeQDSulc2GqtqHpBvR09U0yvR5xYmPMgmpLe1DFwtbqLWW25ZhZlSEiohphMCIi1/D5vAAAXdfh9XodHs30siwLholsKDGhG1b2w0Qq/9hCyjCzn0ufTxmZe3PBZuI6s8Jj+9fMnS91Jh7c/prtjCigNKxkqy1tQaXiMsy28MOqDBERzSAMRkTkGl6vDwCgadq0BiPDtArChT0kVAomJcfp6tdXDDIFz5snMJ1HFABFEqBIIjySkH0swCOJ2c/Zc7IIryxCkWV4xMxx4fOe7NcofOyRBMTGRvDyiy/gyvUfQ3d7a75S4/WwKkNERI2FwaiGhqIadv7hiNPDIJoxYtEE/pBuxy9eH4XXn85UR2whZCJolA855YOJUb3LqywBKA0VspANHQI8YuZYkQT4FbEodBSHkIkgUxxMMqGmTNDJHtd6VbLDh2MYkmJY1hVEc7O/pt+LiIjIzRiMaujAcBy3PPLa5BcSUYFFePaVOFR5vGwIKQwVqiwipJYPFdVCjVJSUSm9XhbRGBUTF65KR0RE5AQGoxpavbgV+27/sNPDIJoxDMPAN75+J3rXrsXSpUudHk5DyMWihgiBREREVXA2LBG5hiRJUFUVmsa9jIiIiKi+WDEiIlfx+XzQkkmnh9E4sq10rBgREdHximlpDEY0DEWT2c8ahrLHR8YSOMvpAZ4gBiMichWf348kg1HdcIYRERHl6GkTwzEtH3YGo0kMRTQMZoPPYDSJoaiGuGbY7mvyyegMqegKebGo3Q8cc+gPcJIYjIjIVQJ+P8YZjOqHFSMiolnPsiyMJFIYjGSCTT74FB0fjeu2+xRZRFdIzYSesBenzQllH0+c6wiq8CmS7XulUisAAB6Pp65/zpPFYEREruL3BzA6Our0MBoGK0ZERDNbXEuXDzsF7W1DUc22wbcgAO1BNR9yzuppQlfIi86wmglC4Uz1p8knT/kXZ4IgQFGU6f5j1gWDERG5ij/AVjonsGJEROQuKcPEcEzHUCSZCTnZ8FNc5Ylpadt9Ia+cr/IsavNj9aIWW4WnK6yiLaBAlrgGWzEGIyJyFb8/wGBUR1a+lc7hgRARNYhcW1u5VrahgmrP0bhu22rOIwnoCnvzVZ73dAVLqjydIRV+hW/vTxT/5ojIVQKBANLpNFKp1IzrTSYiosY2rhsVFyzIh5+oBj1t5u8RBKAtoOSrPGfMa8KHiubxdIZUtPg9rO7XGIMREblKIOAHACSTSQajesj/OpL/2BIRVZI2TByN62Vb2Qrn9EST9ra2oCrnKzw9LT6cs7CgrS2kojPsRXtQgYdtba7AYERErhIIBAAA4+PjCIVCDo9m9svHIuYiImpAlmVhbDw9aZXnaEyDWdTW1hlS0ZltZVvaGbRVd3LhJ6DyrfZMwv9aROQqgUAQAJAcH3d4JA0iN8eIFSMimmWSKaNkHk9xlWcoqkEraGsDMm1tuXBz+pwQPrSso2SJ6mafB6LIn5uzTc2C0aJFi/D222/bzvX19eHmm2+ueE8ymcRNN92EHTt2QNM0rFu3Dv/yL/+Crq6uWg2TiFzG5/NBFEXuZVRvLBkR0QxhmFZmE9LC6k5+8YKJas/YuL2tza9I+XAzr8WH9y1oRld2Wepc8GkPqlBktrU1qppWjG6//XZs3LgxfzxZW8yNN96I//iP/8ADDzyApqYmXHfddfjYxz6G3//+97UcJhG5iCAI8Pv9GGfFqC44w4iI3MKyLESS6bKrtRUeDxe1tcmigI7snJ2usIrz2tvyK7RlglBmieog29poEjV9hYRCIXR3dx/XtWNjY/jhD3+I7du340Mf+hAAYNu2bTjttNPwzDPP4LzzzqvlUInIRYLBIMYTCaeH0Rhyiy+wYkRENaTl29rKb0Kaq/IkU/a2tha/Jz9vZ3l3CB84tb1kHk+rX2FbG02Lmgajr33ta7jjjjuwYMECfOITn8CNN94IWS7/LXfv3o1UKoWLLroof2758uVYsGABdu3aVTEYaZoGTdPyx5FIZHr/EERUd8FgkBWjOplYfIFvKoho6gzTwtG4XrXKMxTRMDqest3n84gTAadJxcr5TSXLU3eG2NZG9VWzYPR3f/d3OPvss9Ha2oqnn34aW7ZsweHDh/Gtb32r7PUDAwNQFAXNzc22811dXRgYGKj4ffr6+rB169bpHDoROSwYDOLYsWNOD6MxFO4eSESUZVkWYlraFnLyj7MbkQ5GNQzHdBgFfW2SKKAjqOTDzepFLWVXawuqMn8hQ64zpWB08803484776x6zeuvv47ly5dj8+bN+XMrV66Eoij47Gc/i76+PqiqemKjLWPLli227xWJRNDT0zNtX5+I6i8YDLFiVCesGBE1Hj1tVlyeeqggCI0XtbU1+z35/XdO7Qrhz5a2ozM8sR9PV0hFa0CBxLY2mqGmFIxuuukmbNiwoeo1S5YsKXt+zZo1SKfTOHDgAJYtW1byfHd3N3Rdx+joqK1qNDg4WHWekqqq0xq0iMh5oVAmGJmmCVFkG0VN5ZbrZjAimvFM08KxhF52wYJ81SeqYTRhb2vzekTbymxnzAtnjgsXMAiqUD2SQ38yovqYUjDq6OhAR0fHCX2jPXv2QBRFdHZ2ln1+1apV8Hg8ePzxx3HFFVcAAPbt24f+/n709vae0PckopkpGMzsZTQ+Pp7f8JVqg410RDNDLDn5JqRHohrSBW1togB0hCbm7axa2JKt7qj54NMVUhHysq2NCKjRHKNdu3bh2WefxQUXXIBQKIRdu3bhxhtvxCc/+Um0tLQAAA4ePIgLL7wQP/7xj7F69Wo0NTXh2muvxebNm9Ha2opwOIzrr78evb29XJGOqMGEwmEAQCKRYDCqNVaMiBylp00cieXCTcE8nqLjhG7Y7mvyyfkqzykdAfQuabXN4+kKe9HGtjaiKalJMFJVFTt27MBXvvIVaJqGxYsX48Ybb7TNBUqlUti3bx8SBUvyfvvb34YoirjiiitsG7wSUWPJ7XmW4JLdNcc5RkS1YZoWRhJ6PuQULliQr/pEkzgWt7e1qbJoCzcr5oRLqjydIRVetrURTbuaBKOzzz4bzzzzTNVrFi1aBKtoNSSv14t77rkH99xzTy2GRUQzhNfrhSzLSMTjTg+FiKhETCu/CelQwfGRmIaUYW9rawuq+ZDzvp4mdIa6CpaozmxE2uRjWxuRU7gFMBG5jiAICIVCrBjVgcVWOqK8lGHiSFQrvxFpwZyeuGZvawt75fw8nkVtAaxZ3DqxRHV2Hk9bQIEscTEZIjdjMCIiVwqFw4izYlR7DEbUACzLwkgiVXUT0sGIhmMJ3ba1l5Jta8tVdJZ3h2x78XSFvegIKfArfDtFNBvw/2QicqVwKIzBwcqbO9P04Kp0NNMl9HTFBQtyx0NRe1ubIADtASUTesJenDmvCRedppZsRNrs8/CXBkQNhMGIiFwpHA7jT3960+lhzHpspSO3Shkmjsb0/N47lYJPTEvb7guqcr6is7DNh3MXtUxUeLLBpy2owMO2NiIqwmBERK4Ubgpzk9c6YSiierIsC6PjqYqbkOYWMBiO29vaPJKQbWvzoius4tTOYH7Bglzw6QypCKh8a0NEJ4Y/PYjIlcLhJliWhUQikd/wlWrAYjMdTZ9x3Sg/j6egyjMU1aCnTdt9bQElH27OmNdUMo+nM6Sixc+2NiKqLQYjInKlcHaT13gsxmBUQ5Zl8c0mTSptmDga1ytWeXLHkaS9rS2gStkWNi/mt/iwakFzfj+eXPBpD6pQZFaFich5DEZE5EpNTU0AgFg8ji6HxzLbMRg1LsuyMDaeLrtgQeFGpEdjGsyC4qIsCraqzpJT2spWeYJsayOiGYQ/sYjIlTweD3w+H5fsrrHijbZp9kimKrS1FS1goBW1tbUGPJl5OyEVp80J4fz3tKMz7M1vTNoVUtHiVyCKDNRENLswGBGRazU1NSEWizk9jFnNAitGM41hWhiOld+EdKhgTs/YuL2tza9I+QUK5jT5cNb8ZnSFVdsCBh1sayOiBsZgRESu1dTcjLHRUaeHMbtxjpFrWJaFaDJd0MKWzLeyFVZ9hsu0tXUUbEK6ur0FXSFvvrqTm9MTUCX+tyYiqoLBiIhcq7mpGQfffdfpYcxqbKSrDy3X1lZY1SmzclsyZW9ra/Z7MuEmpGJZVwh/vrS9ZB5PW4BtbURE04HBiIhcq6m5CfF4nHsZ1RIrRifFMC0ci+vZwGNfsGCoYGPS0UTKdp/XI+ZXZutqUnHm/HBJlaczqEL1SA79yYiIGg+DERG5VnNzC/cyqjEu112eZVmIael8RafS8tRHYjqMgr42SRTQHlSy4caLcxe2FKzWNrFEdcgr8++diMhlGIyIyLWam5sBANFolMGoRjJv6RvrDbqeNiu2sg0VbEKa0A3bfc0+T2bxgrCKpZ1BvH9pe8kS1W0BBRLb2oiIZiQGIyJyrdwmr1yZroYsC7OlcGGaFo4l9JLKTnGVZ6SorU2VRVu4OX1uGF0Fc3i6wio6Qiq8bGsjIprVGIyIyLVkWUYoFEIsGnV6KLPWTFmuO5ZfrS1pX8CgYOW2I1EN6YK2NlEA2oMTq7WdvaDZFnZyQSjMtjYiIgKDERG5XHNLC6IMRjXj9BwjPW3iSKxgeeoy83gGI6VtbWGvnJ+3s6QjgPOWtOaXpc4tYNAWUCBLXLSDiIiOD4MREblaa0sr3n33HaeHMavVIhiZpoXR8VTZVrbCOT3H4va2NkUWM5WcbDXntO5wQXUnE4Q6Qyp8CtvaiIhoejEYEZGrtbS04LXXXnW8sjFbncjfa1wrvwnpULbVLbd4QcqYaGsTBKA9oKAz28p2Vk8TOkOdJa1tzT4P/zsTEZEjGIyIyNWaW1qQSqWgaRq8Xq/Tw5l9LAu5VelShonhmG6r7JSr8sQ1e1tbyCvnqzwL2/xYvag1386WCz7tQba1ERGRuzEYEZGrtbS0AMgs2c1gNDnDtBDXTcR1AzHdyD42EdMMxLPHsYLPA8MyRhIL8e9ffxJH43omJ2V5JCG/QEFnSMWy7qDtOFfl8Sv8p4SIiGY+/mtGRK6WC0aRSAQdHR0Oj6a2TMvCeMpETDPzISYTcCaOMwHHHm7y12kGkmmr4tf3SAKCioiAIiGgiAiqEnySBUVO4oJzT7et1NYZUtHiZ1sbERE1jpoEoyeffBIXXHBB2eeee+45nHvuuWWfO//887Fz507buc9+9rO47777pn2MRDQzKIqCQDCIaCTi9FCqsiwLWtqyBZVqQSZ3vrCKk9BNVIo1koiJQJP9HFAk9DQpCChSJvCoki34BBQJQXXiWCnTyrbnpZdw4MAgNl1wSm3/goiIiFyuJsFo7dq1OHz4sO3crbfeiscffxznnHNO1Xs3btyI22+/PX/s9/trMUQimkFaW1sRqfGS3bphlg00+YqNNlG5KazgFB4bZvmvLQDwFwWaoCqiK+RBQFHz54ufLwxCqiywekNERFRDNQlGiqKgu7s7f5xKpfDII4/g+uuvn/Qfdr/fb7uXiKittRX9/f0Vny+cV1Ouvaxy69nEPbpRuQXN5xEnAkv2c4tPRk+ThIBaFGiKWtUCigifR4TIUENERORqdZlj9Itf/AJHjx7FNddcM+m1P/3pT/GTn/wE3d3duOyyy3DrrbdWrRppmgZN0/LHERe12xw4GsePd1V+M0dEx2dw0I93B8N47Gf/i6QhIGkKGDeQeWwI0M3KoUMWLHglCz7JglcCvJIFr2ghJFnoUACvL/O8N/e8mLs286FKgDRZptGzH1nj2Y/hafiz19qR4ZkwSiIiotqrSzD64Q9/iHXr1mH+/PlVr/vEJz6BhQsXYu7cuXj55ZfxxS9+Efv27cODDz5Y8Z6+vj5s3bp1uoc8LWKagRf7R50eBtGMp+sC4mIIyrgBr2giJJpo95jwqhZU0cx8CNnPYsE50YQ8lUKNmf1IZw617MdsJksSzjj7bKeHQURE5DjBsqzK/SNFbr75Ztx5551Vr3n99dexfPny/PG7776LhQsX4uc//zmuuOKKKQ3uiSeewIUXXoj9+/fjlFPKTwwuVzHq6enB0JFhhMPhKX0/IiIiIiKaPSKRCDo72jE2NjZpNphSxeimm27Chg0bql6zZMkS2/G2bdvQ1taGv/zLv5zKtwIArFmzBgCqBiNVVaGq6pS/NhERERERUc6UglFHR8eU9hGxLAvbtm3DVVddBY/HM+XB7dmzBwAwZ86cKd9LRERERER0vEo3tZhGTzzxBN566y185jOfKXnu4MGDWL58OZ577jkAwJtvvok77rgDu3fvxoEDB/CLX/wCV111FT7wgQ9g5cqVtRwmERERERE1uJouvvDDH/4Qa9eutc05ykmlUti3bx8SiQSAzBLfjz32GO6++27E43H09PTgiiuuwC233FLLIRIREREREU1t8YWZIBKJoKmpiYsvEBERERE1uKksvlDTVjoiIiIiIqKZgMGIiIiIiIgaXl02eK2nXGdgNBp1eCREREREROSkXCY4ntlDsy4Y5f7wpyxZ7PBIiIiIiIjIDaLRKJqamqpeM+sWXzBNE4cOHUIoFIIgCE4PhwpEIhH09PTgnXfe4cIYVIKvD6qErw2qhq8PqoSvDQIylaJoNIq5c+dCFKvPIpp1FSNRFDF//nynh0FVhMNh/oCiivj6oEr42qBq+PqgSvjaoMkqRTlcfIGIiIiIiBoegxERERERETU8BiOqG1VVcdttt0FVVaeHQi7E1wdVwtcGVcPXB1XC1wZN1axbfIGIiIiIiGiqWDEiIiIiIqKGx2BEREREREQNj8GIiIiIiIgaHoMRERERERE1PAYjqot/+qd/wtq1a+H3+9Hc3Fz2mv7+flx66aXw+/3o7OzEF77wBaTT6foOlBxxzz33YNGiRfB6vVizZg2ee+45p4dEDnjqqadw2WWXYe7cuRAEAQ8//LDtecuy8OUvfxlz5syBz+fDRRddhD/+8Y/ODJbqqq+vD+eeey5CoRA6Oztx+eWXY9++fbZrkskkNm3ahLa2NgSDQVxxxRUYHBx0aMRUL/feey9WrlyZ38S1t7cXv/nNb/LP83VBU8FgRHWh6zrWr1+Pz33uc2WfNwwDl156KXRdx9NPP41/+7d/w/33348vf/nLdR4p1dvPfvYzbN68GbfddhtefPFFnHXWWVi3bh2GhoacHhrVWTwex1lnnYV77rmn7PNf//rX8c///M+477778OyzzyIQCGDdunVIJpN1HinV286dO7Fp0yY888wzePTRR5FKpfDhD38Y8Xg8f82NN96IX/7yl3jggQewc+dOHDp0CB/72MccHDXVw/z58/G1r30Nu3fvxgsvvIAPfehD+Ku/+iu8+uqrAPi6oCmyiOpo27ZtVlNTU8n5X//615YoitbAwED+3L333muFw2FL07Q6jpDqbfXq1damTZvyx4ZhWHPnzrX6+vocHBU5DYD10EMP5Y9N07S6u7utb3zjG/lzo6Ojlqqq1r//+787MEJy0tDQkAXA2rlzp2VZmdeCx+OxHnjggfw1r7/+ugXA2rVrl1PDJIe0tLRY//qv/8rXBU0ZK0bkCrt27cKZZ56Jrq6u/Ll169YhEonkf+tDs4+u69i9ezcuuuii/DlRFHHRRRdh165dDo6M3Oatt97CwMCA7bXS1NSENWvW8LXSgMbGxgAAra2tAIDdu3cjlUrZXh/Lly/HggUL+PpoIIZhYMeOHYjH4+jt7eXrgqZMdnoARAAwMDBgC0UA8scDAwNODInqYHh4GIZhlP1v/8Ybbzg0KnKj3M+Bcq8V/oxoLKZp4oYbbsD73/9+nHHGGQAyrw9FUUrmsPL10RheeeUV9Pb2IplMIhgM4qGHHsKKFSuwZ88evi5oSlgxohN28803QxCEqh98c0tERNNp06ZN2Lt3L3bs2OH0UMglli1bhj179uDZZ5/F5z73OVx99dV47bXXnB4WzUCsGNEJu+mmm7Bhw4aq1yxZsuS4vlZ3d3fJSmS5VWO6u7tPaHzkfu3t7ZAkqWSFoMHBQf53J5vc62FwcBBz5szJnx8cHMR73/teh0ZF9XbdddfhV7/6FZ566inMnz8/f767uxu6rmN0dNRWHeDPksagKAqWLl0KAFi1ahWef/55fOc738HHP/5xvi5oSlgxohPW0dGB5cuXV/1QFOW4vlZvby9eeeUV20pkjz76KMLhMFasWFGrPwI5TFEUrFq1Co8//nj+nGmaePzxx9Hb2+vgyMhtFi9ejO7ubttrJRKJ4Nlnn+VrpQFYloXrrrsODz30EJ544gksXrzY9vyqVavg8Xhsr499+/ahv7+fr48GZJomNE3j64KmjBUjqov+/n4cO3YM/f39MAwDe/bsAQAsXboUwWAQH/7wh7FixQp86lOfwte//nUMDAzglltuwaZNm6CqqrODp5ravHkzrr76apxzzjlYvXo17r77bsTjcVxzzTVOD43qLBaLYf/+/fnjt956C3v27EFraysWLFiAG264Af/4j/+IU089FYsXL8att96KuXPn4vLLL3du0FQXmzZtwvbt2/HII48gFArl54c0NTXB5/OhqakJ1157LTZv3ozW1laEw2Fcf/316O3txXnnnefw6KmWtmzZgo985CNYsGABotEotm/fjieffBL/+Z//ydcFTZ3Ty+JRY7j66qstACUfv/vd7/LXHDhwwPrIRz5i+Xw+q7293brpppusVCrl3KCpbr773e9aCxYssBRFsVavXm0988wzTg+JHPC73/2u7M+Jq6++2rKszJLdt956q9XV1WWpqmpdeOGF1r59+5wdNNVFudcFAGvbtm35a8bHx62//du/tVpaWiy/32/99V//tXX48GHnBk118elPf9pauHChpSiK1dHRYV144YXWf/3Xf+Wf5+uCpkKwLMuqfxwjIiIiIiJyD84xIiIiIiKihsdgREREREREDY/BiIiIiIiIGh6DERERERERNTwGIyIiIiIiangMRkRERERE1PAYjIiIiIiIqOExGBERERERUcNjMCIiIiIioobHYERERERERA2PwYiIiIiIiBoegxERERERETW8/wfd+pwmLIB9kgAAAABJRU5ErkJggg==", "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(index=1, thickness=7, radius=50, material=\"SF2\", is_stop=True)\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 for both surfaces, at surface index 1 and 2:" ] }, { "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)" ] }, { "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 │ 9.52964 │ 0 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════╤═════════╤═════════╤════════════════════╕\n", "│ │ Operand Type │ Target │ Weight │ Value │ Delta │ Contribution (%) │\n", "╞════╪════════════════╪══════════╪══════════╪═════════╪═════════╪════════════════════╡\n", "│ 0 │ rms spot size │ 0 │ 1 │ 3.08701 │ 3.08701 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════╧═════════╧═════════╧════════════════════╛\n", "╒════╤═════════════════╤═══════════╤═════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪═════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 50 │ │ │\n", "│ 1 │ radius │ 2 │ -1000 │ │ │\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: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH\n", " success: True\n", " status: 0\n", " fun: 0.0028863713913869363\n", " x: [-7.666e-01 -1.100e+01]\n", " nit: 4\n", " jac: [ 3.710e-02 -1.529e-05]\n", " nfev: 51\n", " njev: 17\n", " hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimizer.optimize()" ] }, { "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 │ 0.00288637 │ 99.9697 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════╤══════════╤══════════╤════════════════════╕\n", "│ │ Operand Type │ Target │ Weight │ Value │ Delta │ Contribution (%) │\n", "╞════╪════════════════╪══════════╪══════════╪══════════╪══════════╪════════════════════╡\n", "│ 0 │ rms spot size │ 0 │ 1 │ 0.053725 │ 0.053725 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════╧══════════╧══════════╧════════════════════╛\n", "╒════╤═════════════════╤═══════════╤═══════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪═══════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 23.3435 │ │ │\n", "│ 1 │ radius │ 2 │ -999.947 │ │ │\n", "╘════╧═════════════════╧═══════════╧═══════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "problem.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Draw lens:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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0aNHsWfPHtTW1sLv9+P222/HP/3TP2HJkiVoa2vDvffei6amJlxzzTWlWzTNia1bt+LRRx/Fz3/+czgcDq0+RJIkWCwWSJKET3/609i2bRtqa2vhdDpx2223YdOmTdi4cWOJV0/FdPfdd+ODH/wg/H4/YrEYHn30UTz33HP47W9/y8cFnb1St8Wj6nDjjTcqAE767/e//712zbFjx5QPfvCDisViUerr65U777xTSafTpVs0zZlvfOMbit/vV0RRVNavX6+8+OKLpV4SlcDvf//7aX9O3HjjjYqiqC277733XsXj8Sgmk0m5/PLLlYMHD5Z20TQnpntcAFB27NihXTMxMaH89V//tVJTU6NYrVblz//8z5WBgYHSLZrmxKc+9SmltbVVEUVRcbvdyuWXX6787ne/0z7PxwWdDUFRFGXu4xgREREREVH5YI0RERERERFVPQYjIiIiIiKqegxGRERERERU9RiMiIiIiIio6jEYERERERFR1WMwIiIiIiKiqsdgREREREREVY/BiIiIiIiIqh6DERERERERVT0GIyIiIiIiqnoMRkREREREVPUYjIiIiIiIqOr9/8Spc4Yl5iWOAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens.draw(num_rays=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Undo optimization:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "optimizer.undo()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Draw lens:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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m7Bhw4aq1yxZsuS4vlZ3d3fJSmS5VWO6u7tPaHzkfu3t7ZAkqWSFoMHBQf53J5vc62FwcBBz5szJnx8cHMR73/teh0ZF9XbdddfhV7/6FZ566inMnz8/f767uxu6rmN0dNRWHeDPksagKAqWLl0KAFi1ahWef/55fOc738HHP/5xvi5oSlgxohPW0dGB5cuXV/1QFOW4vlZvby9eeeUV20pkjz76KMLhMFasWFGrPwI5TFEUrFq1Co8//nj+nGmaePzxx9Hb2+vgyMhtFi9ejO7ubttrJRKJ4Nlnn+VrpQFYloXrrrsODz30EJ544gksXrzY9vyqVavg8Xhsr499+/ahv7+fr48GZJomNE3j64KmjBUjqov+/n4cO3YM/f39MAwDe/bsAQAsXboUwWAQH/7wh7FixQp86lOfwte//nUMDAzglltuwaZNm6CqqrODp5ravHkzrr76apxzzjlYvXo17r77bsTjcVxzzTVOD43qLBaLYf/+/fnjt956C3v27EFraysWLFiAG264Af/4j/+IU089FYsXL8att96KuXPn4vLLL3du0FQXmzZtwvbt2/HII48gFArl54c0NTXB5/OhqakJ1157LTZv3ozW1laEw2Fcf/316O3txXnnnefw6KmWtmzZgo985CNYsGABotEotm/fjieffBL/+Z//ydcFTZ3Ty+JRY7j66qstACUfv/vd7/LXHDhwwPrIRz5i+Xw+q7293brpppusVCrl3KCpbr773e9aCxYssBRFsVavXm0988wzTg+JHPC73/2u7M+Jq6++2rKszJLdt956q9XV1WWpqmpdeOGF1r59+5wdNNVFudcFAGvbtm35a8bHx62//du/tVpaWiy/32/99V//tXX48GHnBk118elPf9pauHChpSiK1dHRYV144YXWf/3Xf+Wf5+uCpkKwLMuqfxwjIiIiIiJyD84xIiIiIiKihsdgREREREREDY/BiIiIiIiIGh6DERERERERNTwGIyIiIiIiangMRkRERERE1PAYjIiIiIiIqOExGBERERERUcNjMCIiIiIioobHYERERERERA2PwYiIiIiIiBoegxERERERETW8/wfd+pwmLIB9kgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens.draw(num_rays=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print optimization problem info:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "╒════╤════════════════════════╤═══════════════════╕\n", "│ │ Merit Function Value │ Improvement (%) │\n", "╞════╪════════════════════════╪═══════════════════╡\n", "│ 0 │ 9.52964 │ 0 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════╤═════════╤═════════╤════════════════════╕\n", "│ │ Operand Type │ Target │ Weight │ Value │ Delta │ Contribution (%) │\n", "╞════╪════════════════╪══════════╪══════════╪═════════╪═════════╪════════════════════╡\n", "│ 0 │ rms spot size │ 0 │ 1 │ 3.08701 │ 3.08701 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════╧═════════╧═════════╧════════════════════╛\n", "╒════╤═════════════════╤═══════════╤═════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪═════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 50 │ │ │\n", "│ 1 │ radius │ 2 │ -1000 │ │ │\n", "╘════╧═════════════════╧═══════════╧═════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "problem.info()" ] } ], "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 }