From 070795c58d9454ba863cc825e6eeec2a541b9d81 Mon Sep 17 00:00:00 2001
From: Sakib Pathen <107497530+srpathen@users.noreply.github.com>
Date: Wed, 19 Jun 2024 17:53:53 -0400
Subject: [PATCH] Add GLayout introduction notebook
---
.../glayout/GLayout_Introduction.ipynb | 2239 +++++++++++++++++
1 file changed, 2239 insertions(+)
create mode 100644 docs/source/notebooks/glayout/GLayout_Introduction.ipynb
diff --git a/docs/source/notebooks/glayout/GLayout_Introduction.ipynb b/docs/source/notebooks/glayout/GLayout_Introduction.ipynb
new file mode 100644
index 000000000..ab026b943
--- /dev/null
+++ b/docs/source/notebooks/glayout/GLayout_Introduction.ipynb
@@ -0,0 +1,2239 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "aK2t7aSWNojQ"
+ },
+ "source": [
+ "# GLayout Quick Start Guide\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github"
+ },
+ "source": [
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "xjDewsT5Y4lP"
+ },
+ "source": [
+ "```\n",
+ "OpenFASOC Team, Feb 2024\n",
+ "SPDX-License-Identifier: Apache-2.0\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-Xp4cEjkeHIx"
+ },
+ "source": [
+ "## Introduction\n",
+ "Welcome!\n",
+ "This notebook serves as an introduction to the GDSFactory-based layout automation tool **GLayout** and a demonstration of the functions and classes you will primarily be using.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "j4dNshkgMM4I"
+ },
+ "source": [
+ "## Installation On Google Collab\n",
+ "### 1. Clone the repository and install dependencies\n",
+ "**Python Dependencies**\n",
+ "* [`gdsfactory`](https://github.com/gdsfactory/gdsfactory): Provides the backend for GDS manipulation.\n",
+ "* [`sky130`](https://github.com/gdsfactory/skywater130): The Skywater 130nm PDK Python package for GDSFactory to use in this demo.\n",
+ "* [`gf180`](https://github.com/gdsfactory/gf180): The GF 180nm PDK Python package for GDSFactory to use in this demo.\n",
+ "* [`gdstk`](https://heitzmann.github.io/gdstk/): (installed as a part of gdsfactory) Used for converting GDS files into SVG images for viewing.\n",
+ "* [`svgutils`](https://svgutils.readthedocs.io/en/latest/): To scale the SVG image.\n",
+ "\n",
+ "**System Dependencies**\n",
+ "* [`klayout`](https://klayout.de/): For DRC (Design Rule Checking).\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "bANz_LDB8TQW"
+ },
+ "source": [
+ "#### 1.1. Installing the binary dependency `klayout` using micromamba\n",
+ "**You only need to run this once**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "JzDjayJIMSHe",
+ "scrolled": true,
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "215f680e-fb6f-4b35-b02d-5e9a5ca62ac4"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "fatal: destination path 'OpenFASOC' already exists and is not an empty directory.\n",
+ "Requirement already satisfied: sky130 in /usr/local/lib/python3.10/dist-packages (0.11.1)\n",
+ "Collecting gdsfactory~=7.26.1 (from sky130)\n",
+ " Using cached gdsfactory-7.26.1-py3-none-any.whl (839 kB)\n",
+ "Requirement already satisfied: PySpice in /usr/local/lib/python3.10/dist-packages (from sky130) (1.5)\n",
+ "Requirement already satisfied: flatdict in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (4.0.1)\n",
+ "Requirement already satisfied: gdstk<0.10,>=0.9.49 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.9.52)\n",
+ "Requirement already satisfied: jinja2<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.1.4)\n",
+ "Requirement already satisfied: loguru<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.7.2)\n",
+ "Requirement already satisfied: matplotlib<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.7.1)\n",
+ "Requirement already satisfied: numpy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.25.2)\n",
+ "Requirement already satisfied: omegaconf<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.3.0)\n",
+ "Requirement already satisfied: orjson<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.10.5)\n",
+ "Requirement already satisfied: pandas<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.0.3)\n",
+ "Requirement already satisfied: pydantic<2.8,>=2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.6.4)\n",
+ "Requirement already satisfied: pydantic-settings<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.2.1)\n",
+ "Requirement already satisfied: pydantic-extra-types<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.8.2)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (6.0.1)\n",
+ "Requirement already satisfied: qrcode in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (7.4.2)\n",
+ "Requirement already satisfied: rectpack<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.2.2)\n",
+ "Requirement already satisfied: rich<14 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (13.7.1)\n",
+ "Requirement already satisfied: scipy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.11.4)\n",
+ "Requirement already satisfied: shapely<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.0.4)\n",
+ "Requirement already satisfied: toolz<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.12.1)\n",
+ "Requirement already satisfied: types-PyYAML in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (6.0.12.20240311)\n",
+ "Requirement already satisfied: typer<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.12.3)\n",
+ "Requirement already satisfied: watchdog<5 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (4.0.1)\n",
+ "Requirement already satisfied: kfactory[git,ipy]<0.13,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.11.4)\n",
+ "Requirement already satisfied: freetype-py in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.4.0)\n",
+ "Requirement already satisfied: mapbox_earcut in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.0.1)\n",
+ "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.3)\n",
+ "Requirement already satisfied: pyglet<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.5.29)\n",
+ "Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.19.3)\n",
+ "Requirement already satisfied: trimesh<4.4,>=4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (4.1.8)\n",
+ "Requirement already satisfied: ipycytoscape in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.3.3)\n",
+ "Requirement already satisfied: ipyevents in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.0.2)\n",
+ "Requirement already satisfied: ipykernel in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (5.5.6)\n",
+ "Requirement already satisfied: ipympl in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.9.4)\n",
+ "Requirement already satisfied: ipytree in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.2.2)\n",
+ "Requirement already satisfied: ipywidgets in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (7.7.1)\n",
+ "Requirement already satisfied: cffi>=1.14 in /usr/local/lib/python3.10/dist-packages (from PySpice->sky130) (1.16.0)\n",
+ "Requirement already satisfied: ply>=3.11 in /usr/local/lib/python3.10/dist-packages (from PySpice->sky130) (3.11)\n",
+ "Requirement already satisfied: requests>=2.23 in /usr/local/lib/python3.10/dist-packages (from PySpice->sky130) (2.31.0)\n",
+ "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.14->PySpice->sky130) (2.22)\n",
+ "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.10/dist-packages (from gdstk<0.10,>=0.9.49->gdsfactory~=7.26.1->sky130) (4.12.2)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2<4->gdsfactory~=7.26.1->sky130) (2.1.5)\n",
+ "Requirement already satisfied: klayout>=0.28.17 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.29.2)\n",
+ "Requirement already satisfied: ruamel.yaml in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.18.6)\n",
+ "Requirement already satisfied: cachetools>=5.2.0 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (5.3.3)\n",
+ "Requirement already satisfied: tomli in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (2.0.1)\n",
+ "Requirement already satisfied: aenum in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (3.1.15)\n",
+ "Requirement already satisfied: ipython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (7.34.0)\n",
+ "Requirement already satisfied: gitpython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (3.1.43)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (1.2.1)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (0.12.1)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (4.53.0)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (1.4.5)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (24.1)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (9.4.0)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (3.1.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (2.8.2)\n",
+ "Requirement already satisfied: antlr4-python3-runtime==4.9.* in /usr/local/lib/python3.10/dist-packages (from omegaconf<3->gdsfactory~=7.26.1->sky130) (4.9.3)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory~=7.26.1->sky130) (2023.4)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory~=7.26.1->sky130) (2024.1)\n",
+ "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.8,>=2->gdsfactory~=7.26.1->sky130) (0.7.0)\n",
+ "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.8,>=2->gdsfactory~=7.26.1->sky130) (2.16.3)\n",
+ "Requirement already satisfied: python-dotenv>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from pydantic-settings<3->gdsfactory~=7.26.1->sky130) (1.0.1)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (3.3.2)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (3.7)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (2.0.7)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (2024.6.2)\n",
+ "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory~=7.26.1->sky130) (3.0.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory~=7.26.1->sky130) (2.16.1)\n",
+ "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory~=7.26.1->sky130) (8.1.7)\n",
+ "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory~=7.26.1->sky130) (1.5.4)\n",
+ "Requirement already satisfied: spectate>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipycytoscape->gdsfactory~=7.26.1->sky130) (1.0.1)\n",
+ "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (0.2.0)\n",
+ "Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (5.7.1)\n",
+ "Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (3.6.6)\n",
+ "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (3.0.11)\n",
+ "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory~=7.26.1->sky130) (6.1.12)\n",
+ "Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory~=7.26.1->sky130) (6.3.3)\n",
+ "Requirement already satisfied: pypng in /usr/local/lib/python3.10/dist-packages (from qrcode->gdsfactory~=7.26.1->sky130) (0.20220715.0)\n",
+ "Requirement already satisfied: imageio>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory~=7.26.1->sky130) (2.31.6)\n",
+ "Requirement already satisfied: tifffile>=2019.7.26 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory~=7.26.1->sky130) (2024.5.22)\n",
+ "Requirement already satisfied: PyWavelets>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory~=7.26.1->sky130) (1.6.0)\n",
+ "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (67.7.2)\n",
+ "Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.19.1)\n",
+ "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (4.4.2)\n",
+ "Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.7.5)\n",
+ "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (3.0.47)\n",
+ "Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.2.0)\n",
+ "Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.1.7)\n",
+ "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (4.9.0)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich<14->gdsfactory~=7.26.1->sky130) (0.1.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib<4->gdsfactory~=7.26.1->sky130) (1.16.0)\n",
+ "Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (6.5.5)\n",
+ "Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.10/dist-packages (from gitpython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (4.0.11)\n",
+ "Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory~=7.26.1->sky130) (5.7.2)\n",
+ "Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory~=7.26.1->sky130) (24.0.1)\n",
+ "Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /usr/local/lib/python3.10/dist-packages (from ruamel.yaml->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.2.8)\n",
+ "\u001b[33mWARNING: typer 0.12.3 does not provide the extra 'all'\u001b[0m\u001b[33m\n",
+ "\u001b[0mRequirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from gitdb<5,>=4.0.1->gitpython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (5.0.1)\n",
+ "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.8.4)\n",
+ "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.6.0->jupyter-client->ipykernel->gdsfactory~=7.26.1->sky130) (4.2.2)\n",
+ "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (23.1.0)\n",
+ "Requirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (5.10.4)\n",
+ "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (6.5.4)\n",
+ "Requirement already satisfied: nest-asyncio>=1.5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.6.0)\n",
+ "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.8.3)\n",
+ "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.18.1)\n",
+ "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.20.0)\n",
+ "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.1.0)\n",
+ "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.7.0)\n",
+ "Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.2.13)\n",
+ "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.2.4)\n",
+ "Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (4.9.4)\n",
+ "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (4.12.3)\n",
+ "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (6.1.0)\n",
+ "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.7.1)\n",
+ "Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.4)\n",
+ "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.3.0)\n",
+ "Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.8.4)\n",
+ "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.10.0)\n",
+ "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.5.1)\n",
+ "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.3.0)\n",
+ "Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (2.19.1)\n",
+ "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (4.19.2)\n",
+ "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (21.2.0)\n",
+ "Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (23.2.0)\n",
+ "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (2023.12.1)\n",
+ "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.35.1)\n",
+ "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.18.1)\n",
+ "Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.10/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.24.0)\n",
+ "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (2.5)\n",
+ "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.5.1)\n",
+ "Requirement already satisfied: anyio<4,>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (3.7.1)\n",
+ "Requirement already satisfied: websocket-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.8.0)\n",
+ "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.3.1)\n",
+ "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.2.1)\n",
+ "Installing collected packages: gdsfactory\n",
+ " Attempting uninstall: gdsfactory\n",
+ " Found existing installation: gdsfactory 7.16.0\n",
+ " Uninstalling gdsfactory-7.16.0:\n",
+ " Successfully uninstalled gdsfactory-7.16.0\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "gf180 0.1.0 requires gdsfactory<7.17,>=7.16.0, but you have gdsfactory 7.26.1 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed gdsfactory-7.26.1\n",
+ "Requirement already satisfied: gf180 in /usr/local/lib/python3.10/dist-packages (0.1.0)\n",
+ "Requirement already satisfied: prettyprinttree in /usr/local/lib/python3.10/dist-packages (2.0.0)\n",
+ "Requirement already satisfied: svgutils in /usr/local/lib/python3.10/dist-packages (0.3.4)\n",
+ "Collecting gdsfactory<7.17,>=7.16.0 (from gf180)\n",
+ " Using cached gdsfactory-7.16.0-py3-none-any.whl (834 kB)\n",
+ "Requirement already satisfied: colorama in /usr/local/lib/python3.10/dist-packages (from prettyprinttree) (0.4.6)\n",
+ "Requirement already satisfied: cmd2 in /usr/local/lib/python3.10/dist-packages (from prettyprinttree) (2.4.3)\n",
+ "Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from svgutils) (4.9.4)\n",
+ "Requirement already satisfied: flatdict in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (4.0.1)\n",
+ "Requirement already satisfied: gdstk<0.10,>=0.9.49 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.9.52)\n",
+ "Requirement already satisfied: jinja2<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.1.4)\n",
+ "Requirement already satisfied: loguru<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.7.2)\n",
+ "Requirement already satisfied: matplotlib<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.7.1)\n",
+ "Requirement already satisfied: numpy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.25.2)\n",
+ "Requirement already satisfied: omegaconf<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.3.0)\n",
+ "Requirement already satisfied: orjson<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.10.5)\n",
+ "Requirement already satisfied: pandas<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.0.3)\n",
+ "Requirement already satisfied: pydantic<2.7,>=2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.6.4)\n",
+ "Requirement already satisfied: pydantic-settings<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.2.1)\n",
+ "Requirement already satisfied: pydantic-extra-types<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.8.2)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (6.0.1)\n",
+ "Requirement already satisfied: qrcode in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (7.4.2)\n",
+ "Requirement already satisfied: rectpack<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.2.2)\n",
+ "Requirement already satisfied: rich<14 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (13.7.1)\n",
+ "Requirement already satisfied: scipy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.11.4)\n",
+ "Requirement already satisfied: shapely<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.0.4)\n",
+ "Requirement already satisfied: toolz<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.12.1)\n",
+ "Requirement already satisfied: types-PyYAML in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (6.0.12.20240311)\n",
+ "Requirement already satisfied: typer<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.12.3)\n",
+ "Requirement already satisfied: watchdog<5 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (4.0.1)\n",
+ "Requirement already satisfied: kfactory[git,ipy]<0.12,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.11.4)\n",
+ "Requirement already satisfied: freetype-py in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.4.0)\n",
+ "Requirement already satisfied: mapbox_earcut in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.0.1)\n",
+ "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.3)\n",
+ "Requirement already satisfied: pyglet<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.5.29)\n",
+ "Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.19.3)\n",
+ "Requirement already satisfied: trimesh<4.2,>=4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (4.1.8)\n",
+ "Requirement already satisfied: ipycytoscape in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.3.3)\n",
+ "Requirement already satisfied: ipyevents in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.0.2)\n",
+ "Requirement already satisfied: ipykernel in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (5.5.6)\n",
+ "Requirement already satisfied: ipympl in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.9.4)\n",
+ "Requirement already satisfied: ipytree in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.2.2)\n",
+ "Requirement already satisfied: ipywidgets in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (7.7.1)\n",
+ "Requirement already satisfied: attrs>=16.3.0 in /usr/local/lib/python3.10/dist-packages (from cmd2->prettyprinttree) (23.2.0)\n",
+ "Requirement already satisfied: pyperclip>=1.6 in /usr/local/lib/python3.10/dist-packages (from cmd2->prettyprinttree) (1.8.2)\n",
+ "Requirement already satisfied: wcwidth>=0.1.7 in /usr/local/lib/python3.10/dist-packages (from cmd2->prettyprinttree) (0.2.13)\n",
+ "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.10/dist-packages (from gdstk<0.10,>=0.9.49->gdsfactory<7.17,>=7.16.0->gf180) (4.12.2)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2<4->gdsfactory<7.17,>=7.16.0->gf180) (2.1.5)\n",
+ "Requirement already satisfied: klayout>=0.28.17 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.29.2)\n",
+ "Requirement already satisfied: ruamel.yaml in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.18.6)\n",
+ "Requirement already satisfied: cachetools>=5.2.0 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (5.3.3)\n",
+ "Requirement already satisfied: tomli in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2.0.1)\n",
+ "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2.31.0)\n",
+ "Requirement already satisfied: aenum in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.1.15)\n",
+ "Requirement already satisfied: ipython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (7.34.0)\n",
+ "Requirement already satisfied: gitpython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.1.43)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (1.2.1)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (0.12.1)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (4.53.0)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (1.4.5)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (24.1)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (9.4.0)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (3.1.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (2.8.2)\n",
+ "Requirement already satisfied: antlr4-python3-runtime==4.9.* in /usr/local/lib/python3.10/dist-packages (from omegaconf<3->gdsfactory<7.17,>=7.16.0->gf180) (4.9.3)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory<7.17,>=7.16.0->gf180) (2023.4)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory<7.17,>=7.16.0->gf180) (2024.1)\n",
+ "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.7,>=2->gdsfactory<7.17,>=7.16.0->gf180) (0.7.0)\n",
+ "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.7,>=2->gdsfactory<7.17,>=7.16.0->gf180) (2.16.3)\n",
+ "Requirement already satisfied: python-dotenv>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from pydantic-settings<3->gdsfactory<7.17,>=7.16.0->gf180) (1.0.1)\n",
+ "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory<7.17,>=7.16.0->gf180) (3.0.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory<7.17,>=7.16.0->gf180) (2.16.1)\n",
+ "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory<7.17,>=7.16.0->gf180) (8.1.7)\n",
+ "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory<7.17,>=7.16.0->gf180) (1.5.4)\n",
+ "Requirement already satisfied: spectate>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipycytoscape->gdsfactory<7.17,>=7.16.0->gf180) (1.0.1)\n",
+ "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.2.0)\n",
+ "Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (5.7.1)\n",
+ "Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (3.6.6)\n",
+ "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (3.0.11)\n",
+ "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (6.1.12)\n",
+ "Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (6.3.3)\n",
+ "Requirement already satisfied: pypng in /usr/local/lib/python3.10/dist-packages (from qrcode->gdsfactory<7.17,>=7.16.0->gf180) (0.20220715.0)\n",
+ "Requirement already satisfied: imageio>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory<7.17,>=7.16.0->gf180) (2.31.6)\n",
+ "Requirement already satisfied: tifffile>=2019.7.26 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory<7.17,>=7.16.0->gf180) (2024.5.22)\n",
+ "Requirement already satisfied: PyWavelets>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory<7.17,>=7.16.0->gf180) (1.6.0)\n",
+ "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (67.7.2)\n",
+ "Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.19.1)\n",
+ "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (4.4.2)\n",
+ "Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.7.5)\n",
+ "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.0.47)\n",
+ "Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.2.0)\n",
+ "Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.1.7)\n",
+ "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (4.9.0)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich<14->gdsfactory<7.17,>=7.16.0->gf180) (0.1.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (1.16.0)\n",
+ "Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (6.5.5)\n",
+ "Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.10/dist-packages (from gitpython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (4.0.11)\n",
+ "Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (5.7.2)\n",
+ "Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (24.0.1)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.3.2)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.7)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2.0.7)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2024.6.2)\n",
+ "Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /usr/local/lib/python3.10/dist-packages (from ruamel.yaml->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.2.8)\n",
+ "\u001b[33mWARNING: typer 0.12.3 does not provide the extra 'all'\u001b[0m\u001b[33m\n",
+ "\u001b[0mRequirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from gitdb<5,>=4.0.1->gitpython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (5.0.1)\n",
+ "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.8.4)\n",
+ "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.6.0->jupyter-client->ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (4.2.2)\n",
+ "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (23.1.0)\n",
+ "Requirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (5.10.4)\n",
+ "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (6.5.4)\n",
+ "Requirement already satisfied: nest-asyncio>=1.5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.6.0)\n",
+ "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.8.3)\n",
+ "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.18.1)\n",
+ "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.20.0)\n",
+ "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.1.0)\n",
+ "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.7.0)\n",
+ "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.2.4)\n",
+ "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (4.12.3)\n",
+ "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (6.1.0)\n",
+ "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.7.1)\n",
+ "Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.4)\n",
+ "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.3.0)\n",
+ "Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.8.4)\n",
+ "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.10.0)\n",
+ "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.5.1)\n",
+ "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.3.0)\n",
+ "Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2.19.1)\n",
+ "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (4.19.2)\n",
+ "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (21.2.0)\n",
+ "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2023.12.1)\n",
+ "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.35.1)\n",
+ "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.18.1)\n",
+ "Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.10/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.24.0)\n",
+ "Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.16.0)\n",
+ "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2.5)\n",
+ "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.5.1)\n",
+ "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2.22)\n",
+ "Requirement already satisfied: anyio<4,>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (3.7.1)\n",
+ "Requirement already satisfied: websocket-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.8.0)\n",
+ "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.3.1)\n",
+ "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.2.1)\n",
+ "Installing collected packages: gdsfactory\n",
+ " Attempting uninstall: gdsfactory\n",
+ " Found existing installation: gdsfactory 7.26.1\n",
+ " Uninstalling gdsfactory-7.26.1:\n",
+ " Successfully uninstalled gdsfactory-7.26.1\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "sky130 0.11.1 requires gdsfactory~=7.26.1, but you have gdsfactory 7.16.0 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed gdsfactory-7.16.0\n",
+ "Collecting gdsfactory==7.7.0\n",
+ " Using cached gdsfactory-7.7.0-py3-none-any.whl (801 kB)\n",
+ "Requirement already satisfied: flatdict in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (4.0.1)\n",
+ "Requirement already satisfied: gdstk<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.9.52)\n",
+ "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (3.1.4)\n",
+ "Requirement already satisfied: loguru<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.7.2)\n",
+ "Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (3.7.1)\n",
+ "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (1.25.2)\n",
+ "Requirement already satisfied: omegaconf<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.3.0)\n",
+ "Requirement already satisfied: orjson in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (3.10.5)\n",
+ "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.0.3)\n",
+ "Requirement already satisfied: pydantic<3,>=2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.6.4)\n",
+ "Requirement already satisfied: pydantic-settings in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.2.1)\n",
+ "Requirement already satisfied: pydantic-extra-types in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.8.2)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (6.0.1)\n",
+ "Requirement already satisfied: qrcode in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (7.4.2)\n",
+ "Requirement already satisfied: rectpack in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.2.2)\n",
+ "Requirement already satisfied: rich in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (13.7.1)\n",
+ "Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (1.11.4)\n",
+ "Requirement already satisfied: shapely<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.0.4)\n",
+ "Requirement already satisfied: toolz in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.12.1)\n",
+ "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (4.66.4)\n",
+ "Requirement already satisfied: types-PyYAML in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (6.0.12.20240311)\n",
+ "Requirement already satisfied: typer in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.12.3)\n",
+ "Requirement already satisfied: watchdog in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (4.0.1)\n",
+ "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.10/dist-packages (from gdstk<1->gdsfactory==7.7.0) (4.12.2)\n",
+ "Requirement already satisfied: antlr4-python3-runtime==4.9.* in /usr/local/lib/python3.10/dist-packages (from omegaconf<3->gdsfactory==7.7.0) (4.9.3)\n",
+ "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=2->gdsfactory==7.7.0) (0.7.0)\n",
+ "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=2->gdsfactory==7.7.0) (2.16.3)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->gdsfactory==7.7.0) (2.1.5)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (1.2.1)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (0.12.1)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (4.53.0)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (1.4.5)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (24.1)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (9.4.0)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (3.1.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (2.8.2)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->gdsfactory==7.7.0) (2023.4)\n",
+ "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas->gdsfactory==7.7.0) (2024.1)\n",
+ "Requirement already satisfied: python-dotenv>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from pydantic-settings->gdsfactory==7.7.0) (1.0.1)\n",
+ "Requirement already satisfied: pypng in /usr/local/lib/python3.10/dist-packages (from qrcode->gdsfactory==7.7.0) (0.20220715.0)\n",
+ "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich->gdsfactory==7.7.0) (3.0.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->gdsfactory==7.7.0) (2.16.1)\n",
+ "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer->gdsfactory==7.7.0) (8.1.7)\n",
+ "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer->gdsfactory==7.7.0) (1.5.4)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich->gdsfactory==7.7.0) (0.1.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->gdsfactory==7.7.0) (1.16.0)\n",
+ "Installing collected packages: gdsfactory\n",
+ " Attempting uninstall: gdsfactory\n",
+ " Found existing installation: gdsfactory 7.16.0\n",
+ " Uninstalling gdsfactory-7.16.0:\n",
+ " Successfully uninstalled gdsfactory-7.16.0\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "gf180 0.1.0 requires gdsfactory<7.17,>=7.16.0, but you have gdsfactory 7.7.0 which is incompatible.\n",
+ "sky130 0.11.1 requires gdsfactory~=7.26.1, but you have gdsfactory 7.7.0 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed gdsfactory-7.7.0\n",
+ "bin/micromamba\n",
+ "env: CONDA_PREFIX=/content/conda-env\n",
+ "Empty environment created at prefix: /content/conda-env\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "litex-hub/linux-64.. ⣾ \n",
+ "litex-hub/noarch (.. ⣾ \n",
+ "main/linux-64 (che.. ⣾ \n",
+ "main/noarch (check.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "litex-hub/linux-64.. ⣾ \n",
+ "litex-hub/noarch (.. ⣾ \n",
+ "main/linux-64 (che.. ⣾ \n",
+ "main/noarch (check.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "litex-hub/linux-64.. ⣾ \n",
+ "litex-hub/noarch (.. ⣾ \n",
+ "main/linux-64 (che.. ⣾ \n",
+ "main/noarch (check.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmain/noarch (check zst) \n",
+ "main/linux-64 (check zst) \n",
+ "[+] 0.3s\n",
+ "litex-hub/linux-64.. ⣾ \n",
+ "litex-hub/noarch (.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/noarch (check zst) \n",
+ "[+] 0.4s\n",
+ "litex-hub/linux-64.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/linux-64 (check zst) \n",
+ "\u001b[?25h\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "litex-hub/linux-64 ⣾ \n",
+ "litex-hub/noarch ⣾ \n",
+ "main/linux-64 ⣾ \n",
+ "main/noarch ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "litex-hub/linux-64 ⣾ \n",
+ "litex-hub/noarch ⣾ \n",
+ "main/linux-64 ⣾ \n",
+ "main/noarch 4%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/noarch \n",
+ "main/noarch \n",
+ "[+] 0.3s\n",
+ "litex-hub/linux-64 ⣾ \n",
+ "main/linux-64 10%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "litex-hub/linux-64 ⣾ \n",
+ "main/linux-64 84%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmain/linux-64 \n",
+ "[+] 0.5s\n",
+ "litex-hub/linux-64 ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n",
+ "litex-hub/linux-64 ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n",
+ "litex-hub/linux-64 ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n",
+ "litex-hub/linux-64 54%\u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/linux-64 \n",
+ "\u001b[?25h\n",
+ "Transaction\n",
+ "\n",
+ " Prefix: /content/conda-env\n",
+ "\n",
+ " Updating specs:\n",
+ "\n",
+ " - klayout\n",
+ "\n",
+ "\n",
+ " Package Version Build Channel Size\n",
+ "─────────────────────────────────────────────────────────────────────────────────────────\n",
+ " Install:\n",
+ "─────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ " \u001b[32m+ _libgcc_mutex \u001b[0m 0.1 main main 3kB\n",
+ " \u001b[32m+ libstdcxx-ng \u001b[0m 11.2.0 h1234567_1 main 6MB\n",
+ " \u001b[32m+ ld_impl_linux-64\u001b[0m 2.38 h1181459_1 main 749kB\n",
+ " \u001b[32m+ ca-certificates \u001b[0m 2024.3.11 h06a4308_0 main 137kB\n",
+ " \u001b[32m+ libgomp \u001b[0m 11.2.0 h1234567_1 main 573kB\n",
+ " \u001b[32m+ _openmp_mutex \u001b[0m 5.1 1_gnu main 21kB\n",
+ " \u001b[32m+ libgcc-ng \u001b[0m 11.2.0 h1234567_1 main 9MB\n",
+ " \u001b[32m+ yaml \u001b[0m 0.1.7 had09818_2 main 87kB\n",
+ " \u001b[32m+ libuuid \u001b[0m 1.41.5 h5eee18b_0 main 29kB\n",
+ " \u001b[32m+ gmp \u001b[0m 6.2.1 h295c915_3 main 822kB\n",
+ " \u001b[32m+ ncurses \u001b[0m 6.4 h6a678d5_0 main 1MB\n",
+ " \u001b[32m+ bzip2 \u001b[0m 1.0.8 h5eee18b_6 main 428kB\n",
+ " \u001b[32m+ libev \u001b[0m 4.33 h7f8727e_1 main 109kB\n",
+ " \u001b[32m+ c-ares \u001b[0m 1.19.1 h5eee18b_0 main 116kB\n",
+ " \u001b[32m+ libiconv \u001b[0m 1.16 h5eee18b_3 main 1MB\n",
+ " \u001b[32m+ libffi \u001b[0m 3.4.4 h6a678d5_1 main 154kB\n",
+ " \u001b[32m+ xz \u001b[0m 5.4.6 h5eee18b_1 main 717kB\n",
+ " \u001b[32m+ zlib \u001b[0m 1.2.13 h5eee18b_1 main 127kB\n",
+ " \u001b[32m+ openssl \u001b[0m 1.1.1w h7f8727e_0 main 4MB\n",
+ " \u001b[32m+ libxcb \u001b[0m 1.15 h7f8727e_0 main 623kB\n",
+ " \u001b[32m+ jpeg \u001b[0m 9e h5eee18b_1 main 281kB\n",
+ " \u001b[32m+ icu \u001b[0m 58.2 he6710b0_3 main 24MB\n",
+ " \u001b[32m+ expat \u001b[0m 2.6.2 h6a678d5_0 main 200kB\n",
+ " \u001b[32m+ libedit \u001b[0m 3.1.20230828 h5eee18b_0 main 196kB\n",
+ " \u001b[32m+ readline \u001b[0m 8.2 h5eee18b_0 main 468kB\n",
+ " \u001b[32m+ tk \u001b[0m 8.6.14 h39e8969_0 main 4MB\n",
+ " \u001b[32m+ pcre2 \u001b[0m 10.42 hebb0a14_1 main 3MB\n",
+ " \u001b[32m+ libpng \u001b[0m 1.6.39 h5eee18b_0 main 363kB\n",
+ " \u001b[32m+ libssh2 \u001b[0m 1.10.0 h37d81fd_2 main 312kB\n",
+ " \u001b[32m+ libnghttp2 \u001b[0m 1.52.0 ha637b67_1 main 717kB\n",
+ " \u001b[32m+ krb5 \u001b[0m 1.20.1 h568e23c_1 main 1MB\n",
+ " \u001b[32m+ sqlite \u001b[0m 3.45.3 h5eee18b_0 main 2MB\n",
+ " \u001b[32m+ ruby \u001b[0m 2.5.1 haf1161a_0 main 5MB\n",
+ " \u001b[32m+ libglib \u001b[0m 2.78.4 hdc74915_0 main 2MB\n",
+ " \u001b[32m+ freetype \u001b[0m 2.12.1 h4a9f257_0 main 972kB\n",
+ " \u001b[32m+ libcurl \u001b[0m 8.2.1 h91b91d3_0 main 386kB\n",
+ " \u001b[32m+ python \u001b[0m 3.7.16 h7a1cb2a_0 main 49MB\n",
+ " \u001b[32m+ wheel \u001b[0m 0.38.4 py37h06a4308_0 main 59kB\n",
+ " \u001b[32m+ glib-tools \u001b[0m 2.78.4 h6a678d5_0 main 113kB\n",
+ " \u001b[32m+ curl \u001b[0m 8.2.1 h37d81fd_0 main 89kB\n",
+ " \u001b[32m+ certifi \u001b[0m 2022.12.7 py37h06a4308_0 main 155kB\n",
+ " \u001b[32m+ libgit2 \u001b[0m 1.6.4 ha637b67_0 main 1MB\n",
+ " \u001b[32m+ setuptools \u001b[0m 65.6.3 py37h06a4308_0 main 1MB\n",
+ " \u001b[32m+ pip \u001b[0m 22.3.1 py37h06a4308_0 main 3MB\n",
+ " \u001b[32m+ glib \u001b[0m 2.78.4 h6a678d5_0 main 499kB\n",
+ " \u001b[32m+ gstreamer \u001b[0m 1.14.1 h5eee18b_1 main 2MB\n",
+ " \u001b[32m+ dbus \u001b[0m 1.13.18 hb2f20db_0 main 600kB\n",
+ " \u001b[32m+ gst-plugins-base\u001b[0m 1.14.1 h6a678d5_1 main 2MB\n",
+ " \u001b[32m+ libxml2 \u001b[0m 2.9.9 20220706_155948 litex-hub 1MB\n",
+ " \u001b[32m+ fontconfig \u001b[0m 2.13.0 h9420a91_0 main 298kB\n",
+ " \u001b[32m+ qt \u001b[0m 5.9.7 h5867ecd_1 main 90MB\n",
+ " \u001b[32m+ klayout \u001b[0m 0.28.17_212_gfa14afbbf 20240223_100318_py37 litex-hub 27MB\n",
+ "\n",
+ " Summary:\n",
+ "\n",
+ " Install: 52 packages\n",
+ "\n",
+ " Total download: 249MB\n",
+ "\n",
+ "─────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\n",
+ "\n",
+ "Transaction starting\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "Downloading 0%\n",
+ "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "Downloading (5) 0%\n",
+ "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "Downloading (5) 0%\n",
+ "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n",
+ "Downloading (5) 0%\n",
+ "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "Downloading (5) 0%\n",
+ "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G_libgcc_mutex 3.1kB @ 7.7kB/s 0.4s\n",
+ "[+] 0.5s\n",
+ "Downloading (5) 1%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gld_impl_linux-64 749.1kB @ 1.5MB/s 0.5s\n",
+ "ca-certificates 137.4kB @ 234.5kB/s 0.6s\n",
+ "libgomp 573.2kB @ 976.5kB/s 0.6s\n",
+ "[+] 0.6s\n",
+ "Downloading (5) 1%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n",
+ "Downloading (5) 2%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n",
+ "Downloading (5) 3%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibstdcxx-ng 6.4MB @ 7.5MB/s 0.9s\n",
+ "ncurses 1.2MB @ 1.3MB/s 0.5s\n",
+ "[+] 0.9s\n",
+ "Downloading (5) 4%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gc-ares 116.3kB @ 126.2kB/s 0.4s\n",
+ "[+] 1.0s\n",
+ "Downloading (5) 4%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxz 716.9kB @ 698.4kB/s 0.4s\n",
+ "libxcb 623.5kB @ 573.9kB/s 0.5s\n",
+ "[+] 1.1s\n",
+ "Downloading (5) 5%\n",
+ "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.2s\n",
+ "Downloading (5) 5%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gexpat 200.2kB @ 156.8kB/s 0.4s\n",
+ "[+] 1.3s\n",
+ "Downloading (5) 5%\n",
+ "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibssh2 311.8kB @ 234.8kB/s 0.4s\n",
+ "tk 3.6MB @ 2.6MB/s 0.5s\n",
+ "[+] 1.4s\n",
+ "Downloading (5) 6%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.5s\n",
+ "Downloading (5) 6%\n",
+ "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsqlite 1.7MB @ 1.1MB/s 0.6s\n",
+ "[+] 1.6s\n",
+ "Downloading (5) 7%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.7s\n",
+ "Downloading (5) 7%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gwheel 58.7kB @ 33.3kB/s 0.5s\n",
+ "certifi 155.3kB @ 87.6kB/s 0.4s\n",
+ "[+] 1.8s\n",
+ "Downloading (5) 7%\n",
+ "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n",
+ "Downloading (5) 7%\n",
+ "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.0s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpip 2.8MB @ 1.4MB/s 0.6s\n",
+ "_openmp_mutex 20.8kB @ 10.0kB/s 0.3s\n",
+ "[+] 2.1s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfreetype 972.0kB @ 461.3kB/s 1.0s\n",
+ "[+] 2.2s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfontconfig 297.6kB @ 135.0kB/s 0.4s\n",
+ "[+] 2.3s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibuuid 29.2kB @ 12.6kB/s 0.3s\n",
+ "dbus 600.2kB @ 253.2kB/s 0.8s\n",
+ "[+] 2.4s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibev 108.9kB @ 44.9kB/s 0.3s\n",
+ "[+] 2.5s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gzlib 127.1kB @ 50.3kB/s 0.4s\n",
+ "[+] 2.6s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.7s\n",
+ "Downloading (5) 9%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.8s\n",
+ "Downloading (5) 11%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcurl 386.4kB @ 137.3kB/s 0.4s\n",
+ "krb5 1.4MB @ 502.2kB/s 0.5s\n",
+ "[+] 2.9s\n",
+ "Downloading (5) 14%\n",
+ "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpcre2 3.3MB @ 1.2MB/s 0.6s\n",
+ "[+] 3.0s\n",
+ "Downloading (5) 18%\n",
+ "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcurl 88.8kB @ 28.9kB/s 0.5s\n",
+ "[+] 3.1s\n",
+ "Downloading (5) 19%\n",
+ "Extracting (20) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gicu 23.8MB @ 7.5MB/s 1.0s\n",
+ "[+] 3.2s\n",
+ "Downloading (5) 21%\n",
+ "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n",
+ "Downloading (5) 21%\n",
+ "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gglib 499.0kB @ 151.3kB/s 0.5s\n",
+ "[+] 3.4s\n",
+ "Downloading (5) 21%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.5s\n",
+ "Downloading (5) 23%\n",
+ "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibxml2 1.4MB @ 395.5kB/s 0.7s\n",
+ "bzip2 427.5kB @ 121.0kB/s 0.5s\n",
+ "[+] 3.6s\n",
+ "Downloading (5) 25%\n",
+ "Extracting (23) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgcc-ng 8.9MB @ 2.5MB/s 0.7s\n",
+ "readline 467.7kB @ 129.1kB/s 0.3s\n",
+ "[+] 3.7s\n",
+ "Downloading (5) 25%\n",
+ "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n",
+ "Downloading (5) 26%\n",
+ "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.9s\n",
+ "Downloading (5) 27%\n",
+ "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gopenssl 4.0MB @ 1.0MB/s 0.7s\n",
+ "glib-tools 112.6kB @ 28.5kB/s 0.4s\n",
+ "[+] 4.0s\n",
+ "Downloading (5) 27%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggstreamer 1.7MB @ 415.6kB/s 0.5s\n",
+ "[+] 4.1s\n",
+ "Downloading (5) 28%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n",
+ "Downloading (5) 29%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.3s\n",
+ "Downloading (5) 31%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibiconv 1.4MB @ 327.5kB/s 0.5s\n",
+ "[+] 4.4s\n",
+ "Downloading (5) 34%\n",
+ "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n",
+ "Downloading (5) 35%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n",
+ "Downloading (5) 38%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibglib 1.6MB @ 339.9kB/s 0.6s\n",
+ "[+] 4.7s\n",
+ "Downloading (5) 39%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gklayout 26.7MB @ 5.7MB/s 1.1s\n",
+ "[+] 4.8s\n",
+ "Downloading (5) 41%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n",
+ "Downloading (5) 41%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gruby 5.3MB @ 1.1MB/s 1.5s\n",
+ "[+] 5.0s\n",
+ "Downloading (5) 42%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsetuptools 1.4MB @ 287.5kB/s 0.6s\n",
+ "libedit 195.8kB @ 38.9kB/s 1.1s\n",
+ "yaml 87.1kB @ 17.2kB/s 0.4s\n",
+ "[+] 5.1s\n",
+ "Downloading (5) 43%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gjpeg 281.4kB @ 54.3kB/s 0.5s\n",
+ "[+] 5.2s\n",
+ "Downloading (5) 43%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n",
+ "Downloading (5) 43%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n",
+ "Downloading (5) 43%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n",
+ "Downloading (5) 43%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibpng 362.6kB @ 65.6kB/s 0.5s\n",
+ "[+] 5.6s\n",
+ "Downloading (5) 43%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n",
+ "Downloading (5) 44%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnghttp2 716.6kB @ 125.7kB/s 0.5s\n",
+ "[+] 5.8s\n",
+ "Downloading (5) 47%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.9s\n",
+ "Downloading (5) 48%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibffi 154.0kB @ 25.8kB/s 0.4s\n",
+ "[+] 6.0s\n",
+ "Downloading (5) 50%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n",
+ "Downloading (5) 51%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.2s\n",
+ "Downloading (5) 52%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgit2 1.2MB @ 187.9kB/s 0.5s\n",
+ "[+] 6.3s\n",
+ "Downloading (4) 55%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggst-plugins-base 2.3MB @ 353.7kB/s 1.3s\n",
+ "[+] 6.4s\n",
+ "Downloading (3) 58%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggmp 822.4kB @ 127.9kB/s 0.5s\n",
+ "[+] 6.5s\n",
+ "Downloading (2) 61%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n",
+ "Downloading (2) 63%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.7s\n",
+ "Downloading (2) 64%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.8s\n",
+ "Downloading (2) 67%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n",
+ "Downloading (2) 69%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.0s\n",
+ "Downloading (2) 71%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n",
+ "Downloading (2) 74%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.2s\n",
+ "Downloading (2) 76%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n",
+ "Downloading (2) 78%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n",
+ "Downloading (2) 79%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n",
+ "Downloading (2) 81%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n",
+ "Downloading (2) 83%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gqt 90.0MB @ 11.7MB/s 2.7s\n",
+ "[+] 7.7s\n",
+ "Downloading (1) 85%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n",
+ "Downloading (1) 85%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.9s\n",
+ "Downloading (1) 86%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.0s\n",
+ "Downloading (1) 86%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.1s\n",
+ "Downloading (1) 87%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.2s\n",
+ "Downloading (1) 88%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.3s\n",
+ "Downloading (1) 89%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.4s\n",
+ "Downloading (1) 90%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.5s\n",
+ "Downloading (1) 91%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.6s\n",
+ "Downloading (1) 93%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.7s\n",
+ "Downloading (1) 95%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.8s\n",
+ "Downloading (1) 96%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.9s\n",
+ "Downloading (1) 98%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpython 48.7MB @ 5.4MB/s 4.0s\n",
+ "[+] 9.0s\n",
+ "Downloading 100%\n",
+ "Extracting (36) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.1s\n",
+ "Downloading 100%\n",
+ "Extracting (36) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.2s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.3s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.4s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.5s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.6s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.7s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.8s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.9s\n",
+ "Downloading 100%\n",
+ "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.0s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.1s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.2s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.3s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.4s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.5s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.6s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.7s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.8s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.9s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.0s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.1s\n",
+ "Downloading 100%\n",
+ "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.2s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.3s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.4s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.5s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.6s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.7s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.8s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.9s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.0s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.1s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.2s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.3s\n",
+ "Downloading 100%\n",
+ "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.4s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.5s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.6s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.7s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.8s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.9s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.0s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.1s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.2s\n",
+ "Downloading 100%\n",
+ "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.3s\n",
+ "Downloading 100%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.4s\n",
+ "Downloading 100%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.5s\n",
+ "Downloading 100%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.6s\n",
+ "Downloading 100%\n",
+ "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.7s\n",
+ "Downloading 100%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.8s\n",
+ "Downloading 100%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.9s\n",
+ "Downloading 100%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.0s\n",
+ "Downloading 100%\n",
+ "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.1s\n",
+ "Downloading 100%\n",
+ "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.2s\n",
+ "Downloading 100%\n",
+ "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.3s\n",
+ "Downloading 100%\n",
+ "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.4s\n",
+ "Downloading 100%\n",
+ "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.5s\n",
+ "Downloading 100%\n",
+ "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.6s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.7s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.8s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.9s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.0s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.1s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.2s\n",
+ "Downloading 100%\n",
+ "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.3s\n",
+ "Downloading 100%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.4s\n",
+ "Downloading 100%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.5s\n",
+ "Downloading 100%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.6s\n",
+ "Downloading 100%\n",
+ "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.7s\n",
+ "Downloading 100%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.8s\n",
+ "Downloading 100%\n",
+ "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.9s\n",
+ "Downloading 100%\n",
+ "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.0s\n",
+ "Downloading 100%\n",
+ "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.1s\n",
+ "Downloading 100%\n",
+ "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.2s\n",
+ "Downloading 100%\n",
+ "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.3s\n",
+ "Downloading 100%\n",
+ "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.4s\n",
+ "Downloading 100%\n",
+ "Extracting (23) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.5s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.6s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.7s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.8s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.9s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.0s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.1s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.2s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.3s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.4s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.5s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.6s\n",
+ "Downloading 100%\n",
+ "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.7s\n",
+ "Downloading 100%\n",
+ "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.8s\n",
+ "Downloading 100%\n",
+ "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.9s\n",
+ "Downloading 100%\n",
+ "Extracting (20) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.0s\n",
+ "Downloading 100%\n",
+ "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.1s\n",
+ "Downloading 100%\n",
+ "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.2s\n",
+ "Downloading 100%\n",
+ "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.3s\n",
+ "Downloading 100%\n",
+ "Extracting (18) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.4s\n",
+ "Downloading 100%\n",
+ "Extracting (18) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.5s\n",
+ "Downloading 100%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.6s\n",
+ "Downloading 100%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.7s\n",
+ "Downloading 100%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.8s\n",
+ "Downloading 100%\n",
+ "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.9s\n",
+ "Downloading 100%\n",
+ "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.0s\n",
+ "Downloading 100%\n",
+ "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.1s\n",
+ "Downloading 100%\n",
+ "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.2s\n",
+ "Downloading 100%\n",
+ "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.3s\n",
+ "Downloading 100%\n",
+ "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.4s\n",
+ "Downloading 100%\n",
+ "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.5s\n",
+ "Downloading 100%\n",
+ "Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.6s\n",
+ "Downloading 100%\n",
+ "Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.7s\n",
+ "Downloading 100%\n",
+ "Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.8s\n",
+ "Downloading 100%\n",
+ "Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.9s\n",
+ "Downloading 100%\n",
+ "Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.0s\n",
+ "Downloading 100%\n",
+ "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.1s\n",
+ "Downloading 100%\n",
+ "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.2s\n",
+ "Downloading 100%\n",
+ "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.3s\n",
+ "Downloading 100%\n",
+ "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.4s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.5s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.6s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.7s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.8s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.9s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.0s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.1s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.2s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.3s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.4s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.5s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.6s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.7s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.8s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.9s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.0s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.1s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.2s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.3s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.4s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.5s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.6s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.7s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.8s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.9s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.0s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.1s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.2s\n",
+ "Downloading 100%\n",
+ "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.3s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.4s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.5s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.6s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.7s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.8s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.9s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.0s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.1s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.2s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.3s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.4s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.5s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.6s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.7s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.8s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.9s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.0s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.1s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.2s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.3s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.4s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.5s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.6s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.7s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.8s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.9s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.0s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.1s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.2s\n",
+ "Downloading 100%\n",
+ "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.3s\n",
+ "Downloading 100%\n",
+ "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.4s\n",
+ "Downloading 100%\n",
+ "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.5s\n",
+ "Downloading 100%\n",
+ "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.6s\n",
+ "Downloading 100%\n",
+ "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.7s\n",
+ "Downloading 100%\n",
+ "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.8s\n",
+ "Downloading 100%\n",
+ "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.9s\n",
+ "Downloading 100%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.0s\n",
+ "Downloading 100%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.1s\n",
+ "Downloading 100%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.2s\n",
+ "Downloading 100%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.3s\n",
+ "Downloading 100%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.4s\n",
+ "Downloading 100%\n",
+ "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.5s\n",
+ "Downloading 100%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.6s\n",
+ "Downloading 100%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.7s\n",
+ "Downloading 100%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.8s\n",
+ "Downloading 100%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.9s\n",
+ "Downloading 100%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.0s\n",
+ "Downloading 100%\n",
+ "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.1s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.2s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.3s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.4s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.5s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.6s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.7s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.8s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.9s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.0s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.1s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.2s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.3s\n",
+ "Downloading 100%\n",
+ "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.8s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.9s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.0s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.1s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.2s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.3s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.4s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.5s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.6s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.7s\n",
+ "Downloading 100%\n",
+ "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.0s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.1s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.2s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.3s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.4s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.5s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.6s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.7s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.0s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.1s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.2s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.3s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.4s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.5s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.6s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.7s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.0s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.1s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.2s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.3s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.4s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.5s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.6s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.7s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.0s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.1s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.2s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.3s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.4s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.5s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.6s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.7s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.0s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.1s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.2s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.3s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.4s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.5s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.6s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.7s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.0s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.1s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.2s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.3s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.4s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.5s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.6s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.7s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.8s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.9s\n",
+ "Downloading 100%\n",
+ "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.0s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.1s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.2s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.3s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.4s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.5s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.6s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.7s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.8s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.9s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.0s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.1s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.2s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.3s\n",
+ "Downloading 100%\n",
+ "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.4s\n",
+ "Downloading 100%\n",
+ "Extracting 100%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25hLinking _libgcc_mutex-0.1-main\n",
+ "Linking libstdcxx-ng-11.2.0-h1234567_1\n",
+ "Linking ld_impl_linux-64-2.38-h1181459_1\n",
+ "Linking ca-certificates-2024.3.11-h06a4308_0\n",
+ "Linking libgomp-11.2.0-h1234567_1\n",
+ "Linking _openmp_mutex-5.1-1_gnu\n",
+ "Linking libgcc-ng-11.2.0-h1234567_1\n",
+ "Linking yaml-0.1.7-had09818_2\n",
+ "Linking libuuid-1.41.5-h5eee18b_0\n",
+ "Linking gmp-6.2.1-h295c915_3\n",
+ "Linking ncurses-6.4-h6a678d5_0\n",
+ "Linking bzip2-1.0.8-h5eee18b_6\n",
+ "Linking libev-4.33-h7f8727e_1\n",
+ "Linking c-ares-1.19.1-h5eee18b_0\n",
+ "Linking libiconv-1.16-h5eee18b_3\n",
+ "Linking libffi-3.4.4-h6a678d5_1\n",
+ "Linking xz-5.4.6-h5eee18b_1\n",
+ "Linking zlib-1.2.13-h5eee18b_1\n",
+ "Linking openssl-1.1.1w-h7f8727e_0\n",
+ "Linking libxcb-1.15-h7f8727e_0\n",
+ "Linking jpeg-9e-h5eee18b_1\n",
+ "Linking icu-58.2-he6710b0_3\n",
+ "Linking expat-2.6.2-h6a678d5_0\n",
+ "Linking libedit-3.1.20230828-h5eee18b_0\n",
+ "Linking readline-8.2-h5eee18b_0\n",
+ "Linking tk-8.6.14-h39e8969_0\n",
+ "Linking pcre2-10.42-hebb0a14_1\n",
+ "Linking libpng-1.6.39-h5eee18b_0\n",
+ "Linking libssh2-1.10.0-h37d81fd_2\n",
+ "Linking libnghttp2-1.52.0-ha637b67_1\n",
+ "Linking krb5-1.20.1-h568e23c_1\n",
+ "Linking sqlite-3.45.3-h5eee18b_0\n",
+ "Linking ruby-2.5.1-haf1161a_0\n",
+ "Linking libglib-2.78.4-hdc74915_0\n",
+ "Linking freetype-2.12.1-h4a9f257_0\n",
+ "Linking libcurl-8.2.1-h91b91d3_0\n",
+ "Linking python-3.7.16-h7a1cb2a_0\n",
+ "Linking wheel-0.38.4-py37h06a4308_0\n",
+ "Linking glib-tools-2.78.4-h6a678d5_0\n",
+ "Linking curl-8.2.1-h37d81fd_0\n",
+ "Linking certifi-2022.12.7-py37h06a4308_0\n",
+ "Linking libgit2-1.6.4-ha637b67_0\n",
+ "Linking setuptools-65.6.3-py37h06a4308_0\n",
+ "Linking pip-22.3.1-py37h06a4308_0\n",
+ "Linking glib-2.78.4-h6a678d5_0\n",
+ "Linking gstreamer-1.14.1-h5eee18b_1\n",
+ "Linking dbus-1.13.18-hb2f20db_0\n",
+ "Linking gst-plugins-base-1.14.1-h6a678d5_1\n",
+ "Linking libxml2-2.9.9-20220706_155948\n",
+ "Linking fontconfig-2.13.0-h9420a91_0\n",
+ "Linking qt-5.9.7-h5867ecd_1\n",
+ "Linking klayout-0.28.17_212_gfa14afbbf-20240223_100318_py37\n",
+ "\n",
+ "Transaction finished\n",
+ "\n",
+ "To activate this environment, use:\n",
+ "\n",
+ " micromamba activate /content/conda-env\n",
+ "\n",
+ "Or to execute a single command in this environment, use:\n",
+ "\n",
+ " micromamba run -p /content/conda-env mycommand\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup the environment for the OpenFASOC GDSFactory generator\n",
+ "# You only need to run this block once!\n",
+ "\n",
+ "# Clone OpenFASoC\n",
+ "!git clone https://github.com/idea-fasoc/OpenFASOC\n",
+ "# Install python dependencies\n",
+ "!pip install sky130\n",
+ "!pip install gf180 prettyprinttree svgutils\n",
+ "!pip install gdsfactory==7.7.0\n",
+ "\n",
+ "import pathlib\n",
+ "import os\n",
+ "# Install KLayout (via conda)\n",
+ "!curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba\n",
+ "conda_prefix_path = pathlib.Path('conda-env')\n",
+ "CONDA_PREFIX = str(conda_prefix_path.resolve())\n",
+ "%env CONDA_PREFIX={CONDA_PREFIX}\n",
+ "\n",
+ "!bin/micromamba create --yes --prefix $CONDA_PREFIX\n",
+ "# Install from the litex-hub channel\n",
+ "!bin/micromamba install --yes --prefix $CONDA_PREFIX \\\n",
+ " --channel litex-hub \\\n",
+ " --channel main \\\n",
+ " klayout\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "B6dO3W3m8TQZ"
+ },
+ "source": [
+ "#### 1.2. Adding the `klayout` binary to the system path, then goto the GLayout directory\n",
+ "**You need to run this each time you restart the kernel**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "Izl4QURo8TQa",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "40d0a93b-7d99-410f-8fd6-ff25a830f507"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "env: CONDA_PREFIX=/content/conda-env\n",
+ "env: PATH=/opt/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tools/node/bin:/tools/google-cloud-sdk/bin:/content/conda-env/bin\n",
+ "/content/OpenFASOC/openfasoc/generators/glayout\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Setup the environment for the OpenFASOC GDSFactory generator\n",
+ "\n",
+ "# Adding micro-mamba binary directory to the PATH\n",
+ "# This directory contains Klayout\n",
+ "import pathlib\n",
+ "import os\n",
+ "conda_prefix_path = pathlib.Path('conda-env')\n",
+ "CONDA_PREFIX = str(conda_prefix_path.resolve())\n",
+ "%env CONDA_PREFIX={CONDA_PREFIX}\n",
+ "# Add conda packages to the PATH\n",
+ "PATH = os.environ['PATH']\n",
+ "%env PATH={PATH}:{CONDA_PREFIX}/bin\n",
+ "\n",
+ "%cd /content/OpenFASOC/openfasoc/generators/glayout"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "e-sbwZb_8TQb"
+ },
+ "source": [
+ "#### 1.3. Importing Libraries and Utility Functions"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "id": "Nc7wGAz68TQb"
+ },
+ "outputs": [],
+ "source": [
+ "from glayout.flow.pdk.sky130_mapped import sky130_mapped_pdk as sky130\n",
+ "from glayout.flow.pdk.gf180_mapped import gf180_mapped_pdk as gf180\n",
+ "import gdstk\n",
+ "import svgutils.transform as sg\n",
+ "import IPython.display\n",
+ "from IPython.display import clear_output\n",
+ "import ipywidgets as widgets\n",
+ "\n",
+ "# Redirect all outputs here\n",
+ "hide = widgets.Output()\n",
+ "\n",
+ "def display_gds(gds_file, scale = 3):\n",
+ " # Generate an SVG image\n",
+ " top_level_cell = gdstk.read_gds(gds_file).top_level()[0]\n",
+ " top_level_cell.write_svg('out.svg')\n",
+ " # Scale the image for displaying\n",
+ " fig = sg.fromfile('out.svg')\n",
+ " fig.set_size((str(float(fig.width) * scale), str(float(fig.height) * scale)))\n",
+ " fig.save('out.svg')\n",
+ "\n",
+ " # Display the image\n",
+ " IPython.display.display(IPython.display.SVG('out.svg'))\n",
+ "\n",
+ "def display_component(component, scale = 3):\n",
+ " # Save to a GDS file\n",
+ " with hide:\n",
+ " component.write_gds(\"out.gds\")\n",
+ " display_gds('out.gds', scale)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ywJ1Xc5K395z"
+ },
+ "source": [
+ "# Introduction to GLayout\n",
+ "\n",
+ "## Overview\n",
+ "\n",
+ "This document provides a detailed tutorial on using the GLayout API.\n",
+ "\n",
+ "## Prerequisites\n",
+ "\n",
+ "Ensure that you have the following installed:\n",
+ "- Python environment with access to GLayout API.\n",
+ "- GDSFactory package for handling generic layout components.\n",
+ "- A PDK (Process Design Kit) appropriate for the technology node you're working on\n",
+ "\n",
+ "## GLayers\n",
+ "Processes often have a shared set of layers. We access these layers using generic layers.\n",
+ "We support\n",
+ "1. n well\n",
+ "2. n/p select\n",
+ "3. diffusion\n",
+ "4. poly\n",
+ "5. metal 1\n",
+ "6. metal 2\n",
+ "7. metal 3\n",
+ "8. Mcon\n",
+ "9. via 1\n",
+ "10. via 2\n",
+ "\n",
+ "As you can see in the following code examples we use `pdk.get_glayer()` in order to get a tuple associated with a layer.\n",
+ "\n",
+ "This tuple associated the generic layer with a PDK's layer."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "sky130_met1 = sky130.get_glayer(\"met1\")\n",
+ "gf180_met1 = gf180.get_glayer(\"met1\")\n",
+ "print(sky130_met1)\n",
+ "print(gf180_met1)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "doswEocb2Wyg",
+ "outputId": "46af4bc6-0fde-4f09-9055-80246ef750e6"
+ },
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(67, 20)\n",
+ "(34, 0)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## GRules\n",
+ "GRules is how you access layout rules for a layer.\n",
+ "\n",
+ "### Examples\n",
+ "1. Remember the via example? In that example we wanted to access the minimum width of a via\n",
+ "2. In the via example we want to find the minimum enclosure of a via inside of a metal contact.\n",
+ "3. When you want to space two metal tracks\n"
+ ],
+ "metadata": {
+ "id": "8e_EKnZD6MLY"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Minimum width for a via example\n",
+ "min_width_via1 = sky130.get_grule('via1')['min_width']\n",
+ "print(f\"min width for via: {min_width_via1}\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "gKlMrabr7Skw",
+ "outputId": "6ffc85c1-e72f-4418-cb53-435a89582a78"
+ },
+ "execution_count": 26,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "min width for via: 0.17\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Minimum Enclosure Example\n",
+ "# Lets do it for sky 130\n",
+ "min_enc_met1 = sky130.get_grule('via1','met1')['min_enclosure']\n",
+ "min_enc_met2 = sky130.get_grule('via1','met2')['min_enclosure']\n",
+ "print(\"Sky130\")\n",
+ "print(f\"min enclosure metal1 and via: {min_enc_met1}\")\n",
+ "print(f\"min enclosure metal2 and via: {min_enc_met2}\")\n",
+ "\n",
+ "# Lets do the same for gf180\n",
+ "min_enc_met1 = gf180.get_grule('via1','met1')['min_enclosure']\n",
+ "min_enc_met2 = gf180.get_grule('via1','met2')['min_enclosure']\n",
+ "print(\"Gf180\")\n",
+ "print(f\"min enclosure metal1 and via: {min_enc_met1}\")\n",
+ "print(f\"min enclosure metal1 and via: {min_enc_met2}\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "GaSgRFeR9A0Q",
+ "outputId": "e5b62b08-81d6-412a-d64c-5a37f9669cb8"
+ },
+ "execution_count": 27,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Sky130\n",
+ "min enclosure metal1 and via: 0.0\n",
+ "min enclosure metal2 and via: 0.06\n",
+ "Gf180\n",
+ "min enclosure metal1 and via: 0.12\n",
+ "min enclosure metal1 and via: 0.12\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Minimum Spacing Example\n",
+ "min_met1_spacing = sky130.get_grule('met1','met1')['min_separation']\n",
+ "print(f\"min spacing between metal: {min_met1_spacing}\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "EODOFqGq9DIr",
+ "outputId": "9c75276e-a09c-4de3-9612-98458f379573"
+ },
+ "execution_count": 30,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "min spacing between metal: 0.17\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Drawing layouts\n",
+ "We draw rectangles for layers using gdsfactory\n",
+ "For now, lets use the rules we just used to make a very simple metal rectangle. Here we have an example where we draw a simple metal track."
+ ],
+ "metadata": {
+ "id": "HBKDwtNG94OC"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from glayout.flow.pdk.mappedpdk import MappedPDK\n",
+ "from gdsfactory import Component\n",
+ "from gdsfactory.components import rectangle\n",
+ "\n",
+ "def makeMet1Rectangle(pdk: MappedPDK, length):\n",
+ " met1 = pdk.get_glayer(\"met1\")\n",
+ " met1_width = pdk.get_grule(\"met1\")[\"min_width\"]\n",
+ " top_level = Component(name=\"metal_track\")\n",
+ " top_level << rectangle(size=(length, met1_width), layer=met1)\n",
+ " return top_level\n",
+ "\n",
+ "metalTrack = makeMet1Rectangle(sky130,3)\n",
+ "metalTrack.write_gds('metaltrack.gds')\n",
+ "display_gds('metaltrack.gds',scale=20)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 134
+ },
+ "id": "pfvH6W3T-US7",
+ "outputId": "002b6605-ce98-4e2a-f35d-b147ce762c8f"
+ },
+ "execution_count": 41,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "\u001b[32m2024-06-19 19:37:26.658\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'metaltrack.gds'\u001b[0m\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/svg+xml": ""
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Using and Manipulating Components\n",
+ "In the previous section, we made a component that just consists of a metal track. Now lets use this component to make other components. This is called hierarchal design. Here we introduce the `evaluate_bbox` and `movey`\n"
+ ],
+ "metadata": {
+ "id": "HZdmO-LOAVwV"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from glayout.flow.pdk.util.comp_utils import evaluate_bbox\n",
+ "\n",
+ "def makeAdjacentMetal1Tracks(pdk: MappedPDK, length):\n",
+ " track1 = makeMet1Rectangle(pdk, length)\n",
+ " track2 = makeMet1Rectangle(pdk, length)\n",
+ " top_level = Component(name=\"adjacent_metal_tracks\")\n",
+ " track1_ref = top_level << track1\n",
+ " track2_ref = top_level << track2\n",
+ " width = evaluate_bbox(track1)[1] # gets the dimension on the y axis\n",
+ " track2_ref.movey(width + pdk.get_grule('met1','met1')['min_separation'])\n",
+ " return top_level\n",
+ "\n",
+ "adjMetalTrack = makeAdjacentMetal1Tracks(sky130,3)\n",
+ "adjMetalTrack.write_gds('adjmetaltrack.gds')\n",
+ "display_gds('adjmetaltrack.gds',scale=20)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 202
+ },
+ "id": "9uhSsJk5BQoT",
+ "outputId": "e2568734-0706-4c4d-e338-017d9f2df70f"
+ },
+ "execution_count": 48,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "\u001b[32m2024-06-19 20:00:37.397\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'adjmetaltrack.gds'\u001b[0m\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/svg+xml": ""
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Primitives\n",
+ "GLayout provides many primitives that you can use instead of doing everything from the bottom up. You can find all of the primitives [here](https://github.com/idea-fasoc/OpenFASOC/tree/main/openfasoc/generators/glayout/glayout/flow/primitives)\n",
+ "I will place a pmos and a nmos side by side in the example below:"
+ ],
+ "metadata": {
+ "id": "2ltByHycDMf2"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from glayout.flow.primitives.fet import pmos\n",
+ "from glayout.flow.primitives.fet import nmos\n",
+ "\n",
+ "def placeTwoTrasistors(pdk):\n",
+ " pfet = pmos(pdk)\n",
+ " nfet = nmos(pdk)\n",
+ " top_level = Component()\n",
+ " pfet_ref = top_level << pfet\n",
+ " nfet_ref = top_level << nfet\n",
+ " compSep = pdk.util_max_metal_seperation()\n",
+ " nfet_ref.movex(compSep + evaluate_bbox(pfet)[0])\n",
+ " return top_level\n",
+ "\n",
+ "twoTransistors = placeTwoTrasistors(sky130)\n",
+ "twoTransistors.write_gds('twotransistors.gds')\n",
+ "display_gds('twotransistors.gds',scale=2)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 296
+ },
+ "id": "LDRd54mjEfpz",
+ "outputId": "ef17c6b1-4d2a-45e5-dcaa-59fb9a24eb4c"
+ },
+ "execution_count": 53,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ ":15: UserWarning: Unnamed cells, 3 in 'Unnamed_2f8a1aac'\n",
+ " twoTransistors.write_gds('twotransistors.gds')\n",
+ "\u001b[32m2024-06-19 20:04:32.294\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'twotransistors.gds'\u001b[0m\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/svg+xml": ""
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Routing and Ports\n",
+ "How do we connect the ports of transistors. In this section we'll make a current mirror"
+ ],
+ "metadata": {
+ "id": "Y2DYHIcdHUpw"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from glayout.flow.routing.straight_route import straight_route\n",
+ "from glayout.flow.routing.c_route import c_route\n",
+ "\n",
+ "def currentMirror(pdk: MappedPDK):\n",
+ " currMirrComp = Component()\n",
+ " pfet_ref = pmos(pdk, with_substrate_tap=False, with_dummy=(False, True))\n",
+ " pfet_mir = pmos(pdk, with_substrate_tap=False, with_dummy=(True, False))\n",
+ " cref_ref = currMirrComp << pfet_ref\n",
+ " cmir_ref = currMirrComp << pfet_mir\n",
+ " cref_ref.movex(evaluate_bbox(pfet_mir)[0] + pdk.util_max_metal_seperation())\n",
+ " currMirrComp << straight_route(pdk, cref_ref.ports[\"multiplier_0_source_E\"], cmir_ref.ports[\"multiplier_0_source_E\"])\n",
+ " currMirrComp << straight_route(pdk, cref_ref.ports[\"multiplier_0_gate_E\"], cmir_ref.ports[\"multiplier_0_gate_E\"])\n",
+ " currMirrComp << c_route(pdk, cref_ref.ports[\"multiplier_0_drain_E\"], cref_ref.ports[\"multiplier_0_gate_E\"])\n",
+ " return currMirrComp\n",
+ "\n",
+ "currentMirror(sky130).write_gds(\"cmirror_example.gds\")\n",
+ "display_gds(\"cmirror_example.gds\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 324
+ },
+ "id": "hBw2fYboQvMD",
+ "outputId": "6923efe5-2408-4f14-f3e7-2e7f1f8a78db"
+ },
+ "execution_count": 57,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ ":16: UserWarning: Unnamed cells, 3 in 'Unnamed_79c3280c'\n",
+ " currentMirror(sky130).write_gds(\"cmirror_example.gds\")\n",
+ "\u001b[32m2024-06-19 20:52:07.345\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'cmirror_example.gds'\u001b[0m\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/svg+xml": ""
+ },
+ "metadata": {}
+ }
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.7"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "397704579725e15f5c7cb49fe5f0341eb7531c82d19f2c29d197e8b64ab5776b"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file