Repository: fhightower/ioc-finder (language: python)

Issue:
Make strings consistent
Make quotation mark usage in strings consistent (`"` vs `'`).


Discussion / hints:
Will merge this after #219 
Closing this and will recreate it.

Fix patch:
diff --git a/ioc_finder/__init__.py b/ioc_finder/__init__.py
index 2d9ae0f..cfd2f72 100644
--- a/ioc_finder/__init__.py
+++ b/ioc_finder/__init__.py
@@ -72,5 +72,5 @@
     "prepare_text",
 ]
 
-__author__ = '''Floyd Hightower'''
-__version__ = '7.1.0'
+__author__ = """Floyd Hightower"""
+__version__ = "7.1.0"
diff --git a/ioc_finder/data.py b/ioc_finder/data.py
index f7e266d..019c477 100644
--- a/ioc_finder/data.py
+++ b/ioc_finder/data.py
@@ -1,2887 +1,2887 @@
 # pylint: disable=C0302
 pre_attack_tactics = (
-    'TA0021',
-    'TA0024',
-    'TA0022',
-    'TA0017',
-    'TA0020',
-    'TA0016',
-    'TA0019',
-    'TA0023',
-    'TA0013',
-    'TA0012',
-    'TA0026',
-    'TA0014',
-    'TA0015',
-    'TA0018',
-    'TA0025',
+    "TA0021",
+    "TA0024",
+    "TA0022",
+    "TA0017",
+    "TA0020",
+    "TA0016",
+    "TA0019",
+    "TA0023",
+    "TA0013",
+    "TA0012",
+    "TA0026",
+    "TA0014",
+    "TA0015",
+    "TA0018",
+    "TA0025",
 )
 pre_attack_techniques = (
-    'T1266',
-    'T1247',
-    'T1277',
-    'T1329',
-    'T1307',
-    'T1308',
-    'T1330',
-    'T1310',
-    'T1332',
-    'T1275',
-    'T1293',
-    'T1288',
-    'T1301',
-    'T1287',
-    'T1294',
-    'T1300',
-    'T1289',
-    'T1297',
-    'T1303',
-    'T1295',
-    'T1306',
-    'T1229',
-    'T1236',
-    'T1224',
-    'T1299',
-    'T1302',
-    'T1296',
-    'T1298',
-    'T1238',
-    'T1228',
-    'T1381',
-    'T1386',
-    'T1384',
-    'T1347',
-    'T1349',
-    'T1341',
-    'T1328',
-    'T1352',
-    'T1391',
-    'T1343',
-    'T1321',
-    'T1312',
-    'T1334',
-    'T1354',
-    'T1388',
-    'T1254',
-    'T1226',
-    'T1253',
-    'T1279',
-    'T1268',
-    'T1249',
-    'T1376',
-    'T1383',
-    'T1339',
-    'T1345',
-    'T1232',
-    'T1355',
-    'T1231',
-    'T1374',
-    'T1382',
-    'T1324',
-    'T1320',
-    'T1380',
-    'T1230',
-    'T1284',
-    'T1260',
-    'T1245',
-    'T1285',
-    'T1250',
-    'T1259',
-    'T1258',
-    'T1243',
-    'T1242',
-    'T1282',
-    'T1244',
-    'T1241',
-    'T1227',
-    'T1342',
-    'T1350',
-    'T1255',
-    'T1379',
-    'T1394',
-    'T1323',
-    'T1326',
-    'T1286',
-    'T1311',
-    'T1333',
-    'T1262',
-    'T1261',
-    'T1377',
-    'T1325',
-    'T1344',
-    'T1364',
-    'T1234',
-    'T1365',
-    'T1314',
-    'T1385',
-    'T1233',
-    'T1280',
-    'T1272',
-    'T1283',
-    'T1225',
-    'T1270',
-    'T1248',
-    'T1278',
-    'T1267',
-    'T1269',
-    'T1271',
-    'T1348',
-    'T1263',
-    'T1274',
-    'T1276',
-    'T1246',
-    'T1265',
-    'T1264',
-    'T1389',
-    'T1256',
-    'T1336',
-    'T1375',
-    'T1252',
-    'T1273',
-    'T1257',
-    'T1322',
-    'T1315',
-    'T1316',
-    'T1390',
-    'T1309',
-    'T1331',
-    'T1318',
-    'T1319',
-    'T1313',
-    'T1392',
-    'T1396',
-    'T1251',
-    'T1281',
-    'T1346',
-    'T1363',
-    'T1353',
-    'T1305',
-    'T1335',
-    'T1304',
-    'T1373',
-    'T1239',
-    'T1235',
-    'T1351',
-    'T1378',
-    'T1291',
-    'T1290',
-    'T1358',
-    'T1395',
-    'T1337',
-    'T1338',
-    'T1317',
-    'T1340',
-    'T1367',
-    'T1369',
-    'T1368',
-    'T1397',
-    'T1237',
-    'T1371',
-    'T1366',
-    'T1240',
-    'T1393',
-    'T1356',
-    'T1357',
-    'T1359',
-    'T1360',
-    'T1292',
-    'T1361',
-    'T1387',
-    'T1372',
-    'T1370',
-    'T1362',
-    'T1327',
+    "T1266",
+    "T1247",
+    "T1277",
+    "T1329",
+    "T1307",
+    "T1308",
+    "T1330",
+    "T1310",
+    "T1332",
+    "T1275",
+    "T1293",
+    "T1288",
+    "T1301",
+    "T1287",
+    "T1294",
+    "T1300",
+    "T1289",
+    "T1297",
+    "T1303",
+    "T1295",
+    "T1306",
+    "T1229",
+    "T1236",
+    "T1224",
+    "T1299",
+    "T1302",
+    "T1296",
+    "T1298",
+    "T1238",
+    "T1228",
+    "T1381",
+    "T1386",
+    "T1384",
+    "T1347",
+    "T1349",
+    "T1341",
+    "T1328",
+    "T1352",
+    "T1391",
+    "T1343",
+    "T1321",
+    "T1312",
+    "T1334",
+    "T1354",
+    "T1388",
+    "T1254",
+    "T1226",
+    "T1253",
+    "T1279",
+    "T1268",
+    "T1249",
+    "T1376",
+    "T1383",
+    "T1339",
+    "T1345",
+    "T1232",
+    "T1355",
+    "T1231",
+    "T1374",
+    "T1382",
+    "T1324",
+    "T1320",
+    "T1380",
+    "T1230",
+    "T1284",
+    "T1260",
+    "T1245",
+    "T1285",
+    "T1250",
+    "T1259",
+    "T1258",
+    "T1243",
+    "T1242",
+    "T1282",
+    "T1244",
+    "T1241",
+    "T1227",
+    "T1342",
+    "T1350",
+    "T1255",
+    "T1379",
+    "T1394",
+    "T1323",
+    "T1326",
+    "T1286",
+    "T1311",
+    "T1333",
+    "T1262",
+    "T1261",
+    "T1377",
+    "T1325",
+    "T1344",
+    "T1364",
+    "T1234",
+    "T1365",
+    "T1314",
+    "T1385",
+    "T1233",
+    "T1280",
+    "T1272",
+    "T1283",
+    "T1225",
+    "T1270",
+    "T1248",
+    "T1278",
+    "T1267",
+    "T1269",
+    "T1271",
+    "T1348",
+    "T1263",
+    "T1274",
+    "T1276",
+    "T1246",
+    "T1265",
+    "T1264",
+    "T1389",
+    "T1256",
+    "T1336",
+    "T1375",
+    "T1252",
+    "T1273",
+    "T1257",
+    "T1322",
+    "T1315",
+    "T1316",
+    "T1390",
+    "T1309",
+    "T1331",
+    "T1318",
+    "T1319",
+    "T1313",
+    "T1392",
+    "T1396",
+    "T1251",
+    "T1281",
+    "T1346",
+    "T1363",
+    "T1353",
+    "T1305",
+    "T1335",
+    "T1304",
+    "T1373",
+    "T1239",
+    "T1235",
+    "T1351",
+    "T1378",
+    "T1291",
+    "T1290",
+    "T1358",
+    "T1395",
+    "T1337",
+    "T1338",
+    "T1317",
+    "T1340",
+    "T1367",
+    "T1369",
+    "T1368",
+    "T1397",
+    "T1237",
+    "T1371",
+    "T1366",
+    "T1240",
+    "T1393",
+    "T1356",
+    "T1357",
+    "T1359",
+    "T1360",
+    "T1292",
+    "T1361",
+    "T1387",
+    "T1372",
+    "T1370",
+    "T1362",
+    "T1327",
 )
 
 enterprise_attack_mitigations = (
-    'M1036',
-    'M1015',
-    'M1049',
-    'M1013',
-    'M1048',
-    'M1047',
-    'M1040',
-    'M1046',
-    'M1045',
-    'M1043',
-    'M1053',
-    'M1042',
-    'M1055',
-    'M1041',
-    'M1039',
-    'M1038',
-    'M1050',
-    'M1037',
-    'M1035',
-    'M1034',
-    'M1033',
-    'M1032',
-    'M1031',
-    'M1030',
-    'M1028',
-    'M1027',
-    'M1056',
-    'M1026',
-    'M1025',
-    'M1029',
-    'M1022',
-    'M1044',
-    'M1024',
-    'M1021',
-    'M1020',
-    'M1054',
-    'M1019',
-    'M1051',
-    'M1052',
-    'M1018',
-    'M1017',
-    'M1016',
+    "M1036",
+    "M1015",
+    "M1049",
+    "M1013",
+    "M1048",
+    "M1047",
+    "M1040",
+    "M1046",
+    "M1045",
+    "M1043",
+    "M1053",
+    "M1042",
+    "M1055",
+    "M1041",
+    "M1039",
+    "M1038",
+    "M1050",
+    "M1037",
+    "M1035",
+    "M1034",
+    "M1033",
+    "M1032",
+    "M1031",
+    "M1030",
+    "M1028",
+    "M1027",
+    "M1056",
+    "M1026",
+    "M1025",
+    "M1029",
+    "M1022",
+    "M1044",
+    "M1024",
+    "M1021",
+    "M1020",
+    "M1054",
+    "M1019",
+    "M1051",
+    "M1052",
+    "M1018",
+    "M1017",
+    "M1016",
 )
 enterprise_attack_tactics = (
-    'TA0009',
-    'TA0011',
-    'TA0006',
-    'TA0005',
-    'TA0007',
-    'TA0002',
-    'TA0010',
-    'TA0040',
-    'TA0001',
-    'TA0008',
-    'TA0003',
-    'TA0004',
-    'TA0043',
-    'TA0042',
+    "TA0009",
+    "TA0011",
+    "TA0006",
+    "TA0005",
+    "TA0007",
+    "TA0002",
+    "TA0010",
+    "TA0040",
+    "TA0001",
+    "TA0008",
+    "TA0003",
+    "TA0004",
+    "TA0043",
+    "TA0042",
 )
 enterprise_attack_techniques = (
-    'T1003.008',
-    'T1557.002',
-    'T1558.004',
-    'T1548',
-    'T1134',
-    'T1015',
-    'T1546.008',
-    'T1531',
-    'T1087',
-    'T1098',
-    'T1583',
-    'T1595',
-    'T1547.014',
-    'T1098.003',
-    'T1137.006',
-    'T1098.001',
-    'T1182',
-    'T1546.009',
-    'T1103',
-    'T1546.010',
-    'T1155',
-    'T1059.002',
-    'T1527',
-    'T1550.001',
-    'T1017',
-    'T1499.003',
-    'T1071',
-    'T1138',
-    'T1546.011',
-    'T1010',
-    'T1499.004',
-    'T1560',
-    'T1560.003',
-    'T1560.002',
-    'T1560.001',
-    'T1573.002',
-    'T1055.004',
-    'T1053.001',
-    'T1053.002',
-    'T1123',
-    'T1131',
-    'T1547.002',
-    'T1119',
-    'T1020',
-    'T1197',
-    'T1139',
-    'T1552.003',
-    'T1102.002',
-    'T1009',
-    'T1027.001',
-    'T1547',
-    'T1037',
-    'T1067',
-    'T1542.003',
-    'T1583.005',
-    'T1584.005',
-    'T1217',
-    'T1176',
-    'T1110',
-    'T1612',
-    'T1591.002',
-    'T1088',
-    'T1548.002',
-    'T1596.004',
-    'T1191',
-    'T1218.003',
-    'T1574.012',
-    'T1003.005',
-    'T1042',
-    'T1546.001',
-    'T1146',
-    'T1070.003',
-    'T1070.002',
-    'T1070.001',
-    'T1592.004',
-    'T1115',
-    'T1136.003',
-    'T1087.004',
-    'T1078.004',
-    'T1069.003',
-    'T1580',
-    'T1522',
-    'T1552.005',
-    'T1538',
-    'T1526',
-    'T1116',
-    'T1553.002',
-    'T1587.002',
-    'T1588.003',
-    'T1553.006',
-    'T1059',
-    'T1043',
-    'T1092',
-    'T1500',
-    'T1027.004',
-    'T1223',
-    'T1218.001',
-    'T1109',
-    'T1542.002',
-    'T1559.001',
-    'T1122',
-    'T1546.015',
-    'T1175',
-    'T1586',
-    'T1554',
-    'T1195.003',
-    'T1584',
-    'T1195.001',
-    'T1195.002',
-    'T1213.001',
-    'T1552.007',
-    'T1609',
-    'T1053.007',
-    'T1613',
-    'T1218.002',
-    'T1196',
-    'T1136',
-    'T1578.002',
-    'T1134.002',
-    'T1578.001',
-    'T1543',
-    'T1056.004',
-    'T1110.004',
-    'T1589.001',
-    'T1552.001',
-    'T1555',
-    'T1503',
-    'T1555.003',
-    'T1081',
-    'T1214',
-    'T1552.002',
-    'T1053.003',
-    'T1094',
-    'T1024',
-    'T1003.006',
-    'T1038',
-    'T1574.001',
-    'T1073',
-    'T1574.002',
-    'T1071.004',
-    'T1590.002',
-    'T1568.003',
-    'T1583.002',
-    'T1584.002',
-    'T1596.001',
-    'T1002',
-    'T1485',
-    'T1132',
-    'T1022',
-    'T1486',
-    'T1565',
-    'T1001',
-    'T1074',
-    'T1030',
-    'T1530',
-    'T1602',
-    'T1213',
-    'T1005',
-    'T1039',
-    'T1025',
-    'T1102.001',
-    'T1491',
-    'T1078.001',
-    'T1578.003',
-    'T1140',
-    'T1610',
-    'T1591.001',
-    'T1587',
-    'T1587.003',
-    'T1588.004',
-    'T1596.003',
-    'T1498.001',
-    'T1006',
-    'T1562.008',
-    'T1600.002',
-    'T1562.002',
-    'T1562.007',
-    'T1562.004',
-    'T1562.001',
-    'T1089',
-    'T1488',
-    'T1561.001',
-    'T1487',
-    'T1561.002',
-    'T1561',
-    'T1021.003',
-    'T1136.002',
-    'T1087.002',
-    'T1078.002',
-    'T1556.001',
-    'T1172',
-    'T1090.004',
-    'T1483',
-    'T1568.002',
-    'T1069.002',
-    'T1484',
-    'T1590.001',
-    'T1482',
-    'T1484.002',
-    'T1583.001',
-    'T1584.001',
-    'T1601.002',
-    'T1189',
-    'T1608.004',
-    'T1157',
-    'T1574.004',
-    'T1173',
-    'T1559.002',
-    'T1574.006',
-    'T1568',
-    'T1055.001',
-    'T1514',
-    'T1548.004',
-    'T1087.003',
-    'T1585.002',
-    'T1586.002',
-    'T1589.002',
-    'T1114',
-    'T1114.003',
-    'T1519',
-    'T1546.014',
-    'T1589.003',
-    'T1573',
-    'T1499',
-    'T1480.001',
-    'T1611',
-    'T1585',
-    'T1546',
-    'T1098.002',
-    'T1574.005',
-    'T1480',
-    'T1048',
-    'T1048.002',
-    'T1011.001',
-    'T1041',
-    'T1011',
-    'T1052',
-    'T1048.001',
-    'T1048.003',
-    'T1567',
-    'T1052.001',
-    'T1567.002',
-    'T1567.001',
-    'T1190',
-    'T1203',
-    'T1212',
-    'T1211',
-    'T1068',
-    'T1210',
-    'T1587.004',
-    'T1588.005',
-    'T1491.002',
-    'T1090.002',
-    'T1133',
-    'T1181',
-    'T1055.011',
-    'T1008',
-    'T1568.001',
-    'T1107',
-    'T1070.004',
-    'T1044',
-    'T1071.002',
-    'T1083',
-    'T1222',
-    'T1592.003',
-    'T1495',
-    'T1187',
-    'T1606',
-    'T1056.002',
-    'T1144',
-    'T1553.001',
-    'T1592',
-    'T1589',
-    'T1590',
-    'T1591',
-    'T1558.001',
-    'T1061',
-    'T1484.001',
-    'T1552.006',
-    'T1148',
-    'T1592.001',
-    'T1200',
-    'T1564.005',
-    'T1158',
-    'T1564.001',
-    'T1147',
-    'T1564.002',
-    'T1143',
-    'T1564.003',
-    'T1564',
-    'T1574',
-    'T1179',
-    'T1062',
-    'T1590.005',
-    'T1591.003',
-    'T1591.004',
-    'T1183',
-    'T1546.012',
-    'T1562.003',
-    'T1562',
-    'T1525',
-    'T1054',
-    'T1562.006',
-    'T1066',
-    'T1027.005',
-    'T1070',
-    'T1202',
-    'T1105',
-    'T1490',
-    'T1056',
-    'T1141',
-    'T1608.003',
-    'T1130',
-    'T1553.004',
-    'T1118',
-    'T1218.004',
-    'T1559',
-    'T1491.001',
-    'T1090.001',
-    'T1534',
-    'T1016.001',
-    'T1036.001',
-    'T1059.007',
-    'T1001.001',
-    'T1208',
-    'T1558.003',
-    'T1215',
-    'T1547.006',
-    'T1142',
-    'T1555.001',
-    'T1056.001',
-    'T1161',
-    'T1546.006',
-    'T1149',
-    'T1171',
-    'T1557.001',
-    'T1003.004',
-    'T1177',
-    'T1547.008',
-    'T1003.001',
-    'T1570',
-    'T1159',
-    'T1543.001',
-    'T1160',
-    'T1543.004',
-    'T1152',
-    'T1569.001',
-    'T1053.004',
-    'T1608.005',
-    'T1222.002',
-    'T1136.001',
-    'T1087.001',
-    'T1078.003',
-    'T1074.001',
-    'T1114.001',
-    'T1069.001',
-    'T1168',
-    'T1162',
-    'T1037.002',
-    'T1037.001',
-    'T1127.001',
-    'T1071.003',
-    'T1134.003',
-    'T1204.002',
-    'T1204.003',
-    'T1204.001',
-    'T1156',
-    'T1587.001',
-    'T1588.001',
-    'T1185',
-    'T1557',
-    'T1553.005',
-    'T1036.004',
-    'T1036',
-    'T1036.005',
-    'T1556',
-    'T1578',
-    'T1031',
-    'T1112',
-    'T1601',
-    'T1170',
-    'T1218.005',
-    'T1218.007',
-    'T1104',
-    'T1188',
-    'T1090.003',
-    'T1026',
-    'T1079',
-    'T1003.003',
-    'T1096',
-    'T1564.004',
-    'T1106',
-    'T1128',
-    'T1546.007',
-    'T1599.001',
-    'T1599',
-    'T1498',
-    'T1556.004',
-    'T1059.008',
-    'T1602.002',
-    'T1037.003',
-    'T1590.006',
-    'T1046',
-    'T1126',
-    'T1070.005',
-    'T1135',
-    'T1040',
-    'T1590.004',
-    'T1590.003',
-    'T1050',
-    'T1095',
-    'T1132.002',
-    'T1571',
-    'T1003',
-    'T1499.001',
-    'T1027',
-    'T1588',
-    'T1218.008',
-    'T1137',
-    'T1137.001',
-    'T1137.002',
-    'T1102.003',
-    'T1137.003',
-    'T1137.004',
-    'T1137.005',
-    'T1502',
-    'T1134.004',
-    'T1075',
-    'T1550.002',
-    'T1097',
-    'T1550.003',
-    'T1110.002',
-    'T1174',
-    'T1556.002',
-    'T1110.001',
-    'T1555.005',
-    'T1201',
-    'T1110.003',
-    'T1601.001',
-    'T1034',
-    'T1574.007',
-    'T1574.008',
-    'T1574.009',
-    'T1120',
-    'T1069',
-    'T1566',
-    'T1598',
-    'T1150',
-    'T1547.011',
-    'T1556.003',
-    'T1205.001',
-    'T1013',
-    'T1547.010',
-    'T1055.002',
-    'T1086',
-    'T1059.001',
-    'T1504',
-    'T1546.013',
-    'T1542',
-    'T1547.012',
-    'T1145',
-    'T1552.004',
-    'T1003.007',
-    'T1055.009',
-    'T1057',
-    'T1186',
-    'T1055.013',
-    'T1093',
-    'T1055.012',
-    'T1055',
-    'T1001.003',
-    'T1572',
-    'T1090',
-    'T1055.008',
-    'T1216.001',
-    'T1597.002',
-    'T1059.006',
-    'T1012',
-    'T1037.004',
-    'T1563.002',
-    'T1542.004',
-    'T1163',
-    'T1164',
-    'T1547.007',
-    'T1600.001',
-    'T1108',
-    'T1498.002',
-    'T1060',
-    'T1547.001',
-    'T1121',
-    'T1218.009',
-    'T1117',
-    'T1218.010',
-    'T1219',
-    'T1074.002',
-    'T1076',
-    'T1021.001',
-    'T1114.002',
-    'T1563',
-    'T1021',
-    'T1018',
-    'T1036.003',
-    'T1091',
-    'T1496',
-    'T1536',
-    'T1578.004',
-    'T1036.002',
-    'T1207',
-    'T1014',
-    'T1564.006',
-    'T1085',
-    'T1218.011',
-    'T1494',
-    'T1565.003',
-    'T1606.002',
-    'T1178',
-    'T1134.005',
-    'T1198',
-    'T1553.003',
-    'T1021.002',
-    'T1602.001',
-    'T1505.001',
-    'T1021.004',
-    'T1098.004',
-    'T1184',
-    'T1563.001',
-    'T1596.005',
-    'T1595.001',
-    'T1053.005',
-    'T1053',
-    'T1029',
-    'T1113',
-    'T1180',
-    'T1546.002',
-    'T1064',
-    'T1597',
-    'T1593.002',
-    'T1596',
-    'T1593',
-    'T1594',
-    'T1003.002',
-    'T1063',
-    'T1518.001',
-    'T1101',
-    'T1547.005',
-    'T1167',
-    'T1555.002',
-    'T1583.004',
-    'T1584.004',
-    'T1505',
-    'T1035',
-    'T1569.002',
-    'T1499.002',
-    'T1058',
-    'T1489',
-    'T1574.010',
-    'T1574.011',
-    'T1166',
-    'T1548.001',
-    'T1129',
-    'T1051',
-    'T1213.002',
-    'T1023',
-    'T1547.009',
-    'T1218',
-    'T1216',
-    'T1558.002',
-    'T1593.001',
-    'T1585.001',
-    'T1586.001',
-    'T1592.002',
-    'T1072',
-    'T1518',
-    'T1045',
-    'T1027.002',
-    'T1153',
-    'T1151',
-    'T1036.006',
-    'T1193',
-    'T1566.001',
-    'T1598.002',
-    'T1192',
-    'T1566.002',
-    'T1598.003',
-    'T1598.001',
-    'T1194',
-    'T1566.003',
-    'T1608',
-    'T1032',
-    'T1132.001',
-    'T1165',
-    'T1037.005',
-    'T1528',
-    'T1539',
-    'T1558',
-    'T1027.003',
-    'T1001.002',
-    'T1492',
-    'T1565.001',
-    'T1553',
-    'T1169',
-    'T1206',
-    'T1548.003',
-    'T1195',
-    'T1573.001',
-    'T1497.001',
-    'T1019',
-    'T1542.001',
-    'T1082',
-    'T1614',
-    'T1016',
-    'T1049',
-    'T1033',
-    'T1007',
-    'T1569',
-    'T1529',
-    'T1124',
-    'T1501',
-    'T1543.002',
-    'T1053.006',
-    'T1542.005',
-    'T1080',
-    'T1221',
-    'T1055.003',
-    'T1055.005',
-    'T1597.001',
-    'T1497.003',
-    'T1209',
-    'T1547.003',
-    'T1099',
-    'T1070.006',
-    'T1134.001',
-    'T1588.002',
-    'T1020.001',
-    'T1205',
-    'T1537',
-    'T1493',
-    'T1565.002',
-    'T1505.002',
-    'T1154',
-    'T1546.005',
-    'T1127',
-    'T1199',
-    'T1111',
-    'T1065',
-    'T1059.004',
-    'T1546.004',
-    'T1552',
-    'T1535',
-    'T1608.001',
-    'T1608.002',
-    'T1550',
-    'T1497.002',
-    'T1204',
-    'T1564.007',
-    'T1055.014',
-    'T1021.005',
-    'T1078',
-    'T1218.012',
-    'T1125',
-    'T1583.003',
-    'T1584.003',
-    'T1497',
-    'T1059.005',
-    'T1588.006',
-    'T1595.002',
-    'T1596.002',
-    'T1600',
-    'T1606.001',
-    'T1056.003',
-    'T1071.001',
-    'T1102',
-    'T1583.006',
-    'T1584.006',
-    'T1506',
-    'T1550.004',
-    'T1100',
-    'T1505.003',
-    'T1077',
-    'T1059.003',
-    'T1555.004',
-    'T1222.001',
-    'T1047',
-    'T1084',
-    'T1546.003',
-    'T1028',
-    'T1021.006',
-    'T1543.003',
-    'T1004',
-    'T1547.004',
-    'T1547.013',
-    'T1220',
+    "T1003.008",
+    "T1557.002",
+    "T1558.004",
+    "T1548",
+    "T1134",
+    "T1015",
+    "T1546.008",
+    "T1531",
+    "T1087",
+    "T1098",
+    "T1583",
+    "T1595",
+    "T1547.014",
+    "T1098.003",
+    "T1137.006",
+    "T1098.001",
+    "T1182",
+    "T1546.009",
+    "T1103",
+    "T1546.010",
+    "T1155",
+    "T1059.002",
+    "T1527",
+    "T1550.001",
+    "T1017",
+    "T1499.003",
+    "T1071",
+    "T1138",
+    "T1546.011",
+    "T1010",
+    "T1499.004",
+    "T1560",
+    "T1560.003",
+    "T1560.002",
+    "T1560.001",
+    "T1573.002",
+    "T1055.004",
+    "T1053.001",
+    "T1053.002",
+    "T1123",
+    "T1131",
+    "T1547.002",
+    "T1119",
+    "T1020",
+    "T1197",
+    "T1139",
+    "T1552.003",
+    "T1102.002",
+    "T1009",
+    "T1027.001",
+    "T1547",
+    "T1037",
+    "T1067",
+    "T1542.003",
+    "T1583.005",
+    "T1584.005",
+    "T1217",
+    "T1176",
+    "T1110",
+    "T1612",
+    "T1591.002",
+    "T1088",
+    "T1548.002",
+    "T1596.004",
+    "T1191",
+    "T1218.003",
+    "T1574.012",
+    "T1003.005",
+    "T1042",
+    "T1546.001",
+    "T1146",
+    "T1070.003",
+    "T1070.002",
+    "T1070.001",
+    "T1592.004",
+    "T1115",
+    "T1136.003",
+    "T1087.004",
+    "T1078.004",
+    "T1069.003",
+    "T1580",
+    "T1522",
+    "T1552.005",
+    "T1538",
+    "T1526",
+    "T1116",
+    "T1553.002",
+    "T1587.002",
+    "T1588.003",
+    "T1553.006",
+    "T1059",
+    "T1043",
+    "T1092",
+    "T1500",
+    "T1027.004",
+    "T1223",
+    "T1218.001",
+    "T1109",
+    "T1542.002",
+    "T1559.001",
+    "T1122",
+    "T1546.015",
+    "T1175",
+    "T1586",
+    "T1554",
+    "T1195.003",
+    "T1584",
+    "T1195.001",
+    "T1195.002",
+    "T1213.001",
+    "T1552.007",
+    "T1609",
+    "T1053.007",
+    "T1613",
+    "T1218.002",
+    "T1196",
+    "T1136",
+    "T1578.002",
+    "T1134.002",
+    "T1578.001",
+    "T1543",
+    "T1056.004",
+    "T1110.004",
+    "T1589.001",
+    "T1552.001",
+    "T1555",
+    "T1503",
+    "T1555.003",
+    "T1081",
+    "T1214",
+    "T1552.002",
+    "T1053.003",
+    "T1094",
+    "T1024",
+    "T1003.006",
+    "T1038",
+    "T1574.001",
+    "T1073",
+    "T1574.002",
+    "T1071.004",
+    "T1590.002",
+    "T1568.003",
+    "T1583.002",
+    "T1584.002",
+    "T1596.001",
+    "T1002",
+    "T1485",
+    "T1132",
+    "T1022",
+    "T1486",
+    "T1565",
+    "T1001",
+    "T1074",
+    "T1030",
+    "T1530",
+    "T1602",
+    "T1213",
+    "T1005",
+    "T1039",
+    "T1025",
+    "T1102.001",
+    "T1491",
+    "T1078.001",
+    "T1578.003",
+    "T1140",
+    "T1610",
+    "T1591.001",
+    "T1587",
+    "T1587.003",
+    "T1588.004",
+    "T1596.003",
+    "T1498.001",
+    "T1006",
+    "T1562.008",
+    "T1600.002",
+    "T1562.002",
+    "T1562.007",
+    "T1562.004",
+    "T1562.001",
+    "T1089",
+    "T1488",
+    "T1561.001",
+    "T1487",
+    "T1561.002",
+    "T1561",
+    "T1021.003",
+    "T1136.002",
+    "T1087.002",
+    "T1078.002",
+    "T1556.001",
+    "T1172",
+    "T1090.004",
+    "T1483",
+    "T1568.002",
+    "T1069.002",
+    "T1484",
+    "T1590.001",
+    "T1482",
+    "T1484.002",
+    "T1583.001",
+    "T1584.001",
+    "T1601.002",
+    "T1189",
+    "T1608.004",
+    "T1157",
+    "T1574.004",
+    "T1173",
+    "T1559.002",
+    "T1574.006",
+    "T1568",
+    "T1055.001",
+    "T1514",
+    "T1548.004",
+    "T1087.003",
+    "T1585.002",
+    "T1586.002",
+    "T1589.002",
+    "T1114",
+    "T1114.003",
+    "T1519",
+    "T1546.014",
+    "T1589.003",
+    "T1573",
+    "T1499",
+    "T1480.001",
+    "T1611",
+    "T1585",
+    "T1546",
+    "T1098.002",
+    "T1574.005",
+    "T1480",
+    "T1048",
+    "T1048.002",
+    "T1011.001",
+    "T1041",
+    "T1011",
+    "T1052",
+    "T1048.001",
+    "T1048.003",
+    "T1567",
+    "T1052.001",
+    "T1567.002",
+    "T1567.001",
+    "T1190",
+    "T1203",
+    "T1212",
+    "T1211",
+    "T1068",
+    "T1210",
+    "T1587.004",
+    "T1588.005",
+    "T1491.002",
+    "T1090.002",
+    "T1133",
+    "T1181",
+    "T1055.011",
+    "T1008",
+    "T1568.001",
+    "T1107",
+    "T1070.004",
+    "T1044",
+    "T1071.002",
+    "T1083",
+    "T1222",
+    "T1592.003",
+    "T1495",
+    "T1187",
+    "T1606",
+    "T1056.002",
+    "T1144",
+    "T1553.001",
+    "T1592",
+    "T1589",
+    "T1590",
+    "T1591",
+    "T1558.001",
+    "T1061",
+    "T1484.001",
+    "T1552.006",
+    "T1148",
+    "T1592.001",
+    "T1200",
+    "T1564.005",
+    "T1158",
+    "T1564.001",
+    "T1147",
+    "T1564.002",
+    "T1143",
+    "T1564.003",
+    "T1564",
+    "T1574",
+    "T1179",
+    "T1062",
+    "T1590.005",
+    "T1591.003",
+    "T1591.004",
+    "T1183",
+    "T1546.012",
+    "T1562.003",
+    "T1562",
+    "T1525",
+    "T1054",
+    "T1562.006",
+    "T1066",
+    "T1027.005",
+    "T1070",
+    "T1202",
+    "T1105",
+    "T1490",
+    "T1056",
+    "T1141",
+    "T1608.003",
+    "T1130",
+    "T1553.004",
+    "T1118",
+    "T1218.004",
+    "T1559",
+    "T1491.001",
+    "T1090.001",
+    "T1534",
+    "T1016.001",
+    "T1036.001",
+    "T1059.007",
+    "T1001.001",
+    "T1208",
+    "T1558.003",
+    "T1215",
+    "T1547.006",
+    "T1142",
+    "T1555.001",
+    "T1056.001",
+    "T1161",
+    "T1546.006",
+    "T1149",
+    "T1171",
+    "T1557.001",
+    "T1003.004",
+    "T1177",
+    "T1547.008",
+    "T1003.001",
+    "T1570",
+    "T1159",
+    "T1543.001",
+    "T1160",
+    "T1543.004",
+    "T1152",
+    "T1569.001",
+    "T1053.004",
+    "T1608.005",
+    "T1222.002",
+    "T1136.001",
+    "T1087.001",
+    "T1078.003",
+    "T1074.001",
+    "T1114.001",
+    "T1069.001",
+    "T1168",
+    "T1162",
+    "T1037.002",
+    "T1037.001",
+    "T1127.001",
+    "T1071.003",
+    "T1134.003",
+    "T1204.002",
+    "T1204.003",
+    "T1204.001",
+    "T1156",
+    "T1587.001",
+    "T1588.001",
+    "T1185",
+    "T1557",
+    "T1553.005",
+    "T1036.004",
+    "T1036",
+    "T1036.005",
+    "T1556",
+    "T1578",
+    "T1031",
+    "T1112",
+    "T1601",
+    "T1170",
+    "T1218.005",
+    "T1218.007",
+    "T1104",
+    "T1188",
+    "T1090.003",
+    "T1026",
+    "T1079",
+    "T1003.003",
+    "T1096",
+    "T1564.004",
+    "T1106",
+    "T1128",
+    "T1546.007",
+    "T1599.001",
+    "T1599",
+    "T1498",
+    "T1556.004",
+    "T1059.008",
+    "T1602.002",
+    "T1037.003",
+    "T1590.006",
+    "T1046",
+    "T1126",
+    "T1070.005",
+    "T1135",
+    "T1040",
+    "T1590.004",
+    "T1590.003",
+    "T1050",
+    "T1095",
+    "T1132.002",
+    "T1571",
+    "T1003",
+    "T1499.001",
+    "T1027",
+    "T1588",
+    "T1218.008",
+    "T1137",
+    "T1137.001",
+    "T1137.002",
+    "T1102.003",
+    "T1137.003",
+    "T1137.004",
+    "T1137.005",
+    "T1502",
+    "T1134.004",
+    "T1075",
+    "T1550.002",
+    "T1097",
+    "T1550.003",
+    "T1110.002",
+    "T1174",
+    "T1556.002",
+    "T1110.001",
+    "T1555.005",
+    "T1201",
+    "T1110.003",
+    "T1601.001",
+    "T1034",
+    "T1574.007",
+    "T1574.008",
+    "T1574.009",
+    "T1120",
+    "T1069",
+    "T1566",
+    "T1598",
+    "T1150",
+    "T1547.011",
+    "T1556.003",
+    "T1205.001",
+    "T1013",
+    "T1547.010",
+    "T1055.002",
+    "T1086",
+    "T1059.001",
+    "T1504",
+    "T1546.013",
+    "T1542",
+    "T1547.012",
+    "T1145",
+    "T1552.004",
+    "T1003.007",
+    "T1055.009",
+    "T1057",
+    "T1186",
+    "T1055.013",
+    "T1093",
+    "T1055.012",
+    "T1055",
+    "T1001.003",
+    "T1572",
+    "T1090",
+    "T1055.008",
+    "T1216.001",
+    "T1597.002",
+    "T1059.006",
+    "T1012",
+    "T1037.004",
+    "T1563.002",
+    "T1542.004",
+    "T1163",
+    "T1164",
+    "T1547.007",
+    "T1600.001",
+    "T1108",
+    "T1498.002",
+    "T1060",
+    "T1547.001",
+    "T1121",
+    "T1218.009",
+    "T1117",
+    "T1218.010",
+    "T1219",
+    "T1074.002",
+    "T1076",
+    "T1021.001",
+    "T1114.002",
+    "T1563",
+    "T1021",
+    "T1018",
+    "T1036.003",
+    "T1091",
+    "T1496",
+    "T1536",
+    "T1578.004",
+    "T1036.002",
+    "T1207",
+    "T1014",
+    "T1564.006",
+    "T1085",
+    "T1218.011",
+    "T1494",
+    "T1565.003",
+    "T1606.002",
+    "T1178",
+    "T1134.005",
+    "T1198",
+    "T1553.003",
+    "T1021.002",
+    "T1602.001",
+    "T1505.001",
+    "T1021.004",
+    "T1098.004",
+    "T1184",
+    "T1563.001",
+    "T1596.005",
+    "T1595.001",
+    "T1053.005",
+    "T1053",
+    "T1029",
+    "T1113",
+    "T1180",
+    "T1546.002",
+    "T1064",
+    "T1597",
+    "T1593.002",
+    "T1596",
+    "T1593",
+    "T1594",
+    "T1003.002",
+    "T1063",
+    "T1518.001",
+    "T1101",
+    "T1547.005",
+    "T1167",
+    "T1555.002",
+    "T1583.004",
+    "T1584.004",
+    "T1505",
+    "T1035",
+    "T1569.002",
+    "T1499.002",
+    "T1058",
+    "T1489",
+    "T1574.010",
+    "T1574.011",
+    "T1166",
+    "T1548.001",
+    "T1129",
+    "T1051",
+    "T1213.002",
+    "T1023",
+    "T1547.009",
+    "T1218",
+    "T1216",
+    "T1558.002",
+    "T1593.001",
+    "T1585.001",
+    "T1586.001",
+    "T1592.002",
+    "T1072",
+    "T1518",
+    "T1045",
+    "T1027.002",
+    "T1153",
+    "T1151",
+    "T1036.006",
+    "T1193",
+    "T1566.001",
+    "T1598.002",
+    "T1192",
+    "T1566.002",
+    "T1598.003",
+    "T1598.001",
+    "T1194",
+    "T1566.003",
+    "T1608",
+    "T1032",
+    "T1132.001",
+    "T1165",
+    "T1037.005",
+    "T1528",
+    "T1539",
+    "T1558",
+    "T1027.003",
+    "T1001.002",
+    "T1492",
+    "T1565.001",
+    "T1553",
+    "T1169",
+    "T1206",
+    "T1548.003",
+    "T1195",
+    "T1573.001",
+    "T1497.001",
+    "T1019",
+    "T1542.001",
+    "T1082",
+    "T1614",
+    "T1016",
+    "T1049",
+    "T1033",
+    "T1007",
+    "T1569",
+    "T1529",
+    "T1124",
+    "T1501",
+    "T1543.002",
+    "T1053.006",
+    "T1542.005",
+    "T1080",
+    "T1221",
+    "T1055.003",
+    "T1055.005",
+    "T1597.001",
+    "T1497.003",
+    "T1209",
+    "T1547.003",
+    "T1099",
+    "T1070.006",
+    "T1134.001",
+    "T1588.002",
+    "T1020.001",
+    "T1205",
+    "T1537",
+    "T1493",
+    "T1565.002",
+    "T1505.002",
+    "T1154",
+    "T1546.005",
+    "T1127",
+    "T1199",
+    "T1111",
+    "T1065",
+    "T1059.004",
+    "T1546.004",
+    "T1552",
+    "T1535",
+    "T1608.001",
+    "T1608.002",
+    "T1550",
+    "T1497.002",
+    "T1204",
+    "T1564.007",
+    "T1055.014",
+    "T1021.005",
+    "T1078",
+    "T1218.012",
+    "T1125",
+    "T1583.003",
+    "T1584.003",
+    "T1497",
+    "T1059.005",
+    "T1588.006",
+    "T1595.002",
+    "T1596.002",
+    "T1600",
+    "T1606.001",
+    "T1056.003",
+    "T1071.001",
+    "T1102",
+    "T1583.006",
+    "T1584.006",
+    "T1506",
+    "T1550.004",
+    "T1100",
+    "T1505.003",
+    "T1077",
+    "T1059.003",
+    "T1555.004",
+    "T1222.001",
+    "T1047",
+    "T1084",
+    "T1546.003",
+    "T1028",
+    "T1021.006",
+    "T1543.003",
+    "T1004",
+    "T1547.004",
+    "T1547.013",
+    "T1220",
 )
 
 mobile_attack_mitigations = (
-    'M1013',
-    'M1005',
-    'M1002',
-    'M1007',
-    'M1010',
-    'M1009',
-    'M1012',
-    'M1014',
-    'M1003',
-    'M1001',
-    'M1004',
-    'M1006',
-    'M1011',
+    "M1013",
+    "M1005",
+    "M1002",
+    "M1007",
+    "M1010",
+    "M1009",
+    "M1012",
+    "M1014",
+    "M1003",
+    "M1001",
+    "M1004",
+    "M1006",
+    "M1011",
 )
 mobile_attack_tactics = (
-    'TA0035',
-    'TA0037',
-    'TA0031',
-    'TA0030',
-    'TA0032',
-    'TA0041',
-    'TA0036',
-    'TA0034',
-    'TA0027',
-    'TA0033',
-    'TA0038',
-    'TA0028',
-    'TA0029',
-    'TA0039',
+    "TA0035",
+    "TA0037",
+    "TA0031",
+    "TA0030",
+    "TA0032",
+    "TA0041",
+    "TA0036",
+    "TA0034",
+    "TA0027",
+    "TA0033",
+    "TA0038",
+    "TA0028",
+    "TA0029",
+    "TA0039",
 )
 mobile_attack_techniques = (
-    'T1453',
-    'T1445',
-    'T1435',
-    'T1433',
-    'T1432',
-    'T1517',
-    'T1413',
-    'T1409',
-    'T1438',
-    'T1434',
-    'T1431',
-    'T1418',
-    'T1427',
-    'T1460',
-    'T1402',
-    'T1429',
-    'T1512',
-    'T1414',
-    'T1412',
-    'T1448',
-    'T1510',
-    'T1540',
-    'T1605',
-    'T1436',
-    'T1577',
-    'T1532',
-    'T1471',
-    'T1533',
-    'T1447',
-    'T1475',
-    'T1476',
-    'T1440',
-    'T1401',
-    'T1446',
-    'T1419',
-    'T1459',
-    'T1408',
-    'T1520',
-    'T1466',
-    'T1407',
-    'T1456',
-    'T1439',
-    'T1523',
-    'T1455',
-    'T1428',
-    'T1404',
-    'T1449',
-    'T1450',
-    'T1405',
-    'T1458',
-    'T1477',
-    'T1442',
-    'T1420',
-    'T1541',
-    'T1472',
-    'T1581',
-    'T1417',
-    'T1516',
-    'T1411',
-    'T1425',
-    'T1478',
-    'T1464',
-    'T1579',
-    'T1430',
-    'T1461',
-    'T1457',
-    'T1454',
-    'T1462',
-    'T1473',
-    'T1452',
-    'T1463',
-    'T1444',
-    'T1403',
-    'T1398',
-    'T1400',
-    'T1399',
-    'T1575',
-    'T1507',
-    'T1423',
-    'T1410',
-    'T1406',
-    'T1470',
-    'T1424',
-    'T1604',
-    'T1544',
-    'T1443',
-    'T1468',
-    'T1469',
-    'T1467',
-    'T1465',
-    'T1451',
-    'T1582',
-    'T1603',
-    'T1513',
-    'T1437',
-    'T1521',
-    'T1441',
-    'T1474',
-    'T1508',
-    'T1426',
-    'T1422',
-    'T1421',
-    'T1416',
-    'T1415',
-    'T1509',
-    'T1576',
-    'T1481',
+    "T1453",
+    "T1445",
+    "T1435",
+    "T1433",
+    "T1432",
+    "T1517",
+    "T1413",
+    "T1409",
+    "T1438",
+    "T1434",
+    "T1431",
+    "T1418",
+    "T1427",
+    "T1460",
+    "T1402",
+    "T1429",
+    "T1512",
+    "T1414",
+    "T1412",
+    "T1448",
+    "T1510",
+    "T1540",
+    "T1605",
+    "T1436",
+    "T1577",
+    "T1532",
+    "T1471",
+    "T1533",
+    "T1447",
+    "T1475",
+    "T1476",
+    "T1440",
+    "T1401",
+    "T1446",
+    "T1419",
+    "T1459",
+    "T1408",
+    "T1520",
+    "T1466",
+    "T1407",
+    "T1456",
+    "T1439",
+    "T1523",
+    "T1455",
+    "T1428",
+    "T1404",
+    "T1449",
+    "T1450",
+    "T1405",
+    "T1458",
+    "T1477",
+    "T1442",
+    "T1420",
+    "T1541",
+    "T1472",
+    "T1581",
+    "T1417",
+    "T1516",
+    "T1411",
+    "T1425",
+    "T1478",
+    "T1464",
+    "T1579",
+    "T1430",
+    "T1461",
+    "T1457",
+    "T1454",
+    "T1462",
+    "T1473",
+    "T1452",
+    "T1463",
+    "T1444",
+    "T1403",
+    "T1398",
+    "T1400",
+    "T1399",
+    "T1575",
+    "T1507",
+    "T1423",
+    "T1410",
+    "T1406",
+    "T1470",
+    "T1424",
+    "T1604",
+    "T1544",
+    "T1443",
+    "T1468",
+    "T1469",
+    "T1467",
+    "T1465",
+    "T1451",
+    "T1582",
+    "T1603",
+    "T1513",
+    "T1437",
+    "T1521",
+    "T1441",
+    "T1474",
+    "T1508",
+    "T1426",
+    "T1422",
+    "T1421",
+    "T1416",
+    "T1415",
+    "T1509",
+    "T1576",
+    "T1481",
 )
 
 tlds = (
-    'aaa',
-    'aarp',
-    'abarth',
-    'abb',
-    'abbott',
-    'abbvie',
-    'abc',
-    'able',
-    'abogado',
-    'abudhabi',
-    'ac',
-    'academy',
-    'accenture',
-    'accountant',
-    'accountants',
-    'aco',
-    'actor',
-    'ad',
-    'adac',
-    'ads',
-    'adult',
-    'ae',
-    'aeg',
-    'aero',
-    'aetna',
-    'af',
-    'afamilycompany',
-    'afl',
-    'africa',
-    'ag',
-    'agakhan',
-    'agency',
-    'ai',
-    'aig',
-    'airbus',
-    'airforce',
-    'airtel',
-    'akdn',
-    'al',
-    'alfaromeo',
-    'alibaba',
-    'alipay',
-    'allfinanz',
-    'allstate',
-    'ally',
-    'alsace',
-    'alstom',
-    'am',
-    'amazon',
-    'americanexpress',
-    'americanfamily',
-    'amex',
-    'amfam',
-    'amica',
-    'amsterdam',
-    'analytics',
-    'android',
-    'anquan',
-    'anz',
-    'ao',
-    'aol',
-    'apartments',
-    'app',
-    'apple',
-    'aq',
-    'aquarelle',
-    'ar',
-    'arab',
-    'aramco',
-    'archi',
-    'army',
-    'arpa',
-    'art',
-    'arte',
-    'as',
-    'asda',
-    'asia',
-    'associates',
-    'at',
-    'athleta',
-    'attorney',
-    'au',
-    'auction',
-    'audi',
-    'audible',
-    'audio',
-    'auspost',
-    'author',
-    'auto',
-    'autos',
-    'avianca',
-    'aw',
-    'aws',
-    'ax',
-    'axa',
-    'az',
-    'azure',
-    'ba',
-    'baby',
-    'baidu',
-    'banamex',
-    'bananarepublic',
-    'band',
-    'bank',
-    'bar',
-    'barcelona',
-    'barclaycard',
-    'barclays',
-    'barefoot',
-    'bargains',
-    'baseball',
-    'basketball',
-    'bauhaus',
-    'bayern',
-    'bb',
-    'bbc',
-    'bbt',
-    'bbva',
-    'bcg',
-    'bcn',
-    'bd',
-    'be',
-    'beats',
-    'beauty',
-    'beer',
-    'bentley',
-    'berlin',
-    'best',
-    'bestbuy',
-    'bet',
-    'bf',
-    'bg',
-    'bh',
-    'bharti',
-    'bi',
-    'bible',
-    'bid',
-    'bike',
-    'bing',
-    'bingo',
-    'bio',
-    'biz',
-    'bj',
-    'black',
-    'blackfriday',
-    'blockbuster',
-    'blog',
-    'bloomberg',
-    'blue',
-    'bm',
-    'bms',
-    'bmw',
-    'bn',
-    'bnpparibas',
-    'bo',
-    'boats',
-    'boehringer',
-    'bofa',
-    'bom',
-    'bond',
-    'boo',
-    'book',
-    'booking',
-    'bosch',
-    'bostik',
-    'boston',
-    'bot',
-    'boutique',
-    'box',
-    'br',
-    'bradesco',
-    'bridgestone',
-    'broadway',
-    'broker',
-    'brother',
-    'brussels',
-    'bs',
-    'bt',
-    'budapest',
-    'bugatti',
-    'build',
-    'builders',
-    'business',
-    'buy',
-    'buzz',
-    'bv',
-    'bw',
-    'by',
-    'bz',
-    'bzh',
-    'ca',
-    'cab',
-    'cafe',
-    'cal',
-    'call',
-    'calvinklein',
-    'cam',
-    'camera',
-    'camp',
-    'cancerresearch',
-    'canon',
-    'capetown',
-    'capital',
-    'capitalone',
-    'car',
-    'caravan',
-    'cards',
-    'care',
-    'career',
-    'careers',
-    'cars',
-    'casa',
-    'case',
-    'cash',
-    'casino',
-    'cat',
-    'catering',
-    'catholic',
-    'cba',
-    'cbn',
-    'cbre',
-    'cbs',
-    'cc',
-    'cd',
-    'center',
-    'ceo',
-    'cern',
-    'cf',
-    'cfa',
-    'cfd',
-    'cg',
-    'ch',
-    'chanel',
-    'channel',
-    'charity',
-    'chase',
-    'chat',
-    'cheap',
-    'chintai',
-    'christmas',
-    'chrome',
-    'church',
-    'ci',
-    'cipriani',
-    'circle',
-    'cisco',
-    'citadel',
-    'citi',
-    'citic',
-    'city',
-    'cityeats',
-    'ck',
-    'cl',
-    'claims',
-    'cleaning',
-    'click',
-    'clinic',
-    'clinique',
-    'clothing',
-    'cloud',
-    'club',
-    'clubmed',
-    'cm',
-    'cn',
-    'co',
-    'coach',
-    'codes',
-    'coffee',
-    'college',
-    'cologne',
-    'com',
-    'comcast',
-    'commbank',
-    'community',
-    'company',
-    'compare',
-    'computer',
-    'comsec',
-    'condos',
-    'construction',
-    'consulting',
-    'contact',
-    'contractors',
-    'cooking',
-    'cookingchannel',
-    'cool',
-    'coop',
-    'corsica',
-    'country',
-    'coupon',
-    'coupons',
-    'courses',
-    'cpa',
-    'cr',
-    'credit',
-    'creditcard',
-    'creditunion',
-    'cricket',
-    'crown',
-    'crs',
-    'cruise',
-    'cruises',
-    'csc',
-    'cu',
-    'cuisinella',
-    'cv',
-    'cw',
-    'cx',
-    'cy',
-    'cymru',
-    'cyou',
-    'cz',
-    'dabur',
-    'dad',
-    'dance',
-    'data',
-    'date',
-    'dating',
-    'datsun',
-    'day',
-    'dclk',
-    'dds',
-    'de',
-    'deal',
-    'dealer',
-    'deals',
-    'degree',
-    'delivery',
-    'dell',
-    'deloitte',
-    'delta',
-    'democrat',
-    'dental',
-    'dentist',
-    'desi',
-    'design',
-    'dev',
-    'dhl',
-    'diamonds',
-    'diet',
-    'digital',
-    'direct',
-    'directory',
-    'discount',
-    'discover',
-    'dish',
-    'diy',
-    'dj',
-    'dk',
-    'dm',
-    'dnp',
-    'do',
-    'docs',
-    'doctor',
-    'dog',
-    'domains',
-    'dot',
-    'download',
-    'drive',
-    'dtv',
-    'dubai',
-    'duck',
-    'dunlop',
-    'dupont',
-    'durban',
-    'dvag',
-    'dvr',
-    'dz',
-    'earth',
-    'eat',
-    'ec',
-    'eco',
-    'edeka',
-    'edu',
-    'education',
-    'ee',
-    'eg',
-    'email',
-    'emerck',
-    'energy',
-    'engineer',
-    'engineering',
-    'enterprises',
-    'epson',
-    'equipment',
-    'er',
-    'ericsson',
-    'erni',
-    'es',
-    'esq',
-    'estate',
-    'et',
-    'etisalat',
-    'eu',
-    'eurovision',
-    'eus',
-    'events',
-    'exchange',
-    'expert',
-    'exposed',
-    'express',
-    'extraspace',
-    'fage',
-    'fail',
-    'fairwinds',
-    'faith',
-    'family',
-    'fan',
-    'fans',
-    'farm',
-    'farmers',
-    'fashion',
-    'fast',
-    'fedex',
-    'feedback',
-    'ferrari',
-    'ferrero',
-    'fi',
-    'fiat',
-    'fidelity',
-    'fido',
-    'film',
-    'final',
-    'finance',
-    'financial',
-    'fire',
-    'firestone',
-    'firmdale',
-    'fish',
-    'fishing',
-    'fit',
-    'fitness',
-    'fj',
-    'fk',
-    'flickr',
-    'flights',
-    'flir',
-    'florist',
-    'flowers',
-    'fly',
-    'fm',
-    'fo',
-    'foo',
-    'food',
-    'foodnetwork',
-    'football',
-    'ford',
-    'forex',
-    'forsale',
-    'forum',
-    'foundation',
-    'fox',
-    'fr',
-    'free',
-    'fresenius',
-    'frl',
-    'frogans',
-    'frontdoor',
-    'frontier',
-    'ftr',
-    'fujitsu',
-    'fun',
-    'fund',
-    'furniture',
-    'futbol',
-    'fyi',
-    'ga',
-    'gal',
-    'gallery',
-    'gallo',
-    'gallup',
-    'game',
-    'games',
-    'gap',
-    'garden',
-    'gay',
-    'gb',
-    'gbiz',
-    'gd',
-    'gdn',
-    'ge',
-    'gea',
-    'gent',
-    'genting',
-    'george',
-    'gf',
-    'gg',
-    'ggee',
-    'gh',
-    'gi',
-    'gift',
-    'gifts',
-    'gives',
-    'giving',
-    'gl',
-    'glade',
-    'glass',
-    'gle',
-    'global',
-    'globo',
-    'gm',
-    'gmail',
-    'gmbh',
-    'gmo',
-    'gmx',
-    'gn',
-    'godaddy',
-    'gold',
-    'goldpoint',
-    'golf',
-    'goo',
-    'goodyear',
-    'goog',
-    'google',
-    'gop',
-    'got',
-    'gov',
-    'gp',
-    'gq',
-    'gr',
-    'grainger',
-    'graphics',
-    'gratis',
-    'green',
-    'gripe',
-    'grocery',
-    'group',
-    'gs',
-    'gt',
-    'gu',
-    'guardian',
-    'gucci',
-    'guge',
-    'guide',
-    'guitars',
-    'guru',
-    'gw',
-    'gy',
-    'hair',
-    'hamburg',
-    'hangout',
-    'haus',
-    'hbo',
-    'hdfc',
-    'hdfcbank',
-    'health',
-    'healthcare',
-    'help',
-    'helsinki',
-    'here',
-    'hermes',
-    'hgtv',
-    'hiphop',
-    'hisamitsu',
-    'hitachi',
-    'hiv',
-    'hk',
-    'hkt',
-    'hm',
-    'hn',
-    'hockey',
-    'holdings',
-    'holiday',
-    'homedepot',
-    'homegoods',
-    'homes',
-    'homesense',
-    'honda',
-    'horse',
-    'hospital',
-    'host',
-    'hosting',
-    'hot',
-    'hoteles',
-    'hotels',
-    'hotmail',
-    'house',
-    'how',
-    'hr',
-    'hsbc',
-    'ht',
-    'hu',
-    'hughes',
-    'hyatt',
-    'hyundai',
-    'ibm',
-    'icbc',
-    'ice',
-    'icu',
-    'id',
-    'ie',
-    'ieee',
-    'ifm',
-    'ikano',
-    'il',
-    'im',
-    'imamat',
-    'imdb',
-    'immo',
-    'immobilien',
-    'in',
-    'inc',
-    'industries',
-    'infiniti',
-    'info',
-    'ing',
-    'ink',
-    'institute',
-    'insurance',
-    'insure',
-    'int',
-    'international',
-    'intuit',
-    'investments',
-    'io',
-    'ipiranga',
-    'iq',
-    'ir',
-    'irish',
-    'is',
-    'ismaili',
-    'ist',
-    'istanbul',
-    'it',
-    'itau',
-    'itv',
-    'jaguar',
-    'java',
-    'jcb',
-    'je',
-    'jeep',
-    'jetzt',
-    'jewelry',
-    'jio',
-    'jll',
-    'jm',
-    'jmp',
-    'jnj',
-    'jo',
-    'jobs',
-    'joburg',
-    'jot',
-    'joy',
-    'jp',
-    'jpmorgan',
-    'jprs',
-    'juegos',
-    'juniper',
-    'kaufen',
-    'kddi',
-    'ke',
-    'kerryhotels',
-    'kerrylogistics',
-    'kerryproperties',
-    'kfh',
-    'kg',
-    'kh',
-    'ki',
-    'kia',
-    'kim',
-    'kinder',
-    'kindle',
-    'kitchen',
-    'kiwi',
-    'km',
-    'kn',
-    'koeln',
-    'komatsu',
-    'kosher',
-    'kp',
-    'kpmg',
-    'kpn',
-    'kr',
-    'krd',
-    'kred',
-    'kuokgroup',
-    'kw',
-    'ky',
-    'kyoto',
-    'kz',
-    'la',
-    'lacaixa',
-    'lamborghini',
-    'lamer',
-    'lancaster',
-    'lancia',
-    'land',
-    'landrover',
-    'lanxess',
-    'lasalle',
-    'lat',
-    'latino',
-    'latrobe',
-    'law',
-    'lawyer',
-    'lb',
-    'lc',
-    'lds',
-    'lease',
-    'leclerc',
-    'lefrak',
-    'legal',
-    'lego',
-    'lexus',
-    'lgbt',
-    'li',
-    'lidl',
-    'life',
-    'lifeinsurance',
-    'lifestyle',
-    'lighting',
-    'like',
-    'lilly',
-    'limited',
-    'limo',
-    'lincoln',
-    'linde',
-    'link',
-    'lipsy',
-    'live',
-    'living',
-    'lixil',
-    'lk',
-    'llc',
-    'llp',
-    'loan',
-    'loans',
-    'locker',
-    'locus',
-    'loft',
-    'lol',
-    'london',
-    'lotte',
-    'lotto',
-    'love',
-    'lpl',
-    'lplfinancial',
-    'lr',
-    'ls',
-    'lt',
-    'ltd',
-    'ltda',
-    'lu',
-    'lundbeck',
-    'luxe',
-    'luxury',
-    'lv',
-    'ly',
-    'ma',
-    'macys',
-    'madrid',
-    'maif',
-    'maison',
-    'makeup',
-    'man',
-    'management',
-    'mango',
-    'map',
-    'market',
-    'marketing',
-    'markets',
-    'marriott',
-    'marshalls',
-    'maserati',
-    'mattel',
-    'mba',
-    'mc',
-    'mckinsey',
-    'md',
-    'me',
-    'med',
-    'media',
-    'meet',
-    'melbourne',
-    'meme',
-    'memorial',
-    'men',
-    'menu',
-    'merckmsd',
-    'mg',
-    'mh',
-    'miami',
-    'microsoft',
-    'mil',
-    'mini',
-    'mint',
-    'mit',
-    'mitsubishi',
-    'mk',
-    'ml',
-    'mlb',
-    'mls',
-    'mm',
-    'mma',
-    'mn',
-    'mo',
-    'mobi',
-    'mobile',
-    'moda',
-    'moe',
-    'moi',
-    'mom',
-    'monash',
-    'money',
-    'monster',
-    'mormon',
-    'mortgage',
-    'moscow',
-    'moto',
-    'motorcycles',
-    'mov',
-    'movie',
-    'mp',
-    'mq',
-    'mr',
-    'ms',
-    'msd',
-    'mt',
-    'mtn',
-    'mtr',
-    'mu',
-    'museum',
-    'mutual',
-    'mv',
-    'mw',
-    'mx',
-    'my',
-    'mz',
-    'na',
-    'nab',
-    'nagoya',
-    'name',
-    'natura',
-    'navy',
-    'nba',
-    'nc',
-    'ne',
-    'nec',
-    'net',
-    'netbank',
-    'netflix',
-    'network',
-    'neustar',
-    'new',
-    'news',
-    'next',
-    'nextdirect',
-    'nexus',
-    'nf',
-    'nfl',
-    'ng',
-    'ngo',
-    'nhk',
-    'ni',
-    'nico',
-    'nike',
-    'nikon',
-    'ninja',
-    'nissan',
-    'nissay',
-    'nl',
-    'no',
-    'nokia',
-    'northwesternmutual',
-    'norton',
-    'now',
-    'nowruz',
-    'nowtv',
-    'np',
-    'nr',
-    'nra',
-    'nrw',
-    'ntt',
-    'nu',
-    'nyc',
-    'nz',
-    'obi',
-    'observer',
-    'off',
-    'office',
-    'okinawa',
-    'olayan',
-    'olayangroup',
-    'oldnavy',
-    'ollo',
-    'om',
-    'omega',
-    'one',
-    'ong',
-    'onl',
-    'online',
-    'ooo',
-    'open',
-    'oracle',
-    'orange',
-    'org',
-    'organic',
-    'origins',
-    'osaka',
-    'otsuka',
-    'ott',
-    'ovh',
-    'pa',
-    'page',
-    'panasonic',
-    'paris',
-    'pars',
-    'partners',
-    'parts',
-    'party',
-    'passagens',
-    'pay',
-    'pccw',
-    'pe',
-    'pet',
-    'pf',
-    'pfizer',
-    'pg',
-    'ph',
-    'pharmacy',
-    'phd',
-    'philips',
-    'phone',
-    'photo',
-    'photography',
-    'photos',
-    'physio',
-    'pics',
-    'pictet',
-    'pictures',
-    'pid',
-    'pin',
-    'ping',
-    'pink',
-    'pioneer',
-    'pizza',
-    'pk',
-    'pl',
-    'place',
-    'play',
-    'playstation',
-    'plumbing',
-    'plus',
-    'pm',
-    'pn',
-    'pnc',
-    'pohl',
-    'poker',
-    'politie',
-    'porn',
-    'post',
-    'pr',
-    'pramerica',
-    'praxi',
-    'press',
-    'prime',
-    'pro',
-    'prod',
-    'productions',
-    'prof',
-    'progressive',
-    'promo',
-    'properties',
-    'property',
-    'protection',
-    'pru',
-    'prudential',
-    'ps',
-    'pt',
-    'pub',
-    'pw',
-    'pwc',
-    'py',
-    'qa',
-    'qpon',
-    'quebec',
-    'quest',
-    'qvc',
-    'racing',
-    'radio',
-    'raid',
-    're',
-    'read',
-    'realestate',
-    'realtor',
-    'realty',
-    'recipes',
-    'red',
-    'redstone',
-    'redumbrella',
-    'rehab',
-    'reise',
-    'reisen',
-    'reit',
-    'reliance',
-    'ren',
-    'rent',
-    'rentals',
-    'repair',
-    'report',
-    'republican',
-    'rest',
-    'restaurant',
-    'review',
-    'reviews',
-    'rexroth',
-    'rich',
-    'richardli',
-    'ricoh',
-    'ril',
-    'rio',
-    'rip',
-    'rmit',
-    'ro',
-    'rocher',
-    'rocks',
-    'rodeo',
-    'rogers',
-    'room',
-    'rs',
-    'rsvp',
-    'ru',
-    'rugby',
-    'ruhr',
-    'run',
-    'rw',
-    'rwe',
-    'ryukyu',
-    'sa',
-    'saarland',
-    'safe',
-    'safety',
-    'sakura',
-    'sale',
-    'salon',
-    'samsclub',
-    'samsung',
-    'sandvik',
-    'sandvikcoromant',
-    'sanofi',
-    'sap',
-    'sarl',
-    'sas',
-    'save',
-    'saxo',
-    'sb',
-    'sbi',
-    'sbs',
-    'sc',
-    'sca',
-    'scb',
-    'schaeffler',
-    'schmidt',
-    'scholarships',
-    'school',
-    'schule',
-    'schwarz',
-    'science',
-    'scjohnson',
-    'scot',
-    'sd',
-    'se',
-    'search',
-    'seat',
-    'secure',
-    'security',
-    'seek',
-    'select',
-    'sener',
-    'services',
-    'ses',
-    'seven',
-    'sew',
-    'sex',
-    'sexy',
-    'sfr',
-    'sg',
-    'sh',
-    'shangrila',
-    'sharp',
-    'shaw',
-    'shell',
-    'shia',
-    'shiksha',
-    'shoes',
-    'shop',
-    'shopping',
-    'shouji',
-    'show',
-    'showtime',
-    'si',
-    'silk',
-    'sina',
-    'singles',
-    'site',
-    'sj',
-    'sk',
-    'ski',
-    'skin',
-    'sky',
-    'skype',
-    'sl',
-    'sling',
-    'sm',
-    'smart',
-    'smile',
-    'sn',
-    'sncf',
-    'so',
-    'soccer',
-    'social',
-    'softbank',
-    'software',
-    'sohu',
-    'solar',
-    'solutions',
-    'song',
-    'sony',
-    'soy',
-    'spa',
-    'space',
-    'sport',
-    'spot',
-    'sr',
-    'srl',
-    'ss',
-    'st',
-    'stada',
-    'staples',
-    'star',
-    'statebank',
-    'statefarm',
-    'stc',
-    'stcgroup',
-    'stockholm',
-    'storage',
-    'store',
-    'stream',
-    'studio',
-    'study',
-    'style',
-    'su',
-    'sucks',
-    'supplies',
-    'supply',
-    'support',
-    'surf',
-    'surgery',
-    'suzuki',
-    'sv',
-    'swatch',
-    'swiftcover',
-    'swiss',
-    'sx',
-    'sy',
-    'sydney',
-    'systems',
-    'sz',
-    'tab',
-    'taipei',
-    'talk',
-    'taobao',
-    'target',
-    'tatamotors',
-    'tatar',
-    'tattoo',
-    'tax',
-    'taxi',
-    'tc',
-    'tci',
-    'td',
-    'tdk',
-    'team',
-    'tech',
-    'technology',
-    'tel',
-    'temasek',
-    'tennis',
-    'teva',
-    'tf',
-    'tg',
-    'th',
-    'thd',
-    'theater',
-    'theatre',
-    'tiaa',
-    'tickets',
-    'tienda',
-    'tiffany',
-    'tips',
-    'tires',
-    'tirol',
-    'tj',
-    'tjmaxx',
-    'tjx',
-    'tk',
-    'tkmaxx',
-    'tl',
-    'tm',
-    'tmall',
-    'tn',
-    'to',
-    'today',
-    'tokyo',
-    'tools',
-    'top',
-    'toray',
-    'toshiba',
-    'total',
-    'tours',
-    'town',
-    'toyota',
-    'toys',
-    'tr',
-    'trade',
-    'trading',
-    'training',
-    'travel',
-    'travelchannel',
-    'travelers',
-    'travelersinsurance',
-    'trust',
-    'trv',
-    'tt',
-    'tube',
-    'tui',
-    'tunes',
-    'tushu',
-    'tv',
-    'tvs',
-    'tw',
-    'tz',
-    'ua',
-    'ubank',
-    'ubs',
-    'ug',
-    'uk',
-    'unicom',
-    'university',
-    'uno',
-    'uol',
-    'ups',
-    'us',
-    'uy',
-    'uz',
-    'va',
-    'vacations',
-    'vana',
-    'vanguard',
-    'vc',
-    've',
-    'vegas',
-    'ventures',
-    'verisign',
-    'versicherung',
-    'vet',
-    'vg',
-    'vi',
-    'viajes',
-    'video',
-    'vig',
-    'viking',
-    'villas',
-    'vin',
-    'vip',
-    'virgin',
-    'visa',
-    'vision',
-    'viva',
-    'vivo',
-    'vlaanderen',
-    'vn',
-    'vodka',
-    'volkswagen',
-    'volvo',
-    'vote',
-    'voting',
-    'voto',
-    'voyage',
-    'vu',
-    'vuelos',
-    'wales',
-    'walmart',
-    'walter',
-    'wang',
-    'wanggou',
-    'watch',
-    'watches',
-    'weather',
-    'weatherchannel',
-    'webcam',
-    'weber',
-    'website',
-    'wed',
-    'wedding',
-    'weibo',
-    'weir',
-    'wf',
-    'whoswho',
-    'wien',
-    'wiki',
-    'williamhill',
-    'win',
-    'windows',
-    'wine',
-    'winners',
-    'wme',
-    'wolterskluwer',
-    'woodside',
-    'work',
-    'works',
-    'world',
-    'wow',
-    'ws',
-    'wtc',
-    'wtf',
-    'xbox',
-    'xerox',
-    'xfinity',
-    'xihuan',
-    'xin',
-    'xn--11b4c3d',
-    'xn--1ck2e1b',
-    'xn--1qqw23a',
-    'xn--2scrj9c',
-    'xn--30rr7y',
-    'xn--3bst00m',
-    'xn--3ds443g',
-    'xn--3e0b707e',
-    'xn--3hcrj9c',
-    'xn--3oq18vl8pn36a',
-    'xn--3pxu8k',
-    'xn--42c2d9a',
-    'xn--45br5cyl',
-    'xn--45brj9c',
-    'xn--45q11c',
-    'xn--4dbrk0ce',
-    'xn--4gbrim',
-    'xn--54b7fta0cc',
-    'xn--55qw42g',
-    'xn--55qx5d',
-    'xn--5su34j936bgsg',
-    'xn--5tzm5g',
-    'xn--6frz82g',
-    'xn--6qq986b3xl',
-    'xn--80adxhks',
-    'xn--80ao21a',
-    'xn--80aqecdr1a',
-    'xn--80asehdb',
-    'xn--80aswg',
-    'xn--8y0a063a',
-    'xn--90a3ac',
-    'xn--90ae',
-    'xn--90ais',
-    'xn--9dbq2a',
-    'xn--9et52u',
-    'xn--9krt00a',
-    'xn--b4w605ferd',
-    'xn--bck1b9a5dre4c',
-    'xn--c1avg',
-    'xn--c2br7g',
-    'xn--cck2b3b',
-    'xn--cckwcxetd',
-    'xn--cg4bki',
-    'xn--clchc0ea0b2g2a9gcd',
-    'xn--czr694b',
-    'xn--czrs0t',
-    'xn--czru2d',
-    'xn--d1acj3b',
-    'xn--d1alf',
-    'xn--e1a4c',
-    'xn--eckvdtc9d',
-    'xn--efvy88h',
-    'xn--fct429k',
-    'xn--fhbei',
-    'xn--fiq228c5hs',
-    'xn--fiq64b',
-    'xn--fiqs8s',
-    'xn--fiqz9s',
-    'xn--fjq720a',
-    'xn--flw351e',
-    'xn--fpcrj9c3d',
-    'xn--fzc2c9e2c',
-    'xn--fzys8d69uvgm',
-    'xn--g2xx48c',
-    'xn--gckr3f0f',
-    'xn--gecrj9c',
-    'xn--gk3at1e',
-    'xn--h2breg3eve',
-    'xn--h2brj9c',
-    'xn--h2brj9c8c',
-    'xn--hxt814e',
-    'xn--i1b6b1a6a2e',
-    'xn--imr513n',
-    'xn--io0a7i',
-    'xn--j1aef',
-    'xn--j1amh',
-    'xn--j6w193g',
-    'xn--jlq480n2rg',
-    'xn--jlq61u9w7b',
-    'xn--jvr189m',
-    'xn--kcrx77d1x4a',
-    'xn--kprw13d',
-    'xn--kpry57d',
-    'xn--kput3i',
-    'xn--l1acc',
-    'xn--lgbbat1ad8j',
-    'xn--mgb9awbf',
-    'xn--mgba3a3ejt',
-    'xn--mgba3a4f16a',
-    'xn--mgba7c0bbn0a',
-    'xn--mgbaakc7dvf',
-    'xn--mgbaam7a8h',
-    'xn--mgbab2bd',
-    'xn--mgbah1a3hjkrd',
-    'xn--mgbai9azgqp6j',
-    'xn--mgbayh7gpa',
-    'xn--mgbbh1a',
-    'xn--mgbbh1a71e',
-    'xn--mgbc0a9azcg',
-    'xn--mgbca7dzdo',
-    'xn--mgbcpq6gpa1a',
-    'xn--mgberp4a5d4ar',
-    'xn--mgbgu82a',
-    'xn--mgbi4ecexp',
-    'xn--mgbpl2fh',
-    'xn--mgbt3dhd',
-    'xn--mgbtx2b',
-    'xn--mgbx4cd0ab',
-    'xn--mix891f',
-    'xn--mk1bu44c',
-    'xn--mxtq1m',
-    'xn--ngbc5azd',
-    'xn--ngbe9e0a',
-    'xn--ngbrx',
-    'xn--node',
-    'xn--nqv7f',
-    'xn--nqv7fs00ema',
-    'xn--nyqy26a',
-    'xn--o3cw4h',
-    'xn--ogbpf8fl',
-    'xn--otu796d',
-    'xn--p1acf',
-    'xn--p1ai',
-    'xn--pgbs0dh',
-    'xn--pssy2u',
-    'xn--q7ce6a',
-    'xn--q9jyb4c',
-    'xn--qcka1pmc',
-    'xn--qxa6a',
-    'xn--qxam',
-    'xn--rhqv96g',
-    'xn--rovu88b',
-    'xn--rvc1e0am3e',
-    'xn--s9brj9c',
-    'xn--ses554g',
-    'xn--t60b56a',
-    'xn--tckwe',
-    'xn--tiq49xqyj',
-    'xn--unup4y',
-    'xn--vermgensberater-ctb',
-    'xn--vermgensberatung-pwb',
-    'xn--vhquv',
-    'xn--vuq861b',
-    'xn--w4r85el8fhu5dnra',
-    'xn--w4rs40l',
-    'xn--wgbh1c',
-    'xn--wgbl6a',
-    'xn--xhq521b',
-    'xn--xkc2al3hye2a',
-    'xn--xkc2dl3a5ee0h',
-    'xn--y9a3aq',
-    'xn--yfro4i67o',
-    'xn--ygbi2ammx',
-    'xn--zfr164b',
-    'xxx',
-    'xyz',
-    'yachts',
-    'yahoo',
-    'yamaxun',
-    'yandex',
-    'ye',
-    'yodobashi',
-    'yoga',
-    'yokohama',
-    'you',
-    'youtube',
-    'yt',
-    'yun',
-    'za',
-    'zappos',
-    'zara',
-    'zero',
-    'zip',
-    'zm',
-    'zone',
-    'zuerich',
-    'zw',
-    'onion',
+    "aaa",
+    "aarp",
+    "abarth",
+    "abb",
+    "abbott",
+    "abbvie",
+    "abc",
+    "able",
+    "abogado",
+    "abudhabi",
+    "ac",
+    "academy",
+    "accenture",
+    "accountant",
+    "accountants",
+    "aco",
+    "actor",
+    "ad",
+    "adac",
+    "ads",
+    "adult",
+    "ae",
+    "aeg",
+    "aero",
+    "aetna",
+    "af",
+    "afamilycompany",
+    "afl",
+    "africa",
+    "ag",
+    "agakhan",
+    "agency",
+    "ai",
+    "aig",
+    "airbus",
+    "airforce",
+    "airtel",
+    "akdn",
+    "al",
+    "alfaromeo",
+    "alibaba",
+    "alipay",
+    "allfinanz",
+    "allstate",
+    "ally",
+    "alsace",
+    "alstom",
+    "am",
+    "amazon",
+    "americanexpress",
+    "americanfamily",
+    "amex",
+    "amfam",
+    "amica",
+    "amsterdam",
+    "analytics",
+    "android",
+    "anquan",
+    "anz",
+    "ao",
+    "aol",
+    "apartments",
+    "app",
+    "apple",
+    "aq",
+    "aquarelle",
+    "ar",
+    "arab",
+    "aramco",
+    "archi",
+    "army",
+    "arpa",
+    "art",
+    "arte",
+    "as",
+    "asda",
+    "asia",
+    "associates",
+    "at",
+    "athleta",
+    "attorney",
+    "au",
+    "auction",
+    "audi",
+    "audible",
+    "audio",
+    "auspost",
+    "author",
+    "auto",
+    "autos",
+    "avianca",
+    "aw",
+    "aws",
+    "ax",
+    "axa",
+    "az",
+    "azure",
+    "ba",
+    "baby",
+    "baidu",
+    "banamex",
+    "bananarepublic",
+    "band",
+    "bank",
+    "bar",
+    "barcelona",
+    "barclaycard",
+    "barclays",
+    "barefoot",
+    "bargains",
+    "baseball",
+    "basketball",
+    "bauhaus",
+    "bayern",
+    "bb",
+    "bbc",
+    "bbt",
+    "bbva",
+    "bcg",
+    "bcn",
+    "bd",
+    "be",
+    "beats",
+    "beauty",
+    "beer",
+    "bentley",
+    "berlin",
+    "best",
+    "bestbuy",
+    "bet",
+    "bf",
+    "bg",
+    "bh",
+    "bharti",
+    "bi",
+    "bible",
+    "bid",
+    "bike",
+    "bing",
+    "bingo",
+    "bio",
+    "biz",
+    "bj",
+    "black",
+    "blackfriday",
+    "blockbuster",
+    "blog",
+    "bloomberg",
+    "blue",
+    "bm",
+    "bms",
+    "bmw",
+    "bn",
+    "bnpparibas",
+    "bo",
+    "boats",
+    "boehringer",
+    "bofa",
+    "bom",
+    "bond",
+    "boo",
+    "book",
+    "booking",
+    "bosch",
+    "bostik",
+    "boston",
+    "bot",
+    "boutique",
+    "box",
+    "br",
+    "bradesco",
+    "bridgestone",
+    "broadway",
+    "broker",
+    "brother",
+    "brussels",
+    "bs",
+    "bt",
+    "budapest",
+    "bugatti",
+    "build",
+    "builders",
+    "business",
+    "buy",
+    "buzz",
+    "bv",
+    "bw",
+    "by",
+    "bz",
+    "bzh",
+    "ca",
+    "cab",
+    "cafe",
+    "cal",
+    "call",
+    "calvinklein",
+    "cam",
+    "camera",
+    "camp",
+    "cancerresearch",
+    "canon",
+    "capetown",
+    "capital",
+    "capitalone",
+    "car",
+    "caravan",
+    "cards",
+    "care",
+    "career",
+    "careers",
+    "cars",
+    "casa",
+    "case",
+    "cash",
+    "casino",
+    "cat",
+    "catering",
+    "catholic",
+    "cba",
+    "cbn",
+    "cbre",
+    "cbs",
+    "cc",
+    "cd",
+    "center",
+    "ceo",
+    "cern",
+    "cf",
+    "cfa",
+    "cfd",
+    "cg",
+    "ch",
+    "chanel",
+    "channel",
+    "charity",
+    "chase",
+    "chat",
+    "cheap",
+    "chintai",
+    "christmas",
+    "chrome",
+    "church",
+    "ci",
+    "cipriani",
+    "circle",
+    "cisco",
+    "citadel",
+    "citi",
+    "citic",
+    "city",
+    "cityeats",
+    "ck",
+    "cl",
+    "claims",
+    "cleaning",
+    "click",
+    "clinic",
+    "clinique",
+    "clothing",
+    "cloud",
+    "club",
+    "clubmed",
+    "cm",
+    "cn",
+    "co",
+    "coach",
+    "codes",
+    "coffee",
+    "college",
+    "cologne",
+    "com",
+    "comcast",
+    "commbank",
+    "community",
+    "company",
+    "compare",
+    "computer",
+    "comsec",
+    "condos",
+    "construction",
+    "consulting",
+    "contact",
+    "contractors",
+    "cooking",
+    "cookingchannel",
+    "cool",
+    "coop",
+    "corsica",
+    "country",
+    "coupon",
+    "coupons",
+    "courses",
+    "cpa",
+    "cr",
+    "credit",
+    "creditcard",
+    "creditunion",
+    "cricket",
+    "crown",
+    "crs",
+    "cruise",
+    "cruises",
+    "csc",
+    "cu",
+    "cuisinella",
+    "cv",
+    "cw",
+    "cx",
+    "cy",
+    "cymru",
+    "cyou",
+    "cz",
+    "dabur",
+    "dad",
+    "dance",
+    "data",
+    "date",
+    "dating",
+    "datsun",
+    "day",
+    "dclk",
+    "dds",
+    "de",
+    "deal",
+    "dealer",
+    "deals",
+    "degree",
+    "delivery",
+    "dell",
+    "deloitte",
+    "delta",
+    "democrat",
+    "dental",
+    "dentist",
+    "desi",
+    "design",
+    "dev",
+    "dhl",
+    "diamonds",
+    "diet",
+    "digital",
+    "direct",
+    "directory",
+    "discount",
+    "discover",
+    "dish",
+    "diy",
+    "dj",
+    "dk",
+    "dm",
+    "dnp",
+    "do",
+    "docs",
+    "doctor",
+    "dog",
+    "domains",
+    "dot",
+    "download",
+    "drive",
+    "dtv",
+    "dubai",
+    "duck",
+    "dunlop",
+    "dupont",
+    "durban",
+    "dvag",
+    "dvr",
+    "dz",
+    "earth",
+    "eat",
+    "ec",
+    "eco",
+    "edeka",
+    "edu",
+    "education",
+    "ee",
+    "eg",
+    "email",
+    "emerck",
+    "energy",
+    "engineer",
+    "engineering",
+    "enterprises",
+    "epson",
+    "equipment",
+    "er",
+    "ericsson",
+    "erni",
+    "es",
+    "esq",
+    "estate",
+    "et",
+    "etisalat",
+    "eu",
+    "eurovision",
+    "eus",
+    "events",
+    "exchange",
+    "expert",
+    "exposed",
+    "express",
+    "extraspace",
+    "fage",
+    "fail",
+    "fairwinds",
+    "faith",
+    "family",
+    "fan",
+    "fans",
+    "farm",
+    "farmers",
+    "fashion",
+    "fast",
+    "fedex",
+    "feedback",
+    "ferrari",
+    "ferrero",
+    "fi",
+    "fiat",
+    "fidelity",
+    "fido",
+    "film",
+    "final",
+    "finance",
+    "financial",
+    "fire",
+    "firestone",
+    "firmdale",
+    "fish",
+    "fishing",
+    "fit",
+    "fitness",
+    "fj",
+    "fk",
+    "flickr",
+    "flights",
+    "flir",
+    "florist",
+    "flowers",
+    "fly",
+    "fm",
+    "fo",
+    "foo",
+    "food",
+    "foodnetwork",
+    "football",
+    "ford",
+    "forex",
+    "forsale",
+    "forum",
+    "foundation",
+    "fox",
+    "fr",
+    "free",
+    "fresenius",
+    "frl",
+    "frogans",
+    "frontdoor",
+    "frontier",
+    "ftr",
+    "fujitsu",
+    "fun",
+    "fund",
+    "furniture",
+    "futbol",
+    "fyi",
+    "ga",
+    "gal",
+    "gallery",
+    "gallo",
+    "gallup",
+    "game",
+    "games",
+    "gap",
+    "garden",
+    "gay",
+    "gb",
+    "gbiz",
+    "gd",
+    "gdn",
+    "ge",
+    "gea",
+    "gent",
+    "genting",
+    "george",
+    "gf",
+    "gg",
+    "ggee",
+    "gh",
+    "gi",
+    "gift",
+    "gifts",
+    "gives",
+    "giving",
+    "gl",
+    "glade",
+    "glass",
+    "gle",
+    "global",
+    "globo",
+    "gm",
+    "gmail",
+    "gmbh",
+    "gmo",
+    "gmx",
+    "gn",
+    "godaddy",
+    "gold",
+    "goldpoint",
+    "golf",
+    "goo",
+    "goodyear",
+    "goog",
+    "google",
+    "gop",
+    "got",
+    "gov",
+    "gp",
+    "gq",
+    "gr",
+    "grainger",
+    "graphics",
+    "gratis",
+    "green",
+    "gripe",
+    "grocery",
+    "group",
+    "gs",
+    "gt",
+    "gu",
+    "guardian",
+    "gucci",
+    "guge",
+    "guide",
+    "guitars",
+    "guru",
+    "gw",
+    "gy",
+    "hair",
+    "hamburg",
+    "hangout",
+    "haus",
+    "hbo",
+    "hdfc",
+    "hdfcbank",
+    "health",
+    "healthcare",
+    "help",
+    "helsinki",
+    "here",
+    "hermes",
+    "hgtv",
+    "hiphop",
+    "hisamitsu",
+    "hitachi",
+    "hiv",
+    "hk",
+    "hkt",
+    "hm",
+    "hn",
+    "hockey",
+    "holdings",
+    "holiday",
+    "homedepot",
+    "homegoods",
+    "homes",
+    "homesense",
+    "honda",
+    "horse",
+    "hospital",
+    "host",
+    "hosting",
+    "hot",
+    "hoteles",
+    "hotels",
+    "hotmail",
+    "house",
+    "how",
+    "hr",
+    "hsbc",
+    "ht",
+    "hu",
+    "hughes",
+    "hyatt",
+    "hyundai",
+    "ibm",
+    "icbc",
+    "ice",
+    "icu",
+    "id",
+    "ie",
+    "ieee",
+    "ifm",
+    "ikano",
+    "il",
+    "im",
+    "imamat",
+    "imdb",
+    "immo",
+    "immobilien",
+    "in",
+    "inc",
+    "industries",
+    "infiniti",
+    "info",
+    "ing",
+    "ink",
+    "institute",
+    "insurance",
+    "insure",
+    "int",
+    "international",
+    "intuit",
+    "investments",
+    "io",
+    "ipiranga",
+    "iq",
+    "ir",
+    "irish",
+    "is",
+    "ismaili",
+    "ist",
+    "istanbul",
+    "it",
+    "itau",
+    "itv",
+    "jaguar",
+    "java",
+    "jcb",
+    "je",
+    "jeep",
+    "jetzt",
+    "jewelry",
+    "jio",
+    "jll",
+    "jm",
+    "jmp",
+    "jnj",
+    "jo",
+    "jobs",
+    "joburg",
+    "jot",
+    "joy",
+    "jp",
+    "jpmorgan",
+    "jprs",
+    "juegos",
+    "juniper",
+    "kaufen",
+    "kddi",
+    "ke",
+    "kerryhotels",
+    "kerrylogistics",
+    "kerryproperties",
+    "kfh",
+    "kg",
+    "kh",
+    "ki",
+    "kia",
+    "kim",
+    "kinder",
+    "kindle",
+    "kitchen",
+    "kiwi",
+    "km",
+    "kn",
+    "koeln",
+    "komatsu",
+    "kosher",
+    "kp",
+    "kpmg",
+    "kpn",
+    "kr",
+    "krd",
+    "kred",
+    "kuokgroup",
+    "kw",
+    "ky",
+    "kyoto",
+    "kz",
+    "la",
+    "lacaixa",
+    "lamborghini",
+    "lamer",
+    "lancaster",
+    "lancia",
+    "land",
+    "landrover",
+    "lanxess",
+    "lasalle",
+    "lat",
+    "latino",
+    "latrobe",
+    "law",
+    "lawyer",
+    "lb",
+    "lc",
+    "lds",
+    "lease",
+    "leclerc",
+    "lefrak",
+    "legal",
+    "lego",
+    "lexus",
+    "lgbt",
+    "li",
+    "lidl",
+    "life",
+    "lifeinsurance",
+    "lifestyle",
+    "lighting",
+    "like",
+    "lilly",
+    "limited",
+    "limo",
+    "lincoln",
+    "linde",
+    "link",
+    "lipsy",
+    "live",
+    "living",
+    "lixil",
+    "lk",
+    "llc",
+    "llp",
+    "loan",
+    "loans",
+    "locker",
+    "locus",
+    "loft",
+    "lol",
+    "london",
+    "lotte",
+    "lotto",
+    "love",
+    "lpl",
+    "lplfinancial",
+    "lr",
+    "ls",
+    "lt",
+    "ltd",
+    "ltda",
+    "lu",
+    "lundbeck",
+    "luxe",
+    "luxury",
+    "lv",
+    "ly",
+    "ma",
+    "macys",
+    "madrid",
+    "maif",
+    "maison",
+    "makeup",
+    "man",
+    "management",
+    "mango",
+    "map",
+    "market",
+    "marketing",
+    "markets",
+    "marriott",
+    "marshalls",
+    "maserati",
+    "mattel",
+    "mba",
+    "mc",
+    "mckinsey",
+    "md",
+    "me",
+    "med",
+    "media",
+    "meet",
+    "melbourne",
+    "meme",
+    "memorial",
+    "men",
+    "menu",
+    "merckmsd",
+    "mg",
+    "mh",
+    "miami",
+    "microsoft",
+    "mil",
+    "mini",
+    "mint",
+    "mit",
+    "mitsubishi",
+    "mk",
+    "ml",
+    "mlb",
+    "mls",
+    "mm",
+    "mma",
+    "mn",
+    "mo",
+    "mobi",
+    "mobile",
+    "moda",
+    "moe",
+    "moi",
+    "mom",
+    "monash",
+    "money",
+    "monster",
+    "mormon",
+    "mortgage",
+    "moscow",
+    "moto",
+    "motorcycles",
+    "mov",
+    "movie",
+    "mp",
+    "mq",
+    "mr",
+    "ms",
+    "msd",
+    "mt",
+    "mtn",
+    "mtr",
+    "mu",
+    "museum",
+    "mutual",
+    "mv",
+    "mw",
+    "mx",
+    "my",
+    "mz",
+    "na",
+    "nab",
+    "nagoya",
+    "name",
+    "natura",
+    "navy",
+    "nba",
+    "nc",
+    "ne",
+    "nec",
+    "net",
+    "netbank",
+    "netflix",
+    "network",
+    "neustar",
+    "new",
+    "news",
+    "next",
+    "nextdirect",
+    "nexus",
+    "nf",
+    "nfl",
+    "ng",
+    "ngo",
+    "nhk",
+    "ni",
+    "nico",
+    "nike",
+    "nikon",
+    "ninja",
+    "nissan",
+    "nissay",
+    "nl",
+    "no",
+    "nokia",
+    "northwesternmutual",
+    "norton",
+    "now",
+    "nowruz",
+    "nowtv",
+    "np",
+    "nr",
+    "nra",
+    "nrw",
+    "ntt",
+    "nu",
+    "nyc",
+    "nz",
+    "obi",
+    "observer",
+    "off",
+    "office",
+    "okinawa",
+    "olayan",
+    "olayangroup",
+    "oldnavy",
+    "ollo",
+    "om",
+    "omega",
+    "one",
+    "ong",
+    "onl",
+    "online",
+    "ooo",
+    "open",
+    "oracle",
+    "orange",
+    "org",
+    "organic",
+    "origins",
+    "osaka",
+    "otsuka",
+    "ott",
+    "ovh",
+    "pa",
+    "page",
+    "panasonic",
+    "paris",
+    "pars",
+    "partners",
+    "parts",
+    "party",
+    "passagens",
+    "pay",
+    "pccw",
+    "pe",
+    "pet",
+    "pf",
+    "pfizer",
+    "pg",
+    "ph",
+    "pharmacy",
+    "phd",
+    "philips",
+    "phone",
+    "photo",
+    "photography",
+    "photos",
+    "physio",
+    "pics",
+    "pictet",
+    "pictures",
+    "pid",
+    "pin",
+    "ping",
+    "pink",
+    "pioneer",
+    "pizza",
+    "pk",
+    "pl",
+    "place",
+    "play",
+    "playstation",
+    "plumbing",
+    "plus",
+    "pm",
+    "pn",
+    "pnc",
+    "pohl",
+    "poker",
+    "politie",
+    "porn",
+    "post",
+    "pr",
+    "pramerica",
+    "praxi",
+    "press",
+    "prime",
+    "pro",
+    "prod",
+    "productions",
+    "prof",
+    "progressive",
+    "promo",
+    "properties",
+    "property",
+    "protection",
+    "pru",
+    "prudential",
+    "ps",
+    "pt",
+    "pub",
+    "pw",
+    "pwc",
+    "py",
+    "qa",
+    "qpon",
+    "quebec",
+    "quest",
+    "qvc",
+    "racing",
+    "radio",
+    "raid",
+    "re",
+    "read",
+    "realestate",
+    "realtor",
+    "realty",
+    "recipes",
+    "red",
+    "redstone",
+    "redumbrella",
+    "rehab",
+    "reise",
+    "reisen",
+    "reit",
+    "reliance",
+    "ren",
+    "rent",
+    "rentals",
+    "repair",
+    "report",
+    "republican",
+    "rest",
+    "restaurant",
+    "review",
+    "reviews",
+    "rexroth",
+    "rich",
+    "richardli",
+    "ricoh",
+    "ril",
+    "rio",
+    "rip",
+    "rmit",
+    "ro",
+    "rocher",
+    "rocks",
+    "rodeo",
+    "rogers",
+    "room",
+    "rs",
+    "rsvp",
+    "ru",
+    "rugby",
+    "ruhr",
+    "run",
+    "rw",
+    "rwe",
+    "ryukyu",
+    "sa",
+    "saarland",
+    "safe",
+    "safety",
+    "sakura",
+    "sale",
+    "salon",
+    "samsclub",
+    "samsung",
+    "sandvik",
+    "sandvikcoromant",
+    "sanofi",
+    "sap",
+    "sarl",
+    "sas",
+    "save",
+    "saxo",
+    "sb",
+    "sbi",
+    "sbs",
+    "sc",
+    "sca",
+    "scb",
+    "schaeffler",
+    "schmidt",
+    "scholarships",
+    "school",
+    "schule",
+    "schwarz",
+    "science",
+    "scjohnson",
+    "scot",
+    "sd",
+    "se",
+    "search",
+    "seat",
+    "secure",
+    "security",
+    "seek",
+    "select",
+    "sener",
+    "services",
+    "ses",
+    "seven",
+    "sew",
+    "sex",
+    "sexy",
+    "sfr",
+    "sg",
+    "sh",
+    "shangrila",
+    "sharp",
+    "shaw",
+    "shell",
+    "shia",
+    "shiksha",
+    "shoes",
+    "shop",
+    "shopping",
+    "shouji",
+    "show",
+    "showtime",
+    "si",
+    "silk",
+    "sina",
+    "singles",
+    "site",
+    "sj",
+    "sk",
+    "ski",
+    "skin",
+    "sky",
+    "skype",
+    "sl",
+    "sling",
+    "sm",
+    "smart",
+    "smile",
+    "sn",
+    "sncf",
+    "so",
+    "soccer",
+    "social",
+    "softbank",
+    "software",
+    "sohu",
+    "solar",
+    "solutions",
+    "song",
+    "sony",
+    "soy",
+    "spa",
+    "space",
+    "sport",
+    "spot",
+    "sr",
+    "srl",
+    "ss",
+    "st",
+    "stada",
+    "staples",
+    "star",
+    "statebank",
+    "statefarm",
+    "stc",
+    "stcgroup",
+    "stockholm",
+    "storage",
+    "store",
+    "stream",
+    "studio",
+    "study",
+    "style",
+    "su",
+    "sucks",
+    "supplies",
+    "supply",
+    "support",
+    "surf",
+    "surgery",
+    "suzuki",
+    "sv",
+    "swatch",
+    "swiftcover",
+    "swiss",
+    "sx",
+    "sy",
+    "sydney",
+    "systems",
+    "sz",
+    "tab",
+    "taipei",
+    "talk",
+    "taobao",
+    "target",
+    "tatamotors",
+    "tatar",
+    "tattoo",
+    "tax",
+    "taxi",
+    "tc",
+    "tci",
+    "td",
+    "tdk",
+    "team",
+    "tech",
+    "technology",
+    "tel",
+    "temasek",
+    "tennis",
+    "teva",
+    "tf",
+    "tg",
+    "th",
+    "thd",
+    "theater",
+    "theatre",
+    "tiaa",
+    "tickets",
+    "tienda",
+    "tiffany",
+    "tips",
+    "tires",
+    "tirol",
+    "tj",
+    "tjmaxx",
+    "tjx",
+    "tk",
+    "tkmaxx",
+    "tl",
+    "tm",
+    "tmall",
+    "tn",
+    "to",
+    "today",
+    "tokyo",
+    "tools",
+    "top",
+    "toray",
+    "toshiba",
+    "total",
+    "tours",
+    "town",
+    "toyota",
+    "toys",
+    "tr",
+    "trade",
+    "trading",
+    "training",
+    "travel",
+    "travelchannel",
+    "travelers",
+    "travelersinsurance",
+    "trust",
+    "trv",
+    "tt",
+    "tube",
+    "tui",
+    "tunes",
+    "tushu",
+    "tv",
+    "tvs",
+    "tw",
+    "tz",
+    "ua",
+    "ubank",
+    "ubs",
+    "ug",
+    "uk",
+    "unicom",
+    "university",
+    "uno",
+    "uol",
+    "ups",
+    "us",
+    "uy",
+    "uz",
+    "va",
+    "vacations",
+    "vana",
+    "vanguard",
+    "vc",
+    "ve",
+    "vegas",
+    "ventures",
+    "verisign",
+    "versicherung",
+    "vet",
+    "vg",
+    "vi",
+    "viajes",
+    "video",
+    "vig",
+    "viking",
+    "villas",
+    "vin",
+    "vip",
+    "virgin",
+    "visa",
+    "vision",
+    "viva",
+    "vivo",
+    "vlaanderen",
+    "vn",
+    "vodka",
+    "volkswagen",
+    "volvo",
+    "vote",
+    "voting",
+    "voto",
+    "voyage",
+    "vu",
+    "vuelos",
+    "wales",
+    "walmart",
+    "walter",
+    "wang",
+    "wanggou",
+    "watch",
+    "watches",
+    "weather",
+    "weatherchannel",
+    "webcam",
+    "weber",
+    "website",
+    "wed",
+    "wedding",
+    "weibo",
+    "weir",
+    "wf",
+    "whoswho",
+    "wien",
+    "wiki",
+    "williamhill",
+    "win",
+    "windows",
+    "wine",
+    "winners",
+    "wme",
+    "wolterskluwer",
+    "woodside",
+    "work",
+    "works",
+    "world",
+    "wow",
+    "ws",
+    "wtc",
+    "wtf",
+    "xbox",
+    "xerox",
+    "xfinity",
+    "xihuan",
+    "xin",
+    "xn--11b4c3d",
+    "xn--1ck2e1b",
+    "xn--1qqw23a",
+    "xn--2scrj9c",
+    "xn--30rr7y",
+    "xn--3bst00m",
+    "xn--3ds443g",
+    "xn--3e0b707e",
+    "xn--3hcrj9c",
+    "xn--3oq18vl8pn36a",
+    "xn--3pxu8k",
+    "xn--42c2d9a",
+    "xn--45br5cyl",
+    "xn--45brj9c",
+    "xn--45q11c",
+    "xn--4dbrk0ce",
+    "xn--4gbrim",
+    "xn--54b7fta0cc",
+    "xn--55qw42g",
+    "xn--55qx5d",
+    "xn--5su34j936bgsg",
+    "xn--5tzm5g",
+    "xn--6frz82g",
+    "xn--6qq986b3xl",
+    "xn--80adxhks",
+    "xn--80ao21a",
+    "xn--80aqecdr1a",
+    "xn--80asehdb",
+    "xn--80aswg",
+    "xn--8y0a063a",
+    "xn--90a3ac",
+    "xn--90ae",
+    "xn--90ais",
+    "xn--9dbq2a",
+    "xn--9et52u",
+    "xn--9krt00a",
+    "xn--b4w605ferd",
+    "xn--bck1b9a5dre4c",
+    "xn--c1avg",
+    "xn--c2br7g",
+    "xn--cck2b3b",
+    "xn--cckwcxetd",
+    "xn--cg4bki",
+    "xn--clchc0ea0b2g2a9gcd",
+    "xn--czr694b",
+    "xn--czrs0t",
+    "xn--czru2d",
+    "xn--d1acj3b",
+    "xn--d1alf",
+    "xn--e1a4c",
+    "xn--eckvdtc9d",
+    "xn--efvy88h",
+    "xn--fct429k",
+    "xn--fhbei",
+    "xn--fiq228c5hs",
+    "xn--fiq64b",
+    "xn--fiqs8s",
+    "xn--fiqz9s",
+    "xn--fjq720a",
+    "xn--flw351e",
+    "xn--fpcrj9c3d",
+    "xn--fzc2c9e2c",
+    "xn--fzys8d69uvgm",
+    "xn--g2xx48c",
+    "xn--gckr3f0f",
+    "xn--gecrj9c",
+    "xn--gk3at1e",
+    "xn--h2breg3eve",
+    "xn--h2brj9c",
+    "xn--h2brj9c8c",
+    "xn--hxt814e",
+    "xn--i1b6b1a6a2e",
+    "xn--imr513n",
+    "xn--io0a7i",
+    "xn--j1aef",
+    "xn--j1amh",
+    "xn--j6w193g",
+    "xn--jlq480n2rg",
+    "xn--jlq61u9w7b",
+    "xn--jvr189m",
+    "xn--kcrx77d1x4a",
+    "xn--kprw13d",
+    "xn--kpry57d",
+    "xn--kput3i",
+    "xn--l1acc",
+    "xn--lgbbat1ad8j",
+    "xn--mgb9awbf",
+    "xn--mgba3a3ejt",
+    "xn--mgba3a4f16a",
+    "xn--mgba7c0bbn0a",
+    "xn--mgbaakc7dvf",
+    "xn--mgbaam7a8h",
+    "xn--mgbab2bd",
+    "xn--mgbah1a3hjkrd",
+    "xn--mgbai9azgqp6j",
+    "xn--mgbayh7gpa",
+    "xn--mgbbh1a",
+    "xn--mgbbh1a71e",
+    "xn--mgbc0a9azcg",
+    "xn--mgbca7dzdo",
+    "xn--mgbcpq6gpa1a",
+    "xn--mgberp4a5d4ar",
+    "xn--mgbgu82a",
+    "xn--mgbi4ecexp",
+    "xn--mgbpl2fh",
+    "xn--mgbt3dhd",
+    "xn--mgbtx2b",
+    "xn--mgbx4cd0ab",
+    "xn--mix891f",
+    "xn--mk1bu44c",
+    "xn--mxtq1m",
+    "xn--ngbc5azd",
+    "xn--ngbe9e0a",
+    "xn--ngbrx",
+    "xn--node",
+    "xn--nqv7f",
+    "xn--nqv7fs00ema",
+    "xn--nyqy26a",
+    "xn--o3cw4h",
+    "xn--ogbpf8fl",
+    "xn--otu796d",
+    "xn--p1acf",
+    "xn--p1ai",
+    "xn--pgbs0dh",
+    "xn--pssy2u",
+    "xn--q7ce6a",
+    "xn--q9jyb4c",
+    "xn--qcka1pmc",
+    "xn--qxa6a",
+    "xn--qxam",
+    "xn--rhqv96g",
+    "xn--rovu88b",
+    "xn--rvc1e0am3e",
+    "xn--s9brj9c",
+    "xn--ses554g",
+    "xn--t60b56a",
+    "xn--tckwe",
+    "xn--tiq49xqyj",
+    "xn--unup4y",
+    "xn--vermgensberater-ctb",
+    "xn--vermgensberatung-pwb",
+    "xn--vhquv",
+    "xn--vuq861b",
+    "xn--w4r85el8fhu5dnra",
+    "xn--w4rs40l",
+    "xn--wgbh1c",
+    "xn--wgbl6a",
+    "xn--xhq521b",
+    "xn--xkc2al3hye2a",
+    "xn--xkc2dl3a5ee0h",
+    "xn--y9a3aq",
+    "xn--yfro4i67o",
+    "xn--ygbi2ammx",
+    "xn--zfr164b",
+    "xxx",
+    "xyz",
+    "yachts",
+    "yahoo",
+    "yamaxun",
+    "yandex",
+    "ye",
+    "yodobashi",
+    "yoga",
+    "yokohama",
+    "you",
+    "youtube",
+    "yt",
+    "yun",
+    "za",
+    "zappos",
+    "zara",
+    "zero",
+    "zip",
+    "zm",
+    "zone",
+    "zuerich",
+    "zw",
+    "onion",
 )
 
 schemes = [
-    'aaa',
-    'aaas',
-    'about',
-    'acap',
-    'acct',
-    'acr',
-    'adiumxtra',
-    'afp',
-    'afs',
-    'aim',
-    'appdata',
-    'apt',
-    'attachment',
-    'aw',
-    'barion',
-    'beshare',
-    'bitcoin',
-    'bitcoincash',
-    'blob',
-    'bolo',
-    'browserext',
-    'calculator',
-    'callto',
-    'cap',
-    'chrome',
-    'chrome-extension',
-    'cid',
-    'coap',
-    'coap+tcp',
-    'coap+ws',
-    'coaps',
-    'coaps+tcp',
-    'coaps+ws',
-    'com-eventbrite-attendee',
-    'content',
-    'conti',
-    'crid',
-    'cvs',
-    'data',
-    'dav',
-    'diaspora',
-    'dict',
-    'did',
-    'dis',
-    'dlna-playcontainer',
-    'dlna-playsingle',
-    'dns',
-    'dntp',
-    'dtn',
-    'dvb',
-    'ed2k',
-    'elsi',
-    'example',
-    'facetime',
-    'fax',
-    'feed',
-    'feedready',
-    'file',
-    'filesystem',
-    'finger',
-    'fish',
-    'ftp',
-    'geo',
-    'gg',
-    'git',
-    'gizmoproject',
-    'go',
-    'gopher',
-    'graph',
-    'gtalk',
-    'h323',
-    'ham',
-    'hcap',
-    'hcp',
-    'http',
-    'https',
-    'hxxp',
-    'hxxps',
-    'hydrazone',
-    'iax',
-    'icap',
-    'icon',
-    'im',
-    'imap',
-    'info',
-    'iotdisco',
-    'ipn',
-    'ipp',
-    'ipps',
-    'irc',
-    'irc6',
-    'ircs',
-    'iris',
-    'iris.beep',
-    'iris.lwz',
-    'iris.xpc',
-    'iris.xpcs',
-    'isostore',
-    'itms',
-    'jabber',
-    'jar',
-    'jms',
-    'keyparc',
-    'lastfm',
-    'ldap',
-    'ldaps',
-    'lvlt',
-    'magnet',
-    'mailserver',
-    'mailto',
-    'maps',
-    'market',
-    'message',
-    'microsoft.windows.camera',
-    'microsoft.windows.camera.multipicker',
-    'microsoft.windows.camera.picker',
-    'mid',
-    'mms',
-    'modem',
-    'mongodb',
-    'moz',
-    'ms-access',
-    'ms-browser-extension',
-    'ms-calculator',
-    'ms-drive-to',
-    'ms-enrollment',
-    'ms-excel',
-    'ms-eyecontrolspeech',
-    'ms-gamebarservices',
-    'ms-gamingoverlay',
-    'ms-getoffice',
-    'ms-help',
-    'ms-infopath',
-    'ms-inputapp',
-    'ms-lockscreencomponent-config',
-    'ms-media-stream-id',
-    'ms-mixedrealitycapture',
-    'ms-officeapp',
-    'ms-people',
-    'ms-project',
-    'ms-powerpoint',
-    'ms-publisher',
-    'ms-restoretabcompanion',
-    'ms-screenclip',
-    'ms-screensketch',
-    'ms-search',
-    'ms-search-repair',
-    'ms-secondary-screen-controller',
-    'ms-secondary-screen-setup',
-    'ms-settings',
-    'ms-settings-airplanemode',
-    'ms-settings-bluetooth',
-    'ms-settings-camera',
-    'ms-settings-cellular',
-    'ms-settings-cloudstorage',
-    'ms-settings-connectabledevices',
-    'ms-settings-displays-topology',
-    'ms-settings-emailandaccounts',
-    'ms-settings-language',
-    'ms-settings-location',
-    'ms-settings-lock',
-    'ms-settings-nfctransactions',
-    'ms-settings-notifications',
-    'ms-settings-power',
-    'ms-settings-privacy',
-    'ms-settings-proximity',
-    'ms-settings-screenrotation',
-    'ms-settings-wifi',
-    'ms-settings-workplace',
-    'ms-spd',
-    'ms-sttoverlay',
-    'ms-transit-to',
-    'ms-useractivityset',
-    'ms-virtualtouchpad',
-    'ms-visio',
-    'ms-walk-to',
-    'ms-whiteboard',
-    'ms-whiteboard-cmd',
-    'ms-word',
-    'msnim',
-    'msrp',
-    'msrps',
-    'mtqp',
-    'mumble',
-    'mupdate',
-    'mvn',
-    'news',
-    'nfs',
-    'ni',
-    'nih',
-    'nntp',
-    'notes',
-    'ocf',
-    'oid',
-    'onenote',
-    'onenote-cmd',
-    'opaquelocktoken',
-    'openpgp4fpr',
-    'pack',
-    'palm',
-    'paparazzi',
-    'pkcs11',
-    'platform',
-    'pop',
-    'pres',
-    'prospero',
-    'proxy',
-    'pwid',
-    'psyc',
-    'qb',
-    'query',
-    'redis',
-    'rediss',
-    'reload',
-    'res',
-    'resource',
-    'rmi',
-    'rsync',
-    'rtmfp',
-    'rtmp',
-    'rtsp',
-    'rtsps',
-    'rtspu',
-    'secondlife',
-    'service',
-    'session',
-    'sftp',
-    'sgn',
-    'shttp',
-    'sieve',
-    'simpleledger',
-    'sip',
-    'sips',
-    'skype',
-    'smb',
-    'sms',
-    'smtp',
-    'snews',
-    'snmp',
-    'soap.beep',
-    'soap.beeps',
-    'soldat',
-    'spiffe',
-    'spotify',
-    'ssh',
-    'steam',
-    'stun',
-    'stuns',
-    'submit',
-    'svn',
-    'tag',
-    'teamspeak',
-    'tel',
-    'teliaeid',
-    'telnet',
-    'tftp',
-    'things',
-    'thismessage',
-    'tip',
-    'tn3270',
-    'tool',
-    'turn',
-    'turns',
-    'tv',
-    'udp',
-    'unreal',
-    'urn',
-    'ut2004',
-    'v-event',
-    'vemmi',
-    'ventrilo',
-    'videotex',
-    'vnc',
-    'view-source',
-    'wais',
-    'webcal',
-    'wpid',
-    'ws',
-    'wss',
-    'wtai',
-    'wyciwyg',
-    'xcon',
-    'xcon-userid',
-    'xfire',
-    'xmlrpc.beep',
-    'xmlrpc.beeps',
-    'xmpp',
-    'xri',
-    'ymsgr',
-    'z39.50',
-    'z39.50r',
-    'z39.50s',
+    "aaa",
+    "aaas",
+    "about",
+    "acap",
+    "acct",
+    "acr",
+    "adiumxtra",
+    "afp",
+    "afs",
+    "aim",
+    "appdata",
+    "apt",
+    "attachment",
+    "aw",
+    "barion",
+    "beshare",
+    "bitcoin",
+    "bitcoincash",
+    "blob",
+    "bolo",
+    "browserext",
+    "calculator",
+    "callto",
+    "cap",
+    "chrome",
+    "chrome-extension",
+    "cid",
+    "coap",
+    "coap+tcp",
+    "coap+ws",
+    "coaps",
+    "coaps+tcp",
+    "coaps+ws",
+    "com-eventbrite-attendee",
+    "content",
+    "conti",
+    "crid",
+    "cvs",
+    "data",
+    "dav",
+    "diaspora",
+    "dict",
+    "did",
+    "dis",
+    "dlna-playcontainer",
+    "dlna-playsingle",
+    "dns",
+    "dntp",
+    "dtn",
+    "dvb",
+    "ed2k",
+    "elsi",
+    "example",
+    "facetime",
+    "fax",
+    "feed",
+    "feedready",
+    "file",
+    "filesystem",
+    "finger",
+    "fish",
+    "ftp",
+    "geo",
+    "gg",
+    "git",
+    "gizmoproject",
+    "go",
+    "gopher",
+    "graph",
+    "gtalk",
+    "h323",
+    "ham",
+    "hcap",
+    "hcp",
+    "http",
+    "https",
+    "hxxp",
+    "hxxps",
+    "hydrazone",
+    "iax",
+    "icap",
+    "icon",
+    "im",
+    "imap",
+    "info",
+    "iotdisco",
+    "ipn",
+    "ipp",
+    "ipps",
+    "irc",
+    "irc6",
+    "ircs",
+    "iris",
+    "iris.beep",
+    "iris.lwz",
+    "iris.xpc",
+    "iris.xpcs",
+    "isostore",
+    "itms",
+    "jabber",
+    "jar",
+    "jms",
+    "keyparc",
+    "lastfm",
+    "ldap",
+    "ldaps",
+    "lvlt",
+    "magnet",
+    "mailserver",
+    "mailto",
+    "maps",
+    "market",
+    "message",
+    "microsoft.windows.camera",
+    "microsoft.windows.camera.multipicker",
+    "microsoft.windows.camera.picker",
+    "mid",
+    "mms",
+    "modem",
+    "mongodb",
+    "moz",
+    "ms-access",
+    "ms-browser-extension",
+    "ms-calculator",
+    "ms-drive-to",
+    "ms-enrollment",
+    "ms-excel",
+    "ms-eyecontrolspeech",
+    "ms-gamebarservices",
+    "ms-gamingoverlay",
+    "ms-getoffice",
+    "ms-help",
+    "ms-infopath",
+    "ms-inputapp",
+    "ms-lockscreencomponent-config",
+    "ms-media-stream-id",
+    "ms-mixedrealitycapture",
+    "ms-officeapp",
+    "ms-people",
+    "ms-project",
+    "ms-powerpoint",
+    "ms-publisher",
+    "ms-restoretabcompanion",
+    "ms-screenclip",
+    "ms-screensketch",
+    "ms-search",
+    "ms-search-repair",
+    "ms-secondary-screen-controller",
+    "ms-secondary-screen-setup",
+    "ms-settings",
+    "ms-settings-airplanemode",
+    "ms-settings-bluetooth",
+    "ms-settings-camera",
+    "ms-settings-cellular",
+    "ms-settings-cloudstorage",
+    "ms-settings-connectabledevices",
+    "ms-settings-displays-topology",
+    "ms-settings-emailandaccounts",
+    "ms-settings-language",
+    "ms-settings-location",
+    "ms-settings-lock",
+    "ms-settings-nfctransactions",
+    "ms-settings-notifications",
+    "ms-settings-power",
+    "ms-settings-privacy",
+    "ms-settings-proximity",
+    "ms-settings-screenrotation",
+    "ms-settings-wifi",
+    "ms-settings-workplace",
+    "ms-spd",
+    "ms-sttoverlay",
+    "ms-transit-to",
+    "ms-useractivityset",
+    "ms-virtualtouchpad",
+    "ms-visio",
+    "ms-walk-to",
+    "ms-whiteboard",
+    "ms-whiteboard-cmd",
+    "ms-word",
+    "msnim",
+    "msrp",
+    "msrps",
+    "mtqp",
+    "mumble",
+    "mupdate",
+    "mvn",
+    "news",
+    "nfs",
+    "ni",
+    "nih",
+    "nntp",
+    "notes",
+    "ocf",
+    "oid",
+    "onenote",
+    "onenote-cmd",
+    "opaquelocktoken",
+    "openpgp4fpr",
+    "pack",
+    "palm",
+    "paparazzi",
+    "pkcs11",
+    "platform",
+    "pop",
+    "pres",
+    "prospero",
+    "proxy",
+    "pwid",
+    "psyc",
+    "qb",
+    "query",
+    "redis",
+    "rediss",
+    "reload",
+    "res",
+    "resource",
+    "rmi",
+    "rsync",
+    "rtmfp",
+    "rtmp",
+    "rtsp",
+    "rtsps",
+    "rtspu",
+    "secondlife",
+    "service",
+    "session",
+    "sftp",
+    "sgn",
+    "shttp",
+    "sieve",
+    "simpleledger",
+    "sip",
+    "sips",
+    "skype",
+    "smb",
+    "sms",
+    "smtp",
+    "snews",
+    "snmp",
+    "soap.beep",
+    "soap.beeps",
+    "soldat",
+    "spiffe",
+    "spotify",
+    "ssh",
+    "steam",
+    "stun",
+    "stuns",
+    "submit",
+    "svn",
+    "tag",
+    "teamspeak",
+    "tel",
+    "teliaeid",
+    "telnet",
+    "tftp",
+    "things",
+    "thismessage",
+    "tip",
+    "tn3270",
+    "tool",
+    "turn",
+    "turns",
+    "tv",
+    "udp",
+    "unreal",
+    "urn",
+    "ut2004",
+    "v-event",
+    "vemmi",
+    "ventrilo",
+    "videotex",
+    "vnc",
+    "view-source",
+    "wais",
+    "webcal",
+    "wpid",
+    "ws",
+    "wss",
+    "wtai",
+    "wyciwyg",
+    "xcon",
+    "xcon-userid",
+    "xfire",
+    "xmlrpc.beep",
+    "xmlrpc.beeps",
+    "xmpp",
+    "xri",
+    "ymsgr",
+    "z39.50",
+    "z39.50r",
+    "z39.50s",
 ]
