{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optiland Torch Module - RMS Spot Size\n", "\n", "This notebook demonstrates how to use Optiland's `OpticalSystemModule` to optimize a simple lens system with PyTorch. We'll adjust the curvature of two lens surfaces to minimize the Root Mean Square (RMS) spot size on the image plane, effectively sharpening the focus." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import torch\n", "import matplotlib.pyplot as plt\n", "import optiland.backend as be\n", "from optiland import optic, optimization\n", "from optiland.ml import OpticalSystemModule\n", "\n", "be.set_backend(\"torch\") # Set the backend to PyTorch\n", "be.grad_mode.enable() # Enable gradient tracking" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lens = optic.Optic()\n", "lens.surfaces.add(index=0, thickness=be.inf)\n", "lens.surfaces.add(index=1, thickness=7, radius=1000, material=\"N-SF11\", is_stop=True)\n", "lens.surfaces.add(index=2, thickness=30, radius=-1000)\n", "lens.surfaces.add(index=3)\n", "lens.set_aperture(aperture_type=\"EPD\", value=15)\n", "lens.fields.set_type(field_type=\"angle\")\n", "lens.fields.add(y=0)\n", "lens.wavelengths.add(value=0.55, is_primary=True)\n", "_ = lens.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Formulate the Optimization Problem\n", "\n", "Here, we define the goal of our optimization. We specify what we want to minimize (the **operand**) and which parameters we can change (the **variables**)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "problem = optimization.OptimizationProblem()\n", "input_data = {\n", " \"optic\": lens,\n", " \"surface_number\": -1,\n", " \"Hx\": 0, \"Hy\": 0,\n", " \"num_rays\": 5,\n", " \"wavelength\": 0.55,\n", " \"distribution\": \"hexapolar\",\n", "}\n", "problem.add_operand(\"rms_spot_size\", target=0, weight=1, input_data=input_data)\n", "problem.add_variable(lens, \"radius\", surface_number=1)\n", "problem.add_variable(lens, \"radius\", surface_number=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define PyTorch module in Optiland\n", "\n", "The `OpticalSystemModule` wraps our Optiland problem, making it compatible with PyTorch's ecosystem. This allows us to use standard PyTorch optimizers and training loops." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "model = OpticalSystemModule(lens, problem)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define PyTorch Adam Optimizer and pass model parameters" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "optimizer = torch.optim.Adam(model.parameters(), lr=0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimize with PyTorch\n", "\n", "This is a standard PyTorch training loop. In each step, we calculate the loss (RMS spot size), compute gradients using backpropagation, and update the lens radii with the optimizer." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Store loss values for plotting\n", "losses = []\n", "\n", "# Run the optimization for 250 steps\n", "for step in range(250):\n", " optimizer.zero_grad() # Reset gradients from the previous step\n", " loss = model() # Forward pass: calculate the loss (merit function value)\n", " loss.backward() # Backward pass: compute gradients\n", " optimizer.step() # Update lens radii based on gradients\n", " model.apply_bounds() # (Optional) Apply any defined parameter constraints\n", " losses.append(loss.item()) # Record the loss for this step" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "╒════╤════════════════════════╤═══════════════════╕\n", "│ │ Merit Function Value │ Improvement (%) │\n", "╞════╪════════════════════════╪═══════════════════╡\n", "│ 0 │ 0.00722632 │ 0 │\n", "╘════╧════════════════════════╧═══════════════════╛\n", "╒════╤════════════════╤══════════╤══════════════╤══════════════╤══════════╤═════════╤═════════╤════════════════╕\n", "│ │ Operand Type │ Target │ Min. Bound │ Max. Bound │ Weight │ Value │ Delta │ Contrib. [%] │\n", "╞════╪════════════════╪══════════╪══════════════╪══════════════╪══════════╪═════════╪═════════╪════════════════╡\n", "│ 0 │ rms spot size │ 0 │ │ │ 1 │ 0.085 │ 0.085 │ 100 │\n", "╘════╧════════════════╧══════════╧══════════════╧══════════════╧══════════╧═════════╧═════════╧════════════════╛\n", "╒════╤═════════════════╤═══════════╤══════════╤══════════════╤══════════════╕\n", "│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │\n", "╞════╪═════════════════╪═══════════╪══════════╪══════════════╪══════════════╡\n", "│ 0 │ radius │ 1 │ 49.3595 │ │ │\n", "│ 1 │ radius │ 2 │ -53.7277 │ │ │\n", "╘════╧═════════════════╧═══════════╧══════════╧══════════════╧══════════════╛\n" ] } ], "source": [ "# Display optimization problem information\n", "problem.info()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAEeCAYAAAB4w9/OAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAU6hJREFUeJzt3Ql8lPW1P/4ze2afCdl39j1A2LHuViqKS71c/+UqoJba61ZF+6t6ta3aFq22WpertFXUKrV661bbat1ALSBCQBYBZUkCWVhnkplkMvv/db7PzJhAEhKYmWeWz/v1epjkmZnkYeabZ+bM+Z7zVYTD4TABAAAAAABAXCjj82MAAAAAAACAIcgCAAAAAACIIwRZAAAAAAAAcYQgCwAAAAAAII4QZAEAAAAAAMQRgiwAAAAAAIA4QpAFAAAAAAAQR+p4/rBMFAqFqKmpicxmMykUCrkPBwAAAAAAZMJLDLtcLiopKSGlsvd8FYKsE+AAq7y8XO7DAAAAAACAFLFv3z4qKyvr9XoEWSfAGSy2e8/e2NeQOllGp9NJNputz08SIPtgbEBfMD6gNxgb0BeMD2CcxRo6ZPAJ4wIEWScQnSLID6TFYpH7cOCYk10wGBTPC0520BXGBvQF4wN6g7EBfcH4gK5OVEaEEQIAAAAAABBHCLIAAAAAAADiCEEWAAAAAABAHCHIAgAAAAAAyMYgq6qqShSYHbvdcMMNPd7+ueeeO+62OTk5ST9uAAAAAADILmnTXfDzzz8XHV2itm7dSt/+9rdp3rx5vd6Hu7/s3Lkz9j0WEwYAAAAAgERLmyArPz+/2/cPPPAADR06lM4888xe78NBVVFR0YB+j9frFVtUW1tbrG0nb3L6bO9Ram7tlPUYUm3F7Y6ODjIYOhBAw4DGhsPhIF9nB5m0SjJplGTUKsTXBo2ClBhL/aLRaGjEiBFp+bfH53IeI3Kf0yH1YGxAXzA+gPX3+U+bIKsrn89HL774Ii1ZsqTPF3i3202VlZXiwaipqaFf/epXNHbs2D5/9tKlS+nee+89bj8vPtc1kyaHZz7ZTZ/saZX1GAAyW5h0ihDpFEHKUQalr5VBylFIX0v7gqRThqR9ke9zFCHSKEKUhvHGKfF0dFBlVRWlm3A4RC6XWzzfCkXazJqHJMDYgL5gfEB0MeL+UIQ5JE8zr7zyCs2fP58aGhqopKSkx9usWbOGvv76a6qurqbW1lZ6+OGH6eOPP6Zt27ZRWVnZgDJZ5eXl1HLgoOyLEQeCIUq7JyuBOHhudbaS1WbFooAwoLGx7OmnqbisnKpGjCWXN0guX5Dc3pD0tTdIbl/06xC5I/tcPulrvq4nKgWRSacis05JJi1fRr7mS22Xr3VKcZ10G+lrnTr9xu+Kl16i2bO/QxMmTqR0HB/8wZnNZsO5A7rB2IC+YHxANDYoKiwQ8UVfsUFaZrKeeeYZuuCCC3oNsNjMmTPFFjVr1iwaPXo0LVu2jO6///5e76fT6cR2LP5jkvsPSos/6ONOdhq1knQatezPDaTP2PD7/dThbqOCXCuV2AbeDCcYClN7LAiLBGXeILVFLjkwi+4/6glSncNHbp+03+PvOUDTqBSRoOybIM2SEw3EVGTO4UBNCsiimxSwqcR95cIzCdL1by967Ol6/JA4GBvQF4wPUPbzuU+7IKu+vp7ef/99eu211wZcPzBp0iTatWtXwo4NAFIf12Oxk81Mq5QKEQDxNlD+YDgScAXJ1flNBu2bAO2brbnNR22RTBpfz/ftSY5acVzwZRGX3YOy7reRAjn+vwAAAED8pV2QtXz5ciooKKALL7xwQPfjeqotW7bQnDlzEnZsAJD6jh49Ii7lmP7LWSe7Xi22gfIGumfPumbMjs2k1Tm83faHeplnbDwuO6aMBGjHBGZ8O86mRaY58v0AAAAgQ4IsngLEQdbChQtJre5+6AsWLKDS0lLRuILdd999NGPGDBo2bJiYP/vQQw+JLNj3v/99mY4eAFKB46iDtFptj9OCUxnXbfGWZ9QM6H5cdsvTFLsGZcdOdYxd5wtSS5s/kmGTsmw9xWecANOEJ9C6T5x0lmMXTam004QyKxl1afWSAgAAkDBp9YrI0wS52cU111xz3HW8v+scSZ4StHjxYmppaSG73U6TJ0+m1atX05gxY5J81ACQSo4ePUpmiyUtW4+fDP5/GrQqsRWaBxaghcK915+tXr+ZfAodvfTZPnpy5R4x9XBUkZmmVNpocoWdJlfaKM+UXoEsAABAVgZZ559/vvhUticrV67s9v0jjzwiNgCArhyOo2Qxm+U+jLTAa4ZFpwweS1vvocJCD8258CLac7idNjQ4aUO9g97ffpCeX9MgblM1yEA1FTaaXGkXwVdlriFrglsAAMhuaRVkAQCcKs5y80LmcGqMJhM5nQ5SKhU0rMAktiumSMtjtLR2Um2Dk9bXO0Tw9fqmJuLPxwYZtSLDFc10jS4yk1qF+i4AAMg8CLIAIGvwQubt7e1iuiCcGpPJRHV763q8rsiaQ3PGF4mNuTr9IujibUO9k37z/tfkC4TEFMaJZVaR6ZpcYaMJ5VYyaPGyBAAA6Q+vZgCQde3bzZguGJcgy+12USAQOK4R0bHMORo6c0S+2BgHWFub2sT0Qt5eWFtPj3+0W9R1jSk2i0wXTy/kqYaDUNcFAABpCEEWAGQNnt4WDRDg1EQfQ175Pjc3d0D31aqVIoDibfHpgykUCtOuQ+5IXZeT/vXlAXpuTX2srou7F0anGVbk6lHXBQAAKQ9BFgBkDV7OgRcmz8nJkftQMifIam0dcJB1LK7rGlFoFtv3ppaLfU1OT7e6rr9ubBR1XfkmLdVEphdy8DWy0IS6LgAASDkIsgAgazgdDhEcIBNy6gwGg7hsbW1NyM8vsenFdlF1sfR7PH7ayJmuSBfDh/71FfmDYVHXVVNuo5pIpovX69Jrj++GCAAAkEwIsgAgazicTkwVjBOVSiUCrUQFWcey6jV01sh8sTGvP0hbmtqotl7Kdi1fXU+Pfbib1EoFjS2xiEwXN9TgKYm5Rm1SjhEAACAKQRYAZFUmq7ikRO7DyBhGo0nUZMlBp1GJ6YK8/YCkuq6vD7lFwMWB1z+2ttCzq6W6riF5RmmR5Mg0wxIrmmkAAEBiIcgCgKwQCoXI5XLRcGSy4sZo5EyWk1IB13WNLDSL7b+mVYh9jU6PaKSxoUHqYvjKhkaxv8Cso/FFBpoxLJ+mVuWKWjDubAgAABAvCLIAICu43W4KBoOYLhhHRqOR9u/fT6mq1KYX28UTpLouZwev1+UQ2a51ew7Tr9/9mvyhMBl1KppULjXS4ExXdZmVcjSo6wIAgJOHIAsAskK0dghBVnyDLM4OhsPhtGgmYjNo6JxRBXTWiDxyOPJIb7LQtmaXyHZx4PXHT+voUW+ANCoFjSuxUE2F1Dqe67rsBtR1AQBA/yHIAoCsCrI4MID4MBiNYhpme3t7WgavnK3i6YK8sSDXdR2U6ro48Prb5mZ65t914rph+UappivSxbDUlpMWgSUAAMgDQRYAZAWuHeL1sXidLIgPY6SNOze/SMcg61hclzWqyCy2K6dXiAzd/khdV3TNrr+sl6ZHFll0sUYafDm8wIS6LgAAiEGQBQBZk8lCFiv+mSzmcnGHwczr2siZqnK7QWyXTpT+f0fbfbRxnzPWxfDdbQcoEAqTOUcdqeuSMl3jSy2iAyIAAGQnBFkAkBXaEGTFnU6nE+tlydXGXQ685ta5owrExjy+IG1ubI11MVz2yV5q9+4SdV3jS63d1uvitb4AACA7IMgCgKzAgUBhYaHch5FxmR5DpPlFttJrVTR9cK7YWCAYoq8OumPNNN7Y1ER/+FSq6xpRYKKaym+6GJbY9DIfPQAAJAqCLADIeFxbw0HW4CFD5D6UjGPQ67M6yDqWWqWkMcUWsV01I1LX5fBIzTQanLRur4Ne/lyq6yq25sQaafDl8HyTWO8LAADSH4IsAMh4Ho+HAoEAmTBdMO70BgO5smi64EnVdeUaxHbZpNJYXRc30uAFkjn4emerVNdlyVGLaYXRhho83VCrVsr9XwAAgJOAIAsAMl60ZijaqAHix2AwUFNjo9yHkXZ1XeeNLhAb6/AFaPP+NqmZRoOTnlq1hzp8QRFgVZdaYpkubqxhQV0XAEBaQJAFABlP6n6HNbISFWS53e60WZA4FRm0apoxJFds0bquHQe4rovX63LQXzc2ioYa/PByXRdnuqJdDIusOXIfPgAA9ABBFgBkRSZLqVSKdbIgvvR6vZiK6e3spBw9GjnEq65rXIlFbAtnVooAtuHoN3Vdq3cfoRXr9onb8qLIXdfrGppnRF0XAEAKQJAFABmPGzNwxgWZlsQ0vmAutxtBVoLwuK0cZBDb5TVSXddhtzdS1yV1Mfz7lhYKhsJk02toEgdcFVIXw7ElFtR1AQDIAEEWAGRNkAWJaXzB2t1uys/Pl/twskaeSUfnjykUG2v3cl1Xayzb9eTK3eTxh0gn6rqsUhfDSjtNKreSOQd1XQAAiZY2QdbPf/5zuvfee7vtGzlyJO3YsaPX+7z66qt0zz33UF1dHQ0fPpwefPBBmjNnThKOFgBSCXe/iwYDEP/pgozrskA+Rp2aZg4dJDbmD4Zoe4uLaiOLJL+yYT89/fFe4pmEIwvNsaCLM16FFkyjBQDI2iCLjR07lt5///3Y92p174e/evVq+t73vkdLly6liy66iFasWEGXXnop1dbW0rhx45J0xACQKpmsoqIiuQ8jI/F5WKPRkLsdQVYq0aikDBZvi2ZJdV11RzpEloubaXzy9RF68TOprqvMro810uDga0ieEVNrAQCyKcjiF/P+vlH63e9+R9/5znfoxz/+sfj+/vvvp/fee4+eeOIJevrpp3u9n9frFduxrZ9DoZDYIHXw88FvHPC8wInGBmdZOOPC+yBxHQbT5W8xW88dlbl6sX13YrH4/pArUtcV2d76oplCYRJ1XZzhktbsstHoInPW1HVl69iA/sH4ANbf5z+tgqyvv/6aSkpKRIewmTNniixVRUVFj7dds2YNLVmypNu+2bNn0xtvvNHn7+Cfeey0ROZ0OikYDJ7i/wDiKRwOkcvFn55z6+jseAMAAx8bgUCQdDodaXU6am9vl/vQMpLFYiFPRwc5HA5KBzh3fPMGYFqJlqaVFBDNKKB2X5C2NbfTF01usT320S7yBsKkUytobJGRJpSYqbrEROOKjWTUqigTYWxAXzA+IDo7JqOCrOnTp9Nzzz0n6rCam5tFIHT66afT1q1byWw2H3f7lpYWKiyUCoKj+Hve35c777yzW3DGmazy8nKy2WzijQSk2icJCvHccHtugJ7GBn9AwlkWs8mEdbIShP/+uLug3W6ndIBzR8/42SsrzKPZEylW1/VlsyuW7Xpj62Favq5Z1HWNKjLHsl28FZh1lAkwNqAvGB/AVCpVZgVZF1xwQezr6upqEXRVVlbSK6+8Qtdee23cfg9/4s3bsfiPCX9QqYfrBvDcQF9jI5q9MhhRZ5Io3Lr98KFDafV3iHPHiemUSppUYRcbv8ryNKk9hzuotsEhuhiu/Oow/SlS11WRq4/VdHFDjcGD0nfJBIwN6AvGByj7+dynTZB1LP4UYcSIEbRr164er+farQMHDnTbx9+j+B0gu3Br8a5d8CD++LHFVMzseHM5NN8otnmTy8S+A22dIssV7WL45hdNoq4r18h1XZFFkqvsoq6Lm3EAAGSLtA2yePrP7t276aqrrurxeq7Z+uCDD+iWW26J7ePGF7wfALIHd72LdsCDxOA62c7OTjGVBp/uZhdu/z5nXJHYmKvTT5v2tca6GD7yAdd1hUivUdKEMl4gWcp0TSizirbzAACZKm3OcLfffjvNnTtXTBFsamqin/3sZ2JOJLdpZwsWLKDS0lLRuIL96Ec/ojPPPJN+85vf0IUXXkgvv/wyrV+/nn7/+9/L/D8BgGRqd7cji5WEIIt1dHSQyWSS+3BARrzQ8enD88TGfAGu62qLLZLMbeOfWLmHVEqFyG6J6YWRaYa8wDIAQKZImyBr//79IqA6cuQI5efn07e+9S1au3at+Jo1NDR0+wR11qxZYm2su+++m+666y6xGDF3FsQaWQDZl8lCkJWcIIunDCLIgq649fvEcpvYvi8aB3BdV7sIuDjwen/7QXp+TYO4bdUgg2iiMYUXSa60UWVu+tZ1AQCkTZDFmai+rFy58rh98+bNExsAZC9+4x8NAiAxoo8vt3EH6ItSqaBhBSaxXTFFqutqaeW6LgdtEHVdTnp9UxPxknZ5Jm2kg6EUdHHmS426LgBIE2kTZAEAnGyQlS6txTNhuiDAQBVZc+jC8cViY20eP23c5xSt4znb9Zv3vxbTDg1aFU0ss4qaLg66uK7LoMXbGABITTg7AUBG62hvp+Ji6c0bJAY3FuEaWQRZEA8WvYbOHJEvNsYB1tYmqa6rtt5BL6ytp8c/2i3qusYUm6XphdzFsNJOuUat3IcPACAgyAKAjMXr+vAbfz2mCyYU181wNqvDgyALElPXFV30mE4fLOq6dh1yRzoYOundbQdo+ep6cdvBeQbRSCPaxbDcrkddFwDIAkEWAGQsb6dHBFo6BFkJx4u4ezo8ch8GZEld14hCs9i+N7Vc7GtyemLTCzn4+uvGRlHXlW/WRbJcUhfDkYUm1HUBQFIgyAKAjNUeedOPxhfJCbKQyQK5lNj0YruoWpoa3Mp1XZzpiqzX9et3vyJ/MExGnYomldmoJhJ0cV2XXquS+/ABIAMhyAKAjBWtEUKQlXhazmR5kMmC1GDVa+iskfliY15/kLY0tVFtvZTt4umFj324m9RKBY0tscRquiaVWeQ+dADIEAiyACBjeSKZlRwdFjlNRibLcdQh92EA9EinUYkGGbz9gKS6rq8PuSPNNJz0j60t9GykrqsqN4emVg2iKVVSF8MyG+q6AGDgEGQBQMbiGiF+c8RZFkhCTRYyWZBGdV0jC81i+69pFWJfo9ND6+uO0pqvD4gW8q/WNor9BVzXVRlZJLnCJmrBuLMhAEBfEGQBQMbiGiF+849PoRNPp9VSZyeCLEhfpTY9FVcX07fKc8Taem2dQarlRZIjXQwfeGenqOsy6dQ0qTyyXleFjarLrJSjQV0XAHSHIAsAMjqTxUEWJB5nCwOBgNh43SyAdGczaOicUQViY51c19XYKgIunmb4x0/r6FFvgDQqBY0rsVBNpHX8pAob2Q1Yrwsg2+GVEAAyVmdnJ4KsJNFqtbHH3GQyyX04AHHH2aqpVbliY0Gu6zoo1XVx4PW3zc30zL/rxHXD8o1SpivSxbDUloOMOkCWQZAFABnd+CL65h8SKxrM8pRBBFmQDbgua1SRWWxXTq8Qa/Ltd3pEwBVds+sv6/eL2xZZdLHphXw5vMCEui6ADIcgCwAyFjdiyNHr5T6MrMtkAWQjzlSV2w1iu3Riidh3tN0nmmhEuxi+u+0ABUJhMueoqab8m0WSx5daRAdEAMgcCLIAIGPxG36rzSb3YWRXkOVBkAUQlWvU0rmjCsTGPL4gbY7UdW1ocNCyT/ZSu3eXqOsaX2oVmS7uYsh1XbzWFwCkLwRZAJDRmSzuegfJC7K8Xq/chwKQsvRaFU0fnCs2FgiG6KsudV1vbGqiP3wq1XWNKDBJma7INMMSG7LyAOkEQRYAZKZwWLzhR01WcqhUKlIqlZguCDAAapWSxhRbxLZgRqWo69rn4LouqXX82r1H6c+fS3VdJdYcqolML+QuhsPyTWK9LwBITQiyACAjBYIBCoVCWIg4ScSiz1otMlkAp/h3VJFrENtlk0pjdV3RRhocfL2zVarrsnBdV8U3mS6ebqhVK+X+LwBABIIsAMhIPp9PXCKTlTwaBFkACanrOm90gdhYhy9AX+yX6ro4+Hpq1R7q8AVFgFVdahGZLp5mOKncRhbUdQHIBkEWAGQkP4KspNNqNOT1YrogQCIZtGqaOWSQ2KJ1XTsOuKUphvUO+uvGRtFQg5fl4roubqQR7WJYZM2R+/ABsgaCLADISD6fP/bGH5JDI4IsKbgFgOTVdY0rsYht4UyprqvhqEeaXtjgpH/vPkIvrdsnbsuLIkenF3LwNSTPiLougARBkAUAGT1dkKewQXKoOcjyYboggNx1XZWDDGK7vEaq6zrs9nap63LS37e0UDAUJpteI9rFT4lkusaWWFDXBRAnCLIAICP5AwFxiemCycNZQx9qsgBSTp5JR+ePKRQba/dG67qkbNcTH+0mjz9EOrWSJpRZYw01eMFkUw7eKgKcjLT5y1m6dCm99tprtGPHDtLr9TRr1ix68MEHaeTIkb3e57nnnqOrr7662z6dTocWwwBZwO/3iU90ubU4JC+T5XK55T4MADgBo05Ns4YOEhvzB0O0vcVFtfVStuuVDfvp6Y/3Es8kHFlo7rZeV6EFdV0AGRVkrVq1im644QaaOnUqBQIBuuuuu+j888+nL7/8koxGY6/3s1gstHPnztj3/KYLADKf3+cXUwXxN588GrWafJguCJB2NCruTGgV26JZUl1X3ZEOEXDxNMNPvj5CL34m1XWV2fWx6YUcfHFdF86zAGkcZL3zzjvHZakKCgpow4YNdMYZZ/R6P/7DLyoqSsIRAkAq8Qf8aHohQ+OLaC0cAKQvfu80OM8otnmTy8S+gy6u65Jqunia4VtfNFMoTGQzaGKNNPhydDHqugDSKsg6Vmtrq7jMzc3t83Zut5sqKyvFoqQ1NTX0q1/9isaOHdvr7XmNl67rvLS1tYlLvj9vkDr4+eBP2/C8wLF4TPCbfbVaLcYIJIdKrSa/35/yf5M4d0BvMDZ6l2fU0PmjC8QWreva1GW9rt99sIs6AyHK6VrXVWGjieVWMT0xE2B8AOvv869O1//cLbfcQqeddhqNGzeu19txvdazzz5L1dXVIih7+OGHRS3Xtm3bqKxM+mSmp9qve++997j9TqeTgsFgXP8fcGrC4VCk/iNMCgU+NYPuYyMYCIqpxO3t7XIfTtZQKZWUk5NDR48eSem/SZw7oDcYGwMzJldJY3Jz6apJuRQIhmnnoQ76oslNm5vc9OfP99FTkbqu4fkGqi4x0YTINsiYnrMMMD6AuVwuytggi2uztm7dSp9++mmft5s5c6bYojjAGj16NC1btozuv//+Hu9z55130pIlS7plssrLy8lms4n6Lki1TxIU4rlRKnGyg+5jIxDgjEq4z5pNiC/u5MizB4xGk2gylKpw7oDeYGycmvy8XPrWaOlrzvjsPdwhuhfytrbeSa9uOiiuq7DrRT1XNNtVNciQFnVdGB/A+ttQK+2CrBtvvJHefvtt+vjjj3vNRvVVLzBp0iTatWtXr7fhNwY9vTngPyb8QaUePinjuYGe8LQ1jUadFi/cmSK6Jhln/VP9bxLnDugNxkb8DCs0i+2KqeXi+wNtnSLg4i6GGxoc9GakrivXyHVdUk3X5Co7jS4yi2YcqQjjA5T9fO7TJsjiT0Ruuukmev3112nlypU0ePDgAf8MfuHfsmULzZkzJyHHCACpIxAIiposSJ7o480BLgDAsbj9+5xxRWJjrk4/bdrXKmW76h30yAe7yBsIkV7DdV2RRZIr7aLGK1PquiB7qNNpiuCKFSvozTffJLPZTC0tLWK/1WoV62axBQsWUGlpqairYvfddx/NmDGDhg0bJmqqHnroIaqvr6fvf//7sv5fACA53QWNBoPch5FVEGQBwECYczR0+vA8sTFfIERfNreJ1vEceHHb+CdW7iGVUiGyWzzFkLsY8jRDXmAZIJWlTZD11FNPicuzzjqr2/7ly5fTokWLxNcNDQ3dUngOh4MWL14sAjK73U6TJ0+m1atX05gxY5J89ACQbMFAQCyOC8mfp+5HG3cAOAnc+n1iOXcktBF/HM51tXsOt4uAiwOv97cfpOfXNIjbch1XdIFkDr4qc9OjrguyR9oEWf1pw8zTCLt65JFHxAYA2ScQxHRB2TJZgYDchwIAGUCpVNCwApPYrpgi1eG3tHJdV2S9rgYnvbaxkfgtYp5JKwKumgo7Tamy06hCE6lTtK4LsgPegQBAxmayuKU4JD+TFcB0QQBIkCJrDl04vlhsrM3jp437pLW6ONv1m/e/FtMODVoVTSyzStmuSpuo6zJo8bYXkgejDQAyEje6QSYruaKPdwCZLABIEoteQ2eOyBcb4wBra5NU11Vb76AX1tbT4x/tJrVSQWOKzV2mGNop1yh1RAVIBLwDAYCMw2uZ8NbftSwgzjVZCLIAQMa6Lm6MwRudPljUde065I50MHTSu9sO0PLV9eK2g/MMonV8tIthuV2Pui6IGwRZAJBxopkUFTJZSRVtPMQLQQMApEpd14hCs9i+F1mvq8npiU0v5ODrr5G6rnyzLtZIg7sYjiw0i86GACejX+9AlixZMuAffPfdd1Nubu7JHBMAwCkJBqUgS41MVlLxJ8CczcJ0QQBIZSU2vdguqpbqulq5roszXZHA69fvfkX+YJiMOhVNKpOyXBx4jSs2y33okGlB1qOPPkozZ84krbZ/c1c//fRTuvHGGxFkAYBsCxEzTBdMPs4ecj0cAEC6sOo1dNbIfLExrz9IW5raxALJPMXw2dV19LsPA6ThrFiBgaYPyROBF09JRF0X9Kbfc2lef/11Kigo6NdtebFgAAC5RDMpSgRZSccdHYORIBcAIB3pNCoxXZA3xnVdXx100/q6o7R210H6x9YWejZS1zU03xhrpMHZrjIb6rpgAEEWL/hrtVqpv5YtW0aFhYX9vj0AQEJqshBkJZ2YLhiZrgkAkCl1XaOKzDSiwEgXDDeRzWajFpdPZLlEF8MGB72yoVHctsCsE8EZB1wcfHEtGOq6slO/gqyFCxcO6IfOnz//ZI8HAOCURaerYZ0seZpfYLogAGQyzlSV2vRiu3iCVNfl7PCLYCvaxfCBd3aKui6TTk2TyqX1uriL4fhSK+Vo8AFgNjil1ltut1u0Se7KYrGc6jEBAMSl8QUyWcmHIAsAspHNoKFzRhWIjXVyXVdjayzb9cdP6+jRDwKkUSloXIkltl5XTYVd3Bcyz4CDrL1794qmFitXrqTOzs7Y/nA4LCJ7vLgCgNyi5yHUZCUfB7ahYPcP3wAAsg1nq6ZW5YqNBbmu64Arlul664tmEXix4QVGEWxFW8eXWHNQ15WNQdaVV14pAqpnn31W1F1hEABAqglG3uRH122C5MGHbQAAx+O6rNHFFrFdOb1CvJfe7/SIgIu7GHK26y/r94vbFll0sUYavFjyiAKTqAuDDA+yvvjiC9qwYQONHDkyMUcEABCvTBaCLHmmC4YQZAEAnOgDqXK7QWyXTiwR+462+8QiyRsaHFRb76R3tx2gQChM5hw11ZTbYkHX+FKL6IAIGRZkTZ06lfbt24cgCwBSFoIs+fBjjumCAAADx2tunTe6QGzM4wvS5khdF2e7nv54L3X4dom6Lm6gwTVdPL1wUoVNrPUFaR5k/fGPf6Qf/vCH1NjYSOPGjSONpvuTWl1dHc/jAwAYsFAkk4IgK/kUCmXs8QcAgJOn16po+uBcsbFAMCSt1xVZJPmNTU30h0/riCt3hheYYut1ceBVbM2R+/Cz3oCDrEOHDtHu3bvp6quv7pbyROMLAEgVvHAkQ5CVfFw3EH38AQAgftQqJY0ptohtwYxK8d57n4PruqTW8Wv3HqU/fy7VdXHzjJpIIw0Ovoblo64r5YOsa665hiZNmkR//vOf0fgCAFJSdGkJnJ+Sjx/zY5f2AACAxJxvK3INYrtsUmm3ui4p2+Wgd7ZKdV1WvVTXVRMJuni6oVaNDyJTKsiqr6+nt956i4YNG5aYIwIAOEVhBFmyUXBNFqYLAgCkRF1Xhy9AX+yX6ro4+Hpq1R7q8AVFgFVdahGNNLihxqRyG1lQ1yVvkHXOOeeIDoMIsgAgVSGTJR8lZ7LCmC4IAJAKDFo1zRwySGzRuq4dB9zSFMN6B/11YyMt+2SvqOviVvFiemGki2ER6rqSG2TNnTuXbr31VtqyZQuNHz/+uMYXF1988akdEQDAKQqFQwiw5BKp0QUAgNSs6xpXYhHbwplSXVfDUY80vbDBSf/efYReWrdP3LbUliOt1xXpYjgkz4i6rkQGWdxZkN13333HXYfGFwCQCsIhqREPyFSThdcBAIC0OWdXDjKI7fIaqa7rsNvbpa7LSX/f0kLBUJhseo1opiG6GFbYaWyJBXVd8QyyUNAMAKku2u0Uki/abRYAANJTnklH548pFBtr90bruqRs1xMf7SaPP0Q6tZImlFmpJrpeV7mNTDkDDi0yFh4JAMg4eIsvH4S2AACZxahT06yhg8TG/MEQbW9xUW29lO16ZcN+sVAyzyQcWWgWAVdNJONVaMneuq6TCrI+//xz+uijj+jgwYPHZbZ++9vfUiI9+eST9NBDD1FLSwtNmDCBHn/8cZo2bVqvt3/11Vfpnnvuobq6Oho+fDg9+OCDNGfOnIQeIwDIC5kUGSGTBQCQ0TQq7kxoFduiWVJdV92RDhFw8TTDj78+TH/6rEHcttyujzXS4PquIXmGrJlpMuAg61e/+hXdfffdNHLkyOPWyUr0g/aXv/yFlixZQk8//TRNnz6dHn30UZo9ezbt3LmTCgqkVpVdrV69mr73ve/R0qVL6aKLLqIVK1bQpZdeSrW1tTRu3LiEHisAyAnTBeXCjzqCLACA7MGvt4PzjGKbN7lM7Dvo4rouqaaLpxm+9UUz8Tr1doMmNr2QM11jSiwiaOsLv6b4fD7xtVarTZvXd0V4gK+GHFhxNmjRokWUbBxYTZ06lZ544gnxPWfRysvL6aabbqI77rjjuNtfccUV1N7eTm+//XZs34wZM2jixIkiUOuPtrY2slqtdPDQYbJYLHH838Cp4uff4XCQ3W4npRKFl/CNtWvX0KaNG+miuXPT5mScKVb/+9/k8XhowcLkv0b0F84d0BuMDegLxsfJc3Nd177WSBdDh6jx6vSHKEcj1XVF1+uayHVdOjX5AiH6srlNWt+r7hCV73tP/Jwlt90uAi05cWxQkJ9Hra2tfcYGA85k8aA67bTTKNk4gt2wYQPdeeed3Y7lvPPOozVr1vR4H97Pma+uOPP1xhtv9Pp7vF6v2Lo+kNE/LLmbfnh8QdpzuF3WY0gl/PmAy9VO5g4l3khDN3udATrg19FXhzwoEkqyJo+KOr0a2rLfSakK5w7oDcYG9AXj49RYclR0zsg8sQVCIdpzuIN2tLhoe7OLXlhbT/+7ao+4XY5aSb5gSGS+tCqi0QUGKo/8jA6vn9RqeVtK9DceGPBR8hpZXBfFU/WS6fDhw6I9PGfSuuLvd+zY0eN9uG6rp9vz/t7w1MJ77733uP1Op1P29vQ7D3bQ1X/eLusxAKSPclrxep3cB5GFpE/1nv39OrkPBAAA0lBn4Jsgxhck2tbsohq99P2WugM0psQq38ERkcvlSkyQdfvtt9OFF15IQ4cOpTFjxhy3GPFrr71G6YwzZV2zX5zJ4imJNptN9umCE4wW+r8fmGU9htT7RMlFZrMZnyhBN1u3bqGvvvqKTj/9dGSykmzLF5up0+ulOXMupFSFcwf0BmMD+oLxcbLC1OTsFB0Jtze7RfaqxSXNGis062h0kZlGFZlodLFZLIAcfeE+0u6jnS0u2tHkJIp8Zjq+qpAsxkjEJROVSpWYIOvmm28WnQXPPvtsGjRoUNIGWV5envhPHThwoNt+/r6oqKjH+/D+gdye6XQ6sR2LpybKPf/WmKOk8WU2WY8h9eZGh8hut8r+3EBqad+vplaNl0bk6/FCmGRH9EHykD+lz1U4d0BvMDagLxgf/SNavDe7YutqcQ3W0Xa/aPE+qshM3x5TKOqvavrR4v2skQUiuPX7x4vvObkj9+t6f5/7AQdZzz//PP31r38V2axk4iK3yZMn0wcffCA6BEYHO39/44039nifmTNniutvueWW2L733ntP7AeAzIUFceXDj7pCgTcfAADZIrpYsWhqUe+kL/Y7uy1WfMWUctFJ8GQXK+bXdLmbXZyMAf9Pc3NzxVRBOfA0voULF9KUKVPE2lhcF8bdA6+++mpx/YIFC6i0tFTUVbEf/ehHdOaZZ9JvfvMbERS+/PLLtH79evr9738vy/EDQLIgeyWbMLfPl/sgAAAgUQ67vVJr9gYHra93iul/wVCYbHqNWIT4prOHiUzVmGILadXZ+6HbgIOsn//85/Szn/2Mli9fTgaDgZKJW7IfOnSIfvrTn4rmFdyK/Z133ok1t2hoaOiWwps1a5ZYG4vX9brrrrvEYsTcWRBrZAFkNrzHlw/yhwAAmYNnhdQf5YWGpfWueLFhXniYlfFCwxU2umJKGU2ptNHgQUZS8pxAOLkg67HHHqPdu3eLwKaqquq4xhe80G8i8dTA3qYHrly58rh98+bNExsAZA+FEtMF5cKPu9zz5QEA4OQEuJ6qxRXLVPElN6Dg0/rIQjN9a9gg+tE5w0Q9VZG173qqbDfgICtaDwUAkKpQkyVzkIWCcACAtNDhk+qpRFBV76BN+1upwxcU0/wmlFpp3uRSEVDxZs7pnliBOAdZPFUQACCVKRVKBFky4cddiUwWAEBKOuL2iil/3PWPG1V82SzVU1n1aqopt9H1Zw6hyZV2GleS3fVU8SDvkskAAAkQrc3E1LXkE495P9cQAQCAxJ6P9zk8sa5/PP1v72GpnorXo6qpsNPlNaU0pdJOQ/NQTyVLkMUdBXlhT16rqj8qKirok08+ocrKylM9PgCAAYtOV0M2K/nCoZDIJAIAQPLrqXYecMe6/tXWO+iQW6qnGl5goplDBtGNZw0Vmapi1FOlRpDldDrpn//8J1mt1n790CNHjlAwGDzVYwMAOKVMFq+l19+V2SGO0wVRkwUAkHAeX1Cqp2pwUG29kzbud1K7N0galYKqS6102STOUtloYrmNrHrUU6XsdEFenwoAIB2okMmSTSjEQRamnAAAxNvRdp9UT8XT/xqctK2pjQKhMFly1KIxxQ9PHyLWqRpfYiGdBh8wpkWQxZ8GAwCkC6Xqm0wWJFc4jOwhAMCp4g8J9zs8IpjioIqn/+053C6uK7LoRB3VJROLxeXwfBM+3EpBaHwBABlHpZTe5CPISj5+zJWRxx8AAPqHO/x9dcAlLfobWZ/qoMsrrhteYKRpg+3036Lzn41KbXq5Dxf6AUEWAGScaCYlhNpQeYKsSCYRAAB61ukP0mZRTyW1Ut+475t6qnElVrpkQrFoUDGp3EY2A+qp0hGCLADIOMpIkBVEJivpRLMRZLIAALpxdETrqZxU2+CgrU1t5A+GyaST6ql+8K3BYurfuFIL5aCeKruCrKamJiopKUns0QAAxDOThSAr6ZDJAoBsx/VUjc7O2LQ/rqnadUiqpyowS/VUc6ulTBW3Vlehniq7g6yxY8fSk08+SfPnz0/sEQEAxCnIwlISyYe2+QCQjfVUXx90x7r+8WVLm1RPNSzfKIKpxadLmSpeBFjBC1dBxut3kPXLX/6SrrvuOnr99ddp2bJlYoFiAIBUpFYjkyUXDmzVKsxEB4DM5fUHaVuztD4VN6rgeipXZ0DUU40tttCF4zlLZRP1VLlGrdyHCzLp9yvh9ddfTxdccAFde+21NGbMGPrDH/5Ac+fOTezRAQCchOibfGSyZMpkRYJcAIBM0Orxi3qq9XVHad2ew7T9YIeopzLqVCKQumZWlVj0d3yplfRanP9AMqCPGwcPHkwffvghPfHEE/Td736XRo8eTWp19x9RW1s7kB8JABB3qsh5CUFW8iGTBQDprsnpiXX9q6130lcH3WJ/vklL1cVGmjuxlKZU5dLIQjPqqaBXA34lrK+vp9dee43sdjtdcsklxwVZAACpMl0QQVby8WOOTBYApIsQ11Md4nqqb9anam7tFNcNyeN6Khtd+60qmlxhoxKrjpxOp3gPrFSiwQ/0bUAREk8RvO222+i8886jbdu2UX5+/kDuDgCQFKrodMFAQO5DybqOWshkAUAq8wVCtKWxNdaggqcBtnUGSK1U0JhiM10wtlA0quC26sfWU6HOFwai36+E3/nOd2jdunViquCCBQsG9EsAAJJJo5EWbgwgk5VU0TcgmOEAAKmizeMXjSmimarNjW0i0DJopXqqhTMrRde/6jILGbQ4d0H89Hs08aeTmzdvprKysjj+egCA+OP2uDyVA9MFkyv6eKs1eKMCAPJoae2Mdf3jTBXXU4XDRHkmrchQ3f7t4eJyVKGJ1FjTDxKo36+E7733XiKPAwAg7lMGMV0wuQKRx1utljKJAACJrqfafbi92/pUvAgwqxpkEMHUolmVNLnCThW5eqxPBUmFjxsBIGObXyCTJVMmC9MFASABeJrftqY20fWPg6qNDU5yevyiwx/XU317NNdT2USTikEmndyHC1kOr4QAkJFUKlUsswLJEX28tZGaOACAU+Hq5HqqVilTVe+kzY2t5A2ESK9R0sRyG101o0IEVNVlVjLq8JYWUgtGJABkJM6mIMiSaboggiwAOAkH2jpj0/44qNp5wEWhMFGuUSOaUyw5j+upbDSqyEwa1FNBikuLIKuuro7uv/9+sRByS0sLlZSU0JVXXkn/8z//Q1pt9/aaXZ111lm0atWqbvuuu+46evrpp5Nw1AAgd4dBBFnJhUwWAAxkyYc9op7KGWtUsd/hEddV5nI9lY2ujGSquL4K9VSQbtIiyNqxY4doDbxs2TIaNmwYbd26lRYvXkzt7e308MMP93lfvt19990X+95gMCThiAFAbiq1mrxer9yHkVWQyQKAvuqptjdzPVVk0V+up+rwk1JBNLrYQueMzI/UU9kp34x6Kkh/aRFk8RpdvEUNGTKEdu7cSU899dQJgywOqoqKipJwlACQSjib0u52y30Y2ZnJ6mOGAQBkB7c3QJsi61Nxowqup+r0hyhHo6QJZVb6r2nlIqCaUG4lE+qpIAOl7ahubW2l3NzcE97upZdeohdffFEEWnPnzqV77rmnz2wWf/Ld9dPvtrY2ccmZNKz0nVr4+eDpBnhe4Fg8JjiTxW/6eYxAcvj9/ljTkVT+u8S5A3qDsXHyDrq8VNvgFBtnqXa0SPVUdoOGaipsdPPZQ8XUv9HFx9dTpcvjjfEBrL/Pf1oGWbt27aLHH3/8hFms+fPnU2Vlpajh4oWUf/KTn4gM2GuvvdbrfZYuXUr33nvvcfudTifaQaeYcDhELhdnKsKkUKAAFrqPDbVKJd7s87RiSA6/z0dWq1WcL1MZzh3QG4yN/uFAo8Hppc2NbvqiSdoaW6UPqEusWppYYqaLx1RSdYmJKu26LvVUIXK3tVK6wvgA5nK5KOWDrDvuuIMefPDBPm+zfft2GjVqVOz7xsZGMXVw3rx5ot6qLz/4wQ9iX48fP56Ki4vp3HPPpd27d9PQoUN7vM+dd95JS5Ys6ZbJKi8vJ5vNRhaLZQD/O0jOJwkK8dwolTjZQfexodFoxYnQaDTKfThZIxgKiWyW3W6nVIZzB/QGY6Nn/iDXU7liWSq+PBqppxpZaKazRxaIeqqachsVWDK3ngrjAxh/gJvyQdZtt91GixYt6vM2XH8V1dTURGeffTbNmjWLfv/73w/4902fPj2WCestyNLpdGI7Fv8x4Q8q9fCnY3huoCdcF8Rv+NGRKnkCfr943NPh7xHnDugNxgZRuzdAX+xvlRb9rXfSF/ud5PGHSKeW6qmumMr1VDaaVG4jU05aToo6aRgfoOzncy/rX0Z+fr7Y+oMzWBxgTZ48mZYvX35Sg3vTpk3ikjNaAJDZNBq1CLJ4WgsCreTgxxtNLwDSz2G3t1srda6nCobCZNNrqKbSRjeePVSsUzWm2EJaNYILgP5Ii48fOMDiNa+4vorrsA4dOhS7Lto5kG/DUwFfeOEFmjZtmpgSuGLFCpozZw4NGjRI1GTdeuutdMYZZ1B1dbWM/xsASAaeLsgBFje/4DWzIElBVg8zAQAgdfB5sf5oh9RKvd4hpv7VHekQ15XackQwdcWUMpGpGpJnJCXPCQSAzAyy3nvvPTHFj7eysrJu10U7h/GLOze16OiQThT8aer7779Pjz76qCh857qqyy+/nO6++25Z/g8AkFzRwIrPDQiykoMfa50uR+7DAIAuAlxP1eKKZar48ki7jxSReqrThg6iH50zTHQALLLi7xcgq4Isrts6Ue1WVVVVt1bNHFStWrUqCUcHAKlIE5m25vP5sAh5EoMsNAgCkFeHT6qnEkFVvYM27W+lDl9QTPObUGqleZNLRUDFmzkHH0ABZHWQBQBwMosRR4MsSGYmC9MFAZLpiNsb6/rHjSq+bJbqqax6tej2d/2ZQ2hypZ3GlaCeCiCZEGQBQEaKNmBAkJU8mC4IkFg8Y2efwxPr+sfT//YelsokSqw5Ipi6vKZU1FMNyzehngpARgiyACAjIchKPn6stTp0FwSIZz3VzgPuWNe/2noHHXJL9VTDC0w0Y3Au3XjWUDH1r8Sml/twAaALBFkAkLGLBfKGICt5n7DzY52DTBbASfP4glI9VYODauudtHG/k9q9QdKoFFRdaqXLJklZqkkVNrLqUU8FkMoQZAFAZlIoRH0Qgqzk4Fb5HGjl5CDIAuivo+0+qZ6Kp/81OGlbUxsFQmEy50j1VD88fYhYp2p8iYV0GpXchwsAA4AgCwAyVo5eT16vV+7DyArRYBaNLwB6xh9C7Hd6Yl3/OKjafahdXFdk0Yn1qS6ZWCwuh6OeCiDtIcgCgIylz9GTD0FWUoMsZLIAJNzh76sDrljXPw6uDrqk89HwAiNNrbLTD8/gzn82KkU9FUDGQZAFABlLr9eTxyN13oIkBVl6BFmQnTr9Qdos6qmkTNXGfa3k9gZEPdW4EitdPKFY1FPVVNjJZkA9FUCmQ5AFABkdZLW2OuU+jKwQzRgikwXZwtHho40iS+Wk2gYHbW1qI38wTCadmiaVW2nxt6pElmp8qZVyUE8FkHUQZAFAxuI3/KjJSvZ0QUx7gsysp2p0doquf9Gaql2ReqoCs1RPdVF1pJ6qwEQq1FMBZD0EWQCQsfQGPXUiyEoKr89HGo1GtM0HyIh6qoOuWIMKvmxpk84lQ/ONIphafPpgkakqs+lJwQtXAQB0gSALADKWQW8Q09hCoRAplUq5DyejccYQUwUhXXn9QdrS2Ebr64/S2t2HaGtzB7m8AVIruZ7KQnPGF4nAalK5jXKNWHAbAE4MQRYAZHQmKxoAcH0WJA4Hs3iMIV20evyReiopU7WlsVXUUxm1KhpXbKSrZ1XQlKpcsQCwXovsLAAMHIIsAMhYBoNBXCLISjzxGEceb4BU08TrU0UX/a130lcH3WJ/vklLkyvt9P9mjxCZqmF5BnK1tZLdbkf2GwBOCYIsAMjo6YKss7NT7kPJiiCL35gCyC0UCtOuQ27R9Y8bVdTWO6mpVToHDMkzijqqa06rFMFVub17PRVPLQYAiAcEWQCQsaKZFS+CrISTsoXIZEHy+QIhMd0vmqmqbXBSW6dUTzWm2EzfGVsoAqqaCtRTAUDyIMgCgIyl0+nElB9kshKPuzhGp2cCJFIb11Pt44BKylRtbmwTgZZBqxKNKRbOrBRT/6rLLGTQ4m0OAMgDZx8AyFg8DYizWR4EWQlfQ4izhah7g0RoaZXWpxLT/+odop4qHCbK43qqChvd/u3hIlM1qtBEahXqqAAgNSDIAoCMZjQYkclKML/fL2pZkMmCeNRT7T7c3m19Kl4EmFUNMohgKpqpqsjF+lQAkLoQZAFARjOajNTp8ch9GBktGsQajAiyYGB4mt+2Jl6fSgqquK260+MnlVJBo4vM9O3RXE9lE/VUeSad3IcLANBvCLIAIKOZjCZqaWmW+zCyI8hCJgtOwNXJ9VStsVbqmxtbyRsIkV6jpInlNrpyenmknspKRh3eogBA+sIZDAAyPpPlQSYrSUGWUe5DgRRzoK2z2/pUOw+4KBQmyjVqRDC15LzhVFNpE1krDeqpACCDIMgCgIxmNEpBFjdnQP1G4oIs0WQEjS+yGv+N7RH1VM5Yo4r9DukDjspcrqey0ZUzKkSzCq6vwt8jAGSytAmyqqqqqL6+vtu+pUuX0h133NHnC/9tt91GL7/8sljDZfbs2fS///u/VFhYmIQjBoBUYDKZKBgMiuYMWi3WyEkEPtdygMXt8iG76qm2N3M9lRRUccbK2eEnpYJEZuqckfkisJpcYad8M+qpACC7pE2Qxe677z5avHhx7Huz2dzn7W+99Vb6+9//Tq+++ipZrVa68cYb6bvf/S79+9//TsLRAkCqBFmMs1kIshKDG4ugHivzub0B2hRZn4obVXA9Vac/RDkaJU0os9L8qVI91YRyK5lQTwUAWS6tzoIcVBUVFfXrtq2trfTMM8/QihUr6JxzzhH7li9fTqNHj6a1a9fSjBkzEny0AJAqjS9YR0eH+LAF4o/XITNGglnIHAdd3lgr9dp6B21vkeqp7AaNaKX+o3OGial/Y0osqKcCAEjnIOuBBx6g+++/nyoqKmj+/PkiU6VW9/xf2LBhg5gedN5558X2jRo1Stx3zZo1vQZZPK2Qt6i2tjZxyWvA8Aapg58PrgHA8wJ9jQ1ejDgaZPE+SEwmKz8/P23+FnHuOB4/HnVHOiJNKpxU2+Ckhkg9VbldL1qoXzGlTARVg/OOr6fKlMcSYwP6gvEBrL/Pf9oEWTfffDPV1NRQbm4urV69mu68805qbm6m3/72tz3evqWlRUwNstls3fZzPRZf1xuu87r33nuP2+90OkVdB6SOcDhELpebvyKFAp+iQu9jw263k6ejg9rb2+U+tIzEoSsHsw6Hg9IBzh1EgWCYvjrUQV80uWlzk1tcOj0BUU81LE9P0ypMtHhGEVWXmCjf1HWarY+cTh9lKowN6AvGBzCXy0UpH2Rx04oHH3ywz9ts375dZKCWLFkS21ddXS0CqOuuu04ERTpd/ApqOXjr+rs4k1VeXi6CNYvFErffA/H6JEEhnhsU3ENfY0OhVIqaLO40CPHndDho3LhxIphNB9l47mj3BuiL/a0iQ8XZKv7a4w+RTq2k6lIL/X9Ty0WWimurzDlp8/lr3GXj2ID+w/gAplKpqD9kPZNy579Fixb1eZshQ4b0uH/69OkUCASorq6ORo4cedz1XLvl8/Enbs5u2awDBw70WdfFAVtPQRv/MeEPKvXwlBU8N3CiscH1nB0eD1pGJwBPy+bNZDKn1d9hpp87Dru5nirS9a/eKeqpgqEw2fQasS7VjWcPFU0qxhRbSKvOzMfgZGX62IBTg/EByn4+97IGWTyHn7eTsWnTJvGfLCgo6PH6yZMnk0ajoQ8++IAuv/xysW/nzp3U0NBAM2fOPKXjBoD0YjFbqKWlWe7DyEjRhZ5NJmQJ5cI1IvVHO2Jd/zhbxfVVrNSWI5pU/GeknmpInpGUPCcQAAASKi3mBHCjis8++4zOPvts8Yk0f89NL6688srY9JTGxkY699xz6YUXXqBp06aJLmLXXnutmPrHdVw81e+mm24SARY6CwJkF7PZRHv2SG86Ib641o1xJguSIxAMicyU1KBC6v532O0jTtSOLDTTaUMH0c3nDBXrUxVZc+Q+XACArJQWQRZP3+MFhX/+85+Lzn+DBw8WQVbX2imersKZKu4gFvXII4+IbBdnsrouRgwA2cVstohzA8+nxxSP+OJpmF3XI4P46/BJ9VRi+l+9gzbtb6UOX1BM8+N6qv+oKRXd/yaV28ii18h9uAAAkC5BFncV5LWt+lJVVXVce+acnBx68sknxQYA2ctssYjzA5pfxB8/pjw1O54NiLLd0XZfbH0qnv73ZbNUT2XVq6mm3Eb/feYQUU81rgT1VAAAqSotgiwAgFMR7QzK2SwEWfHFjymyWCePg/99Do8IqtZHGlXsPSzNyCixSvVUl9eUinqqYfkm1FMBAKQJBFkAkPEsZqleqIPXyTrJZjvQR5AVeXzhxDgjtYPrqSJd/zhbdcjlFfVUwwtMNGNwLt141lAx/a/Eppf7cAEA4CQhyAKAjKfLyRFT2txYjDghjS/y83vu8gpEHl+QNje2Sl3/6p20cb+T2r1B0qgUNL7USpdNLBFZqkkVNrKingoAIGMgyAKArFjXhKcMikwWxD2TZbYgk9W1nkos+BupqdrW1EaBUFgs8Mv1VNedPlhMARxfYiGdpn8LWgIAQPpBkAUAWcFitSKTlYB6IhFkZWn7dv7/73dyPdU3QdXuQ9IYK7LoRHOKSyYWi1bqIwpQTwUAkE0QZAFAVuC18xrq6+U+jIzS2dkp2uJz98Zsqaf66oAr1vWPg6uDLq+4bniBUQRVPzxjCE2utImmFZxBBQCA7IQgCwCygtWCTFa8RadfRrs3ZppOf5A28/pUkel/G/e1ktsbEPVU40qsdPEEzlLZqKbCTjYD6qkAAOAbCLIAIGsyWT6vl3w+H2m1WrkPJyO0RxZ/t2RITZajw0cbRZbKSbUNDtra1Eb+YJhMOjVNKrfS4m9ViSwVN6zIQT0VAAD0AUEWAGRNkMXcbjfl5ubKfTgZob29nVQqFen1BkrHeqpGh4dqOVMVqanaFamnKjBL9VQXVUuZqhGFZlKhngoAAAYAQRYAZAWrzRYLDBBkxW+6oNlsTovaI66n+vqgO7Lor4PW1x2lg26/uG5ovlEEU4tF5z8bldn0afF/AgCA1IUgCwCygtFoFFkXzmRBfHDAyl0bU5HXH6QtjW2xRX9r9znJ1RkgtVJBY0ssdN6IXJo1opAmV+ZSrhHTRwEAIL4QZAFAVuDMBE8ZRJAV3yCruKSEUkGrxx+pp5JaqW9pbBX1VAatSqxPdc0sqZ6qutRKOrWCHA4H2e12UiqVch86AABkIARZAJA1bHY7uVwuuQ8jo4Is7toohyZenyq66G+9k746KAXP+SatWOz3/80eIeqqeH0qtap7IMVt5wEAABIJQRYAZA2bzUZ7du+W+zAyQjAYJI/Hk5TpgqFQmHYdcouufzz9r7beSU2tneK6wXkGEUxdc1qlCK7K7ainAgAA+SHIAoCsYbdJmSzuLIc34qeexeratTGefIGQmO4XzVTVNjipLVJPNabYTLPHFopGFRxUoZ4KAABSEYIsAMgaNrstloExGNKv7Xgqida2xSPIauN6qn0cUEmZqs2NbSLQ4nqqiWVWWjiTs1Q2mlBmJYMWL1sAAJD68GoFAFnDZrOLS85mIcg69SCLs4Hcwn2gWlo7Y13/uFEF11OFw0SDjFqaUmmj284bTlOq7DSq8Ph6KgAAgHSAIAsAsqomi7ldLiosLJT7cNIaP4YcYHFb/BPVU+053B7r+sfT/xqdUj1V1SCDmPIXzVRV5howjRMAADICgiwAyBoajYZMJjO1ocNgXDJZ0QWeu+JpftuapPWpuFEFt1V3evykUipodJGZzhtdIBpV1FTYKM+kk+XYAQAAEg1BFgBkFXsu2rjHg7u9nUpKSsjdGRAL/UYbVHyxv5W8gRDpNUqaWG6jK6eXi2wV11MZdXjJAQCA7IBXPADIKrn2XNq3r0Huw0hp3H2xMxCmts4guX1BcnmD3b52dQZp4wELtTtz6PZ1H1IoTJRr1NDkCjstOW841VTaRNZKg3oqAADIUgiyACCr5Obm0pdfbsuKNu48da+NgyJvkNxe6Wt35HtXT/s5iOqULoO9rNdr1CrJrFORz6+j8UUa+sE5Q8X0P66vyvTHEwAAoL8QZAFA1k0X9Pv91NnZSXq9nlJdIBgWGaRoICRdho4JlL653tXlOl8w3OPPzFErRKDEmylyWWHXkVmn7LbfErte2m/SqkRtFfvTCy/QdyZfQBMnlSX5EQEAAEh9aRFkrVy5ks4+++wer1u3bh1NnTq1x+vOOussWrVqVbd91113HT399NMJOU4ASI9MFmtrbU1akBUKh6ndFzpuyh1njEQmqev+2CYFSx5/zykljVJB5hwVmbXKWKBUZNbS8Dzpaw6MugdK0eBJSVpM4wMAAEiotAiyZs2aRc3Nzd323XPPPfTBBx/QlClT+rzv4sWL6b777ot9j7VxALIbr5XF09ra2tqosKio3/fj6YUc8PSUSeo69a7bvsj0Ow6wesopcVKoa/DDAVGuQU2VNp0UQEWyR5YcvoxkmURgpSKdWoHpeQAAACkqLYIsrVZLRV3eDPFUnzfffJNuuummE77J4KCq633T2SGXlzr9QbkPI2WEQiFqbfOSO9xBSiU+mYf+j42QYRBta3TQEdVhcvtC32zeLl8fs3Gg1MvsOzJqFCIIEhtnkLRKyrNxYKT5Zn/XLXIb/YACJc5ohYhCfvJ3EvlP7SECAACAbA+yjvXWW2/RkSNH6Oqrrz7hbV966SV68cUXRaA1d+5ckQHrK5vl9XrFFsWfdkfftPEmp5+99SV9sPOQrMcAkBmqiA4T0VcHY3vUFCSdIkDaYy5zFUEqogDp1EHS8qUiSFpFgHSR6zUUFBkpEQPxGrvSOrvddES2b35bZjAYDbKfF08GHzNnJtPx2CGxMDagLxgfwPr7/KdlkPXMM8/Q7Nmzqays74Lr+fPnU2VlpVjLZfPmzfSTn/yEdu7cSa+99lqv91m6dCnde++9x+13Op0UDMqbRVo0JZ8uHWuX9RhSSTgcIo/HI+pqFApksqD/Y6Ojw02hgE/UM3G3PKNGSRoVpt4NhFqtpkGD8sjhcFA6jg+Xy81f4dwB3WBsQF8wPoD1d61NRZhDcpnccccd9OCDD/Z5m+3bt9OoUaNi3+/fv18ETq+88gpdfvnlA/p9H374IZ177rm0a9cuGjp0aL8zWeXl5dRy4CBZLJYB/T5I/CcJHPzabDZMF4RuMDagLxgf0BuMDegLxgdEY4OiwgJqbW3tMzaQNZN122230aJFi/q8zZAhQ7p9v3z5cho0aBBdfPHFA/5906dPF5d9BVk6nU5sx+I/JvxBpR6uZ8FzAz3B2IC+YHxAbzA2oC8YH6Ds53Mva5CVn58vtv7ipBsHWQsWLCCNRjPg37dp0yZxWVxcPOD7AgAAAAAA9EdaheE83W/v3r30/e9//7jrGhsbxbRCXjeL7d69m+6//37asGED1dXViWYZHJydccYZVF1dLcPRAwAAAABANlCnW8MLXjOra41W17bu3NSio6Mj1vb9/fffp0cffZTa29tFXRXXcN19990yHDkAAAAAAGSLtAqyVqxY0et1VVVVYjphFAdVq1atStKRAQAAAAAApOF0QQAAAAAAgFSHIAsAAAAAACBbpwvKIToFsb8Lj0Fy16vg50WlUqGVKnSDsQF9wfiA3mBsQF8wPqBrTHCipYYRZPXzgRw6ZLDchwIAAAAAACkSI1it1l6vV4RPFIZlOf7Uoqmpicxms1iADlJrxW1ucLJv374+V9yG7IOxAX3B+IDeYGxAXzA+gHHoxAFWSUlJnxlNZLJOgB+8srIyuQ8D+sAnOpzsoCcYG9AXjA/oDcYG9AXjA6x9ZLCiMKEUAAAAAAAgjhBkAQAAAAAAxBGCLEhbOp2Ofvazn4lLgK4wNqAvGB/QG4wN6AvGBwwEGl8AAAAAAADEETJZAAAAAAAAcYQgCwAAAAAAII4QZAEAAAAAAMQRgiwAAAAAAIA4QpAFaemXv/wlzZo1iwwGA9lsth5v09DQQBdeeKG4TUFBAf34xz+mQCCQ9GOF5HvyySepqqqKcnJyaPr06bRu3Tq5DwmS7OOPP6a5c+dSSUkJKRQKeuONN7pdzz2ffvrTn1JxcTHp9Xo677zz6Ouvv5bteCF5li5dSlOnTiWz2SxeGy699FLauXNnt9t0dnbSDTfcQIMGDSKTyUSXX345HThwQLZjhuR56qmnqLq6Orbg8MyZM+mf//xn7HqMDegvBFmQlnw+H82bN4/++7//u8frg8GgCLD4dqtXr6bnn3+ennvuOfGmCjLbX/7yF1qyZIlos1tbW0sTJkyg2bNn08GDB+U+NEii9vZ28dxzwN2TX//61/TYY4/R008/TZ999hkZjUYxTvgNFGS2VatWiTfJa9eupffee4/8fj+df/75YsxE3XrrrfS3v/2NXn31VXH7pqYm+u53vyvrcUNylJWV0QMPPEAbNmyg9evX0znnnEOXXHIJbdu2TVyPsQH9xi3cAdLV8uXLw1ar9bj9//jHP8JKpTLc0tIS2/fUU0+FLRZL2Ov1JvkoIZmmTZsWvuGGG2LfB4PBcElJSXjp0qWyHhfIh1/qXn/99dj3oVAoXFRUFH7ooYdi+5xOZ1in04X//Oc/y3SUIJeDBw+KMbJq1arYWNBoNOFXX301dpvt27eL26xZs0bGIwW52O328B//+EeMDRgQZLIgI61Zs4bGjx9PhYWFsX38KXVbW1vs0yjIPJy55E8feepXlFKpFN/zmABge/fupZaWlm7jxGq1iqmlGCfZp7W1VVzm5uaKSz6HcHar6/gYNWoUVVRUYHxkGZ4V8/LLL4ssJ08bxNiAgVAP6NYAaYLfQHUNsFj0e74OMtPhw4fFi2JPz/2OHTtkOy5ILdFzQE/jBOeH7BIKheiWW26h0047jcaNGyf28RjQarXH1ftifGSPLVu2iKCKpw9z3dXrr79OY8aMoU2bNmFsQL8hkwUp44477hAF6n1teKMMAADxwrVZW7duFdkKgKiRI0eKgIrrNbn2e+HChfTll1/KfViQZpDJgpRx22230aJFi/q8zZAhQ/r1s4qKio7rKBft/sPXQWbKy8sjlUp1XKcn/h7PO0RFxwKPC+4uGMXfT5w4UcYjg2S68cYb6e233xadKLnZQdfxwVOPnU5nt4wFziPZg7NVw4YNE19PnjyZPv/8c/rd735HV1xxBcYG9BsyWZAy8vPzxdzmvjY+8fUHp/k53d+1oxx3keJ2rJzyh8zE44NfED/44INu04H4ex4TAGzw4MHiDVHXccL1mvypNcZJ5uNeKBxg8RSwDz/8UIyHrvgcotFouo0PbvHOy4JgfGQnfh3xer0YGzAgyGRBWuIT2tGjR8Ul1+BwWp/xJ088f5rb8XIwddVVV4lWzTxX+u677xZTQ3Q6ndyHDwnE7dt5aseUKVNo2rRp9Oijj4qi5auvvlruQ4MkcrvdtGvXrm7NLvg8wc0NuEid63B+8Ytf0PDhw8Wb7HvuuUesqcVrJkFm49eBFStW0JtvvinWyorW0nDzE14zjS+vvfZacS7h8cIfzt10003iTfSMGTPkPnxIsDvvvJMuuOACcZ5wuVxirKxcuZLeffddjA0YmIE1IwRIDQsXLhQtU4/dPvroo9ht6urqwhdccEFYr9eH8/LywrfddlvY7/fLetyQHI8//ni4oqIirNVqRUv3tWvXyn1IkGR8LujpHMHnjmgb93vuuSdcWFgoWrefe+654Z07d8p92JAEPY0L3nhJkCiPxxO+/vrrRetug8EQvuyyy8LNzc2yHjckxzXXXBOurKwUrx/5+fni3PCvf/0rdj3GBvSXgv8ZYFwGAAAAAAAAvUBNFgAAAAAAQBwhyAIAAAAAAIgjBFkAAAAAAABxhCALAAAAAAAgjhBkAQAAAAAAxBGCLAAAAAAAgDhCkAUAAAAAABBHCLIAAAAAAADiCEEWAABkraqqKlIoFGJzOp1J//0rV66M/f5LL7006b8fAAASA0EWAACkta6BSk/b2Wef3ef977vvPmpubiar1UrJNmvWLPG7//M//zPpvxsAABJHncCfDQAAkLRA5VhvvfUW/fCHP6Trr7++z/ubzWYqKioiOWi1WvG79Xo9eb1eWY4BAADiD5ksAABIa9FApevmcDjo9ttvp7vuuovmzZs3oJ/33HPPkc1mo7fffptGjhxJBoOB/uM//oM6Ojro+eefF1MM7XY73XzzzRQMBmP34/2/+MUvaMGCBWQymaiyslIEeocOHaJLLrlE7Kuurqb169cn4FEAAIBUgiALAAAyCtdWcVBz1lln0f33339SP4MDqscee4xefvlleuedd8SUxMsuu4z+8Y9/iO1Pf/oTLVu2jP7v//6v2/0eeeQROu2002jjxo104YUX0lVXXSWCriuvvJJqa2tp6NCh4vtwOByn/y0AAKQiTBcEAICMEQqFaP78+aRWq+mll14SNVknw+/301NPPSWCIsaZLA6sDhw4IDJSY8aMEbVeH330EV1xxRWx+82ZM4euu+468fVPf/pT8TOmTp0ay6b95Cc/oZkzZ4qfI9cURQAASDwEWQAAkDF4euCaNWto3bp1otbqZPEUwWiAxQoLC8V0QA6wuu47ePBgt/vxdMCu17Px48cft4/vhyALACBzIcgCAICMwFP7Hn74Yfr73/9Ow4cPP6WfpdFoun3PGbGe9nHmrLf7RbNoPe079n4AAJBZUJMFAABpb9OmTXTttdfSAw88QLNnz5b7cAAAIMshkwUAAGnt8OHDYiFfbnTBDSZaWlq6Xa9SqSg/P1+24wMAgOyDIAsAANIaTw+sr68XW3Fx8XHXcyv1uro6WY4NAACykyKMPrIAAJCluJnFLbfcIjY5LVq0SLSef+ONN2Q9DgAAiA/UZAEAQFbjturcNbC1tTXpv/uTTz4Rv5vbzQMAQOZAJgsAALIWTzHkNbHYkCFDSKlM7mePHo+HGhsbxdccbKGtOwBAZkCQBQAAAAAAEEeYLggAAAAAABBHCLIAAAAAAADiCEEWAAAAAABAHCHIAgAAAAAAiCMEWQAAAAAAAHGEIAsAAAAAACCOEGQBAAAAAADEEYIsAAAAAAAAip//H/1THvV8VERmAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_ = lens.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot Losses" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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UFBgw6twZl+rM88807r11lut6viir8nI1JNGlWvWrDHpd8/zOenfy5cvt7VtTqfDGZqW79y5s/llqulIpf2tvwQ8+1yHnTp06ECfn6AdO3ZIampqhb7Vc5vocKmrb/VShzkGDRrkfow+Xvd7zeCg7hYuXGhS6927d5cbb7xRjh496r6Pfm6YzMxMc5mYmFjnzwu97Nu3r7Rp08b9GM1C6okPNSOGuvW1y9tvvy0tW7aUPn36yNSpUyU3N9d9ny/6OuBPGultR44cMakyz42i9O+ffvrJtnY5nX5xarpRP+A1NTlt2jQ544wzZOPGjeaLNjw83HzIV+5zvQ8N5+q/qvZn1316qV++nkJDQ82HGf1fdzqspMMbnTp1km3btsnf/vY3GTt2rPmgDwkJoZ8boLS0VCZPnizDhw83X6KqLp8XelnVPu+6D3Xra3XllVdKx44dzY/Q9evXy1//+ldTR/Pxxx/7rK8JZOAX9APdpV+/fiaw0TfH+++/bwpQAae7/PLL3df1F6ru5126dDFZmlGjRtnaNqfS+g39seNZTwff9rVnDZfu1zppQPdnDdZ1//YFhpbqSdNn+uupcgW8/p2UlGRbuwKN/po6+eSTZevWraZfdUgvIyOjwmPo8xPn6r+a9me9rFzIrjMOdIYN/d9wOoSqnye6jyv6uX5uvvlmUxC9YMECad++vfv2unxe6GVV+7zrPtStr6uiP0KV537d2H1NIFNPmrIcOHCgzJs3r0LKTf8eNmyYrW0LJDrlVCN6je61v8PCwir0uaYutYaGPj8xOsyhHyaefatj11qT4epbvdQvBa09cJk/f77Z710fWqi/vXv3mhoZ3ccV/Vw3WkutX6yffPKJ6R/dhz3V5fNCLzds2FAhcNRZOTrtvVevXj58Nc7u66qsW7fOXHru143e114pGW5i/vOf/5hZHTNnzjQzDa6//nqrefPmFaqyUT+33367tXDhQmvHjh3WN998Y51zzjlWy5YtTZW8uuGGG6wOHTpY8+fPt1avXm0NGzbMLKhddna29d1335lF3/JPPvmkub5r1y5z/yOPPGL239mzZ1vr1683M2s6depk5eXluddx3nnnWaeccoq1cuVKa+nSpVa3bt2sK664wsZX5ax+1vvuuOMOM2tG9/G5c+dap556qunH/Px89zro59rdeOONVnx8vPm8OHDggHvJzc11P6a2z4vi4mKrT58+1ujRo61169ZZc+bMsVq1amVNnTrVplflzL7eunWr9cADD5g+1v1aP0M6d+5sjRgxwqd9TSDTQM8995x5o4SHh5vp2CtWrLC7SY522WWXWcnJyaY/27VrZ/7WN4mLfqnedNNNVkJCghUVFWVddNFF5g2F2i1YsMB8sVZedDqwawr2PffcY7Vp08YE6KNGjbI2b95cYR1Hjx41X6gxMTFm2uS1115rvpxRt37WD379INcPcJ0a3LFjR+u666477scP/Vy7qvpYl9dee61enxc7d+60xo4dazVr1sz8aNIfU0VFRTa8Iuf29e7du03QkpiYaD47unbtat15551WZmamT/s6qLyxAAAAjkONDAAAcCwCGQAA4FgEMgAAwLEIZAAAgGMRyAAAAMcikAEAAI5FIAMAAByLQAZAwDvppJPk6aeftrsZABoBgQwAr7rmmmtk/Pjx5vrIkSNl8uTJPnvumTNnmhOOVvbtt99WOEsvgMARancDAKA2ejZjPWFrQ7Vq1cqr7QHgP8jIAGi0zMyiRYvkmWeekaCgILPs3LnT3Ldx40YZO3asxMTESJs2beQPf/iDHDlyxP1/NZOjZ93VbE7Lli1lzJgx5vYnn3xS+vbtK9HR0ZKSkiI33XSTOVO6WrhwoVx77bWSmZnpfr7777+/yqElPRPyhRdeaJ5fz8L7u9/9Tg4ePOi+X//fgAED5M033zT/Nz4+Xi6//HLJzs72Wf8BqBsCGQCNQgOYYcOGyXXXXScHDhwwiwYfGRkZcvbZZ8spp5wiq1evljlz5pggQoMJT6+//rrJwnzzzTcyY8YMc1twcLA8++yzsmnTJnP//Pnz5a677jL3/epXvzLBigYmrue74447jmtXaWmpCWLS0tJMoPX111/L9u3b5bLLLqvwuG3btsmsWbPk888/N4s+9pFHHmnUPgNQfwwtAWgUmsXQQCQqKkqSkpLctz///PMmiPnHP/7hvu3VV181Qc7PP/8sJ598srmtW7du8thjj1VYp2e9jWZKHnroIbnhhhvkn//8p3kufU7NxHg+X2Xz5s2TDRs2yI4dO8xzqjfeeEN69+5tamkGDx7sDni05iY2Ntb8rVkj/b8PP/yw1/oIwIkjIwPAp77//ntZsGCBGdZxLT169HBnQVwGDhx43P+dO3eujBo1Stq1a2cCDA0ujh49Krm5uXV+/h9//NEEMK4gRvXq1csUCet9noGSK4hRycnJcujQoQa9ZgCNh4wMAJ/SmpZx48bJo48+etx9Giy4aB2MJ62vueCCC+TGG280WZHExERZunSpTJw40RQDa+bHm8LCwir8rZkezdIA8C8EMgAajQ73lJSUVLjt1FNPlY8++shkPEJD6/4RtGbNGhNIPPHEE6ZWRr3//vu1Pl9lPXv2lD179pjFlZX54YcfTO2OZmYAOAtDSwAajQYrK1euNNkUnZWkgcikSZNMoe0VV1xhalJ0OOmrr74yM45qCkK6du0qRUVF8txzz5niXJ1R5CoC9nw+zfhoLYs+X1VDTuecc46Z+XTVVVfJ2rVrZdWqVXL11VfLmWeeKYMGDWqUfgDQeAhkADQanTUUEhJiMh16LBed9ty2bVszE0mDltGjR5ugQot4tUbFlWmpSv/+/c30ax2S6tOnj7z99tsyffr0Co/RmUta/KszkPT5KhcLu4aIZs+eLQkJCTJixAgT2HTu3Fnee++9RukDAI0ryLIsq5GfAwAAoFGQkQEAAI5FIAMAAByLQAYAADgWgQwAAHAsAhkAAOBYBDIAAMCxCGQAAIBjEcgAAADHIpABAACORSADAAAci0AGAAA4FoEMAAAQp/r/QrHAFnoZmuUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(losses)\n", "plt.xlabel(\"Iteration\")\n", "plt.ylabel(\"Loss\")\n", "plt.title(\"Lens Optimization: Spot Size Reduction\")\n", "plt.grid(alpha=0.25)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "optiland (3.13.2)", "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.13.2" } }, "nbformat": 4, "nbformat_minor": 2 }