From 4b43f2e760ff4379cdc525c1f3cef4caf94e29ef Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Thu, 16 Feb 2023 16:12:58 -0500 Subject: [PATCH 01/37] Clarify when Python 3.6 support was dropped (#213) --- docs/admin/release_notes/version_1.3.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/admin/release_notes/version_1.3.md b/docs/admin/release_notes/version_1.3.md index ba891d81..e527abb5 100644 --- a/docs/admin/release_notes/version_1.3.md +++ b/docs/admin/release_notes/version_1.3.md @@ -7,6 +7,7 @@ - Added first getter feature with Napalm Getter feature. - Converted to mkdocs docs. - Added Citrix NetScaler Parser. +- Removed support for Python 3.6. ## [v1.3.0] - 2022-11 @@ -22,4 +23,8 @@ - [#152](https://github.com/networktocode/netutils/pull/152) Converted to mkdocs docs. - [#154](https://github.com/networktocode/netutils/pull/154) Update testing mock strategy for config parsers. - [#155](https://github.com/networktocode/netutils/pull/155) Update links to render properly on rtd and pypi. -- [#159](https://github.com/networktocode/netutils/pull/159) Change how dunder version is created. \ No newline at end of file +- [#159](https://github.com/networktocode/netutils/pull/159) Change how dunder version is created. + +### Removed + +- [#152](https://github.com/networktocode/netutils/pull/152) Removed support for Python 3.6. From 1a51547a790e432b17d7ba9328b233683eb64734 Mon Sep 17 00:00:00 2001 From: Adam Byczkowski <38091261+qduk@users.noreply.github.com> Date: Thu, 16 Feb 2023 15:32:04 -0600 Subject: [PATCH 02/37] Moved where deletion of branch took place in workflow (#217) Co-authored-by: Adam Byczkowski --- .github/workflows/oui_filepull.yml | 5 +++-- .github/workflows/proto_filepull.yml | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/oui_filepull.yml b/.github/workflows/oui_filepull.yml index fb77c97c..6d178e08 100644 --- a/.github/workflows/oui_filepull.yml +++ b/.github/workflows/oui_filepull.yml @@ -11,13 +11,14 @@ jobs: env: BRANCH_NAME: "OUI_Updates" steps: - - name: "Delete existing branch" - run: "git branch -D $BRANCH_NAME || true" # Checkout repo - name: "Check out code" uses: "actions/checkout@v2" with: ref: "develop" + # Delete old branch if it exists + - name: "Delete existing branch" + run: "git branch -D $BRANCH_NAME || true" # Create branch for Flatbot - name: "Create Flatbot branch" run: "git checkout -b $BRANCH_NAME" diff --git a/.github/workflows/proto_filepull.yml b/.github/workflows/proto_filepull.yml index 587afff7..4611e14e 100644 --- a/.github/workflows/proto_filepull.yml +++ b/.github/workflows/proto_filepull.yml @@ -16,6 +16,9 @@ jobs: uses: "actions/checkout@v2" with: ref: "develop" + # Delete old branch if it exists + - name: "Delete existing branch" + run: "git branch -D $BRANCH_NAME || true" # Create branch for Flatbot - name: "Create Flatbot branch" run: "git checkout -b $BRANCH_NAME" From 79547d905f987a6940c95ed1d34ccc185acf2ae9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Mar 2023 15:04:14 -0600 Subject: [PATCH 03/37] Flat: latest data (2023-02-28T17:20:54.153Z) (#226) { "date": "2023-02-28T17:20:54.153Z", "files": [ { "name": "netutils/data_files/protocol_mappings.py", "deltaBytes": 122, "source": "https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv" } ] } Co-authored-by: flat-data --- netutils/data_files/protocol_mappings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netutils/data_files/protocol_mappings.py b/netutils/data_files/protocol_mappings.py index f8d27f65..573047aa 100644 --- a/netutils/data_files/protocol_mappings.py +++ b/netutils/data_files/protocol_mappings.py @@ -719,6 +719,8 @@ "xact-backup": {"port_number": 911, "protocols": ["tcp", "udp"]}, "apex-mesh": {"port_number": 912, "protocols": ["tcp", "udp"]}, "apex-edge": {"port_number": 913, "protocols": ["tcp", "udp"]}, + "rift-lies": {"port_number": 914, "protocols": ["udp"]}, + "rift-ties": {"port_number": 915, "protocols": ["udp"]}, "rndc": {"port_number": 953, "protocols": ["tcp"]}, "ftps-data": {"port_number": 989, "protocols": ["tcp", "udp"]}, "ftps": {"port_number": 990, "protocols": ["tcp", "udp"]}, From 333c1d1a79a5c9a7bfd6c7c24005cabd1dc29262 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Mar 2023 15:05:52 -0600 Subject: [PATCH 04/37] Flat: latest data (2023-02-28T17:16:15.324Z) (#225) { "date": "2023-02-28T17:16:15.324Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 3762, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 96 ++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 3 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 0d080bc1..959ad9d6 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -11288,7 +11288,7 @@ "0080b5": "UNITED NETWORKS INC.", "0080b6": "Mercury Systems – Trusted Mission Solutions, Inc. ", "0080b7": "STELLAR COMPUTER", - "0080b8": "DMG MORI B.U.G. CO., LTD.", + "0080b8": "DMG MORI Digital Co., LTD", "0080b9": "ARCHE TECHNOLIGIES INC.", "0080ba": "PTE, LTD", "0080bb": "HUGHES LAN SYSTEMS", @@ -13470,6 +13470,7 @@ "0830ce": "Fiberhome Telecommunication Technologies Co.,LTD", "08318b": "HUAWEI TECHNOLOGIES CO.,LTD", "0831a4": "Huawei Device Co., Ltd.", + "0833ed": "ASKEY COMPUTER CORP", "08351b": "Shenzhen Jialihua Electronic Technology Co., Ltd", "083571": "CASwell INC.", "0835b2": "CoreEdge Networks Co., Ltd", @@ -13710,6 +13711,7 @@ "08f7e9": "HRCP Research and Development Partnership", "08f80d": "IEEE Registration Authority", "08f8bc": "Apple, Inc.", + "08f9e0": "Espressif Inc.", "08fa28": "HUAWEI TECHNOLOGIES CO.,LTD", "08fa79": "vivo Mobile Communication Co., Ltd.", "08fae0": "Fohhn Audio AG", @@ -13754,6 +13756,7 @@ "0c2576": "LONGCHEER TELECOMMUNICATION LIMITED", "0c2724": "Cisco Systems, Inc", "0c2755": "Valuable Techologies Limited", + "0c298f": "Tesla,Inc.", "0c29ef": "Dell Inc.", "0c2a69": "electric imp, incorporated", "0c2a86": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -14058,6 +14061,8 @@ "1012fb": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "101331": "Technicolor Delivery Technologies Belgium NV", "1013ee": "Justec International Technology INC.", + "1015c1": "Technology Co., Ltd.", + "101849": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", "10189e": "Elmo Motion Control", "101965": "New H3C Technologies Co., Ltd", "101b54": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -14387,6 +14392,7 @@ "14169d": "Cisco Systems, Inc", "14169e": "Wingtech Group (HongKong)Limited", "14172a": "Fiberhome Telecommunication Technologies Co.,LTD", + "141844": "Xenon Smart Teknoloji Ltd.", "141877": "Dell Inc.", "1418c3": "Intel Corporate", "141973": "Beijing Yunyi Times Technology Co.,Ltd", @@ -14415,6 +14421,7 @@ "142bd6": "Guangdong Appscomm Co.,Ltd", "142c78": "GooWi Wireless Technology Co., Limited", "142d27": "Hon Hai Precision Ind. Co.,Ltd.", + "142d41": "Silicon Laboratories", "142d4d": "Apple, Inc.", "142d79": "Fiberhome Telecommunication Technologies Co.,LTD", "142d8b": "Incipio Technologies, Inc", @@ -15543,6 +15550,7 @@ "20b730": "TeconGroup, Inc", "20b780": "Toshiba Visual Solutions Corporation Co.,Ltd", "20b7c0": "OMICRON electronics GmbH", + "20b82b": "Sagemcom Broadband SAS", "20b868": "Motorola Mobility LLC, a Lenovo Company", "20ba36": "u-blox AG", "20bb76": "COL GIOVANNI PAOLO SpA", @@ -15592,6 +15600,7 @@ "20e09c": "Nokia", "20e2a8": "Apple, Inc.", "20e407": "Spark srl", + "20e46f": "vivo Mobile Communication Co., Ltd.", "20e52a": "NETGEAR", "20e564": "ARRIS Group, Inc.", "20e6df": "eero inc.", @@ -15761,6 +15770,7 @@ "2469a5": "HUAWEI TECHNOLOGIES CO.,LTD", "246aab": "IT-IS International", "246c60": "Huawei Device Co., Ltd.", + "246c84": "Cisco Systems, Inc", "246c8a": "YUKAI Engineering", "246e96": "Dell Inc.", "246f28": "Espressif Inc.", @@ -15850,7 +15860,7 @@ "24bcf8": "HUAWEI TECHNOLOGIES CO.,LTD", "24be05": "Hewlett Packard", "24be18": "DADOUTEK COMPANY LIMITED", - "24bf74": "Private", + "24bf74": "Hamamatsu Photonics K.K.", "24c0b3": "RSF", "24c17a": "BEIJING IACTIVE NETWORK CO.,LTD", "24c1bd": "CRRC DALIAN R&D CO.,LTD.", @@ -15890,6 +15900,7 @@ "24dbad": "ShopperTrak RCT Corporation", "24dbed": "Samsung Electronics Co.,Ltd", "24dc0f": "Phytium Technology Co.,Ltd.", + "24dcc3": "Espressif Inc.", "24dec6": "Aruba, a Hewlett Packard Enterprise Company", "24df6a": "HUAWEI TECHNOLOGIES CO.,LTD", "24dfa7": "Hangzhou BroadLink Technology Co.,Ltd", @@ -16069,6 +16080,7 @@ "287184": "Spire Payments", "2872c5": "Smartmatic Corp", "2872f0": "ATHENA", + "2873f6": "Amazon Technologies Inc.", "2874f5": "Nokia Solutions and Networks GmbH & Co. KG", "2875d8": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "287610": "IgniteNet", @@ -16610,6 +16622,7 @@ "301a30": "Mako Networks Ltd", "301aba": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "301b97": "Lierda Science & Technology Group Co.,Ltd", + "301d49": "Firmus Technologies Pty Ltd", "301f48": "zte corporation", "301f9a": "IEEE Registration Authority", "30215b": "Shenzhen Ostar Display Electronic Co.,Ltd", @@ -16783,6 +16796,7 @@ "30b1b5": "Arcadyan Corporation", "30b216": "Hitachi Energy Germany AG", "30b237": "GD Midea Air-Conditioning Equipment Co.,Ltd.", + "30b29f": "EVIDENT CORPORATION", "30b346": "CJSC NORSI-TRANS", "30b3a2": "Shenzhen Heguang Measurement & Control Technology Co.,Ltd", "30b49e": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -17151,6 +17165,7 @@ "34dac1": "Co., Ltd.", "34db9c": "Sagemcom Broadband SAS", "34dbfd": "Cisco Systems, Inc", + "34dc99": "New H3C Technologies Co., Ltd", "34dd04": "Minut AB", "34dd7e": "Umeox Innovations Co.,Ltd", "34de1a": "Intel Corporate", @@ -17587,6 +17602,7 @@ "3c2c99": "Edgecore Networks Corporation", "3c2ca6": "Beijing Xiaomi Electronics Co.,Ltd", "3c2db7": "Texas Instruments", + "3c2ef5": "Silicon Laboratories", "3c2ef9": "Apple, Inc.", "3c2eff": "Apple, Inc.", "3c2f3a": "SFORZATO Corp.", @@ -17807,6 +17823,7 @@ "3cdf1e": "Cisco Systems, Inc", "3cdfa9": "ARRIS Group, Inc.", "3cdfbd": "HUAWEI TECHNOLOGIES CO.,LTD", + "3ce002": "Texas Instruments", "3ce038": "Omnifi Inc.", "3ce064": "Texas Instruments", "3ce072": "Apple, Inc.", @@ -17825,6 +17842,7 @@ "3ceaf9": "JUBIXCOLTD", "3ceafb": "NSE AG", "3cecef": "Super Micro Computer, Inc.", + "3cef42": "TCT mobile ltd", "3cef8c": "Zhejiang Dahua Technology Co., Ltd.", "3cf011": "Intel Corporate", "3cf392": "Virtualtek. Co. Ltd", @@ -18165,6 +18183,7 @@ "440377": "IEEE Registration Authority", "4403a7": "Cisco Systems, Inc", "440444": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", + "44053f": "Sagemcom Broadband SAS", "4405e8": "twareLAB", "44070b": "Google, Inc.", "4409b8": "CO., LTD.", @@ -18529,6 +18548,7 @@ "482f6b": "Aruba, a Hewlett Packard Enterprise Company", "482fd7": "HUAWEI TECHNOLOGIES CO.,LTD", "483177": "Nintendo Co.,Ltd", + "4831b7": "Espressif Inc.", "4831db": "Huawei Device Co., Ltd.", "4833dd": "ZENNIO AVANCE Y TECNOLOGIA, S.L.", "48343d": "IEP GmbH", @@ -18550,6 +18570,7 @@ "484487": "Cisco SPVTG", "4844f7": "Samsung Electronics Co.,Ltd", "484520": "Intel Corporate", + "4845cf": "LLC Proizvodstvennaya Kompania TransService", "48468d": "Zepcam B.V.", "4846c1": "FN-LINK TECHNOLOGY LIMITED", "4846f1": "Uros Oy", @@ -18657,6 +18678,7 @@ "489153": "Weinmann Geräte für Medizin GmbH + Co. KG", "4891d5": "Cisco Systems, Inc", "4891f6": "Shenzhen Reach software technology CO.,LTD", + "4893dc": "UNIWAY INFOCOM PVT LTD", "489507": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "4898ca": "Sichuan AI-Link Technology Co., Ltd.", "489a42": "Technomate Ltd", @@ -19048,6 +19070,7 @@ "4cd0cb": "HUAWEI TECHNOLOGIES CO.,LTD", "4cd0dd": "HUAWEI TECHNOLOGIES CO.,LTD", "4cd1a1": "HUAWEI TECHNOLOGIES CO.,LTD", + "4cd2fb": "UNIONMAN TECHNOLOGY CO.,LTD", "4cd3af": "HMD Global Oy", "4cd577": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "4cd629": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -19076,6 +19099,7 @@ "4ceb42": "Intel Corporate", "4cebbd": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "4cebd6": "Espressif Inc.", + "4cec0f": "Cisco Systems, Inc", "4cecef": "Soraa, Inc.", "4cedde": "ASKEY COMPUTER CORP", "4cedfb": "ASUSTek COMPUTER INC.", @@ -19401,6 +19425,7 @@ "50e0ef": "Nokia", "50e14a": "Private", "50e24e": "zte corporation", + "50e538": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "50e549": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "50e636": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "50e666": "Shenzhen Techtion Electronics Co., Ltd.", @@ -19505,6 +19530,7 @@ "542f8a": "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO ", "543131": "Raster Vision Ltd", "5431d4": "TGW Mechanics GmbH", + "543204": "Espressif Inc.", "5432c7": "Apple, Inc.", "5433cb": "Apple, Inc.", "5434ef": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -19732,6 +19758,7 @@ "54f6e2": "HUAWEI TECHNOLOGIES CO.,LTD", "54f82a": "u-blox AG", "54f876": "ABB AG", + "54f8f0": "Tesla Inc", "54fa3e": "Samsung Electronics Co.,Ltd", "54fa96": "Nokia Solutions and Networks GmbH & Co. KG", "54fb58": "WISEWARE, Lda", @@ -19802,6 +19829,7 @@ "58404e": "Apple, Inc.", "584120": "TP-LINK TECHNOLOGIES CO.,LTD.", "5842e4": "Baxter International Inc", + "5843ab": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "584498": "Xiaomi Communications Co Ltd", "58454c": "Ericsson AB", "58468f": "Koncar Electronics and Informatics", @@ -19825,6 +19853,7 @@ "5853c0": "Beijing Guang Runtong Technology Development Company co.,Ltd", "585595": "Apple, Inc.", "5855ca": "Apple, Inc.", + "58569f": "Cisco Systems, Inc", "5856c2": "HUAWEI TECHNOLOGIES CO.,LTD", "5856e8": "ARRIS Group, Inc.", "58570d": "Danfoss Solar Inverters", @@ -19956,6 +19985,7 @@ "58c876": "Information Technology Co., Ltd.", "58c935": "Chiun Mai Communication System, Inc", "58cb52": "Google, Inc.", + "58cdc9": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "58ce2a": "Intel Corporate", "58cf4b": "Lufkin Industries", "58cf79": "Espressif Inc.", @@ -20062,6 +20092,7 @@ "5c2623": "WaveLynx Technologies Corporation", "5c2763": "Itibia Technologies", "5c27d4": "Shenzhen Qihu Intelligent Technology Company Limited", + "5c2886": "Corporation", "5c2aef": "r2p Asia-Pacific Pty Ltd", "5c2bf5": "Vivint Wireless Inc. ", "5c2e59": "Samsung Electronics Co.,Ltd", @@ -20295,11 +20326,13 @@ "5ce3b6": "Fiberhome Telecommunication Technologies Co.,LTD", "5ce42a": "Intel Corporate", "5ce50c": "Beijing Xiaomi Mobile Software Co., Ltd", + "5ce688": "VECOS Europe B.V.", "5ce747": "HUAWEI TECHNOLOGIES CO.,LTD", "5ce7a0": "Nokia", "5ce7bf": "New Singularity International Technical Development Co.,Ltd", "5ce883": "HUAWEI TECHNOLOGIES CO.,LTD", "5ce8b7": "Oraimo Technology Limited", + "5ce8d3": "Signalinks Communication Technology Co., Ltd", "5ce8eb": "Samsung Electronics Co.,Ltd", "5ce91e": "Apple, Inc.", "5cea1d": "Hon Hai Precision Ind. Co.,Ltd.", @@ -20516,6 +20549,7 @@ "609217": "Apple, Inc.", "6092f5": "ARRIS Group, Inc.", "609316": "Apple, Inc.", + "609532": "Zebra Technologies Inc.", "6095bd": "Apple, Inc.", "6095ce": "IEEE Registration Authority", "609620": "Private", @@ -20611,6 +20645,7 @@ "60db15": "New H3C Technologies Co., Ltd", "60db2a": "HNS", "60db98": "Calix Inc.", + "60dc81": "AltoBeam Inc.", "60dd70": "Apple, Inc.", "60dd8e": "Intel Corporate", "60de35": "GITSN, Inc.", @@ -20699,6 +20734,7 @@ "641759": "Intellivision Holdings, LLC", "641a22": "Heliospectra AB", "641aba": "Dryad Networks GmbH", + "641c10": "Texas Instruments", "641c67": "DIGIBRAS INDUSTRIA DO BRASILS/A", "641cae": "Samsung Electronics Co.,Ltd", "641cb0": "Samsung Electronics Co.,Ltd", @@ -21005,6 +21041,7 @@ "6818d9": "Hill AFB - CAPRE Group", "68193f": "Digital Airways", "6819ac": "Guangzhou Xianyou Intelligent Technogoly CO., LTD", + "681a7c": "Sichuan Tianyi Comheart Telecom Co.,LTD", "681aa4": "Shenzhen Skyworth Digital Technology CO., Ltd", "681ab2": "zte corporation", "681bef": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -21331,6 +21368,7 @@ "6c2995": "Intel Corporate", "6c29d2": "Cisco Systems, Inc", "6c2acb": "Paxton Access Ltd", + "6c2adf": "IEEE Registration Authority", "6c2b59": "Dell Inc.", "6c2c06": "OOO NPP Systemotechnika-NN", "6c2cdc": "Co.,Ltd", @@ -22025,6 +22063,7 @@ "744687": "Kingsignal Technology Co., Ltd.", "7446a0": "Hewlett Packard", "7446b3": "Texas Instruments", + "7449d2": "New H3C Technologies Co., Ltd", "744aa4": "zte corporation", "744be9": "EXPLORER HYPERTECH CO.,LTD", "744ca1": "Liteon Technology Corporation", @@ -22036,6 +22075,7 @@ "745327": "COMMSEN CO., LIMITED", "7453a8": "ACL Airshop BV", "745427": "SHENZHEN FAST TECHNOLOGIES CO.,LTD", + "74546b": "hangzhou zhiyi communication co., ltd", "74547d": "Cisco SPVTG", "745612": "ARRIS Group, Inc.", "74563c": "GIGA-BYTE TECHNOLOGY CO.,LTD.", @@ -22159,6 +22199,7 @@ "74a4a7": "QRS Music Technologies, Inc.", "74a4b5": "Powerleader Science and Technology Co. Ltd.", "74a528": "HUAWEI TECHNOLOGIES CO.,LTD", + "74a58c": "Texas Instruments", "74a6cd": "Apple, Inc.", "74a78e": "zte corporation", "74a7ea": "Amazon Technologies Inc.", @@ -23151,6 +23192,7 @@ "807de3": "Chongqing Sichuan Instrument Microcircuit Co.LTD.", "807eb4": "Shenzhen SuperElectron Technology Co.,Ltd.", "807ff8": "Juniper Networks", + "80802c": "Fortinet, Inc.", "8081a5": "Co.,Ltd", "808223": "Apple, Inc.", "808287": "ATCOM Technology Co.Ltd.", @@ -23372,6 +23414,7 @@ "843b10": "LVSWITCHES INC.", "843c4c": "Robert Bosch SRL", "843dc6": "Cisco Systems, Inc", + "843e1d": "Hui Zhou Gaoshengda Technology Co.,LTD", "843e79": "Shenzhen Belon Technology CO.,LTD", "843e92": "HUAWEI TECHNOLOGIES CO.,LTD", "843f4e": "Tri-Tech Manufacturing, Inc.", @@ -23424,6 +23467,7 @@ "847127": "Silicon Laboratories", "84716a": "Huawei Device Co., Ltd.", "847207": "I&C Technology", + "847293": "Texas Instruments", "847303": "Corporation Ltd.", "84742a": "zte corporation", "847460": "zte corporation", @@ -23593,6 +23637,7 @@ "84f117": "Newseason", "84f129": "Metrascale Inc.", "84f147": "Cisco Systems, Inc", + "84f175": "Jiangxi Xunte Intelligent Terminal Co., Ltd", "84f1d0": "EHOOME IOT PRIVATE LIMITED", "84f3eb": "Espressif Inc.", "84f44c": "International Integrated Systems., Inc.", @@ -23663,6 +23708,7 @@ "882bd7": "ADDÉNERGIE TECHNOLOGIES", "882d53": "Co., Ltd.", "882e5a": "storONE", + "883037": "Juniper Networks", "88308a": "Murata Manufacturing Co., Ltd.", "883314": "Texas Instruments", "8833be": "Ivenix, Inc.", @@ -23678,6 +23724,7 @@ "883c93": "Alcatel-Lucent Enterprise", "883d24": "Google, Inc.", "883f0c": "system a.v. co., ltd.", + "883f37": "UHTEK CO., LTD.", "883f4a": "Texas Instruments", "883f99": "Siemens AG", "883fd3": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23923,6 +23970,7 @@ "88fd15": "LINEEYE CO., LTD", "88fed6": "ShangHai WangYong Software Co., Ltd.", "8c006d": "Apple, Inc.", + "8c02cd": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "8c02fa": "COMMANDO Networks Limited", "8c04ba": "Dell Inc.", "8c04ff": "Technicolor CH USA Inc.", @@ -24192,6 +24240,7 @@ "8cde99": "Comlab Inc.", "8cdee6": "Samsung Electronics Co.,Ltd", "8cdef9": "Beijing Xiaomi Mobile Software Co., Ltd", + "8cdf2c": "vivo Mobile Communication Co., Ltd.", "8cdf9d": "NEC Corporation", "8ce042": "vivo Mobile Communication Co., Ltd.", "8ce081": "zte corporation", @@ -24212,9 +24261,11 @@ "8cec4b": "Dell Inc.", "8cec7b": "Apple, Inc.", "8ceec6": "Precepscion Pty. Ltd.", + "8ceefd": "zte corporation", "8cf112": "Motorola Mobility LLC, a Lenovo Company", "8cf228": "MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", "8cf319": "Siemens Industrial Automation Products Ltd., Chengdu", + "8cf3e7": "solidotech", "8cf681": "Silicon Laboratories", "8cf710": "AMPAK Technology, Inc.", "8cf773": "Nokia", @@ -24245,6 +24296,7 @@ "900372": "Longnan Junya Digital Technology Co. Ltd. ", "9003b7": "PARROT SA", "900628": "Samsung Electronics Co.,Ltd", + "9006f2": "Texas Instruments", "900917": "Far-sighted mobile", "9009d0": "Synology Incorporated", "9009df": "Intel Corporate", @@ -24316,6 +24368,7 @@ "903a72": "Ruckus Wireless", "903aa0": "Nokia", "903ae6": "PARROT SA", + "903c1d": "HISENSE VISUAL TECHNOLOGY CO.,LTD", "903c92": "Apple, Inc.", "903cae": "Yunnan KSEC Digital Technology Co.,Ltd.", "903cb3": "Edgecore Networks Corporation", @@ -24379,6 +24432,7 @@ "906aeb": "Microsoft Corporation", "906cac": "Fortinet, Inc.", "906d05": "BXB ELECTRONICS CO., LTD", + "906d62": "Cambium Networks Limited", "906dc8": "DLG Automação Industrial Ltda", "906ebb": "Hon Hai Precision Ind. Co.,Ltd.", "906f18": "Private", @@ -24541,6 +24595,7 @@ "90e95e": "Cisco Systems, Inc", "90ea60": "SPI Lasers Ltd ", "90eb48": "Shanghai XinMiaoLink Technology Co., Ltd", + "90eb50": "Cisco Systems, Inc", "90ec50": "C.O.B.O. SPA", "90ec77": "silicom", "90ecea": "Apple, Inc.", @@ -24903,6 +24958,7 @@ "9801a7": "Apple, Inc.", "980284": "Theobroma Systems GmbH", "9802d8": "IEEE Registration Authority", + "98038a": "Texas Instruments", "98039b": "Mellanox Technologies, Inc.", "9803a0": "ABB n.v. Power Quality Products", "9803d8": "Apple, Inc.", @@ -25637,6 +25693,7 @@ "a0648f": "ASKEY COMPUTER CORP", "a06518": "VNPT TECHNOLOGY", "a06610": "FUJITSU LIMITED", + "a06636": "Intracom SA Telecom Solutions", "a06720": "China Dragon Technology Limited", "a067be": "Sicon srl", "a0681c": "GD Midea Air-Conditioning Equipment Co.,Ltd.", @@ -26208,6 +26265,7 @@ "a825eb": "Co.,Ltd.", "a826d9": "HTC Corporation", "a8294c": "Precision Optical Transceivers, Inc.", + "a82ad6": "Arthrex Inc.", "a82bb5": "Edgecore Networks Corporation", "a82bb9": "Samsung Electronics Co.,Ltd", "a82bcd": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -26461,6 +26519,7 @@ "aa0004": "DIGITAL EQUIPMENT CORPORATION", "ac007a": "Apple, Inc.", "ac00d0": "zte corporation", + "ac00f9": "Sdn. Bhd.", "ac0142": "Uriel Technologies SIA", "ac02ca": "HI Solutions, Inc.", "ac02cf": "RW Tecnologia Industria e Comercio Ltda", @@ -26544,6 +26603,7 @@ "ac3fa4": "TAIYO YUDEN CO.,LTD", "ac40ea": "C&T Solution Inc. ", "ac4122": "Eclipse Electronic Systems Inc.", + "ac416a": "Amazon Technologies Inc.", "ac4228": "Parta Networks", "ac4330": "Versa Networks", "ac44f2": "YAMAHA CORPORATION", @@ -26757,6 +26817,7 @@ "acd618": "Co., Ltd", "acd657": "Shaanxi GuoLian Digital TV Technology Co.,Ltd.", "acd829": "Co., Ltd.", + "acd8a7": "BELLDESIGN Inc.", "acd9d6": "tci GmbH", "acdb48": "ARRIS Group, Inc.", "acdbda": "Shenzhen Geniatech Inc, Ltd", @@ -26861,7 +26922,7 @@ "b03795": "LG Electronics", "b03829": "Siliconware Precision Industries Co., Ltd.", "b03850": "Nanjing CAS-ZDC IOT SYSTEM CO.,LTD", - "b03893": "Onda TLC GmbH", + "b03893": "Onda TLC Italia S.r.l.", "b038e2": "Wanan Hongsheng Electronic Co.Ltd", "b03956": "NETGEAR", "b03ace": "Huawei Device Co., Ltd.", @@ -26989,6 +27050,7 @@ "b0a10a": "Pivotal Systems Corporation", "b0a2e7": "Shenzhen TINNO Mobile Technology Corp.", "b0a37e": "QING DAO HAIER TELECOM CO.,LTD.", + "b0a3f2": "Huaqin Technology Co. LTD", "b0a454": "Tripwire Inc.", "b0a460": "Intel Corporate", "b0a4f0": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27106,6 +27168,7 @@ "b0f893": "Shanghai MXCHIP Information Technology Co., Ltd.", "b0f963": "Hangzhou H3C Technologies Co., Limited", "b0faeb": "Cisco Systems, Inc", + "b0fb15": "Laird Connectivity", "b0fbdd": "Shenzhen SuperElectron Technology Co.,Ltd.", "b0fc0d": "Amazon Technologies Inc.", "b0fc36": "CyberTAN Technology Inc.", @@ -27530,6 +27593,7 @@ "b85e7b": "Samsung Electronics Co.,Ltd", "b85f98": "Amazon Technologies Inc.", "b85fb0": "HUAWEI TECHNOLOGIES CO.,LTD", + "b86061": "China Mobile Group Device Co.,Ltd.", "b86091": "Onnet Technologies and Innovations LLC", "b86142": "Beijing Tricolor Technology Co., Ltd", "b8616f": "Accton Technology Corp", @@ -28039,6 +28103,7 @@ "bcf2af": "devolo AG", "bcf310": "Extreme Networks, Inc.", "bcf45f": "zte corporation", + "bcf499": "Rockwell Automation", "bcf4d4": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "bcf61c": "Geomodeling Wuxi Technology Co. Ltd.", "bcf685": "D-Link International", @@ -28140,6 +28205,7 @@ "c048e6": "Samsung Electronics Co.,Ltd", "c048fb": "Shenzhen JingHanDa Electronics Co.Ltd", "c0493d": "MAITRISE TECHNOLOGIQUE", + "c04943": "zte corporation", "c049ef": "Espressif Inc.", "c04a00": "TP-LINK TECHNOLOGIES CO.,LTD.", "c04a09": "Zhejiang Everbright Communication Equip. Co,. Ltd", @@ -28657,6 +28723,7 @@ "c4eb42": "Sagemcom Broadband SAS", "c4eb43": "Sagemcom Broadband SAS", "c4ebe3": "RRCN SAS", + "c4ebff": "zte corporation", "c4edba": "Texas Instruments", "c4eeae": "VSS Monitoring", "c4eef5": "II-VI Incorporated", @@ -28705,6 +28772,7 @@ "c80e95": "OmniLync Inc.", "c81073": "CENTURY OPTICOMM CO.,LTD", "c8120b": "Samsung Electronics Co.,Ltd", + "c81337": "Juniper Networks", "c8138b": "Shenzhen Skyworth Digital Technology CO., Ltd", "c81451": "HUAWEI TECHNOLOGIES CO.,LTD", "c81479": "Samsung Electronics Co.,Ltd", @@ -28859,6 +28927,7 @@ "c8965a": "SKY UK LIMITED", "c89665": "Microsoft Corporation", "c8979f": "Nokia Corporation", + "c89828": "zte corporation", "c899b2": "Arcadyan Corporation", "c89bad": "Honor Device Co., Ltd.", "c89bd7": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", @@ -29221,6 +29290,7 @@ "ccb255": "D-Link International", "ccb3ab": "shenzhen Biocare Bio-Medical Equipment Co.,Ltd.", "ccb3f8": "FUJITSU ISOTEC LIMITED", + "ccb54c": "Texas Instruments", "ccb55a": "Fraunhofer ITWM", "ccb5d1": "Beijing Xiaomi Mobile Software Co., Ltd", "ccb691": "NECMagnusCommunications", @@ -29709,6 +29779,7 @@ "d4522a": "TangoWiFi.com", "d45251": "IBT Ingenieurbureau Broennimann Thun", "d45297": "nSTREAMS Technologies, Inc.", + "d452c7": "Beijing L&S Lancom Platform Tech. Co., Ltd.", "d452ee": "SKY UK LIMITED", "d45347": "Merytronic 2012, S.L.", "d45383": "Murata Manufacturing Co., Ltd.", @@ -29859,12 +29930,14 @@ "d4b169": "Limited", "d4b27a": "ARRIS Group, Inc.", "d4b43e": "Messcomp Datentechnik GmbH", + "d4b680": "Shanghai Linkyum Microeletronics Co.,Ltd", "d4b709": "zte corporation", "d4b761": "Sichuan AI-Link Technology Co., Ltd.", "d4b7d0": "Ciena Corporation", "d4b8ff": "Home Control Singapore Pte Ltd", "d4b92f": "Technicolor CH USA Inc.", "d4baba": "IEEE Registration Authority", + "d4bafa": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "d4bbc8": "vivo Mobile Communication Co., Ltd.", "d4bbe6": "Huawei Device Co., Ltd.", "d4bd1e": "5VT Technologies,Taiwan LTd.", @@ -29918,6 +29991,7 @@ "d4e880": "Cisco Systems, Inc", "d4e8b2": "Samsung Electronics Co.,Ltd", "d4e90b": "CVT CO.,LTD", + "d4e95e": "Texas Instruments", "d4e98a": "Intel Corporate", "d4ea0e": "Avaya Inc", "d4eb68": "Cisco Systems, Inc", @@ -30132,6 +30206,7 @@ "d88c79": "Google, Inc.", "d88d5c": "Elentec", "d88dc8": "Atil Technology Co., LTD", + "d88ed4": "eero inc.", "d88f76": "Apple, Inc.", "d890e8": "Samsung Electronics Co.,Ltd", "d8912a": "Zyxel Communications Corporation", @@ -30229,6 +30304,7 @@ "d8d27c": "JEMA ENERGY, SA", "d8d385": "Hewlett Packard", "d8d43c": "Sony Corporation", + "d8d45d": "Orbic North America", "d8d4e6": "Hytec Inter Co., Ltd.", "d8d5b9": "Rainforest Automation, Inc.", "d8d67e": "GSK CNC EQUIPMENT CO.,LTD", @@ -30347,6 +30423,7 @@ "dc3350": "TechSAT GmbH", "dc35f1": "Positivo Tecnologia S.A.", "dc360c": "Hitron Technologies. Inc", + "dc3642": "zte corporation", "dc3643": "IEEE Registration Authority", "dc3714": "Apple, Inc.", "dc3752": "GE", @@ -30522,6 +30599,7 @@ "dccf96": "Samsung Electronics Co.,Ltd", "dcd0f7": "Bentek Systems Ltd.", "dcd255": "Kinpo Electronics, Inc.", + "dcd26a": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "dcd2fc": "HUAWEI TECHNOLOGIES CO.,LTD", "dcd2fd": "HUAWEI TECHNOLOGIES CO.,LTD", "dcd321": "HUMAX Co., Ltd.", @@ -30933,6 +31011,7 @@ "e417d8": "8BITDO TECHNOLOGY HK LIMITED", "e4186b": "Zyxel Communications Corporation", "e419c1": "HUAWEI TECHNOLOGIES CO.,LTD", + "e41a1d": "NOVEA ENERGIES", "e41a2c": "ZPE Systems, Inc.", "e41c4b": "V2 TECHNOLOGY, INC.", "e41d2d": "Mellanox Technologies, Inc.", @@ -30973,6 +31052,7 @@ "e435c8": "HUAWEI TECHNOLOGIES CO.,LTD", "e435fb": "Ltd", "e437d7": "HENRI DEPAEPE S.A.S.", + "e43819": "Shenzhen Hi-Link Electronic CO.,Ltd.", "e4387e": "Cisco Systems, Inc", "e43883": "Ubiquiti Inc", "e4388c": "Digital Products Limited", @@ -31076,6 +31156,7 @@ "e48c73": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "e48d8c": "Routerboard.com", "e48e10": "CIG SHANGHAI CO LTD", + "e48ebb": "Rockwell Automation", "e48f1d": "Huawei Device Co., Ltd.", "e48f34": "Vodafone Italia S.p.A.", "e48f65": "Yelatma Instrument Making Enterprise, JSC", @@ -31195,6 +31276,7 @@ "e4f8ef": "Samsung Electronics Co.,Ltd", "e4f939": "Minxon Hotel Technology INC.", "e4fa1d": "PAD Peripheral Advanced Design Inc.", + "e4fac4": "Big Field Global PTE. Ltd.", "e4faed": "Samsung Electronics Co.,Ltd", "e4fafd": "Intel Corporate", "e4fb5d": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -31247,6 +31329,7 @@ "e81da8": "Ruckus Wireless", "e81e92": "Huawei Device Co., Ltd.", "e820e2": "HUMAX Co., Ltd.", + "e82404": "Quectel Wireless Solutions Co.,Ltd.", "e824a6": "Juniper Networks", "e82689": "Aruba, a Hewlett Packard Enterprise Company", "e8268d": "Shenzhen SuperElectron Technology Co.,Ltd.", @@ -32333,6 +32416,7 @@ "f4a739": "Juniper Networks", "f4a80d": "Wistron InfoComm(Kunshan)Co.,Ltd.", "f4a997": "CANON INC.", + "f4aad0": "OHSUNG", "f4acc1": "Cisco Systems, Inc", "f4afe7": "Apple, Inc.", "f4b164": "Lightning Telecommunications Technology Co. Ltd", @@ -32377,6 +32461,7 @@ "f4c88a": "Intel Corporate", "f4ca24": "FreeBit Co., Ltd.", "f4cae5": "FREEBOX SAS", + "f4cae7": "Arcadyan Corporation", "f4cb52": "HUAWEI TECHNOLOGIES CO.,LTD", "f4cc55": "Juniper Networks", "f4cd90": "Vispiron Rotec GmbH", @@ -32512,6 +32597,7 @@ "f82c18": "2Wire Inc", "f82d7c": "Apple, Inc.", "f82dc0": "ARRIS Group, Inc.", + "f82e0c": "Texas Instruments", "f82e3f": "HUAWEI TECHNOLOGIES CO.,LTD", "f82e8e": "Nanjing Kechen Electric Co., Ltd.", "f82edb": "RTW GmbH & Co. KG", @@ -32600,6 +32686,7 @@ "f864b8": "zte corporation", "f86601": "Suzhou Chi-tek information technology Co., Ltd", "f8665a": "Apple, Inc.", + "f86691": "Sichuan Tianyi Comheart Telecom Co.,LTD", "f866d1": "Hon Hai Precision Ind. Co.,Ltd.", "f866f2": "Cisco Systems, Inc", "f86971": "Seibu Electric Co.,", @@ -32623,6 +32710,7 @@ "f877b8": "Samsung Electronics Co.,Ltd", "f87907": "Huawei Device Co., Ltd.", "f8790a": "ARRIS Group, Inc.", + "f87928": "zte corporation", "f87999": "Guangdong Jiuzhi Technology Co.,Ltd", "f87a41": "Cisco Systems, Inc", "f87aef": "Rosonix Technology, Inc.", @@ -32909,6 +32997,7 @@ "fc4596": "CO., LTD. ", "fc45c3": "Texas Instruments", "fc47d8": "Apple, Inc.", + "fc48c9": "Yobiiq Intelligence B.V.", "fc48ef": "HUAWEI TECHNOLOGIES CO.,LTD", "fc492d": "Amazon Technologies Inc.", "fc4ae9": "Castlenet Technology Inc.", @@ -32976,6 +33065,7 @@ "fc8399": "Avaya Inc", "fc83c6": "N-Radio Technologies Co., Ltd.", "fc8417": "Honor Device Co., Ltd.", + "fc84a7": "Murata Manufacturing Co., Ltd.", "fc8596": "Axonne Inc.", "fc862a": "Huawei Device Co., Ltd.", "fc8743": "HUAWEI TECHNOLOGIES CO.,LTD", From ec2147aa3e65a31ff214f1e36d82c139bc7585d4 Mon Sep 17 00:00:00 2001 From: Jeff Kala <48843785+jeffkala@users.noreply.github.com> Date: Thu, 2 Mar 2023 16:22:38 -0700 Subject: [PATCH 05/37] Create dependabot.yml to fix itdependsabot (#218) * Create dependabot.yml fixes #212 * Update dependabot.yml --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..f9dbfe0c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +--- +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + allow: + - dependency-type: "direct" From 1acb32acb062f46596e2b9f4d692c76e377ecc15 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 11:33:55 -0600 Subject: [PATCH 06/37] Flat: latest data (2023-03-17T17:12:07.070Z) (#236) { "date": "2023-03-17T17:12:07.070Z", "files": [ { "name": "netutils/data_files/protocol_mappings.py", "deltaBytes": 68, "source": "https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv" } ] } Co-authored-by: flat-data --- netutils/data_files/protocol_mappings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netutils/data_files/protocol_mappings.py b/netutils/data_files/protocol_mappings.py index 573047aa..13f990e8 100644 --- a/netutils/data_files/protocol_mappings.py +++ b/netutils/data_files/protocol_mappings.py @@ -2007,6 +2007,7 @@ "pcc-mfp": {"port_number": 2256, "protocols": ["tcp", "udp"]}, "simple-tx-rx": {"port_number": 2257, "protocols": ["tcp", "udp"]}, "rcts": {"port_number": 2258, "protocols": ["tcp", "udp"]}, + "bid-serv": {"port_number": 2259, "protocols": ["tcp", "udp"]}, "apc-2260": {"port_number": 2260, "protocols": ["tcp", "udp"]}, "comotionmaster": {"port_number": 2261, "protocols": ["tcp", "udp"]}, "comotionback": {"port_number": 2262, "protocols": ["tcp", "udp"]}, From 380a7aa027e518b06aac4bac550663a7b3a4a6fc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 11:36:12 -0600 Subject: [PATCH 07/37] Flat: latest data (2023-03-17T17:11:02.437Z) (#235) { "date": "2023-03-17T17:11:02.437Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 5519, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 141 ++++++++++++++++++++++++++-- 1 file changed, 134 insertions(+), 7 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 959ad9d6..cd27ce7a 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -3348,7 +3348,7 @@ "000d36": "Wu Han Routon Electronic Co., Ltd", "000d37": "WIPLUG", "000d38": "NISSIN INC.", - "000d39": "Network Electronics", + "000d39": "Nevion", "000d3a": "Microsoft Corp.", "000d3b": "Microelectronics Technology Inc.", "000d3c": "i.Tech Dynamic Ltd", @@ -5163,7 +5163,7 @@ "001454": "Symwave", "001455": "Coder Electronics Corporation", "001456": "Edge Products", - "001457": "T-VIPS AS", + "001457": "Nevion", "001458": "HS Automatic ApS", "001459": "Moram Co., Ltd.", "00145a": "Westermo Neratec AG", @@ -5829,7 +5829,7 @@ "0016f3": "CAST Information Co., Ltd", "0016f4": "Eidicom Co., Ltd.", "0016f5": "Dalian Golden Hualu Digital Technology Co.,Ltd", - "0016f6": "Video Products Group", + "0016f6": "Nevion", "0016f7": "L-3 Communications, Aviation Recorders", "0016f8": "AVIQTECH TECHNOLOGY CO., LTD.", "0016f9": "CETRTA POT, d.o.o., Kranj", @@ -6122,7 +6122,7 @@ "001819": "Cisco Systems, Inc", "00181a": "AVerMedia Information Inc.", "00181b": "TaiJin Metal Co., Ltd.", - "00181c": "Exterity Limited", + "00181c": "VITEC", "00181d": "ASIA ELECTRONICS CO.,LTD", "00181e": "GDX Technologies Ltd.", "00181f": "Palmmicro Communications", @@ -10229,6 +10229,7 @@ "0035ff": "Texas Instruments", "003676": "ARRIS Group, Inc.", "0036be": "Northwest Towers", + "0036d7": "Keltron IOT Corp.", "0036f8": "Conti Temic microelectronic GmbH", "0036fe": "SuperVision", "00376d": "Murata Manufacturing Co., Ltd.", @@ -13006,6 +13007,7 @@ "04489a": "Apple, Inc.", "04495d": "Huawei Device Co., Ltd.", "044a50": "limited company", + "044a6a": "niliwi nanjing big data Co,.Ltd", "044a6c": "HUAWEI TECHNOLOGIES CO.,LTD", "044ac6": "Aipon Electronics Co., Ltd", "044ba5": "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", @@ -13086,6 +13088,7 @@ "0481ae": "Clack Corporation", "04848a": "7INOVA TECHNOLOGY LIMITED", "048680": "Quectel Wireless Solutions Co.,Ltd.", + "048727": "Silicon Laboratories", "04885f": "HUAWEI TECHNOLOGIES CO.,LTD", "04888c": "Eifelwerk Butler Systeme GmbH", "0488e2": "Beats Electronics LLC", @@ -13586,6 +13589,7 @@ "088e90": "Intel Corporate", "088edc": "Apple, Inc.", "088f2c": "Amber Technology Ltd.", + "088fc3": "CO., LTD. ", "0890ba": "Danlaw Inc", "089115": "Amazon Technologies Inc.", "0891a3": "Amazon Technologies Inc.", @@ -13867,6 +13871,7 @@ "0c8610": "Juniper Networks", "0c8629": "IEEE Registration Authority", "0c86c7": "Limited", + "0c8772": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "0c8910": "Samsung Electronics Co.,Ltd", "0c8a87": "AgLogica Holdings, Inc", "0c8b7d": "Vizio, Inc", @@ -14433,6 +14438,7 @@ "1430c6": "Motorola Mobility LLC, a Lenovo Company", "1432d1": "Samsung Electronics Co.,Ltd", "143365": "TEM Mobile Limited", + "1434f6": "LV SOLUTION SDN. BHD.", "14358b": "Mediabridge Products, LLC.", "1435b3": "Future Designs, Inc.", "143605": "Nokia Corporation", @@ -14629,6 +14635,7 @@ "14d4fe": "ARRIS Group, Inc.", "14d64d": "D-Link International", "14d76e": "CONCH ELECTRONIC Co.,Ltd", + "14d864": "TP-LINK TECHNOLOGIES CO.,LTD.", "14dae9": "ASUSTek COMPUTER INC.", "14db85": "S NET MEDIA", "14dc51": "Xiamen Cheerzing IOT Technology Co.,Ltd.", @@ -14838,6 +14845,7 @@ "187a93": "AMICCOM Electronics Corporation", "187c0b": "Ruckus Wireless", "187c81": "Valeo Vision Systems", + "187caa": "China Mobile Group Device Co.,Ltd.", "187eb9": "Apple, Inc.", "187ed5": "shenzhen kaism technology Co. Ltd", "188090": "Cisco Systems, Inc", @@ -14904,6 +14912,7 @@ "18af61": "Apple, Inc.", "18af8f": "Apple, Inc.", "18af9f": "DIGITRONIC Automationsanlagen GmbH", + "18afa1": "Shenzhen Yifang Network Technology Co., Ltd.", "18b169": "Sonicwall", "18b185": "Co., Ltd.", "18b209": "Torrey Pines Logic, Inc", @@ -14962,6 +14971,7 @@ "18d9ef": "Shuttle Inc.", "18dbf2": "Dell Inc.", "18dc56": "Co.,Ltd", + "18de50": "Tuya Smart Inc.", "18ded7": "HUAWEI TECHNOLOGIES CO.,LTD", "18dfb4": "BOSUNG POWERTEC CO.,LTD.", "18dfc1": "Aetheros", @@ -14995,6 +15005,7 @@ "18f46b": "Telenor Connexion AB", "18f643": "Apple, Inc.", "18f650": "Multimedia Pacific Limited", + "18f697": "Axiom Memory Solutions, Inc.", "18f76b": "Zhejiang Winsight Technology CO.,LTD", "18f87a": "i3 International Inc.", "18f87f": "Wha Yu Industrial Co., Ltd.", @@ -15328,6 +15339,7 @@ "1cff59": "Sichuan Tianyi Comheart Telecom Co.,LTD", "20014f": "Linea Research Ltd", "2002af": "Murata Manufacturing Co., Ltd.", + "2002fe": "Hangzhou Dangbei Network Technology Co., Ltd", "20040f": "Dell Inc.", "2004f3": "Honor Device Co., Ltd.", "200505": "RADMAX COMMUNICATION PRIVATE LIMITED", @@ -15471,6 +15483,7 @@ "206e9c": "Samsung Electronics Co.,Ltd", "206fec": "Braemac CA LLC", "20719e": "SF Technology Co.,Ltd", + "2072a9": "Beijing Xiaomi Electronics Co.,Ltd", "207355": "ARRIS Group, Inc.", "207454": "vivo Mobile Communication Co., Ltd.", "2074cf": "Shenzhen Voxtech Co.,Ltd", @@ -15498,6 +15511,7 @@ "208756": "SIEMENS AG", "2087ac": "AES motomation", "2087ec": "HUAWEI TECHNOLOGIES CO.,LTD", + "208810": "Dell Inc.", "20896f": "Fiberhome Telecommunication Technologies Co.,LTD", "208984": "CO., LTD. ", "208986": "zte corporation", @@ -15689,6 +15703,7 @@ "2420c7": "Sagemcom Broadband SAS", "242124": "Nokia", "2421ab": "Sony Corporation", + "242361": "vivo Mobile Communication Co., Ltd.", "24240e": "Apple, Inc.", "242642": "SHARP Corporation.", "2426ba": "Shenzhen Toptel Technology Co., Ltd.", @@ -15729,6 +15744,7 @@ "24497b": "Innovative Converged Devices Inc", "244b03": "Samsung Electronics Co.,Ltd", "244b81": "Samsung Electronics Co.,Ltd", + "244bf1": "HUAWEI TECHNOLOGIES CO.,LTD", "244bfe": "ASUSTek COMPUTER INC.", "244c07": "HUAWEI TECHNOLOGIES CO.,LTD", "244cab": "Espressif Inc.", @@ -16237,6 +16253,7 @@ "28ea0b": "Microsoft Corporation", "28ea2d": "Apple, Inc.", "28eba6": "Nex-T LLC", + "28ec22": "eero inc.", "28ec95": "Apple, Inc.", "28ec9a": "Texas Instruments", "28ed58": "JAG Jakob AG", @@ -16354,6 +16371,7 @@ "2c3afd": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "2c3b70": "AzureWave Technology Inc.", "2c3bfd": "Netstor Technology Co., Ltd.", + "2c3ebf": "HOSIN Global Electronics Co., Ltd.", "2c3ecf": "Cisco Systems, Inc", "2c3f0b": "Cisco Meraki", "2c3f38": "Cisco Systems, Inc", @@ -16901,6 +16919,7 @@ "340b40": "MIOS ELETTRONICA SRL", "340ced": "Moduel AB", "340f66": "Web Sensing LLC", + "3410f4": "Silicon Laboratories", "341290": "Treeview Co.,Ltd.", "341298": "Apple, Inc.", "3412f9": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -17056,6 +17075,7 @@ "34862a": "Heinz Lackmann GmbH & Co KG", "34865d": "Espressif Inc.", "34873d": "Quectel Wireless Solutions Co.,Ltd.", + "348818": "Cisco Systems, Inc", "34885d": "Logitech Far East", "348a12": "Aruba, a Hewlett Packard Enterprise Company", "348a7b": "Samsung Electronics Co.,Ltd", @@ -17155,6 +17175,7 @@ "34d262": "SZ DJI TECHNOLOGY CO.,LTD", "34d270": "Amazon Technologies Inc.", "34d2c4": "RENA GmbH Print Systeme", + "34d4e3": "Atom Power, Inc.", "34d693": "Huawei Device Co., Ltd.", "34d712": "Smartisan Digital Co., Ltd", "34d737": "IBG Industriebeteiligungsgesellschaft mbH &b Co. KG", @@ -17190,12 +17211,14 @@ "34e9fe": "Metis Co., Ltd.", "34ea34": "HangZhou Gubei Electronics Technology Co.,Ltd", "34eae7": "Shanghai High-Flying Electronics Technology Co., Ltd", + "34ecb6": "Phyplus Microelectronics Limited", "34ed0b": "Shanghai XZ-COM.CO.,Ltd.", "34ed1b": "Cisco Systems, Inc", "34ee2a": "ConMet", "34ef44": "2Wire Inc", "34ef8b": "NTT Communications Corporation", "34efb6": "Edgecore Networks Corporation", + "34f043": "Samsung Electronics Co.,Ltd", "34f0ca": "Shenzhen Linghangyuan Digital Technology Co.,Ltd.", "34f150": "Hui Zhou Gaoshengda Technology Co.,LTD", "34f223": "Fujian Newland Communication Science Technology Co.,Ltd.", @@ -17383,6 +17406,7 @@ "3888a4": "Apple, Inc.", "38892c": "Apple, Inc.", "3889dc": "Opticon Sensors Europe B.V.", + "388a06": "Samsung Electronics Co.,Ltd", "388a21": "UAB Teltonika Telematics", "388ab7": "ITC Networks", "388abe": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -17559,6 +17583,7 @@ "3c0c48": "Servergy, Inc.", "3c0c7d": "Tiny Mesh AS", "3c0cdb": "UNION MAN TECHNOLOGY CO.,LTD", + "3c0d2c": "Liquid-Markets GmbH", "3c0e23": "Cisco Systems, Inc", "3c0fc1": "KBC Networks", "3c1040": "daesung network", @@ -17611,6 +17636,7 @@ "3c3174": "Google, Inc.", "3c3178": "Qolsys Inc.", "3c3300": "Shenzhen Bilian electronic CO.,LTD", + "3c3332": "D-Link Corporation", "3c3556": "Cognitec Systems GmbH", "3c363d": "Nokia Corporation", "3c36e4": "ARRIS Group, Inc.", @@ -17798,6 +17824,7 @@ "3cc786": "DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.", "3cc99e": "Huiyang Technology Co., Ltd", "3cca87": "Iders Incorporated", + "3ccb4d": "Avikus Co., Ltd", "3ccb7c": "TCT mobile ltd", "3ccd36": "Apple, Inc.", "3ccd57": "Beijing Xiaomi Mobile Software Co., Ltd", @@ -17841,6 +17868,7 @@ "3cea4f": "2Wire Inc", "3ceaf9": "JUBIXCOLTD", "3ceafb": "NSE AG", + "3cecde": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "3cecef": "Super Micro Computer, Inc.", "3cef42": "TCT mobile ltd", "3cef8c": "Zhejiang Dahua Technology Co., Ltd.", @@ -17885,6 +17913,7 @@ "4011dc": "Sonance", "4012e4": "Compass-EOS", "4013d9": "Global ES", + "401482": "Cisco Systems, Inc", "4014ad": "Huawei Device Co., Ltd.", "401597": "Protect America, Inc.", "40163b": "Samsung Electronics Co.,Ltd", @@ -17909,6 +17938,7 @@ "402619": "Apple, Inc.", "40270b": "Mobileeco Co., Ltd", "402814": "RFI Engineering", + "402a8f": "Shanghai High-Flying Electronics Technology Co., Ltd", "402b50": "ARRIS Group, Inc.", "402b69": "Kumho Electric Inc.", "402ba1": "Sony Corporation", @@ -18041,6 +18071,7 @@ "40987b": "Aisino Corporation", "4098ad": "Apple, Inc.", "409922": "AzureWave Technology Inc.", + "409a30": "TECNO MOBILE LIMITED", "409b0d": "Shenzhen Yourf Kwan Industrial Co., Ltd", "409b21": "Nokia", "409bcd": "D-Link International", @@ -18084,6 +18115,7 @@ "40b6b1": "SUNGSAM CO,.Ltd", "40b6e7": "Huawei Device Co., Ltd.", "40b7f3": "ARRIS Group, Inc.", + "40b7fc": "Phyplus Microelectronics Limited", "40b837": "Sony Corporation", "40b89a": "Hon Hai Precision Ind. Co.,Ltd.", "40b93c": "Hewlett Packard Enterprise", @@ -18122,7 +18154,9 @@ "40d3ae": "Samsung Electronics Co.,Ltd", "40d40e": "Biodata Ltd", "40d4bd": "SK Networks Service CO., LTD.", + "40d4f6": "Honor Device Co., Ltd.", "40d559": "MICRO S.E.R.I.", + "40d563": "HANA Electronics", "40d63c": "Equitech Industrial(DongGuan)Co.,Ltd", "40d855": "IEEE Registration Authority", "40d95a": "AMPAK Technology,Inc.", @@ -18143,6 +18177,7 @@ "40eace": "FOUNDER BROADBAND NETWORK SERVICE CO.,LTD", "40ec99": "Intel Corporate", "40ecf8": "Siemens AG", + "40ed00": "TP-Link Corporation Limited", "40ed98": "IEEE Registration Authority", "40edcf": "Apple, Inc.", "40ee15": "Ltd.", @@ -18440,6 +18475,7 @@ "44d5f2": "IEEE Registration Authority", "44d63d": "Talari Networks", "44d6e1": "Snuza International Pty. Ltd.", + "44d77e": "Robert Bosch GmbH", "44d791": "HUAWEI TECHNOLOGIES CO.,LTD", "44d832": "AzureWave Technology Inc.", "44d878": "Hui Zhou Gaoshengda Technology Co.,LTD", @@ -18547,6 +18583,7 @@ "482e72": "Cisco Systems, Inc", "482f6b": "Aruba, a Hewlett Packard Enterprise Company", "482fd7": "HUAWEI TECHNOLOGIES CO.,LTD", + "483133": "Robert Bosch Elektronika Kft.", "483177": "Nintendo Co.,Ltd", "4831b7": "Espressif Inc.", "4831db": "Huawei Device Co., Ltd.", @@ -18612,6 +18649,7 @@ "485d60": "AzureWave Technology Inc.", "485deb": "Just Add Power", "485ded": "Sichuan Tianyi Comheart Telecom Co.,LTD", + "485f08": "TP-LINK TECHNOLOGIES CO.,LTD.", "485f99": "Limited", "4860bc": "Apple, Inc.", "4861a3": "Concern Axion JSC", @@ -18836,6 +18874,7 @@ "4c11ae": "Espressif Inc.", "4c11bf": "Zhejiang Dahua Technology Co., Ltd.", "4c1265": "ARRIS Group, Inc.", + "4c12e8": "VIETNAM POST AND TELECOMMUNICATION INDUSTRY TECHNOLOGY JOIN STOCK COMPANY", "4c1365": "Emplus Technologies", "4c1480": "NOREGON SYSTEMS, INC", "4c14a3": "Co., Ltd.", @@ -18934,6 +18973,7 @@ "4c63eb": "Ltd", "4c64d9": "Guangdong Leawin Group Co., Ltd", "4c65a8": "IEEE Registration Authority", + "4c66a6": "Samsung Electronics Co.,Ltd", "4c6af6": "HMD Global Oy", "4c6be8": "Apple, Inc.", "4c6c13": "IoT Company Solucoes Tecnologicas Ltda", @@ -19129,6 +19169,7 @@ "50016b": "HUAWEI TECHNOLOGIES CO.,LTD", "5001bb": "Samsung Electronics Co.,Ltd", "5001d9": "HUAWEI TECHNOLOGIES CO.,LTD", + "500238": "Nokia Shanghai Bell Co., Ltd.", "500291": "Espressif Inc.", "5004b8": "HUAWEI TECHNOLOGIES CO.,LTD", "50053d": "CyWee Group Ltd", @@ -19330,6 +19371,7 @@ "508d6f": "CHAHOO Limited", "508e49": "Xiaomi Communications Co Ltd", "508f4c": "Xiaomi Communications Co Ltd", + "5091e3": "TP-Link Corporation Limited", "5092b9": "Samsung Electronics Co.,Ltd", "50934f": "Gradual Tecnologia Ltda.", "509551": "ARRIS Group, Inc.", @@ -19348,6 +19390,7 @@ "509f3b": "OI ELECTRIC CO.,LTD", "50a009": "Xiaomi Communications Co Ltd", "50a015": "Shenzhen Yipingfang Network Technology Co., Ltd.", + "50a030": "IEEE Registration Authority", "50a054": "Actineon", "50a0a4": "Nokia", "50a0bf": "Alba Fiber Systems Inc.", @@ -19418,6 +19461,7 @@ "50dcfc": "ECOCOM", "50dd4f": "Automation Components, Inc", "50de06": "Apple, Inc.", + "50de19": "IEEE Registration Authority", "50df95": "Lytx", "50e039": "Zyxel Communications Corporation", "50e085": "Intel Corporate", @@ -19492,6 +19536,7 @@ "541149": "vivo Mobile Communication Co., Ltd.", "541159": "Nettrix Information Industry co.LTD", "54115f": "Atamo Pty Ltd", + "5412cb": "HUAWEI TECHNOLOGIES CO.,LTD", "541310": "HUAWEI TECHNOLOGIES CO.,LTD", "541379": "Hon Hai Precision Ind. Co.,Ltd.", "541473": "Wingtech Group (HongKong)Limited", @@ -20395,6 +20440,7 @@ "601466": "zte corporation", "6014b3": "CyberTAN Technology Inc.", "601521": "Redarc Electronics", + "60152b": "Palo Alto Networks", "601592": "IEEE Registration Authority", "6015c7": "IdaTech", "601803": "Co., Ltd.", @@ -20616,6 +20662,7 @@ "60c798": "Verifone", "60c7be": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "60c980": "Trymus", + "60c9aa": "Nokia", "60cbfb": "AirScape Inc.", "60cda9": "Abloomy", "60cdc5": "Taiwan Carol Electronics., Ltd", @@ -20732,8 +20779,10 @@ "64168d": "Cisco Systems, Inc", "6416f0": "HUAWEI TECHNOLOGIES CO.,LTD", "641759": "Intellivision Holdings, LLC", + "6417cd": "Samsung Electronics Co.,Ltd", "641a22": "Heliospectra AB", "641aba": "Dryad Networks GmbH", + "641b2f": "Samsung Electronics Co.,Ltd", "641c10": "Texas Instruments", "641c67": "DIGIBRAS INDUSTRIA DO BRASILS/A", "641cae": "Samsung Electronics Co.,Ltd", @@ -20772,6 +20821,7 @@ "6437a4": "TOKYOSHUHA CO.,LTD.", "643ab1": "Sichuan Tianyi Comheart Telecom Co.,LTD", "643aea": "Cisco Systems, Inc", + "643e0a": "HUAWEI TECHNOLOGIES CO.,LTD", "643e8c": "HUAWEI TECHNOLOGIES CO.,LTD", "643f5f": "Exablaze", "644212": "Shenzhen Water World Information Co.,Ltd.", @@ -20825,6 +20875,7 @@ "646624": "Sagemcom Broadband SAS", "6466b3": "TP-LINK TECHNOLOGIES CO.,LTD.", "646707": "Beijing Omnific Technology, Ltd.", + "6467cd": "HUAWEI TECHNOLOGIES CO.,LTD", "64680c": "Comtrend Corporation", "646876": "Edifier International", "64694e": "Texas Instruments", @@ -21060,8 +21111,10 @@ "682737": "Samsung Electronics Co.,Ltd", "68275f": "zte corporation", "6828ba": "Dejai", + "6828cf": "Aruba, a Hewlett Packard Enterprise Company", "6828f6": "Vubiq Networks, Inc.", "6829dc": "Ficosa Electronics S.L.U.", + "682c4f": "leerang corporation", "682c7b": "Cisco Systems, Inc", "682d83": "SHENZHEN DINGHE COMMUNICATION COMPANY", "682ddc": "Wuhan Changjiang Electro-Communication Equipment CO.,LTD", @@ -21136,6 +21189,7 @@ "686dbc": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "686e23": "Wi3 Inc.", "686e48": "Prophet Electronic Technology Corp.,Ltd", + "687161": "Cisco Systems, Inc", "687251": "Ubiquiti Inc", "6872c3": "Samsung Electronics Co.,Ltd", "6872dc": "CETORY.TV Company Limited", @@ -21268,6 +21322,7 @@ "68dbf5": "Amazon Technologies Inc.", "68dce8": "PacketStorm Communications", "68dd26": "Shanghai Focus Vision Security Technology Co.,Ltd", + "68ddb7": "TP-LINK TECHNOLOGIES CO.,LTD.", "68ddd9": "HMD Global Oy", "68dfdd": "Xiaomi Communications Co Ltd", "68e154": "SiMa.ai", @@ -21292,6 +21347,7 @@ "68ef43": "Apple, Inc.", "68efbd": "Cisco Systems, Inc", "68f06d": "ALONG INDUSTRIAL CO., LIMITED", + "68f0b5": "Honor Device Co., Ltd.", "68f0bc": "Shenzhen LiWiFi Technology Co., Ltd", "68f0d0": "SkyBell Technologies Inc.", "68f125": "Data Controls Inc.", @@ -21609,6 +21665,7 @@ "6ceca1": "SHENZHEN CLOU ELECTRONICS CO. LTD.", "6ceceb": "Texas Instruments", "6ced51": "NEXCONTROL Co.,Ltd", + "6ceef7": "shenzhen scodeno technology co., Ltd.", "6cefc6": "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.", "6cf049": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "6cf17e": "Zhejiang Uniview Technologies Co.,Ltd.", @@ -21691,6 +21748,7 @@ "702ed9": "Guangzhou Shiyuan Electronics Co., Ltd.", "702f35": "HUAWEI TECHNOLOGIES CO.,LTD", "702f4b": "Steelcase Inc.", + "702f86": "Marquardt GmbH", "702f97": "Aava Mobile Oy", "703018": "Avaya Inc", "70305d": "Ubiquoss Inc", @@ -21949,6 +22007,7 @@ "70e24c": "SAE IT-systems GmbH & Co. KG", "70e284": "Corporation", "70e422": "Cisco Systems, Inc", + "70e46e": "Lytx", "70e56e": "Texas Instruments", "70e72c": "Apple, Inc.", "70e843": "Beijing C&W Optical Communication Technology Co.,Ltd.", @@ -22017,6 +22076,7 @@ "74258a": "Hangzhou H3C Technologies Co., Limited", "7426ac": "Cisco Systems, Inc", "7426ff": "zte corporation", + "74272c": "Advanced Micro Devices, Inc.", "74273c": "Co., LTD", "7427ea": "Elitegroup Computer Systems Co.,Ltd.", "742857": "Mayfield Robotics", @@ -22033,6 +22093,7 @@ "743174": "Apple, Inc.", "743256": "NT-ware Systemprg GmbH", "7432c2": "KYOLIS", + "743357": "vivo Mobile Communication Co., Ltd.", "7433a6": "Shenzhen SuperElectron Technology Co.,Ltd.", "743400": "MTG Co., Ltd.", "74342b": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -22095,7 +22156,7 @@ "745f00": "Samsung Semiconductor Inc.", "745f90": "LAM Technologies", "745fae": "TSL PPL", - "74604c": "RØDE", + "74604c": "RODE", "7460fa": "HUAWEI TECHNOLOGIES CO.,LTD", "74614b": "Chongqing Huijiatong Information Technology Co., Ltd.", "7463c2": "Huawei Device Co., Ltd.", @@ -22256,7 +22317,7 @@ "74d6e5": "Huawei Device Co., Ltd.", "74d6ea": "Texas Instruments", "74d713": "Huaqin Technology Co.,Ltd", - "74d7ca": "Panasonic Corporation Automotive", + "74d7ca": "Panasonic Automotive Systems Co.,Ltd", "74d83e": "Intel Corporate", "74d850": "Evrisko Systems", "74d873": "GUANGDONG GENIUS TECHNOLOGY CO., LTD.", @@ -22377,11 +22438,13 @@ "7828ca": "Sonos, Inc.", "7829ed": "ASKEY COMPUTER CORP", "782a79": "Sdn. Bhd.", + "782af8": "IETHCOM INFORMATION TECHNOLOGY CO., LTD.", "782b46": "Intel Corporate", "782b64": "Bose Corporation", "782bcb": "Dell Inc.", "782c29": "New H3C Technologies Co., Ltd", "782d7e": "TRENDnet, Inc.", + "782dad": "HUAWEI TECHNOLOGIES CO.,LTD", "782e56": "China Mobile Group Device Co.,Ltd.", "782eef": "Nokia Corporation", "782f17": "Xlab Co.,Ltd", @@ -22750,6 +22813,7 @@ "7c2edd": "Samsung Electronics Co.,Ltd", "7c2f80": "Gigaset Communications GmbH", "7c310e": "Cisco Systems, Inc", + "7c3180": "SMK corporation", "7c336e": "MEG Electronics Inc.", "7c33f9": "HUAWEI TECHNOLOGIES CO.,LTD", "7c3548": "Transcend Information", @@ -23032,6 +23096,7 @@ "800588": "Ruijie Networks Co.,LTD", "8005df": "Montage Technology Group Limited", "80071b": "VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.", + "800794": "Samsung Electronics Co.,Ltd", "8007a2": "Esson Technology Inc.", "800902": "Keysight Technologies, Inc.", "800a06": "COMTEC co.,ltd", @@ -23174,6 +23239,7 @@ "807459": "K's Co.,Ltd.", "807484": "Limited", "80751f": "SKY UK LIMITED", + "807677": "hangzhou puwell cloud tech co., ltd.", "807693": "Newag SA", "8076c2": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "8077a4": "TECNO MOBILE LIMITED", @@ -23666,6 +23732,7 @@ "8809af": "Masimo Corporation", "880aa3": "Juniper Networks", "880f10": "Huami Information Technology Co.,Ltd.", + "880fa2": "Sagemcom Broadband SAS", "880fb6": "Jabil Circuits India Pvt Ltd,-EHTP unit", "881036": "Electronics Limted", "88108f": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23722,6 +23789,7 @@ "883b8b": "Cheering Connection Co. Ltd.", "883c1c": "MERCURY CORPORATION", "883c93": "Alcatel-Lucent Enterprise", + "883cc5": "IEEE Registration Authority", "883d24": "Google, Inc.", "883f0c": "system a.v. co., ltd.", "883f37": "UHTEK CO., LTD.", @@ -24365,6 +24433,7 @@ "90380c": "Espressif Inc.", "9038df": "Changzhou Tiannengbo System Co. Ltd.", "90395e": "Silicon Laboratories", + "90395f": "Amazon Technologies Inc.", "903a72": "Ruckus Wireless", "903aa0": "Nokia", "903ae6": "PARROT SA", @@ -24473,6 +24542,7 @@ "90848b": "HDR10+ Technologies, LLC", "908674": "Sichuan Tianyi Comheart Telecom Co.,LTD", "90869b": "zte corporation", + "908855": "Cisco Systems, Inc", "9088a2": "IONICS TECHNOLOGY ME LTDA", "90895f": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", "908c09": "Total Phase", @@ -24611,6 +24681,7 @@ "90f305": "HUMAX Co., Ltd.", "90f3b7": "Kirisun Communications Co., Ltd.", "90f3b8": "China Mobile Group Device Co.,Ltd.", + "90f421": "IEEE Registration Authority", "90f4c1": "Rand McNally", "90f644": "Huawei Device Co., Ltd.", "90f652": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -24636,6 +24707,7 @@ "940230": "Logitech", "94026b": "Optictimes Co.,Ltd", "94049c": "HUAWEI TECHNOLOGIES CO.,LTD", + "9404e3": "Technicolor CH USA Inc.", "9405b6": "Liling FullRiver Electronics & Technology Ltd", "9405bb": "IEEE Registration Authority", "940853": "Liteon Technology Corporation", @@ -24710,6 +24782,7 @@ "944444": "LG Innotek", "944452": "Belkin International Inc.", "944696": "BaudTec Corporation", + "944788": "HUAWEI TECHNOLOGIES CO.,LTD", "9447b0": "BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD", "944996": "WiSilica Inc", "944a09": "BitWise Controls", @@ -24757,6 +24830,7 @@ "9476b7": "Samsung Electronics Co.,Ltd", "94772b": "HUAWEI TECHNOLOGIES CO.,LTD", "947806": "NINGBO SUNVOT TECHNOLOGY CO.,LTD", + "947918": "ITEL MOBILE LIMITED", "947bae": "Xiaomi Communications Co Ltd", "947bbe": "Ubicquia LLC", "947be7": "Samsung Electronics Co.,Ltd", @@ -25136,6 +25210,7 @@ "989d5d": "Technicolor CH USA Inc.", "989de5": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "989e63": "Apple, Inc.", + "989f1e": "HUAWEI TECHNOLOGIES CO.,LTD", "98a2c0": "Cisco Systems, Inc", "98a404": "Ericsson AB", "98a40e": "Snap, Inc.", @@ -25183,6 +25258,7 @@ "98cc4d": "Shenzhen mantunsci co., LTD", "98ccd9": "Shenzhen SuperElectron Technology Co.,Ltd.", "98cce4": "Shenzhen Mindray Animal Medical Technology Co.,LTD", + "98ccf3": "Amazon Technologies Inc.", "98cdac": "Espressif Inc.", "98cdb4": "Virident Systems, Inc.", "98cf53": "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", @@ -25243,6 +25319,7 @@ "98faa7": "INNONET", "98fae3": "Xiaomi Communications Co Ltd", "98fb12": "Ltd", + "98fbf5": "ATRALTECH", "98fc11": "Cisco-Linksys, LLC", "98fc84": "IEEE Registration Authority", "98fd74": "ACT.CO.LTD", @@ -25279,6 +25356,7 @@ "9c1d58": "Texas Instruments", "9c1e95": "Actiontec Electronics, Inc", "9c1ea4": "Sdn. Bhd.", + "9c1ecf": "Valeo Telematik und Akustik GmbH", "9c1fca": "Hangzhou AlmightyDigit Technology Co., Ltd", "9c1fdd": "Accupix Inc.", "9c207b": "Apple, Inc.", @@ -25386,6 +25464,7 @@ "9c69b4": "IEEE Registration Authority", "9c69d1": "HUAWEI TECHNOLOGIES CO.,LTD", "9c6abe": "QEES ApS.", + "9c6b00": "ASRock Incorporation", "9c6b37": "Sdn. Bhd.", "9c6b72": "Realme Chongqing MobileTelecommunications Corp Ltd", "9c6bf0": "Shenzhen Yipingfang Network Technology Co., Ltd.", @@ -25393,6 +25472,8 @@ "9c6f52": "zte corporation", "9c713a": "HUAWEI TECHNOLOGIES CO.,LTD", "9c7370": "HUAWEI TECHNOLOGIES CO.,LTD", + "9c73b1": "Samsung Electronics Co.,Ltd", + "9c7403": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "9c741a": "HUAWEI TECHNOLOGIES CO.,LTD", "9c746f": "HUAWEI TECHNOLOGIES CO.,LTD", "9c7514": "Wildix srl", @@ -25487,6 +25568,7 @@ "9cbd6e": "DERA Co., Ltd", "9cbd9d": "SkyDisk, Inc.", "9cbee0": "Biosoundlab Co., Ltd.", + "9cbf0d": "Framework Computer LLC", "9cbfcd": "HUAWEI TECHNOLOGIES CO.,LTD", "9cc077": "PrintCounts, LLC", "9cc0d2": "Conductix-Wampfler GmbH", @@ -25558,6 +25640,7 @@ "9cf8db": "shenzhen eyunmei technology co,.ltd", "9cf938": "AREVA NP GmbH", "9cfa3c": "Daeyoung Electronics", + "9cfb77": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "9cfbd5": "vivo Mobile Communication Co., Ltd.", "9cfbf1": "MESOMATIC GmbH & Co.KG", "9cfc01": "Apple, Inc.", @@ -25567,6 +25650,7 @@ "9cfea1": "Fiberhome Telecommunication Technologies Co.,LTD", "9cffbe": "OTSL Inc.", "9cffc2": "AVI Systems GmbH", + "a0024a": "IEEE Registration Authority", "a002dc": "Amazon Technologies Inc.", "a00363": "Robert Bosch Healthcare GmbH", "a0043e": "Parker Hannifin Manufacturing Germany GmbH & Co. KG", @@ -26285,6 +26369,7 @@ "a83b76": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "a83ccb": "ROSSMA", "a83e0e": "HMD Global Oy", + "a83ed3": "HUAWEI TECHNOLOGIES CO.,LTD", "a83fa1": "IEEE Registration Authority", "a8400b": "Visteon Corporation", "a84025": "Oxide Computer Company", @@ -27124,7 +27209,7 @@ "b0d5cc": "Texas Instruments", "b0d7c5": "Logipix Ltd", "b0d7cc": "Tridonic GmbH & Co KG", - "b0d888": "Panasonic Corporation Automotive", + "b0d888": "Panasonic Automotive Systems Co.,Ltd", "b0da00": "CERA ELECTRONIQUE", "b0daf9": "ARRIS Group, Inc.", "b0dcef": "Intel Corporate", @@ -27256,6 +27341,7 @@ "b43db2": "Degreane Horizon", "b43e3b": "Viableware, Inc", "b440a4": "Apple, Inc.", + "b440dc": "Samsung Electronics Co.,Ltd", "b4417a": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", "b4430d": "Broadlink Pty Ltd", "b44326": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27267,6 +27353,7 @@ "b44bd6": "IEEE Registration Authority", "b44c3b": "Zhejiang Dahua Technology Co., Ltd.", "b44cc2": "NR ELECTRIC CO., LTD", + "b44d43": "IEEE Registration Authority", "b44f96": "Zhejiang Xinzailing Technology co., ltd", "b45062": "EmBestor Technology Inc.", "b451f9": "NB Software", @@ -27573,6 +27660,7 @@ "b84fd5": "Microsoft Corporation", "b85001": "Extreme Networks, Inc.", "b850d8": "Beijing Xiaomi Mobile Software Co., Ltd", + "b851a9": "Nokia", "b853ac": "Apple, Inc.", "b85510": "Ltd.", "b85600": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27622,6 +27710,7 @@ "b8797e": "Limited", "b87ac9": "Siemens Ltd.", "b87bc5": "Apple, Inc.", + "b87bd4": "Google, Inc.", "b87c6f": "Management Ltd.", "b87cd0": "Huawei Device Co., Ltd.", "b87cf2": "Extreme Networks, Inc.", @@ -27688,6 +27777,7 @@ "b8a535": "Technicolor CH USA Inc.", "b8a58d": "Axe Group Holdings Limited", "b8a8af": "Logic S.p.A.", + "b8ab61": "Cisco Meraki", "b8ab62": "Hui Zhou Gaoshengda Technology Co.,LTD", "b8ac6f": "Dell Inc.", "b8ad3e": "BLUECOM", @@ -28213,6 +28303,7 @@ "c04df7": "SERELEC", "c04e30": "Espressif Inc.", "c04e8a": "HUAWEI TECHNOLOGIES CO.,LTD", + "c05064": "SHENNAN CIRCUITS CO.,LTD", "c0515c": "zte corporation", "c0517e": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "c05336": "Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.", @@ -28220,6 +28311,7 @@ "c056e3": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "c057bc": "Avaya Inc", "c058a7": "Pico Systems Co., Ltd.", + "c05b44": "Beijing Xiaomi Mobile Software Co., Ltd", "c05e6f": "V. Stonkaus firma Kodinis Raktas", "c05e79": "SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD", "c06118": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -28340,6 +28432,7 @@ "c0c170": "Shenzhen SuperElectron Technology Co.,Ltd.", "c0c1c0": "Cisco-Linksys, LLC", "c0c3b6": "Automatic Systems", + "c0c4f9": "Qisda Corporation", "c0c520": "Ruckus Wireless", "c0c522": "ARRIS Group, Inc.", "c0c569": "SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD", @@ -28599,6 +28692,7 @@ "c4808a": "Cloud Diagnostics Canada ULC", "c4823f": "Fujian Newland Auto-ID Tech. Co,.Ltd.", "c4824e": "Changzhou Uchip Electronics Co., LTD.", + "c482e1": "Tuya Smart Inc.", "c4836f": "Ciena Corporation", "c48372": "IEEE Registration Authority", "c48466": "Apple, Inc.", @@ -28642,6 +28736,7 @@ "c4a559": "IEEE Registration Authority", "c4a64e": "Quectel Wireless Solutions Co.,Ltd.", "c4a72b": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", + "c4a816": "eero inc.", "c4a81d": "D-Link International", "c4aaa1": "SUMMIT DEVELOPMENT, spol.s r.o.", "c4aac4": "Zhejiang Dahua Technology Co., Ltd.", @@ -28692,6 +28787,7 @@ "c4d489": "JiangSu Joyque Information Industry Co.,Ltd", "c4d496": "Shenzhen Excelsecu Data Technology Co.,Ltd", "c4d655": "Tercel technology co.,ltd", + "c4d666": "Cisco Meraki", "c4d738": "Huawei Device Co., Ltd.", "c4d7fd": "Co., Ltd.", "c4d8f3": "iZotope", @@ -28966,6 +29062,7 @@ "c8b5ad": "Hewlett Packard Enterprise", "c8b5b7": "Apple, Inc.", "c8b6d3": "HUAWEI TECHNOLOGIES CO.,LTD", + "c8b6fe": "Fitbit, Inc.", "c8b82f": "eero inc.", "c8bae9": "QDIS", "c8bb81": "Huawei Device Co., Ltd.", @@ -29509,6 +29606,8 @@ "d05fb8": "Texas Instruments", "d05fce": "Hitachi Data Systems", "d0608c": "zte corporation", + "d06158": "HUAWEI TECHNOLOGIES CO.,LTD", + "d0622c": "Xi'an Yipu Telecom Technology Co.,Ltd.", "d062a0": "Co., Ltd.", "d0634d": "Meiko Maschinenbau GmbH & Co. KG", "d063b4": "SolidRun Ltd.", @@ -29535,6 +29634,7 @@ "d0768f": "Calix Inc.", "d076e7": "TP-LINK TECHNOLOGIES CO.,LTD.", "d07714": "Motorola Mobility LLC, a Lenovo Company", + "d077ce": "Edgecore Networks Corporation", "d07880": "Fiberhome Telecommunication Technologies Co.,LTD", "d07ab5": "HUAWEI TECHNOLOGIES CO.,LTD", "d07b6f": "Zhuhai Yunmai Technology Co.,Ltd", @@ -29679,6 +29779,7 @@ "d4000d": "Phoenix Broadband Technologies, LLC.", "d40057": "MC Technologies GmbH", "d40129": "Broadcom", + "d40145": "ATW TECHNOLOGY, INC.", "d4016d": "TP-LINK TECHNOLOGIES CO.,LTD.", "d4024a": "Delphian Systems LLC", "d404cd": "ARRIS Group, Inc.", @@ -29720,6 +29821,7 @@ "d4258b": "Intel Corporate", "d425cc": "IEEE Registration Authority", "d42751": "Infopia Co., Ltd", + "d42787": "Shanghai High-Flying Electronics Technology Co., Ltd", "d428b2": "ioBridge, Inc.", "d428d5": "TCT mobile ltd", "d429ea": "Zimory GmbH", @@ -29859,6 +29961,7 @@ "d481d7": "Dell Inc.", "d4823e": "Argosy Technologies, Ltd.", "d48304": "SHENZHEN FAST TECHNOLOGIES CO.,LTD", + "d48409": "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", "d48457": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "d48564": "Hewlett Packard", "d48660": "Arcadyan Corporation", @@ -30067,6 +30170,7 @@ "d81f12": "Tuya Smart Inc.", "d81fcc": "Brocade Communications Systems LLC", "d8209f": "Cubro Acronet GesmbH", + "d821da": "TECHNOLOGIES CORPORATION", "d822f4": "Avnet Silica", "d82477": "Universal Electric Corporation", "d824bd": "Cisco Systems, Inc", @@ -30414,6 +30518,7 @@ "dc2c6e": "Routerboard.com", "dc2d3c": "Huawei Device Co., Ltd.", "dc2dcb": "Beijing Unis HengYue Technology Co., Ltd.", + "dc2dde": "Ledworks SRL", "dc2e6a": "HCT. Co., Ltd.", "dc2f03": "Step forward Group Co., Ltd.", "dc309c": "Heyrex Limited", @@ -30481,6 +30586,7 @@ "dc6723": "barox Kommunikation GmbH", "dc680c": "Hewlett Packard Enterprise", "dc68eb": "Nintendo Co.,Ltd", + "dc69e2": "Samsung Electronics Co.,Ltd", "dc6ae7": "Xiaomi Communications Co Ltd", "dc6aea": "Infinix mobility limited", "dc6b12": "worldcns inc.", @@ -30514,6 +30620,7 @@ "dc8c1b": "vivo Mobile Communication Co., Ltd.", "dc8c37": "Cisco Systems, Inc", "dc8d8a": "Nokia Solutions and Networks GmbH & Co. KG", + "dc8d91": "Infinix mobility limited", "dc8db7": "ATW TECHNOLOGY, INC.", "dc8e95": "Silicon Laboratories", "dc9020": "RURU TEK PRIVATE LIMITED ", @@ -30523,6 +30630,7 @@ "dc962c": "NST Audio Ltd", "dc973a": "Verana Networks", "dc9758": "Sichuan AI-Link Technology Co., Ltd.", + "dc97e6": "Sagemcom Broadband SAS", "dc9840": "Microsoft Corporation", "dc9914": "HUAWEI TECHNOLOGIES CO.,LTD", "dc99fe": "Armatura LLC", @@ -30776,6 +30884,7 @@ "e051d8": "China Dragon Technology Limited", "e0553d": "Cisco Meraki", "e05597": "Emergent Vision Technologies Inc.", + "e05689": "Co Ltd", "e05694": "Yunhight Microelectronics", "e056f4": "AxesNetwork Solutions inc.", "e0589e": "Laerdal Medical", @@ -30799,6 +30908,7 @@ "e06781": "Dongguan Liesheng Electronic Co., Ltd.", "e067b3": "Shenzhen C-Data Technology Co., Ltd", "e0686d": "Raybased AB", + "e068ee": "Phyplus Microelectronics Limited", "e0693a": "Innophase Inc.", "e06995": "PEGATRON CORPORATION", "e069ba": "Cisco Systems, Inc", @@ -30861,6 +30971,7 @@ "e09db8": "PLANEX COMMUNICATIONS INC.", "e09dfa": "Wanan Hongsheng Electronic Co.Ltd", "e09f2a": "Iton Technology Corp. ", + "e0a129": "Extreme Networks, Inc.", "e0a198": "NOJA Power Switchgear Pty Ltd", "e0a1ce": "zte corporation", "e0a1d7": "SFR", @@ -31072,6 +31183,7 @@ "e442a6": "Intel Corporate", "e4434b": "Dell Inc.", "e444e5": "Extreme Networks, Inc.", + "e44519": "Beijing Xiaomi Electronics Co.,Ltd", "e446b0": "Fujitsu Client Computing Limited", "e446bd": "C&C TECHNIC TAIWAN CO., LTD.", "e446da": "Xiaomi Communications Co Ltd", @@ -31201,6 +31313,7 @@ "e4afa1": "HES-SO", "e4b005": "Beijing IQIYI Science & Technology Co., Ltd.", "e4b021": "Samsung Electronics Co.,Ltd", + "e4b224": "HUAWEI TECHNOLOGIES CO.,LTD", "e4b2fb": "Apple, Inc.", "e4b318": "Intel Corporate", "e4b503": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", @@ -31545,6 +31658,7 @@ "e8d322": "Cisco Systems, Inc", "e8d483": "ULTIMATE Europe Transportation Equipment GmbH", "e8d4e0": "Beijing BenyWave Technology Co., Ltd.", + "e8d52b": "Google, Inc.", "e8d765": "HUAWEI TECHNOLOGIES CO.,LTD", "e8d775": "HUAWEI TECHNOLOGIES CO.,LTD", "e8d819": "AzureWave Technology Inc.", @@ -31730,6 +31844,7 @@ "ec656e": "The Things Industries B.V.", "ec65cc": "Panasonic Automotive Systems Company of America", "ec66d1": "B&W Group LTD", + "ec6794": "Aruba, a Hewlett Packard Enterprise Company", "ec6881": "Palo Alto Networks", "ec6c9a": "Arcadyan Corporation", "ec6c9f": "Chengdu Volans Technology CO.,LTD", @@ -31815,6 +31930,7 @@ "ecadb8": "Apple, Inc.", "ecade0": "D-Link International", "ecaf97": "GIT", + "ecaff9": "Hailo Technologies Ltd.", "ecb0e1": "Ciena Corporation", "ecb106": "Acuro Networks, Inc", "ecb1d7": "Hewlett Packard", @@ -31929,6 +32045,7 @@ "f01e34": "ORICO Technologies Co., Ltd", "f01faf": "Dell Inc.", "f01fc7": "Apple, Inc.", + "f02178": "UNIONMAN TECHNOLOGY CO.,LTD", "f0219d": "Cal-Comp Electronics & Communications Company Ltd.", "f021e0": "eero inc.", "f0221d": "IEEE Registration Authority", @@ -32262,6 +32379,7 @@ "f4239c": "TECHNOLOGIES CORPORATION", "f42462": "Co., Ltd", "f42679": "Intel Corporate", + "f42756": "DASAN Newtork Solutions", "f42833": "MMPC Inc.", "f42853": "Ltd.", "f42896": "SPECTO PAINEIS ELETRONICOS LTDA", @@ -32269,6 +32387,7 @@ "f42a7d": "TP-LINK TECHNOLOGIES CO.,LTD.", "f42b48": "Ubiqam", "f42b7d": "Chipsguide technology CO.,LTD.", + "f42b8c": "Samsung Electronics Co.,Ltd", "f42c56": "SENOR TECH CO LTD", "f42d06": "zte corporation", "f42e7f": "Aruba, a Hewlett Packard Enterprise Company", @@ -32285,6 +32404,7 @@ "f438c1": "Huawei Device Co., Ltd.", "f43909": "Hewlett Packard", "f43bd8": "Intel Corporate", + "f43c3b": "HUNAN FN-LINK TECHNOLOGY LIMITED", "f43d80": "FAG Industrial Services GmbH", "f43e61": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", "f43e66": "Limited", @@ -32447,6 +32567,7 @@ "f4beec": "Apple, Inc.", "f4bf80": "HUAWEI TECHNOLOGIES CO.,LTD", "f4bfa8": "Juniper Networks", + "f4bfbb": "China Mobile Group Device Co.,Ltd.", "f4c02f": "BlueBite", "f4c114": "Technicolor CH USA Inc.", "f4c248": "Samsung Electronics Co.,Ltd", @@ -32585,6 +32706,7 @@ "f82387": "Shenzhen Horn Audio Co.,Ltd.", "f823b2": "HUAWEI TECHNOLOGIES CO.,LTD", "f82441": "Yeelink", + "f824db": "EntryPoint Networks, Inc", "f824e4": "Co., Ltd", "f82551": "Seiko Epson Corporation", "f8272e": "Mercku", @@ -32697,6 +32819,7 @@ "f86d73": "Zengge Co., Limited", "f86ecf": "Arcx Inc", "f86eee": "HUAWEI TECHNOLOGIES CO.,LTD", + "f86fb0": "TP-LINK TECHNOLOGIES CO.,LTD.", "f86fc1": "Apple, Inc.", "f86fde": "Shenzhen Goodix Technology Co.,Ltd.", "f8710c": "Xiaomi Communications Co Ltd", @@ -32747,6 +32870,7 @@ "f89522": "HUAWEI TECHNOLOGIES CO.,LTD", "f89550": "Proton Products Chengdu Ltd", "f895ea": "Apple, Inc.", + "f89725": "OPPLE LIGHTING CO., LTD", "f89753": "Huawei Device Co., Ltd.", "f897a9": "Ericsson AB", "f897cf": "DAESHIN-INFORMATION TECHNOLOGY CO., LTD.", @@ -32821,6 +32945,7 @@ "f8c397": "NZXT Corp. Ltd.", "f8c39e": "HUAWEI TECHNOLOGIES CO.,LTD", "f8c3cc": "Apple, Inc.", + "f8c4ae": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "f8c4f3": "Shanghai Infinity Wireless Technologies Co.,Ltd.", "f8c678": "Carefusion", "f8c96c": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -33019,6 +33144,7 @@ "fc589a": "Cisco Systems, Inc", "fc58df": "Interphone Service", "fc58fa": "Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.", + "fc59c0": "Arista Networks", "fc5a1d": "Hitron Technologies. Inc", "fc5b24": "Weibel Scientific A/S", "fc5b26": "MikroBits", @@ -33089,6 +33215,7 @@ "fc94e3": "Technicolor CH USA Inc.", "fc956a": "OCTAGON SYSTEMS CORP.", "fc9643": "Juniper Networks", + "fc97a8": "Cricut Inc.", "fc9947": "Cisco Systems, Inc", "fc9afa": "Motus Global Inc.", "fc9bc6": "Sumavision Technologies Co.,Ltd", From ba51fdfe9dd0b70419ed542b83e8bb51560b5af3 Mon Sep 17 00:00:00 2001 From: Michael Klose Date: Fri, 17 Mar 2023 18:50:03 +0100 Subject: [PATCH 08/37] Add Interface type for Cisco App-hosting port (#224) Closes #222 --- netutils/constants.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netutils/constants.py b/netutils/constants.py index a430c409..45c35892 100644 --- a/netutils/constants.py +++ b/netutils/constants.py @@ -4,6 +4,8 @@ # This variable provides mapping for known interface variants, to the associated long form. BASE_INTERFACES = { + "Ap": "AppGigabitEthernet", + "ap": "AppGigabitEthernet", "ATM": "ATM", "AT": "ATM", "B": "Bdi", @@ -167,6 +169,7 @@ # This variable maps a full interface name, to an opinionated shortened name. REVERSE_MAPPING = { + "AppGigabitEthernet": "Ap", "ATM": "At", "EOBC": "EO", "Ethernet": "Et", From 467b537399511048847d8c7ab69086041df8e913 Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Fri, 17 Mar 2023 13:53:32 -0400 Subject: [PATCH 09/37] Fix vlanlist_to_config failing on empty list (#219) --- netutils/vlan.py | 8 ++++++++ tests/unit/mock/vlan/to_config/empty_list.json | 4 ++++ tests/unit/mock/vlan/to_config/empty_list_received.json | 1 + tests/unit/test_vlan.py | 6 ++++++ 4 files changed, 19 insertions(+) create mode 100644 tests/unit/mock/vlan/to_config/empty_list.json create mode 100644 tests/unit/mock/vlan/to_config/empty_list_received.json diff --git a/netutils/vlan.py b/netutils/vlan.py index be2d68d3..7007c4ce 100644 --- a/netutils/vlan.py +++ b/netutils/vlan.py @@ -11,6 +11,7 @@ def vlanlist_to_config( first_line_len: int = 48, other_line_len: int = 44, min_grouping_size: int = 3, + return_empty: bool = False, ) -> t.List[str]: """Given a List of VLANs, build the IOS-like vlan list of configurations. @@ -19,6 +20,7 @@ def vlanlist_to_config( first_line_len: The maximum length of the line of the first element of within the return list. Defaults to 48. other_line_len: The maximum length of the line of all other elements of within the return list. Defaults to 44. min_grouping_size: The minimum consecutive VLANs to aggregate with a hyphen. Defaults to Cisco's minimum grouping size of 3. + return_empty: Whether or not to return an empty list instead of an `ValueError` when vlan_list is empty. Defaults to False. Returns: Sorted string list of integers according to IOS-like vlan list rules @@ -58,6 +60,12 @@ def build_final_vlan_cfg(vlan_cfg: str) -> t.List[str]: vlan_cfg_lines.append(line) return vlan_cfg_lines + if len(vlan_list) == 0 and return_empty: + return [] + + if len(vlan_list) == 0: + raise ValueError("The `vlan_list` argument provided is empty, a list of vlans is required, e.g. [10,20,30].") + # Fail if min_grouping_size is less than 1. if min_grouping_size < 1: raise ValueError("Minimum grouping size must be equal to or greater than one.") diff --git a/tests/unit/mock/vlan/to_config/empty_list.json b/tests/unit/mock/vlan/to_config/empty_list.json new file mode 100644 index 00000000..cdd9c44c --- /dev/null +++ b/tests/unit/mock/vlan/to_config/empty_list.json @@ -0,0 +1,4 @@ +{ + "vlan_list": [], + "return_empty": true +} diff --git a/tests/unit/mock/vlan/to_config/empty_list_received.json b/tests/unit/mock/vlan/to_config/empty_list_received.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/tests/unit/mock/vlan/to_config/empty_list_received.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/tests/unit/test_vlan.py b/tests/unit/test_vlan.py index a811caf5..5b26e3e1 100644 --- a/tests/unit/test_vlan.py +++ b/tests/unit/test_vlan.py @@ -28,6 +28,12 @@ def test_to_config_failure(sent_data): vlan.vlanlist_to_config("switchport trunk allowed vlan 1025,1069-1072", min_grouping_size=0) +@pytest.mark.parametrize("sent_data", [{"vlan_list": []}]) +def test_to_empty_error(sent_data): + with pytest.raises(ValueError, match=r"The `vlan_list` argument provided*"): + vlan.vlanlist_to_config(**sent_data) + + @pytest.mark.parametrize("_file", glob.glob(f"{MOCK_DIR}/to_list/*{TXT_FILE}")) def test_to_list_success(_file, get_text_data, get_json_data): truncate_file = os.path.join(MOCK_DIR, _file[: -len(TXT_FILE)]) From 41c074297f93e59a19b23cf47cf6846dc870c225 Mon Sep 17 00:00:00 2001 From: Michael Klose Date: Fri, 17 Mar 2023 19:03:04 +0100 Subject: [PATCH 10/37] Interface abbreviation for TwoGigabitEthernet (#223) * Interface abbreviation for TwoGigabitEthernet Fixes #221 * Added tests for TwoGigabitEthernet * Fixed linting --- netutils/constants.py | 2 +- tests/unit/test_interface.py | 62 ++++++++++++++++++++++++++++++------ 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/netutils/constants.py b/netutils/constants.py index 45c35892..a94b1ad2 100644 --- a/netutils/constants.py +++ b/netutils/constants.py @@ -188,7 +188,7 @@ "Sync": "Sy", "TenGigabitEthernet": "Te", "Tunnel": "Tu", - "TwoGigabitEthernet": "Two", + "TwoGigabitEthernet": "Tw", "TwentyFiveGigE": "Twe", "Virtual-Access": "Vi", "Virtual-Template": "Vt", diff --git a/tests/unit/test_interface.py b/tests/unit/test_interface.py index c6b94b3c..75e624c4 100644 --- a/tests/unit/test_interface.py +++ b/tests/unit/test_interface.py @@ -18,6 +18,11 @@ "received": "GigabitEthernet1/0/1", }, {"sent": {"interface": "Gi1/0/1"}, "received": "GigabitEthernet1/0/1"}, + { + "sent": {"interface": "TwoGigabitEthernet1/0/1"}, + "received": "TwoGigabitEthernet1/0/1", + }, + {"sent": {"interface": "Tw1/0/1"}, "received": "TwoGigabitEthernet1/0/1"}, { "sent": {"interface": "SuperFastEth 1/0/1", "addl_name_map": {"SuperFastEth": "SuperFastEthernet"}}, "received": "SuperFastEthernet1/0/1", @@ -35,7 +40,10 @@ "received": ["GigabitEthernet1/0/1", "Port-channel40", "Loopback10"], }, { - "sent": {"interfaces": ["Gi1/0/1", "Gi1/0/3", "Gi1/0/2", "Po40", "Po160", "Lo10"], "order": "alphabetical"}, + "sent": { + "interfaces": ["Tw1/0/1", "Gi1/0/1", "Gi1/0/3", "Gi1/0/2", "Po40", "Po160", "Lo10"], + "order": "alphabetical", + }, "received": [ "GigabitEthernet1/0/1", "GigabitEthernet1/0/2", @@ -43,11 +51,22 @@ "Loopback10", "Port-channel40", "Port-channel160", + "TwoGigabitEthernet1/0/1", ], }, { "sent": { - "interfaces": ["Gi1/0/1", "Gi1/0/3", "Gi1/0/3.100", "Gi1/0/2", "Gi1/0/2.50", "Po40", "Po160", "Lo10"], + "interfaces": [ + "Tw1/0/1", + "Gi1/0/1", + "Gi1/0/3", + "Gi1/0/3.100", + "Gi1/0/2", + "Gi1/0/2.50", + "Po40", + "Po160", + "Lo10", + ], "order": "alphabetical", }, "received": [ @@ -59,15 +78,17 @@ "Loopback10", "Port-channel40", "Port-channel160", + "TwoGigabitEthernet1/0/1", ], }, { "sent": { - "interfaces": ["Gi1/0/1", "Gi1/0/3", "Gi1/0/2", "Po40", "Po160", "Lo10"], + "interfaces": ["Tw1/0/1", "Gi1/0/1", "Gi1/0/3", "Gi1/0/2", "Po40", "Po160", "Lo10"], "order": "alphabetical", "reverse": True, }, "received": [ + "TwoGigabitEthernet1/0/1", "Port-channel40", "Port-channel160", "Loopback10", @@ -78,11 +99,22 @@ }, { "sent": { - "interfaces": ["Gi1/0/1", "Gi1/0/3", "Gi1/0/3.100", "Gi1/0/2", "Gi1/0/2.50", "Po40", "Po160", "Lo10"], + "interfaces": [ + "Tw1/0/1", + "Gi1/0/1", + "Gi1/0/3", + "Gi1/0/3.100", + "Gi1/0/2", + "Gi1/0/2.50", + "Po40", + "Po160", + "Lo10", + ], "order": "alphabetical", "reverse": True, }, "received": [ + "TwoGigabitEthernet1/0/1", "Port-channel40", "Port-channel160", "Loopback10", @@ -112,6 +144,11 @@ "received": "Gi1/0/1", }, {"sent": {"interface": "Gi1/0/1"}, "received": "Gi1/0/1"}, + { + "sent": {"interface": "TwoGigabitEthernet1/0/1"}, + "received": "Tw1/0/1", + }, + {"sent": {"interface": "Tw1/0/1"}, "received": "Tw1/0/1"}, { "sent": { "interface": "SuperFastEth 1/0/1", @@ -227,6 +264,7 @@ "Fa1/42", "Gi0/0/2", "Gi1/0/1", + "Tw1/0/1", "Te1/0/1", ], "received": [ @@ -267,6 +305,7 @@ "Port-channel160", "Te1/0/1", "Te/42", + "Tw1/0/1", "Vlan42", "Zf.42", "loopback99", @@ -287,12 +326,13 @@ "received": ["Gi1/0/1", "Gi1/0/2"], }, { - "sent": {"interfaces": ["GigabitEthernet1/0/1", "Po40", "Loopback10"]}, - "received": ["Gi1/0/1", "Po40", "Lo10"], + "sent": {"interfaces": ["GigabitEthernet1/0/1", "TwoGigabitEthernet1/0/1", "Po40", "Loopback10"]}, + "received": ["Gi1/0/1", "Tw1/0/1", "Po40", "Lo10"], }, { "sent": { "interfaces": [ + "TwoGigabitEthernet1/0/1", "GigabitEthernet1/0/1", "GigabitEthernet1/0/3", "GigabitEthernet1/0/2", @@ -302,11 +342,12 @@ ], "order": "alphabetical", }, - "received": ["Gi1/0/1", "Gi1/0/2", "Gi1/0/3", "Lo10", "Po40", "Po160"], + "received": ["Gi1/0/1", "Gi1/0/2", "Gi1/0/3", "Lo10", "Po40", "Po160", "Tw1/0/1"], }, { "sent": { "interfaces": [ + "TwoGigabitEthernet1/0/1", "GigabitEthernet1/0/1", "GigabitEthernet1/0/3", "GigabitEthernet1/0/3.100", @@ -318,11 +359,12 @@ ], "order": "alphabetical", }, - "received": ["Gi1/0/1", "Gi1/0/2", "Gi1/0/2.50", "Gi1/0/3", "Gi1/0/3.100", "Lo10", "Po40", "Po160"], + "received": ["Gi1/0/1", "Gi1/0/2", "Gi1/0/2.50", "Gi1/0/3", "Gi1/0/3.100", "Lo10", "Po40", "Po160", "Tw1/0/1"], }, { "sent": { "interfaces": [ + "TwoGigabitEthernet1/0/1", "GigabitEthernet1/0/1", "GigabitEthernet1/0/3", "GigabitEthernet1/0/2", @@ -333,11 +375,12 @@ "order": "alphabetical", "reverse": True, }, - "received": ["Po40", "Po160", "Lo10", "Gi1/0/1", "Gi1/0/2", "Gi1/0/3"], + "received": ["Tw1/0/1", "Po40", "Po160", "Lo10", "Gi1/0/1", "Gi1/0/2", "Gi1/0/3"], }, { "sent": { "interfaces": [ + "TwoGigabitEthernet1/0/1", "GigabitEthernet1/0/1", "GigabitEthernet1/0/3", "GigabitEthernet1/0/3.100", @@ -351,6 +394,7 @@ "reverse": True, }, "received": [ + "Tw1/0/1", "Po40", "Po160", "Lo10", From 46b812cb7d3afe30f309bebbc3c2db68bca1cc7a Mon Sep 17 00:00:00 2001 From: Boabdil Perez <37556004+boabdilperez@users.noreply.github.com> Date: Sat, 25 Mar 2023 13:54:00 -0500 Subject: [PATCH 11/37] New lib mapper to translate between normalized network OS names and names used by hier_config (#245) * Added new lib mapper for hier_config to translate between the verbiage used in hier_config and that in other network automation utilities. * Created a new helper function to return the proper upgrade path for PANOS firewall firmware updates. * Revert "Created a new helper function to return the proper upgrade path for PANOS firewall firmware updates." This reverts commit e9c3639d049fe57075b642dbc973debeae8c50a4. --- development_scripts.py | 12 ++++++++++++ docs/user/lib_mapper/hierconfig.md | 7 +++++++ docs/user/lib_mapper/hierconfig_reverse.md | 7 +++++++ docs/user/lib_use_cases_lib_mapper.md | 5 +++++ netutils/lib_mapper.py | 16 ++++++++++++++++ tests/unit/test_lib_mapper.py | 5 ++++- 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 docs/user/lib_mapper/hierconfig.md create mode 100644 docs/user/lib_mapper/hierconfig_reverse.md diff --git a/development_scripts.py b/development_scripts.py index c77fc8a0..326633a0 100644 --- a/development_scripts.py +++ b/development_scripts.py @@ -106,6 +106,18 @@ "_dict": lib_mapper.SCRAPLI_LIB_MAPPER_REVERSE, "_file": "docs/user/lib_mapper/scrapli_reverse.md", }, + "hierconfig": { + "header_src": "HIERCONFIG", + "header_dst": "NORMALIZED", + "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER, + "_file": "docs/user/lib_mapper/hierconfig.md", + }, + "hierconfig_reverse": { + "header_src": "NORMALIZED", + "header_dst": "HIERCONFIG", + "_dict": lib_mapper.HIERCONFIG_LIB_MAPPER_REVERSE, + "_file": "docs/user/lib_mapper/hierconfig_reverse.md", + }, }, "PARSER_MAPPER_TEMPLATE": { "default": { diff --git a/docs/user/lib_mapper/hierconfig.md b/docs/user/lib_mapper/hierconfig.md new file mode 100644 index 00000000..32eb8cff --- /dev/null +++ b/docs/user/lib_mapper/hierconfig.md @@ -0,0 +1,7 @@ +| HIERCONFIG | | NORMALIZED | +| ---------- | -- | ------ | +| eos | → | arista_eos | +| ios | → | cisco_ios | +| iosxe | → | cisco_xe | +| iosxr | → | cisco_xr | +| nxos | → | cisco_nxos | \ No newline at end of file diff --git a/docs/user/lib_mapper/hierconfig_reverse.md b/docs/user/lib_mapper/hierconfig_reverse.md new file mode 100644 index 00000000..2aaa2afe --- /dev/null +++ b/docs/user/lib_mapper/hierconfig_reverse.md @@ -0,0 +1,7 @@ +| NORMALIZED | | HIERCONFIG | +| ---------- | -- | ------ | +| arista_eos | → | eos | +| cisco_ios | → | ios | +| cisco_nxos | → | nxos | +| cisco_xe | → | iosxe | +| cisco_xr | → | iosxr | \ No newline at end of file diff --git a/docs/user/lib_use_cases_lib_mapper.md b/docs/user/lib_use_cases_lib_mapper.md index f73e4e24..8987d1de 100644 --- a/docs/user/lib_use_cases_lib_mapper.md +++ b/docs/user/lib_use_cases_lib_mapper.md @@ -86,3 +86,8 @@ Another use case could be using an example like the above in an Ansible filter. ## Reverse Scrapli Mapper --8<-- "docs/user/lib_mapper/scrapli_reverse.md" +## Hier Config Mapper +--8<-- "docs/user/lib_mapper/hierconfig.md" + +## Reverse Hier Config Mapper +--8<-- "docs/user/lib_mapper/hierconfig_reverse.md" \ No newline at end of file diff --git a/netutils/lib_mapper.py b/netutils/lib_mapper.py index 5fd9310f..e2154296 100644 --- a/netutils/lib_mapper.py +++ b/netutils/lib_mapper.py @@ -202,6 +202,14 @@ "aruba_aoscx": "aruba_aoscx", } +HIERCONFIG_LIB_MAPPER = { + "ios": "cisco_ios", + "iosxe": "cisco_xe", + "iosxr": "cisco_xr", + "nxos": "cisco_nxos", + "eos": "arista_eos", +} + NAPALM_LIB_MAPPER_REVERSE = { "arista_eos": "eos", "brocade_vyos": "vyos", @@ -277,6 +285,14 @@ "aruba_aoscx": "aruba_aoscx", } +HIERCONFIG_LIB_MAPPER_REVERSE = { + "cisco_ios": "ios", + "cisco_xe": "iosxe", + "cisco_xr": "iosxr", + "cisco_nxos": "nxos", + "arista_eos": "eos", +} + # Deep copy the reverse, where there is no actual translation happening. NETMIKO_LIB_MAPPER_REVERSE = copy.deepcopy(NETMIKO_LIB_MAPPER) NTCTEMPLATES_LIB_MAPPER_REVERSE = copy.deepcopy(NTCTEMPLATES_LIB_MAPPER) diff --git a/tests/unit/test_lib_mapper.py b/tests/unit/test_lib_mapper.py index 72a86137..e0fa2e5c 100644 --- a/tests/unit/test_lib_mapper.py +++ b/tests/unit/test_lib_mapper.py @@ -12,13 +12,16 @@ def test_lib_mapper(): assert len(lib_mapper.NAPALM_LIB_MAPPER.keys()) > 4 assert len(lib_mapper.PYATS_LIB_MAPPER.keys()) > 10 assert len(lib_mapper.PYNTC_LIB_MAPPER.keys()) > 5 + assert len(lib_mapper.HIERCONFIG_LIB_MAPPER.keys()) > 4 assert lib_mapper.ANSIBLE_LIB_MAPPER["cisco.ios.ios"] == "cisco_ios" assert lib_mapper.NAPALM_LIB_MAPPER["ios"] == "cisco_ios" assert lib_mapper.PYNTC_LIB_MAPPER["arista_eos_eapi"] == "arista_eos" assert lib_mapper.NAPALM_LIB_MAPPER_REVERSE[lib_mapper.ANSIBLE_LIB_MAPPER["cisco.ios.ios"]] == "ios" + assert lib_mapper.HIERCONFIG_LIB_MAPPER["ios"] == "cisco_ios" + assert lib_mapper.HIERCONFIG_LIB_MAPPER_REVERSE[lib_mapper.HIERCONFIG_LIB_MAPPER["ios"]] == "ios" -@pytest.mark.parametrize("lib", ["ANSIBLE", "NETMIKO", "NTCTEMPLATES", "NAPALM", "PYATS", "PYNTC"]) +@pytest.mark.parametrize("lib", ["ANSIBLE", "NETMIKO", "NTCTEMPLATES", "NAPALM", "PYATS", "PYNTC", "HIERCONFIG"]) def test_lib_mapper_reverse(lib): mapper = dict((v, k) for k, v in getattr(lib_mapper, f"{lib}_LIB_MAPPER").items()) rev_mapper = getattr(lib_mapper, f"{lib}_LIB_MAPPER_REVERSE") From 1312c08d58a74ebb63f36ea35d03bec7747628d0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 16:37:39 -0500 Subject: [PATCH 12/37] Flat: latest data (2023-03-23T08:02:56.545Z) (#246) { "date": "2023-03-23T08:02:56.545Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 1260, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index cd27ce7a..d7579151 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -13556,6 +13556,7 @@ "087045": "Apple, Inc.", "087190": "Intel Corporate", "087402": "Apple, Inc.", + "087458": "Fiberhome Telecommunication Technologies Co.,LTD", "0874f6": "Winterhalter Gastronom GmbH", "087572": "Obelux Oy", "087618": "ViE Technologies Sdn. Bhd.", @@ -14438,6 +14439,7 @@ "1430c6": "Motorola Mobility LLC, a Lenovo Company", "1432d1": "Samsung Electronics Co.,Ltd", "143365": "TEM Mobile Limited", + "143375": "Zyxel Communications Corporation", "1434f6": "LV SOLUTION SDN. BHD.", "14358b": "Mediabridge Products, LLC.", "1435b3": "Future Designs, Inc.", @@ -16371,6 +16373,7 @@ "2c3afd": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "2c3b70": "AzureWave Technology Inc.", "2c3bfd": "Netstor Technology Co., Ltd.", + "2c3c05": "Marinesync Corp", "2c3ebf": "HOSIN Global Electronics Co., Ltd.", "2c3ecf": "Cisco Systems, Inc", "2c3f0b": "Cisco Meraki", @@ -16606,6 +16609,7 @@ "2cfdb3": "Tonly Technology Co. Ltd ", "2cfdb4": "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd", "2cfe4f": "Xiaomi Communications Co Ltd", + "2cfee2": "Qingdao Hisense Communications Co.,Ltd.", "2cff65": "Oki Electric Industry Co., Ltd.", "2cffee": "vivo Mobile Communication Co., Ltd.", "3003c8": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", @@ -16985,6 +16989,7 @@ "34466f": "HiTEM Engineering", "3446ec": "Huawei Device Co., Ltd.", "34479a": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", + "3447d4": "Chengdu Quanjing Intelligent Technology Co.,Ltd", "3448ed": "Dell Inc.", "34495b": "Sagemcom Broadband SAS", "344ac3": "HuNan ZiKun Information Technology CO., Ltd", @@ -17542,6 +17547,7 @@ "38f557": "JOLATA, INC.", "38f597": "home2net GmbH", "38f601": "Solid State Storage Technology Corporation", + "38f6cf": "zte corporation", "38f708": "National Resource Management, Inc.", "38f73d": "Amazon Technologies Inc.", "38f7b2": "SEOJUN ELECTRIC", @@ -19652,6 +19658,7 @@ "5474e6": "Webtech Wireless", "547595": "TP-LINK TECHNOLOGIES CO.,LTD.", "5475d0": "Cisco Systems, Inc", + "5476b2": "Raisecom Technology CO., LTD", "547787": "Earda Technologies co Ltd", "54778a": "Hewlett Packard Enterprise", "54781a": "Cisco Systems, Inc", @@ -20108,6 +20115,7 @@ "5c0ce6": "Nintendo Co.,Ltd", "5c0e8b": "Extreme Networks, Inc.", "5c0ffb": "Amino Communications Ltd", + "5c101e": "zte corporation", "5c10c5": "Samsung Electronics Co.,Ltd", "5c1193": "Seal One AG", "5c1437": "Thyssenkrupp Aufzugswerke GmbH", @@ -20650,6 +20658,7 @@ "60beb4": "S-Bluetech co., limited", "60beb5": "Motorola Mobility LLC, a Lenovo Company", "60bec4": "Apple, Inc.", + "60c01e": "V&G Information System Co.,Ltd", "60c0bf": "ON Semiconductor", "60c1cb": "Fujian Great Power PLC Equipment Co.,Ltd", "60c397": "2Wire Inc", @@ -20692,6 +20701,7 @@ "60db15": "New H3C Technologies Co., Ltd", "60db2a": "HNS", "60db98": "Calix Inc.", + "60dbef": "Unify Software and Solutions GmbH & Co. KG", "60dc81": "AltoBeam Inc.", "60dd70": "Apple, Inc.", "60dd8e": "Intel Corporate", @@ -21065,6 +21075,7 @@ "64f970": "Kenade Electronics Technology Co.,LTD.", "64f987": "Avvasi Inc.", "64f9c0": "ANALOG DEVICES", + "64fb01": "Zhongshan Camry Electronic Company Limited", "64fb50": "RoomReady/Zdi, Inc.", "64fb81": "IEEE Registration Authority", "64fb92": "PPC Broadband Inc.", @@ -21201,6 +21212,7 @@ "68784c": "Nortel Networks", "687912": "IEEE Registration Authority", "687924": "ELS-GmbH & Co. KG", + "6879dd": "Ltd", "6879ed": "SHARP Corporation", "687a64": "Intel Corporate", "687cc8": "Measurement Systems S. de R.L.", @@ -21462,6 +21474,7 @@ "6c442a": "HUAWEI TECHNOLOGIES CO.,LTD", "6c4598": "Antex Electronic Corp.", "6c4760": "Sunitec Enterprise Co.,Ltd", + "6c48a6": "Fiberhome Telecommunication Technologies Co.,LTD", "6c49c1": "o2ones Co., Ltd.", "6c4a39": "BITA", "6c4a74": "AERODISK LLC", @@ -22877,6 +22890,7 @@ "7c696b": "Atmosic Technologies", "7c69f6": "Cisco Systems, Inc", "7c6a60": "China Mobile Group Device Co.,Ltd.", + "7c6a8a": "SINOBONDER Technology Co., Ltd.", "7c6ab3": "IBC TECHNOLOGIES INC.", "7c6ac3": "GatesAir, Inc", "7c6adb": "SafeTone Technology Co.,Ltd", @@ -23417,6 +23431,7 @@ "840b7c": "Hitron Technologies. Inc", "840bbb": "MitraStar Technology Corp.", "840d8e": "Espressif Inc.", + "840f2a": "Jiangxi Risound Electronics Co., LTD", "840f45": "Shanghai GMT Digital Technologies Co., Ltd", "84100d": "Motorola Mobility LLC, a Lenovo Company", "84119e": "Samsung Electronics Co.,Ltd", @@ -23615,6 +23630,7 @@ "84ab1a": "Apple, Inc.", "84ab26": "Tiinlab Corporation", "84ac16": "Apple, Inc.", + "84ac60": "Guangxi Hesheng Electronics Co., Ltd.", "84aca4": "Beijing Novel Super Digital TV Technology Co., Ltd", "84acfb": "Crouzet Automatismes", "84ad58": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23872,6 +23888,7 @@ "88795b": "Konka Group Co., Ltd.", "88797e": "Motorola Mobility LLC, a Lenovo Company", "887a31": "Velankani Electronics Pvt. Ltd.", + "887b2c": "zte corporation", "887e25": "Extreme Networks, Inc.", "887f03": "Comper Technology Investment Limited", "8881b9": "Huawei Device Co., Ltd.", @@ -24473,12 +24490,14 @@ "905446": "TES ELECTRONIC SOLUTIONS", "9055ae": "Ericsson, EAB/RWI/K", "9055de": "Fiberhome Telecommunication Technologies Co.,LTD", + "905607": "Sichuan AI-Link Technology Co., Ltd.", "905682": "Lenbrook Industries Limited", "905692": "Autotalks Ltd.", "9056fc": "TECNO MOBILE LIMITED", "905851": "Technicolor CH USA Inc.", "90593c": "AZ-TECHNOLOGY SDN BHD", "9059af": "Texas Instruments", + "905a08": "Super Micro Computer, Inc.", "905c34": "Sirius Electronic Systems Srl", "905c44": "Compal Broadband Networks, Inc.", "905d7c": "New H3C Technologies Co., Ltd", @@ -24508,6 +24527,7 @@ "906fa9": "NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.", "907025": "Garea Microsys Co.,Ltd.", "907065": "Texas Instruments", + "9070d3": "Fiberhome Telecommunication Technologies Co.,LTD", "907240": "Apple, Inc.", "907282": "Sagemcom Broadband SAS", "90735a": "Motorola Mobility LLC, a Lenovo Company", @@ -24668,6 +24688,7 @@ "90eb50": "Cisco Systems, Inc", "90ec50": "C.O.B.O. SPA", "90ec77": "silicom", + "90ece3": "Nokia", "90ecea": "Apple, Inc.", "90eec7": "Samsung Electronics Co.,Ltd", "90eed9": "UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA", @@ -25537,6 +25558,7 @@ "9ca10a": "SCLE SFE", "9ca134": "Nike, Inc.", "9ca2f4": "TP-Link Corporation Limited", + "9ca389": "Nokia", "9ca3a9": "Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd", "9ca3ba": "SAKURA Internet Inc.", "9ca513": "Samsung Electronics Co.,Ltd", @@ -26704,6 +26726,7 @@ "ac4bc8": "Juniper Networks", "ac4ca5": "Technicolor CH USA Inc.", "ac4d16": "Texas Instruments", + "ac4dd9": "Extreme Networks, Inc.", "ac4e2e": "Shenzhen JingHanDa Electronics Co.Ltd", "ac4e65": "Fiberhome Telecommunication Technologies Co.,LTD", "ac4e91": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -28637,6 +28660,7 @@ "c45d83": "Samsung Electronics Co.,Ltd", "c45dd8": "HDMI Forum", "c45e5c": "HUAWEI TECHNOLOGIES CO.,LTD", + "c46026": "SKY UK LIMITED", "c46044": "Everex Electronics Limited", "c4618b": "Apple, Inc.", "c461c7": "Microsoft Corporation", @@ -29041,6 +29065,7 @@ "c8a1ba": "Neul Ltd", "c8a2ce": "Oasis Media Systems LLC", "c8a40d": "Cooler Master Technology Inc", + "c8a608": "Ruckus Wireless", "c8a620": "Nebula, Inc", "c8a70a": "Verizon Business", "c8a729": "SYStronics Co., Ltd.", @@ -31539,6 +31564,7 @@ "e874c7": "Sentinhealth", "e874e6": "ADB Broadband Italia", "e8757f": "Co., Ltd", + "e87640": "SKY UK LIMITED", "e87829": "IEEE Registration Authority", "e87865": "Apple, Inc.", "e878a1": "BEOVIEW INTERCOM DOO", @@ -32779,6 +32805,7 @@ "f85329": "HUAWEI TECHNOLOGIES CO.,LTD", "f854af": "ECI Telecom Ltd.", "f854b8": "Amazon Technologies Inc.", + "f854f6": "AzureWave Technology Inc.", "f85548": "Texas Instruments", "f855cd": "Visteon Corporation", "f856c3": "zte corporation", @@ -33256,6 +33283,7 @@ "fcb0c4": "Shanghai DareGlobal Technologies Co.,Ltd", "fcb0de": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "fcb10d": "Shenzhen Tian Kun Technology Co.,LTD.", + "fcb2d6": "CIG SHANGHAI CO LTD", "fcb3bc": "Intel Corporate", "fcb4e6": "ASKEY COMPUTER CORP", "fcb58a": "Wapice Ltd.", From 2db98a355a124a7cafdfe071519893876ebce24f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 15:07:27 -0500 Subject: [PATCH 13/37] Flat: latest data (2023-04-06T08:03:03.590Z) (#255) { "date": "2023-04-06T08:03:03.590Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 2914, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 106 +++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 18 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index d7579151..c7a4f0b5 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -2204,7 +2204,7 @@ "0008b6": "RouteFree, Inc.", "0008b7": "HIT Incorporated", "0008b8": "E.F. Johnson", - "0008b9": "Kaonmedia CO., LTD.", + "0008b9": "Kaon Group Co., Ltd.", "0008ba": "Erskine Systems Ltd", "0008bb": "NetExcell", "0008bc": "Ilevo AB", @@ -4478,7 +4478,7 @@ "0011a6": "Sypixx Networks", "0011a7": "Infilco Degremont Inc.", "0011a8": "Quest Technologies", - "0011a9": "MOIMSTONE Co., LTD", + "0011a9": "Nurivoice Co., Ltd", "0011aa": "Uniclass Technology, Co., LTD", "0011ab": "TRUSTABLE TECHNOLOGY CO.,LTD.", "0011ac": "Simtec Electronics", @@ -13828,11 +13828,13 @@ "0c62a6": "Hui Zhou Gaoshengda Technology Co.,LTD", "0c63fc": "Nanjing Signway Technology Co., Ltd", "0c6422": "Beijing Wiseasy Technology Co.,Ltd.", + "0c6714": "TECHNOLOGIES CORPORATION", "0c6803": "Cisco Systems, Inc", "0c6abc": "Fiberhome Telecommunication Technologies Co.,LTD", "0c6ae6": "Stanley Security Solutions", "0c6e4f": "PrimeVOLT Co., Ltd.", "0c6f9c": "Shaw Communications Inc.", + "0c7043": "Sony Interactive Entertainment Inc.", "0c704a": "HUAWEI TECHNOLOGIES CO.,LTD", "0c715d": "Samsung Electronics Co.,Ltd", "0c718c": "TCT mobile ltd", @@ -14083,6 +14085,7 @@ "1027be": "TVIP", "1027f5": "TP-Link Corporation Limited", "102831": "Morion Inc.", + "102834": "SALZ Automation GmbH", "102959": "Apple, Inc.", "1029ab": "Samsung Electronics Co.,Ltd", "102ab3": "Xiaomi Communications Co Ltd", @@ -14533,6 +14536,7 @@ "148473": "Cisco Systems, Inc", "148477": "New H3C Technologies Co., Ltd", "148509": "Apple, Inc.", + "148554": "Earda Technologies co Ltd", "14857f": "Intel Corporate", "148692": "TP-LINK TECHNOLOGIES CO.,LTD.", "14876a": "Apple, Inc.", @@ -14740,7 +14744,7 @@ "1832a2": "LAON TECHNOLOGY CO., LTD.", "18339d": "Cisco Systems, Inc", "183451": "Apple, Inc.", - "1834af": "Kaonmedia CO., LTD.", + "1834af": "Kaon Group Co., Ltd.", "1835d1": "ARRIS Group, Inc.", "183672": "Shaoxing ShunChuang Technology CO.,LTD", "1836fc": "Elecsys International Corporation", @@ -14765,6 +14769,7 @@ "18422f": "Alcatel Lucent", "1842d4": "Wuhan Hosan Telecommunication Technology Co.,Ltd", "184462": "Riava Networks, Inc.", + "1844cf": "B+L Industrial Measurements GmbH", "1844e6": "zte corporation", "184516": "Texas Instruments", "184593": "Taicang T&W Electronics", @@ -15011,6 +15016,7 @@ "18f76b": "Zhejiang Winsight Technology CO.,LTD", "18f87a": "i3 International Inc.", "18f87f": "Wha Yu Industrial Co., Ltd.", + "18f935": "Cisco Systems, Inc", "18f9c4": "BAE Systems", "18fa6f": "ISC applied systems corp", "18fab7": "Apple, Inc.", @@ -15191,6 +15197,7 @@ "1c7b23": "Qingdao Hisense Communications Co.,Ltd.", "1c7c11": "EID ", "1c7c45": "Vitek Industrial Video Products, Inc.", + "1c7c98": "NEC Platforms, Ltd.", "1c7cc7": "Coriant GmbH", "1c7d22": "FUJIFILM Business Innovation Corp.", "1c7e51": "3bumen.com", @@ -15371,6 +15378,7 @@ "2016b9": "Intel Corporate", "2016d8": "Liteon Technology Corporation", "201742": "LG Electronics", + "201746": "Paradromics, Inc.", "20180e": "Shenzhen Sunchip Technology Co., Ltd", "201a06": "CO., LTD. ", "201a94": "Apple, Inc.", @@ -15928,7 +15936,7 @@ "24e3de": "China Telecom Fufu Information Technology Co., Ltd.", "24e43f": "Wenzhou Kunmei Communication Technology Co.,Ltd.", "24e4c8": "Fiberhome Telecommunication Technologies Co.,LTD", - "24e4ce": "Kaonmedia CO., LTD.", + "24e4ce": "Kaon Group Co., Ltd.", "24e50f": "Google, Inc.", "24e5aa": "Philips Oral Healthcare, Inc.", "24e6ba": "JSC Zavod im. Kozitsky", @@ -16254,6 +16262,7 @@ "28e98e": "Mitsubishi Electric Corporation", "28ea0b": "Microsoft Corporation", "28ea2d": "Apple, Inc.", + "28eb0a": "Rolling Wireless S.a.r.l. Luxembourg", "28eba6": "Nex-T LLC", "28ec22": "eero inc.", "28ec95": "Apple, Inc.", @@ -16657,6 +16666,7 @@ "302952": "Hillstone Networks Inc", "3029be": "Shanghai MRDcom Co.,Ltd", "302bdc": "Top-Unum Electronics Co., LTD", + "302f1e": "SIEMENS AG", "30317d": "Hosiden Corporation", "303180": "Shenzhen Skyworth Digital Technology CO., Ltd", "303235": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", @@ -17186,6 +17196,7 @@ "34d737": "IBG Industriebeteiligungsgesellschaft mbH &b Co. KG", "34d772": "Xiamen Yudian Automation Technology Co., Ltd ", "34d7b4": "Tributary Systems, Inc.", + "34d856": "Shenzhen Skyworth Digital Technology CO., Ltd", "34d954": "WiBotic Inc.", "34dab7": "zte corporation", "34dac1": "Co., Ltd.", @@ -17425,6 +17436,7 @@ "3891b7": "Cisco Systems, Inc", "3891d5": "Hangzhou H3C Technologies Co., Limited", "3891fb": "Xenox Holding BV", + "38922e": "ArrayComm", "389461": "Sdn. Bhd.", "389496": "Samsung Electronics Co.,Ltd", "3894e0": "Syrotech Networks. Ltd.", @@ -17583,6 +17595,7 @@ "3c0754": "Apple, Inc.", "3c0771": "Sony Corporation", "3c081e": "Beijing Yupont Electric Power Technology Co.,Ltd", + "3c08cd": "Juniper Networks", "3c08f6": "Cisco Systems, Inc", "3c096d": "Powerhouse Dynamics", "3c0b4f": "Yandex Services AG", @@ -18050,6 +18063,7 @@ "408256": "Continental Automotive GmbH", "40831d": "Apple, Inc.", "4083de": "Zebra Technologies Inc", + "408432": "Microchip Technology Inc.", "408493": "Clavister AB", "40862e": "JDM MOBILE INTERNET SOLUTION CO., LTD.", "408805": "Motorola Mobility LLC, a Lenovo Company", @@ -18324,6 +18338,7 @@ "4456b7": "Spawn Labs, Inc", "4456e2": "Sichuan Tianyi Comheart Telecom Co.,LTD", "445829": "Cisco SPVTG", + "445925": "Square Inc.", "445943": "zte corporation", "44599f": "Criticare Systems, Inc", "4459e3": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -18338,7 +18353,7 @@ "446132": "ecobee inc", "44619c": "FONsystem co. ltd.", "446246": "Comat AG", - "446370": "Electronics Technology Co., Ltd", + "446370": "Electronics Technology co., ltd", "44643c": "Cisco Systems, Inc", "44650d": "Amazon Technologies Inc.", "44656a": "Industry Co., Ltd", @@ -18477,6 +18492,7 @@ "44d4e0": "Sony Corporation", "44d506": "Sichuan Tianyi Comheart Telecom Co.,LTD", "44d5a5": "AddOn Computer", + "44d5c1": "EM Microelectronic", "44d5cc": "Amazon Technologies Inc.", "44d5f2": "IEEE Registration Authority", "44d63d": "Talari Networks", @@ -18517,7 +18533,7 @@ "44ee30": "Budelmann Elektronik GmbH", "44efbf": "China Dragon Technology Limited", "44efcf": "UGENE SOLUTION inc.", - "44f034": "Kaonmedia CO., LTD.", + "44f034": "Kaon Group Co., Ltd.", "44f09e": "Apple, Inc.", "44f21b": "Apple, Inc.", "44f436": "zte corporation", @@ -18526,6 +18542,7 @@ "44f4e7": "Cohesity Inc", "44f849": "Union Pacific Railroad", "44f971": "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", + "44fa66": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "44fb42": "Apple, Inc.", "44fb5a": "zte corporation", "44fda3": "Everysight LTD.", @@ -18986,6 +19003,7 @@ "4c6d58": "Juniper Networks", "4c6e6e": "Comnect Technology CO.,LTD", "4c6f9c": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", + "4c70cc": "Blyott NV", "4c710c": "Cisco Systems, Inc", "4c710d": "Cisco Systems, Inc", "4c7167": "PoLabs d.o.o.", @@ -19101,6 +19119,7 @@ "4cc452": "Shang Hai Tyd. Electon Technology Ltd.", "4cc53e": "Zyxel Communications Corporation", "4cc602": "Radios, Inc.", + "4cc64c": "Beijing Xiaomi Mobile Software Co., Ltd", "4cc681": "Shenzhen Aisat Electronic Co., Ltd.", "4cc7d6": "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.", "4cc844": "Maipu Communication Technology Co.,Ltd.", @@ -19198,6 +19217,7 @@ "501479": "iRobot Corporation ", "5014b5": "Richfit Information Technology Co., Ltd", "5014c1": "HUAWEI TECHNOLOGIES CO.,LTD", + "5016f4": "Motorola Mobility LLC, a Lenovo Company", "5017ff": "Cisco Systems, Inc", "50184c": "Platina Systems Inc.", "501aa5": "GN Netcom A/S", @@ -19612,10 +19632,12 @@ "54489c": "CDOUBLES ELECTRONICS CO. LTD.", "5448e6": "Beijing Xiaomi Mobile Software Co., Ltd", "5449df": "Peloton Interactive, Inc", + "5449fc": "Ubee Interactive Co., Limited", "544a00": "Cisco Systems, Inc", "544a05": "wenglor sensoric gmbh", "544a16": "Texas Instruments", "544b8c": "Juniper Networks", + "544c8a": "Microsoft Corporation", "544e45": "Private", "544e90": "Apple, Inc.", "54511b": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -19924,6 +19946,7 @@ "58671a": "Barnes&Noble", "58677f": "Clare Controls Inc.", "58685d": "Tempo Australia Pty Ltd", + "586861": "VIASAT, INCORPORATED", "58696c": "Ruijie Networks Co.,LTD", "5869f9": "Fusion Transactive Ltd.", "586ab1": "Hangzhou H3C Technologies Co., Limited", @@ -19961,6 +19984,7 @@ "58879f": "Huawei Device Co., Ltd.", "5887e2": "Shenzhen Coship Electronics Co., Ltd.", "588a5a": "Dell Inc.", + "588b1c": "Cisco Systems, Inc", "588bf3": "Zyxel Communications Corporation", "588d09": "Cisco Systems, Inc", "588d64": "Xi'an Clevbee Technology Co.,Ltd", @@ -20527,7 +20551,7 @@ "6055f9": "Espressif Inc.", "605661": "IXECLOUD Tech", "60567d": "AM Telecom co., Ltd.", - "605699": "Marelli Morocco LLC SARL", + "605699": "MAGNETI MARELLI S.E. S.p.A.", "605718": "Intel Corporate", "605747": "CIG SHANGHAI CO LTD", "60577d": "eero inc.", @@ -20566,6 +20590,7 @@ "60735c": "Cisco Systems, Inc", "6073bc": "zte corporation", "60748d": "Atmaca Elektronik", + "6074f4": "Private", "607688": "Velodyne", "607771": "Texas Instruments", "6077e2": "Samsung Electronics Co.,Ltd", @@ -20755,6 +20780,7 @@ "60ffdd": "C.E. ELECTRONICS, INC", "64002d": "Powerlinq Co., LTD", "64006a": "Dell Inc.", + "64009c": "Insulet Corporation", "6400f1": "Cisco Systems, Inc", "6401fb": "Landis+Gyr GmbH", "6402cb": "ARRIS Group, Inc.", @@ -20942,6 +20968,7 @@ "6499a0": "AG Elektronik AB", "649a08": "Shenzhen SuperElectron Technology Co.,LTD", "649a12": "P2 Mobile Technologies Limited", + "649a63": "Ring LLC", "649abe": "Apple, Inc.", "649b24": "V Technology Co., Ltd.", "649c81": "Qualcomm Inc.", @@ -21095,6 +21122,7 @@ "681295": "Lupine Lighting Systems GmbH", "681324": "Huawei Device Co., Ltd.", "6813e2": "Eltex Enterprise LTD", + "6813f3": "Amazon Technologies Inc.", "681401": "Hon Hai Precision Ind. Co.,Ltd.", "681590": "Sagemcom Broadband SAS", "6815d3": "Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.", @@ -21154,6 +21182,7 @@ "6843d7": "Agilecom Photonics Solutions Guangdong Limited", "684571": "Huawei Device Co., Ltd.", "6845f1": "TOSHIBA CLIENT SOLUTIONS CO., LTD.", + "684724": "EM Microelectronic", "684749": "Texas Instruments", "684898": "Samsung Electronics Co.,Ltd", "684992": "Cisco Meraki", @@ -21165,6 +21194,7 @@ "684ca8": "Shenzhen Herotel Tech. Co., Ltd.", "684e05": "HUNAN FN-LINK TECHNOLOGY LIMITED", "684f64": "Dell Inc.", + "68505d": "Halo Technologies", "6851b7": "PowerCloud Systems, Inc.", "6852d6": "UGame Technology Co.,Ltd", "68536c": "SPnS Co.,Ltd", @@ -21265,6 +21295,7 @@ "689ce2": "Cisco Systems, Inc", "689e0b": "Cisco Systems, Inc", "689e19": "Texas Instruments", + "689e29": "zte corporation", "689e6a": "Huawei Device Co., Ltd.", "689ff0": "zte corporation", "68a03e": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -21382,6 +21413,7 @@ "6c02e0": "HP Inc.", "6c0309": "Cisco Systems, Inc", "6c0370": "Extreme Networks, Inc.", + "6c03b5": "Cisco Systems, Inc", "6c0460": "RBH Access Technologies Inc.", "6c047a": "HUAWEI TECHNOLOGIES CO.,LTD", "6c05d5": "Ethertronics Inc", @@ -21426,7 +21458,7 @@ "6c2316": "TATUNG Technology Inc.,", "6c23b9": "Sony Corporation", "6c23cb": "Wattty Corporation", - "6c2408": "Electronics Technology Co., Ltd", + "6c2408": "Electronics Technology co., ltd", "6c2483": "Microsoft Mobile Oy", "6c24a6": "vivo Mobile Communication Co., Ltd.", "6c25b9": "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", @@ -21919,9 +21951,11 @@ "70918f": "Weber-Stephen Products LLC", "7091f3": "Universal Electronics, Inc.", "709383": "Intelligent Optical Network High Tech CO.,LTD.", + "7093c1": "eero inc.", "7093f8": "Space Monkey, Inc.", "709741": "Arcadyan Corporation", "709756": "Happyelectronics Co.,Ltd", + "709883": "SHENZHEN KAYAN ELECTRONICS., LTD.", "70991c": "Shenzhen Honesty Electronics Co.,Ltd", "709a0b": "Italian Institute of Technology", "709ba5": "Shenzhen Y&D Electronics Co.,LTD.", @@ -22119,7 +22153,7 @@ "7438b7": "CANON INC.", "743a20": "New H3C Technologies Co., Ltd", "743a65": "NEC Corporation", - "743aef": "Kaonmedia CO., LTD.", + "743aef": "Kaon Group Co., Ltd.", "743af4": "Intel Corporate", "743c18": "Taicang T&W Electronics", "743e2b": "Ruckus Wireless", @@ -22163,6 +22197,7 @@ "745c4b": "GN Audio A/S", "745c9f": "TCT mobile ltd", "745cfa": "Shenzhen Shunrui Gaojie Technology Co., Ltd.", + "745d22": "Electronics Technology co., ltd", "745d43": "BSH Hausgeraete GmbH", "745d68": "Fiberhome Telecommunication Technologies Co.,LTD", "745e1c": "PIONEER CORPORATION", @@ -22609,6 +22644,7 @@ "789c85": "August Home, Inc.", "789ce7": "Shenzhen Aikede Technology Co., Ltd", "789ed0": "Samsung Electronics Co.,Ltd", + "789f38": "Shenzhen Feasycom Co., Ltd", "789f4c": "HOERBIGER Elektronik GmbH", "789f70": "Apple, Inc.", "789f87": "Siemens AG I IA PP PRM", @@ -23286,7 +23322,7 @@ "808abd": "Samsung Electronics Co.,Ltd", "808af7": "Nanoleaf", "808b5c": "Shenzhen Runhuicheng Technology Co., Ltd", - "808c97": "Kaonmedia CO., LTD.", + "808c97": "Kaon Group Co., Ltd.", "808db7": "Hewlett Packard Enterprise", "808f1d": "TP-LINK TECHNOLOGIES CO.,LTD.", "808fe8": "Intelbras", @@ -23420,7 +23456,7 @@ "80ffa8": "UNIDIS", "84002d": "PEGATRON CORPORATION", "8400d2": "Sony Corporation", - "840112": "Kaonmedia CO., LTD.", + "840112": "Kaon Group Co., Ltd.", "8401a7": "Greyware Automation Products, Inc", "840283": "HUMAX Co., Ltd.", "840328": "Juniper Networks", @@ -23470,6 +23506,7 @@ "842690": "BEIJING THOUGHT SCIENCE CO.,LTD.", "8427b6": "China Mobile IOT Company Limited", "8427ce": "Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints", + "842859": "Amazon Technologies Inc.", "84285a": "Saffron Solutions Inc", "842914": "EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG", "842999": "Apple, Inc.", @@ -23482,6 +23519,7 @@ "842e27": "Samsung Electronics Co.,Ltd", "842f75": "Innokas Group", "843095": "Hon Hai Precision IND.CO.,LTD", + "8430ce": "Shenzhen Jaguar Microsystems Co., Ltd", "8430e5": "SkyHawke Technologies, LLC", "84326f": "GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD ", "8432ea": "ANHUI WANZTEN P&T CO., LTD", @@ -23561,6 +23599,7 @@ "847973": "Shanghai Baud Data Communication Co.,Ltd.", "847a88": "HTC Corporation", "847ab6": "Inc.", + "847adf": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "847b57": "Intel Corporate", "847beb": "Dell Inc.", "847c9b": "GD Midea Air-Conditioning Equipment Co.,Ltd.", @@ -23583,6 +23622,7 @@ "8488e1": "Apple, Inc.", "8489ad": "Apple, Inc.", "8489ec": "IEEE Registration Authority", + "848a59": "Hisilicon Technologies Co., Ltd", "848a8d": "Cisco Systems, Inc", "848bcd": "IEEE Registration Authority", "848c8d": "Apple, Inc.", @@ -23907,6 +23947,7 @@ "888c19": "Brady Corp Asia Pacific Ltd", "888e68": "Huawei Device Co., Ltd.", "888e7f": "ATOP CORPORATION", + "888f10": "Shenzhen Max Infinite Technology Co.,Ltd.", "888fa4": "Huawei Device Co., Ltd.", "889009": "Juniper Networks", "88908d": "Cisco Systems, Inc", @@ -23943,7 +23984,7 @@ "88a303": "Samsung Electronics Co.,Ltd", "88a3cc": "Amatis Controls", "88a479": "Apple, Inc.", - "88a4c2": "Electronics Technology Co., Ltd", + "88a4c2": "Electronics Technology co., ltd", "88a5bd": "QPCOM INC.", "88a6c6": "Sagemcom Broadband SAS", "88a73c": "Ragentek Technology Group", @@ -23966,6 +24007,7 @@ "88b436": "FUJIFILM Corporation", "88b4a6": "Motorola Mobility LLC, a Lenovo Company", "88b4be": "HUAWEI TECHNOLOGIES CO.,LTD", + "88b5ff": "Shenzhen iComm Semiconductor CO.,LTD", "88b627": "Gembird Europe BV", "88b66b": "easynetworks", "88b6bd": "Flaircomm Microelectronics, Inc.", @@ -24655,6 +24697,7 @@ "90cf15": "Nokia Corporation", "90cf6f": "Dlogixs Co Ltd", "90cf7d": "Qingdao Hisense Communications Co.,Ltd.", + "90d092": "HUMAX Co., Ltd.", "90d11b": "Palomar Medical Technologies", "90d473": "vivo Mobile Communication Co., Ltd.", "90d689": "Huahao Fangzhou Technology Co.,Ltd", @@ -24678,6 +24721,7 @@ "90e202": "Texas Instruments", "90e2ba": "Intel Corporate", "90e2fc": "IEEE Registration Authority", + "90e468": "Guangzhou Shiyuan Electronic Technology Company Limited", "90e6ba": "ASUSTek COMPUTER INC.", "90e710": "New H3C Technologies Co., Ltd", "90e7c4": "HTC Corporation", @@ -24709,7 +24753,7 @@ "90f72f": "Phillips Machine & Welding Co., Inc. ", "90f7b2": "New H3C Technologies Co., Ltd", "90f82e": "Amazon Technologies Inc.", - "90f891": "Kaonmedia CO., LTD.", + "90f891": "Kaon Group Co., Ltd.", "90f970": "HUAWEI TECHNOLOGIES CO.,LTD", "90f9b7": "HUAWEI TECHNOLOGIES CO.,LTD", "90fb5b": "Avaya Inc", @@ -24788,7 +24832,7 @@ "943a91": "Amazon Technologies Inc.", "943af0": "Nokia Corporation", "943bb0": "New H3C Technologies Co., Ltd", - "943bb1": "Kaonmedia CO., LTD.", + "943bb1": "Kaon Group Co., Ltd.", "943c96": "Sagemcom Broadband SAS", "943cc6": "Espressif Inc.", "943dc9": "Asahi Net, Inc.", @@ -25188,7 +25232,7 @@ "9876b6": "Adafruit", "987770": "Co., Ltd", "9877cb": "Vorteks ED", - "9877e7": "Kaonmedia CO., LTD.", + "9877e7": "Kaon Group Co., Ltd.", "987a10": "Ericsson AB", "987a14": "Microsoft Corporation", "987bf3": "Texas Instruments", @@ -25396,7 +25440,7 @@ "9c2a70": "Hon Hai Precision Ind. Co.,Ltd.", "9c2a83": "Samsung Electronics Co.,Ltd", "9c2ba6": "Ruijie Networks Co.,LTD", - "9c2dcd": "Electronics Technology Co., Ltd", + "9c2dcd": "Electronics Technology co., ltd", "9c2dcf": "Shishi Tongyun Technology(Chengdu)Co.,Ltd.", "9c2e7a": "Samsung Electronics Co.,Ltd", "9c2ea1": "Xiaomi Communications Co Ltd", @@ -25737,6 +25781,7 @@ "a036bc": "ASUSTek COMPUTER INC.", "a036f0": "Comprehensive Power", "a036fa": "Ettus Research LLC", + "a03768": "Shenzhen E-Life Intelligence Technology Co.,Ltd.", "a038f8": "OURA Health Oy", "a03975": "Leo Bodnar Electronics Ltd", "a039ee": "Sagemcom Broadband SAS", @@ -25826,6 +25871,7 @@ "a0764e": "Espressif Inc.", "a07751": "ASMedia Technology Inc.", "a07771": "Vialis BV", + "a0779e": "Corp.", "a07817": "Apple, Inc.", "a078ba": "Pantech Co., Ltd.", "a08069": "Intel Corporate", @@ -26376,6 +26422,7 @@ "a82bb9": "Samsung Electronics Co.,Ltd", "a82bcd": "HUAWEI TECHNOLOGIES CO.,LTD", "a82bd6": "Shina System Co., Ltd", + "a82c3e": "Shenzhen Cultraview Digital Technology Co., Ltd", "a8301c": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", "a830ad": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", "a830bc": "Samsung Electronics Co.,Ltd", @@ -26425,6 +26472,7 @@ "a8556a": "3S System Technology Inc.", "a8574e": "TP-LINK TECHNOLOGIES CO.,LTD.", "a85840": "Co.,Ltd.", + "a8584e": "PK VEGA", "a8587c": "Shoogee GmbH & Co. KG", "a85ae0": "Huawei Device Co., Ltd.", "a85af3": "Shanghai Siflower Communication Technology Co., Ltd", @@ -26590,7 +26638,7 @@ "a8e2c1": "Texas Instruments", "a8e2c3": "Shenzhen YOUHUA Technology Co., Ltd", "a8e3ee": "Sony Interactive Entertainment Inc.", - "a8e539": "Moimstone Co.,Ltd", + "a8e539": "Nurivoice Co., Ltd", "a8e544": "HUAWEI TECHNOLOGIES CO.,LTD", "a8e552": "JUWEL Aquarium AG & Co. KG", "a8e621": "Amazon Technologies Inc.", @@ -26615,6 +26663,7 @@ "a8f8c9": "LTD.", "a8f94b": "Eltex Enterprise Ltd.", "a8fad8": "Apple, Inc.", + "a8fb40": "Nokia Solutions and Networks GmbH & Co. KG", "a8fb70": "WiseSec L.t.d", "a8fcb7": "Consolidated Resource Imaging", "a8fe9d": "Apple, Inc.", @@ -26700,6 +26749,7 @@ "ac3a67": "Cisco Systems, Inc", "ac3a7a": "Roku, Inc.", "ac3b77": "Sagemcom Broadband SAS", + "ac3b96": "LTD.", "ac3c0b": "Apple, Inc.", "ac3c8e": "Flextronics Computing(Suzhou)Co.,Ltd.", "ac3cb4": "Nilan A/S", @@ -26888,6 +26938,7 @@ "acbe75": "Ufine Technologies Co.,Ltd.", "acbeb6": "Visualedge Technology Co., Ltd.", "acbf71": "Bose Corporation", + "acc048": "Co., Ltd", "acc1ee": "Xiaomi Communications Co Ltd", "acc25d": "Fiberhome Telecommunication Technologies Co.,LTD", "acc2ec": "CLT INT'L IND. CORP.", @@ -26955,6 +27006,7 @@ "aceb51": "Universal Electronics, Inc.", "acec80": "ARRIS Group, Inc.", "acec85": "eero inc.", + "aced32": "Extreme Networks, Inc.", "aced5c": "Intel Corporate", "acee3b": "6harmonics Inc", "acee64": "Shenzhen SuperElectron Technology Co.,Ltd.", @@ -27266,6 +27318,7 @@ "b0ece1": "Private", "b0ee45": "AzureWave Technology Inc.", "b0ee7b": "Roku, Inc", + "b0f00c": "Dongguan Wecxw CO.,Ltd.", "b0f1a3": "Technology Co., Ltd. ", "b0f1bc": "Dhemax Ingenieros Ltda", "b0f1d8": "Apple, Inc.", @@ -27284,6 +27337,7 @@ "b0fd0b": "IEEE Registration Authority", "b0febd": "Private", "b0fee5": "Huawei Device Co., Ltd.", + "b0ff72": "IEEE Registration Authority", "b40016": "INGENICO TERMINALS SAS", "b4009c": "CableWorld Ltd.", "b40142": "GCI Science & Technology Co.,LTD", @@ -27625,6 +27679,7 @@ "b8186f": "ORIENTAL MOTOR CO., LTD.", "b81904": "Nokia Shanghai Bell Co., Ltd.", "b81999": "Nesys", + "b81ea4": "Liteon Technology Corporation", "b81f5e": "Apption Labs Limited", "b8208e": "Panasonic Connect Co., Ltd.", "b820e7": "Guangzhou Horizontal Information & Network Integration Co. Ltd", @@ -27977,6 +28032,7 @@ "bc307d": "Wistron Neweb Corporation", "bc307e": "Wistron Neweb Corporation", "bc30d9": "Arcadyan Corporation", + "bc3198": "IEEE Registration Authority", "bc325f": "Zhejiang Dahua Technology Co., Ltd.", "bc32b2": "Samsung Electronics Co.,Ltd", "bc3329": "Sony Interactive Entertainment Inc.", @@ -28702,6 +28758,7 @@ "c477af": "Advanced Digital Broadcast SA", "c478a2": "Huawei Device Co., Ltd.", "c47905": "Zhejiang Uniview Technologies Co.,Ltd.", + "c4799f": "Haiguang Smart Device Co.,Ltd.", "c47b2f": "Beijing JoinHope Image Technology Ltd.", "c47b80": "Protempis, LLC", "c47ba3": "NAVIS Inc.", @@ -28711,6 +28768,7 @@ "c47d9f": "Samsung Electronics Co.,Ltd", "c47dcc": "Zebra Technologies Inc", "c47dfe": "A.N. Solutions GmbH", + "c47ee0": "Cisco Systems, Inc", "c47f51": "Inventek Systems", "c48025": "Huawei Device Co., Ltd.", "c4808a": "Cloud Diagnostics Canada ULC", @@ -29003,6 +29061,7 @@ "c86c87": "Zyxel Communications Corporation", "c86cb6": "Optcom Co., Ltd.", "c86f1d": "Apple, Inc.", + "c87023": "Altice Labs S.A.", "c870d4": "IBO Technology Co,Ltd", "c87125": "Johnson Outdoors Marine Electronics d/b/a Minnkota", "c87248": "Aplicom Oy", @@ -29299,6 +29358,7 @@ "cc53b5": "HUAWEI TECHNOLOGIES CO.,LTD", "cc5459": "OnTime Networks AS", "cc55ad": "RIM", + "cc5763": "Panasonic Automotive Systems Co.,Ltd", "cc5830": "Sagemcom Broadband SAS", "cc593e": "Sensium Healthcare Limited", "cc5a53": "Cisco Systems, Inc", @@ -29672,6 +29732,7 @@ "d07fa0": "Samsung Electronics Co.,Ltd", "d07fc4": "Ou Wei Technology Co.,Ltd. of Shenzhen City", "d0817a": "Apple, Inc.", + "d081c5": "Juniper Networks", "d083d4": "Xtel Wireless ApS", "d084b0": "Sagemcom Broadband SAS", "d087e2": "Samsung Electronics Co.,Ltd", @@ -29795,6 +29856,7 @@ "d0f73b": "Helmut Mauell GmbH Werk Weida", "d0f865": "ITEL MOBILE LIMITED", "d0f88c": "Mobility Technologies Communication Co., Ltd.", + "d0f928": "zte corporation", "d0f99b": "zte corporation", "d0fa1d": "Qihoo 360 Technology Co.,Ltd", "d0fccc": "Samsung Electronics Co.,Ltd", @@ -30529,6 +30591,7 @@ "dc215c": "Intel Corporate", "dc21b9": "Sentec Co.Ltd", "dc21e2": "HUAWEI TECHNOLOGIES CO.,LTD", + "dc233b": "Extreme Networks, Inc.", "dc2727": "Huawei Device Co., Ltd.", "dc2834": "HAKKO Corporation", "dc2919": "Technology Ltd, Co.", @@ -30724,6 +30787,7 @@ "dccc8d": "Sdn. Bhd.", "dccce6": "Samsung Electronics Co.,Ltd", "dccd2f": "Seiko Epson Corporation", + "dccd66": "LTD.", "dccd74": "Japan E.M.Solutions Co., Ltd.", "dcce41": "FE GLOBAL HONG KONG LIMITED", "dccebc": "Shenzhen JSR Technology Co.,Ltd.", @@ -31573,7 +31637,7 @@ "e87f6b": "Samsung Electronics Co.,Ltd", "e87f95": "Apple, Inc.", "e8802e": "Apple, Inc.", - "e88088": "Electronics Technology Co., Ltd", + "e88088": "Electronics Technology co., ltd", "e880d8": "GNTEK Electronics Co.,Ltd.", "e88152": "Apple, Inc.", "e88175": "zte corporation", @@ -31763,6 +31827,7 @@ "ec086b": "TP-LINK TECHNOLOGIES CO.,LTD.", "ec08e5": "Motorola Mobility LLC, a Lenovo Company", "ec0bae": "Hangzhou BroadLink Technology Co.,Ltd", + "ec0c96": "Nokia", "ec0d9a": "Mellanox Technologies, Inc.", "ec0de4": "Amazon Technologies Inc.", "ec0ec4": "Hon Hai Precision Ind. Co.,Ltd.", @@ -31942,6 +32007,7 @@ "eca138": "Amazon Technologies Inc.", "eca1d1": "HUAWEI TECHNOLOGIES CO.,LTD", "eca29b": "Kemppi Oy", + "eca2a0": "Taicang T&W Electronics", "eca5de": "ONYX WIFI Inc", "eca62f": "HUAWEI TECHNOLOGIES CO.,LTD", "eca7ad": "Barrot Technology Co.,Ltd.", @@ -32278,6 +32344,7 @@ "f0c371": "Apple, Inc.", "f0c42f": "Huawei Device Co., Ltd.", "f0c478": "HUAWEI TECHNOLOGIES CO.,LTD", + "f0c558": "U.D.Electronic Corp.", "f0c725": "Apple, Inc.", "f0c745": "TECNO MOBILE LIMITED", "f0c77f": "Texas Instruments", @@ -32429,6 +32496,7 @@ "f43814": "Shanghai Howell Electronic Co.,Ltd", "f438c1": "Huawei Device Co., Ltd.", "f43909": "Hewlett Packard", + "f43a7b": "zte corporation", "f43bd8": "Intel Corporate", "f43c3b": "HUNAN FN-LINK TECHNOLOGY LIMITED", "f43d80": "FAG Industrial Services GmbH", @@ -33293,6 +33361,7 @@ "fcb6d8": "Apple, Inc.", "fcb7f0": "Idaho National Laboratory", "fcb97e": "GE Appliances", + "fcb9df": "Motorola Mobility LLC, a Lenovo Company", "fcbba1": "Shenzhen Minicreate Technology Co.,Ltd", "fcbc0e": "Zhejiang Cainiao Supply Chain Management Co., Ltd", "fcbc9c": "Vimar Spa", @@ -33353,6 +33422,7 @@ "fcf528": "Zyxel Communications Corporation", "fcf5c4": "Espressif Inc.", "fcf647": "Fiberhome Telecommunication Technologies Co.,LTD", + "fcf763": "Co., LTd", "fcf77b": "Huawei Device Co., Ltd.", "fcf8ae": "Intel Corporate", "fcf8b7": "TRONTEQ Electronic", From 593144102202ffc5710bb7dc4ff9009a511dceb5 Mon Sep 17 00:00:00 2001 From: Andrew Bates Date: Thu, 13 Apr 2023 16:11:47 -0400 Subject: [PATCH 14/37] Add encrypt_type9 function to netutils.password (#253) * add missing dev dependency 'pytest-cov' pytest option '--no-cov' causes pytest to crash if pytest-cov plugin not installed add 'cryptography' to optional dependencies cisco type 9 passwords use the scrypt key derivation function, as implemented in the cryptography package implement `encrypt_type9` function add test for `encrypt_type9` function add `encrypt_type9` to jinja filters mapping run `development_scripts.py` to update docs improve encrypt_type9 salt generator salt generator using base85 may produce salt which includes '$'. The `get_hash_salt` function will not be able to reliably extract the salt from any hash produced using this generator switches to a `secrets`-based salt generator implement `compare_type9` function add tests for `compare_type9` function update jinja filter mapping and docs replace scrypt KDF implementation remove dependence on `cryptography` package simplify salt generator update test data update test suite with input/output derived from real switch config add cryptography as an optional dependency make scrypt implementation compatible with more python versions clean up base64 encoding scheme in `encrypt_type9` lint `password.py` * Removed dependency on external library * Reverted pyproject.toml * Removed optional code --------- Co-authored-by: Alex Tremblay Co-authored-by: Andrew Bates --- docs/user/include_jinja_list.md | 2 + netutils/password.py | 92 +++++++++++++++++++++++++++++++++ netutils/utils.py | 2 + tests/unit/test_password.py | 42 +++++++++++++++ 4 files changed, 138 insertions(+) diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index 219e04db..731e8b1f 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -53,9 +53,11 @@ | mac_type | netutils.mac.mac_type | | compare_type5 | netutils.password.compare_type5 | | compare_type7 | netutils.password.compare_type7 | +| compare_type9 | netutils.password.compare_type9 | | decrypt_type7 | netutils.password.decrypt_type7 | | encrypt_type5 | netutils.password.encrypt_type5 | | encrypt_type7 | netutils.password.encrypt_type7 | +| encrypt_type9 | netutils.password.encrypt_type9 | | get_hash_salt | netutils.password.get_hash_salt | | tcp_ping | netutils.ping.tcp_ping | | longest_prefix_match | netutils.route.longest_prefix_match | diff --git a/netutils/password.py b/netutils/password.py index 282b215f..d317d31a 100644 --- a/netutils/password.py +++ b/netutils/password.py @@ -8,12 +8,22 @@ import ast import typing as t from functools import wraps +import base64 + +try: + from hashlib import scrypt + + HAS_SCRYPT = True +except ImportError: + HAS_SCRYPT = False + # Code example from Python docs ALPHABET = string.ascii_letters + string.digits DEFAULT_PASSWORD_CHARS = "".join((string.ascii_letters + string.digits + ".,:-_")) DEFAULT_PASSWORD_LENGTH = 20 ENCRYPT_TYPE7_LENGTH = 25 +ENCRYPT_TYPE9_ENCODING_CHARS = "".join(("./", string.digits, string.ascii_uppercase, string.ascii_lowercase)) XLAT = [ "0x64", @@ -141,6 +151,35 @@ def compare_type7( return False +def compare_type9( + unencrypted_password: str, encrypted_password: str, return_original: bool = False +) -> t.Union[str, bool]: + """Given an encrypted and unencrypted password of Cisco Type 7 password, compare if they are a match. + + Args: + unencrypted_password: A password that has not been encrypted, and will be compared against. + encrypted_password: A password that has been encrypted. + return_original: Whether or not to return the original, this is helpful when used to populate the configuration. Defaults to False. + + Returns: + Whether or not the password is as compared to. + + Examples: + >>> from netutils.password import compare_type9 + >>> compare_type9("cisco","$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2") + True + >>> compare_type9("not_cisco","$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2") + False + >>> + """ + salt = get_hash_salt(encrypted_password) + if encrypt_type9(unencrypted_password, salt) == encrypted_password: + if return_original is True: + return encrypted_password + return True + return False + + def decrypt_type7(encrypted_password: str) -> str: """Given an unencrypted password of Cisco Type 7 password decrypt it. @@ -233,6 +272,59 @@ def encrypt_type7(unencrypted_password: str, salt: t.Optional[int] = None) -> st return encrypted_password +def encrypt_type9(unencrypted_password: str, salt: t.Optional[str] = None) -> str: + """Given an unencrypted password of Cisco Type 9 password, encrypt it. + + Note: This uses the built-in Python `scrypt` function to generate the password + hash. However, this function is not available on the default Python installed + on MacOS. If MacOS is used, it is recommended to install Python using Homebrew + (or similar) which will include `scrypt`. + + Args: + unencrypted_password: A password that has not been encrypted, and will be compared against. + salt: a 14-character string that can be set by the operator. Defaults to random generated one. + + Returns: + The encrypted password. + + Examples: + >>> from netutils.password import encrypt_type9 + >>> encrypt_type9("123456", "cvWdfQlRRDKq/U") + '$9$cvWdfQlRRDKq/U$VFTPha5VHTCbSgSUAo.nPoh50ZiXOw1zmljEjXkaq1g' + + Raises: + ImportError: If `scrypt` cannot be imported from the system. + """ + if not HAS_SCRYPT: + raise ImportError( + "Your version of python does not have scrypt support built in. " + "Please install a version of python with scrypt." + ) + + if salt: + if len(salt) != 14: + raise ValueError("Salt must be 14 characters long.") + salt_bytes = salt.encode() + else: + # salt must always be a 14-byte-long printable string, often includes symbols + salt_bytes = "".join(secrets.choice(ENCRYPT_TYPE9_ENCODING_CHARS) for _ in range(14)).encode() + + key = scrypt(unencrypted_password.encode(), salt=salt_bytes, n=2**14, r=1, p=1, dklen=32) + + # Cisco type 9 uses a different base64 encoding than the standard one, so we need to translate from + # the standard one to the Cisco one. + type9_encoding_translation_table = str.maketrans( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", + ENCRYPT_TYPE9_ENCODING_CHARS, + ) + hashed_password = base64.b64encode(key).decode().translate(type9_encoding_translation_table) + + # and strip off the trailing '=' + hashed_password = hashed_password[:-1] + + return f"$9${salt_bytes.decode()}${hashed_password}" + + def get_hash_salt(encrypted_password: str) -> str: """Given an encrypted password obtain the salt value from it. diff --git a/netutils/utils.py b/netutils/utils.py index ff52ac7a..710845f2 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -54,9 +54,11 @@ "get_oui": "mac.get_oui", "compare_type5": "password.compare_type5", "compare_type7": "password.compare_type7", + "compare_type9": "password.compare_type9", "decrypt_type7": "password.decrypt_type7", "encrypt_type5": "password.encrypt_type5", "encrypt_type7": "password.encrypt_type7", + "encrypt_type9": "password.encrypt_type9", "get_hash_salt": "password.get_hash_salt", "tcp_ping": "ping.tcp_ping", "longest_prefix_match": "route.longest_prefix_match", diff --git a/tests/unit/test_password.py b/tests/unit/test_password.py index 6ed43750..2105e9cf 100644 --- a/tests/unit/test_password.py +++ b/tests/unit/test_password.py @@ -41,6 +41,31 @@ }, ] +COMPARE_TYPE9 = [ + { + "sent": { + "unencrypted_password": "cisco", + "encrypted_password": "$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2", + }, + "received": True, + }, + { + "sent": { + "unencrypted_password": "cisco", + "encrypted_password": "$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2", + "return_original": True, + }, + "received": "$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2", + }, + { + "sent": { + "unencrypted_password": "invalid_password", + "encrypted_password": "$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2", + }, + "received": False, + }, +] + DECRYPT_TYPE7 = [ { "sent": {"encrypted_password": "14141B180F0B"}, @@ -62,6 +87,13 @@ }, ] +ENCRYPT_TYPE9 = [ + { + "sent": {"unencrypted_password": "cisco", "salt": "x2xAAwQ3MBbEnk"}, + "received": "$9$x2xAAwQ3MBbEnk$JCxr6MnPb.k5ymK72mTypyRJYH5W74ZRvtLTprCj.xQ", + }, +] + GET_HASH_SALT = [ { "sent": {"encrypted_password": "$1$nTc1$Z28sUTcWfXlvVe2x.3XAa."}, @@ -80,6 +112,11 @@ def test_compare_type7(data): assert password.compare_type7(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", COMPARE_TYPE9) +def test_compare_type9(data): + assert password.compare_type9(**data["sent"]) == data["received"] + + @pytest.mark.parametrize("data", DECRYPT_TYPE7) def test_decrypt_type7(data): assert password.decrypt_type7(**data["sent"]) == data["received"] @@ -95,6 +132,11 @@ def test_encrypt_type7(data): assert password.encrypt_type7(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", ENCRYPT_TYPE9) +def test_encrypt_type9(data): + assert password.encrypt_type9(**data["sent"]) == data["received"] + + @pytest.mark.parametrize("data", GET_HASH_SALT) def test_get_hash_salt(data): assert password.get_hash_salt(**data["sent"]) == data["received"] From 23b21164d59655832e15675d4be08d586da07f68 Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Mon, 17 Apr 2023 12:33:56 -0400 Subject: [PATCH 15/37] Pr252 addon (#261) * Created a new helper function to return the proper upgrade path for PANOS firewall firmware updates. * Updated get_panos_upgrade_path to be a generic function that returns the upgrade path from any list of firmware versions passed to the function as a list. The PANOS upgrade path lists have moved out of the function to become constants in the module. * Updated the constant variables containing the PANOS upgrade paths to be part of a dict, to make future expansion easier. * Move get_upgrade_path to os_version --------- Co-authored-by: Boabdil Perez <37556004+boabdilperez@users.noreply.github.com> --- docs/user/include_jinja_list.md | 1 + docs/user/lib_upgrade_paths.md | 10 +++++++ mkdocs.yml | 1 + netutils/constants.py | 26 +++++++++++++++++ netutils/os_version.py | 49 +++++++++++++++++++++++++++++++++ netutils/utils.py | 1 + tests/unit/test_os_versions.py | 24 ++++++++++++++++ 7 files changed, 112 insertions(+) create mode 100644 docs/user/lib_upgrade_paths.md create mode 100644 netutils/os_version.py create mode 100755 tests/unit/test_os_versions.py diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index 731e8b1f..ef4c41bb 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -51,6 +51,7 @@ | mac_to_format | netutils.mac.mac_to_format | | mac_to_int | netutils.mac.mac_to_int | | mac_type | netutils.mac.mac_type | +| get_upgrade_path | netutils.os_version.get_upgrade_path | | compare_type5 | netutils.password.compare_type5 | | compare_type7 | netutils.password.compare_type7 | | compare_type9 | netutils.password.compare_type9 | diff --git a/docs/user/lib_upgrade_paths.md b/docs/user/lib_upgrade_paths.md new file mode 100644 index 00000000..0e0d9b7d --- /dev/null +++ b/docs/user/lib_upgrade_paths.md @@ -0,0 +1,10 @@ +# Upgrade Paths + +The `UPGRADE_PATHS` definition in constants is maintained based on the following rules: + +* They are not considered vendor recommendations, instead an interpretation based on the open source contributor. +* There is no expectation they will be updated, as such issues requesting updates will be closed but PRs to update--following the below rules--will be accepted. +* The lists can only be modified by added to during any patch or minor version. +* The list cannot be modified in any other way. +* Generate a new versioned list, e.g. PANOS_OFFICIAL_V2 vs PANOS_OFFICIAL_V1 and create an alternate list. +* During major version changes (e.g. 1.x.x to 2.x.x) lists may be removed. diff --git a/mkdocs.yml b/mkdocs.yml index ffc12202..87cd36c0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -100,6 +100,7 @@ nav: - Jinja Filters: "user/lib_use_cases_jinja_filters.md" - Library Mapper: "user/lib_use_cases_lib_mapper.md" - Protocol Mapper: "user/lib_use_cases_protocol_mappers.md" + - Upgrade Paths: "user/lib_upgrade_paths.md" - Getting Started: "user/lib_getting_started.md" - Frequently Asked Questions: "user/faq.md" - Administrator Guide: diff --git a/netutils/constants.py b/netutils/constants.py index a94b1ad2..c5c797b6 100644 --- a/netutils/constants.py +++ b/netutils/constants.py @@ -408,3 +408,29 @@ r"((?P\d+)m)?((?P\d+)s)" ), # pylint: disable=implicit-str-concat ] + +# Do not modify list, see UPGRADE_PATHS documentation on the versioning of this +UPGRADE_PATHS = { + "PANOS_OFFICIAL_V1": [ + "8.0.0", + "8.0.20", + "8.1.0", + "8.1.24-h1", + "9.0.0", + "9.0.16-h3", + "9.1.0", + "9.1.15-h1", + "10.0.0", + "10.0.12", + "10.1.0", + "10.1.9", + ], + "PANOS_MAJOR_ONLY_V1": [ + "8.0.0", + "8.1.0", + "9.0.0", + "9.1.0", + "10.0.0", + "10.1.0", + ], +} diff --git a/netutils/os_version.py b/netutils/os_version.py new file mode 100644 index 00000000..3fe8bab4 --- /dev/null +++ b/netutils/os_version.py @@ -0,0 +1,49 @@ +"""Functions for working with OS Versions.""" +import typing as t +from distutils.version import LooseVersion + + +def get_upgrade_path( + current_version: str, + target_version: str, + firmware_list: t.List[str], +) -> t.List[str]: + """Utility to return the upgrade path from the current to target firmware version. + + Returns: + List of firmware versions to upgrade from current to target. + + Args: + current_version: Current firmware version. + target_version: Target firmware version. + firmware_list: List of firmware versions to use as the upgrade path. + + Raises: + ValueError: If target version is older than current version. + ValueError: If target version equals current version. + + Examples: + >>> from netutils.os_version import get_upgrade_path + >>> get_upgrade_path("9.1.6", "10.1.9", ["9.1.10", "9.1.15-h1", "10.0.0", "10.1.9"]) + ['9.1.10', '9.1.15-h1', '10.0.0', '10.1.9'] + >>> from netutils.constants import UPGRADE_PATHS + >>> get_upgrade_path("9.1.6", "10.1.9", UPGRADE_PATHS["PANOS_OFFICIAL_V1"]) + ['9.1.15-h1', '10.0.0', '10.0.12', '10.1.0', '10.1.9'] + """ + if LooseVersion(current_version) > LooseVersion(target_version): + raise ValueError("Target version must be newer than current version.") + + if LooseVersion(current_version) == LooseVersion(target_version): + raise ValueError("Target version equals current version. No upgrade necessary.") + + upgrade_path = [ + version + for version in firmware_list + if LooseVersion(version) > LooseVersion(current_version) + and LooseVersion(version) <= LooseVersion(target_version) + ] + + if target_version not in upgrade_path: + upgrade_path.append(target_version) + + return upgrade_path diff --git a/netutils/utils.py b/netutils/utils.py index 710845f2..fd812b6a 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -69,6 +69,7 @@ "uptime_seconds_to_string": "time.uptime_seconds_to_string", "uptime_string_to_seconds": "time.uptime_string_to_seconds", "get_napalm_getters": "lib_helpers.get_napalm_getters", + "get_upgrade_path": "os_version.get_upgrade_path", } diff --git a/tests/unit/test_os_versions.py b/tests/unit/test_os_versions.py new file mode 100755 index 00000000..e6ee7b22 --- /dev/null +++ b/tests/unit/test_os_versions.py @@ -0,0 +1,24 @@ +"""Test for the lib_helpers definitions.""" +import pytest +from netutils.os_version import get_upgrade_path +from netutils.constants import UPGRADE_PATHS + + +def test_get_upgrade_path(): + return_values = ["9.1.15-h1", "10.0.0", "10.0.12", "10.1.0", "10.1.9"] + assert get_upgrade_path("9.1.6", "10.1.9", UPGRADE_PATHS["PANOS_OFFICIAL_V1"]) == return_values + assert get_upgrade_path("9.1.6", "10.1.9", UPGRADE_PATHS["PANOS_MAJOR_ONLY_V1"]) == [ + "10.0.0", + "10.1.0", + "10.1.9", + ] + + +def test_get_upgrade_path_current_greater_than_target(): + with pytest.raises(ValueError, match="Target version must be newer than current version."): + get_upgrade_path("10.1.9", "9.1.6", UPGRADE_PATHS["PANOS_MAJOR_ONLY_V1"]) + + +def test_get_upgrade_path_current_equals_target(): + with pytest.raises(ValueError, match="Target version equals current version. No upgrade necessary."): + get_upgrade_path("10.1.9", "10.1.9", UPGRADE_PATHS["PANOS_MAJOR_ONLY_V1"]) From a10c288c532cdfc625fd9d7adf669ae9976bb47e Mon Sep 17 00:00:00 2001 From: Johan van den Dorpe Date: Thu, 27 Apr 2023 20:11:40 +0100 Subject: [PATCH 16/37] Add functions for encrypting and decrypting junipter $9$ type passwords (#227) * Add functions for encrypting and decrypting junipter $9$ type passwords * Update variable name to pass pylint tests --- docs/user/include_jinja_list.md | 2 + netutils/password.py | 110 ++++++++++++++++++++++++++++++++ netutils/utils.py | 2 + tests/unit/test_password.py | 28 ++++++++ 4 files changed, 142 insertions(+) diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index ef4c41bb..627acc2e 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -55,7 +55,9 @@ | compare_type5 | netutils.password.compare_type5 | | compare_type7 | netutils.password.compare_type7 | | compare_type9 | netutils.password.compare_type9 | +| decrypt_juniper | netutils.password.decrypt_juniper | | decrypt_type7 | netutils.password.decrypt_type7 | +| encrypt_juniper | netutils.password.encrypt_juniper | | encrypt_type5 | netutils.password.encrypt_type5 | | encrypt_type7 | netutils.password.encrypt_type7 | | encrypt_type9 | netutils.password.encrypt_type9 | diff --git a/netutils/password.py b/netutils/password.py index d317d31a..5a7d9017 100644 --- a/netutils/password.py +++ b/netutils/password.py @@ -81,6 +81,24 @@ "0x37", ] +JUNIPER_ENCODING = [ + [1, 4, 32], + [1, 16, 32], + [1, 8, 32], + [1, 64], + [1, 32], + [1, 4, 16, 128], + [1, 32, 64], +] + +JUNIPER_KEYS = ["QzF3n6/9CAtpu0O", "B1IREhcSyrleKvMW8LXx", "7N-dVbwsY2g4oaJZGUDj", "iHkq.mPf5T"] +JUNIPER_KEYS_STRING = "".join(JUNIPER_KEYS) +JUNIPER_KEYS_LENGTH = len(JUNIPER_KEYS_STRING) +JUNIPER_CHARACTER_KEYS: t.Dict[str, int] = {} +for idx, jun_key in enumerate(JUNIPER_KEYS): + for character in jun_key: + JUNIPER_CHARACTER_KEYS[character] = 3 - idx + def _fail_on_mac(func: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]: """There is an issue with Macintosh for encryption.""" @@ -344,3 +362,95 @@ def get_hash_salt(encrypted_password: str) -> str: if len(split_password) != 4: raise ValueError(f"Could not parse salt out password correctly from {encrypted_password}") return split_password[2] + + +def decrypt_juniper(encrypted_password: str) -> str: + """Given an encrypted Junos $9$ type password, decrypt it. + + Args: + encrypted_password: A password that has been encrypted, and will be decrypted. + + Returns: + The unencrypted_password password. + + Examples: + >>> from netutils.password import decrypt_juniper + >>> decrypt_juniper("$9$7YdwgGDkTz6oJz69A1INdb") + 'juniper' + >>> + """ + # Strip $9$ from start of string + password_characters = encrypted_password.split("$9$", 1)[1] + + # Get first character and toss extra characters + first_character = password_characters[0] + stripped_password_characters = password_characters[JUNIPER_CHARACTER_KEYS[first_character] + 1 :] # noqa: E203 + + previous_char = first_character + decrypted_password = "" # nosec + while stripped_password_characters: + # Get encoding modulus + decode = JUNIPER_ENCODING[len(decrypted_password) % len(JUNIPER_ENCODING)] + + # Get nibble we will decode + nibble = stripped_password_characters[0 : len(decode)] # noqa: E203 + stripped_password_characters = stripped_password_characters[len(decode) :] # noqa: E203 + + # Decode value for nibble and convert to character, append to decryped password + value = 0 + for index, char in enumerate(nibble): + gap = ( + (JUNIPER_KEYS_STRING.index(char) - JUNIPER_KEYS_STRING.index(previous_char)) % JUNIPER_KEYS_LENGTH + ) - 1 + value += gap * decode[index] + previous_char = char + decrypted_password += chr(value) + + return decrypted_password + + +def encrypt_juniper(unencrypted_password: str, salt: t.Optional[int] = None) -> str: + """Given an unencrypted password, encrypt to Juniper $9$ type password. + + Args: + unencrypted_password: A password that has not been encrypted, and will be compared against. + salt: A integer that can be set by the operator. Defaults to random generated one. + + Returns: + The encrypted password. + + Examples: + >>> from netutils.password import encrypt_juniper + >>> encrypt_juniper("juniper", 35) # doctest: +SKIP + '$9$7YdwgGDkTz6oJz69A1INdb' + >>> + """ + if not salt: + salt = random.randint(0, JUNIPER_KEYS_LENGTH) - 1 # nosec + + # Use salt to generate start of encrypted password + first_character = JUNIPER_KEYS_STRING[salt] + random_chars = "".join( + [ + JUNIPER_KEYS_STRING[random.randint(0, JUNIPER_KEYS_LENGTH) - 1] # nosec + for x in range(0, JUNIPER_CHARACTER_KEYS[first_character]) + ] + ) + encrypted_password = "$9$" + first_character + random_chars + + previous_character = first_character + for index, char in enumerate(unencrypted_password): + encode = JUNIPER_ENCODING[index % len(JUNIPER_ENCODING)][::-1] # Get encoding modulus in reverse order + char_ord = ord(char) + gaps: t.List[int] = [] + for modulus in encode: + gaps = [int(char_ord / modulus)] + gaps + char_ord %= modulus + + for gap in gaps: + gap += JUNIPER_KEYS_STRING.index(previous_character) + 1 + new_character = JUNIPER_KEYS_STRING[gap % JUNIPER_KEYS_LENGTH] + previous_character = new_character + encrypted_password += new_character + + return encrypted_password diff --git a/netutils/utils.py b/netutils/utils.py index fd812b6a..8d3f13a5 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -60,6 +60,8 @@ "encrypt_type7": "password.encrypt_type7", "encrypt_type9": "password.encrypt_type9", "get_hash_salt": "password.get_hash_salt", + "encrypt_juniper": "password.encrypt_juniper", + "decrypt_juniper": "password.decrypt_juniper", "tcp_ping": "ping.tcp_ping", "longest_prefix_match": "route.longest_prefix_match", "vlanlist_to_config": "vlan.vlanlist_to_config", diff --git a/tests/unit/test_password.py b/tests/unit/test_password.py index 2105e9cf..933120a3 100644 --- a/tests/unit/test_password.py +++ b/tests/unit/test_password.py @@ -101,6 +101,21 @@ }, ] +ENCRYPT_JUNIPER = [ + { + "sent": {"unencrypted_password": "juniper", "salt": 35}, + "received_one": "$9$7", + "received_two": "gGDkTz6oJz69A1INdb", + }, +] + +DECRYPT_JUNIPER = [ + { + "sent": {"encrypted_password": "$9$7YdwgGDkTz6oJz69A1INdb"}, + "received": "juniper", + } +] + @pytest.mark.parametrize("data", COMPARE_TYPE5) def test_compare_type5(data): @@ -140,3 +155,16 @@ def test_encrypt_type9(data): @pytest.mark.parametrize("data", GET_HASH_SALT) def test_get_hash_salt(data): assert password.get_hash_salt(**data["sent"]) == data["received"] + + +@pytest.mark.parametrize("data", ENCRYPT_JUNIPER) +def test_encrypt_juniper(data): + # Passwords include random padding, check only the non random sections + decrypted_password = password.encrypt_juniper(**data["sent"]) + assert decrypted_password[0:4] == data["received_one"] + assert decrypted_password[7:] == data["received_two"] + + +@pytest.mark.parametrize("data", DECRYPT_JUNIPER) +def test_decrypt_juniper(data): + assert password.decrypt_juniper(**data["sent"]) == data["received"] From 6c1585ed4191eb9fd89589b916880854dba98afc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Apr 2023 14:18:02 -0500 Subject: [PATCH 17/37] Flat: latest data (2023-04-27T19:15:52.936Z) (#266) { "date": "2023-04-27T19:15:52.936Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 4586, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 306 +++++++++++++++++++--------- 1 file changed, 215 insertions(+), 91 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index c7a4f0b5..92fa338b 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -6267,7 +6267,7 @@ "0018aa": "Protec Fire Detection plc", "0018ab": "BEIJING LHWT MICROELECTRONICS INC.", "0018ac": "Shanghai Jiao Da HISYS Technology Co. Ltd.", - "0018ad": "NIDEC SANKYO CORPORATION", + "0018ad": "NIDEC INSTRUMENTS CORPORATION", "0018ae": "TVT CO.,LTD", "0018af": "Samsung Electronics Co.,Ltd", "0018b0": "Nortel Networks", @@ -11058,6 +11058,7 @@ "006440": "Cisco Systems, Inc", "0064a6": "Maquet CardioVascular", "0064af": "Dish Technologies Corp", + "00651e": "Amcrest Technologies", "006619": "Huawei Device Co., Ltd.", "00664b": "HUAWEI TECHNOLOGIES CO.,LTD", "006762": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -12293,11 +12294,12 @@ "00c585": "Apple, Inc.", "00c5db": "Datatech Sistemas Digitales Avanzados SL", "00c610": "Apple, Inc.", + "00c711": "ITEL MOBILE LIMITED", "00c88b": "Cisco Systems, Inc", "00cae5": "Cisco Systems, Inc", "00cb00": "Private", "00cb51": "Sagemcom Broadband SAS", - "00cb7a": "Technicolor CH USA Inc.", + "00cb7a": "Vantiva USA LLC", "00cbb4": "SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD", "00cbbd": "Cambridge Broadband Networks Group", "00cc34": "Juniper Networks", @@ -12630,7 +12632,7 @@ "00e019": "ING. GIORDANO ELETTRONICA", "00e01a": "COMTEC SYSTEMS. CO., LTD.", "00e01b": "SPHERE COMMUNICATIONS, INC.", - "00e01c": "Cradlepoint, Inc", + "00e01c": "CradlePoint, Inc", "00e01d": "WebTV NETWORKS, INC.", "00e01e": "Cisco Systems, Inc", "00e01f": "AVIDIA Systems, Inc.", @@ -12881,6 +12883,7 @@ "00ebd8": "MERCUSYS TECHNOLOGIES CO., LTD.", "00ec0a": "Xiaomi Communications Co Ltd", "00edb8": "KYOCERA Corporation ", + "00ee01": "Enablers Solucoes e Consultoria em Dispositivos", "00eeab": "Cisco Systems, Inc", "00eebd": "HTC Corporation", "00f051": "KWB Gmbh", @@ -12989,6 +12992,7 @@ "043604": "Gyeyoung I&T", "0436b8": "I&C Technology", "043855": "SCOPUS INTERNATIONAL-BELGIUM", + "0438dc": "China Unicom Online Information Technology Co.,Ltd", "043926": "China Dragon Technology Limited", "043a0d": "SM Optics S.r.l.", "043ce8": "Shenzhen SuperElectron Technology Co.,Ltd.", @@ -13454,6 +13458,7 @@ "081ff3": "Cisco Systems, Inc", "0821ef": "Samsung Electronics Co.,Ltd", "0823b2": "vivo Mobile Communication Co., Ltd.", + "0823c6": "HUAWEI TECHNOLOGIES CO.,LTD", "082522": "ADVANSEE", "082525": "Xiaomi Communications Co Ltd", "082573": "Apple, Inc.", @@ -13554,6 +13559,7 @@ "086e9c": "Huawei Device Co., Ltd.", "086f48": "Shenzhen iComm Semiconductor CO.,LTD", "087045": "Apple, Inc.", + "087073": "HUAWEI TECHNOLOGIES CO.,LTD", "087190": "Intel Corporate", "087402": "Apple, Inc.", "087458": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -13571,7 +13577,7 @@ "087c39": "Amazon Technologies Inc.", "087cbe": "Quintic Corp.", "087d21": "Altasec technology corporation", - "087e64": "Technicolor CH USA Inc.", + "087e64": "Vantiva USA LLC", "087f98": "vivo Mobile Communication Co., Ltd.", "088039": "Cisco SPVTG", "0881b2": "Technology Co., Ltd", @@ -13597,7 +13603,7 @@ "089204": "Dell Inc.", "089356": "HUAWEI TECHNOLOGIES CO.,LTD", "0894ef": "Corporation", - "08952a": "Technicolor CH USA Inc.", + "08952a": "Vantiva USA LLC", "089542": "Apple, Inc.", "0896ad": "Cisco Systems, Inc", "0896d7": "AVM GmbH", @@ -13619,7 +13625,7 @@ "08a189": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "08a5c8": "Sunnovo International Limited", "08a6bc": "Amazon Technologies Inc.", - "08a7c0": "Technicolor CH USA Inc.", + "08a7c0": "Vantiva USA LLC", "08a842": "Huawei Device Co., Ltd.", "08a8a1": "Cyclotronics Power Concepts, Inc", "08a95a": "AzureWave Technology Inc.", @@ -13667,6 +13673,7 @@ "08cd9b": "samtec automotive electronics & software GmbH", "08d09f": "Cisco Systems, Inc", "08d0b7": "Qingdao Hisense Communications Co.,Ltd.", + "08d1f9": "Espressif Inc.", "08d23e": "Intel Corporate", "08d29a": "Proformatique", "08d34b": "Co., Ltd.", @@ -13702,6 +13709,7 @@ "08ee8b": "Samsung Electronics Co.,Ltd", "08ef3b": "MCS Logic Inc.", "08efab": "SAYME WIRELESS SENSOR NETWORK", + "08f01e": "eero inc.", "08f1b3": "Cisco Meraki", "08f1b7": "Towerstream Corpration", "08f1ea": "Hewlett Packard Enterprise", @@ -13728,7 +13736,7 @@ "08ff44": "Apple, Inc.", "0c014b": "zte corporation", "0c01db": "Infinix mobility limited", - "0c0227": "Technicolor CH USA Inc.", + "0c0227": "Vantiva USA LLC", "0c02bd": "Samsung Electronics Co.,Ltd", "0c0400": "Jantar d.o.o.", "0c0535": "Juniper Systems", @@ -13849,6 +13857,7 @@ "0c7523": "BEIJING GEHUA CATV NETWORK CO.,LTD", "0c756c": "Anaren Microwave, Inc.", "0c75bd": "Cisco Systems, Inc", + "0c75d2": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "0c771a": "Apple, Inc.", "0c7a15": "Intel Corporate", "0c7bc8": "Cisco Meraki", @@ -14107,7 +14116,7 @@ "10321d": "HUAWEI TECHNOLOGIES CO.,LTD", "10327e": "Huawei Device Co., Ltd.", "103378": "FLECTRON Co., LTD", - "1033bf": "Technicolor CH USA Inc.", + "1033bf": "Vantiva USA LLC", "10341b": "Spacelink", "10364a": "Boston Dynamics", "103711": "NORBIT ITS", @@ -14168,7 +14177,7 @@ "105fd4": "Tendyron Corporation", "10604b": "Hewlett Packard", "1062c9": "Adatis GmbH & Co. KG", - "1062d0": "Technicolor CH USA Inc.", + "1062d0": "Vantiva USA LLC", "1062e5": "Hewlett Packard", "1062eb": "D-Link International", "10634b": "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", @@ -14201,6 +14210,7 @@ "1078d2": "Elitegroup Computer Systems Co.,Ltd.", "107a86": "U&U ENGINEERING INC.", "107b44": "ASUSTek COMPUTER INC.", + "107b93": "Co., Ltd.", "107ba4": "Olive & Dove Co.,Ltd.", "107bce": "Nokia", "107bef": "Zyxel Communications Corporation", @@ -14221,6 +14231,7 @@ "108ee0": "Samsung Electronics Co.,Ltd", "108ffe": "HUAWEI TECHNOLOGIES CO.,LTD", "1091a8": "Espressif Inc.", + "1091d1": "Intel Corporate", "109266": "Samsung Electronics Co.,Ltd", "109397": "ARRIS Group, Inc.", "1093e9": "Apple, Inc.", @@ -14252,7 +14263,7 @@ "10a5d0": "Murata Manufacturing Co., Ltd.", "10a659": "Mobile Create Co.,Ltd.", "10a743": "SK Mtek Limited", - "10a793": "Technicolor CH USA Inc.", + "10a793": "Vantiva USA LLC", "10a829": "Cisco Systems, Inc", "10a932": "Beijing Cyber Cloud Technology Co. ,Ltd.", "10ae60": "Amazon Technologies Inc.", @@ -14286,7 +14297,7 @@ "10c07c": "Blu-ray Disc Association", "10c172": "HUAWEI TECHNOLOGIES CO.,LTD", "10c22f": "China Entropy Co., Ltd.", - "10c25a": "Technicolor CH USA Inc.", + "10c25a": "Vantiva USA LLC", "10c2ba": "UTT Co., Ltd.", "10c37b": "ASUSTek COMPUTER INC.", "10c3ab": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -14302,6 +14313,7 @@ "10c753": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", "10c9ca": "Ace Technology Corp.", "10ca81": "PRECIA", + "10cabf": "Texas Instruments", "10cc1b": "Liverock technologies,INC", "10ccdb": "AXIMUM PRODUITS ELECTRONIQUES", "10cd6e": "FISYS", @@ -14560,12 +14572,13 @@ "14962d": "New H3C Technologies Co., Ltd", "1496e5": "Samsung Electronics Co.,Ltd", "149877": "Apple, Inc.", - "14987d": "Technicolor CH USA Inc.", + "14987d": "Vantiva USA LLC", "1499e2": "Apple, Inc.", "149a10": "Microsoft Corporation", "149b2f": "JiangSu ZhongXie Intelligent Technology co., LTD", "149bd7": "MULI MUWAI FURNITURE QIDONG CO., LTD", "149bf3": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", + "149cef": "Texas Instruments", "149d09": "HUAWEI TECHNOLOGIES CO.,LTD", "149d99": "Apple, Inc.", "149e5d": "JSC IB Reform", @@ -14606,7 +14619,7 @@ "14b457": "Silicon Laboratories", "14b484": "Samsung Electronics Co.,Ltd", "14b73d": "ARCHEAN Technologies", - "14b7f8": "Technicolor CH USA Inc.", + "14b7f8": "Vantiva USA LLC", "14b837": "Shenzhen YOUHUA Technology Co., Ltd", "14b968": "HUAWEI TECHNOLOGIES CO.,LTD", "14bb6e": "Samsung Electronics Co.,Ltd", @@ -14837,6 +14850,7 @@ "1869d4": "Samsung Electronics Co.,Ltd", "1869d8": "Tuya Smart Inc.", "1869da": "China Mobile Group Device Co.,Ltd.", + "186a81": "Sagemcom Broadband SAS", "186d99": "Adanis Inc.", "186f2d": "Shenzhen Sundray Technologies Company Limited", "18703b": "Huawei Device Co., Ltd.", @@ -14901,6 +14915,7 @@ "18a3e8": "Fiberhome Telecommunication Technologies Co.,LTD", "18a4a9": "Vanu Inc.", "18a59c": "IEEE Registration Authority", + "18a5ff": "Arcadyan Corporation", "18a6f7": "TP-LINK TECHNOLOGIES CO.,LTD.", "18a7f1": "Qingdao Haier Technology Co.,Ltd", "18a905": "Hewlett Packard", @@ -15207,6 +15222,7 @@ "1c8341": "Hefei Bitland Information Technology Co.Ltd", "1c83b0": "Linked IP GmbH", "1c8464": "FORMOSA WIRELESS COMMUNICATION CORP.", + "1c860b": "Guangdong Taiying Technology Co.,Ltd", "1c8682": "Apple, Inc.", "1c869a": "Samsung Electronics Co.,Ltd", "1c86ad": "MCT CO., LTD.", @@ -15240,11 +15256,11 @@ "1c9c26": "Zoovel Technologies", "1c9c8c": "Juniper Networks", "1c9d3e": "Sdn. Bhd.", - "1c9d72": "Technicolor CH USA Inc.", + "1c9d72": "Vantiva USA LLC", "1c9dc2": "Espressif Inc.", "1c9e46": "Apple, Inc.", "1c9ecb": "Beijing Nari Smartchip Microelectronics Company Limited", - "1c9ecc": "Technicolor CH USA Inc.", + "1c9ecc": "Vantiva USA LLC", "1c9f4e": "COMPANY LIMITED", "1ca0b8": "Hon Hai Precision Industry Co., Ltd.", "1ca0d3": "IEEE Registration Authority", @@ -15295,6 +15311,7 @@ "1cc586": "Absolute Acoustics", "1cc63c": "Arcadyan Technology Corporation", "1cc72d": "Shenzhen Huapu Digital CO.,Ltd", + "1cc992": "Honor Device Co., Ltd.", "1cca41": "AO ", "1ccae3": "IEEE Registration Authority", "1ccb99": "TCT mobile ltd", @@ -15578,6 +15595,7 @@ "20b868": "Motorola Mobility LLC, a Lenovo Company", "20ba36": "u-blox AG", "20bb76": "COL GIOVANNI PAOLO SpA", + "20bbbc": "Hangzhou Ezviz Software Co.,Ltd.", "20bbc0": "Cisco Systems, Inc", "20bbc6": "Jabil Circuit Hungary Ltd.", "20becd": "eero inc.", @@ -15973,6 +15991,7 @@ "24fd0d": "Intelbras", "24fd52": "Liteon Technology Corporation", "24fd5b": "SmartThings, Inc.", + "24fdfa": "Private", "24fe9a": "CyberTAN Technology Inc.", "28011c": "zte corporation", "28022e": "Apple, Inc.", @@ -16192,7 +16211,7 @@ "28bd89": "Google, Inc.", "28be03": "TCT mobile ltd", "28be43": "vivo Mobile Communication Co., Ltd.", - "28be9b": "Technicolor CH USA Inc.", + "28be9b": "Vantiva USA LLC", "28bef3": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "28bf89": "Fiberhome Telecommunication Technologies Co.,LTD", "28c01b": "Shenzhen Skyworth Digital Technology CO., Ltd", @@ -16501,6 +16520,7 @@ "2c97ed": "Sony Imaging Products & Solutions Inc.", "2c9811": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "2c9924": "ARRIS Group, Inc.", + "2c9975": "Samsung Electronics Co.,Ltd", "2c9aa4": "Eolo SpA", "2c9d1e": "HUAWEI TECHNOLOGIES CO.,LTD", "2c9d65": "vivo Mobile Communication Co., Ltd.", @@ -16551,6 +16571,7 @@ "2cbeeb": "Nothing Technology Limited", "2cc253": "Apple, Inc.", "2cc260": "Oracle Corporation ", + "2cc3e6": "SHENZHEN BILIAN ELECTRONIC CO.,LTD", "2cc407": "machineQ", "2cc546": "Huawei Device Co., Ltd.", "2cc548": "IAdea Corporation", @@ -16735,6 +16756,7 @@ "305d38": "Beissbarth ", "305da6": "ADVALY SYSTEM Inc.", "305f77": "New H3C Technologies Co., Ltd", + "30600a": "CIG SHANGHAI CO LTD", "306023": "ARRIS Group, Inc.", "306112": "PAV GmbH", "306118": "Paradom Inc.", @@ -17031,6 +17053,7 @@ "345d10": "Wytek", "345d9e": "Sagemcom Broadband SAS", "345da8": "Cisco Systems, Inc", + "345e08": "Roku, Inc", "3460f9": "TP-Link Corporation Limited", "346178": "The Boeing Company", "346288": "Cisco Systems, Inc", @@ -17042,6 +17065,7 @@ "34684a": "Teraworks Co., Ltd.", "346893": "Tecnovideo Srl", "346895": "Hon Hai Precision Ind. Co.,Ltd.", + "3468b5": "Texas Instruments", "346987": "zte corporation", "346ac2": "HUAWEI TECHNOLOGIES CO.,LTD", "346b46": "Sagemcom Broadband SAS", @@ -17096,6 +17120,7 @@ "348a7b": "Samsung Electronics Co.,Ltd", "348aae": "Sagemcom Broadband SAS", "348b75": "LIMITED", + "348d52": "Sichuan Tianyi Comheart Telecom Co.,LTD", "348f27": "Ruckus Wireless", "34916f": "UserGate Ltd.", "3492c2": "Square Route Co., Ltd.", @@ -17147,6 +17172,7 @@ "34b472": "Espressif Inc.", "34b571": "PLDS", "34b5a3": "CIG SHANGHAI CO LTD", + "34b7da": "Espressif Inc.", "34b7fd": "Guangzhou Younghead Electronic Technology Co.,Ltd", "34b883": "Cisco Systems, Inc", "34b98d": "Xiaomi Communications Co Ltd", @@ -17294,7 +17320,7 @@ "381730": "Ulrich Lippert GmbH & Co KG", "381766": "PROMZAKAZ LTD.", "3817c3": "Hewlett Packard Enterprise", - "3817e1": "Technicolor CH USA Inc.", + "3817e1": "Vantiva USA LLC", "38184c": "Sony Home Entertainment&Sound Products Inc", "38192f": "Nokia Corporation", "381a52": "Seiko Epson Corporation", @@ -17326,6 +17352,7 @@ "382c4a": "ASUSTek COMPUTER INC.", "382dd1": "Samsung Electronics Co.,Ltd", "382de8": "Samsung Electronics Co.,Ltd", + "38315a": "Rinnai", "3831ac": "WEG", "3835fb": "Sagemcom Broadband SAS", "38378b": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -17338,7 +17365,7 @@ "383c9c": "Fujian Newland Payment Technology Co.,Ltd.", "383d5b": "Fiberhome Telecommunication Technologies Co.,LTD", "383f10": "DBL Technology Ltd.", - "383fb3": "Technicolor CH USA Inc.", + "383fb3": "Vantiva USA LLC", "38420b": "Sonos, Inc.", "384233": "Wildeboer Bauteile GmbH", "3842a6": "Ingenieurbuero Stahlkopf", @@ -17621,6 +17648,7 @@ "3c1915": "GFI Chrono Time", "3c195e": "Samsung Electronics Co.,Ltd", "3c197d": "Ericsson AB", + "3c19cb": "TECNO MOBILE LIMITED", "3c1a0f": "ClearSky Data", "3c1a57": "Cardiopulmonary Corp", "3c1a79": "Huayuan Technology CO.,LTD", @@ -17748,7 +17776,7 @@ "3c806b": "Hunan Voc Acoustics Technology Co., Ltd.", "3c80aa": "Ransnet Singapore Pte Ltd", "3c81d8": "Sagemcom Broadband SAS", - "3c82c0": "Technicolor CH USA Inc.", + "3c82c0": "Vantiva USA LLC", "3c831e": "CKD Corporation", "3c8375": "Microsoft Corporation", "3c83b5": "Advance Vision Electronics Co. Ltd.", @@ -17785,7 +17813,7 @@ "3c98bf": "Quest Controls, Inc.", "3c998c": "Houwa System Design Corp.", "3c99f7": "Lansentechnology AB", - "3c9a77": "Technicolor CH USA Inc.", + "3c9a77": "Vantiva USA LLC", "3c9bc6": "Huawei Device Co., Ltd.", "3c9bd6": "Vizio, Inc", "3c9c0f": "Intel Corporate", @@ -17822,7 +17850,7 @@ "3cb53d": "HUNAN GOKE MICROELECTRONICS CO.,LTD", "3cb6b7": "vivo Mobile Communication Co., Ltd.", "3cb72b": "PLUMgrid Inc", - "3cb74b": "Technicolor CH USA Inc.", + "3cb74b": "Vantiva USA LLC", "3cb792": "Hitachi Maxell, Ltd., Optronics Division", "3cb87a": "Private", "3cb9a6": "Belden Deutschland GmbH", @@ -17834,6 +17862,7 @@ "3cbdd8": "LG ELECTRONICS INC", "3cbee1": "NIKON CORPORATION", "3cbf60": "Apple, Inc.", + "3cc03e": "HUAWEI TECHNOLOGIES CO.,LTD", "3cc079": "Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd", "3cc0c6": "d&b audiotechnik GmbH", "3cc12c": "AES Corporation", @@ -17927,6 +17956,7 @@ "400d10": "ARRIS Group, Inc.", "400e67": "Tremol Ltd.", "400ef3": "zte corporation", + "400fc1": "Vantiva USA LLC", "401175": "IEEE Registration Authority", "4011c3": "Samsung Electronics Co.,Ltd", "4011dc": "Sonance", @@ -18049,11 +18079,12 @@ "407183": "Juniper Networks", "407496": "aFUN TECHNOLOGY INC.", "4074e0": "Intel Corporate", - "4075c3": "Technicolor CH USA Inc.", + "4075c3": "Vantiva USA LLC", "4076a9": "Huawei Device Co., Ltd.", "4077a9": "New H3C Technologies Co., Ltd", "40786a": "Motorola Mobility LLC, a Lenovo Company", "407875": "IMBEL - Industria de Material Belico do Brasil", + "407912": "Texas Instruments", "407a80": "Nokia Corporation", "407b1b": "Mettle Networks Inc.", "407c7d": "Nokia", @@ -18212,6 +18243,7 @@ "40f2e9": "IBM", "40f308": "Murata Manufacturing Co., Ltd.", "40f385": "IEEE Registration Authority", + "40f3b0": "Texas Instruments", "40f407": "Nintendo Co., Ltd.", "40f413": "Rubezh", "40f420": "Sichuan Tianyi Comheart Telecom Co.,LTD", @@ -18261,7 +18293,7 @@ "441aac": "Elektrik Uretim AS EOS", "441afa": "New H3C Technologies Co., Ltd", "441b88": "Apple, Inc.", - "441c12": "Technicolor CH USA Inc.", + "441c12": "Vantiva USA LLC", "441c7f": "Motorola Mobility LLC, a Lenovo Company", "441ca8": "Hon Hai Precision Ind. Co.,Ltd.", "441e91": "ARVIDA Intelligent Electronics Technology Co.,Ltd.", @@ -18287,7 +18319,7 @@ "44322a": "Avaya Inc", "443262": "zte corporation", "4432c2": "GOAL Co., Ltd.", - "4432c8": "Technicolor CH USA Inc.", + "4432c8": "Vantiva USA LLC", "44334c": "Shenzhen Bilian electronic CO.,LTD", "44348f": "MXT INDUSTRIAL LTDA", "4434a7": "ARRIS Group, Inc.", @@ -18549,7 +18581,7 @@ "44fe3b": "Arcadyan Corporation", "44ffba": "zte corporation", "480031": "HUAWEI TECHNOLOGIES CO.,LTD", - "480033": "Technicolor CH USA Inc.", + "480033": "Vantiva USA LLC", "48007d": "DTS ELEKTRONIK SAN. TIC. LTD. STI.", "4801c5": "Co., Ltd", "48022a": "B-Link Electronic Limited", @@ -18576,7 +18608,7 @@ "48188d": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", "4818fa": "Nocsys", "481a84": "Pointer Telocation Ltd", - "481b40": "Technicolor CH USA Inc.", + "481b40": "Vantiva USA LLC", "481bd2": "Intron Scientific co., ltd.", "481cb9": "SZ DJI TECHNOLOGY CO.,LTD", "481d70": "Cisco SPVTG", @@ -18640,7 +18672,7 @@ "484a30": "George Robotics Limited", "484ae9": "Hewlett Packard Enterprise", "484baa": "Apple, Inc.", - "484bd4": "Technicolor CH USA Inc.", + "484bd4": "Vantiva USA LLC", "484c29": "HUAWEI TECHNOLOGIES CO.,LTD", "484c86": "Huawei Device Co., Ltd.", "484d7e": "Dell Inc.", @@ -18654,6 +18686,7 @@ "485261": "SOREEL", "485415": "NET RULES TECNOLOGIA EIRELI", "485519": "Espressif Inc.", + "485541": "Iskratel d.o.o.", "48555c": "Wu Qi Technologies,Inc.", "48555e": "Shenzhen Skyworth Digital Technology CO., Ltd", "48555f": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -18791,7 +18824,7 @@ "48bd3d": "New H3C Technologies Co., Ltd", "48bd4a": "HUAWEI TECHNOLOGIES CO.,LTD", "48bda7": "Honor Device Co., Ltd.", - "48bdce": "Technicolor CH USA Inc.", + "48bdce": "Vantiva USA LLC", "48be2d": "Symanitron", "48bf6b": "Apple, Inc.", "48bf74": "Baicells Technologies Co.,LTD", @@ -18860,7 +18893,7 @@ "48f317": "Private", "48f3f3": "Co., Ltd", "48f47d": "TechVision Holding Internation Limited", - "48f7c0": "Technicolor CH USA Inc.", + "48f7c0": "Vantiva USA LLC", "48f7f1": "Nokia", "48f8b3": "Cisco-Linksys, LLC", "48f8db": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -18958,6 +18991,7 @@ "4c4576": "Information Technology Co.,Ltd.", "4c48da": "Beijing Autelan Technology Co.,Ltd", "4c494f": "zte corporation", + "4c496c": "Intel Corporate", "4c49e3": "Xiaomi Communications Co Ltd", "4c4b68": "Mobile Device, Inc. ", "4c4bf9": "IEEE Registration Authority", @@ -19140,6 +19174,7 @@ "4cd577": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "4cd629": "HUAWEI TECHNOLOGIES CO.,LTD", "4cd637": "Qsono Electronics Co., Ltd", + "4cd717": "Dell Inc.", "4cd7b6": "Helmer Scientific", "4cd98f": "Dell Inc.", "4cd9c4": "Co. Ltd", @@ -19201,7 +19236,7 @@ "500604": "Cisco Systems, Inc", "5006ab": "Cisco Systems, Inc", "5007c3": "Amazon Technologies Inc.", - "500959": "Technicolor CH USA Inc.", + "500959": "Vantiva USA LLC", "5009e5": "Drimsys,Inc", "500a52": "Huiwan Technologies Co. Ltd", "500b26": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -19282,6 +19317,7 @@ "503f56": "Syncmold Enterprise Corp", "503f98": "CMITECH", "504061": "Nokia", + "504074": "Alarm.com", "50411c": "AMPAK Technology,Inc.", "504172": "HUAWEI TECHNOLOGIES CO.,LTD", "5041b9": "I-O DATA DEVICE,INC.", @@ -19473,6 +19509,7 @@ "50d213": "CviLux Corporation", "50d274": "Steffes Corporation", "50d2f5": "Beijing Xiaomi Mobile Software Co., Ltd", + "50d33b": "cloudnineinfo", "50d37f": "Yu Fly Mikly Way Science and Technology Co., Ltd.", "50d45c": "Amazon Technologies Inc.", "50d4f7": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -19495,6 +19532,7 @@ "50e0ef": "Nokia", "50e14a": "Private", "50e24e": "zte corporation", + "50e4e0": "Aruba, a Hewlett Packard Enterprise Company", "50e538": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "50e549": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "50e636": "AVM Audiovisuelles Marketing und Computersysteme GmbH", @@ -19620,6 +19658,7 @@ "544249": "Sony Corporation", "5443b2": "Espressif Inc.", "544408": "Nokia Corporation", + "54443b": "HUAWEI TECHNOLOGIES CO.,LTD", "5444a3": "Samsung Electronics Co.,Ltd", "544538": "Texas Instruments", "544617": "zte corporation", @@ -19651,6 +19690,7 @@ "545aa6": "Espressif Inc.", "545dd9": "EDISTEC", "545ebd": "NL Technologies", + "545fa7": "Jibaiyou Technology Co.,Ltd.", "545fa9": "Teracom Limited", "546009": "Google, Inc.", "546172": "ZODIAC AEROSPACE SAS", @@ -19736,7 +19776,7 @@ "54a51b": "HUAWEI TECHNOLOGIES CO.,LTD", "54a54b": "NSC Communications Siberia Ltd", "54a619": "Alcatel-Lucent Shanghai Bell Co., Ltd", - "54a65c": "Technicolor CH USA Inc.", + "54a65c": "Vantiva USA LLC", "54a6db": "Huawei Device Co., Ltd.", "54a703": "TP-LINK TECHNOLOGIES CO.,LTD.", "54a9c8": "Home Control Singapore Pte Ltd", @@ -19877,7 +19917,7 @@ "5820b1": "Hewlett Packard", "582136": "KMB systems, s.r.o.", "5821e9": "TWPI", - "58238c": "Technicolor CH USA Inc.", + "58238c": "Vantiva USA LLC", "582429": "Google, Inc.", "582575": "HUAWEI TECHNOLOGIES CO.,LTD", "58278c": "BUFFALO.INC", @@ -20005,7 +20045,7 @@ "58957e": "Huawei Device Co., Ltd.", "5895d8": "IEEE Registration Authority", "58961d": "Intel Corporate", - "589630": "Technicolor CH USA Inc.", + "589630": "Vantiva USA LLC", "58971e": "Cisco Systems, Inc", "5897bd": "Cisco Systems, Inc", "589835": "Technicolor Delivery Technologies Belgium NV", @@ -20018,6 +20058,7 @@ "589ec6": "Gigaset Communications GmbH", "58a023": "Intel Corporate", "58a0cb": "TrackNet, Inc", + "58a15f": "Texas Instruments", "58a48e": "PixArt Imaging Inc.", "58a639": "Samsung Electronics Co.,Ltd", "58a76f": "iD corporation", @@ -20053,6 +20094,7 @@ "58c232": "NEC Corporation", "58c356": "EM Microelectronic", "58c38b": "Samsung Electronics Co.,Ltd", + "58c41e": "IEEE Registration Authority", "58c57e": "Fiberhome Telecommunication Technologies Co.,LTD", "58c583": "ITEL MOBILE LIMITED", "58c5cb": "Samsung Electronics Co.,Ltd", @@ -20068,6 +20110,7 @@ "58d061": "HUAWEI TECHNOLOGIES CO.,LTD", "58d071": "BW Broadcast", "58d08f": "IEEE 1904.1 Working Group", + "58d237": "Sichuan Tianyi Comheart Telecom Co.,LTD", "58d349": "Apple, Inc.", "58d391": "Quectel Wireless Solutions Co.,Ltd.", "58d50a": "Murata Manufacturing Co., Ltd.", @@ -20159,7 +20202,7 @@ "5c20d0": "Asoni Communication Co., Ltd.", "5c2167": "Rockwell Automation", "5c22c4": "DAE EUN ELETRONICS CO., LTD", - "5c22da": "Technicolor CH USA Inc.", + "5c22da": "Vantiva USA LLC", "5c2316": "Squirrels Research Labs LLC", "5c2443": "O-Sung Telecom Co., Ltd.", "5c2479": "Baltech AG", @@ -20256,17 +20299,19 @@ "5c6f4f": "S.A. SISTEL", "5c6f69": "Broadcom Limited", "5c7017": "Apple, Inc.", + "5c7075": "HUAWEI TECHNOLOGIES CO.,LTD", "5c710d": "Cisco Systems, Inc", "5c7545": "Wayties, Inc.", "5c75af": "Fitbit, Inc.", "5c75c6": "China Mobile Group Device Co.,Ltd.", - "5c7695": "Technicolor CH USA Inc.", + "5c7695": "Vantiva USA LLC", "5c76d5": "Nokia", "5c7757": "Haivision Network Video", "5c7776": "TCT mobile ltd", "5c78f8": "Huawei Device Co., Ltd.", + "5c7b5c": "Shenzhen SDMC Technology CO.,Ltd.", "5c7d5e": "HUAWEI TECHNOLOGIES CO.,LTD", - "5c7d7d": "Technicolor CH USA Inc.", + "5c7d7d": "Vantiva USA LLC", "5c80b6": "Intel Corporate", "5c81a7": "Network Devices Pty Ltd", "5c8382": "Nokia", @@ -20521,7 +20566,7 @@ "60391f": "ABB Ltd", "603a7c": "TP-LINK TECHNOLOGIES CO.,LTD.", "603aaf": "Samsung Electronics Co.,Ltd", - "603d26": "Technicolor CH USA Inc.", + "603d26": "Vantiva USA LLC", "603d29": "HUAWEI TECHNOLOGIES CO.,LTD", "603e7b": "Gafachi, Inc.", "603eca": "Cambridge Medical Robotics Ltd", @@ -20804,7 +20849,7 @@ "641084": "HEXIUM Technical Development Co., Ltd.", "6411a4": "Motorola Mobility LLC, a Lenovo Company", "641225": "Cisco Systems, Inc", - "641236": "Technicolor CH USA Inc.", + "641236": "Vantiva USA LLC", "641269": "ARRIS Group, Inc.", "641331": "Co. Ltd.", "64135a": "Itectra A/S", @@ -21001,7 +21046,7 @@ "64b2b4": "Fiberhome Telecommunication Technologies Co.,LTD", "64b310": "Samsung Electronics Co.,Ltd", "64b370": "PowerComm Solutions LLC", - "64b379": "Private", + "64b379": "Jiangsu Viscore Technologies Co.,Ltd", "64b473": "Xiaomi Communications Co Ltd", "64b5c6": "Nintendo Co.,Ltd", "64b5f2": "Samsung Electronics Co.,Ltd", @@ -21144,6 +21189,7 @@ "68215f": "Edgecore Networks Corporation", "68228e": "Juniper Networks", "68234b": "Nihon Dengyo Kousaku", + "6823f4": "Shenzhen Jinlangxin Technology Co., Ltd", "682624": "Ergatta", "68262a": "Sichuan Tianyi Comheart Telecom Co.,LTD", "682719": "Microchip Technology Inc.", @@ -21358,6 +21404,7 @@ "68d925": "ProSys Development Services", "68d927": "HUAWEI TECHNOLOGIES CO.,LTD", "68d93c": "Apple, Inc.", + "68da73": "IEEE Registration Authority", "68db54": "Co., Ltd.", "68db67": "Nantong Coship Electronics Co., Ltd.", "68db96": "OPWILL Technologies CO .,LTD", @@ -21367,6 +21414,7 @@ "68dd26": "Shanghai Focus Vision Security Technology Co.,Ltd", "68ddb7": "TP-LINK TECHNOLOGIES CO.,LTD.", "68ddd9": "HMD Global Oy", + "68dece": "Fiberhome Telecommunication Technologies Co.,LTD", "68dfdd": "Xiaomi Communications Co Ltd", "68e154": "SiMa.ai", "68e166": "Private", @@ -21514,6 +21562,7 @@ "6c4b7f": "Vossloh-Schwabe Deutschland GmbH", "6c4b90": "LiteON", "6c4bb4": "HUMAX Co., Ltd.", + "6c4ce2": "Intel Corporate", "6c4d51": "Shenzhen Ceres Technology Co., Ltd.", "6c4d73": "Apple, Inc.", "6c4e86": "Third Millennium Systems Ltd.", @@ -21523,7 +21572,7 @@ "6c54cd": "LAMPEX ELECTRONICS LIMITED", "6c5563": "Samsung Electronics Co.,Ltd", "6c558d": "HUAWEI TECHNOLOGIES CO.,LTD", - "6c55e8": "Technicolor CH USA Inc.", + "6c55e8": "Vantiva USA LLC", "6c5640": "BLU Products Inc", "6c5697": "Amazon Technologies Inc.", "6c5779": "Aclima, Inc.", @@ -21717,6 +21766,7 @@ "6cf373": "Samsung Electronics Co.,Ltd", "6cf37f": "Aruba, a Hewlett Packard Enterprise Company", "6cf5e8": "Mooredoll Inc.", + "6cf6da": "Intel Corporate", "6cf712": "Nokia Solutions and Networks GmbH & Co. KG", "6cf784": "Xiaomi Communications Co Ltd", "6cf97c": "Nanoptix Inc.", @@ -21732,7 +21782,7 @@ "7001b5": "Cisco Systems, Inc", "700258": "01DB-METRAVIB", "70033f": "Pimax Technology(ShangHai)Co.,Ltd", - "70037e": "Technicolor CH USA Inc.", + "70037e": "Vantiva USA LLC", "70039f": "Espressif Inc.", "70041d": "Espressif Inc.", "700433": "California Things Inc.", @@ -21803,6 +21853,7 @@ "703217": "Intel Corporate", "7032d5": "Athena Wireless Communications Inc", "703509": "Cisco Systems, Inc", + "7036b2": "Focusai Corp", "703811": "Siemens Mobility Limited", "7038b4": "Low Tech Solutions", "7038ee": "Avaya Inc", @@ -21863,7 +21914,7 @@ "705986": "OOO TTV", "705a0f": "Hewlett Packard", "705a6f": "IEEE Registration Authority", - "705a9e": "Technicolor CH USA Inc.", + "705a9e": "Vantiva USA LLC", "705aac": "Samsung Electronics Co.,Ltd", "705ab6": "CO., LTD. ", "705b2e": "M2Communication Inc.", @@ -21925,6 +21976,7 @@ "707e43": "ARRIS Group, Inc.", "707ede": "NASTEC LTD.", "708105": "Cisco Systems, Inc", + "708185": "New H3C Technologies Co., Ltd", "7081eb": "Apple, Inc.", "70820e": "as electronics GmbH", "70828e": "OleumTech Corporation", @@ -22036,6 +22088,7 @@ "70d6b6": "Metrum Technologies", "70d823": "Intel Corporate", "70d880": "Upos System sp. z o.o.", + "70d8c2": "Intel Corporate", "70d923": "vivo Mobile Communication Co., Ltd.", "70d931": "Co.,Ltd.", "70da17": "Austrian Audio GmbH", @@ -22289,6 +22342,7 @@ "749637": "Todaair Electronic Co., Ltd", "749779": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "749781": "zte corporation", + "74978e": "Nova Labs", "749975": "IBM Corporation", "749ac0": "Cachengo, Inc.", "749be8": "Hitron Technologies. Inc", @@ -22326,6 +22380,7 @@ "74b725": "Huawei Device Co., Ltd.", "74b7b3": "Shenzhen YOUHUA Technology Co., Ltd", "74b7e6": "Zegna-Daidong Limited", + "74b80f": "Zipline International Inc.", "74b839": "Texas Instruments", "74b91e": "Nanjing Bestway Automation System Co., Ltd", "74b9eb": "JinQianMao Technology Co.,Ltd.", @@ -22364,7 +22419,7 @@ "74d6cb": "New H3C Technologies Co., Ltd", "74d6e5": "Huawei Device Co., Ltd.", "74d6ea": "Texas Instruments", - "74d713": "Huaqin Technology Co.,Ltd", + "74d713": "Huaqin Technology Co. LTD", "74d7ca": "Panasonic Automotive Systems Co.,Ltd", "74d83e": "Intel Corporate", "74d850": "Evrisko Systems", @@ -22992,7 +23047,7 @@ "7c9763": "Openmatics s.r.o.", "7c97e1": "Huawei Device Co., Ltd.", "7c9a1d": "Apple, Inc.", - "7c9a54": "Technicolor CH USA Inc.", + "7c9a54": "Vantiva USA LLC", "7c9a9b": "VSE valencia smart energy", "7c9ebd": "Espressif Inc.", "7c9f07": "CIG SHANGHAI CO LTD", @@ -23184,10 +23239,11 @@ "802511": "ITEL MOBILE LIMITED", "802689": "D-Link International", "80276c": "Cisco Systems, Inc", - "802994": "Technicolor CH USA Inc.", + "802994": "Vantiva USA LLC", "802aa8": "Ubiquiti Inc", "802afa": "Germaneers GmbH", "802bf9": "Hon Hai Precision Ind. Co.,Ltd.", + "802d1a": "zte corporation", "802dbf": "Cisco Systems, Inc", "802de1": "Solarbridge Technologies", "802e14": "azeti Networks AG", @@ -23332,6 +23388,7 @@ "80929f": "Apple, Inc.", "809393": "Xapt GmbH", "80946c": "TOKYO RADAR CORPORATION", + "809562": "Extreme Networks, Inc.", "809621": "Lenovo", "8096b1": "ARRIS Group, Inc.", "8096ca": "Hon Hai Precision Ind. Co.,Ltd.", @@ -23359,7 +23416,7 @@ "80b03d": "Apple, Inc.", "80b07b": "zte corporation", "80b219": "ELEKTRON TECHNOLOGY UK LIMITED", - "80b234": "Technicolor CH USA Inc.", + "80b234": "Vantiva USA LLC", "80b289": "Forworld Electronics Ltd.", "80b32a": "UK Grid Solutions Ltd", "80b575": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23380,13 +23437,14 @@ "80beaf": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "80c16e": "Hewlett Packard", "80c3ba": "Sonova Consumer Hearing GmbH", + "80c41b": "Texas Instruments", "80c45d": "IPG Laser GmbH", "80c501": "OctoGate IT Security Systems GmbH", "80c548": "Shenzhen Zowee Technology Co.,Ltd", "80c5e6": "Microsoft Corporation", "80c5f2": "AzureWave Technology Inc.", "80c63f": "Remec Broadband Wireless , LLC", - "80c6ab": "Technicolor CH USA Inc.", + "80c6ab": "Vantiva USA LLC", "80c6ca": "Endian s.r.l.", "80c755": "Panasonic Appliances Company", "80c7c5": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -23402,7 +23460,7 @@ "80cf41": "Lenovo Mobile Communication Technology Ltd.", "80cfa2": "Huawei Device Co., Ltd.", "80d019": "Embed, Inc", - "80d04a": "Technicolor CH USA Inc.", + "80d04a": "Vantiva USA LLC", "80d065": "CKS Corporation", "80d09b": "HUAWEI TECHNOLOGIES CO.,LTD", "80d160": "Sdn. Bhd.", @@ -23417,7 +23475,7 @@ "80d733": "QSR Automations, Inc.", "80da13": "eero inc.", "80dabc": "Megafone Limited", - "80dac2": "Technicolor CH USA Inc.", + "80dac2": "Vantiva USA LLC", "80db17": "Juniper Networks", "80db31": "Power Quotient International Co., Ltd.", "80decc": "HYBE Co.,LTD", @@ -23437,6 +23495,7 @@ "80ed2c": "Apple, Inc.", "80ee25": "Shenzhen Skyworth Digital Technology CO., Ltd", "80ee73": "Shuttle Inc.", + "80f0cf": "Ruckus Wireless", "80f1a4": "HUAWEI TECHNOLOGIES CO.,LTD", "80f1f1": "Tech4home, Lda", "80f25e": "Kyynel", @@ -23479,7 +23538,7 @@ "8416f9": "TP-LINK TECHNOLOGIES CO.,LTD.", "841715": "Ltd.", "841766": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", - "8417ef": "Technicolor CH USA Inc.", + "8417ef": "Vantiva USA LLC", "841826": "Osram GmbH", "84183a": "Ruckus Wireless", "841888": "Juniper Networks", @@ -23705,6 +23764,7 @@ "84c7a9": "C3PO S.A.", "84c7ea": "Sony Corporation", "84c807": "ADVA Optical Networking Ltd.", + "84c8a0": "Hui Zhou Gaoshengda Technology Co.,LTD", "84c8b1": "Incognito Software Systems Inc.", "84c9b2": "D-Link International", "84c9c6": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", @@ -23787,6 +23847,7 @@ "880907": "MKT Systemtechnik GmbH & Co. KG", "8809af": "Masimo Corporation", "880aa3": "Juniper Networks", + "880ce0": "Texas Instruments", "880f10": "Huami Information Technology Co.,Ltd.", "880fa2": "Sagemcom Broadband SAS", "880fb6": "Jabil Circuits India Pvt Ltd,-EHTP unit", @@ -23831,6 +23892,7 @@ "882bd7": "ADDÉNERGIE TECHNOLOGIES", "882d53": "Co., Ltd.", "882e5a": "storONE", + "882f64": "BCOM Networks Limited", "883037": "Juniper Networks", "88308a": "Murata Manufacturing Co., Ltd.", "883314": "Texas Instruments", @@ -23911,6 +23973,7 @@ "886d2d": "Huawei Device Co., Ltd.", "886edd": "Micronet union Technology(Chengdu)Co., Ltd.", "886ee1": "Erbe Elektromedizin GmbH", + "886eeb": "HUAWEI TECHNOLOGIES CO.,LTD", "886f29": "Pocketbook International SA", "886fd4": "Dell Inc.", "887033": "Hangzhou Silan Microelectronic Inc", @@ -23973,7 +24036,7 @@ "889cad": "Cisco Systems, Inc", "889d98": "Allied-telesisK.K.", "889e33": "TCT mobile ltd", - "889e68": "Technicolor CH USA Inc.", + "889e68": "Vantiva USA LLC", "889f6f": "Samsung Electronics Co.,Ltd", "889faa": "Hella Gutmann Solutions GmbH ", "889ffa": "Hon Hai Precision Ind. Co.,Ltd.", @@ -24090,7 +24153,7 @@ "88f490": "Jetmobile Pte Ltd", "88f56e": "HUAWEI TECHNOLOGIES CO.,LTD", "88f7bf": "vivo Mobile Communication Co., Ltd.", - "88f7c7": "Technicolor CH USA Inc.", + "88f7c7": "Vantiva USA LLC", "88f872": "HUAWEI TECHNOLOGIES CO.,LTD", "88fc5d": "Cisco Systems, Inc", "88fca6": "devolo AG", @@ -24100,7 +24163,7 @@ "8c02cd": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "8c02fa": "COMMANDO Networks Limited", "8c04ba": "Dell Inc.", - "8c04ff": "Technicolor CH USA Inc.", + "8c04ff": "Vantiva USA LLC", "8c0551": "Koubachi AG", "8c06cb": "Toradex AG", "8c078c": "FLOW DATA INC", @@ -24131,6 +24194,7 @@ "8c192d": "IEEE Registration Authority", "8c19b5": "Arcadyan Corporation", "8c1abf": "Samsung Electronics Co.,Ltd", + "8c1af3": "Shenzhen Gooxi Information Security CO.,Ltd.", "8c1cda": "IEEE Registration Authority", "8c1d96": "Intel Corporate", "8c1e80": "Cisco Systems, Inc", @@ -24159,6 +24223,7 @@ "8c395c": "Bit4id Srl", "8c3a7e": "Universal Electronics, Inc.", "8c3b32": "Microfan B.V.", + "8c3b4a": "Universal Global Scientific Industrial Co., Ltd.", "8c3bad": "NETGEAR", "8c3c07": "Skiva Technologies, Inc.", "8c3c4a": "NAKAYO Inc", @@ -24188,6 +24253,7 @@ "8c5219": "SHARP Corporation", "8c53c3": "Beijing Xiaomi Mobile Software Co., Ltd", "8c53d2": "China Mobile Group Device Co.,Ltd.", + "8c53e6": "Wistron Neweb Corporation", "8c53f7": "A&D ENGINEERING CO., LTD.", "8c541d": "LGE ", "8c554a": "Intel Corporate", @@ -24229,7 +24295,7 @@ "8c6878": "Nortek-AS", "8c68c8": "zte corporation", "8c6a3b": "Samsung Electronics Co.,Ltd", - "8c6a8d": "Technicolor CH USA Inc.", + "8c6a8d": "Vantiva USA LLC", "8c6ae4": "Viogem Limited", "8c6bdb": "Huawei Device Co., Ltd.", "8c6d50": "SHENZHEN MTC CO LTD", @@ -24342,6 +24408,7 @@ "8cc84b": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "8cc8cd": "Samsung Electronics Co.,Ltd", "8cc8f4": "IEEE Registration Authority", + "8ccb14": "TBS GmbH", "8ccbdf": "FOXCONN INTERCONNECT TECHNOLOGY ", "8ccda2": "ACTP, Inc.", "8ccde8": "Nintendo Co., Ltd.", @@ -24351,11 +24418,13 @@ "8ccf09": "Dell EMC", "8ccf5c": "BEFEGA GmbH", "8ccf8f": "ITC Systems", + "8cd08b": "WuXi Rigosys Technology Co.,LTD", "8cd0b2": "Beijing Xiaomi Mobile Software Co., Ltd", "8cd17b": "CG Mobile", "8cd2e9": "YOKOTE SEIKO CO., LTD.", "8cd3a2": "VisSim AS", "8cd48e": "ITEL MOBILE LIMITED", + "8cd54a": "TAIYO YUDEN CO.,LTD", "8cd628": "Ikor Metering", "8cd67f": "EM Microelectronic", "8cd9d6": "Xiaomi Communications Co Ltd", @@ -24536,7 +24605,7 @@ "905682": "Lenbrook Industries Limited", "905692": "Autotalks Ltd.", "9056fc": "TECNO MOBILE LIMITED", - "905851": "Technicolor CH USA Inc.", + "905851": "Vantiva USA LLC", "90593c": "AZ-TECHNOLOGY SDN BHD", "9059af": "Texas Instruments", "905a08": "Super Micro Computer, Inc.", @@ -24550,6 +24619,7 @@ "90610c": "Pte Ltd", "9061ae": "Intel Corporate", "90633b": "Samsung Electronics Co.,Ltd", + "9064ad": "HUAWEI TECHNOLOGIES CO.,LTD", "906560": "EM Microelectronic", "906584": "Intel Corporate", "906717": "Alphion India Private Limited", @@ -24599,6 +24669,7 @@ "908260": "IEEE 1904.1 Working Group", "90834b": "BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD", "90837a": "General Electric Water & Process Technologies", + "90837e": "Fiberhome Telecommunication Technologies Co.,LTD", "90840d": "Apple, Inc.", "90842b": "LEGO System A/S", "90848b": "HDR10+ Technologies, LLC", @@ -24772,7 +24843,7 @@ "940230": "Logitech", "94026b": "Optictimes Co.,Ltd", "94049c": "HUAWEI TECHNOLOGIES CO.,LTD", - "9404e3": "Technicolor CH USA Inc.", + "9404e3": "Vantiva USA LLC", "9405b6": "Liling FullRiver Electronics & Technology Ltd", "9405bb": "IEEE Registration Authority", "940853": "Liteon Technology Corporation", @@ -24885,7 +24956,7 @@ "94659c": "Intel Corporate", "9466e7": "WOM Engineering", "94677e": "Belden India Private Limited", - "946a77": "Technicolor CH USA Inc.", + "946a77": "Vantiva USA LLC", "946ab0": "Arcadyan Corporation", "946dae": "Mellanox Technologies, Inc.", "9470d2": "WINFIRM TECHNOLOGY", @@ -25159,6 +25230,7 @@ "983713": "PT.Navicom Indonesia", "98387d": "ITRONIC TECHNOLOGY CO . , LTD .", "98398e": "Samsung Electronics Co.,Ltd", + "9839c0": "FLEXTRONICS", "983b16": "AMPAK Technology, Inc.", "983b67": "Corporation", "983b8f": "Intel Corporate", @@ -25194,7 +25266,7 @@ "98502e": "Apple, Inc.", "9850a3": "SIGNALTEK JSC", "98523d": "Sunitec Enterprise Co.,Ltd", - "98524a": "Technicolor CH USA Inc.", + "98524a": "Vantiva USA LLC", "9852b1": "Samsung Electronics Co.,Ltd", "98541b": "Intel Corporate", "9857d3": "HON HAI-CCPBG PRECISION IND.CO.,LTD.", @@ -25272,7 +25344,7 @@ "989ab9": "zte corporation", "989bcb": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "989c57": "HUAWEI TECHNOLOGIES CO.,LTD", - "989d5d": "Technicolor CH USA Inc.", + "989d5d": "Vantiva USA LLC", "989de5": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "989e63": "Apple, Inc.", "989f1e": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -25286,6 +25358,7 @@ "98aa3c": "Will i-tech Co., Ltd.", "98aad7": "BLUE WAVE NETWORKING CO LTD", "98aafc": "IEEE Registration Authority", + "98ab15": "Fujian Youyike Technology Co.,Ltd", "98acef": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "98ad1d": "Huawei Device Co., Ltd.", "98ae71": "VVDN Technologies Pvt Ltd", @@ -25330,6 +25403,7 @@ "98d293": "Google, Inc.", "98d331": "Shenzhen Bolutek Technology Co.,Ltd.", "98d3d2": "MEKRA Lang GmbH & Co. KG", + "98d3d7": "HUAWEI TECHNOLOGIES CO.,LTD", "98d3e7": "Netafim L", "98d686": "Chyi Lee industry Co., ltd.", "98d6bb": "Apple, Inc.", @@ -25404,6 +25478,7 @@ "9c05d6": "Ubiquiti Inc", "9c061b": "Hangzhou H3C Technologies Co., Limited", "9c066e": "Hytera Communications Corporation Limited", + "9c0971": "New H3C Technologies Co., Ltd", "9c0b05": "eero inc.", "9c0c35": "Shenzhenshi Xinzhongxin Technology Co.Ltd", "9c0cdf": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -25717,6 +25792,7 @@ "9cffbe": "OTSL Inc.", "9cffc2": "AVI Systems GmbH", "a0024a": "IEEE Registration Authority", + "a002a5": "Intel Corporate", "a002dc": "Amazon Technologies Inc.", "a00363": "Robert Bosch Healthcare GmbH", "a0043e": "Parker Hannifin Manufacturing Germany GmbH & Co. KG", @@ -25761,6 +25837,7 @@ "a0231b": "TeleComp R&D Corp.", "a0239f": "Cisco Systems, Inc", "a024f9": "Chengdu InnovaTest Technology Co., Ltd", + "a025d7": "Aruba, a Hewlett Packard Enterprise Company", "a027b6": "Samsung Electronics Co.,Ltd", "a02833": "IEEE Registration Authority", "a028ed": "HMD Global Oy", @@ -25874,6 +25951,7 @@ "a0779e": "Corp.", "a07817": "Apple, Inc.", "a078ba": "Pantech Co., Ltd.", + "a07f8a": "Sagemcom Broadband SAS", "a08069": "Intel Corporate", "a0821f": "Samsung Electronics Co.,Ltd", "a08222": "Qingdao Haier Technology Co.,Ltd", @@ -25946,6 +26024,7 @@ "a0b045": "Halong Mining", "a0b086": "Hirschmann Automation and Control GmbH", "a0b100": "ShenZhen Cando Electronics Co.,Ltd", + "a0b339": "Intel Corporate", "a0b3cc": "Hewlett Packard", "a0b437": "GD Mission Systems", "a0b439": "Cisco Systems, Inc", @@ -26041,7 +26120,7 @@ "a0fe91": "AVAT Automation GmbH", "a0ff0c": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "a0ff22": "SHENZHEN APICAL TECHNOLOGY CO., LTD", - "a0ff70": "Technicolor CH USA Inc.", + "a0ff70": "Vantiva USA LLC", "a400e2": "HUAWEI TECHNOLOGIES CO.,LTD", "a40130": "ABIsystems Co., LTD", "a402b9": "Intel Corporate", @@ -26159,7 +26238,7 @@ "a45602": "fenglian Technology Co.,Ltd.", "a4561b": "MCOT Corporation", "a45630": "Cisco Systems, Inc", - "a456cc": "Technicolor CH USA Inc.", + "a456cc": "Vantiva USA LLC", "a45802": "SHIN-IL TECH", "a4580f": "IEEE Registration Authority", "a45a1c": "smart-electronic GmbH", @@ -26284,6 +26363,7 @@ "a4badb": "Dell Inc.", "a4bb6d": "Dell Inc.", "a4bbaf": "Lime Instruments", + "a4bd7e": "HMD Global Oy", "a4bdc4": "HUAWEI TECHNOLOGIES CO.,LTD", "a4be2b": "HUAWEI TECHNOLOGIES CO.,LTD", "a4be61": "EutroVision System, Inc.", @@ -26307,6 +26387,7 @@ "a4c939": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "a4caa0": "HUAWEI TECHNOLOGIES CO.,LTD", "a4cc32": "Inficomm Co., Ltd", + "a4ccb3": "Xiaomi Communications Co Ltd", "a4ccb9": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "a4cd23": "Shenzhenshi Xinzhongxin Co., Ltd", "a4ceda": "Arcadyan Corporation", @@ -26380,6 +26461,7 @@ "a4fc77": "Mega Well Limited", "a4fcce": "Security Expert Ltd.", "a4ff95": "Nokia", + "a800e3": "Starkey Labs Inc.", "a8016d": "Aiwa Corporation", "a80180": "IMAGO Technologies GmbH", "a802db": "zte corporation", @@ -26542,6 +26624,7 @@ "a88808": "Apple, Inc.", "a8881f": "PRIVATE LIMITED", "a88940": "Huawei Device Co., Ltd.", + "a88b28": "SHENZHEN DIYANG SMART TECHNOLOGY CO.,LTD.", "a88c3e": "Microsoft Corporation", "a88cee": "MicroMade Galka i Drozdz sp.j.", "a88d7b": "SunDroid Global limited.", @@ -26550,6 +26633,7 @@ "a89008": "Beijing Yuecheng Technology Co. Ltd.", "a89042": "Beijing Wanwei Intelligent Technology Co., Ltd.", "a8913d": "Apple, Inc.", + "a89162": "Sophos Ltd", "a8934a": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "a89352": "SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD", "a893e6": "JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD", @@ -26774,7 +26858,7 @@ "ac4afe": "Hisense Broadband Multimedia Technology Co.,Ltd.", "ac4b1e": "Integri-Sys.Com LLC", "ac4bc8": "Juniper Networks", - "ac4ca5": "Technicolor CH USA Inc.", + "ac4ca5": "Vantiva USA LLC", "ac4d16": "Texas Instruments", "ac4dd9": "Extreme Networks, Inc.", "ac4e2e": "Shenzhen JingHanDa Electronics Co.Ltd", @@ -27197,6 +27281,7 @@ "b09575": "TP-LINK TECHNOLOGIES CO.,LTD.", "b0958e": "TP-LINK TECHNOLOGIES CO.,LTD.", "b0966c": "Lanbowan Technology Ltd.", + "b096ea": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "b09738": "Shenzhen Skyworth Digital Technology CO., Ltd", "b0973a": "E-Fuel Corporation", "b0982b": "Sagemcom Broadband SAS", @@ -27256,7 +27341,7 @@ "b0c128": "Adler ELREHA GmbH", "b0c19e": "zte corporation", "b0c205": "BIONIME", - "b0c287": "Technicolor CH USA Inc.", + "b0c287": "Vantiva USA LLC", "b0c387": "GOEFER, Inc.", "b0c46c": "Senseit", "b0c4e7": "Samsung Electronics Co.,Ltd", @@ -27267,6 +27352,7 @@ "b0c69a": "Juniper Networks", "b0c745": "BUFFALO.INC", "b0c787": "HUAWEI TECHNOLOGIES CO.,LTD", + "b0c7de": "Silicon Laboratories", "b0c83f": "Jiangsu Cynray IOT Co., Ltd.", "b0c8ad": "People Power Company", "b0c952": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -27387,7 +27473,7 @@ "b42875": "Futecho Solutions Private Limited", "b428f1": "E-Prime Co., Ltd.", "b4293d": "Shenzhen Urovo Technology Co.,Ltd.", - "b42a0e": "Technicolor CH USA Inc.", + "b42a0e": "Vantiva USA LLC", "b42a39": "ORBIT MERRET, spol. s r. o.", "b42c92": "Zhejiang Weirong Electronic Co., Ltd", "b42cbe": "Direct Payment Solutions Limited", @@ -27602,6 +27688,7 @@ "b4dc09": "Guangzhou Dawei Communication Co.,Ltd", "b4dd15": "ControlThings Oy Ab", "b4ddd0": "Continental Automotive Hungary Kft", + "b4dde0": "Shanghai Amphenol Airwave Communication Electronics Co.,Ltd.", "b4de31": "Cisco Systems, Inc", "b4dedf": "zte corporation", "b4df3b": "Chromlech", @@ -27720,6 +27807,7 @@ "b83bcc": "Xiaomi Communications Co Ltd", "b83c28": "Apple, Inc.", "b83d4e": "Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch", + "b83df6": "Texas Instruments", "b83dfb": "Co., Ltd.", "b83e59": "Roku, Inc.", "b83fd2": "Mellanox Technologies, Inc.", @@ -27755,7 +27843,7 @@ "b85cee": "Co., Ltd", "b85d0a": "Apple, Inc.", "b85dc3": "HUAWEI TECHNOLOGIES CO.,LTD", - "b85e71": "Technicolor CH USA Inc.", + "b85e71": "Vantiva USA LLC", "b85e7b": "Samsung Electronics Co.,Ltd", "b85f98": "Amazon Technologies Inc.", "b85fb0": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27775,6 +27863,7 @@ "b86a97": "Edgecore Networks Corporation", "b86af1": "Sagemcom Broadband SAS", "b86b23": "Toshiba", + "b86ce0": "Hewlett Packard Enterprise", "b86ce8": "Samsung Electronics Co.,Ltd", "b870f4": "CO., LTD. ", "b87424": "Viessmann Elektronik GmbH", @@ -27852,8 +27941,9 @@ "b8a386": "D-Link International", "b8a3e0": "BenRui Technology Co.,Ltd", "b8a44f": "Axis Communications AB", - "b8a535": "Technicolor CH USA Inc.", + "b8a535": "Vantiva USA LLC", "b8a58d": "Axe Group Holdings Limited", + "b8a75e": "Wuxi Xinjie Electric Co.,Ltd", "b8a8af": "Logic S.p.A.", "b8ab61": "Cisco Meraki", "b8ab62": "Hui Zhou Gaoshengda Technology Co.,LTD", @@ -27986,6 +28076,7 @@ "bc0f64": "Intel Corporate", "bc0f9a": "D-Link International", "bc0fa7": "Ouster", + "bc0ff3": "HP Inc.", "bc107b": "Samsung Electronics Co.,Ltd", "bc125e": "Beijing WisVideo INC.", "bc13a8": "Shenzhen YOUHUA Technology Co., Ltd", @@ -28084,6 +28175,7 @@ "bc5729": "Shenzhen KKM Co., Ltd", "bc5a56": "Cisco Systems, Inc", "bc5bd5": "ARRIS Group, Inc.", + "bc5c17": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", "bc5c4c": "ELECOM CO.,LTD.", "bc5da3": "Sichuan Tianyi Comheart Telecom Co.,LTD", "bc5e33": "Hangzhou Hikvision Digital Technology Co.,Ltd.", @@ -28146,6 +28238,7 @@ "bc83a7": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "bc851f": "Samsung Electronics Co.,Ltd", "bc8556": "Hon Hai Precision Ind. Co.,Ltd.", + "bc87fa": "Bose Corporation", "bc8893": "VILLBAU Ltd.", "bc88c3": "Ningbo Dooya Mechanic & Electronic Technology Co., Ltd", "bc89a7": "Apple, Inc.", @@ -28169,7 +28262,7 @@ "bc99bc": "FonSee Technology Inc.", "bc9a53": "Huawei Device Co., Ltd.", "bc9b5e": "Hangzhou Hikvision Digital Technology Co.,Ltd.", - "bc9b68": "Technicolor CH USA Inc.", + "bc9b68": "Vantiva USA LLC", "bc9c31": "HUAWEI TECHNOLOGIES CO.,LTD", "bc9cc5": "Beijing Huafei Technology Co., Ltd.", "bc9d42": "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", @@ -28559,7 +28652,7 @@ "c0e54e": "ARIES Embedded GmbH", "c0e7bf": "Sichuan AI-Link Technology Co., Ltd.", "c0e862": "Apple, Inc.", - "c0e911": "Private", + "c0e911": "RealNetworks", "c0eac3": "IEEE Registration Authority", "c0eae4": "Sonicwall", "c0ede5": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -28641,7 +28734,7 @@ "c42628": "Airo Wireless", "c42728": "zte corporation", "c4278c": "Huawei Device Co., Ltd.", - "c42795": "Technicolor CH USA Inc.", + "c42795": "Vantiva USA LLC", "c4282d": "Embedded Intellect Pty Ltd", "c4291d": "KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.", "c42996": "Signify B.V.", @@ -28955,6 +29048,7 @@ "c81451": "HUAWEI TECHNOLOGIES CO.,LTD", "c81479": "Samsung Electronics Co.,Ltd", "c814b4": "Sichuan Tianyi Comheart Telecom Co.,LTD", + "c8154e": "Intel Corporate", "c816a5": "Masimo Corporation", "c816bd": "Qingdao Hisense Communications Co.,Ltd.", "c816da": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", @@ -29022,6 +29116,7 @@ "c84aa0": "Sony Interactive Entertainment Inc.", "c84bd6": "Dell Inc.", "c84c75": "Cisco Systems, Inc", + "c84c78": "zte corporation", "c84d34": "LIONS Taiwan Technology Inc.", "c84d44": "Shenzhen Jiapeng Huaxiang Technology Co.,Ltd", "c84f0e": "Sdn. Bhd.", @@ -29030,6 +29125,7 @@ "c850e9": "Raisecom Technology CO., LTD", "c85142": "Samsung Electronics Co.,Ltd", "c85195": "HUAWEI TECHNOLOGIES CO.,LTD", + "c851fb": "Extreme Networks, Inc.", "c85261": "ARRIS Group, Inc.", "c853e1": "Beijing Bytedance Network Technology Co., Ltd", "c8544b": "Zyxel Communications Corporation", @@ -29055,6 +29151,7 @@ "c8675e": "Extreme Networks, Inc.", "c868de": "Huawei Device Co., Ltd.", "c869cd": "Apple, Inc.", + "c86bbc": "IEEE Registration Authority", "c86c1e": "Display Systems Ltd", "c86c20": "Sichuan Tianyi Comheart Telecom Co.,LTD", "c86c3d": "Amazon Technologies Inc.", @@ -29090,6 +29187,7 @@ "c8873b": "Net Optics", "c889f3": "Apple, Inc.", "c88a83": "Dongguan HuaHong Electronics Co.,Ltd", + "c88a9a": "Intel Corporate", "c88b47": "Nolangroup S.P.A con Socio Unico", "c88be8": "Masimo Corporation", "c88d83": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -29123,6 +29221,7 @@ "c8a1b6": "Shenzhen Longway Technologies Co., Ltd", "c8a1ba": "Neul Ltd", "c8a2ce": "Oasis Media Systems LLC", + "c8a362": "ASIX Electronics Corporation", "c8a40d": "Cooler Master Technology Inc", "c8a608": "Ruckus Wireless", "c8a620": "Nebula, Inc", @@ -29253,7 +29352,7 @@ "cc00f1": "Sagemcom Broadband SAS", "cc037b": "Texas Instruments", "cc03d9": "Cisco Meraki", - "cc03fa": "Technicolor CH USA Inc.", + "cc03fa": "Vantiva USA LLC", "cc047c": "G-WAY Microwave", "cc04b4": "Select Comfort", "cc051b": "Samsung Electronics Co.,Ltd", @@ -29277,6 +29376,7 @@ "cc167e": "Cisco Systems, Inc", "cc187b": "Manzanita Systems, Inc.", "cc19a8": "PT Inovação e Sistemas SA", + "cc1aa3": "Arista Networks", "cc1afa": "zte corporation", "cc1be0": "IEEE Registration Authority", "cc1e97": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -29310,7 +29410,7 @@ "cc33bb": "Sagemcom Broadband SAS", "cc3429": "TP-LINK TECHNOLOGIES CO.,LTD.", "cc34d7": "GEWISS S.P.A.", - "cc3540": "Technicolor CH USA Inc.", + "cc3540": "Vantiva USA LLC", "cc355a": "SecuGen Corporation", "cc37ab": "Edgecore Networks Corporation", "cc398c": "Shiningtek", @@ -29327,6 +29427,7 @@ "cc3f1d": "HMS Industrial Networks SLU", "cc3f8a": "KOMATSU LTD.", "cc3fea": "BAE Systems, Inc", + "cc4085": "WiZ", "cc40d0": "NETGEAR", "cc418e": "MSA Innovation", "cc4210": "Xiaomi Communications Co Ltd", @@ -29465,6 +29566,7 @@ "ccab2c": "HUMAX Co., Ltd.", "ccacfe": "Co., Ltd.", "ccaf78": "Hon Hai Precision Ind. Co.,Ltd.", + "ccb071": "Fiberhome Telecommunication Technologies Co.,LTD", "ccb0a8": "Huawei Device Co., Ltd.", "ccb0da": "Liteon Technology Corporation", "ccb11a": "Samsung Electronics Co.,Ltd", @@ -29552,7 +29654,7 @@ "ccf0fd": "Information Technology Co., Ltd.", "ccf305": "SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD", "ccf3a5": "Chi Mei Communication Systems, Inc", - "ccf3c8": "Technicolor CH USA Inc.", + "ccf3c8": "Vantiva USA LLC", "ccf407": "EUKREA ELECTROMATIQUE SARL", "ccf411": "Google, Inc.", "ccf538": "3isysnetworks", @@ -29681,7 +29783,7 @@ "d05995": "Fiberhome Telecommunication Technologies Co.,LTD", "d059c3": "CeraMicro Technology Corporation", "d059e4": "Samsung Electronics Co.,Ltd", - "d05a00": "Technicolor CH USA Inc.", + "d05a00": "Vantiva USA LLC", "d05a0f": "I-BT DIGITAL CO.,LTD", "d05af1": "Shenzhen Pulier Tech CO.,Ltd", "d05afd": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", @@ -29724,6 +29826,7 @@ "d07ab5": "HUAWEI TECHNOLOGIES CO.,LTD", "d07b6f": "Zhuhai Yunmai Technology Co.,Ltd", "d07c2d": "Leie IOT technology Co., Ltd", + "d07cb2": "Sigmastar Technology Ltd.", "d07d33": "Huawei Device Co., Ltd.", "d07de5": "Forward Pay Systems, Inc.", "d07e01": "Huawei Device Co., Ltd.", @@ -29739,7 +29842,7 @@ "d0880c": "Apple, Inc.", "d08999": "APCON, Inc.", "d08a55": "Skullcandy", - "d08a91": "Technicolor CH USA Inc.", + "d08a91": "Vantiva USA LLC", "d08b7e": "Passif Semiconductor", "d08cb5": "Texas Instruments", "d08cff": "UPWIS AB", @@ -29777,7 +29880,7 @@ "d0b0cd": "Moen", "d0b128": "Samsung Electronics Co.,Ltd", "d0b214": "PoeWit Inc", - "d0b2c4": "Technicolor CH USA Inc.", + "d0b2c4": "Vantiva USA LLC", "d0b33f": "Shenzhen TINNO Mobile Technology Corp.", "d0b45d": "Huawei Device Co., Ltd.", "d0b498": "Robert Bosch LLC Automotive Electronics", @@ -29810,6 +29913,7 @@ "d0c7c0": "TP-LINK TECHNOLOGIES CO.,LTD.", "d0c857": "IEEE Registration Authority", "d0cde1": "Scientech Electronics", + "d0cec9": "HAN CHANG", "d0cf0e": "Sagemcom Broadband SAS", "d0cf5e": "Energy Micro AS", "d0cfd8": "Huizhou Boshijie Technology Co.,Ltd", @@ -29919,6 +30023,7 @@ "d42dc5": "i-PRO Co., Ltd.", "d42f23": "Akenori PTE Ltd", "d42fca": "Apple, Inc.", + "d43127": "Ruijie Networks Co.,LTD", "d4319d": "Sinwatec", "d43260": "GoPro", "d43266": "Fike Corporation", @@ -30125,7 +30230,7 @@ "d4b761": "Sichuan AI-Link Technology Co., Ltd.", "d4b7d0": "Ciena Corporation", "d4b8ff": "Home Control Singapore Pte Ltd", - "d4b92f": "Technicolor CH USA Inc.", + "d4b92f": "Vantiva USA LLC", "d4baba": "IEEE Registration Authority", "d4bafa": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "d4bbc8": "vivo Mobile Communication Co., Ltd.", @@ -30163,6 +30268,7 @@ "d4d7a9": "Shanghai Kaixiang Info Tech LTD", "d4d7cf": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "d4d853": "Intel Corporate", + "d4d892": "HUAWEI TECHNOLOGIES CO.,LTD", "d4d898": "Korea CNO Tech Co., Ltd", "d4d919": "GoPro", "d4da21": "Beijing Xiaomi Mobile Software Co., Ltd", @@ -30173,7 +30279,7 @@ "d4e053": "Aruba, a Hewlett Packard Enterprise Company", "d4e08e": "ValueHD Corporation", "d4e22f": "Roku, Inc", - "d4e2cb": "Technicolor CH USA Inc.", + "d4e2cb": "Vantiva USA LLC", "d4e32c": "S. Siedle & Sohne", "d4e33f": "Nokia", "d4e6b7": "Samsung Electronics Co.,Ltd", @@ -30369,6 +30475,7 @@ "d87533": "Nokia Corporation", "d8760a": "Escort, Inc.", "d876ae": "HUAWEI TECHNOLOGIES CO.,LTD", + "d87766": "Nurivoice Co., Ltd", "d8778b": "Intelbras", "d8787f": "Ubee Interactive Co., Limited", "d878e5": "KUHN SA", @@ -30463,6 +30570,7 @@ "d8b90e": "Triple Domain Vision Co.,Ltd.", "d8bb2c": "Apple, Inc.", "d8bbc1": "Micro-Star INTL CO., LTD.", + "d8bc38": "Espressif Inc.", "d8bc59": "Shenzhen DAPU Microelectronics Co., Ltd", "d8be1f": "Apple, Inc.", "d8be65": "Amazon Technologies Inc.", @@ -30504,6 +30612,7 @@ "d8d775": "Sagemcom Broadband SAS", "d8d866": "SHENZHEN TOZED TECHNOLOGIES CO.,LTD.", "d8da52": "APATOR S.A.", + "d8daf1": "HUAWEI TECHNOLOGIES CO.,LTD", "d8dc40": "Apple, Inc.", "d8dce9": "Kunshan Erlab ductless filtration system Co.,Ltd", "d8dd5f": "BALMUDA Inc.", @@ -30763,6 +30872,7 @@ "dcb3b4": "Co., Ltd.", "dcb4ac": "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.", "dcb4c4": "Microsoft XCG", + "dcb4ca": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "dcb54f": "Apple, Inc.", "dcb72e": "Xiaomi Communications Co Ltd", "dcb7ac": "Aruba, a Hewlett Packard Enterprise Company", @@ -30770,6 +30880,7 @@ "dcb808": "Extreme Networks, Inc.", "dcbb96": "Full Solution Telecom", "dcbd7a": "Guangzhou Shiyuan Electronic Technology Company Limited", + "dcbdcc": "Quectel Wireless Solutions Co.,Ltd.", "dcbe49": "ITEL MOBILE LIMITED", "dcbe7a": "Zhejiang Nurotron Biotechnology Co.", "dcbf90": "HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.", @@ -30786,6 +30897,7 @@ "dccba8": "Explora Technologies Inc", "dccc8d": "Sdn. Bhd.", "dccce6": "Samsung Electronics Co.,Ltd", + "dccd18": "Nintendo Co.,Ltd", "dccd2f": "Seiko Epson Corporation", "dccd66": "LTD.", "dccd74": "Japan E.M.Solutions Co., Ltd.", @@ -30832,7 +30944,7 @@ "dce838": "Limited", "dce994": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "dceb53": "Wuhan QianXiao Elecronic Technology CO.,LTD", - "dceb69": "Technicolor CH USA Inc.", + "dceb69": "Vantiva USA LLC", "dceb94": "Cisco Systems, Inc", "dcec06": "Heimi Network Technology Co., Ltd.", "dcece3": "LYOTECH LABS LLC", @@ -30905,6 +31017,7 @@ "e01f88": "Xiaomi Communications Co Ltd", "e01fed": "Nokia Shanghai Bell Co., Ltd.", "e01ffc": "Mobility Technologies Communication Co., Ltd.", + "e021fe": "Richer Link Technologies CO.,LTD", "e02202": "ARRIS Group, Inc.", "e023d7": "Sleep Number", "e023ff": "Fortinet, Inc.", @@ -30938,7 +31051,7 @@ "e03560": "Challenger Supply Holdings, LLC", "e03676": "HUAWEI TECHNOLOGIES CO.,LTD", "e036e3": "Stage One International Co., Ltd.", - "e03717": "Technicolor CH USA Inc.", + "e03717": "Vantiva USA LLC", "e037bf": "Wistron Neweb Corporation", "e0382d": "IEEE Registration Authority", "e0383f": "zte corporation", @@ -31034,7 +31147,7 @@ "e0859a": "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", "e08614": "Novatel Wireless Solutions, Inc.", "e087b1": "Nata-Info Ltd.", - "e0885d": "Technicolor CH USA Inc.", + "e0885d": "Vantiva USA LLC", "e0897e": "Apple, Inc.", "e0899d": "Cisco Systems, Inc", "e08a7e": "Exponent", @@ -31155,7 +31268,7 @@ "e0db10": "Samsung Electronics Co.,Ltd", "e0db55": "Dell Inc.", "e0db88": "Open Standard Digital-IF Interface for SATCOM Systems", - "e0dbd1": "Technicolor CH USA Inc.", + "e0dbd1": "Vantiva USA LLC", "e0dca0": "Siemens Industrial Automation Products Ltd., Chengdu", "e0dcff": "Xiaomi Communications Co Ltd", "e0ddc0": "vivo Mobile Communication Co., Ltd.", @@ -31202,6 +31315,7 @@ "e408e7": "Quectel Wireless Solutions Co.,Ltd.", "e40cfd": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "e40d36": "Intel Corporate", + "e40d3b": "Ericsson AB", "e40eee": "HUAWEI TECHNOLOGIES CO.,LTD", "e4115b": "Hewlett Packard", "e41218": "ShenZhen Rapoo Technology Co., Ltd.", @@ -31265,6 +31379,7 @@ "e43ec6": "HUAWEI TECHNOLOGIES CO.,LTD", "e43ed7": "Arcadyan Corporation", "e43fa2": "Wuxi DSP Technologies Inc.", + "e44097": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "e440e2": "Samsung Electronics Co.,Ltd", "e44122": "Co., Ltd", "e44164": "Nokia", @@ -31415,7 +31530,7 @@ "e4bd4b": "zte corporation", "e4beed": "Netcore Technology Inc.", "e4befb": "HUAWEI TECHNOLOGIES CO.,LTD", - "e4bffa": "Technicolor CH USA Inc.", + "e4bffa": "Vantiva USA LLC", "e4c0cc": "China Mobile Group Device Co.,Ltd.", "e4c0e2": "Sagemcom Broadband SAS", "e4c146": "Objetivos y Servicios de Valor A", @@ -31450,6 +31565,7 @@ "e4dc5f": "Cofractal, Inc.", "e4dccc": "HUAWEI TECHNOLOGIES CO.,LTD", "e4dd79": "En-Vision America, Inc.", + "e4de40": "Aruba, a Hewlett Packard Enterprise Company", "e4e0a6": "Apple, Inc.", "e4e0c5": "Samsung Electronics Co.,Ltd", "e4e112": "Texas Instruments", @@ -31767,6 +31883,7 @@ "e8defb": "MESOTIC SAS", "e8df70": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "e8dff2": "PRF Co., Ltd.", + "e8e07e": "Silicon Laboratories", "e8e08f": "GRAVOTECH MARKING SAS", "e8e0b7": "Toshiba", "e8e1e1": "Gemtek Technology Co., Ltd.", @@ -31910,6 +32027,7 @@ "ec50aa": "Aruba, a Hewlett Packard Enterprise Company", "ec51bc": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "ec52dc": "WORLD MEDIA AND TECHNOLOGY Corp.", + "ec5382": "Honor Device Co., Ltd.", "ec542e": "Shanghai XiMei Electronic Technology Co. Ltd", "ec551c": "HUAWEI TECHNOLOGIES CO.,LTD", "ec55f9": "Hon Hai Precision Ind. Co.,Ltd.", @@ -31986,7 +32104,7 @@ "ec9233": "Eddyfi NDT Inc", "ec9327": "MEMMERT GmbH + Co. KG", "ec9365": "Mapper.ai, Inc.", - "ec937d": "Technicolor CH USA Inc.", + "ec937d": "Vantiva USA LLC", "ec93ed": "DDoS-Guard LTD", "ec9468": "META SYSTEM SPA ", "ec94cb": "Espressif Inc.", @@ -32011,7 +32129,7 @@ "eca5de": "ONYX WIFI Inc", "eca62f": "HUAWEI TECHNOLOGIES CO.,LTD", "eca7ad": "Barrot Technology Co.,Ltd.", - "eca81f": "Technicolor CH USA Inc.", + "eca81f": "Vantiva USA LLC", "eca86b": "Elitegroup Computer Systems Co.,Ltd.", "eca907": "Apple, Inc.", "eca940": "ARRIS Group, Inc.", @@ -32087,6 +32205,7 @@ "ecebb8": "Hewlett Packard Enterprise", "eced73": "Motorola Mobility LLC, a Lenovo Company", "eceed8": "ZTLX Network Technology Co.,Ltd", + "ecef17": "Sunplus Technology Co., Ltd.", "ecf00e": "AboCom", "ecf0fe": "zte corporation", "ecf22b": "TECNO MOBILE LIMITED", @@ -32137,6 +32256,7 @@ "f01e34": "ORICO Technologies Co., Ltd", "f01faf": "Dell Inc.", "f01fc7": "Apple, Inc.", + "f020ff": "Intel Corporate", "f02178": "UNIONMAN TECHNOLOGY CO.,LTD", "f0219d": "Cal-Comp Electronics & Communications Company Ltd.", "f021e0": "eero inc.", @@ -32272,6 +32392,7 @@ "f08bfe": "COSTEL.,CO.LTD", "f08cfb": "Fiberhome Telecommunication Technologies Co.,LTD", "f08edb": "VeloCloud Networks", + "f09008": "Shenzhen Skyworth Digital Technology CO., Ltd", "f0921c": "Hewlett Packard", "f092b4": "Sichuan Tianyi Comheart Telecom Co.,LTD", "f0933a": "NxtConect", @@ -32645,6 +32766,7 @@ "f4b5aa": "zte corporation", "f4b5bb": "CERAGON NETWORKS", "f4b688": "PLANTRONICS, INC.", + "f4b6c6": "Indra Heera Technology LLP", "f4b6e5": "TerraSem Co.,Ltd", "f4b72a": "TIME INTERCONNECT LTD", "f4b78d": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -32663,7 +32785,7 @@ "f4bfa8": "Juniper Networks", "f4bfbb": "China Mobile Group Device Co.,Ltd.", "f4c02f": "BlueBite", - "f4c114": "Technicolor CH USA Inc.", + "f4c114": "Vantiva USA LLC", "f4c248": "Samsung Electronics Co.,Ltd", "f4c447": "Coagent International Enterprise Limited", "f4c4d6": "Shenzhen Xinfa Electronic Co.,ltd", @@ -32836,7 +32958,7 @@ "f8369b": "Texas Instruments", "f83869": "LG Electronics", "f83880": "Apple, Inc.", - "f83b1d": "Technicolor CH USA Inc.", + "f83b1d": "Vantiva USA LLC", "f83b7e": "Huawei Device Co., Ltd.", "f83c80": "MITSUMI ELECTRIC CO.,LTD.", "f83cbf": "BOTATO ELECTRONICS SDN BHD", @@ -32891,7 +33013,7 @@ "f85c7e": "Shenzhen Honesty Electronics Co.,Ltd.", "f85e0b": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "f85e3c": "SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD", - "f85e42": "Technicolor CH USA Inc.", + "f85e42": "Vantiva USA LLC", "f85ea0": "Intel Corporate", "f85f2a": "Nokia Corporation", "f860f0": "Aruba, a Hewlett Packard Enterprise Company", @@ -33055,7 +33177,7 @@ "f8d0ac": "Sony Interactive Entertainment Inc.", "f8d0bd": "Samsung Electronics Co.,Ltd", "f8d111": "TP-LINK TECHNOLOGIES CO.,LTD.", - "f8d2ac": "Technicolor CH USA Inc.", + "f8d2ac": "Vantiva USA LLC", "f8d3a9": "AXAN Networks", "f8d462": "Pumatronix Equipamentos Eletronicos Ltda.", "f8d478": "Pvt Ltd", @@ -33230,7 +33352,7 @@ "fc4ea4": "Apple, Inc.", "fc5090": "SIMEX Sp. z o.o.", "fc51a4": "ARRIS Group, Inc.", - "fc528d": "Technicolor CH USA Inc.", + "fc528d": "Vantiva USA LLC", "fc52ce": "Control iD", "fc539e": "Shanghai Wind Technologies Co.,Ltd", "fc55dc": "Baltic Latvian Universal Electronics LLC", @@ -33300,14 +33422,14 @@ "fc8f90": "Samsung Electronics Co.,Ltd", "fc8fc4": "Intelligent Technology Inc.", "fc90fa": "Independent Technologies", - "fc9114": "Technicolor CH USA Inc.", + "fc9114": "Vantiva USA LLC", "fc9189": "Sichuan Tianyi Comheart Telecom Co.,LTD", "fc923b": "Nokia Corporation", "fc9257": "Sdn. Bhd.", "fc9435": "HUAWEI TECHNOLOGIES CO.,LTD", "fc946c": "UBIVELOX", "fc94ce": "zte corporation", - "fc94e3": "Technicolor CH USA Inc.", + "fc94e3": "Vantiva USA LLC", "fc956a": "OCTAGON SYSTEMS CORP.", "fc9643": "Juniper Networks", "fc97a8": "Cricut Inc.", @@ -33353,6 +33475,7 @@ "fcb10d": "Shenzhen Tian Kun Technology Co.,LTD.", "fcb2d6": "CIG SHANGHAI CO LTD", "fcb3bc": "Intel Corporate", + "fcb467": "Espressif Inc.", "fcb4e6": "ASKEY COMPUTER CORP", "fcb58a": "Wapice Ltd.", "fcb662": "IC Holdings LLC", @@ -33426,6 +33549,7 @@ "fcf77b": "Huawei Device Co., Ltd.", "fcf8ae": "Intel Corporate", "fcf8b7": "TRONTEQ Electronic", + "fcfa21": "zte corporation", "fcfaf7": "Shanghai Baud Data Communication Co.,Ltd.", "fcfbfb": "Cisco Systems, Inc", "fcfc48": "Apple, Inc.", From ed4af96d7f3102624e3e2eb3e1b111e99aa79f76 Mon Sep 17 00:00:00 2001 From: Hugo Tinoco <43675476+h4ndzdatm0ld@users.noreply.github.com> Date: Thu, 11 May 2023 09:27:44 -0700 Subject: [PATCH 18/37] Mikrotik RouterOS Parser (#244) * Starting adding routeros * Basic RouterOS Parser capabilities * Mappers * feedback: Parsing tests for system note * if it looks like a duck, banners like a banner, then.. * banner_end satisfied, but rely on is_banner_end --- docs/dev/include_parser_list.md | 1 + docs/user/lib_mapper/napalm.md | 1 + docs/user/lib_mapper/napalm_reverse.md | 1 + netutils/config/compliance.py | 1 + netutils/config/parser.py | 44 +++++++ netutils/lib_mapper.py | 2 + .../mikrotik_routeros/routeros_backup.txt | 59 +++++++++ .../mikrotik_routeros/routeros_feature.py | 5 + .../mikrotik_routeros/routeros_intended.txt | 60 +++++++++ .../mikrotik_routeros/routeros_received.json | 32 +++++ .../mikrotik_routeros/routeros_feature.py | 6 + .../mikrotik_routeros/routeros_received.json | 5 + .../mikrotik_routeros/routeros_sent.txt | 10 ++ .../routeros_full_received.py | 123 ++++++++++++++++++ .../mikrotik_routeros/routeros_full_sent.txt | 71 ++++++++++ 15 files changed, 421 insertions(+) create mode 100644 tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_backup.txt create mode 100644 tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_feature.py create mode 100644 tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_intended.txt create mode 100644 tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_received.json create mode 100644 tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_feature.py create mode 100644 tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_received.json create mode 100644 tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_sent.txt create mode 100644 tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_received.py create mode 100644 tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_sent.txt diff --git a/docs/dev/include_parser_list.md b/docs/dev/include_parser_list.md index 65279f72..97d30c9b 100644 --- a/docs/dev/include_parser_list.md +++ b/docs/dev/include_parser_list.md @@ -13,5 +13,6 @@ | fortinet_fortios | netutils.config.parser.FortinetConfigParser | | juniper_junos | netutils.config.parser.JunosConfigParser | | linux | netutils.config.parser.LINUXConfigParser | +| mikrotik_routeros | netutils.config.parser.RouterOSConfigParser | | mrv_optiswitch | netutils.config.parser.OptiswitchConfigParser | | nokia_sros | netutils.config.parser.NokiaConfigParser | \ No newline at end of file diff --git a/docs/user/lib_mapper/napalm.md b/docs/user/lib_mapper/napalm.md index 2e2a792f..4216e4c0 100644 --- a/docs/user/lib_mapper/napalm.md +++ b/docs/user/lib_mapper/napalm.md @@ -12,5 +12,6 @@ | nxos | → | cisco_nxos | | nxos_ssh | → | cisco_nxos | | panos | → | paloalto_panos | +| ros | → | mikrotik_routeros | | sros | → | nokia_sros | | vyos | → | brocade_vyos | \ No newline at end of file diff --git a/docs/user/lib_mapper/napalm_reverse.md b/docs/user/lib_mapper/napalm_reverse.md index 0cb9f5af..a4b7b8b3 100644 --- a/docs/user/lib_mapper/napalm_reverse.md +++ b/docs/user/lib_mapper/napalm_reverse.md @@ -11,5 +11,6 @@ | fortinet | → | fortios | | huawei_vrp | → | huawei | | juniper_junos | → | junos | +| mikrotik_routeros | → | ros | | nokia_sros | → | sros | | paloalto_panos | → | panos | \ No newline at end of file diff --git a/netutils/config/compliance.py b/netutils/config/compliance.py index 59e176bd..af7a3a11 100644 --- a/netutils/config/compliance.py +++ b/netutils/config/compliance.py @@ -20,6 +20,7 @@ "aruba_aoscx": parser.ArubaConfigParser, "mrv_optiswitch": parser.OptiswitchConfigParser, "extreme_netiron": parser.NetironConfigParser, + "mikrotik_routeros": parser.RouterOSConfigParser, } # TODO: Once support for 3.7 is dropped, there should be a typing.TypedDict for this which should then also be used diff --git a/netutils/config/parser.py b/netutils/config/parser.py index a07d56fa..c28515a2 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -1375,3 +1375,47 @@ class NetironConfigParser(BaseSpaceConfigParser): def banner_end(self) -> str: """Demarcate End of Banner char(s).""" raise NotImplementedError("Extreme Netiron platform doesn't have a banner.") + + +class RouterOSConfigParser(BaseSpaceConfigParser): + """Mikrotik RouterOS config parser.""" + + comment_chars: t.List[str] = ["#"] + banner_start: t.List[str] = ["/system note set note=", "set note="] + + @property + def banner_end(self) -> str: + """Demarcate End of Banner char(s).""" + raise NotImplementedError("Mikrotik platform uses system note as a banner.") + + def is_banner_end(self, line: str) -> bool: + """Determine if end of banner.""" + if line.endswith('"') or line.startswith("/"): + return True + return False + + def _build_banner(self, config_line: str) -> t.Optional[str]: + """Handle banner config lines. + + Args: + config_line: The start of the banner (system note) config. + + Returns: + The next configuration line in the configuration text or None when banner end is the end of the config text. + + Raises: + ValueError: When the parser is unable to identify the End of the Banner. + """ + banner_config = [config_line] + for line in self.generator_config: + if not self.is_banner_end(line): + banner_config.append(line) + else: + banner_config.append(line) + line = "\n".join(banner_config) + self._update_config_lines(line) + try: + return next(self.generator_config) + except StopIteration: + return None + raise ValueError("Unable to parse banner (system note) end.") diff --git a/netutils/lib_mapper.py b/netutils/lib_mapper.py index e2154296..0813eb5d 100644 --- a/netutils/lib_mapper.py +++ b/netutils/lib_mapper.py @@ -140,6 +140,7 @@ "sros": "nokia_sros", "vyos": "brocade_vyos", "aoscx": "aruba_aoscx", + "ros": "mikrotik_routeros", } PYNTC_LIB_MAPPER = { @@ -224,6 +225,7 @@ "paloalto_panos": "panos", "nokia_sros": "sros", "aruba_aoscx": "aoscx", + "mikrotik_routeros": "ros", } PYNTC_LIB_MAPPER_REVERSE = { diff --git a/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_backup.txt b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_backup.txt new file mode 100644 index 00000000..d32a05c7 --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_backup.txt @@ -0,0 +1,59 @@ +# by RouterOS 6.49.6 +# software id = WZ00-84LP +# +# model = CCR1036-8G-2S+ +# serial number = C6CD0BF7A020 +/interface bridge add name=google-vpc-peering-iface +/interface bridge add name=loopback +/interface bonding add mode=802.3ad name=Po1 slaves=sfp-sfpplus1,sfp-sfpplus2 +/interface vlan add interface=Po1 name=vlan11-mgmt vlan-id=11 +/interface vlan add interface=vlan2933-Transit-to-CC-NNI name=vlan3049-Transit-to-XXX vlan-id=3049 +/interface vlan add disabled=yes interface=Po1 name=vlan3051-Transit-to-CSW-through-QoE-Disabled vlan-id=3051 +/interface vlan add interface=Po1 mtu=1300 name=vlan3225-Transit-CORE-Agg1-to-COREXXX vlan-id=3225 +/interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik +/ip ipsec peer add address=50.157.100.38/32 exchange-mode=ike2 local-address=55.106.77.11 name=google-vpc-peer +/ip pool add name=BNEdgeLiteTest ranges=192.168.69.254 +/ip pool add name=BNEdgeLiteTest2 ranges=192.168.70.254 +/ip dhcp-server add address-pool=BNEdgeLiteTest disabled=no interface=ether1 name=dhcp1 +/ip dhcp-server add address-pool=BNEdgeLiteTest2 disabled=no interface=ether2 name=dhcp2 +/routing bgp instance set default as=1234 router-id=10.127.1.3 +/routing ospf instance set [ find default=yes ] router-id=10.127.1.3 +/snmp community add addresses=::/0 name=somestringa +/system logging action set 3 bsd-syslog=yes remote=172.16.11.1 remote-port=5140 +/user group set full policy=local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,password,web,sniff,sensitive,api,romon,dude,tikapp +/user group add name=prom policy=ssh,read,winbox,api,!local,!telnet,!ftp,!reboot,!write,!policy,!test,!password,!web,!sniff,!sensitive,!romon,!dude,!tikapp +/ip neighbor discovery-settings set discover-interface-list=!dynamic +/ip address add address=10.0.11.13/24 interface=vlan11-mgmt network=10.0.11.0 +/ip address add address=192.168.69.1/24 interface=ether1 network=192.168.69.0 +/ip dhcp-server network add address=192.168.69.0/24 gateway=192.168.69.1 +/ip dhcp-server network add address=192.168.70.0/24 gateway=192.168.70.1 +/ip dns set servers=8.8.8.8 +/ip firewall address-list add address=34.157.17.38 list=whitelist +/ip firewall address-list add address=72.202.79.109 list=google-vpc-acl +/ip firewall address-list add address=34.157.17.38 list=google-vpc-acl +/ip firewall filter add action=drop chain=input dst-address=50.106.77.11 src-address-list=!google-vpc-acl +/ip firewall nat add action=dst-nat chain=dstnat dst-address=50.106.77.11 dst-port=443 protocol=tcp to-addresses=10.1.15.10 +/ip firewall nat add action=masquerade chain=srcnat out-interface=vlan12-Servers +/ip firewall nat add action=src-nat chain=srcnat src-address=50.64.0.75 to-addresses=55.106.77.11 +/ip ipsec identity add peer=google-vpc-peer secret=***** +/ip ipsec policy set 0 disabled=yes +/ip ipsec policy add disabled=yes dst-address=169.254.1.1/32 peer=google-vpc-peer src-address=169.254.1.2/32 tunnel=yes +/ip ipsec policy add disabled=yes dst-address=10.150.0.0/20 peer=google-vpc-peer src-address=0.0.0.0/0 tunnel=yes +/ip service set telnet disabled=yes +/ip service set ftp disabled=yes +/ip service set www disabled=yes +/ip service set api address=10.1.15.5/32,10.120.16.0/20,172.16.11.0/24 +/ip service set api-ssl disabled=yes +/routing bgp network add network=55.106.77.11/32 synchronize=no +/routing bgp network add network=55.106.77.12/32 synchronize=no +/routing bgp peer add in-filter=ibgp-allow-default-in name=CSW out-filter=ibgp-no-default-out remote-address=10.127.1.10 remote-as=12345 update-source=loopback +/routing filter add action=discard chain=ibgp-no-default-out prefix=10.127.1.0/24 +/routing filter add action=accept chain=ibgp-no-default-out prefix=10.64.0.0/10 prefix-length=22-32 +/routing ospf interface add dead-interval=8s hello-interval=2s interface=vlan3049-Transit-to-85Presidential network-type=point-to-point +/routing ospf interface add cost=11 dead-interval=8s hello-interval=2s interface=vlan3166-Transit-HalseyCore-Agg1-to-Indigo-5 network-type=point-to-point +/routing ospf network add area=backbone network=10.126.0.16/29 +/snmp set enabled=yes trap-community=somestring +/system clock set time-zone-name=America/New_York +/system identity set name=ag1.123site.nwk.nj +/system logging add action=remote topics=error +/system logging add action=remote topics=info diff --git a/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_feature.py b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_feature.py new file mode 100644 index 00000000..531f8a6e --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_feature.py @@ -0,0 +1,5 @@ +features = [ + {"name": "bgp", "ordered": True, "section": ["/routing bgp instance"]}, + {"name": "snmp", "ordered": True, "section": ["/snmp"]}, + {"name": "ospf-networks", "ordered": True, "section": ["/routing ospf network"]}, +] diff --git a/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_intended.txt b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_intended.txt new file mode 100644 index 00000000..c296173b --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_intended.txt @@ -0,0 +1,60 @@ +# by RouterOS 6.49.6 +# software id = WZ00-84LP +# +# model = CCR1036-8G-2S+ +# serial number = C6CD0BF7A020 +/interface bridge add name=google-vpc-peering-iface +/interface bridge add name=loopback +/interface bonding add mode=802.3ad name=Po1 slaves=sfp-sfpplus1,sfp-sfpplus2 +/interface vlan add interface=Po1 name=vlan11-mgmt vlan-id=11 +/interface vlan add interface=vlan2933-Transit-to-CC-NNI name=vlan3049-Transit-to-XXX vlan-id=3049 +/interface vlan add disabled=yes interface=Po1 name=vlan3051-Transit-to-CSW-through-QoE-Disabled vlan-id=3051 +/interface vlan add interface=Po1 mtu=1300 name=vlan3225-Transit-CORE-Agg1-to-COREXXX vlan-id=3225 +/interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik +/ip ipsec peer add address=50.157.100.38/32 exchange-mode=ike2 local-address=55.106.77.11 name=google-vpc-peer +/ip pool add name=BNEdgeLiteTest ranges=192.168.69.254 +/ip pool add name=BNEdgeLiteTest2 ranges=192.168.70.254 +/ip dhcp-server add address-pool=BNEdgeLiteTest disabled=no interface=ether1 name=dhcp1 +/ip dhcp-server add address-pool=BNEdgeLiteTest2 disabled=no interface=ether2 name=dhcp2 +/routing bgp instance set default as=1234 router-id=10.127.1.3 +/routing ospf instance set [ find default=yes ] router-id=10.127.1.3 +/snmp community add addresses=::/0 name=somestringa +/system logging action set 3 bsd-syslog=yes remote=172.16.11.1 remote-port=5140 +/user group set full policy=local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,password,web,sniff,sensitive,api,romon,dude,tikapp +/user group add name=prom policy=ssh,read,winbox,api,!local,!telnet,!ftp,!reboot,!write,!policy,!test,!password,!web,!sniff,!sensitive,!romon,!dude,!tikapp +/ip neighbor discovery-settings set discover-interface-list=!dynamic +/ip address add address=10.0.11.13/24 interface=vlan11-mgmt network=10.0.11.0 +/ip address add address=192.168.69.1/24 interface=ether1 network=192.168.69.0 +/ip dhcp-server network add address=192.168.69.0/24 gateway=192.168.69.1 +/ip dhcp-server network add address=192.168.70.0/24 gateway=192.168.70.1 +/ip dns set servers=8.8.8.8 +/ip firewall address-list add address=34.157.17.38 list=whitelist +/ip firewall address-list add address=72.202.79.109 list=google-vpc-acl +/ip firewall address-list add address=34.157.17.38 list=google-vpc-acl +/ip firewall filter add action=drop chain=input dst-address=50.106.77.11 src-address-list=!google-vpc-acl +/ip firewall nat add action=dst-nat chain=dstnat dst-address=50.106.77.11 dst-port=443 protocol=tcp to-addresses=10.1.15.10 +/ip firewall nat add action=masquerade chain=srcnat out-interface=vlan12-Servers +/ip firewall nat add action=src-nat chain=srcnat src-address=50.64.0.75 to-addresses=55.106.77.11 +/ip ipsec identity add peer=google-vpc-peer secret=***** +/ip ipsec policy set 0 disabled=yes +/ip ipsec policy add disabled=yes dst-address=169.254.1.1/32 peer=google-vpc-peer src-address=169.254.1.2/32 tunnel=yes +/ip ipsec policy add disabled=yes dst-address=10.150.0.0/20 peer=google-vpc-peer src-address=0.0.0.0/0 tunnel=yes +/ip service set telnet disabled=yes +/ip service set ftp disabled=yes +/ip service set www disabled=yes +/ip service set api address=10.1.15.5/32,10.120.16.0/20,172.16.11.0/24 +/ip service set api-ssl disabled=yes +/routing bgp network add network=55.106.77.11/32 synchronize=no +/routing bgp network add network=55.106.77.12/32 synchronize=no +/routing bgp peer add in-filter=ibgp-allow-default-in name=CSW out-filter=ibgp-no-default-out remote-address=10.127.1.10 remote-as=12345 update-source=loopback +/routing filter add action=discard chain=ibgp-no-default-out prefix=10.127.1.0/24 +/routing filter add action=accept chain=ibgp-no-default-out prefix=10.64.0.0/10 prefix-length=22-32 +/routing ospf interface add dead-interval=8s hello-interval=2s interface=vlan3049-Transit-to-85Presidential network-type=point-to-point +/routing ospf interface add cost=11 dead-interval=8s hello-interval=2s interface=vlan3166-Transit-Core-Agg1-to-SiteXYZ network-type=point-to-point +/routing ospf network add area=backbone network=10.126.0.16/29 +/routing ospf network add area=backbone network=10.127.1.3/32 +/snmp set enabled=yes trap-community=somestring +/system clock set time-zone-name=America/New_York +/system identity set name=ag1.123site.nwk.nj +/system logging add action=remote topics=error +/system logging add action=remote topics=info diff --git a/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_received.json b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_received.json new file mode 100644 index 00000000..2d974195 --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/mikrotik_routeros/routeros_received.json @@ -0,0 +1,32 @@ +{ + "bgp": { + "actual": "/routing bgp instance set default as=1234 router-id=10.127.1.3", + "cannot_parse": true, + "compliant": true, + "extra": "", + "intended": "/routing bgp instance set default as=1234 router-id=10.127.1.3", + "missing": "", + "ordered_compliant": true, + "unordered_compliant": true + }, + "snmp": { + "actual": "/snmp community add addresses=::/0 name=somestringa\n/snmp set enabled=yes trap-community=somestring", + "cannot_parse": true, + "compliant": true, + "extra": "", + "intended": "/snmp community add addresses=::/0 name=somestringa\n/snmp set enabled=yes trap-community=somestring", + "missing": "", + "ordered_compliant": true, + "unordered_compliant": true + }, + "ospf-networks": { + "actual": "/routing ospf network add area=backbone network=10.126.0.16/29", + "cannot_parse": true, + "compliant": false, + "extra": "", + "intended": "/routing ospf network add area=backbone network=10.126.0.16/29\n/routing ospf network add area=backbone network=10.127.1.3/32", + "missing": "/routing ospf network add area=backbone network=10.127.1.3/32", + "ordered_compliant": false, + "unordered_compliant": false + } +} diff --git a/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_feature.py b/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_feature.py new file mode 100644 index 00000000..df05b7a3 --- /dev/null +++ b/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_feature.py @@ -0,0 +1,6 @@ +features = [ + {"name": "routing-filter", "ordered": True, "section": ["/routing filter"]}, + {"name": "ospf", "ordered": True, "section": ["/routing ospf"]}, + {"name": "snmp", "ordered": True, "section": ["/snmp"]}, + {"name": "ip-firewall", "ordered": True, "section": ["/ip firewall"]}, +] diff --git a/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_received.json b/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_received.json new file mode 100644 index 00000000..1f56386b --- /dev/null +++ b/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_received.json @@ -0,0 +1,5 @@ +{ + "remaining_cfg": "/system clock set time-zone-name=America/New_York\n/system identity set name=ag1.123site.nwk.nj\n/system logging add action=remote topics=error\n/system logging add action=remote topics=info", + + "section_not_found": ["ip-firewall"] +} diff --git a/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_sent.txt b/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_sent.txt new file mode 100644 index 00000000..47f233fc --- /dev/null +++ b/tests/unit/mock/config/compliance/config_section_not_parsed/mikrotik_routeros/routeros_sent.txt @@ -0,0 +1,10 @@ +/routing filter add action=discard chain=ibgp-no-default-out prefix=10.127.1.0/24 +/routing filter add action=accept chain=ibgp-no-default-out prefix=10.64.0.0/10 prefix-length=22-32 +/routing ospf interface add dead-interval=8s hello-interval=2s interface=vlan3049-Transit-to-85Presidential network-type=point-to-point +/routing ospf interface add cost=11 dead-interval=8s hello-interval=2s interface=vlan3166-Transit-HalseyCore-Agg1-to-Indigo-5 network-type=point-to-point +/routing ospf network add area=backbone network=10.126.0.16/29 +/snmp set enabled=yes trap-community=somestring +/system clock set time-zone-name=America/New_York +/system identity set name=ag1.123site.nwk.nj +/system logging add action=remote topics=error +/system logging add action=remote topics=info \ No newline at end of file diff --git a/tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_received.py b/tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_received.py new file mode 100644 index 00000000..fd06c50f --- /dev/null +++ b/tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_received.py @@ -0,0 +1,123 @@ +from netutils.config.parser import ConfigLine + +data = [ + ConfigLine(config_line="/interface bridge add name=google-vpc-peering-iface", parents=()), + ConfigLine(config_line="/interface bridge add name=loopback", parents=()), + ConfigLine(config_line="/interface bonding add mode=802.3ad name=Po1 slaves=sfp-sfpplus1,sfp-sfpplus2", parents=()), + ConfigLine(config_line="/interface vlan add interface=Po1 name=vlan11-mgmt vlan-id=11", parents=()), + ConfigLine( + config_line="/interface vlan add interface=vlan2933-Transit-to-CC-NNI name=vlan3049-Transit-to-XXX vlan-id=3049", + parents=(), + ), + ConfigLine( + config_line="/interface vlan add disabled=yes interface=Po1 name=vlan3051-Transit-to-CSW-through-QoE-Disabled vlan-id=3051", + parents=(), + ), + ConfigLine( + config_line="/interface vlan add interface=Po1 mtu=1300 name=vlan3225-Transit-CORE-Agg1-to-COREXXX vlan-id=3225", + parents=(), + ), + ConfigLine( + config_line="/interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik", + parents=(), + ), + ConfigLine( + config_line="/ip ipsec peer add address=50.157.100.38/32 exchange-mode=ike2 local-address=55.106.77.11 name=google-vpc-peer", + parents=(), + ), + ConfigLine(config_line="/ip pool add name=BNEdgeLiteTest ranges=192.168.69.254", parents=()), + ConfigLine(config_line="/ip pool add name=BNEdgeLiteTest2 ranges=192.168.70.254", parents=()), + ConfigLine( + config_line="/ip dhcp-server add address-pool=BNEdgeLiteTest disabled=no interface=ether1 name=dhcp1", + parents=(), + ), + ConfigLine( + config_line="/ip dhcp-server add address-pool=BNEdgeLiteTest2 disabled=no interface=ether2 name=dhcp2", + parents=(), + ), + ConfigLine(config_line="/routing bgp instance set default as=1234 router-id=10.127.1.3", parents=()), + ConfigLine(config_line="/routing ospf instance set [ find default=yes ] router-id=10.127.1.3", parents=()), + ConfigLine(config_line="/snmp community add addresses=::/0 name=somestringa", parents=()), + ConfigLine( + config_line="/system logging action set 3 bsd-syslog=yes remote=172.16.11.1 remote-port=5140", parents=() + ), + ConfigLine( + config_line="/user group set full policy=local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,password,web,sniff,sensitive,api,romon,dude,tikapp", + parents=(), + ), + ConfigLine( + config_line="/user group add name=prom policy=ssh,read,winbox,api,!local,!telnet,!ftp,!reboot,!write,!policy,!test,!password,!web,!sniff,!sensitive,!romon,!dude,!tikapp", + parents=(), + ), + ConfigLine(config_line="/ip neighbor discovery-settings set discover-interface-list=!dynamic", parents=()), + ConfigLine(config_line="/ip address add address=10.0.11.13/24 interface=vlan11-mgmt network=10.0.11.0", parents=()), + ConfigLine(config_line="/ip address add address=192.168.69.1/24 interface=ether1 network=192.168.69.0", parents=()), + ConfigLine(config_line="/ip dhcp-server network add address=192.168.69.0/24 gateway=192.168.69.1", parents=()), + ConfigLine(config_line="/ip dhcp-server network add address=192.168.70.0/24 gateway=192.168.70.1", parents=()), + ConfigLine(config_line="/ip dns set servers=8.8.8.8", parents=()), + ConfigLine(config_line="/ip firewall address-list add address=34.157.17.38 list=whitelist", parents=()), + ConfigLine(config_line="/ip firewall address-list add address=72.202.79.109 list=google-vpc-acl", parents=()), + ConfigLine(config_line="/ip firewall address-list add address=34.157.17.38 list=google-vpc-acl", parents=()), + ConfigLine( + config_line="/ip firewall filter add action=drop chain=input dst-address=50.106.77.11 src-address-list=!google-vpc-acl", + parents=(), + ), + ConfigLine( + config_line="/ip firewall nat add action=dst-nat chain=dstnat dst-address=50.106.77.11 dst-port=443 protocol=tcp to-addresses=10.1.15.10", + parents=(), + ), + ConfigLine( + config_line="/ip firewall nat add action=masquerade chain=srcnat out-interface=vlan12-Servers", parents=() + ), + ConfigLine( + config_line="/ip firewall nat add action=src-nat chain=srcnat src-address=50.64.0.75 to-addresses=55.106.77.11", + parents=(), + ), + ConfigLine(config_line="/ip ipsec identity add peer=google-vpc-peer secret=*****", parents=()), + ConfigLine(config_line="/ip ipsec policy set 0 disabled=yes", parents=()), + ConfigLine( + config_line="/ip ipsec policy add disabled=yes dst-address=169.254.1.1/32 peer=google-vpc-peer src-address=169.254.1.2/32 tunnel=yes", + parents=(), + ), + ConfigLine( + config_line="/ip ipsec policy add disabled=yes dst-address=10.150.0.0/20 peer=google-vpc-peer src-address=0.0.0.0/0 tunnel=yes", + parents=(), + ), + ConfigLine(config_line="/ip service set telnet disabled=yes", parents=()), + ConfigLine(config_line="/ip service set ftp disabled=yes", parents=()), + ConfigLine(config_line="/ip service set www disabled=yes", parents=()), + ConfigLine(config_line="/ip service set api address=10.1.15.5/32,10.120.16.0/20,172.16.11.0/24", parents=()), + ConfigLine(config_line="/ip service set api-ssl disabled=yes", parents=()), + ConfigLine(config_line="/routing bgp network add network=55.106.77.11/32 synchronize=no", parents=()), + ConfigLine(config_line="/routing bgp network add network=55.106.77.12/32 synchronize=no", parents=()), + ConfigLine( + config_line="/routing bgp peer add in-filter=ibgp-allow-default-in name=CSW out-filter=ibgp-no-default-out remote-address=10.127.1.10 remote-as=12345 update-source=loopback", + parents=(), + ), + ConfigLine( + config_line="/routing filter add action=discard chain=ibgp-no-default-out prefix=10.127.1.0/24", parents=() + ), + ConfigLine( + config_line="/routing filter add action=accept chain=ibgp-no-default-out prefix=10.64.0.0/10 prefix-length=22-32", + parents=(), + ), + ConfigLine( + config_line="/routing ospf interface add dead-interval=8s hello-interval=2s interface=vlan3049-Transit-to-85Presidential network-type=point-to-point", + parents=(), + ), + ConfigLine( + config_line="/routing ospf interface add cost=11 dead-interval=8s hello-interval=2s interface=vlan3166-Transit-HalseyCore-Agg1-to-Indigo-5 network-type=point-to-point", + parents=(), + ), + ConfigLine(config_line="/routing ospf network add area=backbone network=10.126.0.16/29", parents=()), + ConfigLine(config_line="/routing ospf network add area=backbone network=10.127.1.3/32", parents=()), + ConfigLine(config_line="/snmp set enabled=yes trap-community=somestring", parents=()), + ConfigLine(config_line="/system clock set time-zone-name=America/New_York", parents=()), + ConfigLine(config_line="/system identity set name=ag1.123site.nwk.nj", parents=()), + ConfigLine(config_line="/system logging add action=remote topics=error", parents=()), + ConfigLine(config_line="/system logging add action=remote topics=info", parents=()), + ConfigLine( + config_line='/system note set note="This is a \\\\\\"System Note\\\\\\" for a Mikrotik router.\\\\n\\\\\\\n \\nIt includes double quotes (\\\\\\") and special characters such as:\\\\n\\\\\\\n \\n@, #, \\$, %, ^, &, *, (, ), _, +, [, ], {, }, |, ;, \',\', ., /, <, >, and \\?.\\\\n\\\\\\\n \\n\\\\n\\\\\\\n \\nRemember to escape any special characters with a backslash (\\\\\\\\) when necessary.\\\\n\\\\\\\n \\n\\\\n\\\\\\\n \\nThis is a multiline note with several lines of text.\\\\n\\\\\\\n \\nWow, what a great example of a note to ensure proper parsing by NetUtils!\n \\nWe are treating this as a banner."', + parents=(), + ), +] diff --git a/tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_sent.txt b/tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_sent.txt new file mode 100644 index 00000000..89f8d6fa --- /dev/null +++ b/tests/unit/mock/config/parser/base/mikrotik_routeros/routeros_full_sent.txt @@ -0,0 +1,71 @@ +# by RouterOS 6.49.6 +# software id = WZ00-84LP +# +# model = CCR1036-8G-2S+ +# serial number = C6CD0BF7A020 +/interface bridge add name=google-vpc-peering-iface +/interface bridge add name=loopback +/interface bonding add mode=802.3ad name=Po1 slaves=sfp-sfpplus1,sfp-sfpplus2 +/interface vlan add interface=Po1 name=vlan11-mgmt vlan-id=11 +/interface vlan add interface=vlan2933-Transit-to-CC-NNI name=vlan3049-Transit-to-XXX vlan-id=3049 +/interface vlan add disabled=yes interface=Po1 name=vlan3051-Transit-to-CSW-through-QoE-Disabled vlan-id=3051 +/interface vlan add interface=Po1 mtu=1300 name=vlan3225-Transit-CORE-Agg1-to-COREXXX vlan-id=3225 +/interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik +/ip ipsec peer add address=50.157.100.38/32 exchange-mode=ike2 local-address=55.106.77.11 name=google-vpc-peer +/ip pool add name=BNEdgeLiteTest ranges=192.168.69.254 +/ip pool add name=BNEdgeLiteTest2 ranges=192.168.70.254 +/ip dhcp-server add address-pool=BNEdgeLiteTest disabled=no interface=ether1 name=dhcp1 +/ip dhcp-server add address-pool=BNEdgeLiteTest2 disabled=no interface=ether2 name=dhcp2 +/routing bgp instance set default as=1234 router-id=10.127.1.3 +/routing ospf instance set [ find default=yes ] router-id=10.127.1.3 +/snmp community add addresses=::/0 name=somestringa +/system logging action set 3 bsd-syslog=yes remote=172.16.11.1 remote-port=5140 +/user group set full policy=local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,password,web,sniff,sensitive,api,romon,dude,tikapp +/user group add name=prom policy=ssh,read,winbox,api,!local,!telnet,!ftp,!reboot,!write,!policy,!test,!password,!web,!sniff,!sensitive,!romon,!dude,!tikapp +#error exporting /interface bridge calea +/ip neighbor discovery-settings set discover-interface-list=!dynamic +/ip address add address=10.0.11.13/24 interface=vlan11-mgmt network=10.0.11.0 +/ip address add address=192.168.69.1/24 interface=ether1 network=192.168.69.0 +/ip dhcp-server network add address=192.168.69.0/24 gateway=192.168.69.1 +/ip dhcp-server network add address=192.168.70.0/24 gateway=192.168.70.1 +/ip dns set servers=8.8.8.8 +/ip firewall address-list add address=34.157.17.38 list=whitelist +/ip firewall address-list add address=72.202.79.109 list=google-vpc-acl +/ip firewall address-list add address=34.157.17.38 list=google-vpc-acl +#error exporting /ip firewall calea +/ip firewall filter add action=drop chain=input dst-address=50.106.77.11 src-address-list=!google-vpc-acl +/ip firewall nat add action=dst-nat chain=dstnat dst-address=50.106.77.11 dst-port=443 protocol=tcp to-addresses=10.1.15.10 +/ip firewall nat add action=masquerade chain=srcnat out-interface=vlan12-Servers +/ip firewall nat add action=src-nat chain=srcnat src-address=50.64.0.75 to-addresses=55.106.77.11 +/ip ipsec identity add peer=google-vpc-peer secret=***** +/ip ipsec policy set 0 disabled=yes +/ip ipsec policy add disabled=yes dst-address=169.254.1.1/32 peer=google-vpc-peer src-address=169.254.1.2/32 tunnel=yes +/ip ipsec policy add disabled=yes dst-address=10.150.0.0/20 peer=google-vpc-peer src-address=0.0.0.0/0 tunnel=yes +/ip service set telnet disabled=yes +/ip service set ftp disabled=yes +/ip service set www disabled=yes +/ip service set api address=10.1.15.5/32,10.120.16.0/20,172.16.11.0/24 +/ip service set api-ssl disabled=yes +/routing bgp network add network=55.106.77.11/32 synchronize=no +/routing bgp network add network=55.106.77.12/32 synchronize=no +/routing bgp peer add in-filter=ibgp-allow-default-in name=CSW out-filter=ibgp-no-default-out remote-address=10.127.1.10 remote-as=12345 update-source=loopback +/routing filter add action=discard chain=ibgp-no-default-out prefix=10.127.1.0/24 +/routing filter add action=accept chain=ibgp-no-default-out prefix=10.64.0.0/10 prefix-length=22-32 +/routing ospf interface add dead-interval=8s hello-interval=2s interface=vlan3049-Transit-to-85Presidential network-type=point-to-point +/routing ospf interface add cost=11 dead-interval=8s hello-interval=2s interface=vlan3166-Transit-HalseyCore-Agg1-to-Indigo-5 network-type=point-to-point +/routing ospf network add area=backbone network=10.126.0.16/29 +/routing ospf network add area=backbone network=10.127.1.3/32 +/snmp set enabled=yes trap-community=somestring +/system clock set time-zone-name=America/New_York +/system identity set name=ag1.123site.nwk.nj +/system logging add action=remote topics=error +/system logging add action=remote topics=info +/system note set note="This is a \\\"System Note\\\" for a Mikrotik router.\\n\\\ + \nIt includes double quotes (\\\") and special characters such as:\\n\\\ + \n@, #, \$, %, ^, &, *, (, ), _, +, [, ], {, }, |, ;, ',', ., /, <, >, and \?.\\n\\\ + \n\\n\\\ + \nRemember to escape any special characters with a backslash (\\\\) when necessary.\\n\\\ + \n\\n\\\ + \nThis is a multiline note with several lines of text.\\n\\\ + \nWow, what a great example of a note to ensure proper parsing by NetUtils! + \nWe are treating this as a banner." \ No newline at end of file From fa8b8e0691ab40b48dc2fba6df672e1229ec0039 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 16:10:32 -0500 Subject: [PATCH 19/37] Flat: latest data (2023-05-04T08:03:05.309Z) (#271) { "date": "2023-05-04T08:03:05.309Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 1530, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 45 +++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 92fa338b..35816a73 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -8382,7 +8382,7 @@ "0020f9": "PARALINK NETWORKS, INC.", "0020fa": "GDE SYSTEMS, INC.", "0020fb": "OCTEL COMMUNICATIONS CORP.", - "0020fc": "MATROX", + "0020fc": "Matrox Central Services Inc", "0020fd": "ITV TECHNOLOGIES, INC.", "0020fe": "TOPWARE INC. / GRAND COMPUTER", "0020ff": "SYMMETRICAL TECHNOLOGIES", @@ -13088,6 +13088,7 @@ "047e23": "China Mobile IOT Company Limited", "047e4a": "moobox CO., Ltd.", "047f0e": "Barrot Technology Co.,LTD", + "0480a7": "ShenZhen TianGang Micro Technology CO.LTD", "04819b": "SKY UK LIMITED", "0481ae": "Clack Corporation", "04848a": "7INOVA TECHNOLOGY LIMITED", @@ -14196,6 +14197,7 @@ "107100": "Huawei Device Co., Ltd.", "1071b3": "Zyxel Communications Corporation", "1071f9": "Cloud Telecomputers, LLC", + "1071fa": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "107223": "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO ", "1073eb": "Infiniti Electro-Optics", "10746f": "MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.", @@ -15439,6 +15441,7 @@ "203956": "HMD Global Oy", "203a07": "Cisco Systems, Inc", "203a43": "Intel Corporate", + "203aeb": "zte corporation", "203aef": "Sivantos GmbH", "203b69": "vivo Mobile Communication Co., Ltd.", "203cae": "Apple, Inc.", @@ -15551,6 +15554,7 @@ "209148": "Texas Instruments", "20918a": "PROFALUX", "2091d9": "I'M SPA", + "2091df": "Apple, Inc.", "20934d": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", "20968a": "Information Technology Co., Ltd.", "209727": "TELTONIKA NETWORKS UAB", @@ -16778,6 +16782,7 @@ "30786b": "TIANJIN Golden Pentagon Electronics Co., Ltd.", "3078c2": "Innowireless / QUCELL Networks", "3078d3": "Virgilant Technologies Ltd.", + "307a57": "Inc", "307bac": "New H3C Technologies Co., Ltd", "307bc9": "SHENZHEN BILIAN ELECTRONIC CO.,LTD", "307c30": "RIM", @@ -16897,6 +16902,7 @@ "30de86": "Cedac Software S.r.l.", "30df17": "ALPSALPINE CO,.LTD", "30df8d": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", + "30e04f": "Apple, Inc.", "30e090": "Genevisio Ltd.", "30e171": "Hewlett Packard", "30e1f1": "Intelbras", @@ -17120,6 +17126,7 @@ "348a7b": "Samsung Electronics Co.,Ltd", "348aae": "Sagemcom Broadband SAS", "348b75": "LIMITED", + "348c5e": "Apple, Inc.", "348d52": "Sichuan Tianyi Comheart Telecom Co.,LTD", "348f27": "Ruckus Wireless", "34916f": "UserGate Ltd.", @@ -17474,6 +17481,7 @@ "3898d8": "MERITECH CO.,LTD", "3898e9": "Huawei Device Co., Ltd.", "389af6": "Samsung Electronics Co.,Ltd", + "389cb2": "Apple, Inc.", "389d92": "Seiko Epson Corporation", "389e80": "zte corporation", "389f5a": "C-Kur TV Inc.", @@ -18609,6 +18617,7 @@ "4818fa": "Nocsys", "481a84": "Pointer Telocation Ltd", "481b40": "Vantiva USA LLC", + "481ba4": "Cisco Systems, Inc", "481bd2": "Intron Scientific co., ltd.", "481cb9": "SZ DJI TECHNOLOGY CO.,LTD", "481d70": "Cisco SPVTG", @@ -18834,6 +18843,7 @@ "48c1ee": "Honor Device Co., Ltd.", "48c35a": "LENOVO(BEIJING)CO., LTD.", "48c3b0": "Pharos Co.Ltd", + "48c461": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "48c58d": "Lear Corporation GmbH", "48c663": "GTO Access Systems LLC", "48c796": "Samsung Electronics Co.,Ltd", @@ -19937,6 +19947,7 @@ "58355d": "Huawei Device Co., Ltd.", "58356b": "TECNO MOBILE LIMITED", "5835d9": "Cisco Systems, Inc", + "583653": "Apple, Inc.", "583879": "RICOH COMPANY, LTD.", "583bd9": "Fiberhome Telecommunication Technologies Co.,LTD", "583cc6": "Omneality Ltd.", @@ -20002,6 +20013,7 @@ "587521": "CJSC RTSoft", "587675": "Beijing ECHO Technologies Co.,Ltd", "5876ac": "TECHNOLOGIES CORPORATION", + "5876b3": "Ubee Interactive Co., Limited", "5876c5": "DIGI I'S LTD", "587a4d": "Stonesoft Corporation", "587a62": "Texas Instruments", @@ -20065,6 +20077,7 @@ "58a839": "Intel Corporate", "58a87b": "Fitbit, Inc.", "58ac78": "Cisco Systems, Inc", + "58ad12": "Apple, Inc.", "58ae2b": "Huawei Device Co., Ltd.", "58aea8": "HUAWEI TECHNOLOGIES CO.,LTD", "58aef1": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -20568,6 +20581,7 @@ "603aaf": "Samsung Electronics Co.,Ltd", "603d26": "Vantiva USA LLC", "603d29": "HUAWEI TECHNOLOGIES CO.,LTD", + "603e5f": "Apple, Inc.", "603e7b": "Gafachi, Inc.", "603eca": "Cambridge Medical Robotics Ltd", "603fc5": "COX CO., LTD", @@ -20817,6 +20831,7 @@ "60fb42": "Apple, Inc.", "60fcf1": "Private", "60fd56": "WOORISYSTEMS CO., Ltd", + "60fda6": "Apple, Inc.", "60fe1e": "China Palms Telecom.Ltd", "60fe20": "2Wire Inc", "60fec5": "Apple, Inc.", @@ -21117,6 +21132,7 @@ "64e172": "Shenzhen Qihoo Intelligent Technology Co.,Ltd", "64e204": "NTN Technical Service Corporation", "64e220": "Qisda Corporation", + "64e4a5": "LG Electronics", "64e599": "EFM Networks", "64e625": "Woxu Wireless Co., Ltd", "64e682": "Apple, Inc.", @@ -21286,6 +21302,7 @@ "6877da": "zte corporation", "687848": "WESTUNITIS CO., LTD.", "68784c": "Nortel Networks", + "687909": "Cisco Systems, Inc", "687912": "IEEE Registration Authority", "687924": "ELS-GmbH & Co. KG", "6879dd": "Ltd", @@ -21422,6 +21439,7 @@ "68e209": "HUAWEI TECHNOLOGIES CO.,LTD", "68e41f": "Unglaube Identech GmbH", "68e478": "Qingdao Haier Technology Co.,Ltd", + "68e59e": "Cisco Systems, Inc", "68e74a": "Texas Instruments", "68e7c2": "Samsung Electronics Co.,Ltd", "68e8eb": "Linktel Technologies Co.,Ltd", @@ -21659,6 +21677,7 @@ "6c9e7c": "Fiberhome Telecommunication Technologies Co.,LTD", "6ca0b4": "SKY UK LIMITED", "6ca100": "Intel Corporate", + "6ca367": "Avlinkpro", "6ca401": "essensys plc", "6ca4d1": "Fiberhome Telecommunication Technologies Co.,LTD", "6ca604": "ARRIS Group, Inc.", @@ -22581,6 +22600,7 @@ "784561": "CyberTAN Technology Inc.", "7845b3": "Huawei Device Co., Ltd.", "7845c4": "Dell Inc.", + "78465c": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "7846c4": "DAEHAP HYPER-TECH", "7846d4": "Samsung Electronics Co.,Ltd", "78471d": "Samsung Electronics Co.,Ltd", @@ -22968,6 +22988,7 @@ "7c5cf8": "Intel Corporate", "7c604a": "Avelon", "7c6097": "HUAWEI TECHNOLOGIES CO.,LTD", + "7c6130": "Apple, Inc.", "7c6166": "Amazon Technologies Inc.", "7c6193": "HTC Corporation", "7c6305": "Amazon Technologies Inc.", @@ -23405,6 +23426,7 @@ "80a589": "AzureWave Technology Inc.", "80a796": "Neuralink Corp.", "80a85d": "Osterhout Design Group", + "80a997": "Apple, Inc.", "80aaa4": "USAG", "80ab4d": "Nokia Solutions and Networks GmbH & Co. KG", "80ac7c": "Sichuan AI-Link Technology Co., Ltd.", @@ -23429,6 +23451,7 @@ "80b946": "Nokia", "80b95c": "ELFTECH Co., Ltd.", "80b97a": "eero inc.", + "80b989": "Apple, Inc.", "80baac": "TeleAdapt Ltd", "80bae6": "Neets", "80bbeb": "Satmap Systems Ltd", @@ -23591,6 +23614,7 @@ "843a5b": "Corporation", "843b10": "LVSWITCHES INC.", "843c4c": "Robert Bosch SRL", + "843c99": "zte corporation", "843dc6": "Cisco Systems, Inc", "843e1d": "Hui Zhou Gaoshengda Technology Co.,LTD", "843e79": "Shenzhen Belon Technology CO.,LTD", @@ -23773,6 +23797,7 @@ "84cd62": "ShenZhen IDWELL Technology CO.,Ltd", "84cfbf": "Fairphone", "84d15a": "TCT mobile ltd", + "84d328": "Apple, Inc.", "84d32a": "IEEE 1905.1", "84d343": "Calix Inc.", "84d352": "Tonly Technology Co. Ltd ", @@ -23994,6 +24019,7 @@ "887b2c": "zte corporation", "887e25": "Extreme Networks, Inc.", "887f03": "Comper Technology Investment Limited", + "888187": "Umeox Innovations Co.,Ltd", "8881b9": "Huawei Device Co., Ltd.", "888279": "Shenzhen RB-LINK Intelligent Technology Co.Ltd", "888322": "Samsung Electronics Co.,Ltd", @@ -25151,6 +25177,7 @@ "94f720": "Tianjin Deviser Electronics Instrument Co., Ltd", "94f7ad": "Juniper Networks", "94f827": "Shanghai Imilab Technology Co.Ltd", + "94f929": "Meta Platforms Technologies, LLC", "94fae8": "Shenzhen Eycom Technology Co., Ltd ", "94fb29": "Zebra Technologies Inc.", "94fba7": "IEEE Registration Authority", @@ -25184,6 +25211,7 @@ "980d51": "Huawei Device Co., Ltd.", "980d67": "Zyxel Communications Corporation", "980d6f": "Samsung Electronics Co.,Ltd", + "980daf": "Apple, Inc.", "980e24": "Phytium Technology Co.,Ltd.", "980ee4": "Private", "981082": "Nsolution Co., Ltd.", @@ -25777,7 +25805,7 @@ "9cf61a": "Carrier Fire & Security", "9cf67d": "Ricardo Prague, s.r.o.", "9cf6dd": "IEEE Registration Authority", - "9cf86b": "AgiTech Distribution Limited", + "9cf86b": "AgiTech Distribution Limited - Linki", "9cf8db": "shenzhen eyunmei technology co,.ltd", "9cf938": "AREVA NP GmbH", "9cfa3c": "Daeyoung Electronics", @@ -26399,6 +26427,7 @@ "a4d18f": "Shenzhen Skyee Optical Fiber Communication Technology Ltd. ", "a4d1d1": "ECOtality North America", "a4d1d2": "Apple, Inc.", + "a4d23e": "Apple, Inc.", "a4d3b5": "GLITEL Stropkov, s.r.o.", "a4d4b2": "Shenzhen MeiG Smart Technology Co.,Ltd", "a4d578": "Texas Instruments", @@ -26650,6 +26679,7 @@ "a89a93": "Sagemcom Broadband SAS", "a89ad7": "Nokia", "a89b10": "inMotion Ltd.", + "a89c78": "Apple, Inc.", "a89ca4": "Furrion Limited", "a89ced": "Xiaomi Communications Co Ltd", "a89d21": "Cisco Systems, Inc", @@ -27436,6 +27466,7 @@ "b40832": "TC Communications", "b40931": "HUAWEI TECHNOLOGIES CO.,LTD", "b40ac6": "DEXON Systems Ltd.", + "b40ad8": "Sony Interactive Entertainment Inc.", "b40b1d": "Samsung Electronics Co.,Ltd", "b40b44": "Smartisan Technology Co., Ltd.", "b40b78": "Brusa Elektronik AG", @@ -27963,6 +27994,7 @@ "b8b42e": "Gionee Communication Equipment Co,Ltd.ShenZhen", "b8b77d": "Guangdong Transtek Medical Electronics CO.,Ltd", "b8b7d7": "2GIG Technologies", + "b8b7db": "GOIP Global Services Pvt. Ltd.", "b8b7f1": "Wistron Neweb Corporation", "b8b81e": "Intel Corporate", "b8b94e": "Shenzhen iBaby Labs, Inc.", @@ -27977,6 +28009,7 @@ "b8bebf": "Cisco Systems, Inc", "b8bef4": "devolo AG", "b8bf83": "Intel Corporate", + "b8c065": "Universal Electronics, Inc.", "b8c111": "Apple, Inc.", "b8c1a2": "Dragon Path Technologies Co., Limited", "b8c227": "PSTec", @@ -28792,6 +28825,7 @@ "c44f96": "Alps Alpine", "c45006": "Samsung Electronics Co.,Ltd", "c4518d": "Shenzhen YOUHUA Technology Co., Ltd", + "c4524f": "Apple, Inc.", "c45379": "Micronview Limited Liability Company", "c45444": "Quanta Computer Inc.", "c455a6": "Cadac Holdings Ltd", @@ -29935,6 +29969,7 @@ "d0db32": "Nokia Corporation", "d0dbb7": "Casa Systems", "d0dd49": "Juniper Networks", + "d0dd7c": "zte corporation", "d0df9a": "Liteon Technology Corporation", "d0dfb2": "Genie Networks Limited", "d0dfc7": "Samsung Electronics Co.,Ltd", @@ -29982,6 +30017,7 @@ "d40aa9": "ARRIS Group, Inc.", "d40b1a": "HTC Corporation", "d40bb9": "Solid Semecs bv.", + "d40f9e": "Apple, Inc.", "d40fb2": "Applied Micro Electronics AME bv", "d41090": "iNFORM Systems AG", "d410cf": "Huanshun Network Science and Technology Co., Ltd.", @@ -30788,6 +30824,7 @@ "dc6aea": "Infinix mobility limited", "dc6b12": "worldcns inc.", "dc6b1b": "Huawei Device Co., Ltd.", + "dc6dbc": "Apple, Inc.", "dc6dcd": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "dc6f00": "Livescribe, Inc.", "dc6f08": "Bay Storage Technology", @@ -31499,6 +31536,7 @@ "e4a1e6": "Alcatel-Lucent Shanghai Bell Co., Ltd", "e4a32f": "Shanghai Artimen Technology Co., Ltd.", "e4a387": "Control Solutions LLC", + "e4a41c": "Cisco Systems, Inc", "e4a471": "Intel Corporate", "e4a5ef": "TRON LINK ELECTRONICS CO., LTD.", "e4a634": "Universal Electronics, Inc.", @@ -31740,6 +31778,7 @@ "e86e44": "zte corporation", "e86f38": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "e86ff2": "Actiontec Electronics, Inc", + "e87072": "Hangzhou BroadLink Technology Co.,Ltd", "e8718d": "Elsys Equipamentos Eletronicos Ltda", "e874c7": "Sentinhealth", "e874e6": "ADB Broadband Italia", @@ -32515,6 +32554,7 @@ "f0edb8": "PRIVATE LIMITED", "f0ee10": "Samsung Electronics Co.,Ltd", "f0ee58": "PACE Telematics GmbH", + "f0ee7a": "Apple, Inc.", "f0eebb": "VIPAR GmbH", "f0ef86": "Google, Inc.", "f0efd2": "TF PAYMENT SERVICE CO., LTD", @@ -33204,6 +33244,7 @@ "f8e4e3": "Intel Corporate", "f8e4fb": "Actiontec Electronics, Inc", "f8e57e": "Cisco Systems, Inc", + "f8e5ce": "Apple, Inc.", "f8e5cf": "CGI IT UK LIMITED", "f8e61a": "Samsung Electronics Co.,Ltd", "f8e71e": "Ruckus Wireless", From 3314e367c2763e9b5825c6074612f5637a1aa930 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Jun 2023 15:41:59 -0500 Subject: [PATCH 20/37] Flat: latest data (2023-05-25T08:03:20.565Z) (#278) { "date": "2023-05-25T08:03:20.565Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 2993, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 88 ++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 9 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 35816a73..6022adef 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -3271,7 +3271,7 @@ "000ce9": "BLOOMBERG L.P.", "000cea": "aphona Kommunikationssysteme", "000ceb": "CNMP Networks, Inc.", - "000cec": "Orolia USA", + "000cec": "Safran Trusted 4D Inc.", "000ced": "Real Digital Media", "000cee": "jp-embedded", "000cef": "Open Networks Engineering Ltd", @@ -6479,7 +6479,7 @@ "00197f": "PLANTRONICS, INC.", "001980": "Gridpoint Systems", "001981": "Vivox Inc", - "001982": "SmarDTV", + "001982": "SmarDTV Corporation", "001983": "CCT R&D Limited", "001984": "ESTIC Corporation", "001985": "IT Watchdogs, Inc", @@ -10235,6 +10235,7 @@ "00376d": "Murata Manufacturing Co., Ltd.", "0037b7": "Sagemcom Broadband SAS", "0038df": "Cisco Systems, Inc", + "003969": "Air-Weigh Incorporated", "003a7d": "Cisco Systems, Inc", "003a98": "Cisco Systems, Inc", "003a99": "Cisco Systems, Inc", @@ -11875,7 +11876,7 @@ "00a0d2": "ALLIED TELESIS INTERNATIONAL CORPORATION", "00a0d3": "INSTEM COMPUTER SYSTEMS, LTD.", "00a0d4": "RADIOLAN, INC.", - "00a0d5": "Sierra Wireless", + "00a0d5": "Sierra Wireless, ULC", "00a0d6": "SBE, Inc.", "00a0d7": "KASTEN CHASE APPLIED RESEARCH", "00a0d8": "SPECTRA - TEK", @@ -12434,7 +12435,7 @@ "00d079": "Cisco Systems, Inc", "00d07a": "AMAQUEST COMPUTER CORP.", "00d07b": "COMCAM INTERNATIONAL INC", - "00d07c": "KOYO ELECTRONICS INC. CO.,LTD.", + "00d07c": "JTEKT ELECTRONICS CORPORATION", "00d07d": "COSINE COMMUNICATIONS", "00d07e": "KEYCORP LTD.", "00d07f": "STRATEGY & TECHNOLOGY, LIMITED", @@ -12871,6 +12872,7 @@ "00e5e4": "Sichuan Tianyi Comheart Telecom Co.,LTD", "00e5f1": "BUFFALO.INC", "00e60e": "Extreme Networks, Inc.", + "00e63a": "Ruckus Wireless", "00e666": "ARIMA Communications Corp.", "00e6d3": "NIXDORF COMPUTER CORP.", "00e6e8": "Netzin Technology Corporation,.Ltd.", @@ -12938,6 +12940,7 @@ "0405dd": "Shenzhen Cultraview Digital Technology Co., Ltd", "04072e": "VTech Electronics Ltd.", "040973": "Hewlett Packard Enterprise", + "040986": "Arcadyan Corporation", "0409a5": "HFR, Inc.", "040a83": "Alcatel-Lucent", "040ae0": "XMIT AG COMPUTER NETWORKS", @@ -13736,6 +13739,7 @@ "08ff24": "Shenzhen Skyworth Digital Technology CO., Ltd", "08ff44": "Apple, Inc.", "0c014b": "zte corporation", + "0c01c8": "DENSO Co.,Ltd", "0c01db": "Infinix mobility limited", "0c0227": "Vantiva USA LLC", "0c02bd": "Samsung Electronics Co.,Ltd", @@ -13931,6 +13935,7 @@ "0caaee": "Ansjer Electronics Co., Ltd.", "0cac05": "Unitend Technologies Inc.", "0cac8a": "Sagemcom Broadband SAS", + "0cae5f": "Silicon Laboratories", "0cae7d": "Texas Instruments", "0caebd": "Edifier International", "0caf31": "Cisco Systems, Inc", @@ -14250,6 +14255,7 @@ "109add": "Apple, Inc.", "109c70": "Prusa Research s.r.o.", "109d7a": "Huawei Device Co., Ltd.", + "109d9c": "EM Microelectronic", "109e3a": "Zhejiang Tmall Technology Co., Ltd.", "109f41": "Apple, Inc.", "109f4f": "New H3C Intelligence Terminal Co., Ltd.", @@ -14575,6 +14581,7 @@ "1496e5": "Samsung Electronics Co.,Ltd", "149877": "Apple, Inc.", "14987d": "Vantiva USA LLC", + "14993e": "Xiaomi Communications Co Ltd", "1499e2": "Apple, Inc.", "149a10": "Microsoft Corporation", "149b2f": "JiangSu ZhongXie Intelligent Technology co., LTD", @@ -14627,6 +14634,7 @@ "14bb6e": "Samsung Electronics Co.,Ltd", "14bd61": "Apple, Inc.", "14c03e": "ARRIS Group, Inc.", + "14c050": "GUANGDONG GENIUS TECHNOLOGY CO., LTD.", "14c089": "DUNE HD LTD", "14c0a1": "UCloud Technology Co., Ltd.", "14c126": "Nokia Corporation", @@ -14640,6 +14648,7 @@ "14c88b": "Apple, Inc.", "14c913": "LG Electronics", "14c9cf": "Sigmastar Technology Ltd.", + "14ca56": "zte corporation", "14caa0": "Hu&Co", "14cb19": "HP Inc.", "14cb65": "Microsoft Corporation", @@ -14839,6 +14848,7 @@ "186472": "Aruba, a Hewlett Packard Enterprise Company", "186571": "Co., Ltd.", "186590": "Apple, Inc.", + "1865c7": "Dongguan YIMO Technology Co.LTD", "1866c7": "Shenzhen Libre Technology Co., Ltd", "1866da": "Dell Inc.", "1866e3": "Veros Systems, Inc.", @@ -14919,6 +14929,7 @@ "18a59c": "IEEE Registration Authority", "18a5ff": "Arcadyan Corporation", "18a6f7": "TP-LINK TECHNOLOGIES CO.,LTD.", + "18a788": "Shenzhen MEK Intellisys Pte Ltd", "18a7f1": "Qingdao Haier Technology Co.,Ltd", "18a905": "Hewlett Packard", "18a958": "PROVISION THAI CO., LTD.", @@ -16183,7 +16194,7 @@ "28a1eb": "CO.,LTD", "28a241": "exlar corp", "28a24b": "Juniper Networks", - "28a331": "Sierra Wireless", + "28a331": "Sierra Wireless, ULC", "28a53f": "vivo Mobile Communication Co., Ltd.", "28a574": "Miller Electric Mfg. Co.", "28a5ee": "Shenzhen SDGI CATV Co., Ltd", @@ -16321,6 +16332,7 @@ "28fede": "COMESTA, Inc.", "28ff3c": "Apple, Inc.", "28ff3e": "zte corporation", + "28ff5f": "Co.,Ltd.", "28ffb2": "Toshiba Corp.", "2c002a": "Shenzhen TINNO Mobile Technology Corp.", "2c002c": "UNOWHY", @@ -16421,10 +16433,12 @@ "2c4401": "Samsung Electronics Co.,Ltd", "2c441b": "Spectrum Medical Limited", "2c44fd": "Hewlett Packard", + "2c459a": "Limited", "2c4759": "Beijing MEGA preponderance Science & Technology Co. Ltd", "2c4835": "IEEE Registration Authority", "2c4881": "vivo Mobile Communication Co., Ltd.", "2c4a11": "Ciena Corporation", + "2c4c15": "Juniper Networks", "2c4cc6": "Murata Manufacturing Co., Ltd.", "2c4d54": "ASUSTek COMPUTER INC.", "2c4d79": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", @@ -17366,6 +17380,7 @@ "38384b": "vivo Mobile Communication Co., Ltd.", "3838a6": "Arista Networks", "38396c": "Huawei Device Co., Ltd.", + "38398f": "Silicon Laboratories", "383a21": "IEEE Registration Authority", "383b26": "Jiangsu Qinheng Co., Ltd.", "383bc8": "2Wire Inc", @@ -17595,6 +17610,7 @@ "38f597": "home2net GmbH", "38f601": "Solid State Storage Technology Corporation", "38f6cf": "zte corporation", + "38f6ed": "EVK DI Kerschhaggl GmbH", "38f708": "National Resource Management, Inc.", "38f73d": "Amazon Technologies Inc.", "38f7b2": "SEOJUN ELECTRIC", @@ -17606,6 +17622,7 @@ "38f8ca": "OWIN Inc.", "38f8f6": "Adtran Inc", "38f9d3": "Apple, Inc.", + "38f9f5": "Garmin International", "38faca": "Co.,Ltd", "38fb14": "HUAWEI TECHNOLOGIES CO.,LTD", "38fc34": "Huawei Device Co., Ltd.", @@ -17681,6 +17698,7 @@ "3c2c94": "HangZhou Delan Technology Co.,Ltd)", "3c2c99": "Edgecore Networks Corporation", "3c2ca6": "Beijing Xiaomi Electronics Co.,Ltd", + "3c2d9e": "Vantiva - Connected Home", "3c2db7": "Texas Instruments", "3c2ef5": "Silicon Laboratories", "3c2ef9": "Apple, Inc.", @@ -17725,6 +17743,7 @@ "3c4e56": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "3c510e": "Cisco Systems, Inc", "3c5282": "Hewlett Packard", + "3c52a1": "TP-Link Corporation Limited", "3c53d7": "CEDES AG", "3c5447": "HUAWEI TECHNOLOGIES CO.,LTD", "3c5576": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", @@ -18298,6 +18317,7 @@ "44184f": "Fitview", "4418fd": "Apple, Inc.", "4419b6": "Hangzhou Hikvision Digital Technology Co.,Ltd.", + "441a4c": "xFusion Digital Technologies Co.,Ltd.", "441aac": "Elektrik Uretim AS EOS", "441afa": "New H3C Technologies Co., Ltd", "441b88": "Apple, Inc.", @@ -18496,6 +18516,7 @@ "44b433": "tide.co.,ltd", "44b462": "Pvt Ltd", "44b4b2": "Amazon Technologies Inc.", + "44b59c": "Tenet Networks Private Limited", "44b6be": "Cisco Systems, Inc", "44b7d0": "Microchip Technology Inc.", "44b994": "Douglas Lighting Controls", @@ -18559,6 +18580,7 @@ "44e517": "Intel Corporate", "44e66e": "Apple, Inc.", "44e6b0": "China Mobile IOT Company Limited", + "44e761": "Infinix mobility limited", "44e8a5": "Myreka Technologies Sdn. Bhd.", "44e968": "HUAWEI TECHNOLOGIES CO.,LTD", "44e9dd": "Sagemcom Broadband SAS", @@ -19035,6 +19057,7 @@ "4c617e": "Huawei Device Co., Ltd.", "4c6255": "SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.", "4c627b": "SmartCow AI Technologies Taiwan Ltd.", + "4c62cd": "Nokia", "4c6371": "Xiaomi Communications Co Ltd", "4c63ad": "Huawei Device Co., Ltd.", "4c63eb": "Ltd", @@ -19101,6 +19124,7 @@ "4c962d": "Fresh AB", "4c968a": "Wacom Co.,Ltd.", "4c98ef": "Zeo", + "4c9992": "vivo Mobile Communication Co., Ltd.", "4c9b63": "LG Innotek", "4c9d22": "ACES Co.,Ltd", "4c9e6c": "BROADEX TECHNOLOGIES CO.LTD", @@ -19339,6 +19363,7 @@ "50464a": "HUAWEI TECHNOLOGIES CO.,LTD", "50465d": "ASUSTek COMPUTER INC.", "5046ae": "MERCURY CORPORATION", + "50482c": "IEEE Registration Authority", "504877": "Honor Device Co., Ltd.", "5048eb": "BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.", "504921": "Cisco Systems, Inc", @@ -19651,6 +19676,7 @@ "5431d4": "TGW Mechanics GmbH", "543204": "Espressif Inc.", "5432c7": "Apple, Inc.", + "5433c6": "Mist Systems, Inc.", "5433cb": "Apple, Inc.", "5434ef": "HUAWEI TECHNOLOGIES CO.,LTD", "543530": "Hon Hai Precision Ind. Co.,Ltd.", @@ -19841,6 +19867,7 @@ "54dc1d": "Co.,Ltd", "54ded0": "Sevio Srl", "54df00": "Ulterius Technologies, LLC", + "54df1b": "Vestel Elektronik San ve Tic. A.S.", "54df24": "Fiberhome Telecommunication Technologies Co.,LTD", "54df63": "Intrakey technologies GmbH", "54e005": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -20124,6 +20151,7 @@ "58d071": "BW Broadcast", "58d08f": "IEEE 1904.1 Working Group", "58d237": "Sichuan Tianyi Comheart Telecom Co.,LTD", + "58d312": "zte corporation", "58d349": "Apple, Inc.", "58d391": "Quectel Wireless Solutions Co.,Ltd.", "58d50a": "Murata Manufacturing Co., Ltd.", @@ -20470,6 +20498,7 @@ "5ce8d3": "Signalinks Communication Technology Co., Ltd", "5ce8eb": "Samsung Electronics Co.,Ltd", "5ce91e": "Apple, Inc.", + "5ce931": "TP-Link Corporation Limited", "5cea1d": "Hon Hai Precision Ind. Co.,Ltd.", "5ceb4e": "R. STAHL HMI Systems GmbH", "5ceb68": "Cheerstar Technology Co., Ltd", @@ -20562,6 +20591,7 @@ "602a1b": "JANCUS", "602a54": "CardioTek B.V.", "602ad0": "Cisco SPVTG", + "602b58": "EM Microelectronic", "602e20": "HUAWEI TECHNOLOGIES CO.,LTD", "6030d4": "Apple, Inc.", "60313b": "Sunnovo International Limited", @@ -20650,6 +20680,7 @@ "6073bc": "zte corporation", "60748d": "Atmaca Elektronik", "6074f4": "Private", + "607623": "Shenzhen E-Superlink Technology Co., Ltd", "607688": "Velodyne", "607771": "Texas Instruments", "6077e2": "Samsung Electronics Co.,Ltd", @@ -20738,6 +20769,7 @@ "60ba18": "nextLAP GmbH", "60bb0c": "Beijing HuaqinWorld Technology Co,Ltd", "60bc4c": "EWM Hightec Welding GmbH", + "60bd2c": "Taicang T&W Electronics", "60bd91": "Move Innovation", "60beb4": "S-Bluetech co., limited", "60beb5": "Motorola Mobility LLC, a Lenovo Company", @@ -20752,6 +20784,7 @@ "60c5e6": "Skullcandy", "60c658": "PHYTRONIX Co.,Ltd.", "60c727": "Digiboard Eletronica da Amazonia Ltda", + "60c78d": "Juniper Networks", "60c798": "Verifone", "60c7be": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "60c980": "Trymus", @@ -21095,7 +21128,7 @@ "64cbe9": "LG Innotek", "64cc22": "Arcadyan Corporation", "64cc2e": "Xiaomi Communications Co Ltd", - "64ce6e": "Sierra Wireless", + "64ce6e": "Sierra Wireless, ULC", "64cf13": "Weigao Nikkiso(Weihai)Dialysis Equipment Co.,Ltd", "64cfd9": "Texas Instruments", "64d0d6": "Samsung Electronics Co.,Ltd", @@ -21113,6 +21146,7 @@ "64d954": "Taicang T&W Electronics", "64d989": "Cisco Systems, Inc", "64daa0": "Robert Bosch Smart Home GmbH", + "64daed": "eero inc.", "64db18": "OpenPattern", "64db38": "zte corporation", "64db43": "Mobility Technologies Communication Co., Ltd.", @@ -21613,14 +21647,17 @@ "6c6126": "Rinicom Holdings", "6c61f4": "SFR", "6c626d": "Micro-Star INT'L CO., LTD", + "6c6286": "Nokia", "6c639c": "ARRIS Group, Inc.", "6c641a": "Penguin Computing", "6c6567": "BELIMO Automation AG", "6c67ef": "HUAWEI TECHNOLOGIES CO.,LTD", + "6c68a4": "Guangzhou V-Solution Telecommunication Technology Co.,Ltd.", "6c6a77": "Intel Corporate", "6c6c0f": "HUAWEI TECHNOLOGIES CO.,LTD", "6c6cd3": "Cisco Systems, Inc", "6c6d09": "Kyowa Electronics Co.,Ltd.", + "6c6e07": "CE LINK LIMITED", "6c6efe": "Core Logic Inc.", "6c6f18": "Stereotaxis, Inc.", "6c7039": "Novar GmbH", @@ -22311,6 +22348,7 @@ "74767d": "shenzhen kexint technology co.,ltd", "747818": "Jurumani Solutions", "747827": "Dell Inc.", + "7478a6": "Fortinet, Inc.", "747a90": "Murata Manufacturing Co., Ltd.", "747b7a": "ETH Inc.", "747d24": "Co., Ltd.", @@ -22352,6 +22390,7 @@ "749050": "Renesas Electronics Corporation", "74911a": "Ruckus Wireless", "7491bd": "Four systems Co.,Ltd.", + "7492ba": "Movesense Ltd", "7493a4": "Zebra Technologies Corp.", "7493da": "ASKEY COMPUTER CORP", "74943d": "AgJunction", @@ -22413,8 +22452,10 @@ "74c17d": "Infinix mobility limited", "74c246": "Amazon Technologies Inc.", "74c330": "SHENZHEN FAST TECHNOLOGIES CO.,LTD", + "74c530": "vivo Mobile Communication Co., Ltd.", "74c621": "Zhejiang Hite Renewable Energy Co.,LTD", "74c63b": "AzureWave Technology Inc.", + "74c76e": "RTK-TECHNOLOGIES, LLC", "74c929": "Zhejiang Dahua Technology Co., Ltd.", "74c99a": "Ericsson AB", "74c9a3": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -22828,6 +22869,7 @@ "78ddd6": "c-scape", "78ddd9": "Guangzhou Shiyuan Electronics Co., Ltd. ", "78dee4": "Texas Instruments", + "78df72": "Shanghai Imilab Technology Co.Ltd", "78e103": "Amazon Technologies Inc.", "78e22c": "Huawei Device Co., Ltd.", "78e2bd": "Vodafone Automotive S.p.A.", @@ -23701,6 +23743,7 @@ "84850a": "Hella Sonnen- und Wetterschutztechnik GmbH", "848553": "Biznes Systema Telecom, LLC", "8485e6": "Guangdong Asano Technology CO.,Ltd.", + "848687": "weiyuantechnology", "8486f3": "Greenvity Communications", "8488e1": "Apple, Inc.", "8489ad": "Apple, Inc.", @@ -23811,7 +23854,7 @@ "84d81b": "TP-LINK TECHNOLOGIES CO.,LTD.", "84d931": "Hangzhou H3C Technologies Co., Limited", "84d9c8": "Unipattern Co.,", - "84db2f": "Sierra Wireless", + "84db2f": "Sierra Wireless, ULC", "84db9e": "Pink Nectarine Health AB", "84dba4": "Huawei Device Co., Ltd.", "84dbac": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23849,6 +23892,7 @@ "84f3eb": "Espressif Inc.", "84f44c": "International Integrated Systems., Inc.", "84f493": "OMS spol. s.r.o.", + "84f5eb": "zte corporation", "84f64c": "Cross Point BV", "84f6fa": "Miovision Technologies Incorporated", "84f703": "Espressif Inc.", @@ -23995,6 +24039,7 @@ "886b44": "Sunnovo International Limited", "886b6e": "Apple, Inc.", "886b76": "CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD", + "886c60": "Xiaomi Communications Co Ltd", "886d2d": "Huawei Device Co., Ltd.", "886edd": "Micronet union Technology(Chengdu)Co., Ltd.", "886ee1": "Erbe Elektromedizin GmbH", @@ -24076,6 +24121,7 @@ "88a4c2": "Electronics Technology co., ltd", "88a5bd": "QPCOM INC.", "88a6c6": "Sagemcom Broadband SAS", + "88a6ef": "IEEE Registration Authority", "88a73c": "Ragentek Technology Group", "88a9a7": "IEEE Registration Authority", "88a9b7": "Apple, Inc.", @@ -25362,6 +25408,7 @@ "988e79": "Qudelix, Inc.", "988ed4": "ITEL MOBILE LIMITED", "988edd": "TE Connectivity Limerick", + "988f00": "Aruba, a Hewlett Packard Enterprise Company", "988fe0": "IEEE Registration Authority", "989080": "Linkpower Network System Inc Ltd.", "989096": "Dell Inc.", @@ -26196,6 +26243,7 @@ "a41ee1": "Taicang T&W Electronics", "a41f72": "Dell Inc.", "a4218a": "Nortel Networks", + "a42249": "Sagemcom Broadband SAS", "a42305": "Open Networking Laboratory", "a424b3": "FlatFrog Laboratories AB", "a424dd": "Cambrionix Ltd", @@ -26222,6 +26270,7 @@ "a434f1": "Texas Instruments", "a43523": "Guangdong Donyan Network Technologies Co.,Ltd.", "a4352d": "TRIZ Networks corp.", + "a436c7": "LG Innotek", "a43831": "RF elements s.r.o.", "a438cc": "Nintendo Co.,Ltd", "a438fc": "Plastic Logic", @@ -26675,6 +26724,7 @@ "a898c6": "Shinbo Co., Ltd.", "a8995c": "aizo ag", "a89969": "Dell Inc.", + "a899ad": "Chaoyue Technology Co., Ltd.", "a899dc": "i-TOP DESING TECHNOLOGY CO.,LTD", "a89a93": "Sagemcom Broadband SAS", "a89ad7": "Nokia", @@ -27089,6 +27139,7 @@ "acd564": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "acd618": "Co., Ltd", "acd657": "Shaanxi GuoLian Digital TV Technology Co.,Ltd.", + "acd75b": "Sagemcom Broadband SAS", "acd829": "Co., Ltd.", "acd8a7": "BELLDESIGN Inc.", "acd9d6": "tci GmbH", @@ -27161,7 +27212,7 @@ "b01408": "LIGHTSPEED INTERNATIONAL CO.", "b01656": "HUAWEI TECHNOLOGIES CO.,LTD", "b01743": "EDISON GLOBAL CIRCUITS LLC", - "b01886": "SmarDTV", + "b01886": "SmarDTV Corporation", "b019c6": "Apple, Inc.", "b01b4b": "Invisible Fun Studio Limited", "b01b7c": "Ontrol A.S.", @@ -27230,6 +27281,7 @@ "b04c05": "Fresenius Medical Care Deutschland GmbH", "b04e26": "TP-LINK TECHNOLOGIES CO.,LTD.", "b04f13": "Dell Inc.", + "b04fa6": "DongGuan Ramaxel Memory Technology", "b04fc3": "Shenzhen NVC Cloud Technology Co., Ltd.", "b050bc": "SHENZHEN BASICOM ELECTRONIC CO.,LTD.", "b0518e": "Holl technology CO.Ltd.", @@ -27688,6 +27740,7 @@ "b4c0f5": "Shenzhen TINNO Mobile Technology Corp.", "b4c170": "Co., Ltd", "b4c26a": "Garmin International", + "b4c2e0": "Co., Ltd.", "b4c2f7": "Huawei Device Co., Ltd.", "b4c44e": "VXL eTech Pvt Ltd", "b4c476": "Wuhan Maritime Communication Research Institute", @@ -28089,6 +28142,7 @@ "b8f8be": "BLUECOM", "b8f934": "Sony Corporation", "b8fbaf": "Xiamen IPRT Technology CO.,LTD", + "b8fc28": "Valeo Vision Systems", "b8fc9a": "Limited", "b8fd32": "Zhejiang ROICX Microelectronics", "b8ff61": "Apple, Inc.", @@ -28270,6 +28324,7 @@ "bc8385": "Microsoft Corporation", "bc83a7": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "bc851f": "Samsung Electronics Co.,Ltd", + "bc8529": "Jiangxi Remote lntelligence Technology Co.,Ltd", "bc8556": "Hon Hai Precision Ind. Co.,Ltd.", "bc87fa": "Bose Corporation", "bc8893": "VILLBAU Ltd.", @@ -28285,6 +28340,7 @@ "bc9307": "Samsung Electronics Co.,Ltd", "bc9325": "Ningbo Joyson Preh Car Connect Co.,Ltd. ", "bc9680": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", + "bc96e5": "SERCOMM PHILIPPINES INC", "bc9740": "IEEE Registration Authority", "bc9789": "Huawei Device Co., Ltd.", "bc97e1": "Broadcom Limited", @@ -28408,6 +28464,7 @@ "bcf9f2": "TEKO", "bcfab8": "Guangzhou Shiyuan Electronic Technology Company Limited", "bcfaeb": "Cisco Systems, Inc", + "bcfd0c": "Shenzhen Phaten Tech. LTD", "bcfe8c": "Altronic, LLC", "bcfed9": "Apple, Inc.", "bcff21": "Smart Code(shenzhen)Technology Co.,Ltd", @@ -28544,6 +28601,7 @@ "c07878": "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.", "c07982": "TCL King Electrical Appliances(Huizhou)Co.,Ltd", "c07bbc": "Cisco Systems, Inc", + "c07c90": "Shenzhen YOUHUA Technology Co., Ltd", "c07cd1": "PEGATRON CORPORATION", "c07e40": "SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD", "c08135": "Ningbo Forfan technology Co., LTD", @@ -28921,6 +28979,7 @@ "c49300": "8Devices", "c49313": "100fio networks technology llc", "c49380": "Speedytel technology", + "c493bb": "Beijing Xiaomi Mobile Software Co., Ltd", "c493d9": "Samsung Electronics Co.,Ltd", "c49500": "Amazon Technologies Inc.", "c4954d": "IEEE Registration Authority", @@ -29259,6 +29318,7 @@ "c8a40d": "Cooler Master Technology Inc", "c8a608": "Ruckus Wireless", "c8a620": "Nebula, Inc", + "c8a6ef": "Samsung Electronics Co.,Ltd", "c8a70a": "Verizon Business", "c8a729": "SYStronics Co., Ltd.", "c8a776": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -29568,7 +29628,7 @@ "cc9093": "Hansong Tehnologies", "cc90e8": "Shenzhen YOUHUA Technology Co., Ltd", "cc912b": "TE Connectivity Touch Solutions", - "cc934a": "Sierra Wireless", + "cc934a": "Sierra Wireless, ULC", "cc944a": "Pfeiffer Vacuum GmbH", "cc9470": "Kinestral Technologies, Inc.", "cc95d7": "Vizio, Inc", @@ -29679,6 +29739,7 @@ "cce8ac": "SOYEA Technology Co.,Ltd.", "ccea1c": "DCONWORKS Co., Ltd", "cceb18": "OOO TSS", + "cceb5e": "Xiaomi Communications Co Ltd", "cced21": "Nokia Shanghai Bell Co., Ltd.", "cced4d": "Cisco Systems, Inc", "cceddc": "MitraStar Technology Corp.", @@ -29732,6 +29793,7 @@ "d01411": "IEEE Registration Authority", "d0154a": "zte corporation", "d015a6": "Aruba, a Hewlett Packard Enterprise Company", + "d015bb": "IEEE Registration Authority", "d0167c": "eero inc.", "d016b4": "HUAWEI TECHNOLOGIES CO.,LTD", "d016f0": "IEEE Registration Authority", @@ -29783,6 +29845,7 @@ "d0431e": "Dell Inc.", "d046dc": "Southwest Research Institute", "d047c1": "Elma Electronic AG", + "d0484f": "Nokia Solutions and Networks GmbH & Co. KG", "d048f3": "DATTUS Inc", "d0497c": "Co., Ltd", "d0498b": "ZOOM SERVER", @@ -30364,6 +30427,7 @@ "d807b6": "TP-LINK TECHNOLOGIES CO.,LTD.", "d80831": "Samsung Electronics Co.,Ltd", "d808f5": "Arcadia Networks Co. Ltd. ", + "d8097f": "zte corporation", "d809c3": "Cercacor Labs", "d809d6": "ZEXELON CO., LTD.", "d80a60": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -30414,6 +30478,7 @@ "d82986": "Best Wish Technology LTD", "d82a15": "Leitner SpA", "d82a7e": "Nokia Corporation", + "d82d40": "Janz - Contagem e Gestão de Fluídos S.A.", "d82d9b": "Shenzhen G.Credit Communication Technology Co., Ltd", "d82de1": "Tricascade Inc.", "d82fe6": "Zhejiang Tmall Technology Co., Ltd.", @@ -30665,6 +30730,7 @@ "d8e3ae": "CIRTEC MEDICAL SYSTEMS", "d8e56d": "TCT mobile ltd", "d8e72b": "NETSCOUT SYSTEMS INC", + "d8e72f": "Corp.", "d8e743": "Wush, Inc", "d8e844": "zte corporation", "d8e952": "KEOPSYS", @@ -30796,6 +30862,7 @@ "dc4ef4": "Shenzhen MTN Electronics CO., Ltd", "dc4f22": "Espressif Inc.", "dc503a": "Nanjing Ticom Tech Co., Ltd.", + "dc5193": "zte corporation", "dc5285": "Apple, Inc.", "dc5360": "Intel Corporate", "dc537c": "Compal Broadband Networks, Inc.", @@ -31309,6 +31376,7 @@ "e0dca0": "Siemens Industrial Automation Products Ltd., Chengdu", "e0dcff": "Xiaomi Communications Co Ltd", "e0ddc0": "vivo Mobile Communication Co., Ltd.", + "e0df13": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "e0e0c2": "China Mobile Group Device Co.,Ltd.", "e0e0fc": "Huawei Device Co., Ltd.", "e0e1a9": "Shenzhen Four Seas Global Link Network Technology Co., Ltd.", @@ -31829,6 +31897,7 @@ "e899c4": "HTC Corporation", "e89a8f": "Quanta Computer Inc.", "e89aff": "Fujian LANDI Commercial Equipment Co.,Ltd", + "e89c25": "ASUSTek COMPUTER INC.", "e89d87": "Toshiba", "e89e0c": "MAX8USA DISTRIBUTORS INC.", "e89eb4": "Hon Hai Precision Ind. Co.,Ltd.", @@ -32644,6 +32713,7 @@ "f42b8c": "Samsung Electronics Co.,Ltd", "f42c56": "SENOR TECH CO LTD", "f42d06": "zte corporation", + "f42e48": "zte corporation", "f42e7f": "Aruba, a Hewlett Packard Enterprise Company", "f4308b": "Xiaomi Communications Co Ltd", "f430b9": "Hewlett Packard", From f99628bfe40ec66805bdb18295f82aaf7957aa1e Mon Sep 17 00:00:00 2001 From: Adam Byczkowski <38091261+qduk@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:43:05 -0500 Subject: [PATCH 21/37] Add -f to flatbot branch pushes (#284) * Add -f to flatbot branch pushes * Added spaces to workflow files --- .github/workflows/oui_filepull.yml | 4 ++-- .github/workflows/proto_filepull.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/oui_filepull.yml b/.github/workflows/oui_filepull.yml index 6d178e08..ab396a64 100644 --- a/.github/workflows/oui_filepull.yml +++ b/.github/workflows/oui_filepull.yml @@ -1,7 +1,7 @@ --- name: "OUI-Updates" -on: # yamllint disable-line rule:truthy +on: # yamllint disable-line rule:truthy schedule: - cron: "0 8 * * 4" @@ -24,7 +24,7 @@ jobs: run: "git checkout -b $BRANCH_NAME" # Push new branch so Flatbot can make its commit - name: "Push Flatbot branch" - run: "git push --set-upstream origin $BRANCH_NAME" + run: "git push -f --set-upstream origin $BRANCH_NAME" # This step installs Deno, which is a new Javascript runtime that improves on Node. Can be used for an optional postprocessing step - name: "Setup deno" uses: "denoland/setup-deno@main" diff --git a/.github/workflows/proto_filepull.yml b/.github/workflows/proto_filepull.yml index 4611e14e..bf02c00c 100644 --- a/.github/workflows/proto_filepull.yml +++ b/.github/workflows/proto_filepull.yml @@ -1,7 +1,7 @@ --- name: "Protocol-Updates" -on: # yamllint disable-line rule:truthy +on: # yamllint disable-line rule:truthy schedule: - cron: "0 8 * * 4" @@ -24,7 +24,7 @@ jobs: run: "git checkout -b $BRANCH_NAME" # Push new branch so Flatbot can make its commit - name: "Push Flatbot branch" - run: "git push --set-upstream origin $BRANCH_NAME" + run: "git push -f --set-upstream origin $BRANCH_NAME" # Install Black - name: "Install Python Black" run: "pip install black" From 8a878c86774e3818707edbf10257ed8e8ea4b43d Mon Sep 17 00:00:00 2001 From: Adam Byczkowski <38091261+qduk@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:43:20 -0500 Subject: [PATCH 22/37] Added FourHundredGigabitEthernet to REVERSE_MAPPING (#285) --- netutils/constants.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netutils/constants.py b/netutils/constants.py index c5c797b6..dcb605f9 100644 --- a/netutils/constants.py +++ b/netutils/constants.py @@ -176,6 +176,7 @@ "FastEthernet": "Fa", "Fddi": "FD", "FortyGigabitEthernet": "Fo", + "FourHundredGigabitEthernet": "FH", "GigabitEthernet": "Gi", "HundredGigabitEthernet": "Hu", "Loopback": "Lo", From 92c041c917818634265c324ab446f4f7eef36614 Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Fri, 9 Jun 2023 18:06:18 -0400 Subject: [PATCH 23/37] Move password helper names to be namespaced with vendor information. Assign new name to old name to not break semver. (#286) --- docs/dev/attribution.md | 20 ++++----- docs/user/include_jinja_list.md | 13 ++++-- docs/user/lib_use_cases.md | 6 +-- netutils/password.py | 76 ++++++++++++++++++--------------- netutils/utils.py | 13 ++++-- tests/unit/test_password.py | 72 +++++++++++++++---------------- 6 files changed, 109 insertions(+), 91 deletions(-) diff --git a/docs/dev/attribution.md b/docs/dev/attribution.md index 135ecf6e..aabb6b3a 100644 --- a/docs/dev/attribution.md +++ b/docs/dev/attribution.md @@ -13,16 +13,16 @@ Influencers In many instances variables and function names were reused, but the code was built from scratch to avoid any potential licensing issues. Functions that were known to be rewritten and their known origin. -| Function | Origin | -| ---------------- | ------- | -| asn_to_int | NAPALM | -| is_ip | IPCal | -| ip_to_bin | IPCal | -| get_usable_range | IPCal | -| encrypt_type7 | unknown | -| decrypt_type7 | unknown | -| vlan_to_list | Ansible | -| sanitize_config | NAPALM | +| Function | Origin | +| ------------------- | ------- | +| asn_to_int | NAPALM | +| is_ip | IPCal | +| ip_to_bin | IPCal | +| get_usable_range | IPCal | +| encrypt_cisco_type7 | unknown | +| decrypt_cisco_type7 | unknown | +| vlan_to_list | Ansible | +| sanitize_config | NAPALM | Relevant PR's diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index 627acc2e..86fd597c 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -52,15 +52,20 @@ | mac_to_int | netutils.mac.mac_to_int | | mac_type | netutils.mac.mac_type | | get_upgrade_path | netutils.os_version.get_upgrade_path | +| compare_cisco_type5 | netutils.password.compare_cisco_type5 | +| compare_cisco_type7 | netutils.password.compare_cisco_type7 | +| compare_cisco_type9 | netutils.password.compare_cisco_type9 | | compare_type5 | netutils.password.compare_type5 | | compare_type7 | netutils.password.compare_type7 | -| compare_type9 | netutils.password.compare_type9 | -| decrypt_juniper | netutils.password.decrypt_juniper | +| decrypt_cisco_type7 | netutils.password.decrypt_cisco_type7 | +| decrypt_juniper_type9 | netutils.password.decrypt_juniper_type9 | | decrypt_type7 | netutils.password.decrypt_type7 | -| encrypt_juniper | netutils.password.encrypt_juniper | +| encrypt_cisco_type5 | netutils.password.encrypt_cisco_type5 | +| encrypt_cisco_type7 | netutils.password.encrypt_cisco_type7 | +| encrypt_cisco_type9 | netutils.password.encrypt_cisco_type9 | +| encrypt_juniper_type9 | netutils.password.encrypt_juniper_type9 | | encrypt_type5 | netutils.password.encrypt_type5 | | encrypt_type7 | netutils.password.encrypt_type7 | -| encrypt_type9 | netutils.password.encrypt_type9 | | get_hash_salt | netutils.password.get_hash_salt | | tcp_ping | netutils.ping.tcp_ping | | longest_prefix_match | netutils.route.longest_prefix_match | diff --git a/docs/user/lib_use_cases.md b/docs/user/lib_use_cases.md index 47e49876..2e01aa04 100644 --- a/docs/user/lib_use_cases.md +++ b/docs/user/lib_use_cases.md @@ -54,12 +54,12 @@ The following function will help in deploying list of VLANs and match the config You may want to compare a known password with a given encrypted password. This can help in verifying if the passwords are as expected for compliance reasons. ```python ->>> from netutils.password import compare_type5 +>>> from netutils.password import compare_cisco_type5 >>> ->>> compare_type5("cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") +>>> compare_cisco_type5("cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") True >>> ->>> compare_type5("not_cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") +>>> compare_cisco_type5("not_cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") False >>> ``` diff --git a/netutils/password.py b/netutils/password.py index 5a7d9017..f780f24f 100644 --- a/netutils/password.py +++ b/netutils/password.py @@ -112,7 +112,7 @@ def decorated(*args: t.Any, **kwargs: t.Any) -> t.Any: return decorated -def compare_type5( +def compare_cisco_type5( unencrypted_password: str, encrypted_password: str, return_original: bool = False ) -> t.Union[str, bool]: """Given an encrypted and unencrypted password of Cisco Type 5 password, compare if they are a match. @@ -126,22 +126,22 @@ def compare_type5( Whether or not the password is as compared to. Examples: - >>> from netutils.password import compare_type5 - >>> compare_type5("cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") + >>> from netutils.password import compare_cisco_type5 + >>> compare_cisco_type5("cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") True - >>> compare_type5("not_cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") + >>> compare_cisco_type5("not_cisco","$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.") False >>> """ salt = get_hash_salt(encrypted_password) - if encrypt_type5(unencrypted_password, salt) == encrypted_password: + if encrypt_cisco_type5(unencrypted_password, salt) == encrypted_password: if return_original is True: return encrypted_password return True return False -def compare_type7( +def compare_cisco_type7( unencrypted_password: str, encrypted_password: str, return_original: bool = False ) -> t.Union[str, bool]: """Given an encrypted and unencrypted password of Cisco Type 7 password, compare if they are a match. @@ -155,24 +155,24 @@ def compare_type7( Whether or not the password is as compared to. Examples: - >>> from netutils.password import compare_type7 - >>> compare_type7("cisco","121A0C041104") + >>> from netutils.password import compare_cisco_type7 + >>> compare_cisco_type7("cisco","121A0C041104") True - >>> compare_type7("not_cisco","121A0C041104") + >>> compare_cisco_type7("not_cisco","121A0C041104") False >>> """ - if decrypt_type7(encrypted_password) == unencrypted_password: + if decrypt_cisco_type7(encrypted_password) == unencrypted_password: if return_original is True: return encrypted_password return True return False -def compare_type9( +def compare_cisco_type9( unencrypted_password: str, encrypted_password: str, return_original: bool = False ) -> t.Union[str, bool]: - """Given an encrypted and unencrypted password of Cisco Type 7 password, compare if they are a match. + """Given an encrypted and unencrypted password of Cisco Type 9 password, compare if they are a match. Args: unencrypted_password: A password that has not been encrypted, and will be compared against. @@ -183,22 +183,22 @@ def compare_type9( Whether or not the password is as compared to. Examples: - >>> from netutils.password import compare_type9 - >>> compare_type9("cisco","$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2") + >>> from netutils.password import compare_cisco_type9 + >>> compare_cisco_type9("cisco","$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2") True - >>> compare_type9("not_cisco","$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2") + >>> compare_cisco_type9("not_cisco","$9$588|P!iWqEx=Wf$nadLmT9snc6V9QAeUuATSOoCAZMQIHqixJfZpQj5EU2") False >>> """ salt = get_hash_salt(encrypted_password) - if encrypt_type9(unencrypted_password, salt) == encrypted_password: + if encrypt_cisco_type9(unencrypted_password, salt) == encrypted_password: if return_original is True: return encrypted_password return True return False -def decrypt_type7(encrypted_password: str) -> str: +def decrypt_cisco_type7(encrypted_password: str) -> str: """Given an unencrypted password of Cisco Type 7 password decrypt it. Args: @@ -208,8 +208,8 @@ def decrypt_type7(encrypted_password: str) -> str: The unencrypted_password password. Examples: - >>> from netutils.password import decrypt_type7 - >>> decrypt_type7("121A0C041104") + >>> from netutils.password import decrypt_cisco_type7 + >>> decrypt_cisco_type7("121A0C041104") 'cisco' >>> """ @@ -229,7 +229,7 @@ def decrypt_type7(encrypted_password: str) -> str: @_fail_on_mac -def encrypt_type5(unencrypted_password: str, salt: t.Optional[str] = None, salt_len: int = 4) -> str: +def encrypt_cisco_type5(unencrypted_password: str, salt: t.Optional[str] = None, salt_len: int = 4) -> str: """Given an unencrypted password of Cisco Type 5 password, encrypt it. Args: @@ -241,8 +241,8 @@ def encrypt_type5(unencrypted_password: str, salt: t.Optional[str] = None, salt_ The encrypted password. Examples: - >>> from netutils.password import encrypt_type5 - >>> encrypt_type5("cisco") # doctest: +SKIP + >>> from netutils.password import encrypt_cisco_type5 + >>> encrypt_cisco_type5("cisco") # doctest: +SKIP '$1$MHkb$v2MFmDkQX66TTxLkFF50K/' >>> """ @@ -253,7 +253,7 @@ def encrypt_type5(unencrypted_password: str, salt: t.Optional[str] = None, salt_ return crypt.crypt(unencrypted_password, f"$1${salt}$") -def encrypt_type7(unencrypted_password: str, salt: t.Optional[int] = None) -> str: +def encrypt_cisco_type7(unencrypted_password: str, salt: t.Optional[int] = None) -> str: """Given an unencrypted password of Cisco Type 7 password, encypt it. Args: @@ -264,8 +264,8 @@ def encrypt_type7(unencrypted_password: str, salt: t.Optional[int] = None) -> st The encrypted password. Examples: - >>> from netutils.password import encrypt_type7 - >>> encrypt_type7("cisco", 11) + >>> from netutils.password import encrypt_cisco_type7 + >>> encrypt_cisco_type7("cisco", 11) '110A1016141D' >>> """ @@ -290,7 +290,7 @@ def encrypt_type7(unencrypted_password: str, salt: t.Optional[int] = None) -> st return encrypted_password -def encrypt_type9(unencrypted_password: str, salt: t.Optional[str] = None) -> str: +def encrypt_cisco_type9(unencrypted_password: str, salt: t.Optional[str] = None) -> str: """Given an unencrypted password of Cisco Type 9 password, encrypt it. Note: This uses the built-in Python `scrypt` function to generate the password @@ -306,8 +306,8 @@ def encrypt_type9(unencrypted_password: str, salt: t.Optional[str] = None) -> st The encrypted password. Examples: - >>> from netutils.password import encrypt_type9 - >>> encrypt_type9("123456", "cvWdfQlRRDKq/U") + >>> from netutils.password import encrypt_cisco_type9 + >>> encrypt_cisco_type9("123456", "cvWdfQlRRDKq/U") '$9$cvWdfQlRRDKq/U$VFTPha5VHTCbSgSUAo.nPoh50ZiXOw1zmljEjXkaq1g' Raises: @@ -364,7 +364,7 @@ def get_hash_salt(encrypted_password: str) -> str: return split_password[2] -def decrypt_juniper(encrypted_password: str) -> str: +def decrypt_juniper_type9(encrypted_password: str) -> str: """Given an encrypted Junos $9$ type password, decrypt it. Args: @@ -374,8 +374,8 @@ def decrypt_juniper(encrypted_password: str) -> str: The unencrypted_password password. Examples: - >>> from netutils.password import decrypt_juniper - >>> decrypt_juniper("$9$7YdwgGDkTz6oJz69A1INdb") + >>> from netutils.password import decrypt_juniper_type9 + >>> decrypt_juniper_type9("$9$7YdwgGDkTz6oJz69A1INdb") 'juniper' >>> """ @@ -409,7 +409,7 @@ def decrypt_juniper(encrypted_password: str) -> str: return decrypted_password -def encrypt_juniper(unencrypted_password: str, salt: t.Optional[int] = None) -> str: +def encrypt_juniper_type9(unencrypted_password: str, salt: t.Optional[int] = None) -> str: """Given an unencrypted password, encrypt to Juniper $9$ type password. Args: @@ -420,8 +420,8 @@ def encrypt_juniper(unencrypted_password: str, salt: t.Optional[int] = None) -> The encrypted password. Examples: - >>> from netutils.password import encrypt_juniper - >>> encrypt_juniper("juniper", 35) # doctest: +SKIP + >>> from netutils.password import encrypt_juniper_type9 + >>> encrypt_juniper_type9("juniper", 35) # doctest: +SKIP '$9$7YdwgGDkTz6oJz69A1INdb' >>> """ @@ -454,3 +454,11 @@ def encrypt_juniper(unencrypted_password: str, salt: t.Optional[int] = None) -> encrypted_password += new_character return encrypted_password + + +# Provide until transition to 2.0 +compare_type5 = compare_cisco_type5 +compare_type7 = compare_cisco_type7 +decrypt_type7 = decrypt_cisco_type7 +encrypt_type5 = encrypt_cisco_type5 +encrypt_type7 = encrypt_cisco_type7 diff --git a/netutils/utils.py b/netutils/utils.py index 8d3f13a5..993f6c99 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -54,14 +54,19 @@ "get_oui": "mac.get_oui", "compare_type5": "password.compare_type5", "compare_type7": "password.compare_type7", - "compare_type9": "password.compare_type9", + "compare_cisco_type5": "password.compare_cisco_type5", + "compare_cisco_type7": "password.compare_cisco_type7", + "compare_cisco_type9": "password.compare_cisco_type9", "decrypt_type7": "password.decrypt_type7", + "decrypt_cisco_type7": "password.decrypt_cisco_type7", + "decrypt_juniper_type9": "password.decrypt_juniper_type9", "encrypt_type5": "password.encrypt_type5", "encrypt_type7": "password.encrypt_type7", - "encrypt_type9": "password.encrypt_type9", + "encrypt_cisco_type5": "password.encrypt_cisco_type5", + "encrypt_cisco_type7": "password.encrypt_cisco_type7", + "encrypt_cisco_type9": "password.encrypt_cisco_type9", + "encrypt_juniper_type9": "password.encrypt_juniper_type9", "get_hash_salt": "password.get_hash_salt", - "encrypt_juniper": "password.encrypt_juniper", - "decrypt_juniper": "password.decrypt_juniper", "tcp_ping": "ping.tcp_ping", "longest_prefix_match": "route.longest_prefix_match", "vlanlist_to_config": "vlan.vlanlist_to_config", diff --git a/tests/unit/test_password.py b/tests/unit/test_password.py index 933120a3..25ac1445 100644 --- a/tests/unit/test_password.py +++ b/tests/unit/test_password.py @@ -3,7 +3,7 @@ from netutils import password -COMPARE_TYPE5 = [ +COMPARE_CISCO_TYPE5 = [ { "sent": {"unencrypted_password": "cisco", "encrypted_password": "$1$nTc1$Z28sUTcWfXlvVe2x.3XAa."}, "received": True, @@ -22,7 +22,7 @@ }, ] -COMPARE_TYPE7 = [ +COMPARE_CISCO_TYPE7 = [ { "sent": {"unencrypted_password": "cisco", "encrypted_password": "070C285F4D06"}, "received": True, @@ -41,7 +41,7 @@ }, ] -COMPARE_TYPE9 = [ +COMPARE_CISCO_TYPE9 = [ { "sent": { "unencrypted_password": "cisco", @@ -66,28 +66,28 @@ }, ] -DECRYPT_TYPE7 = [ +DECRYPT_CISCO_TYPE7 = [ { "sent": {"encrypted_password": "14141B180F0B"}, "received": "cisco", } ] -ENCRYPT_TYPE5 = [ +ENCRYPT_CISCO_TYPE5 = [ { "sent": {"unencrypted_password": "cisco", "salt": "nTc1"}, "received": "$1$nTc1$Z28sUTcWfXlvVe2x.3XAa.", }, ] -ENCRYPT_TYPE7 = [ +ENCRYPT_CISCO_TYPE7 = [ { "sent": {"unencrypted_password": "cisco", "salt": 10}, "received": "104D000A0618", }, ] -ENCRYPT_TYPE9 = [ +ENCRYPT_CISCO_TYPE9 = [ { "sent": {"unencrypted_password": "cisco", "salt": "x2xAAwQ3MBbEnk"}, "received": "$9$x2xAAwQ3MBbEnk$JCxr6MnPb.k5ymK72mTypyRJYH5W74ZRvtLTprCj.xQ", @@ -101,7 +101,7 @@ }, ] -ENCRYPT_JUNIPER = [ +ENCRYPT_JUNIPER_TYPE9 = [ { "sent": {"unencrypted_password": "juniper", "salt": 35}, "received_one": "$9$7", @@ -109,7 +109,7 @@ }, ] -DECRYPT_JUNIPER = [ +DECRYPT_JUNIPER_TYPE9 = [ { "sent": {"encrypted_password": "$9$7YdwgGDkTz6oJz69A1INdb"}, "received": "juniper", @@ -117,39 +117,39 @@ ] -@pytest.mark.parametrize("data", COMPARE_TYPE5) -def test_compare_type5(data): - assert password.compare_type5(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", COMPARE_CISCO_TYPE5) +def test_compare_cisco_type5(data): + assert password.compare_cisco_type5(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", COMPARE_TYPE7) -def test_compare_type7(data): - assert password.compare_type7(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", COMPARE_CISCO_TYPE7) +def test_compare_cisco_type7(data): + assert password.compare_cisco_type7(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", COMPARE_TYPE9) -def test_compare_type9(data): - assert password.compare_type9(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", COMPARE_CISCO_TYPE9) +def test_compare_cisco_type9(data): + assert password.compare_cisco_type9(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", DECRYPT_TYPE7) -def test_decrypt_type7(data): - assert password.decrypt_type7(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", DECRYPT_CISCO_TYPE7) +def test_decrypt_cisco_type7(data): + assert password.decrypt_cisco_type7(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", ENCRYPT_TYPE5) -def test_encrypt_type5(data): - assert password.encrypt_type5(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", ENCRYPT_CISCO_TYPE5) +def test_encrypt_cisco_type5(data): + assert password.encrypt_cisco_type5(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", ENCRYPT_TYPE7) -def test_encrypt_type7(data): - assert password.encrypt_type7(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", ENCRYPT_CISCO_TYPE7) +def test_encrypt_cisco_type7(data): + assert password.encrypt_cisco_type7(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", ENCRYPT_TYPE9) -def test_encrypt_type9(data): - assert password.encrypt_type9(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", ENCRYPT_CISCO_TYPE9) +def test_encrypt_cisco_type9(data): + assert password.encrypt_cisco_type9(**data["sent"]) == data["received"] @pytest.mark.parametrize("data", GET_HASH_SALT) @@ -157,14 +157,14 @@ def test_get_hash_salt(data): assert password.get_hash_salt(**data["sent"]) == data["received"] -@pytest.mark.parametrize("data", ENCRYPT_JUNIPER) -def test_encrypt_juniper(data): +@pytest.mark.parametrize("data", ENCRYPT_JUNIPER_TYPE9) +def test_encrypt_juniper_type9(data): # Passwords include random padding, check only the non random sections - decrypted_password = password.encrypt_juniper(**data["sent"]) + decrypted_password = password.encrypt_juniper_type9(**data["sent"]) assert decrypted_password[0:4] == data["received_one"] assert decrypted_password[7:] == data["received_two"] -@pytest.mark.parametrize("data", DECRYPT_JUNIPER) -def test_decrypt_juniper(data): - assert password.decrypt_juniper(**data["sent"]) == data["received"] +@pytest.mark.parametrize("data", DECRYPT_JUNIPER_TYPE9) +def test_decrypt_juniper_type9(data): + assert password.decrypt_juniper_type9(**data["sent"]) == data["received"] From eee64162e518aa66d21047a57f159d3463d7fb1a Mon Sep 17 00:00:00 2001 From: Zach Biles Date: Wed, 21 Jun 2023 15:19:14 -0500 Subject: [PATCH 24/37] Palo alto networks (#262) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: ✨ start building palo parser * fix: 🐛 everything but the banner * fix: 🐛 adjust for banner * fix: 🔥 delete unneeded file * fix: 🐛 spelling * chore: 🚨 fix black * fix: 🐛 spelling * fix: 🐛 update base configs * chore: ⬆️ update poetry dependencies * feat: ✨ add parsing for palo alto devices * chore: ✅ update fixtures * chore: 🎨 fix black * fix: 🐛 remove commented lines * feat: ✨ add palo alto networks * fix: 🐛 adjust checking logic * fix: 🐛 only process if generator is not empty * fix: 🐛 fix conversion logic * fix: 🐛 adjust for other content field * test: ✅ add test features * fix: 🐛 update jinja mapping * chore: 🚨 fix black * chore: ✅ add more tests * fix: 🐛 remote unnecessary import * fix: 🐛 add type * fix: 🐛 add type * fix: 🐛 change type * fix: 🐛 update types * fix: 🐛 yet another typing fix * fix: 🐛 fix spelling * fix: 🐛 fix BaseSpaceConfigParser example * fix: 🐛 fix examples and passing tests * fix: 🐛 fix docs build test * fix: 🐛 remove extra stuff * fix: 🐛 adjust banner handling * fix: 🐛 fix banner handling * test: ✅ add tests for palo config converter * fix: 🐛 small tweaks * fix: 🐛 fix pylint errors and parser tests * chore: ⬆️ poetry update * fix: 🐛 remove unneeded versions * fix: 🐛 update banner handling * Update netutils/config/conversion.py Co-authored-by: Jeff Kala <48843785+jeffkala@users.noreply.github.com> * Update netutils/config/conversion.py Co-authored-by: Adam Byczkowski <38091261+qduk@users.noreply.github.com> * Update netutils/config/parser.py Co-authored-by: Jeff Kala <48843785+jeffkala@users.noreply.github.com> * fix: 🐛 fix conversion mapping and testing * refactor: ♻️ refactor config conversion * refactor: ♻️ refactor to resolve cyclic import - move function to utils module * fix: ✅ fix pylint errors * fix: ✅ more linter errors * fix: 🐛 fix example for conversion * fix: 🐛 regenerate poetry.lock * fix: 🐛 revert poetry update --------- Co-authored-by: Jeff Kala <48843785+jeffkala@users.noreply.github.com> Co-authored-by: Adam Byczkowski <38091261+qduk@users.noreply.github.com> --- docs/dev/include_parser_list.md | 3 +- docs/user/include_jinja_list.md | 1 + netutils/config/compliance.py | 13 +- netutils/config/conversion.py | 94 +++++ netutils/config/parser.py | 120 ++++++- netutils/config/utils.py | 10 + netutils/utils.py | 1 + poetry.lock | 0 .../paloalto_panos/paloalto_backup.txt | 32 ++ .../paloalto_panos/paloalto_feature.py | 3 + .../paloalto_panos/paloalto_intended.txt | 32 ++ .../paloalto_panos/paloalto_received.json | 12 + .../paloalto_panos/panos_feature.py | 8 + .../paloalto_panos/panos_received.json | 4 + .../paloalto_panos/panos_sent.txt | 9 + .../paloalto_panos/panos_basic_base.txt | 9 + .../paloalto_panos/panos_basic_intended.txt | 9 + .../paloalto_panos/panos_basic_received.txt | 1 + .../paloalto_panos/panos_full_feature.py | 5 + .../paloalto_panos/panos_full_received.txt | 7 + .../paloalto_panos/panos_full_sent.txt | 21 ++ .../paloalto_basic_converted.txt | 22 ++ .../paloalto_panos/paloalto_basic_sent.txt | 51 +++ .../paloalto_panos/panos_basic_received.py | 44 +++ .../base/paloalto_panos/panos_basic_sent.txt | 52 +++ .../paloalto_panos/panos_full_received.py | 340 ++++++++++++++++++ .../base/paloalto_panos/panos_full_sent.txt | 333 +++++++++++++++++ tests/unit/test_conversion.py | 30 ++ 28 files changed, 1253 insertions(+), 13 deletions(-) create mode 100644 netutils/config/conversion.py create mode 100644 netutils/config/utils.py mode change 100755 => 100644 poetry.lock create mode 100644 tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_backup.txt create mode 100644 tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_feature.py create mode 100644 tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_intended.txt create mode 100644 tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_received.json create mode 100644 tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_feature.py create mode 100644 tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_received.json create mode 100644 tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_sent.txt create mode 100644 tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_base.txt create mode 100644 tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_intended.txt create mode 100644 tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_received.txt create mode 100644 tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py create mode 100644 tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt create mode 100644 tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt create mode 100644 tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt create mode 100644 tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_sent.txt create mode 100644 tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py create mode 100644 tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_sent.txt create mode 100644 tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py create mode 100644 tests/unit/mock/config/parser/base/paloalto_panos/panos_full_sent.txt create mode 100644 tests/unit/test_conversion.py diff --git a/docs/dev/include_parser_list.md b/docs/dev/include_parser_list.md index 97d30c9b..93fb6a23 100644 --- a/docs/dev/include_parser_list.md +++ b/docs/dev/include_parser_list.md @@ -15,4 +15,5 @@ | linux | netutils.config.parser.LINUXConfigParser | | mikrotik_routeros | netutils.config.parser.RouterOSConfigParser | | mrv_optiswitch | netutils.config.parser.OptiswitchConfigParser | -| nokia_sros | netutils.config.parser.NokiaConfigParser | \ No newline at end of file +| nokia_sros | netutils.config.parser.NokiaConfigParser | +| paloalto_panos | netutils.config.parser.PaloAltoNetworksConfigParser | \ No newline at end of file diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index 86fd597c..29fb3414 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -16,6 +16,7 @@ | feature_compliance | netutils.config.compliance.feature_compliance | | find_unordered_cfg_lines | netutils.config.compliance.find_unordered_cfg_lines | | section_config | netutils.config.compliance.section_config | +| paloalto_panos_brace_to_set | netutils.config.conversion.paloalto_panos_brace_to_set | | fqdn_to_ip | netutils.dns.fqdn_to_ip | | is_fqdn_resolvable | netutils.dns.is_fqdn_resolvable | | abbreviated_interface_name | netutils.interface.abbreviated_interface_name | diff --git a/netutils/config/compliance.py b/netutils/config/compliance.py index af7a3a11..55fa56a8 100644 --- a/netutils/config/compliance.py +++ b/netutils/config/compliance.py @@ -2,6 +2,8 @@ import typing as t +from netutils.config.utils import _open_file_config + from . import parser # pylint: disable=relative-beyond-top-level parser_map: t.Dict[str, t.Type[parser.BaseConfigParser]] = { @@ -20,9 +22,11 @@ "aruba_aoscx": parser.ArubaConfigParser, "mrv_optiswitch": parser.OptiswitchConfigParser, "extreme_netiron": parser.NetironConfigParser, + "paloalto_panos": parser.PaloAltoNetworksConfigParser, "mikrotik_routeros": parser.RouterOSConfigParser, } + # TODO: Once support for 3.7 is dropped, there should be a typing.TypedDict for this which should then also be used # as the return type for a bunch of the following methods. default_feature: t.Dict[str, t.Union[str, bool, None]] = { @@ -107,15 +111,6 @@ def _is_feature_ordered_compliant(feature_intended_cfg: str, feature_actual_cfg: return False -def _open_file_config(cfg_path: str) -> str: - """Open config file from local disk.""" - # This might fail, raising an IOError - with open(cfg_path, encoding="utf-8") as filehandler: - device_cfg = filehandler.read() - - return device_cfg.strip() - - def compliance( features: t.List[t.Dict[str, t.Union[str, bool, t.List[str]]]], backup: str, diff --git a/netutils/config/conversion.py b/netutils/config/conversion.py new file mode 100644 index 00000000..c23934d0 --- /dev/null +++ b/netutils/config/conversion.py @@ -0,0 +1,94 @@ +"""Configuration conversion methods for different network operating systems.""" + +import typing as t + +from netutils.config.utils import _open_file_config + +conversion_map: t.Dict[str, t.List[str]] = { + "paloalto_panos": ["paloalto_panos_brace_to_set"], +} + + +def paloalto_panos_brace_to_set(cfg: str, cfg_type: str = "file") -> str: + r"""Convert Palo Alto Brace format configuration to set format. + + Args: + cfg: Configuration as a string + cfg_type: A string that is effectively a choice between `file` and `string`. Defaults to `file`. + + Returns: + str: Converted configuration as a string. + + Examples: + >>> config = ''' + ... config { + ... mgt-config { + ... users { + ... admin { + ... phash *; + ... permissions { + ... role-based { + ... superuser yes; + ... } + ... } + ... public-key thisisasuperduperlongbase64encodedstring; + ... } + ... panadmin { + ... permissions { + ... role-based { + ... superuser yes; + ... } + ... } + ... phash passwordhash; + ... } + ... } + ... } + ... }''' + >>> paloalto_panos_brace_to_set(cfg=config, cfg_type='string') == \ + ... '''set mgt-config users admin phash * + ... set mgt-config users admin permissions role-based superuser yes + ... set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring + ... set mgt-config users panadmin permissions role-based superuser yes + ... set mgt-config users panadmin phash passwordhash''' + True + """ + stack: t.List[str] = [] + cfg_value: t.List[str] = [] + cfg_string: str = "" + + if cfg_type not in ["file", "string"]: + raise ValueError("The variable `cfg_type` must be either `file` or `string`.") + if cfg_type == "file": + cfg_list = _open_file_config(cfg).splitlines() + else: + cfg_list = cfg.splitlines() + + for i, line in enumerate(cfg_list): + line = line.strip() + if line.endswith(";") and not line.endswith('";'): + line = line.split(";", 1)[0] + line = "".join(str(s) for s in stack) + line + line = line.split("config ", 1)[1] + line = "set " + line + cfg_value.append(line.strip()) + elif line.endswith('login-banner "') or line.endswith('content "'): + _first_banner_line = "".join(str(s) for s in stack) + line + cfg_value.append("set " + _first_banner_line.split("config ", 1)[1]) + + for banner_line in cfg_list[i + 1:]: # fmt: skip + if '"' in banner_line: + banner_line = banner_line.split(";", 1)[0] + cfg_value.append(banner_line.strip()) + break + cfg_value.append(banner_line.strip()) + elif line.endswith("{"): + stack.append(line[:-1]) + elif line == "}" and len(stack) > 0: + stack.pop() + + for _l, _line in enumerate(cfg_value): + cfg_string += _line + if _l < len(cfg_value) - 1: + cfg_string += "\n" + + return cfg_string diff --git a/netutils/config/parser.py b/netutils/config/parser.py index c28515a2..2dd97a67 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -6,6 +6,7 @@ from collections import namedtuple from netutils.banner import normalise_delimiter_caret_c +from netutils.config.conversion import paloalto_panos_brace_to_set ConfigLine = namedtuple("ConfigLine", "config_line,parents") @@ -291,7 +292,7 @@ def build_config_relationship(self) -> t.List[ConfigLine]: >>> config = ( ... "interface Ethernet1/1\n" ... " vlan 10\n" - ... " no shutdown" + ... " no shutdown\n" ... "interface Ethernet1/2\n" ... " shutdown\n" ... ) @@ -300,8 +301,9 @@ def build_config_relationship(self) -> t.List[ConfigLine]: ... [ ... ConfigLine(config_line='interface Ethernet1/1', parents=()), ... ConfigLine(config_line=' vlan 10', parents=('interface Ethernet1/1',)), - ... ConfigLine(config_line=' no shutdowninterface Ethernet1/2', parents=('interface Ethernet1/1',)), - ... ConfigLine(config_line=' shutdown', parents=('interface Ethernet1/1',)) + ... ConfigLine(config_line=' no shutdown', parents=('interface Ethernet1/1',)), + ... ConfigLine(config_line='interface Ethernet1/2', parents=(),), + ... ConfigLine(config_line=' shutdown', parents=('interface Ethernet1/2',)) ... ] True """ @@ -1419,3 +1421,115 @@ def _build_banner(self, config_line: str) -> t.Optional[str]: except StopIteration: return None raise ValueError("Unable to parse banner (system note) end.") + + +class PaloAltoNetworksConfigParser(BaseSpaceConfigParser): + """Palo Alto Networks config parser.""" + + comment_chars: t.List[str] = [] + banner_start: t.List[str] = [ + 'set system login-banner "', + 'login-banner "', + 'set devices localhost.localdomain deviceconfig system login-banner "', + ] + banner_end = '"' + + def is_banner_end(self, line: str) -> bool: + """Determine if end of banner.""" + if line.endswith('"') or line.startswith('";') or line.startswith("set") or line.endswith(self.banner_end): + return True + return False + + def _build_banner(self, config_line: str) -> t.Optional[str]: + """Handle banner config lines. + + Args: + config_line: The start of the banner config. + + Returns: + The next configuration line in the configuration text or None + + Raises: + ValueError: When the parser is unable to identify the end of the Banner. + """ + self._update_config_lines(config_line) + self._current_parents += (config_line,) + banner_config = [] + for line in self.generator_config: + if not self.is_banner_end(line): + banner_config.append(line) + else: + line = normalise_delimiter_caret_c(self.banner_end, line) + banner_config.append(line.strip()) + line = "\n".join(banner_config) + if line.endswith("^C"): + banner, end, _ = line.rpartition("^C") + line = banner.rstrip() + end + self._update_config_lines(line.strip()) + self._current_parents = self._current_parents[:-1] + try: + return next(self.generator_config) + except StopIteration: + return None + + raise ValueError("Unable to parse banner end.") + + def build_config_relationship(self) -> t.List[ConfigLine]: # pylint: disable=too-many-branches + r"""Parse text of config lines and find their parents. + + Examples: + >>> config = ( + ... "set devices localhost.localdomain deviceconfig system hostname firewall1\n" + ... "set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1\n" + ... "set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2\n" + ... "set devices localhost.localdomain deviceconfig setting config rematch yes\n" + ... ) + >>> config_tree = PaloAltoNetworksConfigParser(config) + >>> config_tree.build_config_relationship() == \ + ... [ + ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig system hostname firewall1", parents=()), + ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1", parents=()), + ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", parents=()), + ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig setting config rematch yes", parents=()), + ... ] + True + """ + # assume configuration does not need conversion + _needs_conversion = False + + # if config is in palo brace format, convert to set + if self.config_lines_only is not None: + for line in self.config_lines_only: + if line.endswith("{"): + _needs_conversion = True + if _needs_conversion: + converted_config = paloalto_panos_brace_to_set(cfg=self.config, cfg_type="string") + list_config = converted_config.splitlines() + self.generator_config = (line for line in list_config) + + # build config relationships + for line in self.generator_config: + if not line[0].isspace(): + self._current_parents = () + if self.is_banner_start(line): + line = self._build_banner(line) # type: ignore + else: + previous_config = self.config_lines[-1] + self._current_parents = (previous_config.config_line,) + self.indent_level = self.get_leading_space_count(line) + if not self.is_banner_start(line): + line = self._build_nested_config(line) # type: ignore + else: + line = self._build_banner(line) # type: ignore + if line is not None and line[0].isspace(): + line = self._build_nested_config(line) # type: ignore + else: + self._current_parents = () + + if line is None: + break + elif self.is_banner_start(line): + line = self._build_banner(line) # type: ignore + + self._update_config_lines(line) + return self.config_lines diff --git a/netutils/config/utils.py b/netutils/config/utils.py new file mode 100644 index 00000000..a153d48a --- /dev/null +++ b/netutils/config/utils.py @@ -0,0 +1,10 @@ +"""Utility functions for working with device configurations.""" + + +def _open_file_config(cfg_path: str) -> str: + """Open config file from local disk.""" + # This might fail, raising an IOError + with open(cfg_path, encoding="utf-8") as filehandler: + device_cfg = filehandler.read() + + return device_cfg.strip() diff --git a/netutils/utils.py b/netutils/utils.py index 993f6c99..338731af 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -76,6 +76,7 @@ "uptime_seconds_to_string": "time.uptime_seconds_to_string", "uptime_string_to_seconds": "time.uptime_string_to_seconds", "get_napalm_getters": "lib_helpers.get_napalm_getters", + "paloalto_panos_brace_to_set": "config.conversion.paloalto_panos_brace_to_set", "get_upgrade_path": "os_version.get_upgrade_path", } diff --git a/poetry.lock b/poetry.lock old mode 100755 new mode 100644 diff --git a/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_backup.txt b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_backup.txt new file mode 100644 index 00000000..9f68533d --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_backup.txt @@ -0,0 +1,32 @@ +set deviceconfig system ip-address 10.1.1.2 +set deviceconfig system netmask 255.255.255.0 +set deviceconfig system update-server updates.paloaltonetworks.com +set deviceconfig system update-schedule threats recurring sync-to-peer yes +set deviceconfig system update-schedule threats recurring daily at 01:30 +set deviceconfig system update-schedule threats recurring daily disable-new-content no +set deviceconfig system update-schedule threats recurring daily action download-and-install +set deviceconfig system update-schedule threats recurring threshold 24 +set deviceconfig system update-schedule threats recurring new-app-threshold 240 +set deviceconfig system update-schedule global-protect-datafile recurring weekly at 02:00 +set deviceconfig system update-schedule global-protect-datafile recurring weekly day-of-week tuesday +set deviceconfig system update-schedule wildfire recurring every-15-mins at 5 +set deviceconfig system update-schedule wildfire recurring every-15-mins action download-and-install +set deviceconfig system update-schedule wildfire recurring every-15-mins sync-to-peer yes +set deviceconfig system update-schedule anti-virus recurring sync-to-peer yes +set deviceconfig system update-schedule anti-virus recurring daily at 03:30 +set deviceconfig system update-schedule anti-virus recurring daily action download-and-install +set deviceconfig system timezone America/New_York +set deviceconfig system service disable-telnet yes +set deviceconfig system service disable-http yes +set deviceconfig system service disable-snmp no +set deviceconfig system snmp-setting snmp-system +set deviceconfig system hostname firewall1 +set deviceconfig system default-gateway 10.1.1.1 +set deviceconfig system dns-setting servers primary 10.1.1.3 +set deviceconfig system dns-setting servers secondary 10.1.1.4 +set deviceconfig system permitted-ip 0.0.0.0/0 +set deviceconfig system domain example.com +set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1 +set mgt-config users readonly phash passhash +set mgt-config users user1 permissions role-based superuser yes +set mgt-config users user1 phash passhash diff --git a/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_feature.py b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_feature.py new file mode 100644 index 00000000..077595c5 --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_feature.py @@ -0,0 +1,3 @@ +features = [ + {"name": "management", "ordered": False, "section": ["set mgt-config "]}, +] diff --git a/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_intended.txt b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_intended.txt new file mode 100644 index 00000000..9f68533d --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_intended.txt @@ -0,0 +1,32 @@ +set deviceconfig system ip-address 10.1.1.2 +set deviceconfig system netmask 255.255.255.0 +set deviceconfig system update-server updates.paloaltonetworks.com +set deviceconfig system update-schedule threats recurring sync-to-peer yes +set deviceconfig system update-schedule threats recurring daily at 01:30 +set deviceconfig system update-schedule threats recurring daily disable-new-content no +set deviceconfig system update-schedule threats recurring daily action download-and-install +set deviceconfig system update-schedule threats recurring threshold 24 +set deviceconfig system update-schedule threats recurring new-app-threshold 240 +set deviceconfig system update-schedule global-protect-datafile recurring weekly at 02:00 +set deviceconfig system update-schedule global-protect-datafile recurring weekly day-of-week tuesday +set deviceconfig system update-schedule wildfire recurring every-15-mins at 5 +set deviceconfig system update-schedule wildfire recurring every-15-mins action download-and-install +set deviceconfig system update-schedule wildfire recurring every-15-mins sync-to-peer yes +set deviceconfig system update-schedule anti-virus recurring sync-to-peer yes +set deviceconfig system update-schedule anti-virus recurring daily at 03:30 +set deviceconfig system update-schedule anti-virus recurring daily action download-and-install +set deviceconfig system timezone America/New_York +set deviceconfig system service disable-telnet yes +set deviceconfig system service disable-http yes +set deviceconfig system service disable-snmp no +set deviceconfig system snmp-setting snmp-system +set deviceconfig system hostname firewall1 +set deviceconfig system default-gateway 10.1.1.1 +set deviceconfig system dns-setting servers primary 10.1.1.3 +set deviceconfig system dns-setting servers secondary 10.1.1.4 +set deviceconfig system permitted-ip 0.0.0.0/0 +set deviceconfig system domain example.com +set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1 +set mgt-config users readonly phash passhash +set mgt-config users user1 permissions role-based superuser yes +set mgt-config users user1 phash passhash diff --git a/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_received.json b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_received.json new file mode 100644 index 00000000..b9561ada --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/paloalto_panos/paloalto_received.json @@ -0,0 +1,12 @@ +{ + "management": { + "actual": "set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1\nset mgt-config users readonly phash passhash\nset mgt-config users user1 permissions role-based superuser yes\nset mgt-config users user1 phash passhash", + "cannot_parse": true, + "compliant": true, + "extra": "", + "intended": "set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1\nset mgt-config users readonly phash passhash\nset mgt-config users user1 permissions role-based superuser yes\nset mgt-config users user1 phash passhash", + "missing": "", + "ordered_compliant": true, + "unordered_compliant": true + } +} \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_feature.py b/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_feature.py new file mode 100644 index 00000000..8ed81287 --- /dev/null +++ b/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_feature.py @@ -0,0 +1,8 @@ +features = [ + {"name": "Management Config", "ordered": False, "section": ["set mgt-config "]}, + { + "name": "Panorama Config", + "ordered": True, + "section": ["set deviceconfig system service "], + }, +] diff --git a/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_received.json b/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_received.json new file mode 100644 index 00000000..7eba41ab --- /dev/null +++ b/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_received.json @@ -0,0 +1,4 @@ +{ + "remaining_cfg": "set deviceconfig system permitted-ip 0.0.0.0/0\nset deviceconfig system domain example.com", + "section_not_found": [] +} \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_sent.txt b/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_sent.txt new file mode 100644 index 00000000..0c0b1e01 --- /dev/null +++ b/tests/unit/mock/config/compliance/config_section_not_parsed/paloalto_panos/panos_sent.txt @@ -0,0 +1,9 @@ +set deviceconfig system permitted-ip 0.0.0.0/0 +set deviceconfig system domain example.com +set deviceconfig system service disable-telnet yes +set deviceconfig system service disable-http yes +set deviceconfig system service disable-snmp no +set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1 +set mgt-config users readonly phash passhash +set mgt-config users user1 permissions role-based superuser yes +set mgt-config users user1 phash passhash diff --git a/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_base.txt b/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_base.txt new file mode 100644 index 00000000..2f6bf8a1 --- /dev/null +++ b/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_base.txt @@ -0,0 +1,9 @@ +set deviceconfig system permitted-ip 0.0.0.0/0 +set deviceconfig system domain example.com +set deviceconfig system service disable-telnet yes +set deviceconfig system service disable-http yes +set deviceconfig system service disable-snmp no +set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1 +set mgt-config users readonly phash passhash +set mgt-config users user1 permissions role-based superuser yes +set mgt-config users user1 phash passhash \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_intended.txt b/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_intended.txt new file mode 100644 index 00000000..cd5380a8 --- /dev/null +++ b/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_intended.txt @@ -0,0 +1,9 @@ +set deviceconfig system permitted-ip 10.0.0.0/8 +set deviceconfig system domain example.com +set deviceconfig system service disable-telnet yes +set deviceconfig system service disable-http yes +set deviceconfig system service disable-snmp no +set mgt-config users readonly permissions role-based vsysreader localhost.localdomain vsys vsys1 +set mgt-config users readonly phash passhash +set mgt-config users user1 permissions role-based superuser yes +set mgt-config users user1 phash passhash diff --git a/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_received.txt b/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_received.txt new file mode 100644 index 00000000..75626b05 --- /dev/null +++ b/tests/unit/mock/config/compliance/diff_network_config/paloalto_panos/panos_basic_received.txt @@ -0,0 +1 @@ +set deviceconfig system permitted-ip 10.0.0.0/8 \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py new file mode 100644 index 00000000..eca41c1e --- /dev/null +++ b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py @@ -0,0 +1,5 @@ +feature = { + "name": "many", + "ordered": True, + "section": ["set mgt-config", "set devices localhost.localdomain deviceconfig system panorama"], +} diff --git a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt new file mode 100644 index 00000000..689687a8 --- /dev/null +++ b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt @@ -0,0 +1,7 @@ +set mgt-config users admin phash * +set mgt-config users admin permissions role-based superuser yes +set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring +set mgt-config users panadmin permissions role-based superuser yes +set mgt-config users panadmin phash passwordhash +set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1 +set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt new file mode 100644 index 00000000..85be77fa --- /dev/null +++ b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt @@ -0,0 +1,21 @@ +set mgt-config users admin phash * +set mgt-config users admin permissions role-based superuser yes +set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring +set mgt-config users panadmin permissions role-based superuser yes +set mgt-config users panadmin phash passwordhash +set devices localhost.localdomain deviceconfig system hostname firewall1 +set devices localhost.localdomain deviceconfig system login-banner " +************************************************************************ +* firewall1.example.com * [PROD VM500 firewalls] +************************************************************************ +* WARNING * +* Unauthorized access to this device or devices attached to * +* or accessible from this network is strictly prohibited. * +* Possession of passwords or devices enabling access to this * +* device or devices does not constitute authorization. Unauthorized * +* access will be prosecuted to the fullest extent of the law. * +* * +************************************************************************ +" +set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1 +set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file diff --git a/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt b/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt new file mode 100644 index 00000000..621a4782 --- /dev/null +++ b/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt @@ -0,0 +1,22 @@ +set mgt-config users admin phash * +set mgt-config users admin permissions role-based superuser yes +set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring +set mgt-config users panadmin permissions role-based superuser yes +set mgt-config users panadmin phash passwordhash +set devices localhost.localdomain deviceconfig system hostname firewall1 +set devices localhost.localdomain deviceconfig system login-banner " +************************************************************************ +* firewall1.example.com * [PROD VM500 firewalls] +************************************************************************ +* WARNING * +* Unauthorized access to this device or devices attached to * +* or accessible from this network is strictly prohibited. * +* Possession of passwords or devices enabling access to this * +* device or devices does not constitute authorization. Unauthorized * +* access will be prosecuted to the fullest extent of the law. * +* * +************************************************************************ + +" +set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1 +set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file diff --git a/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_sent.txt b/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_sent.txt new file mode 100644 index 00000000..92c2cd4d --- /dev/null +++ b/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_sent.txt @@ -0,0 +1,51 @@ +config { + mgt-config { + users { + admin { + phash *; + permissions { + role-based { + superuser yes; + } + } + public-key thisisasuperduperlongbase64encodedstring; + } + panadmin { + permissions { + role-based { + superuser yes; + } + } + phash passwordhash; + } + } + } + devices { + localhost.localdomain { + deviceconfig { + system { + hostname firewall1; + login-banner " +************************************************************************ +* firewall1.example.com * [PROD VM500 firewalls] +************************************************************************ +* WARNING * +* Unauthorized access to this device or devices attached to * +* or accessible from this network is strictly prohibited. * +* Possession of passwords or devices enabling access to this * +* device or devices does not constitute authorization. Unauthorized * +* access will be prosecuted to the fullest extent of the law. * +* * +************************************************************************ + +"; + panorama { + local-panorama { + panorama-server 10.0.0.1; + panorama-server-2 10.0.0.2; + } + } + } + } + } +} \ No newline at end of file diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py new file mode 100644 index 00000000..ef05a972 --- /dev/null +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py @@ -0,0 +1,44 @@ +from netutils.config.parser import ConfigLine + +data = [ + ConfigLine( + config_line="set mgt-config users admin phash *", + parents=(), + ), + ConfigLine( + config_line="set mgt-config users admin permissions role-based superuser yes", + parents=(), + ), + ConfigLine( + config_line="set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring", + parents=(), + ), + ConfigLine( + config_line="set mgt-config users panadmin permissions role-based superuser yes", + parents=(), + ), + ConfigLine( + config_line="set mgt-config users panadmin phash passwordhash", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system hostname firewall1", + parents=(), + ), + ConfigLine( + config_line='set devices localhost.localdomain deviceconfig system login-banner "', + parents=(), + ), + ConfigLine( + config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************^C", + parents=('set devices localhost.localdomain deviceconfig system login-banner "',), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", + parents=(), + ), +] diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_sent.txt b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_sent.txt new file mode 100644 index 00000000..5ec0f93b --- /dev/null +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_sent.txt @@ -0,0 +1,52 @@ +config { + mgt-config { + users { + admin { + phash *; + permissions { + role-based { + superuser yes; + } + } + public-key thisisasuperduperlongbase64encodedstring; + } + panadmin { + permissions { + role-based { + superuser yes; + } + } + phash passwordhash; + } + } + } + devices { + localhost.localdomain { + deviceconfig { + system { + hostname firewall1; + login-banner " +************************************************************************ +* firewall1.example.com * [PROD VM500 firewalls] +************************************************************************ +* WARNING * +* Unauthorized access to this device or devices attached to * +* or accessible from this network is strictly prohibited. * +* Possession of passwords or devices enabling access to this * +* device or devices does not constitute authorization. Unauthorized * +* access will be prosecuted to the fullest extent of the law. * +* * +************************************************************************ + +"; + panorama { + local-panorama { + panorama-server 10.0.0.1; + panorama-server-2 10.0.0.2; + } + } + } + } + } +} + diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py new file mode 100644 index 00000000..923742d1 --- /dev/null +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py @@ -0,0 +1,340 @@ +from netutils.config.parser import ConfigLine + +data = [ + ConfigLine(config_line="set mgt-config users admin phash *", parents=()), + ConfigLine(config_line="set mgt-config users admin permissions role-based superuser yes", parents=()), + ConfigLine( + config_line="set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring=", parents=() + ), + ConfigLine(config_line="set mgt-config users panadmin permissions role-based superuser yes", parents=()), + ConfigLine(config_line="set mgt-config users panadmin phash passwordhash", parents=()), + ConfigLine(config_line="set shared botnet configuration http dynamic-dns enabled yes", parents=()), + ConfigLine(config_line="set shared botnet configuration http dynamic-dns threshold 5", parents=()), + ConfigLine(config_line="set shared botnet configuration http malware-sites enabled yes", parents=()), + ConfigLine(config_line="set shared botnet configuration http malware-sites threshold 5", parents=()), + ConfigLine(config_line="set shared botnet configuration http recent-domains enabled yes", parents=()), + ConfigLine(config_line="set shared botnet configuration http recent-domains threshold 5", parents=()), + ConfigLine(config_line="set shared botnet configuration http ip-domains enabled yes", parents=()), + ConfigLine(config_line="set shared botnet configuration http ip-domains threshold 10", parents=()), + ConfigLine( + config_line="set shared botnet configuration http executables-from-unknown-sites enabled yes", parents=() + ), + ConfigLine( + config_line="set shared botnet configuration http executables-from-unknown-sites threshold 5", parents=() + ), + ConfigLine(config_line="set shared botnet configuration other-applications irc yes", parents=()), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-tcp destinations-per-hour 10", + parents=(), + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-tcp sessions-per-hour 10", parents=() + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-tcp session-length maximum-bytes 100", + parents=(), + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-tcp session-length minimum-bytes 50", + parents=(), + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-udp destinations-per-hour 10", + parents=(), + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-udp sessions-per-hour 10", parents=() + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-udp session-length maximum-bytes 100", + parents=(), + ), + ConfigLine( + config_line="set shared botnet configuration unknown-applications unknown-udp session-length minimum-bytes 50", + parents=(), + ), + ConfigLine(config_line="set shared botnet report topn 100", parents=()), + ConfigLine(config_line="set shared botnet report scheduled yes", parents=()), + ConfigLine(config_line="set shared application-status awesun", parents=()), + ConfigLine(config_line="set shared application-status hikvision-http", parents=()), + ConfigLine(config_line="set shared application-status notion-base", parents=()), + ConfigLine(config_line="set shared application-status notion-delete", parents=()), + ConfigLine(config_line="set shared application-status notion-download", parents=()), + ConfigLine(config_line="set shared application-status notion-logout", parents=()), + ConfigLine(config_line="set shared application-status notion-upload", parents=()), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 ipv6 neighbor-discovery router-advertisement enable no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 ndp-proxy enabled no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 dhcp-client create-default-route yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 lldp enable no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 ipv6 neighbor-discovery router-advertisement enable no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 ndp-proxy enabled no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 dhcp-client create-default-route no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 lldp enable no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 interface-management-profile mgt", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 link-state auto", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network profiles monitor-profile default interval 3", parents=() + ), + ConfigLine( + config_line="set devices localhost.localdomain network profiles monitor-profile default threshold 5", parents=() + ), + ConfigLine( + config_line="set devices localhost.localdomain network profiles monitor-profile default action wait-recover", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network profiles interface-management-profile", parents=() + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default encryption [ aes-128-cbc 3des]", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default hash sha1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default dh-group group2", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default lifetime hours 8", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 encryption aes-128-cbc", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 hash sha256", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 dh-group group19", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 lifetime hours 8", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 encryption aes-256-cbc", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 hash sha384", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 dh-group group20", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 lifetime hours 8", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default esp encryption [ aes-128-cbc 3des]", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default esp authentication sha1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default dh-group group2", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default lifetime hours 1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 esp encryption aes-128-gcm", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 esp authentication none", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 dh-group group19", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 lifetime hours 1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 esp encryption aes-256-gcm", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 esp authentication none", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 dh-group group20", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 lifetime hours 1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles global-protect-app-crypto-profiles default encryption aes-128-cbc", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network ike crypto-profiles global-protect-app-crypto-profiles default authentication sha1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class1 priority real-time", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class2 priority high", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class3 priority high", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class4 priority medium", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class5 priority medium", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class6 priority low", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class7 priority low", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class8 priority low", + parents=(), + ), + ConfigLine(config_line="set devices localhost.localdomain network virtual-router", parents=()), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system type dhcp-client send-hostname yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system type dhcp-client send-client-id yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system type dhcp-client accept-dhcp-hostname no", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system type dhcp-client accept-dhcp-domain yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system update-server updates.paloaltonetworks.com", + parents=(), + ), + ConfigLine(config_line="set devices localhost.localdomain deviceconfig system update-schedule", parents=()), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system service disable-telnet yes", parents=() + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system service disable-http yes", parents=() + ), + ConfigLine(config_line="set devices localhost.localdomain deviceconfig system hostname firewall1", parents=()), + ConfigLine(config_line='set devices localhost.localdomain deviceconfig system login-banner "', parents=()), + ConfigLine( + config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************^C", + parents=('set devices localhost.localdomain deviceconfig system login-banner "',), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", + parents=(), + ), + ConfigLine(config_line="set devices localhost.localdomain deviceconfig setting config rematch yes", parents=()), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management hostname-type-in-syslog FQDN", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg public-key thisisasuperduperlongbase64encodedstring=", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client send-hostname yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client send-client-id yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client accept-dhcp-hostname yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client accept-dhcp-domain yes", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg dns-primary 8.8.8.8", + parents=(), + ), + ConfigLine( + config_line="set devices localhost.localdomain deviceconfig setting management initcfg op-command-modes mgmt-interface-swap", + parents=(), + ), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 zone", parents=()), + ConfigLine( + config_line="set devices localhost.localdomain vsys vsys1 import network interface [ ethernet1/1 ethernet1/2 vlan loopback tunnel]", + parents=(), + ), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 import network vlan", parents=()), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 import network virtual-router", parents=()), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 import network virtual-wire", parents=()), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 address", parents=()), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 rulebase security rules", parents=()), + ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 service", parents=()), +] diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_sent.txt b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_sent.txt new file mode 100644 index 00000000..c62e1ada --- /dev/null +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_sent.txt @@ -0,0 +1,333 @@ + +config { + mgt-config { + users { + admin { + phash *; + permissions { + role-based { + superuser yes; + } + } + public-key thisisasuperduperlongbase64encodedstring=; + } + panadmin { + permissions { + role-based { + superuser yes; + } + } + phash passwordhash; + } + } + } + shared { + botnet { + configuration { + http { + dynamic-dns { + enabled yes; + threshold 5; + } + malware-sites { + enabled yes; + threshold 5; + } + recent-domains { + enabled yes; + threshold 5; + } + ip-domains { + enabled yes; + threshold 10; + } + executables-from-unknown-sites { + enabled yes; + threshold 5; + } + } + other-applications { + irc yes; + } + unknown-applications { + unknown-tcp { + destinations-per-hour 10; + sessions-per-hour 10; + session-length { + maximum-bytes 100; + minimum-bytes 50; + } + } + unknown-udp { + destinations-per-hour 10; + sessions-per-hour 10; + session-length { + maximum-bytes 100; + minimum-bytes 50; + } + } + } + } + report { + topn 100; + scheduled yes; + } + } + application-status { + awesun; + hikvision-http; + notion-base; + notion-delete; + notion-download; + notion-logout; + notion-upload; + } + } + devices { + localhost.localdomain { + network { + interface { + ethernet { + ethernet1/1 { + layer3 { + ipv6 { + neighbor-discovery { + router-advertisement { + enable no; + } + } + } + ndp-proxy { + enabled no; + } + dhcp-client { + create-default-route yes; + } + lldp { + enable no; + } + } + } + ethernet1/2 { + layer3 { + ipv6 { + neighbor-discovery { + router-advertisement { + enable no; + } + } + } + ndp-proxy { + enabled no; + } + dhcp-client { + create-default-route no; + } + lldp { + enable no; + } + interface-management-profile mgt; + } + link-state auto; + } + } + } + profiles { + monitor-profile { + default { + interval 3; + threshold 5; + action wait-recover; + } + } + interface-management-profile; + } + ike { + crypto-profiles { + ike-crypto-profiles { + default { + encryption [ aes-128-cbc 3des]; + hash sha1; + dh-group group2; + lifetime { + hours 8; + } + } + Suite-B-GCM-128 { + encryption aes-128-cbc; + hash sha256; + dh-group group19; + lifetime { + hours 8; + } + } + Suite-B-GCM-256 { + encryption aes-256-cbc; + hash sha384; + dh-group group20; + lifetime { + hours 8; + } + } + } + ipsec-crypto-profiles { + default { + esp { + encryption [ aes-128-cbc 3des]; + authentication sha1; + } + dh-group group2; + lifetime { + hours 1; + } + } + Suite-B-GCM-128 { + esp { + encryption aes-128-gcm; + authentication none; + } + dh-group group19; + lifetime { + hours 1; + } + } + Suite-B-GCM-256 { + esp { + encryption aes-256-gcm; + authentication none; + } + dh-group group20; + lifetime { + hours 1; + } + } + } + global-protect-app-crypto-profiles { + default { + encryption aes-128-cbc; + authentication sha1; + } + } + } + } + qos { + profile { + default { + class-bandwidth-type { + mbps { + class { + class1 { + priority real-time; + } + class2 { + priority high; + } + class3 { + priority high; + } + class4 { + priority medium; + } + class5 { + priority medium; + } + class6 { + priority low; + } + class7 { + priority low; + } + class8 { + priority low; + } + } + } + } + } + } + } + virtual-router; + } + deviceconfig { + system { + type { + dhcp-client { + send-hostname yes; + send-client-id yes; + accept-dhcp-hostname no; + accept-dhcp-domain yes; + } + } + update-server updates.paloaltonetworks.com; + update-schedule; + service { + disable-telnet yes; + disable-http yes; + } + hostname firewall1; + login-banner " +************************************************************************ +* firewall1.example.com * [PROD VM500 firewalls] +************************************************************************ +* WARNING * +* Unauthorized access to this device or devices attached to * +* or accessible from this network is strictly prohibited. * +* Possession of passwords or devices enabling access to this * +* device or devices does not constitute authorization. Unauthorized * +* access will be prosecuted to the fullest extent of the law. * +* * +************************************************************************ + +"; + panorama { + local-panorama { + panorama-server 10.0.0.1; + panorama-server-2 10.0.0.2; + } + } + } + setting { + config { + rematch yes; + } + management { + hostname-type-in-syslog FQDN; + initcfg { + public-key thisisasuperduperlongbase64encodedstring=; + type { + dhcp-client { + send-hostname yes; + send-client-id yes; + accept-dhcp-hostname yes; + accept-dhcp-domain yes; + } + } + dns-primary 8.8.8.8; + op-command-modes mgmt-interface-swap; + } + } + } + } + vsys { + vsys1 { + zone; + import { + network { + interface [ ethernet1/1 ethernet1/2 vlan loopback tunnel]; + vlan; + virtual-router; + virtual-wire; + } + } + address; + rulebase { + security { + rules; + } + } + service; + } + } + } + } +} diff --git a/tests/unit/test_conversion.py b/tests/unit/test_conversion.py new file mode 100644 index 00000000..48960811 --- /dev/null +++ b/tests/unit/test_conversion.py @@ -0,0 +1,30 @@ +"""Test that configurations properly convert from undesired format to desired""" +import glob +import os + +import pytest +from netutils.config.conversion import ( + paloalto_panos_brace_to_set, + conversion_map, +) + +MOCK_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "mock", "config", "conversion") + +TXT_FILE = "_sent.txt" +CONVERTED_FILE = "_converted.txt" + +conversion_files = [] + +for network_os in list(conversion_map.keys()): + for _file in glob.glob(f"{MOCK_DIR}/{network_os}/*{TXT_FILE}"): + conversion_files.append([_file, network_os]) + + +@pytest.mark.parametrize("_file", conversion_files) +def test_config_conversion(_file, get_text_data): # pylint: disable=redefined-outer-name + truncate_file = os.path.join(MOCK_DIR, _file[0][: -len(TXT_FILE)]) + + sent_cfg = get_text_data(os.path.join(MOCK_DIR, _file[0])) + converted_cfg = paloalto_panos_brace_to_set(cfg=sent_cfg, cfg_type="string") + received_data = get_text_data(truncate_file + "_converted.txt") + assert converted_cfg == received_data From 4595be5736e6e8ccae7a99013f45f39454ed142e Mon Sep 17 00:00:00 2001 From: pvillar_netdev Date: Tue, 27 Jun 2023 14:48:40 +0200 Subject: [PATCH 25/37] HIERCONFIG: Lib mappings (#304) * modified: netutils/lib_mapper.py * Update hierconfig.md * Update hierconfig_reverse.md * Update lib_mapper.py * Update lib_mapper.py * modified: docs/user/lib_mapper/hierconfig.md modified: docs/user/lib_mapper/hierconfig_reverse.md --- docs/user/lib_mapper/hierconfig.md | 1 + docs/user/lib_mapper/hierconfig_reverse.md | 3 ++- netutils/lib_mapper.py | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/user/lib_mapper/hierconfig.md b/docs/user/lib_mapper/hierconfig.md index 32eb8cff..24ebb3e9 100644 --- a/docs/user/lib_mapper/hierconfig.md +++ b/docs/user/lib_mapper/hierconfig.md @@ -1,6 +1,7 @@ | HIERCONFIG | | NORMALIZED | | ---------- | -- | ------ | | eos | → | arista_eos | +| fastiron | → | ruckus_fastiron | | ios | → | cisco_ios | | iosxe | → | cisco_xe | | iosxr | → | cisco_xr | diff --git a/docs/user/lib_mapper/hierconfig_reverse.md b/docs/user/lib_mapper/hierconfig_reverse.md index 2aaa2afe..e0d18b83 100644 --- a/docs/user/lib_mapper/hierconfig_reverse.md +++ b/docs/user/lib_mapper/hierconfig_reverse.md @@ -4,4 +4,5 @@ | cisco_ios | → | ios | | cisco_nxos | → | nxos | | cisco_xe | → | iosxe | -| cisco_xr | → | iosxr | \ No newline at end of file +| cisco_xr | → | iosxr | +| ruckus_fastiron | → | fastiron | \ No newline at end of file diff --git a/netutils/lib_mapper.py b/netutils/lib_mapper.py index 0813eb5d..076deaff 100644 --- a/netutils/lib_mapper.py +++ b/netutils/lib_mapper.py @@ -209,6 +209,7 @@ "iosxr": "cisco_xr", "nxos": "cisco_nxos", "eos": "arista_eos", + "fastiron": "ruckus_fastiron", } NAPALM_LIB_MAPPER_REVERSE = { @@ -293,6 +294,7 @@ "cisco_xr": "iosxr", "cisco_nxos": "nxos", "arista_eos": "eos", + "ruckus_fastiron": "fastiron", } # Deep copy the reverse, where there is no actual translation happening. From c8bd1c410cb33af82a12a939fdd2819f1e65c0ea Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Tue, 27 Jun 2023 10:28:04 -0400 Subject: [PATCH 26/37] Enable OS Version docs (#305) --- docs/dev/code_reference/os_version.md | 5 +++++ mkdocs.yml | 1 + 2 files changed, 6 insertions(+) create mode 100644 docs/dev/code_reference/os_version.md diff --git a/docs/dev/code_reference/os_version.md b/docs/dev/code_reference/os_version.md new file mode 100644 index 00000000..268e7da3 --- /dev/null +++ b/docs/dev/code_reference/os_version.md @@ -0,0 +1,5 @@ +# OS Version + +::: netutils.os_version + options: + show_submodules: True \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 87cd36c0..b8d0a7d5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -134,6 +134,7 @@ nav: - Library Helpers: "dev/code_reference/lib_helpers.md" - Library Mapping: "dev/code_reference/lib_mapping.md" - Mac Address: "dev/code_reference/mac.md" + - OS Version: "dev/code_reference/os_version.md" - Password: "dev/code_reference/password.md" - Ping: "dev/code_reference/ping.md" - Protocol Mapper: "dev/code_reference/protocol_mapper.md" From 39d5ee90345f35a8197e2a313831f695a92ee36f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 3 Jul 2023 07:41:47 -0600 Subject: [PATCH 27/37] Flat: latest data (2023-06-29T08:06:17.079Z) (#307) { "date": "2023-06-29T08:06:17.079Z", "files": [ { "name": "netutils/data_files/protocol_mappings.py", "deltaBytes": 65, "source": "https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv" } ] } Co-authored-by: flat-data --- netutils/data_files/protocol_mappings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netutils/data_files/protocol_mappings.py b/netutils/data_files/protocol_mappings.py index 13f990e8..db2f701b 100644 --- a/netutils/data_files/protocol_mappings.py +++ b/netutils/data_files/protocol_mappings.py @@ -5860,6 +5860,7 @@ "dsmcc-download": {"port_number": 13821, "protocols": ["tcp", "udp"]}, "dsmcc-ccp": {"port_number": 13822, "protocols": ["tcp", "udp"]}, "bmdss": {"port_number": 13823, "protocols": ["tcp"]}, + "a-trust-rpc": {"port_number": 13832, "protocols": ["tcp"]}, "ucontrol": {"port_number": 13894, "protocols": ["tcp", "udp"]}, "dta-systems": {"port_number": 13929, "protocols": ["tcp", "udp"]}, "medevolve": {"port_number": 13930, "protocols": ["tcp"]}, From 3a52f026be961ef5ffc471a50211eaea9cd75021 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 3 Jul 2023 07:42:12 -0600 Subject: [PATCH 28/37] Flat: latest data (2023-06-29T08:03:20.700Z) (#306) { "date": "2023-06-29T08:03:20.700Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 5848, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 154 ++++++++++++++++++++++++++-- 1 file changed, 147 insertions(+), 7 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 6022adef..258ab3cb 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -613,7 +613,7 @@ "000260": "Accordion Networks, Inc.", "000261": "Tilgin AB", "000262": "Soyo Group Soyo Com Tech Co., Ltd", - "000263": "UPS Manufacturing SRL", + "000263": "RPS S.p.A.", "000264": "AudioRamp.com", "000265": "Virditech Co. Ltd.", "000266": "Thermalogic Corporation", @@ -10410,7 +10410,7 @@ "00409b": "HAL COMPUTER SYSTEMS INC.", "00409c": "TRANSWARE", "00409d": "DigiBoard", - "00409e": "CONCURRENT TECHNOLOGIES LTD.", + "00409e": "Concurrent Technologies Ltd.", "00409f": "Telco Systems, Inc. ", "0040a0": "GOLDSTAR CO., LTD.", "0040a1": "ERGO COMPUTING", @@ -12994,7 +12994,7 @@ "0434f6": "Mobility Technologies Communication Co., Ltd.", "043604": "Gyeyoung I&T", "0436b8": "I&C Technology", - "043855": "SCOPUS INTERNATIONAL-BELGIUM", + "043855": "Scopus International Pvt. Ltd.", "0438dc": "China Unicom Online Information Technology Co.,Ltd", "043926": "China Dragon Technology Limited", "043a0d": "SM Optics S.r.l.", @@ -13040,6 +13040,7 @@ "0456e5": "Intel Corporate", "04572f": "Sertel Electronics UK Ltd", "045747": "GoPro", + "045791": "Shenzhenshi Xinzhongxin Technology Co.Ltd", "04586f": "Sichuan Whayer information industry Co.,LTD", "045a95": "Nokia Corporation", "045c06": "Zmodo Technology Corporation", @@ -13138,6 +13139,7 @@ "04a741": "Cisco Systems, Inc", "04a81c": "HUAWEI TECHNOLOGIES CO.,LTD", "04a82a": "Nokia Corporation", + "04a959": "New H3C Technologies Co., Ltd", "04aae1": "BEIJING MICROVISION TECHNOLOGY CO.,LTD", "04ab08": "Shenzhen Skyworth Digital Technology CO., Ltd", "04ab18": "ELECOM CO.,LTD.", @@ -13198,6 +13200,7 @@ "04cf4b": "Intel Corporate", "04cf8c": "XIAOMI Electronics,CO.,LTD", "04d13a": "Xiaomi Communications Co Ltd", + "04d168": "Sunplus Technology Co., Ltd.", "04d16e": "IEEE Registration Authority", "04d320": "ITEL MOBILE LIMITED", "04d395": "Motorola Mobility LLC, a Lenovo Company", @@ -13268,7 +13271,7 @@ "04f993": "Infinix mobility limited", "04f9d9": "Co.,Ltd", "04f9f8": "TP-LINK TECHNOLOGIES CO.,LTD.", - "04fa3f": "Opticore Inc.", + "04fa3f": "OptiCore Inc.", "04fa83": "Qingdao Haier Technology Co.,Ltd", "04fe31": "Samsung Electronics Co.,Ltd", "04fe7f": "Cisco Systems, Inc", @@ -13577,6 +13580,7 @@ "087999": "AIM GmbH", "087a4c": "HUAWEI TECHNOLOGIES CO.,LTD", "087b12": "Sagemcom Broadband SAS", + "087b87": "Cisco Systems, Inc", "087baa": "SVYAZKOMPLEKTSERVICE, LLC", "087c39": "Amazon Technologies Inc.", "087cbe": "Quintic Corp.", @@ -13841,6 +13845,7 @@ "0c62a6": "Hui Zhou Gaoshengda Technology Co.,LTD", "0c63fc": "Nanjing Signway Technology Co., Ltd", "0c6422": "Beijing Wiseasy Technology Co.,Ltd.", + "0c659a": "Panasonic Automotive Systems Company of America", "0c6714": "TECHNOLOGIES CORPORATION", "0c6803": "Cisco Systems, Inc", "0c6abc": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -13956,6 +13961,7 @@ "0cb8e8": "Sdn. Bhd.", "0cb912": "JM-DATA GmbH", "0cb937": "Ubee Interactive Co., Limited", + "0cb983": "Honor Device Co., Ltd.", "0cbc9f": "Apple, Inc.", "0cbd51": "TCT mobile ltd", "0cbd75": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -14101,6 +14107,7 @@ "1027f5": "TP-Link Corporation Limited", "102831": "Morion Inc.", "102834": "SALZ Automation GmbH", + "102874": "Shenzhen Jingxun Technology Co., Ltd.", "102959": "Apple, Inc.", "1029ab": "Samsung Electronics Co.,Ltd", "102ab3": "Xiaomi Communications Co Ltd", @@ -14881,6 +14888,7 @@ "187caa": "China Mobile Group Device Co.,Ltd.", "187eb9": "Apple, Inc.", "187ed5": "shenzhen kaism technology Co. Ltd", + "188025": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "188090": "Cisco Systems, Inc", "1880ce": "Barberry Solutions Ltd", "1880f5": "Alcatel-Lucent Shanghai Bell Co., Ltd", @@ -14970,6 +14978,7 @@ "18bf1c": "Jiangsu Huitong Group Co.,Ltd.", "18bfb3": "Samsung Electronics Co., Ltd., Memory Division", "18c007": "Huawei Device Co., Ltd.", + "18c009": "New H3C Technologies Co., Ltd", "18c04d": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "18c086": "Broadcom", "18c19d": "Sdn. Bhd.", @@ -15181,6 +15190,7 @@ "1c5ee6": "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.", "1c5f2b": "D-Link International", "1c5fff": "Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch", + "1c6066": "TEJAS NETWORKS LTD", "1c60d2": "Fiberhome Telecommunication Technologies Co.,LTD", "1c60de": "MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", "1c61b4": "TP-Link Corporation Limited", @@ -16168,12 +16178,14 @@ "288915": "CashGuard Sverige AB", "288a1c": "Juniper Networks", "288cb8": "zte corporation", + "288eb9": "Wacom Co.,Ltd.", "288eec": "Apple, Inc.", "288ff6": "Apple, Inc.", "2891d0": "Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH", "28924a": "Hewlett Packard", "28937d": "Sichuan Tianyi Comheart Telecom Co.,LTD", "2893fe": "Cisco Systems, Inc", + "289401": "NETGEAR", "28940f": "Cisco Systems, Inc", "2894af": "Samhwa Telecom", "2897b8": "myenergi Ltd", @@ -16220,6 +16232,7 @@ "28ba18": "NextNav, LLC", "28bab5": "Samsung Electronics Co.,Ltd", "28bb59": "RNET Technologies, Inc.", + "28bbed": "Co., Ltd.", "28bc05": "BLU Products Inc", "28bc18": "SourcingOverseas Co. Ltd", "28bc56": "EMAC, Inc.", @@ -16274,6 +16287,7 @@ "28d98a": "Hangzhou Konke Technology Co.,Ltd.", "28d997": "Yuduan Mobile Co., Ltd.", "28db81": "Shanghai Guao Electronic Technology Co., Ltd", + "28dba7": "Silicon Laboratories", "28de65": "Aruba, a Hewlett Packard Enterprise Company", "28dea8": "zte corporation", "28dee5": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -16540,6 +16554,7 @@ "2c9924": "ARRIS Group, Inc.", "2c9975": "Samsung Electronics Co.,Ltd", "2c9aa4": "Eolo SpA", + "2c9c58": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "2c9d1e": "HUAWEI TECHNOLOGIES CO.,LTD", "2c9d65": "vivo Mobile Communication Co., Ltd.", "2c9e00": "Sony Interactive Entertainment Inc.", @@ -16577,12 +16592,14 @@ "2cb0fd": "Shenzhen MiaoMing Intelligent Technology Co.,Ltd", "2cb115": "Sdn. Bhd.", "2cb21a": "Co., Ltd.", + "2cb301": "Honor Device Co., Ltd.", "2cb43a": "Apple, Inc.", "2cb693": "Radware", "2cb69d": "RED Digital Cinema", "2cb6c8": "Raisecom Technology CO., LTD", "2cb8ed": "SonicWall", "2cbaba": "Samsung Electronics Co.,Ltd", + "2cbaca": "Cosonic Electroacoustic Technology Co., Ltd.", "2cbc87": "Apple, Inc.", "2cbe08": "Apple, Inc.", "2cbe97": "Ingenieurbuero Bickele und Buehler GmbH", @@ -16706,6 +16723,7 @@ "3029be": "Shanghai MRDcom Co.,Ltd", "302bdc": "Top-Unum Electronics Co., LTD", "302f1e": "SIEMENS AG", + "3030f9": "Espressif Inc.", "30317d": "Hosiden Corporation", "303180": "Shenzhen Skyworth Digital Technology CO., Ltd", "303235": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", @@ -17050,6 +17068,7 @@ "344ca4": "amazipoint technology Ltd.", "344cc8": "Echodyne Corp", "344dea": "zte corporation", + "344e2f": "LEAR", "344f3f": "IO-Power Technology Co., Ltd.", "344f5c": "R&M AG", "344f69": "EKINOPS SAS", @@ -17096,6 +17115,7 @@ "346e8a": "Ecosense", "346e9d": "Ericsson AB", "346f24": "AzureWave Technology Inc.", + "346f71": "TenaFe Inc. ", "346f90": "Cisco Systems, Inc", "346f92": "White Rodgers Division", "346fed": "Enovation Controls", @@ -17402,6 +17422,7 @@ "3847bc": "HUAWEI TECHNOLOGIES CO.,LTD", "3847f2": "Recogni Inc", "38484c": "Apple, Inc.", + "384a80": "Samsung Electronics Co.,Ltd", "384b24": "SIEMENS AG", "384b5b": "ZTRON TECHNOLOGY LIMITED", "384b76": "AIRTAME ApS", @@ -17650,6 +17671,7 @@ "3c08cd": "Juniper Networks", "3c08f6": "Cisco Systems, Inc", "3c096d": "Powerhouse Dynamics", + "3c0af3": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "3c0b4f": "Yandex Services AG", "3c0c48": "Servergy, Inc.", "3c0c7d": "Tiny Mesh AS", @@ -17963,6 +17985,7 @@ "3cf862": "Intel Corporate", "3cf9f0": "zte corporation", "3cfa06": "Microsoft Corporation", + "3cfa30": "Palo Alto Networks", "3cfa43": "HUAWEI TECHNOLOGIES CO.,LTD", "3cfad3": "IEEE Registration Authority", "3cfb5c": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -18248,6 +18271,7 @@ "40e171": "Jiangsu Huitong Group Co.,Ltd.", "40e1e4": "Nokia Solutions and Networks GmbH & Co. KG", "40e230": "AzureWave Technology Inc.", + "40e317": "Extreme Networks, Inc.", "40e3d6": "Aruba, a Hewlett Packard Enterprise Company", "40e64b": "Apple, Inc.", "40e730": "DEY Storage Systems, Inc.", @@ -18324,6 +18348,7 @@ "441c12": "Vantiva USA LLC", "441c7f": "Motorola Mobility LLC, a Lenovo Company", "441ca8": "Hon Hai Precision Ind. Co.,Ltd.", + "441db1": "APTIV SERVICES US, LLC", "441e91": "ARVIDA Intelligent Electronics Technology Co.,Ltd.", "441e98": "Ruckus Wireless", "441ea1": "Hewlett Packard", @@ -18353,6 +18378,7 @@ "4434a7": "ARRIS Group, Inc.", "44356f": "Neterix Ltd", "443583": "Apple, Inc.", + "4435d3": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "443708": "MRV Comunications", "443719": "2 Save Energy Ltd", "44376f": "Young Electric Sign Co", @@ -18428,6 +18454,7 @@ "446a2e": "HUAWEI TECHNOLOGIES CO.,LTD", "446ab7": "ARRIS Group, Inc.", "446c24": "Reallin Electronic Co.,Ltd", + "446d05": "NoTraffic", "446d57": "Liteon Technology Corporation", "446d6c": "Samsung Electronics Co.,Ltd", "446d7f": "Amazon Technologies Inc.", @@ -18677,6 +18704,7 @@ "48343d": "IEP GmbH", "48352b": "Apple, Inc.", "48352e": "Shenzhen Wolck Network Product Co.,LTD", + "483543": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "48365f": "Wintecronics Ltd.", "483871": "Huawei Device Co., Ltd.", "4838b6": "Auhui Taoyun Technology Co., Ltd", @@ -18786,6 +18814,7 @@ "48872d": "SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD", "488759": "Xiaomi Communications Co Ltd", "488764": "vivo Mobile Communication Co., Ltd.", + "4887b8": "TCL King Electrical Appliances(Huizhou)Co.,Ltd", "488803": "ManTechnology Inc.", "48881e": "EthoSwitch LLC", "488899": "Shenzhen SuperElectron Technology Co.,Ltd.", @@ -18807,6 +18836,7 @@ "489507": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "4898ca": "Sichuan AI-Link Technology Co., Ltd.", "489a42": "Technomate Ltd", + "489a5b": "Shenzhen iComm Semiconductor CO.,LTD", "489bd5": "Extreme Networks, Inc.", "489be0": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "489be2": "SCI Innovations Ltd", @@ -18880,6 +18910,7 @@ "48d24f": "Sagemcom Broadband SAS", "48d343": "ARRIS Group, Inc.", "48d35d": "Private", + "48d475": "Lampuga GmbH", "48d539": "HUAWEI TECHNOLOGIES CO.,LTD", "48d54c": "Jeda Networks", "48d6d5": "Google, Inc.", @@ -18890,6 +18921,7 @@ "48d875": "China TransInfo Technology Co., Ltd", "48d890": "FN-LINK TECHNOLOGY LIMITED", "48d8fe": "ClarIDy Solutions, Inc.", + "48da35": "IEEE Registration Authority", "48da96": "Eddy Smart Home Solutions Inc.", "48db50": "HUAWEI TECHNOLOGIES CO.,LTD", "48dc2d": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -19019,6 +19051,7 @@ "4c3fd3": "Texas Instruments", "4c4088": "SANSHIN ELECTRONICS CO.,LTD.", "4c421e": "Cisco Systems, Inc", + "4c4341": "Calix Inc.", "4c445b": "Intel Corporate", "4c4576": "Information Technology Co.,Ltd.", "4c48da": "Beijing Autelan Technology Co.,Ltd", @@ -19132,6 +19165,7 @@ "4c9ee4": "Hanyang Navicom Co.,Ltd.", "4c9eff": "Zyxel Communications Corporation", "4ca003": "VITEC", + "4ca0d4": "Co., Ltd.", "4ca161": "Rain Bird Corporation", "4ca3a7": "TECNO MOBILE LIMITED", "4ca515": "Baikal Electronics JSC", @@ -19231,6 +19265,7 @@ "4ce9e4": "New H3C Technologies Co., Ltd", "4ceaae": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "4ceb42": "Intel Corporate", + "4ceb76": "Murrelektronik GmbH", "4cebbd": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", "4cebd6": "Espressif Inc.", "4cec0f": "Cisco Systems, Inc", @@ -19567,6 +19602,7 @@ "50e0ef": "Nokia", "50e14a": "Private", "50e24e": "zte corporation", + "50e478": "Sichuan AI-Link Technology Co., Ltd.", "50e4e0": "Aruba, a Hewlett Packard Enterprise Company", "50e538": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "50e549": "GIGA-BYTE TECHNOLOGY CO.,LTD.", @@ -19587,6 +19623,7 @@ "50f003": "Open Stack, Inc.", "50f0d3": "Samsung Electronics Co.,Ltd", "50f14a": "Texas Instruments", + "50f222": "EM Microelectronic", "50f261": "Photon Sail Technologies", "50f43c": "Leeo Inc", "50f4eb": "Apple, Inc.", @@ -19604,6 +19641,7 @@ "50fc30": "Treehouse Labs", "50fc9f": "Samsung Electronics Co.,Ltd", "50fdd5": "SJI Industry Company", + "50fe0c": "AzureWave Technology Inc.", "50fef2": "Sify Technologies Ltd", "50ff20": "Keenetic Limited", "50ff99": "IEEE Registration Authority", @@ -19622,6 +19660,7 @@ "54077d": "NETGEAR", "54083b": "IEEE Registration Authority", "540910": "Apple, Inc.", + "540929": "Inventus Power Eletronica do Brasil LTDA", "540955": "zte corporation", "54098d": "deister electronic GmbH", "540df9": "Huawei Device Co., Ltd.", @@ -19785,6 +19824,7 @@ "548c81": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "548ca0": "Liteon Technology Corporation", "548d5a": "Intel Corporate", + "5491af": "IEEE Registration Authority", "549209": "HUAWEI TECHNOLOGIES CO.,LTD", "5492be": "Samsung Electronics Co.,Ltd", "549359": "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.", @@ -19902,6 +19942,7 @@ "54f15f": "Sichuan AI-Link Technology Co., Ltd.", "54f201": "Samsung Electronics Co.,Ltd", "54f294": "Huawei Device Co., Ltd.", + "54f29f": "HUNAN FN-LINK TECHNOLOGY LIMITED", "54f5b6": "ORIENTAL PACIFIC INTERNATIONAL LIMITED", "54f607": "Huawei Device Co., Ltd.", "54f666": "Berthold Technologies GmbH and Co.KG", @@ -19925,6 +19966,7 @@ "5804cb": "Tianjin Huisun Technology Co.,Ltd.", "580528": "LABRIS NETWORKS", "580556": "Elettronica GF S.r.L.", + "5807f8": "Nokia Solutions and Networks GmbH & Co. KG", "5808fa": "Fiber Optic & telecommunication INC.", "580943": "Private", "5809e5": "Kivic Inc.", @@ -20025,6 +20067,7 @@ "58677f": "Clare Controls Inc.", "58685d": "Tempo Australia Pty Ltd", "586861": "VIASAT, INCORPORATED", + "58687a": "Sagemcom Broadband SAS", "58696c": "Ruijie Networks Co.,LTD", "5869f9": "Fusion Transactive Ltd.", "586ab1": "Hangzhou H3C Technologies Co., Limited", @@ -20098,6 +20141,7 @@ "58a023": "Intel Corporate", "58a0cb": "TrackNet, Inc", "58a15f": "Texas Instruments", + "58a2e1": "Mellanox Technologies, Inc.", "58a48e": "PixArt Imaging Inc.", "58a639": "Samsung Electronics Co.,Ltd", "58a76f": "iD corporation", @@ -20353,6 +20397,7 @@ "5c7b5c": "Shenzhen SDMC Technology CO.,Ltd.", "5c7d5e": "HUAWEI TECHNOLOGIES CO.,LTD", "5c7d7d": "Vantiva USA LLC", + "5c7df3": "Fiberhome Telecommunication Technologies Co.,LTD", "5c80b6": "Intel Corporate", "5c81a7": "Network Devices Pty Ltd", "5c8382": "Nokia", @@ -20571,6 +20616,7 @@ "601929": "CORP.", "601970": "HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.", "601971": "ARRIS Group, Inc.", + "601ac7": "Nintendo Co.,Ltd", "601b52": "Vodafone Italia S.p.A.", "601d0f": "Midnite Solar", "601d91": "Motorola Mobility LLC, a Lenovo Company", @@ -20658,6 +20704,7 @@ "606405": "Texas Instruments", "606453": "AOD Co.,Ltd.", "6064a1": "RADiflow Ltd.", + "606682": "SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD", "606720": "Intel Corporate", "60684e": "Samsung Electronics Co.,Ltd", "606944": "Apple, Inc.", @@ -20766,6 +20813,7 @@ "60b76e": "Google, Inc.", "60b933": "Deutron Electronics Corp.", "60b982": "RO.VE.R. Laboratories S.p.A.", + "60b9c0": "Cisco Systems, Inc", "60ba18": "nextLAP GmbH", "60bb0c": "Beijing HuaqinWorld Technology Co,Ltd", "60bc4c": "EWM Hightec Welding GmbH", @@ -20962,7 +21010,9 @@ "644bc3": "Shanghai WOASiS Telecommunications Ltd., Co.", "644bf0": "CalDigit, Inc", "644c36": "Intel Corporate", + "644c69": "CONPROVE", "644d70": "dSPACE GmbH", + "644ed7": "HP Inc.", "644f42": "JETTER CO., Ltd.", "644f74": "LENUS Co., Ltd.", "644fb0": "Hyunjin.com", @@ -21003,6 +21053,7 @@ "6465c0": "Nuvon, Inc", "646624": "Sagemcom Broadband SAS", "6466b3": "TP-LINK TECHNOLOGIES CO.,LTD.", + "6466d8": "Samsung Electronics Co.,Ltd", "646707": "Beijing Omnific Technology, Ltd.", "6467cd": "HUAWEI TECHNOLOGIES CO.,LTD", "64680c": "Comtrend Corporation", @@ -21044,6 +21095,7 @@ "64808b": "VG Controls, Inc.", "648099": "Intel Corporate", "648125": "Alphatron Marine BV", + "648505": "zte corporation", "648788": "Juniper Networks", "6487d7": "ADB Broadband Italia", "6488ff": "Sichuan Changhong Electric Ltd.", @@ -21059,7 +21111,7 @@ "64995d": "LGE ", "649968": "Elentec", "6499a0": "AG Elektronik AB", - "649a08": "Shenzhen SuperElectron Technology Co.,LTD", + "649a08": "Shenzhen SuperElectron Technology Co.,Ltd.", "649a12": "P2 Mobile Technologies Limited", "649a63": "Ring LLC", "649abe": "Apple, Inc.", @@ -21170,6 +21222,7 @@ "64e599": "EFM Networks", "64e625": "Woxu Wireless Co., Ltd", "64e682": "Apple, Inc.", + "64e738": "Zhejiang SUPCON Technology Co., Ltd.", "64e7d8": "Samsung Electronics Co.,Ltd", "64e833": "Espressif Inc.", "64e84f": "Serialway Communication Technology Co. Ltd", @@ -21301,6 +21354,7 @@ "6854ed": "Alcatel-Lucent", "6854f5": "enLighted Inc", "6854fd": "Amazon Technologies Inc.", + "6855d4": "Seiko Epson Corporation", "68572d": "Tuya Smart Inc.", "685811": "Fiberhome Telecommunication Technologies Co.,LTD", "6858c5": "ZF TRW Automotive", @@ -21554,6 +21608,7 @@ "6c1ed7": "vivo Mobile Communication Co., Ltd.", "6c2056": "Cisco Systems, Inc", "6c21a2": "AMPAK Technology, Inc.", + "6c221a": "AltoBeam Inc.", "6c22ab": "Ainsworth Game Technology", "6c2316": "TATUNG Technology Inc.,", "6c23b9": "Sony Corporation", @@ -21751,6 +21806,7 @@ "6cb2fd": "Texas Instruments", "6cb311": "Shenzhen Lianrui Electronics Co.,Ltd", "6cb350": "Anhui comhigher tech co.,ltd", + "6cb456": "Espressif Inc.", "6cb4a7": "Landauer, Inc.", "6cb4fd": "Huawei Device Co., Ltd.", "6cb56b": "HUMAX Co., Ltd.", @@ -21830,6 +21886,7 @@ "6cfa58": "Avaya Inc", "6cfa89": "Cisco Systems, Inc", "6cfaa7": "AMPAK Technology, Inc.", + "6cfbed": "GN Audio A/S", "6cfdb9": "Proware Technologies Co Ltd.", "6cfe54": "Intel Corporate", "6cffbe": "MPB Communications Inc.", @@ -21966,6 +22023,7 @@ "705812": "Panasonic Corporation AVC Networks Company", "705846": "Trig Avionics Limited", "705896": "InShow Technology", + "7058a4": "Actiontec Electronics Inc.", "705957": "Medallion Instrumentation Systems", "705986": "OOO TTV", "705a0f": "Hewlett Packard", @@ -22642,6 +22700,7 @@ "7845b3": "Huawei Device Co., Ltd.", "7845c4": "Dell Inc.", "78465c": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", + "78467d": "SKAIChips", "7846c4": "DAEHAP HYPER-TECH", "7846d4": "Samsung Electronics Co.,Ltd", "78471d": "Samsung Electronics Co.,Ltd", @@ -22738,6 +22797,7 @@ "788c54": "Ping Communication", "788c77": "LEXMARK INTERNATIONAL, INC.", "788cb5": "TP-Link Corporation Limited", + "788daf": "Sagemcom Broadband SAS", "788df7": "Hitron Technologies. Inc", "788e33": "Jiangsu SEUIC Technology Co.,Ltd", "7890a2": "zte corporation", @@ -22757,6 +22817,7 @@ "78995c": "Nationz Technologies Inc", "789966": "Musilab Electronics (DongGuan)Co.,Ltd.", "78998f": "MEDILINE ITALIA SRL", + "789a18": "Routerboard.com", "789c85": "August Home, Inc.", "789ce7": "Shenzhen Aikede Technology Co., Ltd", "789ed0": "Samsung Electronics Co.,Ltd", @@ -23067,7 +23128,9 @@ "7c726e": "Ericsson AB", "7c72e4": "Unikey Technologies", "7c738b": "Cocoon Alarm Ltd", + "7c7398": "Espressif Inc.", "7c73eb": "Huawei Device Co., Ltd.", + "7c752d": "Samsung Electronics Co.,Ltd", "7c7630": "Shenzhen YOUHUA Technology Co., Ltd", "7c7635": "Intel Corporate", "7c7668": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23244,6 +23307,7 @@ "7cfadf": "Apple, Inc.", "7cfc16": "Apple, Inc.", "7cfc3c": "Visteon Corporation", + "7cfcfd": "Fiberhome Telecommunication Technologies Co.,LTD", "7cfd6b": "Xiaomi Communications Co Ltd", "7cfd82": "GUANGDONG GENIUS TECHNOLOGY CO., LTD.", "7cfe28": "Salutron Inc.", @@ -23345,6 +23409,7 @@ "8045dd": "Intel Corporate", "804731": "Packet Design, Inc.", "804786": "Samsung Electronics Co.,Ltd", + "80482c": "Wyze Labs Inc", "8048a5": "Sichuan Tianyi Comheart Telecom Co.,LTD", "804971": "Apple, Inc.", "804a14": "Apple, Inc.", @@ -23628,6 +23693,7 @@ "84262b": "Nokia", "84267a": "GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD", "842690": "BEIJING THOUGHT SCIENCE CO.,LTD.", + "842712": "Silicon Laboratories", "8427b6": "China Mobile IOT Company Limited", "8427ce": "Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints", "842859": "Amazon Technologies Inc.", @@ -23883,6 +23949,7 @@ "84eb3e": "Vivint Smart Home", "84ebef": "Cisco Systems, Inc", "84ed33": "BBMC Co.,Ltd", + "84eee4": "Samsung Electronics Co.,Ltd", "84ef18": "Intel Corporate", "84f117": "Newseason", "84f129": "Metrascale Inc.", @@ -24218,6 +24285,7 @@ "88e9fe": "Apple, Inc.", "88ed1c": "Cudo Communication Co., Ltd.", "88ef16": "ARRIS Group, Inc.", + "88f00f": "Miraeil", "88f031": "Cisco Systems, Inc", "88f077": "Cisco Systems, Inc", "88f2bd": "GD Midea Air-Conditioning Equipment Co.,Ltd.", @@ -24433,6 +24501,7 @@ "8c9246": "Oerlikon Textile Gmbh&Co.KG", "8c9351": "Jigowatts Inc.", "8c941f": "Cisco Systems, Inc", + "8c9461": "Cisco Systems, Inc", "8c946a": "New H3C Technologies Co., Ltd", "8c94cc": "SFR", "8c94cf": "Encell Technology, Inc.", @@ -24579,6 +24648,7 @@ "900d66": "Digimore Electronics Co., Ltd", "900dcb": "ARRIS Group, Inc.", "900e83": "Monico Monitoring, Inc.", + "900e9e": "Shenzhen SuperElectron Technology Co.,Ltd.", "900eb3": "Shenzhen Amediatech Technology Co., Ltd.", "900f0c": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "901195": "Amazon Technologies Inc.", @@ -24619,6 +24689,7 @@ "902bd2": "HUAWEI TECHNOLOGIES CO.,LTD", "902cc7": "C-MAX Asia Limited", "902cfb": "CanTops Co,.Ltd.", + "902d77": "Edgecore Americas Networking Corporation", "902e16": "Electronics Technology co., ltd", "902e1c": "Intel Corporate", "902e87": "LabJack", @@ -24702,6 +24773,7 @@ "906976": "Withrobot Inc.", "906a94": "hangzhou huacheng network technology co., ltd", "906aeb": "Microsoft Corporation", + "906c4b": "Advance Security Electronics", "906cac": "Fortinet, Inc.", "906d05": "BXB ELECTRONICS CO., LTD", "906d62": "Cambium Networks Limited", @@ -24827,6 +24899,7 @@ "90c35f": "Nanjing Jiahao Technology Co., Ltd.", "90c54a": "vivo Mobile Communication Co., Ltd.", "90c682": "IEEE Registration Authority", + "90c710": "zte corporation", "90c792": "ARRIS Group, Inc.", "90c7d8": "zte corporation", "90c99b": "Tesorion Nederland B.V.", @@ -25506,6 +25579,8 @@ "98ec65": "Cosesy ApS", "98ed5c": "Tesla,Inc.", "98ed7e": "eero inc.", + "98edca": "Fiberhome Telecommunication Technologies Co.,LTD", + "98ee8c": "zte corporation", "98eecb": "Corporation", "98ef9b": "OHSUNG", "98f058": "Lynxspring, Incl.", @@ -25533,6 +25608,7 @@ "98faa7": "INNONET", "98fae3": "Xiaomi Communications Co Ltd", "98fb12": "Ltd", + "98fb27": "Samsung Electronics Co.,Ltd", "98fbf5": "ATRALTECH", "98fc11": "Cisco-Linksys, LLC", "98fc84": "IEEE Registration Authority", @@ -25609,6 +25685,7 @@ "9c35eb": "Apple, Inc.", "9c36f8": "Hyundai Kefico", "9c37f4": "HUAWEI TECHNOLOGIES CO.,LTD", + "9c3928": "Samsung Electronics Co.,Ltd", "9c3a9a": "Shenzhen Sundray Technologies Company Limited", "9c3aaf": "Samsung Electronics Co.,Ltd", "9c3dcf": "NETGEAR", @@ -25621,6 +25698,7 @@ "9c44a6": "SwiftTest, Inc.", "9c4563": "DIMEP Sistemas", "9c47f9": "LJU Automatisierungstechnik GmbH", + "9c4952": "Dongguan Liesheng Electronic Co., Ltd.", "9c497f": "Sdn. Bhd.", "9c4a7b": "Nokia Corporation", "9c4cae": "Mesa Labs", @@ -25716,6 +25794,7 @@ "9c8824": "PetroCloud LLC", "9c8888": "Simac Techniek NV", "9c88ad": "Fiberhome Telecommunication Technologies Co.,LTD", + "9c891e": "FireBrick Ltd", "9c8acb": "Juniper Networks", "9c8ba0": "Apple, Inc.", "9c8bf1": "The Warehouse Limited", @@ -25737,6 +25816,7 @@ "9c9567": "Huawei Device Co., Ltd.", "9c956e": "Microchip Technology Inc.", "9c95f8": "SmartDoor Systems, LLC", + "9c9613": "Company Limited", "9c9726": "Technicolor Delivery Technologies Belgium NV", "9c9789": "1MORE", "9c9811": "Guangzhou Sunrise Electronics Development Co., Ltd", @@ -25829,6 +25909,7 @@ "9ce176": "Cisco Systems, Inc", "9ce1d6": "Junger Audio-Studiotechnik GmbH", "9ce230": "JULONG CO,.LTD.", + "9ce330": "Cisco Meraki", "9ce33f": "Apple, Inc.", "9ce374": "HUAWEI TECHNOLOGIES CO.,LTD", "9ce635": "Nintendo Co., Ltd.", @@ -25908,6 +25989,7 @@ "a02195": "Samsung Electronics Co.,Ltd", "a021b7": "NETGEAR", "a0224e": "IEEE Registration Authority", + "a02252": "Astra Wireless Technology FZ-LLC", "a022de": "vivo Mobile Communication Co., Ltd.", "a0231b": "TeleComp R&D Corp.", "a0239f": "Cisco Systems, Inc", @@ -26388,6 +26470,7 @@ "a49340": "Beijing Supvan Information Technology Co.,Ltd.", "a4934c": "Cisco Systems, Inc", "a49426": "Elgama-Elektronika Ltd.", + "a494dc": "Infinite Clouds", "a49733": "ASKEY COMPUTER CORP", "a4975c": "VTech Telecommunications Ltd.", "a497b1": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", @@ -26415,6 +26498,7 @@ "a4a528": "Sichuan Tianyi Comheart Telecom Co.,LTD", "a4a6a9": "Private", "a4a80f": "Shenzhen Coship Electronics Co., Ltd.", + "a4a930": "Beijing Xiaomi Mobile Software Co., Ltd", "a4aafe": "Huawei Device Co., Ltd.", "a4ac0f": "Huawei Device Co., Ltd.", "a4ad00": "Ragsdale Technology", @@ -26546,6 +26630,7 @@ "a8032a": "Espressif Inc.", "a80577": "Netlist, Inc.", "a80600": "Samsung Electronics Co.,Ltd", + "a80bfb": "Ruckus Wireless", "a80c03": "Florawise", "a80c0d": "Cisco Systems, Inc", "a80c63": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -26608,6 +26693,7 @@ "a842a7": "Jiangsu Huitong Group Co.,Ltd.", "a842e3": "Espressif Inc.", "a84397": "Innogrit Corporation", + "a843a4": "China Dragon Technology Limited", "a84481": "Nokia Corporation", "a845cd": "Siselectron Technology LTD.", "a845e9": "Firich Enterprises CO., LTD.", @@ -26646,6 +26732,7 @@ "a85c2c": "Apple, Inc.", "a85e45": "ASUSTek COMPUTER INC.", "a85ee4": "12Sided Technology, LLC", + "a85ef2": "TECNO MOBILE LIMITED", "a860b6": "Apple, Inc.", "a8610a": "ARDUINO AG", "a861aa": "Cloudview Limited", @@ -26692,6 +26779,7 @@ "a8817e": "Apple, Inc.", "a88195": "Samsung Electronics Co.,Ltd", "a881f1": "BMEYE B.V.", + "a881fe": "Luxul Tech Co., Ltd", "a88200": "Hisense Electric Co.,Ltd", "a8827f": "CO.,Ltd", "a885d7": "Sangfor Technologies Inc.", @@ -26756,7 +26844,9 @@ "a8b271": "HUAWEI TECHNOLOGIES CO.,LTD", "a8b2da": "FUJITSU LIMITED", "a8b456": "Cisco Systems, Inc", + "a8b483": "Shenzhen SuperElectron Technology Co.,Ltd.", "a8b57c": "Roku, Inc", + "a8b8e0": "Changwang Technology inc.", "a8b9b3": "ESSYS", "a8bb50": "WiZ IoT Company Limited", "a8bbcf": "Apple, Inc.", @@ -26821,6 +26911,7 @@ "a8f470": "Fujian Newland Communication Science Technologies Co.,Ltd.", "a8f5ac": "HUAWEI TECHNOLOGIES CO.,LTD", "a8f5dd": "ARRIS Group, Inc.", + "a8f5e1": "Shenzhen Shokz Co., Ltd.", "a8f766": "ITE Tech Inc", "a8f7d9": "Mist Systems, Inc.", "a8f7e0": "PLANET Technology Corporation", @@ -27442,6 +27533,7 @@ "b0ca68": "Apple, Inc.", "b0ccfe": "Huawei Device Co., Ltd.", "b0ce18": "Zhejiang shenghui lighting co.,Ltd", + "b0cf0e": "Mellanox Technologies, Inc.", "b0cf4d": "MI-Zone Technology Ireland", "b0cfcb": "Amazon Technologies Inc.", "b0d09c": "Samsung Electronics Co.,Ltd", @@ -27776,6 +27868,7 @@ "b4de31": "Cisco Systems, Inc", "b4dedf": "zte corporation", "b4df3b": "Chromlech", + "b4df91": "Cisco Meraki", "b4dffa": "Litemax Electronics Inc.", "b4e01d": "CONCEPTION ELECTRONIQUE", "b4e0cd": "Fusion-io, Inc", @@ -28130,6 +28223,7 @@ "b8f12a": "Apple, Inc.", "b8f255": "Universal Electronics, Inc.", "b8f317": "iSun Smasher Communications Private Limited", + "b8f44f": "u-blox AG", "b8f4d0": "Herrmann Ultraschalltechnik GmbH & Co. Kg", "b8f5e7": "WayTools, LLC", "b8f653": "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd", @@ -28159,11 +28253,14 @@ "bc091b": "Intel Corporate", "bc0963": "Apple, Inc.", "bc0da5": "Texas Instruments", + "bc0eab": "Samsung Electronics Co.,Ltd", "bc0f2b": "FORTUNE TECHGROUP CO.,LTD", "bc0f64": "Intel Corporate", "bc0f9a": "D-Link International", "bc0fa7": "Ouster", "bc0ff3": "HP Inc.", + "bc0ffe": "Juniper Networks", + "bc102f": "SJI Industry Company", "bc107b": "Samsung Electronics Co.,Ltd", "bc125e": "Beijing WisVideo INC.", "bc13a8": "Shenzhen YOUHUA Technology Co., Ltd", @@ -28188,6 +28285,7 @@ "bc2247": "New H3C Technologies Co., Ltd", "bc22fb": "RF Industries", "bc2392": "BYD Precision Manufacture Company Ltd.", + "bc2411": "Proxmox Server Solutions GmbH", "bc25e0": "HUAWEI TECHNOLOGIES CO.,LTD", "bc25f0": "3D Display Technologies Co., Ltd.", "bc261d": "HONG KONG TECON TECHNOLOGY", @@ -28334,6 +28432,7 @@ "bc8ae8": "QING DAO HAIER TELECOM CO.,LTD.", "bc8b55": "NPP ELIKS America Inc. DBA T&M Atlantic", "bc8d0e": "Nokia", + "bc8d1f": "Cisco Systems, Inc", "bc903a": "Robert Bosch GmbH", "bc91b5": "Infinix mobility limited", "bc926b": "Apple, Inc.", @@ -28384,6 +28483,7 @@ "bcb1f3": "Samsung Electronics Co.,Ltd", "bcb22b": "EM-Tech", "bcb308": "HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED", + "bcb6fb": "P4Q ELECTRONICS, S.L.", "bcb852": "Cybera, Inc.", "bcb863": "Apple, Inc.", "bcb923": "Alta Networks", @@ -28498,6 +28598,7 @@ "c01e9b": "Pixavi AS", "c0210d": "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", "c02250": "Koss Corporation", + "c022f1": "IEEE Registration Authority", "c0238d": "Samsung Electronics Co.,Ltd", "c02506": "AVM GmbH", "c0252f": "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", @@ -28803,6 +28904,7 @@ "c413e2": "Extreme Networks, Inc.", "c41411": "Apple, Inc.", "c4143c": "Cisco Systems, Inc", + "c414a2": "Cisco Meraki", "c41688": "Huawei Device Co., Ltd.", "c416c8": "HUAWEI TECHNOLOGIES CO.,LTD", "c416fa": "Prysm Inc", @@ -29172,6 +29274,7 @@ "c82b6b": "shenzhen worldelite electronics co., LTD", "c82b96": "Espressif Inc.", "c82c2b": "IEEE Registration Authority", + "c82e18": "Espressif Inc.", "c82e47": "Suzhou SmartChip Semiconductor Co., LTD", "c82e94": "Halfa Enterprise Co., Ltd.", "c83168": "eZEX corporation", @@ -29260,6 +29363,7 @@ "c8755b": "Quantify Technology Pty. Ltd.", "c87765": "Tiesse SpA", "c8778b": "Mercury Systems – Trusted Mission Solutions, Inc. ", + "c87867": "Mist Systems, Inc.", "c8787d": "D-Link Corporation", "c87b23": "Bose Corporation", "c87b5b": "zte corporation", @@ -29305,6 +29409,7 @@ "c89c1d": "Cisco Systems, Inc", "c89cdc": "Elitegroup Computer Systems Co.,Ltd.", "c89d18": "Huawei Device Co., Ltd.", + "c89d6d": "ITEL MOBILE LIMITED", "c89e43": "NETGEAR", "c89e61": "Lyngsoe Systems LTd", "c89f1a": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -29737,9 +29842,11 @@ "cce798": "My Social Stuff", "cce7df": "American Magnetics, Inc.", "cce8ac": "SOYEA Technology Co.,Ltd.", + "cce9fa": "Samsung Electronics Co.,Ltd", "ccea1c": "DCONWORKS Co., Ltd", "cceb18": "OOO TSS", "cceb5e": "Xiaomi Communications Co Ltd", + "ccecb7": "ShenZhen Linked-Z Intelligent Display Co., Ltd", "cced21": "Nokia Shanghai Bell Co., Ltd.", "cced4d": "Cisco Systems, Inc", "cceddc": "MitraStar Technology Corp.", @@ -30051,8 +30158,9 @@ "d0efc1": "HUAWEI TECHNOLOGIES CO.,LTD", "d0f0db": "Ericsson", "d0f121": "Xi'an LINKSCI Technology Co., Ltd", - "d0f27f": "SteadyServ Technoligies, LLC", + "d0f27f": "BrewLogix, LLC", "d0f3f5": "Huawei Device Co., Ltd.", + "d0f405": "Hon Hai Precision Industry Co., Ltd.", "d0f4f7": "Huawei Device Co., Ltd.", "d0f520": "KYOCERA Corporation ", "d0f73b": "Helmut Mauell GmbH Werk Weida", @@ -30106,7 +30214,7 @@ "d42122": "Sercomm Corporation.", "d4223f": "Lenovo Mobile Communication Technology Ltd.", "d4224e": "Alcatel Lucent", - "d422cd": "Xsens Technologies B.V.", + "d422cd": "Movella Technologies B.V.", "d42493": "GW Technologies Co.,Ltd", "d4258b": "Intel Corporate", "d425cc": "IEEE Registration Authority", @@ -30262,6 +30370,7 @@ "d48890": "Samsung Electronics Co.,Ltd", "d48a39": "Samsung Electronics Co.,Ltd", "d48a3b": "HUNAN FN-LINK TECHNOLOGY LIMITED", + "d48afc": "Espressif Inc.", "d48cb5": "Cisco Systems, Inc", "d48dd9": "Meld Technology, Inc", "d48f33": "Microsoft Corporation", @@ -30427,6 +30536,7 @@ "d807b6": "TP-LINK TECHNOLOGIES CO.,LTD.", "d80831": "Samsung Electronics Co.,Ltd", "d808f5": "Arcadia Networks Co. Ltd. ", + "d8094e": "Active Brains", "d8097f": "zte corporation", "d809c3": "Cercacor Labs", "d809d6": "ZEXELON CO., LTD.", @@ -30507,6 +30617,7 @@ "d84008": "HUAWEI TECHNOLOGIES CO.,LTD", "d842ac": "Shanghai Feixun Communication Co.,Ltd.", "d842e2": "Canary Connect, Inc.", + "d843ae": "Micro-Star INTL CO., LTD.", "d843ed": "Suzuken", "d8445c": "DEV Tecnologia Ind Com Man Eq LTDA", "d8452b": "Sdn. Bhd.", @@ -30579,6 +30690,7 @@ "d87766": "Nurivoice Co., Ltd", "d8778b": "Intelbras", "d8787f": "Ubee Interactive Co., Limited", + "d878c9": "PRIVATE LIMITED", "d878e5": "KUHN SA", "d87988": "Hon Hai Precision Ind. Co.,Ltd.", "d87a3b": "Silicon Laboratories", @@ -30881,10 +30993,12 @@ "dc6373": "OBARA KOREA", "dc647c": "C.R.S. iiMotion GmbH", "dc64b8": "Shenzhen JingHanDa Electronics Co.Ltd", + "dc6555": "New H3C Intelligence Terminal Co., Ltd.", "dc663a": "Apacer Technology Inc.", "dc6672": "Samsung Electronics Co.,Ltd", "dc6723": "barox Kommunikation GmbH", "dc680c": "Hewlett Packard Enterprise", + "dc6880": "zte corporation", "dc68eb": "Nintendo Co.,Ltd", "dc69e2": "Samsung Electronics Co.,Ltd", "dc6ae7": "Xiaomi Communications Co Ltd", @@ -30908,6 +31022,7 @@ "dc7794": "Huawei Device Co., Ltd.", "dc7834": "LOGICOM SA", "dc7b94": "Cisco Systems, Inc", + "dc7cf7": "China Mobile Group Device Co.,Ltd.", "dc7fa4": "2Wire Inc", "dc8084": "Apple, Inc.", "dc825b": "JANUS, spol. s r.o.", @@ -31011,6 +31126,7 @@ "dccf94": "Beijing Rongcheng Hutong Technology Co., Ltd.", "dccf96": "Samsung Electronics Co.,Ltd", "dcd0f7": "Bentek Systems Ltd.", + "dcd160": "Tianjin Changdatong Technology Co.,LTD", "dcd255": "Kinpo Electronics, Inc.", "dcd26a": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "dcd2fc": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -31024,6 +31140,7 @@ "dcd87f": "Shenzhen JoinCyber Telecom Equipment Ltd", "dcd916": "HUAWEI TECHNOLOGIES CO.,LTD", "dcd9ae": "Nokia Shanghai Bell Co., Ltd.", + "dcda0c": "Espressif Inc.", "dcda4f": "GETCK TECHNOLOGY, INC", "dcda80": "New H3C Technologies Co., Ltd", "dcdb27": "Huawei Device Co., Ltd.", @@ -31065,6 +31182,7 @@ "dcf401": "Dell Inc.", "dcf4ca": "Apple, Inc.", "dcf505": "AzureWave Technology Inc.", + "dcf51b": "Arcadyan Corporation", "dcf56e": "Wellysis Corp.", "dcf719": "Cisco Systems, Inc", "dcf755": "SITRONIK", @@ -31080,6 +31198,7 @@ "dcfe23": "Murata Manufacturing Co., Ltd.", "e00084": "HUAWEI TECHNOLOGIES CO.,LTD", "e001a6": "Edgecore Networks Corporation", + "e001c7": "Hui Zhou Gaoshengda Technology Co.,LTD", "e002a5": "ABB Robotics", "e0036b": "Samsung Electronics Co.,Ltd", "e00370": "ShenZhen Continental Wireless Technology Co., Ltd.", @@ -31357,6 +31476,7 @@ "e0d173": "Cisco Systems, Inc", "e0d1e6": "Aliph dba Jawbone", "e0d31a": "EQUES Technology Co., Limited", + "e0d3b4": "Cisco Meraki", "e0d462": "Huawei Device Co., Ltd.", "e0d464": "Intel Corporate", "e0d4e8": "Intel Corporate", @@ -31422,6 +31542,7 @@ "e40d36": "Intel Corporate", "e40d3b": "Ericsson AB", "e40eee": "HUAWEI TECHNOLOGIES CO.,LTD", + "e41088": "Samsung Electronics Co.,Ltd", "e4115b": "Hewlett Packard", "e41218": "ShenZhen Rapoo Technology Co., Ltd.", "e4121d": "Samsung Electronics Co.,Ltd", @@ -31528,11 +31649,13 @@ "e45e37": "Intel Corporate", "e45f01": "Raspberry Pi Trading Ltd", "e46017": "Intel Corporate", + "e4604d": "zte corporation", "e46059": "Pingtek Co., Ltd.", "e46251": "HAO CHENG GROUP LIMITED", "e462c4": "Cisco Systems, Inc", "e46449": "ARRIS Group, Inc.", "e46564": "SHENZHEN KTC TECHNOLOGY CO.,LTD", + "e465b8": "Espressif Inc.", "e466ab": "zte corporation", "e4671e": "SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.", "e467ba": "Danish Interpretation Systems A/S", @@ -31540,6 +31663,7 @@ "e4695a": "Dictum Health, Inc.", "e46a35": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "e46c21": "messMa GmbH", + "e46cd1": "Calix Inc.", "e46d7f": "Ciena Corporation", "e46f13": "D-Link International", "e470b8": "Intel Corporate", @@ -31553,6 +31677,7 @@ "e47727": "HUAWEI TECHNOLOGIES CO.,LTD", "e4776b": "AARTESYS AG", "e477d4": "Minrray Industry Co.,Ltd ", + "e47876": "Arista Networks", "e47b3f": "BEIJING CO-CLOUD TECHNOLOGY LTD.", "e47c65": "Sunstar Communication Technology Co., Ltd", "e47cf9": "Samsung Electronics Co.,Ltd", @@ -31676,6 +31801,7 @@ "e4e0c5": "Samsung Electronics Co.,Ltd", "e4e112": "Texas Instruments", "e4e130": "TCT mobile ltd", + "e4e26c": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "e4e409": "LEIFHEIT AG", "e4e4ab": "Apple, Inc.", "e4e749": "Hewlett Packard", @@ -31687,6 +31813,7 @@ "e4f042": "Google, Inc.", "e4f14c": "Private", "e4f1d4": "vivo Mobile Communication Co., Ltd.", + "e4f27c": "Juniper Networks", "e4f327": "ATOL LLC", "e4f365": "Time-O-Matic, Inc.", "e4f3c4": "Samsung Electronics Co.,Ltd", @@ -31834,6 +31961,7 @@ "e86819": "HUAWEI TECHNOLOGIES CO.,LTD", "e868e7": "Espressif Inc.", "e86a64": "Electronics Technology co., ltd", + "e86bea": "Espressif Inc.", "e86cc7": "IEEE Registration Authority", "e86cda": "Supercomputers and Neurocomputers Research Center", "e86d52": "ARRIS Group, Inc.", @@ -31875,6 +32003,7 @@ "e8886c": "Shenzhen SC Technologies Co.,LTD", "e8892c": "ARRIS Group, Inc.", "e88d28": "Apple, Inc.", + "e88da6": "Quectel Wireless Solutions Co.,Ltd.", "e88df5": "ZNYX Networks, Inc.", "e88e60": "NSD Corporation", "e88f6f": "TCT mobile ltd", @@ -31900,6 +32029,7 @@ "e89c25": "ASUSTek COMPUTER INC.", "e89d87": "Toshiba", "e89e0c": "MAX8USA DISTRIBUTORS INC.", + "e89e13": "CRESYN", "e89eb4": "Hon Hai Precision Ind. Co.,Ltd.", "e89f39": "Nokia", "e89f6d": "Espressif Inc.", @@ -32049,6 +32179,7 @@ "ec01ee": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "ec0273": "Aruba, a Hewlett Packard Enterprise Company", "ec0441": "ShenZhen TIGO Semiconductor Co., Ltd.", + "ec0482": "STL Systems AG", "ec086b": "TP-LINK TECHNOLOGIES CO.,LTD.", "ec08e5": "Motorola Mobility LLC, a Lenovo Company", "ec0bae": "Hangzhou BroadLink Technology Co.,Ltd", @@ -32171,6 +32302,7 @@ "ec71db": "Reolink Innovation Limited", "ec7379": "Apple, Inc.", "ec7427": "eero inc.", + "ec748c": "Sony Interactive Entertainment Inc.", "ec74ba": "Hirschmann Automation and Control GmbH", "ec74d7": "Grandstream Networks Inc", "ec753e": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -32245,10 +32377,12 @@ "ecaa25": "Samsung Electronics Co.,Ltd", "ecaa8f": "HUAWEI TECHNOLOGIES CO.,LTD", "ecaaa0": "PEGATRON CORPORATION", + "ecab3e": "ESSYS", "ecadb8": "Apple, Inc.", "ecade0": "D-Link International", "ecaf97": "GIT", "ecaff9": "Hailo Technologies Ltd.", + "ecb0d2": "EM Microelectronic", "ecb0e1": "Ciena Corporation", "ecb106": "Acuro Networks, Inc", "ecb1d7": "Hewlett Packard", @@ -32948,6 +33082,7 @@ "f4e578": "LLC Proizvodstvennaya Kompania TransService", "f4e5f2": "HUAWEI TECHNOLOGIES CO.,LTD", "f4e6d7": "Solar Power Technologies, Inc.", + "f4e84f": "zte corporation", "f4e8c7": "Apple, Inc.", "f4e926": "Tianjin Zanpu Technology Inc.", "f4e975": "New H3C Technologies Co., Ltd", @@ -33332,6 +33467,7 @@ "f8f005": "Newport Media Inc.", "f8f014": "RackWare Inc.", "f8f082": "NAGTECH LLC", + "f8f09d": "Hangzhou Prevail Communication Technology Co., Ltd", "f8f0c5": "Suzhou Kuhan Information Technologies Co.,Ltd.", "f8f1b6": "Motorola Mobility LLC, a Lenovo Company", "f8f1e6": "Samsung Electronics Co.,Ltd", @@ -33461,6 +33597,7 @@ "fc4da6": "HUAWEI TECHNOLOGIES CO.,LTD", "fc4dd4": "Universal Global Scientific Industrial Co., Ltd.", "fc4ea4": "Apple, Inc.", + "fc500c": "Sitehop Ltd", "fc5090": "SIMEX Sp. z o.o.", "fc51a4": "ARRIS Group, Inc.", "fc528d": "Vantiva USA LLC", @@ -33472,6 +33609,7 @@ "fc589a": "Cisco Systems, Inc", "fc58df": "Interphone Service", "fc58fa": "Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.", + "fc599f": "Ruijie Networks Co.,LTD", "fc59c0": "Arista Networks", "fc5a1d": "Hitron Technologies. Inc", "fc5b24": "Weibel Scientific A/S", @@ -33525,6 +33663,7 @@ "fc8743": "HUAWEI TECHNOLOGIES CO.,LTD", "fc8a3d": "zte corporation", "fc8b97": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", + "fc8c11": "Microsoft Corporation", "fc8d3d": "Leapfive Tech. Ltd.", "fc8e5b": "China Mobile Iot Limited company", "fc8e6e": "StreamCCTV, LLC", @@ -33537,6 +33676,7 @@ "fc9189": "Sichuan Tianyi Comheart Telecom Co.,LTD", "fc923b": "Nokia Corporation", "fc9257": "Sdn. Bhd.", + "fc936b": "Samsung Electronics Co.,Ltd", "fc9435": "HUAWEI TECHNOLOGIES CO.,LTD", "fc946c": "UBIVELOX", "fc94ce": "zte corporation", From 3ff4799c0f80a9147ad656eb6c75ec76107b4dc7 Mon Sep 17 00:00:00 2001 From: pvillar_netdev Date: Mon, 3 Jul 2023 15:43:22 +0200 Subject: [PATCH 29/37] Ruckus fastiron parser (#264) * added Ruckus FastIron parser * linting fixes * banner edits * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py * modified: netutils/config/parser.py new file: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt new file: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_feature.py new file: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt new file: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json * new file: tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py new file: tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_sent.txt * modified: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt modified: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt modified: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json * modified: netutils/config/parser.py modified: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt modified: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt modified: tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json * modified: docs/dev/include_parser_list.md * black formatting to test files * mypy linter fixes * added multi level nesting test * linting tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py * edit fFastiron parser to inherit from CiscoParser * Revert "edit fFastiron parser to inherit from CiscoParser" This reverts commit a980bb71b20b6c00748df1394179c90e2d442123. modified: netutils/config/parser.py modified: tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py * changes in parser and tests, fixed regression * lint: black parser.py * modified: netutils/config/parser.py * modified: docs/dev/include_parser_list.md --- docs/dev/include_parser_list.md | 3 +- netutils/config/compliance.py | 1 + netutils/config/parser.py | 48 +++++ .../ruckus_fastiron/fastiron_basic_backup.txt | 196 +++++++++++++++++ .../ruckus_fastiron/fastiron_basic_feature.py | 5 + .../fastiron_basic_intended.txt | 197 ++++++++++++++++++ .../fastiron_basic_received.json | 32 +++ .../ruckus_fastiron/fastiron_full_received.py | 150 +++++++++++++ .../ruckus_fastiron/fastiron_full_sent.txt | 197 ++++++++++++++++++ 9 files changed, 828 insertions(+), 1 deletion(-) create mode 100644 tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt create mode 100644 tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_feature.py create mode 100644 tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt create mode 100644 tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json create mode 100644 tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py create mode 100644 tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_sent.txt diff --git a/docs/dev/include_parser_list.md b/docs/dev/include_parser_list.md index 93fb6a23..721a2255 100644 --- a/docs/dev/include_parser_list.md +++ b/docs/dev/include_parser_list.md @@ -16,4 +16,5 @@ | mikrotik_routeros | netutils.config.parser.RouterOSConfigParser | | mrv_optiswitch | netutils.config.parser.OptiswitchConfigParser | | nokia_sros | netutils.config.parser.NokiaConfigParser | -| paloalto_panos | netutils.config.parser.PaloAltoNetworksConfigParser | \ No newline at end of file +| paloalto_panos | netutils.config.parser.PaloAltoNetworksConfigParser | +| ruckus_fastiron | netutils.config.parser.FastironConfigParser | \ No newline at end of file diff --git a/netutils/config/compliance.py b/netutils/config/compliance.py index 55fa56a8..4cafc783 100644 --- a/netutils/config/compliance.py +++ b/netutils/config/compliance.py @@ -24,6 +24,7 @@ "extreme_netiron": parser.NetironConfigParser, "paloalto_panos": parser.PaloAltoNetworksConfigParser, "mikrotik_routeros": parser.RouterOSConfigParser, + "ruckus_fastiron": parser.FastironConfigParser, } diff --git a/netutils/config/parser.py b/netutils/config/parser.py index 2dd97a67..6c09857a 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -1533,3 +1533,51 @@ def build_config_relationship(self) -> t.List[ConfigLine]: # pylint: disable=to self._update_config_lines(line) return self.config_lines + + +class FastironConfigParser(CiscoConfigParser): + """Ruckus FastIron ICX config parser.""" + + comment_chars: t.List[str] = ["!"] + banner_start: t.List[str] = ["banner motd", "banner"] + regex_banner = re.compile(r"^banner(\smotd)?\s+(?P\S)") + + def __init__(self, config: str): + """Create ConfigParser Object. + + Args: + config (str): The config text to parse. + """ + super(FastironConfigParser, self).__init__(config) + + def _build_banner(self, config_line: str) -> t.Optional[str]: + """Handle banner config lines. + + Args: + config_line: The start of the banner config. + + Returns: + The next configuration line in the configuration text or None + + Raises: + ValueError: When the parser is unable to identify the end of the Banner. + """ + self._update_config_lines(config_line) + self._current_parents += (config_line,) + banner_config = [] + for line in self.generator_config: + if not self.is_banner_end(line): + banner_config.append(line) + else: + banner_config.append(line) + line = "\n".join(banner_config) + if line.endswith(self.banner_end): + banner, end, _ = line.rpartition(self.banner_end) + line = banner.rstrip() + end + self._update_config_lines(line) + self._current_parents = self._current_parents[:-1] + try: + return next(self.generator_config) + except StopIteration: + return None + raise ValueError("Unable to parse banner end.") diff --git a/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt new file mode 100644 index 00000000..58cdae0c --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_backup.txt @@ -0,0 +1,196 @@ +Current configuration: +! +ver 08.0.95gT211 +! +stack unit 1 + module 1 icx7150-c12-poe-port-management-module + module 2 icx7150-2-copper-port-2g-module + module 3 icx7150-2-sfp-plus-port-20g-module + stack-port 1/3/1 + stack-port 1/3/2 +! +! +banner motd $ ++----------------+ WARNING RUCKUS SWITCH +---------------+ +. +. Access to this system is limited to authorized +. users and for official purposes only +. +. Your activities will be logged and abuse +. will be reported! +. ++----------------+ WARNING RUCKUS SWITCH +---------------+ $ +! +! +vlan 1 name DEFAULT-VLAN by port + no spanning-tree +! +! +! +! +vlan 2000 name MGMT-VLAN by port + tagged ethe 1/2/1 to 1/2/2 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/1 ethe 1/1/3 ethe 1/1/5 ethe 1/1/7 ethe 1/1/9 ethe 1/1/11 to 1/1/12 + no spanning-tree +! +! +! +vlan 3000 name Guest-WiFi by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3001 by port + tagged ethe 1/1/1 ethe 1/1/3 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/2 + no spanning-tree +! +vlan 3002 by port + tagged ethe 1/1/1 to 1/1/3 ethe 1/1/5 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/4 + no spanning-tree +! +vlan 3003 by port + tagged ethe 1/1/1 to 1/1/5 ethe 1/1/7 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/6 + no spanning-tree +! +vlan 3004 by port + tagged ethe 1/1/1 to 1/1/7 ethe 1/1/9 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/8 + no spanning-tree +! +vlan 3005 by port + tagged ethe 1/1/1 to 1/1/9 ethe 1/1/11 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/10 + no spanning-tree +! +vlan 3006 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3007 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3008 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3009 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3010 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +! +! +vlan 3995 name OfficeNetwork by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +! +! +mstp scope all +mstp instance 0 vlan 1 +mstp instance 0 vlan 2000 +mstp instance 0 vlan 3000 to 3010 +mstp instance 0 vlan 3995 +mstp start +! +! +! +! +errdisable recovery cause all +aaa authentication web-server default local +aaa authentication login default local +enable telnet authentication +enable aaa console +hostname NTC-Test-MDF +ip dhcp snooping vlan 2000 +ip address 10.254.220.10 255.255.255.0 +ip default-gateway 10.254.220.1 +! +no telnet server +username admin password testpass +! +! +snmp-server community testcomm rw +! +! +! +! +manager registrar +! +manager port-list 987 +! +! +interface ethernet 1/1/1 + port-name Unit-111-AP + inline power power-limit 12000 +! +interface ethernet 1/1/2 + port-name Unit-111-Wired +! +interface ethernet 1/1/3 + port-name Unit-112-AP + inline power power-limit 12000 +! +interface ethernet 1/1/4 + port-name Unit-112-Wired +! +interface ethernet 1/1/5 + port-name Unit-113-AP + inline power power-limit 12000 +! +interface ethernet 1/1/6 + port-name Unit-113-Wired +! +interface ethernet 1/1/7 + port-name Unit-114-AP + inline power power-limit 12000 +! +interface ethernet 1/1/8 + port-name Unit-114-Wired +! +interface ethernet 1/1/9 + port-name Unit-115-AP + inline power power-limit 12000 +! +interface ethernet 1/1/10 + port-name Unit-115-Wired +! +interface ethernet 1/1/11 + port-name UPS +! +interface ethernet 1/1/12 + port-name Tech-Test-port +! +interface ethernet 1/3/1 + dhcp snooping trust +! +interface ethernet 1/3/2 + dhcp snooping trust +! +! +! +! +! +! +! +no lldp run +! +! +overlay-gateway gateway1 + type layer2-extension + ip interface Loopback 1 + map vlan 2 vni 3 + site site1 + ip address 67.67.67.1 + extend vlan add 2 +! +! +! +! +end \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_feature.py b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_feature.py new file mode 100644 index 00000000..2ca8a507 --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_feature.py @@ -0,0 +1,5 @@ +features = [ + {"name": "snmp", "ordered": False, "section": ["snmp-server"]}, + {"name": "aaa", "ordered": False, "section": ["aaa"]}, + {"name": "mstp", "ordered": True, "section": ["mstp"]}, +] diff --git a/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt new file mode 100644 index 00000000..2468191b --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_intended.txt @@ -0,0 +1,197 @@ +Current configuration: +! +ver 08.0.95gT211 +! +stack unit 1 + module 1 icx7150-c12-poe-port-management-module + module 2 icx7150-2-copper-port-2g-module + module 3 icx7150-2-sfp-plus-port-20g-module + stack-port 1/3/1 + stack-port 1/3/2 +! +! +banner motd $ ++----------------+ WARNING RUCKUS SWITCH +---------------+ +. +. Access to this system is limited to authorized +. users and for official purposes only +. +. Your activities will be logged and abuse +. will be reported! +. ++----------------+ WARNING RUCKUS SWITCH +---------------+ $ +! +! +vlan 1 name DEFAULT-VLAN by port + no spanning-tree +! +! +! +! +vlan 2000 name MGMT-VLAN by port + tagged ethe 1/2/1 to 1/2/2 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/1 ethe 1/1/3 ethe 1/1/5 ethe 1/1/7 ethe 1/1/9 ethe 1/1/11 to 1/1/12 + no spanning-tree +! +! +! +vlan 3000 name Guest-WiFi by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3001 by port + tagged ethe 1/1/1 ethe 1/1/3 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/2 + no spanning-tree +! +vlan 3002 by port + tagged ethe 1/1/1 to 1/1/3 ethe 1/1/5 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/4 + no spanning-tree +! +vlan 3003 by port + tagged ethe 1/1/1 to 1/1/5 ethe 1/1/7 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/6 + no spanning-tree +! +vlan 3004 by port + tagged ethe 1/1/1 to 1/1/7 ethe 1/1/9 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/8 + no spanning-tree +! +vlan 3005 by port + tagged ethe 1/1/1 to 1/1/9 ethe 1/1/11 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/10 + no spanning-tree +! +vlan 3006 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3007 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3008 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3009 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3010 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +! +! +vlan 3995 name OfficeNetwork by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +! +! +mstp scope all +mstp instance 0 vlan 1 +mstp instance 0 vlan 2000 +mstp instance 0 vlan 3000 to 3010 +mstp instance 0 vlan 3995 +mstp start +! +! +! +! +errdisable recovery cause all +aaa authentication web-server default local +aaa authentication login default local +enable telnet authentication +enable aaa console +hostname NTC-Test-MDF +ip dhcp snooping vlan 2000 +ip address 10.254.220.10 255.255.255.0 +ip default-gateway 10.254.220.1 +! +no telnet server +username admin password testpass +! +! +snmp-server community testcamm rw +! +! +! +! +manager registrar +! +manager port-list 987 +! +! +interface ethernet 1/1/1 + port-name Unit-111-AP + inline power power-limit 12000 +! +interface ethernet 1/1/2 + port-name Unit-111-Wired +! +interface ethernet 1/1/3 + port-name Unit-112-AP + inline power power-limit 12000 +! +interface ethernet 1/1/4 + port-name Unit-112-Wired +! +interface ethernet 1/1/5 + port-name Unit-113-AP + inline power power-limit 12000 +! +interface ethernet 1/1/6 + port-name Unit-113-Wired +! +interface ethernet 1/1/7 + port-name Unit-114-AP + inline power power-limit 12000 +! +interface ethernet 1/1/8 + port-name Unit-114-Wired +! +interface ethernet 1/1/9 + port-name Unit-115-AP + inline power power-limit 12000 +! +interface ethernet 1/1/10 + port-name Unit-115-Wired +! +interface ethernet 1/1/11 + port-name UPS +! +interface ethernet 1/1/12 + port-name Tech-Test-port +! +interface ethernet 1/3/1 + dhcp snooping trust +! +interface ethernet 1/3/2 + dhcp snooping trust +! +! +! +! +! +! +! +no lldp run +! +! +overlay-gateway gateway1 + type layer2-extension + ip interface Loopback 1 + map vlan 2 vni 3 + site site1 + ip address 67.67.67.1 + extend vlan add 2 +! +! +! +! +! +end \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json new file mode 100644 index 00000000..519694bb --- /dev/null +++ b/tests/unit/mock/config/compliance/compliance/ruckus_fastiron/fastiron_basic_received.json @@ -0,0 +1,32 @@ +{ + "aaa": { + "actual": "aaa authentication web-server default local\naaa authentication login default local", + "cannot_parse": true, + "compliant": true, + "extra": "", + "intended": "aaa authentication web-server default local\naaa authentication login default local", + "missing": "", + "ordered_compliant": true, + "unordered_compliant": true + }, + "mstp": { + "actual": "mstp scope all\nmstp instance 0 vlan 1\nmstp instance 0 vlan 2000\nmstp instance 0 vlan 3000 to 3010\nmstp instance 0 vlan 3995\nmstp start", + "cannot_parse": true, + "compliant": true, + "extra": "", + "intended": "mstp scope all\nmstp instance 0 vlan 1\nmstp instance 0 vlan 2000\nmstp instance 0 vlan 3000 to 3010\nmstp instance 0 vlan 3995\nmstp start", + "missing": "", + "ordered_compliant": true, + "unordered_compliant": true + }, + "snmp": { + "actual": "snmp-server community testcomm rw", + "cannot_parse": true, + "compliant": false, + "extra": "snmp-server community testcomm rw", + "intended": "snmp-server community testcamm rw", + "missing": "snmp-server community testcamm rw", + "ordered_compliant": false, + "unordered_compliant": false + } +} diff --git a/tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py b/tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py new file mode 100644 index 00000000..f4f23307 --- /dev/null +++ b/tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_received.py @@ -0,0 +1,150 @@ +from netutils.config.parser import ConfigLine + +data = [ + ConfigLine(config_line="Current configuration:", parents=()), + ConfigLine(config_line="ver 08.0.95gT211", parents=()), + ConfigLine(config_line="stack unit 1", parents=()), + ConfigLine(config_line=" module 1 icx7150-c12-poe-port-management-module", parents=("stack unit 1",)), + ConfigLine(config_line=" module 2 icx7150-2-copper-port-2g-module", parents=("stack unit 1",)), + ConfigLine(config_line=" module 3 icx7150-2-sfp-plus-port-20g-module", parents=("stack unit 1",)), + ConfigLine(config_line=" stack-port 1/3/1", parents=("stack unit 1",)), + ConfigLine(config_line=" stack-port 1/3/2", parents=("stack unit 1",)), + ConfigLine(config_line="banner motd $", parents=()), + ConfigLine( + config_line="+----------------+ WARNING RUCKUS SWITCH +---------------+\n.\n. Access to this system is limited to authorized\n. users and for official purposes only\n.\n. Your activities will be logged and abuse\n. will be reported!\n.\n+----------------+ WARNING RUCKUS SWITCH +---------------+$", + parents=("banner motd $",), + ), + ConfigLine(config_line="vlan 1 name DEFAULT-VLAN by port", parents=()), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 1 name DEFAULT-VLAN by port",)), + ConfigLine(config_line="vlan 2000 name MGMT-VLAN by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/2/1 to 1/2/2 ethe 1/3/1 to 1/3/2", parents=("vlan 2000 name MGMT-VLAN by port",) + ), + ConfigLine( + config_line=" untagged ethe 1/1/1 ethe 1/1/3 ethe 1/1/5 ethe 1/1/7 ethe 1/1/9 ethe 1/1/11 to 1/1/12", + parents=("vlan 2000 name MGMT-VLAN by port",), + ), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 2000 name MGMT-VLAN by port",)), + ConfigLine(config_line="vlan 3000 name Guest-WiFi by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3000 name Guest-WiFi by port",) + ), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3000 name Guest-WiFi by port",)), + ConfigLine(config_line="vlan 3001 by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 ethe 1/1/3 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3001 by port",) + ), + ConfigLine(config_line=" untagged ethe 1/1/2", parents=("vlan 3001 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3001 by port",)), + ConfigLine(config_line="vlan 3002 by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 to 1/1/3 ethe 1/1/5 to 1/1/12 ethe 1/3/1 to 1/3/2", + parents=("vlan 3002 by port",), + ), + ConfigLine(config_line=" untagged ethe 1/1/4", parents=("vlan 3002 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3002 by port",)), + ConfigLine(config_line="vlan 3003 by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 to 1/1/5 ethe 1/1/7 to 1/1/12 ethe 1/3/1 to 1/3/2", + parents=("vlan 3003 by port",), + ), + ConfigLine(config_line=" untagged ethe 1/1/6", parents=("vlan 3003 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3003 by port",)), + ConfigLine(config_line="vlan 3004 by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 to 1/1/7 ethe 1/1/9 to 1/1/12 ethe 1/3/1 to 1/3/2", + parents=("vlan 3004 by port",), + ), + ConfigLine(config_line=" untagged ethe 1/1/8", parents=("vlan 3004 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3004 by port",)), + ConfigLine(config_line="vlan 3005 by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 to 1/1/9 ethe 1/1/11 to 1/1/12 ethe 1/3/1 to 1/3/2", + parents=("vlan 3005 by port",), + ), + ConfigLine(config_line=" untagged ethe 1/1/10", parents=("vlan 3005 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3005 by port",)), + ConfigLine(config_line="vlan 3006 by port", parents=()), + ConfigLine(config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3006 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3006 by port",)), + ConfigLine(config_line="vlan 3007 by port", parents=()), + ConfigLine(config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3007 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3007 by port",)), + ConfigLine(config_line="vlan 3008 by port", parents=()), + ConfigLine(config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3008 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3008 by port",)), + ConfigLine(config_line="vlan 3009 by port", parents=()), + ConfigLine(config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3009 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3009 by port",)), + ConfigLine(config_line="vlan 3010 by port", parents=()), + ConfigLine(config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", parents=("vlan 3010 by port",)), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3010 by port",)), + ConfigLine(config_line="vlan 3995 name OfficeNetwork by port", parents=()), + ConfigLine( + config_line=" tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2", + parents=("vlan 3995 name OfficeNetwork by port",), + ), + ConfigLine(config_line=" no spanning-tree", parents=("vlan 3995 name OfficeNetwork by port",)), + ConfigLine(config_line="mstp scope all", parents=()), + ConfigLine(config_line="mstp instance 0 vlan 1", parents=()), + ConfigLine(config_line="mstp instance 0 vlan 2000", parents=()), + ConfigLine(config_line="mstp instance 0 vlan 3000 to 3010", parents=()), + ConfigLine(config_line="mstp instance 0 vlan 3995", parents=()), + ConfigLine(config_line="mstp start", parents=()), + ConfigLine(config_line="errdisable recovery cause all", parents=()), + ConfigLine(config_line="aaa authentication web-server default local", parents=()), + ConfigLine(config_line="aaa authentication login default local", parents=()), + ConfigLine(config_line="enable telnet authentication", parents=()), + ConfigLine(config_line="enable aaa console", parents=()), + ConfigLine(config_line="hostname NTC-Test-MDF", parents=()), + ConfigLine(config_line="ip dhcp snooping vlan 2000", parents=()), + ConfigLine(config_line="ip address 10.254.220.10 255.255.255.0", parents=()), + ConfigLine(config_line="ip default-gateway 10.254.220.1", parents=()), + ConfigLine(config_line="no telnet server", parents=()), + ConfigLine(config_line="username admin password testpass", parents=()), + ConfigLine(config_line="snmp-server community testcomm rw", parents=()), + ConfigLine(config_line="manager registrar", parents=()), + ConfigLine(config_line="manager port-list 987", parents=()), + ConfigLine(config_line="interface ethernet 1/1/1", parents=()), + ConfigLine(config_line=" port-name Unit-111-AP", parents=("interface ethernet 1/1/1",)), + ConfigLine(config_line=" inline power power-limit 12000", parents=("interface ethernet 1/1/1",)), + ConfigLine(config_line="interface ethernet 1/1/2", parents=()), + ConfigLine(config_line=" port-name Unit-111-Wired", parents=("interface ethernet 1/1/2",)), + ConfigLine(config_line="interface ethernet 1/1/3", parents=()), + ConfigLine(config_line=" port-name Unit-112-AP", parents=("interface ethernet 1/1/3",)), + ConfigLine(config_line=" inline power power-limit 12000", parents=("interface ethernet 1/1/3",)), + ConfigLine(config_line="interface ethernet 1/1/4", parents=()), + ConfigLine(config_line=" port-name Unit-112-Wired", parents=("interface ethernet 1/1/4",)), + ConfigLine(config_line="interface ethernet 1/1/5", parents=()), + ConfigLine(config_line=" port-name Unit-113-AP", parents=("interface ethernet 1/1/5",)), + ConfigLine(config_line=" inline power power-limit 12000", parents=("interface ethernet 1/1/5",)), + ConfigLine(config_line="interface ethernet 1/1/6", parents=()), + ConfigLine(config_line=" port-name Unit-113-Wired", parents=("interface ethernet 1/1/6",)), + ConfigLine(config_line="interface ethernet 1/1/7", parents=()), + ConfigLine(config_line=" port-name Unit-114-AP", parents=("interface ethernet 1/1/7",)), + ConfigLine(config_line=" inline power power-limit 12000", parents=("interface ethernet 1/1/7",)), + ConfigLine(config_line="interface ethernet 1/1/8", parents=()), + ConfigLine(config_line=" port-name Unit-114-Wired", parents=("interface ethernet 1/1/8",)), + ConfigLine(config_line="interface ethernet 1/1/9", parents=()), + ConfigLine(config_line=" port-name Unit-115-AP", parents=("interface ethernet 1/1/9",)), + ConfigLine(config_line=" inline power power-limit 12000", parents=("interface ethernet 1/1/9",)), + ConfigLine(config_line="interface ethernet 1/1/10", parents=()), + ConfigLine(config_line=" port-name Unit-115-Wired", parents=("interface ethernet 1/1/10",)), + ConfigLine(config_line="interface ethernet 1/1/11", parents=()), + ConfigLine(config_line=" port-name UPS", parents=("interface ethernet 1/1/11",)), + ConfigLine(config_line="interface ethernet 1/1/12", parents=()), + ConfigLine(config_line=" port-name Tech-Test-port", parents=("interface ethernet 1/1/12",)), + ConfigLine(config_line="interface ethernet 1/3/1", parents=()), + ConfigLine(config_line=" dhcp snooping trust", parents=("interface ethernet 1/3/1",)), + ConfigLine(config_line="interface ethernet 1/3/2", parents=()), + ConfigLine(config_line=" dhcp snooping trust", parents=("interface ethernet 1/3/2",)), + ConfigLine(config_line="no lldp run", parents=()), + ConfigLine(config_line="overlay-gateway gateway1", parents=()), + ConfigLine(config_line=" type layer2-extension", parents=("overlay-gateway gateway1",)), + ConfigLine(config_line=" ip interface Loopback 1", parents=("overlay-gateway gateway1",)), + ConfigLine(config_line=" map vlan 2 vni 3", parents=("overlay-gateway gateway1",)), + ConfigLine(config_line=" site site1", parents=("overlay-gateway gateway1",)), + ConfigLine(config_line=" ip address 67.67.67.1", parents=("overlay-gateway gateway1", " site site1")), + ConfigLine(config_line=" extend vlan add 2", parents=("overlay-gateway gateway1", " site site1")), + ConfigLine(config_line="end", parents=()), +] diff --git a/tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_sent.txt b/tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_sent.txt new file mode 100644 index 00000000..ead5ddc8 --- /dev/null +++ b/tests/unit/mock/config/parser/base/ruckus_fastiron/fastiron_full_sent.txt @@ -0,0 +1,197 @@ +Current configuration: +! +ver 08.0.95gT211 +! +stack unit 1 + module 1 icx7150-c12-poe-port-management-module + module 2 icx7150-2-copper-port-2g-module + module 3 icx7150-2-sfp-plus-port-20g-module + stack-port 1/3/1 + stack-port 1/3/2 +! +! +banner motd $ ++----------------+ WARNING RUCKUS SWITCH +---------------+ +. +. Access to this system is limited to authorized +. users and for official purposes only +. +. Your activities will be logged and abuse +. will be reported! +. ++----------------+ WARNING RUCKUS SWITCH +---------------+ $ +! +! +vlan 1 name DEFAULT-VLAN by port + no spanning-tree +! +! +! +! +vlan 2000 name MGMT-VLAN by port + tagged ethe 1/2/1 to 1/2/2 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/1 ethe 1/1/3 ethe 1/1/5 ethe 1/1/7 ethe 1/1/9 ethe 1/1/11 to 1/1/12 + no spanning-tree +! +! +! +vlan 3000 name Guest-WiFi by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3001 by port + tagged ethe 1/1/1 ethe 1/1/3 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/2 + no spanning-tree +! +vlan 3002 by port + tagged ethe 1/1/1 to 1/1/3 ethe 1/1/5 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/4 + no spanning-tree +! +vlan 3003 by port + tagged ethe 1/1/1 to 1/1/5 ethe 1/1/7 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/6 + no spanning-tree +! +vlan 3004 by port + tagged ethe 1/1/1 to 1/1/7 ethe 1/1/9 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/8 + no spanning-tree +! +vlan 3005 by port + tagged ethe 1/1/1 to 1/1/9 ethe 1/1/11 to 1/1/12 ethe 1/3/1 to 1/3/2 + untagged ethe 1/1/10 + no spanning-tree +! +vlan 3006 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3007 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3008 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3009 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +vlan 3010 by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +! +! +vlan 3995 name OfficeNetwork by port + tagged ethe 1/1/1 to 1/1/12 ethe 1/3/1 to 1/3/2 + no spanning-tree +! +! +! +mstp scope all +mstp instance 0 vlan 1 +mstp instance 0 vlan 2000 +mstp instance 0 vlan 3000 to 3010 +mstp instance 0 vlan 3995 +mstp start +! +! +! +! +errdisable recovery cause all +aaa authentication web-server default local +aaa authentication login default local +enable telnet authentication +enable aaa console +hostname NTC-Test-MDF +ip dhcp snooping vlan 2000 +ip address 10.254.220.10 255.255.255.0 +ip default-gateway 10.254.220.1 +! +no telnet server +username admin password testpass +! +! +snmp-server community testcomm rw +! +! +! +! +manager registrar +! +manager port-list 987 +! +! +interface ethernet 1/1/1 + port-name Unit-111-AP + inline power power-limit 12000 +! +interface ethernet 1/1/2 + port-name Unit-111-Wired +! +interface ethernet 1/1/3 + port-name Unit-112-AP + inline power power-limit 12000 +! +interface ethernet 1/1/4 + port-name Unit-112-Wired +! +interface ethernet 1/1/5 + port-name Unit-113-AP + inline power power-limit 12000 +! +interface ethernet 1/1/6 + port-name Unit-113-Wired +! +interface ethernet 1/1/7 + port-name Unit-114-AP + inline power power-limit 12000 +! +interface ethernet 1/1/8 + port-name Unit-114-Wired +! +interface ethernet 1/1/9 + port-name Unit-115-AP + inline power power-limit 12000 +! +interface ethernet 1/1/10 + port-name Unit-115-Wired +! +interface ethernet 1/1/11 + port-name UPS +! +interface ethernet 1/1/12 + port-name Tech-Test-port +! +interface ethernet 1/3/1 + dhcp snooping trust +! +interface ethernet 1/3/2 + dhcp snooping trust +! +! +! +! +! +! +! +no lldp run +! +! +overlay-gateway gateway1 + type layer2-extension + ip interface Loopback 1 + map vlan 2 vni 3 + site site1 + ip address 67.67.67.1 + extend vlan add 2 +! +! +! +! +! +end \ No newline at end of file From 38698230239abe260b609bde9959f84e5521bc77 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:02:43 -0500 Subject: [PATCH 30/37] Flat: latest data (2023-07-06T08:06:19.475Z) (#309) { "date": "2023-07-06T08:06:19.475Z", "files": [ { "name": "netutils/data_files/protocol_mappings.py", "deltaBytes": 67, "source": "https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv" } ] } Co-authored-by: flat-data --- netutils/data_files/protocol_mappings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netutils/data_files/protocol_mappings.py b/netutils/data_files/protocol_mappings.py index db2f701b..a78ccb75 100644 --- a/netutils/data_files/protocol_mappings.py +++ b/netutils/data_files/protocol_mappings.py @@ -2122,6 +2122,7 @@ "qip-login": {"port_number": 2366, "protocols": ["tcp", "udp"]}, "service-ctrl": {"port_number": 2367, "protocols": ["tcp", "udp"]}, "opentable": {"port_number": 2368, "protocols": ["tcp", "udp"]}, + "bif-p2p": {"port_number": 2369, "protocols": ["tcp", "udp"]}, "l3-hbmon": {"port_number": 2370, "protocols": ["tcp", "udp"]}, "rda-secondary": {"port_number": 2371, "protocols": ["tcp"]}, "lanmessenger": {"port_number": 2372, "protocols": ["tcp", "udp"]}, From 6a5eaa4c388cc9d124c85821368e1c59e072b85b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:03:32 -0500 Subject: [PATCH 31/37] Flat: latest data (2023-07-06T08:03:10.373Z) (#308) { "date": "2023-07-06T08:03:10.373Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 1429, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 39 ++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 258ab3cb..10abe756 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -2743,7 +2743,7 @@ "000ad4": "CoreBell Systems Inc.", "000ad5": "Brainchild Electronic Co., Ltd.", "000ad6": "BeamReach Networks", - "000ad7": "Origin ELECTRIC CO.,LTD.", + "000ad7": "Origin Co., Ltd.", "000ad8": "IPCserv Technology Corp.", "000ad9": "Sony Corporation", "000ada": "Vindicator Technologies", @@ -3659,7 +3659,7 @@ "000e6f": "IRIS Corporation Berhad", "000e70": "in2 Networks", "000e71": "Gemstar Technology Development Ltd.", - "000e72": "CTS electronics", + "000e72": "Arca Technologies S.r.l.", "000e73": "Tpack A/S", "000e74": "Solar Telecom. Tech", "000e75": "New York Air Brake Corp.", @@ -4684,7 +4684,7 @@ "001274": "NIT lab", "001275": "Sentilla Corporation", "001276": "CG Power Systems Ireland Limited", - "001277": "Korenix Technologies Co., Ltd.", + "001277": "Beijer Electronics Corp.", "001278": "International Bar Code", "001279": "Hewlett Packard", "00127a": "Sanyu Industry Co.,Ltd.", @@ -11658,6 +11658,7 @@ "009acd": "HUAWEI TECHNOLOGIES CO.,LTD", "009ad2": "Cisco Systems, Inc", "009c02": "Hewlett Packard", + "009cc0": "vivo Mobile Communication Co., Ltd.", "009d6b": "Murata Manufacturing Co., Ltd.", "009d8e": "CARDIAC RECORDERS, INC.", "009e1e": "Cisco Systems, Inc", @@ -12905,6 +12906,7 @@ "00f82c": "Cisco Systems, Inc", "00f860": "PT. Panggung Electric Citrabuana", "00f871": "Demant A/S", + "00f952": "HUAWEI TECHNOLOGIES CO.,LTD", "00fa21": "Samsung Electronics Co.,Ltd", "00fa3b": "CLOOS ELECTRONIC GMBH", "00fab6": "Kontakt Micro-Location Sp z o.o.", @@ -12950,6 +12952,7 @@ "040ec2": "ViewSonic Mobile China Limited", "04106b": "Xiaomi Communications Co Ltd", "041119": "IEEE Registration Authority", + "041471": "HUAWEI TECHNOLOGIES CO.,LTD", "041552": "Apple, Inc.", "0415d9": "Viwone", "0417b6": "Smart Innovation LLC", @@ -14060,6 +14063,7 @@ "1005b1": "ARRIS Group, Inc.", "1005ca": "Cisco Systems, Inc", "1005e1": "Nokia", + "10061c": "Espressif Inc.", "100645": "Sagemcom Broadband SAS", "1006ed": "Cisco Systems, Inc", "10071d": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -15413,6 +15417,7 @@ "2012d5": "Scientech Materials Corporation", "2013e0": "Samsung Electronics Co.,Ltd", "201582": "Apple, Inc.", + "2015de": "Samsung Electronics Co.,Ltd", "20163d": "Sdn. Bhd.", "201642": "Microsoft Corporation", "2016b9": "Intel Corporate", @@ -15479,6 +15484,7 @@ "204569": "ITEL MOBILE LIMITED", "2046a1": "VECOW Co., Ltd", "204747": "Dell Inc.", + "2047b5": "Sagemcom Broadband SAS", "2047da": "Xiaomi Communications Co Ltd", "2047ed": "SKY UK LIMITED", "204aaa": "Hanscan Spain S.A.", @@ -16078,6 +16084,7 @@ "283152": "HUAWEI TECHNOLOGIES CO.,LTD", "283166": "vivo Mobile Communication Co., Ltd.", "28317e": "Hongkong Nano IC Technologies Co., Ltd", + "2831f8": "HUAWEI TECHNOLOGIES CO.,LTD", "2832c5": "HUMAX Co., Ltd.", "283334": "Huawei Device Co., Ltd.", "283410": "Enigma Diagnostics Limited", @@ -16303,6 +16310,7 @@ "28e476": "Pi-Coral", "28e5b0": "HUAWEI TECHNOLOGIES CO.,LTD", "28e608": "Tokheim", + "28e6a9": "Samsung Electronics Co.,Ltd", "28e6e9": "SIS Sat Internet Services GmbH", "28e71d": "Arista Networks", "28e794": "Microtime Computer Inc.", @@ -16373,6 +16381,7 @@ "2c10c1": "Nintendo Co., Ltd.", "2c1165": "Silicon Laboratories", "2c15bf": "Samsung Electronics Co.,Ltd", + "2c15d9": "HUAWEI TECHNOLOGIES CO.,LTD", "2c15e1": "Co., Ltd.", "2c16bd": "IEEE Registration Authority", "2c1809": "Apple, Inc.", @@ -17571,6 +17580,7 @@ "38bf2f": "Espec Corp.", "38bf33": "NEC CASIO Mobile Communications", "38c096": "ALPSALPINE CO,.LTD", + "38c0ea": "Fortinet, Inc.", "38c2ba": "CCTV NEOTECH", "38c4e8": "NSS Sp. z o.o.", "38c70a": "WiFiSong", @@ -19084,6 +19094,7 @@ "4c5dcd": "Oy Finnish Electric Vehicle Technologies Ltd", "4c5e0c": "Routerboard.com", "4c5ed3": "Unisyue Technologies Co; LTD.", + "4c5f70": "Intel Corporate", "4c5fd2": "Alcatel-Lucent", "4c60d5": "airPointe of New Hampshire", "4c60de": "NETGEAR", @@ -19694,6 +19705,7 @@ "54211d": "Huawei Device Co., Ltd.", "542160": "Alula", "54219d": "Samsung Electronics Co.,Ltd", + "542259": "HUAWEI TECHNOLOGIES CO.,LTD", "5422f8": "zte corporation", "5425ea": "HUAWEI TECHNOLOGIES CO.,LTD", "542696": "Apple, Inc.", @@ -20664,6 +20676,7 @@ "60427f": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "60447a": "Water-i.d. GmbH", "6044f5": "Easy Digital Ltd.", + "60452e": "Intel Corporate", "60455e": "Liptel s.r.o.", "6045bd": "Microsoft", "6045cb": "ASUSTek COMPUTER INC.", @@ -22345,6 +22358,7 @@ "744d28": "Routerboard.com", "744d6d": "HUAWEI TECHNOLOGIES CO.,LTD", "744d79": "Arrive Systems Inc.", + "744dbd": "Espressif Inc.", "74504e": "New H3C Technologies Co., Ltd", "7451ba": "Xiaomi Communications Co Ltd", "745327": "COMMSEN CO., LIMITED", @@ -23216,6 +23230,7 @@ "7cbb8a": "Nintendo Co., Ltd.", "7cbc84": "IEEE Registration Authority", "7cbd06": "AE REFUsol", + "7cbf77": "SPEEDTECH CORP.", "7cbf88": "Mobilicom LTD", "7cbfae": "Sdn. Bhd.", "7cbfb1": "ARRIS Group, Inc.", @@ -24088,6 +24103,7 @@ "885c47": "Alcatel Lucent", "885d90": "IEEE Registration Authority", "885dfb": "zte corporation", + "885ebd": "NCKOREA Co.,Ltd.", "885fe8": "IEEE Registration Authority", "88615a": "Siano Mobile Silicon Ltd.", "88625d": "BITNETWORKS CO.,LTD", @@ -24295,6 +24311,7 @@ "88f7bf": "vivo Mobile Communication Co., Ltd.", "88f7c7": "Vantiva USA LLC", "88f872": "HUAWEI TECHNOLOGIES CO.,LTD", + "88f916": "Qingdao Dayu Dance Digital Technology Co.,Ltd", "88fc5d": "Cisco Systems, Inc", "88fca6": "devolo AG", "88fd15": "LINEEYE CO., LTD", @@ -24591,6 +24608,7 @@ "8ce78c": "DK Networks", "8ce7b3": "Sonardyne International Ltd", "8ce9b4": "Zhejiang Dahua Technology Co., Ltd.", + "8ce9ee": "Intel Corporate", "8cea12": "Shenzhen MiaoMing Intelligent Technology Co.,Ltd", "8cea1b": "Edgecore Networks Corporation", "8cea48": "Samsung Electronics Co.,Ltd", @@ -26361,6 +26379,7 @@ "a43a69": "Vers Inc", "a43b0e": "Huawei Device Co., Ltd.", "a43bfa": "IEEE Registration Authority", + "a43cd7": "NTX Electronics YangZhou co.,LTD", "a43d78": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "a43e51": "ANOV FRANCE", "a43ea0": "iComm HK LIMITED", @@ -27367,6 +27386,7 @@ "b0495f": "OMRON HEALTHCARE Co., Ltd.", "b04a39": "Beijing Roborock Technology Co., Ltd.", "b04a6a": "Samsung Electronics Co.,Ltd", + "b04ab4": "Motorola Mobility LLC, a Lenovo Company", "b04b68": "NAKAYO Inc", "b04bbf": "PT HAN SUNG ELECTORONICS INDONESIA", "b04c05": "Fresenius Medical Care Deutschland GmbH", @@ -27385,6 +27405,7 @@ "b05ada": "Hewlett Packard", "b05b1f": "THERMO FISHER SCIENTIFIC S.P.A.", "b05b67": "HUAWEI TECHNOLOGIES CO.,LTD", + "b05b99": "Sagemcom Broadband SAS", "b05c16": "Fiberhome Telecommunication Technologies Co.,LTD", "b05cda": "HP Inc.", "b05ce5": "Nokia Corporation", @@ -28274,6 +28295,7 @@ "bc1695": "zte corporation", "bc16f5": "Cisco Systems, Inc", "bc17b8": "Intel Corporate", + "bc1896": "HUAWEI TECHNOLOGIES CO.,LTD", "bc1a67": "YF Technology Co., Ltd", "bc1ae4": "Huawei Device Co., Ltd.", "bc1c81": "Sichuan iLink Technology Co., Ltd.", @@ -29108,6 +29130,7 @@ "c4a72b": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "c4a816": "eero inc.", "c4a81d": "D-Link International", + "c4aa99": "HUAWEI TECHNOLOGIES CO.,LTD", "c4aaa1": "SUMMIT DEVELOPMENT, spol.s r.o.", "c4aac4": "Zhejiang Dahua Technology Co., Ltd.", "c4abb2": "vivo Mobile Communication Co., Ltd.", @@ -29412,6 +29435,7 @@ "c89d6d": "ITEL MOBILE LIMITED", "c89e43": "NETGEAR", "c89e61": "Lyngsoe Systems LTd", + "c89f0c": "Motorola Mobility LLC, a Lenovo Company", "c89f1a": "HUAWEI TECHNOLOGIES CO.,LTD", "c89f1d": "SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD", "c89f42": "VDII Innovation AB", @@ -30058,6 +30082,7 @@ "d09395": "IEEE Registration Authority", "d093f8": "Stonestreet One LLC", "d09466": "Dell Inc.", + "d094cf": "HUAWEI TECHNOLOGIES CO.,LTD", "d095c7": "Pantech Co., Ltd.", "d09686": "IEEE Registration Authority", "d096fb": "DZS Inc.", @@ -30416,6 +30441,7 @@ "d4a425": "SMAX Technology Co., Ltd.", "d4a499": "InView Technology Corporation", "d4a651": "Tuya Smart Inc.", + "d4a923": "HUAWEI TECHNOLOGIES CO.,LTD", "d4a928": "GreenWave Reality Inc", "d4aaff": "MICRO WORLD ", "d4ab82": "ARRIS Group, Inc.", @@ -30927,6 +30953,7 @@ "dc2bca": "Zera GmbH", "dc2c26": "Iton Technology Limited", "dc2c6e": "Routerboard.com", + "dc2d04": "vivo Mobile Communication Co., Ltd.", "dc2d3c": "Huawei Device Co., Ltd.", "dc2dcb": "Beijing Unis HengYue Technology Co., Ltd.", "dc2dde": "Ledworks SRL", @@ -31203,6 +31230,7 @@ "e0036b": "Samsung Electronics Co.,Ltd", "e00370": "ShenZhen Continental Wireless Technology Co., Ltd.", "e005c5": "TP-LINK TECHNOLOGIES CO.,LTD.", + "e00630": "HUAWEI TECHNOLOGIES CO.,LTD", "e006e6": "Hon Hai Precision Ind. Co.,Ltd.", "e0071b": "Hewlett Packard Enterprise", "e007c2": "FUJIAN STAR-NET COMMUNICATION CO.,LTD", @@ -31773,6 +31801,7 @@ "e4c63d": "Apple, Inc.", "e4c6e6": "Mophie, LLC", "e4c722": "Cisco Systems, Inc", + "e4c767": "Intel Corporate", "e4c801": "BLU Products Inc", "e4c806": "Ceiec Electric Technology Inc.", "e4c90b": "Radwin", @@ -31880,6 +31909,7 @@ "e81da8": "Ruckus Wireless", "e81e92": "Huawei Device Co., Ltd.", "e820e2": "HUMAX Co., Ltd.", + "e822b8": "Shenzhen Skyworth Digital Technology CO., Ltd", "e82404": "Quectel Wireless Solutions Co.,Ltd.", "e824a6": "Juniper Networks", "e82689": "Aruba, a Hewlett Packard Enterprise Company", @@ -32084,6 +32114,7 @@ "e8c57a": "Ufispace Co., LTD.", "e8c74f": "Liteon Technology Corporation", "e8c7cf": "Wistron Neweb Corporation", + "e8c829": "Intel Corporate", "e8cac8": "Hui Zhou Gaoshengda Technology Co.,LTD", "e8cba1": "Nokia Corporation", "e8cbed": "Corp.", @@ -33205,6 +33236,7 @@ "f83880": "Apple, Inc.", "f83b1d": "Vantiva USA LLC", "f83b7e": "Huawei Device Co., Ltd.", + "f83c44": "SHENZHEN TRANSCHAN TECHNOLOGY LIMITED", "f83c80": "MITSUMI ELECTRIC CO.,LTD.", "f83cbf": "BOTATO ELECTRONICS SDN BHD", "f83d4e": "Softlink Automation System Co., Ltd", @@ -33481,6 +33513,7 @@ "f8fb2f": "Santur Corporation", "f8fce1": "Amazon Technologies Inc.", "f8fe5c": "Reciprocal Labs Corp", + "f8fe5e": "Intel Corporate", "f8fea8": "Technico Japan Corporation", "f8ff0b": "Electronic Technology Inc.", "f8ff5f": "Shenzhen Communication Technology Co.,Ltd", From c5582ef0cf0ffe09b24c2ec5867f6fa4e1f8d594 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jul 2023 11:52:55 -0400 Subject: [PATCH 32/37] Flat: latest data (2023-07-20T08:03:00.240Z) (#314) { "date": "2023-07-20T08:03:00.240Z", "files": [ { "name": "netutils/data_files/oui_mappings.py", "deltaBytes": 3766, "source": "https://standards-oui.ieee.org" } ] } Co-authored-by: flat-data --- netutils/data_files/oui_mappings.py | 209 +++++++++++++++++++--------- 1 file changed, 143 insertions(+), 66 deletions(-) diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 10abe756..3b24a80c 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -306,7 +306,7 @@ "00012d": "Komodo Technology", "00012e": "PC Partner Ltd.", "00012f": "Twinhead International Corp", - "000130": "Extreme Networks, Inc.", + "000130": "Extreme Networks Headquarters", "000131": "Bosch Security Systems, Inc.", "000132": "Dranetz - BMI", "000133": "KYOWA Electronic Instruments C", @@ -1176,7 +1176,7 @@ "000493": "Tsinghua Unisplendour Co., Ltd.", "000494": "Breezecom, Ltd.", "000495": "Tejas Networks India Limited", - "000496": "Extreme Networks, Inc.", + "000496": "Extreme Networks Headquarters", "000497": "MacroSystem Digital Video AG", "000498": "Mahi Networks", "000499": "Chino Corporation", @@ -1191,7 +1191,7 @@ "0004a2": "L.S.I. Japan Co., Ltd.", "0004a3": "Microchip Technology Inc.", "0004a4": "NetEnabled, Inc.", - "0004a5": "Barco Projection Systems NV", + "0004a5": "Barco NV", "0004a6": "SAF Tehnika Ltd.", "0004a7": "FabiaTech Corporation", "0004a8": "Broadmax Technologies, Inc.", @@ -4034,7 +4034,7 @@ "000fe7": "Lutron Electronics Co., Inc.", "000fe8": "Lobos, Inc.", "000fe9": "GW TECHNOLOGIES CO.,LTD.", - "000fea": "Giga-Byte Technology Co.,LTD.", + "000fea": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "000feb": "Cylon Controls", "000fec": "ARKUS Inc.", "000fed": "Anam Electronics Co., Ltd", @@ -6468,7 +6468,7 @@ "001974": "16063", "001975": "Beijing Huisen networks technology Inc", "001976": "Xipher Technologies, LLC", - "001977": "Extreme Networks, Inc.", + "001977": "Extreme Networks Headquarters", "001978": "Datum Systems, Inc.", "001979": "Nokia Danmark A/S", "00197a": "MAZeT GmbH", @@ -10717,7 +10717,7 @@ "0050c8": "Addonics Technologies, Inc.", "0050c9": "MASPRO DENKOH CORP.", "0050ca": "DZS Inc.", - "0050cb": "JETTER", + "0050cb": "Bucher Automation AG", "0050cc": "Seagate Cloud Systems Inc", "0050cd": "DIGIANSWER A/S", "0050ce": "LG INTERNATIONAL CORP.", @@ -12585,7 +12585,7 @@ "00db45": "THAMWAY CO.,LTD.", "00db70": "Apple, Inc.", "00dbdf": "Intel Corporate", - "00dcb2": "Extreme Networks, Inc.", + "00dcb2": "Extreme Networks Headquarters", "00dd00": "UNGERMANN-BASS INC.", "00dd01": "UNGERMANN-BASS INC.", "00dd02": "UNGERMANN-BASS INC.", @@ -12649,7 +12649,7 @@ "00e028": "APTIX CORPORATION", "00e029": "STANDARD MICROSYSTEMS CORP.", "00e02a": "TANDBERG TELEVISION AS", - "00e02b": "Extreme Networks, Inc.", + "00e02b": "Extreme Networks Headquarters", "00e02c": "AST COMPUTER", "00e02d": "InnoMediaLogic, Inc.", "00e02e": "SPC ELECTRONICS CORPORATION", @@ -12872,7 +12872,7 @@ "00e421": "Sony Interactive Entertainment Inc.", "00e5e4": "Sichuan Tianyi Comheart Telecom Co.,LTD", "00e5f1": "BUFFALO.INC", - "00e60e": "Extreme Networks, Inc.", + "00e60e": "Extreme Networks Headquarters", "00e63a": "Ruckus Wireless", "00e666": "ARIMA Communications Corp.", "00e6d3": "NIXDORF COMPUTER CORP.", @@ -13706,7 +13706,7 @@ "08e84f": "HUAWEI TECHNOLOGIES CO.,LTD", "08e9f6": "AMPAK Technology,Inc.", "08ea40": "SHENZHEN BILIAN ELECTRONIC CO.,LTD", - "08ea44": "Extreme Networks, Inc.", + "08ea44": "Extreme Networks Headquarters", "08eb29": "Jiangsu Huitong Group Co.,Ltd.", "08eb74": "HUMAX Co., Ltd.", "08ebed": "World Elite Technology Co.,LTD", @@ -13907,6 +13907,7 @@ "0c8c69": "Shenzhen elink smart Co., ltd", "0c8c8f": "Kamo Technology Limited", "0c8cdc": "Suunto Oy", + "0c8d7a": "RADiflow", "0c8d98": "TOP EIGHT IND CORP", "0c8dca": "Samsung Electronics Co.,Ltd", "0c8ddb": "Cisco Meraki", @@ -13929,6 +13930,7 @@ "0c9a3c": "Intel Corporate", "0c9a42": "FN-LINK TECHNOLOGY LIMITED", "0c9b13": "Shanghai Magic Mobile Telecommunication Co.Ltd.", + "0c9b78": "Extreme Networks Headquarters", "0c9d56": "Consort Controls Ltd", "0c9d92": "ASUSTek COMPUTER INC.", "0c9e91": "Sankosha Corporation", @@ -14035,6 +14037,7 @@ "0ceee6": "Hon Hai Precision Ind. Co.,Ltd.", "0cef7c": "AnaCom Inc", "0cefaf": "IEEE Registration Authority", + "0ceff6": "Silicon Laboratories", "0cf019": "Malgn Technology Co., Ltd.", "0cf0b4": "Globalsat International Technology Ltd", "0cf346": "Xiaomi Communications Co Ltd", @@ -14370,11 +14373,13 @@ "10e6ae": "Source Technologies, LLC", "10e77a": "STMicrolectronics International NV", "10e7c6": "Hewlett Packard", + "10e83a": "FIBERX DISTRIBUIDORA DE PRODUTOS DE TELECOMUNICACAO LTDA", "10e840": "CO., LTD.", "10e878": "Nokia", "10e8a7": "Wistron Neweb Corporation", "10e8ee": "PhaseSpace", "10e953": "Huawei Device Co., Ltd.", + "10e992": "INGRAM MICRO SERVICES", "10ea59": "Cisco SPVTG", "10ec81": "Samsung Electronics Co.,Ltd", "10eed9": "Canoga Perkins Corporation", @@ -14396,6 +14401,7 @@ "10fc54": "Shany Electronic Co., Ltd. ", "10fcb6": "mirusystems CO.,LTD", "10feed": "TP-LINK TECHNOLOGIES CO.,LTD.", + "10ffe0": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "1100aa": "Private", "111111": "Private", "140020": "Co.,Ltd. ", @@ -14816,6 +14822,7 @@ "1848be": "Amazon Technologies Inc.", "1848ca": "Murata Manufacturing Co., Ltd.", "1848d8": "Fastback Networks", + "1849f8": "Extreme Networks Headquarters", "184a53": "Apple, Inc.", "184a6f": "Alcatel-Lucent Shanghai Bell Co., Ltd", "184b0d": "Ruckus Wireless", @@ -14830,6 +14837,7 @@ "184f5d": "JRC Mobility Inc.", "18502a": "SOARNEX", "185207": "Sichuan Tianyi Comheart Telecom Co.,LTD", + "18523d": "Xiamen Jiwu Technology CO.,Ltd", "185253": "Pixord Corporation", "185282": "Fiberhome Telecommunication Technologies Co.,LTD", "185345": "Nokia", @@ -15301,6 +15309,7 @@ "1caa07": "Cisco Systems, Inc", "1cab01": "Innovolt", "1cab34": "New H3C Technologies Co., Ltd", + "1cab48": "TECNO MOBILE LIMITED", "1caba7": "Apple, Inc.", "1cabc0": "Hitron Technologies. Inc", "1cadd1": "Bosung Electronics Co., Ltd.", @@ -15402,6 +15411,7 @@ "200a0d": "IEEE Registration Authority", "200a5e": "Xiangshan Giant Eagle Technology Developing Co., Ltd.", "200b16": "Texas Instruments", + "200b74": "AzureWave Technology Inc.", "200bc5": "Cisco Systems, Inc", "200bc7": "HUAWEI TECHNOLOGIES CO.,LTD", "200bcf": "Nintendo Co.,Ltd", @@ -15535,7 +15545,7 @@ "206a94": "Hitron Technologies. Inc", "206aff": "Atlas Elektronik UK Limited", "206be7": "TP-LINK TECHNOLOGIES CO.,LTD.", - "206c8a": "Extreme Networks, Inc.", + "206c8a": "Extreme Networks Headquarters", "206d31": "FIREWALLA INC", "206e9c": "Samsung Electronics Co.,Ltd", "206fec": "Braemac CA LLC", @@ -15593,7 +15603,7 @@ "209be6": "Guangzhou Shiyuan Electronic Technology Company Limited", "209cb4": "Aruba, a Hewlett Packard Enterprise Company", "209e79": "Universal Electronics, Inc.", - "209ef7": "Extreme Networks, Inc.", + "209ef7": "Extreme Networks Headquarters", "20a171": "Amazon Technologies Inc.", "20a2e4": "Apple, Inc.", "20a2e7": "Lee-Dickens Ltd", @@ -15699,6 +15709,7 @@ "20f543": "Hui Zhou Gaoshengda Technology Co.,LTD", "20f597": "Maasiv, LLC", "20f77c": "vivo Mobile Communication Co., Ltd.", + "20f83b": "Nabu Casa, Inc.", "20f85e": "Delta Electronics", "20fabb": "Cambridge Executive Limited", "20fadb": "Co.,Ltd.", @@ -15758,7 +15769,7 @@ "241eeb": "Apple, Inc.", "241f2c": "Calsys, Inc.", "241fa0": "HUAWEI TECHNOLOGIES CO.,LTD", - "241fbd": "Extreme Networks, Inc.", + "241fbd": "Extreme Networks Headquarters", "2420c7": "Sagemcom Broadband SAS", "242124": "Nokia", "2421ab": "Sony Corporation", @@ -16153,6 +16164,7 @@ "286ed4": "HUAWEI TECHNOLOGIES CO.,LTD", "286f40": "Tonly Technology Co. Ltd ", "286f7f": "Cisco Systems, Inc", + "286fb9": "Nokia Shanghai Bell Co., Ltd.", "28704e": "Ubiquiti Inc", "287184": "Spire Payments", "2872c5": "Smartmatic Corp", @@ -16181,6 +16193,7 @@ "28840e": "silicon valley immigration service ", "2884fa": "SHARP Corporation", "28852d": "Touch Networks", + "2885bb": "Zen Exim Pvt. Ltd.", "2887ba": "TP-Link Corporation Limited", "288915": "CashGuard Sverige AB", "288a1c": "Juniper Networks", @@ -16591,6 +16604,7 @@ "2cab00": "HUAWEI TECHNOLOGIES CO.,LTD", "2cab25": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", "2cab33": "Texas Instruments", + "2cab46": "Ruckus Wireless", "2caba4": "Cisco SPVTG", "2cabeb": "Cisco Systems, Inc", "2cac44": "CONEXTOP", @@ -16782,6 +16796,7 @@ "304f00": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "304f75": "DZS Inc.", "305075": "GN Audio A/S", + "3050ce": "Xiaomi Communications Co Ltd", "3050fd": "Co.,Ltd", "3051f8": "BYK-Gardner GmbH", "30525a": "NST Co., LTD", @@ -17159,7 +17174,7 @@ "3484e4": "Texas Instruments", "348511": "Shenzhen Skyworth Digital Technology CO., Ltd", "348518": "Espressif Inc.", - "348584": "Extreme Networks, Inc.", + "348584": "Extreme Networks Headquarters", "34862a": "Heinz Lackmann GmbH & Co KG", "34865d": "Espressif Inc.", "34873d": "Quectel Wireless Solutions Co.,Ltd.", @@ -17550,6 +17565,7 @@ "38ab16": "NPO RTT LLC", "38ab41": "Texas Instruments", "38ac3d": "Nephos Inc", + "38ad2b": "Hitron Technologies. Inc", "38ad8e": "New H3C Technologies Co., Ltd", "38adbe": "New H3C Technologies Co., Ltd", "38af29": "Zhejiang Dahua Technology Co., Ltd.", @@ -17610,6 +17626,7 @@ "38e08e": "Mitsubishi Electric Corporation", "38e1aa": "zte corporation", "38e26e": "ShenZhen Sweet Rain Electronics Co.,Ltd.", + "38e2ca": "Katun Corporation", "38e2dd": "zte corporation", "38e39f": "Motorola Mobility LLC, a Lenovo Company", "38e3c5": "Taicang T&W Electronics", @@ -17690,6 +17707,7 @@ "3c0e23": "Cisco Systems, Inc", "3c0fc1": "KBC Networks", "3c1040": "daesung network", + "3c1060": "Fiberhome Telecommunication Technologies Co.,LTD", "3c106f": "ALBAHITH TECHNOLOGIES ", "3c10e6": "PHAZR Inc.", "3c11b2": "Fraunhofer FIT", @@ -18031,7 +18049,7 @@ "4016fa": "EKM Metering", "4017e2": "INTAI TECHNOLOGY CORP.", "4017f6": "TKH SECURITY,S.L.U.", - "4018b1": "Extreme Networks, Inc.", + "4018b1": "Extreme Networks Headquarters", "4018d7": "Smartronix, Inc.", "401920": "Movon Corporation", "401a58": "Wistron Neweb Corporation", @@ -18157,8 +18175,9 @@ "408432": "Microchip Technology Inc.", "408493": "Clavister AB", "40862e": "JDM MOBILE INTERNET SOLUTION CO., LTD.", + "4086cb": "D-Link Corporation", "408805": "Motorola Mobility LLC, a Lenovo Company", - "40882f": "Extreme Networks, Inc.", + "40882f": "Extreme Networks Headquarters", "4088e0": "Beijing Ereneben Information Technology Limited Shenzhen Branch", "4089a8": "WiredIQ, LLC", "408a9a": "TITENG CO., Ltd.", @@ -18229,6 +18248,7 @@ "40b7fc": "Phyplus Microelectronics Limited", "40b837": "Sony Corporation", "40b89a": "Hon Hai Precision Ind. Co.,Ltd.", + "40b8c2": "OSMOZIS", "40b93c": "Hewlett Packard Enterprise", "40ba61": "ARIMA Communications Corp.", "40bc60": "Apple, Inc.", @@ -18281,7 +18301,7 @@ "40e171": "Jiangsu Huitong Group Co.,Ltd.", "40e1e4": "Nokia Solutions and Networks GmbH & Co. KG", "40e230": "AzureWave Technology Inc.", - "40e317": "Extreme Networks, Inc.", + "40e317": "Extreme Networks Headquarters", "40e3d6": "Aruba, a Hewlett Packard Enterprise Company", "40e64b": "Apple, Inc.", "40e730": "DEY Storage Systems, Inc.", @@ -18389,6 +18409,7 @@ "44356f": "Neterix Ltd", "443583": "Apple, Inc.", "4435d3": "GD Midea Air-Conditioning Equipment Co.,Ltd.", + "44365d": "Shenzhen HippStor Technology Co., Ltd", "443708": "MRV Comunications", "443719": "2 Save Energy Ltd", "44376f": "Young Electric Sign Co", @@ -18600,6 +18621,7 @@ "44d832": "AzureWave Technology Inc.", "44d878": "Hui Zhou Gaoshengda Technology Co.,LTD", "44d884": "Apple, Inc.", + "44d980": "EVERYBOT INC.", "44d9e7": "Ubiquiti Inc", "44da30": "Apple, Inc.", "44db60": "Nanjing Baihezhengliu Technology Co., Ltd", @@ -18647,6 +18669,7 @@ "44fda3": "Everysight LTD.", "44fe3b": "Arcadyan Corporation", "44ffba": "zte corporation", + "480020": "Aruba, a Hewlett Packard Enterprise Company", "480031": "HUAWEI TECHNOLOGIES CO.,LTD", "480033": "Vantiva USA LLC", "48007d": "DTS ELEKTRONIK SAN. TIC. LTD. STI.", @@ -18725,6 +18748,7 @@ "483e5e": "TECHNOLOGIES CORPORATION", "483fda": "Espressif Inc.", "483fe9": "HUAWEI TECHNOLOGIES CO.,LTD", + "48417b": "Nokia Solutions and Networks GmbH & Co. KG", "48435a": "HUAWEI TECHNOLOGIES CO.,LTD", "48437c": "Apple, Inc.", "4843dd": "Amazon Technologies Inc.", @@ -18847,7 +18871,7 @@ "4898ca": "Sichuan AI-Link Technology Co., Ltd.", "489a42": "Technomate Ltd", "489a5b": "Shenzhen iComm Semiconductor CO.,LTD", - "489bd5": "Extreme Networks, Inc.", + "489bd5": "Extreme Networks Headquarters", "489be0": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "489be2": "SCI Innovations Ltd", "489d18": "Flashbay Limited", @@ -19028,7 +19052,7 @@ "4c2219": "YUANFUDAO HK LIMTED", "4c2258": "cozybit, Inc.", "4c22f3": "Arcadyan Corporation", - "4c231a": "Extreme Networks, Inc.", + "4c231a": "Extreme Networks Headquarters", "4c2498": "Texas Instruments", "4c24ce": "Sichuan AI-Link Technology Co., Ltd.", "4c2578": "Nokia Corporation", @@ -19102,6 +19126,7 @@ "4c6255": "SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.", "4c627b": "SmartCow AI Technologies Taiwan Ltd.", "4c62cd": "Nokia", + "4c62df": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "4c6371": "Xiaomi Communications Co Ltd", "4c63ad": "Huawei Device Co., Ltd.", "4c63eb": "Ltd", @@ -19251,6 +19276,7 @@ "4cd2fb": "UNIONMAN TECHNOLOGY CO.,LTD", "4cd3af": "HMD Global Oy", "4cd577": "CHONGQING FUGUI ELECTRONICS CO.,LTD.", + "4cd587": "Aruba, a Hewlett Packard Enterprise Company", "4cd629": "HUAWEI TECHNOLOGIES CO.,LTD", "4cd637": "Qsono Electronics Co., Ltd", "4cd717": "Dell Inc.", @@ -19262,6 +19288,7 @@ "4cdd7d": "LHP Telematics LLC", "4cdf3d": "TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD", "4ce0db": "Xiaomi Communications Co Ltd", + "4ce136": "Private", "4ce173": "IEEE Registration Authority", "4ce175": "Cisco Systems, Inc", "4ce176": "Cisco Systems, Inc", @@ -19688,6 +19715,7 @@ "5412cb": "HUAWEI TECHNOLOGIES CO.,LTD", "541310": "HUAWEI TECHNOLOGIES CO.,LTD", "541379": "Hon Hai Precision Ind. Co.,Ltd.", + "5413ca": "ITEL MOBILE LIMITED", "541473": "Wingtech Group (HongKong)Limited", "5414a7": "Nanjing Qinheng Microelectronics Co., Ltd.", "5414f3": "Intel Corporate", @@ -19889,6 +19917,7 @@ "54be53": "zte corporation", "54bef7": "PEGATRON CORPORATION", "54bf64": "Dell Inc.", + "54c078": "Infinix mobility limited", "54c250": "Iskratel d.o.o.", "54c33e": "Ciena Corporation", "54c415": "Hangzhou Hikvision Digital Technology Co.,Ltd.", @@ -20063,8 +20092,8 @@ "5856c2": "HUAWEI TECHNOLOGIES CO.,LTD", "5856e8": "ARRIS Group, Inc.", "58570d": "Danfoss Solar Inverters", - "5858cd": "Extreme Networks, Inc.", - "5859c2": "Extreme Networks, Inc.", + "5858cd": "Extreme Networks Headquarters", + "5859c2": "Extreme Networks Headquarters", "585b69": "TVT CO., LTD", "585ff6": "zte corporation", "58605f": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -20277,7 +20306,7 @@ "5c0c0e": "Guizhou Huaxintong Semiconductor Technology Co Ltd", "5c0cbb": "CELIZION Inc.", "5c0ce6": "Nintendo Co.,Ltd", - "5c0e8b": "Extreme Networks, Inc.", + "5c0e8b": "Extreme Networks Headquarters", "5c0ffb": "Amino Communications Ltd", "5c101e": "zte corporation", "5c10c5": "Samsung Electronics Co.,Ltd", @@ -20320,6 +20349,7 @@ "5c32c5": "Teracom Ltd.", "5c3327": "Spazio Italia srl", "5c335c": "Swissphone Telecom AG", + "5c337b": "Google, Inc.", "5c338e": "Alpha Networks Inc.", "5c3400": "Hisense Electric Co.,Ltd", "5c345b": "Hangzhou Hikvision Digital Technology Co.,Ltd.", @@ -21040,6 +21070,7 @@ "64557f": "NSFOCUS Information Technology Co., Ltd.", "6455b1": "ARRIS Group, Inc.", "645601": "TP-LINK TECHNOLOGIES CO.,LTD.", + "645725": "Hui Zhou Gaoshengda Technology Co.,LTD", "6457e5": "Beijing Royaltech Co.,Ltd", "6458ad": "China Mobile IOT Company Limited", "6459f8": "Vodafone Omnitel B.V.", @@ -21579,7 +21610,7 @@ "6c0273": "Shenzhen Jin Yun Video Equipment Co., Ltd.", "6c02e0": "HP Inc.", "6c0309": "Cisco Systems, Inc", - "6c0370": "Extreme Networks, Inc.", + "6c0370": "Extreme Networks Headquarters", "6c03b5": "Cisco Systems, Inc", "6c0460": "RBH Access Technologies Inc.", "6c047a": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -21748,6 +21779,7 @@ "6c8336": "Samsung Electronics Co.,Ltd", "6c8366": "Nanjing SAC Power Grid Automation Co., Ltd.", "6c8686": "Technonia", + "6c8720": "New H3C Technologies Co., Ltd", "6c8814": "Intel Corporate", "6c8aec": "Nantong Coship Electronics Co., Ltd.", "6c8b2f": "zte corporation", @@ -22393,7 +22425,7 @@ "74650c": "Apple, Inc.", "7465d1": "Atlinks", "746630": "T:mi Ytti", - "7467f7": "Extreme Networks, Inc.", + "7467f7": "Extreme Networks Headquarters", "74694a": "Sichuan Tianyi Comheart Telecom Co.,LTD", "746a3a": "Aperi Corporation", "746a89": "Rezolt Corporation", @@ -22714,6 +22746,7 @@ "7845b3": "Huawei Device Co., Ltd.", "7845c4": "Dell Inc.", "78465c": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", + "78465f": "Fiberhome Telecommunication Technologies Co.,LTD", "78467d": "SKAIChips", "7846c4": "DAEHAP HYPER-TECH", "7846d4": "Samsung Electronics Co.,Ltd", @@ -22787,7 +22820,7 @@ "787a6f": "Juice Technology AG", "787b8a": "Apple, Inc.", "787d48": "ITEL MOBILE LIMITED", - "787d53": "Extreme Networks, Inc.", + "787d53": "Extreme Networks Headquarters", "787df3": "Sterlite Technologies Limited", "787e61": "Apple, Inc.", "787f62": "GiK mbH", @@ -22824,7 +22857,7 @@ "7895eb": "ITEL MOBILE LIMITED", "789682": "zte corporation", "789684": "ARRIS Group, Inc.", - "7896a3": "Extreme Networks, Inc.", + "7896a3": "Extreme Networks Headquarters", "7897c3": "DINGXIN INFORMATION TECHNOLOGY CO.,LTD", "7898e8": "D-Link International", "7898fd": "Q9 Networks Inc.", @@ -22966,6 +22999,7 @@ "78f1c6": "Cisco Systems, Inc", "78f235": "Sichuan AI-Link Technology Co., Ltd.", "78f238": "Samsung Electronics Co.,Ltd", + "78f276": "Inc.", "78f29e": "PEGATRON CORPORATION", "78f557": "HUAWEI TECHNOLOGIES CO.,LTD", "78f5e5": "BEGA Gantenbrink-Leuchten KG", @@ -23181,7 +23215,7 @@ "7c942a": "HUAWEI TECHNOLOGIES CO.,LTD", "7c949f": "Shenzhen iComm Semiconductor CO.,LTD", "7c94b2": "Philips Healthcare PCCI", - "7c95b1": "Extreme Networks, Inc.", + "7c95b1": "Extreme Networks Headquarters", "7c95f3": "Cisco Systems, Inc", "7c96d2": "Fihonest communication co.,Ltd", "7c9763": "Openmatics s.r.o.", @@ -23217,6 +23251,7 @@ "7cb232": "Hui Zhou Gaoshengda Technology Co.,LTD", "7cb25c": "Acacia Communications", "7cb27d": "Intel Corporate", + "7cb30a": "zte corporation", "7cb37b": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", "7cb542": "ACES Technology", "7cb566": "Intel Corporate", @@ -23531,7 +23566,7 @@ "80929f": "Apple, Inc.", "809393": "Xapt GmbH", "80946c": "TOKYO RADAR CORPORATION", - "809562": "Extreme Networks, Inc.", + "809562": "Extreme Networks Headquarters", "809621": "Lenovo", "8096b1": "ARRIS Group, Inc.", "8096ca": "Hon Hai Precision Ind. Co.,Ltd.", @@ -23574,6 +23609,7 @@ "80b95c": "ELFTECH Co., Ltd.", "80b97a": "eero inc.", "80b989": "Apple, Inc.", + "80ba16": "Micas Networks Inc.", "80baac": "TeleAdapt Ltd", "80bae6": "Neets", "80bbeb": "Satmap Systems Ltd", @@ -23726,6 +23762,7 @@ "843095": "Hon Hai Precision IND.CO.,LTD", "8430ce": "Shenzhen Jaguar Microsystems Co., Ltd", "8430e5": "SkyHawke Technologies, LLC", + "8431a8": "Wuhan Funshion Online Technologies Co.,Ltd", "84326f": "GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD ", "8432ea": "ANHUI WANZTEN P&T CO., LTD", "843497": "Hewlett Packard", @@ -23826,6 +23863,7 @@ "8485e6": "Guangdong Asano Technology CO.,Ltd.", "848687": "weiyuantechnology", "8486f3": "Greenvity Communications", + "8487ff": "Shenzhen Skyworth Digital Technology CO., Ltd", "8488e1": "Apple, Inc.", "8489ad": "Apple, Inc.", "8489ec": "IEEE Registration Authority", @@ -24014,6 +24052,7 @@ "8817a3": "Sdn. Bhd.", "8818ae": "Tamron Co., Ltd", "881908": "Apple, Inc.", + "881a14": "Silicon Laboratories", "881b99": "SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.", "881c95": "ITEL MOBILE LIMITED", "881dfc": "Cisco Systems, Inc", @@ -24099,7 +24138,7 @@ "885a06": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "885a85": "Wistron Neweb Corporation", "885a92": "Cisco Systems, Inc", - "885bdd": "Extreme Networks, Inc.", + "885bdd": "Extreme Networks Headquarters", "885c47": "Alcatel Lucent", "885d90": "IEEE Registration Authority", "885dfb": "zte corporation", @@ -24145,7 +24184,7 @@ "88797e": "Motorola Mobility LLC, a Lenovo Company", "887a31": "Velankani Electronics Pvt. Ltd.", "887b2c": "zte corporation", - "887e25": "Extreme Networks, Inc.", + "887e25": "Extreme Networks Headquarters", "887f03": "Comper Technology Investment Limited", "888187": "Umeox Innovations Co.,Ltd", "8881b9": "Huawei Device Co., Ltd.", @@ -24396,7 +24435,7 @@ "8c477f": "NambooSolution", "8c47be": "Dell Inc.", "8c4962": "Roku, Inc", - "8c497a": "Extreme Networks, Inc.", + "8c497a": "Extreme Networks Headquarters", "8c49b6": "vivo Mobile Communication Co., Ltd.", "8c4aee": "GIGA TMS INC", "8c4b14": "Espressif Inc.", @@ -24486,6 +24525,7 @@ "8c8126": "ARCOM", "8c8172": "Sichuan Tianyi Comheart Telecom Co.,LTD", "8c82a8": "Insigma Technology Co.,Ltd", + "8c8394": "Arcadyan Corporation", "8c839d": "SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD", "8c83df": "Nokia", "8c83e1": "Samsung Electronics Co.,Ltd", @@ -24807,6 +24847,7 @@ "90735a": "Motorola Mobility LLC, a Lenovo Company", "90749d": "IRay Technology Co., Ltd.", "9075bc": "Nokia Shanghai Bell Co., Ltd.", + "9075de": "Zebra Technologies Inc.", "90769f": "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", "9077ee": "Cisco Systems, Inc", "907841": "Intel Corporate", @@ -24873,6 +24914,7 @@ "909f33": "EFM Networks", "909f43": "Accutron Instruments Inc.", "90a137": "Beijing Splendidtel Communication Technology Co,. Ltd", + "90a1ba": "PNetworks Electronics Information ", "90a210": "United Telecoms Ltd", "90a25b": "Apple, Inc.", "90a2da": "GHEO SA", @@ -24905,7 +24947,7 @@ "90b622": "Samsung Electronics Co.,Ltd", "90b67a": "Shenzhen Skyworth Digital Technology CO., Ltd", "90b686": "Murata Manufacturing Co., Ltd.", - "90b832": "Extreme Networks, Inc.", + "90b832": "Extreme Networks Headquarters", "90b8d0": "Joyent, Inc.", "90b8e0": "SHENZHEN YANRAY TECHNOLOGY CO.,LTD", "90b931": "Apple, Inc.", @@ -25080,6 +25122,7 @@ "94434d": "Ciena Corporation", "944444": "LG Innotek", "944452": "Belkin International Inc.", + "944560": "Google, Inc.", "944696": "BaudTec Corporation", "944788": "HUAWEI TECHNOLOGIES CO.,LTD", "9447b0": "BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD", @@ -25172,7 +25215,7 @@ "949901": "Shenzhen YITOA Digital Appliance CO.,LTD", "949990": "VTC Telecommunications", "949aa9": "Microsoft Corporation", - "949b2c": "Extreme Networks, Inc.", + "949b2c": "Extreme Networks Headquarters", "949bfd": "Trans New Technology, Inc.", "949c55": "Alta Data Technologies", "949d57": "Panasonic do Brasil Limitada", @@ -25752,7 +25795,7 @@ "9c5c8d": "FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS LTDA", "9c5c8e": "ASUSTek COMPUTER INC.", "9c5cf9": "Sony Corporation", - "9c5d12": "Extreme Networks, Inc.", + "9c5d12": "Extreme Networks Headquarters", "9c5d95": "VTC Electronics Corp.", "9c5e73": "Calibre UK LTD", "9c5f5a": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -26445,6 +26488,7 @@ "a46e79": "DFT System Co.Ltd", "a470d6": "Motorola Mobility LLC, a Lenovo Company", "a47174": "HUAWEI TECHNOLOGIES CO.,LTD", + "a473ab": "Extreme Networks Headquarters", "a475b9": "Samsung Electronics Co.,Ltd", "a47733": "Google, Inc.", "a47758": "Ningbo Freewings Technologies Co.,Ltd", @@ -26563,7 +26607,7 @@ "a4c6f0": "Apple, Inc.", "a4c74b": "Huawei Device Co., Ltd.", "a4c7de": "Co.,Ltd.", - "a4c7f6": "Extreme Networks, Inc.", + "a4c7f6": "Extreme Networks Headquarters", "a4c939": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "a4caa0": "HUAWEI TECHNOLOGIES CO.,LTD", "a4cc32": "Inficomm Co., Ltd", @@ -26618,7 +26662,7 @@ "a4e975": "Apple, Inc.", "a4e991": "SISTEMAS AUDIOVISUALES ITELSIS S.L.", "a4e9a3": "Honest Technology Co., Ltd", - "a4ea8e": "Extreme Networks, Inc.", + "a4ea8e": "Extreme Networks Headquarters", "a4ebd3": "Samsung Electronics Co.,Ltd", "a4ed43": "IEEE Registration Authority", "a4ed4e": "ARRIS Group, Inc.", @@ -26709,6 +26753,7 @@ "a84041": "Dragino Technology Co., Limited", "a8407d": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "a84122": "Information Technology Co.,Ltd.", + "a842a1": "TP-Link Corporation Limited", "a842a7": "Jiangsu Huitong Group Co.,Ltd.", "a842e3": "Espressif Inc.", "a84397": "Innogrit Corporation", @@ -26881,7 +26926,7 @@ "a8c252": "Huawei Device Co., Ltd.", "a8c266": "HUMAX Co., Ltd.", "a8c56f": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - "a8c647": "Extreme Networks, Inc.", + "a8c647": "Extreme Networks Headquarters", "a8c83a": "HUAWEI TECHNOLOGIES CO.,LTD", "a8c87f": "Roqos, Inc.", "a8c98a": "New H3C Technologies Co., Ltd", @@ -27050,7 +27095,7 @@ "ac4bc8": "Juniper Networks", "ac4ca5": "Vantiva USA LLC", "ac4d16": "Texas Instruments", - "ac4dd9": "Extreme Networks, Inc.", + "ac4dd9": "Extreme Networks Headquarters", "ac4e2e": "Shenzhen JingHanDa Electronics Co.Ltd", "ac4e65": "Fiberhome Telecommunication Technologies Co.,LTD", "ac4e91": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27281,7 +27326,7 @@ "aceb51": "Universal Electronics, Inc.", "acec80": "ARRIS Group, Inc.", "acec85": "eero inc.", - "aced32": "Extreme Networks, Inc.", + "aced32": "Extreme Networks Headquarters", "aced5c": "Intel Corporate", "acee3b": "6harmonics Inc", "acee64": "Shenzhen SuperElectron Technology Co.,Ltd.", @@ -27314,8 +27359,10 @@ "b009d3": "Avizia", "b009da": "Ring Solutions", "b00ad5": "zte corporation", + "b00c9d": "Quectel Wireless Solutions Co.,Ltd.", "b00cd1": "Hewlett Packard", "b01041": "Hon Hai Precision Ind. Co.,Ltd.", + "b0104b": "Fiberhome Telecommunication Technologies Co.,LTD", "b010a0": "Texas Instruments", "b01203": "Dynamics Hong Kong Limited", "b01266": "Futaba-Kikaku", @@ -27341,7 +27388,7 @@ "b025aa": "Private", "b02628": "Broadcom Limited", "b02680": "Cisco Systems, Inc", - "b027cf": "Extreme Networks, Inc.", + "b027cf": "Extreme Networks Headquarters", "b0285b": "JUHUA Technology Inc.", "b02a1f": "Wingtech Group (HongKong)Limited", "b02a43": "Google, Inc.", @@ -27627,6 +27674,7 @@ "b40421": "zte corporation", "b4055d": "Inspur Electronic Information Industry Co.,Ltd.", "b40566": "SP Best Corporation Co., LTD.", + "b405a1": "Xiaomi Communications Co Ltd", "b407f9": "SAMSUNG ELECTRO MECHANICS CO., LTD.", "b40832": "TC Communications", "b40931": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27673,7 +27721,7 @@ "b42a39": "ORBIT MERRET, spol. s r. o.", "b42c92": "Zhejiang Weirong Electronic Co., Ltd", "b42cbe": "Direct Payment Solutions Limited", - "b42d56": "Extreme Networks, Inc.", + "b42d56": "Extreme Networks Headquarters", "b42e99": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "b42ef8": "Eline Technology co.Ltd", "b43052": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -27722,6 +27770,7 @@ "b452a9": "Texas Instruments", "b45459": "Information Technology Co., Ltd.", "b45570": "Borea", + "b4565d": "Corp.", "b456b9": "Teraspek Technologies Co.,Ltd", "b456e3": "Apple, Inc.", "b456fa": "IOPSYS Software Solutions", @@ -27860,7 +27909,7 @@ "b4c4fc": "Xiaomi Communications Co Ltd", "b4c62e": "Molex CMS", "b4c6f8": "Axilspot Communication", - "b4c799": "Extreme Networks, Inc.", + "b4c799": "Extreme Networks Headquarters", "b4c810": "Umpi srl", "b4c9b9": "Sichuan AI-Link Technology Co., Ltd.", "b4cb57": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -27879,6 +27928,7 @@ "b4d286": "Telechips, Inc.", "b4d5bd": "Intel Corporate", "b4d64e": "Caldero Limited", + "b4d7db": "New H3C Technologies Co., Ltd", "b4d8a9": "BetterBots", "b4d8de": "iota Computing, Inc.", "b4db91": "CELESTICA INC.", @@ -28019,10 +28069,11 @@ "b847c6": "SanJet Technology Corp.", "b848aa": "EM Microelectronic", "b8496d": "Apple, Inc.", + "b84c87": "IEEE Registration Authority", "b84d43": "HUNAN FN-LINK TECHNOLOGY LIMITED", "b84dee": "Hisense broadband multimedia technology Co.,Ltd", "b84fd5": "Microsoft Corporation", - "b85001": "Extreme Networks, Inc.", + "b85001": "Extreme Networks Headquarters", "b850d8": "Beijing Xiaomi Mobile Software Co., Ltd", "b851a9": "Nokia", "b853ac": "Apple, Inc.", @@ -28078,7 +28129,7 @@ "b87bd4": "Google, Inc.", "b87c6f": "Management Ltd.", "b87cd0": "Huawei Device Co., Ltd.", - "b87cf2": "Extreme Networks, Inc.", + "b87cf2": "Extreme Networks Headquarters", "b87ee5": "Intelbras", "b88035": "Shenzhen Qihu Intelligent Technology Company Limited", "b8804f": "Texas Instruments", @@ -28574,7 +28625,7 @@ "bcf1f2": "Cisco Systems, Inc", "bcf292": "PLANTRONICS, INC.", "bcf2af": "devolo AG", - "bcf310": "Extreme Networks, Inc.", + "bcf310": "Extreme Networks Headquarters", "bcf45f": "zte corporation", "bcf499": "Rockwell Automation", "bcf4d4": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", @@ -28697,6 +28748,7 @@ "c057bc": "Avaya Inc", "c058a7": "Pico Systems Co., Ltd.", "c05b44": "Beijing Xiaomi Mobile Software Co., Ltd", + "c05d39": "Jiangsu Huitong Group Co.,Ltd.", "c05e6f": "V. Stonkaus firma Kodinis Raktas", "c05e79": "SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD", "c06118": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -28923,7 +28975,7 @@ "c41234": "Apple, Inc.", "c412ec": "HUAWEI TECHNOLOGIES CO.,LTD", "c412f5": "D-Link International", - "c413e2": "Extreme Networks, Inc.", + "c413e2": "Extreme Networks Headquarters", "c41411": "Apple, Inc.", "c4143c": "Cisco Systems, Inc", "c414a2": "Cisco Meraki", @@ -29344,7 +29396,7 @@ "c850e9": "Raisecom Technology CO., LTD", "c85142": "Samsung Electronics Co.,Ltd", "c85195": "HUAWEI TECHNOLOGIES CO.,LTD", - "c851fb": "Extreme Networks, Inc.", + "c851fb": "Extreme Networks Headquarters", "c85261": "ARRIS Group, Inc.", "c853e1": "Beijing Bytedance Network Technology Co., Ltd", "c8544b": "Zyxel Communications Corporation", @@ -29358,6 +29410,7 @@ "c85b76": "Electronics Technology co., ltd", "c85ba0": "Shenzhen Qihu Intelligent Technology Company Limited", "c85ccc": "Beijing Xiaomi Mobile Software Co., Ltd", + "c85ce2": "IEEE Registration Authority", "c85d38": "HUMAX Co., Ltd.", "c85ea9": "Intel Corporate", "c86000": "ASUSTek COMPUTER INC.", @@ -29366,8 +29419,8 @@ "c863fc": "ARRIS Group, Inc.", "c864c7": "zte corporation", "c8662c": "Beijing Haitai Fangyuan High Technology Co,.Ltd.", - "c8665d": "Extreme Networks, Inc.", - "c8675e": "Extreme Networks, Inc.", + "c8665d": "Extreme Networks Headquarters", + "c8675e": "Extreme Networks Headquarters", "c868de": "Huawei Device Co., Ltd.", "c869cd": "Apple, Inc.", "c86bbc": "IEEE Registration Authority", @@ -29479,7 +29532,7 @@ "c8bd4d": "Samsung Electronics Co.,Ltd", "c8bd69": "Samsung Electronics Co.,Ltd", "c8be19": "D-Link International", - "c8be35": "Extreme Networks, Inc.", + "c8be35": "Extreme Networks Headquarters", "c8bf4c": "Beijing Xiaomi Mobile Software Co., Ltd", "c8bffe": "Huawei Device Co., Ltd.", "c8c126": "ZPM Industria e Comercio Ltda", @@ -29595,6 +29648,7 @@ "cc0df2": "Motorola Mobility LLC, a Lenovo Company", "cc10a3": "Beijing Nan Bao Technology Co., Ltd.", "cc14a6": "Yichun MyEnergy Domain, Inc", + "cc14bc": "Edifier International", "cc1531": "Intel Corporate", "cc167e": "Cisco Systems, Inc", "cc187b": "Manzanita Systems, Inc.", @@ -29830,6 +29884,7 @@ "cccc77": "Zaram Technology. Inc.", "cccc81": "HUAWEI TECHNOLOGIES CO.,LTD", "cccccc": "Silicon Laboratories", + "ccccea": "PHOENIX CONTACT Electronics GmbH", "cccd64": "SM-Electronic GmbH", "ccce1e": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "ccce40": "Janteq Corp", @@ -29838,6 +29893,7 @@ "ccd281": "Apple, Inc.", "ccd29b": "Shenzhen Bopengfa Elec&Technology CO.,Ltd", "ccd31e": "IEEE Registration Authority", + "ccd342": "Cisco Systems, Inc", "ccd39d": "IEEE Registration Authority", "ccd3c1": "Vestel Elektronik San ve Tic. A.S.", "ccd3e2": "Jiangsu Yinhe Electronics Co.,Ltd.", @@ -29974,6 +30030,7 @@ "d040ef": "Murata Manufacturing Co., Ltd.", "d041c9": "Fiberhome Telecommunication Technologies Co.,LTD", "d0431e": "Dell Inc.", + "d04433": "Clourney Semiconductor", "d046dc": "Southwest Research Institute", "d047c1": "Elma Electronic AG", "d0484f": "Nokia Solutions and Networks GmbH & Co. KG", @@ -30075,6 +30132,7 @@ "d08cb5": "Texas Instruments", "d08cff": "UPWIS AB", "d08e79": "Dell Inc.", + "d09168": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "d09200": "FiRa Consortium", "d0929e": "Microsoft Corporation", "d092fa": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -30163,6 +30221,7 @@ "d0dad7": "Apple, Inc.", "d0db32": "Nokia Corporation", "d0dbb7": "Casa Systems", + "d0dc2c": "Cisco Systems, Inc", "d0dd49": "Juniper Networks", "d0dd7c": "zte corporation", "d0df9a": "Liteon Technology Corporation", @@ -30437,6 +30496,7 @@ "d4a02a": "Cisco Systems, Inc", "d4a148": "HUAWEI TECHNOLOGIES CO.,LTD", "d4a33d": "Apple, Inc.", + "d4a38b": "ELE(GROUP)CO.,LTD", "d4a3eb": "Shenzhen iComm Semiconductor CO.,LTD", "d4a425": "SMAX Technology Co., Ltd.", "d4a499": "InView Technology Corporation", @@ -30644,6 +30704,7 @@ "d842ac": "Shanghai Feixun Communication Co.,Ltd.", "d842e2": "Canary Connect, Inc.", "d843ae": "Micro-Star INTL CO., LTD.", + "d843ea": "SY Electronics Ltd", "d843ed": "Suzuken", "d8445c": "DEV Tecnologia Ind Com Man Eq LTDA", "d8452b": "Sdn. Bhd.", @@ -30668,7 +30729,7 @@ "d853bc": "Lenovo Information Products (Shenzhen)Co.,Ltd", "d8543a": "Texas Instruments", "d85482": "Oxit, LLC", - "d854a2": "Extreme Networks, Inc.", + "d854a2": "Extreme Networks Headquarters", "d85575": "Samsung Electronics Co.,Ltd", "d855a3": "zte corporation", "d857ef": "Samsung Electronics Co.,Ltd", @@ -30731,7 +30792,7 @@ "d880dc": "Huawei Device Co., Ltd.", "d881ce": "AHN INC.", "d88332": "TaiXin Semiconductor Co., Ltd", - "d88466": "Extreme Networks, Inc.", + "d88466": "Extreme Networks Headquarters", "d8860b": "IEEE Registration Authority", "d887d5": "Leadcore Technology CO.,LTD", "d88863": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -30940,7 +31001,7 @@ "dc215c": "Intel Corporate", "dc21b9": "Sentec Co.Ltd", "dc21e2": "HUAWEI TECHNOLOGIES CO.,LTD", - "dc233b": "Extreme Networks, Inc.", + "dc233b": "Extreme Networks Headquarters", "dc2727": "Huawei Device Co., Ltd.", "dc2834": "HAKKO Corporation", "dc2919": "Technology Ltd, Co.", @@ -31123,7 +31184,7 @@ "dcb72e": "Xiaomi Communications Co Ltd", "dcb7ac": "Aruba, a Hewlett Packard Enterprise Company", "dcb7fc": "Ltd", - "dcb808": "Extreme Networks, Inc.", + "dcb808": "Extreme Networks Headquarters", "dcbb96": "Full Solution Telecom", "dcbd7a": "Guangzhou Shiyuan Electronic Technology Company Limited", "dcbdcc": "Quectel Wireless Solutions Co.,Ltd.", @@ -31173,7 +31234,7 @@ "dcdb27": "Huawei Device Co., Ltd.", "dcdb70": "Tonfunk Systementwicklung und Service GmbH", "dcdc07": "TRP Systems BV", - "dcdcc3": "Extreme Networks, Inc.", + "dcdcc3": "Extreme Networks Headquarters", "dcdce2": "Samsung Electronics Co.,Ltd", "dcdd24": "Energica Motor Company SpA", "dcde4f": "Gionee Communication Equipment Co Ltd ", @@ -31187,7 +31248,7 @@ "dce533": "IEEE Registration Authority", "dce55b": "Google, Inc.", "dce578": "Experimental Factory of Scientific Engineering and Special Design Department", - "dce650": "Extreme Networks, Inc.", + "dce650": "Extreme Networks Headquarters", "dce71c": "AUG Elektronik GmbH", "dce838": "Limited", "dce994": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", @@ -31199,6 +31260,7 @@ "dced83": "Beijing Xiaomi Mobile Software Co., Ltd", "dced84": "Haverford Systems Inc", "dcee06": "HUAWEI TECHNOLOGIES CO.,LTD", + "dcee14": "ADT Technology", "dcef09": "NETGEAR", "dcef80": "HUAWEI TECHNOLOGIES CO.,LTD", "dcefca": "Murata Manufacturing Co., Ltd.", @@ -31256,7 +31318,7 @@ "e01995": "Nutanix", "e019d8": "BH TECHNOLOGIES", "e01aea": "Allied Telesis, Inc.", - "e01c41": "Extreme Networks, Inc.", + "e01c41": "Extreme Networks Headquarters", "e01cee": "Bravo Tech, Inc.", "e01cfc": "D-Link International", "e01d38": "Beijing HuaqinWorld Technology Co.,Ltd", @@ -31329,6 +31391,7 @@ "e04b41": "Hangzhou Beilian Low Carbon Technology Co., Ltd.", "e04b45": "Hi-P Electronics Pte Ltd", "e04ba6": "HUAWEI TECHNOLOGIES CO.,LTD", + "e04c05": "EverCharge", "e04f43": "Universal Global Scientific Industrial Co., Ltd.", "e04fbd": "Sichuan Tianyi Comheart Telecom Co.,LTD", "e0508b": "Zhejiang Dahua Technology Co., Ltd.", @@ -31424,7 +31487,7 @@ "e09db8": "PLANEX COMMUNICATIONS INC.", "e09dfa": "Wanan Hongsheng Electronic Co.Ltd", "e09f2a": "Iton Technology Corp. ", - "e0a129": "Extreme Networks, Inc.", + "e0a129": "Extreme Networks Headquarters", "e0a198": "NOJA Power Switchgear Pty Ltd", "e0a1ce": "zte corporation", "e0a1d7": "SFR", @@ -31640,7 +31703,7 @@ "e441e6": "Ottec Technology GmbH", "e442a6": "Intel Corporate", "e4434b": "Dell Inc.", - "e444e5": "Extreme Networks, Inc.", + "e444e5": "Extreme Networks Headquarters", "e44519": "Beijing Xiaomi Electronics Co.,Ltd", "e446b0": "Fujitsu Client Computing Limited", "e446bd": "C&C TECHNIC TAIWAN CO., LTD.", @@ -31820,7 +31883,7 @@ "e4d71d": "Oraya Therapeutics", "e4dadf": "Taicang T&W Electronics", "e4db6d": "Beijing Xiaomi Electronics Co., Ltd.", - "e4dbae": "Extreme Networks, Inc.", + "e4dbae": "Extreme Networks Headquarters", "e4dc43": "Huawei Device Co., Ltd.", "e4dc5f": "Cofractal, Inc.", "e4dccc": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -31882,6 +31945,7 @@ "e8088b": "HUAWEI TECHNOLOGIES CO.,LTD", "e80945": "Sdn. Bhd.", "e80959": "Guoguang Electric Co.,Ltd", + "e80ab9": "Cisco Systems, Inc", "e80aec": "Jiangsu Hengtong Optic-Electric Co., LTD", "e80b13": "Akib Systems Taiwan, INC", "e80c38": "DAEYOUNG INFORMATION SYSTEM CO., LTD", @@ -31898,6 +31962,7 @@ "e8150e": "Nokia Corporation", "e8162b": "IDEO Security Co., Ltd.", "e81656": "Hangzhou BroadLink Technology Co.,Ltd", + "e81711": "Shenzhen Vipstech Co., Ltd", "e817fc": "Fujitsu Cloud Technologies Limited", "e81863": "IEEE Registration Authority", "e81a58": "TECHNOLOGIC SYSTEMS", @@ -31945,11 +32010,13 @@ "e84368": "zte corporation", "e843b6": "QNAP Systems, Inc.", "e8447e": "Bitdefender SRL", + "e8458b": "MitraStar Technology Corp.", "e84727": "Quectel Wireless Solutions Co.,Ltd.", "e8473a": "Hon Hai Precision Industry Co.,LTD", "e8481f": "Advanced Automotive Antennas", "e848b8": "TP-Link Corporation Limited", "e84943": "YUGE Information technology Co. Ltd", + "e84a54": "Beijing Xiaomi Mobile Software Co., Ltd", "e84c4a": "Amazon Technologies Inc.", "e84c56": "INTERCEPT SERVICES LIMITED", "e84d74": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -32131,6 +32198,7 @@ "e8d11b": "ASKEY COMPUTER CORP", "e8d2ff": "Sagemcom Broadband SAS", "e8d322": "Cisco Systems, Inc", + "e8d3eb": "eero inc.", "e8d483": "ULTIMATE Europe Transportation Equipment GmbH", "e8d4e0": "Beijing BenyWave Technology Co., Ltd.", "e8d52b": "Google, Inc.", @@ -32471,6 +32539,7 @@ "ece6a2": "Fiberhome Telecommunication Technologies Co.,LTD", "ece744": "Omntec mfg. inc", "ece7a7": "Intel Corporate", + "ece7c2": "China Mobile Group Device Co.,Ltd.", "ece90b": "SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH", "ece915": "STI Ltd", "ece9f8": "Guang Zhou TRI-SUN Electronics Technology Co., Ltd", @@ -32522,6 +32591,7 @@ "f0182b": "LG Chem", "f01898": "Apple, Inc.", "f01aa0": "Aruba, a Hewlett Packard Enterprise Company", + "f01b24": "zte corporation", "f01b6c": "vivo Mobile Communication Co., Ltd.", "f01c2d": "Juniper Networks", "f01d2d": "Cisco Systems, Inc", @@ -32553,6 +32623,7 @@ "f02a23": "Creative Next Design", "f02a2b": "IEEE Registration Authority", "f02a61": "Waldo Networks, Inc.", + "f02b7c": "Extreme Networks Headquarters", "f02e51": "Casa Systems", "f02f4b": "Apple, Inc.", "f02f74": "ASUSTek COMPUTER INC.", @@ -32612,7 +32683,7 @@ "f0625a": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "f06281": "ProCurve Networking by HP", "f063f9": "HUAWEI TECHNOLOGIES CO.,LTD", - "f06426": "Extreme Networks, Inc.", + "f06426": "Extreme Networks Headquarters", "f065ae": "Samsung Electronics Co.,Ltd", "f065c2": "Co.,Ltd.", "f065dd": "Primax Electronics Ltd.", @@ -32681,7 +32752,7 @@ "f09bb8": "HUAWEI TECHNOLOGIES CO.,LTD", "f09cbb": "RaonThink Inc.", "f09cd7": "Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.", - "f09ce9": "Extreme Networks, Inc.", + "f09ce9": "Extreme Networks Headquarters", "f09e4a": "Intel Corporate", "f09e63": "Cisco Systems, Inc", "f09fc2": "Ubiquiti Inc", @@ -32691,11 +32762,13 @@ "f0a35a": "Apple, Inc.", "f0a3b2": "Hui Zhou Gaoshengda Technology Co.,LTD", "f0a654": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", + "f0a731": "TP-Link Corporation Limited", "f0a764": "GST Co., Ltd.", "f0a7b2": "FUTABA CORPORATION", "f0a951": "HUAWEI TECHNOLOGIES CO.,LTD", "f0a968": "Antailiye Technology Co.,Ltd", "f0aa0b": "Arra Networks/ Spectramesh", + "f0ab1f": "zte corporation", "f0ab54": "MITSUMI ELECTRIC CO.,LTD.", "f0aca4": "HBC-radiomatic", "f0acd7": "IEEE Registration Authority", @@ -32895,6 +32968,7 @@ "f43a7b": "zte corporation", "f43bd8": "Intel Corporate", "f43c3b": "HUNAN FN-LINK TECHNOLOGY LIMITED", + "f43c96": "Ericsson AB", "f43d80": "FAG Industrial Services GmbH", "f43e61": "SHENZHEN GONGJIN ELECTRONICS CO.,LT", "f43e66": "Limited", @@ -32927,6 +33001,7 @@ "f450eb": "Telechips Inc", "f45214": "Mellanox Technologies, Inc.", "f45420": "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO ", + "f45424": "Extreme Networks Headquarters", "f45433": "Rockwell Automation", "f45595": "HENGBAO Corporation LTD.", "f4559c": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -32965,7 +33040,7 @@ "f46d3f": "Intel Corporate", "f46de2": "zte corporation", "f46e24": "NEC Personal Computers, Ltd.", - "f46e95": "Extreme Networks, Inc.", + "f46e95": "Extreme Networks Headquarters", "f46f4e": "Echowell", "f46fa4": "Physik Instrumente GmbH & Co. KG", "f46fed": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -33080,7 +33155,7 @@ "f4ce23": "Intel Corporate", "f4ce36": "Nordic Semiconductor ASA", "f4ce46": "Hewlett Packard", - "f4ce48": "Extreme Networks, Inc.", + "f4ce48": "Extreme Networks Headquarters", "f4cfa2": "Espressif Inc.", "f4cfe2": "Cisco Systems, Inc", "f4d032": "Yunnan Ideal Information&Technology.,Ltd", @@ -33119,7 +33194,7 @@ "f4e975": "New H3C Technologies Co., Ltd", "f4e9d4": "QLogic Corporation", "f4ea67": "Cisco Systems, Inc", - "f4eab5": "Extreme Networks, Inc.", + "f4eab5": "Extreme Networks Headquarters", "f4eb38": "Sagemcom Broadband SAS", "f4eb9f": "Ellu Company 2019 SL", "f4ec38": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -33441,6 +33516,7 @@ "f8c3cc": "Apple, Inc.", "f8c4ae": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "f8c4f3": "Shanghai Infinity Wireless Technologies Co.,Ltd.", + "f8c650": "Cisco Systems, Inc", "f8c678": "Carefusion", "f8c96c": "Fiberhome Telecommunication Technologies Co.,LTD", "f8ca59": "NetComm Wireless", @@ -33533,7 +33609,7 @@ "fc0877": "Prentke Romich Company", "fc09d8": "ACTEON Group", "fc09f6": "GUANGDONG TONZE ELECTRIC CO.,LTD", - "fc0a81": "Extreme Networks, Inc.", + "fc0a81": "Extreme Networks Headquarters", "fc0c45": "Shenzhen SuperElectron Technology Co.,Ltd.", "fc0f4b": "Texas Instruments", "fc0fe6": "Sony Interactive Entertainment Inc.", @@ -33745,6 +33821,7 @@ "fca89b": "Texas Instruments", "fca9b0": "INC.", "fca9dc": "Sdn. Bhd.", + "fca9f5": "Xiaomi Communications Co Ltd", "fcaa14": "GIGA-BYTE TECHNOLOGY CO.,LTD.", "fcaa81": "Apple, Inc.", "fcaab6": "Samsung Electronics Co.,Ltd", From d95593bdd12e6a984802058c846f76bd7c9ecdcc Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Sat, 22 Jul 2023 12:26:51 -0400 Subject: [PATCH 33/37] Kc drop py37 (#317) * Drop support for python 3.7 * Bumped invoke for python 3.11 * Changed pylint to use version 3.10 * pylint ignore * More 3.7 fixes * linted * Updated per Jeffs review * pylinted * linted * flaked * Fixes * Make all Python references point to 3.11 by default, fix citrix tests, bump lock file, remove selective files from black --------- Co-authored-by: Adam Byczkowski Co-authored-by: Adam Byczkowski <38091261+qduk@users.noreply.github.com> --- .github/workflows/ci.yml | 22 +- docs/requirements.txt | 8 +- netutils/__init__.py | 8 +- netutils/config/parser.py | 22 +- netutils/constants.py | 18 +- netutils/os_version.py | 2 +- netutils/password.py | 5 +- poetry.lock | 2584 +++++++++-------- pyproject.toml | 21 +- tasks.py | 4 +- .../netscaler_full_received.py | 0 .../citrix_netscaler/netscaler_full_sent.txt | 0 12 files changed, 1366 insertions(+), 1328 deletions(-) rename tests/unit/mock/config/parser/{ => base}/citrix_netscaler/netscaler_full_received.py (100%) rename tests/unit/mock/config/parser/{ => base}/citrix_netscaler/netscaler_full_sent.txt (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9bef3025..95628584 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,8 @@ jobs: uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" + with: + python-version: "3.11" - name: "Linting: black" run: "poetry run invoke black" bandit: @@ -28,6 +30,8 @@ jobs: uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" + with: + python-version: "3.11" - name: "Linting: bandit" run: "poetry run invoke bandit" needs: @@ -41,6 +45,8 @@ jobs: uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" + with: + python-version: "3.11" - name: "Type-Hints: mypy" run: "poetry run invoke mypy" needs: @@ -54,6 +60,8 @@ jobs: uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" + with: + python-version: "3.11" - name: "Linting: pydocstyle" run: "poetry run invoke pydocstyle" needs: @@ -67,6 +75,8 @@ jobs: uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" + with: + python-version: "3.11" - name: "Linting: flake8" run: "poetry run invoke flake8" needs: @@ -80,6 +90,8 @@ jobs: uses: "actions/checkout@v2" - name: "Setup environment" uses: "networktocode/gh-action-setup-poetry-environment@v2" + with: + python-version: "3.11" - name: "Linting: yamllint" run: "poetry run invoke yamllint" needs: @@ -88,7 +100,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ["3.7", "3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11"] runs-on: "ubuntu-20.04" env: PYTHON_VER: "${{ matrix.python-version }}" @@ -125,7 +137,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ["3.7"] + python-version: ["3.11"] env: PYTHON_VER: "${{ matrix.python-version }}" steps: @@ -161,7 +173,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ["3.7", "3.8", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11"] runs-on: "ubuntu-20.04" env: PYTHON_VER: "${{ matrix.python-version }}" @@ -208,7 +220,7 @@ jobs: - name: "Set up Python" uses: "actions/setup-python@v2" with: - python-version: "3.9" + python-version: "3.11" - name: "Install Python Packages" run: "pip install poetry" - name: "Set env" @@ -237,7 +249,7 @@ jobs: - name: "Set up Python" uses: "actions/setup-python@v2" with: - python-version: "3.9" + python-version: "3.11" - name: "Install Python Packages" run: "pip install poetry" - name: "Set env" diff --git a/docs/requirements.txt b/docs/requirements.txt index f403e1aa..8e223b74 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,8 +1,8 @@ -mkdocs==1.3.1 +mkdocs==1.4.3 # Material for MkDocs theme -mkdocs-material==8.3.9 +mkdocs-material==8.5.8 # Render custom markdown for version added/changed/remove notes mkdocs-version-annotations==1.0.0 # Automatic documentation from sources, for MkDocs -mkdocstrings==0.19 -mkdocstrings-python==0.7.1 \ No newline at end of file +mkdocstrings==0.22.0 +mkdocstrings-python==1.1.2 \ No newline at end of file diff --git a/netutils/__init__.py b/netutils/__init__.py index e8a44b14..df4d8a29 100644 --- a/netutils/__init__.py +++ b/netutils/__init__.py @@ -1,9 +1,7 @@ """Initialization file for library.""" -try: - from importlib import metadata # type: ignore[attr-defined] -except ImportError: - # Python version < 3.8 - import importlib_metadata as metadata # type: ignore[no-redef] + +from importlib import metadata + __version__ = metadata.version(__name__) diff --git a/netutils/config/parser.py b/netutils/config/parser.py index 6c09857a..252e4989 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -14,9 +14,6 @@ class BaseConfigParser: """Base class for parsers.""" - # pylint: disable=abstract-method - # The pylint disable on the previous line can be removed once support for Python 3.7 is dropped. - comment_chars = ["!"] banner_start = ["banner", "vacant-message"] @@ -51,8 +48,8 @@ def build_config_relationship(self) -> t.List[ConfigLine]: class BaseSpaceConfigParser(BaseConfigParser): """Base parser class for config syntax that demarcates using spaces/indentation.""" + # TODO: Review if this can be removed # pylint: disable=abstract-method - # The pylint disable on the previous line can be removed once support for Python 3.7 is dropped. comment_chars = ["!"] banner_start = ["banner", "vacant-message"] @@ -413,12 +410,9 @@ def find_children_w_parents( return config -class BaseBraceConfigParser(BaseConfigParser): +class BaseBraceConfigParser(BaseConfigParser): # pylint: disable=abstract-method """Base parser class for config syntax that demarcates using braces.""" - # pylint: disable=abstract-method - # The pylint disable on the previous line can be removed once support for Python 3.7 is dropped. - multiline_delimiters: t.List[str] = [] @property @@ -766,7 +760,7 @@ def __init__(self, config: str): """ super().__init__(self._clean_config_f5(config)) - def _clean_config_f5(self, config_text: str) -> str: # pylint: disable=no-self-use + def _clean_config_f5(self, config_text: str) -> str: """Removes all configuration items with 'ltm rule'. iRules are essentially impossible to parse with the lack of uniformity, @@ -991,7 +985,7 @@ def __init__(self, config: str): self.uncommon_data = self._get_uncommon_lines(config) super(FortinetConfigParser, self).__init__(config) - def is_end_next(self, line: str) -> bool: # pylint: disable=no-self-use + def is_end_next(self, line: str) -> bool: """Determine if line has 'end' or 'next' in it. Args: @@ -1012,7 +1006,7 @@ def is_end_next(self, line: str) -> bool: # pylint: disable=no-self-use return True return False - def _parse_out_offending(self, config: str) -> str: # pylint: disable=no-self-use + def _parse_out_offending(self, config: str) -> str: """Preprocess out strings that offend the normal spaced configuration syntax. Args: @@ -1042,7 +1036,7 @@ def config_lines_only(self) -> str: self._config = "\n".join(config_lines) return self._config - def _get_uncommon_lines(self, config: str) -> t.Dict[str, str]: # pylint: disable=no-self-use + def _get_uncommon_lines(self, config: str) -> t.Dict[str, str]: """Regex to find replacemsg lines which can contain html/css data. Args: @@ -1110,7 +1104,7 @@ def banner_end(self) -> str: """Demarcate End of Banner char(s).""" raise NotImplementedError("Nokia SROS platform doesn't have a banner.") - def _is_section_title(self, line: str) -> bool: # pylint: disable=no-self-use + def _is_section_title(self, line: str) -> bool: """Determine if line is a section title in banner. Args: @@ -1123,7 +1117,7 @@ def _is_section_title(self, line: str) -> bool: # pylint: disable=no-self-use return True return False - def _get_section_title(self, line: str) -> t.Union[str, bool]: # pylint: disable=no-self-use + def _get_section_title(self, line: str) -> t.Union[str, bool]: """Determine section title from banner. Args: diff --git a/netutils/constants.py b/netutils/constants.py index dcb605f9..dd6d7c60 100644 --- a/netutils/constants.py +++ b/netutils/constants.py @@ -1,5 +1,7 @@ """Constant definitions used in project.""" -from netutils.data_files.protocol_mappings import PROTOCOLS # noqa: F401 # pylint:disable=unused-import +from netutils.data_files.protocol_mappings import ( # noqa: F401 # pylint:disable=unused-import + PROTOCOLS, +) # This variable provides mapping for known interface variants, to the associated long form. @@ -144,7 +146,7 @@ DEFAULT_MAC_FORMAT = "MAC_DOT_FOUR" # A dictionary to describe the MAC format to it's characteristics. -MAC_CREATE = dict( +MAC_CREATE = dict( # pylint: disable=use-dict-literal MAC_COLON_TWO={"count": 2, "char": ":"}, MAC_COLON_FOUR={"count": 4, "char": ":"}, MAC_DASH_TWO={"count": 2, "char": "-"}, @@ -155,7 +157,7 @@ ) # A dictionary to describe the MAC format REGEX pattern. -MAC_REGEX = dict( +MAC_REGEX = dict( # pylint: disable=use-dict-literal MAC_COLON_TWO=r"([a-fA-F0-9]{2}[:]){5}([a-fA-F0-9]{2})", MAC_COLON_FOUR=r"([a-fA-F0-9]{4}[:]){2}([a-fA-F0-9]{4})", MAC_DASH_TWO=r"([a-fA-F0-9]{2}[\-]){5}([a-fA-F0-9]{2})", @@ -208,8 +210,14 @@ # These are base level filters to provide documentation of how a SANITIZE_FILTERS can be used, This is a private variable, and subject # to change without notice between revisions. _PROVIDED_SANITIZE_FILTERS = [ - {"regex": r"(username\s+\S+\spassword\s+5\s+)\S+(\s+role\s+\S+)", "replace": "\\1\\2"}, - {"regex": r"(username\s+\S+\s+privilege\s+15\s+password\s+0\s+)\S+", "replace": "\\1"}, + { + "regex": r"(username\s+\S+\spassword\s+5\s+)\S+(\s+role\s+\S+)", + "replace": "\\1\\2", + }, + { + "regex": r"(username\s+\S+\s+privilege\s+15\s+password\s+0\s+)\S+", + "replace": "\\1", + }, ] # {0xffffffff ^ ((1 << i) - 1) for i in range(32)} diff --git a/netutils/os_version.py b/netutils/os_version.py index 3fe8bab4..09268de9 100644 --- a/netutils/os_version.py +++ b/netutils/os_version.py @@ -1,6 +1,6 @@ """Functions for working with OS Versions.""" import typing as t -from distutils.version import LooseVersion +from distutils.version import LooseVersion # pylint: disable=deprecated-module def get_upgrade_path( diff --git a/netutils/password.py b/netutils/password.py index f780f24f..02f1bd86 100644 --- a/netutils/password.py +++ b/netutils/password.py @@ -1,6 +1,7 @@ """Functions for working with Passwords.""" -import crypt +# TODO: Swap out crypt prior to py3.13 +import crypt # pylint: disable=deprecated-module import random import secrets import string @@ -279,7 +280,7 @@ def encrypt_cisco_type7(unencrypted_password: str, salt: t.Optional[int] = None) encrypted_password = format(salt, "02d") for i, _ in enumerate(unencrypted_password): # Get the next of the plaintext character. - dec_char = ord(unencrypted_password[i]) + dec_char = ord(unencrypted_password[i]) # pylint: disable=unnecessary-list-index-lookup # Get the next character of the key. key_char = ast.literal_eval(XLAT[(i + salt) % 53]) # XOR the plaintext character with the key character. diff --git a/poetry.lock b/poetry.lock index 7d288fd4..78d6b8de 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,77 +1,101 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + [[package]] name = "alabaster" -version = "0.7.12" +version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] [[package]] name = "astroid" -version = "2.11.7" +version = "2.15.6" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.2" +files = [ + {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, + {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, +] [package.dependencies] lazy-object-proxy = ">=1.4.0" -setuptools = ">=20.0" -typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} -wrapt = ">=1.11,<2" - -[[package]] -name = "attrs" -version = "22.1.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] [[package]] -name = "Babel" -version = "2.10.3" +name = "babel" +version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] [package.dependencies] -pytz = ">=2015.7" +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [[package]] name = "bandit" -version = "1.7.4" +version = "1.7.5" description = "Security oriented static analyser for python code." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, + {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, +] [package.dependencies] colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} GitPython = ">=1.0.1" PyYAML = ">=5.3.1" +rich = "*" stevedore = ">=1.20.0" [package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] -toml = ["toml"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +toml = ["tomli (>=1.1.0)"] yaml = ["PyYAML"] [[package]] name = "bcrypt" version = "4.0.1" description = "Modern password hashing for your software and your servers" -category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"}, + {file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"}, + {file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"}, + {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, +] [package.extras] tests = ["pytest (>=3.2.1,!=3.3.0)"] @@ -79,19 +103,42 @@ typecheck = ["mypy"] [[package]] name = "black" -version = "22.10.0" +version = "23.7.0" description = "The uncompromising code formatter." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, +] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -100,142 +147,394 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "certifi" -version = "2022.9.24" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] [[package]] name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = true python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] [package.dependencies] pycparser = "*" [[package]] name = "charset-normalizer" -version = "2.1.1" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "coverage" -version = "6.5.0" +version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] [package.extras] toml = ["tomli"] [[package]] name = "cryptography" -version = "38.0.1" +version = "41.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, + {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, + {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, + {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, + {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, + {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, + {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, +] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] [[package]] name = "dill" -version = "0.3.5.1" +version = "0.3.6" description = "serialize all of python" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +python-versions = ">=3.7" +files = [ + {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, + {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, +] [package.extras] graph = ["objgraph (>=1.7.2)"] [[package]] name = "docutils" -version = "0.17.1" +version = "0.18.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, + {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] + +[package.extras] +test = ["pytest (>=6)"] [[package]] name = "flake8" -version = "3.9.2" +version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6.1" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" [[package]] name = "future" -version = "0.18.2" +version = "0.18.3" description = "Clean single-source support for Python 3 and 2" -category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, +] [[package]] name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." -category = "dev" optional = false python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] [package.dependencies] python-dateutil = ">=2.8.1" @@ -245,111 +544,136 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "gitdb" -version = "4.0.9" +version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] [package.dependencies] smmap = ">=3.0.1,<6" [[package]] -name = "GitPython" -version = "3.1.29" -description = "GitPython is a python library used to interact with Git repositories" -category = "dev" +name = "gitpython" +version = "3.1.32" +description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, + {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, +] [package.dependencies] gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} [[package]] name = "griffe" -version = "0.22.2" +version = "0.32.3" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "griffe-0.32.3-py3-none-any.whl", hash = "sha256:d9471934225818bf8f309822f70451cc6abb4b24e59e0bb27402a45f9412510f"}, + {file = "griffe-0.32.3.tar.gz", hash = "sha256:14983896ad581f59d5ad7b6c9261ff12bdaa905acccc1129341d13e545da8521"}, +] [package.dependencies] -cached-property = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -async = ["aiofiles (>=0.7,<1.0)"] +colorama = ">=0.4" [[package]] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] [[package]] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" -version = "5.0.0" +version = "6.8.0" description = "Read metadata from Python packages" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] [[package]] name = "invoke" -version = "1.7.3" +version = "2.2.0" description = "Pythonic task execution" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" +files = [ + {file = "invoke-2.2.0-py3-none-any.whl", hash = "sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820"}, + {file = "invoke-2.2.0.tar.gz", hash = "sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5"}, +] [[package]] name = "isort" -version = "5.10.1" +version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false -python-versions = ">=3.6.1,<4.0" +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] plugins = ["setuptools"] -requirements_deprecated_finder = ["pip-api", "pipreqs"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] [[package]] -name = "Jinja2" +name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -359,11 +683,14 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "junos-eznc" -version = "2.6.5" +version = "2.6.7" description = "Junos 'EZ' automation for non-programmers" -category = "main" optional = true -python-versions = ">=3.*, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.5, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "junos-eznc-2.6.7.tar.gz", hash = "sha256:b3ab81dafb160cd16cba8f26b92b6f5c3333a8d30566a7ebd966fc1f313b0980"}, + {file = "junos_eznc-2.6.7-py2.py3-none-any.whl", hash = "sha256:6ee9d74228ebaca01381eb88dbe21765006d76935960fd4e6cd8d67248b11644"}, +] [package.dependencies] jinja2 = ">=2.7.1" @@ -381,33 +708,166 @@ yamlordereddictloader = "*" [[package]] name = "lazy-object-proxy" -version = "1.7.1" +version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] [[package]] name = "lxml" -version = "4.9.1" +version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, + {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, +] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.7)"] +source = ["Cython (>=0.29.35)"] [[package]] -name = "Markdown" +name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, + {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, +] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} @@ -416,59 +876,159 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} testing = ["coverage", "pyyaml"] [[package]] -name = "MarkupSafe" -version = "2.1.1" +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] [[package]] name = "mccabe" -version = "0.6.1" +version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] [[package]] name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] [[package]] name = "mkdocs" -version = "1.3.1" +version = "1.4.3" description = "Project documentation with Markdown." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, + {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, +] [package.dependencies] -click = ">=3.3" +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = ">=4.3" -Jinja2 = ">=2.10.2" -Markdown = ">=3.2.1,<3.4" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1,<3.4" mergedeep = ">=1.3.4" packaging = ">=20.5" -PyYAML = ">=3.10" +pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] [[package]] name = "mkdocs-autorefs" version = "0.4.1" description = "Automatically link across pages in MkDocs." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, + {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, +] [package.dependencies] Markdown = ">=3.3" @@ -476,51 +1036,66 @@ mkdocs = ">=1.1" [[package]] name = "mkdocs-material" -version = "8.3.9" +version = "8.5.8" description = "Documentation that simply works" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mkdocs_material-8.5.8-py3-none-any.whl", hash = "sha256:7ff092299e3a63cef99cd87e4a6cc7e7d9ec31fd190d766fd147c35572e6d593"}, + {file = "mkdocs_material-8.5.8.tar.gz", hash = "sha256:61396251819cf7f547f70a09ce6a7edb2ff5d32e47b9199769020b2d20a83d44"}, +] [package.dependencies] jinja2 = ">=3.0.2" markdown = ">=3.2" -mkdocs = ">=1.3.0" -mkdocs-material-extensions = ">=1.0.3" +mkdocs = ">=1.4.0" +mkdocs-material-extensions = ">=1.1" pygments = ">=2.12" pymdown-extensions = ">=9.4" +requests = ">=2.26" [[package]] name = "mkdocs-material-extensions" -version = "1.0.3" -description = "Extension pack for Python Markdown." -category = "dev" +version = "1.1.1" +description = "Extension pack for Python Markdown and MkDocs Material." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"}, + {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"}, +] [[package]] name = "mkdocs-version-annotations" version = "1.0.0" description = "MkDocs plugin to add custom admonitions for documenting version differences" -category = "dev" optional = false python-versions = ">=3.7,<4.0" +files = [ + {file = "mkdocs-version-annotations-1.0.0.tar.gz", hash = "sha256:6786024b37d27b330fda240b76ebec8e7ce48bd5a9d7a66e99804559d088dffa"}, + {file = "mkdocs_version_annotations-1.0.0-py3-none-any.whl", hash = "sha256:385004eb4a7530dd87a227e08cd907ce7a8fe21fdf297720a4149c511bcf05f5"}, +] [[package]] name = "mkdocstrings" -version = "0.19.0" +version = "0.22.0" description = "Automatic documentation from sources, for MkDocs." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mkdocstrings-0.22.0-py3-none-any.whl", hash = "sha256:2d4095d461554ff6a778fdabdca3c00c468c2f1459d469f7a7f622a2b23212ba"}, + {file = "mkdocstrings-0.22.0.tar.gz", hash = "sha256:82a33b94150ebb3d4b5c73bab4598c3e21468c79ec072eff6931c8f3bfc38256"}, +] [package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} Jinja2 = ">=2.11.1" Markdown = ">=3.3" MarkupSafe = ">=1.1" mkdocs = ">=1.2" mkdocs-autorefs = ">=0.3.1" pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} [package.extras] crystal = ["mkdocstrings-crystal (>=0.3.4)"] @@ -529,28 +1104,54 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "0.7.1" +version = "1.1.2" description = "A Python handler for mkdocstrings." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mkdocstrings_python-1.1.2-py3-none-any.whl", hash = "sha256:c2b652a850fec8e85034a9cdb3b45f8ad1a558686edc20ed1f40b4e17e62070f"}, + {file = "mkdocstrings_python-1.1.2.tar.gz", hash = "sha256:f28bdcacb9bcdb44b6942a5642c1ea8b36870614d33e29e3c923e204a8d8ed61"}, +] [package.dependencies] -griffe = ">=0.11.1" -mkdocstrings = ">=0.19" +griffe = ">=0.24" +mkdocstrings = ">=0.20" [[package]] name = "mypy" version = "0.961" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, + {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, + {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, + {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, + {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, + {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, + {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, + {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, + {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, + {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, + {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, + {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, + {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, + {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, + {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, + {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, + {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, + {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, + {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, + {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, + {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, + {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, + {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, +] [package.dependencies] mypy-extensions = ">=0.4.3" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} typing-extensions = ">=3.10" [package.extras] @@ -560,19 +1161,25 @@ reports = ["lxml"] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = "*" +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] [[package]] name = "napalm" -version = "4.0.0" +version = "4.1.0" description = "Network Automation and Programmability Abstraction Layer with Multivendor support" -category = "main" optional = true python-versions = "*" +files = [ + {file = "napalm-4.1.0-py2.py3-none-any.whl", hash = "sha256:14a5b7759a0247a26fff2c444b1cfc150a08224de8addf4076c384845285bf5b"}, + {file = "napalm-4.1.0.tar.gz", hash = "sha256:3b3e18efd556861c056ba509eb46f5ffc9e3e6c42db399fa76b6ea9af272c17a"}, +] [package.dependencies] cffi = ">=1.11.3" @@ -582,7 +1189,7 @@ junos-eznc = ">=2.6.3" lxml = ">=4.3.0" ncclient = "*" netaddr = "*" -netmiko = ">=4.0.0" +netmiko = ">=4.1.0" netutils = ">=1.0.0" paramiko = ">=2.6.0" pyeapi = ">=0.8.2" @@ -590,7 +1197,7 @@ pyYAML = "*" requests = ">=2.7.0" scp = "*" setuptools = ">=38.4.0" -textfsm = "<=1.1.2" +textfsm = "*" ttp = "*" ttp-templates = "*" typing-extensions = ">=4.3.0" @@ -599,9 +1206,11 @@ typing-extensions = ">=4.3.0" name = "ncclient" version = "0.6.13" description = "Python library for NETCONF clients" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "ncclient-0.6.13.tar.gz", hash = "sha256:f9f8cea8bcbe057e1b948b9cd1b241eafb8a3f73c4981fbdfa1cc6ed69c0a7b3"}, +] [package.dependencies] lxml = ">=3.3.0" @@ -613,158 +1222,178 @@ six = "*" name = "netaddr" version = "0.8.0" description = "A network address manipulation library for Python" -category = "main" optional = true python-versions = "*" +files = [ + {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"}, + {file = "netaddr-0.8.0.tar.gz", hash = "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"}, +] [[package]] name = "netmiko" -version = "4.1.2" +version = "4.2.0" description = "Multi-vendor library to simplify legacy CLI connections to network devices" -category = "main" optional = true -python-versions = "*" +python-versions = ">=3.7,<4.0" +files = [ + {file = "netmiko-4.2.0-py3-none-any.whl", hash = "sha256:8dae36263edc0b5ca5373d3d9ec428f38efd050ecfddac9c0698d0e65082bb3b"}, + {file = "netmiko-4.2.0.tar.gz", hash = "sha256:7adde6fe3ea63336228f49a863650c2d83fb0e680e0f0d158b5b0fb04c4100e1"}, +] [package.dependencies] ntc-templates = ">=2.0.0" -paramiko = ">=2.7.2" -pyserial = "*" +paramiko = ">=2.9.5" +pyserial = ">=3.3" pyyaml = ">=5.3" -scp = ">=0.13.3" -setuptools = ">=38.4.0" -tenacity = "*" -textfsm = "1.1.2" +scp = ">=0.13.6" +textfsm = ">=1.1.3" [[package]] name = "ntc-templates" -version = "3.1.0" +version = "3.5.0" description = "TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable." -category = "main" optional = true -python-versions = ">=3.6,<4.0" - +python-versions = ">=3.7,<4.0" +files = [ + {file = "ntc_templates-3.5.0-py3-none-any.whl", hash = "sha256:86d75c077eb1ceb97f4f8c69c9e3c7a32b08210ceb8228e5fa4e87e080746fd4"}, + {file = "ntc_templates-3.5.0.tar.gz", hash = "sha256:ee0dab4440dab1b3286549f8c08695b30037c1f36f55763c5a39005525f722c7"}, +] + [package.dependencies] textfsm = ">=1.1.0,<2.0.0" [[package]] name = "packaging" -version = "21.3" +version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] [[package]] name = "paramiko" -version = "2.11.0" +version = "3.2.0" description = "SSH2 protocol library" -category = "main" optional = true -python-versions = "*" +python-versions = ">=3.6" +files = [ + {file = "paramiko-3.2.0-py3-none-any.whl", hash = "sha256:df0f9dd8903bc50f2e10580af687f3015bf592a377cd438d2ec9546467a14eb8"}, + {file = "paramiko-3.2.0.tar.gz", hash = "sha256:93cdce625a8a1dc12204439d45033f3261bdb2c201648cfcdc06f9fd0f94ec29"}, +] [package.dependencies] -bcrypt = ">=3.1.3" -cryptography = ">=2.5" -pynacl = ">=1.0.1" -six = "*" +bcrypt = ">=3.2" +cryptography = ">=3.3" +pynacl = ">=1.5" [package.extras] -all = ["bcrypt (>=3.1.3)", "gssapi (>=1.4.1)", "invoke (>=1.3)", "pyasn1 (>=0.1.7)", "pynacl (>=1.0.1)", "pywin32 (>=2.1.8)"] -ed25519 = ["bcrypt (>=3.1.3)", "pynacl (>=1.0.1)"] +all = ["gssapi (>=1.4.1)", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] -invoke = ["invoke (>=1.3)"] +invoke = ["invoke (>=2.0)"] [[package]] name = "pathspec" -version = "0.10.1" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] [[package]] name = "pbr" -version = "5.10.0" +version = "5.11.1" description = "Python Build Reasonableness" -category = "dev" optional = false python-versions = ">=2.6" +files = [ + {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, + {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, +] [[package]] name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" +version = "3.9.1" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, + {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, +] [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - [[package]] name = "pycodestyle" -version = "2.7.0" +version = "2.9.1" description = "Python style guide checker" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] [[package]] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] [[package]] name = "pydocstyle" -version = "6.1.1" +version = "6.3.0" description = "Python docstring style checker" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, +] [package.dependencies] -snowballstemmer = "*" +snowballstemmer = ">=2.2.0" [package.extras] -toml = ["toml"] +toml = ["tomli (>=1.2.3)"] [[package]] name = "pyeapi" -version = "0.8.4" +version = "1.0.2" description = "Python Client for eAPI" -category = "main" optional = true python-versions = "*" +files = [ + {file = "pyeapi-1.0.2.tar.gz", hash = "sha256:563a80bb19451df7dd7b6e9e38489dee67ebeaf2f54de296e8ae0b26cd68a297"}, +] [package.dependencies] netaddr = "*" @@ -775,77 +1404,109 @@ test = ["coverage", "mock"] [[package]] name = "pyflakes" -version = "2.3.1" +version = "2.5.0" description = "passive checker of Python programs" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] [[package]] -name = "Pygments" -version = "2.13.0" +name = "pygments" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] [package.extras] plugins = ["importlib-metadata"] [[package]] name = "pylint" -version = "2.13.9" +version = "2.17.4" description = "python code static checker" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.17.4-py3-none-any.whl", hash = "sha256:7a1145fb08c251bdb5cca11739722ce64a63db479283d10ce718b2460e54123c"}, + {file = "pylint-2.17.4.tar.gz", hash = "sha256:5dcf1d9e19f41f38e4e85d10f511e5b9c35e1aa74251bf95cdd8cb23584e2db1"}, +] [package.dependencies] -astroid = ">=2.11.5,<=2.12.0-dev0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -dill = ">=0.2" +astroid = ">=2.15.4,<=2.17.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] -testutil = ["gitpython (>3)"] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] [[package]] name = "pymdown-extensions" -version = "9.6" +version = "10.1" description = "Extension pack for Python Markdown." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pymdown_extensions-10.1-py3-none-any.whl", hash = "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc"}, + {file = "pymdown_extensions-10.1.tar.gz", hash = "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195"}, +] [package.dependencies] markdown = ">=3.2" +pyyaml = "*" [[package]] -name = "PyNaCl" +name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] [package.dependencies] cffi = ">=1.4.1" [package.extras] -docs = ["sphinx (>=1.6.5)", "sphinx_rtd_theme"] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false +optional = true python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.0-py3-none-any.whl", hash = "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1"}, + {file = "pyparsing-3.1.0.tar.gz", hash = "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea"}, +] [package.extras] diagrams = ["jinja2", "railroad-diagrams"] @@ -854,157 +1515,251 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyserial" version = "3.5" description = "Python Serial Port Extension" -category = "main" optional = true python-versions = "*" +files = [ + {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, + {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, +] [package.extras] cp2110 = ["hidapi"] [[package]] name = "pytest" -version = "7.1.3" +version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, +] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -tomli = ">=1.0.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] [package.dependencies] six = ">=1.5" [[package]] name = "pytz" -version = "2022.4" +version = "2023.3" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] [[package]] -name = "PyYAML" -version = "6.0" +name = "pyyaml" +version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" - -[[package]] -name = "pyyaml_env_tag" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] [package.dependencies] pyyaml = "*" [[package]] name = "requests" -version = "2.28.1" +version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.4.2" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"}, + {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "scp" -version = "0.14.4" +version = "0.14.5" description = "scp module for paramiko" -category = "main" optional = true python-versions = "*" +files = [ + {file = "scp-0.14.5-py2.py3-none-any.whl", hash = "sha256:d224535dd8ed00294f52b0e0e18fde7a6fb7a3d06b97ede9e3f750fa7bf75c09"}, + {file = "scp-0.14.5.tar.gz", hash = "sha256:64f0015899b3d212cb8088e7d40ebaf0686889ff0e243d5c1242efe8b50f053e"}, +] [package.dependencies] paramiko = "*" [[package]] name = "setuptools" -version = "65.4.1" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false +optional = true python-versions = ">=3.7" +files = [ + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] [[package]] name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] -name = "Sphinx" -version = "5.2.3" +name = "sphinx" +version = "6.2.1" description = "Python documentation generator" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, + {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, +] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18.1,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.13" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -1015,31 +1770,38 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-rtd-theme" -version = "1.0.0" +version = "1.2.2" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, + {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, +] [package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6" +docutils = "<0.19" +sphinx = ">=1.6,<7" +sphinxcontrib-jquery = ">=4,<5" [package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "dev" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -1049,9 +1811,12 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -1059,23 +1824,43 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.0" +version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +description = "Extension to include jQuery on newer Sphinx releases" +optional = false +python-versions = ">=2.7" +files = [ + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, +] + +[package.dependencies] +Sphinx = ">=1.8" + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] test = ["flake8", "mypy", "pytest"] @@ -1084,9 +1869,12 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -1096,9 +1884,12 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -1106,34 +1897,28 @@ test = ["pytest"] [[package]] name = "stevedore" -version = "3.5.1" +version = "5.1.0" description = "Manage dynamic plugins for Python applications" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] [package.dependencies] -importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} pbr = ">=2.0.0,<2.1.0 || >2.1.0" -[[package]] -name = "tenacity" -version = "8.1.0" -description = "Retry code until it succeeds" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] - [[package]] name = "textfsm" -version = "1.1.2" +version = "1.1.3" description = "Python module for parsing semi-structured text into python tables." -category = "main" optional = true python-versions = "*" +files = [ + {file = "textfsm-1.1.3-py2.py3-none-any.whl", hash = "sha256:dcbeebc6a6137bed561c71a56344d752e6dbc04ae5ea309252cb70fb97ccc9cd"}, + {file = "textfsm-1.1.3.tar.gz", hash = "sha256:577ef278a9237f5341ae9b682947cefa4a2c1b24dbe486f94f2c95addc6504b5"}, +] [package.dependencies] future = "*" @@ -1143,25 +1928,45 @@ six = "*" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tomlkit" +version = "0.11.8" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, + {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, +] [[package]] name = "transitions" version = "0.9.0" description = "A lightweight, object-oriented Python state machine implementation with many extensions." -category = "main" optional = true python-versions = "*" +files = [ + {file = "transitions-0.9.0-py2.py3-none-any.whl", hash = "sha256:5687ee8c6a3200830e44f988d16b0045f53293f7a873002d7bff70852331a078"}, + {file = "transitions-0.9.0.tar.gz", hash = "sha256:2f54d11bdb225779d7e729011e93a9fb717668ce3dc65f8d4f5a5d7ba2f48e10"}, +] [package.dependencies] six = "*" @@ -1172,11 +1977,14 @@ test = ["pytest"] [[package]] name = "ttp" -version = "0.9.1" +version = "0.9.5" description = "Template Text Parser" -category = "main" optional = true python-versions = ">=2.7,<4.0" +files = [ + {file = "ttp-0.9.5-py2.py3-none-any.whl", hash = "sha256:2c9fcf560b3f696e9fdd3554dc8e4622cbb10cac1d4fca13a7cf608c4a7fd137"}, + {file = "ttp-0.9.5.tar.gz", hash = "sha256:234414f4d3039d2d1cde09993f89f8db1b34d447f76c6a402555cefac2e59c4e"}, +] [package.extras] docs = ["Sphinx (==4.3.0)", "readthedocs-sphinx-search (==0.1.1)", "sphinx_rtd_theme (==1.0.0)", "sphinxcontrib-applehelp (==1.0.1)", "sphinxcontrib-devhelp (==1.0.1)", "sphinxcontrib-htmlhelp (==2.0.0)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-napoleon (==0.7)", "sphinxcontrib-qthelp (==1.0.2)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-spelling (==7.2.1)"] @@ -1184,11 +1992,14 @@ full = ["cerberus (>=1.3.0,<1.4.0)", "deepdiff (>=5.8.0,<5.9.0)", "jinja2 (>=3.0 [[package]] name = "ttp-templates" -version = "0.3.1" +version = "0.3.5" description = "Template Text Parser Templates collections" -category = "main" optional = true python-versions = ">=3.6,<4.0" +files = [ + {file = "ttp_templates-0.3.5-py3-none-any.whl", hash = "sha256:4985a68640468127a0e31021672039cd88a8b9c3dd9289cad67839209cddaf30"}, + {file = "ttp_templates-0.3.5.tar.gz", hash = "sha256:e59870d4f65bd4aaf89178dc9065a7db8b80a23d5d79b5d6ffd041312d5ec5a6"}, +] [package.dependencies] ttp = ">=0.6.0" @@ -1196,994 +2007,207 @@ ttp = ">=0.6.0" [package.extras] docs = ["mkdocs (==1.2.4)", "mkdocs-material (==7.2.2)", "mkdocs-material-extensions (==1.0.1)", "mkdocstrings[python] (>=0.18.0,<0.19.0)", "pygments (==2.11)", "pymdown-extensions (==9.3)"] -[[package]] -name = "typed-ast" -version = "1.5.4" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = ">=3.6" - [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] [[package]] name = "urllib3" -version = "1.26.12" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, +] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "watchdog" -version = "2.1.9" +version = "3.0.0" description = "Filesystem events monitoring" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] [package.extras] watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wrapt" -version = "1.14.1" +version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] [[package]] name = "yamllint" -version = "1.28.0" +version = "1.32.0" description = "A linter for YAML files." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "yamllint-1.32.0-py3-none-any.whl", hash = "sha256:d97a66e48da820829d96077d76b8dfbe6c6140f106e558dae87e81ac4e6b30b7"}, + {file = "yamllint-1.32.0.tar.gz", hash = "sha256:d01dde008c65de5b235188ab3110bebc59d18e5c65fc8a58267cd211cd9df34a"}, +] [package.dependencies] pathspec = ">=0.5.3" pyyaml = "*" -setuptools = "*" + +[package.extras] +dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] [[package]] name = "yamlordereddictloader" version = "0.4.0" description = "YAML loader and dump for PyYAML allowing to keep keys order." -category = "main" optional = true python-versions = "*" +files = [ + {file = "yamlordereddictloader-0.4.0.tar.gz", hash = "sha256:7f30f0b99ea3f877f7cb340c570921fa9d639b7f69cba18be051e27f8de2080e"}, +] [package.dependencies] pyyaml = "*" [[package]] name = "zipp" -version = "3.9.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, +] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] optionals = ["napalm"] [metadata] -lock-version = "1.1" -python-versions = "^3.7" -content-hash = "007e525065bcc650521ddc3f3babe30e32f02092267bc77ff58565863e615916" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -astroid = [ - {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, - {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -Babel = [ - {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, -] -bandit = [ - {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, - {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, -] -bcrypt = [ - {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"}, - {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"}, - {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"}, - {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"}, - {file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"}, - {file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"}, - {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"}, - {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"}, - {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"}, - {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"}, - {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"}, - {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"}, - {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"}, - {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"}, - {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"}, - {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, -] -black = [ - {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, - {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, - {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, - {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, - {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, - {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, - {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, - {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, - {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, - {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, - {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, - {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, - {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, - {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, - {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, - {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, - {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, - {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, - {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, - {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, - {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, -] -cached-property = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] -certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] -coverage = [ - {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, - {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, - {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, - {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, - {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, - {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, - {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, - {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, - {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, - {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, - {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, - {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, - {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, - {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, - {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, - {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, -] -cryptography = [ - {file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f"}, - {file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6"}, - {file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a"}, - {file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294"}, - {file = "cryptography-38.0.1-cp36-abi3-win32.whl", hash = "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0"}, - {file = "cryptography-38.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a"}, - {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d"}, - {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9"}, - {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b"}, - {file = "cryptography-38.0.1.tar.gz", hash = "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7"}, -] -dill = [ - {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, - {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -flake8 = [ - {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"}, -] -ghp-import = [ - {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, - {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, -] -gitdb = [ - {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, - {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, -] -GitPython = [ - {file = "GitPython-3.1.29-py3-none-any.whl", hash = "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f"}, - {file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"}, -] -griffe = [ - {file = "griffe-0.22.2-py3-none-any.whl", hash = "sha256:cea5415ac6a92f4a22638e3f1f2e661402bac09fb8e8266936d67185a7e0d0fb"}, - {file = "griffe-0.22.2.tar.gz", hash = "sha256:1408e336a4155392bbd81eed9f2f44bf144e71b9c664e905630affe83bbc088e"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, - {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -invoke = [ - {file = "invoke-1.7.3-py3-none-any.whl", hash = "sha256:d9694a865764dd3fd91f25f7e9a97fb41666e822bbb00e670091e3f43933574d"}, - {file = "invoke-1.7.3.tar.gz", hash = "sha256:41b428342d466a82135d5ab37119685a989713742be46e42a3a399d685579314"}, -] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] -Jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -junos-eznc = [ - {file = "junos-eznc-2.6.5.tar.gz", hash = "sha256:fa4c3e0390db1e41b364fab3d703592b248e10d15a80fce5acddee00f037fed3"}, - {file = "junos_eznc-2.6.5-py2.py3-none-any.whl", hash = "sha256:0036512d2dfc0e875a0698092eb05fa03e394ed6aa3b0350ce051ef765773d8f"}, -] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, - {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, -] -lxml = [ - {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, - {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, - {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, - {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, - {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, - {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, - {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, - {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, - {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, - {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, - {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, - {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, - {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, - {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, - {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, - {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, - {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, - {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, - {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, - {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, - {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, - {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, - {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, - {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, - {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, - {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, - {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, - {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, - {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, - {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, - {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, - {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, - {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, - {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, - {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, - {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, - {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, - {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, - {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, - {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, - {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, -] -Markdown = [ - {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, - {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, -] -MarkupSafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mergedeep = [ - {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, - {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, -] -mkdocs = [ - {file = "mkdocs-1.3.1-py3-none-any.whl", hash = "sha256:fda92466393127d2da830bc6edc3a625a14b436316d1caf347690648e774c4f0"}, - {file = "mkdocs-1.3.1.tar.gz", hash = "sha256:a41a2ff25ce3bbacc953f9844ba07d106233cd76c88bac1f59cb1564ac0d87ed"}, -] -mkdocs-autorefs = [ - {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, - {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, -] -mkdocs-material = [ - {file = "mkdocs-material-8.3.9.tar.gz", hash = "sha256:dc82b667d2a83f0de581b46a6d0949732ab77e7638b87ea35b770b33bc02e75a"}, - {file = "mkdocs_material-8.3.9-py2.py3-none-any.whl", hash = "sha256:263f2721f3abe533b61f7c8bed435a0462620912742c919821ac2d698b4bfe67"}, -] -mkdocs-material-extensions = [ - {file = "mkdocs-material-extensions-1.0.3.tar.gz", hash = "sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"}, - {file = "mkdocs_material_extensions-1.0.3-py3-none-any.whl", hash = "sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44"}, -] -mkdocs-version-annotations = [ - {file = "mkdocs-version-annotations-1.0.0.tar.gz", hash = "sha256:6786024b37d27b330fda240b76ebec8e7ce48bd5a9d7a66e99804559d088dffa"}, - {file = "mkdocs_version_annotations-1.0.0-py3-none-any.whl", hash = "sha256:385004eb4a7530dd87a227e08cd907ce7a8fe21fdf297720a4149c511bcf05f5"}, -] -mkdocstrings = [ - {file = "mkdocstrings-0.19.0-py3-none-any.whl", hash = "sha256:3217d510d385c961f69385a670b2677e68e07b5fea4a504d86bf54c006c87c7d"}, - {file = "mkdocstrings-0.19.0.tar.gz", hash = "sha256:efa34a67bad11229d532d89f6836a8a215937548623b64f3698a1df62e01cc3e"}, -] -mkdocstrings-python = [ - {file = "mkdocstrings-python-0.7.1.tar.gz", hash = "sha256:c334b382dca202dfa37071c182418a6df5818356a95d54362a2b24822ca3af71"}, - {file = "mkdocstrings_python-0.7.1-py3-none-any.whl", hash = "sha256:a22060bfa374697678e9af4e62b020d990dad2711c98f7a9fac5c0345bef93c7"}, -] -mypy = [ - {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, - {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, - {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, - {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, - {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, - {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, - {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, - {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, - {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, - {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, - {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, - {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, - {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, - {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, - {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, - {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, - {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, - {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, - {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -napalm = [ - {file = "napalm-4.0.0-py2.py3-none-any.whl", hash = "sha256:e4289f6966974b485c1f3de3e8f4a11ac2ed2825e975bbd5afc006331b1e4c36"}, - {file = "napalm-4.0.0.tar.gz", hash = "sha256:40e1bd297ac4102c14c0d427c51d61c3a12d5d5bec163750733941ad82a464ee"}, -] -ncclient = [ - {file = "ncclient-0.6.13.tar.gz", hash = "sha256:f9f8cea8bcbe057e1b948b9cd1b241eafb8a3f73c4981fbdfa1cc6ed69c0a7b3"}, -] -netaddr = [ - {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"}, - {file = "netaddr-0.8.0.tar.gz", hash = "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"}, -] -netmiko = [ - {file = "netmiko-4.1.2-py3-none-any.whl", hash = "sha256:ee1e88ecbd07f619b0bc1e90648f82a64a0adee5968c3068621bbdadbfec5c03"}, - {file = "netmiko-4.1.2.tar.gz", hash = "sha256:f5ede2a28670d3dfd3470061468665f80f9b4906ed20e6b0fb4d9e1c9be67afc"}, -] -ntc-templates = [ - {file = "ntc_templates-3.1.0-py3-none-any.whl", hash = "sha256:e59fbc485a132e0d3eecb6f53fc8e85426cec099ef39678cdc20eec8dccaced6"}, - {file = "ntc_templates-3.1.0.tar.gz", hash = "sha256:7231e4227d46d1a04a03a34e3478b23acee7869942cce62b6722b2c925c2f809"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -paramiko = [ - {file = "paramiko-2.11.0-py2.py3-none-any.whl", hash = "sha256:655f25dc8baf763277b933dfcea101d636581df8d6b9774d1fb653426b72c270"}, - {file = "paramiko-2.11.0.tar.gz", hash = "sha256:003e6bee7c034c21fbb051bf83dc0a9ee4106204dd3c53054c71452cc4ec3938"}, -] -pathspec = [ - {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, - {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, -] -pbr = [ - {file = "pbr-5.10.0-py2.py3-none-any.whl", hash = "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"}, - {file = "pbr-5.10.0.tar.gz", hash = "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pydocstyle = [ - {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, - {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, -] -pyeapi = [ - {file = "pyeapi-0.8.4.tar.gz", hash = "sha256:c33ad1eadd8ebac75f63488df9412081ce0b024c9e1da12a37196a5c60427c54"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -Pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -pylint = [ - {file = "pylint-2.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, - {file = "pylint-2.13.9.tar.gz", hash = "sha256:095567c96e19e6f57b5b907e67d265ff535e588fe26b12b5ebe1fc5645b2c731"}, -] -pymdown-extensions = [ - {file = "pymdown_extensions-9.6-py3-none-any.whl", hash = "sha256:1e36490adc7bfcef1fdb21bb0306e93af99cff8ec2db199bd17e3bf009768c11"}, - {file = "pymdown_extensions-9.6.tar.gz", hash = "sha256:b956b806439bbff10f726103a941266beb03fbe99f897c7d5e774d7170339ad9"}, -] -PyNaCl = [ - {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, - {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyserial = [ - {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, - {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, -] -pytest = [ - {file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, - {file = "pytest-7.1.3.tar.gz", hash = "sha256:4f365fec2dff9c1162f834d9f18af1ba13062db0c708bf7b946f8a5c76180c39"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -pytz = [ - {file = "pytz-2022.4-py2.py3-none-any.whl", hash = "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91"}, - {file = "pytz-2022.4.tar.gz", hash = "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174"}, -] -PyYAML = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -pyyaml_env_tag = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -scp = [ - {file = "scp-0.14.4-py2.py3-none-any.whl", hash = "sha256:29ddaafbfba60793a8a779694c97d8c150d365668a4ef67616c515b80a69ef2f"}, - {file = "scp-0.14.4.tar.gz", hash = "sha256:54699b92cb68ae34b5928c48a888eab9722a212502cba89aa795bd56597505bd"}, -] -setuptools = [ - {file = "setuptools-65.4.1-py3-none-any.whl", hash = "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012"}, - {file = "setuptools-65.4.1.tar.gz", hash = "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -smmap = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -Sphinx = [ - {file = "Sphinx-5.2.3.tar.gz", hash = "sha256:5b10cb1022dac8c035f75767799c39217a05fc0fe2d6fe5597560d38e44f0363"}, - {file = "sphinx-5.2.3-py3-none-any.whl", hash = "sha256:7abf6fabd7b58d0727b7317d5e2650ef68765bbe0ccb63c8795fa8683477eaa2"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, - {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -stevedore = [ - {file = "stevedore-3.5.1-py3-none-any.whl", hash = "sha256:df36e6c003264de286d6e589994552d3254052e7fc6a117753d87c471f06de2a"}, - {file = "stevedore-3.5.1.tar.gz", hash = "sha256:1fecadf3d7805b940227f10e6a0140b202c9a24ba5c60cb539159046dc11e8d7"}, -] -tenacity = [ - {file = "tenacity-8.1.0-py3-none-any.whl", hash = "sha256:35525cd47f82830069f0d6b73f7eb83bc5b73ee2fff0437952cedf98b27653ac"}, - {file = "tenacity-8.1.0.tar.gz", hash = "sha256:e48c437fdf9340f5666b92cd7990e96bc5fc955e1298baf4a907e3972067a445"}, -] -textfsm = [ - {file = "textfsm-1.1.2-py2.py3-none-any.whl", hash = "sha256:f3d4e9bd4344935a08e6844e53d6220e2e4fb7e465bee51fa909152ed6bab406"}, - {file = "textfsm-1.1.2.tar.gz", hash = "sha256:85a450b441aff04b1cac726bdb36f35534a5b196cca08c8bc14fddd879c4255c"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -transitions = [ - {file = "transitions-0.9.0-py2.py3-none-any.whl", hash = "sha256:5687ee8c6a3200830e44f988d16b0045f53293f7a873002d7bff70852331a078"}, - {file = "transitions-0.9.0.tar.gz", hash = "sha256:2f54d11bdb225779d7e729011e93a9fb717668ce3dc65f8d4f5a5d7ba2f48e10"}, -] -ttp = [ - {file = "ttp-0.9.1-py2.py3-none-any.whl", hash = "sha256:50d3f63a6b311f74d6928cfec0d22a962153c82ba2d1976c599873f32914b5bd"}, - {file = "ttp-0.9.1.tar.gz", hash = "sha256:25c9014d9c3f65e2f135053f9ec1fab98dc698bb999d0e8187dc0e64f8a3f549"}, -] -ttp-templates = [ - {file = "ttp_templates-0.3.1-py3-none-any.whl", hash = "sha256:ea85b5d5cc4db91654bba7c0c2bb1ac004daec78fe0f601787904d152bd08ad5"}, - {file = "ttp_templates-0.3.1.tar.gz", hash = "sha256:1916a8b165071fc818be22664b67eb7698dc439c287369c15559e00ea450a5b3"}, -] -typed-ast = [ - {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, - {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, - {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, - {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, - {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, - {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, - {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, - {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, - {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, - {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, - {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, - {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, - {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, - {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, - {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, - {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, - {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, -] -watchdog = [ - {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"}, - {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"}, - {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"}, - {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"}, - {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"}, - {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"}, - {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"}, - {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"}, - {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"}, - {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"}, - {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"}, - {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"}, - {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"}, - {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"}, - {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"}, - {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"}, - {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"}, - {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"}, - {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"}, -] -wrapt = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, -] -yamllint = [ - {file = "yamllint-1.28.0.tar.gz", hash = "sha256:9e3d8ddd16d0583214c5fdffe806c9344086721f107435f68bad990e5a88826b"}, -] -yamlordereddictloader = [ - {file = "yamlordereddictloader-0.4.0.tar.gz", hash = "sha256:7f30f0b99ea3f877f7cb340c570921fa9d639b7f69cba18be051e27f8de2080e"}, -] -zipp = [ - {file = "zipp-3.9.0-py3-none-any.whl", hash = "sha256:972cfa31bc2fedd3fa838a51e9bc7e64b7fb725a8c00e7431554311f180e9980"}, - {file = "zipp-3.9.0.tar.gz", hash = "sha256:3a7af91c3db40ec72dd9d154ae18e008c69efe8ca88dde4f9a731bb82fe2f9eb"}, -] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "33c424b51ad569e5ea3394b74c3d46f12ec4c808e52f7e2e56b81adbf323b7f4" diff --git a/pyproject.toml b/pyproject.toml index 73b46b1c..8a1a381b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,12 +11,12 @@ readme = "README.md" keywords = ["netutils", "network utils", "network utilities", "net-utils"] classifiers = [ "Intended Audience :: Developers", - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", ] include = [ "LICENSE", @@ -25,7 +25,7 @@ include = [ ] [tool.poetry.dependencies] -python = "^3.7" +python = "^3.8" napalm = {version = "^4.0.0", optional = true} [tool.poetry.extras] @@ -45,15 +45,15 @@ sphinx-rtd-theme = "*" toml = "*" yamllint = "*" mypy = "^0.961" -mkdocs = "1.3.1" -mkdocs-material = "8.3.9" -mkdocstrings = "0.19" -mkdocstrings-python = "0.7.1" +mkdocs = "1.4.3" +mkdocs-material = "8.5.8" +mkdocstrings = "0.22.0" +mkdocstrings-python = "1.1.2" mkdocs-version-annotations = "1.0.0" [tool.black] line-length = 120 -target-version = ['py37'] +target-version = ['py311'] include = '\.pyi?$' exclude = ''' ( @@ -70,6 +70,8 @@ exclude = ''' | dist | data_files # This is ran via black within the flatbot process, redundant and slow otherwise )/ + | sros_full_received.py # TODO: Taking very long, should look to fix + | iosxr_full_received.py # TODO: Taking very long, should look to fix | settings.py # This is where you define files that should not be stylized by black # the root of the project ) @@ -85,7 +87,6 @@ good-names="i,ip,j,k,ex,Run,_" # Pylint and Black disagree about how to format multi-line arrays; Black wins. disable = """, line-too-long, - bad-continuation, consider-iterating-dictionary, """ @@ -102,7 +103,7 @@ testpaths = "tests/" addopts = "-vv --doctest-modules -p no:warnings --ignore-glob='*mock*'" [tool.mypy] -python_version = 3.7 +python_version = 3.11 ignore_errors = false disallow_untyped_calls = true disallow_untyped_defs = true diff --git a/tasks.py b/tasks.py index 671c5226..cdbb3296 100644 --- a/tasks.py +++ b/tasks.py @@ -1,7 +1,7 @@ """Tasks for use with Invoke.""" import os import sys -from distutils.util import strtobool +from distutils.util import strtobool # pylint: disable=W0402 from invoke import task @@ -31,7 +31,7 @@ def is_truthy(arg): TOOL_CONFIG = PYPROJECT_CONFIG["tool"]["poetry"] # Can be set to a separate Python version to be used for launching or building image -PYTHON_VER = os.getenv("PYTHON_VER", "3.9") +PYTHON_VER = os.getenv("PYTHON_VER", "3.11") # Name of the docker image/image IMAGE_NAME = os.getenv("IMAGE_NAME", TOOL_CONFIG["name"]) # Tag for the image diff --git a/tests/unit/mock/config/parser/citrix_netscaler/netscaler_full_received.py b/tests/unit/mock/config/parser/base/citrix_netscaler/netscaler_full_received.py similarity index 100% rename from tests/unit/mock/config/parser/citrix_netscaler/netscaler_full_received.py rename to tests/unit/mock/config/parser/base/citrix_netscaler/netscaler_full_received.py diff --git a/tests/unit/mock/config/parser/citrix_netscaler/netscaler_full_sent.txt b/tests/unit/mock/config/parser/base/citrix_netscaler/netscaler_full_sent.txt similarity index 100% rename from tests/unit/mock/config/parser/citrix_netscaler/netscaler_full_sent.txt rename to tests/unit/mock/config/parser/base/citrix_netscaler/netscaler_full_sent.txt From 3c5d3254e0f78e94aa6cff4203e298c097b4e085 Mon Sep 17 00:00:00 2001 From: Zach Biles Date: Sat, 22 Jul 2023 15:18:11 -0500 Subject: [PATCH 34/37] =?UTF-8?q?fix:=20=F0=9F=90=9B=20strip=20'devices=20?= =?UTF-8?q?localhost.localdomain'=20from=20set=20config=20(#316)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 🐛 strip 'devices localhost.localdomain' from set config * style: 🚨 fix black errors * style: 🚨 fix pylint errors * Update docs for how paloalto_panos_brace_to_set is used. --------- Co-authored-by: itdependsnetworks --- docs/dev/dev_config.md | 4 + netutils/config/conversion.py | 4 + netutils/config/parser.py | 18 +- .../paloalto_panos/panos_full_feature.py | 2 +- .../paloalto_panos/panos_full_received.txt | 4 +- .../paloalto_panos/panos_full_sent.txt | 8 +- .../paloalto_basic_converted.txt | 8 +- .../paloalto_panos/panos_basic_received.py | 10 +- .../paloalto_panos/panos_full_received.py | 168 ++++++++---------- 9 files changed, 112 insertions(+), 114 deletions(-) diff --git a/docs/dev/dev_config.md b/docs/dev/dev_config.md index a6ec9673..86901d56 100644 --- a/docs/dev/dev_config.md +++ b/docs/dev/dev_config.md @@ -26,6 +26,10 @@ The section banners have been simplified to extract the section header itself. T As the NetScaler configuration uses each line to make a specific configuration change there is no support for parent/child relationships in the parser. +### Palo Alto Conversion + +The conversion from curly to set format via the `paloalto_panos_brace_to_set` function strips any usage of `devices localhost.localdomain`. This will be evaluated in the future to be configurable but it is the current intention. + ### Duplicate Line Detection In some circumstances replacing lines, such as secrets without uniqueness in the replacement, will result in duplicated lines that are invalid configuration, such as:: diff --git a/netutils/config/conversion.py b/netutils/config/conversion.py index c23934d0..23325a2f 100644 --- a/netutils/config/conversion.py +++ b/netutils/config/conversion.py @@ -91,4 +91,8 @@ def paloalto_panos_brace_to_set(cfg: str, cfg_type: str = "file") -> str: if _l < len(cfg_value) - 1: cfg_string += "\n" + # Filter out 'devices localhost.local domain' from the entire cfg_string + # TODO: Add flagging capability to disable this behavior + cfg_string = cfg_string.replace("devices localhost.localdomain ", "") + return cfg_string diff --git a/netutils/config/parser.py b/netutils/config/parser.py index 252e4989..90c3e139 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -1424,7 +1424,7 @@ class PaloAltoNetworksConfigParser(BaseSpaceConfigParser): banner_start: t.List[str] = [ 'set system login-banner "', 'login-banner "', - 'set devices localhost.localdomain deviceconfig system login-banner "', + 'set deviceconfig system login-banner "', ] banner_end = '"' @@ -1473,18 +1473,18 @@ def build_config_relationship(self) -> t.List[ConfigLine]: # pylint: disable=to Examples: >>> config = ( - ... "set devices localhost.localdomain deviceconfig system hostname firewall1\n" - ... "set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1\n" - ... "set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2\n" - ... "set devices localhost.localdomain deviceconfig setting config rematch yes\n" + ... "set deviceconfig system hostname firewall1\n" + ... "set deviceconfig system panorama local-panorama panorama-server 10.0.0.1\n" + ... "set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2\n" + ... "set deviceconfig setting config rematch yes\n" ... ) >>> config_tree = PaloAltoNetworksConfigParser(config) >>> config_tree.build_config_relationship() == \ ... [ - ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig system hostname firewall1", parents=()), - ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1", parents=()), - ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", parents=()), - ... ConfigLine(config_line="set devices localhost.localdomain deviceconfig setting config rematch yes", parents=()), + ... ConfigLine(config_line="set deviceconfig system hostname firewall1", parents=()), + ... ConfigLine(config_line="set deviceconfig system panorama local-panorama panorama-server 10.0.0.1", parents=()), + ... ConfigLine(config_line="set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", parents=()), + ... ConfigLine(config_line="set deviceconfig setting config rematch yes", parents=()), ... ] True """ diff --git a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py index eca41c1e..dfd977d0 100644 --- a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py +++ b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_feature.py @@ -1,5 +1,5 @@ feature = { "name": "many", "ordered": True, - "section": ["set mgt-config", "set devices localhost.localdomain deviceconfig system panorama"], + "section": ["set mgt-config", "set deviceconfig system panorama"], } diff --git a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt index 689687a8..db81d94f 100644 --- a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt +++ b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_received.txt @@ -3,5 +3,5 @@ set mgt-config users admin permissions role-based superuser yes set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring set mgt-config users panadmin permissions role-based superuser yes set mgt-config users panadmin phash passwordhash -set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1 -set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file +set deviceconfig system panorama local-panorama panorama-server 10.0.0.1 +set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file diff --git a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt index 85be77fa..6bf852c7 100644 --- a/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt +++ b/tests/unit/mock/config/compliance/section/paloalto_panos/panos_full_sent.txt @@ -3,8 +3,8 @@ set mgt-config users admin permissions role-based superuser yes set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring set mgt-config users panadmin permissions role-based superuser yes set mgt-config users panadmin phash passwordhash -set devices localhost.localdomain deviceconfig system hostname firewall1 -set devices localhost.localdomain deviceconfig system login-banner " +set deviceconfig system hostname firewall1 +set deviceconfig system login-banner " ************************************************************************ * firewall1.example.com * [PROD VM500 firewalls] ************************************************************************ @@ -17,5 +17,5 @@ set devices localhost.localdomain deviceconfig system login-banner " * * ************************************************************************ " -set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1 -set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file +set deviceconfig system panorama local-panorama panorama-server 10.0.0.1 +set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file diff --git a/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt b/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt index 621a4782..79137ec0 100644 --- a/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt +++ b/tests/unit/mock/config/conversion/paloalto_panos/paloalto_basic_converted.txt @@ -3,8 +3,8 @@ set mgt-config users admin permissions role-based superuser yes set mgt-config users admin public-key thisisasuperduperlongbase64encodedstring set mgt-config users panadmin permissions role-based superuser yes set mgt-config users panadmin phash passwordhash -set devices localhost.localdomain deviceconfig system hostname firewall1 -set devices localhost.localdomain deviceconfig system login-banner " +set deviceconfig system hostname firewall1 +set deviceconfig system login-banner " ************************************************************************ * firewall1.example.com * [PROD VM500 firewalls] ************************************************************************ @@ -18,5 +18,5 @@ set devices localhost.localdomain deviceconfig system login-banner " ************************************************************************ " -set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1 -set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file +set deviceconfig system panorama local-panorama panorama-server 10.0.0.1 +set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2 \ No newline at end of file diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py index ef05a972..053750f1 100644 --- a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py @@ -22,23 +22,23 @@ parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system hostname firewall1", + config_line="set deviceconfig system hostname firewall1", parents=(), ), ConfigLine( - config_line='set devices localhost.localdomain deviceconfig system login-banner "', + config_line='set deviceconfig system login-banner "', parents=(), ), ConfigLine( config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************^C", - parents=('set devices localhost.localdomain deviceconfig system login-banner "',), + parents=('set deviceconfig system login-banner "',), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1", + config_line="set deviceconfig system panorama local-panorama panorama-server 10.0.0.1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", + config_line="set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", parents=(), ), ] diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py index 923742d1..3d4984ec 100644 --- a/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py @@ -63,278 +63,268 @@ ConfigLine(config_line="set shared application-status notion-logout", parents=()), ConfigLine(config_line="set shared application-status notion-upload", parents=()), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 ipv6 neighbor-discovery router-advertisement enable no", + config_line="set network interface ethernet ethernet1/1 layer3 ipv6 neighbor-discovery router-advertisement enable no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 ndp-proxy enabled no", + config_line="set network interface ethernet ethernet1/1 layer3 ndp-proxy enabled no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 dhcp-client create-default-route yes", + config_line="set network interface ethernet ethernet1/1 layer3 dhcp-client create-default-route yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/1 layer3 lldp enable no", + config_line="set network interface ethernet ethernet1/1 layer3 lldp enable no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 ipv6 neighbor-discovery router-advertisement enable no", + config_line="set network interface ethernet ethernet1/2 layer3 ipv6 neighbor-discovery router-advertisement enable no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 ndp-proxy enabled no", + config_line="set network interface ethernet ethernet1/2 layer3 ndp-proxy enabled no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 dhcp-client create-default-route no", + config_line="set network interface ethernet ethernet1/2 layer3 dhcp-client create-default-route no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 lldp enable no", + config_line="set network interface ethernet ethernet1/2 layer3 lldp enable no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 layer3 interface-management-profile mgt", + config_line="set network interface ethernet ethernet1/2 layer3 interface-management-profile mgt", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network interface ethernet ethernet1/2 link-state auto", + config_line="set network interface ethernet ethernet1/2 link-state auto", parents=(), ), + ConfigLine(config_line="set network profiles monitor-profile default interval 3", parents=()), + ConfigLine(config_line="set network profiles monitor-profile default threshold 5", parents=()), ConfigLine( - config_line="set devices localhost.localdomain network profiles monitor-profile default interval 3", parents=() - ), - ConfigLine( - config_line="set devices localhost.localdomain network profiles monitor-profile default threshold 5", parents=() - ), - ConfigLine( - config_line="set devices localhost.localdomain network profiles monitor-profile default action wait-recover", + config_line="set network profiles monitor-profile default action wait-recover", parents=(), ), + ConfigLine(config_line="set network profiles interface-management-profile", parents=()), ConfigLine( - config_line="set devices localhost.localdomain network profiles interface-management-profile", parents=() - ), - ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default encryption [ aes-128-cbc 3des]", + config_line="set network ike crypto-profiles ike-crypto-profiles default encryption [ aes-128-cbc 3des]", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default hash sha1", + config_line="set network ike crypto-profiles ike-crypto-profiles default hash sha1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default dh-group group2", + config_line="set network ike crypto-profiles ike-crypto-profiles default dh-group group2", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles default lifetime hours 8", + config_line="set network ike crypto-profiles ike-crypto-profiles default lifetime hours 8", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 encryption aes-128-cbc", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 encryption aes-128-cbc", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 hash sha256", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 hash sha256", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 dh-group group19", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 dh-group group19", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 lifetime hours 8", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-128 lifetime hours 8", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 encryption aes-256-cbc", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 encryption aes-256-cbc", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 hash sha384", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 hash sha384", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 dh-group group20", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 dh-group group20", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 lifetime hours 8", + config_line="set network ike crypto-profiles ike-crypto-profiles Suite-B-GCM-256 lifetime hours 8", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default esp encryption [ aes-128-cbc 3des]", + config_line="set network ike crypto-profiles ipsec-crypto-profiles default esp encryption [ aes-128-cbc 3des]", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default esp authentication sha1", + config_line="set network ike crypto-profiles ipsec-crypto-profiles default esp authentication sha1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default dh-group group2", + config_line="set network ike crypto-profiles ipsec-crypto-profiles default dh-group group2", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles default lifetime hours 1", + config_line="set network ike crypto-profiles ipsec-crypto-profiles default lifetime hours 1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 esp encryption aes-128-gcm", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 esp encryption aes-128-gcm", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 esp authentication none", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 esp authentication none", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 dh-group group19", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 dh-group group19", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 lifetime hours 1", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-128 lifetime hours 1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 esp encryption aes-256-gcm", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 esp encryption aes-256-gcm", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 esp authentication none", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 esp authentication none", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 dh-group group20", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 dh-group group20", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 lifetime hours 1", + config_line="set network ike crypto-profiles ipsec-crypto-profiles Suite-B-GCM-256 lifetime hours 1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles global-protect-app-crypto-profiles default encryption aes-128-cbc", + config_line="set network ike crypto-profiles global-protect-app-crypto-profiles default encryption aes-128-cbc", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network ike crypto-profiles global-protect-app-crypto-profiles default authentication sha1", + config_line="set network ike crypto-profiles global-protect-app-crypto-profiles default authentication sha1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class1 priority real-time", + config_line="set network qos profile default class-bandwidth-type mbps class class1 priority real-time", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class2 priority high", + config_line="set network qos profile default class-bandwidth-type mbps class class2 priority high", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class3 priority high", + config_line="set network qos profile default class-bandwidth-type mbps class class3 priority high", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class4 priority medium", + config_line="set network qos profile default class-bandwidth-type mbps class class4 priority medium", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class5 priority medium", + config_line="set network qos profile default class-bandwidth-type mbps class class5 priority medium", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class6 priority low", + config_line="set network qos profile default class-bandwidth-type mbps class class6 priority low", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class7 priority low", + config_line="set network qos profile default class-bandwidth-type mbps class class7 priority low", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain network qos profile default class-bandwidth-type mbps class class8 priority low", + config_line="set network qos profile default class-bandwidth-type mbps class class8 priority low", parents=(), ), - ConfigLine(config_line="set devices localhost.localdomain network virtual-router", parents=()), + ConfigLine(config_line="set network virtual-router", parents=()), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system type dhcp-client send-hostname yes", + config_line="set deviceconfig system type dhcp-client send-hostname yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system type dhcp-client send-client-id yes", + config_line="set deviceconfig system type dhcp-client send-client-id yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system type dhcp-client accept-dhcp-hostname no", + config_line="set deviceconfig system type dhcp-client accept-dhcp-hostname no", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system type dhcp-client accept-dhcp-domain yes", + config_line="set deviceconfig system type dhcp-client accept-dhcp-domain yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system update-server updates.paloaltonetworks.com", + config_line="set deviceconfig system update-server updates.paloaltonetworks.com", parents=(), ), - ConfigLine(config_line="set devices localhost.localdomain deviceconfig system update-schedule", parents=()), - ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system service disable-telnet yes", parents=() - ), - ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system service disable-http yes", parents=() - ), - ConfigLine(config_line="set devices localhost.localdomain deviceconfig system hostname firewall1", parents=()), - ConfigLine(config_line='set devices localhost.localdomain deviceconfig system login-banner "', parents=()), + ConfigLine(config_line="set deviceconfig system update-schedule", parents=()), + ConfigLine(config_line="set deviceconfig system service disable-telnet yes", parents=()), + ConfigLine(config_line="set deviceconfig system service disable-http yes", parents=()), + ConfigLine(config_line="set deviceconfig system hostname firewall1", parents=()), + ConfigLine(config_line='set deviceconfig system login-banner "', parents=()), ConfigLine( config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************^C", - parents=('set devices localhost.localdomain deviceconfig system login-banner "',), + parents=('set deviceconfig system login-banner "',), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server 10.0.0.1", + config_line="set deviceconfig system panorama local-panorama panorama-server 10.0.0.1", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", + config_line="set deviceconfig system panorama local-panorama panorama-server-2 10.0.0.2", parents=(), ), - ConfigLine(config_line="set devices localhost.localdomain deviceconfig setting config rematch yes", parents=()), + ConfigLine(config_line="set deviceconfig setting config rematch yes", parents=()), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management hostname-type-in-syslog FQDN", + config_line="set deviceconfig setting management hostname-type-in-syslog FQDN", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg public-key thisisasuperduperlongbase64encodedstring=", + config_line="set deviceconfig setting management initcfg public-key thisisasuperduperlongbase64encodedstring=", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client send-hostname yes", + config_line="set deviceconfig setting management initcfg type dhcp-client send-hostname yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client send-client-id yes", + config_line="set deviceconfig setting management initcfg type dhcp-client send-client-id yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client accept-dhcp-hostname yes", + config_line="set deviceconfig setting management initcfg type dhcp-client accept-dhcp-hostname yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg type dhcp-client accept-dhcp-domain yes", + config_line="set deviceconfig setting management initcfg type dhcp-client accept-dhcp-domain yes", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg dns-primary 8.8.8.8", + config_line="set deviceconfig setting management initcfg dns-primary 8.8.8.8", parents=(), ), ConfigLine( - config_line="set devices localhost.localdomain deviceconfig setting management initcfg op-command-modes mgmt-interface-swap", + config_line="set deviceconfig setting management initcfg op-command-modes mgmt-interface-swap", parents=(), ), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 zone", parents=()), + ConfigLine(config_line="set vsys vsys1 zone", parents=()), ConfigLine( - config_line="set devices localhost.localdomain vsys vsys1 import network interface [ ethernet1/1 ethernet1/2 vlan loopback tunnel]", + config_line="set vsys vsys1 import network interface [ ethernet1/1 ethernet1/2 vlan loopback tunnel]", parents=(), ), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 import network vlan", parents=()), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 import network virtual-router", parents=()), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 import network virtual-wire", parents=()), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 address", parents=()), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 rulebase security rules", parents=()), - ConfigLine(config_line="set devices localhost.localdomain vsys vsys1 service", parents=()), + ConfigLine(config_line="set vsys vsys1 import network vlan", parents=()), + ConfigLine(config_line="set vsys vsys1 import network virtual-router", parents=()), + ConfigLine(config_line="set vsys vsys1 import network virtual-wire", parents=()), + ConfigLine(config_line="set vsys vsys1 address", parents=()), + ConfigLine(config_line="set vsys vsys1 rulebase security rules", parents=()), + ConfigLine(config_line="set vsys vsys1 service", parents=()), ] From 04829b35dd7761673cec254a573e4f03b46c6545 Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Mon, 24 Jul 2023 10:57:10 -0400 Subject: [PATCH 35/37] Regex filters (#318) * Closes #288 - added hostname_regex function and jinja filter * Add filters for regex_findall, regex_match, regex_search, regex_split, regex_sub * doc updates --------- Co-authored-by: John Anderson --- docs/dev/code_reference/regex.md | 5 + docs/user/include_jinja_list.md | 5 + docs/user/lib_use_cases_jinja_filters.md | 78 ++++++++++- mkdocs.yml | 1 + netutils/regex.py | 158 +++++++++++++++++++++++ netutils/utils.py | 5 + tests/unit/test_regex.py | 98 ++++++++++++++ 7 files changed, 347 insertions(+), 3 deletions(-) create mode 100644 docs/dev/code_reference/regex.md create mode 100644 netutils/regex.py create mode 100644 tests/unit/test_regex.py diff --git a/docs/dev/code_reference/regex.md b/docs/dev/code_reference/regex.md new file mode 100644 index 00000000..9c18b84c --- /dev/null +++ b/docs/dev/code_reference/regex.md @@ -0,0 +1,5 @@ +# Regex + +::: netutils.regex + options: + show_submodules: True \ No newline at end of file diff --git a/docs/user/include_jinja_list.md b/docs/user/include_jinja_list.md index 29fb3414..4be27d36 100644 --- a/docs/user/include_jinja_list.md +++ b/docs/user/include_jinja_list.md @@ -69,6 +69,11 @@ | encrypt_type7 | netutils.password.encrypt_type7 | | get_hash_salt | netutils.password.get_hash_salt | | tcp_ping | netutils.ping.tcp_ping | +| regex_findall | netutils.regex.regex_findall | +| regex_match | netutils.regex.regex_match | +| regex_search | netutils.regex.regex_search | +| regex_split | netutils.regex.regex_split | +| regex_sub | netutils.regex.regex_sub | | longest_prefix_match | netutils.route.longest_prefix_match | | uptime_seconds_to_string | netutils.time.uptime_seconds_to_string | | uptime_string_to_seconds | netutils.time.uptime_string_to_seconds | diff --git a/docs/user/lib_use_cases_jinja_filters.md b/docs/user/lib_use_cases_jinja_filters.md index d433d54d..c518f504 100644 --- a/docs/user/lib_use_cases_jinja_filters.md +++ b/docs/user/lib_use_cases_jinja_filters.md @@ -1,6 +1,6 @@ # Netutils to Jinja2 Filters -In an effort to simplify the process of adding netutils' functions to jinja2 as filters we have created a convenience function. Let's go through how you could add the filters to your jinja2 environment. +In an effort to simplify the process of adding netutils' functions to Jinja2 as filters we have created a convenience function. Let's go through how you could add the filters to your Jinja2 environment. Here is the current folder structure. ```bash @@ -58,7 +58,7 @@ class FilterModule(object): ## ipaddress Convenience Functions -When adding the netutils functions to your jinja2 environment, you also gain access to the built-in ipaddress python library using these three jinja2 filters. +When adding the netutils functions to your Jinja2 environment, you also gain access to the built-in ipaddress python library using these three Jinja2 filters. ```python "ipaddress_address": "ip.ipaddress_address", @@ -108,6 +108,78 @@ When you run `jinja2_environment.py` the output will be: The version of 192.168.0.1/24 is IPv4. ``` +## regex Convenience Functions + +When adding the netutils functions to your Jinja2 environment, you also gain access to the built-in `re` python library using these Jinja2 filters. + +```python + "regex_findall": "regex.regex_findall", + "regex_match": "regex.regex_match", + "regex_search": "regex.regex_search", + "regex_split": "regex.regex_split", + "regex_sub": "regex.regex_sub", +``` + +These functions will always return a json serializable object and not a complex object like `re.Match` or simialr to better serve the primary use case of functions to be used as Jinja2 filters. After all, they are simply small wrappers around Python `re` functions, the Python provided `re` functionality should be preferred when not using Jinja2 or similar templating language. + +Below is code that you can drop into your Python shell to help bring to life how these regex functions can be used. + +```python +from jinja2 import Environment, BaseLoader +from netutils.utils import jinja2_convenience_function + +env = Environment(loader=BaseLoader()) +env.filters.update(jinja2_convenience_function()) + +DATA = { + "device": "USSCAMS07", + "comma_seperated_devices": "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01" +} + +TEMPLATE_STRING = """ +{% set device_details = '([A-Z]{2})([A-Z]{2})([A-Z]{3})(\d*)' | regex_match(device) %} + +Country: {{ ('^([A-Z]{2})([A-Z]{2})([A-Z]{3})(\d*)' | regex_search(device))[0] }} +STATE: {{ device_details[1] }} +FUNCTION: {{ device_details[2] }} + +ALL DEVICES: +{% for router in ',' | regex_split(comma_seperated_devices) -%} + - {{ router }} +{% endfor %} + +ONLY ROUTERS: +{% for router in ',' | regex_split(comma_seperated_devices) -%} +{% if '-RT' | regex_search(router) -%} + - {{ router }} +{% endif -%} +{% endfor %} +""" + +template = env.from_string(TEMPLATE_STRING, DATA) +result = template.render() +print(result) +``` + +Which would result in the following output. + +```text +Country: US +STATE: SC +FUNCTION: AMS + +ALL DEVICES: +- NYC-RT01 +- NYC-RT02 +- SFO-SW01 +- SFO-RT01 + +ONLY ROUTERS: +- NYC-RT01 +- NYC-RT02 +- SFO-RT01 +``` + ## Netutils to Jinja2 Filters List @@ -115,6 +187,6 @@ The below list shows what jinja2 filters are added when you add them using the p !!! note - The jinja2 filter names match the python function names. + The Jinja2 filter names match the python function names. --8<-- "docs/user/include_jinja_list.md" \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index b8d0a7d5..981c82da 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -138,6 +138,7 @@ nav: - Password: "dev/code_reference/password.md" - Ping: "dev/code_reference/ping.md" - Protocol Mapper: "dev/code_reference/protocol_mapper.md" + - Regex: "dev/code_reference/regex.md" - Route: "dev/code_reference/route.md" - Time: "dev/code_reference/time.md" - Utils: "dev/code_reference/utils.md" diff --git a/netutils/regex.py b/netutils/regex.py new file mode 100644 index 00000000..67472ddb --- /dev/null +++ b/netutils/regex.py @@ -0,0 +1,158 @@ +"""Utilities to expose regex functions, primarily for Jinja2 filters.""" + +import re +import typing as t + + +def _match_object(match: t.Optional[t.Match[str]]) -> t.Union[t.List[str], str, None]: + """Helper method to better 'serialize' a re.Match object.""" + if not match: + return None + if match.groups(): + results = [] + for group in match.groups(): + results.append(group) + return results + return str(match.group()) + + +def regex_findall(pattern: str, string: str) -> t.List[str]: + r"""Given a regex pattern and string, return all non-overlapping matches of pattern in the string, as a list of strings. + + The main purpose of this function is provide a Jinja2 filter as this is simply a wrapper around `re.findall`. + + Args: + pattern: Regex string to match against. + string: String to check against. + + Returns: + List of matches, when there is no match the list will be empty. + + Examples: + >>> from netutils.regex import regex_findall + >>> match = regex_findall("\w\w\w-RT\d\d", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + >>> len(match) + 3 + >>> match[0] + 'NYC-RT01' + + """ + return re.findall(pattern, string) + + +def regex_match(pattern: str, string: str) -> t.Union[t.List[str], str, None]: + r"""Given a regex pattern and string, return `None` if there is no matching `re.Match.groups()` if using capture groups or regex match via `re.Match.group()` on start of string. + + This is useful in the following use cases: + + 1. Truthy conditional check that a string matches a given regex. + 2. Returning regex capture groups from the string. + 3. Matching for the start of a string, see `regex_search` when you do not want only start of string matching. + + The main purpose of this function is provide a Jinja2 filter as this is simply a wrapper around `re.match`. + + Args: + pattern: Regex string to match against. + string: String to check against. + + Returns: + List of matches, match, or None no match found + + Examples: + >>> from netutils.regex import regex_match + >>> print("South Carolina" if regex_match(".+SC.+\d\d", "USSCAMS07") else "Not South Carolina") + South Carolina + >>> + >>> match = regex_match("([A-Z]{2})([A-Z]{2})([A-Z]{3})(\d*)", "USSCAMS07") + >>> match[0] + 'US' + >>> match[1] + 'SC' + >>> match[2] + 'AMS' + >>> match[3] + '07' + + """ + return _match_object(re.match(pattern, string)) + + +def regex_search(pattern: str, string: str) -> t.Union[t.List[str], str, None]: + r"""Given a regex pattern and string, return `None` if there is no matching `re.Match.groups()` if using capture groups or regex match via `re.Match.group()`. + + The main purpose of this function is provide a Jinja2 filter as this is simply a wrapper around `re.search`. + + Args: + pattern: Regex string to match against. + string: String to check against. + + Returns: + List of matches, match, or None no match found. + + Examples: + >>> from netutils.regex import regex_search + >>> print("South Carolina" if regex_search(".+SC.+\d\d", "USSCAMS07") else "Not South Carolina") + South Carolina + >>> + >>> match = regex_search("^([A-Z]{2})([A-Z]{2})([A-Z]{3})(\d*)", "USSCAMS07") + >>> match[0] + 'US' + >>> match[1] + 'SC' + >>> match[2] + 'AMS' + >>> match[3] + '07' + + """ + return _match_object(re.search(pattern, string)) + + +def regex_split(pattern: str, string: str, maxsplit: int = 0) -> t.List[str]: + """Given a regex pattern and string, return the split the object based on the patern a single element or single element of original value if there is no match. + + The main purpose of this function is provide a Jinja2 filter as this is simply a wrapper around `re.split`. + + Args: + pattern: Regex string to match against. + string: String to check against. + maxsplit: The maximum time to split. + + Returns: + List of string of the match or single element list of original value if no match + + Examples: + >>> from netutils.regex import regex_split + >>> match = regex_split(",", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + >>> match[0] + 'NYC-RT01' + >>> match[3] + 'SFO-RT01' + """ + return re.split(pattern, string, maxsplit) + + +def regex_sub(pattern: str, repl: str, string: str, count: int = 0) -> str: + """Given a regex pattern, replacement, and string replace the pattern within the string and return. + + The main purpose of this function is provide a Jinja2 filter as this is simply a wrapper around `re.sub`. + + Args: + pattern: Regex string to match against. + repl: Replacement characters that were matched in the pattern. + string: String to check against. + count: The maximum time to replace. + + Returns: + List of string of the match or single element list of original value if no match + + Examples: + >>> from netutils.regex import regex_sub + >>> match = regex_sub(",", " ", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + >>> match + 'NYC-RT01 NYC-RT02 SFO-SW01 SFO-RT01' + >>> match = regex_sub("(ROUTER|RTR)", "RT", "NYC-ROUTER01,NYC-ROUTER02,NYC-RTR03") + >>> match + 'NYC-RT01,NYC-RT02,NYC-RT03' + """ + return re.sub(pattern, repl, string, count) diff --git a/netutils/utils.py b/netutils/utils.py index 338731af..9580c278 100644 --- a/netutils/utils.py +++ b/netutils/utils.py @@ -68,6 +68,11 @@ "encrypt_juniper_type9": "password.encrypt_juniper_type9", "get_hash_salt": "password.get_hash_salt", "tcp_ping": "ping.tcp_ping", + "regex_findall": "regex.regex_findall", + "regex_match": "regex.regex_match", + "regex_search": "regex.regex_search", + "regex_split": "regex.regex_split", + "regex_sub": "regex.regex_sub", "longest_prefix_match": "route.longest_prefix_match", "vlanlist_to_config": "vlan.vlanlist_to_config", "vlanconfig_to_list": "vlan.vlanconfig_to_list", diff --git a/tests/unit/test_regex.py b/tests/unit/test_regex.py new file mode 100644 index 00000000..800ba8f4 --- /dev/null +++ b/tests/unit/test_regex.py @@ -0,0 +1,98 @@ +"""Test for the regex based functions.""" + +from netutils import regex + + +def test_regex_findall_bool_true(): + match = regex.regex_findall(r"CAMS\d\d", "USSCAMS07") + assert bool(match) is True + + +def test_regex_findall_bool_false(): + match = regex.regex_findall("foobar", "USSCAMS07") + assert bool(match) is False + + +def test_regex_findall_list(): + match = regex.regex_findall(r"\w\w\w-RT\d\d", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + assert match[0] == "NYC-RT01" + assert match[1] == "NYC-RT02" + + +def test_regex_findall_is_none(): + match = regex.regex_findall("(foobar)", "USSCAMS07") + assert match == [] + + +def test_regex_match_bool_true(): + match = regex.regex_match(r".+SC.+\d\d", "USSCAMS07") + assert bool(match) is True + + +def test_regex_match_bool_false(): + match = regex.regex_match("foobar", "USSCAMS07") + assert bool(match) is False + + +def test_regex_match_list(): + match = regex.regex_match(r"([A-Z]{2})([A-Z]{2})([A-Z]{3})(\d*)", "USSCAMS07") + assert match[0] == "US" + assert match[1] == "SC" + match = regex.regex_match(r"[A-Z]{2}[A-Z]{2}[A-Z]{3}\d*", "USSCAMS07") + assert match == "USSCAMS07" + + +def test_regex_match_is_none(): + match = regex.regex_match("(foobar)", "USSCAMS07") + assert match is None + + +def test_regex_search_bool_true(): + match = regex.regex_search(r"CAMS\d\d", "USSCAMS07") + assert bool(match) is True + + +def test_regex_search_bool_false(): + match = regex.regex_search("foobar", "USSCAMS07") + assert bool(match) is False + + +def test_regex_search_list(): + match = regex.regex_search(r"([A-Z]{2})([A-Z]{2})([A-Z]{3})(\d*)", "USSCAMS07") + assert match[0] == "US" + assert match[1] == "SC" + match = regex.regex_search(r"[A-Z]{2}[A-Z]{2}[A-Z]{3}\d*", "USSCAMS07") + assert match == "USSCAMS07" + + +def test_regex_search_is_none(): + match = regex.regex_search("(foobar)", "USSCAMS07") + assert match is None + + +def test_regex_split_list(): + match = regex.regex_split(",", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + assert match[0] == "NYC-RT01" + assert match[1] == "NYC-RT02" + match = regex.regex_split("(.)", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + assert match[1] == "N" + match = regex.regex_split(",", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01", 1) + assert match[0] == "NYC-RT01" + assert match[1] == "NYC-RT02,SFO-SW01,SFO-RT01" + + +def test_regex_split_no_match(): + match = regex.regex_split(r"(\.)", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + assert match == ["NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01"] + + +def test_regex_sub_list(): + match = regex.regex_sub(",", " ", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + assert match == "NYC-RT01 NYC-RT02 SFO-SW01 SFO-RT01" + match = regex.regex_sub("(ROUTER|RTR)", "RT", "NYC-ROUTER01,NYC-ROUTER02,NYC-RTR03") + assert match == "NYC-RT01,NYC-RT02,NYC-RT03" + + +def test_regex_sub_no_match(): + match = regex.regex_sub("ABBA", "CADABBA", "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01") + assert match == "NYC-RT01,NYC-RT02,SFO-SW01,SFO-RT01" From 75872def3b09fc943068894a4efad4f4ff51b2fd Mon Sep 17 00:00:00 2001 From: Adam Byczkowski <38091261+qduk@users.noreply.github.com> Date: Mon, 24 Jul 2023 10:47:35 -0500 Subject: [PATCH 36/37] Fixed regex doc spelling (#321) --- docs/user/lib_use_cases_jinja_filters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user/lib_use_cases_jinja_filters.md b/docs/user/lib_use_cases_jinja_filters.md index c518f504..8cdd4756 100644 --- a/docs/user/lib_use_cases_jinja_filters.md +++ b/docs/user/lib_use_cases_jinja_filters.md @@ -120,7 +120,7 @@ When adding the netutils functions to your Jinja2 environment, you also gain acc "regex_sub": "regex.regex_sub", ``` -These functions will always return a json serializable object and not a complex object like `re.Match` or simialr to better serve the primary use case of functions to be used as Jinja2 filters. After all, they are simply small wrappers around Python `re` functions, the Python provided `re` functionality should be preferred when not using Jinja2 or similar templating language. +These functions will always return a json serializable object and not a complex object like `re.Match` or similar to better serve the primary use case of functions to be used as Jinja2 filters. After all, they are simply small wrappers around Python `re` functions, the Python provided `re` functionality should be preferred when not using Jinja2 or similar templating language. Below is code that you can drop into your Python shell to help bring to life how these regex functions can be used. From d38a03882da31211cf66a97003f0aace81f1f1ef Mon Sep 17 00:00:00 2001 From: Ken Celenza Date: Mon, 24 Jul 2023 11:56:42 -0400 Subject: [PATCH 37/37] Prep for a 1.5.0 release (#287) * Prep for a 1.5.0 release * Update docs/admin/release_notes/version_1.5.md Co-authored-by: Leo Kirchner * Add regex info --------- Co-authored-by: Leo Kirchner --- docs/admin/release_notes/version_1.5.md | 49 ++++++++++++++++++++ netutils/interface.py | 4 +- netutils/route.py | 2 +- poetry.lock | 60 +++++++++++++------------ pyproject.toml | 4 +- 5 files changed, 85 insertions(+), 34 deletions(-) create mode 100755 docs/admin/release_notes/version_1.5.md diff --git a/docs/admin/release_notes/version_1.5.md b/docs/admin/release_notes/version_1.5.md new file mode 100755 index 00000000..18c0317b --- /dev/null +++ b/docs/admin/release_notes/version_1.5.md @@ -0,0 +1,49 @@ +# v1.5 Release Notes + +## Release Overview + +- Added Mikrotik, fastiron, and Panos parsers. +- Added function to allow conversion from Panos curly bracket to set format. +- Updated Interface mappings for FourHundredGigabitEthernet and TwoGigabitEthernet. +- Added Encryption/Decryption/Comparison for Cisco & Juniper Type 9. +- Added Regex functions to primarily be used wihin your Jinja2 environment. + +## Announcements + +- Deprecation of compare_type5, compare_type7, encrypt_type7, encrypt_type5, and decrypt_type7 in favor of vendor namespaced functions, such as compare_cisco_type5 and decrypt_cisco_type7 to take place on netutils 2.0. +- Support for Python 3.7 is dropped. + +## [v1.5.0] - 2023-07 + +### Added + +- [#223](https://github.com/networktocode/netutils/pull/223) Interface abbreviation for TwoGigabitEthernet. +- [#227](https://github.com/networktocode/netutils/pull/227) Add functions for encrypting and decrypting junipter $9$ type passwords. +- [#244](https://github.com/networktocode/netutils/pull/244) Added Mikrotik RouterOS Parser. +- [#252](https://github.com/networktocode/netutils/pull/252) New lib mapper to translate between normalized network OS names and names used by hier_config. +- [#253](https://github.com/networktocode/netutils/pull/253) Add encrypt_type9 (changed to encrypt_cisco_type9) function to netutils.password. +- [#261](https://github.com/networktocode/netutils/pull/261) Added function get_upgrade_path to provide the step upgrade path of to a new version. +- [#262](https://github.com/networktocode/netutils/pull/262) Added Palo Alto networks panos parser. +- [#262](https://github.com/networktocode/netutils/pull/262) Added Palo Alto brace to set conversion function. +- [#264](https://github.com/networktocode/netutils/pull/264) Added Ruckus fastiron parser. +- [#285](https://github.com/networktocode/netutils/pull/285) Added FourHundredGigabitEthernet to REVERSE_MAPPING. +- [#318](https://github.com/networktocode/netutils/pull/318) Added Regex functions to primarily be used wihin your Jinja2 environment. + +### Changed + +- [#213](https://github.com/networktocode/netutils/pull/213) Clarify when Python 3.6 support was dropped. +- [#286](https://github.com/networktocode/netutils/pull/286) Move password helper names to be namespaced with vendor information. Assign new name to old name to not break semver. +- [#317](https://github.com/networktocode/netutils/pull/317) Dropped Python 3.6 and bump version of dev dependencies. + + +### Fixed + +- [#217](https://github.com/networktocode/netutils/pull/217) Moved where deletion of branch took place in workflow. +- [#218](https://github.com/networktocode/netutils/pull/218) Create dependabot.yml to fix itdependsabot. +- [#219](https://github.com/networktocode/netutils/pull/219) Fix vlanlist_to_config failing on empty list. +- [#224](https://github.com/networktocode/netutils/pull/224) Add Interface type for Cisco App-hosting port. +- [#284](https://github.com/networktocode/netutils/pull/284) Add -f to flatbot branch pushes. +- [#304](https://github.com/networktocode/netutils/pull/304) Update hier_config docs and add fastiron to NAPALM mapper. +- [#305](https://github.com/networktocode/netutils/pull/305) Fixed OS Version docs showing in mkdocs. +- [#316](https://github.com/networktocode/netutils/pull/316) Update panos conversion function to strip out `devices localhost.localdomain`. +- [#317](https://github.com/networktocode/netutils/pull/317) Fix Citrix mock tests file location to correctly run. \ No newline at end of file diff --git a/netutils/interface.py b/netutils/interface.py index fb170fc3..0c50625c 100644 --- a/netutils/interface.py +++ b/netutils/interface.py @@ -260,9 +260,7 @@ def abbreviated_interface_name( return interface -# Mypy is currently (0.961) unable to handle the combination of ABC and @total_ordering, see here: -# https://github.com/python/mypy/issues/5374 -@total_ordering # type: ignore +@total_ordering class CharacterClass(ABC): """CharacterClass embodies the state needed to sort interfaces.""" diff --git a/netutils/route.py b/netutils/route.py index 2e0e474b..0b1fae7b 100644 --- a/netutils/route.py +++ b/netutils/route.py @@ -38,7 +38,7 @@ def longest_prefix_match(ip_addr: str, routes: t.List[t.Dict[str, str]]) -> str: networks = [ ipaddress.IPv4Network(f'{route["network"]}/{route["mask"]}') for route in routes - if ip_addr in ipaddress.IPv4Network(f'{route["network"]}/{route["mask"]}') # type: ignore + if ip_addr in ipaddress.IPv4Network(f'{route["network"]}/{route["mask"]}') ] try: return str(sorted(networks)[-1]) diff --git a/poetry.lock b/poetry.lock index 78d6b8de..972da29d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1119,43 +1119,47 @@ mkdocstrings = ">=0.20" [[package]] name = "mypy" -version = "0.961" +version = "1.4.1" description = "Optional static typing for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, - {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, - {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, - {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, - {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, - {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, - {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, - {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, - {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, - {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, - {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, - {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, - {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, - {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, - {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, - {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, - {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, - {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, - {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, + {file = "mypy-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8"}, + {file = "mypy-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878"}, + {file = "mypy-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd"}, + {file = "mypy-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc"}, + {file = "mypy-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1"}, + {file = "mypy-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462"}, + {file = "mypy-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258"}, + {file = "mypy-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2"}, + {file = "mypy-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7"}, + {file = "mypy-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01"}, + {file = "mypy-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b"}, + {file = "mypy-1.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b"}, + {file = "mypy-1.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7"}, + {file = "mypy-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9"}, + {file = "mypy-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042"}, + {file = "mypy-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3"}, + {file = "mypy-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6"}, + {file = "mypy-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f"}, + {file = "mypy-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc"}, + {file = "mypy-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828"}, + {file = "mypy-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3"}, + {file = "mypy-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816"}, + {file = "mypy-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c"}, + {file = "mypy-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f"}, + {file = "mypy-1.4.1-py3-none-any.whl", hash = "sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4"}, + {file = "mypy-1.4.1.tar.gz", hash = "sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b"}, ] [package.dependencies] -mypy-extensions = ">=0.4.3" +mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" +typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] python2 = ["typed-ast (>=1.4.0,<2)"] reports = ["lxml"] @@ -2210,4 +2214,4 @@ optionals = ["napalm"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "33c424b51ad569e5ea3394b74c3d46f12ec4c808e52f7e2e56b81adbf323b7f4" +content-hash = "31acbdd2552dcd4f4f421b8ec8bc0ba4c39aa2bf2b3b03a557ade07c64478520" diff --git a/pyproject.toml b/pyproject.toml index 8a1a381b..99b1a0e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "netutils" -version = "1.4.1" +version = "1.5.0" description = "Common helper functions useful in network automation." authors = ["Network to Code, LLC "] license = "Apache-2.0" @@ -44,7 +44,7 @@ pydocstyle = "*" sphinx-rtd-theme = "*" toml = "*" yamllint = "*" -mypy = "^0.961" +mypy = "*" mkdocs = "1.4.3" mkdocs-material = "8.5.8" mkdocstrings = "0.22.0"