diff --git a/ioc_finder/ioc_finder.py b/ioc_finder/ioc_finder.py
index dd1db07..0c38f2a 100644
--- a/ioc_finder/ioc_finder.py
+++ b/ioc_finder/ioc_finder.py
@@ -62,7 +62,7 @@ def _listify(indicator_list: ParseResults) -> List:
 def _remove_items(items: List[str], text: str) -> str:
     """Remove each item from the text."""
     for item in items:
-        text = text.replace(item, ' ')
+        text = text.replace(item, " ")
     return text
 
 
@@ -91,11 +91,11 @@ def parse_urls(text: str, *, parse_urls_without_scheme: bool = True) -> List:
         url = url.rstrip('"').rstrip("'")
 
         # remove a final ')' if there is a '(' in the url
-        if url.endswith(')') and '(' not in url:
-            url = url.rstrip(')')
+        if url.endswith(")") and "(" not in url:
+            url = url.rstrip(")")
 
         # remove `'/>` and `"/>` from the end of a URL (this character string occurs at the end of an HMTL tag with )
-        url = string_remove_from_end(url, '\'/>')
+        url = string_remove_from_end(url, "'/>")
         url = string_remove_from_end(url, '"/>')
 
         clean_urls.append(url)
@@ -109,7 +109,7 @@ def _remove_url_domain_name(urls: List, text) -> str:
     """Remove the domain name of each url from the text."""
     for url in urls:
         parsed_url = ioc_grammars.scheme_less_url.parseString(url)
