001package com.fs.starfarer.api.impl.campaign.procgen; 002 003import java.util.ArrayList; 004import java.util.Collection; 005import java.util.HashMap; 006import java.util.HashSet; 007import java.util.LinkedHashSet; 008import java.util.List; 009import java.util.Map; 010import java.util.Random; 011import java.util.Set; 012 013import com.fs.starfarer.api.Global; 014import com.fs.starfarer.api.util.WeightedRandomPicker; 015 016public class MarkovNames { 017 018 public static String UNUSED = "*"; 019 public static String START = "@"; 020 public static String END = "#"; 021 022 public static float [][] prob; 023 024 public static String alphabet = UNUSED + START + END + "abcdefghijklmnopqrstuvwxyz-' "; 025 public static Map<String, Integer> stringToIndex = new HashMap<String, Integer>(); 026 public static Map<Integer, String> indexToString = new HashMap<Integer, String>(); 027 public static int order = 2; 028 029 public static void loadIfNeeded() { 030 if (prob == null) { 031 List<String> names = new ArrayList<String>(); 032 Collection<NameGenData> specs = Global.getSettings().getAllSpecs(NameGenData.class); 033 for (NameGenData spec : specs) { 034 //if ((float) Math.random() > 0.1f) continue; 035 names.add(spec.getName()); 036 } 037 MarkovNames.load(names, 3); 038 } 039 } 040 041 public static void load(List<String> names, int order) { 042 MarkovNames.order = order; 043 clear(); 044 045 List<String> all = new ArrayList<String>(); 046 for (int i = 1; i < alphabet.length(); i++) { 047 String s1 = "" + alphabet.charAt(i); 048 all.add(s1); 049 for (int j = 1; j < alphabet.length(); j++) { 050 String s2 = "" + alphabet.charAt(j); 051 all.add(s1 + s2); 052 053 if (order == 3) { 054 for (int k = 1; k < alphabet.length(); k++) { 055 String s3 = "" + alphabet.charAt(k); 056 all.add(s1 + s2 + s3); 057 } 058 } 059 } 060 } 061 for (String str : all) { 062 Integer index = computeIndex(str); 063 stringToIndex.put(str, index); 064 indexToString.put(index, str); 065 } 066 067 int size = (int) Math.pow(alphabet.length() + 1, order) + (int) Math.pow(alphabet.length(), order - 1); 068 069 prob = new float [size][alphabet.length()]; 070 071 072 for (String name : names) { 073 if (name.contains("$")) continue; 074 if (containsWord(name, "field")) continue; 075 if (containsWord(name, "disk")) continue; 076 if (containsWord(name, "asteroid")) continue; 077 if (containsWord(name, "nebula")) continue; 078 if (containsWord(name, "magnetic")) continue; 079 if (containsWord(name, "star")) continue; 080 if (containsWord(name, "planet")) continue; 081 if (containsWord(name, "world")) continue; 082 load(name); 083 } 084 085 int x = 0; 086 } 087 088 public static void load(String name) { 089 name = START + name + END; 090 for (int i = 0; i < name.length() - 1; i++) { 091 String curr = "" + name.charAt(i); 092 if (i > 0) curr = "" + name.charAt(i - 1) + curr; 093 if (i > 1 && order == 3) curr = "" + name.charAt(i - 2) + curr; 094 095 String next = "" + name.charAt(i + 1); 096 097 int x = getIndex(curr.toLowerCase()); 098 int y = getIndex(next.toLowerCase()); 099 100 prob[x][y]++; 101 } 102 } 103 104 public static boolean sanityCheck(String name) { 105 if (name.length() <= 2) return false; 106 if (name.length() > 20) return false; 107 108 int maxUnbroken = 0; 109 int currUnbroken = 0; 110 int numSpaces = 0; 111 for (int i = 0; i < name.length(); i++) { 112 String curr = "" + name.charAt(i); 113 if (" ".equals(curr) || "-".equals(curr)) { 114 currUnbroken = 0; 115 } 116 if (" ".equals(curr)) { 117 numSpaces++; 118 } 119 120 currUnbroken++; 121 if (currUnbroken > maxUnbroken) { 122 maxUnbroken = currUnbroken; 123 } 124 } 125 126 if (numSpaces >= 2) return false; 127 if (maxUnbroken >= 12) return false; 128 129 if (containsBad(name)) return false; 130 131 return true; 132 } 133 134 public static class MarkovNameResult { 135 public String name; 136 public double probability; 137 } 138 139 public static MarkovNameResult generate(Random random) { 140 if (prob == null) return null; 141 if (random == null) random = new Random(); 142 143 double probability = 1f; 144 145 String name = ""; 146 String add = START; 147 while (!END.equals(add) && add != null) { 148 name += add; 149 150 String curr = add; 151 if (name.length() > 1) { 152 curr = "" + name.charAt(name.length() - 2) + curr; 153 } 154 if (name.length() > 2 && order == 3) { 155 curr = "" + name.charAt(name.length() - 3) + curr; 156 } 157 158 WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>(random); 159 int index = getIndex(curr); 160 if (index >= 0) { 161 for (int i = 0; i < prob[index].length; i++) { 162 float weight = prob[index][i]; 163 if (weight > 0) { 164 String next = getString(i); 165 picker.add(next, weight); 166 } 167 } 168 } 169 170 add = picker.pick(); 171 if (add != null) { 172 int pickIndex = picker.getItems().indexOf(add); 173 if (pickIndex >= 0) { 174 probability *= (double) (picker.getWeight(pickIndex) / picker.getTotal()); 175 } 176 } 177 178 179 if (name.length() > 50) break; 180 } 181 if (add != null) name += add; 182 183 184 if (name.startsWith(START)) name = name.substring(1); 185 if (name.endsWith(END)) name = name.substring(0, name.length() - 1); 186 187 StringBuffer result = new StringBuffer(); 188 String prev = null; 189 for (int i = 0; i < name.length(); i++) { 190 String curr = "" + name.charAt(i); 191 if (" ".equals(prev) || "-".equals(prev) || prev == null) { 192 curr = curr.toUpperCase(); 193 } 194 result.append(curr); 195 prev = curr; 196 } 197 198 name = result.toString(); 199 if (!sanityCheck(name)) name = null; 200 201 if (name == null) return null; 202 203 MarkovNameResult r = new MarkovNameResult(); 204 r.name = name; 205 r.probability = probability * 1000000; 206 return r; 207 } 208 209 public static void clear() { 210 prob = null; 211 stringToIndex.clear(); 212 indexToString.clear(); 213 } 214 215 public static Integer getIndex(String str) { 216 if (!stringToIndex.containsKey(str)) { 217 return alphabet.indexOf(" "); 218 } 219 return stringToIndex.get(str); 220 } 221 public static String getString(Integer index) { 222 if (!indexToString.containsKey(index)) { 223 return " "; 224 } 225 return indexToString.get(index); 226 } 227 228 public static int computeIndex(String str) { 229 int index = 0; 230 int radix = alphabet.length(); 231 232 for (int i = 0; i < str.length(); i++) { 233 int val = alphabet.indexOf("" + str.charAt(i)); 234 if (val < 0) continue; 235 236 index += val * Math.pow(radix, i); 237 radix++; 238 } 239 240 return index; 241 } 242 243 244 public static void main(String[] args) { 245 List<String> names = createNames(); 246 load(names, 3); 247 248 249// for (int i = 0; i < 1000; i++) { 250// MarkovNameResult r = generate(null); 251// //if (r != null && r.name != null && r.probability > 1000 && !names.contains(r.name) && r.name.length() > 4) { 252// if (r != null && r.name != null) { 253// System.out.println(r.name + "\t\t\t\t(" + (int) r.probability + ")"); 254// } 255// } 256 Set<String> generated = new LinkedHashSet<String>(); 257 for (int i = 0; i < 20000; i++) { 258 MarkovNameResult r = MarkovNames.generate(null); 259 if (r == null) continue; 260 if (r.name == null) continue; 261 if (names.contains(r.name)) continue; 262 if (generated.contains(r.name)) continue; 263 264 System.out.println(r.name); 265 generated.add(r.name); 266 } 267 } 268 269 public static boolean containsWord(String in, String word) { 270 String [] split = in.split(" |-"); 271 for (String curr : split) { 272 if (curr.toLowerCase().equals(word.toLowerCase())) { 273 return true; 274 } 275 } 276 return false; 277 } 278 279 public static boolean containsBad(String in) { 280 if (blocked.contains(in.toLowerCase())) return true; 281 282 String [] split = in.split(" |-"); 283 for (String curr : split) { 284 if (badWords.contains(curr.toLowerCase())) return true; 285 } 286 287 boolean allBlocked = true; 288 for (String curr : split) { 289 if (!blocked.contains(curr.toLowerCase())) { 290 allBlocked = false; 291 break; 292 } 293 } 294 if (allBlocked) return true; 295 296 return false; 297 } 298 299 public static Set<String> badWords = new HashSet<String>(); 300 public static Set<String> blocked = new HashSet<String>(); 301 static { 302 blocked = new HashSet<String>(); 303 blocked.add("yes"); 304 blocked.add("the"); 305 blocked.add("new"); 306 blocked.add("old"); 307 blocked.add("and"); 308 blocked.add("but"); 309 blocked.add("for"); 310 blocked.add("all"); 311 blocked.add("any"); 312 blocked.add("are"); 313 blocked.add("ask"); 314 blocked.add("etc"); 315 blocked.add("far"); 316 blocked.add("few"); 317 blocked.add("get"); 318 blocked.add("got"); 319 blocked.add("him"); 320 blocked.add("his"); 321 blocked.add("how"); 322 blocked.add("inc"); 323 blocked.add("may"); 324 blocked.add("non"); 325 blocked.add("nor"); 326 blocked.add("not"); 327 blocked.add("now"); 328 blocked.add("off"); 329 blocked.add("one"); 330 blocked.add("our"); 331 blocked.add("out"); 332 blocked.add("own"); 333 blocked.add("per"); 334 blocked.add("que"); 335 blocked.add("saw"); 336 blocked.add("say"); 337 blocked.add("sub"); 338 blocked.add("too"); 339 blocked.add("try"); 340 blocked.add("two"); 341 blocked.add("use"); 342 blocked.add("lay"); 343 blocked.add("yet"); 344 blocked.add("you"); 345 346 badWords = new HashSet<String>(); 347 badWords.add("fuck"); 348 badWords.add("fucks"); 349 badWords.add("fucker"); 350 badWords.add("fucking"); 351 badWords.add("fucked"); 352 badWords.add("shit"); 353 badWords.add("shits"); 354 badWords.add("cunt"); 355 badWords.add("cunts"); 356 badWords.add("bitch"); 357 badWords.add("bitches"); 358 badWords.add("ass"); 359 badWords.add("arse"); 360 badWords.add("arses"); 361 badWords.add("asses"); 362 badWords.add("dick"); 363 badWords.add("dicks"); 364 badWords.add("cock"); 365 badWords.add("cocks"); 366 badWords.add("nigga"); 367 badWords.add("niggas"); 368 badWords.add("nigger"); 369 badWords.add("niggers"); 370 badWords.add("shitass"); 371 badWords.add("whore"); 372 badWords.add("twat"); 373 badWords.add("twats"); 374 badWords.add("pussy"); 375 badWords.add("pussys"); 376 badWords.add("pussies"); 377 badWords.add("butt"); 378 badWords.add("butts"); 379 badWords.add("anus"); 380 } 381 382 383 public static List<String> createNames() { 384 List<String> names = new ArrayList<String>(); 385 386 names.add("Aelurus"); 387 names.add("Hera"); 388 names.add("Ares"); 389 names.add("Deimos"); 390 names.add("Phobos"); 391 names.add("Kydoimos"); 392 names.add("Makhai"); 393 names.add("Mysminai"); 394 names.add("Polemos"); 395 names.add("Hebe"); 396 names.add("Alexiares"); 397 names.add("Anicetus"); 398 names.add("Eris"); 399 names.add("Dysnomia"); 400 names.add("Lethe"); 401 names.add("Limos"); 402 names.add("Algos"); 403 names.add("Neikea"); 404 names.add("Eleuthia"); 405 names.add("Enyo"); 406 names.add("Enyalius"); 407 names.add("Baraq"); 408 names.add("Zumurrud"); 409 names.add("Lithos"); 410 names.add("Temblor"); 411 names.add("Baal"); 412 names.add("Bel"); 413 names.add("Haddu"); 414 names.add("Ishkur"); 415 names.add("Enki"); 416 names.add("Dilmun"); 417 names.add("Ki"); 418 names.add("Nintul"); 419 names.add("Ninsutu"); 420 names.add("Ninkasi"); 421 names.add("Dazimua"); 422 names.add("Enshagag"); 423 names.add("Nintu"); 424 names.add("Ninsar"); 425 names.add("Ninkurra"); 426 names.add("Uttu"); 427 names.add("Isimud"); 428 names.add("Ishtar"); 429 names.add("Dumuzi"); 430 names.add("Gudam"); 431 names.add("Galatura"); 432 names.add("Kurjara"); 433 names.add("Dagon"); 434 names.add("Belatu"); 435 names.add("Godiva"); 436 names.add("Great Dismal"); 437 names.add("Herzog"); 438 names.add("Pandemonium"); 439 names.add("Mulciber"); 440 names.add("Mammon"); 441 names.add("Leviathon"); 442 names.add("Asmodeus"); 443 names.add("Belphegor"); 444 names.add("Belial"); 445 names.add("Berith"); 446 names.add("Ashtoreth"); 447 names.add("Sidon"); 448 names.add("Galera"); 449 names.add("Moloch"); 450 names.add("Utopia"); 451 names.add("Azathoth"); 452 names.add("Abaddon"); 453 names.add("Dis"); 454 names.add("Medea"); 455 names.add("Crucible"); 456 names.add("Wyrm"); 457 names.add("Dantalion"); 458 names.add("Humility"); 459 names.add("Romance"); 460 names.add("Wan"); 461 names.add("Leeloo"); 462 names.add("Zhu Que"); 463 names.add("Ada"); 464 names.add("Rukh"); 465 names.add("Zenobia"); 466 names.add("Labyrinth"); 467 names.add("Genbu"); 468 names.add("Qilin"); 469 names.add("Black Emperor"); 470 names.add("Myrkheim"); 471 names.add("Idunn"); 472 names.add("Draupnir"); 473 names.add("Ivaldi"); 474 names.add("Brokr"); 475 names.add("Gadfly"); 476 names.add("Eitri"); 477 names.add("Gullinbursti"); 478 names.add("Habrok"); 479 names.add("Jotunheim"); 480 names.add("Greip"); 481 names.add("Gjalp"); 482 names.add("Bardarbunga"); 483 names.add("Thrivaldi"); 484 names.add("Zosimos"); 485 names.add("$parent's Wheel"); 486 names.add("Ezekial's Wheel"); 487 names.add("Arc of $parent"); 488 names.add("$parent's Wreath"); 489 names.add("Torq of $parent"); 490 names.add("Crown of $parent"); 491 names.add("Ring System"); 492 names.add("Accretion Disk"); 493 names.add("The Ouroboros"); 494 names.add("$parent's Girdle"); 495 names.add("Iron Stream"); 496 names.add("Stone River"); 497 names.add("The Glittering Band"); 498 names.add("Asteroid Belt"); 499 names.add("Stone Conclave"); 500 names.add("Freyja"); 501 names.add("Brisingamen"); 502 names.add("Wotan"); 503 names.add("Draupnir"); 504 names.add("Hlidskjalf"); 505 names.add("Ring of Gyges"); 506 names.add("Fenrir"); 507 names.add("Gjoll"); 508 names.add("Sledovik"); 509 names.add("Sessho-seki"); 510 names.add("Arkady"); 511 names.add("Rocannon's World"); 512 names.add("Baslag"); 513 names.add("Boone"); 514 names.add("Zakalwe"); 515 names.add("Darkense"); 516 names.add("Livueta"); 517 names.add("Elethiomel "); 518 names.add("Staberinde"); 519 names.add("Cache"); 520 names.add("Ged"); 521 names.add("Palaver"); 522 names.add("Rigamarole"); 523 names.add("Scrimshaw"); 524 names.add("Hadria"); 525 names.add("Rosas"); 526 names.add("Orobas"); 527 names.add("Murmur"); 528 names.add("Asmoday"); 529 names.add("Marax"); 530 names.add("Amon"); 531 names.add("Komarov"); 532 names.add("Nibiru"); 533 names.add("Brahe"); 534 names.add("Perseus"); 535 names.add("Cerenkov"); 536 names.add("Cygnus"); 537 names.add("Saurus"); 538 names.add("Pisces"); 539 names.add("Carina"); 540 names.add("Draco"); 541 names.add("Elysia"); 542 names.add("Irkalla"); 543 names.add("Meropis"); 544 names.add("Nysa"); 545 names.add("Paititi"); 546 names.add("Suddene"); 547 names.add("Yomi"); 548 names.add("Baltia"); 549 names.add("Union"); 550 names.add("Jeremiah's World"); 551 names.add("Strathcona"); 552 names.add("Tamsin"); 553 names.add("Kete"); 554 names.add("Hrosa"); 555 names.add("Aether"); 556 names.add("Eros"); 557 names.add("Asphodel"); 558 names.add("Erebus"); 559 names.add("Nyx"); 560 names.add("Acheron"); 561 names.add("Kharon"); 562 names.add("Tartarus"); 563 names.add("Khthon"); 564 names.add("Bothros"); 565 names.add("Megaron"); 566 names.add("Thanatos"); 567 names.add("Hypnos"); 568 names.add("Morpheus"); 569 names.add("Phobetor"); 570 names.add("Phantasos"); 571 names.add("Oneiroi"); 572 names.add("Lethe"); 573 names.add("Cocytus"); 574 names.add("Oceanus Nebula"); 575 names.add("Elysion"); 576 names.add("Minos"); 577 names.add("Khora"); 578 names.add("Mnemosyne"); 579 names.add("Calliope"); 580 names.add("Myhdon"); 581 names.add("Edonus"); 582 names.add("Biston"); 583 names.add("Kleio"); 584 names.add("Hyacinth "); 585 names.add("Euterpe"); 586 names.add("Rhesus"); 587 names.add("Erato"); 588 names.add("Melpomene"); 589 names.add("Polymnia"); 590 names.add("Aglaope"); 591 names.add("Leucosia"); 592 names.add("Ligeia"); 593 names.add("Molpe"); 594 names.add("Pathenope"); 595 names.add("Peisinoe"); 596 names.add("Thelxiope"); 597 names.add("Terpsichore"); 598 names.add("Thalia"); 599 names.add("The Korybantes"); 600 names.add("Urania"); 601 names.add("Linus"); 602 names.add("Dia"); 603 names.add("Helicon"); 604 names.add("Aoide"); 605 names.add("Melete"); 606 names.add("Mneme"); 607 names.add("Parnassos"); 608 names.add("The Banshee"); 609 names.add("The Sirens"); 610 names.add("Orpheus"); 611 names.add("Tragedy"); 612 names.add("The Kuretes"); 613 names.add("Mangindusa"); 614 names.add("Bugawasin"); 615 names.add("Polo"); 616 names.add("Sedumunadoc"); 617 names.add("Tabiacoud"); 618 names.add("Anggugru"); 619 names.add("Balugu"); 620 names.add("Kalabagang"); 621 names.add("Taliyakad"); 622 names.add("Langit"); 623 names.add("Basad"); 624 names.add("Sidpan"); 625 names.add("Dibuwat"); 626 names.add("Kavacha"); 627 names.add("Orm"); 628 names.add("Ogion"); 629 names.add("Ring of Morred"); 630 names.add("Selidor"); 631 names.add("Nug"); 632 names.add("Yeg"); 633 names.add("Rhogog"); 634 names.add("Hastur"); 635 names.add("Yig"); 636 names.add("Rama"); 637 names.add("Hanuman"); 638 names.add("Vanara"); 639 names.add("Surasa"); 640 names.add("Vasuki"); 641 names.add("The Nagas"); 642 names.add("Kaliya"); 643 names.add("Manasa"); 644 names.add("Bakunawa"); 645 names.add("Karkotaka"); 646 names.add("Mucalinda"); 647 names.add("Padmavati"); 648 names.add("Pearl River"); 649 names.add("Zmey"); 650 names.add("Lamya"); 651 names.add("Smok"); 652 names.add("Stygia"); 653 names.add("Cimmeria"); 654 names.add("Magen"); 655 names.add("Zirnitra"); 656 names.add("Arkona"); 657 names.add("Ved"); 658 names.add("Kolobok"); 659 names.add("Mokosh"); 660 names.add("Perun"); 661 names.add("Morana"); 662 names.add("Veles"); 663 names.add("Jarilo"); 664 names.add("Morana"); 665 names.add("Svarog"); 666 names.add("Dazbog"); 667 names.add("Indrik"); 668 names.add("Stribog"); 669 names.add("Gamayun"); 670 names.add("Sirin"); 671 names.add("Alkonost"); 672 names.add("The Simargl"); 673 names.add("Baba Yaga"); 674 names.add("Buyan"); 675 names.add("Koschei"); 676 names.add("Kitezh"); 677 names.add("Neter"); 678 names.add("Pontus"); 679 names.add("Tiamat"); 680 names.add("Apsu"); 681 names.add("Lotan"); 682 names.add("Basmu"); 683 names.add("Usumgallu"); 684 names.add("Masmahhu"); 685 names.add("Mushussu"); 686 names.add("Lahmu"); 687 names.add("Ugallu"); 688 names.add("Uridimmu"); 689 names.add("Girtablullu"); 690 names.add("Umu Dabrutu"); 691 names.add("Kulullu"); 692 names.add("Kusarikku"); 693 names.add("Yaw"); 694 names.add("Rahab"); 695 names.add("Tannin"); 696 names.add("Anzu"); 697 names.add("Ausir"); 698 names.add("Horos"); 699 names.add("Nekhen"); 700 names.add("Anapa"); 701 names.add("Atuan"); 702 names.add("Tenar"); 703 names.add("Kossil"); 704 names.add("Rota Fortunae"); 705 names.add("Siege Perilous"); 706 names.add("World Mill"); 707 names.add("Ara"); 708 names.add("Durer's Star"); 709 names.add("Melancholia"); 710 names.add("Moskva"); 711 names.add("Griseus"); 712 names.add("Breq"); 713 names.add("Hungry Ghost"); 714 names.add("Diyu"); 715 names.add("Yama"); 716 names.add("Naihe Qiao"); 717 names.add("Youdu"); 718 names.add("Qinguang"); 719 names.add("Bing Diyu"); 720 names.add("Chujiang"); 721 names.add("Heisheng Dadi"); 722 names.add("Songdi"); 723 names.add("Wuguan"); 724 names.add("Xuechi"); 725 names.add("Yanluo"); 726 names.add("Diancheng"); 727 names.add("Jiaohuan"); 728 names.add("Taishan"); 729 names.add("Roujiang"); 730 names.add("Dushi"); 731 names.add("Menguo"); 732 names.add("Pingden"); 733 names.add("Avici"); 734 names.add("Jigoku"); 735 names.add("Enma"); 736 names.add("Gargoyle"); 737 names.add("Familiar"); 738 names.add("Schrat"); 739 names.add("Kobold"); 740 names.add("Youming"); 741 names.add("Yinjian"); 742 names.add("Soleyn"); 743 names.add("Glowan"); 744 names.add("Sagan"); 745 names.add("Robinson's Moon"); 746 names.add("Idir"); 747 names.add("Morthanveld"); 748 names.add("Issorile"); 749 names.add("Azad"); 750 names.add("Gormenghast"); 751 names.add("Knole"); 752 names.add("Carcassonne"); 753 names.add("Sark"); 754 names.add("Rameumptom"); 755 names.add("Vidur"); 756 names.add("Jahannam"); 757 names.add("Zaqqum"); 758 names.add("Maalik"); 759 names.add("Haawiyah"); 760 names.add("Barzakh"); 761 names.add("Al Nar"); 762 names.add("Jahim"); 763 names.add("Jannah"); 764 names.add("Touba"); 765 names.add("Araf"); 766 names.add("Sheol"); 767 names.add("Rephaim"); 768 names.add("Perdition"); 769 names.add("Aaru"); 770 names.add("Neter-hkertet"); 771 names.add("Erlig"); 772 names.add("Karoaglanlar"); 773 names.add("Karakizlar"); 774 names.add("Karash"); 775 names.add("Matyr"); 776 names.add("Shyngay"); 777 names.add("Komur"); 778 names.add("Badysh"); 779 names.add("Yabash"); 780 names.add("Temir"); 781 names.add("Uchar"); 782 names.add("Kerey"); 783 names.add("Ulgan"); 784 names.add("Maidere"); 785 names.add("The Ordog"); 786 names.add("Yav"); 787 names.add("Prav"); 788 names.add("Nav"); 789 names.add("Anyox"); 790 names.add("Atlin"); 791 names.add("The Chechidla"); 792 names.add("Comiaken"); 793 names.add("Cultus"); 794 names.add("Gingolx"); 795 names.add("The Nechako"); 796 names.add("Tsimshian"); 797 names.add("Ivavik"); 798 names.add("Ghost Dance"); 799 names.add("Mag Mell"); 800 names.add("Loka"); 801 names.add("Cipactli"); 802 names.add("Ehecatl"); 803 names.add("Spirit Wind"); 804 names.add("Agiel"); 805 names.add("Tesh"); 806 names.add("Rohagi"); 807 names.add("Cymek"); 808 names.add("Bered Kai Nev"); 809 names.add("Samael"); 810 names.add("Agrat bat Mahlat"); 811 names.add("Amamar"); 812 names.add("Naamah"); 813 names.add("Lilith"); 814 names.add("Eisheth"); 815 names.add("Zepar"); 816 names.add("The Grigori"); 817 names.add("The Sentinels"); 818 names.add("Suriel"); 819 names.add("Old Goat"); 820 names.add("Kochab"); 821 names.add("Yaqum"); 822 names.add("Asbeel"); 823 names.add("Gadreel"); 824 names.add("Penemue"); 825 names.add("Kasdaye"); 826 names.add("Cambriel Nebula"); 827 names.add("Armaros' Work"); 828 names.add("The Myriad"); 829 names.add("The Lost Legion"); 830 names.add("Al Kathab"); 831 names.add("The Armada"); 832 names.add("Kohnid"); 833 names.add("The Gengris"); 834 names.add("New Suroch"); 835 names.add("Xezbeth"); 836 names.add("Xaphan"); 837 names.add("Vanth"); 838 names.add("The Erinyes"); 839 names.add("Charun"); 840 names.add("Calu"); 841 names.add("Turms"); 842 names.add("Aita"); 843 names.add("Anvil"); 844 names.add("Stray Dog"); 845 names.add("Valefar"); 846 names.add("Laverna"); 847 names.add("Maderakka"); 848 names.add("Sarakka"); 849 names.add("Juksakka"); 850 names.add("Uksakka"); 851 names.add("Jabme-Akka"); 852 names.add("Maan-Emo"); 853 names.add("An"); 854 names.add("Ki"); 855 names.add("Anu"); 856 names.add("Long"); 857 names.add("Quy"); 858 names.add("Lan"); 859 names.add("Phung"); 860 names.add("Art of the Jinns"); 861 names.add("The Qarin"); 862 names.add("Tuchulcha"); 863 names.add("Suanggi"); 864 names.add("Surgat"); 865 names.add("The Imp"); 866 names.add("Chax"); 867 names.add("The Raven"); 868 names.add("The Murder"); 869 names.add("Saleos"); 870 names.add("Puloman"); 871 names.add("Indrani Sachi"); 872 names.add("Sivasri"); 873 names.add("The Pontianak"); 874 names.add("The Pocong"); 875 names.add("O Tokata"); 876 names.add("Osor"); 877 names.add("Empusa"); 878 names.add("Mormo"); 879 names.add("Onoskelis"); 880 names.add("Mara"); 881 names.add("Krampus"); 882 names.add("Kroni"); 883 names.add("Ravanan"); 884 names.add("Kaliyan"); 885 names.add("Thuriothanan"); 886 names.add("Kad"); 887 names.add("The Marid"); 888 names.add("Hantu Raya"); 889 names.add("Tuyul"); 890 names.add("Koman-tong"); 891 names.add("Koman-lay"); 892 names.add("Kwee Kia"); 893 names.add("Jenglot"); 894 names.add("Gusoyn"); 895 names.add("Gallu"); 896 names.add("Gaap"); 897 names.add("Dzoavits"); 898 names.add("Klabautermann"); 899 names.add("$parent's Jinx"); 900 names.add("$parent's Hex"); 901 names.add("The Hecatomb"); 902 names.add("Grigri"); 903 names.add("Bakaak"); 904 names.add("Jumbee's Dance"); 905 names.add("Kigatilik"); 906 names.add("Qiqirn"); 907 names.add("Tupilaq"); 908 names.add("Tizheruk"); 909 names.add("Run of the Haietlik"); 910 names.add("Unhcegila"); 911 names.add("Okeus"); 912 names.add("Shapishico"); 913 names.add("Atahsaya"); 914 names.add("Wekufe"); 915 names.add("Gualichu"); 916 names.add("Babi Ngepet"); 917 names.add("Royllo"); 918 names.add("Braxil"); 919 names.add("Mam"); 920 names.add("Zuane"); 921 names.add("Caprica"); 922 names.add("Letum"); 923 names.add("Pallida"); 924 names.add("Somnus"); 925 names.add("Nox"); 926 names.add("Mors"); 927 names.add("The Pactolus"); 928 names.add("Socordia"); 929 names.add("Ignavia"); 930 names.add("Sabriel"); 931 names.add("Lirael"); 932 names.add("Clariel"); 933 names.add("Ranna"); 934 names.add("Mosrael"); 935 names.add("Kibeth"); 936 names.add("Dyrim"); 937 names.add("Belgaer"); 938 names.add("Astarael"); 939 names.add("Saraneth"); 940 names.add("Tanmar"); 941 names.add("Maida"); 942 names.add("Bentusle"); 943 names.add("Asmaidas"); 944 names.add("Groclant"); 945 names.add("Nona"); 946 names.add("Decima"); 947 names.add("Morta"); 948 names.add("Ratna"); 949 names.add("Sharkara"); 950 names.add("Valuka"); 951 names.add("Panka"); 952 names.add("Dhuma"); 953 names.add("Tamaha"); 954 names.add("Mahatamaha"); 955 names.add("Achuguayo"); 956 names.add("Teide"); 957 names.add("Gara"); 958 names.add("Jonay"); 959 names.add("Chijoraji"); 960 names.add("Achuhucanac"); 961 names.add("Ganigo"); 962 names.add("Tagoror"); 963 names.add("Goro"); 964 names.add("Sose"); 965 names.add("Faunus"); 966 names.add("Bona Dea"); 967 names.add("Pitys"); 968 names.add("Echo"); 969 names.add("Kelaineus"); 970 names.add("Argennon"); 971 names.add("Aigikoros"); 972 names.add("Eugeneios"); 973 names.add("Omester"); 974 names.add("Daphoenus"); 975 names.add("Philamnos"); 976 names.add("Xanthos"); 977 names.add("Glaukos"); 978 names.add("Phorbas"); 979 names.add("Leng"); 980 names.add("Kang Admi"); 981 names.add("Mika"); 982 names.add("Bun Manchi"); 983 names.add("Migoi"); 984 names.add("Dzu-teh"); 985 names.add("Miche"); 986 names.add("Sarkomand"); 987 names.add("Cerenerian Sea"); 988 names.add("Kephalos"); 989 names.add("Procris"); 990 names.add("Minyas"); 991 names.add("Cymene"); 992 names.add("Arcesius"); 993 names.add("Astraeus"); 994 names.add("Boreas"); 995 names.add("Notus"); 996 names.add("Eurus"); 997 names.add("Zephyrus"); 998 names.add("Toci"); 999 names.add("Coatlicue"); 1000 names.add("Centeotl"); 1001 names.add("Chicomecoatl"); 1002 names.add("Texcatlipoca"); 1003 names.add("Xantico"); 1004 names.add("Chantico"); 1005 names.add("Mayahue"); 1006 names.add("Mixcoatl"); 1007 names.add("Centzon Huitznauhtin"); 1008 names.add("Tlaloc"); 1009 names.add("The Anillo"); 1010 names.add("Tohil"); 1011 names.add("Denyen"); 1012 names.add("Ekwesh"); 1013 names.add("Peleset"); 1014 names.add("Sherden"); 1015 names.add("Teresh"); 1016 names.add("Weshesh"); 1017 names.add("Tjeker"); 1018 names.add("Bull Moose"); 1019 names.add("Minnow"); 1020 names.add("Will-o-wisp"); 1021 names.add("Stingy Jack"); 1022 names.add("City of Brass"); 1023 names.add("Saraph"); 1024 names.add("Harah"); 1025 names.add("Hazor"); 1026 names.add("Gezor"); 1027 names.add("Ningishzida"); 1028 names.add("Azimua"); 1029 names.add("Nehushtan"); 1030 names.add("Oberon"); 1031 names.add("Cymnea"); 1032 names.add("Faiella"); 1033 names.add("Clarissa"); 1034 names.add("Riga"); 1035 names.add("Sawal"); 1036 names.add("Dara"); 1037 names.add("Mandor"); 1038 names.add("Jurt"); 1039 names.add("Corwin"); 1040 names.add("Merlin"); 1041 names.add("Brand"); 1042 names.add("Jasra"); 1043 names.add("Luke"); 1044 names.add("Random"); 1045 names.add("Morganthe"); 1046 names.add("Martin"); 1047 names.add("Morganna"); 1048 names.add("Moronoe"); 1049 names.add("Mazoe"); 1050 names.add("Gliten"); 1051 names.add("Glitonea"); 1052 names.add("Tyronoe"); 1053 names.add("Thiten"); 1054 names.add("Pomorum"); 1055 names.add("Basilia"); 1056 names.add("Mentonomon"); 1057 names.add("Suroch"); 1058 names.add("Grimnebulin"); 1059 names.add("Weaver"); 1060 names.add("Tesh"); 1061 names.add("Shining Tor"); 1062 names.add("Vannin"); 1063 names.add("Manau"); 1064 names.add("Monabia"); 1065 names.add("Cushag"); 1066 names.add("Ayre"); 1067 names.add("Neb"); 1068 names.add("Dhoo"); 1069 names.add("Keter"); 1070 names.add("Zohar"); 1071 names.add("Binah"); 1072 names.add("Netzach"); 1073 names.add("Yesod"); 1074 names.add("Hod"); 1075 names.add("Simchah"); 1076 names.add("Emet"); 1077 names.add("Grimsnes"); 1078 names.add("Alfur"); 1079 names.add("Grensdalur"); 1080 names.add("Troll"); 1081 names.add("Askja"); 1082 names.add("Vofa"); 1083 names.add("Surtsey"); 1084 names.add("Sal"); 1085 names.add("Krossa"); 1086 names.add("Hvita"); 1087 names.add("Olfusa"); 1088 names.add("Grendel"); 1089 names.add("Modor"); 1090 names.add("The Chiral Wisp"); 1091 names.add("Avice"); 1092 names.add("Maculatus"); 1093 names.add("Deinos"); 1094 names.add("Vuzgrimeti"); 1095 names.add("Balwom"); 1096 names.add("Spira"); 1097 names.add("Zaranya"); 1098 names.add("The Motley"); 1099 names.add("Moile"); 1100 names.add("Prism"); 1101 names.add("Arcus"); 1102 names.add("Welo"); 1103 names.add("Acorn"); 1104 names.add("Hope"); 1105 names.add("Wonder"); 1106 names.add("The Confluence"); 1107 names.add("Cirrus"); 1108 names.add("Olwyn"); 1109 names.add("Pantheon"); 1110 names.add("Eye"); 1111 names.add("Pharos"); 1112 names.add("Tempest"); 1113 names.add("The Precipice"); 1114 names.add("Archon"); 1115 names.add("Sabazios"); 1116 names.add("Terror"); 1117 names.add("Despair"); 1118 names.add("Abandon"); 1119 names.add("Legion"); 1120 names.add("Golgotha"); 1121 names.add("Blost"); 1122 names.add("Uz"); 1123 names.add("Hul"); 1124 names.add("Togar"); 1125 names.add("Mesha"); 1126 names.add("Mu"); 1127 names.add("Naacal"); 1128 names.add("Zahra"); 1129 names.add("Hufra"); 1130 names.add("Zill"); 1131 names.add("Swang"); 1132 names.add("Troano"); 1133 names.add("Mayda"); 1134 names.add("Bolunda"); 1135 names.add("Brazir"); 1136 names.add("Mam"); 1137 names.add("Vlaanderen"); 1138 names.add("Asmaida"); 1139 names.add("Chagos"); 1140 names.add("Eiger"); 1141 names.add("Ran"); 1142 names.add("Vigrid"); 1143 names.add("Hrym"); 1144 names.add("Nog"); 1145 names.add("Gryla"); 1146 names.add("Cormoran"); 1147 names.add("Morvah"); 1148 names.add("Zennor"); 1149 names.add("Madron"); 1150 names.add("Athos"); 1151 names.add("Cadmus"); 1152 names.add("Echion"); 1153 names.add("Laius"); 1154 names.add("The Spartoi"); 1155 names.add("Bellerophon"); 1156 names.add("Cilix"); 1157 names.add("Telephassa"); 1158 names.add("Telephe"); 1159 names.add("Agriope"); 1160 names.add("Shevar"); 1161 names.add("Ferragut"); 1162 names.add("Kroni"); 1163 names.add("Kapre"); 1164 names.add("Zipacna"); 1165 names.add("Mbombo"); 1166 names.add("Basan"); 1167 names.add("Wendigo"); 1168 names.add("Abraxas"); 1169 names.add("Vassago"); 1170 names.add("Ukobach"); 1171 names.add("Valac"); 1172 names.add("Toyol"); 1173 names.add("Solas"); 1174 names.add("Shedim"); 1175 names.add("Raum"); 1176 names.add("Ose"); 1177 names.add("Lempo"); 1178 names.add("Lilin"); 1179 names.add("Killakee Cat"); 1180 names.add("Ipos"); 1181 names.add("Hantu Raya"); 1182 names.add("The Polong"); 1183 names.add("Pelesit"); 1184 names.add("Blue Crow"); 1185 names.add("Marathon"); 1186 names.add("Mazu"); 1187 names.add("Svarga"); 1188 names.add("Sunda"); 1189 names.add("Garbhodaka"); 1190 names.add("Pitrloka"); 1191 names.add("Dalar's Star"); 1192 names.add("Kardashev"); 1193 names.add("Hero"); 1194 names.add("Vecna"); 1195 names.add("Zendar"); 1196 names.add("Yaahl"); 1197 names.add("Sahara"); 1198 names.add("Gobi"); 1199 names.add("Kalahari"); 1200 names.add("Karakum"); 1201 names.add("Sonora"); 1202 names.add("Atacama"); 1203 names.add("Mojave"); 1204 names.add("Namib"); 1205 names.add("Aegea"); 1206 names.add("New Labrador"); 1207 names.add("New Biscay"); 1208 names.add("New Azov"); 1209 names.add("New Cordova"); 1210 names.add("New Pender"); 1211 names.add("New Guayaquil"); 1212 names.add("Third Bogota"); 1213 names.add("Yuendumu"); 1214 names.add("Yulara"); 1215 names.add("Ghan"); 1216 names.add("Warmun"); 1217 names.add("The Ord"); 1218 names.add("Naikoon"); 1219 names.add("Haanas"); 1220 names.add("The Pines"); 1221 names.add("New Caldwell"); 1222 names.add("Potato"); 1223 1224 return names; 1225 } 1226} 1227 1228 1229 1230 1231 1232 1233