Repository: networktocode/network-importer (language: python)

Issue:
Upgrade version to 2.0.0 and add deploy stages in Travis



Discussion / hints:

Fix patch:
diff --git a/.travis.yml b/.travis.yml
index 1c59cd65..5109a455 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,17 +3,19 @@
 dist: "focal"  # Ubuntu 20.04
 stages:
   - name: "lint"
-  - name: "build"
   - name: "test"
   - name: "integration"
-  # - name: "deploy"
-  #   if: "branch = master"
+  - name: "deploy-github"
+    if: "tag IS present"
+  - name: "deploy-pypi"
+    if: "tag IS present"
 
 language: "python"
 python:
   - 3.6
   - 3.7
   - 3.8
+  - 3.9
 
 services:
   - "docker"
@@ -52,15 +54,23 @@ jobs:
         - "invoke pylint"
       python: 3.7
 
-    - stage: "build"
-      before_install: >
-        echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin || travis_terminate 1
-      before_script:
-        - "pip install invoke poetry toml"
-      script:
-        - "invoke build-image --nocache"
-        - "poetry build"
-      python: 3.7
+    # - stage: "integration"
+    #   name: "Nautobot v1.0.1"
+    #   before_install: >
+    #     echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin || travis_terminate 1
+    #   before_script:
+    #     - "pip install --upgrade pip wheel"
+    #     - "pip install invoke toml poetry pynautobot ansible==2.10.7"
+    #     - "ansible-galaxy collection install networktocode.nautobot"
+    #     - "poetry config virtualenvs.create false"
+    #     - "poetry config installer.parallel false"
+    #     - "poetry install"
+    #   script:
+    #     - "invoke nautobot-integration-tests"
+    #   after_script:
+    #     - "cd /tmp && docker-compose logs"
+    #   env: "NAUTOBOT_VERSION=1.0.1"
+    #   python: 3.7
 
     - stage: "integration"
       name: "Netbox v2.10"
@@ -106,3 +116,26 @@ jobs:
         - "invoke integration-tests"
       env: "NETBOX_VERSION=v2.8"
       python: 3.7
+
+    - stage: "deploy-github"
+      before_script:
+        - "pip install poetry"
+      script:
+        - "poetry version $TRAVIS_TAG"
+        - "poetry build"
+      deploy:
+        provider: "releases"
+        api_key: "$GITHUB_AUTH_TOKEN"
+        file_glob: true
+        file: "dist/*"
+        skip_cleanup: true
+        "on":
+          all_branches: true
+
+    - stage: "deploy-pypi"
+      before_script:
+        - "pip install poetry"
+      script:
+        - "poetry version $TRAVIS_TAG"
+        - "poetry config pypi-token.pypi $PYPI_TOKEN"
+        - "poetry publish --build"
diff --git a/examples/multi_site_02/ansible.cfg b/examples/multi_site_02/ansible.cfg
index 1a5f421a..eb3bc696 100644
--- a/examples/multi_site_02/ansible.cfg
+++ b/examples/multi_site_02/ansible.cfg
@@ -1,4 +1,5 @@
 [defaults]
+forks=1
 host_key_checking = False
 interpreter_python = auto_silent
 inventory = inventory.ini
\ No newline at end of file
diff --git a/examples/multi_site_02/nautobot_setup.py b/examples/multi_site_02/nautobot_setup.py
new file mode 100644
index 00000000..434055d9
--- /dev/null
+++ b/examples/multi_site_02/nautobot_setup.py
@@ -0,0 +1,181 @@
+"""Script to add components for Nautobot."""
+import os
+import urllib3
+
+import pynautobot
+
+# pylint: disable=too-many-locals
+# pylint: disable=too-many-branches
+
+PLATFORMS = [
+    {"name": "junos", "manufacturer": "juniper"},
+    {"name": "iosxr", "manufacturer": "cisco"},
+    {"name": "ios", "manufacturer": "cisco"},
+    {"name": "nxos", "manufacturer": "cisco"},
+    {"name": "eos", "manufacturer": "arista"},
+]
+
+DEVICE_LIST = [
+    {"name": "nyc-bb-01", "role": "router", "type": "ios"},
+    {"name": "nyc-rtr-01", "role": "router", "type": "ios"},
+    {"name": "nyc-rtr-02", "role": "router", "type": "ios"},
+    {"name": "nyc-spine-01", "role": "spine", "type": "nxos"},
+    {"name": "nyc-spine-02", "role": "spine", "type": "nxos"},
+    {"name": "nyc-leaf-01", "role": "leaf", "type": "nxos"},
+    {"name": "hou-bb-01", "role": "router", "type": "ios"},
+    {"name": "hou-rtr-01", "role": "router", "type": "junos"},
+    {"name": "hou-rtr-02", "role": "router", "type": "junos"},
+    {"name": "hou-spine-01", "role": "spine", "type": "eos"},
+    {"name": "hou-spine-02", "role": "spine", "type": "eos"},
+    {"name": "hou-leaf-01", "role": "leaf", "type": "eos"},
+    {"name": "hou-leaf-02", "role": "leaf", "type": "eos"},
+    {"name": "sjc-bb-01", "role": "router", "type": "ios"},
+    {"name": "sjc-rtr-01", "role": "router", "type": "iosxr"},
+    {"name": "sjc-rtr-02", "role": "router", "type": "iosxr"},
+    {"name": "sjc-leaf-01", "role": "leaf", "type": "eos"},
+]
+
+SITE_LIST = ["hou", "nyc", "sjc"]
+
+DEVICE_ROLES = ["spine", "leaf", "router"]
+
+
+def get_or_create(object_endpoint, search_key, search_term, **kwargs):
+    """Get or create object with pynautobot.
+
+    Args:
+        object_endpoint (pynautobot Endpoint): Endpoint to make get and post requests to
+        search_key (str): Key to use within the get request, such as name or model
+        search_term (str): What is being searched for
+
+    Returns:
+        obj (pynautobot object), created (bool): Object being created, and whether or not it was created
+    """
+    created = False
+    search = {search_key: search_term}
+    if kwargs.get("just_create_device"):
+        try:
+            print("Just creating device")
+            obj = object_endpoint.create(**search, **kwargs)
+            created = True
+            return obj, created
+        except:  # pylint: disable=bare-except # noqa: E722, E261
+            return None, True
+
+    obj = object_endpoint.get(**search)
+    if obj is None:
+        obj = object_endpoint.create(**search, **kwargs)
+        created = True
+
+    return obj, created
+
+
+def main():
+    """Main code execution block."""
+    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+    nautobot = pynautobot.api(url=os.getenv("NAUTOBOT_ADDRESS"), token=os.getenv("NAUTOBOT_TOKEN"))
+    nautobot.http_session.verify = False
+
+    # Create region
+    for region in ["ni_multi_site_02"]:
+        print(f"Checking on region: {region}")
+        _, created = get_or_create(
+            object_endpoint=nautobot.dcim.regions, search_key="name", search_term=region, slug=region.lower()
+        )
+
+        if created:
+            print(f"Created region: {region}")
+        else:
+            print(f"Region already exists: {region}")
+
+    mfg_map = dict()
+    device_type_map = dict()
+
+    for item in PLATFORMS:
+        print(f"Checking on platform: {item}")
+        mfg, created = get_or_create(
+            object_endpoint=nautobot.dcim.manufacturers,
+            search_key="slug",
+            search_term=item["manufacturer"],
+            name=item["manufacturer"].capitalize(),
+            slug=item["manufacturer"].lower(),
+        )
+
+        mfg_map[item["manufacturer"]]: mfg
+        if created:
+            print(f"Created manufacturer: {item['manufacturer']}")
+        else:
+            print(f"Manufacturer already created: {item['manufacturer']}")
+
+        # Create device type if not already created
+        device_type, created = get_or_create(
+            object_endpoint=nautobot.dcim.device_types,
+            search_key="model",
+            search_term=item["name"],
+            slug=item["name"],
+            manufacturer=mfg.id,
+        )
+
+        device_type_map[item["name"]] = device_type
+        if created:
+            print(f"Create Device Type: {item['name']}")
+        else:
+            print(f"Device Type Already Created: {item['name']}")
+
+    device_role_map = dict()
+
+    # Create device role
+    for dev_role in DEVICE_ROLES:
+        print(f"Checking on device role: {dev_role}")
+        device_role_obj, created = get_or_create(
+            object_endpoint=nautobot.dcim.device_roles, search_key="name", search_term=dev_role, slug=dev_role,
+        )
+
+        if created:
+            print(f"Created device role: {dev_role}")
+        else:
+            print(f"Device role already created: {dev_role}")
+
+        device_role_map[dev_role] = device_role_obj
+
+    # Get all of the sites
+    site_map = dict()
+
+    # Iterate over the sites
+    for site in SITE_LIST:
+        print(f"Checking on site: {site}")
+        # Check if the device is created
+        site_obj, created = get_or_create(
+            object_endpoint=nautobot.dcim.sites, search_key="name", search_term=site, slug=site.lower(), status="Active"
+        )
+
+        if created:
+            print(f"Created site: {site}")
+        else:
+            print(f"Site already created: {site}")
+
+        site_map[site] = site_obj
+
+    # Create Devices
+    for dev in DEVICE_LIST:
+        print(f"Creating device: {dev}")
+        _, created = get_or_create(
+            object_endpoint=nautobot.dcim.devices,
+            search_key="name",
+            search_term=dev["name"],
+            slug=dev["name"].lower(),
+            status="Active",
+            site=site_map["ni_spine_leaf_01"].id,
+            device_type=device_type_map[dev["type"]].id,
+            device_role=device_role_map[dev["role"]].id,
+            just_create_device=True,
+        )
+
+        if created:
+            print(f"Created device: {dev['name']}")
+        else:
+            print(f"Device already created: {dev['name']}")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/multi_site_02/network_importer_nautobot.toml b/examples/multi_site_02/network_importer_nautobot.toml
new file mode 100644
index 00000000..65e3fb47
--- /dev/null
+++ b/examples/multi_site_02/network_importer_nautobot.toml
@@ -0,0 +1,18 @@
+
+
+[main]
+import_ips = true
+import_prefixes = true
+import_cabling = "config"
+import_vlans = "config"
+
+nbr_workers = 5
+
+backend = "nautobot"
+
+[inventory.settings]
+filter="region=ni_multi_site_02"
+
+[logs]
+level = "debug"
+
diff --git a/examples/multi_site_02/pb.nautobot_setup.yaml b/examples/multi_site_02/pb.nautobot_setup.yaml
new file mode 100644
index 00000000..3248e92d
--- /dev/null
+++ b/examples/multi_site_02/pb.nautobot_setup.yaml
@@ -0,0 +1,120 @@
+---
+- name: "CREATE ALL OBJECTS REQUIRED FOR THE NETWORK IMPORTER IN NAUTOBOT"
+  hosts: ["all"]
+  gather_facts: false
+  connection: "local"
+  vars:
+    device_roles: ["spine", "leaf", "router"]
+    platforms:
+      - {name: "junos", manufacturer: "juniper"}
+      - {name: "iosxr", manufacturer: "cisco"}
+      - {name: "ios", manufacturer: "cisco"}
+      - {name: "nxos", manufacturer: "cisco"}
+      - {name: "eos", manufacturer: "arista"}
+    site_prefix: "ni_02"
+    region: "ni_multi_site_02"
+    sites: ["hou", "nyc", "sjc"]
+    nautobot_address: "{{ lookup('env','NAUTOBOT_ADDRESS') }}"
+    nautobot_token: "{{ lookup('env','NAUTOBOT_TOKEN') }}"
+
+  tasks:
+    - name: "DELEGATE TO LOCALHOST BLOCK"
+      delegate_to: "localhost"
+      block:
+        - name: "00 DEBUG VARIABLES"
+          debug:
+            msg:
+              - "Nautobot URL: {{ nautobot_address }}"
+
+        - name: "01 CREATE REGION IN NAUTOBOT"
+          networktocode.nautobot.region:
+            url: "{{ nautobot_address }}"
+            token: "{{ nautobot_token }}"
+            data:
+              name: "{{ region }}"
+            state: "present"
+            validate_certs: False
+          run_once: true
+          tags: ["region"]
+          retries: 5
+          delay: 3
+
+        - name: "05 CREATE MANUFACTURER IN NAUTOBOT"
+          networktocode.nautobot.manufacturer:
+            url: "{{ nautobot_address }}"
+            token: "{{ nautobot_token }}"
+            data:
+              name: "{{ item.manufacturer }}"
+            validate_certs: False
+            state: "present"
+          loop: "{{ platforms }}"
+          run_once: true
+          tags: ["manufacturer", "device_type"]
+          retries: 5
+          delay: 3
+
+        - name: "10 CREATE DEVICE TYPE IN NAUTOBOT"
+          networktocode.nautobot.device_type:
+            url: "{{ nautobot_address }}"
+            token: "{{ nautobot_token }}"
+            data:
+              slug: "{{ item.name }}"
+              model: "{{ item.name }}"
+              manufacturer: "{{ item.manufacturer }}"
+              part_number: "{{ item.name }}"
+              u_height: 1
+              is_full_depth: false
+            state: "present"
+            validate_certs: False
+          loop: "{{ platforms }}"
+          run_once: true
+          tags: ["device_type"]
+          retries: 5
+          delay: 3
+
+        - name: "15 CREATE DEVICE ROLE IN NAUTOBOT"
+          networktocode.nautobot.device_role:
+            url: "{{ nautobot_address }}"
+            token: "{{ nautobot_token }}"
+            data:
+              name: "{{ item }}"
+              color: "0000FF"
+            state: "present"
+            validate_certs: False
+          loop: "{{ device_roles }}"
+          run_once: true
+          tags: ["device_role"]
+          retries: 5
+          delay: 3
+
+        - name: "20 CREATE SITE IN NAUTOBOT"
+          networktocode.nautobot.site:
+            url: "{{ nautobot_address }}"
+            token: "{{ nautobot_token }}"
+            data:
+              name: "{{ site_prefix}}_{{item }}"
+              region: "{{ region }}"
+              status: "Active"
+            state: "present"
+            validate_certs: False
+          loop: "{{ sites }}"
+          run_once: true
+          tags: ["device_site"]
+          retries: 5
+          delay: 3
+
+        - name: "25 CREATE DEVICES IN NAUTOBOT"
+          networktocode.nautobot.device:
+            url: "{{ nautobot_address }}"
+            token: "{{ nautobot_token }}"
+            data:
+              name: "{{ inventory_hostname }}"
+              device_type: "{{ platform }}"
+              device_role: "{{ role }}"
+              site: "{{ site_prefix}}_{{site }}"
+              status: "Active"
+            state: "present"
+            validate_certs: False
+          tags: ["device"]
+          retries: 5
+          delay: 3
diff --git a/examples/spine_leaf_01/ansible.cfg b/examples/spine_leaf_01/ansible.cfg
index 1a5f421a..eb3bc696 100644
--- a/examples/spine_leaf_01/ansible.cfg
+++ b/examples/spine_leaf_01/ansible.cfg
@@ -1,4 +1,5 @@
 [defaults]
+forks=1
 host_key_checking = False
 interpreter_python = auto_silent
 inventory = inventory.ini