-        text = text.replace(parsed_url.url_authority, ' ')
+        text = text.replace(parsed_url.url_authority, " ")
     return text
 
 
@@ -122,7 +122,7 @@ def _remove_url_paths(urls: List, text: str) -> str:
         is_cidr_range = parse_ipv4_cidrs(str(url))
         # if the 'url' has a URL path and is not a cidr range, remove the url_path
         if not is_cidr_range and len(url_path) > 1:
-            text = text.replace(url_path, ' ')
+            text = text.replace(url_path, " ")
     return text
 
 
@@ -249,9 +249,9 @@ def parse_registry_key_paths(text):
         # remove it so that content after a registry key path is not also pulled in...
         # this is a limitation of the grammar:
         # it will not parse a registry key path with a space in the final section (the section after the final '\')
-        if ' ' in registry_key_path.split('\\')[-1]:
-            last_section = registry_key_path.split('\\')[-1]
-            registry_key_path = registry_key_path.replace(last_section, last_section.split(' ')[0])
+        if " " in registry_key_path.split("\\")[-1]:
+            last_section = registry_key_path.split("\\")[-1]
+            registry_key_path = registry_key_path.replace(last_section, last_section.split(" ")[0])
             registry_key_paths.append(registry_key_path)
         else:
             registry_key_paths.append(registry_key_path)
