seer-core 0.21.0

Core library for Seer domain name utilities
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
use once_cell::sync::Lazy;
use std::collections::HashMap;

/// Comprehensive WHOIS server list.
/// Data sourced from https://github.com/WooMai/whois-servers (auto-synced with IANA Root Zone Database).
pub static WHOIS_SERVERS: Lazy<HashMap<&'static str, &'static str>> = Lazy::new(|| {
    let mut m = HashMap::new();

    // ============================================================
    // Generic TLDs (gTLDs) and New gTLDs
    // ============================================================
    m.insert("aaa", "whois.nic.aaa");
    m.insert("aarp", "whois.nic.aarp");
    m.insert("abb", "whois.nic.abb");
    m.insert("abbott", "whois.nic.abbott");
    m.insert("abbvie", "whois.nic.abbvie");
    m.insert("abc", "whois.nic.abc");
    m.insert("abogado", "whois.nic.abogado");
    m.insert("abudhabi", "whois.nic.abudhabi");
    m.insert("academy", "whois.nic.academy");
    m.insert("accenture", "whois.nic.accenture");
    m.insert("accountant", "whois.nic.accountant");
    m.insert("accountants", "whois.nic.accountants");
    m.insert("aco", "whois.nic.aco");
    m.insert("actor", "whois.nic.actor");
    m.insert("ads", "whois.nic.google");
    m.insert("adult", "whois.nic.adult");
    m.insert("aeg", "whois.nic.aeg");
    m.insert("aero", "whois.aero");
    m.insert("afl", "whois.nic.afl");
    m.insert("africa", "whois.nic.africa");
    m.insert("agakhan", "whois.nic.agakhan");
    m.insert("agency", "whois.nic.agency");
    m.insert("airbus", "whois.nic.airbus");
    m.insert("airforce", "whois.nic.airforce");
    m.insert("airtel", "whois.nic.airtel");
    m.insert("akdn", "whois.nic.akdn");
    m.insert("alibaba", "whois.nic.alibaba");
    m.insert("alipay", "whois.nic.alipay");
    m.insert("allfinanz", "whois.nic.allfinanz");
    m.insert("allstate", "whois.nic.allstate");
    m.insert("ally", "whois.nic.ally");
    m.insert("alsace", "whois.nic.alsace");
    m.insert("alstom", "whois.nic.alstom");
    m.insert("amazon", "whois.nic.amazon");
    m.insert("americanfamily", "whois.nic.americanfamily");
    m.insert("amfam", "whois.nic.amfam");
    m.insert("amsterdam", "whois.nic.amsterdam");
    m.insert("android", "whois.nic.google");
    m.insert("anquan", "whois.teleinfo.cn");
    m.insert("anz", "whois.nic.anz");
    m.insert("aol", "whois.nic.aol");
    m.insert("apartments", "whois.nic.apartments");
    m.insert("app", "whois.nic.google");
    m.insert("apple", "whois.nic.apple");
    m.insert("aquarelle", "whois.nic.aquarelle");
    m.insert("arab", "whois.nic.arab");
    m.insert("archi", "whois.nic.archi");
    m.insert("army", "whois.nic.army");
    m.insert("arpa", "whois.iana.org");
    m.insert("art", "whois.nic.art");
    m.insert("arte", "whois.nic.arte");
    m.insert("asda", "whois.nic.asda");
    m.insert("asia", "whois.nic.asia");
    m.insert("associates", "whois.nic.associates");
    m.insert("attorney", "whois.nic.attorney");
    m.insert("auction", "whois.nic.auction");
    m.insert("audi", "whois.nic.audi");
    m.insert("audible", "whois.nic.audible");
    m.insert("audio", "whois.nic.audio");
    m.insert("auspost", "whois.nic.auspost");
    m.insert("author", "whois.nic.author");
    m.insert("auto", "whois.nic.auto");
    m.insert("autos", "whois.nic.autos");
    m.insert("aws", "whois.nic.aws");
    m.insert("azure", "whois.nic.azure");
    m.insert("baby", "whois.nic.baby");
    m.insert("baidu", "whois.gtld.knet.cn");
    m.insert("band", "whois.nic.band");
    m.insert("bank", "whois.nic.bank");
    m.insert("bar", "whois.nic.bar");
    m.insert("barcelona", "whois.nic.barcelona");
    m.insert("barclaycard", "whois.nic.barclaycard");
    m.insert("barclays", "whois.nic.barclays");
    m.insert("barefoot", "whois.nic.barefoot");
    m.insert("bargains", "whois.nic.bargains");
    m.insert("baseball", "whois.nic.baseball");
    m.insert("basketball", "whois.nic.basketball");
    m.insert("bauhaus", "whois.nic.bauhaus");
    m.insert("bayern", "whois.nic.bayern");
    m.insert("bbc", "whois.nic.bbc");
    m.insert("bbt", "whois.nic.bbt");
    m.insert("bbva", "whois.nic.bbva");
    m.insert("bcg", "whois.nic.bcg");
    m.insert("bcn", "whois.nic.bcn");
    m.insert("beats", "whois.nic.beats");
    m.insert("beauty", "whois.nic.beauty");
    m.insert("beer", "whois.nic.beer");
    m.insert("berlin", "whois.nic.berlin");
    m.insert("best", "whois.nic.best");
    m.insert("bestbuy", "whois.nic.bestbuy");
    m.insert("bet", "whois.nic.bet");
    m.insert("bharti", "whois.nic.bharti");
    m.insert("bible", "whois.nic.bible");
    m.insert("bid", "whois.nic.bid");
    m.insert("bike", "whois.nic.bike");
    m.insert("bing", "whois.nic.bing");
    m.insert("bingo", "whois.nic.bingo");
    m.insert("bio", "whois.nic.bio");
    m.insert("biz", "whois.nic.biz");
    m.insert("black", "whois.nic.black");
    m.insert("blackfriday", "whois.nic.blackfriday");
    m.insert("blockbuster", "whois.nic.blockbuster");
    m.insert("blog", "whois.nic.blog");
    m.insert("bloomberg", "whois.nic.bloomberg");
    m.insert("blue", "whois.nic.blue");
    m.insert("bms", "whois.nic.bms");
    m.insert("bmw", "whois.nic.bmw");
    m.insert("bnpparibas", "whois.nic.bnpparibas");
    m.insert("boats", "whois.nic.boats");
    m.insert("boehringer", "whois.nic.boehringer");
    m.insert("bofa", "whois.nic.bofa");
    m.insert("bom", "whois.gtlds.nic.br");
    m.insert("bond", "whois.nic.bond");
    m.insert("boo", "whois.nic.google");
    m.insert("book", "whois.nic.book");
    m.insert("bosch", "whois.nic.bosch");
    m.insert("bostik", "whois.nic.bostik");
    m.insert("boston", "whois.nic.boston");
    m.insert("bot", "whois.nic.bot");
    m.insert("boutique", "whois.nic.boutique");
    m.insert("box", "whois.nic.box");
    m.insert("bradesco", "whois.nic.bradesco");
    m.insert("bridgestone", "whois.nic.bridgestone");
    m.insert("broadway", "whois.nic.broadway");
    m.insert("broker", "whois.nic.broker");
    m.insert("brother", "whois.nic.brother");
    m.insert("brussels", "whois.nic.brussels");
    m.insert("build", "whois.nic.build");
    m.insert("builders", "whois.nic.builders");
    m.insert("business", "whois.nic.business");
    m.insert("buy", "whois.nic.buy");
    m.insert("buzz", "whois.nic.buzz");
    m.insert("bzh", "whois.nic.bzh");
    m.insert("cab", "whois.nic.cab");
    m.insert("cafe", "whois.nic.cafe");
    m.insert("cal", "whois.nic.google");
    m.insert("call", "whois.nic.call");
    m.insert("cam", "whois.nic.cam");
    m.insert("camera", "whois.nic.camera");
    m.insert("camp", "whois.nic.camp");
    m.insert("canon", "whois.nic.canon");
    m.insert("capetown", "whois.nic.capetown");
    m.insert("capital", "whois.nic.capital");
    m.insert("capitalone", "whois.nic.capitalone");
    m.insert("car", "whois.nic.car");
    m.insert("cards", "whois.nic.cards");
    m.insert("care", "whois.nic.care");
    m.insert("career", "whois.nic.career");
    m.insert("careers", "whois.nic.careers");
    m.insert("cars", "whois.nic.cars");
    m.insert("casa", "whois.nic.casa");
    m.insert("case", "whois.nic.case");
    m.insert("cash", "whois.nic.cash");
    m.insert("casino", "whois.nic.casino");
    m.insert("cat", "whois.nic.cat");
    m.insert("catering", "whois.nic.catering");
    m.insert("catholic", "whois.nic.catholic");
    m.insert("cba", "whois.nic.cba");
    m.insert("center", "whois.nic.center");
    m.insert("ceo", "whois.nic.ceo");
    m.insert("cern", "whois.nic.cern");
    m.insert("cfa", "whois.nic.cfa");
    m.insert("cfd", "whois.nic.cfd");
    m.insert("chanel", "whois.nic.chanel");
    m.insert("channel", "whois.nic.google");
    m.insert("charity", "whois.nic.charity");
    m.insert("chat", "whois.nic.chat");
    m.insert("cheap", "whois.nic.cheap");
    m.insert("chintai", "whois.nic.chintai");
    m.insert("christmas", "whois.nic.christmas");
    m.insert("chrome", "whois.nic.google");
    m.insert("church", "whois.nic.church");
    m.insert("cipriani", "whois.nic.cipriani");
    m.insert("circle", "whois.nic.circle");
    m.insert("citadel", "whois.nic.citadel");
    m.insert("city", "whois.nic.city");
    m.insert("claims", "whois.nic.claims");
    m.insert("cleaning", "whois.nic.cleaning");
    m.insert("click", "whois.tucowsregistry.net");
    m.insert("clinic", "whois.nic.clinic");
    m.insert("clinique", "whois.nic.clinique");
    m.insert("clothing", "whois.nic.clothing");
    m.insert("cloud", "whois.nic.cloud");
    m.insert("club", "whois.nic.club");
    m.insert("clubmed", "whois.nic.clubmed");
    m.insert("coach", "whois.nic.coach");
    m.insert("codes", "whois.nic.codes");
    m.insert("coffee", "whois.nic.coffee");
    m.insert("college", "whois.nic.college");
    m.insert("cologne", "whois.ryce-rsp.com");
    m.insert("com", "whois.verisign-grs.com");
    m.insert("commbank", "whois.nic.commbank");
    m.insert("community", "whois.nic.community");
    m.insert("company", "whois.nic.company");
    m.insert("compare", "whois.nic.compare");
    m.insert("computer", "whois.nic.computer");
    m.insert("comsec", "whois.nic.comsec");
    m.insert("condos", "whois.nic.condos");
    m.insert("construction", "whois.nic.construction");
    m.insert("consulting", "whois.nic.consulting");
    m.insert("contact", "whois.nic.contact");
    m.insert("contractors", "whois.nic.contractors");
    m.insert("cooking", "whois.nic.cooking");
    m.insert("cool", "whois.nic.cool");
    m.insert("coop", "whois.nic.coop");
    m.insert("corsica", "whois.nic.corsica");
    m.insert("country", "whois.tucowsregistry.net");
    m.insert("coupon", "whois.nic.coupon");
    m.insert("coupons", "whois.nic.coupons");
    m.insert("courses", "whois.nic.courses");
    m.insert("cpa", "whois.nic.cpa");
    m.insert("credit", "whois.nic.credit");
    m.insert("creditcard", "whois.nic.creditcard");
    m.insert("creditunion", "whois.nic.creditunion");
    m.insert("cricket", "whois.nic.cricket");
    m.insert("crown", "whois.nic.crown");
    m.insert("crs", "whois.nic.crs");
    m.insert("cruise", "whois.nic.cruise");
    m.insert("cruises", "whois.nic.cruises");
    m.insert("cuisinella", "whois.nic.cuisinella");
    m.insert("cymru", "whois.nic.cymru");
    m.insert("cyou", "whois.nic.cyou");
    m.insert("dad", "whois.nic.google");
    m.insert("dance", "whois.nic.dance");
    m.insert("data", "whois.nic.data");
    m.insert("date", "whois.nic.date");
    m.insert("dating", "whois.nic.dating");
    m.insert("datsun", "whois.nic.gmo");
    m.insert("day", "whois.nic.google");
    m.insert("dclk", "whois.nic.google");
    m.insert("dds", "whois.nic.dds");
    m.insert("deal", "whois.nic.deal");
    m.insert("dealer", "whois.nic.dealer");
    m.insert("deals", "whois.nic.deals");
    m.insert("degree", "whois.nic.degree");
    m.insert("delivery", "whois.nic.delivery");
    m.insert("deloitte", "whois.nic.deloitte");
    m.insert("delta", "whois.nic.delta");
    m.insert("democrat", "whois.nic.democrat");
    m.insert("dental", "whois.nic.dental");
    m.insert("dentist", "whois.nic.dentist");
    m.insert("desi", "whois.nic.desi");
    m.insert("design", "whois.nic.design");
    m.insert("dev", "whois.nic.google");
    m.insert("diamonds", "whois.nic.diamonds");
    m.insert("diet", "whois.nic.diet");
    m.insert("digital", "whois.nic.digital");
    m.insert("direct", "whois.nic.direct");
    m.insert("directory", "whois.nic.directory");
    m.insert("discount", "whois.nic.discount");
    m.insert("discover", "whois.nic.discover");
    m.insert("dish", "whois.nic.dish");
    m.insert("diy", "whois.tucowsregistry.net");
    m.insert("dnp", "whois.nic.dnp");
    m.insert("docs", "whois.nic.google");
    m.insert("doctor", "whois.nic.doctor");
    m.insert("dog", "whois.nic.dog");
    m.insert("domains", "whois.nic.domains");
    m.insert("dot", "whois.nic.dot");
    m.insert("download", "whois.nic.download");
    m.insert("drive", "whois.nic.google");
    m.insert("dtv", "whois.nic.dtv");
    m.insert("dubai", "whois.nic.dubai");
    m.insert("durban", "whois.nic.durban");
    m.insert("dvag", "whois.nic.dvag");
    m.insert("dvr", "whois.nic.dvr");
    m.insert("earth", "whois.nic.earth");
    m.insert("eat", "whois.nic.google");
    m.insert("eco", "whois.nic.eco");
    m.insert("edeka", "whois.nic.edeka");
    m.insert("edu", "whois.educause.edu");
    m.insert("education", "whois.nic.education");
    m.insert("email", "whois.nic.email");
    m.insert("emerck", "whois.nic.emerck");
    m.insert("energy", "whois.nic.energy");
    m.insert("engineer", "whois.nic.engineer");
    m.insert("engineering", "whois.nic.engineering");
    m.insert("enterprises", "whois.nic.enterprises");
    m.insert("epson", "whois.nic.epson");
    m.insert("equipment", "whois.nic.equipment");
    m.insert("ericsson", "whois.nic.ericsson");
    m.insert("erni", "whois.nic.erni");
    m.insert("esq", "whois.nic.google");
    m.insert("estate", "whois.nic.estate");
    m.insert("eurovision", "whois.nic.eurovision");
    m.insert("eus", "whois.nic.eus");
    m.insert("events", "whois.nic.events");
    m.insert("exchange", "whois.nic.exchange");
    m.insert("expert", "whois.nic.expert");
    m.insert("exposed", "whois.nic.exposed");
    m.insert("express", "whois.nic.express");
    m.insert("extraspace", "whois.nic.extraspace");
    m.insert("fage", "whois.nic.fage");
    m.insert("fail", "whois.nic.fail");
    m.insert("fairwinds", "whois.nic.fairwinds");
    m.insert("faith", "whois.nic.faith");
    m.insert("family", "whois.nic.family");
    m.insert("fan", "whois.nic.fan");
    m.insert("fans", "whois.nic.fans");
    m.insert("farm", "whois.nic.farm");
    m.insert("fashion", "whois.nic.fashion");
    m.insert("fast", "whois.nic.fast");
    m.insert("fedex", "whois.nic.fedex");
    m.insert("feedback", "whois.registry.click");
    m.insert("ferrari", "whois.nic.ferrari");
    m.insert("fidelity", "whois.nic.fidelity");
    m.insert("fido", "whois.nic.fido");
    m.insert("film", "whois.nic.film");
    m.insert("final", "whois.gtlds.nic.br");
    m.insert("finance", "whois.nic.finance");
    m.insert("financial", "whois.nic.financial");
    m.insert("fire", "whois.nic.fire");
    m.insert("firestone", "whois.nic.firestone");
    m.insert("firmdale", "whois.nic.firmdale");
    m.insert("fish", "whois.nic.fish");
    m.insert("fishing", "whois.nic.fishing");
    m.insert("fit", "whois.nic.fit");
    m.insert("fitness", "whois.nic.fitness");
    m.insert("flights", "whois.nic.flights");
    m.insert("flir", "whois.nic.flir");
    m.insert("florist", "whois.nic.florist");
    m.insert("flowers", "whois.nic.flowers");
    m.insert("fly", "whois.nic.google");
    m.insert("foo", "whois.nic.google");
    m.insert("food", "whois.tucowsregistry.net");
    m.insert("football", "whois.nic.football");
    m.insert("forex", "whois.nic.forex");
    m.insert("forsale", "whois.nic.forsale");
    m.insert("forum", "whois.registry.click");
    m.insert("foundation", "whois.nic.foundation");
    m.insert("fox", "whois.nic.fox");
    m.insert("free", "whois.nic.free");
    m.insert("fresenius", "whois.nic.fresenius");
    m.insert("frl", "whois.nic.frl");
    m.insert("frogans", "whois.nic.frogans");
    m.insert("fujitsu", "whois.nic.gmo");
    m.insert("fun", "whois.nic.fun");
    m.insert("fund", "whois.nic.fund");
    m.insert("furniture", "whois.nic.furniture");
    m.insert("futbol", "whois.nic.futbol");
    m.insert("fyi", "whois.nic.fyi");
    m.insert("gal", "whois.nic.gal");
    m.insert("gallery", "whois.nic.gallery");
    m.insert("gallo", "whois.nic.gallo");
    m.insert("gallup", "whois.nic.gallup");
    m.insert("game", "whois.nic.game");
    m.insert("games", "whois.nic.games");
    m.insert("garden", "whois.nic.garden");
    m.insert("gay", "whois.nic.gay");
    m.insert("gbiz", "whois.nic.google");
    m.insert("gdn", "whois.nic.gdn");
    m.insert("gea", "whois.nic.gea");
    m.insert("gent", "whois.nic.gent");
    m.insert("genting", "whois.nic.genting");
    m.insert("george", "whois.nic.george");
    m.insert("ggee", "whois.nic.ggee");
    m.insert("gift", "whois.tucowsregistry.net");
    m.insert("gifts", "whois.nic.gifts");
    m.insert("gives", "whois.nic.gives");
    m.insert("giving", "whois.nic.giving");
    m.insert("glass", "whois.nic.glass");
    m.insert("gle", "whois.nic.google");
    m.insert("global", "whois.nic.global");
    m.insert("globo", "whois.gtlds.nic.br");
    m.insert("gmail", "whois.nic.google");
    m.insert("gmbh", "whois.nic.gmbh");
    m.insert("gmo", "whois.nic.gmo");
    m.insert("gmx", "whois.nic.gmx");
    m.insert("godaddy", "whois.nic.godaddy");
    m.insert("gold", "whois.nic.gold");
    m.insert("goldpoint", "whois.nic.goldpoint");
    m.insert("golf", "whois.nic.golf");
    m.insert("goo", "whois.nic.gmo");
    m.insert("goodyear", "whois.nic.goodyear");
    m.insert("goog", "whois.nic.google");
    m.insert("google", "whois.nic.google");
    m.insert("gop", "whois.nic.gop");
    m.insert("got", "whois.nic.got");
    m.insert("gov", "whois.nic.gov");
    m.insert("graphics", "whois.nic.graphics");
    m.insert("gratis", "whois.nic.gratis");
    m.insert("green", "whois.nic.green");
    m.insert("gripe", "whois.nic.gripe");
    m.insert("grocery", "whois.nic.grocery");
    m.insert("group", "whois.nic.group");
    m.insert("guardian", "whois.nic.guardian");
    m.insert("gucci", "whois.nic.gucci");
    m.insert("guide", "whois.nic.guide");
    m.insert("guitars", "whois.nic.guitars");
    m.insert("guru", "whois.nic.guru");
    m.insert("hair", "whois.nic.hair");
    m.insert("hamburg", "whois.nic.hamburg");
    m.insert("hangout", "whois.nic.google");
    m.insert("haus", "whois.nic.haus");
    m.insert("hbo", "whois.nic.hbo");
    m.insert("hdfc", "whois.nic.hdfc");
    m.insert("hdfcbank", "whois.nic.hdfcbank");
    m.insert("health", "whois.nic.health");
    m.insert("healthcare", "whois.nic.healthcare");
    m.insert("help", "whois.nic.help");
    m.insert("helsinki", "whois.nic.helsinki");
    m.insert("here", "whois.nic.google");
    m.insert("hermes", "whois.nic.hermes");
    m.insert("hiphop", "whois.tucowsregistry.net");
    m.insert("hisamitsu", "whois.nic.gmo");
    m.insert("hitachi", "whois.nic.gmo");
    m.insert("hiv", "whois.nic.hiv");
    m.insert("hockey", "whois.nic.hockey");
    m.insert("holdings", "whois.nic.holdings");
    m.insert("holiday", "whois.nic.holiday");
    m.insert("homedepot", "whois.nic.homedepot");
    m.insert("homegoods", "whois.nic.homegoods");
    m.insert("homes", "whois.nic.homes");
    m.insert("homesense", "whois.nic.homesense");
    m.insert("honda", "whois.nic.honda");
    m.insert("horse", "whois.nic.horse");
    m.insert("hospital", "whois.nic.hospital");
    m.insert("host", "whois.nic.host");
    m.insert("hosting", "whois.nic.hosting");
    m.insert("hot", "whois.nic.hot");
    m.insert("hoteles", "whois.nic.hoteles");
    m.insert("hotels", "whois.nic.hotels");
    m.insert("hotmail", "whois.nic.hotmail");
    m.insert("house", "whois.nic.house");
    m.insert("how", "whois.nic.google");
    m.insert("hsbc", "whois.nic.hsbc");
    m.insert("hughes", "whois.nic.hughes");
    m.insert("hyatt", "whois.nic.hyatt");
    m.insert("hyundai", "whois.nic.hyundai");
    m.insert("ibm", "whois.nic.ibm");
    m.insert("icbc", "whois.nic.icbc");
    m.insert("ice", "whois.nic.ice");
    m.insert("icu", "whois.nic.icu");
    m.insert("ieee", "whois.nic.ieee");
    m.insert("ifm", "whois.nic.ifm");
    m.insert("ikano", "whois.nic.ikano");
    m.insert("imamat", "whois.nic.imamat");
    m.insert("imdb", "whois.nic.imdb");
    m.insert("immo", "whois.nic.immo");
    m.insert("immobilien", "whois.nic.immobilien");
    m.insert("inc", "whois.nic.inc");
    m.insert("industries", "whois.nic.industries");
    m.insert("infiniti", "whois.nic.gmo");
    m.insert("info", "whois.nic.info");
    m.insert("ing", "whois.nic.google");
    m.insert("ink", "whois.nic.ink");
    m.insert("institute", "whois.nic.institute");
    m.insert("insurance", "whois.nic.insurance");
    m.insert("insure", "whois.nic.insure");
    m.insert("int", "whois.iana.org");
    m.insert("international", "whois.nic.international");
    m.insert("intuit", "whois.nic.intuit");
    m.insert("investments", "whois.nic.investments");
    m.insert("ipiranga", "whois.nic.ipiranga");
    m.insert("irish", "whois.nic.irish");
    m.insert("ismaili", "whois.nic.ismaili");
    m.insert("ist", "whois.nic.ist");
    m.insert("istanbul", "whois.nic.istanbul");
    m.insert("itau", "whois.nic.itau");
    m.insert("itv", "whois.nic.itv");
    m.insert("jaguar", "whois.nic.jaguar");
    m.insert("java", "whois.nic.java");
    m.insert("jcb", "whois.nic.gmo");
    m.insert("jeep", "whois.nic.jeep");
    m.insert("jetzt", "whois.nic.jetzt");
    m.insert("jewelry", "whois.nic.jewelry");
    m.insert("jio", "whois.nic.jio");
    m.insert("jll", "whois.nic.jll");
    m.insert("jmp", "whois.nic.jmp");
    m.insert("jnj", "whois.nic.jnj");
    m.insert("jobs", "whois.nic.jobs");
    m.insert("joburg", "whois.nic.joburg");
    m.insert("jot", "whois.nic.jot");
    m.insert("joy", "whois.nic.joy");
    m.insert("jpmorgan", "whois.nic.jpmorgan");
    m.insert("jprs", "whois.nic.jprs");
    m.insert("juegos", "whois.nic.juegos");
    m.insert("juniper", "whois.nic.juniper");
    m.insert("kaufen", "whois.nic.kaufen");
    m.insert("kddi", "whois.nic.kddi");
    m.insert("kerryhotels", "whois.nic.kerryhotels");
    m.insert("kerrylogistics", "whois.nic.kerrylogistics");
    m.insert("kerryproperties", "whois.nic.kerryproperties");
    m.insert("kfh", "whois.nic.kfh");
    m.insert("kia", "whois.nic.kia");
    m.insert("kids", "whois.nic.kids");
    m.insert("kim", "whois.nic.kim");
    m.insert("kindle", "whois.nic.kindle");
    m.insert("kitchen", "whois.nic.kitchen");
    m.insert("kiwi", "whois.nic.kiwi");
    m.insert("koeln", "whois.ryce-rsp.com");
    m.insert("komatsu", "whois.nic.komatsu");
    m.insert("kosher", "whois.nic.kosher");
    m.insert("kpmg", "whois.nic.kpmg");
    m.insert("kpn", "whois.nic.kpn");
    m.insert("krd", "whois.nic.krd");
    m.insert("kred", "whois.nic.kred");
    m.insert("kuokgroup", "whois.nic.kuokgroup");
    m.insert("kyoto", "whois.nic.kyoto");
    m.insert("lacaixa", "whois.nic.lacaixa");
    m.insert("lamborghini", "whois.nic.lamborghini");
    m.insert("lamer", "whois.nic.lamer");
    m.insert("lancaster", "whois.nic.lancaster");
    m.insert("land", "whois.nic.land");
    m.insert("landrover", "whois.nic.landrover");
    m.insert("lanxess", "whois.nic.lanxess");
    m.insert("lasalle", "whois.nic.lasalle");
    m.insert("lat", "whois.nic.lat");
    m.insert("latino", "whois.nic.latino");
    m.insert("latrobe", "whois.nic.latrobe");
    m.insert("law", "whois.nic.law");
    m.insert("lawyer", "whois.nic.lawyer");
    m.insert("lds", "whois.nic.lds");
    m.insert("lease", "whois.nic.lease");
    m.insert("leclerc", "whois.nic.leclerc");
    m.insert("lefrak", "whois.nic.lefrak");
    m.insert("legal", "whois.nic.legal");
    m.insert("lego", "whois.nic.lego");
    m.insert("lexus", "whois.nic.lexus");
    m.insert("lgbt", "whois.nic.lgbt");
    m.insert("lidl", "whois.nic.lidl");
    m.insert("life", "whois.nic.life");
    m.insert("lifeinsurance", "whois.nic.lifeinsurance");
    m.insert("lifestyle", "whois.nic.lifestyle");
    m.insert("lighting", "whois.nic.lighting");
    m.insert("like", "whois.nic.like");
    m.insert("lilly", "whois.nic.lilly");
    m.insert("limited", "whois.nic.limited");
    m.insert("limo", "whois.nic.limo");
    m.insert("lincoln", "whois.nic.lincoln");
    m.insert("link", "whois.tucowsregistry.net");
    m.insert("lipsy", "whois.nic.lipsy");
    m.insert("live", "whois.nic.live");
    m.insert("living", "whois.nic.living");
    m.insert("llc", "whois.nic.llc");
    m.insert("llp", "whois.nic.llp");
    m.insert("loan", "whois.nic.loan");
    m.insert("loans", "whois.nic.loans");
    m.insert("locker", "whois.nic.locker");
    m.insert("locus", "whois.nic.locus");
    m.insert("lol", "whois.nic.lol");
    m.insert("london", "whois.nic.london");
    m.insert("lotte", "whois.nic.lotte");
    m.insert("lotto", "whois.nic.lotto");
    m.insert("love", "whois.nic.love");
    m.insert("lpl", "whois.nic.lpl");
    m.insert("lplfinancial", "whois.nic.lplfinancial");
    m.insert("ltd", "whois.nic.ltd");
    m.insert("ltda", "whois.nic.ltda");
    m.insert("lundbeck", "whois.nic.lundbeck");
    m.insert("luxe", "whois.nic.luxe");
    m.insert("luxury", "whois.nic.luxury");
    m.insert("macys", "whois.nic.macys");
    m.insert("madrid", "whois.nic.madrid");
    m.insert("maif", "whois.nic.maif");
    m.insert("maison", "whois.nic.maison");
    m.insert("makeup", "whois.nic.makeup");
    m.insert("man", "whois.nic.man");
    m.insert("management", "whois.nic.management");
    m.insert("mango", "whois.nic.mango");
    m.insert("map", "whois.nic.google");
    m.insert("market", "whois.nic.market");
    m.insert("marketing", "whois.nic.marketing");
    m.insert("markets", "whois.nic.markets");
    m.insert("marriott", "whois.nic.marriott");
    m.insert("marshalls", "whois.nic.marshalls");
    m.insert("mattel", "whois.nic.mattel");
    m.insert("mba", "whois.nic.mba");
    m.insert("mckinsey", "whois.nic.mckinsey");
    m.insert("media", "whois.nic.media");
    m.insert("meet", "whois.nic.google");
    m.insert("melbourne", "whois.nic.melbourne");
    m.insert("meme", "whois.nic.google");
    m.insert("memorial", "whois.nic.memorial");
    m.insert("men", "whois.nic.men");
    m.insert("menu", "whois.nic.menu");
    m.insert("merckmsd", "whois.nic.merckmsd");
    m.insert("miami", "whois.nic.miami");
    m.insert("microsoft", "whois.nic.microsoft");
    m.insert("mil", "whois.nic.mil");
    m.insert("mini", "whois.nic.mini");
    m.insert("mint", "whois.nic.mint");
    m.insert("mit", "whois.nic.mit");
    m.insert("mitsubishi", "whois.nic.gmo");
    m.insert("mlb", "whois.nic.mlb");
    m.insert("mls", "whois.nic.mls");
    m.insert("mma", "whois.nic.mma");
    m.insert("mobi", "whois.nic.mobi");
    m.insert("mobile", "whois.nic.mobile");
    m.insert("moda", "whois.nic.moda");
    m.insert("moe", "whois.nic.moe");
    m.insert("moi", "whois.nic.moi");
    m.insert("mom", "whois.nic.mom");
    m.insert("monash", "whois.nic.monash");
    m.insert("money", "whois.nic.money");
    m.insert("monster", "whois.nic.monster");
    m.insert("mormon", "whois.nic.mormon");
    m.insert("mortgage", "whois.nic.mortgage");
    m.insert("moscow", "whois.nic.moscow");
    m.insert("moto", "whois.nic.moto");
    m.insert("motorcycles", "whois.nic.motorcycles");
    m.insert("mov", "whois.nic.google");
    m.insert("movie", "whois.nic.movie");
    m.insert("msd", "whois.nic.msd");
    m.insert("mtn", "whois.nic.mtn");
    m.insert("mtr", "whois.nic.mtr");
    m.insert("museum", "whois.nic.museum");
    m.insert("music", "whois.nic.music");
    m.insert("mutual", "whois.nic.mutual");
    m.insert("nab", "whois.nic.nab");
    m.insert("nagoya", "whois.nic.nagoya");
    m.insert("name", "whois.nic.name");
    m.insert("natura", "whois.gtlds.nic.br");
    m.insert("navy", "whois.nic.navy");
    m.insert("nba", "whois.nic.nba");
    m.insert("nec", "whois.nic.nec");
    m.insert("net", "whois.verisign-grs.com");
    m.insert("netbank", "whois.nic.netbank");
    m.insert("netflix", "whois.nic.netflix");
    m.insert("network", "whois.nic.network");
    m.insert("neustar", "whois.nic.neustar");
    m.insert("new", "whois.nic.google");
    m.insert("news", "whois.nic.news");
    m.insert("next", "whois.nic.next");
    m.insert("nextdirect", "whois.nic.nextdirect");
    m.insert("nexus", "whois.nic.google");
    m.insert("nfl", "whois.nic.nfl");
    m.insert("ngo", "whois.nic.ngo");
    m.insert("nhk", "whois.nic.nhk");
    m.insert("nico", "whois.nic.nico");
    m.insert("nike", "whois.nic.nike");
    m.insert("nikon", "whois.nic.nikon");
    m.insert("ninja", "whois.nic.ninja");
    m.insert("nissan", "whois.nic.gmo");
    m.insert("nissay", "whois.nic.nissay");
    m.insert("nokia", "whois.nic.nokia");
    m.insert("northwesternmutual", "whois.nic.northwesternmutual");
    m.insert("norton", "whois.nic.norton");
    m.insert("now", "whois.nic.now");
    m.insert("nowruz", "whois.nic.nowruz");
    m.insert("nowtv", "whois.nic.nowtv");
    m.insert("nra", "whois.nic.nra");
    m.insert("nrw", "whois.nic.nrw");
    m.insert("nyc", "whois.nic.nyc");
    m.insert("obi", "whois.nic.obi");
    m.insert("observer", "whois.nic.observer");
    m.insert("office", "whois.nic.office");
    m.insert("okinawa", "whois.nic.okinawa");
    m.insert("olayan", "whois.nic.olayan");
    m.insert("olayangroup", "whois.nic.olayangroup");
    m.insert("ollo", "whois.nic.ollo");
    m.insert("omega", "whois.nic.omega");
    m.insert("one", "whois.nic.one");
    m.insert("ong", "whois.nic.ong");
    m.insert("onl", "whois.nic.onl");
    m.insert("online", "whois.nic.online");
    m.insert("ooo", "whois.nic.ooo");
    m.insert("open", "whois.nic.open");
    m.insert("oracle", "whois.nic.oracle");
    m.insert("orange", "whois.nic.orange");
    m.insert("org", "whois.publicinterestregistry.org");
    m.insert("organic", "whois.nic.organic");
    m.insert("origins", "whois.nic.origins");
    m.insert("osaka", "whois.nic.osaka");
    m.insert("otsuka", "whois.nic.otsuka");
    m.insert("ott", "whois.nic.ott");
    m.insert("ovh", "whois.nic.ovh");
    m.insert("page", "whois.nic.google");
    m.insert("panasonic", "whois.nic.gmo");
    m.insert("paris", "whois.nic.paris");
    m.insert("pars", "whois.nic.pars");
    m.insert("partners", "whois.nic.partners");
    m.insert("parts", "whois.nic.parts");
    m.insert("party", "whois.nic.party");
    m.insert("pay", "whois.nic.pay");
    m.insert("pccw", "whois.nic.pccw");
    m.insert("pet", "whois.nic.pet");
    m.insert("pfizer", "whois.nic.pfizer");
    m.insert("pharmacy", "whois.nic.pharmacy");
    m.insert("phd", "whois.nic.google");
    m.insert("philips", "whois.nic.philips");
    m.insert("phone", "whois.nic.phone");
    m.insert("photo", "whois.nic.photo");
    m.insert("photography", "whois.nic.photography");
    m.insert("photos", "whois.nic.photos");
    m.insert("physio", "whois.nic.physio");
    m.insert("pics", "whois.nic.pics");
    m.insert("pictet", "whois.nic.pictet");
    m.insert("pictures", "whois.nic.pictures");
    m.insert("pid", "whois.nic.pid");
    m.insert("pin", "whois.nic.pin");
    m.insert("ping", "whois.nic.ping");
    m.insert("pink", "whois.nic.pink");
    m.insert("pioneer", "whois.nic.gmo");
    m.insert("pizza", "whois.nic.pizza");
    m.insert("place", "whois.nic.place");
    m.insert("play", "whois.nic.google");
    m.insert("playstation", "whois.nic.playstation");
    m.insert("plumbing", "whois.nic.plumbing");
    m.insert("plus", "whois.nic.plus");
    m.insert("pnc", "whois.nic.pnc");
    m.insert("pohl", "whois.nic.pohl");
    m.insert("poker", "whois.nic.poker");
    m.insert("politie", "whois.nic.politie");
    m.insert("porn", "whois.nic.porn");
    m.insert("post", "whois.nic.post");
    m.insert("pramerica", "whois.nic.pramerica");
    m.insert("praxi", "whois.nic.praxi");
    m.insert("press", "whois.nic.press");
    m.insert("prime", "whois.nic.prime");
    m.insert("pro", "whois.nic.pro");
    m.insert("prod", "whois.nic.google");
    m.insert("productions", "whois.nic.productions");
    m.insert("prof", "whois.nic.google");
    m.insert("progressive", "whois.nic.progressive");
    m.insert("promo", "whois.nic.promo");
    m.insert("properties", "whois.nic.properties");
    m.insert("property", "whois.tucowsregistry.net");
    m.insert("protection", "whois.nic.protection");
    m.insert("pru", "whois.nic.pru");
    m.insert("prudential", "whois.nic.prudential");
    m.insert("pub", "whois.nic.pub");
    m.insert("pwc", "whois.nic.pwc");
    m.insert("qpon", "whois.nic.qpon");
    m.insert("quebec", "whois.nic.quebec");
    m.insert("quest", "whois.nic.quest");
    m.insert("racing", "whois.nic.racing");
    m.insert("radio", "whois.nic.radio");
    m.insert("read", "whois.nic.read");
    m.insert("realestate", "whois.nic.realestate");
    m.insert("realtor", "whois.nic.realtor");
    m.insert("realty", "whois.nic.realty");
    m.insert("recipes", "whois.nic.recipes");
    m.insert("red", "whois.nic.red");
    m.insert("redstone", "whois.nic.redstone");
    m.insert("redumbrella", "whois.nic.redumbrella");
    m.insert("rehab", "whois.nic.rehab");
    m.insert("reise", "whois.nic.reise");
    m.insert("reisen", "whois.nic.reisen");
    m.insert("reit", "whois.nic.reit");
    m.insert("reliance", "whois.nic.reliance");
    m.insert("ren", "whois.nic.ren");
    m.insert("rent", "whois.nic.rent");
    m.insert("rentals", "whois.nic.rentals");
    m.insert("repair", "whois.nic.repair");
    m.insert("report", "whois.nic.report");
    m.insert("republican", "whois.nic.republican");
    m.insert("rest", "whois.nic.rest");
    m.insert("restaurant", "whois.nic.restaurant");
    m.insert("review", "whois.nic.review");
    m.insert("reviews", "whois.nic.reviews");
    m.insert("rexroth", "whois.nic.rexroth");
    m.insert("rich", "whois.nic.rich");
    m.insert("richardli", "whois.nic.richardli");
    m.insert("ricoh", "whois.nic.ricoh");
    m.insert("ril", "whois.nic.ril");
    m.insert("rio", "whois.gtlds.nic.br");
    m.insert("rip", "whois.nic.rip");
    m.insert("rocher", "whois.nic.rocher");
    m.insert("rocks", "whois.nic.rocks");
    m.insert("rodeo", "whois.nic.rodeo");
    m.insert("rogers", "whois.nic.rogers");
    m.insert("room", "whois.nic.room");
    m.insert("rsvp", "whois.nic.google");
    m.insert("rugby", "whois.nic.rugby");
    m.insert("ruhr", "whois.nic.ruhr");
    m.insert("run", "whois.nic.run");
    m.insert("rwe", "whois.nic.rwe");
    m.insert("ryukyu", "whois.nic.ryukyu");
    m.insert("saarland", "whois.nic.saarland");
    m.insert("safe", "whois.nic.safe");
    m.insert("safety", "whois.nic.safety");
    m.insert("sakura", "whois.nic.sakura");
    m.insert("sale", "whois.nic.sale");
    m.insert("salon", "whois.nic.salon");
    m.insert("samsclub", "whois.nic.samsclub");
    m.insert("samsung", "whois.nic.samsung");
    m.insert("sandvik", "whois.nic.sandvik");
    m.insert("sandvikcoromant", "whois.nic.sandvikcoromant");
    m.insert("sanofi", "whois.nic.sanofi");
    m.insert("sap", "whois.nic.sap");
    m.insert("sarl", "whois.nic.sarl");
    m.insert("sas", "whois.nic.sas");
    m.insert("save", "whois.nic.save");
    m.insert("saxo", "whois.nic.saxo");
    m.insert("sbi", "whois.nic.sbi");
    m.insert("sbs", "whois.nic.sbs");
    m.insert("scb", "whois.nic.scb");
    m.insert("schaeffler", "whois.nic.schaeffler");
    m.insert("schmidt", "whois.nic.schmidt");
    m.insert("scholarships", "whois.nic.scholarships");
    m.insert("school", "whois.nic.school");
    m.insert("schule", "whois.nic.schule");
    m.insert("schwarz", "whois.nic.schwarz");
    m.insert("science", "whois.nic.science");
    m.insert("scot", "whois.nic.scot");
    m.insert("search", "whois.nic.google");
    m.insert("seat", "whois.nic.seat");
    m.insert("secure", "whois.nic.secure");
    m.insert("security", "whois.nic.security");
    m.insert("seek", "whois.nic.seek");
    m.insert("select", "whois.nic.select");
    m.insert("sener", "whois.nic.sener");
    m.insert("services", "whois.nic.services");
    m.insert("seven", "whois.nic.seven");
    m.insert("sew", "whois.nic.sew");
    m.insert("sex", "whois.nic.sex");
    m.insert("sexy", "whois.tucowsregistry.net");
    m.insert("sfr", "whois.nic.sfr");
    m.insert("shangrila", "whois.nic.shangrila");
    m.insert("sharp", "whois.nic.gmo");
    m.insert("shaw", "whois.nic.shaw");
    m.insert("shell", "whois.nic.shell");
    m.insert("shia", "whois.nic.shia");
    m.insert("shiksha", "whois.nic.shiksha");
    m.insert("shoes", "whois.nic.shoes");
    m.insert("shop", "whois.nic.shop");
    m.insert("shopping", "whois.nic.shopping");
    m.insert("shouji", "whois.teleinfo.cn");
    m.insert("show", "whois.nic.show");
    m.insert("silk", "whois.nic.silk");
    m.insert("sina", "whois.nic.sina");
    m.insert("singles", "whois.nic.singles");
    m.insert("site", "whois.nic.site");
    m.insert("ski", "whois.nic.ski");
    m.insert("skin", "whois.nic.skin");
    m.insert("sky", "whois.nic.sky");
    m.insert("skype", "whois.nic.skype");
    m.insert("sling", "whois.nic.sling");
    m.insert("smart", "whois.nic.smart");
    m.insert("smile", "whois.nic.smile");
    m.insert("sncf", "whois.nic.sncf");
    m.insert("soccer", "whois.nic.soccer");
    m.insert("social", "whois.nic.social");
    m.insert("softbank", "whois.nic.softbank");
    m.insert("software", "whois.nic.software");
    m.insert("sohu", "whois.nic.sohu");
    m.insert("solar", "whois.nic.solar");
    m.insert("solutions", "whois.nic.solutions");
    m.insert("song", "whois.nic.song");
    m.insert("sony", "whois.nic.sony");
    m.insert("soy", "whois.nic.google");
    m.insert("spa", "whois.nic.spa");
    m.insert("space", "whois.nic.space");
    m.insert("sport", "whois.nic.sport");
    m.insert("spot", "whois.nic.spot");
    m.insert("srl", "whois.nic.srl");
    m.insert("stada", "whois.nic.stada");
    m.insert("staples", "whois.nic.staples");
    m.insert("star", "whois.nic.star");
    m.insert("statebank", "whois.nic.statebank");
    m.insert("statefarm", "whois.nic.statefarm");
    m.insert("stc", "whois.nic.stc");
    m.insert("stcgroup", "whois.nic.stcgroup");
    m.insert("stockholm", "whois.nic.stockholm");
    m.insert("storage", "whois.nic.storage");
    m.insert("store", "whois.nic.store");
    m.insert("stream", "whois.nic.stream");
    m.insert("studio", "whois.nic.studio");
    m.insert("study", "whois.nic.study");
    m.insert("style", "whois.nic.style");
    m.insert("sucks", "whois.nic.sucks");
    m.insert("supplies", "whois.nic.supplies");
    m.insert("supply", "whois.nic.supply");
    m.insert("support", "whois.nic.support");
    m.insert("surf", "whois.nic.surf");
    m.insert("surgery", "whois.nic.surgery");
    m.insert("suzuki", "whois.nic.suzuki");
    m.insert("swatch", "whois.nic.swatch");
    m.insert("swiss", "whois.nic.swiss");
    m.insert("sydney", "whois.nic.sydney");
    m.insert("systems", "whois.nic.systems");
    m.insert("tab", "whois.nic.tab");
    m.insert("taipei", "whois.nic.taipei");
    m.insert("talk", "whois.nic.talk");
    m.insert("taobao", "whois.nic.taobao");
    m.insert("target", "whois.nic.target");
    m.insert("tatamotors", "whois.nic.tatamotors");
    m.insert("tatar", "whois.nic.tatar");
    m.insert("tattoo", "whois.nic.tattoo");
    m.insert("tax", "whois.nic.tax");
    m.insert("taxi", "whois.nic.taxi");
    m.insert("tci", "whois.nic.tci");
    m.insert("tdk", "whois.nic.tdk");
    m.insert("team", "whois.nic.team");
    m.insert("tech", "whois.nic.tech");
    m.insert("technology", "whois.nic.technology");
    m.insert("tel", "whois.nic.tel");
    m.insert("temasek", "whois.nic.temasek");
    m.insert("tennis", "whois.nic.tennis");
    m.insert("teva", "whois.nic.teva");
    m.insert("thd", "whois.nic.thd");
    m.insert("theater", "whois.nic.theater");
    m.insert("theatre", "whois.nic.theatre");
    m.insert("tiaa", "whois.nic.tiaa");
    m.insert("tickets", "whois.nic.tickets");
    m.insert("tienda", "whois.nic.tienda");
    m.insert("tips", "whois.nic.tips");
    m.insert("tires", "whois.nic.tires");
    m.insert("tirol", "whois.nic.tirol");
    m.insert("tjmaxx", "whois.nic.tjmaxx");
    m.insert("tjx", "whois.nic.tjx");
    m.insert("tkmaxx", "whois.nic.tkmaxx");
    m.insert("tmall", "whois.nic.tmall");
    m.insert("today", "whois.nic.today");
    m.insert("tokyo", "whois.nic.tokyo");
    m.insert("tools", "whois.nic.tools");
    m.insert("top", "whois.nic.top");
    m.insert("toray", "whois.nic.toray");
    m.insert("toshiba", "whois.nic.toshiba");
    m.insert("total", "whois.nic.total");
    m.insert("tours", "whois.nic.tours");
    m.insert("town", "whois.nic.town");
    m.insert("toyota", "whois.nic.toyota");
    m.insert("toys", "whois.nic.toys");
    m.insert("trade", "whois.nic.trade");
    m.insert("trading", "whois.nic.trading");
    m.insert("training", "whois.nic.training");
    m.insert("travel", "whois.nic.travel");
    m.insert("travelers", "whois.nic.travelers");
    m.insert("travelersinsurance", "whois.nic.travelersinsurance");
    m.insert("trust", "whois.nic.trust");
    m.insert("trv", "whois.nic.trv");
    m.insert("tube", "whois.nic.tube");
    m.insert("tui", "whois.nic.tui");
    m.insert("tunes", "whois.nic.tunes");
    m.insert("tushu", "whois.nic.tushu");
    m.insert("tvs", "whois.nic.tvs");
    m.insert("ubank", "whois.nic.ubank");
    m.insert("ubs", "whois.nic.ubs");
    m.insert("unicom", "whois.nic.unicom");
    m.insert("university", "whois.nic.university");
    m.insert("uno", "whois.nic.uno");
    m.insert("uol", "whois.gtlds.nic.br");
    m.insert("ups", "whois.nic.ups");
    m.insert("vacations", "whois.nic.vacations");
    m.insert("vana", "whois.nic.vana");
    m.insert("vanguard", "whois.nic.vanguard");
    m.insert("vegas", "whois.nic.vegas");
    m.insert("ventures", "whois.nic.ventures");
    m.insert("verisign", "whois.nic.verisign");
    m.insert("versicherung", "whois.nic.versicherung");
    m.insert("vet", "whois.nic.vet");
    m.insert("viajes", "whois.nic.viajes");
    m.insert("video", "whois.nic.video");
    m.insert("vig", "whois.nic.vig");
    m.insert("viking", "whois.nic.viking");
    m.insert("villas", "whois.nic.villas");
    m.insert("vin", "whois.nic.vin");
    m.insert("vip", "whois.nic.vip");
    m.insert("virgin", "whois.nic.virgin");
    m.insert("visa", "whois.nic.visa");
    m.insert("vision", "whois.nic.vision");
    m.insert("viva", "whois.nic.viva");
    m.insert("vivo", "whois.nic.vivo");
    m.insert("vlaanderen", "whois.nic.vlaanderen");
    m.insert("vodka", "whois.nic.vodka");
    m.insert("volkswagen", "whois.nic.volkswagen");
    m.insert("volvo", "whois.nic.volvo");
    m.insert("vote", "whois.nic.vote");
    m.insert("voting", "whois.nic.voting");
    m.insert("voto", "whois.nic.voto");
    m.insert("voyage", "whois.nic.voyage");
    m.insert("wales", "whois.nic.wales");
    m.insert("walmart", "whois.nic.walmart");
    m.insert("walter", "whois.nic.walter");
    m.insert("wang", "whois.gtld.knet.cn");
    m.insert("wanggou", "whois.nic.wanggou");
    m.insert("watch", "whois.nic.watch");
    m.insert("watches", "whois.nic.watches");
    m.insert("weather", "whois.nic.weather");
    m.insert("weatherchannel", "whois.nic.weatherchannel");
    m.insert("webcam", "whois.nic.webcam");
    m.insert("weber", "whois.nic.weber");
    m.insert("website", "whois.nic.website");
    m.insert("wed", "whois.nic.wed");
    m.insert("wedding", "whois.nic.wedding");
    m.insert("weibo", "whois.nic.weibo");
    m.insert("weir", "whois.nic.weir");
    m.insert("whoswho", "whois.nic.whoswho");
    m.insert("wien", "whois.nic.wien");
    m.insert("wiki", "whois.nic.wiki");
    m.insert("williamhill", "whois.nic.williamhill");
    m.insert("win", "whois.nic.win");
    m.insert("windows", "whois.nic.windows");
    m.insert("wine", "whois.nic.wine");
    m.insert("winners", "whois.nic.winners");
    m.insert("wme", "whois.nic.wme");
    m.insert("wolterskluwer", "whois.nic.wolterskluwer");
    m.insert("woodside", "whois.nic.woodside");
    m.insert("work", "whois.nic.work");
    m.insert("works", "whois.nic.works");
    m.insert("world", "whois.nic.world");
    m.insert("wow", "whois.nic.wow");
    m.insert("wtc", "whois.nic.wtc");
    m.insert("wtf", "whois.nic.wtf");
    m.insert("xbox", "whois.nic.xbox");
    m.insert("xerox", "whois.nic.xerox");
    m.insert("xfinity", "whois.nic.xfinity");
    m.insert("xihuan", "whois.teleinfo.cn");
    m.insert("xin", "whois.nic.xin");
    m.insert("xxx", "whois.nic.xxx");
    m.insert("xyz", "whois.nic.xyz");
    m.insert("yachts", "whois.nic.yachts");
    m.insert("yahoo", "whois.nic.yahoo");
    m.insert("yamaxun", "whois.nic.yamaxun");
    m.insert("yandex", "whois.nic.yandex");
    m.insert("yodobashi", "whois.nic.gmo");
    m.insert("yoga", "whois.nic.yoga");
    m.insert("yokohama", "whois.nic.yokohama");
    m.insert("you", "whois.nic.you");
    m.insert("youtube", "whois.nic.google");
    m.insert("yun", "whois.teleinfo.cn");
    m.insert("zappos", "whois.nic.zappos");
    m.insert("zara", "whois.nic.zara");
    m.insert("zero", "whois.nic.zero");
    m.insert("zip", "whois.nic.google");
    m.insert("zone", "whois.nic.zone");
    m.insert("zuerich", "whois.nic.zuerich");

    // ============================================================
    // Country Code TLDs (ccTLDs)
    // ============================================================
    m.insert("ac", "whois.nic.ac");
    m.insert("ad", "whois.nic.ad");
    m.insert("ae", "whois.aeda.net.ae");
    m.insert("af", "whois.nic.af");
    m.insert("ag", "whois.nic.ag");
    m.insert("ai", "whois.nic.ai");
    m.insert("am", "whois.amnic.net");
    m.insert("ar", "whois.nic.ar");
    m.insert("as", "whois.nic.as");
    m.insert("at", "whois.nic.at");
    m.insert("au", "whois.auda.org.au");
    m.insert("aw", "whois.nic.aw");
    m.insert("ax", "whois.ax");
    m.insert("be", "whois.dns.be");
    m.insert("bf", "whois.registre.bf");
    m.insert("bg", "whois.register.bg");
    m.insert("bh", "whois.nic.bh");
    m.insert("bi", "whois1.nic.bi");
    m.insert("bj", "whois.nic.bj");
    m.insert("bm", "whois.nic.bm");
    m.insert("bn", "whois.bnnic.bn");
    m.insert("bo", "whois.nic.bo");
    m.insert("br", "whois.registro.br");
    m.insert("bw", "whois.nic.net.bw");
    m.insert("by", "whois.cctld.by");
    m.insert("bz", "whois.afilias-grs.info");
    m.insert("ca", "whois.cira.ca");
    m.insert("cc", "ccwhois.verisign-grs.com");
    m.insert("cd", "whois.nic.cd");
    m.insert("cf", "whois.dot.cf");
    m.insert("ch", "whois.nic.ch");
    m.insert("ci", "whois.nic.ci");
    m.insert("cl", "whois.nic.cl");
    m.insert("cm", "whois.nic.cm");
    m.insert("cn", "whois.cnnic.cn");
    m.insert("co", "whois.registry.co");
    m.insert("cr", "whois.nic.cr");
    m.insert("cv", "whois.nic.cv");
    m.insert("cx", "whois.nic.cx");
    m.insert("cz", "whois.nic.cz");
    m.insert("de", "whois.denic.de");
    m.insert("dk", "whois.punktum.dk");
    m.insert("dm", "whois.dmdomains.dm");
    m.insert("do", "whois.nic.do");
    m.insert("dz", "whois.nic.dz");
    m.insert("ec", "whois.nic.ec");
    m.insert("ee", "whois.tld.ee");
    m.insert("es", "whois.nic.es");
    m.insert("eu", "whois.eu");
    m.insert("fi", "whois.fi");
    m.insert("fj", "www.whois.fj");
    m.insert("fm", "whois.nic.fm");
    m.insert("fo", "whois.nic.fo");
    m.insert("fr", "whois.nic.fr");
    m.insert("gd", "whois.nic.gd");
    m.insert("ge", "whois.nic.ge");
    m.insert("gf", "whois.mediaserv.net");
    m.insert("gg", "whois.gg");
    m.insert("gh", "whois.nic.gh");
    m.insert("gi", "whois.identitydigital.services");
    m.insert("gl", "whois.nic.gl");
    m.insert("gn", "whois.ande.gov.gn");
    m.insert("gp", "whois.nic.gp");
    m.insert("gq", "whois.dominio.gq");
    m.insert("gs", "whois.nic.gs");
    m.insert("gy", "whois.registry.gy");
    m.insert("hk", "whois.hkirc.hk");
    m.insert("hm", "whois.registry.hm");
    m.insert("hn", "whois.nic.hn");
    m.insert("hr", "whois.dns.hr");
    m.insert("ht", "whois.nic.ht");
    m.insert("hu", "whois.nic.hu");
    m.insert("id", "whois.id");
    m.insert("ie", "whois.weare.ie");
    m.insert("il", "whois.isoc.org.il");
    m.insert("im", "whois.nic.im");
    m.insert("in", "whois.nixiregistry.in");
    m.insert("io", "whois.nic.io");
    m.insert("iq", "whois.cmc.iq");
    m.insert("ir", "whois.nic.ir");
    m.insert("is", "whois.isnic.is");
    m.insert("it", "whois.nic.it");
    m.insert("je", "whois.je");
    m.insert("jp", "whois.jprs.jp");
    m.insert("ke", "whois.kenic.or.ke");
    m.insert("kg", "whois.kg");
    m.insert("ki", "whois.nic.ki");
    m.insert("kr", "whois.kr");
    m.insert("kw", "whois.nic.kw");
    m.insert("ky", "whois.kyregistry.ky");
    m.insert("kz", "whois.nic.kz");
    m.insert("la", "whois.nic.la");
    m.insert("lb", "whois.lbdr.org.lb");
    m.insert("lc", "whois.afilias-grs.info");
    m.insert("li", "whois.nic.li");
    m.insert("lk", "whois.nic.lk");
    m.insert("ls", "whois.nic.ls");
    m.insert("lt", "whois.domreg.lt");
    m.insert("lu", "whois.dns.lu");
    m.insert("lv", "whois.nic.lv");
    m.insert("ly", "whois.nic.ly");
    m.insert("ma", "whois.registre.ma");
    m.insert("md", "whois.nic.md");
    m.insert("me", "whois.nic.me");
    m.insert("mg", "whois.nic.mg");
    m.insert("mk", "whois.marnet.mk");
    m.insert("ml", "whois.nic.ml");
    m.insert("mm", "whois.registry.gov.mm");
    m.insert("mn", "whois.nic.mn");
    m.insert("mo", "whois.monic.mo");
    m.insert("mp", "whois.nic.mp");
    m.insert("mq", "whois.mediaserv.net");
    m.insert("mr", "whois.nic.mr");
    m.insert("ms", "whois.nic.ms");
    m.insert("mt", "whois.nic.org.mt");
    m.insert("mu", "whois.tld.mu");
    m.insert("mv", "whois.nic.mv");
    m.insert("mw", "whois.nic.mw");
    m.insert("mx", "whois.mx");
    m.insert("my", "whois.mynic.my");
    m.insert("mz", "whois.nic.mz");
    m.insert("na", "whois.na-nic.com.na");
    m.insert("nc", "whois.nc");
    m.insert("nf", "whois.nic.nf");
    m.insert("ng", "whois.nic.net.ng");
    m.insert("ni", "whois.nic.ni");
    m.insert("nl", "whois.domain-registry.nl");
    m.insert("no", "whois.norid.no");
    m.insert("nu", "whois.iis.nu");
    m.insert("nz", "whois.irs.net.nz");
    m.insert("om", "whois.registry.om");
    m.insert("pe", "kero.yachay.pe");
    m.insert("pf", "whois.registry.pf");
    m.insert("pk", "whois.pknic.net.pk");
    m.insert("pl", "whois.dns.pl");
    m.insert("pm", "whois.nic.pm");
    m.insert("pn", "whois.nic.pn");
    m.insert("pr", "whois.afilias-srs.net");
    m.insert("ps", "whois.pnina.ps");
    m.insert("pt", "whois.dns.pt");
    m.insert("pw", "whois.nic.pw");
    m.insert("qa", "whois.registry.qa");
    m.insert("re", "whois.nic.re");
    m.insert("ro", "whois.rotld.ro");
    m.insert("rs", "whois.rnids.rs");
    m.insert("ru", "whois.tcinet.ru");
    m.insert("rw", "whois.ricta.org.rw");
    m.insert("sa", "whois.nic.net.sa");
    m.insert("sb", "whois.nic.net.sb");
    m.insert("sc", "whois.nic.sc");
    m.insert("sd", "whois.nic.sd");
    m.insert("se", "whois.iis.se");
    m.insert("sg", "whois.sgnic.sg");
    m.insert("sh", "whois.nic.sh");
    m.insert("si", "whois.register.si");
    m.insert("sk", "whois.sk-nic.sk");
    m.insert("sl", "whois.nic.sl");
    m.insert("sm", "whois.nic.sm");
    m.insert("sn", "whois.nic.sn");
    m.insert("so", "whois.nic.so");
    m.insert("sr", "whois.sr");
    m.insert("ss", "whois.nic.ss");
    m.insert("st", "whois.nic.st");
    m.insert("su", "whois.tcinet.ru");
    m.insert("sv", "whois.svnet.sv");
    m.insert("sx", "whois.sx");
    m.insert("sy", "whois.tld.sy");
    m.insert("tc", "whois.nic.tc");
    m.insert("td", "whois.nic.td");
    m.insert("tf", "whois.nic.tf");
    m.insert("tg", "whois.nic.tg");
    m.insert("th", "whois.thnic.co.th");
    m.insert("tj", "whois.nic.tj");
    m.insert("tk", "whois.dot.tk");
    m.insert("tl", "whois.nic.tl");
    m.insert("tm", "whois.nic.tm");
    m.insert("tn", "whois.ati.tn");
    m.insert("to", "whois.tonicregistry.to");
    m.insert("tr", "whois.trabis.gov.tr");
    m.insert("tt", "whois.nic.tt");
    m.insert("tv", "whois.nic.tv");
    m.insert("tw", "whois.twnic.net.tw");
    m.insert("tz", "whois.tznic.or.tz");
    m.insert("ua", "whois.ua");
    m.insert("ug", "whois.co.ug");
    m.insert("uk", "whois.nic.uk");
    m.insert("us", "whois.nic.us");
    m.insert("uy", "whois.nic.org.uy");
    m.insert("uz", "whois.cctld.uz");
    m.insert("vc", "whois.identitydigital.services");
    m.insert("ve", "whois.nic.ve");
    m.insert("vg", "whois.nic.vg");
    m.insert("vi", "virgil.nic.vi");
    m.insert("vn", "whois.nic.vn");
    m.insert("vu", "whois.dnrs.vu");
    m.insert("wf", "whois.nic.wf");
    m.insert("ws", "whois.website.ws");
    m.insert("ye", "whois.y.net.ye");
    m.insert("yt", "whois.nic.yt");
    m.insert("za", "whois.registry.net.za");
    m.insert("zm", "whois.zicta.zm");
    m.insert("zw", "whois.nic.zw");

    m
});

