Skip to content
Snippets Groups Projects
MetaVoxel_Tutorial.ipynb 152 KiB
Newer Older
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MetaVoxel Tutorial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Amira Abdel-Rahman\n",
    "# (c) Massachusetts Institute of Technology 2020\n",
    "\n",
    "# tested using julia 1.5.2 and windows Nvidia geforce gtx 1070 Ti"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import Julia Libraries"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "execution_count": 1,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "source": [
    "using LinearAlgebra\n",
    "import JSON\n",
    "using StaticArrays, BenchmarkTools\n",
    "using Base.Threads\n",
    "using CUDA\n",
    "import Base: +, * , -, ^"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "execution_count": 2,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "outputs": [
    {
     "data": {
      "text/plain": [
       "axialStrain (generic function with 1 method)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "source": [
    "include(\"./julia/include/vector.jl\") #utils for vectors and quaternions\n",
    "include(\"./julia/include/material.jl\") #utils for node and edge material\n",
    "include(\"./julia/include/export.jl\") #export simulation data to json\n",
    "include(\"./julia/include/run.jl\") #turn setup to cuda arrays and run simulation\n",
    "include(\"./julia/include/updateEdges.jl\") #edges properties update\n",
    "include(\"./julia/include/externalForces.jl\") #external forces applied to the system\n",
    "include(\"./julia/include/forces.jl\") #force integration\n",
    "include(\"./julia/include/updateNodes.jl\") #nodes properties update"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "execution_count": 3,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"tutorial\""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "source": [
    "name= \"tutorial\" # set name for simulation"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Voxel Design"
   ]
  },
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "### 1.a. Option 1: Import lines from Rhino (.3dm)"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 5,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "rhino=true\n",
    "\n",
    "setup = Dict()\n",
    "\n",
    "setup[\"rhino\"]=rhino\n",
    "setup[\"rhinoFileName\"]=\"./julia/examples/trial.3dm\";\n",
    "setup[\"layerIndex\"]=\"1\"; #layer index to import, only lines from these layer will get imported\n",
    "setup[\"voxelList\"]=false\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "\n",
    "# make sure to divide curves into smaller lines, it will only add nodes at the start and end of each line/curve\n",
    "\n",
    "voxelSize=75 #in case you want to array the base rhino curve, what is the size of the voxel\n",
    "latticeSizeX=2 # if you don't want to copy/array make this 1\n",
    "latticeSizeY=2 # if you don't want to copy/array make this 1\n",
    "latticeSizeZ=2 # if you don't want to copy/array make this 1\n",
    "\n",
    "setup[\"latticeSizeX\"]=latticeSizeX\n",
    "setup[\"latticeSizeY\"]=latticeSizeY\n",
    "setup[\"latticeSizeZ\"]=latticeSizeZ\n",
    "\n",
    "gridSize=10 #lattice size\n",
    "setup[\"gridSize\"]=gridSize\n",
    "\n",
    "#scaling params\n",
    "setup[\"voxelSize\"]=voxelSize; #voxel size\n",
    "setup[\"scale\"]=1e4; #scale for visualization\n",
    "setup[\"hierarchical\"]=false; #hierachical simualtion\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "### 1.b Option 2: Draw Cuboct/Hierachical Lattice"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 6,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "rhino=false\n",
    "\n",
    "voxelSize=0.001\n",
    "latticeSizeX=7\n",
    "latticeSizeY=2\n",
    "latticeSizeZ=2\n",
    "\n",
    "gridSize=10\n",
    "\n",
    "setup = Dict()\n",
    "setup[\"gridSize\"]=gridSize\n",
    "\n",
    "setup[\"rhino\"]=false\n",
    "setup[\"voxelList\"]=false\n",
    "\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "\n",
    "setup[\"latticeSizeX\"]=latticeSizeX\n",
    "setup[\"latticeSizeY\"]=latticeSizeY\n",
    "setup[\"latticeSizeZ\"]=latticeSizeZ\n",
    "\n",
    "#scaling params\n",
    "setup[\"voxelSize\"]=voxelSize; #voxel size\n",
    "setup[\"scale\"]=1e4; #scale for visualization\n",
    "setup[\"hierarchical\"]=true; #hierachical simualtion \n",
    "# if setup[\"hierarchical\"] is true it will assume each voxel is one node, \n",
    "# else it will assume each voxel is a detailed cuboct"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "### 1.c. Option 3: Draw from voxel list"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "false"
      ]
     },
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "voxelSize=0.001\n",
    "latticeSizeX=1\n",
    "latticeSizeY=1\n",
    "latticeSizeZ=1\n",
    "\n",
    "gridSize=10\n",
    "\n",
    "setup[\"rhino\"]=false;\n",
    "setup[\"useVoxelList\"]=true;\n",
    "\n",
    "#//allowed x, yand z are from -gridSize to +gridSize (floor is at 0)\n",
    "setup[\"voxelList\"]=[\n",
    "        [[0,3,0],material1],# will explain materials next section\n",
    "        [[0,3,1],material1],# \n",
    "        [[0,3,2],material1],# \n",
    "        [[0,3,3],material1],# \n",
    "        [[0,3,4],material1],# \n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.d. Option 4: Fill mesh with voxels (wip)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# rhino=false\n",
    "# rhinoFileName= \"./trial.stl\"\n",
    "# voxelSize=5.0"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Boundary Conditions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.a. Global Settings"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 9,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "#simulation params\n",
    "setup[\"numTimeSteps\"]=5000; #num of saved timesteps for simulation\n",
    "\n",
    "setup[\"poisson\"]=false; # account for poisson ration (only for hierarchical)\n",
    "setup[\"linear\"]=true; # linear vs non-linear\n",
    "setup[\"thermal\"]=true; #if there is change in temperature\n",
    "setup[\"globalDamping\"]=0.15; # (usually from 0.1 to 0.4)\n",
    "\n",
    "\n",
    "#visualization params\n",
    "setup[\"maxNumFiles\"]=200; #num of saved timesteps for visualization, make sure it's bigger than numTimeSteps\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.b. Materials"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 10,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "#default material\n",
    "material1= Dict()\n",
    "material1[\"area\"]=voxelSize*voxelSize\n",
    "material1[\"density\"]=1e3\n",
    "material1[\"stiffness\"]=1e6\n",
    "material1[\"poissonRatio\"]=0.0\n",
    "material1[\"cTE\"]=0.0 #coefficient of thermal expansion\n",
    "\n",
    "#large bounding box for default material\n",
    "boundingBoxMaterial1=Dict()\n",
    "boundingBoxMaterial1[\"min\"]=Dict()\n",
    "boundingBoxMaterial1[\"max\"]=Dict()\n",
    "\n",
    "boundingBoxMaterial1[\"min\"][\"x\"]=-voxelSize*gridSize;\n",
    "boundingBoxMaterial1[\"min\"][\"y\"]=-voxelSize*gridSize;\n",
    "boundingBoxMaterial1[\"min\"][\"z\"]=-voxelSize*gridSize;\n",
    "\n",
    "boundingBoxMaterial1[\"max\"][\"x\"]= voxelSize*gridSize;\n",
    "boundingBoxMaterial1[\"max\"][\"y\"]= voxelSize*gridSize;\n",
    "boundingBoxMaterial1[\"max\"][\"z\"]= voxelSize*gridSize;"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 11,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "#second material\n",
    "material2= Dict()\n",
    "material2[\"area\"]=voxelSize*voxelSize\n",
    "material2[\"density\"]=1e3\n",
    "material2[\"stiffness\"]=1e6\n",
    "material2[\"poissonRatio\"]=0.0\n",
    "material2[\"cTE\"]=0.1 #coefficient of thermal expansion\n",
    "\n",
    "#bounding box material 2\n",
    "boundingBoxMaterial2=Dict()\n",
    "boundingBoxMaterial2[\"min\"]=Dict()\n",
    "boundingBoxMaterial2[\"max\"]=Dict()\n",
    "\n",
    "\n",
    "boundingBoxMaterial2[\"min\"][\"x\"]=0;\n",
    "boundingBoxMaterial2[\"min\"][\"y\"]=voxelSize;\n",
    "boundingBoxMaterial2[\"min\"][\"z\"]=0;\n",
    "\n",
    "boundingBoxMaterial2[\"max\"][\"x\"]= voxelSize*(latticeSizeX);\n",
    "boundingBoxMaterial2[\"max\"][\"y\"]= voxelSize*(latticeSizeY);\n",
    "boundingBoxMaterial2[\"max\"][\"z\"]= voxelSize*(latticeSizeZ);"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 12,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "setup[\"materials\"]=[\n",
    "    [boundingBoxMaterial1,material1],\n",
    "    [boundingBoxMaterial2,material2]\n",
    "];"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.c. Supports"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 13,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "#x,y,z,rx,ry,rz (default is pinned joing i.e [false,false,false,true,true,true])\n",
    "dof=[true,true,true,true,true,true]\n",
    "\n",
    "boundingBoxSupport1=Dict()\n",
    "boundingBoxSupport1[\"min\"]=Dict()\n",
    "boundingBoxSupport1[\"max\"]=Dict()\n",
    "\n",
    "\n",
    "boundingBoxSupport1[\"min\"][\"x\"]= 0;\n",
    "boundingBoxSupport1[\"min\"][\"y\"]= 0;\n",
    "boundingBoxSupport1[\"min\"][\"z\"]= 0;\n",
    "\n",
    "boundingBoxSupport1[\"max\"][\"x\"]= voxelSize;\n",
    "boundingBoxSupport1[\"max\"][\"y\"]= voxelSize*(latticeSizeY);\n",
    "boundingBoxSupport1[\"max\"][\"z\"]= voxelSize*(latticeSizeZ);\n",
    "\n",
    "setup[\"supports\"]=[\n",
    "        [boundingBoxSupport1,dof]\n",
    "    ];"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.d. Loads"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.d.1 Static Loads"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 14,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "load1=Dict()\n",
    "load1[\"x\"]=0.0\n",
    "load1[\"y\"]=0.0\n",
    "load1[\"z\"]=0.0\n",
    "\n",
    "boundingBoxLoad1=Dict()\n",
    "boundingBoxLoad1[\"min\"]=Dict()\n",
    "boundingBoxLoad1[\"max\"]=Dict()\n",
    "\n",
    "boundingBoxLoad1[\"min\"][\"x\"]=voxelSize*(latticeSizeX-1);\n",
    "boundingBoxLoad1[\"min\"][\"y\"]=0;\n",
    "boundingBoxLoad1[\"min\"][\"z\"]=0;\n",
    "\n",
    "boundingBoxLoad1[\"max\"][\"x\"]=voxelSize*(latticeSizeX);\n",
    "boundingBoxLoad1[\"max\"][\"y\"]=voxelSize*(latticeSizeY);\n",
    "boundingBoxLoad1[\"max\"][\"z\"]=voxelSize*(latticeSizeZ);\n",
    "\n",
    "\n",
    "setup[\"loads\"]=[\n",
    "        [boundingBoxLoad1,load1]\n",
    "    ];"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.d.2 Fixed Displacements"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 15,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [],
   "source": [
    "setup[\"fixedDisplacements\"]=[];"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.d.3 Dynamic Loads"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 62,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "updateTemperature (generic function with 1 method)"
      ]
     },
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
     "execution_count": 62,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function floorEnabled()\n",
    "    return false\n",
    "end\n",
    "\n",
    "function gravityEnabled()\n",
    "    return false\n",
    "end\n",
    "\n",
    "function externalDisplacement(currentTimeStep,N_position,N_fixedDisplacement)\n",
    "    return N_fixedDisplacement\n",
    "end\n",
    "\n",
    "function externalForce(currentTimeStep,N_position,N_force)\n",
    "    if currentTimeStep>2500\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "        return Vector3(0,0,0)\n",
    "    else\n",
    "        return N_force\n",
    "    end\n",
    "end\n",
    "\n",
    "# function externalForce(currentTimeStep,N_position,N_force)\n",
    "#     return N_force\n",
    "# end\n",
    "\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "# if no temperature:\n",
    "# function updateTemperature(currentRestLength,currentTimeStep,mat)\n",
    "#     return currentRestLength\n",
    "# end\n",
    "\n",
    "function updateTemperature(currentRestLength,currentTimeStep,mat)\n",
    "    if currentTimeStep<1000\n",
    "        temp=-5.0*currentTimeStep/1000\n",
    "        currentRestLength=0.5*mat.L*(2.0+temp*mat.cTE)\n",
    "    elseif currentTimeStep==2500\n",
    "        temp=0\n",
    "        currentRestLength=0.5*mat.L*(2.0+temp*mat.cTE)\n",
    "    end\n",
    "    return currentRestLength\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Export setup to json"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "execution_count": 188,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "outputs": [
    {
     "data": {
      "text/plain": [
       "axialStrain (generic function with 1 method)"
      ]
     },
     "execution_count": 188,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "source": [
    "# alternativly you can get a saved setup from an external julia file\n",
    "# include(\"./julia/examples/thermalTest.jl\") #template for multimaterial hierarchical voxels with different thermal coefficient of thermal expansion \n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "# include(\"./julia/examples/poissonTest.jl\") #template for hierarchical voxels with global poisson ratio\n",
    "# include(\"./julia/examples/latticeTest.jl\") #template for lattice voxel (small scale)\n",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
    "# include(\"./julia/examples/latticeTest2.jl\") #template for lattice voxel (big scale with real params)\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "# include(\"./julia/examples/rhinoTest.jl\") #template for importing geometry from rhino\n",
    "# include(\"./julia/examples/rhinoTestChiral.jl\") #template for importing chiral array\n",
    "# include(\"./julia/examples/rover.jl\") #template for importing chiral array\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "# include(\"./julia/examples/wing.jl\") #template for importing chiral array\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "# include(\"./julia/examples/walkingRobot.jl\") #template for importing chiral array\n",
    "# include(\"./julia/examples/voxelDesigner.jl\") #template for importing chiral array\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "include(\"./julia/examples/puppy.jl\") #template for importing chiral array\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "\n",
    "\n",
    "## rerun these just for sanity check for dynamic loads\n",
    "include(\"./julia/include/run.jl\") #turn setup to cuda arrays and run simulation\n",
    "include(\"./julia/include/updateEdges.jl\") #edges properties update\n",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
    "# include(\"./julia/include/forces.jl\") #force integration\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "include(\"./julia/include/updateNodes.jl\") #nodes properties update"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "execution_count": 189,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loaded rhino3dm.\n",
      "Success!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Process(`\u001b[4mnode\u001b[24m \u001b[4mapp1.js\u001b[24m \u001b[4mtutorial\u001b[24m`, ProcessExited(0))"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "source": [
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "#export prev. settings to json\n",
    "fileName=\"./json/$(name)Init.json\"\n",
    "setup1=Dict()\n",
    "setup1[\"setup\"]=setup\n",
    "stringdata = JSON.json(setup1)\n",
    "open(fileName, \"w\") do f\n",
    "        write(f, stringdata)\n",
    "end\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "#run node.js to draw the gerometry using rhino3dm\n",
    "mycommand = `node app1.js $(name)`\n",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "run(mycommand)"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Run Simulation"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dt: 1.0065842913007908e-6, s: 0.001, mass: 4.0e-7, momentInertiaInverse: 3.75e12\n",
      "first timestep took 5.2358389 seconds\n",
      "ran 196 nodes and 412 edges for 150000 time steps took 73.629313 seconds\n"
     ]
   "source": [
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    "folderPath=\"./json/tutorial/\" # make sure this folder exists\n",
    "name=\"tutorial\"\n",
    "setupSim=getSetup(name);\n",
    "runMetavoxelGPULive!(setupSim,folderPath)"
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Visualize \n",
    "(only need to run it once to open the server then press stop, the server will keep running and other changes will update automatically.. will change later)"
   ]
  },
  {
   "cell_type": "code",
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
   "execution_count": 16,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [
    {
Amira Abdel-Rahman (admin)'s avatar
Amira Abdel-Rahman (admin) committed
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Server listening on port 8080\n",
      "Open http://localhost:8080/demos/indexTutorial.html in your browser\n"
     ]
    },
    {
     "ename": "LoadError",
     "evalue": "InterruptException:",
     "output_type": "error",
     "traceback": [
      "InterruptException:",
      "",
      "Stacktrace:",
      " [1] try_yieldto(::typeof(Base.ensure_rescheduled)) at .\\task.jl:656",
      " [2] wait at .\\task.jl:713 [inlined]",
      " [3] wait(::Base.GenericCondition{SpinLock}) at .\\condition.jl:106",
      " [4] wait(::Base.Process) at .\\process.jl:621",
      " [5] success at .\\process.jl:483 [inlined]",
      " [6] run(::Cmd; wait::Bool) at .\\process.jl:440",
      " [7] run(::Cmd) at .\\process.jl:438",
      " [8] top-level scope at In[16]:3",
      " [9] include_string(::Function, ::Module, ::String, ::String) at .\\loading.jl:1091"
     ]
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
    }
   ],
   "source": [
    "#run node.js to serve the indexTutorial.html for visualizarion\n",
    "mycommand = `node serve.js $(name)`\n",
    "run(mycommand)\n",
    "\n",
    "# vis 1 stable\n",
    "# http://localhost:8080/demos/indexTutorial.html\n",
    "\n",
    "# vis 2 faster for larger simulations\n",
    "# http://localhost:8080/demos/indexTutorialGraph.html\n",
    "\n",
    "# vis 3 (GPU Shaders) even faster (max 40 timesteps)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 Plotting Node Displacements"
   ]
  },
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
  {
   "cell_type": "code",
   "execution_count": 21,
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "plotDisplacementTroughTimeSteps (generic function with 2 methods)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "using Plots\n",
    "include(\"./julia/include/plotViz.jl\") #plotting\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 338,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip380\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<path clip-path=\"url(#clip380)\" d=\"\n",
       "M0 1600 L2400 1600 L2400 0 L0 0  Z\n",
       "  \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip381\">\n",
       "    <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<path clip-path=\"url(#clip380)\" d=\"\n",
       "M207.825 1486.45 L2352.76 1486.45 L2352.76 47.2441 L207.825 47.2441  Z\n",
       "  \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip382\">\n",
       "    <rect x=\"207\" y=\"47\" width=\"2146\" height=\"1440\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  230.351,1486.45 230.351,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  612.147,1486.45 612.147,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  993.943,1486.45 993.943,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  1375.74,1486.45 1375.74,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  1757.54,1486.45 1757.54,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  2139.33,1486.45 2139.33,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,1486.45 2352.76,1486.45 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  230.351,1486.45 230.351,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  612.147,1486.45 612.147,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  993.943,1486.45 993.943,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  1375.74,1486.45 1375.74,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  1757.54,1486.45 1757.54,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  2139.33,1486.45 2139.33,1469.18 \n",
       "  \"/>\n",
       "<path clip-path=\"url(#clip380)\" d=\"M 0 0 M230.351 1515.64 Q226.74 1515.64 224.911 1519.2 Q223.105 1522.75 223.105 1529.87 Q223.105 1536.98 224.911 1540.55 Q226.74 1544.09 230.351 1544.09 Q233.985 1544.09 235.791 1540.55 Q237.619 1536.98 237.619 1529.87 Q237.619 1522.75 235.791 1519.2 Q233.985 1515.64 230.351 1515.64 M230.351 1511.93 Q236.161 1511.93 239.216 1516.54 Q242.295 1521.12 242.295 1529.87 Q242.295 1538.6 239.216 1543.21 Q236.161 1547.79 230.351 1547.79 Q224.541 1547.79 221.462 1543.21 Q218.406 1538.6 218.406 1529.87 Q218.406 1521.12 221.462 1516.54 Q224.541 1511.93 230.351 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M589.022 1543.18 L596.661 1543.18 L596.661 1516.82 L588.351 1518.49 L588.351 1514.23 L596.615 1512.56 L601.291 1512.56 L601.291 1543.18 L608.929 1543.18 L608.929 1547.12 L589.022 1547.12 L589.022 1543.18 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M623.999 1515.64 Q620.388 1515.64 618.559 1519.2 Q616.753 1522.75 616.753 1529.87 Q616.753 1536.98 618.559 1540.55 Q620.388 1544.09 623.999 1544.09 Q627.633 1544.09 629.439 1540.55 Q631.267 1536.98 631.267 1529.87 Q631.267 1522.75 629.439 1519.2 Q627.633 1515.64 623.999 1515.64 M623.999 1511.93 Q629.809 1511.93 632.864 1516.54 Q635.943 1521.12 635.943 1529.87 Q635.943 1538.6 632.864 1543.21 Q629.809 1547.79 623.999 1547.79 Q618.189 1547.79 615.11 1543.21 Q612.054 1538.6 612.054 1529.87 Q612.054 1521.12 615.11 1516.54 Q618.189 1511.93 623.999 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M975.089 1543.18 L991.408 1543.18 L991.408 1547.12 L969.464 1547.12 L969.464 1543.18 Q972.126 1540.43 976.709 1535.8 Q981.316 1531.15 982.497 1529.81 Q984.742 1527.28 985.621 1525.55 Q986.524 1523.79 986.524 1522.1 Q986.524 1519.34 984.58 1517.61 Q982.659 1515.87 979.557 1515.87 Q977.358 1515.87 974.904 1516.63 Q972.473 1517.4 969.696 1518.95 L969.696 1514.23 Q972.52 1513.09 974.973 1512.51 Q977.427 1511.93 979.464 1511.93 Q984.834 1511.93 988.029 1514.62 Q991.223 1517.31 991.223 1521.8 Q991.223 1523.93 990.413 1525.85 Q989.626 1527.74 987.52 1530.34 Q986.941 1531.01 983.839 1534.23 Q980.737 1537.42 975.089 1543.18 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M1006.48 1515.64 Q1002.87 1515.64 1001.04 1519.2 Q999.233 1522.75 999.233 1529.87 Q999.233 1536.98 1001.04 1540.55 Q1002.87 1544.09 1006.48 1544.09 Q1010.11 1544.09 1011.92 1540.55 Q1013.75 1536.98 1013.75 1529.87 Q1013.75 1522.75 1011.92 1519.2 Q1010.11 1515.64 1006.48 1515.64 M1006.48 1511.93 Q1012.29 1511.93 1015.34 1516.54 Q1018.42 1521.12 1018.42 1529.87 Q1018.42 1538.6 1015.34 1543.21 Q1012.29 1547.79 1006.48 1547.79 Q1000.67 1547.79 997.589 1543.21 Q994.533 1538.6 994.533 1529.87 Q994.533 1521.12 997.589 1516.54 Q1000.67 1511.93 1006.48 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M1366.48 1528.49 Q1369.84 1529.2 1371.71 1531.47 Q1373.61 1533.74 1373.61 1537.07 Q1373.61 1542.19 1370.09 1544.99 Q1366.57 1547.79 1360.09 1547.79 Q1357.92 1547.79 1355.6 1547.35 Q1353.31 1546.93 1350.86 1546.08 L1350.86 1541.56 Q1352.8 1542.7 1355.11 1543.28 Q1357.43 1543.86 1359.95 1543.86 Q1364.35 1543.86 1366.64 1542.12 Q1368.96 1540.38 1368.96 1537.07 Q1368.96 1534.02 1366.8 1532.31 Q1364.67 1530.57 1360.86 1530.57 L1356.83 1530.57 L1356.83 1526.73 L1361.04 1526.73 Q1364.49 1526.73 1366.32 1525.36 Q1368.15 1523.97 1368.15 1521.38 Q1368.15 1518.72 1366.25 1517.31 Q1364.37 1515.87 1360.86 1515.87 Q1358.93 1515.87 1356.73 1516.29 Q1354.54 1516.7 1351.9 1517.58 L1351.9 1513.42 Q1354.56 1512.68 1356.87 1512.31 Q1359.21 1511.93 1361.27 1511.93 Q1366.6 1511.93 1369.7 1514.37 Q1372.8 1516.77 1372.8 1520.89 Q1372.8 1523.76 1371.16 1525.75 Q1369.51 1527.72 1366.48 1528.49 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M1388.68 1515.64 Q1385.07 1515.64 1383.24 1519.2 Q1381.43 1522.75 1381.43 1529.87 Q1381.43 1536.98 1383.24 1540.55 Q1385.07 1544.09 1388.68 1544.09 Q1392.31 1544.09 1394.12 1540.55 Q1395.95 1536.98 1395.95 1529.87 Q1395.95 1522.75 1394.12 1519.2 Q1392.31 1515.64 1388.68 1515.64 M1388.68 1511.93 Q1394.49 1511.93 1397.54 1516.54 Q1400.62 1521.12 1400.62 1529.87 Q1400.62 1538.6 1397.54 1543.21 Q1394.49 1547.79 1388.68 1547.79 Q1382.87 1547.79 1379.79 1543.21 Q1376.73 1538.6 1376.73 1529.87 Q1376.73 1521.12 1379.79 1516.54 Q1382.87 1511.93 1388.68 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M1747.04 1516.63 L1735.23 1535.08 L1747.04 1535.08 L1747.04 1516.63 M1745.81 1512.56 L1751.69 1512.56 L1751.69 1535.08 L1756.62 1535.08 L1756.62 1538.97 L1751.69 1538.97 L1751.69 1547.12 L1747.04 1547.12 L1747.04 1538.97 L1731.44 1538.97 L1731.44 1534.46 L1745.81 1512.56 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M1771.69 1515.64 Q1768.08 1515.64 1766.25 1519.2 Q1764.45 1522.75 1764.45 1529.87 Q1764.45 1536.98 1766.25 1540.55 Q1768.08 1544.09 1771.69 1544.09 Q1775.32 1544.09 1777.13 1540.55 Q1778.96 1536.98 1778.96 1529.87 Q1778.96 1522.75 1777.13 1519.2 Q1775.32 1515.64 1771.69 1515.64 M1771.69 1511.93 Q1777.5 1511.93 1780.56 1516.54 Q1783.64 1521.12 1783.64 1529.87 Q1783.64 1538.6 1780.56 1543.21 Q1777.5 1547.79 1771.69 1547.79 Q1765.88 1547.79 1762.8 1543.21 Q1759.75 1538.6 1759.75 1529.87 Q1759.75 1521.12 1762.8 1516.54 Q1765.88 1511.93 1771.69 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M2116.1 1512.56 L2134.46 1512.56 L2134.46 1516.5 L2120.39 1516.5 L2120.39 1524.97 Q2121.4 1524.62 2122.42 1524.46 Q2123.44 1524.27 2124.46 1524.27 Q2130.25 1524.27 2133.63 1527.44 Q2137.01 1530.62 2137.01 1536.03 Q2137.01 1541.61 2133.53 1544.71 Q2130.06 1547.79 2123.74 1547.79 Q2121.57 1547.79 2119.3 1547.42 Q2117.05 1547.05 2114.64 1546.31 L2114.64 1541.61 Q2116.73 1542.74 2118.95 1543.3 Q2121.17 1543.86 2123.65 1543.86 Q2127.65 1543.86 2129.99 1541.75 Q2132.33 1539.64 2132.33 1536.03 Q2132.33 1532.42 2129.99 1530.31 Q2127.65 1528.21 2123.65 1528.21 Q2121.77 1528.21 2119.9 1528.62 Q2118.05 1529.04 2116.1 1529.92 L2116.1 1512.56 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M2152.07 1515.64 Q2148.46 1515.64 2146.64 1519.2 Q2144.83 1522.75 2144.83 1529.87 Q2144.83 1536.98 2146.64 1540.55 Q2148.46 1544.09 2152.07 1544.09 Q2155.71 1544.09 2157.51 1540.55 Q2159.34 1536.98 2159.34 1529.87 Q2159.34 1522.75 2157.51 1519.2 Q2155.71 1515.64 2152.07 1515.64 M2152.07 1511.93 Q2157.88 1511.93 2160.94 1516.54 Q2164.02 1521.12 2164.02 1529.87 Q2164.02 1538.6 2160.94 1543.21 Q2157.88 1547.79 2152.07 1547.79 Q2146.26 1547.79 2143.19 1543.21 Q2140.13 1538.6 2140.13 1529.87 Q2140.13 1521.12 2143.19 1516.54 Q2146.26 1511.93 2152.07 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  207.825,1288.76 2352.76,1288.76 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  207.825,1028.25 2352.76,1028.25 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  207.825,767.733 2352.76,767.733 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  207.825,507.218 2352.76,507.218 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip382)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  207.825,246.702 2352.76,246.702 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,1486.45 207.825,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,1288.76 233.564,1288.76 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,1028.25 233.564,1028.25 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,767.733 233.564,767.733 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,507.218 233.564,507.218 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  207.825,246.702 233.564,246.702 \n",
       "  \"/>\n",
       "<path clip-path=\"url(#clip380)\" d=\"M 0 0 M50.9921 1289.22 L80.6679 1289.22 L80.6679 1293.15 L50.9921 1293.15 L50.9921 1289.22 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M95.7373 1274.56 Q92.1262 1274.56 90.2975 1278.13 Q88.4919 1281.67 88.4919 1288.8 Q88.4919 1295.9 90.2975 1299.47 Q92.1262 1303.01 95.7373 1303.01 Q99.3715 1303.01 101.177 1299.47 Q103.006 1295.9 103.006 1288.8 Q103.006 1281.67 101.177 1278.13 Q99.3715 1274.56 95.7373 1274.56 M95.7373 1270.86 Q101.547 1270.86 104.603 1275.47 Q107.682 1280.05 107.682 1288.8 Q107.682 1297.53 104.603 1302.13 Q101.547 1306.72 95.7373 1306.72 Q89.9271 1306.72 86.8484 1302.13 Q83.7929 1297.53 83.7929 1288.8 Q83.7929 1280.05 86.8484 1275.47 Q89.9271 1270.86 95.7373 1270.86 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M112.751 1300.16 L117.635 1300.16 L117.635 1306.04 L112.751 1306.04 L112.751 1300.16 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M132.705 1274.56 Q129.094 1274.56 127.265 1278.13 Q125.459 1281.67 125.459 1288.8 Q125.459 1295.9 127.265 1299.47 Q129.094 1303.01 132.705 1303.01 Q136.339 1303.01 138.144 1299.47 Q139.973 1295.9 139.973 1288.8 Q139.973 1281.67 138.144 1278.13 Q136.339 1274.56 132.705 1274.56 M132.705 1270.86 Q138.515 1270.86 141.57 1275.47 Q144.649 1280.05 144.649 1288.8 Q144.649 1297.53 141.57 1302.13 Q138.515 1306.72 132.705 1306.72 Q126.894 1306.72 123.816 1302.13 Q120.76 1297.53 120.76 1288.8 Q120.76 1280.05 123.816 1275.47 Q126.894 1270.86 132.705 1270.86 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M160.297 1286.9 Q157.149 1286.9 155.297 1289.05 Q153.468 1291.21 153.468 1294.96 Q153.468 1298.68 155.297 1300.86 Q157.149 1303.01 160.297 1303.01 Q163.445 1303.01 165.274 1300.86 Q167.126 1298.68 167.126 1294.96 Q167.126 1291.21 165.274 1289.05 Q163.445 1286.9 160.297 1286.9 M169.579 1272.25 L169.579 1276.51 Q167.82 1275.67 166.015 1275.23 Q164.232 1274.79 162.473 1274.79 Q157.843 1274.79 155.39 1277.92 Q152.959 1281.04 152.612 1287.36 Q153.978 1285.35 156.038 1284.28 Q158.098 1283.2 160.575 1283.2 Q165.783 1283.2 168.792 1286.37 Q171.825 1289.52 171.825 1294.96 Q171.825 1300.28 168.677 1303.5 Q165.529 1306.72 160.297 1306.72 Q154.302 1306.72 151.13 1302.13 Q147.959 1297.53 147.959 1288.8 Q147.959 1280.6 151.848 1275.74 Q155.737 1270.86 162.288 1270.86 Q164.047 1270.86 165.829 1271.21 Q167.635 1271.55 169.579 1272.25 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M51.8023 1028.7 L81.4781 1028.7 L81.4781 1032.64 L51.8023 1032.64 L51.8023 1028.7 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M96.5474 1014.05 Q92.9363 1014.05 91.1077 1017.61 Q89.3021 1021.15 89.3021 1028.28 Q89.3021 1035.39 91.1077 1038.95 Q92.9363 1042.5 96.5474 1042.5 Q100.182 1042.5 101.987 1038.95 Q103.816 1035.39 103.816 1028.28 Q103.816 1021.15 101.987 1017.61 Q100.182 1014.05 96.5474 1014.05 M96.5474 1010.34 Q102.358 1010.34 105.413 1014.95 Q108.492 1019.53 108.492 1028.28 Q108.492 1037.01 105.413 1041.62 Q102.358 1046.2 96.5474 1046.2 Q90.7373 1046.2 87.6586 1041.62 Q84.6031 1037.01 84.6031 1028.28 Q84.6031 1019.53 87.6586 1014.95 Q90.7373 1010.34 96.5474 1010.34 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M113.561 1039.65 L118.445 1039.65 L118.445 1045.53 L113.561 1045.53 L113.561 1039.65 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M133.515 1014.05 Q129.904 1014.05 128.075 1017.61 Q126.27 1021.15 126.27 1028.28 Q126.27 1035.39 128.075 1038.95 Q129.904 1042.5 133.515 1042.5 Q137.149 1042.5 138.955 1038.95 Q140.783 1035.39 140.783 1028.28 Q140.783 1021.15 138.955 1017.61 Q137.149 1014.05 133.515 1014.05 M133.515 1010.34 Q139.325 1010.34 142.381 1014.95 Q145.459 1019.53 145.459 1028.28 Q145.459 1037.01 142.381 1041.62 Q139.325 1046.2 133.515 1046.2 Q127.705 1046.2 124.626 1041.62 Q121.57 1037.01 121.57 1028.28 Q121.57 1019.53 124.626 1014.95 Q127.705 1010.34 133.515 1010.34 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M164.695 1026.89 Q168.052 1027.61 169.927 1029.88 Q171.825 1032.15 171.825 1035.48 Q171.825 1040.6 168.306 1043.4 Q164.788 1046.2 158.306 1046.2 Q156.13 1046.2 153.816 1045.76 Q151.524 1045.34 149.07 1044.49 L149.07 1039.97 Q151.015 1041.11 153.33 1041.69 Q155.644 1042.26 158.167 1042.26 Q162.566 1042.26 164.857 1040.53 Q167.172 1038.79 167.172 1035.48 Q167.172 1032.43 165.019 1030.71 Q162.89 1028.98 159.07 1028.98 L155.042 1028.98 L155.042 1025.14 L159.255 1025.14 Q162.704 1025.14 164.533 1023.77 Q166.362 1022.38 166.362 1019.79 Q166.362 1017.13 164.464 1015.71 Q162.589 1014.28 159.07 1014.28 Q157.149 1014.28 154.95 1014.7 Q152.751 1015.11 150.112 1015.99 L150.112 1011.82 Q152.774 1011.08 155.089 1010.71 Q157.427 1010.34 159.487 1010.34 Q164.811 1010.34 167.913 1012.77 Q171.015 1015.18 171.015 1019.3 Q171.015 1022.17 169.371 1024.16 Q167.728 1026.13 164.695 1026.89 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M95.8993 753.532 Q92.2882 753.532 90.4595 757.097 Q88.654 760.638 88.654 767.768 Q88.654 774.874 90.4595 778.439 Q92.2882 781.981 95.8993 781.981 Q99.5335 781.981 101.339 778.439 Q103.168 774.874 103.168 767.768 Q103.168 760.638 101.339 757.097 Q99.5335 753.532 95.8993 753.532 M95.8993 749.828 Q101.709 749.828 104.765 754.435 Q107.844 759.018 107.844 767.768 Q107.844 776.495 104.765 781.101 Q101.709 785.684 95.8993 785.684 Q90.0891 785.684 87.0105 781.101 Q83.9549 776.495 83.9549 767.768 Q83.9549 759.018 87.0105 754.435 Q90.0891 749.828 95.8993 749.828 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M112.913 779.134 L117.797 779.134 L117.797 785.013 L112.913 785.013 L112.913 779.134 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M132.867 753.532 Q129.256 753.532 127.427 757.097 Q125.621 760.638 125.621 767.768 Q125.621 774.874 127.427 778.439 Q129.256 781.981 132.867 781.981 Q136.501 781.981 138.306 778.439 Q140.135 774.874 140.135 767.768 Q140.135 760.638 138.306 757.097 Q136.501 753.532 132.867 753.532 M132.867 749.828 Q138.677 749.828 141.732 754.435 Q144.811 759.018 144.811 767.768 Q144.811 776.495 141.732 781.101 Q138.677 785.684 132.867 785.684 Q127.057 785.684 123.978 781.101 Q120.922 776.495 120.922 767.768 Q120.922 759.018 123.978 754.435 Q127.057 749.828 132.867 749.828 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M159.88 753.532 Q156.269 753.532 154.441 757.097 Q152.635 760.638 152.635 767.768 Q152.635 774.874 154.441 778.439 Q156.269 781.981 159.88 781.981 Q163.515 781.981 165.32 778.439 Q167.149 774.874 167.149 767.768 Q167.149 760.638 165.32 757.097 Q163.515 753.532 159.88 753.532 M159.88 749.828 Q165.691 749.828 168.746 754.435 Q171.825 759.018 171.825 767.768 Q171.825 776.495 168.746 781.101 Q165.691 785.684 159.88 785.684 Q154.07 785.684 150.992 781.101 Q147.936 776.495 147.936 767.768 Q147.936 759.018 150.992 754.435 Q154.07 749.828 159.88 749.828 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M96.5474 493.016 Q92.9363 493.016 91.1077 496.581 Q89.3021 500.123 89.3021 507.252 Q89.3021 514.359 91.1077 517.924 Q92.9363 521.465 96.5474 521.465 Q100.182 521.465 101.987 517.924 Q103.816 514.359 103.816 507.252 Q103.816 500.123 101.987 496.581 Q100.182 493.016 96.5474 493.016 M96.5474 489.313 Q102.358 489.313 105.413 493.919 Q108.492 498.503 108.492 507.252 Q108.492 515.979 105.413 520.586 Q102.358 525.169 96.5474 525.169 Q90.7373 525.169 87.6586 520.586 Q84.6031 515.979 84.6031 507.252 Q84.6031 498.503 87.6586 493.919 Q90.7373 489.313 96.5474 489.313 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M113.561 518.618 L118.445 518.618 L118.445 524.498 L113.561 524.498 L113.561 518.618 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M133.515 493.016 Q129.904 493.016 128.075 496.581 Q126.27 500.123 126.27 507.252 Q126.27 514.359 128.075 517.924 Q129.904 521.465 133.515 521.465 Q137.149 521.465 138.955 517.924 Q140.783 514.359 140.783 507.252 Q140.783 500.123 138.955 496.581 Q137.149 493.016 133.515 493.016 M133.515 489.313 Q139.325 489.313 142.381 493.919 Q145.459 498.503 145.459 507.252 Q145.459 515.979 142.381 520.586 Q139.325 525.169 133.515 525.169 Q127.705 525.169 124.626 520.586 Q121.57 515.979 121.57 507.252 Q121.57 498.503 124.626 493.919 Q127.705 489.313 133.515 489.313 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M164.695 505.864 Q168.052 506.581 169.927 508.85 Q171.825 511.118 171.825 514.452 Q171.825 519.567 168.306 522.368 Q164.788 525.169 158.306 525.169 Q156.13 525.169 153.816 524.729 Q151.524 524.313 149.07 523.456 L149.07 518.942 Q151.015 520.076 153.33 520.655 Q155.644 521.234 158.167 521.234 Q162.566 521.234 164.857 519.498 Q167.172 517.762 167.172 514.452 Q167.172 511.396 165.019 509.683 Q162.89 507.947 159.07 507.947 L155.042 507.947 L155.042 504.104 L159.255 504.104 Q162.704 504.104 164.533 502.739 Q166.362 501.35 166.362 498.757 Q166.362 496.095 164.464 494.683 Q162.589 493.248 159.07 493.248 Q157.149 493.248 154.95 493.665 Q152.751 494.081 150.112 494.961 L150.112 490.794 Q152.774 490.054 155.089 489.683 Q157.427 489.313 159.487 489.313 Q164.811 489.313 167.913 491.743 Q171.015 494.151 171.015 498.271 Q171.015 501.141 169.371 503.132 Q167.728 505.1 164.695 505.864 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M95.7373 232.501 Q92.1262 232.501 90.2975 236.066 Q88.4919 239.608 88.4919 246.737 Q88.4919 253.844 90.2975 257.408 Q92.1262 260.95 95.7373 260.95 Q99.3715 260.95 101.177 257.408 Q103.006 253.844 103.006 246.737 Q103.006 239.608 101.177 236.066 Q99.3715 232.501 95.7373 232.501 M95.7373 228.797 Q101.547 228.797 104.603 233.404 Q107.682 237.987 107.682 246.737 Q107.682 255.464 104.603 260.07 Q101.547 264.654 95.7373 264.654 Q89.9271 264.654 86.8484 260.07 Q83.7929 255.464 83.7929 246.737 Q83.7929 237.987 86.8484 233.404 Q89.9271 228.797 95.7373 228.797 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M112.751 258.103 L117.635 258.103 L117.635 263.982 L112.751 263.982 L112.751 258.103 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M132.705 232.501 Q129.094 232.501 127.265 236.066 Q125.459 239.608 125.459 246.737 Q125.459 253.844 127.265 257.408 Q129.094 260.95 132.705 260.95 Q136.339 260.95 138.144 257.408 Q139.973 253.844 139.973 246.737 Q139.973 239.608 138.144 236.066 Q136.339 232.501 132.705 232.501 M132.705 228.797 Q138.515 228.797 141.57 233.404 Q144.649 237.987 144.649 246.737 Q144.649 255.464 141.57 260.07 Q138.515 264.654 132.705 264.654 Q126.894 264.654 123.816 260.07 Q120.76 255.464 120.76 246.737 Q120.76 237.987 123.816 233.404 Q126.894 228.797 132.705 228.797 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip380)\" d=\"M 0 0 M160.297 244.839 Q157.149 244.839 155.297 246.992 Q153.468 249.145 153.468 252.895 Q153.468 256.621 155.297 258.797 Q157.149 260.95 160.297 260.95 Q163.445 260.95 165.274 258.797 Q167.126 256.621 167.126 252.895 Q167.126 249.145 165.274 246.992 Q163.445 244.839 160.297 244.839 M169.579 230.186 L169.579 234.446 Q167.82 233.612 166.015 233.172 Q164.232 232.733 162.473 232.733 Q157.843 232.733 155.39 235.858 Q152.959 238.983 152.612 245.302 Q153.978 243.288 156.038 242.223 Q158.098 241.135 160.575 241.135 Q165.783 241.135 168.792 244.307 Q171.825 247.455 171.825 252.895 Q171.825 258.219 168.677 261.436 Q165.529 264.654 160.297 264.654 Q154.302 264.654 151.13 260.07 Q147.959 255.464 147.959 246.737 Q147.959 238.543 151.848 233.682 Q155.737 228.797 162.288 228.797 Q164.047 228.797 165.829 229.145 Q167.635 229.492 169.579 230.186 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><circle clip-path=\"url(#clip382)\" cx=\"268.53\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"306.71\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"344.89\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"383.069\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"421.249\" cy=\"768.836\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"459.429\" cy=\"768.157\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"497.608\" cy=\"767.658\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"535.788\" cy=\"918.478\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"573.967\" cy=\"1018.54\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"612.147\" cy=\"967.958\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"650.327\" cy=\"1281.61\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"688.506\" cy=\"1219.88\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"726.686\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"764.865\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"803.045\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"841.225\" cy=\"766.628\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"879.404\" cy=\"767.391\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"917.584\" cy=\"924.285\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"955.764\" cy=\"1022.74\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"993.943\" cy=\"1291.49\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1032.12\" cy=\"850.249\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1070.3\" cy=\"759.431\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1108.48\" cy=\"769.008\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1146.66\" cy=\"797.48\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1184.84\" cy=\"945.736\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1223.02\" cy=\"927.545\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1261.2\" cy=\"1435.65\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1299.38\" cy=\"1445.72\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1337.56\" cy=\"685.252\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1375.74\" cy=\"775.991\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1413.92\" cy=\"966.684\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1452.1\" cy=\"945.533\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1490.28\" cy=\"1425.49\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1528.46\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1566.64\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1604.82\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1643\" cy=\"611.255\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1681.18\" cy=\"243.487\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1719.36\" cy=\"317.467\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1757.54\" cy=\"512.481\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1795.72\" cy=\"567.807\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1833.89\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1872.07\" cy=\"767.733\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1910.25\" cy=\"617.486\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1948.43\" cy=\"254.357\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"1986.61\" cy=\"517.346\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2024.79\" cy=\"567.719\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2062.97\" cy=\"108.717\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2101.15\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2139.33\" cy=\"589.058\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2177.51\" cy=\"607.782\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2215.69\" cy=\"738.82\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2253.87\" cy=\"101.2\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip382)\" cx=\"2292.05\" cy=\"590.561\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<path clip-path=\"url(#clip380)\" d=\"\n",
       "M2017.79 216.178 L2281.26 216.178 L2281.26 95.2176 L2017.79 95.2176  Z\n",
       "  \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip380)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  2017.79,216.178 2281.26,216.178 2281.26,95.2176 2017.79,95.2176 2017.79,216.178 \n",
       "  \"/>\n",
       "<circle clip-path=\"url(#clip380)\" cx=\"2113.12\" cy=\"155.698\" r=\"23\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"5.12\"/>\n",
       "<path clip-path=\"url(#clip380)\" d=\"M 0 0 M2233.11 147.052 L2223.73 159.667 L2233.59 172.978 L2228.57 172.978 L2221.02 162.792 L2213.48 172.978 L2208.45 172.978 L2218.52 159.413 L2209.31 147.052 L2214.33 147.052 L2221.21 156.288 L2228.08 147.052 L2233.11 147.052 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /></svg>\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip420\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<path clip-path=\"url(#clip420)\" d=\"\n",
       "M0 1600 L2400 1600 L2400 0 L0 0  Z\n",
       "  \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip421\">\n",
       "    <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<path clip-path=\"url(#clip420)\" d=\"\n",
       "M206.667 1486.45 L2352.76 1486.45 L2352.76 47.2441 L206.667 47.2441  Z\n",
       "  \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip422\">\n",
       "    <rect x=\"206\" y=\"47\" width=\"2147\" height=\"1440\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  229.206,1486.45 229.206,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  611.208,1486.45 611.208,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  993.21,1486.45 993.21,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  1375.21,1486.45 1375.21,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  1757.21,1486.45 1757.21,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  2139.22,1486.45 2139.22,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,1486.45 2352.76,1486.45 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  229.206,1486.45 229.206,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  611.208,1486.45 611.208,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  993.21,1486.45 993.21,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  1375.21,1486.45 1375.21,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  1757.21,1486.45 1757.21,1469.18 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  2139.22,1486.45 2139.22,1469.18 \n",
       "  \"/>\n",
       "<path clip-path=\"url(#clip420)\" d=\"M 0 0 M229.206 1515.64 Q225.594 1515.64 223.766 1519.2 Q221.96 1522.75 221.96 1529.87 Q221.96 1536.98 223.766 1540.55 Q225.594 1544.09 229.206 1544.09 Q232.84 1544.09 234.645 1540.55 Q236.474 1536.98 236.474 1529.87 Q236.474 1522.75 234.645 1519.2 Q232.84 1515.64 229.206 1515.64 M229.206 1511.93 Q235.016 1511.93 238.071 1516.54 Q241.15 1521.12 241.15 1529.87 Q241.15 1538.6 238.071 1543.21 Q235.016 1547.79 229.206 1547.79 Q223.395 1547.79 220.317 1543.21 Q217.261 1538.6 217.261 1529.87 Q217.261 1521.12 220.317 1516.54 Q223.395 1511.93 229.206 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M588.083 1543.18 L595.722 1543.18 L595.722 1516.82 L587.412 1518.49 L587.412 1514.23 L595.675 1512.56 L600.351 1512.56 L600.351 1543.18 L607.99 1543.18 L607.99 1547.12 L588.083 1547.12 L588.083 1543.18 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M623.06 1515.64 Q619.448 1515.64 617.62 1519.2 Q615.814 1522.75 615.814 1529.87 Q615.814 1536.98 617.62 1540.55 Q619.448 1544.09 623.06 1544.09 Q626.694 1544.09 628.499 1540.55 Q630.328 1536.98 630.328 1529.87 Q630.328 1522.75 628.499 1519.2 Q626.694 1515.64 623.06 1515.64 M623.06 1511.93 Q628.87 1511.93 631.925 1516.54 Q635.004 1521.12 635.004 1529.87 Q635.004 1538.6 631.925 1543.21 Q628.87 1547.79 623.06 1547.79 Q617.249 1547.79 614.171 1543.21 Q611.115 1538.6 611.115 1529.87 Q611.115 1521.12 614.171 1516.54 Q617.249 1511.93 623.06 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M974.356 1543.18 L990.675 1543.18 L990.675 1547.12 L968.731 1547.12 L968.731 1543.18 Q971.393 1540.43 975.976 1535.8 Q980.583 1531.15 981.763 1529.81 Q984.009 1527.28 984.888 1525.55 Q985.791 1523.79 985.791 1522.1 Q985.791 1519.34 983.847 1517.61 Q981.925 1515.87 978.823 1515.87 Q976.624 1515.87 974.171 1516.63 Q971.74 1517.4 968.962 1518.95 L968.962 1514.23 Q971.786 1513.09 974.24 1512.51 Q976.694 1511.93 978.731 1511.93 Q984.101 1511.93 987.296 1514.62 Q990.49 1517.31 990.49 1521.8 Q990.49 1523.93 989.68 1525.85 Q988.893 1527.74 986.786 1530.34 Q986.208 1531.01 983.106 1534.23 Q980.004 1537.42 974.356 1543.18 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M1005.74 1515.64 Q1002.13 1515.64 1000.3 1519.2 Q998.499 1522.75 998.499 1529.87 Q998.499 1536.98 1000.3 1540.55 Q1002.13 1544.09 1005.74 1544.09 Q1009.38 1544.09 1011.18 1540.55 Q1013.01 1536.98 1013.01 1529.87 Q1013.01 1522.75 1011.18 1519.2 Q1009.38 1515.64 1005.74 1515.64 M1005.74 1511.93 Q1011.55 1511.93 1014.61 1516.54 Q1017.69 1521.12 1017.69 1529.87 Q1017.69 1538.6 1014.61 1543.21 Q1011.55 1547.79 1005.74 1547.79 Q999.934 1547.79 996.856 1543.21 Q993.8 1538.6 993.8 1529.87 Q993.8 1521.12 996.856 1516.54 Q999.934 1511.93 1005.74 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M1365.95 1528.49 Q1369.31 1529.2 1371.18 1531.47 Q1373.08 1533.74 1373.08 1537.07 Q1373.08 1542.19 1369.56 1544.99 Q1366.05 1547.79 1359.56 1547.79 Q1357.39 1547.79 1355.07 1547.35 Q1352.78 1546.93 1350.33 1546.08 L1350.33 1541.56 Q1352.27 1542.7 1354.59 1543.28 Q1356.9 1543.86 1359.43 1543.86 Q1363.82 1543.86 1366.12 1542.12 Q1368.43 1540.38 1368.43 1537.07 Q1368.43 1534.02 1366.28 1532.31 Q1364.15 1530.57 1360.33 1530.57 L1356.3 1530.57 L1356.3 1526.73 L1360.51 1526.73 Q1363.96 1526.73 1365.79 1525.36 Q1367.62 1523.97 1367.62 1521.38 Q1367.62 1518.72 1365.72 1517.31 Q1363.85 1515.87 1360.33 1515.87 Q1358.41 1515.87 1356.21 1516.29 Q1354.01 1516.7 1351.37 1517.58 L1351.37 1513.42 Q1354.03 1512.68 1356.35 1512.31 Q1358.68 1511.93 1360.74 1511.93 Q1366.07 1511.93 1369.17 1514.37 Q1372.27 1516.77 1372.27 1520.89 Q1372.27 1523.76 1370.63 1525.75 Q1368.99 1527.72 1365.95 1528.49 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M1388.15 1515.64 Q1384.54 1515.64 1382.71 1519.2 Q1380.91 1522.75 1380.91 1529.87 Q1380.91 1536.98 1382.71 1540.55 Q1384.54 1544.09 1388.15 1544.09 Q1391.79 1544.09 1393.59 1540.55 Q1395.42 1536.98 1395.42 1529.87 Q1395.42 1522.75 1393.59 1519.2 Q1391.79 1515.64 1388.15 1515.64 M1388.15 1511.93 Q1393.96 1511.93 1397.02 1516.54 Q1400.1 1521.12 1400.1 1529.87 Q1400.1 1538.6 1397.02 1543.21 Q1393.96 1547.79 1388.15 1547.79 Q1382.34 1547.79 1379.26 1543.21 Q1376.21 1538.6 1376.21 1529.87 Q1376.21 1521.12 1379.26 1516.54 Q1382.34 1511.93 1388.15 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M1746.72 1516.63 L1734.91 1535.08 L1746.72 1535.08 L1746.72 1516.63 M1745.49 1512.56 L1751.37 1512.56 L1751.37 1535.08 L1756.3 1535.08 L1756.3 1538.97 L1751.37 1538.97 L1751.37 1547.12 L1746.72 1547.12 L1746.72 1538.97 L1731.12 1538.97 L1731.12 1534.46 L1745.49 1512.56 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M1771.37 1515.64 Q1767.76 1515.64 1765.93 1519.2 Q1764.12 1522.75 1764.12 1529.87 Q1764.12 1536.98 1765.93 1540.55 Q1767.76 1544.09 1771.37 1544.09 Q1775 1544.09 1776.81 1540.55 Q1778.64 1536.98 1778.64 1529.87 Q1778.64 1522.75 1776.81 1519.2 Q1775 1515.64 1771.37 1515.64 M1771.37 1511.93 Q1777.18 1511.93 1780.24 1516.54 Q1783.31 1521.12 1783.31 1529.87 Q1783.31 1538.6 1780.24 1543.21 Q1777.18 1547.79 1771.37 1547.79 Q1765.56 1547.79 1762.48 1543.21 Q1759.43 1538.6 1759.43 1529.87 Q1759.43 1521.12 1762.48 1516.54 Q1765.56 1511.93 1771.37 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M2115.99 1512.56 L2134.34 1512.56 L2134.34 1516.5 L2120.27 1516.5 L2120.27 1524.97 Q2121.29 1524.62 2122.31 1524.46 Q2123.33 1524.27 2124.34 1524.27 Q2130.13 1524.27 2133.51 1527.44 Q2136.89 1530.62 2136.89 1536.03 Q2136.89 1541.61 2133.42 1544.71 Q2129.95 1547.79 2123.63 1547.79 Q2121.45 1547.79 2119.18 1547.42 Q2116.94 1547.05 2114.53 1546.31 L2114.53 1541.61 Q2116.61 1542.74 2118.83 1543.3 Q2121.06 1543.86 2123.53 1543.86 Q2127.54 1543.86 2129.88 1541.75 Q2132.21 1539.64 2132.21 1536.03 Q2132.21 1532.42 2129.88 1530.31 Q2127.54 1528.21 2123.53 1528.21 Q2121.66 1528.21 2119.78 1528.62 Q2117.93 1529.04 2115.99 1529.92 L2115.99 1512.56 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M2151.96 1515.64 Q2148.35 1515.64 2146.52 1519.2 Q2144.71 1522.75 2144.71 1529.87 Q2144.71 1536.98 2146.52 1540.55 Q2148.35 1544.09 2151.96 1544.09 Q2155.59 1544.09 2157.4 1540.55 Q2159.23 1536.98 2159.23 1529.87 Q2159.23 1522.75 2157.4 1519.2 Q2155.59 1515.64 2151.96 1515.64 M2151.96 1511.93 Q2157.77 1511.93 2160.83 1516.54 Q2163.9 1521.12 2163.9 1529.87 Q2163.9 1538.6 2160.83 1543.21 Q2157.77 1547.79 2151.96 1547.79 Q2146.15 1547.79 2143.07 1543.21 Q2140.02 1538.6 2140.02 1529.87 Q2140.02 1521.12 2143.07 1516.54 Q2146.15 1511.93 2151.96 1511.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  206.667,1461 2352.76,1461 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  206.667,1117.74 2352.76,1117.74 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  206.667,774.486 2352.76,774.486 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  206.667,431.231 2352.76,431.231 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip422)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  206.667,87.9763 2352.76,87.9763 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,1486.45 206.667,47.2441 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,1461 232.42,1461 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,1117.74 232.42,1117.74 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,774.486 232.42,774.486 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,431.231 232.42,431.231 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip420)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
       "  206.667,87.9763 232.42,87.9763 \n",
       "  \"/>\n",
       "<path clip-path=\"url(#clip420)\" d=\"M 0 0 M51.594 1461.45 L81.2697 1461.45 L81.2697 1465.38 L51.594 1465.38 L51.594 1461.45 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M96.3391 1446.79 Q92.728 1446.79 90.8993 1450.36 Q89.0938 1453.9 89.0938 1461.03 Q89.0938 1468.14 90.8993 1471.7 Q92.728 1475.24 96.3391 1475.24 Q99.9733 1475.24 101.779 1471.7 Q103.608 1468.14 103.608 1461.03 Q103.608 1453.9 101.779 1450.36 Q99.9733 1446.79 96.3391 1446.79 M96.3391 1443.09 Q102.149 1443.09 105.205 1447.7 Q108.283 1452.28 108.283 1461.03 Q108.283 1469.76 105.205 1474.36 Q102.149 1478.95 96.3391 1478.95 Q90.529 1478.95 87.4503 1474.36 Q84.3947 1469.76 84.3947 1461.03 Q84.3947 1452.28 87.4503 1447.7 Q90.529 1443.09 96.3391 1443.09 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M113.353 1472.4 L118.237 1472.4 L118.237 1478.28 L113.353 1478.28 L113.353 1472.4 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M127.334 1474.34 L143.654 1474.34 L143.654 1478.28 L121.709 1478.28 L121.709 1474.34 Q124.371 1471.59 128.955 1466.96 Q133.561 1462.3 134.742 1460.96 Q136.987 1458.44 137.867 1456.7 Q138.769 1454.94 138.769 1453.25 Q138.769 1450.5 136.825 1448.76 Q134.904 1447.03 131.802 1447.03 Q129.603 1447.03 127.149 1447.79 Q124.719 1448.55 121.941 1450.1 L121.941 1445.38 Q124.765 1444.25 127.219 1443.67 Q129.672 1443.09 131.709 1443.09 Q137.08 1443.09 140.274 1445.78 Q143.468 1448.46 143.468 1452.95 Q143.468 1455.08 142.658 1457 Q141.871 1458.9 139.765 1461.49 Q139.186 1462.16 136.084 1465.38 Q132.982 1468.58 127.334 1474.34 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M158.723 1446.79 Q155.112 1446.79 153.283 1450.36 Q151.478 1453.9 151.478 1461.03 Q151.478 1468.14 153.283 1471.7 Q155.112 1475.24 158.723 1475.24 Q162.357 1475.24 164.163 1471.7 Q165.992 1468.14 165.992 1461.03 Q165.992 1453.9 164.163 1450.36 Q162.357 1446.79 158.723 1446.79 M158.723 1443.09 Q164.533 1443.09 167.589 1447.7 Q170.667 1452.28 170.667 1461.03 Q170.667 1469.76 167.589 1474.36 Q164.533 1478.95 158.723 1478.95 Q152.913 1478.95 149.834 1474.36 Q146.779 1469.76 146.779 1461.03 Q146.779 1452.28 149.834 1447.7 Q152.913 1443.09 158.723 1443.09 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M52.219 1118.19 L81.8947 1118.19 L81.8947 1122.13 L52.219 1122.13 L52.219 1118.19 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M96.9641 1103.54 Q93.353 1103.54 91.5243 1107.1 Q89.7188 1110.65 89.7188 1117.78 Q89.7188 1124.88 91.5243 1128.45 Q93.353 1131.99 96.9641 1131.99 Q100.598 1131.99 102.404 1128.45 Q104.233 1124.88 104.233 1117.78 Q104.233 1110.65 102.404 1107.1 Q100.598 1103.54 96.9641 1103.54 M96.9641 1099.84 Q102.774 1099.84 105.83 1104.44 Q108.908 1109.03 108.908 1117.78 Q108.908 1126.5 105.83 1131.11 Q102.774 1135.69 96.9641 1135.69 Q91.1539 1135.69 88.0753 1131.11 Q85.0197 1126.5 85.0197 1117.78 Q85.0197 1109.03 88.0753 1104.44 Q91.1539 1099.84 96.9641 1099.84 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M113.978 1129.14 L118.862 1129.14 L118.862 1135.02 L113.978 1135.02 L113.978 1129.14 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M124.742 1131.09 L132.381 1131.09 L132.381 1104.72 L124.07 1106.39 L124.07 1102.13 L132.334 1100.46 L137.01 1100.46 L137.01 1131.09 L144.649 1131.09 L144.649 1135.02 L124.742 1135.02 L124.742 1131.09 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M149.765 1100.46 L168.121 1100.46 L168.121 1104.4 L154.047 1104.4 L154.047 1112.87 Q155.066 1112.52 156.084 1112.36 Q157.103 1112.17 158.121 1112.17 Q163.908 1112.17 167.288 1115.34 Q170.667 1118.52 170.667 1123.93 Q170.667 1129.51 167.195 1132.61 Q163.723 1135.69 157.404 1135.69 Q155.228 1135.69 152.959 1135.32 Q150.714 1134.95 148.306 1134.21 L148.306 1129.51 Q150.39 1130.65 152.612 1131.2 Q154.834 1131.76 157.311 1131.76 Q161.316 1131.76 163.654 1129.65 Q165.992 1127.54 165.992 1123.93 Q165.992 1120.32 163.654 1118.22 Q161.316 1116.11 157.311 1116.11 Q155.436 1116.11 153.561 1116.53 Q151.709 1116.94 149.765 1117.82 L149.765 1100.46 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M51.2236 774.937 L80.8994 774.937 L80.8994 778.872 L51.2236 778.872 L51.2236 774.937 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M95.9687 760.284 Q92.3576 760.284 90.529 763.849 Q88.7234 767.391 88.7234 774.521 Q88.7234 781.627 90.529 785.192 Q92.3576 788.733 95.9687 788.733 Q99.603 788.733 101.409 785.192 Q103.237 781.627 103.237 774.521 Q103.237 767.391 101.409 763.849 Q99.603 760.284 95.9687 760.284 M95.9687 756.581 Q101.779 756.581 104.834 761.187 Q107.913 765.771 107.913 774.521 Q107.913 783.247 104.834 787.854 Q101.779 792.437 95.9687 792.437 Q90.1586 792.437 87.0799 787.854 Q84.0244 783.247 84.0244 774.521 Q84.0244 765.771 87.0799 761.187 Q90.1586 756.581 95.9687 756.581 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M112.983 785.886 L117.867 785.886 L117.867 791.766 L112.983 791.766 L112.983 785.886 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M123.746 787.831 L131.385 787.831 L131.385 761.465 L123.075 763.132 L123.075 758.872 L131.339 757.206 L136.015 757.206 L136.015 787.831 L143.654 787.831 L143.654 791.766 L123.746 791.766 L123.746 787.831 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M158.723 760.284 Q155.112 760.284 153.283 763.849 Q151.478 767.391 151.478 774.521 Q151.478 781.627 153.283 785.192 Q155.112 788.733 158.723 788.733 Q162.357 788.733 164.163 785.192 Q165.992 781.627 165.992 774.521 Q165.992 767.391 164.163 763.849 Q162.357 760.284 158.723 760.284 M158.723 756.581 Q164.533 756.581 167.589 761.187 Q170.667 765.771 170.667 774.521 Q170.667 783.247 167.589 787.854 Q164.533 792.437 158.723 792.437 Q152.913 792.437 149.834 787.854 Q146.779 783.247 146.779 774.521 Q146.779 765.771 149.834 761.187 Q152.913 756.581 158.723 756.581 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M50.9921 431.682 L80.6679 431.682 L80.6679 435.618 L50.9921 435.618 L50.9921 431.682 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M95.7373 417.03 Q92.1262 417.03 90.2975 420.595 Q88.4919 424.136 88.4919 431.266 Q88.4919 438.372 90.2975 441.937 Q92.1262 445.479 95.7373 445.479 Q99.3715 445.479 101.177 441.937 Q103.006 438.372 103.006 431.266 Q103.006 424.136 101.177 420.595 Q99.3715 417.03 95.7373 417.03 M95.7373 413.326 Q101.547 413.326 104.603 417.932 Q107.682 422.516 107.682 431.266 Q107.682 439.993 104.603 444.599 Q101.547 449.182 95.7373 449.182 Q89.9271 449.182 86.8484 444.599 Q83.7929 439.993 83.7929 431.266 Q83.7929 422.516 86.8484 417.932 Q89.9271 413.326 95.7373 413.326 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M112.751 442.631 L117.635 442.631 L117.635 448.511 L112.751 448.511 L112.751 442.631 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M132.705 417.03 Q129.094 417.03 127.265 420.595 Q125.459 424.136 125.459 431.266 Q125.459 438.372 127.265 441.937 Q129.094 445.479 132.705 445.479 Q136.339 445.479 138.144 441.937 Q139.973 438.372 139.973 431.266 Q139.973 424.136 138.144 420.595 Q136.339 417.03 132.705 417.03 M132.705 413.326 Q138.515 413.326 141.57 417.932 Q144.649 422.516 144.649 431.266 Q144.649 439.993 141.57 444.599 Q138.515 449.182 132.705 449.182 Q126.894 449.182 123.816 444.599 Q120.76 439.993 120.76 431.266 Q120.76 422.516 123.816 417.932 Q126.894 413.326 132.705 413.326 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M149.765 413.951 L168.121 413.951 L168.121 417.886 L154.047 417.886 L154.047 426.358 Q155.066 426.011 156.084 425.849 Q157.103 425.664 158.121 425.664 Q163.908 425.664 167.288 428.835 Q170.667 432.006 170.667 437.423 Q170.667 443.002 167.195 446.104 Q163.723 449.182 157.404 449.182 Q155.228 449.182 152.959 448.812 Q150.714 448.442 148.306 447.701 L148.306 443.002 Q150.39 444.136 152.612 444.692 Q154.834 445.247 157.311 445.247 Q161.316 445.247 163.654 443.141 Q165.992 441.034 165.992 437.423 Q165.992 433.812 163.654 431.706 Q161.316 429.599 157.311 429.599 Q155.436 429.599 153.561 430.016 Q151.709 430.432 149.765 431.312 L149.765 413.951 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M94.7419 73.775 Q91.1308 73.775 89.3021 77.3398 Q87.4966 80.8814 87.4966 88.011 Q87.4966 95.1174 89.3021 98.6822 Q91.1308 102.224 94.7419 102.224 Q98.3761 102.224 100.182 98.6822 Q102.01 95.1174 102.01 88.011 Q102.01 80.8814 100.182 77.3398 Q98.3761 73.775 94.7419 73.775 M94.7419 70.0713 Q100.552 70.0713 103.608 74.6777 Q106.686 79.261 106.686 88.011 Q106.686 96.7378 103.608 101.344 Q100.552 105.928 94.7419 105.928 Q88.9317 105.928 85.8531 101.344 Q82.7975 96.7378 82.7975 88.011 Q82.7975 79.261 85.8531 74.6777 Q88.9317 70.0713 94.7419 70.0713 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M111.756 99.3767 L116.64 99.3767 L116.64 105.256 L111.756 105.256 L111.756 99.3767 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M131.709 73.775 Q128.098 73.775 126.27 77.3398 Q124.464 80.8814 124.464 88.011 Q124.464 95.1174 126.27 98.6822 Q128.098 102.224 131.709 102.224 Q135.344 102.224 137.149 98.6822 Q138.978 95.1174 138.978 88.011 Q138.978 80.8814 137.149 77.3398 Q135.344 73.775 131.709 73.775 M131.709 70.0713 Q137.519 70.0713 140.575 74.6777 Q143.654 79.261 143.654 88.011 Q143.654 96.7378 140.575 101.344 Q137.519 105.928 131.709 105.928 Q125.899 105.928 122.82 101.344 Q119.765 96.7378 119.765 88.011 Q119.765 79.261 122.82 74.6777 Q125.899 70.0713 131.709 70.0713 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip420)\" d=\"M 0 0 M158.723 73.775 Q155.112 73.775 153.283 77.3398 Q151.478 80.8814 151.478 88.011 Q151.478 95.1174 153.283 98.6822 Q155.112 102.224 158.723 102.224 Q162.357 102.224 164.163 98.6822 Q165.992 95.1174 165.992 88.011 Q165.992 80.8814 164.163 77.3398 Q162.357 73.775 158.723 73.775 M158.723 70.0713 Q164.533 70.0713 167.589 74.6777 Q170.667 79.261 170.667 88.011 Q170.667 96.7378 167.589 101.344 Q164.533 105.928 158.723 105.928 Q152.913 105.928 149.834 101.344 Q146.779 96.7378 146.779 88.011 Q146.779 79.261 149.834 74.6777 Q152.913 70.0713 158.723 70.0713 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><circle clip-path=\"url(#clip422)\" cx=\"267.406\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"305.606\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"343.806\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"382.006\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"420.207\" cy=\"650.304\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"458.407\" cy=\"350.62\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"496.607\" cy=\"290.162\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"534.807\" cy=\"716.6\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"573.008\" cy=\"710.503\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"611.208\" cy=\"650.871\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"649.408\" cy=\"503.263\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"687.608\" cy=\"350.613\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"725.808\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"764.009\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"802.209\" cy=\"87.9763\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"840.409\" cy=\"650.555\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"878.609\" cy=\"350.47\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"916.81\" cy=\"710.174\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"955.01\" cy=\"716.205\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"993.21\" cy=\"503.006\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1031.41\" cy=\"1445.72\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1069.61\" cy=\"1077.99\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1107.81\" cy=\"1063.05\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1146.01\" cy=\"1423.61\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1184.21\" cy=\"1435.05\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1222.41\" cy=\"1442.95\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1260.61\" cy=\"1040.59\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",
       "<circle clip-path=\"url(#clip422)\" cx=\"1298.81\" cy=\"1077.38\" r=\"14\" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"#000000\" stroke-opacity=\"1\" stroke-width=\"3.2\"/>\n",