@@ -292,7 +292,7 @@ def parse_xmpp_addresses(text: str) -> List:
 def _remove_xmpp_local_part(xmpp_addresses: List, text: str) -> str:
     """Remove the local part of each xmpp_address from the text."""
     for address in xmpp_addresses:
-        text = text.replace(address.split('@')[0] + '@', ' ')
+        text = text.replace(address.split("@")[0] + "@", " ")
 
     return text
 
@@ -370,32 +370,32 @@ def parse_tlp_labels(text):
 
 
 @click.command()
-@click.argument('text', required=False)
-@click.option('--no_url_domain_parsing', is_flag=True, help='Using this flag will not parse domain names from URLs')
+@click.argument("text", required=False)
+@click.option("--no_url_domain_parsing", is_flag=True, help="Using this flag will not parse domain names from URLs")
 @click.option(
-    '--no_parse_from_url_path', is_flag=True, help='Using this flag will not parse observables from URL paths'
+    "--no_parse_from_url_path", is_flag=True, help="Using this flag will not parse observables from URL paths"
 )
 @click.option(
-    '--no_email_addr_domain_parsing',
+    "--no_email_addr_domain_parsing",
     is_flag=True,
-    help='Using this flag will not parse domain names from email addresses',
+    help="Using this flag will not parse domain names from email addresses",
 )
 @click.option(
-    '--no_cidr_address_parsing', is_flag=True, help='Using this flag will not parse IP addresses from CIDR ranges'
+    "--no_cidr_address_parsing", is_flag=True, help="Using this flag will not parse IP addresses from CIDR ranges"
 )
 @click.option(
-    '--no_xmpp_addr_domain_parsing',
+    "--no_xmpp_addr_domain_parsing",
     is_flag=True,
-    help='Using this flag will not parse domain names from XMPP addresses',
+    help="Using this flag will not parse domain names from XMPP addresses",
 )  # pylint: disable=R0913
 @click.option(
-    '--parse_urls_without_scheme',
+    "--parse_urls_without_scheme",
     is_flag=True,
-    help='Using this flag will parse URLs with and without a scheme (default is True)',
+    help="Using this flag will parse URLs with and without a scheme (default is True)",
     default=True,
 )
