{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Field projections\n",
"\n",
"This tutorial will show you how to use field projections to obtain electromagnetic field data far away from a structure with knowledge of only near-field data.\n",
"\n",
"When projecting fields, geometric approximations can be invoked to allow computing fields far away from the structure quickly and with good accuracy, but in `Tidy3D` we can also turn these approximations off when projecting fields at intermediate distances away, which gives a lot of flexibility.\n",
"\n",
"These field projections are particularly useful for eliminating the need to simulate large regions of empty space around a structure. \n",
"\n",
"In this notebook, we will\n",
"\n",
"* show how to compute projected fields on your local machine after a simulation is run, or on our servers during the simulation run\n",
"\n",
"* show how to extract various quantities related to projected fields such as fields in different coordinate systems, power, and radar cross section.\n",
"\n",
"* demonstrate how, when far field approximations are used, the fields can dynamically be re-projected to new distances without having to run a new simulation.\n",
"\n",
"* study when geometric far field approximations should and should not be invoked, depending on the projection distance and the geometry of the structure.\n",
"\n",
"* show how to set up projections for finite-sized objects (e.g., scattering at a sphere) vs. thin but large-area structures (e.g., metasurfaces).\n",
"\n",
"## Table of contents\n",
"1. [Simulation setup](#setup)\n",
"2. [Far-field projector setup](#farfield1)\n",
"3. [Server-side far field projection](#farfieldserver1)\n",
"4. [Coordinate system conversion, power computation](#powercoords)\n",
"5. [Re-projection to a new far field distance](#reproj)\n",
"6. [Exact field projections without making the far-field approximation](#exact)\n",
"7. [Projection to a grid defined in reciprocal space](#kspace)\n",
"8. [Some final notes](#notes)\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
[12:21:52] WARNING This version of Tidy3D was pip installed from the 'tidy3d-beta' repository on __init__.py:103\n",
" PyPI. Future releases will be uploaded to the 'tidy3d' repository. From now on, \n",
" please use 'pip install tidy3d' instead. \n",
"
\n"
],
"text/plain": [
"\u001b[2;36m[12:21:52]\u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m This version of Tidy3D was pip installed from the \u001b[32m'tidy3d-beta'\u001b[0m repository on \u001b]8;id=99272;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=334253;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py#103\u001b\\\u001b[2m103\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[2;36m \u001b[0m PyPI. Future releases will be uploaded to the \u001b[32m'tidy3d'\u001b[0m repository. From now on, \u001b[2m \u001b[0m\n",
"\u001b[2;36m \u001b[0m please use \u001b[32m'pip install tidy3d'\u001b[0m instead. \u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"
INFO Using client version: 1.9.0rc1 __init__.py:121\n",
"
\n"
],
"text/plain": [
"\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using client version: \u001b[1;36m1.9\u001b[0m.0rc1 \u001b]8;id=638085;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=575764;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py#121\u001b\\\u001b[2m121\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# standard python imports\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# tidy3d imports\n",
"import tidy3d as td\n",
"import tidy3d.web as web\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## Far Field for a Uniformly Illuminated Aperture \n",
"\n",
"First, we will consider the simple case of an aperture in a perfect electric conductor sheet illuminated by a plane wave. The far fields in this case are known analytically, which allows for a straightforward comparison to `Tidy3D`'s field projection functionality. We will show how to compute the far fields both on your local machine, and on the server. The geometry is shown below.\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Geometry setup"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# size of the aperture (um)\n",
"width = 1.5\n",
"height = 2.5\n",
"\n",
"# free space central wavelength (um)\n",
"wavelength = 0.75\n",
"# center frequency\n",
"f0 = td.C_0 / wavelength\n",
"\n",
"# Define materials\n",
"air = td.Medium(permittivity=1)\n",
"pec = td.PECMedium()\n",
"\n",
"# PEC plate thickness\n",
"thick = 0.2\n",
"\n",
"# FDTD grid resolution\n",
"min_cells_per_wvl = 20\n",
"\n",
"# create the PEC plate\n",
"plate = td.Structure(\n",
" geometry=td.Box(size=[td.inf, thick, td.inf], center=[0, 0, 0]), medium=pec\n",
")\n",
"\n",
"# create the aperture in the plate\n",
"aperture = td.Structure(\n",
" geometry=td.Box(size=[width, 1.5 * thick, height], center=[0, 0, 0]), medium=air\n",
")\n",
"\n",
"# make sure to append the aperture to the plate so that it overrides that region of the plate\n",
"geometry = [plate, aperture]\n",
"\n",
"# define the boundaries as PML on all sides\n",
"boundary_spec = td.BoundarySpec.all_sides(boundary=td.PML())\n",
"\n",
"# set the total domain size in x, y, and z\n",
"sim_size = [width * 2, 2, height * 2]\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Source setup\n",
"For our incident field, we create a plane wave incident from the left, with the electric field polarized in the -z direction."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# bandwidth in Hz\n",
"fwidth = f0 / 10.0\n",
"\n",
"# Gaussian source offset; the source peak is at time t = offset/fwidth\n",
"offset = 4.0\n",
"\n",
"# time dependence of source\n",
"gaussian = td.GaussianPulse(freq0=f0, fwidth=fwidth, offset=offset)\n",
"\n",
"# place the source to the left, propagating in the +y direction\n",
"offset_src = -0.3\n",
"source = td.PlaneWave(\n",
" center=(0, offset_src, -0),\n",
" size=(td.inf, 0, td.inf),\n",
" source_time=gaussian,\n",
" direction=\"+\",\n",
" pol_angle=np.pi / 2,\n",
")\n",
"\n",
"# Simulation run time past the source decay (around t=2*offset/fwidth)\n",
"run_time = 40 / fwidth\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create monitor\n",
"\n",
"First, we'll see how to do field projections using your machine after you've downloaded near fields from a `Tidy3D` simulation.\n",
"\n",
"We create a surface [FieldMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc1/_autosummary/tidy3d.FieldMonitor.html) just to the right of the aperture to capture the near field data in the frequency domain."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"offset_mon = 0.3\n",
"monitor_near = td.FieldMonitor(\n",
" center=[0, offset_mon, 0], size=[td.inf, 0, td.inf], freqs=[f0], name=\"near_field\"\n",
")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create Simulation\n",
"\n",
"Now we can put everything together and define the simulation with a simple uniform mesh, and then we'll visualize the geometry to make sure everything looks right."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlwAAAE8CAYAAAAVAG93AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQ2klEQVR4nO3de5gjVZ0+8LcqdUk6l06603ODAbko4KAwDAM6CAiOgLDKrMDCrnLTRYURf4i6wiMLgouzKuCsMKKwIiuIy+qzgiusCgiCiC7XXUARUZGBYZhJT9K5dCdVlTq/P5rKJOncO5VKOu+Hpx+m05XkJNV96s2pU98jCSEEiIiIiMg1stcNICIiIlroGLiIiIiIXMbARUREROQyBi4iIiIilzFwEREREbmMgYuIiIjIZQxcRERERC5j4CIiIiJyGQMXERERkcsYuPrUAw88AEmS8MADD3jdFCIichn7/IWPgctjX//613HzzTd73YyO3Hbbbdi4caPXzajwrW99C/vttx/8fj/e+MY34tprr235voVCAZ/97GexbNkyBAIBHHroobjnnntqbvurX/0K73jHOzAyMoIlS5bgE5/4BLLZbLdeBhEtUOzzu2ug+nxBnlqxYoU48sgj59xeLBbFzMyMKBaLvW9Ui0444QSx++67e92Mkm984xsCgDjppJPEDTfcIE4//XQBQPzzP/9zS/c/7bTThKIo4tOf/rT45je/Kd7+9rcLRVHEQw89VLHdk08+Kfx+v1i5cqW4/vrrxec+9zmh67o47rjj3HhZRLSAsM/vnkHr8/sicGWzWa+b4Jl6f3yDoJ/++Kanp8X4+Lg44YQTKm7/wAc+IILBoNixY0fD+//mN78RAMRXvvKV0m0zMzNir732Em9/+9srtn3Pe94jli5dKqampkq33XjjjQKA+OlPf9qFV0O0sLHPP9LrZnSEff78+vyuB66XX35ZfOhDHxJLly4VmqaJN7zhDeJjH/uYKBQKQgghvv3tbwsA4oEHHhDnnnuumJiYENFotHT/TZs2iTe/+c1C0zSxdOlScd5554lkMlnxHM8//7x4//vfLxYvXix0XRe77LKLOPXUU0UqlSpt87Of/UwcdthhYnR0VASDQfGmN71JXHzxxU3b38r98vm8uPTSS8Vee+0lNE0Tu+66q/jMZz4j8vn8nMe75ZZbxOrVq0UgEBDRaFQcfvjhpR20++67CwAVX84f4v333y8AiPvvv7/i8f7jP/5DHHTQQcLv94vx8XHxgQ98QLz88ssV25x55pkiGAyKl19+WZx44okiGAyKeDwuPvWpTwnLspq+B3fccYc4/vjjS/twzz33FFdccUXFfY888sg5bW/0h3jTTTcJAOJb3/pWxe1XXnmlACDuuuuupu1q5K677qr5OL/61a8EAHHLLbc0vP9nPvMZ4fP5Kv6ghBDii1/8ogAgXnrpJSGEEFNTU0JRFPGZz3ymYrtCoSBCoZD48Ic/PK/XQTRo2OdXYp8/64gjjhBvfetba/7sTW96kzjmmGOatquRQezzlfZOQDa2ZcsWHHLIIUilUvjIRz6CfffdF6+88gp+8IMfYHp6GpqmlbY977zzMDExgUsvvRS5XA4A8PnPfx6XX3451q5di3PPPRe///3vcf311+PRRx/Fww8/DFVVYRgGjj32WBQKBZx//vlYsmQJXnnlFfz4xz9GKpXC6Ogonn32WfzVX/0V3vrWt+KKK66Arut44YUX8PDDDzdsfyv3s20b73vf+/DLX/4SH/nIR7Dffvvh6aefxle/+lU8//zzuOOOO0rbXn755fj85z+PNWvW4IorroCmafjNb36Dn//85zjmmGOwceNGnH/++QiFQvjc5z4HAFi8eHHd9t188804++yzsXr1amzYsAGvvfYa/uVf/gUPP/wwnnzySUSj0dK2xWIRxx57LA499FBcddVVuPfee3H11Vdjr732wrnnntvwfbj55psRCoVw4YUXIhQK4ec//zkuvfRSpNNpfOUrXwEAfO5zn8PU1BRefvllfPWrXwUAhEKhuo959tln4z//8z9x4YUX4t3vfjeWL1+Op59+Gpdffjk+/OEP4/jjjy9tm0wmUSwWG7YRAEZGRjAyMgIAePLJJwEABx98cMU2q1atgizLePLJJ/HBD36w7mM9+eSTeNOb3oRIJFJx+yGHHAIAeOqpp0pttixrzvNomoYDDzyw1A6iYcA+n31+PaeffjrOOeccPPPMM9h///1Ltz/66KN4/vnncckll5RuG5o+v+Vo1oIzzjhDyLIsHn300Tk/s21bCLHz08473vGOivS8bds2oWmaOOaYYyrOYV933XUCgLjpppuEELPnUgGI73//+3Xb8dWvflUAENu3b2+r/a3c75ZbbhGyLM85x+ucS3744YeFEEL84Q9/ELIsi7/+67+ec07eeS+EqD+8XP1pxzAMsWjRIrH//vuLmZmZ0nY//vGPBQBx6aWXlm4788wzBQBxxRVXVDzmypUrxapVqxq/CWJ2qLbaRz/6UTEyMlLxia7d4eVXX31VjI2NiXe/+92iUCiIlStXit12223OJ4xanwJrfV122WWl+6xfv174fL6azzsxMSFOO+20hm1bsWKFOProo+fc/uyzzwoA4hvf+IYQQojvf//7AoB48MEH52x7yimniCVLljR7G4gWDPb57PPrSaVSwu/3i89+9rMVt3/iE58QwWCw4rTysPT5XbtK0bZt3HHHHXjve987JwkCgCRJFd+fc8458Pl8pe/vvfdeGIaBCy64ALIsV2wXiURw1113AQBGR0cBAD/96U8xPT1dsy1O6r/zzjth23bLr6GV+33/+9/Hfvvth3333ReJRKL0dfTRRwMA7r//fgDAHXfcAdu2cemll1a8HmDue9GKxx57DNu2bcN5550Hv99fuv2EE07AvvvuW3p/yn3sYx+r+P7www/Hn/70p6bPFQgESv/OZDJIJBI4/PDDMT09jeeee67ttjuWLFmCTZs24Z577sHhhx+Op556CjfddNOcTxjf/e53cc899zT9OuOMM0r3mZmZqfg0Xc7v92NmZqZh22ZmZqDres37Oj8v/3+9bZs9D9FCwT6ffX4jo6OjOPHEE/G9730PQggAs6Nwt99+O9atW4dgMFjadlj6/K6dUty+fTvS6XTF0GEje+yxR8X3f/nLXwAA++yzT8XtmqZhzz33LP18jz32wIUXXohrrrkG3/3ud3H44Yfjfe97Hz74wQ+W/jBPPfVU/Ou//iv+/u//HhdddBHe9a534f3vfz9OPvnkOX8I5Vq53x/+8Af87ne/w8TERM3H2LZtGwDgj3/8I2RZxpvf/OaW3o9m6r0/ALDvvvvil7/8ZcVtfr9/ThtjsRiSyWTT53r22WdxySWX4Oc//znS6XTFz6amptpteoXTTjsNt956K+666y585CMfwbve9a452xx22GFtP24gEIBhGDV/ls/nKzqUevcvFAo17+v8vPz/9bZt9jxECwX7/Fns8+s744wzcPvtt+Ohhx7CEUccgXvvvRevvfYaTj/99IrthqXP7+ocrnbM58B09dVX46yzzsKdd96Jn/3sZ/jEJz6BDRs24Ne//jV23XVXBAIBPPjgg7j//vtx11134Sc/+Qluv/12HH300fjZz35W8Smruk3N7mfbNt7ylrfgmmuuqfkYy5cv7/h1dVO919hMKpXCkUceiUgkgiuuuAJ77bUX/H4/nnjiCXz2s59t69NjLZOTk3jssccAAL/97W9h2/acDnH79u0tnc8PhUKlOQRLly5FsVjEtm3bsGjRotI2hmFgcnISy5Yta/hYS5cuxSuvvDLn9ldffRUASvdfunRpxe3V2zZ7HqJhxT7fXf3Y5x977LFYvHgxbr31VhxxxBG49dZbsWTJEqxdu7Ziu6Hp81s++dhEsVgUkUhEnHjiiQ23c87nV5/zv+222wQAcffdd1fcXigUxOjoqDjppJPqPubDDz8sAIjPfe5zdbdxroa75557mr+YBvc7/vjjxS677FJxTr6Wr3zlKwKAePLJJxtut//++7d0Pt+58uLrX//6nG3322+/ivP0zhUr1S677DLRbJf/8Ic/FADEL37xi4rbb7jhhjlX0PzVX/1V25cIn3rqqWJkZERs2LBBABBXX331nG06OZ/vzGuovmLF+d34zne+07Bdn/70p2teseLsf+eKlVQq1fCKlQ996EPtvB1EA4t9fiX2+bV98pOfFLFYTOzYsUOEQiHxyU9+cs42w9Lnd20OlyzLWLduHf7rv/6rNIJRTrx+DreetWvXQtM0fO1rX6vY9lvf+hampqZwwgknAADS6TQsy6q471ve8hbIslwa8tuxY8ecxz/wwAMB1B4WdLRyv7/5m7/BK6+8ghtvvHHOtjMzM6Wrb9atWwdZlnHFFVfM+YRQ/vqCwSBSqVTdNjkOPvhgLFq0CN/4xjcqXsN///d/43e/+13p/Zkv51NSeRsNw8DXv/71OdsGg8G2hpt/8IMf4Pbbb8c///M/46KLLsJpp52GSy65BM8//3zFdp2czz/66KMxNjaG66+/vuKxrr/+eoyMjFS8P4lEAs8991zFfJCTTz4ZxWIRN9xwQ+m2QqGAb3/72zj00ENLn2JHR0exdu1a3HrrrchkMqVtb7nlFmSzWZxyyiktvx9Eg4x9Pvv8Vpx++ulIJpP46Ec/imw2W/PKwaHp81uOZi14+eWXxZIlS8TIyIi44IILxDe/+U3x+c9/XqxYsaJUV6Xepx0hdqbxY445Rlx33XXi/PPPFz6fT6xevVoYhiGEmE3ju+yyi7jgggvE17/+dfG1r31NrF69WqiqKh555BEhhBD/7//9P7Fy5UpxySWXiBtvvFFceeWVYpdddhG77rprRd2Waq3cr1gsiuOPP15IkiROO+00ce2114qNGzeKj33sY2JsbKzidf3jP/6jACDWrFkjrrrqKnHttdeKM844Q1x00UWlbc477zwhSZL4whe+IL73ve+J++67TwhRuyaL894deuihYuPGjeLiiy8WIyMj4g1veENF3Zr5fNpJJBIiFouJ3XffXVx99dXimmuuEStXrhQHHHDAnPZ8+ctfFgDEJz/5SXHbbbeJH/3oR3Uf97XXXhPxeFwcddRRpU+KiURCLF68WLz97W/vSnXlTZs2CQDi5JNPFjfeeKM444wzBABx5ZVXVmznvA/V9W5OOeWU0ieZb37zm2LNmjVCUZQ5n/wef/xxoet6RdVhv98/77oyRIOGfT77/Fbsv//+AoDYb7/9Wtq+VYPW53e98Olf/vIXccYZZ4iJiQmh67rYc889xfr16+cUwav1xyfE7CXB++67r1BVVSxevFice+65Fb9Yf/rTn8SHPvQhsddeewm/3y/GxsbEUUcdJe69997SNvfdd5848cQTxbJly4SmaWLZsmXib//2b8Xzzz/fsO2t3s8wDPGlL31JrFixQui6LmKxmFi1apW4/PLL5wxP3nTTTWLlypWl7Y488siKIe6tW7eKE044QYTDYQE0L4J3++23lx5vbGysYRG8aq388QkxOyT7tre9TQQCAbFs2TLxD//wD+KnP/3pnPZks1nxd3/3dyIajQo0KYL3/ve/X4TDYfHiiy9W3H7nnXcKAOJLX/pS03a14oYbbhD77LOP0DRN7LXXXuKrX/3qnFMB9f74ZmZmxKc//WmxZMkSoeu6WL16tfjJT35S83keeughsWbNGuH3+8XExIRYv369SKfTXXkNRIOEfT77/GacoPbFL36xpe3bMUh9viREk3FfIiIiog79y7/8Cz75yU/ixRdfxG677eZ1czzDwEVERESuEELggAMOwPj4eKlm2bDyrCwEERERLUy5XA4/+tGPcP/99+Ppp5/GnXfe6XWTPMcRLiIiIuqqF198EXvssQei0SjOO+88XHnllV43yXMMXEREREQu61odLiIiIiKqjYGLiIiIyGVDNWnetm1s2bIF4XC4o9XbyXtCCGQyGSxb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uee8biYREXUB+3zqFcXrBvSbT33qUzjrrLMabrPnnnv2pjEtisfj8Pl8eO211ypuf+2117BkyRKPWkVE1P8Grc9nfz+4GLiqTExMYGJiwutmtEXTNKxatQr33XdfaXKibdu477778PGPf9zbxhER9bFB6/PZ3w8uBq55eOmll7Bjxw689NJLKBaLeOqppwAAe++9N0KhUE/bcuGFF+LMM8/EwQcfjEMOOQQbN25ELpfD2Wef3dN21JLNZvHCCy+Uvv/zn/+Mp556CmNjY9htt908bBkRUev6pc9nfz+gBHXszDPPFADmfN1///2etOfaa68Vu+22m9A0TRxyyCHi17/+tSftqHb//ffXfJ/OPPNMr5tGRNSyfurz2d8PHtbhIiIiInIZr1IkIiIichkDFxEREZHLGLiIiIiIXMbARUREROQyBi4iIiIilzFwEREREbmMgYuIiIjIZQxcRERERC5j4CIiIiJyGQMXERERkcsYuIiIiIhcxsC1AHznO9/B+Pg4CoVCxe3r1q3D6aef7lGriIio27Zv344lS5bgi1/8Yum2X/3qV9A0Dffdd5+HLaNmuHj1AjAzM4OlS5fixhtvxCmnnAIA2LZtG3bZZRf87Gc/w1FHHeVxC4mIqFvuvvturFu3Dr/61a+wzz774MADD8SJJ56Ia665xuumUQMMXAvEeeedhxdffBF33303AOCaa67Bpk2b8MILL0CSJI9bR0RE3bR+/Xrce++9OPjgg/H000/j0Ucfha7rXjeLGmDgWiCefPJJrF69Gn/5y1+wyy674K1vfStOOeUU/OM//qPXTSMioi6bmZnB/vvvj82bN+Pxxx/HW97yFq+bRE1wDtcCsXLlShxwwAH4zne+g8cffxzPPvsszjrrLK+bRURELvjjH/+ILVu2wLZtvPjii143h1rAEa4F5Prrr8fGjRvx7ne/G3/4wx/w05/+1OsmERFRlxmGgUMOOQQHHngg9tlnH2zcuBFPP/00Fi1a5HXTqAEGrgVkamoKy5Ytg2VZ+M53voNTTz3V6yYREVGXfeYzn8EPfvAD/O///i9CoRCOPPJIjI6O4sc//rHXTaMGeEpxARkdHcVJJ52EUCiEdevWed0cIiLqsgceeAAbN27ELbfcgkgkAlmWccstt+Chhx7C9ddf73XzqAGOcC0w73rXu7BixQp87Wtf87opRERE9DoGrgUimUzigQcewMknn4zf/va32GeffbxuEhEREb1O8boB1B0rV65EMpnEl770JYYtIiKiPsMRLiIiIiKXcdI8ERERkcsYuIiIiIhcxsBFRERE5DIGLiIiIiKXMXARERERuYyBi4iIiMhlDFxERERELmPgIiIiInLZ/werVcGeBhmqxAAAAABJRU5ErkJggg==\n",
"text/plain": [
"