pub fn get_whois_server(tld: &str) -> Option<&'static str> {
    WHOIS_SERVERS.get(tld.to_lowercase().as_str()).copied()
}

pub fn get_tld(domain: &str) -> Option<&str> {
    domain.rsplit('.').next()
}

/// Returns a suggested registry website URL for a TLD.
/// Derives the URL from the WHOIS server hostname when possible.
pub fn get_registry_url(tld: &str) -> Option<String> {
    let tld_lower = tld.to_lowercase();

    // Special cases for well-known registries
    match tld_lower.as_str() {
        "com" | "net" | "cc" | "tv" => {
            return Some("https://www.verisign.com/en_US/domain-names/index.xhtml".to_string())
        }
        "org" => return Some("https://thenew.org/org-people/domain-management/whois/".to_string()),
        "edu" => return Some("https://www.educause.edu/whois".to_string()),
        "gov" => return Some("https://domains.dotgov.gov/".to_string()),
        "app" | "dev" | "page" => {
            return Some("https://www.registry.google/policies/whois/".to_string())
        }
        _ => {}
    }

    // Try to derive URL from WHOIS server
    if let Some(whois_server) = get_whois_server(&tld_lower) {
        // Pattern: whois.nic.XX -> https://nic.XX
        if let Some(suffix) = whois_server.strip_prefix("whois.nic.") {
            return Some(format!("https://nic.{}", suffix));
        }
        // Pattern: whois.XX -> https://www.nic.XX or https://XX registry
        if whois_server.starts_with("whois.") {
            // For ccTLDs, try the nic.TLD pattern
            if tld_lower.len() == 2 {
                return Some(format!("https://nic.{}", tld_lower));
            }
        }
    }

    // Fallback: suggest IANA's TLD info page
    Some(format!(
        "https://www.iana.org/domains/root/db/{}.html",
        tld_lower
    ))
}