\ No newline at end of file
diff --git a/examples/spine_leaf_01/nautobot_setup.py b/examples/spine_leaf_01/nautobot_setup.py
new file mode 100644
index 00000000..60c9beb8
--- /dev/null
+++ b/examples/spine_leaf_01/nautobot_setup.py
@@ -0,0 +1,168 @@
+"""Script to add components for Nautobot."""
+import os
+import urllib3
+
+import pynautobot
+
+# pylint: disable=too-many-locals
+# pylint: disable=too-many-branches
+
+PLATFORMS = [
+    {"name": "junos", "manufacturer": "juniper"},
+    {"name": "iosxr", "manufacturer": "cisco"},
+    {"name": "eos", "manufacturer": "arista"},
+]
+
+DEVICE_LIST = [
+    {"name": "amarillo", "role": "spine", "type": "junos"},
+    {"name": "austin", "role": "spine", "type": "iosxr"},
+    {"name": "san-antonio", "role": "spine", "type": "iosxr"},
+    {"name": "el-paso", "role": "spine", "type": "iosxr"},
+    {"name": "dallas", "role": "leaf", "type": "iosxr"},
+    {"name": "houston", "role": "leaf", "type": "eos"},
+]
+
+SITE_LIST = ["ni_spine_leaf_01"]
+
+DEVICE_ROLES = ["spine", "leaf"]
+
+
+def get_or_create(object_endpoint, search_key, search_term, **kwargs):
+    """Get or create object with pynautobot.
+
+    Args:
+        object_endpoint (pynautobot Endpoint): Endpoint to make get and post requests to
+        search_key (str): Key to use within the get request, such as name or model
+        search_term (str): What is being searched for
+
+    Returns:
+        obj (pynautobot object), created (bool): Object being created, and whether or not it was created
+    """
+    created = False
+    search = {search_key: search_term}
+    if kwargs.get("just_create_device"):
+        try:
+            print("Just creating device")
+            obj = object_endpoint.create(**search, **kwargs)
+            created = True
+            return obj, created
+        except:  # pylint: disable=bare-except # noqa: E722, E261
+            return None, True
+
+    obj = object_endpoint.get(**search)
+    if obj is None:
+        obj = object_endpoint.create(**search, **kwargs)
+        created = True
+
+    return obj, created
+
+
+def main():
+    """Main code execution block."""
+    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+    nautobot = pynautobot.api(url=os.getenv("NAUTOBOT_ADDRESS"), token=os.getenv("NAUTOBOT_TOKEN"))
+    nautobot.http_session.verify = False
+
+    # Create region
+    for region in ["ni_multi_site_02"]:
+        print(f"Checking on region: {region}")
+        _, created = get_or_create(
+            object_endpoint=nautobot.dcim.regions, search_key="name", search_term=region, slug=region.lower()
+        )
+
+        if created:
+            print(f"Created region: {region}")
+        else:
+            print(f"Region already exists: {region}")
+
+    mfg_map = dict()
+    device_type_map = dict()
+
+    for item in PLATFORMS:
+        print(f"Checking on platform: {item}")
+        mfg, created = get_or_create(
+            object_endpoint=nautobot.dcim.manufacturers,
+            search_key="slug",
+            search_term=item["manufacturer"],
+            name=item["manufacturer"].capitalize(),
+            slug=item["manufacturer"].lower(),
+        )
+
+        mfg_map[item["manufacturer"]]: mfg
+        if created:
+            print(f"Created manufacturer: {item['manufacturer']}")
+        else:
+            print(f"Manufacturer already created: {item['manufacturer']}")
+
+        # Create device type if not already created
+        device_type, created = get_or_create(
+            object_endpoint=nautobot.dcim.device_types,
+            search_key="model",
+            search_term=item["name"],
+            slug=item["name"],
+            manufacturer=mfg.id,
+        )
+
+        device_type_map[item["name"]] = device_type
+        if created:
+            print(f"Create Device Type: {item['name']}")
+        else:
+            print(f"Device Type Already Created: {item['name']}")
+
+    device_role_map = dict()
+
+    # Create device role
+    for dev_role in DEVICE_ROLES:
+        print(f"Checking on device role: {dev_role}")
+        device_role_obj, created = get_or_create(
+            object_endpoint=nautobot.dcim.device_roles, search_key="name", search_term=dev_role, slug=dev_role,
+        )
+
+        if created:
+            print(f"Created device role: {dev_role}")
+        else:
+            print(f"Device role already created: {dev_role}")
+
+        device_role_map[dev_role] = device_role_obj
+
+    # Get all of the sites
+    site_map = dict()
+
+    # Iterate over the sites
+    for site in SITE_LIST:
+        print(f"Checking on site: {site}")
+        # Check if the device is created
+        site_obj, created = get_or_create(
+            object_endpoint=nautobot.dcim.sites, search_key="name", search_term=site, slug=site.lower(), status="Active"
+        )
+
+        if created:
+            print(f"Created site: {site}")
+        else:
+            print(f"Site already created: {site}")
+
+        site_map[site] = site_obj
+
+    # Create Devices
+    for dev in DEVICE_LIST:
+        print(f"Creating device: {dev}")
+        _, created = get_or_create(
+            object_endpoint=nautobot.dcim.devices,
+            search_key="name",
+            search_term=dev["name"],
+            slug=dev["name"].lower(),
+            status="Active",
+            site=site_map["ni_spine_leaf_01"].id,
+            device_type=device_type_map[dev["type"]].id,
+            device_role=device_role_map[dev["role"]].id,
+            just_create_device=True,
+        )
+
+        if created:
+            print(f"Created device: {dev['name']}")
+        else:
+            print(f"Device already created: {dev['name']}")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/spine_leaf_01/network_importer_nautobot.toml b/examples/spine_leaf_01/network_importer_nautobot.toml
new file mode 100644
index 00000000..54f538a5
--- /dev/null
+++ b/examples/spine_leaf_01/network_importer_nautobot.toml
@@ -0,0 +1,15 @@
+
+
+[main]
+import_ips = true
+import_prefixes = true
+import_cabling = "config"
+import_vlans = "config"
+
+backend = "nautobot"
+
+[inventory.settings]
+filter = "site=ni_spine_leaf_01"
+
+[logs]
+level = "info"
diff --git a/examples/spine_leaf_01/pb.nautobot_setup.yaml b/examples/spine_leaf_01/pb.nautobot_setup.yaml
new file mode 100644
index 00000000..3cab1eb4
--- /dev/null
+++ b/examples/spine_leaf_01/pb.nautobot_setup.yaml
@@ -0,0 +1,88 @@
+---
+- name: "CREATE ALL OBJECTS REQUIRED FOR THE NETWORK IMPORTER IN NAUTOBOT"
+  hosts: ["all"]
+  gather_facts: false
+  connection: "local"
+  vars:
+    device_roles: ["spine", "leaf"]
+    platforms:
+      - {name: "junos", manufacturer: "juniper"}
+      - {name: "iosxr", manufacturer: "cisco"}
+      - {name: "eos", manufacturer: "arista"}
+    site: "ni_spine_leaf_01"
+    nautobot_address: "{{ lookup('env','NAUTOBOT_ADDRESS') }}"
+    nautobot_token: "{{ lookup('env','NAUTOBOT_TOKEN') }}"
+
+  tasks:
+    - name: "00 DEBUG VARIABLES"
+      debug:
+        msg:
+          - "Nautobot URL: {{ nautobot_address }}"
+
+    - name: "05 CREATE MANUFACTURER IN NAUTOBOT"
+      networktocode.nautobot.manufacturer:
+        url: "{{ nautobot_address }}"
+        token: "{{ nautobot_token }}"
+        data:
+          name: "{{ item.manufacturer }}"
+        validate_certs: False
+        state: "present"
+      loop: "{{ platforms }}"
+      run_once: true
+      tags: ["manufacturer", "device_type"]
+
+    - name: "10 CREATE DEVICE TYPE IN NAUTOBOT"
+      networktocode.nautobot.device_type:
+        url: "{{ nautobot_address }}"
+        token: "{{ nautobot_token }}"
+        data:
+          slug: "{{ item.name }}"
+          model: "{{ item.name }}"
+          manufacturer: "{{ item.manufacturer }}"
+          part_number: "{{ item.name }}"
+          u_height: 1
+          is_full_depth: false
+        validate_certs: False
+        state: "present"
+      loop: "{{ platforms }}"
+      run_once: true
+      tags: ["device_type"]
+
+    - name: "15 CREATE DEVICE ROLE IN NAUTOBOT"
+      networktocode.nautobot.device_role:
+        url: "{{ nautobot_address }}"
+        token: "{{ nautobot_token }}"
+        data:
+          name: "{{ item }}"
+          color: "0000FF"
+        validate_certs: False
+        state: "present"
+      loop: "{{ device_roles }}"
+      run_once: true
+      tags: ["device_role"]
+
+    - name: "20 CREATE SITE IN NAUTOBOT"
+      networktocode.nautobot.site:
+        url: "{{ nautobot_address }}"
+        token: "{{ nautobot_token }}"
+        data:
+          name: "{{ site }}"
+          status: "Active"
+        validate_certs: False
+        state: "present"
+      run_once: true
+      tags: ["device_site"]
+
+    - name: "25 CREATE DEVICES IN NAUTOBOT"
+      networktocode.nautobot.device:
+        url: "{{ nautobot_address }}"
+        token: "{{ nautobot_token }}"
+        data:
+          name: "{{ inventory_hostname }}"
+          device_type: "{{ platform }}"
+          device_role: "{{ role }}"
+          site: "{{ site }}"
+          status: "Active"
+        validate_certs: False
+        state: "present"
+      tags: ["device"]
diff --git a/network_importer.toml b/network_importer.toml
new file mode 100644
index 00000000..0ada7ddc
--- /dev/null
+++ b/network_importer.toml
@@ -0,0 +1,107 @@
+[main]
+inventory_source = "nautobot"
+import_ips = true 
+import_prefixes = false
+import_intf_status = false
+
+# Vlans (name, vlan-id) can be imported from the configuration, from the CLI or both 
+# - "config" will import the vlans just from the configuration
+# - "cli" will import the vlans from the cli using the action `get_vlans`
+# - "true" will import vlans from both cli and config
+# - no or false will not import any vlans
+# The association between interface and vlans will always be derived from the configuration.
+import_vlans = "cli"         # Valid options are ["cli", "config", "no", true, false]
+
+# Cabling can be imported from LLDP, CDP or the configuration (for some point to point links)
+# - "lldp" or "cdp" will import the vlans from the cli using the action `get_neighbors`
+# - "config" will import the neighbors from the configuration (for point to point links)
+# - "true" will import neighbors from both cli and config 
+# - no or false will not import any neighbors
+import_cabling = "cdp"         # Valid options are ["lldp", "cdp", "config", "no", true, false]
+excluded_platforms_cabling = ["cisco_asa"]
+
+# Number of Nornir tasks to execute at the same tim
+nbr_workers= 25
+
+# Directory where the configuration can be find, organized in Batfish format
+configs_directory = "configs"
+
+# [netbox]
+# address = "https://nautobot8"                   # Alternative Env Variable : NETBOX_ADDRESS
+# token = "6fd167451be23bc5104bc07995fa9f4185c33d48"  # Alternative Env Variable : NETBOX_TOKEN
+# verify_ssl = false                                   # Alternative Env Variable : NETBOX_VERIFY_SSL
+
+# # Define a list of supported platform, 
+# # if defined all devices without platform or with a different platforms will be removed from the inventory
+# supported_platforms = [ "cisco_ios", "cisco_nxos" ]
+
+# # Settings for applying diffsync flags to diffsync model objects, in order to alter 
+# # the underlying sync behaviour. The model_flag is applied to any objects that have a 
+# # tag assigned within model_flag_tags. Further details on model_flags can be found 
+# # at: https://github.com/networktocode/diffsync/blob/269df51ce248beaef17d72374e96d19e6df95a13/diffsync/enum.py
+# model_flag_tags = ["your_tag"]
+# model_flag = 1 # flag enum int() representation
+
+[batfish]
+address = "dockerrunner"   # Alternative Env Variable : BATFISH_ADDRESS
+network_name = "network-importer"
+snapshot_name = "latest"
+port_v1 = 9997
+port_v2 = 9996
+use_ssl = false
+
+[network]
+login = "cisco"          # Alternative Env Variable : NETWORK_DEVICE_LOGIN
+password = "Cisco123!"       # Alternative Env Variable : NETWORK_DEVICE_PWD
+enable = true               # Alternative Env Variable : NETWORK_DEVICE_ENABLE
+
+# Connection parameters for Netmiko 
+global_delay_factor = 5
+banner_timeout = 15
+conn_timeout = 5
+
+# List of valid FQDN that can be found in the network,
+# The FQDNs in this list will be automatically removed from all neighbors discovered from LLDP/CDP
+fqdns = [ ]
+
+[inventory]
+# The default method is to use the primary IP defined in NetBox.
+# As an alternative it's possible to use the name of the device and provide your own FQDN.
+use_primary_ip = false # (default: true)
+fqdn = "joshv.com"
+
+# Optional filter to limit the scope of the inventory, takes a comma separated string of key value pair"
+filter = "device=sw01" # ,site=YYY,status=active"    # Alternative Env Variable : INVENTORY_FILTER
+
+# Configure what Inventory will be loaded bu the network importer.
+inventory_class = "network_importer.inventory.NetboxInventory"
+
+[nautobot]
+address = "https://nautobot8:443"                   # Alternative Env Variable : NETBOX_ADDRESS
+token = "6fd167451be23bc5104bc07995fa9f4185c33d48"  # Alternative Env Variable : NETBOX_TOKEN
+verify_ssl = false                                   # Alternative Env Variable : NETBOX_VERIFY_SSL
+
+# Define a list of supported platform, 
+# if defined all devices without platform or with a different platforms will be removed from the inventory
+supported_platforms = [ "cisco_ios", "cisco_nxos" ]
+
+# Settings for applying diffsync flags to diffsync model objects, in order to alter 
+# the underlying sync behaviour. The model_flag is applied to any objects that have a 
+# tag assigned within model_flag_tags. Further details on model_flags can be found 
+# at: https://github.com/networktocode/diffsync/blob/269df51ce248beaef17d72374e96d19e6df95a13/diffsync/enum.py
+model_flag_tags = ["your_tag"]
+model_flag = 1 # flag enum int() representation
+
+[netbox]
+address = "https://nautobot8"
+token = "6fd167451be23bc5104bc07995fa9f4185c33d48"  # Alternative Env Variable : NETBOX_TOKEN
+verify_ssl = false                                   # Alternative Env Variable : NETBOX_VERIFY_SSL
+
+# Define a list of supported platform, 
+# if defined all devices without platform or with a different platforms will be removed from the inventory
+supported_platforms = [ "cisco_ios", "cisco_nxos" ]
+
+# Settings for applying diffsync flags to diffsync model objects, in order to alter 
+# the underlying sync behaviour. The model_flag is applied to any objects that have a 
+# tag assigned within model_flag_tags. Further details on model_flags can be found 
+# at: https://github.com/networktocode/diffsync/blob/269df51ce248beaef17d72374e96d19e6df95a13/diffsync/enum.py
diff --git a/network_importer/adapters/nautobot_api/adapter.py b/network_importer/adapters/nautobot_api/adapter.py
index 8066d983..a13e08b3 100644
--- a/network_importer/adapters/nautobot_api/adapter.py
+++ b/network_importer/adapters/nautobot_api/adapter.py
@@ -99,11 +99,10 @@ def load(self):
         """Initialize pynautobot and load all data from nautobot in the local cache."""
         inventory_settings = InventorySettings(**config.SETTINGS.inventory.settings)
         self.nautobot = pynautobot.api(url=inventory_settings.address, token=inventory_settings.token)
-
         if not inventory_settings.verify_ssl:
-            self.nautobot.http_session.verify_ssl = False
+            self.nautobot.http_session.verify = False
         else:
-            self.nautobot.http_session.verify_ssl = True
+            self.nautobot.http_session.verify = True
 
         self._check_nautobot_version()
 
@@ -388,6 +387,7 @@ def load_nautobot_cable(self, site, device_names):
                 device_z_name=nb_cable.termination_b.device.name,
                 interface_z_name=nb_cable.termination_b.name,
                 remote_id=nb_cable.id,
+                status="connected",
             )
 
             try:
diff --git a/network_importer/adapters/nautobot_api/models.py b/network_importer/adapters/nautobot_api/models.py
index 18c20979..2e86a6da 100644
--- a/network_importer/adapters/nautobot_api/models.py
+++ b/network_importer/adapters/nautobot_api/models.py
@@ -491,6 +491,9 @@ def translate_attrs_for_nautobot(self, attrs):
         site = self.diffsync.get(self.diffsync.site, identifier=self.site_name)
         nb_params["site"] = site.remote_id
 
+        # Add Status
+        nb_params["status"] = "Active"
+
         if "associated_devices" in attrs:
             nb_params["tags"] = []
             for device_name in attrs["associated_devices"]:
@@ -681,6 +684,7 @@ def create(cls, diffsync: "DiffSync", ids: dict, attrs: dict) -> Optional["DiffS
                 termination_b_type="dcim.interface",
                 termination_a_id=interface_a.remote_id,
                 termination_b_id=interface_z.remote_id,
+                status="connected",
             )
         except pynautobot.core.query.RequestError as exc:
             LOGGER.warning("Unable to create Cable %s in %s (%s)", ids, diffsync.name, exc.error)
diff --git a/network_importer/adapters/network_importer/adapter.py b/network_importer/adapters/network_importer/adapter.py
index e3b4d77d..570f1b17 100644
--- a/network_importer/adapters/network_importer/adapter.py
+++ b/network_importer/adapters/network_importer/adapter.py
@@ -48,7 +48,7 @@ def load(self):
         # Create all devices and site object from Nornir Inventory
         for hostname, host in self.nornir.inventory.hosts.items():
 
-            if len(self.bfi.q.nodeProperties(nodes=hostname).answer()) == 0:
+            if len(self.bfi.q.nodeProperties(nodes=f'"{hostname}"').answer()) == 0:
                 self.nornir.inventory.hosts[hostname].has_config = False
                 LOGGER.warning("Unable to find information for %s in Batfish, SKIPPING", hostname)
                 continue
@@ -118,7 +118,7 @@ def load_batfish_device(self, device):
 
         interface_vlans_mapping = defaultdict(list)
         if config.SETTINGS.main.import_vlans:
-            bf_vlans = self.bfi.q.switchedVlanProperties(nodes=device.name).answer()
+            bf_vlans = self.bfi.q.switchedVlanProperties(nodes=f'"{device.name}"').answer()
             for bf_vlan in bf_vlans.frame().itertuples():
 
                 if config.SETTINGS.main.import_vlans in ["config", True]:
@@ -138,7 +138,7 @@ def load_batfish_device(self, device):
                         self.vlan.create_unique_id(vid=bf_vlan.VLAN_ID, site_name=site.name)
                     )
 