-@click.option('--no_import_hashes', is_flag=True, help='Using this flag will not parse import hashes')
-@click.option('--no_authentihashes', is_flag=True, help='Using this flag will not parse authentihashes')
+@click.option("--no_import_hashes", is_flag=True, help="Using this flag will not parse import hashes")
+@click.option("--no_authentihashes", is_flag=True, help="Using this flag will not parse authentihashes")
 def cli_find_iocs(
     text,
     no_url_domain_parsing,
@@ -408,11 +408,11 @@ def cli_find_iocs(
     no_authentihashes,
 ):
     """CLI interface for parsing observables."""
-    stdin_text = click.get_text_stream('stdin')
+    stdin_text = click.get_text_stream("stdin")
 
     # if there is stdin, use it
     if not text and stdin_text:
-        text = '\n'.join(stdin_text)
+        text = "\n".join(stdin_text)
         # text = '\n'.join([line for line in stdin_text])
 
     iocs = find_iocs(
@@ -452,134 +452,134 @@ def find_iocs(  # noqa: CCR001 pylint: disable=R0912,R0915
 
     # urls
     if "urls" in included_ioc_types:
-        iocs['urls'] = parse_urls(text, parse_urls_without_scheme=parse_urls_without_scheme)
+        iocs["urls"] = parse_urls(text, parse_urls_without_scheme=parse_urls_without_scheme)
         if not parse_domain_from_url and not parse_from_url_path:
-            text = _remove_items(iocs['urls'], text)
+            text = _remove_items(iocs["urls"], text)
         elif not parse_domain_from_url:
-            text = _percent_decode_url(iocs['urls'], text)
-            text = _remove_url_domain_name(iocs['urls'], text)
+            text = _percent_decode_url(iocs["urls"], text)
+            text = _remove_url_domain_name(iocs["urls"], text)
         elif not parse_from_url_path:
-            text = _percent_decode_url(iocs['urls'], text)
-            text = _remove_url_paths(iocs['urls'], text)
+            text = _percent_decode_url(iocs["urls"], text)
+            text = _remove_url_paths(iocs["urls"], text)
         else:
-            text = _percent_decode_url(iocs['urls'], text)
+            text = _percent_decode_url(iocs["urls"], text)
 
     # xmpp addresses
     if "xmpp_addresses" in included_ioc_types:
-        iocs['xmpp_addresses'] = parse_xmpp_addresses(text)
+        iocs["xmpp_addresses"] = parse_xmpp_addresses(text)
 
-    if 'domains' in included_ioc_types and not parse_domain_name_from_xmpp_address:
-        text = _remove_items(iocs.get('xmpp_addresses', parse_xmpp_addresses(text)), text)
+    if "domains" in included_ioc_types and not parse_domain_name_from_xmpp_address:
+        text = _remove_items(iocs.get("xmpp_addresses", parse_xmpp_addresses(text)), text)
     # even if we want to parse domain names from the xmpp_address,
     # we don't want them also being caught as email addresses so we'll remove everything before the `@`
-    elif 'email_addresses_complete' in included_ioc_types or 'email_addresses' in included_ioc_types:
-        text = _remove_xmpp_local_part(iocs.get('xmpp_addresses', parse_xmpp_addresses(text)), text)
+    elif "email_addresses_complete" in included_ioc_types or "email_addresses" in included_ioc_types:
+        text = _remove_xmpp_local_part(iocs.get("xmpp_addresses", parse_xmpp_addresses(text)), text)
 
     # complete email addresses
     if "email_addresses_complete" in included_ioc_types:
-        iocs['email_addresses_complete'] = parse_complete_email_addresses(text)
+        iocs["email_addresses_complete"] = parse_complete_email_addresses(text)
     if "email_addresses" in included_ioc_types:
-        iocs['email_addresses'] = parse_email_addresses(text)
+        iocs["email_addresses"] = parse_email_addresses(text)
 
     if not parse_domain_from_email_address:
-        text = _remove_items(iocs.get('email_addresses_complete', parse_complete_email_addresses(text)), text)
-        text = _remove_items(iocs.get('email_addresses', parse_email_addresses(text)), text)
+        text = _remove_items(iocs.get("email_addresses_complete", parse_complete_email_addresses(text)), text)
+        text = _remove_items(iocs.get("email_addresses", parse_email_addresses(text)), text)
 
-    if 'ipv6s' in included_ioc_types:
+    if "ipv6s" in included_ioc_types:
         # after parsing the email addresses, we need to remove the
         # '[IPv6:' bit from any of the email addresses so that ipv6 addresses are not extraneously parsed
-        text = _remove_items(['[IPv6:'], text)
+        text = _remove_items(["[IPv6:"], text)
 
     # cidr ranges
     if "ipv4_cidrs" in included_ioc_types:
-        iocs['ipv4_cidrs'] = parse_ipv4_cidrs(text)
+        iocs["ipv4_cidrs"] = parse_ipv4_cidrs(text)
 
     # remove URLs that are also ipv4_cidrs (see https://github.com/fhightower/ioc-finder/issues/91)
-    url_parsing_requires_cidr_removal = 'urls' in included_ioc_types and parse_urls_without_scheme
-    ip_address_parsing_requires_cidr_removal = 'ipv4s' in included_ioc_types and not parse_address_from_cidr
+    url_parsing_requires_cidr_removal = "urls" in included_ioc_types and parse_urls_without_scheme
+    ip_address_parsing_requires_cidr_removal = "ipv4s" in included_ioc_types and not parse_address_from_cidr
     if url_parsing_requires_cidr_removal or ip_address_parsing_requires_cidr_removal:
-        cidr_ranges = iocs.get('ipv4_cidrs', parse_ipv4_cidrs(text))
+        cidr_ranges = iocs.get("ipv4_cidrs", parse_ipv4_cidrs(text))
         if url_parsing_requires_cidr_removal:
             for cidr in cidr_ranges:
-                if cidr in iocs['urls']:
-                    iocs['urls'].remove(cidr)
+                if cidr in iocs["urls"]:
+                    iocs["urls"].remove(cidr)
         if ip_address_parsing_requires_cidr_removal:
             text = _remove_items(cidr_ranges, text)
 
     # file hashes
     if "imphashes" in included_ioc_types:
         if parse_imphashes:
-            iocs['imphashes'] = parse_imphashes_(text)
-    if 'md5s' in included_ioc_types:
+            iocs["imphashes"] = parse_imphashes_(text)
+    if "md5s" in included_ioc_types:
         # remove the imphashes so they are not also parsed as md5s
-        text = _remove_items(iocs.get('imphashes', parse_imphashes_(text)), text)
+        text = _remove_items(iocs.get("imphashes", parse_imphashes_(text)), text)
 
     if "authentihashes" in included_ioc_types:
         if parse_authentihashes:
-            iocs['authentihashes'] = parse_authentihashes_(text)
-    if 'sha256s' in included_ioc_types:
+            iocs["authentihashes"] = parse_authentihashes_(text)
+    if "sha256s" in included_ioc_types:
         # remove the authentihashes so they are not also parsed as sha256s
-        text = _remove_items(iocs.get('authentihashes', parse_authentihashes_(text)), text)
+        text = _remove_items(iocs.get("authentihashes", parse_authentihashes_(text)), text)
 
     # domains
     if "domains" in included_ioc_types:
-        iocs['domains'] = parse_domain_names(text)
+        iocs["domains"] = parse_domain_names(text)
 
     # ip addresses
     if "ipv4s" in included_ioc_types:
-        iocs['ipv4s'] = parse_ipv4_addresses(text)
+        iocs["ipv4s"] = parse_ipv4_addresses(text)
     if "ipv6s" in included_ioc_types:
-        iocs['ipv6s'] = parse_ipv6_addresses(text)
+        iocs["ipv6s"] = parse_ipv6_addresses(text)
 
     # file hashes
     if "sha512s" in included_ioc_types:
-        iocs['sha512s'] = parse_sha512s(text)
+        iocs["sha512s"] = parse_sha512s(text)
     if "sha256s" in included_ioc_types:
-        iocs['sha256s'] = parse_sha256s(text)
+        iocs["sha256s"] = parse_sha256s(text)
     if "sha1s" in included_ioc_types:
-        iocs['sha1s'] = parse_sha1s(text)
+        iocs["sha1s"] = parse_sha1s(text)
     if "md5s" in included_ioc_types:
-        iocs['md5s'] = parse_md5s(text)
+        iocs["md5s"] = parse_md5s(text)
     if "ssdeeps" in included_ioc_types:
-        iocs['ssdeeps'] = parse_ssdeeps(text)
+        iocs["ssdeeps"] = parse_ssdeeps(text)
 
     # misc
     if "asns" in included_ioc_types:
-        iocs['asns'] = parse_asns(text)
+        iocs["asns"] = parse_asns(text)
     if "cves" in included_ioc_types:
-        iocs['cves'] = parse_cves(original_text)
+        iocs["cves"] = parse_cves(original_text)
     if "registry_key_paths" in included_ioc_types:
-        iocs['registry_key_paths'] = parse_registry_key_paths(text)
+        iocs["registry_key_paths"] = parse_registry_key_paths(text)
     if "google_adsense_publisher_ids" in included_ioc_types:
-        iocs['google_adsense_publisher_ids'] = parse_google_adsense_ids(text)
+        iocs["google_adsense_publisher_ids"] = parse_google_adsense_ids(text)
     if "google_analytics_tracker_ids" in included_ioc_types:
-        iocs['google_analytics_tracker_ids'] = parse_google_analytics_ids(text)
+        iocs["google_analytics_tracker_ids"] = parse_google_analytics_ids(text)
     if "bitcoin_addresses" in included_ioc_types:
-        iocs['bitcoin_addresses'] = parse_bitcoin_addresses(text)
+        iocs["bitcoin_addresses"] = parse_bitcoin_addresses(text)
     if "monero_addresses" in included_ioc_types:
-        iocs['monero_addresses'] = parse_monero_addresses(text)
+        iocs["monero_addresses"] = parse_monero_addresses(text)
     if "mac_addresses" in included_ioc_types:
-        iocs['mac_addresses'] = parse_mac_addresses(text)
+        iocs["mac_addresses"] = parse_mac_addresses(text)
     if "user_agents" in included_ioc_types:
-        iocs['user_agents'] = parse_user_agents(text)
+        iocs["user_agents"] = parse_user_agents(text)
     if "tlp_labels" in included_ioc_types:
-        iocs['tlp_labels'] = parse_tlp_labels(original_text)
+        iocs["tlp_labels"] = parse_tlp_labels(original_text)
 
     if "attack_mitigations" in included_ioc_types:
-        iocs['attack_mitigations'] = {  # type: ignore
+        iocs["attack_mitigations"] = {  # type: ignore
             "enterprise": parse_enterprise_attack_mitigations(original_text),
             "mobile": parse_mobile_attack_mitigations(original_text),
         }
 
     if "attack_tactics" in included_ioc_types:
-        iocs['attack_tactics'] = {  # type: ignore
+        iocs["attack_tactics"] = {  # type: ignore
             "pre_attack": parse_pre_attack_tactics(original_text),
             "enterprise": parse_enterprise_attack_tactics(original_text),
             "mobile": parse_mobile_attack_tactics(original_text),
         }
 
     if "attack_techniques" in included_ioc_types:
-        iocs['attack_techniques'] = {  # type: ignore
+        iocs["attack_techniques"] = {  # type: ignore
             "pre_attack": parse_pre_attack_techniques(original_text),
             "enterprise": parse_enterprise_attack_techniques(original_text),
             "mobile": parse_mobile_attack_techniques(original_text),
@@ -589,9 +589,9 @@ def find_iocs(  # noqa: CCR001 pylint: disable=R0912,R0915
         # if there are still url paths in the text, remove them so they don't get parsed as file names
         if parse_from_url_path:
             text = _remove_url_paths(
-                iocs.get('urls', parse_urls(text, parse_urls_without_scheme=parse_urls_without_scheme)), text
+                iocs.get("urls", parse_urls(text, parse_urls_without_scheme=parse_urls_without_scheme)), text
             )
 
-        iocs['file_paths'] = parse_file_paths(text)
+        iocs["file_paths"] = parse_file_paths(text)
 
     return iocs
diff --git a/ioc_finder/ioc_grammars.py b/ioc_finder/ioc_grammars.py
index 77e8b8b..f6327f8 100644
--- a/ioc_finder/ioc_grammars.py
+++ b/ioc_finder/ioc_grammars.py
@@ -43,12 +43,12 @@
 alphanum_word_end = WordEnd(wordChars=alphanums)
 
 # the label definition ignores the fact that labels should not end in an hyphen
-label = Word(initChars=alphanums + '_', bodyChars=alphanums + '-_', max=63)
+label = Word(initChars=alphanums + "_", bodyChars=alphanums + "-_", max=63)
 domain_tld = Or(tlds)
 domain_name = (
     alphanum_word_start
     + Combine(
-        Combine(OneOrMore(label + ('.' + FollowedBy(Word(alphanums + '-_')))))('domain_labels') + domain_tld('tld')
+        Combine(OneOrMore(label + ("." + FollowedBy(Word(alphanums + "-_")))))("domain_labels") + domain_tld("tld")
     )
     + alphanum_word_end
 ).setParseAction(downcaseTokens)
@@ -63,108 +63,108 @@
 # and I do not want to match anything that start with a '.'
 ipv4_address = (
     alphanum_word_start
-    + WordStart('.' + nums)
-    + Combine((ipv4_section + '.') * 3 + ipv4_section)
-    + NotAny(Regex(r'\.\S'))
+    + WordStart("." + nums)
+    + Combine((ipv4_section + ".") * 3 + ipv4_section)
+    + NotAny(Regex(r"\.\S"))
     + alphanum_word_end
 )
 
-ipv6_word_start = WordStart(wordChars=alphanums + ':')
-ipv6_word_end = WordEnd(wordChars=alphanums + ':')
+ipv6_word_start = WordStart(wordChars=alphanums + ":")
+ipv6_word_end = WordEnd(wordChars=alphanums + ":")
 
 hexadectet = Word(hexnums, min=1, max=4)
 ipv6_address_full = ipv6_word_start + Combine((hexadectet + ":") * 7 + hexadectet)
 
 # the condition on the end of this grammar is designed to make sure that any shortened ipv6 addresses have '::' in them
-ipv6_address_shortened = Combine(OneOrMore(Or([hexadectet + Word(':'), Word(':')])) + hexadectet).addCondition(
-    lambda tokens: tokens[0].count('::') > 0
+ipv6_address_shortened = Combine(OneOrMore(Or([hexadectet + Word(":"), Word(":")])) + hexadectet).addCondition(
+    lambda tokens: tokens[0].count("::") > 0
 )
 
 ipv6_address = (
-    Or([ipv6_address_full, ipv6_address_shortened]).addCondition(lambda tokens: tokens[0].count(':') > 1)
+    Or([ipv6_address_full, ipv6_address_shortened]).addCondition(lambda tokens: tokens[0].count(":") > 1)
     + ipv6_word_end
 )
 
-complete_email_comment = Combine('(' + Word(alphanums) + ')')
+complete_email_comment = Combine("(" + Word(alphanums) + ")")
 # the complete_email_local_part grammar ignores the fact that characters like <<<(),:;<>@[\] >>>
 # are possible in a quoted complete_email_local_part
 # (and the double-quotes and backslash should be preceded by a backslash)
 complete_email_local_part = Combine(
-    Optional(complete_email_comment)('email_address_start_comment')
+    Optional(complete_email_comment)("email_address_start_comment")
     + OneOrMore(Or([Word(alphanums + "!#$%&'*+-/=?^_`{|}~." + '"'), "\\@"]))
-    + Optional(complete_email_comment)('email_address_end_comment')
+    + Optional(complete_email_comment)("email_address_end_comment")
 )
 complete_email_address = Combine(
-    complete_email_local_part('email_address_local_part')
+    complete_email_local_part("email_address_local_part")
     + "@"
-    + Or([domain_name, '[' + ipv4_address + ']', '[IPv6:' + ipv6_address + ']'])('email_address_domain')
+    + Or([domain_name, "[" + ipv4_address + "]", "[IPv6:" + ipv6_address + "]"])("email_address_domain")
 )
 
 email_local_part = Word(alphanums, bodyChars=alphanums + "+-_.").setParseAction(downcaseTokens)
 email_address = alphanum_word_start + Combine(
-    email_local_part('email_address_local_part')
+    email_local_part("email_address_local_part")
     + "@"
-    + Or([domain_name, '[' + ipv4_address + ']', '[IPv6:' + ipv6_address + ']'])('email_address_domain')
+    + Or([domain_name, "[" + ipv4_address + "]", "[IPv6:" + ipv6_address + "]"])("email_address_domain")
 )
 
 url_scheme = Or(schemes)
-port = Combine(':' + Word(nums))
-url_authority = Combine(Or([complete_email_address, domain_name, ipv4_address, ipv6_address]) + Optional(port)('port'))
+port = Combine(":" + Word(nums))
+url_authority = Combine(Or([complete_email_address, domain_name, ipv4_address, ipv6_address]) + Optional(port)("port"))
 # although the ":" character is not valid in url paths,
 # some urls are written with the ":" unencoded so we include it below
-url_path_word = Word(alphanums + '-._~!$&\'()*+,;:=%')
-url_path = Combine(OneOrMore(Or([url_path_word, '/'])))
-url_query = Word(printables, excludeChars='#"\']')
-url_fragment = Word(printables, excludeChars='?"\']')
+url_path_word = Word(alphanums + "-._~!$&'()*+,;:=%")
+url_path = Combine(OneOrMore(Or([url_path_word, "/"])))
+url_query = Word(printables, excludeChars="#\"']")
+url_fragment = Word(printables, excludeChars="?\"']")
 url = alphanum_word_start + Combine(
-    url_scheme('url_scheme')
-    + '://'
-    + url_authority('url_authority')
-    + Optional(Combine('/' + Optional(url_path)))('url_path')
-    + (Optional(Combine('?' + url_query)('url_query')) & Optional(Combine('#' + url_fragment)('url_fragment')))
+    url_scheme("url_scheme")
+    + "://"
+    + url_authority("url_authority")
+    + Optional(Combine("/" + Optional(url_path)))("url_path")
+    + (Optional(Combine("?" + url_query)("url_query")) & Optional(Combine("#" + url_fragment)("url_fragment")))
 )
 scheme_less_url = alphanum_word_start + Combine(
     Or(
         [
             Combine(
-                url_scheme('url_scheme')
-                + '://'
-                + url_authority('url_authority')
-                + Optional(Combine('/' + Optional(url_path)))('url_path')
+                url_scheme("url_scheme")
+                + "://"
+                + url_authority("url_authority")
+                + Optional(Combine("/" + Optional(url_path)))("url_path")
             ),
-            Combine(url_authority('url_authority') + Combine('/' + Optional(url_path))('url_path')),
+            Combine(url_authority("url_authority") + Combine("/" + Optional(url_path))("url_path")),
         ]
     )
-    + (Optional(Combine('?' + url_query)('url_query')) & Optional(Combine('#' + url_fragment)('url_fragment')))
+    + (Optional(Combine("?" + url_query)("url_query")) & Optional(Combine("#" + url_fragment)("url_fragment")))
 )
 
 # this allows for matching file hashes preceeded with an 'x' or 'X'...
 # see https://github.com/fhightower/ioc-finder/issues/41
-file_hash_word_start = WordStart(wordChars=alphanums.replace('x', '').replace('X', ''))
+file_hash_word_start = WordStart(wordChars=alphanums.replace("x", "").replace("X", ""))
 md5 = file_hash_word_start + Word(hexnums, exact=32).setParseAction(downcaseTokens) + alphanum_word_end
 imphash = Combine(
-    Or(['imphash', 'import hash']) + Optional(Word(printables, excludeChars=alphanums)) + md5('hash'),
-    joinString=' ',
+    Or(["imphash", "import hash"]) + Optional(Word(printables, excludeChars=alphanums)) + md5("hash"),
+    joinString=" ",
     adjacent=False,
 )
 sha1 = file_hash_word_start + Word(hexnums, exact=40).setParseAction(downcaseTokens) + alphanum_word_end
 sha256 = file_hash_word_start + Word(hexnums, exact=64).setParseAction(downcaseTokens) + alphanum_word_end
 authentihash = Combine(
-    Or(['authentihash']) + Optional(Word(printables, excludeChars=alphanums)) + sha256('hash'),
-    joinString=' ',
+    Or(["authentihash"]) + Optional(Word(printables, excludeChars=alphanums)) + sha256("hash"),
+    joinString=" ",
     adjacent=False,
 )
 sha512 = file_hash_word_start + Word(hexnums, exact=128).setParseAction(downcaseTokens) + alphanum_word_end
 
-year = Word('12') + Word(nums, exact=3)
+year = Word("12") + Word(nums, exact=3)
 cve = (
     alphanum_word_start
     + Combine(
-        Or(['cve', 'CVE']).setParseAction(replaceWith('CVE'))
-        + Word('- ').setParseAction(replaceWith('-'))
-        + year('year')
-        + Word('-')
-        + Word(nums, min=4)('cve_id')
+        Or(["cve", "CVE"]).setParseAction(replaceWith("CVE"))
+        + Word("- ").setParseAction(replaceWith("-"))
+        + year("year")
+        + Word("-")
+        + Word(nums, min=4)("cve_id")
     )
     + alphanum_word_end
 )
@@ -174,35 +174,35 @@
     + Combine(
         Or(
             [
-                Literal('AS') + Optional(Word('N ')).setParseAction(replaceWith('N')),
-                Literal('as').setParseAction(replaceWith('ASN')),
-                (Literal('asn') + Optional(' ')).setParseAction(replaceWith('ASN')),
+                Literal("AS") + Optional(Word("N ")).setParseAction(replaceWith("N")),
+                Literal("as").setParseAction(replaceWith("ASN")),
+                (Literal("asn") + Optional(" ")).setParseAction(replaceWith("ASN")),
             ]
         )
-        + Word(nums)('as_number')
+        + Word(nums)("as_number")
     )
     + alphanum_word_end
 )
 
 ipv4_cidr = (
     alphanum_word_start
-    + Combine(ipv4_address('cidr_address') + '/' + Word(nums, max=2)('cidr_bit_range'))
+    + Combine(ipv4_address("cidr_address") + "/" + Word(nums, max=2)("cidr_bit_range"))
     + alphanum_word_end
 )
 
 root_key_list = [
-    'HKEY_LOCAL_MACHINE',
-    'HKLM',
-    'HKEY_CURRENT_CONFIG',
-    'HKCC',
-    'HKEY_CLASSES_ROOT',
-    'HKCR',
-    'HKEY_CURRENT_USER',
-    'HKCU',
-    'HKEY_USERS',
-    'HKU',
-    'HKEY_PERFORMANCE_DATA',
-    'HKEY_DYN_DATA',
+    "HKEY_LOCAL_MACHINE",
+    "HKLM",
+    "HKEY_CURRENT_CONFIG",
+    "HKCC",
+    "HKEY_CLASSES_ROOT",
+    "HKCR",
+    "HKEY_CURRENT_USER",
+    "HKCU",
+    "HKEY_USERS",
+    "HKU",
+    "HKEY_PERFORMANCE_DATA",
+    "HKEY_DYN_DATA",
 ]
 
 root_key = Or(root_key_list)
@@ -210,13 +210,13 @@
 
 def hasMultipleConsecutiveSpaces(string):
     """Return True if the given string has multiple, consecutive spaces."""
-    return re.match('  +', string)
+    return re.match("  +", string)
 
 
 def hasBothOrNeitherAngleBrackets(string):
     """Make sure a string either has both '<' and '>' or neither of those angle brackets."""
-    left_angle_bracket_in_string = '<' in string
-    right_angle_bracket_in_string = '>' in string
+    left_angle_bracket_in_string = "<" in string
+    right_angle_bracket_in_string = ">" in string
 
     # if the string has both brackets...
     if left_angle_bracket_in_string and right_angle_bracket_in_string:
@@ -230,29 +230,29 @@ def hasBothOrNeitherAngleBrackets(string):
 
 
 registry_key_subpath_section = Combine(
-    Word('\\')
-    + Optional(Word('<'))
+    Word("\\")
+    + Optional(Word("<"))
     + Word(alphanums)
     + ZeroOrMore(
         # registry key paths may contain a file extension which requires that we capture registry
         # key path sections with a period (e.g. `notepad.exe`)
-        Optional(Word('.', max=1))
+        Optional(Word(".", max=1))
         # the registry key path section can contain any alphanum text (including spaces) as long as the text is not
         # one of the registry key path root keys and as long as there are not multiple, consecutive spaces
-        + Word(alphanums + ' ').addCondition(
+        + Word(alphanums + " ").addCondition(
             lambda tokens: tokens[0].strip() not in root_key_list and not hasMultipleConsecutiveSpaces(tokens[0])
         )
     )
-    + Optional(Word('>'))
+    + Optional(Word(">"))
 ).addCondition(lambda tokens: hasBothOrNeitherAngleBrackets(tokens[0]))
 registry_key_subpath = OneOrMore(registry_key_subpath_section)
 registry_key_path = (
     alphanum_word_start
     + Combine(
-        Optional('<').setParseAction(replaceWith(''))
-        + root_key('registry_key_root')
-        + Optional('>').setParseAction(replaceWith(''))
-        + registry_key_subpath('registry_key_subpath')
+        Optional("<").setParseAction(replaceWith(""))
+        + root_key("registry_key_root")
+        + Optional(">").setParseAction(replaceWith(""))
+        + registry_key_subpath("registry_key_subpath")
     )
     + alphanum_word_end
 )
@@ -260,7 +260,7 @@ def hasBothOrNeitherAngleBrackets(string):
 # see https://support.google.com/adsense/answer/2923881?hl=en
 google_adsense_publisher_id = (
     alphanum_word_start
-    + Combine(Or(['pub-', 'PUB-']) + Word(nums, exact=16)).setParseAction(downcaseTokens)
+    + Combine(Or(["pub-", "PUB-"]) + Word(nums, exact=16)).setParseAction(downcaseTokens)
     + alphanum_word_end
 )
 
@@ -268,7 +268,7 @@ def hasBothOrNeitherAngleBrackets(string):
 google_analytics_tracker_id = (
     alphanum_word_start
     + Combine(
-        Or(['UA-', 'ua-']) + Word(nums, min=6)('account_number') + '-' + Word(nums)('property_number')
+        Or(["UA-", "ua-"]) + Word(nums, min=6)("account_number") + "-" + Word(nums)("property_number")
     ).setParseAction(upcaseTokens)
     + alphanum_word_end
 )
@@ -279,28 +279,28 @@ def hasBothOrNeitherAngleBrackets(string):
     alphanum_word_start
     + Or(
         [
-            Combine('1' + Word(alphanums, min=25, max=34)),
-            Combine('3' + Word(alphanums, min=25, max=34)),
-            Combine('bc1' + Word(alphanums, min=11, max=71)),
+            Combine("1" + Word(alphanums, min=25, max=34)),
+            Combine("3" + Word(alphanums, min=25, max=34)),
+            Combine("bc1" + Word(alphanums, min=11, max=71)),
         ]
     )
     + alphanum_word_end
 )
 
-monero_address = alphanum_word_start + Regex('4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}') + alphanum_word_end
+monero_address = alphanum_word_start + Regex("4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}") + alphanum_word_end
 
 # see https://github.com/fhightower/ioc-finder/issues/18
 xmpp_address = alphanum_word_start + Combine(
-    email_local_part('email_address_local_part') + "@" + domain_name('jabber_address_domain')
-).addCondition(lambda tokens: 'jabber' in tokens[0].split('@')[-1] or 'xmpp' in tokens[0].split('@')[-1])
+    email_local_part("email_address_local_part") + "@" + domain_name("jabber_address_domain")
+).addCondition(lambda tokens: "jabber" in tokens[0].split("@")[-1] or "xmpp" in tokens[0].split("@")[-1])
 
 # the mac address grammar was developed from https://en.wikipedia.org/wiki/MAC_address#Notational_conventions
 # handles xx:xx:xx:xx:xx:xx or xx-xx-xx-xx-xx-xx
-mac_address_16_bit_section = Combine((Word(hexnums, exact=2) + Or(['-', ':'])) * 5 + Word(hexnums, exact=2))
+mac_address_16_bit_section = Combine((Word(hexnums, exact=2) + Or(["-", ":"])) * 5 + Word(hexnums, exact=2))
 # handles xxxx.xxxx.xxxx
-mac_address_32_bit_section = Combine((Word(hexnums, exact=4) + '.') * 2 + Word(hexnums, exact=4))
-mac_address_word_start = WordStart(wordChars=alphanums + ':-.')
-mac_address_word_end = WordEnd(wordChars=alphanums + ':-.')
+mac_address_32_bit_section = Combine((Word(hexnums, exact=4) + ".") * 2 + Word(hexnums, exact=4))
+mac_address_word_start = WordStart(wordChars=alphanums + ":-.")
+mac_address_word_end = WordEnd(wordChars=alphanums + ":-.")
 mac_address = (
     mac_address_word_start + Or([mac_address_16_bit_section, mac_address_32_bit_section]) + mac_address_word_end
 )
@@ -309,43 +309,43 @@ def hasBothOrNeitherAngleBrackets(string):
 # we add a condition to the ssdeep grammar to make sure that the second section of the grammar
 # (the chunk) is at least as big if not bigger than the third section (the double_chunk)
 ssdeep = alphanum_word_start + Combine(
-    Word(nums) + ':' + Word(alphanums + '/+', min=3) + ':' + Word(alphanums + '/+', min=3)
-).addCondition(lambda tokens: len(tokens[0].split(':')[1]) >= len(tokens[0].split(':')[2]))
+    Word(nums) + ":" + Word(alphanums + "/+", min=3) + ":" + Word(alphanums + "/+", min=3)
+).addCondition(lambda tokens: len(tokens[0].split(":")[1]) >= len(tokens[0].split(":")[2]))
 
-user_agent_platform_version = Regex(r'[0-9]+(\.[0-9]*)*')
-user_agent_start = Combine(Regex(r'[Mm]ozilla/') + user_agent_platform_version)
-user_agent_details = Regex(r'\(.+?\)')
+user_agent_platform_version = Regex(r"[0-9]+(\.[0-9]*)*")
+user_agent_start = Combine(Regex(r"[Mm]ozilla/") + user_agent_platform_version)
+user_agent_details = Regex(r"\(.+?\)")
 user_agent_platform = Combine(
     alphanum_word_start
-    + Regex(r'[a-zA-Z]{2,}/?').addCondition(lambda tokens: tokens[0].lower().strip('/') != 'mozilla')
+    + Regex(r"[a-zA-Z]{2,}/?").addCondition(lambda tokens: tokens[0].lower().strip("/") != "mozilla")
     + Optional(user_agent_platform_version)
 )
 user_agent = Combine(
     user_agent_start + user_agent_details + ZeroOrMore(user_agent_platform + Optional(user_agent_details)),
-    joinString=' ',
+    joinString=" ",
     adjacent=False,
 )
 
 # https://github.com/fhightower/ioc-finder/issues/13
 file_ending = Word(alphas, max=5)
 windows_file_path = alphanum_word_start + Combine(
-    Word(alphanums, exact=1) + ':' + Word(printables.replace('.', '') + ' ') + '.' + file_ending
+    Word(alphanums, exact=1) + ":" + Word(printables.replace(".", "") + " ") + "." + file_ending
 )
 
 # we need to add '/' and '~' to the alphanum_word_start so that the grammar will match words starting with '/' and '~'
 # we add ':' to the alphanum_word_start because we want to avoid parsing urls are file paths
 # (e.g. "//twitter.com" from "https://twitter.com/")
 unix_file_path_wordstart = copy.deepcopy(alphanum_word_start)
-unix_file_path_wordstart.wordChars.add(':')
-unix_file_path_wordstart.wordChars.add('/')
-unix_file_path_wordstart.wordChars.add('~')
+unix_file_path_wordstart.wordChars.add(":")
+unix_file_path_wordstart.wordChars.add("/")
+unix_file_path_wordstart.wordChars.add("~")
 
 unix_file_path = unix_file_path_wordstart + Combine(
-    Or(['~', '/']) + Word(printables.replace('.', '') + ' ') + '.' + file_ending
-).addCondition(lambda tokens: '//' not in tokens[0])
+    Or(["~", "/"]) + Word(printables.replace(".", "") + " ") + "." + file_ending
+).addCondition(lambda tokens: "//" not in tokens[0])
 file_path = Or([windows_file_path, unix_file_path]) + alphanum_word_end
 
-attack_sub_technique = Literal('.') + Word(nums, exact=3)
+attack_sub_technique = Literal(".") + Word(nums, exact=3)
 pre_attack_tactics_grammar = (
     alphanum_word_start
     + Or([CaselessLiteral(i) for i in pre_attack_tactics]).setParseAction(upcaseTokens)
@@ -394,11 +394,11 @@ def hasBothOrNeitherAngleBrackets(string):
     + alphanum_word_end
 )
 
-tlp_colors_list = [CaselessLiteral('red'), CaselessLiteral('amber'), CaselessLiteral('green'), CaselessLiteral('white')]
+tlp_colors_list = [CaselessLiteral("red"), CaselessLiteral("amber"), CaselessLiteral("green"), CaselessLiteral("white")]
 tlp_colors = Or(tlp_colors_list)
 
 tlp_label = Combine(
-    CaselessLiteral('tlp')
-    + Or([Literal(':'), Literal('-'), Literal(' '), Empty()]).setParseAction(lambda x: ':')
+    CaselessLiteral("tlp")
+    + Or([Literal(":"), Literal("-"), Literal(" "), Empty()]).setParseAction(lambda x: ":")
     + tlp_colors
 ).setParseAction(upcaseTokens)
diff --git a/pyproject.toml b/pyproject.toml
index a149614..42e763f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,5 @@
 [tool.black]
 line-length = 120
-skip-string-normalization = true
 
 [tool.isort]
 line_length = 120


Test patch:
diff --git a/tests/find_iocs_cases/asns.py b/tests/find_iocs_cases/asns.py
index 95b6bcb..cec5020 100644
--- a/tests/find_iocs_cases/asns.py
+++ b/tests/find_iocs_cases/asns.py
@@ -1,15 +1,15 @@
 from pytest import param
 
 ASN_DATA = [
-    param('as1234', {'asns': ['ASN1234']}, {}, id="asn_1"),
-    param('asn1234', {'asns': ['ASN1234']}, {}, id="asn_2"),
-    param('asn 1234', {'asns': ['ASN1234']}, {}, id="asn_3"),
-    param('AS1234', {'asns': ['ASN1234']}, {}, id="asn_4"),
-    param('AS 1234', {'asns': ['ASN1234']}, {}, id="asn_5"),
-    param('ASN 1234', {'asns': ['ASN1234']}, {}, id="asn_6"),
-    param('here is an asn: "AS1234', {'asns': ['ASN1234']}, {}, id="asn_7"),
-    param('NWD2HUBCAS1234.ad.analog.com', {'domains': ['nwd2hubcas1234.ad.analog.com']}, {}, id="asn_8"),
-    param('here is an asn: AS1234foobar', {}, {}, id="asn_9"),
-    param('as1234', {'asns': ['ASN1234']}, {}, id="asn_10"),
-    param('just as 2014', {}, {}, id="asn_11"),
+    param("as1234", {"asns": ["ASN1234"]}, {}, id="asn_1"),
+    param("asn1234", {"asns": ["ASN1234"]}, {}, id="asn_2"),
+    param("asn 1234", {"asns": ["ASN1234"]}, {}, id="asn_3"),
+    param("AS1234", {"asns": ["ASN1234"]}, {}, id="asn_4"),
+    param("AS 1234", {"asns": ["ASN1234"]}, {}, id="asn_5"),
+    param("ASN 1234", {"asns": ["ASN1234"]}, {}, id="asn_6"),
+    param('here is an asn: "AS1234', {"asns": ["ASN1234"]}, {}, id="asn_7"),
+    param("NWD2HUBCAS1234.ad.analog.com", {"domains": ["nwd2hubcas1234.ad.analog.com"]}, {}, id="asn_8"),
+    param("here is an asn: AS1234foobar", {}, {}, id="asn_9"),
+    param("as1234", {"asns": ["ASN1234"]}, {}, id="asn_10"),
+    param("just as 2014", {}, {}, id="asn_11"),
 ]
diff --git a/tests/find_iocs_cases/attack_data.py b/tests/find_iocs_cases/attack_data.py
index d47fe2a..85e35c3 100644
--- a/tests/find_iocs_cases/attack_data.py
+++ b/tests/find_iocs_cases/attack_data.py
@@ -2,25 +2,25 @@
 
 ATTACK_DATA = [
     param(
-        '''Mitigations: 41
+        """Mitigations: 41
         ID  Name    Description
         M1036   Account Use Policies
         Configure features related to account use like login attempt lockouts, specific login times, etc.
 
         M1015   Active Directory Configuration
-        Configur''',
-        {'attack_mitigations': {'enterprise': ['M1036', 'M1015']}},
+        Configur""",
+        {"attack_mitigations": {"enterprise": ["M1036", "M1015"]}},
         {},
         id="attack_data_1",
     ),
     param(
-        ''' Name    Description
+        """ Name    Description
         M1013   Application Developer Guidance
         This mitigation describes any guidance or training given to developers of applications to avoid introducing security weaknesses that an adversary may be able to take advantage of.
 
         M1005   Application Vetting
-        Enterprises can vet applications for exploitable vulnerabilities or unwanted (privacy-invasive or malicious) behaviors. Enterprises can inspect appl''',
-        {'attack_mitigations': {'enterprise': ['M1013'], 'mobile': ['M1013', 'M1005']}},
+        Enterprises can vet applications for exploitable vulnerabilities or unwanted (privacy-invasive or malicious) behaviors. Enterprises can inspect appl""",
+        {"attack_mitigations": {"enterprise": ["M1013"], "mobile": ["M1013", "M1005"]}},
         {},
         id="attack_data_2",
     ),
@@ -34,7 +34,7 @@
         A wide variety of cloud, virtual private services, hosting, compute, and storage solutions are available. Additionally botnets are available for rent or purchase. Use of these solutions allow an adversary to stage, launch, and execute an attack from infrastructure that does not physically tie back to them and can be rapidly provisioned, modified, and shut down.
 
         T1308""",
-        {'attack_techniques': {'pre_attack': ['T1329', 'T1307', 'T1308']}},
+        {"attack_techniques": {"pre_attack": ["T1329", "T1307", "T1308"]}},
         {},
         id="attack_pattern_3",
     ),
@@ -44,29 +44,29 @@
         TA0012  Priority Definition Planning    Priority definition planning consists of the process of determining the set of Key Intelligence Topics (KIT) or Key Intelligence Questions (KIQ) required for meeting key strategic, operational, or tactical goals. Leadership outlines the priority definition (may be considered a goal) around which the adversary designs target selection and a plan to achieve. An analyst may outline the priority definition when in the course of determining gaps in existing KITs or KIQs.
         TA0013  Priority Definition Direction   Priority definition direction consists of the process of collecting and assigning requirements for meeting Key Intelligence Topics (KIT) or Key Intelligence Questions (KIQ) as determined by leadership.
         TA0014  Targ""",
-        {'attack_tactics': {'pre_attack': ['TA0012', 'TA0013', 'TA0014']}},
+        {"attack_tactics": {"pre_attack": ["TA0012", "TA0013", "TA0014"]}},
         {},
         id="attack_pattern_4",
     ),
     param("""FOOT1329""", {}, {}, id="attack_pattern_5"),
     param("""T1329FUN""", {}, {}, id="attack_pattern_6"),
     param("""foot1329""", {}, {}, id="attack_pattern_7"),
-    param("""t1329""", {'attack_techniques': {'pre_attack': ['T1329']}}, {}, id="attack_pattern_8"),
-    param('T1156', {'attack_techniques': {'enterprise': ['T1156']}}, {}, id="attack_pattern_9"),
-    param('AT0001', {}, {}, id="attack_pattern_10"),
-    param('TA0001FUN', {}, {}, id="attack_pattern_11"),
-    param('foota0001', {}, {}, id="attack_pattern_12"),
-    param('ta0001', {'attack_tactics': {'enterprise': ['TA0001']}}, {}, id="attack_pattern_13"),
+    param("""t1329""", {"attack_techniques": {"pre_attack": ["T1329"]}}, {}, id="attack_pattern_8"),
+    param("T1156", {"attack_techniques": {"enterprise": ["T1156"]}}, {}, id="attack_pattern_9"),
+    param("AT0001", {}, {}, id="attack_pattern_10"),
+    param("TA0001FUN", {}, {}, id="attack_pattern_11"),
+    param("foota0001", {}, {}, id="attack_pattern_12"),
+    param("ta0001", {"attack_tactics": {"enterprise": ["TA0001"]}}, {}, id="attack_pattern_13"),
     param(
-        'https://attack.mitre.org/tactics/TA0001/',
+        "https://attack.mitre.org/tactics/TA0001/",
         {
-            'attack_tactics': {'enterprise': ['TA0001']},
-            'urls': ["https://attack.mitre.org/tactics/TA0001/"],
-            'domains': ["attack.mitre.org"],
+            "attack_tactics": {"enterprise": ["TA0001"]},
+            "urls": ["https://attack.mitre.org/tactics/TA0001/"],
+            "domains": ["attack.mitre.org"],
         },
         {},
         id="attack_pattern_14",
     ),
-    param('T1546.004', {'attack_techniques': {'enterprise': ['T1546.004']}}, {}, id="attack_pattern_15"),
-    param('T1156.0012', {}, {}, id="attack_pattern_16"),
+    param("T1546.004", {"attack_techniques": {"enterprise": ["T1546.004"]}}, {}, id="attack_pattern_15"),
+    param("T1156.0012", {}, {}, id="attack_pattern_16"),
 ]
diff --git a/tests/find_iocs_cases/domains.py b/tests/find_iocs_cases/domains.py
index 01ce46e..80f2a3e 100644
--- a/tests/find_iocs_cases/domains.py
+++ b/tests/find_iocs_cases/domains.py
@@ -21,9 +21,9 @@
             "urls": [
                 "https://asf.goole.com/mail?url=http%3A%2F%2Ffreasdfuewriter.com%2Fcs%2Fimage%2FCommerciaE.jpg&t=1575955624&ymreqid=733bc9eb-e8f-34cb-1cb5-120010019e00&sig=x2Pa2oOYxanG52s4vyCEFg--~Chttp://uniddloos.zddfdd.org/CBA0019_file_00002_pdf.zip",
             ],
-            "domains": ['cba0019_file_00002_pdf.zip', 'freasdfuewriter.com', 'uniddloos.zddfdd.org'],
+            "domains": ["cba0019_file_00002_pdf.zip", "freasdfuewriter.com", "uniddloos.zddfdd.org"],
         },
-        {'parse_domain_from_url': False},
+        {"parse_domain_from_url": False},
         id="domain-issue_104__domains_read_from_percent_encoded_url_query_params__with_options_false",
     ),
     param(
@@ -34,7 +34,7 @@
                 "https://asf.goole.com/mail?url=http%3A%2F%2Ffreasdfuewriter.com%2Fcs%2Fimage%2FCommerciaE.jpg&t=1575955624&ymreqid=733bc9eb-e8f-34cb-1cb5-120010019e00&sig=x2Pa2oOYxanG52s4vyCEFg--~Chttp://uniddloos.zddfdd.org/CBA0019_file_00002_pdf.zip",
             ],
         },
-        {'parse_from_url_path': False},
+        {"parse_from_url_path": False},
         id="domain-issue_104__domains_read_from_percent_encoded_url_query_params__with_options_false_2",
     ),
     param(
diff --git a/tests/find_iocs_cases/email.py b/tests/find_iocs_cases/email.py
index 6f91e87..24543b7 100644
--- a/tests/find_iocs_cases/email.py
+++ b/tests/find_iocs_cases/email.py
@@ -25,7 +25,7 @@
                 "me@2600.com",
                 "john.smith(comment)@example.com",
                 "(comment)john.smith@example.com",
-                "\"John..Doe\"@example.com",
+                '"John..Doe"@example.com',
                 "test@[192.168.0.1]",
             ],
             "ipv4s": ["192.168.0.1"],
diff --git a/tests/find_iocs_cases/feature__included_ioc_types.py b/tests/find_iocs_cases/feature__included_ioc_types.py
index 6f15c3e..327a0b8 100644
--- a/tests/find_iocs_cases/feature__included_ioc_types.py
+++ b/tests/find_iocs_cases/feature__included_ioc_types.py
@@ -7,58 +7,58 @@
 from ioc_finder.ioc_finder import DEFAULT_IOC_TYPES
 
 IOC_EXAMPLES = {
-    'domains': ['abc.py', 'bar.com', 'example.com', 'foo.com', 'swissjabber.de'],
-    'urls': ['https://example.com/test%20page/foo.com/bingo.php?q=bar.com'],
-    'xmpp_addresses': ["foo@swissjabber.de"],
-    'email_addresses_complete': ['me@example.com'],
-    'email_addresses': ['me@example.com'],
-    'ipv4_cidrs': ['1.1.1.1/0'],
-    'imphashes': ['18ddf28a71089acdbab5038f58044c0a'],
-    'authentihashes': ['3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4'],
-    'ipv4s': ['1.1.1.1'],
-    'ipv6s': ['2001:0db8:0000:0000:0000:ff00:0042:8329'],
-    'sha512s': ['a' * 128],
-    'sha256s': ['a' * 64],
-    'sha1s': ['a' * 40],
-    'md5s': ['a' * 32],
-    'ssdeeps': [
-        '12288:QYV6MorX7qzuC3QHO9FQVHPF51jgcSj2EtPo/V7I6R+Lqaw8i6hG0:vBXu9HGaVHh4Po/VU6RkqaQ6F',
-        '0000:0000:ff00',
-        '2001:0db8:0000',
+    "domains": ["abc.py", "bar.com", "example.com", "foo.com", "swissjabber.de"],
+    "urls": ["https://example.com/test%20page/foo.com/bingo.php?q=bar.com"],
+    "xmpp_addresses": ["foo@swissjabber.de"],
+    "email_addresses_complete": ["me@example.com"],
+    "email_addresses": ["me@example.com"],
+    "ipv4_cidrs": ["1.1.1.1/0"],
+    "imphashes": ["18ddf28a71089acdbab5038f58044c0a"],
+    "authentihashes": ["3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4"],
+    "ipv4s": ["1.1.1.1"],
+    "ipv6s": ["2001:0db8:0000:0000:0000:ff00:0042:8329"],
+    "sha512s": ["a" * 128],
+    "sha256s": ["a" * 64],
+    "sha1s": ["a" * 40],
+    "md5s": ["a" * 32],
+    "ssdeeps": [
+        "12288:QYV6MorX7qzuC3QHO9FQVHPF51jgcSj2EtPo/V7I6R+Lqaw8i6hG0:vBXu9HGaVHh4Po/VU6RkqaQ6F",
+        "0000:0000:ff00",
+        "2001:0db8:0000",
     ],  # I don't like that the components of an ipv6 can be parsed as an ssdeep... I've ticketed this here: https://github.com/fhightower/ioc-finder/issues/228
-    'asns': ['ASN123'],
-    'cves': ['CVE-2022-1234'],
-    'registry_key_paths': ['HKEY_LOCAL_MACHINE\Software\Microsoft\Windows'],
-    'google_adsense_publisher_ids': ['pub-1234567891234567'],
-    'google_analytics_tracker_ids': ['UA-000000-1'],
-    'bitcoin_addresses': ['18ddf28a71089acdbab5038f58044c0a', '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy'],
-    'monero_addresses': [
-        '496aKKdqF1xQSSEzw7wNrkZkDUsCD5cSmNCfVhVgEps52WERBcLDGzdF5UugmFoHMm9xRJdewvK2TFfAJNwEV25rTcVF5Vp'
+    "asns": ["ASN123"],
+    "cves": ["CVE-2022-1234"],
+    "registry_key_paths": ["HKEY_LOCAL_MACHINE\Software\Microsoft\Windows"],
+    "google_adsense_publisher_ids": ["pub-1234567891234567"],
+    "google_analytics_tracker_ids": ["UA-000000-1"],
+    "bitcoin_addresses": ["18ddf28a71089acdbab5038f58044c0a", "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy"],
+    "monero_addresses": [
+        "496aKKdqF1xQSSEzw7wNrkZkDUsCD5cSmNCfVhVgEps52WERBcLDGzdF5UugmFoHMm9xRJdewvK2TFfAJNwEV25rTcVF5Vp"
     ],
-    'mac_addresses': ['AA-F2-C9-A6-B3-4F'],
-    'user_agents': [
-        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1) TLP'
+    "mac_addresses": ["AA-F2-C9-A6-B3-4F"],
+    "user_agents": [
+        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1) TLP"
     ],  # I don't like this parsing... I've ticketed this for improvement here: https://github.com/fhightower/ioc-finder/issues/227
-    'tlp_labels': ['TLP:RED'],
-    'mac_addresses': ['AA-F2-C9-A6-B3-4F'],
-    'file_paths': ['~/foo/bar/abc.py'],
-    'attack_mitigations': {'enterprise': ['M1036', 'M1015']},
-    'attack_tactics': {'pre_attack': ['TA0012']},
-    'attack_techniques': {'pre_attack': ['T1329']},
+    "tlp_labels": ["TLP:RED"],
+    "mac_addresses": ["AA-F2-C9-A6-B3-4F"],
+    "file_paths": ["~/foo/bar/abc.py"],
+    "attack_mitigations": {"enterprise": ["M1036", "M1015"]},
+    "attack_tactics": {"pre_attack": ["TA0012"]},
+    "attack_techniques": {"pre_attack": ["T1329"]},
 }
-all_ioc_text = ' '.join([val for sublist in IOC_EXAMPLES.values() for val in sublist])
+all_ioc_text = " ".join([val for sublist in IOC_EXAMPLES.values() for val in sublist])
 
 # this is a hack to be fixed in https://github.com/fhightower/ioc-finder/issues/224
 # imphashes and authentihashes require the hash to be prefixed with `imphash` and `authentihash` respectively, but when parsed, only the hash itself will be present
-all_ioc_text = all_ioc_text.replace(IOC_EXAMPLES['imphashes'][0], f'imphash {IOC_EXAMPLES["imphashes"][0]}')  # type: ignore
+all_ioc_text = all_ioc_text.replace(IOC_EXAMPLES["imphashes"][0], f'imphash {IOC_EXAMPLES["imphashes"][0]}')  # type: ignore
 all_ioc_text = all_ioc_text.replace(
-    IOC_EXAMPLES['authentihashes'][0], f'authentihash {IOC_EXAMPLES["authentihashes"][0]}'  # type: ignore
+    IOC_EXAMPLES["authentihashes"][0], f'authentihash {IOC_EXAMPLES["authentihashes"][0]}'  # type: ignore
 )
-all_ioc_text = all_ioc_text.replace(IOC_EXAMPLES['user_agents'][0], IOC_EXAMPLES['user_agents'][0].rstrip(' TLP'))  # type: ignore
+all_ioc_text = all_ioc_text.replace(IOC_EXAMPLES["user_agents"][0], IOC_EXAMPLES["user_agents"][0].rstrip(" TLP"))  # type: ignore
 # add the attack data
-all_ioc_text = all_ioc_text + ' ' + ' '.join(IOC_EXAMPLES['attack_mitigations']['enterprise'])  # type: ignore
-all_ioc_text = all_ioc_text + ' ' + ' '.join(IOC_EXAMPLES['attack_tactics']['pre_attack'])  # type: ignore
-all_ioc_text = all_ioc_text + ' ' + ' '.join(IOC_EXAMPLES['attack_techniques']['pre_attack'])  # type: ignore
+all_ioc_text = all_ioc_text + " " + " ".join(IOC_EXAMPLES["attack_mitigations"]["enterprise"])  # type: ignore
+all_ioc_text = all_ioc_text + " " + " ".join(IOC_EXAMPLES["attack_tactics"]["pre_attack"])  # type: ignore
+all_ioc_text = all_ioc_text + " " + " ".join(IOC_EXAMPLES["attack_techniques"]["pre_attack"])  # type: ignore
 
 
 individual_included_ioc_types_tests = []
@@ -79,25 +79,25 @@
 # make sure multiple included_ioc_types are handled properly
 multiple_included_ioc_types_tests.append(
     param(
-        'https://example.com/test%20page/foo.com/bingo.php?q=bar.com',
+        "https://example.com/test%20page/foo.com/bingo.php?q=bar.com",
         {
-            'domains': ['bar.com', 'example.com', 'foo.com'],
-            'urls': ['https://example.com/test%20page/foo.com/bingo.php?q=bar.com'],
+            "domains": ["bar.com", "example.com", "foo.com"],
+            "urls": ["https://example.com/test%20page/foo.com/bingo.php?q=bar.com"],
         },
-        {'included_ioc_types': ['domains', 'urls']},
-        id='Find multiple data types',
+        {"included_ioc_types": ["domains", "urls"]},
+        id="Find multiple data types",
     )
 )
 
 # make sure multiple included_ioc_types work well with other kwargs - the list of domains is missing `foo.com` b/c `parse_from_url_path` is False
 multiple_included_ioc_types_tests.append(
     param(
-        'https://example.com/test%20page/foo.com/bingo.php?q=bar.com',
+        "https://example.com/test%20page/foo.com/bingo.php?q=bar.com",
         {
-            'domains': ['bar.com', 'example.com'],
-            'urls': ['https://example.com/test%20page/foo.com/bingo.php?q=bar.com'],
+            "domains": ["bar.com", "example.com"],
+            "urls": ["https://example.com/test%20page/foo.com/bingo.php?q=bar.com"],
         },
-        {'included_ioc_types': ['domains', 'urls'], 'parse_from_url_path': False},
-        id='Find multiple data types',
+        {"included_ioc_types": ["domains", "urls"], "parse_from_url_path": False},
+        id="Find multiple data types",
     )
 )
diff --git a/tests/find_iocs_cases/file_paths.py b/tests/find_iocs_cases/file_paths.py
index 3023b0d..5e5ebac 100644
--- a/tests/find_iocs_cases/file_paths.py
+++ b/tests/find_iocs_cases/file_paths.py
@@ -43,25 +43,25 @@
     ),
     param(
         "/Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex",
-        {'file_paths': ["/Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex"]},
+        {"file_paths": ["/Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex"]},
         {},
         id="file_path_2",
     ),
     param(
         "and this is a file ~/foo/bar/abc.py",
-        {'file_paths': ["~/foo/bar/abc.py"], 'domains': ['abc.py']},
+        {"file_paths": ["~/foo/bar/abc.py"], "domains": ["abc.py"]},
         {},
         id="file_path_3",
     ),
     param(
         "test /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex file",
-        {'file_paths': ["/Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex"]},
+        {"file_paths": ["/Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex"]},
         {},
         id="file_path_4",
     ),
     param(
         "another home directory ~/Desktop/test.py python file",
-        {'file_paths': ["~/Desktop/test.py"], 'domains': ['test.py']},
+        {"file_paths": ["~/Desktop/test.py"], "domains": ["test.py"]},
         {},
         id="file_path_5",
     ),
diff --git a/tests/find_iocs_cases/hashes.py b/tests/find_iocs_cases/hashes.py
index cfdcb76..bdb5c19 100644
--- a/tests/find_iocs_cases/hashes.py
+++ b/tests/find_iocs_cases/hashes.py
@@ -2,7 +2,7 @@
 
 HASH_DATA = [
     param(
-        "{} {} {} {} {}".format('A' * 32, 'a' * 32, 'b' * 40, 'c' * 64, 'd' * 128),
+        "{} {} {} {} {}".format("A" * 32, "a" * 32, "b" * 40, "c" * 64, "d" * 128),
         {
             "md5s": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
             "sha1s": ["bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"],
diff --git a/tests/find_iocs_cases/ip_addr.py b/tests/find_iocs_cases/ip_addr.py
index 9d904cf..db4e24c 100644
--- a/tests/find_iocs_cases/ip_addr.py
+++ b/tests/find_iocs_cases/ip_addr.py
@@ -16,7 +16,7 @@
                 "2001:db8::ff00:42:8329",
                 "::1",
             ],
-            "ssdeeps": ['0000:0000:ff00', '2001:0db8:0000'],
+            "ssdeeps": ["0000:0000:ff00", "2001:0db8:0000"],
         },
         {},
         id="ipv6_1",
diff --git a/tests/find_iocs_cases/registry_keys.py b/tests/find_iocs_cases/registry_keys.py
index 96c3995..7248b35 100644
--- a/tests/find_iocs_cases/registry_keys.py
+++ b/tests/find_iocs_cases/registry_keys.py
@@ -3,8 +3,8 @@
 REGISTRY_DATA = [
     # see https://github.com/fhightower/ioc-finder/issues/63 - matching registry key paths with content between '<' and '>'
     param(
-        'The registry value “ntdll” was added to the “HKEY_USERS\\<USER SID>\\Software\\Microsoft\\Windows\\CurrentVersion\\Run” key.',
-        {'registry_key_paths': ['HKEY_USERS\\<USER SID>\\Software\\Microsoft\\Windows\\CurrentVersion\\Run']},
+        "The registry value “ntdll” was added to the “HKEY_USERS\\<USER SID>\\Software\\Microsoft\\Windows\\CurrentVersion\\Run” key.",
+        {"registry_key_paths": ["HKEY_USERS\\<USER SID>\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"]},
         {},
         id="registry_1",
     ),
@@ -28,7 +28,7 @@
         <HKLM>\\SOFTWARE\\WOW6432NODE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN
         Value Name: avscan""",
         {
-            'registry_key_paths': [
+            "registry_key_paths": [
                 "HKCU\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\EXPLORER\\ADVANCED",
                 "HKLM\\SOFTWARE\\WOW6432NODE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\EXPLORER\\ADVANCED\\FOLDER\\HIDEFILEEXT",
                 "HKLM\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\POLICIES\\EXPLORER\\RUN",
@@ -41,7 +41,7 @@
     param(
         """HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME HKLM\\SOFTWARE\\WOW6432NODE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN""",
         {
-            'registry_key_paths': [
+            "registry_key_paths": [
                 "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME",
                 "HKLM\\SOFTWARE\\WOW6432NODE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN",
             ]
@@ -51,46 +51,46 @@
     ),
     param(
         """HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME""",
-        {'registry_key_paths': ['HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME']},
+        {"registry_key_paths": ["HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME"]},
         {},
         id="registry_5",
     ),
     param(
         """Found a registry key like <HKCU>\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\EXPLORER\\ADVANCED on the windows box""",
-        {'registry_key_paths': ['HKCU\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\EXPLORER\\ADVANCED']},
+        {"registry_key_paths": ["HKCU\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\EXPLORER\\ADVANCED"]},
         {},
         id="registry_6",
     ),
     param(
         """Found a registry key like HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME on the windows box""",
-        {'registry_key_paths': ['HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME']},
+        {"registry_key_paths": ["HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Console\\ConsoleIME"]},
         {},
         id="registry_7",
     ),
-    param('HKLM\\SOFTWARE\\foo bar\\b', {'registry_key_paths': ['HKLM\\SOFTWARE\\foo bar\\b']}, {}, id="registry_8"),
+    param("HKLM\\SOFTWARE\\foo bar\\b", {"registry_key_paths": ["HKLM\\SOFTWARE\\foo bar\\b"]}, {}, id="registry_8"),
     param(
-        'HKLM\\SOFTWARE\\foo bar\\bing buzz\\b',
-        {'registry_key_paths': ['HKLM\\SOFTWARE\\foo bar\\bing buzz\\b']},
+        "HKLM\\SOFTWARE\\foo bar\\bing buzz\\b",
+        {"registry_key_paths": ["HKLM\\SOFTWARE\\foo bar\\bing buzz\\b"]},
         {},
         id="registry_9",
     ),
     param(
-        'HKLM\\SOFTWARE\\foo bar bing\\buzz boom\\b',
-        {'registry_key_paths': ['HKLM\\SOFTWARE\\foo bar bing\\buzz boom\\b']},
+        "HKLM\\SOFTWARE\\foo bar bing\\buzz boom\\b",
+        {"registry_key_paths": ["HKLM\\SOFTWARE\\foo bar bing\\buzz boom\\b"]},
         {},
         id="registry_10",
     ),
     param(
-        'HKLM\\SOFTWARE\\foo bar\\bing buzz boom\\b',
-        {'registry_key_paths': ['HKLM\\SOFTWARE\\foo bar\\bing buzz boom\\b']},
+        "HKLM\\SOFTWARE\\foo bar\\bing buzz boom\\b",
+        {"registry_key_paths": ["HKLM\\SOFTWARE\\foo bar\\bing buzz boom\\b"]},
         {},
         id="registry_11",
     ),
     param(
-        'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe',
+        "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe",
         {
-            'registry_key_paths': [
-                'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe'
+            "registry_key_paths": [
+                "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe"
             ]
         },
         {},
@@ -98,14 +98,14 @@
     ),
     param(
         """HKLM\\SOFTWARE\\Microsoft\\Windows  NT\\CurrentVersion\\Console\\ConsoleIME""",
-        {'registry_key_paths': ['HKLM\\SOFTWARE\\Microsoft\\Windows']},
+        {"registry_key_paths": ["HKLM\\SOFTWARE\\Microsoft\\Windows"]},
         {},
         id="registry_13",
     ),
     param(
         "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows HKLM\\Software\\Microsoft\\Windows HKCC\\Software\\Microsoft\\Windows",
         {
-            'registry_key_paths': [
+            "registry_key_paths": [
                 "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows",
                 "HKLM\\Software\\Microsoft\\Windows",
                 "HKCC\\Software\\Microsoft\\Windows",
@@ -266,11 +266,11 @@
         T1041| Exfiltration Over Command and Control Channel| Malware exfiltrates data over the C&C channel.
         9 Sep 2019 - 11:30AM""",
         {
-            'registry_key_paths': [
+            "registry_key_paths": [
                 "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Shell",
                 "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Shell",
             ],
-            'domains': [
+            "domains": [
                 "citizenlab.ca",
                 "www.secureworks.com",
                 "www.reuters.com",
@@ -281,19 +281,19 @@
                 "docs.microsoft.com",
                 "upnpdiscover.org",
             ],
-            'sha1s': [
+            "sha1s": [
                 "31b54aebdaf5fbc73a66ac41ccb35943cc9b7f72",
                 "50973a3fc57d70c7911f7a952356188b9939e56b",
                 "244eb62b9ac30934098ca4204447440d6fc4e259",
                 "5c8f83cc4ff57e7c67925df4d9daabe5d0cc07e2",
             ],
-            'sha256s': [
+            "sha256s": [
                 "258a4a9d139823f55d7b9da1825d101107fbf88634a870de9800580dad556ba3",
                 "2519db0ffec604d6c9a655cf56b98edce10405de36810bc3dcf125cde30ba5a2",
                 "3edb6ea77cd0987668b360365d5f39fdcf6b366d0deac9ece5adc6ffd20227f6",
                 "8dffde77a39f3af46d0ce0b84a189db25a2a0fefd71a0cd0054d8e0d60ab08de",
             ],
-            'urls': [
+            "urls": [
                 "https://citizenlab.ca/2016/05/stealth-falcon-appendices",
                 "https://citizenlab.ca/2016/05/stealth-falcon/",
                 "https://citizenlab.ca/about/),",
@@ -301,27 +301,27 @@
                 "https://www.reuters.com/investigates/special-report/usa-spying-raven/",
                 "https://www.secureworks.com/blog/malware-lingers-with-bits).",
             ],
-            'attack_techniques': {
-                'enterprise': [
-                    'T1106',
-                    'T1197',
-                    'T1112',
-                    'T1140',
-                    'T1027',
-                    'T1022',
-                    'T1059',
-                    'T1036',
-                    'T1063',
-                    'T1085',
-                    'T1005',
-                    'T1053',
-                    'T1041',
-                    'T1032',
-                    'T1020',
-                    'T1008',
-                    'T1074',
-                    'T1105',
-                    'T1107',
+            "attack_techniques": {
+                "enterprise": [
+                    "T1106",
+                    "T1197",
+                    "T1112",
+                    "T1140",
+                    "T1027",
+                    "T1022",
+                    "T1059",
+                    "T1036",
+                    "T1063",
+                    "T1085",
+                    "T1005",
+                    "T1053",
+                    "T1041",
+                    "T1032",
+                    "T1020",
+                    "T1008",
+                    "T1074",
+                    "T1105",
+                    "T1107",
                 ]
             },
         },
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 1e9152a..1fc008d 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -12,9 +12,9 @@ def test_parse_cli_stdin():
     )
     assert result.exit_code == 0
     output = result.output.strip()
-    assert 'example.org' in output
-    assert 'example.com' in output
-    assert 'https://example.org/test/bingo.php' in output
+    assert "example.org" in output
+    assert "example.com" in output
+    assert "https://example.org/test/bingo.php" in output
 
 
 def test_ioc_parsing_cli():
@@ -22,9 +22,9 @@ def test_ioc_parsing_cli():
     result = runner.invoke(ioc_finder.cli_find_iocs, ["This is just an example.com https://example.org/test/bingo.php"])
     assert result.exit_code == 0
     output = result.output.strip()
-    assert 'example.org' in output
-    assert 'example.com' in output
-    assert 'https://example.org/test/bingo.php' in output
+    assert "example.org" in output
+    assert "example.com" in output
+    assert "https://example.org/test/bingo.php" in output
 
 
 def test_cli_without_domain_from_url_parsing():
@@ -92,9 +92,9 @@ def test_cli_parsing_urls_without_scheme():
     assert result.exit_code == 0
     print(result.output.strip())
     json_results = json.loads(result.output.strip())
-    assert 'example.com' in json_results['domains']
-    assert 'example.org' in json_results['domains']
-    assert 'example.org/test/bingo.php' in json_results['urls']
+    assert "example.com" in json_results["domains"]
+    assert "example.org" in json_results["domains"]
+    assert "example.org/test/bingo.php" in json_results["urls"]
 
 
 def test_cli_disabling_parsing_urls_without_scheme():
@@ -106,8 +106,8 @@ def test_cli_disabling_parsing_urls_without_scheme():
     assert result.exit_code == 0
     print(result.output.strip())
     json_results = json.loads(result.output.strip())
-    assert 'example.com' in json_results['domains']
-    assert 'example.org' in json_results['domains']
+    assert "example.com" in json_results["domains"]
+    assert "example.org" in json_results["domains"]
 
 
 def test_cli_disabling_import_hash_parsing():
@@ -116,10 +116,10 @@ def test_cli_disabling_import_hash_parsing():
     assert result.exit_code == 0
     json_results = json.loads(result.output.strip())
     # even if we don't parse imphashes, they are still removed so they aren't parsed as md5s
-    assert json_results['md5s'] == []
-    assert not json_results.get('imphashes')
+    assert json_results["md5s"] == []
+    assert not json_results.get("imphashes")
 
     result = runner.invoke(ioc_finder.cli_find_iocs, ["imphash 18ddf28a71089acdbab5038f58044c0a"])
     assert result.exit_code == 0
     json_results = json.loads(result.output.strip())
-    assert json_results['imphashes'] == ['18ddf28a71089acdbab5038f58044c0a']
+    assert json_results["imphashes"] == ["18ddf28a71089acdbab5038f58044c0a"]
diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py
index b8beccd..1f89082 100644
--- a/tests/test_concurrency.py
+++ b/tests/test_concurrency.py
@@ -4,13 +4,13 @@
 
 
 def test_nested_concurrency():
-    texts = ['example.com', 'foo bar bang buzz', 'This is just an example.com https://example.org/test/bingo.php']
+    texts = ["example.com", "foo bar bang buzz", "This is just an example.com https://example.org/test/bingo.php"]
     results = []
 
     with concurrent.futures.ThreadPoolExecutor() as executor:
         results = [i for i in executor.map(find_iocs, texts)]
 
-    assert results[0]['domains'] == ['example.com']
-    assert 'example.com' in results[2]['domains']
-    assert 'example.org' in results[2]['domains']
-    assert results[2]['urls'] == ['https://example.org/test/bingo.php']
+    assert results[0]["domains"] == ["example.com"]
+    assert "example.com" in results[2]["domains"]
+    assert "example.org" in results[2]["domains"]
+    assert results[2]["urls"] == ["https://example.org/test/bingo.php"]
diff --git a/tests/test_edge_cases.py b/tests/test_edge_cases.py
index 86d114e..4d7f6a1 100644
--- a/tests/test_edge_cases.py
+++ b/tests/test_edge_cases.py
@@ -8,88 +8,88 @@
 @pytest.fixture
 def text_a():
     """Provide some generic text for the tests below."""
-    return 'example.com is a nice domain if you consider http://bad.com/test/bingo.php to be bad. {} {} {} 1.2.3.4 192.64.55.61 bad12312@example.org'.format(
-        'a' * 32, 'b' * 40, 'c' * 64
+    return "example.com is a nice domain if you consider http://bad.com/test/bingo.php to be bad. {} {} {} 1.2.3.4 192.64.55.61 bad12312@example.org".format(
+        "a" * 32, "b" * 40, "c" * 64
     )
 
 
 def test_domain_name_with_underscore():
     # see https://github.com/fhightower/ioc-finder/issues/26
-    s = 'o_o.lgms.nl'
+    s = "o_o.lgms.nl"
     results = find_iocs(s)
-    assert results['domains'] == ['o_o.lgms.nl']
+    assert results["domains"] == ["o_o.lgms.nl"]
 
-    s = '_jabber._tcp.gmail.com'
+    s = "_jabber._tcp.gmail.com"
     results = find_iocs(s)
-    assert results['domains'] == ['_jabber._tcp.gmail.com']
+    assert results["domains"] == ["_jabber._tcp.gmail.com"]
 
 
 def test_url_with_underscore_in_subdomain():
     # see https://github.com/fhightower/ioc-finder/issues/26
-    s = 'https://o_o.lgms.nl/'
+    s = "https://o_o.lgms.nl/"
     results = find_iocs(s)
-    assert results['urls'] == ['https://o_o.lgms.nl/']
+    assert results["urls"] == ["https://o_o.lgms.nl/"]
 
 
 def test_ioc_finder(text_a):
     iocs = find_iocs(text_a)
-    assert len(iocs['domains']) == 3
-    assert 'example.com' in iocs['domains']
-    assert 'example.org' in iocs['domains']
-    assert 'bad.com' in iocs['domains']
+    assert len(iocs["domains"]) == 3
+    assert "example.com" in iocs["domains"]
+    assert "example.org" in iocs["domains"]
+    assert "bad.com" in iocs["domains"]
 
-    assert iocs['email_addresses_complete'] == ['bad12312@example.org']
+    assert iocs["email_addresses_complete"] == ["bad12312@example.org"]
 
-    assert len(iocs['ipv4s']) == 2
-    assert '1.2.3.4' in iocs['ipv4s']
-    assert '192.64.55.61' in iocs['ipv4s']
+    assert len(iocs["ipv4s"]) == 2
+    assert "1.2.3.4" in iocs["ipv4s"]
+    assert "192.64.55.61" in iocs["ipv4s"]
 
-    assert iocs['urls'] == ['http://bad.com/test/bingo.php']
-    assert iocs['md5s'] == ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa']
-    assert iocs['sha1s'] == ['bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb']
-    assert iocs['sha256s'] == ['cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc']
+    assert iocs["urls"] == ["http://bad.com/test/bingo.php"]
+    assert iocs["md5s"] == ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
+    assert iocs["sha1s"] == ["bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]
+    assert iocs["sha256s"] == ["cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"]
 
 
 def test_url_parsing():
     """Test some specific url examples."""
     s = "https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh"
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh']
+    assert iocs["urls"] == ["https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh"]
 
     s = '<link href="http://fonts.googleapis.com/css?family=Lato:400,700" rel="stylesheet" type="text/css"/>'
     iocs = find_iocs(s)
-    assert 'http://fonts.googleapis.com/css?family=Lato:400,700' in iocs['urls']
+    assert "http://fonts.googleapis.com/css?family=Lato:400,700" in iocs["urls"]
 
     s = '<link href="http://fonts.googleapis.com/css?family=Lato:400,700" rel="stylesheet" type="text/css"/>'
     iocs = find_iocs(s)
-    assert 'http://fonts.googleapis.com/css?family=Lato:400,700' in iocs['urls']
+    assert "http://fonts.googleapis.com/css?family=Lato:400,700" in iocs["urls"]
 
     s = '<a href="https://bit.ly/12345#abcd" target="_blank" style="text-decoration:none;;">'
     results = find_iocs(s)
-    assert results['urls'] == ['https://bit.ly/12345#abcd']
+    assert results["urls"] == ["https://bit.ly/12345#abcd"]
 
     s = '<a href="https://bit.ly/12345" target="_blank" style="text-decoration:none;;">'
     results = find_iocs(s)
-    assert results['urls'] == ['https://bit.ly/12345']
+    assert results["urls"] == ["https://bit.ly/12345"]
 
     s = '<a href="https://bit.ly" target="_blank" style="text-decoration:none;;">'
     results = find_iocs(s)
-    assert results['urls'] == ['https://bit.ly']
+    assert results["urls"] == ["https://bit.ly"]
 
     s = '<a href="https://bit.ly/" target="_blank" style="text-decoration:none;;">'
     results = find_iocs(s)
-    assert results['urls'] == ['https://bit.ly/']
+    assert results["urls"] == ["https://bit.ly/"]
 
-    s = 'http://example.com//test'
+    s = "http://example.com//test"
     results = find_iocs(s)
-    assert results['urls'] == ['http://example.com//test']
+    assert results["urls"] == ["http://example.com//test"]
 
 
 def test_issue_45_url_parsing():
-    s = 'http://wmfolcs3.pn.4y.nv.kr2x1dt.net/gz+/(y%40%26//%3c7aew%5cqv%0a/%0bcz,r/r%5c%7b/7re//6%3e/f%23%7ce0p\'6_%09/d%5c'
+    s = "http://wmfolcs3.pn.4y.nv.kr2x1dt.net/gz+/(y%40%26//%3c7aew%5cqv%0a/%0bcz,r/r%5c%7b/7re//6%3e/f%23%7ce0p'6_%09/d%5c"
     results = find_iocs(s)
-    assert results['urls'] == [
-        'http://wmfolcs3.pn.4y.nv.kr2x1dt.net/gz+/(y%40%26//%3c7aew%5cqv%0a/%0bcz,r/r%5c%7b/7re//6%3e/f%23%7ce0p\'6_%09/d%5c'
+    assert results["urls"] == [
+        "http://wmfolcs3.pn.4y.nv.kr2x1dt.net/gz+/(y%40%26//%3c7aew%5cqv%0a/%0bcz,r/r%5c%7b/7re//6%3e/f%23%7ce0p'6_%09/d%5c"
     ]
 
 
@@ -97,429 +97,429 @@ def test_schemeless_url_parsing():
     """Test parsing URLs without a scheme."""
     s = "github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh"
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh']
+    assert iocs["urls"] == ["github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh"]
 
-    s = 'github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh hightower.space/projects'
+    s = "github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh hightower.space/projects"
     iocs = find_iocs(s)
-    assert len(iocs['urls']) == 2
-    assert 'hightower.space/projects' in iocs['urls']
-    assert 'github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh' in iocs['urls']
+    assert len(iocs["urls"]) == 2
+    assert "hightower.space/projects" in iocs["urls"]
+    assert "github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh" in iocs["urls"]
 
-    s = 'https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh hightower.space/projects'
+    s = "https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh hightower.space/projects"
     iocs = find_iocs(s, parse_urls_without_scheme=False)
-    assert iocs['urls'] == ['https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh']
+    assert iocs["urls"] == ["https://github.com/StylishThemes/GitHub-Dark/blob/master/tools/authors.sh"]
 
 
 def test_address_email_address():
     s = ">test@[192.168.2.1]<"
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['test@[192.168.2.1]']
-    assert iocs['email_addresses'] == ['test@[192.168.2.1]']
-    assert iocs['ipv4s'] == ['192.168.2.1']
+    assert iocs["email_addresses_complete"] == ["test@[192.168.2.1]"]
+    assert iocs["email_addresses"] == ["test@[192.168.2.1]"]
+    assert iocs["ipv4s"] == ["192.168.2.1"]
 
     s = "bad@[192.168.7.3]"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['192.168.7.3']
-    assert iocs['email_addresses_complete'] == ['bad@[192.168.7.3]']
-    assert iocs['email_addresses'] == ['bad@[192.168.7.3]']
+    assert iocs["ipv4s"] == ["192.168.7.3"]
+    assert iocs["email_addresses_complete"] == ["bad@[192.168.7.3]"]
+    assert iocs["email_addresses"] == ["bad@[192.168.7.3]"]
 
     s = "bad@[192.168.7.3]aaaaa"
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['bad@[192.168.7.3]']
-    assert iocs['email_addresses'] == ['bad@[192.168.7.3]']
+    assert iocs["email_addresses_complete"] == ["bad@[192.168.7.3]"]
+    assert iocs["email_addresses"] == ["bad@[192.168.7.3]"]
 
     s = "jsmith@[IPv6:2001:db8::1]"
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['jsmith@[IPv6:2001:db8::1]']
-    assert iocs['email_addresses'] == ['jsmith@[IPv6:2001:db8::1]']
-    assert iocs['ipv6s'] == ['2001:db8::1']
+    assert iocs["email_addresses_complete"] == ["jsmith@[IPv6:2001:db8::1]"]
+    assert iocs["email_addresses"] == ["jsmith@[IPv6:2001:db8::1]"]
+    assert iocs["ipv6s"] == ["2001:db8::1"]
 
 
 def test_address_domain_url():
     s = "http://192.64.55.61/test.php"
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['http://192.64.55.61/test.php']
-    assert iocs['ipv4s'] == ['192.64.55.61']
+    assert iocs["urls"] == ["http://192.64.55.61/test.php"]
+    assert iocs["ipv4s"] == ["192.64.55.61"]
 
 
 def test_url_domain_name_parsing():
     s = "http://foo.youtube/test.php"
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['http://foo.youtube/test.php']
-    assert iocs['domains'] == ['foo.youtube']
+    assert iocs["urls"] == ["http://foo.youtube/test.php"]
+    assert iocs["domains"] == ["foo.youtube"]
 
 
 def test_ioc_deduplication():
     """Make sure the results returned from the ioc_finder are deduplicated."""
-    iocs = find_iocs('example.com example.com')
-    assert iocs['domains'] == ['example.com']
+    iocs = find_iocs("example.com example.com")
+    assert iocs["domains"] == ["example.com"]
 
 
 def test_file_hash_order():
-    s = "{} {}".format('a' * 32, 'b' * 40)
+    s = "{} {}".format("a" * 32, "b" * 40)
     iocs = find_iocs(s)
-    assert iocs['md5s'][0] == 'a' * 32
-    assert iocs['sha1s'][0] == 'b' * 40
+    assert iocs["md5s"][0] == "a" * 32
+    assert iocs["sha1s"][0] == "b" * 40
 
 
 def test_file_hash_parsing():
-    s = 'this is a test{}'.format('a' * 32)
+    s = "this is a test{}".format("a" * 32)
     iocs = find_iocs(s)
-    assert iocs['md5s'] == []
+    assert iocs["md5s"] == []
 
-    s = 'this is a test {}'.format('a' * 32)
+    s = "this is a test {}".format("a" * 32)
     iocs = find_iocs(s)
-    assert iocs['md5s'] == ['a' * 32]
+    assert iocs["md5s"] == ["a" * 32]
 
-    s = 'this is a test "{}"'.format('a' * 32)
+    s = 'this is a test "{}"'.format("a" * 32)
     iocs = find_iocs(s)
-    assert iocs['md5s'] == ['a' * 32]
+    assert iocs["md5s"] == ["a" * 32]
 
-    s = 'this is a test {}.'.format('a' * 32)
+    s = "this is a test {}.".format("a" * 32)
     iocs = find_iocs(s)
-    assert iocs['md5s'] == ['a' * 32]
+    assert iocs["md5s"] == ["a" * 32]
 
-    s = '0x1a1db93766e31994507511c9c70a1dd94465cf6d'
+    s = "0x1a1db93766e31994507511c9c70a1dd94465cf6d"
     iocs = find_iocs(s)
-    assert iocs['sha1s'] == ['1a1db93766e31994507511c9c70a1dd94465cf6d']
+    assert iocs["sha1s"] == ["1a1db93766e31994507511c9c70a1dd94465cf6d"]
 
 
 def test_url_boundaries():
     """Make sure the boundaries for a url are correct."""
     s = """http://192.168.0.1/test/bad.html</a><br></div>"""
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['http://192.168.0.1/test/bad.html']
+    assert iocs["urls"] == ["http://192.168.0.1/test/bad.html"]
 
     s = """<IMg SRc="https://i.imgur.com/abc.png#4827766048"/><br>
 <IMg SRc="https://i.imgur.com/def.png#4827766048"/><br>"""
     iocs = find_iocs(s)
-    assert 'https://i.imgur.com/abc.png#4827766048' in iocs['urls']
-    assert 'https://i.imgur.com/def.png#4827766048' in iocs['urls']
-    assert len(iocs['urls']) == 2
+    assert "https://i.imgur.com/abc.png#4827766048" in iocs["urls"]
+    assert "https://i.imgur.com/def.png#4827766048" in iocs["urls"]
+    assert len(iocs["urls"]) == 2
 
     s = """<IMg SRc="https://i.imgur.com/abc.png"/><br>"""
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['https://i.imgur.com/abc.png']
+    assert iocs["urls"] == ["https://i.imgur.com/abc.png"]
 
     s = """(https://i.imgur.com/abc.png)"""
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['https://i.imgur.com/abc.png']
+    assert iocs["urls"] == ["https://i.imgur.com/abc.png"]
 
     s = """(https://i.imgur.com/abc.png#abc)"""
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['https://i.imgur.com/abc.png#abc']
+    assert iocs["urls"] == ["https://i.imgur.com/abc.png#abc"]
 
     s = """[https://i.imgur.com/abc.png](https://i.imgur.com/abc.png)"""
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['https://i.imgur.com/abc.png']
+    assert iocs["urls"] == ["https://i.imgur.com/abc.png"]
 
     s = """[https://i.imgur.com/abc.png#abc](https://i.imgur.com/abc.png#abc)"""
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['https://i.imgur.com/abc.png#abc']
+    assert iocs["urls"] == ["https://i.imgur.com/abc.png#abc"]
 
 
 def test_domain_parsing():
     s = "Host: dfasdfa (mz-fcb301p.ocn.ad.jp asdfsdafs"
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['mz-fcb301p.ocn.ad.jp']
+    assert iocs["domains"] == ["mz-fcb301p.ocn.ad.jp"]
 
     s = "smtp.mailfrom"
     iocs = find_iocs(s)
-    assert iocs['domains'] == []
+    assert iocs["domains"] == []
 
     s = "bar.com"
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
 
     s = 'bar.com"'
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
 
     s = "bar.com'"
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
 
     s = "bar.com."
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
 
     # make sure domains of different casings are properly parsed: https://github.com/fhightower/ioc-finder/issues/47
     iocs = find_iocs("BAR.com")
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
     iocs = find_iocs("bar.COM")
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
     iocs = find_iocs("BAR.COM")
-    assert iocs['domains'] == ['bar.com']
+    assert iocs["domains"] == ["bar.com"]
 
 
 def test_email_address_parsing():
     s = 'my email is: foo"bar@gmail.com'
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['foo"bar@gmail.com']
-    assert iocs['email_addresses'] == ['bar@gmail.com']
+    assert iocs["email_addresses_complete"] == ['foo"bar@gmail.com']
+    assert iocs["email_addresses"] == ["bar@gmail.com"]
 
-    s = 'Abc\\@def@example.com'
+    s = "Abc\\@def@example.com"
     iocs = find_iocs(s)
-    print(iocs['email_addresses_complete'])
-    print(iocs['email_addresses'])
-    assert iocs['email_addresses_complete'] == ['Abc\\@def@example.com']
-    assert iocs['email_addresses'] == ['def@example.com']
+    print(iocs["email_addresses_complete"])
+    print(iocs["email_addresses"])
+    assert iocs["email_addresses_complete"] == ["Abc\\@def@example.com"]
+    assert iocs["email_addresses"] == ["def@example.com"]
 
     s = 'foobar@gmail.com"'
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['foobar@gmail.com']
-    assert iocs['email_addresses'] == ['foobar@gmail.com']
+    assert iocs["email_addresses_complete"] == ["foobar@gmail.com"]
+    assert iocs["email_addresses"] == ["foobar@gmail.com"]
 
-    s = 'foobar@gmail.comahhhhhhhh'
+    s = "foobar@gmail.comahhhhhhhh"
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == []
-    assert iocs['email_addresses'] == []
+    assert iocs["email_addresses_complete"] == []
+    assert iocs["email_addresses"] == []
 
     s = '"foobar@gmail.com'
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['"foobar@gmail.com']
-    assert iocs['email_addresses'] == ['foobar@gmail.com']
+    assert iocs["email_addresses_complete"] == ['"foobar@gmail.com']
+    assert iocs["email_addresses"] == ["foobar@gmail.com"]
 
-    s = 'smtp.mailfrom=example@example.com'
+    s = "smtp.mailfrom=example@example.com"
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['smtp.mailfrom=example@example.com']
-    assert iocs['email_addresses'] == ['example@example.com']
+    assert iocs["email_addresses_complete"] == ["smtp.mailfrom=example@example.com"]
+    assert iocs["email_addresses"] == ["example@example.com"]
 
     s = '"foo@bar.com"'
     iocs = find_iocs(s)
-    assert iocs['email_addresses_complete'] == ['"foo@bar.com']
-    assert iocs['email_addresses'] == ['foo@bar.com']
+    assert iocs["email_addresses_complete"] == ['"foo@bar.com']
+    assert iocs["email_addresses"] == ["foo@bar.com"]
 
     # making sure that the `parse_domain_from_email_address` argument is working properly
-    s = 'foo@bar.com.'
+    s = "foo@bar.com."
     iocs = find_iocs(s, parse_domain_from_email_address=False)
-    assert iocs['email_addresses'] == ['foo@bar.com']
-    assert iocs['domains'] == []
+    assert iocs["email_addresses"] == ["foo@bar.com"]
+    assert iocs["domains"] == []
 
     s = '"foo@bar.com'
     iocs = find_iocs(s)
-    assert iocs['email_addresses'] == ['foo@bar.com']
+    assert iocs["email_addresses"] == ["foo@bar.com"]
 
     # validating https://github.com/fhightower/ioc-finder/issues/40 is fixed
-    s = '-----foo@bar.com'
+    s = "-----foo@bar.com"
     iocs = find_iocs(s)
-    assert iocs['email_addresses'] == ['foo@bar.com']
+    assert iocs["email_addresses"] == ["foo@bar.com"]
 
-    s = 'foo-burt@bar.com f-1@bar.com'
+    s = "foo-burt@bar.com f-1@bar.com"
     iocs = find_iocs(s)
-    assert len(iocs['email_addresses']) == 2
-    assert 'foo-burt@bar.com' in iocs['email_addresses']
-    assert 'f-1@bar.com' in iocs['email_addresses']
+    assert len(iocs["email_addresses"]) == 2
+    assert "foo-burt@bar.com" in iocs["email_addresses"]
+    assert "f-1@bar.com" in iocs["email_addresses"]
 
 
 def test_erroneous_ip_address_parsing():
     # the two tests below make sure that IP addresses are not parsed from strings with decimals in them
-    s = '2018.12.15.14.05.43'
+    s = "2018.12.15.14.05.43"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '111.12.15.14.05.43'
+    s = "111.12.15.14.05.43"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '.18.12.15.14'
+    s = ".18.12.15.14"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '18.12.15.1411111111'
+    s = "18.12.15.1411111111"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '018.12.15.14'
+    s = "018.12.15.14"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['18.12.15.14']
+    assert iocs["ipv4s"] == ["18.12.15.14"]
 
-    s = '18.12.15.14.'
+    s = "18.12.15.14."
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['18.12.15.14']
+    assert iocs["ipv4s"] == ["18.12.15.14"]
 
     # the three tests below make sure that IP addresses are not parsed from sequences with large numbers in them
-    s = '1112.15.14.05'
+    s = "1112.15.14.05"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '15.1112.14.05'
+    s = "15.1112.14.05"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '15.14.05.1112'
+    s = "15.14.05.1112"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
 
 def test_ip_address_systematically():
     # TODO: for many of the assertions below, I would like to be more explicit; I would like to change tests like `len(iocs['ipv4s']) == 1` to `iocs['ipv4s'] == ['1.1.1.1']`
-    s = '1.1.1.1'
+    s = "1.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['1.1.1.1']
+    assert iocs["ipv4s"] == ["1.1.1.1"]
 
-    s = '.1.1.1.1'
+    s = ".1.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
     # I would like to match in this situation to capture ip address that are at the end of a sentence
-    s = '1.1.1.1.'
+    s = "1.1.1.1."
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['1.1.1.1']
+    assert iocs["ipv4s"] == ["1.1.1.1"]
 
-    s = '.1.1.1.1.'
+    s = ".1.1.1.1."
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '1.1.1.1.1'
+    s = "1.1.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '.1.1.1.1.1'
+    s = ".1.1.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '1.1.1.1.1.'
+    s = "1.1.1.1.1."
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '.1.1.1.1.1.'
+    s = ".1.1.1.1.1."
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '1.1.1.1.1.1'
+    s = "1.1.1.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '1.1.1.1.a'
+    s = "1.1.1.1.a"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
-    s = '1.01.1.1'
+    s = "1.01.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['1.1.1.1']
+    assert iocs["ipv4s"] == ["1.1.1.1"]
 
-    s = '01.1.1.1'
+    s = "01.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['1.1.1.1']
+    assert iocs["ipv4s"] == ["1.1.1.1"]
 
-    s = '01.01.1.1'
+    s = "01.01.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == ['1.1.1.1']
+    assert iocs["ipv4s"] == ["1.1.1.1"]
 
-    s = '0001.1.1.1'
+    s = "0001.1.1.1"
     iocs = find_iocs(s)
-    assert iocs['ipv4s'] == []
+    assert iocs["ipv4s"] == []
 
 
 def test_onion_parsing():
-    s = 'foo.onion'
+    s = "foo.onion"
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['foo.onion']
+    assert iocs["domains"] == ["foo.onion"]
 
-    s = 'http://foo.onion/test'
+    s = "http://foo.onion/test"
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['http://foo.onion/test']
-    assert iocs['domains'] == ['foo.onion']
+    assert iocs["urls"] == ["http://foo.onion/test"]
+    assert iocs["domains"] == ["foo.onion"]
 
 
 def test_deduplication_of_indicators_with_different_cases():
-    s = 'example.com Example.com exAmplE.com'
+    s = "example.com Example.com exAmplE.com"
     iocs = find_iocs(s)
-    assert iocs['domains'] == ['example.com']
+    assert iocs["domains"] == ["example.com"]
 
-    s = 'bad@example.com bad@Example.com bad@exAmplE.com'
+    s = "bad@example.com bad@Example.com bad@exAmplE.com"
     iocs = find_iocs(s)
-    assert iocs['email_addresses'] == ['bad@example.com']
+    assert iocs["email_addresses"] == ["bad@example.com"]
 
-    s = 'bad@example.com Bad@example.com'
+    s = "bad@example.com Bad@example.com"
     iocs = find_iocs(s)
-    assert iocs['email_addresses'] == ['bad@example.com']
+    assert iocs["email_addresses"] == ["bad@example.com"]
 
-    s = 'http://example.com/test http://EXAMple.com/test'
+    s = "http://example.com/test http://EXAMple.com/test"
     iocs = find_iocs(s)
-    assert iocs['urls'] == ['http://example.com/test']
+    assert iocs["urls"] == ["http://example.com/test"]
 
-    s = 'http://example.com/test http://EXAMple.com/TEST'
+    s = "http://example.com/test http://EXAMple.com/TEST"
     iocs = find_iocs(s)
-    assert len(iocs['urls']) == 2
-    assert 'http://example.com/test' in iocs['urls']
-    assert 'http://example.com/TEST' in iocs['urls']
+    assert len(iocs["urls"]) == 2
+    assert "http://example.com/test" in iocs["urls"]
+    assert "http://example.com/TEST" in iocs["urls"]
 
 
 def test_google_adsense_publisher_ids():
     s = "PUB-1234567891234567"
     iocs = find_iocs(s)
-    assert iocs['google_adsense_publisher_ids'] == ['pub-1234567891234567']
+    assert iocs["google_adsense_publisher_ids"] == ["pub-1234567891234567"]
 
     s = "pUb-1234567891234567"
     iocs = find_iocs(s)
-    assert iocs['google_adsense_publisher_ids'] == []
+    assert iocs["google_adsense_publisher_ids"] == []
 
 
 def test_google_analyitics_tracker_ids():
     s = "ua-000000-1"
     iocs = find_iocs(s)
-    assert iocs['google_analytics_tracker_ids'] == ['UA-000000-1']
+    assert iocs["google_analytics_tracker_ids"] == ["UA-000000-1"]
 
 
 def test_google_casing_deduplication():
     s = "pub-1234567891234567 PUB-1234567891234567 pUb-1234567891234567"
     iocs = find_iocs(s)
-    assert iocs['google_adsense_publisher_ids'] == ['pub-1234567891234567']
+    assert iocs["google_adsense_publisher_ids"] == ["pub-1234567891234567"]
 
     s = "UA-000000-1 ua-000000-1"
     iocs = find_iocs(s)
-    assert iocs['google_analytics_tracker_ids'] == ['UA-000000-1']
+    assert iocs["google_analytics_tracker_ids"] == ["UA-000000-1"]
 
 
 def test_not_parsing_imphash():
-    s = 'imphash 18ddf28a71089acdbab5038f58044c0a'
+    s = "imphash 18ddf28a71089acdbab5038f58044c0a"
     iocs = find_iocs(s, parse_imphashes=False)
-    assert 'imphashes' not in iocs
+    assert "imphashes" not in iocs
     # even if we aren't parsing imphashes, they will still be removed and, thus, not parsed as md5s
-    assert iocs['md5s'] == []
+    assert iocs["md5s"] == []
 
 
 def test_not_parsing_authentihash():
-    s = 'authentihash 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4'
+    s = "authentihash 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4"
     iocs = find_iocs(s, parse_authentihashes=False)
-    assert 'authentihashes' not in iocs
+    assert "authentihashes" not in iocs
     # even if we aren't parsing authentihashes, they will still be removed and, thus, not parsed as sha256s
-    assert iocs['sha256s'] == []
+    assert iocs["sha256s"] == []
 
 
 def test_mac_address_parsing():
-    s = '2019.02.15'
+    s = "2019.02.15"
     iocs = find_iocs(s)
-    assert iocs['mac_addresses'] == []
+    assert iocs["mac_addresses"] == []
 
 
 def test_unix_file_paths__not_detect_url():
     # https://github.com/fhightower/ioc-finder/issues/42
-    s = 'https://twitter.com/'
+    s = "https://twitter.com/"
     iocs = find_iocs(s)
-    assert iocs['file_paths'] == []
+    assert iocs["file_paths"] == []
 
 
 def test_ipv6_parsing():
     # https://github.com/fhightower/ioc-finder/issues/37
-    s = '11:04:10 -0500'
+    s = "11:04:10 -0500"
     iocs = find_iocs(s)
-    assert iocs['ipv6s'] == []
+    assert iocs["ipv6s"] == []
 
 
 def test_ssdeep_parsing():
     # https://github.com/fhightower/ioc-finder/issues/36
-    s = '11:04:10 -0500'
+    s = "11:04:10 -0500"
     iocs = find_iocs(s)
-    assert iocs['ssdeeps'] == []
+    assert iocs["ssdeeps"] == []
 
 
 def test_certificate_serial_number_issue_96():
     # see https://github.com/fhightower/ioc-finder/issues/96
-    s = '''SolarWinds.Orion.Core.BusinessLayer.dll is signed by SolarWinds, using the certificate with serial number 0f:e9:73:75:20:22:a6:06:ad:f2:a3:6e:34:5d:c0:ed. The file was signed on March 24, 2020.'''
+    s = """SolarWinds.Orion.Core.BusinessLayer.dll is signed by SolarWinds, using the certificate with serial number 0f:e9:73:75:20:22:a6:06:ad:f2:a3:6e:34:5d:c0:ed. The file was signed on March 24, 2020."""
     observables = find_iocs(s)
     print(observables)
-    assert observables['ipv6s'] == []
-    assert observables['mac_addresses'] == []
+    assert observables["ipv6s"] == []
+    assert observables["mac_addresses"] == []
diff --git a/tests/test_ioc_finder.py b/tests/test_ioc_finder.py
index c20eb36..43ca230 100644
--- a/tests/test_ioc_finder.py
+++ b/tests/test_ioc_finder.py
@@ -2,226 +2,226 @@
 
 
 def test_tlp_labels():
-    s = 'tlp amber and TLP:RED'
+    s = "tlp amber and TLP:RED"
     iocs = find_iocs(s)
-    assert len(iocs['tlp_labels']) == 2
-    assert 'TLP:RED' in iocs['tlp_labels']
-    assert 'TLP:AMBER' in iocs['tlp_labels']
+    assert len(iocs["tlp_labels"]) == 2
+    assert "TLP:RED" in iocs["tlp_labels"]
+    assert "TLP:AMBER" in iocs["tlp_labels"]
 
-    s = 'tlp-Amber and TLPRED TlpGreen'
+    s = "tlp-Amber and TLPRED TlpGreen"
     iocs = find_iocs(s)
-    assert len(iocs['tlp_labels']) == 3
-    assert 'TLP:RED' in iocs['tlp_labels']
-    assert 'TLP:AMBER' in iocs['tlp_labels']
-    assert 'TLP:GREEN' in iocs['tlp_labels']
+    assert len(iocs["tlp_labels"]) == 3
+    assert "TLP:RED" in iocs["tlp_labels"]
+    assert "TLP:AMBER" in iocs["tlp_labels"]
+    assert "TLP:GREEN" in iocs["tlp_labels"]
 
 
 def test_domain_parsing():
     s = "this is just a (google.com) test of example.com"
     iocs = find_iocs(s)
-    assert len(iocs['domains']) == 2
-    assert 'google.com' in iocs['domains']
+    assert len(iocs["domains"]) == 2
+    assert "google.com" in iocs["domains"]
 
 
 def test_ipv4_parsing():
     s = "this is just a (1.2.3.54) test of 255.255.1.255 255.256.344.1"
     iocs = find_iocs(s)
-    assert len(iocs['ipv4s']) == 2
-    assert '1.2.3.54' in iocs['ipv4s']
-    assert '255.255.1.255' in iocs['ipv4s']
-    assert '255.256.344.1' not in iocs['ipv4s']
+    assert len(iocs["ipv4s"]) == 2
+    assert "1.2.3.54" in iocs["ipv4s"]
+    assert "255.255.1.255" in iocs["ipv4s"]
+    assert "255.256.344.1" not in iocs["ipv4s"]
 
 
 def test_ipv6_parsing():
     s = "2001:0db8:0000:0000:0000:ff00:0042:8329 testing 2001:db8:0:0:0:ff00:42:8329 shfaldkafsdfa 2001:db8::ff00:42:8329 asdfadfas afkj;fl ::1 kljfkadf 1:1"
     iocs = find_iocs(s)
-    assert len(iocs['ipv6s']) == 4
+    assert len(iocs["ipv6s"]) == 4
     # TODO: the following 3 ipv6s addresses are the same representation of the same thing; I need to deduplicate these more thoroughly in the parsing function
-    assert '2001:0db8:0000:0000:0000:ff00:0042:8329' in iocs['ipv6s']
-    assert '2001:db8:0:0:0:ff00:42:8329' in iocs['ipv6s']
-    assert '2001:db8::ff00:42:8329' in iocs['ipv6s']
-    assert '::1' in iocs['ipv6s']
-    assert '1:1' not in iocs['ipv6s']
+    assert "2001:0db8:0000:0000:0000:ff00:0042:8329" in iocs["ipv6s"]
+    assert "2001:db8:0:0:0:ff00:42:8329" in iocs["ipv6s"]
+    assert "2001:db8::ff00:42:8329" in iocs["ipv6s"]
+    assert "::1" in iocs["ipv6s"]
+    assert "1:1" not in iocs["ipv6s"]
 
 
 def test_email_address_parsing():
     s = "test@a.com bingo@en.wikipedia.com foo@a.com'.format('a'*63 bar@b.a.com'.format('a'*63, 'a'*63 bad@test-ing.com me@2600.com john.smith(comment)@example.com (comment)john.smith@example.com \"John..Doe\"@example.com' test@[192.168.0.1]"
 
-    iocs = find_iocs(s)['email_addresses_complete']
+    iocs = find_iocs(s)["email_addresses_complete"]
     print(iocs)
     assert len(iocs) == 10
-    assert 'test@a.com' in iocs
-    assert 'bingo@en.wikipedia.com' in iocs
-    assert 'foo@a.com' in iocs
-    assert 'bar@b.a.com' in iocs
-    assert 'bad@test-ing.com' in iocs
-    assert 'me@2600.com' in iocs
-    assert 'john.smith(comment)@example.com' in iocs
-    assert '(comment)john.smith@example.com' in iocs
-    assert '\"John..Doe\"@example.com' in iocs
-    assert 'test@[192.168.0.1]' in iocs
+    assert "test@a.com" in iocs
+    assert "bingo@en.wikipedia.com" in iocs
+    assert "foo@a.com" in iocs
+    assert "bar@b.a.com" in iocs
+    assert "bad@test-ing.com" in iocs
+    assert "me@2600.com" in iocs
+    assert "john.smith(comment)@example.com" in iocs
+    assert "(comment)john.smith@example.com" in iocs
+    assert '"John..Doe"@example.com' in iocs
+    assert "test@[192.168.0.1]" in iocs
 
-    iocs = find_iocs('a@example.com')
-    assert iocs['email_addresses_complete'][0] == 'a@example.com'
+    iocs = find_iocs("a@example.com")
+    assert iocs["email_addresses_complete"][0] == "a@example.com"
 
 
 def test_complex_email_address_parsing():
-    s = 'john.smith(comment)@example.com'
+    s = "john.smith(comment)@example.com"
     iocs = find_iocs(s)
-    assert 'john.smith(comment)@example.com' in iocs['email_addresses_complete']
+    assert "john.smith(comment)@example.com" in iocs["email_addresses_complete"]
 
 
 def test_simple_email_address_parsing():
     s = "test@a.com bingo@en.wikipedia.com foo@a.com'.format('a'*63 bar@b.a.com'.format('a'*63, 'a'*63 bad@test-ing.com me@2600.com john.smith(comment)@example.com (comment)john.smith@example.com \"John..Doe\"@example.com' test@[192.168.0.1]"
 
     iocs = find_iocs(s)
-    assert len(iocs['email_addresses']) == 8
-    assert 'test@a.com' in iocs['email_addresses']
-    assert 'bingo@en.wikipedia.com' in iocs['email_addresses']
-    assert 'foo@a.com' in iocs['email_addresses']
-    assert 'bar@b.a.com' in iocs['email_addresses']
-    assert 'bad@test-ing.com' in iocs['email_addresses']
-    assert 'me@2600.com' in iocs['email_addresses']
-    assert 'john.smith@example.com' in iocs['email_addresses']
-    assert 'test@[192.168.0.1]' in iocs['email_addresses']
+    assert len(iocs["email_addresses"]) == 8
+    assert "test@a.com" in iocs["email_addresses"]
+    assert "bingo@en.wikipedia.com" in iocs["email_addresses"]
+    assert "foo@a.com" in iocs["email_addresses"]
+    assert "bar@b.a.com" in iocs["email_addresses"]
+    assert "bad@test-ing.com" in iocs["email_addresses"]
+    assert "me@2600.com" in iocs["email_addresses"]
+    assert "john.smith@example.com" in iocs["email_addresses"]
+    assert "test@[192.168.0.1]" in iocs["email_addresses"]
 
-    iocs = find_iocs('a@example.com')
-    assert iocs['email_addresses'][0] == 'a@example.com'
+    iocs = find_iocs("a@example.com")
+    assert iocs["email_addresses"][0] == "a@example.com"
 
 
 def test_url_parsing():
     invalid_urls = [
-        'foo@{}.com'.format('a' * 64),
-        '!@.com',
-        'foo@abc',
-        '@@@@-hi-.com',
-        '@_hi_.com',
-        'me@*hi*.com',
-        'foo{}.com'.format('a' * 64),
-        '.com',
-        'abc',
-        '-hi-.com',
-        '_hi_.com',
-        '*hi*.com',
+        "foo@{}.com".format("a" * 64),
+        "!@.com",
+        "foo@abc",
+        "@@@@-hi-.com",
+        "@_hi_.com",
+        "me@*hi*.com",
+        "foo{}.com".format("a" * 64),
+        ".com",
+        "abc",
+        "-hi-.com",
+        "_hi_.com",
+        "*hi*.com",
     ]
 
     valid_urls = [
-        'https://a.com',
-        'https://en.wikipedia.com',
-        'https://{}.com'.format('a' * 63),
-        'https://{}.{}.com'.format('a' * 63, 'a' * 63),
-        'https://test-ing.com',
-        'https://2600.com',
-        'https://example.com',
-        'http://example.com',
-        'ftp://example.com',
+        "https://a.com",
+        "https://en.wikipedia.com",
+        "https://{}.com".format("a" * 63),
+        "https://{}.{}.com".format("a" * 63, "a" * 63),
+        "https://test-ing.com",
+        "https://2600.com",
+        "https://example.com",
+        "http://example.com",
+        "ftp://example.com",
         'http://"John..Doe"@example.com',
-        'http://test@a.com',
-        'http://bingo@en.wikipedia.com',
-        'http://foo@{}.com'.format('a' * 63),
+        "http://test@a.com",
+        "http://bingo@en.wikipedia.com",
+        "http://foo@{}.com".format("a" * 63),
     ]
 
-    iocs = find_iocs(' '.join(valid_urls))
-    assert len(iocs['urls']) == 13
+    iocs = find_iocs(" ".join(valid_urls))
+    assert len(iocs["urls"]) == 13
     # make sure domains are being parsed from the valid urls as well
-    assert len(iocs['domains']) == 7
+    assert len(iocs["domains"]) == 7
 
-    iocs = find_iocs(' '.join(invalid_urls))
-    assert len(iocs['urls']) == 0
+    iocs = find_iocs(" ".join(invalid_urls))
+    assert len(iocs["urls"]) == 0
 
-    s = 'http://8pretgdl.r.us-east-1.awstrack.me/L0/http:%2F%2Fwww.excelgoodies.com%2Fexcel-vba-training-in-virginia%23course-content/1/0100016ed23f4bef-b14931bd-26f6-4130-9c37-c4f9902a771d-000000/mHJBuJ8D1RcIDE3jrWkdw4I9im4=138'
+    s = "http://8pretgdl.r.us-east-1.awstrack.me/L0/http:%2F%2Fwww.excelgoodies.com%2Fexcel-vba-training-in-virginia%23course-content/1/0100016ed23f4bef-b14931bd-26f6-4130-9c37-c4f9902a771d-000000/mHJBuJ8D1RcIDE3jrWkdw4I9im4=138"
     iocs = find_iocs(s)
-    print(iocs['urls'])
-    assert iocs['urls'] == [
-        'http://8pretgdl.r.us-east-1.awstrack.me/L0/http:%2F%2Fwww.excelgoodies.com%2Fexcel-vba-training-in-virginia%23course-content/1/0100016ed23f4bef-b14931bd-26f6-4130-9c37-c4f9902a771d-000000/mHJBuJ8D1RcIDE3jrWkdw4I9im4=138'
+    print(iocs["urls"])
+    assert iocs["urls"] == [
+        "http://8pretgdl.r.us-east-1.awstrack.me/L0/http:%2F%2Fwww.excelgoodies.com%2Fexcel-vba-training-in-virginia%23course-content/1/0100016ed23f4bef-b14931bd-26f6-4130-9c37-c4f9902a771d-000000/mHJBuJ8D1RcIDE3jrWkdw4I9im4=138"
     ]
 
-    s = 'https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection'
+    s = "https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection"
     iocs = find_iocs(s)
-    assert iocs['sha256s'] == ['2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862']
+    assert iocs["sha256s"] == ["2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862"]
 
     # this was implemented for https://github.com/fhightower/ioc-finder/issues/87
-    s = 'https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection'
+    s = "https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection"
     iocs = find_iocs(s, parse_from_url_path=False)
-    assert iocs['sha256s'] == []
+    assert iocs["sha256s"] == []
 
     # this was implemented for https://github.com/fhightower/ioc-finder/issues/87
-    s = 'https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection'
+    s = "https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection"
     iocs = find_iocs(s, parse_from_url_path=False, parse_urls_without_scheme=False)
-    assert iocs['urls'] == [
-        'https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection'
+    assert iocs["urls"] == [
+        "https://www.virustotal.com/gui/file/2f3ec0e4998909bb0efab13c82d30708ca9f88679e42b75ef13ea0466951d862/detection"
     ]
-    assert iocs['sha256s'] == []
+    assert iocs["sha256s"] == []
 
 
 def test_file_hash_parsing():
-    s = "{} {} {} {} {}".format('A' * 32, 'a' * 32, 'b' * 40, 'c' * 64, 'd' * 128)
+    s = "{} {} {} {} {}".format("A" * 32, "a" * 32, "b" * 40, "c" * 64, "d" * 128)
     iocs = find_iocs(s)
-    assert len(iocs['md5s']) == 1
-    assert len(iocs['sha1s']) == 1
-    assert len(iocs['sha256s']) == 1
-    assert len(iocs['sha512s']) == 1
+    assert len(iocs["md5s"]) == 1
+    assert len(iocs["sha1s"]) == 1
+    assert len(iocs["sha256s"]) == 1
+    assert len(iocs["sha512s"]) == 1
 
 
 def test_cve_parsing():
     s = "cve-2014-1000 cve 2014-1001 cve-1999-1002 CVE 2999-1003 CVE 1928-1004"
     iocs = find_iocs(s)
-    assert len(iocs['cves']) == 5
-    assert 'CVE-2014-1000' in iocs['cves']
-    assert 'CVE-2014-1001' in iocs['cves']
-    assert 'CVE-1999-1002' in iocs['cves']
-    assert 'CVE-2999-1003' in iocs['cves']
-    assert 'CVE-1928-1004' in iocs['cves']
+    assert len(iocs["cves"]) == 5
+    assert "CVE-2014-1000" in iocs["cves"]
+    assert "CVE-2014-1001" in iocs["cves"]
+    assert "CVE-1999-1002" in iocs["cves"]
+    assert "CVE-2999-1003" in iocs["cves"]
+    assert "CVE-1928-1004" in iocs["cves"]
 
 
 def test_ipv4_cidr_parsing():
     s = "1.2.3.4/0 1.2.3.4/10 1.2.3.4/20 1.2.3.4/32"
     iocs = find_iocs(s)
-    assert len(iocs['ipv4_cidrs']) == 4
-    assert '1.2.3.4/0' in iocs['ipv4_cidrs']
-    assert '1.2.3.4/10' in iocs['ipv4_cidrs']
-    assert '1.2.3.4/20' in iocs['ipv4_cidrs']
-    assert '1.2.3.4/32' in iocs['ipv4_cidrs']
+    assert len(iocs["ipv4_cidrs"]) == 4
+    assert "1.2.3.4/0" in iocs["ipv4_cidrs"]
+    assert "1.2.3.4/10" in iocs["ipv4_cidrs"]
+    assert "1.2.3.4/20" in iocs["ipv4_cidrs"]
+    assert "1.2.3.4/32" in iocs["ipv4_cidrs"]
 
     s = "1.2.3.4/0 1.2.3.4/10 1.2.3.4/20 1.2.3.4/32"
     iocs = find_iocs(s, parse_address_from_cidr=False)
-    assert len(iocs['ipv4_cidrs']) == 4
-    assert len(iocs['ipv4s']) == 0
+    assert len(iocs["ipv4_cidrs"]) == 4
+    assert len(iocs["ipv4s"]) == 0
 
 
 def test_registry_key_parsing():
     s = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows HKLM\Software\Microsoft\Windows HKCC\Software\Microsoft\Windows"
     iocs = find_iocs(s)
-    assert len(iocs['registry_key_paths']) == 3
-    assert 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows' in iocs['registry_key_paths']
-    assert 'HKLM\Software\Microsoft\Windows' in iocs['registry_key_paths']
-    assert 'HKCC\Software\Microsoft\Windows' in iocs['registry_key_paths']
+    assert len(iocs["registry_key_paths"]) == 3
+    assert "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows" in iocs["registry_key_paths"]
+    assert "HKLM\Software\Microsoft\Windows" in iocs["registry_key_paths"]
+    assert "HKCC\Software\Microsoft\Windows" in iocs["registry_key_paths"]
 
 
 def test_adsense_publisher_id_parsing():
     s = "pub-1234567891234567"
     iocs = find_iocs(s)
-    assert len(iocs['google_adsense_publisher_ids']) == 1
-    iocs['google_adsense_publisher_ids'][0] == 'pub-1234567891234567'
+    assert len(iocs["google_adsense_publisher_ids"]) == 1
+    iocs["google_adsense_publisher_ids"][0] == "pub-1234567891234567"
 
     s = "pub-1234567891234567 pub-9383614236930773"
     iocs = find_iocs(s)
-    assert len(iocs['google_adsense_publisher_ids']) == 2
-    assert 'pub-1234567891234567' in iocs['google_adsense_publisher_ids']
-    assert 'pub-9383614236930773' in iocs['google_adsense_publisher_ids']
+    assert len(iocs["google_adsense_publisher_ids"]) == 2
+    assert "pub-1234567891234567" in iocs["google_adsense_publisher_ids"]
+    assert "pub-9383614236930773" in iocs["google_adsense_publisher_ids"]
 
 
 def test_analytics_publisher_id_parsing():
     s = "UA-000000-2"
     iocs = find_iocs(s)
-    assert len(iocs['google_analytics_tracker_ids']) == 1
-    assert iocs['google_analytics_tracker_ids'][0] == 'UA-000000-2'
+    assert len(iocs["google_analytics_tracker_ids"]) == 1
+    assert iocs["google_analytics_tracker_ids"][0] == "UA-000000-2"
 
     s = "UA-000000-2 UA-00000000-99"
     iocs = find_iocs(s)
-    assert len(iocs['google_analytics_tracker_ids']) == 2
-    assert 'UA-000000-2' in iocs['google_analytics_tracker_ids']
-    assert 'UA-00000000-99' in iocs['google_analytics_tracker_ids']
+    assert len(iocs["google_analytics_tracker_ids"]) == 2
+    assert "UA-000000-2" in iocs["google_analytics_tracker_ids"]
+    assert "UA-00000000-99" in iocs["google_analytics_tracker_ids"]
 
 
 def test_bitcoin_parsing():
@@ -229,68 +229,68 @@ def test_bitcoin_parsing():
 P2SH type starting with the number 3, eg: 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy.
 Bech32 type starting with bc1, eg: bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"""
     iocs = find_iocs(s)
-    assert len(iocs['bitcoin_addresses']) == 3
-    assert '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2' in iocs['bitcoin_addresses']
-    assert '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy' in iocs['bitcoin_addresses']
-    assert 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq' in iocs['bitcoin_addresses']
+    assert len(iocs["bitcoin_addresses"]) == 3
+    assert "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2" in iocs["bitcoin_addresses"]
+    assert "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy" in iocs["bitcoin_addresses"]
+    assert "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq" in iocs["bitcoin_addresses"]
 
 
 def test_xmpp_address_parsing():
     s = """foo@swissjabber.de bar@jabber.zone bom@jabber.sow.as me@example.com"""
     iocs = find_iocs(s)
-    assert len(iocs['xmpp_addresses']) == 3
-    assert 'foo@swissjabber.de' in iocs['xmpp_addresses']
-    assert 'bar@jabber.zone' in iocs['xmpp_addresses']
-    assert 'bom@jabber.sow.as' in iocs['xmpp_addresses']
-    assert len(iocs['domains']) == 4
+    assert len(iocs["xmpp_addresses"]) == 3
+    assert "foo@swissjabber.de" in iocs["xmpp_addresses"]
+    assert "bar@jabber.zone" in iocs["xmpp_addresses"]
+    assert "bom@jabber.sow.as" in iocs["xmpp_addresses"]
+    assert len(iocs["domains"]) == 4
     # make sure the xmpp addresses are not also parsed as email addresses
-    assert len(iocs['email_addresses']) == 1
+    assert len(iocs["email_addresses"]) == 1
 
     iocs = find_iocs(s, parse_domain_name_from_xmpp_address=False)
-    assert len(iocs['xmpp_addresses']) == 3
-    assert 'foo@swissjabber.de' in iocs['xmpp_addresses']
-    assert 'bar@jabber.zone' in iocs['xmpp_addresses']
-    assert 'bom@jabber.sow.as' in iocs['xmpp_addresses']
-    assert len(iocs['domains']) == 1
+    assert len(iocs["xmpp_addresses"]) == 3
+    assert "foo@swissjabber.de" in iocs["xmpp_addresses"]
+    assert "bar@jabber.zone" in iocs["xmpp_addresses"]
+    assert "bom@jabber.sow.as" in iocs["xmpp_addresses"]
+    assert len(iocs["domains"]) == 1
     # make sure the xmpp addresses are not also parsed as email addresses
-    assert len(iocs['email_addresses']) == 1
+    assert len(iocs["email_addresses"]) == 1
 
 
 def test_mac_address_parsing():
-    s = 'AA-F2-C9-A6-B3-4F AB:F2:C9:A6:B3:4F ACF2.C9A6.B34F'
+    s = "AA-F2-C9-A6-B3-4F AB:F2:C9:A6:B3:4F ACF2.C9A6.B34F"
 
     iocs = find_iocs(s)
-    assert len(iocs['mac_addresses']) == 3
-    assert 'AA-F2-C9-A6-B3-4F' in iocs['mac_addresses']
-    assert 'AB:F2:C9:A6:B3:4F' in iocs['mac_addresses']
-    assert 'ACF2.C9A6.B34F' in iocs['mac_addresses']
+    assert len(iocs["mac_addresses"]) == 3
+    assert "AA-F2-C9-A6-B3-4F" in iocs["mac_addresses"]
+    assert "AB:F2:C9:A6:B3:4F" in iocs["mac_addresses"]
+    assert "ACF2.C9A6.B34F" in iocs["mac_addresses"]
 
     # same thing, just lower-case
-    s = 'aa-f2-c9-a6-b3-4f ab:f2:c9:a6:b3:4f acf2.c9a6.b34f'
+    s = "aa-f2-c9-a6-b3-4f ab:f2:c9:a6:b3:4f acf2.c9a6.b34f"
     iocs = find_iocs(s)
-    assert len(iocs['mac_addresses']) == 3
-    assert 'aa-f2-c9-a6-b3-4f' in iocs['mac_addresses']
-    assert 'ab:f2:c9:a6:b3:4f' in iocs['mac_addresses']
-    assert 'acf2.c9a6.b34f' in iocs['mac_addresses']
+    assert len(iocs["mac_addresses"]) == 3
+    assert "aa-f2-c9-a6-b3-4f" in iocs["mac_addresses"]
+    assert "ab:f2:c9:a6:b3:4f" in iocs["mac_addresses"]
+    assert "acf2.c9a6.b34f" in iocs["mac_addresses"]
 
 
 def test_ssdeep_parsing():
     s = "1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U"
     iocs = find_iocs(s)
-    assert len(iocs['ssdeeps']) == 1
-    assert iocs['ssdeeps'][0] == '1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U'
+    assert len(iocs["ssdeeps"]) == 1
+    assert iocs["ssdeeps"][0] == "1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U"
 
     s = "ahdfadsfa 1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U,000/000/000000001 adfasf"
     iocs = find_iocs(s)
-    assert len(iocs['ssdeeps']) == 1
-    assert iocs['ssdeeps'][0] == '1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U'
+    assert len(iocs["ssdeeps"]) == 1
+    assert iocs["ssdeeps"][0] == "1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U"
 
     s = """c2b257868686c861d43c6cf3de146b8812778c8283f7d
 Threat  Zepakab/Zebrocy Downloader
 ssdeep  12288:QYV6MorX7qzuC3QHO9FQVHPF51jgcSj2EtPo/V7I6R+Lqaw8i6hG0:vBXu9HGaVHh4Po/VU6RkqaQ6F"""
     iocs = find_iocs(s)
-    assert len(iocs['ssdeeps']) == 1
-    assert iocs['ssdeeps'][0] == '12288:QYV6MorX7qzuC3QHO9FQVHPF51jgcSj2EtPo/V7I6R+Lqaw8i6hG0:vBXu9HGaVHh4Po/VU6RkqaQ6F'
+    assert len(iocs["ssdeeps"]) == 1
+    assert iocs["ssdeeps"][0] == "12288:QYV6MorX7qzuC3QHO9FQVHPF51jgcSj2EtPo/V7I6R+Lqaw8i6hG0:vBXu9HGaVHh4Po/VU6RkqaQ6F"
 
     s = """393216:EW/eKCo9QgoHfHYebwoyC0QStQYEb+G8j3wfVOglnimQyCK+mteYREDWXKF2b:MKg3lbwoyCnCkNHlnimfCSQx8b,"000/000/000000001"
 196608:AGSE26mYSK0iwH8HW9TDl0vnvCZwZEkzzeap7R:Ak28siwH8eRSn25k3eg,"000/000/000000002"
@@ -302,131 +302,131 @@ def test_ssdeep_parsing():
 24:N8Rw5AF4REesFtPP6k216xoWya1oxOKHHwa8peRK8FdigZY5tODrRRK8RfMfde8:N8Rw5AF4+XPyooa2EKnwaGeRJFYpfwzQ,"000/000/000000008"
 1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U,"000/000/000000009"""
     iocs = find_iocs(s)
-    assert len(iocs['ssdeeps']) == 9
+    assert len(iocs["ssdeeps"]) == 9
     assert (
-        '393216:EW/eKCo9QgoHfHYebwoyC0QStQYEb+G8j3wfVOglnimQyCK+mteYREDWXKF2b:MKg3lbwoyCnCkNHlnimfCSQx8b'
-        in iocs['ssdeeps']
+        "393216:EW/eKCo9QgoHfHYebwoyC0QStQYEb+G8j3wfVOglnimQyCK+mteYREDWXKF2b:MKg3lbwoyCnCkNHlnimfCSQx8b"
+        in iocs["ssdeeps"]
     )
-    assert '196608:AGSE26mYSK0iwH8HW9TDl0vnvCZwZEkzzeap7R:Ak28siwH8eRSn25k3eg' in iocs['ssdeeps']
+    assert "196608:AGSE26mYSK0iwH8HW9TDl0vnvCZwZEkzzeap7R:Ak28siwH8eRSn25k3eg" in iocs["ssdeeps"]
     assert (
-        '98304:O1OCzezOgr4XMP7Af0+Kh7MzplFKuu5XcS9QnCD/VWR6yf4OB6S/mwRTwjf0ih87:k/Y4XMT7YguEXqCD/VWR6yf4Ux/mwR0S'
-        in iocs['ssdeeps']
+        "98304:O1OCzezOgr4XMP7Af0+Kh7MzplFKuu5XcS9QnCD/VWR6yf4OB6S/mwRTwjf0ih87:k/Y4XMT7YguEXqCD/VWR6yf4Ux/mwR0S"
+        in iocs["ssdeeps"]
     )
-    assert '96:ukILJhn54RewghSib4xGEHVLFNs+4tihJW6jJenUQrsIvpMMjUg:uk0Jx54usxJHh4gJrJenUQrs2pvIg' in iocs['ssdeeps']
+    assert "96:ukILJhn54RewghSib4xGEHVLFNs+4tihJW6jJenUQrsIvpMMjUg:uk0Jx54usxJHh4gJrJenUQrs2pvIg" in iocs["ssdeeps"]
     assert (
-        '196608:rNI4QlKQbWQobu0u3QRBBibfv+Z4Hjy5M+IjunAadLLtt42fAtQSqFhx:rNkK2obu0uBb3K4H28yAGc4RSax' in iocs['ssdeeps']
+        "196608:rNI4QlKQbWQobu0u3QRBBibfv+Z4Hjy5M+IjunAadLLtt42fAtQSqFhx:rNkK2obu0uBb3K4H28yAGc4RSax" in iocs["ssdeeps"]
     )
     assert (
-        '1536:mFbhArcCMbR0S/kjzU6El4mUIR2JPmvY3lpKa38fTXcTns+b3tfZyCLtRs:obNCMbWpU6SzFAPV3lpCjCsQRZyQt6'
-        in iocs['ssdeeps']
+        "1536:mFbhArcCMbR0S/kjzU6El4mUIR2JPmvY3lpKa38fTXcTns+b3tfZyCLtRs:obNCMbWpU6SzFAPV3lpCjCsQRZyQt6"
+        in iocs["ssdeeps"]
     )
     assert (
-        '48:CScrEd3jk5BsRSFCWfVsEWABbbpnWSgSX45dc6b5Qla9A+o5R6k7CyNRD5J:XcrEdzHRSFr9sE7XnsDe1CyNRNJ' in iocs['ssdeeps']
+        "48:CScrEd3jk5BsRSFCWfVsEWABbbpnWSgSX45dc6b5Qla9A+o5R6k7CyNRD5J:XcrEdzHRSFr9sE7XnsDe1CyNRNJ" in iocs["ssdeeps"]
     )
     assert (
-        '24:N8Rw5AF4REesFtPP6k216xoWya1oxOKHHwa8peRK8FdigZY5tODrRRK8RfMfde8:N8Rw5AF4+XPyooa2EKnwaGeRJFYpfwzQ'
-        in iocs['ssdeeps']
+        "24:N8Rw5AF4REesFtPP6k216xoWya1oxOKHHwa8peRK8FdigZY5tODrRRK8RfMfde8:N8Rw5AF4+XPyooa2EKnwaGeRJFYpfwzQ"
+        in iocs["ssdeeps"]
     )
-    assert '1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U' in iocs['ssdeeps']
+    assert "1536:yB+A8bMtMeRlbIzvDqZL4QzNxVDm+5gt+M2hDDDvNZ3YZ7sU:N4tMsbOGcyrV6BQvnoZ4U" in iocs["ssdeeps"]
 
 
 def test_imphash_parsing():
-    names = ['imphash', 'import hash']
+    names = ["imphash", "import hash"]
     templates = [
         """SHA-256 093e394933c4545ba7019f511961b9a5ab91156cf791f45de074acad03d1a44a
 Dropper {}: 18ddf28a71089acdbab5038f58044c0a
 C2 IP: 210.209.127.8:443""",
-        '{}: 18ddf28a71089acdbab5038f58044c0a',
-        '{} 18ddf28a71089acdbab5038f58044c0a',
-        '{}  18ddf28a71089acdbab5038f58044c0a',
-        '{}:     18ddf28a71089acdbab5038f58044c0a',
-        '{}\t18ddf28a71089acdbab5038f58044c0a',
-        '{}\n18ddf28a71089acdbab5038f58044c0a',
-        '{} - 18ddf28a71089acdbab5038f58044c0a',
+        "{}: 18ddf28a71089acdbab5038f58044c0a",
+        "{} 18ddf28a71089acdbab5038f58044c0a",
+        "{}  18ddf28a71089acdbab5038f58044c0a",
+        "{}:     18ddf28a71089acdbab5038f58044c0a",
+        "{}\t18ddf28a71089acdbab5038f58044c0a",
+        "{}\n18ddf28a71089acdbab5038f58044c0a",
+        "{} - 18ddf28a71089acdbab5038f58044c0a",
     ]
 
     for template in templates:
         for name in names:
             print(template)
             iocs = find_iocs(template.format(name))
-            assert len(iocs['imphashes']) == 1
-            assert iocs['imphashes'] == ['18ddf28a71089acdbab5038f58044c0a']
-            assert len(iocs['md5s']) == 0
+            assert len(iocs["imphashes"]) == 1
+            assert iocs["imphashes"] == ["18ddf28a71089acdbab5038f58044c0a"]
+            assert len(iocs["md5s"]) == 0
 
             iocs = find_iocs(template.format(name.upper()))
-            assert len(iocs['imphashes']) == 1
-            assert iocs['imphashes'] == ['18ddf28a71089acdbab5038f58044c0a']
-            assert len(iocs['md5s']) == 0
+            assert len(iocs["imphashes"]) == 1
+            assert iocs["imphashes"] == ["18ddf28a71089acdbab5038f58044c0a"]
+            assert len(iocs["md5s"]) == 0
 
 
 def test_authentihash():
-    names = ['authentihash']
+    names = ["authentihash"]
     templates = [
-        '{} 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{}   3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{}: 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{}:     3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{} - 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{}-3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{}\t3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
-        '{}\n3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4',
+        "{} 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{}   3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{}: 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{}:     3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{} - 3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{}-3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{}\t3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
+        "{}\n3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4",
     ]
 
     for template in templates:
         for name in names:
             print(template)
             iocs = find_iocs(template.format(name))
-            assert len(iocs['authentihashes']) == 1
-            assert iocs['authentihashes'] == ['3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4']
-            assert len(iocs['sha256s']) == 0
+            assert len(iocs["authentihashes"]) == 1
+            assert iocs["authentihashes"] == ["3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4"]
+            assert len(iocs["sha256s"]) == 0
 
             iocs = find_iocs(template.format(name.upper()))
-            assert len(iocs['authentihashes']) == 1
-            assert iocs['authentihashes'] == ['3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4']
-            assert len(iocs['sha256s']) == 0
+            assert len(iocs["authentihashes"]) == 1
+            assert iocs["authentihashes"] == ["3f1b149d07e7e8636636b8b7f7043c40ed64a10b28986181fb046c498432c2d4"]
+            assert len(iocs["sha256s"]) == 0
 
 
 def test_user_agents():
-    s = 'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)'
+    s = "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)"
     iocs = find_iocs(s)
-    assert len(iocs['user_agents']) == 1
-    assert iocs['user_agents'] == ['Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)']
+    assert len(iocs["user_agents"]) == 1
+    assert iocs["user_agents"] == ["Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)"]
 
-    s = 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.56 safari/535.11 mozilla/5.0 (windows nt 6.1; wow64; rv:11.0) gecko firefox/11.0'
+    s = "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.56 safari/535.11 mozilla/5.0 (windows nt 6.1; wow64; rv:11.0) gecko firefox/11.0"
     iocs = find_iocs(s)
-    assert len(iocs['user_agents']) == 2
+    assert len(iocs["user_agents"]) == 2
     assert (
-        'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.56 safari/535.11'
-        in iocs['user_agents']
+        "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.56 safari/535.11"
+        in iocs["user_agents"]
     )
-    assert 'mozilla/5.0 (windows nt 6.1; wow64; rv:11.0) gecko firefox/11.0' in iocs['user_agents']
+    assert "mozilla/5.0 (windows nt 6.1; wow64; rv:11.0) gecko firefox/11.0" in iocs["user_agents"]
 
     # test the same thing as above but with different casing to make sure the cases are matched and maintained properly
-    s = 'Mozilla/5.0 (Windows nt 6.1; wow64) Applewebkit/535.11 (khtml, like Gecko) Chrome/17.0.963.56 Safari/535.11 Mozilla/5.0 (Windows nt 6.1; wow64; rv:11.0) Gecko Firefox/11.0'
+    s = "Mozilla/5.0 (Windows nt 6.1; wow64) Applewebkit/535.11 (khtml, like Gecko) Chrome/17.0.963.56 Safari/535.11 Mozilla/5.0 (Windows nt 6.1; wow64; rv:11.0) Gecko Firefox/11.0"
     iocs = find_iocs(s)
-    assert len(iocs['user_agents']) == 2
+    assert len(iocs["user_agents"]) == 2
     assert (
-        'Mozilla/5.0 (Windows nt 6.1; wow64) Applewebkit/535.11 (khtml, like Gecko) Chrome/17.0.963.56 Safari/535.11'
-        in iocs['user_agents']
+        "Mozilla/5.0 (Windows nt 6.1; wow64) Applewebkit/535.11 (khtml, like Gecko) Chrome/17.0.963.56 Safari/535.11"
+        in iocs["user_agents"]
     )
-    assert 'Mozilla/5.0 (Windows nt 6.1; wow64; rv:11.0) Gecko Firefox/11.0' in iocs['user_agents']
+    assert "Mozilla/5.0 (Windows nt 6.1; wow64; rv:11.0) Gecko Firefox/11.0" in iocs["user_agents"]
 
 
 def test_monero_addresses():
     result = find_iocs(
-        '496aKKdqF1xQSSEzw7wNrkZkDUsCD5cSmNCfVhVgEps52WERBcLDGzdF5UugmFoHMm9xRJdewvK2TFfAJNwEV25rTcVF5Vp'
+        "496aKKdqF1xQSSEzw7wNrkZkDUsCD5cSmNCfVhVgEps52WERBcLDGzdF5UugmFoHMm9xRJdewvK2TFfAJNwEV25rTcVF5Vp"
     )
-    assert result['monero_addresses'] == [
-        '496aKKdqF1xQSSEzw7wNrkZkDUsCD5cSmNCfVhVgEps52WERBcLDGzdF5UugmFoHMm9xRJdewvK2TFfAJNwEV25rTcVF5Vp'
+    assert result["monero_addresses"] == [
+        "496aKKdqF1xQSSEzw7wNrkZkDUsCD5cSmNCfVhVgEps52WERBcLDGzdF5UugmFoHMm9xRJdewvK2TFfAJNwEV25rTcVF5Vp"
     ]
 
-    s = '49Bmp3SfddJRRGNW7GhHyAA2JgcYmZ4EGEix6p3eMNFCd15P2VsK9BHWcZWUNYF3nhf17MoRTRK4j5b7FUMA9zanSn9D3Nk 498s2XeKWYSEhQHGxdMULWdrpaKvSkDsq4855mCuksNL6ez2dk4mMQm8epbr9xvn5LgLPzD5uL9EGeRqWUdEZha1HmZqcyh'
+    s = "49Bmp3SfddJRRGNW7GhHyAA2JgcYmZ4EGEix6p3eMNFCd15P2VsK9BHWcZWUNYF3nhf17MoRTRK4j5b7FUMA9zanSn9D3Nk 498s2XeKWYSEhQHGxdMULWdrpaKvSkDsq4855mCuksNL6ez2dk4mMQm8epbr9xvn5LgLPzD5uL9EGeRqWUdEZha1HmZqcyh"
     result = find_iocs(s)
     assert (
-        '49Bmp3SfddJRRGNW7GhHyAA2JgcYmZ4EGEix6p3eMNFCd15P2VsK9BHWcZWUNYF3nhf17MoRTRK4j5b7FUMA9zanSn9D3Nk'
-        in result['monero_addresses']
+        "49Bmp3SfddJRRGNW7GhHyAA2JgcYmZ4EGEix6p3eMNFCd15P2VsK9BHWcZWUNYF3nhf17MoRTRK4j5b7FUMA9zanSn9D3Nk"
+        in result["monero_addresses"]
     )
     assert (
-        '498s2XeKWYSEhQHGxdMULWdrpaKvSkDsq4855mCuksNL6ez2dk4mMQm8epbr9xvn5LgLPzD5uL9EGeRqWUdEZha1HmZqcyh'
-        in result['monero_addresses']
+        "498s2XeKWYSEhQHGxdMULWdrpaKvSkDsq4855mCuksNL6ez2dk4mMQm8epbr9xvn5LgLPzD5uL9EGeRqWUdEZha1HmZqcyh"
+        in result["monero_addresses"]
     )
diff --git a/tests/test_parsing_functions.py b/tests/test_parsing_functions.py
index 6c64b86..c3eaec1 100644
--- a/tests/test_parsing_functions.py
+++ b/tests/test_parsing_functions.py
@@ -4,5 +4,5 @@
 
 
 def test_url_parsing_func():
-    results = parse_urls('https://google.com')
-    assert results == ['https://google.com']
+    results = parse_urls("https://google.com")
+    assert results == ["https://google.com"]
diff --git a/tests/test_urls.py b/tests/test_urls.py
index 77a9289..54e2ce4 100644
--- a/tests/test_urls.py
+++ b/tests/test_urls.py
@@ -102,43 +102,43 @@
 
 def test_cidr_ranges_not_found_as_urls():
     """See https://github.com/fhightower/ioc-finder/issues/91."""
-    result = find_iocs('1.1.1.1/0')
-    assert result['urls'] == []
+    result = find_iocs("1.1.1.1/0")
+    assert result["urls"] == []
 
-    result = find_iocs('1.1.1.1/0', parse_urls_without_scheme=False)
-    assert result['urls'] == []
+    result = find_iocs("1.1.1.1/0", parse_urls_without_scheme=False)
+    assert result["urls"] == []
 
-    result = find_iocs('1.1.1.1/0 foobar.com/test/bingo.php')
-    assert result['urls'] == ['foobar.com/test/bingo.php']
+    result = find_iocs("1.1.1.1/0 foobar.com/test/bingo.php")
+    assert result["urls"] == ["foobar.com/test/bingo.php"]
 
 
 def test_parse_domain_from_url_not_removing_entire_url():
     """See https://github.com/fhightower/ioc-finder/issues/90."""
     # default behaviour
-    result = find_iocs('https://foobar.com/test/bingo.com/bar')
-    assert iterables_have_same_items(result['domains'], ['foobar.com', 'bingo.com'])
+    result = find_iocs("https://foobar.com/test/bingo.com/bar")
+    assert iterables_have_same_items(result["domains"], ["foobar.com", "bingo.com"])
 
-    result = find_iocs('https://foobar.com/test/bingo.com/bar', parse_domain_from_url=False)
-    assert result['domains'] == ['bingo.com']
+    result = find_iocs("https://foobar.com/test/bingo.com/bar", parse_domain_from_url=False)
+    assert result["domains"] == ["bingo.com"]
 
-    result = find_iocs('https://foobar.com/test/bingo.com/bar', parse_domain_from_url=False, parse_from_url_path=False)
-    assert result['domains'] == []
+    result = find_iocs("https://foobar.com/test/bingo.com/bar", parse_domain_from_url=False, parse_from_url_path=False)
+    assert result["domains"] == []
 
 
 def test_issue_104__encoded_url_properly_parsed():
-    s = 'https://asf.goole.com/mail?url=http%3A%2F%2Ffreasdfuewriter.com%2Fcs%2Fimage%2FCommerciaE.jpg&t=1575955624&ymreqid=733bc9eb-e8f-34cb-1cb5-120010019e00&sig=x2Pa2oOYxanG52s4vyCEFg--~Chttp://uniddloos.zddfdd.org/CBA0019_file_00002_pdf.zip'
+    s = "https://asf.goole.com/mail?url=http%3A%2F%2Ffreasdfuewriter.com%2Fcs%2Fimage%2FCommerciaE.jpg&t=1575955624&ymreqid=733bc9eb-e8f-34cb-1cb5-120010019e00&sig=x2Pa2oOYxanG52s4vyCEFg--~Chttp://uniddloos.zddfdd.org/CBA0019_file_00002_pdf.zip"
     result = find_iocs(s)
-    assert result['urls'] == [
-        'https://asf.goole.com/mail?url=http%3A%2F%2Ffreasdfuewriter.com%2Fcs%2Fimage%2FCommerciaE.jpg&t=1575955624&ymreqid=733bc9eb-e8f-34cb-1cb5-120010019e00&sig=x2Pa2oOYxanG52s4vyCEFg--~Chttp://uniddloos.zddfdd.org/CBA0019_file_00002_pdf.zip'
+    assert result["urls"] == [
+        "https://asf.goole.com/mail?url=http%3A%2F%2Ffreasdfuewriter.com%2Fcs%2Fimage%2FCommerciaE.jpg&t=1575955624&ymreqid=733bc9eb-e8f-34cb-1cb5-120010019e00&sig=x2Pa2oOYxanG52s4vyCEFg--~Chttp://uniddloos.zddfdd.org/CBA0019_file_00002_pdf.zip"
     ]
 
 
 def test_url__percent_encoded_path():
     # make sure a percent encoded path is properly removed so that nothing is parsed from it
-    s = 'https://example.com/test%20page/foo.com/bingo.php?q=bar.com'
+    s = "https://example.com/test%20page/foo.com/bingo.php?q=bar.com"
     result = find_iocs(s, parse_from_url_path=False)
-    assert result['urls'] == ['https://example.com/test%20page/foo.com/bingo.php?q=bar.com']
+    assert result["urls"] == ["https://example.com/test%20page/foo.com/bingo.php?q=bar.com"]
     assert iterables_have_same_items(
-        result['domains'], ['example.com', 'bar.com']
+        result["domains"], ["example.com", "bar.com"]
     )  # the key here is that "foo.com" is not parsed because it is part of the path (which has been removed)
-    assert result['file_paths'] == []
+    assert result["file_paths"] == []
diff --git a/tests/test_utility_functions.py b/tests/test_utility_functions.py
index 1ae9604..02777e2 100644
--- a/tests/test_utility_functions.py
+++ b/tests/test_utility_functions.py
@@ -4,23 +4,23 @@
 
 
 def test_hasBothOrNeitherAngleBrackets_1():
-    assert hasBothOrNeitherAngleBrackets('<>')
-    assert hasBothOrNeitherAngleBrackets('<foo>')
-    assert hasBothOrNeitherAngleBrackets('< foo >')
-    assert hasBothOrNeitherAngleBrackets('foo')
+    assert hasBothOrNeitherAngleBrackets("<>")
+    assert hasBothOrNeitherAngleBrackets("<foo>")
+    assert hasBothOrNeitherAngleBrackets("< foo >")
+    assert hasBothOrNeitherAngleBrackets("foo")
 
-    assert not hasBothOrNeitherAngleBrackets('<')
-    assert not hasBothOrNeitherAngleBrackets('<foo')
-    assert not hasBothOrNeitherAngleBrackets('foo<')
-    assert not hasBothOrNeitherAngleBrackets('<foo<')
-    assert not hasBothOrNeitherAngleBrackets('>')
-    assert not hasBothOrNeitherAngleBrackets('>foo')
-    assert not hasBothOrNeitherAngleBrackets('foo>')
-    assert not hasBothOrNeitherAngleBrackets('>foo>')
+    assert not hasBothOrNeitherAngleBrackets("<")
+    assert not hasBothOrNeitherAngleBrackets("<foo")
+    assert not hasBothOrNeitherAngleBrackets("foo<")
+    assert not hasBothOrNeitherAngleBrackets("<foo<")
+    assert not hasBothOrNeitherAngleBrackets(">")
+    assert not hasBothOrNeitherAngleBrackets(">foo")
+    assert not hasBothOrNeitherAngleBrackets("foo>")
+    assert not hasBothOrNeitherAngleBrackets(">foo>")
 
 
 def test_hasMultipleConsecutiveSpaces_1():
-    assert not hasMultipleConsecutiveSpaces('')
-    assert not hasMultipleConsecutiveSpaces(' ')
-    assert hasMultipleConsecutiveSpaces('  ')
-    assert hasMultipleConsecutiveSpaces('   ')
+    assert not hasMultipleConsecutiveSpaces("")
+    assert not hasMultipleConsecutiveSpaces(" ")
+    assert hasMultipleConsecutiveSpaces("  ")
+    assert hasMultipleConsecutiveSpaces("   ")