-        intfs = self.bfi.q.interfaceProperties(nodes=device.name).answer().frame()
+        intfs = self.bfi.q.interfaceProperties(nodes=f'"{device.name}"').answer().frame()
         for _, intf in intfs.iterrows():
             self.load_batfish_interface(
                 site=site,
diff --git a/network_importer/cli.py b/network_importer/cli.py
index b4eedd89..58472f14 100644
--- a/network_importer/cli.py
+++ b/network_importer/cli.py
@@ -187,6 +187,7 @@ def inventory(config_file, limit, debug, update_configs):
 
     table.add_column("Device", style="cyan", no_wrap=True)
     table.add_column("Platform", style="magenta")
+    table.add_column("Driver")
     table.add_column("Reachable")
     table.add_column("Reason")
 
@@ -198,7 +199,8 @@ def inventory(config_file, limit, debug, update_configs):
             is_reachable = "[red]False"
             reason = f"[red]{host.not_reachable_reason}"
 
-        table.add_row(hostname, host.data["vendor"], is_reachable, reason)
+        driver = config.SETTINGS.drivers.mapping.get(host.platform, config.SETTINGS.drivers.mapping.get("default"))
+        table.add_row(hostname, host.platform, driver, is_reachable, reason)
 
     console = Console()
     console.print(table)
diff --git a/network_importer/version.py b/network_importer/version.py
index 621642bd..b4ff3598 100644
--- a/network_importer/version.py
+++ b/network_importer/version.py
@@ -1,3 +1,3 @@
-"""Version nummber for network_importer."""
-__version_info__ = (2, 0, "0-beta3")
+"""Version number for network_importer."""
+__version_info__ = (2, 0, "0")
 __version__ = ".".join([str(v) for v in __version_info__])
diff --git a/poetry.lock b/poetry.lock
index b147bbe3..e17d272d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -248,22 +248,22 @@ yaml = ["pyyaml"]
 
 [[package]]
 name = "cryptography"
-version = "3.4.7"
+version = "3.3.1"
 description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
 
 [package.dependencies]
 cffi = ">=1.12"
+six = ">=1.4.1"
 
 [package.extras]
 docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
 docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
 pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools-rust (>=0.11.4)"]
 ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["pytest (>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
 
 [[package]]
 name = "dataclasses"
@@ -363,7 +363,7 @@ pyrepl = ">=0.8.2"
 
 [[package]]
 name = "flake8"
-version = "3.9.1"
+version = "3.9.2"
 description = "the modular source code checker: pep8 pyflakes and co"
 category = "dev"
 optional = false
@@ -385,7 +385,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
 
 [[package]]
 name = "genie"
-version = "20.12.2"
+version = "21.4"
 description = "Genie: THE standard pyATS Library System"
 category = "main"
 optional = false
@@ -393,13 +393,13 @@ python-versions = ">=3.5"
 
 [package.dependencies]
 dill = "*"
-"genie.libs.clean" = ">=20.12.0,<20.13.0"
-"genie.libs.conf" = ">=20.12.0,<20.13.0"
-"genie.libs.filetransferutils" = ">=20.12.0,<20.13.0"
-"genie.libs.health" = ">=20.12.0,<20.13.0"
-"genie.libs.ops" = ">=20.12.0,<20.13.0"
-"genie.libs.parser" = ">=20.12.0,<20.13.0"
-"genie.libs.sdk" = ">=20.12.0,<20.13.0"
+"genie.libs.clean" = ">=21.4.0,<21.5.0"
+"genie.libs.conf" = ">=21.4.0,<21.5.0"
+"genie.libs.filetransferutils" = ">=21.4.0,<21.5.0"
+"genie.libs.health" = ">=21.4.0,<21.5.0"
+"genie.libs.ops" = ">=21.4.0,<21.5.0"
+"genie.libs.parser" = ">=21.4.0,<21.5.0"
+"genie.libs.sdk" = ">=21.4.0,<21.5.0"
 jsonpickle = "*"
 netaddr = "*"
 PrettyTable = "*"
@@ -407,12 +407,12 @@ tqdm = "*"
 
 [package.extras]
 dev = ["coverage", "restview", "sphinx", "sphinx-rtd-theme"]
-full = ["genie.libs.conf", "genie.libs.clean", "genie.libs.health", "genie.libs.filetransferutils", "genie.libs.ops", "genie.libs.parser", "genie.libs.sdk", "pyats.robot (>=20.12.0,<20.13.0)", "genie.libs.robot (>=20.12.0,<20.13.0)", "genie.telemetry (>=20.12.0,<20.13.0)", "genie.trafficgen (>=20.12.0,<20.13.0)"]
-robot = ["pyats.robot (>=20.12.0,<20.13.0)", "genie.libs.robot (>=20.12.0,<20.13.0)"]
+full = ["genie.libs.conf", "genie.libs.clean", "genie.libs.health", "genie.libs.filetransferutils", "genie.libs.ops", "genie.libs.parser", "genie.libs.sdk", "pyats.robot (>=21.4.0,<21.5.0)", "genie.libs.robot (>=21.4.0,<21.5.0)", "genie.telemetry (>=21.4.0,<21.5.0)", "genie.trafficgen (>=21.4.0,<21.5.0)"]
+robot = ["pyats.robot (>=21.4.0,<21.5.0)", "genie.libs.robot (>=21.4.0,<21.5.0)"]
 
 [[package]]
 name = "genie.libs.clean"
-version = "20.12.2"
+version = "21.4"
 description = "Genie Library for device clean support"
 category = "main"
 optional = false
@@ -420,14 +420,13 @@ python-versions = "*"
 
 [package.dependencies]
 genie = "*"
-pysnmp = "*"
 
 [package.extras]
 dev = ["coverage", "paramiko", "restview", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-mockautodoc"]
 
 [[package]]
 name = "genie.libs.conf"
-version = "20.12"
+version = "21.4"
 description = "Genie libs Conf: Libraries to configures topology through Python object attributes"
 category = "main"
 optional = false
@@ -438,7 +437,7 @@ dev = ["coverage", "restview", "sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "genie.libs.filetransferutils"
-version = "20.12.1"
+version = "21.4"
 description = "Genie libs FileTransferUtils: Genie FileTransferUtils Libraries"
 category = "main"
 optional = false
@@ -454,7 +453,7 @@ dev = ["coverage", "restview", "sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "genie.libs.health"
-version = "20.12"
+version = "21.4.2"
 description = "pyATS Health Check for monitoring device health status"
 category = "main"
 optional = false
@@ -468,7 +467,7 @@ dev = ["coverage", "paramiko", "restview", "sphinx", "sphinx-rtd-theme", "sphinx
 
 [[package]]
 name = "genie.libs.ops"
-version = "20.12"
+version = "21.4"
 description = "Genie libs Ops: Libraries to retrieve operational state of the topology"
 category = "main"
 optional = false
@@ -479,7 +478,7 @@ dev = ["coverage", "restview", "sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "genie.libs.parser"
-version = "20.12"
+version = "21.4"
 description = "Genie libs Parser: Genie Parser Libraries"
 category = "main"
 optional = false
@@ -493,7 +492,7 @@ dev = ["coverage", "restview", "sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "genie.libs.sdk"
-version = "20.12"
+version = "21.4.1"
 description = "Genie libs sdk: Libraries containing all Triggers and Verifications"
 category = "main"
 optional = false
@@ -609,7 +608,7 @@ colors = ["colorama (>=0.4.3,<0.5.0)"]
 
 [[package]]
 name = "jinja2"
-version = "2.11.2"
+version = "2.11.3"
 description = "A very fast and expressive template engine."
 category = "main"
 optional = false
@@ -734,7 +733,7 @@ python-versions = "*"
 
 [[package]]
 name = "napalm"
-version = "3.2.0"
+version = "3.3.0"
 description = "Network Automation and Programmability Abstraction Layer with Multivendor support"
 category = "main"
 optional = false
@@ -747,6 +746,7 @@ future = "*"
 jinja2 = "*"
 junos-eznc = ">=2.2.1"
 lxml = ">=4.3.0"
+ncclient = "*"
 netaddr = "*"
 netmiko = ">=3.1.0"
 paramiko = ">=2.6.0"
@@ -913,15 +913,15 @@ pyparsing = ">=2.0.2"
 
 [[package]]
 name = "pandas"
-version = "0.25.3"
+version = "1.1.5"
 description = "Powerful data structures for data analysis, time series, and statistics"
 category = "main"
 optional = false
-python-versions = ">=3.5.3"
+python-versions = ">=3.6.1"
 
 [package.dependencies]
-numpy = ">=1.13.3"
-python-dateutil = ">=2.6.1"
+numpy = ">=1.15.4"
+python-dateutil = ">=2.7.3"
 pytz = ">=2017.2"
 
 [package.extras]
@@ -1007,14 +1007,6 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
 [package.extras]
 dev = ["pre-commit", "tox"]
 
-[[package]]
-name = "ply"
-version = "3.11"
-description = "Python Lex & Yacc"
-category = "main"
-optional = false
-python-versions = "*"
-
 [[package]]
 name = "prettytable"
 version = "2.1.0"
@@ -1049,76 +1041,68 @@ category = "dev"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
-[[package]]
-name = "pyasn1"
-version = "0.4.8"
-description = "ASN.1 types and codecs"
-category = "main"
-optional = false
-python-versions = "*"
-
 [[package]]
 name = "pyats"
-version = "20.12"
+version = "21.4"
 description = "pyATS - Python Automation Test System"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-"pyats.aereport" = ">=20.12.0,<20.13.0"
-"pyats.aetest" = ">=20.12.0,<20.13.0"
-"pyats.async" = ">=20.12.0,<20.13.0"
-"pyats.connections" = ">=20.12.0,<20.13.0"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.easypy" = ">=20.12.0,<20.13.0"
-"pyats.kleenex" = ">=20.12.0,<20.13.0"
-"pyats.log" = ">=20.12.0,<20.13.0"
-"pyats.reporter" = ">=20.12.0,<20.13.0"
-"pyats.results" = ">=20.12.0,<20.13.0"
-"pyats.tcl" = ">=20.12.0,<20.13.0"
-"pyats.topology" = ">=20.12.0,<20.13.0"
-"pyats.utils" = ">=20.12.0,<20.13.0"
-
-[package.extras]
-full = ["cookiecutter", "genie (>=20.12.0,<20.13.0)", "pyats.robot (>=20.12.0,<20.13.0)", "genie.libs.robot (>=20.12.0,<20.13.0)", "genie.telemetry (>=20.12.0,<20.13.0)", "genie.trafficgen (>=20.12.0,<20.13.0)", "pyats.contrib (>=20.12.0,<20.13.0)"]
-library = ["genie (>=20.12.0,<20.13.0)"]
-robot = ["pyats.robot (>=20.12.0,<20.13.0)", "genie.libs.robot (>=20.12.0,<20.13.0)"]
+"pyats.aereport" = ">=21.4.0,<21.5.0"
+"pyats.aetest" = ">=21.4.0,<21.5.0"
+"pyats.async" = ">=21.4.0,<21.5.0"
+"pyats.connections" = ">=21.4.0,<21.5.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.easypy" = ">=21.4.0,<21.5.0"
+"pyats.kleenex" = ">=21.4.0,<21.5.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
+"pyats.reporter" = ">=21.4.0,<21.5.0"
+"pyats.results" = ">=21.4.0,<21.5.0"
+"pyats.tcl" = ">=21.4.0,<21.5.0"
+"pyats.topology" = ">=21.4.0,<21.5.0"
+"pyats.utils" = ">=21.4.0,<21.5.0"
+
+[package.extras]
+full = ["cookiecutter", "genie (>=21.4.0,<21.5.0)", "pyats.robot (>=21.4.0,<21.5.0)", "genie.libs.robot (>=21.4.0,<21.5.0)", "genie.telemetry (>=21.4.0,<21.5.0)", "genie.trafficgen (>=21.4.0,<21.5.0)", "pyats.contrib (>=21.4.0,<21.5.0)"]
+library = ["genie (>=21.4.0,<21.5.0)"]
+robot = ["pyats.robot (>=21.4.0,<21.5.0)", "genie.libs.robot (>=21.4.0,<21.5.0)"]
 template = ["cookiecutter"]
 
 [[package]]
 name = "pyats.aereport"
-version = "20.12"
+version = "21.4"
 description = "pyATS AEreport: Result Collection and Reporting"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-jinja2 = "*"
+jinja2 = ">=2.11.2"
 junit-xml = "*"
 psutil = "*"
-"pyats.log" = ">=20.12.0,<20.13.0"
-"pyats.results" = ">=20.12.0,<20.13.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
+"pyats.results" = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.aetest"
-version = "20.12"
+version = "21.4"
 description = "pyATS AEtest: Testscript Engine"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-jinja2 = "2.11.2"
-"pyats.aereport" = ">=20.12.0,<20.13.0"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.log" = ">=20.12.0,<20.13.0"
-"pyats.results" = ">=20.12.0,<20.13.0"
-"pyats.utils" = ">=20.12.0,<20.13.0"
+jinja2 = ">=2.11.2"
+"pyats.aereport" = ">=21.4.0,<21.5.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
+"pyats.results" = ">=21.4.0,<21.5.0"
+"pyats.utils" = ">=21.4.0,<21.5.0"
 pyyaml = "*"
 
 [package.extras]
@@ -1126,37 +1110,37 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.async"
-version = "20.12"
+version = "21.4"
 description = "pyATS Async: Asynchronous Execution of Codes"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-"pyats.log" = ">=20.12.0,<20.13.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.connections"
-version = "20.12"
+version = "21.4"
 description = "pyATS Connection: Device Connection Handling & Base Classes"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-"pyats.async" = ">=20.12.0,<20.13.0"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-unicon = ">=20.12.0,<20.13.0"
+"pyats.async" = ">=21.4.0,<21.5.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+unicon = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.datastructures"
-version = "20.12"
+version = "21.4"
 description = "pyATS Datastructures: Extended Datastructures for Grownups"
 category = "main"
 optional = false
@@ -1167,7 +1151,7 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.easypy"
-version = "20.12"
+version = "21.4"
 description = "pyATS Easypy: launcher and runtime environment"
 category = "main"
 optional = false
@@ -1177,20 +1161,20 @@ python-versions = ">=3.5"
 distro = "*"
 jinja2 = "*"
 psutil = "*"
-"pyats.aereport" = ">=20.12.0,<20.13.0"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.kleenex" = ">=20.12.0,<20.13.0"
-"pyats.log" = ">=20.12.0,<20.13.0"
-"pyats.results" = ">=20.12.0,<20.13.0"
-"pyats.topology" = ">=20.12.0,<20.13.0"
-"pyats.utils" = ">=20.12.0,<20.13.0"
+"pyats.aereport" = ">=21.4.0,<21.5.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.kleenex" = ">=21.4.0,<21.5.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
+"pyats.results" = ">=21.4.0,<21.5.0"
+"pyats.topology" = ">=21.4.0,<21.5.0"
+"pyats.utils" = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.kleenex"
-version = "20.12"
+version = "21.4"
 description = "pyATS Kleenex: Testbed Preparation, Clean & Finalization"
 category = "main"
 optional = false
@@ -1198,12 +1182,12 @@ python-versions = ">=3.5"
 
 [package.dependencies]
 distro = "*"
-"pyats.aetest" = ">=20.12.0,<20.13.0"
-"pyats.async" = ">=20.12.0,<20.13.0"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.log" = ">=20.12.0,<20.13.0"
-"pyats.topology" = ">=20.12.0,<20.13.0"
-"pyats.utils" = ">=20.12.0,<20.13.0"
+"pyats.aetest" = ">=21.4.0,<21.5.0"
+"pyats.async" = ">=21.4.0,<21.5.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
+"pyats.topology" = ">=21.4.0,<21.5.0"
+"pyats.utils" = ">=21.4.0,<21.5.0"
 requests = "*"
 
 [package.extras]
@@ -1211,7 +1195,7 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.log"
-version = "20.12.2"
+version = "21.4"
 description = "pyATS Log: Logging Format and Utilities"
 category = "main"
 optional = false
@@ -1219,12 +1203,12 @@ python-versions = ">=3.5"
 
 [package.dependencies]
 aiofiles = "0.6.0"
-aiohttp = "3.7.2"
+aiohttp = {version = "3.7.2", markers = "python_version >= \"3.6\""}
 aiohttp-swagger = "1.0.15"
 async-lru = "1.0.2"
 chardet = "3.0.4"
-Jinja2 = "2.11.2"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
+Jinja2 = "2.11.3"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
 python-engineio = "3.13.2"
 python-socketio = "4.6.0"
 pyyaml = "*"
@@ -1234,17 +1218,17 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.reporter"
-version = "20.12.1"
+version = "21.4"
 description = "pyATS Reporter: Result Collection and Reporting"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-"pyats.aereport" = ">=20.12.0,<20.13.0"
-"pyats.log" = ">=20.12.0,<20.13.0"
-"pyats.results" = ">=20.12.0,<20.13.0"
-"pyats.utils" = ">=20.12.0,<20.13.0"
+"pyats.aereport" = ">=21.4.0,<21.5.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
+"pyats.results" = ">=21.4.0,<21.5.0"
+"pyats.utils" = ">=21.4.0,<21.5.0"
 pyyaml = "*"
 
 [package.extras]
@@ -1252,7 +1236,7 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.results"
-version = "20.12"
+version = "21.4"
 description = "pyATS Results: Representing Results using Objects"
 category = "main"
 optional = false
@@ -1263,31 +1247,31 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.tcl"
-version = "20.12"
+version = "21.4"
 description = "pyATS Tcl: Tcl Integration and Objects"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.log" = ">=20.12.0,<20.13.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.log" = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.topology"
-version = "20.12"
+version = "21.4"
 description = "pyATS Topology: Topology Objects and Testbed YAMLs"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
-"pyats.connections" = ">=20.12.0,<20.13.0"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.utils" = ">=20.12.0,<20.13.0"
+"pyats.connections" = ">=21.4.0,<21.5.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.utils" = ">=21.4.0,<21.5.0"
 pyyaml = "*"
 yamllint = "*"
 
@@ -1296,23 +1280,24 @@ dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pyats.utils"
-version = "20.12"
+version = "21.4"
 description = "pyATS Utils: Utilities Module"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 
 [package.dependencies]
+cryptography = "<=3.3.1"
 distro = "*"
-"pyats.datastructures" = ">=20.12.0,<20.13.0"
-"pyats.topology" = ">=20.12.0,<20.13.0"
+"pyats.datastructures" = ">=21.4.0,<21.5.0"
+"pyats.topology" = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["sphinx", "sphinx-rtd-theme"]
 
 [[package]]
 name = "pybatfish"
-version = "2020.12.23.763"
+version = "2021.2.26.830"
 description = "Python API and utilities for Batfish"
 category = "main"
 optional = false
@@ -1332,7 +1317,7 @@ simplejson = "*"
 
 [package.extras]
 capirca = ["capirca", "absl-py (>=0.8.0)"]
-dev = ["cerberus (==1.3.2)", "check-manifest", "coverage", "inflection", "jupyter", "mypy", "nbformat (<6.0.0)", "nbconvert", "pytest (>=4.2.0)", "pytest-cov", "pytz", "regex (<=2019.6.8)", "requests-mock", "responses", "sphinx (>=1.8.0)", "sphinx-rtd-theme", "capirca", "absl-py (>=0.8.0)", "black (==19.10b0)"]
+dev = ["cerberus (==1.3.2)", "check-manifest", "coverage", "inflection", "jupyter", "mypy (<0.800)", "nbformat (<6.0.0)", "nbconvert", "pytest (>=4.2.0)", "pytest-cov", "pytz", "regex (<=2019.6.8)", "requests-mock", "responses", "sphinx (>=1.8.0)", "sphinx-rtd-theme", "capirca", "absl-py (>=0.8.0)", "black (==19.10b0)"]
 
 [[package]]
 name = "pycodestyle"
@@ -1350,29 +1335,21 @@ category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
-[[package]]
-name = "pycryptodomex"
-version = "3.10.1"
-description = "Cryptographic library for Python"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-
 [[package]]
 name = "pydantic"
-version = "1.7.3"
+version = "1.8.2"
 description = "Data validation and settings management using python 3.6 type hinting"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.1"
 
 [package.dependencies]
 dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""}
+typing-extensions = ">=3.7.4.3"
 
 [package.extras]
 dotenv = ["python-dotenv (>=0.10.4)"]
 email = ["email-validator (>=1.0.3)"]
-typing_extensions = ["typing-extensions (>=3.7.2)"]
 
 [[package]]
 name = "pydocstyle"
@@ -1527,30 +1504,6 @@ python-versions = "*"
 [package.extras]
 cp2110 = ["hidapi"]
 
-[[package]]
-name = "pysmi"
-version = "0.3.4"
-description = "SNMP SMI/MIB Parser"
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-ply = "*"
-
-[[package]]
-name = "pysnmp"
-version = "4.4.12"
-description = "SNMP library for Python"
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-pyasn1 = ">=0.2.3"
-pycryptodomex = "*"
-pysmi = "*"
-
 [[package]]
 name = "pytest"
 version = "5.4.3"
@@ -1893,7 +1846,7 @@ python-versions = "*"
 
 [[package]]
 name = "unicon"
-version = "20.12"
+version = "21.4"
 description = "Unicon Connection Library"
 category = "main"
 optional = false
@@ -1902,7 +1855,7 @@ python-versions = ">=3.5"
 [package.dependencies]
 dill = "*"
 pyyaml = "*"
-"unicon.plugins" = ">=20.12.0,<20.13.0"
+"unicon.plugins" = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["cisco-distutils", "coverage", "restview", "sphinx", "sphinxcontrib-napoleon", "sphinxcontrib-mockautodoc", "sphinx-rtd-theme"]
@@ -1911,7 +1864,7 @@ robot = ["robotframework"]
 
 [[package]]
 name = "unicon.plugins"
-version = "20.12"
+version = "21.4"
 description = "Unicon Connection Library Plugins"
 category = "main"
 optional = false
@@ -1919,7 +1872,7 @@ python-versions = "*"
 
 [package.dependencies]
 pyyaml = "*"
-unicon = ">=20.12.0,<20.13.0"
+unicon = ">=21.4.0,<21.5.0"
 
 [package.extras]
 dev = ["setuptools", "pip", "wheel", "coverage", "restview", "sphinx", "sphinxcontrib-napoleon", "sphinxcontrib-mockautodoc", "sphinx-rtd-theme"]
@@ -2019,8 +1972,8 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt
 
 [metadata]
 lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "40eb9bd3a0add904a9dcd02724724314f8426253cd1f98c339a967b1b6e57ae3"
+python-versions = "^3.6.1"
+content-hash = "0ba99b47d2ac0769f3d2e6e7549019b23f4d6c4da05e359beccc47ffe4ebb6a4"
 
 [metadata.files]
 aiofiles = [
@@ -2176,18 +2129,20 @@ configargparse = [
     {file = "ConfigArgParse-0.15.2.tar.gz", hash = "sha256:558738aff623d6667aa5b85df6093ad3828867de8a82b66a6d458fb42567beb3"},
 ]
 cryptography = [
-    {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
-    {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
-    {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
-    {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
-    {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
-    {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
-    {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
-    {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
-    {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
-    {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
-    {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
-    {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
+    {file = "cryptography-3.3.1-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:c366df0401d1ec4e548bebe8f91d55ebcc0ec3137900d214dd7aac8427ef3030"},
+    {file = "cryptography-3.3.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9f6b0492d111b43de5f70052e24c1f0951cb9e6022188ebcb1cc3a3d301469b0"},
+    {file = "cryptography-3.3.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a69bd3c68b98298f490e84519b954335154917eaab52cf582fa2c5c7efc6e812"},
+    {file = "cryptography-3.3.1-cp27-cp27m-win32.whl", hash = "sha256:84ef7a0c10c24a7773163f917f1cb6b4444597efd505a8aed0a22e8c4780f27e"},
+    {file = "cryptography-3.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:594a1db4511bc4d960571536abe21b4e5c3003e8750ab8365fafce71c5d86901"},
+    {file = "cryptography-3.3.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0003a52a123602e1acee177dc90dd201f9bb1e73f24a070db7d36c588e8f5c7d"},
+    {file = "cryptography-3.3.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:83d9d2dfec70364a74f4e7c70ad04d3ca2e6a08b703606993407bf46b97868c5"},
+    {file = "cryptography-3.3.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:dc42f645f8f3a489c3dd416730a514e7a91a59510ddaadc09d04224c098d3302"},
+    {file = "cryptography-3.3.1-cp36-abi3-manylinux1_x86_64.whl", hash = "sha256:788a3c9942df5e4371c199d10383f44a105d67d401fb4304178020142f020244"},
+    {file = "cryptography-3.3.1-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:69e836c9e5ff4373ce6d3ab311c1a2eed274793083858d3cd4c7d12ce20d5f9c"},
+    {file = "cryptography-3.3.1-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:9e21301f7a1e7c03dbea73e8602905a4ebba641547a462b26dd03451e5769e7c"},
+    {file = "cryptography-3.3.1-cp36-abi3-win32.whl", hash = "sha256:b4890d5fb9b7a23e3bf8abf5a8a7da8e228f1e97dc96b30b95685df840b6914a"},
+    {file = "cryptography-3.3.1-cp36-abi3-win_amd64.whl", hash = "sha256:0e85aaae861d0485eb5a79d33226dd6248d2a9f133b81532c8f5aae37de10ff7"},
+    {file = "cryptography-3.3.1.tar.gz", hash = "sha256:7e177e4bea2de937a584b13645cab32f25e3d96fc0bc4a4cf99c27dc77682be6"},
 ]
 dataclasses = [
     {file = "dataclasses-0.7-py3-none-any.whl", hash = "sha256:3459118f7ede7c8bea0fe795bff7c6c2ce287d01dd226202f7c9ebc0610a7836"},
@@ -2222,46 +2177,46 @@ fancycompleter = [
     {file = "fancycompleter-0.9.1.tar.gz", hash = "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272"},
 ]
 flake8 = [
-    {file = "flake8-3.9.1-py2.py3-none-any.whl", hash = "sha256:3b9f848952dddccf635be78098ca75010f073bfe14d2c6bda867154bea728d2a"},
-    {file = "flake8-3.9.1.tar.gz", hash = "sha256:1aa8990be1e689d96c745c5682b687ea49f2e05a443aff1f8251092b0014e378"},
+    {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
+    {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
 ]
 future = [
     {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
 ]
 genie = [
-    {file = "genie-20.12.2-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:362c2a8ffb638e9ab9a275e5b436054dc5a46d0954649fe5f03db9e995876421"},
-    {file = "genie-20.12.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:19760dece7db725203825962065432ef814cb044f85d5975c9b0e75e4f488dfb"},
-    {file = "genie-20.12.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:170e7d375cb3665c4c4c2a2dab0d421bfe57e6a5997f7ddd7bcd4ec9028e04c6"},
-    {file = "genie-20.12.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:75b59383116270a776524a2285129906a5cdeac4b400a25a2c5078656fa9a082"},
-    {file = "genie-20.12.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:36342c050f9e6cf67788816d224641250660c4096fe2a4bc7207f420de758ef3"},
-    {file = "genie-20.12.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c88082039602c689ad8604dbb85262acdee9d1fd9a131e185456ad13860dd99d"},
-    {file = "genie-20.12.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:c030456f3f3053fc73a398aeff23383a57ace086a73603393be0e6ba38af391f"},
-    {file = "genie-20.12.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:039937d79ec9779196d7420202e2d51b059cce60d1d896ed2f8d7e157550bedb"},
-    {file = "genie-20.12.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2ce5f66aa2739756ad8277a9ecc7872a2717d1fd7cee8401018a26f037cb2636"},
-    {file = "genie-20.12.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:c7167b0bb192587064365b0ebf31d163eaa45b51204a9d4b3c87bb3cf809f543"},
-    {file = "genie-20.12.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b9b91821013501056b66d9437e55d9e7c3c258c9f7670ca3f46255722b035e99"},
-    {file = "genie-20.12.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:440d38c6bb278c8d3b8caf9256ec4c2906b003f579b715f333066808d3bdd188"},
+    {file = "genie-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:838033f44030cd9f239af371ea9ebd66b225c861faee57c4bde5b28fe287d97c"},
+    {file = "genie-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:c647bf158c09c8cafd4c4a26cb5ef174b53b75d5f3226e48f1cb82f0f18a830d"},
+    {file = "genie-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3cfa3ad90bf1155d695ff7fc6c8781d65b8c8af771a0f934ad7fd0c82c042342"},
+    {file = "genie-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:b33c9cd4bcdb709c27d23703ea5dfcf8dab477a0e336c700334d71fbd0e323a9"},
+    {file = "genie-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:ebee9a7d8ce80915fc8a6fe561f767559825846e39a9b2b09c51b5f45aa1b9a9"},
+    {file = "genie-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:25c4e664acc12aeecd9be0256908617fc2642dffbbd8810723fda8d54653e65f"},
+    {file = "genie-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8e0b383d987656b71301b331fa5fd588b4f6d0cf9182cb7b639efafd4ebbfb86"},
+    {file = "genie-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:87aa76c43dd91ee0a1eaee118cc4612f74d26836d6a04c24865137314e873799"},
+    {file = "genie-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3893bb49771cad285d7396b27967c183981db2e492ed1866805166e79a5e15ac"},
+    {file = "genie-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:ef9bf5a8709d325b2db9684c78945e16e6badebea121475dbbfbfb52c20a98ab"},
+    {file = "genie-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:d423c40dd87d68658c4a5a76197b5d0b74e92b57811e21a4d20a56f18aaf2c1e"},
+    {file = "genie-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8ae95d0cd86be79b1a6dca3b66d86b0bfca556132a68ca3a0d662bbe1e515337"},
 ]
 "genie.libs.clean" = [
-    {file = "genie.libs.clean-20.12.2-py3-none-any.whl", hash = "sha256:2da611170d825045df0877700fce3c2e19182e4409133b2f18d1ab6aea240f52"},
+    {file = "genie.libs.clean-21.4-py3-none-any.whl", hash = "sha256:5d66f669dd5c042a12be525f42cd98eb75d914ccd6b302db8437d788ea3ad144"},
 ]
 "genie.libs.conf" = [
-    {file = "genie.libs.conf-20.12-py3-none-any.whl", hash = "sha256:7dc02609fcc450401bc366519ed446018f3f5f992e79f2c05a12d1ed27251986"},
+    {file = "genie.libs.conf-21.4-py3-none-any.whl", hash = "sha256:492393278c112d4b39d8204c49bb071507971dd839ea2bc87b3a24759a312571"},
 ]
 "genie.libs.filetransferutils" = [
-    {file = "genie.libs.filetransferutils-20.12.1-py3-none-any.whl", hash = "sha256:5fee12be9ebc0a2982eaa1e86f68d70c2edae9096ac5b36c83048d653b776aba"},
+    {file = "genie.libs.filetransferutils-21.4-py3-none-any.whl", hash = "sha256:523e8ad3d1c4b473d376eef5e0bbd3317d46a35fda2ea8af42a9891d014ef7cb"},
 ]
 "genie.libs.health" = [
-    {file = "genie.libs.health-20.12-py3-none-any.whl", hash = "sha256:ceb82f4ce6a50d9d5d2c6a9f3b9f3034765bfaeb927d3130bf21798922afb295"},
+    {file = "genie.libs.health-21.4.2-py3-none-any.whl", hash = "sha256:937e87007f6d6b7abb78fba352ea371eb416313d8668008a169d9c7762e96711"},
 ]
 "genie.libs.ops" = [
-    {file = "genie.libs.ops-20.12-py3-none-any.whl", hash = "sha256:110fafcd25d544ba76f13fed5db9151ba2af42dc3a1060f6516cc33a9d375256"},
+    {file = "genie.libs.ops-21.4-py3-none-any.whl", hash = "sha256:73d1decaa64355cea6a76117eb04764d8c021dd9da7c27af9918c09987520f90"},
 ]
 "genie.libs.parser" = [
-    {file = "genie.libs.parser-20.12-py3-none-any.whl", hash = "sha256:bf0b2053c609d1587fd567de82961af5fafe5fe27fdb2937e8d0869e6ac46f74"},
+    {file = "genie.libs.parser-21.4-py3-none-any.whl", hash = "sha256:b613f6142403dc6f281695c29a7db13383d503a81ed8885e27b3b859c7199239"},
 ]
 "genie.libs.sdk" = [
-    {file = "genie.libs.sdk-20.12-py3-none-any.whl", hash = "sha256:39f53bbbae4aabb68a9d493fda9bea025603c108ffc5a5c8265c67a00aaa4c72"},
+    {file = "genie.libs.sdk-21.4.1-py3-none-any.whl", hash = "sha256:192815052165c57fdcfd9e1c9a7406b572cfd26df352e177a5de7d227bf8428c"},
 ]
 gitdb = [
     {file = "gitdb-4.0.7-py3-none-any.whl", hash = "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0"},
@@ -2300,8 +2255,8 @@ isort = [
     {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"},
 ]
 jinja2 = [
-    {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"},
-    {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"},
+    {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
+    {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
 ]
 jsonpickle = [
     {file = "jsonpickle-2.0.0-py2.py3-none-any.whl", hash = "sha256:c1010994c1fbda87a48f8a56698605b598cb0fc6bb7e7927559fc1100e69aeac"},
@@ -2463,8 +2418,8 @@ mypy-extensions = [
     {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
 ]
 napalm = [
-    {file = "napalm-3.2.0-py2.py3-none-any.whl", hash = "sha256:6ab07a8a360150198b3c33c2fa4e92a9658cda9821736d24f2399343425d2af3"},
-    {file = "napalm-3.2.0.tar.gz", hash = "sha256:6e69a505f5d4a678c42f048d13153afabf10b7fec72868e3bfb53ff4089206fc"},
+    {file = "napalm-3.3.0-py2.py3-none-any.whl", hash = "sha256:7708036fd17a38711643b8911c942b4bb3b59556e2806d31c4392605e2b7aa35"},
+    {file = "napalm-3.3.0.tar.gz", hash = "sha256:0ac7901105fed5f67b1b6e498b0b2b008f77b72c9c1ef323059a97125753138b"},
 ]
 ncclient = [
     {file = "ncclient-0.6.9.tar.gz", hash = "sha256:0112f2ad41fb658f52446d870853a63691d69299c73c7351c520d38dbd8dc0c4"},
@@ -2545,25 +2500,30 @@ packaging = [
     {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"},
 ]
 pandas = [
-    {file = "pandas-0.25.3-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:df8864824b1fe488cf778c3650ee59c3a0d8f42e53707de167ba6b4f7d35f133"},
-    {file = "pandas-0.25.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7458c48e3d15b8aaa7d575be60e1e4dd70348efcd9376656b72fecd55c59a4c3"},
-    {file = "pandas-0.25.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:61741f5aeb252f39c3031d11405305b6d10ce663c53bc3112705d7ad66c013d0"},
-    {file = "pandas-0.25.3-cp35-cp35m-win32.whl", hash = "sha256:adc3d3a3f9e59a38d923e90e20c4922fc62d1e5a03d083440468c6d8f3f1ae0a"},
-    {file = "pandas-0.25.3-cp35-cp35m-win_amd64.whl", hash = "sha256:975c461accd14e89d71772e89108a050fa824c0b87a67d34cedf245f6681fc17"},
-    {file = "pandas-0.25.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ee50c2142cdcf41995655d499a157d0a812fce55c97d9aad13bc1eef837ed36c"},
-    {file = "pandas-0.25.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4545467a637e0e1393f7d05d61dace89689ad6d6f66f267f86fff737b702cce9"},
-    {file = "pandas-0.25.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bbe3eb765a0b1e578833d243e2814b60c825b7fdbf4cdfe8e8aae8a08ed56ecf"},
-    {file = "pandas-0.25.3-cp36-cp36m-win32.whl", hash = "sha256:8153705d6545fd9eb6dd2bc79301bff08825d2e2f716d5dced48daafc2d0b81f"},
-    {file = "pandas-0.25.3-cp36-cp36m-win_amd64.whl", hash = "sha256:26382aab9c119735908d94d2c5c08020a4a0a82969b7e5eefb92f902b3b30ad7"},
-    {file = "pandas-0.25.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:00dff3a8e337f5ed7ad295d98a31821d3d0fe7792da82d78d7fd79b89c03ea9d"},
-    {file = "pandas-0.25.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e45055c30a608076e31a9fcd780a956ed3b1fa20db61561b8d88b79259f526f7"},
-    {file = "pandas-0.25.3-cp37-cp37m-win32.whl", hash = "sha256:255920e63850dc512ce356233081098554d641ba99c3767dde9e9f35630f994b"},
-    {file = "pandas-0.25.3-cp37-cp37m-win_amd64.whl", hash = "sha256:22361b1597c8c2ffd697aa9bf85423afa9e1fcfa6b1ea821054a244d5f24d75e"},
-    {file = "pandas-0.25.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9962957a27bfb70ab64103d0a7b42fa59c642fb4ed4cb75d0227b7bb9228535d"},
-    {file = "pandas-0.25.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:78bf638993219311377ce9836b3dc05f627a666d0dbc8cec37c0ff3c9ada673b"},
-    {file = "pandas-0.25.3-cp38-cp38-win32.whl", hash = "sha256:6a3ac2c87e4e32a969921d1428525f09462770c349147aa8e9ab95f88c71ec71"},
-    {file = "pandas-0.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:33970f4cacdd9a0ddb8f21e151bfb9f178afb7c36eb7c25b9094c02876f385c2"},
-    {file = "pandas-0.25.3.tar.gz", hash = "sha256:52da74df8a9c9a103af0a72c9d5fdc8e0183a90884278db7f386b5692a2220a4"},
+    {file = "pandas-1.1.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bf23a3b54d128b50f4f9d4675b3c1857a688cc6731a32f931837d72effb2698d"},
+    {file = "pandas-1.1.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5a780260afc88268a9d3ac3511d8f494fdcf637eece62fb9eb656a63d53eb7ca"},
+    {file = "pandas-1.1.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b61080750d19a0122469ab59b087380721d6b72a4e7d962e4d7e63e0c4504814"},
+    {file = "pandas-1.1.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:0de3ddb414d30798cbf56e642d82cac30a80223ad6fe484d66c0ce01a84d6f2f"},
+    {file = "pandas-1.1.5-cp36-cp36m-win32.whl", hash = "sha256:70865f96bb38fec46f7ebd66d4b5cfd0aa6b842073f298d621385ae3898d28b5"},
+    {file = "pandas-1.1.5-cp36-cp36m-win_amd64.whl", hash = "sha256:19a2148a1d02791352e9fa637899a78e371a3516ac6da5c4edc718f60cbae648"},
+    {file = "pandas-1.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26fa92d3ac743a149a31b21d6f4337b0594b6302ea5575b37af9ca9611e8981a"},
+    {file = "pandas-1.1.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c16d59c15d946111d2716856dd5479221c9e4f2f5c7bc2d617f39d870031e086"},
+    {file = "pandas-1.1.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3be7a7a0ca71a2640e81d9276f526bca63505850add10206d0da2e8a0a325dae"},
+    {file = "pandas-1.1.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:573fba5b05bf2c69271a32e52399c8de599e4a15ab7cec47d3b9c904125ab788"},
+    {file = "pandas-1.1.5-cp37-cp37m-win32.whl", hash = "sha256:21b5a2b033380adbdd36b3116faaf9a4663e375325831dac1b519a44f9e439bb"},
+    {file = "pandas-1.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:24c7f8d4aee71bfa6401faeba367dd654f696a77151a8a28bc2013f7ced4af98"},
+    {file = "pandas-1.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2860a97cbb25444ffc0088b457da0a79dc79f9c601238a3e0644312fcc14bf11"},
+    {file = "pandas-1.1.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:5008374ebb990dad9ed48b0f5d0038124c73748f5384cc8c46904dace27082d9"},
+    {file = "pandas-1.1.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2c2f7c670ea4e60318e4b7e474d56447cf0c7d83b3c2a5405a0dbb2600b9c48e"},
+    {file = "pandas-1.1.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0a643bae4283a37732ddfcecab3f62dd082996021b980f580903f4e8e01b3c5b"},
+    {file = "pandas-1.1.5-cp38-cp38-win32.whl", hash = "sha256:5447ea7af4005b0daf695a316a423b96374c9c73ffbd4533209c5ddc369e644b"},
+    {file = "pandas-1.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:4c62e94d5d49db116bef1bd5c2486723a292d79409fc9abd51adf9e05329101d"},
+    {file = "pandas-1.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:731568be71fba1e13cae212c362f3d2ca8932e83cb1b85e3f1b4dd77d019254a"},
+    {file = "pandas-1.1.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c61c043aafb69329d0f961b19faa30b1dab709dd34c9388143fc55680059e55a"},
+    {file = "pandas-1.1.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2b1c6cd28a0dfda75c7b5957363333f01d370936e4c6276b7b8e696dd500582a"},
+    {file = "pandas-1.1.5-cp39-cp39-win32.whl", hash = "sha256:c94ff2780a1fd89f190390130d6d36173ca59fcfb3fe0ff596f9a56518191ccb"},
+    {file = "pandas-1.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:edda9bacc3843dfbeebaf7a701763e68e741b08fccb889c003b0a52f0ee95782"},
+    {file = "pandas-1.1.5.tar.gz", hash = "sha256:f10fc41ee3c75a474d3bdf68d396f10782d013d7f67db99c0efbfd0acb99701b"},
 ]
 paramiko = [
     {file = "paramiko-2.7.2-py2.py3-none-any.whl", hash = "sha256:4f3e316fef2ac628b05097a637af35685183111d4bc1b5979bd397c2ab7b5898"},
@@ -2588,10 +2548,6 @@ pluggy = [
     {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
     {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
 ]
-ply = [
-    {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"},
-    {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"},
-]
 prettytable = [
     {file = "prettytable-2.1.0-py3-none-any.whl", hash = "sha256:bb5abc72bdfae6f3cdadb04fb7726f6915af0ddb7c897a41d4ad7736d9bfd8fd"},
     {file = "prettytable-2.1.0.tar.gz", hash = "sha256:5882ed9092b391bb8f6e91f59bcdbd748924ff556bb7c634089d5519be87baa0"},
@@ -2630,219 +2586,204 @@ py = [
     {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
     {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
 ]
-pyasn1 = [
-    {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
-    {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"},
-    {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"},
-    {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"},
-    {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"},
-    {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"},
-    {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"},
-    {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"},
-    {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"},
-    {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"},
-    {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"},
-    {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"},
-    {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
-]
 pyats = [
-    {file = "pyats-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:ac9e7f4c41df99c55f43eda57132524b7e4b3eaa229d61567b0fb3d4a18c3268"},
-    {file = "pyats-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:d1f2e9eb6ab4fd33b9aed8ddcd9ecf8c3ddaaf6a26ba0dba2e2686763b200e8c"},
-    {file = "pyats-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:819bba9b3bc5419864ea401f134211522f2ece63b83e04eaaeaccacb15d7decc"},
-    {file = "pyats-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:a929425e12964f5e70c1db17d83dd23d1e02cfa755f1030c9e1e05299cd5fb04"},
-    {file = "pyats-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:704255a62bb079a2f013d48b430550f3a83837dbb906abb16e544d5ad23c1e3c"},
-    {file = "pyats-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fc9c19eac980b7c25814ab6dc2b57f7989cc038bec441da96fa40d62ef47e0b3"},
-    {file = "pyats-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f01dcb1776ed960eacf10428b2f59d505679e59f046a86ba9f3476a84e827dc4"},
-    {file = "pyats-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8b44f293dd0a88803870141945d2a62d093976043521f3fc2685078ee2fc6e05"},
-    {file = "pyats-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:de88c4441555d9f1f466f673ec951cd6d62ee5d0d43cce0f4e237d4dfb9535bf"},
-    {file = "pyats-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3bbe6fc3ccb5e0a255f61a033f8f316d585875c80ab13f7e62789b14534e7642"},
-    {file = "pyats-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:013c50107faf229db458e1f80e36fc72ba03469a0fee6aad1419351da6a971ab"},
-    {file = "pyats-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6388677a0c1dff57b4759498e412d98f044859790f38ed6e7ff840c29f1a4df7"},
+    {file = "pyats-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:494739c79f3cddaae2b4958a85f6fce4c409c48a3bd0c18763b75caac83be939"},
+    {file = "pyats-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:9ac68d4fddd49a34c99d2ef82c752d52fec206b0b4c1403c92f85572fbb4877d"},
+    {file = "pyats-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d30c29870197381f4faa601ff50147398b7a6ea9c05f5d29c40833dfb818ce14"},
+    {file = "pyats-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:bb7c746e13fe3680a55a92876a9820fa6c8e0a5b6e34b2e27c04793e360ef467"},
+    {file = "pyats-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:deb55a1501f9ac41c7bfeb03be5d6aa21d79bf2986423e43f722aa26fe26dc5b"},
+    {file = "pyats-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:62d0c63c0ebce6319633f8027032bd12fb4731e9887a8be853e785501504b0ac"},
+    {file = "pyats-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:48bb7ea526bc8602d182544cf28ea52ed342dd9f854395fc87e43e93ef5c4707"},
+    {file = "pyats-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:476bc1e819f5bb29cbcedc65c92e8e1b3c2972b202e29c8bac09fca8cfd867ed"},
+    {file = "pyats-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f4cd2afb8437c2576257ad93446c37438a0942f14f33d073d42ae6fc102eb872"},
+    {file = "pyats-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2275596ff24354749f6c7d4b7b06c915fab32aeccde1557a531cd35534ee0c25"},
+    {file = "pyats-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:d456aa5f1567d4abf222f4d4634e68a230f9a0469fe1ecc5240765b2b14e2006"},
+    {file = "pyats-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:0c5d9c4d07e3924a72c50bedc2f92468697203666d7c5a6f46e6f76c2666176a"},
 ]
 "pyats.aereport" = [
-    {file = "pyats.aereport-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:35ad64b28c7794911c80e7054f4f4dea638abff668dd96ac35bc6d98beb1aa83"},
-    {file = "pyats.aereport-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:d8087351f5bc7f775d1bcbb64849b94ce1c125f867e213ab0a082104a9465d33"},
-    {file = "pyats.aereport-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:dfa26cecd4b304c2b4cacc04176f377c6dec56fdba1b12e2fb41da7f07324deb"},
-    {file = "pyats.aereport-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:de241039eee9de9ead273e1e7f0cf9d8871adcb32dcc5d2d752fd1b0377b901d"},
-    {file = "pyats.aereport-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:8763ac8585624b8a3f5f6acbb81e36acc4cd8dc2f11fec82f40d9c2737afab27"},
-    {file = "pyats.aereport-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2e15c71fe2401b5f30a2dbad6b1dbe9a758c0d7be4c3954edcf8994632b52aca"},
-    {file = "pyats.aereport-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:38805ae2142e46f5645aad5485072826dba9e36566fa8e1d00022f4968c3232d"},
-    {file = "pyats.aereport-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:d0f652183fbce27535d4c8d15123a6bec7347e62dd59ca509ce4582426dd2a4f"},
-    {file = "pyats.aereport-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7877f80cd4683c0ef3a5089b6870eae70813a37122756b303d22f5289b86b3b7"},
-    {file = "pyats.aereport-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:1c51ece08128b5e84adfb19655a02f684246e517b0f40e8726d2aaa2a6d19987"},
-    {file = "pyats.aereport-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d5efed152133345ba0657629bc77ccd637e651dae15561bcec28c6cf040bd468"},
-    {file = "pyats.aereport-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:83b2290e66200cc0eb2f2685ae44117d0360c5af35f876610f7a317bfe2decfb"},
+    {file = "pyats.aereport-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:6cdc7659c241ccdccccfaa36cdc02b8c6c9354fd91e788da2679527de228a59e"},
+    {file = "pyats.aereport-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:82029d606f00327ba47fa5b60d246cfa597e388ecf9482c0e0afd428e7419e99"},
+    {file = "pyats.aereport-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c458a717d93c3ba5b51e2195e26e26bff07cdf9540150c62e633dc43e37a5ea8"},
+    {file = "pyats.aereport-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:74e61f26e0c40f2cf11832f765df65fe445fdbfad6c00dec7d2e3859fddac743"},
+    {file = "pyats.aereport-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:23dcc6adfb23facc9f3c76803bce9f4e729e27665aaa4d0c3a631d6903b1aeef"},
+    {file = "pyats.aereport-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:088b9e30d31bc7f9c9d65da3f385ceb2bac5fb6280fdc483058d1a72e7548694"},
+    {file = "pyats.aereport-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3d9eafa7568ee9161f1b8ed3104ff39edfdf36f8b9d828cd0be5eff5000cf9bd"},
+    {file = "pyats.aereport-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:417032a967be1950c33a4495149480e1c5f37a48a7724f6cb9a4646b37571a06"},
+    {file = "pyats.aereport-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f159cf67fe3862d385e0f546911e2bca2b3b04bda8dbfd5b59b5fe7ba792d94"},
+    {file = "pyats.aereport-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:79deb862fd878051196516d902c34e27a7a855ed88e176f854602473a99ccabd"},
+    {file = "pyats.aereport-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:8829cb18363c332948bb562e1289691bba9120f31937e6b4956c361681f4c086"},
+    {file = "pyats.aereport-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:86535e18367cbe7334b8f68d7a35bc61c320235f2ce9cb6ab391387a9382653b"},
 ]
 "pyats.aetest" = [
-    {file = "pyats.aetest-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:9788346e653c4f5af575e3194aeb5b43e81319f65674cb20c3c43a758b04fcba"},
-    {file = "pyats.aetest-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:01feecacb14218cb16cc39ff5109848e99355b57730bdf0e35a23a6eaff61638"},
-    {file = "pyats.aetest-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:22d051964062c39d331d3868188e3bd8b809d1495bdc7b824fe3d928514f9c62"},
-    {file = "pyats.aetest-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:e00fdefc55923a066d10cea07c0e3c3b92089480c6db6ebcc5ea792d1aca7092"},
-    {file = "pyats.aetest-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:47698c9946f7d8298b1c2026bad9b89837147c3f7d9711a721e507729a02cc17"},
-    {file = "pyats.aetest-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:19f67209c22941fe3ac13d9bfab1c72f68825099ab834bfb49396c400c2291b8"},
-    {file = "pyats.aetest-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:088ba7fca818b0ad058aaa4252bf1148e648361da9d514a11059707349ed823c"},
-    {file = "pyats.aetest-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:da7e35010201fa64d7566129b42693287adc990857c0b6e30457692f704f4654"},
-    {file = "pyats.aetest-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:31d7c42dd13df1ab7ce23c1eb069fd8fab75dd2f8d8c9a28d60949c3faa07746"},
-    {file = "pyats.aetest-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:50e3585d7577da68ebf851a0caae2004edbc69860523164bafef18df3637be5a"},
-    {file = "pyats.aetest-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:10bc6907650fd919fe633480f62327a76b2bb5fdb7341eae3b6cfdf2b66243bc"},
-    {file = "pyats.aetest-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1293f3461a6673dba92996cdd4cb7a3c9629be59f7f3054acc880bfe93e3f1a0"},
+    {file = "pyats.aetest-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:af2e7e8e60a3c3d9163e8ffb32b78793f322d5f8fa88c965f7d1049620e3e0a3"},
+    {file = "pyats.aetest-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:1e6ea6cfc6e555a863182c7158b875bb237aff143006c89bd8bbbc0b6190fac5"},
+    {file = "pyats.aetest-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:277b7735e30fd8627f3649d9dca61b4b5fee8c6fd2dd2b81969a2b0fd1e72b1c"},
+    {file = "pyats.aetest-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8017a44f357ca909ab966a869391b83a78d1f621d92571699ce726fd6405b57c"},
+    {file = "pyats.aetest-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:ddaca75e92518faf0d55bd81ac8c011cf7d28908271947d2ea916bf3a90ecd1c"},
+    {file = "pyats.aetest-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0d67362dc4b1f6ea2319f580cb253b992f07e7c776cc80e780b01d6372f13b63"},
+    {file = "pyats.aetest-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3e6a3da7fecfe6c91191082c07eae53d9f462197c1e208b69ba20a093f2bae7a"},
+    {file = "pyats.aetest-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf256cd8e7770d369d85958031e1191796b8a68f5a7e35a8837568967fd490d1"},
+    {file = "pyats.aetest-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e6e4e0d7c64e967ddec5c0f82e16d4ed8197ec48fde613e4a7f221a92b079d5d"},
+    {file = "pyats.aetest-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b1c4e6a377bf0fd419f8dcbd1a029cce611d6e37ae908033ed0e6329490697a9"},
+    {file = "pyats.aetest-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:3913622bd14e334d8312956e34386ff48ee58b5e1453115b3ae29eb7d241f695"},
+    {file = "pyats.aetest-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b2446558683564d145a72a99294badfc522a6ba3e906dfc15ecd989f2e50fd34"},
 ]
 "pyats.async" = [
-    {file = "pyats.async-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:5e5b664a78f505f7af56b8deb457ae2044204f5adb63fce0c7c92b296c598ca2"},
-    {file = "pyats.async-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:efc39c0b14961f6ffdec12f62069d4706f38160d6685b576a1d1cb471c779e6d"},
-    {file = "pyats.async-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:4986e1c130ab27c979017e9bc532b2c59272adec0587d9c3a5ebad1ddff2866c"},
-    {file = "pyats.async-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:9486c9ed96d59c4af1c8c4819500c974c4dbfb1ba8dc01750c537b8f367bbe01"},
-    {file = "pyats.async-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:36d65f68da303500742f33960fd7e14940006bf66c5beb13f59224fa978fb1cf"},
-    {file = "pyats.async-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e932634d57c9be3ce2c1f881adb3bbe1b86d384ba12ed47a7e5bc64864eea036"},
-    {file = "pyats.async-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:7a5788fde79396daa1cf2f1e72a73cb2c41446c508e048b3bb325a9fa168d292"},
-    {file = "pyats.async-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cb487ad784bf25e8604c36d93696651d6528ce3f7bcfdc0e1381d98d760119a0"},
-    {file = "pyats.async-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2d629cb9ad69989da9a7e130fd5d840caa09d961aa241d9d0d9e543867fcc1a4"},
-    {file = "pyats.async-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:c3ec2e548653d42c5cdd5632ad0559cd7836003ce25ecbaf618ec1f613154beb"},
-    {file = "pyats.async-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b3d4de52e1d2d0db653487d3a64181719ad05ac9583b1c7c40b93817ced3f35c"},
-    {file = "pyats.async-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:83f63a3a9c04d293833d65c6101024c774b7cba2afa234ee0627297cffbb2538"},
+    {file = "pyats.async-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:b77beb147081f44f96dc4f576bd3bfd366ac68bafffde45b3a60b2b6faa3a8cd"},
+    {file = "pyats.async-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:335cb3636179a55348e9a3a7c9aade1d794bbc282458a66a4e13cc56066fa9a6"},
+    {file = "pyats.async-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e5518da8551e03541916440ab2cbbee7f4ef283cf0ea6f7f4c64c3b90fae1afd"},
+    {file = "pyats.async-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:92ef71e12723bb24637a41759c82c5f1c54ecc030e8ec42c13ef3d95ff73105b"},
+    {file = "pyats.async-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:4d9f6f6c14055472b17774dc4db5c0ecf9b29768a009c00f79b654eabc229ab4"},
+    {file = "pyats.async-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:12c8e68f86cafd4df6a58b2d1dc8a60a50cf7540fd795649abbc7dbc6c06d1c6"},
+    {file = "pyats.async-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:e5ef61edd579443d0ef66e825663b7c04c7c5bc425a5edffdf2086f67f9e9b3a"},
+    {file = "pyats.async-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:1773d4690a69115b1201c94bf4151f8a69153853b4f0b2b037da95fb989b4780"},
+    {file = "pyats.async-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a9aaaced722c87cf83efb8292d925e708c967d5ff74790f7f51b75e19ea1a5f7"},
+    {file = "pyats.async-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:a6362288b8c14b3a8b1415c8c15bce84640a80f232da8c12a407b038b490bddf"},
+    {file = "pyats.async-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:6960fca4172165461c8d574491b4e2626d7a0de90618cf8041d0d5d912dc3b1d"},
+    {file = "pyats.async-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:e4171f0a042c801a248850a217971295ad048d65195b33c4755bc00e59b2fb2e"},
 ]
 "pyats.connections" = [
-    {file = "pyats.connections-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:3e9d7f6cde30fe8cfbf71ede6d7727755e7db617d4eee2a26962951c0d2fd305"},
-    {file = "pyats.connections-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:978abd5618049b6f603d6b1c3eea51a358a3c881bd89b289b6575487a58fc690"},
-    {file = "pyats.connections-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:01e1ba8404d565f1d9eb0501bfb096fcffc16342dd4dbb25f5c66b2c871b95d4"},
-    {file = "pyats.connections-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:737b38bd0412220386e20a59daf813e50ffce33dbe8046f3afb17a9619dfa280"},
-    {file = "pyats.connections-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:77ca4ebbc1f9d37e4f68814aa4e7581c1946c00af46bdd7ce1ac4b51100d51ad"},
-    {file = "pyats.connections-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:32fa20d2bd202c77266045e160db65d0434a39fa91db026334631e718cd171c5"},
-    {file = "pyats.connections-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:9ab3b8fc4dcee116d05f73747110d377440893601cf6c80c2c115651da11c63e"},
-    {file = "pyats.connections-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a4b65c39bd44ab9e922105b559e9c750709d7920378ac6817f39d85c339daf1c"},
-    {file = "pyats.connections-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7ffe5637c3183eb4ce0a740f640200293dfeb821463ee79243b7802047adffc4"},
-    {file = "pyats.connections-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:e41b08c80024d9b502d7ca380d39c56726a1fe96eb941e9d63c10c6f0c054e47"},
-    {file = "pyats.connections-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c80e16aeb12244bb67b1638f5d7cdbd3c7d888c7c643a00be28ed6a65746dcc5"},
-    {file = "pyats.connections-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:57951c64aca7d8c3c554e3adb734b4558f8978a9c30dc3468df67dcb99616bd8"},
+    {file = "pyats.connections-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:09eee21385f8fb9e4ef3239682cd8cab4610e8dd10ee4079a6c5203c9817873e"},
+    {file = "pyats.connections-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:fb15d4de0ee0635c98a1391a6599cb5f0e5405f971f60a0f4c50fe17cfc30447"},
+    {file = "pyats.connections-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:45133c5c9232e7a907ec1e789755b6477bceee76a070a8003e38acc4b7749444"},
+    {file = "pyats.connections-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:4dc5597226b3d87a0aca53ba72968e6d4e173dc7e22e21c1a6c0121edcd197e6"},
+    {file = "pyats.connections-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1a181b32e4fbbb37fff41dc58ecf0cb19a487eda62c1f4d7a90f18338add2653"},
+    {file = "pyats.connections-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:775e2627bb03ab06d6c778e1ae0fc493f7b3de44a5182e395d248393f2fd6f7d"},
+    {file = "pyats.connections-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:f5b028d6163b5fc25f77cf3687656ef4f631555e0eda382d6de533971c328824"},
+    {file = "pyats.connections-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2aa4f3cfaf04cfebda3e250b3ddd16e62b40ff0bbc1c74d6c16ef242720c246f"},
+    {file = "pyats.connections-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:edc24daa3f2c459a811e434fc1faf2573c978ef7b256a251e7ffe589c80099aa"},
+    {file = "pyats.connections-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c1dd9d479d376aee786bbb13672ca89737d0417b813bbfb74c8cb7a25f73e40c"},
+    {file = "pyats.connections-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:3971f1f1983019500308c4c4e9be714dce70f9017171b6fcbb8ba58157e03ccf"},
+    {file = "pyats.connections-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f665015d284e255d569d5c576060071127db1023152cb5439deeb883a154860b"},
 ]
 "pyats.datastructures" = [
-    {file = "pyats.datastructures-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:b46df38899e6b4e3d64704219a1943076c02a005739a659712ea280c74416a4e"},
-    {file = "pyats.datastructures-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:9fbe9cbcfcb80f57e4375e5fa6dc19d516d96cc14390f12f50862e368285d585"},
-    {file = "pyats.datastructures-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:36ff319a92823eafaf51832109ab6d81e6fd9264d3c3031b9e51ba0be5c8971e"},
-    {file = "pyats.datastructures-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:e2558c3e9864a37846f650f5d6e28dd6c79dde5fd93d9594dd8aea1cefed6fb8"},
-    {file = "pyats.datastructures-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7edf8522233543addb7501265ee5e23311964ecef5c4e17f60e2dd0783b94236"},
-    {file = "pyats.datastructures-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:80f6b61783da4e35578db2641ee23b10b2422df91d09901c9fcb73a4298d627f"},
-    {file = "pyats.datastructures-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:516b661b2c753e19ad95a390b34fad94c2136ee4e4c1845145136a7fb05476d1"},
-    {file = "pyats.datastructures-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a66e5c95566bb61ef48a68e2f0b83c9c32b268f4a63d8dc067de8de429e78794"},
-    {file = "pyats.datastructures-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fb205bac5acbd6797da05056648ef18319a23dd3076bda4bcbc5e205c2568c33"},
-    {file = "pyats.datastructures-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a260635da711279c7a0ebac0df02da46ee0ebcced1b1c982e97e098d568b1935"},
-    {file = "pyats.datastructures-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:bdf7b09305b236451b92ab7772c6453daceca0127edd26aa75d59587f3c6c17d"},
-    {file = "pyats.datastructures-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:263782a30fa4cd6d5971188122ff2c72807f448a5049dbe4bf7d29829757cf89"},
+    {file = "pyats.datastructures-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:dd54d84d65edff8f51474c48c4887c9c600e17c6c8712604cb2f77d7b9d19b80"},
+    {file = "pyats.datastructures-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:88deafe50d3536694975f2a2cca472ba7fb8845912fcd7e1d8b2fd9700af78d9"},
+    {file = "pyats.datastructures-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ea9dec4bda5d8d2396915a5e16fdcddec829abc431ae0cbd55c34e8b195512b6"},
+    {file = "pyats.datastructures-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:68a7579a818f95301e2ae05f1152b10820204ffa68d28438be9e36f9db6740e5"},
+    {file = "pyats.datastructures-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:f06e342df9e817cb993fe198be008d03051c8fe90ae9cfa19b4d097603ca8b52"},
+    {file = "pyats.datastructures-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:306fcd11201ff0b3600962d4ccde9b653aea02f7568108432dcc4ddfde541a2a"},
+    {file = "pyats.datastructures-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:9c567510581b749f8898f58c03db19788acaa572214d7101cd0a9cbafc3b0bf6"},
+    {file = "pyats.datastructures-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:d58acbed2197cf5b5acc8c92bed967ffb51462236e6f229882835e4cb2bb0b1a"},
+    {file = "pyats.datastructures-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:15f7da7b4703753e88c78fe423f3b26cdac5153f5dbe929995ae89771cf47cdb"},
+    {file = "pyats.datastructures-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:f5b078ba4f0f36e351628724fd53d710eaf49fdcb38efb2469a5eebbb1485cfe"},
+    {file = "pyats.datastructures-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:53d4547d9e2b0ed438740e185d70b3969deeab15b68e7568e6360360baa49b08"},
+    {file = "pyats.datastructures-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b1a5174e88a467cd1e8ec5eeafc506c0e3ab1c799eaa38e12bfaa86167d413f2"},
 ]
 "pyats.easypy" = [
-    {file = "pyats.easypy-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:2c775b2caeb0847313ec2b968c1306064719458802582edf2c7579ef3afa2d4e"},
-    {file = "pyats.easypy-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:b9fbc9a5f47b2a5cd2b17fb1aefc83b26c57033349f23c277172dc2f93fdc53d"},
-    {file = "pyats.easypy-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:dd33e0fc194a73cbb5f7daf016d4d82e3e92e0c2024bb5c21bfcae93633e1491"},
-    {file = "pyats.easypy-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:68529efe8737ad98cf2126f0b8103f9152883d3d6ef756bb75d51173042a865f"},
-    {file = "pyats.easypy-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:07cdbf18ec3e20b00a10d032616a005a2e9db4109eea4b7a8e996284d9d550d5"},
-    {file = "pyats.easypy-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b183895ab26528a41b4bc3c52fd679458f690f35739dc8bf377ec586a4576f2e"},
-    {file = "pyats.easypy-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:b1b0f5a889d868813ff0046bbdd13ba21a4b7196665c63b3c5ab5652a3cca020"},
-    {file = "pyats.easypy-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3891380d6ac2e4223022098bc551fcb1876bc6f6d657931abf2897e5223b0a29"},
-    {file = "pyats.easypy-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7693c0394148a12713729979f6889fe937c40702efce7a732797e7e8d4005d1a"},
-    {file = "pyats.easypy-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:31755705233db6d3112cd11d7657d9503acd0f5fbacc659b1bcf6048050ceb0f"},
-    {file = "pyats.easypy-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:2237fe2da03c2e8fa31eee6855e4004979c33dc468725401481cc3bd472e4ff3"},
-    {file = "pyats.easypy-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:108127fdd0903d190ebee1a6a74b8ec049cf79a5fd1d6c011a68df34daf07c2a"},
+    {file = "pyats.easypy-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:75359b0554fb30b30f656523ed917bd5a0b61ec3ed6f3bb3498d04609a91726f"},
+    {file = "pyats.easypy-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:e647b2d798910e690591dd4c5cf0d6d31788b3122d1a9ddb628e828b5f5d55ac"},
+    {file = "pyats.easypy-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:84faa9affd358c5a307b22593a47ab19133155dc1c0825f7172a657c7d9ee7b6"},
+    {file = "pyats.easypy-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:811e2fdf1dc6f1ec7d9a90b3570bcc8302b65bc709af75b8000f565a05565aee"},
+    {file = "pyats.easypy-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:6a6d45185096eb03ab9067de5ad0d17348ac290e5642c05170d7bc93077a4d55"},
+    {file = "pyats.easypy-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f582df5c5274de6cb86bacd8c76f015244229747c61cfde0b62ecc5c49c6feb0"},
+    {file = "pyats.easypy-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:e7cb5a5147a40492dbd0a3961245eb928f2a605cc34e94cce559674e943d37cf"},
+    {file = "pyats.easypy-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:ae7ce3dfc95bc55106dec8962eeb802599ae1d341e6b8786516ebd8327d007bd"},
+    {file = "pyats.easypy-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b055d2fddb7906ebbb6ad351af7c1c30af85d173703d8a8dfa7ccfa1c14ddb1f"},
+    {file = "pyats.easypy-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:333015e3339ca155d3a2bbe47674e490a19df670c91f515f84ef8db72c627519"},
+    {file = "pyats.easypy-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:e997039085dce0d1b07a2904f171d98a5236ca5738ae945f69ca6b7af39c16fa"},
+    {file = "pyats.easypy-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:9e83b7b82db686c6f7bef87497c5a0d0d71cea8f1ed22068feea852f340b1533"},
 ]
 "pyats.kleenex" = [
-    {file = "pyats.kleenex-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:32dbf0410e996ee2ea2bc1f7628b2d504db8e0f22682142fab55096b21130fa7"},
-    {file = "pyats.kleenex-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0ff7303a95910639aeecd3e60df0e3efa81ea3e9cfef35400fe71ac185e2e460"},
-    {file = "pyats.kleenex-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9e28f32664a2cea47b8f3e369117a791076130b701d78f038ab2542efe48e921"},
-    {file = "pyats.kleenex-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:cfd2da28a3fa6aea652113e038aaba1e7626ca0232c304990e5daac198c7de56"},
-    {file = "pyats.kleenex-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:3752e240acd7ed420abc200ef8daef18f56c2a1da1f5213482d08cf0f602a5f3"},
-    {file = "pyats.kleenex-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3bc4eeccc8546262e9a37b9b9c436d6f16545c91eed38852a4ccf61e1607286d"},
-    {file = "pyats.kleenex-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:ed9416d5c7554d69ffa7c855c83fa86b435d7a958b26fe7e1f8f2dfba215d85c"},
-    {file = "pyats.kleenex-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:07eab278bcbb8fc45399e81ab63067323e47b03cfa33ad60e44bf64d3656faae"},
-    {file = "pyats.kleenex-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:705715a79113d3f95946058764f0a6b6803ca3e3823e95dbf7c21a57a1f9e084"},
-    {file = "pyats.kleenex-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:5020db41d28c9a36f339e48c0a6cf762ecfdcf5a59d3b82e1efbae07b7c1acf1"},
-    {file = "pyats.kleenex-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c2f0b7766f215a7355113a7f1d170bce01c0435005f3ad2a26e76f66e632e72f"},
-    {file = "pyats.kleenex-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a613efb3f70d709abc9b079c183f6538c9e1eac469b894e820c628bd15ceda94"},
+    {file = "pyats.kleenex-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:567269871c1942916b09eba3d526a771f3705bd659db907dc02777841ceb7da5"},
+    {file = "pyats.kleenex-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:e1c94fde0df8b34911db60f1cd7bbcaa35dd6d4ccbf9a0512367558b4d3657e2"},
+    {file = "pyats.kleenex-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:994daa241f07a5f12f271a71e477239ca0df6916ac93b720669dfa8a8e5f9852"},
+    {file = "pyats.kleenex-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:18b777575eabb70a8fb40dbc72c5e5316ffd3aaa88e47f808e8d101bd61f4526"},
+    {file = "pyats.kleenex-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:73175ff26f17eaa5fcb39343b4ddd4847c509ed52887787a910066298036aed9"},
+    {file = "pyats.kleenex-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a8499e4e3ab12b855bc8f3d6aec1fa35e17e8f05f38222693a16a7331eef684e"},
+    {file = "pyats.kleenex-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:660efbcc283cab02e3bdb843e995ae5393caa80267e1bacd4fecbef643b5ced1"},
+    {file = "pyats.kleenex-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2b86f1c60e42451903d4dfe58580f027ee9c0785a5a110ed4ba29d524dc1dd76"},
+    {file = "pyats.kleenex-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:69579acd4a9e030103d8a144db1d7704d9229af71e58c52838c61647c42a5fa7"},
+    {file = "pyats.kleenex-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:4a1ee11516c4a72131e45227c64e2d478594e13a6a1109b1d715d44b948075c3"},
+    {file = "pyats.kleenex-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:8ec7cbe8bb3b17a558004cf3c2b3bedb594d2220439126673868d605c5604140"},
+    {file = "pyats.kleenex-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3b6cd6a9e373d2daf8a61c26052d14a7c65f687d2fc9627ba0fd7db34a11d996"},
 ]
 "pyats.log" = [
-    {file = "pyats.log-20.12.2-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:60bfc070a04015dbbbfb68a023681fa698e49b50cc6440ead9aa2d8cd1e68832"},
-    {file = "pyats.log-20.12.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:9304e00b7b31de300aaf196cbe3d8b40da3871c841e3214616a77fc7526373f7"},
-    {file = "pyats.log-20.12.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a9b890900604d353c6bbe39b9816935ae67b9f6677ab0d10c94312d800531c29"},
-    {file = "pyats.log-20.12.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:f7ef2ecdbfd3d0dd067c83de69c74bdfcc179aa7e2e353c476e42deb0f5ec7ab"},
-    {file = "pyats.log-20.12.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1099df7d241cd23d880c92ae272fa53dba087adbe9bd86085c942a8fc62f09cd"},
-    {file = "pyats.log-20.12.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:be7f1a8db55ef63d7e96d177a86802e066e979b414005c0b2edb94369cf660bc"},
-    {file = "pyats.log-20.12.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:a866d6ebebdd033b0ee32514690c11f7c1aae8e7107e658c164182b42886d953"},
-    {file = "pyats.log-20.12.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:12b8dd1acfccac341fb30b30c80b11fbf3fe66ef21cd614e6324caf2ba73b158"},
-    {file = "pyats.log-20.12.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:28f6066c4c35716a8389ba58733cf3bb2315b8890e36c2a0ff08a6a9679efe7f"},
-    {file = "pyats.log-20.12.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:64fb2f55daa412eb143aabd8aa9737daf58e196b04aa9587f5f59df62ba717d8"},
-    {file = "pyats.log-20.12.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:9ef92f02efa53774a902359635daa1120d587734da9f7e4d725bdedcf21561d3"},
-    {file = "pyats.log-20.12.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:64c1dcda9c919fbf822ecfe2d58beb3d36f6a03e8e62bbb75abda9b2c73deb59"},
+    {file = "pyats.log-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d7efec851362d5e26c56ae58d2b65d02b0895c11e9482d89617f3e12415609cf"},
+    {file = "pyats.log-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:e910bd0d5efd3df0627635261c6af12edc75e7a2d0c4cf1e4672f239fc83dacf"},
+    {file = "pyats.log-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4230ed59d052656f5fdb796bc824e22171c5349de994f4f02c4c1d3659f712de"},
+    {file = "pyats.log-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0c63adb62f49f7b3c56b95bd69a74caa4383f0e8c59c5b4084e3f7f743ee46a9"},
+    {file = "pyats.log-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:0c12a5fc1f0ffb7bd05914df5dca910214101d42d927427ad25806129a31c154"},
+    {file = "pyats.log-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a3232b292ac2385386d150aa26a5ae68a2d70d6e5afa6b12e140141f6c8b4207"},
+    {file = "pyats.log-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:06f13f98091e757e556d11cdb33eba2d43b0941e2c9e514c2a775292ef68ac04"},
+    {file = "pyats.log-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:39f0284f6b120aeac211fc27a83d1dcfe99538c7ed405732475c519005942cff"},
+    {file = "pyats.log-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:02cc893aab6041035849d9298f102e0be0c85618851803442225279647dd55fe"},
+    {file = "pyats.log-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bebfa894465da49d0c27d32db0cce6c892e020dd166e2e5c35e039b3b850cbbc"},
+    {file = "pyats.log-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:79616348cd03932209c4bc87bbb7270bc430ffdfd830bda2440f29506f955186"},
+    {file = "pyats.log-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:308cab89ceeacfd89e4aff6c506b8857a3dc2b04bd6ab4e88c8dd094ed8b2e1f"},
 ]
 "pyats.reporter" = [
-    {file = "pyats.reporter-20.12.1-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:d53b6a5b9bb92821a9cdca375c1e083270811361f792d56752e68f2b9ea468ff"},
-    {file = "pyats.reporter-20.12.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c6455b277d03ded78ea77da5a0be969ffe48c52b2cf8025d23749f30bbb16df9"},
-    {file = "pyats.reporter-20.12.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1f1b4af40ebe1ebd4d7798ce2ef768e23125857e5fd2dc29699b08d7df8e7be1"},
-    {file = "pyats.reporter-20.12.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:b0e74f2c04a81857d05e28a89e989f9ad6c8f50c44c284878b91497277a8ab58"},
-    {file = "pyats.reporter-20.12.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:80ca99f698f72d6b4b0f8f160eedbb045779ef69e2d400f8374746499de3d0cb"},
-    {file = "pyats.reporter-20.12.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6aca3c1997a5b9da0d95bda7943cba3e6aec78bc35b8d9724d095bdf4d233c16"},
-    {file = "pyats.reporter-20.12.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:56a2efac00d1d6dba3d5be0eea1bfa25f0834cfdb9ce72f91870db78e3c34967"},
-    {file = "pyats.reporter-20.12.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0db4761fdf7127a4709d35c3b2138042faab01ffb9cbd3e4f4afeec2964376a7"},
-    {file = "pyats.reporter-20.12.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:05db492ff8ef53c6b626dfa6453f008a77f6c7496253b05069fe5548b2d69b82"},
-    {file = "pyats.reporter-20.12.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:35a484e9ecff3f8559cbab607826006839f76d3488044d79483fdb3e608dac82"},
-    {file = "pyats.reporter-20.12.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d7af29b4bc879b49f8f580c62d832782fd72bd6704038e0d042af2c25fd3e0af"},
-    {file = "pyats.reporter-20.12.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8fd98d0bc7f737f7406f554320b8218209fc5b6ae5b9b7e31867f7ce3165dd7b"},
+    {file = "pyats.reporter-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:558014f53eb3c65bf73633fb1ae68a98d82d4cb82745d793eb0c603f7120fdd1"},
+    {file = "pyats.reporter-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:0f2fc08ee9673c3e8a345b2429855bc47b640d799ba14cbec9b201e04141878c"},
+    {file = "pyats.reporter-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ab10339079e5dd9bdee3ca73ec0cf275bb6a45da9f2c9e3dcd23dd09bb2f5be6"},
+    {file = "pyats.reporter-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:6001be1509e1375c0774741f8a596055199b90db44a8b83d5722d5e0ddd22187"},
+    {file = "pyats.reporter-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:caf8f2874254218b037af2a6c32f76edb6e59e980332854cec0d8583882a7272"},
+    {file = "pyats.reporter-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2a761aa54a42e3c29782e27a34fc25aa24184b10419c8d458681d6c9345b4af9"},
+    {file = "pyats.reporter-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:f964db7296b73491ebb8c9a5525dd24c2fd3a1a33d796bdb6f9bd04b03e1eeed"},
+    {file = "pyats.reporter-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:283003406ee3604255dbac50c6dbd8358a5f244f0a022b248894f892ffe42a60"},
+    {file = "pyats.reporter-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:287be4be65dc78b0b0e7e91f57a629febf5aefa8888a127fe7655348842ff6dd"},
+    {file = "pyats.reporter-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f96a75e6de3b62140675c4cec5ad1da9f2074c7d0edab32b35a28ed59f4920c"},
+    {file = "pyats.reporter-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:2ac21a081aab310696989a30d50a5c857fcbd276ab79435569671ed273363e5c"},
+    {file = "pyats.reporter-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:5c6036e68d0622b7299c9558bc444dd86c1d445e9a38835f9114b0db42b435fc"},
 ]
 "pyats.results" = [
-    {file = "pyats.results-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:cf35189b5545859aaf9ccd403feffede04feeca98be6f1ce35bd5758f17b0016"},
-    {file = "pyats.results-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:9ac2495cd7d60d0f9ae7e690955c21a54cc5c2625b98b401881a752d15ac6c2e"},
-    {file = "pyats.results-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:e66d00fce6abf7f948f97e8e3e99c1c6dda67f4f845737c6c45ebae8e54aa6ef"},
-    {file = "pyats.results-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:18d553a20edd768b56ca44cc0652a9a5348e2f3750a0118170bdf0d7bbeb8822"},
-    {file = "pyats.results-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:6c646143836b2dea8713457feba8e97a0f92930709fade1c77d401c8b0479fbc"},
-    {file = "pyats.results-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:21d9a501ea81335b0885057db6b5260a90d7b5877ba3a7238232af645ddd5a2d"},
-    {file = "pyats.results-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:ce016d3cd53376b950928715ca8a3a063a83afc84306ccd5dbb2813e2f62098d"},
-    {file = "pyats.results-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9655ce1a21483abfa97aa10538ed3d917d1e413823c1288025c807eddd7d04a7"},
-    {file = "pyats.results-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2b5145173d6d22d192c7fbe7d1e80af4c2b88331955767b4b406cf50f37ce06c"},
-    {file = "pyats.results-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0f6565a5ee05c4b58fbec680f96204c135b8cce76dc5654d5eedb3e1ab5982b2"},
-    {file = "pyats.results-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:2635ca0cdfef28efdef78b76dbf2c8feb8cbc143c900e085b3df0d7feed99382"},
-    {file = "pyats.results-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0f5bd1cf250460834321682a853c9d951a96c31be8dee1b51c8ed4e6c6ae1733"},
+    {file = "pyats.results-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:59bd0c11c937618e96388a8e0ef4c69a89b37d9dddccb238a8690aa4a99990f2"},
+    {file = "pyats.results-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:9501d5c727369564290ae0c068e43f7429e817116146c5a6a21f60de0bc154dc"},
+    {file = "pyats.results-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c4cc018aa2f99a6ae7f008fae921524c67b9fa9bcd5f97c6579c4ec8f4ec5265"},
+    {file = "pyats.results-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:3573dcf5fe9c5de329dcb56c19e3b51c5242f54bb0a3a2723f75cf9c8be46bc5"},
+    {file = "pyats.results-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:c6507b69d50865f3a56356db950696280f1b874a2b84d2a07afd5bb398ee1ee0"},
+    {file = "pyats.results-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:589d27d72145a846d36da0347f2fa7a57c4da4a752af310223735fff224e23d2"},
+    {file = "pyats.results-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:09c5712f154448facf0b9db6868332932adb900044692be6646cf1096d7ec470"},
+    {file = "pyats.results-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:4717ee686be51524361ac0a1b0f06620529181582b76ade8b6fdae1255902d8a"},
+    {file = "pyats.results-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9621dcc92e8ded93fbcb70e4c402b7561fd423dbe39dc037ae5932f32e3ba4be"},
+    {file = "pyats.results-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:f311235fd0187ddbbbf824693261682b5915a4ed27a10278b68851992acced5a"},
+    {file = "pyats.results-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:fa6e2eb23487f78e4d16008637eb01e4548132239c7613b07bdaeb8a46a69f34"},
+    {file = "pyats.results-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:0c865935574bede97ad3d87e0a5a25303011357beccc6b6b072065d3bcb71fb1"},
 ]
 "pyats.tcl" = [
-    {file = "pyats.tcl-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:88f4ed77c5c01dfab0fb262a276bb9c35ace142ac036bb00a21a99e2b35b6000"},
-    {file = "pyats.tcl-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:15b08dc5bf46d9983052807dbfab56b3e3747f0c94a39fe0a138edffcb8616e6"},
-    {file = "pyats.tcl-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:028f6d51c372469fa4c6c2e587b8003c40fd4fef59be5604e303c11169675611"},
-    {file = "pyats.tcl-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:8b17ba18348e89764d0f004057b835705b823f10c68625a41afa57045d4addc8"},
-    {file = "pyats.tcl-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1fb0e5b6efa6ad97119c6f1d8cc12d2132b77d515b4d45c63a94513daefd3847"},
-    {file = "pyats.tcl-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ba702520a74082e3c975493136b2804e9b8a9adf7c4a4b2bfd6a52b6ab0036e8"},
-    {file = "pyats.tcl-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:4fc0eb3e2666ae680a47b42800295de52dfb501e93883a66b7fd4ffdd2b33a88"},
-    {file = "pyats.tcl-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f229265ddcc238713b75b80fa258b1b9ffcff50f7fc3aa74d295438ce2f236ff"},
-    {file = "pyats.tcl-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:09156e17660ab5b9bd831a83c115d08456297d1690b5858b10ebb4eb296824a7"},
-    {file = "pyats.tcl-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:1140514d39fadf46c90f8d4bc83310e9b4e70c23921afee1d729d3875df6064e"},
-    {file = "pyats.tcl-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d2adf28cf9df9650868539c46ba29b738706062e0e50351500ad19066307345a"},
-    {file = "pyats.tcl-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ec77a315b2e80651642738499380955efb93f25261a7144411b86b47c020e04a"},
+    {file = "pyats.tcl-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:96e7138a4b4bcd1ab7409a6299f7774205ca633ad4769b2c3bed125f9adc215f"},
+    {file = "pyats.tcl-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:221d01b2fb3561f7ddaced80d5b8d841a778be0c9b1972fb9a31e923c846d84e"},
+    {file = "pyats.tcl-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:13a2510007a9471db9a6c57dbd09b7783c5a72d05aa63efb6cca5442dd1aa9e5"},
+    {file = "pyats.tcl-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:46e65199a00629b091bc948e32b7bb06307c5a2139f27b2fb1791af95c04b4ea"},
+    {file = "pyats.tcl-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:5cc2ce79e744f35465f52f2e9a3b17ace49cac1d269977e3c5884d0174aba291"},
+    {file = "pyats.tcl-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:803c249f821337709689127cbe0bf162505f0f0e29d47adc789ef1b6c95c20a9"},
+    {file = "pyats.tcl-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:736121b8f9e634dbfdc6ae614863b5b651040606f4ced706bcdb5f6eeddc1885"},
+    {file = "pyats.tcl-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:868a0972b82080ce56c713febc2b6e37a54678a6c7ed4fbd4c6cd500ac5736b7"},
+    {file = "pyats.tcl-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b222c61845b034bfa046fda43abf4116c4a2ca2b91d2f5ebd468d922d45f5e4e"},
+    {file = "pyats.tcl-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:4a57b4d3fc776f97099b46c7231fb5c3296158f0c4a7595be95ab39a7e08d59c"},
+    {file = "pyats.tcl-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:3b6791916bad5bbd1cc7d183f799e293c4ad9d705a03bf869608c4a8707b054d"},
+    {file = "pyats.tcl-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:86f7a20b409145304ad7da77bb0c0ec4723102b025ee8353a2ca34654fe658e4"},
 ]
 "pyats.topology" = [
-    {file = "pyats.topology-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:a8c84f7b1178914a7591c1ce9ef9fb3d8d532d29732ec89d391ca5fae564a07c"},
-    {file = "pyats.topology-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2ee169b2c0ff498024b52a22ede3149e562bd25c3515992ca312975139f49d47"},
-    {file = "pyats.topology-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:5f0e71c7c802821e6768e54785db070e1b207b4622a07b17ba910b51bf2c6df1"},
-    {file = "pyats.topology-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:6fc30943b7bca8048d5425e556d9573c05c72e2c7f598fe82c1751205a0f6ee0"},
-    {file = "pyats.topology-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:8f5a7b2ab91e3fed96445a20cc23d481e21078557e097913250310c59f28836b"},
-    {file = "pyats.topology-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e860bda239b8a83ca6bc1208fbaff2a9ff6ba38a3619fd31a3c282b8cf884447"},
-    {file = "pyats.topology-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:7326b0efaa871a5a9618e975f0df975ff84223955c963e8cda01cc55d374a920"},
-    {file = "pyats.topology-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a16c26649bd294ae040bc45a914394440b94ec94083bc6af022ecf3124d1e52e"},
-    {file = "pyats.topology-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4fe2aded2af6c27517516d5e1ef98733c4ab5fb6c833598a6454928dddd1e8c0"},
-    {file = "pyats.topology-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:70521aa4b4ebdc0c9ab03615c1212610bf36c6966218c33ceeefa9ee7ab67632"},
-    {file = "pyats.topology-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:45cf6e39ffd4da185f98bd51c8677088f46517d67ffa0cd7bfcef731e8beb2a2"},
-    {file = "pyats.topology-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ce206b58e1679d1c8b15d96faf04254960e9068d273820e79c3370cda3110c02"},
+    {file = "pyats.topology-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:0ba26369da3a2217087f44ce5572f13aea8ca0e61ae345eea5318c45714113ca"},
+    {file = "pyats.topology-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:7007e25c1c186e82aa4b56387a2ccb4cd2bb700327367dea1bb2fa27da83adb1"},
+    {file = "pyats.topology-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:47d198b2867c8909e5bd535e95ce8eef882633e39c9103bb60b919438175d7f5"},
+    {file = "pyats.topology-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:ddedef4f77afb5d479636c5748de94e7a7c545efca430f153c793f87c4fadba0"},
+    {file = "pyats.topology-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:3d2d8afb8f8bcfc6682b65b8b9f9f130f50a36b9f5873ae80c08066d14236b62"},
+    {file = "pyats.topology-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2245cc99676fbfd913af5f69c7a89d4aa432b83d9301d6117fc39983bc09a81b"},
+    {file = "pyats.topology-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:181afd0c7efef18171e89bfbf1c958be60087c38671844aa6b718d94b23c9014"},
+    {file = "pyats.topology-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cb314f02393fea3a2de7a725963d0d4186e77aa6e304be4049c57c4e96cdb9b4"},
+    {file = "pyats.topology-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:19323a4431582a5fc56cd887710ff20936d103d1cc71dbf6a31a430238794e21"},
+    {file = "pyats.topology-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c612fe99195625493f94cc06a6c76b67ec8c6bb87777cc854ed2cdd2dbb4137e"},
+    {file = "pyats.topology-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:1a52e956f266f6017517d48bf586fb0a6468ef009f984647208f8972db6372fc"},
+    {file = "pyats.topology-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a59351e56ebe97ec0d84ab371c1dc0b186c02646f5c4dc77a6aae498776c4050"},
 ]
 "pyats.utils" = [
-    {file = "pyats.utils-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:7fdc38ffc1d7e64d5be498bc9eee8192edf12cddb65d01113450a30bf3e14168"},
-    {file = "pyats.utils-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4d58b8b7090d57f2718b0b0098b827e903ede9d0d0409d1bd13dece1632e72df"},
-    {file = "pyats.utils-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:589181d45aaf15576514ca1d3a81c324a7ff3a6d662bfec79a72ccd413e20803"},
-    {file = "pyats.utils-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:e3651a28743e3c36a4ecf24c2dc491299f973ef8765b7a98ff6b6a7ae43bc5c7"},
-    {file = "pyats.utils-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5a3ed5b3697ea8e1f98c4b5ae0ea0187d59518dbf2d5f933b36bb32293af9c37"},
-    {file = "pyats.utils-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3a5e0c34150a829f5607890a17835c08e9b6042d0e41b6bc1990e6d51a17319f"},
-    {file = "pyats.utils-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:dec89f0618fb4d6e095d7c1e461d21aadb165563f04606a4786f3f8fee811fc9"},
-    {file = "pyats.utils-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:84553b48838975a9aec635861db4e5c3091e572d01691944ba397b90029e7d46"},
-    {file = "pyats.utils-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2aef7294779e0599924c2550442e936d156dd35b9170220e3e467552fa4bc61e"},
-    {file = "pyats.utils-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:529d02ac6d7af3ce9459d3dc9699de8722093ab33d2f575646b5e86927127be1"},
-    {file = "pyats.utils-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b1c6e22812ae9c01a197ad56e73857a5bdb38f8ced808275f6daf712b30777a0"},
-    {file = "pyats.utils-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:c590a7edb72f8151c47933c79acac6bba10df7feef2c86215badf21224993387"},
+    {file = "pyats.utils-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:4bbdd861c7eb22b8e8d89e506e7e127eef83142d6438c950a83c95887c8ca4e2"},
+    {file = "pyats.utils-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:7a7e7e5e5ebd7e92170f15c1eb0730da22d3bd131cf38c8a1f915097cc15331a"},
+    {file = "pyats.utils-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:03b623eb1ab080752854b609c41ce3a043d9f4b209256137ab1cc90a531f2304"},
+    {file = "pyats.utils-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:448640c07f4869d3dd3d083882190790279b66015ec0ce3cfe2587f6f4da43da"},
+    {file = "pyats.utils-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:894b464d13119a4cc797b4ff76cccb2f377aaf6c212e10d4da9922dcb28601b9"},
+    {file = "pyats.utils-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:532e9a6d09ccacb4de41ae62a5e7aa17e15292a8bf32efbea24a95bf5588a5cd"},
+    {file = "pyats.utils-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:964d4cc8da79deabf0b861b802f029f4f3b6699ad4ba4ccbef3f4f9dd26d98b1"},
+    {file = "pyats.utils-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:0fe54f34554a03dd5ed3661f273f6dda35dfa397c10574b318b1c6a3f330f9ca"},
+    {file = "pyats.utils-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7e8350c86c5b7ca06aa593d08ef1858b87f8ac8ea134aa265dfb1291394a5fbf"},
+    {file = "pyats.utils-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:e34bbea701463dd42db815fc89de92a65f94c06151836f3d8ea4f0cdb22ed9af"},
+    {file = "pyats.utils-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:195f05f4948317117ede483c0dc7677049922db4599aab2b7151ad575ba8af22"},
+    {file = "pyats.utils-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1b62c71b9b8d8169f271e1e08611d1797ab86ee079436988948e2c8f59b7d0f1"},
 ]
 pybatfish = [
-    {file = "pybatfish-2020.12.23.763-py2.py3-none-any.whl", hash = "sha256:6f95723e17f86e74c6b1975b5be32782cd7285db11f162706ee77c998f411bf9"},
+    {file = "pybatfish-2021.2.26.830-py2.py3-none-any.whl", hash = "sha256:c410b2c73785f8fbc121118f1e3fe39c713be87bcade5faefb306abf4016fd28"},
 ]
 pycodestyle = [
     {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
@@ -2852,61 +2793,29 @@ pycparser = [
     {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
     {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
 ]
-pycryptodomex = [
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:4344ab16faf6c2d9df2b6772995623698fb2d5f114dace4ab2ff335550cf71d5"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f933ecf4cb736c7af60a6a533db2bf569717f2318b265f92907acff1db43bc34"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:0bd35af6a18b724c689e56f2dbbdd8e409288be71952d271ba3d9614b31d188c"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ec9901d19cadb80d9235ee41cc58983f18660314a0eb3fc7b11b0522ac3b6c4a"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c2b680987f418858e89dbb4f09c8c919ece62811780a27051ace72b2f69fb1be"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:a6584ae58001d17bb4dc0faa8a426919c2c028ef4d90ceb4191802ca6edb8204"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-win32.whl", hash = "sha256:4195604f75cdc1db9bccdb9e44d783add3c817319c30aaff011670c9ed167690"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27m-win_amd64.whl", hash = "sha256:9f713ffb4e27b5575bd917c70bbc3f7b348241a351015dbbc514c01b7061ff7e"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:418f51c61eab52d9920f4ef468d22c89dab1be5ac796f71cf3802f6a6e667df0"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8a98e02cbf8f624add45deff444539bf26345b479fc04fa0937b23cd84078d91"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:dbd2c361db939a4252589baa94da4404d45e3fc70da1a31e541644cdf354336e"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:564063e3782474c92cbb333effd06e6eb718471783c6e67f28c63f0fc3ac7b23"},
-    {file = "pycryptodomex-3.10.1-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:e4a1245e7b846e88ba63e7543483bda61b9acbaee61eadbead5a1ce479d94740"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3b8eb85b3cc7f083d87978c264d10ff9de3b4bfc46f1c6fdc2792e7d7ebc87bb"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:f3bb267df679f70a9f40f17d62d22fe12e8b75e490f41807e7560de4d3e6bf9f"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:04265a7a84ae002001249bd1de2823bcf46832bd4b58f6965567cb8a07cf4f00"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:72f44b5be46faef2a1bf2a85902511b31f4dd7b01ce0c3978e92edb2cc812a82"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:e090a8609e2095aa86978559b140cf8968af99ee54b8791b29ff804838f29f10"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:20c45a30f3389148f94edb77f3b216c677a277942f62a2b81a1cc0b6b2dde7fc"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-win32.whl", hash = "sha256:fc9c55dc1ed57db76595f2d19a479fc1c3a1be2c9da8de798a93d286c5f65f38"},
-    {file = "pycryptodomex-3.10.1-cp35-abi3-win_amd64.whl", hash = "sha256:3dfce70c4e425607ae87b8eae67c9c7dbba59a33b62d70f79417aef0bc5c735b"},
-    {file = "pycryptodomex-3.10.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:940db96449d7b2ebb2c7bf190be1514f3d67914bd37e54e8d30a182bd375a1a9"},
-    {file = "pycryptodomex-3.10.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:d8fae5ba3d34c868ae43614e0bd6fb61114b2687ac3255798791ce075d95aece"},
-    {file = "pycryptodomex-3.10.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:f2abeb4c4ce7584912f4d637b2c57f23720d35dd2892bfeb1b2c84b6fb7a8c88"},
-    {file = "pycryptodomex-3.10.1-pp27-pypy_73-win32.whl", hash = "sha256:36dab7f506948056ceba2d57c1ade74e898401960de697cefc02f3519bd26c1b"},
-    {file = "pycryptodomex-3.10.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37ec1b407ec032c7a0c1fdd2da12813f560bad38ae61ad9c7ce3c0573b3e5e30"},
-    {file = "pycryptodomex-3.10.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:00a584ee52bf5e27d540129ca9bf7c4a7e7447f24ff4a220faa1304ad0c09bcd"},
-    {file = "pycryptodomex-3.10.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:961333e7ee896651f02d4692242aa36b787b8e8e0baa2256717b2b9d55ae0a3c"},
-    {file = "pycryptodomex-3.10.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:2959304d1ce31ab303d9fb5db2b294814278b35154d9b30bf7facc52d6088d0a"},
-    {file = "pycryptodomex-3.10.1.tar.gz", hash = "sha256:541cd3e3e252fb19a7b48f420b798b53483302b7fe4d9954c947605d0a263d62"},
-]
 pydantic = [
-    {file = "pydantic-1.7.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c59ea046aea25be14dc22d69c97bee629e6d48d2b2ecb724d7fe8806bf5f61cd"},
-    {file = "pydantic-1.7.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a4143c8d0c456a093387b96e0f5ee941a950992904d88bc816b4f0e72c9a0009"},
-    {file = "pydantic-1.7.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:d8df4b9090b595511906fa48deda47af04e7d092318bfb291f4d45dfb6bb2127"},
-    {file = "pydantic-1.7.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:514b473d264671a5c672dfb28bdfe1bf1afd390f6b206aa2ec9fed7fc592c48e"},
-    {file = "pydantic-1.7.3-cp36-cp36m-win_amd64.whl", hash = "sha256:dba5c1f0a3aeea5083e75db9660935da90216f8a81b6d68e67f54e135ed5eb23"},
-    {file = "pydantic-1.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:59e45f3b694b05a69032a0d603c32d453a23f0de80844fb14d55ab0c6c78ff2f"},
-    {file = "pydantic-1.7.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:5b24e8a572e4b4c18f614004dda8c9f2c07328cb5b6e314d6e1bbd536cb1a6c1"},
-    {file = "pydantic-1.7.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:b2b054d095b6431cdda2f852a6d2f0fdec77686b305c57961b4c5dd6d863bf3c"},
-    {file = "pydantic-1.7.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:025bf13ce27990acc059d0c5be46f416fc9b293f45363b3d19855165fee1874f"},
-    {file = "pydantic-1.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:6e3874aa7e8babd37b40c4504e3a94cc2023696ced5a0500949f3347664ff8e2"},
-    {file = "pydantic-1.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e682f6442ebe4e50cb5e1cfde7dda6766fb586631c3e5569f6aa1951fd1a76ef"},
-    {file = "pydantic-1.7.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:185e18134bec5ef43351149fe34fda4758e53d05bb8ea4d5928f0720997b79ef"},
-    {file = "pydantic-1.7.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:f5b06f5099e163295b8ff5b1b71132ecf5866cc6e7f586d78d7d3fd6e8084608"},
-    {file = "pydantic-1.7.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:24ca47365be2a5a3cc3f4a26dcc755bcdc9f0036f55dcedbd55663662ba145ec"},
-    {file = "pydantic-1.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:d1fe3f0df8ac0f3a9792666c69a7cd70530f329036426d06b4f899c025aca74e"},
-    {file = "pydantic-1.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f6864844b039805add62ebe8a8c676286340ba0c6d043ae5dea24114b82a319e"},
-    {file = "pydantic-1.7.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:ecb54491f98544c12c66ff3d15e701612fc388161fd455242447083350904730"},
-    {file = "pydantic-1.7.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:ffd180ebd5dd2a9ac0da4e8b995c9c99e7c74c31f985ba090ee01d681b1c4b95"},
-    {file = "pydantic-1.7.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8d72e814c7821125b16f1553124d12faba88e85405b0864328899aceaad7282b"},
-    {file = "pydantic-1.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:475f2fa134cf272d6631072554f845d0630907fce053926ff634cc6bc45bf1af"},
-    {file = "pydantic-1.7.3-py3-none-any.whl", hash = "sha256:38be427ea01a78206bcaf9a56f835784afcba9e5b88fbdce33bbbfbcd7841229"},
-    {file = "pydantic-1.7.3.tar.gz", hash = "sha256:213125b7e9e64713d16d988d10997dabc6a1f73f3991e1ff8e35ebb1409c7dc9"},
+    {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"},
+    {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"},
+    {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"},
+    {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"},
+    {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"},
+    {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"},
+    {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"},
+    {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"},
+    {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"},
+    {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"},
+    {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"},
+    {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"},
+    {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"},
+    {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"},
+    {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"},
+    {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"},
+    {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"},
+    {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"},
+    {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"},
+    {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"},
+    {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"},
+    {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"},
 ]
 pydocstyle = [
     {file = "pydocstyle-5.1.1-py3-none-any.whl", hash = "sha256:aca749e190a01726a4fb472dd4ef23b5c9da7b9205c0a7857c06533de13fd678"},
@@ -2976,36 +2885,6 @@ pyserial = [
     {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"},
     {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"},
 ]
-pysmi = [
-    {file = "pysmi-0.3.4-py2.4.egg", hash = "sha256:13d937620529468d34d525089abbd569f3b34dd808085d34586e63fbbda40fdb"},
-    {file = "pysmi-0.3.4-py2.5.egg", hash = "sha256:887f34233d284a3298f67e2e01db0af8817f358501c724f02175ae53a1f4f106"},
-    {file = "pysmi-0.3.4-py2.6.egg", hash = "sha256:d6688b6121b71f18ca19040bfd27feca5f7a502598de953ec09a8e3f06c36a4e"},
-    {file = "pysmi-0.3.4-py2.7.egg", hash = "sha256:abbd70efb8cf24d6c0bc782c996cd38f0c4905714edf8d03acbaa8ccd9c74eb7"},
-    {file = "pysmi-0.3.4-py2.py3-none-any.whl", hash = "sha256:2ec6ebd41aaef562695e7d0058763c6e1e8c1fbf8710804c11ef3a857fc9cad7"},
-    {file = "pysmi-0.3.4-py3.1.egg", hash = "sha256:ed44154e5d247edfad09bbe24a398cec54b6c393df2fa5103cf59ccf9278855a"},
-    {file = "pysmi-0.3.4-py3.2.egg", hash = "sha256:9d989714a8ad40253b1adbb410067c339b4c77ecd004daa071055e200fe9a798"},
-    {file = "pysmi-0.3.4-py3.3.egg", hash = "sha256:9fb837bb5662b11cce8d44e2dfff8604b97276ff9614aa74d5a33d1cea96d627"},
-    {file = "pysmi-0.3.4-py3.4.egg", hash = "sha256:6e8524b80c6641bb9d81319e54bb0b75f47543e7d3bc7e8f12dcda960d7359c8"},
-    {file = "pysmi-0.3.4-py3.5.egg", hash = "sha256:e4dc8155ccf2b7eaf96aef4b31f7558ce1cf41b3bb27d0cbe341b3c157531088"},
-    {file = "pysmi-0.3.4-py3.6.egg", hash = "sha256:817c572dc8262a4b2ccff34b27e42ee55e48f74be42d22308b637aa236ce1785"},
-    {file = "pysmi-0.3.4-py3.7.egg", hash = "sha256:7203220305bab6a20e2811fca927031440d3b1f9a4a1a5a2a12c033b911dc594"},
-    {file = "pysmi-0.3.4.tar.gz", hash = "sha256:bd15a15020aee8376cab5be264c26330824a8b8164ed0195bd402dd59e4e8f7c"},
-]
-pysnmp = [
-    {file = "pysnmp-4.4.12-py2.4.egg", hash = "sha256:5459b70e849eb4d14bd4c8e475fc67bfa4cd6676fc53aa2f307194319ce77602"},
-    {file = "pysnmp-4.4.12-py2.5.egg", hash = "sha256:13177be8030bbc751d94b1f844cb8d8c2d62844dfd86383576e20f09864427b2"},
-    {file = "pysnmp-4.4.12-py2.6.egg", hash = "sha256:c8d8a403e45a752daefed4635044b137c4390c68ffef54307e2390d8ac9e62e4"},
-    {file = "pysnmp-4.4.12-py2.7.egg", hash = "sha256:3fa5f96a47986658564fa5c4a75b9ea617397729028f2a40b88972139a3e67f7"},
-    {file = "pysnmp-4.4.12-py2.py3-none-any.whl", hash = "sha256:d90946c5d7c55b1ddc03e065a99a2ed36e748dcf166ca04ee4126b8f25fc057a"},
-    {file = "pysnmp-4.4.12-py3.1.egg", hash = "sha256:8019dba728fbb5216645e1c1bd7bccaf25e938243d5dc7e28dbcc6ac029ff8b9"},
-    {file = "pysnmp-4.4.12-py3.2.egg", hash = "sha256:e41b7dbd7e54030dd99a0780728bac3335f4d95c3f28f9b8df827f6075b8ccec"},
-    {file = "pysnmp-4.4.12-py3.3.egg", hash = "sha256:ce2f260a41a107f08264a53c74940e0ad8ae7e35d9e10f33746716ac5c028592"},
-    {file = "pysnmp-4.4.12-py3.4.egg", hash = "sha256:5e48994f48c5800022fff5d380976d88fcd27c17f1635ea4ef1d52796b1acd08"},
-    {file = "pysnmp-4.4.12-py3.5.egg", hash = "sha256:578bb1dab0e67dfc583a61f721a9f6378c51b576ed6a90b229aefd60a9f965f6"},
-    {file = "pysnmp-4.4.12-py3.6.egg", hash = "sha256:89ef66e511a0f770ec9bc7df8bebe6bebb3a3dc3b7394b7d408e42f92f74458b"},
-    {file = "pysnmp-4.4.12-py3.7.egg", hash = "sha256:396b80187e6175481982b83f87d2de28c7068937d6772b5e2679cb56853bf7d7"},
-    {file = "pysnmp-4.4.12.tar.gz", hash = "sha256:0c3dbef2f958caca96071fe5c19de43e9c1b0484ab02a0cf08b190bcee768ba9"},
-]
 pytest = [
     {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
     {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
@@ -3120,20 +2999,29 @@ rich = [
     {file = "ruamel.yaml.clib-0.2.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:73b3d43e04cc4b228fa6fa5d796409ece6fcb53a6c270eb2048109cbcbc3b9c2"},
     {file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:53b9dd1abd70e257a6e32f934ebc482dac5edb8c93e23deb663eac724c30b026"},
     {file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:839dd72545ef7ba78fd2aa1a5dd07b33696adf3e68fae7f31327161c1093001b"},
+    {file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1236df55e0f73cd138c0eca074ee086136c3f16a97c2ac719032c050f7e0622f"},
     {file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-win32.whl", hash = "sha256:b1e981fe1aff1fd11627f531524826a4dcc1f26c726235a52fcb62ded27d150f"},
     {file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4e52c96ca66de04be42ea2278012a2342d89f5e82b4512fb6fb7134e377e2e62"},
     {file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a873e4d4954f865dcb60bdc4914af7eaae48fb56b60ed6daa1d6251c72f5337c"},
     {file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ab845f1f51f7eb750a78937be9f79baea4a42c7960f5a94dde34e69f3cce1988"},
+    {file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2fd336a5c6415c82e2deb40d08c222087febe0aebe520f4d21910629018ab0f3"},
     {file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-win32.whl", hash = "sha256:e9f7d1d8c26a6a12c23421061f9022bb62704e38211fe375c645485f38df34a2"},
     {file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2602e91bd5c1b874d6f93d3086f9830f3e907c543c7672cf293a97c3fabdcd91"},
     {file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:44c7b0498c39f27795224438f1a6be6c5352f82cb887bc33d962c3a3acc00df6"},
     {file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8e8fd0a22c9d92af3a34f91e8a2594eeb35cba90ab643c5e0e643567dc8be43e"},
+    {file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:75f0ee6839532e52a3a53f80ce64925ed4aed697dd3fa890c4c918f3304bd4f4"},
     {file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-win32.whl", hash = "sha256:464e66a04e740d754170be5e740657a3b3b6d2bcc567f0c3437879a6e6087ff6"},
     {file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:52ae5739e4b5d6317b52f5b040b1b6639e8af68a5b8fd606a8b08658fbd0cab5"},
     {file = "ruamel.yaml.clib-0.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df5019e7783d14b79217ad9c56edf1ba7485d614ad5a385d1b3c768635c81c0"},
     {file = "ruamel.yaml.clib-0.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5254af7d8bdf4d5484c089f929cb7f5bafa59b4f01d4f48adda4be41e6d29f99"},
+    {file = "ruamel.yaml.clib-0.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8be05be57dc5c7b4a0b24edcaa2f7275866d9c907725226cdde46da09367d923"},
     {file = "ruamel.yaml.clib-0.2.2-cp38-cp38-win32.whl", hash = "sha256:74161d827407f4db9072011adcfb825b5258a5ccb3d2cd518dd6c9edea9e30f1"},
     {file = "ruamel.yaml.clib-0.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:058a1cc3df2a8aecc12f983a48bda99315cebf55a3b3a5463e37bb599b05727b"},
+    {file = "ruamel.yaml.clib-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6ac7e45367b1317e56f1461719c853fd6825226f45b835df7436bb04031fd8a"},
+    {file = "ruamel.yaml.clib-0.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b4b0d31f2052b3f9f9b5327024dc629a253a83d8649d4734ca7f35b60ec3e9e5"},
+    {file = "ruamel.yaml.clib-0.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1f8c0a4577c0e6c99d208de5c4d3fd8aceed9574bb154d7a2b21c16bb924154c"},
+    {file = "ruamel.yaml.clib-0.2.2-cp39-cp39-win32.whl", hash = "sha256:46d6d20815064e8bb023ea8628cfb7402c0f0e83de2c2227a88097e239a7dffd"},
+    {file = "ruamel.yaml.clib-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6c0a5dc52fc74eb87c67374a4e554d4761fd42a4d01390b7e868b30d21f4b8bb"},
     {file = "ruamel.yaml.clib-0.2.2.tar.gz", hash = "sha256:2d24bd98af676f4990c4d715bcdc2a60b19c56a3fb3a763164d2d8ca0e806ba7"},
 ]
 scp = [
@@ -3270,21 +3158,21 @@ typing-extensions = [
     {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
 ]
 unicon = [
-    {file = "unicon-20.12-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:13fb35f034268874ddd0ae017493b7dd345a82f46f1659192ba5a4cb7900d62d"},
-    {file = "unicon-20.12-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6d116dd6b35a4db306abb2172ef2821ca5439eb612993a66a966558e3c375fe3"},
-    {file = "unicon-20.12-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c3b93cc7780e2462c42ed5ce9a7cb9648b8ff7411b85c5fc8673b250a112934f"},
-    {file = "unicon-20.12-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fc823f989f466c69fb3e7214828292beb4fdd0db5fc226a3b2f18377c0a90fe6"},
-    {file = "unicon-20.12-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c7c1023f0dc99719e44e023a7625add199ca5a43108a967164f4209112a2c5df"},
-    {file = "unicon-20.12-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e96a7ef452fc1947f6f584860d1cd9d8069a4c9c624f6228e5c400ef2de680b"},
-    {file = "unicon-20.12-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:677e3867f15754742ccd49a16dcaddb916019394618b298bb4380a87776fc005"},
-    {file = "unicon-20.12-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:51d88323b1dd65e83842800ac9d774273216bda4c9f513e0903c4ddc1240c3ec"},
-    {file = "unicon-20.12-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:81b451bd4c568a61b5d8afc79b96c82be0ebb1aad124832558cc6ab66b83d30d"},
-    {file = "unicon-20.12-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:38158416387aca289599eb909afc02f5940a8a89b71ed039b81ed547e72e4b07"},
-    {file = "unicon-20.12-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c7c9227e5a7cbd476e6781143ec2357c96e0dc8037476997b960ffccff418a7e"},
-    {file = "unicon-20.12-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0c0b162175c6c0e6c158cb3f62585bcc26172901f4d393895613891948ccc367"},
+    {file = "unicon-21.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:5be62860fc3d16d1e9562aa1a0a233f19d3b71a9dd8a54d7906768816b1670fe"},
+    {file = "unicon-21.4-cp36-cp36m-macosx_10_16_x86_64.whl", hash = "sha256:8c59388c3bea05bc50aec7965f2758d014ae78715765f9d62acf0aee5f23e5ef"},
+    {file = "unicon-21.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:90899b9eb74d5d2ebce5bd3d7e125e6573ea5829fa8b0c4ea076a7531d6a47b2"},
+    {file = "unicon-21.4-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:37c4a790d5743c10845fcbb67d8b11caaf6e25352539b58f8ac5a17b402e0c98"},
+    {file = "unicon-21.4-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:fb4b379faa5aac42a18bf686f6c435e301aab6c3a254ab74fc90184e1b61a15e"},
+    {file = "unicon-21.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:087f2d220d74141a108efa7c4b84d39b52805fe5678c13d0649162549c864296"},
+    {file = "unicon-21.4-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:1c67792fce2364a5cf37ed7bcd9cc538373e3c2f6cee902b2ad7b351cb1969e7"},
+    {file = "unicon-21.4-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:fbf5fc145cf75264d6eb5f9df1a210f95288243b05376e683400dda2aba44bee"},
+    {file = "unicon-21.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:983c27917214186f4f2836b90449cdafbf172416b5d1011974d9d68f92d38981"},
+    {file = "unicon-21.4-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:ebf941cd7a3ab6df41f7e0ae271f300d0c5c90ec66751fc437e444b37f3a6642"},
+    {file = "unicon-21.4-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:bd5520285a0011177638d8f365c21b9f39f9b7d1836d51b27add3858d9f4ffee"},
+    {file = "unicon-21.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:eee593dd32013c9db6c206377488d2eee187c9482c2cf4d024d337cf9d5c4cf3"},
 ]
 "unicon.plugins" = [
-    {file = "unicon.plugins-20.12-py3-none-any.whl", hash = "sha256:663e4b569993cd73b4d3dddbbbefae0b878afaf0461535449b663abef745811b"},
+    {file = "unicon.plugins-21.4-py3-none-any.whl", hash = "sha256:e0e2dc9e1acd43d7ca4d5a2889a55b8c81a819f418086018a87cd8c5443ef62a"},
 ]
 urllib3 = [
     {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"},
diff --git a/pyproject.toml b/pyproject.toml
index e88d0f2d..56e1bb00 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,8 +1,8 @@
 [tool.poetry]
 name = "network-importer"
-version = "2.0.0-beta4"
+version = "2.0.0"
 description = "Network Importer tool to import an existing network into a Database / Source Of Truth"
-authors = ["Network to Code, LLC <info@networktocode.com>"]
+authors = ["Network to Code, LLC <opensource@networktocode.com>"]
 homepage = "https://github.com/networktocode/network-importer"
 repository = "https://github.com/networktocode/network-importer"
 keywords = ["network", "source-of-truth", "netbox", "diffsync"]
@@ -18,17 +18,16 @@ packages = [
 ]
 
 [tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.6.1"
 pynetbox = "^5.0"
 toml = "^0.10"
 nornir = "^3.0"
 termcolor = "^1.1"
 click = "^7.1"
-pydantic = "^1.6.1"
-pybatfish = "~2020.12.23"
-genie = "^20.12"
-pyats = "^20.12"
-netmiko = "^3.3.2"
+pydantic = "^1.6"
+genie = "^21.4"
+pyats = "^21.4"
+netmiko = "^3.3"
 ntc-templates = "^1.6.0"
 structlog = "^20.1.0"
 diffsync = "~1.2.0"
@@ -37,6 +36,7 @@ pynautobot = "^1.0.2"
 nornir-napalm = "^0.1.2"
 nornir-utils = "^0.1.2"
 nornir-netmiko = "^0.1.1"
+pybatfish = "2021.2.26.830"
 
 [tool.poetry.dev-dependencies]
 bandit = "^1.6"
diff --git a/tasks.py b/tasks.py
index 77319375..248d1513 100644
--- a/tasks.py
+++ b/tasks.py
@@ -16,6 +16,8 @@
     "v2.8": {"netbox_version": "v2.8.9", "docker_version": "0.24.1"},
 }
 
+NAUTOBOT_VER = "v1.0.1"
+
 
 def project_ver():
     """Find version from pyproject.toml to use for docker image tagging."""
@@ -58,6 +60,10 @@ def is_truthy(arg):
 TRAVIS_ANSIBLE_PYTHON_INTERPRETER = "$(which python)"
 TRAVIS_EXAMPLES = ["spine_leaf_01", "multi_site_02"]
 TRAVIS_BATFISH_VERSION = "2020.10.08.667"
+TRAVIS_NAUTOBOT_ADDRESS = "http://localhost:8000"
+TRAVIS_NAUTOBOT_TOKEN = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"  # nosec - bandit ignore possible password
+TRAVIS_NAUTOBOT_VERIFY_SSL = "false"
+NAUTOBOT_VERSION = os.getenv("NAUTOBOT_VERSION", "v1.0.1")
 
 
 def run_cmd(context, exec_cmd, name=NAME, image_ver=IMAGE_VER, local=INVOKE_LOCAL):
@@ -316,18 +322,23 @@ def configure_netbox(context, example_name, var_envs):
     context.run(f"cd {PWD}/examples/{example_name} && ansible-playbook pb.netbox_setup.yaml", pty=True, env=var_envs)
 
 
-def run_network_importer(context, example_name, var_envs):
+def run_network_importer(context, example_name, var_envs, config_file="network_importer.toml"):
     """Run Network Importer.
 
     Args:
         context (obj): Used to run specific commands
         example_name (str): Name of the example directory to use
         var_envs (dict): Environment variables to pass to the command runner
+        config_file (str): Name of the configuration file. Optional, defaults to `network_importer.toml`
     """
-    context.run(f"cd {PWD}/examples/{example_name} && network-importer check", pty=True, env=var_envs)
-    context.run(f"cd {PWD}/examples/{example_name} && network-importer apply", pty=True, env=var_envs)
+    context.run(
+        f"cd {PWD}/examples/{example_name} && network-importer check  --config {config_file}", pty=True, env=var_envs
+    )
+    context.run(
+        f"cd {PWD}/examples/{example_name} && network-importer apply --config {config_file}", pty=True, env=var_envs
+    )
     output_last_check = context.run(
-        f"cd {PWD}/examples/{example_name} && network-importer check", pty=True, env=var_envs
+        f"cd {PWD}/examples/{example_name} && network-importer check --config {config_file}", pty=True, env=var_envs
     )
 
     if "no diffs" not in output_last_check.stdout:
@@ -366,6 +377,83 @@ def integration_tests(context, netbox_ver=NETBOX_VERSION):
     )
 
 
+def compose_nautobot(context):
+    """Create Netbox instance for Travis testing.
+
+    Args:
+        context (obj): Used to run specific commands
+        var_envs (dict): Environment variables to pass to the command runner
+        netbox_docker_ver (str): Version of Netbox docker to use
+    """
+    # Copy the file from tests/docker-compose.test.yml to the tmp directory to be executed from there
+    # context.run(
+    #     f"cp {PWD}/tests/nautobot-docker-compose.test.yml /tmp/docker-compose.yml", pty=True, env=var_envs,
+    # )
+    # context.run(
+    #     f"cp {PWD}/tests/nginx.conf /tmp/nginx.conf", pty=True, env=var_envs,
+    # )
+    # context.run(
+    #     f"cp {PWD}/tests/.creds.env.test /tmp/.creds.tests.env", pty=True, env=var_envs,
+    # )
+    # context.run("cd /tmp && docker-compose pull", pty=True, env=var_envs)
+    # context.run("cd /tmp && docker-compose down", pty=True, env=var_envs)
+    # context.run("cd /tmp && docker-compose up -d", pty=True, env=var_envs)
+
+    # Clone the repo so the latest data is present
+    context.run("docker pull networktocode/nautobot-lab:latest ", pty=True)
+
+    # Start the container
+    context.run("docker run -itd --rm --name nautobot -p 8000:8000 networktocode/nautobot-lab:latest", pty=True)
+
+    # Execute the load demo data
+    context.run("sleep 5 && docker exec -it nautobot load-mock-data", pty=True)
+
+    # Print out the ports listening to verify it is running
+    context.run("ss -ltn", pty=True)
+
+
+def configure_nautobot(context, example_name, var_envs):
+    """Configure Netbox instance with Ansible.
+
+    Args:
+        context (obj): Used to run specific commands
+        example_name (str): Name of the example directory to use
+        var_envs (dict): Environment variables to pass to the command runner
+    """
+    # Sleep for a minute to allow all systems to be up and running
+    context.run("sleep 60", pty=True, env=var_envs)
+    context.run(f"cd {PWD}/examples/{example_name} && python3 nautobot_setup.py", pty=True, env=var_envs)
+    # context.run(
+    #     f"cd {PWD}/examples/{example_name} && ansible-playbook pb.nautobot_setup.yaml -vv ", pty=True, env=var_envs
+    # )
+
+
+@task
+def nautobot_integration_tests(context, nautobot_ver=NAUTOBOT_VER):
+    """Builds Nautobot test environment for Travis-CI.
+
+    Args:
+        context (obj): Used to run specific commands
+        nautobot_ver (str): Nautobot version to use for testing
+    """
+    envs = {
+        "VERSION": nautobot_ver,
+        "NAUTOBOT_ADDRESS": TRAVIS_NAUTOBOT_ADDRESS,
+        "NAUTOBOT_TOKEN": TRAVIS_NAUTOBOT_TOKEN,
+        "NAUTOBOT_VERIFY_SSL": TRAVIS_NAUTOBOT_VERIFY_SSL,
+        "BATFISH_ADDRESS": TRAVIS_BATFISH_ADDRESS,
+        "ANSIBLE_PYTHON_INTERPRETER": TRAVIS_ANSIBLE_PYTHON_INTERPRETER,
+    }
+
+    compose_nautobot(context)
+    compose_batfish(context, var_envs=envs)
+    time.sleep(90)
+    for example in TRAVIS_EXAMPLES:
+        configure_nautobot(context, example, var_envs=envs)
+        run_network_importer(context, example, var_envs=envs, config_file="network_importer_nautobot.toml")
+    print(f"All integration tests have passed for Nautobot {nautobot_ver}")
+
+
 @task
 def tests(context, name=NAME, image_ver=IMAGE_VER, local=INVOKE_LOCAL):
     """This will run all tests for the specified name and Python version.


Test patch:
diff --git a/tests/.creds.env.test b/tests/.creds.env.test
new file mode 100644
index 00000000..3fdf2ea8
--- /dev/null
+++ b/tests/.creds.env.test
@@ -0,0 +1,28 @@
+NAUTOBOT_ALLOWED_HOSTS=*
+NAUTOBOT_CHANGELOG_RETENTION=0
+NAUTOBOT_CONFIG=/opt/nautobot/nautobot_config.py
+NAUTOBOT_DB_HOST=postgres
+NAUTOBOT_DB_NAME=nautobot
+NAUTOBOT_DB_PASSWORD=insecure_password
+NAUTOBOT_DB_USER=nautobot
+NAUTOBOT_MAX_PAGE_SIZE=0
+NAUTOBOT_NAPALM_TIMEOUT=5
+NAUTOBOT_REDIS_HOST=redis-queue
+NAUTOBOT_REDIS_PASSWORD=insecure_password
+NAUTOBOT_CACHEOPS_REDIS=redis://:insecure_password@redis-cacheops:6379/0
+NAUTOBOT_REDIS_PORT=6379
+# Uncomment REDIS_SSL if using SSL
+# NAUTOBOT_REDIS_SSL=True
+NAUTOBOT_SECRET_KEY=012345678901234567890123456789012345678901234567890123456789
+# Needed for Postgres should match the values for Nautobot above
+PGPASSWORD=insecure_password
+POSTGRES_DB=nautobot
+POSTGRES_PASSWORD=insecure_password
+POSTGRES_USER=nautobot
+# Needed for Redis should match the values for Nautobot above
+NAUTOBOT_HIDE_RESTRICTED_UI=True
+NAUTOBOT_CREATE_SUPERUSER=true
+NAUTOBOT_SUPERUSER_NAME=admin
+NAUTOBOT_SUPERUSER_EMAIL=admin@example.com
+NAUTOBOT_SUPERUSER_PASSWORD=admin
+NAUTOBOT_SUPERUSER_API_TOKEN=0123456789abcdef0123456789abcdef01234567
\ No newline at end of file
diff --git a/tests/ansible.cfg b/tests/ansible.cfg
new file mode 100644
index 00000000..73bfc1c7
--- /dev/null
+++ b/tests/ansible.cfg
@@ -0,0 +1,2 @@
+[defaults]
+forks=1
\ No newline at end of file
diff --git a/tests/nautobot-docker-compose.test.yml b/tests/nautobot-docker-compose.test.yml
new file mode 100644
index 00000000..ed59e193
--- /dev/null
+++ b/tests/nautobot-docker-compose.test.yml
@@ -0,0 +1,47 @@
+---
+version: "3.7"
+services:
+  nginx:
+    image: "nginx:1.19"
+    ports:
+      - "8000:8080"  # Configured in F5 Load balancer to foward to port 8080 over HTTPS
+    volumes:
+      - "./nginx.conf:/etc/nginx/nginx.conf"
+  nautobot:
+    image: "networktocode/nautobot:${NAUTOBOT_VERSION}"
+    ports:
+      - "8443:8443"
+      - "8080:8080"
+    env_file:
+      - "/tmp/.creds.tests.env"
+  nautobot-worker:
+    image: "networktocode/nautobot:${NAUTOBOT_VERSION}"
+    entrypoint: "nautobot-server rqworker"
+    depends_on:
+      - "nautobot"
+    env_file:
+      - "/tmp/.creds.tests.env"
+  redis-cacheops:
+    image: "redis:alpine"
+    command:
+      - "sh"
+      - "-c"  # this is to evaluate the $REDIS_PASSWORD from the env
+      - "redis-server --appendonly yes --requirepass $$NAUTOBOT_REDIS_PASSWORD"  ## $$ because of docker-compose
+    env_file:
+      - "/tmp/.creds.tests.env"
+  redis-queue:
+    image: "redis:alpine"
+    command:
+      - "sh"
+      - "-c"  # this is to evaluate the $REDIS_PASSWORD from the env
+      - "redis-server --appendonly yes --requirepass $$NAUTOBOT_REDIS_PASSWORD"  ## $$ because of docker-compose
+    env_file:
+      - "/tmp/.creds.tests.env"
+  postgres:
+    image: "postgres:10"
+    volumes:
+      - "postgres_data:/var/lib/postgresql/data"
+    env_file:
+      - "/tmp/.creds.tests.env"
+volumes:
+  postgres_data:
diff --git a/tests/nginx.conf b/tests/nginx.conf
new file mode 100644
index 00000000..f9e55dec
--- /dev/null
+++ b/tests/nginx.conf
@@ -0,0 +1,19 @@
+events {
+    worker_connections 1024;
+}
+
+http {
+    resolver 127.0.0.11;
+
+    server {
+        listen              8080;
+        access_log  off;
+        location / {
+            proxy_pass http://nautobot:8080;
+            proxy_set_header X-Forwarded-Host $http_host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-Proto $scheme;
+            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/unit/adapters/nautobot_api/models/test_nautobot_ipaddress.py b/tests/unit/adapters/nautobot_api/models/test_nautobot_ipaddress.py
index 3e246ec7..d8fd7e60 100644
--- a/tests/unit/adapters/nautobot_api/models/test_nautobot_ipaddress.py
+++ b/tests/unit/adapters/nautobot_api/models/test_nautobot_ipaddress.py
@@ -4,7 +4,6 @@
 import pynautobot
 
 from network_importer.adapters.nautobot_api.models import NautobotIPAddress
-import network_importer.config as config
 
 ROOT = os.path.abspath(os.path.dirname(__file__))
 
@@ -46,7 +45,6 @@ def test_translate_attrs_for_nautobot_wo_intf(nautobot_api_base):
 
 
 def test_create_from_pynautobot(nautobot_api_base):
-    config.load(config_data=dict())
     api = pynautobot.api(url="http://mock", token="1234567890")
     data = yaml.safe_load(open(f"{ROOT}/../fixtures/ip_address.json"))
     pnb = pynautobot.core.response.Record(values=data, api=api, endpoint=1)
diff --git a/tests/unit/adapters/nautobot_api/models/test_nautobot_vlan.py b/tests/unit/adapters/nautobot_api/models/test_nautobot_vlan.py
index b5e469e0..35fc319f 100644
--- a/tests/unit/adapters/nautobot_api/models/test_nautobot_vlan.py
+++ b/tests/unit/adapters/nautobot_api/models/test_nautobot_vlan.py
@@ -5,14 +5,12 @@
 import pytest
 import yaml
 from diffsync.exceptions import ObjectNotFound
-import network_importer.config as config
 from network_importer.adapters.nautobot_api.models import NautobotDevice, NautobotVlan
 
 ROOT = os.path.abspath(os.path.dirname(__file__))
 
 
 def test_vlan_create_from_pynautobot(nautobot_api_base):
-    config.load(config_data=dict())
     api = pynautobot.api(url="http://mock_nautobot", token="1234567890")
 
     data = yaml.safe_load(open(f"{ROOT}/../fixtures/vlan_101_no_tag.json"))